diff --git a/codegen/vulkan/vulkan-docs-next/BUILD.adoc b/codegen/vulkan/vulkan-docs-next/BUILD.adoc
new file mode 100644
index 0000000..cd09f3f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/BUILD.adoc
@@ -0,0 +1,505 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan^(R)^ Specification Build Instructions and Notes
+:toc2:
+:toclevels: 2
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+
+[[intro]]
+== Introduction
+
+This README describes how to build the Vulkan API specification, reference
+pages, and/or other related targets.
+
+It documents how to set up your build environment, build steps and targets,
+and contains some troubleshooting advice.
+
+
+[[building]]
+== Building the Spec
+
+First, clone the Khronos GitHub repository containing the Vulkan
+specification to your local Linux, Windows, or Mac PC.
+The repository is located at https://github.com/KhronosGroup/Vulkan-Docs/.
+
+Next, install all the necessary build tools (see <<depends,Software
+Dependencies>> below).
+If you are using the <<depends-docker, Khronos-Provided Docker Image>>,
+which we strongly recommend, one way to build using the image (assuming a
+Linux docker host) is:
+
+    $ scripts/runDocker
+
+executed from the specification repository root.
+
+`runDocker` runs the Docker image with the cloned repository mounted under
+/vulkan and accesses it as a specified user (set to your own user and group
+ID), so that it does not get filled with files owned by another user.
+The script leaves you inside a bash shell in the running image.
+Execute the commands:
+
+    $ cd /vulkan
+    $ ./makeSpec -spec core html
+
+to build an HTML5 specification output for the core Vulkan 1.3
+specification, with no extensions included, or
+
+    $ cd /vulkan
+    $ ./makeSpec -spec all all
+
+to build the spec targets `html`, `pdf`, `styleguide`, `registry`,
+`manhtmlpages`, and `allchecks`, with *all* registered extensions included.
+
+There are many other ways of using the image, including inside a Continuous
+Integration pipeline; locally with persistent Docker volume storage of the
+repository; and so on.
+
+If you are not using our Docker image to build with, and you have a
+<<depends-nondocker, Non-Docker Build Environment>> with the entire
+toolchain installed, you can just invoke the same `make` commands from the
+repository root.
+
+[NOTE]
+.Note
+====
+You can modify the `runDocker` script to change the `docker` command-line
+options, but it is important to always use the Docker image specified in
+that script, so you have the latest version of the spec toolchain.
+====
+
+[NOTE]
+.Note
+====
+  * While it is possible to invoke `make` directly, this is rarely
+    appropriate or useful.
+    Usually dozens to hundreds of build options must be set to specify the
+    desired set of extensions to include in the specification.
+    The `makeSpec` python script, which is discussed in more detail
+    <<building-extensions, below>>, simplifies this process for common
+    cases.
+  * The `all` target takes a long time to run, and generates outputs that
+    are irrelevant for most users.
+    The `html` target just generates the HTML output, which is often all
+    that is needed for spec bugfixes not involving extensions.
+  * The default `make` options build a Vulkan 1.3 specification with no
+    optional extensions.
+  * The `validusage` target is not built as part of the `all` target, due to
+    it needing to be built with all extensions enabled (`-spec all`).
+    Building the `validusage` target will fail otherwise.
+====
+
+These targets generate a variety of output documents in the directory
+specified by the Makefile variable `$(OUTDIR)` (by default, `out/`).
+The checked-in file `out/index.html` links to all these
+targets, or they can individually be found as follows:
+
+Vulkan Specification::
+  * `html` -- Single-file HTML5 in `$(OUTDIR)/html/vkspec.html`, and KaTeX
+    dependency in $(OUTDIR)/katex
+  * `chunked` -- Chunked HTML5 in `$(OUTDIR)/html/chap?.html`
+  * `pdf` -- PDF in `$(OUTDIR)/pdf/vkspec.pdf`
+"`styleguide`" (Vulkan Documentation and Extensions: Procedures and Conventions)::
+  * `styleguide` -- Single-file HTML5 in `$(OUTDIR)/styleguide.html`
+XML Registry schema document::
+  * `registry` -- Single-file HTML5 in `$(OUTDIR)/registry.html`
+<<building-diff,Diff spec>>::
+  * `diff_html` -- Single-file HTML5 in `$(OUTDIR)/html/diff.html`
+<<refpages,Reference pages>>::
+  * `manhtmlpages` -- File-per-entry-point HTML in `$(OUTDIR)/man/html/*`.
+    Must be built with all extensions enabled (using `makeSpec -spec all`).
+<<validation-scripts,Validator output>>::
+  * None at present. The `allchecks` target writes to standard output unless
+    the underlying script is given additional options.
+Valid usage database::
+  * `validusage` - json database of all valid usage statements in the
+     specification. Must be built with `./makeAllExts` (for now).
+     Output in `$(OUTDIR)/validation/validusage.json`.
+     A validated schema for the output of this is stored in
+     `$(CURDIR)/config/vu-to-json/vu_schema.json`
+
+Once you have the basic build working, an appropriate parallelization
+option, such as `-j 8`, should significantly speed up the reference page
+builds.
+
+If you encounter problems refer to the <<troubleshooting>> section.
+
+
+[[building-versions]]
+=== Building Specifications for Different API Versions
+
+The `Makefile` defaults to building a Vulkan 1.3 specification.
+This is controlled by Asciidoctor attributes passed in the Makefile variable
+`$(VERSIONS)`
+To instead build a Vulkan 1.1 specification, pass
+
+----
+VERSIONS="VK_VERSION_1_0 VK_VERSION_1_1"
+----
+
+on the `makeSpec` command line.
+
+
+[[building-vulkansc]]
+=== Building the Vulkan SC Specification
+
+To build the Vulkan SC 1.0 specification, it is necessary both specify the
+API type via the `VULKAN_API` environment variable and specify the `sc1.0`
+version to the `makeSpec` command.
+
+To build the html spec for Vulkan SC API:
+
+----
+VULKAN_API="vulkansc" ./makeAllExts -version sc1.0 html
+----
+
+To build the Vulkan SC header files:
+
+----
+cd xml
+VULKAN_API="vulkansc" make
+----
+
+Valid values for the `VULKAN_API` environment are:
+
+  * `vulkan` - build the Vulkan API variant.
+  * `vulkansc` - build the Vulkan SC API variant.
+
+If `VULKAN_API` is not set, the repository default is used.
+
+[[building-extensions]]
+=== Building With Extensions Included
+
+Extensions are defined in the same source as the core Specification, but
+are only conditionally included in the output.
+https://asciidoctor.org/docs/user-manual/#attributes[Asciidoctor attributes]
+of the same name as the extension are used to define whether the extension
+is included or not -- defining such an attribute will cause the output to
+include the text for that extension.
+
+When building the specification, the extensions included are those specified
+as a space-separated list of extension names (e.g. `VK_KHR_surface`) in the
+Makefile variable `$(EXTENSIONS)`, usually set on the make command line.
+When changing the list of extensions, it is critical to remove all generated
+files using the `clean_generated` Makefile target, as the contents of
+generated files depends on `$(EXTENSIONS)`.
+
+The `makeSpec` wrapper script can clean generated files and then build one
+or more specification targets for a set of explicitly specified extensions,
+including all implicit extension dependencies of that set.
+It accepts these options:
+
+  * -clean - remove generated targets before building
+  * -v - print actions as well as executing them
+  * -n - print actions without executing them
+  * -genpath *path* - specify path to generated files (default `gen`)
+  * -spec *type* - build with specified sets of extensions.
+    *type* may be
+  ** *core* - no extensions added (default if not specified)
+  ** *khr* - all KHR extensions added
+  ** *ratified* - all ratified extensions (KHR and some EXT) added
+  ** *all* - all registered extensions added
+  * -extension *extname* - build with specified extension included,
+    as well as the set specified by `-spec`.
+    Can be given multiple times.
+  * All remaining targets are arbitrary `make` options or
+    targets in the Makefile.
+
+The `target(s)` passed to these scripts are arbitrary `make` options, and
+can be used to set Makefile variables and options discussed above, as well
+as specify actual build targets.
+For example, to build the HTML specification with all KHR extensions
+included as well as a single vendor extension:
+
+----
+$ ./makeSpec -clean -spec khr -extension VK_EXT_debug_report html
+----
+
+The scripts `makeAllExts`, `makeKHR`, and `makeExt` set appropriate options
+and invoke `makeSpec`, for backwards compatibility, but are no longer used
+by Khronos.
+
+The Makefile variable `$(APITITLE)` defines an additional string which is
+appended to the specification title.
+When building with extensions enabled, this should be set to something like
+`(with extension VK_extension_name)`.
+The `makeSpec` script already does this.
+
+The reference pages (the `manhtmlpages` target) must be built using the
+`-spec all` option; there are markup and scripting issues which will
+probably cause any more restricted set of refpages to fail to build.
+
+
+[[building-diff]]
+==== Building a Highlighted Extension Diff
+
+The `diff_html` target in the Makefile can be used to generate a version of
+the specification which highlights changes made to the specification by the
+inclusion of a particular set of extensions.
+
+Extensions in the Makefile variable `$(EXTENSIONS)` define the base
+extensions to be enabled by the specification, and these will not be
+highlighted in the output.
+Extensions in the Makefile variable `$(DIFFEXTENSIONS)` define the set of
+extensions whose changes to the text will be highlighted when they are
+enabled.
+Any extensions in both variables will be treated as if they were only
+included in `$(DIFFEXTENSIONS)`.
+`$(DIFFEXTENSIONS)` can be set when using the `makeSpec` script described
+above.
+
+In the resulting HTML document, content that has been added by one of the
+extensions will be highlighted with a lime background, and content that was
+removed will be highlighted with a pink background.
+Each section has an anchor of `#differenceN`, with an arrow (=>) at the end
+of each section which links to the next difference section.
+The first diff section is `#difference1`.
+
+[NOTE]
+.Note
+====
+This output is not without errors.
+It may instead result in visible `+++[.added]##content##+++` and
+`+++[.removed]##content##+++`, and so also highlights not being rendered.
+But such visible markup still correctly encapsulates the modified content.
+====
+
+
+[[building-test]]
+=== Alternate and Test Builds
+
+If you are just testing Asciidoctor formatting, macros, stylesheets, etc.,
+you may want to edit `vkspec.adoc` to just include your test code.
+The asciidoctor HTML build is very fast, even for the whole Specification,
+but PDF builds take several minutes.
+
+
+=== Images Used in the Specification
+
+All images used in the specification are in the `images/` directory in the
+SVG format, and were created with Inkscape.
+We recommend using Inkscape to modify or create new images, due to problems
+using SVG files created by some other tools; especially in the PDF builds.
+
+
+[[validation-scripts]]
+=== Validation Scripts
+
+The `allchecks` Makefile target runs a Python script that looks for markup
+errors, missing interfaces, macro misuse, and inconsistencies in the
+specification text.
+This script is necessarily heuristic, since it is dealing with lots of
+hand-written material, but it identifies many problems and can suggest
+solutions.
+This script is also run as part of the CI tests in the internal Khronos
+gitlab repository.
+
+
+[[macros]]
+== Our Asciidoctor Macros
+
+We use many custom Ruby macros in the reference pages and API spec
+Asciidoctor sources.
+The validator scripts rely on these macros as part of their checks.
+and you should use the macros whenever referring to an API command, struct,
+token, or enum name, so the documents are semantically tagged and more
+easily verifiable.
+
+The supported macros are defined in the `config/spec-macros/extension.rb`
+asciidoctor extension script.
+
+The tags used are described in the
+link:https://registry.khronos.org/vulkan/specs/1.1/styleguide.html[style
+guide] (generated from `styleguide.adoc`).
+
+We (may) eventually tool up the spec and reference pages to the point that
+anywhere there is a type or token referred to, clicking on (or perhaps
+hovering over) it in the HTML view will take reader to the definition of
+that type/token.
+That will take some more plumbing work to tag the stuff in the autogenerated
+include files, and do something sensible in the spec (e.g. resolve links to
+internal references).
+
+Most of these macros deeply need more intuitive names.
+
+
+[[refpages]]
+== Reference Pages
+
+The reference pages are extracted from the API Specification source, which
+has been tagged to help identify boundaries of language talking about
+different commands, structures, enumerants, and other types.
+A set of Python scripts extract and lightly massage the relevant tagged
+language into corresponding reference page sources.
+
+To regenerate the reference page sources from scratch yourself, execute:
+
+----
+./makeSpec -spec all refpages
+----
+
+The `genRef.py` script will generate many warnings, but most are just
+reminders that some pages are automatically generated.
+If everything is working correctly, all the `$(GENERATED)/refpage/*.adoc`
+files will be regenerated, but their contents will not change.
+
+If you add new API features to the Specification in a branch, make sure that
+the commands have the required tagging and that reference pages are
+generated for them, and build properly.
+
+When executing the `manhtmlpages` target in the Makefile, after building
+HTML versions of all reference pages extracted from the spec, symbolic links
+from aliases to the reference page for the API they alias will also be
+created.
+
+
+[[styles]]
+== Our Stylesheets
+
+We use an HTML stylesheet `config/khronos.css` derived from the
+https://asciidoctor.org/docs/produce-custom-themes-using-asciidoctor-stylesheet-factory/[Asciidoctor
+stylesheet factory] "`colony`" theme, with the default Arial font family
+replaced by the sans-serif https://en.wikipedia.org/wiki/Noto_fonts[Noto
+font family].
+
+
+[[styleguide]]
+== Vulkan Style Guide
+
+If you are writing new spec language or modifying existing language, see the
+link:https://registry.khronos.org/vulkan/specs/1.3/styleguide.html["`style
+guide`"] (formally titled "`Vulkan Documentation and Extensions: Procedures
+and Conventions`") document for details of our asciidoctor macros,
+extensions, mathematical equation markup, writing style, etc.
+
+
+[[depends]]
+== Software Dependencies
+
+This section describes the software components used by the Vulkan spec
+toolchain.
+
+In the past, we previously specified package versions and instructions for
+installing the toolchain in multiple desktop environments including Linux,
+MacOS X, and Microsoft Windows.
+The underlying components evolve rapidly, and we have not kept those
+instructions up to date.
+
+
+[[depends-docker]]
+=== Khronos-Provided Docker Image
+
+Khronos has published a Docker image containing a Debian Linux distribution
+with the entire toolchain preinstalled.
+
+We will occasionally update this image if needed, and we recommend people
+needing to build from this repository use the Docker image.
+
+Docker installation is beyond the scope of this document.
+Refer to link:https://docs.docker.com/get-docker/[the Docker website] for
+information about installing Docker on Linux, Windows, and MacOS X.
+
+The build image is *named* `khronosgroup/docker-images:asciidoctor-spec`.
+However, due to local and CI caching problems when this image is updated on
+dockerhub, we use the SHA256 of the latest image update, rather than the
+image name. The SHA256 can be determined from
+
+    $ git grep -h sha256: .gitlab-ci.yml
+
+which will print a line like
+
+    image: khronosgroup/docker-images@sha256:42123ba13792c4e809d037b69152c2230ad97fbf43b677338075ab9c928ab6ed
+
+Everything following `image: ` is the <imagename> to use. The first time you
+try to run Docker with this <imagename>, as is done by the `runDocker`
+script described above under <<building, Building the Spec>>, the image will
+be pulled from Dockerhub and cached locally on your machine.
+
+This image is used to build Specification output documents or other Makefile
+targets.
+
+[NOTE]
+.Note
+====
+When we update the image on Dockerhub, it is to add new components or update
+versions of components used in the specification toolchain.
+To save space, you may want to periodically purge old images using `docker
+images` and `docker rmi -f`.
+====
+
+
+[[depends-nondocker]]
+=== Non-Docker Build Environments
+
+We do not actively support building outside of our Docker image, but it is
+straightforward to reproduce our toolchain in a Debian (or similar APT-based
+Linux) distribution by executing the same steps as the
+link:https://github.com/KhronosGroup/DockerContainers/blob/main/asciidoctor-spec.Dockerfile[Dockerfile]
+used to build our Docker image.
+
+It should be possible to apply the same steps in a Windows Subsystem for
+Linux (WSL2) environment on Windows 10, as well.
+
+For other native environments, such as MacOS X and older Unix-like
+environments for Windows such as MinGW and Cygwin, we provided instructions
+in older versions of this document.
+While those instructions are out of date and have been removed from current
+versions of this document, you may be able to make use of
+link:https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.2.135/BUILD.adoc#depends[the
+version of BUILD.adoc in the v1.2.135 repository tag]
+
+[NOTE]
+.Note
+====
+While you do not have to use our Docker image, we cannot support every
+possible build environment.
+The Docker image is a straightforward way to build the specification in most
+modern desktop environments, without needing to install and update the spec
+toolchain yourself.
+====
+
+
+[[history]]
+== Revision History
+
+  * 2023-05-29 - Add Vulkan SC spec build instructions.
+  * 2022-10-11 - Update descriptions of using the Docker image to use the
+    `runDocker` script and the same SHA256 of the latest image as used by
+    CI.
+  * 2021-03-12 - Use the new Docker image.
+  * 2020-07-15 - Update to use `makeSpec` instead of `makeAllExts`.
+  * 2020-03-23 - Document Khronos' published Docker image for building the
+    spec, and remove all platform-specific instructions.
+  * 2018-12-04 - Update Rbenv and ruby gem installation instructions and
+    package dependencies for Linux and Ubuntu/Windows 10.
+  * 2018-10-25 - Update Troubleshooting, and Windows and Linux build. Plus
+    random editing.
+  * 2018-03-13 - Rename to BUILD.adoc and update for new directory
+    structure.
+  * 2018-03-05 - Update README for Vulkan 1.1 release.
+  * 2017-03-20 - Add description of prawn versioning problem and how to fix
+    it.
+  * 2017-03-06 - Add description of ruby-enum versioning problem and how to
+    fix it.
+  * 2017-02-13 - Move some comments here from ../../../README.md. Tweak
+    asciidoctor markup to more clearly delineate shell command blocks.
+  * 2017-02-10 - Add more Ruby installation guidelines and reflow the
+    document in accordance with the style guide.
+  * 2017-01-31 - Add rbenv instructions and update the README elsewhere.
+  * 2017-01-16 - Modified dependencies for Asciidoctor
+  * 2017-01-06 - Replace MathJax with KaTeX.
+  * 2016-08-25 - Update for the single-branch model.
+  * 2016-07-10 - Update for current state of spec and ref page generation.
+  * 2015-11-11 - Add new can: etc.
+    macros and DBLATEXPREFIX variable.
+  * 2015-09-21 - Convert document to asciidoc and rename to README.md in the
+    hope the gitlab browser will render it in some fashion.
+  * 2015-09-21 - Add descriptions of LaTeX and MathJax math support for all
+    output formats.
+  * 2015-09-02 - Added Cygwin package info.
+  * 2015-09-02 - Initial version documenting macros, required toolchain
+    components and versions, etc.
diff --git a/codegen/vulkan/vulkan-docs-next/CODE_OF_CONDUCT.adoc b/codegen/vulkan/vulkan-docs-next/CODE_OF_CONDUCT.adoc
new file mode 100644
index 0000000..d923209
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/CODE_OF_CONDUCT.adoc
@@ -0,0 +1,10 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Code of Conduct
+
+A reminder that this repository is managed by the Khronos Group.
+Interactions here should follow the
+https://www.khronos.org/about/code-of-conduct[Khronos Code of Conduct],
+which prohibits aggressive or derogatory language. Please keep the
+discussion friendly and civil.
diff --git a/codegen/vulkan/vulkan-docs-next/CONTRIBUTING.adoc b/codegen/vulkan/vulkan-docs-next/CONTRIBUTING.adoc
new file mode 100644
index 0000000..ba1d526
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/CONTRIBUTING.adoc
@@ -0,0 +1,39 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Contributing
+
+Contributions to the Vulkan-Docs repository are welcome.
+
+Contributions may be in the form of Issues proposing a change, or Pull
+Requests containing fixes for, or additions to:
+
+  * Specification text and other documentation
+  * XML API Registry
+  * Specification scripting / build toolchains and related infrastructure
+
+Please keep contributions focused on solving a single issue or bug.
+
+== Copyright Notice and License Template
+
+If you are adding a new file, it must be under one of the following
+licenses:
+
+  * Creative Commons Attribution 4.0 International, for specification text
+    (for example, link:vkspec.adoc[`vkspec.adoc`])
+  * Apache 2.0, for all other changes (for example,
+    link:scripts/reg.py[`reg.py`])
+  * Apache 2.0 OR MIT, for source-like files that may need to used in GPL
+    projects (for example, link:xml/vk.xml[`vk.xml`])
+
+We use a short license in each file consisting of just the copyright
+statement and the SPDX license identifier of the license applying to that
+file, and link to the full license text from
+link:LICENSE.adoc[`LICENSE.adoc`].
+
+== Contributor License Agreement
+
+When you propose a pull request on Vulkan-Docs you must execute the link:https://www.khronos.org/legal/Khronos_mixed_repository_CLA[Khronos
+Mixed Repository Contributor License Agreement], to confirm you own your work
+and are granting Khronos the necessary permissions to redistribute it under
+our licenses.
diff --git a/codegen/vulkan/vulkan-docs-next/COPYING.adoc b/codegen/vulkan/vulkan-docs-next/COPYING.adoc
new file mode 100644
index 0000000..67bcc08
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/COPYING.adoc
@@ -0,0 +1,93 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= COPYING File for the KhronosGroup/Vulkan-Docs Project
+
+== Licenses
+
+The Vulkan-Docs project uses several licenses.
+
+* The source files (in asciidoctor and other formats) for the Vulkan
+  Specification, reference pages, and supporting documentation are licensed
+  under the Creative Commons Attribution 4.0 International License (SPDX
+  license identifier "`CC-BY-4.0`").
+* Header files, scripts, programs, XML files, and other tooling used or
+  generated as part of the build process are typically licensed under the
+  Apache License, Version 2.0 (SPDX license identifier "`Apache-2.0`").
+* For compatibility with external developers working in GPLed projects who
+  have requested it, link:xml/vk.xml[`vk.xml`] and
+  link:xml/video.xml[`video.xml`] are licensed under a dual (SPDX license
+  identifier "`Apache-2.0 OR MIT`" License).
+* Fonts derived from the M+ Font Project, found in
+  link:config/fonts/[`config/fonts/`] are licensed under the M+ Font License
+  (SPDX license identifier "`LicenseRef-MPLUS`"). This is an open source
+  license but is not OSI-approved, and is found at
+  https://osdn.net/softwaremap/trove_list.php?form_cat=370
+* Code which converts the single-file HTML specification to a chunked
+  HTML document, kept in
+  link:scripts/asciidoctor-chunker[`scripts/asciidoctor-chunker`], is
+  licensed under the MIT license. The home of the
+  link:https://github.com/wshito/asciidoctor-chunker[chunker project] is
+  found on GitHub.
+* There are a few remaining files adopted from other open source projects,
+  such as a copy of the KaTeX distribution. Such files continue under their
+  original MIT licenses, or in a few cases, like
+  link:scripts/htmldiff/htmldiff[`scripts/htmldiff/htmldiff`], had no
+  license statement. We have not added SPDX license identifiers to such
+  externally originated files.
+* Some generated, transient files produced during the course of building the
+  specification, headers, or other targets may not have copyrights. These
+  are typically very short asciidoc fragments describing parts of the Vulkan
+  API, and are incorporated by reference into specification or reference
+  page builds.
+
+Users outside Khronos who create and post Vulkan Specifications, whether
+modified or not, should use the CC-BY-4.0 license on the *output* documents
+(HTML, PDF, etc.) they generate. This is the default when building the
+Specification.
+
+
+== Frequently Asked Questions
+
+Q: Why are the HTML and PDF Specifications posted on Khronos' website under
+a license which is neither CC-BY nor Apache-2.0?
+
+A: The Specifications posted by Khronos in the Vulkan Registry are licensed
+under the proprietary Khronos Specification License. Only these
+Specifications are Ratified by the Khronos Board of Promoters, and therefore
+they are the only Specifications covered by the Khronos Intellectual
+Property Rights Policy.
+
+
+Q: Does Khronos allow the creation and distribution of modified versions of
+the Vulkan Specification, such as translations to other languages?
+
+A: Yes. Such modified Specifications, since they are not created by Khronos,
+should be placed under the CC-BY license. If you believe your modifications
+are of general interest, consider contributing them back by making a pull
+request (PR) on the Vulkan-Docs project.
+
+
+Q: Can I contribute changes to the Vulkan Specification?
+
+A: Yes, by opening an Issue or Pull Request (PR) on the
+link:https://github.com/KhronosGroup/Vulkan-Docs/[Vulkan-Docs] GitHub
+project.
+You must execute a click-through Contributor License Agreement, which brings
+your changes under the umbrella of the Khronos IP policy.
+
+
+Q: Can you change the license on your files so they are compatible with my
+license?
+
+A: We are using a dual license on `vk.xml` and `video.xml`, to make them
+compatible with GPL-licensed projects such as externally-generated language
+bindings.
+This replaces an earlier Apache 2.0 + "Exception Clause" license on the file
+with a more standard methodology, and allows use of the SPDX license
+identifier "`Apache-2.0 OR MIT`" to denote the license.
+
+If you *require* GPL compatibility for use of other Apache-2.0 licensed
+files in our repository, please raise an issue identifying the files and we
+will consider changing those specific files to the dual license as well.
+
diff --git a/codegen/vulkan/vulkan-docs-next/ChangeLog.adoc b/codegen/vulkan/vulkan-docs-next/ChangeLog.adoc
new file mode 100644
index 0000000..a85524a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/ChangeLog.adoc
@@ -0,0 +1,13089 @@
+Copyright 2016-2023 The Khronos Group Inc.
+SPDX-License-Identifier: CC-BY-4.0
+
+Update Log for the Vulkan-Docs repository on GitHub. Updates are in reverse
+chronological order starting with the latest public release.
+
+This summarizes the periodic public updates, not individual commits. Updates
+on GitHub are done as single large patches at the release point, collecting
+together the resolution of many Khronos internal issues, along with any
+public pull requests that have been accepted.
+
+"`VU`" as used below is an abbreviation for "`valid usage statement`", which
+appears frequently in the change log.
+
+-----------------------------------------------------
+
+Change log for October 20, 2023 Vulkan 1.3.269 spec update:
+
+Github Issues
+
+  * Add and correct a couple of `optional` attributes in the XML (public
+    pull request 2252).
+
+Internal Issues
+
+  * Add flink:vkGetQueryPoolResults and flink:vkCmdCopyQueryPoolResults VUs
+    requiring that queries be initialized (internal issue 3638).
+  * Harmonize shader object state VUs with spec language in common draw,
+    common draw vertex binding, slink:VkShaderCreateInfoEXT, and the
+    <<shaders-objects-state, Setting State>> section (internal MR 6128).
+  * Consolidate VUs in many files (internal MRs 6136, 6137, 6140, 6154,
+    6155, 6157).
+  * Fix common blit image, copy image, and resolve image VUs for
+    interactions with ename:VK_REMAINING_ARRAY_LAYERS when built without
+    apiext:VK_KHR_maintenance5 (internal MR 6204).
+  * Remove slink:VkClearAttachment VU 00021 for "`validating`" a union type
+    (internal MR 6222).
+  * Disallow image creation with
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT and any
+    etext:VK_IMAGE_CREATE_SPARSE_*_BIT flags (internal MR 6223).
+  * Combine slink:VkGraphicsPipelineCreateInfo VUs 06575 and 06603 (internal
+    MR 6225).
+  * Markup fixes for apiext:VK_NV_low_latency2 (internal MR 6228).
+  * Add a VU for the
+    slink:VkDecompressMemoryRegionNV::pname:decompressedSize limit, and fix
+    language describing parameters in slink:VkCopyMemoryIndirectCommandNV
+    (internal MR 6230).
+
+New Extensions
+
+  * apiext:VK_ARM_scheduling_controls
+  * apiext:VK_NV_cuda_kernel_launch
+
+-----------------------------------------------------
+
+Change log for October 13, 2023 Vulkan 1.3.268 spec update:
+
+Github Issues
+
+  * Restrict flink:vkCmdSetEvent2 ptext:*stageMask parameters to not include
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT (public issue 1996).
+  * Fix <<formats-non-packed, byte mapping table>> for
+    ename:VK_FORMAT_A8_UNORM_KHR (public issue 2234).
+  * Assign VUIDs to new VUs that were overlooked in the previous spec update
+    (public issue 2244).
+  * Add a spec build test and refactor Makefile to allow using a different
+    repository root directory path, for use with the tests (public PR 2248).
+
+Internal Issues
+
+  * Add VUs to slink:VkCopyMemoryToImageInfoEXT and
+    slink:VkCopyImageToMemoryInfoEXT requiring zero row-length /
+    image-height when doing a host copy with
+    ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT (internal issue 3619).
+  * Clarify that fragment shading rate attachments cannot be cleared in VU
+    for slink:VkRenderPassCreateInfo2 and language for
+    slink:VkAttachmentDescription2KHR (internal issue 3634).
+  * Add VUs to slink:VkSparseImageMemoryBind requiring a non-zero extent
+    (internal issue 3635).
+  * Consolidate VUs in many files (internal MRs 6138, 6141. 6142, 6147,
+    6149, 6153, 6161, 6162, 6167, 6170, 6194, and 6197).
+  * Use title case consistently for chapter and section titles, and add it
+    to the style guide (internal MR 6201).
+
+-----------------------------------------------------
+
+Change log for October 6, 2023 Vulkan 1.3.267 spec update:
+
+Internal Issues
+
+  * Detect old wording of boilerplate pname:pNext description in CI
+    (internal issue 2186).
+  * Clarify ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT with regard
+    to queue submission (internal issue 3627).
+  * Update apiext:VK_NV_low_latency2 pname:pInfo pointers to be `const`
+    (internal issue 3637).
+  * Add slink:VkDescriptorSetLayoutBindingFlagsCreateInfo and
+    slink:VkDescriptorSetAllocateInfo VUs for
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT (internal MR
+    6127).
+  * Consolidate VUs in `access_mask_2_common.adoc` (internal MR 6166).
+  * Fix
+    slink:VkGraphicsPipelineCreateInfo::pname:pColorBlendState->attachmentCount
+    VU to apply only when the blend state is not dynamic (internal MR 6171).
+  * Add missing object types to the <<debugging-object-types, VkObjectType
+    and Vulkan Handle Relationship>> table (internal MR 6175).
+  * Fix typo ("`Non-private`" -> "`Private`") in the description of
+    <<memory-model-non-private, private memory operations obeying program
+    order>> (internal MR 6176).
+  * Add reflow test for list continuation in VUs (internal MR 6177).
+  * Correct type of flink:vkQueueNotifyOutOfBandNV::pname:pQueueTypeInfo
+    (internal MR 6179).
+  * Add XML `len` attribute for slink:VkFrameBoundaryEXT::pname:pTag order>>
+    (internal MR 6180).
+  * Consolidate VUs for apiext:VK_ANDROID_external_format_resolve (internal
+    MR 6183).
+  * Upstream Vulkan SC 1.0.13 changes to this repository (internal vulkansc
+    issue 179).
+
+New Extensions
+
+  * apiext:VK_EXT_nested_command_buffer
+  * apiext:VK_NV_extended_sparse_address_space
+
+
+-----------------------------------------------------
+
+Change log for September 29, 2023 Vulkan 1.3.266 spec update:
+
+Github Issues
+
+  * Fix slink:VkGraphicsPipelineCreateInfo VU to say a valid pipeline layout
+    is always needed without a graphics pipeline library (public issue
+    2168).
+  * Add missing "`not`" to <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V Validation>> VU 04917 (public PR 2229).
+  * Add riscv64 64-bit platform to `vk_platform.h` (public PR 2238).
+  * Add driver ID for AGXV (Asahi) (public PR 2238).
+
+Internal Issues
+
+  * Fix common draw dynamic state VUs to check for pname:stencilTestEnable
+    and pname:depthBoundsTestEnable (internal issue 3486)
+  * Fix stride passed to flink:vkGetQueryPoolResults in example code in
+    apiext:VK_KHR_performance_query appendix (internal MR 6148).
+
+New Extensions
+
+  * apiext:VK_ANDROID_external_format_resolve
+  * apiext:VK_NV_low_latency2
+
+-----------------------------------------------------
+
+Change log for September 22, 2023 Vulkan 1.3.265 spec update:
+
+Github Issues
+
+  * Remove misplaced
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+    description from elink:VkPipelineStageFlagBits context (public PR 2210).
+  * Swap NV pipeline stage with promoted KHR stage in XML `syncequivalent`
+    tag (public issue 2211).
+  * Remove redundant slink:VkPipelineShaderStageCreateInfo pname:stage VUs
+    (public issue 2222).
+  * Remove duplicate definition in apiext:VK_AMD_shader_enqueue proposal
+    document (public issue 2225).
+
+Internal Issues
+
+  * Add a common copy image VU to require compressed image-to-image copies
+    to have formats with matching texel block extents (internal issue 3610).
+  * Add `page` field to `validusage.json` for eventual use with Antora
+    (internal issue 3617).
+  * Add missing VUs to flink:vkGetCalibratedTimestampsEXT (internal MR
+    5974).
+  * Attempt to clarify apiext:VK_KHR_fragment_shader_barycentric
+    pname:triStripVertexOrderIndependentOfProvokingVertex description
+    (internal MR 6048).
+  * Add a slink:VkGraphicsPipelineCreateInfo VU restricting
+    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
+    (internal MR 6119).
+  * Reword several places to clarify that code:PrimitiveId is reset to `0`
+    between each draw in a multi-draw command (internal issue 3564 ).
+  * Consolidate and simplify VUs in the <<copies, Copy Commands>> chapter
+    (internal MR 6124).
+  * Remove inconsistent `KHR` suffix in
+    slink:VkDeviceImageMemoryRequirements VUIDs (internal MR 6124).
+
+
+-----------------------------------------------------
+
+Change log for September 8, 2023 Vulkan 1.3.264 spec update:
+
+Github Issues
+
+  * Create Roadmap Feedback issue template (github PR 2207).
+
+Internal Issues
+
+  * Fix ename:VK_GEOMETRY_OPAQUE_BIT_KHR flag reference for
+    <<ray-opacity-micromap, Ray Opacity Micromap>> (internal issue 3337).
+  * Clarify slink:VkImageMemoryBarrier color format VU (internal issue
+    3606).
+  * Collapse apiext:VK_EXT_shader_tile_image pipeline barrier common VUs
+    08718 and 06191 (internal MR 6065).
+  * Use consistent language to describe multi-planar aspect masks for some
+    existing VUs (internal MR 6072).
+  * Consolidate VUs in the <<commandbuffers, Command Buffers>> chapter
+    (internal MR 6114).
+
+New Extensions
+
+  * apiext:VK_EXT_frame_boundary
+  * apiext:VK_MSFT_layered_driver
+
+-----------------------------------------------------
+
+Change log for September 2, 2023 Vulkan 1.3.263 spec update:
+
+Github Issues
+
+  * Clarify H.264 / H.265 level indicator values by reference to the ITU-T
+    specifications (public issue 2193).
+  * Explicitly state that VkDeviceOrHostAddressConstKHR is also ignored
+    (public PR 2205).
+  * Fix parameter typo "`cordinates`" and correct markup (public PR 2206).
+  * Cleanup slink:VkGraphicspipelineCreateInfo VUs for code:PointSize in the
+    context of apiext:VK_KHR_maintenance5 (public Vulkan-ValidationLayers
+    issue 6382).
+
+Internal Issues
+
+  * Clarifications for <<framebuffer-dsb, Dual-Source Blending>> in common
+    draw VUs (internal issue 3549).
+  * Ensure slink:VkHostImageLayoutTransitionInfoEXT::pname:oldLayout is the
+    current layout (internal issue 3580).
+  * Link to promoted-from extension proposal docs in extension appendices if
+    no proposal exists for the extension itself (internal issue 3601).
+  * Note that pname:storageInputOutput16 is needed for 16-bit vertex input
+    in the <<fxvertex-attrib-location>> and <<interfaces-iointerfaces-user,
+    User-defined Variable Interface>> sections (internal MR 5989).
+  * Provisional video encode API updates (internal MR 6010).
+  * Move requirement that elements of
+    slink:VkPresentInfoKHR::pname:pSwapchains must be unique to a VU
+    (internal MR 6054).
+  * Fix and add missing shader object VUs in common draw VUs and the
+    <<shaders-objects-state, Setting State>> section (internal MR 6077).
+  * Define slink:VkPipelineColorBlendStateCreateInfo::pname:attachmentCount
+    to ignore explicit, not implicit state settings in the context of
+    apiext:VK_EXT_extended_dynamic_state3 (internal MR 6079).
+  * Fix duplicate VUIDs for apiext:VK_EXT_host_image_copy (internal MR
+    6100).
+  * Use language for
+    slink:VkPipelineColorBlendStateCreateInfo::pname:pAttachments consistent
+    with related parts of the specification (internal MR 6103).
+
+New Extensions
+
+  * apiext:VK_NV_descriptor_pool_overallocation
+
+-----------------------------------------------------
+
+Change log for August 25, 2023 Vulkan 1.3.262 spec update:
+
+Github Issues
+
+  * Remove ename:VK_ACCESS_2_UNIFORM_READ_BIT from
+    ename:VK_ACCESS_SHADER_READ_BIT (public issue 2169).
+  * Fix typo in description of slink:VkPerformanceCounterResultKHR (public
+    issue 2186).
+  * Fix missing vkQueue* row in command properties tables (public PR 2189).
+  * Specify that some <<spirvenv-module-validation-runtime, Runtime SPIR-V
+    Validation>> VUs apply only to compute shaders (public PR 2199).
+  * Misc. markup fixes (public pull request 2200).
+  * Specify when compute pipeline metadata must be saved in language
+    following slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT
+    (https://github.com/HansKristian-Work/vkd3d-proton/pull/1639, internal
+    MR 6058).
+
+Internal Issues
+
+  * Fix MSRTSS + dynamic sample count + single sampling interactions in
+    common draw VUs (internal issue 3474).
+  * Fixes to block processing and attribute handling when generating
+    `validusage.json` (internal issue 3576).
+  * Generate implicit `-parent` VUs for more distant ancestor relationships
+    if the immediate parent type is not present (internal issue 3582).
+  * Fix ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT interaction with
+    apiext:VK_EXT_extended_dynamic_state3 in VUs for
+    slink:VkGraphicsPipelineCreateInfo (internal issue 3587).
+  * Clarify that synchronization commands do not execute pipeline stages in
+    the <<synchronization-pipeline-stages, Pipeline Stages>> section
+    (internal issue 3592).
+  * VU fixes for apiext:VK_KHR_maintenance5 (internal MR 6032).
+  * Update apiext:VK_KHR_dynamic_rendering proposal document to remove a
+    sentence that should not have been there (internal MR 6047).
+  * Add ray tracing VUs for core synchronization access flags to match the
+    64-bit versions (internal MR 6047).
+  * Add a CI test to check for include:: paths not starting with a
+    recognized path attribute (internal MR 6063).
+  * Make slink:VkBufferCreateInfo::pname:usage `noautovalidity` in XML and
+    allow for elink:VkBufferUsageFlags2KHR flags (internal MR 6066).
+  * Expand CI test checking for missing asciidoctor attributes to the
+    refpage build, catching additional cases (internal MR 6071).
+  * Remove explicit VU for slink:VkImageFormatProperties2 requiring the
+    <<fetaures-hostImageCopy, pname:hostImageCopy>> feature to be enabled if
+    slink:VkHostImageCopyDevicePerformanceQueryEXT is included in a
+    pname:pNext chain (internal MR 6074).
+
+New Extensions
+
+  * apiext:VK_QCOM_filter_cubic_clamp
+  * apiext:VK_QCOM_filter_cubic_weights
+  * apiext:VK_QCOM_image_processing2
+  * apiext:VK_QCOM_ycbcr_degamma
+
+-----------------------------------------------------
+
+Change log for August 4, 2023 Vulkan 1.3.261 spec update:
+
+Github Issues
+
+  * Disallow mixing multi-present-mode swapchains in slink:VkPresentInfoKHR
+    (public issue 2151).
+  * Clarify mapping between wait semaphores and fences for
+    slink:VkSwapchainPresentFenceInfoEXT (public pull request 2152).
+  * Fix incorrect link to `GLSL_EXT_shader_tile_image` extension
+    specification (public pull request 2178).
+  * Fix formatting issues in apiext:VK_KHR_maintenance5 (public pull request
+    2180).
+  * Fix bad explanation of
+    slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage (public pull request
+    2182).
+  * Fix markup to improve short descriptions for some
+    apiext:VK_NV_device_generated_commands_compute command and structure
+    refpages (public issue 2184).
+  * Fix VUs for flink:vkGetQueryPoolResults and
+    flink:vkCmdCopyQueryPoolResults to disallow
+    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR for performance queries
+    (public issue 2185).
+
+Internal Issues
+
+  * Add some VUs for bind buffer and image commands to require that buffers
+    created with the
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT flag
+    must only be bound to device memory that was likewise allocated
+    (internal merge request 5993).
+  * Add slink:VkGraphicsPipelineCreateInfo and common draw vertex binding
+    VUs for 64-bit input component count matching (internal merge request
+    6008).
+  * Remove duplicate mesh shading apiext:VK_EXT_shader_object VUs (internal
+    merge request 6031).
+  * Add missing apiext:SPV_AMDX_shader_enqueue <spirvextension> tag
+    (internal merge request 6043).
+  * Add CI check to `xml_consistency.py` for `_RESERVED_` enums in
+    non-disabled extensions (internal merge request 6044).
+  * Consolidate VUs in the <<clears, Clear Commands>> chapter (internal
+    merge request 6043).
+  * Fix suffixes of incorrectly named flags for apiext:VK_KHR_maintenance5,
+    and update XML extension dependencies for those flags (internal merge
+    request 6050).
+  * Add missing <<features-cooperativeMatrix, cooperativeMatrix>>
+    requirement for apiext:VK_KHR_cooperative_matrix (internal merge request
+    6051).
+
+-----------------------------------------------------
+
+Change log for July 28, 2023 Vulkan 1.3.260 spec update:
+
+Internal Issues
+
+  * Refactor `parse_dependency.py:dependencyLanguage()` into a more useful
+    form for downstream components such as the validation layers (internal
+    issue 3555).
+  * Add CI check to `xml_consistency.py` for API names added by extensions
+    which have suffix inconsistencies (internal issue 3568).
+  * Add notes to flink:vkCreateAccelerationStructureKHR and
+    flink:vkCreateMicromapEXT about data capture/replay (internal merge
+    request 6015).
+  * Add missing explicit common parent VUs for flink:vkCreateImageView and
+    flink:vkGetMicromapBuildSizesEXT (internal merge request 6016).
+  * Add VU to slink:VkCommandBufferBeginInfo requiring the
+    pname:commandBuffer support graphics operations (internal merge request
+    6025).
+  * Unify unavailable query VUs for flink:vkCmdWriteTimestamp and
+    flink:vkCmdWriteTimestamp2 (internal merge request 6027).
+  * Make slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:pNext a `const`
+    pointer (internal merge request 6028).
+
+New Extensions
+
+  * apiext:VK_KHR_maintenance5
+  * apiext:VK_AMDX_shader_enqueue
+
+-----------------------------------------------------
+
+Change log for July 21, 2023 Vulkan 1.3.259 spec update:
+
+Internal Issues
+
+  * Remove dangling reference to nonexistent
+    `StdVideoH265ShortTermRefPicsSps` in `video.xml` (internal issue 3565).
+  * Rename ftext:vkCmdUpdatePipelineIndirectBuffer to
+    flink:vkCmdUpdatePipelineIndirectBufferNV in the just-released
+    apiext:VK_NV_device_generated_commands_compute extension (internal issue
+    3568).
+  * Add a CI check for undefined attributes in the spec build (internal
+    issue 3567).
+
+-----------------------------------------------------
+
+Change log for July 21, 2023 Vulkan 1.3.258 spec update:
+
+Github Issues
+
+  * Add a note explaining subgroup vs. dynamically uniform to the
+    <<shaders-scope-device, Device>> section (public pull request 2118).
+  * Fix video std headers  to respect VK_NO_STDINT_H,
+    involving minor changes to dependencies in `video.xml` as well as the
+    header generator script (public issue 2155).
+
+Internal Issues
+
+  * Add spec language and VUs to allow applications to set various members
+    of slink:VkGraphicsPipelineCreateInfo to be NULL if all the members of
+    the structs they point to are set as dynamic (internal issue 3263).
+  * Ban attachment aliasing and color masks with RGB9E5 format. Changes
+    affect common draw VUs, flink:vkCmdSetColorWriteMaskEXT,
+    slink:VkGraphicsPipelineCreateInfo, slink:VkRenderingInfo,
+    flink:vkCmdBeginRenderPass, and flink:vkCmdBeginRenderPass2 (internal
+    issues 3338, 3538).
+  * Fix typo in structure name for slink:VkSubpassDescription2 VU 06251
+    (internal issue 3483).
+  * Condense buffer memory barrier VUs, pipeline VUs, and a few
+    miscellaneous VUs now that embedded asciidoc conditional markup is
+    allowed within a VU statement (internal issue 3543).
+  * Use explicit structure member initializer syntax instead of comments
+    with the member name consistently in code samples (internal issue 3550).
+  * Fix misuse of etext:VK_API_VERSION* in XML `<spirvcapabilities>` tags,
+    and add a CI test to prevent recurrence (internal issue 3559).
+  * Add VU for slink:VkDescriptorSetLayout sets used by
+    flink:vkCmdSetDescriptorBufferOffsetsEXT (internal issue 3560).
+  * Explicitly say that flink:vkCreateAccelerationStructure does not write
+    to the buffers in the introduction to the <<resources, Resource
+    Creation>> chapter and for flink:vkCreateAccelerationStructureNV,
+    flink:vkCreateAccelerationStructureKHR, and flink:vkCreateMicromapEXT
+    (internal merge request 5914).
+  * Add a NOTE regarding ename:VK_IMAGE_LAYOUT_UNDEFINED to the
+    <<synchronization-image-layout-transitions, Image Layout Transitions>>
+    section (internal merge request 5962).
+  * Fix interpretation of variable descriptor count zero in
+    slink:VkDescriptorSetVariableDescriptorCountLayoutSupport (internal
+    merge request 5983).
+  * Fix slink:VkRenderPassBeginInfo VU to include a clause for
+    slink:VkMultisampledRenderToSingleSampledInfoEXT (internal merge request
+    5996).
+  * Add HLSL spirv-intrinsics mapping for
+    apiext:VK_NV_ray_tracing_invocation_reorder appendix and for the
+    `VK_KHR_ray_tracing_position_fetch` proposal document (internal merge
+    requests 6002, 6005).
+
+New Extensions
+
+  * apiext:VK_EXT_host_image_copy
+  * apiext:VK_NV_device_generated_commands_compute
+
+-----------------------------------------------------
+
+Change log for July 7, 2023 Vulkan 1.3.257 spec update:
+
+Github Issues
+
+  * Clarify flink:vkGetQueryPoolResults with
+    ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT and interactions with
+    ename:VK_QUERY_RESULT_64_BIT affecting size of the returned values
+    (public issue 1086).
+  * Fix link markup in one of the proposal documents (public merge request
+    2160).
+
+Internal Issues
+
+  * Attempt to tidy up feedback loop guarantees in common draw VUs,
+    elink:VkPipelineDepthStencilStateCreateFlagBits,
+    elink:VkPipelineColorBlendStateCreateFlagBits,
+    slink:VkRenderingAttachmentInfo, and by reference to the new
+    <<renderpass-load-operations, Render Pass Load Operations>>,
+    <<renderpass-store-operations, Render Pass Store Operations>>, and
+    <<renderpass-resolve-operations, Render Pass Multisample Resolve
+    Operations>> sections (internal issues 3375, 3403, 3517).
+  * Modify boilerplate language for pname:sType structure members to refer
+    to them as elink:VkStructureType values (internal issue 3493).
+  * Describe that the <<interfaces-iointerfaces-builtin, mesh shader output
+    interface>> can have two built-in interface blocks (internal issue
+    3509).
+  * Add slink:VkDeviceGroupRenderPassBeginInfo and slink:VkRenderingInfo VUs
+    for zero-sized pname:renderArea (internal issue 3535).
+  * Generate a warning comment for preprocessor guard definitions in the
+    generated C headers. This will show up in some IDEs and may help prevent
+    e.g. use of `VK_VERSION_1_3` as a parameter to API calls (internal issue
+    3537).
+  * Remove check in reflow.py that did not allow embedded conditionals in VU
+    statement markup (internal issue 3545).
+  * Reduce duplication of spec language in the <<Cooperative Matrices>>
+    section, where the apiext:VK_KHR_cooperative_matrix interfaces are
+    similar to, but not promoted from the apiext:VK_NV_cooperative_matrix
+    interfaces (internal issue 3547).
+  * Fix shader tile image access for depth/stencil images in
+    elink:VkAccessFlagBits2 and elink:VkAccessFlagsBits (internal merge
+    request 5912)
+  * Fix missing VUs for apiext:VK_EXT_depth_bias_control (internal merge
+    request 5967).
+  * Update slink:VkPipelineShaderStageCreateInfo VU 02756 with task and mesh
+    shader interactions (internal merge request 5977).
+  * Add test cases to CI for nested lists and math blocks in VU statements,
+    which are now allowed (internal merge request 5984).
+  * Remove code:CrossWorkgroup from the allowed storage classes in
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    (internal merge request 5987).
+  * Add missing `<spirvextension>` XML tags for
+    apiext:VK_ARM_shader_core_builtins (internal merge request 5988).
+  * Add more CI checks for preferred orthography and fix problems identified
+    by them (internal merge request 5991).
+
+-----------------------------------------------------
+
+Change log for June 30, 2023 Vulkan 1.3.256 spec update:
+
+GitHub Issues
+
+  * Fix minor typos (public pull requests 2154 and 2157).
+  * Fix XML `<format>` metadata for etext:VK_FORMAT_R64G64* and
+    ename:VK_FORMAT_BC*_SNORM_BLOCK (public pull request 2156).
+
+Internal Issues
+
+  * Specify fragment stage when accessing color attachment via shader tile
+    image reads for ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT and
+    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT (internal merge request 5918).
+  * Clarify in which stages subgroup control flags
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    and ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, as
+    well as their apiext:VK_EXT_shader_object variants, are allowed to be
+    set (internal issue 3529).
+  * Fix typo to pname:depth in flink:vkCmdBindInvocationMaskHUAWEI VUID
+    04983 (internal merge request 5958).
+  * Rename ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_HUAWEI to
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_HUAWEI (internal merge request
+    5959).
+  * Modify the VU extraction script to correctly handle content that is not
+    plain text, such as nested bullets or blocks (internal merge request
+    5964).
+  * Add a NOTE to the <<pipelines-cache-header, Pipeline Cache Header>>
+    section and move one related VU statement. Fix handling of queue types
+    with dependencies in generator scripts (internal merge request 5965).
+  * Remove explicit `optional="false"` syntax from the XML schema for
+    command `param` and structure `member` tags (internal merge request
+    5970).
+  * Refactor README.adoc to move Vulkan and VulkanSC-specific language into
+    READMEVK.adoc and READMESC.adoc, respectively (internal merge request
+    5971).
+  * Update registry schema document with a current example of `externsync`
+    for arrays (internal merge request 5975).
+
+-----------------------------------------------------
+
+Change log for June 23, 2023 Vulkan 1.3.255 spec update:
+
+GitHub Issues
+
+  * Fix XML `<format>` metadata for ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+    and ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 (public pull requests 2145,
+    2147).
+
+Internal Issues
+
+  * Only extract VU statements for the currently built specification,
+    allowing placing conditional markup inside VU statements and the
+    simplification or elimination of many VUs that previously had to be
+    replicated for extension-dependent behavior (internal issue 3387).
+  * Add missing Description section to the
+    apiext:VK_EXT_swapchain_colorspace extension appendix (internal issue
+    3463).
+  * Add VU to disable ftext:vkCmdBeginQuery* with micromap queries (internal
+    issue 3511).
+  * Add apiext:VK_EXT_calibrated_timestamps proposal document, and update
+    some of the specification language and notes for
+    flink:vkCmdWriteTimestamp2KHR and flink:vkCmdWriteTimestamp (internal
+    issue 3521).
+
+New Extensions
+
+  * apiext:VK_KHR_cooperative_matrix
+
+-----------------------------------------------------
+
+Change log for June 16, 2023 Vulkan 1.3.254 spec update:
+
+GitHub Issues
+
+  * Clarify discard behavior of dynamic rendering with unused attachments
+    (public issue 2125).
+
+Internal Issues
+
+  * Fix typos in execution modes for fragment depth and stencil writes in
+    the <<fragops, Fragment Operations>> chapter (internal issue 3519).
+  * Add slink:VkDescriptorAddressInfo VUs disallowing descriptors with zero
+    range unless pname:nullDescriptor is enabled (internal merge request
+    5929).
+  * Add asciidoctor conditional mismatch check to spec build (internal merge
+    request 5948).
+  * Remove unused `start` and `end` attributes from `enum` tags in the
+    registry documentation and schema (internal merge request 5951).
+  * Clarify flink:vkEndCommandBuffer error behavior (internal vulkansc issue
+    184).
+
+New Extensions
+
+  * apiext:VK_EXT_depth_bias_control
+  * apiext:VK_QNX_external_memory_screen_buffer
+
+-----------------------------------------------------
+
+Change log for June 9, 2023 Vulkan 1.3.253 spec update:
+
+GitHub Issues
+
+  * Require the pname:accelerationStructure feature for acceleration
+    structure commands (public issue 2134).
+  * Fix slink:VkAccelerationStructureCreateInfoKHR::pname:flags typo to
+    pname:createFlags (public pull request 2140).
+
+Internal Issues
+
+  * Various fixes to the provisional video encode APIs for rate control,
+    capabilities, and other improvements (internal issues 2213, 3013, 3137,
+    3138, 3139, 3386, 3440).
+  * Add XML representation of pipeline stage ordering relationships and use
+    it to generate markup artifacts including stage flag definitions,
+    ordering, and the <<synchronization-pipeline-stages-supported, Supported
+    pipeline stage flags>> table (internal issue 3260).
+  * Clarify <<vkGetPhysicalDeviceVideoFormatPropertiesKHR, video format
+    query interactions>> by reference to a new
+    <<format-feature-dependent-usage-flags, Format Feature Dependent Usage
+    Flags>> section (internal issue 3491).
+  * Add slink:VkGraphicsPipelineCreateInfo and common draw vertex binding
+    VUs for 64-bit input components (internal merge request 5869).
+  * Improve slink:VkImageViewCreateInfo VUs for
+    apiext:VK_NV_linear_color_attachment (internal merge request 5884).
+  * Update precision for code:normalize() instruction in the <<Precision of
+    GLSL.std.450 Instructions>> table (internal merge request 5923).
+
+
+-----------------------------------------------------
+
+Change log for June 1, 2023 Vulkan 1.3.252 spec update:
+
+Internal Issues
+
+  * Merge Vulkan SC build and support scripts into Vulkan repository. This
+    will ease keeping the two repositories closely synchronized (internal
+    merge request 5930).
+  * Update precision for code:degrees() and code:radians() instructions
+    in the <<Precision of GLSL.std.450 Instructions>> table
+    (internal merge request 5922).
+  * Fix definition of code:ulp() in the
+    <<spirvenv-op-prec, Precision of Individual Operations>>
+    section to limit the definition to finite numbers
+    (internal merge request 5924).
+  * Add view mask VU to slink:VkFramebufferCreateInfo for
+    apiext:VK_KHR_fragment_shading_rate (internal merge request 5932).
+
+New Extensions
+
+  * apiext:VK_EXT_external_memory_acquire_unmodified
+
+-----------------------------------------------------
+
+Change log for May 28, 2023 Vulkan 1.3.251 spec update:
+
+GitHub Issues:
+
+  * VUs for graphics pipelines have been reworked regarding state subsets,
+    along with the sections describing those state subsets. VUs that
+    previously ambiguously stated "`If the pipeline is _created with_ <state
+    subset>...`" now instead state "`If the pipeline _requires_ <state
+    subset>...`" Those VUs link to the state subset descriptions, which
+    previously did not actually indicate anything about when they were
+    required, which was instead left to the section on complete subsets. The
+    subset sections now document their own independent requirements for when
+    they are needed, so that the VUs explicitly point to relevant text.
+    Additional VUs have also been added to mirror these updated sections,
+    uncovering a handful of incorrect edge cases and clarifying them.
+    Previous VUs that required a complete pipeline were now redundant, so
+    have been removed. (public issue 1793).
+  * Add missing code:SPV_EXT_opacity_micromap to XML (public pull request
+    2131).
+  * Fix typo in code:SPV_INTEL_shader_integer_functions2 XML (public pull
+    request 2132).
+
+Internal Issues
+
+  * Use "`commands are called *in* a command buffer`" rather than "`*on* a
+    command buffer`", and add this case to the style guide (internal issue
+    3480).
+  * Fix common draw dispatch VU 07753 for the
+    slink:VkImageView::pname:format to match the code:OpTypeImage
+    code:Sampled code:Type (internal issue 3481).
+  * Create common draw and slink:VkGraphicsPipelineCreateInfo VUs for
+    pname:alphaToCoverageEnable (internal merge request 5811).
+  * Add elink:VkDynamicState entry for
+    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT (internal
+    merge request 5894).
+  * Use consistent wording for VUs referring to external memory handles
+    (internal merge request 5895).
+  * Remove redundant <<spirvenv-module-validation-standalone, Standalone
+    SPIR-V Validation>> VU 04662 (internal merge request 5898).
+  * Revert common draw VU 07620, which was accidentally removed by
+    apiext:VK_EXT_shader_object (internal merge request 5899).
+  * Allow slink:VkVideoDecodeInfoKhr::pname:pReferenceSlots to be `NULL` in
+    its description (internal merge request 5900).
+  * Fix slink:VkGraphicsPipelineCreateInfo pipeline topology VUs when
+    pname:dynamicPrimitiveTopologyUnrestricted is set and the dynamic state
+    is enabled (internal merge request 5916).
+
+New Extensions
+
+  * apiext:VK_EXT_dynamic_rendering_unused_attachments
+
+-----------------------------------------------------
+
+Change log for May 4, 2023 Vulkan 1.3.250 spec update:
+
+GitHub Issues:
+
+  * Fix common image subresource VUs for fname:vkGetImageSubresourceLayout*
+    with planar images (public issue 2109).
+  * Fix URL in BUILD.adoc (public merge request 2116).
+  * Split up ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT VU for
+    slink:VkImageCreateInfo (public issue 2117)
+
+Internal Issues
+
+  * Add some missing VUs for apiext:VK_EXT_shader_object (internal issue
+    3449).
+  * Add a <<shaders-binding, Binding Shaders>> section and refer to it from
+    some apiext:VK_EXT_shader_object VUs, collapsing and simplifying them
+    (internal issue 3425).
+  * Fix flink:vkGetImageSubresourceLayout2EXT to refer to the output
+    structure as undefined for ename:VK_IMAGE_TILING_OPTIMAL, rather than
+    the input structure (merge request 5870).
+  * Add ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT to the
+    slink:VkPipelineColorBlendStateCreateInfo::pname:pAttachments
+    description (merge request 5873).
+  * Clarify how to get slink:VkExternalBufferProperties in
+    slink:VkMemoryAllocateInfo VU 00639 (merge request 5873).
+  * Replace `~~~~` delimiter for nested open/source blocks with `----`,
+    using a custom extension to treat the listing block as an open block
+    where needed for continuations (merge request 5886).
+  * Fix common stage mask VUIDs 07946, 07947, 07949, and 07950 to
+    incorporate the stage mask name and avoid duplication (internal merge
+    request 5886).
+
+New Extensions
+
+  * apiext:VK_EXT_attachment_feedback_loop_dynamic_state
+
+
+-----------------------------------------------------
+
+Change log for April 27, 2023 Vulkan 1.3.249 spec update:
+
+GitHub Issues:
+
+  * Add a non-normative NOTE on variability in
+    <<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
+    implementations, and move the theoretical implementation described in
+    that section into the NOTE (public issue 1361).
+  * Fix XML attributes of slink:VkMicromapEXT structure members to allow
+    `NULL` handles (public issue 2114).
+
+Internal Issues
+
+  * Clarify common draw VUs for attachment read feedback loops (internal
+    issue 3439).
+  * Add flink:vkCmdCopyQueryPoolResults VU requiring queries to have been
+    made available by prior executed commands (internal issue 3451).
+  * Relax ptext:*DescriptorSize limits to 256 bytes max in the
+    <<limits-required, Required Limits>> table (internal issue 3456).
+  * Mention shader objects in definitions of code:SubgroupLocalInvocationId
+    and code:SubgroupSize built-ins (internal issue 3459).
+  * Use numeric format (e.g. etext:*SFLOAT), numeric type (e.g. "`float`"),
+    and SPIR-V type (e.g. code:OpTypeFloat, width, sign) consistently in the
+    specification, rather than mixing and matching by accident (internal
+    merge request 5627).
+  * Add <<spirvenv-module-validation-runtime,
+    Runtime SPIR-V Validation>> VUs for Mesh and Task
+    code:max*Size using the same wording as for
+    code:maxComputeSharedMemorySize (internal merge request 5804).
+  * Add missing `const` to
+    slink:VkVideoDecodeH265PictureInfoKHR::pname:pStdPictureInfo (internal
+    merge request 5859).
+  * Convert `scripts/genanchorlinks.py` script into an asciidoctor
+    extension.
+
+New Extensions
+
+  * apiext:VK_KHR_ray_tracing_position_fetch
+
+-----------------------------------------------------
+
+Change log for April 20, 2023 Vulkan 1.3.248 spec update:
+
+GitHub Issues:
+
+  * Clarify when <<deferred-host-operations-requesting, parameter access for
+    deferred commands>> can be done (public issue 2092).
+  * Clarify <<fundamentals-objectmodel-lifetime, object lifetimes for
+    deferred commands>> (public issue 2100).
+  * Add missing :refpage: markup to pages that use commonvalidity VUs, so
+    the API portion of the VUID is rendered correctly (public issue 2104).
+
+Internal Issues
+
+  * Update slink:VkFragmentShadingRateCombinerOpKHR language to address
+    differences between Fragment Shading Rate clamping and DX Variable
+    Shading Rate input sanitization (internal issue 3339).
+  * Add common VU for slink:VkAttachmentDescription2 and
+    slink:VkAttachmentReference2KHR, and VU to
+    slink:VkGraphicsPipelineCreateInfo, to ensure render pass and pipeline
+    sample counts are valid, and related specification language in
+    <<renderpass-noattachments>> (internal issue 3422).
+  * Clarify that <<textures-texel-mipmap-filtering, minmax filtering applies
+    between mip levels>> (internal issue 3450).
+  * Add ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT to
+    slink:VkPipelineColorBlendStateCreateInfo attachment VUs 07353 and 07608
+    (internal issue 3455).
+  * Fix "`fragment output interface`" -> "`fragment shader state`" typo in
+    slink:VkGraphicsPipelineCreateInfo VUs 06485 and 06486 (internal MR
+    5824).
+  * Collapse redundancies in dynamic state VUs for
+    slink:VkGraphicsPipelineCreateInfo and
+    slink:VkPipelineViewportStateCreateInfo (internal MR 5838).
+  * Collapse redundancies in dynamic state VUs for
+    slink:VkGraphicsPipelineCreateInfo and
+    slink:VkGraphicsPipelineCreateInfo (internal MR 5853).
+  * Clarify source of the custom border color in a NOTE to
+    slink:VkSamplerCustomBorderColorCreateInfoEXT and a footnote to the
+    <<textures-border-replacement-table, Border Texel Components After
+    Replacement>> table (internal MR 5855).
+  * Update registry scripts to enable using combined Vulkan and Vulkan SC
+    registry entries to generate combined headers for use with SC ecosystem
+    tooling (internal MR 5858).
+  * Add <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>> VU
+    to require decorations to match between shader stages (internal MR
+    5861).
+
+-----------------------------------------------------
+
+Change log for April 12, 2023 Vulkan 1.3.247 spec update:
+
+GitHub Issues:
+
+  * Fix typo in apiext:VK_EXT_shader_object sample code (public PR 2094).
+  * Experimental Antora site generator code for Vulkan Documentation Project
+    demo - see https://github.com/KhronosGroup/Vulkan-Site/ for more
+    information and links to the live site demo (public PR 2097).
+  * Fix typo to code:StdVideoDecodeH265ReferenceInfo <<decode-h265, H.265
+    Decode Operations>> (public PR 2098).
+
+Internal Issues
+
+  * Improve wording for code:Location VUs 04917 and 04919 (internal issue
+    2737).
+  * Add wording about host write guarantees and non-temporal instructions
+    for flink:vkDeviceWaitIdle (internal issue 3404).
+  * Clarify undefined values in the <<interfaces-fragmentoutput, Fragment
+    Output Interface>> section, and improve the explanation of how fragment
+    shader interfaces work (internal issue 3416).
+  * Add `ratification` status attribute to <extension> XML and reflect it in
+    the extension appendix metadata. Add new '-spec ratified' option to
+    `makeSpec` script (internal issue 3417).
+  * Add a commonvalidity file `shader_create_spv_common.adoc` for creating
+    SPIR-V shaders and use it for slink:VkShaderCreateInfoEXT and
+    slink:VkShaderModuleCreateInfo (internal issue 3426).
+  * Errata and wording improvements to apiext:VK_EXT_shader_object (internal
+    issue 3435).
+  * Restore two missing members that were inadvertently removed from the XML
+    definition of slink:VkDeviceFaultVendorBinaryHeaderVersionOneEXT. This
+    is not a functional change to the specification, and is approved by the
+    implementations of the apiext:VK_EXT_device_fault extension (internal
+    issue 3443).
+  * Add VUs for common draw vertex binding and
+    slink:VkGraphicsPipelineCreateInfo so the vertex input has matching
+    signed int / unsigned int / float type in both the shader and the
+    pipeline (internal MR 5627).
+  * Mention <<pipelines-graphics-subsets-vertex-input, vertex input state>>
+    in slink:VkGraphicsPipelineCreateInfo VUs 00736 and 00737 (internal MR
+    5783).
+  * Cleanup <<spirvenv, SPIR-V Environment>> appendix to use code: markup
+    consistently on SPIR-V keywords (internal MR 5823).
+  * Grammar, markup, and typo fixes for the
+    apiext:VK_HUAWEI_cluster_culling_shader extension (internal MR 5827).
+  * Use host networking in `scripts/runDocker` (internal MR 5834).
+  * Clean up apiext:VK_EXT_shader_object language and extension dependencies
+    when building a spec with just this extension included (internal MR
+    5837).
+  * Add <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>> VU
+    to ensure there is a shader output for every shader input slot (internal
+    MR 5843).
+  * Fix code:OutputVertices language for apiext:VK_EXT_shader_object in the
+    <<tessellation, Tessellator>> section to refer to the control stage, not
+    the evaluation stage (internal MR 5846).
+
+-----------------------------------------------------
+
+Change log for March 31, 2023 Vulkan 1.3.246 spec update:
+
+GitHub Issues:
+
+  * Remove redundant "`input attachment`" wording in descriptions of
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT and
+    ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT (public issue
+    2083).
+  * Add a NOTE describing state of buffers passed in
+    flink:vkBindBufferMemory2::pname:pBindInfos if the command fails (public
+    issue 2086).
+
+Internal Issues
+
+  * Add new <<spirvenv-module-validation-runtime, Runtime SPIR-V VUs>>
+    restricting code:OpTypeImage multisampling to be consistent the
+    slink:VkImageCreateInfo::pname:samples its bound image was created with
+    (internal issue 2426).
+  * Clarify that <<primsrast-sampleshading, sample interpolation>> enables
+    sample shading (internal issue 2872).
+  * Add <<spirvenv-module-validation-standalone, Standalone SPIR-V VUs>> for
+    multiple code:OpVariable for one code:Location, and use code:Location
+    and code:Component terminology consistently in related parts of the
+    specification, rather than informal equivalent terms (internal MR 5630).
+  * Add a new <<spirvenv-module-validation-runtime, Runtime SPIR-V VUs>>
+    preventing code:InputAttachmentIndex overlaps (internal MR 5759).
+  * Move apiext:VK_NV_displacement_micromap interfaces to the provisional
+    `vulkan_beta.h` header (internal MR 5812).
+  * Remove redundant common validity VU 07977 for buffer alignment in buffer
+    <-> image copies (internal MR 5814).
+  * Remove redundant slink:VkWriteDescriptorSet VU 07729 (internal MR 5815).
+  * Describe multi-planar aspect masks consistently in VU statements
+    (internal MR 5816).
+  * Fix ptext:width -> pname:height typo in slink:VkRenderingInfo VU 07816
+    (internal MR 5817).
+
+New Extensions:
+
+  * apiext:VK_EXT_shader_object
+  * apiext:VK_EXT_shader_tile_image
+
+-----------------------------------------------------
+
+Change log for March 24, 2023 Vulkan 1.3.245 spec update:
+
+GitHub Issues:
+
+  * Tighten wording for <<descriptorsets-compatibility, Pipeline Layout
+    Compatibility>> (public issue 1853).
+  * Attempt to clarify "`supported`" vs. "`enabled`" in the
+    <<extendingvulkan-device-extensions, Device Extensions>>,
+    <<fundamentals-validusage-extensions, Valid Usage for Extensions>>, and
+    <<extendingvulkan-instanceanddevicefunctionality, Instance and Device
+    Functionality>> sections (public issue 2035).
+  * Fix markup typo (public issue 2089).
+
+
+Internal Issues
+
+  * Fix slink:VkRayTracingPipelineCreateInfoKHR VU interactions in the
+    presence of stages and groups (internal issue 3104).
+  * Fix standalone SPIR-V VU 04924 to clarify components can also be arrays
+    of scalars or vectors (internal issue 3411).
+  * Add anchors for all <<interfaces-builtin-variables, Built-In Variables>>
+    (internal issue 3418).
+  * Add common image layout transition VUs to prevent inconsistent image
+    barrier with separate depth/stencil (internal MR 5634).
+  * Add NOTE of intended use cases for slink:VkDirectDriverLoadingListLUNARG
+    to the description of slink:VkInstanceCreateInfo (internal MR 5692).
+  * Update Khronos specification license terms to the latest version
+    (internal MR 5717).
+  * Fix slink:VkGraphicsPipelineCreateInfo VU 07725 requirement that
+    code:PointSize be written to for every vertex emitted (internal MR
+    5790).
+  * Set missing `refpage` attribute when including some pipeline common
+    VUIDs (internal MR 5795).
+  * Add missing VUs to flink:vkCmdPushDescriptorSetWithTemplateKHR (internal
+    MR 5798).
+  * Fix style guide word choice table markup problem that resulted in
+    off-by-one column errors (internal MR 5808).
+  * Use style guide preferred form of "`depth/stencil format`" (internal MR
+    5810).
+
+New Extensions:
+
+  * apiext:VK_NV_displacement_micromap
+
+-----------------------------------------------------
+
+Change log for March 17, 2023 Vulkan 1.3.244 spec update:
+
+GitHub Issues:
+
+  * Fix typo in
+    slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceRenderAreaCount
+    (public issue 2078).
+
+Internal Issues
+
+  * Move copy attribute's pname: to commonvalidity attributes to aid with
+    VUID generation (internal MR 5781).
+  * Add a .mailmap file (internal MR 5786).
+  * Refactor pipeline layout consistency VUs for
+    slink:VkComputePipelineCreateInfo, slink:VkGraphicsPipelineCreateInfo,
+    and slink:VkRayTracingPipelineCreateInfoNV into common validity
+    statements (internal MR 5750).
+  * Make VUID tag generation prioritize attributes, helping ensure tags are
+    unique when the same common validity file is included twice in the same
+    VU block (internal MR 5791).
+
+New Extensions:
+
+  * apiext:VK_KHR_map_memory2
+
+-----------------------------------------------------
+
+Change log for March 12, 2023 Vulkan 1.3.243 spec update:
+
+GitHub Issues:
+
+  * Clarify descriptions of
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT and
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT to include missing
+    operations and properly refer to advanced blend operations (public issue
+    2047).
+  * Add specification language for ename:VK_REMAINING_3D_SLICES_EXT (public
+    issue 2063).
+  * Fix some out of date cross-references and citations. Update normative
+    reference sections and cite them appropriately in the specification,
+    registry schema, and style guide documents (public issue 2069).
+  * Reverse aliasing of ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT to a
+    reserved bit for Vulkan SC (public issue 2070).
+  * Add Mobileye vendor ID reservation (public pull request 2076).
+
+Internal Issues
+
+  * Updates to provisional video encode extensions including minor API
+    changes - see change logs in the apiext:VK_EXT_video_encode_h264,
+    apiext:VK_EXT_video_encode_h265, and apiext:VK_KHR_video_encode_queue
+    extension appendices for more details (internal issue 3329).
+  * Add VU logic for ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT to
+    common draw, flink:vkCmdBindPipeline, and
+    slink:VkGraphicsPipelineCreateInfo (internal issue 3355).
+  * Add to the NOTE in the <<queries-occlusion, Occlusion Queries>> section
+    describing possible differences in query results between implementations
+    even when ename:VK_QUERY_CONTROL_PRECISE_BIT is specified (internal
+    issue 3364).
+  * Fix a few pname:pNext pointer input-only structure members defined by
+    apiext:VK_EXT_swapchain_maintenance1 to add `const` qualifiers in XML
+    (internal issue 3367).
+  * Clarify why setting the stride with flink:vkCmdBindVertexBuffers2 has
+    additional restrictions relative to setting the static state, and add a
+    corresponding issue to the apiext:VK_EXT_extended_dynamic_state appendix
+    (internal issue 3391).
+  * Fix reflow script so VUID tag generation / duplicate checking can be
+    performed independently of text reflowing (internal issue 3394).
+  * Fix some incorrectly rewritten text that looks like a link, but is not,
+    in refpage source code blocks (internal issue 3401).
+  * Add code:Vertex code:Location restrictions when dynamic vertex input
+    state is enabled to common draw vertex binding and
+    slink:VkGraphicsPipelineCreateInfo VUs (internal merge request 5541).
+  * Refactor some common image copy VUs (internal merge request 5659).
+  * Refactor common image copy VUs not affected by
+    apiext:VK_QCOM_rotated_copy (internal merge request 5660).
+  * Update XML `<extension>` dependencies for VulkanSC in cases where an
+    extension has been promoted to core in that API, but the extension
+    itself is not supported (internal merge request 5723).
+  * Call out extension and feature dependencies explicitly in some VUs
+    (internal merge request 5737).
+  * Fix typo in asciidoctor conditional markup for
+    slink:VkPipelineShaderStageCreateInfo VU 06716. (internal merge request
+    5726).
+  * Update wording of slink:VkImageViewSlicedCreateInfoEXT specifying when
+    this structure is ignored (internal merge request 5734).
+  * Fix wording of slink:VkD3D12FenceSubmitInfoKHR VUs 00079 and 00080
+    (internal merge request 5742).
+  * Use "`component`" consistently when referring to pname:format arguments,
+    replacing "`aspect`" (internal merge request 5746).
+  * Add missing slink:VkImageViewSlicedCreateInfoEXT VU for pname:viewType
+    (internal merge request 5749).
+  * Remove redundant slink:vkCmdClearAttachments dynamic rendering VUs 07882
+    and 07883 (internal merge request 5751).
+  * Remove redundant slink:VkGraphicsPipelineCreateInfo code:InputAttachment
+    dynamic rendering VU 06056 (internal merge request 5752).
+  * Fix description of mesh shader execution modes in the
+    apiext:VK_EXT_mesh_shader proposal document (internal merge request
+    5756).
+  * Minor updates to apiext:VK_HUAWEI_cluster_culling_shader extension APIs.
+    These are incompatible changes but the vendor driver release with this
+    extension has not been published, so there should be no user impact
+    (internal merge request 5767).
+  * Restructure <<fundamentals-validusage-enums, Valid Usage for Enumerated
+    Types>> and <<fundamentals-validusage-flags, Valid Usage for Flags>>
+    sections to make clear that the rules for enums and flag bits follow the
+    same formula, and be more precise in defining interactions with
+    extensions and core versions (internal merge request 5769).
+  * Make normative text and NOTE in the
+    <<synchronization-pipeline-stages-masks>> section consistent (internal
+    merge request 5772).
+  * Refactor single-sampled requirement of copy commands into common VU
+    statements (internal merge request 5776).
+
+-----------------------------------------------------
+
+Change log for February 26, 2023 Vulkan 1.3.242 spec update:
+
+GitHub Issues:
+
+  * Separate reflow document traversal and internal logic (public pull
+    request 2042).
+  * Specify operator evaluation in XML `depends` expressions must be
+    left-to-right for operators of the same precedence (public pull request
+    2066).
+  * Revert to only parenthesizizing formal arguments of VK_DEFINE*HANDLE
+    macros in the `vulkansc` api, to work around a bug in MSVC (public issue
+    2067).
+
+Internal Issues
+
+  * Clarify <<ray-intersection-candidate-determination, ray transform
+    invariance>> with respect to intersection with multiple instances
+    (internal issue 3371).
+  * Fix extraneous `+` sign appearing in dependency section of extension
+    refpages (internal issue 3382).
+  * Add draw dispatch common VU for
+    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT and new
+    <<resources-buffer-view-format-features, Buffer View Format Features>>
+    section (internal merge request 5597).
+  * Move subpass self-dependency language into slink:VkSubpassDependency and
+    pipeline barrier common VUs (internal merge request 5687).
+  * Typo fix for double words ("`the the`") (internal merge request 5739).
+  * Clarify Vulkan memory model requirements in the <<memory-model, Memory
+    Model>> appendix (internal cross-api/memory-model issue 157).
+  * Remove `update_valid_usage_ids.sh` script, which has not worked for a
+    long time.
+
+New Extensions:
+
+  * apiext:VK_NV_low_latency
+
+-----------------------------------------------------
+
+Change log for February 16, 2023 Vulkan 1.3.241 spec update:
+
+GitHub Issues:
+
+  * Clarify apiext:VK_EXT_debug_utils object support (public issue 1668,
+    public pull request 2034).
+  * Fix capitalization typos in a few VUs (public pull request 2050).
+  * Parameterize asciidoc includes of asciidoc files from `vkspec.adoc`
+    using `{chapters}` attribute (public pull request 2051).
+
+Internal XML Schema Issues:
+
+Several needed XML schema changes are introduced in this update which may
+impact downstream XML users who are doing their own parsing. Users of our
+Python generator framework are unlikely to be impacted. If you have
+difficulty adapting to these changes, please open an issue on the
+Vulkan-Docs GitHub repository.
+
+  * Introduce a new `depends` attribute to the XML schema, replacing the
+    `requires` and `requiresCore` attributes of `<extension>` tags, and the
+    `features` and `extension` attributes of `<require>` tags. This is an
+    intentional and unavoidable breaking change, allowing us to correctly
+    express more complex dependencies. XML users doing their own XML parsing
+    and needing this information must treat the `depends` attribute as a
+    boolean expression. This change also adds a description of the different
+    interpretation of device and instance extension dependencies in a single
+    place in the new <<extensions, "`Extension Dependencies`">> section at
+    the start of the extensions appendix, rather than including a
+    boilerplate comment about "`device-level extensions`" with each relevant
+    extension dependency described later in the appendix (internal issue
+    2883).
+  * Import XML, script, and config file changes from the Vulkan SC spec
+    repository. This change uses the `api` XML attribute to specialize some
+    tags for the Vulkan and Vulkan SC APIs. While this is not a new
+    attribute, it has not been extensively used in this fashion previously
+    in this repository. XML users doing their own XML parsing must now
+    filter out tags with `api` attributes not matching the API they are
+    generating, and must also filter out `<extension>` tags whose
+    `supported` attribute does not include that API (internal issue 3348).
+  * Remove some redundancies from refactored XML dependencies (internal
+    merge request 5713).
+  * Express correct XML dependencies of apiext:VK_KHR_buffer_device_address,
+    now that the new `depends` schema supports that (internal merge request
+    5721).
+  * Add a new `deprecated` attribute to several tags in XML schema which
+    provides some guidance as to why an API was deprecated. Remove `comment`
+    text which some downstream XML parsers were using to infer deprecation,
+    which was never an intended or supported purpose of the comments (public
+    ash-rs/ash issue 670, internal merge request 5537).
+
+Other Internal Issues
+
+  * Expand the definition of <<fundamentals-validusage-enums, "`valid
+    enumerant value`">> to include whether the extension or core version
+    defining that enumerant is enabled or supported. This has a global
+    effect on corresponding VU statements, and the Vulkan Validation Layer
+    is being updated accordingly (internal issue 2912).
+  * Update the <<synchronization>> chapter in several places to clarify that
+    pipeline barriers work only within a single queue (internal issue 3365).
+  * Add ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR in a
+    few places it was missing, and update description for copy commands to
+    specify where it should be used with apiextVK_KHR_synchronization2
+    rather than
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR (internal
+    merge request 5604).
+  * Fix typos in `proposals/VK_KHR_video_decode_queue.adoc` (internal merge
+    request 5646).
+  * Add dynamic state to apiext:VK_EXT_discard_rectangles
+    (ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT and
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT) and for
+    apiext:VK_NV_scissor_exclusive
+    (ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV) that was overlooked
+    in apiext:VK_EXT_extended_dynamic_state3. While this is adding
+    functionality to existing extensions, the implementers of these
+    extensions have all signed off on this change (internal merge request
+    5671).
+  * Disallow ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK in
+    slink:VkDescriptorGetInfoEXT VU 08018 (internal merge request 5681).
+  * Rearrange some language in flink:vkGetRayTracingShaderGroupHandlesKHR
+    and flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR to follow
+    the style guide (internal merge request 5683).
+  * Update to new Docker image SHA for CI and building specs (internal merge
+    request 5688).
+  * Add `SPV_EXT_fragment_fully_covered` to XML `<spirvextensions>` section
+    (internal merge request 5689).
+  * Add missing pname:pNext description to
+    slink:VkVideoDecodeH264DpbSlotInfoKHR (internal merge request 5701).
+  * Add missing internal links for the term
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    (internal merge request 5704).
+  * Move ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY VU common draw vertex
+    binding VUs, and word VUs 03420 and 07500 the same, minus the reference
+    to pname:dynamicPrimitiveTopologyUnrestricted (internal merge request
+    5708).
+  * Ban some advanced blend modes from slink:VkColorBlendEquationEXT that
+    must be set using a different mechanism (internal merge request 5705).
+  * Update copyright dates to 2023, and add CI check for Khronos-copyright
+    files (internal merge request 5716).
+  * Add clarifying NOTE and typo fixes for
+    apiext:VK_HUAWEI_cluster_culling_shader (internal merge request 5718).
+  * Add missing XML dependencies on
+    apiext:VK_KHR_get_physical_device_properties2 to several extensions
+    (internal merge request 5719).
+  * Remove flink:vkCmdResolveImage VUs where pname:srcImage is of type
+    ename:VK_IMAGE_TYPE_3D (internal vulkansc issue 178).
+
+New Extensions:
+
+  * apiext:VK_EXT_image_sliced_view_of_3d
+  * apiext:VK_ARM_shader_core_properties
+  * apiext:VK_QCOM_multiview_per_view_render_areas
+
+-----------------------------------------------------
+
+Change log for January 26, 2023 Vulkan 1.3.240 spec update:
+
+GitHub Issues:
+
+  * Fix <<limits-maxPushDescriptors, pname:maxPushDescriptors>> description
+    (public pull request 2038).
+
+Internal Issues:
+
+  * Finish banning NULL pipeline layouts in
+    slink:VkGraphicsPipelineCreateInfo VUs (internal merge request 5673).
+  * Fix flink:vkCmdDrawIndirectByteCountEXT VU 02289 to refer to the correct
+    structure name (internal merge request 5674).
+  * Clarify how to define an inactive acceleration structure instance in the
+    <<acceleration-structure-update, Acceleration Structure Update Rules>>
+    (internal merge request 5677).
+  * Add missing common draw and draw dispatch VUs when setting dynamic state
+    at draw time (internal merge request 5679).
+  * Add more information about pname:texelBufferAlignment promotion to core
+    in the apiext:VK_EXT_texel_buffer_alignment and <<versions-1.3, Version
+    1.3>> appendix language (internal merge request 5680).
+
+New Extensions:
+
+  * apiext:VK_EXT_pipeline_library_group_handles
+
+-----------------------------------------------------
+
+Change log for January 19, 2023 Vulkan 1.3.239 spec update:
+
+GitHub Issues:
+
+  * Clarify semaphore/fence behavior of flink:vkAcquireNextImageKHR so that
+    if successful, both semaphore and fence will be signaled (whichever
+    provided), and if not successful, both are unaffected (public issues
+    1533, 1776, 2009).
+  * Update common draw VU 07751 to require that
+    flink:vkCmdSetDiscardRectangleEXT was called for each discard rectangle
+    when the corresponding dynamic state is enabled (public issue 1657).
+  * Add ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR to
+    access masks VUs (public pull request 1997).
+  * Fix a typo in flink:vkCmdSetCoverageToColorLocationNV (public pull
+    request 2000).
+  * Clarify interpretation of H.265 reference indices
+    code:RefPicSetStCurrBefore, code:RefPicSetStCurrAfter, and
+    code:RefPicSetLtCurr (public issue 2010).
+  * Add missing dimension VUs for slink:VkRenderingInfo (public issue 2015).
+  * Fix <<formats-mandatory-features-32bit, Mandatory format support: 32-bit
+    components>> table to support ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+    for ename:VK_FORMAT_R32_SFLOAT without apiext:VK_EXT_shader_atomic_float
+    (public pull request 2011).
+  * Fix incorrect link in apiext:VK_KHR_create_renderpass2 appendix (public
+    pull request 2037).
+
+Internal Issues:
+
+  * Add `scripts/stripAPI.py` to transform the XML by removing non-matching
+    `api` elements (internal issue 3281).
+  * Update introduction of the <<fragops, Fragment Operations>> chapter to
+    allow the <<fragops-samplemask, sample mask test>> to be performed after
+    <<fragops-samplecount, sample counting>> (internal issue 3330).
+  * Add slink:VkImageViewCreateInfo VU to disallow creating image views with
+    multiple plane bits (internal issue 3332)
+  * Add a new VU to slink:VkGraphicsPipelineCreateInfo requiring pipeline
+    layout compatibility in the graphics pipeline library link step
+    (internal issue 3334).
+  * Report an error message from generator scripts when an unknown name is
+    referenced, rather than just failing (internal merge request 5614).
+  * Document in elink:VkPipelineCreateFlagBits that
+    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    and
+    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+    are only needed when combining fragment shading rate or fragment density
+    maps with dynamic rendering (internal merge request 5616).
+  * Moved a VU for index offsets when pname:robustBufferAccess2 is not
+    enabled from flink:vkCmdDrawIndexed to become a common VU for all the
+    index buffer draw calls (internal merge request 5623).
+  * Add VUs to slink:VkWriteDescriptorSet and slink:VkDescriptorImageInfo
+    restricting use of other descriptor types from being a 2D view of a 3D
+    image (internal merge request 5626).
+  * Clarify that the tlink:PFN_vkReallocationFunction callback may return
+    `NULL` (internal merge request 5637).
+  * Clarify that apiext:VK_KHR_format_feature_flags2 only has to be
+    supported, not enabled, in the <<resources-image-view-format-features,
+    Image View Format Features>> section (internal merge request 5651).
+  * Factor some VUs out of the `copy_bufferimage_to_imagebuffer_common`
+    common VU file into a new
+    `copy_bufferimage_to_imagebuffer_buffer_alignment_common` file (internal
+    merge request 5657).
+  * Add new driver id ename:VK_DRIVER_ID_IMAGINATION_OPEN_SC (internal merge
+    request 5658).
+  * Factor some VUs out of the `image_memory_barrier_common` common VU file
+    into a new `image_layout_transition_common` file (internal merge request
+    5662).
+  * Clarify that format-less buffer views only apply to storage texel
+    buffers in the <<features-shaderStorageImageReadWithoutFormat>>,
+    <<features-shaderStorageImageWriteWithoutFormat>>, and
+    <<formats-without-shader-storage-format, Formats without shader storage
+    format>>, sections and for elink:VkFormatFeatureFlagBits2 (internal
+    merge request 5668).
+
+New Extensions:
+
+  * apiext:VK_HUAWEI_cluster_culling_shader
+
+-----------------------------------------------------
+
+Change log for December 19, 2022 Vulkan 1.3.238 spec update:
+
+Internal Issues:
+
+  * Do not require in-bounds index buffers for flink:vkCmdDrawIndexed if
+    pname:robustBufferAccess2 is enabled (internal issue 3311).
+  * Only download needed parts of VK-GL-CTS repository for CI test (internal
+    issue 3315).
+  * Add a NOTE that etext:FORMAT_FEATURE_*_ATOMIC_BIT
+    are only advertised for single-component formats
+    (internal issue 3318).
+  * Add a common acceleration structure copy VU disallowing src/dst overlap
+    (internal merge request 5587).
+  * Add common VUs for EXT mesh draw calls (internal merge request 5588).
+  * Change validation of flink:vkGetImageSubresourceLayout2EXT to allow
+    queries of images with ename:VK_IMAGE_TILING_OPTIMAL tiling (internal
+    merge request 5590).
+  * Add VUs to flink:vkCmdBuildAccelerationStructureNV and common
+    acceleration structure copy VUs to require pname:dst to be bound
+    completely and contiguously (internal merge request 5602).
+  * Fix typo in member name ptext:presentScaling -> pname:scalingBehavior
+    for slink:VkSwapchainPresentScalingCreateInfoEXT (internal merge request
+    5603).
+  * Remove common copy image sample count VU 07745, which duplicates VU
+    00136 (internal merge request 5605).
+  * Fix common image memory barrier layout VU to refer to correct members
+    instead of nonexist pname:layout (internal merge request 5608).
+
+New Extensions:
+
+  * Add final (non-provisional) versions of the Vulkan Video Core and Decode
+    extensions (internal merge request 5351):
+  ** apiext:VK_KHR_video_queue
+  ** apiext:VK_KHR_video_decode_queue
+  ** apiext:VK_KHR_video_decode_h264 (promoted from EXT)
+  ** apiext:VK_KHR_video_decode_h265 (promoted from EXT)
+
+-----------------------------------------------------
+
+Change log for December 8, 2022 Vulkan 1.3.237 spec update:
+
+Public Issues:
+
+  * Fix multiple function pointer type definition problem introduced by
+    apiext:VK_LUNARG_direct_driver_loading and update CI tests to catch this
+    type of issue going forward (public issue 1998).
+  * Fix typo in flink:vkCmdCopyImageToBuffer (public issue 1999).
+  * Do not require ename:VK_STENCIL_OP_KEEP in
+    flink:vkCmdSetStencilWriteMask and
+    slink:VkPipelineDepthStencilStateCreateInfo if both front and back
+    pname:writeMask values are zero (public Vulkan-ValidationLayers issue
+    4921).
+
+Internal Issues:
+
+  * Run Vulkan CTS framework tests as part of CI (internal issue 3274).
+  * Clarify that <<spirvenv-evaluation-expressions, denorm ops can reorder
+    without code:NoContract (internal issue 3303).
+  * Add the <<resources-memory-overlap, Resource Memory Overlap>> section to
+    clarify that there is no cache line hazard (internal issue 3306).
+  * Restrict ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT to
+    three-dimensional images in slink:VkImageCreateInfo and
+    elink:VkImageCreateFlagBits (internal merge request 5589).
+
+New Extensions:
+
+  * apiext:VK_EXT_surface_maintenance1
+  * apiext:VK_EXT_swapchain_maintenance1
+
+-----------------------------------------------------
+
+Change log for December 1, 2022 Vulkan 1.3.236 spec update:
+
+Public Issues:
+
+  * Fix Roadmap 2022 JSON by moving pname:lineWidthGranularity and
+    pname:pointSizeGranularity to the optionals section of the profile
+    (public Vulkan-Profiles issue 321).
+  * Expand description of <<devsandqueues-lost-device, Lost Device>> to
+    describe how to determine which commands may be affected and return
+    ename:VK_ERROR_DEVICE_LOST (public issue 1968).
+  * Clarify that input attachment descriptors follow static use rules in the
+    <<compatibility-inputattachment, Fragment Input Attachment
+    Compatibility>> section and common drawing VUs (public issue 1979).
+  * Move WinRT extensions into `vulkan_win32.h` header (public issue 1980).
+  * Remove `returnedonly` attribute from slink:VkSubresourceLayout in XML
+    (public issue 1988).
+
+Internal Issues:
+
+  * Do not use basetype: for external API types without definitions in the
+    Specification, and make basetype: link to the corresponding API
+    (internal issue 2703, fixes one sub-issue of public issue 1984).
+  * Clarify treatment of shared depth/stencil images in depth-only or
+    stencil-only resolve attachments for slink:VkRenderingAttachmentInfo
+    (internal issue 3243).
+  * Clarify language for acceleration structure and micromap scratch access
+    bits (internal issue 3244).
+  * Clarify that code:Output variable writes have an effect in
+    <<shaders-helper-invocations, Helper Invocations>> (internal issue
+    3270).
+  * Add missing apiext:VK_EXT_discard_rectangles common drawing VU (internal
+    issue 3292).
+  * Add VUs to slink:VkRenderingInfo preventing inconsistent layout usage
+    (internal issue 3301).
+  * Change parent of slink:VkSwapchainKHR to slink:VkDevice (internal merge
+    request 5521).
+  * Add and tidy up some shared common image copy VUs (internal merge
+    request 5371).
+  * Fix apiext:VK_EXT_color_write_enable common drawing VUs (internal merge
+    request 5548).
+  * Add missing apiext:VK_EXT_discard_rectangles common drawing VU (internal
+    merge request 5549).
+  * Rename slink:VkVideoDecodeH265PictureInfoEXT members ptext:sliceCount ->
+    pname:sliceSegmentCount and ptext:sliceOffsets ->
+    pname:sliceSegmentOffsets (internal merge request 5550).
+  * Clarify <<ray-tracking-capture-replay, Ray Tracing Capture Replay>>
+    section and related language for
+    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
+    and flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR (internal
+    merge request 5555).
+  * Add shader interface variable type and width constraint VU to
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    (internal merge request 5556).
+  * Clarify that code:PointSize is not always needed for mesh shaders in
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    VU 07728 (internal merge request 5562).
+  * Fix minor markup consistency typos in feature and limit xrefs (internal
+    merge request 5563).
+  * Fix typo in apiext:VK_QCOM_image_processing for required value of
+    code:unnormalizedCooordinates for the input code:sampler (internal merge
+    request 5564).
+  * Fix typo in slink:VkDescriptorDataEXT language (internal merge request
+    5568).
+  * Add a NOTE to the apiext:VK_NV_optical_flow appendix and update the
+    allowed command queues for flink:vkCmdResetQueryPool and
+    flink:vkVmdWriteTimestamp in the XML to include the optical flow queue
+    (internal merge request 5570).
+  * Require Wayland WSI implementations to send code:wl_surface.commit in
+    flink:vkQueuePresentKHR for all present modes (internal merge request
+    5574).
+  * Add missing slink:VkBindImageMemoryInfo VU for
+    etext:VK_IMAGE_CREATE_DISJOINT_BIT images (internal merge request 5580).
+  * Fix markup of some common stage mask VUs to prevent duplicate VUIDs
+    being generated (internal merge request 5581).
+  * Add a common draw/dispatch VU for image view shader mapping (internal
+    merge request 5583).
+  * Update the registry schema document to describe all allowed command
+    queue types.
+
+New Extensions:
+
+  * apiext:VK_LUNARG_direct_driver_loading
+  * apiext:VK_QCOM_multiview_per_view_viewports
+
+-----------------------------------------------------
+
+Change log for November 17, 2022 Vulkan 1.3.235 spec update:
+
+Public Issues:
+
+  * Require Vulkan 1.1 for apiext:VK_EXT_mesh_shader in XML (public issue
+    1976).
+  * Reserve driver ID for NVK (public pull request 1983).
+
+Internal Issues:
+
+  * Add VUs for code:PointSize with mesh shaders to
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    and slink:VkGraphicsPipelineCreateInfo (internal issues 681 and 2727).
+  * Add the <<features-shadingRateImage, pname:shadingRateImage>> for a
+    slink:VkImageCreateInfo VU (internal merge request 5552).
+
+New Extensions:
+
+  * apiext:VK_EXT_descriptor_buffer
+
+-----------------------------------------------------
+
+Change log for November 10, 2022 Vulkan 1.3.234 spec update:
+
+Public Issues:
+
+  * Add slink:VkGraphicsPipelineCreateInfo VUs for using code:ViewIndex and
+    for shader interactions, and make phrasing of some other VUs for this
+    structure consistent (public Vulkan-ValidationLayers issue 1749).
+
+Internal Issues:
+
+  * Reorder <<synchronization-pipeline-stages-supported, Supported pipeline
+    stage flags>> table to more closely match the order in
+    elink:VkPipelineStageFlagBits2, add some missing stages, and group flag
+    bits representing multiple stages with the individual stages they
+    represent (internal issue 3260).
+  * Add an issue to the apiext:VK_KHR_fragment_shading_rate proposal
+    document clarifying that the default fragment size participates in
+    combination operations (internal issue 3266).
+  * Clarify that references in entry point interface lists are not "`Static
+    Use`" in its glossary definition (internal issue 3287).
+  * Add VU for flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV
+    restricting pname:externalHandleType to at most one bit set (internal
+    merge request 5528).
+  * Add missing code:SPV_NV_shader_invocation_reorder `spirvextension` tag
+    in XML (internal merge request 5529).
+  * Minor consistency edits to spec language for recently released NV
+    extensions - array / bitmask / feature requirement wording, reorder
+    sections so refpages are correctly formatted, remove un-needed
+    asciidoctor attributes (internal merge request 5530).
+  * Update Roadmap 2022 JSON to correct the `maxInlineUniformTotalSize`
+    limit to 256 instead of 4, matching the specification text (internal
+    merge request 5531).
+  * Correct "`less than`" to "`less than or equal to`" in VU for mipmap
+    levels in flink:vkCmdClearColorImage and
+    flink:vkCmdClearDepthStencilImage (internal merge request 5533).
+  * Properly conditionalize and markup language for required pipeline state
+    interactions with apiext:VK_EXT_graphics_pipelin_library (internal merge
+    request 5535).
+  * Add a NOTE to flink:vkSetEvent clarifying when to signal events waited
+    for in a command buffer (internal merge request 5536).
+  * Add code:HitObjectAttributeNV to
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    VU 06672 (internal merge request 5538).
+  * Use consistent wording for "`_handle_ is not dlink:VK_NULL_HANDLE`" and
+    update style guide accordingly.
+
+-----------------------------------------------------
+
+Change log for November 3, 2022 Vulkan 1.3.233 spec update:
+
+Internal Issues:
+
+  * Tighten wording around <<descriptor-validity>> and in the
+    <<descriptor-set-initial-state>> section (internal issue 3248).
+  * Add VU for code:Component decoration on 64 bit types in
+    <<spirvenv-module-validation-standalone Standalone SPIR-V Validation>>
+    (internal merge request 5495).
+  * Clarify the meaning of "`new image`" in flink:vkWaitForPresentKHR
+    (internal merge request 5513).
+  * Fix conditional markup around common VUs for
+    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR (internal merge request
+    5514).
+  * Unify some image usage VUs for slink:VkSwapchainCreateInfoKHR (internal
+    merge request 5515).
+  * Add some missing conditional markup around common draw VUs for
+    apiext:VK_EXT_extended_dynamic_state3, add its features to the
+    <<features-requirements, Feature Requirements>> section, and update the
+    extension proposal document to fix some typos (internal merge request
+    5517).
+  * Fix slink:VkCommandBufferInheritanceRenderingInfoKHR VU 06492 along with
+    minor markup fixes for an extension glossary term (internal merge
+    request 5518).
+  * Disallow input attachments being null for
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT by refactoring
+    slink:VkWriteDescriptorSet VUs (internal issue 3246).
+  * Add `SPV_AMD_shader_early_and_late_fragment_tests` to `<spirvextension>`
+    XML (internal issue 3276).
+  * Fix Makefile dependencies to avoid rebuilding the HTML targets
+    unnecessarily, and add a dependency to the `allchecks` Makefile target
+    to validate links in the HTML specification output, building it if
+    necessary. Note that the new check should be expected to fail unless
+    building with `makeSpec -spec all` (internal merge request 5525).
+  * Tag apiext:VK_IMG_format_pvrtc as deprecated in XML (internal merge
+    request 5527).
+
+New Extensions:
+
+  * apiext:VK_NV_memory_decompression
+  * apiext:VK_NV_ray_tracing_invocation_reorder
+  * apiext:VK_NV_copy_memory_indirect
+
+-----------------------------------------------------
+
+Change log for October 27, 2022 Vulkan 1.3.232 spec update:
+
+Public Issues:
+
+  * Improve code:OpPtrAccessChain code:Base storage class VUs (public
+    KhronosGroup/SPIRV-Tools pull request 4965).
+
+Internal Issues:
+
+  * Force applications to specify ename:VK_FORMAT_UNDEFINED for an unused
+    attachment in both slink:VkPipelineRenderingCreateInfoKHR and
+    slink:VkCommandBufferInheritanceRenderingInfoKHR. The previous behaviour
+    of allowing unused attachments to have any format is not supported on
+    some conformant implementations that have shipped and cannot be updated.
+    This functionality is intended to be restored via a new extension in the
+    near future (internal issue 3123).
+  * Minor VU fixes for apiext:VK_EXT_extended_dynamic_state3 (internal issue
+    3253).
+  * Add missing VUs identified during validation layer work for
+    apiext:VK_EXT_extended_dynamic_state3 (internal issue 3261).
+  * Fix some minor markup and asciidoctor conditionalization errors causing
+    dead internal links in some builds of the specification (internal issues
+    3267, 3269).
+  * Fix misleading warnings from refpage generation and add a couple of
+    missing API descriptions it turned up (internal issue 3271).
+  * Fix missing extension interaction in generated interfaces description
+    for apiext:VK_EXT_legacy_dithering (internal merge request 5479).
+  * Clarify how VUs on slink:VkBuffer aliasing for overlapping ranges of
+    device memory work for flink:vkGetBufferDeviceAddressEXT (internal merge
+    request 5489).
+  * Update XML to fix generated VU for
+    flink:vkCmdSetColorWriteMaskEXT::pname:pColorWriteMasks (internal merge
+    request 5497).
+  * Move VU for flink:vkCmdSetAlphaToOneEnableEXT to the right place
+    (internal merge request 5500).
+  * Add Khronos Roadmap 2022 JSON profile file under `xml/profiles/`, and
+    export it to the Vulkan-Headers repository when updating the
+    specification (internal merge request 5504).
+  * Minor XML reorganization to work around a CTS code generation error
+    (internal merge request 5509).
+  * Add a new limit property to
+    slink:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM. The corresponding
+    extension has not yet been implemented, so this shouldn't cause a
+    compatibility break (internal merge request 5512).
+
+
+-----------------------------------------------------
+
+Change log for October 13, 2022 Vulkan 1.3.231 spec update:
+
+Public Issues:
+
+  * Add a NOTE about custom border color with combined depth/stencil formats
+    and rewrite a corresponding valid usage statement (public issue 1950).
+  * Clarify memory domain operation in slink:VkBufferMemoryBarrier for
+    ename:VK_ACCESS_HOST_WRITE_BIT and ename:VK_ACCESS_HOST_READ_BIT (public
+    issue 1958).
+  * Fix slink:VkDescriptorSetLayoutBinding refpage layout (public issue
+    1964).
+  * Clarify apiext:VK_EXT_mesh_shader builtin execution modes in
+    code:PrimitivePointIndicesEXT, code:PrimitiveLinIndicesEXT, and
+    code:PrimitiveTriangleIndicesEXT valid usage statements (public pull
+    request 1965).
+
+Internal Issues:
+
+  * Clarify behavior of return values when multiple pipelines fail to be
+    created when using apiext:VK_EXT_pipeline_creation_cache_control
+    (internal issue 3121).
+  * Add valid usage statement for flink:vkCmdExecuteCommands clarifying that
+    only occlusion and pipeline statistics queries can be inherited in
+    slink:VkCommandBufferInheritanceInfo (internal issue 3142).
+  * Remove `requiredbitmask` valid usage statement for
+    slink:VkSubmitInfo::pname:pWaitDstStageMask by adding `optional`
+    attribute to the corresponding XML (internal issue 3200).
+  * Clarify <<deferred-host-operations-requesting, allocator expectations
+    for deferred host operations>> (internal issue 3202).
+  * Add missing SPIR-V capability code:FragmentFullyCovered for
+    apiext:VK_EXT_conservative_rasterization in XML and the extension
+    appendix (internal issue 3221).
+  * Clarify interaction of apiext:VK_KHR_pipeline_robustness with
+    apiext:VK_KHR_pipeline_library for
+    slink:VkPipelineRobustnessCreateInfoEXT (internal issue 3227).
+  * Clarify that code:OpTypeImage code:MS can be 1 for multisampled
+    rendering to single samples (internal issue 3231).
+  * Clarify behavior of
+    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT in
+    slink:VkPipelineRobustnessBufferBehaviorEXT and
+    slink:VkPipelineRobustnessImageBehaviorEXT (internal issue 3237).
+  * Fix incorrect structure reference for
+    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT in elink:VkDynamicState
+    (internal issue 3257).
+  * Standardize definitions within the copies chapter - formal mathematical
+    definitions for pseudocode buffer/image addressing, remove redundant
+    YCbCr text, move apiext:VK_QCOM_rotated_copy_commands to the standard
+    location for buffer/image copies (internal merge request 5372).
+  * Fix SPV and GLSL links in the apiext:VK_EXT_opacity_micromap appendix
+    (internal merge request 5461).
+  * Use "`enabled *on* the device`" consistently in preference to "`enabled
+    *in* the device`", and add a corresponding style guide rule (internal
+    merge request 5475).
+  * Update Docker instructions in `BUILD.adoc` and add a helper script
+    `scripts/runDocker` to run Docker with the latest Khronos build image
+    (internal merge request 5483).
+
+New Extensions:
+
+  * apiext:VK_ARM_shader_core_builtins
+
+-----------------------------------------------------
+
+Change log for September 29, 2022 Vulkan 1.3.230 spec update:
+
+Public Issues:
+
+  * Add common valid usage statements for bind buffer and bind image
+    commands to prevent rebinding resources after slink:vkFreeMemory (public
+    issue 1937).
+
+Internal Issues:
+
+  * Add common valid usage statements for drawing commands to prevent
+    binding an input attachment descriptor with an image view that is not in
+    the framebuffer (internal issue 3223).
+  * Fix references to nonexistent 'fragmentShadingRate' feature (internal
+    issue 3235).
+  * Add valid usage statement to flink:vkCmdCopyQueryPoolResults disallowing
+    usage on active queries (internal issue 3236).
+  * Update structure layouts in `video.xml` for the provisional video
+    extensions to address alignment issues (internal issue 3242).
+  * Clarify that slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags
+    excludes linked libraries (internal merge request 5447).
+  * Change the type of slink:VkVideoReferenceSlotInfoKHR::pname:slotIndex to
+    `int32_t` in the provisional video extensions (internal merge request
+    5452).
+
+New Extensions:
+
+  * apiext:VK_EXT_device_address_binding_report
+  * apiext:VK_EXT_device_fault
+  * apiext:VK_EXT_extended_dynamic_state3
+  * apiext:VK_EXT_pipeline_protected_access
+  * apiext:VK_NV_optical_flow
+  * apiext:VK_NV_present_barrier
+
+-----------------------------------------------------
+
+Change log for September 22, 2022 Vulkan 1.3.229 spec update:
+
+Public Issues:
+
+  * Add pname:maxMeshWorkGroup*Count limits when no task shader is used, and
+    refactor some mesh shader valid usage statements for
+    slink:VkDrawMeshTasksIndirectCommandEXT and flink:vkCmdDrawMeshTasksEXT
+    into a common validity block (public merge request 1936).
+  * Add SPIR-V valid usage statement for the mesh shader output count, and
+    remove some redundant slink:VkPipelineShaderStageCreateInfo valid usage
+    statements (public merge request 1938).
+  * Add a comment to the <<versions-1.2-promotions, Differences relative to
+    VK_EXT_shader_viewport_index_layer>> section describing how the
+    code:ShaderViewportIndexLayerEXT capability was split into two
+    capabilities in Vulkan 1.2 (internal merge request 1951).
+
+Internal Issues:
+
+  * Be more explicit about floating-point rules in the
+    <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+    Instructions>> section (internal issues 2795, 2845).
+  * Miscellaneous minor phrasing and XML fixes for the H.264 / H.265
+    provisional video extensions (internal issue 3065).
+  * Clarifications to the style guide to clarify terminology for EXT
+    extension process and specify behavior more tightly than before
+    (internal merge request 5268).
+  * Add a CI script to check consistency of internal links in HTML output
+    (internal merge request 5433).
+  * Updates to provisional video extensions (internal merge request 5434)
+    including:
+  ** Remove H.264 MVC support from apiext:VK_EXT_video_decode_h264.
+  ** Rename parameter set related fields in the provisional video extension
+     APIs.
+  ** Rename and clarify miscellaneous parameters in the provisional video
+     extension APIs.
+  ** Fix implicit valid usage related markup in `vk.xml` related to the core
+     and decode video extension APIs.
+  ** Add previously missing definitions and fix incorrect definitions in the
+     Video Std headers.
+
+-----------------------------------------------------
+
+Change log for September 15, 2022 Vulkan 1.3.228 spec update:
+
+Public Issues:
+
+  * Specify that <<pipelines-graphics-subsets-dynamic-state, dynamic state
+    for pipeline subsets>> is ignored (public issue 1902).
+  * Remove un-needed `wayland-client.h` include from `vulkan.h` (public pull
+    request 1905).
+  * Add valid usage statement requiring an index buffer be bound for indexed
+    drawing commands (public issue 1924).
+  * Miscellaneous markup fixes (public pull request 1946).
+
+Internal Issues:
+
+  * Clarify that flink:vkCmdWaitEvents must: not execute before a
+    flink:vkSetEvent it waits on (internal issue 2971).
+  * Update valid usage statement in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V>> section to
+    clarify the interaction of *Workgroup* *Scope* with code:ExecutionModel
+    *TessellationControl* (internal issue 3071).
+  * Fix
+    slink:VkMemoryDedicatedRequirementsKHR::pname:requiresDedicatedAllocation
+    for ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT (internal issue 3074).
+  * Clarify in elink:VkFormatFeatureFlagBits that
+    ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT and
+    ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT are implied for unextended
+    Vulkan 1.0 (internal issue 3099).
+  * Add `tasks` attribute to XML `<command>` tags and tag core, KHR, and EXT
+    commands (internal issue 3117).
+  * Add more valid usage statements to prohibit feedback loop layouts when
+    the pname:attachmentFeedbackLoopLayout feature is not enabled (internal
+    issue 3189).
+  * Clarify in the <<fundamentals-floatingpoint, Floating-Point
+    Computation>> section that Inf and NaN inputs and outputs may: result in
+    undefined values (internal issue 3208).
+  * Update common valid usage statements for stage masks to properly
+    interact with apiext:VK_NV_shading_rate_image and
+    apiext:VK_KHR_fragment_shading_rate (internal issue 3228).
+  * Disallow permanent semaphore/fence imports with copy transference in
+    slink:VkImportFenceFdInfoKHR and slink:VkImportSemaphoreFdInfoKHR
+    (internal merge request 4930).
+  * Specify in flink:vkGetPhysicalDeviceSurfacePresentModesKHR and
+    slink:VkSurfaceCapabilities2KHR that some surface properties are
+    undefined when apiext:VK_GOOGLE_surfaceless_query is used (internal
+    merge request 5157).
+  * Add an Informative section describing the
+    <<boilerplate-video-std-headers, Video Std Headers>> provided with the
+    provisional video extensions (internal merge request 5384).
+  * Clarify Boolean values vs. <<limits-maxComputeSharedMemorySize,
+    pname:maxComputeSharedMemorySize>> (internal merge request 5386).
+  * Update markup for the <<boilerplate-wsi-header-table, Window System
+    Extensions and Headers>> table to render all header files no matter
+    which extensions the spec is built with (internal merge request 5411).
+  * Move timestamp example to the correct issue in the
+    apiext:VK_EXT_calibrated_timestamps extension appendix (internal merge
+    request 5420).
+  * Add missing flink:vkCmdPushDescriptorSetWithTemplateKHR valid usage
+    statements for pname:set (internal merge request 5428).
+
+New Extensions:
+
+  * apiext:VK_EXT_mutable_descriptor_type (promoted from `VALVE`).
+
+-----------------------------------------------------
+
+Change log for September 8, 2022 Vulkan 1.3.227 spec update:
+
+Public Issues:
+
+  * Add interactions for dynamic rendering in flink:vkCmdClearAttachments
+    (public issue 1835).
+  * Add code:MinLod clamping rules to <<textures-gather, Texel Gathering>>
+    and update the <<features-minLod, pname:minLod>> feature and
+    slink:VkImageViewMinLodCreateInfoEXT to reference that language
+    (partially resolves public issue 1836).
+  * Remove `ifdef` from <<spirvenv-module-validation-standalone, Standalone
+    SPIR-V>> valid usage statement (public pull request 1926).
+  * Assign VUID 07119 to a <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V>> valid usage statement that didn't get one in the
+    last spec update (public issue 1928).
+  * Add missing <<spirvenv-module-validation-runtime, Runtime SPIR-V>> valid
+    usage statements for apiext:VK_EXT_mesh_shader (public pull request
+    1931).
+  * Fix duplicate
+    slink:VkGraphicsPipelineCreateInfo::pname:pInputAssemblyState
+    description (public issue 1934).
+
+Internal Issues:
+
+  * Add a valid usage statement for
+    ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR to the common
+    validity statements for barriers (internal issue 3188).
+  * A valid usage statements to performance query begin commands requiring
+    matching queue family index (internal issue 3207).
+  * Add a `stride` attribute to the XML to annotate arrays passed to
+    commands where consecutive members are not tightly packed (internal
+    issue 3205).
+  * Fix the `limittype` attribute value for
+    slink:VkPhysicalDeviceVulkan11Features::pname:subgroupSize and
+    slink:VkPhysicalDeviceSubgroupProperties::pname:subgroupSize (internal
+    issue 3209).
+  * Eliminate Asciidoctor warnings about duplicate feature anchors in
+    `validusage` build target (internal issue 3216).
+  * Add the Vulkan logo to the specification PDF title page and HTML
+    document header (internal issue 3217).
+  * Markup fixes for VkPerformanceCounterResultKHR and
+    VkPipelineRobustnessCreateInfoEXT (internal issue 3219).
+  * Add a new section of the <<lexicon, Lexicon>> appendix for
+    <<lexicon-video-abbreviations, video-specific abbreviations>> (internal
+    merge request 5345).
+  * Add <<formats-size-compatibility, size compatible>> definition to the
+    <<formats, Formats>> chapter and use it to replace the old "`format size
+    compatibility`" language in the <<copies, Copy Commands>> chapter
+    (internal merge request 5369).
+  * Remove the "`blocked image`" definition from and instead distinguish
+    images with a 1x1x1 <<formats-compatibility-classes, texel block
+    extent>> from other images. Use this language to simplify valid usage
+    statements in the <<copies, Copy Commands>> chapter (internal merge
+    request 5370).
+  * Add valid usage statement to the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V>> section
+    requiring code:Boolean values to be code:BuiltIn values for code:Input /
+    code:Output (internal merge request 5387).
+  * Add and update valid usage statements for drawing commands with
+    multisampled pipelines and single-sampled attachments when
+    apiext:VK_EXT_multisampled_render_to_single_sampled is enabled (internal
+    merge request 5392).
+  * Remove pname:apiVersion loading requirements for implicit layers from
+    slink:VkApplicationInfo (internal merge request 5393).
+  * Minor markup fixes for slink:VkPipelineRobustnessCreateInfoEXT (internal
+    merge request 5399).
+  * Refactor style guide markup and use consistent anchor naming scheme
+    (internal merge request 5400).
+  * Require apiext:VK_KHR_spirv_1_4 for apiext:VK_EXT_mesh_shader in
+    `vk.xml` (internal merge request 5401).
+  * Add the <<shaders-termination, Shader Termination>> section and a
+    corresponding valid usage statement for draw dispatch commands
+    (cross-api/memory-model issue #145).
+
+New Extensions:
+
+  * apiext:VK_EXT_legacy_dithering (internal merge request 5042).
+
+-----------------------------------------------------
+
+Change log for September 1, 2022 Vulkan 1.3.226 spec update:
+
+Public Issues:
+
+  * Add missing SPV_KHR_ray_tracing storage class valid usage statement for
+    code:ShaderRecordBufferKHR (public merge request 1895).
+  * Add a NOTE to slink:VkAccelerationStructureCreateInfoKHR about
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR (public issue 1904).
+  * Add a standalone SPIR-V valid usage statement for code:OpImageWrite
+    component mismatch (public merge request 1916).
+  * Generate the "`SPIRV Image Format`" and "`Plane Compatibility Format`"
+    tables from `vk.xml` (public merge request 1922).
+  * Add a NOTE to dlink:VK_USE_64_BIT_PTR_DEFINES to define its availability
+    Vulkan headers starting with VK_HEADER_VERSION 174 (public merge request
+    1918).
+
+Internal Issues:
+
+  * Update issue #2 in the apiext:VK_EXT_depth_range_unrestricted appendix
+    to match core spec text (internal issue 2445).
+  * Clarify <<shaders-interpolation-decorations, Interpolation decorations>>
+    in pre-rasterization (internal issue 2721).
+  * Relax implicit layer disabling requirements in slink:VkApplicationInfo
+    (internal issue 2856).
+  * Update <requires> `extension` attribute in XML to support multiple
+    extensions with AND/OR connectives (internal issue 2922).
+  * Update provisional video API queries for usage hint and optimized
+    implementation settings (internal issue 2986).
+  * Relax slink:VkImageViewCreateInfo valid usage statement 01584 to allow
+    layers/levels for compressed format views of compressed format images
+    (internal issue 3063).
+  * Remove slink:VkImageViewCreateInfo valid usage statement 04739 (internal
+    issue 3164).
+  * Specify that addresses returned by flink:vkGetBufferDeviceAddress must
+    satisfy the alignment requirements of the device (internal issue 3176).
+  * Update makeSpec script to properly clean OUTDIR when it's explicitly
+    specified (internal issue 3194).
+  * Ensure that a mutable type list is provided in
+    slink:VkDescriptorSetLayoutCreateInfo when required (internal issue
+    3198).
+  * Update clarity of the Khronos specification copyright statement
+    regarding normative references to external specifications and the
+    Khronos Intellectual Property Rights Policy (internal issue 3203).
+  * Rename '.txt' -> '.adoc' for all Asciidoctor markup files in the
+    repository, and update scripts and tools to match (internal issue 3204)
+  * Tag apiext:VK_ARM_rasterization_order_attachment_access as promoted to
+    EXT in XML (internal merge request 5364)
+  * Fix a typo in the "` Color Sample Coverage`" section (internal merge
+    request 5367)
+  * Fix apiext:VK_EXT_fragment_density_map2 appendix to include the correct
+    extension interface information (internal merge request 5368)
+  * Remove unwieldy and unnecessary list of copy functions from the
+    introduction of the <<copies, Copy Commands>> chapter (merge request
+    5373).
+  * Move Asciidoctor attributes enabling version and extension attributes
+    into a generated file `specattribs.adoc` (internal merge request 5396).
+
+New Extensions
+
+  * apiext:VK_EXT_depth_clamp_01
+  * apiext:VK_EXT_mesh_shader
+
+-----------------------------------------------------
+
+Change log for August 18, 2022 Vulkan 1.3.225 spec update:
+
+  * Update release number to 225 for this update.
+
+Public Issues:
+
+  * Remove unused code from `spirvcapgenerator.py` (public merge request
+    1912).
+  * Remove redundant ftext:vkCmdDraw*Indirect valid usage statements 00478
+    and 00530, which are already covered by valid usage statements for the
+    corresponding stext:VkDraw*IndirectCommand (public merge request 1913).
+
+Internal Issues:
+
+  * Clarify <<renderpass-attachment-contents, attachment preserve behavior>>
+    when multiview is enabled (internal issue 3031).
+  * Update apiext:VK_KHR_format_feature_flags2 to version 2, ensuring that
+    implementations report
+    slink:VkFormatProperties3KHR::pname:bufferFeatures correctly for storage
+    reads/writes without format, and replace old valid usage statements
+    06423 and 06424 for draw dispatch commands with new statements
+    expressing the constraints accurately (internal issue 3091).
+  * Make provisional video APIs follow Vulkan API conventions more closely
+    (internal issue 3141).
+  * Move valid usage statement 06879 for
+    slink:VkMultisampledRenderToSingleSampledInfoEXT to the
+    slink:VkFramebufferCreateInfo and slink:VkRenderPassAttachmentBeginInfo
+    valid usage blocks, where the information needed to evaluate it is known
+    (internal issue 3169).
+  * Change www.khronos.org/registry/ URLs to registry.khronos.org/ following
+    a recent change to Khronos webservers (internal issue 3175).
+  * Allow applications to not provide fragment shader via clarifying edits
+    in the introduction to the <<fragops, Fragment Operations>> chapter and
+    in valid usage statement 06896 for slink:VkGraphicsPipelineCreateInfo
+    (internal issue 3178).
+  * Fix slink:VkRayTracingPipelineCreateInfoKHR valid usage statement 03590
+    to correctly refer to pname:pLibraryInterface (internal merge request
+    5333).
+  * Fix typo in slink:VkPipelineRasterizationLineStateCreateInfoEXT valid
+    usage statement 02770 to correctly refer to the pname:smoothLines
+    feature (internal merge request 5349).
+  * Fix normative language in the conservative rasterization section to use
+    `may:` instead of `will` (internal merge request 5354).
+
+New Extensions:
+
+  * apiext:VK_EXT_rasterization_order_attachment_access
+
+-----------------------------------------------------
+
+Change log for August 4, 2022 Vulkan 1.3.224 spec update:
+
+  * Update release number to 224 for this update.
+
+Public Issues:
+
+  * Add issues to the apiext:VK_KHR_dynamic_rendering proposal document
+    discussing render area granularity (public issue 1899).
+
+Internal Issues:
+
+  * Add missing video `queues` attribute values to commands (internal issue
+    1593).
+  * Add valid usage statements to enforce render pass scope restrictions on
+    flink:vkBeginQuery and flink:vkEndQuery pairs (internal issue 3119).
+  * Remove overly restrictive valid usage statements for Y'CbCr layered
+    image creation from slink:VkImageViewCreateInfo (internal issue 3180).
+  * Enable `codespell` tool in CI to prevent many typos. Switch to pulling
+    the updated `asciidoctor-spec` Docker container image by SHA256 instead
+    of name, to work around cache pollution problems in Gitlab and GitHub
+    Actions CI (internal merge request 5318).
+  * Add "`Description`" sections to the provisional video extension
+    appendices (internal merge request 5310).
+  * Fix codec-specific stext:VkVideo{De,En}code*CapabilitiesEXT structure
+    chaining in XML to refer to the root slink:VkVideoCapabilitiesKHR
+    structure that is extended (internal merge request 5323).
+  * Update slink:VkImageViewCreateInfo valid usage statement to not require
+    a slink:VkSamplerYcbcrConversionInfo structure for non-sampleable image
+    views requiring sampler Y'CbCr conversion (internal merge request 5324).
+
+New Extensions
+
+  * apiext:VK_EXT_attachment_feedback_loop_layout
+    (internal merge request 4469).
+  * apiext:VK_SEC_amigo_profiling - internal extension used within ANGLE, no
+    actual spec language exists yet (internal merge request 5332).
+
+-----------------------------------------------------
+
+Change log for July 28, 2022 Vulkan 1.3.223 spec update:
+
+  * Update release number to 223 for this update.
+
+Public Issues:
+
+  * Clarify external synchronization requirements for
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT and
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
+    elink:VkDescriptorBindingFlagBits and flink:vkUpdateDescriptorSets
+    (public issue 1713).
+  * Add Vulkan 1.0 valid usage statement for *Subgroup* memory scope to
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    (public merge request 1900).
+  * Move "`Hit Kind`" valid usage statement from standalone to runtime
+    SPIR-V validation statements (public merge request 1903).
+
+Internal Issues:
+
+  * Add the `videocoding` attribute to XML tag:command tags to specify if
+    commands can be issued only inside a video coding scope, only outside,
+    or both. Update the validity generator script to add a new column to the
+    "`Command Properties`" table reflecting this attribute (internal issue
+    2593).
+  * Terminology improvements and glossary additions for the provisional
+    video extensions (internal issue 2609).
+  * Add valid usage statement disallowing Android hardware buffers for
+    flink:vkGetDeviceImageMemoryRequirements (internal issue 3107).
+  * Document why some video and ray tracing bits are defined for
+    elink:VkPipelineStageFlagBits2 but not for
+    elink:VkPipelineStageFlagBits, and reserve those bits in `vk.xml`
+    (internal issue 3120).
+  * Fix minor typos and markup issues in apiext:VK_QCOM_image_processing
+    (internal issues 3171, 3172).
+  * Add interaction with apiext:VK_QCOM_tile_properties to
+    apiext:VK_QCOM_render_pass_transform appendix (internal merge request
+    5309).
+  * Partial sync with OpenXR scripts (internal merge request 5312).
+  * Clarify that flink:vkGetQueryPoolResults may return ename:VK_NOT_READY
+    (internal merge request 5313).
+  * Fix typos identified by the "`codespell`" tool (internal merge request
+    5316).
+  * Fix XML `limittype` attributes for pname:*subgroupSize members from
+    `"exact"` to `"min,pot"`
+    (https://github.com/KhronosGroup/Vulkan-Profiles/issues/226).
+
+
+-----------------------------------------------------
+
+Change log for July 21, 2022 Vulkan 1.3.222 spec update:
+
+  * Update release number to 222 for this update.
+
+Public Issues:
+
+  * Use correct feature in
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+    description (public pull request 1892).
+  * GitHub CI: Regenerate and build-test Rust Vulkan bindings (Ash crate)
+    (public pull request 1894).
+
+Internal Issues:
+
+  * Clarify that flink:vkCmdClearAttachments can only clear layers in the
+    current render pass instance. (internal issue 3157).
+  * Clarify that access to code:Function and code:Private memory works in
+    <<shaders-helper-invocations, Helper Invocations>> (internal issue
+    3158).
+  * Add CI check for bullet list items not preceded by exactly two spaces
+    (internal issue 3162).
+  * Remove slink:VkGraphicsPipelineCreateInfo valid usage statement 00726,
+    superseded by 06897 (internal merge request 5295).
+  * Update CI to cache Rust crates and build intermediates. (internal merge
+    request 5297).
+  * Use `noauto` `limittype` attribute values for values that are
+    identifiers and cannot be compared, such as PCI bus IDs, driver
+    versions, UUIDs, descriptions, etc. (internal merge request 5299).
+  * Specify that slink:VkGeneratedCommandsInfoNV::pname:preprocessBuffer
+    should not be copied for reuse (internal merge request 5301).
+  * Update contact and contributor information for some vendor extensions
+    (internal merge request 5304).
+  * Partial sync with OpenXR scripts (internal merge request 5308).
+
+New Extensions:
+
+  * `apiext:VK_QCOM_image_processing`
+  * `apiext:VK_QCOM_tile_properties`
+
+-----------------------------------------------------
+
+Change log for July 14, 2022 Vulkan 1.3.221 spec update:
+
+  * Update release number to 221 for this update.
+
+Public Issues:
+
+  * Add dependency of apiext:VK_EXT_blend_operation_advanced on
+    apiext:VK_KHR_get_physical_device_properties2. (public merge request
+    1887).
+  * Update xrefs to features so the feature name is used as the link text,
+    and marked up consistently. Added a section to the style guide on markup
+    of feature xrefs (public issue 1889).
+
+Internal Issues:
+
+  * Consolidate and clarify interpolation of fragment inputs in the
+    <<primsrast-multisampling, Multisampling>>, <<primsrast-lines-basic,
+    Basic Line Segment Rasterization>>, <<primsrast-polygons-basic, Basic
+    Polygon Rasterization>>, and <<shaders-interpolation-decorations,
+    Interpolation Decorations>> sections (internal issue 3108).
+  * Add gitlab CI step to regenerate and test the Rust "`Ash`" Vulkan
+    bindings (internal merge request 5216).
+  * Note that the result of a <<queries-primitives-generated, Primitives
+    Generated Query>> is similar to
+    ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, but not
+    affected by hardware details (internal issue 3131).
+  * Swap direction of aliasing of enums shared by
+    apiext:VK_EXT_filter_cubic and apiext:VK_IMG_filter_cubic to be
+    consistent with other enums aliased by promotion, and add a note to the
+    registry schema document to help clarify how the `alias` XML attribute
+    is used (internal merge request 5276).
+  * Update XML SPIR-V capabilities section so that
+    code:RayTraversalPrimitiveCullingKHR is also enabled by
+    apiext:VK_KHR_ray_query (internal issue 3156).
+  * Remove reference to adding
+    <<features-vulkanMemoryModelAvailabilityVisibilityChains,
+    pname:vulkanMemoryModelAvailabilityVisibilityChains>> as a
+    <<versions-1.3-new-features, new Vulkan 1.3 feature>>, which did not
+    happen (merge request 5286).
+
+New Extensions:
+
+  * apiext:VK_EXT_pipeline_robustness
+
+-----------------------------------------------------
+
+Change log for July 7, 2022 Vulkan 1.3.220 spec update:
+
+  * Update release number to 220 for this update.
+
+Public Issues:
+
+  * Add a note to elink:VkColorSpaceKHR regarding use of
+    elink:VK_COLOR_SPACE_PASS_THROUGH_EXT for a linear or non-gamma transfer
+    function color space (public merge request 1729).
+  * Fix clamp expression for d_{lo} in the
+    <<textures-level-of-detail-operation, Level-of-Detail Operation>>
+    section (partial fix for public issue 1836).
+  * Update <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> to add explicit valid usage statements for code:Uniform
+    objects being read only, and for code:Block decorations (public merge
+    request 1879).
+  * Add an issue to apiext:VK_KHR_fragment_shader_barycentric for
+    interactions with MSAA (public merge request 1881).
+  * Fix XML tagging of slink:VkShaderModuleCreateInfo and add an explicit
+    valid usage statement so this structure can be validated both as an
+    explicit parameter, and as part of the pname:pNext chain of
+    slink:VkPipelineShaderStageCreateInfo (public issue 1883, but a broader
+    fix in the validation scripts for this case will eventually be
+    required).
+
+Internal Issues:
+
+  * Refactor and update descriptor / render pass valid usage statements for
+    slink:VkAttachmentDescription, slink:VkAttachmentDescription2,
+    slink:VkAttachmentReference, slink:VkAttachmentReference2
+    slink:VkRenderPassCreateInfo2, slink:VkSubpassDescription, and
+    slink:VkSubpassDescription2 (internal issue 2559).
+  * Modify all of the query commands to use synchronization scope language,
+    in order to better describe how the commands synchronize with each other
+    (internal issue 3089).
+  * Add valid usage statements to slink:VkGraphicsPipelineCreateInfo
+    slink:VkRayTracingPipelineCreateInfoKHR, and
+    slink:VkRayTracingPipelineCreateInfoNV restricting the allowed shader
+    stages (internal issue 3132).
+  * Remove over-constrained list of data types that can be used together
+    with code:PerVertexKHR in the
+    <<shaders-interpolation-decorations-pervertexkhr>> section (internal
+    issue 3134).
+  * Document for flink:vkGetAccelerationStructureBuildSizesKHR that
+    slink:VkAccelerationStructureGeometryKHR::pname:flags must be invariant
+    between the size query and the build (internal issue 3147).
+  * Update slink:VkShaderModuleValidationCacheCreateInfoEXT XML to mark that
+    it extends VkPipelineShaderStageCreateInfo (internal merge request
+    5210).
+  * Fix <<resources-image-format-features, Image Format Features>> section
+    discussion of DRM format modifiers, and some related miscellaneous typos
+    (internal merge request 5255).
+  * Clarify that code:RelaxedPrecision does not need to match in the
+    <<interfaces-iointerfaces-matching, Interface Matching>> rules (internal
+    issue 3053).
+
+-----------------------------------------------------
+
+Change log for June 30, 2022 Vulkan 1.3.219 spec update:
+
+  * Update release number to 219 for this update.
+
+Public Issues:
+
+  * Update pipeline image to move push constants outside of descriptor sets
+    (public issue 1867).
+  * Correct code:StencilRefLessFrontEXT to code:DepthLess in the early depth
+    test portion of the <<fragops, Fragment Operations>> chapter (public
+    pull request 1876).
+  * Add new driver id ename:VK_DRIVER_ID_MESA_DOZEN (public pull request
+    1877).
+  * Relax slink:VkRenderPassCreateInfo valid usage statements 02517 and
+    02518 to allow ename:VK_SUBPASS_EXTERNAL (public pull request 1878).
+
+Internal Issues:
+
+  * Move validation of read-only depth/stencil layout with respect to
+    depth/stencil write from slink:VkGraphicsPipelineCreateInfo to draw time
+    validation (internal issue 3110).
+  * Clarify buffer view format features by replacing the undefined term
+    "`formatted load`" (internal issue 3124).
+  * Clean up markup of feature structures, and add missing boilerplate
+    pname:sType / pname:pNext member descriptions where still missing
+    (internal issue 3128).
+  * Add new XML `limittype` attribute values to better express constraints,
+    update which structure type's members are allowed to have the attribute,
+    and update attributes accordingly (internal merge request 5172).
+  * Disallow more combinations of ray flags in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section and corresponding text in the <<ray-traversal, Ray Traversal>>,
+    chapter as well as better documenting already disallowed cases (internal
+    merge request 5220).
+  * Add <<descriptorsets-updates-consecutive, wording for extrapolated
+    descriptor updates>> on ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE (internal
+    merge request 5251).
+  * Clarify alignment requirements for device generated commands. in
+    slink:VkIndirectCommandsLayoutCreateInfoNV and
+    slink:VkIndirectCommandsLayoutTokenNV (internal merge request 5252).
+  * Add `validstructs` attribute to XML `param` tags to specify actual valid
+    structures allowed in cases where an abstract formal parameter type
+    (slink:VkBaseInStructure or slink:VkBaseOutStructure) is passed,
+    primarily to support the Ash Rust binding generator (internal merge
+    request 5253).
+  * Add guidance on defining feature structures for WSI extensions in the
+    "`Feature Structures`" section of the style guide (internal merge
+    request 5266).
+
+New Extensions:
+
+  * apiext:VK_EXT_multisampled_render_to_single_sampled
+  * apiext:VK_EXT_shader_module_identifier
+
+-----------------------------------------------------
+
+Change log for June 16, 2022 Vulkan 1.3.218 spec update:
+
+  * Update release number to 218 for this update.
+
+Public Issues:
+
+  * Add apiext:VK_KHR_maintenance4 relaxed interface valid usage statement
+    to the <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (public pull request 1860).
+  * Fix field name in slink:VkRenderingAttachmentInfo valid usage statement
+    (public pull request 1861).
+  * Fix typo in slink:VkFramebufferCreateInfo valid usage statements 04533 /
+    04544 (public pull request 1873).
+  * Remove duplicate valid usage statement 06060 (public pull request 1874).
+  * Rework <<fxvertex-input-address-calculation, Vertex Input Address
+    Calculation>> section (public pull request 1869).
+  * Split GitHub CI script into individual jobs to decrease run time (public
+    pull request 1870).
+
+Internal Issues:
+
+  * Refactor some valid usage statements for drawing commands that depend on
+    apiext:VK_EXT_color_write_enable (internal issue 2868).
+  * Refactor description of
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR and add
+    video-profile-specific error codes (internal issues 2965 and 2995).
+  * Add NOTEs regarding Android layer discovery to
+    flink:vkEnumerateDeviceLayerProperties and
+    flink:vkEnumerateDeviceExtensionProperties (internal issue 3070).
+  * Update slink:VkSubpassDependency valid usage statements based on
+    language in synchronization chapter (internal issue 3075).
+  * Rename slink:VkQueueFamilyQueryResultStatusProperties2KHR member from
+    ptext:supported to pname:queryResultStatusSupport for a provisional
+    video extension (internal issue 3092).
+  * Expand allowed use of `limittype` XML attribute to additional limit and
+    property structures, and validate its use (internal issue 3101).
+  * Update registry schema and the extension metadocumentation generator
+    script to interpret extension 'requires' attributes as requiring such
+    extensions be enabled for device level functionality, rather than just
+    supported (internal issue 3116).
+  * Replace XML dependency of apiext:VK_KHR_video_queue on
+    apiext:VK_KHR_sampler_ycbcr_conversion with a dependency on
+    apiext:VK_KHR_synchronization2 plus Vulkan 1.1 (internal merge request
+    5217).
+  * Fix typo in anchor text in the <<clears-inside, Clearing Images Inside A
+    Render Pass Instance>> section (internal merge request 5241).
+  * Use feature template include markup for
+    slink:VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM
+    (internal merge request 5242).
+
+
+-----------------------------------------------------
+
+Change log for June 9, 2022 Vulkan 1.3.217 spec update:
+
+  * Update release number to 217 for this update.
+
+Public Issues:
+
+  * Clarify meaning of "`private data slot`" for apiext:VK_EXT_private_data
+    (public issue 1675)
+  * Minor markup fix in the <<spirvenv-module-validation-standalone>>
+    section (public merge request 1864).
+
+Internal Issues:
+
+  * Clarify that <<primsrast-sampleshading, Sample Shading>> affects the
+    number of times the fragment shader is evaluated, rather than dictating
+    fragment data (internal issue 3003).
+  * Clarify interaction of the
+    slink:VkPhysicalDeviceLimits::pname:strictLines limit with
+    apiext:VK_EXT_line_rasterization in
+    slink:VkPhysicalDeviceLineRasterizationFeaturesEXT and the
+    <<line_linear_interpolation>> section (internal issue 3042).
+  * Clarify that code:EarlyFragmentTests allows for sample counting after
+    fragment shading and multisample coverage in the introduction to the
+    <<fragops, Fragment Operations>> chapter (internal issue 3085).
+  * Update description of ray tracing <<features-requirements, Feature
+    Requirements>> for consistency and to remove redundancy. Add an issue to
+    apiext:VK_KHR_ray_tracing_pipeline explaining why
+    apiext:VK_KHR_pipeline_library is an interaction, rather than a required
+    dependency. (internal issue 3103).
+  * Define alignment requirements for matrices in terms of arrays.
+    in the <<interfaces-alignment-requirements,
+    Alignment Requirements>> section
+    (internal issue 3105).
+  * Add valid usage statements for code:StorageBuffer and code:Uniform
+    code:PushConstant types to the <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V Validation>> section (internal merge request 5080).
+  * Fix conditional markup interaction for
+    apiext:VK_KHR_depth_stencil_resolve and apiext:VK_KHR_dynamic_rendering
+    in slink:VkRenderingInfo and slink:VkRenderingAttachmentInfo valid usage
+    statements, now that apiext:VK_KHR_dynamic_rendering requires
+    apiext:VK_KHR_depth_stencil_resolve (internal merge request 5224).
+  * Clarify dependencies and fix broken chapter links for
+    apiext:VK_ARM_rasterization_order (internal merge request 5229).
+  * Add a valid usage statement to flink:vkCmdEndRendering to disallow
+    calling it when transform feedback is active (internal merge request
+    5230).
+  * Update reference to a style guide chapter (internal merge request 5231).
+  * Clarify that slink:VkExportMemoryAllocateInfo::pname:handleTypes can be
+    zero in spec description, matching XML and other pname:handleType
+    members (internal merge request 5234).
+
+New Extensions:
+
+  * apiext:VK_EXT_metal_objects
+  * apiext:VK_EXT_non_seamless_cube_map
+
+-----------------------------------------------------
+
+Change log for June 2, 2022 Vulkan 1.3.216 spec update:
+
+  * Update release number to 216 for this update.
+  * Note: most spec updates will occur on Thursdays going forward, not
+    Tuesdays.
+
+Public Issues:
+
+  * Make formal names in the <<synchronization-dependencies-execution>>
+    section more memorable (public pull request 1837).
+  * Refactor slink:VkPipelinenfoKHR / slink:VkPipelineInfoEXT markup (public
+    issue 1857).
+  * Fix conditional markup in the <<shaders-ray-generation-execution Ray
+    Generation Shader Execution>> section for references to shader binding
+    tables (public issue 1858).
+  * Fix "`a`" -> "`an`" typo (public pull request 1865).
+
+Internal Issues:
+
+  * Clarify that flink:vkCmdClearAttachments is not a drawing command
+    (internal issue 3055).
+  * Remove requirements that the boolean
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties::pnamestorageTexelBufferOffsetSingleTexelAlignment
+    and pname:uniformTexelBufferOffsetSingleTexelAlignment limits must: be a
+    power of two (internal issue 3081).
+  * Fix the structextends and constness issues in
+    apiext:VK_EXT_subpass_merge_feedback (this is a breaking API change, but
+    there is only one known implementation at present) (internal issue
+    3095).
+  * Update to latest asciidoctor-chunker.js so links to undefined anchors in
+    the chunked HTML outputs are rendered with the undefined anchor and CSS
+    class `"target-missing"`, instead of as `href="undefined"` (internal
+    merge request 5170).
+
+
+-----------------------------------------------------
+
+Change log for May 24, 2022 Vulkan 1.3.215 spec update:
+
+  * Update release number to 215 for this update.
+
+Public Issues:
+
+  * Fix markup error to make slink:VkImageResolve2 appear right after
+    slink:VkImageResolve, rather than appearing in the next section (public
+    pull request 1856).
+
+Internal Issues:
+
+  * Allow slink:VkDescriptorPoolCreateInfo::pname:poolSizeCount to be `0` in
+    `vk.xml` (internal issue #2974).
+  * Add valid usage statements to flink:vkCmdExecuteCommands requiring that
+    the depth or stencil format in
+    slink:VkCommandBufferInheritanceRenderingInfo must be
+    ename:VK_FORMAT_UNDEFINED if a `NULL` attachment is used
+    (internal issue 3016).
+  * Remove (incomplete) list of SPIR-V decorations from intro of interface
+    matching chapter (internal issue 3043).
+  * Add valid usage statement disallowing
+    VkImageDrmFormatModifierExplicitCreateInfoEXT in the pname:pNext chain
+    of slink:VkDeviceImageMemoryRequirementsKHR (internal issue #3051).
+  * Add missing references to flink:vkQueueSubmit2 in the
+    <<synchronization-fences-signaling>> and
+    <<synchronization-semaphores-signaling, Semaphore Signaling>> sections
+    (internal issue #3077).
+  * Clarify that pipeline libraries can link against other libraries
+    following the description of slink:VkPipelineLibraryCreateInfoKHR
+    (internal issue #3083).
+  * Fix suffix of some SPIR-V tokens to `AMD` for
+    apiext:VK_AMD_shader_early_and_late_fragment_tests (internal merge
+    request #5199).
+
+New Extensions:
+
+  * apiext:VK_KHR_fragment_shader_barycentric
+
+-----------------------------------------------------
+
+Change log for May 17, 2022 Vulkan 1.3.214 spec update:
+
+  * Update release number to 214 for this update.
+
+Public Issues:
+
+  * Clarify protected queue creation language for slink:VkDeviceCreateInfo,
+    slink:VkDeviceQueueCreateInfo,
+    slink:VkDeviceQueueGlobalPriorityCreateInfoKHR, and
+    slink:VkDeviceQueueInfo2 (public issue 1761, internal issue 2978).
+  * Add valid usage statements for usage and format features bits for
+    resolve image commands (public pull request 1826).
+  * Add apiext:VK_KHR_depth_stencil_resolve dependency to
+    apiext:VK_KHR_dynamic_rendering (public pull request 1831).
+  * Make some missing API dependencies explicit in XML (public issue 1840).
+  * Mark slink:VkSubresourceLayout2EXT as `returnedonly` in XML (public pull
+    request 1848).
+  * Replace manual links in VK_KHR_ray_tracing_maintenance1 appendix (public
+    pull request 1849).
+  * Add valid usage statement for pname:pipelinePropertiesIdentifier
+    feature, and change a valid usage statement to refer to the
+    pname:imageCompressionControlSwapchain feature rather than the related
+    extension (public pull request 1852).
+
+Internal Issues:
+
+  * Fix description of parameters defined by
+    apiext:VK_EXT_depth_clip_control for slink:VkViewport (internal issue
+    3044)
+  * Add valid usage statements to slink:VkGraphicsPipelineCreateInfo banning
+    graphics pipeline libraries having descriptors for other libraries
+    (internal issue 3080).
+  * Add valid usage statements to slink:VkGraphicsPipelineCreateInfo and
+    flink:vkCmdBindDescriptorSets allowing `NULL` set layouts with
+    non-independent sets (internal issue 3082).
+  * Set `noautovalidity` attribute in XML for
+    flink:vkGetPipelinePropertiesEXT::pname:pPipelineProperties (internal
+    issue 3088).
+  * Update apiext:VK_NV_device_diagnostics_config to add a new config bit
+    (internal merge request 5160).
+  * Clarify unsupported conservative point/line rasterization in
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT and in valid
+    usage statements for slink:VkGraphicsPipelineCreateInfo (internal merge
+    request 5169).
+  * Add missing `limittype` attributes to XML for
+    slink:VkQueueFamilyProperties* and slink:VkFormatProperties* members
+    (internal merge requests 5171 and 5175).
+  * Improve XML `limittype` attribute of
+    slink:VkPhysicalDeviceFragmentShadingRatePropertiesKHR::pname:maxFragmentShadingRateCoverageSamples
+    for tool chain usage (internal merge request 5177).
+  * Change description of slink:VkPipelineLayoutCreateInfo::pname:flags now
+    that there are flag bits reserved for the underlying type (internal
+    merge request 5180).
+  * Fix typos in slink:VkGraphicsPipelineCreateInfo valid usage statements
+    (internal merge request 5191).
+  * Move attribute settings used in commonvalidity includes inside valid
+    usage blocks to generate correct validusage.json text (internal merge
+    request 5195).
+
+New Extensions:
+
+  * apiext:VK_AMD_shader_early_and_late_fragment_tests
+
+-----------------------------------------------------
+
+Change log for May 10, 2022 Vulkan 1.3.213 spec update:
+
+  * Update release number to 213 for this update.
+
+Public Issues:
+
+  * Replace the list of <<formats-packed, Packed Formats>> with a generated
+    version, and update the format generator script to support conditionals
+    (public pull request 1823).
+  * Fix typo in apiext:VK_INTEL_performance_query (public issue 1845).
+
+Internal Issues:
+
+  * Add valid usage statement limiting
+    slink:VkDisplaySurfaceCreateInfoKHR::pname:transform to a single,
+    supported transformation (internal merge request 5166).
+  * Update sample code for apiext:VK_KHR_ray_query in the extension appendix
+    (internal issue 3066).
+  * Fix some `limittype` attributes for
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT and
+    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV members in
+    `vk.xml` (internal merge requests 5173 and 5174).
+
+New Extensions:
+
+  * apiext:VK_EXT_image_compression_control
+  * apiext:VK_EXT_pipeline_properties
+  * apiext:VK_EXT_subpass_merge_feedback
+  * apiext:VK_KHR_ray_tracing_maintenance1
+
+-----------------------------------------------------
+
+Change log for April 21, 2022 Vulkan 1.3.212 spec update:
+
+  * Update release number to 212 for this update.
+
+Public Issues:
+
+  * Add <<attachment-type-imagelayout, layout requirements for resolve
+    attachments>> (public issue 1777).
+  * Improve description of and references to elink:VkCompareOp (public pull
+    request 1805).
+  * Fix typos in <<fundamentals-api-name-aliases, typo alias example>>
+    (public pull request 1821).
+
+Internal Issues:
+
+  * Modify pipeline layout override for
+    apiext:VK_EXT_graphics_pipeline_library (internal merge request 5164)
+  * Include graphics pipelines in definition of
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR (internal issue 3068).
+  * Add cap for B frame as L1 reference, and disable SPS
+    direct_8x8_inference_flag in provisional apiext:VK_EXT_video_encode_h264
+    extension (internal issue 3064).
+  * Add implementor's note for memory type index ambiguity to
+    slink:VkMemoryAllocateInfo for
+    apiext:VK_ANDROID_external_memory_android_hardware_buffer (internal
+    issue 2762).
+  * Minor editorial fixes for the <<memory, Memory Allocation>> chapter.
+
+-----------------------------------------------------
+
+Change log for April 5, 2022 Vulkan 1.3.211 spec update:
+
+  * Update release number to 211 for this update.
+
+Public Issues:
+
+  * Clarify dynamic offset with ename:VK_WHOLE_SIZE including new
+    <<buffer-info-effective-range>> language (public issue 1546).
+  * Relax depth copy requirement in common copy image valid usage statement
+    00153 to ename:VK_IMAGE_TYPE_3D only and clarify copying depth slices
+    for slink:VkImageCopy (public issue 1804).
+  * Avoid a chain of enumerant aliases in `vk.xml` by aliasing
+    ename:VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR directly to
+    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT (public issue 1814).
+  * Fix structure name containing pname:compareMask value in
+    flink:vkCmdSetStencilCompareMask (public pull request 1806).
+  * Fix miiscellaneous minor markup issues (public pull request 1810).
+  * Simplify <<fundamentals-api-name-aliases, typo alias example>> to refer
+    to aliases in the core API rather than extensions (public pull request
+    1811).
+  * Fix order of swapchain vs device destruction in
+    flink:vkCreateSwapchainKHR (public pull request 1817).
+  * Minor fix for VK_EXT_graphics_pipeline_library proposal vertex shader
+    sample code (public pull request 1819).
+
+Internal Issues:
+
+  * Clarify timestamps write when the stage is done for
+    flink:vkCmdWriteTimestamp and flink:vkCmdWriteTimestamp2 (internal issue
+    2287).
+  * Add pname:samplerFilterMinmax feature valid usage statement to
+    slink:VkSamplerCreateInfo (internal issu 2747).
+  * Add success and error codes to `vk.xml` for flink:vkWaitForPresentKHR
+    (internal issue 2822).
+  * Add footnote to flink:vkGetDeviceProcAddr suggesting, but not requiring
+    returning `NULL` for core commands beyond the version supported by the
+    implementation (internal issue 3002).
+  * Fix valid usage statement for slink:VkImageFormatListCreateInfo when the
+    image is created with
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT (internal issue
+    3032).
+  * Disallow binding ray tracing pipelines to protected command buffers in
+    flink:vkCmdBindPipeline (internal issue 3034).
+  * Update valid usage statements for interaction of
+    flink:vkGetRayTracingShaderGroupHandlesKHR and
+    flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR with
+    apiext:VK_KHR_pipeline_library (internal issue 3040).
+  * Add capability flags to report support to disable transform skip and use
+    B frame in L1 reference list for the provisional
+    apiext:VK_EXT_video_encode_h265.txt extension (internal issue 3050).
+  * Update description of
+    slink:VkPipelineShaderStageCreateInfo::pname:module and add valid usage
+    for modules being optional when apiext:VK_EXT_graphics_pipelin_library
+    is supported (internal issue 3059).
+  * Remove redundant slink:VkVideoEncodeInfoKHR and
+    slink:VkVideoDecodeInfoKHR pname:codedOffset / pname:codedExtent
+    parameters from the provisional video extensions (internal issue 3062).
+  * Fix "`code:VkDescriptorSetLayout`" typo in
+    flink:vkCmdBindDescriptorSets.
+
+New Extensions:
+
+  * apiext:VK_EXT_image_2d_view_of_3d
+
+
+-----------------------------------------------------
+
+Change log for March 29, 2022 Vulkan 1.3.210 spec update:
+
+  * Update release number to 210 for this update.
+
+Public Issues:
+
+  * Clarify that descriptors are not referenced for unused
+    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT descriptors unless
+    dynamically used (public issue 1794).
+  * Remove "`If renderpass is NULL`" from slink:VkFramebufferCreateInfo
+    valid usage statements (public issue 1800).
+
+Internal Issues:
+
+  * Add valid usage statements to slink:VkAttachmentDescription and
+    slink:VkAttachmentDescription2 for the cases when pname:loadOp is or
+    pname:stencilLoadOp is ename:VK_ATTACHMENT_LOAD_OP_LOAD and
+    pname:initialLayout is ename:VK_IMAGE_LAYOUT_UNDEFINED, and when
+    pname:format is ename:VK_FORMAT_UNDEFINED (internal issue 2349).
+  * Add valid usage statements to slink:VkRenderPassMultiviewCreateInfo and
+    slink:VkSubpassDescription2 to respect <<limits-maxMultiviewViewCount,
+    pname:maxMultiviewViewCount>> (internal issue 2511).
+  * Clarify definition of <<shaders-staticuse, static use instructions>>
+    (internal issue 2639).
+  * Fix typo pname:pRanges -> pname:pRegions in common validity statements
+    for copy image commands (internal issue 3052).
+  * Update valid usage statement for build acceleration structure common VUs
+    to allow inactive instances (internal merge request 5116).
+  * Require <<features-colorWriteEnable, pname:colorWriteEnable>> for
+    apiext:VK_EXT_color_write_enable in the <<features-requirements, Feature
+    Requirements>> section.
+  * Better specify when depth/stencil must be written in
+    slink:VkPipelineShaderStageCreateInfo valid usage statements.
+
+New Extensions:
+
+  * apiext:VK_EXT_graphics_pipeline_library
+  * apiext:VK_EXT_primitives_generated_query
+
+-----------------------------------------------------
+
+Change log for March 23, 2022 Vulkan 1.3.209 spec update:
+
+  * Update release number to 209 for this update.
+
+Public Issues:
+
+  * Add VU to slink:VkImageViewCreateInfo ensuring
+    slink:VkImageViewCreateInfo::pname:format and
+    slink:VkSamplerYcbcrConversionCreateInfo::pname:format are the same when
+    used together (public issue 1752).
+  * Add VU to slink:VkMemoryAllocateInfo to limit to one import operation at
+    a time (public issue 1782).
+
+Internal Issues:
+
+  * Rephrase some VUs for apiext:VK_EXT_color_write_enable (internal issue
+    2868).
+  * Update code:Std* structures in provisional video extensions to remove
+    SPS and VPS IDs from code:StdVideoDecode*PictureInfo. The implementation
+    should obtain the IDs indirectly from the associated PPS picture
+    parameters based on the picture parameter and slice header PPS IDs.
+    Unify/add STD Encode h.264/265 weight tables (internal issue 2930).
+  * Many minor updates to versioning and reporting for the provisional video
+    extensions (internal issue 3019).
+  * Add VU to slink:VkDeviceCreateInfo to require consistent global
+    priorities for protected and unprotected queues created from the same
+    queue family (internal issue 3021).
+  * Fix some `ifndef::` conditional expression markup (internal issue 3038).
+  * Remove the "`Common Operation`" section near the start of the <<copies>>
+    chapter and refactor the bullet points into commonvalidity valid usage
+    statements, if not already covered by VUs (internal issue 3039).
+  * Add some valid usage statements to the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section that were already being checked by `spirv-val` (internal merge
+    request 5081).
+  * Make markup for code:OpImage*Dref* consistent (internal merge request
+    5091).
+  * Remove VU 04676, which replicates a statement in the SPIR-V
+    specification, from <<spirvenv-module-validation-standalone, Standalone
+    SPIR-V Validation>> (internal merge request 5094).
+  * Clarify that the pname:finalLayout of an attachment is not ignored in
+    the <<renderpass-load-store-ops>> section for
+    slink:VkAttachmentDescription (internal merge request 5101).
+  * Add VU for ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state to
+    the common validity statements for drawing commands (internal merge
+    request 5103).
+
+-----------------------------------------------------
+
+Change log for March 15, 2022 Vulkan 1.3.208 spec update:
+
+  * Update release number to 208 for this update.
+
+Internal Issues:
+
+  * Change definition of _inactive triangle_ in the
+    <<acceleration-structure-inactive-prims, Inactive Primitives and
+    Instances>> section to one for which the first (X) component of _any_
+    vertex is NaN (internal issue 3026).
+  * Add storage image equivalence for code:AHardwareBuffer-backed external
+    memory in slink:VkMemoryAllocateInfo and the
+    <<memory-external-android-hardware-buffer-usage, AHardwareBuffer Usage
+    Equivalence>> table (internal issue 3004).
+
+New Extensions:
+
+  * apiext:VK_KHR_portability_enumeration
+
+-----------------------------------------------------
+
+Change log for March 8, 2022 Vulkan 1.3.207 spec update:
+
+  * Update release number to 207 for this update.
+
+GitHub Issues:
+
+  * Rejoin part of flink:vkCreateSwapchainKHR language that had become
+    dislocated from the start of the description (public pull request 1613).
+  * Correct the `limittype` attribute for
+    slink:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV::pname:maxFragmentShadingRateInvocationCount
+    (public issue 1767).
+  * Fix markup typo in
+    slink:VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
+    (public issue 1786).
+  * Use consistent terminology for variable-sized descriptor bindings, and
+    add a glossary entry for the term (public issue 1724).
+  * Specify `optional` attribute correctly for the
+    pname:pDrmFormatModifierProperties member of
+    slink:VkDrmFormatModifierPropertiesListEXT and
+    slink:VkDrmFormatModifierPropertiesList2EXT (public issue 1766).
+  * Fix `limittype` attribute value for
+    slink:VkPhysicalDeviceLimits::pname:maxColorAttachments (public issue
+    1768).
+  * Add valid usage statements to slink:VkRenderPassMultiviewCreateInfo and
+    slink:VkSubpassDescription2 to constrain requirements for the
+    <<features-multiview>> feature on render pass creation (public issue
+    1774).
+  * Fix typos in the apiext:VK_KHR_deferred_host_operations appendix (public
+    issue 1784).
+  * Fix typo "`unscaled`" -> "`scaled`" in filtering and conversion rules
+    for flink:vkCmdBlitImage (public merge request 1792).
+
+Internal Issues:
+
+  * Clarify SPIR-V valid usage statement 04680, and remove 06273, by stating
+    all possible uses of code:OpTypeRuntimeArray allowed and then removing
+    the restriction at runtime if <<features-runtimeDescriptorArray,
+    runtimeDescriptorArray>> is not enabled (internal issue 2408).
+  * Update <<resources-image-inherited-usage>> and
+    slink:VkImageViewCreateInfo to remove requirement for a YCbCr sampler
+    for video image views (internal issue 2688).
+  * Specify in the <<primsrast-depthbias-computation, Depth Bias
+    Computation>> section that depth bias only works with polygon topologies
+    with any polygon mode, but not line and point topologies (internal issue
+    2793).
+  * Add slink:VkVideoDecodeCapabilitiesKHR,
+    elink:VkVideoDecodeCapabilityFlags, and
+    elink:VkVideoDecodeCapabilityFlagBitsKHR to the provisional
+    apiext:VK_KHR_video_decode_queue extension (internal issue 2964).
+  * Clarify which layers of an attachment et automatic layout transitions in
+    the <<renderpass-layout-transitions>> section (internal issue 3012).
+  * Make slink:VkDeviceImageMemoryRequirements::pname:planeAspect `optional`
+    in `vk.xml` (internal issue 3020).
+  * Make it more obvious that an AS update cannot change active <-> inactive
+    primitives and instances in the <<acceleration-structure-update,
+    Acceleration Structure Update Rules>> section (internal issue 3025).
+  * Clarify when the various ptext:p*State members of
+    slink:VkGraphicsPipelineCreateInfo members are used (internal issue
+    3028).
+  * Fix resolution of issues 1 and 3 for apiext:VK_EXT_depth_clip_control
+    (internal merge request 5057).
+  * Add VUs to slink:VkAttachmentDescription2 to avoid specifying stencil
+    layout twice with depth/stencil attachments.
+  * Fix markup typo in slink:VkPhysicalDeviceMultiDrawPropertiesEXT that
+    resulted in the wrong structure name being embedded in common valid
+    usage statements.
+  * Fix missing `len` attribute in `vk.xml` for
+    slink:VkVideoProfilesKHR::pname:pProfiles.
+
+New Extensions:
+
+  * apiext:VK_VALVE_descriptor_set_host_mapping
+
+-----------------------------------------------------
+
+Change log for February 17, 2022 Vulkan 1.3.206 spec update:
+
+  * Update release number to 206 for this update.
+
+GitHub Issues:
+
+  * Add valid usage statements common to draw dispatch commands restricting
+    allowed instructions (public issue 1749).
+  * Remove unused elink:VkPrivateDataSlotCreateFlagBits type from `vk.xml`
+    (public issue 1754).
+  * Clarify that flink:vkGetInstanceProcAddr should return a valid function
+    pointer when the first argument is either NULL or a valid instance
+    handle (public issue 1763).
+  * Add `returnedonly="true"` attribute to
+    slink:VkPhysicalDeviceShaderIntegerDotProductProperties in `vk.xml`
+    (public issue 1771).
+  * Add `objecttype` attribute to
+    slink:VkDeviceMemoryReportCallbackDataEXT::pname:objectHandle in
+    `vk.xml` (public issue 1772).
+
+Internal Issues:
+
+  * Update encoder capability APIs in the provisional video extensions to
+    align with H.264/H.265 codecs and support a broader range of
+    implementations (internal issues 1842 / 2842).
+  * Add `spirvextension` tag to `vk.xml` expressing the relationship between
+    apiext:VK_INTEL_shader_integer_functions2 and
+    `SPV_INTEL_shader_integer_functions` (internal issue 2899)
+  * Add a deprecation note for code:WorkgroupSize (internal issue 2908).
+  * Align the provisional slink:VkVideoEncodeH264VclFrameInfoEXT structure
+    to the similar one in apiext:VK_EXT_video_encode_h265 (internal issue
+    2966).
+  * Add valid usage statements making code:SkipTrianglesKHR and
+    code:SkipAABBsKHR mutually exclusive (internal issue 2994).
+  * Do not include valid usage statements requiring that the
+    <<features-extendedDynamicState, extendedDynamicState>> feature be
+    enabled when building Vulkan 1.3 specifications (internal issue 3005).
+  * Update valid usage statements 06423 and 06424 common to draw dispatch
+    commands to use "`image view format`" rather than "`image format`"
+    (internal issue 3008).
+  * Remove mistaken requirement of
+    <<features-descriptorBindingUniformBufferUpdateAfterBind,
+    pname:descriptorBindingUniformBufferUpdateAfterBind>> for the
+    <<profile-features-roadmap-2022, Roadmap 2022>> profile (internal issue
+    3017).
+  * Remove mistaken requirement of
+    <<features-vulkanMemoryModelAvailabilityVisibilityChains,
+    pname:vulkanMemoryModelAvailabilityVisibilityChains>> for Vulkan 1.3 in
+    the <<features-requirements, Feature Requirements>> section.
+  * Add valid usage statements to
+    sname:VkCommandBufferInheritanceRenderingInfo,
+    sname:VkPipelineRenderingCreateInfo, and sname:VkRenderingInfo requiring
+    that pname:depthAttachmentFormat and pname:stencilAttachmentFormat
+    include the corresponding aspects.
+  * Remove references to
+    slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT when
+    apiext:VK_EXT_buffer_device_address is not present.
+  * Clarify that excess image write data is discarded in the
+    <<textures-output-format-conversion, Texel Output Format Conversion>>
+    section (internal merge request 5053).
+
+-----------------------------------------------------
+
+Change log for February 4, 2022 Vulkan 1.3.205 spec update:
+
+  * Update release number to 205 for this update.
+
+GitHub Issues:
+
+  * Fix <<renderpass-attachment-nonattachment>> access language. Add related
+    valid usage statements for flink:vkCmdExecuteCommands and common VUs for
+    drawing commands, and update the glossary definition of "`Image
+    Subresources`" to include "`a specific ... set of aspects of an image`"
+    (public issues 1340, 1345, 1559; internal issues 2152, 2725).
+  * Fix markup "If" and punctuation issues (public pull request 1725).
+  * Fix link to incorrect structure for flink:vkCmdSetDepthBias command
+    (public pull request 1726).
+  * Improve wording of vkCmdBindDescriptorSets (public pull request 1732).
+  * Fix mismatching struct member descriptions in
+    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV (public issue
+    1735, 1736).
+  * Clarify that slink:VkImageCreateInfo::pname:flags is referred to by
+    slink:VkImageViewCreateInfo valid usage statement 04971 (public issue
+    1740).
+  * Add missing `SPV_KHR_device_group` `spirvextension` tag to `vk.xml`
+    (public issue 1745).
+  * Reference underlying type instead of promoted type alias in
+    `structextends` attributes for slink:VkSampleLocationsInfoEXT and
+    slink:VkCopyCommandTransformInfoQCOM (public pull request 1746).
+  * Fix typo in <<features-storageBuffer8BitAccess,
+    storageBuffer8BitAccess>> xref (public pull request 1750).
+  * Fix formula markup in <<textures-texel-anisotropic-filtering, Texel
+    Anisotropic Filtering>> section (public pull request 1753).
+  * Fix typo in `.sType` member for
+    `proposals/VK_KHR_dynamic_rendering.asciidoc` (public pull request
+    1762).
+  * Add missing `len` attribute for
+    slink:VkImageFormatConstraintsInfoFUCHSIA::pname:pColorSpaces in
+    `vk.xml` (https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=91104,
+    internal merge request 5021).
+
+Internal Issues:
+
+  * Rename `slice` to 'sliceSegment` in several provisional video extension
+    APIs (internal issue 2833).
+  * Fix several valid usage statements for
+    slink:VkDeviceImageMemoryRequirementsKHR (internal issue 2967).
+  * XML fixes for slink:VkAttachmentSampleCountInfoAMD members
+    pname:colorAttachmentCount and pname:pColorAttachmentSamples (internal
+    issue 2968).
+  * Remove `const` from pname:pNext member of
+    slink:VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM
+    (internal issue 2973).
+  * Make definition of <<code:RayTminKHR>>, <<code:WorldRayDirectionKHR>>,
+    and <<code:WorldRayOriginKHR>> values less vague (internal issue 2984).
+  * Remove `externsync` attribute for slink:VkBuffer and slink:VkImage in
+    flink:vkQueueBindSparse (internal issue 2989).
+  * Move the <<roadmap, Vulkan Roadmap Milestones>> title markup up one
+    level so that this section appears as a separate appendix rather than
+    accidentally being merged into the previous appendix (internal issue
+    2990).
+  * Fix a few places where promotion of APIs to Vulkan 1.3 should have
+    happened, but didn't, including defining ename:VK_IMAGE_ASPECT_NONE in
+    `vk.xml` and aliasing ename:VK_IMAGE_ASPECT_NONE_KHR to it (internal
+    issue 2999).
+  * Fix link to pipeline dynamic state section (internal merge request
+    4990).
+  * Add video codec headers to dependencies in `xml/Makefile` so 'make test'
+    works (internal merge request 4991).
+  * Fix caption for <<img-innertri, Inner Triangle Tessellation figure>>
+    (internal merge request 4994).
+  * Fix implication of code:EarlyFragmentTests when representative fragment
+    test is enabled in
+    slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV (internal
+    merge request 5006).
+  * Set `noautovalidity` attribute for
+    slink:VkVideoDecodeH264ProfileEXT::pname:pictureLayout to avoid
+    conflicting valid usage statements (internal issue 2946).
+  * Specify which structure is extended by
+    slink:VkQueueFamilyGlobalPriorityPropertiesKHR (internal issue 2982).
+  * Change a reference from sname:VkImageFormatProperties2 to
+    slink:VkFormatProperties2 in the <<resources-image-creation-limits>>
+    section (internal merge request 5016).
+  * Specify that the <<features-dynamicRendering, pname:dynamicRendering>>
+    feature is required by Vulkan 1.3 and the
+    apiext:VK_KHR_dynamic_rendering extension (internal merge request 5017).
+  * Fix typo in <<features-shaderZeroInitializeWorkgroupMemory,
+    shaderZeroInitializeWorkgroupMemory>> xref (internal merge request
+    5020).
+  * Add `Promotion to Vulkan 1.3` language in the
+    <<VK_KHR_buffer_device_address>> appendix to specify that
+    code:bufferDeviceAddress feature support is mandatory, unlike Vulkan
+    1.2.
+  * Clarify that state is not inherited from static to dynamic pipelines in
+    the <<pipelines-dynamic-state, Dynamic State>> section.
+
+-----------------------------------------------------
+
+Change log for January 25, 2022 Vulkan 1.3.204 spec update:
+
+  * Vulkan 1.3 initial release. Update release number to 204 for this
+    update. The patch number will be used for all Vulkan 1.x spec updates,
+    and continue to increment continuously from the previous Vulkan 1.2.203
+    update.
+
+GitHub Issues:
+
+  * Reserve driver ID ename:VK_DRIVER_ID_MESA_VENUS (public merge request
+    1733).
+
+Internal Issues:
+
+  * Update scripts and registry schema document to support multiple API
+    names in the `api` and `supported` attributes, to allow specializing API
+    definitions (internal issue 2809).
+  * Minor updates - update copyright dates to 2022, update release scripts
+    to generate artifacts for 1.3 as well as earlier specification versions
+    (internal issue 2969).
+
+New Features:
+
+  * apiext:VK_KHR_global_priority (internal merge request 4869).
+  * <<roadmap-2022, `VK_KHR_roadmap_2022`>> ("`Roadmap 2022`") profile
+    (internal merge request 4797).
+
+-----------------------------------------------------
+
+Change log for December 20, 2021 Vulkan 1.2.203 spec update:
+
+  * Update release number to 203 for this update.
+
+GitHub Issues:
+
+  * Generate auxiliary `vk_video` headers containing definitions of
+    `StdVideo*` types from new `xml/video.xml`, rather than including static
+    copies in the repository (public issue 1505).
+  * Clarify indexing of
+    slink:VkPipelineColorBlendStateCreateInfo::pname:pAttachments (public
+    issue 1656).
+  * Relocate VUID-VkWriteDescriptorSet-descriptorType-00322 to the commands
+    to which the structure is passed, and modify constraints in the VU for
+    flink:vkCmdPushDescriptorSetKHR to account for its behavior with
+    etext:SAMPLER and etext:COMBINED_IMAGE_SAMPLER descriptor types (public
+    issue 1686).
+  * Fix length inputs for optional array parameters in
+    slink:VkCuLaunchInfoNVX to allow pname:paramCount and pname:extraCount
+    to be set to zero. (public issue 1709).
+  * Fix typo pname:ppEnabledExtensions -> pname:ppEnabledExtensionNames
+    (public issue 1719).
+
+Internal Issues:
+
+  * Add slink:VkQueueFamilyQueryResultStatusProperties2KHR structure to the
+    provisional apiext:VK_KHR_video_queue extension to report support (or
+    lack thereof) for the ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR query
+    type ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR status bit (internal
+    issue 2927).
+  * Add language to slink:VkImageCreateInfo, elink:VkImageUsageFlagBits,
+    tlink:VkImageUsageFlags, and slink:VkImageLayout for how to specify
+    usage flags when creating images for Vulkan Video implementations
+    requiring separate decode DPB and output (internal issue 2926).
+  * Require that newly created video sessions be reset before use in
+    slink:VkVideoCodingControlInfoKHR and
+    elink:VkVideoCodingControlFlagBitsKHR (internal issue 2928).
+  * Fix math <<textures-image-level-selection, describing image level
+    selection>> with apiext:VK_EXT_image_view_min_lod (internal issue 2943).
+  * Add temporal layer count field to
+    slink:VkVideoEncodeH264RateControlInfoEXT and
+    slink:VkVideoEncodeH265RateControlInfoEXT structures (internal issue
+    2948).
+  * Add a <<spirvenv-module-validation-runtime, Runtime SPIR-V valid usage
+    statement>> to enforce the <<limits-maxComputeSharedMemorySize,
+    pname:maxComputeSharedMemorySize limit>> (internal merge request 4846).
+  * Correct etext:VK_FORMAT_ETC2_R8G8B8A8_*_BLOCK block sizes to 128 bits in
+    the XML format tags (internal merge request 4975).
+  * Script and schema updates to correctly filter out XML elements with
+    non-matching 'api' attributes and support 'api' attributes on additional
+    XML tags (internal merge request 4981).
+  * Add apiext:VK_KHR_fragment_shading_rate proposal document to
+    retroactively provide justification and design document overview
+    (internal merge request 4983).
+  * Update generator scripts to properly handle <remove> elements containing
+    non-extending <enums>.
+  * Restructure some structure descriptions for better adherence to the
+    style guide and more detailed descriptions of their members.
+
+New Extensions:
+
+  * apiext:VK_GOOGLE_surfaceless_query (internal merge request 4927).
+  * apiext:VK_NV_linear_color_attachment (internal merge request 4956).
+  * apiext:VK_QCOM_fragment_density_map_offset (internal merge request 4824).
+
+-----------------------------------------------------
+
+Change log for December 7, 2021 Vulkan 1.2.202 spec update:
+
+  * Update release number to 202 for this update.
+
+GitHub Issues:
+
+  * Split some valid usage statements for slink:VkAttachmentDescription
+    so they can have appropriate conditional protection
+    (public pull request 1698).
+  * Clean up links to GLSL and SPIR-V extension documents (public pull
+    request 1705).
+  * Fix markup for <<primsrast-polygon-barycentrics, perspective
+    interpolation>> math (public pull request 1711).
+
+Internal Issues:
+
+  * Clarify valid usage statements for
+    flink:vkCmdWriteTimestamp2KHR::pname:stage to accommodate
+    ename:VK_PIPELINE_STAGE_2_NONE_KHR (internal issue 2867).
+  * Disallow descriptorset decorations on non-descriptor ray tracing
+    variables in the <<spirvenv-module-validation-standalone, Standalone
+    SPIR-V Validation>> section (internal issue 2881).
+  * Fix sentence describing behavior when
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT is not present in
+    the slink:VkRenderingInfoKHR::pname:pNext chain (internal issue 2881).
+  * Require that
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+    be a power of two (internal merge request 4943).
+  * Add a new ename:VK_IMAGE_ASPECT_NONE_KHR=0 enum to
+    slink:VkImageAspectFlagBits in the apiext:VK_KHR_maintenance4 extension
+    so that pname:planeAspect can be set to zero without having to use a
+    cast, and fix some typos (internal merge request 4961).
+  * Add "`must: be a power of two`" to all alignment limits (internal issue
+    2939).
+  * Make all limit anchors follow the `[[limit-NAME]]` style (internal merge
+    request 4969).
+  * Require render pass to be valid and add missing state subset
+    dependencies to slink:VkGraphicsPipelineCreateInfo valid usage
+    statements for apiext:VK_ARM_rasterization_order_attachment_access
+    (internal merge request 4970).
+  * Parameterize OpenGL and GLSL extension registry URLs via Asciidoctor
+    attributes in `config/attribs.txt`, and move the existing SPIR-V
+    extension registry URL from the Makefile into that file. Use `https:`
+    prefixes on URLs instead of `http:` where possible.
+
+-----------------------------------------------------
+
+Change log for November 30, 2021 Vulkan 1.2.201 spec update:
+
+  * Update release number to 201 for this update.
+
+GitHub Issues:
+
+  * Fix typo in refpage description of ename:VK_REMAINING_MIP_LEVELS
+    (public pull request 1702).
+  * Add missing structextends attribute for
+    slink:VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM
+    (public issue 1703).
+  * Fixes and clarifications to valid usage statements for
+    slink:VkRenderPassCreateInfo,
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT, and
+    slink:VkSubpassDescriptionDepthStencilResolve (matching changes in
+    public Vulkan-ValidationLayers pull request 3571).
+
+Internal Issues:
+
+  * Changes to the provisional video extension encode rate control API,
+    including changing some existing structures and adding new structures
+    and flags (internal issue 1844).
+  * Update valid usage statements for apiext:VK_NV_mesh_shader (internal
+    issue 2880).
+  * Remove valid usage statement IDs 02854 / 02855 / 06081 / 06082, which
+    are duplicates of 06166 / 06167 (internal issue 2944).
+  * Add a valid usage statement banning code:OpImage*Dref* instructions on
+    non-depth views (internal merge request 3889).
+  * Add CI test for disallowed contractions (internal merge request 4934).
+  * Generate the <<formats-compatibility, Format Compatibility Class Table>>
+    from XML tags (internal merge request 4936).
+  * Clarify that dependent operations of quad-sensitive ops have helpers
+    (internal merge request 4947).
+  * Remove redundant valid usage statement for
+    apiext:VK_QCOM_render_pass_shader_resolve (internal merge request 4950).
+  * Support `api` attribute fully in XML and scripts (internal merge request
+    4951).
+  * Fix pname:planeIndex attribute in format XML for
+    ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 (internal
+    merge request 4953).
+
+
+-----------------------------------------------------
+
+Change log for November 23, 2021 Vulkan 1.2.200 spec update:
+
+  * Update release number to 200 for this update.
+
+GitHub Issues:
+
+  * Refer to flink:vkCmdPipelineBarrier2KHR::pname:pDependencyInfo as a
+    pointer, not an array (public issue 1456).
+  * Fix spelling and add backwards-compatibility aliases for some
+    elink:VkPipelinCreateFlagBits values (public issue 1676).
+  * Fix typo in apiext:VK_INTEL_shader_integer_functions2 (public issue
+    1696).
+  * Replace usage of {depth, color} buffer with {depth, color} attachment
+    (public pull request 1701).
+  * Add restriction to the <<formats-mandatory-features-depth-stencil,
+    manadatory format support table>> for depth/stencil formats preventing
+    implementations from advertising those bits in
+    slink:VkFormatProperties::pname:bufferFeatures (public
+    Vulkan-ValidationLayers issue 3225).
+
+Internal Issues:
+
+  * Add an additional guarantee for buffer memory requirements in
+    slink:VkMemoryRequirements as a minor update to the
+    apiext:VK_KHR_maintenance4 extension (internal issue 2885).
+  * Add a <<fundamentals-api-name-aliases, section to the fundamentals
+    chapter>> describing typo aliases (internal issue 2897).
+  * Determine extensions dependencies directly from `vk.xml` in the build
+    scripts, rather than generating an auxiliary `extDependency.py` target
+    (internal issue 2923).
+  * Remove redundant SPIR-V `RuntimeSpirv` valid usage statements 04830,
+    06271, 06374, and 06375 (internal merge requests 4827, 4830).
+  * Suppress file-not-found `include::` errors for validusage target, using
+    an IncludeProcessor extension, due to the way in which the validusage
+    extension processes conditionals. Make all include paths absolute and
+    require this in the style guide (internal merge request 4925).
+  * Add missing `optional="true"` attribute to
+    slink:VkCommandBufferInheritanceRenderingInfoKHR::pname:colorAttachmentCount
+    (internal merge request 4935).
+  * Remove references to apiext:VK_KHR_synchronization2 enums when that
+    extension is not enabled in the specification being built (internal
+    merge request 4937).
+  * Minor wording changes for style guide compliance and consistency
+    (internal merge request 4938).
+  * Ignore etext:*_EXTENSION_NAME and etext:*_SPEC_VERSION aliases in
+    `makemanaliases.py` script since there are no corresponding refpages for
+    these meta-enums.
+
+New Extensions:
+
+  * apiext:VK_ARM_rasterization_order_attachment_access (internal merge
+    request 3856).
+  * apiext:VK_EXT_depth_clip_control (public issues 986 and 1054).
+
+-----------------------------------------------------
+
+Change log for November 16, 2021 Vulkan 1.2.199 spec update:
+
+  * Update release number to 199 for this update.
+
+GitHub Issues:
+
+  * Add upper bound for stext:AccelerationStructure geometry limits for
+    slink:VkPhysicalDeviceRayTracingPropertiesNV and
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR (public issue
+    1670).
+  * Trivial typos in proposal documents (public pull request 1682).
+  * Add missing stage mask common valid usage statements to
+    slink:VkSubmitInfo, slink:VkSubpassDependency, and
+    slink:VkSubpassDependency2; remove unused common VU 4098; and add new
+    stage mask VUs to flink:vkCmdBeginRenderPass,
+    flink:vkCmdBeginRenderPass2, flink:vkCmdSetEvent, flink:vkCmdResetEvent,
+    flink:vkCmdWaitEvents, and flink:vkCmdPipelineBarrier (public
+    Vulkan-ValidationLayers pull request 3331).
+
+Internal Issues:
+
+  * Fix formatting of <<versions-1.0, Vulkan 1.0>> appendix section headers
+    (internal issue 2921).
+  * Fix location of bad conditional `endif::` in SPIR-V environment appendix
+    VU 06271 (internal issue 2917).
+  * Use etext:VK_VERSION_m_n instead of etext:VK_API_VERSION_m_n in
+    `<spirvcapability>` and `<spirvextension>` XML tags for consistency with
+    other version / extension reqiurements. Note that there is a possibility
+    of this change affecting downstream consumers of the XML (internal issue
+    2896).
+  * Add refpage cross-reference from slink:VkSwapchainKHR to
+    flink:vkQueuePresent (internal issue 2823).
+  * Update apiext:VK_KHR_dynamic_rendering
+    proposal document to use etext:STORE_OP_DONT_CARE
+    (internal merge request 4924).
+  * Fix most remaining dead links in the published specifications and
+    refpages by adding missing API language for basetype:VkFlags64;
+    stub reference pages for apiext:VK_NVX_binary_import; and
+    tag refpage aliases for API constants which were promoted to core
+    (internal merge request 4921).
+  * Add description of elink:VkFormats in the new <formats>
+    tag for `vk.xml`, and corresponding schema and script updates.
+    (internal issues 1761, 2484, and 2811).
+
+New Extensions:
+
+  * apiext:VK_EXT_image_view_min_lod (internal merge request 4701).
+
+-----------------------------------------------------
+
+Change log for November 9, 2021 Vulkan 1.2.198 spec update:
+
+  * Update release number to 198 for this update.
+
+GitHub Issues:
+
+  * Sort dependencies of "`Provided by`" comments in generated API includes,
+    and remove duplicates (public issue 1483, internal issue 2620).
+  * Remove max-width attribute from document headers, causing CSS to limit
+    page width in wide windows (public pull request 1660).
+
+Internal Issues:
+
+  * Filter out `VK_VERSION_1_x` pages when generating refpage sources for a
+    build that does not include the corresponding core version (internal
+    issue 1971).
+  * Adjust section header level for extension appendix refpages to match
+    other refpages (internal issue 2151).
+  * Add and fix protected memory valid usage statements to require queues be
+    protected if any batch if a protected batch, and restrict indirect
+    operations when pname:protectedNoFault is supported (internal issues
+    2169, 2841)
+  * Generate refpages to SPIR-V builtins, which were marked up in the spec
+    source but not being extracted and built (internal issue 2395).
+  * Clarify VUID 04918 regarding use of code:Location decorations (internal
+    issue 2737).
+  * Remove redundant nested VK_VERSION_1_1 conditional markup from the
+    <<initialization>> chapter (internal issue 2851).
+  * Add code:IdrPicFlag to code:StdVideoDecodeH264PictureInfoFlags for
+    provisional video extensions (internal issue 2901).
+  * Fix incorrect example code in apiext:VK_HUAWEI_subpass_shading appendix
+    sample code (internal merge request 4889).
+  * Promote ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT and
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT in a few
+    places where the etext:KHR suffixes had not been removed (internal merge
+    request 4902).
+  * Add missing format properties consistency checks for
+    slink:VkDrmFormatModifierPropertiesList2EXT and
+    slink:VkAndroidHardwareBufferFormatProperties2ANDROID.
+  * Minor editorial markup fixes.
+
+-----------------------------------------------------
+
+Change log for November 2, 2021 Vulkan 1.2.197 spec update:
+
+  * Update release number to 197 for this update.
+
+GitHub Issues:
+
+  * Align some of the provisional video standard headers enums and bitfields
+    to have predictable sizes (public issue 1571).
+  * Remove exporting of D3D memory handles from
+    slink:VkExportMemoryWin32HandleInfoKHR (public pull request 1612).
+  * Add language to slink:VkAccelerationStructureBuildGeometryInfoKHR
+    explicitly stating that source and target acceleration structures are
+    allowed to be the same or different during an update (public issue
+    1641).
+  * Fix typos (public pull request 1662).
+  * Register remaining newly introduced `vk_video` types in `vk.xml` (public
+    pull request 1663).
+
+Internal Issues:
+
+  * Clarify <<resources-external-sharing, ownership transfers on external
+    resources>> (internal issue 2692).
+  * Changes to (nearly) eliminate dead internal links and improve scripts:
+  ** Correctly generate API dependencies on extensions and core versions in
+     cases where "`spelling aliases`" were present
+  ** Clean up a few incorrectly marked up links, anchors, and refpage block
+     alias= attributes
+  ** Use an API alias map to substitute promoted API names for promoted-to
+     APIs when an older or restricted spec is being generated and the
+     promoted-to API is not included
+  * Tag sname:VkVideo{Encode,Decode}H26{4,5}ProfileEXT structures as
+    extending slink:VkQueryPoolCreateInfo in `vk.xml` (internal issue 2861).
+  * Grammar edits to slink:VkAccelerationStructureKHR (internal issue 2887).
+  * Change the cited title of the <<LoaderInterfaceArchitecture>> document
+    to "`Architecture of the Vulkan Loader Interfaces`" matching a recent
+    change in https://github.com/KhronosGroup/Vulkan-Loader/pull/685
+    (internal merge request 4823).
+  * Re-remove etext:VkVideoEncodeH265CapabilityFlagBitsEXT, which was
+    accidentally reintroduced but is still unused (internal merge request
+    4885).
+  * Update wording for
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR since it no
+    longer contains `"update`" (internal merge request 4886).
+  * Consistency edits to remove "`instance of`" when referring to a specific
+    structure, and use "`render pass`" instead of "`renderpass`" as a noun
+    (internal merge request 4896).
+  * Add -version option to 'makeSpec' frontend build script.
+
+New Extensions
+
+  * `<<VK_KHR_dynamic_rendering>>`
+
+-----------------------------------------------------
+
+Change log for October 13, 2021 Vulkan 1.2.196 spec update:
+
+  * Update release number to 196 for this update.
+
+GitHub Issues:
+
+  * Clarify normative language for
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT in
+    elink:VkImageUsageFlagBits, allowing two styles of implementation
+    (public issue 1616).
+  * Fix typo in flink:vkCmdSetScissor (public pull request 1659).
+  * Reorder attributes of elink:VkFormatFeatureFlags2KHR in `vk.xml` for
+    consistency (public pull request 1653).
+
+Internal Issues:
+
+  * More cleanup of internal broken links in various builds of the specs.
+    Fix typos on xrefs and anchors, add stub pages for missing Flags and
+    FlagBits types, update `spirvcapgenerator.py` to put anchors with the
+    same table row they belong to, validate `apiext:` macro targets at build
+    time, and don't generate API requirements for `<type>` tags with no
+    `category`, eliminating spurious warnings for external types (internal
+    issues 2864, 2866).
+  * Update `htmldiff` scripts for Python3.
+  * Add subsection titles and anchors in the <<fxvertex, Fixed-Function
+    Vertex Processing>> chapter to make thematic breaks more clear (internal
+    merge request 4867).
+
+New Extensions
+
+  * `<<VK_EXT_border_color_swizzle>>`
+  * `<<VK_EXT_video_encode_h265>>` *provisional* H.265 video encode codec extension
+
+-----------------------------------------------------
+
+Change log for October 5, 2021 Vulkan 1.2.195 spec update:
+
+  * Update release number to 195 for this update.
+
+GitHub Issues:
+
+  * Add a NOTE to flink:vkDestroyQueryPool clarifying when a query pool can
+    be destroyed (public issue 1647).
+
+Internal Issues:
+
+  * Begin cleanup of internal broken links in various builds of the specs,
+    including generating a Ruby API map to be used by the Asciidoctor macros
+    to validate their API name arguments; using "nofollow" on GitHub issue
+    opening links to avoid link-checkers being interpreted as DOS attacks;
+    improved checker scripts; minor markup fixes; and using the `apiext:`
+    macro to replace `<<VK_KHR_extension_name>>`-style extension links
+    everywhere (internal issue 2831).
+  * Minor editorial cleanups to descriptions of
+    apiext:VK_FUCHSIA_buffer_collection APIs (internal issue 2836).
+  * Match `Cull Mask` SPIR-V name to pname:mask parameter name in the
+    <<acceleration-structure, Acceleration Structures>> chapter (internal
+    merge request 4844).
+  * Add pname:minTexelOffset and pname:maxTexelOffset limit valid usage
+    statements for code:OpImageSample* and code:OpImageFetch* in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal merge request 4845).
+  * Add pname:maxFragmentDualSrcAttachments and
+    pname:maxFragmentCombinedOutputResources limit valid usage statements
+    for output and color attachments in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal merge request 4847).
+
+New Extensions
+
+  * `<<VK_KHR_format_feature_flags2>>`
+  * `<<VK_KHR_maintenance4>>`
+  * `<<VK_EXT_rgba10x6_formats>>`
+
+-----------------------------------------------------
+
+Change log for September 28, 2021 Vulkan 1.2.194 spec update:
+
+  * Update release number to 194 for this update.
+
+GitHub Issues:
+
+  * Add missing `len` attribute to
+    slink:VkCuModuleCreateInfoNVX::pname:pData (public merge request 1646).
+  * Refer to dynamic state consistently from ftext:vkCmdSet* commands, and
+    link to the definition of dynamic state (public issue 1428, but with
+    expanded scope beyond the actual ask in that issue).
+
+Internal Issues:
+
+  * Fix incorrect member name in slink:VkRenderPassCreateInfo valid usage
+    statement 02515 (internal issue 2824).
+  * Fix XML dependency for `<<VK_NV_device_generated_commands>>` (internal
+    issue 2818).
+  * Add packed formats from `<<VK_KHR_sampler_ycbcr_conversion>>`` to the
+    <<formats-packed, table of packed formats>> and improve description of
+    packed format naming conventions (internal merge request 4798).
+
+New Extensions
+
+  * `<<VK_FUCHSIA_buffer_collection>>`
+
+-----------------------------------------------------
+
+Change log for September 21, 2021 Vulkan 1.2.193 spec update:
+
+  * Update release number to 193 for this update.
+
+GitHub Issues:
+
+  * Use consistent `implicitexternsync` language in XML for
+    flink:vkDestroyDevice (public issue 1482).
+  * Clarify requirements of flink:vkGetInstanceProcAddr to match that of the
+    Android loader when attempting to retrieve a global function with a
+    non-NULL instance parameter (public issue 1605).
+  * Add new elink:VK_DRIVER_ID reservations for upcoming Mesa drivers
+    (public pull request 1642).
+
+Internal Issues:
+
+  * Fix flink:vkCmdEndDebugUtilsLabelEXT to clarify command buffer recording
+    interactions with debug labels (internal issue 2777).
+  * Improve NOTE for acceleration structure capture / replay in
+    slink:VkAccelerationStructureCreateInfoKHR (internal issue 2769).
+  * Add "`See Also`" crosslinks to extension refpages providing aliased APIs
+    in API refpages (internal issue 2819).
+  * Fix markup for core version (`VK_VERSION_1_0`, etc.) refpages -
+    Asciidoctor doesn't allow section headers here and this affected the
+    specification appendix rendering (internal issue 2826).
+  * Use open range notation for slink:VkSamplerCreateInfo
+    ptext:addressMode[UVW] descriptions (internal issue 2829).
+  * Replace term "`channel`" with "`component`" when discussing formats, and
+    update glossary to help clarify formats such as
+    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 and
+    ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 (internal merge
+    request 4799).
+  * Fix some primitive_topology_list_restart VUIDs to only apply if
+    pname:primitiveRestartEnable is ename:VK_TRUE (internal merge request
+    4818).
+  * Fix slink:VkPhysicalDeviceShaderCorePropertiesAMD `limittype` attributes
+    in XML (internal merge request 4819).
+  * Fix accidentally duplicated VUIDs 06256 due to missing {accessMaskName}
+    in VUID markup (internal merge request 4829).
+  * Miscellaneous minor formatting and style fixes (internal merge requests
+    4832, 4838).
+
+-----------------------------------------------------
+
+Change log for September 14, 2021 Vulkan 1.2.192 spec update:
+
+  * Update release number to 192 for this update.
+
+GitHub Issues:
+
+  * Correctly describe slink:VkDeviceQueueInfo2::pname:pNext (public issue
+    1622).
+  * Improve behavior of contact links from extension metadata generator
+    (public merge request 1635).
+  * Require slink:VkDeviceAddress in 1.0 spec conditional markup, matching
+    XML (public issue 1636).
+
+Internal Issues:
+
+  * Turn <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section into formal Valid Usage statements with assigned valid usage IDs
+    (internal issue 1598).
+  * Use `pass:[~~~~]` delimiters for `[source]` blocks inside reference page
+    `[open]` blocks to bypass logic problem with VUID assignment script
+    (internal issue 2040).
+  * Update style guide to incorporate Khronos Inclusive Language document by
+    reference. Followon changes will apply the suggestions as needed
+    (internal issue 2293).
+  * Add clarifications about ray tracing transform matrices to
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR,
+    slink:VkAccelerationStructureBuildOffsetInfoKHR, and the
+    <<ray-intersection-candidate-determination, Ray Intersection Candidate
+    Determination>> section (internal issue 2709).
+  * Clarify descriptor requirements for code:Buffer and code:Subpassdata in
+    the <<interfaces-resources-correspondence, Shader Resource and
+    Descriptor Type Correspondence>> table (internal issue 2751).
+  * Add aliases for versioned extensions which don't treat the trailing
+    version number as a separate word, such as
+    ename:VK_KHR_MAINTENANCE1_SPEC_VERSION ->
+    ename:VK_KHR_MAINTENANCE_1_SPEC_VERSION, and add a CI test in
+    `scripts/xml_consistency.py` to try and detect future occurrences
+    (internal issue 2810).
+  * Add missing pname:sType and pname:pNext boilerplate descriptions to spec
+    language for several elink:*Features structures that were missing it
+    (though they did have them in the XML definition of the structures)
+    (internal issue 2815).
+  * Add extension and version crosslinks to generated reference pages,
+    expressing the same information in the `Provided by` comments in
+    generated API includes (internal issue 2816).
+  * Move the old "`Fragment Shader Execution`" section from the <<shaders>>
+    chapter to the <<fragops-shader, Fragment Shading>> section of the
+    <<fragops>> chapter, change anchor names accordingly, and factor out
+    common related language from several parts of the spec into this section
+    (internal merge request 4765).
+  * Allow access to the code:PrimitiveId builtin from shaders declared with
+    the code:MeshShadingNV capability (internal merge request 4767).
+  * Make the <<features-primitiveTopologyListRestart,
+    pname:primitiveTopologyListRestart>> feature mandatory for
+    `<<VK_EXT_primitive_topology_list_restart>>` (internal merge request
+    4790).
+  * Edit <<limits-types, Required Limit Types>> table to add Vulkan 1.2
+    interactions for pname:filterMinmaxSingleComponentFormats and
+    pname:filterMinmaxImageComponentMapping limits (internal merge request
+    4802).
+  * Add ename:VK_FORMAT_R10X6_UNORM_PACK16 and
+    ename:VK_FORMAT_R12X4_UNORM_PACK16 to the list of 16-bit packed formats,
+    and fix formatting of "`wildcard`" enums containing a placeholder _i_
+    tag corresponding to supported integers (internal merge request 4803).
+  * Refactor CI scripts to use the Makefile `allchecks` target as part of CI
+    instead of multiple separate steps, allowing a quick local check
+    equivalent to that part of CI, and update that target accordingly
+    (internal merge request 4807).
+  * Make slink:VkImageCreateInfo valid usage statement 01572 apply to all
+    compressed formats (internal merge request 4812).
+
+
+-----------------------------------------------------
+
+Change log for September 7, 2021 Vulkan 1.2.191 spec update:
+
+  * Update release number to 191 for this update.
+
+Internal Issues:
+
+  * Update checker scripts to detect extension number conflicts in `vk.xml`,
+    and run the check in CI (internal issue 2612).
+  * Minor cleanup for the provisional video extensions, including
+    documenting a few undocumented enums and structure members and some
+    language cleanup (internal issue 2705).
+  * Add a NOTE to flink:vkAllocateMemory.txt about protected memory
+    allocation count limits (internal issue 2791).
+  * Use "`cube map`" spelling, and add this case to the style guide
+    (internal merge request 4794).
+
+New Extensions:
+
+  * `<<VK_EXT_pageable_device_local_memory>>`
+
+-----------------------------------------------------
+
+Change log for August 29, 2021 Vulkan 1.2.190 spec update:
+
+  * Update release number to 190 for this update.
+  * Released a few days in advance of the usual Tuesday spec updates due to
+    holiday meeting schedule.
+
+GitHub Issues:
+
+  * Make treatment of empty etext:Vk*FlagBits types consistent in `vk.xml`
+    (public issue 1601 and merge request 1609)
+
+Internal Issues:
+
+  * Add more descriptive language for transforms in the
+    <<ray-intersection-candidate-determination, Ray Intersection Candidate
+    Determination>> section (internal issue 2709).
+  * Update `-validate` logic in registry scripts to validate the `limittype`
+    attribute presence and values where required (internal issue 2606).
+  * Update common validity statements for access masks to allow shader
+    pipeline bits to be use with ename:VK_ACCELERATION_STRUCTURE_READ_BIT
+    (internal issue 2782).
+  * Fix typo in the description of code:CullDistancePerViewNV (internal
+    merge request 4769).
+  * Various fixes and simplifications for
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>> valid
+    usage statements:
+  ** Flatten markup for VK_KHR_shader_subgroup_extended_types valid usage
+     statements (internal issue 1598)
+  ** Flatten markup for VK_EXT_shader_atomic_float valid usage statements
+     (internal issue 1598).
+  ** Remove Asciidoctor conditional check for
+     `VK_KHR_storage_buffer_storage_class`, not needed because the SPIR-V
+     specification is unified and `spirv-val` will throw an error if trying
+     to use code:StorageBuffer without the proper extension / version being
+     set (internal merge request 4779).
+
+New Extensions:
+
+  * `<<VK_KHR_shader_integer_dot_product>>`
+  * `<<VK_EXT_primitive_topology_list_restart>>`
+
+-----------------------------------------------------
+
+Change log for August 17, 2021 Vulkan 1.2.189 spec update:
+
+  * Update release number to 189 for this update.
+
+GitHub Issues:
+
+  * Add parent check valid usage statements to flink:vkUpdateDescriptors
+    (public issue 1581).
+  * Document the feature requirement for separate depth/stencil layouts in
+    the <<resources-image-layouts, Image Layouts>> section (public issue
+    1583).
+  * Revert a valid usage statement constraining
+    slink:VkMemoryAllocateInfo::pname:allocationSize (public issue 1595).
+  * Remove misleading reference to `z` from the description of image
+    coordinates for slink:VkSamplerCreateInfo::pname:unnormalizedCoordinates
+    (public issue 1602).
+  * Fix typo in <<fxvertex-input-extraction>> section (public pull request
+    1604).
+  * Fix comment in example for `<<VK_EXT_debug_utils>>` appendix to
+    correctly reference pname:objectHandle, not ptext:object (public pull
+    request 1606).
+  * Revert `vk_platform.h` path change in `vk.xml` from public pull request
+    1538, which was causing build issues for some projects. We will revisit
+    this in the future but did not want to put a problematic change into the
+    next SDK update (public pull request 1610).
+
+Internal Issues:
+
+  * Use `hexapdf` for PDF optimization, rather than Ghostscript. This
+    improves overall PDF generation time about 15-20%, and final PDF size by
+    about 1/3 (internal issue 2422).
+  * Improve contrast for better accessibility of HTML outputs, based on
+    feedback from the ANDI tool. This includes updating the specification
+    CSS in `config/khronos.css`, switching to the rouge source code
+    highlighter instead of coderay, and overriding some of the rouge theme
+    CSS (internal issue 2784).
+  * Clarify that transforms are consumed only if transformData is non-null
+    for slink:VkAccelerationStructureBuildRangeInfoKHR.txt (internal issue
+    2787).
+  * Make spec language describing bitmasks consistent as 'Bits which can: be
+    set' (internal merge request 4762).
+  * Support `optional` attribute in the valid usage statement generator for
+    union types (internal merge request 4772).
+
+-----------------------------------------------------
+
+Change log for August 10, 2021 Vulkan 1.2.188 spec update:
+
+  * Update release number to 188 for this update.
+
+GitHub Issues:
+
+  * Add missing `optional="true"` attributes to pname:pNext members. Enable
+    `scripts/xml_consistency.py` in CI, and add check for this case (public
+    pull request 1597).
+  * Add missing markup (setting `refpage` attributes where they were needed
+    for commonvalidity statements) to fix some broken valid usage ID link
+    names (public issue 1598).
+  * Update valid usage statement 02650 to use "`potential format features`"
+    consistently with other recent changes (discussion on public
+    Vulkan-ValidationLayers pull request 3139).
+
+Internal Issues:
+
+  * Clarify the role of <<ray-traversal-culling-face, face winding>> in the
+    context of ray intersection candidate determination and alias
+    ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
+    ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, corresponding
+    to the clarifications (internal issue 2780).
+  * Add valid usage statement for flink:vkCmdBeginTransformFeedbackEXT
+    requiring a valid graphics pipeline be bound (internal issue 2785).
+  * Use the term <<acceleration-structure-def, "`constructed`">> to refer to
+    an acceleration structure that was previously built or created by
+    copying or deserialization of a built acceleration structure (internal
+    merge request 4727).
+  * Add explicit valid usage statements to flink:vkWaitForPresentKHR and
+    slink:VkPresentInfoKHR requiring the corresponding features be enabled
+    (internal merge request 4754).
+  * Remove extraneous trailing periods from some valid usage statements
+    (internal merge request 4759).
+
+New Extensions:
+
+  * `<<VK_EXT_load_store_op_none>>`
+
+-----------------------------------------------------
+
+Change log for August 3, 2021 Vulkan 1.2.187 spec update:
+
+  * Update release number to 187 for this update.
+
+GitHub Issues:
+
+  * Add glossary terms for "`pipeline ray tracing instructions`" and "`ray
+    tracing commands`" (public issue 1578).
+  * Limit the code:OpTypeImage code:Unknown format restriction to storage
+    images in the <<spirvenv-module-validation-runtime, Runtime SPIR-V
+    Validation>> section (public issue 1588).
+  * Fix slink:VkRect2D::pname:extent in a few places where it was
+    misreferenced as pname:offset (public pull request 1590).
+
+Internal Issues:
+
+  * Clarify that depth values outside the range [0,1] become undefined
+    following the depthClamp stage of the pipeline, by rearranging the
+    <<fragops-depth, Depth Test>> section and adding a new "`Depth Clamping
+    and Range Adjustment`" subsection (internal issues 2445, 2753).
+  * Clarify valid usage statement 01843 for slink:VkDeviceQueueInfo2 to
+    match similar statement for flink:vkGetDeviceQueue, and split off part
+    of it into a new VU statement (internal issue 2645).
+  * Fix a few enumerant and member names in the provisional video extensions
+    to comply with the spec style guidelinse (internal issue 2710).
+  * Update the descriptions of flink:vkCmdDrawMultiEXT and
+    flink:vkCmdDrawMultiIndexedEXT to clarify how they are equivalent to
+    calling underlying drawing commands multiple times with different
+    parameters (internal issue 2757).
+  * Renumber VUIDs which duplicated the numeric portion of another
+    non-common VUID, and add a duplicate number detection test to CI to
+    prevent recurrences (internal issue 2764).
+  * Make code:SubgroupSize command scope uniform in compute dispatches
+    (internal issue 2773).
+  * Expand the list of valid image layouts for
+    <<attachment-type-imagelayout, input attachments>>,
+    <<descriptorsets-sampleimage, sampled images>>, and
+    <<descriptorsets-combinedimagesampler, combined image samplers>> to
+    include DEPTH_READ_ONLY_OPTIMAL and STENCIL_READ_ONLY_OPTIMAL (internal
+    issue 2774).
+  * Remove `flowRoot` SVG elements from a few recent image updates, as they
+    are not supported by the current PDF toolchain (internal issue 2778).
+  * Update to asciidoctor-chunker 1.0.4, adding support for `aria-label`
+    accessibility tags on the chunked specification forward/back section
+    navigation arrows (internal issue 2784).
+  * Clean up description of flink:vkCmdClearAttachments and remove redundant
+    information (internal merge request 4717).
+  * Add a description of each of the
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR::pname:queryPool
+    query types (internal merge request 4728).
+  * Add new valid usage statement to slink:VkMemoryAllocateInfo when
+    allocating a memory object larger than the reported limit (internal
+    merge request 4737).
+  * Add missing description of pname:layerCount member of
+    slink:VkFramebufferAttachmentImageInfo (internal merge request 4744).
+
+
+-----------------------------------------------------
+
+Change log for July 27, 2021 Vulkan 1.2.186 spec update:
+
+  * Update release number to 186 for this update.
+
+GitHub Issues:
+
+  * Reduce size and increase clarity of some SVG images for the provisional
+    video extensions (public issue 1537).
+  * Use a consistent description of pname:stride as "`byte stride`" rather
+    than "`distance in bytes`" in a few places (public issue 1575)
+  * Clarify the equivalence of flink:vkQueueWaitIdle to
+    fence submission (public issue 1579).
+  * Fix XML capabilities for new code:*Float*Atomic* SPIR-V capabilities to
+    require slink:VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT rather than
+    slink:VkPhysicalDeviceShaderAtomicFloatFeaturesEXT (public pull request
+    1587, although fixed internally first).
+
+Internal Issues:
+
+  * Refactor Asciidoctor conditionals imbedded within valid usage statements
+    so they are extracted properly to `validusage.json`, and add a CI check
+    to prevent this happening in the future (internal issues 1529, 2439).
+  * Clarify that dynamic vertex buffer object stride of 0 is allowed in
+    valid usage statement for flink:vkCmdBindVertexBuffers2EXT
+    (internal issue 2742)
+  * Add valid usage statement to
+    ftext:vkGetPhysicalDeviceSurfaceCapabilities{KHR,2EXT,2KHR},
+    ftext:vkGetPhysicalDeviceSurfacePresentModes{KHR,2EXT}, and
+    ftext:vkGetDeviceGroupSurfacePresentModes{KHR,2EXT} requiring surface /
+    device compatibility (internal issue 2744).
+  * Clarify the requirements on code:OpTypeImage for input attachments in
+    the <<spirvenv-module-validation, Validation Rules within a Module>> and
+    <<interfaces-inputattachment, Fragment Input Attachment Interface>>
+    sections (internal issue 2752)
+  * Clarify that stipple parameters are ignored when line stipple is
+    disabled in slink:VkPipelineRasterizationLineStateCreateInfoEXT
+    (internal issue 2763)
+  * Improve wording for the shader interface code:Location limit in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal merge request 4693)
+
+-----------------------------------------------------
+
+Change log for July 20, 2021 Vulkan 1.2.185 spec update:
+
+  * Update release number to 185 for this update.
+  * Going forward we will probably be moving the default day for spec
+    updates to Tuesday (Pacific time) rather than Monday.
+
+GitHub Issues:
+
+  * Clarify that only *device* extensions are required to be specified in
+    valid usage statement for flink:vkCreateDevice (public issue 1567).
+  * Fix extension dependencies for `<<VK_EXT_calibrated_timestamps>>` to
+    include `<<VK_KHR_get_physical_device_properties2>>` (public issue
+    1568).
+  * Conditionalize xref to VkPhysicalDeviceSubgroupProperties in
+    `<<VK_KHR_spirv_1_4>>` appendix so it does not show up in a 1.0 spec
+    build (public issue 1574).
+  * Relax portability usage of the identity swizzle in
+    slink:VkImageViewCreateInfo valid usage statement 04465 (public
+    KhronosGroup/Vulkan-Portability issue 27).
+
+Internal Issues:
+
+  * Document in the <<extendingvulkan-extensions-extensiondependencies,
+    Extension Dependencies>> section that instance extensions do not have
+    dependencies on device extensions, and add a similar requirement to the
+    description of the `requires` attribute of extension tags in the
+    registry schema document (internal issue 2387).
+  * Fix `optional` attribute in XML for
+    flink:vkCmdBindVertexBuffers2EXT::pname:pBuffers (internal issue 2574).
+  * Remove redundant valid usage statements from flink:vkCmdPipelineBarrier,
+    flink:vkCmdSetEvent, and flink:vkCmdResetEvent. Add missing VUs for
+    slink:VkSubpassDependency and slink:VkSubpassDependency2 (internal issue
+    2583).
+  * Clarify that
+    ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+    must be supported in pname:bufferFeatures (internal issue 2686).
+  * Clarify that a valid function pointer pname:fp returned from
+    flink:vkGetInstanceProcAddr must not be `NULL` (internal issue 2720).
+  * Relax code:Flat, code:NoPerspective, code:Sample, and code:Centroid
+    storage class restriction in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal issue 2721).
+  * Clarify forward progress behavior of flink:vkAcquireNextImageKHR and
+    flink:vkQueuePresentKHR (internal issue 2729).
+  * Remove duplicated language describing queue submission in the
+    <<fundamentals-execmodel, Execution Model>> and
+    <<fundamentals-queueoperation, Queue Operation>> sections (internal
+    issue 2736).
+  * Describe the new pipeline stage
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI in several sections
+    of the <<synchronization>> chapter where it was missing (internal issue
+    2745).
+  * Improve formatting in the <<limits>> chapter, add support for the
+    missing optionally: normative word macro, and replace most use of
+    (non-normative) "`optionally`" with normative "`can:`". Update style
+    guide to add more contractions and remove contractions from the spec.
+    add a better description of the pname:shaderDrawParameters feature
+    (internal merge requests 4699, 4708).
+  * Fix name of parameter
+    flink:vkGetMemoryRemoteAddressNV::pname:pMemoryGetRemoteAddressInfo to
+    follow Vulkan conventions (internal merge request 4704).
+  * Minor fixes for the <<resources-image-views-compatibility, image view
+    compatibility table>> and related minor spec language fixes elsewhere
+    (internal merge request 4709).
+
+New Extensions:
+
+  * `<<VK_EXT_shader_atomic_float2>>`
+  * `<<VK_HUAWEI_invocation_mask>>`
+  * `<<VK_KHR_present_id>>`
+  * `<<VK_KHR_present_wait>>`
+
+Miscellany:
+
+  * Happy Lunar Landing Day!
+
+-----------------------------------------------------
+
+Change log for July 5, 2021 Vulkan 1.2.184 spec update:
+
+  * Update release number to 184 for this update.
+
+GitHub Issues:
+
+  * Make description of
+    slink:VkSparseImageMemoryRequirements::pname:formatProperties.imageGranularity
+    consistent by replacing the nested structure descriptions with a simple
+    description of pname:formatProperties (public issue 1444).
+  * Update `<<VK_HUAWEI_subpass_shading>>` extension to rename
+    flink:vkGetSubpassShadingMaxWorkgroupSizeHUAWEI to
+    flink:vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI and give it a
+    dispatchable slink:VkDevice parameter (public issue 1564).
+  * Fix labelling of "`Resource`" reference block in pipeline block
+    diagrams (public issue 1582).
+
+Internal Issues:
+
+  * Replace the old <<resources-image-views-compatibility>> table with a
+    simplified image type / image view type compatibility table, and move
+    the parameter compatibility portions of the table into explicit valid
+    usage statements (internal issue 2586).
+  * Define the slink:VkPipelinCacheHeaderVersionOne structure in `vk.xml`
+    instead of the previous "`Layout for pipeline cache header version one`"
+    table (internal merge request 4011).
+  * Make the `requires` attribute of the `spirvcapability` XML tag required
+    when specifying a structure, even if what's required is
+    `"VK_VERSION_1_0"`, to address a problem in the generated table from
+    these tags (internal merge request 4689).
+
+New Extensions:
+
+  * `<<VK_NV_extermal_memory_rdma>>`
+
+-----------------------------------------------------
+
+Change log for June 28, 2021 Vulkan 1.2.183 spec update:
+
+  * Update release number to 183 for this update.
+
+GitHub Issues:
+
+  * Rewrite and simplify the <<interfaces-iointerfaces-matching, Interface
+    Matching>> section. Clarify that results are undefined if the size of a
+    vector mismatches (public issue 666; internal issues 1269, 2059, 2323).
+  * Remove inappropriate `const` from `void *pNext` members of
+    `returnedonly` structures in `vk.xml` (public issue 1482, internal issue
+    2644).
+  * Add a NOTE to the <<interfaces, Shader Interfaces>> chapter that SPIR-V
+    execution model keywords with extension suffixes will always be present
+    in spec builds, even in a build not supporting any extensions, since
+    these keywords appear in the unified SPIR-V specification without such
+    qualifiers (public issue 1483, internal issue 2621).
+  * Modify `vk.xml` to include the Vulkan platform header via the path
+    `vulkan/vk_platform.h` rather than just `vk_platform.h`
+    (public pull request 1538).
+  * Add length annotations for slink:VkCuLaunchInfoNVX (public issue 1548).
+  * Describe slink:VkSubpassDescription::pname:pDepthStencilAttachment
+    correctly as a pointer to a structure, not a pointer to an array of
+    structures (public issue 1561).
+  * Fix `structextends` attribute of
+    slink:VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, declare its
+    pname:pNext member correctly, and fix some typos in the related
+    extension language (public issue 1565, internal issue 2724).
+
+Internal Issues:
+
+  * Add explicit valid usage statements for
+    flink:vkCmdClearColorImage::slink:VkClearColorValue and
+    slink:VkRenderPassBeginInfo::slink:VkClearValue (internal issue 2490).
+  * Change the term "`vertex processing {shader} stage`" to
+    "`pre-rasterization shader stage`" throughout the specification, link to
+    a single definition, and add "`pre-rasterization`" to the glossary
+    (internal issue 2634).
+  * Add an `<implicitexternsync>` constraint for
+    flink:vkResetCommandBuffers::pname:pool (internal issue 2646).
+  * Fix typo `vkCmdResetEvent` -> `vkResetEvent` in flink:vkResetEvent valid
+    usage statements (internal issue 2651).
+  * Fix wording of scope dependencies for slink:VkMemoryBarrier2KHR,
+    slink:VkBufferMemoryBarrier2KHR, and slink:VkImageMemoryBarrier2KHR
+    members pname:srcAccessMask and pname:dstAccessMask (internal issue
+    2654).
+  * Require support for pname:shaderInt64 in the <<features-requirements,
+    Feature Requirements>> section when pname:atomicInt64 features are
+    supported (internal issue 2660).
+  * Clarify ray tracing valid usage statements for cases where a parameter
+    refers to an acceleration structure that must have been built (internal
+    issue 2715).
+  * Add a NOTE clarifying shader record buffer uniformity in the
+    <<shader-binding-table, Shader Binding Table>> section (internal issue
+    2719).
+  * Minor clarifications and typo fixes to `<<VK_HUAWEI_subpass_shading>>`
+    (internal issue 2722).
+  * Add missing <spirvextension> entry in `vk.xml` to enable
+    `SPV_KHR_subgroup_uniform_control_flow`
+    (internal issue 2733).
+  * Move SPIR-V valid usage statement from the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section to <<spirvenv-module-validation-standalone]] Standalone SPIR-V
+    Validation>> (internal merge request 4637).
+  * Add a new <<spirvenv-image-signedness, Signedness of SPIR-V Image
+    Accesses>> section to allow the use of unsigned Sampled Types with
+    code:SignExtend and signed code:Format decorations (internal merge
+    request 4638).
+  * Add missing slink:VkDeviceCreateInfo to `structextends` attribute of
+    slink:VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT (internal merge
+    request 4652).
+  * Remove nonexistent pname:minFragmentSize from the <<limits-minmax, Limit
+    Requirements>> table (internal merge request 4655).
+  * Fix markup typo for `<<VK_NV_fragment_shader_barycentric>>` ifdef
+    (internal merge request 4663).
+
+-----------------------------------------------------
+
+Change log for June 21, 2021 Vulkan 1.2.182 spec update:
+
+  * Update release number to 182 for this update.
+
+GitHub Issues:
+
+  * Add XML attributes & schema updates to link untyped Vulkan object handle
+    values to corresponding object types (public issue 1536).
+
+Internal Issues:
+
+  * Automatically generate links to extension proposal documents from
+    extension appendices (internal issue 2713).
+  * Clean up wording of flink:vkCmdWriteTimestamp and
+    flink:vkCmdWriteTimestamp2KHR (internal issue 2425).
+  * Fix hpp-compile CI stage after recent changes to Vulkan-Headers
+    repository which generate additional header files.
+
+New Extensions:
+
+  * `<<VK_EXT_acquire_drm_display>>` (public pull request 1529).
+  * `<<VK_EXT_multi_draw>>`
+  * `<<VK_EXT_physical_device_drm>>` (public pull request 1356).
+  * `<<VK_HUAWEI_subpass_shading>>`
+  * `<<VK_NV_ray_tracing_motion_blur>>`
+
+-----------------------------------------------------
+
+Change log for June 14, 2021 Vulkan 1.2.181 spec update:
+
+  * Update release number to 181 for this update.
+
+GitHub Issues:
+
+  * Add stub slink:VkPipelineLayoutCreateFlagBits <enum> type in `vk.xml` to
+    reduce spurious warnings from XML processing scripts that don't respect
+    the `supported="disabled"` attribute, and update the registry schema
+    documentation to make more clear that `extension` tags with this
+    attribute should not be processed (public issue 1549).
+
+Internal Issues:
+
+  * Clarify implicit conversions between the vertex input attribute
+    description format and the shader vertex attribute input type in the
+    <<fxvertex-attrib-location, Attribute Location and Component
+    Assignment>> and <<fxvertex-input-extraction>> sections (internal issue
+    902).
+  * Add text about the <<interfaces-alignment-requirements, base alignment
+    of empty structures>> (internal issue 2174).
+  * Clarify the use of rasterization order <<primsrast-order,
+    "`operations`">> (internal merge request 4582).
+  * Allow any pipeline barrier command for queue transfers in the
+    <<synchronization-queue-transfers, Queue Family Ownership Transfer>>
+    section (internal merge request 4596).
+  * Remove potentially confusing reference to
+    ename:VK_ERROR_INVALID_SHADER_NV in the description of
+    flink:vkCreateShaderModule (internal merge request 4602).
+  * Improve visibility of instance creation callbacks by migrating some
+    language from the `<<VK_EXT_debug_report>>` and `<<VK_EXT_debug_utils>>`
+    appendix examples to the description of slink:VkInstanceCreateInfo
+    (internal merge request 4614).
+  * Fix markup for sparse image atomic requirements in the
+    <<features-requirements, Feature Requirements>> section and for
+    slink:VkDeviceCreateInfo valid usage statements (internal merge request
+    4618).
+  * Correct the definition of
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+    to constrain pname:chromaFilter, not pname:minFilter / pname:magFilter
+    (internal merge request 4623).
+  * Add level 3 headings in <<pipelines-cache, Pipeline Cache>> section
+    (internal merge request 4627).
+  * Clarify flink:vkCmdCopyAccelerationStructureKHR to add details on the
+    copy command itself, as well as the etext:CLONE and etext:COMPACT copy
+    modes (internal merge request 4631).
+  * Remove `<mask>` tags from some SVG images in the provisional video
+    extensions. These tags are not supported by components of the PDF
+    toolchain. Removing them removes many warnings from the PDF build and is
+    a workaround for editing the SVGs to use alternate constructs for the
+    intended purpose, although it also make these images in the HTML output
+    show the same artifacts as the PDF output.
+
+-----------------------------------------------------
+
+Change log for June 7, 2021 Vulkan 1.2.180 spec update:
+
+  * Update release number to 180 for this update.
+
+GitHub Issues:
+
+  * Add more details about zero shader group handles and draw linkage to
+    etext:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL* flags (public issue 1487).
+  * Clarify that semaphore operations don't do work in a specific pipeline
+    stage in slink:VkSemaphoreSubmitInfoKHR::pname:stageMask (public issue
+    1501).
+  * Fix markup in shared valid usage statements 03766 / 03767 (public issue
+    1528).
+
+Internal Issues:
+
+  * Grammatical improvements for various ray tracing sections. Add statement
+    that AABB intersections may be false-positives (internal issue 2597).
+  * Disambiguate ASTC HDR block error handling in
+    <<appendix-compressedtex-astc, ASTC Compressed Image Formats>> and the
+    following "`ASTC decode mode`" section (internal issue 2603).
+  * Fix some holes in `<<VK_EXT_vertex_input_dynamic_state>>`, including
+    adding some missing common draw validity statements; an interaction
+    with VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT; an interaction
+    with code:nullDescriptor to flink:vkCmdBindVertexBuffers2EXT; and
+    language to
+    slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState (internal
+    issue 2637, 2684).
+  * Make elink:VkAccessFlagBits and elink:VkAccessFlagBits2KHR descriptions
+    consistent and reorganize them in matching order (internal issue 2650).
+  * Add slink:VkSpecializationInfo::pname:pMapEntries valid usage
+    statement requiring the pname:constantID values be unique (internal
+    issue 2668).
+  * Clarify <<queries-wait-bit-not-set, the cases in which
+    flink:vkGetQueryPoolResults returns VK_NOT_READY>> (internal issue
+    2676).
+  * Add spec language and refpages for API constants. With this change all
+    APIs should be defined in the spec (internal issue 2698).
+  * Move some restrictions in the <<interfaces, Shader Interfaces>> chapter
+    into the <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> section (internal merge request 4537).
+  * Add missing member descriptions to slink:VkSurfaceCapabilities2EXT
+    (internal merge request 4544).
+  * Update glossary definition of "`Aspect`" to accommodate copy commands
+    which can operate on multiple aspects (internal merge request 4586).
+  * Add ename:VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHING_EXT
+    enum to provide a standard way to disable caching of shader validation
+    results (internal merge request 4589).
+  * Remove the `pipeline` attribute from `vk.xml`, and the corresponding
+    "`Pipeline Types`" column from the generated command properties tables.
+    The `queues` attribute should be used instead (internal merge request
+    4594).
+  * Fix typos and improve consistency in the provisional video extension
+    language (internal merge request 4598).
+  * Use "`implementation-dependent`" spelling consistently, and update the
+    style guide to match (internal merge request 4611).
+  * Update <<ray-intersection-candidate-determination, ray tracing
+    intersection equation>> for triangles to match other API. This cannot be
+    distinguished in practice (internal vk-gl-cts issue 2846).
+
+New Extensions:
+
+  * `<<VK_KHR_shader_subgroup_uniform_control_flow>>`
+  * `<<VK_EXT_global_priority_query>>`
+
+-----------------------------------------------------
+
+Change log for May 24, 2021 Vulkan 1.2.179 spec update:
+
+  * Update release number to 179 for this update.
+
+GitHub Issues:
+
+  * Require that the queried
+    slink:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
+    is a power of two (public issue 1442).
+  * Fix direction of enum aliasing for fragment shading rate extensions,
+    so NV tokens don't show up in a KHR-only specification build
+    (public issue 1482).
+  * Split the new <<fundamentals-validusage, Valid Usage>> section off from
+    its previous location within the <<fundamentals-errors, Errors>> section
+    (public pull request 1503).
+  * Correct some typos in stage parameter names (public pull request 1507).
+  * Fix minor markup issues (public pull request 1508).
+  * Add missing `optional` attribute to
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR::pname:pVideoFormatPropertyCount
+    in `vk.xml` (public pull request 1514).
+  * Add additional header dependencies for external code:Std* types in the
+    provisional video extensions (public pull request 1515).
+  * Tagged slink:VkCuModuleCreateInfoNVX::pname:pName as
+    `len="null-terminated"` in `vk.xml` (public issue 1526).
+  * Fix `:anchor-prefix:` markup showing up in spec outputs due to
+    overzealous whitespace removal (public issue 1530).
+  * Protect use of `__cplusplus` macro in a preprocessor test in the headers
+    (public Vulkan-Headers issue 4).
+
+Internal Issues:
+
+  * Rephrase the language describing lifetime of EDID query results for
+    slink:VkDisplayPropertiesKHR to be more precise (internal issue 695).
+  * Clarify descriptor pool size aggregation behavior for
+    slink:VkDescriptorPoolCreateInfo.txt (internal issue 2577).
+  * Make valid usage statements for slink:VkImportMemoryFdInfoKHR and
+    slink:VkMemoryGetFdInfoKHR properly enforce the relationship between
+    pname:fd and pname:handleType (internal issue 2607).
+  * Add missing common, non-indirect shared valid usage statements for
+    flink:vkCmdDispatchBase (internal issue 2625).
+  * Call out precision of pname:subPixelPrecisionBits clearly in the
+    <<vertexpostproc-viewport, Controlling the Viewport>> section (internal
+    issue 2635)
+  * Do not allow code:RayPayloadKHR on any-hit shaders in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal issue 2640).
+  * Simplify specification language for sname:VkMemoryDedicatedRequirements
+    (internal issue 2661).
+  * Remove `optional="true"` attributes from XML for
+    slink:VkSurfaceCapabilities* members pname:supportedTransforms,
+    pname:supportedCompositeAlpha, and pname:supportedUsageFlags, matching
+    descriptions in the specification (internal issue 2666).
+  * Add a concurrent deferred host operation example to the
+    `<<VK_KHR_deferred_host_operations>>` appendix (internal issue 2677).
+  * Add a NOTE to slink:VkAccelerationStructureCompatibilityKHR encouraging
+    host-cachable memory for host acceleration structure builds (internal
+    issue 2682).
+  * Remove redundant language in basetype:VkSampleMask duplicating valid
+    usage statements for slink:VkGraphicsPipelineCreateInfo (internal issue
+    2624).
+  * Allow `<<VK_EXT_shader_image_atomic_int64>>` to enable the
+    code:shaderImageInt64Atomics SPIR-V feature in `vk.xml` (internal SPIR-V
+    issue 644).
+  * Add valid usage statement to fname:vkCmdWriteTimestamp* for the
+    pname:query index in pname:queryPool (internal merge request 4528).
+  * Add valid usage statements to flink:vkQueueSubmit2KHR for pname:fence
+    (internal merge request 4530).
+  * Add *GlCompute* to the disallowed *Output* storage classes in shared valid
+    usage statement 04644 for ray tracing functionality (internal merge
+    request 4532).
+  * Remove redundant code:Patch decoration shared valid usage statement 04671
+    (internal merge request 4530).
+  * Make the code:sparseImage*Atomics features a superset of the corresponding
+    code:shaderImage*Atomics features, in the slink:VkDeviceCreateInfo valid
+    usage statements and the <<features-requirements, Feature Requirements>>
+    section (internal merge request 4561).
+  * Add `specialuse="glemulation,d3demulation"` attribute to XML for
+    `<<VK_EXT_custom_border_color>>` (internal merge request 4564).
+  * Make array count and pointer-to-array parameter / member descriptions
+    more consistent (internal merge request 4566).
+  * Add third-level section headings to the <<memory-device, Device Memory>>
+    section for clarity (internal merge request 4567).
+  * Use the terminology "`drawing/dispatching command`" consistently, add it
+    to the style guide, and remove occasional use of "`record`" or "`perform`"
+    in refpage summaries of ftext:vkCmd* (internal merge request 4569).
+  * Use Asciidoctor attributes to genericize more instances of header file
+    names, to enable future variant APIs (internal merge request 4581).
+  * Fix SVG for some images that render incorrectly in Chrome on MacOS
+    (internal merge request 4583).
+  * Move some valid usage statements for
+    `<<VK_QCOM_render_pass_shader_resolve>>` into
+    slink:VkGraphicsPipelineCreateInfo, slink:VkRenderPassCreateInfo2, and
+    the <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> section (internal merge request 4584).
+
+-----------------------------------------------------
+
+Change log for May 10, 2021 Vulkan 1.2.178 spec update:
+
+  * Update release number to 178 for this update.
+
+GitHub Issues:
+
+  * Add `optional` attribute to pname:pFragmentShadingRateAttachment member
+    of slink:VkFragmentShadingRateAttachmentInfoKHR, to match specification
+    text (public issue 1482).
+  * Lots of minor markup and phrasing fixes (public issue 1482).
+  * Additional fixes specific to ray tracing extensions, including a few
+    duplicate valid usage statements, incorrect descriptions of structure
+    members, and incorrect SPIR-V opcodes (public issue 1483).
+  * Fix formatting around "`Special Use`" sections in generated refpages
+    (public issue 1518).
+
+Internal Issues:
+
+  * Language cleanup including removing contractions, and some wording in
+    more egregious violation of the style guide.
+  * Make parameter handling text in the
+    <<deferred-host-operations-requesting, Requesting Deferral>> section
+    consistent with the <<fundamentals>> chapter (internal issue 2018).
+  * Relax slink:VkCopyDescriptorSet valid usage statements to remove some
+    constraints on copying descriptors from sets residing in host memory
+    other kinds of sets (internal issue 2610).
+  * Clarify the definition of "`intersection`" in the
+    <<ray-intersection-candidate-determination, Ray Intersection Candidate
+    Determination>> section (internal issue 2623).
+  * Allow pname:stride to equal buffer size in
+    slink:VkStridedDeviceAddressRegionKHR (internal issue 2631).
+  * Fix the ray tracing shader interface table in the
+    <<interfaces-raypipeline, Ray Tracing Pipeline Interface>> section
+    (internal issue 2640).
+  * Try to use consistently-phrased descriptions of etext:*FlagBits* members
+    and parameters everywhere (internal issue 2656).
+  * Replace "`optional pointer`" terminology with "`NULL or a pointer`" (and
+    similar uses), and update the style guide accordingly (internal issue
+    2662).
+  * Modify wording of some pipeline creation valid usage statements to tidy
+    up cases where certain state isn't required (internal merge request
+    4496).
+  * Clarify consistent <<descriptorsets-updates-consecutive, consecutive
+    binding updates>> (internal merge request 4500).
+  * Clarify that code:scalarBlockLayout is supported on the
+    code:ShaderRecordBufferKHR storage class in the
+    <<interfaces-resources-standard-layout, Standard Buffer Layout>> section
+    (internal merge request 4525).
+  * Hide boilerplate Features and Properties text where it incorrectly
+    appeared outside the descriptions of feature and property structures,
+    respectively (internal merge request 4541).
+  * Add missing section headers to the
+    `<<VK_KHR_zero_initialize_workgroup_memory>> appendix (internal merge
+    request 4553).
+  * Add missing `R64ui` and `R64i` entries to the SPIR-V
+    <<spirvenv-format-type-matching tables, image format matching tables>>
+    for `<<VK_EXT_shader_image_atomic_int64>>` (internal
+    Tracker/vk-gl-cts#2885).
+
+New Extensions:
+
+  * `<<VK_NVX_binary_import>>` (only appendix and XML - no spec language
+    yet).
+
+-----------------------------------------------------
+
+Change log for April 26, 2021 Vulkan 1.2.177 spec update:
+
+  * Update release number to 177 for this update.
+
+GitHub Issues:
+
+  * Add valid usage statement to flink:vkDestroyImage to prevent destruction
+    of presentable images acquired from flink:vkGetSwapchainImagesKHR
+    (public Vulkan-ValidationLayers issue 2718).
+
+Internal Issues:
+
+  * Add proposal template for new feature development (internal issue 2529).
+  * Remove valid usage statement 03361 from flink:vkCmdBindVertexBuffers2EXT
+    (internal issue 2600).
+  * Finish fixing refpage formatting issues for the new video extensions
+    (internal issue 2611).
+  * Invert direction of ray space matrix to correct the
+    <<ray-intersection-candidate-determination, ray/triangle sidedness
+    test>> (internal merge request 4480).
+  * Fix capitalization of etext:*_EXTENSION_NAME and etext:*_SPEC_VERSION
+    tokens for `<<VK_QCOM_render_pass_store_ops>>` (internal merge request
+    4490).
+  * Don't generate etext:*_MAX_ENUM tokens for 64-bit flag types. Note that
+    these tokens are *explicitly* not part of the Vulkan API and are not
+    included in the Specification, only in generated headers. They are added
+    to enumerated types to ensure padding to 32 bits, but are completely
+    pointless for the 64-bit flag types, which are defined as integer
+    constants rather than enumerants (internal merge request 4493).
+  * Remove empty VK_ENABLE_BETA_EXTENSION guards from headers when disabling
+    extensions (internal merge request 4498).
+  * Reproduce valid usage statement constraining pname:query from
+    flink:vkCmdBeginQuery to
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR (internal merge
+    request 4520).
+
+New Extensions:
+
+  * `<<VK_EXT_provoking_vertex>>`
+
+-----------------------------------------------------
+
+Change log for April 19, 2021 Vulkan 1.2.176 spec update:
+
+  * Update release number to 176 for this update.
+
+GitHub Issues:
+
+  * Fix many typos (based on public issues 1483 & 1484).
+  * Fix an error in the definition of dname:VK_NULL_HANDLE which caused a
+    compilation error with one version of MSVC (public issue 1502).
+  * Remove duplicate requirement for elink:VkStructureType from
+    dname:VK_VERSION_1_0 block of `vk.xml` (public merge request 1504).
+
+Internal Issues:
+
+  * Modify extension metadoc generator to include Contact information in
+    extension reference pages (internal issue 2611).
+  * Fix XML consistency checker script to add exceptions to naming patterns
+    for new extensions (internal merge request 4491).
+  * Clean up latest revision numbers in some video extension appendices to
+    be integers, for compatibility with the consistency checker script
+    (internal merge request 4492).
+  * Mark slink:VkIndirectCommandsLayoutCreateInfoNV pname:flags member as
+    `optional` in `vk.xml` (internal merge request 4501).
+
+New Extensions:
+
+  * `<<VK_EXT_extended_dynamic_state2>>`
+
+-----------------------------------------------------
+
+Change log for April 13, 2021 Vulkan 1.2.175 spec update:
+
+  * Update release number to 175 for this update.
+
+GitHub Issues:
+
+  * Specify that fragment shader invocations in the same quad scope are also
+    in the same primitive scope (public issue 1465).
+  * Fix an incorrect reference to ename:VK_SHARING_MODE_CONCURRENT to the
+    correct ename:VK_SHARING_MODE_EXCLUSIVE in the queue transfer wording
+    for slink:VkBufferMemoryBarrier2KHR (public issue 1479).
+  * Fix description of <<vertexpostproc-clipping, Primitive Clipping>>
+    (public issues 1480 and 1481).
+
+Internal Issues:
+
+  * Use consistent language in describing <<features, feature>> and
+    <<limits, property (limit)>> queries. In particular, a few structures
+    were described as being usable to query feature support, but not to set
+    it. This was incorrect. All feature structures which can appear in the
+    pname:pNext chain of slink:VkPhysicalDeviceFeatures2 can be used to both
+    query and set (internal issue 2310).
+  * Add `limittype` attributes to the XML schema and to `vk.xml` for
+    structure members which are part of physical device property queries, to
+    annotate how the resulting properties are interpreted and replace some
+    manual interpretation of these properties (internal issue 2427).
+  * Improve slink:VkAttachmentDescription2 wording around the use of
+    slink:VkAttachmentDescriptionStencilLayout for specifying the stencil
+    aspect layout (internal issue 2496).
+  * Split the <<extendingvulkan-coreversions-versionnumbers, major version
+    field>> of a packed pname:apiVersion value, introducing a new `variant`
+    field. This field allows identification of APIs based on Vulkan, but not
+    fully compatible with Vulkan applications. Vulkan is variant 0, making
+    the change backwards compatible with the previous definition of
+    pname:apiVersion. This change was introduced to enable variants of the
+    Vulkan API that Khronos may release in the future, in particular the
+    in-development Vulkan SC API. It is purely a future-proofing measure and
+    no near-term further use is planned. To support this split, a set of new
+    macros is introduced: dname:VK_API_VERSION_VARIANT,
+    dname:VK_API_VERSION_MAJOR, dname:VK_API_VERSION_MINOR, and
+    dname:VK_API_VERSION_PATCH (internal issue 2531).
+  * Clarify that the slink:VkRectLayerKHR members of a
+    slink:VkPresentRegionKHR structure must not be transformed to align with
+    the swapchain's pname:pTransform. The presentation engine must do this
+    transform (internal issue 2571).
+  * Fix minor issues with exposed Asciidoctor markup in spec outputs
+    (internal issue 2576).
+  * Tighten up wording around pool entries of mutable descriptor types. for
+    slink:VkDescriptorPoolCreateInfo (internal issue 2578).
+  * Expand on wording of code:FPRoundingMode valid usage statement in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal merge request 4298).
+  * Document interaction with `<<VK_KHR_fragment_shading_rate>>` for
+    `<<VK_QCOM_render_pass_transform>>` (internal merge request 4221).
+  * Require compile time constants be explicitly tagged as unsigned or float
+    in `vk.xml`. Modify the generator scripts and schema documentation to
+    require `type` attributes for such constants. This allows generating
+    headers compliant with MISRA section 10.4 requirements, where needed
+    (internal merge request 4451).
+  * Minor editorial fixes (internal merge request 4454).
+  * Disallow code:*Offset* decorations on storage images
+    in the <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> section (internal merge request 4465).
+  * Improve the code: macro used in spec markup to allow imbedded wildcards
+    separating words and a trailing wildcard (internal merge request 4466).
+  * Modify `vk.xml` `requires` attributes to reorder definitions of
+    dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dname:VK_NULL_HANDLE. This
+    prevents a corner case where the app overriding the first macro
+    explicitly would prevent definition of dname:VK_NULL_HANDLE (internal
+    merge request 4476).
+
+New Extensions:
+
+  * `<<VK_EXT_color_write_enable>>`
+  * `<<VK_EXT_vertex_input_dynamic_state>>`
+  * `<<VK_EXT_ycbcr_2plane_444_format>>`
+  * `<<VK_NV_inherited_viewport_scissor>>`
+  * Vulkan video core & codecs provisional extension package, including
+  ** `<<VK_KHR_video_queue>>`
+  ** `<<VK_KHR_video_decode_queue>>`
+  ** `<<VK_KHR_video_encode_queue>>`
+  ** `<<VK_EXT_video_decode_h264>>`
+  ** `<<VK_EXT_video_decode_h265>>`
+  ** `<<VK_EXT_video_encode_h264>>`
+
+-----------------------------------------------------
+
+Change log for March 29, 2021 Vulkan 1.2.174 spec update:
+
+  * Update release number to 174 for this update.
+
+GitHub Issues:
+
+  * Add a common header macro dname:VK_USE_64_BIT_PTR_DEFINES to specify at
+    compile time whether non-dispatchable handles are declared using a
+    64-bit pointer type, or a 64-bit unsigned integer type. NOTE: it is
+    possible that the complex platform-dependent C preprocessor block will
+    move from vk.xml into the static (non-generated) vk_platform.h header in
+    the near future (partially addresses public issue 1431, in addition to
+    internal needs).
+  * Clarify code:PatchVertices documentation for tessellation shaders
+    (public pull request 1475).
+
+Internal Issues:
+
+  * Add valid usage statements restricting bitfield operations to 32-bit
+    types in the <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> section (internal issue 2561).
+  * Update registry documentation to require providing the `type` attribute
+    of `enum` tags when they are specifying compile time constants, and
+    change the accepted values of the attribute to a small set of C scalar
+    type names, instead of schema-specific names. The XML schema itself
+    would ideally be updated to match, but we don't know how to do that yet
+    (internal issue 2564). NOTE: it is possible this will affect downstream
+    consumers of `vk.xml`, although we consider this unlikely.
+  * Document in the style guide that bits reserved in corresponding 32- and
+    64-bit bitmasks should be reserved in both types (internal merge issue
+    2565).
+  * Add output generator options to generate MISRA-friendly headers, and
+    check generator scripts to avoid generating etext:RESERVED 64-bit
+    bitflag names specified by `disabled` extensions in `vk.xml` (internal
+    merge request 4239, internal issue 2572).
+  * Clarify that compressed copies need to round up division in the
+    computation `rowLength` and `imageHeight` in the sample code for the
+    <<copies-buffers-images-addressing, Buffer and Image Addressing>>
+    section (internal merge request 4439).
+
+-----------------------------------------------------
+
+Change log for March 21, 2021 Vulkan 1.2.173 spec update:
+
+  * Update release number to 173 for this update.
+
+GitHub Issues:
+
+  * Fix valid usage statement for flink:vkCmdBeginQueryIndexedEXT to allow
+    multiple active queries of the same type, as long as their index values
+    are different (public issue 1357).
+  * Fix tagging for slink:VkPhysicalDeviceVulkan11Features in `vk.xml`
+    (public issue 1437).
+  * Update the <<WSI Swapchain>> chapter's use of "`release`" and
+    "`present`" terminology (public pull request 1470).
+  * Migrate from Azure Pipelines to GitHub Actions for CI, and use updated
+    Khronos Docker image to build (public pull request 1473).
+
+Internal Issues:
+
+  * Document requirements for extension <<extensions-feature-structures,
+    Feature Structures>> (internal issue 2503).
+  * Add missing valid usage statements for slink:VkAttachmentReference2 and
+    separate depth/stencil layouts (internal issue 2509).
+  * Clarify interactions between `<<VK_EXT_buffer_device_address>>` and
+    Vulkan 1.2 in slink:VkDeviceCreateInfo valid usage (internal issue
+    2530).
+  * Allow variation in number of acceleration structure handles following a
+    top-level acceleration structures for
+    flink:vkCmdCopyAccelerationStructureToMemoryKHR (internal issue 2538).
+  * Specify implementation requirement for device timestamps in the
+    description of elink:VkTimeDomainEXT (internal issue 2551).
+  * Update valid usage ID assignment and extraction scripts to handle IDs
+    containing function pointer names (internal issue 2557).
+  * Move some runtime restrictions to
+    <<spirvenv-module-validation-standalone Standalone SPIR-V>> valid usage
+    statements (internal merge request 4286).
+  * Use new version of the HTML asciidoctor-chunker, which runs much faster,
+    and a new Docker image which omits the old implementation of the chunker
+    (internal merge request 4391).
+  * Fix <<devsandqueues-devices, logical device creation language>> for
+    Vulkan 1.1 (internal merge request 4405).
+  * Modify scripts to enable platform extensions to be filtered by the
+    `"supported"` attribute in `vk.xml` (internal merge request 4411).
+  * Add common valid usage statement for draw/dispatch commands on format
+    support for mip filters (internal merge request 4413).
+  * Fix valid usage statement extractor (vu-to-json) to add padding after
+    inserted list items, so they don't absorb other markup that might come
+    after in the document (internal merge request 4423).
+  * Disallow shadow lookups on 3D images in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section. This is not supported on all hardware, and should not have been
+    allowed (internal merge request 4424).
+
+New Extensions:
+
+  * `<<VK_FUCHSIA_external_memory>>`
+  * `<<VK_FUCHSIA_external_semaphore>>`
+
+-----------------------------------------------------
+
+Change log for March 8, 2021 Vulkan 1.2.172 spec update:
+
+  * Update release number to 172 for this update.
+
+Internal Issues:
+
+  * Remove Asciidoctor conditional markup for extensions from
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V valid usage
+    statements>>, and add a note to this effect for future additions
+    (internal issue 2512).
+  * Update the descriptions (and related validation rules) of
+    code:uniformAndStorageBuffer8BitAccess and
+    code:uniformAndStorageBuffer16BitAccess to only refer to the
+    code:Uniform storage class; and update the 16-bit storage feature
+    validation rules to refer to 16-bit floating-point, similarly to the
+    feature descriptions. These changes are in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    <<features-requirements, Feature Requirements>> sections (internal issue
+    2535).
+  * Ban recursion in tlink:PFN_vkDebugUtilsMessengerCallbackEXT callbacks,
+    for consistency of `<<VK_EXT_debug_utils_callbacks>>` with
+    `<<VK_EXT_device_memory_report>>` and the rules for
+    slink:VkAllocationCallbacks (internal issue 2537).
+  * Remove dependency on `<<VK_KHR_create_renderpass2>>` from `vk.xml` for
+    `<<VK_KHR_synchronization2>>` (internal issue 2539).
+  * Add the transform feedback pipeline stage as valid for
+    ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT access (internal
+    merge request 4355).
+  * Fix typo in `<<VK_EXT_debug_utils>>` examples (internal merge request
+    4395).
+  * Fix typo to refer to "`buffer view`" rather than "`image view`" in the
+    valid usage statements for code:OpImageWrite (internal merge request
+    4398).
+  * Fix typo in the mandatory features section related to
+    `<<VK_KHR_ray_tracing_pipeline>>` (internal merge request 4406).
+
+-----------------------------------------------------
+
+Change log for March 1, 2021 Vulkan 1.2.171 spec update:
+
+  * Update release number to 171 for this update.
+
+GitHub Issues:
+
+  * Use `strictly increasing` rather than `monotonically increasing` in the
+    definition of <<glossary, timeline semaphores>> (public issue 1424).
+  * Add missing raytracing pipeline creation information from
+    `<<VK_KHR_pipeline_executable_properties>>` to
+    flink:vkGetPipelineExecutableStatisticsKHR and
+    flink:vkGetPipelineExecutableInternalRepresentationsKHR valid usage
+    statements (public issue 1433).
+  * Add missing `SPV_EXT_shader_atomic_float` to `vk.xml` (public issue
+    1447).
+  * Fix ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL to
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT in synchronization
+    valid usage statement 03938 (public issue 1458).
+  * Correct the <<interfaces-resources-setandbinding, DescriptorSet and
+    Binding Assignment>> "`noteworthy example`" to refer to code:OpTypeImage
+    code:Samplerd=1, not code:OpTypeSampler code:Sampled=1 (public pull
+    request 1459).
+  * Clarify that the value of slink:VkViewport::pname:minDepth is not
+    restricted relative to pname:maxDepth (Vulkan-Headers public issue 180).
+  * Add valid usage statement to <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V Validation>> specifying that push constant array
+    members must only be accessed with dynamically uniform indices
+    (SPIRV-Tools public issue 2909)
+  * Add valid usage statement to <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V Validation>> specifying when the code:Flat decoration
+    must be used (SPIRV-Tools public issue 3154)
+
+Internal Issues:
+
+  * Specify the maximum allowed pname:depthBias unit for
+    flink:vkCmdSetDepthBias (internal issue 2455).
+  * Add `"protect"` attribute to provisional extension enumerants, and emit
+    them with that symbol for runtime conditional inclusion from
+    `vulkan_core.h`. Update description of ename:VK_ENABLE_BETA_EXTENSIONS
+    to match (internal issue 2481).
+  * Add valid usage statement to slink:VkImageViewCreateInfo to ban 3D image
+    views when the ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT is
+    set (internal issue 2501).
+  * Add explicit language for the zero hit group intersection shader to the
+    <<ray-intersection-confirmation, Ray Intersection Confirmation>> section
+    (internal issue 2505).
+  * Add a new <<raytraversal-ray-intersection-candidate-diagram, basic ray
+    diagram>> (internal issue 2518).
+  * Clarify that acceptable fragment shading rates are less than *or equal*
+    to, not just less than, in the description of the
+    <<primsrast-fragment-shading-rate-combining final combined shading
+    rate>> (internal issue 2524)
+  * Refer to correct barycentric coordinates for
+    <<ray-intersection-candidate-determination, triangle intersection
+    coordinates>> (internal issue 2525).
+  * Add valid usage statements to drawing commands to match
+    pname:rasterizationSamples in the pipeline state and the current
+    attachments (internal merge request 4332).
+  * Make use of ename:VK_WHOLE_SIZE consistent with sized flush in valid
+    usage statement for slink:VkMappedMemoryRange (internal merge request
+    4373).
+  * Fix Asciidoctor ifdef markup around
+    ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT (internal merge request 4383).
+  * Move improperly placed valid usage statements from
+    slink:VkImageViewCreateInfo to slink:VkImageCreateInfo (internal merge
+    request 4390).
+  * Add valid usage statements to <<spirvenv-module-validation-standalone,
+    Standalone SPIR-V Validation>> for pname:minTexelGatherOffset and
+    pname:minTexelGatherOffset.
+  * Make <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> valid usage statement 04681 unconditional, rather than
+    having two versions when a relevant Vulkan extension is or is not
+    enabled, since this is *standalone* validation.
+
+New Extensions
+
+  * `<<VK_QNX_screen_surface>>` (public pull request 1449).
+
+-----------------------------------------------------
+
+Change log for February 15, 2021 Vulkan 1.2.170 spec update:
+
+  * Update release number to 170 for this update.
+
+Internal Issues:
+
+  * Add missing language for zero hit groups to the <<shader-binding-table,
+    Shader Binding Table>> section and related valid usage statements
+    (internal issue 2505).
+
+New Extensions:
+
+  * `<<VK_KHR_synchronization2>>`
+
+-----------------------------------------------------
+
+Change log for February 2, 2021 Vulkan 1.2.169 spec update:
+
+  * Update release number to 169 for this update.
+
+GitHub Issues:
+
+  * Fix typos in language in the <<vertexpostproc-renderpass-transform,
+    Render Pass Transform>> section (public issue 1406).
+  * Fix case of etext:EXTENSION_NAME and etext:SPEC_VERSION enums in
+    `vk.xml` for the `<<VK_QCOM_rotated_copy>>` extension (public issue
+    1427).
+  * Fix equations in the <<ray-intersection-candidate-determination, Ray
+    Intersection Candidate Determination>> section (public issue 1427).
+  * Modify examples in the `<<VK_EXT_debug_utils>>` appendix to use
+    flink:vkGetInstanceProcAddr (public issue 1432).
+  * Various typo fixes (public pull request 1434).
+
+Internal Issues:
+
+  * Add missing query types to the introduction of the <<queries>> chapter
+    (internal issue 2488).
+  * Tag use of union types in `vk.xml` as `noautovalidity`, since we don't
+    generate meaningful valid usage statements or validation layer code at
+    present. This removes a few nonsensical, and unimplemented valid usage
+    statements of form 'ptext:param must: be a valid stext:VkUnionType union
+    (internal issue 2490).
+  * Flatten inline lists in valid usage statements in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section so the VU extraction script can process them properly (internal
+    issue 2502).
+  * Move some common copy buffer / copy image valid usage statements to
+    `copy_bufferimage_to_imagebuffer_common.txt` so they can be shared
+    (internal merge request 4344).
+  * Update copyright dates to 2021 (internal merge request 4345),
+  * Fix typos in Asciidoctor conditional markup in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal issue 4349).
+  * Fix typos in SPIR-V capability names
+    code:WorkgroupMemoryExplicitLayout8BitAccessKHR and
+    code:WorkgroupMemoryExplicitLayout16BitAccessKHR (internal merge request
+    4359).
+  * Fix typo in description of
+    slink:VkCoarseSampleLocationNV::pname:pSampleLocations (internal merge
+    request 4365).
+
+
+-----------------------------------------------------
+
+Change log for January 25, 2021 Vulkan 1.2.168 spec update:
+
+  * Update release number to 168 for this update.
+
+Internal Issues:
+
+  * Change slink:VkAccelerationStructureNV resource classification to
+    non-linear, and slink:VkAccelerationStructureKHR is neither linear nor
+    non-linear. This affects the memory classification for purposes of
+    <<resources-bufferimagegranularity,bufferImageGranularity>> (internal
+    issue 2289).
+  * Specify which storage classes are affected by code:scalarBlockLayout in
+    the <<interfaces-resources-standard-layout, Standard Buffer Layout>>
+    section (internal merge request 4280).
+  * Flatten valid usage statements in the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section so they are correctly processed by the VU extractor script
+    (internal merge request 4285).
+
+New Extensions:
+
+  * `<<VK_KHR_workgroup_memory_explicit_layout>>`
+  * `<<VK_KHR_zero_initialize_workgroup_memory>>`
+
+-----------------------------------------------------
+
+Change log for January 19, 2021 Vulkan 1.2.167 spec update:
+
+  * Update release number to 167 for this update.
+
+GitHub Issues:
+
+  * Clarify valid usage statements for slink:VkGraphicsPipelineCreateInfo
+    interaction with potential format features (public issue 1392).
+  * Use default PDF theme with a local fallback font, to provide
+    floor/ceiling symbols (public issue 1400).
+  * Fix valid usage statements to clarify that
+    flink:vkCmdWriteAccelerationStructuresPropertiesNV only accepts
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV (public
+    Vulkan-ValidationLayers issue 2448).
+  * Add missing `SPV_KHR_multiview` SPIR-V extension to `vk.xml` (public
+    Vulkan-ValidationLayers issue 2456).
+
+Internal Issues:
+
+  * Move Acceleration Structure chapter before Ray Traversal and Ray Tracing
+    chapters and reorganize Asciidoctor source markup, including inlining
+    ray tracing sub-chapters (internal issue 2249).
+  * Clarify the definition of the `optional='true'` XML attribute to allow
+    its use with scalar types, and use it consistently in the specification
+    and XML; this removes a few uses of the attribute and simplifies some
+    valid usage statements (internal issue 2435).
+  * Clarify that it is not valid to create an image view using a format that
+    requires YCbCr conversion without passing a
+    slink:VkSamplerYcbcrConversion in valid usage for
+    slink:VkImageViewCreateInfo (internal issue 2458).
+  * Clarify that pipeline flags do not cause the corresponding flags to
+    appear in code:IncomingRayFlagsKHR variables (internal issue 2470).
+  * Require that pname:supportedAlpha is never zero in text and valid usage
+    statements for slink:VkDisplayPlaneCapabilitiesKHR and
+    slink:VkDisplaySurfaceCreateInfoKHR (internal issue 2471).
+  * Clarify that Dref values are supposed to be clamped for fixed-point
+    accesses in the <<textures-depth-compare-operation, Depth Compare
+    Operation>> section (internal issue 2474).
+  * Fix typo for a destination stage in an issue in the
+    `<<VK_EXT_transform_feedback>>` extension appendix (internal issue
+    2477).
+  * Restrict code:OpImageQueryLod, code:OpImageQuerySizeLod, and
+    code:OpImageQueryLevels to require a sampler (not storage image) in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal issue 2478).
+  * Allow
+    flink:vkGetAccelerationStructureBuildSizesKHR::pname:pMaxPrimitiveCounts
+    to be zero by setting the `optional` attribute in the XML (internal
+    issue 2480).
+  * Update description of
+    slink:VkDeviceMemoryReportCallbackDataEXT::pname:objectType for
+    consistency with description of other parameters (internal issue 2485).
+  * Add a valid usage statement to slink:VkRayTracingPipelineCreateInfoKHR
+    requiring that all linked pipelines have the same set of flags specified
+    from the etext:VK_PIPELINE_CREATE_RAY_TRACING_* bits (internal issue
+    2489).
+  * Add valid usage statements to flink:vkCmdBeginQuery /
+    flink:vkCmdBeginQueryIndexedEXT to disallow use with pools created with
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR /
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR types
+    (internal issue 2493).
+  * Fix normative language for valid usage statements in the <<spirvenv,
+    Vulkan Environment for SPIR-V>> appendix (internal merge request 4265).
+  * Remove a few cases where `_KHR` suffixes were left on promoted
+    extensions in valid usage statements (internal merge request 4293)
+  * Update and futureproof a previously hardwired reference to Vulkan 1.1 in
+    the <<introduction-conventions, Document Conventions>> section (internal
+    merge request 4295).
+  * Add code:PhysicalStorageBuffer as a valid atomic storage class in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal merge request 4296).
+  * Clean up phrasing of valid usage statements in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal merge request 4297).
+  * Add shared valid usage statement for buffer copy commands requiring
+    pname:bufferRowLength to fit in a signed 32-bit integer (internal merge
+    request 4302).
+  * Add dname:VK_NO_STDDEF_H to allow apps to prevent including
+    `<stddef.h>`, and document it in the <<boilerplate, API Boilerplate>>
+    appendix (internal merge request 4312).
+  * Fix typo `SkipTrianglesKHR` -> `SkipAABBsKHR` in the
+    <<ray-traversal-culling-primitive, Ray Primitive Culling>> section
+    (internal merge request 4315).
+
+-----------------------------------------------------
+
+Change log for January 4, 2021 Vulkan 1.2.166 spec update:
+
+  * Update release number to 166 for this update.
+
+GitHub Issues:
+
+  * Add an Issue to the appendix for `<<VK_EXT_debug_report>>` discussing
+    how to compare handles returned by the debug report callback to
+    application handles (public issue 368).
+  * Specify the purpose of ename:VK_LOD_CLAMP_NONE in the description of
+    slink:VkSamplerCreateInfo::pname:maxLod (public issue 663).
+  * Clarify in the <<extendingvulkan-extensions-extensiondependencies,
+    Extension Dependencies>> section that extensions may depend on both
+    other extensions, and specific core API versions. Together with previous
+    changes to this section, this should close out the original issue
+    (public issue 865).
+
+Internal Issues:
+
+  * Add descriptions of image queries to the <<textures, Image Operations
+    Overview>> and <<textures-queries, Image Query Instructions>> sections
+    (internal issues 2416 and 2423).
+  * Allow axis swapping to be carried through clamping in the
+    <<primsrast-fragment-shading-rate-combining, Combining the Fragment
+    Shading Rates>> section (internal issue 2420).
+  * Move even-size requirements for planar formats to valid usage statements
+    for slink:VkImageCreateInfo and slink:VkImageViewCreateInfo, and tweak
+    descriptions of <<formats-definition, the corresponding formats>>
+    accordingly (internal issue 2434).
+  * Remove Asciidoctor conditional macros from markup for
+    slink:VkSamplerCreateInfo valid usage statement 01079 (internal issue
+    2440).
+  * Clarify behavior of the <<features-alphaToOne, pname:alphaToOne>>
+    feature by linking the enable to the corresponding <<fragops-covg,
+    Multisample Coverage>> fragment operation language, and specifying in
+    the introduction to the <<fragops, Fragment Operations>> chapter that
+    "`replacing`" a fragment shader output occurs whether or not the shader
+    actually wrote that output (internal issue 2448).
+  * Modify XML for
+    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:viewportCount
+    to allow pname:viewportCount == 0 (internal issue 2449).
+  * Remove "`built as`" requirement from valid usage statement 03579 for
+    slink:VkWriteDescriptorSetAccelerationStructureKHR (internal issue
+    2466).
+  * Remove incorrect valid usage statement 03655 for
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR (internal issue
+    2467).
+  * Add location limits for mesh shaders to the
+    <<interfaces-iointerfaces-limits, Shader Input and Output Locations>>
+    table (internal merge request 3428).
+
+-----------------------------------------------------
+
+Change log for December 14, 2020 Vulkan 1.2.165 spec update:
+
+  * Update release number to 165 for this update.
+
+GitHub Issues:
+
+  * Fix interaction between imageless framebuffers and
+    slink:VkImageViewUsageCreateInfo for slink:VkRenderPassBeginInfo,
+    elink:VkImageUsageFlagBits, and in the
+    <<resources-image-inherited-usage>> section (public issue 1391).
+  * Fix `vk.xml` `optional` / `noautovalidity` attributes and corresponding
+    explicit valid usage statements for
+    slink:VkBuildAccelerationStructureModeKHR (public issue 1405).
+  * Remove redundant / incomplete handle comments from `vk.xml` for
+    elink:VkObjectType enumerants (public merge request 1412).
+
+Internal Issues:
+
+  * Create valid usage statements from constraints in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section (internal issue 2394).
+  * Fix valid usage statement 01256 for slink:VkDisplaySurfaceCreateInfoKHR
+    (internal issue 2404).
+  * Expand and clarify the event race condition warning for
+    flink:vkCmdWaitEvents to include two additional scenarios in which the
+    effect and/or state of an event becomes undefined without additional
+    synchronization operations (internal issue 2411).
+  * Update valid usage statement for flink:vkSetLocalDimmingAMD (internal
+    issue 2446).
+  * Recast slink:VkStridedDeviceAddressRegionKHR valid usage statements in
+    terms of size being non-zero, instead of pname:deviceAddress (internal
+    issue 2450).
+  * Add missing ename:VK_SHARING_MODE_CONCURRENT valid usage statement for
+    flink:vkQueueSubmit (internal merge request 4244).
+  * Add limits related to local size to the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal merge request 4255).
+  * Fix typo in description of
+    slink:VkDescriptorUpdateTemplateEntry::pname:dstArrayElement (internal
+    merge request 4260).
+  * Remove repeated "`all`" from slink:VkGraphicsPipelineCreateInfo valid
+    usage statements (internal merge request 4266).
+  * Fix internal xrefs to the SPIR-V capabilities tables, which broke as a
+    side effect of generating the table instead of handcoding it (internal
+    merge request 4270).
+  * Fix normative language for code:WorkgroupSize (internal merge request
+    4272).
+  * Restore `len` attribute to `vk.xml` after its recent accidental removal
+    from slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts (internal
+    merge request 4275).
+  * Remove trailing periods from SPIR-V valid usage statements (internal
+    merge request 4284).
+  * Base PDF theme on builtin fallback theme, simplifying it and adding
+    support for some math characters not found in the default theme
+    (internal merge request 4287).
+
+-----------------------------------------------------
+
+Change log for December 7, 2020 Vulkan 1.2.164 spec update:
+
+  * Update release number to 164 for this update.
+
+GitHub Issues:
+
+  * Reserve vendor ID for PoCL (public pull request 1411).
+
+Internal Issues:
+
+  * Add valid usage statements to ray tracing commands requiring they be
+    given a ray tracing pipeline, and removing support for
+    ename:ACCELERATION_STRUCTURE_TYPE_GENERIC in
+    flink:vkCmdBuildAccelerationStructureNV (internal issue 2271).
+  * Add valid usage statements disallowing the use of protected command
+    buffers with Ray Tracing Pipelines and Ray Query instructions (internal
+    issue 2409).
+  * Move the un-numbered glossary / abbreviations / prefixes pseudo-chapters
+    into a single appendix, so the table of contents looks cleaner (internal
+    issue 2437).
+  * Remove redundant valid usage statement from
+    slink:VkCommandBufferAllocateInfo (internal merge request 4229).
+  * Add missing <<features-inlineUniformBlock>> valid usage statement to
+    slink:VkDescriptorSetLayoutBinding (internal merge request 4246).
+  * Tweak example of Docker image invocation in `BUILD.adoc` (internal merge
+    request 4249).
+  * Capitalize code:LaunchIdKHR the same as in SPIR-V. code:LaunchSizeKHR
+    and code:LaunchIdKHR are accessible in the code:CallableKHR shader stage
+    (internal merge request 4252).
+  * Remove unreachable (redundant) valid usage statements from
+    flink:vkCmdBeginRenderPass and flink:vkCmdBeginRenderPass2 (internal
+    merge request 4254).
+  * Add missing `objtypeenum` attribute to `vk.xml` for slink:VkInstance
+    (internal merge request 4263).
+  * Change the chunked HTML target to use a more robust method of inserting
+    additional Javascript and HTML to support the searchbox.
+
+New Extensions:
+
+  * `<<VK_NV_acquire_winrt_display>>`
+  * `<<VK_VALVE_mutable_descriptor_type>>`
+
+-----------------------------------------------------
+
+Change log for November 30, 2020 Vulkan 1.2.163 spec update:
+
+  * Update release number to 163 for this update.
+
+GitHub Issues:
+
+  * Add XML mapping between VK_OBJECT_TYPE_* names and object type names
+    (public issue 1379).
+  * Remove *_READ_BIT from .srcAccessMask in code samples (public issue
+    1389).
+  * Fix example code for slink:VkPushConstantRange to take
+    elink:VkShaderStageFlags, not elink:VkPipelineStageFlags (public pull
+    request 1393).
+  * Add missing :refpage: attribute to slink:VkBlitImageInfo2KHR (public
+    issue 1407).
+  * Remove extraneous newline from texel block size table (public issue
+    1409).
+
+Internal Issues:
+
+  * Update style guide to require `optional="true"` be set on pname:pNext
+    structure members (internal issue 2428).
+  * Sort conditionals in ifdef:: output of spirvcapgenerator for stability
+    (internal issue 2430).
+  * Fix slink:VkGraphicsPipelineShaderGroupsCreateInfoNV VU 02886
+    (internal merge request 4225).
+
+
+-----------------------------------------------------
+
+Change log for November 23, 2020 Vulkan 1.2.162 spec update:
+
+  * Update release number to 162 for this update.
+
+GitHub Issues:
+
+  * Mark pname:pNext pointers as `optional="true"` in `vk.xml` (public pull
+    request 1396).
+  * Make a formerly implicit slink:VkSubpassDescriptionDepthStencilResolve
+    valid usage statement explicit (public Vulkan-ValidationLayers issue
+    2311).
+
+Internal Issues:
+
+  * Clarify lifetime of push constants in the flink:vkCmdPushConstants
+    description (internal issue 2168).
+  * Clarify that flink:vkGetDeviceProcAddr is not intended to return
+    physical device-level commands (internal issue 2344).
+  * Tweak CI test for SPEC_VERSION to always succeed when the branch name
+    exists, but the extension is disabled (internal merge request 4219).
+
+New Extensions:
+
+  * Add final (non-provisional) versions of the Vulkan Ray Tracing
+    extensions (internal merge request 4143):
+  ** `<<VK_KHR_acceleration_structure>>`
+  ** `<<VK_KHR_ray_tracing_pipeline>>`
+  ** `<<VK_KHR_ray_query>>`
+  ** `<<VK_KHR_pipeline_library>>`
+  ** `<<VK_KHR_deferred_host_operations>>`
+
+-----------------------------------------------------
+
+Change log for November 16, 2020 Vulkan 1.2.161 spec update:
+
+  * Update release number to 161 for this update.
+
+GitHub Issues:
+
+  * Add some missing types to the table of handle type <->
+    etext:VK_OBJECT_TYPE_* enums in the debugging chapter (in response to a
+    comment on public issue 1379).
+
+Internal Issues:
+
+  * Move copyright statement into its own "`Preamble`" chapter to simplify
+    preprocessing for chunked HTML target and make PDF / single-page HTML
+    consistent with the chunked output (internal issue 2384).
+  * Clarify that slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes
+    and slink:VkExternalMemoryImageCreateInfo::pname:handleTypes can be
+    zero, and fix missing `optional` attribute in `vk.xml` for the latter
+    case (internal issue 2388).
+  * Make `specialuse` attributes in source markup expand properly in
+    extension refpages (internal issue 2412).
+  * Remove as yet unused slink:VkSemaphoreCreateFlagBits type from `vk.xml`
+    (internal issue 2413).
+  * Remove unreachable valid usage statements for
+    slink:VkRenderPassMultiviewCreateInfo::pname:pViewMask in the
+    slink:VkRenderPassCreateInfo pname:pNext chain, and for
+    slink:VkRenderPassCreateInfo2::pname:viewMask. These statements cannot
+    ever be violated given that view masks cannot exceed index 31 and
+    pname:maxFramebufferLayers exceeds this value (internal merge request
+    4204).
+  * Only allow forward pointers for physical storage buffers in the
+    <<spirvenv-module-validation>> section (internal merge request 4206).
+  * Fix a variety of minor valid usage statement issues with the
+    `<<VK_KHR_fragment_shading_rate>>` extension (internal merge request
+    4207).
+
+-----------------------------------------------------
+
+Change log for November 9, 2020 Vulkan 1.2.160 spec update:
+
+  * Update release number to 160 for this update.
+
+GitHub Issues:
+
+  * Remove redundant input attachment valid usage statements from
+    slink:VkAttachmentReference2 (public issue 1378).
+
+Internal Issues:
+
+  * Restore "`Preamble`" section containing the copyright statement to the
+    proper place in the chunked specification index (internal issue 2384).
+  * Add missing valid usage statements for
+    flink:vkCmdDrawIndirectByteCountEXT (internal issue 2400).
+  * Move vertex input example from the <<fxvertex>> chapter to the Vulkan
+    Guide (internal merge request 4162).
+  * Clarify update-after-bind limits for dynamic buffers in the
+    <<limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic>> and
+    <<limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic>> sections
+    (internal merge request 4186).
+  * Clarify slink:VkFramebufferCreateInfo to allow read-only use of depth
+    images as attachments and non-attachments (internal merge request 4191).
+  * Remove redundant valid usage statement from slink:VkWriteDescriptorSet
+    (internal merge request 4196).
+  * Remove redundant valid usage statement from flink:vkFreeDescriptorSets
+    (internal merge request 4198).
+  * Fix typo in slink:VkDisplaySurfaceCreateInfoKHR valid usage statement
+    (internal merge request 4199).
+  * Remove redundant pname:firstViewport / pname:firstScissor limit checks
+    in valid usage statements for flink:vkCmdSetViewportWScalingNV,
+    flink:vkCmdSetScissor, flink:vkCmdSetExclusiveScissorNV,
+    flink:vkCmdSetViewportShadingRatePaletteNV, and flink:vkCmdSetViewport
+    (internal merge request 4200).
+
+New Extensions:
+
+  * `<<VK_NV_fragment_shading_rate_enums>>`
+
+-----------------------------------------------------
+
+Change log for November 1, 2020 Vulkan 1.2.159 spec update:
+
+  * Update release number to 159 for this update.
+
+GitHub Issues:
+
+  * Clarify handle uniqueness with private data in the
+    <<fundamentals-objectmodel-overview, Object Model>> section (public
+    issue 1349).
+  * Make ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR
+    an alias of
+    ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR
+    and ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR
+    an alias of
+    ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR,
+    for backwards compatibility while complying with naming conventions
+    (public issue 1367).
+  * Make ename:VK_SURFACE_COUNTER_VBLANK_EXT an alias of
+    ename:VK_SURFACE_COUNTER_VBLANK_BIT_EXT for backwards compatibility
+    while complying with naming conventions (public issue 1368).
+  * Add a note to the <<memory-model-synchronizes-with, Synchronizes-With>>
+    section that fragment shader interlock instructions don't perform
+    implicit availability or visibility operations (public issue 1383).
+
+Internal Issues:
+
+  * Dynamically generate SPIR-V <<spirvenv-capabilities-table,
+    Capabilities>> and <<spirvenv-extensions-table, Extensions>> tables from
+    new tags in `vk.xml`, exposing this information for other projects
+    downstream (internal issue 2156).
+  * Clarify when a <<renderpass-feedbackloop, feedback loop>> creates a data
+    race (internal issue 2296).
+  * Remove un-needed `noautovalidity` attributes on pname:pNext structure
+    members, including a few cases where they were actually suppressing
+    appropriate autogenerated validity statements (internal issue 2335;
+    similar purpose to closed public PR 1339).
+  * Clarify treatment of most-negative signed normalized fixed-point values
+    in the <<fundamentals-fixedfpconv, Conversion from Normalized
+    Fixed-Point to Floating-Point>> section (internal issue 2367).
+  * Clarify that enabling an extension cannot change existing implementation
+    behavior in the introduction to the <<extendingvulkan-extensions,
+    Extensions>> chapter (internal issue 2375).
+  * Add missing valid usage statement to flink:vkCreatePrivateDataSlotEXT
+    (internal issue 2379).
+  * Fix a misplaced Asciidoctor `endif::` for flink:vkCreateSwapchainKHR
+    (internal merge request 4177).
+  * Add missing pname:aspectMask valid usage statement to
+    slink:VkSubpassDescription2, matching
+    slink:VkInputAttachmentAspectReference (internal merge request 4177).
+  * Clarify <<interfaces, SPIR-V rules on decorations>> (internal
+    spirv/SPIR-V issue 444).
+  * Add missing `<<VK_VERSION_1_2>>` to all
+    `<<VK_EXT_separate_stencil_usage>>` conditional markup (internal
+    vulkansc/vulkansc issue 58).
+
+New Extensions:
+
+  * `<<VK_QCOM_rotated_copy_commands>>` (internal merge request 4132).
+
+-----------------------------------------------------
+
+Change log for October 19, 2020 Vulkan 1.2.158 spec update:
+
+  * Update release number to 158 for this update.
+
+Internal Issues:
+
+  * Clarify that  linear filtering can be used with comparison sampling
+    in valid usage statements for dispatched draw commands
+    (internal issue 2365).
+  * Add valid usage statement for flink:vkGetQueryPoolResults requiring
+    pname:stride to be large enough for a single performance query result
+    (internal issue 2380).
+  * Move input attachment imageLayout to valid usage reference section,
+    and refer to the <<attachment-type-imagelayout>> section
+    to reduce complexity of valid usage statement
+    (internal merge request 4117).
+  * Update issues list for `<<VK_QCOM_render_pass_transform>>`
+    (internal merge request 4175).
+  * Add valid usage statement for
+    slink:VkPipelineColorBlendStateCreateInfo::pname:attachmentCount (public
+    Vulkan-ValidationLayers issue 2197).
+
+New Extensions:
+
+  * `<<VK_KHR_fragment_shading_rate>>`
+  * `<<VK_KHR_shader_terminate_invocation>>`
+
+-----------------------------------------------------
+
+Change log for October 12, 2020 Vulkan 1.2.157 spec update:
+
+  * Update release number to 157 for this update.
+
+GitHub Issues:
+
+  * Fix `<<VK_KHR_shader_draw_parameters>>` missing as a feature alias
+    (based on public pull request 1310).
+  * Remove unnecessary sentence about device extensions implemented by
+    layers in the flink:vkCreateDevice description (based on public pull
+    request 1350).
+  * Fix parenthesis in equation in the
+    <<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
+    section (public merge request 1365).
+  * Add missing types to `vk.xml` for `<<VK_EXT_device_memory_report>>`
+    (public issue 1374).
+  * Add slink:VkBufferImageCopy valid usage statement for
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT
+    pname:aspectMask values (public Vulkan-ValidationLayers issue 2113).
+
+Internal Issues:
+
+  * Remove unused etext:VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT
+    token
+    (internal issue 2275).
+  * Clarify the specific stage requirement for synchronization
+    between flink:vkCmdResetEvent and flink:vkCmdWaitEvents
+    (internal merge request 4152).
+
+-----------------------------------------------------
+
+Change log for October 5, 2020 Vulkan 1.2.156 spec update:
+
+  * Update release number to 156 for this update.
+
+GitHub Issues:
+
+  * Define memory import/export using the glossary term _payload_, rather
+    than "`the same underlying memory`", for slink:VkFence,
+    <<synchronization-semaphores-payloads, the semaphore payload section>>,
+    and many places in the <<memory, Memory Allocation>> chapter (public
+    issue 1145).
+
+New Extensions:
+
+  * `<<VK_EXT_device_memory_report>>`
+
+-----------------------------------------------------
+
+Change log for September 28, 2020 Vulkan 1.2.155 spec update:
+
+  * Update release number to 155 for this update.
+
+New Extensions:
+
+  * `<<VK_EXT_shader_image_atomic_int64>>`
+
+-----------------------------------------------------
+
+Change log for September 7, 2020 Vulkan 1.2.153 spec update:
+
+  * Update release number to 153 for this update.
+
+GitHub Issues:
+
+  * Specification default branch for updates and PRs is now `main` instead
+    of `master`. `master` branch still exists, but is frozen at the 1.2.152
+    level. If you are pulling content from this repository, please switch
+    from `master` to `main` branch (internal issue 1351).
+  * Fix slink:VkSubpassDependency2 link from slink:VkRenderPassCreateInfo2
+    (public issue 1358).
+
+Internal Issues:
+
+  * Add developer documentation to the appendices for
+    `<<VK_EXT_memory_budget>>`, `<<VK_KHR_buffer_device_address>>`,
+    `<<VK_KHR_depth_stencil_resolve>>`, `<<VK_KHR_draw_indirect_count>>`,
+    `<<VK_KHR_multiview>>`, `<<VK_KHR_sampler_ycbcr_conversion>>` (internal
+    issue 2109).
+  * Implement VUID expander treeprocessor plugin to make VUID text visible
+    and searchable in generated outputs (internal issue 2253, 2258).
+  * Clarify when acceleration structures can be indexed dynamically in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section
+    (internal issue 2316).
+  * Add missing valid usage statement for flink:vkImportFenceWin32HandleKHR
+    (internal merge request 4087).
+  * Replace badly formatted VUID for `<<VK_AMD_display_native_hdr>>`
+    (internal merge request 4096).
+  * Add ray tracing acceleration structures to the lists of objects where
+    appropriate in the <<fundamentals-objectmodel-lifetime, Object
+    Lifetime>> section (internal merge request 4100).
+  * Move GLSL and SPIR-V extension references in the extension appendices
+    into the "`Interactions and External Dependencies`" sections (internal
+    merge request 3969).
+
+-----------------------------------------------------
+
+Change log for August 26, 2020 Vulkan 1.2.152 spec update:
+
+  * Update release number to 152 for this update.
+
+GitHub Issues:
+
+  * Add attachment image layout valid usage statements for
+    slink:VkSubpassDescription and slink:VkSubpassDescription2 (public issue
+    1316).
+  * Clarify and generalize use of "`graphics commands`" in the
+    <<descriptorsets>> and <<pipelines>> chapters (public issue 1322).
+  * Fix description of handle returned in slink:VkDeviceQueueInfo2 (public
+    pull request 1347).
+
+Internal Issues:
+
+  * Promote valid usage statements requiring multiple parameters of a copy
+    command from the structure parameter descriptions to the command itself,
+    significantly restructuring some of the common validity files (internal
+    issue 2034).
+  * Add details of clamping and quantization behavior for border colors that
+    are outside the normal range for slink:VkSamplerCreateInfo and in the
+    <<textures-operation-validation, Instruction/Sampler/Image View
+    Validation>> and <<textures-texel-replacement, Texel Replacement>>
+    sections (internal issue 2281).
+  * Clarify in the <<spirvenv-module-validation-standalone, Standalone
+    SPIR-V Validation>> section that the value of code:XfbBuffer cannot
+    differ for members of the same block (internal issue 2307).
+  * Add valid usage blocks to the <<interfaces>> chapter where discussing
+    allowed uses of built-in SPIR-V variables (internal merge requests 3933,
+    4090).
+  * Refactor <<spirvenv-module-validation-standalone, Standalone SPIR-V
+    Validation>> constraints to single statement phrases not using ifdef::ed
+    Asciidoctor markup, and move some of them down to the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal merge request 4054).
+  * Fix XML attributes for some `<<VK_INTEL_performance_query>>` interfaces
+    (internal merge request 4061).
+  * Fix the "`Differences relative to `VK_KHR_shader_float16_int8``"
+    paragraph in the <<versions-1.2, Version 1.2>> appendix (internal merge
+    request 4062).
+  * Fix several valid usage statements for
+    flink:vkCmdBindTransformFeedbackBuffersEXT (public
+    KhronosGroup/Vulkan-ValidationLayers issue 2105).
+  * Clarify `shader_read_only` layout restrictions for
+    slink:VkWriteDescriptorSet and elink:VkImageLayout (internal merge
+    request 4060).
+  * Clarify wording for required 4444 and {YCbCr} formats in the
+    <<formats-mandatory-features-subbyte, Mandatory format support: sub-byte
+    channels>> and <<formats-requiring-sampler-ycbcr-conversion, Formats
+    requiring sampler {YCbCr} conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT
+    image views>> tables (internal merge request 4066).
+  * Move a feature valid usage statement from flink:vkCmdDrawIndexedIndirect
+    to its proper home in flink:vkCmdDrawIndexedIndirectCount, matching what
+    the validation layer already does (internal merge request 4070).
+  * Split valid usage statement for slink:VkWriteDescriptorSet into one
+    statement for each descriptor type for image layout requirements
+    (internal merge request 4071).
+  * Add the a <<valid-imageview-imageusage>> definition to capture which
+    elink:VkImageUsageFlagBits must be set when creating a
+    sname:VkImageView, and use that definition to simplify
+    slink:VkImageViewCreateInfo valid usage statements (internal merge
+    request 4073).
+  * Remove redundant valid usage statement 03269 for slink:VkPresentInfoKHR
+    (internal merge request 4084).
+  * Move valid usage statement from slink:VkProtectedSubmitInfo to
+    slink:VkSubmitInfo (internal merge request 4085).
+  * Update reference to pname:framebufferIntegerColorSampleCounts from the
+    description of the <<limits-framebufferColorSampleCounts>> feature if
+    Vulkan 1.2 is supported (internal merge request 4088).
+
+-----------------------------------------------------
+
+Change log for August 17, 2020 Vulkan 1.2.151 spec update:
+
+  * Update release number to 151 for this update.
+
+GitHub Issues:
+
+  * Clarify that the <<memory-protected-memory,Protected Memory>> is not
+    cross-physical device (public issue 1335).
+
+Internal Issues:
+
+  * Improve the layout of the <<Standard sample locations>> table to avoid
+    overflow in the HTML output (internal issue 1354).
+  * Also build core-only HTML spec in internal CI, to try and catch
+    extension ifdef errors (should probably also do this in Azure CI on
+    GitHub) (internal issue 1770).
+  * Add internal CI test for un-tagged uses of "`undefined`", to help make
+    sure we've carefully considered all such uses (internal issue 2270).
+  * Add style guide section "`Commands which Return Error Codes`" to give
+    guidance on assigning error codes and when to use
+    ename:VK_ERROR_OUT_OF_HOST_MEMORY (internal issue 2290).
+  * Use the term "`reference monitor`" instead of "`mastering display`" for
+    the `<<VK_EXT_hdr_metadata>>` extension (internal issue 2291).
+  * Explicitly state that SPIR-V modules must be valid after specialization
+    in slink:VkPipelineShaderStageCreateInfo and the
+    <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    section (internal issue 2302).
+  * Add slink:VkShaderModuleCreateInfo valid usage statements to match the
+    SPIR-V capabilities (internal merge request 4047).
+  * Add missing features to the <<spirvenv-module-validation-runtime,
+    Runtime SPIR-V Validation>> section (internal merge request 4048).
+  * Update slink:VkPhysicalDeviceVulkan11Properties to follow the same
+    renaming of "`subgroups`" to "`groups`" previously done for
+    slink:VkPhysicalDeviceSubgroupProperties (internal merge request 4050).
+
+-----------------------------------------------------
+
+Change log for August 10, 2020 Vulkan 1.2.150 spec update:
+
+  * Update release number to 150 for this update.
+
+GitHub Issues:
+
+  * Remove ename:VK_ERROR_TOO_MANY_OBJECTS as a required error code for
+    flink:vkAllocateMemory and and flink:vkCreateSampler, and note that
+    while it may still occur as a historical artifact, exceeding
+    implementation limits will result in undefined behavior (public issue
+    1295).
+  * Allow duplicate slink:VkDebugUtilsMessengerCreateInfoEXT structs in
+    pname:pNext chain (public issue 1329)
+  * Fix typo in slink:VkSubmitInfo valid usage statement 04120 (public merge
+    request 1336).
+  * Remove `KHR` suffix from some names promoted to core, in the
+    <<renderpass, Render Pass>> chapter (public merge request 1341).
+
+Internal Issues:
+
+  * Add ename:VK_ERROR_OUT_OF_HOST_MEMORY to `vk.xml` as a possible error
+    code for some additional commands returning elink:VkResult, and add a
+    note to the description of elink:VkResult giving some guidance on which
+    commands may and may not return that error code (internal issue 2063).
+  * Make a handful of terminology changes which move this repository closer
+    to the conventions of the AOSP
+    https://source.android.com/setup/contribute/respectful-code[Coding with
+    Respect] document (internal issue 2282).
+  * Update `<<VK_MVK_ios_surface>>` and `<<VK_MVK_macos_surface>>`
+    documentation and mark them as deprecated and replaced by
+    `<<VK_EXT_metal_surface>>` (internal merge request 4024).
+  * Add a section to the style guide on markup for the copyright and license
+    block on files in the repository (internal merge request 4036).
+  * Add ename:VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT to
+    `<<VK_EXT_validation_features>>` to enable synchronization validation
+    (internal merge request 4037).
+
+-----------------------------------------------------
+
+Change log for August 3, 2020 Vulkan 1.2.149 spec update:
+
+  * Update release number to 149 for this update.
+
+GitHub Issues:
+
+  * Fix valid usage statements to clarify interactions between
+    `<<VK_EXT_extended_dynamic_state>>` and the old viewport related
+    extensions `<<VK_NV_clip_space_w_scaling>>`,
+    `<<VK_NV_shading_rate_image>>` (for the palettes),
+    `<<VK_NV_viewport_swizzle>>`, and `<<VK_NV_scissor_exclusive>>` (public
+    issue 1296).
+
+Internal Issues:
+
+  * Clarify wording around non-uniform and non-constant descriptor access in
+    <<interfaces-resources-descset, Descriptor Set Interface>> (internal
+    issue 2163).
+  * Add a missing code:StorageBuffer reference in the <<interface-resources,
+    Shader Resource Interface>> section (internal issue 2191).
+  * Refactor common valid usage statements for flink:vkBindBufferMemory,
+    slink:VkBindBufferMemoryInfo, flink:vkBindImageMemory, and
+    slink:VkBindImageMemoryInfo (internal issue 2260).
+  * Copy over import/export behavior for sync file descriptor value `-1`
+    from slink:VkImportFenceFdInfoKHR to slink:VkImportSemaphoreFdInfoKHR
+    (internal issue 2274).
+  * State that a deriviative group is a quad scope instance in the
+    <<shaders-derivative-operations, Derivative Operations>> section
+    (internal merge request 4025)
+
+New Extensions:
+
+  * `<<VK_EXT_4444_formats>>`
+
+-----------------------------------------------------
+
+Change log for July 19, 2020 Vulkan 1.2.148 spec update:
+
+  * Update release number to 148 for this update.
+
+GitHub Issues:
+
+  * Move description of slink:VkPhysicalDevicePerformanceQueryFeaturesKHR to
+    the <<features>> chapter (public merge request 1312).
+  * Fix a few broken internal and external links, and add stub description
+    of empty elink:VkPipelineCompilerControlFlagsAMD type (public merge
+    request 1313).
+
+Internal Issues:
+
+  * Fix a few new places where "`undefined`" was used imprecisely, by
+    clarifying the difference between undefined results and undefined
+    behavior (internal issue 543).
+  * Add valid usage statement to common indirect draw valid usage statements
+    requiring that the pname:countBufferOffset to the count being used lie
+    within the pname:countBuffer (internal issue 1309).
+  * Add <<interfaces-raypipeline, Ray Tracing Pipeline Interface>> section
+    (internal issues 2094, 2237).
+  * Add valid usage statement to flink:vkCmdBeginTransformFeedbackEXT to
+    require that the last vertex processing stage of the bound graphics
+    pipeline be declared with the code:Xfb execution mode (internal issue
+    2124).
+  * Do not allow flink:vkWaitForFences or flink:vkWaitSemaphores to return
+    timeouts before the period has expired, even though this is valid in
+    some other synchronisation APIs (internal issue 2146).
+  * Add elink:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT as an alias
+    of elink:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT for clarity
+    when interacting with D3D11 fences (internal issue 2175).
+  * Ignore slink:VkMemoryAllocateInfo::pname:allocationSize when importing
+    D3D resources (internal issue 2176).
+  * Clarify the definition of flink:vkCmdBindVertexBuffers2EXT::pname:pSizes
+    (internal issue 2262).
+  * Fix markup error in slink:VkDescriptorSetLayoutBindingFlagsCreateInfo
+    (internal merge request 3998).
+  * Remove un-needed dependency of `<<VK_EXT_filter_cubic>>` on
+    `<<VK_IMG_filter_cubic>>` (internal merge request 4000).
+  * Minor textual clarifications in ray tracing extensions (internal merge
+    request 4017).
+  * Modify the validity generator, so that when generating valid usage for
+    array lengths with a chain of parameters (e.g. pname:pFoo->bar),
+    non-zero values are not required if any parameter in the chain is
+    optional, and consider the last parameter only when deciding the type of
+    the parameter (internal merge request 4021).
+  * Fix a typo in the `<<VK_EXT_fragment_density_map2>>` extension appendix
+    markup that caused refpage build warnings, and modify CI and
+    `BUILD.adoc` to use `makeSpec` instead of the old `makeAllExts` script
+    (internal merge request 4023).
+
+New Extensions:
+
+  * `<<VK_EXT_image_robustness>>`
+  * `<<VK_EXT_shader_atomic_float>>`
+
+-----------------------------------------------------
+
+Change log for July 13, 2020 Vulkan 1.2.147 spec update:
+
+  * Update release number to 147 for this update.
+
+GitHub Issues:
+
+  * Allow physical-device-level structures in pname:pNext chains (public
+    merge request 1303).
+  * Remove elink:VkRenderPassCreateFlags from dependencies of
+    `<<VK_QCOM_render_pass_transform>>` (public merge request 1311)
+
+Internal Issues:
+
+  * Require that variables with code:HitAttributeKHR storage class must:
+    <<spirvenv-module-validation-standalone, only be written in intersection
+    shaders>> (internal issue 2103).
+  * Specify that acceleration structure scratch buffer accesses from
+    acceleration structure build should be synchronized with the
+    ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stage and an access mask of
+    ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
+    ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR (internal issue
+    2173).
+  * Improve description of 3D blitting in flink:vkCmdBlitImage (internal
+    issue 2212).
+  * Split <<fragops-coverage-reduction, Coverage Reduction>> section into
+    multiple steps when multi-pixel fragments are involved: first per-pixel
+    coverage is separated out, then per-sample coverage is generated for
+    each color sample from per-pixel coverage. Additionally, the definition
+    of "`color sample mask`" and discussions of it have been removed in
+    favor of the per-color-sample coverage. (internal merge request 3951).
+  * Modify slink:VkSamplerYcbcrConversionCreateInfo valid usage statements,
+    as well as the <<textures-chroma-reconstruction, Chroma Reconstruction>>
+    section, to make it clear the values of pname:xChromaOffset and
+    pname:yChromaOffset are only validated when chroma channels are
+    downsampled (internal merge request 3959).
+  * Allow flink:vkGetBufferMemoryRequrements and
+    flink:vkGetBufferMemoryRequrements2 to be called for an Android Hardware
+    Buffer backed slink:VkBuffer, before it has been bound to memory
+    (internal merge request 3982).
+  * Remove *Draft* status from `<<VK_EXT_private_data>>` (internal merge
+    request 3982).
+  * Move valid usage statement from slink:VkProtectedSubmitInfo to
+    slink:VkSubmitInfo (internal merge request 3987).
+  * Add valid usage statements for protected buffers to
+    slink:VkBindBufferMemoryInfo and slink:VkBindImageMemoryInfo
+    (internal merge request 3988).
+  * Add valid usage statement to slink:VkImageCreateInfo requiring that
+    images with linear tiling cannot have sparse residency (internal merge
+    request 3988).
+  * Clarify that the ptext:maxPerStageDesciptorUpdateAfterBind*
+    <<limits-required, Required Limits>> must be at least the corresponding
+    non- ptext:UpdateAfterBind limits (internal merge request 3992).
+
+-----------------------------------------------------
+
+Change log for July 3, 2020 Vulkan 1.2.146 spec update:
+
+  * Update release number to 146 for this update.
+
+GitHub Issues:
+
+  * Fix valid usage generation script for optional bitmasks in a
+    non-optional array (public pull request 1228).
+  * Add lunr to `package.json` and update the locally cached copy (public
+    pull request 1238).
+  * Require that newly released extensions have etext:*_SPEC_VERSION `1`
+    (public issue 1263).
+  * Add to the NOTE in slink:VkPhysicalDeviceIDProperties, advising
+    implementations on returning unique pname:deviceUUID values and avoiding
+    hardwired values, especially 0 (public issue 1273).
+  * Add noscript fallback for HTML output (public pull request 1289).
+  * Fix duplicated VUIDs in flink:vkCmdExecuteGeneratedCommandsNV (public
+    pull request 1304).
+  * Fix link markup in <<ray-traversal, Ray Traversal>> chapter, nested link
+    markup, and linear equation markup in
+    <<textures-unnormalized-to-integer>> (public pull requests 1305, 1306,
+    1307).
+
+Internal Issues:
+
+  * Add comments to extending enums in the generated API interfaces showing
+    which core version and/or extensions provide the enum, matching recent
+    changes to show this information for commands and structures (internal
+    issue 1431, public issue 444).
+  * Only allow code:Invocation memory scope in the
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    section when memory semantics is *None* (internal issue 1782).
+  * Make reflow script properly handle literal block delimiters and lines
+    containing only whitespace (internal issues 2039, 2042).
+  * Clarify definition of <<limits-maxFragmentCombinedOutputResources,
+    pname:maxFragmentCombinedOutputResources>> (internal issue 2236).
+  * Add missing `errorcodes=` XML attributes for some
+    `<<VK_EXT_display_control>>` commands.
+  * Clarify <<features-extentperimagetype, allowed extent values based on
+    image type>> and the related <<limits-maxImageDimension1D>>,
+    <<limits-maxImageDimension2D>>, <<limits-maxImageDimension3D>>,
+    <<limits-maxImageDimensionCube>> limits (internal merge request 3922).
+  * Remove redundant valid usage statement
+    VUID-VkFramebufferCreateInfo-flags-03188 (internal merge request 3934).
+  * Update style guide to recommend new extension spec language be contained
+    in existing Asciidoctor files, unless it is of enough scope to create a
+    new chapter (internal merge request 3955).
+
+New Extensions:
+
+  * `<<VK_EXT_directfb_surface>>` (public pull requests 1292, 1294).
+  * `<<VK_EXT_fragment_density_map2>>` (internal merge request 3914).
+
+-----------------------------------------------------
+
+Change log for June 20, 2020 Vulkan 1.2.145 spec update:
+
+  * Update release number to 145 for this update.
+
+GitHub Issues:
+
+  * Fix `<<VK_EXT_conservative_rasterization>>` interactions with external
+    SPIR-V and GLSL functionality in the extension appendix (public issue
+    1288).
+
+Internal Issues:
+
+  * Break SPIR-V validation into two sections,
+    <<spirvenv-module-validation-standalone, Standalone SPIR-V Validation>>
+    and <<spirvenv-module-validation-runtime, Runtime SPIR-V Validation>>
+    (internal issue 1598).
+  * Add VkFormat enums for ASTC 3D formats to `vk.xml`. These values are
+    slotted into the reserved, and still disabled extension 289. They will
+    not appear in the published `vulkan_core.h` header and there is no
+    published extension utilizing them, but this allows external projects
+    such as KTX2 to use these values as part of their internal cross-API
+    formats by generating a header including this disabled extension
+    (internal merge requests 1662, 2216).
+  * Clarify that shader binding table accesses from ray tracing
+    pipelines should be synchronized with the
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR pipeline stage and
+    the access mask of ename:VK_ACCESS_SHADER_READ_BIT (internal issue
+    1749).
+  * Validate that 3D image views are not used as attachments in
+    slink:VkFramebufferCreateInfo and slink:VkRenderPassAttachmentBeginInfo
+    (internal issue 2142).
+  * Increase the number of conditions recognized as build errors by the
+    valid usage extraction plugin (internal issue 2215).
+  * Relax slink:VkImportAndroidHardwareBufferInfoANDROID valid usage
+    statement 01881 to support external formats (internal issue 2220).
+  * Clearly define what "`optional capabilities`" means in the
+    <<spirvenv-capabilities, Capabilities>> section, and specify that if
+    *any* of the core versions and/or extensions required for a capability
+    is enabled, then it is valid to use that capability (internal merge
+    request 3827).
+  * Add ename:VK_FORMAT_B5G5R5_UNORM_PACK16 and
+    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 to
+    `<<VK_EXT_custom_border_color>>` as exceptions when
+    <<features-customBorderColorWithoutFormat,
+    pname:customBorderColorWithoutFormat>> is enabled (internal merge
+    request 3833).
+  * Add new <<spirvenv-format-type-matching, Image Format and Type
+    Matching>> section and refer to it from elsewhere in the spec,
+    clarifying rules regarding types for image operations (internal merge
+    request 3916).
+  * Fix typo sname:VkImageFormatProperties -> slink:VkFormatProperties
+    (internal merge request 3921).
+  * Move <<sparsememory-examples, sparse image examples>> to the Vulkan
+    Guide (internal merge request 3930).
+  * Fix typo in slink:VkAccelerationStructureBuildOffsetInfoKHR valid usage
+    statement 03553 (internal merge request 3938).
+  * Support <remove> tags for extending enumerants in XML (internal merge
+    request 3942).
+
+New Extensions:
+
+  * `<<VK_EXT_extended_dynamic_state>>`
+
+-----------------------------------------------------
+
+Change log for June 8, 2020 Vulkan 1.2.144 spec update:
+
+  * Update release number to 144 for this update.
+
+Internal Issues:
+
+  * Require `volatile` semantics for loading <<builtin-volatile-semantics,
+    certain variables used in ray pipeline stages>> in the
+    <<spirvenv-module-validation, Validation Rules within a Module>> and
+    also the <<ray-tracing-shader-call, Shader Call Instructions>> section
+    (internal issue 1924).
+  * Created new <<potential-format-features, Potential Format Features>>
+    section and corresponding glossary term, use the new term where
+    appropriate, and add some related valid usage statements to
+    flink:vkCmdBeginRenderPass, flink:vkCmdBeginRenderPass2,
+    slink:VkSubpassDescription, and slink:VkSubpassDescription2 (internal
+    issue 2031).
+  * Add interaction with `<<VK_KHR_ray_tracing>>` and corresponding `NV`
+    extension to flink:vkUpdateDescriptorSetWithTemplate (internal issue
+    2193).
+  * Resolve collisions in common VUID names using `{stageMaskName}`
+    qualifiers as part of the name and make fixes to
+    `config/vu-to-json/extension.rb` to match (internal issue 2215).
+  * Replace `shutil.move` operations with `copy` / `remove` in the base
+    `generator.py` code, working around a problem with bind mounts while
+    using the Khronos docker build image with `podman` instead of `docker`
+    (internal merge request 3872).
+  * Add a new <<spirvenv-extensions, SPIR-V Extensions>> subsection
+    containing a table showing the corresponding Vulkan extension or core
+    API required to support each of the SPIR-V extensions, replacing a
+    harder-to-read list of extensions (internal merge request 3876).
+  * Remove two redundant valid usage statements from flik:vkCmdResolveImage
+    (internal merge request 3878).
+  * Make repository REUSE-compliant, and run the `reuse` license checker as
+    part of internal CI. While most files now have SPDX license identifier
+    tags, some licenses are recorded in `.reuse/dep5` instead. Note that
+    this does not change licenses in the repository (aside from adding some
+    to files missing them), just ensures that every file *has* an explicit
+    license (internal merge request 3904).
+  * Clarify that code:ImageMSArray is supported as part of the
+    <<features-shaderStorageImageMultisample>> feature (internal merge
+    request 3905).
+  * Reorganize some valid usage statements for flink:vkCmdBlitImage,
+    flink:vkCmdCopyBuffer, flink:vkCmdCopyBufferToImage,
+    flink:vkCmdCopyImage, flink:vkCmdCopyImageToBuffer, and
+    flink:vkCmdResolveImage as common valid usage statements, for
+    future-proofing (internal merge requests 3906, 3907, 3908, 3909, 3910).
+  * Add two valid usage statements to flink:vkAllocateMemory and
+    flink:vkCreateSampler for allocation limits of slink:VkDeviceMemory and
+    elink:VkSamplers, respectively (internal merge request 3923).
+
+-----------------------------------------------------
+
+Change log for June 8, 2020 Vulkan 1.2.143 spec update:
+
+  * Update release number to 143 for this update.
+
+GitHub Issues:
+
+  * Move `translate_math.js` to the `scripts/` directory (public pull
+    request 1286).
+  * Minor cleanup of math markup (public pull request 1287).
+
+Internal Issues:
+
+  * Reorganize some valid usage statements for slink:VkBufferMemoryBarrier,
+    and for commands with elink:VkPipelineStageFlags parameters, as common
+    valid usage statements, for future-proofing (internal merge requests
+    3863, 3867).
+  * Misc. licensing updates (internal issue 1017):
+  ** Replace the "`Exceptions`" clause on `vk.xml` with a dual Apache-2.0 OR
+     MIT license, with agreement of downstream developers known to be
+     affected by it. This enables use of `vk.xml` in GPLed projects under a
+     more widely used licensing scheme.
+  ** Use `SPDX-License-Identifier` tags in place of longer license text.
+     This does not change the license terms on files other than `vk.xml`,
+     but makes license statements in most files more compact.
+  ** Reorganize repository documentation (README.adoc, COPYING.adoc,
+     LICENSE.adoc, CONTRIBUTING.adoc, CODE_OF_CONDUCT.adoc, and BUILD.adoc)
+     with a more widely used split of information; make all of these files
+     Asciidoctor instead of Markdown format for consistency with the rest of
+     the repository; describe use of SPDX identifiers; and point to full
+     license text of the various OSS licenses used in the repository.
+  * Add new <<resources-image-views-identity-mappings, text describing the
+    identity swizzle>> incorporating the existing "`Component Mappings
+    Equivalent To ename:VK_COMPONENT_SWIZZLE_IDENTITY`" table, and refer to
+    this text in place of explicit references to
+    ename:VK_COMPONENT_SWIZZLE_IDENTITY in many places (internal merge
+    request 3399).
+  * Require code:storageBuffer16BitAccess capability if
+    `<<VK_KHR_16bit_storage>>` is enabled (internal merge request 3709).
+  * Added XML schema and generator script extensions to support 64-bit flags
+    and corresponding bitmasks (internal merge request 3718).
+  * Correct <<interfaces-resources-standard-layout, Standard Buffer Layout>>
+    alignment rules (internal merge request 3750).
+  * Relax non-strict line constraints in the <<primsrast-lines-basic>> and
+    <<primsrast-lines-bresenham>> sections (internal merge request 3792).
+  * Add missing `structextends` attribute to the
+    slink:VkPhysicalDevicePrivateDataFeaturesEXT definition in `vk.xml`
+    (internal merge request 3873).
+  * Move slink:VkImageFormatListCreateInfo valid usage statements to
+    flink:vkCreateImageView (internal merge request 3879).
+  * Update valid usage statements for slink:VkImageViewASTCDecodeModeEXT to
+    allow ASTC HDR formats (internal merge request 3881).
+  * Add missing extension dependency to
+    `<<VK_KHR_pipeline_executable_properties>>` definition in `vk.xml`
+    (internal merge request 3882).
+  * Require the <<features-customBorderColors, pname:customBorderColors>>
+    feature be enabled when using etext:VK_BORDER_COLOR_* in
+    slink:VkSamplerCreateInfo (internal merge request 3884).
+
+-----------------------------------------------------
+
+Change log for June 1, 2020 Vulkan 1.2.142 spec update:
+
+  * Update release number to 142 for this update.
+
+GitHub Issues:
+
+  * Add boilerplate descriptions of reserved bitmask types (public pull
+    request 1265).
+  * Move dynamic state valid usage statements from
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV and
+    VkPipelineViewportShadingRateImageStateCreateInfoNV to
+    slink:VkGraphicsPipelineCreateInfo, where they are testable, and make
+    corresponding tweaks in `vk.xml` (public pull request 1268).
+  * Add missing flink:vkDestroyPrivateDataSlotEXT explicit valid usage
+    statement (public pull request 1269).
+  * Cast arguments of dlink:VK_MAKE_VERSION macro to code:uint32_t to avoid
+    compiler warnings (public pull request 1279).
+
+Internal Issues:
+
+  * Update <<fundamentals-validusage-pNext, description of pname:pNext
+    chains>> to allow structures in the chain to be defined by either core
+    versions or extensions. Add the new term "`extending structure`" to the
+    glossary to describe such structures, and use it in place of "`extension
+    structure`". Update the style guide accordingly (internal issue 1083).
+  * Add a comment to the beginning of generated API includes showing which
+    combinations of API core versions and extensions provide that API, based
+    on the explicit requirements in the API XML. This does not yet document
+    enumerants introduced by extending a base enum type (internal issue
+    1431).
+  * Relax the restriction that slink:VkBufferImageCopy::pname:bufferOffset
+    must be a multiple of 4 for flink:vkCmdCopyBufferToImage and
+    flink:vkCmdCopyImageToBuffer when run on graphics or compute queues, but
+    not on transfer queues (internal issue 1701).
+  * Document the types of "`special use`" extensions in the new
+    <<extendingvulkan-compatibility-specialuse, Special Use Extensions>>
+    section, summarize special uses in the generated metadata for extension
+    appendices, and link back to the new section from each special use
+    extension (internal issue 1938).
+  * Clarify behavior of flink:vkGetDeferredOperationMaxConcurrencyKHR,
+    allowing it to return zero for completed operations (internal issue
+    2036).
+  * Allow flink:vkGetInstanceProcAddr to resolve itself with a `NULL`
+    pname:instance (internal issue 2057).
+  * Modify the valid usage statement ID assignment script to track a range
+    of unused IDs for each extension branch under development, instead of
+    only allowing VUID assignment in `master` and `devel` branches (internal
+    issue 2100).
+  * Add `selector` and `selection` attributes for unions in XML, to enable
+    automatic generation of validation code (internal issue 2140).
+  * Fix validity generator for stext:Vk*Flags types that are aliases,
+    correcting generation of implicit valid usage for
+    slink:VkAccelerationStructureInfoNV::pname:flags. Remove
+    `noautovalidity` attribute for this member, as well as the previously
+    written explicit valid usage (internal issue 2140).
+  * Fix description of slink:VkTextureLODGatherFormatPropertiesAMD (internal
+    issue 2189).
+  * Remove redundant text about variables being explicitly laid out in the
+    <<interfaces-resources-layout, Offset and Stride Assignment>> section
+    (internal merge request 3691).
+  * Fix conflicting slink:VkSamplerYcbcrConversionCreateInfo valid usage
+    statements (internal merge request 3716).
+  * Fix use of code:AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT to
+    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER in valid usage statement
+    02386 for slink:VkMemoryAllocateInfo (internal merge request 3808).
+  * Add missing `externsync` XML attributes for ftext:vkCmd* commands
+    (internal merge request 3825).
+  * Add missing `extends` attribute to
+    slink:VkDevicePrivateDataCreateInfoEXT XML (internal merge request
+    3834).
+  * Add code:RayGeometryIndexKHR to the `<<VK_KHR_ray_tracing>>` list of
+    built-in variables (internal merge request 3853).
+  * Restrict slink:VkBufferViewCreateInfo with ename:VK_WHOLE_SIZE, and
+    round down results of division in calculating the test in the
+    corresponding valid usage statements (internal merge request 3858).
+  * Miscellaneous cleanup and reorganization of synchronization language in
+    multiple places, and add the
+    <<synchronization-image-barrier-layout-transition-order>> section
+    (internal merge request 3861).
+  * Redefine ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT and
+    ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT as pseudo-stages in multiple
+    places (internal merge request 3862).
+  * Reorganize some valid usage statements, especially but not limited to
+    stage mask parameters for slink:VkImageMemoryBarrier,
+    slink:VkPipelineStageFlags, flink:vkCmdPipelineBarrier,
+    flink:vkCmdResetEvent, flink:vkCmdSetEvent, flink:vkCmdWaitEvents,
+    flink:vkCmdWriteBufferMarkerAMD, and flink:vkCmdWriteTimestamp as common
+    valid usage statements, for future-proofing (internal merge requests
+    3864, 3865, 3866, 3867, 3868).
+
+-----------------------------------------------------
+
+Change log for May 15, 2020 Vulkan 1.2.141 spec update:
+
+  * Update release number to 141 for this update.
+  * *Note*: Using the default build options, specification outputs will now
+    be created in `gen/out/` instead of `out/`, and header files will be
+    created in `gen/include/vulkan` instead of `include/vulkan`. This can be
+    overridden using the `-genpath` option to the frontend scripts like
+    `makeAllExts` and `makeSpec`, or by specifying `GENERATED=*path*` on the
+    make command line when invoking it directly.
+
+GitHub Issues:
+
+  * Assign new elink:VkDriverId and elink:VkVendorId enums for Mesa (public
+    issue 1256).
+
+Internal Issues:
+
+  * Fix a typo in the <<fragops-stencil, Stencil Test>> section, removing a
+    sentence fragment accidentally left over from an earlier merge conflict
+    resolution (internal issue 2158).
+  * Typo fixes for flink:vkGetRayTracingShaderGroupHandlesKHR and
+    flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR valid usage
+    statements (internal merge request 3831).
+  * Add a `requiredBy` dictionary to the generated `vkapi.py` showing which
+    core versions or extensions require each API (internal merge request
+    3832).
+  * Allow specifying multiple API names for and tags in registry processing
+    scripts. Update the registry schema documentation accordingly, and
+    remove the redundant `xml_supported_name_of_api` method from the
+    VulkanConventions object (internal merge request 3836).
+  * Consolidate generated intermediate files and output documents into
+    $(GENERATED) directory, add -genpath option to scripts requiring them,
+    and modify Makefile accordingly. Add a new `makeSpec` script, which
+    combines and extends the functionality of the `makeExt`, `makeKHR`, and
+    `makeAllExts` scripts (internal merge requests 3837, 3838, 3840, 3841).
+  * Add "`runtime`" to style guide and use that spelling consistently
+    (internal merge request 3843).
+
+-----------------------------------------------------
+
+Change log for May 3, 2020 Vulkan 1.2.140 spec update:
+
+  * Update release number to 140 for this update.
+
+GitHub Issues:
+
+  * Add `vk.xml` `noautovalidity` attribute to
+    flink:vkCmdBindTransformFeedbackBuffersEXT::pname:pSizes to cause change
+    in the generation of implicit valid usage statement for
+    pname:bindingCount (public issue 1227).
+  * Remove the special tokens (not part of the Vulkan API) suffixed with
+    etext:*_BEGIN_RANGE etext:*_END_RANGE, and etext:*_RANGE_SIZE from the
+    generated C headers, after consultation with downstream components and
+    ISVs and advanced warning to the developer community (public issue 1230,
+    internal issue 872).
+
+    *Note* if you absolutely require these tokens for some reason, you can
+    still build a version of the header which restores them. Edit
+    `scripts/genvk.py` to add the parameter `genEnumBeginEndRange = True` to
+    the `CGeneratorOptions` objects for the header file targets you want to
+    restore. See the version of `genvk.py` in the 1.2.139 spec update for an
+    example.
+  * Add valid usage statement to slink:VkApplicationInfo requiring that
+    pname:apiVersion be greater than or equal to dlink:VK_API_VERSION_1_0
+    (public pull request 1252).
+  * Add \<implicitexternsync> tags to `vk.xml` for flink:vkDestroyDevice
+    slink:VkQueue objects received from pname:device (public pull request
+    1255).
+  * Fix typo in slink:VkBufferMemoryBarrier language (public pull request
+    1257).
+
+Internal Issues:
+
+  * Automatically generate interface lists for extension appendices from
+    `vk.xml` using a new interface generator script, and update the style
+    guide's description of these appendices accordingly (internal issue
+    977, internal merge request 3819).
+  * Add transitive language to the <<formats-compatible-planes, Compatible
+    formats of planes of multi-planar formats>> section to pull in format
+    compatibility classes as well (internal issue 1615).
+  * Add valid usage statements to ftext:vkCmdBuildAccelerationStructure*KHR,
+    flink:vkCmdCopyAccelerationStructureToMemoryKHR, and
+    flink:vkCmdCopyMemoryToAccelerationStructureKHR for structure builds
+    bound to device memory (internal issue 2033).
+  * Don't generate etext:*_MAX_ENUM values in documentation generators,
+    since they're not part of the API, and only meaningful on compiled
+    headers (internal issue 2056).
+  * Remove special lifetime rules for pipelines in the
+    <<fundamentals-objectmodel-lifetime-cmdbuffers>> section (internal issue
+    2068).
+  * Improve valid usage statements for ftext:vkCmdTraceRays*, share more
+    common VUs between ftext:vkTraceRays*, and add ftext:vkCmdTracerays* VUs
+    for bound buffers. Improve documentation for the
+    pname:raygenShaderBindingOffset parameters and fork `NV` and `KHR` valid
+    usage statements, since the shader binding table is described
+    differently (internal issues 2075, 2136).
+  * Clarify lifetime of acceleration structure build inputs for
+    flink:vkCreateAccelerationStructureKHR (internal issue 2077).
+  * Add a Note to the <<framebuffer-blending, Blending>> section to stop
+    claiming that blending is ignored for all integer formats (internal
+    issue 2098).
+  * Mark handle parameters of some ftext:vkDestroy* commands as `optional`
+    and `externsync="true"` in `vk.xml` (internal issue 2129).
+  * Add missing `:refpage:` attributes for ray tracing common valid usage
+    statements (internal issue 2141).
+  * Redefine fragment to include the possibility of it covering multiple
+    pixels. This affects many parts of the specification including the
+    <<pipelines, Pipelines>>, <<primsrast, Rasterization>>, and <<fragops,
+    Fragment Operations>> chapters, the `<<VK_EXT_post_depth_coverage>>`
+    appendix, the `Coverage*` and `Sample Index` glossary entries, the
+    code:SampleId and code:SampleMask definitions in the
+    <<interfaces-builtin-variables, Built-In Variables>> section, and the
+    <<shaders-fragment-execution, Fragment Shader Execution>>,
+    <<shaders-fragment-earlytest, Early Fragment Tests>>, and
+    <<textures-texel-coordinate-systems, Texel Coordinate Systems>> sections
+    (internal merge request 3568).
+  * Refactor `scripts/genvk.py` script to specify generator and generator
+    options to the `Registry` object before loading XML. This allows
+    generator options to influence behavior such as reparenting enum
+    elements from feature/extension elmements to the enums they are being
+    added to, which is desirable for generating complete feature lists for
+    an extension or core version (internal merge request 3789).
+  * Raise a fatal error (instead of a warning) in `scripts/generator.py`
+    when two enumerants that are not aliased have the same value, so that CI
+    will fail (internal merge request 3807).
+  * Remove accidentally duplicated slink:VkSubpassDependency2 valid usage
+    statement 03093 (internal merge request 3826).
+
+New Extensions:
+
+  * `<<VK_EXT_private_data>>`
+  * `<<VK_EXT_custom_border_color>>`
+
+-----------------------------------------------------
+
+Change log for April 26, 2020 Vulkan 1.2.139 spec update:
+
+  * Update release number to 139 for this update.
+
+GitHub Issues:
+
+  * Configure GitHub CI with Azure pipelines and the Khronos Docker build
+    image (public pull request 1141).
+  * Move NOTE in flink:vkEnumerateInstanceVersion prior to valid usage
+    statements (public pull request 1237).
+  * Add `implicitexternsyncparams` to flink:vkDestroyInstance for
+    slink:VkPhysicalDevice objects (public pull request 1244).
+  * Note in the style guide that extension names are used as preprocessor
+    symbols in all the generated Vulkan headers (public pull request 1245).
+  * Move NOTE about app use of `switch` statements and Vulkan API enums from
+    the style guide into the <<fundamentals-validusage-enums, Valid Usage
+    for Enumerated Types>> section (public pull request 1246).
+  * Modify generator script to use Unix newlines on all platforms (public
+    pull request 1250).
+
+Internal Issues:
+
+  * Allow ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT error to be
+    generated by flink:vkQueuePresentKHR (internal issue 1932).
+  * Update references to the SPIR-V Specification to version 1.5.3 (internal
+    issue 1957).
+  * Add a \<comment> explaining why the bitfields defined for
+    slink:VkAccelerationStructureInstanceKHR in `vk.xml` are non-normative
+    (internal issue 1975).
+  * Add valid usage statement for flink:vkBindImageMemory2::pname:pBindInfos
+    to prevent binding disjoint memory twice (internal merge request 3696).
+  * Add valid usage statements to flink:vkGetBufferMemoryRequirements,
+    flink:vkGetImageMemoryRequirements, and
+    slink:VkBufferMemoryRequirementsInfo2 requiring that external Android
+    hardware buffers be bound to memory (internal merge request 3717).
+  * Fix implicit valid usage statement generation script for handle
+    parameters with `optional="false,true"` XML attributes (internal merge
+    request 3753).
+
+New Extensions:
+
+  * `<<VK_EXT_robustness2>>`
+  * `<<VK_QCOM_render_pass_shader_resolve>>`
+
+-----------------------------------------------------
+
+Change log for April 16, 2020 Vulkan 1.2.138 spec update:
+
+  * Update release number to 138 for this update.
+
+GitHub Issues:
+
+  * Use correctly tagged normative term macros in various places (public
+    pull request 1217).
+  * Fix C arrow markup in parameter descriptions (public pull request 1222).
+
+Internal Issues:
+
+  * Add language to the <<features-requirements, Feature Requirements>>
+    section, the <<versions, Core Revisions>> appendix, and the applicable
+    extensions to require major feature bits if the corresponding extension
+    is supported (internal issue 1961).
+  * Allow slink:VkAccelerationStructureCreateInfoKHR::pname:maxGeometryCount
+    = 0, and clarify that exactly one of pname:compactedSize and
+    pname:maxGeometryCount must: be zero. (internal issue 2079).
+  * Add `allowduplicate` attribute to XML `type` tags to enable future
+    structures which can allow multiple copies of a structure in their
+    pname:pNext chain (internal issue 2090).
+  * Add the glossary term "`format features`", and make minor clarifications
+    to uses of this term in several places in the <<resources, Resource
+    Creation>> chapter and the
+    <<resources-sampler-ycbcr-conversion-format-features, Sampler Ycbcr
+    Conversion Format Features>> section (internal merge request 3727).
+  * Add a constraint to the <<memory-external-android-hardware-buffer,
+    Android Hardware Buffer>> section requiring that bound slink:VkImage or
+    slink:VkBuffer objects be created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    flag set, and corresponding valid usage statements to
+    flink:vkBindBufferMemory, slink:VkBindBufferMemoryInfo,
+    flink:vkBindImageMemory, and slink:VkBindImageMemoryInfo (internal merge
+    request 3732).
+  * Fix pname:memoryTypes ordering description for device coherent memory
+    (ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD) in the
+    <<memory-device-bitmask-list>> section (internal merge request 3738).
+  * Replace code:AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT with
+    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER in the
+    <<memory-external-android-hardware-buffer-usage, AHardwareBuffer Usage
+    Equivalence>> table, and add
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT flag for this case
+    (internal merge request 3741).
+  * Add more references to `NV` and `KHR` ray tracing pipelines in
+    discussions of creating pipelines, or generalize text so they need not
+    all be mentioned by name (internal merge request 3743).
+  * Allow *ShaderCallKHR* memory scope in ray tracing shaders, in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    appendix (internal merge request 3744).
+  * Use Khronos Dockerhub image for spec builds in internal CI (internal
+    merge request 3748).
+  * Add the `<<VK_KHR_dedicated_allocation>>` extension as a dependency of
+    `<<VK_ANDROID_external_memory_android_hardware_buffer>>` (internal merge
+    request 3751).
+
+-----------------------------------------------------
+
+Change log for April 06, 2020 Vulkan 1.2.137 spec update:
+
+  * Update release number to 137 for this update.
+
+GitHub Issues:
+
+  * Incorporate several changes to the specification build process and HTML
+    load-time scripts which pre-render KaTeX math, pre-fetch fonts, and
+    perform several other optimizations which can significantly improve load
+    time for the single-page HTML specification. In our internal evaluation
+    these changes appear to primarily help when using Chrome or Chromium,
+    with smaller improvements for Firefox and Safari. Speedups seem more
+    significant on Linux, Windows, and Android platforms, while MacOS
+    browsers may benefit less (public pull requests 702, 704, and 708).
+  * Clarify that code:OpVariable is decorated with code:Location, not
+    code:OpTypeStruct in the <<interfaces-iointerfaces-locations, Location
+    Assignment>> section (public issue 1203).
+  * Add a NOTE about the WSI origin location in the description of
+    flink:vkQueuePresentKHR (public pull request 1208).
+  * Add the `null-terminated` attribute to
+    slink:VkPerformanceValueDataINTEL::pname:valueString in `vk.xml` (public
+    pull request 1209).
+  * Mark slink:VkPhysicalDeviceVulkan11Properties and
+    slink:VkPhysicalDeviceVulkan12Properties structures as `returnedonly` in
+    `vk.xml` (public pull request 1210).
+  * Create explicit valid usage statements from text in the description of
+    slink:VkValidationFeaturesEXT (public pull request 1212).
+  * Update style guide to add "`user`" to the list of words *not* to use,
+    instead recommending "`application`" (public pull request 1213).
+  * Fix typos where `ext:` was used in the style guide instead of the new
+    `apiext:` Asciidoctor macro (public pull request 1214).
+  * Miscellaneous minor markup and editing fixes (public pull request 1215).
+  * Remove etext:KHR from promoted ename:VK_MAX_DRIVER_NAME_SIZE in the
+    description of slink:VkPhysicalDeviceDriverProperties (public pull
+    request 1218).
+  * Correct use of `NULL` to dlink:VK_NULL_HANDLE in the
+    <<acceleration-structure-inactive-prims, Inactive Primitives and
+    Instances>> section (public pull request 1219).
+  * Remove trailing periods on valid usage statement text, as required by
+    the style guide, and add `scripts/deperiodize_vuids.py` to do this in
+    the future if needed (public pull request 1220).
+
+Internal Issues:
+
+  * Provide a warning in the repository `README.adoc` of pending header
+    changes to remove etext:VK_*_BEGIN_RANGE, etext:VK_*_END_RANGE, and
+    etext:VK_*_RANGE_SIZE tokens (internal issue 872).
+  * Describe the meaning of code:Device for the `<<VK_KHR_shader_clock>>`
+    extension in the <<shaders-scope-device, Device>>,
+    <<shaders-scope-queue-family, Queue Family>>, and
+    <<shaders-scope-command, Command>> sections of the shader
+    <<shaders-scope, Scope>> section (internal issue 1955).
+  * Allow slink:VkDebugUtilsObjectNameInfoEXT::pname:pObjectName to be
+    either NULL or an empty string to remove a previously set name (internal
+    issue #2019).
+  * Add missing VK_ERROR_OUT_OF_HOST_MEMORY error code in `vk.xml` for
+    flink:vkEnumerateInstanceVersion (internal issue 2029).
+  * Require code:R32i or code:R32ui image format for
+    code:OpImageTexelPointer atomic operations in the
+    <<spirvenv-module-validation, Validation Rules within a Module>> section
+    (internal issue 2049).
+  * Remove the `<pattern>` element from images used in the specification, to
+    avoid complaints from prawn-svg during PDF spec builds (internal issue
+    2053).
+  * Clarify usable sample counts for empty subpasses in the
+    <<features-variableMultisampleRate>> section and the related
+    flink:vkCmdBindPipeline valid usage statement, as well as in the
+    <<limits-framebufferNoAttachmentsSampleCounts>>
+    <<renderpass-noattachments>> sections (internal issue 2066).
+  * Clarify pname:aspectMask usage in render passes in
+    slink:VkGraphicsPipelineCreateInfo valid usage statement 01565 and in
+    slink:VkAttachmentReference2 (internal merge request 3664).
+  * Remove unused etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_KHR
+    token from `vk.xml` and the `<<VK_KHR_ray_tracing>>` appendix
+    (internal merge request 3680).
+  * Require <<features-subgroup-extended-types,
+    pname:shaderSubgroupExtendedTypes>> for Vulkan 1.2 (internal merge
+    request 3680).
+  * Generate symlinks from refpage aliases to the API they're aliasing
+    (internal merge request 3694).
+  * Add an alias from the old ename:VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME
+    token (internal merge request 3697).
+  * Add `scripts/compImages.sh` to compare all images in two git branches of
+    the specification (internal merge request 3699).
+  * Improve valid usage statements for `<<VK_NV_device_generated_commands>>`
+    in flink:vkCmdExecuteGeneratedCommandsNV,
+    slink:VkGeneratedCommandsInfoNV,
+    flink:vkCmdPreprocessGeneratedCommandsNV,
+    slink:VkIndirectCommandsStreamNV, slink:VkIndirectCommandsLayoutTokenNV
+    and slink:VkGraphicsPipelineCreateInfo (internal merge request 3702).
+  * Clarify differences between `<<VK_NV_ray_tracing>>` and
+    `<<VK_KHR_ray_tracing>>` for
+    slink:VkPipelineCreationFeedbackCreateInfoEXT pipeline creation,
+    pname:shaderGroupHandleSize and pname:maxRecursionDepth limit
+    requirement differences, and detangle `SPV_KHR/NV_ray_tracing` in the
+    <<spirvenv-capabilities-table, List of SPIR-V Capabilities and enabling
+    features or extensions>> (internal merge request 3710).
+  * Add flink:vkGetImageViewAddressNVX and
+    slink:VkImageViewAddressPropertiesNVX to `<<VK_NVX_image_view_handle>>`
+    (internal merge request 3710).
+  * Shorten 'make' output by reducing redundant logging output from refpage
+    build targets (internal merge request 3729).
+  * Replace sname: macro with slink: everywhere except language actually
+    describing the structure in the macro argument (internal merge request
+    3728).
+  * Add flink:vkGetBufferMemoryRequirements2 and
+    flink:vkGetImageMemoryRequirements2 to the commands for which the
+    implementation makes guarantees about certain properties of the memory
+    requirements in the <<resources-association, Resource Memory
+    Association>> section, following the description of
+    slink:VkMemoryRequirements (internal merge request 3730).
+  * Add valid usage statements for
+    `<<VK_ANDROID_external_memory_android_hardware_buffer>>` (internal merge
+    request 3731).
+  * Add requirements on the
+    slink:VkAccelerationStructureMemoryRequirementsInfoKHR acceleration
+    structure for which memory type bits must be exposed (internal
+    advisorypanel issue 28).
+
+New Extensions:
+
+  * `<<VK_QCOM_render_pass_store_ops>>`
+
+-----------------------------------------------------
+
+Change log for March 24, 2020 Vulkan 1.2.136 spec update:
+
+  * Update release number to 136 for this update.
+
+GitHub Issues:
+
+  * Generate per-extension refpages from the extension appendices in the
+    specification instead of the old, minimal generated refpages, and update
+    the registry index to point to these refpages instead of the
+    specification (public issue 1195, internal issue 1999).
+  * Rename ename:VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL to
+    ename:VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL
+    to match the similar renaming of sname:VkQueryPoolCreateInfoINTEL to
+    slink:VkQueryPoolPerformanceQueryCreateInfoINTEL (public issue 1207,
+    internal issue 2048).
+
+Internal Issues:
+
+  * Add a new <<resources-sampler-ycbcr-conversion-format-features, Sampler
+    Ycbcr Conversion Format Features>> section, and update
+    elink:VkFormatFeatureFlagBits and valid usage statements for
+    slink:VkSamplerCreateInfo and slink:VkSamplerYcbcrConversionCreateInfo
+    to refer to it (internal issue 1963).
+  * Comment out reserved but unused ename:VK_ACCESS_RESERVED_31_BIT_KHR to
+    avoid generator script warnings (internal issue 2016).
+  * Fix some `<<VK_KHR_ray_tracing>>` valid usage IDs that were broken in
+    the 1.2.135 update (internal issue 2044).
+  * Remove `const` qualifier from
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:pNext
+    in `vk.xml` (internal issue 2047).
+  * Remove `flowRoot` elements supported only by Inkscape from some of the
+    images, and update a couple to 96 DPI from 90 DPI due to current
+    Inkscape's insistence. This reduces warnings from prawn-svg during PDF
+    builds (internal issue 2053).
+  * Remove reference in the <<devsandqueues-lost-device, Lost Device>>
+    section to a non-existent list of functions returning
+    ename:VK_ERROR_DEVICE_LOST (internal merge request 3667).
+  * Add valid usage statements to slink:VkImageViewCreateInfo for cube and
+    cube array image view (internal merge request 3682).
+  * Remove redundant valid usage statement 00228 from flink:vkCmdBlitImage
+    (internal merge request 3684).
+  * Document the Khronos-provided Docker image, whose use is recommended
+    when building documents and generated files from this repository
+    (internal merge request 3686).
+  * Rename ename:VK_PIPELINE_COMPILE_REQUIRED_EXT from
+    ename:VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT and add an alias from the
+    old name, since it is not actually an error code. Add it to the
+    `successcodes` attributes of appropriate commands in `vk.xml` (internal
+    merge request 3687).
+
+-----------------------------------------------------
+
+Change log for March 17, 2020 Vulkan 1.2.135 spec update:
+
+  * Update release number to 135 for this update.
+
+GitHub Issues:
+
+  * Add missing dependencies of slink:VkExportMemoryWin32HandleInfoKHR on
+    slink:VkExportMemoryAllocateInfo in the slink:VkMemoryAllocateInfo
+    pname:pNext chain; slink:VkExportFenceWin32HandleInfoKHR on
+    slink:VkExportFenceCreateInfo in the slink:VkFenceCreateInfo pname:pNext
+    chain; and slink:VkExportSemaphoreWin32HandleInfoKHR on
+    slink:VkExportSemaphoreCreateInfo in the slink:VkSemaphoreCreateInfo
+    pname:pNext chain (public issue 1095).
+  * Update the <<spirvenv-module-validation, Validation Rules within a
+    Module>> section of the SPIR-V environment appendix to allow the
+    code:PhysicalStorageBuffer64 addressing model (public issue 1199).
+  * Fix markup in parameters section of
+    flink:vkGetPhysicalDeviceXcbPresentationSupportKHR (public pull request
+    1201).
+  * Amend rules in the <<extensions-vendor-id, Registering a Vendor ID with
+    Khronos>> section of the style guide to allow other Khronos APIs such as
+    OpenCL to reserve vendor IDs here so they can be shared with those APIs
+    (public KhronosGroup/OpenCL-Docs pull request 203).
+
+Internal Issues:
+
+  * Clarify layer loading order for slink:VkInstanceCreateInfo and in the
+    <<extendingvulkan-layers, Layers>> chapter following the specification
+    of slink:VkLayerProperties (internal issue 1986).
+  * Simplify markup for SPIR-V versions required by different Vulkan
+    versions in the <<spirvenv, Vulkan Environment for SPIR-V>> appendix
+    (internal issue 2011).
+  * Rename sname:VkQueryPoolCreateInfoINTEL to
+    slink:VkQueryPoolPerformanceQueryCreateInfoINTEL in the
+    `<<VK_INTEL_performance_query>>` extension (internal issue 2022).
+  * Add ename:VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT to
+    elink:VkValidationFeatureEnableEXT to specify that layers will process
+    code:debugPrintfEXT operations (internal issue 2023).
+  * Fix conflicting language in slink:VkSamplerYcbcrConversionCreateInfo
+    valid usage statement 01653 (internal merge request 3629).
+  * Add missing valid usage statement for slink:VkSparseImageMemoryBindInfo
+    to require slink:VkImage objects created with the
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag set (internal merge
+    request 3633).
+  * Remove redundant valid usage statement 00122 from flink:vkCmdCopyImage
+    (internal merge request 3643).
+  * Fix several places where `VULKAN_1_1` was used in Asciidoctor
+    conditional markup instead of `VK_VULKAN_1_1` (internal merge request
+    3654).
+  * Fix conditional markup around slink:VkImageViewCreateInfo valid usage
+    statement 01018 to ensure it doesn't overlap a similar valid usage
+    statement written for another combination of enabled extensions and
+    versions (internal merge request 3655).
+  * Remove redundant valid usage statement from flink:vkCmdCopyImage that
+    was already covered by statements for slink:VkImageCopy. Eventually this
+    will be inverted so the statements are located with flink:vkCmdCopyImage
+    but that requires more work and is deferred (internal merge request
+    3656).
+  * Clarify wording of slink:VkImageMemoryBarrier valid usage statement
+    01671 and add a missing statement (internal merge request 3657).
+  * Minor fixes to the style guide to bring it up to date with respect to
+    the Asciidoctor client, assignment of valid usage ID tags, and proper
+    placement of valid usage statements (internal merge request 3662).
+  * Add missing valid usage statements to slink:VkSubpassDescription2 based
+    on comparable statements for slink:VkSubpassDescription (internal merge
+    request 3663).
+
+New Extensions
+
+  * Ray Tracing package of extensions, including
+  ** `<<VK_KHR_deferred_host_operations>>`
+  ** `<<VK_KHR_pipeline_library>>`
+  ** `<<VK_KHR_ray_tracing>>`
+  * `<<VK_EXT_pipeline_creation_cache_control>>`
+  * `<<VK_NV_device_diagnostics_config>>`
+  * `<<VK_NV_device_generated_commands>>` (replacing
+    `VK_NVX_device_generated_commands`, which was an experimental vendor
+    extension and has been removed from the Specification and `vk.xml`).
+
+-----------------------------------------------------
+
+Change log for March 6, 2020 Vulkan 1.2.134 spec update:
+
+  * Update release number to 134 for this update.
+
+GitHub Issues:
+
+  * Fix flink:vkGetPhysicalDeviceToolPropertiesEXT implicit array valid
+    usage statements, rewrite for consistency, and explicitly state lifetime
+    of retrieved results (public pull request 1148).
+  * Change use of "`happens before`" to glossary term "`happens-before`"
+    (public pull request 1170).
+  * Use glossary terms "`release operation`" / "`acquire operation`" instead
+    of similar colloquial language (public pull request 1171).
+  * Fix minor spelling errors and duplicated words (public pull request
+    1174).
+  * Remove duplicate "`to`" word (public pull request 1176).
+  * Rephrase description of signaling / unsignaling for slink:VkEvent
+    (public pull request 1179).
+  * Update Asciidoctor extension handling of C arrow operator to avoid need
+    for escaping it in custom macros, and corresponding fixes to markup in
+    the spec and to the style guide (public pull request 1186).
+  * Move layout transition NOTE in the
+    <<synchronization-image-layout-transitions, Image Layout Transitions>>
+    section below the corresponding normative paragraph (public pull request
+    1190).
+  * Change the parent handle types of slink:VkDisplayKHR and
+    slink:VkDisplayModeKHR in `vk.xml` (public pull request 1194).
+  * Add missing `len` attribute for
+    flink:vkQueueSignalReleaseImageANDROID::pname:pWaitSemaphores parameter
+    in `vk.xml` (public pull request 1196).
+
+Internal Issues:
+
+  * Link to HTML preview of `SPV_KHR_non_semantic_info` link in the
+    `<<VK_KHR_shader_non_semantic_info>>` appendix, instead of Asciidoctor
+    source document (internal merge request 3614).
+  * Improve registry schema documentation description of allowed <enum> tags
+    inside <remove> tags (internal merge request 3614).
+
+  * Clarify behavior when reading or writing image formats with padding
+    ("`X`" components) in the "`Common Operation`" section of the <<copies>>
+    chapter, and that padding components are unused in the elink:VkFormat
+    description of such formats (internal issue 1122).
+  * Clarify that flink:vkGetDeviceProcAddr can be used for device-level
+    commands from instance extensions (internal issue 1960).
+  * Add a note to the <<primsrast-lines-bresenham, Bresenham Line Segment
+    Rasterization>> section clarifying that line rasterization does not
+    depend on sample locations (internal issue 1855).
+  * Add a new header macro dlink:VK_HEADER_VERSION_COMPLETE which provides
+    the complete version (major, minor, and patch/release) of the Vulkan
+    headers at compile time, and document the intended use cases for this
+    macro (internal issue 1990).
+  * Remove `optional` attribute from
+    slink:VkDebugUtilsObjectNameInfoEXT::pname:pObjectName in `vk.xml`,
+    making the string required (internal issue 2002).
+  * Add a missing `structextends` attribute for
+    slink:VkQueryPoolCreateInfoINTEL in `vk.xml` (internal merge request
+    3599).
+  * Clarify when implicit subpass dependencies are introduced in the
+    definition of slink:VkSubpassDependency (internal merge request 3603).
+  * Update several valid usage statements for flink:vkCmdResetQueryPool,
+    flink:vkCmdBeginQuery, and flink:vkCmdBeginQueryIndexedEXT which
+    interact with the presence of flink:vkCmdResetQueryPool commands in a
+    command buffer, and restrict the VUs to performance queries (internal
+    merge request 3604).
+  * Simplify a hard-to-parse sentence in the <<textures-RGB-sexp, RGB to
+    Shared Exponent Conversion>> section (internal merge request 3606).
+  * Add a `pdfwidth` attribute to markup for images inside tables, to work
+    around a crash occurring in recent versions of asciidoctor-pdf (internal
+    merge request 3626).
+
+New Extensions
+
+  * `<<VK_QCOM_render_pass_transform>>`
+
+-----------------------------------------------------
+
+Change log for February 15, 2020 Vulkan 1.2.133 spec update:
+
+  * Update release number to 133 for this update.
+
+GitHub Issues:
+
+  * Clarify language describing the <<commandbuffers-lifecycle, command
+    buffer lifecycle>> (public pull request 1152).
+  * Add anchor handles to chapters and VUID statements in the HTML outputs
+    (public pull request 1157).
+  * Update declaration of flink:vkCmdDrawIndexedIndirectCountAMD to alias
+    the core function rather than the KHR extension function (public pull
+    request 1165).
+  * Remove redundant NOTE discussing
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT after the description
+    of slink:VkCommandBufferInheritanceInfo.txt (public pull request 1167).
+  * Reserved vendor ID for Codeplay (public pull request #1167).
+
+Internal Issues:
+
+  * Restrict flag bits to bit positions 0..30. Add language to the
+    <<fundamentals-validusage-flags, Valid Usage for Flags>> section
+    expressing the restriction; to the registry documentation where the
+    `bitpos` attribute is defined; and finally, add a test to the generator
+    scripts that warns of bits 31 and higher being used (internal issue
+    1945).
+  * Clarify dynamic indexing of sampler objects in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section, to
+    be controlled by the same feature as sampled images (internal issue
+    1951).
+  * Make the effect of query reset commands requiring multiple passes to
+    complete explicit, by disallowing resets of the same query from the same
+    primary command buffer in the description of flink:vkCmdResetQueryPool
+    and the valid usage statements for ftext:vkCmdBeginQuery* (internal
+    issue 1965).
+  * Update interaction between elink:VkFormatFeatureFlagBits affecting
+    slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
+    (internal merge request 3533).
+  * Generate implicit pname:sType-unique valid usage statements from
+    `validitygenerator.py` even for pname:pNext chains with only a single
+    valid structure type, to enable validation layers work (internal merge
+    request 3534).
+  * Clean up wording of some flink:vkBindImageMemory valid usage statements
+    (internal merge request 3547).
+  * Mark the `VK_EXT_shader_subgroup_vote` and
+    `VK_EXT_shader_subgroup_ballot` as deprecated in `vk.xml` (internal
+    merge request 3558).
+  * Tighten slink:VkSamplerYcbcrConversionCreateInfo::pname:chromaFilter
+    valid usage restriction to be ename:VK_FILTER_NEAREST instead of
+    ename:VK_FILTER_LINAER, now that other filters exist (internal merge
+    request 3561).
+  * Add valid usage statements to slink:VkCommandPoolCreateInfo and
+    slink:VkDeviceQueueCreateInfo requiring that the corresponding
+    ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT and
+    ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT not be set if the protected
+    memory feature is not enabled. Previously this restriction was described
+    for the elink:VkCommandPoolCreateFlagBits and
+    elink:VkDeviceQueueCreateFlagBits types containing those flags, but not
+    in valid usage statements (internal merge request 3563).
+  * Fix conditional markup in the <<shaders-scope-device>> and
+    <<shaders-scope-queue-family>> sections to apply to Vulkan 1.2, as well
+    as `VK_KHR_vulkan_memory_model` (internal merge request 3570).
+  * Add performance queries to the list in the introduction of the
+    <<supported query types, queries>> chapter (internal merge request
+    3577).
+
+New Extensions
+
+  * `<<VK_KHR_shader_non_semantic_info>>`
+
+-----------------------------------------------------
+
+Change log for January 20, 2020 Vulkan 1.2.132 spec update:
+
+  * Update release number to 132 for this update.
+
+GitHub Issues:
+
+  * Move and reword a NOTE in the <<extendingvulkan-extensions, Extensions>>
+    section (public pull request 1131).
+  * Change redundant description of application error when using
+    flink:vkMapMemory into a non-normative NOTE (public pull request 1143).
+  * Remove redundant valid usage statement for flink:vkCmdExecuteCommands
+    (public pull request 1151).
+  * Remove redundant command buffer
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT language in
+    flink:vkCmdExecuteCommands valid usage statements (public pull request
+    1153).
+  * Add flink:vkBeginCommandBuffer valid usage statement to prevent using a
+    primary command buffer with both the
+    ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT and
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flags (public pull
+    request 1154).
+  * Add slink:VkRenderPassBeginInfo valid usage statements for
+    pname:renderArea (public pull request 1159).
+  * Add missing valid usage statements for flink:vkCmdBeginRenderPass when
+    `VK_KHR_separate_depth_stencil_layouts` is enabled (public
+    KhronosGroup/Vulkan-ValidationLayers issue 1470).
+
+Internal Issues:
+
+  * Clarify the definition of "`transfer commands`" for
+    <<synchronization-pipeline-stages-transfer,
+    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>> (internal issue 816).
+  * Clarify VK_ATTACHMENT_STORE_OP_DONT_CARE and reorder render pass chapter
+    (internal issue 1098).
+  * Clarify that <<pipelines-dynamic-state, Dynamic State>> can be set
+    before pipeline bind, and update valid usage statements accordingly
+    (internal issue 1624).
+  * Clarify the behavior of floating-point divide by zero in the
+    <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+    Instructions>> section (internal issue 1669).
+  * Add a valid usage statement to flink:vkCmdResetQueryPool which allows
+    not calling flink:vkCmdEndQuery if a prior flink:vmCmdResetQuery command
+    was called (internal issue 1700).
+  * Refactor specification of shader scopes into the new <<shaders-scope,
+    Scope>> section, and modify other references to this language
+    accordingly. Also describe quad invocation groups properly, with
+    derivative and quad group operations referencing the description, and
+    call out helper invocations as being able to become spontaneously
+    inactive. Simplify parts of the texturing chapter accordingly (internal
+    issues 1824, 1884, 1885, 1911).
+  * Stop claiming that semaphore signals are ordered between different queue
+    commands in the <<synchronization-signal-operation-order>> section
+    (internal merge request 3542).
+  * Move a valid usage statement from slink:VkBindImagePlaneMemoryInfo to
+    flink:vkBindImageMemory2, where it can be determined (internal merge
+    request 3548).
+
+-----------------------------------------------------
+
+Change log for January 15, 2020 Vulkan 1.2.131 spec update:
+
+  * Vulkan 1.2 initial release. Update release number to 131 for this
+    update. The patch number will be used for all Vulkan 1.x spec updates,
+    and continue to increment continuously from the previous Vulkan 1.1.130
+    update.
+
+GitHub Issues:
+
+  * Use the attributes {prime}, {YCbCr}, and {RGBprime} for better markup of
+    prime symbols, and ease of changing the markup for the commonly used
+    color format names (public issue 636).
+  * Expand the <<extendingvulkan-extensions-extensiondependencies, Extension
+    Dependencies>> section to acknowledge that extension dependencies are
+    usually, but not always satisfied by promoted versions of the
+    dependencies, and point to the extension and version appendices for more
+    information (public issue 1085).
+  * Clarify the <<features-shaderStorageImageExtendedFormats,
+    pname:shaderStorageImageExtendedFormats>> feature and add corresponding
+    formats to the <<formats-mandatory-features-2byte>>,
+    <<formats-mandatory-features-10bit>>,
+    <<formats-mandatory-features-16bit>>, and
+    <<formats-mandatory-features-64bit>> tables (public pull request 1098).
+  * Fix issue 2 wording in the `<<VK_KHR_surface>>` appendix (public pull
+    request 1100).
+  * Fix valid usage statements for
+    slink:VkSwapchainCreateInfoKhr::pname:minImageCount interactions with
+    `<<VK_KHR_shared_presentable_image>>` (public pull request 1101).
+  * Change the etext:VK_QUERY_SCOPE_* tokens in the
+    slink:VkPerformanceCounterScopeKHR to aliases of new
+    etext:VK_PERFORMANCE_COUNTER_SCOPE_* tokens, following the naming
+    conventions for enumerants (public issue 1130).
+  * Move `NV` extension pipe stages in elink:VkShaderStageFlagBits so they
+    are not included in enmae:VK_SHADER_STAGE_ALL_GRAPHICS (public pull
+    request 1133).
+  * Clarify the introduction of the "`Surface Queries`" section of the
+    <<wsi, Window System Integration>> chapter (public pull request 1135).
+  * Fix macros that consume codelike text like pname:foo\->bar (public pull
+    request 1149).
+
+Internal Issues:
+
+  * Add a new <<fundamentals-errorcodes, error code>>,
+    ename:VK_ERROR_UNKNOWN, that can be returned by any function that has
+    error returns (internal issue 1654).
+  * Remove the `<<VK_EXT_filter_cubic>>` requirement to cubic filter the
+    formats etext:*USCALED_PACKED32, etext:*SSCALED_PACKED32,
+    etext:*UINT_PACK32, and etext:*SINT_PACK32 in the
+    <<features-required-format-support, Required Format Support>> section
+    (internal issue 1934).
+  * Add a missing valid usage statement for
+    `<<VK_KHR_buffer_device_address>>` to slink:VkBindBufferMemoryInfo,
+    based on a similar statement for flink:vkBindBufferMemory (internal
+    merge request 3512).
+  * Fix some 'name:' macros to the correct 'pname:' (internal merge request
+    3529).
+  * Changes to script tools to stay relatively aligned with OpenXR scripts
+    (internal merge request 3530).
+
+-----------------------------------------------------
+
+Change log for December 9, 2019 Vulkan 1.1.130 spec update:
+
+  * Update release number to 130
+
+GitHub Issues:
+
+  * Mark slink:VkPipelineExecutableInternalRepresentationKHR as
+    `returnedonly` in `vk.xml` (public pull request 1092).
+  * Use 'slink:' in autogenerated valid usage statements instead of 'sname:'
+    (public pull request 1093).
+  * Split flink:vkGetQueryPoolResults VU statement 00815, which had
+    disallowed internal Asciidoctor conditionals into two (public issue
+    1094).
+  * Minor markup and editing fixes (public pull request 1099).
+  * Hide outdated valid usage statement when not building with timeline
+    semaphore extension (public pull request 1121).
+  * Add `<<VK_NV_glsl_shader>>` deprecation note (public pull request 1125).
+  * Add SPV and GLSL links to `<<VK_KHR_multiview>>` (public pull request
+    1128).
+
+Internal Issues:
+
+  * Clarify and consistently refer to the shader interface matching rules in
+    the <<interfaces, Shader Interfaces>> chapter (internal issue 1067).
+  * Clarify that inner array dimensions can't be sized with specialization
+    constants in the <<spirvenv-module-validation, Validation Rules within a
+    Module>> section (internal issue 1739).
+  * Use consistent markup for nested access (members, array references,
+    pointers) to structure members and function parameters (internal issues
+    503, 1765).
+  * Make slink:VkDeviceQueueInfo2::pname:flags optional in `vk.xml` to
+    remove an inappropriate valid usage statement (internal issue 1805).
+  * Fix API name assignment for valid usage blocks in `scripts/reflow.py`
+    (internal issue 1809).
+  * Make spec language more internally consistent by fixing remaining cases
+    where the term "`an instance of (structurename)`" was used, and
+    expanding the style guide rules for describing pname:pNext chains along
+    with corresponding edits it (internal issue 1814).
+  * Disallow code:Workgroup memory and execution scope and code:Workgroup
+    storage class in all but compute, mesh, and task shaders in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    section. There is an exception for code:Workgroup execution scope in
+    tessellation control shaders because we do not have a more appropriate
+    scope for patch barriers (internal issue 1905).
+  * Restore 'Promoted to Vulkan 1.1 Core' comments in extension appendices,
+    which were accidentally removed in spec revision 1.1.129 (internal issue
+    1914).
+  * Add some minor markup fixes as well as new valid usage statements for
+    slink:VkAttachmentDescription, slink:VkAttachmentDescription2KHR, and
+    slink:VkAttachmentReference2KHR (internal merge request 3493).
+
+New Extensions
+
+  * `<<VK_EXT_tooling_info>>`
+
+-----------------------------------------------------
+
+Change log for November 25, 2019 Vulkan 1.1.129 spec update:
+
+  * Update release number to 129
+
+GitHub Issues:
+
+  * Rename "`pixel shaders`" to "`fragment shaders`" (public issue 1082).
+  * Fix some markup in external semaphore extension (public pull request
+    1083).
+  * Fix styleguide em-dash example (public pull request 1088).
+  * Update `.gitignore` to include some additional static refpages (public
+    pull request 1089).
+  * Restructure query language in <<wsi, Window System Integration (WSI)>>
+    chapter - split into sections, reordered orphaned paragraphs, simplify
+    language (public pull request 1090).
+
+Internal Issues:
+
+  * Remove NVIDIA contributors from `<<VK_KHR_performance_query>>` (internal
+    merge request 3481).
+
+New Extensions
+
+  * `<<VK_KHR_buffer_device_address>>`
+
+-----------------------------------------------------
+
+Change log for November 18, 2019 Vulkan 1.1.128 spec update:
+
+  * Update release number to 128
+
+GitHub Issues:
+
+  * Fix valid usage condition for
+    flink:vkAllocationMemory::pname:pAllocateInfo (public issue 1032).
+  * Change explicit valid usage statements for queue transfer operations in
+    flink:vkCmdWaitEvents and flink:vkCmdPipelineBarrier, and corresponding
+    language in the <<synchronization-queue-transfers-release>> section, to
+    incorporate access masks and clarify when queue transfer ops occur
+    (public pull request 1046).
+  * Ignore disabled bits in valid usage statements (public pull request
+    1062).
+  * Fix some broken HTML links (public pull request 1063).
+  * Change ename:VK_PIPELINE_CREATE_DISPATCH_BASE to an alias of new token
+    ename:VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, to follow the naming
+    conventions for bitmasks (public issue 1075).
+
+Internal Issues:
+
+  * Add valid usage statement to flink:vkQueueSubmit for attempted use of a
+    resource currently not available for use (internal issue 1751).
+  * Make it invalid for an implementation to return anything but
+    ename:VK_SUCCESS for the flink:vkFreeDescriptorSets and
+    flink:vkResetDescriptorPool commands (internal issue 1781).
+  * Add a note clarifying the relationship between
+    code:SubgroupLocalInvocationId and code:LocalInvocationId or
+    code:LocalInvocationIndex to the <<interfaces-builtin-variables-sgli,
+    code:SubgroupLocalInvocationId>> description (internal issue 1810).
+  * Add valid usage statements for scissor regions to
+    slink:VkPipelineViewportStateCreateInfo based on similar statements for
+    flink:vkCmdSetScissor, and generalize all these VUs to cover each
+    element of the pname:pScissors array (internal issue 1861).
+  * Fix the basis matrix for <<textures-texel-cubic-filtering, Texel Cubic
+    Filtering>> (internal issue 1878).
+  * Make the
+    slink:VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT::pname:pNext
+    member non-const, like other feature structures (internal issue 1880).
+  * Document that aggregate load/store may access padding bytes in the
+    <<memory-model-memory-location, Memory Location>> appendix (internal
+    cross-api/memory-model issue 113).
+  * Clarify in the description of elink:VkDescriptorBindingFlagBitsEXT that
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT descriptors allow
+    for updating different descriptors in the same set at the same time on
+    multiple threads (internal merge request 3419).
+  * Clarify that resolve attachments don't need to be compatible in the
+    <<renderpass-compatibility, Render Pass Compatibility>> section
+    (internal merge request 3422).
+  * Add Visual Studio folders to `.gitignore` (internal merge request 3450).
+  * Add language to
+    slink:sname:VkPipelineCoverageModulationStateCreateInfoNV documenting
+    that coverage modulation has no effect when using the
+    ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV reduction mode, clarifying
+    an interaction with `<<VK_NV_coverage_reduction_mode>>` (internal merge
+    request 3456).
+
+New Extensions
+
+  * `<<VK_KHR_performance_query>>`
+
+-----------------------------------------------------
+
+Change log for November 4, 2019 Vulkan 1.1.127 spec update:
+
+  * Update release number to 127
+
+GitHub Issues:
+
+  * Consistently use the feature name pname:pipelineExecutableInfo as found
+    in `vk.xml` and the generated header files, instead of
+    pname:pipelineExecutableProperties as sometimes used in the
+    specification text (public issue 1061).
+  * Clarify the definition of the code:PrimitiveId returned by a
+    `<<VK_NV_ray_tracing>>` shader (public issue 1068).
+
+Internal Issues:
+
+  * Remove unused `draw_renderpass_validation.txt` valid usage text
+    (internal issue 1869).
+  * Require <<features-features-timelineSemaphore, pname:timelineSemaphore>>
+    if the `<<VK_KHR_timeline_semaphore>>` extension is supported (internal
+    issue 1873).
+  * Fix typos in slink:VkBindBufferMemoryInfo valid usage statement 02791
+    and various slink:VkSparseMemoryBind VUs (internal merge request 3411).
+  * Minor non-semantic markup and diagram fixes (internal merge request
+    3417).
+  * Clarify that <<interfaces-iointerfaces-locations, Location>> values are
+    physical slots, not a virtual table that just imposes an overall maximum
+    on the number of locations that can be used (internal merge request
+    3426).
+  * Add links to GLSL specs from the `<<VK_KHR_shader_clock>>` appendix, as
+    well as expected mappings for GLSL builtins (internal merge request
+    3429).
+
+New Extensions
+
+  * `<<VK_KHR_separate_depth_stencil_layouts>>`
+
+-----------------------------------------------------
+
+Change log for October 21, 2019 Vulkan 1.1.126 spec update:
+
+  * Update release number to 126
+
+GitHub Issues:
+
+  * Update the elink:VkAccessFlagBits etext:VK_ACCESS_MEMORY_* flags
+    definition to make clear that ename:VK_ACCESS_MEMORY_READ_BIT and
+    ename:VK_ACCESS_MEMORY_WRITE_BIT are meant to be equivalent to setting
+    all applicable etext:READ and etext:WRITE access flags, and update the
+    <<synchronization-access-types-supported, supported access types>> table
+    accordingly (public pull request 1014).
+  * Remove misleading NOTE in the <<synchronization-dependencies-chains>>
+    section (public pull request 1048).
+  * Clarify the memory mapping NOTE about invalidation described for
+    flink:vkInvalidateMappedMemoryRanges (public pull request 1049).
+  * Fix label for flink:vkCmdWaitEvents VUID 02803 (public pull request
+    1056).
+  * Styleguide fixes to several NOTES in the <<synchronization>> chapter
+    (public pull request 1057).
+  * Markup fix to <<features-features-timelineSemaphore>> section (public
+    pull request 1058).
+  * Convert some external links to `https` protocol (public pull request
+    1064).
+  * Remove unsupported nested links inside table captions (public pull
+    request 1067 + followon tweak to make 'allchecks' target pass).
+
+Internal Issues:
+
+  * Restrict the SPIR-V code:Invariant decoration to only be used with
+    code:Output variables in the <<spirvenv-module-validation, Validation
+    Rules within a Module>> section (internal issue 1832).
+  * Clarify that the <<features-independentResolve, independentResolve>>
+    feature implies support for the <<features-independentResolveNone,
+    independentResolveNone>> feature (internal issue 1848).
+  * Clarify self-contradictory language for slink:VkSubpassDescription to
+    say that resolves only happen within the render area (internal issue
+    1850).
+  * Add valid usage statements for slink:VkMemoryAllocateInfo and
+    corresponding language to elink:VkExternalMemoryFeatureFlagBitsKHR to
+    restrict implementations and applications from using both an external
+    host memory allocation and dedicated allocation (internal merge request
+    3375).
+
+-----------------------------------------------------
+
+Change log for October 13, 2019 Vulkan 1.1.125 spec update:
+
+  * Update release number to 125.
+
+GitHub Issues:
+
+  * Allow slink:VkRenderPassFragmentDensityMapCreateInfoEXT to extend
+    slink:VkRenderPassCreateInfo2KHR in `vk.xml` (public issue 1027).
+  * Fix markup in `<<VK_EXT_external_memory_dma_buf>>` appendix (public pull
+    request 1051).
+  * Update .gitignore (public pull request 1052).
+
+Internal Issues:
+
+  * Disallowed slink:VkEvent from participating in queue family ownership
+    transfers in the <<devsandqueues-index, Queue Family Index>> section
+    (internal issue 1691).
+  * Relax language describing default NT handle access rights for
+    slink:VkExportMemoryWin32HandleInfoKHR and
+    slink:VkExportSemaphoreWin32HandleInfoKHR (internal issue 1838).
+  * Fix markup for slink:VkDeviceCreateInfo valid usage statement 00372 to
+    remove imbedded Asciidoctor conditionals by splitting it into two VUs
+    (internal issue 1846).
+  * Clarify lifetime of samplers used as immutable samplers in
+    slink:VkDescriptorSetLayoutBinding (internal issue 1849).
+  * Add a valid usage statement prohibiting flink:vkCmdBeginQuery on
+    timestamp queries (internal issue 1851).
+  * Correct some <<Precision of GLSL.std.450 Instructions, SPIR-V
+    instruction precisions>> (internal merge request 3391).
+  * Fix a typo in flink:vkQueueBindSparse valid usage statement 03245
+    (internal merge request 3394).
+
+New Extensions
+
+  * `<<VK_KHR_spirv_1_4>>`
+
+-----------------------------------------------------
+
+Change log for October 6, 2019 Vulkan 1.1.124 spec update:
+
+  * Update release number to 124.
+
+GitHub Issues:
+
+  * Fix Makefile SPECREMARK macro to work when not building in a git tree
+    (public issue 992).
+  * Ignore pname:aspectMask for unused attachments in
+    slink:VkSubpassDescription2KHR valid usage statements (public pull
+    request 1028).
+  * Minor markup / spelling fixes (public pull requests 1035, 1045).
+
+Internal Issues:
+
+  * Fix markup in Valid Usage statement for slink:VkCreateFramebuffer
+    (internal issue 1823).
+  * Add a new <<synchronization-signal-operation-order, _signal operation
+    order_>> section to the synchronization chapter which describes in
+    detail the ordering guarantees provided by the API between fence and
+    semaphore signal operations (internal merge request 3368).
+  * Move generated `appendix/meta/` files into the Makefile GENERATED
+    directory (internal merge request 3381).
+
+New Extensions
+
+  * `<<VK_KHR_shader_clock>>`
+  * `<<VK_KHR_timeline_semaphore>>`
+
+-----------------------------------------------------
+
+Change log for September 15, 2019 Vulkan 1.1.123 spec update:
+
+  * Update release number to 123.
+
+GitHub Issues:
+
+  * Add missing aspect mask descriptions to elink:VkImageAspectFlagBits
+    (public pull request 1029).
+  * Modify validity generator script to not check validity of ignored values
+    in same-parent valid usage statements (public pull request 1030).
+  * Make slink:VkDescriptorUpdateTemplateCreateInfo::pname:descriptorSetLayout
+    `noautovalidity` in `vk.xml` (public pull request 1031).
+  * Fix footnote markup in the <<vkGetDeviceProcAddr behavior>> table
+    (public pull request 1034).
+
+Internal Issues:
+
+  * Require that <<interfaces-builtin-variables-sgs, code:SubgroupSize>> be
+    a power of two (internal issue 1499).
+  * Clarify that shaderFloat64 and shaderInt64 enable all storage classes,
+    while shaderFloat16, shaderInt8, and shaderInt16 only enable
+    non-interface storage classes. in the <<features-shaderFloat64>>,
+    <<features-shaderInt64>>, and <<features-shaderInt16>> descriptions and
+    for slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR (internal issue
+    1582).
+  * Fix broken Asciidoctor conditional logic in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    section, and add style guide language to help avoid this problem in the
+    future (internal issue 1808).
+  * Modify VUID assignment script to use the first API include in a block as
+    part of the VUID name rather than the last one, so the VUID is based on
+    the promoted API name (internal issue 1809).
+  * Cleanup string descriptions to consistently refer to "`null-terminated
+    UTF-8`" strings (internal issue 1813).
+  * Clarify the purpose of the
+    slink:VkPhysicalDeviceLimits::ptext:maxDescriptorSet* limits (internal
+    merge request 3357).
+  * Fix the slink:VkPhysicalDeviceRayTracingPropertiesNV limits for
+    pname:maxGeometryCount, pname:maxInstanceCount, and
+    pname:maxTriangleCount in the <<limits-required, Required Limits>>
+    section (internal issue 3372).
+  * Update SPIR-V image op sign-matching rules in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    section, the <<formats-numericformat>> table, and the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section
+    (internal spirv/SPIR-V issue 332).
+
+New Extensions
+
+  * `<<VK_KHR_shader_subgroup_extended_types>>`
+  * `<<VK_GOOGLE_user_type>>`
+
+-----------------------------------------------------
+
+Change log for September 8, 2019 Vulkan 1.1.122 spec update:
+
+  * Update release number to 122.
+
+Internal Issues:
+
+  * Add style guide language on not using standalone `+` signs (internal
+    issue 736); not using leading whitespace for markup (internal issue
+    747); and on keeping descriptions of a single API in a contiguous block
+    of markup (internal issue 949), and apply them to the specification.
+  * Add a glossary definition of "`constant integral expression`", pointing
+    to the SPIR-V "`constant instruction`" definition (internal issue 1225).
+  * Many minor edits to improve writing style consistency and capture
+    additional style guidelines (internal issue 1553).
+  * Clarify that <<fragops-depth-write, depth writes are not performed>> if
+    there is no depth framebuffer attachment (internal issue 1771).
+  * Allow implementations to use rectangular line style of interpolation for
+    <<primsrast-lines-bresenham, wide Bresenham lines>>, though replicating
+    attributes is still preferred. Clarify that code:FragCoord is not
+    replicated (internal issue 1772).
+  * Resolve a contradiction in valid usage statements for
+    slink:VkImageCreateInfo and slink:VkImageStencilUsageCreateInfoEXT
+    (internal issue 1773).
+  * Add style guide discussion of markup for indented equations, and use
+    markup workaround for Asciidoctor 2 compatibility (internal issue 1793).
+  * Deprecate the `<<VK_EXT_validation_flags>>` extension in `vk.xml` and
+    the extension appendix (internal issue 1801).
+  * Add a new checker script `scripts/xml_consistency.py`. This is not
+    currently run as part of internal CI (internal merge request 3285).
+  * Correct "`an`" -> "`a`" prepositions where needed (internal merge
+    request 3334).
+  * Clarify that the <<features-uniformBufferStandardLayout,
+    pname:uniformBufferStandardLayout>> feature is only required when the
+    extension defining it is supported (internal merge request 3341).
+  * Bring scripts into closer sync with OpenXR, mainly through conversion of
+    comments to docstrings where appropriate, and add gen-scripts-docs.sh
+    (internal merge request 3324).
+  * Correct pname:maxDrawMeshTasksCount to 2^16^-1 in the <<limits-required,
+    Required Limits>> table (internal merge requests 3361).
+
+New Extensions
+
+  * `<<VK_IMG_format_pvrtc>>` (public issue 512).
+
+-----------------------------------------------------
+
+Change log for August 25, 2019 Vulkan 1.1.121 spec update:
+
+  * Update release number to 121.
+
+GitHub Issues:
+
+  * Add missing `structextends` attribute in `vk.xml` for
+    slink:VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR (public
+    issue 1018).
+  * Change attributes of flink:vkCmdCopyAccelerationStructureNV,
+    flink:vkCmdWriteAccelerationStructuresPropertiesNV,
+    flink:vkCmdBuildAccelerationStructureNV, and flink:vkCmdTraceRaysNV to
+    require that these commands execute outside renderpasses (public issue
+    1021).
+  * Add an issue to the `<<VK_EXT_buffer_device_address>>` appendix
+    discussing the introduction of new names and aliasing by equivalent old
+    names (public pull request 1024).
+
+Internal Issues:
+
+  * Protect the `VK_KHR_sampler_mirror_clamp_to_edge` extension with
+    Asciidoctor conditionals, and remove it from the core-only specification
+    builds, where it had previously been force-included in the Makefile. It
+    is now treated like any other extension (internal issue 1776).
+  * Edit some Asciidoctor anchor names starting with `features-features-` to
+    just start with `features-`, since the old chapters was split into 3
+    pieces. There are still some mild naming inconsistencies with anchors
+    which may be addressed in the future (internal issue 1792).
+  * Add `KHR` alias for the non-suffixed extension token
+    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, for compatibility
+    with naming rules for extensions (internal issue 1796).
+  * Clarify requirements for external memory in NOTEs for
+    sname:VkExternalMemoryBufferCreateInfo, and valid usage statements for
+    flink:vkBindBufferMemory, slink:VkBindBufferMemoryInfo,
+    flink:vkBindImageMemory, and slink:VkBindImageMemoryInfo (internal merge
+    request 3301).
+  * Make extension version numbers in `vk.xml` and extension appendices
+    consistent. In a few cases, we could not recover history at this
+    granularity, and left the summary of a version's change undefined
+    (internal merge request 3323).
+  * Fix invocation of `CodeInlineMacro` in the Ruby extension backing the
+    `code:` macro, which was delegating to the wrong base class (internal
+    merge request 3331).
+  * Modify `reg.py` to do a better job of recognizing equivalent <enum>
+    definitions.
+  * Add a `sortorder` attribute to XML feature and extension tags.
+
+New Extensions
+
+  * `<<VK_AMD_device_coherent_memory>>`
+
+-----------------------------------------------------
+
+Change log for August 17, 2019 Vulkan 1.1.120 spec update:
+
+  * Update release number to 120.
+
+GitHub Issues:
+
+  * Add slink:VkAccelerationStructureTypeNV explicitly to extension XML for
+    `<<VK_NV_ray_tracing>>` (public issue 848).
+  * Add missing valid usage statements for feature flags in
+    slink:VkCommandBufferInheritanceInfo (public pull request 1017).
+
+Internal Issues:
+
+  * Clarify behavior of non-premultiplied destination colors for
+    `<<VK_EXT_blend_operation_advanced>>` prior to the definition of
+    slink:VkBlendOverlapEXT (internal issue 1766).
+  * Fix the confusing phrasing "`no other queue must: be (doing something)`"
+    for flink:vkQueuePresentKHR, flink:vkQueueSubmit, and
+    flink:vkQueueBindSparse (internal issue 1774).
+  * Add `<<VK_EXT_validation_features>>` flag to enable best practices
+    checks, which will soon be available in the validation layer (internal
+    issue 1779).
+  * Specify allowed characters for VUID tag name components in the style
+    guide (internal issue 1788).
+  * Update links to SPIR-V extension specifications, and parameterize their
+    markup in case the URLs change in the future (internal issue 1797).
+  * Fix an off-by-one error in the valid usage statement for
+    slink:VkPipelineExecutableInfoKHR (internal merge request 3303).
+  * Clean up markup indentation not matching the style guide (internal merge
+    request 3314).
+  * Minor script updates to allow refpage aliases, generate a dynamic TOC
+    for refpages, generate Apache rewrite rules for aliases, open external
+    links from refpages in a new window, and synchronize with the OpenCL
+    scripts. This will shortly enable a paned navigation setup for refpages,
+    similar to the OpenCL 2.2 refpages (internal merge request 3322).
+  * Script updates to add tests to the checker, refactor and reformat code,
+    generate better text for some valid usage statements, use more Pythonic
+    idioms, and synchronize with the OpenXR scripts (internal merge request
+    3239).
+  * Script updates and minor fixes in spec language to not raise checker
+    errors for refpage markup of pages not existing in the API, such as
+    VKAPI_NO_STDINT_H. Remove corresponding suppression of some
+    check_spec_links.py tests from .gitlab-ci.yml and 'allchecks' target
+    (internal merge request 3315).
+
+-----------------------------------------------------
+
+Change log for August 11, 2019 Vulkan 1.1.119 spec update:
+
+  * Update release number to 119.
+  * A new extension was accidentally left out of the 1.1.118 spec update.
+    This update corrects that oversight.
+
+New Extensions:
+
+  * `<<VK_KHR_pipeline_executable_properties>>`
+
+-----------------------------------------------------
+
+Change log for August 11, 2019 Vulkan 1.1.118 spec update:
+
+  * Update release number to 118.
+
+GitHub Issues:
+
+  * Update `BUILD.adoc` to specifically require Asciidoctor 1.5.8, and make
+    that change to the gitlab CI script (public issue 968).
+  * Remove redundant slink:VkSubpassDependency and
+    slink:VkSubpassDependency2KHR valid usage statements
+    (public pull request 995).
+  * Clarify the <<vkGetInstanceProcAddr behavior>> and <<vkGetDeviceProcAddr
+    behavior>> tables (public pull request 1004).
+  * Fix use of nonexistent
+    slink:VkSamplerYcbcrConversionImageFormatProperties::pname:maxCombinedImageSamplerDescriptorCount
+    (public pull request 1010).
+  * Use compatible pathlib for python2 (public pull request 1012).
+
+Internal Issues:
+
+  * Mark the <<VK_KHR_vulkan_memory_model>> extension as no longer
+    provisional in `vk.xml` (internal issue 1369).
+  * Clarify that use-defined code:Input and code:Output variables cannot be
+    code:Boolean in the <<interfaces-iointerfaces-user, User-defined
+    Variable Interface>> section (internal issue 1663).
+  * Fix naming inconsistencies in
+    slink:VkPhysicalDevicePerformanceQueryFeaturesKHR,
+    slink:VkPhysicalDevicePerformanceQueryPropertiesKHR,
+    slink:VkQueryPoolPerformanceCreateInfoKHR, and associated enumerants
+    (internal issue 1746).
+  * Use ACM reference style for normative references (internal merge request
+    3256).
+  * Explicitly list the features changed in Vulkan 1.1 in the
+    <<features-requirements, Feature Requirements>> section and the
+    <<versions, Core Revisions (Informative)>> appendix (internal merge
+    request 3274).
+  * Add the slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure
+    to the <<VK_EXT_subgroup_size_control>> extension, which was
+    accidentally omitted in the initial release of the extension (internal
+    merge request 3287).
+  * Add missing slink:VkImageUsageFlag description for
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT (internal merge
+    request 3292).
+  * Add valid usage statements to slink:VkAccelerationStructureInfoNV and
+    flink:vkGetAccelerationStructureHandleNV to clarify usage of
+    acceleration structure handle and geometries (internal merge request
+    3292).
+
+New Extensions:
+
+  * `<<VK_AMD_shader_core_properties2>>`
+  * `<<VK_AMD_pipeline_compiler_control>>`
+
+-----------------------------------------------------
+
+Change log for July 28, 2019 Vulkan 1.1.117 spec update:
+
+  * Update release number to 117.
+
+GitHub Issues:
+
+  * Add ename:VK_STENCIL_FACE_FRONT_AND_BACK for naming consistency, and
+    alias the old ename:VK_STENCIL_FRONT_AND_BACK for backwards
+    compatibility (public issue 991).
+  * Fix minor issues with valid usage statements for
+    flink:vkCreateFramebuffer, slink:VkFramebufferCreateInfo, and
+    slink:VkRenderPassBeginInfo when the `<<VK_KHR_imageless_framebuffer>>`
+    extension is enabled (public issue 998).
+  * Clarify the subpass dependency requirement in the
+    <<renderpass-layout-transitions>> section to eliminate the need for a
+    subpass dependency for either the same or different layouts as long as
+    they're both read-only (relates to
+    https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/948).
+
+Internal Issues:
+
+  * Document that <<extendingvulkan-compatibility-promotion, backwards
+    compatibility aliases are not promoted>> as part of promoting an
+    extension (internal issue 1677).
+  * Update VK_ANDROID_native_buffer extension to spec version 8 (internal
+    issue 1753).
+  * Add missing section to the <<VK_KHR_shader_controls_v4_incompatibility,
+    VK_KHR_shader_float_controls>> extension appendix describing
+    the reason for the breaking API change in version 4 of the extension,
+    and correct the version to 4 in `vk.xml` (internal merge request
+    3275).
+  * Add valid usage statements to slink:VkAccelerationStructureInfoNV
+    requiring the ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag for
+    buffers used in acceleration structure building.
+
+New Extensions:
+
+  * `<<VK_EXT_line_rasterization>>`
+  * `<<VK_EXT_texture_compression_astc_hdr>>`
+  * `<<VK_EXT_index_type_uint8>>`
+
+-----------------------------------------------------
+
+Change log for July 20, 2019 Vulkan 1.1.116 spec update:
+
+  * Happy 50th Lunar Landing Day!
+  * Update release number to 116.
+
+Internal Issues:
+
+  * Clarify that flink:vkCmdBeginQuery is the same as
+    flink:vkCmdBeginQueryIndexEXT with index = 0, and that
+    flink:vkCmdEndQuery is the same as flink:vkCmdEndQueryIndexEXT with
+    index = 0 (internal issue 1735).
+  * Clarify that when copying the depth aspect between buffers and images
+    via slink:VkBufferImage Copy, the depth values in buffer memory must be
+    in range if the `<<VK_EXT_depth_range_unrestricted>>` extension is not
+    enabled (internal issue 1737).
+  * Minor language tweaks in the <<spirvenv-module-validation, Validation
+    Rules within a Module>> section (internal issue 1744).
+  * Change the slink:VkPhysicalDeviceFloatControlsPropertiesKHR structure in
+    the `<<VK_KHR_shader_controls>>` extension. This is a rare case of
+    breaking the interface of an existing extension to acknowledge the
+    reality of divergent vendor implementations that could not be described
+    properly otherwise, and the breaking change is considered acceptable
+    given the expected low use of the extension (internal issue 1734).
+    Specific changes:
+  ** Added the slink:VkShaderFloatControlsIndependenceKHR enumeration to
+     describe the three possible behaviors.
+  ** Renamed pname:separateDenormSettings to
+     pname:denormBehaviorIndependence.
+  ** Renamed pname:separateRoundingModeSettings to
+     pname:roundingModeIndependence
+  * Add a missing valid usage statement for
+    slink:VkQueryPoolCreateInfo::pname:queryCount (internal issue 1742).
+  * Update the `<<VK_NV_shading_rate_image>>` appendix to list all
+    interfaces defined by the extension.
+  * Add a valid usage statement to
+    slink:VkWriteDescriptorSetAccelerationStructureNV to clarify that
+    acceleration structure descriptors must be top level structures.
+
+New Extensions:
+
+  * `<<VK_EXT_subgroup_size_control>>`
+
+-----------------------------------------------------
+
+Change log for July 14, 2019 Vulkan 1.1.115 spec update:
+
+  * Update release number to 115.
+
+GitHub Issues:
+
+  * Add valid usage statements to slink:VkWriteDescriptorSet and
+    slink:VkCopyDescriptorSet specifying that updating immutable descriptors
+    with ename:VK_DESCRIPTOR_TYPE_SAMPLER is invalid, and that updating
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER ignores the update's
+    samplers (public issue 985).
+  * Document that the `manhtmlpages` target requires building with all
+    extensions enabled, in `BUILD.adoc` (public issue 992).
+  * Fix reference to the wrong subpass in valid usage statement for
+    slink:VkRenderPassCreateInfo (public pull request 994).
+
+Internal Issues:
+
+  * Rename slink:VkPhysicalDeviceShaderIntegerFunctions2INTEL and
+    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL
+    for consistency with global naming conventions, and to help code
+    generation in other projects (internal issue 1685).
+  * Update valid usage statements for image code:Offset / code:ConstOffset
+    usage in the <<textures-gather, Texel Gathering>> and
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    sections, and for the <<limits-minTexelGatherOffset>> and
+    <<limits-maxTexelGatherOffset>> limits (internal issue 1723).
+  * Require code:code:OpGroupNonUniformBroadcast to take a constant `Id`
+    operand in the <<spirvenv-module-validation, Validation Rules within a
+    Module>> sections (internal issue 1726).
+  * Note that the swapchain specified in slink:VkImageSwapchainCreateInfoKHR
+    when creating an image must match the one specified in
+    slink:VkBindImageMemorySwapchainInfoKHR when binding memory to the image
+    (internal issue 1729).
+  * Remove stext:KHR suffix from some structure cross-references that were
+    promoted to Vulkan 1.1 (internal issue 1730).
+  * Fix structure name in `structextends` attribute for
+    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT in `vk.xml`
+    (internal issue 1740).
+  * Fix an error in the code:ClipColor() pseudocode for
+    <<VK_EXT_blend_operation_advanced>> (internal issue 1741).
+  * Add a row for
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV to the
+    description of elink:VkQueryType, and make a few related minor text
+    cleanups.
+  * Rename slink:VkPhysicalDeviceFloat16Int8FeaturesKHR to
+    slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR for consistency,
+    retaining aliases of the old structure name and structure type enum for
+    backwards compatibility.
+
+-----------------------------------------------------
+
+Change log for July 7, 2019 Vulkan 1.1.114 spec update:
+
+  * Update release number to 114.
+
+Internal Issues:
+
+  * Fix extension appendix for `<<VK_INTEL_performance_query>>` to remove
+    duplicate citation of ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL
+    (internal merge request 3234).
+
+New Extensions:
+
+  * `<<VK_KHR_imageless_framebuffer>>`
+
+-----------------------------------------------------
+
+Change log for June 30, 2019 Vulkan 1.1.113 spec update:
+
+  * Update release number to 113.
+
+GitHub Issues:
+
+  * Fix typo in `<<VK_EXT_global_priority>>` appendix (public issue 979).
+
+Internal Issues:
+
+  * Expand the explanation of
+    slink:VkSamplerYcbcrConversionImageFormatPropertiesKHR::pname:combinedImageSamplerDescriptorCount,
+    and explain how it interacts with slink:VkWriteDescriptorSet,
+    slink:VkDescriptorSetLayoutBinding::pname:descriptorCount, and
+    slink:VkDescriptorPoolSize::pname:descriptorCount (internal issue 1643).
+  * Clarify restrictions on components for code:OpImageGather in the
+    <<spirvenv-module-validation, Validation Rules within a Module>> section
+    (internal issue 1707).
+  * Clarify the descriptions of <<limits-computeUnitsPerShaderArray,
+    pname:computeUnitsPerShaderArray>> and <<limits-wavefrontSize,
+    pname:wavefrontSize>> fields in
+    slink:VkPhysicalDeviceShaderCorePropertiesAMD.
+
+New Extensions:
+
+  * `<<VK_EXT_texel_buffer_alignment>>`
+  * `<<VK_EXT_shader_demote_to_helper_invocation>>`
+
+-----------------------------------------------------
+
+Change log for June 23, 2019 Vulkan 1.1.112 spec update:
+
+  * Update release number to 112.
+
+GitHub Issues:
+
+  * Clarify that it is possible to use the <<memory-host, Host Memory>>
+    pname:pfnReallocation callback to free memory in any case that
+    pname:pfnFree could be used (public issue 973).
+
+Internal Issues:
+
+  * Clarify range and precision of code:OpImageQueryLod in the discussion of
+    scale factor and level-of-detail operation in the
+    <<textures-normalized-operations, Normalized Texel Coordinate
+    Operations>> section (internal issues 926, 1719).
+  * Fix framebuffer layer valid usage statements for
+    slink:VkRenderPassCreateInfo, slink:VkRenderPassCreateInfo2KHR, and
+    slink:VkFramebufferCreateInfo (internal issue 1670).
+  * Refactor common valid usage statements for flink:vkCmdBeginQuery and
+    flink:vkCmdBeginQueryIndexedEXT (internal issue 1682).
+  * Prohibit the ename:ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW range from
+    being used in slink:VkSamplerYcbcrConversionCreateInfo for formats with
+    a bit depth less than 8 (internal issue 1688).
+  * Add missing interactions with `<<VK_EXT_host_query_reset_usage>>` in the
+    <<queries, Queries>> chapter (internal issue 1692).
+  * Clean up error output from the `optimize-pdf` build script on success.
+  * Fix an internal link to the <<spirvenv-correctly-rounded, Correctly
+    Rounded>> section in the SPIR-V appendix by adding and referring to that
+    anchor.
+  * Fix extension version numbers in `vk.xml` for `VK_EXT_filter_cubic` and
+    `VK_IMG_filter_cubic`.
+  * Specify division precision for negative numbers, and remove statement
+    that trigonometric functions have undefined precision, in the
+    <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+    Instructions>> appendix.
+
+-----------------------------------------------------
+
+Change log for June 10, 2019 Vulkan 1.1.111 spec update:
+
+  * Update release number to 111.
+
+GitHub Issues:
+
+  * Clean up flink:vkGetPhysicalDeviceSurfaceFormatsKHR and
+    flink:vkGetPhysicalDeviceSurfaceFormats2KHR to drop the
+    ename:VK_FORMAT_UNDEFINED case, require callers pass a supported
+    surface, and rearrange some validation-related language (public issue
+    207).
+  * Allow dynamic and nonuniform indexing of acceleration structures in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section
+    (public KhronosGroup/glslang issue 1766).
+
+Internal Issues:
+
+  * Clarify when images require the use of YCbCr samplers for
+    slink:VkWriteDescriptorSet and slink:VkImageViewCreateInfo (internal
+    issue 1639).
+  * Remove the "`block`" language around <<features-robustBufferAccess,
+    vectorizing and robust buffer access>> (internal issue 1642).
+  * Allow code:OpTypeImageFormat == code:Unknown for input attachments in
+    the <<interfaces-resources-descset, Descriptor Set Interface>> section
+    (internal issue 1645).
+  * Fix Asciidoctor conditionals around
+    ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT in the
+    <<fundamentals-errorcodes>> section (internal issue 1679).
+  * Remove error codes from `vk.xml` for
+    flink:vkUninitializePerformanceApiINTEL, which has a `void` return type
+    (internal issue 1704).
+  * Various subgroup-related fixes in the <<spirvenv-capabilities,
+    Capabilities>>, <<shaders-subgroup-arithmetic, Arithmetic Subgroup
+    Operations>>, <<shaders-subgroup-clustered, Clustered Subgroup
+    Operations>>, and <<shaders-subgroup-partitioned, Partitioned Subgroup
+    Operations>> sections (internal merge request 3164).
+  * Fix Asciidoctor markup affecting math rendering in the <<Precision of
+    core SPIR-V Instructions>> table (internal merge request 3166).
+  * Fix incorrect reference to flink:vkGetPhysicalDeviceFeatures2KHR in the
+    description of slink:VkPhysicalDeviceASTCDecodeFeaturesEXT (internal
+    merge request 3169).
+  * Fix a non-sentence in the introduction to the <<textures, Image
+    Operations Overview>> section (internal merge request 3184).
+  * Minor markup, grammar, and typo fixes for the
+    `<<NV_shader_sm_builtins>>` extension spec language (internal merge
+    request 3189).
+  * Clarify that 1D and 1D array format support is optional for cubic
+    filters, immediately following the <<formats-mandatory-features-astc,
+    Mandatory ASTC LDR format support>> table (internal merge request 3194).
+
+-----------------------------------------------------
+
+Change log for June 2, 2019 Vulkan 1.1.110 spec update:
+
+  * Update release number to 110.
+
+GitHub Issues:
+
+  * Fix typo (public pull request 972).
+  * Rename Pastel driver ID to SwiftShader (public pull request 974).
+
+New Extensions:
+
+  * `<<VK_EXT_fragment_shader_interlock>>`
+  * `<<VK_NV_shader_sm_builtins>>`
+
+-----------------------------------------------------
+
+Change log for May 24, 2019 Vulkan 1.1.109 spec update:
+
+  * Update release number to 109.
+
+GitHub Issues:
+
+  * Require matching for physical devices to be in a device group in the
+    <<devsandqueues-devices, Devices>> section (public issue 695).
+  * Fix typo in an equation in the <<fragmentdensitymap-fetch-density-value,
+    Fetch Density Value>> section (public issue 954).
+  * Fix styleguide links (public pull request 965).
+
+Internal Issues:
+
+  * Allow <<renderpass-compatibility, compatibility of single-subpass
+    renderpasses>> with different resolve attachments (internal issue 1464).
+  * Add some missing empty flags types to API spec so custom refpage
+    generation doesn't break (internal issue 1607).
+  * Add a "`SPIR-V Sampled Type`" column to the <<formats-numericformat,
+    Interpretation of Numeric Formats>> table, and clarify the requirement
+    that the code:OpTypeImage sampled type match the bound image's numeric
+    format for slink:VkClearColorValue and in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section
+    (internal issue 1646).
+  * Fix a typo in the <<tessellation-quad-tessellation, Quad Tessellation>>
+    section which should refer to rectangles, not triangles (internal issue
+    1667).
+  * Clarify the definition of time domains in elink:VkTimeDomainEXT
+    (internal merge request 3110).
+  * Add R10X6 and R12X4 formats to the <<formats-mandatory-features-10bit>>
+    table (internal merge request 3137).
+  * Don't require extern sync on wait/signal semaphores in `vk.xml` for
+    flink:vkQueueSubmit and flink:vkQueueBindSparse (internal merge request
+    3116).
+  * Improve phrasing of compute and mesh shader size related to
+    code:LocalSize and code:WorkgroupSize in
+    slink:VkPhysicalDeviceMeshShaderPropertiesNV and
+    slink:VkPhysicalDeviceMaintenance3Properties (internal merge request
+    3156).
+  * Make the flink:vkCmdBindShadingRateImageNV pname:imageView parameter
+    optional in `vk.xml` (internal merge request 3157).
+
+New Extensions:
+
+  * `<<VK_INTEL_performance_query>>`
+  * `<<VK_INTEL_shader_integer_functions2>>`
+
+-----------------------------------------------------
+
+Change log for May 13, 2019 Vulkan 1.1.108 spec update:
+
+  * Update release number to 108.
+
+Internal Issues:
+
+  * Clarify that only external resources can be bound to external memory in
+    valid usage statements for flink:vkBindBufferMemory,
+    flink:vkBindImageMemory, slink:VkSparseMemoryBind, and
+    slink:VkSparseImageMemoryBind (internal issue 1496).
+  * Move all `vk.xml`requirements for
+    flink:vkGetDeviceGroupSurfacePresentModes2EXT into
+    `<<VK_EXT_full_screen_exclusive>>` (internal issue 1622).
+  * Add some missing valid usage statements for
+    flink:vkCmdEndQueryIndexedEXT (internal issue 1638).
+  * Specify rules for defining "`New Flags and Bitmask Types`" in that
+    section of the style guide (internal issue 1649).
+  * Add a comment to the `vk.xml` extension block for
+    `VK_ANDROID_native_buffer` explaining why the extension is tagged
+    `"disabled"` (internal issue 1657).
+  * Fix typos in the description of slink:VkImageViewCreateInfo (internal
+    issue 1661).
+  * Modify valid usage statements for slink:VkImageViewCreateInfo to fix the
+    description about the restriction for pname:baseArrayLayer and
+    pname:layerCount from pname:extent.depth to the depth of mipmap level
+    while creating a 2D array image view on a 3D image.
+  * Forbid structures that contain opaque types (images or samplers) in the
+    SPIR-V <<spirvenv-module-validation, Validation Rules within a Module>>
+    section.
+  * Minor editorial changes for the `VK_EXT_swapchain_colorspace` extension
+    in the description of slink:VkColorSpace KHR and `vk.xml`, including:
+  ** Consistently specify which function (OETF or Inverse-EOTF) is being
+     defined;
+  ** Remove the Display P3 EOTF, since no other EOTFs are defined;
+  ** Include luminance range for the HLG OETF;
+  ** Remove a duplicated paragraph; and,
+  ** Rename ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, leaving the old
+     ename:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT token as an alias.
+
+New Extensions:
+
+  * `<<VK_NV_framebuffer_mixed_samples_coverage_reduction_mode>>`
+  * `<<VK_KHR_uniform_buffer_standard_layout>>`
+
+-----------------------------------------------------
+
+Change log for April 16, 2019 Vulkan 1.1.107 spec update:
+
+  * Update release number to 107.
+
+Public Issues:
+
+  * Fix revision date for the `<<VK_AMD_gpu_shader_half_float>>` appendix
+    (public issue 617).
+  * Make <<synchronization-pipeline-barriers-subpass-self-dependencies,
+    subpass self-dependencies>> less restrictive (public issue 777).
+  * Fix the `<<VK_EXT_full_screen_exclusive>>` dependency on
+    `<<VK_KHR_win32_surface>>` in `vk.xml` (public pull request 849).
+  * Remove single-page (`apispec.html`) refpage sub-targets from the
+    Makefile `allman` target and the build instructions. The target is still
+    present in the Makefile, but we have not been actively maintaining the
+    single-page document and do not promise it will work. The full
+    Specification and the individual API reference pages are what we support
+    and publish at present (public issue 949).
+
+Internal Issues:
+
+  * De-duplicate common valid usage statements shared by multiple commands
+    or structures by using Asciidoctor includes and dynamically assigning
+    part of the valid usage ID based on which command or structure they're
+    being applied to (internal issue 779).
+  * Add reference pages for constructs not part of the formal API, such as
+    platform calling convention macros, and script changes supporting them
+    This required suppressing some check_spec_links warning classes in order
+    to pass CI, until a more sophisticated fix can be done (internal issue
+    888).
+  * Change math notation for the elink:VkPrimitiveTopology descriptions to
+    use short forms `v` and `p` instead of `vertex` and `primitive`,
+    increasing legibility (internal issue 1611).
+  * Rewrite generated file includes relative to a globally specified path,
+    fixing some issues with refpage generation (internal issue 1630).
+  * Update contributor list for `<<VK_EXT_calibrated_timestamps>>`.
+  * Fix use of pathlin in `scripts/generator.py` so the script will work on
+    Windows under Python 3.5 (internal merge request 3107).
+  * Add missing conditionals around the
+    <<descriptorsets-accelerationstructure, Acceleration Structure>>
+    section (internal merge request 3108).
+  * More script synchronization with OpenXR spec repository (internal merge
+    request 3109).
+  * Mark the `<<VK_AMD_gpu_shader_half_float>>` and
+    `<<VK_AMD_gpu_shader_int16>>` extensions as deprecated in `vk.xml` and
+    the corresponding extension appendices (internal merge request 3112).
+
+New Extensions:
+
+  * `<<VK_EXT_headless_surface>>`
+
+-----------------------------------------------------
+
+Change log for April 7, 2019 Vulkan 1.1.106 spec update:
+
+  * Update release number to 106.
+
+Public Issues:
+
+  * Add searchbox and generate search index for the chunked HTML target.
+    Note that doing this requires several new toolchain components to build
+    the `chunked` target (public issue 578 / internal issue 1352).
+  * Remove descriptions of flink:vkCreateSampler sampler constraints which
+    were repeated in the valid usage statements (public pull request 648).
+  * Fix sense of conditional around a valid usage statement in the
+    <<copies>> chapter (public issue 942).
+
+Internal Issues:
+
+  * Add missing pname:extent.width and pname:extent.height valid usage
+    statements for flink:vkCmdClearAttachments (internal issue 1583).
+  * Fix some inconsistencies in structures and corresponding pname:sType
+    enumerant names by renaming
+    sname:VkPhysicalDeviceShaderDrawParameterFeatures ->
+    slink:slink:VkPhysicalDeviceShaderDrawParametersFeatures;
+    sname:VkPhysicalDeviceVariablePointerFeatures ->
+    slink:VkPhysicalDeviceVariablePointerFeatures;
+    sname:VkPhysicalDeviceVariablePointerFeaturesKHR ->
+    slink:VkPhysicalDeviceVariablePointerFeaturesKHR;
+    sname:VkPhysicalDeviceBufferAddressFeaturesEXT ->
+    slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
+    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
+    ->
+    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
+    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES ->
+    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
+    etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR ->
+    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR;
+    and etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
+    ->
+    ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT.
+    The old names are still available as aliases for backwards
+    compatibility. This change required introducing valid XML markup which
+    externally written XML processing scripts may need to be modified to
+    accommodate, to support multiple aliases of a single command or token
+    name (internal issue 1592).
+  * Add slink:VkDevice as the first parameter to flink:vkSetLocalDimmingAMD
+    (internal issue 1618).
+  * Improve CI header compilation tests to test all Vulkan platform
+    includes, using fake platform headers where needed, and change the
+    `allchecks` Makefile target to use the more comprehensive
+    `check_spec_links.py` script instead of the retired `checkinc` and
+    `checklinks` targets.
+  * Move descriptions of the ASTC compressed texture decode mode from the
+    <<appendix-compressedtex-astc,appendix>> to the recently updated
+    external Khronos Data Format Specification.
+  * Fix minor markup and spelling issues in the `VK_NV_ray_tracing`
+    extension.
+
+-----------------------------------------------------
+
+Change log for March 19, 2019 Vulkan 1.1.105 spec update (GDC edition):
+
+  * Update release number to 105.
+
+Public Issues:
+
+  * Fix contractions and other markup issues (public pull request 935).
+
+New Extensions:
+
+  * Google Games Platform
+  ** New `ggp` platform and associated header file `vulkan_ggp.h`
+  ** `VK_GGP_frame_token`
+  ** `VK_GGP_stream_descriptor_surface`
+
+-----------------------------------------------------
+
+Change log for March 18, 2019 Vulkan 1.1.104 spec update:
+
+  * Update release number to 104.
+
+Public Issues:
+
+  * Remove the incorrect line from "`Initial`" to "`Invalid`" state in the
+    <<commandbuffer-lifecycle-diagram, Lifecycle of a command buffer>>
+    diagram (public issue 881).
+  * Add Fuchsia platform to <<boilerplate-wsi-header-table, Window System
+    Extensions and Headers>> table (public pull request 933).
+  * Change the type of
+    slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress from
+    basetype:VkDeviceSize to basetype:VkDeviceAddress. These are both
+    typedefs of code:uint64_t, so it is an ABI-compatible change (public
+    issue 934).
+
+Internal Issues:
+
+  * Remove generated header files and update the CI tests to build a copy of
+    the headers for use by the hpp-generate / hpp-compile CI stages. Targets
+    to generate the headers will not be removed, but keeping these generated
+    files in the repository increased the frequency of conflicts between
+    branches when merging to master (internal issue 745).
+  * Reword "`undefined: behavior if *action*" to "`must: not do *action*`"
+    in the places the old terminology was used, and add a new
+    <<writing-undefined, Describing Undefined Behavior>> section of the
+    style guide to explain how to write such language in the future
+    (internal issue 1579).
+  * Move almost all Python scripts into the toplevel `scripts/` directory.
+    Apply extensive internal edits to clean up and simplify the scripts, and
+    try to follow PEP8 guidelines. Generalize the scripts with the use of a
+    Conventions object controlling many aspects of output generation, to
+    enable their use in other Khronos projects with similar requirements.
+    Autogenerate extension interface refpages (these are experimental and
+    may be retired going forward).
+
+New Extensions:
+
+  * `VK_AMD_display_native_hdr`
+  * `VK_EXT_full_screen_exclusive` (internal issue 1439)
+  * `VK_EXT_host_query_reset`
+  * `VK_EXT_pipeline_creation_feedback` (internal issue 1560)
+  * `VK_KHR_surface_protected_capabilities` (internal issue 1520)
+
+-----------------------------------------------------
+
+Change log for March 11, 2019 Vulkan 1.1.103 spec update:
+
+  * Update release number to 103.
+
+Public Issues:
+
+  * Remove (unnecessary) scoped modification order case from the memory
+    model <<memory-model-location-ordered, location-ordered>> definition
+    (public pull request 924).
+  * Add an <<memory-model-acyclicity, acyclicity>> axiom to the memory model
+    (public pull request 927).
+
+Internal Issues:
+
+  * Fix reversed logic of slink:VkFormatProperties discussion of multi-plane
+    formats and ename:VK_FORMAT_FEATURE_DISJOINT_BIT (internal issue 1493).
+  * Clarify how slink:VkImageStencilUsageCreateInfoEXT works, including new
+    valid usage statements for flink:vkCmdClearDepthStencilImage, and the
+    <<copies, Common Operation>> section of the Copy Commands chapter
+    (internal issue 1565).
+  * Update <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+    Instructions>> section to require that denorms be preserved by several
+    instructions that don't perform any mathematical operations (internal
+    issue 1584).
+  * Remove duplicate valid usage statement from flink:vkAcquireNextImageKHR
+    (internal merge request 3062).
+
+-----------------------------------------------------
+
+Change log for March 3, 2019 Vulkan 1.1.102 spec update:
+
+  * Update release number to 102.
+
+Public Issues:
+
+  * Simplify flink:vkGetImageMemoryRequirements constraint for
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT (public pull request 817).
+  * Fix typo in markup of the <<textures-texel-coordinate-systems-diagrams,
+    Texel Coordinate Systems, Corner Sampling>> image that was generating
+    complaints from chunked HTML output generation (public pull request
+    928).
+
+Internal Issues:
+
+  * Split the old <<features, Features>> chapter into four chapters:
+    <<features, Features>>, <<limits, Limits>>, <<formats, Formats>>, and
+    <<capabilities, Capabilities>>, with minor edits to the introductory
+    paragraph of each chapter. Anchor names in these chapters were changed,
+    with corresponding effects to xrefs to these anchors elsewhere in spec
+    markup . The purpose is to make the chunked HTML spec output load faster
+    on what was previously a single, gigantic chapter (internal issue 1554).
+  * Add ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV, to the supported
+    pipeline stages for ename:VK_ACCESS_UNIFORM_READ,
+    ename:VK_ACCESS_SHADER_READ, and ename:VK_ACCESS_SHADER_WRITE in the
+    <<synchronization-access-types-supported>> table.
+  * Correct legal name of Google, LLC in vk.xml <tags> section and a
+    copyright statement.
+  * Clarify that Vulkan treats the Android
+    code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM format as RGBA, and the
+    application is responsible for forcing the X/A component to be read as
+    1.0, in the <<memory-external-android-hardware-buffer-formats>> table.
+  * Clarify the vertex order of various primitive topologies, and define the
+    order of transform feedback vertex capture based on that. This involves
+    a lot of refactoring and cleanup in the <<drawing-primitive-topologies,
+    Primitive Topologies>>, <<geometry-input, Geometry Shader Input
+    Primitives>> sections, and <<vertexpostproc-transform-feedback Transform
+    Feedback>> sections, and numerous places in the <<tessellation>>
+    chapter,
+
+New Extensions:
+
+  * `VK_EXT_metal_surface`
+  * `VK_EXT_ycbcr_image_arrays` (internal issue 1361).
+  * `VK_NVX_image_view_handle`
+
+-----------------------------------------------------
+
+Change log for February 17, 2019 Vulkan 1.1.101 spec update:
+
+  * Update release number to 101.
+
+Public Issues:
+
+  * Make clear that memory types for imported host memory must be host
+    visible in slink:VkMemoryHostPointerPropertiesEXT.txt (public issue
+    897).
+  * Make <<interfaces-resources-layout, WARNING block>> into a NOTE block,
+    per the styleguide (public pull request 916).
+
+Internal Issues:
+
+  * Make <<textures-output-format-conversion, computation of derivatives in
+    non-uniform flow control>> have undefined behavior (internal issue
+    1367).
+  * Make behavior, not just values, undefined for
+    <<textures-layout-validation, reads from inconsistent YCbCr layouts>>
+    (internal issue 1366).
+  * Consolidate version and extension behavior documentation in the
+    <<extended-functionality, Extended Functionality>> appendix, While a
+    great deal of text was moved from other parts of the Specification into
+    the appendix, this just serves to simplify and make consistent
+    discussions of versions and extensions (internal issue 1473).
+  * Add limits for slink:VkPhysicalDeviceRayTracingPropertiesNV in the
+    <<features-limits-types, Required Limit Types>> and
+    <<features-limits-required, Required Limits>> tables (internal issue
+    1511).
+  * Disallow <<memory-protected-memory, indirect calls within protected
+    command buffers>> by adding valid usage statements for the related
+    indirect dispatch and draw commands (internal issue 1513).
+  * Add valid usage stataements to slink:VkGraphicsPipelineCreateInfo,
+    slink:VkSubpassDescription, slink:VkSubpassDescription2KHR,
+    slink:VkSubpassDescriptionDepthStencilResolveKHR, and
+    slink:VkImageViewCreateInfo preventing the creation of a renderpass with
+    attachments in formats that are not supported for rendering (internal
+    issue 1552).
+  * Qualify valid usage statements for
+    slink:VkAttachmentReference::pname:layout parameter so restrictions only
+    apply if an attachment is ename:VK_ATTACHMENT_UNUSED (internal issue
+    1561).
+  * Add valid usage statement for flink:vkCmdDrawIndirectByteCountEXT
+    restricting pname:vertexStride to be positive (internal issue 1566).
+  * Make the `VK_EXT_sample_locations` extension depend on
+    `VK_KHR_get_physical_device_properties2` in `vk.xml`.
+  * Rearrange and simplify the <<interfaces-resources-layout, block layout
+    rules>>.
+
+New Extensions:
+
+  * `VK_NV_cooperative_matrix`
+  * `VK_EXT_depth_clip_enable` (internal issue 1485).
+
+-----------------------------------------------------
+
+Change log for February 10, 2019 Vulkan 1.1.100 spec update:
+
+  * Update release number to 100.
+
+Public Issues:
+
+  * Clarify that scoped modification order only relates to
+    <<memory-model-atomic-operation, atomic writes>> (public pull request
+    906).
+  * Remove `readme.txt` reference from `xml/README.adoc` (public pull
+    request 907).
+  * Add missing slink:VkShaderResourceUsageAMD to the <<VK_AMD_shader_info>>
+    appendix (public pull request 908).
+  * Fix markup for <<VK_EXT_filter_cubic>> appendix (public pull request
+    911).
+  * Fix typo "`attachment`" (public pull request 914).
+  * Alias the enums for `VK_IMG_filter_cubic` properly to the corresponding
+    `VK_EXT_filter_cubic` enums, so they appear in the corresponding
+    enumerated types, instead of as #defines (Vulkan-Headers issue 40).
+
+Internal Issues:
+
+  * Remove nested conditionals in valid usage statements for
+    slink:VkFramebufferCreateInfo and flink:vkCmdPipelineBarrier by
+    duplicating statements along ifdef/ifndef paths for
+    VK_KHR_depth_stencil_resolve (internal issue 1527).
+  * Clarify allowed values of <<spirv-precision-operation, SPIR-V operations
+    near infinity>>. For very large results of operations the allowed range
+    of return values as defined in the spec didn't include the largest
+    finite number. In some rounding modes (eg. RTZ) the largest finite
+    number is the correctly rounded result, so it should be allowed.
+  * Require descriptor types to match in slink:VkCopyDescriptorSet.
+
+-----------------------------------------------------
+
+Change log for February 3, 2019 Vulkan 1.1.99 spec update:
+
+  * Update release number to 99.
+
+Public Issues:
+
+  * Add missing pname:pMemoryHostPointerProperties description to
+    flink:vkGetMemoryHostPointerPropertiesEXT.txt (public pull request 896).
+  * Minor markup fixes (public pull request 900).
+  * Minor update to `khronos.css` and markup fixes (originally proposed in
+    public pull request 901, but done via an internal MR).
+
+Internal Issues:
+
+  * Document restrictions on image queries for {YCbCr} formats in the
+    <<formats-requiring-sampler-ycbcr-conversion>> table as well as
+    for slink:sname:VkImageFormatProperties and slink:VkImageCreateInfo
+    (internal issue 1361).
+  * Correct type of the code:FragSizeEXT built-in in the
+    <<interfaces-builtin-variables, Built-In Variables>> section (internal
+    issue 1526).
+  * Clean up math in the <<textures, Image Operations>> chapter by
+    refactoring, using better naming conventions, updating diagrams to use
+    the correct orientation, etc. (internal merge request 2968).
+  * Fix minor typos for slink:VkImageCreateInfo and
+    slink:VkImageStencilUsageCreateInfoEXT.
+  * Add missing documentation for tlink:VkResolveModeFlagsKHR.
+  * Fix extension dependency of pname:scalarBlockLayout in the
+    <<features-features-requirements, Feature Requirements>> section.
+  * Fix indexing math for shader binding table calculations in the
+    <<shader-binding-table-indexing-rules, Indexing Rules>> section, and use
+    spelling "`any-hit`" consistently.
+  * Reconcile valid usage statement and text for sampled image layouts in
+    slink:VkWriteDescriptorSet
+    (https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/551).
+  * Make SPIR-V code:OpConvertUToPtr and code:OpConvertPtrToU operations
+    require a 64-bit integer for physical storage buffer pointers in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    section.
+  * Update to KaTeX 10.0.
+
+New Extensions:
+
+  * `VK_EXT_filter_cubic`
+  * `VK_NV_dedicated_allocation_image_aliasing`
+
+-----------------------------------------------------
+
+Change log for January 13, 2019 Vulkan 1.1.98 spec update:
+
+  * Update release number to 98.
+
+Public Issues:
+
+  * Fix missing markup in flink:vkDestroyPipelineLayout valid usage
+    statement (pull request 882).
+  * Add missing contributors for `<<VK_EXT_buffer_device_address>>` (public
+    pull request 891).
+
+Internal Issues:
+
+  * Detect nested bullet points in valid usage blocks and warn about them
+    during VUID assignment (internal issue 1382).
+  * Update the style guide to document the process for reserving new bits in
+    bitmask types (internal issue 1411).
+  * Clarify for slink:VkApplicationInfo::pname:apiVersion and in the
+    <<fundamentals-validusage-versions, Valid Usage for Newer Core
+    Versions>> section when it is valid for an application to use a certain
+    version of Vulkan API functionality (for an instance and for a
+    device/physical device); and when the validation layers must generate an
+    error (internal issue 1412).
+  * Add optional <<memory-model-availability-visibility, transitive
+    availability/visibility operations to the memory model, including a new
+    pname:vulkanMemoryModelAvailabilityVisibilityChains feature for
+    slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (internal issue
+    1460).
+  * Add the code:StorageBuffer storage class to those in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> (internal
+    issue 1480).
+  * Add missing `returnedonly` tags for a number of returned extension
+    structures that can be passed in pname:pNext chains (internal issue
+    1515).
+  * Clean up and rearrange some spec language for
+    slink:VkRenderPassCreateInfo and slink:VkAttachmentReference.txt
+    (internal issue 1522).
+  * Correctly round the code:OpVectorTimesScalar and
+    code:OpMatrixTimesScalar SPIR-V operations in the <<Precision of core
+    SPIR-V Instructions>> table (internal merge request 2996).
+  * Work around cases in flink:vkCmdBeginTransformFeedbackEXT,
+    flink:vkCmdEndTransformFeedbackEXT, and
+    slink:VkPipelineCoverageModulationStateCreateInfoNV where an array
+    parameter is `optional` but the length is not in `vk.xml`. This is an
+    interim fix using `noautovalidity` + handcoded VU replacing those that
+    should be autogenerated (internal issue 2944 and
+    https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/480).
+  * Remove redundant capability validation of the code:float16 and code:int8
+    SPIR-V capabilities from the <<spirvenv-capabilities, Capabilities>>
+    section, since they are already covered in the preceding table.
+  * Update check_spec_links script, including validation for reference page
+    open blocks. Fix errors identified by the script.
+
+-----------------------------------------------------
+
+Change log for January 05, 2019 Vulkan 1.1.97 spec update:
+
+  * Update release number to 97.
+
+Public Issues:
+
+  * Add a special case to the <<renderpass-compatibility, Render Pass
+    Compatibility>> rules allowing single-subpass renderpasses to be
+    compatible even if they have different resolve attachment references
+    (public issue 835).
+  * Fix the miss shader binding table record address rule in the
+    <<shader-binding-table-indexing-rules, Miss Shaders>> section to index
+    by code:missIndex, not code:sbtOffset (public issue 875).
+
+Internal Issues:
+
+  * Add a missing anchor to the elink:VkSamplerCreateFlagBits language
+    (internal issue 1483).
+  * Add missing implicit valid usage include for slink:VkHdrMetadataEXT and
+    corresponding `noautovalidity` attributes in `vk.xml` for the
+    externally-defined metadata properties (internal issue 1514).
+  * Remove restrictions on the `mask` parameter of SPIR-V's
+    code:OpGroupNonUniformXor in the <<spirvenv-module-validation,
+    Validation Rules within a Module>> appendix (internal merge request
+    2971).
+  * Restore `noautovalidity` attribute for
+    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:pViewportWScalings
+    in `vk.xml` (internal merge request 2975).
+  * Update copyright dates on Khronos-copyrighted files to 2019 (internal
+    merge request 2980).
+
+New Extensions:
+
+  * `VK_KHR_depth_stencil_resolve`
+  * `VK_EXT_buffer_device_address`
+  * `VK_EXT_memory_budget`
+  * `VK_EXT_memory_priority`
+  * `VK_EXT_validation_features`
+
+-----------------------------------------------------
+
+Change log for December 16, 2018 Vulkan 1.1.96 spec update:
+
+  * Update release number to 96.
+
+Public Issues:
+
+  * Fix typo in `vk.xml` for `structextends` attribute of
+    slink:VkPhysicalDeviceShadingRateImagePropertiesNV (public PR 870).
+  * Fix links in optimized PDF output (public PR 879).
+
+Internal Issues:
+
+  * Add a link to GitHub contributors in the <<credits, Other Credits>>
+    section (internal issue 808).
+  * Clarify the behavior of command aliases described in the <<versions,
+    Core Revisions>> and <<initialization-functionpointers, Command Function
+    Pointers>> sections and the registry schema document with respect to
+    whether they are or are not the same entry point, and what the behaviour
+    of the ftext:vkGet*ProcAddr commands is for each alias (internal issue
+    1462).
+  * Update slink:VkPipelineShaderStageCreateInfo valid usage statements for
+    writing to code:Layer and code:viewportIndex to apply to any vertex
+    processing stage (internal issue 1475).
+  * Make sparse image creation optional for {YCbCr} formats in the
+    <<features-required-format-support, Required Format Support>> section
+    and the <<formats-requiring-sampler-ycbcr-conversion, Formats
+    requiring sampler {YCbCr} conversion for
+    ename:VK_IMAGE_ASPECT_COLOR_BIT image views>> table (internal issue
+    1476).
+  * Modify the valid usage statement for
+    flink:vkCmdDrawIndirectByteCountEXT::pname:vertexStride to use the
+    pname:maxTransformFeedbackBufferDataStride limit rather than the
+    pname:maxVertexInputBindingStride limit, which is a better match for
+    transform feedback related operations (internal issue 1487).
+  * Changed all members of slink:VkPhysicalDevicePCIBusInfoPropertiesEXT to
+    have the `uint32_t` type. This is an incompatible change to an EXT
+    that was released very recently; although this is against usual Vulkan WG
+    policy, we discussed and consider this an acceptable risk, but have
+    polled the mesa-dev list in case there are use cases we missed (internal
+    issue 1492).
+  * Set spec vetsion to 1 for `VK_GOOGLE_hlsl_functionality1` and
+    `VK_GOOGLE_decorate_string` in `vk.xml` (internal MR 2948).
+  * Remove redundant valid usage statement `VkImageCreateInfo-pNext-02395`
+    (internal MR 2950).
+  * Add `check_spec_links.py` script, use it in Gitlab CI, and fix many
+    minor markup issues discovered by the script (internal MR 2955).
+  * Update `BUILD.md` to the current Ruby version (2.5.3), and make some
+    corresponding updates to per-platform build instructions (internal MR
+    2956).
+  * Fix binding numbers and other details in
+    flink:vkUpdateDescriptorSetWithTemplate.txt example code blocks
+    (internal MR 2960).
+  * Remove some nautovalidity="true" in `vk.xml` for NV extensions where
+    it is clearly wrong (internal MR 2970).
+
+-----------------------------------------------------
+
+Change log for December 3, 2018 Vulkan 1.1.95 spec update:
+
+  * Update release number to 95.
+
+Public Issues:
+
+  * Fix valid usage and XML issues found in public issues 789 and 790 for
+    the `VK_EXT_debug_utils` extension (public pull request 794).
+  * Replace references to `VK_NV_dedicated_allocation` with links to the
+    corresponding slink:slink:VkMemoryDedicatedRequirements and
+    slink:slink:VkMemoryDedicatedAllocateInfo structures in the description
+    of elink:VkExternalMemoryFeatureFlagBits (public issue 801).
+  * Fix miscellaneous minor markup and spelling issues in
+    `VK_NV_ray_tracing` extension (public pull request 860).
+  * Remove "returnedonly" from XML for
+    slink:VkPhysicalDeviceInlineUniformBlockFeaturesEXT and
+    slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (public issue 862).
+
+Internal Issues:
+
+  * Add to the description of the
+    <<features-limits-maxComputeSharedMemorySize,
+    pname:maxCompureSharedMemorySize>> feature to state the shared variables
+    should be packed at least as tightly as std430 (internal issue 1386).
+  * Fix and clarify various references to image and image view usage in
+    flink:vkCmdBindShadingRateImageNV, flink:vkCmdBeginRenderPass, and
+    slink:VkImageStencilUsageCreateInfoEXT (internal issue 1432).
+  * Require that the slink:VkImage mipmap chain match the Android hardware
+    buffer mipmap chain for slink:VkMemoryAllocateInfo (internal issue
+    1479).
+  * Fix the definition of slink:VkSwapchainCreateInfoKHR valid usage
+    statement 01778 (Vulkan-ValidationLayers!15)
+  * Fix descriptions of <<interfaces-builtin-variables-launchid,
+    code:LaunchIDNV>> and <<interfaces-builtin-variables-launchsize,
+    code:LaunchSizeNV>> to code:uvec3.
+
+New Extensions:
+
+  * `VK_KHR_shader_float16_int8`
+  * `VK_KHR_shader_float_controls`
+
+-----------------------------------------------------
+
+Change log for November 25, 2018 Vulkan 1.1.94 spec update:
+
+  * Update release number to 94.
+
+Public Issues:
+
+  * Use the terms "`texel block`" and "`texel block size`" instead of "`data
+    element`" and "`element size`", and define "`element`" as an array slot.
+    In addition to the terminology changes, retitled the <<texel-block-size,
+    Representation and Texel Block Size>> section and added texel block size
+    / no. of texels/block information to the
+    <<features-formats-compatibility, Compatible Formats>> table. There is
+    some additional work underway to make sure the compatibility language
+    makes sense for all of uncompressed, compressed, and multiplanar formats
+    (public issue 763).
+  * Cleanup `VK_NV_ray_tracing` language (public issues 858, 859).
+
+Internal Issues:
+
+  * Specify in <<shaders-invocationgroups, Invocation and Derivative
+    Groups>> and <<textures-output-format-conversion, Texel Output Format
+    Conversion>> that derivative groups are quads when code:SubgroupSize >=
+    4 (internal issue 1390).
+  * Make the type of slink:VkDescriptorUpdateTemplateCreateInfo::pname:pNext
+    `const` following pattern for the other stext:Vk*CreateInfo structures
+    (internal issue 1459).
+  * Specify that flink:vkCmdClearAttachments executes as a drawing command,
+    rather than a transfer command (internal issue 1463).
+  * Update `VK_NV_ray_tracing` to use code:InstanceId instead of
+    code:InstanceIndex.
+
+New Extensions:
+
+  * `VK_KHR_swapchain_mutable_format`
+  * `VK_EXT_fragment_density_map`
+
+-----------------------------------------------------
+
+Change log for November 18, 2018 Vulkan 1.1.93 spec update:
+
+  * Update release number to 93.
+
+Public Issues:
+
+  * Add spec language for ename:VK_INDEX_TYPE_NONE_NV and fix up
+    slink:VkAccelerationStructureTypeNV (public issue 848).
+  * Add missing suffix in description of slink:VkSubpassDescription2KHR
+    parameters (public pull request 851).
+  * Fix miscellaneous typos (public pull request 855).
+  * Add driver ID for Pastel (public pull request 856).
+  * Add missing include directive for slink:VkMemoryWin32HandlePropertiesKHR
+    implicit valid usage statements (public pull request 857).
+
+Internal Issues:
+
+  * Restrict the storage classes permitted for SPIR-V atomics to what is
+    actually supported, in the <<spirvenv-module-validation, Validation
+    Rules within a Module>> section (internal issue 1123).
+  * Add a missing Valid Usage statement to slink:VkRenderPassCreateInfo for
+    the case pname:stencilLoadOp == ename:VK_LOAD_OP_CLEAR, pname:layout ==
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL (internal issue
+    1408).
+  * Modify optimize-pdf script and Makefile to retain non-optimized original
+    PDF on errors (internal issue 1435).
+  * Add <<spirvenv-module-validation, SPIR-V validation rules>> stating that
+    only the listed code:BuiltIn decorations are permitted, and only when
+    relevante features and extensions are enabled (internal issue 1449).
+  * Remove some duplicated Valid Usage IDs created via cut & paste error
+    (internal issue 1455).
+  * Build HTML output for extension reference pages (internal issue 1461).
+  ** Improve genRef.py handling of aliases defined inside other refpages.
+  ** Emit aliases in pygenerator.py.
+  ** Add XML noautovalidity flag for VkRenderPassCreateFlags until there
+     are some corresponding FlagBits defined.
+  ** Corrected types= attribute on some refpage blocks to 'flags'
+  ** Added refpage blocks for some missing types detected by CI tests.
+  * Fixed many Valid Usage statement issues in slink:VkRenderPassCreateInfo,
+    slink:VkSubpassDescription, slink:VkSubpassDescription2KHR,
+    slink:VkSubpassDependency2KHR, flink:vkCmdBeginRenderPass,
+    flink:vkCmdBeginRenderPass2KHR, and slink:VkRenderPassBeginInfo
+    discovered while adding `VK_KHR_create_renderpass2` to the validation
+    layers.
+
+New Extensions:
+
+  * `VK_EXT_scalar_block_layout`
+  * `VK_EXT_separate_stencil_usage`
+
+-----------------------------------------------------
+
+Change log for November 12, 2018 Vulkan 1.1.92 spec update:
+
+  * Update release number to 92.
+
+Public Issues:
+
+  * Move and modify valid usage statements dealing with pname:aspectMask in
+    flink:vkCmdClearColorImage, flink:vkCmdClearDepthStencilImage, and
+    slink:VkClearAttachment, so they are in places where all necessary
+    information is available (public issue 529).
+  * Fix math markup in <<textures-texel-anisotropic-filtering, Texel
+    Anisotropic Filtering>> (public pull request 840).
+  * Fix misspellings (public pull request 845).
+
+Internal Issues:
+
+  * Add installation instructions and a Makefile "`chunked`" target for
+    chunked HTML generation (internal issue 1352).
+  * Fix pipeline mesh diagram style; also fix a minor bug in the classic
+    pipeline diagram where vertex/index buffers wrongly fed into the vertex
+    shader (internal issue 1436).
+  * Make Asciidoctor ERROR output raise an error, and don't suppress
+    executed command output from CI make invocation (internal issue 1454).
+  * Minor typo fixes and clarifications for `VK_NV_raytracing`.
+  * Cleanup extension-specific properties
+  ** Remove duplicated documentation for pname:maxDiscardRectangles,
+     pname:pointClippingBehavior, and pname:maxVertexAttribDivisor (they
+     shouldn't be documented with the other members of
+     slink:VkPhysicalDeviceLimits at all).
+  ** Remove duplicate anchor for pname:maxVertexAttribDivisor
+  ** Consistently document stext:VkPhysicalDevice<Extension>PropertiesKHR
+  *** Always document pname:sType/pname:pNext (was inconsistent before)
+  *** Always mention chaining to slink:VkPhysicalDeviceProperties2 (and not
+      as slink:VkPhysicalDeviceProperties2KHR)
+  *** Always include Valid Usage statements last
+  * Update Makefile 'checklinks' target and associated scripts, and fix
+    markup problems identified by checkLinks.py, so that we can rely on the
+    checklinks script as part of Gitlab CI.
+
+-----------------------------------------------------
+
+Change log for November 4, 2018 Vulkan 1.1.91 spec update:
+
+  * Update release number to 91.
+
+Public Issues:
+
+  * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull
+    request 624).
+  * Delete the `VK_KHR_mir_surface` extension from the Specification and
+    XML, due to EOL of the only driver known to have supported it, and
+    near-EOL of Mir itself (public issue 814).
+  * Fix options for some figures that were using old ones (public pull
+    request 841).
+  * Fix various accidentally repeated words (public pull request 843).
+  * Use `time.process_time()`, introduced in Python 3.3, in the scripts
+    instead of `time.clock()`, which will be removed in Python 3.8 (public
+    pull request 844).
+
+Internal Issues:
+
+  * Update valid usage statements for
+    `VK_ANDROID_external_memory_android_hardware_buffer` in
+    slink:VkMemoryAllocateInfo,
+    slink:VkImportAndroidHardwareBufferInfoANDROID, and
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be
+    verifiable (internal issue 1419).
+  * Update valid usage statements for
+    `VK_ANDROID_external_memory_android_hardware_buffer` in
+    slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and
+    slink:VkImageViewCreateInfo to move valid usage statements in
+    doubly-nested bullet points up one level, accommodating limitations of
+    the valid usage extraction script that creates `validusage.json`
+    (internal issue 1434).
+  * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct
+    ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV.
+  * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for
+    extensions missing them.
+
+New Extensions:
+
+  * `VK_AMD_memory_overallocation_behavior`
+  * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
+
+-----------------------------------------------------
+
+Change log for October 28, 2018 Vulkan 1.1.90 spec update:
+
+  * Update release number to 90.
+
+Public Issues:
+
+  * Tag flink:vkQueueWaitIdle as `externsync` in `vk.xml` (public pull
+    request 815).
+  * Update README (public pull request 834).
+  * `VK_NV_framebuffer_mixed_samples` and `VK_AMD_mixed_attachment_samples`
+    had confusing and contradictory valid usage statements when read in the
+    all-extensions spec build. Change them to explicitly mention which
+    extension each is for (public issue Vulkan-ValidationLayers/issues/353).
+
+Internal Issues:
+
+  * Update `COPYING.md` to clarify how externally generated Vulkan
+    Specifications (for translations, annotations, or other reasons) must be
+    copyrighted, and acknowledge the Exception Clause on the `vk.xml`
+    license (internal issue 1079).
+  * Specify that flink:vkGetPhysicalDeviceImageFormatProperties may: return
+    pname:maxMipLevels 1 if the format is ycbcr (internal issue 1361).
+  * Clarify previously underspecified language for
+    flink:vkCmdPushConstants::pname:pStageFlags regarding use of push
+    constants across multiple pipelines (internal issue 1403).
+  * Fix typo in XML/headers for
+    ename:VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT,
+    which was previously
+    etext:VK_STRUCTURE_TYPE_IMAGE_EXCPLICIT_DRM_FORMAT_MODIFIER_CREATE_INFO_EXT
+    (internal issue 1428).
+  * Fix markup of equations that were sporadically breaking the
+    `optimize-pdf` step of PDF generation, due (apparently) to inconsistent
+    treatment of unwrapped multicharacter terms by different LaTeX parsers
+    (internal issue 1435).
+  * For the <<memory-model-synchronizes-with synchronizes-with>> memory
+    model relation cases involving a release barrier plus relaxed atomic
+    write, treat the atomic as if it were a release atomic and allow the
+    acquire side to read from its hypothetical release sequence. This is
+    more consistent with how C++ defines synchronization for release fences
+    (internal issue cross-api/memory-model#72).
+  * Minor editorial changes to the <<memory-model, memory model>> appendix
+    based on external feedback.
+
+-----------------------------------------------------
+
+Change log for October 21, 2018 Vulkan 1.1.89 spec update:
+
+  * Update release number to 89.
+
+Public Issues:
+
+  * Clarify the reference to <<features-limits-mipmapPrecisionBits, mipmap
+    precision bits>> in the <<textures-image-level-selection, Image Level(s)
+    Selection>> section (public issue 660).
+  * Update <<debugging-object-types,VkObjectType and Vulkan Handle
+    Relationship>> table with missing types (public pull request 820).
+  * Miscellaneous minor markup cleanup (public pull request 822).
+  * Fix copy/paste bugs in the description of how implicit
+    availability/visibility operations for atomics/barriers are ordered in
+    the <<memory-model-availability-visibility-semantics, Availability and
+    Visibility Semantics>> section (public issue 823).
+  * Add ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV bit missing from
+    the mesh shading list of the <<synchronization-pipeline-graphics,
+    graphics pipeline>> (public issue 824).
+
+Internal Issues:
+
+  * Clarify that only statically used members of a push constant block need
+    to be in the push constant range, and stop referring to block members as
+    "`variables`" in the <<interfaces-resources-pushconst, Push Constant
+    Interface>> section. This is related to
+    https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/340
+    (internal issue 1401).
+  * Clarify interaction between flink:vkCmdSetDeviceMask and render pass
+    control commands in the slink:VkDeviceGroupRenderPassBeginInfo section
+    (internal issue 1416).
+  * Miscellaneous minor markup cleanup.
+  * Remove types defined by `"disabled"` extensions from
+    validextensionstructs in the XML processing scripts, so downstream code
+    generators don't emit them.
+
+-----------------------------------------------------
+
+Change log for October 13, 2018 Vulkan 1.1.88 spec update:
+
+  * Update release number to 88.
+
+Public Issues:
+
+  * Make clear that
+    tname:PFN_vkDebugUtilsMessengerCallbackEXT::pname:messageTypes is a
+    bitmask, and correct a typo in the spelling of
+    slink:VkDebugUtilsMessengerCreateInfoEXT.txt::pname:messageType (public
+    pull request 800).
+  * Make an ABI-compatible change of the type of
+    slink:VkPhysicalDeviceDriverPropertiesKHR::pname:driverID to use the new
+    elink:VkDriverIdKHR type (public issue 811).
+
+Internal Issues:
+
+  * Clarify for the <<features-features-shaderStorageImageExtendedFormats>>
+    feature and in the <<spirvenv-capabilities-table>> that the feature
+    means that all of the formats are supported, and that otherwise the
+    features can be queried per-format (internal issue 1273).
+  * Clarified interactions of `VK_EXT_external_memory_host` with host cache
+    management commands and structures flink:vkMapMemory,
+    flink:vkFlushMappedMemoryRanges, slink:VkMappedMemoryRange, and
+    flink:vkUnmapMemory using the new glossary term "`Host Mapped Device
+    Memory`" (internal issue 1385).
+  * Update the language for flink:vkCreateViSurfaceNN.txt describing the
+    pname:currentExtent of a VI surface to more accurately reflect current
+    capabilities, replacing "`undefined`" with more explicit behavior
+    (internal issue 1410).
+
+New Extensions:
+
+  * `VK_EXT_calibrated_timestamps`
+  * `VK_EXT_image_drm_format_modifier` (this extension was previously
+    disabled in vk.xml, and has now been enabled after some changes to fix
+    performance issues).
+  * `VK_EXT_pci_bus_info`
+  * `VK_EXT_transform_feedback`
+  * `VK_GOOGLE_hlsl_functionality1`, exposing support for
+    `SPV_GOOGLE_hlsl_functionality1`.
+  * `VK_GOOGLE_decorate_string`, exposing support for
+    `SPV_GOOGLE_decorate_string`.
+
+-----------------------------------------------------
+
+Change log for October 7, 2018 Vulkan 1.1.87 spec update:
+
+  * Update release number to 87.
+
+Public Issues:
+
+  * Merge flink:vkCmdPipelineBarrier self-dependency barrier VUs referring
+    to the same subpass dependency (public pull request 756).
+  * Describe default value of `"optional"` attribute in the registry schema
+    document (public issue 769)
+  * Fix links in <<VK_NVX_raytracing>> extension (public pull request 805).
+  * Mark the <<VK_KHR_mir_surface>> extension obsolete (public issue 814).
+  * Fix missing endif in Image Creation block (public issue 817).
+
+Internal Issues:
+
+  * Clarify that the compressed texture formats corresponding to
+    <<features-features-textureCompressionETC2>>,
+    <<features-features-textureCompressionASTC_LDR>>, and
+    <<features-features-textureCompressionBC>> is not contingent on the
+    feature bits, and may be supported even if the features are not enabled
+    (internal issue 663).
+  * Clarify that code:FragStencilRefEXT is output only in the
+    <<interfaces-builtin-variables, Built-In Variables>> section (internal
+    issue 1173).
+  * Identify and correct many overly-aggressive uses of "`undefined`", and
+    narrow them down, where straightforward to do so. Mark such resolved
+    uses of "`undefined`" with the custom undefined: macro. Add a new
+    <<writing-undefined, Describing Undefined Behavior>> section (internal
+    issue 1267).
+  * Don't require code:inline_uniform_block descriptors to be populated
+    before use in the flink:vkAllocateDescriptorSets section (internal issue
+    1380).
+  * Allow suppressing inline SVG images by controlling this with an
+    attribute set in the Makefile, rather than the explicit [%inline]
+    directive (internal issue 1391).
+  * Mark 'Khronos' as a registered trademark in several places, now that it
+    is one.
+  * Fix typo in the <<VK_KHR_shader_atomic_int64>> appendix using the GLSL
+    naming of the compare exchange op when referring to the SPIR-V op.
+  * Specify in the flink:vkGetPhysicalDeviceQueueFamilyProperties section
+    that all implementations must support at least one queue family, and
+    that every queue family must contain at least one queue.
+  * Make slink:VkPipelineDynamicStateCreateInfo::pname:dynamicStateCount,
+    slink:VkSampleLocationsInfoEXT::pname:sampleLocationsPerPixel, and
+    slink:VkSampleLocationsInfoEXT::pname:sampleLocationsCount optional, to
+    fix bogus implicit valid usage checks that were causing failures in the
+    conformance tests.
+  * Fix vendor tag in reserved extension 237 constants. Does not affect
+    anything since it is just a placeholder, but this should avoid further
+    comments.
+  * Minor markup fixes in some extension appendices.
+
+New Extensions:
+
+  * `<<VK_FUCHSIA_imagepipe_surface>>`
+
+-----------------------------------------------------
+
+Change log for September 29, 2018 Vulkan 1.1.86 spec update:
+
+  * Update release number to 86.
+
+Internal Issues:
+
+  * Add new <<resources-image-creation-limits, Image Creation Limits>>
+    section and reference that from valid usage statements, reducing
+    combinatorial complexity of extension-dependent VUs. Also fixes some
+    underspecified limits (such as pname:maxMipLevels) in the VUs for
+    slink:VkImageCreateInfo when
+    slink:VkExternalMemoryImageCreateInfo::pname:externalMemoryHandles
+    contains multiple bits, and fixes incorrectly (and underspecified)
+    limits when an Android external format is used (internal issue 1370).
+  * Remove unused "`Fragment Area Granularity`" glossary entry accidentally
+    introduced in the 1.1.85 update.
+
+New Extensions:
+
+  * `VK_KHR_driver_properties`
+  * `VK_KHR_shader_atomic_int64`
+  * The specification sources contain text for another extension,
+    `VK_EXT_image_drm_format_modifier`, but this extension is not yet
+    complete, and is marked disabled in `vk.xml`. The extension will be
+    enabled, and become part of the spec, only when the authors decide it is
+    ready.
+
+-----------------------------------------------------
+
+Change log for September 19, 2018 Vulkan 1.1.85 spec update:
+
+  * Update release number to 85.
+
+Public Issues:
+
+  * Add self-dependency ename:VK_DEPENDENCY_BY_REGION_BIT valid usage
+    statements for slink:VkSubpassDependency(public pull request 778).
+  * Apply fix from pull request 742 to slink:VkSubpassDependency and
+    slink:VkSubpassDependency2 (public pull request 779).
+  * Specify the units of slink:VkBufferImageCopy::pname:bufferRowLength and
+    pname:bufferImageHeight as texels (public pull request 781).
+  * Better specify promoted parameter mapping in the
+    `<<VK_KHR_create_renderpass2>>` appendix (public pull request 782).
+
+Internal Issues:
+
+  * Only include the <<fundamentals-validusage-versions, Valid Usage for
+    Newer Core Versions>> section in Vulkan 1.1 or later (internal issue
+    1381).
+
+Other Issues:
+
+  * Clean up redundant valid usage language for the
+    `VK_ANDROID_external_memory_android_hardware_buffer` extension
+    interaction with slink:VkImageCreateInfo.
+  * Fix error in a flag name within valid usage statements for
+    slink:VkMemoryAllocateInfo.
+  * Clarify that memory types are not totally ordered in
+    slink:VkPhysicalDeviceMemoryProperties.
+  * For slink:VkWriteDescriptorSetInlineUniformBlockEXT, set
+    structextends="VkWriteDescriptorSet" in `vk.xml`, and make
+    slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT::pname:pBindingFlags
+    optional.
+  * Add documentation of 'provisional' XML attribute to registry.txt.
+
+New Extensions:
+
+  * `VK_NV_compute_shader_derivatives`
+  * `VK_NV_corner_sampled_image`
+  * `VK_NV_fragment_shader_barycentric`
+  * `VK_NV_mesh_shader`
+  * `VK_NV_representative_fragment_test`
+  * `VK_NV_scissor_exclusive`
+  * `VK_NV_shader_image_footprint`
+  * `VK_NV_shading_rate_image`
+  * `VK_NVX_raytracing`
+
+-----------------------------------------------------
+
+Change log for September 8, 2018 Vulkan 1.1.84 spec update:
+
+  * Update release number to 84.
+
+Public Issues:
+
+  * Fix code sample in the `<<VK_EXT_debug_utils>>` extension (public issue
+    751).
+  * Fix misleading comment in `vk.xml` for
+    slink:VkDescriptorBufferInfo::pname:buffer (public pull request 762).
+  * Fix formatting of deprecation attributes in schema doc (public pull
+    request 767).
+  * Change `can` to `may` in the description of
+    elink:VkSparseImageFormatFlagBits, which are return values from queries
+    (public pull request 768).
+  * Prettify generated contact list in extension appendices, adding logos
+    and a New Issue link (public pull request 770).
+  * Enable sRGB conversion based on the image view format, not the image
+    format, in the <<textures-format-conversion, Format Conversion>> section
+    (public pull request 773).
+  * Fix typo in equation in the <<primsrast-lines-basic, Basic Line Segment
+    Rasterization>> section (public pull request 780).
+  * Fix special characters in GitHub contacts links (public pull request
+    783).
+  * Make clean_pdf target remove pdf folder (public pull request 784).
+  * Fix styleguide bad markup of block continuation (public pull request
+    792).
+
+Other Issues:
+
+  * Allow a zero vertex attribute divisor in the
+    `<<VK_EXT_vertex_attribute_divisor>>` extension, exposed via the
+    slink:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT feature.
+  * Add missing `structextends="VkDeviceCreateInfo"` to
+    slink:VkPhysicalDeviceShaderDrawParameterFeatures and
+    slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.
+
+New Extensions:
+
+  * `VK_KHR_memory_model`
+  * `VK_EXT_astc_decode_mode`
+  * `VK_EXT_inline_uniform_block`
+
+-----------------------------------------------------
+
+Change log for August 13, 2018 Vulkan 1.1.83 spec update:
+
+  * Update release number to 83.
+
+Public Issues:
+
+  * Use [%inline] directive for all SVGs to reduce file size (public pull
+    request 734).
+  * Convert XML `value` aliases into <alias> tags (public pull request
+    747).
+  * Fix metadoc script showing non-selected extensions (public pull request
+    748).
+  * Reapply public pull request 742 to make
+    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT part of the
+    graphices pipeline (public pull request 749).
+  * Fix numerous typos related to accidental duplication of words (public
+    pull request 760).
+  * Fix `vk.xml` contact typos (public pull request 761).
+
+
+Internal Issues:
+
+  * Add images to the <<Standard sample locations>> table (internal issue
+    1115).
+  * Add a definition of "`Inherited from`" precision in the
+    <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+    Instructions>> section (internal issue 1314).
+  * Clarify that both built-in and user-defined variables count against the
+    location limits for shader interfaces in the
+    <<interfaces-iointerfaces-locations, Location Assignment>> section
+    (internal issue 1316).
+  * Merge "`required`" capabilities into the <<spirvenv-capabilities-table,
+    list of optional: SPIR-V capabilities>> (internal issue 1320).
+  * Relax the layout matching rules of descriptors referring to only a
+    single aspect of a depth/stencil image, by reference to the new
+    <<resources-image-layouts-matching-rule, Image Layout Matching Rules>>
+    section (internal issue 1346).
+  * Revert extension metadoc generator warning about name mismatches to a
+    diagnostic, due to annoying warnings in build output for conscious
+    choices we've made (internal issue 1351).
+
+Other Issues:
+
+  * Reserve bits for pending vendor extensions.
+  * Make Vulkan consistent with SPIR-V regarding code:DepthReplacing and
+    code:FragDepth in the <<interfaces-builtin-variables, Built-In
+    Variables>> section.
+  * Add missing ChangeLog entries for the previous three spec updates.
+
+-----------------------------------------------------
+
+Change log for July 30, 2018 Vulkan 1.1.82 spec update:
+
+  * Update release number to 82.
+
+Public Issues:
+
+  * Add flink:vkDestroyPipelineLayout valid usage statement that the layout
+    must not have been used with command buffers still in the recording
+    state (public issue 730).
+  * Correct <unused> tag for elink:VkResult in `vk.xml` (public merge
+    request 746).
+
+Internal Issues:
+
+  * Add a valid usage statement to flink:vkQueueSubmit, and similar language
+    to the definitions of <<synchronization-queue-transfers-acquire, acquire
+    operations>> requiring that an acquire operation follow a previous
+    release of the same subresource (internal issue 1290).
+  * Add <<resources-image-format-features,Image Format Features>> and
+    <<resources-image-view-format-features,Image View Format Features>>
+    sections that precisely define the slink:VkFormatFeatures supported by
+    images and image views, and rewrite valid usage statements to reference
+    these sections instead of duplicating language (internal issue 1310).
+  * Reword and consolidate synchronization valid usage statements for
+    flink:vkCmdPipelineBarrier such that they correctly account for multiple
+    possible self-dependencies (internal issue 1322).
+  * Change order of <<Standard sample locations>> for 2xMSAA (internal issue
+    1347).
+  * Add definitions of "`<<Correctly Rounded>>`" and "`<<ULP>>`" in the
+    SPIR-V environment appendix, and "`Units in the Last Place (ULP)`" in
+    the glossary.
+
+New Extensions:
+
+  * `VK_NV_device_diagnostic_checkpoints`
+
+-----------------------------------------------------
+
+Change log for July 23, 2018 Vulkan 1.1.81 spec update:
+
+  * Update release number to 81.
+
+Public Issues:
+
+  * Fix missing "`valid`" phrasing in some obscure cases (public pull
+    request 605).
+  * Replace improper use of cannot: referring to the implementation in the
+    description of the
+    <<features-limits-maxUpdateAfterBindDescriptorsInAllPools,
+    pname:maxUpdateAfterBindDescriptorsInAllPools>> limit (public pull
+    request 738).
+  * Reorder description of bits in elink:VkPipelineStageFlagBits and the
+    <<synchronization-pipeline-stages-supported, Supported pipeline stage
+    flags>> table to match their definition order (public pull request 740).
+  * Add description of ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
+    to elink:VkBufferUsageFlagBits (public pull request 741).
+  * Fix value usage statement for slink:VkSubpassDependency stage mask
+    parameters (public pull request 742).
+  * Fix visible markup in registry schema document (public pull request
+    #745).
+
+Internal Issues:
+
+  * Make the <<geometry-invocations, geometry shader invocation
+    description>> and <<shaders-geometry-execution, Geometry Shader
+    Execution>> descriptions consistent with other pipeline stages (internal
+    issue 1325).
+  * Mark the `VK_NV_glsl_shader` extension as deprecated.
+  * Adjust the per-instance vertex attribute offset formula specified by
+    `VK_EXT_vertex_attribute_divisor` for
+    slink:VkVertexInputBindingDivisorDescriptionEXT so that the interaction
+    between pname:firstInstance and pname:divisor matches the OpenGL
+    convention (internal issue 1333).
+
+-----------------------------------------------------
+
+Change log for July 7, 2018 Vulkan 1.1.80 spec update:
+
+  * Update release number to 80.
+
+Public Issues:
+
+  * Remove unused "`API Order`" term from glossary (public issue 657).
+  * Dynamically generate the extension appendix includes based on
+    information in `vk.xml`, including new metadata tags describing
+    deprecated, obsoleted, and promoted extensions (public pull request
+    690).
+
+Internal Issues:
+
+  * Add valid usage statements to flink:vkCmdBindDescriptorSets to keep
+    offsets + range less than or equal to the buffer size (internal issue
+    1174).
+
+New Extensions:
+
+  * `VK_EXT_conditional_render`
+  * `VK_KHR_create_renderpass2` (public issue 736)
+  * `VK_KHR_8bit_storage` (public issue 737)
+
+-----------------------------------------------------
+
+Change log for July 1, 2018 Vulkan 1.1.79 spec update:
+
+  * Update release number to 79.
+
+Public Issues:
+
+  * Add a note to the <<features-required-format-support, Required Format
+    Support>> section clarifying that the required formats don't depend on
+    the used flags (public issue 671).
+  * Add a valid usage statement for flink:vkUpdateDescriptors that was
+    previously described for slink:VkImageSubresourceRange, but not as a
+    valid usage statement (public issue 713).
+  * Modify implicit valid usage generator script to not emit 'must: not be
+    0' for a parameter that is a pointer to a flags field, such as
+    pname:pPeerMemoryFeatures (public issue 729).
+
+Internal Issues:
+
+  * Add definitions of "`obsoleted`" and "`deprecated`", and modify the
+    definition of "`promoted`" in the <<glossary, Glossary>> (internal issue
+    988).
+  * Add language for integer texel output conversions (the conversion is
+    undefined) to the <<textures-output-format-conversion]] Texel Output
+    Format Conversion>> section. Simplify and clarify the floating-point
+    conversion language in the <<fundamentals-general, General
+    Requirements>> section and the new <<fundamentals-fp-conversion,
+    Floating-Point Format Conversions>> section, and remove obsolete
+    language in the format-specific floating-point sections (internal issue
+    1275).
+  * Add the elink:VkVendorId enumerated type to the Vulkan API / XML /
+    header, so reserved Khronos vendor IDs can be referred to symbolically
+    by clients. Note that only Khronos vendor IDs (e.g. non-PCI vendor IDs)
+    are defined (internal issue 1299).
+  * Fix typo in the <<fig-non-strict-lines, Non strict lines>> table
+    (internal issue 1315).
+  * Clean up and simplify the
+    <<formats-requiring-sampler-ycbcr-conversion, YCbCr format
+    properties>> table and use symbols consistently with other tables. Add a
+    column for the number of planes.
+  * Add code:Float16 to the <<spirvenv-capabilities-table, List of optional
+    SPIR-V capabilities>> for the `VK_AMD_gpu_shader_half_float` extension.
+
+-----------------------------------------------------
+
+Change log for June 18, 2018 Vulkan 1.1.78 spec update:
+
+  * Update release number to 78.
+
+Public Issues:
+
+  * Change markup so parameter descriptions include links to structures,
+    instead of just their names (public issue 697).
+  * Resume publishing updated Vulkan 1.0 with KHR extensions and Vulkan 1.0
+    with all extensions versions of the specification (public issue 722).
+  * Reapply fixes from public pull request 698 for
+    `VK_ANDROID_external_memory_android_hardware_buffer`, which accidentally
+    were reverted at some point (public pull request 724).
+  * Fix undefined format valid usage statements for slink:VkImageCreateInfo
+    in the presence of the
+    `VK_ANDROID_external_memory_android_hardware_buffer` extension (public
+    pull request 725).
+  * Miscellaneous markup consistency fixes (public pull request 728).
+
+Internal Issues:
+
+  * When building specifications containing vendor extensions, add terms to
+    the Khronos spec copyright specifying that the result is not a ratified
+    specification (internal issue 739).
+  * Change the value of the
+    pname:maxDescriptorSetUpdateAfterBindUniformBuffers minimum limit to 72
+    (6 times pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers) in
+    the <<features-limits-required, Required Limits>> table (internal issue
+    1300).
+
+Other Issues:
+
+  * Fix link to resource image view compatibility table in the valid usage
+    statements for slink:VkImageFormatListCreateInfoKHR (internal pull
+    request 2711).
+
+-----------------------------------------------------
+
+Change log for June 10, 2018 Vulkan 1.1.77 spec update:
+
+  * Update release number to 77.
+
+Public Issues:
+
+  * Remove redundant Asciidoctor ifdef in slink:VkDeviceCreateInfo valid
+    usage statement (public pull request 718).
+
+Internal Issues:
+
+  * Require that the returned slink:VkMemoryRequirements::pname:alignment
+    reflect the minimum alignment requirements for the buffer's usages, and
+    make dynamic offset alignment valid usage more explicit for
+    flink:vkBindBufferMemory and flink:vkCmdBindDescriptorSets (internal
+    issue 1170).
+  * Explicitly state that objects of type code:OpTypeImage,
+    code:OpTypeSampler, and code:OpTypeSampledImage must not be stored to in
+    the <<spirvenv-module-validation, Validation Rules within a Module>>
+    section (internal issue 1262).
+  * Clarify rules about validating descriptor set/binding against storage
+    class and descriptor type in the <<spirvenv-module-validation,
+    Validation Rules within a Module>> section, and add an anchor for and
+    references to the <<interfaces-resources-storage-class-correspondence,
+    Shader Resource and Storage Class Correspondence>> table (internal issue
+    1266).
+  * Use correct spelling of SPIR-V decoration code:NonWritable in several
+    places (internal issue 1298).
+
+Other Issues:
+
+  * Update specification links to files in the old
+    KhronosGroup/Vulkan-LoaderAndValidationLayers repository with
+    corresponding links into the new repositories that replace it.
+  * Move validity requirement for slink:VkSamplerCreateInfo into the valid
+    usage block instead of the body text, and give it a VUID.
+  * Use the full name of the "`style guide`" in a reference in the
+    description of slink:vkGetPhysicalDeviceProperties, update the
+    <<vulkan-styleguide, link to that document>>, and use the full name
+    in the registry index page.
+
+-----------------------------------------------------
+
+Change log for May 25, 2018 Vulkan 1.1.76 spec update:
+
+  * Update release number to 76.
+
+Internal Issues:
+
+  * Add an exception clause to the license on `vk.xml`, enabling its use
+    with GPL-based projects (internal issue 1017).
+  * Remove the generated `vulkan_ext.[ch]` files, which are no longer
+    supported. Add `src/ext_loader/README.md` explaining why, and update
+    files in `xml/` to not generate them by default (internal issue 1268)
+
+Other Issues:
+
+  * Fix typos in valid usage statements for the
+    ftext:vkDrawIndexedIndirectCount* commands, replacing
+    sizeof(VkDrawIndirectComment) with sizeof(VkDrawIndexedIndirectCommand).
+  * Modify the <<spirvenv-module-validation, Validation Rules within a
+    Module>> section to require code:NonReadable or code:NonWriteable in
+    SPIR-V code for images with an image format of code:Unknown if one of
+    the requisite code:shaderImageReadWithoutFormat or
+    code:shaderImageWriteWithoutFormat features is disabled.
+
+New Extensions:
+
+  * `VK_KHR_get_display_properties2`
+  * `VK_KHR_draw_indirect_count`
+
+-----------------------------------------------------
+
+Change log for May 16, 2018 Vulkan 1.1.75 spec update:
+
+  * Update release number to 75.
+
+GitHub Issues:
+
+  * Use GitHub handles (e.g. @handle) for contact information in vk.xml,
+    when available (partial fix for public issue 630).
+  * Add size invariance guarantee to slink:VkMemoryRequirements for
+    buffer/image memory requirements (public issue 661).
+  * Correct scope (conditional constructs) in valid usage statement for
+    slink:VkBindImageMemoryInfo (public pull request 684).
+  * Clean up minor markup issues and typos in the
+    `VK_ANDROID_external_memory_android_hardware_buffer` extension appendix
+    (public pull request 698).
+  * Modify registry processing script to avoid irrelevant warnings of benign
+    enumerant redefinitions (public pull request 705).
+  * Fix some duplicate words and some misspelled "`stagess`" (public pull
+    request 712)
+
+Internal Issues:
+
+  * Enable continuous integration tests on the internal Khronos gitlab
+    server by adding a .gitlab-ci.yml file. Note: this does not implement CI
+    on the public GitHub repository (internal issue 408).
+  * Add link from description of depth clamping in the <<fragops-depth,
+    depth test>> section to the
+    slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable
+    parameter which enables it, making it easily searchable / findable
+    (internal issue 1125).
+  * Clarify that arrays of arrays of descriptors are not allowed in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> and
+    <<interfaces-resources-setandbinding, DescriptorSet and Binding
+    Assignment>> sections (internal issue 1192).
+  * Comment out some redundant nested Asciidoctor conditionals in the
+    slink:VkImageViewCreateInfo valid usage block, and explain in all cases
+    why the redundant conditional exist and are commented out (internal
+    issue 1231).
+  * Move a valid usage statement from slink:VkCommandPoolCreateInfo to the
+    parent flink:vkCreateCommandPool, where the device queue is known
+    (internal issue 1233).
+  * Add new slink:VkBaseInStructure and slink:VkBaseOutStructure types which
+    can be used by extensions and implementations for handling Vulkan
+    sType/pNext style structures in a more generic way (internal issue
+    1265).
+  * Clarify that
+    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+    only applies to external-format images. Add references to this in valid
+    usage statements that previously only referred to
+    slink:VkFormatProperties (internal issue 1244).
+  * Fix the description of elink:VkPipelineCreateFlagBits enumerant
+    ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT to match the
+    name (internal issue 1279).
+  * Add a NOTE to the <<interfaces-resources-setandbinding, DescriptorSet
+    and Binding Assignment>> section making it clear that variables sharing
+    a storage class may use identical descriptor set and bindings.
+    Specifically state the sometimes misunderstood ability to have one or
+    more differently typed image descriptors sharing a descriptor set and
+    binding (internal SPIR-V issue 264).
+  * Make DynamicIndexing features and capabilities also control the
+    uniformity of the descriptor used in memory access instructions in the
+    <<interfaces-resources-descset, Descriptor Set Interface>> section. This
+    makes them also apply to variable_pointer usage, which can bypass the
+    array indexing operation (internal SPIR-V issue 289).
+
+Other Issues:
+
+  * Correct flink:vkCmdBlitImage limitations on cubic blits to be 2D only,
+    not 3D.
+  * Update valid usage statements for slink:VkRenderPassCreateInfo and
+    slink:VkInputAttachmentAspectReference.
+  * Move YCbCr-related VU statements from slink:VkDescriptorImageInfo to
+    slink:VkWriteDescriptorSet, where all needed information is known, and
+    remove redundant statements.
+  * Move SPIR-V restriction that images be of either sampled or storage
+    types from the <<interfaces-resources-descset, Descriptor Set
+    Interface>> section to the <<spirvenv-module-validation, Validation
+    Rules within a Module>> section of the SPIR-V appendix.
+
+-----------------------------------------------------
+
+Change log for April 21, 2018 Vulkan 1.1.74 spec update:
+
+  * Update release number to 74.
+
+GitHub Issues:
+
+  * Clarify which buffer locations are accessed in
+    flink:vkCmdCopyBufferToImage valid usage statements (public issue 676).
+  * Refine description of <<extended-functionality-extensions-dependencies,
+    extension dependencies>>, related NOTE in the
+    <<extended-functionality-extensions, Extensions>> section, and
+    "`Required Extensions`" glossary term (public pull request 693).
+  * Add support for specifying required Vulkan core version in `vk.xml` and
+    the extension metadoc generator (public issue 696).
+  * Update .gitignore for directory reorganization (public pull request
+    699).
+  * Fix typo (public pull request 703).
+
+Internal Issues:
+
+  * Update valid usage of slink:VkClearRect::pname:layerCount (internal
+    issue 1241).
+
+Other Issues:
+
+  * Fix typo in <<NV_geometry_shader_passthrough>> issues list.
+
+-----------------------------------------------------
+
+Change log for April 15, 2018 Vulkan 1.1.73 spec update:
+
+  * Update release number to 73.
+
+GitHub Issues:
+
+  * Refine swapchain association with surface for slink:VkSwapchainKHR, with
+    matching valid usage statements for slink:VkSwapchainCreateInfoKHR and
+    discussion following the <<swapchain-wsi-image-create-info>> table
+    (public issue 637).
+  * Re-remove several valid usage statements from slink:VkImageCreateInfo
+    that had previously been removed at the time that
+    ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT was introduced. These
+    statements had incorrectly been restored due to an glitch while merging
+    from the old `1.0` branch to the current `master` branch (public issue
+    683).
+
+Internal Issues:
+
+  * Fix reference page generation and configure build to generate reference
+    pages 1.1 with all extensions, rather than core only, as was the case
+    for the 1.0 ref pages (internal issues 484, 1056, 1205).
+  * Require that
+    slink:VkMemoryDedicatedRequirements::pname:prefersDedicateAllocation is
+    ename:VK_TRUE when
+    slink:VkMemoryDedicatedRequirements::pname:requiresDedicateAllocation is
+    ename:VK_TRUE (internal issue 1222).
+  * Fix Ruby extension code so `diff_html` Makefile target works (internal
+    issue 1230).
+  * Update `genRelease` script to generate 1.1 + all extensions reference
+    pages - but not the single-page HTML / PDF versions, which are even
+    larger than the API spec (internal issue 1245).
+
+Other Issues:
+
+  * Add missing attributes to `vk.xml` for `VK_ANDROID_native_buffer`.
+  * Specify that the slink:VkAttachmentDescription::pname:format member is
+    the format of the image *view* that will be used for the attachment.
+  * Use core sname:VkPhysicalDeviceFeatures2 in the `structextends` `vk.xml`
+    attribute for sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT and
+    sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT, rather than the
+    KHR equivalent it was promoted from.
+  * Fix the "`Fragment Input Attachment Interface`" glossary entry to match
+    the specification body.
+  * Clarify the interaction of sRGB images used as storage or texel buffers
+    with <<textures-output-format-conversion, Texel Output Format
+    Conversion>>.
+  * Moved three valid usage statements from
+    slink:VkRenderPassMultiviewCreateInfo up to
+    slink:VkRenderPassCreateInfo, and added a new valid usage statement for
+    slink:VkRenderPassInputAttachmentAspectCreateInfo.
+  * Added valid usage statements for slink:VkBufferMemoryBarrier and
+    slink:VkImageMemoryBarrier reflecting the global requirement that
+    "`non-sparse resources must be bound to memory before being recorded to
+    command`".
+
+-----------------------------------------------------
+
+Change log for April 5, 2018 Vulkan 1.1.72 spec update:
+
+  * Update release number to 72.
+
+GitHub Issues:
+
+  * Restructure the repository to put the specification `Makefile` and
+    associated spec source material at the top level, `vk.xml` and
+    associated scripts material in `xml/`, and generated include and source
+    files in `include/vulkan/` and `src/ext_loader/`, respectively (public
+    issue 436).
+  * Add missing bullet point markup to flink:vkCmdCopyImage valid usage
+    statement, so it gets a VUID assigned (public issue 627).
+  * Fix broken links in a couple of extension appendices (public pull
+    request 665).
+  * Add the <platform> tag to the index in section 4.1 of the registry
+    schema documentation, and add the protect= attribute of <extension>
+    tags to the comments in `registry.rnc` (public issues 673, 678).
+  * Add missing valid usage statements for sparse image interactions to
+    flink:VkImageCreateInfo (public pull request 675).
+  * Fix improper usage and grammar of "`can: not`" (public pull request
+    681).
+  * Remove duplicate spec language and NOTE on present layout between the
+    flink:vkAcquireNextImageKHR and flink:vkAcquireNextImage2KHR commands
+    (public pull request 685).
+  * Fix some typos and markup issues (public pull request 689; public issues
+    642, 667, 687).
+  * Fix typo etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT ->
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT in the
+    <<external-semaphore-handle-types-compatibility, External semaphore
+    handle types compatibility>> table (public pull request 691).
+
+Internal Issues:
+
+  * Remove the need for the "`noautovalidity`" attribute on extension
+    structures in `vk.xml`. It is now implied by the "`structextends`"
+    attribute instead (internal issue 942).
+  * Replace uses of "`currently bound`" with "`bound`", since "`currently`"
+    is redundant and distracting, and add a corresponding rule to the style
+    guide (internal issue 993).
+  * Fixed subtle issues with the last updates to flink:vkAcquireNextImageKHR
+    language that had resulted in ambiguities (internal issue 1178).
+  * Make it clear that only one query of a given type is allowed at a time
+    by reordering valid usage statements for flink:vkCmdBeginQuery and
+    flink:vkCmdEndQuery, and removing redundant ones (internal issue 1213).
+  * Swapped OL1 and OL3 in `tessparamUL.svg` to match previous version, and
+    fixed where "`(no edge)`" appears (internal issue 1215).
+
+Other Issues:
+
+  * Fixed a minor problem with the valid usage statement extraction script,
+    and corresponding markup in the spec source.
+
+New Extensions:
+
+  * `VK_AMD_shader_core_properties`
+  * `VK_EXT_descriptor_indexing`
+  * `VK_NV_shader_subgroup_partitioned`
+
+-----------------------------------------------------
+
+Change log for March 16, 2018 Vulkan 1.1.71 spec update:
+
+  * First public update for Vulkan 1.1.
+
+GitHub Issues:
+
+  * Refer to standard sparse image block shape format tables explicitly in
+    the <<sparsememory-standard-shapes, Standard Sparse Image Block Shapes>>
+    section (public issue 93).
+  * Add the missing definition of the code:LocalInvocationIndex decoration
+    in the <<interfaces-builtin-variables, Built-In Variables>> section
+    (public issue 532).
+  * Clarify dynamic state definition in the introduction to the <<pipelines,
+    Pipelines>> section and the new <<pipelines-dynamic-state, Dynamic
+    State>> subsection (public issue 620).
+  * Clarified deprecation statement in the `VK_AMD_negative_viewport_height`
+    appendix (public issue 674).
+  * Fix parameter descriptions for flink:vkCreateIndirectCommandsLayoutNVX
+    (public issue 677).
+
+Internal Issues:
+
+  * Remove description of <<primsrast-points, rasterization point size>>
+    being taken from the tessellation control shader, since there are no
+    circumstances under which you can have TCS without TES (internal issue
+    522).
+  * Define <<copies-images-format-size-compatibility, _size-compatible_
+    image formats>> for flink:vkCmdCopyImage, add it to the glossary, and
+    use that definition for slink:VkImageViewCreateInfo (internal issue
+    771).
+  * Change brief descriptions of enumerant names, and of parameters which
+    are enumerants, from "`enum *indicates*`" to "`enum *specifies*`" for
+    consistency, and add a markup style guide rule (internal issue 862).
+  * Clarify how execution dependencies interact with
+    <<synchronization-submission-order, submission order>> at numerous
+    places in the <<renderpass, Render Pass>> and <<synchronization,
+    Synchronization>> chapters (internal issue 1062).
+  * Clarify statement in the <<interfaces-resources-setandbinding,
+    DescriptorSet and Binding Assignment>> section that only interface
+    variables statically used by the entry point used in a pipeline must be
+    present in the descriptor set layout (internal issue 1172).
+  * Flip sparse image diagrams with partially full mip levels vertically, to
+    match graph origins of other image diagrams (internal issue 1176).
+  * Update new SVG diagrams to have consistent style and base font size,
+    increase consistency of primitive topology diagrams, and add a section
+    to the style guide on creating and editing images in a consistent style
+    (internal issue 1177).
+  * Resolve problems with valid usage statement extraction by fixing
+    existing VUID tags for interfaces promoted to version 1.1 and fixing
+    conditional directives around
+    VUID-VkMemoryDedicatedAllocateInfo-image-01797 (internal issue 1184).
+  * Strip `KHR` suffixes from a few interfaces promoted to Vulkan 1.1 that
+    were missed previously (internal issue 1185).
+  * Restrict code:OpImageQuerySizeLod and code:OpImageQueryLevels to only
+    work on code:Image operands with their code:Sampled operand set to 1. In
+    other words, these operations are not defined to work with storage
+    images (internal issue 1193).
+  * Recycle extension slot for extension #82 in `vk.xml`. This extension was
+    never published (internal issue 1195).
+  * Add an issue to the `VK_KHR_maintenance1` appendix noting that zero
+    height viewports are allowed when this extension is enabled (internal
+    issue 1202).
+  * Fix slink:VkDescriptorSetLayoutBinding description so that shader stages
+    always use descriptor bindings, not the other way around (internal issue
+    1206).
+  * Fix field name for
+    slink:VkInputAttachmentAspectReference::pname:inputAttachmentIndex
+    (internal issue 1210).
+
+Other Issues:
+
+  * Fix a few broken links in the <<versions-1.1, Version 1.1>> appendix.
+  * Replace a few old refBegin/refEnd tags with open block markup around
+    interfaces, and remove old KHX VUID tags that were breaking the valid
+    usage statement extraction.
+  * Fix error codes accidentally tagged as success codes in `vk.xml` for
+    flink:vkGetSwapchainCounterEXT.
+  * Added valid usage statements for ftext:vkBind*Memory2 input structures
+    stext:VkBind*MemoryInfo, and fix a pname:image -> pname:buffer typo in a
+    couple of places.
+  * Fix swapped descriptions of elink:VkDescriptorType enums
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE (reported via tweet).
+
+New Extensions:
+
+  * `VK_ANDROID_external_memory_android_hardware_buffer`
+
+-----------------------------------------------------
+
+Change log for March 7, 2018 Vulkan 1.1.70 spec update:
+
+  * Vulkan 1.1 initial release. Bump API patch number and header version
+    number to 70 for this update. The patch number will be used for both
+    Vulkan 1.1 and Vulkan 1.0 updates, and continues to increment
+    continuously from the previous Vulkan 1.0.69 update.
+
+    NOTE: We are not publishing an updated 1.0.70 specification, or 1.1
+    reference pages, along with 1.1.70. There are still minor issues to work
+    out with those build targets. However, we will soon generate all three
+    types of documents as part of the regular spec update cycle.
+
+    NOTE: The GitHub KhronosGroup/Vulkan-Docs repository now maintains the
+    current specification in the `master` branch. The `1.0` branch is out of
+    date and will not be maintained, since we will be generating both 1.1
+    and 1.0 specifications from the `master` branch in the future.
+
+GitHub Issues:
+
+  * Clarify how mapped memory ranges are flushed in
+    flink:vkFlushMappedMemoryRanges (public issue 127).
+  * Specify that <<synchronization-pipeline-stages, Pipeline Stages>> are a
+    list of tasks that each command performs, rather than necessarily being
+    discrete pieces of hardware that one task flows through. Add a
+    "`synchronization command`" pipeline type which all synchronization
+    command execute (it is just TOP + BOTTOM), with an explanatory note
+    (public issue 554).
+
+Internal Issues:
+
+  * Regenerate all images used in the spec in Inkscape with a consistent
+    look-and-feel, and adjust image size attributes so they're all legible,
+    and not too large with respect to the spec body text (internal issue
+    701).
+  * Document in the <<extensions,extensions>> appendix and in the style
+    guide that `KHX` extensions are no longer supported or used in the
+    Vulkan 1.1 timeframe (internal issue 714).
+  * Remove the leftover equations_temp directory after PDF build completes
+    (internal issue 925).
+  * Update the <<credits, Credits (Informative)>> appendix to include
+    contributors to Vulkan 1.1, and to list them according to the API
+    version(s) they contributed to (internal issue 987).
+  * Add a NOTE to the introduction explaining that interfaces defined by
+    extensions which were promoted to Vulkan 1.1 are now expressed as
+    aliases of the Vulkan 1.1 type (internal issue 991).
+  * Instrument spec source conditionals so spec can be built with 1.1
+    features, extensions promoted to 1.1, or both (internal issues 992,
+    998).
+  * Modify the XML schema and tools to support explicit aliasing of types,
+    structures, and commands, and use this to express the promotion of 1.0
+    extensions to 1.1 core features, by making the extension interfaces
+    aliases of the core features they were promoted to. Mark up promoted
+    interfaces to allow still generating 1.0 + extension specifications
+    (internal issue 991).
+  * Platform names, along with corresponding preprocessor symbols to enable
+    extensions specific to those platforms, are now reserved in vk.xml using
+    the <platform> tag. Update the registry schema and schema specification
+    to match (internal issue 1011).
+  * Updated the <<textures-texel-replacement, Texel Replacement>> section to
+    clarify that reads from invalid texels for image resources result in
+    undefined values (internal issue 1014).
+  * Modify description of patch version so it continues to increment across
+    minor version changes (internal issue 1033).
+  * Clarify and unify language describing physical device-level core and
+    extension functionality in the <<fundamentals-validusage-extensions,
+    Valid Usage for Extensions>>, <<fundamentals-validusage-versions, Valid
+    Usage for Newer Core Versions>>, <<initialization-functionpointers
+    Command Function Pointers>>, <<initialization-phys-dev-extensions,
+    Extending Physical Device From Device Extensions>>
+    <<extended-functionality-instance-extensions-and-devices, Instance
+    Extensions and Device Extensions>> sections and for
+    flink:vkGetPhysicalDeviceImageFormatProperties2. This documents that
+    instance-level functionality is tied to the loader, and independent of
+    the ICD; physical device-level functionality is tied to the ICD, and
+    associated with device extensions; physical devices are treated more
+    uniformly between core and extensions; and instance and physical
+    versions can be different (internal issue 1048).
+  * Updated the <<commandbuffers-lifecycle, Command Buffer Lifecycle>>
+    section to clarify the ability for pending command buffers to transition
+    to the invalid state after submission, and add a command buffer
+    lifecycle diagram (internal issue 1050).
+  * Clarify that some flink:VkDescriptorUpdateTemplateCreateInfo parameters
+    are ignored when push descriptors are not supported (internal issue
+    1054).
+  * Specify that flink:vkCreateImage will return an error if the image is
+    too large, in a NOTE in the slink:VkImageFormatProperties description
+    (internal issue 1078).
+  * Remove near-duplicate NOTEs about when to query function pointers
+    dynamically in the <<initialization, Initialization>> chapter and
+    replace by extending the NOTE in the <<fundamentals-abi, Application
+    Binary Interface>> section (internal issue 1085).
+  * Restore missing references to "`Sparse Resource Features`" in the
+    flink:VkBufferCreateFlagBits description (internal issue 1086).
+  * Tidy up definitions of descriptor types in the `GL_KHR_vulkan_glsl`
+    specification, the <<descriptorsets, Resource Descriptors>> section and
+    its subsections, and the <<interfaces-resources-descset, Descriptor Set
+    Interface>> for consistency, reduction of duplicate information, and
+    removal of GLSL correspondence/examples (internal issue 1090).
+  * Correctly describe code:PrimitiveId as an Input for tessellation control
+    and evaluation shaders, not an Output (internal issue 1109).
+  * Relax the requirements on chroma offsets for nearest filtering in
+    <<textures-implict-reconstruction, Implicit Reconstruction>> (internal
+    issue 1116).
+
+Other Issues:
+
+  * Clarify the intended relationship between specification language and
+    certain terms defined in the Khronos Intellectual Property Rights
+    policy. Specific changes include:
+  ** Rewrote IP/Copyright preamble and introduction to better agree with
+     normative language both as laid out in the introduction, and the
+     Khronos IPR policy.
+  ** Added notion of fully informative sections, which are now tagged with
+     "`(Informative)`" in their titles.
+  ** Removed non-normative uses of the phrase "`not required`"
+  ** Clarified the distinction between terms "`optional`" and "`not
+     required:`" as they relate to the IPR Policy, and updated specification
+     text to use terms consistent with the intent.
+  ** Reduced additions to RFC 2119, and ensured the specification agreed
+     with the leaner language.
+  ** Removed the terms "`hardware`", "`software`", "`CPU`", and "`GPU`" from
+     normative text.
+  ** Moved several paragraphs that should not have been normative to
+     informative notes.
+  ** Clarified a number of definitions in the Glossary.
+  ** Updated the document writing guide to match new terminology changes.
+  * Explicitly state in the <<fundamentals-objectmodel-lifetime-acquire,
+    application memory lifetime>> language that for objects other than
+    descriptor sets, a slink:VkDescriptorSetLayout object used in the
+    creation of another object (such as slink:VkPipelineLayout or
+    slink:VkDescriptorUpdateTemplateKHR) is only in use during the creation
+    of that object and can be safely destroyed afterwards.
+  * Updated the <<textures-scale-factor, Scale Factor Operation>> section to
+    use the ratio of anisotropy, rather than the integer sample rate, to
+    perform the LOD calculation. The spec still allows use of the sample
+    rate as the value used to calculate the LOD, but no longer requires it.
+  * Update `vulkan_ext.c` to include all platform-related definitions from
+    the Vulkan platform headers, following the split of the headers into
+    platform-specific and non-platform-specific files.
+  * Fix bogus anchor name in the <<commandbuffers, Command Buffers>> chapter
+    which accidentally duplicated an anchor in the pipelines chapter. There
+    were no reference to this anchor, fortunately.
+  * Add valid usage statement for slink:VkWriteDescriptorSet and
+    slink:VkCopyDescriptorSet requiring that the slink:VkDescriptorSetLayout
+    used to allocate the source and destination sets must not have been
+    destroyed at the time flink:vkUpdateDescriptorSets is called.
+  * Document mapping of subgroup barrier functions to SPIR-V, and clarify a
+    place where subgroupBarrier sounds like it is execution-only in the
+    standalone `GL_KHR_shader_subgroup` specification.
+  * Use an HTML stylesheet derived from the Asciidoctor `colony` theme, with
+    the default Arial font family replaced by the sans-serif Noto font
+    family.
+  * Numerous minor updates to README.adoc, build scripts, Makefiles, and
+    registry and style guide specifications to support Vulkan 1.1 outputs,
+    use them as defaults, and remove mention of `KHX` extensions, which are
+    no longer supported.
+
+
+New Extensions:
+
+  * `VK_EXT_vertex_attrib_divisor`
+
+-----------------------------------------------------
+
+Change log for February 19, 2018 Vulkan 1.0.69 spec update:
+
+  * Bump API patch number and header version number to 69 for this update.
+
+GitHub Issues:
+
+  * Clean up description of synchronization for flink:vkAcquireNextImageKHR
+    (public issue 626).
+  * Move valid usage statements requiring offset and extent to respect image
+    transfer granularity requirements of the queue family they are submitted
+    against from slink:VkImageCopy and slink:VkBufferImageCopy to the
+    corresponding flink:vkCmdCopyImage, flink:vkCmdCopyBufferToImage, and
+    flink:vkCmdCopyImageToBuffer commands, where are relevant information is
+    known (public issue 654).
+  * Clarify that flink:vkGetDeviceProcAddr only supports device-level
+    commands (public issue 655).
+
+Internal Issues:
+
+  * Associate each elink:VkDescriptorType with a type of descriptor, and
+    link to descriptions of those types (internal issue 860).
+  * Rework valid usage extraction script to better utilize and respond to
+    spec markup, and fix some spec markup accordingly (internal issues 846,
+    909, 945).
+  * Rephrase flink:vkCmdPushConstants valid usage to allow overlapping push
+    constant ranges in different shader stages (internal issue 1103).
+  * Fix problem with diff_html target in extension.rb (internal issue 1104).
+  * Modify valid usage statements for slink:VkClearDepthStencilValue,
+    slink:VkGraphicsPipelineCreateInfo, slink:VkViewport, and
+    flink:vkCmdSetDepthBounds, and the description of vkCmdSetDepthBias, to
+    clarify that clamping is applied if and only if the
+    `VK_EXT_depth_range_unrestricted` is not enabled (internal issue 1124),
+    in versions of the specification built with that extension included.
+  * Resolve contradictions and use of undefined "`per-sample shading`" term
+    in the <<primsrast-sampleshading, Sample Shading>> and
+    <<shaders-fragment-execution, Fragment Shader Execution>> sections; for
+    the <<features-features-sampleRateShading, sampleRateShading feature>>;
+    for code:FragCoord, code:SampleId, and code:SamplePosition; and for
+    slink:sname:VkPipelineMultisampleStateCreateInfo (internal issue 1134).
+  * Clarify the meaning of the ptext:maxDescriptorSet* limits in footnote 8
+    of the <<features-limits-required,Required Limits>> table (internal
+    issue 1139).
+  * Fix broken NOTE markup in slink:VkSamplerCreateInfo.txt (internal issue
+    1140).
+  * Remove extend comparison language from valid usage statement for
+    slink:VkImageCreateInfo, turning it into a simple validation of
+    pname:mipLevels against pname:maxMipLevels (internal issue 1151).
+  * Update valid usage statements for slink:VkImageCopy when the
+    `VK_KHR_maintenance1` extension is enabled to allow multi-slice 2D <->
+    3D copies when the pnaem:extent.depth parameter specifies the number of
+    layers being copied, and matches the
+    slink:VkImageSubresourceLayers.layerCount of the 2D image (internal
+    issue 1152).
+  * Rephrase memory / control barrier rules in the
+    <<spirvenv-module-validation, Validation Rules within a Module>> section
+    to avoid "`not use none`", which could be misconstrued to allow no
+    synchronization semantics, and only storage class semantics (internal
+    issue 1154).
+
+Other Issues:
+
+  * Move GLSL extension specifications to the KhronosGroup/GLSL repository
+    on GitHub.
+  * Add missing description of ename:VK_FILTER_CUBIC_IMG enum to
+    slink:VkFilter.
+  * Update description of code:PrimitiveId in the
+    <<interfaces-builtin-variables,Built-In Variables>> section to clarify
+    its behavior.
+  * Disallow disjoint images from being used with dedicated-memory images in
+    slink:VkMemoryDedicatedAllocateInfoKHR.
+  * Update README to suggest older versions of "mathematical" and
+    "ruby-gems" packages for use on Cygwin.
+  * Fix typos
+
+New Extensions:
+
+  * `VK_AMD_buffer_marker`
+
+-----------------------------------------------------
+
+Change log for January 15, 2018 Vulkan 1.0.68 spec update:
+
+  * Bump API patch number and header version number to 68 for this update.
+
+GitHub Issues:
+
+  * Added more details in the
+    <<extended-functionality-extensions-compatibility, Extension
+    Compatibility>> section, allowing explicit incompatibilities, and
+    simplify corresponding language in the style guide, which now defers to
+    the API Specification on this point (public issue 638).
+  * Fix typo in description of slink:VkCommandBufferLevel::pname:level
+    (public issue 651).
+  * Only include extension-dependent valid usage statement for
+    slink:VkImageSubresourceRange, and note that the extension names for
+    header files described in the <<boilerplate-wsi-header, Window
+    System-Specific Header Control>> section are only valid links, when the
+    specification being viewed is built with the corresponding extensions
+    enabled (public issue 652).
+
+Internal Issues:
+
+  * Add language to elink:VkResult specifying that when commands return an
+    error, output parameter contents are undefined instead of unmodified
+    (except for pname:sType and pname:pNext). Note that this is a behavior
+    change. Add notes calling out slink:VkImageFormatProperties as an
+    exception (internal issue 1118).
+  * Add "`general-purpose`" to the style guide, and correct existing uses of
+    "`general purpose`" as an adjective (internal issue 1121).
+  * Add the ename:VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT token
+    for the `VK_EXT_validation_cache` extension, following the same naming
+    pattern as other tokens in the extension, but keep the old
+    ename:VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT token around for
+    backwards compatibility (internal issue 1126).
+
+Other Issues:
+
+  * Specify that flink:vkCmdSetDiscardRectangleEXT does not affect copies or
+    clears, matching existing language for the scissor rectangle test.
+  * Move the <<boilerplate-sType, pname:sType>> definition from the
+    boilerplate appendix to the Fundamentals chapter, putting it together
+    with the valid usage of pname:sType rather than having the definition
+    split across two places.
+  * Inline all of the etext:Vk*Flags definitions, moving each one from the
+    boilerplate appendix to appear either after the corresponding
+    etext:Vk*FlagBits value if one is defined, or after the first structure
+    that includes them if not.
+
+-----------------------------------------------------
+
+Change log for January 5, 2018 Vulkan 1.0.67 spec update:
+
+  * Bump API patch number and header version number to 67 for this update.
+  * Update copyright dates to 2018
+
+GitHub Issues:
+
+  * Fix texture lookup functions in `GL_KHR_vulkan_glsl` specification
+    (public pull request 363).
+  * Clarify the state waited semaphores are left in when a call to
+    flink:vkQueuePresentKHR fails (public issue 572).
+  * Cleanup descriptions of slink:VkObjectTablePushConstantEntryNVX and
+    slink:VkObjectTableDescriptorSetEntryNVX (public issue 583)
+  * Remove redundant flink:vkCmdSetDiscardRectangleEXT valid usage
+    statements (public pull 586).
+  * Make dynamic state array length valid usage statements implicit for
+    flink:vkCmdSetViewportWScalingNV, flink:vkCmdSetDiscardRectangleEXT, and
+    flink:vkCmdSetViewport (public pull 589).
+  * Clarify meaning of window extent (0,0) in slink:VkSwapchainKHR for the
+    Windows and X11 platforms, in their respective extensions (public issue
+    590).
+  * Allow flink:vkGetPastPresentationTimingGOOGLE to return
+    ename:VK_INCOMPLETE (public issue 604).
+  * Add synchronization valid usage statements to flink:vkAcquireNextImage
+    (public pull 611).
+  * Fix some broken external links and internal xrefs (public pull 613).
+  * Clean up slink:VkViewport valid usage statements in the presence or
+    absence of relevant extensions (public pull 623).
+  * Remove
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
+    token from VK_KHR_maintenance2 from the non-extension VU path for
+    slink:VkGraphicsPipelineCreateInfo (public issue 628).
+  * Miscellaneous minor markup fixes - extension name strings (public pull
+    631), Notes (pull 633), queue names emitted by generator scripts (pull
+    634), block formatting in slink:VkDescriptorUpdateTemplateEntryKHR (pull
+    635), ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG (pull
+    641), quotes and apostrophes (pull 643),
+  * Miscellaneous minor grammar fixes (public pull 644).
+  * Fix markup macros so usage like ptext:*Src* works (public pull 647).
+
+Internal Issues:
+
+  * Clarify in the `VK_KHR_surface` and `VK_KHR_swapchain` extensions that
+    parameter combinations which aren't supported for normal images are also
+    unsupported for presentable images, even if the parameter values are
+    individually supported as reported by the surface capability queries
+    (internal issue 1029).
+  * Fixed XML typo in the valid value field of the pname:sType member of
+    slink:VkPhysicalDeviceExternalMemoryHostPropertiesEXT (internal issue
+    1100).
+
+Other Issues:
+
+  * Add memory semantics validity rules to the <<spirvenv-module-validation,
+    Validation Rules within a Module>> section of the SPIR-V environment
+    appendix, and specify that sequentiality consistency is not supported.
+    This forbids certain cases like "`Load+Release`" that we don't expect to
+    ever be meaningful.
+  * Document mapping of OpenGL Shading Language barriers to SPIR-V scope and
+    semantics in the `GL_KHR_vulkan_glsl` specification.
+
+New Extensions:
+
+  * `VK_EXT_conservative_rasterization`
+
+-----------------------------------------------------
+
+Change log for November 27, 2017 Vulkan 1.0.66 spec update:
+
+  * Bump API patch number and header version number to 66 for this update.
+
+GitHub Issues:
+
+  * Clarified how and when ename:VK_ERROR_TOO_MANY_OBJECTS is generated in
+    flink:vkAllocate Memory, and remove incorrect valid usage statement
+    about exceeding the API limit (public issue 356).
+  * Minor clarification of the description of
+    flink:vkUpdateDescriptorSetWithTemplateKHR::pname:descriptorUpdateTemplate
+    (public issue 564).
+  * Minor fixes for flink:vkCmdSetViewportWScalingNV (public pull request
+    588).
+  * Fix random name markup issues (public pull request 603).
+  * Fix code:BuiltIn decoration typo in the <<fxvertex-attrib, Vertex
+    Attributes>> section (public pull request 606).
+  * Fix synchronization language following the definition of
+    flink:vkAcquireNextImageKHR (public issue 607).
+  * Restore descriptions of several commands and structures missing from the
+    generated spec due to a mistyped Asciidoctor conditional (public issue
+    612).
+  * Fix 1.0.41 changelog to refer to public issues 403/404 (public issue
+    618).
+
+Internal Issues:
+
+  * Refactor valid usage statements with internal conditionals in
+    `copies.txt`, `pipelines.txt`, `renderpass.txt`, and `resources.txt` so
+    each branch of the conditional appears as a standalone statement which
+    can contain a separate VUID. This should have no impact on the generated
+    specs, but is necessary given the present state of the VU extractor and
+    the validation layer code that consumes them (internal issue 1043).
+  * Fix VkQueueGlobalPriorityEXT enum values missing _EXT suffix (internal
+    issue 1045).
+  * Clarified initial ownership of resources bound to shared memory objects,
+    (internal issue 1068).
+  * Fix duplicated valid usage ID tag for flink:vkCmdCopyImage, and make the
+    required layouts include ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL in
+    both cases (internal issue 1084).
+
+Other Issues:
+
+  * Remove the noise functions from GLSL for SPIR-V for Vulkan in the
+    `GL_KHR_vulkan_glsl.txt` extension.
+
+New Extensions:
+
+  * `VK_EXT_external_memory_host`
+  * `VK_EXT_external_memory_dma_buf`
+  * `VK_EXT_queue_family_foreign`
+
+-----------------------------------------------------
+
+Change log for October 27, 2017 Vulkan 1.0.65 spec update:
+
+  * Bump API patch number and header version number to 65 for this update.
+
+GitHub Issues:
+
+  * Replaced inaccurate "`pixel`" with "`texel`" or "`compressed texel
+    block`" as appropriate in the <<sparsememory, Sparse Resources>> chapter
+    (public issue 86).
+  * Attempt to clarify security/integrity guarantees in the
+    <<fundamentals-errors, Errors>> section (public issue 147).
+  * Update the <<memory-device,Device Memory>> section with clarifications
+    and markup fixes (public pull request 194).
+  * Fix typo VkDeviceCreateInfo -> slink:VkDebugMarkerObjectNameInfoEXT in
+    sample code for `VK_EXT_debug_marker` extension (public pull request
+    227).
+  * Clarified slink:VkFramebufferCreateInfo language regarding concurrent
+    use of attachment resources during a render pass instance (public issue
+    299).
+  * Added overlap rules for destination regions in <<copies,copy commands>>.
+    Also unified the sparse and non-sparse source-destination overlap rules,
+    since the non-sparse rules were technically inaccurate in the face of
+    aliasing in flink:vkBindMemory2 - the new rules are true regardless
+    (public issue 317).
+  * Clarified the <<features-features-samplerAnisotropy,
+    pname:samplerAnisotropy feature>> to only affect the
+    slink:VkSamplerCreateInfo::pname:anisotropyEnable value, and that
+    pname:maxAnisotropy is ignored when pname:anisotropyEnable is VK_FALSE
+    (public issue 503).
+  * Clarify pointer valid usage statements to use "`valid pointer to valid
+    _object_`" terminology and update the
+    <<fundamentals-validusage-pointers,Valid Usage for Pointers>> section
+    accordingly (public pull request 547).
+  * Some operations that use integer coordinates can also accept a LOD to
+    sample from. Add a description of that selection and the validity
+    conditions in the new <<textures-integer-coordinate-operations, Integer
+    Texel Coordinate Operations>> section (public issue 548).
+  * Update stext:VkImageSubresource* valid usage statements (public pull
+    request 550).
+  * Added text tying ename:VK_OUT_OF_POOL_MEMORY error for
+    flink:vkAllocateDescriptorSets to the number of descriptor types in the
+    allocating pool. Removed redundant "`length`" text about number of
+    descriptors returned (public issue 582).
+  * Update slink:VkSwapchainCreateInfoKHR descriptions (public pull request
+    585).
+  * Update slink:VkPipelineViewportWScalingStateCreateInfoNV and related
+    structures' valid usage statements (public pull request 587).
+  * Change some dates to conform to ISO 8601 as specified in the style guide
+    (public pull request 601).
+  * Fix some math markup problems and be more consistent in use of asciidoc
+    math markup (public pull request 602).
+
+Internal Issues:
+
+  * Clarified that attribute reads from incomplete vertex buffer elements
+    are considered out of bounds accesses, in the
+    slink:VkPhysicalDeviceFeatures and flink:vkCmdBindVertexBuffers.txt
+    sections (internal issue 842).
+
+-----------------------------------------------------
+
+Change log for October 20, 2017 Vulkan 1.0.64 spec update:
+
+  * Bump API patch number and header version number to 64 for this update.
+
+GitHub Issues:
+
+  * Add chapter name to the PDF page footer (public pull request 458).
+  * Fix several mistaken references to the nonexistent etext:VK_DEVICE_LOST
+    status to etext:VK_ERROR_DEVICE_LOST (public pull request 502).
+  * Fix description of the tlink:PFN_vkDebugReportCallbackEXT debug report
+    callback function pointer to match the validation layer behavior (public
+    issue 534).
+  * Document experimental KHX extensions and alternate vendor author IDs
+    also ending in X in more detail in the <<extensions, Layers &
+    Extensions>> appendix, the extensions section of the style guide, and
+    the registry schema description document (public issues 536, 580).
+  * Fix references to ptext:pDepthStencil to properly refer to
+    pname:pDepthStencilState or pname:pRasterizationState as appropriate in
+    the slink:VkGraphicsPipelineCreateInfo description (public issue 542).
+  * Fix wrong parameter name in slink:VkPipelineMultisampleStateCreateInfo
+    valid usage (public pull request 571).
+
+Internal Issues:
+
+  * Update the style guide to describe how to write LaTeX math expressions
+    in table cells (internal issue 908).
+  * Define how framebuffer-local dependencies work between subpasses with
+    the same or different numbers of samples, in the
+    slink:VkSubpassDescription and <<synchronization-framebuffer-regions,
+    Framebuffer Region Dependencies>> sections. This clarifies which samples
+    in an input attachment you are allowed to access after a
+    framebuffer-local dependency (internal issue 915).
+  * Specify which storage classes can have an initializer in the
+    <<spirvenv-module-validation, Validation Rules within a Module>> section
+    (internal issue 1023).
+  * Use "LOD" consistently for "level-of-detail", to eliminate spelling
+    inconsistencies. The term is already standardized in the Glossary
+    (internal issue 1027).
+
+Other Issues:
+
+  * Fix false positives in Makefile dependencies when rules fail, by
+    deleting partially-made targets.
+
+New Extensions:
+
+  * `VK_AMD_shader_info`
+
+-----------------------------------------------------
+
+Change log for October 13, 2017 Vulkan 1.0.63 spec update:
+
+  * Bump API patch number and header version number to 63 for this update.
+
+GitHub Issues:
+
+  * Add missing valid usage statements for ptext:maxDescriptorSets*,
+    ptext:maxPerStageDescriptorInputAttachments, and
+    ptext:maxPerStageResources to slink:VkPipelineLayoutCreateInfo.txt,
+    flink:VkComputePipelineCreateInfo, and
+    flink:VkGraphicsPipelineCreateInfo (public issue 546).
+  * Fix typos in ftext:vkCmdDraw*AMD descriptions (public pull request 549).
+  * Fixed flink:vkCmdWriteTimestamp so it is not unnecessarily restricted to
+    queues supporting graphics or compute operations (public issue 558).
+  * Improvements to valid usage generator for output `*Flags` pointer
+    parameters and for some `void *` parameters (public pull requests 560,
+    562).
+  * Document `altlen` attribute in XML schema as valid C99 syntax and tweak
+    `vk.xml` to match (public pull request 566).
+  * Clarify when pname:fence is signaled by flink:vkQueueSubmit in a more
+    obvious place (public issue 577).
+
+Internal Issues:
+
+  * Specify a list of supported SPIR-V Storage Classes in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    appendix (internal SPIR-V issue 166).
+  * Relax the shared semaphore wait timeout requirement in the
+    <<synchronization-semaphores-importing, Importing Semaphore Payloads>>
+    section (internal issue 820).
+  * Update the <<textures-image-level-selection, Image Level(s) Selection>>
+    equations so that the parameters returned by the level-of-detail query
+    appear explicitly, also fixing the issue that linear filtering would
+    select a level below the base level for magnification (internal issue
+    926).
+  * Disallow creation of a swapchain with zero pname:imageExtent in
+    slink:VkSurfaceCapabilitiesKHR and slink:VkSwapchainCreateInfoKHR
+    (internal issue 1020).
+
+Other Issues:
+
+  * Clarify in <<textures-operation-validation,Image View Validation>> that
+    the layout of subresources in an image view must have a layout that
+    matches that written into the descriptor, and that this section is about
+    validating image views, not images.
+
+New Extensions:
+
+  * `VK_EXT_global_priority`
+
+-----------------------------------------------------
+
+Change log for October 6, 2017 Vulkan 1.0.62 spec update:
+
+  * Bump API patch number and header version number to 62 for this update.
+
+GitHub Issues:
+
+  * Move asciidoc conditionals for `VK_KHR_maintenance1` in
+    slink:VkDescriptorSetAllocateInfo so valid usage statements for
+    `VK_KHR_push_descriptor` aren't accidentally removed when the first
+    extension isn't enabled (public issue 573).
+
+Internal Issues:
+
+  * Specify constraints on concurrent access to fences that share payload in
+    the <<synchronization-fences-importing, Importing Fence Payloads>> and
+    <<synchronization-semaphores-waiting-state, Semaphore State Requirements
+    For Wait Operations>> sections (internal issue 820).
+  * Define the term "`retired swapchain`", reorganize some swapchain
+    language, and improve language for pname:oldSwapchain in
+    flink:VkSwapchainCreateInfoKHR, the <<swapchain-wsi-image-create-info>>
+    table, flink:vkDestroySwapchainKHR, and flink:vkAcquireNextImage2KHX
+    (internal issue 869).
+  * Describe in the <<writing-arrays, Describing Properties of Array
+    Elements>> section of the style guide how and when to use "`each`" and
+    "`any`" to refer to properties of array elements, and make those uses in
+    the specification consistent (internal issue 884).
+  * Clarified that events cannot be used for cross-queue synchronization in
+    the <<synchronization-events, Events>> section and for
+    flink:vkCmdWaitEvents (internal issue 970).
+  * Add success and error codes to +vk.xml+ for
+    flink:vkCreateValidationCacheEXT (internal issue 995).
+  * Clarify aspect mask usage for image memory barriers of multi-plane
+    images in slink:VkImageSubresourceRange, slink:VkImageMemoryBarrier, and
+    the <<textures-layout-validation, Layout Validation>> section (internal
+    issue 996).
+
+Other Issues:
+
+  * Fixed typo in flink:VkRenderPassSampleLocationsBeginInfoEXT (renamed
+    field pname:pSubpassSampleLocations to
+    pname:pPostSubpassSampleLocations).
+  * Add missing buffer usage requirements for indirect draws in
+    flink:vkCmdDrawIndirect, flink:vkCmdDrawIndirectCountAMD,
+    flink:vkCmdDrawIndexedIndirect, and
+    flink:vkCmdDrawIndexedIndirectCountAMD.
+  * Modify Makefile to allow specification to build in git "`detached HEAD`"
+    state.
+  * Update valid usage ID generation script to allow recursively operating
+    on all `.txt` files in a specified directory, and move the `startVUID`
+    tracking information into a separate python file that is automatically
+    updated by the script.
+  * Fixed errors in API example code for
+    flink:vkUpdateDescriptorSetWithTemplateKHR and
+    flink:vkCmdPushDescriptorSetWithTemplateKHR.
+
+New Extensions:
+
+  * Add +vk.xml+ entries for pending `VK_ANDROID_native_buffer` extension
+    (note, this extension is not yet enabled).
+  * `VK_AMD_shader_image_load_store_lod`
+
+-----------------------------------------------------
+
+Change log for September 15, 2017 Vulkan 1.0.61 spec update:
+
+  * Bump API patch number and header version number to 61 for this update.
+
+GitHub Issues:
+
+  * Provide alternate length attributes (altlen=) in the XML schema, for
+    those using length attributes to generate code instead of documentation
+    (public issue 555).
+  * Fix erroneous references to `latex:` being used for asciidoc math
+    markup, rather than `latexmath:` (public pull request 556).
+  * Add author ID to XML for Kazan software renderer (public pull request
+    557).
+
+Internal Issues:
+
+  * Add the <<fundamentals-abi,Application Binary Interface>> section
+    describing platform ABI requirements and recommendations, add examples
+    of function and function pointer declarations to the
+    <<boilerplate-platform-specific-calling-conventions, Platform-Specific
+    Calling Conventions>> section, and remove related language that existed
+    elsewhere in the specification (internal issue 64).
+  * Describe where to document valid usage interactions of chained
+    structures in the style guide, and fix one case now appearing in
+    slink:VkBufferCreateInfo instead of the child
+    slink:VkDedicatedAllocationBufferCreateInfoNV structure (internal issue
+    715).
+  * Add example to the style guide of describing enumerated types which are
+    empty when the spec is built without relevant extensions enabled, and
+    apply it to existing examples for
+    elink:VkDescriptorSetLayoutCreateFlagBits and
+    elink:VkSubpassDescriptionFlagBits (internal issue 864).
+  * Add a note to the <<fundamentals-validusage-enums, Valid Usage for
+    Enumerated Types>> section that the special values suffixed with
+    etext:_BEGIN_RANGE, etext:_END_RANGE, etext:_RANGE_SIZE and
+    etext:_MAX_ENUM are not part of the API and should: not be used by
+    applications (internal issue 872).
+  * Added note to flink:vkCmdUpdateBuffers explaining the performance
+    penalty for copies done in this way, and why the upper copy limit is
+    what it is (internal issue 952).
+  * Update `VK_KHX_device_group` to split some functionality into the new
+    `VK_KHR_bind_memory2` extension, and rename that functionality (internal
+    issue 969).
+  * Remove *Status* fields from extension appendices, since they are by
+    definition published and complete by the time they reach the public
+    GitHub repository (internal issue 973).
+
+Other Issues:
+
+  * Update Data Format specification dependency to version 1.2 and change
+    references to DF sections accordingly.
+  * Update XML to make the pname:pAllocator parameter of
+    flink:vkRegisterDeviceEventEXT and flink:vkRegisterDisplayEventEXT in
+    the `VK_EXT_display_control` extension as optional.
+
+New Extensions:
+
+  * `VK_KHR_bind_memory2`
+  * `VK_KHR_image_format_list`
+  * `VK_KHR_maintenance2`
+  * `VK_KHR_sampler_ycbcr_conversion`
+
+-----------------------------------------------------
+
+Change log for September 5, 2017 Vulkan 1.0.60 spec update:
+
+  * Bump API patch number and header version number to 60 for this update.
+
+GitHub Issues:
+
+  * Document that <<queries-timestamps, Timestamp Queries>> can only be
+    meaningfully compared when they are written from the same queue (public
+    issue 216).
+  * Document that the `<extension>` tag `type` attribute is required for
+    non-disabled extensions (derived from, but does not close public issue
+    354).
+  * Clean up registry schema length attribute descriptions to be consistent
+    and correct (public issue 555).
+
+Internal Issues:
+
+  * Replace as much of the hand-written extension appendix metadata as
+    possible with asciidoc includes generated from corresponding attributes
+    of +vk.xml+, and enhance the style guide to match. This avoids
+    inconsistencies between +vk.xml+ and the appendices, and produces a more
+    uniform style (internal issue 137).
+  * Remove the generated extDependency.{py,sh} files from the tree and
+    create them dynamically on demand instead, reducing merge conflicts
+    (internal issue 713).
+  * Add a prototype tool for generating in-place difference markup for
+    sections guarded by asciidoc conditionals, and new syntax for open
+    blocks to support it (internal issue 833).
+  * Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
+    types to the same physical device in the
+    slink:VkPhysicalDeviceIDPropertiesKHR,
+    flink:VkImportMemoryWin32HandleInfoKHR,
+    slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
+    slink:VkImportSemaphoreWin32HandleInfoKHR,
+    slink:VkImportSemaphoreFdInfoKHR
+    <<external-memory-handle-types-compatibility, External memory handle
+    types compatibility>>, <<external-semaphore-handle-types-compatibility,
+    External semaphore handle types compatibility>>, and
+    <<external-fence-handle-types-compatibility, External fence handle types
+    compatibility>> sections (internal issue 956).
+
+Other Issues:
+
+  * Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
+    is an interaction, but not a strict dependency), and add a new
+    `extension` attribute to the `<require` XML tag to allow classifying a
+    subset of interfaces of an extension as requiring another extension.
+    Update the registry schema and documentation accordingly.
+
+New Extensions:
+
+  * `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
+    GLSL extension)
+  * `VK_EXT_sample_locations`
+  * `VK_EXT_validation_cache`
+
+-----------------------------------------------------
+
+Change log for August 19, 2017 Vulkan 1.0.59 spec update:
+
+  * Bump API patch number and header version number to 59 for this update.
+
+GitHub Issues:
+
+  * Fix a few missing Implicit Valid Usage statements to indicate that a
+    common parent of two objects is required (public issue 497).
+  * Clarify render pass synchronization language for
+    slink:VkSubpassDependency and <<renderpass,render passes>> (public
+    issue 531).
+  * Rename ename:VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT to
+    ename:VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT for consistency, and
+    add an alias for backwards compatibility (public issue 539).
+
+Internal Issues:
+
+  * Add an explanation to the <<interfaces-builtin-variables-layer,
+    code:Layer>> description explaining that writing to invalid layers
+    results may or may not result in primitives being processed and fragment
+    shaders being run, and gives undefined results in the framebuffer
+    (internal issue 614)
+  * Add valid usage statement for slink:VkDescriptorSetLayoutBinding
+    requiring that input attachment descriptor bindings must not use
+    non-fragment stages (internal issue 933).
+
+Other Issues:
+
+  * Makes description of pname:loadOp and pname:storeOp easier to read in
+    the <<renderpass-load-store-ops>> section.
+
+New Extensions:
+
+  * `VK_EXT_shader_stencil_export`
+
+-----------------------------------------------------
+
+Change log for August 14, 2017 Vulkan 1.0.58 spec update:
+
+  * Bump API patch number and header version number to 58 for this update.
+
+GitHub Issues:
+
+  * Update the <<interfaces-resources-descset,Descriptor Set Interface>>
+    section to allow multiple variables with the same descriptor set/binding
+    decorations, and require that all variables that are statically used
+    must be consistent with the pipeline layout. Allow
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture
+    and sampler variables (public issues 522, 524).
+
+Internal Issues:
+
+  * Replace networkx package used for extension dependency generation with a
+    homegrown network dependency traverser (internal issue 713).
+  * Specify in the <<interfaces-fragmentoutput, Fragment Output Interface>>
+    section that if a fragment shader writes integers that cannot be
+    represented in the format of the color attachment, then the result is
+    undefined (internal issue 893).
+  * Separate malformed valid usage statement for
+    slink:VkPipelineRasterizationStateCreateInfo into two (internal issue
+    918).
+  * Fix cases where the term 'pNext chain' is incorrectly used in reference
+    to functions, rather than their parameters. Replace 'pNext list' with
+    'pNext chain'. Fixed typo in the example code of
+    +VK_KHR_dedicated_allocation+ (internal issue 944).
+  * Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum
+    descriptions, replacing
+    etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the
+    description more consistent with
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950).
+
+Other Issues:
+
+  * Clarify how pipeline stage masks affect
+    <<synchronization-pipeline-stages-masks, access and synchronization
+    scopes>>.
+  * Clarify that dedicated allocations do not allow aliasing in the
+    flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage
+    statements.
+  * Correct specification of pname:dynamicCount for push_constant token in
+    slink:VkIndirectCommandsLayoutNVX.
+
+New Extensions:
+
+  * `VK_EXT_shader_viewport_index_layer`
+
+-----------------------------------------------------
+
+Change log for August 1, 2017 Vulkan 1.0.57 spec update:
+
+  * Bump API patch number and header version number to 57 for this update.
+
+GitHub Issues:
+
+  * Fix error in description of ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+    block size (public issue 342).
+  * Update documentation of ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
+    to explicitly mention both graphics and compute pipelines (public issue
+    525).
+
+Internal Issues:
+
+  * Document that
+    slink:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts does
+    not cover integer formats (internal issue 550).
+  * Add a note under slink:VkImageViewCreateInfo describing how values meant
+    for one format can be sanitized when used via another format (internal
+    issue 927).
+  * Add valid usage statements to ftext:vkCmd* documenting that image
+    subresources used as attachments must not be accessed as non-attachments
+    in a render pass (internal issue 929).
+  * Remove obsolete 'validextensionstructs' attribute from +vk.xml+, the XML
+    schema, and the schema documentation (internal issue 946).
+
+New Extensions:
+
+  * `VK_AMD_mixed_attachment_samples`
+  * `VK_EXT_post_depth_coverage`
+  * `VK_KHR_relaxed_block_layout`
+
+-----------------------------------------------------
+
+Change log for July 21, 2017 Vulkan 1.0.56 spec update:
+
+  * Bump API patch number and header version number to 56 for this update.
+
+GitHub Issues:
+
+  * Add valid usage statements for commands introduced by
+    `VK_EXT_debug_report` and `VK_EXT_debug_marker` extensions, regarding
+    the valid pname:object and pname:objectType values (public issue 495).
+  * Modify `GL_KHR_vulkan_glsl` specification to document that uniform and
+    buffer block arrays each take only a single binding (public issue 514).
+  * Add `KHX` author tag to +vk.xml+ (public issue 526).
+
+Internal Issues:
+
+  * Document use of code: macro for non-Vulkan APIs in the style guide
+    (internal issue 863).
+  * Document that reference page open block delimiters must not contain
+    asciidoc section markup in the style guide (internal issue 898).
+  * Fix <<spirvenv,SPIR-V appendix>> to say
+    code:VariablePointersStorageBuffer instead of
+    code:VariablePointersUniformBufferBlock (internal issue 928).
+
+Other Commits:
+
+  * Add missing extension structures to dependency attributes in +vk.xml+.
+
+New Extensions:
+
+  * `VK_EXT_depth_range_unrestricted`
+
+-----------------------------------------------------
+
+Change log for July 15, 2017 Vulkan 1.0.55 spec update:
+
+  * Bump API patch number and header version number to 55 for this update.
+
+GitHub Issues:
+
+  * Removed unintended optional parameter in +vk.xml+ from the
+    pname:pWaitSemaphores member of slink:VkPresentInfoKHR, which resulted
+    in the generation of an incorrect implicit valid usage clause allowing
+    pname:pWaitSemaphores to be NULL even when pname:waitSemaphoreCount is
+    non-zero (public issue 491).
+  * Add missing attribute to +vk.xml+ documenting that
+    slink:VkSwapchainCounterCreateInfoEXT extends
+    slink:VkSwapchainCreateInfo (public issue 510).
+  * Add const qualifier for some `VK_EXT_debug_market` extension command
+    parameters that were missing it (public issue 513).
+  * Fix definition of q and level~base~ in
+    <<textures-image-level-selection,Image Level(s) Selection>> (public
+    issue 515).
+  * Clarify lifetime requirement for slink:VkRenderPass objects used in
+    object creation (public issue 516).
+  * Fix link to floating/normalized fixed-point conversion from
+    <<interfaces-fragmentoutput,Fragment Output Interface>> (public issue
+    521).
+
+Internal Issues:
+
+  * Update the style guide to include the general structure of a Vulkan
+    command name, the specific rule for using "`Get`" vs. "`Enumerate`" in
+    names, and a table of verbs commonly used in command names (spinoff of
+    internal issue 753).
+  * Clarified the behavior of automatic layout transitions in case of
+    attachment views that are 2D or 2D array views of 3D images. In
+    addition, restructured the valid usage clauses corresponding to the
+    members of the slink:VkImageSubresourceRange structure and added missing
+    valid usage clauses for its pname:baseMipLevel and pname:baseArrayLayer
+    members (internal issues 803, 849).
+  * Modify `GL_KHR_vulkan_glsl` specification to allow explicit std430 on a
+    push_constant declaration (internal issue 919).
+
+Other Commits:
+
+  * Modify <<synchronization-framebuffer-regions, Framebuffer Region
+    Dependencies>> to use synchronization scope terminology.
+  * Add ename:VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT to the
+    `VK_EXT_swapchain_colorspace` extension.
+  * Replace XML comments with `comment` attributes and/or tags, to enable
+    tools which transform the XML without loss of information.
+  * Replace `validextensionstructs` with `structextends`, which is tagged in
+    the child structure instead of the parent. This makes it slightly
+    simpler to add new structs to the XML, causes fewer merge conflicts, and
+    the information is kept localized to the extension structures where it
+    belongs. The old `validextensionstructs` attributes will be retained
+    until we're certain this doesn't cause problems with known consumers of
+    +vk.xml+.
+
+-----------------------------------------------------
+
+Change log for July 13, 2017 Vulkan 1.0.54 spec update:
+
+  * Bump API patch number and header version number to 54 for this update.
+
+GitHub Issues:
+
+Internal Issues:
+
+  * Fix tessellation domain to have an upper-left origin in the
+    <<img-tessellation-topology-ul, tessellation toplogy image>> and related
+    language. CTS and all implementations were already doing this, it was
+    just a documentation bug that it was flipped to lower-left (internal
+    issue 603).
+  * Add a section to the style guide describing how VUID tags are changed
+    and removed when the corresponding Valid Usage statements are modified
+    (internal issue 829).
+  * Add explicit Valid Usage statement to
+    slink:VkPipelineDynamicStateCreateInfo to require that members of
+    pname:pDynamicStates must be unique (internal issue 851).
+
+New Extensions:
+
+  * `VK_KHR_16bit_storage`
+  * `VK_KHR_dedicated_allocation`
+  * `VK_KHR_external_fence`
+  * `VK_KHR_external_fence_capabilities`
+  * `VK_KHR_external_fence_fd`
+  * `VK_KHR_external_fence_win32`
+  * `VK_KHR_get_memory_requirements2`
+  * `VK_KHR_storage_buffer_storage_class`
+  * `VK_KHR_variable_pointers`
+
+Extensions Promoted From KHX To KHR Status:
+
+  * `VK_KHR_external_memory`
+  * `VK_KHR_external_memory_capabilities`
+  * `VK_KHR_external_memory_fd`
+  * `VK_KHR_external_memory_win32`
+  * `VK_KHR_external_semaphore`
+  * `VK_KHR_external_semaphore_capabilities`
+  * `VK_KHR_external_semaphore_fd`
+  * `VK_KHR_external_semaphore_win32`
+  * `VK_KHR_win32_keyed_mutex`
+
+-----------------------------------------------------
+
+Change log for June 24, 2017 Vulkan 1.0.53 spec update:
+
+  * Bump API patch number and header version number to 53 for this update.
+
+GitHub Issues:
+
+Internal Issues:
+
+  * Clarify mappings of coordinates for mutable, compatible image views in
+    slink:VkImageViewCreateInfo (internal issue 815).
+  * Make ename:VK_BIND_SFR_BIT require a logical device with multiple
+    physical devices, so that standard sparse image block dimensions are
+    only required on systems that support multi-GPU (internal issue 835).
+  * Convert all files from use of // refBegin .. // refEnd comments to
+    delimit ref pages, to use of open blocks, and update style guide
+    accordingly (internal issue 839).
+  * Add valid usage for slink:VkWriteDescriptorSet when performing updates
+    to a ename:VK_STORAGE_IMAGE descriptor with layout
+    ename:VK_IMAGE_LAYOUT_GENERAL.
+  * Add a hack to the validity generator script to support an odd
+    interaction between flink:vkCmdFillBuffer and an extension (internal
+    issue 853).
+  * Remove redundant text describing slink:VkBufferCreateInfo::pname:usage,
+    which was already covered by implicit valid usage (internal issue 854).
+  * Update implicit validity generator script to properly handle the
+    pname:sType and pname:pNext members of "returnedonly" structures
+    (internal issue 874).
+  * Note that slink:VkApplicationInfo::pname:pApplicationName &
+    slink:VkApplicationInfo::pname:pEngineName are optional, and add missing
+    implicit valid usage statements for flink:vkDestroyInstance.
+  * Added missing valid usage for flink:vkCmdWriteTimestamp to require a
+    timestamp query pool.
+  * Simplify and/or split "`non-atomic`" valid usage statements.
+
+New Extensions:
+
+  * `VK_AMD_gpu_shader_int16`
+  * `VK_EXT_blend_operation_advanced`
+  * `VK_EXT_sampler_filter_minmax`
+  * `VK_NV_framebuffer_mixed_samples`
+
+-----------------------------------------------------
+
+Change log for June 13, 2017 Vulkan 1.0.52 spec update:
+
+  * Bump API patch number and header version number to 52 for this update.
+
+GitHub Issues:
+
+Internal Issues:
+
+  * Clarify behavior when non-coherent memory has
+    <<memory-device-unmap-does-not-flush, not been flushed before being
+    unmapped>> (internal issue 819).
+  * Fix description of code:WorkgroupSize builtin to note it decorates an
+    object, not a variable (internal issue 836).
+  * Fix asciidoc attributes so that trailing '{plus}' symbols in [eq] style
+    equations are rendered properly (internal issue 845).
+  * Add language to the "`Extension Handles, Objects, Enums, and Typedefs`"
+    section of the Procedures and Conventions document stating that any new
+    handle type requires a corresponding entry in the elink:VkObjectType
+    enumerated type (internal issue 856).
+  * Update style guide to use slink macro for Vulkan handle type names, and
+    define narrow conditions under which to use the *name and *text macros
+    instead of *link (internal issue 886).
+  * Add a dependency of the <<VK_KHX_device_group,VK_KHX_device_group>>
+    extension on VK_KHX_device_group_creation to +vk.xml+ and the extension
+    appendix.
+  * Change the copyright on Vulkan specification asciidoc *source* files to
+    CC-BY 4.0, and update the proprietary Khronos copyright applied to the
+    generated *output* formats (internal issue 327). This enables broader
+    reuse and modification of the Vulkan specification sources, while not
+    affecting the Reciprocal IP License between Vulkan Adopters and Working
+    Group Members.
+
+New Extensions:
+
+  * `VK_NV_fill_rectangle`
+  * `VK_NV_fragment_coverage_to_color`
+
+-----------------------------------------------------
+
+Change log for June 4, 2017 Vulkan 1.0.51 spec update:
+
+  * Bump API patch number and header version number to 51 for this update.
+
+GitHub Issues:
+
+  * Add Valid Usage statement to flink:vkCmdResolveImage to require that
+    source and destination image formats match (public issue 492).
+  * Specify that a code:char* parameter must: be a valid null-terminated
+    string in the <<fundamentals-implicit-validity, implicit valid usage>>
+    section (public issue 494).
+  * Removed unnecessary VU for slink:VkPhysicalDeviceFeatures which is
+    covered by ename:VK_ERROR_FEATURE_NOT_PRESENT already (public issue
+    496).
+  * Clarify valid usage of pname:pQueueFamilyIndices in
+    slink:VkBufferCreateInfo, slink:VkImageCreateInfo, and
+    slink:VkSwapchainCreateInfoKHR (public issue 501).
+  * Document that dependencies of enabled extensions must also be enabled in
+    the <<extended-functionality-extensions-dependencies, Extension
+    Dependencies>> section (public issue 507).
+
+Internal Issues:
+
+  * Change slink:VkMappedMemoryRange valid usage to allow pname:offset
+    {plus} pname:size == size of the allocation. Also, if
+    ename:VK_WHOLE_SIZE is used, require the end of the mapping to be
+    aligned to a multiple of pname:nonCoherentAtomSize (internal issue 611).
+  * Add issue to `VK_KHR_win32_surface` about reusing window objects from a
+    different graphics API or Vulkan ICD (internal issue 639).
+  * Require locations on user in/out in `GL_KHR_vulkan_glsl` (internal issue
+    783).
+  * Added version info to the json validation output, and updated the schema
+    to match (internal issue 838).
+  * Restructure enumerated type descriptions separately from the command or
+    structure they are used in, allowing better reference page generation
+    (internal issue 841).
+  * Re-sort extension appendices to be in alphabetical order within each
+    author ID section.
+  * Fix enum naming and clarify behavior for
+    `VK_NVX_device_generated_commands` extension.
+
+-----------------------------------------------------
+
+Change log for May 20, 2017 Vulkan 1.0.50 spec update:
+
+  * Bump API patch number and header version number to 50 for this update.
+
+GitHub Issues:
+
+  * Fix numerous minor issues with the VK_EXT_debug_report extension (public
+    issues 478, 483, 486, 489, 490).
+
+Internal Issues:
+
+  * Update flink:vkAllocateDescriptorSets to specify conditions under which
+    to return ename:VK_ERROR_FRAGMENTED_POOL or
+    ename:VK_ERROR_OUT_OF_POOL_MEMORY instead of
+    out-of-host/out-of-device-memory, and improve the
+    <<fundamentals-errorcodes, description of those errors (internal issue
+    654).
+  * Add a NOTE documenting that flink:vkAcquireNextImageKHR can only signal
+    a single semaphore, and how to deal with that when multiple physical
+    devices in a logical device need to wait on it (internal issue 730).
+  * Improve description of pname:pNext chains of
+    slink:VkPhysicalDeviceImageFormatInfo2KHR and
+    slink:VkImageFormatProperties2KHR (internal issue 814).
+  * Clean up math markup issues in the <<textures, Image Operations>>
+    chapter (internal issue 818).
+  * Update validusage target to use more robust code for preprocessing, by
+    making direct use of Asciidoctor's preprocessor. Added uniqueItems check
+    to JSON vu schema and add clean_validusage target (internal issue 826).
+  * Update style guide to prohibit writing non-self-contained (on a single
+    bullet point) Valid Usage statements, and modify offending Valid Usage
+    statements in the Specification to match, to assist with automatic
+    extraction for the validation layers (internal issue 828).
+  * Add ename:VK_VALIDATION_CHECK_SHADERS_EXT to elink:VkValidationCheckEXT
+    of the `VK_EXT_validation_flags` extension, to selectively disable
+    shader validation.
+  * Remove duplicate valid usage statement for slink:VkImageMemoryBarrier.
+  * Modify reflow.py script to place VUID tag anchors standalone on a line
+    following their corresponding bullet point, and reflow the spec text
+    accordingly (this had been pending since the initial tag deployment).
+
+New Extensions:
+
+  * `VK_AMD_texture_gather_bias_lod`
+
+-----------------------------------------------------
+
+Change log for May 12, 2017 Vulkan 1.0.49 spec update:
+
+  * Bump API patch number and header version number to 49 for this update.
+
+GitHub Issues:
+
+  * Modify reference page extraction script to make internal links to spec
+    anchors refer to the core specification instead of being dangling links
+    (public issue 455).
+  * Fix GL_KHR_vulkan_glsl typo and add a nor-normative mapping to the newly
+    published StorageBuffer class (public issue 466).
+  * Both flink:vkEnumerateInstanceExtensionProperties and
+    flink:vkEnumerateDeviceExtensionProperties return
+    ename:VK_ERROR_LAYER_NOT_PRESENT, which covers the error case of an
+    application providing a layer name that wasn't returned by
+    ftext:vkEnumerate{Instance|Device}LayerProperties (public issue 487).
+  * The specification for flink:VkApplicationInfo::apiVersion says that the
+    driver must return ename:VK_ERROR_INCOMPATIBLE_DRIVER in the case that
+    pname:apiVersion specifies a non-supported version. That means that the
+    valid usage should not also state that, and so the VU statement is
+    removed. The VU had language about "`an effective substitute`" that
+    would have been lost, and so it was moved to the pname:apiVersion
+    description (public issue 488).
+
+Internal Issues:
+
+  * Modify implicit validity generator script to assign asciidoc anchors to
+    all valid usage statements it generates, and reflow.py script to insert
+    Valid Usage ID (VUID) tags into the specification source files for
+    explicit valid usage statements. This has no semantic effects on the
+    specification, but will support the validation layer's detection of
+    valid usage violations and allow it to link into the corresponding part
+    of the specification (internal issue 583).
+  * Assign VUID tags to all explicit VU statements and document
+    the process and tag format in the style guide (internal issue 583).
+  * Clarify the rules of whether to structure new functionality as instance
+    extensions, device extensions, or both in the
+    <<extended-functionality-instance-extensions-and-devices, Instance
+    Extensions and Device Extensions>> section (internal issue 749).
+  * Require that SPIR-V run-time arrays are only used with the
+    code:BufferBlock decoration (internal issue 750).
+  * Fix implicit and explicit valid usage statements for
+    slink:VkWriteDescriptorSet::pname:dstSet (internal issue 767)
+  * Fix SPIR-V code sample for ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+    in the <<descriptorsets-uniformtexelbuffer, Uniform Texel Buffer>>
+    section (internal issue 770).
+  * Clarify that disabling depth testing also disables depth writes in the
+    <<fragops-ds-state, Depth and Stencil Operations>> section (internal
+    issue 775).
+  * flink:VkDescriptorImageInfo::pname:imageLayout must match the actual
+    imageLayout at the time the image is accessed. This was in the spec
+    text, but needed an associated valid usage statement.
+  * Note that only 32-bit atomic operations are supported in the
+    <<spirvenv-module-validation, Validation Rules within a Module>>
+    section.
+  * Note that code:UniformConstant variables must not have initializers in
+    the <<spirvenv-module-validation, Validation Rules within a Module>>
+    section.
+  * Add a new elink:VkObjectType enumeration to the core API, promoted from
+    elink:VkDebugObjectTypeEXT, since it is used for much more than just the
+    debug_report extension.
+
+New Extensions:
+
+  * `VK_KHR_get_surface_capabilities2`
+  * `VK_KHR_shared_presentable_image`
+
+-----------------------------------------------------
+
+Change log for April 15, 2017 Vulkan 1.0.48 spec update:
+
+  * Bump API patch number and header version number to 48 for this update.
+
+Internal Issues:
+
+  * Add missing VU statements for flink:vkUpdateDescriptorSets (internal
+    issue 333).
+  * Correct swapped ifdef/ifndef blocks for `VK_KHR_maintenance1` extension
+    (internal issue 776).
+
+-----------------------------------------------------
+
+Change log for April 8, 2017 Vulkan 1.0.47 spec update:
+
+  * Bump API patch number and header version number to 47 for this update.
+
+GitHub Issues:
+
+  * Allow <<synchronization-pipeline-barriers-subpass-self-dependencies,
+    self-dependencies>> (also described for slink:VkSubpassDependency) to
+    have earlier stages depend on later stages if all stages are
+    framebuffer-space (public issue 125).
+  * Clarify when pipeline state structures are ignored in the
+    slink:VkGraphicsPipelineCreateInfo structure, when the tessellation
+    structure must be valid, and remove 'if `NULL`' descriptions from the
+    valid usage statements (public issue 445).
+  * Remove the obsolete "validextensionstructs" attribute for
+    flink:VkPresentRegionsKHR. This caused a pname:pNext valid usage
+    statement to be generated which wasn't consistent with what is stated in
+    the spec (public issue 481).
+
+Internal Issues:
+
+  * Clarify facingness of non-polygon fragments for slink:VkStencilOpState
+    and in the code:FrontFacing <<interfaces-builtin-variables,built-in
+    variable description>>. Define 'facingness' of a fragment as a distinct
+    term from facingness of a polygon (internal issue 662).
+  * Clarify that the texture compression features (e.g.
+    pname:textureCompressionBC) means that all formats of that type
+    (<<features-features-textureCompressionASTC_LDR,ASTC>>,
+    <<features-features-textureCompressionETC2,ETC2>>,
+    <<features-features-textureCompressionBC,BC>>) are supported, and that
+    support for individual formats may: queried separately (internal issue
+    663).
+  * Clarify in the valid usage for slink:VkBindImageMemoryInfoKHX that each
+    SFR rectangle must be a multiple of the sparse block size for each
+    aspect, e.g. in a depth/stencil image using separate depth/stencil
+    planes (internal issue 721).
+  * Re-remove KHX variants of KHR structure types after promotion (internal
+    issue 762).
+
+-----------------------------------------------------
+
+Change log for March 31, 2017 Vulkan 1.0.46 spec update:
+
+  * Bump API patch number and header version number to 46 for this update.
+
+GitHub Issues:
+
+  * Add language to the <<fundamentals-validusage-enums, Valid Usage for
+    Enumerated Types>> section allowing values to be returned from Vulkan
+    that are not present in extensions explicitly enabled by the
+    application, similar to existing language for bit flags in the
+    <<fundamentals-validusage-flags, Valid Usage for Flags>> section (public
+    issue 442).
+  * *Important*: run `gem update --pre asciidoctor-pdf` before trying to
+    build this version of the spec - 1.5.0.alpha15 is required for this
+    change. Removes the monkey patch currently used to draw valid usage
+    blocks across multiple pages which had numerous issues. A fixed version
+    was incorporated into asciidoctor-pdf for the latest release, so the
+    monkey patch or any variant thereof is no longer required (public issue
+    465).
+
+Internal Issues:
+
+  * Add ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
+    to `VK_EXT_debug_report` extension
+  * Fix ptext:pNext member of
+    slink:VkPhysicalDeviceDiscardRectanglePropertiesEXT to be a non-const
+    pointer. Properties structures return values, so the chain should be
+    non-const.
+  * Explicitly remove gl_NumSamples from the `GL_KHR_vulkan_glsl` extension,
+    against 1.0 (internal issue 612).
+  * Add Valid Usage statements requiring that each structure type valid in a
+    ptext:pNext chain must: not appear more than once in a chain (internal
+    issue 752).
+  * Use ename:VK_USE_PLATFORM_WIN32_KHX in the
+    `VK_KHX_external_memory_win32` extension, rather than etext:_KHR
+    (internal issue 754).
+
+New Extensions:
+
+  * `VK_KHR_incremental_present`
+
+-----------------------------------------------------
+
+Change log for March 24, 2017 Vulkan 1.0.45 spec update:
+
+  * Bump API patch number and header version number to 45 for this update.
+
+GitHub Issues:
+
+  * Defined the lifetime of the memory pointed to by
+    slink:VkDisplayPropertiesKHR::pname:displayName to be equal to that of
+    its associated display handle (public issue 460).
+  * Correct several cases where the sparse memory feature name
+    pname:residencyNonResidentStrict was written as
+    pname:sparseResidencyNonResidentStrict (public issue 475).
+
+Internal Issues:
+
+  * Fix ptext:pNext member of slink:VkPhysicalDeviceGroupPropertiesKHX to be
+    a non-const pointer. Properties structures return values, so the chain
+    should be non-const.
+  * Clarify definition of memory aliasing to consistently use the terms
+    "linear" and "non-linear" when referring to resources, and define what
+    those terms mean.
+  * Modified XML schema and implicit validity scripts to generate language
+    for all ptext:pNext values in a ptext:pNext chain instead of just the
+    top level struct, and made `noautovalidity` functional for ptext:sType
+    and ptext:pNext (internal issue 535).
+  * Add more detail for BT2020 and scRGB color spaces in
+    `VK_EXT_swapchain_colorspace` extension (internal issue 632).
+  * Add naming rules for Extension Structure Names (structures added to the
+    ptext:pNext chain of a base structure) to the style guide (internal
+    issue 706).
+  * Define the glossary term "ptext:pNext chain", and use it consistently in
+    the spec (internal issue 744).
+
+-----------------------------------------------------
+
+Change log for March 17, 2017 Vulkan 1.0.44 spec update:
+
+  * Bump API patch number and header version number to 44 for this update.
+
+GitHub Issues:
+
+  * Fix description of <<features-extentperimagetype, Allowed Extent Values
+    Based On Image Type>> (public issue 290).
+  * Better specify VK_DEVICE_LOST behavior around flink:vkQueueSubmit,
+    flink:vkWaitForFences, and flink:vkGetFenceStatus (public issue 423).
+  * Clarify definition of flink:vkGetQueryPoolResults::pname:queryCount
+    (public issue 441).
+  * Simplify and clean up normative language. Remove shall and replace
+    recommend and variants with should wherever possible (public issue 448).
+  * Fix all dangling internal cross-references in the 1.0-extensions
+    specification, and add scripts/checkXrefs to find these in the future
+    (public issue 456).
+  * Reverse order of ChangeLog.txt entries so the most recent version is
+    documented first (public issue 463)
+  * Removes "become invalid" which clashes with invalid state for command
+    buffers. (public issue 467)
+  * Disallowed pending state in spec text for vkResetCommandBuffer, matching
+    valid usage (public issue 468)
+  * Removes sentence describing invalid state "like initial state". (public
+    issue 469)
+  * Disallows begin command buffer from resetting command buffers in the
+    "recording" state. (public issue 470)
+  * Removes mention of state from description of
+    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT (public issue 471)
+  * Removed extra valid usage statement in VkSubmitInfo (public issue 472)
+
+Internal Issues:
+
+  * Clarify description of the pname:imageLayout member of
+    sname:VkDescriptorImageInfo.
+  * Fix typos where etext:VK_VIEW_TYPE* was used instead of
+    etext:VK_IMAGE_VIEW_TYPE.
+  * Removed the <<VK_KHR_display>> and <<VK_KHR_display_swapchain>> example
+    code from the specification and noted it has been moved to the Vulkan
+    SDK cube demo (internal issue 179).
+  * Reorder VkExternalMemoryHandleTypeFlagBitsNV description (internal issue
+    480).
+  * Clarify than an implementation is
+    <<fundamentals-validusage-flags,permitted to return 'undefined' bit
+    flags>> in a bitfield (internal issue 640).
+  * Break Valid Usage statements describing unrelated parameters into
+    separate statements, and add a style guide entry to follow this approach
+    (internal issue 685).
+  * Move valid usage statement for slink:VkImageCreateInfo from spec body to
+    the explicit valid usage block (internal issue 693).
+  * Fix typos in the descriptions of slink:VkDisplaySurfaceCreateInfoKHR,
+    flink:vkCreateDisplayModeKHR, and
+    flink:vkGetDisplayPlaneSupportedDisplaysKHR in the <<display,Presenting
+    Directly to Display Devices>> section (internal issue 698, 704, 716).
+  * Clarified that mandatory depth/stencil formats are only a requirement
+    for 2D images (internal issue 719).
+  * Clarify that variables decorated with DeviceIndex/ViewIndex must be in
+    the Input storage class (internal issue 733).
+  * Work around generator script problem with removal of Unicode literals
+    from Python 3.0-3.2 using `future` package (internal issue 737).
+  * Remove nonexistent structure type enums from vk.xml (internal issue
+    738).
+  * Fix validextensionstructs attributes for structures in the pname:pNext
+    chain for VkPresentInfoKHR, fixing implicit valid usage statements for
+    those structures (internal issue 740).
+
+-----------------------------------------------------
+
+Change log for March 10, 2017 Vulkan 1.0.43 spec update:
+
+  * Bump API patch number and header version number to 43 for this update.
+
+GitHub Issues:
+
+  * Make clearer that color write mask is applied regardless of whether
+    blending is enabled, by referring to the
+    <<framebuffer-color-write-mask,Color Write Mask>> section (public issue
+    241).
+  * Fix public issue 414:
+  ** Added two new command buffer states (invalid, pending), and an explicit
+     "command buffer lifecycle" section to explain them.
+  ** Replaced "pending execution" with "in the pending state".
+  ** Replaced a bunch of "this will invalidate the command buffer" language
+     with "this will move the command buffer to the invalid state", and added
+     validation language for what state those command buffers should be in.
+  ** Added additional validation language about what state a command buffer
+     should be in for various commands that affect it.
+  ** Added invalidation language to destroy commands in the lifetimes section
+     of fundamentals.
+  ** Added command buffers to list of objects which must not be deleted
+     whilst a (primary) command buffer is in the recording or pending state.
+  * Update `GL_KHR_vulkan_glsl` extension to allow anonymous push constant
+    blocks (public issue 428).
+
+Internal Issues:
+
+  * Document rules about extension interactions in the style guide (internal
+    issue 579).
+  * Require ename:VK_PRESENT_MODE_MAILBOX_KHR support in queries of surfaces
+    created with flink:vkCreateWaylandSurfaceKHR using the
+    VK_KHR_wayland_surface extension (internal issue 666).
+  * Remove Valid Usage constraints for flink:vkAllocateDescriptorSets when
+    the `VK_KHR_maintainance1` extension is present (internal issue 686).
+  * Remove undocumented KHX-variants of vkGetPhysicalDeviceProperties2KHR
+    and vkGetPhysicalDeviceImageFormatProperties2KHR from the
+    <<VK_KHX_external_memory_capabilities>> and
+    <<VK_KHX_external_semaphore_capabilities>> extensions.
+
+New Extensions:
+
+  * `VK_EXT_hdr_metadata`
+  * `VK_GOOGLE_display_timing`
+
+-----------------------------------------------------
+
+Change log for February 27, 2017 Vulkan 1.0.42 spec update:
+
+  * Bump API patch number and header version number to 42 for this update
+    (the first anniversary edition).
+
+GitHub Issues:
+
+  * Changed Asciidoctor macros so cross-page links in the standalone
+    reference pages function properly (public issue 462).
+
+Internal Issues:
+
+  * Clarified host visibility discussion for slink:VkMemoryType,
+    flink:vkInvalidateMappedMemoryRanges, elink:VkAccessFlagBits, and the
+    <<synchronization-framebuffer-regions,Framebuffer Region Dependencies>>
+    section, removing duplicated information and adding a central definition
+    in the access types section (internal issue 552).
+  * Change description of
+    slink:vkGetPhysicalDeviceSurfacePresentModesKHR::pname:pPresentModes to
+    return an array of values, not structures (internal issue 699).
+
+New Extensions:
+
+  * Add a NOTE to the <<extensions,Layers & Extensions>> chapter describing
+    the experimental status of `KHX` extensions.
+  * Add new Khronos, Khronos Experimental, and vendor Vulkan extensions for
+    release at GDC:
+  ** VK_KHR_descriptor_update_template
+  ** VK_KHR_push_descriptor
+  ** VK_KHX_device_group
+  ** VK_KHX_device_group_creation
+  ** VK_KHX_external_memory
+  ** VK_KHX_external_memory_capabilities
+  ** VK_KHX_external_memory_fd
+  ** VK_KHX_external_memory_win32
+  ** VK_KHX_external_semaphore
+  ** VK_KHX_external_semaphore_capabilities
+  ** VK_KHX_external_semaphore_fd
+  ** VK_KHX_external_semaphore_win32
+  ** VK_KHX_multiview
+  ** VK_KHX_win32_keyed_mutex
+  ** VK_EXT_discard_rectangles
+  ** VK_MVK_ios_surface
+  ** VK_MVK_macos_surface
+  ** VK_NVX_multiview_per_view_attributes
+  ** VK_NV_clip_space_w_scaling
+  ** VK_NV_geometry_shader_passthrough
+  ** VK_NV_sample_mask_override_coverage
+  ** VK_NV_viewport_array2
+  ** VK_NV_viewport_swizzle
+  * Add new GLSL vendor extensions to support new builtin variables:
+  ** GL_EXT_device_group
+  ** GL_EXT_multiview
+
+-----------------------------------------------------
+
+Change log for February 17, 2017 Vulkan 1.0.41 spec update:
+
+  * Bump API patch number and header version number to 41 for this update.
+
+GitHub Issues:
+
+  * Made all uses of `NULL` vs. code:VK_NULL_HANDLE consistent (public issue
+    276).
+  * Clarify render pass compatibility in different usage scenarios (public
+    issues 403 and 404).
+  * Add valid usage statements to slink:VkFramebufferCreateInfo requiring
+    that the width, height, and number of layers of the framebuffer all be
+    nonzero (public issue 432).
+  * Allow `offset` and `align` in any GLSL version for the
+    `GL_KHR_vulkan_glsl` extension (public issue 435).
+  * Specify lifetime of string objects passed to the
+    tlink:PFN_vkDebugReportCallbackEXT user callback in the
+    +VK_EXT_debug_report+ extension (public issue 446).
+  * Fix inter-page links in multi-file reference pages (public issue 454).
+
+Internal Issues:
+
+  * Update valid usage language for slink:VkImageCreateInfo to disallow
+    creating images that have ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+    set without other attachment usage bits
+    (ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) (internal issue 540).
+  * Disable `VK_EXT_swapchain_colorspace` extension until internal issues
+    640 and 661 are mutually resolved.
+  * Allow alternative mipmap level selection when [eq]#lambda == 0.5# during
+    texture <<textures-image-level-selection,Image Level(s) Selection>>
+    (internal issue 680).
+
+Other Issues:
+
+  * Add a clarification to the style guide that the extension revision
+    number is treated as a patch number, so that changes to published
+    extensions should only include bug fixes and spec clarifications.
+
+-----------------------------------------------------
+
+Change log for February 10, 2017 Vulkan 1.0.40 spec update:
+
+  * Bump API patch number and header version number to 40 for this update.
+  * There is a major build change in this release. We are now using the
+    Ruby-based ``asciidoctor'' implementation, rather than the Python-based
+    ``asciidoc'' implementation, to process the specification. While the
+    actual specification markup changes were minimal, this requires a new
+    set of build tools and a very different installation process, especially
+    because we now use an experimental direct-to-PDF backend for Asciidoctor
+    instead of Docbook->dblatex->PDF. It is no longer possible to build the
+    Specification using asciidoc. See doc/specs/vulkan/README.adoc
+    for some guidance on installing the new toolchain components.
+  * There are some minor rendering issues in the PDF output due to teething
+    problems with the Asciidoctor toolchain, especially with mathematical
+    equations. We are aware of these and working on them.
+
+GitHub Issues:
+
+  * Updated sample code for the <<sparsememory-examples-basic,sparse
+    resource binding example>> (public issue 97).
+  * Modify line and point clipping behavior in the
+    <<vertexpostproc-clipping, Primitive Clipping>> section to allow for
+    pop-free behavior. The ability to check for which behavior is
+    implemented may be added a future feature or extension (public issue
+    113).
+  * Unify the discussions of implicit ordering throughout the spec, in
+    particular in the new sections <<drawing-primitive-order, Primitive
+    Order>>, <<primsrast-order, Rasterization Order>>, and
+    <<synchronization-implicit, Implicit Synchronization Guarantees>>; the
+    discussion of <<synchronization-submission-order, submission order>>;
+    and references elsewhere to these sections (public issue 133).
+  * Clarify <<descriptorsets-compatibility,Pipeline Layout Compatibility>>
+    language and introduce the term ``identically defined'' (public issue
+    164).
+  * Add a dependency to the +VK_EXT_debug_marker+ extension that is needed to
+    reuse the object type enum from +VK_EXT_debug_report+, and moves the
+    definition of that enum into +VK_EXT_debug_report+ where it should be
+    (public issue 409).
+  * Remove redundant valid usage statement from slink:VkImageBlit (public
+    issue 421).
+  * Update GL_KHR_vulkan_glsl to allow the ternary operator to result in a
+    specialization constant (public issue 424).
+  * Fix valid usage for flink:VkPipelineShaderStageCreateInfo (public issue
+    426).
+  * Correct typo in New Objects list for <<VK_EXT_debug_report>> (public
+    issue 447).
+
+Internal Issues:
+
+  * Moved to Asciidoctor for spec builds (internal issue 121).
+  * Update style guide to describe where to put new extensions-specific
+    asciidoc files, and what to name them (internal issue 626).
+  * Add src/spec/indexExt.py to autogenerate registry index entries linking
+    into the 1.0-extensions specification, instead of maintaining the index
+    manually. (internal issue 642).
+  * Autogenerate extension dependencies and lists of all extensions and all
+    KHR extensions from the "supported" attributes in +vk.xml+. Execute
+    +make config/extDependency.sh+ from +doc/specs/vulkan+ when a supported
+    extension is added to vk.xml, to regenerate the dependency script. The
+    consequence is that specifying a single extension to the +makeExt+
+    script will automatically enable all extensions it depends on as well,
+    and that the +makeAllExts+ and +makeKHR+ scripts do not need to be
+    updated when a new extension is supported (internal issue 648).
+  * Put extension appendices all at the same asciidoc section level, so KHR
+    WSI extensions show up in the HTML index (internal issue 648).
+
+Other Issues:
+
+  * Imbed images in the generated HTML specs instead of loading them from
+    the images/ directory.
+  * Fix missing EXT in extension name
+    (ename:VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME).
+  * Add new +VK_EXT_SMPTE_2086_metadata+ extension.
+  * In the <<platformCreateSurface_xlib,Xlib Surface>> section of the
+    `VK_KHR_xlib_surface` specification, add language warning users that
+    they always need to call code:XinitThreads.
+  * Use the term "presentable image" (rather than "swapchain image")
+    consistently in `VK_KHR_swapchain` and related extensions, and add a
+    glossary term defining it.
+  * Relocate the valid usage for samples of
+    flink:vkGetPhysicalDeviceSparseImageFormatProperties2KHR::pname:pFormatInfo
+    to be below the flink:VkPhysicalDeviceSparseImageFormatInfo2KHR
+    structure.
+
+-----------------------------------------------------
+
+Change log for January 23, 2017 Vulkan 1.0.39 spec update:
+
+  * Bump API patch number and header version number to 39 for this update.
+
+GitHub Issues:
+
+  * Clarified that only accesses via the specified buffer/image subresource
+    ranges are included in the access scopes (public issue 306).
+  * Add missing valid usage statements for flink:vkCreateComputePipelines
+    and flink:vkCreateGraphicsPipelines (public issue 427).
+
+Internal Issues:
+
+  * Add a Note to the <<invariance,Invariance>> appendix about a difference
+    between OpenGL and Vulkan with regards to how primitives derived from
+    offsets are handled (internal issue 355).
+  * Add the +<<VK_KHR_get_physical_device_properties2>>+,
+    +<<VK_KHR_maintenance1>>+, and +<<VK_KHR_shader_draw_parameters>>+
+    extensions (internal issue 448).
+  * Add the +<<VK_EXT_shader_subgroup_vote>>+ and
+    +<<VK_EXT_shader_subgroup_ballot>>+ extensions (internal issue 449).
+  * Update the texture level-of-detail equation in the
+    <<textures-scale-factor,Scale Factor Operation>> section to better
+    approximate the ellipse major and minor axes (internal issue 547).
+  * Forbid non-explicitly allowed uses of interface decorations in the
+    introduction to the <<interfaces,Shader Interfaces>> chapter (internal
+    issue 607).
+  * Replace use of MathJax with KaTeX, for improved load-time performance as
+    well as avoiding the scrolling-and-scrolling behavior due to MathJax
+    asynchronous rendering when loading at an anchor inside the spec. This
+    change also requires moving to HTML5 output for the spec instead of
+    XHTML, and there is a visible difference in that the chapter navigation
+    index is now in a scrollable sidebar instead of at the top of the
+    document. We may or may not retain the nav sidebar based on feedback
+    (internal issue 613).
+  * Improve consistency of markup and formatting in extension appendices
+    (internal issue 631).
+
+Other Issues:
+
+  * Add explicit valid usage statements to slink:VkImageCopy requiring that
+    the source and destination layer ranges be contained in their respective
+    source and destination images.
+  * Add valid usage language for swapchain of flink:vkAcquireNextImage. If
+    the swapchain has been replaced, then it should not be passed to
+    flink:vkAcquireNextImage.
+  * Add a valid usage statement to flink:vkCreateImageView, that the image
+    must have been created with an appropriate usage bit set.
+  * Noted that slink:VkDisplayPresentInfoKHR is a valid extension of
+    slink:VkPresentInfoKHR in the <<wsi_swapchain,WSI Swapchain>> section.
+  * Update valid usage for flink:vkCmdSetViewport and flink:vkCmdSetScissor
+    to account for the multiple viewport feature. If the feature is not
+    enabled, the parameters for these functions have required values that
+    are defined in the <<features-features-multiViewport,multiple
+    viewports>> section of the spec but were not reflected in the valid
+    usage text for these functions.
+  * Add the +<<VK_EXT_swapchain_colorspace>>+ extension defining common
+    color spaces.
+
+-----------------------------------------------------
+
+Change log for December 16, 2016 Vulkan 1.0.38 spec update:
+
+  * Bump API patch number and header version number to 38 for this update.
+
+GitHub Issues:
+
+  * Make ename:VK_PIPELINE_STAGE_HOST_BIT invalid for all stage masks,
+    except for flink:vkCmdWaitEvents (public issue 261).
+
+Internal Issues:
+
+  * Added validation language for flink:vkQueueBindSparse,
+    slink:VkPresentInfoKHR, and slink:VkSubmitInfo, and a note to the
+    <<synchronization-semaphores-waiting,Semaphore Waiting and Unsignaling>>
+    section to clarify that semaphores must be signaled and waited on in a
+    1:1 fashion (internal issue 546).
+  * Modify valid usage for slink:VkBufferImageCopy to only require
+    pname:bufferOffset to be a multiple of the image format's element size
+    when the format is not depth/stencil (internal issue 594).
+
+Other Issues:
+
+  * Vulkan is now a registered trademark symbol, and this is reflected in
+    documents and copyright statements.
+
+-----------------------------------------------------
+
+Change log for December 10, 2016 Vulkan 1.0.37 spec update:
+
+  * Bump API patch number and header version number to 37 for this update.
+
+GitHub Issues:
+
+  * Add usability guarantees on the values returned by
+    flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR in the
+    slink:VkSurfaceCapabilitiesKHR structure and by
+    flink:vkGetPhysicalDeviceSurfaceFormatsKHR in the
+    pname:pSurfaceFormatCount parameter (public issue 385).
+  * Add elink:VkDebugReportObjectTypeEXT enumerants for new object types
+    introduced by new extensions (public issue 408).
+  * Add +VK_NVX_device_generated_commands+ etext:ACCESS bits and define how
+    they are used (public issue 415).
+  * Fix indentation for slink:VkDebugReportCallbackCreateInfoEXT member
+    descriptions (public issue 419).
+
+Internal Issues:
+
+  * Expand requirements memory binding of non-sparse images and buffers from
+    the <<resources-association,Resource Memory Association>> section into
+    valid usage statements for all of the applicable API calls (internal
+    issue 508).
+  * Explicitly state that valid usage of flink:vkCreateImage requires that
+    flink:vkGetPhysicalDeviceImageFormatProperties would return
+    ename:VK_SUCCESS for the requested image configuration (internal issue
+    598).
+
+-----------------------------------------------------
+
+Change log for December 1, 2016 Vulkan 1.0.36 spec update:
+
+  * Bump API patch number and header version number to 36 for this update.
+
+GitHub Issues:
+
+  * Fix "recorded with" terminology in the valid usage language for the
+    flink:vkCmdExecuteCommands::pname:pCommandBuffers parameter (public
+    issue 390).
+  * Modify +genvk.py+ to support specifying extensions to remove from output
+    generators, allowing the extension loader +vulkan_ext.c+ to be created
+    without WSI extensions which are statically exported by the Vulkan
+    loader (public issue 412).
+  * Added validation language for slink:VkSubpassDependency and in the
+    <<synchronization-access-types-supported,supported access types>>
+    section to catch access masks that include bits which are not supported
+    by pipeline stages in the stage masks (partially addresses
+    github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/1006 ).
+
+Internal Issues:
+
+  * Added validation language for flink:vkCmdWaitEvents,
+    flink:vkQueueSubmit, flink:VkRenderPassCreateInfo, and in the
+    <<synchronization-pipeline-stages-supported>> section to prevent
+    recording stage dependencies that aren't supported on the queue
+    (internal issue 516).
+  * Make a few changes that generalize spec language for use with possible
+    future extensions by adding glossary terms and generalizing ``feature''
+    to ``feature or extension'' where relevant (internal issues 448, 590).
+  * Added "pipeline type" attribute to +vk.xml+ for relevant commands and
+    utilize it in automatic generation of the Command Properties table
+    (internal issue 517).
+  * Specify that WSI implementations must provide both UNORM and sRGB
+    formats in the description of slink:VkColorSpaceKHR (internal issue
+    529).
+  * Remove nesting of explicit valid usage statements where it is not
+    meaningful (internal issue 583).
+
+Other Issues:
+
+  * Add validity language requiring that
+    slink:VkPushConstantRange::pname:offset be a multiple of 4, as stated in
+    the spec language.
+
+-----------------------------------------------------
+
+Change log for November 25, 2016 Vulkan 1.0.35 spec update:
+
+  * Bump API patch number and header version number to 35 for this update.
+
+GitHub Issues:
+
+  * Document in the <<memory-device-hostaccess,Host Access>> section that
+    mapping and unmapping does not invalidate or flush the mapped memory
+    (public issues 27, 126).
+  * Redefine the entire <<synchronization>> chapter in terms of consistent
+    and well defined terminology, that is called out at the start of the
+    chapter. This terminology is applied equally to all synchronization
+    types, including subpass dependencies, submissions, and much of the
+    implicit ordering stuff dotted around the spec. Key terms are laid out
+    in the <<synchronization-dependencies,Execution and Memory
+    Dependencies>> section at the top of the rewritten chapter (public
+    issues 128, 131, 132, 217, 299, 300, 302, 306, 322, 346, 347, 371, 407).
+  * Specify order of submission for batches in the
+    <<vkQueueSubmit,vkQueueSubmit>> and
+    <<vkQueueBindSparse,vkQueueBindSparse>> commands (public issue 371).
+  * Add valid usage statements to each of the WSI extension sections
+    indicating that the WSI-specific structure parameters must be valid, and
+    remove automatically generated valid usage statements now covered by the
+    manual sections (public issue 383).
+  * Clarify render pass compatibility for flink:vkCmdExecuteCommands (public
+    issue 390).
+
+Internal Issues:
+
+  * Update +vk.xml+ to make previously explicit valid usage statements for
+    <<vkDebugReportMessageEXT,vkDebugReportMessageEXT>> implicit instead
+    (internal issue 553).
+  * Add valid usage statement for slink:VkCreateImageInfo preventing
+    creation of 1D sparse images (internal issue 573).
+  * Fix Python scripts to always read/write files in utf-8 encoding, and a
+    logic error in reflib.py which could cause a fatal error for
+    malstructured asciidoc (internal issues 578, 586).
+
+-----------------------------------------------------
+
+Change log for November 18, 2016 Vulkan 1.0.34 spec update:
+
+  * Bump API patch number and header version number to 34 for this update.
+
+GitHub Issues:
+
+  * Allow vkUpdateDescriptorSets overflow to skip empty bindings. Clarify
+    that unused bindings have a descriptorCount of zero. Improve some valid
+    usage for vkUpdateDescriptorSets (public issue 256).
+  * Require that slink:VkImageSubresourceRange always define a non-empty
+    range of the resource (public issue 303).
+  * Added valid usage for slink:VkPresentInfoKHR on the layout of presented
+    images (public issue 397).
+
+Internal Issues:
+
+  * Add dependency in src/spec/Makefile so specversion.txt is regenerated
+    when needed (internal issue 462).
+  * Shorten the table of contents in the single-page ref page HTML output.
+    Still working on the PDF (internal issue 536).
+
+-----------------------------------------------------
+
+Change log for November 11, 2016 Vulkan 1.0.33 spec update:
+
+  * Bump API patch number and header version number to 33 for this update.
+
+GitHub Issues:
+
+  * Added implicit external synchronization parameters to
+    vkBegin/EndCommandBuffer, and fixed missing command pool host
+    synchronization from per-command lists (public issue 398).
+  * Started using git tags including the spec release number, such as
+    'v1.0.32-core', instead of tags including the date of release, such as
+    'v1.0-core-20161025' (public issue 405).
+
+Internal Issues:
+
+  * Add validity constraint for
+    slink:VkImportMemoryWin32HandleInfoNV::pname:handle (internal issue
+    #480).
+  * Add scripts to compare two Vulkan HTML specifications, derived from W3
+    htmldiff service (internal issue 525).
+  * Relax requirement that memoryTypeBits can't depend on format, to allow
+    it to differ only for depth/stencil formats (internal issue 544).
+  * Add a new generator script to create a simple extension loader for
+    Vulkan based on +vk.xml+ (internal issue 558).
+  * Add the overlooked requirement that buffer and image memory
+    alignment requirements must be a power of two in the
+    <<resources-association,Resource Memory Association>> section
+    (internal issue 569).
+
+Other Issues:
+
+  * Add a naming rule to the style guide for members of extension structures
+    defining array lengths which are the same as array lengths of the core
+    structure they are chained from.
+  * Add a new generator to create a simple extension loader in
+    +src/ext_loader/vulkan_ext.[ch]+ from +vk.xml+. This code can be
+    included in your project, and is expected to be packaged in the Vulkan
+    SDK provided by LunarG in the future.
+
+-----------------------------------------------------
+
+Change log for October 25, 2016 Vulkan 1.0.32 spec update:
+
+  * Bump API patch number and header version number to 32 for this update.
+
+GitHub Issues:
+
+  * Add automatic visibility operations to the presentation engine when
+    doing a queue present in flink:vkAcquireNextImageKHR. Removed all
+    references to MEMORY_READ that referenced WSI - they no longer make
+    sense (some aspects of public issues 128, 131, 132, 261, and 298).
+  * Document valid non-boolean +externsync+ attribute values for <param>
+    tags in +vk.xml+ (public issue 265).
+  * Add valid usage to slink:VkImageCreateInfo requiring that
+    pname:arrayLayers be 1 for images of type ename:VK_IMAGE_TYPE_3D
+    (public issue 319).
+  * Add missing captions to figures in the <<textures,Image Operations>>
+    chapter (public issue 334).
+  * Clarify WSI interaction with exclusive sharing mode (public issue
+    344).
+  * Added explicit language clarifying the allowed queue usage of
+    resources created with ename:VK_SHARING_MODE_CONCURRENT (public
+    issue 386).
+  * Require that the
+    slink:VkDescriptorSetLayoutCreateInfo::pname:binding members of the
+    pname:pBindings array passed to
+    flink:vkDescriptorSetLayoutCreateInfo all be distinct (public issue
+    391).
+
+Internal Issues:
+
+  * Remove empty validity blocks from +vk.xml+ and suppressed broken
+    validity statements and added missing statements to explicit
+    validity. Doesn't affect output, other than some statements
+    appearing in another block now (internal issue 513).
+
+-----------------------------------------------------
+
+Change log for October 14, 2016 Vulkan 1.0.31 spec update:
+
+  * Bump API patch number and header version number to 31 for this update.
+
+GitHub Issues:
+
+  * Clarifying wording of slink:VkGraphicsPipelineCreateInfo parameters and
+    adding Valid Usage statements on render pass compatibility to the
+    <<drawing,drawing commands>> (public issue 375).
+  * Replace 'texel size' with 'element size', and add a definition to the
+    glossary (public issue 382).
+  * Clarify the description of ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR to
+    make it accurate, but still generic (non-exhaustive). Remove two Valid
+    Usage statements describing error situations that will return
+    ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR (public issue 387).
+  * Fix refBegin tag for elink:VkDebugReportFlagBitsEXT (public issue 392).
+  * The <<interfaces-builtin-variables,built-in variable>> code:PrimitiveId
+    in a fragment shader needs the code:Input storage class (public issue
+    393).
+
+Internal Issues:
+
+  * Unused ({y,z} and {height,depth} for 1D, z and depth for 2D) offsets
+    must be 0 and unused extents must be 1. Added basic offset and extent
+    valid usage for slink:VkImageResolve to match that of slink:VkImageCopy
+    (internal issue 413).
+  * Describe what flink:vkGetPhysicalDeviceImageFormatProperties returns for
+    pname:sampleCounts when for pname:usage only includes transfer-related
+    flags (internal issue 478).
+  * Remove mention of
+    slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers from the valid
+    usage for slink:VkImageCreateInfo::pname:arrayLayers (internal issue
+    520).
+  * Tag usages of ``dynamically uniform'' as glossary terms and add a
+    glossary entry pointing to the SPIR-V Specification's definition of the
+    term (internal issue 531).
+
+-----------------------------------------------------
+
+Change log for October 7, 2016 Vulkan 1.0.30 spec update:
+
+  * Bump API patch number and header version number to 30 for this update.
+
+GitHub Issues:
+
+  * Document missing pname:sType and pname:pNext parameters for
+    slink:VkCommandBufferInheritanceInfo (public issue 224).
+  * As promised, we are removing the example code, from the appendix, for
+    the VK_KHR_surface and VK_KHR_swapchain extensions. The cube demo
+    (shipped in the official Khronos SDK) has been updated, and is the
+    example code that we want people to look at for how to use these two
+    extensions (public issues 279, 308, and 311).
+  * Clarify the formats for which the slink:VkClearColorValue pname:float32
+    member is used. Also clean up related language for flink:vkCmdBlitImage
+    (public issue 369).
+  * Reword the <<invariance, Invariance>> appendix chapter to better match
+    Vulkan terminology (public issue 372).
+
+Internal Issues:
+
+  * Update slink:VkMemoryRequirements to not require a host_visible memory
+    type exists that can be bound to sparse buffers (internal issue 494).
+  * Modify the <<features-supported-sample-counts,Supported Sample Counts>>
+    language to allow multisampled depth-stencil images (internal issue
+    521).
+
+-----------------------------------------------------
+
+Change log for September 30, 2016 Vulkan 1.0.29 spec update:
+
+  * Bump API patch number and header version number to 29 for this update.
+
+GitHub Issues:
+
+  * Remove redundant constraint on
+    slink:VkCommandBufferInheritanceInfo::pname:queryFlags (public issue
+    224).
+  * Fix typo and remove link in Note in the
+    <<extended-functionality-instance-extensions-and-devices, Instance
+    Extensions and Device Extensions>> section (public issue 359).
+  * Fix erroneous validation statement for the pname:layout member of
+    slink:VkComputePipelineCreateInfo (public issue 362).
+
+Internal Issues:
+
+  * Restore long figure captions using asciidoc sidebar blocks, due to
+    restrictions of asciidoc syntax (internal issue 101).
+  * Replace most latexmath equations with comparable markup in straight
+    asciidoc, which significantly improves time required to fully load and
+    process the HTML forms of the Specification. There are known minor font
+    and alignment inconsistencies with MathJax and PDF rendering of
+    latexmath equations. Please do not file GitHub Issues about these. We
+    are aware of the inconsistencies and will make refinements over time,
+    while the performance improvements are compelling in at least some major
+    browsers (internal issue 313).
+  * Move handcoded validity statements from +vk.xml+ into the Specification
+    body, easing work in the single-branch model. Specify the distinction
+    between these explicit statements, and the implicit validity statements
+    inferred from vk.xml. Validity statements now appear in two blocks for
+    each command and structure - handcoded "Valid Usage" and the implicit
+    "Valid Usage (Implicit)" (internal issue 392).
+  * Add the +returnedonly="false"+ attribute to WSI output structures,
+    removing incorrectly generated implicit validity statements for
+    slink:VkDisplayPropertiesKHR, slink:VkDisplayPlanePropertiesKHR,
+    slink:VkDisplayModePropertiesKHR, slink:VkDisplayPlaneCapabilitiesKHR,
+    slink:VkSurfaceCapabilitiesKHR, and slink:VkSurfaceFormatKHR structures
+    (internal issue 486).
+  * Update slink:VkImageLayout to require the
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT be set for sampled depth/stencil images
+    (internal issue 487).
+  * Use an explicit format specifier string for the date command invocation
+    in the +Makefile+ instead of the shorthand -R option, which doesn't work
+    on BSD and MaxOS X date commands (internal issue 500).
+
+Other Issues:
+
+  * Use the terms ``allocation scope'' and ``extension scope'' instead of
+    just ``scope'', and add them to the glossary.
+
+-----------------------------------------------------
+
+Change log for September 23, 2016 Vulkan 1.0.28 spec update:
+
+  * Bump API patch number and header version number to 28 for this update.
+
+GitHub Issues:
+
+  * Minor spelling and typography cleanup, add definitions of
+    ename:VK_FALSE and ename:VK_TRUE as just what their names say
+    (public issues 220, 318, 325, 365; internal issues 451, 496)
+  * Clarify that the pname:maxDescriptorSet limits in the
+    <<features-limits-required,Required Limits>> table are n *
+    maxPerStage limit (where n=number of supported stages) (public issue
+    254).
+  * Minor cleanup to <<boilerplate-platform-macros,Platform-Specific
+    Macro Definitions>> appendix (public issue 314).
+  * Add valid usage statement to slink:VkPipelineLayoutCreateInfo
+    disallowing multiple push constant ranges for the same shader stage
+    (public issue 340).
+  * Clarify the elink:VkSharingMode description of what executing the
+    "same" barriers means in case of ownership transfer (public issue
+    347).
+  * Rename copyright.txt and add COPYING.md to try and reduce confusion
+    about applicable copyrights (public issue 350).
+  * Extend the table in the <<boilerplate-wsi-header, Window System-Specific
+    Header Control>> section to describe the external headers included when
+    each etext:VK_USE_PLATFORM_* macro is defined (public issue 376).
+
+Internal Issues:
+
+  * Add "Revision History" to the PDF outputs following the table of
+    contents, to match HTML outputs (internal issue 43).
+  * Clarified that flink:vkMapMemory may fail due to virtual address
+    space limitations (internal issue 346).
+  * Add +refBody+ comment markup for ref page autoextraction when required
+    (internal issue 400).
+  * Document proper use of "mipmap" and "mip" in the style guide API
+    naming rules, matching the spelling rules (internal issue 471).
+  * Tweak the <<extensions,Layers and Extensions>> appendix to note that
+    the Specification may be built with arbitrary combinations of
+    extensions (internal issue 483).
+  * Remove incorrect statement allowing
+    slink:VkClearAttachment::pname:colorAttachment to be >=
+    slink:VkSubpassDescription::pname:colorAttachmentCount (internal
+    issue 488).
+  * The <<features-limits-viewportboundsrange,viewportBoundsRange>> is
+    expressed in terms of the pname:maxViewportDimensions but this is
+    actually two values. Clarify that it is based on the larger of the two
+    (if they differ) (internal issue 499).
+
+Other Issues:
+
+  * Reflowed text of the entire spec using the 'reflow' Makefile target, to
+    (hopefully) reduce future internal git churn as edits are made and
+    extensions added in return for one-time pain. This has no perceptible
+    effect on the spec outputs, but considerable changes on the asciidoc
+    source (internal issue 367).
+
+-----------------------------------------------------
+
+Change log for September 16, 2016 Vulkan 1.0.27 spec update:
+
+  * Bump API patch number and header version number to 27 for this update.
+
+GitHub Issues:
+
+  * Weaken flink:vkGetPipelineCacheData invariance conditions; previous
+    conditions were stronger than agreed and can't be guaranteed (public
+    issue 280).
+  * Add link to "Vulkan Loader Specification and Architecture Overview"
+    document to Normative References section (public issue 359).
+
+Internal Issues:
+
+  * Be more clear in the <<interfaces-resources-layout-std140, uniform
+    buffer layout>> section that block offsets can be out of order
+    (internal issue 396).
+  * Document that extension authors should add support for their extensions
+    to the validation layers (internal issue 398).
+  * Clarify that the valid range of depth clear values should be limited
+    to the 0..1 range and that copies to depth aspect must also be in this
+    range (internal issue 412).
+  * Specify ``a'' vs. ``an'' use in the style guide (internal issue 432).
+  * Increase the maximum pname:nonCoherentAtomSize value in the
+    <<features-limits-required,Required Limits>> section from 128 to 256
+    (internal issue 435).
+  * Fix vk_platform.h for compiler errors on some Android platforms
+    (internal issue 441).
+  * Clarify that slink:VkPhysicalDeviceFeatures::pname:pEnabledFeatures ==
+    `NULL` disables all features, including the "required" feature
+    pname:robustBufferAccess (internal issue 479).
+
+Other Issues:
+
+  * Expand style guide and make it more self-consistent.
+  * Use ISO 8601 date format everywhere.
+  * Emphasise the correct way of using
+    slink:VkSurfaceCapabilitiesKHR::pname:maxImageCount.
+  * Added +VK_EXT_validation_flags+ extension for validation flag mechanism.
+  * Fix an <<credits,author credit>> to include their current employer.
+
+-----------------------------------------------------
+
+Change log for September 6, 2016 Vulkan 1.0.26 spec update:
+
+  * Bump API patch number and header version number to 26 for this update.
+
+GitHub Issues:
+
+  * Bring sample code in the `VK_KHR_surface` and `VK_KHR_swapchain`
+    extension summary appendices up to date, and note they will be replaced
+    with pointers to the LunarG SDK examples in the future (public issue
+    279).
+  * Add a new <<fundamentals-commandsyntax-results-lifetime,Lifetime of
+    Retrieved Results>> section specifying that ftext:vkGet* and
+    ftext:VkEnumerate* results are invariant unless otherwise specified, and
+    specify behavior for individual commands which are not invariant (public
+    issue 280).
+  * Remove conflicting definition of
+    slink:VkDisplayPlaneCapabilitiesKHR::pname:maxSrcPosition and clean up
+    language of the remaining definition (public issue 351).
+  * Fix many minor spelling errors and add rules to the style guide to
+    prevent recurrences (public issue 352).
+
+Internal Issues:
+
+  * Remove redundant descriptions of the etext:VK_USE_PLATFORM_* macros from
+    the <<wsi,Window System Integration>> chapter in favor of the
+    description in the <<boilerplate-wsi-header,Window System-Specific
+    Header Control>> appendix (internal issue 6).
+  * Replace misleading 'can: be destroyed when not X' with more correct
+    'must: not be destroyed while X' in the
+    <<fundamentals-objectmodel-lifetime,Object Lifetime>> section. Disallow
+    destroying a pipeline layout while a command buffer using it is
+    recording (internal issue 241).
+  * Clarify that ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT is valid for
+    all images used as attachments in elink:VkImageUsageFlagBits and the
+    slink:VkImageLayout validity language (internal issue 320).
+  * Note that <<extended-functionality-layers,Layers>> may wrap object
+    handles, but that this is a generally discouraged. A link to additional
+    information in the documentation for layer authors is provided (issue
+    398)
+  * Replace the mustnot: and shouldnot: macros with equivalent must: not and
+    should: not to get rid of non-English words while still highlighting
+    normative language (internal issue 407).
+  * Disallow creating multisampled images with
+    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT in the slink:VkImageLayout
+    validity language and the <<features-supported-sample-counts,Supported
+    Sample Counts>> section (internal issue 445).
+  * Fix typo so that flink:vkCmdDrawIndexedIndirect is defined in terms of
+    flink:vkCmdDrawIndexed rather than flink:vkCmdDrawIndirect (internal
+    issue 446).
+  * Reorganize the per-extension information sections to all be in the
+    <<extensions,Layers & Extensions>> appendix. Also fix a typo in
+    +VK_IMG_filter_cubic+ which incorrectly identified it as a +KHR+
+    extension (internal issue 461).
+
+Other Issues:
+
+  * Use asciidoc markup instead of latexmath to simplify diagrams in the
+    <<features-formats-non-packed,byte mapping tables>> for color formats.
+  * Fix a markup problem with the wildcarded enumerant names in a NOTE in
+    the <<textures-texel-replacement,Texel Replacement>> section.
+  * Fix missing attributes in the XML interface for
+    elink:VkExternalMemoryHandleTypeFlagBitsNV and
+    elink:VkExternalMemoryFeatureFlagBitsNV (KhronosGroup/Vulkan-Hpp issue
+    25)
+  * Cleanup reference page builds so only core pages are built for releases.
+
+-----------------------------------------------------
+
+Change log for August 26, 2016 Vulkan 1.0.25 spec update:
+
+  * Bump API patch number and header version number to 25 for this update.
+  * Structurally change the specification so that multiple extensions are
+    included in the +1.0+ git branch, and specifications will include or not
+    include those extensions at build time based on options passed to the
+    Makefile. See +doc/specs/vulkan/README.html+ and the ``Layers and
+    Extensions'' section of the ``Vulkan Documentation and Extensions''
+    document for more information on this change.
+  * Register and publish new extensions in the single-branch form:
+  ** +VK_NV_external_memory_capabilities+
+  ** +VK_NV_external_memory+
+  ** +VK_NV_external_memory_win32+
+  ** +VK_NV_win32_keyed_mutex+
+
+GitHub Issues:
+
+  * Clarify description of GetInstanceProcAddr and GetDeviceProcAddr (public
+    issue 212).
+  * Add SPIR-V <<textures-operation-validation, instruction validation>> for
+    single-sampled images (public issue 316).
+  * Fix spelling of ``tesselation'' in a few places and note it as an
+    exception to the American spelling rules convention (public issue
+    327).
+  * Fix Makefile to create output directory for ``styleguide''
+    target (public issue 329).
+  * Fix numerous minor issues with incorrectly tags on enumerant names and
+    table titles (public issue 330).
+  * Generate specversion.txt date in UTC time and RFC 2822 format
+    (public issue 335).
+  * Convert link to the SPIR-V Specification for
+    flink:VkShaderModuleCreateInfo into an internal link to the normative
+    reference (public issue 336).
+  * Add ename:VK_ERROR_OUT_OF_MEMORY error code to
+    flink:vkCreateDebugReportCallbackEXT (public issue 337).
+
+Internal Issues:
+
+  * Update style guide regarding use of code:NULL and dname:VK_NULL_HANDLE
+    (internal issue 393).
+  * Change the definition of latexmath:[$q$] in the
+    <<textures-image-level-selection,texture image level selection>> section
+    to be the index of the maximum defined level for the view, not the
+    number of levels in the view (internal issue 406).
+  * Allow developers to override dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    with their own binary-compatible definition (internal issue 439).
+  * Fix +vk_platform.h+ conditional logic causing compile failure with some
+    Android compilers (internal issue 441).
+  * Implement the single-branch model as described above (internal issue
+    461).
+
+-----------------------------------------------------
+
+Change log for August 12, 2016 Vulkan 1.0.24 spec update:
+
+  * Bump API patch number and header version number to 24 for this update.
+
+GitHub Issues:
+
+  * Fix type mismatch in swapchain image equivalency table (public issue
+    289).
+  * Fix a copy-and-paste error in the description of
+    flink:vkGetSwapchainImagesKHR::pname:pSwapchainImages, that said it
+    was an array of ``sname:VkSwapchainImageKHR structures'' instead of
+    an array of ``sname:VkImage handles'' (public issue 292).
+  * Specify that ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT is only valid
+    for ename:VK_IMAGE_TYPE_2D images (public issue 293).
+  * Add a valid usage statement to flink:vkCmdExecuteCommands saying
+    that when called outside a render pass instance, the secondary
+    command buffers must not have been created with the
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT (public issue
+    297).
+  * Fix description of +VK_NO_STDINT_H+ in the
+    <<boilerplate-platform-macros,platform macros>> section (public
+    issue 314).
+
+Internal Issues:
+
+  * Normalize the language for the remaining built-in variables in the
+    <<interfaces-builtin-variables,Built-In Variables>> section. Fix
+    code:FrontFacing and code:HelperInvocation, as they should be of
+    code:boolean type rather than code:integer (internal issue 323).
+  * Clarify that when ename:VK_WHOLE_SIZE is used for a buffer
+    descriptor range, the effective range must still be within the max
+    buffer range (internal issue 426).
+  * Clarify that command buffers and descriptor sets are allocated
+    rather than created. Also clarify when the recording state of a
+    command buffer is relevant (internal issue 434).
+
+-----------------------------------------------------
+
+Change log for August 5, 2016 Vulkan 1.0.23 spec update:
+
+  * Bump API patch number and header version number to 23 for this update.
+
+GitHub Issues:
+
+  * Add explicit valid value attributes to pname:sType members in vk.xml
+    (public issue 34).
+  * Clarify usage of flink:vkGetInstanceProcAddr and
+    flink:vkGetDeviceProcAddr (public issue 225).
+  * Fix a copy-and-paste error in the description of
+    pname:pSwapchainImageCount saying that it was the count of ``format
+    pairs'' instead of ``swapchain images'' (public issue 292).
+  * flink:vkCmdExecuteCommandBuffers requires all command buffers to be
+    allocated from command pools created for the same queue family (public
+    issue 296).
+  * Remove bogus +optional+ attribute for
+    flink:vkEnumerateDeviceLayerProperties::pname:physicalDevice from vk.xml
+    (public issue 301).
+  * Clean up the <<resources-image-views-compatibility,image and image view
+    compatibility table>> reference and contents. Use full enumerant names.
+    Refer to pname:layerCount in the ``view parameters'' column instead of
+    pname:arrayLayers. Require N >= 1 for the cube array subview row, not
+    just arrayLayers >= 6 N (public issue 304).
+  * Modify description of <<resources-memory-aliasing,memory aliasing>> to
+    be consistent with the description of
+    <<resources-bufferimagegranularity,buffer image granularity>> (public
+    issue 307).
+
+Internal Issues:
+
+  * Describe remaining +vk_platform.h+ macros in the <<boilerplate,API
+    Boilerplate>> appendix (internal issue 6).
+  * Clarify
+    <<features-features-robustBufferAccess, pname:robustBufferAccess>>
+    feature behavior; what memory can be accessed, how bounds checking is
+    performed, and allowing for vectorization (internal issue 332).
+  * Document markup for automatic extraction of reference pages from the
+    spec sources in the style guide (internal issue 395).
+  * Allow flink:vkCreateDisplayModeKHR to return
+    ename:VK_ERROR_INITIALIZAION_FAILED_KHR if the user requests mode
+    parameters that the specified display does not support (internal issue
+    411).
+  * Remove atomic counters (atomic_uint style) from KHR_vulkan_glsl, and
+    more clearly remove the subroutine keyword alongside it (internal issue
+    421).
+  * Clarify behavior of flink:vkCmdBindDescriptorSets for descriptor sets
+    not contained in the layout (internal issue 427).
+
+Other Commits:
+
+  * Change the order in which members of sname:VkAttachmentDescription and
+    sname:VkPipelineInputAssemblyStateCreateInfo are described to match
+    their order in the structures.
+
+-----------------------------------------------------
+
+Change log for July 22, 2016 Vulkan 1.0.22 spec update:
+
+  * Bump API patch number and header version number to 22 for this update.
+
+GitHub Issues:
+
+  * Translate the subpass self-dependency language into concrete
+    validity statements, and added a validity statement about the
+    restrictions on layout parameters (public issue 267).
+  * Add validity requirement that
+    slink:VkAttachmentDescription::pname:finalLayout and
+    slink:VkAttachmentReference::pname:layout must not be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED (public issue 268).
+  * Clarify that slink:VkSubpassDescription::pname:pResolveAttachments
+    layouts are used. Make language consistent with other attachment
+    arrays (public issue 270).
+  * Changed 64-bit definition for
+    dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE to work for x32 platform in
+    +vk.xml+ and the resulting +vulkan.h+ (public issue 282).
+  * Add missing error return code for
+    flink:vkEnumerateInstanceExtensionProperties and
+    flink:vkEnumerateDeviceExtensionProperties (public issue 285)
+  * Fix several cases of stext::VkStructName.memberName markup to
+    stext::VkStructName::pname:memberName, to match other usage in the
+    spec, and describe this markup in the style guide (public issue
+    286).
+  * Modified validity language generation script to avoid redundant
+    common ancestor language if covered by generic parent language, and
+    used `Both' instead of `Each' when appropriate (public issue 288).
+
+Internal Issues:
+
+  * Add language about behavior of flink:vkAllocateDescriptorSets when
+    allocation fails due to fragmentation, a new error
+    ename:VK_ERROR_FRAGMENTED_POOL, and a Note explaining the situation
+    (internal issue 309).
+  * For the features of code:PointSize, code:ClipDistance, and
+    code:CullDistance, the SPIR-V capability is required to be declared
+    on use (read or write) rather than on decoration (internal issue
+    359).
+  * Have desktop versions of GLSL respect precision qualification
+    (code:mediump and code:lowp) when compiling for Vulkan. These will
+    get translated to SPIR-V's code:RelaxedPrecision decoration as they
+    do with OpenGL ES versions of GLSL (ESSL). The default precision of
+    all types is code:highp when using a desktop version (internal issue
+    360).
+  * Add validity statement for slink:VkImageCreateInfo specifying that
+    multisampled images must be two-dimensional, optimally tiled, and
+    with a single mipmap level (internal issue 369).
+  * Add validity statements to slink:VkImageViewCreateInfo disallowing
+    creation of images or image views with no supported features. Made
+    some slink:VkImageViewCreateInfo validity statements more precise
+    and consistent. Added a Note to the <<features,features>> chapter
+    about formats with no features (internal issue 371).
+  * Remove +manpages+ from default build targets. Nroff outputs
+    containing imbedded latexmath will not render properly. Fixing this
+    is a lot of work for limited use cases (internal issue 401).
+
+Other Commits:
+
+  * Fix flink:vkRenderPassBeginInfo::pname:clearValueCount validity
+    statement to be based on attachment indices rather than the number
+    of cleared attachments
+    (Vulkan-LoaderAndValidationLayers/issues/601).
+  * Convert registry documentation from LaTeX to asciidoc source and
+    rename from +src/spec/readme.tex+ to +src/spec/registry.txt+.
+  * Fix lack of Oxford commas in validity language.
+  * Lots of cleanup of generator scripts and Makefiles to move extension
+    list for generator into the script arguments instead of the body of
+    genvk.py, and express better dependencies between XML, scripts, and
+    generated files.
+
+-----------------------------------------------------
+
+Change log for July 15, 2016 Vulkan 1.0.21 spec update:
+
+  * Bump API patch number and header version number to 21 for this update.
+
+GitHub Issues:
+
+  * Clarify how <<features-supported-sample-counts,sample count queries>>
+    relate to the limits in slink:VkPhysicalDeviceLimits. (public issue
+    185).
+  * Clarify in the <<interfaces-iointerfaces,Shader Input and Output
+    Interfaces>> section that shader output variables have undefined values
+    until the shader writes to them (public issue 240).
+  * Specify the implicit value of image parameters that cannot be set in
+    slink:VkSwapchainCreateInfo::pname:flags, pname:imageType,
+    pname:mipLevels, pname:samples, pname:tiling, and pname:initialLayout
+    (public issue 243).
+  * Make use of code:NULL and code:VK_NULL_HANDLE consistent in the
+    VK_KHR_swapchain extension (public issue 276).
+
+Internal Issues:
+
+  * Clarify that presenting an image to a display surface swapchain applies
+    the display surface's mode, and that destroying a display surface
+    swapchain may reset the display's mode, in the VK_KHR_display_swapchain
+    extension (internal issue 247).
+  * Better describe what a slink:VkSurfaceKHR is, and that creating one does
+    not set a mode, in the VK_KHR_display extension. This is a round-about
+    way of pointing out that mode setting is not covered by the extension,
+    but rather is performed as a side effect of presentation (internal issue
+    247).
+  * Add more valid usage statements to flink:vkQueuePresentKHR command when
+    the VK_KHR_display_swapchain extension is present (internal issue
+    247).
+  * Add more includes to the VK_KHR_swapchain extension to better document
+    interactions with VK_KHR_display_swapchain (internal issue 247).
+  * Clarify restrictions on location aliasing in the
+    <<fxvertex,Fixed-Function Vertex Processing>> section (internal issue
+    370).
+  * Add mathematical description of blitting to flink:vkCmdBlitImage, and
+    link it to the <<textures,Image Operations>> chapter. Use mathematical
+    notation for ranges of texel coordinates in the <<textures,Image
+    Operations>> chapter. Fixed miscellaneous validity statements for
+    flink:vkCmdBlit and slink:VkImageBlit (internal issue 382).
+
+Other Commits:
+
+  * Added a valid usage rule to flink:VkGraphicsPipelineCreateInfo that the
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST topology must only be used when
+    tessellation shaders are used.
+  * Expand the style guide into a formal "Procedures and Conventions"
+    document. Add a API Naming Conventions section, move most of the API
+    Specification Appendix C (Layers and Extensions) content into the new
+    document, and define the resulting procedures as mandatory (where
+    relevant). This more clearly separates use vs. specification of Vulkan
+    APIs.
+  * Update vk_platform.h to handle 32-bit ARMv8 binaries.
+  * Various minor cleanups to the Makefile and build process.
+
+-----------------------------------------------------
+
+Change log for July 8, 2016 Vulkan 1.0.20 spec update:
+
+  * Bump API patch number and header version number to 20 for this
+    update.
+
+GitHub Issues:
+
+  * Replaced existing reference pages by text automatically extracted from
+    the specification source, or generated from vk.xml in some cases. This
+    is not a complete solution for the reference pages, but puts them in a
+    much better state. The ref pages (only) are now placed under a CC BY
+    open source license, which is more current than the obsolete license
+    previously used. Various minor tweaks to the Specification sources were
+    made to enable this, and a new ``API Boilerplate'' chapter added to
+    include definitions of all the entities in the API and +vulkan.h+ which
+    were not already described in some form in the document.
+
+    Further improvements to the pages should not edit them directly, but
+    instead concentrate on the specification source from which the ref pages
+    are being extracted (public issues 44, 55, 160; internal issue 389).
+
+-----------------------------------------------------
+
+Change log for July 1, 2016 Vulkan 1.0.19 spec update:
+
+  * Bump API patch number and header version number to 19 for this
+    update.
+
+GitHub Issues:
+
+  * Clarified how flink:vkGetImageSubresourceLayout interacts with image
+    layouts (public issue 247).
+  * Remove ename:VK_IMAGE_LAYOUT_PREINITIALIZED from valid usage rule for
+    slink:VkImageMemoryBarrier::pname:oldLayout. It is only valid if it is
+    the current layout (public issue 248).
+  * Modify valid usage for flink:vkBindBufferMemory so implementations are
+    free to require a different backing memory size than the buffer size
+    (public issue 251).
+  * Clarify that filtering rules for flink:vkCmdBlitImage always apply, and
+    are usually no-ops if the formats are the same (public issue 253).
+  * Remove 'non-sparse' from description of
+    flink:vkGetBufferMemoryRequirements and
+    flink:vkGetImageMemoryRequirements (public issue 257).
+  * Remove ename:VK_ERROR_LAYER_NOT_PRESENT error code from
+    flink:vkCreateDevice (public issue 259).
+  * Change "must: not" to "should: not" in constraint on when
+    flink:vkAcquireNextImageKHR is called in the VK_KHR_swapchain branch
+    (public issue 262).
+  * Change type of flink:vkCmdUpdateBuffer::pname:pData from
+    basetype:uint32_t* to basetype:void* (public issue 263).
+  * Change should: to must: in description of where additional segments are
+    placed in the <<tessellation-tessellator-spacing,Tessellator Spacing>>
+    section (public issue 264).
+
+Internal Issues:
+
+  * Normalize the language of all the compute shader built-ins in the
+    <<interfaces-builtin-variables,Built-in Variables>> section (internal
+    issue 323).
+  * Remove definition of presentation engine internal queue lengths
+    associated with ename:VK_PRESENT_MODE_FIFO_KHR and
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR in the <<Window System
+    Integration,wsi>> chapter (internal issue 374).
+  * The language of a Note was too broad, and implied that loaders for a
+    given OS would statically export functions for WSI extensions that
+    were not relevant to (or supported on) the OS. Also, removed
+    "Khronos-provided" since the Android loader is not (internal issue 380)
+
+Other Commits:
+
+  * Add ename:VK_INCOMPLETE to list of return values for
+    flink:vkGetPipelineCacheData. Spec says this value is returnable, but it
+    was not listed in the error codes.
+  * Fix "corresponds" typo in member definitions for
+    slink:VkSubpassDescription.
+
+-----------------------------------------------------
+
+Change log for June 24, 2016 Vulkan 1.0.18 spec update:
+
+  * Bump API patch number and header version number to 18 for this
+    update.
+
+GitHub Issues:
+
+  * Added "queue operation" terminology, and modified spec to actually
+    use this terminology (public issue 155). The act of submitting a
+    piece of work to a queue now generates "operations" for the queue to
+    execute, including operations to wait on/signal semaphores and
+    fences. Synchronization waits on these operations, making execution
+    dependency chains more obvious for semaphores and fences (though
+    additional work is still needed here). These changes include:
+  ** Overview of "queue submission" commands in chapter
+     <<devsandqueues-submission>>.
+  ** Updated descriptions for fence and semaphore waits and signals in
+     the synchronization chapter <<synchronization-semaphores-waiting>>,
+     <<synchronization-semaphores-signaling>> and
+     <<synchronization-fences-waiting>>.
+  ** Clarifications to semaphore and fence operation within queue
+     submission functions.
+  ** New glossary terms.
+  ** Moved device idle and queue wait idle to synchronization chapter in
+     order to describe them in terms of other synchronization
+     primitives.
+  ** Clarifications to semaphore and fence operation allowed removal of
+     the "implicit ordering guarantees" section, as this information is
+     now wholly covered where these primitives are described.
+  *** The "host writes" section of this is still there for now - in its
+      own section. This could probably be merged into other sections
+      later.
+  *** Modified fundamentals chapter on queue ordering to make sense in
+      context of the new changes, and avoid duplication.
+      <<fundamentals-queueoperation>>
+  * Added "aspect" and "component" definitions to the glossary, and made
+    sure these terms are referenced correctly (public issue 163).
+  * Update valid usage for ftext:vkGet*ProcAddr to only include
+    conditions that must be met to get a valid result. In particular,
+    it is okay to call flink:vkGetDeviceProcAddr with any string and will
+    get a code:NULL if that string is not a core Vulkan function or an
+    enabled extension function (addresses but does not fully close
+    public issue 214).
+  * Change the WSI extension dependencies to refer to version 1.0 of the
+    Vulkan API, instead of the pre-1.0-release internal revisions
+    numbers (public issue 238).
+  * Specified that <<interfaces-fragmentoutput,undeclared fragment
+    shader outputs>> result in undefined values input to the blending
+    unit or color attachment (public issue 240).
+  * Fix latexmath:[$\leq$] operators turning into Unicode left arrow symbols
+    (public issue 245).
+
+Internal Issues:
+
+  * Better documented that the registry XML "optional" tag for values
+    only applies when that value is the size of an array (internal issue
+    335).
+  * Add a stronger definition for the valid usages of
+    VkSpecializationMapEntry.size in the
+    <<pipelines-specialization-constants,Specialization Constants>>
+    section (internal issue 345).
+  * Change code:OpName to code:OpDecorate (along with appropriate
+    syntax) for vertex shader built-ins (internal issue 368).
+  * Add missing ref pages (those which are not currently stubs) to
+    apispec.txt for the single-page version of the ref pages (internal
+    issue 378).
+
+Other Commits:
+
+  * Fix example in the <<descriptorsets,Descriptor Sets>> section to use
+    M, N, and I, describing set, binding, and index, consistently
+    throughout the example code.
+
+-----------------------------------------------------
+
+Change log for June 17, 2016 Vulkan 1.0.17 spec update:
+
+  * Bump API patch number and header version number to 17 for this
+    update.
+
+GitHub Issues:
+
+  * Update description of vertex shader reuse in
+    <<shaders-vertex-execution>> (public issue 106).
+  * Simplify validity language around pname:ppEnabledExtensionNames and
+    pname:ppEnabledLayerNames (in the <<initialization-instances>> and
+    <<devsandqueues-device-creation>> sections) (public issue 214).
+  * Add missing validity rule to flink:vkCmdBeginRenderPass requiring
+    compatibility between slink:VkAttachmentDescription pname:initalLayout
+    members and the corresponding attached framebuffer images (public issue
+    233).
+  * Fix Unicode arrows appearing in output instead of relational operators
+    (public issue 239).
+  * Correctly describe the required number of elements for
+    code:TessLevelInner and code:TessLevelOuter arrays in the
+    <<interfaces-builtin-variables,Built-In Variables>> section as two and
+    four, respectively, instead of the other way around, and refer to this
+    section from the <<tessellation,Tessellation>> chapter (public issue
+    246).
+
+Internal Issues:
+
+  * Document deprecation of ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR in the
+    VK_KHR_surface extension, and of
+    ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT in the
+    VK_EXT_debug_report extension (internal issue 328).
+  * Added language to define what a valid usage statement is and should be,
+    with a note about some apparent weirdnesses this might entail (internal
+    issue 357).
+
+Other Commits:
+
+  * Added missing ename:VK_ERROR_DEVICE_LOST error to
+    flink:vkQueueBindSparse.
+
+-----------------------------------------------------
+
+Change log for June 10, 2016 Vulkan 1.0.16 spec update:
+
+  * Bump API patch number and header version number to 16 for this
+    update.
+
+GitHub Issues:
+
+  * Clarify that integer border values are meant to be 0/1, and that
+    integer texture lookups are sign-extended in the
+    <<textures-format-conversion,Format Conversion>> and
+    <<textures-texel-replacement,Texel Replacement>> sections (public
+    issue 52).
+  * Add logic to generate spec boilerplate without using the 'git'
+    command-line client, needed when building from a tarball or another
+    source of the Vulkan tree rather than a cloned git repo. Remove
+    boilerplate as part of 'clean' target (public issue 195).
+  * Document that color writes and clears to unused attachments have no
+    effect for slink:VkClearAttachment and
+    elink:VkColorComponentFlagBits (public issue 198).
+  * Fixed flink:vkCmdExecuteCommands validity statement for
+    sname:VkCommandBufferInheritanceInfo::pname:framebuffer. If used, it
+    must match the framebuffer in the current renderpass instance
+    (public issue 226).
+  * Added valid usage language to require for all functions that set
+    dynamic state that the currently bound graphics pipeline has the
+    corresponding dynamic state enabled (public issue 235).
+
+Internal Issues:
+
+  * Clarify for flink:vkEnumerateInstanceExtensionProperties, in the
+    <<extended-functionality-instance-extensions-and-devices, Instance
+    Extensions and Device Extensions>> section, and in the
+    <<glossary,Glossary>> section when functionality should be exposed
+    as an instance extension, as a device extension, or as both
+    (internal issue 109).
+  * Place WorkgroupSize in alphabetical order in the
+    <<interfaces-builtin-variables,Built-in Variables>> section
+    (internal issue 323).
+  * Corrects valid usage in vkEndRenderPass to only affect primary
+    render passes, as secondaries may be entirely within a render pass,
+    and should be able to be ended (previous language disallowed that)
+    (internal issue 338).
+  * Fix relational operator from <= to >= in the
+    <<features-extentperimagetype,Allowed Extent Values>> section
+    (internal issue 343).
+  * Disallow recursion under SPIR-V entry points in the
+    <<spirvenv-module-validation,Validation Rules within a Module>>
+    section (internal SPIR-V issue 37).
+
+Other Commits:
+
+  * Use standard Python ElementTree package instead of lxml.etree in
+    header / validation layer / include autogeneration from XML,
+    reducing platform dependencies.
+
+-----------------------------------------------------
+
+Change log for May 27, 2016 Vulkan 1.0.15 spec update:
+
+  * Bump API patch number and header version number to 15 for this
+    update.
+
+GitHub Issues:
+
+  * Fixed the <<glossary,Glossary>> entry for Fragment Input Attachment
+    Interface to specify code:UniformConstant storage class (public issue
+    156).
+  * Disallow lazily allocated memory for buffers in the description of
+    slink:VkMemoryRequirements::pname:memoryTypeBits (public issue 196).
+  * Add numbered figure captions (public issue 219).
+  * Fix output variable names in the <<fundamentals-fpfixedconv,Conversion
+    from Floating-Point to Normalized Fixed-Point>> section and related
+    minor normative language and markup cleanup (public issue 220).
+
+Internal Issues:
+
+  * Fix reference to nonexistent etext:VK_IMAGE_LAYOUT_TRANSFER_{SRC,DST}BIT
+    to the actual etext:VK_IMAGE_LAYOUT{SRC,DST}_OPTIMAL (internal issue
+    296).
+  * Update the <<sparsememory-sparse-memory-aliasing,Sparse Resource
+    Implementation Guidelines>> to refer to the correct feature names
+    (internal issue 305).
+
+-----------------------------------------------------
+
+Change log for May 20, 2016 Vulkan 1.0.14 spec update:
+
+  * Bump API patch number and header version number to 14 for this
+    update.
+
+GitHub Issues:
+
+  * Fix validity language for sname:VkCommandBufferAllocateInfo to
+    impose range limits on pname:commandBufferCount (public issue 178).
+  * Fix validity language for flink:vkCmdExecuteCommands to refer to the
+    correct structure names (public issue 179).
+  * Fix two copy-and-paste errors in the WSI queries, where the wrong
+    term was used for what was being returned (public issue 206).
+  * Add a note in the documentation of
+    flink:vkGetPhysicalDeviceSurfaceFormatsKHR, about what it means if
+    ename:VK_FORMAT_UNDEFINED is returned (public issue 207).
+
+Internal Issues:
+
+  * Clarify the usage and correct the name for the bitmask referenced in
+    <<queries-pipestats,Pipeline Statistics Queries>> (internal issue
+    334).
+
+Other Commits:
+
+  * Fix the names of decorations listed in the
+    <<interfaces-builtin-variables,Built-in Variables>> section such
+    that they match the SPIR-V specification.
+
+-----------------------------------------------------
+
+Change log for May 13, 2016 Vulkan 1.0.13 spec update:
+
+  * Bump API patch number and header version number to 13 for this
+    update.
+
+GitHub Issues:
+
+  * Improve the description of ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR in the
+    VK_KHR_surface extension (public issue 174).
+  * Clarify use of etext:*_SIMULTANEOUS_USE_BIT for secondary command
+    buffers (public issue 182).
+  * Fix typos in VK_KHR_wayland_surface extension where code:wl_device was
+    used instead of code:wl_display (public issue 193).
+  * Replaced {apiname} with ``Vulkan'' in XML validity statements (public
+    issue 199).
+  * Fix dead links for WSI handle types (public issue 200).
+  * Use "signaled" instead of "signalled" spelling everywhere (public issue
+    201).
+  * Move readme.pdf target directory for XML schema documentation into the
+    target generation directory, instead of leaving it checked into the spec
+    source tree (public issue 203).
+  * Fix duplicate 'which which' typo in description of
+    elink:VkCommandPoolResetFlagBits (public issue 204).
+  * Move the <<Programmable Primitive Shading>> section up one level, out of
+    the <<drawing-primitive-topologies,Primitive Topologies>> section
+    (public issue 209).
+
+Internal Issues:
+
+  * Clarify in the <<pipelines-cache,Pipeline Cache>> section that
+    implementations should not manage the size of pipeline cache (internal
+    issue 192).
+  * Deprecate the concept of device layers and associated commands (internal
+    issue 255).
+  * Remove ename:VK_INCOMPLETE from the list of possible result codes of
+    flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR (internal issue 314).
+  * Add missing std140/std430 rule: the base alignment of a member following
+    a structure is a multiple of the structure's base alignment (internal
+    issue 321).
+  * Fixes naming of the single elink:VkColorSpaceKHR enum from
+    ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR to
+    ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR in XML/header and the
+    VK_KHR_swapchain and VK_KHR_surface extensions to match the style of the
+    typename (space and color are two words, not one) (internal issue 322).
+  * Make it clear that code:LocalInvocationID should only be applied to an
+    input variable and normalize the language describing
+    code:LocalInvocationID to the language for other compute shader
+    variables in the <<interfaces-builtin-variables,Built-in Variables>>
+    section, and add normative language (internal issue 323).
+  * Clarify in the <<fundamentals-returncodes,Return Codes>> section that
+    the result pointer may be modified for specific commands, even if a
+    runtime error is returned (internal issue 324).
+
+-----------------------------------------------------
+
+Change log for April 29, 2016 Vulkan 1.0.12 spec update:
+
+  * Bump API patch number and header version number to 12 for this
+    update.
+
+GitHub Issues:
+
+  * Change valid usage statements intended to be "sub-points" to
+    be actual sub-points (public issue 66).
+  * Replace double negation in description of
+    slink:VkRenderPassBeginInfo::pname:pClearValues (based on public
+    merge 142).
+  * Cleanup minor typos in spec, ref pages and XML, including those
+    proposed in public pull requests 144, 150, 151, 167, 168, 181, and
+    186.
+  * Use *strict subset* in describing the partial order of memory
+    property types for slink:VkMemoryType, and update the style guide
+    accordingly (public issue 190).
+  * Fix various "a image" -> "an image" typos (public issue 191).
+  * Note in the <<fundamentals-validusage,Valid Usage>> and
+    <<extensions-interactions,Extension Interactions>> sections that
+    structures defined by extensions which may be passed in structure
+    chains using the ptext:pNext member must include initial
+    ptext:sType and ptext:pNext members (public issue 192).
+
+Internal Issues:
+
+  * Remove duplicate language from the description of the pname:fence
+    parameter to flink:vkQueueSubmit and improve validity language
+    (internal issue 91).
+  * Added documentation for "optional" attribute to XML readme.tex/pdf
+    (internal issue 149).
+  * Clarify the host-side data validity rules and behavior of
+    flink:vkFlushMappedMemoryRanges and
+    flink:vkInvalidateMappedMemoryRanges (internal issue 266).
+
+Other Commits:
+
+  * Added clarification to flink:vkCmdFillBuffer regarding the use of
+    ename:VK_WHOLE_SIZE.
+  * Fixed and documented implementation of "validextensionstructs"
+    attribute. in XML processing scripts and readme.tex/pdf.
+  * Add missing validity statements to flink:vkResetEvent and
+    flink:vkCmdResetEvent.
+  * Fix validity for the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag.
+    Correct all the draw/dispatch commands to mention optimally tiled
+    images as well as linear tiled images, and say image VIEWS instead
+    of images. Add validity statement to flink:vkCmdBlitImage
+  * Replace the {apiname} macro with hardcoded "Vulkan", now that we have
+    committed to that name.
+  * Add the VK_AMD_rasterization_order extension to vk.xml.
+
+-----------------------------------------------------
+
+Change log for April 22, 2016 Vulkan 1.0.11 spec update:
+
+  * Bump API patch number and header version number to 11 for this
+    update.
+
+GitHub Issues:
+
+  * Clarify the WSI extension language by switching from the fuzzier
+    "ownership" language to more-consistent "acquire" language (public
+    issue 117).
+  * Clarify that memory barriers apply to all commands in the dependency
+    chains in the flink:vkGetRenderAreaGranularity command and the
+    <<synchronization-execution-and-memory-dependencies,Execution And
+    Memory Dependencies>> section (public issue 132).
+  * Clarify that a queue family is a set of queues in the
+    <<fundamentals-execmodel,Execution Model>> section (public issue
+    166).
+  * Removed requirement from valid usage language that
+    VkPresentInfoKHR::waitSemaphoreCount must be greater than 0 (public
+    issue 171).
+  * Fix broken internal links, describe structures consistently, use
+    consistent style for SPIR-V codewords, and tag normative terms that
+    were missing asciidoc tags (public issue 183 and ancillary
+    markup/normative language fixes).
+  * Fix typos for slink:VkPhysicalDeviceLimits member names in
+    slink:VkImageCreateInfo validity language (public issue 184).
+
+Internal Issues:
+
+  * Document that the requested patch version number specified as part
+    of slink:VkApplicationInfo::pname:apiVersion is ignored when
+    creating an instance (internal issue 176).
+  * Clarify handling of extension structs in the
+    <<fundamentals-validusageValid Usage>> section (internal issue 254).
+  * Update required slink:VkImageFormatProperties::pname:maxMipLevels to
+    be limited to the maximum allowed mipmap pyramid size corresponding
+    to the actual maximum supported size for the format (internal issue
+    256).
+  * Modify the <<features-extentperimagetype,Allowed Extent Values Based
+    On Image Type>> section so the allowed maximum extent is the maximum
+    image dimension supported for each dimension of the type of texture
+    being queried (internal issue 257).
+  * Clarify in the <<spirvenv-module-validation,Validation Rules within
+    a Module>> section that at least one of the code:LocalSize execution
+    mode or code:WorkgroupSize decoration is required for each compute
+    shader entry point in a shader module (internal issue 279).
+  * Add validity rules for formats in flink:vkCmdClearColorImage and
+    flink:vkCmdClearDepthStencilImage (internal issue 283).
+  * Clarify that slink:VkImageFormatProperties::pname:maxResourceSize is
+    an upper bound, and that it may not be possible to create an image
+    anywhere near that size (internal issue 284).
+
+Other Commits:
+
+  * Fix various minor markup errors reported by validation scripts.
+  * Change copyright from Khronos Free Use License to Apache 2.0 license
+    on relevant script/XML/header files. This does not affect the
+    specification source copyright.
+
+-----------------------------------------------------
+
+Change log for April 15, 2016 Vulkan 1.0.10 spec update:
+
+  * Bump API patch number and header version number to 10 for this
+    update.
+
+GitHub Issues:
+
+  * Slightly tweak the <<memory-allocation,Host Memory>> allocator language
+    so that an application wrapping the standard C alloc/free/realloc
+    functions is still correct - the previous language was too strong with
+    regards to freeing memory. Also made certain scenarios clearer - an
+    implementation may now continue without error if an allocation failed
+    and it is able to continue correctly (public issue 21).
+  * Require that etext:VK_*_CREATE_SPARSE_BINDING_BIT is set when the
+    corresponding etext:VK_*_CREATE_SPARSE_RESIDENCY_BIT is used, in the
+    <<sparsememory-miptail,Mip Tail Regions>> section and related commands
+    flink:vkCreateBuffer and flink:vkCreateImage (public issue 84).
+  * Update the <<features,Features, Limits, and Formats>> chapter to clarify
+    interactions between optional features and dynamic state for the
+    pname:depthBiasClamp and pname:wideLines features (public issue 89).
+  * Describe the code:WorkgroupSize builtin in the
+    <<interfaces-builtin-variables,Built-In Variables>> section, and update
+    the <<compute-shaders,Compute Shaders>> section to further clarify how
+    to set the number of workgroups to execute in a compute shader (public
+    issue 145).
+  * Use the term *image subresource* everywhere instead of *subresource*,
+    except for the special case of *host-accessible subresource*, which may
+    be either an image subresource or buffer range (public issue 120)
+  * Add a note to the <<features,Features, Limits, and Formats>> section
+    about extensibility of structures (Public issue 165).
+  * Fix return code flink:vkAcquireNextImageKHR when the timeout parameter
+    is 0 to ename:VK_NOT_READY instead of ename:VK_TIMEOUT (public issue
+    170).
+  * Fix typo in slink:VkLayerProperties::pname:apiVersion field (public
+    issue 172).
+
+Internal Issues:
+
+  * Fix a few minor internally-detected typos.
+  * Minor formatting tweaks to pseudocode in the <<resources,Resource
+    Creation>> chapter (internal issue 179).
+  * Fix typo in the definition of point sampling for
+    elink:VkCullModeFlagBits (internal issue 268).
+
+-----------------------------------------------------
+
+Change log for April 8, 2016 Vulkan 1.0.9 spec update:
+
+  * Bump API patch number and header version number to 9 for this
+    update.
+
+GitHub Issues:
+
+  * Fix memory type preorder definition and clarify example list and source
+    code for slink:VkMemoryRequirements and slink:VkMemoryHeap (public issue
+    26).
+  * Ensure slink:VkAllocationCallbacks are properly defined (public issue
+    73).
+  * Clarify the WSI extension language by switching from the fuzzier
+    "ownership" language to more-consistent "acquire" language (public issue
+    117).
+  * Add language allowing allocation and freeing of memory scoped to the
+    duration of any API command in the <<memory-allocation,Memory
+    Allocation>> section (public issue 136).
+  * Clarify the explicit location assignment always overrides the inherited
+    location in the <<interfaces-iointerfaces-locations,Location
+    Assignment>> section, even for the first member of a block (public issue
+    141).
+  * Fixed references to
+    slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics (public
+    issue 158).
+  * Fix name of slink:VkBufferCopy::pname:size field in validity language
+    for flink:vkCmdCopyBuffer (public issue 162).
+
+Internal Issues:
+
+  * Update GL_KHR_vulkan_glsl specification to clarify disallowance of
+    spec-const arrays in initializers (internal issue 248).
+  * Clarify <<interfaces-iointerfaces-matching,Interface Matching>> section
+    to state that user-defined variable interface must match too (internal
+    issue 250).
+
+-----------------------------------------------------
+
+Change log for April 1, 2016 Vulkan 1.0.8 spec update:
+
+  * Bump API patch number and header version number to 8 for this
+    update.
+
+GitHub Issues:
+
+  * Specify in the validity language for flink:vkBeginCommandBuffer that
+    pname:commandBuffer must not currently be pending execution (public
+    issue 96).
+  * Describe depth comparison using the correct temporary variable names
+    in the <<textures-depth-compare-operation,Depth Compare Operation>>
+    section (public issue 100).
+  * Clarify the order of descriptor update operations in the
+    flink:vkUpdateDescriptorSets command (public issue 115).
+  * Specify in the VK_KHR_swapchain extension that
+    flink:vkAcquireNextImageKHR's pname:semaphore and pname:fence
+    parameters cannot both be sname:VK_NULL_HANDLE (partly addresses,
+    but does not fully close, public issue 117 / internal issue 246).
+  * Change reference to the "lifetime" of a Vulkan command to
+    "duration", and define the "duration" term (public issue 135).
+  * Added valid usage language for slink:VkImageLayout to require both
+    pname:height and pname:depth to be 1 for 1D images and pname:depth
+    to be 1 for 2D images (public issue 137).
+  * Fix SPIR-V example code in the
+    <<descriptorsets-inputattachment,Input Attachment>> section to
+    properly decorate the code:InputAttachmentIndex (public issue 139).
+  * Fix reference to nonexistent pname:imageInfo in the description of
+    flink:VkWriteDescriptorSet to refer to pname:pImageInfo (public
+    issue 140).
+
+Internal Issues:
+
+  * Link to the fixed-function vertex chapter from the drawing chapter
+    (internal issue 110)
+  * Fix typo in slink:VkImageCreateInfo validity language:
+    ptext:maxExtent.sampleCounts -> pname:sampleCounts (internal issue
+    249).
+  * Explain why the non-core token etext:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+    is used in the example in the
+    <<synchronization-semaphores,Semaphores>> section (internal issue
+    251).
+  * Attempt to clarify in the VK_KHR_android_surface extension's
+    <<platformQuerySupport_android,Android Platform Support>> section
+    that there is no Android-specific WSI query, and why (internal issue
+    252).
+
+Other Commits:
+
+  * Add missing language about ename:VK_INCOMPLETE being returned from
+    array queries when the passed array is too short, in the
+    VK_KHR_display, VK_KHR_swapchain, and VK_KHR_surface extensions.
+
+-----------------------------------------------------
+
+Change log for March 25, 2016 Vulkan 1.0.7 spec update:
+
+  * Bump API patch number and header version number to 7 for this
+    update.
+
+GitHub Issues:
+
+  * Fix slink:VkSpecializationMapEntry example to avoid C/C++ strict
+    aliasing issues (public issue 14).
+  * Clarify the meaning of "matching" in flink:vkCmdBindDescriptorSets
+    validity language (public issue 33).
+  * Add stub reference pages so xrefs to not-yet-written pages do not
+    generate 404 errors. However, the actual content of these pages
+    still needs to be filled in as time allows (public issue 44, but
+    does not close that issue out).
+  * Remove incorrect validity statement for
+    flink:vkGetImageSparseMemoryRequirements (public issue 85).
+  * Reword the
+    <<features-limits-bufferImageGranularity,bufferImageGranularity>>
+    feature in terms of "aliasing", and clarify that it applies to
+    bindings in the same memory object (public issue 90).
+  * Clarify the relationship of the slink:VkPhysicalDeviceLimits
+    pname:maxViewportDimensions and pname:viewportBoundsRange limits
+    (public issue 92).
+  * Specify sparse unbound texture replacement in the
+    <<textures-texel-replacement,Texel Replacement>> section
+    independently of robust buffer access language (public issue 100).
+  * Add the <<fundamentals-architecture-model,Architecture Model>>
+    section to explain architecture constraints Vulkan has chosen to
+    accept in order to enable portable and performant code (public issue
+    122).
+  * State that an object must not be destroyed until *all* (not *any*)
+    uses of that object have completed (public issue 123).
+  * Minor editorial cleanup (public issues 129, 134, 146, 148).
+  * Add validity language for layer and extension names to
+    slink:VkDeviceCreateInfo matching that used for
+    slink:VkInstanceCreateInfo (public issue 130).
+  * Clean up terminology for the case when the bits set in one bitmask
+    are a subset of the bits set in another bitmask (public issue 138).
+  * Document that input attachments are UniformConstant not Input, in
+    the <<interfaces-inputattachment,Fragment Input Attachment
+    Interface>> section (public glslang bug 169).
+
+Internal Issues:
+
+  * Add max enum values to "flag bits" enums (internal issue 136).
+  * Clarify language around the various uses of the term "block" in the
+    <<appendix-compressedtex-bc,Block Compressed Image Formats>> section
+    (internal issue 202).
+  * Removed "expand" dependency from <enums> groups in vk.xml and added
+    auto-generation code in the scripts to infer it instead, to ensure
+    consistency. This caused renaming of sname:VkColorSpaceKHR and
+    sname:VkPresentModeKHR etext:BEGIN_RANGE (etc.) tokens, but those
+    tokens are metadata, not part of the API, and the Vulkan WG is OK
+    with this change. This change adds ranges to two additional enums
+    that were missing them due to not defining the "expand" attribute
+    (internal issue 217).
+  * Tweak makefile to generate ref page nroff (.3) files in the right
+    output directory, working around an a2x limitation (internal issue
+    223).
+
+Other Commits:
+
+  * Add validity requirements for flink:vkCmdCopyQueryPoolResults
+    pname:dstBuffer parameter.
+  * Fix ref page build to generate .3 targets in the right output
+    directory.
+
+-----------------------------------------------------
+
+Change log for March 10, 2016 Vulkan 1.0.6 spec update:
+
+  * Bump API patch number and header version number to 6 for this
+    update.
+
+GitHub Issues:
+
+  * Define 'invocation group' for compute and graphics shaders. Cleanup
+    definition and use of 'workgroup', and add glossary entries (public
+    issue 1).
+  * Various minor editorial fixes (public issue 33).
+  * Clarify locations for block members in the
+    <<interfaces-iointerfaces-locations,Location Assignment>>
+    section (public issue 45).
+  * Editorial fixes for <<commandbuffer-allocation,Command Buffer
+    Allocation>> section (public issues 54, 59).
+  * Clarify behavior of depth test in the <<fragops-depth,Depth Test>>
+    section (public issues 80, 81).
+  * Remove discussion of return codes from
+    flink:vkGetPhysicalDeviceSparseImageFormatProperties and
+    flink:vkGetImageSparseMemoryRequirements, which do not return values
+    (public issue 82).
+  * Allow flink:vkCmdDrawIndirect and flink:vkCmdDrawIndexedIndirect
+    pname:drawCount of 0, as well as 1, when the multiDrawIndirect
+    feature is not supported (public issue 88).
+  * Remove confusing wording in the <<features-limits, Limits>>
+    section describing the slink:VkPhysicalDeviceLimits
+    pname:minTexelBufferOffsetAlignment,
+    pname:minUniformBufferOffsetAlignment, and
+    pname:minStorageBufferOffsetAlignment members as both minimums and
+    maximums (public issue 91).
+  * Clarified that only the RGB components should be affected in places
+    where sRGB is referred to in the spec, such as ASTC formats. Minor
+    re-wording to avoid "color space" when actively incorrect, now that
+    we refer to the Data Format Spec which actually makes a distinction
+    between color space and transfer function (public issue 94).
+  * Treat pname:pPropertyCount == 0 consistently in
+    flink:vkEnumerateInstanceLayerProperties and
+    flink:vkEnumerateDeviceLayerProperties (public issue 99)
+  * Cleanup minor editorial issues in chapters 14-17 (public issue 100).
+  * Clarify definition of flink:vkEnumerateInstanceExtensionProperties
+    and flink:vkEnumerateDeviceExtensionProperties (public issue 101).
+  * Define the flink:vkEnumerateInstanceExtensionProperties and
+    flink:vkEnumerateDeviceExtensionProperties pname:pLayerName
+    parameter to be a pointer to a null-terminated UTF-8 string (public
+    issue 101).
+  * Rearrange "Missing information" references in mandatory format
+    tables (public issue 101).
+  * Clarify that the enumerated extensions returned by
+    flink:vkEnumerateInstanceExtensionProperties and
+    flink:vkEnumerateDeviceExtensionProperties will only include
+    extensions provided by the platform or extensions implemented in
+    implicitly enabled layers (public issue 101).
+  * Miscellaneous editorial fixes. Include the Vulkan spec patch number
+    in the PDF title. Fix label on <<fig-non-strict-lines,Non
+    strict lines>> diagram. Use more easily distinguished symbols in
+    tables in the <<features-required-format-support, Required
+    Format Support>> section. Do not require FQDNs used as layer names be
+    encoded in lower case if not possible, in the
+    <<extensions-naming-conventions, Extension and Layer Naming
+    Conventions>> section (public issues 101, 119, 121).
+
+Internal Issues:
+
+  * Fixed excessive spacing in tables in XHTML (internal issue 18).
+  * Clarify that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
+    applies to secondary command buffers. Previously spec only referred
+    to the members of pname:pCommandBuffers being affected by this bit.
+    Added a separate slink:VkSubmitInfo Valid Usage restriction
+    specifying that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
+    also applies to any secondary command buffers that are recorded into
+    the primary command buffers in pname:pCommandBuffers (internal issue
+    106).
+  * Clarify that slink:VkDeviceCreateInfo::pname:pEnabledFeatures can be
+    NULL (internal issue 117).
+  * Remove "the value of" where it is redundant (e.g. speaking of an API
+    parameter, struct member, or SPIR-V variable, but not when speaking
+    of color components) (internal issue 175).
+  * Forced patch version to always be 0 in the header. Add a
+    "VK_API_VERSION_<major>_<minor>" macro for people to use to do the
+    right thing. Add a VK_HEADER_VERSION which captures the header
+    release number independent of the spec patch number (internal issue
+    176).
+  * Correct description of
+    slink:VkPipelineShaderStageCreateInfo::pname:pName to "a pointer to
+    a null-terminated UTF-8 string" (internal issue 197).
+
+Other Commits:
+
+  * Updated DataFormat spec reference to the new date for revision 5 of
+    that spec.
+  * Fixed KEEP option (to retain LaTeX intermediate files) in the
+    Makefile to be included when edited there, as well as set on the
+    command line.
+  * Reserve and add "VK_IMG_filter_cubic" to the registry, and implement
+    script functionality to add and remove validity from existing
+    functions. Includes schema and readme changes.
+  * Update GL_KHR_vulkan_glsl so push_constants do not have descriptor
+    sets.
+
+-----------------------------------------------------
+
+Change log for March 4, 2016 Vulkan 1.0.5 spec update:
+
+  * Bump API patch number to 5 for this update.
+
+GitHub Issues:
+
+  * Correctly describe slink:VkPhysicalDeviceProperties pname:deviceName
+    member as a string, not a pointer to a string. Also one typo fix for
+    "hetereogeneous" (public issue 4).
+  * Replace maynot: macro with may: not, and "may: or maynot:" with
+    "may:" (public issue 4).
+  * Clarify that redundantly setting the state of a fence or event has
+    no effect (public issue 4).
+  * Minor fixes to ref pages to track descriptions of memory bits that
+    changed in the core spec. Fix name of a member in the description of
+    sname:sname:VkPipelineMultisampleStateCreateInfo (public issues 8,
+    13).
+  * Remove redundant validity statement for
+    sname:VkGraphicsPipelineCreateInfo::pname:stageCount (public issue
+    14).
+  * Fix typos in chapters 7-9 (public issue 14).
+  * Clarify the example demonstrating the behavior of
+    code:OpMemoryBarrier in the
+    <<shaders-execution-memory-ordering,shader memory access
+    ordering>> section (public issue 16).
+  * Specify that freeing mapped memory implicitly unmaps the memory in
+    the description of flink:vkFreeMemory (public issue 17).
+  * Forbid allocation callbacks from calling into the API in the
+    <<memory-allocation,memory allocation>> section (public issue
+    20).
+  * Add missing validity rules about size being greater than 0 and
+    offset being less than size of object. Fix
+    flink:VkMappedMemoryRange's misinterpretation of offset (public
+    issues 27, 31).
+  * Add validity rule disallowing overlapping source/destination
+    descriptors in flink:VkCopyDescriptorSet (public issue 32).
+  * Clarify that array and matrix stride has to be a multiple of the
+    base alignment of the array or matrix in the
+    <<interfaces-resources-layout,Offset and Stride Assignment>>
+    section (public issue 38).
+  * Correct parenthesis floor nesting error in equation for
+    <<textures-RGB-sexp,RGB to shared exponent conversion>>.
+    Clarify case of when exp' is forced to 0, avoiding log2(0) undefined
+    problem (public issue 40).
+  * Remove redundant statement from the code:FragDepth description in
+    the <<interfaces-builtin-variables,Built-In Variables>>
+    section (public issue 47).
+  * Define the clamping of the
+    <<textures-level-of-detail-operation,bias added to the scale
+    factor>> by linking to the slink:VkPhysicalDevice feature
+    pname:maxSamplerLodBias (public issue 64).
+  * Fix typo "optimal linear resources" and clarify the set of resources
+    <<features-limits-bufferImageGranularity,the
+    pname:bufferImageGranularity resource>> applies to (public issue
+    67).
+  * Replace 'descriptor accessed by a pipeline' language for
+    sname:VkDescriptorSetAllocateInfo with more precise phrasing about
+    binding a descriptor set before a command that invokes work using
+    that set (public issue 69).
+  * tstripadj.svg contained an Inkscape tag which caused Firefox and IE
+    11 to fail to render it, and was illegal SVG. Generating Plain SVG
+    from the Inkscape SVG source fixes this (public issue 70).
+  * Fix validity for sname:VkVertexInputBindingDescription and
+    sname:VkVertexInputAttributeDescription numbers (public issue 72).
+
+Internal Issues:
+
+  * Clarify the meaning of
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT in
+    elink:VkFormatFeatureFlagBits with respect to depth compare
+    (internal issue 107).
+  * Added a note explaining that ename:VK_QUEUE_TRANSFER_BIT may or may
+    not be reported for a queue family that already supports
+    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT as the
+    former is a strict subset of the latter ones (internal issue 116).
+  * Add validity language for sname:VkDescriptorSetAllocateInfo about
+    exceeding the descriptor pool capacity (internal issue 140).
+  * Add ename:VK_INCOMPLETE success code for
+    flink:vkEnumeratePhysicalDevices query (internal issue 163).
+
+Other Commits:
+
+  * Add the VK_NV_glsl_shader extension definitions to the API.
+  * Update GL_KHR_vulkan_glsl with 1) origin_upper_left as default 2)
+    specialization array constant semantics.
+  * Corrected/updated Data Format Specification date.
+
+-----------------------------------------------------
+
+Change log for February 25, 2015 Vulkan 1.0.4 spec update:
+
+  * Bump API patch number from 3 to 4 for the first public update to the
+    spec. Add patch number to the spec title (this will be done
+    automatically from XML, later).
+  * Fixes for numerous editorial issues. Regularize descriptions of
+    variable-length array queries. Properly tag enumerants so they come
+    out in the right font (many were mislabeled in usage tags in vk.xml,
+    or not tagged). Spelling and markup corrections (public issue 4).
+  * Fix typos and clearly separate description of different types of
+    memory areas (public issue 5).
+  * Use standards-compliant preprocessor guard symbols on headers
+    (public issue 7).
+  * Note that GitHub users cannot currently set labels on issues, and
+    recommend a fallback approach (public issue 15).
+  * Use latexmath prefix on len= attributes (public issue 29).
+  * Make flink:vkCmdUpdateBuffer pname:dataSize limit consistent (public
+    issue 65).
+  * Add VK_KHR_mirror_clamp_to_edge extension to core API branch, as an
+    optional feature not introducing new commands or enums (internal
+    issue 104).
+  * Cleanup invariance language inherited from the GL specification to
+    not refer to nonexistent (GL-specific) state (internal issue 111).
+  * Modify the flink:vkCmdDrawIndexed pname:vertexOffset definition to
+    not be the "base offset within the index buffer" but rather the
+    "value added to the vertex index before indexing into the vertex
+    buffer" (internal issue 118).
+  * Fix drawing chapter in the "Programmable Primitive Shading" section
+    where it described categories of drawing commands. It referenced
+    flink:vkCmdDrawIndexed twice. Replace the second reference with
+    flink:vkCmdDrawIndexedIndirect (internal issue 119).
+  * Typo fixed in <<sparsememory-examples-advanced,Advanced Sparse
+    Resources>> sparse memory example (internal issue 122).
+  * Add flink:VkDisplayPlaneAlphaFlagsKHR to <require> section of
+    VK_KHR_display extension (internal issue 125)
+  * Add missing optional="false,true" to
+    flink:vkGetImageSparseMemoryRequirements
+    pname:pSparseMemoryRequirementCount parameter (internal issue 132)
+  * Rename ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT to
+    ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
+    (internal issue 133)
+  * Fix a handful of broken cross-references in the
+    <<samplers,Samplers>> chapter (internal issue 134).
+  * Fix "Input Attachment" GLSL example to use correct syntax (internal
+    issue 135).
+  * Update XML schema and documentation to accommodate recently added
+    attributes for validity. Add some introductory material describing
+    design choices and pointing to the public repository to file issues.
+  * Put include of validity in the core spec extensions chapter on its
+    own line, so that asciidoc is happy.
+  * Fix vertexOffset language to specify that it is the value added to
+    the vertex index before indexing into the vertex buffer, not the
+    base offset within the index buffer.
+  * Fix error in the description of flink:vkCmdNextSubpass.
+
+-----------------------------------------------------
+
+February 16, 2016 - Vulkan 1.0 initial public release
+
diff --git a/codegen/vulkan/vulkan-docs-next/ChangeLogSC.adoc b/codegen/vulkan/vulkan-docs-next/ChangeLogSC.adoc
new file mode 100644
index 0000000..860f62c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/ChangeLogSC.adoc
@@ -0,0 +1,155 @@
+Copyright 2022-2023 The Khronos Group Inc.
+SPDX-License-Identifier: CC-BY-4.0
+
+Update Log for the VulkanSC-Docs repository on GitHub.
+Updates are in reverse chronological order starting with the latest public
+release.
+
+This summarizes the periodic public updates, not individual commits.
+Updates on GitHub are done as single large patches at the release point,
+collecting together the resolution of many Khronos internal issues, along
+with any public pull requests that have been accepted.
+
+-----------------------------------------------------
+
+Change log for September 27, 2023 Vulkan SC 1.0.13 spec update:
+
+  * update release number to 13 for this update
+
+Public issues:
+
+  * None
+
+Internal issues:
+
+  * Merge fixes from sc_1_0 branch (!340,!344)
+  * Fix structextends for structures based on
+    VkDeviceObjectReservationCreateInfo (!330)
+  * Fix VUID 05152 typo (!333)
+  * Fix multiple JSON parser and schema issues (!331)
+  * Fix cast-qual warning in vulkan_json_parser.hpp (!335)
+  * Make VkFaultCallbackInfo pNext pointer-to-const (!342)
+  * Clarify vkEndCommandBuffer error behavior (#184/!346)
+
+  * Merge Vulkan main branch into sc_main (#168/!310)
+  * Merge the 1.3.235 - 1.3.240 Vulkan changes to sc_main (!332)
+  * Remove superfluous lines from the XML that are causing problems with
+    the Hpp build (!334)
+  * merge VK 1.3.243 to sc_main (!336)
+  * Merge 1.3.245 sources to sc_main (!341)
+  * Add combined registry tooling (!343)
+  * Pipeline cache data related VU changes (!345)
+  * Merge VK 1.3.252 to sc_main branch (!347)
+  * Fix handling of queue types with dependencies when generating
+    spec tables/VUs/etc. from them (!348)
+  * Merge VK 1.3.257 to sc_main (from 1.3.252) (!351)
+  * Address remaining layers/levels issues (#193/!350)
+  * Remove explicit VUs that are duplicate with implicit VUs (#192/!349)
+  * Disable `check-xrefs` by default for VKSC builds (!353)
+
+New Extensions:
+
+  * apiext:VK_QNX_external_memory_screen_buffer (Vulkan public issue #2138)
+
+-----------------------------------------------------
+
+Change log for January 20, 2023 Vulkan SC 1.0.12 spec update:
+
+  * update release number to 12 for this update
+  * Assign/partition VU range for sc_1_0 branch
+  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
+    chapters/*txt chapters/*/*txt appendices/*txt
+
+Public issues:
+
+  * Add VkPipelineMatchControl to list of scadditions (#3/!323)
+  * Remove scremoval for VkDebugReportObjectTypeEXT (#6/!324)
+
+Internal issues:
+
+  * Fixes for VK_NV_external_sci_sync2 (#164)
+  * json_gen: Remove unnecessary extensions for layer (!309)
+  * Fix misleading deviation text for commandPoolResetCommandBuffer (!311)
+  * Clarify vkDestroyDevice by mentioning deviceDestroyFreesMemory (!312)
+  * Fix VulkanSC apiVersion valid usage (#170/!313)
+  * Resolve duplicated VUID 05089 (!314)
+  * revision 2 of VK_NV_external_memory_sci_buf (!316)
+  * json_gen: Fix undefined print_ / parse_ functions for NV SCI extensions (!317)
+  * Mark VkFaultData returnedonly in the XML (#173/!318)
+  * JSON parser memory allocation fixes (!320)
+  * Fix CTS compilation errors in json parser (!321)
+  * Remove TLS WAR for CTS (!322)
+  * Simplify description of vkEnumerateDeviceLayerProperties (#172/!325)
+  * Add 'U' suffixes in VERSION macros (!326)
+  * Remove requiredbitmask VU for VkSubmitInfo->pWaitDstStageMask (!328)
+
+-----------------------------------------------------
+
+Change log for September 9, 2022 Vulkan SC 1.0.11 spec update:
+
+  * update release number to 11 for this update
+  * reserve VUID range for NV_private_vendor_info
+  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
+    chapters/*txt chapters/*/*txt appendices/*txt
+
+Public issues:
+
+  * Remove Vulkan-Hpp from CI (#2)
+
+Internal issues:
+
+  * Clarify vkDestroyDevice VUID (!291)
+  * Restore VK_OBJECT_TYPE_SHADER_MODULE for VulkanSC (!293)
+  * Change SciSync import structures to use non-const pointer type for
+    handle (!294)
+  * Make Philosophy section sound safer (!295)
+  * Allow poolSizeCount to be zero (#160, !296)
+  * Fix formatting (stray colon) (!297)
+  * fix indenting of Valid Usage blocks and remove VUID 5116 and 5117 (!298)
+  * Tweak the meaning of commandPoolResetCommandBuffer to allow the command
+    pool creation flag, but not allow vkResetCommandBuffer (!299)
+  * Update cgenerator to replace C-style casts with static_casts in defines
+    (!300)
+  * Update CI to refer to container hash rather than name and update to
+    latest CI image (!301)
+  * Conditionalize text for VKSC (#159, !303)
+  * Fix parser allocations with sizes greater than tab size (!304)
+  * Disallow duplicate pipeline identifiers (#158, !305)
+  * Make application provided fault callback memory optional (#157, !302)
+
+New Extensions:
+
+  * apiext:VK_NV_external_sci_sync2 (deprecating
+    apiext:VK_NV_external_sci_sync) and apiext:VK_NV_private_vendor_info
+    (!306,!307)
+
+-----------------------------------------------------
+
+Change log for May 20, 2022 Vulkan SC 1.0.10 spec update:
+
+  * update release number to 10 for this update
+  * Reflow / Assign VUIDs using: python3 scripts/reflow.py -overwrite -tagvu
+    chapters/*txt chapters/*/*txt appendices/*txt
+
+Internal issues:
+
+  * Added changelog for VulkanSC (#144, !281))
+  * Fixes for extension index in the registry and extension refpages (!282)
+  * Updated README.adoc for Vulkan SC (!280)
+  * Added VUs requiring requested object counts not exceed physical device
+    limits (#142,!283)
+  * Fix conditional logic for inverted conditionals (vulkan#3039,!284)
+  * Deprecate surfaceRequestCount and displayModeRequestCount (#146,!285)
+  * Fix description of the pSubResource parameter of
+    vkGetImageSubresourceLayout (!286)
+  * Add VU limiting VkDisplaySurfaceCreateInfoKHR::transform to a single,
+    supported, transformation (!287)
+
+New Extensions:
+
+  * apiext:VK_NV_external_sci_sync and apiext:VK_NV_external_memory_sci_buf
+    (!288,!289,!290)
+
+-----------------------------------------------------
+
+March 1, 2022 - Vulkan SC 1.0.9 initial public release
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSE.adoc b/codegen/vulkan/vulkan-docs-next/LICENSE.adoc
new file mode 100644
index 0000000..5a31f04
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSE.adoc
@@ -0,0 +1,34 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= LICENSE File for the KhronosGroup/Vulkan-Docs Project
+
+Files in this repository fall under one of these licenses:
+
+  * SPDX license identifier: "`Apache-2.0 OR MIT`"
+  ** Apache License 2.0 OR MIT License
+  ** For scripts and XML which need to be usable in GPL-licensed projects.
+
+  * SPDX license identifier: "`Apache-2.0`"
+  ** Apache License 2.0
+  ** For other scripts
+
+  * SPDX license identifier: "`CC-BY-4.0`"
+  ** Creative Commons Attribution 4.0 International
+  ** For specification source documents
+
+  * SPDX license identifier: "`MIT`"
+  ** MIT License
+  ** For files copied from other MIT-licensed projects
+
+  * SPDX license identifier: "`LicenseRef-MPLUS`"
+  ** M+ Font License
+  ** For fonts derived from the M+ Font Project
+  ** This license is open source, but not OSI approved
+
+Full license text of these licenses is available at:
+
+  * Apache-2.0: https://opensource.org/licenses/Apache-2.0
+  * MIT: https://opensource.org/licenses/MIT
+  * CC-BY-4.0: https://creativecommons.org/licenses/by/4.0/legalcode
+  * LicenseRef-MPLUS: https://osdn.net/softwaremap/trove_list.php?form_cat=370
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSES/Apache-2.0.txt b/codegen/vulkan/vulkan-docs-next/LICENSES/Apache-2.0.txt
new file mode 100644
index 0000000..4ed90b9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSES/Apache-2.0.txt
@@ -0,0 +1,208 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION,
+AND DISTRIBUTION
+
+   1. Definitions.
+
+      
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution
+as defined by Sections 1 through 9 of this document.
+
+      
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+      
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct
+or indirect, to cause the direction or management of such entity, whether
+by contract or otherwise, or (ii) ownership of fifty percent (50%) or more
+of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+      
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions
+granted by this License.
+
+      
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+      
+
+"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled object
+code, generated documentation, and conversions to other media types.
+
+      
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the Appendix
+below).
+
+      
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative
+Works shall not include works that remain separable from, or merely link (or
+bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+      
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative
+Works thereof, that is intentionally submitted to Licensor for inclusion in
+the Work by the copyright owner or by an individual or Legal Entity authorized
+to submit on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication
+sent to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+      
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently incorporated
+within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
+Derivative Works of, publicly display, publicly perform, sublicense, and distribute
+the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License,
+each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section) patent
+license to make, have made, use, offer to sell, sell, import, and otherwise
+transfer the Work, where such license applies only to those patent claims
+licensable by such Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work to which such
+Contribution(s) was submitted. If You institute patent litigation against
+any entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that the Work or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses granted to You
+under this License for that Work shall terminate as of the date such litigation
+is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or
+Derivative Works thereof in any medium, with or without modifications, and
+in Source or Object form, provided that You meet the following conditions:
+
+(a) You must give any other recipients of the Work or Derivative Works a copy
+of this License; and
+
+(b) You must cause any modified files to carry prominent notices stating that
+You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source
+form of the Work, excluding those notices that do not pertain to any part
+of the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its distribution,
+then any Derivative Works that You distribute must include a readable copy
+of the attribution notices contained within such NOTICE file, excluding those
+notices that do not pertain to any part of the Derivative Works, in at least
+one of the following places: within a NOTICE text file distributed as part
+of the Derivative Works; within the Source form or documentation, if provided
+along with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents
+of the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works
+that You distribute, alongside or as an addendum to the NOTICE text from the
+Work, provided that such additional attribution notices cannot be construed
+as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction,
+or distribution of Your modifications, or for any such Derivative Works as
+a whole, provided Your use, reproduction, and distribution of the Work otherwise
+complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any
+Contribution intentionally submitted for inclusion in the Work by You to the
+Licensor shall be under the terms and conditions of this License, without
+any additional terms or conditions. Notwithstanding the above, nothing herein
+shall supersede or modify the terms of any separate license agreement you
+may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names,
+trademarks, service marks, or product names of the Licensor, except as required
+for reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to
+in writing, Licensor provides the Work (and each Contributor provides its
+Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied, including, without limitation, any warranties
+or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
+A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness
+of using or redistributing the Work and assume any risks associated with Your
+exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether
+in tort (including negligence), contract, or otherwise, unless required by
+applicable law (such as deliberate and grossly negligent acts) or agreed to
+in writing, shall any Contributor be liable to You for damages, including
+any direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or inability
+to use the Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all other commercial
+damages or losses), even if such Contributor has been advised of the possibility
+of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work
+or Derivative Works thereof, You may choose to offer, and charge a fee for,
+acceptance of support, warranty, indemnity, or other liability obligations
+and/or rights consistent with this License. However, in accepting such obligations,
+You may act only on Your own behalf and on Your sole responsibility, not on
+behalf of any other Contributor, and only if You agree to indemnify, defend,
+and hold each Contributor harmless for any liability incurred by, or claims
+asserted against, such Contributor by reason of your accepting any such warranty
+or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own identifying
+information. (Don't include the brackets!) The text should be enclosed in
+the appropriate comment syntax for the file format. We also recommend that
+a file or class name and description of purpose be included on the same "printed
+page" as the copyright notice for easier identification within third-party
+archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSES/CC-BY-4.0.txt b/codegen/vulkan/vulkan-docs-next/LICENSES/CC-BY-4.0.txt
new file mode 100644
index 0000000..3f92dfc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSES/CC-BY-4.0.txt
@@ -0,0 +1,324 @@
+Creative Commons Attribution 4.0 International Creative Commons Corporation
+("Creative Commons") is not a law firm and does not provide legal services
+or legal advice. Distribution of Creative Commons public licenses does not
+create a lawyer-client or other relationship. Creative Commons makes its licenses
+and related information available on an "as-is" basis. Creative Commons gives
+no warranties regarding its licenses, any material licensed under their terms
+and conditions, or any related information. Creative Commons disclaims all
+liability for damages resulting from their use to the fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and conditions
+that creators and other rights holders may use to share original works of
+authorship and other material subject to copyright and certain other rights
+specified in the public license below. The following considerations are for
+informational purposes only, are not exhaustive, and do not form part of our
+licenses.
+
+Considerations for licensors: Our public licenses are intended for use by
+those authorized to give the public permission to use material in ways otherwise
+restricted by copyright and certain other rights. Our licenses are irrevocable.
+Licensors should read and understand the terms and conditions of the license
+they choose before applying it. Licensors should also secure all rights necessary
+before applying our licenses so that the public can reuse the material as
+expected. Licensors should clearly mark any material not subject to the license.
+This includes other CC-licensed material, or material used under an exception
+or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors
+
+Considerations for the public: By using one of our public licenses, a licensor
+grants the public permission to use the licensed material under specified
+terms and conditions. If the licensor's permission is not necessary for any
+reason–for example, because of any applicable exception or limitation to copyright–then
+that use is not regulated by the license. Our licenses grant only permissions
+under copyright and certain other rights that a licensor has authority to
+grant. Use of the licensed material may still be restricted for other reasons,
+including because others have copyright or other rights in the material. A
+licensor may make special requests, such as asking that all changes be marked
+or described. Although not required by our licenses, you are encouraged to
+respect those requests where reasonable. More considerations for the public
+: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution
+4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree to
+be bound by the terms and conditions of this Creative Commons Attribution
+4.0 International Public License ("Public License"). To the extent this Public
+License may be interpreted as a contract, You are granted the Licensed Rights
+in consideration of Your acceptance of these terms and conditions, and the
+Licensor grants You such rights in consideration of benefits the Licensor
+receives from making the Licensed Material available under these terms and
+conditions.
+
+Section 1 – Definitions.
+
+a. Adapted Material means material subject to Copyright and Similar Rights
+that is derived from or based upon the Licensed Material and in which the
+Licensed Material is translated, altered, arranged, transformed, or otherwise
+modified in a manner requiring permission under the Copyright and Similar
+Rights held by the Licensor. For purposes of this Public License, where the
+Licensed Material is a musical work, performance, or sound recording, Adapted
+Material is always produced where the Licensed Material is synched in timed
+relation with a moving image.
+
+b. Adapter's License means the license You apply to Your Copyright and Similar
+Rights in Your contributions to Adapted Material in accordance with the terms
+and conditions of this Public License.
+
+c. Copyright and Similar Rights means copyright and/or similar rights closely
+related to copyright including, without limitation, performance, broadcast,
+sound recording, and Sui Generis Database Rights, without regard to how the
+rights are labeled or categorized. For purposes of this Public License, the
+rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
+
+d. Effective Technological Measures means those measures that, in the absence
+of proper authority, may not be circumvented under laws fulfilling obligations
+under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996,
+and/or similar international agreements.
+
+e. Exceptions and Limitations means fair use, fair dealing, and/or any other
+exception or limitation to Copyright and Similar Rights that applies to Your
+use of the Licensed Material.
+
+f. Licensed Material means the artistic or literary work, database, or other
+material to which the Licensor applied this Public License.
+
+g. Licensed Rights means the rights granted to You subject to the terms and
+conditions of this Public License, which are limited to all Copyright and
+Similar Rights that apply to Your use of the Licensed Material and that the
+Licensor has authority to license.
+
+h. Licensor means the individual(s) or entity(ies) granting rights under this
+Public License.
+
+i. Share means to provide material to the public by any means or process that
+requires permission under the Licensed Rights, such as reproduction, public
+display, public performance, distribution, dissemination, communication, or
+importation, and to make material available to the public including in ways
+that members of the public may access the material from a place and at a time
+individually chosen by them.
+
+j. Sui Generis Database Rights means rights other than copyright resulting
+from Directive 96/9/EC of the European Parliament and of the Council of 11
+March 1996 on the legal protection of databases, as amended and/or succeeded,
+as well as other essentially equivalent rights anywhere in the world.
+
+k. You means the individual or entity exercising the Licensed Rights under
+this Public License. Your has a corresponding meaning.
+
+Section 2 – Scope.
+
+   a. License grant.
+
+1. Subject to the terms and conditions of this Public License, the Licensor
+hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive,
+irrevocable license to exercise the Licensed Rights in the Licensed Material
+to:
+
+         A. reproduce and Share the Licensed Material, in whole or in part; and
+
+         B. produce, reproduce, and Share Adapted Material.
+
+2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions
+and Limitations apply to Your use, this Public License does not apply, and
+You do not need to comply with its terms and conditions.
+
+      3. Term. The term of this Public License is specified in Section 6(a).
+
+4. Media and formats; technical modifications allowed. The Licensor authorizes
+You to exercise the Licensed Rights in all media and formats whether now known
+or hereafter created, and to make technical modifications necessary to do
+so. The Licensor waives and/or agrees not to assert any right or authority
+to forbid You from making technical modifications necessary to exercise the
+Licensed Rights, including technical modifications necessary to circumvent
+Effective Technological Measures. For purposes of this Public License, simply
+making modifications authorized by this Section 2(a)(4) never produces Adapted
+Material.
+
+      5. Downstream recipients.
+
+A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed
+Material automatically receives an offer from the Licensor to exercise the
+Licensed Rights under the terms and conditions of this Public License.
+
+B. No downstream restrictions. You may not offer or impose any additional
+or different terms or conditions on, or apply any Effective Technological
+Measures to, the Licensed Material if doing so restricts exercise of the Licensed
+Rights by any recipient of the Licensed Material.
+
+6. No endorsement. Nothing in this Public License constitutes or may be construed
+as permission to assert or imply that You are, or that Your use of the Licensed
+Material is, connected with, or sponsored, endorsed, or granted official status
+by, the Licensor or others designated to receive attribution as provided in
+Section 3(a)(1)(A)(i).
+
+   b. Other rights.
+
+1. Moral rights, such as the right of integrity, are not licensed under this
+Public License, nor are publicity, privacy, and/or other similar personality
+rights; however, to the extent possible, the Licensor waives and/or agrees
+not to assert any such rights held by the Licensor to the limited extent necessary
+to allow You to exercise the Licensed Rights, but not otherwise.
+
+2. Patent and trademark rights are not licensed under this Public License.
+
+3. To the extent possible, the Licensor waives any right to collect royalties
+from You for the exercise of the Licensed Rights, whether directly or through
+a collecting society under any voluntary or waivable statutory or compulsory
+licensing scheme. In all other cases the Licensor expressly reserves any right
+to collect such royalties.
+
+Section 3 – License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the following
+conditions.
+
+   a. Attribution.
+
+1. If You Share the Licensed Material (including in modified form), You must:
+
+A. retain the following if it is supplied by the Licensor with the Licensed
+Material:
+
+i. identification of the creator(s) of the Licensed Material and any others
+designated to receive attribution, in any reasonable manner requested by the
+Licensor (including by pseudonym if designated);
+
+            ii. a copyright notice;
+
+            iii. a notice that refers to this Public License;
+
+            iv. a notice that refers to the disclaimer of warranties;
+
+v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
+
+B. indicate if You modified the Licensed Material and retain an indication
+of any previous modifications; and
+
+C. indicate the Licensed Material is licensed under this Public License, and
+include the text of, or the URI or hyperlink to, this Public License.
+
+2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner
+based on the medium, means, and context in which You Share the Licensed Material.
+For example, it may be reasonable to satisfy the conditions by providing a
+URI or hyperlink to a resource that includes the required information.
+
+3. If requested by the Licensor, You must remove any of the information required
+by Section 3(a)(1)(A) to the extent reasonably practicable.
+
+4. If You Share Adapted Material You produce, the Adapter's License You apply
+must not prevent recipients of the Adapted Material from complying with this
+Public License.
+
+Section 4 – Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that apply to
+Your use of the Licensed Material:
+
+a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract,
+reuse, reproduce, and Share all or a substantial portion of the contents of
+the database;
+
+b. if You include all or a substantial portion of the database contents in
+a database in which You have Sui Generis Database Rights, then the database
+in which You have Sui Generis Database Rights (but not its individual contents)
+is Adapted Material; and
+
+c. You must comply with the conditions in Section 3(a) if You Share all or
+a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not replace
+Your obligations under this Public License where the Licensed Rights include
+other Copyright and Similar Rights.
+
+Section 5 – Disclaimer of Warranties and Limitation of Liability.
+
+a. Unless otherwise separately undertaken by the Licensor, to the extent possible,
+the Licensor offers the Licensed Material as-is and as-available, and makes
+no representations or warranties of any kind concerning the Licensed Material,
+whether express, implied, statutory, or other. This includes, without limitation,
+warranties of title, merchantability, fitness for a particular purpose, non-infringement,
+absence of latent or other defects, accuracy, or the presence or absence of
+errors, whether or not known or discoverable. Where disclaimers of warranties
+are not allowed in full or in part, this disclaimer may not apply to You.
+
+b. To the extent possible, in no event will the Licensor be liable to You
+on any legal theory (including, without limitation, negligence) or otherwise
+for any direct, special, indirect, incidental, consequential, punitive, exemplary,
+or other losses, costs, expenses, or damages arising out of this Public License
+or use of the Licensed Material, even if the Licensor has been advised of
+the possibility of such losses, costs, expenses, or damages. Where a limitation
+of liability is not allowed in full or in part, this limitation may not apply
+to You.
+
+c. The disclaimer of warranties and limitation of liability provided above
+shall be interpreted in a manner that, to the extent possible, most closely
+approximates an absolute disclaimer and waiver of all liability.
+
+Section 6 – Term and Termination.
+
+a. This Public License applies for the term of the Copyright and Similar Rights
+licensed here. However, if You fail to comply with this Public License, then
+Your rights under this Public License terminate automatically.
+
+b. Where Your right to use the Licensed Material has terminated under Section
+6(a), it reinstates:
+
+1. automatically as of the date the violation is cured, provided it is cured
+within 30 days of Your discovery of the violation; or
+
+      2. upon express reinstatement by the Licensor.
+
+c. For the avoidance of doubt, this Section 6(b) does not affect any right
+the Licensor may have to seek remedies for Your violations of this Public
+License.
+
+d. For the avoidance of doubt, the Licensor may also offer the Licensed Material
+under separate terms or conditions or stop distributing the Licensed Material
+at any time; however, doing so will not terminate this Public License.
+
+   e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
+
+Section 7 – Other Terms and Conditions.
+
+a. The Licensor shall not be bound by any additional or different terms or
+conditions communicated by You unless expressly agreed.
+
+b. Any arrangements, understandings, or agreements regarding the Licensed
+Material not stated herein are separate from and independent of the terms
+and conditions of this Public License.
+
+Section 8 – Interpretation.
+
+a. For the avoidance of doubt, this Public License does not, and shall not
+be interpreted to, reduce, limit, restrict, or impose conditions on any use
+of the Licensed Material that could lawfully be made without permission under
+this Public License.
+
+b. To the extent possible, if any provision of this Public License is deemed
+unenforceable, it shall be automatically reformed to the minimum extent necessary
+to make it enforceable. If the provision cannot be reformed, it shall be severed
+from this Public License without affecting the enforceability of the remaining
+terms and conditions.
+
+c. No term or condition of this Public License will be waived and no failure
+to comply consented to unless expressly agreed to by the Licensor.
+
+d. Nothing in this Public License constitutes or may be interpreted as a limitation
+upon, or waiver of, any privileges and immunities that apply to the Licensor
+or You, including from the legal processes of any jurisdiction or authority.
+
+Creative Commons is not a party to its public licenses. Notwithstanding, Creative
+Commons may elect to apply one of its public licenses to material it publishes
+and in those instances will be considered the "Licensor." The text of the
+Creative Commons public licenses is dedicated to the public domain under the
+CC0 Public Domain Dedication. Except for the limited purpose of indicating
+that material is shared under a Creative Commons public license or as otherwise
+permitted by the Creative Commons policies published at creativecommons.org/policies,
+Creative Commons does not authorize the use of the trademark "Creative Commons"
+or any other trademark or logo of Creative Commons without its prior written
+consent including, without limitation, in connection with any unauthorized
+modifications to any of its public licenses or any other arrangements, understandings,
+or agreements concerning use of licensed material. For the avoidance of doubt,
+this paragraph does not form part of the public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-KhronosSpecCopyright.adoc b/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-KhronosSpecCopyright.adoc
new file mode 100644
index 0000000..d0e24a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-KhronosSpecCopyright.adoc
@@ -0,0 +1,136 @@
+Copyright 2014-2023 The Khronos Group Inc.
+
+This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.
+
+Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.
+
+Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.
+
+// "Ratified Specifications" sections
+
+// Specifications that contain no non-ratified extensions
+ifdef::ratified_core_spec[]
+This Specification has been created under the Khronos Intellectual Property
+Rights Policy, which is Attachment A of the Khronos Group Membership
+Agreement available at https://www.khronos.org/files/member_agreement.pdf.
+Parties desiring to implement the Specification and make use of Khronos
+trademarks in relation to that implementation, and receive reciprocal patent
+license protection under the Khronos Intellectual Property Rights Policy
+must become Adopters and confirm the implementation as conformant under the
+process defined by Khronos for this Specification; see
+https://www.khronos.org/adopters.
+endif::ratified_core_spec[]
+
+// Specifications that include non-ratified extensions
+ifndef::ratified_core_spec[]
+
+ifndef::VKSC_VERSION_1_0[]
+:apinameCR: Vulkan
+:apiUrlCore: https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html
+:apiUrlKHR: https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+:apinameCR: Vulkan SC
+:apiUrlCore: https://registry.khronos.org/vulkansc/specs/1.0/html/vkspec.html
+:apiUrlKHR: https://registry.khronos.org/vulkansc/specs/1.0-khr-extensions/html/vkspec.html
+endif::VKSC_VERSION_1_0[]
+
+This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified {apinameCR} Specification. The ratified versions
+of the {apinameCR} Specification can be found at {apiUrlCore} (core only)
+ifndef::VKSC_VERSION_1_0[]
+and {apiUrlKHR} (core with all ratified extensions)
+endif::VKSC_VERSION_1_0[]
+.
+endif::ratified_core_spec[]
+
+// "Successor Specification" section
+
+This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+ifdef::VKSC_VERSION_1_0[Vulkan, OpenGL SC]
+OpenGL, OpenGL ES and OpenCL.
+
+// "Normative Wording" section
+
+The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.
+
+Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <<introduction-conventions>> section of
+the <<introduction>> defines how these parts of the Specification are
+identified.
+
+Where this Specification uses <<introduction-technical-terminology,
+technical terminology>>, defined in the <<glossary, Glossary>> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.
+
+For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.
+
+// "Normative References" section
+
+Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<<introduction-normative-references, normative>>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.
+
+Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.
+
+// This is version V10_Feb23 of the Khronos Specification Copyright License
+// Header, adapted for asciidoc markup and for the specific requirements of
+// the Vulkan Specification:
+//
+// - The "Ratified Specifications" language is surrounding by mutually
+//   exclusive conditional directives, allowing either form to be included
+//   in the output Specifications depending on which extension(s) they are
+//   built with. The non-ratified section includes links to the ratified
+//   Vulkan 1.3 Specifications in the Vulkan Registry.
+// - The "Successor Specification" section cites OpenGL, OpenGL ES, and
+//   OpenCL.
+// - The "Normative Wording" section links to the Vulkan Specification
+//   introduction instead of the "[Document Conventions]" placeholder, and
+//   links to sections describing technical terminology and the glossary.
+// - The "Normative References" section links to the "Normative References"
+//   section of the Specification.
+// - The trademarks section cites only those trademarks relevant to Vulkan.
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-MPLUS.txt b/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-MPLUS.txt
new file mode 100644
index 0000000..9db1dd8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSES/LicenseRef-MPLUS.txt
@@ -0,0 +1,7 @@
+M+ Fonts License
+
+December 16, 2019
+
+M+ FONTS are a font family under the Free license. You can use, copy, and
+distribute it, with or without modification, either commercially and
+noncommercially.
diff --git a/codegen/vulkan/vulkan-docs-next/LICENSES/MIT.txt b/codegen/vulkan/vulkan-docs-next/LICENSES/MIT.txt
new file mode 100644
index 0000000..204b93d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/LICENSES/MIT.txt
@@ -0,0 +1,19 @@
+MIT License Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/codegen/vulkan/vulkan-docs-next/Makefile b/codegen/vulkan/vulkan-docs-next/Makefile
new file mode 100644
index 0000000..7028479
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/Makefile
@@ -0,0 +1,759 @@
+# Copyright 2014-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Vulkan Specification makefile
+#
+# To build the spec with a specific version included, set the
+# $(VERSIONS) variable on the make command line to a space-separated
+# list of version names (e.g. VK_VERSION_1_3) *including all previous
+# versions of the API* (e.g. VK_VERSION_1_1 must also include
+# VK_VERSION_1_0 and VKSC_VERSION_1_0 must also include VK_VERSION_1_2,
+# VK_VERSION_1_1 & VK_VERSION_1_0). $(VERSIONS) is converted into generator
+# script arguments $(VERSIONOPTIONS) and into $(ATTRIBFILE)
+#
+# To build the specification / reference pages (refpages) with optional
+# extensions included, set the $(EXTENSIONS) variable on the make
+# command line to a space-separated list of extension names.
+# $(EXTENSIONS) is converted into generator script
+# arguments $(EXTOPTIONS) and into $(ATTRIBFILE)
+
+# If a recipe fails, delete its target file. Without this cleanup, the leftover
+# file from the failed recipe can falsely satisfy dependencies on subsequent
+# runs of `make`.
+.DELETE_ON_ERROR:
+
+# Support building both Vulkan and Vulkan SC APIs
+# Allow the API to be overridden by the VULKAN_API environment variable
+# supported options are 'vulkan' and 'vulkansc' or unset
+# default to 'vulkan'
+VULKAN_API ?= vulkan
+ifeq ($(VULKAN_API),vulkan)
+VERSIONS := VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_2 VK_VERSION_1_3
+else
+VERSIONS := VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_2 VKSC_VERSION_1_0
+endif
+VERSIONOPTIONS := $(foreach version,$(VERSIONS),-feature $(version))
+
+EXTS := $(sort $(EXTENSIONS) $(DIFFEXTENSIONS))
+EXTOPTIONS := $(foreach ext,$(EXTS),-extension $(ext))
+
+# APITITLE can be set to extra text to append to the document title,
+# normally used when building with extensions included.
+APITITLE =
+
+# IMAGEOPTS is normally set to generate inline SVG images, but can be
+# overridden to an empty string, since the inline option does not work
+# well with our HTML diffs.
+IMAGEOPTS = inline
+
+# The default 'all' target builds the following sub-targets:
+#  html - HTML single-page API specification
+#  pdf - PDF single-page API specification
+#  styleguide - HTML5 single-page "Documentation and Extensions" guide
+#  registry - HTML5 single-page XML Registry Schema documentation
+#  manhtml - HTML5 single-page reference guide - NOT SUPPORTED
+#  manpdf - PDF reference guide - NOT SUPPORTED
+#  manhtmlpages - HTML5 separate per-feature refpages
+#  allchecks - checks for style guide compliance, XML consistency,
+#   internal link validity, and other easy to catch errors.
+
+all: alldocs allchecks
+
+alldocs: allspecs allman proposals
+
+allspecs: html pdf styleguide registry
+
+allman: manhtmlpages
+
+# Invokes all the automated checks, but CHECK_XREFS can be set to empty
+# on the command line to avoid building an HTML spec target.
+CHECK_XREFS = check-xrefs
+ifeq ($(VULKAN_API),vulkansc)
+CHECK_XREFS =
+endif
+allchecks: check-copyright-dates \
+    check-contractions \
+    check-spelling \
+    check-writing \
+    check-bullets \
+    check-reflow \
+    check-links \
+    check-consistency \
+    check-undefined \
+    check-txtfiles \
+    $(CHECK_XREFS)
+
+QUIET	 ?= @
+VERYQUIET?= @
+PYTHON	 ?= python3
+ASCIIDOC ?= asciidoctor
+RUBY	 = ruby
+NODEJS	 = node
+PATCH	 = patch
+RM	 = rm -f
+RMRF	 = rm -rf
+MKDIR	 = mkdir -p
+CP	 = cp
+ECHO	 = echo
+
+# Where the repo root is
+ROOTDIR        = $(CURDIR)
+# Where the spec files are
+SPECDIR        = $(CURDIR)
+
+# Path to scripts used in generation
+SCRIPTS  = $(ROOTDIR)/scripts
+# Path to configs and asciidoc extensions used in generation
+CONFIGS  = $(ROOTDIR)/config
+
+# Target directories for output files
+# HTMLDIR - 'html' target
+# PDFDIR - 'pdf' target
+OUTDIR	  = $(GENERATED)/out
+HTMLDIR   = $(OUTDIR)/html
+VUDIR	  = $(OUTDIR)/validation
+PDFDIR	  = $(OUTDIR)/pdf
+PROPOSALDIR = $(OUTDIR)/proposals
+JSAPIMAP  = $(GENERATED)/apimap.cjs
+PYAPIMAP  = $(GENERATED)/apimap.py
+RBAPIMAP  = $(GENERATED)/apimap.rb
+
+# PDF Equations are written to SVGs, this dictates the location to store those files (temporary)
+PDFMATHDIR = $(OUTDIR)/equations_temp
+
+# Set VERBOSE to -v to see what asciidoc is doing.
+VERBOSE =
+
+# asciidoc attributes to set (defaults are usually OK)
+# NOTEOPTS sets options controlling which NOTEs are generated
+# PATCHVERSION must equal VK_HEADER_VERSION from vk.xml
+# SCPATCHVERSION is specific to the Vulkan SC spec
+# ATTRIBOPTS sets the API revision and enables KaTeX generation
+# EXTRAATTRIBS sets additional attributes, if passed to make
+# ADOCMISCOPTS miscellaneous options controlling error behavior, etc.
+# ADOCEXTS asciidoctor extensions to load
+# ADOCOPTS options for asciidoc->HTML5 output
+
+NOTEOPTS     = -a editing-notes -a implementation-guide
+PATCHVERSION = 269
+BASEOPTS     =
+
+ifneq (,$(findstring VKSC_VERSION_1_0,$(VERSIONS)))
+VKSPECREVISION := 1.2.$(PATCHVERSION)
+SCPATCHVERSION = 13
+SPECREVISION = 1.0.$(SCPATCHVERSION)
+BASEOPTS = -a baserevnumber="$(VKSPECREVISION)"
+else
+
+ifneq (,$(findstring VK_VERSION_1_3,$(VERSIONS)))
+SPECMINOR = 3
+else
+ifneq (,$(findstring VK_VERSION_1_2,$(VERSIONS)))
+SPECMINOR = 2
+else
+ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
+SPECMINOR = 1
+else
+SPECMINOR = 0
+endif
+endif
+endif
+
+SPECREVISION = 1.$(SPECMINOR).$(PATCHVERSION)
+endif
+
+# Spell out ISO 8601 format as not all date commands support --rfc-3339
+SPECDATE     = $(shell echo `date -u "+%Y-%m-%d %TZ"`)
+
+# Generate Asciidoc attributes for spec remark
+# Could use `git log -1 --format="%cd"` to get branch commit date
+# This used to be a dependency in the spec html/pdf targets,
+# but that is likely to lead to merge conflicts. Just regenerate
+# when pushing a new spec for review to the sandbox.
+# The dependency on HEAD is per the suggestion in
+# http://neugierig.org/software/blog/2014/11/binary-revisions.html
+SPECREMARK = from git branch: $(shell echo `git symbolic-ref --short HEAD 2> /dev/null || echo Git branch not available`) \
+	     commit: $(shell echo `git log -1 --format="%H" 2> /dev/null || echo Git commit not available`)
+
+# Some of the attributes used in building all spec documents:
+#   chapters - absolute path to chapter sources
+#   appendices - absolute path to appendix sources
+#   proposals - absolute path to proposal sources
+#   images - absolute path to images
+#   generated - absolute path to generated sources
+#   refprefix - controls which generated extension metafiles are
+#	included at build time. Must be empty for specification,
+#	'refprefix.' for refpages (see ADOCREFOPTS below).
+ATTRIBOPTS   = -a revnumber="$(SPECREVISION)" $(BASEOPTS) \
+	       -a revdate="$(SPECDATE)" \
+	       -a revremark="$(SPECREMARK)" \
+	       -a apititle="$(APITITLE)" \
+	       -a stem=latexmath \
+	       -a imageopts="$(IMAGEOPTS)" \
+	       -a config=$(ROOTDIR)/config \
+	       -a appendices=$(SPECDIR)/appendices \
+	       -a proposals=$(SPECDIR)/proposals \
+	       -a chapters=$(SPECDIR)/chapters \
+	       -a images=$(IMAGEPATH) \
+	       -a generated=$(GENERATED) \
+	       -a refprefix \
+	       $(EXTRAATTRIBS)
+ADOCMISCOPTS = --failure-level ERROR
+# Non target-specific Asciidoctor extensions and options
+# Look in $(GENERATED) for explicitly required non-extension Ruby, such
+# as apimap.rb
+ADOCEXTS     = -I$(GENERATED) \
+	       -r $(CONFIGS)/spec-macros.rb \
+	       -r $(CONFIGS)/open_listing_block.rb \
+	       -r $(CONFIGS)/ifdef-mismatch.rb
+ADOCOPTS     = -d book $(ADOCMISCOPTS) $(ATTRIBOPTS) $(NOTEOPTS) $(VERBOSE) $(ADOCEXTS)
+
+# HTML target-specific Asciidoctor extensions and options
+ADOCHTMLEXTS = -r $(CONFIGS)/katex_replace.rb \
+	       -r $(CONFIGS)/loadable_html.rb \
+	       -r $(CONFIGS)/vuid-expander.rb \
+	       -r $(CONFIGS)/rouge-extend-css.rb \
+	       -r $(CONFIGS)/genanchorlinks.rb
+
+# ADOCHTMLOPTS relies on the relative runtime path from the output HTML
+# file to the katex scripts being set with KATEXDIR. This is overridden
+# by some targets.
+# KaTeX source is copied from KATEXSRCDIR in the repository to
+# KATEXINSTDIR in the output directory.
+# KATEXDIR is the relative path from a target to KATEXINSTDIR, since
+# that is coded into CSS, and set separately for each HTML target.
+# ADOCHTMLOPTS also relies on the absolute build-time path to the
+# 'stylesdir' containing our custom CSS.
+KATEXSRCDIR  = $(ROOTDIR)/katex
+KATEXINSTDIR = $(OUTDIR)/katex
+ADOCHTMLOPTS = $(ADOCHTMLEXTS) -a katexpath=$(KATEXDIR) \
+	       -a stylesheet=khronos.css \
+	       -a stylesdir=$(ROOTDIR)/config \
+	       -a sectanchors
+
+# PDF target-specific Asciidoctor extensions and options
+ADOCPDFEXTS  = -r asciidoctor-pdf \
+	       -r asciidoctor-mathematical \
+	       -r $(CONFIGS)/asciidoctor-mathematical-ext.rb \
+	       -r $(CONFIGS)/vuid-expander.rb
+ADOCPDFOPTS  = $(ADOCPDFEXTS) -a mathematical-format=svg \
+	       -a imagesoutdir=$(PDFMATHDIR) \
+	       -a pdf-fontsdir=$(CONFIGS)/fonts,GEM_FONTS_DIR \
+	       -a pdf-stylesdir=$(CONFIGS)/themes -a pdf-style=pdf
+
+# Valid usage-specific Asciidoctor extensions and options
+ADOCVUEXTS = -r $(CONFIGS)/vu-to-json.rb -r $(CONFIGS)/quiet-include-failure.rb
+# {vuprefix} precedes some anchors which are otherwise encountered twice
+# by the validusage extractor.
+# {attribute-missing} overrides the global setting, since the extractor
+# reports a lot of false-flag warnings otherwise.
+ADOCVUOPTS = $(ADOCVUEXTS) -a vuprefix=vu- -a attribute-missing=skip
+
+.PHONY: directories
+
+# Images used by the spec. These are included in generated HTML now.
+IMAGEPATH = $(SPECDIR)/images
+SVGFILES  = $(wildcard $(IMAGEPATH)/*.svg)
+
+# Top-level spec source file
+SPECSRC        = $(SPECDIR)/vkspec.adoc
+# Static files making up sections of the API spec.
+SPECFILES = $(wildcard $(SPECDIR)/chapters/[A-Za-z]*.adoc $(SPECDIR)/chapters/*/[A-Za-z]*.adoc $(SPECDIR)/appendices/[A-Za-z]*.adoc)
+# Shorthand for where different types generated files go.
+# All can be relocated by overriding GENERATED in the make invocation.
+GENERATED      = $(CURDIR)/gen
+REFPATH        = $(GENERATED)/refpage
+APIPATH        = $(GENERATED)/api
+VALIDITYPATH   = $(GENERATED)/validity
+HOSTSYNCPATH   = $(GENERATED)/hostsynctable
+METAPATH       = $(GENERATED)/meta
+INTERFACEPATH  = $(GENERATED)/interfaces
+SPIRVCAPPATH   = $(GENERATED)/spirvcap
+FORMATSPATH    = $(GENERATED)/formats
+SYNCPATH       = $(GENERATED)/sync
+PROPOSALPATH   = $(SPECDIR)/proposals
+# timeMarker is a proxy target created when many generated files are
+# made at once
+APIDEPEND      = $(APIPATH)/timeMarker
+VALIDITYDEPEND = $(VALIDITYPATH)/timeMarker
+HOSTSYNCDEPEND = $(HOSTSYNCPATH)/timeMarker
+METADEPEND     = $(METAPATH)/timeMarker
+INTERFACEDEPEND = $(INTERFACEPATH)/timeMarker
+SPIRVCAPDEPEND = $(SPIRVCAPPATH)/timeMarker
+FORMATSDEPEND = $(FORMATSPATH)/timeMarker
+SYNCDEPEND = $(SYNCPATH)/timeMarker
+RUBYDEPEND     = $(RBAPIMAP)
+ATTRIBFILE     = $(GENERATED)/specattribs.adoc
+# All generated dependencies
+GENDEPENDS     = $(APIDEPEND) $(VALIDITYDEPEND) $(HOSTSYNCDEPEND) $(METADEPEND) $(INTERFACEDEPEND) $(SPIRVCAPDEPEND) $(FORMATSDEPEND) $(SYNCDEPEND) $(RUBYDEPEND) $(ATTRIBFILE)
+# All non-format-specific dependencies
+COMMONDOCS     = $(SPECFILES) $(GENDEPENDS)
+
+# Script to translate math on build time
+TRANSLATEMATH = $(NODEJS) $(SCRIPTS)/translate_math.js $(KATEXSRCDIR)/katex.min.js
+
+# Install katex in KATEXINSTDIR ($(OUTDIR)/katex) to be shared by all
+# HTML targets.
+# We currently only need the css and fonts, but copy all of KATEXSRCDIR anyway.
+$(KATEXINSTDIR): $(KATEXSRCDIR)
+	$(QUIET)$(MKDIR) $(KATEXINSTDIR)
+	$(QUIET)$(RMRF)  $(KATEXINSTDIR)
+	$(QUIET)$(CP) -rf $(KATEXSRCDIR) $(KATEXINSTDIR)
+
+# Spec targets
+# There is some complexity to try and avoid short virtual targets like 'html'
+# causing specs to *always* be regenerated.
+
+CHUNKER = $(SCRIPTS)/asciidoctor-chunker/asciidoctor-chunker.js
+CHUNKINDEX = $(CONFIGS)/chunkindex
+# Only the $(CHUNKER) step is required unless the search index is to be
+# generated and incorporated into the chunked spec.
+#
+# Dropped $(QUIET) for now
+# Should set NODE_PATH=/usr/local/lib/node_modules or wherever, outside Makefile
+# Copying chunked.js into target avoids a warning from the chunker
+chunked: $(HTMLDIR)/vkspec.html $(SPECSRC) $(COMMONDOCS)
+	$(QUIET)$(CHUNKINDEX)/addscripts.sh $(HTMLDIR)/vkspec.html $(HTMLDIR)/prechunked.html
+	$(QUIET)$(CP) $(CHUNKINDEX)/chunked.css $(CHUNKINDEX)/chunked.js \
+	    $(CHUNKINDEX)/lunr.js $(HTMLDIR)
+	$(QUIET)$(NODEJS) $(CHUNKER) $(HTMLDIR)/prechunked.html -o $(HTMLDIR)
+	$(QUIET)$(RM) $(HTMLDIR)/prechunked.html
+	$(QUIET)$(RUBY) $(CHUNKINDEX)/generate-index.rb $(HTMLDIR)/chap*html | \
+	    $(NODEJS) $(CHUNKINDEX)/build-index.js > $(HTMLDIR)/search.index.js
+
+# This is a temporary target while the new chunker is pre-release.
+# Eventually we will either pull the chunker into CI, or permanently
+# store a copy of the short JavaScript chunker in this repository.
+CHUNKERVERSION = asciidoctor-chunker_v1.0.0
+CHUNKURL = https://github.com/wshito/asciidoctor-chunker/releases/download/v1.0.0/$(CHUNKERVERSION).zip
+getchunker:
+	wget $(CHUNKURL) -O $(CHUNKERVERSION).zip
+	unzip $(CHUNKERVERSION).zip
+	mv $(CHUNKERVERSION)/* scripts/asciidoctor-chunker/
+	$(RMRF) $(CHUNKERVERSION).zip $(CHUNKERVERSION)
+
+html: $(HTMLDIR)/vkspec.html $(SPECSRC) $(COMMONDOCS)
+
+$(HTMLDIR)/vkspec.html: KATEXDIR = ../katex
+$(HTMLDIR)/vkspec.html: $(SPECSRC) $(COMMONDOCS) $(KATEXINSTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(SPECSRC)
+	$(QUIET)$(TRANSLATEMATH) $@
+
+diff_html: $(HTMLDIR)/diff.html $(SPECSRC) $(COMMONDOCS)
+
+$(HTMLDIR)/diff.html: KATEXDIR = ../katex
+$(HTMLDIR)/diff.html: $(SPECSRC) $(COMMONDOCS) $(KATEXINSTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \
+	    -a diff_extensions="$(DIFFEXTENSIONS)" \
+	    -r $(CONFIGS)/extension-highlighter.rb --trace \
+	    -o $@ $(SPECSRC)
+	$(QUIET)$(TRANSLATEMATH) $@
+
+# PDF optimizer - usage $(OPTIMIZEPDF) in.pdf out.pdf
+# OPTIMIZEPDFOPTS=--compress-pages is slightly better, but much slower
+OPTIMIZEPDF = hexapdf optimize $(OPTIMIZEPDFOPTS)
+
+pdf: $(PDFDIR)/vkspec.pdf $(SPECSRC) $(COMMONDOCS)
+
+$(PDFDIR)/vkspec.pdf: $(SPECSRC) $(COMMONDOCS)
+	$(QUIET)$(MKDIR) $(PDFDIR)
+	$(QUIET)$(MKDIR) $(PDFMATHDIR)
+	$(QUIET)$(ASCIIDOC) -b pdf $(ADOCOPTS) $(ADOCPDFOPTS) -o $@ $(SPECSRC)
+	$(QUIET)$(OPTIMIZEPDF) $@ $@.out.pdf && mv $@.out.pdf $@
+	$(QUIET)$(RMRF) $(PDFMATHDIR)
+
+validusage: $(VUDIR)/validusage.json $(SPECSRC) $(COMMONDOCS)
+
+$(VUDIR)/validusage.json: $(SPECSRC) $(COMMONDOCS)
+	$(QUIET)$(MKDIR) $(VUDIR)
+	$(QUIET)$(ASCIIDOC) $(ADOCOPTS) $(ADOCVUOPTS) --trace \
+	    -a json_output=$@ -o $@ $(SPECSRC)
+
+# Vulkan Documentation and Extensions, a.k.a. "Style Guide" documentation
+
+STYLESRC = styleguide.adoc
+STYLEFILES = $(wildcard $(SPECDIR)/style/[A-Za-z]*.adoc)
+
+styleguide: $(OUTDIR)/styleguide.html
+
+$(OUTDIR)/styleguide.html: KATEXDIR = katex
+$(OUTDIR)/styleguide.html: $(STYLESRC) $(STYLEFILES) $(GENDEPENDS) $(KATEXINSTDIR)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(STYLESRC)
+	$(QUIET)$(TRANSLATEMATH) $@
+
+
+# Vulkan API Registry (XML Schema) documentation
+# Currently does not use latexmath / KaTeX
+
+REGSRC = registry.adoc
+
+registry: $(OUTDIR)/registry.html
+
+$(OUTDIR)/registry.html: KATEXDIR = katex
+$(OUTDIR)/registry.html: $(REGSRC) $(GENDEPENDS)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(REGSRC)
+	$(QUIET)$(TRANSLATEMATH) $@
+
+# Build proposal documents
+PROPOSALSOURCES   = $(filter-out $(PROPOSALPATH)/template.adoc, $(wildcard $(PROPOSALPATH)/*.adoc))
+PROPOSALDOCS	  = $(PROPOSALSOURCES:$(PROPOSALPATH)/%.adoc=$(PROPOSALDIR)/%.html)
+proposals: $(PROPOSALDOCS) $(PROPOSALSOURCES)
+
+# Proposal documents are built outside of the main specification
+$(PROPOSALDIR)/%.html: $(PROPOSALPATH)/%.adoc
+	$(QUIET)$(ASCIIDOC) --failure-level ERROR -b html5 -o $@ $<
+	$(QUIET) if egrep -q '\\[([]' $@ ; then \
+	    $(TRANSLATEMATH) $@ ; \
+	fi
+
+# Reflow text in spec sources
+REFLOW = $(SCRIPTS)/reflow.py
+REFLOWOPTS = -overwrite
+
+reflow:
+	$(QUIET) echo "Warning: please verify the spec outputs build without changes!"
+	$(PYTHON) $(REFLOW) $(REFLOWOPTS) $(SPECSRC) $(SPECFILES) $(STYLESRC) $(STYLEFILES)
+
+# Automated markup and consistency checks, invoked by 'allchecks' and
+# 'ci-allchecks' targets or individually.
+
+# Look for disallowed contractions
+CHECK_CONTRACTIONS = git grep -i -F -f $(ROOTDIR)/config/CI/contractions | egrep -v -E -f $(ROOTDIR)/config/CI/contractions-allowed
+check-contractions:
+	if test `$(CHECK_CONTRACTIONS) | wc -l` != 0 ; then \
+	    echo "Contractions found that are not allowed:" ; \
+	    $(CHECK_CONTRACTIONS) ; \
+	    exit 1 ; \
+	fi
+
+# Look for typos and suggest fixes
+CODESPELL = codespell --config $(ROOTDIR)/config/CI/codespellrc -S '*.js' -S './antora*/*' -S 'ERRS*,*.pdf'
+check-spelling:
+	if ! $(CODESPELL) > /dev/null ; then \
+	    echo "Found probable misspellings. Corrections can be added to config/CI/codespell-allowed:" ; \
+	    $(CODESPELL) ; \
+	    exit 1 ; \
+	fi
+
+# Look for old or unpreferred language in specification language.
+# This mostly helps when we make global changes that also need to be
+# made in outstanding extension branches for new text.
+CHECK_WRITING = git grep -E -f $(ROOTDIR)/config/CI/writing $(SPECDIR)/registry.adoc $(SPECDIR)/vkspec.adoc $(SPECDIR)/chapters $(SPECDIR)/appendices
+check-writing:
+	if test `$(CHECK_WRITING) | wc -l` != 0 ; then \
+	    echo "Found old style writing. Please refer to the style guide or similar language in current main branch for fixes:" ; \
+	    $(CHECK_WRITING) ; \
+	    exit 1 ; \
+	fi
+
+# Look for bullet list items not preceded by exactly two spaces, per styleguide
+CHECK_BULLETS = git grep -E '^( |   +)[-*]+ ' $(SPECDIR)/chapters $(SPECDIR)/appendices $(SPECDIR)/style $(SPECDIR)/[a-z]*.adoc
+check-bullets:
+	if test `$(CHECK_BULLETS) | wc -l` != 0 ; then \
+	    echo "Bullet list item found not preceded by exactly two spaces:" ; \
+	    $(CHECK_BULLETS) ; \
+	    exit 1 ; \
+	fi
+
+# Look for asciidoctor conditionals inside VU statements; and for
+# duplicated VUID numbers, but only in spec sources.
+check-reflow:
+	$(PYTHON) $(SCRIPTS)/reflow.py -nowrite -noflow -check FAIL -checkVUID FAIL $(SPECFILES)
+
+# Look for files whose Khronos copyright has not been updated to the
+# current year
+DATE_YEAR = $(shell date +%Y)
+CHECK_DATES = git grep -z -l 'Copyright.*The Khronos' | xargs -0 git grep -L 'Copyright.*$(DATE_YEAR).*The Khronos'
+check-copyright-dates:
+	if test `$(CHECK_DATES) | wc -l` != 0 ; then \
+	    echo "Files with out-of-date Khronos copyrights (must be updated to $(DATE_YEAR):" ; \
+	    $(CHECK_DATES) ; \
+	    exit 1 ; \
+	 fi
+
+# Look for proper use of custom markup macros
+#   --ignore_count 0 can be incremented if there are unfixable errors
+check-links:
+	$(PYTHON) $(SCRIPTS)/check_spec_links.py -Werror --ignore_count 0
+
+# Perform XML consistency checks
+# Use '-warn' option to display warnings as well as errors
+check-consistency:
+	$(PYTHON) $(SCRIPTS)/xml_consistency.py
+
+# Looks for untagged use of 'undefined' in spec sources
+check-undefined:
+	$(SCRIPTS)/ci/check_undefined
+
+# Look for '.txt' files, which should almost all be .adoc now
+CHECK_TXTFILES = find . -name '*.txt' | egrep -v -E -f $(ROOTDIR)/config/CI/txt-files-allowed
+check-txtfiles:
+	if test `$(CHECK_TXTFILES) | wc -l` != 0 ; then \
+	    echo "*.txt files found that are not allowed (use .adoc):" ; \
+	    $(CHECK_TXTFILES) ; \
+	    exit 1 ; \
+	fi
+
+# Check for valid xrefs in the output html
+check-xrefs: $(HTMLDIR)/vkspec.html
+	$(SCRIPTS)/check_html_xrefs.py $(HTMLDIR)/vkspec.html
+
+# Clean generated and output files
+
+clean: clean_html clean_pdf clean_man clean_generated clean_validusage
+
+clean_html:
+	$(QUIET)$(RMRF) $(HTMLDIR) $(OUTDIR)/katex
+	$(QUIET)$(RM) $(OUTDIR)/apispec.html $(OUTDIR)/styleguide.html \
+	    $(OUTDIR)/registry.html
+
+clean_pdf:
+	$(QUIET)$(RMRF) $(PDFDIR) $(OUTDIR)/apispec.pdf
+
+clean_man:
+	$(QUIET)$(RMRF) $(MANHTMLDIR)
+
+# Generated directories and files to remove
+CLEAN_GEN_PATHS = \
+    $(APIPATH) \
+    $(HOSTSYNCPATH) \
+    $(VALIDITYPATH) \
+    $(METAPATH) \
+    $(INTERFACEPATH) \
+    $(SPIRVCAPPATH) \
+    $(FORMATSPATH) \
+    $(SYNCPATH) \
+    $(REFPATH) \
+    $(GENERATED)/include \
+    $(GENERATED)/__pycache__ \
+    $(PDFMATHDIR) \
+    $(JSAPIMAP) \
+    $(PYAPIMAP) \
+    $(RBAPIMAP) \
+    $(ATTRIBFILE)
+
+clean_generated:
+	$(QUIET)$(RMRF) $(CLEAN_GEN_PATHS)
+
+clean_validusage:
+	$(QUIET)$(RM) $(VUDIR)/validusage.json
+
+
+# Generated refpage sources. For now, always build all refpages.
+MANSOURCES   = $(filter-out $(REFPATH)/apispec.adoc, $(wildcard $(REFPATH)/*.adoc))
+
+# Generation of refpage asciidoctor sources by extraction from the
+# specification.
+#
+# Should have a proper dependency causing the man page sources to be
+# generated by running genRef (once), but adding $(MANSOURCES) to the
+# targets causes genRef to run once/target.
+#
+# Should pass in $(EXTOPTIONS) to determine which pages to generate.
+# For now, all core and extension refpages are extracted by genRef.py.
+GENREF = $(SCRIPTS)/genRef.py
+LOGFILE = $(REFPATH)/refpage.log
+refpages: $(REFPATH)/apispec.adoc
+$(REFPATH)/apispec.adoc: $(SPECFILES) $(GENREF) $(SCRIPTS)/reflib.py $(PYAPIMAP)
+	$(QUIET)$(MKDIR) $(REFPATH)
+	$(PYTHON) $(GENREF) -genpath $(GENERATED) -basedir $(REFPATH) \
+	    -log $(LOGFILE) -extpath $(SPECDIR)/appendices \
+	    $(EXTOPTIONS) $(SPECFILES)
+
+# These targets are HTML5 refpages
+#
+# The recursive $(MAKE) is an apparently unavoidable hack, since the
+# actual list of man page sources is not known until after
+# $(REFPATH)/apispec.adoc is generated. $(GENDEPENDS) is generated before
+# running the recursive make, so it does not trigger twice
+# $(SUBMAKEOPTIONS) suppresses the redundant "Entering / leaving"
+# messages make normally prints out, similarly to suppressing make
+# command output logging in the individual refpage actions below.
+SUBMAKEOPTIONS = --no-print-directory
+manhtmlpages: $(REFPATH)/apispec.adoc $(GENDEPENDS)
+	$(QUIET) echo "manhtmlpages: building HTML refpages with these options:"
+	$(QUIET) echo $(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \
+	    $(ADOCREFOPTS) -d manpage -o REFPAGE.html REFPAGE.adoc
+	$(MAKE) $(SUBMAKEOPTIONS) -e buildmanpages
+
+# Build the individual refpages, then the symbolic links from aliases
+MANHTMLDIR  = $(OUTDIR)/man/html
+MANHTML     = $(MANSOURCES:$(REFPATH)/%.adoc=$(MANHTMLDIR)/%.html)
+buildmanpages: $(MANHTML)
+	$(MAKE) $(SUBMAKEOPTIONS) -e manaliases
+
+# Asciidoctor options to build refpages
+#
+# ADOCREFOPTS *must* be placed after ADOCOPTS in the command line, so
+# that it can override spec attribute values.
+#
+# cross-file-links makes custom macros link to other refpages
+# refprefix includes the refpage (not spec) extension metadata.
+# isrefpage is for refpage-specific content
+# html_spec_relative is where to find the full specification
+ADOCREFOPTS = -a cross-file-links -a refprefix='refpage.' -a isrefpage \
+	      -a html_spec_relative='../../html/vkspec.html'
+
+# The refpage build process normally generates far too much output, so
+# use VERYQUIET instead of QUIET
+# Running translate_math.js on every refpage is slow and most of them
+# do not contain math, so do a quick search for latexmath delimiters.
+$(MANHTMLDIR)/%.html: KATEXDIR = ../../katex
+$(MANHTMLDIR)/%.html: $(REFPATH)/%.adoc $(GENDEPENDS) $(KATEXINSTDIR)
+	$(VERYQUIET)echo "Building $@ from $< using default options"
+	$(VERYQUIET)$(MKDIR) $(MANHTMLDIR)
+	$(VERYQUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) $(ADOCREFOPTS) \
+	    -d manpage -o $@ $<
+	$(VERYQUIET)if egrep -q '\\[([]' $@ ; then \
+	    $(TRANSLATEMATH) $@ ; \
+	fi
+
+# The 'manhtml' and 'manpdf' targets are NO LONGER SUPPORTED by Khronos.
+# They generate HTML5 and PDF single-file versions of the refpages.
+# The generated refpage sources are included by $(REFPATH)/apispec.adoc,
+# and are always generated along with that file. Therefore there is no
+# need for a recursive $(MAKE) or a $(MANHTML) dependency, unlike the
+# manhtmlpages target.
+
+manpdf: $(OUTDIR)/apispec.pdf
+
+$(OUTDIR)/apispec.pdf: $(SPECVERSION) $(REFPATH)/apispec.adoc $(SVGFILES) $(GENDEPENDS)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(MKDIR) $(PDFMATHDIR)
+	$(QUIET)$(ASCIIDOC) -b pdf -a html_spec_relative='html/vkspec.html' \
+	    $(ADOCOPTS) $(ADOCPDFOPTS) -o $@ $(REFPATH)/apispec.adoc
+	$(QUIET)$(OPTIMIZEPDF) $@ $@.out.pdf && mv $@.out.pdf $@
+
+manhtml: $(OUTDIR)/apispec.html
+
+$(OUTDIR)/apispec.html: KATEXDIR = katex
+$(OUTDIR)/apispec.html: ADOCMISCOPTS =
+$(OUTDIR)/apispec.html: $(SPECVERSION) $(REFPATH)/apispec.adoc $(SVGFILES) $(GENDEPENDS) $(KATEXINSTDIR)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 -a html_spec_relative='html/vkspec.html' \
+	    $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(REFPATH)/apispec.adoc
+	$(QUIET)$(TRANSLATEMATH) $@
+
+# Create links for refpage aliases
+
+MAKEMANALIASES = $(SCRIPTS)/makemanaliases.py
+manaliases: $(PYAPIMAP)
+	$(PYTHON) $(MAKEMANALIASES) -genpath $(GENERATED) -refdir $(MANHTMLDIR)
+
+# Targets generated from the XML and registry processing scripts
+#   $(PYAPIMAP) (apimap.py) - Python encoding of the registry
+# The $(...DEPEND) targets are files named 'timeMarker' in generated
+# target directories. They serve as proxies for the multiple generated
+# files written for each target:
+#   apiinc / proxy $(APIDEPEND) - API interface include files in $(APIPATH)
+#   hostsyncinc / proxy $(HOSTSYNCDEPEND) - host sync table include files in $(HOSTSYNCPATH)
+#   validinc / proxy $(VALIDITYDEPEND) - API validity include files in $(VALIDITYPATH)
+#   extinc / proxy $(METADEPEND) - extension appendix metadata include files in $(METAPATH)
+#
+# $(VERSIONOPTIONS) specifies the core API versions which are included
+# in these targets, and is set above based on $(VERSIONS)
+#
+# $(EXTOPTIONS) specifies the extensions which are included in these
+# targets, and is set above based on $(EXTENSIONS).
+#
+# $(GENVKEXTRA) are extra options that can be passed to genvk.py, e.g.
+# '-diag diag'
+
+REGISTRY   = $(ROOTDIR)/xml
+VKXML	   = $(REGISTRY)/vk.xml
+GENVK	   = $(SCRIPTS)/genvk.py
+GENVKOPTS  = $(VERSIONOPTIONS) $(EXTOPTIONS) $(GENVKEXTRA) -registry $(VKXML)
+GENVKEXTRA =
+
+scriptapi: jsapi pyapi rubyapi
+
+jsapi $(JSAPIMAP): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(GENERATED)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(GENERATED) apimap.cjs
+
+pyapi $(PYAPIMAP): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(GENERATED)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(GENERATED) apimap.py
+
+rubyapi $(RBAPIMAP): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(GENERATED)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(GENERATED) apimap.rb
+
+apiinc: $(APIDEPEND)
+
+$(APIDEPEND): $(VKXML) $(GENVK) $(PYAPIMAP)
+	$(QUIET)$(MKDIR) $(APIPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(APIPATH) -genpath $(GENERATED) apiinc
+
+hostsyncinc: $(HOSTSYNCDEPEND)
+
+$(HOSTSYNCDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(HOSTSYNCPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(HOSTSYNCPATH) hostsyncinc
+
+validinc: $(VALIDITYDEPEND)
+
+$(VALIDITYDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(VALIDITYPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(VALIDITYPATH) validinc
+
+extinc: $(METAPATH)/timeMarker
+
+$(METADEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(METAPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(METAPATH) extinc
+
+interfaceinc: $(INTERFACEPATH)/timeMarker
+
+$(INTERFACEDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(INTERFACEPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(INTERFACEPATH) interfaceinc
+
+# This generates a single file, so SPIRVCAPDEPEND is the full path to
+# the file, rather than to a timeMarker in the same directory.
+spirvcapinc: $(SPIRVCAPDEPEND)
+
+$(SPIRVCAPDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(SPIRVCAPPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(SPIRVCAPPATH) spirvcapinc
+
+# This generates a single file, so FORMATSDEPEND is the full path to
+# the file, rather than to a timeMarker in the same directory.
+formatsinc: $(FORMATSDEPEND)
+
+$(FORMATSDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(FORMATSPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(FORMATSPATH) formatsinc
+
+# This generates a single file, so FORMATSDEPEND is the full path to
+# the file, rather than to a timeMarker in the same directory.
+syncinc: $(SYNCDEPEND)
+
+$(SYNCDEPEND): $(VKXML) $(GENVK)
+	$(QUIET)$(MKDIR) $(SYNCPATH)
+	$(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(SYNCPATH) syncinc
+
+# This generates a single file containing asciidoc attributes for each
+# core version and extension in the spec being built.
+# For use with Antora, it also includes a couple of document attributes
+# otherwise passed on the asciidoctor command line.
+# These should not use the asciidoctor attribute names (e.g. revnumber,
+# revdate), so use the Makefile variable names instead (e.g.
+# SPECREVISION, SPECDATE).
+
+attribs: $(ATTRIBFILE)
+
+$(ATTRIBFILE):
+	$(QUIET)for attrib in $(VERSIONS) $(EXTS) ; do \
+	    echo ":$${attrib}:" ; \
+	done > $@
+	$(QUIET)(echo ":SPECREVISION: $(SPECREVISION)" ; \
+		 echo ":SPECDATE: $(SPECDATE)" ; \
+		 echo ":SPECREMARK: $(SPECREMARK)" ; \
+		 echo ":APITITLE: $(APITITLE)") >> $@
+
+# Debugging aid - generate all files from registry XML
+generated: $(PYAPIMAP) $(GENDEPENDS)
diff --git a/codegen/vulkan/vulkan-docs-next/README.adoc b/codegen/vulkan/vulkan-docs-next/README.adoc
new file mode 100644
index 0000000..3840a40
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/README.adoc
@@ -0,0 +1,67 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Vulkan^(R)^ and Vulkan^(R)^ SC API Documentation Project
+
+For Vulkan^(R)^ API specific documentation see link:READMEVK.adoc[READMEVK.adoc]
+
+For Vulkan^(R)^ SC API specific documentation see link:READMESC.adoc[READMESC.adoc]
+
+== Directory Structure
+
+The directory structure is as follows:
+
+```
+README.adoc           This file
+READMESC.adoc         Readme for the Vulkan SC specification
+READMEVK.adoc         Readme for the Vulkan specification
+BUILD.adoc            Documents how to build the specifications and reference pages
+CONTRIBUTING.adoc     Requirements for external contributions to the repository
+COPYING.adoc          Copyright and licensing information
+CODE_OF_CONDUCT.adoc  Code of Conduct
+LICENSE.adoc          Summary of licenses used by files in the repository
+ChangeLog.adoc        Change log summary for each public Vulkan spec update
+ChangeLogSC.adoc      Change log summary for each public Vulkan SC spec update
+Makefile, make*       Makefile and helper build scripts (see BUILD.adoc)
+appendices/           Specification appendices
+chapters/             Specification chapters
+proposals/            Design documents for extensions
+config/               Asciidoctor configuration, CSS, and index generator
+images/               Images (figures, diagrams, icons)
+gen/out/              Default directory for the generated documents
+scripts/              Helper scripts used in specification, header, and reference page generation
+style/                Sources for "styleguide" (Vulkan Documentation and Extensions: Procedures and Conventions)
+xml/                  XML API Registry (`vk.xml`) as well as XML for non-Vulkan
+                      data structures used with Video extensions (`video.xml`)
+registry.adoc         Source for documentation of the XML format
+```
+
+
+== Building the Specification and Reference Pages
+
+The document sources are marked up in Asciidoctor format, and we use
+`asciidoctor` and related toolchain components to generate output documents.
+See link:BUILD.adoc[BUILD.adoc] for more information on installing the
+toolchain and building the Specification.
+
+
+== Generating Headers and Related Files
+
+See link:xml/README.adoc[xml/README.adoc].
+
+The header files (`include/vulkan/vulkan*.h`) and many parts of the
+specification and reference page documents are generated from descriptions
+in the XML API Registry (link:xml/vk.xml[`xml/vk.xml`]).
+The generated files are not checked into the repository.
+If you change `vk.xml`, you can regenerate the headers by going into
+`xml/` and running:
+
+    $ make clean install
+
+The other generated files are built as required via dependencies in
+the top-level `Makefile`.
+
diff --git a/codegen/vulkan/vulkan-docs-next/READMESC.adoc b/codegen/vulkan/vulkan-docs-next/READMESC.adoc
new file mode 100644
index 0000000..c48f64e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/READMESC.adoc
@@ -0,0 +1,64 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Vulkan^(R)^ SC API Documentation Project
+
+The link:https://github.com/KhronosGroup/VulkanSC-Docs[VulkanSC-Docs]
+repository (or the equivalent internal Khronos tracking repository)
+contains sources for the formal documentation of the Vulkan SC
+API. This includes:
+
+[options="compact"]
+  * The Vulkan SC API Specification
+  * Specification of API extensions
+  * API reference ("`man`") pages
+  * The XML API Registry (also mirrored at
+    link:https://github.com/KhronosGroup/Vulkan-Headers[Vulkan-Headers] under the `sc_main` branch)
+  * Vulkan SC header files (also mirrored at
+    link:https://github.com/KhronosGroup/Vulkan-Headers[Vulkan-Headers] under the `sc_main` branch)
+  * Related tools and scripts.
+
+The authoritative public repository is located at
+link:https://github.com/KhronosGroup/VulkanSC-Docs[VulkanSC-Docs].
+It hosts a public Issue tracker, and outside developers can file proposed
+changes (Pull Requests) against the Specification, subject to approval by
+Khronos.
+
+Questions and feedback on the Vulkan SC specification can be made using the GitHub
+link:https://github.com/KhronosGroup/VulkanSC-Docs/issues/[Issues]
+and
+link:https://github.com/KhronosGroup/VulkanSC-Docs/discussions[Discussions]
+features on the
+link:https://github.com/KhronosGroup/VulkanSC-Docs/[VulkanSC-Docs]
+repository.
+
+For standard Vulkan (not Vulkan SC) related issues, consult the
+link:https://github.com/KhronosGroup/Vulkan-Web-Registry/blob/main/Vulkan-Projects.adoc[Vulkan-Projects] list on the link:https://github.com/KhronosGroup/Vulkan-Web-Registry[Vulkan-Web-Registry]
+repository.
+
+== External Contributions
+
+Khronos welcomes feedback in GitHub Issues, and proposed changes in GitHub
+Pull Requests (PRs), but will not necessarily accept all such changes.
+
+Please keep your issues and pull requests focused on solving a single
+problem. Broader feedback that tries to solve multiple problems, or touches
+many parts of the Specification at once, is difficult for the Vulkan SC Working
+Group to review in a timely fashion.
+
+
+== Branch Structure
+
+The current Specification is maintained in the default branch (currently
+`sc_main`) of the repository.
+From this branch it is possible to generate Specifications for any published
+version of Vulkan SC, and incorporating any desired set of extensions.
+Each published update is tagged in the form `vksc1.0.*release*` where *release*
+is a constantly incrementing release number and `1.0` is the latest
+published version of the API.
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/READMEVK.adoc b/codegen/vulkan/vulkan-docs-next/READMEVK.adoc
new file mode 100644
index 0000000..91b1d39
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/READMEVK.adoc
@@ -0,0 +1,67 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Vulkan^(R)^ API Documentation Project
+
+The link:https://github.com/KhronosGroup/Vulkan-Docs[Vulkan-Docs]
+repository (or the equivalent internal Khronos tracking repository)
+contains sources for the formal documentation of the Vulkan
+API. This includes:
+
+[options="compact"]
+  * The Vulkan API Specification
+  * Specification of API extensions
+  * API reference ("`man`") pages
+  * The XML API Registry (also mirrored at
+    link:https://github.com/KhronosGroup/Vulkan-Headers[Vulkan-Headers])
+  * Vulkan header files (also mirrored at
+    link:https://github.com/KhronosGroup/Vulkan-Headers[Vulkan-Headers])
+  * Related tools and scripts.
+
+The authoritative public repository is located at
+link:https://github.com/KhronosGroup/Vulkan-Docs/[Vulkan-Docs].
+It hosts a public Issue tracker, and outside developers can file proposed
+changes (Pull Requests) against the Specification, subject to approval by
+Khronos.
+
+If in doubt where to submit your Issue, consult the
+link:https://github.com/KhronosGroup/Vulkan-Web-Registry/blob/main/Vulkan-Projects.adoc[Vulkan-Projects] list on the link:https://github.com/KhronosGroup/Vulkan-Web-Registry[Vulkan-Web-Registry]
+repository.
+
+The Vulkan-Docs repository also includes the sources for the Vulkan SC
+specification in order to simplify the long-term maintenance of the Vulkan SC
+specification. These are not considered normative. The formal sources for
+Vulkan SC can be found as detailed in link:READMESC.adoc[READMESC.adoc]
+
+== External Contributions
+
+Khronos welcomes feedback in GitHub Issues, and proposed changes in GitHub
+Pull Requests (PRs), but will not necessarily accept all such changes.
+
+Please keep your issues and pull requests focused on solving a single
+problem. Broader feedback that tries to solve multiple problems, or touches
+many parts of the Specification at once, is difficult for the Vulkan Working
+Group to review in a timely fashion.
+
+
+== Branch Structure
+
+The current Specification is maintained in the default branch (currently
+`main`) of the repository.
+From this branch it is possible to generate Specifications for any published
+version of Vulkan (1.3, 1.2, 1.1, and 1.0), and incorporating any desired set of
+extensions.
+Each published update is tagged in the form `1.3.*release*` where *release*
+is a constantly incrementing release number and `1.3` is the latest
+published version of the API.
+The last public spec update prior to Vulkan 1.3 is tagged `v1.2.???`.
+
+The last state of the default branch in Khronos' internal GitLab server,
+before 1.3 content was merged into it, is tagged `1.2-archive` (this tag is
+not in GitHub).
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/antora/Makefile b/codegen/vulkan/vulkan-docs-next/antora/Makefile
new file mode 100644
index 0000000..4ee271e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/Makefile
@@ -0,0 +1,75 @@
+# Copyright 2014-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# Configure Vulkan spec Antora tree with generated files and transformed
+# markup files.
+# Branch selection will come later. For now it is the current branch.
+
+RMRF = rm -rf
+
+JSAPIMAP = ./gen/apimap.cjs
+XREFMAPS = $(PYXREFMAP) $(JSXREFMAP)
+PYXREFMAP = antora/xrefMap.py
+JSXREFMAP = antora/xrefMap.cjs
+JSPAGEMAP = antora/modules/ROOT/partials/gen/pageMap.cjs
+
+setup: setup_spec setup_proposals
+
+# Rewrite Vulkan spec sources and images into the module directory, ROOT
+# component
+# Page headers are added to pull in required attributes
+# Also creates apimap.cjs, pageMap.cjs, and xrefMap.cjs for use by the
+# Antora version of the spec macros. They are copied into the Antora
+# playbook repository prior to building the site.
+setup_spec: xrefmaps spec_pages
+
+# Generate the (anchor name -> [ chapter anchor, anchor title ]) maps
+# (xrefMap.py / xrefMap.cjs), and the API information (jsapi /
+# apimap.cjs) from spec HTML
+xrefmaps:
+	$(RMRF) gen
+	./makeSpec QUIET=@ -clean -spec all -genpath gen generated jsapi html
+	scripts/map_html_anchors.py gen/out/html/vkspec.html \
+	    -pyfile $(PYXREFMAP) -jsfile $(JSXREFMAP)
+
+# Rewrite spec sources
+# Individual files must be specified last
+spec_pages:
+	scripts/antora-prep.py \
+	    -root . \
+	    -component $(shell realpath antora/modules/ROOT) \
+	    -xrefpath antora \
+	    -pageHeaders antora/pageHeaders-spec.adoc \
+	    -pagemappath $(JSPAGEMAP) \
+	    ./config/attribs.adoc \
+	    ./config/copyright-ccby.adoc \
+	    ./config/copyright-spec.adoc \
+	    ./images/*.svg \
+	    `find ./gen ./chapters ./appendices -name '[A-Za-z]*.adoc' | grep -v /vulkanscdeviations.adoc` \
+	    $(JSAPIMAP)
+
+# Rewrite proposals into the module directory, 'proposals' component
+# No additional pageHeaders required.
+setup_proposals:
+	scripts/antora-prep.py \
+	    -root . \
+	    -component $(shell realpath antora/modules/proposals) \
+	    -xrefpath antora \
+	    ./images/tile_image.svg \
+	    `find ./proposals -name '[A-Za-z]*.adoc'`
+
+# Files generated by 'setup' target
+ANTORA_GENERATED = \
+	antora/modules/ROOT/images \
+	antora/modules/ROOT/pages/appendices \
+	antora/modules/ROOT/pages/chapters \
+	antora/modules/ROOT/pages/gen \
+	antora/modules/ROOT/partials \
+	antora/modules/proposals/pages/proposals \
+	antora/modules/proposals/partials \
+	antora/modules/proposals/images \
+	$(JSXREFMAP) \
+	$(PYXREFMAP)
+
+clean:
+	$(RMRF) $(ANTORA_GENERATED)
diff --git a/codegen/vulkan/vulkan-docs-next/antora/antora.yml b/codegen/vulkan/vulkan-docs-next/antora/antora.yml
new file mode 100644
index 0000000..1d78700
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/antora.yml
@@ -0,0 +1,23 @@
+# Copyright 2022-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+name: spec
+title: Vulkan Specification and Proposals
+version: latest
+# stem (latexmath) support is provided by the @djencks/asciidoctor-mathjax
+# extension, loaded in the playbook.
+asciidoc:
+  attributes:
+    stem: latexmath
+    config: partial$config
+    chapters: partial$chapters
+    appendices: partial$appendices
+    generated: partial$gen
+    images: image$
+# Not supported for SVG yet - see https://gitlab.com/antora/antora/-/issues/536
+#    imageopts: inline
+    imageopts: ''
+    refprefix: ''
+nav:
+- modules/ROOT/nav.adoc
+- modules/proposals/nav.adoc
diff --git a/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/nav.adoc b/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/nav.adoc
new file mode 100644
index 0000000..64e25f2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/nav.adoc
@@ -0,0 +1,76 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Navigation page for Vulkan spec in Antora
+
+// This corresponds to ../vkspec.adoc - each top-level chapter is referenced
+// below in the same order
+
+:test: 0
+ifeval::["{test}"=="0"]
+* xref:chapters/introduction.adoc[]
+* xref:chapters/fundamentals.adoc[]
+* xref:chapters/initialization.adoc[]
+* xref:chapters/devsandqueues.adoc[]
+* xref:chapters/cmdbuffers.adoc[]
+* xref:chapters/synchronization.adoc[]
+* xref:chapters/renderpass.adoc[]
+* xref:chapters/shaders.adoc[]
+* xref:chapters/pipelines.adoc[]
+* xref:chapters/memory.adoc[]
+* xref:chapters/resources.adoc[]
+* xref:chapters/samplers.adoc[]
+* xref:chapters/descriptorsets.adoc[]
+* xref:chapters/interfaces.adoc[]
+* xref:chapters/textures.adoc[]
+* xref:chapters/fragmentdensitymapops.adoc[]
+* xref:chapters/queries.adoc[]
+* xref:chapters/clears.adoc[]
+* xref:chapters/copies.adoc[]
+* xref:chapters/drawing.adoc[]
+* xref:chapters/fxvertex.adoc[]
+* xref:chapters/tessellation.adoc[]
+* xref:chapters/geometry.adoc[]
+* xref:chapters/VK_NV_mesh_shader/mesh.adoc[]
+* xref:chapters/VK_HUAWEI_cluster_culling_shader/clusterculling.adoc[]
+* xref:chapters/vertexpostproc.adoc[]
+* xref:chapters/primsrast.adoc[]
+* xref:chapters/fragops.adoc[]
+* xref:chapters/framebuffer.adoc[]
+* xref:chapters/dispatch.adoc[]
+* xref:chapters/VK_NV_device_generated_commands/generatedcommands.adoc[]
+* xref:chapters/sparsemem.adoc[]
+* xref:chapters/VK_KHR_surface/wsi.adoc[]
+* xref:chapters/VK_KHR_deferred_host_operations/deferred_host_operations.adoc[]
+* xref:chapters/VK_EXT_private_data.adoc[]
+* xref:chapters/accelstructures.adoc[]
+* xref:chapters/VK_EXT_opacity_micromap/micromaps.adoc[]
+* xref:chapters/raytraversal.adoc[]
+* xref:chapters/raytracing.adoc[]
+* xref:chapters/VK_NV_memory_decompression.adoc[]
+* xref:chapters/video_extensions.adoc[]
+* xref:chapters/VK_NV_optical_flow/optical_flow.adoc[]
+* xref:chapters/executiongraphs.adoc[]
+* xref:chapters/VK_NV_low_latency2/low_latency2.adoc[]
+* xref:chapters/extensions.adoc[]
+* xref:chapters/features.adoc[]
+* xref:chapters/limits.adoc[]
+* xref:chapters/formats.adoc[]
+* xref:chapters/capabilities.adoc[]
+* xref:chapters/debugging.adoc[]
+* xref:appendices/spirvenv.adoc[]
+* xref:appendices/memorymodel.adoc[]
+* xref:appendices/compressedtex.adoc[]
+* xref:appendices/versions.adoc[]
+* xref:appendices/extensions.adoc[]
+* xref:appendices/roadmap.adoc[]
+* xref:appendices/boilerplate.adoc[]
+* xref:appendices/invariance.adoc[]
+* xref:appendices/glossary.adoc[]
+* xref:appendices/credits.adoc[]
+endif::[]
+
+ifeval::["{test}"=="1"]
+// * xref:appendices/extensions.adoc[]
+* xref:appendices/memorymodel.adoc[]
+endif::[]
diff --git a/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/pages/index.adoc b/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/pages/index.adoc
new file mode 100644
index 0000000..6afe263
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/modules/ROOT/pages/index.adoc
@@ -0,0 +1,44 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan Documentation
+
+include::{config}/attribs.adoc[]
+include::{generated}/specattribs.adoc[]
+
+== About
+
+link:https://docs.vulkan.org/[This site] gathers together several key
+Vulkan documents including specifications, guides, tutorials and samples
+into a single site allowing for easy cross-searching and cross-linking
+across documents to help navigate quickly to the information you need
+for developing Vulkan-based applications.
+
+For more details about and resources for using the Vulkan graphics API,
+see the Vulkan developer website at https://vulkan.org .
+
+This build of the site includes the Vulkan {SPECREVISION} API specification
+{APITITLE}, generated on {SPECDATE} {SPECREMARK}.
+
+== Navigation
+
+The left sidebar links to pages in the current spec.
+Proposals are available at the bottom of the sidebar links for the spec.
+
+The right sidebar is sections within the current page.
+
+The bottom-left button switches between the various documentation modules and specs.
+
+The top contains a text searchbar.
+It will suggest matches to search terms found in all the modules of the
+site.
+
+== Site Information
+
+link:https://docs.vulkan.org/[This site] is generated using the
+link:https://docs.antora.org/[Antora] static site generator.
+
+If you need to report a problem or build the site yourself, start with
+the
+link:https://github.com/KhronosGroup/Vulkan-Site/[Vulkan-Site]
+repository on GitHub.
diff --git a/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/nav.adoc b/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/nav.adoc
new file mode 100644
index 0000000..c7b27e0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/nav.adoc
@@ -0,0 +1,31 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+:chapters:
+
+* xref:index.adoc[Vulkan Proposals]
+* Vulkan Roadmap
+** xref:proposals/Roadmap.adoc[]
+* Extension Proposals
+** xref:proposals/VK_AMD_shader_early_and_late_fragment_tests.adoc[]
+** xref:proposals/VK_EXT_attachment_feedback_loop_layout.adoc[]
+** xref:proposals/VK_EXT_graphics_pipeline_library.adoc[]
+** xref:proposals/VK_EXT_image_2d_array_of_3d.adoc[]
+** xref:proposals/VK_EXT_image_compression_control.adoc[]
+** xref:proposals/VK_EXT_metal_objects.adoc[]
+** xref:proposals/VK_EXT_multisampled_render_to_single_sampled.adoc[]
+** xref:proposals/VK_EXT_non_seamless_cube_map.adoc[]
+** xref:proposals/VK_EXT_primitives_generated_query.adoc[]
+** xref:proposals/VK_EXT_rasterization_order_attachment_access.adoc[]
+** xref:proposals/VK_EXT_shader_module_identifier.adoc[]
+** xref:proposals/VK_EXT_subpass_merge_feedback.adoc[]
+** xref:proposals/VK_GOOGLE_surfaceless_query.adoc[]
+** xref:proposals/VK_HUAWEI_invocation_mask.adoc[]
+** xref:proposals/VK_KHR_dynamic_rendering.adoc[]
+** xref:proposals/VK_KHR_fragment_shader_barycentric.adoc[]
+** xref:proposals/VK_KHR_fragment_shading_rate.adoc[]
+** xref:proposals/VK_KHR_shader_integer_dot_product.adoc[]
+** xref:proposals/VK_QCOM_image_processing.adoc[]
+** xref:proposals/VK_QCOM_tile_properties.adoc[]
+* Extension Proposal Template
+** xref:proposals/template.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/pages/index.adoc b/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/pages/index.adoc
new file mode 100644
index 0000000..ac0a202
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/modules/proposals/pages/index.adoc
@@ -0,0 +1,19 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan Proposals Start Page
+
+These documents describe the Vulkan Roadmap, the Vulkan 2022 Profile
+Roadmap, and some preliminary extension proposals.
+
+== Navigation
+
+This is modules/proposals/pages/index.adoc in the Vulkan 'spec' antora tree.
+It is the start page for the Proposals module.
+
+This is a crosslink to the xref:spec::index.adoc[Vulkan Specification] main
+page.
+
+This is a crosslink to the xref:guide::enabling_extensions.adoc[Enabling
+Extensions] page in the Vulkan Guide.
+
diff --git a/codegen/vulkan/vulkan-docs-next/antora/pageHeaders-spec.adoc b/codegen/vulkan/vulkan-docs-next/antora/pageHeaders-spec.adoc
new file mode 100644
index 0000000..9715d9d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/pageHeaders-spec.adoc
@@ -0,0 +1,7 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Boilerplate to include in spec pages.
+include::{config}/attribs.adoc[]
+
+include::{generated}/specattribs.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/antora/setup_vulkan b/codegen/vulkan/vulkan-docs-next/antora/setup_vulkan
new file mode 100755
index 0000000..43365b9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/antora/setup_vulkan
@@ -0,0 +1,57 @@
+#!/bin/bash
+# Copyright 2014-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# setup_vulkan - configure Vulkan spec antora tree with generated files
+
+vkspec=/home/tree/git/vulkan
+
+cd $vkspec
+
+# Branch selection may come later. For now, use the current branch
+# git checkout antora
+
+set -x
+
+if true ; then
+    # Generate intermediate files (for rewriting) and HTML target (for
+    #scanning anchors)
+    makeSpec QUIET=@ -clean -spec all \
+       -genpath gen \
+       generated jsapi html
+
+    # Generate the map (anchor name -> [ chapter anchor, anchor title ]
+    # (xrefMap.py / xrefMap.cjs) from spec HTML
+    scripts/map_html_anchors.py gen/out/html/vkspec.html -pyfile antora/xrefMap.py -jsfile antora/xrefMap.cjs
+fi
+
+# Rewrite spec sources and images into module directory
+
+# Module directory
+dir=modules
+
+# ROOT component - Vulkan spec
+# Page headers are added to pull in required attributes
+# Also creates pageMap.cjs for use by the Antora version of the spec macros
+component=$vkspec/antora/${dir}/ROOT
+scripts/antora-prep.py \
+    -root . \
+    -component $component \
+    -xrefpath antora \
+    -pageHeaders antora/pageHeaders-spec.adoc \
+    -pagemappath antora/modules/ROOT/partials/gen/pageMap.cjs \
+    ./config/attribs.adoc \
+    ./config/copyright-ccby.adoc \
+    ./config/copyright-spec.adoc \
+    ./images/*.svg \
+    `find ./gen ./chapters ./appendices -name '[A-Za-z]*.adoc'` \
+    ./gen/apimap.cjs
+
+# proposals component - Vulkan extension proposals
+# No pageHeaders required.
+component=$vkspec/antora/${dir}/proposals
+scripts/antora-prep.py \
+    -root . \
+    -component $component \
+    -xrefpath antora \
+    `find ./proposals -name '[A-Za-z]*.adoc'`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMDX_shader_enqueue.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMDX_shader_enqueue.adoc
new file mode 100644
index 0000000..09c2eb3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMDX_shader_enqueue.adoc
@@ -0,0 +1,44 @@
+// Copyright 2017-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMDX_shader_enqueue.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-07-22
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMDX_shader_enqueue.html[`SPV_AMDX_shader_enqueue`].
+
+*Provisional*::
+
+*This extension is _provisional_ and should: not be used in production
+applications.
+The functionality may: change in ways that break backwards compatibility
+between revisions, and before final release.*
+
+*Contributors*::
+  - Tobias Hector, AMD
+  - Matthaeus Chajdas, AMD
+  - Maciej Jesionowski, AMD
+  - Robert Martin, AMD
+  - Qun Lin, AMD
+  - Rex Xu, AMD
+  - Dominik Witczak, AMD
+  - Karthik Srinivasan, AMD
+  - Nicolai Haehnle, AMD
+  - Stuart Smith, AMD
+
+=== Description
+
+This extension adds the ability for developers to enqueue compute shader
+workgroups from other compute shaders.
+
+include::{generated}/interfaces/VK_AMDX_shader_enqueue.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-07-22 (Tobias Hector)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_buffer_marker.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_buffer_marker.adoc
new file mode 100644
index 0000000..c985761
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_buffer_marker.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_buffer_marker.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-01-26
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Jaakko Konttinen, AMD
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension adds a new operation to execute pipelined writes of small
+marker values into a sname:VkBuffer object.
+
+The primary purpose of these markers is to facilitate the development of
+debugging tools for tracking which pipelined command contributed to device
+loss.
+
+include::{generated}/interfaces/VK_AMD_buffer_marker.adoc[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-01-26 (Jaakko Konttinen)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_device_coherent_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_device_coherent_memory.adoc
new file mode 100644
index 0000000..edf8e99
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_device_coherent_memory.adoc
@@ -0,0 +1,33 @@
+// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_device_coherent_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-02-04
+*Contributors*::
+  - Ping Fu, AMD
+  - Timothy Lottes, AMD
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension adds the device coherent and device uncached memory types.
+Any device accesses to device coherent memory are automatically made visible
+to any other device access.
+Device uncached memory indicates to applications that caches are disabled
+for a particular memory type, which guarantees device coherence.
+
+Device coherent and uncached memory are expected to have lower performance
+for general access than non-device coherent memory, but can be useful in
+certain scenarios; particularly so for debugging.
+
+include::{generated}/interfaces/VK_AMD_device_coherent_memory.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-02-04 (Tobias Hector)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_display_native_hdr.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_display_native_hdr.adoc
new file mode 100644
index 0000000..e938777
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_display_native_hdr.adoc
@@ -0,0 +1,45 @@
+// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_display_native_hdr.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-18
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Aaron Hagan, AMD
+  - Aric Cyr, AMD
+  - Timothy Lottes, AMD
+  - Derrick Owens, AMD
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension introduces the following display native HDR features to
+Vulkan:
+
+  * A new elink:VkColorSpaceKHR enum for setting the native display color
+    space.
+    For example, this color space would be set by the swapchain to use the
+    native color space in Freesync2 displays.
+  * Local dimming control
+
+include::{generated}/interfaces/VK_AMD_display_native_hdr.adoc[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-12-18 (Daniel Rakos)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_draw_indirect_count.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_draw_indirect_count.adoc
new file mode 100644
index 0000000..1cbeb0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_draw_indirect_count.adoc
@@ -0,0 +1,43 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_draw_indirect_count.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-23
+*Interactions and External Dependencies*::
+  - Promoted to `apiext:VK_KHR_draw_indirect_count`
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Derrick Owens, AMD
+  - Graham Sellers, AMD
+  - Daniel Rakos, AMD
+  - Dominik Witczak, AMD
+
+=== Description
+
+This extension allows an application to source the number of draws for
+indirect drawing commands from a buffer.
+This enables applications to generate an arbitrary number of drawing
+commands and execute them without host intervention.
+
+=== Promotion to `VK_KHR_draw_indirect_count`
+
+All functionality in this extension is included in
+`apiext:VK_KHR_draw_indirect_count`, with the suffix changed to KHR.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_AMD_draw_indirect_count.adoc[]
+
+=== Version History
+
+  * Revision 2, 2016-08-23 (Dominik Witczak)
+  ** Minor fixes
+  * Revision 1, 2016-07-21 (Matthaeus Chajdas)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gcn_shader.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gcn_shader.adoc
new file mode 100644
index 0000000..d0aece0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gcn_shader.adoc
@@ -0,0 +1,35 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_gcn_shader.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-05-30
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_gcn_shader.html[`SPV_AMD_gcn_shader`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_gcn_shader.txt[`GL_AMD_gcn_shader`]
+*Contributors*::
+  - Dominik Witczak, AMD
+  - Daniel Rakos, AMD
+  - Rex Xu, AMD
+  - Graham Sellers, AMD
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/AMD/SPV_AMD_gcn_shader.html[`SPV_AMD_gcn_shader`]
+
+include::{generated}/interfaces/VK_AMD_gcn_shader.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-05-30 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_half_float.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_half_float.adoc
new file mode 100644
index 0000000..dcbb239
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_half_float.adoc
@@ -0,0 +1,44 @@
+// Copyright (c) 2016-2019 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_gpu_shader_half_float.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-11
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_gpu_shader_half_float.html[`SPV_AMD_gpu_shader_half_float`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_gpu_shader_half_float.txt[`GL_AMD_gpu_shader_half_float`]
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Dominik Witczak, AMD
+  - Donglin Wei, AMD
+  - Graham Sellers, AMD
+  - Qun Lin, AMD
+  - Rex Xu, AMD
+
+=== Description
+
+This extension adds support for using half float variables in shaders.
+
+=== Deprecation by `VK_KHR_shader_float16_int8`
+
+Functionality in this extension was included in
+`apiext:VK_KHR_shader_float16_int8` extension, when
+slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR::pname:shaderFloat16 is
+enabled.
+
+include::{generated}/interfaces/VK_AMD_gpu_shader_half_float.adoc[]
+
+=== Version History
+
+  * Revision 2, 2019-04-11 (Tobias Hector)
+  ** Marked as deprecated
+  * Revision 1, 2016-09-21 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_int16.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_int16.adoc
new file mode 100644
index 0000000..39d708f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_gpu_shader_int16.adoc
@@ -0,0 +1,45 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_gpu_shader_int16.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-11
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_gpu_shader_int16.html[`SPV_AMD_gpu_shader_int16`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_gpu_shader_int16.txt[`GL_AMD_gpu_shader_int16`]
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Dominik Witczak, AMD
+  - Matthaeus G. Chajdas, AMD
+  - Rex Xu, AMD
+  - Timothy Lottes, AMD
+  - Zhi Cai, AMD
+
+=== Description
+
+This extension adds support for using 16-bit integer variables in shaders.
+
+=== Deprecation by `VK_KHR_shader_float16_int8`
+
+Functionality in this extension was included in
+`apiext:VK_KHR_shader_float16_int8` extension, when
+slink:VkPhysicalDeviceFeatures::pname:shaderInt16 and
+slink:VkPhysicalDeviceShaderFloat16Int8FeaturesKHR::pname:shaderFloat16 are
+enabled.
+
+include::{generated}/interfaces/VK_AMD_gpu_shader_int16.adoc[]
+
+=== Version History
+
+  * Revision 2, 2019-04-11 (Tobias Hector)
+  ** Marked as deprecated
+  * Revision 1, 2017-06-18 (Dominik Witczak)
+  ** First version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_memory_overallocation_behavior.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_memory_overallocation_behavior.adoc
new file mode 100644
index 0000000..3649a89
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_memory_overallocation_behavior.adoc
@@ -0,0 +1,32 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_memory_overallocation_behavior.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-09-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Martin Dinkov, AMD
+  - Matthaeus Chajdas, AMD
+  - Daniel Rakos, AMD
+  - Jon Campbell, AMD
+
+=== Description
+
+This extension allows controlling whether explicit overallocation beyond the
+device memory heap sizes (reported by
+slink:VkPhysicalDeviceMemoryProperties) is allowed or not.
+Overallocation may lead to performance loss and is not supported for all
+platforms.
+
+include::{generated}/interfaces/VK_AMD_memory_overallocation_behavior.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-09-19 (Martin Dinkov)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_mixed_attachment_samples.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_mixed_attachment_samples.adoc
new file mode 100644
index 0000000..52937bf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_mixed_attachment_samples.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_mixed_attachment_samples.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-07-24
+*Contributors*::
+  - Mais Alnasser, AMD
+  - Matthaeus G. Chajdas, AMD
+  - Maciej Jesionowski, AMD
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension enables applications to use multisampled rendering with a
+depth/stencil sample count that is larger than the color sample count.
+Having a depth/stencil sample count larger than the color sample count
+allows maintaining geometry and coverage information at a higher sample rate
+than color information.
+All samples are depth/stencil tested, but only the first color sample count
+number of samples get a corresponding color output.
+
+include::{generated}/interfaces/VK_AMD_mixed_attachment_samples.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2017-07-24 (Daniel Rakos)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_negative_viewport_height.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_negative_viewport_height.adoc
new file mode 100644
index 0000000..29c9198
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_negative_viewport_height.adoc
@@ -0,0 +1,42 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_negative_viewport_height.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-09-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Graham Sellers, AMD
+  - Baldur Karlsson
+
+=== Description
+
+This extension allows an application to specify a negative viewport height.
+The result is that the viewport transformation will flip along the y-axis.
+
+  * Allow negative height to be specified in the
+    slink:VkViewport::pname:height field to perform y-inversion of the
+    clip-space to framebuffer-space transform.
+    This allows apps to avoid having to use `gl_Position.y = -gl_Position.y`
+    in shaders also targeting other APIs.
+
+=== Obsoletion by `VK_KHR_maintenance1` and Vulkan 1.1
+
+Functionality in this extension is included in `VK_KHR_maintenance1` and
+subsequently Vulkan 1.1.
+Due to some slight behavioral differences, this extension must: not be
+enabled alongside `VK_KHR_maintenance1`, or in an instance created with
+version 1.1 or later requested in slink:VkApplicationInfo::pname:apiVersion.
+
+include::{generated}/interfaces/VK_AMD_negative_viewport_height.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-09-02 (Matthaeus Chajdas)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_pipeline_compiler_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_pipeline_compiler_control.adoc
new file mode 100644
index 0000000..8413bb9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_pipeline_compiler_control.adoc
@@ -0,0 +1,38 @@
+// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_pipeline_compiler_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-07-26
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Daniel Rakos, AMD
+  - Maciej Jesionowski, AMD
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension introduces slink:VkPipelineCompilerControlCreateInfoAMD
+structure that can be chained to a pipeline's creation information to
+specify additional flags that affect pipeline compilation.
+
+include::{generated}/interfaces/VK_AMD_pipeline_compiler_control.adoc[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2019-07-26 (Tobias Hector)
+  ** Initial revision.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_rasterization_order.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_rasterization_order.adoc
new file mode 100644
index 0000000..672c27e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_rasterization_order.adoc
@@ -0,0 +1,98 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_rasterization_order.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-04-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Jaakko Konttinen, AMD
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Dominik Witczak, AMD
+
+=== Description
+
+This extension introduces the possibility for the application to control the
+order of primitive rasterization.
+In unextended Vulkan, the following stages are guaranteed to execute in _API
+order_:
+
+  * depth bounds test
+  * stencil test, stencil op, and stencil write
+  * depth test and depth write
+  * occlusion queries
+  * blending, logic op, and color write
+
+This extension enables applications to opt into a relaxed, implementation
+defined primitive rasterization order that may allow better parallel
+processing of primitives and thus enabling higher primitive throughput.
+It is applicable in cases where the primitive rasterization order is known
+to not affect the output of the rendering or any differences caused by a
+different rasterization order are not a concern from the point of view of
+the application's purpose.
+
+A few examples of cases when using the relaxed primitive rasterization order
+would not have an effect on the final rendering:
+
+  * If the primitives rendered are known to not overlap in framebuffer
+    space.
+  * If depth testing is used with a comparison operator of
+    ename:VK_COMPARE_OP_LESS, ename:VK_COMPARE_OP_LESS_OR_EQUAL,
+    ename:VK_COMPARE_OP_GREATER, or ename:VK_COMPARE_OP_GREATER_OR_EQUAL,
+    and the primitives rendered are known to not overlap in clip space.
+  * If depth testing is not used and blending is enabled for all attachments
+    with a commutative blend operator.
+
+include::{generated}/interfaces/VK_AMD_rasterization_order.adoc[]
+
+=== Issues
+
+1) How is this extension useful to application developers?
+
+*RESOLVED*: Allows them to increase primitive throughput for cases when
+strict API order rasterization is not important due to the nature of the
+content, the configuration used, or the requirements towards the output of
+the rendering.
+
+2) How does this extension interact with content optimizations aiming to
+reduce overdraw by appropriately ordering the input primitives?
+
+*RESOLVED*: While the relaxed rasterization order might somewhat limit the
+effectiveness of such content optimizations, most of the benefits of it are
+expected to be retained even when the relaxed rasterization order is used,
+so applications should: still apply these optimizations even if they intend
+to use the extension.
+
+3) Are there any guarantees about the primitive rasterization order when
+using the new relaxed mode?
+
+*RESOLVED*: No.
+In this case the rasterization order is completely implementation-dependent,
+but in practice it is expected to partially still follow the order of
+incoming primitives.
+
+4) Does the new relaxed rasterization order have any adverse effect on
+repeatability and other invariance rules of the API?
+
+*RESOLVED*: Yes, in the sense that it extends the list of exceptions when
+the repeatability requirement does not apply.
+
+=== Examples
+
+None
+
+=== Issues
+
+None
+
+=== Version History
+
+  * Revision 1, 2016-04-25 (Daniel Rakos)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_ballot.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_ballot.adoc
new file mode 100644
index 0000000..55ba92d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_ballot.adoc
@@ -0,0 +1,37 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_ballot.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-09-19
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_ballot.html[`SPV_AMD_shader_ballot`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_shader_ballot.txt[`GL_AMD_shader_ballot`]
+*Contributors*::
+  - Qun Lin, AMD
+  - Graham Sellers, AMD
+  - Daniel Rakos, AMD
+  - Rex Xu, AMD
+  - Dominik Witczak, AMD
+  - Matthäus G. Chajdas, AMD
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/AMD/SPV_AMD_shader_ballot.html[`SPV_AMD_shader_ballot`]
+
+include::{generated}/interfaces/VK_AMD_shader_ballot.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-09-19 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties.adoc
new file mode 100644
index 0000000..1eb2fda
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties.adoc
@@ -0,0 +1,99 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_core_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Martin Dinkov, AMD
+  - Matthaeus G. Chajdas, AMD
+
+=== Description
+
+This extension exposes shader core properties for a target physical device
+through the `apiext:VK_KHR_get_physical_device_properties2` extension.
+Please refer to the example below for proper usage.
+
+include::{generated}/interfaces/VK_AMD_shader_core_properties.adoc[]
+
+=== Examples
+
+This example retrieves the shader core properties for a physical device.
+
+[source,c++]
+----
+extern VkInstance       instance;
+
+PFN_vkGetPhysicalDeviceProperties2 pfnVkGetPhysicalDeviceProperties2 =
+    reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>
+    (vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2") );
+
+VkPhysicalDeviceProperties2             general_props;
+VkPhysicalDeviceShaderCorePropertiesAMD shader_core_properties;
+
+shader_core_properties.pNext = nullptr;
+shader_core_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD;
+
+general_props.pNext = &shader_core_properties;
+general_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
+
+// After this call, shader_core_properties has been populated
+pfnVkGetPhysicalDeviceProperties2(device, &general_props);
+
+printf("Number of shader engines: %d\n",
+    m_shader_core_properties.shader_engine_count =
+    shader_core_properties.shaderEngineCount;
+printf("Number of shader arrays: %d\n",
+    m_shader_core_properties.shader_arrays_per_engine_count =
+    shader_core_properties.shaderArraysPerEngineCount;
+printf("Number of CUs per shader array: %d\n",
+    m_shader_core_properties.compute_units_per_shader_array =
+    shader_core_properties.computeUnitsPerShaderArray;
+printf("Number of SIMDs per compute unit: %d\n",
+    m_shader_core_properties.simd_per_compute_unit =
+    shader_core_properties.simdPerComputeUnit;
+printf("Number of wavefront slots in each SIMD: %d\n",
+    m_shader_core_properties.wavefronts_per_simd =
+    shader_core_properties.wavefrontsPerSimd;
+printf("Number of threads per wavefront: %d\n",
+    m_shader_core_properties.wavefront_size =
+    shader_core_properties.wavefrontSize;
+printf("Number of physical SGPRs per SIMD: %d\n",
+    m_shader_core_properties.sgprs_per_simd =
+    shader_core_properties.sgprsPerSimd;
+printf("Minimum number of SGPRs that can be allocated by a wave: %d\n",
+    m_shader_core_properties.min_sgpr_allocation =
+    shader_core_properties.minSgprAllocation;
+printf("Number of available SGPRs: %d\n",
+    m_shader_core_properties.max_sgpr_allocation =
+    shader_core_properties.maxSgprAllocation;
+printf("SGPRs are allocated in groups of this size: %d\n",
+    m_shader_core_properties.sgpr_allocation_granularity =
+    shader_core_properties.sgprAllocationGranularity;
+printf("Number of physical VGPRs per SIMD: %d\n",
+    m_shader_core_properties.vgprs_per_simd =
+    shader_core_properties.vgprsPerSimd;
+printf("Minimum number of VGPRs that can be allocated by a wave: %d\n",
+    m_shader_core_properties.min_vgpr_allocation =
+    shader_core_properties.minVgprAllocation;
+printf("Number of available VGPRs: %d\n",
+    m_shader_core_properties.max_vgpr_allocation =
+    shader_core_properties.maxVgprAllocation;
+printf("VGPRs are allocated in groups of this size: %d\n",
+    m_shader_core_properties.vgpr_allocation_granularity =
+    shader_core_properties.vgprAllocationGranularity;
+----
+
+
+=== Version History
+
+  * Revision 2, 2019-06-25 (Matthaeus G. Chajdas)
+  ** Clarified the meaning of a few fields.
+  * Revision 1, 2018-02-15 (Martin Dinkov)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties2.adoc
new file mode 100644
index 0000000..5abc315
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_core_properties2.adoc
@@ -0,0 +1,32 @@
+// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_core_properties2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-07-26
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension exposes additional shader core properties for a target
+physical device through the `apiext:VK_KHR_get_physical_device_properties2`
+extension.
+
+include::{generated}/interfaces/VK_AMD_shader_core_properties2.adoc[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2019-07-26 (Matthaeus G. Chajdas)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_early_and_late_fragment_tests.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_early_and_late_fragment_tests.adoc
new file mode 100644
index 0000000..b6aa3ac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_early_and_late_fragment_tests.adoc
@@ -0,0 +1,37 @@
+// Copyright (c) 2021 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_early_and_late_fragment_tests.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-14
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_early_and_late_fragment_tests.html[`SPV_AMD_shader_early_and_late_fragment_tests`]
+  - This extension interacts with `apiext:VK_EXT_shader_stencil_export`
+*Contributors*::
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension adds support for the
+{spirv}/AMD/SPV_AMD_shader_early_and_late_fragment_tests.html[`SPV_AMD_shader_early_and_late_fragment_tests`]
+extension, allowing shaders to explicitly opt in to allowing both early
+_and_ late fragment tests with the code:EarlyAndLateFragmentTestsAMD
+execution mode.
+
+ifdef::VK_EXT_shader_stencil_export[]
+If `apiext:VK_EXT_shader_stencil_export` is supported, additional execution
+modes allowing early depth tests similar to code:DepthUnchanged,
+code:DepthLess, and code:DepthGreater are provided.
+endif::VK_EXT_shader_stencil_export[]
+
+include::{generated}/interfaces/VK_AMD_shader_early_and_late_fragment_tests.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-09-14 (Tobias Hector)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_explicit_vertex_parameter.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_explicit_vertex_parameter.adoc
new file mode 100644
index 0000000..996cfc5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_explicit_vertex_parameter.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_explicit_vertex_parameter.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-05-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[`SPV_AMD_shader_explicit_vertex_parameter`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_shader_explicit_vertex_parameter.txt[`GL_AMD_shader_explicit_vertex_parameter`]
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Qun Lin, AMD
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Rex Xu, AMD
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[`SPV_AMD_shader_explicit_vertex_parameter`]
+
+include::{generated}/interfaces/VK_AMD_shader_explicit_vertex_parameter.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-05-10 (Daniel Rakos)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_fragment_mask.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_fragment_mask.adoc
new file mode 100644
index 0000000..714609b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_fragment_mask.adoc
@@ -0,0 +1,89 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_fragment_mask.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-16
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_fragment_mask.html[`SPV_AMD_shader_fragment_mask`]
+  - This extension provides API support for
+    {GLSLregistry}/amd/GL_AMD_shader_fragment_mask.txt[`GL_AMD_shader_fragment_mask`]
+*Contributors*::
+  - Aaron Hagan, AMD
+  - Daniel Rakos, AMD
+  - Timothy Lottes, AMD
+
+=== Description
+
+This extension provides efficient read access to the fragment mask in
+compressed multisampled color surfaces.
+The fragment mask is a lookup table that associates color samples with color
+fragment values.
+
+From a shader, the fragment mask can be fetched with a call to
+code:fragmentMaskFetchAMD, which returns a single code:uint where each
+subsequent four bits specify the color fragment index corresponding to the
+color sample, starting from the least significant bit.
+For example, when eight color samples are used, the color fragment index for
+color sample 0 will be in bits 0-3 of the fragment mask, for color sample 7
+the index will be in bits 28-31.
+
+The color fragment for a particular color sample may then be fetched with
+the corresponding fragment mask value using the code:fragmentFetchAMD shader
+function.
+
+include::{generated}/interfaces/VK_AMD_shader_fragment_mask.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentMaskAMD, code:FragmentMaskAMD>>
+
+=== Examples
+
+This example shows a shader that queries the fragment mask from a
+multisampled compressed surface and uses it to query fragment values.
+
+[source,c++]
+----
+#version 450 core
+
+#extension GL_AMD_shader_fragment_mask: enable
+
+layout(binding = 0) uniform sampler2DMS       s2DMS;
+layout(binding = 1) uniform isampler2DMSArray is2DMSArray;
+
+layout(binding = 2, input_attachment_index = 0) uniform usubpassInputMS usubpassMS;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+    vec4 fragOne = vec4(0.0);
+
+    uint fragMask = fragmentMaskFetchAMD(s2DMS, ivec2(2, 3));
+    uint fragIndex = (fragMask & 0xF0) >> 4;
+    fragOne += fragmentFetchAMD(s2DMS, ivec2(2, 3), 1);
+
+    fragMask = fragmentMaskFetchAMD(is2DMSArray, ivec3(2, 3, 1));
+    fragIndex = (fragMask & 0xF0) >> 4;
+    fragOne += fragmentFetchAMD(is2DMSArray, ivec3(2, 3, 1), fragIndex);
+
+    fragMask = fragmentMaskFetchAMD(usubpassMS);
+    fragIndex = (fragMask & 0xF0) >> 4;
+    fragOne += fragmentFetchAMD(usubpassMS, fragIndex);
+
+    fragColor = fragOne;
+}
+----
+
+=== Version History
+
+  * Revision 1, 2017-08-16 (Aaron Hagan)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_image_load_store_lod.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_image_load_store_lod.adoc
new file mode 100644
index 0000000..e241481
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_image_load_store_lod.adoc
@@ -0,0 +1,34 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_image_load_store_lod.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-21
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_shader_image_load_store_lod.txt[`GL_AMD_shader_image_load_store_lod`]
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Dominik Witczak, AMD
+  - Qun Lin, AMD
+  - Rex Xu, AMD
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
+
+include::{generated}/interfaces/VK_AMD_shader_image_load_store_lod.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-08-21 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_info.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_info.adoc
new file mode 100644
index 0000000..ef7828a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_info.adoc
@@ -0,0 +1,98 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_info.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jaakko Konttinen, AMD
+
+=== Description
+
+This extension adds a way to query certain information about a compiled
+shader which is part of a pipeline.
+This information may include shader disassembly, shader binary and various
+statistics about a shader's resource usage.
+
+While this extension provides a mechanism for extracting this information,
+the details regarding the contents or format of this information are not
+specified by this extension and may be provided by the vendor externally.
+
+Furthermore, all information types are optionally supported, and users
+should not assume every implementation supports querying every type of
+information.
+
+include::{generated}/interfaces/VK_AMD_shader_info.adoc[]
+
+=== Examples
+
+This example extracts the register usage of a fragment shader within a
+particular graphics pipeline:
+
+[source,c++]
+----
+extern VkDevice device;
+extern VkPipeline gfxPipeline;
+
+PFN_vkGetShaderInfoAMD pfnGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)vkGetDeviceProcAddr(
+    device, "vkGetShaderInfoAMD");
+
+VkShaderStatisticsInfoAMD statistics = {};
+
+size_t dataSize = sizeof(statistics);
+
+if (pfnGetShaderInfoAMD(device,
+    gfxPipeline,
+    VK_SHADER_STAGE_FRAGMENT_BIT,
+    VK_SHADER_INFO_TYPE_STATISTICS_AMD,
+    &dataSize,
+    &statistics) == VK_SUCCESS)
+{
+    printf("VGPR usage: %d\n", statistics.resourceUsage.numUsedVgprs);
+    printf("SGPR usage: %d\n", statistics.resourceUsage.numUsedSgprs);
+}
+----
+
+The following example continues the previous example by subsequently
+attempting to query and print shader disassembly about the fragment shader:
+
+[source,c++]
+----
+// Query disassembly size (if available)
+if (pfnGetShaderInfoAMD(device,
+    gfxPipeline,
+    VK_SHADER_STAGE_FRAGMENT_BIT,
+    VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
+    &dataSize,
+    nullptr) == VK_SUCCESS)
+{
+    printf("Fragment shader disassembly:\n");
+
+    void* disassembly = malloc(dataSize);
+
+    // Query disassembly and print
+    if (pfnGetShaderInfoAMD(device,
+        gfxPipeline,
+        VK_SHADER_STAGE_FRAGMENT_BIT,
+        VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD,
+        &dataSize,
+        disassembly) == VK_SUCCESS)
+    {
+        printf((char*)disassembly);
+    }
+
+    free(disassembly);
+}
+----
+
+
+=== Version History
+
+  * Revision 1, 2017-10-09 (Jaakko Konttinen)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_trinary_minmax.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_trinary_minmax.adoc
new file mode 100644
index 0000000..e0264ae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_shader_trinary_minmax.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_trinary_minmax.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-05-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_shader_trinary_minmax.html[`SPV_AMD_shader_trinary_minmax`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_shader_trinary_minmax.txt[`GL_AMD_shader_trinary_minmax`]
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Qun Lin, AMD
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Rex Xu, AMD
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/AMD/SPV_AMD_shader_trinary_minmax.html[`SPV_AMD_shader_trinary_minmax`]
+
+include::{generated}/interfaces/VK_AMD_shader_trinary_minmax.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-05-10 (Daniel Rakos)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_texture_gather_bias_lod.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_texture_gather_bias_lod.adoc
new file mode 100644
index 0000000..90ecbc6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_AMD_texture_gather_bias_lod.adoc
@@ -0,0 +1,94 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_texture_gather_bias_lod.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-21
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/AMD/SPV_AMD_texture_gather_bias_lod.html[`SPV_AMD_texture_gather_bias_lod`]
+  - This extension provides API support for
+    {GLregistry}/AMD/AMD_texture_gather_bias_lod.txt[`GL_AMD_texture_gather_bias_lod`]
+*Contributors*::
+  - Dominik Witczak, AMD
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Matthaeus G. Chajdas, AMD
+  - Qun Lin, AMD
+  - Rex Xu, AMD
+  - Timothy Lottes, AMD
+
+=== Description
+
+This extension adds two related features.
+
+Firstly, support for the following SPIR-V extension in Vulkan is added:
+
+  * `SPV_AMD_texture_gather_bias_lod`
+
+Secondly, the extension allows the application to query which formats can be
+used together with the new function prototypes introduced by the SPIR-V
+extension.
+
+include::{generated}/interfaces/VK_AMD_texture_gather_bias_lod.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ImageGatherBiasLodAMD,
+    code:ImageGatherBiasLodAMD>>
+
+=== Examples
+
+[source,c++]
+----
+struct VkTextureLODGatherFormatPropertiesAMD
+{
+    VkStructureType sType;
+    const void*     pNext;
+    VkBool32        supportsTextureGatherLODBiasAMD;
+};
+
+// ----------------------------------------------------------------------------------------
+// How to detect if an image format can be used with the new function prototypes.
+VkPhysicalDeviceImageFormatInfo2   formatInfo;
+VkImageFormatProperties2           formatProps;
+VkTextureLODGatherFormatPropertiesAMD textureLODGatherSupport;
+
+textureLODGatherSupport.sType = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD;
+textureLODGatherSupport.pNext = nullptr;
+
+formatInfo.sType  = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
+formatInfo.pNext  = nullptr;
+formatInfo.format = ...;
+formatInfo.type   = ...;
+formatInfo.tiling = ...;
+formatInfo.usage  = ...;
+formatInfo.flags  = ...;
+
+formatProps.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
+formatProps.pNext = &textureLODGatherSupport;
+
+vkGetPhysicalDeviceImageFormatProperties2(physical_device, &formatInfo, &formatProps);
+
+if (textureLODGatherSupport.supportsTextureGatherLODBiasAMD == VK_TRUE)
+{
+    // physical device supports SPV_AMD_texture_gather_bias_lod for the specified
+    // format configuration.
+}
+else
+{
+    // physical device does not support SPV_AMD_texture_gather_bias_lod for the
+    // specified format configuration.
+}
+----
+
+=== Version History
+
+  * Revision 1, 2017-03-21 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_format_resolve.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_format_resolve.adoc
new file mode 100644
index 0000000..79a1ee7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_format_resolve.adoc
@@ -0,0 +1,38 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ANDROID_external_format_resolve.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-05-03
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Tobias Hector, AMD
+  - Chris Forbes, Google
+  - Jan-Harald Fredriksen, Arm
+  - Shahbaz Youssefi, Google
+  - Matthew Netsch, Qualcomm
+  - Tony Zlatsinki, Nvidia
+  - Daniel Koch, Nvidia
+  - Jeff Leger, Qualcomm
+  - Alex Walters, Imagination
+  - Andrew Garrard, Imagination
+  - Ralph Potter, Samsung
+  - Ian Elliott, Google
+
+=== Description
+
+This extension enables rendering to Android Hardware Buffers with external
+formats which cannot be directly represented as renderable in Vulkan,
+including {YCbCr} formats.
+
+include::{generated}/interfaces/VK_ANDROID_external_format_resolve.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-05-34 (Tobias Hector)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_memory_android_hardware_buffer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_memory_android_hardware_buffer.adoc
new file mode 100644
index 0000000..950dadd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ANDROID_external_memory_android_hardware_buffer.adoc
@@ -0,0 +1,147 @@
+// Copyright (c) 2018-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ANDROID_external_memory_android_hardware_buffer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ray Smith, ARM
+  - Lina Versace, Google
+  - Jesse Hall, Google
+  - Tobias Hector, Imagination
+  - James Jones, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Matthew Netsch, Qualcomm
+  - Andrew Garrard, Samsung
+
+=== Description
+
+This extension enables an application to import Android
+basetype:AHardwareBuffer objects created outside of the Vulkan device into
+Vulkan memory objects, where they can: be bound to images and buffers.
+It also allows exporting an basetype:AHardwareBuffer from a Vulkan memory
+object for symmetry with other operating systems.
+But since not all basetype:AHardwareBuffer usages and formats have Vulkan
+equivalents, exporting from Vulkan provides strictly less functionality than
+creating the basetype:AHardwareBuffer externally and importing it.
+
+Some basetype:AHardwareBuffer images have implementation-defined _external
+formats_ that may: not correspond to Vulkan formats.
+Sampler {YCbCr} conversion can: be used to sample from these images and
+convert them to a known color space.
+
+include::{generated}/interfaces/VK_ANDROID_external_memory_android_hardware_buffer.adoc[]
+
+=== Issues
+
+1) Other external memory objects are represented as weakly-typed handles
+(e.g. Win32 code:HANDLE or POSIX file descriptor), and require a handle type
+parameter along with handles.
+basetype:AHardwareBuffer is strongly typed, so naming the handle type is
+redundant.
+Does symmetry justify adding handle type parameters/fields anyway?
+
+*RESOLVED*: No.
+The handle type is already provided in places that treat external memory
+objects generically.
+In the places we would add it, the application code that would have to
+provide the handle type value is already dealing with
+basetype:AHardwareBuffer-specific commands/structures; the extra symmetry
+would not be enough to make that code generic.
+
+2) The internal layout and therefore size of a basetype:AHardwareBuffer
+image may depend on native usage flags that do not have corresponding Vulkan
+counterparts.
+Do we provide this information to flink:vkCreateImage somehow, or allow the
+allocation size reported by flink:vkGetImageMemoryRequirements to be
+approximate?
+
+*RESOLVED*: Allow the allocation size to be unspecified when allocating the
+memory.
+It has to work this way for exported image memory anyway, since
+basetype:AHardwareBuffer allocation happens in flink:vkAllocateMemory, and
+internally is performed by a separate HAL, not the Vulkan implementation
+itself.
+There is a similar issue with flink:vkGetImageSubresourceLayout: the layout
+is determined by the allocator HAL, so it is not known until the image is
+bound to memory.
+
+3) Should the result of sampling an external-format image with the suggested
+{YCbCr} conversion parameters yield the same results as using a
+code:samplerExternalOES in OpenGL ES?
+
+*RESOLVED*: This would be desirable, so that apps converting from OpenGL ES
+to Vulkan could get the same output given the same input.
+But since sampling and conversion from {YCbCr} images is so loosely defined
+in OpenGL ES, multiple implementations do it in a way that does not conform
+to Vulkan's requirements.
+Modifying the OpenGL ES implementation would be difficult, and would change
+the output of existing unmodified applications.
+Changing the output only for applications that are being modified gives
+developers the chance to notice and mitigate any problems.
+Implementations are encouraged to minimize differences as much as possible
+without causing compatibility problems for existing OpenGL ES applications
+or violating Vulkan requirements.
+
+4) Should an basetype:AHardwareBuffer with code:AHARDWAREBUFFER_USAGE_CPU_*
+usage be mappable in Vulkan? Should it be possible to export an
+code:AHardwareBuffers with such usage?
+
+*RESOLVED*: Optional, and mapping in Vulkan is not the same as
+code:AHardwareBuffer_lock.
+The semantics of these are different: mapping in memory is persistent, just
+gives a raw view of the memory contents, and does not involve ownership.
+code:AHardwareBuffer_lock gives the host exclusive access to the buffer, is
+temporary, and allows for reformatting copy-in/copy-out.
+Implementations are not required to support host-visible memory types for
+imported Android hardware buffers or resources backed by them.
+If a host-visible memory type is supported and used, the memory can be
+mapped in Vulkan, but doing so follows Vulkan semantics: it is just a raw
+view of the data and does not imply ownership (this means implementations
+must not internally call code:AHardwareBuffer_lock to implement
+flink:vkMapMemory, or assume the application has done so).
+Implementations are not required to support linear-tiled images backed by
+Android hardware buffers, even if the basetype:AHardwareBuffer has CPU
+usage.
+There is no reliable way to allocate memory in Vulkan that can be exported
+to a basetype:AHardwareBuffer with CPU usage.
+
+5) Android may add new basetype:AHardwareBuffer formats and usage flags over
+time.
+Can reference to them be added to this extension, or do they need a new
+extension?
+
+*RESOLVED*: This extension can document the interaction between the new AHB
+formats/usages and existing Vulkan features.
+No new Vulkan features or implementation requirements can be added.
+The extension version number will be incremented when this additional
+documentation is added, but the version number does not indicate that an
+implementation supports Vulkan memory or resources that map to the new
+basetype:AHardwareBuffer features: support for that must be queried with
+flink:vkGetPhysicalDeviceImageFormatProperties2 or is implied by
+successfully allocating a basetype:AHardwareBuffer outside of Vulkan that
+uses the new feature and has a GPU usage flag.
+
+In essence, these are new features added to a new Android API level, rather
+than new Vulkan features.
+The extension will only document how existing Vulkan features map to that
+new Android feature.
+
+=== Version History
+
+  * Revision 5, 2022-02-04 (Chris Forbes)
+  ** Describe mapping of flags for storage image support
+  * Revision 4, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
+  * Revision 3, 2019-08-27 (Jon Leech)
+  ** Update revision history to correspond to XML version number
+  * Revision 2, 2018-04-09 (Petr Kraus)
+  ** Markup fixes and remove incorrect Draft status
+  * Revision 1, 2018-03-04 (Jesse Hall)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_rasterization_order_attachment_access.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_rasterization_order_attachment_access.adoc
new file mode 100644
index 0000000..a220329
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_rasterization_order_attachment_access.adoc
@@ -0,0 +1,52 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ARM_rasterization_order_attachment_access.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-11-12
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  * Tobias Hector, AMD
+  * Jan-Harald Fredriksen, Arm
+
+=== Description
+
+Render passes, and specifically subpass dependencies, enable much of the
+same functionality as the framebuffer fetch and pixel local storage
+extensions did for OpenGL ES.
+But certain techniques such as programmable blending are awkward or
+impractical to implement with these alone, in part because a self-dependency
+is required every time a fragment will read a value at a given sample
+coordinate.
+
+This extension extends the mechanism of input attachments to allow access to
+framebuffer attachments when used as both input and color, or depth/stencil,
+attachments from one fragment to the next, in rasterization order, without
+explicit synchronization.
+
+include::{generated}/interfaces/VK_ARM_rasterization_order_attachment_access.adoc[]
+
+=== Issues
+
+1) Is there any interaction with the `apiext:VK_KHR_dynamic_rendering`
+extension?
+
+No.
+This extension only affects reads from input attachments.
+Render pass instances begun with flink:vkCmdBeginRenderingKHR do not have
+input attachments and a different mechanism will be needed to provide
+similar functionality in this case.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-11-12 (Jan-Harald Fredriksen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_scheduling_controls.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_scheduling_controls.adoc
new file mode 100644
index 0000000..cb89d57
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_scheduling_controls.adoc
@@ -0,0 +1,38 @@
+// Copyright (c) 2023 Arm Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ARM_scheduling_controls.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-08-23
+*Interactions and External Dependencies*::
+    None
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Kévin Petit, Arm Ltd.
+  - Jan-Harald Fredriksen, Arm Ltd.
+  - Mikel Garai, Arm Ltd.
+
+=== Description
+
+This extension exposes a collection of controls to modify the scheduling
+behaviour of Arm Mali devices.
+
+include::{generated}/interfaces/VK_ARM_scheduling_controls.adoc[]
+
+=== New SPIR-V Capabilities
+
+None.
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2023-08-23 (Kévin Petit)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_builtins.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_builtins.adoc
new file mode 100644
index 0000000..ef27a2f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_builtins.adoc
@@ -0,0 +1,61 @@
+// Copyright (c) 2019-2022 Arm Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ARM_shader_core_builtins.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-10-05
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/ARM/SPV_ARM_core_builtins.html[`SPV_ARM_core_builtins`].
+  - This extension provides API support for
+    {GLSLregistry}/arm/GLSL_ARM_shader_core_builtins.txt[`GL_ARM_shader_core_builtins`]
+*Contributors*::
+  - Kevin Petit, Arm Ltd.
+  - Jan-Harald Fredriksen, Arm Ltd.
+
+=== Description
+
+This extension provides the ability to determine device-specific properties
+on Arm GPUs.
+It exposes properties for the number of shader cores, the maximum number of
+warps that can run on a shader core, and shader builtins to enable
+invocations to identify which core and warp a shader invocation is executing
+on.
+
+This extension enables support for the SPIR-V code:CoreBuiltinsARM
+capability.
+
+These properties and built-ins can be used for debugging or performance
+optimisation purposes.
+A typical optimisation example would be to use code:CoreIDARM to select a
+per-shader-core instance of a data structure in algorithms that use atomics
+so as to reduce contention.
+
+include::{generated}/interfaces/VK_ARM_shader_core_builtins.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-corecountarm,code:CoreCountARM>>
+  * <<interfaces-builtin-variables-coremaxidarm,code:CoreMaxIDARM>>
+  * <<interfaces-builtin-variables-coreidarm,code:CoreIDARM>>
+  * <<interfaces-builtin-variables-warpmaxidarm,code:WarpsMaxIDARM>>
+  * <<interfaces-builtin-variables-warpidarm,code:WarpIDARM>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-CoreBuiltinsARM,code:CoreBuiltinsARM>>
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2022-10-05 (Kevin Petit)
+  ** Initial revision
+  * Revision 2, 2022-10-26 (Kevin Petit)
+  ** Add pname:shaderCoreMask property
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_properties.adoc
new file mode 100644
index 0000000..959cdb6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_ARM_shader_core_properties.adoc
@@ -0,0 +1,32 @@
+// Copyright (c) 2023 Arm Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ARM_shader_core_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-02-07
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm Ltd.
+
+=== Description
+
+This extension provides the ability to determine device-specific performance
+properties of Arm GPUs.
+
+It exposes properties for the number of texel, pixel, and fused multiply-add
+operations per clock per shader core.
+This can be used in combination with the
+`apiext:VK_ARM_shader_core_builtins` extension that provides the ability to
+query the number of shader cores on the physical device.
+
+include::{generated}/interfaces/VK_ARM_shader_core_properties.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-02-07 (Jan-Harald Fredriksen)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_4444_formats.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_4444_formats.adoc
new file mode 100644
index 0000000..ff5c19c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_4444_formats.adoc
@@ -0,0 +1,49 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_4444_formats.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-28
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension defines the ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT and
+ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT formats which are defined in other
+current graphics APIs.
+
+This extension may be useful for building translation layers for those APIs
+or for porting applications that use these formats without having to resort
+to swizzles.
+
+When VK_EXT_custom_border_color is used, these formats are not subject to
+the same restrictions for border color without format as with
+VK_FORMAT_B4G4R4A4_UNORM_PACK16.
+
+include::{generated}/interfaces/VK_EXT_4444_formats.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+This extension has been partially promoted.
+The format enumerants introduced by the extension are included in core
+Vulkan 1.3, with the EXT suffix omitted.
+However, runtime support for these formats is optional in core Vulkan 1.3,
+while if this extension is supported, runtime support is mandatory.
+The feature structure is not promoted.
+The original enum names are still available as aliases of the core
+functionality.
+
+=== Version History
+
+  * Revision 1, 2020-07-04 (Joshua Ashton)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_drm_display.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_drm_display.adoc
new file mode 100644
index 0000000..b1ba27e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_drm_display.adoc
@@ -0,0 +1,32 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_acquire_drm_display.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Simon Zeni, Status Holdings, Ltd.
+
+=== Description
+
+This extension allows an application to take exclusive control of a display
+using the Direct Rendering Manager (DRM) interface.
+When acquired, the display will be under full control of the application
+until the display is either released or the connector is unplugged.
+
+include::{generated}/interfaces/VK_EXT_acquire_drm_display.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-05-11 (Simon Zeni)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_xlib_display.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_xlib_display.adoc
new file mode 100644
index 0000000..843573a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_acquire_xlib_display.adoc
@@ -0,0 +1,58 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_acquire_xlib_display.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Dave Airlie, Red Hat
+  - Pierre Boudier, NVIDIA
+  - James Jones, NVIDIA
+  - Damien Leone, NVIDIA
+  - Pierre-Loup Griffais, Valve
+  - Liam Middlebrook, NVIDIA
+  - Daniel Vetter, Intel
+
+=== Description
+
+This extension allows an application to take exclusive control on a display
+currently associated with an X11 screen.
+When control is acquired, the display will be deassociated from the X11
+screen until control is released or the specified display connection is
+closed.
+Essentially, the X11 screen will behave as if the monitor has been unplugged
+until control is released.
+
+include::{generated}/interfaces/VK_EXT_acquire_xlib_display.adoc[]
+
+=== Issues
+
+1) Should flink:vkAcquireXlibDisplayEXT take an RandR display ID, or a
+Vulkan display handle as input?
+
+*RESOLVED*: A Vulkan display handle.
+Otherwise there would be no way to specify handles to displays that had been
+prevented from being included in the X11 display list by some native
+platform or vendor-specific mechanism.
+
+2) How does an application figure out which RandR display corresponds to a
+Vulkan display?
+
+*RESOLVED*: A new function, flink:vkGetRandROutputDisplayEXT, is introduced
+for this purpose.
+
+3) Should flink:vkGetRandROutputDisplayEXT be part of this extension, or a
+general Vulkan / RandR or Vulkan / Xlib extension?
+
+*RESOLVED*: To avoid yet another extension, include it in this extension.
+
+=== Version History
+
+  * Revision 1, 2016-12-13 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_application_parameters.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_application_parameters.adoc
new file mode 100644
index 0000000..1073f17
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_application_parameters.adoc
@@ -0,0 +1,74 @@
+// Copyright 2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_application_parameters.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-12-14
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jonathan Mccaffrey, NVIDIA
+  - Aidan Fabius, CoreAVI
+
+=== Description
+
+This instance extension enables an application to pass application
+parameters to the implementation at instance or device creation time.
+
+The application parameters consist of a set of vendor-specific keys and
+values.
+Each key is a 32-bit enum, and each value is a 64-bit integer.
+The valid keys, range of values, and default values are documented external
+to this specification in implementation-specific documentation.
+
+This extension is an instance extension rather than a device extension so
+that the implementation can modify reported sname:VkPhysicalDevice
+properties or features as needed.
+
+include::{generated}/interfaces/VK_EXT_application_parameters.adoc[]
+
+=== Issues
+
+. How should the pname:key enumerants be assigned?
++
+--
+*RESOLVED*: The pname:key enumerants are completely implementation-specific
+and do not need to be centrally reserved.
+They should be documented in the implementation-specific documentation.
+The vendor ID and optionally the device ID are provided to disambiguate
+between multiple ICDs or devices.
+--
+
+. How does an application know what application parameters are valid on a
+particular implementation?
++
+--
+*DISCUSSION*: There is no ability to enumerate device or system properties
+before an instance is created, however pname:key and pname:values must: be
+recognized by an implementation in order for instance or device creation to
+succeed.
+The vendor and optionally the device ID are provided to identify which ICD
+or device the application parameters are targeted at.
+--
+
+. Is it OK if the "valid value" for specified keys is not from static
+documented values, but must be consistent-with/interdependent-on other
+sname:VkApplicationParametersEXT?
++
+--
+*DISCUSSION*: Yes this is fine.
+Examples for how this could be used include:
+
+  * a checksum pname:key where the pname:value is computed based on other
+    slink:VkApplicationParametersEXT structures in the pname:pNext chain.
+  * an "application key" which either implies or explicitly lists a set of
+    prevalidated key/value pairs.
+--
+
+=== Version History
+
+  * Revision 1, 2021-12-14 (Daniel Koch)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_astc_decode_mode.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_astc_decode_mode.adoc
new file mode 100644
index 0000000..345e9cd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_astc_decode_mode.adoc
@@ -0,0 +1,100 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_astc_decode_mode.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-07
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+The existing specification requires that low dynamic range (LDR) ASTC
+textures are decompressed to FP16 values per component.
+In many cases, decompressing LDR textures to a lower precision intermediate
+result gives acceptable image quality.
+Source material for LDR textures is typically authored as 8-bit UNORM
+values, so decoding to FP16 values adds little value.
+On the other hand, reducing precision of the decoded result reduces the size
+of the decompressed data, potentially improving texture cache performance
+and saving power.
+
+The goal of this extension is to enable this efficiency gain on existing
+ASTC texture data.
+This is achieved by giving the application the ability to select the
+intermediate decoding precision.
+
+Three decoding options are provided:
+
+  * Decode to ename:VK_FORMAT_R16G16B16A16_SFLOAT precision: This is the
+    default, and matches the required behavior in the core API.
+  * Decode to ename:VK_FORMAT_R8G8B8A8_UNORM precision: This is provided as
+    an option in LDR mode.
+  * Decode to ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 precision: This is
+    provided as an option in both LDR and HDR mode.
+    In this mode, negative values cannot be represented and are clamped to
+    zero.
+    The alpha component is ignored, and the results are as if alpha was 1.0.
+    This decode mode is optional and support can be queried via the physical
+    device properties.
+
+include::{generated}/interfaces/VK_EXT_astc_decode_mode.adoc[]
+
+=== Issues
+
+1) Are implementations allowed to decode at a higher precision than what is
+requested?
+
+    RESOLUTION: No.
+    If we allow this, then this extension could be exposed on all
+    implementations that support ASTC.
+    But developers would have no way of knowing what precision was actually
+    used, and thus whether the image quality is sufficient at reduced
+    precision.
+
+2) Should the decode mode be image view state and/or sampler state?
+
+    RESOLUTION: Image view state only.
+    Some implementations treat the different decode modes as different
+    texture formats.
+
+=== Example
+
+Create an image view that decodes to ename:VK_FORMAT_R8G8B8A8_UNORM
+precision:
+
+[source,c++]
+----
+    VkImageViewASTCDecodeModeEXT decodeMode =
+    {
+        .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT,
+        .pNext = NULL,
+        .decodeMode = VK_FORMAT_R8G8B8A8_UNORM
+    };
+
+    VkImageViewCreateInfo createInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+        .pNext = &decodeMode,
+        // flags, image, viewType set to application-desired values
+        .format = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
+        // components, subresourceRange set to application-desired values
+    };
+
+    VkImageView imageView;
+    VkResult result = vkCreateImageView(
+        device,
+        &createInfo,
+        NULL,
+        &imageView);
+----
+
+=== Version History
+
+  * Revision 1, 2018-08-07 (Jan-Harald Fredriksen)
+  ** Initial revision
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_dynamic_state.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_dynamic_state.adoc
new file mode 100644
index 0000000..ca5685a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_dynamic_state.adoc
@@ -0,0 +1,30 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_attachment_feedback_loop_dynamic_state.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-04-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Blumenkrantz, Valve
+  - Daniel Story, Nintendo
+  - Stu Smith, AMD
+  - Samuel Pitoiset, Valve
+  - Ricardo Garcia, Igalia
+
+=== Description
+
+This extension adds support for setting attachment feedback loops
+dynamically on command buffers.
+
+include::{generated}/interfaces/VK_EXT_attachment_feedback_loop_dynamic_state.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-04-28 (Mike Blumenkrantz)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_layout.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_layout.adoc
new file mode 100644
index 0000000..89df339
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_attachment_feedback_loop_layout.adoc
@@ -0,0 +1,38 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_attachment_feedback_loop_layout.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-04-04
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Faith Ekstrand, Collabora
+  - Bas Nieuwenhuizen, Google
+  - Samuel Iglesias Gonsálvez, Igalia
+  - Ralph Potter, Samsung
+  - Jan-Harald Fredriksen, Arm
+  - Ricardo Garcia, Igalia
+
+=== Description
+
+This extension adds a new image layout,
+ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, which allows
+applications to have an image layout in which they are able to both render
+to and sample/fetch from the same subresource of an image in a given render
+pass.
+
+include::{generated}/interfaces/VK_EXT_attachment_feedback_loop_layout.adoc[]
+
+=== Version History
+
+  * Revision 2, 2022-04-04 (Joshua Ashton)
+  ** Renamed from VALVE to EXT.
+
+  * Revision 1, 2021-03-09 (Joshua Ashton)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_blend_operation_advanced.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_blend_operation_advanced.adoc
new file mode 100644
index 0000000..94ca8cc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_blend_operation_advanced.adoc
@@ -0,0 +1,110 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_blend_operation_advanced.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-06-12
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds a number of "`advanced`" blending operations that can:
+be used to perform new color blending operations, many of which are more
+complex than the standard blend modes provided by unextended Vulkan.
+This extension requires different styles of usage, depending on the level of
+hardware support and the enabled features:
+
+  - If
+    slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
+    is ename:VK_FALSE, the new blending operations are supported, but a
+    memory dependency must: separate each advanced blend operation on a
+    given sample.
+    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is used to
+    synchronize reads using advanced blend operations.
+
+  - If
+    slink:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::pname:advancedBlendCoherentOperations
+    is ename:VK_TRUE, advanced blend operations obey primitive order just
+    like basic blend operations.
+
+In unextended Vulkan, the set of blending operations is limited, and can: be
+expressed very simply.
+The ename:VK_BLEND_OP_MIN and ename:VK_BLEND_OP_MAX blend operations simply
+compute component-wise minimums or maximums of source and destination color
+components.
+The ename:VK_BLEND_OP_ADD, ename:VK_BLEND_OP_SUBTRACT, and
+ename:VK_BLEND_OP_REVERSE_SUBTRACT modes multiply the source and destination
+colors by source and destination factors and either add the two products
+together or subtract one from the other.
+This limited set of operations supports many common blending operations but
+precludes the use of more sophisticated transparency and blending operations
+commonly available in many dedicated imaging APIs.
+
+This extension provides a number of new "`advanced`" blending operations.
+Unlike traditional blending operations using ename:VK_BLEND_OP_ADD, these
+blending equations do not use source and destination factors specified by
+elink:VkBlendFactor.
+Instead, each blend operation specifies a complete equation based on the
+source and destination colors.
+These new blend operations are used for both RGB and alpha components; they
+must: not be used to perform separate RGB and alpha blending (via different
+values of color and alpha elink:VkBlendOp).
+
+These blending operations are performed using premultiplied colors, where
+RGB colors can: be considered premultiplied or non-premultiplied by alpha,
+according to the pname:srcPremultiplied and pname:dstPremultiplied members
+of slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT.
+If a color is considered non-premultiplied, the (R,G,B) color components are
+multiplied by the alpha component prior to blending.
+For non-premultiplied color components in the range [eq]#[0,1]#, the
+corresponding premultiplied color component would have values in the range
+[eq]#[0 {times} A, 1 {times} A]#.
+
+Many of these advanced blending equations are formulated where the result of
+blending source and destination colors with partial coverage have three
+separate contributions: from the portions covered by both the source and the
+destination, from the portion covered only by the source, and from the
+portion covered only by the destination.
+The blend parameter
+slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
+can: be used to specify a correlation between source and destination pixel
+coverage.
+If set to ename:VK_BLEND_OVERLAP_CONJOINT_EXT, the source and destination
+are considered to have maximal overlap, as would be the case if drawing two
+objects on top of each other.
+If set to ename:VK_BLEND_OVERLAP_DISJOINT_EXT, the source and destination
+are considered to have minimal overlap, as would be the case when rendering
+a complex polygon tessellated into individual non-intersecting triangles.
+If set to ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT, the source and
+destination coverage are assumed to have no spatial correlation within the
+pixel.
+
+In addition to the coherency issues on implementations not supporting
+pname:advancedBlendCoherentOperations, this extension has several
+limitations worth noting.
+First, the new blend operations have a limit on the number of color
+attachments they can: be used with, as indicated by
+slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendMaxColorAttachments.
+Additionally, blending precision may: be limited to 16-bit floating-point,
+which may: result in a loss of precision and dynamic range for framebuffer
+formats with 32-bit floating-point components, and in a loss of precision
+for formats with 12- and 16-bit signed or unsigned normalized integer
+components.
+
+include::{generated}/interfaces/VK_EXT_blend_operation_advanced.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2017-06-12 (Jeff Bolz)
+  ** Internal revisions
+  * Revision 2, 2017-06-12 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_border_color_swizzle.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_border_color_swizzle.adoc
new file mode 100644
index 0000000..183bcb5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_border_color_swizzle.adoc
@@ -0,0 +1,46 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_border_color_swizzle.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-10-12
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+  - Ricardo Garcia, Igalia
+  - Shahbaz Youssefi, Google
+  - Stu Smith, AMD
+
+=== Description
+
+After the publication of VK_EXT_custom_border_color, it was discovered that
+some implementations had undefined behavior when combining a sampler that
+uses a custom border color with image views whose component mapping is not
+the identity mapping.
+
+Since VK_EXT_custom_border_color has already shipped, this new extension
+VK_EXT_border_color_swizzle was created to define the interaction between
+custom border colors and non-identity image view swizzles, and provide a
+work-around for implementations that must pre-swizzle the sampler border
+color to match the image view component mapping it is combined with.
+
+This extension also defines the behavior between samplers with an opaque
+black border color and image views with a non-identity component swizzle,
+which was previously left undefined.
+
+include::{generated}/interfaces/VK_EXT_border_color_swizzle.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-10-12 (Piers Daniell)
+  ** Internal revisions.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_buffer_device_address.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_buffer_device_address.adoc
new file mode 100644
index 0000000..987c04b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_buffer_device_address.adoc
@@ -0,0 +1,64 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_buffer_device_address.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-06
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_physical_storage_buffer.html[`SPV_EXT_physical_storage_buffer`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_buffer_reference.txt[`GLSL_EXT_buffer_reference`]
+    and
+    {GLSLregistry}/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GLSL_EXT_buffer_reference_uvec2`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, AMD
+  - Tobias Hector, AMD
+  - Faith Ekstrand, Intel
+  - Baldur Karlsson, Valve
+
+=== Description
+
+This extension allows the application to query a 64-bit buffer device
+address value for a buffer, which can be used to access the buffer memory
+via the code:PhysicalStorageBufferEXT storage class in the
+{GLSLregistry}/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
+GLSL extension and
+{spirv}/EXT/SPV_EXT_physical_storage_buffer.html[`SPV_EXT_physical_storage_buffer`]
+SPIR-V extension.
+
+It also allows buffer device addresses to be provided by a trace replay
+tool, so that it matches the address used when the trace was captured.
+
+include::{generated}/interfaces/VK_EXT_buffer_device_address.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-PhysicalStorageBufferAddresses,
+    code:PhysicalStorageBufferAddressesEXT>>
+
+=== Issues
+
+1) Where is VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT
+and VkPhysicalDeviceBufferAddressFeaturesEXT?
+
+*RESOLVED*: They were renamed as
+ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT
+and slink:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT accordingly for
+consistency.
+Even though, the old names can still be found in the generated header files
+for compatibility.
+
+=== Version History
+
+  * Revision 1, 2018-11-01 (Jeff Bolz)
+  ** Internal revisions
+  * Revision 2, 2019-01-06 (Jon Leech)
+  ** Minor updates to appendix for publication
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_calibrated_timestamps.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_calibrated_timestamps.adoc
new file mode 100644
index 0000000..4c2ea5e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_calibrated_timestamps.adoc
@@ -0,0 +1,33 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_calibrated_timestamps.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-10-04
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Alan Harrison, AMD
+  - Derrick Owens, AMD
+  - Daniel Rakos, AMD
+  - Faith Ekstrand, Intel
+  - Keith Packard, Valve
+
+=== Description
+
+This extension provides an interface to query calibrated timestamps obtained
+quasi simultaneously from two time domains.
+
+include::{generated}/interfaces/VK_EXT_calibrated_timestamps.adoc[]
+
+=== Version History
+
+  * Revision 2, 2021-03-16 (Lionel Landwerlin)
+  ** Specify requirement on device timestamps
+  * Revision 1, 2018-10-04 (Daniel Rakos)
+  ** Internal revisions.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_color_write_enable.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_color_write_enable.adoc
new file mode 100644
index 0000000..8287e37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_color_write_enable.adoc
@@ -0,0 +1,39 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_color_write_enable.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-02-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Sharif Elcott, Google
+  - Tobias Hector, AMD
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension allows for selectively enabling and disabling writes to
+output color attachments via a pipeline dynamic state.
+
+The intended use cases for this new state are mostly identical to those of
+colorWriteMask, such as selectively disabling writes to avoid feedback loops
+between subpasses or bandwidth savings for unused outputs.
+By making the state dynamic, one additional benefit is the ability to reduce
+pipeline counts and pipeline switching via shaders that write a superset of
+the desired data of which subsets are selected dynamically.
+The reason for a new state, colorWriteEnable, rather than making
+colorWriteMask dynamic is that, on many implementations, the more flexible
+per-component semantics of the colorWriteMask state cannot be made dynamic
+in a performant manner.
+
+include::{generated}/interfaces/VK_EXT_color_write_enable.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-01-25 (Sharif Elcott)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conditional_rendering.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conditional_rendering.adoc
new file mode 100644
index 0000000..f8c2d33
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conditional_rendering.adoc
@@ -0,0 +1,58 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_conditional_rendering.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-05-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Daniel Rakos, AMD
+  - Jesse Hall, Google
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Stuart Smith, Imagination Technologies
+
+=== Description
+
+This extension allows the execution of one or more rendering commands to be
+conditional on a value in buffer memory.
+This may help an application reduce the latency by conditionally discarding
+rendering commands without application intervention.
+The conditional rendering commands are limited to draws, compute dispatches
+and clearing attachments within a conditional rendering block.
+
+include::{generated}/interfaces/VK_EXT_conditional_rendering.adoc[]
+
+=== Issues
+
+1) Should conditional rendering affect copy and blit commands?
+
+*RESOLVED*: Conditional rendering should not affect copies and blits.
+
+2) Should secondary command buffers be allowed to execute while conditional
+rendering is active in the primary command buffer?
+
+*RESOLVED*: The rendering commands in secondary command buffer will be
+affected by an active conditional rendering in primary command buffer if the
+pname:conditionalRenderingEnable is set to ename:VK_TRUE.
+Conditional rendering must: not be active in the primary command buffer if
+pname:conditionalRenderingEnable is ename:VK_FALSE.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-04-19 (Vikram Kushwaha)
+  ** First Version
+
+  * Revision 2, 2018-05-21 (Vikram Kushwaha)
+  ** Add new pipeline stage, access flags and limit conditional rendering to
+     a subpass or entire render pass.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conservative_rasterization.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conservative_rasterization.adoc
new file mode 100644
index 0000000..b6bc080
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_conservative_rasterization.adoc
@@ -0,0 +1,83 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_conservative_rasterization.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-06-09
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_fragment_fully_covered.html[`SPV_EXT_fragment_fully_covered`]
+    if the
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
+    feature is used.
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]if
+    the
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage
+    feature is used.
+  - This extension provides API support for
+    {GLregistry}/NV/NV_conservative_raster_underestimation.txt[`GL_NV_conservative_raster_underestimation`]
+    if the
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
+    feature is used.
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Daniel Rakos, AMD
+  - Jeff Bolz, NVIDIA
+  - Slawomir Grajewski, Intel
+  - Stu Smith, Imagination Technologies
+
+=== Description
+
+This extension adds a new rasterization mode called conservative
+rasterization.
+There are two modes of conservative rasterization; overestimation and
+underestimation.
+
+When overestimation is enabled, if any part of the primitive, including its
+edges, covers any part of the rectangular pixel area, including its sides,
+then a fragment is generated with all coverage samples turned on.
+This extension allows for some variation in implementations by accounting
+for differences in overestimation, where the generating primitive size is
+increased at each of its edges by some sub-pixel amount to further increase
+conservative pixel coverage.
+Implementations can allow the application to specify an extra overestimation
+beyond the base overestimation the implementation already does.
+It also allows implementations to either cull degenerate primitives or
+rasterize them.
+
+When underestimation is enabled, fragments are only generated if the
+rectangular pixel area is fully covered by the generating primitive.
+If supported by the implementation, when a pixel rectangle is fully covered
+the fragment shader input variable builtin called FullyCoveredEXT is set to
+true.
+The shader variable works in either overestimation or underestimation mode.
+
+Implementations can process degenerate triangles and lines by either
+discarding them or generating conservative fragments for them.
+Degenerate triangles are those that end up with zero area after the
+rasterizer quantizes them to the fixed-point pixel grid.
+Degenerate lines are those with zero length after quantization.
+
+include::{generated}/interfaces/VK_EXT_conservative_rasterization.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-fullycoveredext,FullyCoveredEXT>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentFullyCoveredEXT,
+    FragmentFullyCoveredEXT>>
+
+=== Version History
+
+  * Revision 1.1, 2020-09-06 (Piers Daniell)
+  ** Add missing SPIR-V and GLSL dependencies.
+
+  * Revision 1, 2017-08-28 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_custom_border_color.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_custom_border_color.adoc
new file mode 100644
index 0000000..822bef7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_custom_border_color.adoc
@@ -0,0 +1,135 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_custom_border_color.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-04-16
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Hans-Kristian Arntzen, Valve
+  - Philip Rebohle, Valve
+  - Liam Middlebrook, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Tobias Hector, AMD
+  - Faith Ekstrand, Intel
+  - Spencer Fricke, Samsung Electronics
+  - Graeme Leese, Broadcom
+  - Jesse Hall, Google
+  - Jan-Harald Fredriksen, ARM
+  - Tom Olson, ARM
+  - Stuart Smith, Imagination Technologies
+  - Donald Scorgie, Imagination Technologies
+  - Alex Walters, Imagination Technologies
+  - Peter Quayle, Imagination Technologies
+
+=== Description
+
+This extension provides cross-vendor functionality to specify a custom
+border color for use when the sampler address mode
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER is used.
+
+To create a sampler which uses a custom border color set
+slink:VkSamplerCreateInfo::pname:borderColor to one of:
+
+  * ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
+  * ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
+
+When ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+ename:VK_BORDER_COLOR_INT_CUSTOM_EXT is used, applications must provide a
+slink:VkSamplerCustomBorderColorCreateInfoEXT in the pname:pNext chain for
+slink:VkSamplerCreateInfo.
+
+include::{generated}/interfaces/VK_EXT_custom_border_color.adoc[]
+
+=== Issues
+
+1) Should VkClearColorValue be used for the border color value, or should we
+have our own struct/union? Do we need to specify the type of the input
+values for the components? This is more of a concern if VkClearColorValue is
+used here because it provides a union of float,int,uint types.
+
+*RESOLVED*: Will reuse existing VkClearColorValue structure in order to
+easily take advantage of float,int,uint borderColor types.
+
+
+2) For hardware which supports a limited number of border colors what
+happens if that number is exceeded? Should this be handled by the driver
+unbeknownst to the application? In Revision 1 we had solved this issue using
+a new Object type, however that may have lead to additional system resource
+consumption which would otherwise not be required.
+
+*RESOLVED*: Added
+sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT::pname:maxCustomBorderColorSamplers
+for tracking implementation-specific limit, and Valid Usage statement
+handling overflow.
+
+3) Should this be supported for immutable samplers at all, or by a feature
+bit? Some implementations may not be able to support custom border colors on
+immutable samplers -- is it worthwhile enabling this to work on them for
+implementations that can support it, or forbidding it entirely.
+
+*RESOLVED*: Samplers created with a custom border color are forbidden from
+being immutable.
+This resolves concerns for implementations where the custom border color is
+an index to a LUT instead of being directly embedded into sampler state.
+
+4) Should UINT and SINT (unsigned integer and signed integer) border color
+types be separated or should they be combined into one generic INT (integer)
+type?
+
+*RESOLVED*: Separating these does not make much sense as the existing fixed
+border color types do not have this distinction, and there is no reason in
+hardware to do so.
+This separation would also create unnecessary work and considerations for
+the application.
+
+=== Version History
+
+  * Revision 1, 2019-10-10 (Joshua Ashton)
+  ** Internal revisions.
+
+  * Revision 2, 2019-10-11 (Liam Middlebrook)
+  ** Remove VkCustomBorderColor object and associated functions
+  ** Add issues concerning HW limitations for custom border color count
+
+  * Revision 3, 2019-10-12 (Joshua Ashton)
+  ** Re-expose the limits for the maximum number of unique border colors
+  ** Add extra details about border color tracking
+  ** Fix typos
+
+  * Revision 4, 2019-10-12 (Joshua Ashton)
+  ** Changed maxUniqueCustomBorderColors to a uint32_t from a VkDeviceSize
+
+  * Revision 5, 2019-10-14 (Liam Middlebrook)
+  ** Added features bit
+
+  * Revision 6, 2019-10-15 (Joshua Ashton)
+  ** Type-ize VK_BORDER_COLOR_CUSTOM
+  ** Fix const-ness on pname:pNext of
+     VkSamplerCustomBorderColorCreateInfoEXT
+
+  * Revision 7, 2019-11-26 (Liam Middlebrook)
+  ** Renamed maxUniqueCustomBorderColors to maxCustomBorderColors
+
+  * Revision 8, 2019-11-29 (Joshua Ashton)
+  ** Renamed borderColor member of VkSamplerCustomBorderColorCreateInfoEXT
+     to customBorderColor
+
+  * Revision 9, 2020-02-19 (Joshua Ashton)
+  ** Renamed maxCustomBorderColors to maxCustomBorderColorSamplers
+
+  * Revision 10, 2020-02-21 (Joshua Ashton)
+  ** Added format to VkSamplerCustomBorderColorCreateInfoEXT and feature bit
+
+  * Revision 11, 2020-04-07 (Joshua Ashton)
+  ** Dropped UINT/SINT border color differences, consolidated types
+
+  * Revision 12, 2020-04-16 (Joshua Ashton)
+  ** Renamed VK_BORDER_COLOR_CUSTOM_FLOAT_EXT to
+     VK_BORDER_COLOR_FLOAT_CUSTOM_EXT for consistency
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_marker.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_marker.adoc
new file mode 100644
index 0000000..0d70c79
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_marker.adoc
@@ -0,0 +1,178 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_marker.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-01-31
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Baldur Karlsson
+  - Dan Ginsburg, Valve
+  - Jon Ashburn, LunarG
+  - Kyle Spagnoli, NVIDIA
+
+=== Description
+
+The `VK_EXT_debug_marker` extension is a device extension.
+It introduces concepts of object naming and tagging, for better tracking of
+Vulkan objects, as well as additional commands for recording annotations of
+named sections of a workload to aid organization and offline analysis in
+external tools.
+
+include::{generated}/interfaces/VK_EXT_debug_marker.adoc[]
+
+=== Examples
+
+*Example 1*
+
+Associate a name with an image, for easier debugging in external tools or
+with validation layers that can print a friendly name when referring to
+objects in error messages.
+
+[source,c++]
+----
+    extern VkDevice device;
+    extern VkImage image;
+
+    // Must call extension functions through a function pointer:
+    PFN_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
+
+    // Set a name on the image
+    const VkDebugMarkerObjectNameInfoEXT imageNameInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
+        .pNext = NULL,
+        .objectType = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
+        .object = (uint64_t)image,
+        .pObjectName = "Brick Diffuse Texture",
+    };
+
+    pfnDebugMarkerSetObjectNameEXT(device, &imageNameInfo);
+
+    // A subsequent error might print:
+    //   Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
+    //   command buffer with no memory bound to it.
+----
+
+*Example 2*
+
+Annotating regions of a workload with naming information so that offline
+analysis tools can display a more usable visualisation of the commands
+submitted.
+
+[source,c++]
+----
+    extern VkDevice device;
+    extern VkCommandBuffer commandBuffer;
+
+    // Must call extension functions through a function pointer:
+    PFN_vkCmdDebugMarkerBeginEXT pfnCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT");
+    PFN_vkCmdDebugMarkerEndEXT pfnCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT");
+    PFN_vkCmdDebugMarkerInsertEXT pfnCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT");
+
+    // Describe the area being rendered
+    const VkDebugMarkerMarkerInfoEXT houseMarker =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
+        .pNext = NULL,
+        .pMarkerName = "Brick House",
+        .color = { 1.0f, 0.0f, 0.0f, 1.0f },
+    };
+
+    // Start an annotated group of calls under the 'Brick House' name
+    pfnCmdDebugMarkerBeginEXT(commandBuffer, &houseMarker);
+    {
+        // A mutable structure for each part being rendered
+        VkDebugMarkerMarkerInfoEXT housePartMarker =
+        {
+            .sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
+            .pNext = NULL,
+            .pMarkerName = NULL,
+            .color = { 0.0f, 0.0f, 0.0f, 0.0f },
+        };
+
+        // Set the name and insert the marker
+        housePartMarker.pMarkerName = "Walls";
+        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
+
+        // Insert the drawcall for the walls
+        vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
+
+        // Insert a recursive region for two sets of windows
+        housePartMarker.pMarkerName = "Windows";
+        pfnCmdDebugMarkerBeginEXT(commandBuffer, &housePartMarker);
+        {
+            vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
+            vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
+        }
+        pfnCmdDebugMarkerEndEXT(commandBuffer);
+
+        housePartMarker.pMarkerName = "Front Door";
+        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
+
+        vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
+
+        housePartMarker.pMarkerName = "Roof";
+        pfnCmdDebugMarkerInsertEXT(commandBuffer, &housePartMarker);
+
+        vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
+    }
+    // End the house annotation started above
+    pfnCmdDebugMarkerEndEXT(commandBuffer);
+----
+
+=== Issues
+
+1) Should the tag or name for an object be specified using the pname:pNext
+parameter in the object's stext:Vk*CreateInfo structure?
+
+*RESOLVED*: No.
+While this fits with other Vulkan patterns and would allow more type safety
+and future proofing against future objects, it has notable downsides.
+In particular passing the name at stext:Vk*CreateInfo time does not allow
+renaming, prevents late binding of naming information, and does not allow
+naming of implicitly created objects such as queues and swapchain images.
+
+2) Should the command annotation functions flink:vkCmdDebugMarkerBeginEXT
+and flink:vkCmdDebugMarkerEndEXT support the ability to specify a color?
+
+*RESOLVED*: Yes.
+The functions have been expanded to take an optional color which can be used
+at will by implementations consuming the command buffer annotations in their
+visualisation.
+
+3) Should the functions added in this extension accept an extensible
+structure as their parameter for a more flexible API, as opposed to direct
+function parameters? If so, which functions?
+
+*RESOLVED*: Yes.
+All functions have been modified to take a structure type with extensible
+pname:pNext pointer, to allow future extensions to add additional annotation
+information in the same commands.
+
+=== Version History
+
+  * Revision 1, 2016-02-24 (Baldur Karlsson)
+  ** Initial draft, based on LunarG marker spec
+
+  * Revision 2, 2016-02-26 (Baldur Karlsson)
+  ** Renamed Dbg to DebugMarker in function names
+  ** Allow markers in secondary command buffers under certain circumstances
+  ** Minor language tweaks and edits
+
+  * Revision 3, 2016-04-23 (Baldur Karlsson)
+  ** Reorganise spec layout to closer match desired organisation
+  ** Added optional color to markers (both regions and inserted labels)
+  ** Changed functions to take extensible structs instead of direct function
+     parameters
+
+  * Revision 4, 2017-01-31 (Baldur Karlsson)
+  ** Added explicit dependency on VK_EXT_debug_report
+  ** Moved definition of elink:VkDebugReportObjectTypeEXT to debug report
+     chapter.
+  ** Fixed typo in dates in revision history
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_report.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_report.adoc
new file mode 100644
index 0000000..4807c94
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_report.adoc
@@ -0,0 +1,214 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_report.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-12-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Courtney Goeltzenleuchter, LunarG
+  - Dan Ginsburg, Valve
+  - Jon Ashburn, LunarG
+  - Mark Lobodzinski, LunarG
+
+=== Description
+
+Due to the nature of the Vulkan interface, there is very little error
+information available to the developer and application.
+By enabling optional validation layers and using the `VK_EXT_debug_report`
+extension, developers can: obtain much more detailed feedback on the
+application's use of Vulkan.
+This extension defines a way for layers and the implementation to call back
+to the application for events of interest to the application.
+
+include::{generated}/interfaces/VK_EXT_debug_report.adoc[]
+
+=== Examples
+
+`VK_EXT_debug_report` allows an application to register multiple callbacks
+with the validation layers.
+Some callbacks may log the information to a file, others may cause a debug
+break point or other application defined behavior.
+An application can: register callbacks even when no validation layers are
+enabled, but they will only be called for loader and, if implemented, driver
+events.
+
+To capture events that occur while creating or destroying an instance an
+application can: link a slink:VkDebugReportCallbackCreateInfoEXT structure
+to the pname:pNext element of the slink:VkInstanceCreateInfo structure given
+to flink:vkCreateInstance.
+
+Example uses: Create three callback objects.
+One will log errors and warnings to the debug console using Windows
+code:OutputDebugString.
+The second will cause the debugger to break at that callback when an error
+happens and the third will log warnings to stdout.
+
+[source,c++]
+----
+    VkResult res;
+    VkDebugReportCallbackEXT cb1, cb2, cb3;
+
+    VkDebugReportCallbackCreateInfoEXT callback1 = {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_DEBUG_REPORT_ERROR_BIT_EXT |
+                 VK_DEBUG_REPORT_WARNING_BIT_EXT,
+        .pfnCallback = myOutputDebugString,
+        .pUserData = NULL
+    };
+    res = vkCreateDebugReportCallbackEXT(instance, &callback1, &cb1);
+    if (res != VK_SUCCESS)
+       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
+
+    callback.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT;
+    callback.pfnCallback = myDebugBreak;
+    callback.pUserData = NULL;
+    res = vkCreateDebugReportCallbackEXT(instance, &callback, &cb2);
+    if (res != VK_SUCCESS)
+       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
+
+    VkDebugReportCallbackCreateInfoEXT callback3 = {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_DEBUG_REPORT_WARNING_BIT_EXT,
+        .pfnCallback = mystdOutLogger,
+        .pUserData = NULL
+    };
+    res = vkCreateDebugReportCallbackEXT(instance, &callback3, &cb3);
+    if (res != VK_SUCCESS)
+       /* Do error handling for VK_ERROR_OUT_OF_MEMORY */
+
+    ...
+
+    /* remove callbacks when cleaning up */
+    vkDestroyDebugReportCallbackEXT(instance, cb1);
+    vkDestroyDebugReportCallbackEXT(instance, cb2);
+    vkDestroyDebugReportCallbackEXT(instance, cb3);
+----
+
+[NOTE]
+.Note
+====
+In the initial release of the `VK_EXT_debug_report` extension, the token
+ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT was used.
+Starting in version 2 of the extension branch,
+ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT is used
+instead for consistency with Vulkan naming rules.
+The older enum is still available for backwards compatibility.
+====
+
+[NOTE]
+.Note
+====
+In the initial release of the `VK_EXT_debug_report` extension, the token
+ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT was used.
+Starting in version 8 of the extension branch,
+ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT is used
+instead for consistency with Vulkan naming rules.
+The older enum is still available for backwards compatibility.
+====
+
+
+=== Issues
+
+1) What is the hierarchy / seriousness of the message flags? E.g.
+etext:ERROR > etext:WARN > etext:PERF_WARN ...
+
+*RESOLVED*: There is no specific hierarchy.
+Each bit is independent and should be checked via bitwise AND.
+For example:
+
+[source,c++]
+----
+    if (localFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
+        process error message
+    }
+    if (localFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
+        process debug message
+    }
+----
+
+The validation layers do use them in a hierarchical way (etext:ERROR >
+etext:WARN > etext:PERF, etext:WARN > etext:DEBUG > etext:INFO) and they (at
+least at the time of this writing) only set one bit at a time.
+But it is not a requirement of this extension.
+
+It is possible that a layer may intercept and change, or augment the flags
+with extension values the application's debug report handler may not be
+familiar with, so it is important to treat each flag independently.
+
+2) Should there be a VU requiring
+slink:VkDebugReportCallbackCreateInfoEXT::pname:flags to be non-zero?
+
+*RESOLVED*: It may not be very useful, but we do not need VU statement
+requiring the sname:VkDebugReportCallbackCreateInfoEXT::pname:msgFlags at
+create-time to be non-zero.
+One can imagine that apps may prefer it as it allows them to set the mask as
+desired - including nothing - at runtime without having to check.
+
+3) What is the difference between ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT and
+ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT?
+
+*RESOLVED*: ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT specifies information that
+could be useful debugging the Vulkan implementation itself.
+
+4) How do you compare handles returned by the debug_report callback to the
+application's handles?
+
+*RESOLVED*: Due to the different nature of dispatchable and nondispatchable
+handles there is no generic way (that we know of) that works for common
+compilers with 32bit, 64bit, C and C++.
+We recommend applications use the same cast that the validation layers use:
++
+[source,c++]
+----
+reinterpret_cast<uint64_t &>(dispatchableHandle)
+(uint64_t)(nondispatchableHandle)
+----
++
+This does require that the app treat dispatchable and nondispatchable
+handles differently.
+
+=== Version History
+
+  * Revision 1, 2015-05-20 (Courtney Goetzenleuchter)
+  ** Initial draft, based on LunarG KHR spec, other KHR specs
+
+  * Revision 2, 2016-02-16 (Courtney Goetzenleuchter)
+  ** Update usage, documentation
+
+  * Revision 3, 2016-06-14 (Courtney Goetzenleuchter)
+  ** Update VK_EXT_DEBUG_REPORT_SPEC_VERSION to indicate added support for
+     vkCreateInstance and vkDestroyInstance
+
+  * Revision 4, 2016-12-08 (Mark Lobodzinski)
+  ** Added Display_KHR, DisplayModeKHR extension objects
+  ** Added ObjectTable_NVX, IndirectCommandsLayout_NVX extension objects
+  ** Bumped spec revision
+  ** Retroactively added version history
+
+  * Revision 5, 2017-01-31 (Baldur Karlsson)
+  ** Moved definition of elink:VkDebugReportObjectTypeEXT from debug marker
+     chapter
+
+  * Revision 6, 2017-01-31 (Baldur Karlsson)
+  ** Added VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
+
+  * Revision 7, 2017-04-20 (Courtney Goeltzenleuchter)
+  ** Clarify wording and address questions from developers.
+
+  * Revision 8, 2017-04-21 (Courtney Goeltzenleuchter)
+  ** Remove unused enum VkDebugReportErrorEXT
+
+  * Revision 9, 2017-09-12 (Tobias Hector)
+  ** Added interactions with Vulkan 1.1
+
+  * Revision 10, 2020-12-14 (Courtney Goetzenleuchter)
+  ** Add issue 4 discussing matching handles returned by the extension,
+     based on suggestion in public issue 368.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_utils.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_utils.adoc
new file mode 100644
index 0000000..9a8b78c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_debug_utils.adoc
@@ -0,0 +1,341 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_utils.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-04-03
+*Revision*::
+    2
+*IP Status*::
+    No known IP claims.
+*Dependencies*::
+  - This extension is written against version 1.0 of the Vulkan API.
+  - Requires elink:VkObjectType
+*Contributors*::
+  - Mark Young, LunarG
+  - Baldur Karlsson
+  - Ian Elliott, Google
+  - Courtney Goeltzenleuchter, Google
+  - Karl Schultz, LunarG
+  - Mark Lobodzinski, LunarG
+  - Mike Schuchardt, LunarG
+  - Jaakko Konttinen, AMD
+  - Dan Ginsburg, Valve Software
+  - Rolando Olivares, Epic Games
+  - Dan Baker, Oxide Games
+  - Kyle Spagnoli, NVIDIA
+  - Jon Ashburn, LunarG
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+Due to the nature of the Vulkan interface, there is very little error
+information available to the developer and application.
+By using the `VK_EXT_debug_utils` extension, developers can: obtain more
+information.
+When combined with validation layers, even more detailed feedback on the
+application's use of Vulkan will be provided.
+
+This extension provides the following capabilities:
+
+  - The ability to create a debug messenger which will pass along debug
+    messages to an application supplied callback.
+  - The ability to identify specific Vulkan objects using a name or tag to
+    improve tracking.
+  - The ability to identify specific sections within a sname:VkQueue or
+    sname:VkCommandBuffer using labels to aid organization and offline
+    analysis in external tools.
+
+The main difference between this extension and `apiext:VK_EXT_debug_report`
+and `apiext:VK_EXT_debug_marker` is that those extensions use
+elink:VkDebugReportObjectTypeEXT to identify objects.
+This extension uses the core elink:VkObjectType in place of
+elink:VkDebugReportObjectTypeEXT.
+The primary reason for this move is that no future object type handle
+enumeration values will be added to elink:VkDebugReportObjectTypeEXT since
+the creation of elink:VkObjectType.
+
+In addition, this extension combines the functionality of both
+`apiext:VK_EXT_debug_report` and `apiext:VK_EXT_debug_marker` by allowing
+object name and debug markers (now called labels) to be returned to the
+application's callback function.
+This should assist in clarifying the details of a debug message including:
+what objects are involved and potentially which location within a
+slink:VkQueue or slink:VkCommandBuffer the message occurred.
+
+include::{generated}/interfaces/VK_EXT_debug_utils.adoc[]
+
+=== Examples
+
+*Example 1*
+
+`VK_EXT_debug_utils` allows an application to register multiple callbacks
+with any Vulkan component wishing to report debug information.
+Some callbacks may log the information to a file, others may cause a debug
+break point or other application defined behavior.
+An application can: register callbacks even when no validation layers are
+enabled, but they will only be called for loader and, if implemented, driver
+events.
+
+To capture events that occur while creating or destroying an instance an
+application can: link a slink:VkDebugUtilsMessengerCreateInfoEXT structure
+to the pname:pNext element of the slink:VkInstanceCreateInfo structure given
+to flink:vkCreateInstance.
+
+Example uses: Create three callback objects.
+One will log errors and warnings to the debug console using Windows
+code:OutputDebugString.
+The second will cause the debugger to break at that callback when an error
+happens and the third will log warnings to stdout.
+
+[source,c++]
+----
+    extern VkInstance instance;
+    VkResult res;
+    VkDebugUtilsMessengerEXT cb1, cb2, cb3;
+
+    // Must call extension functions through a function pointer:
+    PFN_vkCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
+    PFN_vkDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
+
+    VkDebugUtilsMessengerCreateInfoEXT callback1 = {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |
+                           VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
+        .messageType= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
+                      VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
+        .pfnUserCallback = myOutputDebugString,
+        .pUserData = NULL
+    };
+    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb1);
+    if (res != VK_SUCCESS) {
+       // Do error handling for VK_ERROR_OUT_OF_MEMORY
+    }
+
+    callback1.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
+    callback1.pfnUserCallback = myDebugBreak;
+    callback1.pUserData = NULL;
+    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, NULL, &cb2);
+    if (res != VK_SUCCESS) {
+       // Do error handling for VK_ERROR_OUT_OF_MEMORY
+    }
+
+    VkDebugUtilsMessengerCreateInfoEXT callback3 = {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
+        .messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
+                       VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
+        .pfnUserCallback = mystdOutLogger,
+        .pUserData = NULL
+    };
+    res = pfnCreateDebugUtilsMessengerEXT(instance, &callback3, NULL, &cb3);
+    if (res != VK_SUCCESS) {
+       // Do error handling for VK_ERROR_OUT_OF_MEMORY
+    }
+
+    ...
+
+    // Remove callbacks when cleaning up
+    pfnDestroyDebugUtilsMessengerEXT(instance, cb1, NULL);
+    pfnDestroyDebugUtilsMessengerEXT(instance, cb2, NULL);
+    pfnDestroyDebugUtilsMessengerEXT(instance, cb3, NULL);
+----
+
+*Example 2*
+
+Associate a name with an image, for easier debugging in external tools or
+with validation layers that can print a friendly name when referring to
+objects in error messages.
+
+[source,c++]
+----
+    extern VkInstance instance;
+    extern VkDevice device;
+    extern VkImage image;
+
+    // Must call extension functions through a function pointer:
+    PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");
+
+    // Set a name on the image
+    const VkDebugUtilsObjectNameInfoEXT imageNameInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,
+        .pNext = NULL,
+        .objectType = VK_OBJECT_TYPE_IMAGE,
+        .objectHandle = (uint64_t)image,
+        .pObjectName = "Brick Diffuse Texture",
+    };
+
+    pfnSetDebugUtilsObjectNameEXT(device, &imageNameInfo);
+
+    // A subsequent error might print:
+    //   Image 'Brick Diffuse Texture' (0xc0dec0dedeadbeef) is used in a
+    //   command buffer with no memory bound to it.
+----
+
+*Example 3*
+
+Annotating regions of a workload with naming information so that offline
+analysis tools can display a more usable visualization of the commands
+submitted.
+
+[source,c++]
+----
+    extern VkInstance instance;
+    extern VkCommandBuffer commandBuffer;
+
+    // Must call extension functions through a function pointer:
+    PFN_vkQueueBeginDebugUtilsLabelEXT pfnQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT");
+    PFN_vkQueueEndDebugUtilsLabelEXT pfnQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT");
+    PFN_vkCmdBeginDebugUtilsLabelEXT pfnCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT");
+    PFN_vkCmdEndDebugUtilsLabelEXT pfnCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT");
+    PFN_vkCmdInsertDebugUtilsLabelEXT pfnCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT");
+
+    // Describe the area being rendered
+    const VkDebugUtilsLabelEXT houseLabel =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
+        .pNext = NULL,
+        .pLabelName = "Brick House",
+        .color = { 1.0f, 0.0f, 0.0f, 1.0f },
+    };
+
+    // Start an annotated group of calls under the 'Brick House' name
+    pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &houseLabel);
+    {
+        // A mutable structure for each part being rendered
+        VkDebugUtilsLabelEXT housePartLabel =
+        {
+            .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
+            .pNext = NULL,
+            .pLabelName = NULL,
+            .color = { 0.0f, 0.0f, 0.0f, 0.0f },
+        };
+
+        // Set the name and insert the marker
+        housePartLabel.pLabelName = "Walls";
+        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
+
+        // Insert the drawcall for the walls
+        vkCmdDrawIndexed(commandBuffer, 1000, 1, 0, 0, 0);
+
+        // Insert a recursive region for two sets of windows
+        housePartLabel.pLabelName = "Windows";
+        pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
+        {
+            vkCmdDrawIndexed(commandBuffer, 75, 6, 1000, 0, 0);
+            vkCmdDrawIndexed(commandBuffer, 100, 2, 1450, 0, 0);
+        }
+        pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
+
+        housePartLabel.pLabelName = "Front Door";
+        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
+
+        vkCmdDrawIndexed(commandBuffer, 350, 1, 1650, 0, 0);
+
+        housePartLabel.pLabelName = "Roof";
+        pfnCmdInsertDebugUtilsLabelEXT(commandBuffer, &housePartLabel);
+
+        vkCmdDrawIndexed(commandBuffer, 500, 1, 2000, 0, 0);
+    }
+    // End the house annotation started above
+    pfnCmdEndDebugUtilsLabelEXT(commandBuffer);
+
+    // Do other work
+
+    vkEndCommandBuffer(commandBuffer);
+
+    // Describe the queue being used
+    const VkDebugUtilsLabelEXT queueLabel =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
+        .pNext = NULL,
+        .pLabelName = "Main Render Work",
+        .color = { 0.0f, 1.0f, 0.0f, 1.0f },
+    };
+
+    // Identify the queue label region
+    pfnQueueBeginDebugUtilsLabelEXT(queue, &queueLabel);
+
+    // Submit the work for the main render thread
+    const VkCommandBuffer cmd_bufs[] = {commandBuffer};
+    VkSubmitInfo submit_info =
+    {
+        .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
+        .pNext = NULL,
+        .waitSemaphoreCount = 0,
+        .pWaitSemaphores = NULL,
+        .pWaitDstStageMask = NULL,
+        .commandBufferCount = 1,
+        .pCommandBuffers = cmd_bufs,
+        .signalSemaphoreCount = 0,
+        .pSignalSemaphores = NULL
+    };
+    vkQueueSubmit(queue, 1, &submit_info, fence);
+
+    // End the queue label region
+    pfnQueueEndDebugUtilsLabelEXT(queue);
+----
+
+=== Issues
+
+1) Should we just name this extension `VK_EXT_debug_report2`
+
+*RESOLVED*: No.
+There is enough additional changes to the structures to break backwards
+compatibility.
+So, a new name was decided that would not indicate any interaction with the
+previous extension.
+
+2) Will validation layers immediately support all the new features.
+
+*RESOLVED*: Not immediately.
+As one can imagine, there is a lot of work involved with converting the
+validation layer logging over to the new functionality.
+Basic logging, as seen in the origin `apiext:VK_EXT_debug_report` extension
+will be made available immediately.
+However, adding the labels and object names will take time.
+Since the priority for Khronos at this time is to continue focusing on Valid
+Usage statements, it may take a while before the new functionality is fully
+exposed.
+
+3) If the validation layers will not expose the new functionality
+immediately, then what is the point of this extension?
+
+*RESOLVED*: We needed a replacement for `apiext:VK_EXT_debug_report` because
+the elink:VkDebugReportObjectTypeEXT enumeration will no longer be updated
+and any new objects will need to be debugged using the new functionality
+provided by this extension.
+
+4) Should this extension be split into two separate parts (1 extension that
+is an instance extension providing the callback functionality, and another
+device extension providing the general debug marker and annotation
+functionality)?
+
+*RESOLVED*: No, the functionality for this extension is too closely related.
+If we did split up the extension, where would the structures and enums live,
+and how would you define that the device behavior in the instance extension
+is really only valid if the device extension is enabled, and the
+functionality is passed in.
+It is cleaner to just define this all as an instance extension, plus it
+allows the application to enable all debug functionality provided with one
+enable string during flink:vkCreateInstance.
+
+=== Version History
+
+  * Revision 1, 2017-09-14 (Mark Young and all listed Contributors)
+  ** Initial draft, based on `apiext:VK_EXT_debug_report` and
+     `apiext:VK_EXT_debug_marker` in addition to previous feedback supplied
+     from various companies including Valve, Epic, and Oxide games.
+  * Revision 2, 2020-04-03 (Mark Young and Piers Daniell)
+  ** Updated to allow either `NULL` or an empty string to be passed in for
+     pname:pObjectName in sname:VkDebugUtilsObjectNameInfoEXT, because the
+     loader and various drivers support `NULL` already.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_bias_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_bias_control.adoc
new file mode 100644
index 0000000..197129c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_bias_control.adoc
@@ -0,0 +1,41 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_bias_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-02-15
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, VALVE
+  - Hans-Kristian Arntzen, VALVE
+  - Mike Blumenkrantz, VALVE
+  - Georg Lehmann, VALVE
+  - Piers Daniell, NVIDIA
+  - Lionel Landwerlin, INTEL
+  - Tobias Hector, AMD
+  - Ricardo Garcia, IGALIA
+  - Jan-Harald Fredriksen, ARM
+  - Shahbaz Youssefi, GOOGLE
+  - Tom Olson, ARM
+
+=== Description
+
+This extension adds a new structure, sname:VkDepthBiasRepresentationInfoEXT,
+that can be added to a `pNext` chain of
+sname:VkPipelineRasterizationStateCreateInfo and allows setting the scaling
+and representation of depth bias for a pipeline.
+
+This state can also be set dynamically by using the new structure mentioned
+above in combination with the new fname:vkCmdSetDepthBias2EXT command.
+
+include::{generated}/interfaces/VK_EXT_depth_bias_control.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-09-22 (Joshua Ashton)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clamp_zero_one.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clamp_zero_one.adoc
new file mode 100644
index 0000000..e0c4df4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clamp_zero_one.adoc
@@ -0,0 +1,29 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_clamp_zero_one.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-07-29
+*Contributors*::
+  - Graeme Leese, Broadcom
+
+=== Description
+
+This extension gives defined behavior to fragment depth values which end up
+outside the conventional [0, 1] range.
+It can be used to ensure portability in edge cases of features like
+depthBias.
+The particular behavior is chosen to match OpenGL to aid porting or
+emulation.
+
+include::{generated}/interfaces/VK_EXT_depth_clamp_zero_one.adoc[]
+
+
+=== Version History
+
+  * Revision 1, 2021-07-29 (Graeme Leese)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_control.adoc
new file mode 100644
index 0000000..4e430a7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_control.adoc
@@ -0,0 +1,65 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_clip_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-11-09
+*Contributors*::
+  - Spencer Fricke, Samsung Electronics
+  - Shahbaz Youssefi, Google
+  - Ralph Potter, Samsung Electronics
+
+=== Description
+
+This extension allows the application to use the OpenGL depth range in NDC,
+i.e. with depth in range [eq]#[-1, 1]#, as opposed to Vulkan's default of
+[eq]#[0, 1]#.
+The purpose of this extension is to allow efficient layering of OpenGL over
+Vulkan, by avoiding emulation in the pre-rasterization shader stages.
+This emulation, which effectively duplicates gl_Position but with a
+different depth value, costs ALU and consumes shader output components that
+the implementation may not have to spare to meet OpenGL minimum
+requirements.
+
+include::{generated}/interfaces/VK_EXT_depth_clip_control.adoc[]
+
+=== Issues
+
+1) Should this extension include an origin control option to match
+GL_LOWER_LEFT found in ARB_clip_control?
+
+*RESOLVED*: No.
+The fix for porting over the origin is a simple y-axis flip.
+The depth clip control is a much harder problem to solve than what this
+extension is aimed to solve.
+Adding an equivalent to GL_LOWER_LEFT would require more testing.
+
+2) Should this pipeline state be dynamic?
+
+*RESOLVED*: Yes.
+The purpose of this extension is to emulate the OpenGL depth range, which is
+expected to be globally fixed (in case of OpenGL ES) or very infrequently
+changed (with `glClipControl` in OpenGL).
+
+3) Should the control provided in this extension be an enum that could be
+extended in the future?
+
+*RESOLVED*: No.
+It is highly unlikely that the depth range is changed to anything other than
+[eq]#[0, 1]# in the future.
+Should that happen a new extension will be required to extend such an enum,
+and that extension might as well add a new struct to chain to
+slink:VkPipelineViewportStateCreateInfo::pname:pNext instead.
+
+=== Version History
+
+  * Revision 0, 2020-10-01 (Spencer Fricke)
+  ** Internal revisions
+
+  * Revision 1, 2020-11-26 (Shahbaz Youssefi)
+  ** Language fixes
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_enable.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_enable.adoc
new file mode 100644
index 0000000..63d741f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_clip_enable.adoc
@@ -0,0 +1,35 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_clip_enable.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-20
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Henri Verbeet, CodeWeavers
+  - Jeff Bolz, NVIDIA
+  - Philip Rebohle, DXVK
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension allows the depth clipping operation, that is normally
+implicitly controlled by
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable, to
+instead be controlled explicitly by
+slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT::pname:depthClipEnable.
+
+This is useful for translating DX content which assumes depth clamping is
+always enabled, but depth clip can be controlled by the DepthClipEnable
+rasterization state (D3D12_RASTERIZER_DESC).
+
+include::{generated}/interfaces/VK_EXT_depth_clip_enable.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-12-20 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_range_unrestricted.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_range_unrestricted.adoc
new file mode 100644
index 0000000..2f54004
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_depth_range_unrestricted.adoc
@@ -0,0 +1,54 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_range_unrestricted.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-06-22
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension removes the slink:VkViewport pname:minDepth and
+pname:maxDepth restrictions that the values must be between `0.0` and `1.0`,
+inclusive.
+It also removes the same restriction on
+slink:VkPipelineDepthStencilStateCreateInfo pname:minDepthBounds and
+pname:maxDepthBounds.
+Finally it removes the restriction on the pname:depth value in
+slink:VkClearDepthStencilValue.
+
+include::{generated}/interfaces/VK_EXT_depth_range_unrestricted.adoc[]
+
+=== Issues
+
+1) How do slink:VkViewport pname:minDepth and pname:maxDepth values outside
+of the `0.0` to `1.0` range interact with
+<<vertexpostproc-clipping,Primitive Clipping>>?
+
+*RESOLVED*: The behavior described in <<vertexpostproc-clipping,Primitive
+Clipping>> still applies.
+If depth clamping is disabled the depth values are still clipped to [eq]#0
+{leq} z~c~ {leq} w~c~# before the viewport transform.
+If depth clamping is enabled the above equation is ignored and the depth
+values are instead clamped to the slink:VkViewport pname:minDepth and
+pname:maxDepth values, which in the case of this extension can be outside of
+the `0.0` to `1.0` range.
+
+2) What happens if a resulting depth fragment is outside of the `0.0` to
+`1.0` range and the depth buffer is fixed-point rather than floating-point?
+
+*RESOLVED*: This situation can also arise without this extension (when
+fragment shaders replace depth values, for example), and this extension does
+not change the behaviour, which is defined in the <<fragops-depth,Depth
+Test>> section of the Fragment Operations chapter.
+
+=== Version History
+
+  * Revision 1, 2017-06-22 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_buffer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_buffer.adoc
new file mode 100644
index 0000000..45efcae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_buffer.adoc
@@ -0,0 +1,41 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_descriptor_buffer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-07
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Tobias Hector, AMD
+  - Stu Smith, AMD
+  - Maciej Jesionowski, AMD
+  - Boris Zanin, AMD
+  - Hans-Kristian Arntzen, Valve
+  - Connor Abbott, Valve
+  - Baldur Karlsson, Valve
+  - Mike Blumenkrantz, Valve
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+  - Rodrigo Locatti, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Jeff Leger, QUALCOMM
+  - Lionel Landwerlin, Intel
+  - Slawomir Grajewski, Intel
+
+=== Description
+
+This extension introduces new commands to put shader-accessible descriptors
+directly in memory, making the management of descriptor data more explicit.
+
+include::{generated}/interfaces/VK_EXT_descriptor_buffer.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-06-07 (Stu Smith)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_indexing.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_indexing.adoc
new file mode 100644
index 0000000..ce49fd5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_descriptor_indexing.adoc
@@ -0,0 +1,83 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_descriptor_indexing.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-02
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_descriptor_indexing.html[`SPV_EXT_descriptor_indexing`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_nonuniform_qualifier.txt[`GL_EXT_nonuniform_qualifier`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Daniel Rakos, AMD
+  - Slawomir Grajewski, Intel
+  - Tobias Hector, Imagination Technologies
+
+=== Description
+
+This extension adds several small features which together enable
+applications to create large descriptor sets containing substantially all of
+their resources, and selecting amongst those resources with dynamic
+(non-uniform) indexes in the shader.
+There are feature enables and SPIR-V capabilities for non-uniform descriptor
+indexing in the shader, and non-uniform indexing in the shader requires use
+of a new code:NonUniformEXT decoration defined in the
+`SPV_EXT_descriptor_indexing` SPIR-V extension.
+There are descriptor set layout binding creation flags enabling several
+features:
+
+  * Descriptors can be updated after they are bound to a command buffer,
+    such that the execution of the command buffer reflects the most recent
+    update to the descriptors.
+  * Descriptors that are not used by any pending command buffers can be
+    updated, which enables writing new descriptors for frame N+1 while frame
+    N is executing.
+  * Relax the requirement that all descriptors in a binding that is
+    "`statically used`" must be valid, such that descriptors that are not
+    accessed by a submission need not be valid and can be updated while that
+    submission is executing.
+  * The final binding in a descriptor set layout can have a variable size
+    (and unsized arrays of resources are allowed in the
+    `GL_EXT_nonuniform_qualifier` and `SPV_EXT_descriptor_indexing`
+    extensions).
+
+Note that it is valid for multiple descriptor arrays in a shader to use the
+same set and binding number, as long as they are all compatible with the
+descriptor type in the pipeline layout.
+This means a single array binding in the descriptor set can serve multiple
+texture dimensionalities, or an array of buffer descriptors can be used with
+multiple different block layouts.
+
+There are new descriptor set layout and descriptor pool creation flags that
+are required to opt in to the update-after-bind functionality, and there are
+separate pname:maxPerStage* and pname:maxDescriptorSet* limits that apply to
+these descriptor set layouts which may: be much higher than the pre-existing
+limits.
+The old limits only count descriptors in non-updateAfterBind descriptor set
+layouts, and the new limits count descriptors in all descriptor set layouts
+in the pipeline layout.
+
+include::{generated}/interfaces/VK_EXT_descriptor_indexing.adoc[]
+
+=== Promotion to Vulkan 1.2
+
+Functionality in this extension is included in core Vulkan 1.2, with the EXT
+suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:descriptorIndexing capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2017-07-26 (Jeff Bolz)
+  ** Internal revisions
+  * Revision 2, 2017-10-02 (Jeff Bolz)
+  ** ???
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_address_binding_report.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_address_binding_report.adoc
new file mode 100644
index 0000000..6dc1824
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_address_binding_report.adoc
@@ -0,0 +1,131 @@
+// Copyright 2016-2023 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_device_address_binding_report.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-23
+*Interactions and External Dependencies*::
+  - This extension requires `VK_EXT_debug_utils`
+*Contributors*::
+  - Ralph Potter, Samsung
+  - Spencer Fricke, Samsung
+  - Jan-Harald Fredriksen, ARM
+  - Andrew Ellem, Google
+  - Alex Walters, IMG
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension enables applications to track the binding of regions of the
+GPU virtual address space, and to associate those regions with Vulkan
+objects.
+This extension is primarily intended to aid in crash postmortem, where
+applications may wish to map a faulting GPU address to a Vulkan object.
+
+For example, a page fault triggered by accessing an address located within a
+region of the GPU virtual address space that was previously reported as
+bound and then unbound may indicate a use-after-free error.
+Similarly, faults generated by accessing virtual addresses outside the
+limits of a bound region of GPU virtual address space may indicate indexing
+beyond the bounds of a resource.
+
+include::{generated}/interfaces/VK_EXT_device_address_binding_report.adoc[]
+
+=== Issues
+
+1.) Should this extend VK_EXT_debug_utils or VK_EXT_device_memory_report?
+
+*RESOLVED*: Extend VK_EXT_debug_utils.
+VK_EXT_device_memory_report focuses on memory allocations and would not
+normally trigger callbacks in all of the situations where
+VK_EXT_device_address_binding_report is expected to.
+
+2.) Should this extension cover all Vulkan object types, or only resources
+such as buffers and images?
+
+*RESOLVED*: The extension covers all Vulkan objects, and is not restricted
+to objects backed by VkDeviceMemory objects.
+
+3.) Should reallocation be identified explicitly, or as a unbind/bind pair?
+
+*RESOLVED*: Reallocation should be represented as an unbind/bind pair.
+
+4.) Can multiple Vulkan objects share an overlapping virtual address range?
+
+*RESOLVED*: Yes.
+This can be expected to occur due to resources aliasing.
+
+5.) Can a single Vulkan object be associated with multiple virtual address
+ranges concurrently?
+
+*RESOLVED*: Yes.
+These should be reported via multiple calls to the reporting callback.
+
+6.) Should the virtual address ranges associated with internal allocations
+such as memory pools be reported?
+
+*RESOLVED*: Virtual address ranges associated with internal allocations
+should only be reported when they become associated with a specific Vulkan
+object.
+In the case of internal pool allocations, a bind event should be reported
+when resources from the pool are assigned to a Vulkan object, and an unbind
+event should be reported when those resources are returned to the pool.
+Implementations should not report the binding or unbinding of virtual
+address ranges for which there are no related API objects visible to the
+application developer.
+
+7.) Can an implementation report binding a virtual address range at VkImage
+or VkImageView creation, rather than in response to vkBindImageMemory?
+
+*RESOLVED*: Yes.
+Virtual address range binding should be reported at the appropriate point at
+which it occurs within the implementation.
+This extension does not mandate when that should occur, and applications
+should anticipate receiving callback events at any point after registering
+callbacks.
+
+8.) Can reporting of binding/unbinding be deferred until a resource is
+referenced by an executing command buffer?
+
+*RESOLVED*: Changes to the virtual address ranges associated with a Vulkan
+object should be reported as close as possible to where they occur within
+the implementation.
+If virtual address binding is deferred, then the callback should also be
+deferred to match.
+
+9.) Do bind/unbind callbacks have to form matched pairs? Can a large region
+be bound, and then subregions unbound, resulting in fragmentation?
+
+*RESOLVED*: Splitting of virtual address regions, and unmatched bind/unbind
+callbacks may occur.
+Developers should anticipate that sparse memory may exhibit this behaviour.
+
+10.) The specification mandates that a callback must: be triggered whenever
+a GPU virtual address range associated with any Vulkan object is bound or
+unbound.
+Do we need queries or properties indicating which Vulkan objects will report
+binding modifications?
+
+*RESOLVED*: No.
+This extension is not intended to mandate how and when implementations bind
+virtual ranges to objects.
+Adding queries or properties would constrain implementations, which might
+otherwise vary how virtual address bindings occur based on usage.
+
+11.) Should vkAllocateMemory and vkFreeMemory trigger reporting callbacks?
+
+*RESOLVED*: If an implementation binds a GPU virtual address range when
+vkAllocateMemory is called, then the callbacks must be triggered associating
+the virtual address range with the VkDeviceMemory object.
+If the device memory is subsequently bound to a buffer or image via
+vkBind*Memory, the callbacks should be triggered a second time, reporting
+the association between virtual address range and the buffer/image.
+
+=== Version History
+
+  * Revision 1, 2020-09-23 (Ralph Potter)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_fault.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_fault.adoc
new file mode 100644
index 0000000..7b5c9b9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_fault.adoc
@@ -0,0 +1,44 @@
+// Copyright 2017-2022 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_device_fault.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-10
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ralph Potter, Samsung
+  - Stuart Smith, AMD
+  - Jan-Harald Fredriksen, ARM
+  - Mark Bellamy, ARM
+  - Andrew Ellem, Google
+  - Alex Walters, IMG
+  - Jeff Bolz, NVIDIA
+  - Baldur Karlsson, Valve
+
+=== Description
+
+Device loss can be triggered by a variety of issues, including invalid API
+usage, implementation errors, or hardware failures.
+
+This extension introduces a new command: flink:vkGetDeviceFaultInfoEXT,
+which may be called subsequent to a ename:VK_ERROR_DEVICE_LOST error code
+having been returned by the implementation.
+This command allows developers to query for additional information on GPU
+faults which may have caused device loss, and to generate binary crash
+dumps, which may be loaded into external tools for further diagnosis.
+
+include::{generated}/interfaces/VK_EXT_device_fault.adoc[]
+
+=== Version History
+
+  * Revision 2, 2023-04-05 (Ralph Potter)
+  ** Restored two missing members to the XML definition of
+     VkDeviceFaultVendorBinaryHeaderVersionOneEXT.
+     No functional change to the specification.
+  * Revision 1, 2020-10-19 (Ralph Potter)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_memory_report.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_memory_report.adoc
new file mode 100644
index 0000000..48db5ca
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_device_memory_report.adoc
@@ -0,0 +1,162 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_device_memory_report.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-01-06
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Yiwei Zhang, Google
+  - Jesse Hall, Google
+
+=== Description
+
+This device extension allows registration of device memory event callbacks
+upon device creation, so that applications or middleware can obtain detailed
+information about memory usage and how memory is associated with Vulkan
+objects.
+This extension exposes the actual underlying device memory usage, including
+allocations that are not normally visible to the application, such as memory
+consumed by flink:vkCreateGraphicsPipelines.
+It is intended primarily for use by debug tooling rather than for production
+applications.
+
+include::{generated}/interfaces/VK_EXT_device_memory_report.adoc[]
+
+=== Issues
+
+1) Should this be better expressed as an extension to VK_EXT_debug_utils and
+its general-purpose messenger construct?
+
+*RESOLVED*: No.
+The intended lifecycle is quite different.
+We want to make this extension tied to the device's lifecycle.
+Each ICD just handles its own implementation of this extension, and this
+extension will only be directly exposed from the ICD.
+So we can avoid the extra implementation complexity used to accommodate the
+flexibility of `apiext:VK_EXT_debug_utils` extension.
+
+2) Can we extend and use the existing internal allocation callbacks instead
+of adding the new callback structure in this extension?
+
+*RESOLVED*: No.
+Our memory reporting layer that combines this information with other memory
+information it collects directly (e.g. bindings of resources to
+slink:VkDeviceMemory) would have to intercept all entry points that take a
+slink:VkAllocationCallbacks parameter and inject its own
+pname:pfnInternalAllocation and pname:pfnInternalFree.
+That may be doable for the extensions we know about, but not for ones we do
+not.
+The proposal would work fine in the face of most unknown extensions.
+But even for ones we know about, since apps can provide a different set of
+callbacks and userdata and those can be retained by the driver and used
+later (esp.
+for pool object, but not just those), we would have to dynamically allocate
+the interception trampoline every time.
+That is getting to be an unreasonably large amount of complexity and
+(possibly) overhead.
+
+We are interested in both alloc/free and import/unimport.
+The latter is fairly important for tracking (and avoiding double-counting)
+of swapchain images (still true with "`native swapchains`" based on external
+memory) and media/camera interop.
+Though we might be able to handle this with additional
+elink:VkInternalAllocationType values, for import/export we do want to be
+able to tie this to the external resource, which is one thing that the
+pname:memoryObjectId is for.
+
+The internal alloc/free callbacks are not extensible except via new
+elink:VkInternalAllocationType values.
+The slink:VkDeviceMemoryReportCallbackDataEXT in this extension is
+extensible.
+That was deliberate: there is a real possibility we will want to get extra
+information in the future.
+As one example, currently this reports only physical allocations, but we
+believe there are interesting cases for tracking how populated that VA
+region is.
+
+The callbacks are clearly specified as only callable within the context of a
+call from the app into Vulkan.
+We believe there are some cases where drivers can allocate device memory
+asynchronously.
+This was one of the sticky issues that derailed the internal device memory
+allocation reporting design (which is essentially what this extension is
+trying to do) leading up to 1.0.
+
+slink:VkAllocationCallbacks is described in a section called "`Host memory`"
+and the intro to it is very explicitly about host memory.
+The other callbacks are all inherently about host memory.
+But this extension is very focused on device memory.
+
+3) Should the callback be reporting which heap is used?
+
+*RESOLVED*: Yes.
+It is important for non-UMA systems to have all the device memory
+allocations attributed to the corresponding device memory heaps.
+For internally-allocated device memory, pname:heapIndex will always
+correspond to an advertised heap, rather than having a magic value
+indicating a non-advertised heap.
+Drivers can advertise heaps that do not have any corresponding memory types
+if they need to.
+
+4) Should we use an array of callback for the layers to intercept instead of
+chaining multiple of the slink:VkDeviceDeviceMemoryReportCreateInfoEXT
+structures in the pname:pNext of slink:VkDeviceCreateInfo?
+
+*RESOLVED* No.
+The pointer to the slink:VkDeviceDeviceMemoryReportCreateInfoEXT structure
+itself is const and you cannot just cast it away.
+Thus we cannot update the callback array inside the structure.
+In addition, we cannot drop this pname:pNext chain either, so making a copy
+of this whole structure does not work either.
+
+5) Should we track bulk allocations shared among multiple objects?
+
+*RESOLVED* No.
+Take the shader heap as an example.
+Some implementations will let multiple slink:VkPipeline objects share the
+same shader heap.
+We are not asking the implementation to report ename:VK_OBJECT_TYPE_PIPELINE
+along with a dlink:VK_NULL_HANDLE for this bulk allocation.
+Instead, this bulk allocation is considered as a layer below what this
+extension is interested in.
+Later, when the actual slink:VkPipeline objects are created by suballocating
+from the bulk allocation, we ask the implementation to report the valid
+handles of the slink:VkPipeline objects along with the actual suballocated
+sizes and different pname:memoryObjectId.
+
+6) Can we require the callbacks to be always called in the same thread with
+the Vulkan commands?
+
+*RESOLVED* No.
+Some implementations might choose to multiplex work from multiple
+application threads into a single backend thread and perform JIT allocations
+as a part of that flow.
+Since this behavior is theoretically legit, we cannot require the callbacks
+to be always called in the same thread with the Vulkan commands, and the
+note is to remind the applications to handle this case properly.
+
+7) Should we add an additional "`allocation failed`" event type with things
+like size and heap index reported?
+
+*RESOLVED* Yes.
+This fits in well with the callback infrastructure added in this extension,
+and implementation touches the same code and has the same overheads as the
+rest of the extension.
+It could help debugging things like getting an
+ename:VK_ERROR_OUT_OF_HOST_MEMORY error when ending a command buffer.
+Right now the allocation failure could have happened anywhere during
+recording, and a callback would be really useful to understand where and
+why.
+
+=== Version History
+
+  * Revision 1, 2020-08-26 (Yiwei Zhang)
+  ** Initial version
+  * Revision 2, 2021-01-06 (Yiwei Zhang)
+  ** Minor description update
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_direct_mode_display.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_direct_mode_display.adoc
new file mode 100644
index 0000000..a97aee7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_direct_mode_display.adoc
@@ -0,0 +1,53 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_direct_mode_display.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Pierre Boudier, NVIDIA
+  - James Jones, NVIDIA
+  - Damien Leone, NVIDIA
+  - Pierre-Loup Griffais, Valve
+  - Liam Middlebrook, NVIDIA
+
+=== Description
+
+This is extension, along with related platform extensions, allows
+applications to take exclusive control of displays associated with a native
+windowing system.
+This is especially useful for virtual reality applications that wish to hide
+HMDs (head mounted displays) from the native platform's display management
+system, desktop, and/or other applications.
+
+include::{generated}/interfaces/VK_EXT_direct_mode_display.adoc[]
+
+=== Issues
+
+1) Should this extension and its related platform-specific extensions
+leverage `apiext:VK_KHR_display`, or provide separate equivalent interfaces.
+
+*RESOLVED*: Use `apiext:VK_KHR_display` concepts and objects.
+`apiext:VK_KHR_display` can be used to enumerate all displays on the system,
+including those attached to/in use by a window system or native platform,
+but `apiext:VK_KHR_display_swapchain` will fail to create a swapchain on
+in-use displays.
+This extension and its platform-specific children will allow applications to
+grab in-use displays away from window systems and/or native platforms,
+allowing them to be used with `apiext:VK_KHR_display_swapchain`.
+
+2) Are separate calls needed to acquire displays and enable direct mode?
+
+*RESOLVED*: No, these operations happen in one combined command.
+Acquiring a display puts it into direct mode.
+
+=== Version History
+
+  * Revision 1, 2016-12-13 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_directfb_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_directfb_surface.adoc
new file mode 100644
index 0000000..34f1780
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_directfb_surface.adoc
@@ -0,0 +1,29 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_directfb_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-06-16
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Nicolas Caramelli
+
+=== Description
+
+The `VK_EXT_directfb_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a DirectFB
+code:IDirectFBSurface, as well as a query to determine support for rendering
+via DirectFB.
+
+include::{generated}/interfaces/VK_EXT_directfb_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-06-16 (Nicolas Caramelli)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_discard_rectangles.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_discard_rectangles.adoc
new file mode 100644
index 0000000..ef3ec0e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_discard_rectangles.adoc
@@ -0,0 +1,57 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_discard_rectangles.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-01-18
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_KHR_device_group`
+  - Interacts with Vulkan 1.1
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension provides additional orthogonally aligned "`discard
+rectangles`" specified in framebuffer-space coordinates that restrict
+rasterization of all points, lines and triangles.
+
+From zero to an implementation-dependent limit (specified by
+pname:maxDiscardRectangles) number of discard rectangles can be operational
+at once.
+When one or more discard rectangles are active, rasterized fragments can
+either survive if the fragment is within any of the operational discard
+rectangles (ename:VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT mode) or be
+rejected if the fragment is within any of the operational discard rectangles
+(ename:VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT mode).
+
+These discard rectangles operate orthogonally to the existing scissor test
+functionality.
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+The discard rectangles can be different for each physical device in a device
+group by specifying the device mask and setting discard rectangle dynamic
+state.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+Version 2 of this extension introduces new dynamic states
+ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT and
+ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT, and the corresponding
+functions flink:vkCmdSetDiscardRectangleEnableEXT and
+flink:vkCmdSetDiscardRectangleModeEXT.
+Applications that use these dynamic states must ensure the implementation
+advertises at least pname:specVersion `2` of this extension.
+
+include::{generated}/interfaces/VK_EXT_discard_rectangles.adoc[]
+
+=== Version History
+
+  * Revision 2, 2023-01-18 (Piers Daniell)
+  ** Add dynamic states for discard rectangle enable/disable and mode.
+
+  * Revision 1, 2016-12-22 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_control.adoc
new file mode 100644
index 0000000..efa0204
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_control.adoc
@@ -0,0 +1,58 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_display_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Pierre Boudier, NVIDIA
+  - James Jones, NVIDIA
+  - Damien Leone, NVIDIA
+  - Pierre-Loup Griffais, Valve
+  - Daniel Vetter, Intel
+
+=== Description
+
+This extension defines a set of utility functions for use with the
+`apiext:VK_KHR_display` and `apiext:VK_KHR_display_swapchain` extensions.
+
+include::{generated}/interfaces/VK_EXT_display_control.adoc[]
+
+=== Issues
+
+1) Should this extension add an explicit "`WaitForVsync`" API or a fence
+signaled at vsync that the application can wait on?
+
+*RESOLVED*: A fence.
+A separate API could later be provided that allows exporting the fence to a
+native object that could be inserted into standard run loops on POSIX and
+Windows systems.
+
+2) Should callbacks be added for a vsync event, or in general to monitor
+events in Vulkan?
+
+*RESOLVED*: No, fences should be used.
+Some events are generated by interrupts which are managed in the kernel.
+In order to use a callback provided by the application, drivers would need
+to have the userspace driver spawn threads that would wait on the kernel
+event, and hence the callbacks could be difficult for the application to
+synchronize with its other work given they would arrive on a foreign thread.
+
+3) Should vblank or scanline events be exposed?
+
+*RESOLVED*: Vblank events.
+Scanline events could be added by a separate extension, but the latency of
+processing an interrupt and waking up a userspace event is high enough that
+the accuracy of a scanline event would be rather low.
+Further, per-scanline interrupts are not supported by all hardware.
+
+=== Version History
+
+  * Revision 1, 2016-12-13 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_surface_counter.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_surface_counter.adoc
new file mode 100644
index 0000000..bba9716
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_display_surface_counter.adoc
@@ -0,0 +1,32 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_display_surface_counter.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Pierre Boudier, NVIDIA
+  - James Jones, NVIDIA
+  - Damien Leone, NVIDIA
+  - Pierre-Loup Griffais, Valve
+  - Daniel Vetter, Intel
+
+=== Description
+
+This extension defines a vertical blanking period counter associated with
+display surfaces.
+It provides a mechanism to query support for such a counter from a
+slink:VkSurfaceKHR object.
+
+include::{generated}/interfaces/VK_EXT_display_surface_counter.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-12-13 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_dynamic_rendering_unused_attachments.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_dynamic_rendering_unused_attachments.adoc
new file mode 100644
index 0000000..837fae6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_dynamic_rendering_unused_attachments.adoc
@@ -0,0 +1,40 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_dynamic_rendering_unused_attachments.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-05-22
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Daniel Story, Nintendo
+  - Hans-Kristian Arntzen, Valve
+  - Jan-Harald Fredriksen, Arm
+  - James Fitzpatrick, Imagination Technologies
+  - Pan Gao, Huawei Technologies
+  - Ricardo Garcia, Igalia
+  - Stu Smith, AMD
+
+=== Description
+
+This extension lifts some restrictions in the
+`apiext:VK_KHR_dynamic_rendering` extension to allow render pass instances
+and bound pipelines within those render pass instances to have an unused
+attachment specified in one but not the other.
+It also allows pipelines to use different formats in a render pass as long
+the attachment is NULL.
+
+include::{generated}/interfaces/VK_EXT_dynamic_rendering_unused_attachments.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2023-05-22 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state.adoc
new file mode 100644
index 0000000..d79f522
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state.adoc
@@ -0,0 +1,63 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-12-09
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Dan Ginsburg, Valve Corporation
+  - Graeme Leese, Broadcom
+  - Hans-Kristian Arntzen, Valve Corporation
+  - Jan-Harald Fredriksen, Arm Limited
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Jesse Hall, Google
+  - Philip Rebohle, Valve Corporation
+  - Stuart Smith, Imagination Technologies
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension adds some more dynamic state to support applications that
+need to reduce the number of pipeline state objects they compile and bind.
+
+include::{generated}/interfaces/VK_EXT_extended_dynamic_state.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+This extension has been partially promoted.
+All dynamic state enumerants and entry points in this extension are included
+in core Vulkan 1.3, with the EXT suffix omitted.
+The feature structure is not promoted.
+Extension interfaces that were promoted remain available as aliases of the
+core functionality.
+
+
+=== Issues
+
+1) Why are the values of pname:pStrides in flink:vkCmdBindVertexBuffers2
+limited to be between 0 and the maximum extent of the binding, when this
+restriction is not present for the same static state?
+
+Implementing these edge cases adds overhead to some implementations that
+would require significant cost when calling this function, and the intention
+is that this state should be more or less free to change.
+
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+apiext:VK_EXT_vertex_input_dynamic_state allows the stride to be changed
+freely when supported via flink:vkCmdSetVertexInputEXT.
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+
+=== Version History
+
+  * Revision 1, 2019-12-09 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state2.adoc
new file mode 100644
index 0000000..fa0401a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state2.adoc
@@ -0,0 +1,43 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-04-12
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds some more dynamic state to support applications that
+need to reduce the number of pipeline state objects they compile and bind.
+
+include::{generated}/interfaces/VK_EXT_extended_dynamic_state2.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+This extension has been partially promoted.
+The dynamic state enumerants ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT,
+ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT, and
+ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT; and the corresponding
+entry points in this extension are included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The enumerants and entry points for dynamic logic operation and patch
+control points are not promoted, nor is the feature structure.
+Extension interfaces that were promoted remain available as aliases of the
+core functionality.
+
+=== Version History
+
+  * Revision 1, 2021-04-12 (Vikram Kushwaha)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state3.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state3.adoc
new file mode 100644
index 0000000..9ed9706
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_extended_dynamic_state3.adoc
@@ -0,0 +1,51 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state3.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Daniel Story, Nintendo
+  - Jamie Madill, Google
+  - Jan-Harald Fredriksen, Arm
+  - Faith Ekstrand, Collabora
+  - Mike Blumenkrantz, Valve
+  - Ricardo Garcia, Igalia
+  - Samuel Pitoiset, Valve
+  - Shahbaz Youssefi, Google
+  - Stu Smith, AMD
+  - Tapani Pälli, Intel
+
+=== Description
+
+This extension adds almost all of the remaining pipeline state as dynamic
+state to help applications further reduce the number of monolithic pipelines
+they need to create and bind.
+
+include::{generated}/interfaces/VK_EXT_extended_dynamic_state3.adoc[]
+
+=== Issues
+
+1) What about the VkPipelineMultisampleStateCreateInfo state
+`sampleShadingEnable` and `minSampleShading`?
+
+*UNRESOLVED*::
+  - `sampleShadingEnable` and `minSampleShading` are required when compiling
+    the fragment shader, and it is not meaningful to set them dynamically
+    since they always need to match the fragment shader state, so this
+    hardware state may as well just come from the pipeline with the fragment
+    shader.
+
+=== Version History
+
+  * Revision 2, 2022-07-18 (Piers Daniell)
+  ** Added rasterizationSamples
+
+  * Revision 1, 2022-05-18 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_acquire_unmodified.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_acquire_unmodified.adoc
new file mode 100644
index 0000000..2fcef5b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_acquire_unmodified.adoc
@@ -0,0 +1,31 @@
+// Copyright 2023 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_external_memory_acquire_unmodified.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-03-09
+*Contributors*::
+  - Lina Versace, Google
+  - Chia-I Wu, Google
+  - James Jones, NVIDIA
+  - Yiwei Zhang, Google
+
+=== Description
+
+A memory barrier may: have a performance penalty when acquiring ownership of
+a subresource range from an external queue family.
+This extension provides API that may: reduce the performance penalty if
+ownership of the subresource range was previously released to the external
+queue family and if the resource's memory has remained unmodified between
+the release and acquire operations.
+
+include::{generated}/interfaces/VK_EXT_external_memory_acquire_unmodified.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-03-09 (Lina Versace)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_dma_buf.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_dma_buf.adoc
new file mode 100644
index 0000000..3f7a597
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_dma_buf.adoc
@@ -0,0 +1,59 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_external_memory_dma_buf.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-10
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Lina Versace, Google
+  - James Jones, NVIDIA
+  - Faith Ekstrand, Intel
+
+=== Description
+
+A code:dma_buf is a type of file descriptor, defined by the Linux kernel,
+that allows sharing memory across kernel device drivers and across
+processes.
+This extension enables applications to import a code:dma_buf as
+slink:VkDeviceMemory, to export slink:VkDeviceMemory as a code:dma_buf, and
+to create slink:VkBuffer objects that can: be bound to that memory.
+
+include::{generated}/interfaces/VK_EXT_external_memory_dma_buf.adoc[]
+
+=== Issues
+
+1) How does the application, when creating a slink:VkImage that it intends
+to bind to code:dma_buf slink:VkDeviceMemory containing an externally
+produced image, specify the memory layout (such as row pitch and DRM format
+modifier) of the slink:VkImage? In other words, how does the application
+achieve behavior comparable to that provided by
+https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+and
+https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
+?
+
+*RESOLVED*: Features comparable to those in
+https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+and
+https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
+will be provided by an extension layered atop this one.
+
+2) Without the ability to specify the memory layout of external code:dma_buf
+images, how is this extension useful?
+
+*RESOLVED*: This extension provides exactly one new feature: the ability to
+import/export between code:dma_buf and slink:VkDeviceMemory.
+This feature, together with features provided by
+`apiext:VK_KHR_external_memory_fd`, is sufficient to bind a slink:VkBuffer
+to code:dma_buf.
+
+=== Version History
+
+  * Revision 1, 2017-10-10 (Lina Versace)
+  ** Squashed internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_host.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_host.adoc
new file mode 100644
index 0000000..1b7a3d0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_external_memory_host.adoc
@@ -0,0 +1,91 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_external_memory_host.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-11-10
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jaakko Konttinen, AMD
+  - David Mao, AMD
+  - Daniel Rakos, AMD
+  - Tobias Hector, Imagination Technologies
+  - Faith Ekstrand, Intel
+  - James Jones, NVIDIA
+
+=== Description
+
+This extension enables an application to import host allocations and host
+mapped foreign device memory to Vulkan memory objects.
+
+include::{generated}/interfaces/VK_EXT_external_memory_host.adoc[]
+
+=== Issues
+
+1) What memory type has to be used to import host pointers?
+
+*RESOLVED*: Depends on the implementation.
+Applications have to use the new flink:vkGetMemoryHostPointerPropertiesEXT
+command to query the supported memory types for a particular host pointer.
+The reported memory types may include memory types that come from a memory
+heap that is otherwise not usable for regular memory object allocation and
+thus such a heap's size may be zero.
+
+2) Can the application still access the contents of the host allocation
+after importing?
+
+*RESOLVED*: Yes.
+However, usual synchronization requirements apply.
+
+3) Can the application free the host allocation?
+
+*RESOLVED*: No, it violates valid usage conditions.
+Using the memory object imported from a host allocation that is already
+freed thus results in undefined: behavior.
+
+4) Is flink:vkMapMemory expected to return the same host address which was
+specified when importing it to the memory object?
+
+*RESOLVED*: No.
+Implementations are allowed to return the same address but it is not
+required.
+Some implementations might return a different virtual mapping of the
+allocation, although the same physical pages will be used.
+
+5) Is there any limitation on the alignment of the host pointer and/or size?
+
+*RESOLVED*: Yes.
+Both the address and the size have to be an integer multiple of
+pname:minImportedHostPointerAlignment.
+In addition, some platforms and foreign devices may have additional
+restrictions.
+
+6) Can the same host allocation be imported multiple times into a given
+physical device?
+
+*RESOLVED*: No, at least not guaranteed by this extension.
+Some platforms do not allow locking the same physical pages for device
+access multiple times, so attempting to do it may result in undefined:
+behavior.
+
+7) Does this extension support exporting the new handle type?
+
+*RESOLVED*: No.
+
+8) Should we include the possibility to import host mapped foreign device
+memory using this API?
+
+*RESOLVED*: Yes, through a separate handle type.
+Implementations are still allowed to support only one of the handle types
+introduced by this extension by not returning import support for a
+particular handle type as returned in slink:VkExternalMemoryPropertiesKHR.
+
+=== Version History
+
+  * Revision 1, 2017-11-10 (Daniel Rakos)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_filter_cubic.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_filter_cubic.adoc
new file mode 100644
index 0000000..f077513
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_filter_cubic.adoc
@@ -0,0 +1,43 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_filter_cubic.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-12-13
+*Contributors*::
+  - Bill Licea-Kane, Qualcomm Technologies, Inc.
+  - Andrew Garrard, Samsung
+  - Daniel Koch, NVIDIA
+  - Donald Scorgie, Imagination Technologies
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Tobias Hector, AMD
+  - Tom Olson, ARM
+  - Stuart Smith, Imagination Technologies
+
+=== Description
+
+`VK_EXT_filter_cubic` extends `VK_IMG_filter_cubic`.
+
+It documents cubic filtering of other image view types.
+It adds new structures that can: be added to the pname:pNext chain of
+slink:VkPhysicalDeviceImageFormatInfo2 and slink:VkImageFormatProperties2
+that can: be used to determine which image types and which image view types
+support cubic filtering.
+
+include::{generated}/interfaces/VK_EXT_filter_cubic.adoc[]
+
+=== Version History
+
+  * Revision 3, 2019-12-13 (wwlk)
+  ** Delete requirement to cubic filter the formats USCALED_PACKED32,
+     SSCALED_PACKED32, UINT_PACK32, and SINT_PACK32 (cut/paste error)
+  * Revision 2, 2019-06-05 (wwlk)
+  ** Clarify 1D optional
+  * Revision 1, 2019-01-24 (wwlk)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map.adoc
new file mode 100644
index 0000000..81205f5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map.adoc
@@ -0,0 +1,178 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_fragment_invocation_density.html[`SPV_EXT_fragment_invocation_density`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_fragment_invocation_density.txt[`GL_EXT_fragment_invocation_density`]
+*Contributors*::
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Robert VanReenen, Qualcomm Technologies, Inc.
+  - Jonathan Wicks, Qualcomm Technologies, Inc.
+  - Tate Hornbeck, Qualcomm Technologies, Inc.
+  - Sam Holmes, Qualcomm Technologies, Inc.
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Bolz, NVIDIA
+  - Pat Brown, NVIDIA
+  - Daniel Rakos, AMD
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension allows an application to specify areas of the render target
+where the fragment shader may be invoked fewer times.
+These fragments are broadcasted out to multiple pixels to cover the render
+target.
+
+The primary use of this extension is to reduce workloads in areas where
+lower quality may not be perceived such as the distorted edges of a lens or
+the periphery of a user's gaze.
+
+include::{generated}/interfaces/VK_EXT_fragment_density_map.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-fraginvocationcount,code:FragInvocationCountEXT>>
+  * <<interfaces-builtin-variables-fragsize,code:FragSizeEXT>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentDensityEXT,
+    code:FragmentDensityEXT>>
+
+ifdef::isrefpage[]
+=== Examples
+
+==== Fragment Density Map
+
+An image can be bound as a fragment density map attachment to a render pass.
+This image contains normalized (x, y) float component fragment density
+values for regions of the framebuffer that will be used in rasterization for
+every subpass.
+A float component ranges from (0.0, 1.0] where 1.0 means full density along
+that axis.
+Implementations <<fragmentdensitymapops,use these values as hints>> to
+optimize rendering in areas of low density.
+Subpass color and depth attachments can be created as subsampled, which can
+help to further optimize rendering in areas of low density.
+
+The density map image can be modified by the application until calling
+fname:vkCmdBeginRenderPass for the render pass that uses the image.
+If ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT is used,
+then the application can modify the image until the device reads it during
+ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT.
+
+[source,c++]
+----
+// Create fragment density map
+VkImageCreateInfo imageCreateInfo =
+{
+   .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+   .pNext = nullptr,
+   .flags = 0,
+   .imageType = VK_IMAGE_TYPE_2D,    // Must be 2D
+   .format = VK_FORMAT_R8G8_UNORM,   // Must have VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT
+   .extend = {64, 64, 1},
+   .mipLevels = 1,
+   .arrayLayers = 2,                 // 1 for each multiview view
+   .samples = VK_SAMPLE_COUNT_1_BIT, // Must be 1x MSAA
+   .tiling = tiling,
+   .usage = VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
+   // ...
+};
+
+vkCreateImage(device, &imageCreateInfo, nullptr, &fdmImage);
+
+VkImageViewCreateInfo viewCreateInfo =
+{
+   .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+   .pNext = nullptr,
+   .flags = 0,                      // VkImageViewCreateFlags
+   .image = fdmImage,
+   .viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+   .format = VK_FORMAT_R8G8_UNORM,
+   .components = { 0 },             // VK_COMPONENT_SWIZZLE_IDENTITY
+   .subresourceRange = {
+        .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+        .baseMipLevel = 0,
+        .levelCount = 1,
+        .baseArrayLayer = 0,
+        .layerCount = 2,
+   }
+};
+
+vkCreateImageView(device, &viewCreateInfo, nullptr, &fdmImageView);
+
+// Add fdmImage to render pass
+
+VkAttachmentReference fragmentDensityMapAttachmentReference =
+{
+   fdmAttachmentIdx,
+   VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT,
+};
+
+VkRenderPassFragmentDensityMapCreateInfoEXT fdmAttachmentCreateInfo =
+{
+   VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT,
+   // ...
+   fragmentDensityMapAttachmentReference,
+};
+
+VkRenderPassCreateInfo2 renderPassCreateInfo =
+{
+   VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
+   &fdmAttachmentCreateInfo,
+   // ...
+};
+
+vkCreateRenderPass2(device, &renderPassCreateInfo, nullptr, &renderPass);
+
+// Add fdmImage to framebuffer
+// Color attachments can be created with VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+// All attachments must be created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSETS_BIT_EXT
+VkFramebufferCreateInfo framebufferCreateInfo =
+{
+   .sType = VK_STRUCTURE_TYPE_FRAME_BUFFER_CREATE_INFO,
+   // ...
+   .renderPass = renderPass,
+   // ...
+   .pAttachments = pAttachments, // Includes fdmImageView at fdmAttachmentIdx
+   .width = 1024,
+   .height = 1024,
+   .layers = 1
+};
+
+vkCreateFramebuffer(device, &framebufferCreateInfo, nullptr, &framebuffer);
+
+// Start recording render pass in command buffer
+
+VkRenderPassBeginInfo renderPassBeginInfo =
+{
+   .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+   // ...
+   .renderPass = renderPass,
+   .framebuffer = framebuffer,
+   // ...
+};
+
+// Can no longer modify the fdmImage's contents after this call
+vkCmdBeginRenderPass2(commandBuffer, &renderPassBeginInfo, pSubpassBeginInfo);
+----
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2018-09-25 (Matthew Netsch)
+  ** Initial version
+  * Revision 2, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map2.adoc
new file mode 100644
index 0000000..eccfe81
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_density_map2.adoc
@@ -0,0 +1,96 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-06-16
+*Interactions and External Dependencies*::
+  - Interacts with Vulkan 1.1
+*Contributors*::
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Jonathan Tinkham, Qualcomm Technologies, Inc.
+  - Jonathan Wicks, Qualcomm Technologies, Inc.
+  - Jan-Harald Fredriksen, ARM
+
+=== Description
+
+This extension adds additional features and properties to
+`apiext:VK_EXT_fragment_density_map` in order to reduce fragment density map
+host latency as well as improved queries for subsampled sampler
+implementation-dependent behavior.
+
+include::{generated}/interfaces/VK_EXT_fragment_density_map2.adoc[]
+
+ifdef::isrefpage[]
+=== Examples
+
+==== Additional Limits for Subsampling
+
+Some implementations may not support subsampled samplers if certain
+implementation limits are not observed by the app.
+slink:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT provides additional
+limits to require apps remain within these boundaries if they wish to use
+subsampling.
+
+==== Improved Host Latency
+
+By default, the fragment density map is locked by the host for reading
+between flink:vkCmdBeginRenderPass during recording and
+ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT during draw
+execution.
+
+This can introduce large latency for certain use cases between recording the
+frame and displaying the frame.
+Apps may wish to modify the fragment density map just before draw execution.
+
+ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT is intended
+to help address this for implementations that do not support the
+<<features-fragmentDensityMapDynamic, pname:fragmentDensityMapDynamic>>
+feature by deferring the start of the locked range to
+flink:vkEndCommandBuffer.
+
+
+[source,c++]
+----
+// Create view for fragment density map
+VkImageViewCreateInfo createInfo =
+{
+   .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+   // ...
+   .viewType = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
+   .format = fdmImage, // Created with VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+   // ...
+};
+
+// ...
+
+// Begin fragment density map render pass with deferred view.
+// By default, fdmImage must not be modified after this call
+// unless view is created with the FDM dynamic or deferred flags.
+vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+
+// ...
+
+vkCmdEndRenderPass(VkCommandBuffer commandBuffer);
+
+// Can keep making modifications to deferred fragment density maps
+// while recording commandBuffer ...
+
+result = vkEndCommandBuffer(commandBuffer);
+
+// Must now freeze modifying fdmImage until after the
+// VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT of
+// the last executing draw that uses the fdmImage in the
+// last submit of commandBuffer.
+----
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2020-06-16 (Matthew Netsch)
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_shader_interlock.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_shader_interlock.adoc
new file mode 100644
index 0000000..0bb7f69
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_fragment_shader_interlock.adoc
@@ -0,0 +1,63 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_shader_interlock.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-02
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_fragment_shader_interlock.html[`SPV_EXT_fragment_shader_interlock`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_fragment_shader_interlock.txt[`GL_ARB_fragment_shader_interlock`]
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Ruihao Zhang, Qualcomm
+  - Slawomir Grajewski, Intel
+  - Spencer Fricke, Samsung
+
+=== Description
+
+This extension adds support for the code:FragmentShaderPixelInterlockEXT,
+code:FragmentShaderSampleInterlockEXT, and
+code:FragmentShaderShadingRateInterlockEXT capabilities from the
+`SPV_EXT_fragment_shader_interlock` extension to Vulkan.
+
+Enabling these capabilities provides a critical section for fragment shaders
+to avoid overlapping pixels being processed at the same time, and certain
+guarantees about the ordering of fragment shader invocations of fragments of
+overlapping pixels.
+
+This extension can be useful for algorithms that need to access per-pixel
+data structures via shader loads and stores.
+Algorithms using this extension can access per-pixel data structures in
+critical sections without other invocations accessing the same per-pixel
+data.
+Additionally, the ordering guarantees are useful for cases where the API
+ordering of fragments is meaningful.
+For example, applications may be able to execute programmable blending
+operations in the fragment shader, where the destination buffer is read via
+image loads and the final value is written via image stores.
+
+include::{generated}/interfaces/VK_EXT_fragment_shader_interlock.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentShaderSampleInterlockEXT,
+    code:FragmentShaderInterlockEXT>>
+  * <<spirvenv-capabilities-table-FragmentShaderPixelInterlockEXT,
+    code:FragmentShaderPixelInterlockEXT>>
+  * <<spirvenv-capabilities-table-FragmentShaderShadingRateInterlockEXT,
+    code:FragmentShaderShadingRateInterlockEXT>>
+
+=== Version History
+
+  * Revision 1, 2019-05-24 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_frame_boundary.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_frame_boundary.adoc
new file mode 100644
index 0000000..03a03c3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_frame_boundary.adoc
@@ -0,0 +1,35 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_frame_boundary.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-06-14
+*Contributors*::
+  - James Fitzpatrick, Imagination Technologies
+  - Hugues Evrard, Google
+  - Melih Yasin Yalcin, Google
+  - Andrew Garrard, Imagination Technologies
+  - Jan-Harald Fredriksen, Arm
+  - Vassili Nikolaev, NVIDIA
+  - Ting Wei, Huawei
+
+=== Description
+
+apiext:VK_EXT_frame_boundary is a device extension that helps *tools* (such
+as debuggers) to group queue submissions per frames in non-trivial
+scenarios, typically when flink:vkQueuePresentKHR is not a relevant frame
+boundary delimiter.
+
+include::{generated}/interfaces/VK_EXT_frame_boundary.adoc[]
+
+=== Version History
+
+  * Revision 0, 2022-01-14 (Hugues Evard)
+  ** Initial proposal
+
+  * Revision 1, 2023-06-14 (James Fitzpatrick)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_full_screen_exclusive.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_full_screen_exclusive.adoc
new file mode 100644
index 0000000..d27933a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_full_screen_exclusive.adoc
@@ -0,0 +1,117 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_full_screen_exclusive.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-12
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with Vulkan 1.1
+  - Interacts with `apiext:VK_KHR_device_group`
+  - Interacts with `apiext:VK_KHR_win32_surface`
+*Contributors*::
+  - Hans-Kristian Arntzen, ARM
+  - Slawomir Grajewski, Intel
+  - Tobias Hector, AMD
+  - James Jones, NVIDIA
+  - Daniel Rakos, AMD
+  - Jeff Juliano, NVIDIA
+  - Joshua Schnarr, NVIDIA
+  - Aaron Hagan, AMD
+
+=== Description
+
+This extension allows applications to set the policy for swapchain creation
+and presentation mechanisms relating to full-screen access.
+Implementations may be able to acquire exclusive access to a particular
+display for an application window that covers the whole screen.
+This can increase performance on some systems by bypassing composition,
+however it can also result in disruptive or expensive transitions in the
+underlying windowing system when a change occurs.
+
+Applications can choose between explicitly disallowing or allowing this
+behavior, letting the implementation decide, or managing this mode of
+operation directly using the new flink:vkAcquireFullScreenExclusiveModeEXT
+and flink:vkReleaseFullScreenExclusiveModeEXT commands.
+
+include::{generated}/interfaces/VK_EXT_full_screen_exclusive.adoc[]
+
+=== Issues
+
+1) What should the extension & flag be called?
+
+*RESOLVED*: VK_EXT_full_screen_exclusive.
+
+Other options considered (prior to the app-controlled mode) were:
+
+  * VK_EXT_smooth_fullscreen_transition
+  * VK_EXT_fullscreen_behavior
+  * VK_EXT_fullscreen_preference
+  * VK_EXT_fullscreen_hint
+  * VK_EXT_fast_fullscreen_transition
+  * VK_EXT_avoid_fullscreen_exclusive
+
+2) Do we need more than a boolean toggle?
+
+*RESOLVED*: Yes.
+
+Using an enum with default/allowed/disallowed/app-controlled enables
+applications to accept driver default behavior, specifically override it in
+either direction without implying the driver is ever required to use
+full-screen exclusive mechanisms, or manage this mode explicitly.
+
+3) Should this be a KHR or EXT extension?
+
+*RESOLVED*: EXT, in order to allow it to be shipped faster.
+
+4) Can the fullscreen hint affect the surface capabilities, and if so,
+should the hint also be specified as input when querying the surface
+capabilities?
+
+*RESOLVED*: Yes on both accounts.
+
+While the hint does not guarantee a particular fullscreen mode will be used
+when the swapchain is created, it can sometimes imply particular modes will
+NOT be used.
+If the driver determines that it will opt-out of using a particular mode
+based on the policy, and knows it can only support certain capabilities if
+that mode is used, it would be confusing at best to the application to
+report those capabilities in such cases.
+Not allowing implementations to report this state to applications could
+result in situations where applications are unable to determine why
+swapchain creation fails when they specify certain hint values, which could
+result in never- terminating surface creation loops.
+
+5) Should full-screen be one word or two?
+
+*RESOLVED*: Two words.
+
+"Fullscreen" is not in my dictionary, and web searches did not turn up
+definitive proof that it is a colloquially accepted compound word.
+Documentation for the corresponding Windows API mechanisms dithers.
+The text consistently uses a hyphen, but none-the-less, there is a
+SetFullscreenState method in the DXGI swapchain object.
+Given this inconclusive external guidance, it is best to adhere to the
+Vulkan style guidelines and avoid inventing new compound words.
+
+=== Version History
+
+  * Revision 4, 2019-03-12 (Tobias Hector)
+  ** Added application-controlled mode, and related functions
+  ** Tidied up appendix
+
+  * Revision 3, 2019-01-03 (James Jones)
+  ** Renamed to VK_EXT_full_screen_exclusive
+  ** Made related adjustments to the tri-state enumerant names.
+
+  * Revision 2, 2018-11-27 (James Jones)
+  ** Renamed to VK_KHR_fullscreen_behavior
+  ** Switched from boolean flag to tri-state enum
+
+  * Revision 1, 2018-11-06 (James Jones)
+  ** Internal revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority.adoc
new file mode 100644
index 0000000..98616c9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority.adoc
@@ -0,0 +1,57 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_global_priority.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-06
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Andres Rodriguez, Valve
+  - Pierre-Loup Griffais, Valve
+  - Dan Ginsburg, Valve
+  - Mitch Singer, AMD
+
+=== Description
+
+In Vulkan, users can specify device-scope queue priorities.
+In some cases it may be useful to extend this concept to a system-wide
+scope.
+This extension provides a mechanism for callers to set their system-wide
+priority.
+The default queue priority is ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.
+
+The driver implementation will attempt to skew hardware resource allocation
+in favour of the higher-priority task.
+Therefore, higher-priority work may retain similar latency and throughput
+characteristics even if the system is congested with lower priority work.
+
+The global priority level of a queue shall take precedence over the
+per-process queue priority
+(sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
+
+Abuse of this feature may result in starving the rest of the system from
+hardware resources.
+Therefore, the driver implementation may deny requests to acquire a priority
+above the default priority (ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) if
+the caller does not have sufficient privileges.
+In this scenario ename:VK_ERROR_NOT_PERMITTED_EXT is returned.
+
+The driver implementation may fail the queue allocation request if resources
+required to complete the operation have been exhausted (either by the same
+process or a different process).
+In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+include::{generated}/interfaces/VK_EXT_global_priority.adoc[]
+
+=== Version History
+
+  * Revision 2, 2017-11-03 (Andres Rodriguez)
+  ** Fixed VkQueueGlobalPriorityEXT missing _EXT suffix
+
+  * Revision 1, 2017-10-06 (Andres Rodriguez)
+  ** First version.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority_query.adoc
new file mode 100644
index 0000000..2550f49
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_global_priority_query.adoc
@@ -0,0 +1,53 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_global_priority_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Yiwei Zhang, Google
+
+=== Description
+
+This device extension allows applications to query the global queue
+priorities supported by a queue family.
+It allows implementations to report which global priority levels are treated
+differently by the implementation, instead of silently mapping multiple
+requested global priority levels to the same internal priority, or using
+device creation failure to signal that a requested priority is not
+supported.
+It is intended primarily for use by system integration along with certain
+platform-specific priority enforcement rules.
+
+include::{generated}/interfaces/VK_EXT_global_priority_query.adoc[]
+
+=== Issues
+
+1) Can we additionally query whether a caller is permitted to acquire a
+specific global queue priority in this extension?
+
+*RESOLVED*: No.
+Whether a caller has enough privilege goes with the OS, and the Vulkan
+driver cannot really guarantee that the privilege will not change in between
+this query and the actual queue creation call.
+
+2) If more than 1 queue using global priority is requested, is there a good
+way to know which queue is failing the device creation?
+
+*RESOLVED*: No.
+There is not a good way at this moment, and it is also not quite actionable
+for the applications to know that because the information may not be
+accurate.
+Queue creation can fail because of runtime constraints like insufficient
+privilege or lack of resource, and the failure is not necessarily tied to
+that particular queue configuration requested.
+
+=== Version History
+
+  * Revision 1, 2021-03-29 (Yiwei Zhang)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_graphics_pipeline_library.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_graphics_pipeline_library.adoc
new file mode 100644
index 0000000..1e8a3b7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_graphics_pipeline_library.adoc
@@ -0,0 +1,41 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_graphics_pipeline_library.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-08-17
+*Contributors*::
+  - Tobias Hector, AMD
+  - Chris Glover, Google
+  - Jeff Leger, Qualcomm
+  - Jan-Harald Fredriksen, Arm
+  - Piers Daniell, NVidia
+  - Boris Zanin, Mobica
+  - Krzysztof Niski, NVidia
+  - Dan Ginsburg, Valve
+  - Sebastian Aaltonen, Unity
+  - Arseny Kapoulkine, Roblox
+  - Calle Lejdfors, Ubisoft
+  - Tiago Rodrigues, Ubisoft
+  - Francois Duranleau, Gameloft
+
+
+=== Description
+
+This extension allows the separate compilation of four distinct parts of
+graphics pipelines, with the intent of allowing faster pipeline loading for
+applications reusing the same shaders or state in multiple pipelines.
+Each part can be independently compiled into a graphics pipeline library,
+with a final link step required to create an executable pipeline that can be
+bound to a command buffer.
+
+include::{generated}/interfaces/VK_EXT_graphics_pipeline_library.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-08-17 (Tobias Hector)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_hdr_metadata.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_hdr_metadata.adoc
new file mode 100644
index 0000000..a13a53e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_hdr_metadata.adoc
@@ -0,0 +1,60 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_hdr_metadata.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Courtney Goeltzenleuchter, Google
+
+=== Description
+
+This extension defines two new structures and a function to assign SMPTE
+(the Society of Motion Picture and Television Engineers) 2086 metadata and
+CTA (Consumer Technology Association) 861.3 metadata to a swapchain.
+The metadata includes the color primaries, white point, and luminance range
+of the reference monitor, which all together define the color volume
+containing all the possible colors the reference monitor can produce.
+The reference monitor is the display where creative work is done and
+creative intent is established.
+To preserve such creative intent as much as possible and achieve consistent
+color reproduction on different viewing displays, it is useful for the
+display pipeline to know the color volume of the original reference monitor
+where content was created or tuned.
+This avoids performing unnecessary mapping of colors that are not
+displayable on the original reference monitor.
+The metadata also includes the pname:maxContentLightLevel and
+pname:maxFrameAverageLightLevel as defined by CTA 861.3.
+
+While the intended purpose of the metadata is to assist in the
+transformation between different color volumes of different displays and
+help achieve better color reproduction, it is not in the scope of this
+extension to define how exactly the metadata should be used in such a
+process.
+It is up to the implementation to determine how to make use of the metadata.
+
+include::{generated}/interfaces/VK_EXT_hdr_metadata.adoc[]
+
+=== Issues
+
+1) Do we need a query function?
+
+*PROPOSED*: No, Vulkan does not provide queries for state that the
+application can track on its own.
+
+2) Should we specify default if not specified by the application?
+
+*PROPOSED*: No, that leaves the default up to the display.
+
+=== Version History
+
+  * Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
+  ** Initial version
+  * Revision 2, 2018-12-19 (Courtney Goeltzenleuchter)
+  ** Correct implicit validity for VkHdrMetadataEXT structure
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_headless_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_headless_surface.adoc
new file mode 100644
index 0000000..2c64b87
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_headless_surface.adoc
@@ -0,0 +1,43 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_headless_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ray Smith, Arm
+
+=== Description
+
+The `VK_EXT_headless_surface` extension is an instance extension.
+It provides a mechanism to create slink:VkSurfaceKHR objects independently
+of any window system or display device.
+The presentation operation for a swapchain created from a headless surface
+is by default a no-op, resulting in no externally-visible result.
+
+Because there is no real presentation target, future extensions can layer on
+top of the headless surface to introduce arbitrary or customisable sets of
+restrictions or features.
+These could include features like saving to a file or restrictions to
+emulate a particular presentation target.
+
+This functionality is expected to be useful for application and driver
+development because it allows any platform to expose an arbitrary or
+customisable set of restrictions and features of a presentation engine.
+This makes it a useful portable test target for applications targeting a
+wide range of presentation engines where the actual target presentation
+engines might be scarce, unavailable or otherwise undesirable or
+inconvenient to use for general Vulkan application development.
+
+include::{generated}/interfaces/VK_EXT_headless_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-03-21 (Ray Smith)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_image_copy.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_image_copy.adoc
new file mode 100644
index 0000000..c0d8791
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_image_copy.adoc
@@ -0,0 +1,90 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_host_image_copy.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-04-26
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Faith Ekstrand, Collabora
+  - Hans-Kristian Arntzen, Valve
+  - Piers Daniell, NVIDIA
+  - Jan-Harald Fredriksen, Arm
+  - James Fitzpatrick, Imagination
+  - Daniel Story, Nintendo
+
+=== Description
+
+This extension allows applications to copy data between host memory and
+images on the host processor, without staging the data through a
+GPU-accessible buffer.
+This removes the need to allocate and manage the buffer and its associated
+memory.
+On some architectures it may also eliminate an extra copy operation.
+This extension additionally allows applications to copy data between images
+on the host.
+
+To support initializing a new image in preparation for a host copy, it is
+now possible to transition a new image to ename:VK_IMAGE_LAYOUT_GENERAL or
+other host-copyable layouts via flink:vkTransitionImageLayoutEXT.
+Additionally, it is possible to perform copies that preserve the swizzling
+layout of the image by using the ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT flag.
+In that case, the memory size needed for copies to or from a buffer can be
+retrieved by chaining slink:VkSubresourceHostMemcpySizeEXT to pname:pLayout
+in flink:vkGetImageSubresourceLayout2EXT.
+
+include::{generated}/interfaces/VK_EXT_host_image_copy.adoc[]
+
+=== Issues
+
+1) When uploading data to an image, the data is usually loaded from disk.
+Why not have the application load the data directly into a `VkDeviceMemory`
+bound to a buffer (instead of host memory), and use
+flink:vkCmdCopyBufferToImage? The same could be done when downloading data
+from an image.
+
+*RESOLVED*: This may not always be possible.
+Complicated Vulkan applications such as game engines often have decoupled
+subsystems for streaming data and rendering.
+It may be unreasonable to require the streaming subsystem to coordinate with
+the rendering subsystem to allocate memory on its behalf, especially as
+Vulkan may not be the only API supported by the engine.
+In emulation layers, the image data is necessarily provided by the
+application in host memory, so an optimization as suggested is not possible.
+Most importantly, the device memory may not be mappable by an application,
+but still accessible to the driver.
+
+2) Are `optimalBufferCopyOffsetAlignment` and
+`optimalBufferCopyRowPitchAlignment` applicable to host memory as well with
+the functions introduced by this extension? Or should there be new limits?
+
+*RESOLVED*: No alignment requirements for the host memory pointer.
+
+3) Should there be granularity requirements for image offsets and extents?
+
+*RESOLVED*: No granularity requirements, i.e. a granularity of 1 pixel (for
+non-compressed formats) and 1 texel block (for compressed formats) is
+assumed.
+
+4) How should the application deal with layout transitions before or after
+copying to or from images?
+
+*RESOLVED*: An existing issue with linear images is that when emulating
+other APIs, it is impossible to know when to transition them as they are
+written to by the host and then used bindlessly.
+The copy operations in this extension are affected by the same limitation.
+A new command is thus introduced by this extension to address this problem
+by allowing the host to perform an image layout transition between a handful
+of layouts.
+
+=== Version History
+
+  * Revision 0, 2021-01-20 (Faith Ekstrand)
+  ** Initial idea and xml
+
+  * Revision 1, 2023-04-26 (Shahbaz Youssefi)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_query_reset.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_query_reset.adoc
new file mode 100644
index 0000000..8a25b26
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_host_query_reset.adoc
@@ -0,0 +1,37 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_host_query_reset.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-06
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Bas Nieuwenhuizen, Google
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension adds a new function to reset queries from the host.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+EXT suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_EXT_host_query_reset.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-03-12 (Bas Nieuwenhuizen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_2d_view_of_3d.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_2d_view_of_3d.adoc
new file mode 100644
index 0000000..c3142a7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_2d_view_of_3d.adoc
@@ -0,0 +1,37 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_2d_view_of_3d.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-02-22
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Blumenkrantz, Valve
+  - Piers Daniell, NVIDIA
+  - Spencer Fricke, Samsung
+  - Ricardo Garcia, Igalia
+  - Graeme Leese, Broadcom
+  - Ralph Potter, Samsung
+  - Stu Smith, AMD
+  - Shahbaz Youssefi, Google
+  - Alex Walters, Imagination
+
+=== Description
+
+This extension allows a single slice of a 3D image to be used as a 2D view
+in image descriptors, matching both the functionality of glBindImageTexture
+in OpenGL with the `layer` parameter set to true and 2D view binding
+provided by the extension EGL_KHR_gl_texture_3D_image.
+It is primarily intended to support GL emulation.
+
+include::{generated}/interfaces/VK_EXT_image_2d_view_of_3d.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-03-25 (Mike Blumenkrantz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control.adoc
new file mode 100644
index 0000000..00dc31f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control.adoc
@@ -0,0 +1,41 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_compression_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+  - Graeme Leese, Broadcom
+  - Andrew Garrard, Imagination
+  - Lisa Wu, Arm
+  - Peter Kohaut, Arm
+
+=== Description
+
+This extension enables fixed-rate image compression and adds the ability to
+control when this kind of compression can be applied.
+Many implementations support some form of framebuffer compression.
+This is typically transparent to applications as lossless compression
+schemes are used.
+With fixed-rate compression, the compression is done at a defined bitrate.
+Such compression algorithms generally produce results that are visually
+lossless, but the results are typically not bit-exact when compared to a
+non-compressed result.
+The implementation may not be able to use the requested compression rate in
+all cases.
+This extension adds a query that can be used to determine the compression
+scheme and rate that was applied to an image.
+
+include::{generated}/interfaces/VK_EXT_image_compression_control.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-05-02 (Jan-Harald Fredriksen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control_swapchain.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control_swapchain.adoc
new file mode 100644
index 0000000..b2423e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_compression_control_swapchain.adoc
@@ -0,0 +1,32 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_compression_control_swapchain.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+  - Graeme Leese, Broadcom
+  - Andrew Garrard, Imagination
+  - Lisa Wu, Arm
+  - Peter Kohaut, Arm
+  - Ian Elliott, Google
+
+=== Description
+
+This extension enables fixed-rate image compression and adds the ability to
+control when this kind of compression can be applied to swapchain images.
+
+include::{generated}/interfaces/VK_EXT_image_compression_control_swapchain.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-05-02 (Jan-Harald Fredriksen)
+  ** Initial draft
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_drm_format_modifier.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_drm_format_modifier.adoc
new file mode 100644
index 0000000..5b3e827
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_drm_format_modifier.adoc
@@ -0,0 +1,411 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_drm_format_modifier.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Antoine Labour, Google
+  - Bas Nieuwenhuizen, Google
+  - Lina Versace, Google
+  - James Jones, NVIDIA
+  - Faith Ekstrand, Intel
+  - Jőrg Wagner, ARM
+  - Kristian Høgsberg Kristensen, Google
+  - Ray Smith, ARM
+
+=== Description
+
+This extension provides the ability to use _DRM format modifiers_ with
+images, enabling Vulkan to better integrate with the Linux ecosystem of
+graphics, video, and display APIs.
+
+Its functionality closely overlaps with
+`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^
+and
+`EGL_MESA_image_dma_buf_export`^<<VK_EXT_image_drm_format_modifier-fn3,3>>^.
+Unlike the EGL extensions, this extension does not require the use of a
+specific handle type (such as a dma_buf) for external memory and provides
+more explicit control of image creation.
+
+=== Introduction to DRM Format Modifiers
+
+A _DRM format modifier_ is a 64-bit, vendor-prefixed, semi-opaque unsigned
+integer.
+Most _modifiers_ represent a concrete, vendor-specific tiling format for
+images.
+Some exceptions are etext:DRM_FORMAT_MOD_LINEAR (which is not
+vendor-specific); etext:DRM_FORMAT_MOD_NONE (which is an alias of
+etext:DRM_FORMAT_MOD_LINEAR due to historical accident); and
+etext:DRM_FORMAT_MOD_INVALID (which does not represent a tiling format).
+The _modifier's_ vendor prefix consists of the 8 most significant bits.
+The canonical list of _modifiers_ and vendor prefixes is found in
+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_fourcc.h[`drm_fourcc.h`]
+in the Linux kernel source.
+The other dominant source of _modifiers_ are vendor kernel trees.
+
+One goal of _modifiers_ in the Linux ecosystem is to enumerate for each
+vendor a reasonably sized set of tiling formats that are appropriate for
+images shared across processes, APIs, and/or devices, where each
+participating component may possibly be from different vendors.
+A non-goal is to enumerate all tiling formats supported by all vendors.
+Some tiling formats used internally by vendors are inappropriate for
+sharing; no _modifiers_ should be assigned to such tiling formats.
+
+Modifier values typically do not _describe_ memory layouts.
+More precisely, a _modifier_'s lower 56 bits usually have no structure.
+Instead, modifiers _name_ memory layouts; they name a small set of
+vendor-preferred layouts for image sharing.
+As a consequence, in each vendor namespace the modifier values are often
+sequentially allocated starting at 1.
+
+Each _modifier_ is usually supported by a single vendor and its name matches
+the pattern `\{VENDOR}_FORMAT_MOD_*` or `DRM_FORMAT_MOD_\{VENDOR}_*`.
+Examples are etext:I915_FORMAT_MOD_X_TILED and
+etext:DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED.
+An exception is etext:DRM_FORMAT_MOD_LINEAR, which is supported by most
+vendors.
+
+Many APIs in Linux use _modifiers_ to negotiate and specify the memory
+layout of shared images.
+For example, a Wayland compositor and Wayland client may, by relaying
+_modifiers_ over the Wayland protocol `zwp_linux_dmabuf_v1`, negotiate a
+vendor-specific tiling format for a shared code:wl_buffer.
+The client may allocate the underlying memory for the code:wl_buffer with
+GBM, providing the chosen _modifier_ to code:gbm_bo_create_with_modifiers.
+The client may then import the code:wl_buffer into Vulkan for producing
+image content, providing the resource's dma_buf to
+slink:VkImportMemoryFdInfoKHR and its _modifier_ to
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT.
+The compositor may then import the code:wl_buffer into OpenGL for sampling,
+providing the resource's dma_buf and _modifier_ to code:eglCreateImage.
+The compositor may also bypass OpenGL and submit the code:wl_buffer directly
+to the kernel's display API, providing the dma_buf and _modifier_ through
+code:drm_mode_fb_cmd2.
+
+=== Format Translation
+
+_Modifier_-capable APIs often pair _modifiers_ with DRM formats, which are
+defined in
+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_fourcc.h[`drm_fourcc.h`].
+However, `VK_EXT_image_drm_format_modifier` uses elink:VkFormat instead of
+DRM formats.
+The application must convert between elink:VkFormat and DRM format when it
+sends or receives a DRM format to or from an external API.
+
+The mapping from elink:VkFormat to DRM format is lossy.
+Therefore, when receiving a DRM format from an external API, often the
+application must use information from the external API to accurately map the
+DRM format to a elink:VkFormat.
+For example, DRM formats do not distinguish between RGB and sRGB (as of
+2018-03-28); external information is required to identify the image's color
+space.
+
+The mapping between elink:VkFormat and DRM format is also incomplete.
+For some DRM formats there exist no corresponding Vulkan format, and for
+some Vulkan formats there exist no corresponding DRM format.
+
+=== Usage Patterns
+
+Three primary usage patterns are intended for this extension:
+
+  * *Negotiation.* The application negotiates with _modifier_-aware,
+    external components to determine sets of image creation parameters
+    supported among all components.
++
+--
+In the Linux ecosystem, the negotiation usually assumes the image is a 2D,
+single-sampled, non-mipmapped, non-array image; this extension permits that
+assumption but does not require it.
+The result of the negotiation usually resembles a set of tuples such as
+_(drmFormat, drmFormatModifier)_, where each participating component
+supports all tuples in the set.
+
+Many details of this negotiation - such as the protocol used during
+negotiation, the set of image creation parameters expressible in the
+protocol, and how the protocol chooses which process and which API will
+create the image - are outside the scope of this specification.
+
+In this extension, flink:vkGetPhysicalDeviceFormatProperties2 with
+slink:VkDrmFormatModifierPropertiesListEXT serves a primary role during the
+negotiation, and flink:vkGetPhysicalDeviceImageFormatProperties2 with
+slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT serves a secondary role.
+--
+
+  * *Import.* The application imports an image with a _modifier_.
++
+--
+In this pattern, the application receives from an external source the
+image's memory and its creation parameters, which are often the result of
+the negotiation described above.
+Some image creation parameters are implicitly defined by the external
+source; for example, ename:VK_IMAGE_TYPE_2D is often assumed.
+Some image creation parameters are usually explicit, such as the image's
+pname:format, pname:drmFormatModifier, and pname:extent; and each plane's
+pname:offset and pname:rowPitch.
+
+Before creating the image, the application first verifies that the physical
+device supports the received creation parameters by querying
+flink:vkGetPhysicalDeviceFormatProperties2 with
+slink:VkDrmFormatModifierPropertiesListEXT and
+flink:vkGetPhysicalDeviceImageFormatProperties2 with
+slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT.
+Then the application creates the image by chaining
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT and
+slink:VkExternalMemoryImageCreateInfo onto slink:VkImageCreateInfo.
+--
+
+  * *Export.* The application creates an image and allocates its memory.
+    Then the application exports to _modifier_-aware consumers the image's
+    memory handles; its creation parameters; its _modifier_; and the
+    <<VkSubresourceLayout,pname:offset>>,
+    <<VkSubresourceLayout,pname:size>>, and
+    <<VkSubresourceLayout,pname:rowPitch>> of each _memory plane_.
++
+--
+In this pattern, the Vulkan device is the authority for the image; it is the
+allocator of the image's memory and the decider of the image's creation
+parameters.
+When choosing the image's creation parameters, the application usually
+chooses a tuple _(format, drmFormatModifier)_ from the result of the
+negotiation described above.
+The negotiation's result often contains multiple tuples that share the same
+format but differ in their _modifier_.
+In this case, the application should defer the choice of the image's
+_modifier_ to the Vulkan implementation by providing all such _modifiers_ to
+slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers;
+and the implementation should choose from pname:pDrmFormatModifiers the
+optimal _modifier_ in consideration with the other image parameters.
+
+The application creates the image by chaining
+slink:VkImageDrmFormatModifierListCreateInfoEXT and
+slink:VkExternalMemoryImageCreateInfo onto slink:VkImageCreateInfo.
+The protocol and APIs by which the application will share the image with
+external consumers will likely determine the value of
+slink:VkExternalMemoryImageCreateInfo::pname:handleTypes.
+The implementation chooses for the image an optimal _modifier_ from
+slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
+The application then queries the implementation-chosen _modifier_ with
+flink:vkGetImageDrmFormatModifierPropertiesEXT, and queries the memory
+layout of each plane with flink:vkGetImageSubresourceLayout.
+
+The application then allocates the image's memory with
+slink:VkMemoryAllocateInfo, adding chained extending structures for external
+memory; binds it to the image; and exports the memory, for example, with
+flink:vkGetMemoryFdKHR.
+
+Finally, the application sends the image's creation parameters, its
+_modifier_, its per-plane memory layout, and the exported memory handle to
+the external consumers.
+The details of how the application transmits this information to external
+consumers is outside the scope of this specification.
+--
+
+=== Prior Art
+
+Extension
+`EGL_EXT_image_dma_buf_import`^<<VK_EXT_image_drm_format_modifier-fn1,1>>^
+introduced the ability to create an code:EGLImage by importing for each
+plane a dma_buf, offset, and row pitch.
+
+Later, extension
+`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^
+introduced the ability to query which combination of formats and _modifiers_
+the implementation supports and to specify _modifiers_ during creation of
+the code:EGLImage.
+
+Extension
+`EGL_MESA_image_dma_buf_export`^<<VK_EXT_image_drm_format_modifier-fn3,3>>^
+is the inverse of `EGL_EXT_image_dma_buf_import_modifiers`.
+
+The Linux kernel modesetting API (KMS), when configuring the display's
+framebuffer with `struct
+drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, allows one to
+specify the framebuffer's _modifier_ as well as a per-plane memory handle,
+offset, and row pitch.
+
+GBM, a graphics buffer manager for Linux, allows creation of a `gbm_bo`
+(that is, a graphics _buffer object_) by importing data similar to that in
+`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn1,1>>^;
+and symmetrically allows exporting the same data from the `gbm_bo`.
+See the references to _modifier_ and _plane_ in
+`gbm.h`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^.
+
+include::{generated}/interfaces/VK_EXT_image_drm_format_modifier.adoc[]
+
+=== Issues
+
+1) Should this extension define a single DRM format modifier per
+sname:VkImage? Or define one per plane?
++
+--
+*RESOLVED*: There exists a single DRM format modifier per sname:VkImage.
+
+*DISCUSSION*: Prior art, such as
+`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^,
+`struct drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, and
+`struct
+gbm_import_fd_modifier_data`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^,
+allows defining one _modifier_ per plane.
+However, developers of the GBM and kernel APIs concede it was a mistake.
+Beginning in Linux 4.10, the kernel requires that the application provide
+the same DRM format _modifier_ for each plane.
+(See Linux commit
+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bae781b259269590109e8a4a8227331362b88212[bae781b259269590109e8a4a8227331362b88212]).
+And GBM provides an entry point, code:gbm_bo_get_modifier, for querying the
+_modifier_ of the image but does not provide one to query the modifier of
+individual planes.
+--
+
+2) When creating an image with
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, which is typically used
+when _importing_ an image, should the application explicitly provide the
+size of each plane?
++
+--
+*RESOLVED*: No.
+The application must: not provide the size.
+To enforce this, the API requires that
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:pPlaneLayouts->size
+must: be 0.
+
+*DISCUSSION*: Prior art, such as
+`EGL_EXT_image_dma_buf_import_modifiers`^<<VK_EXT_image_drm_format_modifier-fn2,2>>^,
+`struct drm_mode_fb_cmd2`^<<VK_EXT_image_drm_format_modifier-fn4,4>>^, and
+`struct
+gbm_import_fd_modifier_data`^<<VK_EXT_image_drm_format_modifier-fn5,5>>^,
+omits from the API the size of each plane.
+Instead, the APIs infer each plane's size from the import parameters, which
+include the image's pixel format and a dma_buf, offset, and row pitch for
+each plane.
+
+However, Vulkan differs from EGL and GBM with regards to image creation in
+the following ways:
+
+.Differences in Image Creation
+
+  - *Undedicated allocation by default.* When importing or exporting a set
+    of dma_bufs as an code:EGLImage or code:gbm_bo, common practice mandates
+    that each dma_buf's memory be dedicated (in the sense of
+    `VK_KHR_dedicated_allocation`) to the image (though not necessarily
+    dedicated to a single plane).
+    In particular, neither the GBM documentation nor the EGL extension
+    specifications explicitly state this requirement, but in light of common
+    practice this is likely due to under-specification rather than
+    intentional omission.
+    In contrast, `VK_EXT_image_drm_format_modifier` permits, but does not
+    require, the implementation to require dedicated allocations for images
+    created with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
+
+  - *Separation of image creation and memory allocation.* When importing a
+    set of dma_bufs as an code:EGLImage or code:gbm_bo, EGL and GBM create
+    the image resource and bind it to memory (the dma_bufs) simultaneously.
+    This allows EGL and GBM to query each dma_buf's size during image
+    creation.
+    In Vulkan, image creation and memory allocation are independent unless a
+    dedicated allocation is used (as in `VK_KHR_dedicated_allocation`).
+    Therefore, without requiring dedicated allocation, Vulkan cannot query
+    the size of each dma_buf (or other external handle) when calculating the
+    image's memory layout.
+    Even if dedication allocation were required, Vulkan cannot calculate the
+    image's memory layout until after the image is bound to its dma_ufs.
+
+The above differences complicate the potential inference of plane size in
+Vulkan.
+Consider the following problematic cases:
+
+.Problematic Plane Size Calculations
+
+  - *Padding.* Some plane of the image may require implementation-dependent
+    padding.
+
+  - *Metadata.* For some _modifiers_, the image may have a metadata plane
+    which requires a non-trivial calculation to determine its size.
+
+  - *Mipmapped, array, and 3D images.* The implementation may support
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT for images whose
+    pname:mipLevels, pname:arrayLayers, or pname:depth is greater than 1.
+    For such images with certain _modifiers_, the calculation of each
+    plane's size may be non-trivial.
+
+However, an application-provided plane size solves none of the above
+problems.
+
+For simplicity, consider an external image with a single memory plane.
+The implementation is obviously capable calculating the image's size when
+its tiling is ename:VK_IMAGE_TILING_OPTIMAL.
+Likewise, any reasonable implementation is capable of calculating the
+image's size when its tiling uses a supported _modifier_.
+
+Suppose that the external image's size is smaller than the
+implementation-calculated size.
+If the application provided the external image's size to
+flink:vkCreateImage, the implementation would observe the mismatched size
+and recognize its inability to comprehend the external image's layout
+(unless the implementation used the application-provided size to select a
+refinement of the tiling layout indicated by the _modifier_, which is
+strongly discouraged).
+The implementation would observe the conflict, and reject image creation
+with ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
+On the other hand, if the application did not provide the external image's
+size to flink:vkCreateImage, then the application would observe after
+calling flink:vkGetImageMemoryRequirements that the external image's size is
+less than the size required by the implementation.
+The application would observe the conflict and refuse to bind the
+sname:VkImage to the external memory.
+In both cases, the result is explicit failure.
+
+Suppose that the external image's size is larger than the
+implementation-calculated size.
+If the application provided the external image's size to
+flink:vkCreateImage, for reasons similar to above the implementation would
+observe the mismatched size and recognize its inability to comprehend the
+image data residing in the extra size.
+The implementation, however, must assume that image data resides in the
+entire size provided by the application.
+The implementation would observe the conflict and reject image creation with
+ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
+On the other hand, if the application did not provide the external image's
+size to flink:vkCreateImage, then the application would observe after
+calling flink:vkGetImageMemoryRequirements that the external image's size is
+larger than the implementation-usable size.
+The application would observe the conflict and refuse to bind the
+sname:VkImage to the external memory.
+In both cases, the result is explicit failure.
+
+Therefore, an application-provided size provides no benefit, and this
+extension should not require it.
+This decision renders slink:VkSubresourceLayout::pname:size an unused field
+during image creation, and thus introduces a risk that implementations may
+require applications to submit sideband creation parameters in the unused
+field.
+To prevent implementations from relying on sideband data, this extension
+_requires_ the application to set pname:size to 0.
+--
+
+==== References
+
+  . [[VK_EXT_image_drm_format_modifier-fn1]]
+    https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+  . [[VK_EXT_image_drm_format_modifier-fn2]]
+    https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
+  . [[VK_EXT_image_drm_format_modifier-fn3]]
+    https://registry.khronos.org/EGL/extensions/MESA/EGL_MESA_image_dma_buf_export.txt[`EGL_MESA_image_dma_buf_export`]
+  . [[VK_EXT_image_drm_format_modifier-fn4]]
+    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_mode.h?id=refs/tags/v4.10#n392[`struct
+    drm_mode_fb_cmd2`]
+  . [[VK_EXT_image_drm_format_modifier-fn5]]
+    https://cgit.freedesktop.org/mesa/mesa/tree/src/gbm/main/gbm.h?id=refs/tags/mesa-18.0.0-rc1[`gbm.h`]
+
+==== Version History
+
+  * Revision 1, 2018-08-29 (Lina Versace)
+  ** First stable revision
+  * Revision 2, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_robustness.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_robustness.adoc
new file mode 100644
index 0000000..4d25d45
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_robustness.adoc
@@ -0,0 +1,61 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_robustness.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-04-27
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Bolz, NVIDIA
+  - Spencer Fricke, Samsung
+  - Courtney Goeltzenleuchter, Google
+  - Slawomir Cygan, Intel
+
+=== Description
+
+This extension adds stricter requirements for how out of bounds reads from
+images are handled.
+Rather than returning undefined values, most out of bounds reads return R,
+G, and B values of zero and alpha values of either zero or one.
+Components not present in the image format may be set to zero or to values
+based on the format as described in <<textures-conversion-to-rgba,
+Conversion to RGBA>>.
+
+include::{generated}/interfaces/VK_EXT_image_robustness.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Issues
+
+1. How does this extension differ from VK_EXT_robustness2?
+
+The guarantees provided by this extension are a subset of those provided by
+the robustImageAccess2 feature of VK_EXT_robustness2.
+Where this extension allows return values of (0, 0, 0, 0) or (0, 0, 0, 1),
+robustImageAccess2 requires that a particular value dependent on the image
+format be returned.
+This extension provides no guarantees about the values returned for an
+access to an invalid Lod.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2020-04-27 (Graeme Leese)
+  * Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_sliced_view_of_3d.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_sliced_view_of_3d.adoc
new file mode 100644
index 0000000..61b72b2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_sliced_view_of_3d.adoc
@@ -0,0 +1,33 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_sliced_view_of_3d.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-01-24
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Blumenkrantz, Valve
+  - Hans-Kristian Arntzen, Valve
+  - Ricardo Garcia, Igalia
+  - Shahbaz Youssefi, Google
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension allows creating 3D views of 3D images such that the views
+contain a subset of the slices in the image, using a Z offset and range, for
+the purpose of using the views as storage image descriptors.
+This matches functionality in D3D12 and is primarily intended to support
+D3D12 emulation.
+
+include::{generated}/interfaces/VK_EXT_image_sliced_view_of_3d.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-10-21 (Mike Blumenkrantz)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_view_min_lod.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_view_min_lod.adoc
new file mode 100644
index 0000000..54ade03
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_image_view_min_lod.adoc
@@ -0,0 +1,40 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_view_min_lod.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-11-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Hans-Kristian Arntzen, Valve
+  - Samuel Iglesias Gonsalvez, Igalia
+  - Tobias Hector, AMD
+  - Faith Ekstrand, Intel
+  - Tom Olson, ARM
+
+=== Description
+
+This extension allows applications to clamp the minimum LOD value during
+<<textures-image-level-selection,Image Level(s) Selection>>,
+<<textures-gather,Texel Gathering>> and
+<<textures-integer-coordinate-operations,Integer Texel Coordinate
+Operations>> with a given slink:VkImageView by
+slink:VkImageViewMinLodCreateInfoEXT::pname:minLod.
+
+This extension may be useful to restrict a slink:VkImageView to only mips
+which have been uploaded, and the use of fractional pname:minLod can be
+useful for smoothly introducing new mip levels when using linear mipmap
+filtering.
+
+include::{generated}/interfaces/VK_EXT_image_view_min_lod.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-07-06 (Joshua Ashton)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_index_type_uint8.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_index_type_uint8.adoc
new file mode 100644
index 0000000..ced5dac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_index_type_uint8.adoc
@@ -0,0 +1,26 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_index_type_uint8.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows code:uint8_t indices to be used with
+flink:vkCmdBindIndexBuffer.
+
+include::{generated}/interfaces/VK_EXT_index_type_uint8.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-05-02 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_inline_uniform_block.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_inline_uniform_block.adoc
new file mode 100644
index 0000000..9f6c6a1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_inline_uniform_block.adoc
@@ -0,0 +1,101 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_inline_uniform_block.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-01
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Jeff Bolz, NVIDIA
+  - Slawomir Grajewski, Intel
+  - Neil Henning, Codeplay
+
+=== Description
+
+This extension introduces the ability to back uniform blocks directly with
+descriptor sets by storing inline uniform data within descriptor pool
+storage.
+Compared to push constants this new construct allows uniform data to be
+reused across multiple disjoint sets of drawing or dispatching commands and
+may: enable uniform data to be accessed with fewer indirections compared to
+uniforms backed by buffer memory.
+
+include::{generated}/interfaces/VK_EXT_inline_uniform_block.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+Vulkan 1.3 adds <<versions-1.3-new-features, additional functionality
+related to this extension>> in the form of the
+<<limits-maxInlineUniformTotalSize, pname:maxInlineUniformTotalSize>> limit.
+
+=== Issues
+
+1) Do we need a new storage class for inline uniform blocks vs. uniform
+blocks?
+
+*RESOLVED*: No.
+The code:Uniform storage class is used to allow the same syntax used for
+both uniform buffers and inline uniform blocks.
+
+2) Is the descriptor array index and array size expressed in terms of bytes
+or dwords for inline uniform block descriptors?
+
+*RESOLVED*: In bytes, but both must: be a multiple of 4, similar to how push
+constant ranges are specified.
+The pname:descriptorCount of sname:VkDescriptorSetLayoutBinding thus
+provides the total number of bytes a particular binding with an inline
+uniform block descriptor type can hold, while the pname:srcArrayElement,
+pname:dstArrayElement, and pname:descriptorCount members of
+sname:VkWriteDescriptorSet, sname:VkCopyDescriptorSet, and
+sname:VkDescriptorUpdateTemplateEntry (where applicable) specify the byte
+offset and number of bytes to write/copy to the binding's backing store.
+Additionally, the pname:stride member of
+sname:VkDescriptorUpdateTemplateEntry is ignored for inline uniform blocks
+and a default value of one is used, meaning that the data to update inline
+uniform block bindings with must be contiguous in memory.
+
+3) What layout rules apply for uniform blocks corresponding to inline
+constants?
+
+*RESOLVED*: They use the same layout rules as uniform buffers.
+
+4) Do we need to add non-uniform indexing features/properties as introduced
+by `VK_EXT_descriptor_indexing` for inline uniform blocks?
+
+*RESOLVED*: No, because inline uniform blocks are not allowed to be
+"`arrayed`".
+A single binding with an inline uniform block descriptor type corresponds to
+a single uniform block instance and the array indices inside that binding
+refer to individual offsets within the uniform block (see issue #2).
+However, this extension does introduce new features/properties about the
+level of support for update-after-bind inline uniform blocks.
+
+5) Is the pname:descriptorBindingVariableDescriptorCount feature introduced
+by `VK_EXT_descriptor_indexing` supported for inline uniform blocks?
+
+*RESOLVED*: Yes, as long as other inline uniform block specific limits are
+respected.
+
+6) Do the robustness guarantees of pname:robustBufferAccess apply to inline
+uniform block accesses?
+
+*RESOLVED*: No, similarly to push constants, as they are not backed by
+buffer memory like uniform buffers.
+
+=== Version History
+
+  * Revision 1, 2018-08-01 (Daniel Rakos)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_legacy_dithering.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_legacy_dithering.adoc
new file mode 100644
index 0000000..df53829
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_legacy_dithering.adoc
@@ -0,0 +1,45 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_legacy_dithering.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-03-31
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+This extension exposes a hardware feature used by some vendors to implement
+OpenGL's dithering.
+The purpose of this extension is to support layering OpenGL over Vulkan, by
+allowing the layer to take advantage of the same hardware feature and
+provide equivalent dithering to OpenGL applications.
+
+include::{generated}/interfaces/VK_EXT_legacy_dithering.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-03-31 (Shahbaz Youssefi)
+  ** Internal revisions
+
+=== Issues
+
+1) In OpenGL, the dither state can change dynamically.
+Should this extension add a pipeline state for dither?
+
+*RESOLVED*: No.
+Changing dither state is rarely, if ever, done during rendering.
+Every surveyed Android application either entirely disables dither,
+explicitly enables it, or uses the default state (which is enabled).
+Additionally, on some hardware dither can only be specified in a render pass
+granularity, so a change in dither state would necessarily need to cause a
+render pass break.
+This extension considers dynamic changes in OpenGL dither state a
+theoretical situation, and expects the layer to break the render pass in
+such a situation without any practical downsides.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_line_rasterization.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_line_rasterization.adoc
new file mode 100644
index 0000000..ce51b2b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_line_rasterization.adoc
@@ -0,0 +1,42 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_line_rasterization.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Allen Jensen, NVIDIA
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension adds some line rasterization features that are commonly used
+in CAD applications and supported in other APIs like OpenGL.
+Bresenham-style line rasterization is supported, smooth rectangular lines
+(coverage to alpha) are supported, and stippled lines are supported for all
+three line rasterization modes.
+
+include::{generated}/interfaces/VK_EXT_line_rasterization.adoc[]
+
+=== Issues
+
+1) Do we need to support Bresenham-style and smooth lines with more than one
+rasterization sample? i.e. the equivalent of glDisable(GL_MULTISAMPLE) in
+OpenGL when the framebuffer has more than one sample?
+
+*RESOLVED*: Yes.
+For simplicity, Bresenham line rasterization carries forward a few
+restrictions from OpenGL, such as not supporting per-sample shading, alpha
+to coverage, or alpha to one.
+
+=== Version History
+
+  * Revision 1, 2019-05-09 (Jeff Bolz)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_load_store_op_none.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_load_store_op_none.adoc
new file mode 100644
index 0000000..7316018
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_load_store_op_none.adoc
@@ -0,0 +1,37 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_load_store_op_none.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-06
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Bill Licea-Kane, Qualcomm Technologies, Inc.
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension incorporates ename:VK_ATTACHMENT_STORE_OP_NONE_EXT from
+`apiext:VK_QCOM_render_pass_store_ops`, enabling applications to avoid
+unnecessary synchronization when an attachment is not written during a
+render pass.
+
+Additionally, ename:VK_ATTACHMENT_LOAD_OP_NONE_EXT is introduced to avoid
+unnecessary synchronization when an attachment is not used during a render
+pass at all.
+In combination with ename:VK_ATTACHMENT_STORE_OP_NONE_EXT, this is useful as
+an alternative to preserve attachments in applications that cannot decide if
+an attachment will be used in a render pass until after the necessary
+pipelines have been created.
+
+include::{generated}/interfaces/VK_EXT_load_store_op_none.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-06-06 (Shahbaz Youssefi)
+  ** Initial revision, based on VK_QCOM_render_pass_store_ops.
+  ** Added VK_ATTACHMENT_LOAD_OP_NONE_EXT.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_budget.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_budget.adoc
new file mode 100644
index 0000000..59553d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_budget.adoc
@@ -0,0 +1,48 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_memory_budget.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-10-08
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Jeff Juliano, NVIDIA
+
+=== Description
+
+While running a Vulkan application, other processes on the machine might
+also be attempting to use the same device memory, which can pose problems.
+This extension adds support for querying the amount of memory used and the
+total memory budget for a memory heap.
+The values returned by this query are implementation-dependent and can
+depend on a variety of factors including operating system and system load.
+
+The slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapBudget values
+can be used as a guideline for how much total memory from each heap the
+**current process** can use at any given time, before allocations may start
+failing or causing performance degradation.
+The values may change based on other activity in the system that is outside
+the scope and control of the Vulkan implementation.
+
+The slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapUsage will
+display the **current process** estimated heap usage.
+
+With this information, the idea is for an application at some interval (once
+per frame, per few seconds, etc) to query pname:heapBudget and
+pname:heapUsage.
+From here the application can notice if it is over budget and decide how it
+wants to handle the memory situation (free it, move to host memory, changing
+mipmap levels, etc).
+This extension is designed to be used in concert with
+`apiext:VK_EXT_memory_priority` to help with this part of memory management.
+
+include::{generated}/interfaces/VK_EXT_memory_budget.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-10-08 (Jeff Bolz)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_priority.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_priority.adoc
new file mode 100644
index 0000000..8b45e57
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_memory_priority.adoc
@@ -0,0 +1,32 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_memory_priority.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-10-08
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Jeff Juliano, NVIDIA
+
+=== Description
+
+This extension adds a pname:priority value specified at memory allocation
+time.
+On some systems with both device-local and non-device-local memory heaps,
+the implementation may transparently move memory from one heap to another
+when a heap becomes full (for example, when the total memory used across all
+processes exceeds the size of the heap).
+In such a case, this priority value may be used to determine which
+allocations are more likely to remain in device-local memory.
+
+include::{generated}/interfaces/VK_EXT_memory_priority.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-10-08 (Jeff Bolz)
+  ** Initial revision
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mesh_shader.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mesh_shader.adoc
new file mode 100644
index 0000000..ca54605
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mesh_shader.adoc
@@ -0,0 +1,94 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_mesh_shader.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-01-20
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_mesh_shader.html[`SPV_EXT_mesh_shader`]
+  - This extension provides API support for
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_mesh_shader.txt[`GLSL_EXT_mesh_shader`]
+  - Interacts with Vulkan 1.1
+  - Interacts with `apiext:VK_KHR_multiview`
+  - Interacts with `apiext:VK_KHR_fragment_shading_rate`
+*Contributors*::
+  - Christoph Kubisch, NVIDIA
+  - Pat Brown, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Pierre Boudier, NVIDIA
+  - Patrick Mours, NVIDIA
+  - David Zhao Akeley, NVIDIA
+  - Kedarnath Thangudu, NVIDIA
+  - Timur Kristóf, Valve
+  - Hans-Kristian Arntzen, Valve
+  - Philip Rebohle, Valve
+  - Mike Blumenkrantz, Valve
+  - Slawomir Grajewski, Intel
+  - Michal Pietrasiuk, Intel
+  - Mariusz Merecki, Intel
+  - Tom Olson, ARM
+  - Jan-Harald Fredriksen, ARM
+  - Sandeep Kakarlapudi, ARM
+  - Ruihao Zhang, QUALCOMM
+  - Ricardo Garcia, Igalia, S.L.
+  - Tobias Hector, AMD
+  - Stu Smith, AMD
+
+
+=== Description
+
+This extension provides a new mechanism allowing applications to generate
+collections of geometric primitives via programmable mesh shading.
+It is an alternative to the existing programmable primitive shading
+pipeline, which relied on generating input primitives by a fixed function
+assembler as well as fixed function vertex fetch.
+
+This extension also adds support for the following SPIR-V extension in
+Vulkan:
+
+  * {spirv}/EXT/SPV_EXT_mesh_shader.html[`SPV_EXT_mesh_shader`]
+
+include::{generated}/interfaces/VK_EXT_mesh_shader.adoc[]
+
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-cullprimitive,CullPrimitiveEXT>>
+  * <<interfaces-builtin-variables-primitivepointindices,PrimitivePointIndicesEXT>>
+  * <<interfaces-builtin-variables-primitivelineindices,PrimitiveLineIndicesEXT>>
+  * <<interfaces-builtin-variables-primitivetriangleindices,PrimitiveTriangleIndicesEXT>>
+  * (modified)code:Position
+  * (modified)code:PointSize
+  * (modified)code:ClipDistance
+  * (modified)code:CullDistance
+  * (modified)code:PrimitiveId
+  * (modified)code:Layer
+  * (modified)code:ViewportIndex
+  * (modified)code:NumWorkgroups
+  * (modified)code:WorkgroupSize
+  * (modified)code:WorkgroupId
+  * (modified)code:LocalInvocationId
+  * (modified)code:GlobalInvocationId
+  * (modified)code:LocalInvocationIndex
+  * (modified)code:NumSubgroups
+  * (modified)code:SubgroupId
+  * (modified)code:DrawIndex
+  * (modified)code:PrimitiveShadingRateKHR
+  * (modified)code:ViewIndex
+
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-MeshShadingEXT, code:MeshShadingEXT>>
+
+=== Version History
+
+  * Revision 1, 2022-03-08 (Christoph Kubisch, Daniel Koch, Patrick Mours)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_objects.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_objects.adoc
new file mode 100644
index 0000000..6d6d1ba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_objects.adoc
@@ -0,0 +1,48 @@
+// Copyright (c) 2021-2022 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_metal_objects.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Bill Hollings, The Brenwill Workshop Ltd.
+  - Dzmitry Malyshau, Mozilla Corp.
+
+=== Description
+
+In a Vulkan implementation that is layered on top of Metal on Apple device
+platforms, this extension provides the ability to import and export the
+underlying Metal objects associated with specific Vulkan objects.
+
+As detailed in the
+https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_metal_objects.adoc[extension
+proposal document], this extension adds one new Vulkan command,
+flink:vkExportMetalObjectsEXT, to export underlying Metal objects from
+Vulkan objects, and supports importing the appropriate existing Metal
+objects when creating Vulkan objects of types slink:VkDeviceMemory,
+slink:VkImage, slink:VkSemaphore, and slink:VkEvent,
+
+The intent is that this extension will be advertised and supported only on
+implementations that are layered on top of Metal on Apple device platforms.
+
+include::{generated}/interfaces/VK_EXT_metal_objects.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2022-05-28 (Bill Hollings)
+  ** Initial draft.
+  ** Incorporated feedback from review by the Vulkan Working Group.
+     Renamed many structures, moved import/export of MTLBuffer to
+     VkDeviceMemory, added export of MTLSharedEvent, added import of
+     MTLSharedEvent for VkSemaphore and VkEvent, and changed used bit mask
+     fields to individual bit fields to simplify Valid Usage rules.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_surface.adoc
new file mode 100644
index 0000000..1539178
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_metal_surface.adoc
@@ -0,0 +1,28 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_metal_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-10-01
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Dzmitry Malyshau, Mozilla Corp.
+
+=== Description
+
+The `VK_EXT_metal_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) from basetype:CAMetalLayer, which is
+the native rendering surface of Apple's Metal framework.
+
+include::{generated}/interfaces/VK_EXT_metal_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-10-01 (Dzmitry Malyshau)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multi_draw.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multi_draw.adoc
new file mode 100644
index 0000000..2fc9a60
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multi_draw.adoc
@@ -0,0 +1,43 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_multi_draw.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-05-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Blumenkrantz, VALVE
+  - Piers Daniell, NVIDIA
+  - Faith Ekstrand, INTEL
+  - Spencer Fricke, SAMSUNG
+  - Ricardo Garcia, IGALIA
+  - Jon Leech, KHRONOS
+  - Stu Smith, AMD
+
+=== Description
+
+Processing multiple draw commands in sequence incurs measurable overhead
+within drivers due to repeated state checks and updates during dispatch.
+This extension enables passing the entire sequence of draws directly to the
+driver in order to avoid any such overhead, using an array of
+slink:VkMultiDrawInfoEXT or slink:VkMultiDrawIndexedInfoEXT structs with
+fname:vkCmdDrawMultiEXT or fname:vkCmdDrawMultiIndexedEXT, respectively.
+These functions could be used any time multiple draw commands are being
+recorded without any state changes between them in order to maximize
+performance.
+
+include::{generated}/interfaces/VK_EXT_multi_draw.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * (modified)code:DrawIndex
+
+=== Version History
+
+  * Revision 1, 2021-01-20 (Mike Blumenkrantz)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multisampled_render_to_single_sampled.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multisampled_render_to_single_sampled.adoc
new file mode 100644
index 0000000..bd99408
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_multisampled_render_to_single_sampled.adoc
@@ -0,0 +1,87 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_multisampled_render_to_single_sampled.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-04-16
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Jan-Harald Fredriksen, Arm
+  - Jörg Wagner, Arm
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Jarred Davies, Imagination Technologies
+
+=== Description
+
+With careful usage of resolve attachments, multisampled image memory
+allocated with ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, pname:loadOp
+not equal to ename:VK_ATTACHMENT_LOAD_OP_LOAD and pname:storeOp not equal to
+ename:VK_ATTACHMENT_STORE_OP_STORE, a Vulkan application is able to
+efficiently perform multisampled rendering without incurring any additional
+memory penalty on some implementations.
+
+Under certain circumstances however, the application may not be able to
+complete its multisampled rendering within a single render pass; for example
+if it does partial rasterization from frame to frame, blending on an image
+from a previous frame, or in emulation of
+GL_EXT_multisampled_render_to_texture.
+In such cases, the application can use an initial subpass to effectively
+load single-sampled data from the next subpass's resolve attachment and fill
+in the multisampled attachment which otherwise uses pname:loadOp equal to
+ename:VK_ATTACHMENT_LOAD_OP_DONT_CARE.
+However, this is not always possible (for example for stencil in the absence
+of VK_EXT_shader_stencil_export) and has multiple drawbacks.
+
+Some implementations are able to perform said operation efficiently in
+hardware, effectively loading a multisampled attachment from the contents of
+a single sampled one.
+Together with the ability to perform a resolve operation at the end of a
+subpass, these implementations are able to perform multisampled rendering on
+single-sampled attachments with no extra memory or bandwidth overhead.
+This extension exposes this capability by allowing a framebuffer and render
+pass to include single-sampled attachments while rendering is done with a
+specified number of samples.
+
+include::{generated}/interfaces/VK_EXT_multisampled_render_to_single_sampled.adoc[]
+
+=== Issues
+
+1) Could the multisampled attachment be initialized through some form of
+copy?
+
+*RESOLVED*: No.
+Some implementations do not support copying between attachments in general,
+and find expressing this operation through a copy unnatural.
+
+2) Another way to achieve this is by introducing a new pname:loadOp to load
+the contents of the multisampled image from a single-sampled one.
+Why is this extension preferred?
+
+*RESOLVED*: Using this extension simplifies the application, as it does not
+need to manage a secondary lazily-allocated image.
+Additionally, using this extension leaves less room for error; for example a
+single mistake in pname:loadOp or pname:storeOp would result in the
+lazily-allocated image to actually take up memory, and remain so until
+destruction.
+
+3) There is no guarantee that multisampled data between two subpasses with
+the same number of samples will be retained as the implementation may be
+forced to split the render pass implicitly for various reasons.
+Should this extension require that every subpass that uses
+multisampled-render-to-single-sampled end in an implicit render pass split
+(which results in a resolve operation)?
+
+*RESOLVED*: No.
+Not requiring this allows render passes with multiple
+multisampled-render-to-single-sampled subpasses to potentially execute more
+efficiently (though there is no guarantee).
+
+=== Version History
+
+  * Revision 1, 2021-04-12 (Shahbaz Youssefi)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mutable_descriptor_type.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mutable_descriptor_type.adoc
new file mode 100644
index 0000000..dc5242a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_mutable_descriptor_type.adoc
@@ -0,0 +1,45 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_mutable_descriptor_type.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-08-22
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Hans-Kristian Arntzen, Valve
+
+=== Description
+
+This extension allows applications to reduce descriptor memory footprint by
+allowing a descriptor to be able to mutate to a given list of descriptor
+types depending on which descriptor types are written into, or copied into a
+descriptor set.
+
+The main use case this extension intends to address is descriptor indexing
+with ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT where the
+descriptor types are completely generic, as this means applications can
+allocate one large descriptor set, rather than having one large descriptor
+set per descriptor type, which significantly bloats descriptor memory usage
+and causes performance issues.
+
+This extension also adds a mechanism to declare that a descriptor pool, and
+therefore the descriptor sets that are allocated from it, reside only in
+host memory; as such these descriptors can only be updated/copied, but not
+bound.
+
+These features together allow much more efficient emulation of the raw D3D12
+binding model.
+This extension is primarily intended to be useful for API layering efforts.
+
+include::{generated}/interfaces/VK_EXT_mutable_descriptor_type.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-08-22 (Jon Leech)
+  ** Initial version, promoted from apiext:VK_VALVE_mutable_descriptor_type.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_nested_command_buffer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_nested_command_buffer.adoc
new file mode 100644
index 0000000..f8aebe8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_nested_command_buffer.adoc
@@ -0,0 +1,45 @@
+// Copyright 2023 The Khronos Group, Inc
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_nested_command_buffer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-09-18
+*Contributors*::
+  - Daniel Story, Nintendo
+  - Peter Kohaut, NVIDIA
+  - Shahbaz Youssefi, Google
+  - Slawomir Grajewski, Intel
+  - Stu Smith, AMD
+
+=== Description
+
+With core Vulkan it is not legal to call flink:vkCmdExecuteCommands when
+recording a secondary command buffer.
+This extension relaxes that restriction, allowing secondary command buffers
+to execute other secondary command buffers.
+
+include::{generated}/interfaces/VK_EXT_nested_command_buffer.adoc[]
+
+=== Issues
+
+1) The Command Buffer Levels property for the Vulkan commands comes from the
+`cmdbufferlevel` attribute in `vk.xml` for the command, and it is currently
+not possible to modify this attribute based on whether an extension is
+enabled.
+For this extension we want the `cmdbufferlevel` attribute for
+vkCmdExecuteCommands to be `primary,secondary` when this extension is
+enabled and `primary` otherwise.
+
+*RESOLVED*: The `cmdbufferlevel` attribute for flink:vkCmdExecuteCommands
+has been changed to `primary,secondary` and a new VUID added to prohibit
+recording this command in a secondary command buffer unless this extension
+is enabled.
+
+=== Version History
+
+  * Revision 1, 2023-09-18 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_non_seamless_cube_map.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_non_seamless_cube_map.adoc
new file mode 100644
index 0000000..bfc571f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_non_seamless_cube_map.adoc
@@ -0,0 +1,30 @@
+// Copyright 2021 Georg Lehmann
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_non_seamless_cube_map.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-04
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Georg Lehmann
+
+=== Description
+
+This extension provides functionality to disable <<textures-cubemapedge,
+cube map edge handling>> on a per sampler level which matches the behavior
+of other graphics APIs.
+
+This extension may be useful for building translation layers for those APIs
+or for porting applications that rely on this cube map behavior.
+
+include::{generated}/interfaces/VK_EXT_non_seamless_cube_map.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-09-04 (Georg Lehmann)
+  ** First Version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_opacity_micromap.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_opacity_micromap.adoc
new file mode 100644
index 0000000..9ce5dd0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_opacity_micromap.adoc
@@ -0,0 +1,167 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_opacity_micromap.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-08-24
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_opacity_micromap.html[`SPV_EXT_opacity_micromap`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_opacity_micromap.txt[`GLSL_EXT_opacity_micromap`]
+*Contributors*::
+  - Christoph Kubisch, NVIDIA
+  - Eric Werness, NVIDIA
+  - Josh Barczak, Intel
+  - Stu Smith, AMD
+
+=== Description
+
+When adding adding transparency to a ray traced scene, an application can
+choose between further tessellating the geometry or using an any hit shader
+to allow the ray through specific parts of the geometry.
+These options have the downside of either significantly increasing memory
+consumption or adding runtime overhead to run shader code in the middle of
+traversal, respectively.
+
+This extension adds the ability to add an _opacity micromap_ to geometry
+when building an acceleration structure.
+The opacity micromap compactly encodes opacity information which can be read
+by the implementation to mark parts of triangles as opaque or transparent.
+The format is externally visible to allow the application to compress its
+internal geometry and surface representations into the compressed format
+ahead of time.
+The compressed format subdivides each triangle into a set of subtriangles,
+each of which can be assigned either two or four opacity values.
+These opacity values can control if a ray hitting that subtriangle is
+treated as an opaque hit, complete miss, or possible hit, depending on the
+controls described in <<ray-opacity-micromap,Ray Opacity Micromap>>.
+
+This extension provides:
+
+  * a slink:VkMicromapEXT structure to store the micromap,
+  * functions similar to acceleration structure build functions to build the
+    opacity micromap array, and
+  * a structure to extend
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR to attach a
+    micromap to the geometry of the acceleration structure.
+
+include::{generated}/interfaces/VK_EXT_opacity_micromap.adoc[]
+
+=== Reference Code
+
+[source,c++]
+----
+uint32_t BarycentricsToSpaceFillingCurveIndex(float u, float v, uint32_t level)
+{
+    u = clamp(u, 0.0f, 1.0f);
+    v = clamp(v, 0.0f, 1.0f);
+
+    uint32_t iu, iv, iw;
+
+    // Quantize barycentric coordinates
+    float fu = u * (1u << level);
+    float fv = v * (1u << level);
+
+    iu = (uint32_t)fu;
+    iv = (uint32_t)fv;
+
+    float uf = fu - float(iu);
+    float vf = fv - float(iv);
+
+    if (iu >= (1u << level)) iu = (1u << level) - 1u;
+    if (iv >= (1u << level)) iv = (1u << level) - 1u;
+
+    uint32_t iuv = iu + iv;
+
+    if (iuv >= (1u << level))
+        iu -= iuv - (1u << level) + 1u;
+
+    iw = ~(iu + iv);
+
+    if (uf + vf >= 1.0f && iuv < (1u << level) - 1u) --iw;
+
+    uint32_t b0 = ~(iu ^ iw);
+    b0 &= ((1u << level) - 1u);
+    uint32_t t = (iu ^ iv) & b0;
+
+    uint32_t f = t;
+    f ^= f >> 1u;
+    f ^= f >> 2u;
+    f ^= f >> 4u;
+    f ^= f >> 8u;
+    uint32_t b1 = ((f ^ iu) & ~b0) | t;
+
+    // Interleave bits
+    b0 = (b0 | (b0 << 8u)) & 0x00ff00ffu;
+    b0 = (b0 | (b0 << 4u)) & 0x0f0f0f0fu;
+    b0 = (b0 | (b0 << 2u)) & 0x33333333u;
+    b0 = (b0 | (b0 << 1u)) & 0x55555555u;
+    b1 = (b1 | (b1 << 8u)) & 0x00ff00ffu;
+    b1 = (b1 | (b1 << 4u)) & 0x0f0f0f0fu;
+    b1 = (b1 | (b1 << 2u)) & 0x33333333u;
+    b1 = (b1 | (b1 << 1u)) & 0x55555555u;
+
+    return b0 | (b1 << 1u);
+}
+----
+
+=== Issues
+
+(1) Is the build actually similar to an acceleration structure build?
+--
+  * Resolved: The build should be much lighter-weight than an acceleration
+    structure build, but the infrastructure is similar enough that it makes
+    sense to keep the concepts compatible.
+--
+
+(2) Why does VkMicromapUsageEXT not have type/pNext?
+--
+  * Resolved: There can be a very large number of these structures, so
+    doubling the size of these can be significant memory consumption.
+    Also, an application may be loading these directly from a file which is
+    more compatible with it being a flat structure.
+    The including structures are extensible and are probably a more suitable
+    place to add extensibility.
+--
+
+(3) Why is there a SPIR-V extension?
+--
+  * Resolved: There is a ray flag.
+    To be consistent with how the existing ray tracing extensions work that
+    ray flag needs its own extension.
+--
+
+(4) Should there be indirect micromap build?
+--
+  * Resolved: Not for now.
+    There is more in-depth usage metadata required and it seems less likely
+    that something like a GPU culling system would need to change the counts
+    for a micromap.
+--
+
+(5) Should micromaps have a micromap device address?
+--
+  * Resolved: There is no need right now (can just use the handle) but that
+    is a bit different from acceleration structures, though the two are not
+    completely parallel in their usage.
+--
+
+(6) Why are the alignment requirements defined as a mix of hardcoded values
+and caps?
+--
+  * Resolved: This is most parallel with the definition of
+    `apiext:VK_KHR_acceleration_structure` and maintaining commonality makes
+    it easier for applications to share memory.
+--
+
+=== Version History
+
+  * Revision 2, 2022-06-22 (Eric Werness)
+  ** EXTify and clean up for discussion
+  * Revision 1, 2022-01-01 (Eric Werness)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pageable_device_local_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pageable_device_local_memory.adoc
new file mode 100644
index 0000000..65c5364
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pageable_device_local_memory.adoc
@@ -0,0 +1,74 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pageable_device_local_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-08-24
+*Contributors*::
+  - Hans-Kristian Arntzen, Valve
+  - Axel Gneiting, id Software
+  - Billy Khan, id Software
+  - Daniel Koch, NVIDIA
+  - Chris Lentini, NVIDIA
+  - Joshua Schnarr, NVIDIA
+  - Stu Smith, AMD
+
+=== Description
+
+Vulkan is frequently implemented on multi-user and multi-process operating
+systems where the device-local memory can be shared by more than one
+process.
+On such systems the size of the device-local memory available to the
+application may not be the full size of the memory heap at all times.
+In order for these operating systems to support multiple applications the
+device-local memory is virtualized and paging is used to move memory between
+device-local and host-local memory heaps, transparent to the application.
+
+The current Vulkan specification does not expose this behavior well and may
+cause applications to make suboptimal memory choices when allocating memory.
+For example, in a system with multiple applications running, the application
+may think that device-local memory is full and revert to making
+performance-sensitive allocations from host-local memory.
+In reality the memory heap might not have been full, it just appeared to be
+at the time memory consumption was queried, and a device-local allocation
+would have succeeded.
+A well designed operating system that implements pageable device-local
+memory will try to have all memory allocations for the foreground
+application paged into device-local memory, and paged out for other
+applications as needed when not in use.
+
+When this extension is exposed by the Vulkan implementation it indicates to
+the application that the operating system implements pageable device-local
+memory and the application should adjust its memory allocation strategy
+accordingly.
+The extension also exposes a new flink:vkSetDeviceMemoryPriorityEXT function
+to allow the application to dynamically adjust the priority of existing
+memory allocations based on its current needs.
+This will help the operating system page out lower priority memory
+allocations before higher priority allocations when needed.
+It will also help the operating system decide which memory allocations to
+page back into device-local memory first.
+
+To take best advantage of pageable device-local memory the application must
+create the Vulkan device with the
+slink:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT::pname:pageableDeviceLocalMemory
+feature enabled.
+When enabled the Vulkan implementation will allow device-local memory
+allocations to be paged in and out by the operating system, and may: not
+return VK_ERROR_OUT_OF_DEVICE_MEMORY even if device-local memory appears to
+be full, but will instead page this, or other allocations, out to make room.
+The Vulkan implementation will also ensure that host-local memory
+allocations will never be promoted to device-local memory by the operating
+system, or consume device-local memory.
+
+
+include::{generated}/interfaces/VK_EXT_pageable_device_local_memory.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-08-24 (Piers Daniell)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pci_bus_info.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pci_bus_info.adoc
new file mode 100644
index 0000000..2e4e137
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pci_bus_info.adoc
@@ -0,0 +1,40 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pci_bus_info.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-10
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension adds a new query to obtain PCI bus information about a
+physical device.
+
+Not all physical devices have PCI bus information, either due to the device
+not being connected to the system through a PCI interface or due to platform
+specific restrictions and policies.
+Thus this extension is only expected to be supported by physical devices
+which can provide the information.
+
+As a consequence, applications should always check for the presence of the
+extension string for each individual physical device for which they intend
+to issue the new query for and should not have any assumptions about the
+availability of the extension on any given platform.
+
+include::{generated}/interfaces/VK_EXT_pci_bus_info.adoc[]
+
+=== Version History
+
+  * Revision 2, 2018-12-10 (Daniel Rakos)
+  ** Changed all members of the new structure to have the uint32_t type
+  * Revision 1, 2018-10-11 (Daniel Rakos)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_physical_device_drm.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_physical_device_drm.adoc
new file mode 100644
index 0000000..72bcfed
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_physical_device_drm.adoc
@@ -0,0 +1,48 @@
+// Copyright (c) 2020 Simon Ser
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_physical_device_drm.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Simon Ser
+
+=== Description
+
+This extension provides new facilities to query DRM properties for physical
+devices, enabling users to match Vulkan physical devices with DRM nodes on
+Linux.
+
+Its functionality closely overlaps with
+`EGL_EXT_device_drm`^<<VK_EXT_physical_device_drm-fn1,1>>^.
+Unlike the EGL extension, this extension does not expose a string containing
+the name of the device file and instead exposes device minor numbers.
+
+DRM defines multiple device node types.
+Each physical device may have one primary node and one render node
+associated.
+Physical devices may have no primary node (e.g. if the device does not have
+a display subsystem), may have no render node (e.g. if it is a software
+rendering engine), or may have neither (e.g. if it is a software rendering
+engine without a display subsystem).
+
+To query DRM properties for a physical device, chain
+slink:VkPhysicalDeviceDrmPropertiesEXT to slink:VkPhysicalDeviceProperties2.
+
+include::{generated}/interfaces/VK_EXT_physical_device_drm.adoc[]
+
+=== References
+
+  . [[VK_EXT_physical_device_drm-fn1]]
+    https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_device_drm.txt[`EGL_EXT_device_drm`]
+
+=== Version History
+
+  * Revision 1, 2021-06-09
+  ** First stable revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_cache_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_cache_control.adoc
new file mode 100644
index 0000000..46f4979
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_cache_control.adoc
@@ -0,0 +1,120 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_cache_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-23
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Gregory Grebe, AMD
+  - Tobias Hector, AMD
+  - Matthaeus Chajdas, AMD
+  - Mitch Singer, AMD
+  - Spencer Fricke, Samsung Electronics
+  - Stuart Smith, Imagination Technologies
+  - Jeff Bolz, NVIDIA Corporation
+  - Daniel Koch, NVIDIA Corporation
+  - Dan Ginsburg, Valve Corporation
+  - Jeff Leger, QUALCOMM
+  - Michal Pietrasiuk, Intel
+  - Jan-Harald Fredriksen, Arm Limited
+
+=== Description
+
+This extension adds flags to stext:Vk*PipelineCreateInfo and
+slink:VkPipelineCacheCreateInfo structures with the aim of improving the
+predictability of pipeline creation cost.
+The goal is to provide information about potentially expensive hazards
+within the client driver during pipeline creation to the application before
+carrying them out rather than after.
+
+=== Background
+
+Pipeline creation is a costly operation, and the explicit nature of the
+Vulkan design means that cost is not hidden from the developer.
+Applications are also expected to schedule, prioritize, and load balance all
+calls for pipeline creation.
+It is strongly advised that applications create pipelines sufficiently ahead
+of their usage.
+Failure to do so will result in an unresponsive application, intermittent
+stuttering, or other poor user experiences.
+Proper usage of pipeline caches and/or derivative pipelines help mitigate
+this but is not assured to eliminate disruption in all cases.
+In the event that an ahead-of-time creation is not possible, considerations
+should be taken to ensure that the current execution context is suitable for
+the workload of pipeline creation including possible shader compilation.
+
+Applications making API calls to create a pipeline must be prepared for any
+of the following to occur:
+
+  * OS/kernel calls to be made by the ICD
+  * Internal memory allocation not tracked by the pname:pAllocator passed to
+    ftext:vkCreate*Pipelines
+  * Internal thread synchronization or yielding of the current thread's core
+  * Extremely long (multi-millisecond+), blocking, compilation times
+  * Arbitrary call stacks depths and stack memory usage
+
+The job or task based game engines that are being developed to take
+advantage of explicit graphics APIs like Vulkan may behave exceptionally
+poorly if any of the above scenarios occur.
+However, most game engines are already built to "`stream`" in assets
+dynamically as the user plays the game.
+By adding control by way of tlink:VkPipelineCreateFlags, we can require an
+ICD to report back a failure in critical execution paths rather than forcing
+an unexpected wait.
+
+Applications can prevent unexpected compilation by setting
+ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT on
+stext:Vk*PipelineCreateInfo::pname:flags.
+When set, an ICD must not attempt pipeline or shader compilation to create
+the pipeline object.
+In such a case, if the implementation fails to create a pipeline without
+compilation, the implementation must: return the result
+ename:VK_PIPELINE_COMPILE_REQUIRED_EXT and return dlink:VK_NULL_HANDLE for
+the pipeline.
+
+By default ftext:vkCreate*Pipelines calls must attempt to create all
+pipelines before returning.
+Setting ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT on
+stext:Vk*PipelineCreateInfo::pname:flags can be used as an escape hatch for
+batched pipeline creates.
+
+Hidden locks also add to the unpredictability of the cost of pipeline
+creation.
+The most common case of locks inside the stext:vkCreate*Pipelines is
+internal synchronization of the slink:VkPipelineCache object.
+ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT can be set
+when calling flink:vkCreatePipelineCache to state the cache is
+<<fundamentals-threadingbehavior,externally synchronized>>.
+
+The hope is that armed with this information application and engine
+developers can leverage existing asset streaming systems to recover from
+"just-in-time" pipeline creation stalls.
+
+include::{generated}/interfaces/VK_EXT_pipeline_creation_cache_control.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2019-11-01 (Gregory Grebe)
+  ** Initial revision
+  * Revision 2, 2020-02-24 (Gregory Grebe)
+  ** Initial public revision
+  * Revision 3, 2020-03-23 (Tobias Hector)
+  ** Changed ename:VK_PIPELINE_COMPILE_REQUIRED_EXT to a success code,
+     adding an alias for the original
+     ename:VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT.
+     Also updated the xml to include these codes as return values.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_feedback.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_feedback.adoc
new file mode 100644
index 0000000..ff8fdb2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_creation_feedback.adoc
@@ -0,0 +1,46 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_feedback.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-12
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jean-Francois Roy, Google
+  - Hai Nguyen, Google
+  - Andrew Ellem, Google
+  - Bob Fraser, Google
+  - Sujeevan Rajayogam, Google
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Neil Henning, AMD
+
+=== Description
+
+This extension adds a mechanism to provide feedback to an application about
+pipeline creation, with the specific goal of allowing a feedback loop
+between build systems and in-the-field application executions to ensure
+effective pipeline caches are shipped to customers.
+
+include::{generated}/interfaces/VK_EXT_pipeline_creation_feedback.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2019-03-12 (Jean-Francois Roy)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_library_group_handles.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_library_group_handles.adoc
new file mode 100644
index 0000000..3dc9da0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_library_group_handles.adoc
@@ -0,0 +1,50 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_library_group_handles.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-01-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Hans-Kristian Arntzen, Valve
+  - Stuart Smith, AMD
+  - Ricardo Garcia, Igalia
+  - Lionel Landwerlin, Intel
+  - Eric Werness, NVIDIA
+  - Daniel Koch, NVIDIA
+
+
+=== Description
+
+When using pipeline libraries in ray tracing pipelines, a library might get
+linked into different pipelines in an incremental way.
+An application can have a strategy where a ray tracing pipeline is comprised
+of N pipeline libraries and is later augumented by creating a new pipeline
+with N + 1 libraries.
+Without this extension, all group handles must be re-queried as the group
+handle is tied to the pipeline, not the library.
+This is problematic for applications which aim to decouple construction of
+record buffers and the linkage of ray tracing pipelines.
+
+To aid in this, this extension enables support for querying group handles
+directly from pipeline libraries.
+Group handles obtained from a library must: remain bitwise identical in any
+sname:VkPipeline that links to the library.
+
+With this feature, the extension also improves compatibility with DXR 1.1
+AddToStateObject(), which guarantees that group handles returned remain
+bitwise identical between parent and child pipelines.
+In addition, querying group handles from COLLECTION objects is also
+supported with that API.
+
+include::{generated}/interfaces/VK_EXT_pipeline_library_group_handles.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-01-25 (Hans-Kristian Arntzen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_properties.adoc
new file mode 100644
index 0000000..9dc4228
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_properties.adoc
@@ -0,0 +1,81 @@
+// Copyright 2020-2023 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-04-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mukund Keshava, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Mark Bellamy, Arm
+
+
+=== Description
+
+Vulkan SC requires offline compilation of pipelines.
+In order to support this, the pipeline state is represented in a
+https://github.com/KhronosGroup/VulkanSC-Docs/wiki/JSON-schema[JSON schema]
+that is read by an offline tool for compilation.
+
+One method of developing a Vulkan SC application is to author a Vulkan
+application and use a layer to record and serialize the pipeline state and
+shaders for offline compilation.
+Each pipeline is represented by a separate JSON file, and can be identified
+with a pname:pipelineIdentifier.
+
+Once the pipelines have been compiled by the offline pipeline cache
+compiler, the Vulkan SC application can then use this
+pname:pipelineIdentifier for identifying the pipeline via Vulkan SC's
+pname:VkPipelineIdentifierInfo structure.
+
+This extension allows the Vulkan application to query the
+pname:pipelineIdentifier associated with each pipeline so that the
+application can store this with its pipeline metadata and the Vulkan SC
+application will then use to map the same state to an entry in the Vulkan SC
+pipeline cache.
+
+It is expected that this extension will initially be implemented in the json
+generation layer, although we can envision that there might be future uses
+for it in native Vulkan drivers as well.
+
+include::{generated}/interfaces/VK_EXT_pipeline_properties.adoc[]
+
+=== Issues
+(1) This extension does not make sense on a strict Vulkan SC implementation.
+It may however be of potential use in a non-strict Vulkan SC implementation.
+Should this extension be enabled as part of Vulkan SC as well?
+--
+*RESOLVED*: No.
+This extension will not be enabled for Vulkan SC.
+--
+
+(2) This is intended to be a general pipeline properties query, but is
+currently only retrieving the pipeline identifier.
+Should the pipeline identifier query be mandatory for this extension and for
+all queries using this entry point?
+--
+*RESOLVED*: Use slink:VkBaseOutStructure for the return parameter.
+Currently this is required to actually be a
+slink:VkPipelinePropertiesIdentifierEXT structure, but that could be relaxed
+in the future to allow other structure types or to allow other structures to
+be chained in along with this one.
+--
+
+(3) Should there be a feature structure? Should it be required?
+--
+*RESOLVED*: Add a feature structure, and a feature for querying pipeline
+identifier, but allow it to be optional so that this extension can be used
+as the basis for other pipeline property queries without requiring the
+pipeline identifier to be supported.
+--
+
+=== Version History
+
+  * Revision 1, 2022-04-19 (Mukund Keshava, Daniel Koch)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_protected_access.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_protected_access.adoc
new file mode 100644
index 0000000..f90a7f1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_protected_access.adoc
@@ -0,0 +1,30 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_protected_access.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-28
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Jörg Wagner, Arm
+  - Ralph Potter, Samsung
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension allows protected memory access to be specified per pipeline
+as opposed to per device.
+Through the usage of this extension, any performance penalty paid due to
+access to protected memory will be limited to the specific pipelines that
+make such accesses.
+
+include::{generated}/interfaces/VK_EXT_pipeline_protected_access.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-07-28 (Shahbaz Youssefi)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_robustness.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_robustness.adoc
new file mode 100644
index 0000000..16d239c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_pipeline_robustness.adoc
@@ -0,0 +1,40 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_robustness.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-12
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_EXT_robustness2`
+  - Interacts with `apiext:VK_EXT_image_robustness`
+  - Interacts with `apiext:VK_KHR_ray_tracing_pipeline`
+*Contributors*::
+  - Jarred Davies, Imagination Technologies
+  - Alex Walters, Imagination Technologies
+  - Piers Daniell, NVIDIA
+  - Graeme Leese, Broadcom Corporation
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Faith Ekstrand, Intel
+  - Lionel Landwerlin, Intel
+  - Shahbaz Youssefi, Google, Inc.
+
+=== Description
+
+This extension allows users to request robustness on a per-pipeline stage
+basis.
+
+As <<features-robustBufferAccess, pname:robustBufferAccess>> and other
+robustness features may have an adverse effect on performance, this
+extension is designed to allow users to request robust behavior only where
+it may be needed.
+
+include::{generated}/interfaces/VK_EXT_pipeline_robustness.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-07-12 (Jarred Davies)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_post_depth_coverage.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_post_depth_coverage.adoc
new file mode 100644
index 0000000..58e9bef
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_post_depth_coverage.adoc
@@ -0,0 +1,54 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_post_depth_coverage.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-07-17
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_post_depth_coverage.txt[`GL_ARB_post_depth_coverage`]
+    and
+    {GLregistry}/EXT/EXT_post_depth_coverage.txt[`GL_EXT_post_depth_coverage`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_post_depth_coverage`
+
+which allows the fragment shader to control whether values in the
+code:SampleMask built-in input variable reflect the coverage after early
+<<fragops-depth,depth>> and <<fragops-stencil,stencil>> tests are applied.
+
+This extension adds a new code:PostDepthCoverage execution mode under the
+code:SampleMaskPostDepthCoverage capability.
+When this mode is specified along with code:EarlyFragmentTests, the value of
+an input variable decorated with the
+<<interfaces-builtin-variables-samplemask, code:SampleMask>> built-in
+reflects the coverage after the early fragment tests are applied.
+Otherwise, it reflects the coverage before the depth and stencil tests.
+
+When using GLSL source-based shading languages, the code:post_depth_coverage
+layout qualifier from GL_ARB_post_depth_coverage or
+GL_EXT_post_depth_coverage maps to the code:PostDepthCoverage execution
+mode.
+
+include::{generated}/interfaces/VK_EXT_post_depth_coverage.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SampleMaskPostDepthCoverage,
+    code:SampleMaskPostDepthCoverage>>
+
+=== Version History
+
+  * Revision 1, 2017-07-17 (Daniel Koch)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitive_topology_list_restart.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitive_topology_list_restart.adoc
new file mode 100644
index 0000000..982d780
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitive_topology_list_restart.adoc
@@ -0,0 +1,33 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_primitive_topology_list_restart.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-01-11
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Courtney Goeltzenleuchter, Google
+  - Shahbaz Youssefi, Google
+
+=== Description
+
+This extension allows list primitives to use the primitive restart index
+value.
+This provides a more efficient implementation when layering OpenGL
+functionality on Vulkan by avoiding emulation which incurs data copies.
+
+include::{generated}/interfaces/VK_EXT_primitive_topology_list_restart.adoc[]
+
+=== Version History
+
+  * Revision 0, 2020-09-14 (Courtney Goeltzenleuchter)
+  ** Internal revisions
+
+  * Revision 1, 2021-01-11 (Shahbaz Youssefi)
+  ** Add the `primitiveTopologyPatchListRestart` feature
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitives_generated_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitives_generated_query.adoc
new file mode 100644
index 0000000..c9a5a60
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_primitives_generated_query.adoc
@@ -0,0 +1,78 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_primitives_generated_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-01-24
+*Contributors*::
+  - Shahbaz Youssefi, Google
+  - Piers Daniell, NVIDIA
+  - Faith Ekstrand, Collabora
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+This extension adds support for a new query type to match OpenGL's
+`GL_PRIMITIVES_GENERATED` to support layering.
+
+include::{generated}/interfaces/VK_EXT_primitives_generated_query.adoc[]
+
+=== Issues
+
+1) Can the query from `VK_EXT_transform_feedback` be used instead?
+
+*RESOLVED*: No.
+While the query from VK_EXT_transform_feedback can produce the same results
+as in this extension, it is only available while transform feedback is
+active.
+The OpenGL `GL_PRIMITIVES_GENERATED` query is independent from transform
+feedback.
+Emulation through artificial transform feedback is unnecessarily
+inefficient.
+
+2) Can `VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT` be used
+instead?
+
+*RESOLVED*: It could, but we prefer the extension for simplicity.
+Vulkan requires that only one query be active at a time.
+If both the `GL_PRIMITIVES_GENERATED` and the
+`GL_CLIPPING_INPUT_PRIMITIVES_ARB` queries need to be simultaneously
+enabled, emulation of both through
+`VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT` is inconvenient.
+
+3) On some hardware, this query cannot be implemented if
+sname:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
+is enabled.
+How will this be handled?
+
+*RESOLVED*: A feature flag is exposed by this extension for this.
+On said hardware, the GL implementation disables rasterizer-discard and
+achieves the same effect through other means.
+It will not be able to do the same in Vulkan due to lack of state
+information.
+A feature flag is exposed by this extension so the OpenGL implementation on
+top of Vulkan would be able to implement a similar workaround.
+
+4) On some hardware, this query cannot be implemented for non-zero query
+indices.
+How will this be handled?
+
+*RESOLVED*: A feature flag is exposed by this extension for this.
+If this feature is not present, the query from `VK_EXT_transform_feedback`
+can be used to the same effect.
+
+5) How is the interaction of this extension with
+`transformFeedbackRasterizationStreamSelect` handled?
+
+*RESOLVED*: Disallowed for non-zero streams.
+In OpenGL, the rasterization stream is always stream zero.
+
+=== Version History
+
+  * Revision 1, 2021-06-23 (Shahbaz Youssefi)
+  ** Internal revisions
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_private_data.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_private_data.adoc
new file mode 100644
index 0000000..cdf8a45
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_private_data.adoc
@@ -0,0 +1,73 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_private_data.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-25
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthew Rusch, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension is a device extension which enables attaching arbitrary
+payloads to Vulkan objects.
+It introduces the idea of private data slots as a means of storing a 64-bit
+unsigned integer of application defined data.
+Private data slots can be created or destroyed any time an associated device
+is available.
+Private data slots can be reserved at device creation time, and limiting use
+to the amount reserved will allow the extension to exhibit better
+performance characteristics.
+
+include::{generated}/interfaces/VK_EXT_private_data.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Examples
+
+  * In progress
+
+=== Issues
+
+(1) If I have to create a slink:VkPrivateDataSlot to store and retrieve data
+on an object, how does this extension help me? Will I not need to store the
+slink:VkPrivateDataSlot mapping with each object, and if I am doing that, I
+might as well just store the original data!
+--
+**RESOLVED:** The slink:VkPrivateDataSlot can be thought of as an opaque
+index into storage that is reserved in each object.
+That is, you can use the same slink:VkPrivateDataSlot with each object for a
+specific piece of information.
+For example, if a layer wishes to track per-object information, the layer
+only needs to allocate one slink:VkPrivateDataSlot per device and it can use
+that private data slot for all of the device's child objects.
+This allows multiple layers to store private data without conflicting with
+each other's and/or the application's private data.
+--
+
+(2) What if I need to store more than 64-bits of information per object?
+--
+**RESOLVED:** The data that you store per object could be a pointer to
+another object or structure of your own allocation.
+--
+
+=== Version History
+
+  * Revision 1, 2020-01-15 (Matthew Rusch)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_provoking_vertex.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_provoking_vertex.adoc
new file mode 100644
index 0000000..5255166
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_provoking_vertex.adoc
@@ -0,0 +1,85 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_provoking_vertex.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-02-22
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alexis Hétu, Google
+  - Bill Licea-Kane, Qualcomm
+  - Daniel Koch, Nvidia
+  - Jamie Madill, Google
+  - Jan-Harald Fredriksen, Arm
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, Nvidia
+  - Jeff Leger, Qualcomm
+  - Jesse Hall, Google
+  - Jörg Wagner, Arm
+  - Matthew Netsch, Qualcomm
+  - Mike Blumenkrantz, Valve
+  - Piers Daniell, Nvidia
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension allows changing the provoking vertex convention between
+Vulkan's default convention (first vertex) and OpenGL's convention (last
+vertex).
+
+This extension is intended for use by API-translation layers that implement
+APIs like OpenGL on top of Vulkan, and need to match the source API's
+provoking vertex convention.
+Applications using Vulkan directly should use Vulkan's default convention.
+
+include::{generated}/interfaces/VK_EXT_provoking_vertex.adoc[]
+
+=== Issues
+
+1) At what granularity should this state be set?
+
+*RESOLVED*: At pipeline bind, with an optional per-render pass restriction.
+
+The most natural place to put this state is in the graphics pipeline object.
+Some implementations require it to be known when creating the pipeline, and
+pipeline state is convenient for implementing OpenGL 3.2's
+glProvokingVertex, which can change the state between draw calls.
+However, some implementations can only change it approximately render pass
+granularity.
+To accommodate both, provoking vertex will be pipeline state, but
+implementations can require that only one mode is used within a render pass
+instance; the render pass's mode is chosen implicitly when the first
+pipeline is bound.
+
+2) Does the provoking vertex mode affect the order that vertices are written
+to transform feedback buffers?
+
+*RESOLVED*: Yes, to enable layered implementations of OpenGL and D3D.
+
+All of OpenGL, OpenGL ES, and Direct3D 11 require that vertices are written
+to transform feedback buffers such that flat-shaded attributes have the same
+value when drawing the contents of the transform feedback buffer as they did
+in the original drawing when the transform feedback buffer was written
+(assuming the provoking vertex mode has not changed, in APIs that support
+more than one mode).
+
+
+=== Version History
+
+  * Revision 1, (1c) 2021-02-22 (Jesse Hall)
+  ** Added
+     VkPhysicalDeviceProvokingVertexPropertiesEXT::transformFeedbackPreservesTriangleFanProvokingVertex
+     to accommodate implementations that cannot change the transform
+     feedback vertex order for triangle fans.
+  * Revision 1, (1b) 2020-06-14 (Jesse Hall)
+  ** Added
+     VkPhysicalDeviceProvokingVertexFeaturesEXT::transformFeedbackPreservesProvokingVertex
+     and required that transform feedback write vertices so as to preserve
+     the provoking vertex of each primitive.
+  * Revision 1, (1a) 2019-10-23 (Jesse Hall)
+  ** Initial draft, based on a proposal by Alexis Hétu
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_queue_family_foreign.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_queue_family_foreign.adoc
new file mode 100644
index 0000000..bb8e8f5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_queue_family_foreign.adoc
@@ -0,0 +1,48 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_queue_family_foreign.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-11-01
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Lina Versace, Google
+  - James Jones, NVIDIA
+  - Faith Ekstrand, Intel
+  - Jesse Hall, Google
+  - Daniel Rakos, AMD
+  - Ray Smith, ARM
+
+=== Description
+
+This extension defines a special queue family,
+ename:VK_QUEUE_FAMILY_FOREIGN_EXT, which can be used to transfer ownership
+of resources backed by external memory to foreign, external queues.
+This is similar to ename:VK_QUEUE_FAMILY_EXTERNAL_KHR, defined in
+`apiext:VK_KHR_external_memory`.
+The key differences between the two are:
+
+  * The queues represented by ename:VK_QUEUE_FAMILY_EXTERNAL_KHR must share
+    the same physical device and the same driver version as the current
+    slink:VkInstance.
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT has no such restrictions.
+    It can represent devices and drivers from other vendors, and can even
+    represent non-Vulkan-capable devices.
+  * All resources backed by external memory support
+    ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
+    Support for ename:VK_QUEUE_FAMILY_FOREIGN_EXT is more restrictive.
+  * Applications should expect transitions to/from
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT to be more expensive than transitions
+    to/from ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
+
+include::{generated}/interfaces/VK_EXT_queue_family_foreign.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-11-01 (Lina Versace)
+  ** Squashed internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rasterization_order_attachment_access.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rasterization_order_attachment_access.adoc
new file mode 100644
index 0000000..72c78bc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rasterization_order_attachment_access.adoc
@@ -0,0 +1,33 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_rasterization_order_attachment_access.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-04
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Tobias Hector, AMD
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+This extension extends the mechanism of input attachments to allow access to
+framebuffer attachments that are used both as input and as color or
+depth/stencil attachments from one fragment to the next, in rasterization
+order, without explicit synchronization.
+
+include::{generated}/interfaces/VK_EXT_rasterization_order_attachment_access.adoc[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2022-07-04 (Jan-Harald Fredriksen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rgba10x6_formats.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rgba10x6_formats.adoc
new file mode 100644
index 0000000..31ffb1d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_rgba10x6_formats.adoc
@@ -0,0 +1,48 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_rgba10x6_formats.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+  - Graeme Leese, Broadcom
+  - Spencer Fricke, Samsung
+
+=== Description
+
+This extension enables the
+ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 format to be used without
+a <<samplers-YCbCr-conversion, sampler {YCbCr} conversion>> enabled.
+
+include::{generated}/interfaces/VK_EXT_rgba10x6_formats.adoc[]
+
+=== Issues
+
+1) Should we reuse the existing format enumeration or introduce a new one?
+
+*RESOLVED*: We reuse an existing format enumeration,
+ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, that was previously
+exclusively used for YCbCr and therefore had a set of limitations related to
+that usage.
+The alternative was to introduce a new format token with exactly the same
+bit representation as the existing token, but without the limitations.
+
+2) Should we only introduce
+ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 or also 1-3 component
+variations?
+
+*RESOLVED*: Only the 4-component format is introduced because the 1- and 2-
+component variations are already not exclusive to YCbCr, and the 3-component
+variation is not a good match for hardware capabilities.
+
+=== Version History
+
+  * Revision 1, 2021-09-29 (Jan-Harald Fredriksen)
+  ** Initial EXT version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_robustness2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_robustness2.adoc
new file mode 100644
index 0000000..77b1e1d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_robustness2.adoc
@@ -0,0 +1,63 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_robustness2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-01-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Liam Middlebrook, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds stricter requirements for how out of bounds reads and
+writes are handled.
+Most accesses must: be tightly bounds-checked, out of bounds writes must: be
+discarded, out of bound reads must: return zero.
+Rather than allowing multiple possible [eq]#(0,0,0,x)# vectors, the out of
+bounds values are treated as zero, and then missing components are inserted
+based on the format as described in <<textures-conversion-to-rgba,
+Conversion to RGBA>> and <<fxvertex-input-extraction,vertex input attribute
+extraction>>.
+
+These additional requirements may: be expensive on some implementations, and
+should only be enabled when truly necessary.
+
+This extension also adds support for "`null descriptors`", where
+dlink:VK_NULL_HANDLE can: be used instead of a valid handle.
+Accesses to null descriptors have well-defined behavior, and do not rely on
+robustness.
+
+include::{generated}/interfaces/VK_EXT_robustness2.adoc[]
+
+=== Issues
+
+1. Why do
+   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustUniformBufferAccessSizeAlignment
+   and
+   slink:VkPhysicalDeviceRobustness2PropertiesEXT::pname:robustStorageBufferAccessSizeAlignment
+   exist?
+
+*RESOLVED*: Some implementations cannot efficiently tightly bounds-check all
+buffer accesses.
+Rather, the size of the bound range is padded to some power of two multiple,
+up to 256 bytes for uniform buffers and up to 4 bytes for storage buffers,
+and that padded size is bounds-checked.
+This is sufficient to implement D3D-like behavior, because D3D only allows
+binding whole uniform buffers or ranges that are a multiple of 256 bytes,
+and D3D raw and structured buffers only support 32-bit accesses.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2019-11-01 (Jeff Bolz, Liam Middlebrook)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sample_locations.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sample_locations.adoc
new file mode 100644
index 0000000..7d63a15
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sample_locations.adoc
@@ -0,0 +1,59 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_sample_locations.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-02
+*Contributors*::
+  - Mais Alnasser, AMD
+  - Matthaeus G. Chajdas, AMD
+  - Maciej Jesionowski, AMD
+  - Daniel Rakos, AMD
+  - Slawomir Grajewski, Intel
+  - Jeff Bolz, NVIDIA
+  - Bill Licea-Kane, Qualcomm
+
+=== Description
+
+This extension allows an application to modify the locations of samples
+within a pixel used in rasterization.
+Additionally, it allows applications to specify different sample locations
+for each pixel in a group of adjacent pixels, which can: increase
+antialiasing quality (particularly if a custom resolve shader is used that
+takes advantage of these different locations).
+
+It is common for implementations to optimize the storage of depth values by
+storing values that can: be used to reconstruct depth at each sample
+location, rather than storing separate depth values for each sample.
+For example, the depth values from a single triangle may: be represented
+using plane equations.
+When the depth value for a sample is needed, it is automatically evaluated
+at the sample location.
+Modifying the sample locations causes the reconstruction to no longer
+evaluate the same depth values as when the samples were originally
+generated, thus the depth aspect of a depth/stencil attachment must: be
+cleared before rendering to it using different sample locations.
+
+Some implementations may: need to evaluate depth image values while
+performing image layout transitions.
+To accommodate this, instances of the slink:VkSampleLocationsInfoEXT
+structure can: be specified for each situation where an explicit or
+automatic layout transition has to take place.
+slink:VkSampleLocationsInfoEXT can: be chained from
+slink:VkImageMemoryBarrier structures to provide sample locations for layout
+transitions performed by flink:vkCmdWaitEvents and
+flink:vkCmdPipelineBarrier calls, and
+slink:VkRenderPassSampleLocationsBeginInfoEXT can: be chained from
+slink:VkRenderPassBeginInfo to provide sample locations for layout
+transitions performed implicitly by a render pass instance.
+
+include::{generated}/interfaces/VK_EXT_sample_locations.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-08-02 (Daniel Rakos)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sampler_filter_minmax.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sampler_filter_minmax.adoc
new file mode 100644
index 0000000..a3cea86
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_sampler_filter_minmax.adoc
@@ -0,0 +1,50 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_sampler_filter_minmax.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-19
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+In unextended Vulkan, minification and magnification filters such as LINEAR
+allow sampled image lookups to return a filtered texel value produced by
+computing a weighted average of a collection of texels in the neighborhood
+of the texture coordinate provided.
+
+This extension provides a new sampler parameter which allows applications to
+produce a filtered texel value by computing a component-wise minimum (MIN)
+or maximum (MAX) of the texels that would normally be averaged.
+The reduction mode is orthogonal to the minification and magnification
+filter parameters.
+The filter parameters are used to identify the set of texels used to produce
+a final filtered value; the reduction mode identifies how these texels are
+combined.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+EXT suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_EXT_sampler_filter_minmax.adoc[]
+
+=== Version History
+
+  * Revision 2, 2017-05-19 (Piers Daniell)
+  ** Renamed to EXT
+
+  * Revision 1, 2017-03-25 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_scalar_block_layout.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_scalar_block_layout.adoc
new file mode 100644
index 0000000..66f2903
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_scalar_block_layout.adoc
@@ -0,0 +1,41 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_scalar_block_layout.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-14
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Jeff Bolz
+  - Jan-Harald Fredriksen
+  - Graeme Leese
+  - Faith Ekstrand
+  - John Kessenich
+
+=== Description
+
+This extension enables C-like structure layout for SPIR-V blocks.
+It modifies the alignment rules for uniform buffers, storage buffers and
+push constants, allowing non-scalar types to be aligned solely based on the
+size of their components, without additional requirements.
+
+=== Promotion to Vulkan 1.2
+
+Functionality in this extension is included in core Vulkan 1.2, with the EXT
+suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:scalarBlockLayout capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_EXT_scalar_block_layout.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-11-14 (Tobias Hector)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_separate_stencil_usage.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_separate_stencil_usage.adoc
new file mode 100644
index 0000000..e9a3bc2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_separate_stencil_usage.adoc
@@ -0,0 +1,36 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_separate_stencil_usage.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-08
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Jordan Logan, AMD
+
+=== Description
+
+This extension allows specifying separate usage flags for the stencil aspect
+of images with a depth-stencil format at image creation time.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+EXT suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_EXT_separate_stencil_usage.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-11-08 (Daniel Rakos)
+  ** Internal revisions.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float.adoc
new file mode 100644
index 0000000..9292ffc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float.adoc
@@ -0,0 +1,44 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-15
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_atomic_float_add.html[`SPV_EXT_shader_atomic_float_add`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_shader_atomic_float.txt[`GL_EXT_shader_atomic_float`]
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows a shader to contain floating-point atomic operations
+on buffer, workgroup, and image memory.
+It also advertises the SPIR-V code:AtomicFloat32AddEXT and
+code:AtomicFloat64AddEXT capabilities that allows atomic addition on
+floating-points numbers.
+The supported operations include code:OpAtomicFAddEXT,
+code:OpAtomicExchange, code:OpAtomicLoad and code:OpAtomicStore.
+
+include::{generated}/interfaces/VK_EXT_shader_atomic_float.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-AtomicFloat32AddEXT,
+    code:AtomicFloat32AddEXT>>
+  * <<spirvenv-capabilities-table-AtomicFloat64AddEXT,
+    code:AtomicFloat64AddEXT>>
+
+=== Version History
+
+  * Revision 1, 2020-07-15 (Vikram Kushwaha)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float2.adoc
new file mode 100644
index 0000000..2ee46d3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_atomic_float2.adoc
@@ -0,0 +1,66 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-08-14
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires the VK_EXT_shader_atomic_float extension.
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_atomic_float_min_max.html[`SPV_EXT_shader_atomic_float_min_max`]
+    and
+    {spirv}/EXT/SPV_EXT_shader_atomic_float16_add.html[`SPV_EXT_shader_atomic_float16_add`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_shader_atomic_float2.txt[`GLSL_EXT_shader_atomic_float2`]
+*Contributors*::
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension allows a shader to perform 16-bit floating-point atomic
+operations on buffer and workgroup memory as well as floating-point atomic
+minimum and maximum operations on buffer, workgroup, and image memory.
+It advertises the SPIR-V code:AtomicFloat16AddEXT capability which allows
+atomic add operations on 16-bit floating-point numbers and the SPIR-V
+code:AtomicFloat16MinMaxEXT, code:AtomicFloat32MinMaxEXT and
+code:AtomicFloat64MinMaxEXT capabilities which allow atomic minimum and
+maximum operations on floating-point numbers.
+The supported operations include code:OpAtomicFAddEXT, code:OpAtomicFMinEXT
+and code:OpAtomicFMaxEXT.
+
+include::{generated}/interfaces/VK_EXT_shader_atomic_float2.adoc[]
+
+=== Issues
+
+1) Should this extension add support for 16-bit image atomics?
+
+*RESOLVED*: No.
+While Vulkan supports creating storage images with
+ename:VK_FORMAT_R16_SFLOAT and doing load and store on them, the data in the
+shader has a 32-bit representation.
+Vulkan currently has no facility for even basic reading or writing such
+images using 16-bit float values in the shader.
+Adding such functionality would be required before 16-bit image atomics
+would make sense and is outside the scope of this extension.
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-AtomicFloat16AddEXT,
+    code:AtomicFloat32MinMaxEXT>>
+  * <<spirvenv-capabilities-table-AtomicFloat16MinMaxEXT,
+    code:AtomicFloat32MinMaxEXT>>
+  * <<spirvenv-capabilities-table-AtomicFloat32MinMaxEXT,
+    code:AtomicFloat32MinMaxEXT>>
+  * <<spirvenv-capabilities-table-AtomicFloat64MinMaxEXT,
+    code:AtomicFloat64MinMaxEXT>>
+
+=== Version History
+
+  * Revision 1, 2020-08-14 (Faith Ekstrand)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_demote_to_helper_invocation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_demote_to_helper_invocation.adoc
new file mode 100644
index 0000000..27bb4aa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_demote_to_helper_invocation.adoc
@@ -0,0 +1,53 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_demote_to_helper_invocation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-01
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_demote_to_helper_invocation.html[`SPV_EXT_demote_to_helper_invocation`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_demote_to_helper_invocation.txt[`GL_EXT_demote_to_helper_invocation`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds Vulkan support for the
+{spirv}/EXT/SPV_EXT_demote_to_helper_invocation.html[`SPV_EXT_demote_to_helper_invocation`]
+SPIR-V extension.
+That SPIR-V extension provides a new instruction
+code:OpDemoteToHelperInvocationEXT allowing shaders to "`demote`" a fragment
+shader invocation to behave like a helper invocation for its duration.
+The demoted invocation will have no further side effects and will not output
+to the framebuffer, but remains active and can participate in computing
+derivatives and in <<shaders-group-operations, group operations>>.
+This is a better match for the "`discard`" instruction in HLSL.
+
+include::{generated}/interfaces/VK_EXT_shader_demote_to_helper_invocation.adoc[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-DemoteToHelperInvocationEXT,
+    code:DemoteToHelperInvocationEXT>>
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2019-06-01 (Jeff Bolz)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_image_atomic_int64.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_image_atomic_int64.adoc
new file mode 100644
index 0000000..a3c724a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_image_atomic_int64.adoc
@@ -0,0 +1,45 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_image_atomic_int64.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-14
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_image_int64.html[`SPV_EXT_shader_image_int64`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_shader_image_int64.txt[`GLSL_EXT_shader_image_int64`]
+*Contributors*::
+  - Matthaeus Chajdas, AMD
+  - Graham Wihlidal, Epic Games
+  - Tobias Hector, AMD
+  - Jeff Bolz, Nvidia
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension extends existing 64-bit integer atomic support to enable
+these operations on images as well.
+
+When working with large 2- or 3-dimensional data sets (e.g. rasterization or
+screen-space effects), image accesses are generally more efficient than
+equivalent buffer accesses.
+This extension allows applications relying on 64-bit integer atomics in this
+manner to quickly improve performance with only relatively minor code
+changes.
+
+64-bit integer atomic support is guaranteed for optimally tiled images with
+the ename:VK_FORMAT_R64_UINT and ename:VK_FORMAT_R64_SINT formats.
+
+include::{generated}/interfaces/VK_EXT_shader_image_atomic_int64.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-07-14 (Tobias Hector)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_module_identifier.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_module_identifier.adoc
new file mode 100644
index 0000000..4d41103
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_module_identifier.adoc
@@ -0,0 +1,57 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_module_identifier.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-16
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Hans-Kristian Arntzen, Valve
+  - Ricardo Garcia, Igalia
+  - Piers Daniell, NVIDIA
+  - Jan-Harald Fredriksen, Arm
+  - Tom Olson, Arm
+  - Faith Ekstrand, Collabora
+
+=== Description
+
+Some applications generate SPIR-V code at runtime.
+When pipeline caches are primed, either explicitly through e.g.
+slink:VkPipelineCache mechanisms, or implicitly through driver managed
+caches, having to re-generate SPIR-V modules is redundant.
+SPIR-V modules could be cached on disk by an application, but the extra disk
+size requirement might be prohibitive in some use cases.
+
+This extension adds the ability for an application to query a small
+identifier associated with a slink:VkShaderModule.
+On subsequent runs of the application, the same identifier can: be provided
+in lieu of a slink:VkShaderModule object.
+A pipeline creation call with such a module may: succeed if a pipeline could
+be created without invoking compilation, and information inside the SPIR-V
+module is not required by the implementation.
+
+ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT must: be used
+if only the identifier is provided, and this use case is intended to work
+like a non-blocking, speculative compile.
+Applications can: fallback as necessary.
+
+The main motivation for identifying the module itself and not the entire
+pipeline is that pipeline identifiers change when a driver is updated, but
+module identifiers are expected to be stable for any particular driver
+implementation.
+This approach is helpful for shader pre-compilation systems which can prime
+pipeline caches ahead of time.
+When on-disk pipeline caches are updated, the same shader identifiers could
+lead to a pipeline cache hit.
+
+include::{generated}/interfaces/VK_EXT_shader_module_identifier.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-03-16 (Hans-Kristian Arntzen)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_object.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_object.adoc
new file mode 100644
index 0000000..cc8351b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_object.adoc
@@ -0,0 +1,353 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_object.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-03-30
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_EXT_extended_dynamic_state`
+  - Interacts with `apiext:VK_EXT_extended_dynamic_state2`
+  - Interacts with `apiext:VK_EXT_extended_dynamic_state3`
+  - Interacts with `apiext:VK_EXT_vertex_input_dynamic_state`
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+  - Sandy Jamieson, Nintendo
+  - Žiga Markuš, LunarG
+  - Tobias Hector, AMD
+  - Alex Walters, Imagination
+  - Shahbaz Youssefi, Google
+  - Ralph Potter, Samsung
+  - Jan-Harald Fredriksen, ARM
+  - Connor Abott, Valve
+  - Arseny Kapoulkine, Roblox
+  - Patrick Doane, Activision
+  - Jeff Leger, Qualcomm
+  - Stu Smith, AMD
+  - Chris Glover, Google
+  - Ricardo Garcia, Igalia
+  - Faith Ekstrand, Collabora
+  - Timur Kristóf, Valve
+  - Constantine Shablya, Collabora
+  - Daniel Koch, NVIDIA
+  - Alyssa Rosenzweig, Collabora
+  - Mike Blumenkrantz, Valve
+  - Samuel Pitoiset, Valve
+  - Qun Lin, AMD
+  - Spencer Fricke, LunarG
+  - Soroush Faghihi Kashani, Imagination
+
+=== Description
+
+This extension introduces a new slink:VkShaderEXT object type which
+represents a single compiled shader stage.
+Shader objects provide a more flexible alternative to slink:VkPipeline
+objects, which may be helpful in certain use cases.
+
+include::{generated}/interfaces/VK_EXT_shader_object.adoc[]
+
+=== Examples
+
+*Example 1*
+
+Create linked pair of vertex and fragment shaders.
+
+[source,c++]
+----
+// Logical device created with the shaderObject feature enabled
+VkDevice device;
+
+// SPIR-V shader code for a vertex shader, along with its size in bytes
+void* pVertexSpirv;
+size_t vertexSpirvSize;
+
+// SPIR-V shader code for a fragment shader, along with its size in bytes
+void* pFragmentSpirv;
+size_t fragmentSpirvSize;
+
+// Descriptor set layout compatible with the shaders
+VkDescriptorSetLayout descriptorSetLayout;
+
+VkShaderCreateInfoEXT shaderCreateInfos[2] =
+{
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexSpirvSize,
+        .pCode = pVertexSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentSpirvSize,
+        .pCode = pFragmentSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    }
+};
+
+VkResult result;
+VkShaderEXT shaders[2];
+
+result = vkCreateShadersEXT(device, 2, &shaderCreateInfos, NULL, shaders);
+if (result != VK_SUCCESS)
+{
+    // Handle error
+}
+----
+
+Later, during command buffer recording, bind the linked shaders and draw.
+
+[source,c++]
+----
+// Command buffer in the recording state
+VkCommandBuffer commandBuffer;
+
+// Vertex and fragment shader objects created above
+VkShaderEXT shaders[2];
+
+// Assume vertex buffers, descriptor sets, etc. have been bound, and existing
+// state setting commands have been called to set all required state
+
+const VkShaderStageFlagBits stages[2] =
+{
+    VK_SHADER_STAGE_VERTEX_BIT,
+    VK_SHADER_STAGE_FRAGMENT_BIT
+};
+
+// Bind linked shaders
+vkCmdBindShadersEXT(commandBuffer, 2, stages, shaders);
+
+// Equivalent to the previous line. Linked shaders can be bound one at a time,
+// in any order:
+// vkCmdBindShadersEXT(commandBuffer, 1, &stages[1], &shaders[1]);
+// vkCmdBindShadersEXT(commandBuffer, 1, &stages[0], &shaders[0]);
+
+// The above is sufficient to draw if the device was created with the
+// tessellationShader and geometryShader features disabled. Otherwise, since
+// those stages should not execute, vkCmdBindShadersEXT() must be called at
+// least once with each of their stages in pStages before drawing:
+
+const VkShaderStageFlagBits unusedStages[3] =
+{
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    VK_SHADER_STAGE_GEOMETRY_BIT
+};
+
+// NULL pShaders is equivalent to an array of stageCount VK_NULL_HANDLE values,
+// meaning no shaders are bound to those stages, and that any previously bound
+// shaders are unbound
+vkCmdBindShadersEXT(commandBuffer, 3, unusedStages, NULL);
+
+// Graphics shader objects may only be used to draw inside dynamic render pass
+// instances begun with vkCmdBeginRendering(), assume one has already been begun
+
+// Draw a triangle
+vkCmdDraw(commandBuffer, 3, 1, 0, 0);
+----
+
+*Example 2*
+
+Create unlinked vertex, geometry, and fragment shaders.
+
+[source,c++]
+----
+// Logical device created with the shaderObject feature enabled
+VkDevice device;
+
+// SPIR-V shader code for vertex shaders, along with their sizes in bytes
+void* pVertexSpirv[2];
+size_t vertexSpirvSize[2];
+
+// SPIR-V shader code for a geometry shader, along with its size in bytes
+void pGeometrySpirv;
+size_t geometrySpirvSize;
+
+// SPIR-V shader code for fragment shaders, along with their sizes in bytes
+void* pFragmentSpirv[2];
+size_t fragmentSpirvSize[2];
+
+// Descriptor set layout compatible with the shaders
+VkDescriptorSetLayout descriptorSetLayout;
+
+VkShaderCreateInfoEXT shaderCreateInfos[5] =
+{
+    // Stage order does not matter
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_GEOMETRY_BIT,
+        .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = pGeometrySpirv,
+        .pCode = geometrySpirvSize,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        .nextStage = VK_SHADER_STAGE_GEOMETRY_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexSpirvSize[0],
+        .pCode = pVertexSpirv[0],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentSpirvSize[0],
+        .pCode = pFragmentSpirv[0],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentSpirvSize[1],
+        .pCode = pFragmentSpirv[1],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        // Suppose we want this vertex shader to be able to be followed by
+        // either a geometry shader or fragment shader:
+        .nextStage = VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexSpirvSize[1],
+        .pCode = pVertexSpirv[1],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout;
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    }
+};
+
+VkResult result;
+VkShaderEXT shaders[5];
+
+result = vkCreateShadersEXT(device, 5, &shaderCreateInfos, NULL, shaders);
+if (result != VK_SUCCESS)
+{
+    // Handle error
+}
+----
+
+Later, during command buffer recording, bind the linked shaders in different
+combinations and draw.
+
+[source,c++]
+----
+// Command buffer in the recording state
+VkCommandBuffer commandBuffer;
+
+// Vertex, geometry, and fragment shader objects created above
+VkShaderEXT shaders[5];
+
+// Assume vertex buffers, descriptor sets, etc. have been bound, and existing
+// state setting commands have been called to set all required state
+
+const VkShaderStageFlagBits stages[3] =
+{
+    // Any order is allowed
+    VK_SHADER_STAGE_FRAGMENT_BIT,
+    VK_SHADER_STAGE_VERTEX_BIT,
+    VK_SHADER_STAGE_GEOMETRY_BIT,
+};
+
+VkShaderEXT bindShaders[3] =
+{
+    shaders[2], // FS
+    shaders[1], // VS
+    shaders[0]  // GS
+};
+
+// Bind unlinked shaders
+vkCmdBindShadersEXT(commandBuffer, 3, stages, bindShaders);
+
+// Assume the tessellationShader feature is disabled, so vkCmdBindShadersEXT()
+// need not have been called with either tessellation stage
+
+// Graphics shader objects may only be used to draw inside dynamic render pass
+// instances begun with vkCmdBeginRendering(), assume one has already been begun
+
+// Draw a triangle
+vkCmdDraw(commandBuffer, 3, 1, 0, 0);
+
+// Bind a different unlinked fragment shader
+const VkShaderStageFlagBits fragmentStage = VK_SHADER_STAGE_FRAGMENT_BIT;
+vkCmdBindShadersEXT(commandBuffer, 1, &fragmentStage, &shaders[3]);
+
+// Draw another triangle
+vkCmdDraw(commandBuffer, 3, 1, 0, 0);
+
+// Bind a different unlinked vertex shader
+const VkShaderStageFlagBits vertexStage = VK_SHADER_STAGE_VERTEX_BIT;
+vkCmdBindShadersEXT(commandBuffer, 1, &vertexStage, &shaders[4]);
+
+// Draw another triangle
+vkCmdDraw(commandBuffer, 3, 1, 0, 0);
+----
+
+=== Version History
+
+  * Revision 1, 2023-03-30 (Daniel Story)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_stencil_export.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_stencil_export.adoc
new file mode 100644
index 0000000..a31f7ea
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_stencil_export.adoc
@@ -0,0 +1,36 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_stencil_export.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-07-19
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_stencil_export.html[`SPV_EXT_shader_stencil_export`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_stencil_export.txt[`GL_ARB_shader_stencil_export`]
+*Contributors*::
+  - Dominik Witczak, AMD
+  - Daniel Rakos, AMD
+  - Rex Xu, AMD
+
+=== Description
+
+This extension adds support for the SPIR-V extension
+`SPV_EXT_shader_stencil_export`, providing a mechanism whereby a shader may
+generate the stencil reference value per invocation.
+When stencil testing is enabled, this allows the test to be performed
+against the value generated in the shader.
+
+include::{generated}/interfaces/VK_EXT_shader_stencil_export.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-07-19 (Dominik Witczak)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_ballot.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_ballot.adoc
new file mode 100644
index 0000000..283a3ae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_ballot.adoc
@@ -0,0 +1,103 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_ballot.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-11-28
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_shader_ballot.html[`SPV_KHR_shader_ballot`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_ballot.txt[`GL_ARB_shader_ballot`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, Codeplay
+  - Daniel Koch, NVIDIA Corporation
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_shader_ballot`
+
+This extension provides the ability for a group of invocations, which
+execute in parallel, to do limited forms of cross-invocation communication
+via a group broadcast of a invocation value, or broadcast of a bitarray
+representing a predicate value from each invocation in the group.
+
+This extension provides access to a number of additional built-in shader
+variables in Vulkan:
+
+  * code:SubgroupEqMaskKHR, containing the subgroup mask of the current
+    subgroup invocation,
+  * code:SubgroupGeMaskKHR, containing the subgroup mask of the invocations
+    greater than or equal to the current invocation,
+  * code:SubgroupGtMaskKHR, containing the subgroup mask of the invocations
+    greater than the current invocation,
+  * code:SubgroupLeMaskKHR, containing the subgroup mask of the invocations
+    less than or equal to the current invocation,
+  * code:SubgroupLtMaskKHR, containing the subgroup mask of the invocations
+    less than the current invocation,
+  * code:SubgroupLocalInvocationId, containing the index of an invocation
+    within a subgroup, and
+  * code:SubgroupSize, containing the maximum number of invocations in a
+    subgroup.
+
+Additionally, this extension provides access to the new SPIR-V instructions:
+
+  * code:OpSubgroupBallotKHR,
+  * code:OpSubgroupFirstInvocationKHR, and
+  * code:OpSubgroupReadInvocationKHR,
+
+When using GLSL source-based shader languages, the following variables and
+shader functions from GL_ARB_shader_ballot can map to these SPIR-V built-in
+decorations and instructions:
+
+  * `in uint64_t gl_SubGroupEqMaskARB;` -> code:SubgroupEqMaskKHR,
+  * `in uint64_t gl_SubGroupGeMaskARB;` -> code:SubgroupGeMaskKHR,
+  * `in uint64_t gl_SubGroupGtMaskARB;` -> code:SubgroupGtMaskKHR,
+  * `in uint64_t gl_SubGroupLeMaskARB;` -> code:SubgroupLeMaskKHR,
+  * `in uint64_t gl_SubGroupLtMaskARB;` -> code:SubgroupLtMaskKHR,
+  * `in uint gl_SubGroupInvocationARB;` -> code:SubgroupLocalInvocationId,
+  * `uniform uint gl_SubGroupSizeARB;` -> code:SubgroupSize,
+  * code:ballotARB() -> code:OpSubgroupBallotKHR,
+  * code:readFirstInvocationARB() -> code:OpSubgroupFirstInvocationKHR, and
+  * code:readInvocationARB() -> code:OpSubgroupReadInvocationKHR.
+
+=== Deprecated by Vulkan 1.2
+
+Most of the functionality in this extension is superseded by the core Vulkan
+1.1 <<VkPhysicalDeviceSubgroupProperties, subgroup operations>>.
+However, Vulkan 1.1 required the code:OpGroupNonUniformBroadcast "`Id`" to
+be constant.
+This restriction was removed in Vulkan 1.2 with the addition of the
+<<features-subgroupBroadcastDynamicId, pname:subgroupBroadcastDynamicId>>
+feature.
+
+include::{generated}/interfaces/VK_EXT_shader_subgroup_ballot.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-sgeq,code:SubgroupEqMaskKHR>>
+  * <<interfaces-builtin-variables-sgge,code:SubgroupGeMaskKHR>>
+  * <<interfaces-builtin-variables-sggt,code:SubgroupGtMaskKHR>>
+  * <<interfaces-builtin-variables-sgle,code:SubgroupLeMaskKHR>>
+  * <<interfaces-builtin-variables-sglt,code:SubgroupLtMaskKHR>>
+  * <<interfaces-builtin-variables-sgli,code:SubgroupLocalInvocationId>>
+  * <<interfaces-builtin-variables-sgs,code:SubgroupSize>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SubgroupBallotKHR,
+    code:SubgroupBallotKHR>>
+
+=== Version History
+
+  * Revision 1, 2016-11-28 (Daniel Koch)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_vote.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_vote.adoc
new file mode 100644
index 0000000..5a18e41
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_subgroup_vote.adoc
@@ -0,0 +1,117 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_vote.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-11-28
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_subgroup_vote.html[`SPV_KHR_subgroup_vote`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_group_vote.txt[`GL_ARB_shader_group_vote`]
+*Contributors*::
+  - Neil Henning, Codeplay
+  - Daniel Koch, NVIDIA Corporation
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_subgroup_vote`
+
+This extension provides new SPIR-V instructions:
+
+  * code:OpSubgroupAllKHR,
+  * code:OpSubgroupAnyKHR, and
+  * code:OpSubgroupAllEqualKHR.
+
+to compute the composite of a set of boolean conditions across a group of
+shader invocations that are running concurrently (a _subgroup_).
+These composite results may be used to execute shaders more efficiently on a
+slink:VkPhysicalDevice.
+
+When using GLSL source-based shader languages, the following shader
+functions from GL_ARB_shader_group_vote can map to these SPIR-V
+instructions:
+
+  * code:anyInvocationARB() -> code:OpSubgroupAnyKHR,
+  * code:allInvocationsARB() -> code:OpSubgroupAllKHR, and
+  * code:allInvocationsEqualARB() -> code:OpSubgroupAllEqualKHR.
+
+The subgroup across which the boolean conditions are evaluated is
+implementation-dependent, and this extension provides no guarantee over how
+individual shader invocations are assigned to subgroups.
+In particular, a subgroup has no necessary relationship with the compute
+shader _local workgroup_ -- any pair of shader invocations in a compute
+local workgroup may execute in different subgroups as used by these
+instructions.
+
+Compute shaders operate on an explicitly specified group of threads (a local
+workgroup), but many implementations will also group non-compute shader
+invocations and execute them concurrently.
+When executing code like
+
+[source,c++]
+----
+if (condition) {
+  result = do_fast_path();
+} else {
+  result = do_general_path();
+}
+----
+
+where code:condition diverges between invocations, an implementation might
+first execute code:do_fast_path() for the invocations where code:condition
+is true and leave the other invocations dormant.
+Once code:do_fast_path() returns, it might call code:do_general_path() for
+invocations where code:condition is code:false and leave the other
+invocations dormant.
+In this case, the shader executes *both* the fast and the general path and
+might be better off just using the general path for all invocations.
+
+This extension provides the ability to avoid divergent execution by
+evaluating a condition across an entire subgroup using code like:
+
+[source,c++]
+----
+if (allInvocationsARB(condition)) {
+  result = do_fast_path();
+} else {
+  result = do_general_path();
+}
+----
+
+The built-in function code:allInvocationsARB() will return the same value
+for all invocations in the group, so the group will either execute
+code:do_fast_path() or code:do_general_path(), but never both.
+For example, shader code might want to evaluate a complex function
+iteratively by starting with an approximation of the result and then
+refining the approximation.
+Some input values may require a small number of iterations to generate an
+accurate result (code:do_fast_path) while others require a larger number
+(code:do_general_path).
+In another example, shader code might want to evaluate a complex function
+(code:do_general_path) that can be greatly simplified when assuming a
+specific value for one of its inputs (code:do_fast_path).
+
+=== Deprecated by Vulkan 1.1
+
+All functionality in this extension is superseded by the core Vulkan 1.1
+<<VkPhysicalDeviceSubgroupProperties, subgroup operations>>.
+
+include::{generated}/interfaces/VK_EXT_shader_subgroup_vote.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SubgroupVoteKHR, code:SubgroupVoteKHR>>
+
+=== Version History
+
+  * Revision 1, 2016-11-28 (Daniel Koch)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_tile_image.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_tile_image.adoc
new file mode 100644
index 0000000..a0d2ff9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_tile_image.adoc
@@ -0,0 +1,81 @@
+// Copyright (c) 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_tile_image.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+  2023-03-23
+*IP Status*::
+  No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_tile_image.html[`SPV_EXT_shader_tile_image`]
+  - This extension provides API support for
+    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GLSL_EXT_shader_tile_image.txt[`GL_EXT_shader_tile_image`]
+*Contributors*::
+  - Sandeep Kakarlapudi, Arm
+  - Jan-Harald Fredriksen, Arm
+  - James Fitzpatrick, Imagination
+  - Andrew Garrard, Imagination
+  - Jeff Leger, Qualcomm
+  - Huilong Wang, Huawei
+  - Graeme Leese, Broadcom
+  - Hans-Kristian Arntzen, Valve
+  - Tobias Hector, AMD
+  - Jeff Bolz, NVIDIA
+  - Shahbaz Youssefi, Google
+
+=== Description
+
+This extension allows fragment shader invocations to read color, depth and
+stencil values at their pixel location in rasterization order.
+The functionality is only available when using dynamic render passes
+introduced by VK_KHR_dynamic_rendering.
+Example use cases are programmable blending and deferred shading.
+
+See <<fragops-shader-tileimage-reads, fragment shader tile image reads>> for
+more information.
+
+include::{generated}/interfaces/VK_EXT_shader_tile_image.adoc[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+Color read example.
+[source,c]
+----
+layout( location = 0 /* aliased to color attachment 0 */ ) tileImageEXT highp attachmentEXT color0;
+layout( location = 1 /* aliased to color attachment 1 */ ) tileImageEXT highp attachmentEXT color1;
+
+layout( location = 0 ) out vec4 fragColor;
+
+void main()
+{
+    vec4 value = colorAttachmentReadEXT(color0) + colorAttachmentReadEXT(color1);
+    fragColor = value;
+}
+----
+
+Depth & Stencil read example.
+[source,c]
+----
+void main()
+{
+    // read sample 0: works for non-MSAA or MSAA targets
+    highp float last_depth = depthAttachmentReadEXT();
+    lowp uint last_stencil = stencilAttachmentReadEXT();
+
+    //..
+}
+----
+
+=== Version History
+
+  * Revision 1, 2023-03-23 (Sandeep Kakarlapudi)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_viewport_index_layer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_viewport_index_layer.adoc
new file mode 100644
index 0000000..14bc773
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_shader_viewport_index_layer.adoc
@@ -0,0 +1,91 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_viewport_index_layer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-08
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/EXT/SPV_EXT_shader_viewport_index_layer.html[`SPV_EXT_shader_viewport_index_layer`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_viewport_layer_array.txt[`GL_ARB_shader_viewport_layer_array`],
+    {GLregistry}/AMD/AMD_vertex_shader_layer.txt[`GL_AMD_vertex_shader_layer`],
+    {GLregistry}/AMD/AMD_vertex_shader_viewport_index.txt[`GL_AMD_vertex_shader_viewport_index`],
+    and {GLregistry}/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
+  - This extension requires the pname:multiViewport feature.
+  - This extension interacts with the pname:tessellationShader feature.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Jan-Harald Fredriksen, ARM
+  - Daniel Rakos, AMD
+  - Slawomir Grajeswki, Intel
+
+=== Description
+
+This extension adds support for the code:ShaderViewportIndexLayerEXT
+capability from the `SPV_EXT_shader_viewport_index_layer` extension in
+Vulkan.
+
+This extension allows variables decorated with the code:Layer and
+code:ViewportIndex built-ins to be exported from vertex or tessellation
+shaders, using the code:ShaderViewportIndexLayerEXT capability.
+
+When using GLSL source-based shading languages, the code:gl_ViewportIndex
+and code:gl_Layer built-in variables map to the SPIR-V code:ViewportIndex
+and code:Layer built-in decorations, respectively.
+Behaviour of these variables is extended as described in the
+`GL_ARB_shader_viewport_layer_array` (or the precursor
+`GL_AMD_vertex_shader_layer`, `GL_AMD_vertex_shader_viewport_index`, and
+`GL_NV_viewport_array2` extensions).
+
+ifdef::VK_NV_viewport_array2[]
+[NOTE]
+.Note
+====
+The code:ShaderViewportIndexLayerEXT capability is equivalent to the
+code:ShaderViewportIndexLayerNV capability added by
+`apiext:VK_NV_viewport_array2`.
+====
+endif::VK_NV_viewport_array2[]
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2.
+
+The single code:ShaderViewportIndexLayerEXT capability from the
+`SPV_EXT_shader_viewport_index_layer` extension is replaced by the
+<<spirvenv-capabilities-table-ShaderViewportIndex,
+code:ShaderViewportIndex>> and <<spirvenv-capabilities-table-ShaderLayer,
+code:ShaderLayer>> capabilities from SPIR-V 1.5 which are enabled by the
+<<features-shaderOutputViewportIndex, pname:shaderOutputViewportIndex>> and
+<<features-shaderOutputLayer, pname:shaderOutputLayer>> features,
+respectively.
+Additionally, if Vulkan 1.2 is supported but this extension is not, these
+capabilities are optional.
+
+Enabling both features is equivalent to enabling the
+`VK_EXT_shader_viewport_index_layer` extension.
+
+include::{generated}/interfaces/VK_EXT_shader_viewport_index_layer.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * (modified) <<interfaces-builtin-variables-layer,code:Layer>>
+  * (modified)
+    <<interfaces-builtin-variables-viewportindex,code:ViewportIndex>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ShaderViewportIndexLayerEXT,
+    code:ShaderViewportIndexLayerEXT>>
+
+=== Version History
+
+  * Revision 1, 2017-08-08 (Daniel Koch)
+  ** Internal drafts
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subgroup_size_control.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subgroup_size_control.adoc
new file mode 100644
index 0000000..2743de7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subgroup_size_control.adoc
@@ -0,0 +1,89 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_subgroup_size_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Faith Ekstrand, Intel
+  - Sławek Grajewski, Intel
+  - Jesse Hall, Google
+  - Neil Henning, AMD
+  - Daniel Koch, NVIDIA
+  - Jeff Leger, Qualcomm
+  - Graeme Leese, Broadcom
+  - Allan MacKinnon, Google
+  - Mariusz Merecki, Intel
+  - Graham Wihlidal, Electronic Arts
+
+=== Description
+
+This extension enables an implementation to control the subgroup size by
+allowing a varying subgroup size and also specifying a required subgroup
+size.
+
+It extends the subgroup support in Vulkan 1.1 to allow an implementation to
+expose a varying subgroup size.
+Previously Vulkan exposed a single subgroup size per physical device, with
+the expectation that implementations will behave as if all subgroups have
+the same size.
+Some implementations may: dispatch shaders with a varying subgroup size for
+different subgroups.
+As a result they could implicitly split a large subgroup into smaller
+subgroups or represent a small subgroup as a larger subgroup, some of whose
+invocations were inactive on launch.
+
+To aid developers in understanding the performance characteristics of their
+programs, this extension exposes a minimum and maximum subgroup size that a
+physical device supports and a pipeline create flag to enable that pipeline
+to vary its subgroup size.
+If enabled, any code:SubgroupSize decorated variables in the SPIR-V shader
+modules provided to pipeline creation may: vary between the
+<<limits-minSubgroupSize, minimum>> and <<limits-maxSubgroupSize, maximum>>
+subgroup sizes.
+
+An implementation is also optionally allowed to support specifying a
+required subgroup size for a given pipeline stage.
+Implementations advertise which <<limits-requiredSubgroupSizeStages, stages
+support a required subgroup size>>, and any pipeline of a supported stage
+can be passed a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+structure to set the subgroup size for that shader stage of the pipeline.
+For compute shaders, this requires the developer to query the
+<<limits-maxComputeWorkgroupSubgroups, pname:maxComputeWorkgroupSubgroups>>
+and ensure that:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+s = { WorkGroupSize.x \times WorkGroupSize.y \times WorkgroupSize.z \leq SubgroupSize \times maxComputeWorkgroupSubgroups }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Developers can also specify a new pipeline shader stage create flag that
+requires the implementation to have fully populated subgroups within local
+workgroups.
+This requires the workgroup size in the X dimension to be a multiple of the
+subgroup size.
+
+include::{generated}/interfaces/VK_EXT_subgroup_size_control.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2019-03-05 (Neil Henning)
+  ** Initial draft
+
+  * Revision 2, 2019-07-26 (Faith Ekstrand)
+  ** Add the missing slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+     for querying subgroup size control features.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subpass_merge_feedback.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subpass_merge_feedback.adoc
new file mode 100644
index 0000000..ea49510
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_subpass_merge_feedback.adoc
@@ -0,0 +1,33 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_subpass_merge_feedback.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-24
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+  - Jorg Wagner, Arm
+  - Ting Wei, Arm
+
+=== Description
+
+This extension adds a mechanism to provide feedback to an application about
+whether the subpasses specified on render pass creation are merged by the
+implementation.
+Additionally, it provides a control to enable or disable subpass merging in
+the render pass.
+
+include::{generated}/interfaces/VK_EXT_subpass_merge_feedback.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-03-10
+  ** Initial draft.
+  * Revision 2, 2022-05-24
+  ** Fix structextends and constness issues.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_surface_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_surface_maintenance1.adoc
new file mode 100644
index 0000000..5bdb7f2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_surface_maintenance1.adoc
@@ -0,0 +1,41 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_surface_maintenance1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-09
+*Contributors*::
+  - Jeff Juliano, NVIDIA
+  - Lionel Landwerlin, Intel
+  - Shahbaz Youssefi, Google
+  - Chris Forbes, Google
+  - Ian Elliott, Google
+  - Hans-Kristian Arntzen, Valve
+  - Daniel Stone, Collabora
+
+=== Description
+
+`apiext:VK_EXT_surface_maintenance1` adds a collection of window system
+integration features that were intentionally left out or overlooked in the
+original `apiext:VK_KHR_surface` extension.
+
+The new features are as follows:
+
+  * Allow querying number of min/max images from a surface for a particular
+    presentation mode.
+  * Allow querying a surface's scaled presentation capabilities.
+  * Allow querying a surface for the set of presentation modes which can be
+    easily switched between without requiring swapchain recreation.
+
+include::{generated}/interfaces/VK_EXT_surface_maintenance1.adoc[]
+
+=== Version History
+
+  * Revision 0, 2019-02-27 (Lionel Landwerlin)
+  ** Internal revisions
+  * Revision 1, 2022-11-09 (Shahbaz Youssefi)
+  ** Add functionality and complete spec
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_colorspace.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_colorspace.adoc
new file mode 100644
index 0000000..3ad2d08
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_colorspace.adoc
@@ -0,0 +1,62 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_swapchain_colorspace.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-26
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Courtney Goeltzenleuchter, Google
+
+=== Description
+
+This extension expands elink:VkColorSpaceKHR to add support for most
+standard color spaces beyond ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
+This extension also adds support for ename:VK_COLOR_SPACE_PASS_THROUGH_EXT
+which allows applications to use color spaces not explicitly enumerated in
+elink:VkColorSpaceKHR.
+
+include::{generated}/interfaces/VK_EXT_swapchain_colorspace.adoc[]
+
+=== Issues
+
+1) Does the spec need to specify which kinds of image formats support the
+color spaces?
+
+*RESOLVED*: Pixel format is independent of color space (though some color
+spaces really want / need floating point color components to be useful).
+Therefore, do not plan on documenting what formats support which color
+spaces.
+An application can: call flink:vkGetPhysicalDeviceSurfaceFormatsKHR to query
+what a particular implementation supports.
+
+2) How does application determine if HW supports appropriate transfer
+function for a color space?
+
+*RESOLVED*: Extension indicates that implementation must: not do the OETF
+encoding if it is not sRGB.
+That responsibility falls to the application shaders.
+Any other native OETF / EOTF functions supported by an implementation can be
+described by separate extension.
+
+=== Version History
+
+  * Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
+  ** Initial version
+
+  * Revision 2, 2017-01-19 (Courtney Goeltzenleuchter)
+  ** Add pass through and multiple options for BT2020.
+  ** Clean up some issues with equations not displaying properly.
+
+  * Revision 3, 2017-06-23 (Courtney Goeltzenleuchter)
+  ** Add extended sRGB non-linear enum.
+
+  * Revision 4, 2019-04-26 (Graeme Leese)
+  ** Clarify color space transfer function usage.
+  ** Refer to normative definitions in the Data Format Specification.
+  ** Clarify DCI-P3 and Display P3 usage.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_maintenance1.adoc
new file mode 100644
index 0000000..4c25391
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_swapchain_maintenance1.adoc
@@ -0,0 +1,58 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_swapchain_maintenance1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-10-28
+*Contributors*::
+  - Jeff Juliano, NVIDIA
+  - Shahbaz Youssefi, Google
+  - Chris Forbes, Google
+  - Ian Elliott, Google
+  - Yiwei Zhang, Google
+  - Charlie Lao, Google
+  - Lina Versace, Google
+  - Ralph Potter, Samsung
+  - Igor Nazarov, Samsung
+  - Hyunchang Kim, Samsung
+  - Suenghwan Lee, Samsung
+  - Munseong Kang, Samsung
+  - Joonyong Park, Samsung
+  - Hans-Kristian Arntzen, Valve
+  - Lisa Wu, Arm
+  - Daniel Stone, Collabora
+  - Pan Gao, Huawei
+
+=== Description
+
+`apiext:VK_EXT_swapchain_maintenance1` adds a collection of window system
+integration features that were intentionally left out or overlooked in the
+original `apiext:VK_KHR_swapchain` extension.
+
+The new features are as follows:
+
+  * Specify a fence that will be signaled when the resources associated with
+    a present operation can: be safely destroyed.
+  * Allow changing the present mode a swapchain is using at per-present
+    granularity.
+  * Allow applications to define the behavior when presenting a swapchain
+    image to a surface with different dimensions than the image.
+    Using this feature may: allow implementations to avoid returning
+    ename:VK_ERROR_OUT_OF_DATE_KHR in this situation.
+  * Allow applications to defer swapchain memory allocation for improved
+    startup time and memory footprint.
+  * Allow applications to release previously acquired images without
+    presenting them.
+
+include::{generated}/interfaces/VK_EXT_swapchain_maintenance1.adoc[]
+
+=== Version History
+
+  * Revision 0, 2019-05-28
+  ** Initial revisions
+  * Revision 1, 2022-08-21 (Shahbaz Youssefi)
+  ** Add functionality and complete spec
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texel_buffer_alignment.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texel_buffer_alignment.adoc
new file mode 100644
index 0000000..6faf8d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texel_buffer_alignment.adoc
@@ -0,0 +1,41 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_texel_buffer_alignment.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-06
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds more expressive alignment requirements for uniform and
+storage texel buffers.
+Some implementations have single texel alignment requirements that cannot be
+expressed via
+slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
+
+include::{generated}/interfaces/VK_EXT_texel_buffer_alignment.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+However, only the properties structure is promoted.
+The feature structure is not promoted and pname:texelBufferAlignment is
+enabled if using a Vulkan 1.3 instance.
+The original type name is still available as an alias of the core
+functionality.
+
+=== Version History
+
+  * Revision 1, 2019-06-06 (Jeff Bolz)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texture_compression_astc_hdr.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texture_compression_astc_hdr.adoc
new file mode 100644
index 0000000..5eb9e9b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_texture_compression_astc_hdr.adoc
@@ -0,0 +1,71 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_texture_compression_astc_hdr.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-28
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known issues.
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+This extension adds support for textures compressed using the Adaptive
+Scalable Texture Compression (ASTC) High Dynamic Range (HDR) profile.
+
+When this extension is enabled, the HDR profile is supported for all ASTC
+formats listed in <<appendix-compressedtex-astc, ASTC Compressed Image
+Formats>>.
+
+include::{generated}/interfaces/VK_EXT_texture_compression_astc_hdr.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+This extension has been partially promoted.
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+However, the feature is made optional in Vulkan 1.3.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Issues
+
+1) Should we add a feature or limit for this functionality?
+
+Yes.
+It is consistent with the ASTC LDR support to add a feature like
+textureCompressionASTC_HDR.
+
+The feature is strictly speaking redundant as long as this is just an
+extension; it would be sufficient to just enable the extension.
+But adding the feature is more forward-looking if wanted to make this an
+optional core feature in the future.
+
+2) Should we introduce new format enums for HDR?
+
+Yes.
+Vulkan 1.0 describes the ASTC format enums as UNORM, e.g.
+ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, so it is confusing to make these
+contain HDR data.
+Note that the OpenGL (ES) extensions did not make this distinction because a
+single ASTC HDR texture may contain both unorm and float blocks.
+Implementations may: not be able to distinguish between LDR and HDR ASTC
+textures internally and just treat them as the same format, i.e. if this
+extension is supported then sampling from a
+ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK image format may: return HDR results.
+Applications can: get predictable results by using the appropriate image
+format.
+
+
+=== Version History
+
+  * Revision 1, 2019-05-28 (Jan-Harald Fredriksen)
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_tooling_info.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_tooling_info.adoc
new file mode 100644
index 0000000..fc498fb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_tooling_info.adoc
@@ -0,0 +1,89 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_tooling_info.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*Contributors*::
+  - Rolando Caloca
+  - Matthaeus Chajdas
+  - Baldur Karlsson
+  - Daniel Rakos
+
+=== Description
+
+When an error occurs during application development, a common question is
+"What tools are actually running right now?" This extension adds the ability
+to query that information directly from the Vulkan implementation.
+
+Outdated versions of one tool might not play nicely with another, or perhaps
+a tool is not actually running when it should have been.
+Trying to figure that out can cause headaches as it is necessary to consult
+each known tool to figure out what is going on -- in some cases the tool
+might not even be known.
+
+Typically, the expectation is that developers will simply print out this
+information for visual inspection when an issue occurs, however a small
+amount of semantic information about what the tool is doing is provided to
+help identify it programmatically.
+For example, if the advertised limits or features of an implementation are
+unexpected, is there a tool active which modifies these limits? Or if an
+application is providing debug markers, but the implementation is not
+actually doing anything with that information, this can quickly point that
+out.
+
+include::{generated}/interfaces/VK_EXT_tooling_info.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the EXT
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Examples
+
+.Printing Tool Information
+
+```
+uint32_t num_tools;
+VkPhysicalDeviceToolPropertiesEXT *pToolProperties;
+vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, NULL);
+
+pToolProperties = (VkPhysicalDeviceToolPropertiesEXT*)malloc(sizeof(VkPhysicalDeviceToolPropertiesEXT) * num_tools);
+
+vkGetPhysicalDeviceToolPropertiesEXT(physicalDevice, &num_tools, pToolProperties);
+
+for (int i = 0; i < num_tools; ++i) {
+    printf("%s:\n", pToolProperties[i].name);
+    printf("Version:\n");
+    printf("%s:\n", pToolProperties[i].version);
+    printf("Description:\n");
+    printf("\t%s\n", pToolProperties[i].description);
+    printf("Purposes:\n");
+    printf("\t%s\n", VkToolPurposeFlagBitsEXT_to_string(pToolProperties[i].purposes));
+    if (strnlen_s(pToolProperties[i].layer,VK_MAX_EXTENSION_NAME_SIZE) > 0) {
+        printf("Corresponding Layer:\n");
+        printf("\t%s\n", pToolProperties[i].layer);
+    }
+}
+```
+
+=== Issues
+
+1) Why is this information separate from the layer mechanism?
+
+Some tooling may be built into a driver, or be part of the Vulkan loader
+etc.
+Tying this information directly to layers would have been awkward at best.
+
+=== Version History
+
+  * Revision 1, 2018-11-05 (Tobias Hector)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_transform_feedback.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_transform_feedback.adoc
new file mode 100644
index 0000000..040f9a7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_transform_feedback.adoc
@@ -0,0 +1,99 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_transform_feedback.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-10-09
+*Contributors*::
+  - Baldur Karlsson, Valve
+  - Boris Zanin, Mobica
+  - Daniel Rakos, AMD
+  - Donald Scorgie, Imagination
+  - Henri Verbeet, CodeWeavers
+  - Jan-Harald Fredriksen, Arm
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Jesse Barker, Unity
+  - Jesse Hall, Google
+  - Pierre-Loup Griffais, Valve
+  - Philip Rebohle, DXVK
+  - Ruihao Zhang, Qualcomm
+  - Samuel Pitoiset, Valve
+  - Slawomir Grajewski, Intel
+  - Stu Smith, Imagination Technologies
+
+=== Description
+
+This extension adds transform feedback to the Vulkan API by exposing the
+SPIR-V code:TransformFeedback and code:GeometryStreams capabilities to
+capture vertex, tessellation or geometry shader outputs to one or more
+buffers.
+It adds API functionality to bind transform feedback buffers to capture the
+primitives emitted by the graphics pipeline from SPIR-V outputs decorated
+for transform feedback.
+The transform feedback capture can be paused and resumed by way of storing
+and retrieving a byte counter.
+The captured data can be drawn again where the vertex count is derived from
+the byte counter without CPU intervention.
+If the implementation is capable, a vertex stream other than zero can be
+rasterized.
+
+All these features are designed to match the full capabilities of OpenGL
+core transform feedback functionality and beyond.
+Many of the features are optional to allow base OpenGL ES GPUs to also
+implement this extension.
+
+The primary purpose of the functionality exposed by this extension is to
+support translation layers from other 3D APIs.
+This functionality is not considered forward looking, and is not expected to
+be promoted to a KHR extension or to core Vulkan.
+Unless this is needed for translation, it is recommended that developers use
+alternative techniques of using the GPU to process and capture vertex data.
+
+include::{generated}/interfaces/VK_EXT_transform_feedback.adoc[]
+
+=== Issues
+
+1) Should we include pause/resume functionality?
+
+*RESOLVED*: Yes, this is needed to ease layering other APIs which have this
+functionality.
+To pause use fname:vkCmdEndTransformFeedbackEXT and provide valid buffer
+handles in the pname:pCounterBuffers array and offsets in the
+pname:pCounterBufferOffsets array for the implementation to save the resume
+points.
+Then to resume use fname:vkCmdBeginTransformFeedbackEXT with the previous
+pname:pCounterBuffers and pname:pCounterBufferOffsets values.
+Between the pause and resume there needs to be a memory barrier for the
+counter buffers with a source access of
+ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT at pipeline stage
+ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT to a destination access
+of ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT at pipeline stage
+ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT.
+
+2) How does this interact with multiview?
+
+*RESOLVED*: Transform feedback cannot be made active in a render pass with
+multiview enabled.
+
+3) How should queries be done?
+
+*RESOLVED*: There is a new query type
+ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT.
+A query pool created with this type will capture 2 integers -
+numPrimitivesWritten and numPrimitivesNeeded - for the specified vertex
+stream output from the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
+The vertex stream output queried is zero by default, but can be specified
+with the new fname:vkCmdBeginQueryIndexedEXT and
+fname:vkCmdEndQueryIndexedEXT commands.
+
+=== Version History
+
+  * Revision 1, 2018-10-09 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_cache.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_cache.adoc
new file mode 100644
index 0000000..45a0a4d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_cache.adoc
@@ -0,0 +1,35 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_cache.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Cort Stratton, Google
+  - Chris Forbes, Google
+
+=== Description
+
+This extension provides a mechanism for caching the results of potentially
+expensive internal validation operations across multiple runs of a Vulkan
+application.
+At the core is the slink:VkValidationCacheEXT object type, which is managed
+similarly to the existing slink:VkPipelineCache.
+
+The new struct slink:VkShaderModuleValidationCacheCreateInfoEXT can be
+included in the pname:pNext chain at flink:vkCreateShaderModule time.
+It contains a slink:VkValidationCacheEXT to use when validating the
+slink:VkShaderModule.
+
+include::{generated}/interfaces/VK_EXT_validation_cache.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-08-29 (Cort Stratton)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_features.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_features.adoc
new file mode 100644
index 0000000..0f08eb8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_features.adoc
@@ -0,0 +1,54 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_features.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Karl Schultz, LunarG
+  - Dave Houlton, LunarG
+  - Mark Lobodzinski, LunarG
+  - Camden Stocker, LunarG
+  - Tony Barbour, LunarG
+  - John Zulauf, LunarG
+
+=== Description
+
+This extension provides the slink:VkValidationFeaturesEXT struct that can be
+included in the pname:pNext chain of the slink:VkInstanceCreateInfo
+structure passed as the pname:pCreateInfo parameter of
+flink:vkCreateInstance.
+The structure contains an array of elink:VkValidationFeatureEnableEXT enum
+values that enable specific validation features that are disabled by
+default.
+The structure also contains an array of elink:VkValidationFeatureDisableEXT
+enum values that disable specific validation layer features that are enabled
+by default.
+
+[NOTE]
+.Note
+====
+The `apiext:VK_EXT_validation_features` extension subsumes all the
+functionality provided in the `apiext:VK_EXT_validation_flags` extension.
+====
+
+include::{generated}/interfaces/VK_EXT_validation_features.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-11-14 (Karl Schultz)
+  ** Initial revision
+  * Revision 2, 2019-08-06 (Mark Lobodzinski)
+  ** Add Best Practices enable
+  * Revision 3, 2020-03-04 (Tony Barbour)
+  ** Add Debug Printf enable
+  * Revision 4, 2020-07-29 (John Zulauf)
+  ** Add Synchronization Validation enable
+  * Revision 5, 2021-05-18 (Tony Barbour)
+  ** Add Shader Validation Cache disable
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_flags.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_flags.adoc
new file mode 100644
index 0000000..6a873fa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_validation_flags.adoc
@@ -0,0 +1,37 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_flags.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-08-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Tobin Ehlis, Google
+  - Courtney Goeltzenleuchter, Google
+
+=== Description
+
+This extension provides the slink:VkValidationFlagsEXT struct that can be
+included in the pname:pNext chain of the slink:VkInstanceCreateInfo
+structure passed as the pname:pCreateInfo parameter of
+flink:vkCreateInstance.
+The structure contains an array of elink:VkValidationCheckEXT values that
+will be disabled by the validation layers.
+
+=== Deprecation by `VK_EXT_validation_features`
+Functionality in this extension is subsumed into the
+`apiext:VK_EXT_validation_features` extension.
+
+include::{generated}/interfaces/VK_EXT_validation_flags.adoc[]
+
+=== Version History
+
+  * Revision 2, 2019-08-19 (Mark Lobodzinski)
+  ** Marked as deprecated
+  * Revision 1, 2016-08-26 (Courtney Goeltzenleuchter)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_attribute_divisor.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_attribute_divisor.adoc
new file mode 100644
index 0000000..fe991b0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_attribute_divisor.adoc
@@ -0,0 +1,88 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_vertex_attribute_divisor.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-03
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension allows instance-rate vertex attributes to be repeated for
+certain number of instances instead of advancing for every instance when
+instanced rendering is enabled.
+
+include::{generated}/interfaces/VK_EXT_vertex_attribute_divisor.adoc[]
+
+=== Issues
+
+1) What is the effect of a non-zero value for pname:firstInstance?
+
+*RESOLVED*: The Vulkan API should follow the OpenGL convention and offset
+attribute fetching by pname:firstInstance while computing vertex attribute
+offsets.
+
+2) Should zero be an allowed divisor?
+
+*RESOLVED*: Yes.
+A zero divisor means the vertex attribute is repeated for all instances.
+
+
+=== Examples
+
+To create a vertex binding such that the first binding uses instanced
+rendering and the same attribute is used for every 4 draw instances, an
+application could use the following set of structures:
+
+
+[source,c++]
+----
+    const VkVertexInputBindingDivisorDescriptionEXT divisorDesc =
+    {
+        .binding = 0,
+        .divisor = 4
+    };
+
+    const VkPipelineVertexInputDivisorStateCreateInfoEXT divisorInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .vertexBindingDivisorCount = 1,
+        .pVertexBindingDivisors = &divisorDesc
+    }
+
+    const VkVertexInputBindingDescription binding =
+    {
+        .binding = 0,
+        .stride = sizeof(Vertex),
+        .inputRate = VK_VERTEX_INPUT_RATE_INSTANCE
+    };
+
+    const VkPipelineVertexInputStateCreateInfo viInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO,
+        .pNext = &divisorInfo,
+        ...
+    };
+    //...
+----
+
+=== Version History
+
+  * Revision 1, 2017-12-04 (Vikram Kushwaha)
+  ** First Version
+  * Revision 2, 2018-07-16 (Faith Ekstrand)
+  ** Adjust the interaction between pname:divisor and pname:firstInstance to
+     match the OpenGL convention.
+  ** Disallow divisors of zero.
+  * Revision 3, 2018-08-03 (Vikram Kushwaha)
+  ** Allow a zero divisor.
+  ** Add a physical device features structure to query/enable this feature.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_input_dynamic_state.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_input_dynamic_state.adoc
new file mode 100644
index 0000000..91730d0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_vertex_input_dynamic_state.adoc
@@ -0,0 +1,40 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_vertex_input_dynamic_state.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-08-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Spencer Fricke, Samsung
+  - Stu Smith, AMD
+
+=== Description
+
+One of the states that contributes to the combinatorial explosion of
+pipeline state objects that need to be created, is the vertex input binding
+and attribute descriptions.
+By allowing them to be dynamic applications may reduce the number of
+pipeline objects they need to create.
+
+This extension adds dynamic state support for what is normally static state
+in slink:VkPipelineVertexInputStateCreateInfo.
+
+include::{generated}/interfaces/VK_EXT_vertex_input_dynamic_state.adoc[]
+
+=== Version History
+
+  * Revision 2, 2020-11-05 (Piers Daniell)
+  ** Make slink:VkVertexInputBindingDescription2EXT extensible
+  ** Add new slink:VkVertexInputAttributeDescription2EXT struct for the
+     pname:pVertexAttributeDescriptions parameter to
+     flink:vkCmdSetVertexInputEXT so it is also extensible
+
+  * Revision 1, 2020-08-21 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h264.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h264.adoc
new file mode 100644
index 0000000..e955c9a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h264.adoc
@@ -0,0 +1,168 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_encode_h264.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-07-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Ravi Chaudhary, NVIDIA
+  - Yang Liu, AMD
+  - Daniel Rakos, RasterGrid
+  - Aidan Fabius, Core Avionics & Industrial Inc.
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_encode_queue` extension
+by adding support for encoding elementary video stream sequences compliant
+with the H.264/AVC video compression standard.
+
+include::{generated}/interfaces/VK_EXT_video_encode_h264.adoc[]
+
+=== Version History
+
+  * Revision 0, 2018-7-23 (Ahmed Abdelkhalek)
+  ** Initial draft
+  * Revision 0.5, 2020-02-13 (Tony Zlatinski)
+  ** General Spec cleanup
+  ** Added DPB structures
+  ** Change the VCL frame encode structure
+  ** Added a common Non-VCL Picture Paramarameters structure
+  * Revision 1, 2021-03-29 (Tony Zlatinski)
+  ** Spec and API updates
+  * Revision 2, August 1 2021 (Srinath Kumarapuram)
+  ** Rename `VkVideoEncodeH264CapabilitiesFlagsEXT` to
+     `VkVideoEncodeH264CapabilityFlagsEXT` and
+     `VkVideoEncodeH264CapabilitiesFlagsEXT` to
+     `VkVideoEncodeH264CapabilityFlagsEXT`, following Vulkan naming
+     conventions.
+  * Revision 3, 2021-12-08 (Ahmed Abdelkhalek)
+  ** Rate control updates
+  * Revision 4, 2022-02-04 (Ahmed Abdelkhalek)
+  ** Align VkVideoEncodeH264VclFrameInfoEXT structure to similar one in
+     VK_EXT_video_encode_h265 extension
+  * Revision 5, 2022-02-10 (Ahmed Abdelkhalek)
+  ** Updates to encode capability interface
+  * Revision 6, 2022-03-16 (Ahmed Abdelkhalek)
+  ** Relocate Std header version reporting/requesting from this extension to
+     VK_KHR_video_queue extension.
+  ** Remove redundant maxPictureSizeInMbs from
+     VkVideoEncodeH264SessionCreateInfoEXT.
+  ** Remove the now empty VkVideoEncodeH264SessionCreateInfoEXT.
+  * Revision 7, 2022-04-06 (Ahmed Abdelkhalek)
+  ** Add capability flag to report support to use B frame in L1 reference
+     list.
+  ** Add capability flag to report support for disabling SPS
+     direct_8x8_inference_flag.
+  * Revision 8, 2022-07-18 (Daniel Rakos)
+  ** Replace `VkVideoEncodeH264RateControlStructureFlagBitsEXT` bit enum
+     with `VkVideoEncodeH264RateControlStructureEXT` enum
+  ** Rename `VkVideoEncodeH264ProfileEXT` to
+     `VkVideoEncodeH264ProfileInfoEXT`
+  ** Rename `VkVideoEncodeH264ReferenceListsEXT` to
+     `VkVideoEncodeH264ReferenceListsInfoEXT`
+  ** Rename `VkVideoEncodeH264EmitPictureParametersEXT` to
+     `VkVideoEncodeH264EmitPictureParametersInfoEXT`
+  ** Rename `VkVideoEncodeH264NaluSliceEXT` to
+     `VkVideoEncodeH264NaluSliceInfoEXT`
+  * Revision 9, 2022-09-18 (Daniel Rakos)
+  ** Rename `spsStdCount`, `pSpsStd`, `ppsStdCount`, and `pPpsStd` to
+     `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively,
+     in `VkVideoEncodeH264SessionParametersAddInfoEXT`
+  ** Rename `maxSpsStdCount` and `maxPpsStdCount` to `maxStdSPSCount` and
+     `maxStdPPSCount`, respectively, in
+     `VkVideoEncodeH264SessionParametersCreateInfoEXT`
+  * Revision 10, 2023-03-06 (Daniel Rakos)
+  ** Removed `VkVideoEncodeH264EmitPictureParametersInfoEXT`
+  ** Changed member types in `VkVideoEncodeH264CapabilitiesEXT` and
+     `VkVideoEncodeH264ReferenceListsInfoEXT` from `uint8_t` to `uint32_t`
+  ** Changed the type of
+     `VkVideoEncodeH264RateControlInfoEXT::temporalLayerCount` and
+     `VkVideoEncodeH264RateControlLayerInfoEXT::temporalLayerId` from
+     `uint8_t` to `uint32_t`
+  ** Removed `VkVideoEncodeH264InputModeFlagsEXT` and
+     `VkVideoEncodeH264OutputModeFlagsEXT` as we only support
+     frame-in-frame-out mode for now
+  ** Rename `pCurrentPictureInfo` in `VkVideoEncodeH264VclFrameInfoEXT` to
+     `pStdPictureInfo`
+  ** Rename `pSliceHeaderStd` in `VkVideoEncodeH264NaluSliceInfoEXT` to
+     `pStdSliceHeader`
+  ** Rename `pReferenceFinalLists` in `VkVideoEncodeH264VclFrameInfoEXT` and
+     `VkVideoEncodeH264NaluSliceInfoEXT` to `pStdReferenceFinalLists`
+  ** Removed the `slotIndex` member of `VkVideoEncodeH264DpbSlotInfoEXT` and
+     changed it to be chained to `VkVideoReferenceSlotInfoKHR`
+  ** Replaced `VkVideoEncodeH264ReferenceListsInfoEXT` with the new Video
+     Std header structure `StdVideoEncodeH264ReferenceLists` that also
+     includes data previously part of the now removed
+     `StdVideoEncodeH264RefMemMgmtCtrlOperations` structure
+  ** Added new capability flag
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT`
+  * Revision 11, 2023-05-22 (Daniel Rakos)
+  ** Renamed `VkVideoEncodeH264VclFrameInfoEXT` to
+     `VkVideoEncodeH264PictureInfoEXT`
+  ** Added `VkVideoEncodeH264PictureInfoEXT::generatePrefixNalu` and
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT` to
+     enable the generation of H.264 prefix NALUs when supported by the
+     implementation
+  ** Removed `VkVideoEncodeH264RateControlLayerInfoEXT::temporalLayerId`
+  ** Added `expectDyadicTemporalLayerPattern` capability
+  ** Added the `VkVideoEncodeH264SessionParametersGetInfoEXT` structure to
+     identify the H.264 parameter sets to retrieve encoded parameter data
+     for, and the `VkVideoEncodeH264SessionParametersFeedbackInfoEXT`
+     structure to retrieve H.264 parameter set override information when
+     using the new `vkGetEncodedVideoSessionParametersKHR` command
+  ** Added `VkVideoEncodeH264NaluSliceInfoEXT::constantQp` to specify
+     per-slice constant QP when rate control mode is
+     `VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR`
+  ** Added `VkVideoEncodeH264QualityLevelPropertiesEXT` for retrieving H.264
+     specific quality level recommendations
+  ** Replaced `VkVideoEncodeH264RateControlStructureEXT` enum with the flags
+     type `VkVideoEncodeH264RateControlFlagsEXT` and bits defined in
+     `VkVideoEncodeH264RateControlFlagBitsEXT` and added HRD compliance flag
+  ** Removed `useInitialRcQp` and `initialRcQp` members of
+     `VkVideoEncodeH264RateControlLayerInfoEXT`
+  ** Added `prefersGopRemainingFrames` and `requiresGopRemainingFrames`, and
+     the new `VkVideoEncodeH264GopRemainingFrameInfoEXT` structure to allow
+     specifying remaining frames of each type in the rate control GOP
+  ** Added `maxTemporalLayers`, `maxQp`, and `minQp` capabilities
+  ** Added `maxLevelIdc` capability and new
+     `VkVideoEncodeH264SessionCreateInfoEXT` structure to specify upper
+     bounds on the H.264 level of the produced video bitstream
+  ** Moved capability flags specific to codec syntax restrictions from
+     `VkVideoEncodeH264CapabilityFlagsEXT` to the new
+     `VkVideoEncodeH264StdFlagsEXT` which is now included as a separate
+     `stdSyntaxFlags` member in `VkVideoEncodeH264CapabilitiesEXT`
+  ** Removed codec syntax override values from
+     `VkVideoEncodeH264CapabilitiesEXT`
+  ** Removed `VkVideoEncodeH264NaluSliceInfoEXT::mbCount` and
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT`
+  ** Replaced
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICES_PER_FRAME_BIT_EXT`
+     with the new `maxSliceCount` capability
+  ** Removed capability flag
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT`
+     and removed `pStdReferenceFinalLists` members from the
+     `VkVideoEncodeH264PictureInfoEXT` and
+     `VkVideoEncodeH264NaluSliceInfoEXT` structures as reference lists info
+     is now included in `pStdPictureInfo`
+  ** Added capability flag
+     `VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT`
+  * Revision 12, 2023-07-19 (Daniel Rakos)
+  ** Added video std capability flags
+     `VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_EXT` and
+     `VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT`
+  ** Fixed optionality of the array members of
+     `VkVideoEncodeH264SessionParametersAddInfoEXT`
+  ** Fixed optionality of `VkVideoEncodeH264RateControlInfoEXT::flags`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h265.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h265.adoc
new file mode 100644
index 0000000..ca43fe2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_video_encode_h265.adoc
@@ -0,0 +1,156 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_encode_h265.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-07-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Chunbo Chen, Intel
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Ravi Chaudhary, NVIDIA
+  - Daniel Rakos, RasterGrid
+  - Aidan Fabius, Core Avionics & Industrial Inc.
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_encode_queue` extension
+by adding support for encoding elementary video stream sequences compliant
+with the H.265/HEVC video compression standard.
+
+include::{generated}/interfaces/VK_EXT_video_encode_h265.adoc[]
+
+=== Version History
+
+  * Revision 0, 2019-11-14 (Ahmed Abdelkhalek)
+  ** Initial draft
+  * Revision 0.5, 2020-02-13 (Tony Zlatinski)
+  ** General Spec cleanup
+  ** Added DPB structures
+  ** Change the VCL frame encode structure
+  ** Added a common Non-VCL Picture Paramarameters structure
+  * Revision 2, Oct 10 2021 (Srinath Kumarapuram)
+  ** Vulkan Video Encode h.265 update and spec edits
+  * Revision 3, 2021-12-08 (Ahmed Abdelkhalek)
+  ** Rate control updates
+  * Revision 4, 2022-01-11 (Ahmed Abdelkhalek)
+  ** Replace occurrences of "`slice`" by "`slice segment`" and rename
+     structures/enums to reflect this.
+  * Revision 5, 2022-02-10 (Ahmed Abdelkhalek)
+  ** Updates to encode capability interface
+  * Revision 6, 2022-03-16 (Ahmed Abdelkhalek)
+  ** Relocate Std header version reporting/requesting from this extension to
+     VK_KHR_video_queue extension.
+  ** Remove the now empty VkVideoEncodeH265SessionCreateInfoEXT.
+  * Revision 7, 2022-03-24 (Ahmed Abdelkhalek)
+  ** Add capability flags to report support to disable transform skip and
+     support to use B frame in L1 reference list.
+  * Revision 8, 2022-07-18 (Daniel Rakos)
+  ** Replace `VkVideoEncodeH265RateControlStructureFlagBitsEXT` bit enum
+     with `VkVideoEncodeH265RateControlStructureEXT` enum
+  ** Rename `VkVideoEncodeH265ProfileEXT` to
+     `VkVideoEncodeH265ProfileInfoEXT`
+  ** Rename `VkVideoEncodeH265ReferenceListsEXT` to
+     `VkVideoEncodeH265ReferenceListsInfoEXT`
+  ** Rename `VkVideoEncodeH265EmitPictureParametersEXT` to
+     `VkVideoEncodeH265EmitPictureParametersInfoEXT`
+  ** Rename `VkVideoEncodeH265NaluSliceSegmentEXT` to
+     `VkVideoEncodeH265NaluSliceSegmentInfoEXT`
+  * Revision 9, 2022-09-18 (Daniel Rakos)
+  ** Rename `vpsStdCount`, `pVpsStd`, `spsStdCount`, `pSpsStd`,
+     `ppsStdCount`, and `pPpsStd` to `stdVPSCount`, `pStdVPSs`,
+     `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively,
+     in `VkVideoEncodeH265SessionParametersAddInfoEXT`
+  ** Rename `maxVpsStdCount`, `maxSpsStdCount`, and `maxPpsStdCount` to
+     `maxStdVPSCount`, `maxStdSPSCount` and `maxStdPPSCount`, respectively,
+     in `VkVideoEncodeH265SessionParametersCreateInfoEXT`
+  * Revision 10, 2023-03-06 (Daniel Rakos)
+  ** Removed `VkVideoEncodeH265EmitPictureParametersInfoEXT`
+  ** Changed member types in `VkVideoEncodeH265CapabilitiesEXT` and
+     `VkVideoEncodeH265ReferenceListsInfoEXT` from `uint8_t` to `uint32_t`
+  ** Changed the type of
+     `VkVideoEncodeH265RateControlInfoEXT::subLayerCount` and
+     `VkVideoEncodeH264RateControlLayerInfoEXT::temporalId` from `uint8_t`
+     to `uint32_t`
+  ** Removed `VkVideoEncodeH265InputModeFlagsEXT` and
+     `VkVideoEncodeH265OutputModeFlagsEXT` as we only support
+     frame-in-frame-out mode for now
+  ** Rename `pCurrentPictureInfo` in `VkVideoEncodeH265VclFrameInfoEXT` to
+     `pStdPictureInfo`
+  ** Rename `pSliceSegmentHeaderStd` in
+     `VkVideoEncodeH265NaluSliceSegmentInfoEXT` to `pStdSliceSegmentHeader`
+  ** Rename `pReferenceFinalLists` in `VkVideoEncodeH264VclFrameInfoEXT` and
+     `VkVideoEncodeH264NaluSliceInfoEXT` to `pStdReferenceFinalLists`
+  ** Removed the `slotIndex` member of `VkVideoEncodeH265DpbSlotInfoEXT` and
+     changed it to be chained to `VkVideoReferenceSlotInfoKHR`
+  ** Replaced `VkVideoEncodeH265ReferenceListsInfoEXT` with the new Video
+     Std header structure `StdVideoEncodeH265ReferenceLists`
+  ** Added new capability flag
+     `VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT`
+  * Revision 11, 2023-05-26 (Daniel Rakos)
+  ** Renamed `VkVideoEncodeH265VclFrameInfoEXT` to
+     `VkVideoEncodeH265PictureInfoEXT`
+  ** Removed `VkVideoEncodeH265RateControlLayerInfoEXT::temporalId`
+  ** Added `expectDyadicTemporalSubLayerPattern` capability
+  ** Added the `VkVideoEncodeH265SessionParametersGetInfoEXT` structure to
+     identify the H.265 parameter sets to retrieve encoded parameter data
+     for, and the `VkVideoEncodeH265SessionParametersFeedbackInfoEXT`
+     structure to retrieve H.265 parameter set override information when
+     using the new `vkGetEncodedVideoSessionParametersKHR` command
+  ** Added `VkVideoEncodeH265NaluSliceSegmentInfoEXT::constantQp` to specify
+     per-slice segment constant QP when rate control mode is
+     `VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR`
+  ** Added `VkVideoEncodeH265QualityLevelPropertiesEXT` for retrieving H.265
+     specific quality level recommendations
+  ** Replaced `VkVideoEncodeH265RateControlStructureEXT` enum with the flags
+     type `VkVideoEncodeH265RateControlFlagsEXT` and bits defined in
+     `VkVideoEncodeH265RateControlFlagBitsEXT` and added HRD compliance flag
+  ** Removed `useInitialRcQp` and `initialRcQp` members of
+     `VkVideoEncodeH265RateControlLayerInfoEXT`
+  ** Added `prefersGopRemainingFrames` and `requiresGopRemainingFrames`, and
+     the new `VkVideoEncodeH265GopRemainingFrameInfoEXT` structure to allow
+     specifying remaining frames of each type in the rate control GOP
+  ** Renamed `maxSubLayersCount` capability to `maxSubLayerCount`
+  ** Added `maxQp`, and `minQp` capabilities
+  ** Added `maxLevelIdc` capability and new
+     `VkVideoEncodeH265SessionCreateInfoEXT` structure to specify upper
+     bounds on the H.265 level of the produced video bitstream
+  ** Moved capability flags specific to codec syntax restrictions from
+     `VkVideoEncodeH265CapabilityFlagsEXT` to the new
+     `VkVideoEncodeH265StdFlagsEXT` which is now included as a separate
+     `stdSyntaxFlags` member in `VkVideoEncodeH265CapabilitiesEXT`
+  ** Added `std` prefix to codec syntax capabilities in
+     `VkVideoEncodeH265CapabilitiesEXT`
+  ** Removed `VkVideoEncodeH265NaluSliceSegmentInfoEXT::ctbCount` and
+     `VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT`
+  ** Replaced
+     `VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_FRAME_BIT_EXT`
+     with the new `maxSliceSegmentCount` capability
+  ** Added `maxTiles` capability
+  ** Removed codec syntax min/max capabilities from
+     `VkVideoEncodeH265CapabilitiesEXT`
+  ** Removed capability flag
+     `VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT`
+     and removed `pStdReferenceFinalLists` members from the
+     `VkVideoEncodeH265PictureInfoEXT` and
+     `VkVideoEncodeH265NaluSliceSegmentInfoEXT` structures as reference
+     lists info is now included in `pStdPictureInfo`
+  ** Added capability flag
+     `VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT`
+  * Revision 12, 2023-07-19 (Daniel Rakos)
+  ** Added video std capability flags
+     `VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_EXT` and
+     `VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT`
+  ** Fixed optionality of the array members of
+     `VkVideoEncodeH265SessionParametersAddInfoEXT`
+  ** Fixed optionality of `VkVideoEncodeH265RateControlInfoEXT::flags`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_2plane_444_formats.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_2plane_444_formats.adoc
new file mode 100644
index 0000000..82f3224
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_2plane_444_formats.adoc
@@ -0,0 +1,41 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_ycbcr_2plane_444_formats.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-28
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+  - Ping Liu, Intel
+
+=== Description
+
+This extension adds some {YCbCr} formats that are in common use for video
+encode and decode, but were not part of the
+`apiext:VK_KHR_sampler_ycbcr_conversion` extension.
+
+include::{generated}/interfaces/VK_EXT_ycbcr_2plane_444_formats.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+This extension has been partially promoted.
+The format enumerants introduced by the extension are included in core
+Vulkan 1.3, with the EXT suffix omitted.
+However, runtime support for these formats is optional in core Vulkan 1.3,
+while if this extension is supported, runtime support is mandatory.
+The feature structure is not promoted.
+The original enum names are still available as aliases of the core
+functionality.
+
+=== Version History
+
+  * Revision 1, 2020-03-08 (Piers Daniell)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_image_arrays.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_image_arrays.adoc
new file mode 100644
index 0000000..bd1c15d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_EXT_ycbcr_image_arrays.adoc
@@ -0,0 +1,26 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_ycbcr_image_arrays.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-15
+*Contributors*::
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension allows images of a format that requires
+<<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> to be
+created with multiple array layers, which is otherwise restricted.
+
+include::{generated}/interfaces/VK_EXT_ycbcr_image_arrays.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-01-15 (Piers Daniell)
+  ** Initial revision
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_buffer_collection.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_buffer_collection.adoc
new file mode 100644
index 0000000..5825c8f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_buffer_collection.adoc
@@ -0,0 +1,63 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_buffer_collection.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-23
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Craig Stout, Google
+  - John Bauman, Google
+  - John Rosasco, Google
+
+=== Description
+
+A buffer collection is a collection of one or more buffers which were
+allocated together as a group and which all have the same properties.
+These properties describe the buffers' internal representation such as its
+dimensions and memory layout.
+This ensures that all of the buffers can be used interchangeably by tasks
+that require swapping among multiple buffers, such as double-buffered
+graphics rendering.
+
+By sharing such a collection of buffers between components, communication
+about buffer lifecycle can be made much simpler and more efficient.
+For example, when a content producer finishes writing to a buffer, it can
+message the consumer of the buffer with the buffer index, rather than
+passing a handle to the shared memory.
+
+On Fuchsia, the Sysmem service uses buffer collections as a core construct
+in its design.
+VK_FUCHSIA_buffer_collection is the Vulkan extension that allows Vulkan
+applications to interoperate with the Sysmem service on Fuchsia.
+
+include::{generated}/interfaces/VK_FUCHSIA_buffer_collection.adoc[]
+
+=== Issues
+
+1) When configuring a slink:VkImageConstraintsInfoFUCHSIA structure for
+constraint setting, should a NULL pname:pFormatConstraints parameter be
+allowed ?
+
+*RESOLVED*: No.
+Specifying a NULL pname:pFormatConstraints results in logical complexity of
+interpreting the relationship between the
+slink:VkImageCreateInfo::pname:usage settings of the elements of the
+pname:pImageCreateInfos array and the implied or desired
+tlink:VkFormatFeatureFlags.
+
+The explicit requirement for pname:pFormatConstraints to be non-NULL
+simplifies the implied logic of the implementation and expectations for the
+Vulkan application.
+
+=== Version History
+
+  * Revision 2, 2021-09-23 (John Rosasco)
+  ** Review passes
+  * Revision 1, 2021-03-09 (John Rosasco)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_memory.adoc
new file mode 100644
index 0000000..4c365da
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_memory.adoc
@@ -0,0 +1,37 @@
+// Copyright (c) 2017-2021 Google Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_external_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-01
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Craig Stout, Google
+  - John Bauman, Google
+  - John Rosasco, Google
+
+=== Description
+
+Vulkan apps may wish to export or import device memory handles to or from
+other logical devices, instances or APIs.
+
+This memory sharing can eliminate copies of memory buffers when different
+subsystems need to interoperate on them.
+Sharing memory buffers may also facilitate a better distribution of
+processing workload for more complex memory manipulation pipelines.
+
+include::{generated}/interfaces/VK_FUCHSIA_external_memory.adoc[]
+
+=== Issues
+
+See `apiext:VK_KHR_external_memory` issues list for further information.
+
+=== Version History
+
+  * Revision 1, 2021-03-01 (John Rosasco)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_semaphore.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_semaphore.adoc
new file mode 100644
index 0000000..2058d11
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_external_semaphore.adoc
@@ -0,0 +1,43 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_external_semaphore.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-08
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Craig Stout, Google
+  - John Bauman, Google
+  - John Rosasco, Google
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using semaphores.
+This extension enables an application to export semaphore payload to and
+import semaphore payload from Zircon event handles.
+
+include::{generated}/interfaces/VK_FUCHSIA_external_semaphore.adoc[]
+
+=== Issues
+
+1) Does the application need to close the Zircon event handle returned by
+flink:vkGetSemaphoreZirconHandleFUCHSIA?
+
+*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
+the semaphore.
+A successful get call transfers ownership of the Zircon event handle to the
+application, and a successful import transfers it back to the driver.
+Destroying the original semaphore object will not close the Zircon event
+handle nor remove its reference to the underlying semaphore resource
+associated with it.
+
+=== Version History
+
+  * Revision 1, 2021-03-08 (John Rosasco)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_imagepipe_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_imagepipe_surface.adoc
new file mode 100644
index 0000000..b6cf73b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_FUCHSIA_imagepipe_surface.adoc
@@ -0,0 +1,30 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_imagepipe_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-27
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Craig Stout, Google
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+
+=== Description
+
+The `VK_FUCHSIA_imagepipe_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a Fuchsia
+code:imagePipeHandle.
+
+include::{generated}/interfaces/VK_FUCHSIA_imagepipe_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-07-27 (Craig Stout)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_frame_token.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_frame_token.adoc
new file mode 100644
index 0000000..d911f82
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_frame_token.adoc
@@ -0,0 +1,29 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GGP_frame_token.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jean-Francois Roy, Google
+  - Richard O'Grady, Google
+
+=== Description
+
+This extension allows an application that uses the `apiext:VK_KHR_swapchain`
+extension in combination with a Google Games Platform surface provided by
+the `apiext:VK_GGP_stream_descriptor_surface` extension to associate a
+Google Games Platform frame token with a present operation.
+
+include::{generated}/interfaces/VK_GGP_frame_token.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-11-26 (Jean-Francois Roy)
+  ** Initial revision.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_stream_descriptor_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_stream_descriptor_surface.adoc
new file mode 100644
index 0000000..edf3b43
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GGP_stream_descriptor_surface.adoc
@@ -0,0 +1,42 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GGP_stream_descriptor_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jean-Francois Roy, Google
+  - Brad Grantham, Google
+  - Connor Smith, Google
+  - Cort Stratton, Google
+  - Hai Nguyen, Google
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+  - Jim Ray, Google
+  - Katherine Wu, Google
+  - Kaye Mason, Google
+  - Kuangye Guo, Google
+  - Mark Segal, Google
+  - Nicholas Vining, Google
+  - Paul Lalonde, Google
+  - Richard O'Grady, Google
+
+=== Description
+
+The `VK_GGP_stream_descriptor_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a Google Games
+Platform code:GgpStreamDescriptor.
+
+include::{generated}/interfaces/VK_GGP_stream_descriptor_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-11-26 (Jean-Francois Roy)
+  ** Initial revision.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_decorate_string.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_decorate_string.adoc
new file mode 100644
index 0000000..864ad4d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_decorate_string.adoc
@@ -0,0 +1,30 @@
+// Copyright (c) 2018-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_decorate_string.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-09
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/GOOGLE/SPV_GOOGLE_decorate_string.html[`SPV_GOOGLE_decorate_string`]
+*Contributors*::
+  - Hai Nguyen, Google
+  - Neil Henning, AMD
+
+=== Description
+
+The `VK_GOOGLE_decorate_string` extension allows use of the
+`SPV_GOOGLE_decorate_string` extension in SPIR-V shader modules.
+
+include::{generated}/interfaces/VK_GOOGLE_decorate_string.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-07-09 (Neil Henning)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_display_timing.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_display_timing.adoc
new file mode 100644
index 0000000..477496a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_display_timing.adoc
@@ -0,0 +1,58 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_display_timing.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+
+=== Description
+
+This device extension allows an application that uses the
+`apiext:VK_KHR_swapchain` extension to obtain information about the
+presentation engine's display, to obtain timing information about each
+present, and to schedule a present to happen no earlier than a desired time.
+An application can use this to minimize various visual anomalies (e.g.
+stuttering).
+
+Traditional game and real-time animation applications need to correctly
+position their geometry for when the presentable image will be presented to
+the user.
+To accomplish this, applications need various timing information about the
+presentation engine's display.
+They need to know when presentable images were actually presented, and when
+they could have been presented.
+Applications also need to tell the presentation engine to display an image
+no sooner than a given time.
+This allows the application to avoid stuttering, so the animation looks
+smooth to the user.
+
+This extension treats variable-refresh-rate (VRR) displays as if they are
+fixed-refresh-rate (FRR) displays.
+
+include::{generated}/interfaces/VK_GOOGLE_display_timing.adoc[]
+
+=== Examples
+
+[NOTE]
+.Note
+====
+The example code for the this extension (like the `apiext:VK_KHR_surface`
+and `VK_GOOGLE_display_timing` extensions) is contained in the cube demo
+that is shipped with the official Khronos SDK, and is being kept up-to-date
+in that location (see:
+https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c ).
+====
+
+=== Version History
+
+  * Revision 1, 2017-02-14 (Ian Elliott)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_hlsl_functionality1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_hlsl_functionality1.adoc
new file mode 100644
index 0000000..63cf030
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_hlsl_functionality1.adoc
@@ -0,0 +1,30 @@
+// Copyright (c) 2018-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_hlsl_functionality1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-09
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/GOOGLE/SPV_GOOGLE_hlsl_functionality1.html[`SPV_GOOGLE_hlsl_functionality1`]
+*Contributors*::
+  - Hai Nguyen, Google
+  - Neil Henning, AMD
+
+=== Description
+
+The `VK_GOOGLE_hlsl_functionality1` extension allows use of the
+`SPV_GOOGLE_hlsl_functionality1` extension in SPIR-V shader modules.
+
+include::{generated}/interfaces/VK_GOOGLE_hlsl_functionality1.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-07-09 (Neil Henning)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_surfaceless_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_surfaceless_query.adoc
new file mode 100644
index 0000000..e93030d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_surfaceless_query.adoc
@@ -0,0 +1,42 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_surfaceless_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-08-03
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ian Elliott, Google
+  - Shahbaz Youssefi, Google
+  - James Jones, NVIDIA
+
+=== Description
+
+This extension allows the flink:vkGetPhysicalDeviceSurfaceFormatsKHR and
+flink:vkGetPhysicalDeviceSurfacePresentModesKHR functions to accept
+dlink:VK_NULL_HANDLE as their pname:surface parameter, allowing potential
+surface formats, color spaces and present modes to be queried without
+providing a surface.
+Identically, flink:vkGetPhysicalDeviceSurfaceFormats2KHR,
+flink:vkGetPhysicalDeviceSurfacePresentModes2EXT, and
+flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR would accept
+dlink:VK_NULL_HANDLE in
+slink:VkPhysicalDeviceSurfaceInfo2KHR::pname:surface.
+*This can only be supported on platforms where the results of these queries
+are surface-agnostic and a single presentation engine is the implicit target
+of all present operations*.
+
+include::{generated}/interfaces/VK_GOOGLE_surfaceless_query.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-12-14 (Shahbaz Youssefi)
+  ** Internal revisions
+  * Revision 2, 2022-08-03 (Shahbaz Youssefi)
+  ** Precisions to which parts of the query responses are defined when
+     surfaceless
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_user_type.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_user_type.adoc
new file mode 100644
index 0000000..8e5fd6b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_GOOGLE_user_type.adoc
@@ -0,0 +1,30 @@
+// Copyright (c) 2019-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_user_type.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-07-09
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/GOOGLE/SPV_GOOGLE_user_type.html[`SPV_GOOGLE_user_type`]
+*Contributors*::
+  - Kaye Mason, Google
+  - Hai Nguyen, Google
+
+=== Description
+
+The `VK_GOOGLE_user_type` extension allows use of the `SPV_GOOGLE_user_type`
+extension in SPIR-V shader modules.
+
+include::{generated}/interfaces/VK_GOOGLE_user_type.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-09-07 (Kaye Mason)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_cluster_culling_shader.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_cluster_culling_shader.adoc
new file mode 100644
index 0000000..b1f90c5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_cluster_culling_shader.adoc
@@ -0,0 +1,275 @@
+// Copyright (c) 2020-2023 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_HUAWEI_cluster_culling_shader.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-17
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/HUAWEI/SPV_HUAWEI_cluster_culling_shader.html[`SPV_HUAWEI_cluster_culling_shader`].
+  - This extension provides API support for
+    {GLSLregistry}/huawei/GLSL_HUAWEI_cluster_culling_shader.txt[`GL_HUAWEI_cluster_culling_shader`].
+*Contributors*::
+  - Yuchang Wang, Huawei
+  - Juntao Li, Huawei
+  - Pan Gao, Huawei
+  - Jie Cao, Huawei
+  - Yunjin Zhang, Huawei
+  - Shujie Zhou, Huawei
+  - Chaojun Wang, Huawei
+  - Jiajun Hu, Huawei
+  - Cong Zhang, Huawei
+
+=== Description
+
+Cluster Culling Shaders (CCS) are similar to the existing compute shaders.
+Their main purpose is to provide an execution environment in order to
+perform coarse-level geometry culling and LOD selection more efficiently on
+the GPU.
+
+The traditional 2-pass GPU culling solution using a compute shader sometimes
+needs a pipeline barrier between compute and graphics pipeline to optimize
+performance.
+An additional compaction process may also be required.
+This extension addresses these shortcomings, allowing compute shaders to
+directly emit visible clusters to the following graphics pipeline.
+
+A set of new built-in output variables are used to express a visible
+cluster.
+In addition, a new built-in function is used to emit these variables from
+CCS to the IA stage.
+The IA stage can use these variables to fetches vertices of a visible
+cluster and drive vertex shaders to shading these vertices.
+
+Note that CCS do not work with geometry or tessellation shaders, but both IA
+and vertex shaders are preserved.
+Vertex shaders are still used for vertex position shading, instead of
+directly outputting transformed vertices from the compute shader.
+This makes CCS more suitable for mobile GPUs.
+
+include::{generated}/interfaces/VK_HUAWEI_cluster_culling_shader.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-indexcounthuawei,IndexCountHUAWEI>>
+  * <<interfaces-builtin-variables-vertexcounthuawei,VertexCountHUAWEI>>
+  * <<interfaces-builtin-variables-instancecounthuawei,InstanceCountHUAWEI>>
+  * <<interfaces-builtin-variables-firstindexhuawei,FirstIndexHUAWEI>>
+  * <<interfaces-builtin-variables-firstvertexhuawei,FirstVertexHUAWEI>>
+  * <<interfaces-builtin-variables-vertexoffsethuawei,VertexOffsetHUAWEI>>
+  * <<interfaces-builtin-variables-firstinstancehuawei,FirstInstanceHUAWEI>>
+  * <<interfaces-builtin-variables-clusteridhuawei,ClusterIDHUAWEI>>
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-ClusterCullingShadingHUAWEI,
+    code:ClusterCullingShadingHUAWEI>>
+
+=== Sample Code
+
+Example of cluster culling in a GLSL shader
+
+[source,c]
+----
+#extension GL_HUAWEI_cluster_culling_shader: enable
+
+#define GPU_WARP_SIZE                   32
+#define GPU_GROUP_SIZE                  GPU_WARP_SIZE
+
+#define GPU_CLUSTER_PER_INVOCATION      1
+#define GPU_CLUSTER_PER_WORKGROUP       (GPU_GROUP_SIZE * GPU_CLUSTER_PER_INVOCATION)
+
+// Number of threads per workgroup
+// - 1D only
+// - warpsize = 32
+layout(local_size_x=GPU_GROUP_SIZE, local_size_y=1, local_size_z=1) in;
+
+
+#define GPU_CLUSTER_DESCRIPTOR_BINDING      0
+#define GPU_DRAW_BUFFER_BINDING             1
+#define GPU_INSTANCE_DESCRIPTOR_BINDING     2
+
+const float pi_half = 1.570795;
+uint instance_id;
+
+struct BoundingSphere
+{
+  vec3 center;
+  float radius;
+};
+
+struct BoundingCone
+{
+  vec3 normal;
+  float angle;
+};
+
+struct ClusterDescriptor
+{
+  BoundingSphere sphere;
+  BoundingCone cone;
+  uint instance_idx;
+};
+
+struct InstanceData
+{
+  mat4 mvp_matrix;                      // mvp matrix.
+  vec4 frustum_planes[6];               // six frustum planes
+  mat4 model_matrix_transpose_inverse;  // inverse transpose of model matrix.
+  vec3 view_origin;                     // view original
+};
+
+struct InstanceDescriptor
+{
+  uint begin;
+  uint end;
+  uint cluster_count;
+  uint debug;
+  BoundingSphere sphere;
+  InstanceData instance_data;
+};
+
+struct DrawElementsCommand{
+  uint indexcount;
+  uint instanceCount;
+  uint firstIndex;
+  int  vertexoffset;
+  uint firstInstance;
+  uint cluster_id;
+};
+
+// indexed mode
+out gl_PerClusterHUAWEI{
+  uint gl_IndexCountHUAWEI;
+  uint gl_InstanceCountHUAWEI;
+  uint gl_FirstIndexHUAWEI;
+  int  gl_VertexOffsetHUAWEI;
+  uint gl_FirstInstanceHUAWEI;
+  uint gl_ClusterIDHUAWEI;
+};
+
+
+layout(binding = GPU_CLUSTER_DESCRIPTOR_BINDING, std430) readonly buffer cluster_descriptor_ssbo
+{
+        ClusterDescriptor cluster_descriptors[];
+};
+
+
+layout(binding = GPU_DRAW_BUFFER_BINDING, std430) buffer draw_indirect_ssbo
+{
+        DrawElementsCommand draw_commands[];
+};
+
+layout(binding = GPU_INSTANCE_DESCRIPTOR_BINDING, std430) buffer instance_descriptor_ssbo
+{
+        InstanceDescriptor instance_descriptors[];
+};
+
+
+bool isFrontFaceVisible( vec3 sphere_center, float sphere_radius, vec3 cone_normal, float cone_angle )
+{
+  vec3 sphere_center_dir = normalize(sphere_center -
+                           instance_descriptors[instance_id].instance_data.view_origin);
+
+  float sin_cone_angle = sin(min(cone_angle, pi_half));
+  return dot(cone_normal, sphere_center_dir) < sin_cone_angle;
+}
+
+bool isSphereOutsideFrustum( vec3 sphere_center, float sphere_radius )
+{
+  bool isInside = false;
+
+  for(int i = 0; i < 6; i++)
+  {
+      isInside = isInside ||
+      (dot(instance_descriptors[instance_id].instance_data.frustum_planes[i].xyz,
+      sphere_center) + instance_descriptors[instance_id].instance_data.frustum_planes[i].w <
+      sphere_radius);
+  }
+  return isInside;
+}
+
+
+void main()
+{
+    uint cluster_id = gl_GlobalInvocationID.x;
+    ClusterDescriptor desc = cluster_descriptors[cluster_id];
+
+    // get instance description
+    instance_id = desc.instance_idx;
+    InstanceDescriptor inst_desc = instance_descriptors[instance_id];
+
+    //instance based culling
+    bool instance_render = !isSphereOutsideFrustum(inst_desc.sphere.center, inst_desc.sphere.radius);
+
+    if( instance_render)
+    {
+        // cluster based culling
+        bool render = (!isSphereOutsideFrustum(desc.sphere.center,
+        desc.sphere.radius) && isFrontFaceVisible(desc.sphere.center, desc.sphere.radius, desc.cone.norm
+        al, desc.cone.angle));
+
+        if (render)
+        {
+            // this cluster passed coarse-level culling, update built-in output variable.
+            // in case of indexed mode:
+            gl_IndexCountHUAWEI     = draw_commands[cluster_id].indexcount;
+            gl_InstanceCountHUAWEI  = draw_commands[cluster_id].instanceCount;
+            gl_FirstIndexHUAWEI     = draw_commands[cluster_id].firstIndex;
+            gl_VertexOffsetHUAWEI   = draw_commands[cluster_id].vertexoffset;
+            gl_FirstInstanceHUAWEI  = draw_commands[cluster_id].firstInstance;
+            gl_ClusterIDHUAWEI      = draw_commands[cluster_id].cluster_id;
+
+            // emit built-in output variables as a drawing command to subsequent
+            // rendering pipeline.
+            dispatchClusterHUAWEI();
+        }
+    }
+}
+----
+
+Example of graphics pipeline creation with cluster culling shader
+
+[source,c]
+----
+// create a cluster culling shader stage info structure.
+VkPipelineShaderStageCreateInfo ccsStageInfo{};
+ccsStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+ccsStageInfo.stage = VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI;
+ccsStageInfo.module = clustercullingshaderModule;
+ccsStageInfo.pName =  "main";
+
+// pipeline shader stage creation
+VkPipelineShaderStageCreateInfo shaderStages[] = { ccsStageInfo, vertexShaderStageInfo, fragmentShaderStageInfo };
+
+// create graphics pipeline
+VkGraphicsPipelineCreateInfo pipelineInfo{};
+pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+pipelineInfo.stageCount = 3;
+pipelineInfo.pStage = shaderStages;
+pipelineInfo.pVertexInputState = &vertexInputInfo;
+// ...
+VkPipeline graphicsPipeline;
+VkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &graphicsPipeline);
+----
+
+
+Example of launching the execution of cluster culling shader
+
+[source,c]
+----
+vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
+vkCmdDrawClusterHUAWEI(commandBuffer, groupCountX, 1, 1);
+vkCmdEndRenderPass(commandBuffer);
+----
+
+=== Version History
+
+  * Revision 1, 2022-11-18 (YuChang Wang)
+  ** Internal revisions
+  * Revision 2, 2023-04-02 (Jon Leech)
+  ** Grammar edits.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_invocation_mask.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_invocation_mask.adoc
new file mode 100644
index 0000000..0aa937d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_invocation_mask.adoc
@@ -0,0 +1,75 @@
+// Copyright (c) 2021 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_HUAWEI_invocation_mask.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-05-27
+*Interactions and External Dependencies*::
+  - This extension requires `apiext:VK_KHR_ray_tracing_pipeline`, which
+    allow to bind an invocation mask image before the ray tracing command
+  - This extension requires `apiext:VK_KHR_synchronization2`, which allows
+    new pipeline stage for the invocation mask image
+*Contributors*::
+  - Yunpeng Zhu
+  - Juntao Li, Huawei
+  - Liang Chen, Huawei
+  - Shaozhuang Shi, Huawei
+  - Hailong Chu, Huawei
+
+=== Description
+
+The rays to trace may be sparse in some use cases.
+For example, the scene only have a few regions to reflect.
+Providing an invocation mask image to the ray tracing commands could
+potentially give the hardware the hint to do certain optimization without
+invoking an additional pass to compact the ray buffer.
+
+include::{generated}/interfaces/VK_HUAWEI_invocation_mask.adoc[]
+
+=== Examples
+
+RT mask is updated before each traceRay.
+
+Step 1.
+Generate InvocationMask.
+
+[source,c]
+----
+//the rt mask image bind as color attachment in the fragment shader
+Layout(location = 2) out vec4 outRTmask
+vec4 mask = vec4(x,x,x,x);
+outRTmask = mask;
+----
+
+Step 2.
+traceRay with InvocationMask
+
+[source,c]
+----
+vkCmdBindPipeline(
+    commandBuffers[imageIndex],
+    VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
+    vkCmdBindDescriptorSets(commandBuffers[imageIndex],
+    VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
+    m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
+    0, nullptr);
+
+vkCmdBindInvocationMaskHUAWEI(
+    commandBuffers[imageIndex],
+    InvocationMaskimageView,
+    InvocationMaskimageLayout);
+    vkCmdTraceRaysKHR(commandBuffers[imageIndex],
+    pRaygenShaderBindingTable,
+    pMissShaderBindingTable,
+    swapChainExtent.width,
+    swapChainExtent.height, 1);
+----
+
+=== Version History
+
+  * Revision 1, 2021-05-27 (Yunpeng Zhu)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_subpass_shading.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_subpass_shading.adoc
new file mode 100644
index 0000000..c6e581f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_HUAWEI_subpass_shading.adoc
@@ -0,0 +1,266 @@
+// Copyright (c) 2020-2024 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_HUAWEI_subpass_shading.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-01
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/HUAWEI/SPV_HUAWEI_subpass_shading.html[`SPV_HUAWEI_subpass_shading`].
+  - This extension provides API support for
+    {GLSLregistry}/huawei/GLSL_HUAWEI_subpass_shading.txt[`GL_HUAWEI_subpass_shading`].
+*Contributors*::
+  - Hueilong Wang
+  - Juntao Li, Huawei
+  - Renmiao Lu, Huawei
+  - Pan Gao, Huawei
+
+=== Description
+
+This extension allows applications to execute a subpass shading pipeline in
+a subpass of a render pass in order to save memory bandwidth for algorithms
+like tile-based deferred rendering and forward plus.
+A subpass shading pipeline is a pipeline with the compute pipeline ability,
+allowed to read values from input attachments, and only allowed to be
+dispatched inside a stand-alone subpass.
+Its work dimension is defined by the render pass's render area size.
+Its workgroup size (width, height) shall be a power-of-two number in width
+or height, with minimum value from 8, and maximum value shall be decided
+from the render pass attachments and sample counts but depends on
+implementation.
+
+The code:GlobalInvocationId.xy of a subpass shading pipeline is equal to the
+code:FragCoord.xy of a graphic pipeline in the same render pass subtracted
+the <<VkRect2D,pname:offset>> of the
+slink:VkRenderPassBeginInfo::pname:renderArea.
+code:GlobalInvocationId.z is mapped to the Layer if
+`apiext:VK_EXT_shader_viewport_index_layer` is supported.
+The code:GlobalInvocationId.xy is equal to the index of the local workgroup
+multiplied by the size of the local workgroup plus the
+code:LocalInvocationId and the <<VkRect2D,pname:offset>> of the
+slink:VkRenderPassBeginInfo::pname:renderArea.
+
+This extension allows a subpass's pipeline bind point to be
+ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
+
+include::{generated}/interfaces/VK_HUAWEI_subpass_shading.adoc[]
+
+
+=== Sample Code
+
+Example of subpass shading in a GLSL shader
+
+[source,c]
+----
+#extension GL_HUAWEI_subpass_shading: enable
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+
+layout(constant_id = 0) const uint tileWidth = 8;
+layout(constant_id = 1) const uint tileHeight = 8;
+layout(local_size_x_id = 0, local_size_y_id = 1, local_size_z = 1) in;
+layout(set=0, binding=0, input_attachment_index=0) uniform subpassInput depth;
+
+void main()
+{
+  float d = subpassLoad(depth).x;
+  float minD = subgroupMin(d);
+  float maxD = subgroupMax(d);
+}
+----
+
+Example of subpass shading dispatching in a subpass
+
+[source,c]
+----
+vkCmdNextSubpass(commandBuffer, VK_SUBPASS_CONTENTS_INLINE);
+vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipeline);
+vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipelineLayout,
+  firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+vkCmdSubpassShadingHUAWEI(commandBuffer)
+vkCmdEndRenderPass(commandBuffer);
+----
+
+Example of subpass shading render pass creation
+
+[source,c]
+----
+VkAttachmentDescription2 attachments[] = {
+  {
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
+    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  },
+  {
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
+    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  },
+  {
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
+    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  },
+  {
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
+    0, VK_FORMAT_D24_UNORM_S8_UINT, VK_SAMPLE_COUNT_1_BIT,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
+  },
+  {
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
+    0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
+    VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  }
+};
+
+VkAttachmentReference2 gBufferAttachmentReferences[] = {
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
+};
+VkAttachmentReference2 gBufferDepthStencilAttachmentReferences =
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
+VkAttachmentReference2 depthInputAttachmentReferences[] = {
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
+};
+VkAttachmentReference2 preserveAttachmentReferences[] = {
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT }
+}; // G buffer including depth/stencil
+VkAttachmentReference2 colorAttachmentReferences[] = {
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
+};
+VkAttachmentReference2 resolveAttachmentReference =
+  { VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT };
+
+VkSubpassDescription2 subpasses[] = {
+  {
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
+    0, NULL, // input
+    sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // color
+    NULL, &gBufferDepthStencilAttachmentReferences, // resolve & DS
+    0, NULL
+  },
+  {
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI , 0,
+    sizeof(depthInputAttachmentReferences)/sizeof(depthInputAttachmentReferences[0]), depthInputAttachmentReferences, // input
+    0, NULL, // color
+    NULL, NULL, // resolve & DS
+    sizeof(preserveAttachmentReferences)/sizeof(preserveAttachmentReferences[0]), preserveAttachmentReferences,
+  },
+  {
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
+    sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // input
+    sizeof(colorAttachmentReferences)/sizeof(colorAttachmentReferences[0]), colorAttachmentReferences, // color
+    &resolveAttachmentReference, &gBufferDepthStencilAttachmentReferences, // resolve & DS
+    0, NULL
+  },
+};
+
+VkMemoryBarrier2KHR fragmentToSubpassShading = {
+  VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
+  VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+  VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
+};
+
+VkMemoryBarrier2KHR subpassShadingToFragment = {
+  VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
+  VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_ACCESS_SHADER_WRITE_BIT,
+  VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_SHADER_READ_BIT
+};
+
+VkSubpassDependency2 dependencies[] = {
+  {
+    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &fragmentToSubpassShading,
+    0, 1,
+    0, 0, 0, 0,
+    0, 0
+  },
+  {
+    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &subpassShadingToFragment,
+    1, 2,
+    0, 0, 0, 0,
+    0, 0
+  },
+};
+
+VkRenderPassCreateInfo2 renderPassCreateInfo = {
+  VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, NULL, 0,
+    sizeof(attachments)/sizeof(attachments[0]), attachments,
+    sizeof(subpasses)/sizeof(subpasses[0]), subpasses,
+    sizeof(dependencies)/sizeof(dependencies[0]), dependencies,
+    0, NULL
+};
+VKRenderPass renderPass;
+vkCreateRenderPass2(device, &renderPassCreateInfo, NULL, &renderPass);
+----
+
+Example of subpass shading pipeline creation
+
+[source,c]
+----
+VkExtent2D maxWorkgroupSize;
+
+VkSpecializationMapEntry subpassShadingConstantMapEntries[] = {
+  { 0, 0 * sizeof(uint32_t), sizeof(uint32_t) },
+  { 1, 1 * sizeof(uint32_t), sizeof(uint32_t) }
+};
+
+VkSpecializationInfo subpassShadingConstants = {
+  2, subpassShadingConstantMapEntries,
+  sizeof(VkExtent2D), &maxWorkgroupSize
+};
+
+VkSubpassShadingPipelineCreateInfoHUAWEI subpassShadingPipelineCreateInfo {
+  VK_STRUCTURE_TYPE_SUBPASSS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, NULL,
+  renderPass, 1
+};
+
+VkPipelineShaderStageCreateInfo subpassShadingPipelineStageCreateInfo {
+  VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL,
+  0, VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI,
+  shaderModule, "main",
+  &subpassShadingConstants
+};
+
+VkComputePipelineCreateInfo subpassShadingComputePipelineCreateInfo = {
+  VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, &subpassShadingPipelineCreateInfo,
+  0, &subpassShadingPipelineStageCreateInfo,
+  pipelineLayout, basePipelineHandle, basePipelineIndex
+};
+
+VKPipeline pipeline;
+
+vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderPass, &maxWorkgroupSize);
+vkCreateComputePipelines(device, pipelineCache, 1, &subpassShadingComputePipelineCreateInfo, NULL, &pipeline);
+
+----
+
+
+=== Version History
+
+  * Revision 3, 2023-06-19 (Pan Gao)
+  ** Rename `VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI` to
+     `VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI` to better aligned with
+     naming of other pipeline stages
+  * Revision 2, 2021-06-28 (Hueilong Wang)
+  ** Change vkGetSubpassShadingMaxWorkgroupSizeHUAWEI to
+     vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI to resolve issue
+     https://github.com/KhronosGroup/Vulkan-Docs/issues/1564[`pub1564`]
+  * Revision 1, 2020-12-15 (Hueilong Wang)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_filter_cubic.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_filter_cubic.adoc
new file mode 100644
index 0000000..25aa614
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_filter_cubic.adoc
@@ -0,0 +1,52 @@
+// Copyright (c) 2016-2020 Imagination Technologies Limited
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_IMG_filter_cubic.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-02-23
+*Contributors*::
+  - Tobias Hector, Imagination Technologies
+
+=== Description
+
+`VK_IMG_filter_cubic` adds an additional, high quality cubic filtering mode
+to Vulkan, using a Catmull-Rom bicubic filter.
+Performing this kind of filtering can be done in a shader by using 16
+samples and a number of instructions, but this can be inefficient.
+The cubic filter mode exposes an optimized high quality texture sampling
+using fixed texture sampling functionality.
+
+include::{generated}/interfaces/VK_IMG_filter_cubic.adoc[]
+
+=== Example
+
+Creating a sampler with the new filter for both magnification and
+minification
+
+[source,c++]
+----
+    VkSamplerCreateInfo createInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
+        // Other members set to application-desired values
+    };
+
+    createInfo.magFilter = VK_FILTER_CUBIC_IMG;
+    createInfo.minFilter = VK_FILTER_CUBIC_IMG;
+
+    VkSampler sampler;
+    VkResult result = vkCreateSampler(
+        device,
+        &createInfo,
+        &sampler);
+----
+
+=== Version History
+
+  * Revision 1, 2016-02-23 (Tobias Hector)
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_format_pvrtc.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_format_pvrtc.adoc
new file mode 100644
index 0000000..13e579e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_IMG_format_pvrtc.adoc
@@ -0,0 +1,33 @@
+// Copyright (c) 2019-2020 Imagination Technologies Limited
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_IMG_format_pvrtc.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-09-02
+*IP Status*::
+    Imagination Technologies Proprietary
+*Contributors*::
+  - Stuart Smith, Imagination Technologies
+
+=== Description
+
+`VK_IMG_format_pvrtc` provides additional texture compression functionality
+specific to Imagination Technologies PowerVR Texture compression format
+(called PVRTC).
+
+=== Deprecation
+
+Both PVRTC1 and PVRTC2 are slower than standard image formats on PowerVR
+GPUs, and support will be removed from future hardware.
+
+include::{generated}/interfaces/VK_IMG_format_pvrtc.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-09-02 (Stuart Smith)
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_performance_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_performance_query.adoc
new file mode 100644
index 0000000..b99a433
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_performance_query.adoc
@@ -0,0 +1,174 @@
+// Copyright (c) 2018-2020 Intel Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_INTEL_performance_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-05-16
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Lionel Landwerlin, Intel
+  - Piotr Maciejewski, Intel
+
+=== Description
+
+This extension allows an application to capture performance data to be
+interpreted by a external application or library.
+
+Such a library is available at : https://github.com/intel/metrics-discovery
+
+Performance analysis tools such as
+link:++https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyzers.html++[Graphics
+Performance Analyzers] make use of this extension and the metrics-discovery
+library to present the data in a human readable way.
+
+include::{generated}/interfaces/VK_INTEL_performance_query.adoc[]
+
+=== Example Code
+
+[source,c]
+----
+// A previously created device
+VkDevice device;
+
+// A queue derived from the device
+VkQueue queue;
+
+VkInitializePerformanceApiInfoINTEL performanceApiInfoIntel = {
+  VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL,
+  NULL,
+  NULL
+};
+
+vkInitializePerformanceApiINTEL(
+  device,
+  &performanceApiInfoIntel);
+
+VkQueryPoolPerformanceQueryCreateInfoINTEL queryPoolIntel = {
+  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL,
+  NULL,
+  VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL,
+};
+
+VkQueryPoolCreateInfo queryPoolCreateInfo = {
+  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
+  &queryPoolIntel,
+  0,
+  VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL,
+  1,
+  0
+};
+
+VkQueryPool queryPool;
+
+VkResult result = vkCreateQueryPool(
+  device,
+  &queryPoolCreateInfo,
+  NULL,
+  &queryPool);
+
+assert(VK_SUCCESS == result);
+
+// A command buffer we want to record counters on
+VkCommandBuffer commandBuffer;
+
+VkCommandBufferBeginInfo commandBufferBeginInfo = {
+  VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+  NULL,
+  VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
+  NULL
+};
+
+result = vkBeginCommandBuffer(commandBuffer, &commandBufferBeginInfo);
+
+assert(VK_SUCCESS == result);
+
+vkCmdResetQueryPool(
+  commandBuffer,
+  queryPool,
+  0,
+  1);
+
+vkCmdBeginQuery(
+  commandBuffer,
+  queryPool,
+  0,
+  0);
+
+// Perform the commands you want to get performance information on
+// ...
+
+// Perform a barrier to ensure all previous commands were complete before
+// ending the query
+vkCmdPipelineBarrier(commandBuffer,
+  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
+  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
+  0,
+  0,
+  NULL,
+  0,
+  NULL,
+  0,
+  NULL);
+
+vkCmdEndQuery(
+  commandBuffer,
+  queryPool,
+  0);
+
+result = vkEndCommandBuffer(commandBuffer);
+
+assert(VK_SUCCESS == result);
+
+VkPerformanceConfigurationAcquireInfoINTEL performanceConfigurationAcquireInfo = {
+  VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL,
+  NULL,
+  VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL
+};
+
+VkPerformanceConfigurationINTEL performanceConfigurationIntel;
+
+result = vkAcquirePerformanceConfigurationINTEL(
+  device,
+  &performanceConfigurationAcquireInfo,
+  &performanceConfigurationIntel);
+
+vkQueueSetPerformanceConfigurationINTEL(queue, performanceConfigurationIntel);
+
+assert(VK_SUCCESS == result);
+
+// Submit the command buffer and wait for its completion
+// ...
+
+result = vkReleasePerformanceConfigurationINTEL(
+  device,
+  performanceConfigurationIntel);
+
+assert(VK_SUCCESS == result);
+
+// Get the report size from metrics-discovery's QueryReportSize
+
+result = vkGetQueryPoolResults(
+  device,
+  queryPool,
+  0, 1, QueryReportSize,
+  data, QueryReportSize, 0);
+
+assert(VK_SUCCESS == result);
+
+// The data can then be passed back to metrics-discovery from which
+// human readable values can be queried.
+----
+
+=== Version History
+
+  * Revision 2, 2020-03-06 (Lionel Landwerlin)
+  ** Rename VkQueryPoolCreateInfoINTEL in
+     VkQueryPoolPerformanceQueryCreateInfoINTEL
+
+  * Revision 1, 2018-05-16 (Lionel Landwerlin)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_shader_integer_functions2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_shader_integer_functions2.adoc
new file mode 100644
index 0000000..44a29f9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_INTEL_shader_integer_functions2.adoc
@@ -0,0 +1,44 @@
+// Copyright (c) 2019-2020 Intel Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_INTEL_shader_integer_functions2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-30
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/INTEL/SPV_INTEL_shader_integer_functions2.html[`SPV_INTEL_shader_integer_functions2`].
+  - This extension provides API support for
+    {GLregistry}/INTEL/INTEL_shader_integer_functions2.txt[`GL_INTEL_shader_integer_functions2`].
+*Contributors*::
+  - Ian Romanick, Intel
+  - Ben Ashbaugh, Intel
+
+=== Description
+
+This extension adds support for several new integer instructions in SPIR-V
+for use in graphics shaders.
+Many of these instructions have pre-existing counterparts in the Kernel
+environment.
+
+The added integer functions are defined by the
+{spirv}/INTEL/SPV_INTEL_shader_integer_functions2.html[`SPV_INTEL_shader_integer_functions2`]
+SPIR-V extension and can be used with the GL_INTEL_shader_integer_functions2
+GLSL extension.
+
+include::{generated}/interfaces/VK_INTEL_shader_integer_functions2.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-IntegerFunctions2INTEL,
+    code:IntegerFunctions2INTEL>>
+
+=== Version History
+
+  * Revision 1, 2019-04-30 (Ian Romanick)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_16bit_storage.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_16bit_storage.adoc
new file mode 100644
index 0000000..03af3dd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_16bit_storage.adoc
@@ -0,0 +1,66 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_16bit_storage.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_shader_16bit_storage.txt[`GL_EXT_shader_16bit_storage`]
+*Contributors*::
+  - Alexander Galazin, ARM
+  - Jan-Harald Fredriksen, ARM
+  - Joerg Wagner, ARM
+  - Neil Henning, Codeplay
+  - Jeff Bolz, Nvidia
+  - Daniel Koch, Nvidia
+  - David Neto, Google
+  - John Kessenich, Google
+
+=== Description
+
+The `VK_KHR_16bit_storage` extension allows use of 16-bit types in shader
+input and output interfaces, and push constant blocks.
+This extension introduces several new optional features which map to SPIR-V
+capabilities and allow access to 16-bit data in code:Block-decorated objects
+in the code:Uniform and the code:StorageBuffer storage classes, and objects
+in the code:PushConstant storage class.
+This extension allows 16-bit variables to be declared and used as
+user-defined shader inputs and outputs but does not change location
+assignment and component assignment rules.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+However, if Vulkan 1.1 is supported and this extension is not, the
+code:storageBuffer16BitAccess capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_16bit_storage.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-StorageBuffer16BitAccess,
+    code:StorageBuffer16BitAccess>>
+  * <<spirvenv-capabilities-table-UniformAndStorageBuffer16BitAccess,
+    code:UniformAndStorageBuffer16BitAccess>>
+  * <<spirvenv-capabilities-table-StoragePushConstant16,
+    code:StoragePushConstant16>>
+  * <<spirvenv-capabilities-table-StorageInputOutput16,
+    code:StorageInputOutput16>>
+
+=== Version History
+
+  * Revision 1, 2017-03-23 (Alexander Galazin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_8bit_storage.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_8bit_storage.adoc
new file mode 100644
index 0000000..c5201ea
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_8bit_storage.adoc
@@ -0,0 +1,58 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_8bit_storage.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-02-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_8bit_storage.html[`SPV_KHR_8bit_storage`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_shader_16bit_storage.txt[`GL_EXT_shader_16bit_storage`]
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alexander Galazin, Arm
+
+=== Description
+
+The `VK_KHR_8bit_storage` extension allows use of 8-bit types in uniform and
+storage buffers, and push constant blocks.
+This extension introduces several new optional features which map to SPIR-V
+capabilities and allow access to 8-bit data in code:Block-decorated objects
+in the code:Uniform and the code:StorageBuffer storage classes, and objects
+in the code:PushConstant storage class.
+
+The code:StorageBuffer8BitAccess capability must: be supported by all
+implementations of this extension.
+The other capabilities are optional.
+
+=== Promotion to Vulkan 1.2
+
+Functionality in this extension is included in core Vulkan 1.2, with the KHR
+suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:StorageBuffer8BitAccess capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_8bit_storage.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-StorageBuffer8BitAccess,
+    code:StorageBuffer8BitAccess>>
+  * <<spirvenv-capabilities-table-UniformAndStorageBuffer8BitAccess,
+    code:UniformAndStorageBuffer8BitAccess>>
+  * <<spirvenv-capabilities-table-StoragePushConstant8,
+    code:StoragePushConstant8>>
+
+=== Version History
+
+  * Revision 1, 2018-02-05 (Alexander Galazin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_acceleration_structure.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_acceleration_structure.adoc
new file mode 100644
index 0000000..855dd7f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_acceleration_structure.adoc
@@ -0,0 +1,545 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*Contributors*::
+  - Samuel Bourasseau, Adobe
+  - Matthäus Chajdas, AMD
+  - Greg Grebe, AMD
+  - Nicolai Hähnle, AMD
+  - Tobias Hector, AMD
+  - Dave Oldcorn, AMD
+  - Skyler Saleh, AMD
+  - Mathieu Robart, Arm
+  - Marius Bjorge, Arm
+  - Tom Olson, Arm
+  - Sebastian Tafuri, EA
+  - Henrik Rydgard, Embark
+  - Juan Cañada, Epic Games
+  - Patrick Kelly, Epic Games
+  - Yuriy O'Donnell, Epic Games
+  - Michael Doggett, Facebook/Oculus
+  - Ricardo Garcia, Igalia
+  - Andrew Garrard, Imagination
+  - Don Scorgie, Imagination
+  - Dae Kim, Imagination
+  - Joshua Barczak, Intel
+  - Slawek Grajewski, Intel
+  - Jeff Bolz, NVIDIA
+  - Pascal Gautron, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Ashwin Lele, NVIDIA
+  - Robert Stepinski, NVIDIA
+  - Martin Stich, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Eric Werness, NVIDIA
+  - Jon Leech, Khronos
+  - Jeroen van Schijndel, OTOY
+  - Juul Joosten, OTOY
+  - Alex Bourd, Qualcomm
+  - Roman Larionov, Qualcomm
+  - David McAllister, Qualcomm
+  - Lewis Gordon, Samsung
+  - Ralph Potter, Samsung
+  - Jasper Bekkers, Traverse Research
+  - Jesse Barker, Unity
+  - Baldur Karlsson, Valve
+
+=== Description
+
+In order to be efficient, rendering techniques such as ray tracing need a
+quick way to identify which primitives may be intersected by a ray
+traversing the geometries.
+Acceleration structures are the most common way to represent the geometry
+spatially sorted, in order to quickly identify such potential intersections.
+
+This extension adds new functionalities:
+
+  * Acceleration structure objects and build commands
+  * Structures to describe geometry inputs to acceleration structure builds
+  * Acceleration structure copy commands
+
+
+include::{generated}/interfaces/VK_KHR_acceleration_structure.adoc[]
+
+
+=== Issues
+
+(1) How does this extension differ from VK_NV_ray_tracing?
+--
+*DISCUSSION*:
+
+The following is a summary of the main functional differences between
+VK_KHR_acceleration_structure and VK_NV_ray_tracing:
+
+  * added acceleration structure serialization / deserialization
+    (ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR,
+    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
+    flink:vkCmdCopyMemoryToAccelerationStructureKHR)
+  * document <<acceleration-structure-inactive-prims,inactive primitives and
+    instances>>
+  * added slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
+  * added indirect and batched acceleration structure builds
+    (flink:vkCmdBuildAccelerationStructuresIndirectKHR)
+  * added <<host-acceleration-structure,host acceleration structure>>
+    commands
+  * reworked geometry structures so they could be better shared between
+    device, host, and indirect builds
+  * explicitly made slink:VkAccelerationStructureKHR use device addresses
+  * added acceleration structure compatibility check function
+    (flink:vkGetDeviceAccelerationStructureCompatibilityKHR)
+  * add parameter for requesting memory requirements for host and/or device
+    build
+  * added format feature for acceleration structure build vertex formats
+    (ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
+--
+
+ifdef::VK_NV_ray_tracing[]
+(2) Can you give a more detailed comparison of differences and similarities
+between VK_NV_ray_tracing and VK_KHR_acceleration_structure?
+--
+*DISCUSSION*:
+
+The following is a more detailed comparison of which commands, structures,
+and enums are aliased, changed, or removed.
+
+  * Aliased functionality -- enums, structures, and commands that are
+    considered equivalent:
+  ** elink:VkGeometryTypeNV {harr} elink:VkGeometryTypeKHR
+  ** elink:VkAccelerationStructureTypeNV {harr}
+     elink:VkAccelerationStructureTypeKHR
+  ** elink:VkCopyAccelerationStructureModeNV {harr}
+     elink:VkCopyAccelerationStructureModeKHR
+  ** tlink:VkGeometryFlagsNV {harr} tlink:VkGeometryFlagsKHR
+  ** elink:VkGeometryFlagBitsNV {harr} elink:VkGeometryFlagBitsKHR
+  ** tlink:VkGeometryInstanceFlagsNV {harr} tlink:VkGeometryInstanceFlagsKHR
+  ** elink:VkGeometryInstanceFlagBitsNV {harr}
+     elink:VkGeometryInstanceFlagBitsKHR
+  ** tlink:VkBuildAccelerationStructureFlagsNV {harr}
+     tlink:VkBuildAccelerationStructureFlagsKHR
+  ** elink:VkBuildAccelerationStructureFlagBitsNV {harr}
+     elink:VkBuildAccelerationStructureFlagBitsKHR
+  ** slink:VkTransformMatrixNV {harr} slink:VkTransformMatrixKHR (added to
+     VK_NV_ray_tracing for descriptive purposes)
+  ** slink:VkAabbPositionsNV {harr} slink:VkAabbPositionsKHR (added to
+     VK_NV_ray_tracing for descriptive purposes)
+  ** slink:VkAccelerationStructureInstanceNV {harr}
+     slink:VkAccelerationStructureInstanceKHR (added to VK_NV_ray_tracing
+     for descriptive purposes)
+
+  * Changed enums, structures, and commands:
+  ** renamed ename:VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV ->
+     ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR in
+     elink:VkGeometryInstanceFlagBitsKHR
+  ** slink:VkGeometryTrianglesNV ->
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR (device or host
+     address instead of buffer+offset)
+  ** slink:VkGeometryAABBNV ->
+     slink:VkAccelerationStructureGeometryAabbsDataKHR (device or host
+     address instead of buffer+offset)
+  ** slink:VkGeometryDataNV -> slink:VkAccelerationStructureGeometryDataKHR
+     (union of triangle/aabbs/instances)
+  ** slink:VkGeometryNV -> slink:VkAccelerationStructureGeometryKHR (changed
+     type of geometry)
+  ** slink:VkAccelerationStructureCreateInfoNV ->
+     slink:VkAccelerationStructureCreateInfoKHR (reshuffle geometry
+     layout/information)
+  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
+     slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR (for
+     acceleration structure properties, renamed pname:maxTriangleCount to
+     pname:maxPrimitiveCount, added per stage and update after bind limits)
+     and slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR (for ray
+     tracing pipeline properties)
+  ** slink:VkAccelerationStructureMemoryRequirementsInfoNV (deleted -
+     replaced by allocating on top of slink:VkBuffer)
+  ** slink:VkWriteDescriptorSetAccelerationStructureNV ->
+     slink:VkWriteDescriptorSetAccelerationStructureKHR (different
+     acceleration structure type)
+  ** flink:vkCreateAccelerationStructureNV ->
+     flink:vkCreateAccelerationStructureKHR (device address, different
+     geometry layout/information)
+  ** flink:vkGetAccelerationStructureMemoryRequirementsNV (deleted -
+     replaced by allocating on top of slink:VkBuffer)
+  ** flink:vkCmdBuildAccelerationStructureNV ->
+     flink:vkCmdBuildAccelerationStructuresKHR (params moved to structs,
+     layout differences)
+  ** flink:vkCmdCopyAccelerationStructureNV ->
+     flink:vkCmdCopyAccelerationStructureKHR (params to struct, extendable)
+  ** flink:vkGetAccelerationStructureHandleNV ->
+     flink:vkGetAccelerationStructureDeviceAddressKHR (device address
+     instead of handle)
+  ** elink:VkAccelerationStructureMemoryRequirementsTypeNV -> size queries
+     for scratch space moved to
+     flink:vkGetAccelerationStructureBuildSizesKHR
+  ** flink:vkDestroyAccelerationStructureNV ->
+     flink:vkDestroyAccelerationStructureKHR (different acceleration
+     structure types)
+  ** flink:vkCmdWriteAccelerationStructuresPropertiesNV ->
+     flink:vkCmdWriteAccelerationStructuresPropertiesKHR (different
+     acceleration structure types)
+  * Added enums, structures and commands:
+  ** ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to elink:VkGeometryTypeKHR enum
+  ** ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
+     ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR to
+     elink:VkCopyAccelerationStructureModeKHR enum
+  ** slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
+  ** elink:VkAccelerationStructureBuildTypeKHR enum
+  ** elink:VkBuildAccelerationStructureModeKHR enum
+  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
+     unions
+  ** slink:VkAccelerationStructureBuildRangeInfoKHR struct
+  ** slink:VkAccelerationStructureGeometryInstancesDataKHR struct
+  ** slink:VkAccelerationStructureDeviceAddressInfoKHR struct
+  ** slink:VkAccelerationStructureVersionInfoKHR struct
+  ** slink:VkStridedDeviceAddressRegionKHR struct
+  ** slink:VkCopyAccelerationStructureToMemoryInfoKHR struct
+  ** slink:VkCopyMemoryToAccelerationStructureInfoKHR struct
+  ** slink:VkCopyAccelerationStructureInfoKHR struct
+  ** flink:vkBuildAccelerationStructuresKHR command (host build)
+  ** flink:vkCopyAccelerationStructureKHR command (host copy)
+  ** flink:vkCopyAccelerationStructureToMemoryKHR (host serialize)
+  ** flink:vkCopyMemoryToAccelerationStructureKHR (host deserialize)
+  ** flink:vkWriteAccelerationStructuresPropertiesKHR (host properties)
+  ** flink:vkCmdCopyAccelerationStructureToMemoryKHR (device serialize)
+  ** flink:vkCmdCopyMemoryToAccelerationStructureKHR (device deserialize)
+  ** flink:vkGetDeviceAccelerationStructureCompatibilityKHR (serialization)
+
+--
+endif::VK_NV_ray_tracing[]
+
+(3) What are the changes between the public provisional (VK_KHR_ray_tracing
+v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
+--
+  * added pname:geometryFlags to
+    stext:VkAccelerationStructureCreateGeometryTypeInfoKHR (later reworked
+    to obsolete this)
+  * added pname:minAccelerationStructureScratchOffsetAlignment property to
+    VkPhysicalDeviceRayTracingPropertiesKHR
+  * fix naming and return enum from
+    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
+  ** renamed stext:VkAccelerationStructureVersionKHR to
+     slink:VkAccelerationStructureVersionInfoKHR
+  ** renamed etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR to
+     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
+  ** removed etext:VK_ERROR_INCOMPATIBLE_VERSION_KHR
+  ** added elink:VkAccelerationStructureCompatibilityKHR enum
+  ** remove return value from
+     flink:vkGetDeviceAccelerationStructureCompatibilityKHR and added return
+     enum parameter
+  * Require Vulkan 1.1
+  * added creation time capture and replay flags
+  ** added elink:VkAccelerationStructureCreateFlagBitsKHR and
+     tlink:VkAccelerationStructureCreateFlagsKHR
+  ** renamed the pname:flags member of
+     slink:VkAccelerationStructureCreateInfoKHR to pname:buildFlags (later
+     removed) and added the pname:createFlags member
+  * change flink:vkCmdBuildAccelerationStructuresIndirectKHR to use buffer
+    device address for indirect parameter
+  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
+    a required extension (later went back on this)
+  * renamed stext:VkAccelerationStructureBuildOffsetInfoKHR to
+    slink:VkAccelerationStructureBuildRangeInfoKHR
+  ** renamed the pname:ppOffsetInfos parameter of
+     flink:vkCmdBuildAccelerationStructuresKHR to pname:ppBuildRangeInfos
+  * Re-unify geometry description between build and create
+  ** remove stext:VkAccelerationStructureCreateGeometryTypeInfoKHR and
+     etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
+  ** added stext:VkAccelerationStructureCreateSizeInfoKHR structure (later
+     removed)
+  ** change type of the pname:pGeometryInfos member of
+     slink:VkAccelerationStructureCreateInfoKHR from
+     stext:VkAccelerationStructureCreateGeometryTypeInfoKHR to
+     slink:VkAccelerationStructureGeometryKHR (later removed)
+  ** added pname:pCreateSizeInfos member to
+     slink:VkAccelerationStructureCreateInfoKHR (later removed)
+  * Fix ppGeometries ambiguity, add pGeometries
+  ** remove pname:geometryArrayOfPointers member of
+     VkAccelerationStructureBuildGeometryInfoKHR
+  ** disambiguate two meanings of pname:ppGeometries by explicitly adding
+     pname:pGeometries to the
+     slink:VkAccelerationStructureBuildGeometryInfoKHR structure and require
+     one of them be `NULL`
+  * added <<features-nullDescriptor, pname:nullDescriptor>> support for
+    acceleration structures
+  * changed the pname:update member of
+    slink:VkAccelerationStructureBuildGeometryInfoKHR from a bool to the
+    pname:mode elink:VkBuildAccelerationStructureModeKHR enum which allows
+    future extensibility in update types
+  * Clarify deferred host ops for pipeline creation
+  ** slink:VkDeferredOperationKHR is now a top-level parameter for
+     flink:vkBuildAccelerationStructuresKHR,
+     flink:vkCreateRayTracingPipelinesKHR,
+     flink:vkCopyAccelerationStructureToMemoryKHR,
+     flink:vkCopyAccelerationStructureKHR, and
+     flink:vkCopyMemoryToAccelerationStructureKHR
+  ** removed stext:VkDeferredOperationInfoKHR structure
+  ** change deferred host creation/return parameter behavior such that the
+     implementation can modify such parameters until the deferred host
+     operation completes
+  ** `apiext:VK_KHR_deferred_host_operations` is required again
+  * Change acceleration structure build to always be sized
+  ** de-alias ename:VkAccelerationStructureMemoryRequirementsTypeNV and
+     etext:VkAccelerationStructureMemoryRequirementsTypeKHR, and remove
+     etext:VkAccelerationStructureMemoryRequirementsTypeKHR
+  ** add flink:vkGetAccelerationStructureBuildSizesKHR command and
+     slink:VkAccelerationStructureBuildSizesInfoKHR structure and
+     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
+     enum to query sizes for acceleration structures and scratch storage
+  ** move size queries for scratch space to
+     flink:vkGetAccelerationStructureBuildSizesKHR
+  ** remove pname:compactedSize, pname:buildFlags, pname:maxGeometryCount,
+     pname:pGeometryInfos, pname:pCreateSizeInfos members of
+     slink:VkAccelerationStructureCreateInfoKHR and add the pname:size
+     member
+  ** add pname:maxVertex member to
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR structure
+  ** remove stext:VkAccelerationStructureCreateSizeInfoKHR structure
+--
+
+(4) What are the changes between the internal provisional
+(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
+v11) release?
+--
+  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
+    flexibility and decoupling ray query support from ray pipelines:
+  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
+     operations)
+  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
+     shader stages)
+  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
+  * clarify buffer usage flags for ray tracing
+  ** ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV is left alone in
+     `apiext:VK_NV_ray_tracing` (required on pname:scratch and
+     pname:instanceData)
+  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
+     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV in
+     `apiext:VK_KHR_ray_tracing_pipeline` and is required on shader binding
+     table buffers
+  ** ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
+     is added in `apiext:VK_KHR_acceleration_structure` for all vertex,
+     index, transform, aabb, and instance buffer data referenced by device
+     build commands
+  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used for pname:scratchData
+  * add max primitive counts (pname:ppMaxPrimitiveCounts) to
+    flink:vkCmdBuildAccelerationStructuresIndirectKHR
+  * Allocate acceleration structures from stext:VkBuffers and add a mode to
+    constrain the device address
+  ** de-alias sname:VkBindAccelerationStructureMemoryInfoNV and
+     fname:vkBindAccelerationStructureMemoryNV, and remove
+     stext:VkBindAccelerationStructureMemoryInfoKHR,
+     stext:VkAccelerationStructureMemoryRequirementsInfoKHR, and
+     ftext:vkGetAccelerationStructureMemoryRequirementsKHR
+  ** acceleration structures now take a slink:VkBuffer and offset at
+     creation time for memory placement
+  ** add a new ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
+     buffer usage for such buffers
+  ** add a new ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR acceleration
+     structure type for layering
+  * move ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum instead of being
+    added via extension
+  * make build commands more consistent - all now build multiple
+    acceleration structures and are named plurally
+    (flink:vkCmdBuildAccelerationStructuresIndirectKHR,
+    flink:vkCmdBuildAccelerationStructuresKHR,
+    flink:vkBuildAccelerationStructuresKHR)
+  * add interactions with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT for
+    acceleration structures, including a new feature
+    (pname:descriptorBindingAccelerationStructureUpdateAfterBind) and 3 new
+    properties (pname:maxPerStageDescriptorAccelerationStructures,
+    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures,
+    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures)
+  * extension is no longer provisional
+  * define synchronization requirements for builds, traces, and copies
+  * define synchronization requirements for AS build inputs and indirect
+    build buffer
+--
+
+(5) What is ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR for?
+--
+*RESOLVED*: It is primarily intended for API layering.
+In DXR, the acceleration structure is basically just a buffer in a special
+layout, and you do not know at creation time whether it will be used as a
+top or bottom level acceleration structure.
+We thus added a generic acceleration structure type whose type is unknown at
+creation time, but is specified at build time instead.
+Applications which are written directly for Vulkan should not use it.
+--
+
+=== Version History
+  * Revision 1, 2019-12-05 (Members of the Vulkan Ray Tracing TSG)
+  ** Internal revisions (forked from VK_NV_ray_tracing)
+  * Revision 2, 2019-12-20 (Daniel Koch, Eric Werness)
+  ** Add const version of DeviceOrHostAddress (!3515)
+  ** Add VU to clarify that only handles in the current pipeline are valid
+     (!3518)
+  ** Restore some missing VUs and add in-place update language (#1902,
+     !3522)
+  ** rename VkAccelerationStructureInstanceKHR member from
+     accelerationStructure to accelerationStructureReference to better match
+     its type (!3523)
+  ** Allow VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS for pipeline creation if
+     shader group handles cannot be reused (!3523)
+  ** update documentation for the VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
+     error code and add missing documentation for new return codes from
+     VK_KHR_deferred_host_operations (!3523)
+  ** list new query types for VK_KHR_ray_tracing (!3523)
+  ** Fix VU statements for VkAccelerationStructureGeometryKHR referring to
+     correct union members and update to use more current wording (!3523)
+  * Revision 3, 2020-01-10 (Daniel Koch, Jon Leech, Christoph Kubisch)
+  ** Fix 'instance of' and 'that/which contains/defines' markup issues
+     (!3528)
+  ** factor out VK_KHR_pipeline_library as stand-alone extension (!3540)
+  ** Resolve Vulkan-hpp issues (!3543)
+  *** add missing require for VkGeometryInstanceFlagsKHR
+  *** de-alias VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV since
+      the KHR structure is no longer equivalent
+  *** add len to pDataSize attribute for
+      vkWriteAccelerationStructuresPropertiesKHR
+  * Revision 4, 2020-01-23 (Daniel Koch, Eric Werness)
+  ** Improve vkWriteAccelerationStructuresPropertiesKHR, add return value
+     and VUs (#1947)
+  ** Clarify language to allow multiple raygen shaders (#1959)
+  ** Various editorial feedback (!3556)
+  ** Add language to help deal with looped self-intersecting fans (#1901)
+  ** Change vkCmdTraceRays{,Indirect}KHR args to pointers (!3559)
+  ** Add scratch address validation language (#1941, !3551)
+  ** Fix definition and add hierarchy information for shader call scope
+     (#1977, !3571)
+  * Revision 5, 2020-02-04 (Eric Werness, Jeff Bolz, Daniel Koch)
+  ** remove vestigial accelerationStructureUUID (!3582)
+  ** update definition of repack instructions and improve memory model
+     interactions (#1910, #1913, !3584)
+  ** Fix wrong sType for VkPhysicalDeviceRayTracingFeaturesKHR (#1988)
+  ** Use provisional SPIR-V capabilities (#1987)
+  ** require rayTraversalPrimitiveCulling if rayQuery is supported (#1927)
+  ** Miss shaders do not have object parameters (!3592)
+  ** Fix missing required types in XML (!3592)
+  ** clarify matching conditions for update (!3592)
+  ** add goal that host and device builds be similar (!3592)
+  ** clarify that pname:maxPrimitiveCount limit should apply to triangles
+     and AABBs (!3592)
+  ** Require alignment for instance arrayOfPointers (!3592)
+  ** Zero is a valid value for instance flags (!3592)
+  ** Add some alignment VUs that got lost in refactoring (!3592)
+  ** Recommend TMin epsilon rather than culling (!3592)
+  ** Get angle from dot product not cross product (!3592)
+  ** Clarify that AH can access the payload and attributes (!3592)
+  ** Match DXR behavior for inactive primitive definition (!3592)
+  ** Use a more generic term than degenerate for inactive to avoid confusion
+     (!3592)
+  * Revision 6, 2020-02-20 (Daniel Koch)
+  ** fix some dangling NV references (#1996)
+  ** rename VkCmdTraceRaysIndirectCommandKHR to
+     VkTraceRaysIndirectCommandKHR (!3607)
+  ** update contributor list (!3611)
+  ** use uint64_t instead of VkAccelerationStructureReferenceKHR in
+     VkAccelerationStructureInstanceKHR (#2004)
+  * Revision 7, 2020-02-28 (Tobias Hector)
+  ** remove HitTKHR SPIR-V builtin (spirv/spirv-extensions#7)
+  * Revision 8, 2020-03-06 (Tobias Hector, Dae Kim, Daniel Koch, Jeff Bolz,
+    Eric Werness)
+  ** explicitly state that Tmax is updated when new closest intersection is
+     accepted (#2020,!3536)
+  ** Made references to min and max t values consistent (!3644)
+  ** finish enumerating differences relative to VK_NV_ray_tracing in issues
+     (1) and (2) (#1974,!3642)
+  ** fix formatting in some math equations (!3642)
+  ** Restrict the Hit Kind operand of code:OpReportIntersectionKHR to 7-bits
+     (spirv/spirv-extensions#8,!3646)
+  ** Say ray tracing 'should:' be watertight (#2008,!3631)
+  ** Clarify memory requirements for ray tracing buffers (#2005,!3649)
+  ** Add callable size limits (#1997,!3652)
+  * Revision 9, 2020-04-15 (Eric Werness, Daniel Koch, Tobias Hector, Joshua
+    Barczak)
+  ** Add geometry flags to acceleration structure creation (!3672)
+  ** add build scratch memory alignment
+     (minAccelerationStructureScratchOffsetAlignment) (#2065,!3725)
+  ** fix naming and return enum from
+     vkGetDeviceAccelerationStructureCompatibilityKHR (#2051,!3726)
+  ** require SPIR-V 1.4 (#2096,!3777)
+  ** added creation time capture/replay flags (#2104,!3774)
+  ** require Vulkan 1.1 (#2133,!3806)
+  ** use device addresses instead of VkBuffers for ray tracing commands
+     (#2074,!3815)
+  ** add interactions with Vulkan 1.2 and VK_KHR_vulkan_memory_model
+     (#2133,!3830)
+  ** make VK_KHR_pipeline_library an interaction instead of required
+     (#2045,#2108,!3830)
+  ** make VK_KHR_deferred_host_operations an interaction instead of required
+     (#2045,!3830)
+  ** removed maxCallableSize and added explicit stack size management for
+     ray pipelines (#1997,!3817,!3772,!3844)
+  ** improved documentation for VkAccelerationStructureVersionInfoKHR
+     (#2135,3835)
+  ** rename VkAccelerationStructureBuildOffsetInfoKHR to
+     VkAccelerationStructureBuildRangeInfoKHR (#2058,!3754)
+  ** Re-unify geometry description between build and create (!3754)
+  ** Fix ppGeometries ambiguity, add pGeometries (#2032,!3811)
+  ** add interactions with VK_EXT_robustness2 and allow nullDescriptor
+     support for acceleration structures (#1920,!3848)
+  ** added future extensibility for AS updates (#2114,!3849)
+  ** Fix VU for dispatchrays and add a limit on the size of the full grid
+     (#2160,!3851)
+  ** Add shaderGroupHandleAlignment property (#2180,!3875)
+  ** Clarify deferred host ops for pipeline creation (#2067,!3813)
+  ** Change acceleration structure build to always be sized
+     (#2131,#2197,#2198,!3854,!3883,!3880)
+  * Revision 10, 2020-07-03 (Mathieu Robart, Daniel Koch, Eric Werness,
+    Tobias Hector)
+  ** Decomposition of the specification, from VK_KHR_ray_tracing to
+     VK_KHR_acceleration_structure (#1918,!3912)
+  ** clarify buffer usage flags for ray tracing (#2181,!3939)
+  ** add max primitive counts to build indirect command (#2233,!3944)
+  ** Allocate acceleration structures from VkBuffers and add a mode to
+     constrain the device address (#2131,!3936)
+  ** Move VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum (#2243,!3952)
+  ** make build commands more consistent (#2247,!3958)
+  ** add interactions with UPDATE_AFTER_BIND (#2128,!3986)
+  ** correct and expand build command VUs (!4020)
+  ** fix copy command VUs (!4018)
+  ** added various alignment requirements (#2229,!3943)
+  ** fix valid usage for arrays of geometryCount items (#2198,!4010)
+  ** define what is allowed to change on RTAS updates and relevant VUs
+     (#2177,!3961)
+  * Revision 11, 2020-11-12 (Eric Werness, Josh Barczak, Daniel Koch, Tobias
+    Hector)
+  ** de-alias NV and KHR acceleration structure types and associated
+     commands (#2271,!4035)
+  ** specify alignment for host copy commands (#2273,!4037)
+  ** document
+     ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+  ** specify that acceleration structures are non-linear (#2289,!4068)
+  ** add several missing VUs for strides, vertexFormat, and indexType
+     (#2315,!4069)
+  ** restore VUs for VkAccelerationStructureBuildGeometryInfoKHR
+     (#2337,!4098)
+  ** ban multi-instance memory for host operations (#2324,!4102)
+  ** allow dstAccelerationStructure to be null for
+     vkGetAccelerationStructureBuildSizesKHR (#2330,!4111)
+  ** more build VU cleanup (#2138,#4130)
+  ** specify host endianness for AS serialization (#2261,!4136)
+  ** add invertible transform matrix VU (#1710,!4140)
+  ** require geometryCount to be 1 for TLAS builds (!4145)
+  ** improved validity conditions for build addresses (#4142)
+  ** add single statement SPIR-V VUs, build limit VUs (!4158)
+  ** document limits for vertex and aabb strides (#2390,!4184)
+  ** specify that
+     ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR applies to
+     AS copies (#2382,#4173)
+  ** define sync for AS build inputs and indirect buffer (#2407,!4208)
+  * Revision 12, 2021-08-06 (Samuel Bourasseau)
+  ** rename VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
+     VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR (keep previous as
+     alias).
+  ** Clarify description and add note.
+  * Revision 13, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_android_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_android_surface.adoc
new file mode 100644
index 0000000..8ed4e19
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_android_surface.adoc
@@ -0,0 +1,74 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_android_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-01-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Faith Ekstrand, Intel
+  - Ian Elliott, LunarG
+  - Courtney Goeltzenleuchter, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Antoine Labour, Google
+  - Jon Leech, Khronos
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Ray Smith, ARM
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+
+=== Description
+
+The `VK_KHR_android_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to an
+basetype:ANativeWindow, Android's native surface type.
+The basetype:ANativeWindow represents the producer endpoint of any buffer
+queue, regardless of consumer endpoint.
+Common consumer endpoints for code:ANativeWindows are the system window
+compositor, video encoders, and application-specific compositors importing
+the images through a code:SurfaceTexture.
+
+include::{generated}/interfaces/VK_KHR_android_surface.adoc[]
+
+=== Issues
+
+1) Does Android need a way to query for compatibility between a particular
+physical device (and queue family?) and a specific Android display?
+
+*RESOLVED*: No.
+Currently on Android, any physical device is expected to be able to present
+to the system compositor, and all queue families must support the necessary
+image layout transitions and synchronization operations.
+
+=== Version History
+
+  * Revision 1, 2015-09-23 (Jesse Hall)
+  ** Initial draft.
+
+  * Revision 2, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_android_surface to VK_KHR_android_surface.
+
+  * Revision 3, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to surface creation function.
+
+  * Revision 4, 2015-11-10 (Jesse Hall)
+  ** Removed VK_ERROR_INVALID_ANDROID_WINDOW_KHR.
+
+  * Revision 5, 2015-11-28 (Daniel Rakos)
+  ** Updated the surface create function to take a pCreateInfo structure.
+
+  * Revision 6, 2016-01-14 (James Jones)
+  ** Moved VK_ERROR_NATIVE_WINDOW_IN_USE_KHR from the VK_KHR_android_surface
+     to the VK_KHR_surface extension.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_bind_memory2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_bind_memory2.adoc
new file mode 100644
index 0000000..ef8ecae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_bind_memory2.adoc
@@ -0,0 +1,41 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_bind_memory2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Tobias Hector, Imagination Technologies
+
+=== Description
+
+This extension provides versions of flink:vkBindBufferMemory and
+flink:vkBindImageMemory that allow multiple bindings to be performed at
+once, and are extensible.
+
+This extension also introduces ename:VK_IMAGE_CREATE_ALIAS_BIT_KHR, which
+allows "`identical`" images that alias the same memory to interpret the
+contents consistently, even across image layout changes.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_bind_memory2.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-05-19 (Tobias Hector)
+  ** Pulled bind memory functions into their own extension
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_buffer_device_address.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_buffer_device_address.adoc
new file mode 100644
index 0000000..0bd4e9a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_buffer_device_address.adoc
@@ -0,0 +1,109 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_buffer_device_address.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-24
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_physical_storage_buffer.html[`SPV_KHR_physical_storage_buffer`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
+    and
+    {GLSLregistry}/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
+    and
+    {GLSLregistry}/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, AMD
+  - Tobias Hector, AMD
+  - Faith Ekstrand, Intel
+  - Baldur Karlsson, Valve
+  - Jan-Harald Fredriksen, Arm
+
+=== Description
+
+This extension allows the application to query a 64-bit buffer device
+address value for a buffer, which can be used to access the buffer memory
+via the code:PhysicalStorageBuffer storage class in the
+{GLSLregistry}/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
+GLSL extension and
+{spirv}/KHR/SPV_KHR_physical_storage_buffer.html[`SPV_KHR_physical_storage_buffer`]
+SPIR-V extension.
+
+Another way to describe this extension is that it adds "`pointers to buffer
+memory in shaders`".
+By calling flink:vkGetBufferDeviceAddress with a sname:VkBuffer, it will
+return a basetype:VkDeviceAddress value which represents the address of the
+start of the buffer.
+
+flink:vkGetBufferOpaqueCaptureAddress and
+flink:vkGetDeviceMemoryOpaqueCaptureAddress allow opaque addresses for
+buffers and memory objects to be queried for the current process.
+A trace capture and replay tool can then supply these addresses to be used
+at replay time to match the addresses used when the trace was captured.
+To enable tools to insert these queries, new memory allocation flags must be
+specified for memory objects that will be bound to buffers accessed via the
+code:PhysicalStorageBuffer storage class.
+**Note that this mechanism is intended only to support capture/replay tools,
+and is not recommended for use in other applications.**
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:bufferDeviceAddress feature is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Promotion to Vulkan 1.3
+
+Support for the code:bufferDeviceAddress feature is mandatory in Vulkan 1.3,
+regardless of whether this extension is supported.
+
+include::{generated}/interfaces/VK_KHR_buffer_device_address.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-PhysicalStorageBufferAddresses,
+    code:PhysicalStorageBufferAddresses>>
+
+ifdef::isrefpage[]
+
+=== Examples
+
+There are various use cases this extensions is designed for.
+It is required for ray tracing, useful for DX12 portability, and it allows
+storing buffer addresses in memory (enabling creating more complex data
+structures).
+
+This extension can also be used to hardcode a dedicated debug channel into
+all shaders without impacting other descriptor limits by querying a buffer
+device address at startup and pushing that into shaders as a run-time
+constant (e.g. specialization constant).
+
+There are examples of usage in the
+{GLSLregistry}/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
+spec for how to use this in a high-level shading language such as GLSL.
+The
+{GLSLregistry}/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
+and
+{GLSLregistry}/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
+extensions were added to help cover a few edge cases missed by the original
+`GL_EXT_buffer_reference`.
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2019-06-24 (Jan-Harald Fredriksen)
+  ** Internal revisions based on VK_EXT_buffer_device_address
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_cooperative_matrix.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_cooperative_matrix.adoc
new file mode 100644
index 0000000..eb709cd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_cooperative_matrix.adoc
@@ -0,0 +1,53 @@
+// Copyright (c) 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_cooperative_matrix.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-05-03
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_cooperative_matrix.html[`SPV_KHR_cooperative_matrix`]
+  - This extension provides API support for
+    {GLSLregistry}/khr/GLSL_KHR_cooperative_matrix.txt[`GLSL_KHR_cooperative_matrix`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Markus Tavenrath, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Kevin Petit, Arm Ltd.
+  - Boris Zanin, AMD
+
+=== Description
+
+This extension adds support for using cooperative matrix types in SPIR-V.
+Cooperative matrix types are medium-sized matrices that are primarily
+supported in compute shaders, where the storage for the matrix is spread
+across all invocations in some scope (usually a subgroup) and those
+invocations cooperate to efficiently perform matrix multiplies.
+
+Cooperative matrix types are defined by the
+{spirv}/KHR/SPV_KHR_cooperative_matrix.html[`SPV_KHR_cooperative_matrix`]
+SPIR-V extension and can be used with the
+{GLSLregistry}/khr/GLSL_KHR_cooperative_matrix.txt[`GLSL_KHR_cooperative_matrix`]
+GLSL extension.
+
+This extension includes support for enumerating the matrix types and
+dimensions that are supported by the implementation.
+
+include::{generated}/interfaces/VK_KHR_cooperative_matrix.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-CooperativeMatrixKHR,CooperativeMatrixKHR>>
+
+=== Issues
+
+=== Version History
+
+  * Revision 2, 2023-05-03 (Kevin Petit)
+  ** First KHR revision
+  * Revision 1, 2019-02-05 (Jeff Bolz)
+  ** NVIDIA vendor extension
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_copy_commands2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_copy_commands2.adoc
new file mode 100644
index 0000000..c8d634b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_copy_commands2.adoc
@@ -0,0 +1,50 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_copy_commands2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-06
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*Interactions and External Dependencies*::
+  - None
+*Contributors*::
+  - Jeff Leger, Qualcomm
+  - Tobias Hector, AMD
+  - Jan-Harald Fredriksen, ARM
+  - Tom Olson, ARM
+
+=== Description
+
+This extension provides extensible versions of the Vulkan buffer and image
+copy commands.
+The new commands are functionally identical to the core commands, except
+that their copy parameters are specified using extensible structures that
+can be used to pass extension-specific information.
+
+The following extensible copy commands are introduced with this extension:
+flink:vkCmdCopyBuffer2KHR, flink:vkCmdCopyImage2KHR,
+flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyImageToBuffer2KHR,
+flink:vkCmdBlitImage2KHR, and flink:vkCmdResolveImage2KHR.
+Each command contains an stext:*Info2KHR structure parameter that includes
+ptext:sType/ptext:pNext members.
+Lower level structures describing each region to be copied are also extended
+with ptext:sType/ptext:pNext members.
+
+include::{generated}/interfaces/VK_KHR_copy_commands2.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2020-07-06 (Jeff Leger)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_create_renderpass2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_create_renderpass2.adoc
new file mode 100644
index 0000000..62c87c2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_create_renderpass2.adoc
@@ -0,0 +1,58 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_create_renderpass2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-02-07
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Tobias Hector
+  - Jeff Bolz
+
+=== Description
+
+This extension provides a new entry point to create render passes in a way
+that can be easily extended by other extensions through the substructures of
+render pass creation.
+The Vulkan 1.0 render pass creation sub-structures do not include
+ptext:sType/ptext:pNext members.
+Additionally, the render pass begin/next/end commands have been augmented
+with new extensible structures for passing additional subpass information.
+
+The slink:VkRenderPassMultiviewCreateInfo and
+slink:VkInputAttachmentAspectReference structures that extended the original
+slink:VkRenderPassCreateInfo are not accepted into the new creation
+functions, and instead their parameters are folded into this extension as
+follows:
+
+  * Elements of slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks are
+    now specified in slink:VkSubpassDescription2KHR::pname:viewMask.
+  * Elements of slink:VkRenderPassMultiviewCreateInfo::pname:pViewOffsets
+    are now specified in slink:VkSubpassDependency2KHR::pname:viewOffset.
+  * slink:VkRenderPassMultiviewCreateInfo::pname:correlationMaskCount and
+    slink:VkRenderPassMultiviewCreateInfo::pname:pCorrelationMasks are
+    directly specified in slink:VkRenderPassCreateInfo2KHR.
+  * slink:VkInputAttachmentAspectReference::pname:aspectMask is now
+    specified in the relevant input attachment reference in
+    slink:VkAttachmentReference2KHR::pname:aspectMask
+
+The details of these mappings are explained fully in the new structures.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_create_renderpass2.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-02-07 (Tobias Hector)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dedicated_allocation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dedicated_allocation.adoc
new file mode 100644
index 0000000..1bcbdaf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dedicated_allocation.adoc
@@ -0,0 +1,146 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_dedicated_allocation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension enables resources to be bound to a dedicated allocation,
+rather than suballocated.
+For any particular resource, applications can: query whether a dedicated
+allocation is recommended, in which case using a dedicated allocation may:
+improve the performance of access to that resource.
+Normal device memory allocations must support multiple resources per
+allocation, memory aliasing and sparse binding, which could interfere with
+some optimizations.
+Applications should query the implementation for when a dedicated allocation
+may: be beneficial by adding a sname:VkMemoryDedicatedRequirementsKHR
+structure to the pname:pNext chain of the sname:VkMemoryRequirements2
+structure passed as the pname:pMemoryRequirements parameter of a call to
+fname:vkGetBufferMemoryRequirements2 or fname:vkGetImageMemoryRequirements2.
+Certain external handle types and external images or buffers may: also
+depend on dedicated allocations on implementations that associate image or
+buffer metadata with OS-level memory objects.
+
+This extension adds a two small structures to memory requirements querying
+and memory allocation: a new structure that flags whether an image/buffer
+should have a dedicated allocation, and a structure indicating the image or
+buffer that an allocation will be bound to.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_dedicated_allocation.adoc[]
+
+=== Examples
+
+[source,c++]
+----
+    // Create an image with a dedicated allocation based on the
+    // implementation's preference
+
+    VkImageCreateInfo imageCreateInfo =
+    {
+        // Image creation parameters
+    };
+
+    VkImage image;
+    VkResult result = vkCreateImage(
+        device,
+        &imageCreateInfo,
+        NULL,               // pAllocator
+        &image);
+
+    VkMemoryDedicatedRequirementsKHR dedicatedRequirements =
+    {
+        .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
+        .pNext = NULL,
+    };
+
+    VkMemoryRequirements2 memoryRequirements =
+    {
+        .sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
+        .pNext = &dedicatedRequirements,
+    };
+
+    const VkImageMemoryRequirementsInfo2 imageRequirementsInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
+        .pNext = NULL,
+        .image = image
+    };
+
+    vkGetImageMemoryRequirements2(
+        device,
+        &imageRequirementsInfo,
+        &memoryRequirements);
+
+    if (dedicatedRequirements.prefersDedicatedAllocation) {
+        // Allocate memory with VkMemoryDedicatedAllocateInfoKHR::image
+        // pointing to the image we are allocating the memory for
+
+        VkMemoryDedicatedAllocateInfoKHR dedicatedInfo =
+        {
+            .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
+            .pNext = NULL,
+            .image = image,
+            .buffer = VK_NULL_HANDLE,
+        };
+
+        VkMemoryAllocateInfo memoryAllocateInfo =
+        {
+            .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+            .pNext = &dedicatedInfo,
+            .allocationSize = memoryRequirements.size,
+            .memoryTypeIndex = FindMemoryTypeIndex(memoryRequirements.memoryTypeBits),
+        };
+
+        VkDeviceMemory memory;
+        vkAllocateMemory(
+            device,
+            &memoryAllocateInfo,
+            NULL,               // pAllocator
+            &memory);
+
+        // Bind the image to the memory
+
+        vkBindImageMemory(
+            device,
+            image,
+            memory,
+            0);
+    } else {
+        // Take the normal memory sub-allocation path
+    }
+----
+
+=== Version History
+
+  * Revision 1, 2017-02-27 (James Jones)
+  ** Copy content from VK_NV_dedicated_allocation
+  ** Add some references to external object interactions to the overview.
+
+  * Revision 2, 2017-03-27 (Faith Ekstrand)
+  ** Rework the extension to be query-based
+
+  * Revision 3, 2017-07-31 (Faith Ekstrand)
+  ** Clarify that memory objects allocated with
+     VkMemoryDedicatedAllocateInfoKHR can only have the specified resource
+     bound and no others.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_deferred_host_operations.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_deferred_host_operations.adoc
new file mode 100644
index 0000000..2008a8d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_deferred_host_operations.adoc
@@ -0,0 +1,189 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_deferred_host_operations.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-12
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Barczak, Intel
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Slawek Grajewski, Intel
+  - Tobias Hector, AMD
+  - Yuriy O'Donnell, Epic
+  - Eric Werness, NVIDIA
+  - Baldur Karlsson, Valve
+  - Jesse Barker, Unity
+  - Contributors to VK_KHR_acceleration_structure,
+    VK_KHR_ray_tracing_pipeline
+
+=== Description
+
+The `apiext:VK_KHR_deferred_host_operations` extension defines the
+infrastructure and usage patterns for deferrable commands, but does not
+specify any commands as deferrable.
+This is left to additional dependent extensions.
+Commands must: not be deferred unless the deferral is specifically allowed
+by another extension which depends on
+`apiext:VK_KHR_deferred_host_operations`.
+
+include::{generated}/interfaces/VK_KHR_deferred_host_operations.adoc[]
+
+=== Code Examples
+
+The following examples will illustrate the concept of deferrable operations
+using a hypothetical example.
+The command ftext:vkDoSomethingExpensive denotes a deferrable command.
+
+The following example illustrates how a vulkan application might request
+deferral of an expensive operation:
+
+[source,cpp]
+----
+// create a deferred operation
+VkDeferredOperationKHR hOp;
+VkResult result = vkCreateDeferredOperationKHR(device, pCallbacks, &hOp);
+assert(result == VK_SUCCESS);
+
+result = vkDoSomethingExpensive(device, hOp, ...);
+assert( result == VK_OPERATION_DEFERRED_KHR );
+
+// operation was deferred.  Execute it asynchronously
+std::async::launch(
+    [ hOp ] ( )
+    {
+        vkDeferredOperationJoinKHR(device, hOp);
+
+        result = vkGetDeferredOperationResultKHR(device, hOp);
+
+        // deferred operation is now complete.  'result' indicates success or failure
+
+        vkDestroyDeferredOperationKHR(device, hOp, pCallbacks);
+    }
+);
+
+----
+
+The following example illustrates extracting concurrency from a single
+deferred operation:
+
+[source,cpp]
+----
+
+// create a deferred operation
+VkDeferredOperationKHR hOp;
+VkResult result = vkCreateDeferredOperationKHR(device, pCallbacks, &hOp);
+assert(result == VK_SUCCESS);
+
+result = vkDoSomethingExpensive(device, hOp, ...);
+assert( result == VK_OPERATION_DEFERRED_KHR );
+
+// Query the maximum amount of concurrency and clamp to the desired maximum
+uint32_t numLaunches = std::min(vkGetDeferredOperationMaxConcurrencyKHR(device, hOp), maxThreads);
+
+std::vector<std::future<void> > joins;
+
+for (uint32_t i = 0; i < numLaunches; i++) {
+  joins.emplace_back(std::async::launch(
+    [ hOp ] ( )
+    {
+        vkDeferredOperationJoinKHR(device, hOp);
+                // in a job system, a return of VK_THREAD_IDLE_KHR should queue another
+                // job, but it is not functionally required
+    }
+  ));
+}
+
+for (auto &f : joins) {
+  f.get();
+}
+
+result = vkGetDeferredOperationResultKHR(device, hOp);
+
+// deferred operation is now complete.  'result' indicates success or failure
+
+vkDestroyDeferredOperationKHR(device, hOp, pCallbacks);
+
+----
+
+
+The following example shows a subroutine which guarantees completion of a
+deferred operation, in the presence of multiple worker threads, and returns
+the result of the operation.
+
+[source,cpp]
+----
+
+VkResult FinishDeferredOperation(VkDeferredOperationKHR hOp)
+{
+    // Attempt to join the operation until the implementation indicates that we should stop
+
+    VkResult result = vkDeferredOperationJoinKHR(device, hOp);
+    while( result == VK_THREAD_IDLE_KHR )
+    {
+        std::this_thread::yield();
+        result = vkDeferredOperationJoinKHR(device, hOp);
+    }
+
+    switch( result )
+    {
+    case VK_SUCCESS:
+        {
+            // deferred operation has finished.  Query its result
+            result = vkGetDeferredOperationResultKHR(device, hOp);
+        }
+        break;
+
+    case VK_THREAD_DONE_KHR:
+        {
+            // deferred operation is being wrapped up by another thread
+            //  wait for that thread to finish
+            do
+            {
+                std::this_thread::yield();
+                result = vkGetDeferredOperationResultKHR(device, hOp);
+            } while( result == VK_NOT_READY );
+        }
+        break;
+
+    default:
+        assert(false); // other conditions are illegal.
+        break;
+    }
+
+    return result;
+}
+----
+
+=== Issues
+
+. Should this extension have a VkPhysicalDevice*FeaturesKHR structure?
+
+*RESOLVED*: No.
+This extension does not add any functionality on its own and requires a
+dependent extension to actually enable functionality and thus there is no
+value in adding a feature structure.
+If necessary, any dependent extension could add a feature boolean if it
+wanted to indicate that it is adding optional deferral support.
+
+=== Version History
+
+  * Revision 1, 2019-12-05 (Josh Barczak, Daniel Koch)
+  ** Initial draft.
+  * Revision 2, 2020-03-06 (Daniel Koch, Tobias Hector)
+  ** Add missing VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR enum
+  ** fix sample code
+  ** Clarified deferred operation parameter lifetimes (#2018,!3647)
+  * Revision 3, 2020-05-15 (Josh Barczak)
+  ** Clarify behavior of vkGetDeferredOperationMaxConcurrencyKHR, allowing
+     it to return 0 if the operation is complete (#2036,!3850)
+  * Revision 4, 2020-11-12 (Tobias Hector, Daniel Koch)
+  ** Remove VkDeferredOperationInfoKHR and change return value semantics
+     when deferred host operations are in use (#2067,3813)
+  ** clarify return value of vkGetDeferredOperationResultKHR (#2339,!4110)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_depth_stencil_resolve.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_depth_stencil_resolve.adoc
new file mode 100644
index 0000000..0b9352e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_depth_stencil_resolve.adoc
@@ -0,0 +1,73 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_depth_stencil_resolve.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-04-09
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Jan-Harald Fredriksen, Arm
+  - Andrew Garrard, Samsung Electronics
+  - Soowan Park, Samsung Electronics
+  - Jeff Bolz, NVIDIA
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension adds support for automatically resolving multisampled
+depth/stencil attachments in a subpass in a similar manner as for color
+attachments.
+
+Multisampled color attachments can be resolved at the end of a subpass by
+specifying pname:pResolveAttachments entries corresponding to the
+pname:pColorAttachments array entries.
+This does not allow for a way to map the resolve attachments to the
+depth/stencil attachment.
+The flink:vkCmdResolveImage command does not allow for depth/stencil images.
+While there are other ways to resolve the depth/stencil attachment, they can
+give sub-optimal performance.
+Extending the sname:VkSubpassDescription2 in this extension allows an
+application to add a pname:pDepthStencilResolveAttachment, that is similar
+to the color pname:pResolveAttachments, that the
+pname:pDepthStencilAttachment can be resolved into.
+
+Depth and stencil samples are resolved to a single value based on the
+resolve mode.
+The set of possible resolve modes is defined in the
+elink:VkResolveModeFlagBits enum.
+The ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT mode is the only mode that is
+required of all implementations (that support the extension or support
+Vulkan 1.2 or higher).
+Some implementations may also support averaging (the same as color sample
+resolve) or taking the minimum or maximum sample, which may be more suitable
+for depth/stencil resolve.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_depth_stencil_resolve.adoc[]
+
+ifdef::isrefpage[]
+
+=== Additional Resources
+
+  * GDC 2019
+  ** https://www.youtube.com/watch?v=GnnEmJFFC7Q&feature=youtu.be&t=1983[`video`]
+  ** https://www.khronos.org/assets/uploads/developers/library/2019-gdc/Vulkan-Depth-Stencil-Resolve-GDC-Mar19.pdf[`slides`]
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2018-04-09 (Jan-Harald Fredriksen)
+  ** Initial revision
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_descriptor_update_template.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_descriptor_update_template.adoc
new file mode 100644
index 0000000..4fa9b0c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_descriptor_update_template.adoc
@@ -0,0 +1,50 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_descriptor_update_template.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_KHR_push_descriptor`
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Michael Worcester, Imagination Technologies
+
+=== Description
+
+Applications may wish to update a fixed set of descriptors in a large number
+of descriptor sets very frequently, i.e. during initialization phase or if
+it is required to rebuild descriptor sets for each frame.
+For those cases it is also not unlikely that all information required to
+update a single descriptor set is stored in a single struct.
+This extension provides a way to update a fixed set of descriptors in a
+single slink:VkDescriptorSet with a pointer to a user defined data structure
+describing the new descriptors.
+
+=== Promotion to Vulkan 1.1
+
+ifdef::VK_KHR_push_descriptor[]
+flink:vkCmdPushDescriptorSetWithTemplateKHR is included as an interaction
+with `apiext:VK_KHR_push_descriptor`.
+If Vulkan 1.1 and `VK_KHR_push_descriptor` are supported, this is included
+by `apiext:VK_KHR_push_descriptor`.
+endif::VK_KHR_push_descriptor[]
+
+The base functionality in this extension is included in core Vulkan 1.1,
+with the KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_descriptor_update_template.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-01-11 (Markus Tavenrath)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group.adoc
new file mode 100644
index 0000000..01a7363
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group.adoc
@@ -0,0 +1,89 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_device_group.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_device_group.html[`SPV_KHR_device_group`]
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Tobias Hector, Imagination Technologies
+
+=== Description
+
+This extension provides functionality to use a logical device that consists
+of multiple physical devices, as created with the
+`apiext:VK_KHR_device_group_creation` extension.
+A device group can allocate memory across the subdevices, bind memory from
+one subdevice to a resource on another subdevice, record command buffers
+where some work executes on an arbitrary subset of the subdevices, and
+potentially present a swapchain image from one or more subdevices.
+
+=== Promotion to Vulkan 1.1
+
+ifdef::VK_KHR_swapchain[]
+The following enums, types and commands are included as interactions with
+`apiext:VK_KHR_swapchain`:
+
+  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
+  * ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
+  * ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
+  * ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
+  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
+  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
+  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+  * elink:VkDeviceGroupPresentModeFlagBitsKHR
+  * slink:VkDeviceGroupPresentCapabilitiesKHR
+  * slink:VkImageSwapchainCreateInfoKHR
+  * slink:VkBindImageMemorySwapchainInfoKHR
+  * slink:VkAcquireNextImageInfoKHR
+  * slink:VkDeviceGroupPresentInfoKHR
+  * slink:VkDeviceGroupSwapchainCreateInfoKHR
+  * flink:vkGetDeviceGroupPresentCapabilitiesKHR
+  * flink:vkGetDeviceGroupSurfacePresentModesKHR
+  * flink:vkGetPhysicalDevicePresentRectanglesKHR
+  * flink:vkAcquireNextImage2KHR
+
+If Vulkan 1.1 and `apiext:VK_KHR_swapchain` are supported, these are
+included by `VK_KHR_swapchain`.
+endif::VK_KHR_swapchain[]
+
+The base functionality in this extension is included in core Vulkan 1.1,
+with the KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_device_group.adoc[]
+
+=== New Built-in Variables
+
+  * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-DeviceGroup, code:DeviceGroup>>
+
+=== Version History
+
+  * Revision 1, 2016-10-19 (Jeff Bolz)
+  ** Internal revisions
+  * Revision 2, 2017-05-19 (Tobias Hector)
+  ** Removed extended memory bind functions to VK_KHR_bind_memory2, added
+     dependency on that extension, and device-group-specific structs for
+     those functions.
+  * Revision 3, 2017-10-06 (Ian Elliott)
+  ** Corrected Vulkan 1.1 interactions with the WSI extensions.
+     All Vulkan 1.1 WSI interactions are with the VK_KHR_swapchain
+     extension.
+  * Revision 4, 2017-10-10 (Jeff Bolz)
+  ** Rename "`SFR`" bits and structure members to use the phrase "`split
+     instance bind regions`".
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group_creation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group_creation.adoc
new file mode 100644
index 0000000..41c44f9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_device_group_creation.adoc
@@ -0,0 +1,71 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_device_group_creation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-19
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension provides instance-level commands to enumerate groups of
+physical devices, and to create a logical device from a subset of one of
+those groups.
+Such a logical device can then be used with new features in the
+`apiext:VK_KHR_device_group` extension.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_device_group_creation.adoc[]
+
+=== Examples
+
+[source,c++]
+----
+    VkDeviceCreateInfo devCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO };
+    // (not shown) fill out devCreateInfo as usual.
+    uint32_t deviceGroupCount = 0;
+    VkPhysicalDeviceGroupPropertiesKHR *props = NULL;
+
+    // Query the number of device groups
+    vkEnumeratePhysicalDeviceGroupsKHR(g_vkInstance, &deviceGroupCount, NULL);
+
+    // Allocate and initialize structures to query the device groups
+    props = (VkPhysicalDeviceGroupPropertiesKHR *)malloc(deviceGroupCount*sizeof(VkPhysicalDeviceGroupPropertiesKHR));
+    for (i = 0; i < deviceGroupCount; ++i) {
+        props[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR;
+        props[i].pNext = NULL;
+    }
+    vkEnumeratePhysicalDeviceGroupsKHR(g_vkInstance, &deviceGroupCount, props);
+
+    // If the first device group has more than one physical device. create
+    // a logical device using all of the physical devices.
+    VkDeviceGroupDeviceCreateInfoKHR deviceGroupInfo = { VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR };
+    if (props[0].physicalDeviceCount > 1) {
+        deviceGroupInfo.physicalDeviceCount = props[0].physicalDeviceCount;
+        deviceGroupInfo.pPhysicalDevices = props[0].physicalDevices;
+        devCreateInfo.pNext = &deviceGroupInfo;
+    }
+
+    vkCreateDevice(props[0].physicalDevices[0], &devCreateInfo, NULL, &g_vkDevice);
+    free(props);
+----
+
+=== Version History
+
+  * Revision 1, 2016-10-19 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display.adoc
new file mode 100644
index 0000000..cd5a689
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display.adoc
@@ -0,0 +1,354 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_display.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Norbert Nopper, Freescale
+  - Jeff Vigil, Qualcomm
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension provides the API to enumerate displays and available modes on
+a given device.
+
+include::{generated}/interfaces/VK_KHR_display.adoc[]
+
+=== Issues
+
+1) Which properties of a mode should be fixed in the mode information vs.
+settable in some other function when setting the mode? E.g., do we need to
+double the size of the mode pool to include both stereo and non-stereo
+modes? YUV and RGB scanout even if they both take RGB input images? BGR vs.
+RGB input? etc.
+
+*PROPOSED RESOLUTION*: Many modern displays support at most a handful of
+resolutions and timings natively.
+Other "`modes`" are expected to be supported using scaling hardware on the
+display engine or GPU.
+Other properties, such as rotation and mirroring should not require
+duplicating hardware modes just to express all combinations.
+Further, these properties may be implemented on a per-display or per-overlay
+granularity.
+
+To avoid the exponential growth of modes as mutable properties are added, as
+was the case with code:EGLConfig/WGL pixel formats/code:GLXFBConfig, this
+specification should separate out hardware properties and configurable state
+into separate objects.
+Modes and overlay planes will express capabilities of the hardware, while a
+separate structure will allow applications to configure scaling, rotation,
+mirroring, color keys, LUT values, alpha masks, etc.
+for a given swapchain independent of the mode in use.
+Constraints on these settings will be established by properties of the
+immutable objects.
+
+Note the resolution of this issue may affect issue 5 as well.
+
+2) What properties of a display itself are useful?
+
+*PROPOSED RESOLUTION*: This issue is too broad.
+It was meant to prompt general discussion, but resolving this issue amounts
+to completing this specification.
+All interesting properties should be included.
+The issue will remain as a placeholder since removing it would make it hard
+to parse existing discussion notes that refer to issues by number.
+
+3) How are multiple overlay planes within a display or mode enumerated?
+
+*PROPOSED RESOLUTION*: They are referred to by an index.
+Each display will report the number of overlay planes it contains.
+
+4) Should swapchains be created relative to a mode or a display?
+
+*PROPOSED RESOLUTION*: When using this extension, swapchains are created
+relative to a mode and a plane.
+The mode implies the display object the swapchain will present to.
+If the specified mode is not the display's current mode, the new mode will
+be applied when the first image is presented to the swapchain, and the
+default operating system mode, if any, will be restored when the swapchain
+is destroyed.
+
+5) Should users query generic ranges from displays and construct their own
+modes explicitly using those constraints rather than querying a fixed set of
+modes (Most monitors only have one real "`mode`" these days, even though
+many support relatively arbitrary scaling, either on the monitor side or in
+the GPU display engine, making "`modes`" something of a relic/compatibility
+construct).
+
+*PROPOSED RESOLUTION*: Expose both.
+Display information structures will expose a set of predefined modes, as
+well as any attributes necessary to construct a customized mode.
+
+6) Is it fine if we return the display and display mode handles in the
+structure used to query their properties?
+
+*PROPOSED RESOLUTION*: Yes.
+
+7) Is there a possibility that not all displays of a device work with all of
+the present queues of a device? If yes, how do we determine which displays
+work with which present queues?
+
+*PROPOSED RESOLUTION*: No known hardware has such limitations, but
+determining such limitations is supported automatically using the existing
+`apiext:VK_KHR_surface` and `apiext:VK_KHR_swapchain` query mechanisms.
+
+8) Should all presentation need to be done relative to an overlay plane, or
+can a display mode + display be used alone to target an output?
+
+*PROPOSED RESOLUTION*: Require specifying a plane explicitly.
+
+9) Should displays have an associated window system display, such as an
+code:HDC or code:Display*?
+
+*PROPOSED RESOLUTION*: No.
+Displays are independent of any windowing system in use on the system.
+Further, neither code:HDC nor code:Display* refer to a physical display
+object.
+
+10) Are displays queried from a physical GPU or from a device instance?
+
+*PROPOSED RESOLUTION*: Developers prefer to query modes directly from the
+physical GPU so they can use display information as an input to their device
+selection algorithms prior to device creation.
+This avoids the need to create placeholder device instances to enumerate
+displays.
+
+This preference must be weighed against the extra initialization that must
+be done by driver vendors prior to device instance creation to support this
+usage.
+
+11) Should displays and/or modes be dispatchable objects? If functions are
+to take displays, overlays, or modes as their first parameter, they must be
+dispatchable objects as defined in Khronos bug 13529.
+If they are not added to the list of dispatchable objects, functions
+operating on them must take some higher-level object as their first
+parameter.
+There is no performance case against making them dispatchable objects, but
+they would be the first extension objects to be dispatchable.
+
+*PROPOSED RESOLUTION*: Do not make displays or modes dispatchable.
+They will dispatch based on their associated physical device.
+
+12) Should hardware cursor capabilities be exposed?
+
+*PROPOSED RESOLUTION*: Defer.
+This could be a separate extension on top of the base WSI specs.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+There appears to be a missing sentence for the first part of issue 13 here.
+====
+endif::editing-notes[]
+
+if they are one physical display device to an end user, but may internally
+be implemented as two side-by-side displays using the same display engine
+(and sometimes cabling) resources as two physically separate display
+devices.
+
+*RESOLVED*: Tiled displays will appear as a single display object in this
+API.
+
+14) Should the raw EDID data be included in the display information?
+
+*RESOLVED*: No.
+A future extension could be added which reports the EDID if necessary.
+This may be complicated by the outcome of issue 13.
+
+15) Should min and max scaling factor capabilities of overlays be exposed?
+
+*RESOLVED*: Yes.
+This is exposed indirectly by allowing applications to query the min/max
+position and extent of the source and destination regions from which image
+contents are fetched by the display engine when using a particular mode and
+overlay pair.
+
+16) Should devices be able to expose planes that can be moved between
+displays? If so, how?
+
+*RESOLVED*: Yes.
+Applications can determine which displays a given plane supports using
+flink:vkGetDisplayPlaneSupportedDisplaysKHR.
+
+17) Should there be a way to destroy display modes? If so, does it support
+destroying "`built in`" modes?
+
+*RESOLVED*: Not in this extension.
+A future extension could add this functionality.
+
+18) What should the lifetime of display and built-in display mode objects
+be?
+
+*RESOLVED*: The lifetime of the instance.
+These objects cannot be destroyed.
+A future extension may be added to expose a way to destroy these objects
+and/or support display hotplug.
+
+19) Should persistent mode for smart panels be enabled/disabled at swapchain
+creation time, or on a per-present basis.
+
+*RESOLVED*: On a per-present basis.
+
+ifndef::VKSC_VERSION_1_0[]
+=== Examples
+
+[NOTE]
+.Note
+====
+The example code for the `VK_KHR_display` and
+`apiext:VK_KHR_display_swapchain` extensions was removed from the appendix
+after revision 1.0.43.
+The display enumeration example code was ported to the cube demo that is
+shipped with the official Khronos SDK, and is being kept up-to-date in that
+location (see:
+https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
+====
+endif::VKSC_VERSION_1_0[]
+
+=== Version History
+
+  * Revision 1, 2015-02-24 (James Jones)
+  ** Initial draft
+
+  * Revision 2, 2015-03-12 (Norbert Nopper)
+  ** Added overlay enumeration for a display.
+
+  * Revision 3, 2015-03-17 (Norbert Nopper)
+  ** Fixed typos and namings as discussed in Bugzilla.
+  ** Reordered and grouped functions.
+  ** Added functions to query count of display, mode and overlay.
+  ** Added native display handle, which may be needed on some platforms to
+     create a native Window.
+
+  * Revision 4, 2015-03-18 (Norbert Nopper)
+  ** Removed primary and virtualPostion members (see comment of James Jones
+     in Bugzilla).
+  ** Added native overlay handle to information structure.
+  ** Replaced , with ; in struct.
+
+  * Revision 6, 2015-03-18 (Daniel Rakos)
+  ** Added WSI extension suffix to all items.
+  ** Made the whole API more "`Vulkanish`".
+  ** Replaced all functions with a single vkGetDisplayInfoKHR function to
+     better match the rest of the API.
+  ** Made the display, display mode, and overlay objects be first class
+     objects, not subclasses of VkBaseObject as they do not support the
+     common functions anyways.
+  ** Renamed *Info structures to *Properties.
+  ** Removed overlayIndex field from VkOverlayProperties as there is an
+     implicit index already as a result of moving to a "`Vulkanish`" API.
+  ** Displays are not get through device, but through physical GPU to match
+     the rest of the Vulkan API.
+     Also this is something ISVs explicitly requested.
+  ** Added issue (6) and (7).
+
+  * Revision 7, 2015-03-25 (James Jones)
+  ** Added an issues section
+  ** Added rotation and mirroring flags
+
+  * Revision 8, 2015-03-25 (James Jones)
+  ** Combined the duplicate issues sections introduced in last change.
+  ** Added proposed resolutions to several issues.
+
+  * Revision 9, 2015-04-01 (Daniel Rakos)
+  ** Rebased extension against Vulkan 0.82.0
+
+  * Revision 10, 2015-04-01 (James Jones)
+  ** Added issues (10) and (11).
+  ** Added more straw-man issue resolutions, and cleaned up the proposed
+     resolution for issue (4).
+  ** Updated the rotation and mirroring enums to have proper bitmask
+     semantics.
+
+  * Revision 11, 2015-04-15 (James Jones)
+  ** Added proposed resolution for issues (1) and (2).
+  ** Added issues (12), (13), (14), and (15)
+  ** Removed pNativeHandle field from overlay structure.
+  ** Fixed small compilation errors in example code.
+
+  * Revision 12, 2015-07-29 (James Jones)
+  ** Rewrote the guts of the extension against the latest WSI swapchain
+     specifications and the latest Vulkan API.
+  ** Address overlay planes by their index rather than an object handle and
+     refer to them as "`planes`" rather than "`overlays`" to make it
+     slightly clearer that even a display with no "`overlays`" still has at
+     least one base "`plane`" that images can be displayed on.
+  ** Updated most of the issues.
+  ** Added an "`extension type`" section to the specification header.
+  ** Reused the VK_EXT_KHR_surface surface transform enumerations rather
+     than redefining them here.
+  ** Updated the example code to use the new semantics.
+
+  * Revision 13, 2015-08-21 (Ian Elliott)
+  ** Renamed this extension and all of its enumerations, types, functions,
+     etc.
+     This makes it compliant with the proposed standard for Vulkan
+     extensions.
+  ** Switched from "`revision`" to "`version`", including use of the
+     VK_MAKE_VERSION macro in the header file.
+
+  * Revision 14, 2015-09-01 (James Jones)
+  ** Restore single-field revision number.
+
+  * Revision 15, 2015-09-08 (James Jones)
+  ** Added alpha flags enum.
+  ** Added premultiplied alpha support.
+
+  * Revision 16, 2015-09-08 (James Jones)
+  ** Added description section to the spec.
+  ** Added issues 16 - 18.
+
+  * Revision 17, 2015-10-02 (James Jones)
+  ** Planes are now a property of the entire device rather than individual
+     displays.
+     This allows planes to be moved between multiple displays on devices
+     that support it.
+  ** Added a function to create a VkSurfaceKHR object describing a display
+     plane and mode to align with the new per-platform surface creation
+     conventions.
+  ** Removed detailed mode timing data.
+     It was agreed that the mode extents and refresh rate are sufficient for
+     current use cases.
+     Other information could be added back in as an extension if it is
+     needed in the future.
+  ** Added support for smart/persistent/buffered display devices.
+
+  * Revision 18, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_display to VK_KHR_display.
+
+  * Revision 19, 2015-11-02 (James Jones)
+  ** Updated example code to match revision 17 changes.
+
+  * Revision 20, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to creation functions.
+
+  * Revision 21, 2015-11-10 (Jesse Hall)
+  ** Added VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, and use
+     VkDisplayPlaneAlphaFlagBitsKHR for
+     VkDisplayPlanePropertiesKHR::alphaMode instead of
+     VkDisplayPlaneAlphaFlagsKHR, since it only represents one mode.
+  ** Added reserved flags bitmask to VkDisplayPlanePropertiesKHR.
+  ** Use VkSurfaceTransformFlagBitsKHR instead of obsolete
+     VkSurfaceTransformKHR.
+  ** Renamed vkGetDisplayPlaneSupportedDisplaysKHR parameters for clarity.
+
+  * Revision 22, 2015-12-18 (James Jones)
+  ** Added missing "`planeIndex`" parameter to
+     vkGetDisplayPlaneSupportedDisplaysKHR()
+
+  * Revision 23, 2017-03-13 (James Jones)
+  ** Closed all remaining issues.
+     The specification and implementations have been shipping with the
+     proposed resolutions for some time now.
+  ** Removed the sample code and noted it has been integrated into the
+     official Vulkan SDK cube demo.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display_swapchain.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display_swapchain.adoc
new file mode 100644
index 0000000..711389e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_display_swapchain.adoc
@@ -0,0 +1,129 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_display_swapchain.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-13
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Jeff Vigil, Qualcomm
+  - Jesse Hall, Google
+
+=== Description
+
+This extension provides an API to create a swapchain directly on a device's
+display without any underlying window system.
+
+include::{generated}/interfaces/VK_KHR_display_swapchain.adoc[]
+
+=== Issues
+
+1) Should swapchains sharing images each hold a reference to the images, or
+should it be up to the application to destroy the swapchains and images in
+an order that avoids the need for reference counting?
+
+*RESOLVED*: Take a reference.
+The lifetime of presentable images is already complex enough.
+
+2) Should the pname:srcRect and pname:dstRect parameters be specified as
+part of the presentation command, or at swapchain creation time?
+
+*RESOLVED*: As part of the presentation command.
+This allows moving and scaling the image on the screen without the need to
+respecify the mode or create a new swapchain and presentable images.
+
+3) Should pname:srcRect and pname:dstRect be specified as rects, or separate
+offset/extent values?
+
+*RESOLVED*: As rects.
+Specifying them separately might make it easier for hardware to expose
+support for one but not the other, but in such cases applications must just
+take care to obey the reported capabilities and not use non-zero offsets or
+extents that require scaling, as appropriate.
+
+4) How can applications create multiple swapchains that use the same images?
+
+*RESOLVED*: By calling flink:vkCreateSharedSwapchainsKHR.
+
+An earlier resolution used flink:vkCreateSwapchainKHR, chaining multiple
+slink:VkSwapchainCreateInfoKHR structures through pname:pNext.
+In order to allow each swapchain to also allow other extension structs, a
+level of indirection was used: slink:VkSwapchainCreateInfoKHR::pname:pNext
+pointed to a different structure, which had both pname:sType and pname:pNext
+members for additional extensions, and also had a pointer to the next
+slink:VkSwapchainCreateInfoKHR structure.
+The number of swapchains to be created could only be found by walking this
+linked list of alternating structures, and the pname:pSwapchains out
+parameter was reinterpreted to be an array of slink:VkSwapchainKHR handles.
+
+Another option considered was a method to specify a "`shared`" swapchain
+when creating a new swapchain, such that groups of swapchains using the same
+images could be built up one at a time.
+This was deemed unusable because drivers need to know all of the displays an
+image will be used on when determining which internal formats and layouts to
+use for that image.
+
+ifndef::VKSC_VERSION_1_0[]
+=== Examples
+
+[NOTE]
+.Note
+====
+The example code for the `apiext:VK_KHR_display` and
+`VK_KHR_display_swapchain` extensions was removed from the appendix after
+revision 1.0.43.
+The display swapchain creation example code was ported to the cube demo that
+is shipped with the official Khronos SDK, and is being kept up-to-date in
+that location (see:
+https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
+====
+endif::VKSC_VERSION_1_0[]
+
+=== Version History
+
+  * Revision 1, 2015-07-29 (James Jones)
+  ** Initial draft
+
+  * Revision 2, 2015-08-21 (Ian Elliott)
+  ** Renamed this extension and all of its enumerations, types, functions,
+     etc.
+     This makes it compliant with the proposed standard for Vulkan
+     extensions.
+  ** Switched from "`revision`" to "`version`", including use of the
+     VK_MAKE_VERSION macro in the header file.
+
+  * Revision 3, 2015-09-01 (James Jones)
+  ** Restore single-field revision number.
+
+  * Revision 4, 2015-09-08 (James Jones)
+  ** Allow creating multiple swapchains that share the same images using a
+     single call to vkCreateSwapchainKHR().
+
+  * Revision 5, 2015-09-10 (Alon Or-bach)
+  ** Removed underscores from SWAP_CHAIN in two enums.
+
+  * Revision 6, 2015-10-02 (James Jones)
+  ** Added support for smart panels/buffered displays.
+
+  * Revision 7, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_display_swapchain to VK_KHR_display_swapchain.
+
+  * Revision 8, 2015-11-03 (Daniel Rakos)
+  ** Updated sample code based on the changes to VK_KHR_swapchain.
+
+  * Revision 9, 2015-11-10 (Jesse Hall)
+  ** Replaced VkDisplaySwapchainCreateInfoKHR with
+     vkCreateSharedSwapchainsKHR, changing resolution of issue #4.
+
+  * Revision 10, 2017-03-13 (James Jones)
+  ** Closed all remaining issues.
+     The specification and implementations have been shipping with the
+     proposed resolutions for some time now.
+  ** Removed the sample code and noted it has been integrated into the
+     official Vulkan SDK cube demo.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_draw_indirect_count.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_draw_indirect_count.adoc
new file mode 100644
index 0000000..c9b0f1b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_draw_indirect_count.adoc
@@ -0,0 +1,50 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_draw_indirect_count.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-25
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus G. Chajdas, AMD
+  - Derrick Owens, AMD
+  - Graham Sellers, AMD
+  - Daniel Rakos, AMD
+  - Dominik Witczak, AMD
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension is based off the `apiext:VK_AMD_draw_indirect_count`
+extension.
+This extension allows an application to source the number of draws for
+indirect drawing calls from a buffer.
+
+Applications might want to do culling on the GPU via a compute shader prior
+to drawing.
+This enables the application to generate an arbitrary number of drawing
+commands and execute them without host intervention.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the entry
+points flink:vkCmdDrawIndirectCount and flink:vkCmdDrawIndexedIndirectCount
+are optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_draw_indirect_count.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-08-25 (Piers Daniell)
+  ** Initial draft based off VK_AMD_draw_indirect_count
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_driver_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_driver_properties.adoc
new file mode 100644
index 0000000..9455c8e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_driver_properties.adoc
@@ -0,0 +1,43 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_driver_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-04-11
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Baldur Karlsson
+  - Matthaeus G. Chajdas, AMD
+  - Piers Daniell, NVIDIA
+  - Alexander Galazin, Arm
+  - Jesse Hall, Google
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension provides a new physical device query which allows retrieving
+information about the driver implementation, allowing applications to
+determine which physical device corresponds to which particular vendor's
+driver, and which conformance test suite version the driver implementation
+is compliant with.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_driver_properties.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-04-11 (Daniel Rakos)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dynamic_rendering.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dynamic_rendering.adoc
new file mode 100644
index 0000000..de866f8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_dynamic_rendering.adoc
@@ -0,0 +1,52 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_dynamic_rendering.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-10-06
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*Contributors*::
+  - Tobias Hector, AMD
+  - Arseny Kapoulkine, Roblox
+  - François Duranleau, Gameloft
+  - Stuart Smith, AMD
+  - Hai Nguyen, Google
+  - Jean-François Roy, Google
+  - Jeff Leger, Qualcomm
+  - Jan-Harald Fredriksen, Arm
+  - Piers Daniell, Nvidia
+  - James Fitzpatrick, Imagination
+  - Piotr Byszewski, Mobica
+  - Jesse Hall, Google
+  - Mike Blumenkrantz, Valve
+
+=== Description
+
+This extension allows applications to create single-pass render pass
+instances without needing to create render pass objects or framebuffers.
+Dynamic render passes can also span across multiple primary command buffers,
+rather than relying on secondary command buffers.
+
+This extension also incorporates ename:VK_ATTACHMENT_STORE_OP_NONE_KHR from
+`apiext:VK_QCOM_render_pass_store_ops`, enabling applications to avoid
+unnecessary synchronization when an attachment is not written during a
+render pass.
+
+include::{generated}/interfaces/VK_KHR_dynamic_rendering.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2021-10-06 (Tobias Hector)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence.adoc
new file mode 100644
index 0000000..b00e63b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence.adoc
@@ -0,0 +1,48 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-08
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Cass Everitt, Oculus
+  - Contributors to `apiext:VK_KHR_external_semaphore`
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using fences.
+This extension enables an application to create fences from which non-Vulkan
+handles that reference the underlying synchronization primitive can be
+exported.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_fence.adoc[]
+
+=== Issues
+
+This extension borrows concepts, semantics, and language from
+`apiext:VK_KHR_external_semaphore`.
+That extension's issues apply equally to this extension.
+
+=== Version History
+
+  * Revision 1, 2017-05-08 (Jesse Hall)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_capabilities.adoc
new file mode 100644
index 0000000..722b686
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_capabilities.adoc
@@ -0,0 +1,43 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_capabilities.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-08
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Cass Everitt, Oculus
+  - Contributors to `apiext:VK_KHR_external_semaphore_capabilities`
+
+=== Description
+
+An application may wish to reference device fences in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension provides a set of capability queries and handle definitions
+that allow an application to determine what types of "`external`" fence
+handles an implementation supports for a given set of use cases.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_fence_capabilities.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-05-08 (Jesse Hall)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_fd.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_fd.adoc
new file mode 100644
index 0000000..7f48652
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_fd.adoc
@@ -0,0 +1,38 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_fd.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-08
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Cass Everitt, Oculus
+  - Contributors to `apiext:VK_KHR_external_semaphore_fd`
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using fences.
+This extension enables an application to export fence payload to and import
+fence payload from POSIX file descriptors.
+
+include::{generated}/interfaces/VK_KHR_external_fence_fd.adoc[]
+
+=== Issues
+
+This extension borrows concepts, semantics, and language from
+`apiext:VK_KHR_external_semaphore_fd`.
+That extension's issues apply equally to this extension.
+
+=== Version History
+
+  * Revision 1, 2017-05-08 (Jesse Hall)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_win32.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_win32.adoc
new file mode 100644
index 0000000..85d7f4c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_fence_win32.adoc
@@ -0,0 +1,51 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_win32.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-08
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Cass Everitt, Oculus
+  - Contributors to `apiext:VK_KHR_external_semaphore_win32`
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using fences.
+This extension enables an application to export fence payload to and import
+fence payload from Windows handles.
+
+include::{generated}/interfaces/VK_KHR_external_fence_win32.adoc[]
+
+=== Issues
+
+This extension borrows concepts, semantics, and language from
+`apiext:VK_KHR_external_semaphore_win32`.
+That extension's issues apply equally to this extension.
+
+1) Should D3D12 fence handle types be supported, like they are for
+semaphores?
+
+*RESOLVED*: No.
+Doing so would require extending the fence signal and wait operations to
+provide values to signal / wait for, like sname:VkD3D12FenceSubmitInfoKHR
+does.
+A D3D12 fence can be signaled by importing it into a slink:VkSemaphore
+instead of a slink:VkFence, and applications can check status or wait on the
+D3D12 fence using non-Vulkan APIs.
+The convenience of being able to do these operations on sname:VkFence
+objects does not justify the extra API complexity.
+
+=== Version History
+
+  * Revision 1, 2017-05-08 (Jesse Hall)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory.adoc
new file mode 100644
index 0000000..07fe8ad
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory.adoc
@@ -0,0 +1,248 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-20
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
+  - Interacts with `apiext:VK_NV_dedicated_allocation`.
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+  - Tobias Hector, Imagination Technologies
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Daniel Rakos, AMD
+  - Carsten Rohde, NVIDIA
+  - Ray Smith, ARM
+  - Lina Versace, Google
+
+=== Description
+
+An application may wish to reference device memory in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension enables an application to export non-Vulkan handles from
+Vulkan memory objects such that the underlying resources can be referenced
+outside the scope of the Vulkan logical device that created them.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_memory.adoc[]
+
+=== Issues
+
+1) How do applications correlate two physical devices across process or
+Vulkan instance boundaries?
+
+*RESOLVED*: New device ID fields have been introduced by
+`apiext:VK_KHR_external_memory_capabilities`.
+These fields, combined with the existing
+slink:VkPhysicalDeviceProperties::pname:driverVersion field can be used to
+identify compatible devices across processes, drivers, and APIs.
+slink:VkPhysicalDeviceProperties::pname:pipelineCacheUUID is not sufficient
+for this purpose because despite its description in the specification, it
+need only identify a unique pipeline cache format in practice.
+Multiple devices may be able to use the same pipeline cache data, and hence
+it would be desirable for all of them to have the same pipeline cache UUID.
+However, only the same concrete physical device can be used when sharing
+memory, so an actual unique device ID was introduced.
+Further, the pipeline cache UUID was specific to Vulkan, but correlation
+with other, non-extensible APIs is required to enable interoperation with
+those APIs.
+
+2) If memory objects are shared between processes and APIs, is this
+considered aliasing according to the rules outlined in the
+<<resources-memory-aliasing,Memory Aliasing>> section?
+
+*RESOLVED*: Yes.
+Applications must take care to obey all restrictions imposed on aliased
+resources when using memory across multiple Vulkan instances or other APIs.
+
+3) Are new image layouts or metadata required to specify image layouts and
+layout transitions compatible with non-Vulkan APIs, or with other instances
+of the same Vulkan driver?
+
+*RESOLVED*: Separate instances of the same Vulkan driver running on the same
+GPU should have identical internal layout semantics, so applications have
+the tools they need to ensure views of images are consistent between the two
+instances.
+Other APIs will fall into two categories: Those that are Vulkan- compatible,
+and those that are Vulkan-incompatible.
+Vulkan-incompatible APIs will require the image to be in the GENERAL layout
+whenever they are accessing them.
+
+Note this does not attempt to address cross-device transitions, nor
+transitions to engines on the same device which are not visible within the
+Vulkan API.
+Both of these are beyond the scope of this extension.
+
+4) Is a new barrier flag or operation of some type needed to prepare
+external memory for handoff to another Vulkan instance or API and/or receive
+it from another instance or API?
+
+*RESOLVED*: Yes.
+Some implementations need to perform additional cache management when
+transitioning memory between address spaces and other APIs, instances, or
+processes which may operate in a separate address space.
+Options for defining this transition include:
+
+  * A new structure that can be added to the pname:pNext list in
+    slink:VkMemoryBarrier, slink:VkBufferMemoryBarrier, and
+    slink:VkImageMemoryBarrier.
+  * A new bit in tlink:VkAccessFlags that can be set to indicate an
+    "`external`" access.
+  * A new bit in tlink:VkDependencyFlags
+  * A new special queue family that represents an "`external`" queue.
+
+A new structure has the advantage that the type of external transition can
+be described in as much detail as necessary.
+However, there is not currently a known need for anything beyond
+differentiating between external and internal accesses, so this is likely an
+over-engineered solution.
+The access flag bit has the advantage that it can be applied at buffer,
+image, or global granularity, and semantically it maps pretty well to the
+operation being described.
+Additionally, the API already includes ename:VK_ACCESS_MEMORY_READ_BIT and
+ename:VK_ACCESS_MEMORY_WRITE_BIT which appear to be intended for this
+purpose.
+However, there is no obvious pipeline stage that would correspond to an
+external access, and therefore no clear way to use
+ename:VK_ACCESS_MEMORY_READ_BIT or ename:VK_ACCESS_MEMORY_WRITE_BIT.
+tlink:VkDependencyFlags and tlink:VkPipelineStageFlags operate at command
+granularity rather than image or buffer granularity, which would make an
+entire pipeline barrier an internal->external or external->internal barrier.
+This may not be a problem in practice, but seems like the wrong scope.
+Another downside of tlink:VkDependencyFlags is that it lacks inherent
+directionality: there are no ptext:src and ptext:dst variants of it in the
+barrier or dependency description semantics, so two bits might need to be
+added to describe both internal->external and external->internal
+transitions.
+Transitioning a resource to a special queue family corresponds well with the
+operation of transitioning to a separate Vulkan instance, in that both
+operations ideally include scheduling a barrier on both sides of the
+transition: Both the releasing and the acquiring queue or process.
+Using a special queue family requires adding an additional reserved queue
+family index.
+Re-using ename:VK_QUEUE_FAMILY_IGNORED would have left it unclear how to
+transition a concurrent usage resource from one process to another, since
+the semantics would have likely been equivalent to the currently-ignored
+transition of
+ename:VK_QUEUE_FAMILY_IGNORED{nbsp}->{nbsp}ename:VK_QUEUE_FAMILY_IGNORED.
+Fortunately, creating a new reserved queue family index is not invasive.
+
+Based on the above analysis, the approach of transitioning to a special
+"`external`" queue family was chosen.
+
+5) Do internal driver memory arrangements and/or other internal driver image
+properties need to be exported and imported when sharing images across
+processes or APIs.
+
+*RESOLVED*: Some vendors claim this is necessary on their implementations,
+but it was determined that the security risks of allowing opaque metadata to
+be passed from applications to the driver were too high.
+Therefore, implementations which require metadata will need to associate it
+with the objects represented by the external handles, and rely on the
+dedicated allocation mechanism to associate the exported and imported memory
+objects with a single image or buffer.
+
+6) Most prior interoperation and cross-process sharing APIs have been based
+on image-level sharing.
+Should Vulkan sharing be based on memory-object sharing or image sharing?
+
+*RESOLVED*: These extensions have assumed memory-level sharing is the
+correct granularity.
+Vulkan is a lower-level API than most prior APIs, and as such attempts to
+closely align with to the underlying primitives of the hardware and
+system-level drivers it abstracts.
+In general, the resource that holds the backing store for both images and
+buffers of various types is memory.
+Images and buffers are merely metadata containing brief descriptions of the
+layout of bits within that memory.
+
+Because memory object-based sharing is aligned with the overall Vulkan API
+design, it enables the full range of Vulkan capabilities with external
+objects.
+External memory can be used as backing for sparse images, for example,
+whereas such usage would be awkward at best with a sharing mechanism based
+on higher-level primitives such as images.
+Further, aligning the mechanism with the API in this way provides some hope
+of trivial compatibility with future API enhancements.
+If new objects backed by memory objects are added to the API, they too can
+be used across processes with minimal additions to the base external memory
+APIs.
+
+Earlier APIs implemented interop at a higher level, and this necessitated
+entirely separate sharing APIs for images and buffers.
+To co-exist and interoperate with those APIs, the Vulkan external sharing
+mechanism must accommodate their model.
+However, if it can be agreed that memory-based sharing is the more desirable
+and forward-looking design, legacy interoperation constraints can be
+considered another reason to favor memory-based sharing: while native and
+legacy driver primitives that may be used to implement sharing may not be as
+low-level as the API here suggests, raw memory is still the least common
+denominator among the types.
+Image-based sharing can be cleanly derived from a set of base memory- object
+sharing APIs with minimal effort, whereas image-based sharing does not
+generalize well to buffer or raw-memory sharing.
+Therefore, following the general Vulkan design principle of minimalism, it
+is better to expose interopability with image-based native and external
+primitives via the memory sharing API, and place sufficient limits on their
+usage to ensure they can be used only as backing for equivalent Vulkan
+images.
+This provides a consistent API for applications regardless of which platform
+or external API they are targeting, which makes development of multi-API and
+multi-platform applications simpler.
+
+7) Should Vulkan define a common external handle type and provide Vulkan
+functions to facilitate cross-process sharing of such handles rather than
+relying on native handles to define the external objects?
+
+*RESOLVED*: No.
+Cross-process sharing of resources is best left to native platforms.
+There are myriad security and extensibility issues with such a mechanism,
+and attempting to re-solve all those issues within Vulkan does not align
+with Vulkan's purpose as a graphics API.
+If desired, such a mechanism could be built as a layer or helper library on
+top of the opaque native handle defined in this family of extensions.
+
+8) Must implementations provide additional guarantees about state implicitly
+included in memory objects for those memory objects that may be exported?
+
+*RESOLVED*: Implementations must ensure that sharing memory objects does not
+transfer any information between the exporting and importing instances and
+APIs other than that required to share the data contained in the memory
+objects explicitly shared.
+As specific examples, data from previously freed memory objects that used
+the same underlying physical memory, and data from memory obects using
+adjacent physical memory must not be visible to applications importing an
+exported memory object.
+
+9) Must implementations validate external handles the application provides
+as inputs to memory import operations?
+
+*RESOLVED*: Implementations must return an error to the application if the
+provided memory handle cannot be used to complete the requested import
+operation.
+However, implementations need not validate handles are of the exact type
+specified by the application.
+
+=== Version History
+
+  * Revision 1, 2016-10-20 (James Jones)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_capabilities.adoc
new file mode 100644
index 0000000..3afe0aa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_capabilities.adoc
@@ -0,0 +1,107 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_capabilities.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-17
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
+  - Interacts with `apiext:VK_NV_dedicated_allocation`.
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+
+=== Description
+
+An application may wish to reference device memory in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension provides a set of capability queries and handle definitions
+that allow an application to determine what types of "`external`" memory
+handles an implementation supports for a given set of use cases.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_memory_capabilities.adoc[]
+
+=== Issues
+
+1) Why do so many external memory capabilities need to be queried on a
+per-memory-handle-type basis?
+
+*PROPOSED RESOLUTION*: This is because some handle types are based on
+OS-native objects that have far more limited capabilities than the very
+generic Vulkan memory objects.
+Not all memory handle types can name memory objects that support 3D images,
+for example.
+Some handle types cannot even support the deferred image and memory binding
+behavior of Vulkan and require specifying the image when allocating or
+importing the memory object.
+
+2) Do the slink:VkExternalImageFormatPropertiesKHR and
+slink:VkExternalBufferPropertiesKHR structs need to include a list of memory
+type bits that support the given handle type?
+
+*PROPOSED RESOLUTION*: No.
+The memory types that do not support the handle types will simply be
+filtered out of the results returned by flink:vkGetImageMemoryRequirements
+and flink:vkGetBufferMemoryRequirements when a set of handle types was
+specified at image or buffer creation time.
+
+3) Should the non-opaque handle types be moved to their own extension?
+
+*PROPOSED RESOLUTION*: Perhaps.
+However, defining the handle type bits does very little and does not require
+any platform-specific types on its own, and it is easier to maintain the
+bitfield values in a single extension for now.
+Presumably more handle types could be added by separate extensions though,
+and it would be midly weird to have some platform-specific ones defined in
+the core spec and some in extensions
+
+4) Do we need a code:D3D11_TILEPOOL type?
+
+*PROPOSED RESOLUTION*: No.
+This is technically possible, but the synchronization is awkward.
+D3D11 surfaces must be synchronized using shared mutexes, and these
+synchronization primitives are shared by the entire memory object, so D3D11
+shared allocations divided among multiple buffer and image bindings may be
+difficult to synchronize.
+
+5) Should the Windows 7-compatible handle types be named "`KMT`" handles or
+"`GLOBAL_SHARE`" handles?
+
+*PROPOSED RESOLUTION*: KMT, simply because it is more concise.
+
+6) How do applications identify compatible devices and drivers across
+instance, process, and API boundaries when sharing memory?
+
+*PROPOSED RESOLUTION*: New device properties are exposed that allow
+applications to correctly correlate devices and drivers.
+A device and driver UUID that must both match to ensure sharing
+compatibility between two Vulkan instances, or a Vulkan instance and an
+extensible external API are added.
+To allow correlating with Direct3D devices, a device LUID is added that
+corresponds to a DXGI adapter LUID.
+A driver ID is not needed for Direct3D because mismatched driver component
+versions are not currently supported on the Windows OS.
+Should support for such configurations be introduced at the OS level,
+further Vulkan extensions would be needed to correlate userspace component
+builds.
+
+=== Version History
+
+  * Revision 1, 2016-10-17 (James Jones)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_fd.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_fd.adoc
new file mode 100644
index 0000000..c1929c7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_fd.adoc
@@ -0,0 +1,59 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_fd.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+
+=== Description
+
+An application may wish to reference device memory in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension enables an application to export POSIX file descriptor
+handles from Vulkan memory objects and to import Vulkan memory objects from
+POSIX file descriptor handles exported from other Vulkan memory objects or
+from similar resources in other APIs.
+
+include::{generated}/interfaces/VK_KHR_external_memory_fd.adoc[]
+
+=== Issues
+
+1) Does the application need to close the file descriptor returned by
+flink:vkGetMemoryFdKHR?
+
+*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
+the memory.
+A successful get call transfers ownership of the file descriptor to the
+application, and a successful import transfers it back to the driver.
+Destroying the original memory object will not close the file descriptor or
+remove its reference to the underlying memory resource associated with it.
+
+2) Do drivers ever need to expose multiple file descriptors per memory
+object?
+
+*RESOLVED*: No.
+This would indicate there are actually multiple memory objects, rather than
+a single memory object.
+
+3) How should the valid size and memory type for POSIX file descriptor
+memory handles created outside of Vulkan be specified?
+
+*RESOLVED*: The valid memory types are queried directly from the external
+handle.
+The size will be specified by future extensions that introduce such external
+memory handle types.
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_win32.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_win32.adoc
new file mode 100644
index 0000000..bd94675
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_memory_win32.adoc
@@ -0,0 +1,72 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_win32.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+An application may wish to reference device memory in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension enables an application to export Windows handles from Vulkan
+memory objects and to import Vulkan memory objects from Windows handles
+exported from other Vulkan memory objects or from similar resources in other
+APIs.
+
+include::{generated}/interfaces/VK_KHR_external_memory_win32.adoc[]
+
+=== Issues
+
+1) Do applications need to call code:CloseHandle() on the values returned
+from flink:vkGetMemoryWin32HandleKHR when pname:handleType is
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR?
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Jon) This issue refers to a token from
+`apiext:VK_KHR_external_semaphore_win32`, but there is no dependency or
+interaction with that extension defined above.
+====
+endif::editing-notes[]
+
+*RESOLVED*: Yes, unless it is passed back in to another driver instance to
+import the object.
+A successful get call transfers ownership of the handle to the application.
+Destroying the memory object will not destroy the handle or the handle's
+reference to the underlying memory resource.
+
+2) Should the language regarding KMT/Windows 7 handles be moved to a
+separate extension so that it can be deprecated over time?
+
+*RESOLVED*: No.
+Support for them can be deprecated by drivers if they choose, by no longer
+returning them in the supported handle types of the instance level queries.
+
+3) How should the valid size and memory type for windows memory handles
+created outside of Vulkan be specified?
+
+*RESOLVED*: The valid memory types are queried directly from the external
+handle.
+The size is determined by the associated image or buffer memory requirements
+for external handle types that require dedicated allocations, and by the
+size specified when creating the object from which the handle was exported
+for other external handle types.
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore.adoc
new file mode 100644
index 0000000..7294247
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore.adoc
@@ -0,0 +1,68 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Jesse Hall, Google
+  - Tobias Hector, Imagination Technologies
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Ray Smith, ARM
+  - Lina Versace, Google
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using semaphores.
+This extension enables an application to create semaphores from which
+non-Vulkan handles that reference the underlying synchronization primitive
+can be exported.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_semaphore.adoc[]
+
+=== Issues
+
+1) Should there be restrictions on what side effects can occur when waiting
+on imported semaphores that are in an invalid state?
+
+*RESOLVED*: Yes.
+Normally, validating such state would be the responsibility of the
+application, and the implementation would be free to enter an undefined:
+state if valid usage rules were violated.
+However, this could cause security concerns when using imported semaphores,
+as it would require the importing application to trust the exporting
+application to ensure the state is valid.
+Requiring this level of trust is undesirable for many potential use cases.
+
+2) Must implementations validate external handles the application provides
+as input to semaphore state import operations?
+
+*RESOLVED*: Implementations must return an error to the application if the
+provided semaphore state handle cannot be used to complete the requested
+import operation.
+However, implementations need not validate handles are of the exact type
+specified by the application.
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_capabilities.adoc
new file mode 100644
index 0000000..7e0eb22
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_capabilities.adoc
@@ -0,0 +1,41 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_capabilities.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-20
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+
+=== Description
+
+An application may wish to reference device semaphores in multiple Vulkan
+logical devices or instances, in multiple processes, and/or in multiple
+APIs.
+This extension provides a set of capability queries and handle definitions
+that allow an application to determine what types of "`external`" semaphore
+handles an implementation supports for a given set of use cases.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_external_semaphore_capabilities.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-10-20 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_fd.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_fd.adoc
new file mode 100644
index 0000000..f5ccf76
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_fd.adoc
@@ -0,0 +1,44 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_fd.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using semaphores.
+This extension enables an application to export semaphore payload to and
+import semaphore payload from POSIX file descriptors.
+
+include::{generated}/interfaces/VK_KHR_external_semaphore_fd.adoc[]
+
+=== Issues
+
+1) Does the application need to close the file descriptor returned by
+flink:vkGetSemaphoreFdKHR?
+
+*RESOLVED*: Yes, unless it is passed back in to a driver instance to import
+the semaphore.
+A successful get call transfers ownership of the file descriptor to the
+application, and a successful import transfers it back to the driver.
+Destroying the original semaphore object will not close the file descriptor
+or remove its reference to the underlying semaphore resource associated with
+it.
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (Jesse Hall)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_win32.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_win32.adoc
new file mode 100644
index 0000000..055b9ac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_external_semaphore_win32.adoc
@@ -0,0 +1,72 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_win32.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using semaphores.
+This extension enables an application to export semaphore payload to and
+import semaphore payload from Windows handles.
+
+include::{generated}/interfaces/VK_KHR_external_semaphore_win32.adoc[]
+
+=== Issues
+
+1) Do applications need to call code:CloseHandle() on the values returned
+from flink:vkGetSemaphoreWin32HandleKHR when pname:handleType is
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR?
+
+*RESOLVED*: Yes, unless it is passed back in to another driver instance to
+import the object.
+A successful get call transfers ownership of the handle to the application.
+Destroying the semaphore object will not destroy the handle or the handle's
+reference to the underlying semaphore resource.
+
+2) Should the language regarding KMT/Windows 7 handles be moved to a
+separate extension so that it can be deprecated over time?
+
+*RESOLVED*: No.
+Support for them can be deprecated by drivers if they choose, by no longer
+returning them in the supported handle types of the instance level queries.
+
+3) Should applications be allowed to specify additional object attributes
+for shared handles?
+
+*RESOLVED*: Yes.
+Applications will be allowed to provide similar attributes to those they
+would to any other handle creation API.
+
+4) How do applications communicate the desired fence values to use with
+etext:D3D12_FENCE-based Vulkan semaphores?
+
+*RESOLVED*: There are a couple of options.
+The values for the signaled and reset states could be communicated up front
+when creating the object and remain static for the life of the Vulkan
+semaphore, or they could be specified using auxiliary structures when
+submitting semaphore signal and wait operations, similar to what is done
+with the keyed mutex extensions.
+The latter is more flexible and consistent with the keyed mutex usage, but
+the former is a much simpler API.
+
+Since Vulkan tends to favor flexibility and consistency over simplicity, a
+new structure specifying D3D12 fence acquire and release values is added to
+the flink:vkQueueSubmit function.
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_format_feature_flags2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_format_feature_flags2.adoc
new file mode 100644
index 0000000..b2c8bf6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_format_feature_flags2.adoc
@@ -0,0 +1,80 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_format_feature_flags2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-07-01
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Lionel Landwerlin, Intel
+  - Faith Ekstrand, Intel
+  - Tobias Hector, AMD
+  - Spencer Fricke, Samsung Electronics
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, ARM
+
+=== Description
+
+This extension adds a new elink:VkFormatFeatureFlagBits2KHR 64bits format
+feature flag type to extend the existing elink:VkFormatFeatureFlagBits which
+is limited to 31 flags.
+At the time of this writing 29 bits of elink:VkFormatFeatureFlagBits are
+already used.
+
+Because slink:VkFormatProperties2 is already defined to extend the Vulkan
+1.0 flink:vkGetPhysicalDeviceFormatProperties entry point, this extension
+defines a new slink:VkFormatProperties3KHR to extend the
+slink:VkFormatProperties.
+
+On top of replicating all the bits from elink:VkFormatFeatureFlagBits,
+elink:VkFormatFeatureFlagBits2KHR adds the following bits :
+
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR and
+    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR indicate
+    that an implementation supports respectively reading and writing a given
+    elink:VkFormat through storage operations without specifying the format
+    in the shader.
+
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR
+    indicates that an implementation supports depth comparison performed by
+    code:OpImage*Dref* instructions on a given elink:VkFormat.
+    Previously the result of executing a code:OpImage*Dref* instruction on
+    an image view, where the pname:format was not one of the depth/stencil
+    formats with a depth component, was undefined.
+    This bit clarifies on which formats such instructions can be used.
+
+Prior to version 2 of this extension, implementations exposing the
+<<features-shaderStorageImageReadWithoutFormat,
+pname:shaderStorageImageReadWithoutFormat>> and
+<<features-shaderStorageImageWriteWithoutFormat,
+pname:shaderStorageImageWriteWithoutFormat>> features may not report
+ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR and
+ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR in
+slink:VkFormatProperties3KHR::pname:bufferFeatures.
+Despite this, buffer reads/writes are supported as intended by the original
+features.
+
+include::{generated}/interfaces/VK_KHR_format_feature_flags2.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 2, 2022-07-20 (Lionel Landwerlin)
+  ** Clarify that
+     VK_FORMAT_FEATURE_2_STORAGE_(READ|WRITE)_WITHOUT_FORMAT_BIT also apply
+     to buffer views.
+  * Revision 1, 2020-07-21 (Lionel Landwerlin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shader_barycentric.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shader_barycentric.adoc
new file mode 100644
index 0000000..2edc7d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shader_barycentric.adoc
@@ -0,0 +1,94 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_fragment_shader_barycentric.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-03-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_fragment_shader_barycentric.html[`SPV_KHR_fragment_shader_barycentric`]
+  - This extension provides API support for
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_fragment_shader_barycentric.txt[`GL_EXT_fragment_shader_barycentric`]
+*Contributors*::
+  - Stu Smith, AMD
+  - Tobias Hector, AMD
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+  - Slawek Grajewski, Intel
+  - Pat Brown, NVIDIA
+  - Hans-Kristian Arntzen, Valve
+  - Contributors to the VK_NV_fragment_shader_barycentric specification
+
+
+=== Description
+
+This extension is based on the `apiext:VK_NV_fragment_shader_barycentric`
+extension, and adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/KHR/SPV_KHR_fragment_shader_barycentric.html[`SPV_KHR_fragment_shader_barycentric`]
+
+The extension provides access to three additional fragment shader variable
+decorations in SPIR-V:
+
+  * code:PerVertexKHR, which indicates that a fragment shader input will not
+    have interpolated values, but instead must be accessed with an extra
+    array index that identifies one of the vertices of the primitive
+    producing the fragment
+  * code:BaryCoordKHR, which indicates that the variable is a
+    three-component floating-point vector holding barycentric weights for
+    the fragment produced using perspective interpolation
+  * code:BaryCoordNoPerspKHR, which indicates that the variable is a
+    three-component floating-point vector holding barycentric weights for
+    the fragment produced using linear interpolation
+
+When using GLSL source-based shader languages, the following variables from
+`GL_EXT_fragment_shader_barycentric` map to these SPIR-V built-in
+decorations:
+
+  * `in vec3 gl_BaryCoordEXT;` -> code:BaryCoordKHR
+  * `in vec3 gl_BaryCoordNoPerspEXT;` -> code:BaryCoordNoPerspKHR
+
+GLSL variables declared using the code:pervertexEXT GLSL qualifier are
+expected to be decorated with code:PerVertexKHR in SPIR-V.
+
+include::{generated}/interfaces/VK_KHR_fragment_shader_barycentric.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-barycoordkhr,code:BaryCoordKHR>>
+  * <<interfaces-builtin-variables-barycoordnoperspkhr,code:BaryCoordNoPerspKHR>>
+
+=== New SPIR-V Decorations
+
+  * <<shaders-interpolation-decorations-pervertexkhr,code:PerVertexKHR>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentBarycentricKHR,
+    code:FragmentBarycentricKHR>>
+
+=== Issues
+
+1) What are the interactions with MSAA and how are code:BaryCoordKHR and
+code:BaryCoordNoPerspKHR interpolated?
+
+*RESOLVED*: The inputs decorated with code:BaryCoordKHR or
+code:BaryCoordNoPerspKHR may: also be decorated with the code:Centroid or
+code:Sample qualifiers to specify interpolation, like any other fragment
+shader input.
+If <<features-shaderSampleRateInterpolationFunctions,
+pname:shaderSampleRateInterpolationFunctions>> is enabled, the extended
+instructions InterpolateAtCentroid, InterpolateAtOffset, and
+InterpolateAtSample from the GLSL.std.450 may: also be used with inputs
+decorated with code:BaryCoordKHR or code:BaryCoordNoPerspKHR.
+
+=== Version History
+
+  * Revision 1, 2022-03-10 (Stu Smith)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shading_rate.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shading_rate.adoc
new file mode 100644
index 0000000..ee39428
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_fragment_shading_rate.adoc
@@ -0,0 +1,68 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_fragment_shading_rate.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_fragment_shading_rate.html[`SPV_KHR_fragment_shading_rate`].
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_fragment_shading_rate.txt[`GL_EXT_fragment_shading_rate`]
+*Contributors*::
+  - Tobias Hector, AMD
+  - Guennadi Riguer, AMD
+  - Matthaeus Chajdas, AMD
+  - Pat Brown, Nvidia
+  - Matthew Netsch, Qualcomm
+  - Slawomir Grajewski, Intel
+  - Jan-Harald Fredriksen, Arm
+  - Jeff Bolz, Nvidia
+  - Arseny Kapoulkine, Roblox
+  - Contributors to the VK_NV_shading_rate_image specification
+  - Contributors to the VK_EXT_fragment_density_map specification
+
+=== Description
+
+This extension adds the ability to change the rate at which fragments are
+shaded.
+Rather than the usual single fragment invocation for each pixel covered by a
+primitive, multiple pixels can be shaded by a single fragment shader
+invocation.
+
+Up to three methods are available to the application to change the fragment
+shading rate:
+
+  - <<primsrast-fragment-shading-rate-pipeline>>, which allows the
+    specification of a rate per-draw.
+  - <<primsrast-fragment-shading-rate-primitive>>, which allows the
+    specification of a rate per primitive, specified during shading.
+  - <<primsrast-fragment-shading-rate-attachment>>, which allows the
+    specification of a rate per-region of the framebuffer, specified in a
+    specialized image attachment.
+
+Additionally, these rates can all be specified and combined in order to
+adjust the overall detail in the image at each point.
+
+This functionality can be used to focus shading efforts where higher levels
+of detail are needed in some parts of a scene compared to others.
+This can be particularly useful in high resolution rendering, or for XR
+contexts.
+
+This extension also adds support for the `SPV_KHR_fragment_shading_rate`
+extension which enables setting the
+<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
+rate>>, and allows querying the final shading rate from a fragment shader.
+
+include::{generated}/interfaces/VK_KHR_fragment_shading_rate.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-05-06 (Tobias Hector)
+  ** Initial revision
+  * Revision 2, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_display_properties2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_display_properties2.adoc
new file mode 100644
index 0000000..f18e906
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_display_properties2.adoc
@@ -0,0 +1,63 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_display_properties2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ian Elliott, Google
+  - James Jones, NVIDIA
+
+=== Description
+
+This extension provides new queries for device display properties and
+capabilities that can be easily extended by other extensions, without
+introducing any further queries.
+This extension can be considered the `apiext:VK_KHR_display` equivalent of
+the `apiext:VK_KHR_get_physical_device_properties2` extension.
+
+include::{generated}/interfaces/VK_KHR_get_display_properties2.adoc[]
+
+=== Issues
+
+1) What should this extension be named?
+
+*RESOLVED*: `VK_KHR_get_display_properties2`.
+Other alternatives:
+
+  * `VK_KHR_display2`
+  * One extension, combined with `VK_KHR_surface_capabilites2`.
+
+2) Should extensible input structs be added for these new functions:
+
+*RESOLVED*:
+
+  * flink:vkGetPhysicalDeviceDisplayProperties2KHR: No.
+    The only current input is a slink:VkPhysicalDevice.
+    Other inputs would not make sense.
+  * flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR: No.
+    The only current input is a slink:VkPhysicalDevice.
+    Other inputs would not make sense.
+  * flink:vkGetDisplayModeProperties2KHR: No.
+    The only current inputs are a slink:VkPhysicalDevice and a
+    slink:VkDisplayModeKHR.
+    Other inputs would not make sense.
+
+3) Should additional display query functions be extended?
+
+*RESOLVED*:
+
+  * flink:vkGetDisplayPlaneSupportedDisplaysKHR: No.
+    Extensions should instead extend
+    flink:vkGetDisplayPlaneCapabilitiesKHR().
+
+=== Version History
+
+  * Revision 1, 2017-02-21 (James Jones)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_memory_requirements2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_memory_requirements2.adoc
new file mode 100644
index 0000000..4a95df1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_memory_requirements2.adoc
@@ -0,0 +1,46 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_memory_requirements2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Jesse Hall, Google
+
+=== Description
+
+This extension provides new queries for memory requirements of images and
+buffers that can be easily extended by other extensions, without introducing
+any further entry points.
+The Vulkan 1.0 slink:VkMemoryRequirements and
+slink:VkSparseImageMemoryRequirements structures do not include pname:sType
+and pname:pNext members.
+This extension wraps them in new structures with these members, so an
+application can query a chain of memory requirements structures by
+constructing the chain and letting the implementation fill them in.
+A new command is added for each ftext:vkGet*MemoryRequrements command in
+core Vulkan 1.0.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_get_memory_requirements2.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-03-23 (Faith Ekstrand)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_physical_device_properties2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_physical_device_properties2.adoc
new file mode 100644
index 0000000..fbffdcc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_physical_device_properties2.adoc
@@ -0,0 +1,104 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_physical_device_properties2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Ian Elliott, Google
+
+=== Description
+
+This extension provides new queries for device features, device properties,
+and format properties that can be easily extended by other extensions,
+without introducing any further queries.
+The Vulkan 1.0 feature/limit/formatproperty structures do not include
+ptext:sType/ptext:pNext members.
+This extension wraps them in new structures with ptext:sType/ptext:pNext
+members, so an application can query a chain of feature/limit/formatproperty
+structures by constructing the chain and letting the implementation fill
+them in.
+A new command is added for each ftext:vkGetPhysicalDevice* command in core
+Vulkan 1.0.
+The new feature structure (and a pname:pNext chain of extending structures)
+can also be passed in to device creation to enable features.
+
+This extension also allows applications to use the physical-device
+components of device extensions before flink:vkCreateDevice is called.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_get_physical_device_properties2.adoc[]
+
+=== Examples
+
+[source,c++]
+----
+    // Get features with a hypothetical future extension.
+    VkHypotheticalExtensionFeaturesKHR hypotheticalFeatures =
+    {
+        .sType = VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,
+        .pNext = NULL,
+    };
+
+    VkPhysicalDeviceFeatures2KHR features =
+    {
+        .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
+        .pNext = &hypotheticalFeatures,
+    };
+
+    // After this call, features and hypotheticalFeatures have been filled out.
+    vkGetPhysicalDeviceFeatures2KHR(physicalDevice, &features);
+
+    // Properties/limits can be chained and queried similarly.
+
+    // Enable some features:
+    VkHypotheticalExtensionFeaturesKHR enabledHypotheticalFeatures =
+    {
+        .sType = VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,
+        .pNext = NULL,
+    };
+
+    VkPhysicalDeviceFeatures2KHR enabledFeatures =
+    {
+        .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
+        .pNext = &enabledHypotheticalFeatures,
+    };
+
+    enabledFeatures.features.xyz = VK_TRUE;
+    enabledHypotheticalFeatures.abc = VK_TRUE;
+
+    VkDeviceCreateInfo deviceCreateInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
+        .pNext = &enabledFeatures,
+        ...
+        .pEnabledFeatures = NULL,
+    };
+
+    VkDevice device;
+    vkCreateDevice(physicalDevice, &deviceCreateInfo, NULL, &device);
+----
+
+=== Version History
+
+  * Revision 1, 2016-09-12 (Jeff Bolz)
+  ** Internal revisions
+
+  * Revision 2, 2016-11-02 (Ian Elliott)
+  ** Added ability for applications to use the physical-device components of
+     device extensions before vkCreateDevice is called.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_surface_capabilities2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_surface_capabilities2.adoc
new file mode 100644
index 0000000..2a9bf81
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_get_surface_capabilities2.adoc
@@ -0,0 +1,66 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_surface_capabilities2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-27
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ian Elliott, Google
+  - James Jones, NVIDIA
+  - Alon Or-bach, Samsung
+
+=== Description
+
+This extension provides new queries for device surface capabilities that can
+be easily extended by other extensions, without introducing any further
+queries.
+This extension can be considered the `apiext:VK_KHR_surface` equivalent of
+the `apiext:VK_KHR_get_physical_device_properties2` extension.
+
+include::{generated}/interfaces/VK_KHR_get_surface_capabilities2.adoc[]
+
+=== Issues
+
+1) What should this extension be named?
+
+*RESOLVED*: `VK_KHR_get_surface_capabilities2`.
+Other alternatives:
+
+  * `VK_KHR_surface2`
+  * One extension, combining a separate display-specific query extension.
+
+2) Should additional WSI query functions be extended?
+
+*RESOLVED*:
+
+  * flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Yes.
+    The need for this motivated the extension.
+  * flink:vkGetPhysicalDeviceSurfaceSupportKHR: No.
+    Currently only has boolean output.
+    Extensions should instead extend
+    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
+  * flink:vkGetPhysicalDeviceSurfaceFormatsKHR: Yes.
+  * flink:vkGetPhysicalDeviceSurfacePresentModesKHR: No.
+    Recent discussion concluded this introduced too much variability for
+    applications to deal with.
+    Extensions should instead extend
+    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
+  * flink:vkGetPhysicalDeviceXlibPresentationSupportKHR: Not in this
+    extension.
+  * flink:vkGetPhysicalDeviceXcbPresentationSupportKHR: Not in this
+    extension.
+  * flink:vkGetPhysicalDeviceWaylandPresentationSupportKHR: Not in this
+    extension.
+  * flink:vkGetPhysicalDeviceWin32PresentationSupportKHR: Not in this
+    extension.
+
+=== Version History
+
+  * Revision 1, 2017-02-27 (James Jones)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_global_priority.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_global_priority.adoc
new file mode 100644
index 0000000..04cd6f4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_global_priority.adoc
@@ -0,0 +1,78 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_global_priority.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-10-22
+*Contributors*::
+  - Tobias Hector, AMD
+  - Contributors to `apiext:VK_EXT_global_priority`
+  - Contributors to `apiext:VK_EXT_global_priority_query`
+
+=== Description
+
+In Vulkan, users can specify device-scope queue priorities.
+In some cases it may be useful to extend this concept to a system-wide
+scope.
+This device extension allows applications to query the global queue
+priorities supported by a queue family, and then set a priority when
+creating queues.
+The default queue priority is ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.
+
+Implementations can report which global priority levels are treated
+differently by the implementation.
+It is intended primarily for use in system integration along with certain
+platform-specific priority enforcement rules.
+
+The driver implementation will attempt to skew hardware resource allocation
+in favour of the higher-priority task.
+Therefore, higher-priority work may retain similar latency and throughput
+characteristics even if the system is congested with lower priority work.
+
+The global priority level of a queue shall take precedence over the
+per-process queue priority
+(sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
+
+Abuse of this feature may result in starving the rest of the system from
+hardware resources.
+Therefore, the driver implementation may deny requests to acquire a priority
+above the default priority (ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT) if
+the caller does not have sufficient privileges.
+In this scenario ename:VK_ERROR_NOT_PERMITTED_EXT is returned.
+
+The driver implementation may fail the queue allocation request if resources
+required to complete the operation have been exhausted (either by the same
+process or a different process).
+In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+include::{generated}/interfaces/VK_KHR_global_priority.adoc[]
+
+=== Issues
+
+1) Can we additionally query whether a caller is permitted to acquire a
+specific global queue priority in this extension?
+
+*RESOLVED*: No.
+Whether a caller has enough privilege goes with the OS, and the Vulkan
+driver cannot really guarantee that the privilege will not change in between
+this query and the actual queue creation call.
+
+2) If more than 1 queue using global priority is requested, is there a good
+way to know which queue is failing the device creation?
+
+*RESOLVED*: No.
+There is not a good way at this moment, and it is also not quite actionable
+for the applications to know that because the information may not be
+accurate.
+Queue creation can fail because of runtime constraints like insufficient
+privilege or lack of resource, and the failure is not necessarily tied to
+that particular queue configuration requested.
+
+=== Version History
+
+  * Revision 1, 2021-10-22 (Tobias Hector)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_image_format_list.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_image_format_list.adoc
new file mode 100644
index 0000000..96a3ced
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_image_format_list.adoc
@@ -0,0 +1,48 @@
+// Copyright (c) 2016-2020 Intel Corporation
+//
+// SPDX-License-Identifier: Apache-2.0
+
+include::{generated}/meta/{refprefix}VK_KHR_image_format_list.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-20
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Bolz, NVIDIA
+  - Jeff Leger, Qualcomm
+  - Neil Henning, Codeplay
+
+=== Description
+
+On some implementations, setting the
+ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT on image creation can cause access
+to that image to perform worse than an equivalent image created without
+ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT because the implementation does not
+know what view formats will be paired with the image.
+
+This extension allows an application to provide the list of all formats that
+can: be used with an image when it is created.
+The implementation may then be able to create a more efficient image that
+supports the subset of formats required by the application without having to
+support all formats in the format compatibility class of the image format.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_image_format_list.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-03-20 (Faith Ekstrand)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_imageless_framebuffer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_imageless_framebuffer.adoc
new file mode 100644
index 0000000..30ed932
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_imageless_framebuffer.adoc
@@ -0,0 +1,41 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_imageless_framebuffer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-14
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Tobias Hector
+  - Graham Wihlidal
+
+=== Description
+
+This extension allows framebuffers to be created without the need for
+creating images first, allowing more flexibility in how they are used, and
+avoiding the need for many of the confusing compatibility rules.
+
+Framebuffers are now created with a small amount of additional metadata
+about the image views that will be used in
+slink:VkFramebufferAttachmentsCreateInfoKHR, and the actual image views are
+provided at render pass begin time via
+slink:VkRenderPassAttachmentBeginInfoKHR.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_imageless_framebuffer.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-12-14 (Tobias Hector)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_incremental_present.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_incremental_present.adoc
new file mode 100644
index 0000000..4a4f21b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_incremental_present.adoc
@@ -0,0 +1,97 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_incremental_present.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-11-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+  - Alon Or-bach, Samsung
+  - James Jones, NVIDIA
+  - Daniel Rakos, AMD
+  - Ray Smith, ARM
+  - Mika Isojarvi, Google
+  - Jeff Juliano, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This device extension extends flink:vkQueuePresentKHR, from the
+`apiext:VK_KHR_swapchain` extension, allowing an application to specify a
+list of rectangular, modified regions of each image to present.
+This should be used in situations where an application is only changing a
+small portion of the presentable images within a swapchain, since it enables
+the presentation engine to avoid wasting time presenting parts of the
+surface that have not changed.
+
+This extension is leveraged from the `EGL_KHR_swap_buffers_with_damage`
+extension.
+
+include::{generated}/interfaces/VK_KHR_incremental_present.adoc[]
+
+=== Issues
+
+1) How should we handle steroescopic-3D swapchains? We need to add a layer
+for each rectangle.
+One approach is to create another struct containing the slink:VkRect2D plus
+layer, and have slink:VkPresentRegionsKHR point to an array of that struct.
+Another approach is to have two parallel arrays, ptext:pRectangles and
+ptext:pLayers, where ptext:pRectangles[i] and ptext:pLayers[i] must be used
+together.
+Which approach should we use, and if the array of a new structure, what
+should that be called?
+
+*RESOLVED*: Create a new structure, which is a slink:VkRect2D plus a layer,
+and will be called slink:VkRectLayerKHR.
+
+2) Where is the origin of the slink:VkRectLayerKHR?
+
+*RESOLVED*: The upper left corner of the presentable image(s) of the
+swapchain, per the definition of framebuffer coordinates.
+
+3) Does the rectangular region, slink:VkRectLayerKHR, specify pixels of the
+swapchain's image(s), or of the surface?
+
+*RESOLVED*: Of the image(s).
+Some presentation engines may scale the pixels of a swapchain's image(s) to
+the size of the surface.
+The size of the swapchain's image(s) will be consistent, where the size of
+the surface may vary over time.
+
+4) What if all of the rectangles for a given swapchain contain a width
+and/or height of zero?
+
+*RESOLVED*: The application is indicating that no pixels changed since the
+last present.
+The presentation engine may use such a hint and not update any pixels for
+the swapchain.
+However, all other semantics of flink:vkQueuePresentKHR must still be
+honored, including waiting for semaphores to signal.
+
+5) When the swapchain is created with
+sname:VkSwapchainCreateInfoKHR::pname:preTransform set to a value other than
+ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, should the rectangular region,
+slink:VkRectLayerKHR, be transformed to align with the pname:preTransform?
+
+*RESOLVED*: No.
+The rectangular region in slink:VkRectLayerKHR should not be transformed.
+As such, it may not align with the extents of the swapchain's image(s).
+It is the responsibility of the presentation engine to transform the
+rectangular region.
+This matches the behavior of the Android presentation engine, which set the
+precedent.
+
+=== Version History
+
+  * Revision 1, 2016-11-02 (Ian Elliott)
+  ** Internal revisions
+  * Revision 2, 2021-03-18 (Ian Elliott)
+  ** Clarified alignment of rectangles for presentation engines that support
+     transformed swapchains.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance1.adoc
new file mode 100644
index 0000000..a8e2643
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance1.adoc
@@ -0,0 +1,89 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-03-13
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Dan Ginsburg, Valve
+  - Daniel Koch, NVIDIA
+  - Daniel Rakos, AMD
+  - Jan-Harald Fredriksen, ARM
+  - Faith Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Jesse Hall, Google
+  - John Kessenich, Google
+  - Michael Worcester, Imagination Technologies
+  - Neil Henning, Codeplay Software Ltd.
+  - Piers Daniell, NVIDIA
+  - Slawomir Grajewski, Intel
+  - Tobias Hector, Imagination Technologies
+  - Tom Olson, ARM
+
+=== Description
+
+`VK_KHR_maintenance1` adds a collection of minor features that were
+intentionally left out or overlooked from the original Vulkan 1.0 release.
+
+The new features are as follows:
+
+  * Allow 2D and 2D array image views to be created from 3D images, which
+    can then be used as color framebuffer attachments.
+    This allows applications to render to slices of a 3D image.
+  * Support flink:vkCmdCopyImage between 2D array layers and 3D slices.
+    This extension allows copying from layers of a 2D array image to slices
+    of a 3D image and vice versa.
+  * Allow negative height to be specified in the
+    slink:VkViewport::pname:height field to perform y-inversion of the
+    clip-space to framebuffer-space transform.
+    This allows apps to avoid having to use `gl_Position.y = -gl_Position.y`
+    in shaders also targeting other APIs.
+  * Allow implementations to express support for doing just transfers and
+    clears of image formats that they otherwise support no other format
+    features for.
+    This is done by adding new format feature flags
+    ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR and
+    ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR.
+  * Support flink:vkCmdFillBuffer on transfer-only queues.
+    Previously flink:vkCmdFillBuffer was defined to only work on command
+    buffers allocated from command pools which support graphics or compute
+    queues.
+    It is now allowed on queues that just support transfer operations.
+  * Fix the inconsistency of how error conditions are returned between the
+    flink:vkCreateGraphicsPipelines and flink:vkCreateComputePipelines
+    functions and the flink:vkAllocateDescriptorSets and
+    flink:vkAllocateCommandBuffers functions.
+  * Add new ename:VK_ERROR_OUT_OF_POOL_MEMORY_KHR error so implementations
+    can give a more precise reason for flink:vkAllocateDescriptorSets
+    failures.
+  * Add a new command flink:vkTrimCommandPoolKHR which gives the
+    implementation an opportunity to release any unused command pool memory
+    back to the system.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_maintenance1.adoc[]
+
+=== Issues
+
+  . Are viewports with zero height allowed?
++
+*RESOLVED*: Yes, although they have low utility.
+
+=== Version History
+
+  * Revision 1, 2016-10-26 (Piers Daniell)
+  ** Internal revisions
+  * Revision 2, 2018-03-13 (Jon Leech)
+  ** Add issue for zero-height viewports
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance2.adoc
new file mode 100644
index 0000000..622d83b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance2.adoc
@@ -0,0 +1,112 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Michael Worcester, Imagination Technologies
+  - Stuart Smith, Imagination Technologies
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Jan-Harald Fredriksen, ARM
+  - Daniel Rakos, AMD
+  - Neil Henning, Codeplay
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+`VK_KHR_maintenance2` adds a collection of minor features that were
+intentionally left out or overlooked from the original Vulkan 1.0 release.
+
+The new features are as follows:
+
+  * Allow the application to specify which aspect of an input attachment
+    might be read for a given subpass.
+  * Allow implementations to express the clipping behavior of points.
+  * Allow creating images with usage flags that may not be supported for the
+    base image's format, but are supported for image views of the image that
+    have a different but compatible format.
+  * Allow creating uncompressed image views of compressed images.
+  * Allow the application to select between an upper-left and lower-left
+    origin for the tessellation domain space.
+  * Adds two new image layouts for depth stencil images to allow either the
+    depth or stencil aspect to be read-only while the other aspect is
+    writable.
+
+=== Input Attachment Specification
+
+Input attachment specification allows an application to specify which aspect
+of a multi-aspect image (e.g. a depth/stencil format) will be accessed via a
+code:subpassLoad operation.
+
+On some implementations there may: be a performance penalty if the
+implementation does not know (at flink:vkCreateRenderPass time) which
+aspect(s) of multi-aspect images can: be accessed as input attachments.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_maintenance2.adoc[]
+
+=== Input Attachment Specification Example
+
+Consider the case where a render pass has two subpasses and two attachments.
+
+Attachment 0 has the format ename:VK_FORMAT_D24_UNORM_S8_UINT, attachment 1
+has some color format.
+
+Subpass 0 writes to attachment 0, subpass 1 reads only the depth information
+from attachment 0 (using inputAttachmentRead) and writes to attachment 1.
+
+[source,c++]
+----
+    VkInputAttachmentAspectReferenceKHR references[] = {
+        {
+            .subpass = 1,
+            .inputAttachmentIndex = 0,
+            .aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT
+        }
+    };
+
+    VkRenderPassInputAttachmentAspectCreateInfoKHR specifyAspects = {
+        .sType = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR,
+        .pNext = NULL,
+        .aspectReferenceCount = 1,
+        .pAspectReferences = references
+    };
+
+
+    VkRenderPassCreateInfo createInfo = {
+        ...
+        .pNext = &specifyAspects,
+        ...
+    };
+
+    vkCreateRenderPass(...);
+----
+
+=== Issues
+
+1) What is the default tessellation domain origin?
+
+*RESOLVED*: Vulkan 1.0 originally inadvertently documented a lower-left
+origin, but the conformance tests and all implementations implemented an
+upper-left origin.
+This extension adds a control to select between lower-left (for
+compatibility with OpenGL) and upper-left, and we retroactively fix
+unextended Vulkan to have a default of an upper-left origin.
+
+=== Version History
+
+  * Revision 1, 2017-04-28
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance3.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance3.adoc
new file mode 100644
index 0000000..36f7cda
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance3.adoc
@@ -0,0 +1,42 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance3.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+`VK_KHR_maintenance3` adds a collection of minor features that were
+intentionally left out or overlooked from the original Vulkan 1.0 release.
+
+The new features are as follows:
+
+  * A limit on the maximum number of descriptors that are supported in a
+    single descriptor set layout.
+    Some implementations have a limit on the total size of descriptors in a
+    set, which cannot be expressed in terms of the limits in Vulkan 1.0.
+  * A limit on the maximum size of a single memory allocation.
+    Some platforms have kernel interfaces that limit the maximum size of an
+    allocation.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_maintenance3.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-08-22
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance4.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance4.adoc
new file mode 100644
index 0000000..3be30bd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance4.adoc
@@ -0,0 +1,76 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance4.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-10-25
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+  - Requires SPIR-V 1.2 for code:LocalSizeId
+*Contributors*::
+  - Lionel Duc, NVIDIA
+  - Faith Ekstrand, Intel
+  - Spencer Fricke, Samsung
+  - Tobias Hector, AMD
+  - Lionel Landwerlin, Intel
+  - Graeme Leese, Broadcom
+  - Tom Olson, Arm
+  - Stu Smith, AMD
+  - Yiwei Zhang, Google
+
+=== Description
+
+`VK_KHR_maintenance4` adds a collection of minor features, none of which
+would warrant an entire extension of their own.
+
+The new features are as follows:
+
+  * Allow the application to destroy their slink:VkPipelineLayout object
+    immediately after it was used to create another object.
+    It is no longer necessary to keep its handle valid while the created
+    object is in use.
+  * Add a new <<limits-maxBufferSize, pname:maxBufferSize>>
+    implementation-defined limit for the maximum size sname:VkBuffer that
+    can: be created.
+  * Add support for the SPIR-V 1.2 code:LocalSizeId execution mode, which
+    can be used as an alternative to code:LocalSize to specify the local
+    workgroup size with specialization constants.
+  * Add a guarantee that images created with identical creation parameters
+    will always have the same alignment requirements.
+  * Add new flink:vkGetDeviceBufferMemoryRequirementsKHR,
+    flink:vkGetDeviceImageMemoryRequirementsKHR, and
+    flink:vkGetDeviceImageSparseMemoryRequirementsKHR to allow the
+    application to query the image memory requirements without having to
+    create an image object and query it.
+  * Relax the requirement that push constants must be initialized before
+    they are dynamically accessed.
+  * Relax the interface matching rules to allow a larger output vector to
+    match with a smaller input vector, with additional values being
+    discarded.
+  * Add a guarantee for buffer memory requirement that the size memory
+    requirement is never greater than the result of aligning create size
+    with the alignment memory requirement.
+
+include::{generated}/interfaces/VK_KHR_maintenance4.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-08-18 (Piers Daniell)
+  ** Internal revisions
+  * Revision 2, 2021-10-25 (Yiwei Zhang)
+  ** More guarantees on buffer memory requirements
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance5.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance5.adoc
new file mode 100644
index 0000000..2b57df3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_maintenance5.adoc
@@ -0,0 +1,88 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance5.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-05-02
+
+*Interactions and External Dependencies*::
+
+*Contributors*::
+  - Stu Smith, AMD
+  - Tobias Hector, AMD
+  - Shahbaz Youssefi, Google
+  - Slawomir Cygan, Intel
+  - Lionel Landwerlin, Intel
+  - James Fitzpatrick, Imagination Technologies
+  - Andrew Garrard, Imagination Technologies
+  - Ralph Potter, Samsung
+  - Pan Gao, Huawei
+  - Jan-Harald Fredriksen, ARM
+  - Jon Leech, Khronos
+  - Mike Blumenkrantz, Valve
+
+=== Description
+
+`VK_KHR_maintenance5` adds a collection of minor features, none of which
+would warrant an entire extension of their own.
+
+The new features are as follows:
+
+  * A new ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR format
+  * A new ename:VK_FORMAT_A8_UNORM_KHR format
+  * A property to indicate that multisample coverage operations are
+    performed after sample counting in EarlyFragmentTests mode
+  * Relax VkBufferView creation requirements by allowing subsets of the
+    associated VkBuffer usage using sname:VkBufferUsageFlags2CreateInfoKHR
+  * A new entry point flink:vkCmdBindIndexBuffer2KHR, allowing a range of
+    memory to be bound as an index buffer
+  * flink:vkGetDeviceProcAddr must return code:NULL for supported core
+    functions beyond the version requested by the application.
+  * A property to indicate that the sample mask test is performed after
+    sample counting in EarlyFragmentTests mode
+  * `vkCmdBindVertexBuffers2` now supports using `VK_WHOLE_SIZE` in the
+    `pSizes` parameter.
+  * A default size of 1.0 is used if code:PointSize is not written
+  * Shader modules are deprecated - applications can now pass
+    slink:VkShaderModuleCreateInfo as a chained struct to pipeline creation
+    via slink:VkPipelineShaderStageCreateInfo
+  * A function flink:vkGetRenderingAreaGranularityKHR to query the optimal
+    render area for a dynamic rendering instance.
+  * A property to indicate that depth/stencil texturing operations with
+    ename:VK_COMPONENT_SWIZZLE_ONE have defined behavior
+  * Add flink:vkGetImageSubresourceLayout2KHR and a new function
+    flink:vkGetDeviceImageSubresourceLayoutKHR to allow the application to
+    query the image memory layout without having to create an image object
+    and query it.
+  * Allow ename:VK_REMAINING_ARRAY_LAYERS as the pname:layerCount member of
+    slink:VkImageSubresourceLayers
+  * Adds stronger guarantees for propagation of ename:VK_ERROR_DEVICE_LOST
+    return values
+  * A property to indicate whether code:PointSize controls the final
+    rasterization of polygons if <<primsrast-polygonmode, polygon mode>> is
+    ename:VK_POLYGON_MODE_POINT
+  * Two properties to indicate the non-strict line rasterization algorithm
+    used
+  * Two new flags words elink:VkPipelineCreateFlagBits2KHR and
+    elink:VkBufferUsageFlagBits2KHR
+  * Physical-device-level functions can now be called with any value in the
+    valid range for a type beyond the defined enumerants, such that
+    applications can avoid checking individual features, extensions, or
+    versions before querying supported properties of a particular enumerant.
+  * Clarification that copies between images of any type are allowed,
+    treating 1D images as 2D images with a height of 1.
+
+include::{generated}/interfaces/VK_KHR_maintenance5.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2022-12-12 (Stu Smith)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_map_memory2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_map_memory2.adoc
new file mode 100644
index 0000000..5f27350
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_map_memory2.adoc
@@ -0,0 +1,32 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_map_memory2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-03-14
+*Interactions and External Dependencies*::
+  - None
+*Contributors*::
+  - Faith Ekstrand, Collabora
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension provides extensible versions of the Vulkan memory map and
+unmap entry points.
+The new entry points are functionally identical to the core entry points,
+except that their parameters are specified using extensible structures that
+can be used to pass extension-specific information.
+
+include::{generated}/interfaces/VK_KHR_map_memory2.adoc[]
+
+=== Version History
+
+  * Revision 0, 2022-08-03 (Faith Ekstrand)
+  ** Internal revisions
+  * Revision 1, 2023-03-14
+  ** Public release
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_multiview.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_multiview.adoc
new file mode 100644
index 0000000..f331c8d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_multiview.adoc
@@ -0,0 +1,78 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_multiview.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-28
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_multiview.html[`SPV_KHR_multiview`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_multiview.txt[`GL_EXT_multiview`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension has the same goal as the OpenGL ES `GL_OVR_multiview`
+extension.
+Multiview is a rendering technique originally designed for VR where it is
+more efficient to record a single set of commands to be executed with
+slightly different behavior for each "`view`".
+
+It includes a concise way to declare a render pass with multiple views, and
+gives implementations freedom to render the views in the most efficient way
+possible.
+This is done with a multiview configuration specified during <<renderpass,
+render pass>> creation with the slink:VkRenderPassMultiviewCreateInfo passed
+into slink:VkRenderPassCreateInfo::pname:pNext.
+
+This extension enables the use of the
+{spirv}/KHR/SPV_KHR_multiview.html[`SPV_KHR_multiview`] shader extension,
+which adds a new `ViewIndex` built-in type that allows shaders to control
+what to do for each view.
+If using GLSL there is also the
+{GLSLregistry}/ext/GL_EXT_multiview.txt[`GL_EXT_multiview`] extension that
+introduces a `highp int gl_ViewIndex;` built-in variable for vertex,
+tessellation, geometry, and fragment shaders.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_multiview.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-viewindex,code:ViewIndex>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-MultiView, code:MultiView>>
+
+ifdef::isrefpage[]
+
+=== Additional Resources
+
+  * https://devblogs.nvidia.com/turing-multi-view-rendering-vrworks['NVIDIA
+    blog post']
+  * https://community.arm.com/developer/tools-software/graphics/b/blog/posts/optimizing-virtual-reality-understanding-multiview['ARM
+    blog post']
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2016-10-28 (Jeff Bolz)
+  ** Internal revisions
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_object_refresh.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_object_refresh.adoc
new file mode 100644
index 0000000..f79f6e9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_object_refresh.adoc
@@ -0,0 +1,78 @@
+// Copyright (c) 2014-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_object_refresh.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-01-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Aidan Fabius, Core Avionics
+  - Mark Bellamy, ARM
+
+=== Description
+
+Many safety critical environments are required to contend with single event
+upsets (SEUs).
+These occur when a bit in a physical device's memory or register is
+inadvertently flipped.
+It is typical for host memory to include automatic error detection (EDC) or
+correction (ECC) on platforms where this a concern.
+However, device-accessible memory may not have these protections.
+In that case, the data must be periodically refreshed.
+
+Unextended Vulkan provides a variety of methods to mitigate SEUs.
+Image and buffer objects can be bound to SEU-safe memory, and many object
+types can be refreshed explicitly by the application by reloading or
+regenerating the object's data.
+However, implementations may store internal object-specific data in
+non-SEU-safe memory, and unextended Vulkan provides no clear method to
+determine which object types this applies to or how to refresh that data.
+
+This extension adds a mechanism to query which object types store
+implementation-internal data in device regions susceptible to SEUs, and to
+explicitly refresh that implementation-internal data.
+
+include::{generated}/interfaces/VK_KHR_object_refresh.adoc[]
+
+=== Issues
+
+1) Should this extension refresh object data, or validate whether or not the
+data has been corrupted?
+
+*RESOLVED* This extension should refresh data, not validate it.
+This reduces application error-handling complexity, and invalid data would
+have to be refreshed anyway.
+
+2) Should object refreshes be done using the host or with command buffers?
+
+*RESOLVED* Object refreshes should be done with command buffers.
+This reduces the synchronization complexity.
+
+3) Refresh operations will need a pipeline barrier so that subsequent
+commands will see the results of the refresh.
+What access flags and pipeline stage should apply to refresh operations?
+Should they use new flags and stages, or reuse an existing one?
+
+*RESOLVED* Object refreshes are considered to be a transfer operation for
+the purposes of pipeline barriers.
+
+4) Should this extension add a feature bit?
+
+*RESOLVED* A feature bit is not necessary.
+In the case of this extension being promoted to core, implementations that
+do not support or require refreshing of any object types will return 0 for
+the pname:count parameter of
+fname:vkGetPhysicalDeviceRefreshableObjectTypesKHR.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2020-01-14
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_performance_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_performance_query.adoc
new file mode 100644
index 0000000..23f098d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_performance_query.adoc
@@ -0,0 +1,325 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_performance_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-10-08
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jesse Barker, Unity Technologies
+  - Kenneth Benzie, Codeplay
+  - Jan-Harald Fredriksen, ARM
+  - Jeff Leger, Qualcomm
+  - Jesse Hall, Google
+  - Tobias Hector, AMD
+  - Neil Henning, Codeplay
+  - Baldur Karlsson
+  - Lionel Landwerlin, Intel
+  - Peter Lohrmann, AMD
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Niklas Smedberg, Unity Technologies
+  - Igor Ostrowski, Intel
+
+=== Description
+
+The `VK_KHR_performance_query` extension adds a mechanism to allow querying
+of performance counters for use in applications and by profiling tools.
+
+Each queue family may: expose counters that can: be enabled on a queue of
+that family.
+We extend elink:VkQueryType to add a new query type for performance queries,
+and chain a structure on slink:VkQueryPoolCreateInfo to specify the
+performance queries to enable.
+
+include::{generated}/interfaces/VK_KHR_performance_query.adoc[]
+
+=== Issues
+
+1) Should this extension include a mechanism to begin a query in command
+buffer _A_ and end the query in command buffer _B_?
+
+*RESOLVED* No - queries are tied to command buffer creation and thus have to
+be encapsulated within a single command buffer.
+
+2) Should this extension include a mechanism to begin and end queries
+globally on the queue, not using the existing command buffer commands?
+
+*RESOLVED* No - for the same reasoning as the resolution of 1).
+
+3) Should this extension expose counters that require multiple passes?
+
+*RESOLVED* Yes - users should re-submit a command buffer with the same
+commands in it multiple times, specifying the pass to count as the query
+parameter in VkPerformanceQuerySubmitInfoKHR.
+
+4) How to handle counters across parallel workloads?
+
+*RESOLVED* In the spirit of Vulkan, a counter description flag
+ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR
+denotes that the accuracy of a counter result is affected by parallel
+workloads.
+
+5) How to handle secondary command buffers?
+
+*RESOLVED* Secondary command buffers inherit any counter pass index
+specified in the parent primary command buffer.
+Note: this is no longer an issue after change from issue 10 resolution
+
+6) What commands does the profiling lock have to be held for?
+
+*RESOLVED* For any command buffer that is being queried with a performance
+query pool, the profiling lock must: be held while that command buffer is in
+the _recording_, _executable_, or _pending state_.
+
+7) Should we support flink:vkCmdCopyQueryPoolResults?
+
+*RESOLVED* Yes.
+
+8) Should we allow performance queries to interact with multiview?
+
+*RESOLVED* Yes, but the performance queries must be performed once for each
+pass per view.
+
+9) Should a `queryCount > 1` be usable for performance queries?
+
+*RESOLVED* Yes.
+Some vendors will have costly performance counter query pool creation, and
+would rather if a certain set of counters were to be used multiple times
+that a `queryCount > 1` can be used to amortize the instantiation cost.
+
+10) Should we introduce an indirect mechanism to set the counter pass index?
+
+*RESOLVED* Specify the counter pass index at submit time instead, to avoid
+requiring re-recording of command buffers when multiple counter passes are
+needed.
+
+
+=== Examples
+
+The following example shows how to find what performance counters a queue
+family supports, setup a query pool to record these performance counters,
+how to add the query pool to the command buffer to record information, and
+how to get the results from the query pool.
+
+[source,c++]
+----
+// A previously created physical device
+VkPhysicalDevice physicalDevice;
+
+// One of the queue families our device supports
+uint32_t queueFamilyIndex;
+
+uint32_t counterCount;
+
+// Get the count of counters supported
+vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
+  physicalDevice,
+  queueFamilyIndex,
+  &counterCount,
+  NULL,
+  NULL);
+
+VkPerformanceCounterKHR* counters =
+  malloc(sizeof(VkPerformanceCounterKHR) * counterCount);
+VkPerformanceCounterDescriptionKHR* counterDescriptions =
+  malloc(sizeof(VkPerformanceCounterDescriptionKHR) * counterCount);
+
+// Get the counters supported
+vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
+  physicalDevice,
+  queueFamilyIndex,
+  &counterCount,
+  counters,
+  counterDescriptions);
+
+// Try to enable the first 8 counters
+uint32_t enabledCounters[8];
+
+const uint32_t enabledCounterCount = min(counterCount, 8));
+
+for (uint32_t i = 0; i < enabledCounterCount; i++) {
+  enabledCounters[i] = i;
+}
+
+// A previously created device that had the performanceCounterQueryPools feature
+// set to VK_TRUE
+VkDevice device;
+
+VkQueryPoolPerformanceCreateInfoKHR performanceQueryCreateInfo = {
+  .sType = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR,
+  .pNext = NULL,
+
+  // Specify the queue family that this performance query is performed on
+  .queueFamilyIndex = queueFamilyIndex,
+
+  // The number of counters to enable
+  .counterIndexCount = enabledCounterCount,
+
+  // The array of indices of counters to enable
+  .pCounterIndices = enabledCounters
+};
+
+
+// Get the number of passes our counters will require.
+uint32_t numPasses;
+
+vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
+  physicalDevice,
+  &performanceQueryCreateInfo,
+  &numPasses);
+
+VkQueryPoolCreateInfo queryPoolCreateInfo = {
+  .sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
+  .pNext = &performanceQueryCreateInfo,
+  .flags = 0,
+  // Using our new query type here
+  .queryType = VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
+  .queryCount = 1,
+  .pipelineStatistics = 0
+};
+
+VkQueryPool queryPool;
+
+VkResult result = vkCreateQueryPool(
+  device,
+  &queryPoolCreateInfo,
+  NULL,
+  &queryPool);
+
+assert(VK_SUCCESS == result);
+
+// A queue from queueFamilyIndex
+VkQueue queue;
+
+// A command buffer we want to record counters on
+VkCommandBuffer commandBuffer;
+
+VkCommandBufferBeginInfo commandBufferBeginInfo = {
+  .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+  .pNext = NULL,
+  .flags = 0,
+  .pInheritanceInfo = NULL
+};
+
+VkAcquireProfilingLockInfoKHR lockInfo = {
+  .sType = VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR,
+  .pNext = NULL,
+  .flags = 0,
+  .timeout = UINT64_MAX // Wait forever for the lock
+};
+
+// Acquire the profiling lock before we record command buffers
+// that will use performance queries
+
+result = vkAcquireProfilingLockKHR(device, &lockInfo);
+
+assert(VK_SUCCESS == result);
+
+result = vkBeginCommandBuffer(commandBuffer, &commandBufferBeginInfo);
+
+assert(VK_SUCCESS == result);
+
+vkCmdResetQueryPool(
+  commandBuffer,
+  queryPool,
+  0,
+  1);
+
+vkCmdBeginQuery(
+  commandBuffer,
+  queryPool,
+  0,
+  0);
+
+// Perform the commands you want to get performance information on
+// ...
+
+// Perform a barrier to ensure all previous commands were complete before
+// ending the query
+vkCmdPipelineBarrier(commandBuffer,
+  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
+  VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
+  0,
+  0,
+  NULL,
+  0,
+  NULL,
+  0,
+  NULL);
+
+vkCmdEndQuery(
+  commandBuffer,
+  queryPool,
+  0);
+
+result = vkEndCommandBuffer(commandBuffer);
+
+assert(VK_SUCCESS == result);
+
+for (uint32_t counterPass = 0; counterPass < numPasses; counterPass++) {
+
+  VkPerformanceQuerySubmitInfoKHR performanceQuerySubmitInfo = {
+    VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR,
+    NULL,
+    counterPass
+  };
+
+
+  // Submit the command buffer and wait for its completion
+  // ...
+}
+
+// Release the profiling lock after the command buffer is no longer in the
+// pending state.
+vkReleaseProfilingLockKHR(device);
+
+result = vkResetCommandBuffer(commandBuffer, 0);
+
+assert(VK_SUCCESS == result);
+
+// Create an array to hold the results of all counters
+VkPerformanceCounterResultKHR* recordedCounters = malloc(
+  sizeof(VkPerformanceCounterResultKHR) * enabledCounterCount);
+
+result = vkGetQueryPoolResults(
+  device,
+  queryPool,
+  0,
+  1,
+  sizeof(VkPerformanceCounterResultKHR) * enabledCounterCount,
+  recordedCounters,
+  sizeof(VkPerformanceCounterResultKHR) * enabledCounterCount,
+  NULL);
+
+// recordedCounters is filled with our counters, we will look at one for posterity
+switch (counters[0].storage) {
+  case VK_PERFORMANCE_COUNTER_STORAGE_INT32:
+    // use recordCounters[0].int32 to get at the counter result!
+    break;
+  case VK_PERFORMANCE_COUNTER_STORAGE_INT64:
+    // use recordCounters[0].int64 to get at the counter result!
+    break;
+  case VK_PERFORMANCE_COUNTER_STORAGE_UINT32:
+    // use recordCounters[0].uint32 to get at the counter result!
+    break;
+  case VK_PERFORMANCE_COUNTER_STORAGE_UINT64:
+    // use recordCounters[0].uint64 to get at the counter result!
+    break;
+  case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32:
+    // use recordCounters[0].float32 to get at the counter result!
+    break;
+  case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64:
+    // use recordCounters[0].float64 to get at the counter result!
+    break;
+}
+----
+
+=== Version History
+
+  * Revision 1, 2019-10-08
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_executable_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_executable_properties.adoc
new file mode 100644
index 0000000..e0e2e43
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_executable_properties.adoc
@@ -0,0 +1,57 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_pipeline_executable_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-28
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Ian Romanick, Intel
+  - Kenneth Graunke, Intel
+  - Baldur Karlsson, Valve
+  - Jesse Hall, Google
+  - Jeff Bolz, Nvidia
+  - Piers Daniel, Nvidia
+  - Tobias Hector, AMD
+  - Jan-Harald Fredriksen, ARM
+  - Tom Olson, ARM
+  - Daniel Koch, Nvidia
+  - Spencer Fricke, Samsung
+
+=== Description
+
+When a pipeline is created, its state and shaders are compiled into zero or
+more device-specific executables, which are used when executing commands
+against that pipeline.
+This extension adds a mechanism to query properties and statistics about the
+different executables produced by the pipeline compilation process.
+This is intended to be used by debugging and performance tools to allow them
+to provide more detailed information to the user.
+Certain compile time shader statistics provided through this extension may
+be useful to developers for debugging or performance analysis.
+
+include::{generated}/interfaces/VK_KHR_pipeline_executable_properties.adoc[]
+
+=== Issues
+
+1) What should we call the pieces of the pipeline which are produced by the
+compilation process and about which you can query properties and statistics?
+
+*RESOLVED*: Call them "`executables`".
+The name "`binary`" was used in early drafts of the extension but it was
+determined that "`pipeline binary`" could have a fairly broad meaning (such
+as a binary serialized form of an entire pipeline) and was too big of a
+namespace for the very specific needs of this extension.
+
+
+=== Version History
+
+  * Revision 1, 2019-05-28 (Faith Ekstrand)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_library.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_library.adoc
new file mode 100644
index 0000000..499c63f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_pipeline_library.adoc
@@ -0,0 +1,30 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_pipeline_library.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-01-08
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - See contributors to `apiext:VK_KHR_ray_tracing_pipeline`
+
+=== Description
+
+A pipeline library is a special pipeline that cannot be bound, instead it
+defines a set of shaders and shader groups which can be linked into other
+pipelines.
+This extension defines the infrastructure for pipeline libraries, but does
+not specify the creation or usage of pipeline libraries.
+This is left to additional dependent extensions.
+
+include::{generated}/interfaces/VK_KHR_pipeline_library.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-01-08 (Christoph Kubisch)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_enumeration.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_enumeration.adoc
new file mode 100644
index 0000000..60bdc70
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_enumeration.adoc
@@ -0,0 +1,39 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_portability_enumeration.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-02
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with `apiext:VK_KHR_portability_subset`
+*Contributors*::
+  - Lenny Komow, LunarG
+  - Charles Giessen, LunarG
+
+=== Description
+
+This extension allows applications to control whether devices that expose
+the `apiext:VK_KHR_portability_subset` extension are included in the results
+of physical device enumeration.
+Since devices which support the `apiext:VK_KHR_portability_subset` extension
+are not fully conformant Vulkan implementations, the Vulkan loader does not
+report those devices unless the application explicitly asks for them.
+This prevents applications which may not be aware of non-conformant devices
+from accidentally using them, as any device which supports the
+`apiext:VK_KHR_portability_subset` extension mandates that the extension
+must be enabled if that device is used.
+
+This extension is implemented in the loader.
+
+include::{generated}/interfaces/VK_KHR_portability_enumeration.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-06-02 (Lenny Komow)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_subset.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_subset.adoc
new file mode 100644
index 0000000..5400424
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_portability_subset.adoc
@@ -0,0 +1,65 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_portability_subset.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Bill Hollings, The Brenwill Workshop Ltd.
+  - Daniel Koch, NVIDIA
+  - Dzmitry Malyshau, Mozilla
+  - Chip Davis, CodeWeavers
+  - Dan Ginsburg, Valve
+  - Mike Weiblen, LunarG
+  - Neil Trevett, NVIDIA
+  - Alexey Knyazev, Independent
+
+=== Description
+
+The `apiext:VK_KHR_portability_subset` extension allows a non-conformant
+Vulkan implementation to be built on top of another non-Vulkan graphics API,
+and identifies differences between that implementation and a
+fully-conformant native Vulkan implementation.
+
+This extension provides Vulkan implementations with the ability to mark
+otherwise-required capabilities as unsupported, or to establish additional
+properties and limits that the application should adhere to in order to
+guarantee portable behaviour and operation across platforms, including
+platforms where Vulkan is not natively supported.
+
+The goal of this specification is to document, and make queryable,
+capabilities which are required to be supported by a fully-conformant Vulkan
+1.0 implementation, but may be optional for an implementation of the Vulkan
+1.0 Portability Subset.
+
+The intent is that this extension will be advertised only on implementations
+of the Vulkan 1.0 Portability Subset, and not on conformant implementations
+of Vulkan 1.0.
+Fully-conformant Vulkan implementations provide all the required
+capabilities, and so will not provide this extension.
+Therefore, the existence of this extension can be used to determine that an
+implementation is likely not fully conformant with the Vulkan spec.
+
+If this extension is supported by the Vulkan implementation, the application
+must enable this extension.
+
+This extension defines several new structures that can be chained to the
+existing structures used by certain standard Vulkan calls, in order to query
+for non-conformant portable behavior.
+
+include::{generated}/interfaces/VK_KHR_portability_subset.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2020-07-21 (Bill Hollings)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_id.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_id.adoc
new file mode 100644
index 0000000..5e15a31
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_id.adoc
@@ -0,0 +1,37 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_present_id.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-15
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Keith Packard, Valve
+  - Ian Elliott, Google
+  - Alon Or-bach, Samsung
+
+=== Description
+
+This device extension allows an application that uses the
+`apiext:VK_KHR_swapchain` extension to provide an identifier for present
+operations on a swapchain.
+An application can: use this to reference specific present operations in
+other extensions.
+
+include::{generated}/interfaces/VK_KHR_present_id.adoc[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+=== Version History
+
+  * Revision 1, 2019-05-15 (Keith Packard)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_wait.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_wait.adoc
new file mode 100644
index 0000000..e5088b6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_present_wait.adoc
@@ -0,0 +1,82 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_present_wait.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-15
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Keith Packard, Valve
+  - Ian Elliott, Google
+  - Tobias Hector, AMD
+  - Daniel Stone, Collabora
+
+=== Description
+
+This device extension allows an application that uses the
+`apiext:VK_KHR_swapchain` extension to wait for present operations to
+complete.
+An application can use this to monitor and control the pacing of the
+application by managing the number of outstanding images yet to be
+presented.
+
+include::{generated}/interfaces/VK_KHR_present_wait.adoc[]
+
+=== Issues
+
+1) When does the wait finish?
+
+*RESOLVED*.
+The wait will finish when the present is visible to the user.
+There is no requirement for any precise timing relationship between the
+presentation of the image to the user, but implementations should: signal
+the wait as close as possible to the presentation of the first pixel in the
+new image to the user.
+
+2) Should this use fences or other existing synchronization mechanism.
+
+*RESOLVED*.
+Because display and rendering are often implemented in separate drivers,
+this extension will provide a separate synchronization API.
+
+3) Should this extension share present identification with other extensions?
+
+*RESOLVED*.
+Yes.
+A new extension, VK_KHR_present_id, should be created to provide a shared
+structure for presentation identifiers.
+
+4) What happens when presentations complete out of order wrt calls to
+vkQueuePresent? This could happen if the semaphores for the presentations
+were ready out of order.
+
+*OPTION A*: Require that when a PresentId is set that the driver ensure that
+images are always presented in the order of calls to vkQueuePresent.
+
+*OPTION B*: Finish both waits when the earliest present completes.
+This will complete the later present wait earlier than the actual
+presentation.
+This should be the easiest to implement as the driver need only track the
+largest present ID completed.
+This is also the 'natural' consequence of interpreting the existing
+vkWaitForPresentKHR specificationn.
+
+*OPTION C*: Finish both waits when both have completed.
+This will complete the earlier presentation later than the actual
+presentation time.
+This is allowed by the current specification as there is no precise timing
+requirement for when the presentId value is updated.
+This requires slightly more complexity in the driver as it will need to
+track all outstanding presentId values.
+
+=== Examples
+
+=== Version History
+
+  * Revision 1, 2019-02-19 (Keith Packard)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_push_descriptor.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_push_descriptor.adoc
new file mode 100644
index 0000000..e82669f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_push_descriptor.adoc
@@ -0,0 +1,32 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_push_descriptor.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-12
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Michael Worcester, Imagination Technologies
+
+=== Description
+
+This extension allows descriptors to be written into the command buffer,
+while the implementation is responsible for managing their memory.
+Push descriptors may enable easier porting from older APIs and in some cases
+can be more efficient than writing descriptors into descriptor sets.
+
+include::{generated}/interfaces/VK_KHR_push_descriptor.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-10-15 (Jeff Bolz)
+  ** Internal revisions
+
+  * Revision 2, 2017-09-12 (Tobias Hector)
+  ** Added interactions with Vulkan 1.1
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_query.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_query.adoc
new file mode 100644
index 0000000..39f91f4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_query.adoc
@@ -0,0 +1,139 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_query.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-12
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_ray_query.html[`SPV_KHR_ray_query`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_ray_query.txt[`GLSL_EXT_ray_query`]
+*Contributors*::
+  - Matthäus Chajdas, AMD
+  - Greg Grebe, AMD
+  - Nicolai Hähnle, AMD
+  - Tobias Hector, AMD
+  - Dave Oldcorn, AMD
+  - Skyler Saleh, AMD
+  - Mathieu Robart, Arm
+  - Marius Bjorge, Arm
+  - Tom Olson, Arm
+  - Sebastian Tafuri, EA
+  - Henrik Rydgard, Embark
+  - Juan Cañada, Epic Games
+  - Patrick Kelly, Epic Games
+  - Yuriy O'Donnell, Epic Games
+  - Michael Doggett, Facebook/Oculus
+  - Andrew Garrard, Imagination
+  - Don Scorgie, Imagination
+  - Dae Kim, Imagination
+  - Joshua Barczak, Intel
+  - Slawek Grajewski, Intel
+  - Jeff Bolz, NVIDIA
+  - Pascal Gautron, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Ashwin Lele, NVIDIA
+  - Robert Stepinski, NVIDIA
+  - Martin Stich, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Eric Werness, NVIDIA
+  - Jon Leech, Khronos
+  - Jeroen van Schijndel, OTOY
+  - Juul Joosten, OTOY
+  - Alex Bourd, Qualcomm
+  - Roman Larionov, Qualcomm
+  - David McAllister, Qualcomm
+  - Spencer Fricke, Samsung
+  - Lewis Gordon, Samsung
+  - Ralph Potter, Samsung
+  - Jasper Bekkers, Traverse Research
+  - Jesse Barker, Unity
+  - Baldur Karlsson, Valve
+
+=== Description
+
+Rasterization has been the dominant method to produce interactive graphics,
+but increasing performance of graphics hardware has made ray tracing a
+viable option for interactive rendering.
+Being able to integrate ray tracing with traditional rasterization makes it
+easier for applications to incrementally add ray traced effects to existing
+applications or to do hybrid approaches with rasterization for primary
+visibility and ray tracing for secondary queries.
+
+Ray queries are available to all shader types, including graphics, compute
+and ray tracing pipelines.
+Ray queries are not able to launch additional shaders, instead returning
+traversal results to the calling shader.
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_ray_query`
+
+include::{generated}/interfaces/VK_KHR_ray_query.adoc[]
+
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayQueryKHR, code:RayQueryKHR>>
+  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,
+    code:RayTraversalPrimitiveCullingKHR>>
+
+
+=== Sample Code
+
+Example of ray query in a GLSL shader, illustrating how to use ray queries
+to determine whether a given position (at ray origin) is in shadow or not,
+by tracing a ray towards the light, and checking for any intersections with
+geometry occluding the light.
+
+[source,c]
+----
+rayQueryEXT rq;
+
+rayQueryInitializeEXT(rq, accStruct, gl_RayFlagsTerminateOnFirstHitEXT, cullMask, origin, tMin, direction, tMax);
+
+// Traverse the acceleration structure and store information about the first intersection (if any)
+rayQueryProceedEXT(rq);
+
+if (rayQueryGetIntersectionTypeEXT(rq, true) == gl_RayQueryCommittedIntersectionNoneEXT) {
+    // Not in shadow
+}
+----
+
+=== Issues
+
+(1) What are the changes between the public provisional (VK_KHR_ray_tracing
+v8) release and the final (VK_KHR_acceleration_structure v11 /
+VK_KHR_ray_query v1) release?
+--
+  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
+    flexibility and decoupling ray query support from ray pipelines:
+  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
+     operations)
+  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
+     shader stages)
+  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
+  * Update SPIRV capabilities to use code:RayQueryKHR
+  * extension is no longer provisional
+--
+
+
+=== Version History
+
+  * Revision 1, 2020-11-12 (Mathieu Robart, Daniel Koch, Andrew Garrard)
+  ** Decomposition of the specification, from VK_KHR_ray_tracing to
+     VK_KHR_ray_query (#1918,!3912)
+  ** update to use code:RayQueryKHR SPIR-V capability
+  ** add numerical limits for ray parameters (#2235,!3960)
+  ** relax formula for ray intersection candidate determination
+     (#2322,!4080)
+  ** restrict traces to TLAS (#2239,!4141)
+  ** require code:HitT to be in ray interval for
+     code:OpRayQueryGenerateIntersectionKHR (#2359,!4146)
+  ** add ray query shader stages for AS read bit (#2407,!4203)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_maintenance1.adoc
new file mode 100644
index 0000000..3ac6cb1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_maintenance1.adoc
@@ -0,0 +1,85 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_tracing_maintenance1.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-02-21
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_ray_cull_mask.html[`SPV_KHR_ray_cull_mask`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_ray_cull_mask.txt[`GLSL_EXT_ray_cull_mask`]
+  - Interacts with `apiext:VK_KHR_ray_tracing_pipeline`
+  - Interacts with `apiext:VK_KHR_synchronization2`
+*Contributors*::
+  - Stu Smith, AMD
+  - Tobias Hector, AMD
+  - Marius Bjorge, Arm
+  - Tom Olson, Arm
+  - Yuriy O’Donnell, Epic Games
+  - Yunpeng Zhu, Huawei
+  - Andrew Garrard, Imagination
+  - Dae Kim, Imagination
+  - Joshua Barczak, Intel
+  - Lionel Landwerlin, Intel
+  - Daniel Koch, NVIDIA
+  - Eric Werness, NVIDIA
+  - Spencer Fricke, Samsung
+
+=== Description
+
+`VK_KHR_ray_tracing_maintenance1` adds a collection of minor ray tracing
+features, none of which would warrant an entire extension of their own.
+
+The new features are as follows:
+
+  * Adds support for the `SPV_KHR_ray_cull_mask` SPIR-V extension in Vulkan.
+    This extension provides access to built-in code:CullMaskKHR shader
+    variable which contains the value of the code:OpTrace* `Cull Mask`
+    parameter.
+    This new shader variable is accessible in the intersection, any-hit,
+    closest-hit and miss shader stages.
+  * Adds support for a new pipeline stage and access mask built on top of
+    `apiext:VK_KHR_synchronization2`:
+  ** ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR to
+     specify execution of <<acceleration-structure-copying, acceleration
+     structure copy commands>>
+  ** ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR to specify read
+     access to a <<shader-binding-table, shader binding table>> in any
+     shader pipeline stage
+  * Adds two new acceleration structure query parameters:
+  ** ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR to query the
+     acceleration structure size on the device timeline
+  ** ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
+     to query the number of bottom level acceleration structure pointers for
+     serialization
+  * Adds an optional new indirect ray tracing dispatch command,
+    flink:vkCmdTraceRaysIndirect2KHR, which sources the shader binding table
+    parameters as well as the dispatch dimensions from the device.
+    The <<features-rayTracingPipelineTraceRaysIndirect2,
+    pname:rayTracingPipelineTraceRaysIndirect2>> feature indicates whether
+    this functionality is supported.
+
+
+include::{generated}/interfaces/VK_KHR_ray_tracing_maintenance1.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-cullmask,code:CullMaskKHR>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayCullMaskKHR, code:RayCullMaskKHR>>
+
+=== Issues
+
+None Yet!
+
+=== Version History
+
+  * Revision 1, 2022-02-21 (Members of the Vulkan Ray Tracing TSG)
+  ** internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_pipeline.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_pipeline.adoc
new file mode 100644
index 0000000..15d3935
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_pipeline.adoc
@@ -0,0 +1,394 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_tracing_pipeline.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-12
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_ray_tracing.html[`SPV_KHR_ray_tracing`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_ray_tracing.txt[`GLSL_EXT_ray_tracing`]
+  - This extension interacts with <<versions-1.2, Vulkan 1.2>> and
+    `apiext:VK_KHR_vulkan_memory_model`, adding the <<shader-call-related,
+    shader-call-related>> relation of invocations, <<shader-call-order,
+    shader-call-order>> partial order of dynamic instances of instructions,
+    and the <<shaders-scope-shadercall, code:ShaderCallKHR>> scope.
+  - This extension interacts with `apiext:VK_KHR_pipeline_library`, enabling
+    pipeline libraries to be used with ray tracing pipelines and enabling
+    usage of slink:VkRayTracingPipelineInterfaceCreateInfoKHR.
+*Contributors*::
+  - Matthäus Chajdas, AMD
+  - Greg Grebe, AMD
+  - Nicolai Hähnle, AMD
+  - Tobias Hector, AMD
+  - Dave Oldcorn, AMD
+  - Skyler Saleh, AMD
+  - Mathieu Robart, Arm
+  - Marius Bjorge, Arm
+  - Tom Olson, Arm
+  - Sebastian Tafuri, EA
+  - Henrik Rydgard, Embark
+  - Juan Cañada, Epic Games
+  - Patrick Kelly, Epic Games
+  - Yuriy O'Donnell, Epic Games
+  - Michael Doggett, Facebook/Oculus
+  - Andrew Garrard, Imagination
+  - Don Scorgie, Imagination
+  - Dae Kim, Imagination
+  - Joshua Barczak, Intel
+  - Slawek Grajewski, Intel
+  - Jeff Bolz, NVIDIA
+  - Pascal Gautron, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Ashwin Lele, NVIDIA
+  - Robert Stepinski, NVIDIA
+  - Martin Stich, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Eric Werness, NVIDIA
+  - Jon Leech, Khronos
+  - Jeroen van Schijndel, OTOY
+  - Juul Joosten, OTOY
+  - Alex Bourd, Qualcomm
+  - Roman Larionov, Qualcomm
+  - David McAllister, Qualcomm
+  - Spencer Fricke, Samsung
+  - Lewis Gordon, Samsung
+  - Ralph Potter, Samsung
+  - Jasper Bekkers, Traverse Research
+  - Jesse Barker, Unity
+  - Baldur Karlsson, Valve
+
+=== Description
+
+Rasterization has been the dominant method to produce interactive graphics,
+but increasing performance of graphics hardware has made ray tracing a
+viable option for interactive rendering.
+Being able to integrate ray tracing with traditional rasterization makes it
+easier for applications to incrementally add ray traced effects to existing
+applications or to do hybrid approaches with rasterization for primary
+visibility and ray tracing for secondary queries.
+
+To enable ray tracing, this extension adds a few different categories of new
+functionality:
+
+  * A new ray tracing pipeline type with new shader domains: ray generation,
+    intersection, any-hit, closest hit, miss, and callable
+  * A shader binding indirection table to link shader groups with
+    acceleration structure items
+  * Ray tracing commands which initiate the ray pipeline traversal and
+    invocation of the various new shader domains depending on which
+    traversal conditions are met
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_ray_tracing`
+
+include::{generated}/interfaces/VK_KHR_ray_tracing_pipeline.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-launchid,code:LaunchIdKHR>>
+  * <<interfaces-builtin-variables-launchsize,code:LaunchSizeKHR>>
+  * <<interfaces-builtin-variables-worldrayorigin,code:WorldRayOriginKHR>>
+  * <<interfaces-builtin-variables-worldraydirection,code:WorldRayDirectionKHR>>
+  * <<interfaces-builtin-variables-objectrayorigin,code:ObjectRayOriginKHR>>
+  * <<interfaces-builtin-variables-objectraydirection,code:ObjectRayDirectionKHR>>
+  * <<interfaces-builtin-variables-raytmin,code:RayTminKHR>>
+  * <<interfaces-builtin-variables-raytmax,code:RayTmaxKHR>>
+  * <<interfaces-builtin-variables-instancecustomindex,code:InstanceCustomIndexKHR>>
+  * <<interfaces-builtin-variables-instanceid,code:InstanceId>>
+  * <<interfaces-builtin-variables-objecttoworld,code:ObjectToWorldKHR>>
+  * <<interfaces-builtin-variables-worldtoobject,code:WorldToObjectKHR>>
+  * <<interfaces-builtin-variables-hitkind,code:HitKindKHR>>
+  * <<interfaces-builtin-variables-incomingrayflags,code:IncomingRayFlagsKHR>>
+  * <<interfaces-builtin-variables-raygeometryindex,code:RayGeometryIndexKHR>>
+  * (modified)code:PrimitiveId
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayTracingKHR, code:RayTracingKHR>>
+  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,
+    code:RayTraversalPrimitiveCullingKHR>>
+
+=== Issues
+
+(1) How does this extension differ from VK_NV_ray_tracing?
+--
+*DISCUSSION*:
+
+The following is a summary of the main functional differences between
+VK_KHR_ray_tracing_pipeline and VK_NV_ray_tracing:
+
+  * added support for indirect ray tracing (flink:vkCmdTraceRaysIndirectKHR)
+  * uses SPV_KHR_ray_tracing instead of SPV_NV_ray_tracing
+  ** refer to KHR SPIR-V enums instead of NV SPIR-V enums (which are
+     functionally equivalent and aliased to the same values).
+  ** added code:RayGeometryIndexKHR built-in
+  * removed vkCompileDeferredNV compilation functionality and replaced with
+    <<deferred-host-operations, deferred host operations>> interactions for
+    ray tracing
+  * added slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure
+  * extended slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure
+  ** renamed pname:maxRecursionDepth to pname:maxRayRecursionDepth and it
+     has a minimum of 1 instead of 31
+  ** require pname:shaderGroupHandleSize to be 32 bytes
+  ** added pname:maxRayDispatchInvocationCount,
+     pname:shaderGroupHandleAlignment and pname:maxRayHitAttributeSize
+  * reworked geometry structures so they could be better shared between
+    device, host, and indirect builds
+  * changed SBT parameters to a structure and added size
+    (slink:VkStridedDeviceAddressRegionKHR)
+  * add parameter for requesting memory requirements for host and/or device
+    build
+  * added <<pipelines-library,pipeline library>> support for ray tracing
+  * added <<ray-traversal-watertight, watertightness guarantees>>
+  * added no-null-shader pipeline flags
+    (etext:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_*_SHADERS_BIT_KHR)
+  * added <<ray-tracing-shader-call,memory model interactions>> with ray
+    tracing and define how subgroups work and can be repacked
+--
+
+ifdef::VK_NV_ray_tracing[]
+(2) Can you give a more detailed comparison of differences and similarities
+between VK_NV_ray_tracing and VK_KHR_ray_tracing_pipeline?
+--
+*DISCUSSION*:
+
+The following is a more detailed comparison of which commands, structures,
+and enums are aliased, changed, or removed.
+
+  * Aliased functionality -- enums, structures, and commands that are
+    considered equivalent:
+  ** elink:VkRayTracingShaderGroupTypeNV {harr}
+     elink:VkRayTracingShaderGroupTypeKHR
+  ** flink:vkGetRayTracingShaderGroupHandlesNV {harr}
+     flink:vkGetRayTracingShaderGroupHandlesKHR
+
+  * Changed enums, structures, and commands:
+  ** slink:VkRayTracingShaderGroupCreateInfoNV ->
+     slink:VkRayTracingShaderGroupCreateInfoKHR (added
+     pname:pShaderGroupCaptureReplayHandle)
+  ** slink:VkRayTracingPipelineCreateInfoNV ->
+     slink:VkRayTracingPipelineCreateInfoKHR (changed type of pname:pGroups,
+     added pname:libraries, pname:pLibraryInterface, and
+     pname:pDynamicState)
+  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
+     VkPhysicalDeviceRayTracingPropertiesKHR (renamed pname:maxTriangleCount
+     to pname:maxPrimitiveCount, added
+     pname:shaderGroupHandleCaptureReplaySize)
+  ** flink:vkCmdTraceRaysNV -> flink:vkCmdTraceRaysKHR (params to struct)
+  ** flink:vkCreateRayTracingPipelinesNV ->
+     flink:vkCreateRayTracingPipelinesKHR (different struct, changed
+     functionality)
+
+  * Added enums, structures and commands:
+  ** ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR,
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR,
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR to
+     elink:VkPipelineCreateFlagBits
+  ** slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure
+  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
+     unions
+  ** slink:VkPipelineLibraryCreateInfoKHR struct
+  ** slink:VkRayTracingPipelineInterfaceCreateInfoKHR struct
+  ** slink:VkStridedDeviceAddressRegionKHR struct
+  ** flink:vkCmdTraceRaysIndirectKHR command and
+     slink:VkTraceRaysIndirectCommandKHR struct
+  ** flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR (shader group
+     capture/replay)
+  ** flink:vkCmdSetRayTracingPipelineStackSizeKHR and
+     flink:vkGetRayTracingShaderGroupStackSizeKHR commands for stack size
+     control
+
+  * Functionality removed:
+  ** ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
+  ** flink:vkCompileDeferredNV command (replaced with
+     `apiext:VK_KHR_deferred_host_operations`)
+--
+endif::VK_NV_ray_tracing[]
+
+(3) What are the changes between the public provisional (VK_KHR_ray_tracing
+v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
+--
+  * Require Vulkan 1.1 and SPIR-V 1.4
+  * Added interactions with Vulkan 1.2 and
+    `apiext:VK_KHR_vulkan_memory_model`
+  * added creation time capture and replay flags
+  ** added
+     ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+     to elink:VkPipelineCreateFlagBits
+  * replace stext:VkStridedBufferRegionKHR with
+    slink:VkStridedDeviceAddressRegionKHR and change
+    flink:vkCmdTraceRaysKHR, flink:vkCmdTraceRaysIndirectKHR, to take these
+    for the shader binding table and use device addresses instead of
+    buffers.
+  * require the shader binding table buffers to have the
+    etext:VK_BUFFER_USAGE_RAY_TRACING_BIT_KHR set
+  * make `apiext:VK_KHR_pipeline_library` an interaction instead of required
+    extension
+  * rename the pname:libraries member of
+    slink:VkRayTracingPipelineCreateInfoKHR to pname:pLibraryInfo and make
+    it a pointer
+  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
+    a required extension (later went back on this)
+  * added explicit stack size management for ray tracing pipelines
+  ** removed the pname:maxCallableSize member of
+     slink:VkRayTracingPipelineInterfaceCreateInfoKHR
+  ** added the pname:pDynamicState member to
+     slink:VkRayTracingPipelineCreateInfoKHR
+  ** added ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
+     dynamic state for ray tracing pipelines
+  ** added flink:vkGetRayTracingShaderGroupStackSizeKHR and
+     flink:vkCmdSetRayTracingPipelineStackSizeKHR commands
+  ** added elink:VkShaderGroupShaderKHR enum
+  * Added pname:maxRayDispatchInvocationCount limit to
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+  * Added pname:shaderGroupHandleAlignment property to
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+  * Added pname:maxRayHitAttributeSize property to
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+  * Clarify deferred host ops for pipeline creation
+  ** slink:VkDeferredOperationKHR is now a top-level parameter for
+     flink:vkCreateRayTracingPipelinesKHR
+  ** removed stext:VkDeferredOperationInfoKHR structure
+  ** change deferred host creation/return parameter behavior such that the
+     implementation can modify such parameters until the deferred host
+     operation completes
+  ** `apiext:VK_KHR_deferred_host_operations` is required again
+--
+
+(4) What are the changes between the internal provisional
+(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
+v11 / VK_KHR_ray_tracing_pipeline v1) release?
+--
+  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
+    flexibility and decoupling ray query support from ray pipelines:
+  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
+     operations)
+  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
+     shader stages)
+  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
+  * Require code:Volatile for the following builtins in the ray generation,
+    closest hit, miss, intersection, and callable shader stages:
+  ** code:SubgroupSize, code:SubgroupLocalInvocationId, code:SubgroupEqMask,
+     code:SubgroupGeMask, code:SubgroupGtMask, code:SubgroupLeMask,
+     code:SubgroupLtMask
+  ** code:SMIDNV, code:WarpIDNV
+  * clarify buffer usage flags for ray tracing
+  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
+     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV and is required on shader
+     binding table buffers
+  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used in
+     `apiext:VK_KHR_acceleration_structure` for pname:scratchData
+  * rename pname:maxRecursionDepth to pname:maxRayPipelineRecursionDepth
+    (pipeline creation) and pname:maxRayRecursionDepth (limit) to reduce
+    confusion
+  * Add queryable pname:maxRayHitAttributeSize limit and rename members of
+    slink:VkRayTracingPipelineInterfaceCreateInfoKHR to
+    pname:maxPipelineRayPayloadSize and pname:maxPipelineRayHitAttributeSize
+    for clarity
+  * Update SPIRV capabilities to use code:RayTracingKHR
+  * extension is no longer provisional
+  * define synchronization requirements for indirect trace rays and indirect
+    buffer
+--
+
+(5) This extension adds gl_InstanceID for the intersection, any-hit, and
+closest hit shaders, but in KHR_vulkan_glsl, gl_InstanceID is replaced with
+gl_InstanceIndex.
+Which should be used for Vulkan in this extension?
+--
+*RESOLVED*: This extension uses gl_InstanceID and maps it to code:InstanceId
+in SPIR-V.
+It is acknowledged that this is different than other shader stages in
+Vulkan.
+There are two main reasons for the difference here:
+
+  * symmetry with gl_PrimitiveID which is also available in these shaders
+  * there is no "`baseInstance`" relevant for these shaders, and so ID makes
+    it more obvious that this is zero-based.
+--
+
+(6) Why is `apiext:VK_KHR_pipeline_library` an interaction instead of a
+required dependency, particularly when the "`Feature Requirements`" section
+says it is required to be supported anyhow?
+--
+*RESOLVED*: If `apiext:VK_KHR_pipeline_library` were a required extension
+dependency, then every application would need to enable the extension
+whether or not they actually want to use the pipeline library functionality.
+Developers found this to be annoying and unfriendly behavior.
+We do wish to require all *implementations* to support it though, and thus
+it is listed in the feature requirements section.
+--
+
+
+=== Sample Code
+
+Example ray generation GLSL shader
+
+[source,c]
+----
+#version 450 core
+#extension GL_EXT_ray_tracing : require
+layout(set = 0, binding = 0, rgba8) uniform image2D image;
+layout(set = 0, binding = 1) uniform accelerationStructureEXT as;
+layout(location = 0) rayPayloadEXT float payload;
+
+void main()
+{
+   vec4 col = vec4(0, 0, 0, 1);
+
+   vec3 origin = vec3(float(gl_LaunchIDEXT.x)/float(gl_LaunchSizeEXT.x), float(gl_LaunchIDEXT.y)/float(gl_LaunchSizeEXT.y), 1.0);
+   vec3 dir = vec3(0.0, 0.0, -1.0);
+
+   traceRayEXT(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0);
+
+   col.y = payload;
+
+   imageStore(image, ivec2(gl_LaunchIDEXT.xy), col);
+}
+----
+
+=== Version History
+
+  * Revision 1, 2020-11-12 (Mathieu Robart, Daniel Koch, Eric Werness,
+    Tobias Hector)
+  ** Decomposition of the specification, from VK_KHR_ray_tracing to
+     VK_KHR_ray_tracing_pipeline (#1918,!3912)
+  ** require certain subgroup and sm_shader_builtin shader builtins to be
+     decorated as volatile in the ray generation, closest hit, miss,
+     intersection, and callable stages (#1924,!3903,!3954)
+  ** clarify buffer usage flags for ray tracing (#2181,!3939)
+  ** rename maxRecursionDepth to maxRayPipelineRecursionDepth and
+     maxRayRecursionDepth (#2203,!3937)
+  ** add queryable maxRayHitAttributeSize and rename members of
+     VkRayTracingPipelineInterfaceCreateInfoKHR (#2102,!3966)
+  ** update to use code:RayTracingKHR SPIR-V capability
+  ** add VUs for matching hit group type against geometry type (#2245,!3994)
+  ** require code:RayTMaxKHR be volatile in intersection shaders
+     (#2268,!4030)
+  ** add numerical limits for ray parameters (#2235,!3960)
+  ** fix SBT indexing rules for device addresses (#2308,!4079)
+  ** relax formula for ray intersection candidate determination
+     (#2322,!4080)
+  ** add more details on code:ShaderRecordBufferKHR variables (#2230,!4083)
+  ** clarify valid bits for code:InstanceCustomIndexKHR (GLSL/GLSL#19,!4128)
+  ** allow at most one code:IncomingRayPayloadKHR,
+     code:IncomingCallableDataKHR, and code:HitAttributeKHR (!4129)
+  ** add minimum for maxShaderGroupStride (#2353,!4131)
+  ** require VK_KHR_pipeline_library extension to be supported (#2348,!4135)
+  ** clarify meaning of 'geometry index' (#2272,!4137)
+  ** restrict traces to TLAS (#2239,!4141)
+  ** add note about maxPipelineRayPayloadSize (#2383,!4172)
+  ** do not require raygen shader in pipeline libraries (!4185)
+  ** define sync for indirect trace rays and indirect buffer (#2407,!4208)
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_position_fetch.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_position_fetch.adoc
new file mode 100644
index 0000000..39b6831
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_ray_tracing_position_fetch.adoc
@@ -0,0 +1,61 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_tracing_position_fetch.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-02-17
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_ray_tracing_position_fetch.html[`SPV_KHR_ray_tracing_position_fetch`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_ray_tracing_position_fetch.txt[`GLSL_EXT_ray_tracing_position_fetch`]
+  - Interacts with `apiext:VK_KHR_ray_tracing_pipeline`
+  - Interacts with `apiext:VK_KHR_ray_query`
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Stu Smith, AMD
+  - Yuriy O'Donnell, Epic Games
+  - Ralph Potter, Samsung
+  - Joshua Barczak, Intel
+  - Lionel Landwerlin, Intel
+  - Andrew Garrard, Imagination Technologies
+  - Alex Bourd, Qualcomm
+  - Yunpeng Zhu, Huawei Technologies
+  - Marius Bjorge, Arm
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+`VK_KHR_ray_tracing_position_fetch` adds the ability to fetch the vertex
+positions in the shader from a hit triangle as stored in the acceleration
+structure.
+
+An application adds
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR to the
+acceleration structure at build time.
+Then, if the hit is a triangle geometry, the shader (any-hit or closest hit
+for ray pipelines or using ray query) can: fetch the three, three-component
+vertex positions in object space, of the triangle which was hit.
+
+include::{generated}/interfaces/VK_KHR_ray_tracing_position_fetch.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-hittrianglevertexpositions,code:HitTriangleVertexPositionsKHR>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayTracingPositionFetchKHR,RayTracingPositionFetchKHR>>
+
+=== Issues
+
+None Yet!
+
+=== Version History
+
+  * Revision 1, 2023-02-17 (Eric Werness)
+  ** internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_relaxed_block_layout.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_relaxed_block_layout.adoc
new file mode 100644
index 0000000..4c8b0ea
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_relaxed_block_layout.adoc
@@ -0,0 +1,39 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_relaxed_block_layout.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-26
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - John Kessenich, Google
+
+=== Description
+
+The `VK_KHR_relaxed_block_layout` extension allows implementations to
+indicate they can support more variation in block code:Offset decorations.
+For example, placing a vector of three floats at an offset of
+[eq]#16{times}N {plus} 4#.
+
+See <<interfaces-resources-layout,Offset and Stride Assignment>> for
+details.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_relaxed_block_layout.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-03-26 (JohnK)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_mirror_clamp_to_edge.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_mirror_clamp_to_edge.adoc
new file mode 100644
index 0000000..975f475
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_mirror_clamp_to_edge.adoc
@@ -0,0 +1,90 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_sampler_mirror_clamp_to_edge.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-08-17
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Tobias Hector, Imagination Technologies
+  - Jon Leech, Khronos
+
+=== Description
+
+`VK_KHR_sampler_mirror_clamp_to_edge` extends the set of sampler address
+modes to include an additional mode
+(ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE) that effectively uses a
+texture map twice as large as the original image in which the additional
+half of the new image is a mirror image of the original image.
+
+This new mode relaxes the need to generate images whose opposite edges match
+by using the original image to generate a matching "`mirror image`".
+This mode allows the texture to be mirrored only once in the negative s, t,
+and r directions.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2.
+However, if Vulkan 1.2 is supported and this extension is not, the
+elink:VkSamplerAddressMode
+ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional.
+Since the original extension did not use an author suffix on the enum
+ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, it is used by both core
+and extension implementations.
+
+include::{generated}/interfaces/VK_KHR_sampler_mirror_clamp_to_edge.adoc[]
+
+=== Example
+
+Creating a sampler with the new address mode in each dimension
+
+[source,c++]
+----
+    VkSamplerCreateInfo createInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
+        // Other members set to application-desired values
+    };
+
+    createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
+    createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
+    createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
+
+    VkSampler sampler;
+    VkResult result = vkCreateSampler(
+        device,
+        &createInfo,
+        &sampler);
+----
+
+=== Issues
+
+1) Why are both KHR and core versions of the
+ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE token present?
+
+*RESOLVED*: This functionality was intended to be required in Vulkan 1.0.
+We realized shortly before public release that not all implementations could
+support it, and moved the functionality into an optional extension, but did
+not apply the KHR extension suffix.
+Adding a KHR-suffixed alias of the non-suffixed enum has been done to comply
+with our own naming rules.
+
+In a related change, before spec revision 1.1.121 this extension was
+hardwiring into the spec Makefile so it was always included with the
+Specification, even in the core-only versions.
+This has now been reverted, and it is treated as any other extension.
+
+=== Version History
+
+  * Revision 1, 2016-02-16 (Tobias Hector)
+  ** Initial draft
+  * Revision 2, 2019-08-14 (Jon Leech)
+  ** Add KHR-suffixed alias of non-suffixed enum.
+  * Revision 3, 2019-08-17 (Jon Leech)
+  ** Add an issue explaining the reason for the extension API not being
+     suffixed with KHR.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_ycbcr_conversion.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_ycbcr_conversion.adoc
new file mode 100644
index 0000000..86566be
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_sampler_ycbcr_conversion.adoc
@@ -0,0 +1,88 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_sampler_ycbcr_conversion.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-08-11
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Andrew Garrard, Samsung Electronics
+  - Tobias Hector, Imagination Technologies
+  - James Jones, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Daniel Rakos, AMD
+  - Romain Guy, Google
+  - Jesse Hall, Google
+  - Tom Cooksey, ARM Ltd
+  - Jeff Leger, Qualcomm Technologies, Inc
+  - Jan-Harald Fredriksen, ARM Ltd
+  - Jan Outters, Samsung Electronics
+  - Alon Or-bach, Samsung Electronics
+  - Michael Worcester, Imagination Technologies
+  - Jeff Bolz, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Matthew Netsch, Qualcomm Technologies, Inc
+
+=== Description
+
+The use of {YCbCr} sampler conversion is an area in 3D graphics not used by
+most Vulkan developers.
+It is mainly used for processing inputs from video decoders and cameras.
+The use of the extension assumes basic knowledge of {YCbCr} concepts.
+
+This extension provides the ability to perform specified color space
+conversions during texture sampling operations for the {YCbCr} color space
+natively.
+It also adds a selection of multi-planar formats, image aspect plane, and
+the ability to bind memory to the planes of an image collectively or
+separately.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted.
+However, if Vulkan 1.1 is supported and this extension is not, the
+code:samplerYcbcrConversion capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_sampler_ycbcr_conversion.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-01-24 (Andrew Garrard)
+  ** Initial draft
+  * Revision 2, 2017-01-25 (Andrew Garrard)
+  ** After initial feedback
+  * Revision 3, 2017-01-27 (Andrew Garrard)
+  ** Higher bit depth formats, renaming, swizzle
+  * Revision 4, 2017-02-22 (Andrew Garrard)
+  ** Added query function, formats as RGB, clarifications
+  * Revision 5, 2017-04-?? (Andrew Garrard)
+  ** Simplified query and removed output conversions
+  * Revision 6, 2017-04-24 (Andrew Garrard)
+  ** Tidying, incorporated new image query, restored transfer functions
+  * Revision 7, 2017-04-25 (Andrew Garrard)
+  ** Added cosited option/midpoint requirement for formats,
+     "`bypassConversion`"
+  * Revision 8, 2017-04-25 (Andrew Garrard)
+  ** Simplified further
+  * Revision 9, 2017-04-27 (Andrew Garrard)
+  ** Disjoint no more
+  * Revision 10, 2017-04-28 (Andrew Garrard)
+  ** Restored disjoint
+  * Revision 11, 2017-04-29 (Andrew Garrard)
+  ** Now Ycbcr conversion, and KHR
+  * Revision 12, 2017-06-06 (Andrew Garrard)
+  ** Added conversion to image view creation
+  * Revision 13, 2017-07-13 (Andrew Garrard)
+  ** Allowed cosited-only chroma samples for formats
+  * Revision 14, 2017-08-11 (Andrew Garrard)
+  ** Reflected quantization changes in BT.2100-1
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_separate_depth_stencil_layouts.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_separate_depth_stencil_layouts.adoc
new file mode 100644
index 0000000..2667887
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_separate_depth_stencil_layouts.adoc
@@ -0,0 +1,41 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_separate_depth_stencil_layouts.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-25
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Jesse Barker, Unity
+  - Tobias Hector, AMD
+
+=== Description
+
+This extension allows image memory barriers for depth/stencil images to have
+just one of the ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+ename:VK_IMAGE_ASPECT_STENCIL_BIT aspect bits set, rather than require both.
+This allows their layouts to be set independently.
+To support depth/stencil images with different layouts for the depth and
+stencil aspects, the depth/stencil attachment interface has been updated to
+support a separate layout for stencil.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_separate_depth_stencil_layouts.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-06-25 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_atomic_int64.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_atomic_int64.adoc
new file mode 100644
index 0000000..bad0b2a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_atomic_int64.adoc
@@ -0,0 +1,49 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_atomic_int64.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_gpu_shader_int64.txt[`GL_ARB_gpu_shader_int64`] and
+    {GLSLregistry}/ext/GL_EXT_shader_atomic_int64.txt[`GL_EXT_shader_atomic_int64`]
+*Contributors*::
+  - Aaron Hagan, AMD
+  - Daniel Rakos, AMD
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, Codeplay
+
+=== Description
+
+This extension advertises the SPIR-V *Int64Atomics* capability for Vulkan,
+which allows a shader to contain 64-bit atomic operations on signed and
+unsigned integers.
+The supported operations include OpAtomicMin, OpAtomicMax, OpAtomicAnd,
+OpAtomicOr, OpAtomicXor, OpAtomicAdd, OpAtomicExchange, and
+OpAtomicCompareExchange.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:shaderBufferInt64Atomics capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_shader_atomic_int64.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-Int64Atomics, code:Int64Atomics>>
+
+=== Version History
+
+  * Revision 1, 2018-07-05 (Aaron Hagan)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_clock.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_clock.adoc
new file mode 100644
index 0000000..8deccb0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_clock.adoc
@@ -0,0 +1,45 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_clock.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-4-25
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_shader_clock.html[`SPV_KHR_shader_clock`].
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_clock.txt[`ARB_shader_clock`] and
+    {GLSLregistry}/ext/GL_EXT_shader_realtime_clock.txt[`EXT_shader_realtime_clock`]
+*Contributors*::
+  - Aaron Hagan, AMD
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension advertises the SPIR-V code:ShaderClockKHR capability for
+Vulkan, which allows a shader to query a real-time or monotonically
+incrementing counter at the subgroup level or across the device level.
+The two valid SPIR-V scopes for code:OpReadClockKHR are code:Subgroup and
+code:Device.
+
+When using GLSL source-based shading languages, the code:clockRealtime*EXT()
+timing functions map to the code:OpReadClockKHR instruction with a scope of
+code:Device, and the code:clock*ARB() timing functions map to the
+code:OpReadClockKHR instruction with a scope of code:Subgroup.
+
+include::{generated}/interfaces/VK_KHR_shader_clock.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ShaderClockKHR, code:ShaderClockKHR>>
+
+=== Version History
+
+  * Revision 1, 2019-4-25 (Aaron Hagan)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_draw_parameters.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_draw_parameters.adoc
new file mode 100644
index 0000000..8f242f6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_draw_parameters.adoc
@@ -0,0 +1,94 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_draw_parameters.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
+  - This extension provides API support for
+    {GLregistry}/ARB/ARB_shader_draw_parameters.txt[`GL_ARB_shader_draw_parameters`]
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Daniel Koch, NVIDIA Corporation
+  - Jeff Bolz, NVIDIA
+  - Daniel Rakos, AMD
+  - Jan-Harald Fredriksen, ARM
+  - John Kessenich, Google
+  - Stuart Smith, IMG
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_shader_draw_parameters`
+
+The extension provides access to three additional built-in shader variables
+in Vulkan:
+
+  * code:BaseInstance, containing the pname:firstInstance parameter passed
+    to drawing commands,
+  * code:BaseVertex, containing the pname:firstVertex or pname:vertexOffset
+    parameter passed to drawing commands, and
+  * code:DrawIndex, containing the index of the draw call currently being
+    processed from an indirect drawing call.
+
+When using GLSL source-based shader languages, the following variables from
+`GL_ARB_shader_draw_parameters` can map to these SPIR-V built-in
+decorations:
+
+  * `in int gl_BaseInstanceARB;` -> code:BaseInstance,
+  * `in int gl_BaseVertexARB;` -> code:BaseVertex, and
+  * `in int gl_DrawIDARB;` -> code:DrawIndex.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1.
+However, the <<features-shaderDrawParameters, pname:shaderDrawParameters>>
+feature bit was added to distinguish whether it is actually available or
+not.
+
+include::{generated}/interfaces/VK_KHR_shader_draw_parameters.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-baseinstance,code:BaseInstance>>
+  * <<interfaces-builtin-variables-basevertex,code:BaseVertex>>
+  * <<interfaces-builtin-variables-drawindex,code:DrawIndex>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-DrawParameters, code:DrawParameters>>
+
+=== Issues
+
+1) Is this the same functionality as `GL_ARB_shader_draw_parameters`?
+
+*RESOLVED*: It is actually a superset, as it also adds in support for
+arrayed drawing commands.
+
+In GL for `GL_ARB_shader_draw_parameters`, code:gl_BaseVertexARB holds the
+integer value passed to the parameter to the command that resulted in the
+current shader invocation.
+In the case where the command has no code:baseVertex parameter, the value of
+code:gl_BaseVertexARB is zero.
+This means that code:gl_BaseVertexARB = code:baseVertex (for
+code:glDrawElements commands with code:baseVertex) or 0.
+In particular there are no code:glDrawArrays commands that take a
+code:baseVertex parameter.
+
+Now in Vulkan, we have code:BaseVertex = pname:vertexOffset (for indexed
+drawing commands) or pname:firstVertex (for arrayed drawing commands), and
+so Vulkan's version is really a superset of GL functionality.
+
+=== Version History
+
+  * Revision 1, 2016-10-05 (Daniel Koch)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float16_int8.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float16_int8.adoc
new file mode 100644
index 0000000..b4149ff
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float16_int8.adoc
@@ -0,0 +1,57 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_float16_int8.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-03-07
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension interacts with `apiext:VK_KHR_8bit_storage`
+  - This extension interacts with `apiext:VK_KHR_16bit_storage`
+  - This extension interacts with `apiext:VK_KHR_shader_float_controls`
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_shader_explicit_arithmetic_types.txt[`GL_EXT_shader_explicit_arithmetic_types`]
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alexander Galazin, Arm
+  - Jan-Harald Fredriksen, Arm
+  - Jeff Bolz, NVIDIA
+  - Graeme Leese, Broadcom
+  - Daniel Rakos, AMD
+
+=== Description
+
+The `VK_KHR_shader_float16_int8` extension allows use of 16-bit
+floating-point types and 8-bit integer types in shaders for arithmetic
+operations.
+
+It introduces two new optional features pname:shaderFloat16 and
+pname:shaderInt8 which directly map to the code:Float16 and the code:Int8
+SPIR-V capabilities.
+The `VK_KHR_shader_float16_int8` extension also specifies precision
+requirements for half-precision floating-point SPIR-V operations.
+This extension does not enable use of 8-bit integer types or 16-bit
+floating-point types in any <<interfaces-iointerfaces, shader input and
+output interfaces>> and therefore does not supersede the
+`apiext:VK_KHR_8bit_storage` or `apiext:VK_KHR_16bit_storage` extensions.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, both the
+code:shaderFloat16 and code:shaderInt8 capabilities are optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_shader_float16_int8.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-03-07 (Alexander Galazin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float_controls.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float_controls.adoc
new file mode 100644
index 0000000..0dcae49
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_float_controls.adoc
@@ -0,0 +1,136 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_float_controls.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-09-11
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_float_controls.html[`SPV_KHR_float_controls`]
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alexander Galazin, Arm
+  - Jan-Harald Fredriksen, Arm
+  - Jeff Bolz, NVIDIA
+  - Graeme Leese, Broadcom
+  - Daniel Rakos, AMD
+
+=== Description
+
+The `VK_KHR_shader_float_controls` extension enables efficient use of
+floating-point computations through the ability to query and override the
+implementation's default behavior for rounding modes, denormals, signed
+zero, and infinity.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_shader_float_controls.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-DenormPreserve, code:DenormPreserve>>
+  * <<spirvenv-capabilities-table-DenormFlushToZero,
+    code:DenormFlushToZero>>
+  * <<spirvenv-capabilities-table-SignedZeroInfNanPreserve,
+    code:SignedZeroInfNanPreserve>>
+  * <<spirvenv-capabilities-table-RoundingModeRTE, code:RoundingModeRTE>>
+  * <<spirvenv-capabilities-table-RoundingModeRTZ, code:RoundingModeRTZ>>
+
+=== Issues
+
+1) Which instructions must flush denorms?
+
+*RESOLVED*: Only floating-point conversion, floating-point arithmetic,
+floating-point relational (except code:OpIsNaN, code:OpIsInf), and
+floating-point GLSL.std.450 extended instructions must flush denormals.
+
+2) What is the denorm behavior for intermediate results?
+
+*RESOLVED*: When a SPIR-V instruction is implemented as a sequence of other
+instructions:
+
+  * in the code:DenormFlushToZero execution mode, the intermediate
+    instructions may flush denormals, the final result of the sequence must:
+    not be denormal.
+  * in the code:DenormPreserve execution mode, denormals must be preserved
+    throughout the whole sequence.
+
+3) Do denorm and rounding mode controls apply to code:OpSpecConstantOp?
+
+*RESOLVED*: Yes, except when the opcode is code:OpQuantizeToF16.
+
+4) The SPIR-V specification says that code:OpConvertFToU and
+code:OpConvertFToS unconditionally round towards zero.
+Do the rounding mode controls specified through the execution modes apply to
+them?
+
+*RESOLVED*: No, these instructions unconditionally round towards zero.
+
+5) Do any of the "`Pack`" GLSL.std.450 instructions count as conversion
+instructions and have the rounding mode applied?
+
+*RESOLVED*: No, only instructions listed in "`section 3.32.11.
+Conversion Instructions`" of the SPIR-V specification count as conversion
+instructions.
+
+6) When using inf/nan-ignore mode, what is expected of code:OpIsNan and
+code:OpIsInf?
+
+*RESOLVED*: These instructions must always accurately detect inf/nan if it
+is passed to them.
+
+
+[[VK_KHR_shader_controls_v4_incompatibility]]
+=== Version 4 API Incompatibility
+
+The original versions of `VK_KHR_shader_float_controls` shipped with
+booleans named "`separateDenormSettings`" and
+"`separateRoundingModeSettings`", which at first glance could have indicated
+"`they can all be set independently, or not`".
+However the spec language as written indicated that the 32-bit value could
+always be set independently, and only the 16- and 64-bit controls needed to
+be the same if these values were ename:VK_FALSE.
+
+As a result of this slight disparity, and lack of test coverage for this
+facet of the extension, we ended up with two different behaviors in the
+wild, where some implementations worked as written, and others worked based
+on the naming.
+As these are hard limits in hardware with reasons for exposure as written,
+it was not possible to standardise on a single way to make this work within
+the existing API.
+
+No known users of this part of the extension exist in the wild, and as such
+the Vulkan WG took the unusual step of retroactively changing the once
+boolean value into a tri-state enum, breaking source compatibility.
+This was however done in such a way as to retain ABI compatibility, in case
+any code using this did exist; with the numerical values 0 and 1 retaining
+their original specified meaning, and a new value signifying the additional
+"`all need to be set together`" state.
+If any applications exist today, compiled binaries will continue to work as
+written in most cases, but will need changes before the code can be
+recompiled.
+
+
+=== Version History
+
+  * Revision 4, 2019-06-18 (Tobias Hector)
+  ** Modified settings restrictions, see
+     <<VK_KHR_shader_controls_v4_incompatibility, Version 4 API
+     incompatibility>>
+  * Revision 3, 2018-09-11 (Alexander Galazin)
+  ** Minor restructuring
+  * Revision 2, 2018-04-17 (Alexander Galazin)
+  ** Added issues and resolutions
+  * Revision 1, 2018-04-11 (Alexander Galazin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_integer_dot_product.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_integer_dot_product.adoc
new file mode 100644
index 0000000..48cad46
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_integer_dot_product.adoc
@@ -0,0 +1,65 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_integer_dot_product.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-16
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_integer_dot_product.html[`SPV_KHR_integer_dot_product`].
+  - This extension interacts with `apiext:VK_KHR_shader_float16_int8`.
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Kévin Petit, Arm Ltd.
+  - Jeff Bolz, NVidia
+  - Spencer Fricke, Samsung
+  - Jesse Hall, Google
+  - John Kessenich, Google
+  - Graeme Leese, Broadcom
+  - Einar Hov, Arm Ltd.
+  - Stuart Brady, Arm Ltd.
+  - Pablo Cascon, Arm Ltd.
+  - Tobias Hector, AMD
+  - Jeff Leger, Qualcomm
+  - Ruihao Zhang, Qualcomm
+  - Pierre Boudier, NVidia
+  - Jon Leech, The Khronos Group
+  - Tom Olson, Arm Ltd.
+
+=== Description
+
+This extension adds support for the integer dot product SPIR-V instructions
+defined in SPV_KHR_integer_dot_product.
+These instructions are particularly useful for neural network inference and
+training but find uses in other general-purpose compute applications as
+well.
+
+include::{generated}/interfaces/VK_KHR_shader_integer_dot_product.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-DotProductInputAllKHR,
+    code:DotProductInputAllKHR>>
+  * <<spirvenv-capabilities-table-DotProductInput4x8BitKHR,
+    code:DotProductInput4x8BitKHR>>
+  * <<spirvenv-capabilities-table-DotProductInput4x8BitPackedKHR,
+    code:DotProductInput4x8BitPackedKHR>>
+  * <<spirvenv-capabilities-table-DotProductKHR, code:DotProductKHR>>
+
+=== Version History
+
+  * Revision 1, 2021-06-16 (Kévin Petit)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_non_semantic_info.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_non_semantic_info.adoc
new file mode 100644
index 0000000..a254333
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_non_semantic_info.adoc
@@ -0,0 +1,36 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_non_semantic_info.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-10-16
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_non_semantic_info.html[`SPV_KHR_non_semantic_info`]
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Baldur Karlsson, Valve
+
+=== Description
+
+This extension allows the use of the `SPV_KHR_non_semantic_info` extension
+in SPIR-V shader modules.
+
+include::{generated}/interfaces/VK_KHR_shader_non_semantic_info.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3 Because the
+extension has no API controlling its functionality, this results only in a
+change to the <<spirvenv-extensions-table, SPIR-V Extensions table>>.
+
+=== Version History
+
+  * Revision 1, 2019-10-16 (Baldur Karlsson)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_extended_types.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_extended_types.adoc
new file mode 100644
index 0000000..7b619a6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_extended_types.adoc
@@ -0,0 +1,45 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_extended_types.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-08
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension provides API support for
+    {GLSLregistry}/ext/GLSL_EXT_shader_subgroup_extended_types.txt[`GLSL_EXT_shader_subgroup_extended_types`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Jan-Harald Fredriksen, Arm
+  - Neil Henning, AMD
+  - Daniel Koch, NVIDIA
+  - Jeff Leger, Qualcomm
+  - Graeme Leese, Broadcom
+  - David Neto, Google
+  - Daniel Rakos, AMD
+
+=== Description
+
+This extension enables the Non Uniform Group Operations in SPIR-V to support
+8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and
+vectors of these types.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_shader_subgroup_extended_types.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-01-08 (Neil Henning)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_uniform_control_flow.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_uniform_control_flow.adoc
new file mode 100644
index 0000000..fb55709
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_subgroup_uniform_control_flow.adoc
@@ -0,0 +1,41 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_uniform_control_flow.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-08-27
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Requires SPIR-V 1.3.
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_subgroup_uniform_control_flow.html[`SPV_KHR_subgroup_uniform_control_flow`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_subgroupuniform_qualifier.txt[`GL_EXT_subgroupuniform_qualifier`]
+*Contributors*::
+  - Alan Baker, Google
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows the use of the `SPV_KHR_subgroup_uniform_control_flow`
+SPIR-V extension in shader modules.
+`SPV_KHR_subgroup_uniform_control_flow` provides stronger guarantees that
+diverged subgroups will reconverge.
+
+Developers should utilize this extension if they use subgroup operations to
+reduce the work performed by a uniform subgroup.
+This extension will guarantee that uniform subgroup will reconverge in the
+same manner as invocation groups (see "`Uniform Control Flow`" in the
+<<spirv-spec,Khronos SPIR-V Specification>>).
+
+include::{generated}/interfaces/VK_KHR_shader_subgroup_uniform_control_flow.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-08-27 (Alan Baker)
+  ** Internal draft version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_terminate_invocation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_terminate_invocation.adoc
new file mode 100644
index 0000000..f0ed1b1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shader_terminate_invocation.adoc
@@ -0,0 +1,54 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_terminate_invocation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-08-11
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+  - Requires the
+    {spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
+    SPIR-V extension.
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alan Baker, Google
+  - Jeff Bolz, NVIDIA
+  - Jesse Hall, Google
+  - Ralph Potter, Samsung
+  - Tom Olson, Arm
+
+=== Description
+
+This extension adds Vulkan support for the
+{spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
+SPIR-V extension.
+That SPIR-V extension provides a new instruction,
+code:OpTerminateInvocation, which causes a shader invocation to immediately
+terminate and sets the coverage of shaded samples to `0`; only previously
+executed instructions will have observable effects.
+The code:OpTerminateInvocation instruction, along with the
+code:OpDemoteToHelperInvocation instruction from the
+`apiext:VK_EXT_shader_demote_to_helper_invocation` extension, together
+replace the code:OpKill instruction, which could behave like either of these
+instructions.
+code:OpTerminateInvocation provides the behavior required by the GLSL
+code:discard statement, and should be used when available by GLSL compilers
+and applications that need the GLSL code:discard behavior.
+
+include::{generated}/interfaces/VK_KHR_shader_terminate_invocation.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2020-08-11 (Jesse Hall)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shared_presentable_image.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shared_presentable_image.adoc
new file mode 100644
index 0000000..281c271
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_shared_presentable_image.adoc
@@ -0,0 +1,128 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shared_presentable_image.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-03-20
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alon Or-bach, Samsung Electronics
+  - Ian Elliott, Google
+  - Jesse Hall, Google
+  - Pablo Ceballos, Google
+  - Chris Forbes, Google
+  - Jeff Juliano, NVIDIA
+  - James Jones, NVIDIA
+  - Daniel Rakos, AMD
+  - Tobias Hector, Imagination Technologies
+  - Graham Connor, Imagination Technologies
+  - Michael Worcester, Imagination Technologies
+  - Cass Everitt, Oculus
+  - Johannes Van Waveren, Oculus
+
+=== Description
+
+This extension extends `apiext:VK_KHR_swapchain` to enable creation of a
+shared presentable image.
+This allows the application to use the image while the presention engine is
+accessing it, in order to reduce the latency between rendering and
+presentation.
+
+include::{generated}/interfaces/VK_KHR_shared_presentable_image.adoc[]
+
+=== Issues
+
+1) Should we allow a Vulkan WSI swapchain to toggle between normal usage and
+shared presentation usage?
+
+*RESOLVED*: No.
+WSI swapchains are typically recreated with new properties instead of having
+their properties changed.
+This can also save resources, assuming that fewer images are needed for
+shared presentation, and assuming that most VR applications do not need to
+switch between normal and shared usage.
+
+2) Should we have a query for determining how the presentation engine
+refresh is triggered?
+
+*RESOLVED*: Yes.
+This is done via which presentation modes a surface supports.
+
+3) Should the object representing a shared presentable image be an extension
+of a slink:VkSwapchainKHR or a separate object?
+
+*RESOLVED*: Extension of a swapchain due to overlap in creation properties
+and to allow common functionality between shared and normal presentable
+images and swapchains.
+
+4) What should we call the extension and the new structures it creates?
+
+*RESOLVED*: Shared presentable image / shared present.
+
+5) Should the pname:minImageCount and pname:presentMode values of the
+slink:VkSwapchainCreateInfoKHR be ignored, or required to be compatible
+values?
+
+*RESOLVED*: pname:minImageCount must be set to 1, and pname:presentMode
+should be set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
+
+6) What should the layout of the shared presentable image be?
+
+*RESOLVED*: After acquiring the shared presentable image, the application
+must transition it to the ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout
+prior to it being used.
+After this initial transition, any image usage that was requested during
+swapchain creation can: be performed on the image without layout transitions
+being performed.
+
+7) Do we need a new API for the trigger to refresh new content?
+
+*RESOLVED*: flink:vkQueuePresentKHR to act as API to trigger a refresh, as
+will allow combination with other compatible extensions to
+flink:vkQueuePresentKHR.
+
+8) How should an application detect a ename:VK_ERROR_OUT_OF_DATE_KHR error
+on a swapchain using the ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
+present mode?
+
+*RESOLVED*: Introduce flink:vkGetSwapchainStatusKHR to allow applications to
+query the status of a swapchain using a shared presentation mode.
+
+9) What should subsequent calls to flink:vkQueuePresentKHR for
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR swapchains be defined to
+do?
+
+*RESOLVED*: State that implementations may use it as a hint for updated
+content.
+
+10) Can the ownership of a shared presentable image be transferred to a
+different queue?
+
+*RESOLVED*: No.
+It is not possible to transfer ownership of a shared presentable image
+obtained from a swapchain created using ename:VK_SHARING_MODE_EXCLUSIVE
+after it has been presented.
+
+11) How should flink:vkQueueSubmit behave if a command buffer uses an image
+from a ename:VK_ERROR_OUT_OF_DATE_KHR swapchain?
+
+*RESOLVED*: flink:vkQueueSubmit is expected to return the
+ename:VK_ERROR_DEVICE_LOST error.
+
+12) Can Vulkan provide any guarantee on the order of rendering, to enable
+beam chasing?
+
+*RESOLVED*: This could be achieved via use of render passes to ensure strip
+rendering.
+
+
+=== Version History
+
+  * Revision 1, 2017-03-20 (Alon Or-bach)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_spirv_1_4.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_spirv_1_4.adoc
new file mode 100644
index 0000000..695d418
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_spirv_1_4.adoc
@@ -0,0 +1,119 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_spirv_1_4.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-01
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Requires SPIR-V 1.4.
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Alexander Galazin, Arm
+  - David Neto, Google
+  - Jesse Hall, Google
+  - John Kessenich, Google
+  - Neil Henning, AMD
+  - Tom Olson, Arm
+
+=== Description
+
+This extension allows the use of SPIR-V 1.4 shader modules.
+SPIR-V 1.4's new features primarily make it an easier target for compilers
+from high-level languages, rather than exposing new hardware functionality.
+
+SPIR-V 1.4 incorporates features that are also available separately as
+extensions.
+SPIR-V 1.4 shader modules do not need to enable those extensions with the
+`OpExtension` opcode, since they are integral parts of SPIR-V 1.4.
+
+SPIR-V 1.4 introduces new floating point execution mode capabilities, also
+available via `SPV_KHR_float_controls`.
+Implementations are not required to support all of these new capabilities;
+support can be queried using
+slink:VkPhysicalDeviceFloatControlsPropertiesKHR from the
+`apiext:VK_KHR_shader_float_controls` extension.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_spirv_1_4.adoc[]
+
+=== Issues
+
+1.
+Should we have an extension specific to this SPIR-V version, or add a
+version-generic query for SPIR-V version? SPIR-V 1.4 does not need any other
+API changes.
+
+*RESOLVED*: Just expose SPIR-V 1.4.
+
+Most new SPIR-V versions introduce optionally-required capabilities or have
+implementation-defined limits, and would need more API and specification
+changes specific to that version to make them available in Vulkan.
+ifdef::VK_VERSION_1_1[]
+For example, to support the subgroup capabilities added in SPIR-V 1.3
+required introducing slink:VkPhysicalDeviceSubgroupProperties to allow
+querying the supported group operation categories, maximum supported
+subgroup size, etc.
+endif::VK_VERSION_1_1[]
+While we could expose the parts of a new SPIR-V version that do not need
+accompanying changes generically, we will still end up writing extensions
+specific to each version for the remaining parts.
+Thus the generic mechanism will not reduce future spec-writing effort.
+In addition, making it clear which parts of a future version are supported
+by the generic mechanism and which cannot be used without specific support
+would be difficult to get right ahead of time.
+
+2.
+Can different stages of the same pipeline use shaders with different SPIR-V
+versions?
+
+*RESOLVED*: Yes.
+
+Mixing SPIR-V versions 1.0-1.3 in the same pipeline has not been disallowed,
+so it would be inconsistent to disallow mixing 1.4 with previous versions.
+SPIR-V 1.4 does not introduce anything that should cause new difficulties
+here.
+
+3.
+Must Vulkan extensions corresponding to SPIR-V extensions that were promoted
+to core in 1.4 be enabled in order to use that functionality in a SPIR-V 1.4
+module?
+
+*RESOLVED*: No, with caveats.
+
+The SPIR-V 1.4 module does not need to declare the SPIR-V extensions, since
+the functionality is now part of core, so there is no need to enable the
+Vulkan extension that allows SPIR-V modules to declare the SPIR-V extension.
+However, when the functionality that is now core in SPIR-V 1.4 is optionally
+supported, the query for support is provided by a Vulkan extension, and that
+query can only be used if the extension is enabled.
+
+This applies to any SPIR-V version; specifically for SPIR-V 1.4 this only
+applies to the functionality from `SPV_KHR_float_controls`, which was made
+available in Vulkan by `apiext:VK_KHR_shader_float_controls`.
+Even though the extension was promoted in SPIR-V 1.4, the capabilities are
+still optional in implementations that support `VK_KHR_spirv_1_4`.
+
+A SPIR-V 1.4 module does not need to enable `SPV_KHR_float_controls` in
+order to use the capabilities, so if the application has _a priori_
+knowledge that the implementation supports the capabilities, it does not
+need to enable `apiext:VK_KHR_shader_float_controls`.
+However, if it does not have this knowledge and has to query for support at
+runtime, it must enable `apiext:VK_KHR_shader_float_controls` in order to
+use slink:VkPhysicalDeviceFloatControlsPropertiesKHR.
+
+=== Version History
+
+  * Revision 1, 2019-04-01 (Jesse Hall)
+  ** Internal draft versions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_storage_buffer_storage_class.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_storage_buffer_storage_class.adoc
new file mode 100644
index 0000000..636fadd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_storage_buffer_storage_class.adoc
@@ -0,0 +1,40 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_storage_buffer_storage_class.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_storage_buffer_storage_class.html[`SPV_KHR_storage_buffer_storage_class`]
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - Alexander Galazin, ARM
+  - David Neto, Google
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_KHR_storage_buffer_storage_class`
+
+This extension provides a new SPIR-V code:StorageBuffer storage class.
+A code:Block-decorated object in this class is equivalent to a
+code:BufferBlock-decorated object in the code:Uniform storage class.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1.
+
+include::{generated}/interfaces/VK_KHR_storage_buffer_storage_class.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-03-23 (Alexander Galazin)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface.adoc
new file mode 100644
index 0000000..a7949e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface.adoc
@@ -0,0 +1,228 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Ian Elliott, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+  - Faith Ekstrand, Intel
+
+=== Description
+
+The `VK_KHR_surface` extension is an instance extension.
+It introduces slink:VkSurfaceKHR objects, which abstract native platform
+surface or window objects for use with Vulkan.
+It also provides a way to determine whether a queue family in a physical
+device supports presenting to particular surface.
+
+Separate extensions for each platform provide the mechanisms for creating
+slink:VkSurfaceKHR objects, but once created they may be used in this and
+other platform-independent extensions, in particular the
+`apiext:VK_KHR_swapchain` extension.
+
+include::{generated}/interfaces/VK_KHR_surface.adoc[]
+
+ifndef::VKSC_VERSION_1_0[]
+=== Examples
+
+[NOTE]
+.Note
+====
+The example code for the `VK_KHR_surface` and `apiext:VK_KHR_swapchain`
+extensions was removed from the appendix after revision 1.0.29.
+This WSI example code was ported to the cube demo that is shipped with the
+official Khronos SDK, and is being kept up-to-date in that location (see:
+https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
+====
+endif::VKSC_VERSION_1_0[]
+
+=== Issues
+
+1) Should this extension include a method to query whether a physical device
+supports presenting to a specific window or native surface on a given
+platform?
+
+*RESOLVED*: Yes.
+Without this, applications would need to create a device instance to
+determine whether a particular window can be presented to.
+Knowing that a device supports presentation to a platform in general is not
+sufficient, as a single machine might support multiple seats, or instances
+of the platform that each use different underlying physical devices.
+Additionally, on some platforms, such as the X Window System, different
+drivers and devices might be used for different windows depending on which
+section of the desktop they exist on.
+
+2) Should the flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR,
+flink:vkGetPhysicalDeviceSurfaceFormatsKHR, and
+flink:vkGetPhysicalDeviceSurfacePresentModesKHR functions be in this
+extension and operate on physical devices, rather than being in
+`apiext:VK_KHR_swapchain` (i.e. device extension) and being dependent on
+slink:VkDevice?
+
+*RESOLVED*: Yes.
+While it might be useful to depend on sname:VkDevice (and therefore on
+enabled extensions and features) for the queries, Vulkan was released only
+with the slink:VkPhysicalDevice versions.
+Many cases can be resolved by a Valid Usage statement, and/or by a separate
+pname:pNext chain version of the query struct specific to a given extension
+or parameters, via extensible versions of the queries:
+ifdef::VK_EXT_full_screen_exclusive[flink:vkGetPhysicalDeviceSurfacePresentModes2EXT,]
+flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR, and
+flink:vkGetPhysicalDeviceSurfaceFormats2KHR.
+
+3) Should Vulkan support Xlib or XCB as the API for accessing the X Window
+System platform?
+
+*RESOLVED*: Both.
+XCB is a more modern and efficient API, but Xlib usage is deeply ingrained
+in many applications and likely will remain in use for the foreseeable
+future.
+Not all drivers necessarily need to support both, but including both as
+options in the core specification will probably encourage support, which
+should in turn ease adoption of the Vulkan API in older codebases.
+Additionally, the performance improvements possible with XCB likely will not
+have a measurable impact on the performance of Vulkan presentation and other
+minimal window system interactions defined here.
+
+4) Should the GBM platform be included in the list of platform enums?
+
+*RESOLVED*: Deferred, and will be addressed with a platform-specific
+extension to be written in the future.
+
+=== Version History
+
+  * Revision 1, 2015-05-20 (James Jones)
+  ** Initial draft, based on LunarG KHR spec, other KHR specs, patches
+     attached to bugs.
+
+  * Revision 2, 2015-05-22 (Ian Elliott)
+  ** Created initial Description section.
+  ** Removed query for whether a platform requires the use of a queue for
+     presentation, since it was decided that presentation will always be
+     modeled as being part of the queue.
+  ** Fixed typos and other minor mistakes.
+
+  * Revision 3, 2015-05-26 (Ian Elliott)
+  ** Improved the Description section.
+
+  * Revision 4, 2015-05-27 (James Jones)
+  ** Fixed compilation errors in example code.
+
+  * Revision 5, 2015-06-01 (James Jones)
+  ** Added issues 1 and 2 and made related spec updates.
+
+  * Revision 6, 2015-06-01 (James Jones)
+  ** Merged the platform type mappings table previously removed from
+     VK_KHR_swapchain with the platform description table in this spec.
+  ** Added issues 3 and 4 documenting choices made when building the initial
+     list of native platforms supported.
+
+  * Revision 7, 2015-06-11 (Ian Elliott)
+  ** Updated table 1 per input from the KHR TSG.
+  ** Updated issue 4 (GBM) per discussion with Daniel Stone.
+     He will create a platform-specific extension sometime in the future.
+
+  * Revision 8, 2015-06-17 (James Jones)
+  ** Updated enum-extending values using new convention.
+  ** Fixed the value of VK_SURFACE_PLATFORM_INFO_TYPE_SUPPORTED_KHR.
+
+  * Revision 9, 2015-06-17 (James Jones)
+  ** Rebased on Vulkan API version 126.
+
+  * Revision 10, 2015-06-18 (James Jones)
+  ** Marked issues 2 and 3 resolved.
+
+  * Revision 11, 2015-06-23 (Ian Elliott)
+  ** Examples now show use of function pointers for extension functions.
+  ** Eliminated extraneous whitespace.
+
+  * Revision 12, 2015-07-07 (Daniel Rakos)
+  ** Added error section describing when each error is expected to be
+     reported.
+  ** Replaced the term "`queue node index`" with "`queue family index`" in
+     the spec as that is the agreed term to be used in the latest version of
+     the core header and spec.
+  ** Replaced bool32_t with VkBool32.
+
+  * Revision 13, 2015-08-06 (Daniel Rakos)
+  ** Updated spec against latest core API header version.
+
+  * Revision 14, 2015-08-20 (Ian Elliott)
+  ** Renamed this extension and all of its enumerations, types, functions,
+     etc.
+     This makes it compliant with the proposed standard for Vulkan
+     extensions.
+  ** Switched from "`revision`" to "`version`", including use of the
+     VK_MAKE_VERSION macro in the header file.
+  ** Did miscellaneous cleanup, etc.
+
+  * Revision 15, 2015-08-20 (Ian Elliott--porting a 2015-07-29 change from
+    James Jones)
+  ** Moved the surface transform enums here from VK_WSI_swapchain so they
+     could be reused by VK_WSI_display.
+
+  * Revision 16, 2015-09-01 (James Jones)
+  ** Restore single-field revision number.
+
+  * Revision 17, 2015-09-01 (James Jones)
+  ** Fix example code compilation errors.
+
+  * Revision 18, 2015-09-26 (Jesse Hall)
+  ** Replaced VkSurfaceDescriptionKHR with the VkSurfaceKHR object, which is
+     created via layered extensions.
+     Added VkDestroySurfaceKHR.
+
+  * Revision 19, 2015-09-28 (Jesse Hall)
+  ** Renamed from VK_EXT_KHR_swapchain to VK_EXT_KHR_surface.
+
+  * Revision 20, 2015-09-30 (Jeff Vigil)
+  ** Add error result VK_ERROR_SURFACE_LOST_KHR.
+
+  * Revision 21, 2015-10-15 (Daniel Rakos)
+  ** Updated the resolution of issue #2 and include the surface capability
+     queries in this extension.
+  ** Renamed SurfaceProperties to SurfaceCapabilities as it better reflects
+     that the values returned are the capabilities of the surface on a
+     particular device.
+  ** Other minor cleanup and consistency changes.
+
+  * Revision 22, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_surface to VK_KHR_surface.
+
+  * Revision 23, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to vkDestroySurfaceKHR.
+
+  * Revision 24, 2015-11-10 (Jesse Hall)
+  ** Removed VkSurfaceTransformKHR.
+     Use VkSurfaceTransformFlagBitsKHR instead.
+  ** Rename VkSurfaceCapabilitiesKHR member maxImageArraySize to
+     maxImageArrayLayers.
+
+  * Revision 25, 2016-01-14 (James Jones)
+  ** Moved VK_ERROR_NATIVE_WINDOW_IN_USE_KHR from the VK_KHR_android_surface
+     to the VK_KHR_surface extension.
+
+  * 2016-08-23 (Ian Elliott)
+  ** Update the example code, to not have so many characters per line, and
+     to split out a new example to show how to obtain function pointers.
+
+  * 2016-08-25 (Ian Elliott)
+  ** A note was added at the beginning of the example code, stating that it
+     will be removed from future versions of the appendix.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface_protected_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface_protected_capabilities.adoc
new file mode 100644
index 0000000..277dc57
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_surface_protected_capabilities.adoc
@@ -0,0 +1,44 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_surface_protected_capabilities.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-18
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Sandeep Shinde, NVIDIA
+  - James Jones, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension extends slink:VkSurfaceCapabilities2KHR, providing
+applications a way to query whether swapchains can: be created with the
+ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR flag set.
+
+Vulkan 1.1 added (optional) support for protect memory and protected
+resources including buffers (ename:VK_BUFFER_CREATE_PROTECTED_BIT), images
+(ename:VK_IMAGE_CREATE_PROTECTED_BIT), and swapchains
+(ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR).
+However, on implementations which support multiple windowing systems, not
+all window systems may: be able to provide a protected display path.
+
+This extension provides a way to query if a protected swapchain created for
+a surface (and thus a specific windowing system) can: be displayed on
+screen.
+It extends the existing slink:VkSurfaceCapabilities2KHR structure with a new
+slink:VkSurfaceProtectedCapabilitiesKHR structure from which the application
+can: obtain information about support for protected swapchain creation
+through flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
+
+include::{generated}/interfaces/VK_KHR_surface_protected_capabilities.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-12-18 (Sandeep Shinde, Daniel Koch)
+  ** Internal revisions.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain.adoc
new file mode 100644
index 0000000..d44e375
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain.adoc
@@ -0,0 +1,774 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_swapchain.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-06
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with Vulkan 1.1
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Ian Elliott, LunarG
+  - Jesse Hall, Google
+  - Mathias Heyer, NVIDIA
+  - James Jones, NVIDIA
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+  - Faith Ekstrand, Intel
+  - Matthaeus G. Chajdas, AMD
+  - Ray Smith, ARM
+
+=== Description
+
+The `VK_KHR_swapchain` extension is the device-level companion to the
+`apiext:VK_KHR_surface` extension.
+It introduces slink:VkSwapchainKHR objects, which provide the ability to
+present rendering results to a surface.
+
+include::{generated}/interfaces/VK_KHR_swapchain.adoc[]
+
+=== Issues
+
+1) Does this extension allow the application to specify the memory backing
+of the presentable images?
+
+*RESOLVED*: No.
+Unlike standard images, the implementation will allocate the memory backing
+of the presentable image.
+
+2) What operations are allowed on presentable images?
+
+*RESOLVED*: This is determined by the image usage flags specified when
+creating the presentable image's swapchain.
+
+3) Does this extension support MSAA presentable images?
+
+*RESOLVED*: No.
+Presentable images are always single-sampled.
+Multi-sampled rendering must use regular images.
+To present the rendering results the application must manually resolve the
+multi- sampled image to a single-sampled presentable image prior to
+presentation.
+
+4) Does this extension support stereo/multi-view presentable images?
+
+*RESOLVED*: Yes.
+The number of views associated with a presentable image is determined by the
+pname:imageArrayLayers specified when creating a swapchain.
+All presentable images in a given swapchain use the same array size.
+
+5) Are the layers of stereo presentable images half-sized?
+
+*RESOLVED*: No.
+The image extents always match those requested by the application.
+
+6) Do the "`present`" and "`acquire next image`" commands operate on a
+queue? If not, do they need to include explicit semaphore objects to
+interlock them with queue operations?
+
+*RESOLVED*: The present command operates on a queue.
+The image ownership operation it represents happens in order with other
+operations on the queue, so no explicit semaphore object is required to
+synchronize its actions.
+
+Applications may want to acquire the next image in separate threads from
+those in which they manage their queue, or in multiple threads.
+To make such usage easier, the acquire next image command takes a semaphore
+to signal as a method of explicit synchronization.
+The application must later queue a wait for this semaphore before queuing
+execution of any commands using the image.
+
+7) Does flink:vkAcquireNextImageKHR block if no images are available?
+
+*RESOLVED*: The command takes a timeout parameter.
+Special values for the timeout are 0, which makes the call a non-blocking
+operation, and code:UINT64_MAX, which blocks indefinitely.
+Values in between will block for up to the specified time.
+The call will return when an image becomes available or an error occurs.
+It may, but is not required to, return before the specified timeout expires
+if the swapchain becomes out of date.
+
+8) Can multiple presents be queued using one flink:vkQueuePresentKHR call?
+
+*RESOLVED*: Yes.
+slink:VkPresentInfoKHR contains a list of swapchains and corresponding image
+indices that will be presented.
+When supported, all presentations queued with a single
+flink:vkQueuePresentKHR call will be applied atomically as one operation.
+The same swapchain must not appear in the list more than once.
+Later extensions may provide applications stronger guarantees of atomicity
+for such present operations, and/or allow them to query whether atomic
+presentation of a particular group of swapchains is possible.
+
+9) How do the presentation and acquire next image functions notify the
+application the targeted surface has changed?
+
+*RESOLVED*: Two new result codes are introduced for this purpose:
+
+  * ename:VK_SUBOPTIMAL_KHR - Presentation will still succeed, subject to
+    the window resize behavior, but the swapchain is no longer configured
+    optimally for the surface it targets.
+    Applications should query updated surface information and recreate their
+    swapchain at the next convenient opportunity.
+  * ename:VK_ERROR_OUT_OF_DATE_KHR - Failure.
+    The swapchain is no longer compatible with the surface it targets.
+    The application must query updated surface information and recreate the
+    swapchain before presentation will succeed.
+
+These can be returned by both flink:vkAcquireNextImageKHR and
+flink:vkQueuePresentKHR.
+
+10) Does the flink:vkAcquireNextImageKHR command return a semaphore to the
+application via an output parameter, or accept a semaphore to signal from
+the application as an object handle parameter?
+
+*RESOLVED*: Accept a semaphore to signal as an object handle.
+This avoids the need to specify whether the application must destroy the
+semaphore or whether it is owned by the swapchain, and if the latter, what
+its lifetime is and whether it can be reused for other operations once it is
+received from flink:vkAcquireNextImageKHR.
+
+11) What types of swapchain queuing behavior should be exposed? Options
+include swap interval specification, mailbox/most recent vs. FIFO queue
+management, targeting specific vertical blank intervals or absolute times
+for a given present operation, and probably others.
+For some of these, whether they are specified at swapchain creation time or
+as per-present parameters needs to be decided as well.
+
+*RESOLVED*: The base swapchain extension will expose 3 possible behaviors
+(of which, FIFO will always be supported):
+
+  - Immediate present: Does not wait for vertical blanking period to update
+    the current image, likely resulting in visible tearing.
+    No internal queue is used.
+    Present requests are applied immediately.
+  - Mailbox queue: Waits for the next vertical blanking period to update the
+    current image.
+    No tearing should be observed.
+    An internal single-entry queue is used to hold pending presentation
+    requests.
+    If the queue is full when a new presentation request is received, the
+    new request replaces the existing entry, and any images associated with
+    the prior entry become available for reuse by the application.
+  - FIFO queue: Waits for the next vertical blanking period to update the
+    current image.
+    No tearing should be observed.
+    An internal queue containing [eq]#ptext:numSwapchainImages - 1# entries
+    is used to hold pending presentation requests.
+    New requests are appended to the end of the queue, and one request is
+    removed from the beginning of the queue and processed during each
+    vertical blanking period in which the queue is non-empty
+
+Not all surfaces will support all of these modes, so the modes supported
+will be returned using a surface information query.
+All surfaces must support the FIFO queue mode.
+Applications must choose one of these modes up front when creating a
+swapchain.
+Switching modes can be accomplished by recreating the swapchain.
+
+12) Can ename:VK_PRESENT_MODE_MAILBOX_KHR provide non-blocking guarantees
+for flink:vkAcquireNextImageKHR? If so, what is the proper criteria?
+
+*RESOLVED*: Yes.
+The difficulty is not immediately obvious here.
+Naively, if at least 3 images are requested, mailbox mode should always have
+an image available for the application if the application does not own any
+images when the call to flink:vkAcquireNextImageKHR was made.
+However, some presentation engines may have more than one "`current`" image,
+and would still need to block in some cases.
+The right requirement appears to be that if the application allocates the
+surface's minimum number of images + 1 then it is guaranteed non-blocking
+behavior when it does not currently own any images.
+
+13) Is there a way to create and initialize a new swapchain for a surface
+that has generated a ename:VK_SUBOPTIMAL_KHR return code while still using
+the old swapchain?
+
+*RESOLVED*: Not as part of this specification.
+This could be useful to allow the application to create an "`optimal`"
+replacement swapchain and rebuild all its command buffers using it in a
+background thread at a low priority while continuing to use the
+"`suboptimal`" swapchain in the main thread.
+It could probably use the same "`atomic replace`" semantics proposed for
+recreating direct-to-device swapchains without incurring a mode switch.
+However, after discussion, it was determined some platforms probably could
+not support concurrent swapchains for the same surface though, so this will
+be left out of the base KHR extensions.
+A future extension could add this for platforms where it is supported.
+
+14) Should there be a special value for
+slink:VkSurfaceCapabilitiesKHR::pname:maxImageCount to indicate there are no
+practical limits on the number of images in a swapchain?
+
+*RESOLVED*: Yes.
+There will often be cases where there is no practical limit to the number of
+images in a swapchain other than the amount of available resources (i.e.,
+memory) in the system.
+Trying to derive a hard limit from things like memory size is prone to
+failure.
+It is better in such cases to leave it to applications to figure such soft
+limits out via trial/failure iterations.
+
+15) Should there be a special value for
+slink:VkSurfaceCapabilitiesKHR::pname:currentExtent to indicate the size of
+the platform surface is undefined:?
+
+*RESOLVED*: Yes.
+On some platforms (Wayland, for example), the surface size is defined by the
+images presented to it rather than the other way around.
+
+16) Should there be a special value for
+slink:VkSurfaceCapabilitiesKHR::pname:maxImageExtent to indicate there is no
+practical limit on the surface size?
+
+*RESOLVED*: No.
+It seems unlikely such a system would exist.
+0 could be used to indicate the platform places no limits on the extents
+beyond those imposed by Vulkan for normal images, but this query could just
+as easily return those same limits, so a special "`unlimited`" value does
+not seem useful for this field.
+
+17) How should surface rotation and mirroring be exposed to applications?
+How do they specify rotation and mirroring transforms applied prior to
+presentation?
+
+*RESOLVED*: Applications can query both the supported and current transforms
+of a surface.
+Both are specified relative to the device's "`natural`" display rotation and
+direction.
+The supported transforms indicate which orientations the presentation engine
+accepts images in.
+For example, a presentation engine that does not support transforming
+surfaces as part of presentation, and which is presenting to a surface that
+is displayed with a 90-degree rotation, would return only one supported
+transform bit: ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR.
+Applications must transform their rendering by the transform they specify
+when creating the swapchain in pname:preTransform field.
+
+18) Can surfaces ever not support etext:VK_MIRROR_NONE? Can they support
+vertical and horizontal mirroring simultaneously? Relatedly, should
+etext:VK_MIRROR_NONE[_BIT] be zero, or bit one, and should applications be
+allowed to specify multiple pre and current mirror transform bits, or
+exactly one?
+
+*RESOLVED*: Since some platforms may not support presenting with a transform
+other than the native window's current transform, and prerotation/mirroring
+are specified relative to the device's natural rotation and direction,
+rather than relative to the surface's current rotation and direction, it is
+necessary to express lack of support for no mirroring.
+To allow this, the etext:MIRROR_NONE enum must occupy a bit in the flags.
+Since etext:MIRROR_NONE must be a bit in the bitmask rather than a bitmask
+with no values set, allowing more than one bit to be set in the bitmask
+would make it possible to describe undefined: transforms such as
+etext:VK_MIRROR_NONE_BIT | etext:VK_MIRROR_HORIZONTAL_BIT, or a transform
+that includes both "`no mirroring`" and "`horizontal mirroring`"
+simultaneously.
+Therefore, it is desirable to allow specifying all supported mirroring
+transforms using only one bit.
+The question then becomes, should there be a
+etext:VK_MIRROR_HORIZONTAL_AND_VERTICAL_BIT to represent a simultaneous
+horizontal and vertical mirror transform? However, such a transform is
+equivalent to a 180 degree rotation, so presentation engines and
+applications that wish to support or use such a transform can express it
+through rotation instead.
+Therefore, 3 exclusive bits are sufficient to express all needed mirroring
+transforms.
+
+19) Should support for sRGB be required?
+
+*RESOLVED*: In the advent of UHD and HDR display devices, proper color space
+information is vital to the display pipeline represented by the swapchain.
+The app can discover the supported format/color-space pairs and select a
+pair most suited to its rendering needs.
+Currently only the sRGB color space is supported, future extensions may
+provide support for more color spaces.
+See issues 23 and 24.
+
+20) Is there a mechanism to modify or replace an existing swapchain with one
+targeting the same surface?
+
+*RESOLVED*: Yes.
+This is described above in the text.
+
+21) Should there be a way to set prerotation and mirroring using native APIs
+when presenting using a Vulkan swapchain?
+
+*RESOLVED*: Yes.
+The transforms that can be expressed in this extension are a subset of those
+possible on native platforms.
+If a platform exposes a method to specify the transform of presented images
+for a given surface using native methods and exposes more transforms or
+other properties for surfaces than Vulkan supports, it might be impossible,
+difficult, or inconvenient to set some of those properties using Vulkan KHR
+extensions and some using the native interfaces.
+To avoid overwriting properties set using native commands when presenting
+using a Vulkan swapchain, the application can set the pretransform to
+"`inherit`", in which case the current native properties will be used, or if
+none are available, a platform-specific default will be used.
+Platforms that do not specify a reasonable default or do not provide native
+mechanisms to specify such transforms should not include the inherit bits in
+the pname:supportedTransforms bitmask they return in
+slink:VkSurfaceCapabilitiesKHR.
+
+22) Should the content of presentable images be clipped by objects obscuring
+their target surface?
+
+*RESOLVED*: Applications can choose which behavior they prefer.
+Allowing the content to be clipped could enable more efficient presentation
+methods on some platforms, but some applications might rely on the content
+of presentable images to perform techniques such as partial updates or
+motion blurs.
+
+23) What is the purpose of specifying a elink:VkColorSpaceKHR along with
+elink:VkFormat when creating a swapchain?
+
+*RESOLVED*: While Vulkan itself is color space agnostic (e.g. even the
+meaning of R, G, B and A can be freely defined by the rendering
+application), the swapchain eventually will have to present the images on a
+display device with specific color reproduction characteristics.
+If any color space transformations are necessary before an image can be
+displayed, the color space of the presented image must be known to the
+swapchain.
+A swapchain will only support a restricted set of color format and -space
+pairs.
+This set can be discovered via flink:vkGetPhysicalDeviceSurfaceFormatsKHR.
+As it can be expected that most display devices support the sRGB color
+space, at least one format/color-space pair has to be exposed, where the
+color space is ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
+
+24) How are sRGB formats and the sRGB color space related?
+
+*RESOLVED*: While Vulkan exposes a number of SRGB texture formats, using
+such formats does not guarantee working in a specific color space.
+It merely means that the hardware can directly support applying the
+non-linear transfer functions defined by the sRGB standard color space when
+reading from or writing to images of those formats.
+Still, it is unlikely that a swapchain will expose a etext:*_SRGB format
+along with any color space other than
+ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
+
+On the other hand, non-etext:*_SRGB formats will be very likely exposed in
+pair with a SRGB color space.
+This means, the hardware will not apply any transfer function when reading
+from or writing to such images, yet they will still be presented on a device
+with sRGB display characteristics.
+In this case the application is responsible for applying the transfer
+function, for instance by using shader math.
+
+25) How are the lifetimes of surfaces and swapchains targeting them related?
+
+*RESOLVED*: A surface must outlive any swapchains targeting it.
+A slink:VkSurfaceKHR owns the binding of the native window to the Vulkan
+driver.
+
+26) How can the client control the way the alpha component of swapchain
+images is treated by the presentation engine during compositing?
+
+*RESOLVED*: We should add new enum values to allow the client to negotiate
+with the presentation engine on how to treat image alpha values during the
+compositing process.
+Since not all platforms can practically control this through the Vulkan
+driver, a value of ename:VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR is provided like
+for surface transforms.
+
+27) Is flink:vkCreateSwapchainKHR the right function to return
+ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, or should the various
+platform-specific slink:VkSurfaceKHR factory functions catch this error
+earlier?
+
+*RESOLVED*: For most platforms, the slink:VkSurfaceKHR structure is a simple
+container holding the data that identifies a native window or other object
+representing a surface on a particular platform.
+For the surface factory functions to return this error, they would likely
+need to register a reference on the native objects with the native display
+server somehow, and ensure no other such references exist.
+Surfaces were not intended to be that heavyweight.
+
+Swapchains are intended to be the objects that directly manipulate native
+windows and communicate with the native presentation mechanisms.
+Swapchains will already need to communicate with the native display server
+to negotiate allocation and/or presentation of presentable images for a
+native surface.
+Therefore, it makes more sense for swapchain creation to be the point at
+which native object exclusivity is enforced.
+Platforms may choose to enforce further restrictions on the number of
+slink:VkSurfaceKHR objects that may be created for the same native window if
+such a requirement makes sense on a particular platform, but a global
+requirement is only sensible at the swapchain level.
+
+ifndef::VKSC_VERSION_1_0[]
+=== Examples
+
+[NOTE]
+.Note
+====
+The example code for the `apiext:VK_KHR_surface` and `VK_KHR_swapchain`
+extensions was removed from the appendix after revision 1.0.29.
+This WSI example code was ported to the cube demo that is shipped with the
+official Khronos SDK, and is being kept up-to-date in that location (see:
+https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
+====
+endif::VKSC_VERSION_1_0[]
+
+=== Version History
+
+  * Revision 1, 2015-05-20 (James Jones)
+  ** Initial draft, based on LunarG KHR spec, other KHR specs, patches
+     attached to bugs.
+
+  * Revision 2, 2015-05-22 (Ian Elliott)
+  ** Made many agreed-upon changes from 2015-05-21 KHR TSG meeting.
+     This includes using only a queue for presentation, and having an
+     explicit function to acquire the next image.
+  ** Fixed typos and other minor mistakes.
+
+  * Revision 3, 2015-05-26 (Ian Elliott)
+  ** Improved the Description section.
+  ** Added or resolved issues that were found in improving the Description.
+     For example, pSurfaceDescription is used consistently, instead of
+     sometimes using pSurface.
+
+  * Revision 4, 2015-05-27 (James Jones)
+  ** Fixed some grammatical errors and typos
+  ** Filled in the description of imageUseFlags when creating a swapchain.
+  ** Added a description of swapInterval.
+  ** Replaced the paragraph describing the order of operations on a queue
+     for image ownership and presentation.
+
+  * Revision 5, 2015-05-27 (James Jones)
+  ** Imported relevant issues from the (abandoned)
+     vk_wsi_persistent_swapchain_images extension.
+  ** Added issues 6 and 7, regarding behavior of the acquire next image and
+     present commands with respect to queues.
+  ** Updated spec language and examples to align with proposed resolutions
+     to issues 6 and 7.
+
+  * Revision 6, 2015-05-27 (James Jones)
+  ** Added issue 8, regarding atomic presentation of multiple swapchains
+  ** Updated spec language and examples to align with proposed resolution to
+     issue 8.
+
+  * Revision 7, 2015-05-27 (James Jones)
+  ** Fixed compilation errors in example code, and made related spec fixes.
+
+  * Revision 8, 2015-05-27 (James Jones)
+  ** Added issue 9, and the related VK_SUBOPTIMAL_KHR result code.
+  ** Renamed VK_OUT_OF_DATE_KHR to VK_ERROR_OUT_OF_DATE_KHR.
+
+  * Revision 9, 2015-05-27 (James Jones)
+  ** Added inline proposed resolutions (marked with [JRJ]) to some XXX
+     questions/issues.
+     These should be moved to the issues section in a subsequent update if
+     the proposals are adopted.
+
+  * Revision 10, 2015-05-28 (James Jones)
+  ** Converted vkAcquireNextImageKHR back to a non-queue operation that uses
+     a VkSemaphore object for explicit synchronization.
+  ** Added issue 10 to determine whether vkAcquireNextImageKHR generates or
+     returns semaphores, or whether it operates on a semaphore provided by
+     the application.
+
+  * Revision 11, 2015-05-28 (James Jones)
+  ** Marked issues 6, 7, and 8 resolved.
+  ** Renamed VkSurfaceCapabilityPropertiesKHR to VkSurfacePropertiesKHR to
+     better convey the mutable nature of the information it contains.
+
+  * Revision 12, 2015-05-28 (James Jones)
+  ** Added issue 11 with a proposed resolution, and the related issue 12.
+  ** Updated various sections of the spec to match the proposed resolution
+     to issue 11.
+
+  * Revision 13, 2015-06-01 (James Jones)
+  ** Moved some structures to VK_EXT_KHR_swap_chain to resolve the
+     specification's issues 1 and 2.
+
+  * Revision 14, 2015-06-01 (James Jones)
+  ** Added code for example 4 demonstrating how an application might make
+     use of the two different present and acquire next image KHR result
+     codes.
+  ** Added issue 13.
+
+  * Revision 15, 2015-06-01 (James Jones)
+  ** Added issues 14 - 16 and related spec language.
+  ** Fixed some spelling errors.
+  ** Added language describing the meaningful return values for
+     vkAcquireNextImageKHR and vkQueuePresentKHR.
+
+  * Revision 16, 2015-06-02 (James Jones)
+  ** Added issues 17 and 18, as well as related spec language.
+  ** Removed some erroneous text added by mistake in the last update.
+
+  * Revision 17, 2015-06-15 (Ian Elliott)
+  ** Changed special value from "`-1`" to "`0`" so that the data types can
+     be unsigned.
+
+  * Revision 18, 2015-06-15 (Ian Elliott)
+  ** Clarified the values of VkSurfacePropertiesKHR::minImageCount and the
+     timeout parameter of the vkAcquireNextImageKHR function.
+
+  * Revision 19, 2015-06-17 (James Jones)
+  ** Misc.
+     cleanup.
+     Removed resolved inline issues and fixed typos.
+  ** Fixed clarification of VkSurfacePropertiesKHR::minImageCount made in
+     version 18.
+  ** Added a brief "`Image Ownership`" definition to the list of terms used
+     in the spec.
+
+  * Revision 20, 2015-06-17 (James Jones)
+  ** Updated enum-extending values using new convention.
+
+  * Revision 21, 2015-06-17 (James Jones)
+  ** Added language describing how to use
+     VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR.
+  ** Cleaned up an XXX comment regarding the description of which queues
+     vkQueuePresentKHR can be used on.
+
+  * Revision 22, 2015-06-17 (James Jones)
+  ** Rebased on Vulkan API version 126.
+
+  * Revision 23, 2015-06-18 (James Jones)
+  ** Updated language for issue 12 to read as a proposed resolution.
+  ** Marked issues 11, 12, 13, 16, and 17 resolved.
+  ** Temporarily added links to the relevant bugs under the remaining
+     unresolved issues.
+  ** Added issues 19 and 20 as well as proposed resolutions.
+
+  * Revision 24, 2015-06-19 (Ian Elliott)
+  ** Changed special value for VkSurfacePropertiesKHR::currentExtent back to
+     "`-1`" from "`0`".
+     This value will never need to be unsigned, and "`0`" is actually a
+     legal value.
+
+  * Revision 25, 2015-06-23 (Ian Elliott)
+  ** Examples now show use of function pointers for extension functions.
+  ** Eliminated extraneous whitespace.
+
+  * Revision 26, 2015-06-25 (Ian Elliott)
+  ** Resolved Issues 9 & 10 per KHR TSG meeting.
+
+  * Revision 27, 2015-06-25 (James Jones)
+  ** Added oldSwapchain member to VkSwapchainCreateInfoKHR.
+
+  * Revision 28, 2015-06-25 (James Jones)
+  ** Added the "`inherit`" bits to the rotation and mirroring flags and the
+     associated issue 21.
+
+  * Revision 29, 2015-06-25 (James Jones)
+  ** Added the "`clipped`" flag to VkSwapchainCreateInfoKHR, and the
+     associated issue 22.
+  ** Specified that presenting an image does not modify it.
+
+  * Revision 30, 2015-06-25 (James Jones)
+  ** Added language to the spec that clarifies the behavior of
+     vkCreateSwapchainKHR() when the oldSwapchain field of
+     VkSwapchainCreateInfoKHR is not NULL.
+
+  * Revision 31, 2015-06-26 (Ian Elliott)
+  ** Example of new VkSwapchainCreateInfoKHR members, "`oldSwapchain`" and
+     "`clipped`".
+  ** Example of using VkSurfacePropertiesKHR::{min|max}ImageCount to set
+     VkSwapchainCreateInfoKHR::minImageCount.
+  ** Rename vkGetSurfaceInfoKHR()'s 4th parameter to "`pDataSize`", for
+     consistency with other functions.
+  ** Add macro with C-string name of extension (just to header file).
+
+  * Revision 32, 2015-06-26 (James Jones)
+  ** Minor adjustments to the language describing the behavior of
+     "`oldSwapchain`"
+  ** Fixed the version date on my previous two updates.
+
+  * Revision 33, 2015-06-26 (Jesse Hall)
+  ** Add usage flags to VkSwapchainCreateInfoKHR
+
+  * Revision 34, 2015-06-26 (Ian Elliott)
+  ** Rename vkQueuePresentKHR()'s 2nd parameter to "`pPresentInfo`", for
+     consistency with other functions.
+
+  * Revision 35, 2015-06-26 (Faith Ekstrand)
+  ** Merged the VkRotationFlagBitsKHR and VkMirrorFlagBitsKHR enums into a
+     single VkSurfaceTransformFlagBitsKHR enum.
+
+  * Revision 36, 2015-06-26 (Faith Ekstrand)
+  ** Added a VkSurfaceTransformKHR enum that is not a bitmask.
+     Each value in VkSurfaceTransformKHR corresponds directly to one of the
+     bits in VkSurfaceTransformFlagBitsKHR so transforming from one to the
+     other is easy.
+     Having a separate enum means that currentTransform and preTransform are
+     now unambiguous by definition.
+
+  * Revision 37, 2015-06-29 (Ian Elliott)
+  ** Corrected one of the signatures of vkAcquireNextImageKHR, which had the
+     last two parameters switched from what it is elsewhere in the
+     specification and header files.
+
+  * Revision 38, 2015-06-30 (Ian Elliott)
+  ** Corrected a typo in description of the vkGetSwapchainInfoKHR()
+     function.
+  ** Corrected a typo in header file comment for VkPresentInfoKHR::sType.
+
+  * Revision 39, 2015-07-07 (Daniel Rakos)
+  ** Added error section describing when each error is expected to be
+     reported.
+  ** Replaced bool32_t with VkBool32.
+
+  * Revision 40, 2015-07-10 (Ian Elliott)
+  ** Updated to work with version 138 of the `vulkan.h` header.
+     This includes declaring the VkSwapchainKHR type using the new
+     VK_DEFINE_NONDISP_HANDLE macro, and no longer extending VkObjectType
+     (which was eliminated).
+
+  * Revision 41 2015-07-09 (Mathias Heyer)
+  ** Added color space language.
+
+  * Revision 42, 2015-07-10 (Daniel Rakos)
+  ** Updated query mechanism to reflect the convention changes done in the
+     core spec.
+  ** Removed "`queue`" from the name of
+     VK_STRUCTURE_TYPE_QUEUE_PRESENT_INFO_KHR to be consistent with the
+     established naming convention.
+  ** Removed reference to the no longer existing VkObjectType enum.
+
+  * Revision 43, 2015-07-17 (Daniel Rakos)
+  ** Added support for concurrent sharing of swapchain images across queue
+     families.
+  ** Updated sample code based on recent changes
+
+  * Revision 44, 2015-07-27 (Ian Elliott)
+  ** Noted that support for VK_PRESENT_MODE_FIFO_KHR is required.
+     That is ICDs may optionally support IMMEDIATE and MAILBOX, but must
+     support FIFO.
+
+  * Revision 45, 2015-08-07 (Ian Elliott)
+  ** Corrected a typo in spec file (type and variable name had wrong case
+     for the imageColorSpace member of the VkSwapchainCreateInfoKHR struct).
+  ** Corrected a typo in header file (last parameter in
+     PFN_vkGetSurfacePropertiesKHR was missing "`KHR`" at the end of type:
+     VkSurfacePropertiesKHR).
+
+  * Revision 46, 2015-08-20 (Ian Elliott)
+  ** Renamed this extension and all of its enumerations, types, functions,
+     etc.
+     This makes it compliant with the proposed standard for Vulkan
+     extensions.
+  ** Switched from "`revision`" to "`version`", including use of the
+     VK_MAKE_VERSION macro in the header file.
+  ** Made improvements to several descriptions.
+  ** Changed the status of several issues from PROPOSED to RESOLVED, leaving
+     no unresolved issues.
+  ** Resolved several TODOs, did miscellaneous cleanup, etc.
+
+  * Revision 47, 2015-08-20 (Ian Elliott--porting a 2015-07-29 change from
+    James Jones)
+  ** Moved the surface transform enums to VK_WSI_swapchain so they could be
+     reused by VK_WSI_display.
+
+  * Revision 48, 2015-09-01 (James Jones)
+  ** Various minor cleanups.
+
+  * Revision 49, 2015-09-01 (James Jones)
+  ** Restore single-field revision number.
+
+  * Revision 50, 2015-09-01 (James Jones)
+  ** Update Example #4 to include code that illustrates how to use the
+     oldSwapchain field.
+
+  * Revision 51, 2015-09-01 (James Jones)
+  ** Fix example code compilation errors.
+
+  * Revision 52, 2015-09-08 (Matthaeus G. Chajdas)
+  ** Corrected a typo.
+
+  * Revision 53, 2015-09-10 (Alon Or-bach)
+  ** Removed underscore from SWAP_CHAIN left in
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR.
+
+  * Revision 54, 2015-09-11 (Jesse Hall)
+  ** Described the execution and memory coherence requirements for image
+     transitions to and from VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR.
+
+  * Revision 55, 2015-09-11 (Ray Smith)
+  ** Added errors for destroying and binding memory to presentable images
+
+  * Revision 56, 2015-09-18 (James Jones)
+  ** Added fence argument to vkAcquireNextImageKHR
+  ** Added example of how to meter a host thread based on presentation rate.
+
+  * Revision 57, 2015-09-26 (Jesse Hall)
+  ** Replace VkSurfaceDescriptionKHR with VkSurfaceKHR.
+  ** Added issue 25 with agreed resolution.
+
+  * Revision 58, 2015-09-28 (Jesse Hall)
+  ** Renamed from VK_EXT_KHR_device_swapchain to VK_EXT_KHR_swapchain.
+
+  * Revision 59, 2015-09-29 (Ian Elliott)
+  ** Changed vkDestroySwapchainKHR() to return void.
+
+  * Revision 60, 2015-10-01 (Jeff Vigil)
+  ** Added error result VK_ERROR_SURFACE_LOST_KHR.
+
+  * Revision 61, 2015-10-05 (Faith Ekstrand)
+  ** Added the VkCompositeAlpha enum and corresponding structure fields.
+
+  * Revision 62, 2015-10-12 (Daniel Rakos)
+  ** Added VK_PRESENT_MODE_FIFO_RELAXED_KHR.
+
+  * Revision 63, 2015-10-15 (Daniel Rakos)
+  ** Moved surface capability queries to VK_EXT_KHR_surface.
+
+  * Revision 64, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_swapchain to VK_KHR_swapchain.
+
+  * Revision 65, 2015-10-28 (Ian Elliott)
+  ** Added optional pResult member to VkPresentInfoKHR, so that
+     per-swapchain results can be obtained from vkQueuePresentKHR().
+
+  * Revision 66, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to create and destroy functions.
+  ** Updated resource transition language.
+  ** Updated sample code.
+
+  * Revision 67, 2015-11-10 (Jesse Hall)
+  ** Add reserved flags bitmask to VkSwapchainCreateInfoKHR.
+  ** Modify naming and member ordering to match API style conventions, and
+     so the VkSwapchainCreateInfoKHR image property members mirror
+     corresponding VkImageCreateInfo members but with an 'image' prefix.
+  ** Make VkPresentInfoKHR::pResults non-const; it is an output array
+     parameter.
+  ** Make pPresentInfo parameter to vkQueuePresentKHR const.
+
+  * Revision 68, 2016-04-05 (Ian Elliott)
+  ** Moved the "`validity`" include for vkAcquireNextImage to be in its
+     proper place, after the prototype and list of parameters.
+  ** Clarified language about presentable images, including how they are
+     acquired, when applications can and cannot use them, etc.
+     As part of this, removed language about "`ownership`" of presentable
+     images, and replaced it with more-consistent language about presentable
+     images being "`acquired`" by the application.
+
+  * 2016-08-23 (Ian Elliott)
+  ** Update the example code, to use the final API command names, to not
+     have so many characters per line, and to split out a new example to
+     show how to obtain function pointers.
+     This code is more similar to the LunarG "`cube`" demo program.
+
+  * 2016-08-25 (Ian Elliott)
+  ** A note was added at the beginning of the example code, stating that it
+     will be removed from future versions of the appendix.
+
+  * Revision 69, 2017-09-07 (Tobias Hector)
+  ** Added interactions with Vulkan 1.1
+
+  * Revision 70, 2017-10-06 (Ian Elliott)
+  ** Corrected interactions with Vulkan 1.1
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain_mutable_format.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain_mutable_format.adoc
new file mode 100644
index 0000000..2c7d200
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_swapchain_mutable_format.adoc
@@ -0,0 +1,63 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_swapchain_mutable_format.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-03-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Faith Ekstrand, Intel
+  - Jan-Harald Fredriksen, ARM
+  - Jesse Hall, Google
+  - Daniel Rakos, AMD
+  - Ray Smith, ARM
+
+=== Description
+
+This extension allows processing of swapchain images as different formats to
+that used by the window system, which is particularly useful for switching
+between sRGB and linear RGB formats.
+
+It adds a new swapchain creation flag that enables creating image views from
+presentable images with a different format than the one used to create the
+swapchain.
+
+include::{generated}/interfaces/VK_KHR_swapchain_mutable_format.adoc[]
+
+=== Issues
+
+1) Are there any new capabilities needed?
+
+*RESOLVED*: No.
+It is expected that all implementations exposing this extension support
+swapchain image format mutability.
+
+2) Do we need a separate etext:VK_SWAPCHAIN_CREATE_EXTENDED_USAGE_BIT_KHR?
+
+*RESOLVED*: No.
+This extension requires `VK_KHR_maintenance2` and presentable images of
+swapchains created with ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR are
+created internally in a way equivalent to specifying both
+ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and
+ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR.
+
+3) Do we need a separate structure to allow specifying an image format list
+for swapchains?
+
+*RESOLVED*: No.
+We simply use the same slink:VkImageFormatListCreateInfoKHR structure
+introduced by `VK_KHR_image_format_list`.
+The structure is required to be included in the pname:pNext chain of
+slink:VkSwapchainCreateInfoKHR for swapchains created with
+ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR.
+
+
+=== Version History
+
+  * Revision 1, 2018-03-28 (Daniel Rakos)
+  ** Internal revisions.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_synchronization2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_synchronization2.adoc
new file mode 100644
index 0000000..65c8db1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_synchronization2.adoc
@@ -0,0 +1,103 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_synchronization2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-12-03
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+  - Interacts with `apiext:VK_KHR_create_renderpass2`
+*Contributors*::
+  - Tobias Hector
+
+=== Description
+
+This extension modifies the original core synchronization APIs to simplify
+the interface and improve usability of these APIs.
+It also adds new pipeline stage and access flag types that extend into the
+64-bit range, as we have run out within the 32-bit range.
+The new flags are identical to the old values within the 32-bit range, with
+new stages and bits beyond that.
+
+Pipeline stages and access flags are now specified together in memory
+barrier structures, making the connection between the two more obvious.
+Additionally, scoping the pipeline stages into the barrier structs allows
+the use of the etext:MEMORY_READ and etext:MEMORY_WRITE flags without
+sacrificing precision.
+The per-stage access flags should be used to disambiguate specific accesses
+in a given stage or set of stages - for instance, between uniform reads and
+sampling operations.
+
+Layout transitions have been simplified as well; rather than requiring a
+different set of layouts for depth/stencil/color attachments, there are
+generic ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR and
+ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR layouts which are contextually
+applied based on the image format.
+For example, for a depth format image,
+ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR is equivalent to
+ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR.
+ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR also functionally replaces
+ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
+
+Events are now more efficient, because they include memory dependency
+information when you set them on the device.
+Previously, this information was only known when waiting on an event, so the
+dependencies could not be satisfied until the wait occurred.
+That sometimes meant stalling the pipeline when the wait occurred.
+The new API provides enough information for implementations to satisfy these
+dependencies in parallel with other tasks.
+
+Queue submission has been changed to wrap command buffers and semaphores in
+extensible structures, which incorporate changes from Vulkan 1.1,
+`apiext:VK_KHR_device_group`, and `apiext:VK_KHR_timeline_semaphore`.
+This also adds a pipeline stage to the semaphore signal operation, mirroring
+the existing pipeline stage specification for wait operations.
+
+Other miscellaneous changes include:
+
+  * Events can now be specified as interacting only with the device,
+    allowing more efficient access to the underlying object.
+  * Image memory barriers that do not perform an image layout transition can
+    be specified by setting pname:oldLayout equal to pname:newLayout.
+  ** E.g. the old and new layout can both be set to
+     ename:VK_IMAGE_LAYOUT_UNDEFINED, without discarding data in the image.
+  * Queue family ownership transfer parameters are simplified in some cases.
+  * Where two synchronization commands need to be matched up (queue transfer
+    operations, events), the dependency information specified in each place
+    must now match completely for consistency.
+  * Extensions with commands or functions with a tlink:VkPipelineStageFlags
+    or elink:VkPipelineStageFlagBits parameter have had those APIs replaced
+    with equivalents using tlink:VkPipelineStageFlags2KHR.
+  * The new event and barrier interfaces are now more extensible for future
+    changes.
+  * Relevant pipeline stage masks can now be specified as empty with the new
+    ename:VK_PIPELINE_STAGE_NONE_KHR and ename:VK_PIPELINE_STAGE_2_NONE_KHR
+    values.
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+  * slink:VkMemoryBarrier2KHR can be chained to slink:VkSubpassDependency2,
+    overriding the original 32-bit stage and access masks.
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+include::{generated}/interfaces/VK_KHR_synchronization2.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Examples
+
+See
+https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples
+
+
+=== Version History
+
+  * Revision 1, 2020-12-03 (Tobias Hector)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_timeline_semaphore.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_timeline_semaphore.adoc
new file mode 100644
index 0000000..46ceca4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_timeline_semaphore.adoc
@@ -0,0 +1,150 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_timeline_semaphore.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-12
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension interacts with
+    `apiext:VK_KHR_external_semaphore_capabilities`
+  - This extension interacts with `apiext:VK_KHR_external_semaphore`
+  - This extension interacts with `apiext:VK_KHR_external_semaphore_win32`
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Yuriy O'Donnell, Epic Games
+  - Faith Ekstrand, Intel
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Daniel Rakos, AMD
+  - Ray Smith, Arm
+
+=== Description
+
+This extension introduces a new type of semaphore that has an integer
+payload identifying a point in a timeline.
+Such timeline semaphores support the following operations:
+
+  * Host query - A host operation that allows querying the payload of the
+    timeline semaphore.
+  * Host wait - A host operation that allows a blocking wait for a timeline
+    semaphore to reach a specified value.
+  * Host signal - A host operation that allows advancing the timeline
+    semaphore to a specified value.
+  * Device wait - A device operation that allows waiting for a timeline
+    semaphore to reach a specified value.
+  * Device signal - A device operation that allows advancing the timeline
+    semaphore to a specified value.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_timeline_semaphore.adoc[]
+
+=== Issues
+
+1) Do we need a new object type for this?
+
+*RESOLVED*: No, we just introduce a new type of semaphore object, as
+`VK_KHR_external_semaphore_win32` already uses semaphores as the destination
+for importing D3D12 fence objects, which are semantically close/identical to
+the proposed synchronization primitive.
+
+2) What type of payload the new synchronization primitive has?
+
+*RESOLVED*: A 64-bit unsigned integer that can only be set to strictly
+increasing values by signal operations and is not changed by wait
+operations.
+
+3) Does the new synchronization primitive have the same signal-before-wait
+requirement as the existing semaphores do?
+
+*RESOLVED*: No.
+Timeline semaphores support signaling and waiting entirely asynchronously.
+It is the responsibility of the client to avoid deadlock.
+
+4) Does the new synchronization primitive allow resetting its payload?
+
+*RESOLVED*: No, allowing the payload value to "`go backwards`" is
+problematic.
+Applications looking for reset behavior should create a new instance of the
+synchronization primitive instead.
+
+5) How do we enable host waits on the synchronization primitive?
+
+*RESOLVED*: Both a non-blocking query of the current payload value of the
+synchronization primitive, and a blocking wait operation are provided.
+
+6) How do we enable device waits and signals on the synchronization
+primitive?
+
+*RESOLVED*: Similar to `VK_KHR_external_semaphore_win32`, this extension
+introduces a new structure that can be chained to slink:VkSubmitInfo to
+specify the values signaled semaphores should be set to, and the values
+waited semaphores need to reach.
+
+7) Can the new synchronization primitive be used to synchronize presentation
+and swapchain image acquisition operations?
+
+*RESOLVED*: Some implementations may have problems with supporting that
+directly, thus it is not allowed in this extension.
+
+8) Do we want to support external sharing of the new synchronization
+primitive type?
+
+*RESOLVED*: Yes.
+Timeline semaphore specific external sharing capabilities can be queried
+using flink:vkGetPhysicalDeviceExternalSemaphoreProperties by chaining the
+new slink:VkSemaphoreTypeCreateInfoKHR structure to its
+pname:pExternalSemaphoreInfo structure.
+This allows having a different set of external semaphore handle types
+supported for timeline semaphores vs. binary semaphores.
+
+9) Do we need to add a host signal operation for the new synchronization
+primitive type?
+
+*RESOLVED*: Yes.
+This helps in situations where one host thread submits a workload but
+another host thread has the information on when the workload is ready to be
+executed.
+
+10) How should the new synchronization primitive interact with the ordering
+requirements of the original sname:VkSemaphore?
+
+*RESOLVED*: Prior to calling any command which may: cause a wait operation
+on a binary semaphore, the client must: ensure that the semaphore signal
+operation that has been submitted for execution and any semaphore signal
+operations on which it depends (if any) must: have also been submitted for
+execution.
+
+11) Should we have separate feature bits for different sub-features of
+timeline semaphores?
+
+*RESOLVED*: No.
+The only feature which cannot be supported universally is timeline semaphore
+import/export.
+For import/export, the client is already required to query available
+external handle types via
+flink:vkGetPhysicalDeviceExternalSemaphoreProperties and provide the
+semaphore type by adding a slink:VkSemaphoreTypeCreateInfoKHR structure to
+the pname:pNext chain of slink:VkPhysicalDeviceExternalSemaphoreInfo so no
+new feature bit is required.
+
+=== Version History
+
+  * Revision 1, 2018-05-10 (Faith Ekstrand)
+  ** Initial version
+
+  * Revision 2, 2019-06-12 (Faith Ekstrand)
+  ** Added an initialValue parameter to timeline semaphore creation
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_uniform_buffer_standard_layout.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_uniform_buffer_standard_layout.adoc
new file mode 100644
index 0000000..153dfca
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_uniform_buffer_standard_layout.adoc
@@ -0,0 +1,43 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_uniform_buffer_standard_layout.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-25
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*Contributors*::
+  - Graeme Leese, Broadcom
+  - Jeff Bolz, NVIDIA
+  - Tobias Hector, AMD
+  - Faith Ekstrand, Intel
+  - Neil Henning, AMD
+
+=== Description
+
+This extension enables tighter array and struct packing to be used with
+uniform buffers.
+
+It modifies the alignment rules for uniform buffers, allowing for tighter
+packing of arrays and structures.
+This allows, for example, the std430 layout, as defined in
+https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.pdf[GLSL] to
+be supported in uniform buffers.
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_uniform_buffer_standard_layout.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-01-25 (Graeme Leese)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_variable_pointers.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_variable_pointers.adoc
new file mode 100644
index 0000000..2547464
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_variable_pointers.adoc
@@ -0,0 +1,84 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_variable_pointers.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-09-05
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_variable_pointers.html[`SPV_KHR_variable_pointers`]
+  - Promoted to Vulkan 1.1 Core
+*Contributors*::
+  - John Kessenich, Google
+  - Neil Henning, Codeplay
+  - David Neto, Google
+  - Daniel Koch, Nvidia
+  - Graeme Leese, Broadcom
+  - Weifeng Zhang, Qualcomm
+  - Stephen Clarke, Imagination Technologies
+  - Faith Ekstrand, Intel
+  - Jesse Hall, Google
+
+=== Description
+
+The `VK_KHR_variable_pointers` extension allows implementations to indicate
+their level of support for the `SPV_KHR_variable_pointers` SPIR-V extension.
+The SPIR-V extension allows shader modules to use invocation-private
+pointers into uniform and/or storage buffers, where the pointer values can
+be dynamic and non-uniform.
+
+The `SPV_KHR_variable_pointers` extension introduces two capabilities.
+The first, code:VariablePointersStorageBuffer, must: be supported by all
+implementations of this extension.
+The second, code:VariablePointers, is optional.
+
+=== Promotion to Vulkan 1.1
+
+All functionality in this extension is included in core Vulkan 1.1, with the
+KHR suffix omitted, however support for the
+<<features-variablePointersStorageBuffer,
+pname:variablePointersStorageBuffer>> feature is made optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_variable_pointers.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-VariablePointers, code:VariablePointers>>
+  * <<spirvenv-capabilities-table-VariablePointersStorageBuffer,
+    code:VariablePointersStorageBuffer>>
+
+=== Issues
+
+1) Do we need an optional property for the SPIR-V
+code:VariablePointersStorageBuffer capability or should it be mandatory when
+this extension is advertised?
+
+*RESOLVED*: Add it as a distinct feature, but make support mandatory.
+Adding it as a feature makes the extension easier to include in a future
+core API version.
+In the extension, the feature is mandatory, so that presence of the
+extension guarantees some functionality.
+When included in a core API version, the feature would be optional.
+
+2) Can support for these capabilities vary between shader stages?
+
+*RESOLVED*: No, if the capability is supported in any stage it must be
+supported in all stages.
+
+3) Should the capabilities be features or limits?
+
+*RESOLVED*: Features, primarily for consistency with other similar
+extensions.
+
+=== Version History
+
+  * Revision 1, 2017-03-14 (Jesse Hall and John Kessenich)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h264.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h264.adoc
new file mode 100644
index 0000000..1ab35ef
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h264.adoc
@@ -0,0 +1,77 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_decode_h264.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - Chunbo Chen, Intel
+  - HoHin Lau, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Daniel Rakos, RasterGrid
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_decode_queue` extension
+by adding support for decoding elementary video stream sequences compliant
+with the H.264/AVC video compression standard.
+
+[NOTE]
+.Note
+====
+This extension was promoted to `KHR` from the provisional extension
+`VK_EXT_video_decode_h264`.
+====
+
+include::{generated}/interfaces/VK_KHR_video_decode_h264.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-6-11 (Peter Fang)
+  ** Initial draft
+  * Revision 2, March 29 2021 (Tony Zlatinski)
+  ** Spec and API Updates
+  * Revision 3, August 1 2021 (Srinath Kumarapuram)
+  ** Rename `VkVideoDecodeH264FieldLayoutFlagsEXT` to
+     `VkVideoDecodeH264PictureLayoutFlagsEXT`,
+     `VkVideoDecodeH264FieldLayoutFlagBitsEXT` to
+     `VkVideoDecodeH264PictureLayoutFlagBitsEXT` (along with the names of
+     enumerants it defines), and `VkVideoDecodeH264ProfileEXT.fieldLayout`
+     to `VkVideoDecodeH264ProfileEXT.pictureLayout`, following Vulkan naming
+     conventions.
+  * Revision 4, 2022-03-16 (Ahmed Abdelkhalek)
+  ** Relocate Std header version reporting/requesting from this extension to
+     VK_KHR_video_queue extension.
+  ** Remove the now empty VkVideoDecodeH264SessionCreateInfoEXT.
+  * Revision 5, 2022-03-31 (Ahmed Abdelkhalek)
+  ** Use type StdVideoH264Level for VkVideoDecodeH264Capabilities.maxLevel
+  * Revision 6, 2022-08-09 (Daniel Rakos)
+  ** Rename `VkVideoDecodeH264ProfileEXT` to
+     `VkVideoDecodeH264ProfileInfoEXT`
+  ** Rename `VkVideoDecodeH264MvcEXT` to `VkVideoDecodeH264MvcInfoEXT`
+  * Revision 7, 2022-09-18 (Daniel Rakos)
+  ** Change type of `VkVideoDecodeH264ProfileInfoEXT::pictureLayout` to
+     `VkVideoDecodeH264PictureLayoutFlagBitsEXT`
+  ** Remove MVC support and related `VkVideoDecodeH264MvcInfoEXT` structure
+  ** Rename `spsStdCount`, `pSpsStd`, `ppsStdCount`, and `pPpsStd` to
+     `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively,
+     in `VkVideoDecodeH264SessionParametersAddInfoEXT`
+  ** Rename `maxSpsStdCount` and `maxPpsStdCount` to `maxStdSPSCount` and
+     `maxStdPPSCount`, respectively, in
+     `VkVideoDecodeH264SessionParametersCreateInfoEXT`
+  ** Rename `slicesCount` and `pSlicesDataOffsets` to `sliceCount` and
+     `pSliceOffsets`, respectively, in `VkVideoDecodeH264PictureInfoEXT`
+  * Revision 8, 2022-09-29 (Daniel Rakos)
+  ** Change extension from `EXT` to `KHR`
+  ** Extension is no longer provisional
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h265.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h265.adoc
new file mode 100644
index 0000000..fd84d97
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_h265.adoc
@@ -0,0 +1,67 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_decode_h265.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - HoHin Lau, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Daniel Rakos, RasterGrid
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_decode_queue` extension
+by adding support for decoding elementary video stream sequences compliant
+with the H.265/HEVC video compression standard.
+
+[NOTE]
+.Note
+====
+This extension was promoted to `KHR` from the provisional extension
+`VK_EXT_video_decode_h265`.
+====
+
+include::{generated}/interfaces/VK_KHR_video_decode_h265.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-6-11 (Peter Fang)
+  ** Initial draft
+  * Revision 1.6, March 29 2021 (Tony Zlatinski)
+  ** Spec and API updates.
+  * Revision 2, 2022-03-16 (Ahmed Abdelkhalek)
+  ** Relocate Std header version reporting/requesting from this extension to
+     VK_KHR_video_queue extension.
+  ** Remove the now empty VkVideoDecodeH265SessionCreateInfoEXT.
+  * Revision 3, 2022-03-31 (Ahmed Abdelkhalek)
+  ** Use type StdVideoH265Level for VkVideoDecodeH265Capabilities.maxLevel
+  * Revision 4, 2022-08-09 (Daniel Rakos)
+  ** Rename `VkVideoDecodeH265ProfileEXT` to
+     `VkVideoDecodeH265ProfileInfoEXT`
+  * Revision 5, 2022-09-18 (Daniel Rakos)
+  ** Rename `vpsStdCount`, `pVpsStd`, `spsStdCount`, `pSpsStd`,
+     `ppsStdCount`, and `pPpsStd` to `stdVPSCount`, `pStdVPSs`,
+     `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively,
+     in `VkVideoDecodeH265SessionParametersAddInfoEXT`
+  ** Rename `maxVpsStdCount`, `maxSpsStdCount`, and `maxPpsStdCount` to
+     `maxStdVPSCount`, `maxStdSPSCount` and `maxStdPPSCount`, respectively,
+     in `VkVideoDecodeH265SessionParametersCreateInfoEXT`
+  ** Rename `slicesCount` and `pSlicesDataOffsets` to `sliceCount` and
+     `pSliceOffsets`, respectively, in `VkVideoDecodeH265PictureInfoEXT`
+  * Revision 6, 2022-11-14 (Daniel Rakos)
+  ** Rename `slice` to `sliceSegment` in the APIs for better clarity
+  * Revision 7, 2022-11-14 (Daniel Rakos)
+  ** Change extension from `EXT` to `KHR`
+  ** Extension is no longer provisional
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_queue.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_queue.adoc
new file mode 100644
index 0000000..f3c370d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_decode_queue.adoc
@@ -0,0 +1,63 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_decode_queue.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - Jake Beju, AMD
+  - Olivier Lapicque, NVIDIA
+  - Peter Fang, AMD
+  - Piers Daniell, NVIDIA
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Daniel Rakos, RasterGrid
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_queue` extension by
+adding common APIs specific to video decoding and thus enabling
+implementations to expose queue families supporting video decode operations.
+
+More specifically, it adds video decode specific capabilities and a new
+command buffer command that allows recording video decode operations against
+a video session.
+
+This extension is to be used in conjunction with other codec specific video
+decode extensions that enable decoding video sequences of specific video
+compression standards.
+
+include::{generated}/interfaces/VK_KHR_video_decode_queue.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-6-11 (Peter Fang)
+  ** Initial draft
+  * Revision 1.5, Nov 09 2018 (Tony Zlatinski)
+  ** API Updates
+  * Revision 1.6, Jan 08 2020 (Tony Zlatinski)
+  ** API unify with the video_encode_queue spec
+  * Revision 1.7, March 29 2021 (Tony Zlatinski)
+  ** Spec and API updates.
+  * Revision 2, September 30 2021 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
+  * Revision 3, 2022-02-25 (Ahmed Abdelkhalek)
+  ** Add VkVideoDecodeCapabilitiesKHR with new flags to report support for
+     decode DPB and output coinciding in the same image, or in distinct
+     images.
+  * Revision 4, 2022-03-31 (Ahmed Abdelkhalek)
+  ** Remove redundant VkVideoDecodeInfoKHR.coded{Offset|Extent}
+  * Revision 5, 2022-07-18 (Daniel Rakos)
+  ** Remove `VkVideoDecodeFlagBitsKHR` as it contains no defined flags for
+     now
+  * Revision 6, 2022-08-12 (Daniel Rakos)
+  ** Add VkVideoDecodeUsageInfoKHR structure and related flags
+  * Revision 7, 2022-09-29 (Daniel Rakos)
+  ** Extension is no longer provisional
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_encode_queue.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_encode_queue.adoc
new file mode 100644
index 0000000..7517835
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_encode_queue.adoc
@@ -0,0 +1,132 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_encode_queue.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-07-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - Damien Kessler, NVIDIA
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Piers Daniell, NVIDIA
+  - Srinath Kumarapuram, NVIDIA
+  - Thomas J. Meier, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Ravi Chaudhary, NVIDIA
+  - Yang Liu, AMD
+  - Daniel Rakos, RasterGrid
+  - Ping Liu, Intel
+  - Aidan Fabius, Core Avionics & Industrial Inc.
+
+=== Description
+
+This extension builds upon the `apiext:VK_KHR_video_queue` extension by
+adding common APIs specific to video encoding and thus enabling
+implementations to expose queue families supporting video encode operations.
+
+More specifically, it adds video encode specific capabilities and a new
+command buffer command that allows recording video encode operations against
+a video session.
+
+This extension is to be used in conjunction with other codec specific video
+encode extensions that enable encoding video sequences of specific video
+compression standards.
+
+include::{generated}/interfaces/VK_KHR_video_encode_queue.adoc[]
+
+=== Issues
+
+1) Why is there no `VK_PIPELINE_STAGE_VIDEO_ENCODE_BIT_KHR`?
+
+*RESOLVED*: This extension requires `VK_KHR_synchronization2` because the
+new access flags introduced did not fit in the 32-bit enum
+`VkAccessFlagBits`.
+Accordingly, all new pipeline stage and access flags have been added to the
+corresponding 64-bit enum and no new flags have been added to the legacy
+32-bit enums.
+While the new pipeline stage flag introduced uses bit #27 which would also
+fit in the legacy `VkPipelineStageFlagBits` enum, there is no real benefit
+to include it.
+Instead the bit is marked reserved.
+
+=== Version History
+
+  * Revision 1, 2018-07-23 (Ahmed Abdelkhalek)
+  ** Initial draft
+  * Revision 1.1, 10/29/2019 (Tony Zlatinski)
+  ** Updated the reserved spec tokens and renamed VkVideoEncoderKHR to
+     VkVideoSessionKHR
+  * Revision 1.6, Jan 08 2020 (Tony Zlatinski)
+  ** API unify with the video_decode_queue spec
+  * Revision 2, March 29 2021 (Tony Zlatinski)
+  ** Spec and API updates.
+  * Revision 3, 2021-09-30 (Jon Leech)
+  ** Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
+  * Revision 4, 2022-02-10 (Ahmed Abdelkhalek)
+  ** Updates to encode capability interface
+  * Revision 5, 2022-03-31 (Ahmed Abdelkhalek)
+  ** Remove redundant VkVideoEncodeInfoKHR.codedExtent
+  * Revision 6, 2022-07-18 (Daniel Rakos)
+  ** Remove `VkVideoEncodeRateControlFlagBitsKHR` and
+     `VkVideoEncodeFlagBitsKHR` as they contain no defined flags for now
+  ** Add `VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR` and
+     `VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_LAYER_BIT_KHR` to indicate
+     rate control and rate control layer change requests, respectively, in
+     video coding control operations
+  * Revision 7, 2022-08-12 (Daniel Rakos)
+  ** Add VkVideoEncodeUsageInfoKHR structure and related flags
+  * Revision 8, 2023-03-06 (Daniel Rakos)
+  ** Replace `VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR` queries
+     with more generic `VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR` queries
+     that can be extended in the future with more feedback values
+  ** Rename `dstBitstreamBuffer`, `dstBitstreamBufferOffset`, and
+     `dstBitstreamBufferMaxRange` in `VkVideoEncodeInfoKHR` to `dstBuffer`,
+     `dstBufferOffset`, and `dstBufferRange`, respectively, for consistency
+     with the naming convention in the video decode extensions
+  ** Change the type of `rateControlLayerCount` and `qualityLevelCount` in
+     `VkVideoEncodeCapabilitiesKHR` from `uint8_t` to `uint32_t` and rename
+     them to `maxRateControlLayers` and `maxQualityLevels`, respectively
+  ** Change the type of `averageBitrate` and `maxBitrate` in
+     `VkVideoEncodeRateControlLayerInfoKHR`` from `uint32_t` to `uint64_t`
+  ** Fixed the definition of rate control flag bits and added the new
+     `VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR` constant to indicate
+     implementation-specific automatic rate control
+  ** Change the type of `VkVideoEncodeRateControlInfoKHR::layerCount` from
+     `uint8_t` to `uint32_t`
+  ** Rename `pLayerConfigs` to `pLayers` in
+     `VkVideoEncodeRateControlInfoKHR`
+  * Revision 9, 2023-03-28 (Daniel Rakos)
+  ** Removed `VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_LAYER_BIT_KHR` and
+     the ability to change the state of individual rate control layers
+  ** Added new `VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR`
+     flag to video encode feedback queries
+  ** Added new video session create flag
+     `VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR`
+     to opt-in to video session and encoding parameter optimizations
+  ** Added the `vkGetEncodedVideoSessionParametersKHR` command to enable
+     retrieving encoded video session parameter data
+  ** Moved `virtualBufferSizeInMs` and `initialVirtualBufferSizeInMs` from
+     `VkVideoEncodeRateControlLayerInfoKHR` to
+     `VkVideoEncodeRateControlInfoKHR`
+  ** Added `maxBitrate` capability
+  ** Renamed `inputImageDataFillAlignment` capability to
+     `encodeInputPictureGranularity` to better reflect its purpose
+  ** Added new `vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR`
+     command and related structures to enable querying recommended settings
+     for video encode quality levels
+  ** Added `VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR` flag and
+     `VkVideoEncodeQualityLevelInfoKHR` structure to allow controlling video
+     encode quality level and removed `qualityLevel` from the encode
+     operation parameters
+  * Revision 10, 2023-07-19 (Daniel Rakos)
+  ** Added `VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR`
+     query result status code and the related capability flag
+     `VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR`
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_queue.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_queue.adoc
new file mode 100644
index 0000000..bb843e9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_video_queue.adoc
@@ -0,0 +1,102 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_queue.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Piers Daniell, NVIDIA
+  - Srinath Kumarapuram, NVIDIA
+  - Tobias Hector, AMD
+  - Tony Zlatinski, NVIDIA
+  - Daniel Rakos, RasterGrid
+
+=== Description
+
+This extension provides common APIs to enable exposing queue families with
+support for video codec operations by introducing the following new object
+types and related functionalities:
+
+  * Video session objects that represent and maintain the state needed to
+    perform video codec operations.
+  * Video session parameters objects that act as a container for codec
+    specific parameters.
+
+In addition, it also introduces query commands that allow applications to
+determine video coding related capabilities, and command buffer commands
+that enable recording video coding operations against a video session.
+
+This extension is to be used in conjunction with other extensions that
+enable specific video coding operations.
+
+include::{generated}/interfaces/VK_KHR_video_queue.adoc[]
+
+=== Version History
+
+  * Revision 0.1, 2019-11-21 (Tony Zlatinski)
+  ** Initial draft
+  * Revision 0.2, 2019-11-27 (Tony Zlatinski)
+  ** Make vulkan video core common between decode and encode
+  * Revision 1, March 29 2021 (Tony Zlatinski)
+  ** Spec and API updates.
+  * Revision 2, August 1 2021 (Srinath Kumarapuram)
+  ** Rename `VkVideoCapabilitiesFlagBitsKHR` to
+     `VkVideoCapabilityFlagBitsKHR` (along with the names of enumerants it
+     defines) and `VkVideoCapabilitiesFlagsKHR` to
+     `VkVideoCapabilityFlagsKHR`, following Vulkan naming conventions.
+  * Revision 3, 2022-03-16 (Ahmed Abdelkhalek)
+  ** Relocate Std header version reporting/requesting from codec-operation
+     specific extensions to this extension.
+  ** Make Std header versions codec-operation specific instead of only
+     codec-specific.
+  * Revision 4, 2022-05-30 (Daniel Rakos)
+  ** Refactor the video format query APIs and related language
+  ** Extend VkResult with video-specific error codes
+  * Revision 5, 2022-08-11 (Daniel Rakos)
+  ** Add `VkVideoSessionParametersCreateFlagsKHR`
+  ** Remove `VkVideoCodingQualityPresetFlagsKHR`
+  ** Rename `VkQueueFamilyQueryResultStatusProperties2KHR` to
+     `VkQueueFamilyQueryResultStatusPropertiesKHR`
+  ** Rename `VkVideoQueueFamilyProperties2KHR` to
+     `VkQueueFamilyVideoPropertiesKHR`
+  ** Rename `VkVideoProfileKHR` to `VkVideoProfileInfoKHR`
+  ** Rename `VkVideoProfilesKHR` to `VkVideoProfileListInfoKHR`
+  ** Rename `VkVideoGetMemoryPropertiesKHR` to
+     `VkVideoSessionMemoryRequirementsKHR`
+  ** Rename `VkVideoBindMemoryKHR` to `VkBindVideoSessionMemoryInfoKHR`
+  ** Fix `pNext` constness of `VkPhysicalDeviceVideoFormatInfoKHR` and
+     `VkVideoSessionMemoryRequirementsKHR`
+  ** Fix incorrectly named value enums in bit enum types
+     `VkVideoCodecOperationFlagBitsKHR` and
+     `VkVideoChromaSubsamplingFlagBitsKHR`
+  ** Remove unnecessary default values from
+     `VkVideoSessionCreateFlagBitsKHR` and `VkVideoCodingControlFlagBitsKHR`
+  ** Eliminate nested pointer in `VkVideoSessionMemoryRequirementsKHR`
+  ** Rename `VkVideoPictureResourceKHR` to `VkVideoPictureResourceInfoKHR`
+  ** Rename `VkVideoReferenceSlotKHR` to `VkVideoReferenceSlotInfoKHR`
+  * Revision 6, 2022-09-18 (Daniel Rakos)
+  ** Rename the `maxReferencePicturesSlotsCount` and
+     `maxReferencePicturesActiveCount` fields of `VkVideoCapabilitiesKHR`
+     and `VkVideoSessionCreateInfoKHR` to `maxDpbSlots` and
+     `maxActiveReferencePictures`, respectively, to clarify their meaning
+  ** Rename `capabilityFlags` to `flags` in `VkVideoCapabilitiesKHR`
+  ** Rename `videoPictureExtentGranularity` to `pictureAccessGranularity` in
+     `VkVideoCapabilitiesKHR`
+  ** Rename `minExtent` and `maxExtent` to `minCodedExtent` and
+     `maxCodedExtent`, respectively, in `VkVideoCapabilitiesKHR`
+  ** Rename `referencePicturesFormat` to `referencePictureFormat` in
+     `VkVideoSessionCreateInfoKHR`
+  * Revision 7, 2022-09-26 (Daniel Rakos)
+  ** Change type of `VkVideoReferenceSlotInfoKHR::slotIndex` from `int8_t`
+     to `int32_t`
+  * Revision 8, 2022-09-29 (Daniel Rakos)
+  ** Extension is no longer provisional
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_vulkan_memory_model.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_vulkan_memory_model.adoc
new file mode 100644
index 0000000..4c3824c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_vulkan_memory_model.adoc
@@ -0,0 +1,66 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_vulkan_memory_model.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-12-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_vulkan_memory_model.html[`SPV_KHR_vulkan_memory_model`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Alan Baker, Google
+  - Tobias Hector, AMD
+  - David Neto, Google
+  - Robert Simpson, Qualcomm Technologies, Inc.
+  - Brian Sumner, AMD
+
+=== Description
+
+The apiext:VK_KHR_vulkan_memory_model extension allows use of the features
+guarded by the code:VulkanMemoryModel, code:VulkanMemoryModelDeviceScope,
+and code:VulkanMemoryModelAvailabilityVisibilityChains capabilities in
+shader modules.
+The <<memory-model,Vulkan Memory Model>> formally defines how to synchronize
+memory accesses to the same memory locations performed by multiple shader
+invocations.
+
+[NOTE]
+.Note
+====
+Version 3 of the spec added a member
+(pname:vulkanMemoryModelAvailabilityVisibilityChains) to
+slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR, which is an incompatible
+change from version 2.
+====
+
+=== Promotion to Vulkan 1.2
+
+All functionality in this extension is included in core Vulkan 1.2, with the
+KHR suffix omitted.
+However, if Vulkan 1.2 is supported and this extension is not, the
+code:vulkanMemoryModel capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_vulkan_memory_model.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-VulkanMemoryModel,
+    code:VulkanMemoryModelKHR>>
+
+=== Version History
+
+  * Revision 1, 2018-06-24 (Jeff Bolz)
+  ** Initial draft
+  * Revision 3, 2018-12-10 (Jeff Bolz)
+  ** Add vulkanMemoryModelAvailabilityVisibilityChains member to the
+     VkPhysicalDeviceVulkanMemoryModelFeaturesKHR structure.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_wayland_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_wayland_surface.adoc
new file mode 100644
index 0000000..c3f4c2c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_wayland_surface.adoc
@@ -0,0 +1,92 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_wayland_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Faith Ekstrand, Intel
+  - Ian Elliott, LunarG
+  - Courtney Goeltzenleuchter, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Antoine Labour, Google
+  - Jon Leech, Khronos
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Ray Smith, ARM
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+
+=== Description
+
+The `VK_KHR_wayland_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a Wayland
+code:wl_surface, as well as a query to determine support for rendering to a
+Wayland compositor.
+
+include::{generated}/interfaces/VK_KHR_wayland_surface.adoc[]
+
+=== Issues
+
+1) Does Wayland need a way to query for compatibility between a particular
+physical device and a specific Wayland display? This would be a more general
+query than flink:vkGetPhysicalDeviceSurfaceSupportKHR: if the
+Wayland-specific query returned ename:VK_TRUE for a (slink:VkPhysicalDevice,
+`struct wl_display*`) pair, then the physical device could be assumed to
+support presentation to any slink:VkSurfaceKHR for surfaces on the display.
+
+*RESOLVED*: Yes.
+flink:vkGetPhysicalDeviceWaylandPresentationSupportKHR was added to address
+this issue.
+
+2) Should we require surfaces created with flink:vkCreateWaylandSurfaceKHR
+to support the ename:VK_PRESENT_MODE_MAILBOX_KHR present mode?
+
+*RESOLVED*: Yes.
+Wayland is an inherently mailbox window system and mailbox support is
+required for some Wayland compositor interactions to work as expected.
+While handling these interactions may be possible with
+ename:VK_PRESENT_MODE_FIFO_KHR, it is much more difficult to do without
+deadlock and requiring all Wayland applications to be able to support
+implementations which only support ename:VK_PRESENT_MODE_FIFO_KHR would be
+an onerous restriction on application developers.
+
+=== Version History
+
+  * Revision 1, 2015-09-23 (Jesse Hall)
+  ** Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
+     (later renamed VK_EXT_KHR_surface).
+
+  * Revision 2, 2015-10-02 (James Jones)
+  ** Added vkGetPhysicalDeviceWaylandPresentationSupportKHR() to resolve
+     issue #1.
+  ** Adjusted wording of issue #1 to match the agreed-upon solution.
+  ** Renamed "`window`" parameters to "`surface`" to match Wayland
+     conventions.
+
+  * Revision 3, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_wayland_surface to VK_KHR_wayland_surface.
+
+  * Revision 4, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to vkCreateWaylandSurfaceKHR.
+
+  * Revision 5, 2015-11-28 (Daniel Rakos)
+  ** Updated the surface create function to take a pCreateInfo structure.
+
+  * Revision 6, 2017-02-08 (Faith Ekstrand)
+  ** Added the requirement that implementations support
+     ename:VK_PRESENT_MODE_MAILBOX_KHR.
+  ** Added wording about interactions between flink:vkQueuePresentKHR and
+     the Wayland requests sent to the compositor.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_keyed_mutex.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_keyed_mutex.adoc
new file mode 100644
index 0000000..04429be
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_keyed_mutex.adoc
@@ -0,0 +1,32 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_win32_keyed_mutex.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-10-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+Applications that wish to import Direct3D 11 memory objects into the Vulkan
+API may wish to use the native keyed mutex mechanism to synchronize access
+to the memory between Vulkan and Direct3D.
+This extension provides a way for an application to access the keyed mutex
+associated with an imported Vulkan memory object when submitting command
+buffers to a queue.
+
+include::{generated}/interfaces/VK_KHR_win32_keyed_mutex.adoc[]
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_surface.adoc
new file mode 100644
index 0000000..66d1ced
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_win32_surface.adoc
@@ -0,0 +1,122 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_win32_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-04-24
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Faith Ekstrand, Intel
+  - Ian Elliott, LunarG
+  - Courtney Goeltzenleuchter, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Antoine Labour, Google
+  - Jon Leech, Khronos
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Ray Smith, ARM
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+
+=== Description
+
+The `VK_KHR_win32_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a Win32 code:HWND, as
+well as a query to determine support for rendering to the windows desktop.
+
+include::{generated}/interfaces/VK_KHR_win32_surface.adoc[]
+
+=== Issues
+
+1) Does Win32 need a way to query for compatibility between a particular
+physical device and a specific screen? Compatibility between a physical
+device and a window generally only depends on what screen the window is on.
+However, there is not an obvious way to identify a screen without already
+having a window on the screen.
+
+*RESOLVED*: No.
+While it may be useful, there is not a clear way to do this on Win32.
+However, a method was added to query support for presenting to the windows
+desktop as a whole.
+
+2) If a native window object (code:HWND) is used by one graphics API, and
+then is later used by a different graphics API (one of which is Vulkan), can
+these uses interfere with each other?
+
+*RESOLVED*: Yes.
+
+Uses of a window object by multiple graphics APIs results in undefined:
+behavior.
+Such behavior may succeed when using one Vulkan implementation but fail when
+using a different Vulkan implementation.
+Potential failures include:
+
+  * Creating then destroying a flip presentation model DXGI swapchain on a
+    window object can prevent flink:vkCreateSwapchainKHR from succeeding on
+    the same window object.
+  * Creating then destroying a slink:VkSwapchainKHR on a window object can
+    prevent creation of a bitblt model DXGI swapchain on the same window
+    object.
+  * Creating then destroying a slink:VkSwapchainKHR on a window object can
+    effectively code:SetPixelFormat to a different format than the format
+    chosen by an OpenGL application.
+  * Creating then destroying a slink:VkSwapchainKHR on a window object on
+    one slink:VkPhysicalDevice can prevent flink:vkCreateSwapchainKHR from
+    succeeding on the same window object, but on a different
+    slink:VkPhysicalDevice that is associated with a different Vulkan ICD.
+
+In all cases the problem can be worked around by creating a new window
+object.
+
+Technical details include:
+
+  * Creating a DXGI swapchain over a window object can alter the object for
+    the remainder of its lifetime.
+    The alteration persists even after the DXGI swapchain has been
+    destroyed.
+    This alteration can make it impossible for a conformant Vulkan
+    implementation to create a slink:VkSwapchainKHR over the same window
+    object.
+    Mention of this alteration can be found in the remarks section of the
+    MSDN documentation for code:DXGI_SWAP_EFFECT.
+  * Calling GDI's code:SetPixelFormat (needed by OpenGL's WGL layer) on a
+    window object alters the object for the remainder of its lifetime.
+    The MSDN documentation for code:SetPixelFormat explains that a window
+    object's pixel format can be set only one time.
+  * Creating a slink:VkSwapchainKHR over a window object can alter the
+    object for its remaining lifetime.
+    Either of the above alterations may occur as a side effect of
+    flink:vkCreateSwapchainKHR.
+
+=== Version History
+
+  * Revision 1, 2015-09-23 (Jesse Hall)
+  ** Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
+     (later renamed VK_EXT_KHR_surface).
+
+  * Revision 2, 2015-10-02 (James Jones)
+  ** Added presentation support query for win32 desktops.
+
+  * Revision 3, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_win32_surface to VK_KHR_win32_surface.
+
+  * Revision 4, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to vkCreateWin32SurfaceKHR.
+
+  * Revision 5, 2015-11-28 (Daniel Rakos)
+  ** Updated the surface create function to take a pCreateInfo structure.
+
+  * Revision 6, 2017-04-24 (Jeff Juliano)
+  ** Add issue 2 addressing reuse of a native window object in a different
+     Graphics API, or by a different Vulkan ICD.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_workgroup_memory_explicit_layout.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_workgroup_memory_explicit_layout.adoc
new file mode 100644
index 0000000..5320b8c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_workgroup_memory_explicit_layout.adoc
@@ -0,0 +1,56 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_workgroup_memory_explicit_layout.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-06-01
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
+  - This extension provides API support for
+    {GLSLregistry}/ext/GL_EXT_shared_memory_block.txt[`GL_EXT_shared_memory_block`]
+*Contributors*::
+  - Caio Marcelo de Oliveira Filho, Intel
+  - Jeff Bolz, NVIDIA
+  - Graeme Leese, Broadcom
+  - Faith Ekstrand, Intel
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds Vulkan support for the
+{spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
+SPIR-V extension, which allows shaders to explicitly define the layout of
+code:Workgroup storage class memory and create aliases between variables
+from that storage class in a compute shader.
+
+The aliasing feature allows different "`views`" on the same data, so the
+shader can bulk copy data from another storage class using one type (e.g. an
+array of large vectors), and then use the data with a more specific type.
+It also enables reducing the amount of workgroup memory consumed by allowing
+the shader to alias data whose lifetimes do not overlap.
+
+The explicit layout support and some form of aliasing is also required for
+layering OpenCL on top of Vulkan.
+
+include::{generated}/interfaces/VK_KHR_workgroup_memory_explicit_layout.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayoutKHR,
+    code:WorkgroupMemoryExplicitLayoutKHR>>
+  * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayout8BitAccessKHR,
+    code:WorkgroupMemoryExplicitLayout8BitAccessKHR>>
+  * <<spirvenv-capabilities-table-WorkgroupMemoryExplicitLayout16BitAccessKHR,
+    code:WorkgroupMemoryExplicitLayout16BitAccessKHR>>
+
+=== Version History
+
+  * Revision 1, 2020-06-01 (Caio Marcelo de Oliveira Filho)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xcb_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xcb_surface.adoc
new file mode 100644
index 0000000..e82fa9e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xcb_surface.adoc
@@ -0,0 +1,78 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_xcb_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Faith Ekstrand, Intel
+  - Ian Elliott, LunarG
+  - Courtney Goeltzenleuchter, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Antoine Labour, Google
+  - Jon Leech, Khronos
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Ray Smith, ARM
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+
+=== Description
+
+The `VK_KHR_xcb_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to an X11 code:Window,
+using the XCB client-side library, as well as a query to determine support
+for rendering via XCB.
+
+include::{generated}/interfaces/VK_KHR_xcb_surface.adoc[]
+
+=== Issues
+
+1) Does XCB need a way to query for compatibility between a particular
+physical device and a specific screen? This would be a more general query
+than flink:vkGetPhysicalDeviceSurfaceSupportKHR: If it returned
+ename:VK_TRUE, then the physical device could be assumed to support
+presentation to any window on that screen.
+
+*RESOLVED*: Yes, this is needed for toolkits that want to create a
+slink:VkDevice before creating a window.
+To ensure the query is reliable, it must be made against a particular X
+visual rather than the screen in general.
+
+=== Version History
+
+  * Revision 1, 2015-09-23 (Jesse Hall)
+  ** Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
+     (later renamed VK_EXT_KHR_surface).
+
+  * Revision 2, 2015-10-02 (James Jones)
+  ** Added presentation support query for an (xcb_connection_t*,
+     xcb_visualid_t) pair.
+  ** Removed "`root`" parameter from CreateXcbSurfaceKHR(), as it is
+     redundant when a window on the same screen is specified as well.
+  ** Adjusted wording of issue #1 and added agreed upon resolution.
+
+  * Revision 3, 2015-10-14 (Ian Elliott)
+  ** Removed "`root`" parameter from CreateXcbSurfaceKHR() in one more
+     place.
+
+  * Revision 4, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_xcb_surface to VK_KHR_xcb_surface.
+
+  * Revision 5, 2015-10-23 (Daniel Rakos)
+  ** Added allocation callbacks to vkCreateXcbSurfaceKHR.
+
+  * Revision 6, 2015-11-28 (Daniel Rakos)
+  ** Updated the surface create function to take a pCreateInfo structure.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xlib_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xlib_surface.adoc
new file mode 100644
index 0000000..5689a34
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_xlib_surface.adoc
@@ -0,0 +1,78 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_xlib_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Faith Ekstrand, Intel
+  - Ian Elliott, LunarG
+  - Courtney Goeltzenleuchter, LunarG
+  - Jesse Hall, Google
+  - James Jones, NVIDIA
+  - Antoine Labour, Google
+  - Jon Leech, Khronos
+  - David Mao, AMD
+  - Norbert Nopper, Freescale
+  - Alon Or-bach, Samsung
+  - Daniel Rakos, AMD
+  - Graham Sellers, AMD
+  - Ray Smith, ARM
+  - Jeff Vigil, Qualcomm
+  - Chia-I Wu, LunarG
+
+=== Description
+
+The `VK_KHR_xlib_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to an X11 code:Window,
+using the Xlib client-side library, as well as a query to determine support
+for rendering via Xlib.
+
+include::{generated}/interfaces/VK_KHR_xlib_surface.adoc[]
+
+=== Issues
+
+1) Does X11 need a way to query for compatibility between a particular
+physical device and a specific screen? This would be a more general query
+than flink:vkGetPhysicalDeviceSurfaceSupportKHR; if it returned
+ename:VK_TRUE, then the physical device could be assumed to support
+presentation to any window on that screen.
+
+*RESOLVED*: Yes, this is needed for toolkits that want to create a
+slink:VkDevice before creating a window.
+To ensure the query is reliable, it must be made against a particular X
+visual rather than the screen in general.
+
+=== Version History
+
+  * Revision 1, 2015-09-23 (Jesse Hall)
+  ** Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
+     (later renamed VK_EXT_KHR_surface).
+
+  * Revision 2, 2015-10-02 (James Jones)
+  ** Added presentation support query for (Display*, VisualID) pair.
+  ** Removed "`root`" parameter from CreateXlibSurfaceKHR(), as it is
+     redundant when a window on the same screen is specified as well.
+  ** Added appropriate X errors.
+  ** Adjusted wording of issue #1 and added agreed upon resolution.
+
+  * Revision 3, 2015-10-14 (Ian Elliott)
+  ** Renamed this extension from VK_EXT_KHR_x11_surface to
+     VK_EXT_KHR_xlib_surface.
+
+  * Revision 4, 2015-10-26 (Ian Elliott)
+  ** Renamed from VK_EXT_KHR_xlib_surface to VK_KHR_xlib_surface.
+
+  * Revision 5, 2015-11-03 (Daniel Rakos)
+  ** Added allocation callbacks to vkCreateXlibSurfaceKHR.
+
+  * Revision 6, 2015-11-28 (Daniel Rakos)
+  ** Updated the surface create function to take a pCreateInfo structure.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc
new file mode 100644
index 0000000..9f0932b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc
@@ -0,0 +1,41 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_zero_initialize_workgroup_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-18
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.3 Core
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Alan Baker, Google
+  - Jeff Bolz, Nvidia
+  - Faith Ekstrand, Intel
+
+=== Description
+
+This extension allows the use of a null constant initializer on shader
+Workgroup memory variables, allowing implementations to expose any special
+hardware or instructions they may have.
+Zero initialization is commonly used by applications running untrusted
+content (e.g. web browsers) as way of defeating memory-scraping attacks.
+
+include::{generated}/interfaces/VK_KHR_zero_initialize_workgroup_memory.adoc[]
+
+=== Promotion to Vulkan 1.3
+
+Functionality in this extension is included in core Vulkan 1.3, with the KHR
+suffix omitted.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+=== Version History
+
+  * Revision 1, 2020-11-18 (Alan Baker)
+  ** Internal draft version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_LUNARG_direct_driver_loading.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_LUNARG_direct_driver_loading.adoc
new file mode 100644
index 0000000..1111439
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_LUNARG_direct_driver_loading.adoc
@@ -0,0 +1,27 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_LUNARG_direct_driver_loading.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-29
+*Contributors*::
+  - Charles Giessen, LunarG
+
+=== Description
+
+This extension provides a mechanism for applications to add drivers to the
+implementation.
+This allows drivers to be included with an application without requiring
+installation and is capable of being used in any execution environment, such
+as a process running with elevated privileges.
+
+include::{generated}/interfaces/VK_LUNARG_direct_driver_loading.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-11-29 (Charles Giessen)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_MSFT_layered_driver.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_MSFT_layered_driver.adoc
new file mode 100644
index 0000000..9d87924
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_MSFT_layered_driver.adoc
@@ -0,0 +1,31 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_MSFT_layered_driver.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-06-21
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jesse Natalie, Microsoft
+
+=== Description
+
+This extension adds new physical device properties to allow applications and
+the Vulkan ICD loader to understand when a physical device is implemented as
+a layered driver on top of another underlying API.
+
+include::{generated}/interfaces/VK_MSFT_layered_driver.adoc[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2023-06-21 (Jesse Natalie)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_ios_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_ios_surface.adoc
new file mode 100644
index 0000000..95d2e7e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_ios_surface.adoc
@@ -0,0 +1,44 @@
+// Copyright (c) 2015-2018 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_MVK_ios_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-31
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Bill Hollings, The Brenwill Workshop Ltd.
+
+=== Description
+
+The `VK_MVK_ios_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) based on a code:UIView, the native
+surface type of iOS, which is underpinned by a basetype:CAMetalLayer, to
+support rendering to the surface using Apple's Metal framework.
+
+ifdef::VK_EXT_metal_surface[]
+=== Deprecation by `VK_EXT_metal_surface`
+
+The `VK_MVK_ios_surface` extension is considered deprecated and has been
+superseded by the `apiext:VK_EXT_metal_surface` extension.
+endif::VK_EXT_metal_surface[]
+
+include::{generated}/interfaces/VK_MVK_ios_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-02-15 (Bill Hollings)
+  ** Initial draft.
+
+  * Revision 2, 2017-02-24 (Bill Hollings)
+  ** Minor syntax fix to emphasize firm requirement for `UIView` to be
+     backed by a `CAMetalLayer`.
+
+  * Revision 3, 2020-07-31 (Bill Hollings)
+  ** Update documentation on requirements for `UIView`.
+  ** Mark as deprecated by `VK_EXT_metal_surface`.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_macos_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_macos_surface.adoc
new file mode 100644
index 0000000..d70554f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_MVK_macos_surface.adoc
@@ -0,0 +1,44 @@
+// Copyright (c) 2015-2018 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_MVK_macos_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-31
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Bill Hollings, The Brenwill Workshop Ltd.
+
+=== Description
+
+The `VK_MVK_macos_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) based on an code:NSView, the native
+surface type of macOS, which is underpinned by a basetype:CAMetalLayer, to
+support rendering to the surface using Apple's Metal framework.
+
+ifdef::VK_EXT_metal_surface[]
+=== Deprecation by `VK_EXT_metal_surface`
+
+The `VK_MVK_macos_surface` extension is considered deprecated and has been
+superseded by the `apiext:VK_EXT_metal_surface` extension.
+endif::VK_EXT_metal_surface[]
+
+include::{generated}/interfaces/VK_MVK_macos_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-02-15 (Bill Hollings)
+  ** Initial draft.
+
+  * Revision 2, 2017-02-24 (Bill Hollings)
+  ** Minor syntax fix to emphasize firm requirement for `NSView` to be
+     backed by a `CAMetalLayer`.
+
+  * Revision 3, 2020-07-31 (Bill Hollings)
+  ** Update documentation on requirements for `NSView`.
+  ** Mark as deprecated by `VK_EXT_metal_surface`.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NN_vi_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NN_vi_surface.adoc
new file mode 100644
index 0000000..a9a139a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NN_vi_surface.adoc
@@ -0,0 +1,52 @@
+// Copyright (c) 2016-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NN_vi_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mathias Heyer, NVIDIA
+  - Michael Chock, NVIDIA
+  - Yasuhiro Yoshioka, Nintendo
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+The `VK_NN_vi_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) associated with an
+code:nn::code:vi::code:Layer.
+
+include::{generated}/interfaces/VK_NN_vi_surface.adoc[]
+
+=== Issues
+
+1) Does VI need a way to query for compatibility between a particular
+physical device (and queue family?) and a specific VI display?
+
+*RESOLVED*: No.
+It is currently always assumed that the device and display will always be
+compatible.
+
+2) slink:VkViSurfaceCreateInfoNN::pname:pWindow is intended to store an
+code:nn::code:vi::code:NativeWindowHandle, but its declared type is a bare
+code:void* to store the window handle.
+Why the discrepancy?
+
+*RESOLVED*: It is for C compatibility.
+The definition for the VI native window handle type is defined inside the
+code:nn::code:vi C++ namespace.
+This prevents its use in C source files.
+code:nn::code:vi::code:NativeWindowHandle is always defined to be
+code:void*, so this extension uses code:void* to match.
+
+=== Version History
+
+  * Revision 1, 2016-12-2 (Michael Chock)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_binary_import.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_binary_import.adoc
new file mode 100644
index 0000000..1252a89
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_binary_import.adoc
@@ -0,0 +1,146 @@
+// Copyright (c) 2018-2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NVX_binary_import.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-04-09
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Liam Middlebrook, NVIDIA
+
+=== Description
+
+This extension allows applications to import CuBIN binaries and execute
+them.
+
+[NOTE]
+.Note
+====
+There is currently no specification language written for this extension.
+The links to APIs defined by the extension are to stubs that only include
+generated content such as API declarations and implicit valid usage
+statements.
+====
+
+include::{generated}/interfaces/VK_NVX_binary_import.adoc[]
+
+ifndef::isrefpage[]
+
+=== Stub API References
+
+[open,refpage='VkCuFunctionNVX',desc='Stub description of VkCuFunctionNVX',type='handles']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/handles/VkCuFunctionNVX.adoc[]
+--
+
+[open,refpage='VkCuModuleNVX',desc='Stub description of VkCuModuleNVX',type='handles']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/handles/VkCuModuleNVX.adoc[]
+--
+
+[open,refpage='vkCreateCuFunctionNVX',desc='Stub description of vkCreateCuFunctionNVX',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkCreateCuFunctionNVX.adoc[]
+
+include::{generated}/validity/protos/vkCreateCuFunctionNVX.adoc[]
+--
+
+[open,refpage='VkCuFunctionCreateInfoNVX',desc='Stub description of VkCuFunctionCreateInfoNVX',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkCuFunctionCreateInfoNVX.adoc[]
+
+include::{generated}/validity/structs/VkCuFunctionCreateInfoNVX.adoc[]
+--
+
+[open,refpage='vkDestroyCuFunctionNVX',desc='Stub description of vkDestroyCuFunctionNVX',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkDestroyCuFunctionNVX.adoc[]
+
+include::{generated}/validity/protos/vkDestroyCuFunctionNVX.adoc[]
+--
+
+[open,refpage='vkCreateCuModuleNVX',desc='Stub description of vkCreateCuModuleNVX',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkCreateCuModuleNVX.adoc[]
+
+include::{generated}/validity/protos/vkCreateCuModuleNVX.adoc[]
+--
+
+[open,refpage='VkCuModuleCreateInfoNVX',desc='Stub description of VkCuModuleCreateInfoNVX',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkCuModuleCreateInfoNVX.adoc[]
+
+include::{generated}/validity/structs/VkCuModuleCreateInfoNVX.adoc[]
+--
+
+[open,refpage='vkDestroyCuModuleNVX',desc='Stub description of vkDestroyCuModuleNVX',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkDestroyCuModuleNVX.adoc[]
+
+include::{generated}/validity/protos/vkDestroyCuModuleNVX.adoc[]
+--
+
+[open,refpage='vkCmdCuLaunchKernelNVX',desc='Stub description of vkCmdCuLaunchKernelNVX',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkCmdCuLaunchKernelNVX.adoc[]
+
+include::{generated}/validity/protos/vkCmdCuLaunchKernelNVX.adoc[]
+--
+
+[open,refpage='VkCuLaunchInfoNVX',desc='Stub description of VkCuLaunchInfoNVX',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkCuLaunchInfoNVX.adoc[]
+
+include::{generated}/validity/structs/VkCuLaunchInfoNVX.adoc[]
+--
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2021-04-09 (Eric Werness)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_image_view_handle.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_image_view_handle.adoc
new file mode 100644
index 0000000..9a46418
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_image_view_handle.adoc
@@ -0,0 +1,30 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NVX_image_view_handle.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-04-03
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension allows applications to query an opaque handle from an image
+view for use as a sampled image or storage image.
+This provides no direct functionality itself.
+
+include::{generated}/interfaces/VK_NVX_image_view_handle.adoc[]
+
+=== Version History
+
+  * Revision 2, 2020-04-03 (Piers Daniell)
+  ** Add flink:vkGetImageViewAddressNVX
+
+  * Revision 1, 2018-12-07 (Eric Werness)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_multiview_per_view_attributes.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_multiview_per_view_attributes.adoc
new file mode 100644
index 0000000..03054c9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NVX_multiview_per_view_attributes.adoc
@@ -0,0 +1,95 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NVX_multiview_per_view_attributes.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-01-13
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NVX_multiview_per_view_attributes.html[`SPV_NVX_multiview_per_view_attributes`]
+  - This extension provides API support for
+    {GLSLregistry}/nvx/GL_NVX_multiview_per_view_attributes.txt[`GL_NVX_multiview_per_view_attributes`]
+  - This extension interacts with `apiext:VK_NV_viewport_array2`.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds a new way to write shaders to be used with multiview
+subpasses, where the attributes for all views are written out by a single
+invocation of the
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stages>>.
+Related SPIR-V and GLSL extensions `SPV_NVX_multiview_per_view_attributes`
+and `GL_NVX_multiview_per_view_attributes` introduce per-view position and
+viewport mask attributes arrays, and this extension defines how those
+per-view attribute arrays are interpreted by Vulkan.
+Pipelines using per-view attributes may: only execute the
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stages>> once for all views rather than once per-view, which reduces
+redundant shading work.
+
+A subpass creation flag controls whether the subpass uses this extension.
+A subpass must: either exclusively use this extension or not use it at all.
+
+Some Vulkan implementations only support the position attribute varying
+between views in the X component.
+A subpass can declare via a second creation flag whether all pipelines
+compiled for this subpass will obey this restriction.
+
+Shaders that use the new per-view outputs (e.g. code:gl_PositionPerViewNV)
+must: also write the non-per-view output (code:gl_Position), and the values
+written must: be such that `gl_Position =
+gl_PositionPerViewNV[gl_ViewIndex]` for all views in the subpass.
+Implementations are free to either use the per-view outputs or the
+non-per-view outputs, whichever would be more efficient.
+
+If `apiext:VK_NV_viewport_array2` is not also supported and enabled, the
+per-view viewport mask must: not be used.
+
+include::{generated}/interfaces/VK_NVX_multiview_per_view_attributes.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-positionperview,code:PositionPerViewNV>>
+  * <<interfaces-builtin-variables-viewportmaskperview,code:ViewportMaskPerViewNV>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-PerViewAttributesNV,
+    code:PerViewAttributesNV>>
+
+=== Examples
+
+[source,c]
+----
+#version 450 core
+
+#extension GL_KHX_multiview : enable
+#extension GL_NVX_multiview_per_view_attributes : enable
+
+layout(location = 0) in vec4 position;
+layout(set = 0, binding = 0) uniform Block { mat4 mvpPerView[2]; } buf;
+
+void main()
+{
+    // Output both per-view positions and gl_Position as a function
+    // of gl_ViewIndex
+    gl_PositionPerViewNV[0] = buf.mvpPerView[0] * position;
+    gl_PositionPerViewNV[1] = buf.mvpPerView[1] * position;
+    gl_Position = buf.mvpPerView[gl_ViewIndex] * position;
+}
+----
+
+
+=== Version History
+
+  * Revision 1, 2017-01-13 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_acquire_winrt_display.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_acquire_winrt_display.adoc
new file mode 100644
index 0000000..6d1168e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_acquire_winrt_display.adoc
@@ -0,0 +1,126 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_acquire_winrt_display.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-09-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Juliano, NVIDIA
+
+=== Description
+
+This extension allows an application to take exclusive control of a display
+on Windows 10 provided that the display is not already controlled by a
+compositor.
+Examples of compositors include the Windows desktop compositor, other
+applications using this Vulkan extension, and applications that
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`Acquire`"]
+a
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`DisplayTarget`"]
+using a https://docs.microsoft.com/en-us/uwp/api/["`WinRT`"] command such as
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`winrt::Windows::Devices::Display::Core::DisplayManager.TryAcquireTarget()`"].
+
+When control is acquired the application has exclusive access to the display
+until control is released or the application terminates.
+An application's attempt to acquire is denied if a different application has
+already acquired the display.
+
+include::{generated}/interfaces/VK_NV_acquire_winrt_display.adoc[]
+
+=== Issues
+
+1) What should the platform substring be for this extension:
+
+*RESOLVED*: The platform substring is "`Winrt`".
+
+The substring "`Winrt`" matches the fact that the OS API exposing the
+acquire and release functionality is called "`WinRT`".
+
+The substring "`Win32`" is wrong because the related "`WinRT`" API is
+explicitly *not* a "`Win32`" API.
+"`WinRT`" is a competing API family to the "`Win32`" API family.
+
+The substring "`Windows`" is suboptimal because there could be more than one
+relevant API on the Windows platform.
+There is preference to use the more-specific substring "`Winrt`".
+
+2) Should flink:vkAcquireWinrtDisplayNV take a winRT DisplayTarget, or a
+Vulkan display handle as input?
+
+*RESOLVED*: A Vulkan display handle.
+This matches the design of flink:vkAcquireXlibDisplayEXT.
+
+3) Should the acquire command be platform-independent named
+"`vkAcquireDisplayNV`", or platform-specific named
+"`vkAcquireWinrtDisplayNV`"?
+
+*RESOLVED*: Add a platform-specific command.
+
+The inputs to the Acquire command are all Vulkan types.
+None are WinRT types.
+This opens the possibility of the winrt extension defining a
+platform-independent acquire command.
+
+The X11 acquire command does need to accept a platform-specific parameter.
+This could be handled by adding to a platform-independent acquire command a
+params struct to which platform-dependent types can be chained by
+pname:pNext pointer.
+
+The prevailing opinion is that it would be odd to create a second
+platform-independent function that is used on the Windows 10 platform, but
+that is not used for the X11 platform.
+Since a Windows 10 platform-specific command is needed anyway for converting
+between vkDisplayKHR and platform-native handles, opinion was to create a
+platform-specific acquire function.
+
+4) Should the flink:vkGetWinrtDisplayNV parameter identifying a display be
+named "`deviceRelativeId`" or "`adapterRelativeId`"?
+
+*RESOLVED*: The WinRT name is "`AdapterRelativeId`".
+The name "`adapter`" is the Windows analog to a Vulkan "`physical device`".
+Vulkan already has precedent to use the name sname:deviceLUID for the
+concept that Windows APIs call "`AdapterLuid`".
+Keeping form with this precedent, the name "`deviceRelativeId`" is chosen.
+
+5) Does flink:vkAcquireWinrtDisplayNV cause the Windows desktop compositor
+to release a display?
+
+*RESOLVED*: No.
+flink:vkAcquireWinrtDisplayNV does not itself cause the Windows desktop
+compositor to release a display.
+This action must be performed outside of Vulkan.
+
+Beginning with Windows 10 version 2004 it is possible to cause the Windows
+desktop compositor to release a display by using the "`Advanced display
+settings`" sub-page of the "`Display settings`" control panel.
+See
+https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors
+
+6) Where can one find additional information about custom compositors for
+Windows 10?
+
+*RESOLVED*: Relevant references are as follows.
+
+According to Microsoft's documentation on
+https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors-compositor["building
+a custom compositor"], the ability to write a custom compositor is not a
+replacement for a fullscreen desktop window.
+The feature is for writing compositor apps that drive specialized hardware.
+
+Only certain editions of Windows 10 support custom compositors,
+https://docs.microsoft.com/en-us/windows-hardware/drivers/display/specialized-monitors#windows-10-version-2004["documented
+here"].
+The product type can be queried from Windows 10.
+See
+https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getproductinfo
+
+=== Version History
+
+  * Revision 1, 2020-09-29 (Jeff Juliano)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_clip_space_w_scaling.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_clip_space_w_scaling.adoc
new file mode 100644
index 0000000..36287e8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_clip_space_w_scaling.adoc
@@ -0,0 +1,153 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_clip_space_w_scaling.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-15
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Kedarnath Thangudu, NVIDIA
+
+=== Description
+
+Virtual Reality (VR) applications often involve a post-processing step to
+apply a "`barrel`" distortion to the rendered image to correct the
+"`pincushion`" distortion introduced by the optics in a VR device.
+The barrel distorted image has lower resolution along the edges compared to
+the center.
+Since the original image is rendered at high resolution, which is uniform
+across the complete image, a lot of pixels towards the edges do not make it
+to the final post-processed image.
+
+This extension provides a mechanism to render VR scenes at a non-uniform
+resolution, in particular a resolution that falls linearly from the center
+towards the edges.
+This is achieved by scaling the [eq]#w# coordinate of the vertices in the
+clip space before perspective divide.
+The clip space [eq]#w# coordinate of the vertices can: be offset as of a
+function of [eq]#x# and [eq]#y# coordinates as follows:
+
+[eq]#w' = w {plus} Ax {plus} By#
+
+In the intended use case for viewport position scaling, an application
+should use a set of four viewports, one for each of the four quadrants of a
+Cartesian coordinate system.
+Each viewport is set to the dimension of the image, but is scissored to the
+quadrant it represents.
+The application should specify [eq]#A# and [eq]#B# coefficients of the
+[eq]#w#-scaling equation above, that have the same value, but different
+signs, for each of the viewports.
+The signs of [eq]#A# and [eq]#B# should match the signs of [eq]#x# and
+[eq]#y# for the quadrant that they represent such that the value of [eq]#w'#
+will always be greater than or equal to the original [eq]#w# value for the
+entire image.
+Since the offset to [eq]#w#, ([eq]#Ax {plus} By#), is always positive, and
+increases with the absolute values of [eq]#x# and [eq]#y#, the effective
+resolution will fall off linearly from the center of the image to its edges.
+
+include::{generated}/interfaces/VK_NV_clip_space_w_scaling.adoc[]
+
+=== Issues
+
+1) Is the pipeline struct name too long?
+
+*RESOLVED*: It fits with the naming convention.
+
+2) Separate W scaling section or fold into coordinate transformations?
+
+*RESOLVED*: Leaving it as its own section for now.
+
+=== Examples
+
+[source,c++]
+----
+VkViewport viewports[4];
+VkRect2D scissors[4];
+VkViewportWScalingNV scalings[4];
+
+for (int i = 0; i < 4; i++) {
+    int x = (i & 2) ? 0 : currentWindowWidth / 2;
+    int y = (i & 1) ? 0 : currentWindowHeight / 2;
+
+    viewports[i].x = 0;
+    viewports[i].y = 0;
+    viewports[i].width = currentWindowWidth;
+    viewports[i].height = currentWindowHeight;
+    viewports[i].minDepth = 0.0f;
+    viewports[i].maxDepth = 1.0f;
+
+    scissors[i].offset.x = x;
+    scissors[i].offset.y = y;
+    scissors[i].extent.width = currentWindowWidth/2;
+    scissors[i].extent.height = currentWindowHeight/2;
+
+    const float factor = 0.15;
+    scalings[i].xcoeff = ((i & 2) ? -1.0 : 1.0) * factor;
+    scalings[i].ycoeff = ((i & 1) ? -1.0 : 1.0) * factor;
+}
+
+VkPipelineViewportWScalingStateCreateInfoNV vpWScalingStateInfo = { VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV };
+
+vpWScalingStateInfo.viewportWScalingEnable = VK_TRUE;
+vpWScalingStateInfo.viewportCount = 4;
+vpWScalingStateInfo.pViewportWScalings = &scalings[0];
+
+VkPipelineViewportStateCreateInfo vpStateInfo = { VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO };
+vpStateInfo.viewportCount = 4;
+vpStateInfo.pViewports = &viewports[0];
+vpStateInfo.scissorCount = 4;
+vpStateInfo.pScissors = &scissors[0];
+vpStateInfo.pNext = &vpWScalingStateInfo;
+----
+
+Example shader to read from a w-scaled texture:
+
+[source,c++]
+----
+// Vertex Shader
+// Draw a triangle that covers the whole screen
+const vec4 positions[3] = vec4[3](vec4(-1, -1, 0, 1),
+                                  vec4( 3, -1, 0, 1),
+                                  vec4(-1,  3, 0, 1));
+out vec2 uv;
+void main()
+{
+    vec4 pos = positions[ gl_VertexID ];
+    gl_Position = pos;
+    uv = pos.xy;
+}
+
+// Fragment Shader
+uniform sampler2D tex;
+uniform float xcoeff;
+uniform float ycoeff;
+out vec4 Color;
+in vec2 uv;
+
+void main()
+{
+    // Handle uv as if upper right quadrant
+    vec2 uvabs = abs(uv);
+
+    // unscale: transform w-scaled image into an unscaled image
+    //   scale: transform unscaled image int a w-scaled image
+    float unscale = 1.0 / (1 + xcoeff * uvabs.x + xcoeff * uvabs.y);
+    //float scale = 1.0 / (1 - xcoeff * uvabs.x - xcoeff * uvabs.y);
+
+    vec2 P = vec2(unscale * uvabs.x, unscale * uvabs.y);
+
+    // Go back to the right quadrant
+    P *= sign(uv);
+
+    Color = texture(tex, P * 0.5 + 0.5);
+}
+----
+
+=== Version History
+
+  * Revision 1, 2017-02-15 (Eric Werness)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_compute_shader_derivatives.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_compute_shader_derivatives.adoc
new file mode 100644
index 0000000..7f9e98d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_compute_shader_derivatives.adoc
@@ -0,0 +1,64 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_compute_shader_derivatives.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-19
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_compute_shader_derivatives.html[`SPV_NV_compute_shader_derivatives`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_compute_shader_derivatives.txt[`GL_NV_compute_shader_derivatives`]
+*Contributors*::
+  - Pat Brown, NVIDIA
+
+=== Description
+
+This extension adds Vulkan support for the
+{spirv}/NV/SPV_NV_compute_shader_derivatives.html[`SPV_NV_compute_shader_derivatives`]
+SPIR-V extension.
+
+The SPIR-V extension provides two new execution modes, both of which allow
+compute shaders to use built-ins that evaluate compute derivatives
+explicitly or implicitly.
+Derivatives will be computed via differencing over a 2x2 group of shader
+invocations.
+The code:DerivativeGroupQuadsNV execution mode assembles shader invocations
+into 2x2 groups, where each group has x and y coordinates of the local
+invocation ID of the form (2m+{0,1}, 2n+{0,1}).
+The code:DerivativeGroupLinearNV execution mode assembles shader invocations
+into 2x2 groups, where each group has local invocation index values of the
+form 4m+{0,1,2,3}.
+
+include::{generated}/interfaces/VK_NV_compute_shader_derivatives.adoc[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-ComputeDerivativeGroupQuadsNV,
+    code:ComputeDerivativeGroupQuadsNV>>
+  * <<spirvenv-capabilities-table-ComputeDerivativeGroupLinearNV,
+    code:ComputeDerivativeGroupLinearNV>>
+
+=== Issues
+
+(1) Should we specify that the groups of four shader invocations used for
+derivatives in a compute shader are the same groups of four invocations that
+form a "`quad`" in shader subgroups?
+
+*RESOLVED*: Yes.
+
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-07-19 (Pat Brown)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cooperative_matrix.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cooperative_matrix.adoc
new file mode 100644
index 0000000..6c36e74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cooperative_matrix.adoc
@@ -0,0 +1,63 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_cooperative_matrix.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-02-05
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_cooperative_matrix.txt[`GL_NV_cooperative_matrix`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Markus Tavenrath, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds support for using cooperative matrix types in SPIR-V.
+Cooperative matrix types are medium-sized matrices that are primarily
+supported in compute shaders, where the storage for the matrix is spread
+across all invocations in some scope (usually a subgroup) and those
+invocations cooperate to efficiently perform matrix multiplies.
+
+Cooperative matrix types are defined by the
+{spirv}/NV/SPV_NV_cooperative_matrix.html[`SPV_NV_cooperative_matrix`]
+SPIR-V extension and can be used with the
+{GLSLregistry}/nv/GLSL_NV_cooperative_matrix.txt[`GL_NV_cooperative_matrix`]
+GLSL extension.
+
+This extension includes support for enumerating the matrix types and
+dimensions that are supported by the implementation.
+
+include::{generated}/interfaces/VK_NV_cooperative_matrix.adoc[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-CooperativeMatrixNV,
+    code:CooperativeMatrixNV>>
+
+=== Issues
+
+(1) What matrix properties will be supported in practice?
+
+*RESOLVED*: In NVIDIA's initial implementation, we will support:
+
+  * AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x16 scope =
+    Subgroup
+  * AType = BType = fp16 CType = DType = fp16 MxNxK = 16x8x8 scope =
+    Subgroup
+  * AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x16 scope =
+    Subgroup
+  * AType = BType = fp16 CType = DType = fp32 MxNxK = 16x8x8 scope =
+    Subgroup
+
+=== Version History
+
+  * Revision 1, 2019-02-05 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_copy_memory_indirect.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_copy_memory_indirect.adoc
new file mode 100644
index 0000000..a6c10ae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_copy_memory_indirect.adoc
@@ -0,0 +1,31 @@
+// Copyright (c) 2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_copy_memory_indirect.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-10-14
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds support for performing copies between memory and image
+regions using indirect parameters that are read by the device from a buffer
+during execution.
+This functionality may: be useful for performing copies where the copy
+parameters are not known during the command buffer creation time.
+
+include::{generated}/interfaces/VK_NV_copy_memory_indirect.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-10-14 (Vikram Kushwaha)
+  ** Initial draft
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_corner_sampled_image.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_corner_sampled_image.adoc
new file mode 100644
index 0000000..92c9fd8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_corner_sampled_image.adoc
@@ -0,0 +1,96 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_corner_sampled_image.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-13
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Pat Brown, NVIDIA
+  - Chris Lentini, NVIDIA
+
+=== Description
+
+This extension adds support for a new image organization, which this
+extension refers to as "`corner-sampled`" images.
+A corner-sampled image differs from a conventional image in the following
+ways:
+
+  * Texels are centered on integer coordinates.
+    See <<textures-unnormalized-to-integer, Unnormalized Texel Coordinate
+    Operations>>
+  * Normalized coordinates are scaled using [eq]#coord {times} (dim - 1)#
+    rather than [eq]#coord {times} dim#, where dim is the size of one
+    dimension of the image.
+    See <<textures-normalized-to-unnormalized, normalized texel coordinate
+    transform>>.
+  * Partial derivatives are scaled using [eq]#coord {times} (dim - 1)#
+    rather than [eq]#coord {times} dim#.
+    See <<textures-scale-factor,Scale Factor Operation>>.
+  * Calculation of the next higher LOD size goes according to
+    [eq]#{lceil}dim / 2{rceil}# rather than [eq]#{lfloor}dim / 2{rfloor}#.
+    See <<resources-image-mip-level-sizing,Image Mip Level Sizing>>.
+  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
+    See <<resources-image-mip-level-sizing,Image Mip Level Sizing>>.
+
+This image organization is designed to facilitate a system like Ptex with
+separate textures for each face of a subdivision or polygon mesh.
+Placing sample locations at pixel corners allows applications to maintain
+continuity between adjacent patches by duplicating values along shared
+edges.
+Additionally, using the modified mipmapping logic along with texture
+dimensions of the form [eq]#2^n^+1# allows continuity across shared edges
+even if the adjacent patches use different LOD values.
+
+include::{generated}/interfaces/VK_NV_corner_sampled_image.adoc[]
+
+=== Issues
+
+. What should this extension be named?
++
+--
+*DISCUSSION*: While naming this extension, we chose the most distinctive
+aspect of the image organization and referred to such images as
+"`corner-sampled images`".
+As a result, we decided to name the extension NV_corner_sampled_image.
+--
+
+. Do we need a format feature flag so formats can advertise if they support corner-sampling?
++
+--
+*DISCUSSION*: Currently NVIDIA supports this for all 2D and 3D formats, but
+not for cube maps or depth-stencil formats.
+A format feature might be useful if other vendors would only support this on
+some formats.
+--
+
+. Do integer texel coordinates have a different range for corner-sampled images?
++
+--
+*RESOLVED*: No, these are unchanged.
+--
+
+. Do unnormalized sampler coordinates work with corner-sampled images? Are there any functional differences?
++
+--
+*RESOLVED*: Yes.
+Unnormalized coordinates are treated as already scaled for corner-sample
+usage.
+--
+
+. Should we have a diagram in the "`Image Operations`" chapter demonstrating different texel sampling locations?
++
+--
+*UNRESOLVED*: Probably, but later.
+--
+
+=== Version History
+
+  * Revision 1, 2018-08-14 (Daniel Koch)
+  ** Internal revisions
+  * Revision 2, 2018-08-14 (Daniel Koch)
+  ** ???
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_coverage_reduction_mode.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_coverage_reduction_mode.adoc
new file mode 100644
index 0000000..874d837
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_coverage_reduction_mode.adoc
@@ -0,0 +1,51 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_coverage_reduction_mode.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+  2019-01-29
+*Contributors*::
+  - Kedarnath Thangudu, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+When using a framebuffer with mixed samples, a per-fragment coverage
+reduction operation is performed which generates color sample coverage from
+the pixel coverage.
+This extension defines the following modes to control how this reduction is
+performed.
+
+  * Merge: When there are more samples in the pixel coverage than color
+    samples, there is an implementation-dependent association of each pixel
+    coverage sample to a color sample.
+    In the merge mode, the color sample coverage is computed such that only
+    if any associated sample in the pixel coverage is covered, the color
+    sample is covered.
+    This is the default mode.
+
+  * Truncate: When there are more raster samples (N) than color samples(M),
+    there is one to one association of the first M raster samples to the M
+    color samples; other raster samples are ignored.
+
+When the number of raster samples is equal to the color samples, there is a
+one to one mapping between them in either of the above modes.
+
+The new command
+flink:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV can
+be used to query the various raster, color, depth/stencil sample count and
+reduction mode combinations that are supported by the implementation.
+This extension would allow an implementation to support the behavior of both
+`VK_NV_framebuffer_mixed_samples` and `VK_AMD_mixed_attachment_samples`
+extensions simultaneously.
+
+include::{generated}/interfaces/VK_NV_coverage_reduction_mode.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-01-29 (Kedarnath Thangudu)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cuda_kernel_launch.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cuda_kernel_launch.adoc
new file mode 100644
index 0000000..f64cdff
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_cuda_kernel_launch.adoc
@@ -0,0 +1,67 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_cuda_kernel_launch.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-09-30
+*Contributors*::
+  - Eric Werness, NVIDIA
+
+=== Description
+
+Interoperability between APIs can sometimes create additional overhead
+depending on the platform used.
+This extension targets deployment of existing CUDA kernels via Vulkan, with
+a way to directly upload PTX kernels and dispatch the kernels from Vulkan's
+command buffer without the need to use interoperability between the Vulkan
+and CUDA contexts.
+However, we do encourage actual development using the native CUDA runtime
+for the purpose of debugging and profiling.
+
+The application will first have to create a CUDA module using
+flink:vkCreateCudaModuleNV then create the CUDA function entry point with
+flink:vkCreateCudaFunctionNV.
+
+Then in order to dispatch this function, the application will create a
+command buffer where it will launch the kernel with
+flink:vkCmdCudaLaunchKernelNV.
+
+When done, the application will then destroy the function handle, as well as
+the CUDA module handle with flink:vkDestroyCudaFunctionNV and
+flink:vkDestroyCudaModuleNV.
+
+To reduce the impact of compilation time, this extension offers the
+capability to return a binary cache from the PTX that was provided.
+For this, a first query for the required cache size is made with
+flink:vkGetCudaModuleCacheNV with a `NULL` pointer to a buffer and with a
+valid pointer receiving the size; then another call of the same function
+with a valid pointer to a buffer to retrieve the data.
+The resulting cache could then be user later for further runs of this
+application by sending this cache instead of the PTX code (using the same
+flink:vkCreateCudaModuleNV), thus significantly speeding up the
+initialization of the CUDA module.
+
+As with slink:VkPipelineCache, the binary cache depends on the hardware
+architecture.
+Therefore the application must assume the cache might fail, and thus need to
+handle falling back to the original PTX code as necessary.
+Most often, the cache will succeed if the same GPU driver and architecture
+is used between the cache generation from PTX and the use of this cache.
+But most often, in the event of a new driver version or a if using a
+different GPU But in the event of a new driver version or if using a
+different GPU architecture, the cache is likely to become invalid.
+
+include::{generated}/interfaces/VK_NV_cuda_kernel_launch.adoc[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2020-03-01 (Tristan Lorach)
+  * Revision 2, 2020-09-30 (Tristan Lorach)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation.adoc
new file mode 100644
index 0000000..d75e456
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation.adoc
@@ -0,0 +1,108 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_dedicated_allocation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-05-31
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows device memory to be allocated for a particular buffer
+or image resource, which on some devices can significantly improve the
+performance of that resource.
+Normal device memory allocations must support memory aliasing and sparse
+binding, which could interfere with optimizations like framebuffer
+compression or efficient page table usage.
+This is important for render targets and very large resources, but need not
+(and probably should not) be used for smaller resources that can benefit
+from suballocation.
+
+This extension adds a few small structures to resource creation and memory
+allocation: a new structure that flags whether am image/buffer will have a
+dedicated allocation, and a structure indicating the image or buffer that an
+allocation will be bound to.
+
+include::{generated}/interfaces/VK_NV_dedicated_allocation.adoc[]
+
+=== Examples
+
+[source,c++]
+----
+    // Create an image with
+    // VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation
+    // set to VK_TRUE
+
+    VkDedicatedAllocationImageCreateInfoNV dedicatedImageInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
+        .pNext = NULL,
+        .dedicatedAllocation = VK_TRUE,
+    };
+
+    VkImageCreateInfo imageCreateInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+        .pNext = &dedicatedImageInfo
+        // Other members set as usual
+    };
+
+    VkImage image;
+    VkResult result = vkCreateImage(
+        device,
+        &imageCreateInfo,
+        NULL,               // pAllocator
+        &image);
+
+    VkMemoryRequirements memoryRequirements;
+    vkGetImageMemoryRequirements(
+        device,
+        image,
+        &memoryRequirements);
+
+    // Allocate memory with VkDedicatedAllocationMemoryAllocateInfoNV::image
+    // pointing to the image we are allocating the memory for
+
+    VkDedicatedAllocationMemoryAllocateInfoNV dedicatedInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
+        .pNext = NULL,
+        .image = image,
+        .buffer = VK_NULL_HANDLE,
+    };
+
+    VkMemoryAllocateInfo memoryAllocateInfo =
+    {
+        .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+        .pNext = &dedicatedInfo,
+        .allocationSize = memoryRequirements.size,
+        .memoryTypeIndex = FindMemoryTypeIndex(memoryRequirements.memoryTypeBits),
+    };
+
+    VkDeviceMemory memory;
+    vkAllocateMemory(
+        device,
+        &memoryAllocateInfo,
+        NULL,               // pAllocator
+        &memory);
+
+    // Bind the image to the memory
+
+    vkBindImageMemory(
+        device,
+        image,
+        memory,
+        0);
+----
+
+=== Version History
+
+  * Revision 1, 2016-05-31 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation_image_aliasing.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation_image_aliasing.adoc
new file mode 100644
index 0000000..ee8872d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_dedicated_allocation_image_aliasing.adoc
@@ -0,0 +1,30 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_dedicated_allocation_image_aliasing.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-01-04
+*Contributors*::
+  - Nuno Subtil, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+  - Axel Gneiting, id Software
+
+=== Description
+
+This extension allows applications to alias images on dedicated allocations,
+subject to specific restrictions: the extent and the number of layers in the
+image being aliased must be smaller than or equal to those of the original
+image for which the allocation was created, and every other image parameter
+must match.
+
+include::{generated}/interfaces/VK_NV_dedicated_allocation_image_aliasing.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-01-04 (Nuno Subtil)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_descriptor_pool_overallocation.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_descriptor_pool_overallocation.adoc
new file mode 100644
index 0000000..30febfe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_descriptor_pool_overallocation.adoc
@@ -0,0 +1,37 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_descriptor_pool_overallocation.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-08-30
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+There are scenarios where the application does not know ahead of time how
+many descriptor sets it may need to allocate from a descriptor pool, or how
+many descriptors of any of the descriptor types it may need to allocate from
+the descriptor pool.
+
+This extension gives applications the ability to request the implementation
+allow more sets or descriptors to be allocated than initially specified at
+descriptor pool creation time, subject to available resources.
+
+The ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV flag
+lets the application allocate more than
+slink:VkDescriptorPoolCreateInfo::pname:maxSets descriptor sets, and the
+ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV lets the
+application allocate more descriptors than initially specified by
+slink:VkDescriptorPoolSize::pname:descriptorCount for any descriptor types.
+
+include::{generated}/interfaces/VK_NV_descriptor_pool_overallocation.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-08-30 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostic_checkpoints.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostic_checkpoints.adoc
new file mode 100644
index 0000000..80bd3b9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostic_checkpoints.adoc
@@ -0,0 +1,35 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_diagnostic_checkpoints.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-16
+*Contributors*::
+  - Oleg Kuznetsov, NVIDIA
+  - Alex Dunn, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension allows applications to insert markers in the command stream
+and associate them with custom data.
+
+If a device lost error occurs, the application may: then query the
+implementation for the last markers to cross specific implementation-defined
+pipeline stages, in order to narrow down which commands were executing at
+the time and might have caused the failure.
+
+include::{generated}/interfaces/VK_NV_device_diagnostic_checkpoints.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-07-16 (Nuno Subtil)
+  ** Internal revisions
+  * Revision 2, 2018-07-16 (Nuno Subtil)
+  ** ???
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostics_config.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostics_config.adoc
new file mode 100644
index 0000000..28d0280
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_diagnostics_config.adoc
@@ -0,0 +1,33 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_diagnostics_config.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+  2022-04-06
+*Contributors*::
+  - Kedarnath Thangudu, NVIDIA
+  - Thomas Klein, NVIDIA
+
+=== Description
+
+Applications using Nvidia Nsight^(TM)^ Aftermath SDK for Vulkan to integrate
+device crash dumps into their error reporting mechanisms, may: use this
+extension to configure options related to device crash dump creation.
+
+Version 2 of this extension adds
+ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV
+which when set enables enhanced reporting of shader execution errors.
+
+include::{generated}/interfaces/VK_NV_device_diagnostics_config.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-11-21 (Kedarnath Thangudu)
+  ** Internal revisions
+  * Revision 2, 2022-04-06 (Kedarnath Thangudu)
+  ** Added a config bit
+     ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands.adoc
new file mode 100644
index 0000000..19d97b1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands.adoc
@@ -0,0 +1,325 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_generated_commands.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-02-20
+*Interactions and External Dependencies*::
+  - This extension requires Vulkan 1.1
+  - This extension requires `VK_EXT_buffer_device_address` or
+    `VK_KHR_buffer_device_address` or Vulkan 1.2 for the ability to bind
+    vertex and index buffers on the device.
+  - This extension interacts with `VK_NV_mesh_shader`.
+    If the latter extension is not supported, remove the command token to
+    initiate mesh tasks drawing in this extension.
+*Contributors*::
+  - Christoph Kubisch, NVIDIA
+  - Pierre Boudier, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+  - Yuriy O'Donnell, Epic Games
+  - Baldur Karlsson, Valve
+  - Mathias Schott, NVIDIA
+  - Tyson Smith, NVIDIA
+  - Ingo Esser, NVIDIA
+
+=== Description
+
+This extension allows the device to generate a number of critical graphics
+commands for command buffers.
+
+When rendering a large number of objects, the device can be leveraged to
+implement a number of critical functions, like updating matrices, or
+implementing occlusion culling, frustum culling, front to back sorting, etc.
+Implementing those on the device does not require any special extension,
+since an application is free to define its own data structures, and just
+process them using shaders.
+
+However, if the application desires to quickly kick off the rendering of the
+final stream of objects, then unextended Vulkan forces the application to
+read back the processed stream and issue graphics command from the host.
+For very large scenes, the synchronization overhead and cost to generate the
+command buffer can become the bottleneck.
+This extension allows an application to generate a device side stream of
+state changes and commands, and convert it efficiently into a command buffer
+without having to read it back to the host.
+
+Furthermore, it allows incremental changes to such command buffers by
+manipulating only partial sections of a command stream -- for example
+pipeline bindings.
+Unextended Vulkan requires re-creation of entire command buffers in such a
+scenario, or updates synchronized on the host.
+
+The intended usage for this extension is for the application to:
+
+  * create sname:VkBuffer objects and retrieve physical addresses from them
+    via flink:vkGetBufferDeviceAddressEXT
+  * create a graphics pipeline using
+    sname:VkGraphicsPipelineShaderGroupsCreateInfoNV for the ability to
+    change shaders on the device.
+  * create a slink:VkIndirectCommandsLayoutNV, which lists the
+    elink:VkIndirectCommandsTokenTypeNV it wants to dynamically execute as
+    an atomic command sequence.
+    This step likely involves some internal device code compilation, since
+    the intent is for the GPU to generate the command buffer in the
+    pipeline.
+  * fill the input stream buffers with the data for each of the inputs it
+    needs.
+    Each input is an array that will be filled with token-dependent data.
+  * set up a preprocess sname:VkBuffer that uses memory according to the
+    information retrieved via
+    flink:vkGetGeneratedCommandsMemoryRequirementsNV.
+  * optionally preprocess the generated content using
+    flink:vkCmdPreprocessGeneratedCommandsNV, for example on an asynchronous
+    compute queue, or for the purpose of re-using the data in multiple
+    executions.
+  * call flink:vkCmdExecuteGeneratedCommandsNV to create and execute the
+    actual device commands for all sequences based on the inputs provided.
+
+For each draw in a sequence, the following can be specified:
+
+  * a different shader group
+  * a number of vertex buffer bindings
+  * a different index buffer, with an optional dynamic offset and index type
+  * a number of different push constants
+  * a flag that encodes the primitive winding
+
+While the GPU can be faster than a CPU to generate the commands, it will not
+happen asynchronously to the device, therefore the primary use case is
+generating "`less`" total work (occlusion culling, classification to use
+specialized shaders, etc.).
+
+include::{generated}/interfaces/VK_NV_device_generated_commands.adoc[]
+
+=== Issues
+
+1) How to name this extension ?
+
+`VK_NV_device_generated_commands`
+
+As usual, one of the hardest issues ;)
+
+Alternatives: `VK_gpu_commands`, `VK_execute_commands`,
+`VK_device_commands`, `VK_device_execute_commands`, `VK_device_execute`,
+`VK_device_created_commands`, `VK_device_recorded_commands`,
+`VK_device_generated_commands` `VK_indirect_generated_commands`
+
+2) Should we use a serial stateful token stream or stateless sequence
+descriptions?
+
+Similarly to slink:VkPipeline, fixed layouts have the most likelihood to be
+cross-vendor adoptable.
+They also benefit from being processable in parallel.
+This is a different design choice compared to the serial command stream
+generated through `GL_NV_command_list`.
+
+3) How to name a sequence description?
+
+`VkIndirectCommandsLayout` as in the NVX extension predecessor.
+
+Alternative: `VkGeneratedCommandsLayout`
+
+4) Do we want to provide code:indirectCommands inputs with layout or at
+code:indirectCommands time?
+
+Separate layout from data as Vulkan does.
+Provide full flexibility for code:indirectCommands.
+
+5) Should the input be provided as SoA or AoS?
+
+Both ways are desirable.
+AoS can provide portability to other APIs and easier to setup, while SoA
+allows to update individual inputs in a cache-efficient manner, when others
+remain static.
+
+6) How do we make developers aware of the memory requirements of
+implementation-dependent data used for the generated commands?
+
+Make the API explicit and introduce a `preprocess` slink:VkBuffer.
+Developers have to allocate it using
+flink:vkGetGeneratedCommandsMemoryRequirementsNV.
+
+In the NVX version the requirements were hidden implicitly as part of the
+command buffer reservation process, however as the memory requirements can
+be substantial, we want to give developers the ability to budget the memory
+themselves.
+By lowering the `maxSequencesCount` the memory consumption can be reduced.
+Furthermore reuse of the memory is possible, for example for doing explicit
+preprocessing and execution in a ping-pong fashion.
+
+The actual buffer size is implementation-dependent and may be zero, i.e. not
+always required.
+
+When making use of Graphics Shader Groups, the programs should behave
+similar with regards to vertex inputs, clipping and culling outputs of the
+geometry stage, as well as sample shading behavior in fragment shaders, to
+reduce the amount of the worst-case memory approximation.
+
+7) Should we allow additional per-sequence dynamic state changes?
+
+Yes
+
+Introduced a lightweight indirect state flag
+elink:VkIndirectStateFlagBitsNV.
+So far only switching front face winding state is exposed.
+Especially in CAD/DCC mirrored transforms that require such changes are
+common, and similar flexibility is given in the ray tracing instance
+description.
+
+The flag could be extended further, for example to switch between
+primitive-lists or -strips, or make other state modifications.
+
+Furthermore, as new tokens can be added easily, future extension could add
+the ability to change any elink:VkDynamicState.
+
+8) How do we allow re-using already "`generated`" code:indirectCommands?
+
+Expose a `preprocessBuffer` to reuse implementation-dependencyFlags data.
+Set the `isPreprocessed` to true in flink:vkCmdExecuteGeneratedCommandsNV.
+
+9) Under which conditions is flink:vkCmdExecuteGeneratedCommandsNV legal?
+
+It behaves like a regular draw call command.
+
+10) Is flink:vkCmdPreprocessGeneratedCommandsNV copying the input data or
+referencing it?
+
+There are multiple implementations possible:
+
+  * one could have some emulation code that parses the inputs, and generates
+    an output command buffer, therefore copying the inputs.
+  * one could just reference the inputs, and have the processing done in
+    pipe at execution time.
+
+If the data is mandated to be copied, then it puts a penalty on
+implementation that could process the inputs directly in pipe.
+If the data is "`referenced`", then it allows both types of implementation.
+
+The inputs are "`referenced`", and must: not be modified after the call to
+flink:vkCmdExecuteGeneratedCommandsNV has completed.
+
+11) Which buffer usage flags are required for the buffers referenced by
+sname:VkGeneratedCommandsInfoNV ?
+
+Reuse existing ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
+
+  * slink:VkGeneratedCommandsInfoNV::pname:preprocessBuffer
+  * slink:VkGeneratedCommandsInfoNV::pname:sequencesCountBuffer
+  * slink:VkGeneratedCommandsInfoNV::pname:sequencesIndexBuffer
+  * slink:VkIndirectCommandsStreamNV::pname:buffer
+
+12) In which pipeline stage does the device generated command expansion
+happen?
+
+flink:vkCmdPreprocessGeneratedCommandsNV is treated as if it occurs in a
+separate logical pipeline from either graphics or compute, and that pipeline
+only includes ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, a new stage
+ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, and
+ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
+This new stage has two corresponding new access types,
+ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV and
+ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, used to synchronize reading
+the buffer inputs and writing the preprocess memory output.
+
+The generated output written in the preprocess buffer memory by
+flink:vkCmdExecuteGeneratedCommandsNV is considered to be consumed by the
+ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT pipeline stage.
+
+Thus, to synchronize from writing the input buffers to preprocessing via
+flink:vkCmdPreprocessGeneratedCommandsNV, use:
+
+  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+  * pname:dstAccessMask = ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV
+
+To synchronize from flink:vkCmdPreprocessGeneratedCommandsNV to executing
+the generated commands by flink:vkCmdExecuteGeneratedCommandsNV, use:
+
+  * pname:srcStageMask = ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+  * pname:srcAccessMask = ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
+  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  * pname:dstAccessMask = ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT
+
+When flink:vkCmdExecuteGeneratedCommandsNV is used with a
+pname:isPreprocessed of `VK_FALSE`, the generated commands are implicitly
+preprocessed, therefore one only needs to synchronize the inputs via:
+
+  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  * pname:dstAccessMask = ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT
+
+13) What if most token data is "`static`", but we frequently want to render
+a subsection?
+
+Added "`sequencesIndexBuffer`".
+This allows to easier sort and filter what should actually be executed.
+
+14) What are the changes compared to the previous NVX extension?
+
+  * Compute dispatch support was removed (was never implemented in drivers).
+    There are different approaches how dispatching from the device should
+    work, hence we defer this to a future extension.
+  * The `ObjectTableNVX` was replaced by using physical buffer addresses and
+    introducing Shader Groups for the graphics pipeline.
+  * Less state changes are possible overall, but the important operations
+    are still there (reduces complexity of implementation).
+  * The API was redesigned so all inputs must be passed at both
+    preprocessing and execution time (this was implicit in NVX, now it is
+    explicit)
+  * The reservation of intermediate command space is now mandatory and
+    explicit through a preprocess buffer.
+  * The elink:VkIndirectStateFlagBitsNV were introduced
+
+15) When porting from other APIs, their indirect buffers may use different
+    enums, for example for index buffer types.
+    How to solve this?
+
+Added "`pIndexTypeValues`" to map custom `uint32_t` values to corresponding
+ename:VkIndexType.
+
+16) Do we need more shader group state overrides?
+
+The NVX version allowed all PSO states to be different, however as the goal
+is not to replace all state setup, but focus on highly-frequent state
+changes for drawing lots of objects, we reduced the amount of state
+overrides.
+Especially VkPipelineLayout as well as VkRenderPass configuration should be
+left static, the rest is still open for discussion.
+
+The current focus is just to allow VertexInput changes as well as shaders,
+while all shader groups use the same shader stages.
+
+Too much flexibility will increase the test coverage requirement as well.
+However, further extensions could allow more dynamic state as well.
+
+17) Do we need more detailed physical device feature queries/enables?
+
+An EXT version would need detailed implementor feedback to come up with a
+good set of features.
+Please contact us if you are interested, we are happy to make more features
+optional, or add further restrictions to reduce the minimum feature set of
+an EXT.
+
+18) Is there an interaction with VK_KHR_pipeline_library planned?
+
+Yes, a future version of this extension will detail the interaction, once
+VK_KHR_pipeline_library is no longer provisional.
+
+=== Example Code
+
+Open-Source samples illustrating the usage of the extension can be found at
+the following location (may not yet exist at time of writing):
+
+https://github.com/nvpro-samples/vk_device_generated_cmds
+
+
+=== Version History
+
+  * Revision 1, 2020-02-20 (Christoph Kubisch)
+  ** Initial version
+  * Revision 2, 2020-03-09 (Christoph Kubisch)
+  ** Remove VK_EXT_debug_report interactions
+  * Revision 3, 2020-03-09 (Christoph Kubisch)
+  ** Fix naming VkPhysicalDeviceGenerated to VkPhysicalDeviceDeviceGenerated
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands_compute.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands_compute.adoc
new file mode 100644
index 0000000..bc55bde
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_device_generated_commands_compute.adoc
@@ -0,0 +1,35 @@
+// Copyright (c) 2023 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_generated_commands_compute.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-07-21
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Hans-Kristian Arntzen, Valve
+  - Mike Blumenkrantz, VALVE
+
+
+=== Description
+
+This extension allows the device to generate commands for binding compute
+pipelines, setting push constants and launching compute dispatches.
+
+include::{generated}/interfaces/VK_NV_device_generated_commands_compute.adoc[]
+
+=== Version History
+
+  * Revision 2, 2023-07-21 (Vikram Kushwaha)
+  ** Rename vkCmdUpdatePipelineIndirectBuffer to
+     vkCmdUpdatePipelineIndirectBufferNV
+
+  * Revision 1, 2023-06-09 (Vikram Kushwaha)
+  ** First Revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_displacement_micromap.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_displacement_micromap.adoc
new file mode 100644
index 0000000..53a5f11
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_displacement_micromap.adoc
@@ -0,0 +1,56 @@
+// Copyright (c) 2021-2023 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_displacement_micromap.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-03-17
+*Interactions and External Dependencies*::
+    TBD
+*Contributors*::
+  - Christoph Kubisch, NVIDIA
+  - Eric Werness, NVIDIA
+
+=== Description
+
+Ray tracing can very efficiently render from geometry which has very fine
+detail, but when using only a basic triangle representation, memory
+consumption can be an issue.
+This extension adds the ability to add a _displacement map_ to add more
+detail to triangles in an acceleration structure with an efficient in-memory
+format.
+The format is externally visible to allow the application to compress its
+internal geometry representations into the compressed format ahead of time.
+This format adds displacements along a defined vector to subtriangle
+vertices which are subdivided from the main triangles.
+
+This extension provides:
+
+  * a new elink:VkMicromapTypeEXT format for the displacement micromap,
+  * a structure to extend
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR to attach a
+    displacement micromap to the geometry of the acceleration structure,
+  * enums extending elink:VkBuildAccelerationStructureFlagBitsKHR to allow
+    for updates.
+
+include::{generated}/interfaces/VK_NV_displacement_micromap.adoc[]
+
+=== Issues
+
+(1) What is the status of this extension?
+--
+  * Provisional and expected to change.
+    The broad structure and encoding format are stable, but there will
+    likely be changes to the structures, enumerant values, and shader
+    interface.
+--
+
+=== Version History
+
+  * Revision 1, 2023-03-17 (Eric Werness)
+  ** Initial public revision
+  * Revision 2, 2023-07-07 (Eric Werness)
+  ** Add shader support for decode intrinsics
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_extended_sparse_address_space.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_extended_sparse_address_space.adoc
new file mode 100644
index 0000000..e4844d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_extended_sparse_address_space.adoc
@@ -0,0 +1,33 @@
+// Copyright (c) 2023 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_extended_sparse_address_space.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-10-03
+*Contributors*::
+  - Russell Chou, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Eric Werness, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+Implementations may be able to support an extended address space for sparse
+memory resources, but only for a certain set of usages.
+
+This extension adds a query for the extended limit, and the supported usages
+that are allowed for that limit.
+This limit is an increase to
+slink:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize when the
+slink:VkImage or slink:VkBuffer uses only usages that are supported.
+
+include::{generated}/interfaces/VK_NV_extended_sparse_address_space.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-10-03 (Russell Chou)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory.adoc
new file mode 100644
index 0000000..0fafcae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory.adoc
@@ -0,0 +1,73 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+Applications may wish to export memory to other Vulkan instances or other
+APIs, or import memory from other Vulkan instances or other APIs to enable
+Vulkan workloads to be split up across application module, process, or API
+boundaries.
+This extension enables applications to create exportable Vulkan memory
+objects such that the underlying resources can be referenced outside the
+Vulkan instance that created them.
+
+include::{generated}/interfaces/VK_NV_external_memory.adoc[]
+
+=== Issues
+
+1) If memory objects are shared between processes and APIs, is this
+considered aliasing according to the rules outlined in the
+<<resources-memory-aliasing,Memory Aliasing>> section?
+
+*RESOLVED*: Yes, but strict exceptions to the rules are added to allow some
+forms of aliasing in these cases.
+Further, other extensions may build upon these new aliasing rules to define
+specific support usage within Vulkan for imported native memory objects, or
+memory objects from other APIs.
+
+2) Are new image layouts or metadata required to specify image layouts and
+layout transitions compatible with non-Vulkan APIs, or with other instances
+of the same Vulkan driver?
+
+*RESOLVED*: No.
+Separate instances of the same Vulkan driver running on the same GPU should
+have identical internal layout semantics, so applications have the tools
+they need to ensure views of images are consistent between the two
+instances.
+Other APIs will fall into two categories: Those that are Vulkan compatible
+(a term to be defined by subsequent interopability extensions), or Vulkan
+incompatible.
+When sharing images with Vulkan incompatible APIs, the Vulkan image must be
+transitioned to the ename:VK_IMAGE_LAYOUT_GENERAL layout before handing it
+off to the external API.
+
+Note this does not attempt to address cross-device transitions, nor
+transitions to engines on the same device which are not visible within the
+Vulkan API.
+Both of these are beyond the scope of this extension.
+
+=== Examples
+
+[source,c++]
+----
+    // TODO: Write some sample code here.
+----
+
+
+=== Version History
+
+  * Revision 1, 2016-08-19 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_capabilities.adoc
new file mode 100644
index 0000000..d8938c4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_capabilities.adoc
@@ -0,0 +1,65 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_capabilities.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-19
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Interacts with Vulkan 1.1.
+  - Interacts with `apiext:VK_KHR_dedicated_allocation`.
+  - Interacts with `apiext:VK_NV_dedicated_allocation`.
+*Contributors*::
+  - James Jones, NVIDIA
+
+=== Description
+
+Applications may wish to import memory from the Direct 3D API, or export
+memory to other Vulkan instances.
+This extension provides a set of capability queries that allow applications
+determine what types of win32 memory handles an implementation supports for
+a given set of use cases.
+
+include::{generated}/interfaces/VK_NV_external_memory_capabilities.adoc[]
+
+=== Issues
+
+1) Why do so many external memory capabilities need to be queried on a
+per-memory-handle-type basis?
+
+*RESOLVED*: This is because some handle types are based on OS-native objects
+that have far more limited capabilities than the very generic Vulkan memory
+objects.
+Not all memory handle types can name memory objects that support 3D images,
+for example.
+Some handle types cannot even support the deferred image and memory binding
+behavior of Vulkan and require specifying the image when allocating or
+importing the memory object.
+
+2) Does the slink:VkExternalImageFormatPropertiesNV struct need to include a
+list of memory type bits that support the given handle type?
+
+*RESOLVED*: No.
+The memory types that do not support the handle types will simply be
+filtered out of the results returned by flink:vkGetImageMemoryRequirements
+when a set of handle types was specified at image creation time.
+
+3) Should the non-opaque handle types be moved to their own extension?
+
+*RESOLVED*: Perhaps.
+However, defining the handle type bits does very little and does not require
+any platform-specific types on its own, and it is easier to maintain the
+bitmask values in a single extension for now.
+Presumably more handle types could be added by separate extensions though,
+and it would be midly weird to have some platform-specific ones defined in
+the core spec and some in extensions
+
+=== Version History
+
+  * Revision 1, 2016-08-19 (James Jones)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_rdma.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_rdma.adoc
new file mode 100644
index 0000000..57710cf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_rdma.adoc
@@ -0,0 +1,97 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_rdma.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-04-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+This extension adds support for allocating memory which can be used for
+remote direct memory access (RDMA) from other devices.
+
+include::{generated}/interfaces/VK_NV_external_memory_rdma.adoc[]
+
+=== Issues
+
+=== Examples
+
+[source,cpp]
+----
+VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };
+VkPhysicalDeviceMemoryProperties2 memoryProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, &memoryBudgetProperties };
+vkGetPhysicalDeviceMemoryProperties2(physicalDevice, &memoryProperties2);
+uint32_t heapIndex = (uint32_t)-1;
+for (uint32_t memoryType = 0; memoryType < memoryProperties2.memoryProperties.memoryTypeCount; memoryType++) {
+    if (memoryProperties2.memoryProperties.memoryTypes[memoryType].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV) {
+        heapIndex = memoryProperties2.memoryProperties.memoryTypes[memoryType].heapIndex;
+        break;
+    }
+}
+if ((heapIndex == (uint32_t)-1) ||
+    (memoryBudgetProperties.heapBudget[heapIndex] < size)) {
+    return;
+}
+
+VkPhysicalDeviceExternalBufferInfo externalBufferInfo = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO };
+externalBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+externalBufferInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+
+VkExternalBufferProperties externalBufferProperties = { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES };
+vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, &externalBufferInfo, &externalBufferProperties);
+
+if (!(externalBufferProperties.externalMemoryProperties.externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) {
+    return;
+}
+
+VkExternalMemoryBufferCreateInfo externalMemoryBufferCreateInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO };
+externalMemoryBufferCreateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+
+VkBufferCreateInfo bufferCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &externalMemoryBufferCreateInfo };
+bufferCreateInfo.size = size;
+bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VkMemoryRequirements mem_reqs;
+vkCreateBuffer(device, &bufferCreateInfo, NULL, &buffer);
+vkGetBufferMemoryRequirements(device, buffer, &mem_reqs);
+
+VkExportMemoryAllocateInfo exportMemoryAllocateInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO };
+exportMemoryAllocateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+
+// Find memory type index
+uint32_t i = 0;
+for (; i < VK_MAX_MEMORY_TYPES; i++) {
+    if ((mem_reqs.memoryTypeBits & (1 << i)) &&
+        (memoryProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV)) {
+        break;
+    }
+}
+
+VkMemoryAllocateInfo memAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, &exportMemoryAllocateInfo };
+memAllocInfo.allocationSize = mem_reqs.size;
+memAllocInfo.memoryTypeIndex = i;
+
+vkAllocateMemory(device, &memAllocInfo, NULL, &mem);
+vkBindBufferMemory(device, buffer, mem, 0);
+
+VkMemoryGetRemoteAddressInfoNV getMemoryRemoteAddressInfo = { VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV };
+getMemoryRemoteAddressInfo.memory = mem;
+getMemoryRemoteAddressInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV;
+
+VkRemoteAddressNV rdmaAddress;
+vkGetMemoryRemoteAddressNV(device, &getMemoryRemoteAddressInfo, &rdmaAddress);
+// address returned in 'rdmaAddress' can be used by external devices to initiate RDMA transfers
+----
+
+=== Version History
+
+  * Revision 1, 2020-12-15 (Carsten Rohde)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_sci_buf.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_sci_buf.adoc
new file mode 100644
index 0000000..2db4bbe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_sci_buf.adoc
@@ -0,0 +1,72 @@
+// Copyright (c) 2020-2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_sci_buf.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-04-12
+*Contributors*::
+  - Kai Zhang, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Jonathan McCaffrey, NVIDIA
+  - Daniel Koch, NVIDIA
+
+[[NvSciBuf-extension-page]]
+=== Description
+This extension enables an application to access external memory via
+stext:NvSciBufObj.
+To import a stext:NvSciBufObj to slink:VkDeviceMemory, applications need to:
+
+  * Create an unreconciled stext:NvSciBufAttrList via
+    stext:NvSciBufAttrListCreate()
+  * Fill in the private attribute list via
+    flink:vkGetPhysicalDeviceSciBufAttributesNV()
+  * Fill in the public attribute list via stext:NvSciBufAttrListSetAttrs()
+  * Reconcile the stext:NvSciBufAttrList via
+    stext:NvSciBufAttrListReconcile()
+  * Create a stext:NvSciBufObj via stext:NvSciBufObjAlloc()
+  * Import the stext:NvSciBufObj to a slink:VkDeviceMemory by chaining
+    slink:VkImportMemorySciBufInfoNV structure to the command
+    flink:vkAllocateMemory.
+
+For details of the stext:NvSciBuf APIs and data structures, see the
+https://developer.nvidia.com/docs/drive/drive-os/latest/linux/sdk/api%5Freference/group%5F%5Fnvsci%5F%5Ftop.html[`NvStreams
+Documentation`].
+
+include::{generated}/interfaces/VK_NV_external_memory_sci_buf.adoc[]
+
+=== Issues
+
+1) What should we call this extension?
+
+RESOLVED.
+The external API is stext:NvSciBuf, but the Vulkan convention is to append
+the vendor suffix at the end of an identifier.
+Using stext:NvSciBufNV seems awkward, so we have chosen to use just the
+stext:SciBuf portion of the name in Vulkan commands and tokens.
+Since this is for interacting with memory objects allocated from outside
+Vulkan, we use "external_memory" in the name, similar to
+apiext:VK_KHR_external_memory_fd.
+To avoid an explosion of extensions, we include the capability to import and
+export memory in one extension but include separate features in case
+implementations only implement (or safety certify) a subset.
+
+2) What changed in revision 2?
+
+RESOLVED.
+The slink:VkPhysicalDeviceExternalSciBufFeaturesNV struct was renamed to
+slink:VkPhysicalDeviceExternalMemorySciBufFeaturesNV to follow naming
+conventions (previous names retained as aliases), and drop const on
+pname:pNext pointer.
+
+
+=== Version History
+
+  * Revision 1, 2022-04-12 (Kai Zhang, Daniel Koch)
+  ** Internal revisions
+  * Revision 2, 2023-01-03 (Daniel Koch)
+  ** fix the feature structure to address naming convention and cts
+     autogeneration issues
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_win32.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_win32.adoc
new file mode 100644
index 0000000..5b836d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_memory_win32.adoc
@@ -0,0 +1,214 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_win32.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+Applications may wish to export memory to other Vulkan instances or other
+APIs, or import memory from other Vulkan instances or other APIs to enable
+Vulkan workloads to be split up across application module, process, or API
+boundaries.
+This extension enables win32 applications to export win32 handles from
+Vulkan memory objects such that the underlying resources can be referenced
+outside the Vulkan instance that created them, and import win32 handles
+created in the Direct3D API to Vulkan memory objects.
+
+include::{generated}/interfaces/VK_NV_external_memory_win32.adoc[]
+
+=== Issues
+
+1) If memory objects are shared between processes and APIs, is this
+considered aliasing according to the rules outlined in the
+<<resources-memory-aliasing,Memory Aliasing>> section?
+
+*RESOLVED*: Yes, but strict exceptions to the rules are added to allow some
+forms of aliasing in these cases.
+Further, other extensions may build upon these new aliasing rules to define
+specific support usage within Vulkan for imported native memory objects, or
+memory objects from other APIs.
+
+2) Are new image layouts or metadata required to specify image layouts and
+layout transitions compatible with non-Vulkan APIs, or with other instances
+of the same Vulkan driver?
+
+*RESOLVED*: No.
+Separate instances of the same Vulkan driver running on the same GPU should
+have identical internal layout semantics, so applications have the tools
+they need to ensure views of images are consistent between the two
+instances.
+Other APIs will fall into two categories: Those that are Vulkan compatible
+(a term to be defined by subsequent interopability extensions), or Vulkan
+incompatible.
+When sharing images with Vulkan incompatible APIs, the Vulkan image must be
+transitioned to the ename:VK_IMAGE_LAYOUT_GENERAL layout before handing it
+off to the external API.
+
+Note this does not attempt to address cross-device transitions, nor
+transitions to engines on the same device which are not visible within the
+Vulkan API.
+Both of these are beyond the scope of this extension.
+
+3) Do applications need to call code:CloseHandle() on the values returned
+from flink:vkGetMemoryWin32HandleNV when pname:handleType is
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV?
+
+*RESOLVED*: Yes, unless it is passed back in to another driver instance to
+import the object.
+A successful get call transfers ownership of the handle to the application,
+while an import transfers ownership to the associated driver.
+Destroying the memory object will not destroy the handle or the handle's
+reference to the underlying memory resource.
+
+=== Examples
+
+[source,c++]
+----
+    //
+    // Create an exportable memory object and export an external
+    // handle from it.
+    //
+
+    // Pick an external format and handle type.
+    static const VkFormat format = VK_FORMAT_R8G8B8A8_UNORM;
+    static const VkExternalMemoryHandleTypeFlagsNV handleType =
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV;
+
+    extern VkPhysicalDevice physicalDevice;
+    extern VkDevice device;
+
+    VkPhysicalDeviceMemoryProperties memoryProperties;
+    VkExternalImageFormatPropertiesNV properties;
+    VkExternalMemoryImageCreateInfoNV externalMemoryImageCreateInfo;
+    VkDedicatedAllocationImageCreateInfoNV dedicatedImageCreateInfo;
+    VkImageCreateInfo imageCreateInfo;
+    VkImage image;
+    VkMemoryRequirements imageMemoryRequirements;
+    uint32_t numMemoryTypes;
+    uint32_t memoryType;
+    VkExportMemoryAllocateInfoNV exportMemoryAllocateInfo;
+    VkDedicatedAllocationMemoryAllocateInfoNV dedicatedAllocationInfo;
+    VkMemoryAllocateInfo memoryAllocateInfo;
+    VkDeviceMemory memory;
+    VkResult result;
+    HANDLE memoryHnd;
+
+    // Figure out how many memory types the device supports
+    vkGetPhysicalDeviceMemoryProperties(physicalDevice,
+                                        &memoryProperties);
+    numMemoryTypes = memoryProperties.memoryTypeCount;
+
+    // Check the external handle type capabilities for the chosen format
+    // Exportable 2D image support with at least 1 mip level, 1 array
+    // layer, and VK_SAMPLE_COUNT_1_BIT using optimal tiling and supporting
+    // texturing and color rendering is required.
+    result = vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
+        physicalDevice,
+        format,
+        VK_IMAGE_TYPE_2D,
+        VK_IMAGE_TILING_OPTIMAL,
+        VK_IMAGE_USAGE_SAMPLED_BIT |
+        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+        0,
+        handleType,
+        &properties);
+
+    if ((result != VK_SUCCESS) ||
+        !(properties.externalMemoryFeatures &
+          VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV)) {
+        abort();
+    }
+
+    // Set up the external memory image creation info
+    memset(&externalMemoryImageCreateInfo,
+           0, sizeof(externalMemoryImageCreateInfo));
+    externalMemoryImageCreateInfo.sType =
+        VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
+    externalMemoryImageCreateInfo.handleTypes = handleType;
+    if (properties.externalMemoryFeatures &
+        VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV) {
+        memset(&dedicatedImageCreateInfo, 0, sizeof(dedicatedImageCreateInfo));
+        dedicatedImageCreateInfo.sType =
+            VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV;
+        dedicatedImageCreateInfo.dedicatedAllocation = VK_TRUE;
+        externalMemoryImageCreateInfo.pNext = &dedicatedImageCreateInfo;
+    }
+    // Set up the  core image creation info
+    memset(&imageCreateInfo, 0, sizeof(imageCreateInfo));
+    imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+    imageCreateInfo.pNext = &externalMemoryImageCreateInfo;
+    imageCreateInfo.format = format;
+    imageCreateInfo.extent.width = 64;
+    imageCreateInfo.extent.height = 64;
+    imageCreateInfo.extent.depth = 1;
+    imageCreateInfo.mipLevels = 1;
+    imageCreateInfo.arrayLayers = 1;
+    imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+    imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+    imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT |
+        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+    imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+    imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+
+    vkCreateImage(device, &imageCreateInfo, NULL, &image);
+
+    vkGetImageMemoryRequirements(device,
+                                 image,
+                                 &imageMemoryRequirements);
+
+    // For simplicity, just pick the first compatible memory type.
+    for (memoryType = 0; memoryType < numMemoryTypes; memoryType++) {
+        if ((1 << memoryType) & imageMemoryRequirements.memoryTypeBits) {
+            break;
+        }
+    }
+
+    // At least one memory type must be supported given the prior external
+    // handle capability check.
+    assert(memoryType < numMemoryTypes);
+
+    // Allocate the external memory object.
+    memset(&exportMemoryAllocateInfo, 0, sizeof(exportMemoryAllocateInfo));
+    exportMemoryAllocateInfo.sType =
+        VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV;
+    exportMemoryAllocateInfo.handleTypes = handleType;
+    if (properties.externalMemoryFeatures &
+        VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV) {
+        memset(&dedicatedAllocationInfo, 0, sizeof(dedicatedAllocationInfo));
+        dedicatedAllocationInfo.sType =
+            VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV;
+        dedicatedAllocationInfo.image = image;
+        exportMemoryAllocateInfo.pNext = &dedicatedAllocationInfo;
+    }
+    memset(&memoryAllocateInfo, 0, sizeof(memoryAllocateInfo));
+    memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+    memoryAllocateInfo.pNext = &exportMemoryAllocateInfo;
+    memoryAllocateInfo.allocationSize = imageMemoryRequirements.size;
+    memoryAllocateInfo.memoryTypeIndex = memoryType;
+
+    vkAllocateMemory(device, &memoryAllocateInfo, NULL, &memory);
+
+    if (!(properties.externalMemoryFeatures &
+          VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV)) {
+        vkBindImageMemory(device, image, memory, 0);
+    }
+
+    // Get the external memory opaque FD handle
+    vkGetMemoryWin32HandleNV(device, memory, &memoryHnd);
+----
+
+=== Version History
+
+  * Revision 1, 2016-08-11 (James Jones)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync.adoc
new file mode 100644
index 0000000..268b5e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync.adoc
@@ -0,0 +1,80 @@
+// Copyright (c) 2020-2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_sci_sync.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-04-12
+*Contributors*::
+  - Kai Zhang, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Jonathan McCaffrey, NVIDIA
+  - Daniel Koch, NVIDIA
+
+[[NvSciSync-extension-page]]
+=== Description
+An application using external memory may wish to synchronize access to that
+memory using semaphores and fences.
+This extension enables an application to import and export semaphore and
+fence payloads to and from stext:NvSciSync objects.
+To import a stext:NvSciSyncObj to a slink:VkSemaphore or slink:VkFence,
+applications need to:
+
+  * Create an unreconciled stext:NvSciSyncAttrList via
+    stext:NvSciSyncAttrListCreate()
+  * Fill the private attribute list via
+    flink:vkGetPhysicalDeviceSciSyncAttributesNV()
+  * Fill the public attribute list via stext:NvSciSyncAttrListSetAttrs()
+  * Reconcile the stext:NvSciSyncAttrList via
+    stext:NvSciSyncAttrListReconcile()
+  * Create a stext:NvSciSyncObj via stext:NvSciSyncObjAlloc()
+  * Import the stext:NvSciSyncObj to a slink:VkSemaphore by passing the
+    slink:VkImportSemaphoreSciSyncInfoNV structure to the
+    flink:vkImportSemaphoreSciSyncObjNV command, or to a slink:VkFence by
+    passing the slink:VkImportFenceSciSyncInfoNV structure to the
+    flink:vkImportFenceSciSyncObjNV command.
+
+To import/export a stext:NvSciSyncFence to a slink:VkFence object, that
+slink:VkFence object must: already have a stext:NvSciSyncObj previously
+imported.
+
+For details of the stext:NvSciSync APIs and data structures, see the
+https://developer.nvidia.com/docs/drive/drive-os/latest/linux/sdk/api%5Freference/group%5F%5Fnvsci%5F%5Ftop.html[`NvStreams
+Documentation`].
+
+include::{generated}/interfaces/VK_NV_external_sci_sync.adoc[]
+
+=== Issues
+
+1) What should we call this extension?
+
+RESOLVED.
+The external API is stext:NvSciSync, but the Vulkan convention is to append
+the vendor suffix at the end of an identifier.
+Using stext:NvSciSyncNV seems awkward, so we have chosen to use just the
+stext:SciSync portion of the name in Vulkan commands and tokens.
+Since this is for interacting with objects from outside Vulkan, we use
+"external" in the name, similar to apiext:VK_KHR_external_fence_fd.
+To avoid an explosion of extensions, we include the capability to import and
+export both semaphores and fences in one extension but include separate
+features in case implementations only implement (or safety certify) a
+subset.
+
+2) How do we resolve the NvStreams terminology of NvSciSyncFence which
+conflicts with the Vulkan SC terminology of VkFence.
+
+RESOLVED: "fence" refers to VkFence.
+"NvSciSyncFence" refers to the NvStreams type and "VkFence" refers to the
+Vulkan SC type.
+
+
+=== Version History
+
+  * Revision 2, 2022-03-29 (Daniel Koch)
+  ** use separate entry points for stext:NvSciSyncFence and
+     stext:NvSciSyncObj handles
+  * Revision 1, 2020-11-25 (Kai Zhang, Daniel Koch)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync2.adoc
new file mode 100644
index 0000000..2abf27e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_external_sci_sync2.adoc
@@ -0,0 +1,120 @@
+// Copyright (c) 2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_sci_sync2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-07
+*Contributors*::
+  - Kai Zhang, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Jonathan McCaffrey, NVIDIA
+  - Daniel Koch, NVIDIA
+
+[[NvSciSync2-extension-page]]
+=== Description
+
+An application using external memory may wish to synchronize access to that
+memory using semaphores and fences.
+This extension enables an application to import semaphore and import/export
+fence payloads to and from stext:NvSciSync objects.
+To import a stext:NvSciSyncObj to a slink:VkSemaphore or slink:VkFence,
+applications need to:
+
+  * Create an unreconciled stext:NvSciSyncAttrList via
+    stext:NvSciSyncAttrListCreate()
+  * Fill the private attribute list via
+    flink:vkGetPhysicalDeviceSciSyncAttributesNV()
+  * Fill the public attribute list via stext:NvSciSyncAttrListSetAttrs()
+  * Reconcile the stext:NvSciSyncAttrList via
+    stext:NvSciSyncAttrListReconcile()
+  * Create a stext:NvSciSyncObj via stext:NvSciSyncObjAlloc()
+  * To import a stext:NvSciSyncObj to a slink:VkSemaphore, create a
+    slink:VkSemaphoreSciSyncPoolNV for the stext:NvSciSyncObj and then
+    select the semaphore from slink:VkSemaphoreSciSyncPoolNV by passing the
+    slink:VkSemaphoreSciSyncCreateInfoNV structure to
+    flink:vkCreateSemaphore
+  * To import a stext:NvSciSyncObj to a slink:VkFence, pass the
+    slink:VkImportFenceSciSyncInfoNV structure to the
+    flink:vkImportFenceSciSyncObjNV command.
+
+To import/export a stext:NvSciSyncFence to a slink:VkFence object, that
+slink:VkFence object must: already have a stext:NvSciSyncObj previously
+imported.
+
+This extension does not support exporting semaphores from stext:NvSciSync
+objects.
+
+For details of the stext:NvSciSync APIs and data structures, see the
+https://developer.nvidia.com/docs/drive/drive-os/latest/linux/sdk/api%5Freference/group%5F%5Fnvsci%5F%5Ftop.html[`NvStreams
+Documentation`].
+
+include::{generated}/interfaces/VK_NV_external_sci_sync2.adoc[]
+
+=== Issues
+
+1) Does this extension extend or replace `apiext:VK_NV_external_sci_sync`?
+
+RESOLVED.
+Replaces - expect to deprecate it and eventually remove it.
+
+2) What part of `apiext:VK_NV_external_sci_sync` is deprecated/removed in
+this extension?
+
+RESOLVED.
+The commands to import and export semaphores from
+`apiext:VK_NV_external_sci_sync` are removed and have been replaced with an
+alternate mechanism to import semaphores.
+Fence import and export functionality is unchanged.
+
+In particular:
+
+  * Removed Commands:
+  ** flink:vkImportSemaphoreSciSyncObjNV
+  ** flink:vkGetSemaphoreSciSyncObjNV
+  * Removed Structures:
+  ** slink:VkImportSemaphoreSciSyncInfoNV
+  ** slink:VkExportSemaphoreSciSyncInfoNV
+  ** slink:VkSemaphoreGetSciSyncInfoNV
+
+3) Application migration guide from `apiext:VK_NV_external_sci_sync` to
+`apiext:VK_NV_external_sci_sync2`
+
+  * In `apiext:VK_NV_external_sci_sync`, to import a stext:NvSciSyncObj to
+    slink:VkSemaphore, applications need to:
+
+  ** Create a slink:VkSemaphore by command flink:vkCreateSemaphore.
+  ** Call flink:vkImportSemaphoreSciSyncObjNV command to import the
+     stext:NvSciSyncObj to slink:VkSemaphore created.
+  ** Call flink:vkDestroySemaphore to destroy the slink:VkSemaphore after
+     all submitted batches that refer to it have completed execution.
+
+  * In order to migrate to `apiext:VK_NV_external_sci_sync2`, applications
+    need to:
+
+ifdef::VKSC_VERSION_1_0[]
+  ** Chain slink:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV to
+     slink:VkDeviceObjectReservationCreateInfo and specify the
+     pname:semaphoreSciSyncPoolRequestCount maximum number of semaphore
+     SciSync pools that will be used simultaneously.
+endif::VKSC_VERSION_1_0[]
+  ** Import the a stext:NvSciSyncObj to a slink:VkSemaphoreSciSyncPoolNV by
+     command flink:vkCreateSemaphoreSciSyncPoolNV.
+  ** Select the slink:VkSemaphore from slink:VkSemaphoreSciSyncPoolNV by
+     passing the slink:VkSemaphoreSciSyncCreateInfoNV structure to
+     flink:vkCreateSemaphore.
+  ** Can call flink:vkDestroySemaphore to destroy the slink:VkSemaphore
+     immediately after all the batches that refer to it are submitted.
+ifndef::VKSC_VERSION_1_0[]
+  ** Call flink:vkDestroySemaphoreSciSyncPoolNV to destroy the semaphore
+     SciSync pool after all submitted batches that refer to it have
+     completed execution.
+endif::VKSC_VERSION_1_0[]
+
+=== Version History
+
+  * Revision 1, 2022-09-07 (Kai Zhang, Daniel Koch)
+  ** Initial revision
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fill_rectangle.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fill_rectangle.adoc
new file mode 100644
index 0000000..65e4340
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fill_rectangle.adoc
@@ -0,0 +1,29 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_fill_rectangle.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-22
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds a new elink:VkPolygonMode code:enum where a triangle is
+rasterized by computing and filling its axis-aligned screen-space bounding
+box, disregarding the actual triangle edges.
+This can be useful for drawing a rectangle without being split into two
+triangles with an internal edge.
+It is also useful to minimize the number of primitives that need to be
+drawn, particularly for a user interface.
+
+include::{generated}/interfaces/VK_NV_fill_rectangle.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-05-22 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_coverage_to_color.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_coverage_to_color.adoc
new file mode 100644
index 0000000..4098b5a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_coverage_to_color.adoc
@@ -0,0 +1,34 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_fragment_coverage_to_color.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-05-21
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows the fragment coverage value, represented as an integer
+bitmask, to be substituted for a color output being written to a
+single-component color attachment with integer components (e.g.
+ename:VK_FORMAT_R8_UINT).
+The functionality provided by this extension is different from simply
+writing the code:SampleMask fragment shader output, in that the coverage
+value written to the framebuffer is taken after stencil test and depth test,
+as well as after fragment operations such as alpha-to-coverage.
+
+This functionality may be useful for deferred rendering algorithms, where
+the second pass needs to know which samples belong to which original
+fragments.
+
+include::{generated}/interfaces/VK_NV_fragment_coverage_to_color.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-05-21 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shader_barycentric.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shader_barycentric.adoc
new file mode 100644
index 0000000..a09082f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shader_barycentric.adoc
@@ -0,0 +1,124 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_fragment_shader_barycentric.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-03
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_fragment_shader_barycentric.html[`SPV_NV_fragment_shader_barycentric`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_fragment_shader_barycentric.txt[`GL_NV_fragment_shader_barycentric`]
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * {spirv}/NV/SPV_NV_fragment_shader_barycentric.html[`SPV_NV_fragment_shader_barycentric`]
+
+The extension provides access to three additional fragment shader variable
+decorations in SPIR-V:
+
+  * code:PerVertexNV, which indicates that a fragment shader input will not
+    have interpolated values, but instead must be accessed with an extra
+    array index that identifies one of the vertices of the primitive
+    producing the fragment
+  * code:BaryCoordNV, which indicates that the variable is a three-component
+    floating-point vector holding barycentric weights for the fragment
+    produced using perspective interpolation
+  * code:BaryCoordNoPerspNV, which indicates that the variable is a
+    three-component floating-point vector holding barycentric weights for
+    the fragment produced using linear interpolation
+
+When using GLSL source-based shader languages, the following variables from
+`GL_NV_fragment_shader_barycentric` maps to these SPIR-V built-in
+decorations:
+
+  * `in vec3 gl_BaryCoordNV;` -> code:BaryCoordNV
+  * `in vec3 gl_BaryCoordNoPerspNV;` -> code:BaryCoordNoPerspNV
+
+GLSL variables declared using the code:__pervertexNV GLSL qualifier are
+expected to be decorated with code:PerVertexNV in SPIR-V.
+
+=== Promotion to `VK_KHR_fragment_shader_barycentric`
+
+All functionality in this extension is included in
+`apiext:VK_KHR_fragment_shader_barycentric`, with the suffix changed to KHR.
+
+include::{generated}/interfaces/VK_NV_fragment_shader_barycentric.adoc[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-barycoordkhr,code:BaryCoordNV>>
+  * <<interfaces-builtin-variables-barycoordnoperspkhr,code:BaryCoordNoPerspNV>>
+
+=== New SPIR-V Decorations
+
+  * <<shaders-interpolation-decorations-pervertexkhr,code:PerVertexNV>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentBarycentricKHR,
+    code:FragmentBarycentricNV>>
+
+=== Issues
+
+(1) The AMD_shader_explicit_vertex_parameter extension provides similar
+    functionality.
+    Why write a new extension, and how is this extension different?
+
+*RESOLVED*: For the purposes of Vulkan/SPIR-V, we chose to implement a
+separate extension due to several functional differences.
+
+First, the hardware supporting this extension can provide a three-component
+barycentric weight vector for variables decorated with code:BaryCoordNV,
+while variables decorated with code:BaryCoordSmoothAMD provide only two
+components.
+In some cases, it may be more efficient to explicitly interpolate an
+attribute via:
+
+        float value = (baryCoordNV.x * v[0].attrib +
+                       baryCoordNV.y * v[1].attrib +
+                       baryCoordNV.z * v[2].attrib);
+
+instead of
+
+       float value = (baryCoordSmoothAMD.x * (v[0].attrib - v[2].attrib) +
+                      baryCoordSmoothAMD.y * (v[1].attrib - v[2].attrib) +
+                      v[2].attrib);
+
+Additionally, the semantics of the decoration code:BaryCoordPullModelAMD do
+not appear to map to anything supported by the initial hardware
+implementation of this extension.
+
+This extension provides a smaller number of decorations than the AMD
+extension, as we expect that shaders could derive variables decorated with
+things like code:BaryCoordNoPerspCentroidAMD with explicit attribute
+interpolation instructions.
+One other relevant difference is that explicit per-vertex attribute access
+using this extension does not require a constant vertex number.
+
+(2) Why do the built-in SPIR-V decorations for this extension include two
+separate built-ins code:BaryCoordNV and code:BaryCoordNoPerspNV when a "`no
+perspective`" variable could be decorated with code:BaryCoordNV and
+code:NoPerspective?
+
+*RESOLVED*: The SPIR-V extension for this feature chose to mirror the
+behavior of the GLSL extension, which provides two built-in variables.
+Additionally, it is not clear that its a good idea (or even legal) to have
+two variables using the "`same attribute`", but with different interpolation
+modifiers.
+
+=== Version History
+
+  * Revision 1, 2018-08-03 (Pat Brown)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shading_rate_enums.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shading_rate_enums.adoc
new file mode 100644
index 0000000..4705c6a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_fragment_shading_rate_enums.adoc
@@ -0,0 +1,100 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_fragment_shading_rate_enums.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-09-02
+
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension builds on the fragment shading rate functionality provided by
+the VK_KHR_fragment_shading_rate extension, adding support for
+"`supersample`" fragment shading rates that trigger multiple fragment shader
+invocations per pixel as well as a "`no invocations`" shading rate that
+discards any portions of a primitive that would use that shading rate.
+
+include::{generated}/interfaces/VK_NV_fragment_shading_rate_enums.adoc[]
+
+=== Issues
+
+. Why was this extension created?   How should it be named?
++
+--
+*RESOLVED*: The primary goal of this extension was to expose support for
+supersample and "`no invocations`" shading rates, which are supported by the
+VK_NV_shading_rate_image extension but not by VK_KHR_fragment_shading_rate.
+Because VK_KHR_fragment_shading_rate specifies the primitive shading rate
+using a fragment size in pixels, it lacks a good way to specify supersample
+rates.
+To deal with this, we defined enums covering shading rates supported by the
+KHR extension as well as the new shading rates and added structures and APIs
+accepting shading rate enums instead of fragment sizes.
+
+Since this extension adds two different types of shading rates, both
+expressed using enums, we chose the extension name
+VK_NV_fragment_shading_rate_enums.
+--
+
+. Is this a standalone extension?
++
+--
+*RESOLVED*: No, this extension requires VK_KHR_fragment_shading_rate.
+In order to use the features of this extension, applications must enable the
+relevant features of KHR extension.
+--
+
+. How are the shading rate enums used, and how were the enum values assigned?
++
+--
+*RESOLVED*: The shading rates supported by the enums in this extension are
+accepted as pipeline, primitive, and attachment shading rates and behave
+identically.
+For the shading rates also supported by the KHR extension, the values
+assigned to the corresponding enums are identical to the values already used
+for the primitive and attachment shading rates in the KHR extension.
+For those enums, bits 0 and 1 specify the base two logarithm of the fragment
+height and bits 2 and 3 specify the base two logarithm of the fragment
+width.
+For the new shading rates added by this extension, we chose to use 11
+through 14 (10 plus the base two logarithm of the invocation count) for the
+supersample rates and 15 for the "`no invocations`" rate.
+None of those values are supported as primitive or attachment shading rates
+by the KHR extension.
+--
+
+. Between this extension, VK_KHR_fragment_shading_rate, and
+VK_NV_shading_rate_image, there are three different ways to specify shading
+rate state in a pipeline.
+How should we handle this?
++
+--
+*RESOLVED*: We do not allow the concurrent use of VK_NV_shading_rate_image
+and VK_KHR_fragment_shading_rate; it is an error to enable shading rate
+features from both extensions.
+But we do allow applications to enable this extension together with
+VK_KHR_fragment_shading_rate together.
+While we expect that applications will never attach pipeline CreateInfo
+structures for both this extension and the KHR extension concurrently,
+Vulkan does not have any precedent forbidding such behavior and instead
+typically treats a pipeline created without an extension-specific CreateInfo
+structure as equivalent to one containing default values specified by the
+extension.
+Rather than adding such a rule considering the presence or absence of our
+new CreateInfo structure, we instead included a pname:shadingRateType member
+to slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV that selects
+between using state specified by that structure and state specified by
+slink:VkPipelineFragmentShadingRateStateCreateInfoKHR.
+--
+
+=== Version History
+
+  * Revision 1, 2020-09-02 (pbrown)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_framebuffer_mixed_samples.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_framebuffer_mixed_samples.adoc
new file mode 100644
index 0000000..aedffcd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_framebuffer_mixed_samples.adoc
@@ -0,0 +1,61 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_framebuffer_mixed_samples.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-06-04
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension allows multisample rendering with a raster and depth/stencil
+sample count that is larger than the color sample count.
+Rasterization and the results of the depth and stencil tests together
+determine the portion of a pixel that is "`covered`".
+It can be useful to evaluate coverage at a higher frequency than color
+samples are stored.
+This coverage is then "`reduced`" to a collection of covered color samples,
+each having an opacity value corresponding to the fraction of the color
+sample covered.
+The opacity can optionally be blended into individual color samples.
+
+Rendering with fewer color samples than depth/stencil samples greatly
+reduces the amount of memory and bandwidth consumed by the color buffer.
+However, converting the coverage values into opacity introduces artifacts
+where triangles share edges and may: not be suitable for normal triangle
+mesh rendering.
+
+One expected use case for this functionality is Stencil-then-Cover path
+rendering (similar to the OpenGL GL_NV_path_rendering extension).
+The stencil step determines the coverage (in the stencil buffer) for an
+entire path at the higher sample frequency, and then the cover step draws
+the path into the lower frequency color buffer using the coverage
+information to antialias path edges.
+With this two-step process, internal edges are fully covered when
+antialiasing is applied and there is no corruption on these edges.
+
+The key features of this extension are:
+
+  * It allows render pass and framebuffer objects to be created where the
+    number of samples in the depth/stencil attachment in a subpass is a
+    multiple of the number of samples in the color attachments in the
+    subpass.
+  * A coverage reduction step is added to Fragment Operations which converts
+    a set of covered raster/depth/stencil samples to a set of color samples
+    that perform blending and color writes.
+    The coverage reduction step also includes an optional coverage
+    modulation step, multiplying color values by a fractional opacity
+    corresponding to the number of associated raster/depth/stencil samples
+    covered.
+
+include::{generated}/interfaces/VK_NV_framebuffer_mixed_samples.adoc[]
+
+=== Version History
+
+  * Revision 1, 2017-06-04 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_geometry_shader_passthrough.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_geometry_shader_passthrough.adoc
new file mode 100644
index 0000000..3178001
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_geometry_shader_passthrough.adoc
@@ -0,0 +1,169 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_geometry_shader_passthrough.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-15
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_geometry_shader_passthrough.html[`SPV_NV_geometry_shader_passthrough`]
+  - This extension provides API support for
+    {GLregistry}/NV/NV_geometry_shader_passthrough.txt[`GL_NV_geometry_shader_passthrough`]
+  - This extension requires the pname:geometryShader feature.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_NV_geometry_shader_passthrough`
+
+Geometry shaders provide the ability for applications to process each
+primitive sent through the graphics pipeline using a programmable shader.
+However, one common use case treats them largely as a "`passthrough`".
+In this use case, the bulk of the geometry shader code simply copies inputs
+from each vertex of the input primitive to corresponding outputs in the
+vertices of the output primitive.
+Such shaders might also compute values for additional built-in or
+user-defined per-primitive attributes (e.g., code:Layer) to be assigned to
+all the vertices of the output primitive.
+
+This extension provides access to the code:PassthroughNV decoration under
+the code:GeometryShaderPassthroughNV capability.
+Adding this to a geometry shader input variable specifies that the values of
+this input are copied to the corresponding vertex of the output primitive.
+
+When using GLSL source-based shading languages, the code:passthrough layout
+qualifier from `GL_NV_geometry_shader_passthrough` maps to the
+code:PassthroughNV decoration.
+To use the code:passthrough layout, in GLSL the
+`GL_NV_geometry_shader_passthrough` extension must be enabled.
+Behaviour is described in the `GL_NV_geometry_shader_passthrough` extension
+specification.
+
+include::{generated}/interfaces/VK_NV_geometry_shader_passthrough.adoc[]
+
+=== New Variable Decoration
+
+  * <<geometry-passthrough-passthrough,code:PassthroughNV>> in
+    <<geometry-passthrough,Geometry Shader Passthrough>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-GeometryShaderPassthroughNV,
+    code:GeometryShaderPassthroughNV>>
+
+=== Issues
+
+1) Should we require or allow a passthrough geometry shader to specify the
+output layout qualifiers for the output primitive type and maximum vertex
+count in the SPIR-V?
+
+*RESOLVED*: Yes they should be required in the SPIR-V.
+Per GL_NV_geometry_shader_passthrough they are not permitted in the GLSL
+source shader, but SPIR-V is lower-level.
+It is straightforward for the GLSL compiler to infer them from the input
+primitive type and to explicitly emit them in the SPIR-V according to the
+following table.
+
+[options="header"]
+|====
+| Input Layout     | Implied Output Layout
+| points           | `layout(points, max_vertices=1)`
+| lines            | `layout(line_strip, max_vertices=2)`
+| triangles        | `layout(triangle_strip, max_vertices=3)`
+|====
+
+2) How does interface matching work with passthrough geometry shaders?
+
+*RESOLVED*: This is described in <<geometry-passthrough-interface,
+Passthrough Interface Matching>>.
+In GL when using passthough geometry shaders in separable mode, all inputs
+must also be explicitly assigned location layout qualifiers.
+In Vulkan all SPIR-V shader inputs (except built-ins) must also have
+location decorations specified.
+Redeclarations of built-in variables that add the passthrough layout
+qualifier are exempted from the rule requiring location assignment because
+built-in variables do not have locations and are matched by code:BuiltIn
+decoration.
+
+
+=== Sample Code
+
+Consider the following simple geometry shader in unextended GLSL:
+
+[source,c]
+----
+layout(triangles) in;
+layout(triangle_strip) out;
+layout(max_vertices=3) out;
+
+in Inputs {
+    vec2 texcoord;
+    vec4 baseColor;
+} v_in[];
+out Outputs {
+    vec2 texcoord;
+    vec4 baseColor;
+};
+
+void main()
+{
+    int layer = compute_layer();
+    for (int i = 0; i < 3; i++) {
+        gl_Position = gl_in[i].gl_Position;
+        texcoord = v_in[i].texcoord;
+        baseColor = v_in[i].baseColor;
+        gl_Layer = layer;
+        EmitVertex();
+    }
+}
+----
+
+In this shader, the inputs code:gl_Position, code:Inputs.texcoord, and
+code:Inputs.baseColor are simply copied from the input vertex to the
+corresponding output vertex.
+The only "`interesting`" work done by the geometry shader is computing and
+emitting a code:gl_Layer value for the primitive.
+
+The following geometry shader, using this extension, is equivalent:
+
+[source,c]
+----
+#extension GL_NV_geometry_shader_passthrough : require
+
+layout(triangles) in;
+// No output primitive layout qualifiers required.
+
+// Redeclare gl_PerVertex to pass through "gl_Position".
+layout(passthrough) in gl_PerVertex {
+    vec4 gl_Position;
+} gl_in[];
+
+// Declare "Inputs" with "passthrough" to automatically copy members.
+layout(passthrough) in Inputs {
+    vec2 texcoord;
+    vec4 baseColor;
+} v_in[];
+
+// No output block declaration required.
+
+void main()
+{
+    // The shader simply computes and writes gl_Layer.  We do not
+    // loop over three vertices or call EmitVertex().
+    gl_Layer = compute_layer();
+}
+----
+
+
+=== Version History
+
+  * Revision 1, 2017-02-15 (Daniel Koch)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_glsl_shader.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_glsl_shader.adoc
new file mode 100644
index 0000000..f9e3294
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_glsl_shader.adoc
@@ -0,0 +1,62 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_glsl_shader.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-02-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+
+=== Description
+
+This extension allows GLSL shaders written to the `GL_KHR_vulkan_glsl`
+extension specification to be used instead of SPIR-V.
+The implementation will automatically detect whether the shader is SPIR-V or
+GLSL, and compile it appropriately.
+
+=== Deprecation
+
+Functionality in this extension is outside of the scope of Vulkan and is
+better served by a compiler library such as
+https://github.com/KhronosGroup/glslang[glslang].
+No new implementations will support this extension, so applications should:
+not use it.
+
+include::{generated}/interfaces/VK_NV_glsl_shader.adoc[]
+
+=== Examples
+
+*Example 1*
+
+Passing in GLSL code
+
+[source,c++]
+----
+    char const vss[] =
+        "#version 450 core\n"
+        "layout(location = 0) in vec2 aVertex;\n"
+        "layout(location = 1) in vec4 aColor;\n"
+        "out vec4 vColor;\n"
+        "void main()\n"
+        "{\n"
+        "    vColor = aColor;\n"
+        "    gl_Position = vec4(aVertex, 0, 1);\n"
+        "}\n"
+    ;
+    VkShaderModuleCreateInfo vertexShaderInfo = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO };
+    vertexShaderInfo.codeSize = sizeof vss;
+    vertexShaderInfo.pCode = vss;
+    VkShaderModule vertexShader;
+    vkCreateShaderModule(device, &vertexShaderInfo, 0, &vertexShader);
+----
+
+=== Version History
+
+  * Revision 1, 2016-02-14 (Piers Daniell)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_inherited_viewport_scissor.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_inherited_viewport_scissor.adoc
new file mode 100644
index 0000000..710a680
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_inherited_viewport_scissor.adoc
@@ -0,0 +1,90 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_inherited_viewport_scissor.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-02-04
+*Contributors*::
+  - David Zhao Akeley, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Christoph Kubisch, NVIDIA
+
+=== Description
+
+This extension adds the ability for a secondary command buffer to inherit
+the dynamic viewport and scissor state from a primary command buffer, or a
+previous secondary command buffer executed within the same
+flink:vkCmdExecuteCommands call.
+It addresses a frequent scenario in applications that deal with window
+resizing and want to improve utilization of re-usable secondary command
+buffers.
+The functionality is provided through
+slink:VkCommandBufferInheritanceViewportScissorInfoNV.
+Viewport inheritance is effectively limited to the 2D rectangle; secondary
+command buffers must re-specify the inherited depth range values.
+
+include::{generated}/interfaces/VK_NV_inherited_viewport_scissor.adoc[]
+
+=== Issues
+
+(1) Why are viewport depth values configured in the
+slink:VkCommandBufferInheritanceViewportScissorInfoNV struct, rather than by
+a `vkCmd...` function?
+--
+*DISCUSSION*:
+
+We considered both adding a new ftext:vkCmdSetViewportDepthNV function, and
+modifying flink:vkCmdSetViewport to ignore the pname:x, pname:y,
+pname:width, and pname:height values when called with a secondary command
+buffer that activates this extension.
+
+The primary design considerations for this extension are debuggability and
+easy integration into existing applications.
+The main issue with adding a new ftext:vkCmdSetViewportDepthNV function is
+reducing ease-of-integration.
+A new function pointer will have to be loaded, but more importantly, a new
+function would require changes to be supported in graphics debuggers; this
+would delay widespread adoption of the extension.
+
+The proposal to modify flink:vkCmdSetViewport would avoid these issues.
+However, we expect that the intent of applications using this extension is
+to have the viewport values used for drawing exactly match the inherited
+values; thus, it would be better for debuggability if no function for
+modifying the viewport depth alone is provided.
+By specifying viewport depth values when starting secondary command buffer
+recording, and requiring the specified depth values to match the inherited
+depth values, we allow for validation layers that flag depth changes as
+errors.
+
+This design also better matches the hardware model.
+In fact, there is no need to re-execute a depth-setting command.
+The graphics device retains the viewport depth state; it is the CPU-side
+state of slink:VkCommandBuffer that must be re-initialized.
+--
+
+(2) Why are viewport depth values specified as a partial slink:VkViewport
+struct, rather than a leaner depth-only struct?
+--
+*DISCUSSION*:
+
+We considered adding a new stext:VkViewportDepthNV struct containing only
+ptext:minDepth and ptext:maxDepth.
+However, as application developers would need to maintain both a
+`VK_NV_inherited_viewport_scissor` code path and a fallback code path (at
+least in the short term), we ultimately chose to continue using the existing
+slink:VkViewport structure.
+Doing so would allow application developers to reuse the same
+slink:VkViewport array for both code paths, rather than constructing
+separate stext:VkViewportDepthNV and slink:VkViewport arrays for each code
+path.
+--
+
+=== Version History
+
+  * Revision 1, 2020-02-04 (David Zhao Akeley)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_linear_color_attachment.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_linear_color_attachment.adoc
new file mode 100644
index 0000000..95d77df
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_linear_color_attachment.adoc
@@ -0,0 +1,43 @@
+// Copyright (c) 2021 NVIDIA Corporation.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_linear_color_attachment.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-12-02
+*Interactions and External Dependencies*::
+  - This extension requires `apiext:VK_KHR_format_feature_flags2`
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Sourav Parmar, NVIDIA
+
+=== Description
+
+This extension expands support for using ename:VK_IMAGE_TILING_LINEAR images
+as color attachments when all the color attachments in the render pass
+instance have ename:VK_IMAGE_TILING_LINEAR tiling.
+This extension adds a new flag bit
+ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV that extends the
+existing elink:VkFormatFeatureFlagBits2KHR bits.
+This flag can: be set for renderable color formats in the
+slink:VkFormatProperties3KHR::pname:linearTilingFeatures format properties
+structure member.
+Formats with the ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+flag may: be used as color attachments as long as all the color attachments
+in the render pass instance have ename:VK_IMAGE_TILING_LINEAR tiling, and
+the formats their images views are created with have
+slink:VkFormatProperties3KHR::pname:linearTilingFeatures which include
+ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV.
+This extension supports both dynamic rendering and traditional render
+passes.
+
+include::{generated}/interfaces/VK_NV_linear_color_attachment.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-11-29 (sourav parmar)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency.adoc
new file mode 100644
index 0000000..30b1016
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency.adoc
@@ -0,0 +1,33 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_low_latency.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-02-10
+*Contributors*::
+  - Charles Hansen, NVIDIA
+
+=== Description
+
+This extension adds the slink:VkQueryLowLatencySupportNV structure, a
+structure used to query support for NVIDIA Reflex.
+
+include::{generated}/interfaces/VK_NV_low_latency.adoc[]
+
+=== Issues
+
+1) Why does sname:VkQueryLowLatencySupportNV have output parameters in an
+input chain?
+
+*RESOLVED*: We are stuck with this for legacy reasons - we are aware this is
+bad behavior and this should not be used as a precedent for future
+extensions.
+
+=== Version History
+
+  * Revision 1, 2023-02-10 (Charles Hansen)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency2.adoc
new file mode 100644
index 0000000..3461b36
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_low_latency2.adoc
@@ -0,0 +1,44 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_low_latency2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-09-25
+*Contributors*::
+  - Charles Hansen, NVIDIA
+  - Liam Middlebrook, NVIDIA
+  - Lionel Duc, NVIDIA
+  - James Jones, NVIDIA
+  - Eric Sullivan, NVIDIA
+
+include::{generated}/interfaces/VK_NV_low_latency2.adoc[]
+
+=== Description
+
+This extension gives applications timing suggestions on when to start the
+recording of new frames to reduce the latency between input sampling and
+frame presentation.
+Applications can accomplish this through the extension by calling
+flink:vkSetLatencySleepModeNV to allow the driver to pace a given swapchain,
+then calling flink:vkLatencySleepNV before input sampling to delay the start
+of the CPU side work.
+Additional methods and structures are provided to give insight into the
+latency pipeline of an application through the latency markers.
+`apiext:VK_NV_low_latency` provides legacy support for applications that
+make use of the NVIDIA Reflex SDK whereas new implementations should use the
+`apiext:VK_NV_low_latency2` extension.
+
+=== Issues
+
+1) How does Low Latency 2 work with applications that utilize device groups?
+
+Low Latency 2 does not support device groups.
+
+=== Version History
+
+  * Revision 1, 2023-09-25 (Charles Hansen)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_memory_decompression.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_memory_decompression.adoc
new file mode 100644
index 0000000..bfa7a69
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_memory_decompression.adoc
@@ -0,0 +1,27 @@
+// Copyright (c) 2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_memory_decompression.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-01-31
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Piers Daniell, NVIDIA
+
+
+=== Description
+
+This extension adds support for performing memory to memory decompression.
+
+include::{generated}/interfaces/VK_NV_memory_decompression.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-01-31 (Vikram Kushwaha)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_mesh_shader.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_mesh_shader.adoc
new file mode 100644
index 0000000..e5d1849
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_mesh_shader.adoc
@@ -0,0 +1,148 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_mesh_shader.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-19
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_mesh_shader.txt[`GLSL_NV_mesh_shader`]
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Pierre Boudier, NVIDIA
+
+=== Description
+
+This extension provides a new mechanism allowing applications to generate
+collections of geometric primitives via programmable mesh shading.
+It is an alternative to the existing programmable primitive shading
+pipeline, which relied on generating input primitives by a fixed function
+assembler as well as fixed function vertex fetch.
+
+There are new programmable shader types -- the task and mesh shader -- to
+generate these collections to be processed by fixed-function primitive
+assembly and rasterization logic.
+When task and mesh shaders are dispatched, they replace the core
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization stages>>,
+including vertex array attribute fetching, vertex shader processing,
+tessellation, and geometry shader processing.
+
+This extension also adds support for the following SPIR-V extension in
+Vulkan:
+
+  * {spirv}/NV/SPV_NV_mesh_shader.html[`SPV_NV_mesh_shader`]
+
+include::{generated}/interfaces/VK_NV_mesh_shader.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-taskcount,TaskCountNV>>
+  * <<interfaces-builtin-variables-primitivecount,PrimitiveCountNV>>
+  * <<interfaces-builtin-variables-primitiveindices,PrimitiveIndicesNV>>
+  * <<interfaces-builtin-variables-clipdistancepv,ClipDistancePerViewNV>>
+  * <<interfaces-builtin-variables-culldistancepv,CullDistancePerViewNV>>
+  * <<interfaces-builtin-variables-layerpv,LayerPerViewNV>>
+  * <<interfaces-builtin-variables-meshviewcount,MeshViewCountNV>>
+  * <<interfaces-builtin-variables-meshviewindices,MeshViewIndicesNV>>
+  * (modified)code:Position
+  * (modified)code:PointSize
+  * (modified)code:ClipDistance
+  * (modified)code:CullDistance
+  * (modified)code:PrimitiveId
+  * (modified)code:Layer
+  * (modified)code:ViewportIndex
+  * (modified)code:WorkgroupSize
+  * (modified)code:WorkgroupId
+  * (modified)code:LocalInvocationId
+  * (modified)code:GlobalInvocationId
+  * (modified)code:LocalInvocationIndex
+  * (modified)code:DrawIndex
+  * (modified)code:ViewportMaskNV
+  * (modified)code:PositionPerViewNV
+  * (modified)code:ViewportMaskPerViewNV
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-MeshShadingNV, code:MeshShadingNV>>
+
+=== Issues
+
+. How to name this extension?
++
+--
+*RESOLVED*: VK_NV_mesh_shader
+
+Other options considered:
+
+  * VK_NV_mesh_shading
+  * VK_NV_programmable_mesh_shading
+  * VK_NV_primitive_group_shading
+  * VK_NV_grouped_drawing
+--
+
+. Do we need a new VkPrimitiveTopology?
++
+--
+*RESOLVED*: No.
+We skip the InputAssembler stage.
+--
+
+. Should we allow Instancing?
++
+--
+*RESOLVED*: No.
+There is no fixed function input, other than the IDs.
+However, allow offsetting with a "`first`" value.
+--
+
+. Should we use existing vkCmdDraw or introduce new functions?
++
+--
+*RESOLVED*: Introduce new functions.
+
+New functions make it easier to separate from "`programmable primitive
+shading`" chapter, less "`dual use`" language about existing functions
+having alternative behavior.
+The text around the existing "`draws`" is heavily based around emitting
+vertices.
+--
+
+. If new functions, how to name?
++
+--
+*RESOLVED*: CmdDrawMeshTasks*
+
+Other options considered:
+
+  * CmdDrawMeshed
+  * CmdDrawTasked
+  * CmdDrawGrouped
+--
+
+. Should VK_SHADER_STAGE_ALL_GRAPHICS be updated to include the new stages?
++
+--
+*RESOLVED*: No.
+If an application were to be recompiled with headers that include additional
+shader stage bits in VK_SHADER_STAGE_ALL_GRAPHICS, then the previously valid
+application would no longer be valid on implementations that do not support
+mesh or task shaders.
+This means the change would not be backwards compatible.
+It is too bad VkShaderStageFlagBits does not have a dedicated "`all
+supported graphics stages`" bit like VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+which would have avoided this problem.
+--
+
+=== Version History
+
+  * Revision 1, 2018-07-19 (Christoph Kubisch, Daniel Koch)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_optical_flow.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_optical_flow.adoc
new file mode 100644
index 0000000..5e89a79
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_optical_flow.adoc
@@ -0,0 +1,116 @@
+// Copyright (c) 2018-2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_optical_flow.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-09-26
+*Contributors*::
+  - Carsten Rohde, NVIDIA
+  - Vipul Parashar, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+
+=== Description
+
+Optical flow are fundamental algorithms in computer vision (CV) area.
+This extension allows applications to estimate 2D displacement of pixels
+between two frames.
+
+[NOTE]
+.Note
+====
+This extension is designed to be used with upcoming NVIDIA Optical Flow SDK
+Version 5 which will be available on NVIDIA Developer webpage.
+====
+
+include::{generated}/interfaces/VK_NV_optical_flow.adoc[]
+
+=== Examples
+
+[source,cpp]
+----
+// Example querying available input formats
+VkOpticalFlowImageFormatInfoNV ofFormatInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV };
+ofFormatInfo.usage = VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV;
+
+uint32_t count = 0;
+vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, NULL);
+VkOpticalFlowImageFormatPropertiesNV* fmt = new VkOpticalFlowImageFormatPropertiesNV[count];
+memset(fmt, 0, count  * sizeof(VkOpticalFlowImageFormatPropertiesNV));
+for (uint32_t i = 0; i < count; i++) {
+    fmt[i].sType = VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV;
+}
+vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, fmt);
+
+// Pick one of the available formats
+VkFormat inputFormat = fmt[0].format;
+
+// Check feature support for optimal tiling
+VkFormatProperties3 formatProperties3 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 };
+VkFormatProperties2 formatProperties2 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, &formatProperties3 };
+vkGetPhysicalDeviceFormatProperties2(physicalDevice, inputFormat, &formatProperties2);
+if (!(formatProperties3.optimalTilingFeatures & VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV)) {
+    return false;
+}
+
+// Check support for image creation parameters
+VkPhysicalDeviceImageFormatInfo2 imageFormatInfo2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, &ofFormatInfo };
+imageFormatInfo2.format = inputFormat;
+imageFormatInfo2.type = VK_IMAGE_TYPE_2D;
+imageFormatInfo2.tiling = VK_IMAGE_TILING_OPTIMAL;
+imageFormatInfo2.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+
+VkImageFormatProperties2 imageFormatProperties2 = { VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 };
+if (vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &imageFormatInfo2, &imageFormatProperties2) != VK_SUCCESS) {
+    return false;
+}
+
+VkImageCreateInfo imageCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, &ofFormatInfo };
+imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
+imageCreateInfo.format = inputFormat;
+imageCreateInfo.extent = { width, height, (uint32_t)1};
+imageCreateInfo.mipLevels = 1;
+imageCreateInfo.arrayLayers = 1;
+imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;;
+imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+
+vkCreateImage(device, &imageCreateInfo, NULL, &input);
+"allocate memory, bind image, create view"
+
+"do the same for reference and output"
+
+// Create optical flow session
+VkOpticalFlowSessionCreateInfoNV sessionCreateInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV };
+sessionCreateInfo.width = width;
+sessionCreateInfo.height = height;
+sessionCreateInfo.imageFormat = inputFormat;
+sessionCreateInfo.flowVectorFormat = outputFormat;
+sessionCreateInfo.outputGridSize = VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV;
+sessionCreateInfo.performanceLevel = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV;
+VkOpticalFlowSessionNV session;
+vkCreateOpticalFlowSessionNV(device, &sessionCreateInfo, NULL, &session);
+
+"allocate command buffer"
+
+"transfer images to VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"
+"transfer input images to VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV and output image to VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV"
+
+vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, inputView, VK_IMAGE_LAYOUT_GENERAL);
+vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, refView, VK_IMAGE_LAYOUT_GENERAL);
+vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, outputView, VK_IMAGE_LAYOUT_GENERAL);
+
+VkOpticalFlowExecuteInfoNV opticalFlowExecuteInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV };
+vkCmdOpticalFlowExecuteNV(cmd, session, &opticalFlowExecuteInfo);
+
+"submit command buffer"
+----
+
+=== Version History
+
+  * Revision 1, 2022-09-26 (Carsten Rohde)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_present_barrier.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_present_barrier.adoc
new file mode 100644
index 0000000..1b98346
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_present_barrier.adoc
@@ -0,0 +1,50 @@
+// Copyright (c) 2018-2022 NVIDIA Corporation.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_present_barrier.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-05-16
+*Contributors*::
+  - Liya Li, Nvidia
+  - Martin Schwarzer, Nvidia
+  - Andy Wolf, Nvidia
+  - Ian Williams, Nvidia
+  - Ben Morris, Nvidia
+  - James Jones, Nvidia
+  - Jeff Juliano, Nvidia
+
+=== Description
+
+This extension adds support for synchronizing corresponding presentation
+requests across multiple swapchains using the _present barrier_.
+
+include::{generated}/interfaces/VK_NV_present_barrier.adoc[]
+
+=== Issues
+1) Is there a query interface to check if a swapchain is using the present
+barrier?
+
+*RESOLVED*.
+There is no such query interface.
+When creating a swapchain, an application can specify to use the _present
+barrier_, and if the swapchain is created successfully, this swapchain will
+be using the present barrier.
+
+2) Do we need an extra interface to set up the present barrier across
+distributed systems?
+
+*RESOLVED*.
+If the required hardware is presented in the system, and all settings for
+the physical synchronization with other systems are set up, an
+implementation manages the configuration automatically when creating a
+swapchain, without any extra calls from the application.
+
+=== Version History
+
+  * Revision 1, 2022-07-20
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_private_vendor_info.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_private_vendor_info.adoc
new file mode 100644
index 0000000..8d8e4d5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_private_vendor_info.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_private_vendor_info.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-08-10
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jonathan McCaffrey, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+This extension provides the application with access to vendor-specific enums
+and structures that are not expected to be publicly documented.
+
+include::{generated}/interfaces/VK_NV_private_vendor_info.adoc[]
+
+=== Issues
+
+1) What should we call this extension?
+
+RESOLVED.
+`apiext:VK_NV_private_vendor_info` as this contains details of NVIDIA's
+implementation that we do not expect to publicly document.
+
+=== Version History
+
+  * Revision 1, 2022-05-03 (Daniel Koch)
+  ** Internal revisions
+  * Revision 2, 2022-08-10 (Daniel Koch)
+  ** change number for extension (373 to 52) to avoid conflict
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing.adoc
new file mode 100644
index 0000000..38e35bf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing.adoc
@@ -0,0 +1,118 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_ray_tracing.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-20
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_ray_tracing.html[`SPV_NV_ray_tracing`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_ray_tracing.txt[`GL_NV_ray_tracing`]
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Ashwin Lele, NVIDIA
+  - Robert Stepinski, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Martin Stich, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Joshua Barczak, Intel
+  - Tobias Hector, AMD
+  - Henrik Rydgard, NVIDIA
+  - Pascal Gautron, NVIDIA
+
+=== Description
+
+Rasterization has been the dominant method to produce interactive graphics,
+but increasing performance of graphics hardware has made ray tracing a
+viable option for interactive rendering.
+Being able to integrate ray tracing with traditional rasterization makes it
+easier for applications to incrementally add ray traced effects to existing
+applications or to do hybrid approaches with rasterization for primary
+visibility and ray tracing for secondary queries.
+
+To enable ray tracing, this extension adds a few different categories of new
+functionality:
+
+  * Acceleration structure objects and build commands
+  * A new pipeline type with new shader domains
+  * An indirection table to link shader groups with acceleration structure
+    items
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_NV_ray_tracing`
+
+include::{generated}/interfaces/VK_NV_ray_tracing.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-launchid,code:LaunchIdNV>>
+  * <<interfaces-builtin-variables-launchsize,code:LaunchSizeNV>>
+  * <<interfaces-builtin-variables-worldrayorigin,code:WorldRayOriginNV>>
+  * <<interfaces-builtin-variables-worldraydirection,code:WorldRayDirectionNV>>
+  * <<interfaces-builtin-variables-objectrayorigin,code:ObjectRayOriginNV>>
+  * <<interfaces-builtin-variables-objectraydirection,code:ObjectRayDirectionNV>>
+  * <<interfaces-builtin-variables-raytmin,code:RayTminNV>>
+  * <<interfaces-builtin-variables-raytmax,code:RayTmaxNV>>
+  * <<interfaces-builtin-variables-instancecustomindex,code:InstanceCustomIndexNV>>
+  * <<interfaces-builtin-variables-instanceid,code:InstanceId>>
+  * <<interfaces-builtin-variables-objecttoworld,code:ObjectToWorldNV>>
+  * <<interfaces-builtin-variables-worldtoobject,code:WorldToObjectNV>>
+  * <<interfaces-builtin-variables-hitt,code:HitTNV>>
+  * <<interfaces-builtin-variables-hitkind,code:HitKindNV>>
+  * <<interfaces-builtin-variables-incomingrayflags,code:IncomingRayFlagsNV>>
+  * (modified)code:PrimitiveId
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayTracingNV, code:RayTracingNV>>
+
+=== Issues
+
+1) Are there issues?
+
+*RESOLVED*: Yes.
+
+=== Sample Code
+
+Example ray generation GLSL shader
+
+[source,c]
+----
+#version 450 core
+#extension GL_NV_ray_tracing : require
+layout(set = 0, binding = 0, rgba8) uniform image2D image;
+layout(set = 0, binding = 1) uniform accelerationStructureNV as;
+layout(location = 0) rayPayloadNV float payload;
+
+void main()
+{
+   vec4 col = vec4(0, 0, 0, 1);
+
+   vec3 origin = vec3(float(gl_LaunchIDNV.x)/float(gl_LaunchSizeNV.x), float(gl_LaunchIDNV.y)/float(gl_LaunchSizeNV.y), 1.0);
+   vec3 dir = vec3(0.0, 0.0, -1.0);
+
+   traceNV(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0);
+
+   col.y = payload;
+
+   imageStore(image, ivec2(gl_LaunchIDNV.xy), col);
+}
+----
+
+=== Version History
+
+  * Revision 1, 2018-09-11 (Robert Stepinski, Nuno Subtil, Eric Werness)
+  ** Internal revisions
+  * Revision 2, 2018-10-19 (Eric Werness)
+  ** rename to VK_NV_ray_tracing, add support for callables.
+  ** too many updates to list
+  * Revision 3, 2018-11-20 (Daniel Koch)
+  ** update to use InstanceId instead of InstanceIndex as implemented.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_invocation_reorder.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_invocation_reorder.adoc
new file mode 100644
index 0000000..3689b68
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_invocation_reorder.adoc
@@ -0,0 +1,182 @@
+// Copyright (c) 2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_ray_tracing_invocation_reorder.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-02
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_shader_invocation_reorder.html[`SPV_NV_shader_invocation_reorder`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_shader_invocation_reorder.txt[`GL_NV_shader_invocation_reorder`]
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Ashwin Lele, NVIDIA
+
+=== Description
+
+The ray tracing pipeline API provides some ability to reorder for locality,
+but it is useful to have more control over how the reordering happens and
+what information is included in the reordering.
+The shader API provides a hit object to contain result information from the
+hit which can be used as part of the explicit sorting plus options that
+contain an integer for hint bits to use to add more locality.
+
+include::{generated}/interfaces/VK_NV_ray_tracing_invocation_reorder.adoc[]
+
+=== HLSL Mapping
+
+HLSL does not provide this functionality natively yet.
+
+However, it is possible to use this functionality via
+https://github.com/microsoft/DirectXShaderCompiler/wiki/GL_EXT_spirv_intrinsics-for-SPIR-V-code-gen[SPIR-V
+Intrinsics].
+
+The codes for shader invocation reorder are obtained from
+https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shader_invocation_reorder.html[this
+page]:
+
+[source,c]
+----
+#define ShaderInvocationReorderNV 5383
+#define HitObjectAttributeNV 5385
+
+#define OpHitObjectRecordHitMotionNV 5249
+#define OpHitObjectRecordHitWithIndexMotionNV 5250
+#define OpHitObjectRecordMissMotionNV 5251
+#define OpHitObjectGetWorldToObjectNV 5252
+#define OpHitObjectGetObjectToWorldNV 5253
+#define OpHitObjectGetObjectRayDirectionNV 5254
+#define OpHitObjectGetObjectRayOriginNV 5255
+#define OpHitObjectTraceRayMotionNV 5256
+#define OpHitObjectGetShaderRecordBufferHandleNV 5257
+#define OpHitObjectGetShaderBindingTableRecordIndexNV 5258
+#define OpHitObjectRecordEmptyNV 5259
+#define OpHitObjectTraceRayNV 5260
+#define OpHitObjectRecordHitNV 5261
+#define OpHitObjectRecordHitWithIndexNV 5262
+#define OpHitObjectRecordMissNV 5263
+#define OpHitObjectExecuteShaderNV 5264
+#define OpHitObjectGetCurrentTimeNV 5265
+#define OpHitObjectGetAttributesNV 5266
+#define OpHitObjectGetHitKindNV 5267
+#define OpHitObjectGetPrimitiveIndexNV 5268
+#define OpHitObjectGetGeometryIndexNV 5269
+#define OpHitObjectGetInstanceIdNV 5270
+#define OpHitObjectGetInstanceCustomIndexNV 5271
+#define OpHitObjectGetWorldRayDirectionNV 5272
+#define OpHitObjectGetWorldRayOriginNV 5273
+#define OpHitObjectGetRayTMaxNV 5274
+#define OpHitObjectGetRayTMinNV 5275
+#define OpHitObjectIsEmptyNV 5276
+#define OpHitObjectIsHitNV 5277
+#define OpHitObjectIsMissNV 5278
+#define OpReorderThreadWithHitObjectNV 5279
+#define OpReorderThreadWithHintNV 5280
+#define OpTypeHitObjectNV 5281
+----
+
+The capability and extension need to be added:
+
+[source,c]
+----
+[[vk::ext_capability(ShaderInvocationReorderNV)]]
+[[vk::ext_extension("SPV_NV_shader_invocation_reorder")]]
+----
+
+The creation of the code:HitObject type can be done like this:
+
+[source,c]
+----
+[[vk::ext_type_def(HitObjectAttributeNV, OpTypeHitObjectNV)]]
+void createHitObjectNV();
+#define HitObjectNV vk::ext_type<HitObjectAttributeNV>
+----
+
+The payload:
+
+  * must be global
+  * needs the code:RayPayloadKHR attribute as an extra storage class
+
+[source,c]
+----
+struct [raypayload] HitPayload
+{
+  float hitT : write(closesthit, miss) : read(caller);
+  int instanceIndex : write(closesthit) : read(caller);
+  float3 pos : write(closesthit) : read(caller);
+  float3 nrm : write(closesthit) : read(caller);
+};
+
+#define RayPayloadKHR 5338
+[[vk::ext_storage_class(RayPayloadKHR)]] static HitPayload payload;
+----
+
+Here is the declaration of a few invocation reordering functions:
+
+[source,c]
+----
+[[vk::ext_instruction(OpHitObjectRecordEmptyNV)]]
+void hitObjectRecordEmptyNV([[vk::ext_reference]] HitObjectNV hitObject);
+
+[[vk::ext_instruction(OpHitObjectTraceRayNV)]]
+void hitObjectTraceRayNV(
+    [[vk::ext_reference]] HitObjectNV hitObject,
+    RaytracingAccelerationStructure as,
+    uint RayFlags,
+    uint CullMask,
+    uint SBTOffset,
+    uint SBTStride,
+    uint MissIndex,
+    float3 RayOrigin,
+    float RayTmin,
+    float3 RayDirection,
+    float RayTMax,
+    [[vk::ext_reference]] [[vk::ext_storage_class(RayPayloadKHR)]] HitPayload payload
+  );
+
+[[vk::ext_instruction(OpReorderThreadWithHintNV)]]
+void reorderThreadWithHintNV(int Hint, int Bits);
+
+[[vk::ext_instruction(OpReorderThreadWithHitObjectNV)]]
+void reorderThreadWithHitObjectNV([[vk::ext_reference]] HitObjectNV hitObject);
+
+[[vk::ext_instruction(OpHitObjectExecuteShaderNV)]]
+void hitObjectExecuteShaderNV([[vk::ext_reference]] HitObjectNV hitObject, [[vk::ext_reference]] [[vk::ext_storage_class(RayPayloadKHR)]] HitPayload payload);
+
+[[vk::ext_instruction(OpHitObjectIsHitNV)]]
+bool hitObjectIsHitNV([[vk::ext_reference]] HitObjectNV hitObject);
+----
+
+Using the function in the code, can be done like this
+[source,c]
+----
+  if (USE_SER == 1)
+  {
+    createHitObjectNV();
+    HitObjectNV hObj; //  hitObjectNV hObj;
+    hitObjectRecordEmptyNV(hObj); //Initialize to an empty hit object
+    hitObjectTraceRayNV(hObj, topLevelAS, rayFlags, 0xFF, 0, 0, 0, r.Origin, 0.0, r.Direction, INFINITE, payload);
+    reorderThreadWithHitObjectNV(hObj);
+    hitObjectExecuteShaderNV(hObj, payload);
+  }
+----
+
+Note:
+
+  * createHitObjectNV() needs to be call at least once.
+    This can be also done in the main entry of the shader.
+  * Function with a payload parameter, needs to have the payload struct
+    defined before.
+    There are no templated declaration of the function.
+
+
+
+=== Version History
+
+  * Revision 1, 2020-09-12 (Eric Werness, Ashwin Lele)
+  ** Initial external release
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_motion_blur.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_motion_blur.adoc
new file mode 100644
index 0000000..0b460d9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_ray_tracing_motion_blur.adoc
@@ -0,0 +1,62 @@
+// Copyright (c) 2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_ray_tracing_motion_blur.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-16
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_ray_tracing_motion_blur.html[`SPV_NV_ray_tracing_motion_blur`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_ray_tracing_motion_blur.txt[`GL_NV_ray_tracing_motion_blur`]
+*Contributors*::
+  - Eric Werness, NVIDIA
+  - Ashwin Lele, NVIDIA
+
+=== Description
+
+Ray tracing support in the API provides an efficient mechanism to intersect
+rays against static geometry, but rendering algorithms often want to support
+motion, which is more efficiently supported with motion-specific algorithms.
+This extension adds a set of mechanisms to support fast tracing of moving
+geometry:
+
+  * A ray pipeline trace call which takes a time parameter
+  * Flags to enable motion support in an acceleration structure
+  * Support for time-varying vertex positions in a geometry
+  * Motion instances to move existing instances over time
+
+The motion represented here is parameterized across a normalized timestep
+between 0.0 and 1.0.
+A motion trace using code:OpTraceRayMotionNV provides a time within that
+normalized range to be used when intersecting that ray with geometry.
+The geometry can be provided with motion by a combination of adding a second
+vertex position for time of 1.0 using
+sname:VkAccelerationStructureGeometryMotionTrianglesDataNV and providing
+multiple transforms in the instance using
+sname:VkAccelerationStructureMotionInstanceNV.
+
+include::{generated}/interfaces/VK_NV_ray_tracing_motion_blur.adoc[]
+
+=== Issues
+
+(1) What size is VkAccelerationStructureMotionInstanceNV?
+--
+  * Added a note on the structure size and made the stride explicit in the
+    language.
+--
+
+(2) Allow arrayOfPointers for motion TLAS?
+--
+  * Yes, with a packed encoding to minimize the amount of data sent for
+    metadata.
+--
+
+=== Version History
+
+  * Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele)
+  ** Initial external release
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_representative_fragment_test.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_representative_fragment_test.adoc
new file mode 100644
index 0000000..fe034e4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_representative_fragment_test.adoc
@@ -0,0 +1,100 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_representative_fragment_test.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-09-13
+*Contributors*::
+  - Kedarnath Thangudu, NVIDIA
+  - Christoph Kubisch, NVIDIA
+  - Pierre Boudier, NVIDIA
+  - Pat Brown, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+
+=== Description
+
+This extension provides a new representative fragment test that allows
+implementations to reduce the amount of rasterization and fragment
+processing work performed for each point, line, or triangle primitive.
+For any primitive that produces one or more fragments that pass all other
+early fragment tests, the implementation is permitted to choose one or more
+"`representative`" fragments for processing and discard all other fragments.
+For draw calls rendering multiple points, lines, or triangles arranged in
+lists, strips, or fans, the representative fragment test is performed
+independently for each of those primitives.
+
+This extension is useful for applications that use an early render pass to
+determine the full set of primitives that would be visible in the final
+scene.
+In this render pass, such applications would set up a fragment shader that
+enables early fragment tests and writes to an image or shader storage buffer
+to record the ID of the primitive that generated the fragment.
+Without this extension, the shader would record the ID separately for each
+visible fragment of each primitive.
+With this extension, fewer stores will be performed, particularly for large
+primitives.
+
+The representative fragment test has no effect if early fragment tests are
+not enabled via the fragment shader.
+The set of fragments discarded by the representative fragment test is
+implementation-dependent and may vary from frame to frame.
+In some cases, the representative fragment test may not discard any
+fragments for a given primitive.
+
+include::{generated}/interfaces/VK_NV_representative_fragment_test.adoc[]
+
+=== Issues
+
+(1) Is the representative fragment test guaranteed to have any effect?
+
+*RESOLVED*: No.
+As specified, we only guarantee that each primitive with at least one
+fragment that passes prior tests will have one fragment passing the
+representative fragment tests.
+We do not guarantee that any particular fragment will fail the test.
+
+In the initial implementation of this extension, the representative fragment
+test is treated as an optimization that may be completely disabled for some
+pipeline states.
+This feature was designed for a use case where the fragment shader records
+information on individual primitives using shader storage buffers or storage
+images, with no writes to color or depth buffers.
+
+(2) Will the set of fragments that pass the representative fragment test be
+repeatable if you draw the same scene over and over again?
+
+*RESOLVED*: No.
+The set of fragments that pass the representative fragment test is
+implementation-dependent and may vary due to the timing of operations
+performed by the GPU.
+
+(3) What happens if you enable the representative fragment test with writes
+to color and/or depth render targets enabled?
+
+*RESOLVED*: If writes to the color or depth buffer are enabled, they will be
+performed for any fragments that survive the relevant tests.
+Any fragments that fail the representative fragment test will not update
+color buffers.
+For the use cases intended for this feature, we do not expect color or depth
+writes to be enabled.
+
+(4) How do derivatives and automatic texture LOD computations work with the
+representative fragment test enabled?
+
+*RESOLVED*: If a fragment shader uses derivative functions or texture
+lookups using automatic LOD computation, derivatives will be computed
+identically whether or not the representative fragment test is enabled.
+For the use cases intended for this feature, we do not expect the use of
+derivatives in the fragment shader.
+
+=== Version History
+
+  * Revision 2, 2018-09-13 (pbrown)
+  ** Add issues.
+  * Revision 1, 2018-08-22 (Kedarnath Thangudu)
+  ** Internal Revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_sample_mask_override_coverage.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_sample_mask_override_coverage.adoc
new file mode 100644
index 0000000..d559a03
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_sample_mask_override_coverage.adoc
@@ -0,0 +1,57 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_sample_mask_override_coverage.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-08
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_sample_mask_override_coverage.html[`SPV_NV_sample_mask_override_coverage`]
+  - This extension provides API support for
+    {GLregistry}/NV/NV_sample_mask_override_coverage.txt[`GL_NV_sample_mask_override_coverage`]
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_NV_sample_mask_override_coverage`
+
+The extension provides access to the code:OverrideCoverageNV decoration
+under the code:SampleMaskOverrideCoverageNV capability.
+Adding this decoration to a variable with the code:SampleMask builtin
+decoration allows the shader to modify the coverage mask and affect which
+samples are used to process the fragment.
+
+When using GLSL source-based shader languages, the code:override_coverage
+layout qualifier from `GL_NV_sample_mask_override_coverage` maps to the
+code:OverrideCoverageNV decoration.
+To use the code:override_coverage layout qualifier in GLSL the
+`GL_NV_sample_mask_override_coverage` extension must be enabled.
+Behavior is described in the `GL_NV_sample_mask_override_coverage` extension
+spec.
+
+include::{generated}/interfaces/VK_NV_sample_mask_override_coverage.adoc[]
+
+=== New Variable Decoration
+
+  * <<interfaces-builtin-variables-samplemask,OverrideCoverageNV in
+    SampleMask>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SampleMaskOverrideCoverageNV,
+    code:SampleMaskOverrideCoverageNV>>
+
+=== Version History
+
+  * Revision 1, 2016-12-08 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_scissor_exclusive.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_scissor_exclusive.adoc
new file mode 100644
index 0000000..020af20
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_scissor_exclusive.adoc
@@ -0,0 +1,57 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_scissor_exclusive.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-01-18
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+    None
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Daniel Koch, NVIDIA
+
+=== Description
+
+This extension adds support for an exclusive scissor test to Vulkan.
+The exclusive scissor test behaves like the scissor test, except that the
+exclusive scissor test fails for pixels inside the corresponding rectangle
+and passes for pixels outside the rectangle.
+If the same rectangle is used for both the scissor and exclusive scissor
+tests, the exclusive scissor test will pass if and only if the scissor test
+fails.
+
+Version 2 of this extension introduces
+ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV and
+flink:vkCmdSetExclusiveScissorEnableNV.
+Applications that use this dynamic state must ensure the implementation
+advertises at least pname:specVersion `2` of this extension.
+
+include::{generated}/interfaces/VK_NV_scissor_exclusive.adoc[]
+
+=== Issues
+
+1) For the scissor test, the viewport state must be created with a matching
+number of scissor and viewport rectangles.
+Should we have the same requirement for exclusive scissors?
+
+*RESOLVED*: For exclusive scissors, we relax this requirement and allow an
+exclusive scissor rectangle count that is either zero or equal to the number
+of viewport rectangles.
+If you pass in an exclusive scissor count of zero, the exclusive scissor
+test is treated as disabled.
+
+=== Version History
+
+  * Revision 2, 2023-01-18 (Piers Daniell)
+  ** Add dynamic state for explicit exclusive scissor enables
+
+  * Revision 1, 2018-07-31 (Pat Brown)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_image_footprint.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_image_footprint.adoc
new file mode 100644
index 0000000..ead314c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_image_footprint.adoc
@@ -0,0 +1,219 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shader_image_footprint.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-09-13
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_shader_image_footprint.html[`SPV_NV_shader_image_footprint`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_shader_texture_footprint.txt[`GL_NV_shader_texture_footprint`]
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Chris Lentini, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+
+=== Description
+
+This extension adds Vulkan support for the
+{spirv}/NV/SPV_NV_shader_image_footprint.html[`SPV_NV_shader_image_footprint`]
+SPIR-V extension.
+That SPIR-V extension provides a new instruction
+code:OpImageSampleFootprintNV allowing shaders to determine the set of
+texels that would be accessed by an equivalent filtered texture lookup.
+
+Instead of returning a filtered texture value, the instruction returns a
+structure that can be interpreted by shader code to determine the footprint
+of a filtered texture lookup.
+This structure includes integer values that identify a small neighborhood of
+texels in the image being accessed and a bitfield that indicates which
+texels in that neighborhood would be used.
+The structure also includes a bitfield where each bit identifies whether any
+texel in a small aligned block of texels would be fetched by the texture
+lookup.
+The size of each block is specified by an access _granularity_ provided by
+the shader.
+The minimum granularity supported by this extension is 2x2 (for 2D textures)
+and 2x2x2 (for 3D textures); the maximum granularity is 256x256 (for 2D
+textures) or 64x32x32 (for 3D textures).
+Each footprint query returns the footprint from a single texture level.
+When using minification filters that combine accesses from multiple mipmap
+levels, shaders must perform separate queries for the two levels accessed
+("`fine`" and "`coarse`").
+The footprint query also returns a flag indicating if the texture lookup
+would access texels from only one mipmap level or from two neighboring
+levels.
+
+This extension should be useful for multi-pass rendering operations that do
+an initial expensive rendering pass to produce a first image that is then
+used as a texture for a second pass.
+If the second pass ends up accessing only portions of the first image (e.g.,
+due to visibility), the work spent rendering the non-accessed portion of the
+first image was wasted.
+With this feature, an application can limit this waste using an initial pass
+over the geometry in the second image that performs a footprint query for
+each visible pixel to determine the set of pixels that it needs from the
+first image.
+This pass would accumulate an aggregate footprint of all visible pixels into
+a separate "`footprint image`" using shader atomics.
+Then, when rendering the first image, the application can kill all shading
+work for pixels not in this aggregate footprint.
+
+This extension has a number of limitations.
+The code:OpImageSampleFootprintNV instruction only supports for two- and
+three-dimensional textures.
+Footprint evaluation only supports the CLAMP_TO_EDGE wrap mode; results are
+undefined: for all other wrap modes.
+Only a limited set of granularity values and that set does not support
+separate coverage information for each texel in the original image.
+
+When using SPIR-V generated from the OpenGL Shading Language, the new
+instruction will be generated from code using the new
+code:textureFootprint*NV built-in functions from the
+`GL_NV_shader_texture_footprint` shading language extension.
+
+include::{generated}/interfaces/VK_NV_shader_image_footprint.adoc[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-ImageFootprintNV, code:ImageFootprintNV>>
+
+=== Issues
+
+(1) The footprint returned by the SPIR-V instruction is a structure that
+    includes an anchor, an offset, and a mask that represents a 8x8 or 4x4x4
+    neighborhood of texel groups.
+    But the bits of the mask are not stored in simple pitch order.
+    Why is the footprint built this way?
+
+*RESOLVED*: We expect that applications using this feature will want to use
+a fixed granularity and accumulate coverage information from the returned
+footprints into an aggregate "`footprint image`" that tracks the portions of
+an image that would be needed by regular texture filtering.
+If an application is using a two-dimensional image with 4x4 pixel
+granularity, we expect that the footprint image will use 64-bit texels where
+each bit in an 8x8 array of bits corresponds to coverage for a 4x4 block in
+the original image.
+Texel (0,0) in the footprint image would correspond to texels (0,0) through
+(31,31) in the original image.
+
+In the usual case, the footprint for a single access will fully contained in
+a 32x32 aligned region of the original texture, which corresponds to a
+single 64-bit texel in the footprint image.
+In that case, the implementation will return an anchor coordinate pointing
+at the single footprint image texel, an offset vector of (0,0), and a mask
+whose bits are aligned with the bits in the footprint texel.
+For this case, the shader can simply atomically OR the mask bits into the
+contents of the footprint texel to accumulate footprint coverage.
+
+In the worst case, the footprint for a single access spans multiple 32x32
+aligned regions and may require updates to four separate footprint image
+texels.
+In this case, the implementation will return an anchor coordinate pointing
+at the lower right footprint image texel and an offset will identify how
+many "`columns`" and "`rows`" of the returned 8x8 mask correspond to
+footprint texels to the left and above the anchor texel.
+If the anchor is (2,3), the 64 bits of the returned mask are arranged
+spatially as follows, where each 4x4 block is assigned a bit number that
+matches its bit number in the footprint image texels:
+
+----
+    +-------------------------+-------------------------+
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- 46 47 | 40 41 42 43 44 45 -- -- |
+    | -- -- -- -- -- -- 54 55 | 48 49 50 51 52 53 -- -- |
+    | -- -- -- -- -- -- 62 63 | 56 57 58 59 60 61 -- -- |
+    +-------------------------+-------------------------+
+    | -- -- -- -- -- -- 06 07 | 00 01 02 03 04 05 -- -- |
+    | -- -- -- -- -- -- 14 15 | 08 09 10 11 12 13 -- -- |
+    | -- -- -- -- -- -- 22 23 | 16 17 18 19 20 21 -- -- |
+    | -- -- -- -- -- -- 30 31 | 24 25 26 27 28 29 -- -- |
+    | -- -- -- -- -- -- 38 39 | 32 33 34 35 36 37 -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    | -- -- -- -- -- -- -- -- | -- -- -- -- -- -- -- -- |
+    +-------------------------+-------------------------+
+----
+
+To accumulate coverage for each of the four footprint image texels, a shader
+can AND the returned mask with simple masks derived from the x and y offset
+values and then atomically OR the updated mask bits into the contents of the
+corresponding footprint texel.
+
+[source,c++]
+----
+    uint64_t returnedMask = (uint64_t(footprint.mask.x) | (uint64_t(footprint.mask.y) << 32));
+    uint64_t rightMask    = ((0xFF >> footprint.offset.x) * 0x0101010101010101UL);
+    uint64_t bottomMask   = 0xFFFFFFFFFFFFFFFFUL >> (8 * footprint.offset.y);
+    uint64_t bottomRight  = returnedMask & bottomMask & rightMask;
+    uint64_t bottomLeft   = returnedMask & bottomMask & (~rightMask);
+    uint64_t topRight     = returnedMask & (~bottomMask) & rightMask;
+    uint64_t topLeft      = returnedMask & (~bottomMask) & (~rightMask);
+----
+
+(2) What should an application do to ensure maximum performance when
+accumulating footprints into an aggregate footprint image?
+
+*RESOLVED*: We expect that the most common usage of this feature will be to
+accumulate aggregate footprint coverage, as described in the previous issue.
+Even if you ignore the anisotropic filtering case where the implementation
+may return a granularity larger than that requested by the caller, each
+shader invocation will need to use atomic functions to update up to four
+footprint image texels for each LOD accessed.
+Having each active shader invocation perform multiple atomic operations can
+be expensive, particularly when neighboring invocations will want to update
+the same footprint image texels.
+
+Techniques can be used to reduce the number of atomic operations performed
+when accumulating coverage include:
+
+  * Have logic that detects returned footprints where all components of the
+    returned offset vector are zero.
+    In that case, the mask returned by the footprint function is guaranteed
+    to be aligned with the footprint image texels and affects only a single
+    footprint image texel.
+  * Have fragment shaders communicate using built-in functions from the
+    `VK_NV_shader_subgroup_partitioned` extension or other shader subgroup
+    extensions.
+    If you have multiple invocations in a subgroup that need to update the
+    same texel (x,y) in the footprint image, compute an aggregate footprint
+    mask across all invocations in the subgroup updating that texel and have
+    a single invocation perform an atomic operation using that aggregate
+    mask.
+  * When the returned footprint spans multiple texels in the footprint
+    image, each invocation need to perform four atomic operations.
+    In the previous issue, we had an example that computed separate masks
+    for "`topLeft`", "`topRight`", "`bottomLeft`", and "`bottomRight`".
+    When the invocations in a subgroup have good locality, it might be the
+    case the "`top left`" for some invocations might refer to footprint
+    image texel (10,10), while neighbors might have their "`top left`"
+    texels at (11,10), (10,11), and (11,11).
+    If you compute separate masks for even/odd x and y values instead of
+    left/right or top/bottom, the "`odd/odd`" mask for all invocations in
+    the subgroup hold coverage for footprint image texel (11,11), which can
+    be updated by a single atomic operation for the entire subgroup.
+
+=== Examples
+
+TBD
+
+=== Version History
+
+  * Revision 2, 2018-09-13 (Pat Brown)
+  ** Add issue (2) with performance tips.
+
+  * Revision 1, 2018-08-12 (Pat Brown)
+  ** Initial draft
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_sm_builtins.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_sm_builtins.adoc
new file mode 100644
index 0000000..924de5c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_sm_builtins.adoc
@@ -0,0 +1,67 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shader_sm_builtins.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-28
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_shader_sm_builtins.html[`SPV_NV_shader_sm_builtins`].
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_shader_sm_builtins.txt[`GL_NV_shader_sm_builtins`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Eric Werness, NVIDIA
+
+=== Description
+
+This extension provides the ability to determine device-specific properties
+on NVIDIA GPUs.
+It provides the number of streaming multiprocessors (SMs), the maximum
+number of warps (subgroups) that can run on an SM, and shader builtins to
+enable invocations to identify which SM and warp a shader invocation is
+executing on.
+
+This extension enables support for the SPIR-V code:ShaderSMBuiltinsNV
+capability.
+
+These properties and built-ins should: typically only be used for debugging
+purposes.
+
+include::{generated}/interfaces/VK_NV_shader_sm_builtins.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * <<interfaces-builtin-variables-warpspersmnv,code:WarpsPerSMNV>>
+  * <<interfaces-builtin-variables-smcountnv,code:SMCountNV>>
+  * <<interfaces-builtin-variables-warpidnv,code:WarpIDNV>>
+  * <<interfaces-builtin-variables-smidnv,code:SMIDNV>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ShaderSMBuiltinsNV,
+    code:ShaderSMBuiltinsNV>>
+
+=== Issues
+. What should we call this extension?
++
+--
+*RESOLVED*: `NV_shader_sm_builtins`.
+Other options considered included:
+
+  * `NV_shader_smid` - but SMID is really easy to typo/confuse as SIMD.
+  * `NV_shader_sm_info` - but *Info* is typically reserved for input
+    structures
+--
+
+
+=== Version History
+
+  * Revision 1, 2019-05-28 (Daniel Koch)
+  ** Internal revisions
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_subgroup_partitioned.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_subgroup_partitioned.adoc
new file mode 100644
index 0000000..d922773
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shader_subgroup_partitioned.adoc
@@ -0,0 +1,38 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shader_subgroup_partitioned.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-03-17
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_shader_subgroup_partitioned.html[`SPV_NV_shader_subgroup_partitioned`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GL_NV_shader_subgroup_partitioned.txt[`GL_NV_shader_subgroup_partitioned`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension enables support for a new class of
+<<shaders-group-operations, group operations>> on <<shaders-scope-subgroup,
+subgroups>> via the
+{GLSLregistry}/nv/GL_NV_shader_subgroup_partitioned.txt[`GL_NV_shader_subgroup_partitioned`]
+GLSL extension and
+{spirv}/NV/SPV_NV_shader_subgroup_partitioned.html[`SPV_NV_shader_subgroup_partitioned`]
+SPIR-V extension.
+Support for these new operations is advertised via the
+ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV bit.
+
+This extension requires Vulkan 1.1, for general subgroup support.
+
+include::{generated}/interfaces/VK_NV_shader_subgroup_partitioned.adoc[]
+
+=== Version History
+
+  * Revision 1, 2018-03-17 (Jeff Bolz)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shading_rate_image.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shading_rate_image.adoc
new file mode 100644
index 0000000..9937273
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_shading_rate_image.adoc
@@ -0,0 +1,146 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shading_rate_image.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-07-18
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_shading_rate.html[`SPV_NV_shading_rate`]
+  - This extension provides API support for
+    {GLSLregistry}/nv/GLSL_NV_shading_rate_image.txt[`GL_NV_shading_rate_image`]
+*Contributors*::
+  - Pat Brown, NVIDIA
+  - Carsten Rohde, NVIDIA
+  - Jeff Bolz, NVIDIA
+  - Daniel Koch, NVIDIA
+  - Mathias Schott, NVIDIA
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension allows applications to use a variable shading rate when
+processing fragments of rasterized primitives.
+By default, Vulkan will spawn one fragment shader for each pixel covered by
+a primitive.
+In this extension, applications can bind a _shading rate image_ that can be
+used to vary the number of fragment shader invocations across the
+framebuffer.
+Some portions of the screen may be configured to spawn up to 16 fragment
+shaders for each pixel, while other portions may use a single fragment
+shader invocation for a 4x4 block of pixels.
+This can be useful for use cases like eye tracking, where the portion of the
+framebuffer that the user is looking at directly can be processed at high
+frequency, while distant corners of the image can be processed at lower
+frequency.
+Each texel in the shading rate image represents a fixed-size rectangle in
+the framebuffer, covering 16x16 pixels in the initial implementation of this
+extension.
+When rasterizing a primitive covering one of these rectangles, the Vulkan
+implementation reads a texel in the bound shading rate image and looks up
+the fetched value in a palette to determine a base shading rate.
+
+In addition to the API support controlling rasterization, this extension
+also adds Vulkan support for the
+{spirv}/NV/SPV_NV_shading_rate.html[`SPV_NV_shading_rate`] extension to
+SPIR-V.
+That extension provides two fragment shader variable decorations that allow
+fragment shaders to determine the shading rate used for processing the
+fragment:
+
+  * code:FragmentSizeNV, which indicates the width and height of the set of
+    pixels processed by the fragment shader.
+  * code:InvocationsPerPixel, which indicates the maximum number of fragment
+    shader invocations that could be spawned for the pixel(s) covered by the
+    fragment.
+
+When using SPIR-V in conjunction with the OpenGL Shading Language (GLSL),
+the fragment shader capabilities are provided by the
+`GL_NV_shading_rate_image` language extension and correspond to the built-in
+variables code:gl_FragmentSizeNV and code:gl_InvocationsPerPixelNV,
+respectively.
+
+include::{generated}/interfaces/VK_NV_shading_rate_image.adoc[]
+
+=== Issues
+
+(1) When using shading rates specifying "`coarse`" fragments covering
+    multiple pixels, we will generate a combined coverage mask that combines
+    the coverage masks of all pixels covered by the fragment.
+    By default, these masks are combined in an implementation-dependent
+    order.
+    Should we provide a mechanism allowing applications to query or specify
+    an exact order?
+
+*RESOLVED*: Yes, this feature is useful for cases where most of the fragment
+shader can be evaluated once for an entire coarse fragment, but where some
+per-pixel computations are also required.
+For example, a per-pixel alpha test may want to kill all the samples for
+some pixels in a coarse fragment.
+This sort of test can be implemented using an output sample mask, but such a
+shader would need to know which bit in the mask corresponds to each sample
+in the coarse fragment.
+We are including a mechanism to allow applications to specify the orders of
+coverage samples for each shading rate and sample count, either as static
+pipeline state or dynamically via a command buffer.
+This portion of the extension has its own feature bit.
+
+We will not be providing a query to determine the implementation-dependent
+default ordering.
+The thinking here is that if an application cares enough about the coarse
+fragment sample ordering to perform such a query, it could instead just set
+its own order, also using custom per-pixel sample locations if required.
+
+(2) For the pipeline stage
+ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, should we specify a
+precise location in the pipeline the shading rate image is accessed (after
+geometry shading, but before the early fragment tests) or leave it
+under-specified in case there are other implementations that access the
+image in a different pipeline location?
+
+*RESOLVED* We are specifying the pipeline stage to be between the final
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> (ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT) and before the first
+stage used for fragment processing
+(ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT), which seems to be the
+natural place to access the shading rate image.
+
+(3) How do centroid-sampled variables work with fragments larger than one
+pixel?
+
+*RESOLVED* For single-pixel fragments, fragment shader inputs decorated with
+code:Centroid are sampled at an implementation-dependent location in the
+intersection of the area of the primitive being rasterized and the area of
+the pixel that corresponds to the fragment.
+With multi-pixel fragments, we follow a similar pattern, using the
+intersection of the primitive and the *set* of pixels corresponding to the
+fragment.
+
+One important thing to keep in mind when using such "`coarse`" shading rates
+is that fragment attributes are sampled at the center of the fragment by
+default, regardless of the set of pixels/samples covered by the fragment.
+For fragments with a size of 4x4 pixels, this center location will be more
+than two pixels (1.5 * sqrt(2)) away from the center of the pixels at the
+corners of the fragment.
+When rendering a primitive that covers only a small part of a coarse
+fragment, sampling a color outside the primitive can produce overly bright
+or dark color values if the color values have a large gradient.
+To deal with this, an application can use centroid sampling on attributes
+where "`extrapolation`" artifacts can lead to overly bright or dark pixels.
+Note that this same problem also exists for multisampling with single-pixel
+fragments, but is less severe because it only affects certain samples of a
+pixel and such bright/dark samples may be averaged with other samples that
+do not have a similar problem.
+
+=== Version History
+
+  * Revision 3, 2019-07-18 (Mathias Schott)
+  ** Fully list extension interfaces in this appendix.
+  * Revision 2, 2018-09-13 (Pat Brown)
+  ** Miscellaneous edits preparing the specification for publication.
+  * Revision 1, 2018-08-08 (Pat Brown)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_array2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_array2.adoc
new file mode 100644
index 0000000..6837aa7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_array2.adoc
@@ -0,0 +1,90 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_viewport_array2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-02-15
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/NV/SPV_NV_viewport_array2.html[`SPV_NV_viewport_array2`]
+  - This extension provides API support for
+    {GLregistry}/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
+  - This extension requires the pname:geometryShader and pname:multiViewport
+    features.
+  - This extension interacts with the pname:tessellationShader feature.
+*Contributors*::
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension adds support for the following SPIR-V extension in Vulkan:
+
+  * `SPV_NV_viewport_array2`
+
+which allows a single primitive to be broadcast to multiple viewports and/or
+multiple layers.
+A new shader built-in output code:ViewportMaskNV is provided, which allows a
+single primitive to be output to multiple viewports simultaneously.
+Also, a new SPIR-V decoration is added to control whether the effective
+viewport index is added into the variable decorated with the code:Layer
+built-in decoration.
+These capabilities allow a single primitive to be output to multiple layers
+simultaneously.
+
+This extension allows variables decorated with the code:Layer and
+code:ViewportIndex built-ins to be exported from vertex or tessellation
+shaders, using the code:ShaderViewportIndexLayerNV capability.
+
+This extension adds a new code:ViewportMaskNV built-in decoration that is
+available for output variables in vertex, tessellation evaluation, and
+geometry shaders, and a new code:ViewportRelativeNV decoration that can be
+added on variables decorated with code:Layer when using the
+code:ShaderViewportMaskNV capability.
+
+When using GLSL source-based shading languages, the code:gl_ViewportMask[]
+built-in output variable and code:viewport_relative layout qualifier from
+`GL_NV_viewport_array2` map to the code:ViewportMaskNV and
+code:ViewportRelativeNV decorations, respectively.
+Behaviour is described in the `GL_NV_viewport_array2` extension
+specification.
+
+ifdef::VK_EXT_shader_viewport_index_layer[]
+[NOTE]
+.Note
+====
+The code:ShaderViewportIndexLayerNV capability is equivalent to the
+code:ShaderViewportIndexLayerEXT capability added by
+`apiext:VK_EXT_shader_viewport_index_layer`.
+====
+endif::VK_EXT_shader_viewport_index_layer[]
+
+include::{generated}/interfaces/VK_NV_viewport_array2.adoc[]
+
+=== New or Modified Built-In Variables
+
+  * (modified) <<interfaces-builtin-variables-layer,code:Layer>>
+  * (modified)
+    <<interfaces-builtin-variables-viewportindex,code:ViewportIndex>>
+  * <<interfaces-builtin-variables-viewportmask,code:ViewportMaskNV>>
+
+=== New Variable Decoration
+
+  * <<interfaces-builtin-variables-layer,code:ViewportRelativeNV in
+    code:Layer>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ShaderViewportIndexLayerNV,
+    code:ShaderViewportIndexLayerNV>>
+  * <<spirvenv-capabilities-table-ShaderViewportMaskNV,
+    code:ShaderViewportMaskNV>>
+
+=== Version History
+
+  * Revision 1, 2017-02-15 (Daniel Koch)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_swizzle.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_swizzle.adoc
new file mode 100644
index 0000000..8943641
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_viewport_swizzle.adoc
@@ -0,0 +1,213 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_viewport_swizzle.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-22
+*Interactions and External Dependencies*::
+  - This extension requires pname:multiViewport and pname:geometryShader
+    features to be useful.
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+This extension provides a new per-viewport swizzle that can modify the
+position of primitives sent to each viewport.
+New viewport swizzle state is added for each viewport, and a new position
+vector is computed for each vertex by selecting from and optionally negating
+any of the four components of the original position vector.
+
+This new viewport swizzle is useful for a number of algorithms, including
+single-pass cube map rendering (broadcasting a primitive to multiple faces
+and reorienting the vertex position for each face) and voxel rasterization.
+The per-viewport component remapping and negation provided by the swizzle
+allows application code to re-orient three-dimensional geometry with a view
+along any of the *X*, *Y*, or *Z* axes.
+If a perspective projection and depth buffering is required, [eq]#1/W#
+buffering should be used, as described in the single-pass cube map rendering
+example in the "`Issues`" section below.
+
+include::{generated}/interfaces/VK_NV_viewport_swizzle.adoc[]
+
+=== Issues
+
+1) Where does viewport swizzling occur in the pipeline?
+
+*RESOLVED*: Despite being associated with the viewport, viewport swizzling
+must happen prior to the viewport transform.
+In particular, it needs to be performed before clipping and perspective
+division.
+
+The viewport mask expansion (`apiext:VK_NV_viewport_array2`) and the
+viewport swizzle could potentially be performed before or after transform
+feedback, but feeding back several viewports worth of primitives with
+different swizzles does not seem particularly useful.
+This specification applies the viewport mask and swizzle after transform
+feedback, and makes primitive queries only count each primitive once.
+
+2) Any interesting examples of how this extension,
+`apiext:VK_NV_viewport_array2`, and
+`apiext:VK_NV_geometry_shader_passthrough` can be used together in practice?
+
+*RESOLVED*: One interesting use case for this extension is for single-pass
+rendering to a cube map.
+In this example, the application would attach a cube map texture to a
+layered FBO where the six cube faces are treated as layers.
+Vertices are sent through the vertex shader without applying a projection
+matrix, where the code:gl_Position output is [eq]#(x,y,z,1)# and the center
+of the cube map is at [eq]#(0,0,0)#.
+With unextended Vulkan, one could have a conventional instanced geometry
+shader that looks something like the following:
+
+[source,c]
+----
+layout(invocations = 6) in;     // separate invocation per face
+layout(triangles) in;
+layout(triangle_strip) out;
+layout(max_vertices = 3) out;
+
+in Inputs {
+vec2 texcoord;
+vec3 normal;
+vec4 baseColor;
+} v[];
+
+    out Outputs {
+    vec2 texcoord;
+    vec3 normal;
+    vec4 baseColor;
+    };
+
+    void main()
+    {
+    int face = gl_InvocationID;  // which face am I?
+
+    // Project gl_Position for each vertex onto the cube map face.
+    vec4 positions[3];
+    for (int i = 0; i < 3; i++) {
+        positions[i] = rotate(gl_in[i].gl_Position, face);
+    }
+
+    // If the primitive does not project onto this face, we are done.
+    if (shouldCull(positions)) {
+        return;
+    }
+
+    // Otherwise, emit a copy of the input primitive to the
+    // appropriate face (using gl_Layer).
+    for (int i = 0; i < 3; i++) {
+        gl_Layer = face;
+        gl_Position = positions[i];
+        texcoord = v[i].texcoord;
+        normal = v[i].normal;
+        baseColor = v[i].baseColor;
+        EmitVertex();
+    }
+}
+----
+
+With passthrough geometry shaders, this can be done using a much simpler
+shader:
+
+[source,c]
+----
+layout(triangles) in;
+layout(passthrough) in Inputs {
+    vec2 texcoord;
+    vec3 normal;
+    vec4 baseColor;
+}
+layout(passthrough) in gl_PerVertex {
+    vec4 gl_Position;
+} gl_in[];
+layout(viewport_relative) out int gl_Layer;
+
+void main()
+{
+    // Figure out which faces the primitive projects onto and
+    // generate a corresponding viewport mask.
+    uint mask = 0;
+    for (int i = 0; i < 6; i++) {
+        if (!shouldCull(face)) {
+        mask |= 1U << i;
+        }
+    }
+    gl_ViewportMask = mask;
+    gl_Layer = 0;
+}
+----
+
+The application code is set up so that each of the six cube faces has a
+separate viewport (numbered 0 to 5).
+Each face also has a separate swizzle, programmed via the
+slink:VkPipelineViewportSwizzleStateCreateInfoNV pipeline state.
+The viewport swizzle feature performs the coordinate transformation handled
+by the code:rotate() function in the original shader.
+The code:viewport_relative layout qualifier says that the viewport number (0
+to 5) is added to the base code:gl_Layer value of 0 to determine which layer
+(cube face) the primitive should be sent to.
+
+Note that the use of the passed through input code:normal in this example
+suggests that the fragment shader in this example would perform an operation
+like per-fragment lighting.
+The viewport swizzle would transform the position to be face-relative, but
+code:normal would remain in the original coordinate system.
+It seems likely that the fragment shader in either version of the example
+would want to perform lighting in the original coordinate system.
+It would likely do this by reconstructing the position of the fragment in
+the original coordinate system using code:gl_FragCoord, a constant or
+uniform holding the size of the cube face, and the input
+code:gl_ViewportIndex (or code:gl_Layer), which identifies the cube face.
+Since the value of code:normal is in the original coordinate system, it
+would not need to be modified as part of this coordinate transformation.
+
+Note that while the code:rotate() operation in the regular geometry shader
+above could include an arbitrary post-rotation projection matrix, the
+viewport swizzle does not support arbitrary math.
+To get proper projection, [eq]#1/W# buffering should be used.
+To do this:
+
+  . Program the viewport swizzles to move the pre-projection [eq]#W# eye
+    coordinate (typically 1.0) into the [eq]#Z# coordinate of the swizzle
+    output and the eye coordinate component used for depth into the [eq]#W#
+    coordinate.
+    For example, the viewport corresponding to the [eq]#+Z# face might use a
+    swizzle of [eq]#(+X, -Y, +W, +Z)#.
+    The [eq]#Z# normalized device coordinate computed after swizzling would
+    then be [eq]#z'/w' = 1/Z~eye~#.
+  . On NVIDIA implementations supporting floating-point depth buffers with
+    values outside [eq]#[0,1]#, prevent unwanted near plane clipping by
+    enabling pname:depthClampEnable.
+    Ensure that the depth clamp does not mess up depth testing by
+    programming the depth range to very large values, such as
+    [eq]#pname:minDepthBounds=-z#, [eq]#pname:maxDepthBounds=+z#, where
+    [eq]#z = 2^127^#.
+    It should be possible to use IEEE infinity encodings also (`0xFF800000`
+    for `-INF`, `0x7F800000` for `+INF`).
+    Even when near/far clipping is disabled, primitives extending behind the
+    eye will still be clipped because one or more vertices will have a
+    negative [eq]#W# coordinate and fail [eq]#X#/[eq]#Y# clipping tests.
++
+--
+On other implementations, scale [eq]#X#, [eq]#Y#, and [eq]#Z# eye
+coordinates so that vertices on the near plane have a post-swizzle [eq]#W#
+coordinate of 1.0.
+For example, if the near plane is at [eq]#Z~eye~ = 1/256#, scale [eq]#X#,
+[eq]#Y#, and [eq]#Z# by 256.
+--
+  . Adjust depth testing to reflect the fact that [eq]#1/W# values are large
+    near the eye and small away from the eye.
+    Clear the depth buffer to zero (infinitely far away) and use a depth
+    test of ename:VK_COMPARE_OP_GREATER instead of ename:VK_COMPARE_OP_LESS.
+
+
+=== Version History
+
+  * Revision 1, 2016-12-22 (Piers Daniell)
+  ** Internal revisions
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_win32_keyed_mutex.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_win32_keyed_mutex.adoc
new file mode 100644
index 0000000..31d2cc4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_NV_win32_keyed_mutex.adoc
@@ -0,0 +1,171 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_win32_keyed_mutex.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-08-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - James Jones, NVIDIA
+  - Carsten Rohde, NVIDIA
+
+=== Description
+
+Applications that wish to import Direct3D 11 memory objects into the Vulkan
+API may wish to use the native keyed mutex mechanism to synchronize access
+to the memory between Vulkan and Direct3D.
+This extension provides a way for an application to access the keyed mutex
+associated with an imported Vulkan memory object when submitting command
+buffers to a queue.
+
+include::{generated}/interfaces/VK_NV_win32_keyed_mutex.adoc[]
+
+=== Examples
+
+[source,c++]
+----
+    //
+    // Import a memory object from Direct3D 11, and synchronize
+    // access to it in Vulkan using keyed mutex objects.
+    //
+
+    extern VkPhysicalDevice physicalDevice;
+    extern VkDevice device;
+    extern HANDLE sharedNtHandle;
+
+    static const VkFormat format = VK_FORMAT_R8G8B8A8_UNORM;
+    static const VkExternalMemoryHandleTypeFlagsNV handleType =
+        VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV;
+
+    VkPhysicalDeviceMemoryProperties memoryProperties;
+    VkExternalImageFormatPropertiesNV properties;
+    VkExternalMemoryImageCreateInfoNV externalMemoryImageCreateInfo;
+    VkImageCreateInfo imageCreateInfo;
+    VkImage image;
+    VkMemoryRequirements imageMemoryRequirements;
+    uint32_t numMemoryTypes;
+    uint32_t memoryType;
+    VkImportMemoryWin32HandleInfoNV importMemoryInfo;
+    VkMemoryAllocateInfo memoryAllocateInfo;
+    VkDeviceMemory mem;
+    VkResult result;
+
+    // Figure out how many memory types the device supports
+    vkGetPhysicalDeviceMemoryProperties(physicalDevice,
+                                        &memoryProperties);
+    numMemoryTypes = memoryProperties.memoryTypeCount;
+
+    // Check the external handle type capabilities for the chosen format
+    // Importable 2D image support with at least 1 mip level, 1 array
+    // layer, and VK_SAMPLE_COUNT_1_BIT using optimal tiling and supporting
+    // texturing and color rendering is required.
+    result = vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
+        physicalDevice,
+        format,
+        VK_IMAGE_TYPE_2D,
+        VK_IMAGE_TILING_OPTIMAL,
+        VK_IMAGE_USAGE_SAMPLED_BIT |
+        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+        0,
+        handleType,
+        &properties);
+
+    if ((result != VK_SUCCESS) ||
+        !(properties.externalMemoryFeatures &
+          VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV)) {
+        abort();
+    }
+
+    // Set up the external memory image creation info
+    memset(&externalMemoryImageCreateInfo,
+           0, sizeof(externalMemoryImageCreateInfo));
+    externalMemoryImageCreateInfo.sType =
+        VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
+    externalMemoryImageCreateInfo.handleTypes = handleType;
+    // Set up the  core image creation info
+    memset(&imageCreateInfo, 0, sizeof(imageCreateInfo));
+    imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+    imageCreateInfo.pNext = &externalMemoryImageCreateInfo;
+    imageCreateInfo.format = format;
+    imageCreateInfo.extent.width = 64;
+    imageCreateInfo.extent.height = 64;
+    imageCreateInfo.extent.depth = 1;
+    imageCreateInfo.mipLevels = 1;
+    imageCreateInfo.arrayLayers = 1;
+    imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+    imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+    imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT |
+        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+    imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+    imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+
+    vkCreateImage(device, &imageCreateInfo, NULL, &image);
+    vkGetImageMemoryRequirements(device,
+                                 image,
+                                 &imageMemoryRequirements);
+
+    // For simplicity, just pick the first compatible memory type.
+    for (memoryType = 0; memoryType < numMemoryTypes; memoryType++) {
+        if ((1 << memoryType) & imageMemoryRequirements.memoryTypeBits) {
+            break;
+        }
+    }
+
+    // At least one memory type must be supported given the prior external
+    // handle capability check.
+    assert(memoryType < numMemoryTypes);
+
+    // Allocate the external memory object.
+    memset(&exportMemoryAllocateInfo, 0, sizeof(exportMemoryAllocateInfo));
+    exportMemoryAllocateInfo.sType =
+        VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV;
+    importMemoryInfo.handleTypes = handleType;
+    importMemoryInfo.handle = sharedNtHandle;
+
+    memset(&memoryAllocateInfo, 0, sizeof(memoryAllocateInfo));
+    memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+    memoryAllocateInfo.pNext = &exportMemoryAllocateInfo;
+    memoryAllocateInfo.allocationSize = imageMemoryRequirements.size;
+    memoryAllocateInfo.memoryTypeIndex = memoryType;
+
+    vkAllocateMemory(device, &memoryAllocateInfo, NULL, &mem);
+
+    vkBindImageMemory(device, image, mem, 0);
+
+    ...
+
+    const uint64_t acquireKey = 1;
+    const uint32_t timeout = INFINITE;
+    const uint64_t releaseKey = 2;
+
+    VkWin32KeyedMutexAcquireReleaseInfoNV keyedMutex =
+        { VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV };
+    keyedMutex.acquireCount = 1;
+    keyedMutex.pAcquireSyncs = &mem;
+    keyedMutex.pAcquireKeys = &acquireKey;
+    keyedMutex.pAcquireTimeoutMilliseconds = &timeout;
+    keyedMutex.releaseCount = 1;
+    keyedMutex.pReleaseSyncs = &mem;
+    keyedMutex.pReleaseKeys = &releaseKey;
+
+    VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO, &keyedMutex };
+    submit_info.commandBufferCount = 1;
+    submit_info.pCommandBuffers = &cmd_buf;
+    vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE);
+----
+
+=== Version History
+
+  * Revision 2, 2016-08-11 (James Jones)
+  ** Updated sample code based on the NV external memory extensions.
+  ** Renamed from NVX to NV extension.
+  ** Added Overview and Description sections.
+  ** Updated sample code to use the NV external memory extensions.
+
+  * Revision 1, 2016-06-14 (Carsten Rohde)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_clamp.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_clamp.adoc
new file mode 100644
index 0000000..c2dad27
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_clamp.adoc
@@ -0,0 +1,46 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_filter_cubic_clamp.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-08-02
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension extends cubic filtering by adding the ability to enable an
+anti-ringing clamp.
+Cubic filtering samples from a 4x4 region of texels and computes a cubic
+weighted average of the region.
+In some cases, the resulting value is outside the range of any of the texels
+in the 4x4 region.
+This is sometimes referred to as "`filter overshoot`" or "`filter ringing`"
+and can occur when there is a sharp discontinuity in the 4x4 region being
+filtered.
+For some use cases this "`ringing`" can produces unacceptable artifacts.
+
+The solution to the ringing problem is to clamp the post-cubic-filtered
+value to be within the max and min of texel values in the 4x4 region.
+While such "`range clamping`" can be performed in shader code, the
+additional texture fetches and clamping ALU operations can be costly.
+
+Certain Adreno GPUs are able to perform the range clamp in the texture unit
+during cubic filtering at significant performance/power savings versus a
+shader-based clamping approach.
+This extension exposes such hardware functionality.
+
+This extension extends elink:VkSamplerReductionMode, adding
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM which
+enables the range clamp operation.
+
+include::{generated}/interfaces/VK_QCOM_filter_cubic_clamp.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-08-02 (jleger)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_weights.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_weights.adoc
new file mode 100644
index 0000000..b3f7968
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_filter_cubic_weights.adoc
@@ -0,0 +1,41 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_filter_cubic_weights.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-06-23
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Jonathan Wicks, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension extends cubic filtering by adding the ability to select a set
+of weights.
+Without this extension, the weights used in cubic filtering are limited to
+those corresponding to a Catmull-Rom spline.
+This extension adds support for 3 additional spline weights.
+
+This extension adds a new structure that can: be added to the pname:pNext
+chain of slink:VkSamplerCreateInfo that can: be used to specify which set of
+cubic weights are used in cubic filtering.
+A similar structure can be added to the pname:pNext chain of
+slink:VkBlitImageInfo2 to specify cubic weights used in a blit operation.
+
+With this extension weights corresponding to the following additional
+splines can be selected for cubic filtered sampling and blits:
+
+  * Zero Tangent Cardinal
+  * B-Spline
+  * Mitchell-Netravali
+
+include::{generated}/interfaces/VK_QCOM_filter_cubic_weights.adoc[]
+
+=== Version History
+
+  * Revision 1, 2023-06-23 (jleger)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_fragment_density_map_offset.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_fragment_density_map_offset.adoc
new file mode 100644
index 0000000..85dce15
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_fragment_density_map_offset.adoc
@@ -0,0 +1,101 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_fragment_density_map_offset.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-03
+*Contributors*::
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Jonathan Wicks, Qualcomm Technologies, Inc.
+  - Jonathan Tinkham, Qualcomm Technologies, Inc.
+  - Jeff Leger, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension allows an application to specify offsets to a fragment
+density map attachment, changing the framebuffer location where density
+values are applied to without having to regenerate the fragment density map.
+
+include::{generated}/interfaces/VK_QCOM_fragment_density_map_offset.adoc[]
+
+ifdef::isrefpage[]
+=== Examples
+
+==== Fragment Density Map
+
+If the fragment density map size is larger than framebuffer size /
+pname:minFragmentDensityTexelSize, then offsets may be applied with
+slink:VkSubpassFragmentDensityMapOffsetEndInfoQCOM to shift the framebuffer
+inside of the density map image.
+This is helpful if apps want to reuse the same density map image to track
+content without editing the image.
+
+[source,c++]
+----
+// Create fragment density map
+VkImageCreateInfo imageCreateInfo =
+{
+    .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+    .pNext = nullptr,
+    .flags = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    .imageType = VK_IMAGE_TYPE_2D,    // Must be 2D
+    .format = VK_FORMAT_R8G8_UNORM,   // Must have VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT
+    .extent = {64, 64, 1},
+    .mipLevels = 1,
+    .arrayLayers = 2,                 // 1 for each multiview view
+    .samples = VK_SAMPLE_COUNT_1_BIT, // Must be 1x MSAA
+    .tiling = tiling,
+    .usage = VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
+    // ...
+};
+
+vkCreateImage(device, &imageCreateInfo, nullptr, &fdmImage);
+
+// Start render pass with fbo that has fdmImage as fragmentDensityMapAttachment
+// All other attachments must have been created with
+// VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM
+// FBO has dimensions 1024x1024 in this example
+vkCmdBeginRenderPass2(commandBuffer, &renderPassBeginInfo, pSubpassBeginInfo);
+
+// ...
+
+// Shift fragment density map image by offset to put fovea in center of vision
+/*
+   If minFragmentDensityTexelSize is 32x32, then offsets can be at most
+   1024x1024 for this example before density value access is clamped to edge of map
+
+   This is because the region of each fdmImage texel is
+
+     texelSize = max(framebuffer / fdmImage, minFragmentDensityTexelSize) = 32x32
+
+   and the fdmImage covers a total framebuffer region of
+
+     fdmImageRegion = fdmImage * texelSize = 2048x2048
+
+   This means that the framebuffer (1024x1024) can be shifted up to 1024x1024
+   before the density values are clamped to edge of map
+*/
+VkSubpassFragmentDensityMapOffsetEndInfoQCOM offsetInfo =
+{
+    .sType = VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM,
+    .fragmentDensityOffsetCount = 2,    // 1 for each layer/multiview view
+    .pFragmentDensityOffsets = offsets, // aligned to fragmentDensityOffsetGranularity
+};
+
+subpassEndInfo.pNext = &offsetInfo;
+
+// Only offsets given to the last subpass are used for the whole render pass
+// Offsets given in other subpasses are ignored
+vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, &subpassEndInfo);
+----
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2021-09-03 (Matthew Netsch)
+  ** Initial version
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing.adoc
new file mode 100644
index 0000000..74a5f74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing.adoc
@@ -0,0 +1,71 @@
+// Copyright (c) 2021 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_image_processing.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-08
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/QCOM/SPV_QCOM_image_processing.html[`SPV_QCOM_image_processing`]
+  - This extension provides API support for
+    {GLSLregistry}/qcom/GLSL_QCOM_image_processing.txt[`GL_QCOM_image_processing`]
+
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Ruihao Zhang, Qualcomm Technologies, Inc.
+
+=== Description
+
+GPUs are commonly used to process images for various applications from 3D
+graphics to UI and from composition to compute applications.
+Simple scaling and filtering can be done with bilinear filtering, which
+comes for free during texture sampling.
+However, as screen sizes get larger and more use cases rely on GPU such as
+camera and video post-processing needs, there is increasing demand for GPU
+to support higher order filtering and other advanced image processing.
+
+This extension introduces a new set of SPIR-V built-in functions for image
+processing.
+It exposes the following new imaging operations
+
+  * The `OpImageSampleWeightedQCOM` instruction takes 3 operands: _sampled
+    image_, _weight image_, and texture coordinates.
+    The instruction computes a weighted average of an MxN region of texels
+  in the _sampled image_, using a set of MxN weights in the _weight image_.
+  * The `OpImageBoxFilterQCOM` instruction takes 3 operands: _sampled
+    image_, _box size_, and texture coordinates.
+    Note that _box size_ specifies a floating point width and height in
+    texels.
+    The instruction computes a weighted average of all texels in the
+    _sampled image_ that are covered (either partially or fully) by a box
+    with the specified size and centered at the specified texture
+    coordinates.
+  * The `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSSDQCOM`
+    instructions each takes 5 operands: _target image_, _target
+    coordinates_, _reference image_, _reference coordinates_, and _block
+    size_.
+    Each instruction computes an error metric, that describes whether a
+    block of texels in the _target image_ matches a corresponding block of
+    texels in the _reference image_.
+    The error metric is computed per-component.
+    `OpImageBlockMatchSADQCOM` computes "Sum Of Absolute Difference" and
+    `OpImageBlockMatchSSDQCOM` computes "Sum of Squared Difference".
+
+Each of the image processing instructions operate only on 2D images.
+The instructions do not-support sampling of mipmap, multi-plane,
+multi-layer, multi-sampled, or depth/stencil images.
+The instructions can be used in any shader stage.
+
+Implementations of this this extension should support these operations
+natively at the HW instruction level, offering potential performance gains
+as well as ease of development.
+
+include::{generated}/interfaces/VK_QCOM_image_processing.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-07-08 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing2.adoc
new file mode 100644
index 0000000..e23beaf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_image_processing2.adoc
@@ -0,0 +1,142 @@
+// Copyright (c) 2023 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_image_processing2.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-03-10
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/QCOM/SPV_QCOM_image_processing2.html[`SPV_QCOM_image_processing2`]
+  - This extension provides API support for
+    {GLSLregistry}/qcom/GLSL_QCOM_image_processing2.txt[`GL_QCOM_image_processing2`]
+
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension enables support for the SPIR-V code:TextureBlockMatch2QCOM
+capability.
+It builds on the functionality of QCOM_image_processing with the addition of
+4 new image processing operations.
+
+  * The code:opImageBlockMatchWindowSADQCOM` SPIR-V instruction builds upon
+    the functionality of code:opImageBlockMatchSADQCOM` by repeatedly
+    performing block match operations across a 2D window.
+    The "`2D windowExtent`" and "`compareMode`" are are specified by
+    slink:VkSamplerBlockMatchWindowCreateInfoQCOM in the sampler used to
+    create the _target image_.
+    Like code:OpImageBlockMatchSADQCOM, code:opImageBlockMatchWindowSADQCOM
+    computes an error metric, that describes whether a block of texels in
+    the _target image_ matches a corresponding block of texels in the
+    _reference image_.
+    Unlike code:OpImageBlockMatchSADQCOM, this instruction computes an error
+    metric at each (X,Y) location within the 2D window and returns either
+    the minimum or maximum error.
+    The instruction only supports single-component formats.
+    Refer to the pseudocode below for details.
+  * The code:opImageBlockMatchWindowSSDQCOM follows the same pattern,
+    computing the SSD error metric at each location within the 2D window.
+  * The code:opImageBlockMatchGatherSADQCOM builds upon
+    code:OpImageBlockMatchSADQCOM.
+    This instruction computes an error metric, that describes whether a
+    block of texels in the _target image_ matches a corresponding block of
+    texels in the _reference image_.
+    The instruction computes the SAD error metric at 4 texel offsets and
+    returns the error metric for each offset in the X,Y,Z,and W components.
+    The instruction only supports single-component texture formats.
+    Refer to the pseudocode below for details.
+  * The code:opImageBlockMatchGatherSSDQCOM follows the same pattern,
+    computing the SSD error metric for 4 offsets.
+
+Each of the above 4 image processing instructions are limited to
+single-component formats.
+
+Below is the pseudocode for GLSL built-in function
+code:textureWindowBlockMatchSADQCOM.
+The pseudocode for code:textureWindowBlockMatchSSD is identical other than
+replacing all instances of `"SAD"` with `"SSD"`.
+
+[source,c]
+----
+vec4 textureBlockMatchWindowSAD( sampler2D target,
+                                 uvec2 targetCoord,
+                                 samler2D reference,
+                                 uvec2 refCoord,
+                                 uvec2 blocksize) {
+    // compareMode (MIN or MAX) comes from the vkSampler associated with `target`
+    // uvec2 window  comes from the vkSampler associated with `target`
+    minSAD = INF;
+    maxSAD = -INF;
+    uvec2 minCoord;
+    uvec2 maxCoord;
+
+    for (uint x=0, x < window.width; x++) {
+        for (uint y=0; y < window.height; y++) {
+            float SAD = textureBlockMatchSAD(target,
+                                            targetCoord + uvec2(x, y),
+                                            reference,
+                                            refCoord,
+                                            blocksize).x;
+            // Note: the below comparison operator will produce undefined results
+            // if SAD is a denorm value.
+            if (SAD < minSAD) {
+                minSAD = SAD;
+                minCoord = uvec2(x,y);
+            }
+            if (SAD > maxSAD) {
+                maxSAD = SAD;
+                maxCoord = uvec2(x,y);
+            }
+        }
+    }
+    if (compareMode=MIN) {
+        return vec4(minSAD, minCoord.x, minCoord.y, 0.0);
+    } else {
+        return vec4(maxSAD, maxCoord.x, maxCoord.y, 0.0);
+    }
+}
+----
+
+Below is the pseudocode for code:textureBlockMatchGatherSADQCOM.
+The pseudocode for code:textureBlockMatchGatherSSD follows an identical
+pattern.
+
+[source,c]
+----
+vec4 textureBlockMatchGatherSAD( sampler2D target,
+                                 uvec2 targetCoord,
+                                 samler2D reference,
+                                 uvec2 refCoord,
+                                 uvec2 blocksize) {
+    vec4 out;
+    for (uint x=0, x<4; x++) {
+            float SAD = textureBlockMatchSAD(target,
+                                            targetCoord + uvec2(x, 0),
+                                            reference,
+                                            refCoord,
+                                            blocksize).x;
+            out[x] = SAD;
+    }
+    return out;
+}
+----
+
+include::{generated}/interfaces/VK_QCOM_image_processing2.adoc[]
+
+=== Issues
+
+1) What is the precision of the min/max comparison checks?
+
+*RESOLVED*: Intermediate computations for the new operations are performed
+at 16-bit floating point precision.
+If the value of `"float SAD"` in the above code sample is a 16-bit denorm
+value, then behavior of the MIN/MAX comparison is undefined.
+
+=== Version History
+
+  * Revision 1, 2023-03-10 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_render_areas.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_render_areas.adoc
new file mode 100644
index 0000000..3bac22a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_render_areas.adoc
@@ -0,0 +1,92 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_multiview_per_view_render_areas.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-01-10
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension interacts with `apiext:VK_KHR_dynamic_rendering`
+  - This extension interacts with `apiext:VK_QCOM_render_pass_transform`
+*Contributors*::
+  - Jeff Leger, Qualcomm
+  - Jonathan Tinkham, Qualcomm
+  - Jonathan Wicks, Qualcomm
+
+=== Description
+
+Certain use cases (e.g., side-by-side VR rendering) use multiview and render
+to distinct regions of the framebuffer for each view.
+On some implementations, there may be a performance benefit for providing
+per-view render areas to the implementation.
+Such per-view render areas can be used by the implementation to reduce the
+pixels that are affected by attachment load, store, and multisample resolve
+operations.
+
+The extension enables a multiview render pass instance to define per-view
+render areas.
+For each view of a multiview render pass instance, only those pixels in the
+per-view render area are affected by load, store and resolve operations.
+
+include::{generated}/interfaces/VK_QCOM_multiview_per_view_render_areas.adoc[]
+
+=== Issues
+
+1) Do the per-view pname:renderAreas interact with
+flink:vkGetRenderAreaGranularity ?
+
+*RESOLVED*: There is no change.
+The granularity returned by flink:vkGetRenderAreaGranularity also applies to
+the per-view pname:renderAreas.
+
+2) How does this extension interact with
+`apiext:VK_QCOM_render_pass_transform`?
+
+*RESOLVED*: When `apiext:VK_QCOM_render_pass_transform` is enabled, the
+application provides render area in non-rotated coordinates which is rotated
+by the implementation to the rotated coordinate system.
+When this extension is used in combination with
+`apiext:VK_QCOM_render_pass_transform`, then the pname:renderArea provided
+in slink:VkRenderingInfo::pname:renderArea,
+slink:VkRenderPassBeginInfo::pname:renderArea, or
+slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM::pname:renderArea
+is rotated by the implementation.
+The per-view render areas are not rotated.
+
+3) How does this extension interact with
+`apiext:VK_QCOM_multiview_per_view_viewports`
+
+*RESOLVED*: There is no direct interaction.
+The per-view viewports and the per-view renderAreas are orthogonal features.
+
+4) When a per-view pname:renderArea is specified, must multiview rendering
+for each view of a multiview render pass be contained within the per-view
+pname:renderArea?
+
+*RESOLVED*: Yes, and the `apiext:VK_QCOM_multiview_per_view_viewports` may
+help here since it provides per-view scissors.
+
+5) When per-view render areas are specified, what purpose if any do
+slink:VkRenderPassBeginInfo::pname:renderArea and
+slink:VkRenderingInfo::pname:renderArea serve?
+
+*RESOLVED*: The per-view pname:renderArea effectively overrides the
+per-renderpass pname:renderArea.
+The per-view pname:renderArea defines the regions of the attachments that
+are effected by load, store, and multisample resolve operations.
+A valid implementation could ignore the per-renderpass pname:renderArea.
+However, as an aid to the implementation, the application must set the
+per-renderpass pname:renderArea to an area that is at least as large as the
+union of all the per-view render areas.
+Pixels that are within the per-renderpass pname:renderArea but not within
+any per-view render area must not be affected by load, store, or multisample
+resolve operations.
+
+=== Version History
+
+  * Revision 1, 2023-01-10 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_viewports.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_viewports.adoc
new file mode 100644
index 0000000..080484e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_multiview_per_view_viewports.adoc
@@ -0,0 +1,61 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_multiview_per_view_viewports.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-11-22
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension interacts with `apiext:VK_KHR_dynamic_rendering`
+  - This extension interacts with `apiext:VK_EXT_extended_dynamic_state`
+*Contributors*::
+  - Jeff Leger, Qualcomm
+  - Jonathan Tinkham, Qualcomm
+  - Jonathan Wicks, Qualcomm
+
+=== Description
+
+Certain use cases for multiview have a need for specifying a separate
+viewport and scissor for each view, without using shader-based viewport
+indexing as introduced with `apiext:VK_EXT_shader_viewport_index_layer`.
+
+This extension adds a new way to control ViewportIndex with multiview.
+When the <<features-multiview-per-view-viewports,
+pname:multiviewPerViewViewports>> feature is enabled and if the last
+pre-rasterization shader entry point's interface does not use the
+code:ViewportIndex built-in decoration, then each view of a multiview render
+pass instance will use a viewport and scissor index equal to the
+code:ViewIndex.
+
+include::{generated}/interfaces/VK_QCOM_multiview_per_view_viewports.adoc[]
+
+=== Issues
+
+1) Is is possible to enable/disable the
+<<features-multiview-per-view-viewports, pname:multiviewPerViewViewports>>
+feature for individual render pass instances?
+
+*RESOLVED*: No, when the multiviewPerViewViewports feature is enabled during
+vkCreateDevice, then all created render pass instances (including dynamic
+render passes from `apiext:VK_KHR_dynamic_rendering`) and all created
+VkPipelines will have the feature enabled.
+This approach was chosen because it simplifies application code and there is
+no known use case enable/disable the feature for individual render passes or
+pipelines.
+
+2) When this extension is used, is the value of code:ViewportIndex
+implicitly written by the last pre-rasterization shader stage and can the
+value of code:ViewportIndex be read in the fragment shader?
+
+*RESOLVED*: No, use of the extension extension does not add an implicit
+write to code:ViewportIndex in any shader stage, and additionally, the value
+of code:ViewportIndex in the fragment shader is undefined.
+
+=== Version History
+
+  * Revision 1, 2022-11-22 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_shader_resolve.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_shader_resolve.adoc
new file mode 100644
index 0000000..6c819de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_shader_resolve.adoc
@@ -0,0 +1,92 @@
+// Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_render_pass_shader_resolve.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-11-07
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+    None.
+*Contributors*::
+  - Srihari Babu Alla, Qualcomm
+  - Bill Licea-Kane, Qualcomm
+  - Jeff Leger, Qualcomm
+
+=== Description
+
+This extension allows a shader resolve to replace fixed-function resolve.
+
+Fixed-function resolve is limited in function to simple filters of
+multisample buffers to a single sample buffer.
+
+Fixed-function resolve is more performance efficient and/or power efficient
+than shader resolve for such simple filters.
+
+Shader resolve allows a shader writer to create complex, non-linear
+filtering of a multisample buffer in the last subpass of a subpass
+dependency chain.
+
+This extension also provides a bit which can: be used to enlarge a sample
+region dependency to a fragment region dependency, so that a
+framebuffer-region dependency can: replace a framebuffer-global dependency
+in some cases.
+
+include::{generated}/interfaces/VK_QCOM_render_pass_shader_resolve.adoc[]
+
+=== Issues
+
+1) Should this extension be named render_pass_shader_resolve?
+
+*RESOLVED* Yes.
+
+This is part of suite of small extensions to render pass.
+
+Following the style guide, instead of following VK_KHR_create_renderpass2.
+
+2) Should the VK_SAMPLE_COUNT_1_BIT be required for each pColorAttachment
+and the DepthStencilAttachent?
+
+*RESOLVED* No.
+
+While this may not be a common use case, and while most fixed-function
+resolve hardware has this limitation, there is little reason to require a
+shader resolve to resolve to a single sample buffer.
+
+3) Should a shader resolve subpass be the last subpass in a render pass?
+
+*RESOLVED* Yes.
+
+To be more specific, it should be the last subpass in a subpass dependency
+chain.
+
+4) Do we need the ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM bit?
+
+*RESOLVED* Yes.
+
+This applies when an input attachment's sample count is equal to
+pname:rasterizationSamples.
+Further, if pname:sampleShading is enabled (explicitly or implicitly) then
+pname:minSampleShading must: equal 0.0.
+
+However, this bit may be set on any subpass, it is not restricted to a
+shader resolve subpass.
+
+=== Version History
+
+  * Revision 1, 2019-06-28 (wwlk)
+  ** Initial draft
+  * Revision 2, 2019-11-06 (wwlk)
+  ** General clean-up/spec updates
+  ** Added issues
+  * Revision 3, 2019-11-07 (wwlk)
+  ** Typos
+  ** Additional issues
+  ** Clarified that a shader resolve subpass is the last subpass in a
+     subpass dependency chain
+  * Revision 4, 2020-01-06 (wwlk)
+  ** Change resolution of Issue 1 (_render_pass_, not _renderpass_)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_store_ops.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_store_ops.adoc
new file mode 100644
index 0000000..78104ba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_store_ops.adoc
@@ -0,0 +1,50 @@
+// Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_render_pass_store_ops.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-25
+*Contributors*::
+  - Bill Licea-Kane, Qualcomm Technologies, Inc.
+
+=== Description
+
+Render pass attachments can: be read-only for the duration of a render pass.
+
+Examples include input attachments and depth attachments where depth tests
+are enabled but depth writes are not enabled.
+
+In such cases, there can: be no contents generated for an attachment within
+the render area.
+
+This extension adds a new elink:VkAttachmentStoreOp
+ename:VK_ATTACHMENT_STORE_OP_NONE_QCOM specifying that the contents within
+the render area may: not be written to memory, but that the prior contents
+of the attachment in memory are preserved.
+However, if any contents were generated within the render area during
+rendering, the contents of the attachment will be undefined: inside the
+render area.
+
+[NOTE]
+.Note
+====
+The elink:VkAttachmentStoreOp ename:VK_ATTACHMENT_STORE_OP_STORE may: force
+an implementation to assume that the attachment was written and force an
+implementation to flush data to memory or to a higher level cache.
+The elink:VkAttachmentStoreOp ename:VK_ATTACHMENT_STORE_OP_NONE_QCOM may:
+allow an implementation to assume that the attachment was not written and
+allow an implementation to avoid such a flush.
+====
+
+include::{generated}/interfaces/VK_QCOM_render_pass_store_ops.adoc[]
+
+=== Version History
+
+  * Revision 1, 2019-12-20 (wwlk)
+  ** Initial version
+  * Revision 2, 2020-03-25 (wwlk)
+  ** Minor renaming
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_transform.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_transform.adoc
new file mode 100644
index 0000000..f60b627
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_render_pass_transform.adoc
@@ -0,0 +1,185 @@
+// Copyright (c) 2020 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_render_pass_transform.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-21
+*Interactions and External Dependencies*::
+  - This extension requires `apiext:VK_KHR_swapchain`
+  - This extension interacts with `apiext:VK_EXT_fragment_density_map`
+  - This extension interacts with `apiext:VK_KHR_fragment_shading_rate`
+  - This extension interacts with `apiext:VK_QCOM_tile_properties`
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+  - Brandon Light, Qualcomm Technologies, Inc.
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension provides a mechanism for applications to enable driver
+support for <<vertexpostproc-renderpass-transform, render pass transform>>.
+
+Mobile devices can be rotated and mobile applications need to render
+properly when a device is held in a landscape or portrait orientation.
+When the current orientation differs from the device's native orientation, a
+rotation is required so that the "`up`" direction of the rendered scene
+matches the current orientation.
+
+If the Display Processing Unit (DPU) does not natively support rotation, the
+Vulkan presentation engine can handle this rotation in a separate
+composition pass.
+Alternatively, the application can render frames "`pre-rotated`" to avoid
+this extra pass.
+The latter is preferred to reduce power consumption and achieve the best
+performance because it avoids tasking the GPU with extra work to perform the
+copy/rotate operation.
+
+Unlike OpenGL ES, the burden of pre-rotation in Vulkan falls on the
+application.
+To implement pre-rotation, applications render into swapchain images
+matching the device native aspect ratio of the display and "`pre-rotate`"
+the rendering content to match the device's current orientation.
+The burden is more than adjusting the Model View Projection (MVP) matrix in
+the vertex shader to account for rotation and aspect ratio.
+The coordinate systems of scissors, viewports, derivatives and several
+shader built-ins may need to be adapted to produce the correct result.
+
+It is difficult for some game engines to manage this burden; many chose to
+simply accept the performance/power overhead of performing rotation in the
+presentation engine.
+
+This extension allows applications to achieve the performance benefits of
+pre-rotated rendering by moving much of the above-mentioned burden to the
+graphics driver.
+The following is unchanged with this extension:
+
+  * Applications create a swapchain matching the native orientation of the
+    display.
+    Applications must also set the
+    slink:VkSwapchainCreateInfoKHR::pname:preTransform equal to the
+    pname:currentTransform as returned by
+    flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
+
+The following is changed with this extension:
+
+  * At flink:vkCmdBeginRenderPass, the application provides extension struct
+    slink:VkRenderPassTransformBeginInfoQCOM specifying the render pass
+    transform parameters.
+  * At flink:vkBeginCommandBuffer for secondary command buffers, the
+    application provides extension struct
+    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM specifying
+    the render pass transform parameters.
+  * The pname:renderArea, viewports, scissors, and pname:fragmentSize are
+    all provided in the current (non-rotated) coordinate system.
+    The implementation will transform those into the native (rotated)
+    coordinate system.
+  * The implementation is responsible for transforming shader built-ins
+    (code:FragCoord, code:PointCoord, code:SamplePosition,
+    code:PrimitiveShadingRateKHR, interpolateAt(), dFdx, dFdy, fWidth) into
+    the rotated coordinate system.
+  * The implementation is responsible for transforming code:position to the
+    rotated coordinate system.
+  * If this extension is used with `apiext:VK_QCOM_tile_properties`, then
+    flink:vkGetFramebufferTilePropertiesQCOM and
+    flink:vkGetDynamicRenderingTilePropertiesQCOM return tile properties in
+    the rotated coordinate space.
+
+
+include::{generated}/interfaces/VK_QCOM_render_pass_transform.adoc[]
+
+=== Issues
+
+1) Some early Adreno drivers (October 2019 through March 2020) advertised
+support for this extension but expected VK_STRUCTURE_TYPE values different
+from those in the vukan headers.
+To cover all Adreno devices on the market, applications need to detect the
+driver version and use the appropriate VK_STRUCTURE_TYPE values from the
+table below.
+
+The driver version reported in VkPhysicalDeviceProperties.driverVersion is a
+code:uint32_t type.
+You can decode the code:uint32_t value into a major.minor.patch version as
+shown below:
+
+[source,c]
+----
+uint32_t  major = ((driverVersion) >> 22);
+uint32_t  minor = ((driverVersion) >> 12) & 0x3ff);
+uint32_t  patch = ((driverVersion) & 0xfff);
+----
+
+If the Adreno major.minor.patch version is greater than or equal to to
+512.469.0, then simply use the VK_STRUCTURE_TYPE values as defined in
+vulkan_core.h.
+If the version is less than or equal to to 512.468.0, then use the alternate
+values for the two VK_STRUCTURE_TYPEs in the table below.
+
+.fname:Adreno Driver Requirements
+[width="80%",options="header"]
+|====
+|    2+| Adreno Driver Version
+|                      | 512.468.0 and earlier  | 512.469.0 and later
+|VK_STRUCTURE_TYPE_ RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM                     | 1000282000 | 1000282001
+|VK_STRUCTURE_TYPE_ COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM| 1000282001 | 1000282000
+|====
+
+2) Should the extension support only rotations (e.g. 90, 180, 270-degrees),
+or also mirror transforms (e.g. vertical flips)? Mobile use cases only
+require rotation.
+Other display systems such as projectors might require a flipped transform.
+
+*RESOLVED*: In this version of the extension, the functionality is
+restricted to 90, 180, and 270-degree rotations to address mobile use cases.
+
+3) How does this extension interact with VK_EXT_fragment_density_map?
+
+*RESOLVED* Some implementations may not be able to support a render pass
+that enables both render pass transform and fragment density maps.
+For simplicity, this extension disallows enabling both features within a
+single render pass.
+
+4) What should this extension be named?
+
+We considered names such as "`rotated_rendering`", "`pre_rotation`" and
+others.
+Since the functionality is limited to a render pass, it seemed the name
+should include "`render_pass`".
+While the current extension is limited to rotations, it could be extended to
+other transforms (like mirror) in the future.
+
+*RESOLVED* The name "`render_pass_transform`" seems like the most accurate
+description of the introduced functionality.
+
+5) How does this extension interact with VK_KHR_fragment_shading_rate?
+
+*RESOLVED*: For the same reasons as issue 3, this extension disallows
+enabling both pname:pFragmentShadingRateAttachment and render pass transform
+within a single render pass.
+
+However, pipeline shading rate and primitive shading rate are supported, and
+their respective pname:fragmentSize and code:PrimitiveShadingRateKHR are
+provided in the current (non-rotated) coordinate system.
+The implementation is responsible for transforming them to the rotated
+coordinate system.
+
+The <<primsrast-fragment-shading-rate, set of supported shading rates>> may:
+be different per transform.
+Supported rates queried from
+flink:vkGetPhysicalDeviceFragmentShadingRatesKHR are in the native (rotated)
+coordinate system.
+This means that the application must: swap the x/y of the reported rates to
+get the set of rates supported for 90 and 270 degree rotation.
+
+
+=== Version History
+
+  * Revision 1, 2020-02-05 (Jeff Leger)
+  * Revision 2, 2021-03-09 (Matthew Netsch)
+  ** Adds interactions with VK_KHR_fragment_shading_rate
+  * Revision 3, 2022-07-11 (Arpit Agarwal)
+  ** Adds interactions with VK_QCOM_tile_properties
+
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_rotated_copy_commands.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_rotated_copy_commands.adoc
new file mode 100644
index 0000000..a03d9b8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_rotated_copy_commands.adoc
@@ -0,0 +1,62 @@
+// Copyright (c) 2020 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_rotated_copy_commands.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-09-18
+*Interactions and External Dependencies*::
+  - None
+*Contributors*::
+  - Jeff Leger, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension extends adds an optional rotation transform to copy commands
+flink:vkCmdBlitImage2KHR, flink:vkCmdCopyImageToBuffer2KHR and
+flink:vkCmdCopyBufferToImage2KHR.
+When copying between two resources, where one resource contains rotated
+content and the other does not, a rotated copy may be desired.
+This extension may be used in combination with VK_QCOM_render_pass_transform
+which adds rotated render passes.
+
+This extension adds an extension structure to the following commands:
+vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
+vkCmdCopyBufferToImage2KHR
+
+
+=== Issues
+
+1) What is an appropriate name for the added extension structure? The style
+guide says "`Structures which extend other structures through the
+pname:pNext chain should reflect the name of the base structure they
+extend.`", but in this case a single extension structure is used to extend
+three base structures (vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
+vkCmdCopyBufferToImage2KHR).
+Creating three identical structures with unique names seemed undesirable.
+
+*RESOLVED*: Deviate from the style guide for extension structure naming.
+
+
+2) Should this extension add a rotation capability to vkCmdCopyImage2KHR?
+
+*RESOLVED*: No.
+Use of rotated vkCmdBlitImage2KHR can fully address this use case.
+
+3) Should this extension add a rotation capability to vkCmdResolveImage2KHR?
+
+*RESOLVED* No.
+Use of vkCmdResolveImage2KHR is very slow and extremely bandwidth intensive
+on Qualcomm's GPU architecture and use of pResolveAttachments in
+vkRenderPass is the strongly preferred approach.
+Therefore, we choose not to introduce a rotation capability to
+vkCmdResolveImage2KHR.
+
+include::{generated}/interfaces/VK_QCOM_rotated_copy_commands.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-09-19 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_tile_properties.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_tile_properties.adoc
new file mode 100644
index 0000000..ac6bb59
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_tile_properties.adoc
@@ -0,0 +1,29 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_tile_properties.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-11
+*Interactions and External Dependencies*::
+  - This extension interacts with `apiext:VK_EXT_subpass_merge_feedback`
+*Contributors*::
+  - Jonathan Wicks, Qualcomm Technologies, Inc.
+  - Jonathan Tinkham, Qualcomm Technologies, Inc.
+  - Arpit Agarwal, Qualcomm Technologies, Inc.
+  - Jeff Leger, Qualcomm Technologies, Inc.
+
+=== Description
+
+This extension allows an application to query the tile properties.
+This extension supports both renderpasses and dynamic rendering.
+
+include::{generated}/interfaces/VK_QCOM_tile_properties.adoc[]
+
+=== Version History
+
+  * Revision 1, 2022-07-11 (Arpit Agarwal)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_ycbcr_degamma.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_ycbcr_degamma.adoc
new file mode 100644
index 0000000..85325be
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QCOM_ycbcr_degamma.adoc
@@ -0,0 +1,88 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_ycbcr_degamma.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-07-31
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  None
+*Contributors*::
+  - Jeff Leger, Qualcomm
+  - Jonathan Wicks, Qualcomm
+
+=== Description
+
+This extension allows implementations to expose support for "`sRGB EOTF`"
+also known as "`sRGB degamma`", used in combination with images using 8-bit
+{YCbCr} formats.
+In addition, the degamma can be selectively applied to the Y (luma) or CrCb
+(chroma).
+
+`apiext:VK_KHR_sampler_ycbcr_conversion` adds support for {YCbCr}
+conversion, but allows texture sampling in a non-linear space which can
+cause artifacts.
+This extension allows implementations to expose sRGB degamma for {YCbCr}
+formats, which is performed during texture filtering, allowing texture
+filtering to operate in a linear space.
+
+include::{generated}/interfaces/VK_QCOM_ycbcr_degamma.adoc[]
+
+=== Issues
+
+1) Which {YCbCr} formats support the degamma feature?
+
+*RESOLVED*: For implementations that support the extension, each format that
+contains 8-bit R, G, and B components and supports either
+ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or
+ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT must support degamma.
+
+Since non-compressed Vulkan sRGB formats are already limited to 8-bit
+components, and since Adreno supports degamma for all 8bit {YCbCr} formats,
+this extension does not introduce a new VK_FORMAT_FEATURE* bit for the
+degamma feature.
+
+2) On which {YCbCr} components is the degamma applied?
+
+*RESOLVED*: While degamma is expected to be applied to only the Y (luma)
+component, the extension provides the ability to selectively enable degamma
+for both the Y (luma) and/or CbCr (chroma) components.
+
+3) Should degamma be enabled for the sampler object or for the image view
+object?
+
+*RESOLVED*: Both.
+This extension extends slink:VkSamplerYcbcrConversionCreateInfo and the
+specification already requires that both sampler and view objects must be
+created with an _identical_ slink:VkSamplerYcbcrConversionCreateInfo in
+their pNext chains.
+
+4) Why apply the "`sRGB`" transfer function directly to {YCbCr} data when it
+would be more correct to use the "`ITU transfer function`", and do so only
+after the values have been converted into non-linear R'G'B'?
+
+*RESOLVED*: {YCbCr} is frequently stored according to standards (e.g. BT.601
+and BT.709) that specify that the conversion between linear and non-linear
+should use the ITU Transfer function.
+The ITU transfer function is mathematically different from the sRGB transfer
+function and while sRGB and ITU define similar curves, the difference is
+significant.
+Performing the "`sRGB degamma`" prior to range expansion can introduce
+artifacts if the content uses ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW
+encoding.
+Nevertheless, using sRGB can make sense for certain use-cases where camera
+YCbCr images are known to be encoded with sRGB (or a pure gamma 2.2)
+transfer function and are known to use full-range encoding.
+
+For those use-cases, this extension leverages the GPU ability to enable sRGB
+degamma at little cost, and can improve quality because texture filtering is
+able to occur in linear space.
+
+=== Version History
+
+  * Revision 1, 2023-07-31 (Jeff Leger)
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_external_memory_screen_buffer.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_external_memory_screen_buffer.adoc
new file mode 100644
index 0000000..0a76ce7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_external_memory_screen_buffer.adoc
@@ -0,0 +1,41 @@
+// Copyright (c) 2023 Blackberry Limited
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QNX_external_memory_screen_buffer.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2023-05-17
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Gorchak, QNX / Blackberry Limited
+  - Aaron Ruby, QNX / Blackberry Limited
+
+=== Description
+
+This extension enables an application to import QNX Screen
+code:_screen_buffer objects created outside of the Vulkan device into Vulkan
+memory objects, where they can be bound to images and buffers.
+
+Some code:_screen_buffer images have implementation-defined _external
+formats_ that may: not correspond to Vulkan formats.
+Sampler {YCbCr} conversion can: be used to sample from these images and
+convert them to a known color space.
+
+code:_screen_buffer is strongly typed, so naming the handle type is
+redundant.
+The internal layout and therefore size of a code:_screen_buffer image may
+depend on native usage flags that do not have corresponding Vulkan
+counterparts.
+
+include::{generated}/interfaces/VK_QNX_external_memory_screen_buffer.adoc[]
+
+=== Issues
+
+=== Version History
+
+  * Revision 1, 2023-05-17 (Mike Gorchak)
+  ** Initial version
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_screen_surface.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_screen_surface.adoc
new file mode 100644
index 0000000..61032e3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_QNX_screen_surface.adoc
@@ -0,0 +1,29 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QNX_screen_surface.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-01-11
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Gorchak, BlackBerry Limited
+
+=== Description
+
+The `VK_QNX_screen_surface` extension is an instance extension.
+It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
+the `apiext:VK_KHR_surface` extension) that refers to a QNX Screen
+code:window, as well as a query to determine support for rendering to a QNX
+Screen compositor.
+
+include::{generated}/interfaces/VK_QNX_screen_surface.adoc[]
+
+=== Version History
+
+  * Revision 1, 2021-01-11 (Mike Gorchak)
+  ** Initial draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_SEC_amigo_profiling.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_SEC_amigo_profiling.adoc
new file mode 100644
index 0000000..669eb0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_SEC_amigo_profiling.adoc
@@ -0,0 +1,78 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_SEC_amigo_profiling.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-07-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ralph Potter, Samsung
+  - Sangrak Oh, Samsung
+  - Jinku Kang, Samsung
+
+=== Description
+
+This extension is intended to communicate information from layered API
+implementations such as ANGLE to internal proprietary system schedulers.
+It has no behavioural implications beyond enabling more intelligent
+behaviour from the system scheduler.
+
+Application developers should avoid using this extension.
+It is documented solely for the benefit of tools and layer developers, who
+may need to manipulate pname:pNext chains that include these structures.
+
+[NOTE]
+.Note
+====
+There is currently no specification language written for this extension.
+The links to APIs defined by the extension are to stubs that only include
+generated content such as API declarations and implicit valid usage
+statements.
+====
+
+[NOTE]
+.Note
+====
+This extension is only intended for use in specific embedded environments
+with known implementation details, and is therefore undocumented.
+====
+
+include::{generated}/interfaces/VK_SEC_amigo_profiling.adoc[]
+
+ifndef::isrefpage[]
+
+=== Stub API References
+
+[open,refpage='VkPhysicalDeviceAmigoProfilingFeaturesSEC',desc='Stub description of VkPhysicalDeviceAmigoProfilingFeaturesSEC',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkPhysicalDeviceAmigoProfilingFeaturesSEC.adoc[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAmigoProfilingFeaturesSEC.adoc[]
+--
+
+[open,refpage='VkAmigoProfilingSubmitInfoSEC',desc='Stub description of VkAmigoProfilingSubmitInfoSEC',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkAmigoProfilingSubmitInfoSEC.adoc[]
+
+include::{generated}/validity/structs/VkAmigoProfilingSubmitInfoSEC.adoc[]
+--
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2022-07-29 (Ralph Potter)
+  ** Initial specification
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_descriptor_set_host_mapping.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_descriptor_set_host_mapping.adoc
new file mode 100644
index 0000000..44cb80d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_descriptor_set_host_mapping.adoc
@@ -0,0 +1,106 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_VALVE_descriptor_set_host_mapping.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2022-02-22
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Hans-Kristian Arntzen, Valve
+
+=== Description
+
+This extension allows applications to directly query a host pointer for a
+slink:VkDescriptorSet which can: be used to copy descriptors between
+descriptor sets without the use of an API command.
+Memory offsets and sizes for descriptors can: be queried from a
+slink:VkDescriptorSetLayout as well.
+
+[NOTE]
+.Note
+====
+There is currently no specification language written for this extension.
+The links to APIs defined by the extension are to stubs that only include
+generated content such as API declarations and implicit valid usage
+statements.
+====
+
+[NOTE]
+.Note
+====
+This extension is only intended for use in specific embedded environments
+with known implementation details, and is therefore undocumented.
+====
+
+include::{generated}/interfaces/VK_VALVE_descriptor_set_host_mapping.adoc[]
+
+ifndef::isrefpage[]
+
+=== Stub API References
+
+[open,refpage='vkGetDescriptorSetLayoutHostMappingInfoVALVE',desc='Stub description of vkGetDescriptorSetLayoutHostMappingInfoVALVE',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkGetDescriptorSetLayoutHostMappingInfoVALVE.adoc[]
+
+include::{generated}/validity/protos/vkGetDescriptorSetLayoutHostMappingInfoVALVE.adoc[]
+--
+
+[open,refpage='vkGetDescriptorSetHostMappingVALVE',desc='Stub description of vkGetDescriptorSetHostMappingVALVE',type='protos']
+--
+There is currently no specification language written for this command.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/protos/vkGetDescriptorSetHostMappingVALVE.adoc[]
+
+include::{generated}/validity/protos/vkGetDescriptorSetHostMappingVALVE.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',desc='Stub description of VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE.adoc[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE.adoc[]
+--
+
+[open,refpage='VkDescriptorSetBindingReferenceVALVE',desc='Stub description of VkDescriptorSetBindingReferenceVALVE',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkDescriptorSetBindingReferenceVALVE.adoc[]
+
+include::{generated}/validity/structs/VkDescriptorSetBindingReferenceVALVE.adoc[]
+--
+
+[open,refpage='VkDescriptorSetLayoutHostMappingInfoVALVE',desc='Stub description of VkDescriptorSetLayoutHostMappingInfoVALVE',type='structs']
+--
+There is currently no specification language written for this type.
+This section acts only as placeholder and to avoid dead links in the
+specification and reference pages.
+
+include::{generated}/api/structs/VkDescriptorSetLayoutHostMappingInfoVALVE.adoc[]
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutHostMappingInfoVALVE.adoc[]
+--
+
+endif::isrefpage[]
+
+=== Version History
+
+  * Revision 1, 2022-02-22 (Hans-Kristian Arntzen)
+  ** Initial specification
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_mutable_descriptor_type.adoc b/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_mutable_descriptor_type.adoc
new file mode 100644
index 0000000..dd3488c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/VK_VALVE_mutable_descriptor_type.adoc
@@ -0,0 +1,45 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_VALVE_mutable_descriptor_type.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-12-02
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Hans-Kristian Arntzen, Valve
+
+=== Description
+
+This extension allows applications to reduce descriptor memory footprint by
+allowing a descriptor to be able to mutate to a given list of descriptor
+types depending on which descriptor types are written into, or copied into a
+descriptor set.
+
+The main use case this extension intends to address is descriptor indexing
+with ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT where the
+descriptor types are completely generic, as this means applications can
+allocate one large descriptor set, rather than having one large descriptor
+set per descriptor type, which significantly bloats descriptor memory usage
+and causes performance issues.
+
+This extension also adds a mechanism to declare that a descriptor pool, and
+therefore the descriptor sets that are allocated from it, reside only in
+host memory; as such these descriptors can only be updated/copied, but not
+bound.
+
+These features together allow much more efficient emulation of the raw D3D12
+binding model.
+This extension is primarily intended to be useful for API layering efforts.
+
+include::{generated}/interfaces/VK_VALVE_mutable_descriptor_type.adoc[]
+
+=== Version History
+
+  * Revision 1, 2020-12-01 (Joshua Ashton, Hans-Kristian Arntzen)
+  ** Initial specification, squashed from public draft.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/boilerplate.adoc b/codegen/vulkan/vulkan-docs-next/appendices/boilerplate.adoc
new file mode 100644
index 0000000..2469a13
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/boilerplate.adoc
@@ -0,0 +1,452 @@
+// Copyright 2016-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[boilerplate]]
+= API Boilerplate
+
+This appendix defines Vulkan API features that are infrastructure required
+for a complete functional description of Vulkan, but do not logically belong
+elsewhere in the Specification.
+
+
+[[boilerplate-headers]]
+== Vulkan Header Files
+
+Vulkan is defined as an API in the C99 language.
+Khronos provides a corresponding set of header files for applications using
+the API, which may be used in either C or C++ code.
+The interface descriptions in the specification are the same as the
+interfaces defined in these header files, and both are derived from the
+`vk.xml` XML API Registry, which is the canonical machine-readable
+description of the Vulkan API.
+The Registry, scripts used for processing it into various forms, and
+documentation of the registry schema are available as described at
+ifndef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkan/#apiregistry .]
+ifdef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkansc/#apiregistry .]
+
+Language bindings for other languages can be defined using the information
+in the Specification and the Registry.
+Khronos does not provide any such bindings, but third-party developers have
+created some additional bindings.
+
+
+[[boilerplate-vulkan-h]]
+=== Vulkan Combined API Header `{full_header}` (Informative)
+
+Applications normally will include the header `{full_header}`.
+In turn, `{full_header}` always includes the following headers:
+
+  * <<boilerplate-platform-macros,`vk_platform.h`>>, defining
+    platform-specific macros and headers.
+  * <<boilerplate-vulkan-core,`{core_header}`>>, defining APIs for the
+    Vulkan core and all registered extensions _other_ than
+    <<boilerplate-wsi-header, window system-specific>> and
+    <<boilerplate-provisional-header, provisional>> extensions, which are
+    included in separate header files.
+
+In addition, specific preprocessor macros defined at the time
+`{full_header}` is included cause header files for the corresponding window
+system-specific and provisional interfaces to be included, as described
+below.
+
+
+[[boilerplate-platform-macros]]
+=== Vulkan Platform-Specific Header `vk_platform.h` (Informative)
+
+Platform-specific macros and interfaces are defined in `vk_platform.h`.
+These macros are used to control platform-dependent behavior, and their
+exact definitions are under the control of specific platforms and Vulkan
+implementations.
+
+
+[[boilerplate-platform-specific-calling-conventions]]
+==== Platform-Specific Calling Conventions
+
+On many platforms the following macros are empty strings, causing platform-
+and compiler-specific default calling conventions to be used.
+
+[open,refpage='VKAPI_ATTR',desc='Vulkan function attribute macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_CALL VKAPI_PTR']
+--
+dname:VKAPI_ATTR is a macro placed before the return type in Vulkan API
+function declarations.
+This macro controls calling conventions for C++11 and GCC/Clang-style
+compilers.
+--
+
+[open,refpage='VKAPI_CALL',desc='Vulkan function calling conventions macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_ATTR VKAPI_PTR']
+--
+dname:VKAPI_CALL is a macro placed after the return type in Vulkan API
+function declarations.
+This macro controls calling conventions for MSVC-style compilers.
+--
+
+[open,refpage='VKAPI_PTR',desc='Vulkan function pointer calling conventions macro',type='freeform',anchor='boilerplate-platform-specific-calling-conventions',xrefs='VKAPI_ATTR VKAPI_CALL']
+--
+dname:VKAPI_PTR is a macro placed between the '(' and '*' in Vulkan API
+function pointer declarations.
+This macro also controls calling conventions, and typically has the same
+definition as dname:VKAPI_ATTR or dname:VKAPI_CALL, depending on the
+compiler.
+--
+
+With these macros, a Vulkan function declaration takes the form of:
+
+[source,c++]
+----
+VKAPI_ATTR <return_type> VKAPI_CALL <command_name>(<command_parameters>);
+----
+
+Additionally, a Vulkan function pointer type declaration takes the form of:
+
+[source,c++]
+----
+typedef <return_type> (VKAPI_PTR *PFN_<command_name>)(<command_parameters>);
+----
+
+
+[[boilerplate-platform-specific-header-control]]
+==== Platform-Specific Header Control
+
+[open,refpage='VK_NO_STDINT_H',desc='Control definition of <stdint.h> types',type='freeform',anchor='boilerplate-platform-specific-header-control']
+--
+If the dname:VK_NO_STDINT_H macro is defined by the application at compile
+time, extended integer types used by the Vulkan API, such as code:uint8_t,
+must: also be defined by the application.
+Otherwise, the Vulkan headers will not compile.
+If dname:VK_NO_STDINT_H is not defined, the system `<stdint.h>` is used to
+define these types.
+There is a fallback path when Microsoft Visual Studio version 2008 and
+earlier versions are detected at compile time.
+--
+
+[open,refpage='VK_NO_STDDEF_H',desc='Control definition of <stddef.h> types',type='freeform',anchor='boilerplate-platform-specific-header-control']
+--
+If the dname:VK_NO_STDDEF_H macro is defined by the application at compile
+time, code:size_t, must: also be defined by the application.
+Otherwise, the Vulkan headers will not compile.
+If dname:VK_NO_STDDEF_H is not defined, the system `<stddef.h>` is used to
+define this type.
+--
+
+
+[[boilerplate-vulkan-core]]
+=== Vulkan Core API Header `{core_header}`
+
+Applications that do not make use of window system-specific extensions may
+simply include `{core_header}` instead of `{full_header}`, although there is
+usually no reason to do so.
+In addition to the Vulkan API, `{core_header}` also defines a small number
+of C preprocessor macros that are described below.
+
+ifdef::VKSC_VERSION_1_0[]
+`{core_header_hpp}` provides the same functionality as `{core_header}`, but
+does so in a manner that is aligned for compliance with MISRA C++.
+In contrast, `{core_header}` is aligned for compliance with MISRA C:2012.
+endif::VKSC_VERSION_1_0[]
+
+
+
+
+==== Vulkan Header File Version Number
+
+[open,refpage='VK_HEADER_VERSION',desc='Vulkan header file version number',type='defines']
+--
+dname:VK_HEADER_VERSION is the version number of the `{core_header}` header.
+This value is kept synchronized with the patch version of the released
+Specification.
+
+include::{generated}/api/defines/VK_HEADER_VERSION.adoc[]
+--
+
+[open,refpage='VK_HEADER_VERSION_COMPLETE',desc='Vulkan header file complete version number',type='defines']
+--
+dname:VK_HEADER_VERSION_COMPLETE is the complete version number of the
+`{core_header}` header, comprising the major, minor, and patch versions.
+The major/minor values are kept synchronized with the complete version of
+the released Specification.
+This value is intended for use by automated tools to identify exactly which
+version of the header was used during their generation.
+
+Applications should not use this value as their
+slink:VkApplicationInfo::pname:apiVersion.
+Instead applications should explicitly select a specific fixed major/minor
+API version using, for example, one of the dname:VK_API_VERSION_*_* values.
+
+include::{generated}/api/defines/VK_HEADER_VERSION_COMPLETE.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='VK_API_VERSION',desc='Deprecated version number macro',type='defines']
+--
+dname:VK_API_VERSION is now commented out of `{core_header}` and cannot: be
+used.
+
+include::{generated}/api/defines/VK_API_VERSION.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+==== Vulkan Handle Macros
+
+[open,refpage='VK_DEFINE_HANDLE',desc='Declare a dispatchable object handle',type='defines',xrefs='VkCommandBuffer VkDevice VkInstance VkPhysicalDevice VkQueue']
+--
+dname:VK_DEFINE_HANDLE defines a <<fundamentals-objectmodel-overview,
+dispatchable handle>> type.
+
+include::{generated}/api/defines/VK_DEFINE_HANDLE.adoc[]
+
+  * pname:object is the name of the resulting C type.
+
+The only dispatchable handle types are those related to device and instance
+management, such as slink:VkDevice.
+--
+
+[open,refpage='VK_DEFINE_NON_DISPATCHABLE_HANDLE',desc='Declare a non-dispatchable object handle',type='defines',xrefs='VkBuffer']
+--
+dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE defines a
+<<fundamentals-objectmodel-overview, non-dispatchable handle>> type.
+
+include::{generated}/api/defines/VK_DEFINE_NON_DISPATCHABLE_HANDLE.adoc[]
+
+  * pname:object is the name of the resulting C type.
+
+Most Vulkan handle types, such as slink:VkBuffer, are non-dispatchable.
+
+[NOTE]
+.Note
+====
+The `{core_header}` header allows the
+dlink:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dlink:VK_NULL_HANDLE definitions
+to be overridden by the application.
+If dlink:VK_DEFINE_NON_DISPATCHABLE_HANDLE is already defined when
+`{core_header}` is compiled, the default definitions for
+dlink:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dlink:VK_NULL_HANDLE are
+skipped.
+This allows the application to define a binary-compatible custom handle
+which may: provide more type-safety or other features needed by the
+application.
+Applications must: not define handles in a way that is not binary compatible
+- where binary compatibility is platform dependent.
+====
+--
+
+[open,refpage='VK_NULL_HANDLE',desc='Reserved non-valid object handle',type='defines']
+--
+dname:VK_NULL_HANDLE is a reserved value representing a non-valid object
+handle.
+It may be passed to and returned from Vulkan commands only when
+<<fundamentals-validusage-handles, specifically allowed>>.
+
+include::{generated}/api/defines/VK_NULL_HANDLE.adoc[]
+--
+
+[open,refpage='VK_USE_64_BIT_PTR_DEFINES',desc='Defines whether non-dispatchable handles are a 64-bit pointer type or a 64-bit unsigned integer type',type='defines']
+--
+dname:VK_USE_64_BIT_PTR_DEFINES defines whether the default non-dispatchable
+handles are declared using either a 64-bit pointer type or a 64-bit unsigned
+integer type.
+
+dname:VK_USE_64_BIT_PTR_DEFINES is set to '1' to use a 64-bit pointer type
+or any other value to use a 64-bit unsigned integer type.
+
+include::{generated}/api/defines/VK_USE_64_BIT_PTR_DEFINES.adoc[]
+
+[NOTE]
+.Note
+====
+The `{core_header}` header allows the dname:VK_USE_64_BIT_PTR_DEFINES
+definition to be overridden by the application.
+This allows the application to select either a 64-bit pointer type or a
+64-bit unsigned integer type for non-dispatchable handles in the case where
+the predefined preprocessor check does not identify the desired
+configuration.
+====
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+This macro was introduced starting with the Vulkan 1.2.174 headers, and its
+availability can be checked at compile time by requiring
+`dname:VK_HEADER_VERSION >= 174`.
+
+It is not available if you are using older headers, such as may be shipped
+with an older Vulkan SDK.
+Developers requiring this functionality may wish to include a copy of the
+current Vulkan headers with their project in this case.
+====
+endif::VKSC_VERSION_1_0[]
+--
+
+
+[[boilerplate-wsi-header]]
+== Window System-Specific Header Control (Informative)
+
+[open,refpage='WSIheaders',desc='Control inclusion of window system interface extensions',type='freeform',anchor='boilerplate-wsi-header',xrefs='provisional-headers']
+--
+To use a Vulkan extension supporting a platform-specific window system,
+header files for that window system must: be included at compile time, or
+platform-specific types must: be forward-declared.
+The Vulkan header files are unable to determine whether or not an external
+header is available at compile time, so platform-specific extensions are
+provided in separate headers from the core API and platform-independent
+extensions, allowing applications to decide which ones they need to be
+defined and how the external headers are included.
+
+Extensions dependent on particular sets of platform headers, or that
+forward-declare platform-specific types, are declared in a header named for
+that platform.
+Before including these platform-specific Vulkan headers, applications must:
+include both `{core_header}` and any external native headers the platform
+extensions depend on.
+
+As a convenience for applications that do not need the flexibility of
+separate platform-specific Vulkan headers, `{full_header}` includes
+`{core_header}`, and then conditionally includes platform-specific Vulkan
+headers and the external headers they depend on.
+Applications control which platform-specific headers are included by
+#defining macros before including `{full_header}`.
+
+The correspondence between platform-specific extensions, external headers
+they require, the platform-specific header which declares them, and the
+preprocessor macros which enable inclusion by `{full_header}` are shown in
+the <<boilerplate-wsi-header-table,following table>>.
+
+[[boilerplate-wsi-header-table]]
+.Window System Extensions and Headers
+[options="header"]
+|====
+| Extension Name                        | Window System Name     | Platform-specific Header | Required External Headers  | Controlling `{full_header}` Macro
+| `apiext:VK_KHR_android_surface`       | Android                | `vulkan_android.h`       | None                       | dname:VK_USE_PLATFORM_ANDROID_KHR
+| `apiext:VK_KHR_wayland_surface`       | Wayland                | `vulkan_wayland.h`       | `<wayland-client.h>`       | dname:VK_USE_PLATFORM_WAYLAND_KHR
+| `apiext:VK_KHR_win32_surface`,
+  `apiext:VK_KHR_external_memory_win32`,
+  `apiext:VK_KHR_win32_keyed_mutex`,
+  `apiext:VK_KHR_external_semaphore_win32`,
+  `apiext:VK_KHR_external_fence_win32`,
+  `apiext:VK_NV_external_memory_win32`,
+  `apiext:VK_NV_win32_keyed_mutex`
+                                        | Microsoft Windows      | `vulkan_win32.h`         | `<windows.h>`              | dname:VK_USE_PLATFORM_WIN32_KHR
+| `apiext:VK_KHR_xcb_surface`           | X11 Xcb                | `vulkan_xcb.h`           | `<xcb/xcb.h>`              | dname:VK_USE_PLATFORM_XCB_KHR
+| `apiext:VK_KHR_xlib_surface`          | X11 Xlib               | `vulkan_xlib.h`          | `<X11/Xlib.h>`             | dname:VK_USE_PLATFORM_XLIB_KHR
+| `apiext:VK_EXT_directfb_surface`      | DirectFB               | `vulkan_directfb.h`      | `<directfb/directfb.h>`    | dname:VK_USE_PLATFORM_DIRECTFB_EXT
+| `apiext:VK_EXT_acquire_xlib_display`  | X11 XRAndR             | `vulkan_xlib_xrandr.h`   | `<X11/Xlib.h>`,
+                                                                                       `<X11/extensions{wbro}/Xrandr.h>` | dname:VK_USE_PLATFORM_XLIB_XRANDR_EXT
+| `apiext:VK_GGP_stream_descriptor_surface`,
+  `apiext:VK_GGP_frame_token`           | Google Games Platform  | `vulkan_ggp.h`           | <ggp_c/vulkan_types.h>     | dname:VK_USE_PLATFORM_GGP
+| `apiext:VK_MVK_ios_surface`           | iOS                    | `vulkan_ios.h`           | None                       | dname:VK_USE_PLATFORM_IOS_MVK
+| `apiext:VK_MVK_macos_surface`         | macOS                  | `vulkan_macos.h`         | None                       | dname:VK_USE_PLATFORM_MACOS_MVK
+| `apiext:VK_NN_vi_surface`             | VI                     | `vulkan_vi.h`            | None                       | dname:VK_USE_PLATFORM_VI_NN
+| `apiext:VK_FUCHSIA_imagepipe_surface` | Fuchsia                | `vulkan_fuchsia.h`       | `<zircon/types.h>`         | dname:VK_USE_PLATFORM_FUCHSIA
+| `apiext:VK_EXT_metal_surface`         | Metal on CoreAnimation | `vulkan_metal.h`         | None                       | dname:VK_USE_PLATFORM_METAL_EXT
+| `apiext:VK_QNX_screen_surface`        | QNX Screen             | `vulkan_screen.h`        | `<screen/screen.h>`        | dname:VK_USE_PLATFORM_SCREEN_QNX
+ifdef::VKSC_VERSION_1_0[]
+| `apiext:VK_NV_external_sci_sync`, `apiext:VK_NV_external_sci_sync2`,
+  `apiext:VK_NV_external_memory_sci_buf`| NVIDIA Sci             | `vulkan_sci.h`           | `<nvscisync.h>`,
+                                                                                              `<nvscibuf.h>`             | dname:VK_USE_PLATFORM_SCI
+endif::VKSC_VERSION_1_0[]
+|====
+
+[NOTE]
+.Note
+====
+This section describes the purpose of the headers independently of the
+specific underlying functionality of the window system extensions
+themselves.
+Each extension name will only link to a description of that extension when
+viewing a specification built with that extension included.
+====
+--
+
+
+[[boilerplate-provisional-header]]
+== Provisional Extension Header Control (Informative)
+
+[open,refpage='provisional-headers',desc='Control inclusion of provisional extensions',type='freeform',alias='VK_ENABLE_BETA_EXTENSIONS',anchor='boilerplate-provisional-header',xrefs='WSIheaders']
+--
+_Provisional_ extensions should: not be used in production applications.
+The functionality defined by such extensions may: change in ways that break
+backwards compatibility between revisions, and before final release of a
+non-provisional version of that extension.
+
+Provisional extensions are defined in a separate _provisional header_,
+`vulkan_beta.h`, allowing applications to decide whether or not to include
+them.
+The mechanism is similar to <<boilerplate-wsi-header, window system-specific
+headers>>: before including `vulkan_beta.h`, applications must: include
+`{core_header}`.
+
+[NOTE]
+.Note
+====
+Sometimes a provisional extension will include a subset of its interfaces in
+`{core_header}`.
+This may occur if the provisional extension is promoted from an existing
+vendor or EXT extension and some of the existing interfaces are defined as
+aliases of the provisional extension interfaces.
+All other interfaces of that provisional extension which are not aliased
+will be included in `vulkan_beta.h`.
+====
+
+As a convenience for applications, `{full_header}` conditionally includes
+`vulkan_beta.h`.
+Applications can: control inclusion of `vulkan_beta.h` by #defining the
+macro etext:VK_ENABLE_BETA_EXTENSIONS before including `{full_header}`.
+
+[NOTE]
+.Note
+====
+Starting in version 1.2.171 of the Specification, all provisional enumerants
+are protected by the macro etext:VK_ENABLE_BETA_EXTENSIONS.
+Applications needing to use provisional extensions must always define this
+macro, even if they are explicitly including `vulkan_beta.h`.
+This is a minor change to behavior, affecting only provisional extensions.
+====
+
+[NOTE]
+.Note
+====
+This section describes the purpose of the provisional header independently
+of the specific provisional extensions which are contained in that header at
+any given time.
+The extension appendices for provisional extensions note their provisional
+status, and link back to this section for more information.
+Provisional extensions are intended to provide early access for
+bleeding-edge developers, with the understanding that extension interfaces
+may change in response to developer feedback.
+Provisional extensions are very likely to eventually be updated and released
+as non-provisional extensions, but there is no guarantee this will happen,
+or how long it will take if it does happen.
+====
+--
+
+
+ifndef::VKSC_VERSION_1_0[]
+[[boilerplate-video-std-headers]]
+== Video Std Headers
+
+Performing video coding operations usually involves the application having
+to provide various parameters, data structures, or other syntax elements
+specific to the particular video compression standard used, and the
+associated semantics are covered by the specification of those.
+
+The interface descriptions of these are available in the header files
+derived from the `video.xml` XML file, which is the canonical
+machine-readable description of data structures and enumerations that are
+associated with the externally-provided video compression standards.
+
+[[boilerplate-video-std-header-table]]
+.Video Std Headers
+[options="header"]
+|====
+| Video Std Header Name               | Description                             | Header File                                      | Related Extensions
+| `vulkan_video_codecs_common`        | Codec-independent common definitions    | `<vk_video/vulkan_video_codecs_common.h>`        | -
+| `vulkan_video_codec_h264std`        | ITU-T H.264 common definitions          | `<vk_video/vulkan_video_codec_h264std.h>`        | apiext:VK_KHR_video_decode_h264, apiext:VK_EXT_video_encode_h264
+| `vulkan_video_codec_h264std_decode` | ITU-T H.264 decode-specific definitions | `<vk_video/vulkan_video_codec_h264std_decode.h>` | apiext:VK_KHR_video_decode_h264
+| `vulkan_video_codec_h264std_encode` | ITU-T H.264 encode-specific definitions | `<vk_video/vulkan_video_codec_h264std_encode.h>` | apiext:VK_EXT_video_encode_h264
+| `vulkan_video_codec_h265std`        | ITU-T H.265 common definitions          | `<vk_video/vulkan_video_codec_h265std.h>`        | apiext:VK_KHR_video_decode_h265, apiext:VK_EXT_video_encode_h265
+| `vulkan_video_codec_h265std_decode` | ITU-T H.265 decode-specific definitions | `<vk_video/vulkan_video_codec_h265std_decode.h>` | apiext:VK_KHR_video_decode_h265
+| `vulkan_video_codec_h265std_encode` | ITU-T H.265 encode-specific definitions | `<vk_video/vulkan_video_codec_h265std_encode.h>` | apiext:VK_EXT_video_encode_h265
+|====
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/compressedtex.adoc b/codegen/vulkan/vulkan-docs-next/appendices/compressedtex.adoc
new file mode 100644
index 0000000..4fab6c4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/compressedtex.adoc
@@ -0,0 +1,214 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[compressed_image_formats]]
+= Compressed Image Formats
+
+The compressed texture formats used by Vulkan are described in the
+specifically identified sections of the <<data-format,Khronos Data Format
+Specification>>, version 1.3.
+
+Unless otherwise described, the quantities encoded in these compressed
+formats are treated as normalized, unsigned values.
+
+Those formats listed as sRGB-encoded have in-memory representations of
+[eq]#R#, [eq]#G# and [eq]#B# components which are nonlinearly-encoded as
+[eq]#R'#, [eq]#G'#, and [eq]#B'#; any alpha component is unchanged.
+As part of filtering, the nonlinear [eq]#R'#, [eq]#G'#, and [eq]#B'# values
+are converted to linear [eq]#R#, [eq]#G#, and [eq]#B# components; any alpha
+component is unchanged.
+The conversion between linear and nonlinear encoding is performed as
+described in the "`KHR_DF_TRANSFER_SRGB`" section of the Khronos Data Format
+Specification.
+
+<<<
+
+[[appendix-compressedtex-bc]]
+== Block-Compressed Image Formats
+
+BC1, BC2 and BC3 formats are described in "`S3TC Compressed Texture Image
+Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
+BC4 and BC5 are described in the "`RGTC Compressed Texture Image Formats`"
+chapter.
+BC6H and BC7 are described in the "`BPTC Compressed Texture Image Formats`"
+chapter.
+
+.Mapping of Vulkan BC formats to descriptions
+[width="90%",options="header",cols="5,4"]
+|====
+| elink:VkFormat | <<data-format,Khronos Data Format Specification>> description
+2+^| Formats described in the "`S3TC Compressed Texture Image Formats`" chapter
+| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK |BC1 with no alpha
+| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK  |BC1 with no alpha, sRGB-encoded
+| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK|BC1 with alpha
+| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK |BC1 with alpha, sRGB-encoded
+| ename:VK_FORMAT_BC2_UNORM_BLOCK     |BC2
+| ename:VK_FORMAT_BC2_SRGB_BLOCK      |BC2, sRGB-encoded
+| ename:VK_FORMAT_BC3_UNORM_BLOCK     |BC3
+| ename:VK_FORMAT_BC3_SRGB_BLOCK      |BC3, sRGB-encoded
+2+^| Formats described in the "`RGTC Compressed Texture Image Formats`" chapter
+| ename:VK_FORMAT_BC4_UNORM_BLOCK     |BC4 unsigned
+| ename:VK_FORMAT_BC4_SNORM_BLOCK     |BC4 signed
+| ename:VK_FORMAT_BC5_UNORM_BLOCK     |BC5 unsigned
+| ename:VK_FORMAT_BC5_SNORM_BLOCK     |BC5 signed
+2+^| Formats described in the "`BPTC Compressed Texture Image Formats`" chapter
+| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK   |BC6H (unsigned version)
+| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK   |BC6H (signed version)
+| ename:VK_FORMAT_BC7_UNORM_BLOCK     |BC7
+| ename:VK_FORMAT_BC7_SRGB_BLOCK      |BC7, sRGB-encoded
+|====
+
+<<<
+
+[[appendix-compressedtex-etc2]]
+== ETC Compressed Image Formats
+
+The following formats are described in the "`ETC2 Compressed Texture Image
+Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
+
+.Mapping of Vulkan ETC formats to descriptions
+[options="header",cols="1,1"]
+|====
+| elink:VkFormat | <<data-format,Khronos Data Format Specification>> description
+| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK     |RGB ETC2
+| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK      |RGB ETC2 with sRGB encoding
+| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK   |RGB ETC2 with punch-through alpha
+| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK    |RGB ETC2 with punch-through alpha and sRGB
+| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK   |RGBA ETC2
+| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK    |RGBA ETC2 with sRGB encoding
+| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK         |Unsigned R11 EAC
+| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK         |Signed R11 EAC
+| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK      |Unsigned RG11 EAC
+| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK      |Signed RG11 EAC
+|====
+
+<<<
+
+[[appendix-compressedtex-astc]]
+== ASTC Compressed Image Formats
+
+ASTC formats are described in the "`ASTC Compressed Texture Image Formats`"
+chapter of the <<data-format,Khronos Data Format Specification>>.
+
+.Mapping of Vulkan ASTC formats to descriptions
+[width="90%",options="header",cols="55%,20%,25%"]
+|====
+| elink:VkFormat ^| Compressed texel block dimensions ^| Requested mode
+| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK        ^|[eq]#4 {times} 4#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK         ^|[eq]#4 {times} 4#   ^|sRGB
+| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK        ^|[eq]#5 {times} 4#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK         ^|[eq]#5 {times} 4#   ^|sRGB
+| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK        ^|[eq]#5 {times} 5#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK         ^|[eq]#5 {times} 5#   ^|sRGB
+| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK        ^|[eq]#6 {times} 5#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK         ^|[eq]#6 {times} 5#   ^|sRGB
+| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK        ^|[eq]#6 {times} 6#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK         ^|[eq]#6 {times} 6#   ^|sRGB
+| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK        ^|[eq]#8 {times} 5#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK         ^|[eq]#8 {times} 5#   ^|sRGB
+| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK        ^|[eq]#8 {times} 6#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK         ^|[eq]#8 {times} 6#   ^|sRGB
+| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK        ^|[eq]#8 {times} 8#   ^|Linear LDR
+| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK         ^|[eq]#8 {times} 8#   ^|sRGB
+| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK       ^|[eq]#10 {times} 5#  ^|Linear LDR
+| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK        ^|[eq]#10 {times} 5#  ^|sRGB
+| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK       ^|[eq]#10 {times} 6#  ^|Linear LDR
+| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK        ^|[eq]#10 {times} 6#  ^|sRGB
+| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK       ^|[eq]#10 {times} 8#  ^|Linear LDR
+| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK        ^|[eq]#10 {times} 8#  ^|sRGB
+| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK      ^|[eq]#10 {times} 10# ^|Linear LDR
+| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK       ^|[eq]#10 {times} 10# ^|sRGB
+| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK      ^|[eq]#12 {times} 10# ^|Linear LDR
+| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK       ^|[eq]#12 {times} 10# ^|sRGB
+| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK      ^|[eq]#12 {times} 12# ^|Linear LDR
+| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK       ^|[eq]#12 {times} 12# ^|sRGB
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+| ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK       ^|[eq]#4 {times} 4#   ^|HDR
+| ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK       ^|[eq]#5 {times} 4#   ^|HDR
+| ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK       ^|[eq]#5 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK       ^|[eq]#6 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK       ^|[eq]#6 {times} 6#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK       ^|[eq]#8 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK       ^|[eq]#8 {times} 6#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK       ^|[eq]#8 {times} 8#   ^|HDR
+| ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK      ^|[eq]#10 {times} 5#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK      ^|[eq]#10 {times} 6#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK      ^|[eq]#10 {times} 8#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK     ^|[eq]#10 {times} 10# ^|HDR
+| ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK     ^|[eq]#12 {times} 10# ^|HDR
+| ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK     ^|[eq]#12 {times} 12# ^|HDR
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+|====
+
+ifndef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+ASTC textures containing any HDR blocks should: not be passed into the API
+using an sRGB or UNORM texture format.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+ASTC textures containing HDR block encodings should: be passed to the API
+using an ASTC SFLOAT texture format.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+
+[NOTE]
+.Note
+====
+An HDR block in a texture passed using a LDR UNORM format will return the
+appropriate ASTC error color if the implementation supports only the ASTC
+LDR profile, but may result in either the error color or a decompressed HDR
+color if the implementation supports HDR decoding.
+====
+
+ifdef::VK_EXT_astc_decode_mode[]
+
+=== ASTC Decode Mode
+
+If the `VK_EXT_astc_decode_mode` extension is enabled, the decode mode is
+determined as follows:
+
+.Mapping of Vulkan ASTC decoding format to ASTC decoding modes
+[width="75%",options="header",cols="75%,25%"]
+|====
+| elink:VkFormat ^| Decoding mode
+| ename:VK_FORMAT_R16G16B16A16_SFLOAT    ^| decode_float16
+| ename:VK_FORMAT_R8G8B8A8_UNORM         ^| decode_unorm8
+| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ^| decode_rgb9e5
+|====
+
+Otherwise, the ASTC decode mode is decode_float16.
+
+Note that an implementation may: use HDR mode when linear LDR mode is
+requested unless the decode mode is decode_unorm8.
+endif::VK_EXT_astc_decode_mode[]
+ifndef::VK_EXT_astc_decode_mode[]
+The ASTC decode mode is decode_float16.
+
+Note that an implementation may: use HDR mode when linear LDR mode is
+requested.
+endif::VK_EXT_astc_decode_mode[]
+
+
+ifdef::VK_IMG_format_pvrtc[]
+<<<
+
+[[appendix-compressedtex-pvrtc]]
+== PVRTC Compressed Image Formats
+
+PVRTC formats are described in the "`PVRTC Compressed Texture Image
+Formats`" chapter of the <<data-format,Khronos Data Format Specification>>.
+
+.Mapping of Vulkan PVRTC formats to descriptions
+[width="75%",options="header",cols="63%,15%,22%"]
+|====
+| elink:VkFormat ^| Compressed texel block dimensions ^| sRGB-encoded
+| ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG  ^|[eq]#8 {times} 4# ^|No
+| ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG  ^|[eq]#4 {times} 4# ^|No
+| ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG  ^|[eq]#8 {times} 4# ^|No
+| ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG  ^|[eq]#4 {times} 4# ^|No
+| ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG   ^|[eq]#8 {times} 4# ^|Yes
+| ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG   ^|[eq]#4 {times} 4# ^|Yes
+| ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG   ^|[eq]#8 {times} 4# ^|Yes
+| ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG   ^|[eq]#4 {times} 4# ^|Yes
+|====
+endif::VK_IMG_format_pvrtc[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/credits.adoc b/codegen/vulkan/vulkan-docs-next/appendices/credits.adoc
new file mode 100644
index 0000000..5c2268f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/credits.adoc
@@ -0,0 +1,431 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[credits]]
+= Credits (Informative)
+
+ifdef::VKSC_VERSION_1_0[]
+
+Vulkan SC 1.0 is the result of contributions from many people and companies
+participating in the Khronos Vulkan SC Working Group, building upon the Base
+Vulkan specification produced by the Khronos Vulkan Working Group, as well
+as input from the Vulkan Advisory Panel.
+
+Members of the Working Group, including the company that they represented at
+the time of their most recent contribution, are listed in the following
+sections.
+Some specific contributions made by individuals are listed together with
+their name.
+
+== Working Group Contributors to Vulkan SC 1.0
+
+  * Aarusha Thakral, CoreAVI
+  * Aidan Fabius, CoreAVI
+  * Alastair Donaldson, Google
+  * Alastair Murray, Codeplay Software Ltd.
+  * Alex Crabb, Khronos
+  * Alexander Galazin, Arm
+  * Alis Ors, NXP Semiconductors
+  * Alon Or-bach, Samsung Electronics
+  * Andrew Garrard, Imagination Technologies
+  * Anna Buczkowska, Mobica
+  * Balajee Gurumoorah, Huawei Technologies Co., Ltd.
+  * Bogdan Naodovic, NVIDIA
+  * Boris Zanin, Mobica
+  * Brad Cain, NVIDIA
+  * Cary Ashby, Collins Aerospace
+  * Chris Forbes, Google
+  * Craig Davies, Huawei Technologies Co., Ltd.
+  * Daniel Bernal, Arm
+  * Daniel Koch, NVIDIA
+  * Dave Higham, Imagination Technologies
+  * Dave McCloskey, Juice Labs
+  * David Hayward, Imagination Technologies
+  * Donald Scorgie, Imagination Technologies
+  * Doug Singkofer, Collins Aerospace
+  * Emily Stearns, Khronos
+  * Erik Tomusk, Codeplay Software Ltd.
+  * Ewa Galamon, Mobica
+  * Greg Szober, CoreAVI
+  * Illya Rudkin, Codeplay Software Ltd.
+  * Jacek Wisniewski, Mobica
+  * James Helferty, NVIDIA
+  * Jan Hemes, Continental Corporation
+  * Jan-Harald Fredriksen, Arm
+  * Janos Lakatos, Imagination Technologies
+  * Jeff Bolz, NVIDIA
+  * Jim Carroll, Mobica
+  * John Zulauf, LunarG
+  * Jon Leech, Independent (XML toolchain, normative language, release
+    wrangler)
+  * Jun Wang, Huawei Technologies Co., Ltd.
+  * Karen Ghavam, LunarG
+  * Karolina Palka, Mobica
+  * Ken Wenger, CoreAVI
+  * Lenny Komow, LunarG
+  * Lilja Tamminen, Basemark Oy
+  * Luca Di Mauro, Arm
+  * Lukasz Janyst, Daedalean
+  * Mark Bellamy, Arm
+  * Matthew Netsch, Qualcomm Technologies, Inc.
+  * Michael Wong, Codeplay Software Ltd.
+  * Mukund Keshava, NVIDIA
+  * Neil Stroud, CoreAVI
+  * Neil Trevett, NVIDIA
+  * Nick Blurton-Jones, CoreAVI
+  * Pawel Ksiezopolski, Mobica
+  * Piotr Byszewski, Mobica
+  * Rob Simpson, Qualcomm Technologies, Inc.
+  * Stephne Strahn, Kalray
+  * Steve Viggers, CoreAVI (working group chair)
+  * Tim Lewis, Khronos
+  * Todd Brown, Collins Aerospace
+  * Tom Malnar, CoreAVI
+  * Tom Olson, Arm
+  * Tony Zlatinski, NVIDIA
+  * Vladyslav Zakkarchenko, Huawei Technologies Co., Ltd.
+
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+
+Vulkan 1.3 is the result of contributions from many people and companies
+participating in the Khronos Vulkan Working Group, as well as input from the
+Vulkan Advisory Panel.
+
+Members of the Working Group, including the company that they represented at
+the time of their most recent contribution, are listed in the following
+section.
+Some specific contributions made by individuals are listed together with
+their name.
+
+endif::VKSC_VERSION_1_0[]
+
+== Working Group Contributors to Vulkan
+
+  * Aaron Greig, Codeplay Software Ltd.
+    (version 1.1)
+  * Aaron Hagan, AMD (version 1.1)
+  * Adam Jackson, Red Hat (versions 1.0, 1.1)
+  * Adam Śmigielski, Mobica (version 1.0)
+  * Aditi Verma, Qualcomm (version 1.3)
+  * Ahmed Abdelkhalek, AMD (version 1.3)
+  * Aidan Fabius, Core Avionics & Industrial Inc.
+    (version 1.2)
+  * Alan Baker, Google (versions 1.1, 1.2, 1.3)
+  * Alan Ward, Google (versions 1.1, 1.2)
+  * Alejandro Piñeiro, Igalia (version 1.1)
+  * Alex Bourd, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Alex Crabb, Caster Communications (versions 1.2, 1.3)
+  * Alex Walters, Imagination Technologies (versions 1.2, 1.3)
+  * Alexander Galazin, Arm (versions 1.0, 1.1, 1.2, 1.3)
+  * Alexey Sachkov, Intel (version 1.3)
+  * Allan MacKinnon, Google (version 1.3)
+  * Allen Hux, Intel (version 1.0)
+  * Alon Or-bach, Google (versions 1.0, 1.1, 1.2, 1.3) (WSI technical
+    sub-group chair)
+  * Anastasia Stulova, Arm (versions 1.2, 1.3)
+  * Andreas Vasilakis, Think Silicon (version 1.2)
+  * Andres Gomez, Igalia (version 1.1)
+  * Andrew Cox, Samsung Electronics (version 1.0)
+  * Andrew Ellem, Google (version 1.3)
+  * Andrew Garrard, Imagination Technologies (versions 1.0, 1.1, 1.2, 1.3)
+    (format wrangler)
+  * Andrew Poole, Samsung Electronics (version 1.0)
+  * Andrew Rafter, Samsung Electronics (version 1.0)
+  * Andrew Richards, Codeplay Software Ltd.
+    (version 1.0)
+  * Andrew Woloszyn, Google (versions 1.0, 1.1)
+  * Ann Thorsnes, Khronos (versions 1.2, 1.3)
+  * Antoine Labour, Google (versions 1.0, 1.1)
+  * Aras Pranckevičius, Unity Technologies (version 1.0)
+  * Arseny Kapoulkine, Roblox (version 1.3)
+  * Ashwin Kolhe, NVIDIA (version 1.0)
+  * Baldur Karlsson, Valve Software (versions 1.1, 1.2, 1.3)
+  * Barthold Lichtenbelt, NVIDIA (version 1.1)
+  * Bas Nieuwenhuizen, Google (versions 1.1, 1.2)
+  * Ben Bowman, Imagination Technologies (version 1.0)
+  * Benj Lipchak, Unknown (version 1.0)
+  * Bill Hollings, Brenwill (versions 1.0, 1.1, 1.2, 1.3)
+  * Bill Licea-Kane, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Blaine Kohl, Khronos (versions 1.2, 1.3)
+  * Bob Fraser, Google (version 1.3)
+  * Boris Zanin, Mobica (versions 1.2, 1.3)
+  * Brent E. Insko, Intel (version 1.0)
+  * Brian Ellis, Qualcomm Technologies, Inc.
+    (version 1.0)
+  * Brian Paul, VMware (versions 1.2, 1.3)
+  * Caio Marcelo de Oliveira Filho, Intel (versions 1.2, 1.3)
+  * Cass Everitt, Oculus VR (versions 1.0, 1.1)
+  * Cemil Azizoglu, Canonical (version 1.0)
+  * Lina Versace, Google (versions 1.0, 1.1, 1.2)
+  * Chang-Hyo Yu, Samsung Electronics (version 1.0)
+  * Charles Giessen, LunarG (version 1.3)
+  * Chia-I Wu, LunarG (version 1.0)
+  * Chris Frascati, Qualcomm Technologies, Inc.
+    (version 1.0)
+  * Chris Glover, Google (version 1.3)
+  * Christian Forfang, Arm (version 1.3)
+  * Christoph Kubisch, NVIDIA (version 1.3)
+  * Christophe Riccio, Unity Technologies (versions 1.0, 1.1)
+  * Cody Northrop, LunarG (version 1.0)
+  * Colin Riley, AMD (version 1.1)
+  * Cort Stratton, Google (versions 1.1, 1.2)
+  * Courtney Goeltzenleuchter, Google (versions 1.0, 1.1, 1.3)
+  * Craig Davies, Huawei (version 1.2)
+  * Dae Kim, Imagination Technologies (version 1.1)
+  * Damien Leone, NVIDIA (version 1.0)
+  * Dan Baker, Oxide Games (versions 1.0, 1.1)
+  * Dan Ginsburg, Valve Software (versions 1.0, 1.1, 1.2, 1.3)
+  * Daniel Johnston, Intel (versions 1.0, 1.1)
+  * Daniel Koch, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * Daniel Rakos, AMD (versions 1.0, 1.1, 1.2, 1.3)
+  * Daniel Stone, Collabora (versions 1.1, 1.2)
+  * Daniel Vetter, Intel (version 1.2)
+  * David Airlie, Red Hat (versions 1.0, 1.1, 1.2, 1.3)
+  * David Mao, AMD (versions 1.0, 1.2)
+  * David Miller, Miller & Mattson (versions 1.0, 1.1) (Vulkan reference
+    card)
+  * David Neto, Google (versions 1.0, 1.1, 1.2, 1.3)
+  * David Pankratz, Huawei (version 1.3)
+  * David Wilkinson, AMD (version 1.2)
+  * David Yu, Pixar (version 1.0)
+  * Dejan Mircevski, Google (version 1.1)
+  * Diego Novillo, Google (version 1.3)
+  * Dimitris Georgakakis, Think Silicon (version 1.3)
+  * Dominik Witczak, AMD (versions 1.0, 1.1, 1.3)
+  * Donald Scorgie, Imagination Technologies (version 1.2)
+  * Dzmitry Malyshau, Mozilla (versions 1.1, 1.2, 1.3)
+  * Ed Hutchins, Oculus (version 1.2)
+  * Emily Stearns, Khronos (versions 1.2, 1.3)
+  * François Duranleau, Gameloft (version 1.3)
+  * Frank (LingJun) Chen, Qualcomm Technologies, Inc.
+    (version 1.0)
+  * Fred Liao, Mediatek (version 1.0)
+  * Gabe Dagani, Freescale (version 1.0)
+  * Gabor Sines, AMD (version 1.2)
+  * Graeme Leese, Broadcom (versions 1.0, 1.1, 1.2, 1.3)
+  * Graham Connor, Imagination Technologies (version 1.0)
+  * Graham Sellers, AMD (versions 1.0, 1.1)
+  * Graham Wihlidal, Electronic Arts (version 1.3)
+  * Greg Fischer, LunarG (version 1.1)
+  * Gregory Grebe, AMD (version 1.3)
+  * Hai Nguyen, Google (versions 1.2, 1.3)
+  * Hans-Kristian Arntzen, Valve Software (versions 1.1, 1.2, 1.3)
+  * Henri Verbeet, Codeweavers (version 1.2)
+  * Huei Long Wang, Huawei (version 1.3)
+  * Hwanyong Lee, Kyungpook National University (version 1.0)
+  * Iago Toral, Igalia (versions 1.1, 1.2)
+  * Ian Elliott, Google (versions 1.0, 1.1, 1.2)
+  * Ian Romanick, Intel (versions 1.0, 1.1, 1.3)
+  * Ivan Briano, Intel (version 1.3)
+  * James Fitzpatrick, Imagination (version 1.3)
+  * James Hughes, Oculus VR (version 1.0)
+  * James Jones, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * James Riordon, Khronos (versions 1.2, 1.3)
+  * Jamie Madill, Google (version 1.3)
+  * Jan Hermes, Continental Corporation (versions 1.0, 1.1)
+  * Jan-Harald Fredriksen, Arm (versions 1.0, 1.1, 1.2, 1.3)
+  * Faith Ekstrand, Intel (versions 1.0, 1.1, 1.2, 1.3)
+  * Jean-François Roy, Google (versions 1.1, 1.2, 1.3)
+  * Jeff Bolz, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * Jeff Juliano, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Jeff Leger, Qualcomm Technologies, Inc.
+    (versions 1.1, 1.3)
+  * Jeff Phillips, Khronos (version 1.3)
+  * Jeff Vigil, Samsung Electronics (versions 1.0, 1.1, 1.2, 1.3)
+  * Jens Owen, Google (versions 1.0, 1.1)
+  * Jeremy Hayes, LunarG (version 1.0)
+  * Jesse Barker, Unity Technologies (versions 1.0, 1.1, 1.2, 1.3)
+  * Jesse Hall, Google (versions 1.0, 1.1, 1.2, 1.3)
+  * Joe Davis, Samsung Electronics (version 1.1)
+  * Johannes van Waveren, Oculus VR (versions 1.0, 1.1)
+  * John Anthony, Arm (version 1.2, 1.3)
+  * John Kessenich, Google (versions 1.0, 1.1, 1.2, 1.3) (SPIR-V and GLSL
+    for Vulkan spec author)
+  * John McDonald, Valve Software (versions 1.0, 1.1, 1.2, 1.3)
+  * John Zulauf, LunarG (versions 1.1, 1.2, 1.3)
+  * Jon Ashburn, LunarG (version 1.0)
+  * Jon Leech, Independent (versions 1.0, 1.1, 1.2, 1.3) (XML toolchain,
+    normative language, release wrangler)
+  * Jonas Gustavsson, Samsung Electronics (versions 1.0, 1.1)
+  * Jonas Meyer, Epic Games (versions 1.2, 1.3)
+  * Jonathan Hamilton, Imagination Technologies (version 1.0)
+  * Jordan Justen, Intel (version 1.1)
+  * Joshua Ashton, Valve Software (version 1.3)
+  * Jungwoo Kim, Samsung Electronics (versions 1.0, 1.1)
+  * Jörg Wagner, Arm (version 1.1)
+  * Kalle Raita, Google (version 1.1)
+  * Karen Ghavam, LunarG (versions 1.1, 1.2, 1.3)
+  * Karl Schultz, LunarG (versions 1.1, 1.2)
+  * Kathleen Mattson, Khronos (versions 1.0, 1.1, 1.2)
+  * Kaye Mason, Google (version 1.2)
+  * Keith Packard, Valve (version 1.2)
+  * Kenneth Benzie, Codeplay Software Ltd.
+    (versions 1.0, 1.1)
+  * Kenneth Russell, Google (version 1.1)
+  * Kerch Holt, NVIDIA (versions 1.0, 1.1)
+  * Kevin O'Neil, AMD (version 1.1)
+  * Kevin Petit, Arm (version 1.3)
+  * Kris Rose, Khronos (versions 1.2, 1.3)
+  * Kristian Kristensen, Intel (versions 1.0, 1.1)
+  * Krzysztof Iwanicki, Samsung Electronics (version 1.0)
+  * Larry Seiler, Intel (version 1.0)
+  * Laura Shubel, Caster Communications (version 1.3)
+  * Lauri Ilola, Nokia (version 1.1)
+  * Lei Zhang, Google (version 1.2)
+  * Lenny Komow, LunarG (versions 1.1, 1.2)
+  * Liam Middlebrook, NVIDIA (version 1.3)
+  * Lionel Landwerlin, Intel (versions 1.1, 1.2)
+  * Lisie Aartsen, Khronos (version 1.3)
+  * Liz Maitral, Khronos (version 1.2)
+  * Lou Kramer, AMD (version 1.3)
+  * Lutz Latta, Lucasfilm (version 1.0)
+  * Maciej Jesionowski, AMD (version 1.1)
+  * Mais Alnasser, AMD (version 1.1)
+  * Marcin Kantoch, AMD (version 1.3)
+  * Marcin Rogucki, Mobica (version 1.1)
+  * Maria Rovatsou, Codeplay Software Ltd.
+    (version 1.0)
+  * Mariusz Merecki, Intel (version 1.3)
+  * Mark Bellamy, Arm (version 1.2, 1.3)
+  * Mark Callow, Independent (versions 1.0, 1.1, 1.2, 1.3)
+  * Mark Kilgard, NVIDIA (versions 1.1, 1.2)
+  * Mark Lobodzinski, LunarG (versions 1.0, 1.1, 1.2)
+  * Mark Young, LunarG (versions 1.1, 1.3)
+  * Markus Tavenrath, NVIDIA (version 1.1)
+  * Marty Johnson, Khronos (version 1.3)
+  * Mateusz Przybylski, Intel (version 1.0)
+  * Mathias Heyer, NVIDIA (versions 1.0, 1.1)
+  * Mathias Schott, NVIDIA (versions 1.0, 1.1)
+  * Mathieu Robart, Arm (version 1.2)
+  * Matt Netsch, Qualcomm Technologies, Inc.
+    (version 1.1)
+  * Matthew Rusch, NVIDIA (version 1.3)
+  * Matthäus Chajdas, AMD (versions 1.1, 1.2, 1.3)
+  * Maurice Ribble, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Maxim Lukyanov, Samsung Electronics (version 1.0)
+  * Michael Blumenkrantz, Self (version 1.3)
+  * Michael Lentine, Google (version 1.0)
+  * Michael O'Hara, AMD (version 1.1)
+  * Michael Phillip, Samsung Electronics (version 1.2)
+  * Michael Wong, Codeplay Software Ltd.
+    (version 1.1)
+  * Michael Worcester, Imagination Technologies (versions 1.0, 1.1)
+  * Michal Pietrasiuk, Intel (versions 1.0, 1.3)
+  * Mika Isojarvi, Google (versions 1.0, 1.1)
+  * Mike Schuchardt, LunarG (versions 1.1, 1.2)
+  * Mike Stroyan, LunarG (version 1.0)
+  * Mike Weiblen, LunarG (versions 1.1, 1.2, 1.3)
+  * Minyoung Son, Samsung Electronics (version 1.0)
+  * Mitch Singer, AMD (versions 1.0, 1.1, 1.2, 1.3)
+  * Mythri Venugopal, Samsung Electronics (version 1.0)
+  * Naveen Leekha, Google (version 1.0)
+  * Neil Henning, AMD (versions 1.0, 1.1, 1.2, 1.3)
+  * Neil Hickey, Arm (version 1.2)
+  * Neil Trevett, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * Nick Penwarden, Epic Games (version 1.0)
+  * Nicolai Hähnle, AMD (version 1.1)
+  * Niklas Smedberg, Unity Technologies (version 1.0)
+  * Norbert Nopper, Independent (versions 1.0, 1.1)
+  * Nuno Subtil, NVIDIA (versions 1.1, 1.2, 1.3)
+  * Pat Brown, NVIDIA (version 1.0)
+  * Patrick Cozzi, Independent (version 1.1)
+  * Patrick Doane, Blizzard Entertainment (version 1.0)
+  * Peter Lohrmann, AMD (versions 1.0, 1.2)
+  * Petros Bantolas, Imagination Technologies (version 1.1)
+  * Philip Rebohle, Valve Software (version 1.3)
+  * Pierre Boudier, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * Pierre-Loup Griffais, Valve Software (versions 1.0, 1.1, 1.2, 1.3)
+  * Piers Daniell, NVIDIA (versions 1.0, 1.1, 1.2, 1.3)
+  * Ping Liu, Intel (version 1.3)
+  * Piotr Bialecki, Intel (version 1.0)
+  * Piotr Byszewski, Mobica (version 1.3)
+  * Prabindh Sundareson, Samsung Electronics (version 1.0)
+  * Pyry Haulos, Google (versions 1.0, 1.1) (Vulkan conformance test
+    subcommittee chair)
+  * Rachel Bradshaw, Caster Communications (version 1.3)
+  * Rajeev Rao, Qualcomm (version 1.2)
+  * Ralph Potter, Samsung Electronics (versions 1.1, 1.2, 1.3)
+  * Raun Krisch, Samsung Electronics (version 1.3)
+  * Ray Smith, Arm (versions 1.0, 1.1, 1.2)
+  * Ricardo Garcia, Igalia (version 1.3)
+  * Richard Huddy, Samsung Electronics (versions 1.2, 1.3)
+  * Rob Barris, NVIDIA (version 1.1)
+  * Rob Stepinski, Transgaming (version 1.0)
+  * Robert Simpson, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1, 1.3)
+  * Rolando Caloca Olivares, Epic Games (versions 1.0, 1.1, 1.2, 1.3)
+  * Ronan Keryell, Xilinx (version 1.3)
+  * Roy Ju, Mediatek (version 1.0)
+  * Rufus Hamade, Imagination Technologies (version 1.0)
+  * Ruihao Zhang, Qualcomm Technologies, Inc.
+    (versions 1.1, 1.2, 1.3)
+  * Samuel (Sheng-Wen) Huang, Mediatek (version 1.3)
+  * Samuel Iglesias Gonsalvez, Igalia (version 1.3)
+  * Sascha Willems, Self (version 1.3)
+  * Sean Ellis, Arm (version 1.0)
+  * Sean Harmer, KDAB Group (versions 1.0, 1.1)
+  * Shannon Woods, Google (versions 1.0, 1.1, 1.2, 1.3)
+  * Slawomir Cygan, Intel (versions 1.0, 1.1, 1.3)
+  * Slawomir Grajewski, Intel (versions 1.0, 1.1, 1.3)
+  * Sorel Bosan, AMD (version 1.1)
+  * Spencer Fricke, Samsung Electronics (versions 1.2, 1.3)
+  * Stefanus Du Toit, Google (version 1.0)
+  * Stephen Huang, Mediatek (version 1.1)
+  * Steve Hill, Broadcom (versions 1.0, 1.2)
+  * Steve Viggers, Core Avionics & Industrial Inc.
+    (versions 1.0, 1.2)
+  * Steve Winston, Holochip (version 1.3)
+  * Stuart Smith, AMD (versions 1.0, 1.1, 1.2, 1.3)
+  * Sujeevan Rajayogam, Google (version 1.3)
+  * Tilmann Scheller, Samsung Electronics (version 1.1)
+  * Tim Foley, Intel (version 1.0)
+  * Tim Lewis, Khronos (version 1.3)
+  * Timo Suoranta, AMD (version 1.0)
+  * Timothy Lottes, AMD (versions 1.0, 1.1)
+  * Tobias Hector, AMD (versions 1.0, 1.1, 1.2, 1.3) (validity language and
+    toolchain)
+  * Tobin Ehlis, LunarG (version 1.0)
+  * Tom Olson, Arm (versions 1.0, 1.1, 1.2, 1.3) (Working Group chair)
+  * Tomasz Bednarz, Independent (version 1.1)
+  * Tomasz Kubale, Intel (version 1.0)
+  * Tony Barbour, LunarG (versions 1.0, 1.1, 1.2)
+  * Tony Zlatinski, NVIDIA (version 1.3)
+  * Victor Eruhimov, Unknown (version 1.1)
+  * Vikram Kushwaha, NVIDIA (version 1.3)
+  * Vincent Hindriksen, Stream HPC (versions 1.2, 1.3)
+  * Wasim Abbas, Arm (version 1.3)
+  * Wayne Lister, Imagination Technologies (version 1.0)
+  * Wolfgang Engel, Unknown (version 1.1)
+  * Yanjun Zhang, VeriSilicon (versions 1.0, 1.1, 1.2, 1.3)
+  * Yunxing Zhu, Huawei (version 1.3)
+
+
+== Other Credits
+
+The Vulkan Advisory Panel members provided important real-world usage
+information and advice that helped guide design decisions.
+
+The wider Vulkan community have provided useful feedback, questions and
+specification changes that have helped improve the quality of the
+Specification via
+link:https://github.com/KhronosGroup/Vulkan-Docs/graphs/contributors[GitHub].
+
+Administrative support to the Working Group for Vulkan 1.1, 1.2, and 1.3 was
+provided by Khronos staff including Ann Thorsnes, Blaine Kohl, Dominic
+Agoro-Ombaka, Emily Stearns, Jeff Phillips, Lisie Aartsen, Liz Maitral,
+Marty Johnson, Tim Lewis, and Xiao-Yu CHENG; and by Alex Crabb, Laura
+Shubel, and Rachel Bradshaw of Caster Communications.
+
+Administrative support for Vulkan 1.0 was provided by Andrew Riegel,
+Elizabeth Riegel, Glenn Fredericks, Kathleen Mattson and Michelle Clark of
+Gold Standard Group.
+
+Technical support was provided by James Riordon, site administration of
+Khronos.org and OpenGL.org.
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/extensions.adoc b/codegen/vulkan/vulkan-docs-next/appendices/extensions.adoc
new file mode 100644
index 0000000..20c7a19
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/extensions.adoc
@@ -0,0 +1,62 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+
+[[extensions]]
+= Layers & Extensions (Informative)
+
+Extensions to the Vulkan API can: be defined by authors, groups of authors,
+and the Khronos Vulkan
+ifdef::VKSC_VERSION_1_0[Safety Critical]
+Working Group.
+In order not to compromise the readability of the Vulkan Specification, the
+core Specification does not incorporate most extensions.
+The online Registry of extensions is available at URL
+
+ifndef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkan/]
+ifdef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkansc/]
+
+and allows generating versions of the Specification incorporating different
+extensions.
+
+Authors creating extensions and layers must: follow the mandatory procedures
+described in the <<vulkan-styleguide, Vulkan Documentation and Extensions>>
+document when creating extensions and layers.
+
+The remainder of this appendix documents a set of extensions chosen when
+this document was built.
+Versions of the Specification published in the Registry include:
+
+  * Core API + mandatory extensions required of all Vulkan implementations.
+ifndef::VKSC_VERSION_1_0[]
+  * Core API + all registered and published Khronos (`KHR`) extensions.
+endif::VKSC_VERSION_1_0[]
+  * Core API + all registered and published extensions.
+
+Extensions are grouped as Khronos `KHR`, multivendor `EXT`, and then
+alphabetically by author ID.
+Within each group, extensions are listed in alphabetical order by their
+name.
+
+== Extension Dependencies
+
+Extensions which have dependencies on specific core versions or on other
+extensions will list such dependencies.
+
+For core versions, the specified version must be supported at runtime.
+All extensions implicitly require support for Vulkan 1.0.
+
+For a device extension, use of any device-level functionality defined by
+that extension requires that any extensions that extension depends on be
+enabled.
+
+For any extension, use of any instance-level functionality defined by that
+extension requires only that any extensions that extension depends on be
+supported at runtime.
+
+
+include::{generated}/meta/current_extensions_appendix.adoc[]
+include::{generated}/meta/provisional_extensions_appendix.adoc[]
+include::{generated}/meta/deprecated_extensions_appendix.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/glossary.adoc b/codegen/vulkan/vulkan-docs-next/appendices/glossary.adoc
new file mode 100644
index 0000000..15c1bce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/glossary.adoc
@@ -0,0 +1,2145 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// The asciidoc [glossary] template cannot contain subsections.
+// The abbreviations and prefixes probably belong in the upcoming
+// API/extension-writing-guidelines appendix, anyway.
+
+[appendix]
+[[lexicon]]
+= Lexicon
+
+This appendix defines terms, abbreviations, and API prefixes used in the
+Specification.
+
+
+[[glossary]]
+== Glossary
+
+The terms defined in this section are used consistently throughout the
+Specification and may be used with or without capitalization.
+
+Accessible (Descriptor Binding)::
+    A descriptor binding is accessible to a shader stage if that stage is
+    included in the pname:stageFlags of the descriptor binding.
+    Descriptors using that binding can: only be used by stages in which they
+    are accessible.
+
+Acquire Operation (Resource)::
+    An operation that acquires ownership of an image subresource or buffer
+    range.
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+Active (Descriptor Type)::
+    When a descriptor with _mutable_ type is updated with
+    flink:vkUpdateDescriptorSets, the active descriptor type changes.
+    When the descriptor is consumed by shaders, it is the active descriptor
+    type which determines validity, i.e.
+    sname:VkDescriptorSetLayoutBinding::pname:descriptorType is replaced
+    with the active descriptor type.
+    A mismatch in active descriptor type and consumption by shader is
+    considered an undefined: descriptor.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+ifdef::VK_EXT_transform_feedback[]
+Active (Transform Feedback)::
+    Transform feedback is made active after
+    flink:vkCmdBeginTransformFeedbackEXT executes and remains active until
+    flink:vkCmdEndTransformFeedbackEXT executes.
+    While transform feedback is active, data written to variables in the
+    output interface of the last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>> of the graphics pipeline are captured to the bound transform
+    feedback buffers if those variables are decorated for transform
+    feedback.
+endif::VK_EXT_transform_feedback[]
+
+Adjacent Vertex::
+    A vertex in an adjacency primitive topology that is not part of a given
+    primitive, but is accessible in geometry shaders.
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+Active Object (Ray Tracing)::
+    A primitive or instance in a ray tracing acceleration structure which
+    has a corresponding ID, and is not _inactive_ (meaning that it is
+    visible to rays).
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+ifdef::VK_EXT_blend_operation_advanced[]
+Advanced Blend Operation::
+    Blending performed using one of the blend operation enums introduced by
+    the `apiext:VK_EXT_blend_operation_advanced` extension.
+    See <<framebuffer-blend-advanced, Advanced Blending Operations>>.
+endif::VK_EXT_blend_operation_advanced[]
+
+Alias (API type/command)::
+    An identical definition of another API type/command with the same
+    behavior but a different name.
+
+Aliased Range (Memory)::
+    A range of a device memory allocation that is bound to multiple
+    resources simultaneously.
+
+Allocation Scope::
+    An association of a host memory allocation to a parent object or
+    command, where the allocation's lifetime ends before or at the same time
+    as the parent object is freed or destroyed, or during the parent
+    command.
+
+Aspect (Image)::
+    Some image types contain multiple kinds (called "`aspects`") of data for
+    each pixel, where each aspect is used in a particular way by the
+    pipeline and may: be stored differently or separately from other
+    aspects.
+    For example, the color components of an image format make up the color
+    aspect of the image, and can: be used as a framebuffer color attachment.
+    Some operations, like depth testing, operate only on specific aspects of
+    an image.
+
+Attachment (Render Pass)::
+    A zero-based integer index name used in render pass creation to refer to
+    a framebuffer attachment that is accessed by one or more subpasses.
+    The index also refers to an attachment description which includes
+    information about the properties of the image view that will later be
+    attached.
+
+Availability Operation::
+    An operation that causes the values generated by specified memory write
+    accesses to become available for future access.
+
+Available::
+    A state of values written to memory that allows them to be made visible.
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+Axis-aligned Bounding Box::
+    A box bounding a region in space defined by extents along each axis and
+    thus representing a box where each edge is aligned to one of the major
+    axes.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+Back-Facing::
+    See Facingness.
+
+Batch::
+    A single structure submitted to a queue as part of a
+    <<devsandqueues-submission, queue submission command>>, describing a set
+    of queue operations to execute.
+
+Backwards Compatibility::
+    A given version of the API is backwards compatible with an earlier
+    version if an application, relying only on valid behavior and
+    functionality defined by the earlier specification, is able to correctly
+    run against each version without any modification.
+    This assumes no active attempt by that application to not run when it
+    detects a different version.
+
+Binary Semaphore::
+    A semaphore with a boolean payload indicating whether the semaphore is
+    signaled or unsignaled.
+    Represented by a slink:VkSemaphore object
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    created with a semaphore type of ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    .
+
+Binding (Memory)::
+    An association established between a range of a resource object and a
+    range of a memory object.
+    These associations determine the memory locations affected by operations
+    performed on elements of a resource object.
+    Memory bindings are established using the flink:vkBindBufferMemory
+    command for non-sparse buffer objects,
+ifdef::VKSC_VERSION_1_0[and]
+    using the flink:vkBindImageMemory command for non-sparse image objects
+ifndef::VKSC_VERSION_1_0[, and using the flink:vkQueueBindSparse command for sparse resources]
+    .
+
+Blend Constant::
+    Four floating point (RGBA) values used as an input to blending.
+
+Blending::
+    Arithmetic operations between a fragment color value and a value in a
+    color attachment that produce a final color value to be written to the
+    attachment.
+
+Buffer::
+    A resource that represents a linear array of data in device memory.
+    Represented by a slink:VkBuffer object.
+
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+Buffer Device Address::
+    A 64-bit value used in a shader to access buffer memory through the
+    code:PhysicalStorageBuffer storage class.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+
+Buffer View::
+    An object that represents a range of a specific buffer, and state
+    controlling how the contents are interpreted.
+    Represented by a slink:VkBufferView object.
+
+Built-In Variable::
+    A variable decorated in a shader, where the decoration makes the
+    variable take values provided by the execution environment or values
+    that are generated by fixed-function pipeline stages.
+
+Built-In Interface Block::
+    A block defined in a shader containing only variables decorated with
+    built-in decorations, and is used to match against other shader stages.
+
+Clip Coordinates::
+    The homogeneous coordinate space in which vertex positions
+    (code:Position decoration) are written by
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    stages>>.
+
+Clip Distance::
+    A built-in output from
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> defining a clip half-space against which the primitive is
+    clipped.
+
+Clip Volume::
+    The intersection of the view volume with all clip half-spaces.
+
+Color Attachment::
+    A subpass attachment point, or image view, that is the target of
+    fragment color outputs and blending.
+
+ifdef::VK_AMD_shader_fragment_mask[]
+Color Fragment::
+    A unique color value within a pixel of a multisampled color image.
+    The _fragment mask_ will contain indices to the _color fragment_.
+endif::VK_AMD_shader_fragment_mask[]
+
+Color Renderable Format::
+    A elink:VkFormat where ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT is
+    set in one of the following, depending on the image's tiling:
+  * slink:VkFormatProperties::pname:linearTilingFeatures
+  * slink:VkFormatProperties::pname:optimalTilingFeatures
+ifdef::VK_NV_linear_color_attachment[]
+    or a elink:VkFormat where
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV is set in
+    slink:VkFormatProperties::pname:linearTilingFeatures
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures
+endif::VK_EXT_image_drm_format_modifier[]
+
+Combined Image Sampler::
+    A descriptor type that includes both a sampled image and a sampler.
+
+Command Buffer::
+    An object that records commands to be submitted to a queue.
+    Represented by a slink:VkCommandBuffer object.
+
+ifdef::VK_EXT_nested_command_buffer[]
+Command Buffer Nesting Level::
+    The Command Buffer Nesting Level of a secondary command buffer is equal
+    to the maximum nesting level of all secondary command buffers executed
+    by that command buffer plus one, where a secondary command buffer that
+    executes no other secondary command buffers has a nesting level of zero.
+endif::VK_EXT_nested_command_buffer[]
+
+Command Pool::
+    An object that command buffer memory is allocated from, and that owns
+    that memory.
+    Command pools aid multithreaded performance by enabling different
+    threads to use different allocators, without internal synchronization on
+    each use.
+    Represented by a slink:VkCommandPool object.
+
+Compatible Allocator::
+    When allocators are compatible, allocations from each allocator can: be
+    freed by the other allocator.
+
+Compatible Image Formats::
+    When formats are compatible, images created with one of the formats can:
+    have image views created from it using any of the compatible formats.
+    Also see _Size-Compatible Image Formats_.
+
+Compatible Queues::
+    Queues within a queue family.
+    Compatible queues have identical properties.
+
+Complete Mipmap Chain::
+    The entire set of mip levels that can be provided for an image, from the
+    largest application specified mip level size down to the _minimum mip
+    level size_.
+    See <<resources-image-mip-level-sizing, Image Mip Level Sizing>>.
+
+ifdef::VK_KHR_deferred_host_operations[]
+Completed Operation::
+    A deferred operation whose corresponding command has been executed to
+    completion.
+    See <<deferred-host-operations, Deferred Host Operations>>
+endif::VK_KHR_deferred_host_operations[]
+
+Component (Format)::
+    A distinct part of a format.
+    Color components are represented with `R`, `G`, `B`, and `A`.
+    Depth and stencil components are represented with `D` and `S`.
+    Formats can: have multiple instances of the same component.
+    Some formats have other notations such as `E` or `X` which are not
+    considered a component of the format.
+
+Compressed Texel Block::
+    An element of an image having a block-compressed format, comprising a
+    rectangular block of texel values that are encoded as a single value in
+    memory.
+    Compressed texel blocks of a particular block-compressed format have a
+    corresponding width, height, and depth defining the dimensions of these
+    elements in units of texels, and a size in bytes of the encoding in
+    memory.
+
+Constant Integral Expressions::
+    A SPIR-V constant instruction whose type is code:OpTypeInt.
+    See _Constant Instruction_ in section 2.2.1 "`Instructions`" of the
+    <<spirv-spec,Khronos SPIR-V Specification>>.
+
+ifdef::VK_NV_cooperative_matrix,VK_KHR_cooperative_matrix[]
+Cooperative Matrix::
+    A SPIR-V type where the storage for and computations performed on the
+    matrix are spread across a set of invocations such as a subgroup.
+endif::VK_NV_cooperative_matrix,VK_KHR_cooperative_matrix[]
+
+ifdef::VK_NV_corner_sampled_image[]
+Corner-Sampled Image::
+    A slink:VkImage where unnormalized texel coordinates are centered on
+    integer values instead of half-integer values.
+    Specified by setting the ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV bit
+    on slink:VkImageCreateInfo::pname:flags at image creation.
+endif::VK_NV_corner_sampled_image[]
+
+Coverage Index::
+    The index of a sample in the coverage mask.
+
+Coverage Mask::
+    A bitfield associated with a fragment representing the samples that were
+    determined to be covered based on the result of rasterization, and then
+    subsequently modified by fragment operations or the fragment shader.
+
+Cull Distance::
+    A built-in output from
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> defining a cull half-space where the primitive is rejected if
+    all vertices have a negative value for the same cull distance.
+
+Cull Volume::
+    The intersection of the view volume with all cull half-spaces.
+
+ifdef::VK_KHR_video_queue[]
+Decode Output Picture::
+    A video picture resource used to store the result of a video decode
+    operation.
+
+Decoded Picture Buffer::
+    An indexed set of reference pictures used by a video session.
+    Abbreviated as DPB.
+
+Decoded Picture Buffer Slot::
+    An entry within a DPB that can: be associated with a particular
+    reference picture.
+
+Decoded Picture Buffer Slot Index::
+    The index of a DPB slot within its encompassing DPB.
+endif::VK_KHR_video_queue[]
+
+Decoration (SPIR-V)::
+    Auxiliary information such as built-in variables, stream numbers,
+    invariance, interpolation type, relaxed precision, etc., added to
+    variables or structure-type members through decorations.
+
+ifdef::VK_KHR_deferred_host_operations[]
+Deferrable Command::
+    A command which allows deferred execution of host-side work.
+    See <<deferred-host-operations,Deferred Host Operations>>.
+
+Deferrable Operation::
+    A single logical item of host-side work which can be deferred.
+    Represented by the slink:VkDeferredOperationKHR object.
+    See <<deferred-host-operations,Deferred Host Operations>>.
+endif::VK_KHR_deferred_host_operations[]
+
+Deprecated (feature)::
+    A feature is deprecated if it is no longer recommended as the correct or
+    best way to achieve its intended purpose.
+
+Depth/Stencil Attachment::
+    A subpass attachment point, or image view, that is the target of depth
+    and/or stencil test operations and writes.
+
+Depth/Stencil Format::
+    A elink:VkFormat that includes depth and/or stencil components.
+
+Depth/Stencil Image (or ImageView)::
+    A slink:VkImage (or slink:VkImageView) with a depth/stencil format.
+
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+Depth/Stencil Resolve Attachment::
+    A subpass attachment point, or image view, that is the target of a
+    multisample resolve operation from the corresponding depth/stencil
+    attachment at the end of the subpass.
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+Derivative Group::
+    A set of fragment
+ifdef::VK_NV_compute_shader_derivatives[]
+    or compute
+endif::VK_NV_compute_shader_derivatives[]
+    shader invocations that cooperate to compute derivatives, including
+    implicit derivatives for sampled image operations.
+
+Descriptor::
+    Information about a resource or resource view written into a descriptor
+    set that is used to access the resource or view from a shader.
+
+Descriptor Binding::
+    An entry in a descriptor set layout corresponding to zero or more
+    descriptors of a single descriptor type in a set.
+    Defined by a slink:VkDescriptorSetLayoutBinding structure.
+
+Descriptor Pool::
+    An object that descriptor sets are allocated from, and that owns the
+    storage of those descriptor sets.
+    Descriptor pools aid multithreaded performance by enabling different
+    threads to use different allocators, without internal synchronization on
+    each use.
+    Represented by a slink:VkDescriptorPool object.
+
+Descriptor Set::
+    An object that resource descriptors are written into via the API, and
+    that can: be bound to a command buffer such that the descriptors
+    contained within it can: be accessed from shaders.
+    Represented by a slink:VkDescriptorSet object.
+
+Descriptor Set Layout::
+    An object defining the set of resources (types and counts) and their
+    relative arrangement (in the binding namespace) within a descriptor set.
+    Used when allocating descriptor sets and when creating pipeline layouts.
+    Represented by a slink:VkDescriptorSetLayout object.
+
+Device::
+    The processor(s) and execution environment that perform tasks requested
+    by the application via the Vulkan API.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+Device Group::
+    A set of physical devices that support accessing each other's memory and
+    recording a single command buffer that can: be executed on all the
+    physical devices.
+
+Device Index::
+    A zero-based integer that identifies one physical device from a logical
+    device.
+    A device index is valid if it is less than the number of physical
+    devices in the logical device.
+
+Device Mask::
+    A bitmask where each bit represents one device index.
+    A device mask value is valid if every bit that is set in the mask is at
+    a bit position that is less than the number of physical devices in the
+    logical device.
+endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+
+Device Memory::
+    Memory accessible to the device.
+    Represented by a slink:VkDeviceMemory object.
+
+Device-Level Command::
+    Any command that is dispatched from a logical device, or from a child
+    object of a logical device.
+
+Device-Level Functionality::
+    All device-level commands and objects, and their structures, enumerated
+    types, and enumerants.
+    Additionally, physical-device-level functionality defined by a
+    <<extendingvulkan-device-extensions,device extension>> is also
+    considered device-level functionality.
+
+Device-Level Object::
+    Logical device objects and their child objects.
+    For example, slink:VkDevice, slink:VkQueue, and slink:VkCommandBuffer
+    objects are device-level objects.
+
+Device-Local Memory::
+    Memory that is connected to the device, and may: be more performant for
+    device access than host-local memory.
+
+Direct Drawing Commands::
+    _Drawing commands_ that take all their parameters as direct arguments to
+    the command (and not sourced via structures in buffer memory as the
+    _indirect drawing commands_).
+    Includes
+ifdef::VK_EXT_multi_draw[]
+    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
+endif::VK_EXT_multi_draw[]
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawMeshTasksEXT,
+endif::VK_EXT_mesh_shader[]
+    flink:vkCmdDraw, and flink:vkCmdDrawIndexed.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Disjoint::
+    _Disjoint planes_ are _image planes_ to which memory is bound
+    independently. +
+    A _disjoint image_ consists of multiple _disjoint planes_, and is
+    created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Dispatchable Command::
+    A non-global command.
+    The first argument to each dispatchable command is a dispatchable handle
+    type.
+
+Dispatchable Handle::
+    A handle of a pointer handle type which may: be used by layers as part
+    of intercepting API commands.
+
+Dispatching Commands::
+    Commands that provoke work using a compute pipeline.
+    Includes flink:vkCmdDispatch and flink:vkCmdDispatchIndirect.
+
+Drawing Commands::
+    Commands that provoke work using a graphics pipeline.
+    Includes flink:vkCmdDraw, flink:vkCmdDrawIndexed,
+ifdef::VK_VERSION_1_2[]
+    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_EXT_multi_draw[]
+    flink:vkCmdDrawMultiIndexedEXT, flink:vkCmdDrawMultiEXT,
+endif::VK_EXT_multi_draw[]
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawMeshTasksEXT, flink:vkCmdDrawMeshTasksIndirectEXT,
+    flink:vkCmdDrawMeshTasksIndirectCountEXT,
+endif::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawIndirect, and flink:vkCmdDrawIndexedIndirect.
+
+Duration (Command)::
+    The _duration_ of a Vulkan command refers to the interval between
+    calling the command and its return to the caller.
+
+Dynamic Storage Buffer::
+    A storage buffer whose offset is specified each time the storage buffer
+    is bound to a command buffer via a descriptor set.
+
+Dynamic Uniform Buffer::
+    A uniform buffer whose offset is specified each time the uniform buffer
+    is bound to a command buffer via a descriptor set.
+
+Dynamically Uniform::
+    See _Dynamically Uniform_ in section 2.2 "`Terms`" of the
+    <<spirv-spec,Khronos SPIR-V Specification>>.
+
+ifdef::VK_KHR_video_queue[]
+Encode Input Picture::
+    A video picture resource used as the input of a video encode operation.
+endif::VK_KHR_video_queue[]
+
+Element::
+    Arrays are composed of multiple elements, where each element exists at a
+    unique index within that array.
+    Used primarily to describe data passed to or returned from the Vulkan
+    API.
+
+Explicitly-Enabled Layer::
+    A layer enabled by the application by adding it to the enabled layer
+    list in flink:vkCreateInstance or flink:vkCreateDevice.
+
+Event::
+    A synchronization primitive that is signaled when execution of previous
+    commands completes through a specified set of pipeline stages.
+    Events can be waited on by the device and polled by the host.
+    Represented by a slink:VkEvent object.
+
+Executable State (Command Buffer)::
+    A command buffer that has ended recording commands and can: be executed.
+    See also Initial State and Recording State.
+
+Execution Dependency::
+    A dependency that guarantees that certain pipeline stages`' work for a
+    first set of commands has completed execution before certain pipeline
+    stages`' work for a second set of commands begins execution.
+    This is accomplished via pipeline barriers, subpass dependencies,
+    events, or implicit ordering operations.
+
+Execution Dependency Chain::
+    A sequence of execution dependencies that transitively act as a single
+    execution dependency.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Explicit chroma reconstruction::
+    An implementation of sampler {YCbCr} conversion which reconstructs
+    reduced-resolution chroma samples to luma resolution and then separately
+    performs texture sample interpolation.
+    This is distinct from an implicit implementation, which incorporates
+    chroma sample reconstruction into texture sample interpolation.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Extension Scope::
+    The set of objects and commands that can: be affected by an extension.
+    Extensions are either device scope or instance scope.
+
+Extending Structure::
+    A structure type which may appear in the _pname:pNext chain_ of another
+    structure, extending the functionality of the other structure.
+    Extending structures may be defined by either core API versions or
+    extensions.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+External Handle::
+    A resource handle which has meaning outside of a specific Vulkan device
+    or its parent instance.
+    External handles may: be used to share resources between multiple Vulkan
+    devices in different instances, or between Vulkan and other APIs.
+    Some external handle types correspond to platform-defined handles, in
+    which case the resource may: outlive any particular Vulkan device or
+    instance and may: be transferred between processes, or otherwise
+    manipulated via functionality defined by the platform for that handle
+    type.
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+
+External synchronization::
+    A type of synchronization required: of the application, where parameters
+    defined to be externally synchronized must: not be used simultaneously
+    in multiple threads.
+
+Facingness (Polygon)::
+    A classification of a polygon as either front-facing or back-facing,
+    depending on the orientation (winding order) of its vertices.
+
+Facingness (Fragment)::
+    A fragment is either front-facing or back-facing, depending on the
+    primitive it was generated from.
+    If the primitive was a polygon (regardless of polygon mode), the
+    fragment inherits the facingness of the polygon.
+    All other fragments are front-facing.
+
+Fence::
+    A synchronization primitive that is signaled when a set of batches or
+    sparse binding operations complete execution on a queue.
+    Fences can: be waited on by the host.
+    Represented by a slink:VkFence object.
+
+ifdef::VK_KHR_video_coding[]
+Field (Video)::
+    Possibly discontinuous subregions of a frame.
+    Frames may: consist of two fields, a top field and a bottom field.
+endif::VK_KHR_video_coding[]
+
+Flat Shading::
+    A property of a vertex attribute that causes the value from a single
+    vertex (the provoking vertex) to be used for all vertices in a
+    primitive, and for interpolation of that attribute to return that single
+    value unaltered.
+
+Format Features::
+    A set of features from elink:VkFormatFeatureFlagBits that a
+    elink:VkFormat is capable of using for various commands.
+    The list is determined by factors such as elink:VkImageTiling.
+
+Fragment::
+    A rectangular framebuffer region with associated data produced by
+    <<primsrast,rasterization>> and processed by <<fragops,fragment
+    operations>> including the fragment shader.
+
+[[glossary-fragment-area]]
+Fragment Area::
+    The width and height, in pixels, of a fragment.
+
+ifdef::VK_EXT_fragment_density_map[]
+[[glossary-fragment-density]]
+Fragment Density::
+    The ratio of fragments per framebuffer area in the x and y direction.
+
+[[glossary-fragment-density-texel-size]]
+Fragment Density Texel Size::
+    The [eq]#(w,h)# framebuffer region in pixels that each texel in a
+    fragment density map applies to.
+endif::VK_EXT_fragment_density_map[]
+
+Fragment Input Attachment Interface::
+    Variables with code:UniformConstant storage class and a decoration of
+    code:InputAttachmentIndex that are statically used by a fragment
+    shader's entry point, which receive values from input attachments.
+
+ifdef::VK_AMD_shader_fragment_mask[]
+Fragment Mask::
+    A lookup table that associates color samples with color fragment values.
+endif::VK_AMD_shader_fragment_mask[]
+
+Fragment Output Interface::
+    A fragment shader entry point's variables with code:Output storage
+    class, which output to color and/or depth/stencil attachments.
+
+ifdef::VK_KHR_video_queue[]
+Frame (Video)::
+    A multi-dimensional array of luma samples and an optional
+    multi-dimensional array of chroma samples.
+endif::VK_KHR_video_queue[]
+
+ifdef::VK_EXT_shader_tile_image[]
+[[glossary-fragment-tile-image-interface]]
+Fragment Tile Image Interface::
+    A fragment shader entry point's variables with code:TileImageEXT storage
+    class and a decoration of code:Location, which are used to read values
+    from color attachments.
+endif::VK_EXT_shader_tile_image[]
+
+Framebuffer::
+    A collection of image views and a set of dimensions that, in conjunction
+    with a render pass, define the inputs and outputs used by drawing
+    commands.
+    Represented by a slink:VkFramebuffer object.
+
+Framebuffer Attachment::
+    One of the image views used in a framebuffer.
+
+Framebuffer Coordinates::
+    A coordinate system in which adjacent pixels`' coordinates differ by 1
+    in x and/or y, with [eq]#(0,0)# in the upper left corner and pixel
+    centers at half-integers.
+
+Framebuffer-Space::
+    Operating with respect to framebuffer coordinates.
+
+Framebuffer-Local::
+    A framebuffer-local dependency guarantees that only for a single
+    framebuffer region, the first set of operations happens-before the
+    second set of operations.
+
+Framebuffer-Global::
+    A framebuffer-global dependency guarantees that for all framebuffer
+    regions, the first set of operations happens-before the second set of
+    operations.
+
+Framebuffer Region::
+    A framebuffer region is a set of sample (x, y, layer, sample)
+    coordinates that is a subset of the entire framebuffer.
+
+Front-Facing::
+    See Facingness.
+
+Full Compatibility::
+    A given version of the API is fully compatible with another version if
+    an application, relying only on valid behavior and functionality defined
+    by either of those specifications, is able to correctly run against each
+    version without any modification.
+    This assumes no active attempt by that application to not run when it
+    detects a different version.
+
+Global Command::
+    A Vulkan command for which the first argument is not a dispatchable
+    handle type.
+
+Global Workgroup::
+    A collection of local workgroups dispatched by a single dispatching
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[or single mesh task drawing]
+    command.
+
+Handle::
+    An opaque integer or pointer value used to refer to a Vulkan object.
+    Each object type has a unique handle type.
+
+Happen-after, happens-after::
+    A transitive, irreflexive and antisymmetric ordering relation between
+    operations.
+    An execution dependency with a source of *A* and a destination of *B*
+    enforces that *B* happens-after *A*.
+    The inverse relation of happens-before.
+
+Happen-before, happens-before::
+    A transitive, irreflexive and antisymmetric ordering relation between
+    operations.
+    An execution dependency with a source of *A* and a destination of *B*
+    enforces that *A* happens-before *B*.
+    The inverse relation of happens-after.
+
+Helper Invocation::
+    A fragment shader invocation that is created solely for the purposes of
+    evaluating derivatives for use in non-helper fragment shader
+    invocations, and which does not have side effects.
+
+Host::
+    The processor(s) and execution environment that the application runs on,
+    and that the Vulkan API is exposed on.
+
+Host Mapped Device Memory::
+    Device memory that is mapped for host access using flink:vkMapMemory.
+
+ifdef::VK_EXT_external_memory_host[]
+Host Mapped Foreign Memory::
+    Memory owned by a foreign device that is mapped for host access.
+endif::VK_EXT_external_memory_host[]
+
+Host Memory::
+    Memory not accessible to the device, used to store implementation data
+    structures.
+
+Host-Accessible Subresource::
+    A buffer, or a linear image subresource in either the
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
+    layout.
+    Host-accessible subresources have a well-defined addressing scheme which
+    can be used by the host.
+
+Host-Local Memory::
+    Memory that is not local to the device, and may: be less performant for
+    device access than device-local memory.
+
+Host-Visible Memory::
+    Device memory that can: be mapped on the host and can: be read and
+    written by the host.
+
+ICD::
+    Installable Client Driver.
+    An ICD is represented as a slink:VkPhysicalDevice.
+
+[[glossary-identically-defined]]
+Identically Defined Objects::
+    Objects of the same type where all arguments to their creation or
+    allocation functions, with the exception of pname:pAllocator, are +
+    . Vulkan handles which refer to the same object or
+    . identical scalar or enumeration values or
+    . Host pointers which point to an array of values or structures which
+      also satisfy these three constraints.
+
+Image::
+    A resource that represents a multi-dimensional formatted interpretation
+    of device memory.
+    Represented by a slink:VkImage object.
+
+Image Subresource::
+    A specific mipmap level, layer, and set of aspects of an image.
+
+Image Subresource Range::
+    A set of image subresources that are contiguous mipmap levels and
+    layers.
+
+Image View::
+    An object that represents an image subresource range of a specific
+    image, and state controlling how the contents are interpreted.
+    Represented by a slink:VkImageView object.
+
+Immutable Sampler::
+    A sampler descriptor provided at descriptor set layout creation time for
+    a specific binding.
+    This sampler is then used for that binding in all descriptor sets
+    allocated with the layout, and it cannot: be changed.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Implicit chroma reconstruction::
+    An implementation of sampler {YCbCr} conversion which reconstructs the
+    reduced-resolution chroma samples directly at the sample point, as part
+    of the normal texture sampling operation.
+    This is distinct from an _explicit chroma reconstruction_
+    implementation, which reconstructs the reduced-resolution chroma samples
+    to the resolution of the luma samples, then filters the result as part
+    of texture sample interpolation.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Implicitly-Enabled Layer::
+    A layer enabled by a loader-defined mechanism outside the Vulkan API,
+    rather than explicitly by the application during instance or device
+    creation.
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+Inactive Object (Ray Tracing)::
+    A primitive or instance in a ray tracing acceleration structure which
+    has a corresponding ID, but which will never report an intersection with
+    any ray.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+Index Buffer::
+    A buffer bound via flink:vkCmdBindIndexBuffer which is the source of
+    index values used to fetch vertex attributes for a
+    flink:vkCmdDrawIndexed or flink:vkCmdDrawIndexedIndirect command.
+
+Indexed Drawing Commands::
+    _Drawing commands_ which use an _index buffer_ as the source of index
+    values used to fetch vertex attributes for a drawing command.
+    Includes flink:vkCmdDrawIndexed,
+ifdef::VK_VERSION_1_2[]
+    flink:vkCmdDrawIndexedIndirectCount,
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+    flink:vkCmdDrawIndexedIndirectCountKHR,
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+    flink:vkCmdDrawIndexedIndirectCountAMD,
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_EXT_multi_draw[]
+    flink:vkCmdDrawMultiIndexedEXT,
+endif::VK_EXT_multi_draw[]
+    and flink:vkCmdDrawIndexedIndirect.
+
+Indirect Commands::
+    Drawing or dispatching commands that source some of their parameters
+    from structures in buffer memory.
+    Includes flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
+ifdef::VK_VERSION_1_2[]
+    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectNV,
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectEXT,
+    flink:vkCmdDrawMeshTasksIndirectCountEXT,
+endif::VK_EXT_mesh_shader[]
+    and flink:vkCmdDispatchIndirect.
+
+ifdef::VK_NV_device_generated_commands[]
+Indirect Commands Layout::
+    A definition of a sequence of commands, that are generated on the device
+    via flink:vkCmdPreprocessGeneratedCommandsNV and
+    flink:vkCmdExecuteGeneratedCommandsNV.
+    Each sequence is comprised of multiple
+    elink:VkIndirectCommandsTokenTypeNV, which represent a subset of
+    traditional command buffer commands.
+    Represented as slink:VkIndirectCommandsLayoutNV.
+endif::VK_NV_device_generated_commands[]
+
+Indirect Drawing Commands::
+    _Drawing commands_ that source some of their parameters from structures
+    in buffer memory.
+    Includes flink:vkCmdDrawIndirect,
+ifdef::VK_VERSION_1_2[]
+    flink:vkCmdDrawIndirectCount, flink:vkCmdDrawIndexedIndirectCount,
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectNV,
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectEXT,
+    flink:vkCmdDrawMeshTasksIndirectCountEXT,
+endif::VK_EXT_mesh_shader[]
+    and flink:vkCmdDrawIndexedIndirect.
+
+Initial State (Command Buffer)::
+    A command buffer that has not begun recording commands.
+    See also Recording State and Executable State.
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+Inline Uniform Block::
+    A descriptor type that represents uniform data stored directly in
+    descriptor sets, and supports read-only access in a shader.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+Input Attachment::
+    A descriptor type that represents an image view, and supports unfiltered
+    read-only access in a shader, only at the fragment's location in the
+    view.
+
+Instance::
+    The top-level Vulkan object, which represents the application's
+    connection to the implementation.
+    Represented by a slink:VkInstance object.
+
+Instance-Level Command::
+    Any command that is dispatched from an instance, or from a child object
+    of an instance, except for physical devices and their children.
+
+Instance-Level Functionality::
+    All instance-level commands and objects, and their structures,
+    enumerated types, and enumerants.
+
+Instance-Level Object::
+    High-level Vulkan objects, which are not physical devices, nor children
+    of physical devices.
+    For example, slink:VkInstance is an instance-level object.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+Instance (Memory)::
+    In a logical device representing more than one physical device, some
+    device memory allocations have the requested amount of memory allocated
+    multiple times, once for each physical device in a device mask.
+    Each such replicated allocation is an instance of the device memory.
+
+Instance (Resource)::
+    In a logical device representing more than one physical device, buffer
+    and image resources exist on all physical devices but can: be bound to
+    memory differently on each.
+    Each such replicated resource is an instance of the resource.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+Internal Synchronization::
+    A type of synchronization required: of the implementation, where
+    parameters not defined to be externally synchronized may: require
+    internal mutexing to avoid multithreaded race conditions.
+
+Invocation (Shader)::
+    A single execution of an entry point in a SPIR-V module.
+    For example, a single vertex's execution of a vertex shader or a single
+    fragment's execution of a fragment shader.
+
+Invocation Group::
+    A set of shader invocations that are executed in parallel and that must:
+    execute the same control flow path in order for control flow to be
+    considered dynamically uniform.
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+Invocation Repack Instruction::
+    A ray tracing shader call <<ray-tracing-repack,instruction>> where the
+    implementation may: change the set of invocations that are executing.
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_deferred_host_operations[]
+Join (Deferred Host Operations)::
+    The act of instructing a thread to participate in the execution of a
+    deferred operation.
+    See <<deferred-host-operations, Deferred Host Operations>>.
+endif::VK_KHR_deferred_host_operations[]
+
+ifdef::VK_NV_linear_color_attachment[]
+[[glossary-linear-color-attachment]]
+Linear Color Attachment::
+    A color attachment with linear tiling
+endif::VK_NV_linear_color_attachment[]
+
+[[glossary-linear-resource]]
+Linear Resource::
++
+--
+A resource is _linear_ if it is one of the following:
+
+  * a slink:VkBuffer
+  * a slink:VkImage created with ename:VK_IMAGE_TILING_LINEAR
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * a slink:VkImage created with
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
+    <<glossary-drm-format-modifier,Linux DRM format modifier>> is
+    code:DRM_FORMAT_MOD_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_NV_ray_tracing[]
+  * a slink:VkAccelerationStructureNV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure[]
+
+Because a slink:VkAccelerationStructureKHR resource does not have memory
+bound to it directly, it is considered neither linear nor non-linear.
+However, the slink:VkBuffer on which a slink:VkAccelerationStructureKHR
+resource is placed is a linear resource.
+endif::VK_KHR_acceleration_structure[]
+
+A resource is _non-linear_ if it is one of the following:
+
+  * a slink:VkImage created with ename:VK_IMAGE_TILING_OPTIMAL
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * a slink:VkImage created with
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and whose
+    <<glossary-drm-format-modifier,Linux DRM format modifier>> is not
+    code:DRM_FORMAT_MOD_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+--
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[[glossary-drm-format-modifier,Linux DRM format modifier]]
+Linux DRM Format Modifier::
+    A 64-bit, vendor-prefixed, semi-opaque unsigned integer describing
+    vendor-specific details of an image's memory layout.
+    In Linux graphics APIs, _modifiers_ are commonly used to specify the
+    memory layout of externally shared images.
+    An image has a _modifier_ if and only if it is created with pname:tiling
+    equal to ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
+    For more details, refer to the appendix for extension
+    `apiext:VK_EXT_image_drm_format_modifier`.
+endif::VK_EXT_image_drm_format_modifier[]
+
+Local Workgroup::
+    A collection of compute shader invocations invoked by a single
+    dispatching command, which share data via code:WorkgroupLocal variables
+    and can synchronize with each other.
+
+Logical Device::
+    An object that represents the application's interface to the physical
+    device.
+    The logical device is the parent of most Vulkan objects.
+    Represented by a slink:VkDevice object.
+
+Logical Operation::
+    Bitwise operations between a fragment color value and a value in a color
+    attachment, that produce a final color value to be written to the
+    attachment.
+
+Lost Device::
+    A state that a logical device may: be in as a result of unrecoverable
+    implementation errors, or other exceptional conditions.
+
+Mappable::
+    See Host-Visible Memory.
+
+Memory Dependency::
+    A memory dependency is an execution dependency which includes
+    availability and visibility operations such that:
+
+  * The first set of operations happens-before the availability operation
+  * The availability operation happens-before the visibility operation
+  * The visibility operation happens-before the second set of operations
+
+Memory Domain::
+    A memory domain is an abstract place to which memory writes are made
+    available by availability operations and memory domain operations.
+    The memory domains correspond to the set of agents that the write can:
+    then be made visible to.
+    The memory domains are _host_, _device_, _shader_, _workgroup instance_
+    (for workgroup instance there is a unique domain for each compute
+    workgroup) and _subgroup instance_ (for subgroup instance there is a
+    unique domain for each subgroup).
+
+Memory Domain Operation::
+    An operation that makes the writes that are available to one memory
+    domain available to another memory domain.
+
+Memory Heap::
+    A region of memory from which device memory allocations can: be made.
+
+Memory Type::
+    An index used to select a set of memory properties (e.g. mappable,
+    cached) for a device memory allocation.
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Mesh Shading Pipeline::
+    A graphics pipeline where the primitives are assembled explicitly in the
+    shader stages.
+    In contrast to the primitive shading pipeline where input primitives are
+    assembled by fixed function processing.
+
+Mesh Tasks Drawing Commands::
+    _Drawing commands_ which create shader invocations organized in
+    workgroups for drawing mesh tasks.
+    Includes
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV, and
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    flink:vkCmdDrawMeshTasksEXT, flink:vkCmdDrawMeshTasksIndirectEXT, and
+    flink:vkCmdDrawMeshTasksIndirectCountEXT
+endif::VK_EXT_mesh_shader[]
+    .
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+Minimum Mip Level Size::
+    The smallest size that is permitted for a mip level.
+    For conventional images this is 1x1x1.
+ifdef::VK_NV_corner_sampled_image[]
+    For corner-sampled images, this is 2x2x2.
+endif::VK_NV_corner_sampled_image[]
+    See <<resources-image-mip-level-sizing, Image Mip Level Sizing>>.
+
+Mip Tail Region::
+    The set of mipmap levels of a sparse residency texture that are too
+    small to fill a sparse block, and that must: all be bound to memory
+    collectively and opaquely.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Multi-planar::
+    A _multi-planar format_ (or "`planar format`") is an image format
+    consisting of more than one _plane_, identifiable with a etext:_2PLANE
+    or etext:_3PLANE component to the format name and listed in
+    <<formats-requiring-sampler-ycbcr-conversion>>.
+    A _multi-planar image_ (or "`planar image`") is an image of a
+    multi-planar format.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_EXT_nested_command_buffer[]
+Nested Command Buffers::
+    A nested command buffer is a secondary command buffer that is executed
+    by another secondary command buffer, which may itself execute other
+    secondary command buffers.
+endif::VK_EXT_nested_command_buffer[]
+
+Non-Dispatchable Handle::
+    A handle of an integer handle type.
+    Handle values may: not be unique, even for two objects of the same type.
+
+Non-Indexed Drawing Commands::
+    _Drawing commands_ for which the vertex attributes are sourced in linear
+    order from the vertex input attributes for a drawing command (i.e. they
+    do not use an _index buffer_).
+    Includes flink:vkCmdDraw,
+ifdef::VK_VERSION_1_2[]
+    flink:vkCmdDrawIndirectCount,
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountKHR,
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+    flink:vkCmdDrawIndirectCountAMD,
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_EXT_multi_draw[]
+    flink:vkCmdDrawMultiEXT,
+endif::VK_EXT_multi_draw[]
+    and flink:vkCmdDrawIndirect.
+
+Normalized::
+    A value that is interpreted as being in the range [eq]#[0,1]# as a
+    result of being implicitly divided by some other value.
+
+Normalized Device Coordinates::
+    A coordinate space after perspective division is applied to clip
+    coordinates, and before the viewport transformation converts them to
+    framebuffer coordinates.
+
+Obsoleted (feature)::
+    A feature is obsolete if it can no longer be used.
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+Opaque Capture Address::
+    A 64-bit value representing the device address of a buffer or memory
+    object that is expected to be used by trace capture/replay tools in
+    combination with the <<features-bufferDeviceAddress,
+    pname:bufferDeviceAddress>> feature.
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+Overlapped Range (Aliased Range)::
+    The aliased range of a device memory allocation that intersects a given
+    image subresource of an image or range of a buffer.
+
+Ownership (Resource)::
+    If an entity (e.g. a queue family) has ownership of a resource, access
+    to that resource is well-defined for access by that entity.
+
+Packed Format::
+    A format whose components are stored as a single texel block in memory,
+    with their relative locations defined within that element.
+
+ifdef::VK_NV_geometry_shader_passthrough[]
+Passthrough Geometry Shader::
+    A geometry shader which uses the code:PassthroughNV decoration on a
+    variable in its input interface.
+    Output primitives in a passthrough geometry shader always have the same
+    topology as the input primitive and are not produced by emitting
+    vertices.
+endif::VK_NV_geometry_shader_passthrough[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]
+Payload::
+    Importable or exportable reference to the internal data of an object in
+    Vulkan.
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore,VK_KHR_external_fence[]
+
+ifdef::VK_NV_mesh_shader[]
+Per-View::
+    A variable that has an array of values which are output, one for each
+    view that is being generated.
+    A mesh shader which uses the code:PerViewNV decoration on a variable in
+    its output interface.
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+Peer Memory::
+    An instance of memory corresponding to a different physical device than
+    the physical device performing the memory access, in a logical device
+    that represents multiple physical devices.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+Physical Device::
+    An object that represents a single device in the system.
+    Represented by a slink:VkPhysicalDevice object.
+
+Physical-Device-Level Command::
+    Any command that is dispatched from a physical device.
+
+Physical-Device-Level Functionality::
+    All physical-device-level commands and objects, and their structures,
+    enumerated types, and enumerants.
+
+Physical-Device-Level Object::
+    Physical device objects.
+    For example, slink:VkPhysicalDevice is a physical-device-level object.
+
+Pipeline::
+    An object controlling how graphics or compute work is executed on the
+    device.
+    A pipeline includes one or more shaders, as well as state controlling
+    any non-programmable stages of the pipeline.
+    Represented by a slink:VkPipeline object.
+
+Pipeline Barrier::
+    An execution and/or memory dependency recorded as an explicit command in
+    a command buffer, that forms a dependency between the previous and
+    subsequent commands.
+
+Pipeline Cache::
+    An object that can: be used to collect and retrieve information from
+    pipelines as they are created, and can: be populated with previously
+    retrieved information in order to accelerate pipeline creation.
+    Represented by a slink:VkPipelineCache object.
+
+ifdef::VKSC_VERSION_1_0[]
+Pipeline JSON Schema::
+    A JSON-based representation for encapsulating all pipeline state which
+    is necessary for the offline pipeline cache compiler.
+    This includes the SPIR-V shader module, pipeline layout, render pass
+    information and pipeline state creation information.
+endif::VKSC_VERSION_1_0[]
+
+Pipeline Layout::
+    An object defining the set of resources (via a collection of descriptor
+    set layouts) and push constants used by pipelines that are created using
+    the layout.
+    Used when creating a pipeline and when binding descriptor sets and
+    setting push constant values.
+    Represented by a slink:VkPipelineLayout object.
+
+ifdef::VK_KHR_pipeline_library[]
+Pipeline Library::
+    A pipeline that cannot be directly used, instead defining a set of
+    shaders and shader groups which will be <<pipelines-library,linked into
+    other pipelines>>.
+endif::VK_KHR_pipeline_library[]
+
+Pipeline Stage::
+    A logically independent execution unit that performs some of the
+    operations defined by an action command.
+
+ifdef::VKSC_VERSION_1_0[]
+Pipeline Identifier::
+    An identifier that can be used to identify a specific pipeline
+    independently from the pipeline description.
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+Pipeline Trace Ray Instruction::
+    A ray tracing instruction which traces a ray into an acceleration
+    structure when using ray tracing pipelines.
+    One of
+ifdef::VK_NV_ray_tracing[code:OpTraceNV,]
+ifdef::VK_NV_ray_tracing_motion_blur[code:OpTraceRayMotionNV, code:OpTraceMotionNV,]
+ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
+    .
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+pname:pNext Chain::
+    A set of structures <<fundamentals-validusage-pNext,chained together>>
+    through their ptext:pNext members.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Planar::
+    See _multi-planar_.
+
+Plane::
+    An _image plane_ is part of the representation of an image, containing a
+    subset of the color components necessary to represent the texels in the
+    image and with a contiguous mapping of coordinates to bound memory.
+    Most images consist only of a single plane, but some formats spread the
+    components across multiple image planes.
+    The host-accessible properties of each image plane are accessible for a
+    linear layout using flink:vkGetImageSubresourceLayout.
+    If a multi-planar image is created with the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set, the image is described as
+    _disjoint_, and its planes are therefore bound to memory independently.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Point Sampling (Rasterization)::
+    A rule that determines whether a fragment sample location is covered by
+    a polygon primitive by testing whether the sample location is in the
+    interior of the polygon in framebuffer-space, or on the boundary of the
+    polygon according to the tie-breaking rules.
+
+Potential Format Features::
+    The union of all elink:VkFormatFeatureFlagBits that the implementation
+    supports for a specified elink:VkFormat, over all supported image
+    tilings.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    For <<memory-external-android-hardware-buffer-external-formats,Android
+    external formats>> the elink:VkFormatFeatureFlagBits is provided by the
+    implementation.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+    For <<memory-external-screen-buffer-external-formats,QNX Screen external
+    formats>> the elink:VkFormatFeatureFlagBits is provided by the
+    implementation.
+endif::VK_QNX_external_memory_screen_buffer[]
+
+Pre-rasterization::
+    Operations that execute before <<primsrast,rasterization>>, and any
+    state associated with those operations.
+
+ifdef::VK_KHR_swapchain[]
+Presentable image::
+    A sname:VkImage object obtained from a sname:VkSwapchainKHR used to
+    present to a sname:VkSurfaceKHR object.
+endif::VK_KHR_swapchain[]
+
+Preserve Attachment::
+    One of a list of attachments in a subpass description that is not read
+    or written by the subpass, but that is read or written on earlier and
+    later subpasses and whose contents must: be preserved through this
+    subpass.
+
+Primary Command Buffer::
+    A command buffer that can: execute secondary command buffers, and can:
+    be submitted directly to a queue.
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Primitive Shading Pipeline::
+    A graphics pipeline where input primitives are assembled by fixed
+    function processing.
+    It is the counterpart to mesh shading.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+Primitive Topology::
+    State controlling how vertices are assembled into primitives, e.g. as
+    lists of triangles, strips of lines, etc.
+
+Promoted (feature)::
+    A feature from an older extension is considered promoted if it is made
+    available as part of a new core version or newer extension with wider
+    support.
+
+ifdef::VK_VERSION_1_1[]
+Protected Buffer::
+    A buffer to which protected device memory can: be bound.
+
+Protected-capable Device Queue::
+    A device queue to which protected command buffers can: be submitted.
+
+Protected Command Buffer::
+    A command buffer which can: be submitted to a protected-capable device
+    queue.
+
+Protected Device Memory::
+    Device memory which can: be visible to the device but must: not be
+    visible to the host.
+
+Protected Image::
+    An image to which protected device memory can: be bound.
+endif::VK_VERSION_1_1[]
+
+Provisional::
+    A feature is released provisionally in order to get wider feedback on
+    the functionality before it is finalized.
+    Provisional features may change in ways that break backwards
+    compatibility, and thus are not recommended for use in production
+    applications.
+
+Provoking Vertex::
+    The vertex in a primitive from which flat shaded attribute values are
+    taken.
+    This is generally the "`first`" vertex in the primitive, and depends on
+    the primitive topology.
+
+Push Constants::
+    A small bank of values writable via the API and accessible in shaders.
+    Push constants allow the application to set values used in shaders
+    without creating buffers or modifying and binding descriptor sets for
+    each update.
+
+Push Constant Interface::
+    The set of variables with code:PushConstant storage class that are
+    statically used by a shader entry point, and which receive values from
+    push constant commands.
+
+ifdef::VK_KHR_push_descriptor[]
+Push Descriptors::
+    Descriptors that are written directly into a command buffer rather than
+    into a descriptor set.
+    Push descriptors allow the application to set descriptors used in
+    shaders without allocating or modifying descriptor sets for each update.
+endif::VK_KHR_push_descriptor[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+Descriptor Update Template::
+    An object specifying a mapping from descriptor update information in
+    host memory to elements in a descriptor set, which helps enable more
+    efficient descriptor set updates.
+
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+
+Query Pool::
+    An object containing a number of query entries and their associated
+    state and results.
+    Represented by a slink:VkQueryPool object.
+
+Queue::
+    An object that executes command buffers and sparse binding operations on
+    a device.
+    Represented by a slink:VkQueue object.
+
+Queue Family::
+    A set of queues that have common properties and support the same
+    functionality, as advertised in slink:VkQueueFamilyProperties.
+
+Queue Operation::
+    A unit of work to be executed by a specific queue on a device, submitted
+    via a <<devsandqueues-submission, queue submission command>>.
+    Each queue submission command details the specific queue operations that
+    occur as a result of calling that command.
+    Queue operations typically include work that is specific to each
+    command, and synchronization tasks.
+
+Queue Submission::
+    Zero or more batches and an optional fence to be signaled, passed to a
+    command for execution on a queue.
+    See the <<devsandqueues-submission, Devices and Queues chapter>> for
+    more information.
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+Ray Tracing Command::
+    Commands that provoke work using a ray tracing pipeline.
+    Includes
+ifdef::VK_NV_ray_tracing[flink:vkCmdTraceRaysNV,]
+ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCmdTraceRaysKHR, and flink:vkCmdTraceRaysIndirectKHR]
+    .
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_video_queue[]
+Reconstructed Picture::
+    A video picture resource reconstructed from a compressed bitstream using
+    video decode or encode operations that can: be used as a reference
+    picture by future video decode or encode operations with the same video
+    session.
+endif::VK_KHR_video_queue[]
+
+Recording State (Command Buffer)::
+    A command buffer that is ready to record commands.
+    See also Initial State and Executable State.
+
+ifdef::VK_KHR_video_queue[]
+Reference Picture::
+    A video picture resource used by video decode and encode operations to
+    provide predictions of the values of samples in the subsequently decoded
+    or encoded pictures.
+
+Reference Picture Metadata::
+    Opaque state associated with a DPB slot, maintained by a video session.
+endif::VK_KHR_video_queue[]
+
+Release Operation (Resource)::
+    An operation that releases ownership of an image subresource or buffer
+    range.
+
+Render Pass::
+    An object that represents a set of framebuffer attachments and phases of
+    rendering using those attachments.
+    Represented by a slink:VkRenderPass object.
+
+Render Pass Instance::
+    A use of a render pass in a command buffer.
+
+Required Extensions::
+    Extensions that must: be enabled alongside extensions dependent on them
+    (see <<extendingvulkan-extensions-extensiondependencies, Extension
+    Dependencies>>).
+
+Reset (Command Buffer)::
+    Resetting a command buffer discards any previously recorded commands and
+    puts a command buffer in the initial state.
+
+Residency Code::
+    An integer value returned by sparse image instructions, indicating
+    whether any sparse unbound texels were accessed.
+
+Resolve Attachment::
+    A subpass attachment point, or image view, that is the target of a
+    multisample resolve operation from the corresponding color attachment at
+    the end of the subpass.
+
+ifdef::VK_KHR_swapchain[]
+Retired Swapchain::
+    A swapchain that has been used as the pname:oldSwapchain parameter to
+    flink:vkCreateSwapchainKHR.
+    Images cannot be acquired from a retired swapchain, however images that
+    were acquired (but not presented) before the swapchain was retired can:
+    be presented.
+endif::VK_KHR_swapchain[]
+
+Sample Index::
+    The index of a sample within a <<primsrast-multisampling-coverage-mask,
+    single set of samples>>.
+
+Sample Shading::
+    Invoking the fragment shader multiple times per fragment, with the
+    covered samples partitioned among the invocations.
+
+Sampled Image::
+    A descriptor type that represents an image view, and supports filtered
+    (sampled) and unfiltered read-only access in a shader.
+
+Sampler::
+    An object containing state controlling how sampled image data is sampled
+    (or filtered) when accessed in a shader.
+    Also a descriptor type describing the object.
+    Represented by a slink:VkSampler object.
+
+Secondary Command Buffer::
+    A command buffer that can: be executed by a primary command buffer, and
+    must: not be submitted directly to a queue.
+
+Self-Dependency::
+    A subpass dependency from a subpass to itself, i.e. with
+    pname:srcSubpass equal to pname:dstSubpass.
+    A self-dependency is not automatically performed during a render pass
+    instance, rather a subset of it can: be performed via
+    flink:vkCmdPipelineBarrier during the subpass.
+
+Semaphore::
+    A synchronization primitive that supports signal and wait operations,
+    and can: be used to synchronize operations within a queue or across
+    queues.
+    Represented by a slink:VkSemaphore object.
+
+Shader::
+    Instructions selected (via an entry point) from a shader module, which
+    are executed in a shader stage.
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+Shader Call::
+    An <<ray-tracing-shader-call,instruction>> which may: cause execution to
+    continue in a different shader stage.
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+Shader Code::
+    A stream of instructions used to describe the operation of a shader.
+
+ifdef::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+Shader Group::
+    A set of Shader Stages that are part of a slink:VkPipeline containing
+    multiple of such sets.
+    This allows the device to make use of all the shader groups from the
+    bound pipeline independently.
+endif::VK_NV_device_generated_commands,VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+Shader Module::
+    A collection of shader code, potentially including several functions and
+    entry points, that is used to create shaders in pipelines.
+    Represented by a slink:VkShaderModule object.
+
+Shader Stage::
+    A stage of the graphics or compute pipeline that executes shader code.
+
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+[[glossary-shading-rate]]
+Shading Rate::
+    The ratio of the number of fragment shader invocations generated in a
+    fully covered framebuffer region to the size (in pixels) of that region.
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+
+ifdef::VK_NV_shading_rate_image[]
+[[glossary-shading-rate-image]]
+Shading Rate Image::
+    An image used to establish the shading rate for a framebuffer region,
+    where each pixel controls the shading rate for a corresponding
+    framebuffer region.
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_KHR_shared_presentable_image[]
+Shared presentable image::
+    A presentable image created from a swapchain with elink:VkPresentModeKHR
+    set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
+endif::VK_KHR_shared_presentable_image[]
+
+Side Effect::
+    A store to memory or atomic operation on memory from a shader
+    invocation.
+
+ifdef::VKSC_VERSION_1_0[]
+Single Event Upset::
+    A change of physical device state, such as a register or memory bitflip,
+    e.g. caused by ionizing radiation.
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Single-plane format::
+    A format that is not _multi-planar_.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Size-Compatible Image Formats::
+    When a compressed image format and an uncompressed image format are
+    size-compatible, it means that the texel block size of the uncompressed
+    format must: equal the texel block size of the compressed format.
+
+Sparse Block::
+    An element of a sparse resource that can be independently bound to
+    memory.
+    Sparse blocks of a particular sparse resource have a corresponding size
+    in bytes that they use in the bound memory.
+
+Sparse Image Block::
+    A sparse block in a sparse partially-resident image.
+    In addition to the sparse block size in bytes, sparse image blocks have
+    a corresponding width, height, and depth defining the dimensions of
+    these elements in units of texels or compressed texel blocks, the latter
+    being used in case of sparse images having a block-compressed format.
+
+Sparse Unbound Texel::
+    A texel read from a region of a sparse texture that does not have memory
+    bound to it.
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+SRT::
+    A decomposition of a spatial transform separating out scale, rotation,
+    and translation which has better linear interpolation properties for
+    representing motion.
+endif::VK_NV_ray_tracing_motion_blur[]
+
+Static Use::
+    An object in a shader is statically used by a shader entry point if any
+    function in the entry point's call tree contains an instruction using
+    the object.
+    A reference in the entry point's interface list does not constitute a
+    static use.
+    Static use is used to constrain the set of descriptors used by a shader
+    entry point.
+
+Storage Buffer::
+    A descriptor type that represents a buffer, and supports reads, writes,
+    and atomics in a shader.
+
+Storage Image::
+    A descriptor type that represents an image view, and supports unfiltered
+    loads, stores, and atomics in a shader.
+
+Storage Texel Buffer::
+    A descriptor type that represents a buffer view, and supports
+    unfiltered, formatted reads, writes, and atomics in a shader.
+
+ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]
+Subgroup::
+    A set of shader invocations that can: synchronize and share data with
+    each other efficiently.
+    In compute shaders, the _local workgroup_ is a superset of the subgroup.
+endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_vote[]
+
+ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
+Subgroup Mask::
+    A bitmask for all invocations in the current subgroup with one bit per
+    invocation, starting with the least significant bit in the first vector
+    component, continuing to the last bit (less than code:SubgroupSize) in
+    the last required vector component.
+endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
+
+Subpass::
+    A phase of rendering within a render pass, that reads and writes a
+    subset of the attachments.
+
+Subpass Dependency::
+    An execution and/or memory dependency between two subpasses described as
+    part of render pass creation, and automatically performed between
+    subpasses in a render pass instance.
+    A subpass dependency limits the overlap of execution of the pair of
+    subpasses, and can: provide guarantees of memory coherence between
+    accesses in the subpasses.
+
+Subpass Description::
+    Lists of attachment indices for input attachments, color attachments,
+    depth/stencil attachment, resolve attachments,
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    depth/stencil resolve,
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    and preserve attachments used by the subpass in a render pass.
+
+Subset (Self-Dependency)::
+    A subset of a self-dependency is a pipeline barrier performed during the
+    subpass of the self-dependency, and whose stage masks and access masks
+    each contain a subset of the bits set in the identically named mask in
+    the self-dependency.
+
+Texel Block::
+    A single addressable element of an image with an uncompressed
+    elink:VkFormat, or a single compressed block of an image with a
+    compressed elink:VkFormat.
+
+Texel Block Size::
+    The size (in bytes) used to store a texel block of a compressed or
+    uncompressed image.
+
+Texel Coordinate System::
+    One of three coordinate systems (normalized, unnormalized, integer)
+    defining how texel coordinates are interpreted in an image or a specific
+    mipmap level of an image.
+
+ifdef::VK_EXT_shader_tile_image[]
+[[glossary-tile-image]]
+Tile Image::
+    A per-tile view of a framebuffer attachment.
+    If the `apiext:VK_EXT_shader_tile_image` extension is enabled, the
+    framebuffer is considered to be divided into tiles.
+
+endif::VK_EXT_shader_tile_image[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+Timeline Semaphore::
+    A semaphore with a strictly increasing 64-bit unsigned integer payload
+    indicating whether the semaphore is signaled with respect to a
+    particular reference value.
+    Represented by a slink:VkSemaphore object created with a semaphore type
+    of ename:VK_SEMAPHORE_TYPE_TIMELINE.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+Uniform Texel Buffer::
+    A descriptor type that represents a buffer view, and supports
+    unfiltered, formatted, read-only access in a shader.
+
+Uniform Buffer::
+    A descriptor type that represents a buffer, and supports read-only
+    access in a shader.
+
+Units in the Last Place (ULP)::
+    A measure of floating-point error loosely defined as the smallest
+    representable step in a floating-point format near a given value.
+    For the precise definition see <<spirvenv-precision-operation, Precision
+    and Operation of SPIR-V instructions>> or Jean-Michel Muller, "`On the
+    definition of ulp(x)`", RR-5504, INRIA.
+    Other sources may also use the term "`unit of least precision`".
+
+Unnormalized::
+    A value that is interpreted according to its conventional
+    interpretation, and is not normalized.
+
+ifdef::VK_VERSION_1_1[]
+Unprotected Buffer::
+    A buffer to which unprotected device memory can: be bound.
+
+Unprotected Command Buffer::
+    A command buffer which can: be submitted to an unprotected device queue
+    or a protected-capable device queue.
+
+Unprotected Device Memory::
+    Device memory which can: be visible to the device and can: be visible to
+    the host.
+
+Unprotected Image::
+    An image to which unprotected device memory can: be bound.
+endif::VK_VERSION_1_1[]
+
+User-Defined Variable Interface::
+    A shader entry point's variables with code:Input or code:Output storage
+    class that are not built-in variables.
+
+Vertex Input Attribute::
+    A graphics pipeline resource that produces input values for the vertex
+    shader by reading data from a vertex input binding and converting it to
+    the attribute's format.
+
+ifdef::VK_EXT_transform_feedback[]
+Vertex Stream::
+    A vertex stream is where the last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> outputs vertex data, which then goes to the rasterizer, is
+    captured to a transform feedback buffer, or both.
+    Geometry shaders can: emit primitives to multiple independent vertex
+    streams.
+    Each vertex emitted by the geometry shader is directed at one of the
+    vertex streams.
+endif::VK_EXT_transform_feedback[]
+
+ifdef::VK_EXT_validation_cache[]
+Validation Cache::
+    An object that can: be used to collect and retrieve validation results
+    from the validation layers, and can: be populated with previously
+    retrieved results in order to accelerate the validation process.
+    Represented by a slink:VkValidationCacheEXT object.
+endif::VK_EXT_validation_cache[]
+
+Variable-Sized Descriptor Binding::
+    A descriptor binding whose size will be specified when a descriptor set
+    is allocated using this layout.
+
+Vertex Input Binding::
+    A graphics pipeline resource that is bound to a buffer and includes
+    state that affects addressing calculations within that buffer.
+
+Vertex Input Interface::
+    A vertex shader entry point's variables with code:Input storage class,
+    which receive values from vertex input attributes.
+
+ifdef::VK_KHR_video_queue[]
+Video Bitstream Buffer::
+    A resource that represents a linear array of data in device memory
+    storing encoded video data.
+    Represented by a slink:VkBuffer object.
+
+Video Coding Scope::
+    A series of subsequent commands recorded into a command buffer starting
+    with a flink:vkCmdBeginVideoCodingKHR command and ending with a
+    flink:vkCmdEndVideoCodingKHR command that encompasses a set of video
+    decode or encode operations.
+
+Video Coding Operations::
+    Any operations recorded into a command buffer within a video coding
+    scope, including video decode and encode operations.
+
+Video Decode Operation::
+    An operation consuming data from a video bitstream buffer and zero or
+    more reference pictures, and producing data to a decode output picture
+    and an optional reconstructed picture.
+
+Video Encode Operation::
+    An operation consuming data from an encode input picture and zero or
+    more reference pictures, and producing data to a video bitstream buffer
+    and an optional reconstructed picture.
+
+Video Picture Resource::
+    A resource that represents a multi-dimensional formatted interpretation
+    of device memory to be used with a video session as a decode output
+    picture, encode input picture, reconstructed picture, and/or reference
+    picture.
+    It may: contain metadata associated with a particular video session it
+    is used with.
+    Represented by a slink:VkImage object and referred to using
+    slink:VkImageView objects created from it.
+
+Video Session::
+    A resource that represents and maintains the state needed to perform
+    video decode or encode operations.
+    Represented by a slink:VkVideoSessionKHR object.
+
+Video Session Parameters::
+    A resource that stores preprocessed codec-specific parameters used with
+    a compatible video session in video codec operations.
+    Represented by a slink:VkVideoSessionParametersKHR object.
+
+Video Transcoding::
+    The process of using the outputs of video decoding operations as inputs
+    in video encoding operations.
+endif::VK_KHR_video_queue[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+View Mask::
+    When multiview is enabled, a view mask is a property of a subpass
+    controlling which views the rendering commands are broadcast to.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+View Volume::
+    A subspace in homogeneous coordinates, corresponding to post-projection
+    x and y values between -1 and +1, and z values between 0 and +1.
+
+Viewport Transformation::
+    A transformation from normalized device coordinates to framebuffer
+    coordinates, based on a viewport rectangle and depth range.
+
+Visibility Operation::
+    An operation that causes available values to become visible to specified
+    memory accesses.
+
+Visible::
+    A state of values written to memory that allows them to be accessed by a
+    set of operations.
+
+// To be added per issue 18:
+// Current State <<fundamentals-queueoperation>>
+// Barycentric Coordinates <<primsrast-polygons-basic>>
+// Internal Allocations <<memory-host-allocation-scope>>
+// Unavailable, Available <<queries-operation>> - NB: this clashes with available/visible in terms of memory
+// Signaled, Unsignaled <<synchronization-semaphores>> <<synchronization-fences>>
+// Interior Vertices <<tessellation-tessellator-spacing>>
+// Inner Vertices <<tessellation-triangle-tessellation>> <<tessellation-quad-tessellation>>
+// Isolines <<tessellation-isoline-tessellation>>
+// Binding Range <<sparsemem-memory-binding>>
+
+
+[[lexicon-common-abbreviations]]
+== Common Abbreviations
+
+The abbreviations and acronyms defined in this section are sometimes used in
+the Specification and the API where they are considered clear and
+commonplace.
+
+Src::
+    Source
+
+Dst::
+    Destination
+
+Min::
+    Minimum
+
+Max::
+    Maximum
+
+Rect::
+    Rectangle
+
+Info::
+    Information
+
+LOD::
+    Level of Detail
+
+Log::
+    Logarithm
+
+ID::
+    Identifier
+
+UUID::
+    Universally Unique Identifier
+
+Op::
+    Operation
+
+R::
+    Red color component
+
+G::
+    Green color component
+
+B::
+    Blue color component
+
+A::
+    Alpha color component
+
+RTZ::
+    Round towards zero
+
+RTE::
+    Round to nearest even
+
+
+ifdef::VK_KHR_video_queue[]
+[[lexicon-video-abbreviations]]
+== Video-Specific Abbreviations
+
+The following abbreviations and acronyms are used in the context of video
+decode and encode operations to refer to commonly used video compression
+terms in their usual abbreviated form:
+
+AVC::
+    Advanced Video Coding
+
+Bipred::
+    Bidirectional Prediction
+
+CABAC::
+    Context-Adaptive Binary Arithmetic Coding
+
+CAVLC::
+    Context-Adaptive Variable-Length Coding
+
+CBR::
+    Constant Bit Rate
+
+CTB::
+    Coding Tree Block
+
+Diff::
+    Difference
+
+DPB::
+    Decoded Picture Buffer
+
+GOP::
+    Group Of Pictures
+
+HDR::
+    High Dynamic Range
+
+HEVC::
+    High Efficiency Video Coding
+
+HRD::
+    Hypothetical Reference Decoder
+
+IDC::
+    Indicator
+
+IDR::
+    Instantaneous Decoder Refresh
+
+MB::
+    Macroblock
+
+MV::
+    Motion Vector
+
+NALU::
+    Network Abstraction Layer Unit
+
+PCM::
+    Pulse-Code Modulation
+
+Pic::
+    Picture
+
+Pred::
+    Prediction
+
+PPS::
+    Picture Parameter Set
+
+QP::
+    Quantization Parameter
+
+RC::
+    Rate Control
+
+SPS::
+    Sequence Parameter Set
+
+Std::
+    Standard
+
+VBR::
+    Variable Bit Rate
+
+VCL::
+    Video Coding Layer
+
+VPS::
+    Video Parameter Set
+endif::VK_KHR_video_queue[]
+
+
+[[lexicon-prefixes]]
+== Prefixes
+
+Prefixes are used in the API to denote specific semantic meaning of Vulkan
+names, or as a label to avoid name clashes, and are explained here:
+
+VK/Vk/vk::
+    Vulkan namespace +
+    All types, commands, enumerants and defines in this specification are
+    prefixed with these two characters.
+
+PFN/pfn::
+    Function Pointer +
+    Denotes that a type is a function pointer, or that a variable is of a
+    pointer type.
+
+p::
+    Pointer +
+    Variable is a pointer.
+
+vkCmd::
+    Commands that record commands in command buffers +
+    These API commands do not result in immediate processing on the device.
+    Instead, they record the requested action in a command buffer for
+    execution when the command buffer is submitted to a queue.
+
+s::
+    Structure +
+    Used to denote the etext:VK_STRUCTURE_TYPE* member of each structure in
+    pname:sType
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/invariance.adoc b/codegen/vulkan/vulkan-docs-next/appendices/invariance.adoc
new file mode 100644
index 0000000..908ea7f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/invariance.adoc
@@ -0,0 +1,241 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[invariance]]
+= Invariance
+
+The Vulkan specification is not pixel exact.
+It therefore does not guarantee an exact match between images produced by
+different Vulkan implementations.
+However, the specification does specify exact matches, in some cases, for
+images produced by the same implementation.
+The purpose of this appendix is to identify and provide justification for
+those cases that require exact matches.
+
+== Repeatability
+
+The obvious and most fundamental case is repeated issuance of a series of
+Vulkan commands.
+For any given Vulkan and framebuffer state vector, and for any Vulkan
+command, the resulting Vulkan and framebuffer state must: be identical
+whenever the command is executed on that initial Vulkan and framebuffer
+state.
+This repeatability requirement does not apply when using shaders containing
+side effects (image and buffer variable stores and atomic operations),
+because these memory operations are not guaranteed to be processed in a
+defined order.
+
+ifdef::VK_AMD_rasterization_order[]
+The repeatability requirement does not apply for rendering done using a
+graphics pipeline that uses ename:VK_RASTERIZATION_ORDER_RELAXED_AMD.
+endif::VK_AMD_rasterization_order[]
+
+One purpose of repeatability is avoidance of visual artifacts when a
+double-buffered scene is redrawn.
+If rendering is not repeatable, swapping between two buffers rendered with
+the same command sequence may: result in visible changes in the image.
+Such false motion is distracting to the viewer.
+Another reason for repeatability is testability.
+
+Repeatability, while important, is a weak requirement.
+Given only repeatability as a requirement, two scenes rendered with one
+(small) polygon changed in position might differ at every pixel.
+Such a difference, while within the law of repeatability, is certainly not
+within its spirit.
+Additional invariance rules are desirable to ensure useful operation.
+
+
+== Multi-pass Algorithms
+
+Invariance is necessary for a whole set of useful multi-pass algorithms.
+Such algorithms render multiple times, each time with a different Vulkan
+mode vector, to eventually produce a result in the framebuffer.
+Examples of these algorithms include:
+
+  * "`Erasing`" a primitive from the framebuffer by redrawing it, either in
+    a different color or using the XOR logical operation.
+  * Using stencil operations to compute capping planes.
+
+
+== Invariance Rules
+
+For a given Vulkan device:
+
+*Rule 1* _For any given Vulkan and framebuffer state vector, and for any
+given Vulkan command, the resulting Vulkan and framebuffer state must: be
+identical each time the command is executed on that initial Vulkan and
+framebuffer state._
+
+*Rule 2* _Changes to the following state values have no side effects (the
+use of any other state value is not affected by the change):_
+
+*Required:*
+
+  * _Color and depth/stencil attachment contents_
+  * _Scissor parameters (other than enable)_
+  * _Write masks (color, depth, stencil)_
+  * _Clear values (color, depth, stencil)_
+
+*Strongly suggested:*
+
+  * _Stencil parameters (other than enable)_
+  * _Depth test parameters (other than enable)_
+  * _Blend parameters (other than enable)_
+  * _Logical operation parameters (other than enable)_
+
+*Corollary 1* _Fragment generation is invariant with respect to the state
+values listed in Rule 2._
+
+*Rule 3* _The arithmetic of each per-fragment operation is invariant except
+with respect to parameters that directly control it._
+
+*Corollary 2* _Images rendered into different color attachments of the same
+framebuffer, either simultaneously or separately using the same command
+sequence, are pixel identical._
+
+*Rule 4* _Identical pipelines will produce the same result when run multiple
+times with the same input.
+The wording "`Identical pipelines`" means slink:VkPipeline objects that have
+been created with identical SPIR-V binaries and identical state, which are
+then used by commands executed using the same Vulkan state vector.
+Invariance is relaxed for shaders with side effects, such as performing
+stores or atomics._
+
+*Rule 5* _All fragment shaders that either conditionally or unconditionally
+assign_ code:FragCoord.z _to_ code:FragDepth _are depth-invariant with
+respect to each other, for those fragments where the assignment to_
+code:FragDepth _actually is done._
+
+If a sequence of Vulkan commands specifies primitives to be rendered with
+shaders containing side effects (image and buffer variable stores and atomic
+operations), invariance rules are relaxed.
+In particular, rule 1, corollary 2, and rule 4 do not apply in the presence
+of shader side effects.
+
+The following weaker versions of rules 1 and 4 apply to Vulkan commands
+involving shader side effects:
+
+*Rule 6* _For any given Vulkan and framebuffer state vector, and for any
+given Vulkan command, the contents of any framebuffer state not directly or
+indirectly affected by results of shader image or buffer variable stores or
+atomic operations must: be identical each time the command is executed on
+that initial Vulkan and framebuffer state._
+
+*Rule 7* _Identical pipelines will produce the same result when run multiple
+times with the same input as long as:_
+
+  * _shader invocations do not use image atomic operations;_
+  * _no framebuffer memory is written to more than once by image stores,
+    unless all such stores write the same value; and_
+  * _no shader invocation, or other operation performed to process the
+    sequence of commands, reads memory written to by an image store._
+
+
+[NOTE]
+.Note
+====
+The OpenGL specification has the following invariance rule: Consider a
+primitive p' obtained by translating a primitive p through an offset (x, y)
+in window coordinates, where x and y are integers.
+As long as neither p' nor p is clipped, it must: be the case that each
+fragment f' produced from p' is identical to a corresponding fragment f from
+p except that the center of f' is offset by (x, y) from the center of f.
+
+This rule does not apply to Vulkan and is an intentional difference from
+OpenGL.
+====
+
+When any sequence of Vulkan commands triggers shader invocations that
+perform image stores or atomic operations, and subsequent Vulkan commands
+read the memory written by those shader invocations, these operations must:
+be explicitly synchronized.
+
+
+== Tessellation Invariance
+
+When using a pipeline containing tessellation evaluation shaders, the
+fixed-function tessellation primitive generator consumes the input patch
+specified by an application and emits a new set of primitives.
+The following invariance rules are intended to provide repeatability
+guarantees.
+Additionally, they are intended to allow an application with a carefully
+crafted tessellation evaluation shader to ensure that the sets of triangles
+generated for two adjacent patches have identical vertices along shared
+patch edges, avoiding "`cracks`" caused by minor differences in the
+positions of vertices along shared edges.
+
+*Rule 1* _When processing two patches with identical outer and inner
+tessellation levels, the tessellation primitive generator will emit an
+identical set of point, line, or triangle primitives as long as the pipeline
+used to process the patch primitives has tessellation evaluation shaders
+specifying the same tessellation mode, spacing, vertex order, and point mode
+decorations.
+Two sets of primitives are considered identical if and only if they contain
+the same number and type of primitives and the generated tessellation
+coordinates for the vertex numbered m of the primitive numbered n are
+identical for all values of m and n._
+
+*Rule 2* _The set of vertices generated along the outer edge of the
+subdivided primitive in triangle and quad tessellation, and the tessellation
+coordinates of each, depend only on the corresponding outer tessellation
+level and the spacing decorations in the tessellation shaders of the
+pipeline._
+
+*Rule 3* _The set of vertices generated when subdividing any outer primitive
+edge is always symmetric.
+For triangle tessellation, if the subdivision generates a vertex with
+tessellation coordinates of the form (0, x, 1-x), (x, 0, 1-x), or (x, 1-x,
+0), it will also generate a vertex with coordinates of exactly (0, 1-x, x),
+(1-x, 0, x), or (1-x, x, 0), respectively.
+For quad tessellation, if the subdivision generates a vertex with
+coordinates of (x, 0) or (0, x), it will also generate a vertex with
+coordinates of exactly (1-x, 0) or (0, 1-x), respectively.
+For isoline tessellation, if it generates vertices at (0, x) and (1, x)
+where x is not zero, it will also generate vertices at exactly (0, 1-x) and
+(1, 1-x), respectively._
+
+*Rule 4* _The set of vertices generated when subdividing outer edges in
+triangular and quad tessellation must: be independent of the specific edge
+subdivided, given identical outer tessellation levels and spacing.
+For example, if vertices at (x, 1 - x, 0) and (1-x, x, 0) are generated when
+subdividing the w = 0 edge in triangular tessellation, vertices must: be
+generated at (x, 0, 1-x) and (1-x, 0, x) when subdividing an otherwise
+identical v = 0 edge.
+For quad tessellation, if vertices at (x, 0) and (1-x, 0) are generated when
+subdividing the v = 0 edge, vertices must: be generated at (0, x) and (0,
+1-x) when subdividing an otherwise identical u = 0 edge._
+
+*Rule 5* _When processing two patches that are identical in all respects
+enumerated in rule 1 except for vertex order, the set of triangles generated
+for triangle and quad tessellation must: be identical except for vertex and
+triangle order.
+For each triangle n1 produced by processing the first patch, there must: be
+a triangle n2 produced when processing the second patch each of whose
+vertices has the same tessellation coordinates as one of the vertices in
+n1._
+
+*Rule 6* _When processing two patches that are identical in all respects
+enumerated in rule 1 other than matching outer tessellation levels and/or
+vertex order, the set of interior triangles generated for triangle and quad
+tessellation must: be identical in all respects except for vertex and
+triangle order.
+For each interior triangle n1 produced by processing the first patch, there
+must: be a triangle n2 produced when processing the second patch each of
+whose vertices has the same tessellation coordinates as one of the vertices
+in n1.
+A triangle produced by the tessellator is considered an interior triangle if
+none of its vertices lie on an outer edge of the subdivided primitive._
+
+*Rule 7* _For quad and triangle tessellation, the set of triangles
+connecting an inner and outer edge depends only on the inner and outer
+tessellation levels corresponding to that edge and the spacing decorations._
+
+*Rule 8* _The value of all defined components of_ code:TessCoord _will be in
+the range [0, 1].
+Additionally, for any defined component x of_ code:TessCoord, _the results
+of computing 1.0-x in a tessellation evaluation shader will be exact.
+If any floating-point values in the range [0, 1] fail to satisfy this
+property, such values must: not be used as tessellation coordinate
+components._
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/memorymodel.adoc b/codegen/vulkan/vulkan-docs-next/appendices/memorymodel.adoc
new file mode 100644
index 0000000..6666fa3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/memorymodel.adoc
@@ -0,0 +1,1219 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[memory-model]]
+= Memory Model
+
+[NOTE]
+.Note
+====
+This memory model describes synchronizations provided by all
+implementations; however, some of the synchronizations defined require extra
+features to be supported by the implementation.
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+See slink:VkPhysicalDeviceVulkanMemoryModelFeatures.
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+====
+
+[[memory-model-agent]]
+== Agent
+
+_Operation_ is a general term for any task that is executed on the system.
+
+[NOTE]
+.Note
+====
+An operation is by definition something that is executed.
+Thus if an instruction is skipped due to control flow, it does not
+constitute an operation.
+====
+
+Each operation is executed by a particular _agent_.
+Possible agents include each shader invocation, each host thread, and each
+fixed-function stage of the pipeline.
+
+
+[[memory-model-memory-location]]
+== Memory Location
+
+A _memory location_ identifies unique storage for 8 bits of data.
+Memory operations access a _set of memory locations_ consisting of one or
+more memory locations at a time, e.g. an operation accessing a 32-bit
+integer in memory would read/write a set of four memory locations.
+Memory operations that access whole aggregates may: access any padding bytes
+between elements or members, but no padding bytes at the end of the
+aggregate.
+Two sets of memory locations _overlap_ if the intersection of their sets of
+memory locations is non-empty.
+A memory operation must: not affect memory at a memory location not within
+its set of memory locations.
+
+Memory locations for buffers and images are explicitly allocated in
+slink:VkDeviceMemory objects, and are implicitly allocated for SPIR-V
+variables in each shader invocation.
+
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+Variables with code:Workgroup storage class that point to a block-decorated
+type share a set of memory locations.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+
+
+[[memory-model-allocation]]
+== Allocation
+
+The values stored in newly allocated memory locations are determined by a
+SPIR-V variable's initializer, if present, or else are undefined:.
+At the time an allocation is created there have been no
+<<memory-model-memory-operation,memory operations>> to any of its memory
+locations.
+The initialization is not considered to be a memory operation.
+
+[NOTE]
+.Note
+====
+For tessellation control shader output variables, a consequence of
+initialization not being considered a memory operation is that some
+implementations may need to insert a barrier between the initialization of
+the output variables and any reads of those variables.
+====
+
+
+[[memory-model-memory-operation]]
+== Memory Operation
+
+For an operation A and memory location M:
+
+  * [[memory-model-access-read]] A _reads_ M if and only if the data stored
+    in M is an input to A.
+  * [[memory-model-access-write]] A _writes_ M if and only if the data
+    output from A is stored to M.
+  * [[memory-model-access-access]] A _accesses_ M if and only if it either
+    reads or writes (or both) M.
+
+[NOTE]
+.Note
+====
+A write whose value is the same as what was already in those memory
+locations is still considered to be a write and has all the same effects.
+====
+
+
+[[memory-model-references]]
+== Reference
+
+A _reference_ is an object that a particular agent can: use to access a set
+of memory locations.
+On the host, a reference is a host virtual address.
+On the device, a reference is:
+
+  * The descriptor that a variable is bound to, for variables in Image,
+    Uniform, or StorageBuffer storage classes.
+    If the variable is an array (or array of arrays, etc.) then each element
+    of the array may: be a unique reference.
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * The address range for a buffer in code:PhysicalStorageBuffer storage
+    class, where the base of the address range is queried with
+ifndef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+    flink:vkGetBufferDeviceAddressEXT
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+    flink:vkGetBufferDeviceAddress
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+    and the length of the range is the size of the buffer.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+  * A single common reference for all variables with code:Workgroup storage
+    class that point to a block-decorated type.
+  * The variable itself for non-block-decorated type variables in
+    code:Workgroup storage class.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+  * The variable itself for variables in other storage classes.
+
+Two memory accesses through distinct references may: require availability
+and visibility operations as defined
+<<memory-model-location-ordered,below>>.
+
+
+[[memory-model-program-order]]
+== Program-Order
+
+A _dynamic instance_ of an instruction is defined in SPIR-V
+(https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#DynamicInstance)
+as a way of referring to a particular execution of a static instruction.
+Program-order is an ordering on dynamic instances of instructions executed
+by a single shader invocation:
+
+  * (Basic block): If instructions A and B are in the same basic block, and
+    A is listed in the module before B, then the n'th dynamic instance of A
+    is program-ordered before the n'th dynamic instance of B.
+  * (Branch): The dynamic instance of a branch or switch instruction is
+    program-ordered before the dynamic instance of the OpLabel instruction
+    to which it transfers control.
+  * (Call entry): The dynamic instance of an code:OpFunctionCall instruction
+    is program-ordered before the dynamic instances of the
+    code:OpFunctionParameter instructions and the body of the called
+    function.
+  * (Call exit): The dynamic instance of the instruction following an
+    code:OpFunctionCall instruction is program-ordered after the dynamic
+    instance of the return instruction executed by the called function.
+  * (Transitive Closure): If dynamic instance A of any instruction is
+    program-ordered before dynamic instance B of any instruction and B is
+    program-ordered before dynamic instance C of any instruction then A is
+    program-ordered before C.
+  * (Complete definition): No other dynamic instances are program-ordered.
+
+For instructions executed on the host, the source language defines the
+program-order relation (e.g. as "`sequenced-before`").
+
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+[[shader-call-related]]
+== Shader Call Related
+
+Shader-call-related is an equivalence relation on invocations defined as the
+symmetric and transitive closure of:
+
+  * A is shader-call-related to B if A is created by an
+    <<ray-tracing-repack,invocation repack>> instruction executed by B.
+
+
+[[shader-call-order]]
+== Shader Call Order
+
+Shader-call-order is a partial order on dynamic instances of instructions
+executed by invocations that are shader-call-related:
+
+  * (Program order): If dynamic instance A is program-ordered before B, then
+    A is shader-call-ordered before B.
+  * (Shader call entry): If A is a dynamic instance of an
+    <<ray-tracing-repack,invocation repack>> instruction and B is a dynamic
+    instance executed by an invocation that is created by A, then A is
+    shader-call-ordered before B.
+  * (Shader call exit): If A is a dynamic instance of an
+    <<ray-tracing-repack,invocation repack>> instruction, B is the next
+    dynamic instance executed by the same invocation, and C is a dynamic
+    instance executed by an invocation that is created by A, then C is
+    shader-call-ordered before B.
+  * (Transitive closure): If A is shader-call-ordered-before B and B is
+    shader-call-ordered-before C, then A is shader-call-ordered-before C.
+  * (Complete definition): No other dynamic instances are
+    shader-call-ordered.
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+
+[[memory-model-scope]]
+== Scope
+
+Atomic and barrier instructions include scopes which identify sets of shader
+invocations that must: obey the requested ordering and atomicity rules of
+the operation, as defined below.
+
+The various scopes are described in detail in <<shaders-scope, the Shaders
+chapter>>.
+
+
+[[memory-model-atomic-operation]]
+== Atomic Operation
+
+An _atomic operation_ on the device is any SPIR-V operation whose name
+begins with code:OpAtomic.
+An atomic operation on the host is any operation performed with an
+std::atomic typed object.
+
+Each atomic operation has a memory <<memory-model-scope,scope>> and a
+<<memory-model-memory-semantics,semantics>>.
+Informally, the scope determines which other agents it is atomic with
+respect to, and the <<memory-model-memory-semantics,semantics>> constrains
+its ordering against other memory accesses.
+Device atomic operations have explicit scopes and semantics.
+Each host atomic operation implicitly uses the code:CrossDevice scope, and
+uses a memory semantics equivalent to a C++ std::memory_order value of
+relaxed, acquire, release, acq_rel, or seq_cst.
+
+Two atomic operations A and B are _potentially-mutually-ordered_ if and only
+if all of the following are true:
+
+  * They access the same set of memory locations.
+  * They use the same reference.
+  * A is in the instance of B's memory scope.
+  * B is in the instance of A's memory scope.
+  * A and B are not the same operation (irreflexive).
+
+Two atomic operations A and B are _mutually-ordered_ if and only if they are
+potentially-mutually-ordered and any of the following are true:
+
+  * A and B are both device operations.
+  * A and B are both host operations.
+  * A is a device operation, B is a host operation, and the implementation
+    supports concurrent host- and device-atomics.
+
+[NOTE]
+.Note
+====
+If two atomic operations are not mutually-ordered, and if their sets of
+memory locations overlap, then each must: be synchronized against the other
+as if they were non-atomic operations.
+====
+
+
+[[memory-model-scoped-modification-order]]
+== Scoped Modification Order
+
+For a given atomic write A, all atomic writes that are mutually-ordered with
+A occur in an order known as A's _scoped modification order_.
+A's scoped modification order relates no other operations.
+
+[NOTE]
+.Note
+====
+Invocations outside the instance of A's memory scope may: observe the values
+at A's set of memory locations becoming visible to it in an order that
+disagrees with the scoped modification order.
+====
+
+[NOTE]
+.Note
+====
+It is valid to have non-atomic operations or atomics in a different scope
+instance to the same set of memory locations, as long as they are
+synchronized against each other as if they were non-atomic (if they are not,
+it is treated as a <<memory-model-access-data-race,data race>>).
+That means this definition of A's scoped modification order could include
+atomic operations that occur much later, after intervening non-atomics.
+That is a bit non-intuitive, but it helps to keep this definition simple and
+non-circular.
+====
+
+
+[[memory-model-memory-semantics]]
+== Memory Semantics
+
+Non-atomic memory operations, by default, may: be observed by one agent in a
+different order than they were written by another agent.
+
+Atomics and some synchronization operations include _memory semantics_,
+which are flags that constrain the order in which other memory accesses
+(including non-atomic memory accesses and
+<<memory-model-availability-visibility,availability and visibility
+operations>>) performed by the same agent can: be observed by other agents,
+or can: observe accesses by other agents.
+
+Device instructions that include semantics are code:OpAtomic*,
+code:OpControlBarrier, code:OpMemoryBarrier, and code:OpMemoryNamedBarrier.
+Host instructions that include semantics are some std::atomic methods and
+memory fences.
+
+SPIR-V supports the following memory semantics:
+
+  * Relaxed: No constraints on order of other memory accesses.
+  * Acquire: A memory read with this semantic performs an _acquire
+    operation_.
+    A memory barrier with this semantic is an _acquire barrier_.
+  * Release: A memory write with this semantic performs a _release
+    operation_.
+    A memory barrier with this semantic is a _release barrier_.
+  * AcquireRelease: A memory read-modify-write operation with this semantic
+    performs both an acquire operation and a release operation, and inherits
+    the limitations on ordering from both of those operations.
+    A memory barrier with this semantic is both a release and acquire
+    barrier.
+
+[NOTE]
+.Note
+====
+SPIR-V does not support "`consume`" semantics on the device.
+====
+
+The memory semantics operand also includes _storage class semantics_ which
+indicate which storage classes are constrained by the synchronization.
+SPIR-V storage class semantics include:
+
+  * UniformMemory
+  * WorkgroupMemory
+  * ImageMemory
+  * OutputMemory
+
+Each SPIR-V memory operation accesses a single storage class.
+Semantics in synchronization operations can include a combination of storage
+classes.
+
+The UniformMemory storage class semantic applies to accesses to memory in
+the
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+PhysicalStorageBuffer,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+code:ShaderRecordBufferKHR,
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+Uniform and StorageBuffer storage classes.
+The WorkgroupMemory storage class semantic applies to accesses to memory in
+the Workgroup storage class.
+The ImageMemory storage class semantic applies to accesses to memory in the
+Image storage class.
+The OutputMemory storage class semantic applies to accesses to memory in the
+Output storage class.
+
+[NOTE]
+.Note
+====
+Informally, these constraints limit how memory operations can be reordered,
+and these limits apply not only to the order of accesses as performed in the
+agent that executes the instruction, but also to the order the effects of
+writes become visible to all other agents within the same instance of the
+instruction's memory scope.
+====
+
+[NOTE]
+.Note
+====
+Release and acquire operations in different threads can: act as
+synchronization operations, to guarantee that writes that happened before
+the release are visible after the acquire.
+(This is not a formal definition, just an Informative forward reference.)
+====
+
+[NOTE]
+.Note
+====
+The OutputMemory storage class semantic is only useful in tessellation
+control shaders, which is the only execution model where output variables
+are shared between invocations.
+====
+
+The memory semantics operand can: also include availability and visibility
+flags, which apply availability and visibility operations as described in
+<<memory-model-availability-visibility,availability and visibility>>.
+The availability/visibility flags are:
+
+  * MakeAvailable: Semantics must: be Release or AcquireRelease.
+    Performs an availability operation before the release operation or
+    barrier.
+  * MakeVisible: Semantics must: be Acquire or AcquireRelease.
+    Performs a visibility operation after the acquire operation or barrier.
+
+The specifics of these operations are defined in
+<<memory-model-availability-visibility-semantics,Availability and Visibility
+Semantics>>.
+
+Host atomic operations may: support a different list of memory semantics and
+synchronization operations, depending on the host architecture and source
+language.
+
+
+[[memory-model-release-sequence]]
+== Release Sequence
+
+After an atomic operation A performs a release operation on a set of memory
+locations M, the _release sequence headed by A_ is the longest continuous
+subsequence of A's scoped modification order that consists of:
+
+  * the atomic operation A as its first element
+  * atomic read-modify-write operations on M by any agent
+
+[NOTE]
+.Note
+====
+The atomics in the last bullet must: be mutually-ordered with A by virtue of
+being in A's scoped modification order.
+====
+
+[NOTE]
+.Note
+====
+This intentionally omits "`atomic writes to M performed by the same agent
+that performed A`", which is present in the corresponding C++ definition.
+====
+
+
+[[memory-model-synchronizes-with]]
+== Synchronizes-With
+
+_Synchronizes-with_ is a relation between operations, where each operation
+is either an atomic operation or a memory barrier (aka fence on the host).
+
+If A and B are atomic operations, then A synchronizes-with B if and only if
+all of the following are true:
+
+  * A performs a release operation
+  * B performs an acquire operation
+  * A and B are mutually-ordered
+  * B reads a value written by A or by an operation in the release sequence
+    headed by A
+
+code:OpControlBarrier, code:OpMemoryBarrier, and code:OpMemoryNamedBarrier
+are _memory barrier_ instructions in SPIR-V.
+
+If A is a release barrier and B is an atomic operation that performs an
+acquire operation, then A synchronizes-with B if and only if all of the
+following are true:
+
+  * there exists an atomic write X (with any memory semantics)
+  * A is program-ordered before X
+  * X and B are mutually-ordered
+  * B reads a value written by X or by an operation in the release sequence
+    headed by X
+  ** If X is relaxed, it is still considered to head a hypothetical release
+     sequence for this rule
+  * A and B are in the instance of each other's memory scopes
+  * X's storage class is in A's semantics.
+
+If A is an atomic operation that performs a release operation and B is an
+acquire barrier, then A synchronizes-with B if and only if all of the
+following are true:
+
+  * there exists an atomic read X (with any memory semantics)
+  * X is program-ordered before B
+  * X and A are mutually-ordered
+  * X reads a value written by A or by an operation in the release sequence
+    headed by A
+  * A and B are in the instance of each other's memory scopes
+  * X's storage class is in B's semantics.
+
+If A is a release barrier and B is an acquire barrier, then A
+synchronizes-with B if all of the following are true:
+
+  * there exists an atomic write X (with any memory semantics)
+  * A is program-ordered before X
+  * there exists an atomic read Y (with any memory semantics)
+  * Y is program-ordered before B
+  * X and Y are mutually-ordered
+  * Y reads the value written by X or by an operation in the release
+    sequence headed by X
+  ** If X is relaxed, it is still considered to head a hypothetical release
+     sequence for this rule
+  * A and B are in the instance of each other's memory scopes
+  * X's and Y's storage class is in A's and B's semantics.
+  ** NOTE: X and Y must have the same storage class, because they are
+     mutually ordered.
+
+If A is a release barrier, B is an acquire barrier, and C is a control
+barrier (where A can: equal C, and B can: equal C), then A synchronizes-with
+B if all of the following are true:
+
+  * A is program-ordered before (or equals) C
+  * C is program-ordered before (or equals) B
+  * A and B are in the instance of each other's memory scopes
+  * A and B are in the instance of C's execution scope
+
+[NOTE]
+.Note
+====
+This is similar to the barrier-barrier synchronization above, but with a
+control barrier filling the role of the relaxed atomics.
+====
+
+ifdef::VK_EXT_fragment_shader_interlock[]
+
+Let F be an ordering of fragment shader invocations, such that invocation
+F~1~ is ordered before invocation F~2~ if and only if F~1~ and F~2~ overlap
+as described in <<shaders-scope-fragment-interlock,Fragment Shader
+Interlock>> and F~1~ executes the interlocked code before F~2~.
+
+If A is an code:OpEndInvocationInterlockEXT instruction and B is an
+code:OpBeginInvocationInterlockEXT instruction, then A synchronizes-with B
+if the agent that executes A is ordered before the agent that executes B in
+F. A and B are both considered to have code:FragmentInterlock memory scope
+and semantics of UniformMemory and ImageMemory, and A is considered to have
+Release semantics and B is considered to have Acquire semantics.
+
+[NOTE]
+.Note
+====
+code:OpBeginInvocationInterlockEXT and code:OpBeginInvocationInterlockEXT do
+not perform implicit availability or visibility operations.
+Usually, shaders using fragment shader interlock will declare the relevant
+resources as `coherent` to get implicit
+<<memory-model-instruction-av-vis,per-instruction availability and
+visibility operations>>.
+====
+
+endif::VK_EXT_fragment_shader_interlock[]
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+If A is a release barrier and B is an acquire barrier, then A
+synchronizes-with B if all of the following are true:
+
+  * A is shader-call-ordered-before B
+  * A and B are in the instance of each other's memory scopes
+
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+No other release and acquire barriers synchronize-with each other.
+
+
+[[memory-model-system-synchronizes-with]]
+== System-Synchronizes-With
+
+_System-synchronizes-with_ is a relation between arbitrary operations on the
+device or host.
+Certain operations system-synchronize-with each other, which informally
+means the first operation occurs before the second and that the
+synchronization is performed without using application-visible memory
+accesses.
+
+If there is an <<synchronization-dependencies-execution,execution
+dependency>> between two operations A and B, then the operation in the first
+synchronization scope system-synchronizes-with the operation in the second
+synchronization scope.
+
+[NOTE]
+.Note
+====
+This covers all Vulkan synchronization primitives, including device
+operations executing before a synchronization primitive is signaled, wait
+operations happening before subsequent device operations, signal operations
+happening before host operations that wait on them, and host operations
+happening before flink:vkQueueSubmit.
+The list is spread throughout the synchronization chapter, and is not
+repeated here.
+====
+
+System-synchronizes-with implicitly includes all storage class semantics and
+has code:CrossDevice scope.
+
+If A system-synchronizes-with B, we also say A is
+_system-synchronized-before_ B and B is _system-synchronized-after_ A.
+
+
+[[memory-model-non-private]]
+== Private vs. Non-Private
+
+By default, non-atomic memory operations are treated as _private_, meaning
+such a memory operation is not intended to be used for communication with
+other agents.
+Memory operations with the NonPrivatePointer/NonPrivateTexel bit set are
+treated as _non-private_, and are intended to be used for communication with
+other agents.
+
+More precisely, for private memory operations to be
+<<memory-model-location-ordered,Location-Ordered>> between distinct agents
+requires using system-synchronizes-with rather than shader-based
+synchronization.
+Private memory operations still obey program-order.
+
+Atomic operations are always considered non-private.
+
+
+[[memory-model-inter-thread-happens-before]]
+== Inter-Thread-Happens-Before
+
+Let SC be a non-empty set of storage class semantics.
+Then (using template syntax) operation A _inter-thread-happens-before_<SC>
+operation B if and only if any of the following is true:
+
+  * A system-synchronizes-with B
+  * A synchronizes-with B, and both A and B have all of SC in their
+    semantics
+  * A is an operation on memory in a storage class in SC or that has all of
+    SC in its semantics, B is a release barrier or release atomic with all
+    of SC in its semantics, and A is program-ordered before B
+  * A is an acquire barrier or acquire atomic with all of SC in its
+    semantics, B is an operation on memory in a storage class in SC or that
+    has all of SC in its semantics, and A is program-ordered before B
+  * A and B are both host operations and A inter-thread-happens-before B as
+    defined in the host language specification
+  * A inter-thread-happens-before<SC> some X and X
+    inter-thread-happens-before<SC> B
+
+
+[[memory-model-happens-before]]
+== Happens-Before
+
+Operation A _happens-before_ operation B if and only if any of the following
+is true:
+
+  * A is program-ordered before B
+  * A inter-thread-happens-before<SC> B for some set of storage classes SC
+
+_Happens-after_ is defined similarly.
+
+[NOTE]
+.Note
+====
+Unlike C++, happens-before is not always sufficient for a write to be
+visible to a read.
+Additional <<memory-model-availability-visibility,availability and
+visibility>> operations may: be required for writes to be
+<<memory-model-visible-to,visible-to>> other memory accesses.
+====
+
+[NOTE]
+.Note
+====
+Happens-before is not transitive, but each of program-order and
+inter-thread-happens-before<SC> are transitive.
+These can be thought of as covering the "`single-threaded`" case and the
+"`multi-threaded`" case, and it is not necessary (and not valid) to form
+chains between the two.
+====
+
+
+[[memory-model-availability-visibility]]
+== Availability and Visibility
+
+_Availability_ and _visibility_ are states of a write operation, which
+(informally) track how far the write has permeated the system, i.e. which
+agents and references are able to observe the write.
+Availability state is per _memory domain_.
+Visibility state is per (agent,reference) pair.
+Availability and visibility states are per-memory location for each write.
+
+Memory domains are named according to the agents whose memory accesses use
+the domain.
+Domains used by shader invocations are organized hierarchically into
+multiple smaller memory domains which correspond to the different
+<<shaders-scope, scopes>>.
+Each memory domain is considered the _dual_ of a scope, and vice versa.
+The memory domains defined in Vulkan include:
+
+  * _host_ - accessible by host agents
+  * _device_ - accessible by all device agents for a particular device
+  * _shader_ - accessible by shader agents for a particular device,
+    corresponding to the code:Device scope
+  * _queue family instance_ - accessible by shader agents in a single queue
+    family, corresponding to the code:QueueFamily scope.
+ifdef::VK_EXT_fragment_shader_interlock[]
+  * _fragment interlock instance_ - accessible by fragment shader agents
+    that <<shaders-scope-fragment-interlock,overlap>>, corresponding to the
+    code:FragmentInterlock scope.
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * _shader call instance_ - accessible by shader agents that are
+    <<shader-call-related,shader-call-related>>, corresponding to the
+    code:ShaderCallKHR scope.
+endif::VK_KHR_ray_tracing_pipeline[]
+  * _workgroup instance_ - accessible by shader agents in the same
+    workgroup, corresponding to the code:Workgroup scope.
+  * _subgroup instance_ - accessible by shader agents in the same subgroup,
+    corresponding to the code:Subgroup scope.
+
+The memory domains are nested in the order listed above,
+ifdef::VK_KHR_ray_tracing_pipeline[]
+except for shader call instance domain,
+endif::VK_KHR_ray_tracing_pipeline[]
+with memory domains later in the list nested in the domains earlier in the
+list.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+The shader call instance domain is at an implementation-dependent location
+in the list, and is nested according to that location.
+The shader call instance domain is not broader than the queue family
+instance domain.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+[NOTE]
+.Note
+====
+Memory domains do not correspond to storage classes or device-local and
+host-local slink:VkDeviceMemory allocations, rather they indicate whether a
+write can be made visible only to agents in the same subgroup, same
+workgroup,
+ifdef::VK_EXT_fragment_shader_interlock[]
+overlapping fragment shader invocation,
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+shader-call-related ray tracing invocation,
+endif::VK_KHR_ray_tracing_pipeline[]
+in any shader invocation, or anywhere on the device, or host.
+The shader, queue family instance,
+ifdef::VK_EXT_fragment_shader_interlock[]
+fragment interlock instance,
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+shader call instance,
+endif::VK_KHR_ray_tracing_pipeline[]
+workgroup instance, and subgroup instance domains are only used for
+shader-based availability/visibility operations, in other cases writes can
+be made available from/visible to the shader via the device domain.
+====
+
+_Availability operations_, _visibility operations_, and _memory domain
+operations_ alter the state of the write operations that happen-before them,
+and which are included in their _source scope_ to be available or visible to
+their _destination scope_.
+
+  * For an availability operation, the source scope is a set of
+    (agent,reference,memory location) tuples, and the destination scope is a
+    set of memory domains.
+  * For a memory domain operation, the source scope is a memory domain and
+    the destination scope is a memory domain.
+  * For a visibility operation, the source scope is a set of memory domains
+    and the destination scope is a set of (agent,reference,memory location)
+    tuples.
+
+How the scopes are determined depends on the specific operation.
+Availability and memory domain operations expand the set of memory domains
+to which the write is available.
+Visibility operations expand the set of (agent,reference,memory location)
+tuples to which the write is visible.
+
+Recall that availability and visibility states are per-memory location, and
+let W be a write operation to one or more locations performed by agent A via
+reference R. Let L be one of the locations written.
+(W,L) (the write W to L), is initially not available to any memory domain
+and only visible to (A,R,L).
+An availability operation AV that happens-after W and that includes (A,R,L)
+in its source scope makes (W,L) _available_ to the memory domains in its
+destination scope.
+
+A memory domain operation DOM that happens-after AV and for which (W,L) is
+available in the source scope makes (W,L) available in the destination
+memory domain.
+
+A visibility operation VIS that happens-after AV (or DOM) and for which
+(W,L) is available in any domain in the source scope makes (W,L) _visible_
+to all (agent,reference,L) tuples included in its destination scope.
+
+If write W~2~ happens-after W, and their sets of memory locations overlap,
+then W will not be available/visible to all agents/references for those
+memory locations that overlap (and future AV/DOM/VIS ops cannot revive W's
+write to those locations).
+
+Availability, memory domain, and visibility operations are treated like
+other non-atomic memory accesses for the purpose of
+<<memory-model-memory-semantics,memory semantics>>, meaning they can be
+ordered by release-acquire sequences or memory barriers.
+
+An _availability chain_ is a sequence of availability operations to
+increasingly broad memory domains, where element N+1 of the chain is
+performed in the dual scope instance of the destination memory domain of
+element N and element N happens-before element N+1.
+An example is an availability operation with destination scope of the
+workgroup instance domain that happens-before an availability operation to
+the shader domain performed by an invocation in the same workgroup.
+An availability chain AVC that happens-after W and that includes (A,R,L) in
+the source scope makes (W,L) _available_ to the memory domains in its final
+destination scope.
+An availability chain with a single element is just the availability
+operation.
+
+Similarly, a _visibility chain_ is a sequence of visibility operations from
+increasingly narrow memory domains, where element N of the chain is
+performed in the dual scope instance of the source memory domain of element
+N+1 and element N happens-before element N+1.
+An example is a visibility operation with source scope of the shader domain
+that happens-before a visibility operation with source scope of the
+workgroup instance domain performed by an invocation in the same workgroup.
+A visibility chain VISC that happens-after AVC (or DOM) and for which (W,L)
+is available in any domain in the source scope makes (W,L) _visible_ to all
+(agent,reference,L) tuples included in its final destination scope.
+A visibility chain with a single element is just the visibility operation.
+
+
+[[memory-model-vulkan-availability-visibility]]
+== Availability, Visibility, and Domain Operations
+
+The following operations generate availability, visibility, and domain
+operations.
+When multiple availability/visibility/domain operations are described, they
+are system-synchronized-with each other in the order listed.
+
+An operation that performs a <<synchronization-dependencies-memory,memory
+dependency>> generates:
+
+  * If the source access mask includes ename:VK_ACCESS_HOST_WRITE_BIT, then
+    the dependency includes a memory domain operation from host domain to
+    device domain.
+  * An availability operation with source scope of all writes in the first
+    <<synchronization-dependencies-access-scopes,access scope>> of the
+    dependency and a destination scope of the device domain.
+  * A visibility operation with source scope of the device domain and
+    destination scope of the second access scope of the dependency.
+  * If the destination access mask includes ename:VK_ACCESS_HOST_READ_BIT or
+    ename:VK_ACCESS_HOST_WRITE_BIT, then the dependency includes a memory
+    domain operation from device domain to host domain.
+
+flink:vkFlushMappedMemoryRanges performs an availability operation, with a
+source scope of (agents,references) = (all host threads, all mapped memory
+ranges passed to the command), and destination scope of the host domain.
+
+flink:vkInvalidateMappedMemoryRanges performs a visibility operation, with a
+source scope of the host domain and a destination scope of
+(agents,references) = (all host threads, all mapped memory ranges passed to
+the command).
+
+flink:vkQueueSubmit performs a memory domain operation from host to device,
+and a visibility operation with source scope of the device domain and
+destination scope of all agents and references on the device.
+
+
+[[memory-model-availability-visibility-semantics]]
+== Availability and Visibility Semantics
+
+A memory barrier or atomic operation via agent A that includes MakeAvailable
+in its semantics performs an availability operation whose source scope
+includes agent A and all references in the storage classes in that
+instruction's storage class semantics, and all memory locations, and whose
+destination scope is a set of memory domains selected as specified below.
+The implicit availability operation is program-ordered between the barrier
+or atomic and all other operations program-ordered before the barrier or
+atomic.
+
+A memory barrier or atomic operation via agent A that includes MakeVisible
+in its semantics performs a visibility operation whose source scope is a set
+of memory domains selected as specified below, and whose destination scope
+includes agent A and all references in the storage classes in that
+instruction's storage class semantics, and all memory locations.
+The implicit visibility operation is program-ordered between the barrier or
+atomic and all other operations program-ordered after the barrier or atomic.
+
+The memory domains are selected based on the memory scope of the instruction
+as follows:
+
+  * code:Device scope uses the shader domain
+  * code:QueueFamily scope uses the queue family instance domain
+ifdef::VK_EXT_fragment_shader_interlock[]
+  * code:FragmentInterlock scope uses the fragment interlock instance domain
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * code:ShaderCallKHR scope uses the shader call instance domain
+endif::VK_KHR_ray_tracing_pipeline[]
+  * code:Workgroup scope uses the workgroup instance domain
+  * code:Subgroup uses the subgroup instance domain
+  * code:Invocation perform no availability/visibility operations.
+
+When an availability operation performed by an agent A includes a memory
+domain D in its destination scope, where D corresponds to scope instance S,
+it also includes the memory domains that correspond to each smaller scope
+instance S' that is a subset of S and that includes A. Similarly for
+visibility operations.
+
+
+[[memory-model-instruction-av-vis]]
+== Per-Instruction Availability and Visibility Semantics
+
+A memory write instruction that includes MakePointerAvailable, or an image
+write instruction that includes MakeTexelAvailable, performs an availability
+operation whose source scope includes the agent and reference used to
+perform the write and the memory locations written by the instruction, and
+whose destination scope is a set of memory domains selected by the Scope
+operand specified in <<memory-model-availability-visibility-semantics,
+Availability and Visibility Semantics>>.
+The implicit availability operation is program-ordered between the write and
+all other operations program-ordered after the write.
+
+A memory read instruction that includes MakePointerVisible, or an image read
+instruction that includes MakeTexelVisible, performs a visibility operation
+whose source scope is a set of memory domains selected by the Scope operand
+as specified in <<memory-model-availability-visibility-semantics,
+Availability and Visibility Semantics>>, and whose destination scope
+includes the agent and reference used to perform the read and the memory
+locations read by the instruction.
+The implicit visibility operation is program-ordered between read and all
+other operations program-ordered before the read.
+
+[NOTE]
+.Note
+====
+Although reads with per-instruction visibility only perform visibility ops
+from the shader or
+ifdef::VK_EXT_fragment_shader_interlock[]
+fragment interlock instance or
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+shader call instance or
+endif::VK_KHR_ray_tracing_pipeline[]
+workgroup instance or subgroup instance domain, they will also see writes
+that were made visible via the device domain, i.e. those writes previously
+performed by non-shader agents and made visible via API commands.
+====
+
+[NOTE]
+.Note
+====
+It is expected that all invocations in a subgroup execute on the same
+processor with the same path to memory, and thus availability and visibility
+operations with subgroup scope can be expected to be "`free`".
+====
+
+
+[[memory-model-location-ordered]]
+== Location-Ordered
+
+Let X and Y be memory accesses to overlapping sets of memory locations M,
+where X != Y. Let (A~X~,R~X~) be the agent and reference used for X, and
+(A~Y~,R~Y~) be the agent and reference used for Y. For now, let "`->`"
+denote happens-before and "`->^rcpo^`" denote the reflexive closure of
+program-ordered before.
+
+If D~1~ and D~2~ are different memory domains, then let DOM(D~1~,D~2~) be a
+memory domain operation from D~1~ to D~2~.
+Otherwise, let DOM(D,D) be a placeholder such that X->DOM(D,D)->Y if and
+only if X->Y.
+
+X is _location-ordered_ before Y for a location L in M if and only if any of
+the following is true:
+
+  * A~X~ == A~Y~ and R~X~ == R~Y~ and X->Y
+  ** NOTE: this case means no availability/visibility ops are required when
+     it is the same (agent,reference).
+
+  * X is a read, both X and Y are non-private, and X->Y
+  * X is a read, and X (transitively) system-synchronizes with Y
+
+  * If R~X~ == R~Y~ and A~X~ and A~Y~ access a common memory domain D (e.g.
+    are in the same workgroup instance if D is the workgroup instance
+    domain), and both X and Y are non-private:
+  ** X is a write, Y is a write, AVC(A~X~,R~X~,D,L) is an availability chain
+     making (X,L) available to domain D, and X->^rcpo^AVC(A~X~,R~X~,D,L)->Y
+  ** X is a write, Y is a read, AVC(A~X~,R~X~,D,L) is an availability chain
+     making (X,L) available to domain D, VISC(A~Y~,R~Y~,D,L) is a visibility
+     chain making writes to L available in domain D visible to Y, and
+     X->^rcpo^AVC(A~X~,R~X~,D,L)->VISC(A~Y~,R~Y~,D,L)->^rcpo^Y
+  ** If
+     slink:VkPhysicalDeviceVulkanMemoryModelFeatures::pname:vulkanMemoryModelAvailabilityVisibilityChains
+     is ename:VK_FALSE, then AVC and VISC must: each only have a single
+     element in the chain, in each sub-bullet above.
+
+  * Let D~X~ and D~Y~ each be either the device domain or the host domain,
+    depending on whether A~X~ and A~Y~ execute on the device or host:
+  ** X is a write and Y is a write, and
+     X->AV(A~X~,R~X~,D~X~,L)->DOM(D~X~,D~Y~)->Y
+  ** X is a write and Y is a read, and
+     X->AV(A~X~,R~X~,D~X~,L)->DOM(D~X~,D~Y~)->VIS(A~Y~,R~Y~,D~Y~,L)->Y
+
+[NOTE]
+.Note
+====
+The final bullet (synchronization through device/host domain) requires
+API-level synchronization operations, since the device/host domains are not
+accessible via shader instructions.
+And "`device domain`" is not to be confused with "`device scope`", which
+synchronizes through the "`shader domain`".
+====
+
+
+[[memory-model-access-data-race]]
+== Data Race
+
+Let X and Y be operations that access overlapping sets of memory locations
+M, where X != Y, and at least one of X and Y is a write, and X and Y are not
+mutually-ordered atomic operations.
+If there does not exist a location-ordered relation between X and Y for each
+location in M, then there is a _data race_.
+
+Applications must: ensure that no data races occur during the execution of
+their application.
+
+[NOTE]
+.Note
+====
+Data races can only occur due to instructions that are actually executed.
+For example, an instruction skipped due to control flow must not contribute
+to a data race.
+====
+
+
+[[memory-model-visible-to]]
+== Visible-To
+
+Let X be a write and Y be a read whose sets of memory locations overlap, and
+let M be the set of memory locations that overlap.
+Let M~2~ be a non-empty subset of M. Then X is _visible-to_ Y for memory
+locations M~2~ if and only if all of the following are true:
+
+  * X is location-ordered before Y for each location L in M~2~.
+  * There does not exist another write Z to any location L in M~2~ such that
+    X is location-ordered before Z for location L and Z is location-ordered
+    before Y for location L.
+
+If X is visible-to Y, then Y reads the value written by X for locations
+M~2~.
+
+[NOTE]
+.Note
+====
+It is possible for there to be a write between X and Y that overwrites a
+subset of the memory locations, but the remaining memory locations (M~2~)
+will still be visible-to Y.
+====
+
+
+[[memory-model-acyclicity]]
+== Acyclicity
+
+_Reads-from_ is a relation between operations, where the first operation is
+a write, the second operation is a read, and the second operation reads the
+value written by the first operation.
+_From-reads_ is a relation between operations, where the first operation is
+a read, the second operation is a write, and the first operation reads a
+value written earlier than the second operation in the second operation's
+scoped modification order (or the first operation reads from the initial
+value, and the second operation is any write to the same locations).
+
+Then the implementation must: guarantee that no cycles exist in the union of
+the following relations:
+
+  * location-ordered
+  * scoped modification order (over all atomic writes)
+  * reads-from
+  * from-reads
+
+[NOTE]
+.Note
+====
+This is a "`consistency`" axiom, which informally guarantees that sequences
+of operations cannot violate causality.
+====
+
+
+[[memory-model-scoped-modification-order-coherence]]
+=== Scoped Modification Order Coherence
+
+Let A and B be mutually-ordered atomic operations, where A is
+location-ordered before B. Then the following rules are a consequence of
+acyclicity:
+
+  * If A and B are both reads and A does not read the initial value, then
+    the write that A takes its value from must: be earlier in its own scoped
+    modification order than (or the same as) the write that B takes its
+    value from (no cycles between location-order, reads-from, and
+    from-reads).
+  * If A is a read and B is a write and A does not read the initial value,
+    then A must: take its value from a write earlier than B in B's scoped
+    modification order (no cycles between location-order, scope modification
+    order, and reads-from).
+  * If A is a write and B is a read, then B must: take its value from A or a
+    write later than A in A's scoped modification order (no cycles between
+    location-order, scoped modification order, and from-reads).
+  * If A and B are both writes, then A must: be earlier than B in A's scoped
+    modification order (no cycles between location-order and scoped
+    modification order).
+  * If A is a write and B is a read-modify-write and B reads the value
+    written by A, then B comes immediately after A in A's scoped
+    modification order (no cycles between scoped modification order and
+    from-reads).
+
+
+[[memory-model-shader-io]]
+== Shader I/O
+
+If a shader invocation A in a shader stage other than code:Vertex performs a
+memory read operation X from an object in storage class
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+code:CallableDataKHR, code:IncomingCallableDataKHR, code:RayPayloadKHR,
+code:HitAttributeKHR, code:IncomingRayPayloadKHR, or
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+code:Input, then X is system-synchronized-after all writes to the
+corresponding
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+code:CallableDataKHR, code:IncomingCallableDataKHR, code:RayPayloadKHR,
+code:HitAttributeKHR, code:IncomingRayPayloadKHR, or
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+code:Output storage variable(s) in the shader invocation(s) that contribute
+to generating invocation A, and those writes are all visible-to X.
+
+[NOTE]
+.Note
+====
+It is not necessary for the upstream shader invocations to have completed
+execution, they only need to have generated the output that is being read.
+====
+
+
+[[memory-model-deallocation]]
+== Deallocation
+
+ifndef::VKSC_VERSION_1_0[]
+
+A call to flink:vkFreeMemory must: happen-after all memory operations on all
+memory locations in that slink:VkDeviceMemory object.
+
+[NOTE]
+.Note
+====
+Normally, device memory operations in a given queue are synchronized with
+flink:vkFreeMemory by having a host thread wait on a fence signaled by that
+queue, and the wait happens-before the call to flink:vkFreeMemory on the
+host.
+====
+
+endif::VKSC_VERSION_1_0[]
+
+The deallocation of SPIR-V variables is managed by the system and
+happens-after all operations on those variables.
+
+
+[[memory-model-informative-descriptions]]
+== Descriptions (Informative)
+
+This subsection offers more easily understandable consequences of the memory
+model for app/compiler developers.
+
+Let SC be the storage class(es) specified by a release or acquire operation
+or barrier.
+
+  * An atomic write with release semantics must not be reordered against any
+    read or write to SC that is program-ordered before it (regardless of the
+    storage class the atomic is in).
+
+  * An atomic read with acquire semantics must not be reordered against any
+    read or write to SC that is program-ordered after it (regardless of the
+    storage class the atomic is in).
+
+  * Any write to SC program-ordered after a release barrier must not be
+    reordered against any read or write to SC program-ordered before that
+    barrier.
+
+  * Any read from SC program-ordered before an acquire barrier must not be
+    reordered against any read or write to SC program-ordered after the
+    barrier.
+
+A control barrier (even if it has no memory semantics) must not be reordered
+against any memory barriers.
+
+This memory model allows memory accesses with and without availability and
+visibility operations, as well as atomic operations, all to be performed on
+the same memory location.
+This is critical to allow it to reason about memory that is reused in
+multiple ways, e.g. across the lifetime of different shader invocations or
+draw calls.
+While GLSL (and legacy SPIR-V) applies the "`coherent`" decoration to
+variables (for historical reasons), this model treats each memory access
+instruction as having optional implicit availability/visibility operations.
+GLSL to SPIR-V compilers should map all (non-atomic) operations on a
+coherent variable to Make{Pointer,Texel}\{Available}\{Visible} flags in this
+model.
+
+Atomic operations implicitly have availability/visibility operations, and
+the scope of those operations is taken from the atomic operation's scope.
+
+
+[[memory-model-tessellation-output-ordering]]
+== Tessellation Output Ordering
+
+For SPIR-V that uses the Vulkan Memory Model, the code:OutputMemory storage
+class is used to synchronize accesses to tessellation control output
+variables.
+For legacy SPIR-V that does not enable the Vulkan Memory Model via
+code:OpMemoryModel, tessellation outputs can be ordered using a control
+barrier with no particular memory scope or semantics, as defined below.
+
+Let X and Y be memory operations performed by shader invocations A~X~ and
+A~Y~.
+Operation X is _tessellation-output-ordered_ before operation Y if and only
+if all of the following are true:
+
+  * There is a dynamic instance of an code:OpControlBarrier instruction C
+    such that X is program-ordered before C in A~X~ and C is program-ordered
+    before Y in A~Y~.
+  * A~X~ and A~Y~ are in the same instance of C's execution scope.
+
+If shader invocations A~X~ and A~Y~ in the code:TessellationControl
+execution model execute memory operations X and Y, respectively, on the
+code:Output storage class, and X is tessellation-output-ordered before Y
+with a scope of code:Workgroup, then X is location-ordered before Y, and if
+X is a write and Y is a read then X is visible-to Y.
+
+
+ifdef::VK_NV_cooperative_matrix[]
+[[memory-model-cooperative-matrix]]
+== Cooperative Matrix Memory Access
+
+For each dynamic instance of a cooperative matrix load or store instruction
+(code:OpCooperativeMatrixLoadNV or code:OpCooperativeMatrixStoreNV), a
+single implementation-dependent invocation within the instance of the
+matrix's scope performs a non-atomic load or store (respectively) to each
+memory location that is defined to be accessed by the instruction.
+endif::VK_NV_cooperative_matrix[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/roadmap.adoc b/codegen/vulkan/vulkan-docs-next/appendices/roadmap.adoc
new file mode 100644
index 0000000..fc96fe3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/roadmap.adoc
@@ -0,0 +1,16 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[roadmap]]
+= Vulkan Roadmap Milestones
+
+Roadmap milestones are intended to be supported by mid-to-high-end
+smartphones, tablets, laptops, consoles, and desktop devices.
+
+Each milestone indicates support for a set of extensions, features, limits,
+and formats across these devices, and should be supported by all such new
+hardware shipping by the end of the target year or shortly thereafter.
+
+include::{appendices}/roadmap/Roadmap-2022.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/roadmap/Roadmap-2022.adoc b/codegen/vulkan/vulkan-docs-next/appendices/roadmap/Roadmap-2022.adoc
new file mode 100644
index 0000000..a51acba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/roadmap/Roadmap-2022.adoc
@@ -0,0 +1,137 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:times: ×
+
+[[roadmap-2022]]
+== Roadmap 2022
+
+The Roadmap 2022 milestone is intended to be supported by newer mid-to-high-end devices shipping in 2022 or shortly thereafter across mainstream smartphone, tablet, laptops, console and desktop devices.
+
+=== Required API Versions
+
+This profile requires Vulkan 1.3.
+
+=== Required Features
+
+The following core optional features are required to be supported:
+
+  * Vulkan 1.0 Optional Features
+  ** <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>>
+  ** <<features-imageCubeArray, pname:imageCubeArray>>
+  ** <<features-independentBlend, pname:independentBlend>>
+  ** <<features-sampleRateShading, pname:sampleRateShading>>
+  ** <<features-drawIndirectFirstInstance, pname:drawIndirectFirstInstance>>
+  ** <<features-depthClamp, pname:depthClamp>>
+  ** <<features-depthBiasClamp, pname:depthBiasClamp>>
+  ** <<features-samplerAnisotropy, pname:samplerAnisotropy>>
+  ** <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>>
+  ** <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>>
+  ** <<features-shaderStorageImageExtendedFormats, pname:shaderStorageImageExtendedFormats>>
+  ** <<features-shaderUniformBufferArrayDynamicIndexing, pname:shaderUniformBufferArrayDynamicIndexing>>
+  ** <<features-shaderSampledImageArrayDynamicIndexing, pname:shaderSampledImageArrayDynamicIndexing>>
+  ** <<features-shaderStorageBufferArrayDynamicIndexing, pname:shaderStorageBufferArrayDynamicIndexing>>
+  ** <<features-shaderStorageImageArrayDynamicIndexing, pname:shaderStorageImageArrayDynamicIndexing>>
+  * Vulkan 1.1 Optional Features
+  ** <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>
+  * Vulkan 1.2 Optional Features
+  ** <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>
+  ** <<features-descriptorIndexing, pname:descriptorIndexing>>
+  ** <<features-shaderUniformTexelBufferArrayDynamicIndexing, pname:shaderUniformTexelBufferArrayDynamicIndexing>>
+  ** <<features-shaderStorageTexelBufferArrayDynamicIndexing, pname:shaderStorageTexelBufferArrayDynamicIndexing>>
+  ** <<features-shaderUniformBufferArrayNonUniformIndexing, pname:shaderUniformBufferArrayNonUniformIndexing>>
+  ** <<features-shaderSampledImageArrayNonUniformIndexing, pname:shaderSampledImageArrayNonUniformIndexing>>
+  ** <<features-shaderStorageBufferArrayNonUniformIndexing, pname:shaderStorageBufferArrayNonUniformIndexing>>
+  ** <<features-shaderStorageImageArrayNonUniformIndexing, pname:shaderStorageImageArrayNonUniformIndexing>>
+  ** <<features-shaderUniformTexelBufferArrayNonUniformIndexing, pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
+  ** <<features-shaderStorageTexelBufferArrayNonUniformIndexing, pname:shaderStorageTexelBufferArrayNonUniformIndexing>>
+  ** <<features-descriptorBindingSampledImageUpdateAfterBind, pname:descriptorBindingSampledImageUpdateAfterBind>>
+  ** <<features-descriptorBindingStorageImageUpdateAfterBind, pname:descriptorBindingStorageImageUpdateAfterBind>>
+  ** <<features-descriptorBindingStorageBufferUpdateAfterBind, pname:descriptorBindingStorageBufferUpdateAfterBind>>
+  ** <<features-descriptorBindingUniformTexelBufferUpdateAfterBind, pname:descriptorBindingUniformTexelBufferUpdateAfterBind>>
+  ** <<features-descriptorBindingStorageTexelBufferUpdateAfterBind, pname:descriptorBindingStorageTexelBufferUpdateAfterBind>>
+  ** <<features-descriptorBindingUpdateUnusedWhilePending, pname:descriptorBindingUpdateUnusedWhilePending>>
+  ** <<features-descriptorBindingPartiallyBound, pname:descriptorBindingPartiallyBound>>
+  ** <<features-descriptorBindingVariableDescriptorCount, pname:descriptorBindingVariableDescriptorCount>>
+  ** <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>>
+  ** <<features-scalarBlockLayout, pname:scalarBlockLayout>>
+
+=== Required Limits
+
+The following core increased limits are required:
+
+.Vulkan 1.0 Limits
+[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
+|====
+| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
+| pname:maxImageDimension1D                  | - | 4096    | 8192    | min
+| pname:maxImageDimension2D                  | - | 4096    | 8192    | min
+| pname:maxImageDimensionCube                | - | 4096    | 8192    | min
+| pname:maxImageArrayLayers                  | - | 256     | 2048    | min
+| pname:maxUniformBufferRange                | - | 16384   | 65536   | min
+| pname:bufferImageGranularity               | - | 131072  | 4096    | max
+| pname:maxPerStageDescriptorSamplers        | - | 16      | 64      | min
+| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | 15      | min
+| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | 30      | min
+| pname:maxPerStageDescriptorSampledImages   | - | 16      | 200     | min
+| pname:maxPerStageDescriptorStorageImages   | - | 4       | 16      | min
+| pname:maxPerStageResources                 | - | 128     | 200     | min
+| pname:maxDescriptorSetSamplers             | - | 96      | 576     | min, _n_ {times} PerStage
+| pname:maxDescriptorSetUniformBuffers       | - | 72      | 90      | min, _n_ {times} PerStage
+| pname:maxDescriptorSetStorageBuffers       | - | 24      | 96      | min, _n_ {times} PerStage
+| pname:maxDescriptorSetSampledImages        | - | 96      | 1800    | min, _n_ {times} PerStage
+| pname:maxDescriptorSetStorageImages        | - | 24      | 144     | min, _n_ {times} PerStage
+| pname:maxFragmentCombinedOutputResources   | - | 4       | 16      | min
+| pname:maxComputeWorkGroupInvocations       | - | 128     | 256     | min
+| pname:maxComputeWorkGroupSize              | - | (128,128,64) | (256,256,64) | min
+| pname:subTexelPrecisionBits                | - | 4       | 8       | min
+| pname:mipmapPrecisionBits                  | - | 4       | 6       | min
+| pname:maxSamplerLodBias                    | - | 2       | 14      | min
+| pname:pointSizeGranularity                 | 0.0 | 1.0   | 0.125   | max, fixed point increment
+| pname:lineWidthGranularity                 | 0.0 | 1.0   | 0.5     | max, fixed point increment
+| pname:standardSampleLocations              | - | -       | ename:VK_TRUE | implementation-dependent
+| pname:maxColorAttachments                  | - | 4       | 7       | min
+|====
+
+.Vulkan 1.1 Limits
+[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
+|====
+| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
+| pname:subgroupSize                         | - | 1/4     | 4       | implementation-dependent
+| pname:subgroupSupportedStages              | - | ename:VK_SHADER_STAGE_COMPUTE_BIT
+                                                 | ename:VK_SHADER_STAGE_COMPUTE_BIT +
+                                                   ename:VK_SHADER_STAGE_FRAGMENT_BIT
+                                                 | implementation-dependent
+| pname:subgroupSupportedOperations          | - | ename:VK_SUBGROUP_FEATURE_BASIC_BIT
+                                                 | ename:VK_SUBGROUP_FEATURE_BASIC_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_VOTE_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_BALLOT_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT +
+                                                   ename:VK_SUBGROUP_FEATURE_QUAD_BIT
+                                                 | implementation-dependent
+|====
+
+.Vulkan 1.2 Limits
+[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
+|====
+| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
+| pname:shaderSignedZeroInfNanPreserveFloat16 | - | -     | ename:VK_TRUE       | implementation-dependent
+| pname:shaderSignedZeroInfNanPreserveFloat32 | - | -     | ename:VK_TRUE       | implementation-dependent
+| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 0 | 4     | 7    | min
+|====
+
+.Vulkan 1.3 Limits
+[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
+|====
+| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
+| pname:maxSubgroupSize | - | -     | 4       | min
+|====
+
+=== Required Extensions
+
+The following extensions are required:
+
+apiext:VK_KHR_global_priority
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_1.adoc b/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_1.adoc
new file mode 100644
index 0000000..7f3ebeb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_1.adoc
@@ -0,0 +1,32 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This is a simplified version of
+// gen/meta/promoted_extensions_VK_VERSION_1_1.txt
+// from the Vulkan repository spec build.
+// The Vulkan SC spec build will not generate that file since none of the
+// extensions promoted to 1.1 core are supported in SC.
+
+  * apiext:VK_KHR_16bit_storage
+  * apiext:VK_KHR_bind_memory2
+  * apiext:VK_KHR_dedicated_allocation
+  * apiext:VK_KHR_descriptor_update_template
+  * apiext:VK_KHR_device_group
+  * apiext:VK_KHR_device_group_creation
+  * apiext:VK_KHR_external_fence
+  * apiext:VK_KHR_external_fence_capabilities
+  * apiext:VK_KHR_external_memory
+  * apiext:VK_KHR_external_memory_capabilities
+  * apiext:VK_KHR_external_semaphore
+  * apiext:VK_KHR_external_semaphore_capabilities
+  * apiext:VK_KHR_get_memory_requirements2
+  * apiext:VK_KHR_get_physical_device_properties2
+  * apiext:VK_KHR_maintenance1
+  * apiext:VK_KHR_maintenance2
+  * apiext:VK_KHR_maintenance3
+  * apiext:VK_KHR_multiview
+  * apiext:VK_KHR_relaxed_block_layout
+  * apiext:VK_KHR_sampler_ycbcr_conversion
+  * apiext:VK_KHR_shader_draw_parameters
+  * apiext:VK_KHR_storage_buffer_storage_class
+  * apiext:VK_KHR_variable_pointers
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_2.adoc b/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_2.adoc
new file mode 100644
index 0000000..ec658f0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/sc_static/promoted_extensions_VK_VERSION_1_2.adoc
@@ -0,0 +1,33 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This is a simplified version of
+// gen/meta/promoted_extensions_VK_VERSION_1_2.txt
+// from the Vulkan repository spec build.
+// The Vulkan SC spec build will not generate that file since none of the
+// extensions promoted to 1.2 core are supported in SC.
+
+  * apiext:VK_KHR_8bit_storage
+  * apiext:VK_KHR_buffer_device_address
+  * apiext:VK_KHR_create_renderpass2
+  * apiext:VK_KHR_depth_stencil_resolve
+  * apiext:VK_KHR_draw_indirect_count
+  * apiext:VK_KHR_driver_properties
+  * apiext:VK_KHR_image_format_list
+  * apiext:VK_KHR_imageless_framebuffer
+  * apiext:VK_KHR_sampler_mirror_clamp_to_edge
+  * apiext:VK_KHR_separate_depth_stencil_layouts
+  * apiext:VK_KHR_shader_atomic_int64
+  * apiext:VK_KHR_shader_float16_int8
+  * apiext:VK_KHR_shader_float_controls
+  * apiext:VK_KHR_shader_subgroup_extended_types
+  * apiext:VK_KHR_spirv_1_4
+  * apiext:VK_KHR_timeline_semaphore
+  * apiext:VK_KHR_uniform_buffer_standard_layout
+  * apiext:VK_KHR_vulkan_memory_model
+  * apiext:VK_EXT_descriptor_indexing
+  * apiext:VK_EXT_host_query_reset
+  * apiext:VK_EXT_sampler_filter_minmax
+  * apiext:VK_EXT_scalar_block_layout
+  * apiext:VK_EXT_separate_stencil_usage
+  * apiext:VK_EXT_shader_viewport_index_layer
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/spirvenv.adoc b/codegen/vulkan/vulkan-docs-next/appendices/spirvenv.adoc
new file mode 100644
index 0000000..21d46da
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/spirvenv.adoc
@@ -0,0 +1,2610 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[spirvenv]]
+= Vulkan Environment for SPIR-V
+
+Shaders for Vulkan are defined by the <<spirv-spec,Khronos SPIR-V
+Specification>> as well as the <<spirv-extended,Khronos SPIR-V Extended
+Instructions for GLSL>> Specification.
+This appendix defines additional SPIR-V requirements applying to Vulkan
+shaders.
+
+== Versions and Formats
+
+// The fallthrough logic here defines {spirv-versions} according to the
+// highest Vulkan version supported, and simplifies the markup.
+
+ifdef::VK_VERSION_1_0[]
+:spirv-versions: 1.0 version
+:api-version: 1.0
+endif::VK_VERSION_1_0[]
+ifdef::VK_VERSION_1_1[]
+:spirv-versions: 1.0, 1.1, 1.2, and 1.3 versions
+:api-version: 1.1
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2[]
+:spirv-versions: 1.0, 1.1, 1.2, 1.3, 1.4, and 1.5 versions
+:api-version: 1.2
+endif::VK_VERSION_1_2[]
+ifdef::VK_VERSION_1_3[]
+:spirv-versions: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, and 1.6 versions
+:api-version: 1.3
+endif::VK_VERSION_1_3[]
+
+A Vulkan {api-version} implementation must: support the {spirv-versions} of
+SPIR-V and the 1.0 version of the SPIR-V Extended Instructions for GLSL.
+ifndef::VK_VERSION_1_2[]
+ifdef::VK_KHR_spirv_1_4[]
+If the `apiext:VK_KHR_spirv_1_4` extension is enabled, the implementation
+must: additionally support the 1.4 version of SPIR-V.
+endif::VK_KHR_spirv_1_4[]
+endif::VK_VERSION_1_2[]
+
+A SPIR-V module
+ifndef::VKSC_VERSION_1_0[]
+passed into flink:vkCreateShaderModule
+endif::VKSC_VERSION_1_0[]
+is interpreted as a series of 32-bit words in host endianness, with literal
+strings packed as described in section 2.2 of the SPIR-V Specification.
+The first few words of the SPIR-V module must: be a magic number and a
+SPIR-V version number, as described in section 2.3 of the SPIR-V
+Specification.
+
+
+[[spirvenv-capabilities]]
+== Capabilities
+
+The <<spirvenv-capabilities-table, table below>> lists the set of SPIR-V
+capabilities that may: be supported in Vulkan implementations.
+ifndef::VKSC_VERSION_1_0[]
+The application must: not use any of these capabilities in SPIR-V passed to
+flink:vkCreateShaderModule unless one of the following conditions is met for
+the slink:VkDevice specified in the pname:device parameter of
+flink:vkCreateShaderModule:
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+The application must: not select a pipeline cache entry, which was created
+by passing a SPIR-V module using any of these capabilities to the
+<<pipelines-offline-compilation, offline pipeline cache compiler>>, in a
+ptext:vkCreate*Pipelines command unless one of the following conditions is
+met for the slink:VkDevice specified in the pname:device parameter of the
+ptext:vkCreate*Pipelines command:
+endif::VKSC_VERSION_1_0[]
+
+  * The corresponding field in the table is blank.
+  * Any corresponding Vulkan feature is enabled.
+  * Any corresponding Vulkan extension is enabled.
+  * Any corresponding Vulkan property is supported.
+  * The corresponding core version is supported (as returned by
+    slink:VkPhysicalDeviceProperties::pname:apiVersion).
+
+:captableindent: {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp}
+[[spirvenv-capabilities-table]]
+.List of SPIR-V Capabilities and corresponding Vulkan features, extensions, or core version
+[options="header"]
+|====
+| SPIR-V code:OpCapability +
+  {captableindent} Vulkan feature, extension, or core version
+include::{generated}/spirvcap/captable.adoc[]
+|====
+
+ifndef::VKSC_VERSION_1_0[]
+The application must: not pass a SPIR-V module containing any of the
+following to flink:vkCreateShaderModule:
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+The application must: not select a pipeline cache entry, which was created
+by passing a SPIR-V module containing any of the following to the
+<<pipelines-offline-compilation, offline pipeline cache compiler>>,
+containing any of the following in a ptext:vkCreate*Pipelines command:
+endif::VKSC_VERSION_1_0[]
+
+  * any code:OpCapability not listed above,
+  * an unsupported capability, or
+  * a capability which corresponds to a Vulkan feature or extension which
+    has not been enabled.
+
+
+[[spirvenv-extensions]]
+=== SPIR-V Extensions
+
+The <<spirvenv-extensions-table,following table>> lists SPIR-V extensions
+that implementations may: support.
+ifndef::VKSC_VERSION_1_0[]
+The application must: not pass a SPIR-V module to flink:vkCreateShaderModule
+that uses the following SPIR-V extensions unless one of the following
+conditions is met for the slink:VkDevice specified in the pname:device
+parameter of flink:vkCreateShaderModule:
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+The application must: not select a pipeline cache entry, which was created
+by passing a SPIR-V module using any of the following SPIR-V extensions to
+the <<pipelines-offline-compilation, offline pipeline cache compiler>>, in a
+ptext:vkCreate*Pipelines command unless one of the following conditions is
+met for the slink:VkDevice specified in the pname:device parameter of the
+ptext:vkCreate*Pipelines command:
+endif::VKSC_VERSION_1_0[]
+
+  * Any corresponding Vulkan extension is enabled.
+  * The corresponding core version is supported (as returned by
+    slink:VkPhysicalDeviceProperties::pname:apiVersion).
+
+[[spirvenv-extensions-table]]
+.List of SPIR-V Extensions and corresponding Vulkan extensions or core version
+[options="header"]
+|====
+| SPIR-V code:OpExtension +
+  {captableindent} Vulkan extension or core version
+include::{generated}/spirvcap/exttable.adoc[]
+|====
+
+
+[[spirvenv-module-validation]]
+== Validation Rules Within a Module
+
+ifndef::VKSC_VERSION_1_0[]
+A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
+following rules:
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+Pipeline cache entries must: have been compiled with the
+<<pipelines-offline-compilation, offline pipeline cache compiler>> using
+SPIR-V modules that conform to the following rules:
+endif::VKSC_VERSION_1_0[]
+
+
+[[spirvenv-module-validation-standalone]]
+=== Standalone SPIR-V Validation
+
+[open,refpage='StandaloneSpirv',desc='Standalone SPIR-V Validation',type='spirv']
+--
+:refpage: StandaloneSpirv
+
+The following rules can: be validated with only the SPIR-V module itself.
+They do not depend on knowledge of the implementation and its capabilities
+or knowledge of runtime information, such as enabled features.
+
+.Valid Usage
+****
+// NOTE: Do not conditionalize the "standalone" VUs.
+// Write as though all extensions were enabled.
+// Add any needed conditional logic to the runtime section if needed.
+  * [[VUID-{refpage}-None-04633]]
+    Every entry point must: have no return value and accept no arguments
+  * [[VUID-{refpage}-None-04634]]
+    The static function-call graph for an entry point must: not contain
+    cycles; that is, static recursion is not allowed
+  * [[VUID-{refpage}-None-04635]]
+    The code:Logical or code:PhysicalStorageBuffer64 addressing model must:
+    be selected
+  * [[VUID-{refpage}-None-04636]]
+    code:Scope for execution must: be limited to code:Workgroup or
+    code:Subgroup
+  * [[VUID-{refpage}-None-04637]]
+    If the code:Scope for execution is code:Workgroup, then it must: only be
+    used in the task, mesh, tessellation control, or compute
+    {ExecutionModel}
+  * [[VUID-{refpage}-None-04638]]
+    code:Scope for memory must: be limited to code:Device, code:QueueFamily,
+    code:Workgroup, code:ShaderCallKHR, code:Subgroup, or code:Invocation
+  * [[VUID-{refpage}-ExecutionModel-07320]]
+    If the {ExecutionModel} is code:TessellationControl, and the
+    code:MemoryModel is code:GLSL450, the code:Scope for memory must: not be
+    code:Workgroup
+  * [[VUID-{refpage}-None-07321]]
+    If the code:Scope for memory is code:Workgroup, then it must: only be
+    used in the task, mesh, tessellation control, or compute
+    {ExecutionModel}
+  * [[VUID-{refpage}-None-04640]]
+    If the code:Scope for memory is code:ShaderCallKHR, then it must: only
+    be used in ray generation, intersection, closest hit, any-hit, miss, and
+    callable {ExecutionModel}
+  * [[VUID-{refpage}-None-04641]]
+    If the code:Scope for memory is code:Invocation, then memory semantics
+    must: be code:None
+  * [[VUID-{refpage}-None-04642]]
+    code:Scope for <<shaders-group-operations,group operations>> must: be
+    limited to code:Subgroup
+  * [[VUID-{refpage}-SubgroupVoteKHR-07951]]
+    If none of the code:SubgroupVoteKHR, code:GroupNonUniform, or
+    code:SubgroupBallotKHR capabilities are declared, code:Scope for memory
+    must: not be code:Subgroup
+  * [[VUID-{refpage}-None-04643]]
+    {StorageClass} must: be limited to code:UniformConstant, code:Input,
+    code:Uniform, code:Output, code:Workgroup, code:Private, code:Function,
+    code:PushConstant, code:Image, code:StorageBuffer, code:RayPayloadKHR,
+    code:IncomingRayPayloadKHR, code:HitAttributeKHR, code:CallableDataKHR,
+    code:IncomingCallableDataKHR, code:ShaderRecordBufferKHR,
+    code:PhysicalStorageBuffer, or code:TileImageEXT
+  * [[VUID-{refpage}-None-04644]]
+    If the {StorageClass} is code:Output, then it must: not be used in the
+    code:GlCompute, code:RayGenerationKHR, code:IntersectionKHR,
+    code:AnyHitKHR, code:ClosestHitKHR, code:MissKHR, or code:CallableKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-None-04645]]
+    If the {StorageClass} is code:Workgroup, then it must: only be used in
+    the task, mesh, or compute {ExecutionModel}
+  * [[VUID-{refpage}-None-08720]]
+    If the {StorageClass} is code:TileImageEXT, then it must: only be used
+    in the fragment execution model
+  * [[VUID-{refpage}-OpAtomicStore-04730]]
+    code:OpAtomicStore must: not use code:Acquire, code:AcquireRelease, or
+    code:SequentiallyConsistent memory semantics
+  * [[VUID-{refpage}-OpAtomicLoad-04731]]
+    code:OpAtomicLoad must: not use code:Release, code:AcquireRelease, or
+    code:SequentiallyConsistent memory semantics
+  * [[VUID-{refpage}-OpMemoryBarrier-04732]]
+    code:OpMemoryBarrier must: use one of code:Acquire, code:Release,
+    code:AcquireRelease, or code:SequentiallyConsistent memory semantics
+  * [[VUID-{refpage}-OpMemoryBarrier-04733]]
+    code:OpMemoryBarrier must: include at least one {StorageClass}
+  * [[VUID-{refpage}-OpControlBarrier-04650]]
+    If the semantics for code:OpControlBarrier includes one of code:Acquire,
+    code:Release, code:AcquireRelease, or code:SequentiallyConsistent memory
+    semantics, then it must: include at least one {StorageClass}
+  * [[VUID-{refpage}-OpVariable-04651]]
+    Any code:OpVariable with an code:Initializer operand must: have
+    code:Output, code:Private, code:Function, or code:Workgroup as its
+    {StorageClass} operand
+  * [[VUID-{refpage}-OpVariable-04734]]
+    Any code:OpVariable with an code:Initializer operand and code:Workgroup
+    as its {StorageClass} operand must: use code:OpConstantNull as the
+    initializer
+  * [[VUID-{refpage}-OpReadClockKHR-04652]]
+    code:Scope for code:OpReadClockKHR must: be limited to code:Subgroup or
+    code:Device
+  * [[VUID-{refpage}-OriginLowerLeft-04653]]
+    The code:OriginLowerLeft {ExecutionMode} must: not be used; fragment
+    entry points must: declare code:OriginUpperLeft
+  * [[VUID-{refpage}-PixelCenterInteger-04654]]
+    The code:PixelCenterInteger {ExecutionMode} must: not be used (pixels
+    are always centered at half-integer coordinates)
+  * [[VUID-{refpage}-UniformConstant-04655]]
+    Any variable in the code:UniformConstant {StorageClass} must: be typed
+    as either code:OpTypeImage, code:OpTypeSampler, code:OpTypeSampledImage,
+    code:OpTypeAccelerationStructureKHR, or an array of one of these types
+  * [[VUID-{refpage}-Uniform-06807]]
+    Any variable in the code:Uniform or code:StorageBuffer {StorageClass}
+    must: be typed as code:OpTypeStruct or an array of this type
+  * [[VUID-{refpage}-PushConstant-06808]]
+    Any variable in the code:PushConstant {StorageClass} must: be typed as
+    code:OpTypeStruct
+  * [[VUID-{refpage}-OpTypeImage-04656]]
+    code:OpTypeImage must: declare a scalar 32-bit float, 64-bit integer, or
+    32-bit integer type for the "`Sampled Type`" (code:RelaxedPrecision can:
+    be applied to a sampling instruction and to the variable holding the
+    result of a sampling instruction)
+  * [[VUID-{refpage}-OpTypeImage-04657]]
+    code:OpTypeImage must: have a "`Sampled`" operand of 1 (sampled image)
+    or 2 (storage image)
+  * [[VUID-{refpage}-OpTypeSampledImage-06671]]
+    code:OpTypeSampledImage must: have a code:OpTypeImage with a "`Sampled`"
+    operand of 1 (sampled image)
+  * [[VUID-{refpage}-Image-04965]]
+    The <<spirv-type,SPIR-V Type>> of the code:Image code:Format operand of
+    an code:OpTypeImage must: match the code:Sampled code:Type, as defined
+    in <<spirvenv-format-type-matching>>
+  * [[VUID-{refpage}-OpImageTexelPointer-04658]]
+    If an code:OpImageTexelPointer is used in an atomic operation, the image
+    type of the code:image parameter to code:OpImageTexelPointer must: have
+    an image format of code:R64i, code:R64ui, code:R32f, code:R32i, or
+    code:R32ui
+  * [[VUID-{refpage}-OpImageQuerySizeLod-04659]]
+    code:OpImageQuerySizeLod, code:OpImageQueryLod, and
+    code:OpImageQueryLevels must: only consume an "`Image`" operand whose
+    type has its "`Sampled`" operand set to 1
+  * [[VUID-{refpage}-OpTypeImage-06214]]
+    An code:OpTypeImage with a "`Dim`" operand of code:SubpassData must:
+    have an "`Arrayed`" operand of 0 (non-arrayed) and a "`Sampled`" operand
+    of 2 (storage image)
+  * [[VUID-{refpage}-SubpassData-04660]]
+    The [eq]#(u,v)# coordinates used for a code:SubpassData must: be the
+    <id> of a constant vector [eq]#(0,0)#, or if a layer coordinate is used,
+    must: be a vector that was formed with constant 0 for the [eq]#u# and
+    [eq]#v# components
+  * [[VUID-{refpage}-OpTypeImage-06924]]
+    Objects of types code:OpTypeImage, code:OpTypeSampler,
+    code:OpTypeSampledImage, code:OpTypeAccelerationStructureKHR, and arrays
+    of these types must: not be stored to or modified
+  * [[VUID-{refpage}-Uniform-06925]]
+    Any variable in the code:Uniform {StorageClass} decorated as code:Block
+    must: not be stored to or modified
+  * [[VUID-{refpage}-Offset-04663]]
+    Image operand code:Offset must: only be used with code:OpImage*Gather
+    instructions
+  * [[VUID-{refpage}-Offset-04865]]
+    Any image instruction which uses an code:Offset, code:ConstOffset, or
+    code:ConstOffsets image operand, must only consume a "`Sampled Image`"
+    operand whose type has its "`Sampled`" operand set to 1
+  * [[VUID-{refpage}-OpImageGather-04664]]
+    The "`Component`" operand of code:OpImageGather, and
+    code:OpImageSparseGather must: be the <id> of a constant instruction
+  * [[VUID-{refpage}-OpImage-04777]]
+    code:OpImage*Dref* instructions must: not consume an image whose `Dim`
+    is 3D
+  * [[VUID-{refpage}-None-04667]]
+    Structure types must: not contain opaque types
+  * [[VUID-{refpage}-BuiltIn-04668]]
+    Any code:BuiltIn decoration not listed in
+    <<interfaces-builtin-variables>> must: not be used
+  * [[VUID-{refpage}-Location-06672]]
+    The code:Location or code:Component decorations must: only be used with
+    the code:Input, code:Output, code:RayPayloadKHR,
+    code:IncomingRayPayloadKHR, code:HitAttributeKHR,
+    code:HitObjectAttributeNV, code:CallableDataKHR,
+    code:IncomingCallableDataKHR, or code:ShaderRecordBufferKHR storage
+    classes
+  * [[VUID-{refpage}-Location-04915]]
+    The code:Location or code:Component decorations must: not be used with
+    code:BuiltIn
+  * [[VUID-{refpage}-Location-04916]]
+    The code:Location decorations must: be used on
+    <<interfaces-iointerfaces-user,user-defined variables>>
+  * [[VUID-{refpage}-Location-04917]]
+    If a <<interfaces-iointerfaces-user,user-defined variable>> is not a
+    pointer to a code:Block decorated code:OpTypeStruct, then the
+    code:OpVariable must: have a code:Location decoration
+  * [[VUID-{refpage}-Location-04918]]
+    If a <<interfaces-iointerfaces-user,user-defined variable>> has a
+    code:Location decoration, and the variable is a pointer to a
+    code:OpTypeStruct, then the members of that structure must: not have
+    code:Location decorations
+  * [[VUID-{refpage}-Location-04919]]
+    If a <<interfaces-iointerfaces-user,user-defined variable>> does not
+    have a code:Location decoration, and the variable is a pointer to a
+    code:Block decorated code:OpTypeStruct, then each member of the struct
+    must: have a code:Location decoration
+  * [[VUID-{refpage}-Component-04920]]
+    The code:Component decoration value must: not be greater than 3
+  * [[VUID-{refpage}-Component-04921]]
+    If the code:Component decoration is used on an code:OpVariable that has
+    a code:OpTypeVector type with a code:Component code:Type with a
+    code:Width that is less than or equal to 32, the sum of its
+    code:Component code:Count and the code:Component decoration value must:
+    be less than or equal to 4
+  * [[VUID-{refpage}-Component-04922]]
+    If the code:Component decoration is used on an code:OpVariable that has
+    a code:OpTypeVector type with a code:Component code:Type with a
+    code:Width that is equal to 64, the sum of two times its code:Component
+    code:Count and the code:Component decoration value must: be less than or
+    equal to 4
+  * [[VUID-{refpage}-Component-04923]]
+    The code:Component decorations value must: not be 1 or 3 for scalar or
+    two-component 64-bit data types
+  * [[VUID-{refpage}-Component-04924]]
+    The code:Component decorations must: not be used with any type that is
+    not a scalar or vector, or an array of such a type
+  * [[VUID-{refpage}-Component-07703]]
+    The code:Component decorations must: not be used for a 64-bit vector
+    type with more than two components
+  * [[VUID-{refpage}-GLSLShared-04669]]
+    The code:GLSLShared and code:GLSLPacked decorations must: not be used
+  * [[VUID-{refpage}-Flat-04670]]
+    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
+    decorations must: only be used on variables with the code:Output or
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-Flat-06201]]
+    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
+    decorations must: not be used on variables with the code:Output storage
+    class in a fragment shader
+  * [[VUID-{refpage}-Flat-06202]]
+    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
+    decorations must: not be used on variables with the code:Input storage
+    class in a vertex shader
+  * [[VUID-{refpage}-PerVertexKHR-06777]]
+    The code:PerVertexKHR decoration must: only be used on variables with
+    the code:Input {StorageClass} in a fragment shader
+  * [[VUID-{refpage}-Flat-04744]]
+    Any variable with integer or double-precision floating-point type and
+    with code:Input {StorageClass} in a fragment shader, must: be decorated
+    code:Flat
+  * [[VUID-{refpage}-ViewportRelativeNV-04672]]
+    The code:ViewportRelativeNV decoration must: only be used on a variable
+    decorated with code:Layer in the vertex, tessellation evaluation, or
+    geometry shader stages
+  * [[VUID-{refpage}-ViewportRelativeNV-04673]]
+    The code:ViewportRelativeNV decoration must: not be used unless a
+    variable decorated with one of code:ViewportIndex or code:ViewportMaskNV
+    is also statically used by the same code:OpEntryPoint
+  * [[VUID-{refpage}-ViewportMaskNV-04674]]
+    The code:ViewportMaskNV and code:ViewportIndex decorations must: not
+    both be statically used by one or more code:OpEntryPoint's that form the
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> of a graphics pipeline
+  * [[VUID-{refpage}-FPRoundingMode-04675]]
+    Rounding modes other than round-to-nearest-even and round-towards-zero
+    must: not be used for the code:FPRoundingMode decoration
+  * [[VUID-{refpage}-Invariant-04677]]
+    Variables decorated with code:Invariant and variables with structure
+    types that have any members decorated with code:Invariant must: be in
+    the code:Output or code:Input {StorageClass}, code:Invariant used on an
+    code:Input {StorageClass} variable or structure member has no effect
+  * [[VUID-{refpage}-VulkanMemoryModel-04678]]
+    [[builtin-volatile-semantics]] If the code:VulkanMemoryModel capability
+    is not declared, the code:Volatile decoration must: be used on any
+    variable declaration that includes one of the code:SMIDNV,
+    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
+    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
+    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
+    when used in the ray generation, closest hit, miss, intersection, or
+    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
+    when used in an intersection shader
+  * [[VUID-{refpage}-VulkanMemoryModel-04679]]
+    If the code:VulkanMemoryModel capability is declared, the code:OpLoad
+    instruction must: use the code:Volatile memory semantics when it
+    accesses into any variable that includes one of the code:SMIDNV,
+    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
+    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
+    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
+    when used in the ray generation, closest hit, miss, intersection, or
+    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
+    when used in an intersection shader
+  * [[VUID-{refpage}-OpTypeRuntimeArray-04680]]
+    code:OpTypeRuntimeArray must: only be used for:
+  ** the last member of a code:Block-decorated code:OpTypeStruct in
+     code:StorageBuffer or code:PhysicalStorageBuffer storage {StorageClass}
+  ** code:BufferBlock-decorated code:OpTypeStruct in the code:Uniform
+     storage {StorageClass}
+  ** the outermost dimension of an arrayed variable in the
+     code:StorageBuffer, code:Uniform, or code:UniformConstant storage
+     {StorageClass}
+  ** variables in the code:NodePayloadAMDX storage {StorageClass} when the
+     code:CoalescingAMDX {ExecutionMode} is specified
+  * [[VUID-{refpage}-Function-04681]]
+    A type _T_ that is an array sized with a specialization constant must:
+    neither be, nor be contained in, the type _T2_ of a variable _V_, unless
+    either: a) _T_ is equal to _T2_, b) _V_ is declared in the
+    code:Function, or code:Private {StorageClass}, c) _V_ is a non-Block
+    variable in the code:Workgroup {StorageClass}, or d) _V_ is an interface
+    variable with an additional level of arrayness,
+    <<interfaces-iointerfaces-matching, as described in interface
+    matching>>, and _T_ is the member type of the array type _T2_
+  * [[VUID-{refpage}-OpControlBarrier-04682]]
+    If code:OpControlBarrier is used in ray generation, intersection,
+    any-hit, closest hit, miss, fragment, vertex, tessellation evaluation,
+    or geometry shaders, the execution Scope must: be code:Subgroup
+  * [[VUID-{refpage}-LocalSize-06426]]
+    For each compute shader entry point, either a code:LocalSize or
+    code:LocalSizeId {ExecutionMode}, or an object decorated with the
+    code:WorkgroupSize decoration must: be specified
+  * [[VUID-{refpage}-DerivativeGroupQuadsNV-04684]]
+    For compute shaders using the code:DerivativeGroupQuadsNV execution
+    mode, the first two dimensions of the local workgroup size must: be a
+    multiple of two
+  * [[VUID-{refpage}-DerivativeGroupLinearNV-04778]]
+    For compute shaders using the code:DerivativeGroupLinearNV execution
+    mode, the product of the dimensions of the local workgroup size must: be
+    a multiple of four
+  * [[VUID-{refpage}-OpGroupNonUniformBallotBitCount-04685]]
+    If code:OpGroupNonUniformBallotBitCount is used, the group operation
+    must: be limited to code:Reduce, code:InclusiveScan, or
+    code:ExclusiveScan
+  * [[VUID-{refpage}-None-04686]]
+    The _Pointer_ operand of all atomic instructions must: have a
+    {StorageClass} limited to code:Uniform, code:Workgroup, code:Image,
+    code:StorageBuffer, code:PhysicalStorageBuffer, or
+    code:TaskPayloadWorkgroupEXT
+  * [[VUID-{refpage}-Offset-04687]]
+    Output variables or block members decorated with code:Offset that have a
+    64-bit type, or a composite type containing a 64-bit type, must: specify
+    an code:Offset value aligned to a 8 byte boundary
+  * [[VUID-{refpage}-Offset-04689]]
+    The size of any output block containing any member decorated with
+    code:Offset that is a 64-bit type must: be a multiple of 8
+  * [[VUID-{refpage}-Offset-04690]]
+    The first member of an output block specifying a code:Offset decoration
+    must: specify a code:Offset value that is aligned to an 8 byte boundary
+    if that block contains any member decorated with code:Offset and is a
+    64-bit type
+  * [[VUID-{refpage}-Offset-04691]]
+    Output variables or block members decorated with code:Offset that have a
+    32-bit type, or a composite type contains a 32-bit type, must: specify
+    an code:Offset value aligned to a 4 byte boundary
+  * [[VUID-{refpage}-Offset-04692]]
+    Output variables, blocks or block members decorated with code:Offset
+    must: only contain base types that have components that are either
+    32-bit or 64-bit in size
+  * [[VUID-{refpage}-Offset-04716]]
+    Only variables or block members in the output interface decorated with
+    code:Offset can: be captured for transform feedback, and those variables
+    or block members must: also be decorated with code:XfbBuffer and
+    code:XfbStride, or inherit code:XfbBuffer and code:XfbStride decorations
+    from a block containing them
+  * [[VUID-{refpage}-XfbBuffer-04693]]
+    All variables or block members in the output interface of the entry
+    point being compiled decorated with a specific code:XfbBuffer value
+    must: all be decorated with identical code:XfbStride values
+  * [[VUID-{refpage}-Stream-04694]]
+    If any variables or block members in the output interface of the entry
+    point being compiled are decorated with code:Stream, then all variables
+    belonging to the same code:XfbBuffer must: specify the same code:Stream
+    value
+  * [[VUID-{refpage}-XfbBuffer-04696]]
+    For any two variables or block members in the output interface of the
+    entry point being compiled with the same code:XfbBuffer value, the
+    ranges determined by the code:Offset decoration and the size of the type
+    must: not overlap
+  * [[VUID-{refpage}-XfbBuffer-04697]]
+    All block members in the output interface of the entry point being
+    compiled that are in the same block and have a declared or inherited
+    code:XfbBuffer decoration must: specify the same code:XfbBuffer value
+  * [[VUID-{refpage}-RayPayloadKHR-04698]]
+    code:RayPayloadKHR {StorageClass} must: only be used in ray generation,
+    closest hit or miss shaders
+  * [[VUID-{refpage}-IncomingRayPayloadKHR-04699]]
+    code:IncomingRayPayloadKHR {StorageClass} must: only be used in closest
+    hit, any-hit, or miss shaders
+  * [[VUID-{refpage}-IncomingRayPayloadKHR-04700]]
+    There must: be at most one variable with the code:IncomingRayPayloadKHR
+    {StorageClass} in the input interface of an entry point
+  * [[VUID-{refpage}-HitAttributeKHR-04701]]
+    code:HitAttributeKHR {StorageClass} must: only be used in intersection,
+    any-hit, or closest hit shaders
+  * [[VUID-{refpage}-HitAttributeKHR-04702]]
+    There must: be at most one variable with the code:HitAttributeKHR
+    {StorageClass} in the input interface of an entry point
+  * [[VUID-{refpage}-HitAttributeKHR-04703]]
+    A variable with code:HitAttributeKHR {StorageClass} must: only be
+    written to in an intersection shader
+  * [[VUID-{refpage}-CallableDataKHR-04704]]
+    code:CallableDataKHR {StorageClass} must: only be used in ray
+    generation, closest hit, miss, and callable shaders
+  * [[VUID-{refpage}-IncomingCallableDataKHR-04705]]
+    code:IncomingCallableDataKHR {StorageClass} must: only be used in
+    callable shaders
+  * [[VUID-{refpage}-IncomingCallableDataKHR-04706]]
+    There must: be at most one variable with the
+    code:IncomingCallableDataKHR {StorageClass} in the input interface of an
+    entry point
+  * [[VUID-{refpage}-ShaderRecordBufferKHR-07119]]
+    code:ShaderRecordBufferKHR {StorageClass} must: only be used in ray
+    generation, intersection, any-hit, closest hit, callable, or miss
+    shaders
+  * [[VUID-{refpage}-Base-07650]]
+    The code:Base operand of code:OpPtrAccessChain must: have a storage
+    class of code:Workgroup, code:StorageBuffer, or
+    code:PhysicalStorageBuffer
+  * [[VUID-{refpage}-Base-07651]]
+    If the code:Base operand of code:OpPtrAccessChain has a code:Workgroup
+    {StorageClass}, then the code:VariablePointers capability must: be
+    declared
+  * [[VUID-{refpage}-Base-07652]]
+    If the code:Base operand of code:OpPtrAccessChain has a
+    code:StorageBuffer {StorageClass}, then the code:VariablePointers or
+    code:VariablePointersStorageBuffer capability must: be declared
+  * [[VUID-{refpage}-PhysicalStorageBuffer64-04708]]
+    If the code:PhysicalStorageBuffer64 addressing model is enabled, all
+    instructions that support memory access operands and that use a physical
+    pointer must: include the code:Aligned operand
+  * [[VUID-{refpage}-PhysicalStorageBuffer64-04709]]
+    If the code:PhysicalStorageBuffer64 addressing model is enabled, any
+    access chain instruction that accesses into a code:RowMajor matrix must:
+    only be used as the code:Pointer operand to code:OpLoad or code:OpStore
+  * [[VUID-{refpage}-PhysicalStorageBuffer64-04710]]
+    If the code:PhysicalStorageBuffer64 addressing model is enabled,
+    code:OpConvertUToPtr and code:OpConvertPtrToU must: use an integer type
+    whose code:Width is 64
+  * [[VUID-{refpage}-OpTypeForwardPointer-04711]]
+    code:OpTypeForwardPointer must: have a {StorageClass} of
+    code:PhysicalStorageBuffer
+  * [[VUID-{refpage}-None-04745]]
+    All block members in a variable with a {StorageClass} of
+    code:PushConstant declared as an array must: only be accessed by
+    dynamically uniform indices
+  * [[VUID-{refpage}-OpVariable-06673]]
+    There must: not be more than one code:OpVariable in the
+    code:PushConstant {StorageClass} listed in the code:Interface for each
+    code:OpEntryPoint
+  * [[VUID-{refpage}-OpEntryPoint-06674]]
+    Each code:OpEntryPoint must: not statically use more than one
+    code:OpVariable in the code:PushConstant {StorageClass}
+  * [[VUID-{refpage}-OpEntryPoint-08721]]
+    Each code:OpEntryPoint must: not have more than one code:Input variable
+    assigned the same code:Component word inside a code:Location slot,
+    either explicitly or implicitly
+  * [[VUID-{refpage}-OpEntryPoint-08722]]
+    Each code:OpEntryPoint must: not have more than one code:Output variable
+    assigned the same code:Component word inside a code:Location slot,
+    either explicitly or implicitly
+  * [[VUID-{refpage}-Result-04780]]
+    The code:Result code:Type operand of any code:OpImageRead or
+    code:OpImageSparseRead instruction must: be a vector of four components
+  * [[VUID-{refpage}-Base-04781]]
+    The code:Base operand of any code:OpBitCount, code:OpBitReverse,
+    code:OpBitFieldInsert, code:OpBitFieldSExtract, or
+    code:OpBitFieldUExtract instruction must: be a 32-bit integer scalar or
+    a vector of 32-bit integers
+  * [[VUID-{refpage}-PushConstant-06675]]
+    Any variable in the code:PushConstant or code:StorageBuffer storage
+    class must: be decorated as code:Block
+  * [[VUID-{refpage}-Uniform-06676]]
+    Any variable in the code:Uniform {StorageClass} must: be decorated as
+    code:Block or code:BufferBlock
+  * [[VUID-{refpage}-UniformConstant-06677]]
+    Any variable in the code:UniformConstant, code:StorageBuffer, or
+    code:Uniform {StorageClass} must: be decorated with code:DescriptorSet
+    and code:Binding
+  * [[VUID-{refpage}-InputAttachmentIndex-06678]]
+    Variables decorated with code:InputAttachmentIndex must: be in the
+    code:UniformConstant {StorageClass}
+  * [[VUID-{refpage}-DescriptorSet-06491]]
+    If a variable is decorated by code:DescriptorSet or code:Binding, the
+    {StorageClass} must: correspond to an entry in
+    <<interfaces-resources-storage-class-correspondence, Shader Resource and
+    Storage Class Correspondence>>
+  * [[VUID-{refpage}-Input-06778]]
+    Variables with a {StorageClass} of code:Input in a fragment shader stage
+    that are decorated with code:PerVertexKHR must: be declared as arrays
+  * [[VUID-{refpage}-MeshEXT-07102]]
+    The module must: not contain both an entry point that uses the
+    code:TaskEXT or code:MeshEXT {ExecutionModel} and an entry point that
+    uses the code:TaskNV or code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-MeshEXT-07106]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel}
+    code:OpSetMeshOutputsEXT must: be called before any outputs are written
+  * [[VUID-{refpage}-MeshEXT-07107]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} all variables
+    declared as output must: not be read from
+  * [[VUID-{refpage}-MeshEXT-07108]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} for
+    code:OpSetMeshOutputsEXT instructions, the "`Vertex Count`" and
+    "`Primitive Count`" operands must: not depend on code:ViewIndex
+  * [[VUID-{refpage}-MeshEXT-07109]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} variables
+    decorated with code:PrimitivePointIndicesEXT,
+    code:PrimitiveLineIndicesEXT, or code:PrimitiveTriangleIndicesEXT
+    declared as an array must: not be accessed by indices that depend on
+    code:ViewIndex
+  * [[VUID-{refpage}-MeshEXT-07110]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} any values
+    stored in variables decorated with code:PrimitivePointIndicesEXT,
+    code:PrimitiveLineIndicesEXT, or code:PrimitiveTriangleIndicesEXT must:
+    not depend on code:ViewIndex
+  * [[VUID-{refpage}-MeshEXT-07111]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} variables in
+    workgroup or private {StorageClass} declared as or containing a
+    composite type must: not be accessed by indices that depend on
+    code:ViewIndex
+  * [[VUID-{refpage}-MeshEXT-07330]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} the
+    code:OutputVertices {ExecutionMode} must: be greater than 0
+  * [[VUID-{refpage}-MeshEXT-07331]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel} the
+    code:OutputPrimitivesEXT {ExecutionMode} must: be greater than 0
+  * [[VUID-{refpage}-Input-07290]]
+    Variables with a {StorageClass} of code:Input or code:Output and a type
+    of code:OpTypeBool must: be decorated with the code:BuiltIn decoration
+  * [[VUID-{refpage}-TileImageEXT-08723]]
+    The tile image variable declarations must: obey the constraints on the
+    code:TileImageEXT {StorageClass} and the code:Location decoration
+    described in <<interfaces-fragmenttileimage, Fragment Tile Image
+    Interface>>
+  * [[VUID-{refpage}-None-08724]]
+    The code:TileImageEXT {StorageClass} must: only be used for declaring
+    tile image variables.
+  * [[VUID-{refpage}-Pointer-08973]]
+    The {StorageClass} of the code:Pointer operand to
+    code:OpCooperativeMatrixLoadKHR or code:OpCooperativeMatrixStoreKHR
+    must: be limited to code:Workgroup, code:StorageBuffer, or
+    code:PhysicalStorageBuffer.
+****
+--
+
+
+[[spirvenv-module-validation-runtime]]
+=== Runtime SPIR-V Validation
+
+[open,refpage='RuntimeSpirv',desc='Runtime SPIR-V Validation',type='spirv']
+--
+:refpage: RuntimeSpirv
+
+The following rules must: be validated at runtime.
+These rules depend on knowledge of the implementation and its capabilities
+and knowledge of runtime information, such as enabled features.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+  * [[VUID-{refpage}-vulkanMemoryModel-06265]]
+    If <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> is enabled
+    and <<features-vulkanMemoryModelDeviceScope,
+    pname:vulkanMemoryModelDeviceScope>> is not enabled, code:Device memory
+    scope must: not be used
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+  * [[VUID-{refpage}-vulkanMemoryModel-06266]]
+    If <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> is not
+    enabled, code:QueueFamily memory scope must: not be used
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+ifdef::VK_KHR_shader_clock[]
+  * [[VUID-{refpage}-shaderSubgroupClock-06267]]
+    If <<features-shaderSubgroupClock, pname:shaderSubgroupClock>> is not
+    enabled, the code:Subgroup scope must: not be used for
+    code:OpReadClockKHR
+  * [[VUID-{refpage}-shaderDeviceClock-06268]]
+    If <<features-shaderDeviceClock, pname:shaderDeviceClock>> is not
+    enabled, the code:Device scope must: not be used for code:OpReadClockKHR
+endif::VK_KHR_shader_clock[]
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-OpTypeImage-06269]]
+    If <<features-shaderStorageImageWriteWithoutFormat,
+    pname:shaderStorageImageWriteWithoutFormat>> is not enabled, any
+    variable created with a "`Type`" of code:OpTypeImage that has a
+    "`Sampled`" operand of 2 and an "`Image Format`" operand of code:Unknown
+    must: be decorated with code:NonWritable
+  * [[VUID-{refpage}-OpTypeImage-06270]]
+    If <<features-shaderStorageImageReadWithoutFormat,
+    pname:shaderStorageImageReadWithoutFormat>> is not enabled, any variable
+    created with a "`Type`" of code:OpTypeImage that has a "`Sampled`"
+    operand of 2 and an "`Image Format`" operand of code:Unknown must: be
+    decorated with code:NonReadable
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3[]
+ifndef::VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-apiVersion-07952]]
+    If slink:VkPhysicalDeviceProperties::pname:apiVersion is less than
+    Vulkan 1.3, and <<features-shaderStorageImageWriteWithoutFormat,
+    pname:shaderStorageImageWriteWithoutFormat>> is not enabled, any
+    variable created with a "`Type`" of code:OpTypeImage that has a
+    "`Sampled`" operand of 2 and an "`Image Format`" operand of code:Unknown
+    must: be decorated with code:NonWritable
+  * [[VUID-{refpage}-apiVersion-07953]]
+    If slink:VkPhysicalDeviceProperties::pname:apiVersion is less than
+    Vulkan 1.3, and <<features-shaderStorageImageReadWithoutFormat,
+    pname:shaderStorageImageReadWithoutFormat>> is not enabled, any variable
+    created with a "`Type`" of code:OpTypeImage that has a "`Sampled`"
+    operand of 2 and an "`Image Format`" operand of code:Unknown must: be
+    decorated with code:NonReadable
+endif::VK_KHR_format_feature_flags2[]
+ifdef::VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-apiVersion-07954]]
+    If slink:VkPhysicalDeviceProperties::pname:apiVersion is less than
+    Vulkan 1.3, the apiext:VK_KHR_format_feature_flags2 extension is not
+    supported, and <<features-shaderStorageImageWriteWithoutFormat,
+    pname:shaderStorageImageWriteWithoutFormat>> is not enabled, any
+    variable created with a "`Type`" of code:OpTypeImage that has a
+    "`Sampled`" operand of 2 and an "`Image Format`" operand of code:Unknown
+    must: be decorated with code:NonWritable
+  * [[VUID-{refpage}-apiVersion-07955]]
+    If slink:VkPhysicalDeviceProperties::pname:apiVersion is less than
+    Vulkan 1.3, the apiext:VK_KHR_format_feature_flags2 extension is not
+    supported, and <<features-shaderStorageImageReadWithoutFormat,
+    pname:shaderStorageImageReadWithoutFormat>> is not enabled, any variable
+    created with a "`Type`" of code:OpTypeImage that has a "`Sampled`"
+    operand of 2 and an "`Image Format`" operand of code:Unknown must: be
+    decorated with code:NonReadable
+endif::VK_KHR_format_feature_flags2[]
+endif::VK_VERSION_1_3[]
+ifdef::VK_KHR_format_feature_flags2[]
+ifndef::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-shaderStorageImageWriteWithoutFormat-07956]]
+    If the apiext:VK_KHR_format_feature_flags2 extension is not enabled, and
+    <<features-shaderStorageImageWriteWithoutFormat,
+    pname:shaderStorageImageWriteWithoutFormat>> is not enabled, any
+    variable created with a "`Type`" of code:OpTypeImage that has a
+    "`Sampled`" operand of 2 and an "`Image Format`" operand of code:Unknown
+    must: be decorated with code:NonWritable
+  * [[VUID-{refpage}-shaderStorageImageReadWithoutFormat-07957]]
+    If the apiext:VK_KHR_format_feature_flags2 extension is not enabled, and
+    <<features-shaderStorageImageReadWithoutFormat,
+    pname:shaderStorageImageReadWithoutFormat>> is not enabled, any variable
+    created with a "`Type`" of code:OpTypeImage that has a "`Sampled`"
+    operand of 2 and an "`Image Format`" operand of code:Unknown must: be
+    decorated with code:NonReadable
+endif::VK_VERSION_1_3[]
+endif::VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-OpImageWrite-07112]]
+    code:OpImageWrite to any code:Image whose code:Image code:Format is not
+    code:Unknown must: have the code:Texel operand contain at least as many
+    components as the corresponding elink:VkFormat as given in the
+    <<spirvenv-image-formats,SPIR-V Image Format compatibility table>>
+  * [[VUID-{refpage}-Location-06272]]
+    The sum of code:Location and the number of locations the variable it
+    decorates consumes must: be less than or equal to the value for the
+    matching {ExecutionModel} defined in <<interfaces-iointerfaces-limits>>
+  * [[VUID-{refpage}-Location-06428]]
+    The maximum number of storage buffers, storage images, and output
+    code:Location decorated color attachments written to in the
+    code:Fragment {ExecutionModel} must: be less than or equal to
+    <<limits-maxFragmentCombinedOutputResources,
+    pname:maxFragmentCombinedOutputResources>>
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-{refpage}-NonUniform-06274]]
+    If an instruction loads from or stores to a resource (including atomics
+    and image instructions) and the resource descriptor being accessed is
+    not dynamically uniform, then the operand corresponding to that resource
+    (e.g. the pointer or sampled image operand) must: be decorated with
+    code:NonUniform
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+  * [[VUID-{refpage}-None-06275]]
+    <<features-subgroup-extended-types, pname:shaderSubgroupExtendedTypes>>
+    must: be enabled for <<shaders-group-operations,group operations>> to
+    use 8-bit integer, 16-bit integer, 64-bit integer, 16-bit
+    floating-point, and vectors of these types
+endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06276]]
+    If <<features-subgroupBroadcastDynamicId,
+    pname:subgroupBroadcastDynamicId>> is ename:VK_TRUE, and the shader
+    module version is 1.5 or higher, the "`Index`" for
+    code:OpGroupNonUniformQuadBroadcast must: be dynamically uniform within
+    the derivative group.
+    Otherwise, "`Index`" must: be a constant
+  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06277]]
+    If <<features-subgroupBroadcastDynamicId,
+    pname:subgroupBroadcastDynamicId>> is ename:VK_TRUE, and the shader
+    module version is 1.5 or higher, the "`Id`" for
+    code:OpGroupNonUniformBroadcast must: be dynamically uniform within the
+    subgroup.
+    Otherwise, "`Id`" must: be a constant
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_shader_atomic_int64[]
+  * [[VUID-{refpage}-None-06278]]
+    <<features-shaderBufferInt64Atomics, pname:shaderBufferInt64Atomics>>
+    must: be enabled for 64-bit integer atomic operations to be supported on
+    a _Pointer_ with a {StorageClass} of code:StorageBuffer or code:Uniform
+  * [[VUID-{refpage}-None-06279]]
+    <<features-shaderSharedInt64Atomics, pname:shaderSharedInt64Atomics>>
+    must: be enabled for 64-bit integer atomic operations to be supported on
+    a _Pointer_ with a {StorageClass} of code:Workgroup
+endif::VK_KHR_shader_atomic_int64[]
+ifdef::VK_EXT_shader_atomic_float[]
+ifndef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-None-06280]]
+    <<features-shaderBufferFloat32Atomics,
+    pname:shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,
+    pname:shaderBufferFloat32AtomicAdd>>, or
+    <<features-shaderBufferFloat64Atomics,
+    pname:shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,
+    pname:shaderBufferFloat64AtomicAdd>> must: be enabled for floating-point
+    atomic operations to be supported on a _Pointer_ with a {StorageClass}
+    of code:StorageBuffer
+  * [[VUID-{refpage}-None-06281]]
+    <<features-shaderSharedFloat32Atomics,
+    pname:shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,
+    pname:shaderSharedFloat32AtomicAdd>>, or
+    <<features-shaderSharedFloat64Atomics,
+    pname:shaderSharedFloat64Atomics>>, or
+    <<features-shaderSharedFloat64AtomicAdd,
+    pname:shaderSharedFloat64AtomicAdd>> must: be enabled for floating-point
+    atomic operations to be supported on a _Pointer_ with a {StorageClass}
+    of code:Workgroup
+  * [[VUID-{refpage}-None-06282]]
+    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
+    or <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>> must: be enabled for 32-bit
+    floating-point atomic operations to be supported on a _Pointer_ with a
+    {StorageClass} of code:Image
+  * [[VUID-{refpage}-None-06283]]
+    <<features-sparseImageFloat32Atomics, pname:sparseImageFloat32Atomics>>
+    or <<features-sparseImageFloat32AtomicAdd,
+    pname:sparseImageFloat32AtomicAdd>> must: be enabled for 32-bit
+    floating-point atomics to be supported on sparse images
+endif::VK_EXT_shader_atomic_float2[]
+endif::VK_EXT_shader_atomic_float[]
+ifdef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-None-06284]]
+    <<features-shaderBufferFloat32Atomics,
+    pname:shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,
+    pname:shaderBufferFloat32AtomicAdd>>, or
+    <<features-shaderBufferFloat64Atomics,
+    pname:shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,
+    pname:shaderBufferFloat64AtomicAdd>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderBufferFloat16Atomics>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderBufferFloat16AtomicAdd>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderBufferFloat16AtomicMinMax>>, or
+    <<features-shaderBufferFloat32AtomicMinMax,
+    pname:shaderBufferFloat32AtomicMinMax>>, or
+    <<features-shaderBufferFloat64AtomicMinMax,
+    pname:shaderBufferFloat64AtomicMinMax>> must: be enabled for
+    floating-point atomic operations to be supported on a _Pointer_ with a
+    {StorageClass} of code:StorageBuffer
+  * [[VUID-{refpage}-None-06285]]
+    <<features-shaderSharedFloat32Atomics,
+    pname:shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,
+    pname:shaderSharedFloat32AtomicAdd>>, or
+    <<features-shaderSharedFloat64Atomics,
+    pname:shaderSharedFloat64Atomics>>, or
+    <<features-shaderSharedFloat64AtomicAdd,
+    pname:shaderSharedFloat64AtomicAdd>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderSharedFloat16Atomics>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderSharedFloat16AtomicAdd>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderSharedFloat16AtomicMinMax>>, or
+    <<features-shaderSharedFloat32AtomicMinMax,
+    pname:shaderSharedFloat32AtomicMinMax>>, or
+    <<features-shaderSharedFloat64AtomicMinMax,
+    pname:shaderSharedFloat64AtomicMinMax>> must: be enabled for
+    floating-point atomic operations to be supported on a _Pointer_ with a
+    {StorageClass} of code:Workgroup
+  * [[VUID-{refpage}-None-06286]]
+    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>,
+    or <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>>, or
+    <<features-shaderImageFloat32AtomicMinMax,
+    pname:shaderImageFloat32AtomicMinMax>> must: be enabled for 32-bit
+    floating-point atomic operations to be supported on a _Pointer_ with a
+    {StorageClass} of code:Image
+  * [[VUID-{refpage}-None-06287]]
+    <<features-sparseImageFloat32Atomics, pname:sparseImageFloat32Atomics>>,
+    or <<features-sparseImageFloat32AtomicAdd,
+    pname:sparseImageFloat32AtomicAdd>>, or
+    <<features-sparseImageFloat32AtomicMinMax,
+    pname:sparseImageFloat32AtomicMinMax>> must: be enabled for 32-bit
+    floating-point atomics to be supported on sparse images
+endif::VK_EXT_shader_atomic_float2[]
+ifdef::VK_EXT_shader_image_atomic_int64[]
+  * [[VUID-{refpage}-None-06288]]
+    <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>
+    must: be enabled for 64-bit integer atomic operations to be supported on
+    a _Pointer_ with a {StorageClass} of code:Image
+endif::VK_EXT_shader_image_atomic_int64[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+  * [[VUID-{refpage}-denormBehaviorIndependence-06289]]
+    If <<features-denormBehaviorIndependence,
+    pname:denormBehaviorIndependence>> is
+    ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the entry
+    point must: use the same denormals {ExecutionMode} for both 16-bit and
+    64-bit floating-point types
+  * [[VUID-{refpage}-denormBehaviorIndependence-06290]]
+    If <<features-denormBehaviorIndependence,
+    pname:denormBehaviorIndependence>> is
+    ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry point
+    must: use the same denormals {ExecutionMode} for all floating-point
+    types
+  * [[VUID-{refpage}-roundingModeIndependence-06291]]
+    If <<features-roundingModeIndependence, pname:roundingModeIndependence>>
+    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the
+    entry point must: use the same rounding {ExecutionMode} for both 16-bit
+    and 64-bit floating-point types
+  * [[VUID-{refpage}-roundingModeIndependence-06292]]
+    If <<features-roundingModeIndependence, pname:roundingModeIndependence>>
+    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry
+    point must: use the same rounding {ExecutionMode} for all floating-point
+    types
+  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat16-06293]]
+    If <<limits-shaderSignedZeroInfNanPreserveFloat16,
+    pname:shaderSignedZeroInfNanPreserveFloat16>> is ename:VK_FALSE, then
+    code:SignedZeroInfNanPreserve for 16-bit floating-point type must: not
+    be used
+  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat32-06294]]
+    If <<limits-shaderSignedZeroInfNanPreserveFloat32,
+    pname:shaderSignedZeroInfNanPreserveFloat32>> is ename:VK_FALSE, then
+    code:SignedZeroInfNanPreserve for 32-bit floating-point type must: not
+    be used
+  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat64-06295]]
+    If <<limits-shaderSignedZeroInfNanPreserveFloat64,
+    pname:shaderSignedZeroInfNanPreserveFloat64>> is ename:VK_FALSE, then
+    code:SignedZeroInfNanPreserve for 64-bit floating-point type must: not
+    be used
+  * [[VUID-{refpage}-shaderDenormPreserveFloat16-06296]]
+    If <<limits-shaderDenormPreserveFloat16,
+    pname:shaderDenormPreserveFloat16>> is ename:VK_FALSE, then
+    code:DenormPreserve for 16-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderDenormPreserveFloat32-06297]]
+    If <<limits-shaderDenormPreserveFloat32,
+    pname:shaderDenormPreserveFloat32>> is ename:VK_FALSE, then
+    code:DenormPreserve for 32-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderDenormPreserveFloat64-06298]]
+    If <<limits-shaderDenormPreserveFloat64,
+    pname:shaderDenormPreserveFloat64>> is ename:VK_FALSE, then
+    code:DenormPreserve for 64-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat16-06299]]
+    If <<limits-shaderDenormFlushToZeroFloat16,
+    pname:shaderDenormFlushToZeroFloat16>> is ename:VK_FALSE, then
+    code:DenormFlushToZero for 16-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat32-06300]]
+    If <<limits-shaderDenormFlushToZeroFloat32,
+    pname:shaderDenormFlushToZeroFloat32>> is ename:VK_FALSE, then
+    code:DenormFlushToZero for 32-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat64-06301]]
+    If <<limits-shaderDenormFlushToZeroFloat64,
+    pname:shaderDenormFlushToZeroFloat64>> is ename:VK_FALSE, then
+    code:DenormFlushToZero for 64-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTEFloat16-06302]]
+    If <<limits-shaderRoundingModeRTEFloat16,
+    pname:shaderRoundingModeRTEFloat16>> is ename:VK_FALSE, then
+    code:RoundingModeRTE for 16-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTEFloat32-06303]]
+    If <<limits-shaderRoundingModeRTEFloat32,
+    pname:shaderRoundingModeRTEFloat32>> is ename:VK_FALSE, then
+    code:RoundingModeRTE for 32-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTEFloat64-06304]]
+    If <<limits-shaderRoundingModeRTEFloat64,
+    pname:shaderRoundingModeRTEFloat64>> is ename:VK_FALSE, then
+    code:RoundingModeRTE for 64-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTZFloat16-06305]]
+    If <<limits-shaderRoundingModeRTZFloat16,
+    pname:shaderRoundingModeRTZFloat16>> is ename:VK_FALSE, then
+    code:RoundingModeRTZ for 16-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTZFloat32-06306]]
+    If <<limits-shaderRoundingModeRTZFloat32,
+    pname:shaderRoundingModeRTZFloat32>> is ename:VK_FALSE, then
+    code:RoundingModeRTZ for 32-bit floating-point type must: not be used
+  * [[VUID-{refpage}-shaderRoundingModeRTZFloat64-06307]]
+    If <<limits-shaderRoundingModeRTZFloat64,
+    pname:shaderRoundingModeRTZFloat64>> is ename:VK_FALSE, then
+    code:RoundingModeRTZ for 64-bit floating-point type must: not be used
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-Offset-06308]]
+    The code:Offset plus size of the type of each variable, in the output
+    interface of the entry point being compiled, decorated with
+    code:XfbBuffer must: not be greater than
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataSize
+  * [[VUID-{refpage}-XfbBuffer-06309]]
+    For any given code:XfbBuffer value, define the buffer data size to be
+    smallest number of bytes such that, for all outputs decorated with the
+    same code:XfbBuffer value, the size of the output interface variable
+    plus the code:Offset is less than or equal to the buffer data size.
+    For a given code:Stream, the sum of all the buffer data sizes for all
+    buffers writing to that stream the must: not exceed
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
+  * [[VUID-{refpage}-OpEmitStreamVertex-06310]]
+    The Stream value to code:OpEmitStreamVertex and
+    code:OpEndStreamPrimitive must: be less than
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-{refpage}-transformFeedbackStreamsLinesTriangles-06311]]
+    If the geometry shader emits to more than one vertex stream and
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
+    is ename:VK_FALSE, then {ExecutionMode} must: be code:OutputPoints
+  * [[VUID-{refpage}-Stream-06312]]
+    The stream number value to code:Stream must: be less than
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-{refpage}-XfbStride-06313]]
+    The XFB Stride value to code:XfbStride must: be less than or equal to
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataStride
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * [[VUID-{refpage}-PhysicalStorageBuffer64-06314]]
+    If the code:PhysicalStorageBuffer64 addressing model is enabled any load
+    or store through a physical pointer type must: be aligned to a multiple
+    of the size of the largest scalar type in the pointed-to type
+  * [[VUID-{refpage}-PhysicalStorageBuffer64-06315]]
+    If the code:PhysicalStorageBuffer64 addressing model is enabled the
+    pointer value of a memory access instruction must: be at least as
+    aligned as specified by the code:Aligned memory access operand
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_NV_cooperative_matrix[]
+  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06316]]
+    For code:OpTypeCooperativeMatrixNV, the component type, scope, number of
+    rows, and number of columns must: match one of the matrices in any of
+    the supported slink:VkCooperativeMatrixPropertiesNV
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06317]]
+    For code:OpCooperativeMatrixMulAddNV, the type of code:A must: have
+    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesNV::pname:KSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesNV::pname:AType
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06318]]
+    For code:OpCooperativeMatrixMulAddNV, the type of code:B must: have
+    slink:VkCooperativeMatrixPropertiesNV::pname:KSize rows and
+    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesNV::pname:BType
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06319]]
+    For code:OpCooperativeMatrixMulAddNV, the type of code:C must: have
+    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesNV::pname:CType
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06320]]
+    For code:OpCooperativeMatrixMulAddNV, the type of code:Result must: have
+    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesNV::pname:DType
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06321]]
+    For code:OpCooperativeMatrixMulAddNV, the type of code:A, code:B,
+    code:C, and code:Result must: all have a scope of pname:scope
+  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06322]]
+    code:OpTypeCooperativeMatrixNV and code:OpCooperativeMatrix*
+    instructions must: not be used in shader stages not included in
+    slink:VkPhysicalDeviceCooperativeMatrixPropertiesNV::pname:cooperativeMatrixSupportedStages
+endif::VK_NV_cooperative_matrix[]
+ifdef::VK_KHR_cooperative_matrix[]
+  * [[VUID-{refpage}-OpTypeCooperativeMatrixKHR-08974]]
+    For code:OpTypeCooperativeMatrixKHR, the component type, scope, number
+    of rows, and number of columns must: match one of the matrices in any of
+    the supported slink:VkCooperativeMatrixPropertiesKHR.
+  * [[VUID-{refpage}-MSize-08975]]
+    For code:OpCooperativeMatrixMulAddKHR, the type of code:A must: have
+    slink:VkCooperativeMatrixPropertiesKHR::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesKHR::pname:KSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesKHR::pname:AType.
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddKHR-08976]]
+    For code:OpCooperativeMatrixMulAddKHR, when the component type of code:A
+    is a signed integer type, the code:MatrixASignedComponents cooperative
+    matrix operand must: be present.
+  * [[VUID-{refpage}-KSize-08977]]
+    For code:OpCooperativeMatrixMulAddKHR, the type of code:B must: have
+    slink:VkCooperativeMatrixPropertiesKHR::pname:KSize rows and
+    slink:VkCooperativeMatrixPropertiesKHR::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesKHR::pname:BType.
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddKHR-08978]]
+    For code:OpCooperativeMatrixMulAddKHR, when the component type of code:B
+    is a signed integer type, the code:MatrixBSignedComponents cooperative
+    matrix operand must: be present.
+  * [[VUID-{refpage}-MSize-08979]]
+    For code:OpCooperativeMatrixMulAddKHR, the type of code:C must: have
+    slink:VkCooperativeMatrixPropertiesKHR::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesKHR::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesKHR::pname:CType.
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddKHR-08980]]
+    For code:OpCooperativeMatrixMulAddKHR, when the component type of code:C
+    is a signed integer type, the code:MatrixCSignedComponents cooperative
+    matrix operand must: be present.
+  * [[VUID-{refpage}-MSize-08981]]
+    For code:OpCooperativeMatrixMulAddKHR, the type of code:Result must:
+    have slink:VkCooperativeMatrixPropertiesKHR::pname:MSize rows and
+    slink:VkCooperativeMatrixPropertiesKHR::pname:NSize columns and have a
+    component type that matches
+    slink:VkCooperativeMatrixPropertiesKHR::pname:ResultType.
+  * [[VUID-{refpage}-OpCooperativeMatrixMulAddKHR-08982]]
+    For code:OpCooperativeMatrixMulAddKHR, when the component type of
+    code:Result is a signed integer type, the
+    code:MatrixResultSignedComponents cooperative matrix operand must: be
+    present.
+  * [[VUID-{refpage}-saturatingAccumulation-08983]]
+    For code:OpCooperativeMatrixMulAddKHR, the code:SaturatingAccumulation
+    cooperative matrix operand must: be present if and only if
+    slink:VkCooperativeMatrixPropertiesKHR::pname:saturatingAccumulation is
+    ename:VK_TRUE.
+  * [[VUID-{refpage}-scope-08984]]
+    For code:OpCooperativeMatrixMulAddKHR, the type of code:A, code:B,
+    code:C, and code:Result must: all have a scope of pname:scope.
+  * [[VUID-{refpage}-cooperativeMatrixSupportedStages-08985]]
+    code:OpTypeCooperativeMatrixKHR and code:OpCooperativeMatrix*
+    instructions must: not be used in shader stages not included in
+    slink:VkPhysicalDeviceCooperativeMatrixPropertiesKHR::pname:cooperativeMatrixSupportedStages.
+endif::VK_KHR_cooperative_matrix[]
+  * [[VUID-{refpage}-DescriptorSet-06323]]
+    code:DescriptorSet and code:Binding decorations must: obey the
+    constraints on {StorageClass}, type, and descriptor type described in
+    <<interfaces-resources-setandbinding,DescriptorSet and Binding
+    Assignment>>
+ifdef::VK_NV_cooperative_matrix[]
+  * [[VUID-{refpage}-OpCooperativeMatrixLoadNV-06324]]
+    For code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
+    instructions, the code:Pointer and code:Stride operands must: be aligned
+    to at least the lesser of 16 bytes or the natural alignment of a row or
+    column (depending on code:ColumnMajor) of the matrix (where the natural
+    alignment is the number of columns/rows multiplied by the component
+    size)
+endif::VK_NV_cooperative_matrix[]
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-{refpage}-MeshNV-07113]]
+    For mesh shaders using the code:MeshNV {ExecutionModel} the
+    code:OutputVertices code:OpExecutionMode must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices
+  * [[VUID-{refpage}-MeshNV-07114]]
+    For mesh shaders using the code:MeshNV {ExecutionModel} the
+    code:OutputPrimitivesNV code:OpExecutionMode must: be less than or equal
+    to
+    slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-MeshEXT-07115]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the
+    code:OutputVertices code:OpExecutionMode must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices
+  * [[VUID-{refpage}-MeshEXT-07332]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the "`Vertex
+    Count`" operand of code:OpSetMeshOutputsEXT must: be less than or equal
+    to code:OutputVertices code:OpExecutionMode
+  * [[VUID-{refpage}-MeshEXT-07116]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the
+    code:OutputPrimitivesEXT code:OpExecutionMode must: be less than or
+    equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives
+  * [[VUID-{refpage}-MeshEXT-07333]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the "`Primitive
+    Count`" operand of code:OpSetMeshOutputsEXT must: be less than or equal
+    to code:OutputPrimitivesEXT code:OpExecutionMode
+  * [[VUID-{refpage}-TaskEXT-07117]]
+    In task shaders using the code:TaskEXT {ExecutionModel}
+    code:OpEmitMeshTasksEXT must: be called exactly once under dynamically
+    uniform conditions
+  * [[VUID-{refpage}-MeshEXT-07118]]
+    In mesh shaders using the code:MeshEXT {ExecutionModel}
+    code:OpSetMeshOutputsEXT must: be called at most once under dynamically
+    uniform conditions
+  * [[VUID-{refpage}-TaskEXT-07291]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the pname:x size
+    in code:LocalSize or code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize[0]
+  * [[VUID-{refpage}-TaskEXT-07292]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the pname:y size
+    in code:LocalSize or code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize[1]
+  * [[VUID-{refpage}-TaskEXT-07293]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the pname:z size
+    in code:LocalSize or code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize[2]
+  * [[VUID-{refpage}-TaskEXT-07294]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the product of
+    pname:x size, pname:y size, and pname:z size in code:LocalSize or
+    code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations
+  * [[VUID-{refpage}-MeshEXT-07295]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the pname:x
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize[0]
+  * [[VUID-{refpage}-MeshEXT-07296]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the pname:y
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize[1]
+  * [[VUID-{refpage}-MeshEXT-07297]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the pname:z
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize[2]
+  * [[VUID-{refpage}-MeshEXT-07298]]
+    For mesh shaders using the code:MeshEXT {ExecutionModel} the product of
+    pname:x size, pname:y size, and pname:z size in code:LocalSize or
+    code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations
+  * [[VUID-{refpage}-TaskEXT-07299]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the value of the
+    "`Group Count X`" operand of code:OpEmitMeshTasksEXT must: be less than
+    or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[0]
+  * [[VUID-{refpage}-TaskEXT-07300]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the value of the
+    "`Group Count Y`" operand of code:OpEmitMeshTasksEXT must: be less than
+    or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[1]
+  * [[VUID-{refpage}-TaskEXT-07301]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the value of the
+    "`Group Count Z`" operand of code:OpEmitMeshTasksEXT must: be less than
+    or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[2]
+  * [[VUID-{refpage}-TaskEXT-07302]]
+    In task shaders using the code:TaskEXT {ExecutionModel} the product of
+    the "`Group Count`" operands of code:OpEmitMeshTasksEXT must: be less
+    than or equal to
+    slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount
+  * [[VUID-{refpage}-maxMeshSharedMemorySize-08754]]
+    The sum of size in bytes for variables and <<workgroup-padding,
+    padding>> in the code:Workgroup {StorageClass} in the code:MeshEXT
+    {ExecutionModel} must: be less than or equal to
+    <<limits-maxMeshSharedMemorySize, pname:maxMeshSharedMemorySize>>
+  * [[VUID-{refpage}-maxMeshPayloadAndSharedMemorySize-08755]]
+    The sum of size in bytes for variables and <<workgroup-padding,
+    padding>> in the code:TaskPayloadWorkgroupEXT or code:Workgroup
+    {StorageClass} in the code:MeshEXT {ExecutionModel} must: be less than
+    or equal to <<limits-maxMeshPayloadAndSharedMemorySize,
+    pname:maxMeshPayloadAndSharedMemorySize>>
+  * [[VUID-{refpage}-maxMeshOutputMemorySize-08756]]
+    The sum of size in bytes for variables in the code:Output {StorageClass}
+    in the code:MeshEXT {ExecutionModel} must: be less than or equal to
+    <<limits-maxMeshOutputMemorySize, pname:maxMeshOutputMemorySize>>
+    according to the formula in <<mesh-output, Mesh Shader Output>>
+  * [[VUID-{refpage}-maxMeshPayloadAndOutputMemorySize-08757]]
+    The sum of size in bytes for variables and in the
+    code:TaskPayloadWorkgroupEXT or code:Output {StorageClass} in the
+    code:MeshEXT {ExecutionModel} must: be less than or equal to
+    <<limits-maxMeshPayloadAndOutputMemorySize,
+    pname:maxMeshPayloadAndOutputMemorySize>> according to the formula in
+    <<mesh-output, Mesh Shader Output>>
+  * [[VUID-{refpage}-maxTaskPayloadSize-08758]]
+    The sum of size in bytes for variables and in the
+    code:TaskPayloadWorkgroupEXT {StorageClass} in the code:TaskEXT
+    {ExecutionModel} must: be less than or equal to
+    <<limits-maxTaskPayloadSize, pname:maxTaskPayloadSize>>
+  * [[VUID-{refpage}-maxTaskSharedMemorySize-08759]]
+    The sum of size in bytes for variables and <<workgroup-padding,
+    padding>> in the code:Workgroup {StorageClass} in the code:TaskEXT
+    {ExecutionModel} must: be less than or equal to
+    <<limits-maxTaskSharedMemorySize, pname:maxTaskSharedMemorySize>>
+  * [[VUID-{refpage}-maxTaskPayloadAndSharedMemorySize-08760]]
+    The sum of size in bytes for variables and <<workgroup-padding,
+    padding>> in the code:TaskPayloadWorkgroupEXT or code:Workgroup
+    {StorageClass} in the code:TaskEXT {ExecutionModel} must: be less than
+    or equal to <<limits-maxTaskPayloadAndSharedMemorySize,
+    pname:maxTaskPayloadAndSharedMemorySize>>
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_KHR_cooperative_matrix[]
+  * [[VUID-{refpage}-OpCooperativeMatrixLoadKHR-08986]]
+    For code:OpCooperativeMatrixLoadKHR and code:OpCooperativeMatrixStoreKHR
+    instructions, the code:Pointer and code:Stride operands must: be aligned
+    to at least the lesser of 16 bytes or the natural alignment of a row or
+    column (depending on code:ColumnMajor) of the matrix (where the natural
+    alignment is the number of columns/rows multiplied by the component
+    size).
+endif::VK_KHR_cooperative_matrix[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-{refpage}-shaderSampleRateInterpolationFunctions-06325]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:shaderSampleRateInterpolationFunctions
+    is ename:VK_FALSE, then `GLSL.std.450` fragment interpolation functions
+    are not supported by the implementation and code:OpCapability must: not
+    be set to code:InterpolationFunction
+  * [[VUID-{refpage}-tessellationShader-06326]]
+    If <<features-tessellationShader, pname:tessellationShader>> is enabled,
+    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
+    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
+    code:IsoLines
+  * [[VUID-{refpage}-tessellationShader-06327]]
+    If <<features-tessellationShader, pname:tessellationShader>> is enabled,
+    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
+    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
+    code:PointMode
+endif::VK_KHR_portability_subset[]
+ifdef::VK_KHR_8bit_storage[]
+  * [[VUID-{refpage}-storageBuffer8BitAccess-06328]]
+    If <<features-storageBuffer8BitAccess, pname:storageBuffer8BitAccess>>
+    is ename:VK_FALSE, then objects containing an 8-bit integer element
+    must: not have {StorageClass} of code:StorageBuffer,
+    code:ShaderRecordBufferKHR, or code:PhysicalStorageBuffer
+  * [[VUID-{refpage}-uniformAndStorageBuffer8BitAccess-06329]]
+    If <<features-uniformAndStorageBuffer8BitAccess,
+    pname:uniformAndStorageBuffer8BitAccess>> is ename:VK_FALSE, then
+    objects in the code:Uniform {StorageClass} with the code:Block
+    decoration must: not have an 8-bit integer member
+  * [[VUID-{refpage}-storagePushConstant8-06330]]
+    If <<features-storagePushConstant8, pname:storagePushConstant8>> is
+    ename:VK_FALSE, then objects containing an 8-bit integer element must:
+    not have {StorageClass} of code:PushConstant
+endif::VK_KHR_8bit_storage[]
+ifdef::VK_KHR_16bit_storage[]
+  * [[VUID-{refpage}-storageBuffer16BitAccess-06331]]
+    If <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>
+    is ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
+    floating-point elements must: not have {StorageClass} of
+    code:StorageBuffer, code:ShaderRecordBufferKHR, or
+    code:PhysicalStorageBuffer
+  * [[VUID-{refpage}-uniformAndStorageBuffer16BitAccess-06332]]
+    If <<features-uniformAndStorageBuffer16BitAccess,
+    pname:uniformAndStorageBuffer16BitAccess>> is ename:VK_FALSE, then
+    objects in the code:Uniform {StorageClass} with the code:Block
+    decoration must: not have 16-bit integer or 16-bit floating-point
+    members
+  * [[VUID-{refpage}-storagePushConstant16-06333]]
+    If <<features-storagePushConstant16, pname:storagePushConstant16>> is
+    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
+    floating-point elements must: not have {StorageClass} of
+    code:PushConstant
+  * [[VUID-{refpage}-storageInputOutput16-06334]]
+    If <<features-storageInputOutput16, pname:storageInputOutput16>> is
+    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
+    floating-point elements must: not have {StorageClass} of code:Input or
+    code:Output
+endif::VK_KHR_16bit_storage[]
+ifdef::VK_EXT_shader_atomic_float[]
+ifndef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-None-06335]]
+    <<features-shaderBufferFloat32Atomics,
+    pname:shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,
+    pname:shaderBufferFloat32AtomicAdd>>, or
+    <<features-shaderSharedFloat32Atomics,
+    pname:shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,
+    pname:shaderSharedFloat32AtomicAdd>>, or
+    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>,
+    or <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>> must: be enabled for 32-bit floating
+    point atomic operations
+  * [[VUID-{refpage}-None-06336]]
+    <<features-shaderBufferFloat64Atomics,
+    pname:shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,
+    pname:shaderBufferFloat64AtomicAdd>>, or
+    <<features-shaderSharedFloat64Atomics,
+    pname:shaderSharedFloat64Atomics>>, or
+    <<features-shaderSharedFloat64AtomicAdd,
+    pname:shaderSharedFloat64AtomicAdd>> must: be enabled for 64-bit
+    floating point atomic operations
+endif::VK_EXT_shader_atomic_float2[]
+endif::VK_EXT_shader_atomic_float[]
+ifdef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-None-06337]]
+    <<features-shaderBufferFloat16Atomics,
+    pname:shaderBufferFloat16Atomics>>, or
+    <<features-shaderBufferFloat16AtomicAdd,
+    pname:shaderBufferFloat16AtomicAdd>>, or
+    <<features-shaderBufferFloat16AtomicMinMax,
+    pname:shaderBufferFloat16AtomicMinMax>>, or
+    <<features-shaderSharedFloat16Atomics,
+    pname:shaderSharedFloat16Atomics>>, or
+    <<features-shaderSharedFloat16AtomicAdd,
+    pname:shaderSharedFloat16AtomicAdd>>, or
+    <<features-shaderSharedFloat16AtomicMinMax,
+    pname:shaderSharedFloat16AtomicMinMax>> must: be enabled for 16-bit
+    floating point atomic operations
+  * [[VUID-{refpage}-None-06338]]
+    <<features-shaderBufferFloat32Atomics,
+    pname:shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,
+    pname:shaderBufferFloat32AtomicAdd>>, or
+    <<features-shaderSharedFloat32Atomics,
+    pname:shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,
+    pname:shaderSharedFloat32AtomicAdd>>, or
+    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>,
+    or <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>> or
+    <<features-shaderBufferFloat32AtomicMinMax,
+    pname:shaderBufferFloat32AtomicMinMax>>, or
+    <<features-shaderSharedFloat32AtomicMinMax,
+    pname:shaderSharedFloat32AtomicMinMax>>, or
+    <<features-shaderImageFloat32AtomicMinMax,
+    pname:shaderImageFloat32AtomicMinMax>> must: be enabled for 32-bit
+    floating point atomic operations
+  * [[VUID-{refpage}-None-06339]]
+    <<features-shaderBufferFloat64Atomics,
+    pname:shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,
+    pname:shaderBufferFloat64AtomicAdd>>, or
+    <<features-shaderSharedFloat64Atomics,
+    pname:shaderSharedFloat64Atomics>>, or
+    <<features-shaderSharedFloat64AtomicAdd,
+    pname:shaderSharedFloat64AtomicAdd>>, or
+    <<features-shaderBufferFloat64AtomicMinMax,
+    pname:shaderBufferFloat64AtomicMinMax>>, or
+    <<features-shaderSharedFloat64AtomicMinMax,
+    pname:shaderSharedFloat64AtomicMinMax>>, must: be enabled for 64-bit
+    floating point atomic operations
+endif::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-NonWritable-06340]]
+    If <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>>
+    is not enabled, then all storage image, storage texel buffer, and
+    storage buffer variables in the fragment stage must: be decorated with
+    the code:NonWritable decoration
+  * [[VUID-{refpage}-NonWritable-06341]]
+    If <<features-vertexPipelineStoresAndAtomics,
+    pname:vertexPipelineStoresAndAtomics>> is not enabled, then all storage
+    image, storage texel buffer, and storage buffer variables in the vertex,
+    tessellation, and geometry stages must: be decorated with the
+    code:NonWritable decoration
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-OpAtomic-05091]]
+    If <<features-shaderAtomicInstructions, shaderAtomicInstructions>> is
+    not enabled, the SPIR-V Atomic Instructions listed in 3.37.18
+    (code:OpAtomic*) must: not be used <<SCID-1>>
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-None-06342]]
+    If <<limits-subgroupQuadOperationsInAllStages,
+    pname:subgroupQuadOperationsInAllStages>> is ename:VK_FALSE, then
+    <<features-subgroup-quad, quad subgroup operations>> must: not be used
+    except for in fragment and compute stages
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-06343]]
+    <<shaders-group-operations, Group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>> must: not be used if the
+    shader stage is not in <<limits-subgroupSupportedStages,
+    pname:subgroupSupportedStages>>
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-Offset-06344]]
+    The first element of the code:Offset operand of code:InterpolateAtOffset
+    must: be greater than or equal to: +
+    [eq]#frag~width~ {times} <<limits-minInterpolationOffset,
+    pname:minInterpolationOffset>># +
+    where [eq]#frag~width~# is the width of the current fragment in pixels
+  * [[VUID-{refpage}-Offset-06345]]
+    The first element of the code:Offset operand of code:InterpolateAtOffset
+    must: be less than or equal to +
+    [eq]#frag~width~ {times} (<<limits-maxInterpolationOffset,
+    pname:maxInterpolationOffset>> {plus} ULP ) - ULP# +
+    where [eq]#frag~width~# is the width of the current fragment in pixels
+    and [eq]#ULP = 1 / 2^<<limits-subPixelInterpolationOffsetBits,
+    pname:subPixelInterpolationOffsetBits>>^#
+  * [[VUID-{refpage}-Offset-06346]]
+    The second element of the code:Offset operand of
+    code:InterpolateAtOffset must: be greater than or equal to +
+    [eq]#frag~height~ {times} <<limits-minInterpolationOffset,
+    pname:minInterpolationOffset>># +
+    where [eq]#frag~height~# is the height of the current fragment in pixels
+  * [[VUID-{refpage}-Offset-06347]]
+    The second element of the code:Offset operand of
+    code:InterpolateAtOffset must: be less than or equal to +
+    [eq]#frag~height~ {times} (<<limits-maxInterpolationOffset,
+    pname:maxInterpolationOffset>> {plus} ULP ) - ULP# +
+    where [eq]#frag~height~# is the height of the current fragment in pixels
+    and [eq]#ULP = 1 / 2^<<limits-subPixelInterpolationOffsetBits,
+    pname:subPixelInterpolationOffsetBits>>^#.
+
+ifdef::VK_KHR_ray_query[]
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06348]]
+    For code:OpRayQueryInitializeKHR instructions, all components of the
+    code:RayOrigin and code:RayDirection operands must: be finite
+    floating-point values
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06349]]
+    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin and
+    code:RayTmax operands must: be non-negative floating-point values
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06350]]
+    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin operand
+    must: be less than or equal to the code:RayTmax operand
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06351]]
+    For code:OpRayQueryInitializeKHR instructions, code:RayOrigin,
+    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
+    contain NaNs
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06352]]
+    For code:OpRayQueryInitializeKHR instructions, code:Acceleration
+    code:Structure must: be an acceleration structure built as a
+    <<acceleration-structure-top-level, top-level acceleration structure>>
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06889]]
+    For code:OpRayQueryInitializeKHR instructions, the code:Rayflags operand
+    must: not contain both code:SkipTrianglesKHR and code:SkipAABBsKHR
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06890]]
+    For code:OpRayQueryInitializeKHR instructions, the code:Rayflags operand
+    must: not contain more than one of code:SkipTrianglesKHR,
+    code:CullBackFacingTrianglesKHR, and code:CullFrontFacingTrianglesKHR
+  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06891]]
+    For code:OpRayQueryInitializeKHR instructions, the code:Rayflags operand
+    must: not contain more than one of code:OpaqueKHR, code:NoOpaqueKHR,
+    code:CullOpaqueKHR, and code:CullNoOpaqueKHR
+  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06353]]
+    For code:OpRayQueryGenerateIntersectionKHR instructions, code:Hit code:T
+    must: satisfy the condition [eq]##code:RayTmin {leq} code:Hit code:T
+    {leq} code:RayTmax##, where code:RayTmin is equal to the value returned
+    by code:OpRayQueryGetRayTMinKHR with the same ray query object, and
+    code:RayTmax is equal to the value of code:OpRayQueryGetIntersectionTKHR
+    for the current committed intersection with the same ray query object
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06354]]
+    For code:OpRayQueryGenerateIntersectionKHR instructions,
+    code:Acceleration code:Structure must: not be built with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_KHR_ray_tracing_position_fetch[]
+  * [[VUID-{refpage}-flags-08761]]
+    For code:OpRayQueryGetIntersectionTriangleVertexPositionsKHR
+    instructions, code:Acceleration code:Structure must: have been built
+    with ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR in
+    pname:flags
+endif::VK_KHR_ray_tracing_position_fetch[]
+endif::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-{refpage}-OpTraceRayKHR-06355]]
+    For code:OpTraceRayKHR instructions, all components of the
+    code:RayOrigin and code:RayDirection operands must: be finite
+    floating-point values
+  * [[VUID-{refpage}-OpTraceRayKHR-06356]]
+    For code:OpTraceRayKHR instructions, the code:RayTmin and code:RayTmax
+    operands must: be non-negative floating-point values
+  * [[VUID-{refpage}-OpTraceRayKHR-06552]]
+    For code:OpTraceRayKHR instructions, the code:Rayflags operand must: not
+    contain both code:SkipTrianglesKHR and code:SkipAABBsKHR
+  * [[VUID-{refpage}-OpTraceRayKHR-06892]]
+    For code:OpTraceRayKHR instructions, the code:Rayflags operand must: not
+    contain more than one of code:SkipTrianglesKHR,
+    code:CullBackFacingTrianglesKHR, and code:CullFrontFacingTrianglesKHR
+  * [[VUID-{refpage}-OpTraceRayKHR-06893]]
+    For code:OpTraceRayKHR instructions, the code:Rayflags operand must: not
+    contain more than one of code:OpaqueKHR, code:NoOpaqueKHR,
+    code:CullOpaqueKHR, and code:CullNoOpaqueKHR
+  * [[VUID-{refpage}-OpTraceRayKHR-06553]]
+    For code:OpTraceRayKHR instructions, if the code:Rayflags operand
+    contains code:SkipTrianglesKHR, the pipeline must: not have been created
+    with ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR set
+  * [[VUID-{refpage}-OpTraceRayKHR-06554]]
+    For code:OpTraceRayKHR instructions, if the code:Rayflags operand
+    contains code:SkipAABBsKHR, the pipeline must: not have been created
+    with ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR set
+  * [[VUID-{refpage}-OpTraceRayKHR-06357]]
+    For code:OpTraceRayKHR instructions, the code:RayTmin operand must: be
+    less than or equal to the code:RayTmax operand
+  * [[VUID-{refpage}-OpTraceRayKHR-06358]]
+    For code:OpTraceRayKHR instructions, code:RayOrigin, code:RayDirection,
+    code:RayTmin, and code:RayTmax operands must: not contain NaNs
+  * [[VUID-{refpage}-OpTraceRayKHR-06359]]
+    For code:OpTraceRayKHR instructions, code:Acceleration code:Structure
+    must: be an acceleration structure built as a
+    <<acceleration-structure-top-level, top-level acceleration structure>>
+  * [[VUID-{refpage}-OpReportIntersectionKHR-06998]]
+    The value of the "`Hit Kind`" operand of code:OpReportIntersectionKHR
+    must: be in the range [eq]#[0,127]#
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-{refpage}-OpTraceRayKHR-06360]]
+    For code:OpTraceRayKHR instructions, if code:Acceleration code:Structure
+    was built with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in
+    pname:flags, the pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06361]]
+    For code:OpTraceRayMotionNV instructions, all components of the
+    code:RayOrigin and code:RayDirection operands must: be finite
+    floating-point values
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06362]]
+    For code:OpTraceRayMotionNV instructions, the code:RayTmin and
+    code:RayTmax operands must: be non-negative floating-point values
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06363]]
+    For code:OpTraceRayMotionNV instructions, the code:RayTmin operand must:
+    be less than or equal to the code:RayTmax operand
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06364]]
+    For code:OpTraceRayMotionNV instructions, code:RayOrigin,
+    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
+    contain NaNs
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06365]]
+    For code:OpTraceRayMotionNV instructions, code:Acceleration
+    code:Structure must: be an acceleration structure built as a
+    <<acceleration-structure-top-level, top-level acceleration structure>>
+    with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06366]]
+    For code:OpTraceRayMotionNV instructions the code:time operand must: be
+    between 0.0 and 1.0
+  * [[VUID-{refpage}-OpTraceRayMotionNV-06367]]
+    For code:OpTraceRayMotionNV instructions the pipeline must: have been
+    created with ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+    set
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_NV_ray_tracing_invocation_reorder[]
+  * [[VUID-{refpage}-OpHitObjectTraceRayMotionNV-07704]]
+    For code:OpHitObjectTraceRayMotionNV instructions, if code:Acceleration
+    code:Structure was built with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags, the
+    pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07705]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, all components of the code:RayOrigin and code:RayDirection
+    operands must: be finite floating-point values
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07706]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, the code:RayTmin and code:RayTmax operands must: be
+    non-negative floating-point values
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07707]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, the code:RayTmin operand must: be less than or equal to
+    the code:RayTmax operand
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07708]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, code:RayOrigin, code:RayDirection, code:RayTmin, and
+    code:RayTmax operands must: not contain NaNs
+  * [[VUID-{refpage}-OpHitObjectTraceRayMotionNV-07709]]
+    For code:OpHitObjectTraceRayMotionNV instructions, code:Acceleration
+    code:Structure must: be an acceleration structure built as a
+    <<acceleration-structure-top-level, top-level acceleration structure>>
+    with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07710]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions the code:time operand must: be between 0.0 and 1.0
+  * [[VUID-{refpage}-OpHitObjectTraceRayMotionNV-07711]]
+    For code:OpHitObjectTraceRayMotionNV instructions the pipeline must:
+    have been created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07712]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, the code:Rayflags operand must: not contain both
+    code:SkipTrianglesKHR and code:SkipAABBsKHR
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07713]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, the code:Rayflags operand must: not contain more than one
+    of code:SkipTrianglesKHR, code:CullBackFacingTrianglesKHR, and
+    code:CullFrontFacingTrianglesKHR
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07714]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, the code:Rayflags operand must: not contain more than one
+    of code:OpaqueKHR, code:NoOpaqueKHR, code:CullOpaqueKHR, and
+    code:CullNoOpaqueKHR
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07715]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, if the code:Rayflags operand contains
+    code:SkipTrianglesKHR, the pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR set
+  * [[VUID-{refpage}-OpHitObjectTraceRayNV-07716]]
+    For code:OpHitObjectTraceRayNV and code:OpHitObjectTraceRayMotionNV
+    instructions, if the code:Rayflags operand contains code:SkipAABBsKHR,
+    the pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR set
+endif::VK_NV_ray_tracing_invocation_reorder[]
+  * [[VUID-{refpage}-x-06429]]
+    In compute shaders using the code:GLCompute {ExecutionModel} the pname:x
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to slink:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]
+  * [[VUID-{refpage}-y-06430]]
+    In compute shaders using the code:GLCompute {ExecutionModel} the pname:y
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to slink:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]
+  * [[VUID-{refpage}-z-06431]]
+    In compute shaders using the code:GLCompute {ExecutionModel} the pname:z
+    size in code:LocalSize or code:LocalSizeId must: be less than or equal
+    to slink:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]
+  * [[VUID-{refpage}-x-06432]]
+    In compute shaders using the code:GLCompute {ExecutionModel} the product
+    of pname:x size, pname:y size, and pname:z size in code:LocalSize or
+    code:LocalSizeId must: be less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupInvocations
+ifndef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-LocalSizeId-06433]]
+    The {ExecutionMode} code:LocalSizeId must: not be used
+  * [[VUID-{refpage}-OpTypeVector-06816]]
+    Any code:OpTypeVector output interface variables must: not have a higher
+    code:Component code:Count than a matching code:OpTypeVector input
+    interface variable
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-LocalSizeId-06434]]
+    If {ExecutionMode} code:LocalSizeId is used, <<features-maintenance4,
+    pname:maintenance4>> must: be enabled
+  * [[VUID-{refpage}-maintenance4-06817]]
+    If <<features-maintenance4, pname:maintenance4>> is not enabled, any
+    code:OpTypeVector output interface variables must: not have a higher
+    code:Component code:Count than a matching code:OpTypeVector input
+    interface variable
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-OpEntryPoint-08743]]
+    Any <<interfaces-iointerfaces-user,user-defined variables>> shared
+    between the code:OpEntryPoint of two shader stages, and declared with
+    code:Input as its {StorageClass} for the subsequent shader stage, must:
+    have all code:Location slots and code:Component words declared in the
+    preceding shader stage's code:OpEntryPoint with code:Output as the
+    {StorageClass}
+  * [[VUID-{refpage}-OpEntryPoint-07754]]
+    Any <<interfaces-iointerfaces-user,user-defined variables>> between the
+    code:OpEntryPoint of two shader stages must: have the same type and
+    width for each code:Component
+  * [[VUID-{refpage}-OpVariable-08746]]
+    Any code:OpVariable, code:Block-decorated code:OpTypeStruct, or
+    code:Block-decorated code:OpTypeStruct members shared between the
+    code:OpEntryPoint of two shader stages must: have matching decorations
+    as defined in <<interfaces-iointerfaces-matching,interface matching>>
+  * [[VUID-{refpage}-Workgroup-06530]]
+    The sum of size in bytes for variables and <<workgroup-padding,
+    padding>> in the code:Workgroup {StorageClass} in the code:GLCompute
+    {ExecutionModel} must: be less than or equal to
+    <<limits-maxComputeSharedMemorySize, pname:maxComputeSharedMemorySize>>
+ifdef::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+  * [[VUID-{refpage}-shaderZeroInitializeWorkgroupMemory-06372]]
+    If <<features-shaderZeroInitializeWorkgroupMemory,
+    pname:shaderZeroInitializeWorkgroupMemory>> is not enabled, any
+    code:OpVariable with code:Workgroup as its {StorageClass} must: not have
+    an code:Initializer operand
+endif::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+ifndef::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+  * [[VUID-{refpage}-OpVariable-06373]]
+    Any code:OpVariable with code:Workgroup as its {StorageClass} must: not
+    have an code:Initializer operand
+endif::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+  * [[VUID-{refpage}-OpImage-06376]]
+    If an code:OpImage*Gather operation has an image operand of code:Offset,
+    code:ConstOffset, or code:ConstOffsets the offset value must: be greater
+    than or equal to <<limits-minTexelGatherOffset,
+    pname:minTexelGatherOffset>>
+  * [[VUID-{refpage}-OpImage-06377]]
+    If an code:OpImage*Gather operation has an image operand of code:Offset,
+    code:ConstOffset, or code:ConstOffsets the offset value must: be less
+    than or equal to <<limits-maxTexelGatherOffset,
+    pname:maxTexelGatherOffset>>
+  * [[VUID-{refpage}-OpImageSample-06435]]
+    If an code:OpImageSample* or code:OpImageFetch* operation has an image
+    operand of code:ConstOffset then the offset value must: be greater than
+    or equal to <<limits-minTexelOffset, pname:minTexelOffset>>
+  * [[VUID-{refpage}-OpImageSample-06436]]
+    If an code:OpImageSample* or code:OpImageFetch* operation has an image
+    operand of code:ConstOffset then the offset value must: be less than or
+    equal to <<limits-maxTexelOffset, pname:maxTexelOffset>>
+  * [[VUID-{refpage}-samples-08725]]
+    If an code:OpTypeImage has an code:MS operand 0, its bound image must:
+    have been created with slink:VkImageCreateInfo::pname:samples as
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-samples-08726]]
+    If an code:OpTypeImage has an code:MS operand 1, its bound image must:
+    not have been created with slink:VkImageCreateInfo::pname:samples as
+    ename:VK_SAMPLE_COUNT_1_BIT
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+  * [[VUID-{refpage}-SampleRateShading-06378]]
+    If the subpass description contains
+    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the SPIR-V
+    fragment shader Capability code:SampleRateShading must: not be enabled
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
+  * [[VUID-{refpage}-SubgroupUniformControlFlowKHR-06379]]
+    The {ExecutionMode} code:SubgroupUniformControlFlowKHR must: not be
+    applied to an entry point unless
+    <<features-shaderSubgroupUniformControlFlow,
+    pname:shaderSubgroupUniformControlFlow>> is enabled and the
+    corresponding shader stage bit is set in subgroup
+    <<limits-subgroup-supportedStages, pname:supportedStages>> and the entry
+    point does not execute any <<ray-tracing-repack,_invocation repack
+    instructions_>>
+endif::VK_KHR_shader_subgroup_uniform_control_flow[]
+ifdef::VK_AMD_shader_early_and_late_fragment_tests[]
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06767]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:EarlyAndLateFragmentTestsEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06768]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> feature is not enabled, the
+    code:StencilRefUnchangedFrontEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06769]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:StencilRefUnchangedBackEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06770]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:StencilRefGreaterFrontEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06771]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:StencilRefGreaterBackEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06772]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:StencilRefLessFrontEXT {ExecutionMode} must: not be used
+  * [[VUID-{refpage}-shaderEarlyAndLateFragmentTests-06773]]
+    If <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>> is not enabled, the
+    code:StencilRefLessBackEXT {ExecutionMode} must: not be used
+endif::VK_AMD_shader_early_and_late_fragment_tests[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06979]]
+    If an code:OpImageWeightedSampleQCOM operation is used, then the
+    code:Texture code:Sampled code:Image and code:Weight code:Image
+    parameters must: both be _dynamically uniform_ for the quad
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06980]]
+    If an code:OpImageWeightedSampleQCOM operation is used, then the
+    code:Weight code:Image parameter must: be of {StorageClass}
+    code:UniformConstant and type code:OpTypeImage with code:Depth=0,
+    code:Dim=code:2D, code:Arrayed=1, code:MS=0, and code:Sampled=1
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06981]]
+    If an code:OpImageWeightedSampleQCOM operation is used, then the
+    code:Weight code:Image parameter must: be decorated with
+    code:WeightTextureQCOM
+  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06982]]
+    If an code:OpImageBlockMatchSADQCOM or code:OpImageBlockMatchSSDQCOM
+    operation is used, then the code:target code:sampled code:image,
+    code:reference code:sampled code:image, and code:Block code:Size
+    parameters must: both be _dynamically uniform_ for the quad
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06983]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then code:target code:sampled code:image and
+    code:reference code:sampled code:image parameters must: be of storage
+    class code:UniformConstant and type code:OpTypeImage with code:Depth=0,
+    code:Dim=code:2D, code:Arrayed=0, code:MS=0, and code:Sampled=1
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06984]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then the code:target code:sampled code:image and
+    code:reference code:sampled code:image parameters must: be decorated
+    with code:BlockMatchTextureQCOM
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06985]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then code:target code:sampled code:image and
+    code:reference code:sampled code:image parameters must: have been
+    created using an identical sampler object
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06986]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then code:target code:sampled code:image and
+    code:reference code:sampled code:image parameters must: have been
+    created with a sampler object with pname:unnormalizedCoordinates equal
+    to ename:VK_TRUE
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06987]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then code:target code:sampled code:image and
+    code:reference code:sampled code:image parameters must: have been
+    created with a sampler object with pname:unnormalizedCoordinates equal
+    to ename:VK_TRUE
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06988]]
+    If an code:OpImageBlockMatchSSDQCOM or code:OpImageBlockMatchSADQCOM
+    operation is used, then code:Block code:Size less than or equal to
+    <<limits-blockmatch-maxblocksize, pname:maxBlockMatchRegion>>
+  * [[VUID-{refpage}-OpImageBoxFilterQCOM-06989]]
+    If an code:OpImageBoxFilterQCOM operation is used, then code:Box
+    code:Size.y must: be equal to or greater than 1.0 and less than or equal
+    to <<limits-boxfilter-maxblocksize,
+    pname:maxBoxFilterBlockSize>>.code:height
+  * [[VUID-{refpage}-OpImageBoxFilterQCOM-06990]]
+    If an code:OpImageBoxFilterQCOM operation is used, then code:Sampled
+    code:Texture code:Image and code:Box code:Size parameters must: be
+    _dynamically uniform_
+endif::VK_QCOM_image_processing[]
+  * [[VUID-{refpage}-OpEntryPoint-08727]]
+    Each code:OpEntryPoint must: not have more than one variable decorated
+    with code:InputAttachmentIndex per image aspect of the attachment image
+    bound to it, either explicitly or implicitly as described by
+    <<interfaces-inputattachment, input attachment interface>>
+ifdef::VK_EXT_shader_tile_image[]
+  * [[VUID-{refpage}-shaderTileImageColorReadAccess-08728]]
+    If <<features-shaderTileImageColorReadAccess,
+    pname:shaderTileImageColorReadAccess>> is not enabled,
+    code:OpColorAttachmentReadEXT operation must: not be used
+  * [[VUID-{refpage}-shaderTileImageDepthReadAccess-08729]]
+    If <<features-shaderTileImageDepthReadAccess,
+    pname:shaderTileImageDepthReadAccess>> is not enabled,
+    code:OpDepthAttachmentReadEXT operation must: not be used
+  * [[VUID-{refpage}-shaderTileImageStencilReadAccess-08730]]
+    If <<features-shaderTileImageStencilReadAccess,
+    pname:shaderTileImageStencilReadAccess>> is not enabled,
+    code:OpStencilAttachmentReadEXT operation must: not be used
+  * [[VUID-{refpage}-minSampleShading-08731]]
+    If <<primsrast-sampleshading, sample shading>> is enabled and
+    pname:minSampleShading is 1.0, the code:sample operand of any
+    code:OpColorAttachmentReadEXT, code:OpDepthAttachmentReadEXT, or
+    code:OpStencilAttachmentReadEXT operation must: evaluate to the value of
+    the <<primsrast-multisampling-coverage-mask, coverage index>> for any
+    given fragment invocation
+  * [[VUID-{refpage}-minSampleShading-08732]]
+    If <<primsrast-sampleshading, sample shading>> is enabled and any of the
+    code:OpColorAttachmentReadEXT, code:OpDepthAttachmentReadEXT, or
+    code:OpStencilAttachmentReadEXT operations are used, then
+    pname:minSampleShading must: be 1.0
+endif::VK_EXT_shader_tile_image[]
+  * [[VUID-{refpage}-MeshEXT-09218]]
+    In mesh shaders using the code:MeshEXT or code:MeshNV {ExecutionModel}
+    and the code:OutputPoints {ExecutionMode},
+ifdef::VK_KHR_maintenance5[]
+    if <<features-maintenance5, pname:maintenance5>> is not enabled, and
+endif::VK_KHR_maintenance5[]
+    if the number of output points is greater than 0, a code:PointSize
+    decorated variable must: be written to for each output point
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-maintenance5-09190]]
+    If <<features-maintenance5, pname:maintenance5>> is enabled and a
+    code:PointSize decorated variable is written to, all execution paths
+    must: write to a code:PointSize decorated variable
+endif::VK_KHR_maintenance5[]
+ifdef::VK_AMDX_shader_enqueue[]
+  * [[VUID-{refpage}-ShaderEnqueueAMDX-09191]]
+    The code:ShaderEnqueueAMDX capability must: only be used in shaders with
+    the code:GLCompute execution model
+  * [[VUID-{refpage}-NodePayloadAMDX-09192]]
+    Variables in the code:NodePayloadAMDX storage class must: only be
+    declared in the code:GLCompute execution model
+  * [[VUID-{refpage}-maxExecutionGraphShaderPayloadSize-09193]]
+    Variables declared in the code:NodePayloadAMDX storage class must: not
+    be larger than the <<limits-maxExecutionGraphShaderPayloadSize,
+    pname:maxExecutionGraphShaderPayloadSize>> limit
+  * [[VUID-{refpage}-maxExecutionGraphShaderPayloadSize-09194]]
+    Variables declared in the code:NodeOutputPayloadAMDX storage class must:
+    not be larger than the <<limits-maxExecutionGraphShaderPayloadSize,
+    pname:maxExecutionGraphShaderPayloadSize>> limit
+  * [[VUID-{refpage}-maxExecutionGraphShaderPayloadSize-09195]]
+    For a given entry point, the sum of the size of any variable in the
+    code:NodePayloadAMDX storage class, and the combined size of all
+    statically initialized variables in the code:NodeOutputPayloadAMDX
+    storage class must: not be greater than
+    <<limits-maxExecutionGraphShaderPayloadSize,
+    pname:maxExecutionGraphShaderPayloadSize>>
+  * [[VUID-{refpage}-maxExecutionGraphShaderPayloadCount-09196]]
+    Shaders must: not statically initialize more than
+    <<limits-maxExecutionGraphShaderPayloadCount,
+    pname:maxExecutionGraphShaderPayloadCount>> variables in the
+    code:NodeOutputPayloadAMDX storage class
+  * [[VUID-{refpage}-maxExecutionGraphShaderOutputNodes-09197]]
+    Shaders must: not include more than
+    <<limits-maxExecutionGraphShaderOutputNodes,
+    pname:maxExecutionGraphShaderOutputNodes>> instances of
+    code:OpInitializeNodePayloadsAMDX
+endif::VK_AMDX_shader_enqueue[]
+ifdef::VK_QCOM_image_processing2[]
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09219]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then the
+    code:target code:sampled code:image, code:reference code:sampled
+    code:image, and code:Block code:Size parameters must: both be
+    _dynamically uniform_ for the quad
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09220]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then code:target
+    code:sampled code:image and code:reference code:sampled code:image
+    parameters must: be of storage class code:UniformConstant and type
+    code:OpTypeImage with code:Depth=0, code:Dim=code:2D, code:Arrayed=0,
+    code:MS=0, and code:Sampled=1
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09221]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then the
+    code:target code:sampled code:image and code:reference code:sampled
+    code:image parameters must: be decorated with code:BlockMatchTextureQCOM
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09222]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then code:target
+    code:sampled code:image and code:reference code:sampled code:image
+    parameters must: have been created using an identical sampler object
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09223]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then code:target
+    code:sampled code:image and code:reference code:sampled code:image
+    parameters must: have been created with a sampler object with
+    pname:unnormalizedCoordinates equal to ename:VK_TRUE
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09224]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then code:target
+    code:sampled code:image and code:reference code:sampled code:image
+    parameters must: have been created with sampler object with
+    pname:unnormalizedCoordinates equal to ename:VK_TRUE
+  * [[VUID-{refpage}-maxBlockMatchRegion-09225]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM operation is used, then code:Block
+    code:Size less than or equal to <<limits-blockmatch-maxblocksize,
+    pname:maxBlockMatchRegion>>
+  * [[VUID-{refpage}-pNext-09226]]
+    If a code:OpImageBlockMatchWindow*QCOM operation is used, then
+    code:target code:sampled code:image must: have been created using
+    asampler object that included
+    slink:VkSamplerBlockMatchWindowCreateInfoQCOM in the pname:pNext chain.
+endif::VK_QCOM_image_processing2[]
+
+****
+--
+
+
+[[spirvenv-precision-operation]]
+== Precision and Operation of SPIR-V Instructions
+
+The following rules apply to half, single, and double-precision floating
+point instructions:
+
+  * Positive and negative infinities and positive and negative zeros are
+    generated as dictated by <<ieee-754,IEEE 754>>, but subject to the
+    precisions allowed in the following table.
+  * Dividing a non-zero by a zero results in the appropriately signed
+    <<ieee-754,IEEE 754>> infinity.
+  * Signaling [eq]##NaN##s are not required to be generated and exceptions
+    are never raised.
+    Signaling [eq]##NaN## may: be converted to quiet [eq]##NaN##s values by
+    any floating point instruction.
+  * By default, the implementation may: perform optimizations on half,
+    single, or double-precision floating-point instructions that ignore sign
+    of a zero, or assume that arguments and results are not NaNs or
+    infinities.
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+    If the entry point is declared with the code:SignedZeroInfNanPreserve
+    {ExecutionMode}, then NaNs, infinities, and the sign of zero must: not
+    be ignored.
+  ** The following core SPIR-V instructions must: respect the
+     code:SignedZeroInfNanPreserve {ExecutionMode}: code:OpPhi,
+     code:OpSelect, code:OpReturnValue, code:OpVectorExtractDynamic,
+     code:OpVectorInsertDynamic, code:OpVectorShuffle,
+     code:OpCompositeConstruct, code:OpCompositeExtract,
+     code:OpCompositeInsert, code:OpCopyObject, code:OpTranspose,
+     code:OpFConvert, code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul,
+     code:OpStore.
+     This {ExecutionMode} must: also be respected by code:OpLoad except for
+     loads from the code:Input {StorageClass} in the fragment shader stage
+     with the floating-point result type.
+     Other SPIR-V instructions may: also respect the
+     code:SignedZeroInfNanPreserve {ExecutionMode}.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+  * The following instructions must: not flush denormalized values:
+    code:OpConstant, code:OpConstantComposite, code:OpSpecConstant,
+    code:OpSpecConstantComposite, code:OpLoad, code:OpStore, code:OpBitcast,
+    code:OpPhi, code:OpSelect, code:OpFunctionCall, code:OpReturnValue,
+    code:OpVectorExtractDynamic, code:OpVectorInsertDynamic,
+    code:OpVectorShuffle, code:OpCompositeConstruct,
+    code:OpCompositeExtract, code:OpCompositeInsert, code:OpCopyMemory,
+    code:OpCopyObject.
+ifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+  * Any denormalized value input into a shader or potentially generated by
+    any instruction in a shader (except those listed above) may: be flushed
+    to 0.
+  * The rounding mode cannot: be set, and results will be
+    <<spirvenv-correctly-rounded, correctly rounded>>, as described below.
+  * [eq]##NaN##s may: not be generated.
+    Instructions that operate on a [eq]#NaN# may: not result in a [eq]#NaN#.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+  * Denormalized values are supported.
+  ** By default, any half, single, or double-precision denormalized value
+     input into a shader or potentially generated by any instruction (except
+     those listed above) or any extended instructions for GLSL in a shader
+     may: be flushed to zero.
+  ** If the entry point is declared with the code:DenormFlushToZero
+     {ExecutionMode} then for the affected instructions the denormalized
+     result must: be flushed to zero and the denormalized operands may: be
+     flushed to zero.
+     Denormalized values obtained via unpacking an integer into a vector of
+     values with smaller bit width and interpreting those values as
+     floating-point numbers must: be flushed to zero.
+  ** The following core SPIR-V instructions must: respect the
+     code:DenormFlushToZero {ExecutionMode}: code:OpSpecConstantOp (with
+     opcode code:OpFConvert), code:OpFConvert, code:OpFNegate, code:OpFAdd,
+     code:OpFSub, code:OpFMul, code:OpFDiv, code:OpFRem, code:OpFMod,
+     code:OpVectorTimesScalar, code:OpMatrixTimesScalar,
+     code:OpVectorTimesMatrix, code:OpMatrixTimesVector,
+     code:OpMatrixTimesMatrix, code:OpOuterProduct, code:OpDot; and the
+     following extended instructions for GLSL: code:Round, code:RoundEven,
+     code:Trunc, code:FAbs, code:Floor, code:Ceil, code:Fract, code:Radians,
+     code:Degrees, code:Sin, code:Cos, code:Tan, code:Asin, code:Acos,
+     code:Atan, code:Sinh, code:Cosh, code:Tanh, code:Asinh, code:Acosh,
+     code:Atanh, code:Atan2, code:Pow, code:Exp, code:Log, code:Exp2,
+     code:Log2, code:Sqrt, code:InverseSqrt, code:Determinant,
+     code:MatrixInverse, code:Modf, code:ModfStruct, code:FMin, code:FMax,
+     code:FClamp, code:FMix, code:Step, code:SmoothStep, code:Fma,
+     code:UnpackHalf2x16, code:UnpackDouble2x32, code:Length, code:Distance,
+     code:Cross, code:Normalize, code:FaceForward, code:Reflect,
+     code:Refract, code:NMin, code:NMax, code:NClamp.
+     Other SPIR-V instructions (except those excluded above) may: also flush
+     denormalized values.
+  ** The following core SPIR-V instructions must: respect the
+     code:DenormPreserve {ExecutionMode}: code:OpTranspose,
+     code:OpSpecConstantOp, code:OpFConvert, code:OpFNegate, code:OpFAdd,
+     code:OpFSub, code:OpFMul, code:OpVectorTimesScalar,
+     code:OpMatrixTimesScalar, code:OpVectorTimesMatrix,
+     code:OpMatrixTimesVector, code:OpMatrixTimesMatrix,
+     code:OpOuterProduct, code:OpDot, code:OpFOrdEqual, code:OpFUnordEqual,
+     code:OpFOrdNotEqual, code:OpFUnordNotEqual, code:OpFOrdLessThan,
+     code:OpFUnordLessThan, code:OpFOrdGreaterThan,
+     code:OpFUnordGreaterThan, code:OpFOrdLessThanEqual,
+     code:OpFUnordLessThanEqual, code:OpFOrdGreaterThanEqual,
+     code:OpFUnordGreaterThanEqual; and the following extended instructions
+     for GLSL: code:FAbs, code:FSign, code:Radians, code:Degrees, code:FMin,
+     code:FMax, code:FClamp, code:FMix, code:Fma, code:PackHalf2x16,
+     code:PackDouble2x32, code:UnpackHalf2x16, code:UnpackDouble2x32,
+     code:NMin, code:NMax, code:NClamp.
+     Other SPIR-V instructions may: also preserve denorm values.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+
+The precision of double-precision instructions is at least that of single
+precision.
+
+The precision of individual operations is defined in
+<<spirvenv-op-prec,Precision of Individual Operations>>.
+Subject to the constraints below, however, implementations may: reorder or
+combine operations, resulting in expressions exhibiting different precisions
+than might be expected from the constituent operations.
+
+
+[[spirvenv-evaluation-expressions]]
+=== Evaluation of Expressions
+
+Implementations may: rearrange floating-point operations using any of the
+mathematical properties governing the expressions in precise arithmetic,
+even where the floating- point operations do not share these properties.
+This includes, but is not limited to, associativity and distributivity, and
+may: involve a different number of rounding steps than would occur if the
+operations were not rearranged.
+In shaders that use the code:SignedZeroInfNanPreserve {ExecutionMode} the
+values must: be preserved if they are generated after any rearrangement but
+the {ExecutionMode} does not change which rearrangements are valid.
+This rearrangement can: be prevented for particular operations by using the
+code:NoContraction decoration.
+
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+[NOTE]
+.Note
+====
+For example, in the absence of the code:NoContraction decoration
+implementations are allowed to implement [eq]#a + b - a# and latexmath:[{a
+\times b}\over{a}] as [eq]#b#.
+The code:SignedZeroInfNanPreserve does not prevent these transformations,
+even though they may overflow to infinity or NaN when evaluated in
+floating-point.
+
+If the code:NoContraction decoration is applied then operations may not be
+rearranged, so, for example, [eq]#a + a - a# must account for possible
+overflow to infinity.
+If infinities are not preserved then the expression may be replaced with
+[eq]#a#, since the replacement is exact when overflow does not occur and
+infinities may be replaced with undefined: values.
+If both code:NoContraction and code:SignedZeroInfNanPreserve are used then
+the result must be infinity for sufficiently large [eq]#a#.
+====
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+
+
+[[spirvenv-op-prec]]
+=== Precision of Individual Operations
+
+The precision of individual operations is defined either in terms of
+rounding (correctly rounded), as an error bound in ULP, or as inherited from
+a formula as follows:
+
+[[spirvenv-correctly-rounded]]
+.Correctly Rounded
+Operations described as "`correctly rounded`" will return the infinitely
+precise result, [eq]#x#, rounded so as to be representable in
+floating-point.
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+The rounding mode is not specified, unless the entry point is declared with
+the code:RoundingModeRTE or the code:RoundingModeRTZ {ExecutionMode}.
+These execution modes affect only correctly rounded SPIR-V instructions.
+These execution modes do not affect code:OpQuantizeToF16.
+If the rounding mode is not specified then this rounding is implementation
+specific, subject to the following rules.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+ifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+The rounding mode used is not defined but must: obey the following rules.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+If [eq]#x# is exactly representable then [eq]#x# will be returned.
+Otherwise, either the floating-point value closest to and no less than
+[eq]#x# or the value closest to and no greater than [eq]#x# will be
+returned.
+
+.ULP
+Where an error bound of [eq]#n# ULP (units in the last place) is given, for
+an operation with infinitely precise result #x# the value returned must: be
+in the range [eq]#[x - n {times} ulp(x), x {plus} n {times} ulp(x)]#.
+The function [eq]#ulp(x)# is defined as follows:
+
+  {empty}:: If there exist non-equal, finite floating-point numbers #a# and
+    #b# such that [eq]#a {leq} x {leq} b# then [eq]#ulp(x)# is the minimum
+    possible distance between such numbers, latexmath:[ulp(x) =
+    \mathrm{min}_{a,b} | b - a |].
+    If such numbers do not exist then [eq]#ulp(x)# is defined to be the
+    difference between the two non-equal, finite floating-point numbers
+    nearest to [eq]#x#.
+
+Where the range of allowed return values includes any value of magnitude
+larger than that of the largest representable finite floating-point number,
+operations may:, additionally, return either an infinity of the appropriate
+sign or the finite number with the largest magnitude of the appropriate
+sign.
+If the infinitely precise result of the operation is not mathematically
+defined then the value returned is undefined:.
+
+.Inherited From ...
+Where an operation's precision is described as being inherited from a
+formula, the result returned must: be at least as accurate as the result of
+computing an approximation to [eq]#x# using a formula equivalent to the
+given formula applied to the supplied inputs.
+Specifically, the formula given may be transformed using the mathematical
+associativity, commutativity and distributivity of the operators involved to
+yield an equivalent formula.
+The SPIR-V precision rules, when applied to each such formula and the given
+input values, define a range of permitted values.
+If [eq]#NaN# is one of the permitted values then the operation may return
+any result, otherwise let the largest permitted value in any of the ranges
+be [eq]#F~max~# and the smallest be [eq]#F~min~#.
+The operation must: return a value in the range [eq]#[x - E, x {plus} E]#
+where latexmath:[E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x -
+F_{\mathrm{max}} | \right) ].
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+If the entry point is declared with the code:DenormFlushToZero execution
+mode, then any intermediate denormal value(s) while evaluating the formula
+may: be flushed to zero.
+Denormal final results must: be flushed to zero.
+If the entry point is declared with the code:DenormPreserve {ExecutionMode},
+then denormals must: be preserved throughout the formula.
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+For half- (16 bit) and single- (32 bit) precision instructions, precisions
+are required: to be at least as follows:
+
+.Precision of core SPIR-V Instructions
+[options="header", cols=",,"]
+|====
+| Instruction
+ | Single precision, unless decorated with RelaxedPrecision | Half precision
+| code:OpFAdd
+2+| Correctly rounded.
+| code:OpFSub
+2+| Correctly rounded.
+| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar
+2+| Correctly rounded.
+| code:OpDot(x, y)
+2+a| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
+| code:OpFOrdEqual, code:OpFUnordEqual
+2+| Correct result.
+| code:OpFOrdLessThan, code:OpFUnordLessThan
+2+| Correct result.
+| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan
+2+| Correct result.
+| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual
+2+| Correct result.
+| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual
+2+| Correct result.
+| code:OpFDiv(x,y)
+ | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].   | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-14^, 2^14^].
+| code:OpFRem(x,y)
+2+| Inherited from [eq]#x - y {times} trunc(x/y)#.
+| code:OpFMod(x,y)
+2+| Inherited from [eq]#x - y {times} floor(x/y)#.
+| conversions between types
+2+| Correctly rounded.
+|====
+
+[NOTE]
+.Note
+====
+The code:OpFRem and code:OpFMod instructions use cheap approximations of
+remainder, and the error can be large due to the discontinuity in trunc()
+and floor().
+This can produce mathematically unexpected results in some cases, such as
+FMod(x,x) computing x rather than 0, and can also cause the result to have a
+different sign than the infinitely precise result.
+====
+
+.Precision of GLSL.std.450 Instructions
+[options="header", cols=",,"]
+|====
+|Instruction
+  | Single precision, unless decorated with RelaxedPrecision | Half precision
+| code:fma()
+2+| Inherited from code:OpFMul followed by code:OpFAdd.
+| code:exp(x),  code:exp2(x)
+ a| latexmath:[3 + 2 \times \vert x \vert] ULP.             a| latexmath:[1 + 2 \times \vert x \vert] ULP.
+| code:log(),  code:log2()
+ a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-21}] inside the range latexmath:[[0.5, 2.0\]].
+ a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-7}] inside the range latexmath:[[0.5, 2.0\]].
+| code:pow(x, y)
+2+| Inherited from code:exp2(y {times} code:log2(x)).
+| code:sqrt()
+2+| Inherited from 1.0 / code:inversesqrt().
+| code:inversesqrt()
+2+| 2 ULP.
+| code:radians(x)
+2+a| Inherited from latexmath:[x \times C_{\pi\_180}], where latexmath:[C_{\pi\_180}] is a correctly rounded approximation to latexmath:[\frac{\pi}{180}].
+| code:degrees(x)
+2+a| Inherited from latexmath:[x \times C_{180\_\pi}], where latexmath:[C_{180\_\pi}] is a correctly rounded approximation to latexmath:[\frac{180}{\pi}].
+| code:sin()
+  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
+| code:cos()
+  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
+| code:tan()
+2+a| Inherited from latexmath:[\frac{\sin()}{\cos()}].
+| code:asin(x)
+2+a| Inherited from latexmath:[\mathrm{atan2}(x, sqrt(1.0 - x \times x))].
+| code:acos(x)
+2+a| Inherited from latexmath:[\mathrm{atan2}(sqrt(1.0 - x \times x), x)].
+| code:atan(), code:atan2()
+   | 4096 ULP                                                      | 5 ULP.
+| code:sinh(x)
+2+a| Inherited from latexmath:[(\exp(x) - \exp(-x)) \times 0.5].
+| code:cosh(x)
+2+a| Inherited from latexmath:[(\exp(x) + \exp(-x)) \times 0.5].
+| code:tanh()
+2+a| Inherited from latexmath:[\frac{\sinh()}{\cosh()}].
+| code:asinh(x)
+2+a| Inherited from latexmath:[\log(x + sqrt(x \times x + 1.0))].
+| code:acosh(x)
+2+a| Inherited from latexmath:[\log(x + sqrt(x \times x - 1.0))].
+| code:atanh(x)
+2+a| Inherited from latexmath:[\log(\frac{1.0 + x}{1.0 - x}) \times 0.5].
+| code:frexp()
+2+| Correctly rounded.
+| code:ldexp()
+2+| Correctly rounded.
+| code:length(x)
+2+a| Inherited from latexmath:[sqrt(dot(x, x))].
+| code:distance(x, y)
+2+a| Inherited from latexmath:[length(x - y)].
+| code:cross()
+2+| Inherited from [eq]#code:OpFSub(code:OpFMul, code:OpFMul)#.
+| code:normalize(x)
+2+a| Inherited from latexmath:[x \times inversesqrt(dot(x, x))].
+| code:faceforward(N, I, NRef)
+2+| Inherited from [eq]#code:dot(NRef, I) < 0.0 ? N : -N#.
+| code:reflect(x, y)
+2+| Inherited from [eq]#x - 2.0 {times} code:dot(y, x) {times} y#.
+| code:refract(I, N, eta)
+2+| Inherited from [eq]#k < 0.0 ? 0.0 : eta {times} I - (eta {times} code:dot(N, I) {plus} code:sqrt(k)) {times} N#, where [eq]#k = 1 - eta {times} eta {times} (1.0 - code:dot(N, I) {times} code:dot(N, I))#.
+| code:round
+2+| Correctly rounded.
+| code:roundEven
+2+| Correctly rounded.
+| code:trunc
+2+| Correctly rounded.
+| code:fabs
+2+| Correctly rounded.
+| code:fsign
+2+| Correctly rounded.
+| code:floor
+2+| Correctly rounded.
+| code:ceil
+2+| Correctly rounded.
+| code:fract
+2+| Correctly rounded.
+| code:modf
+2+| Correctly rounded.
+| code:fmin
+2+| Correctly rounded.
+| code:fmax
+2+| Correctly rounded.
+| code:fclamp
+2+| Correctly rounded.
+| code:fmix(x, y, a)
+2+a| Inherited from latexmath:[x \times (1.0 - a) + y \times a].
+| code:step
+2+| Correctly rounded.
+| code:smoothStep(edge0, edge1, x)
+2+a| Inherited from latexmath:[t \times t \times (3.0 - 2.0 \times t)],
+where latexmath:[t = clamp(\frac{x - edge0}{edge1 - edge0}, 0.0, 1.0)].
+| code:nmin
+2+| Correctly rounded.
+| code:nmax
+2+| Correctly rounded.
+| code:nclamp
+2+| Correctly rounded.
+|====
+endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+
+ifndef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+For single precision (32 bit) instructions, precisions are required: to be
+at least as follows, unless decorated with RelaxedPrecision:
+
+.Precision of core SPIR-V Instructions
+[options="header"]
+|====
+| Instruction                                                     | Precision
+| code:OpFAdd                                                     | Correctly rounded.
+| code:OpFSub                                                     | Correctly rounded.
+| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar | Correctly rounded.
+| code:OpFOrdEqual, code:OpFUnordEqual                            | Correct result.
+| code:OpFOrdLessThan, code:OpFUnordLessThan                      | Correct result.
+| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan                | Correct result.
+| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual            | Correct result.
+| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual      | Correct result.
+| code:OpFDiv(x,y)                                                | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].
+| conversions between types                                       | Correctly rounded.
+|====
+
+.Precision of GLSL.std.450 Instructions
+[options="header"]
+|====
+|Instruction                 | Precision
+| code:fma()                 | Inherited from code:OpFMul followed by code:OpFAdd.
+| code:exp(x),  code:exp2(x) | [eq]#3 {plus} 2 {times} {vert}x{vert}# ULP.
+| code:log(),  code:log2()   | 3 ULP outside the range [eq]#[0.5, 2.0]#. Absolute error < [eq]#2^-21^# inside the range [eq]#[0.5, 2.0]#.
+| code:pow(x, y)             | Inherited from code:exp2(y {times} code:log2(x)).
+| code:sqrt()                | Inherited from 1.0 / code:inversesqrt().
+| code:inversesqrt()         | 2 ULP.
+|====
+endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+
+GLSL.std.450 extended instructions specifically defined in terms of the
+above instructions inherit the above errors.
+GLSL.std.450 extended instructions not listed above and not defined in terms
+of the above have undefined: precision.
+
+For the code:OpSRem and code:OpSMod instructions, if either operand is
+negative the result is undefined:.
+
+[NOTE]
+.Note
+====
+While the code:OpSRem and code:OpSMod instructions are supported by the
+Vulkan environment, they require non-negative values and thus do not enable
+additional functionality beyond what code:OpUMod provides.
+====
+
+ifdef::VK_NV_cooperative_matrix[]
+code:OpCooperativeMatrixMulAddNV performs its operations in an
+implementation-dependent order and internal precision.
+endif::VK_NV_cooperative_matrix[]
+
+ifdef::VK_KHR_cooperative_matrix[]
+code:OpCooperativeMatrixMulAddKHR performs its operations in an
+implementation-dependent order and internal precision.
+endif::VK_KHR_cooperative_matrix[]
+
+[[spirvenv-image-signedness]]
+== Signedness of SPIR-V Image Accesses
+
+SPIR-V associates a signedness with all integer image accesses.
+This is required in certain parts of the SPIR-V and the Vulkan image access
+pipeline to ensure defined results.
+The signedness is determined from a combination of the access instruction's
+code:Image code:Operands and the underlying image's code:Sampled code:Type
+as follows:
+
+ 1. If the instruction's code:Image code:Operands contains the
+    code:SignExtend operand then the access is signed.
+ 2. If the instruction's code:Image code:Operands contains the
+    code:ZeroExtend operand then the access is unsigned.
+ 3. Otherwise, the image accesses signedness matches that of the
+    code:Sampled code:Type of the code:OpTypeImage being accessed.
+
+
+[[spirvenv-format-type-matching]]
+== Image Format and Type Matching
+
+When specifying the code:Image code:Format of an code:OpTypeImage, the
+converted bit width and type, as shown in the table below, must: match the
+code:Sampled code:Type.
+The signedness must: match the <<spirvenv-image-signedness,signedness of any
+access>> to the image.
+
+[NOTE]
+.Note
+====
+Formatted accesses are always converted from a shader readable type to the
+resource's format or vice versa via <<textures-format-conversion>> for reads
+and <<textures-output-format-conversion>> for writes.
+As such, the bit width and format below do not necessarily match 1:1 with
+what might be expected for some formats.
+====
+
+For a given code:Image code:Format, the code:Sampled code:Type must: be the
+type described in the _Type_ column of the below table, with its
+code:Literal code:Width set to that in the _Bit Width_ column.
+Every access that is made to the image must: have a signedness equal to that
+in the _Signedness_ column (where applicable).
+
+[options="autowidth"]
+|===
+| Image Format       | Type-Declaration instructions | Bit Width | Signedness
+
+| code:Unknown       | Any                  | Any       | Any
+| code:Rgba32f   .20+| code:OpTypeFloat .20+| 32    .20+| N/A
+| code:Rg32f
+| code:R32f
+| code:Rgba16f
+| code:Rg16f
+| code:R16f
+| code:Rgba16
+| code:Rg16
+| code:R16
+| code:Rgba16Snorm
+| code:Rg16Snorm
+| code:R16Snorm
+| code:Rgb10A2
+| code:R11fG11fB10f
+| code:Rgba8
+| code:Rg8
+| code:R8
+| code:Rgba8Snorm
+| code:Rg8Snorm
+| code:R8Snorm
+| code:Rgba32i   .19+| code:OpTypeInt   .19+| 32     .9+| 1
+| code:Rg32i
+| code:R32i
+| code:Rgba16i
+| code:Rg16i
+| code:R16i
+| code:Rgba8i
+| code:Rg8i
+| code:R8i
+| code:Rgba32ui                                     .10+| 0
+| code:Rg32ui
+| code:R32ui
+| code:Rgba16ui
+| code:Rg16ui
+| code:R16ui
+| code:Rgb10a2ui
+| code:Rgba8ui
+| code:Rg8ui
+| code:R8ui
+| code:R64i       .2+| code:OpTypeInt    .2+| 64        | 1
+| code:R64ui                                            | 0
+|===
+
+[[spirv-type]]
+The _SPIR-V Type_ is defined by an instruction in SPIR-V, declared with the
+Type-Declaration Instruction, Bit Width, and Signedness from above.
+
+[[spirvenv-image-formats]]
+== Compatibility Between SPIR-V Image Formats and Vulkan Formats
+
+SPIR-V code:Image code:Format values are compatible with elink:VkFormat
+values as defined below:
+
+.SPIR-V and Vulkan Image Format Compatibility
+[cols="2*", options="header"]
+|====
+|SPIR-V Image Format    |Compatible Vulkan Format
+include::{generated}/formats/spirvimageformat.adoc[]
+|====
+
+
+ifdef::VK_KHR_ray_query+VK_KHR_ray_tracing_position_fetch[]
+// TODO: add more Ray Query instructions here and move second ifdef down
+[[spirenv-ray-query-precision-operation]]
+== Ray Query Precision and Operation
+
+The values returned by
+code:OpRayQueryGetIntersectionTriangleVertexPositionsKHR are transformed by
+the geometry transform, which is performed at standard
+<<fundamentals-floatingpoint, floating point>> precision, but without a
+specifically defined order of floating point operations to perform the
+matrix multiplication.
+
+endif::VK_KHR_ray_query+VK_KHR_ray_tracing_position_fetch[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/versions.adoc b/codegen/vulkan/vulkan-docs-next/appendices/versions.adoc
new file mode 100644
index 0000000..b5999aa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/versions.adoc
@@ -0,0 +1,440 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+
+[[versions]]
+= Core Revisions (Informative)
+
+New minor versions of the Vulkan API are defined periodically by the Khronos
+Vulkan Working Group.
+These consist of some amount of additional functionality added to the core
+API, potentially including both new functionality and functionality
+<<extendingvulkan-compatibility-promotion,promoted>> from extensions.
+
+ifdef::VK_VERSION_1_1[]
+It is possible to build the specification for earlier versions, but to aid
+readability of the latest versions, this appendix gives an overview of the
+changes as compared to earlier versions.
+endif::VK_VERSION_1_1[]
+
+ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
+ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
+
+ifdef::VK_VERSION_1_3[]
+[[versions-1.3]]
+== Version 1.3
+
+// Unfortunately we cannot include titles in an open refpage block, so this
+// is a refpage-specific alternate form of the section.
+ifdef::isrefpage[]
+[open,refpage='VK_VERSION_1_3',desc='Vulkan version 1.3',type='feature',anchor='versions-1.3',xrefs='VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_2']
+--
+Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.3 functionality are summarized in the <<versions-1.3-promotions,
+Vulkan 1.3 specification appendix>>.
+
+include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
+--
+endif::isrefpage[]
+
+// This is the spec-specific form of the section
+[[versions-1.3-promotions]]
+Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.3 functionality are summarized below.
+
+=== Differences Relative to `VK_EXT_4444_formats`
+
+If the `apiext:VK_EXT_4444_formats` extension is not supported, support for
+all formats defined by it are optional in Vulkan 1.3.
+There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
+corresponding to the slink:VkPhysicalDevice4444FormatsFeaturesEXT structure.
+
+=== Differences Relative to `VK_EXT_extended_dynamic_state`
+
+All dynamic state enumerants and entry points defined by
+`apiext:VK_EXT_extended_dynamic_state` are required in Vulkan 1.3.
+There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
+corresponding to the slink:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
+structure.
+
+=== Differences Relative to `VK_EXT_extended_dynamic_state2`
+
+The optional dynamic state enumerants and entry points defined by
+`apiext:VK_EXT_extended_dynamic_state2` for patch control points and logic
+op are not promoted in Vulkan 1.3.
+There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
+corresponding to the slink:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
+structure.
+
+=== Differences Relative to `VK_EXT_texel_buffer_alignment`
+
+The more specific alignment requirements defined by
+slink:VkPhysicalDeviceTexelBufferAlignmentProperties are required in Vulkan
+1.3.
+There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
+corresponding to the slink:VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+structure.
+The pname:texelBufferAlignment feature is enabled if using a Vulkan 1.3
+instance.
+
+=== Differences Relative to `VK_EXT_texture_compression_astc_hdr`
+
+If the `apiext:VK_EXT_texture_compression_astc_hdr` extension is not
+supported, support for all formats defined by it are optional in Vulkan 1.3.
+The <<features-textureCompressionASTC_HDR,
+pname:textureCompressionASTC_HDR>> member of
+slink:VkPhysicalDeviceVulkan13Features indicates whether a Vulkan 1.3
+implementation supports these formats.
+
+=== Differences Relative to `VK_EXT_ycbcr_2plane_444_formats`
+
+If the `apiext:VK_EXT_ycbcr_2plane_444_formats` extension is not supported,
+support for all formats defined by it are optional in Vulkan 1.3.
+There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
+corresponding to the slink:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
+structure.
+
+=== Additional Vulkan 1.3 Feature Support
+
+[[versions-1.3-new-features]]
+In addition to the promoted extensions described above, Vulkan 1.3 added
+required support for:
+
+  * SPIR-V version 1.6
+  ** SPIR-V 1.6 deprecates (but does not remove) the code:WorkgroupSize
+     decoration.
+  * The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature
+    which indicates support for accessing memory in shaders as storage
+    buffers via flink:vkGetBufferDeviceAddress.
+  * The <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> and
+    <<features-vulkanMemoryModelDeviceScope,
+    pname:vulkanMemoryModelDeviceScope>> features, which indicate support
+    for the corresponding Vulkan Memory Model capabilities.
+  * The <<limits-maxInlineUniformTotalSize,
+    pname:maxInlineUniformTotalSize>> limit is added to provide the total
+    size of all inline uniform block bindings in a pipeline layout.
+
+include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
+
+endif::VK_VERSION_1_3[]
+
+
+ifdef::VK_VERSION_1_2[]
+[[versions-1.2]]
+== Version 1.2
+
+// Unfortunately we cannot include titles in an open refpage block, so this
+// is a refpage-specific alternate form of the section.
+ifdef::isrefpage[]
+[open,refpage='VK_VERSION_1_2',desc='Vulkan version 1.2',type='feature',anchor='versions-1.2',xrefs='VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_3']
+--
+Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+// Must be redefined in the refpage content
+ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
+ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
+
+include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.2 functionality are summarized in the <<versions-1.2-promotions,
+Vulkan 1.2 specification appendix>>.
+
+include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
+--
+endif::isrefpage[]
+
+// This is the spec-specific form of the section
+[[versions-1.2-promotions]]
+Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.2 functionality are summarized below.
+
+=== Differences Relative to `VK_KHR_8bit_storage`
+
+If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for
+the SPIR-V <<features-storageBuffer8BitAccess,
+pname:storageBuffer8BitAccess>> capability in shader modules is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:storageBuffer8BitAccess when
+queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_draw_indirect_count`
+
+If the `apiext:VK_KHR_draw_indirect_count` extension is not supported,
+support for the entry points flink:vkCmdDrawIndirectCount and
+flink:vkCmdDrawIndexedIndirectCount is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount when queried
+via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_sampler_mirror_clamp_to_edge`
+
+If the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is not
+supported, support for the elink:VkSamplerAddressMode
+ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge when
+queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_EXT_descriptor_indexing`
+
+If the `apiext:VK_EXT_descriptor_indexing` extension is not supported,
+support for the <<features-descriptorIndexing, pname:descriptorIndexing>>
+feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when
+queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_EXT_scalar_block_layout`
+
+If the `apiext:VK_EXT_scalar_block_layout` extension is not supported,
+support for the <<features-scalarBlockLayout, pname:scalarBlockLayout>>
+feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried
+via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_EXT_shader_viewport_index_layer`
+
+The code:ShaderViewportIndexLayerEXT SPIR-V capability was replaced with the
+code:ShaderViewportIndex and code:ShaderLayer capabilities.
+Declaring both is equivalent to declaring code:ShaderViewportIndexLayerEXT.
+If the `apiext:VK_EXT_shader_viewport_index_layer` extension is not
+supported, support for the code:ShaderViewportIndexLayerEXT SPIR-V
+capability is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex and
+slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried
+via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_buffer_device_address`
+
+If the `apiext:VK_KHR_buffer_device_address` extension is not supported,
+support for the <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>
+feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when
+queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_shader_atomic_int64`
+
+If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported,
+support for the <<features-shaderBufferInt64Atomics,
+pname:shaderBufferInt64Atomics>> feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:shaderBufferInt64Atomics when
+queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_shader_float16_int8`
+
+If the `apiext:VK_KHR_shader_float16_int8` extension is not supported,
+support for the <<features-shaderFloat16, pname:shaderFloat16>> and
+<<features-shaderInt8, pname:shaderInt8>> features is optional.
+Support for these features are defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:shaderFloat16 and
+slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via
+flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_vulkan_memory_model`
+
+If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported,
+support for the <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>
+feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried
+via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Additional Vulkan 1.2 Feature Support
+
+[[versions-1.2-new-features]]
+In addition to the promoted extensions described above, Vulkan 1.2 added
+support for:
+
+  * SPIR-V version 1.4.
+  * SPIR-V version 1.5.
+  * The <<features-samplerMirrorClampToEdge,
+    pname:samplerMirrorClampToEdge>> feature which indicates whether the
+    implementation supports the
+    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
+  * The <<spirvenv-capabilities-table-ShaderNonUniform,
+    code:ShaderNonUniform>> capability in SPIR-V version 1.5.
+  * The <<features-shaderOutputViewportIndex,
+    pname:shaderOutputViewportIndex>> feature which indicates that the
+    <<spirvenv-capabilities-table-ShaderViewportIndex,
+    code:ShaderViewportIndex>> capability can be used.
+  * The <<features-shaderOutputLayer, pname:shaderOutputLayer>> feature
+    which indicates that the <<spirvenv-capabilities-table-ShaderLayer,
+    code:ShaderLayer>> capability can be used.
+  * The <<features-subgroupBroadcastDynamicId,
+    pname:subgroupBroadcastDynamicId>> feature which allows the "`Id`"
+    operand of code:OpGroupNonUniformBroadcast to be dynamically uniform
+    within a subgroup, and the "`Index`" operand of
+    code:OpGroupNonUniformQuadBroadcast to be dynamically uniform within a
+    derivative group, in shader modules of version 1.5 or higher.
+  * The <<features-drawIndirectCount, pname:drawIndirectCount>> feature
+    which indicates whether the flink:vkCmdDrawIndirectCount and
+    flink:vkCmdDrawIndexedIndirectCount functions can be used.
+  * The <<features-descriptorIndexing, pname:descriptorIndexing>> feature
+    which indicates the implementation supports the minimum number of
+    descriptor indexing features as defined in the <<features-requirements,
+    Feature Requirements>> section.
+  * The <<features-samplerFilterMinmax, pname:samplerFilterMinmax>> feature
+    which indicates whether the implementation supports the minimum number
+    of image formats that support the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature bit as
+    defined by the
+    <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,
+    pname:filterMinmaxSingleComponentFormats>> property minimum
+    requirements.
+  * The <<limits-framebufferIntegerColorSampleCounts,
+    pname:framebufferIntegerColorSampleCounts>> limit which indicates the
+    color sample counts that are supported for all framebuffer color
+    attachments with integer formats.
+
+include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
+
+endif::VK_VERSION_1_2[]
+
+
+ifdef::VK_VERSION_1_1[]
+[[versions-1.1]]
+== Version 1.1
+
+// Unfortunately we cannot include titles in an open refpage block, so this
+// is a refpage-specific alternate form of the section.
+ifdef::isrefpage[]
+[open,refpage='VK_VERSION_1_1',desc='Vulkan version 1.1',type='feature',anchor='versions-1.1',xrefs='VK_VERSION_1_0 VK_VERSION_1_2 VK_VERSION_1_3']
+--
+Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+// Must be redefined in the refpage content
+ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
+ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
+
+include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.1 functionality are summarized in the <<versions-1.1-promotions,
+Vulkan 1.1 specification appendix>>.
+
+include::{generated}/interfaces/VK_VERSION_1_1.adoc[]
+--
+endif::isrefpage[]
+
+// This is the spec-specific form of the section
+[[versions-1.1-promotions]]
+Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[]
+
+All differences in behavior between these extensions and the corresponding
+Vulkan 1.1 functionality are summarized below.
+
+=== Differences Relative to `VK_KHR_16bit_storage`
+
+If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for
+the <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>
+feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDevice16BitStorageFeatures::pname:storageBuffer16BitAccess
+ifdef::VK_VERSION_1_2[]
+or slink:VkPhysicalDeviceVulkan11Features::pname:storageBuffer16BitAccess
+endif::VK_VERSION_1_2[]
+when queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_sampler_ycbcr_conversion`
+
+If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported,
+support for the <<features-samplerYcbcrConversion,
+pname:samplerYcbcrConversion>> feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures::pname:samplerYcbcrConversion
+ifdef::VK_VERSION_1_2[]
+or slink:VkPhysicalDeviceVulkan11Features::pname:samplerYcbcrConversion
+endif::VK_VERSION_1_2[]
+when queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_shader_draw_parameters`
+
+If the `apiext:VK_KHR_shader_draw_parameters` extension is not supported,
+support for the
+{spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
+SPIR-V extension is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceShaderDrawParametersFeatures::pname:shaderDrawParameters
+ifdef::VK_VERSION_1_2[]
+or slink:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters
+endif::VK_VERSION_1_2[]
+when queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Differences Relative to `VK_KHR_variable_pointers`
+
+If the `apiext:VK_KHR_variable_pointers` extension is not supported, support
+for the <<features-variablePointersStorageBuffer,
+pname:variablePointersStorageBuffer>> feature is optional.
+Support for this feature is defined by
+slink:VkPhysicalDeviceVariablePointersFeatures::pname:variablePointersStorageBuffer
+ifdef::VK_VERSION_1_2[]
+or
+slink:VkPhysicalDeviceVulkan11Features::pname:variablePointersStorageBuffer
+endif::VK_VERSION_1_2[]
+when queried via flink:vkGetPhysicalDeviceFeatures2.
+
+=== Additional Vulkan 1.1 Feature Support
+
+[[versions-1.1-new-features]]
+In addition to the promoted extensions described above, Vulkan 1.1 added
+support for:
+
+  * The <<shaders-group-operations, group operations>> and
+    <<shaders-scope-subgroup, subgroup scope>>.
+  * The <<memory-protected-memory, protected memory>> feature.
+  * A new command to enumerate the instance version:
+    flink:vkEnumerateInstanceVersion.
+  * The slink:VkPhysicalDeviceShaderDrawParametersFeatures feature query
+    struct (where the `apiext:VK_KHR_shader_draw_parameters` extension did
+    not have one).
+
+include::{generated}/interfaces/VK_VERSION_1_1.adoc[]
+
+endif::VK_VERSION_1_1[]
+
+
+[[versions-1.0]]
+== Version 1.0
+
+// Unfortunately we cannot include titles in an open refpage block, so this
+// is a refpage-specific alternate form of the section.
+ifdef::isrefpage[]
+[open,refpage='VK_VERSION_1_0',desc='Vulkan version 1.0',type='feature',anchor='versions-1.0',xrefs='VK_VERSION_1_1 VK_VERSION_1_2 VK_VERSION_1_3']
+--
+Vulkan Version 1.0 was the initial release of the Vulkan API.
+
+include::{generated}/interfaces/VK_VERSION_1_0.adoc[]
+--
+endif::isrefpage[]
+
+// This is the spec-specific form of the section
+Vulkan Version 1.0 was the initial release of the Vulkan API.
+
+include::{generated}/interfaces/VK_VERSION_1_0.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/appendices/vulkanscdeviations.adoc b/codegen/vulkan/vulkan-docs-next/appendices/vulkanscdeviations.adoc
new file mode 100644
index 0000000..b20acf6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/appendices/vulkanscdeviations.adoc
@@ -0,0 +1,313 @@
+// Copyright (c) 2014-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[vulkansc-deviations]]
+= Vulkan SC Deviations From Base Vulkan
+
+== Additions
+The following extensions have been added to Vulkan SC:
+
+[width="95%",cols="60%,40%",options="header"]
+|===
+| Extension | Level
+ifdef::VK_KHR_object_refresh[]
+|<<VK_KHR_object_refresh>> | Optional
+endif::VK_KHR_object_refresh[]
+|===
+
+
+The following items have been added to Vulkan SC:
+
+[width="95%",cols="20%,80%",options="header"]
+|===
+| Chapter a| Additions
+| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scaddition]
+| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scaddition]
+| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scaddition]
+| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scaddition]
+| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scaddition]
+| <<features,Features>> a| include::{chapters}/features.adoc[tag=scaddition]
+| <<debugging,Debugging>> a| include::{chapters}/fault_handling.adoc[tag=scaddition]
+|===
+
+== Modifications
+The following aspects of Base Vulkan have been modified for Vulkan SC:
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+Table entries should be listed in the order listed in table of contents
+====
+endif::editing-notes[]
+
+[width="95%",cols="20%,80%",options="header"]
+|===
+| Chapter a| Modifications
+| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scdeviation]
+| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scdeviation]
+| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scdeviation]
+| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scdeviation]
+| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scdeviation]
+| <<resources,Resource Creation>> a| include::{chapters}/resources.adoc[tag=scdeviation]
+| <<descriptorsets,Resource Descriptors>> a| include::{chapters}/descriptorsets.adoc[tag=scdeviation]
+| <<sparsememory,Sparse Resources>> a| include::{chapters}/sparsemem.adoc[tag=scdeviation]
+| <<wsi,WSI Swapchain>> a| include::{chapters}/VK_KHR_swapchain/wsi.adoc[tag=scdeviation]
+| <<features,Features>> a| include::{chapters}/features.adoc[tag=scdeviation]
+| <<limits,Limits>> a| include::{chapters}/limits.adoc[tag=scdeviation]
+|===
+
+== Removals
+The following functionality has been removed from Base Vulkan in Vulkan SC:
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+Table entries should be listed in the order listed in table of contents.
+====
+endif::editing-notes[]
+
+[width="95%",cols="20%,80%",options="header"]
+|===
+| Chapter a| Removals
+| <<fundamentals,Fundamentals>> a| include::{chapters}/fundamentals.adoc[tag=scremoved]
+| <<devsandqueues,Devices and Queues>> a| include::{chapters}/devsandqueues.adoc[tag=scremoved]
+| <<commandbuffers,Command Buffers>> a| include::{chapters}/cmdbuffers.adoc[tag=scremoved]
+| <<synchronization,Synchronization and Cache Control>> a| include::{chapters}/synchronization.adoc[tag=scremoved]
+| <<shaders,Shaders>> a| include::{chapters}/shaders.adoc[tag=scremoved]
+| <<pipelines,Pipelines>> a| include::{chapters}/pipelines.adoc[tag=scremoved]
+| <<memory,Memory Allocation>> a| include::{chapters}/memory.adoc[tag=scremoved]
+| <<descriptorsets,Resource Descriptors>> a| include::{chapters}/descriptorsets.adoc[tag=scremoved]
+| <<queries,Queries>> a| include::{chapters}/queries.adoc[tag=scremoved]
+| <<fragops,Fragment Operations>> a| include::{chapters}/fragops.adoc[tag=scremoved]
+| <<sparsememory,Sparse Resources>> a| include::{chapters}/sparsemem.adoc[tag=scremoved]
+| <<wsi,Window System Integration>> a| include::{chapters}/VK_KHR_surface/wsi.adoc[tag=scremoved]
+| <<wsi,WSI Swapchain>> a| include::{chapters}/VK_KHR_swapchain/wsi.adoc[tag=scremoved]
+|===
+
+== Extension Support
+
+Vulkan SC supports a subset of the extensions supported in Base Vulkan.
+This subset was decided by:
+
+  * Excluding any extensions that would pose significant difficulty to
+    certify their implementations.
+  * Excluding any extension that would not be used in deployed devices.
+    This was primarily extensions focused on application development and
+    debug.
+  * Excluding any extensions that are specific to an Operating System or
+    Windowing system that is highly unlikely to be used in the Safety
+    Critical space.
+  * Non-KHR or EXT extension are supported on request.
+
+[NOTE]
+.Note
+====
+During development it is likely that application developers will need
+additional functionality in a Vulkan SC implementation beyond what is
+provided by the supported extensions.
+This can be achieved by implementing a development focused version of the
+implementation that exposes additional Vulkan extensions and tools support
+but is non-conformant to the Vulkan SC specification.
+
+A Vulkan SC conformant implementation with this additional functionality
+removed will be used on the end device.
+====
+
+== Fault and Error Handling
+
+Vulkan SC maintains the use of <<fundamentals-returncodes>> on a small
+number of commands.
+These allow the command to confirm it completed successfully or return an
+error code for situations where a failure could be detected at runtime
+during the execution of the command.
+
+In addition to <<fundamentals-returncodes>> Vulkan SC adds
+<<fault-handling>> support.
+This provides the implementation the ability to communicate information on
+errors or faults to the application that have been detected but are not
+covered by <<fundamentals-returncodes>> in the Vulkan SC API.
+These could be runtime failures of the system or application faults that are
+detected asynchronously to the Vulkan API commands.
+
+== Undefined Behavior in the API
+
+If an application uses the API incorrectly the behavior of the API is
+undefined:.
+The Vulkan SC runtime will perform minimal error and state checking and it
+is assumed that applications are using the API correctly, see
+<<fundamentals-validusage>>.
+
+With incorrect input to the API, the implementation could continue to
+function correctly, generate unexpected output, become unstable, or be
+terminated.
+The exact behavior will vary and be dependent on the specifics of the
+invalid usage and the implementation.
+
+It is primarily the application's responsibility to ensure it always uses
+the API correctly.
+Potential methods to detect incorrect API usage include performing manual
+code inspection, use of validation layers during development, use of
+validation layers at runtime, or adding runtime checking to the application.
+Outside of this, Vulkan SC implementations can: add implementation-specific
+targeted checks to detect invalid API usage that could significantly impact
+the correct operation of the application or implementation.
+The <<fault-handling>> extension allows implementations to communicate
+information on such occurrences.
+
+== MISRA C:2012 Deviations
+
+`{core_header}` is intended to be compatible with safety coding standards
+like MISRA C:2012.
+
+The following provides information on items a MISRA C code analysis tool
+may: report for a project using Vulkan SC.
+
+MISRA headline guidelines are copyright (C) The MISRA Consortium Limited and
+are reproduced with permission.
+For further explanation of the directives and rules please see the _MISRA
+C:2012_ specification (https://www.misra.org.uk/misra-c/).
+See _MISRA Compliance:2020_
+(https://www.misra.org.uk/app/uploads/2021/06/MISRA-Compliance-2020.pdf) for
+a framework for handling deviations.
+
+=== Directives
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Directive  |4.6: "_typedefs_ that indicate size and signedness should be used
+             in place of the basic numerical types"
+|Category   |Advisory
+|Note       |This is reported for every `char` and `float` variable used in the
+             API.
+|Rationale  |Vulkan SC maintains the Base Vulkan type conventions for
+             compatibility between APIs.
+|===
+
+=== Rules
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |2.3: "A project should not contain unused type declarations"
+|Category   |Advisory
+|Note       |This is reported for any unused type definitions.
+|Rationale  |The `{core_header}` provides a complete API definition and it is
+             expected that an application may: not use all the provided type declarations.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |2.4: "A project should not contain unused tag declarations"
+|Category   |Advisory
+|Note       |This is reported for each instance of
+             `typedef struct VkStruct { ... } VkStruct;` and
+             `typedef enum VkEnum { ... } VkEnum;` where the tag declaration is
+             unused.
+|Rationale  |The `{core_header}` provides a complete API definition and it is
+             expected that an application may: not use all the provided tag
+             declarations.
+             Vulkan SC maintains the Base Vulkan type conventions for
+             compatibility between APIs.
+             Tag declarations are required in case an application wishes to
+             make forward declarations to API-defined types.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |2.5: "A project should not contain unused macro declarations"
+|Category   |Advisory
+|Note       |This is reported for every unused macro defined in the header.
+|Rationale  |The `{core_header}` provides a complete API definition and it is
+             expected that an application may: not use all the provided macro
+             declarations.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |5.1: "_External identifiers_ shall be distinct"
+|Category   |Required
+|Note       |This is reported for identifiers with names that do not differ in
+             the first 31 characters, such as
+             flink:vkGetPhysicalDeviceFormatProperties and
+             flink:vkGetPhysicalDeviceFormatProperties2.
+|Rationale  |Vulkan SC maintains the Base Vulkan naming conventions for
+             compatibility between APIs.
+             Vulkan SC applications must: be built using a compiler that treats
+             enough characters as significant.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |5.2: "Identifiers declared in the same _scope_ and name space
+             shall be distinct"
+|Category   |Required
+|Note       |This is reported for many code:typedef statements with long
+             identifiers.
+|Rationale  |Vulkan SC maintains the Base Vulkan type and naming conventions for
+             compatibility between APIs.
+             Vulkan SC applications must: be built using a compiler that treats
+             enough characters as significant.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |5.4: "_Macro identifiers_ shall be distinct"
+|Category   |Required
+|Note       |This is reported for macros with names that do not differ in the
+             first 31 characters, such as
+             ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT and
+             ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+|Rationale  |Vulkan SC maintains the Base Vulkan naming conventions for
+             compatibility between APIs.
+             Vulkan SC applications must: be built using a compiler that treats
+             enough characters as significant.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |8.6: "An identifier with external linkage shall have exactly one
+             external definition"
+|Category   |Required
+|Note       |This is reported for every API entry point declaration, and the
+             external definitions are provided by the implementation.
+|Rationale  |It is expected that a Vulkan SC application will link against an
+             implementation that provides these definitions.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |19.2: "The _union_ keyword should not be used"
+|Category   |Advisory
+|Note       |This is reported on the slink:VkClearColorValue,
+             slink:VkClearValue, and slink:VkPerformanceCounterResultKHR
+             unions.
+|Rationale  |These are required to remain compatible with the Base Vulkan API.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |20.1: "_#include_ directives should only be preceded by
+             preprocessor directives or comments"
+|Category   |Advisory
+|Note       |This is reported because the entire Vulkan SC API definition is
+             wrapped in an `extern "C"` block.
+|Rationale  |This is expected because the Vulkan SC API is a C ABI and the
+             header may be included from C++ code.
+|===
+
+[width="100%",cols="15%,85%",options="header"]
+|===
+|Rule       |20.10: "The # and ## preprocessor operators should not be used"
+|Category   |Advisory
+|Note      a|This is reported for the two lines:
+[source,c]
+---------------------------------------------------
+#define VK_DEFINE_HANDLE(object) typedef struct object##_T* (object);
+#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *(object);
+---------------------------------------------------
+|Rationale  |This is expected usage of the macro expansion operation and there
+             are not multiple operators used in the statement.
+|===
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/README.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/README.adoc
new file mode 100644
index 0000000..4c48824
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/README.adoc
@@ -0,0 +1,49 @@
+// Copyright 2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Spec Build Tests
+
+This directory contains test source and expectation files for the `testBuild`
+script. The test specification files are:
+
+ * `testspec.adoc`
+ * `chapters/*.adoc`
+ * `chapters/commonvalidity/*.adoc`
+ * `appendices/*.adoc`
+ * `images/*.svg`
+
+The expectation files are:
+
+ * `expectations/*.html`
+ * `expectations/validusage.json`
+
+The `testBuild` script builds the test specficiation (`testspec.adoc`) in an
+array of configurations, such as Core (latest), Core 1.0, with all extensions,
+with a specific extension etc. Additionally, it extracts the VUs into
+validusage.json.
+
+Each build by `testBuild` is done in a separate directory under `gen-<build>`.
+In all cases except `gen-validusage`, the output is
+`gen-<build>/out/html/vkspec.html`. In the case of `gen-validusage`, the output
+is `gen-validusage/out/validition/validusage.json`.
+
+The primary reason for these tests is ensuring correctness of asciidoc
+extensions implemented in this repository. The `testBuild` script first builds
+all configurations, then verifies the results against the expectations.
+
+If a build itself regresses (and fails), the script will stop so the issue can
+be addressed after looking at the logs of the failing build. If the builds
+succeed but the output does not match the expectations, the diff is output for
+investigation.
+
+In some cases, the diff is small enough to be verified. Otherwise, each output
+in `gen-<build>/` needs to be manually reviewed to ensure the results are still
+correct; for example because the html is styled differently and the differences
+are as expected.
+
+If the mismatch between the output and expectations is expected, and the output
+is verified to be correct, update the expectations with:
+
+----
+$ ./update-expectations
+----
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/appendices/test.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/appendices/test.adoc
new file mode 100644
index 0000000..fecfecc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/appendices/test.adoc
@@ -0,0 +1,54 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_host_image_copy.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2186-02-28
+*Contributors*::
+  - Zabhash Ifessouy, Elgoog
+  - Htiaf Dnartske, Aroballoc
+  - Sreip Lleinad, AIDIVN
+
+=== Description
+
+Sed risus pretium quam vulputate dignissim suspendisse in est ante. Mauris
+commodo quis imperdiet massa tincidunt nunc pulvinar. Odio morbi quis commodo
+odio aenean sed. Quam adipiscing vitae proin sagittis nisl rhoncus. Vel
+facilisis volutpat est velit egestas dui. Consequat id porta nibh venenatis
+cras sed felis. Ac tortor dignissim convallis aenean et tortor. Amet porttitor
+eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas
+sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci
+phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis
+scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque
+sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam
+vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi.
+Tincidunt arcu non sodales neque.
+
+include::{generated}/interfaces/VK_EXT_host_image_copy.adoc[]
+
+=== Issues
+
+1) Natoque penatibus et magnis dis parturient montes nascetur.
+
+*RESOLVED*: Iaculis eu non diam phasellus vestibulum. Consequat nisl vel
+pretium lectus quam. Euismod in pellentesque massa placerat duis ultricies
+lacus sed turpis. Ullamcorper eget nulla facilisi etiam dignissim diam quis
+enim. Id velit ut tortor pretium viverra suspendisse potenti.
+
+2) Faucibus in ornare quam viverra orci sagittis eu volutpat?
+
+*RESOLVED*: Eu facilisis sed odio morbi quis commodo. Pharetra magna ac
+placerat vestibulum lectus mauris. Ac felis donec et odio pellentesque diam
+volutpat commodo sed.
+
+=== Version History
+
+  * Revision 0, 2173-05-30 (Htiaf Dnartske)
+  ** Malesuada pellentesque elit eget gravida cum sociis natoque
+
+  * Revision 1, 2185-12-01 (Zabhash Ifessouy)
+  ** Id leo in vitae turpis massa sed elementum
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/dolor.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/dolor.adoc
new file mode 100644
index 0000000..d3af94f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/dolor.adoc
@@ -0,0 +1,28 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkBufferImageCopy*, VkMemoryToImageCopy* and VkImageToMemoryCopy*
+// structs
+// This relies on additional attributes {bufferrowlength} and
+// {bufferimageheight} set by the command which includes this file, specifying
+// the type of the non-image target of the copy (which is either buffer* or
+// memory*).
+
+  * [[VUID-{refpage}-{bufferrowlength}-99101]]
+    pname:{bufferrowlength} must: be `0`, or greater than or equal to the
+    pname:width member of pname:imageExtent
+  * [[VUID-{refpage}-{bufferimageheight}-99102]]
+    pname:{bufferimageheight} must: be `0`, or greater than or equal to the
+    pname:height member of pname:imageExtent
+  * [[VUID-{refpage}-aspectMask-99103]]
+    The pname:aspectMask member of pname:imageSubresource must: only have a
+    single bit set
+  * [[VUID-{refpage}-imageExtent-96659]]
+    pname:imageExtent.width must: not be 0
+  * [[VUID-{refpage}-imageExtent-96660]]
+    pname:imageExtent.height must: not be 0
+  * [[VUID-{refpage}-imageExtent-96661]]
+    pname:imageExtent.depth must: not be 0
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/ipsum.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/ipsum.adoc
new file mode 100644
index 0000000..8bcfdc5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/ipsum.adoc
@@ -0,0 +1,43 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vk*Copy* commands that have image as source and/or destination.
+// This relies on an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+// Additionally, it relies on the {imagesubresource} attribute to specify the
+// field in pRegions corresponding to {imageparam}
+
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-97965]]
+    If pname:{imageparam} is non-sparse then it must: be bound completely
+    and contiguously to a single sname:VkDeviceMemory object
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-97966]]
+    If pname:{imageparam} is non-sparse then the image or the specified
+    _disjoint_ plane must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imagesubresource}-97967]]
+    The pname:{imagesubresource}.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:{imageparam} was created
+  * [[VUID-{refpage}-{imagesubresource}-97968]]
+    The [eq]#pname:{imagesubresource}.baseArrayLayer {plus}
+    pname:{imageSubresource}.layerCount# of each element of pname:pRegions
+ifdef::VK_KHR_maintenance5[]
+    , if pname:{imageSubresource}.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS and <<features-maintenance5,
+    pname:maintenance5>> is not enabled,
+endif::VK_KHR_maintenance5[]
+    must: be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:{imageparam} was created
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-{imageparam}-97969]]
+    pname:{imageparam} must: not have been created with pname:flags
+    containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/lorem.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/lorem.adoc
new file mode 100644
index 0000000..d00d267
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/commonvalidity/lorem.adoc
@@ -0,0 +1,39 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-91828]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcBuffer must: not be a protected buffer
+  * [[VUID-{refpage}-commandBuffer-91829]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-91830]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-97737]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, the
+    pname:bufferOffset member of any element of {regionsparam} must: be a
+    multiple of `4`
+  * [[VUID-{refpage}-imageOffset-97738]]
+    The pname:imageOffset and pname:imageExtent members of each element of
+    {regionsparam} must: respect the image transfer granularity requirements
+    of pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+  * [[VUID-{refpage}-commandBuffer-97739]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT, for each element of {regionsparam}, the
+    pname:aspectMask member of pname:imageSubresource must: not be
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/ipsum.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/ipsum.adoc
new file mode 100644
index 0000000..88a9109
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/ipsum.adoc
@@ -0,0 +1,122 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[hic]]
+= Host Image Copy
+
+Tristique senectus et netus et malesuada. Tempor commodo ullamcorper a lacus
+vestibulum sed arcu. Tellus in metus vulputate eu scelerisque. Lectus sit amet
+est placerat in. Quam adipiscing vitae proin sagittis. Mattis pellentesque id
+nibh tortor id aliquet lectus proin nibh. Sociis natoque penatibus et magnis
+dis parturient montes nascetur. Lobortis mattis aliquam faucibus purus in massa
+tempor nec. Ut ornare lectus sit amet est placerat in. Integer quis auctor elit
+sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus
+semper eget duis. Sit amet consectetur adipiscing elit duis tristique. Semper
+risus in hendrerit gravida rutrum. Lorem ipsum dolor sit amet consectetur
+adipiscing elit duis. Varius morbi enim nunc faucibus a pellentesque sit amet.
+Praesent semper feugiat nibh sed pulvinar proin. Porttitor leo a diam
+sollicitudin tempor id. In massa tempor nec feugiat nisl pretium fusce id. Amet
+venenatis urna cursus eget nunc scelerisque.
+
+[open,refpage='vkCopyMemoryToImageEXT',desc='Copy data from host memory into an image',type='protos']
+--
+:refpage: vkCopyMemoryToImageEXT
+
+Cursus sit amet dictum sit amet justo:
+
+include::{generated}/api/protos/vkCopyMemoryToImageEXT.adoc[]
+
+  * pname:device Quis viverra nibh cras pulvinar mattis nunc
+    pname:pCopyMemoryToImageInfo->dstImage.
+  * pname:pCopyMemoryToImageInfo Est velit egestas dui id ornare. Tristique nulla aliquet enim tortor at
+    slink:VkCopyMemoryToImageInfoEXT structure.
+
+Turpis egestas pretium aenean pharetra flink:vkCmdCopyBufferToImage2, magna ac placerat vestibulum lectus.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058]]
+    Risus quis varius <<features-hostImageCopy, pname:hostImageCopy>> quam
+    quisque id diam vel
+****
+
+include::{generated}/validity/protos/vkCopyMemoryToImageEXT.adoc[]
+--
+
+[open,refpage='VkCopyMemoryToImageInfoEXT',desc='Structure specifying parameters of host memory to image copy command',type='structs']
+--
+:refpage: VkCopyMemoryToImageInfoEXT
+:imageparam: dstImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+Morbi tincidunt augue interdum velit euismod in pellentesque massa sname:VkCopyMemoryToImageInfoEXT structure:
+
+include::{generated}/api/structs/VkCopyMemoryToImageInfoEXT.adoc[]
+
+  * pname:sType on enim praesent elementum facilisis.
+  * pname:pNext Ultricies tristique `NULL` nulla aliquet enim tortor.
+  * pname:flags Volutpat ac tincidunt vitae semper.
+  * pname:dstImage Orci eu lobortis elementum nibh.
+  * pname:dstImageLayout Euismod elementum nisi quis eleifend quam adipiscing vitae proin.
+  * pname:regionCount Et netus et malesuada fames ac turpis egestas.
+  * pname:pRegions Lorem ipsum dolor sitr slink:VkMemoryToImageCopyEXT amet consectetu.
+
+fname:vkCopyMemoryToImageEXT pulvinar neque laoreet suspendisse interdum
+consectetur libero. Id porta nibh venenatis cras sed felis. Massa vitae tortor
+condimentum lacinia quis.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/ipsum.adoc[]
+  * [[VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059]]
+    pname:dstImageLayout must: Lorem ipsum dolor sit amet, pname:dstImage
+    consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+    pname:pRegions et dolore magna aliqua
+****
+
+include::{generated}/validity/structs/VkCopyMemoryToImageInfoEXT.adoc[]
+--
+
+[open,refpage='VkMemoryToImageCopyEXT',desc='Structure specifying a host memory to image copy operation',type='structs']
+--
+:refpage: VkMemoryToImageCopyEXT
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+Congue eu consequat ac felis donec et odio. Enim nec
+slink:VkCopyMemoryToImageInfoEXT::pname:pRegions dui nunc mattis enim:
+
+include::{generated}/api/structs/VkMemoryToImageCopyEXT.adoc[]
+
+  * pname:sType Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+  * pname:pNext Nam libero justo laoreet sit amet.
+  * pname:pHostPointer Lacus luctus accumsan tortor posuere.
+  * pname:memoryRowLength and pname:memoryImageHeight Ultrices tincidunt arcu
+    non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam
+    etiam pname:imageExtent.
+  * pname:imageSubresource Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.
+  * pname:imageOffset Vestibulum morbi blandit cursus pname:x, pname:y, pname:z
+    risus at ultrices mi tempus imperdiet.
+  * pname:imageExtent Dignissim cras tincidunt lobortis feugiat vivamus at
+    pname:width, pname:height and pname:depth augue eget arcu.
+
+Ultricies mi eget mauris pharetra. Ac turpis slink:VkBufferImageCopy2 egestas
+maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit
+aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit
+eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque
+volutpat ac tincidunt vitae
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryToImageCopyEXT-pHostPointer-99061]]
+    pname:pHostPointer must: Nisl condimentum id venenatis a condimentum vitae
+include::{chapters}/commonvalidity/dolor.adoc[]
+****
+
+include::{generated}/validity/structs/VkMemoryToImageCopyEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/lorem.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/lorem.adoc
new file mode 100644
index 0000000..5931319
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/lorem.adoc
@@ -0,0 +1,161 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[lorem]]
+= Lorem
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.
+
+Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.
+
+[[lorem-subchapter]]
+== Lorem Subchapter
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+[open,refpage='vkCmdCopyBufferToImage2',desc='Copy data from a buffer into an image',type='protos',alias='vkCmdCopyBufferToImage2KHR']
+--
+:refpage: vkCmdCopyBufferToImage2
+
+Sed risus pretium quam vulputate dignissim suspendisse in est ante:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdCopyBufferToImage2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdCopyBufferToImage2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.
+  * pname:pCopyBufferToImageInfo Odio morbi quis commodo odio aenean sed slink:VkCopyBufferToImageInfo2.
+
+Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.
+
+:regionsparam: pname:pCopyBufferToImageInfo->pRegions
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/lorem.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBufferToImage2.adoc[]
+--
+
+[open,refpage='VkCopyBufferToImageInfo2',desc='Structure specifying parameters of a buffer to image copy command',type='structs',alias='VkCopyBufferToImageInfo2KHR']
+--
+:refpage: VkCopyBufferToImageInfo2
+
+Sed risus pretium quam vulputate dignissim suspendisse in est ante sname:VkCopyBufferToImageInfo2:
+
+include::{generated}/api/structs/VkCopyBufferToImageInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCopyBufferToImageInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType Natoque penatibus et magnis dis parturient montes nascetur.
+  * pname:pNext Iaculis eu non diam phasellus vestibulum.
+  * pname:srcBuffer Consequat nisl vel pretium lectus quam.
+  * pname:dstImage Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.
+  * pname:dstImageLayout Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.
+  * pname:regionCount Vel facilisis volutpat est velit egestas dui.
+  * pname:pRegions Consequat id porta nibh venenatis cras sed felis.
+
+:imageparam: dstImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+:regionsparam: pname:pRegions
+
+.Valid Usage
+****
+  * [[VUID-VkCopyBufferToImageInfo2-pRegions-94565]]
+    Id velit ut tortor pretium viverra suspendisse potenti pname:pRegions
+ifdef::VK_QCOM_rotated_copy_commands[]
+    faucibus in ornare quam viverra orci sagittis eu volutpat
+    pname:pNext chain
+endif::VK_QCOM_rotated_copy_commands[]
+    pname:imageSubresource eu facilisis sed must: odio morbi quis commodo
+    pname:dstImage
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554]]
+    Pharetra magna ac placerat vestibulum lectus mauris pname:pRegions
+    ac felis donec et odio pellentesque diam volutpat commodo sed pname:pNext chain
+    must: malesuada pellentesque elit <<lorem-subchapter>> eget gravida cum sociis natoque
+    pname:dstImage
+endif::VK_QCOM_rotated_copy_commands[]
+include::{chapters}/commonvalidity/ipsum.adoc[]
+include::{chapters}/commonvalidity/dolor.adoc[]
+  * [[VUID-VkCopyBufferToImageInfo2-pRegions-96223]]
+    Id leo in vitae turpis massa sed elementum
+    pname:imageOffset.x and [eq]#(pname:imageExtent.width {plus}
+    pname:imageOffset.x)# must: gravida dictum fusce ut placerat orci nulla
+    pellentesque dignissim enim pname:imageSubresource of pname:dstImage
+****
+
+include::{generated}/validity/structs/VkCopyBufferToImageInfo2.adoc[]
+--
+
+[open,refpage='VkBufferImageCopy2',desc='Structure specifying a buffer image copy operation',type='structs',alias='VkBufferImageCopy2KHR']
+--
+:refpage: VkBufferImageCopy2
+
+Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim flink:vkCmdCopyBufferToImage2:
+
+include::{generated}/api/structs/VkBufferImageCopy2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferImageCopy2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType Tristique senectus et netus et malesuada.
+  * pname:pNext Tempor commodo ullamcorper a lacus vestibulum sed arcu.
+  * pname:bufferOffset Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.
+  * pname:bufferRowLength and pname:bufferImageHeight Quam adipiscing vitae
+    proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+    nibh pname:imageExtent.
+  * pname:imageSubresource Sociis natoque penatibus et magnis dis parturient montes nascetur.
+  * pname:imageOffset Lobortis mattis aliquam faucibus purus in massa tempor nec.
+  * pname:imageExtent Ut ornare lectus sit amet est placerat in.
+
+Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.
+
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dolor.adoc[]
+****
+
+include::{generated}/validity/structs/VkBufferImageCopy2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/chapters/preamble.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/preamble.adoc
new file mode 100644
index 0000000..cefb167
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/chapters/preamble.adoc
@@ -0,0 +1,12 @@
+// Copyright 2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Note that this file is used to pull the Khronos Specification Copyright
+// into the output documents generated by Khronos. This file itself is under
+// CC-BY-4.0, but the output specifications are not.
+
+[[preamble]]
+= Preamble
+
+include::{config}/copyright-spec.adoc[]
+
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all-1.0.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all-1.0.html
new file mode 100644
index 0000000..02463e1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all-1.0.html
@@ -0,0 +1,2428 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 - (with all registered extensions)</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - (with all registered extensions)</h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#hic">3. Host Image Copy</a></li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2KHR</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-videocoding" href="#VUID-vkCmdCopyBufferToImage2-videocoding"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-videocoding</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a video coding scope</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginVideoCodingKHR">Video Coding Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkCopyBufferToImageInfo2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkCopyBufferToImageInfo2</span> <span class="n">VkCopyBufferToImageInfo2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+faucibus in ornare quam viverra orci sagittis eu volutpat
+<code>pNext</code> chain
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554" href="#VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554</span><br>
+
+Pharetra magna ac placerat vestibulum lectus mauris <code>pRegions</code>
+ac felis donec et odio pellentesque diam volutpat commodo sed <code>pNext</code> chain
+<strong class="purple">must</strong> malesuada pellentesque elit <a href="#lorem-subchapter">Lorem Subchapter</a> eget gravida cum sociis natoque
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97966" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97966"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+, if <code>imageSubresource.layerCount</code> is not
+<code>VK_REMAINING_ARRAY_LAYERS</code> and <a href="#features-maintenance5"><code>maintenance5</code></a> is not enabled,
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97969" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97969"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97969</span><br>
+
+<code>dstImage</code> <strong class="purple">must</strong> not have been created with <code>flags</code>
+containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2KHR">vkCmdCopyBufferToImage2KHR</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkBufferImageCopy2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkBufferImageCopy2</span> <span class="n">VkBufferImageCopy2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href="#VkCopyCommandTransformInfoQCOM">VkCopyCommandTransformInfoQCOM</a></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-unique" href="#VUID-VkBufferImageCopy2-sType-unique"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-unique</span><br>
+ The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class="purple">must</strong> be unique</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="hic"><a class="anchor" href="#hic"></a>3. Host Image Copy</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Tristique senectus et netus et malesuada. Tempor commodo ullamcorper a lacus
+vestibulum sed arcu. Tellus in metus vulputate eu scelerisque. Lectus sit amet
+est placerat in. Quam adipiscing vitae proin sagittis. Mattis pellentesque id
+nibh tortor id aliquet lectus proin nibh. Sociis natoque penatibus et magnis
+dis parturient montes nascetur. Lobortis mattis aliquam faucibus purus in massa
+tempor nec. Ut ornare lectus sit amet est placerat in. Integer quis auctor elit
+sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus
+semper eget duis. Sit amet consectetur adipiscing elit duis tristique. Semper
+risus in hendrerit gravida rutrum. Lorem ipsum dolor sit amet consectetur
+adipiscing elit duis. Varius morbi enim nunc faucibus a pellentesque sit amet.
+Praesent semper feugiat nibh sed pulvinar proin. Porttitor leo a diam
+sollicitudin tempor id. In massa tempor nec feugiat nisl pretium fusce id. Amet
+venenatis urna cursus eget nunc scelerisque.</p>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Cursus sit amet dictum sit amet justo:</p>
+</div>
+<div id="vkCopyMemoryToImageEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="n">VkResult</span> <span class="nf">vkCopyMemoryToImageEXT</span><span class="p">(</span>
+    <span class="n">VkDevice</span>                                    <span class="n">device</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="o">*</span>           <span class="n">pCopyMemoryToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>device</code> Quis viverra nibh cras pulvinar mattis nunc
+<code>pCopyMemoryToImageInfo-&gt;dstImage</code>.</p>
+</li>
+<li>
+<p><code>pCopyMemoryToImageInfo</code> Est velit egestas dui id ornare. Tristique nulla aliquet enim tortor at
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Turpis egestas pretium aenean pharetra <a href="#vkCmdCopyBufferToImage2KHR">vkCmdCopyBufferToImage2KHR</a>, magna ac placerat vestibulum lectus.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058" href="#VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058</span><br>
+
+Risus quis varius <a href="#features-hostImageCopy"><code>hostImageCopy</code></a> quam
+quisque id diam vel</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-device-parameter" href="#VUID-vkCopyMemoryToImageEXT-device-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-device-parameter</span><br>
+ <code>device</code> <strong class="purple">must</strong> be a valid <a href="#VkDevice">VkDevice</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter" href="#VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter</span><br>
+ <code>pCopyMemoryToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Return Codes</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="#fundamentals-successcodes">Success</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_SUCCESS</code></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><a href="#fundamentals-errorcodes">Failure</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_ERROR_INITIALIZATION_FAILED</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_HOST_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_MEMORY_MAP_FAILED</code></p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Morbi tincidunt augue interdum velit euismod in pellentesque massa <code>VkCopyMemoryToImageInfoEXT</code> structure:</p>
+</div>
+<div id="VkCopyMemoryToImageInfoEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyMemoryToImageInfoEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>                  <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                      <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkHostImageCopyFlagsEXT</span>          <span class="n">flags</span><span class="p">;</span>
+    <span class="n">VkImage</span>                          <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                    <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                         <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> on enim praesent elementum facilisis.</p>
+</li>
+<li>
+<p><code>pNext</code> Ultricies tristique <code>NULL</code> nulla aliquet enim tortor.</p>
+</li>
+<li>
+<p><code>flags</code> Volutpat ac tincidunt vitae semper.</p>
+</li>
+<li>
+<p><code>dstImage</code> Orci eu lobortis elementum nibh.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Euismod elementum nisi quis eleifend quam adipiscing vitae proin.</p>
+</li>
+<li>
+<p><code>regionCount</code> Et netus et malesuada fames ac turpis egestas.</p>
+</li>
+<li>
+<p><code>pRegions</code> Lorem ipsum dolor sitr <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> amet consectetu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><code>vkCopyMemoryToImageEXT</code> pulvinar neque laoreet suspendisse interdum
+consectetur libero. Id porta nibh venenatis cras sed felis. Massa vitae tortor
+condimentum lacinia quis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+, if <code>imageSubresource.layerCount</code> is not
+<code>VK_REMAINING_ARRAY_LAYERS</code> and <a href="#features-maintenance5"><code>maintenance5</code></a> is not enabled,
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969</span><br>
+
+<code>dstImage</code> <strong class="purple">must</strong> not have been created with <code>flags</code>
+containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059</span><br>
+
+<code>dstImageLayout</code> <strong class="purple">must</strong> Lorem ipsum dolor sit amet, <code>dstImage</code>
+consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+<code>pRegions</code> et dolore magna aliqua</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-sType-sType" href="#VUID-VkCopyMemoryToImageInfoEXT-sType-sType"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext" href="#VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-flags-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-flags-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-flags-parameter</span><br>
+ <code>flags</code> <strong class="purple">must</strong> be a valid combination of <a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a> values</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength" href="#VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Congue eu consequat ac felis donec et odio. Enim nec
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a>::<code>pRegions</code> dui nunc mattis enim:</p>
+</div>
+<div id="VkMemoryToImageCopyEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkMemoryToImageCopyEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pHostPointer</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.</p>
+</li>
+<li>
+<p><code>pNext</code> Nam libero justo laoreet sit amet.</p>
+</li>
+<li>
+<p><code>pHostPointer</code> Lacus luctus accumsan tortor posuere.</p>
+</li>
+<li>
+<p><code>memoryRowLength</code> and <code>memoryImageHeight</code> Ultrices tincidunt arcu
+non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam
+etiam <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Vestibulum morbi blandit cursus <code>x</code>, <code>y</code>, <code>z</code>
+risus at ultrices mi tempus imperdiet.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Dignissim cras tincidunt lobortis feugiat vivamus at
+<code>width</code>, <code>height</code> and <code>depth</code> augue eget arcu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ultricies mi eget mauris pharetra. Ac turpis <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> egestas
+maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit
+aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit
+eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque
+volutpat ac tincidunt vitae</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-99061" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-99061"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-99061</span><br>
+
+<code>pHostPointer</code> <strong class="purple">must</strong> Nisl condimentum id venenatis a condimentum vitae</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101" href="#VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101</span><br>
+
+<code>memoryRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102" href="#VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102</span><br>
+
+<code>memoryImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-aspectMask-99103" href="#VUID-VkMemoryToImageCopyEXT-aspectMask-99103"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96659" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96659"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96660" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96660"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96661" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96661"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-sType-sType" href="#VUID-VkMemoryToImageCopyEXT-sType-sType"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pNext-pNext" href="#VUID-VkMemoryToImageCopyEXT-pNext-pNext"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter</span><br>
+ <code>pHostPointer</code> <strong class="purple">must</strong> be a pointer value</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter" href="#VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+<div class="sect3">
+<h4 id="VK_EXT_host_image_copy"><a class="anchor" href="#VK_EXT_host_image_copy"></a>VK_EXT_host_image_copy</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>VK_EXT_host_image_copy</code></p>
+</dd>
+<dt class="hdlist1"><strong>Extension Type</strong></dt>
+<dd>
+<p>Device extension</p>
+</dd>
+<dt class="hdlist1"><strong>Registered Extension Number</strong></dt>
+<dd>
+<p>271</p>
+</dd>
+<dt class="hdlist1"><strong>Revision</strong></dt>
+<dd>
+<p>1</p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p><a href="#VK_KHR_get_physical_device_properties2">VK_KHR_get_physical_device_properties2</a><br>
+and<br>
+<a href="#VK_KHR_copy_commands2">VK_KHR_copy_commands2</a><br>
+and<br>
+<a href="#VK_KHR_format_feature_flags2">VK_KHR_format_feature_flags2</a><br></p>
+</div>
+</div>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Contact</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Shahbaz Youssefi <a href="https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_host_image_copy] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_host_image_copy extension*" target="_blank" rel="nofollow noopener"><span class="icon black"><i class="fa fa-github"></i></span>syoussefi</a></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Extension Proposal</strong></dt>
+<dd>
+<p><a href="https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_host_image_copy.adoc">VK_EXT_host_image_copy</a></p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_other_extension_metadata"><a class="anchor" href="#_other_extension_metadata"></a>Other Extension Metadata</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2186-02-28</p>
+</dd>
+<dt class="hdlist1"><strong>Contributors</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Zabhash Ifessouy, Elgoog</p>
+</li>
+<li>
+<p>Htiaf Dnartske, Aroballoc</p>
+</li>
+<li>
+<p>Sreip Lleinad, AIDIVN</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_description"><a class="anchor" href="#_description"></a>Description</h4>
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante. Mauris
+commodo quis imperdiet massa tincidunt nunc pulvinar. Odio morbi quis commodo
+odio aenean sed. Quam adipiscing vitae proin sagittis nisl rhoncus. Vel
+facilisis volutpat est velit egestas dui. Consequat id porta nibh venenatis
+cras sed felis. Ac tortor dignissim convallis aenean et tortor. Amet porttitor
+eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas
+sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci
+phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis
+scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque
+sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam
+vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi.
+Tincidunt arcu non sodales neque.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_commands"><a class="anchor" href="#_new_commands"></a>New Commands</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#vkCopyImageToImageEXT">vkCopyImageToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyImageToMemoryEXT">vkCopyImageToMemoryEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyMemoryToImageEXT">vkCopyMemoryToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkGetImageSubresourceLayout2EXT">vkGetImageSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p><a href="#vkTransitionImageLayoutEXT">vkTransitionImageLayoutEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_structures"><a class="anchor" href="#_new_structures"></a>New Structures</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkCopyImageToImageInfoEXT">VkCopyImageToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyImageToMemoryInfoEXT">VkCopyImageToMemoryInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkHostImageLayoutTransitionInfoEXT">VkHostImageLayoutTransitionInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageSubresource2EXT">VkImageSubresource2EXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageToMemoryCopyEXT">VkImageToMemoryCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkSubresourceLayout2EXT">VkSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p>Extending <a href="#VkImageFormatProperties2">VkImageFormatProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyDevicePerformanceQueryEXT">VkHostImageCopyDevicePerformanceQueryEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceFeatures2">VkPhysicalDeviceFeatures2</a>, <a href="#VkDeviceCreateInfo">VkDeviceCreateInfo</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyFeaturesEXT">VkPhysicalDeviceHostImageCopyFeaturesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceProperties2">VkPhysicalDeviceProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyPropertiesEXT">VkPhysicalDeviceHostImageCopyPropertiesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkSubresourceLayout2KHR">VkSubresourceLayout2KHR</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkSubresourceHostMemcpySizeEXT">VkSubresourceHostMemcpySizeEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enums"><a class="anchor" href="#_new_enums"></a>New Enums</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_bitmasks"><a class="anchor" href="#_new_bitmasks"></a>New Bitmasks</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagsEXT">VkHostImageCopyFlagsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enum_constants"><a class="anchor" href="#_new_enum_constants"></a>New Enum Constants</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME</code></p>
+</li>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION</code></p>
+</li>
+<li>
+<p>Extending <a href="#VkFormatFeatureFlagBits2">VkFormatFeatureFlagBits2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkImageUsageFlagBits">VkImageUsageFlagBits</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkStructureType">VkStructureType</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_issues"><a class="anchor" href="#_issues"></a>Issues</h4>
+<div class="paragraph">
+<p>1) Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Iaculis eu non diam phasellus vestibulum. Consequat nisl vel
+pretium lectus quam. Euismod in pellentesque massa placerat duis ultricies
+lacus sed turpis. Ullamcorper eget nulla facilisi etiam dignissim diam quis
+enim. Id velit ut tortor pretium viverra suspendisse potenti.</p>
+</div>
+<div class="paragraph">
+<p>2) Faucibus in ornare quam viverra orci sagittis eu volutpat?</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Eu facilisis sed odio morbi quis commodo. Pharetra magna ac
+placerat vestibulum lectus mauris. Ac felis donec et odio pellentesque diam
+volutpat commodo sed.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_version_history"><a class="anchor" href="#_version_history"></a>Version History</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 0, 2173-05-30 (Htiaf Dnartske)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Malesuada pellentesque elit eget gravida cum sociis natoque</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Revision 1, 2185-12-01 (Zabhash Ifessouy)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Id leo in vitae turpis massa sed elementum</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all.html
new file mode 100644
index 0000000..caffac8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/all.html
@@ -0,0 +1,2462 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 - (with all registered extensions)</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - (with all registered extensions)</h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#hic">3. Host Image Copy</a></li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent command</p>
+</div>
+<div id="vkCmdCopyBufferToImage2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2KHR</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91828" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91828"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91828</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>srcBuffer</code> <strong class="purple">must</strong> not be a protected buffer</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91829" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91829"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91829</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be a protected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91830" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91830"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91830</span><br>
+
+If <code>commandBuffer</code> is a protected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be an unprotected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-videocoding" href="#VUID-vkCmdCopyBufferToImage2-videocoding"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-videocoding</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a video coding scope</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginVideoCodingKHR">Video Coding Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkCopyBufferToImageInfo2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkCopyBufferToImageInfo2</span> <span class="n">VkCopyBufferToImageInfo2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+faucibus in ornare quam viverra orci sagittis eu volutpat
+<code>pNext</code> chain
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554" href="#VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554</span><br>
+
+Pharetra magna ac placerat vestibulum lectus mauris <code>pRegions</code>
+ac felis donec et odio pellentesque diam volutpat commodo sed <code>pNext</code> chain
+<strong class="purple">must</strong> malesuada pellentesque elit <a href="#lorem-subchapter">Lorem Subchapter</a> eget gravida cum sociis natoque
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97966" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97966"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+, if <code>imageSubresource.layerCount</code> is not
+<code>VK_REMAINING_ARRAY_LAYERS</code> and <a href="#features-maintenance5"><code>maintenance5</code></a> is not enabled,
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97969" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97969"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97969</span><br>
+
+<code>dstImage</code> <strong class="purple">must</strong> not have been created with <code>flags</code>
+containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2">vkCmdCopyBufferToImage2</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkBufferImageCopy2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkBufferImageCopy2</span> <span class="n">VkBufferImageCopy2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href="#VkCopyCommandTransformInfoQCOM">VkCopyCommandTransformInfoQCOM</a></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-unique" href="#VUID-VkBufferImageCopy2-sType-unique"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-unique</span><br>
+ The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class="purple">must</strong> be unique</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="hic"><a class="anchor" href="#hic"></a>3. Host Image Copy</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Tristique senectus et netus et malesuada. Tempor commodo ullamcorper a lacus
+vestibulum sed arcu. Tellus in metus vulputate eu scelerisque. Lectus sit amet
+est placerat in. Quam adipiscing vitae proin sagittis. Mattis pellentesque id
+nibh tortor id aliquet lectus proin nibh. Sociis natoque penatibus et magnis
+dis parturient montes nascetur. Lobortis mattis aliquam faucibus purus in massa
+tempor nec. Ut ornare lectus sit amet est placerat in. Integer quis auctor elit
+sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus
+semper eget duis. Sit amet consectetur adipiscing elit duis tristique. Semper
+risus in hendrerit gravida rutrum. Lorem ipsum dolor sit amet consectetur
+adipiscing elit duis. Varius morbi enim nunc faucibus a pellentesque sit amet.
+Praesent semper feugiat nibh sed pulvinar proin. Porttitor leo a diam
+sollicitudin tempor id. In massa tempor nec feugiat nisl pretium fusce id. Amet
+venenatis urna cursus eget nunc scelerisque.</p>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Cursus sit amet dictum sit amet justo:</p>
+</div>
+<div id="vkCopyMemoryToImageEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="n">VkResult</span> <span class="nf">vkCopyMemoryToImageEXT</span><span class="p">(</span>
+    <span class="n">VkDevice</span>                                    <span class="n">device</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="o">*</span>           <span class="n">pCopyMemoryToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>device</code> Quis viverra nibh cras pulvinar mattis nunc
+<code>pCopyMemoryToImageInfo-&gt;dstImage</code>.</p>
+</li>
+<li>
+<p><code>pCopyMemoryToImageInfo</code> Est velit egestas dui id ornare. Tristique nulla aliquet enim tortor at
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Turpis egestas pretium aenean pharetra <a href="#vkCmdCopyBufferToImage2">vkCmdCopyBufferToImage2</a>, magna ac placerat vestibulum lectus.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058" href="#VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058</span><br>
+
+Risus quis varius <a href="#features-hostImageCopy"><code>hostImageCopy</code></a> quam
+quisque id diam vel</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-device-parameter" href="#VUID-vkCopyMemoryToImageEXT-device-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-device-parameter</span><br>
+ <code>device</code> <strong class="purple">must</strong> be a valid <a href="#VkDevice">VkDevice</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter" href="#VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter</span><br>
+ <code>pCopyMemoryToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Return Codes</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="#fundamentals-successcodes">Success</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_SUCCESS</code></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><a href="#fundamentals-errorcodes">Failure</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_ERROR_INITIALIZATION_FAILED</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_HOST_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_MEMORY_MAP_FAILED</code></p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Morbi tincidunt augue interdum velit euismod in pellentesque massa <code>VkCopyMemoryToImageInfoEXT</code> structure:</p>
+</div>
+<div id="VkCopyMemoryToImageInfoEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyMemoryToImageInfoEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>                  <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                      <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkHostImageCopyFlagsEXT</span>          <span class="n">flags</span><span class="p">;</span>
+    <span class="n">VkImage</span>                          <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                    <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                         <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> on enim praesent elementum facilisis.</p>
+</li>
+<li>
+<p><code>pNext</code> Ultricies tristique <code>NULL</code> nulla aliquet enim tortor.</p>
+</li>
+<li>
+<p><code>flags</code> Volutpat ac tincidunt vitae semper.</p>
+</li>
+<li>
+<p><code>dstImage</code> Orci eu lobortis elementum nibh.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Euismod elementum nisi quis eleifend quam adipiscing vitae proin.</p>
+</li>
+<li>
+<p><code>regionCount</code> Et netus et malesuada fames ac turpis egestas.</p>
+</li>
+<li>
+<p><code>pRegions</code> Lorem ipsum dolor sitr <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> amet consectetu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><code>vkCopyMemoryToImageEXT</code> pulvinar neque laoreet suspendisse interdum
+consectetur libero. Id porta nibh venenatis cras sed felis. Massa vitae tortor
+condimentum lacinia quis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+, if <code>imageSubresource.layerCount</code> is not
+<code>VK_REMAINING_ARRAY_LAYERS</code> and <a href="#features-maintenance5"><code>maintenance5</code></a> is not enabled,
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969</span><br>
+
+<code>dstImage</code> <strong class="purple">must</strong> not have been created with <code>flags</code>
+containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059</span><br>
+
+<code>dstImageLayout</code> <strong class="purple">must</strong> Lorem ipsum dolor sit amet, <code>dstImage</code>
+consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+<code>pRegions</code> et dolore magna aliqua</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-sType-sType" href="#VUID-VkCopyMemoryToImageInfoEXT-sType-sType"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext" href="#VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-flags-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-flags-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-flags-parameter</span><br>
+ <code>flags</code> <strong class="purple">must</strong> be a valid combination of <a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a> values</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength" href="#VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Congue eu consequat ac felis donec et odio. Enim nec
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a>::<code>pRegions</code> dui nunc mattis enim:</p>
+</div>
+<div id="VkMemoryToImageCopyEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkMemoryToImageCopyEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pHostPointer</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.</p>
+</li>
+<li>
+<p><code>pNext</code> Nam libero justo laoreet sit amet.</p>
+</li>
+<li>
+<p><code>pHostPointer</code> Lacus luctus accumsan tortor posuere.</p>
+</li>
+<li>
+<p><code>memoryRowLength</code> and <code>memoryImageHeight</code> Ultrices tincidunt arcu
+non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam
+etiam <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Vestibulum morbi blandit cursus <code>x</code>, <code>y</code>, <code>z</code>
+risus at ultrices mi tempus imperdiet.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Dignissim cras tincidunt lobortis feugiat vivamus at
+<code>width</code>, <code>height</code> and <code>depth</code> augue eget arcu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ultricies mi eget mauris pharetra. Ac turpis <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> egestas
+maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit
+aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit
+eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque
+volutpat ac tincidunt vitae</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-99061" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-99061"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-99061</span><br>
+
+<code>pHostPointer</code> <strong class="purple">must</strong> Nisl condimentum id venenatis a condimentum vitae</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101" href="#VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101</span><br>
+
+<code>memoryRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102" href="#VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102</span><br>
+
+<code>memoryImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-aspectMask-99103" href="#VUID-VkMemoryToImageCopyEXT-aspectMask-99103"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96659" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96659"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96660" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96660"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96661" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96661"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-sType-sType" href="#VUID-VkMemoryToImageCopyEXT-sType-sType"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pNext-pNext" href="#VUID-VkMemoryToImageCopyEXT-pNext-pNext"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter</span><br>
+ <code>pHostPointer</code> <strong class="purple">must</strong> be a pointer value</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter" href="#VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+<div class="sect3">
+<h4 id="VK_EXT_host_image_copy"><a class="anchor" href="#VK_EXT_host_image_copy"></a>VK_EXT_host_image_copy</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>VK_EXT_host_image_copy</code></p>
+</dd>
+<dt class="hdlist1"><strong>Extension Type</strong></dt>
+<dd>
+<p>Device extension</p>
+</dd>
+<dt class="hdlist1"><strong>Registered Extension Number</strong></dt>
+<dd>
+<p>271</p>
+</dd>
+<dt class="hdlist1"><strong>Revision</strong></dt>
+<dd>
+<p>1</p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p><a href="#VK_KHR_get_physical_device_properties2">VK_KHR_get_physical_device_properties2</a><br>
+and<br>
+<a href="#VK_KHR_copy_commands2">VK_KHR_copy_commands2</a><br>
+and<br>
+<a href="#VK_KHR_format_feature_flags2">VK_KHR_format_feature_flags2</a><br></p>
+</div>
+</div>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Contact</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Shahbaz Youssefi <a href="https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_host_image_copy] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_host_image_copy extension*" target="_blank" rel="nofollow noopener"><span class="icon black"><i class="fa fa-github"></i></span>syoussefi</a></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Extension Proposal</strong></dt>
+<dd>
+<p><a href="https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_host_image_copy.adoc">VK_EXT_host_image_copy</a></p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_other_extension_metadata"><a class="anchor" href="#_other_extension_metadata"></a>Other Extension Metadata</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2186-02-28</p>
+</dd>
+<dt class="hdlist1"><strong>Contributors</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Zabhash Ifessouy, Elgoog</p>
+</li>
+<li>
+<p>Htiaf Dnartske, Aroballoc</p>
+</li>
+<li>
+<p>Sreip Lleinad, AIDIVN</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_description"><a class="anchor" href="#_description"></a>Description</h4>
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante. Mauris
+commodo quis imperdiet massa tincidunt nunc pulvinar. Odio morbi quis commodo
+odio aenean sed. Quam adipiscing vitae proin sagittis nisl rhoncus. Vel
+facilisis volutpat est velit egestas dui. Consequat id porta nibh venenatis
+cras sed felis. Ac tortor dignissim convallis aenean et tortor. Amet porttitor
+eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas
+sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci
+phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis
+scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque
+sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam
+vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi.
+Tincidunt arcu non sodales neque.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_commands"><a class="anchor" href="#_new_commands"></a>New Commands</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#vkCopyImageToImageEXT">vkCopyImageToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyImageToMemoryEXT">vkCopyImageToMemoryEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyMemoryToImageEXT">vkCopyMemoryToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkGetImageSubresourceLayout2EXT">vkGetImageSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p><a href="#vkTransitionImageLayoutEXT">vkTransitionImageLayoutEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_structures"><a class="anchor" href="#_new_structures"></a>New Structures</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkCopyImageToImageInfoEXT">VkCopyImageToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyImageToMemoryInfoEXT">VkCopyImageToMemoryInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkHostImageLayoutTransitionInfoEXT">VkHostImageLayoutTransitionInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageSubresource2EXT">VkImageSubresource2EXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageToMemoryCopyEXT">VkImageToMemoryCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkSubresourceLayout2EXT">VkSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p>Extending <a href="#VkImageFormatProperties2">VkImageFormatProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyDevicePerformanceQueryEXT">VkHostImageCopyDevicePerformanceQueryEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceFeatures2">VkPhysicalDeviceFeatures2</a>, <a href="#VkDeviceCreateInfo">VkDeviceCreateInfo</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyFeaturesEXT">VkPhysicalDeviceHostImageCopyFeaturesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceProperties2">VkPhysicalDeviceProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyPropertiesEXT">VkPhysicalDeviceHostImageCopyPropertiesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkSubresourceLayout2KHR">VkSubresourceLayout2KHR</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkSubresourceHostMemcpySizeEXT">VkSubresourceHostMemcpySizeEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enums"><a class="anchor" href="#_new_enums"></a>New Enums</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_bitmasks"><a class="anchor" href="#_new_bitmasks"></a>New Bitmasks</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagsEXT">VkHostImageCopyFlagsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enum_constants"><a class="anchor" href="#_new_enum_constants"></a>New Enum Constants</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME</code></p>
+</li>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION</code></p>
+</li>
+<li>
+<p>Extending <a href="#VkFormatFeatureFlagBits2">VkFormatFeatureFlagBits2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkImageUsageFlagBits">VkImageUsageFlagBits</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkStructureType">VkStructureType</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_issues"><a class="anchor" href="#_issues"></a>Issues</h4>
+<div class="paragraph">
+<p>1) Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Iaculis eu non diam phasellus vestibulum. Consequat nisl vel
+pretium lectus quam. Euismod in pellentesque massa placerat duis ultricies
+lacus sed turpis. Ullamcorper eget nulla facilisi etiam dignissim diam quis
+enim. Id velit ut tortor pretium viverra suspendisse potenti.</p>
+</div>
+<div class="paragraph">
+<p>2) Faucibus in ornare quam viverra orci sagittis eu volutpat?</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Eu facilisis sed odio morbi quis commodo. Pharetra magna ac
+placerat vestibulum lectus mauris. Ac felis donec et odio pellentesque diam
+volutpat commodo sed.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_version_history"><a class="anchor" href="#_version_history"></a>Version History</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 0, 2173-05-30 (Htiaf Dnartske)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Malesuada pellentesque elit eget gravida cum sociis natoque</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Revision 1, 2185-12-01 (Zabhash Ifessouy)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Id leo in vitae turpis massa sed elementum</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/copy2-1.0.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/copy2-1.0.html
new file mode 100644
index 0000000..f3b5187
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/copy2-1.0.html
@@ -0,0 +1,1679 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 - (with VK_KHR_copy_commands2, VK_KHR_get_physical_device_properties2)</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - (with VK_KHR_copy_commands2, VK_KHR_get_physical_device_properties2)</h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2KHR</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkCopyBufferToImageInfo2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkCopyBufferToImageInfo2</span> <span class="n">VkCopyBufferToImageInfo2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97965" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97965"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97965</span><br>
+
+If <code>dstImage</code> is non-sparse then it <strong class="purple">must</strong> be bound completely
+and contiguously to a single <code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2KHR">vkCmdCopyBufferToImage2KHR</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkBufferImageCopy2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkBufferImageCopy2</span> <span class="n">VkBufferImageCopy2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core-1.0.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core-1.0.html
new file mode 100644
index 0000000..3925c3d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core-1.0.html
@@ -0,0 +1,978 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 -</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - </h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core.html
new file mode 100644
index 0000000..bab9977
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/core.html
@@ -0,0 +1,1685 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 -</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - </h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91828" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91828"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91828</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>srcBuffer</code> <strong class="purple">must</strong> not be a protected buffer</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91829" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91829"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91829</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be a protected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91830" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91830"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91830</span><br>
+
+If <code>commandBuffer</code> is a protected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be an unprotected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97966" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97966"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2">vkCmdCopyBufferToImage2</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic-1.0.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic-1.0.html
new file mode 100644
index 0000000..a2fb8f9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic-1.0.html
@@ -0,0 +1,2389 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 - (with VK_EXT_host_image_copy, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2, VK_KHR_get_physical_device_properties2)</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - (with VK_EXT_host_image_copy, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2, VK_KHR_get_physical_device_properties2)</h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#hic">3. Host Image Copy</a></li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2KHR</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkCopyBufferToImageInfo2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkCopyBufferToImageInfo2</span> <span class="n">VkCopyBufferToImageInfo2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97965" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97965"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97965</span><br>
+
+If <code>dstImage</code> is non-sparse then it <strong class="purple">must</strong> be bound completely
+and contiguously to a single <code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2KHR">vkCmdCopyBufferToImage2KHR</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkBufferImageCopy2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkBufferImageCopy2</span> <span class="n">VkBufferImageCopy2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="hic"><a class="anchor" href="#hic"></a>3. Host Image Copy</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Tristique senectus et netus et malesuada. Tempor commodo ullamcorper a lacus
+vestibulum sed arcu. Tellus in metus vulputate eu scelerisque. Lectus sit amet
+est placerat in. Quam adipiscing vitae proin sagittis. Mattis pellentesque id
+nibh tortor id aliquet lectus proin nibh. Sociis natoque penatibus et magnis
+dis parturient montes nascetur. Lobortis mattis aliquam faucibus purus in massa
+tempor nec. Ut ornare lectus sit amet est placerat in. Integer quis auctor elit
+sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus
+semper eget duis. Sit amet consectetur adipiscing elit duis tristique. Semper
+risus in hendrerit gravida rutrum. Lorem ipsum dolor sit amet consectetur
+adipiscing elit duis. Varius morbi enim nunc faucibus a pellentesque sit amet.
+Praesent semper feugiat nibh sed pulvinar proin. Porttitor leo a diam
+sollicitudin tempor id. In massa tempor nec feugiat nisl pretium fusce id. Amet
+venenatis urna cursus eget nunc scelerisque.</p>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Cursus sit amet dictum sit amet justo:</p>
+</div>
+<div id="vkCopyMemoryToImageEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="n">VkResult</span> <span class="nf">vkCopyMemoryToImageEXT</span><span class="p">(</span>
+    <span class="n">VkDevice</span>                                    <span class="n">device</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="o">*</span>           <span class="n">pCopyMemoryToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>device</code> Quis viverra nibh cras pulvinar mattis nunc
+<code>pCopyMemoryToImageInfo-&gt;dstImage</code>.</p>
+</li>
+<li>
+<p><code>pCopyMemoryToImageInfo</code> Est velit egestas dui id ornare. Tristique nulla aliquet enim tortor at
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Turpis egestas pretium aenean pharetra <a href="#vkCmdCopyBufferToImage2KHR">vkCmdCopyBufferToImage2KHR</a>, magna ac placerat vestibulum lectus.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058" href="#VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058</span><br>
+
+Risus quis varius <a href="#features-hostImageCopy"><code>hostImageCopy</code></a> quam
+quisque id diam vel</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-device-parameter" href="#VUID-vkCopyMemoryToImageEXT-device-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-device-parameter</span><br>
+ <code>device</code> <strong class="purple">must</strong> be a valid <a href="#VkDevice">VkDevice</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter" href="#VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter</span><br>
+ <code>pCopyMemoryToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Return Codes</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="#fundamentals-successcodes">Success</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_SUCCESS</code></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><a href="#fundamentals-errorcodes">Failure</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_ERROR_INITIALIZATION_FAILED</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_HOST_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_MEMORY_MAP_FAILED</code></p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Morbi tincidunt augue interdum velit euismod in pellentesque massa <code>VkCopyMemoryToImageInfoEXT</code> structure:</p>
+</div>
+<div id="VkCopyMemoryToImageInfoEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyMemoryToImageInfoEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>                  <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                      <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkHostImageCopyFlagsEXT</span>          <span class="n">flags</span><span class="p">;</span>
+    <span class="n">VkImage</span>                          <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                    <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                         <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> on enim praesent elementum facilisis.</p>
+</li>
+<li>
+<p><code>pNext</code> Ultricies tristique <code>NULL</code> nulla aliquet enim tortor.</p>
+</li>
+<li>
+<p><code>flags</code> Volutpat ac tincidunt vitae semper.</p>
+</li>
+<li>
+<p><code>dstImage</code> Orci eu lobortis elementum nibh.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Euismod elementum nisi quis eleifend quam adipiscing vitae proin.</p>
+</li>
+<li>
+<p><code>regionCount</code> Et netus et malesuada fames ac turpis egestas.</p>
+</li>
+<li>
+<p><code>pRegions</code> Lorem ipsum dolor sitr <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> amet consectetu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><code>vkCopyMemoryToImageEXT</code> pulvinar neque laoreet suspendisse interdum
+consectetur libero. Id porta nibh venenatis cras sed felis. Massa vitae tortor
+condimentum lacinia quis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97965" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97965"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97965</span><br>
+
+If <code>dstImage</code> is non-sparse then it <strong class="purple">must</strong> be bound completely
+and contiguously to a single <code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059</span><br>
+
+<code>dstImageLayout</code> <strong class="purple">must</strong> Lorem ipsum dolor sit amet, <code>dstImage</code>
+consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+<code>pRegions</code> et dolore magna aliqua</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-sType-sType" href="#VUID-VkCopyMemoryToImageInfoEXT-sType-sType"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext" href="#VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-flags-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-flags-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-flags-parameter</span><br>
+ <code>flags</code> <strong class="purple">must</strong> be a valid combination of <a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a> values</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength" href="#VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Congue eu consequat ac felis donec et odio. Enim nec
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a>::<code>pRegions</code> dui nunc mattis enim:</p>
+</div>
+<div id="VkMemoryToImageCopyEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkMemoryToImageCopyEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pHostPointer</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.</p>
+</li>
+<li>
+<p><code>pNext</code> Nam libero justo laoreet sit amet.</p>
+</li>
+<li>
+<p><code>pHostPointer</code> Lacus luctus accumsan tortor posuere.</p>
+</li>
+<li>
+<p><code>memoryRowLength</code> and <code>memoryImageHeight</code> Ultrices tincidunt arcu
+non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam
+etiam <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Vestibulum morbi blandit cursus <code>x</code>, <code>y</code>, <code>z</code>
+risus at ultrices mi tempus imperdiet.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Dignissim cras tincidunt lobortis feugiat vivamus at
+<code>width</code>, <code>height</code> and <code>depth</code> augue eget arcu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ultricies mi eget mauris pharetra. Ac turpis <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> egestas
+maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit
+aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit
+eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque
+volutpat ac tincidunt vitae</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-99061" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-99061"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-99061</span><br>
+
+<code>pHostPointer</code> <strong class="purple">must</strong> Nisl condimentum id venenatis a condimentum vitae</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101" href="#VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101</span><br>
+
+<code>memoryRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102" href="#VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102</span><br>
+
+<code>memoryImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-aspectMask-99103" href="#VUID-VkMemoryToImageCopyEXT-aspectMask-99103"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96659" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96659"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96660" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96660"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96661" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96661"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-sType-sType" href="#VUID-VkMemoryToImageCopyEXT-sType-sType"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pNext-pNext" href="#VUID-VkMemoryToImageCopyEXT-pNext-pNext"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter</span><br>
+ <code>pHostPointer</code> <strong class="purple">must</strong> be a pointer value</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter" href="#VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+<div class="sect3">
+<h4 id="VK_EXT_host_image_copy"><a class="anchor" href="#VK_EXT_host_image_copy"></a>VK_EXT_host_image_copy</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>VK_EXT_host_image_copy</code></p>
+</dd>
+<dt class="hdlist1"><strong>Extension Type</strong></dt>
+<dd>
+<p>Device extension</p>
+</dd>
+<dt class="hdlist1"><strong>Registered Extension Number</strong></dt>
+<dd>
+<p>271</p>
+</dd>
+<dt class="hdlist1"><strong>Revision</strong></dt>
+<dd>
+<p>1</p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p><a href="#VK_KHR_get_physical_device_properties2">VK_KHR_get_physical_device_properties2</a><br>
+and<br>
+<a href="#VK_KHR_copy_commands2">VK_KHR_copy_commands2</a><br>
+and<br>
+<a href="#VK_KHR_format_feature_flags2">VK_KHR_format_feature_flags2</a><br></p>
+</div>
+</div>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Contact</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Shahbaz Youssefi <a href="https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_host_image_copy] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_host_image_copy extension*" target="_blank" rel="nofollow noopener"><span class="icon black"><i class="fa fa-github"></i></span>syoussefi</a></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Extension Proposal</strong></dt>
+<dd>
+<p><a href="https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_host_image_copy.adoc">VK_EXT_host_image_copy</a></p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_other_extension_metadata"><a class="anchor" href="#_other_extension_metadata"></a>Other Extension Metadata</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2186-02-28</p>
+</dd>
+<dt class="hdlist1"><strong>Contributors</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Zabhash Ifessouy, Elgoog</p>
+</li>
+<li>
+<p>Htiaf Dnartske, Aroballoc</p>
+</li>
+<li>
+<p>Sreip Lleinad, AIDIVN</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_description"><a class="anchor" href="#_description"></a>Description</h4>
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante. Mauris
+commodo quis imperdiet massa tincidunt nunc pulvinar. Odio morbi quis commodo
+odio aenean sed. Quam adipiscing vitae proin sagittis nisl rhoncus. Vel
+facilisis volutpat est velit egestas dui. Consequat id porta nibh venenatis
+cras sed felis. Ac tortor dignissim convallis aenean et tortor. Amet porttitor
+eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas
+sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci
+phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis
+scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque
+sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam
+vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi.
+Tincidunt arcu non sodales neque.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_commands"><a class="anchor" href="#_new_commands"></a>New Commands</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#vkCopyImageToImageEXT">vkCopyImageToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyImageToMemoryEXT">vkCopyImageToMemoryEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyMemoryToImageEXT">vkCopyMemoryToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkGetImageSubresourceLayout2EXT">vkGetImageSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p><a href="#vkTransitionImageLayoutEXT">vkTransitionImageLayoutEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_structures"><a class="anchor" href="#_new_structures"></a>New Structures</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkCopyImageToImageInfoEXT">VkCopyImageToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyImageToMemoryInfoEXT">VkCopyImageToMemoryInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkHostImageLayoutTransitionInfoEXT">VkHostImageLayoutTransitionInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageSubresource2EXT">VkImageSubresource2EXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageToMemoryCopyEXT">VkImageToMemoryCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkSubresourceLayout2EXT">VkSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p>Extending <a href="#VkImageFormatProperties2">VkImageFormatProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyDevicePerformanceQueryEXT">VkHostImageCopyDevicePerformanceQueryEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceFeatures2">VkPhysicalDeviceFeatures2</a>, <a href="#VkDeviceCreateInfo">VkDeviceCreateInfo</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyFeaturesEXT">VkPhysicalDeviceHostImageCopyFeaturesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceProperties2">VkPhysicalDeviceProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyPropertiesEXT">VkPhysicalDeviceHostImageCopyPropertiesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkSubresourceLayout2KHR">VkSubresourceLayout2KHR</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkSubresourceHostMemcpySizeEXT">VkSubresourceHostMemcpySizeEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enums"><a class="anchor" href="#_new_enums"></a>New Enums</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_bitmasks"><a class="anchor" href="#_new_bitmasks"></a>New Bitmasks</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagsEXT">VkHostImageCopyFlagsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enum_constants"><a class="anchor" href="#_new_enum_constants"></a>New Enum Constants</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME</code></p>
+</li>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION</code></p>
+</li>
+<li>
+<p>Extending <a href="#VkFormatFeatureFlagBits2">VkFormatFeatureFlagBits2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkImageUsageFlagBits">VkImageUsageFlagBits</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkStructureType">VkStructureType</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_issues"><a class="anchor" href="#_issues"></a>Issues</h4>
+<div class="paragraph">
+<p>1) Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Iaculis eu non diam phasellus vestibulum. Consequat nisl vel
+pretium lectus quam. Euismod in pellentesque massa placerat duis ultricies
+lacus sed turpis. Ullamcorper eget nulla facilisi etiam dignissim diam quis
+enim. Id velit ut tortor pretium viverra suspendisse potenti.</p>
+</div>
+<div class="paragraph">
+<p>2) Faucibus in ornare quam viverra orci sagittis eu volutpat?</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Eu facilisis sed odio morbi quis commodo. Pharetra magna ac
+placerat vestibulum lectus mauris. Ac felis donec et odio pellentesque diam
+volutpat commodo sed.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_version_history"><a class="anchor" href="#_version_history"></a>Version History</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 0, 2173-05-30 (Htiaf Dnartske)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Malesuada pellentesque elit eget gravida cum sociis natoque</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Revision 1, 2185-12-01 (Zabhash Ifessouy)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Id leo in vitae turpis massa sed elementum</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic.html b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic.html
new file mode 100644
index 0000000..9a06bc5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/hic.html
@@ -0,0 +1,2425 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 2.0.17">
+<meta name="author" content="The Khronos® Vulkan Working Group">
+<title>Test® 1.2.3 - (with VK_EXT_host_image_copy, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2, VK_KHR_get_physical_device_properties2)</title>
+<style>
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
+
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+<style>
+pre.rouge table td { padding: 5px; }
+pre.rouge table pre { margin: 0; }
+pre.rouge .cm {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cp {
+  color: #999999;
+  font-weight: bold;
+}
+pre.rouge .c1 {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .cs {
+  color: #999999;
+  font-weight: bold;
+  font-style: italic;
+}
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
+  color: #999988;
+  font-style: italic;
+}
+pre.rouge .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+pre.rouge .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+pre.rouge .ge {
+  color: #000000;
+  font-style: italic;
+}
+pre.rouge .gr {
+  color: #aa0000;
+}
+pre.rouge .gh {
+  color: #999999;
+}
+pre.rouge .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+pre.rouge .go {
+  color: #888888;
+}
+pre.rouge .gp {
+  color: #555555;
+}
+pre.rouge .gs {
+  font-weight: bold;
+}
+pre.rouge .gu {
+  color: #aaaaaa;
+}
+pre.rouge .gt {
+  color: #aa0000;
+}
+pre.rouge .kc {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kd {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kn {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kp {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kr {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .kt {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .k, pre.rouge .kv {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .mf {
+  color: #009999;
+}
+pre.rouge .mh {
+  color: #009999;
+}
+pre.rouge .il {
+  color: #009999;
+}
+pre.rouge .mi {
+  color: #009999;
+}
+pre.rouge .mo {
+  color: #009999;
+}
+pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #009999;
+}
+pre.rouge .sa {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .sb {
+  color: #d14;
+}
+pre.rouge .sc {
+  color: #d14;
+}
+pre.rouge .sd {
+  color: #d14;
+}
+pre.rouge .s2 {
+  color: #d14;
+}
+pre.rouge .se {
+  color: #d14;
+}
+pre.rouge .sh {
+  color: #d14;
+}
+pre.rouge .si {
+  color: #d14;
+}
+pre.rouge .sx {
+  color: #d14;
+}
+pre.rouge .sr {
+  color: #009926;
+}
+pre.rouge .s1 {
+  color: #d14;
+}
+pre.rouge .ss {
+  color: #990073;
+}
+pre.rouge .s, pre.rouge .dl {
+  color: #d14;
+}
+pre.rouge .na {
+  color: #008080;
+}
+pre.rouge .bp {
+  color: #999999;
+}
+pre.rouge .nb {
+  color: #0086B3;
+}
+pre.rouge .nc {
+  color: #445588;
+  font-weight: bold;
+}
+pre.rouge .no {
+  color: #008080;
+}
+pre.rouge .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+pre.rouge .ni {
+  color: #800080;
+}
+pre.rouge .ne {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nf, pre.rouge .fm {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nl {
+  color: #990000;
+  font-weight: bold;
+}
+pre.rouge .nn {
+  color: #555555;
+}
+pre.rouge .nt {
+  color: #000080;
+}
+pre.rouge .vc {
+  color: #008080;
+}
+pre.rouge .vg {
+  color: #008080;
+}
+pre.rouge .vi {
+  color: #008080;
+}
+pre.rouge .nv, pre.rouge .vm {
+  color: #008080;
+}
+pre.rouge .ow {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .o {
+  color: #000000;
+  font-weight: bold;
+}
+pre.rouge .w {
+  color: #bbbbbb;
+}
+pre.rouge {
+  background-color: #f8f8f8;
+}
+</style>
+<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>
+
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+</head>
+<body class="book toc2 toc-left">
+<div id="header">
+<h1>Test<sup>®</sup> 1.2.3 - (with VK_EXT_host_image_copy, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2, VK_KHR_get_physical_device_properties2)</h1>
+<div class="details">
+<span id="author" class="author">The Khronos<sup>®</sup> Vulkan Working Group</span><br>
+<span id="revnumber">version 1.2.3,</span>
+<span id="revdate">"2100-11-22 00:33:44Z"</span>
+<br><span id="revremark">"test build"</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#preamble">1. Preamble</a></li>
+<li><a href="#lorem">2. Lorem</a>
+<ul class="sectlevel2">
+<li><a href="#lorem-subchapter">2.1. Lorem Subchapter</a></li>
+</ul>
+</li>
+<li><a href="#hic">3. Host Image Copy</a></li>
+<li><a href="#extensions">Layers &amp; Extensions (Informative)</a>
+<ul class="sectlevel2">
+<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
+<!--ChunkedSearchboxMarker-->
+<div id="content" class="loadable" ><script>hideLoadableContent();</script>
+<div id="preamble">
+<div class="sectionbody">
+<!-- toc disabled -->
+<div style="page-break-after: always;"></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="preamble"><a class="anchor" href="#preamble"></a>1. Preamble</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Copyright 2014-2023 The Khronos Group Inc.</p>
+</div>
+<div class="paragraph">
+<p>This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.</p>
+</div>
+<div class="paragraph">
+<p>Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.</p>
+</div>
+<div class="paragraph">
+<p>Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.</p>
+</div>
+<div class="paragraph">
+<p>This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified Vulkan Specification. The ratified versions
+of the Vulkan Specification can be found at <a href="https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html</a> (core only)
+and <a href="https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html" class="bare">https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html</a> (core with all ratified extensions)
+.</p>
+</div>
+<div class="paragraph">
+<p>This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+OpenGL, OpenGL ES and OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.</p>
+</div>
+<div class="paragraph">
+<p>Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <a href="#introduction-conventions">[introduction-conventions]</a> section of
+the <a href="#introduction">[introduction]</a> defines how these parts of the Specification are
+identified.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification uses <a href="#introduction-technical-terminology">technical terminology</a>, defined in the <a href="#glossary">Glossary</a> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.</p>
+</div>
+<div class="paragraph">
+<p>For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.</p>
+</div>
+<div class="paragraph">
+<p>Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<a href="#introduction-normative-references">normative</a>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.</p>
+</div>
+<div class="paragraph">
+<p>Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="lorem"><a class="anchor" href="#lorem"></a>2. Lorem</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Congue eu consequat ac felis donec
+et odio. Enim nec dui nunc mattis enim. Nulla facilisi etiam dignissim diam
+quis enim lobortis scelerisque fermentum. Nam libero justo laoreet sit amet.
+Lacus luctus accumsan tortor posuere. Ultrices tincidunt arcu non sodales. Ut
+enim blandit volutpat maecenas volutpat blandit aliquam etiam. Sed id semper
+risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</div>
+<div class="paragraph">
+<p>Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet.
+Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Ultricies
+mi eget mauris pharetra.  Ac turpis egestas maecenas pharetra convallis posuere
+morbi leo urna. Cras sed felis eget velit aliquet. Sit amet mauris commodo quis
+imperdiet. Malesuada pellentesque elit eget gravida cum sociis natoque.
+Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt vitae.</p>
+</div>
+<div class="sect2">
+<h3 id="lorem-subchapter"><a class="anchor" href="#lorem-subchapter"></a>2.1. Lorem Subchapter</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante:</p>
+</div>
+<div id="vkCmdCopyBufferToImage2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent command</p>
+</div>
+<div id="vkCmdCopyBufferToImage2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="kt">void</span> <span class="nf">vkCmdCopyBufferToImage2KHR</span><span class="p">(</span>
+    <span class="n">VkCommandBuffer</span>                             <span class="n">commandBuffer</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="o">*</span>             <span class="n">pCopyBufferToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>commandBuffer</code> Mauris commodo quis imperdiet massa tincidunt nunc pulvinar.</p>
+</li>
+<li>
+<p><code>pCopyBufferToImageInfo</code> Odio morbi quis commodo odio aenean sed <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ac tortor dignissim convallis aenean et tortor. Amet porttitor eget dolor morbi
+non arcu. Consequat interdum varius sit amet. Tempus egestas sed sed risus
+pretium quam. Gravida in fermentum et sollicitudin ac orci phasellus egestas.
+Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.
+Tempus quam pellentesque nec nam aliquam. A pellentesque sit amet porttitor
+eget. Viverra justo nec ultrices dui sapien eget mi. Nullam vehicula ipsum a
+arcu. Amet volutpat consequat mauris nunc congue nisi. Tincidunt arcu non
+sodales neque.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91828" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91828"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91828</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>srcBuffer</code> <strong class="purple">must</strong> not be a protected buffer</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91829" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91829"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91829</span><br>
+
+If <code>commandBuffer</code> is an unprotected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be a protected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-91830" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-91830"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-91830</span><br>
+
+If <code>commandBuffer</code> is a protected command buffer and
+<a href="#limits-protectedNoFault"><code>protectedNoFault</code></a> is not supported,
+<code>dstImage</code> <strong class="purple">must</strong> not be an unprotected image</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97737" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97737"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97737</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the
+<code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> be a
+multiple of <code>4</code></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-imageOffset-97738" href="#VUID-vkCmdCopyBufferToImage2-imageOffset-97738"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-imageOffset-97738</span><br>
+
+The <code>imageOffset</code> and <code>imageExtent</code> members of each element of
+<code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class="purple">must</strong> respect the image transfer granularity requirements
+of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in
+<a href="#VkQueueFamilyProperties">VkQueueFamilyProperties</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-97739" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-97739"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-97739</span><br>
+
+If the queue family used to create the <a href="#VkCommandPool">VkCommandPool</a> which
+<code>commandBuffer</code> was allocated from does not support
+<code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the
+<code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> not be
+<code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkCommandBuffer">VkCommandBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter" href="#VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter</span><br>
+ <code>pCopyBufferToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyBufferToImageInfo2">VkCopyBufferToImageInfo2</a> structure</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-recording" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-recording"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-recording</span><br>
+ <code>commandBuffer</code> <strong class="purple">must</strong> be in the <a href="#commandbuffers-lifecycle">recording state</a></p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool" href="#VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool</span><br>
+ The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> support transfer, graphics, or compute operations</p>
+</li>
+<li>
+<p><a id="VUID-vkCmdCopyBufferToImage2-renderpass" href="#VUID-vkCmdCopyBufferToImage2-renderpass"></a> <span class="vuid">VUID-vkCmdCopyBufferToImage2-renderpass</span><br>
+ This command <strong class="purple">must</strong> only be called outside of a render pass instance</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Host Synchronization</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Host access to <code>commandBuffer</code> <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+<li>
+<p>Host access to the <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class="purple">must</strong> be externally synchronized</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Command Properties</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><a href="#VkCommandBufferLevel">Command Buffer Levels</a></th>
+<th class="tableblock halign-left valign-top"><a href="#vkCmdBeginRenderPass">Render Pass Scope</a></th>
+<th class="tableblock halign-left valign-top"><a href="#VkQueueFlagBits">Supported Queue Types</a></th>
+<th class="tableblock halign-left valign-top"><a href="#fundamentals-queueoperation-command-types">Command Type</a></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Primary<br>
+Secondary</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Outside</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Transfer<br>
+Graphics<br>
+Compute</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Action</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante <code>VkCopyBufferToImageInfo2</code>:</p>
+</div>
+<div id="VkCopyBufferToImageInfo2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyBufferToImageInfo2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>              <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                  <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkBuffer</span>                     <span class="n">srcBuffer</span><span class="p">;</span>
+    <span class="n">VkImage</span>                      <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                     <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkBufferImageCopy2</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyBufferToImageInfo2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkCopyBufferToImageInfo2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkCopyBufferToImageInfo2</span> <span class="n">VkCopyBufferToImageInfo2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>pNext</code> Iaculis eu non diam phasellus vestibulum.</p>
+</li>
+<li>
+<p><code>srcBuffer</code> Consequat nisl vel pretium lectus quam.</p>
+</li>
+<li>
+<p><code>dstImage</code> Euismod in pellentesque massa placerat duis ultricies lacus sed turpis.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Ullamcorper eget nulla facilisi etiam dignissim diam quis enim.</p>
+</li>
+<li>
+<p><code>regionCount</code> Vel facilisis volutpat est velit egestas dui.</p>
+</li>
+<li>
+<p><code>pRegions</code> Consequat id porta nibh venenatis cras sed felis.</p>
+</li>
+</ul>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-94565" href="#VUID-VkCopyBufferToImageInfo2-pRegions-94565"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-94565</span><br>
+
+Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code>
+<code>imageSubresource</code> eu facilisis sed <strong class="purple">must</strong> odio morbi quis commodo
+<code>dstImage</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-97966" href="#VUID-VkCopyBufferToImageInfo2-dstImage-97966"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97967" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageSubresource-97968" href="#VUID-VkCopyBufferToImageInfo2-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101" href="#VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102" href="#VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-aspectMask-99103" href="#VUID-VkCopyBufferToImageInfo2-aspectMask-99103"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96659" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96659"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96660" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96660"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-imageExtent-96661" href="#VUID-VkCopyBufferToImageInfo2-imageExtent-96661"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-96223" href="#VUID-VkCopyBufferToImageInfo2-pRegions-96223"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-96223</span><br>
+
+Id leo in vitae turpis massa sed elementum
+<code>imageOffset.x</code> and <span class="eq">(<code>imageExtent.width</code> + 
+<code>imageOffset.x</code>)</span> <strong class="purple">must</strong> gravida dictum fusce ut placerat orci nulla
+pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-sType-sType" href="#VUID-VkCopyBufferToImageInfo2-sType-sType"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pNext-pNext" href="#VUID-VkCopyBufferToImageInfo2-pNext-pNext"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter" href="#VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter</span><br>
+ <code>srcBuffer</code> <strong class="purple">must</strong> be a valid <a href="#VkBuffer">VkBuffer</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImage-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter" href="#VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-pRegions-parameter" href="#VUID-VkCopyBufferToImageInfo2-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-regionCount-arraylength" href="#VUID-VkCopyBufferToImageInfo2-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyBufferToImageInfo2-commonparent" href="#VUID-VkCopyBufferToImageInfo2-commonparent"></a> <span class="vuid">VUID-VkCopyBufferToImageInfo2-commonparent</span><br>
+ Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class="purple">must</strong> have been created, allocated, or retrieved from the same <a href="#VkDevice">VkDevice</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <a href="#vkCmdCopyBufferToImage2">vkCmdCopyBufferToImage2</a>:</p>
+</div>
+<div id="VkBufferImageCopy2" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_VERSION_1_3</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkBufferImageCopy2</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkDeviceSize</span>                <span class="n">bufferOffset</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">bufferImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkBufferImageCopy2</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
+<div id="VkBufferImageCopy2KHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_KHR_copy_commands2</span>
+<span class="k">typedef</span> <span class="n">VkBufferImageCopy2</span> <span class="n">VkBufferImageCopy2KHR</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Tristique senectus et netus et malesuada.</p>
+</li>
+<li>
+<p><code>pNext</code> Tempor commodo ullamcorper a lacus vestibulum sed arcu.</p>
+</li>
+<li>
+<p><code>bufferOffset</code> Tellus in metus vulputate eu scelerisque. Lectus sit amet est placerat in.</p>
+</li>
+<li>
+<p><code>bufferRowLength</code> and <code>bufferImageHeight</code> Quam adipiscing vitae
+proin sagittis. Mattis pellentesque id nibh tortor id aliquet lectus proin
+nibh <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sociis natoque penatibus et magnis dis parturient montes nascetur.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Lobortis mattis aliquam faucibus purus in massa tempor nec.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Ut ornare lectus sit amet est placerat in.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Integer quis auctor elit sed vulputate mi sit amet mauris. Ultrices sagittis
+orci a scelerisque purus semper eget duis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferRowLength-99101" href="#VUID-VkBufferImageCopy2-bufferRowLength-99101"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferRowLength-99101</span><br>
+
+<code>bufferRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-bufferImageHeight-99102" href="#VUID-VkBufferImageCopy2-bufferImageHeight-99102"></a> <span class="vuid">VUID-VkBufferImageCopy2-bufferImageHeight-99102</span><br>
+
+<code>bufferImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-aspectMask-99103" href="#VUID-VkBufferImageCopy2-aspectMask-99103"></a> <span class="vuid">VUID-VkBufferImageCopy2-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96659" href="#VUID-VkBufferImageCopy2-imageExtent-96659"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96660" href="#VUID-VkBufferImageCopy2-imageExtent-96660"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageExtent-96661" href="#VUID-VkBufferImageCopy2-imageExtent-96661"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-sType-sType" href="#VUID-VkBufferImageCopy2-sType-sType"></a> <span class="vuid">VUID-VkBufferImageCopy2-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-pNext-pNext" href="#VUID-VkBufferImageCopy2-pNext-pNext"></a> <span class="vuid">VUID-VkBufferImageCopy2-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkBufferImageCopy2-imageSubresource-parameter" href="#VUID-VkBufferImageCopy2-imageSubresource-parameter"></a> <span class="vuid">VUID-VkBufferImageCopy2-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="hic"><a class="anchor" href="#hic"></a>3. Host Image Copy</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Tristique senectus et netus et malesuada. Tempor commodo ullamcorper a lacus
+vestibulum sed arcu. Tellus in metus vulputate eu scelerisque. Lectus sit amet
+est placerat in. Quam adipiscing vitae proin sagittis. Mattis pellentesque id
+nibh tortor id aliquet lectus proin nibh. Sociis natoque penatibus et magnis
+dis parturient montes nascetur. Lobortis mattis aliquam faucibus purus in massa
+tempor nec. Ut ornare lectus sit amet est placerat in. Integer quis auctor elit
+sed vulputate mi sit amet mauris. Ultrices sagittis orci a scelerisque purus
+semper eget duis. Sit amet consectetur adipiscing elit duis tristique. Semper
+risus in hendrerit gravida rutrum. Lorem ipsum dolor sit amet consectetur
+adipiscing elit duis. Varius morbi enim nunc faucibus a pellentesque sit amet.
+Praesent semper feugiat nibh sed pulvinar proin. Porttitor leo a diam
+sollicitudin tempor id. In massa tempor nec feugiat nisl pretium fusce id. Amet
+venenatis urna cursus eget nunc scelerisque.</p>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Cursus sit amet dictum sit amet justo:</p>
+</div>
+<div id="vkCopyMemoryToImageEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="n">VkResult</span> <span class="nf">vkCopyMemoryToImageEXT</span><span class="p">(</span>
+    <span class="n">VkDevice</span>                                    <span class="n">device</span><span class="p">,</span>
+    <span class="k">const</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="o">*</span>           <span class="n">pCopyMemoryToImageInfo</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>device</code> Quis viverra nibh cras pulvinar mattis nunc
+<code>pCopyMemoryToImageInfo-&gt;dstImage</code>.</p>
+</li>
+<li>
+<p><code>pCopyMemoryToImageInfo</code> Est velit egestas dui id ornare. Tristique nulla aliquet enim tortor at
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Turpis egestas pretium aenean pharetra <a href="#vkCmdCopyBufferToImage2">vkCmdCopyBufferToImage2</a>, magna ac placerat vestibulum lectus.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058" href="#VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058</span><br>
+
+Risus quis varius <a href="#features-hostImageCopy"><code>hostImageCopy</code></a> quam
+quisque id diam vel</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-device-parameter" href="#VUID-vkCopyMemoryToImageEXT-device-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-device-parameter</span><br>
+ <code>device</code> <strong class="purple">must</strong> be a valid <a href="#VkDevice">VkDevice</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter" href="#VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter"></a> <span class="vuid">VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter</span><br>
+ <code>pCopyMemoryToImageInfo</code> <strong class="purple">must</strong> be a valid pointer to a valid <a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Return Codes</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="#fundamentals-successcodes">Success</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_SUCCESS</code></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><a href="#fundamentals-errorcodes">Failure</a></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_ERROR_INITIALIZATION_FAILED</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_HOST_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code></p>
+</li>
+<li>
+<p><code>VK_ERROR_MEMORY_MAP_FAILED</code></p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Morbi tincidunt augue interdum velit euismod in pellentesque massa <code>VkCopyMemoryToImageInfoEXT</code> structure:</p>
+</div>
+<div id="VkCopyMemoryToImageInfoEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkCopyMemoryToImageInfoEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>                  <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                      <span class="n">pNext</span><span class="p">;</span>
+    <span class="n">VkHostImageCopyFlagsEXT</span>          <span class="n">flags</span><span class="p">;</span>
+    <span class="n">VkImage</span>                          <span class="n">dstImage</span><span class="p">;</span>
+    <span class="n">VkImageLayout</span>                    <span class="n">dstImageLayout</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                         <span class="n">regionCount</span><span class="p">;</span>
+    <span class="k">const</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="o">*</span>    <span class="n">pRegions</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkCopyMemoryToImageInfoEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> on enim praesent elementum facilisis.</p>
+</li>
+<li>
+<p><code>pNext</code> Ultricies tristique <code>NULL</code> nulla aliquet enim tortor.</p>
+</li>
+<li>
+<p><code>flags</code> Volutpat ac tincidunt vitae semper.</p>
+</li>
+<li>
+<p><code>dstImage</code> Orci eu lobortis elementum nibh.</p>
+</li>
+<li>
+<p><code>dstImageLayout</code> Euismod elementum nisi quis eleifend quam adipiscing vitae proin.</p>
+</li>
+<li>
+<p><code>regionCount</code> Et netus et malesuada fames ac turpis egestas.</p>
+</li>
+<li>
+<p><code>pRegions</code> Lorem ipsum dolor sitr <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> amet consectetu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><code>vkCopyMemoryToImageEXT</code> pulvinar neque laoreet suspendisse interdum
+consectetur libero. Id porta nibh venenatis cras sed felis. Massa vitae tortor
+condimentum lacinia quis.</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966</span><br>
+
+If <code>dstImage</code> is non-sparse then the image or the specified
+<em>disjoint</em> plane <strong class="purple">must</strong> be bound completely and contiguously to a single
+<code>VkDeviceMemory</code> object</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967</span><br>
+
+The <code>imageSubresource.mipLevel</code> member of each element of
+<code>pRegions</code> <strong class="purple">must</strong> be less than the <code>mipLevels</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968" href="#VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968</span><br>
+
+The <span class="eq"><code>imageSubresource.baseArrayLayer</code> + 
+<code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code>
+<strong class="purple">must</strong> be less than or equal to the <code>arrayLayers</code> specified in
+<a href="#VkImageCreateInfo">VkImageCreateInfo</a> when <code>dstImage</code> was created</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059</span><br>
+
+<code>dstImageLayout</code> <strong class="purple">must</strong> Lorem ipsum dolor sit amet, <code>dstImage</code>
+consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
+<code>pRegions</code> et dolore magna aliqua</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-sType-sType" href="#VUID-VkCopyMemoryToImageInfoEXT-sType-sType"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext" href="#VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-flags-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-flags-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-flags-parameter</span><br>
+ <code>flags</code> <strong class="purple">must</strong> be a valid combination of <a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a> values</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter</span><br>
+ <code>dstImage</code> <strong class="purple">must</strong> be a valid <a href="#VkImage">VkImage</a> handle</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter</span><br>
+ <code>dstImageLayout</code> <strong class="purple">must</strong> be a valid <a href="#VkImageLayout">VkImageLayout</a> value</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter" href="#VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter</span><br>
+ <code>pRegions</code> <strong class="purple">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a> structures</p>
+</li>
+<li>
+<p><a id="VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength" href="#VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength"></a> <span class="vuid">VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength</span><br>
+ <code>regionCount</code> <strong class="purple">must</strong> be greater than <code>0</code></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Congue eu consequat ac felis donec et odio. Enim nec
+<a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a>::<code>pRegions</code> dui nunc mattis enim:</p>
+</div>
+<div id="VkMemoryToImageCopyEXT" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Provided by VK_EXT_host_image_copy</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">VkMemoryToImageCopyEXT</span> <span class="p">{</span>
+    <span class="n">VkStructureType</span>             <span class="n">sType</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pNext</span><span class="p">;</span>
+    <span class="k">const</span> <span class="kt">void</span><span class="o">*</span>                 <span class="n">pHostPointer</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryRowLength</span><span class="p">;</span>
+    <span class="kt">uint32_t</span>                    <span class="n">memoryImageHeight</span><span class="p">;</span>
+    <span class="n">VkImageSubresourceLayers</span>    <span class="n">imageSubresource</span><span class="p">;</span>
+    <span class="n">VkOffset3D</span>                  <span class="n">imageOffset</span><span class="p">;</span>
+    <span class="n">VkExtent3D</span>                  <span class="n">imageExtent</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">VkMemoryToImageCopyEXT</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>sType</code> Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum.</p>
+</li>
+<li>
+<p><code>pNext</code> Nam libero justo laoreet sit amet.</p>
+</li>
+<li>
+<p><code>pHostPointer</code> Lacus luctus accumsan tortor posuere.</p>
+</li>
+<li>
+<p><code>memoryRowLength</code> and <code>memoryImageHeight</code> Ultrices tincidunt arcu
+non sodales. Ut enim blandit volutpat maecenas volutpat blandit aliquam
+etiam <code>imageExtent</code>.</p>
+</li>
+<li>
+<p><code>imageSubresource</code> Sed id semper risus in. Natoque penatibus et magnis dis parturient montes.</p>
+</li>
+<li>
+<p><code>imageOffset</code> Vestibulum morbi blandit cursus <code>x</code>, <code>y</code>, <code>z</code>
+risus at ultrices mi tempus imperdiet.</p>
+</li>
+<li>
+<p><code>imageExtent</code> Dignissim cras tincidunt lobortis feugiat vivamus at
+<code>width</code>, <code>height</code> and <code>depth</code> augue eget arcu.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Ultricies mi eget mauris pharetra. Ac turpis <a href="#VkBufferImageCopy2">VkBufferImageCopy2</a> egestas
+maecenas pharetra convallis posuere morbi leo urna. Cras sed felis eget velit
+aliquet. Sit amet mauris commodo quis imperdiet. Malesuada pellentesque elit
+eget gravida cum sociis natoque. Faucibus pulvinar elementum integer enim neque
+volutpat ac tincidunt vitae</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-99061" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-99061"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-99061</span><br>
+
+<code>pHostPointer</code> <strong class="purple">must</strong> Nisl condimentum id venenatis a condimentum vitae</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101" href="#VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101</span><br>
+
+<code>memoryRowLength</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>width</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102" href="#VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102</span><br>
+
+<code>memoryImageHeight</code> <strong class="purple">must</strong> be <code>0</code>, or greater than or equal to the
+<code>height</code> member of <code>imageExtent</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-aspectMask-99103" href="#VUID-VkMemoryToImageCopyEXT-aspectMask-99103"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-aspectMask-99103</span><br>
+
+The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class="purple">must</strong> only have a
+single bit set</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96659" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96659"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96659</span><br>
+
+<code>imageExtent.width</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96660" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96660"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96660</span><br>
+
+<code>imageExtent.height</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageExtent-96661" href="#VUID-VkMemoryToImageCopyEXT-imageExtent-96661"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageExtent-96661</span><br>
+
+<code>imageExtent.depth</code> <strong class="purple">must</strong> not be 0</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Valid Usage (Implicit)</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-sType-sType" href="#VUID-VkMemoryToImageCopyEXT-sType-sType"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-sType-sType</span><br>
+ <code>sType</code> <strong class="purple">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pNext-pNext" href="#VUID-VkMemoryToImageCopyEXT-pNext-pNext"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pNext-pNext</span><br>
+ <code>pNext</code> <strong class="purple">must</strong> be <code>NULL</code></p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter" href="#VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter</span><br>
+ <code>pHostPointer</code> <strong class="purple">must</strong> be a pointer value</p>
+</li>
+<li>
+<p><a id="VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter" href="#VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter"></a> <span class="vuid">VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter</span><br>
+ <code>imageSubresource</code> <strong class="purple">must</strong> be a valid <a href="#VkImageSubresourceLayers">VkImageSubresourceLayers</a> structure</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="extensions"><a class="anchor" href="#extensions"></a>Layers &amp; Extensions (Informative)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Cursus euismod quis viverra nibh cras pulvinar.</p>
+</div>
+<div class="sect2">
+<h3 id="_extension_dependencies"><a class="anchor" href="#_extension_dependencies"></a>Extension Dependencies</h3>
+<div class="paragraph">
+<p>Id diam vel quam elementum</p>
+</div>
+<div class="sect3">
+<h4 id="VK_EXT_host_image_copy"><a class="anchor" href="#VK_EXT_host_image_copy"></a>VK_EXT_host_image_copy</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>VK_EXT_host_image_copy</code></p>
+</dd>
+<dt class="hdlist1"><strong>Extension Type</strong></dt>
+<dd>
+<p>Device extension</p>
+</dd>
+<dt class="hdlist1"><strong>Registered Extension Number</strong></dt>
+<dd>
+<p>271</p>
+</dd>
+<dt class="hdlist1"><strong>Revision</strong></dt>
+<dd>
+<p>1</p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p><a href="#VK_KHR_get_physical_device_properties2">VK_KHR_get_physical_device_properties2</a><br>
+and<br>
+<a href="#VK_KHR_copy_commands2">VK_KHR_copy_commands2</a><br>
+and<br>
+<a href="#VK_KHR_format_feature_flags2">VK_KHR_format_feature_flags2</a><br></p>
+</div>
+</div>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Contact</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Shahbaz Youssefi <a href="https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_host_image_copy] @syoussefi%0A*Here describe the issue or question you have about the VK_EXT_host_image_copy extension*" target="_blank" rel="nofollow noopener"><span class="icon black"><i class="fa fa-github"></i></span>syoussefi</a></p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1"><strong>Extension Proposal</strong></dt>
+<dd>
+<p><a href="https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_host_image_copy.adoc">VK_EXT_host_image_copy</a></p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_other_extension_metadata"><a class="anchor" href="#_other_extension_metadata"></a>Other Extension Metadata</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2186-02-28</p>
+</dd>
+<dt class="hdlist1"><strong>Contributors</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Zabhash Ifessouy, Elgoog</p>
+</li>
+<li>
+<p>Htiaf Dnartske, Aroballoc</p>
+</li>
+<li>
+<p>Sreip Lleinad, AIDIVN</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_description"><a class="anchor" href="#_description"></a>Description</h4>
+<div class="paragraph">
+<p>Sed risus pretium quam vulputate dignissim suspendisse in est ante. Mauris
+commodo quis imperdiet massa tincidunt nunc pulvinar. Odio morbi quis commodo
+odio aenean sed. Quam adipiscing vitae proin sagittis nisl rhoncus. Vel
+facilisis volutpat est velit egestas dui. Consequat id porta nibh venenatis
+cras sed felis. Ac tortor dignissim convallis aenean et tortor. Amet porttitor
+eget dolor morbi non arcu. Consequat interdum varius sit amet. Tempus egestas
+sed sed risus pretium quam. Gravida in fermentum et sollicitudin ac orci
+phasellus egestas. Nulla facilisi etiam dignissim diam quis enim lobortis
+scelerisque fermentum. Tempus quam pellentesque nec nam aliquam. A pellentesque
+sit amet porttitor eget. Viverra justo nec ultrices dui sapien eget mi. Nullam
+vehicula ipsum a arcu. Amet volutpat consequat mauris nunc congue nisi.
+Tincidunt arcu non sodales neque.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_commands"><a class="anchor" href="#_new_commands"></a>New Commands</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#vkCopyImageToImageEXT">vkCopyImageToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyImageToMemoryEXT">vkCopyImageToMemoryEXT</a></p>
+</li>
+<li>
+<p><a href="#vkCopyMemoryToImageEXT">vkCopyMemoryToImageEXT</a></p>
+</li>
+<li>
+<p><a href="#vkGetImageSubresourceLayout2EXT">vkGetImageSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p><a href="#vkTransitionImageLayoutEXT">vkTransitionImageLayoutEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_structures"><a class="anchor" href="#_new_structures"></a>New Structures</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkCopyImageToImageInfoEXT">VkCopyImageToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyImageToMemoryInfoEXT">VkCopyImageToMemoryInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkCopyMemoryToImageInfoEXT">VkCopyMemoryToImageInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkHostImageLayoutTransitionInfoEXT">VkHostImageLayoutTransitionInfoEXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageSubresource2EXT">VkImageSubresource2EXT</a></p>
+</li>
+<li>
+<p><a href="#VkImageToMemoryCopyEXT">VkImageToMemoryCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkMemoryToImageCopyEXT">VkMemoryToImageCopyEXT</a></p>
+</li>
+<li>
+<p><a href="#VkSubresourceLayout2EXT">VkSubresourceLayout2EXT</a></p>
+</li>
+<li>
+<p>Extending <a href="#VkImageFormatProperties2">VkImageFormatProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyDevicePerformanceQueryEXT">VkHostImageCopyDevicePerformanceQueryEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceFeatures2">VkPhysicalDeviceFeatures2</a>, <a href="#VkDeviceCreateInfo">VkDeviceCreateInfo</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyFeaturesEXT">VkPhysicalDeviceHostImageCopyFeaturesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkPhysicalDeviceProperties2">VkPhysicalDeviceProperties2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkPhysicalDeviceHostImageCopyPropertiesEXT">VkPhysicalDeviceHostImageCopyPropertiesEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkSubresourceLayout2KHR">VkSubresourceLayout2KHR</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkSubresourceHostMemcpySizeEXT">VkSubresourceHostMemcpySizeEXT</a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enums"><a class="anchor" href="#_new_enums"></a>New Enums</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagBitsEXT">VkHostImageCopyFlagBitsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_bitmasks"><a class="anchor" href="#_new_bitmasks"></a>New Bitmasks</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#VkHostImageCopyFlagsEXT">VkHostImageCopyFlagsEXT</a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_new_enum_constants"><a class="anchor" href="#_new_enum_constants"></a>New Enum Constants</h4>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME</code></p>
+</li>
+<li>
+<p><code>VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION</code></p>
+</li>
+<li>
+<p>Extending <a href="#VkFormatFeatureFlagBits2">VkFormatFeatureFlagBits2</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkImageUsageFlagBits">VkImageUsageFlagBits</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Extending <a href="#VkStructureType">VkStructureType</a>:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT</code></p>
+</li>
+<li>
+<p><code>VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_issues"><a class="anchor" href="#_issues"></a>Issues</h4>
+<div class="paragraph">
+<p>1) Natoque penatibus et magnis dis parturient montes nascetur.</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Iaculis eu non diam phasellus vestibulum. Consequat nisl vel
+pretium lectus quam. Euismod in pellentesque massa placerat duis ultricies
+lacus sed turpis. Ullamcorper eget nulla facilisi etiam dignissim diam quis
+enim. Id velit ut tortor pretium viverra suspendisse potenti.</p>
+</div>
+<div class="paragraph">
+<p>2) Faucibus in ornare quam viverra orci sagittis eu volutpat?</p>
+</div>
+<div class="paragraph">
+<p><strong>RESOLVED</strong>: Eu facilisis sed odio morbi quis commodo. Pharetra magna ac
+placerat vestibulum lectus mauris. Ac felis donec et odio pellentesque diam
+volutpat commodo sed.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_version_history"><a class="anchor" href="#_version_history"></a>Version History</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 0, 2173-05-30 (Htiaf Dnartske)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Malesuada pellentesque elit eget gravida cum sociis natoque</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Revision 1, 2185-12-01 (Zabhash Ifessouy)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Id leo in vitae turpis massa sed elementum</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div id="footer">
+<div id="footer-text">
+Version 1.2.3<br>
+</div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/expectations/validusage.json b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/validusage.json
new file mode 100644
index 0000000..1c12576
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/expectations/validusage.json
@@ -0,0 +1,379 @@
+{
+  "version info": {
+    "schema version": 2,
+    "api version": "1.2.3",
+    "comment": "\"test build\"",
+    "date": "\"2100-11-22 00:33:44Z\""
+  },
+  "validation": {
+    "vkCmdCopyBufferToImage2": {
+      "core": [
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-91828",
+          "text": "If <code>commandBuffer</code> is an unprotected command buffer and <a href=\"#limits-protectedNoFault\"><code>protectedNoFault</code></a> is not supported, <code>srcBuffer</code> <strong class=\"purple\">must</strong> not be a protected buffer",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-91829",
+          "text": "If <code>commandBuffer</code> is an unprotected command buffer and <a href=\"#limits-protectedNoFault\"><code>protectedNoFault</code></a> is not supported, <code>dstImage</code> <strong class=\"purple\">must</strong> not be a protected image",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-91830",
+          "text": "If <code>commandBuffer</code> is a protected command buffer and <a href=\"#limits-protectedNoFault\"><code>protectedNoFault</code></a> is not supported, <code>dstImage</code> <strong class=\"purple\">must</strong> not be an unprotected image",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-97737",
+          "text": "If the queue family used to create the <a href=\"#VkCommandPool\">VkCommandPool</a> which <code>commandBuffer</code> was allocated from does not support <code>VK_QUEUE_GRAPHICS_BIT</code> or <code>VK_QUEUE_COMPUTE_BIT</code>, the <code>bufferOffset</code> member of any element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class=\"purple\">must</strong> be a multiple of <code>4</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-imageOffset-97738",
+          "text": "The <code>imageOffset</code> and <code>imageExtent</code> members of each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code> <strong class=\"purple\">must</strong> respect the image transfer granularity requirements of <code>commandBuffer</code>&#8217;s command pool&#8217;s queue family, as described in <a href=\"#VkQueueFamilyProperties\">VkQueueFamilyProperties</a>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-97739",
+          "text": "If the queue family used to create the <a href=\"#VkCommandPool\">VkCommandPool</a> which <code>commandBuffer</code> was allocated from does not support <code>VK_QUEUE_GRAPHICS_BIT</code>, for each element of <code>pCopyBufferToImageInfo-&gt;pRegions</code>, the <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> not be <code>VK_IMAGE_ASPECT_DEPTH_BIT</code> or <code>VK_IMAGE_ASPECT_STENCIL_BIT</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter",
+          "text": "<code>commandBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkCommandBuffer\">VkCommandBuffer</a> handle",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter",
+          "text": "<code>pCopyBufferToImageInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyBufferToImageInfo2\">VkCopyBufferToImageInfo2</a> structure",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-recording",
+          "text": "<code>commandBuffer</code> <strong class=\"purple\">must</strong> be in the <a href=\"#commandbuffers-lifecycle\">recording state</a>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool",
+          "text": "The <code>VkCommandPool</code> that <code>commandBuffer</code> was allocated from <strong class=\"purple\">must</strong> support transfer, graphics, or compute operations",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-renderpass",
+          "text": "This command <strong class=\"purple\">must</strong> only be called outside of a render pass instance",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCmdCopyBufferToImage2-videocoding",
+          "text": "This command <strong class=\"purple\">must</strong> only be called outside of a video coding scope",
+          "page": "vkspec"
+        }
+      ]
+    },
+    "VkCopyBufferToImageInfo2": {
+      "core": [
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-94565",
+          "text": "Id velit ut tortor pretium viverra suspendisse potenti <code>pRegions</code> faucibus in ornare quam viverra orci sagittis eu volutpat <code>pNext</code> chain <code>imageSubresource</code> eu facilisis sed <strong class=\"purple\">must</strong> odio morbi quis commodo <code>dstImage</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2KHR-pRegions-94554",
+          "text": "Pharetra magna ac placerat vestibulum lectus mauris <code>pRegions</code> ac felis donec et odio pellentesque diam volutpat commodo sed <code>pNext</code> chain <strong class=\"purple\">must</strong> malesuada pellentesque elit <a href=\"#lorem-subchapter\">Lorem Subchapter</a> eget gravida cum sociis natoque <code>dstImage</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-97966",
+          "text": "If <code>dstImage</code> is non-sparse then the image or the specified <em>disjoint</em> plane <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-imageSubresource-97967",
+          "text": "The <code>imageSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-imageSubresource-97968",
+          "text": "The <span class=\"eq\"><code>imageSubresource.baseArrayLayer</code> +  <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> , if <code>imageSubresource.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code> and <a href=\"#features-maintenance5\"><code>maintenance5</code></a> is not enabled, <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-97969",
+          "text": "<code>dstImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-bufferRowLength-99101",
+          "text": "<code>bufferRowLength</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>width</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-bufferImageHeight-99102",
+          "text": "<code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>height</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-aspectMask-99103",
+          "text": "The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-imageExtent-96659",
+          "text": "<code>imageExtent.width</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-imageExtent-96660",
+          "text": "<code>imageExtent.height</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-imageExtent-96661",
+          "text": "<code>imageExtent.depth</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-96223",
+          "text": "Id leo in vitae turpis massa sed elementum <code>imageOffset.x</code> and <span class=\"eq\">(<code>imageExtent.width</code> +  <code>imageOffset.x</code>)</span> <strong class=\"purple\">must</strong> gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim <code>imageSubresource</code> of <code>dstImage</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-sType-sType",
+          "text": "<code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-pNext-pNext",
+          "text": "<code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter",
+          "text": "<code>srcBuffer</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkBuffer\">VkBuffer</a> handle",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-parameter",
+          "text": "<code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter",
+          "text": "<code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-parameter",
+          "text": "<code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href=\"#VkBufferImageCopy2\">VkBufferImageCopy2</a> structures",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-regionCount-arraylength",
+          "text": "<code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyBufferToImageInfo2-commonparent",
+          "text": "Both of <code>dstImage</code>, and <code>srcBuffer</code> <strong class=\"purple\">must</strong> have been created, allocated, or retrieved from the same <a href=\"#VkDevice\">VkDevice</a>",
+          "page": "vkspec"
+        }
+      ]
+    },
+    "VkBufferImageCopy2": {
+      "core": [
+        {
+          "vuid": "VUID-VkBufferImageCopy2-bufferRowLength-99101",
+          "text": "<code>bufferRowLength</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>width</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-bufferImageHeight-99102",
+          "text": "<code>bufferImageHeight</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>height</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-aspectMask-99103",
+          "text": "The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-imageExtent-96659",
+          "text": "<code>imageExtent.width</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-imageExtent-96660",
+          "text": "<code>imageExtent.height</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-imageExtent-96661",
+          "text": "<code>imageExtent.depth</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-sType-sType",
+          "text": "<code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-pNext-pNext",
+          "text": "<code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code> or a pointer to a valid instance of <a href=\"#VkCopyCommandTransformInfoQCOM\">VkCopyCommandTransformInfoQCOM</a>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-sType-unique",
+          "text": "The <code>sType</code> value of each struct in the <code>pNext</code> chain <strong class=\"purple\">must</strong> be unique",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkBufferImageCopy2-imageSubresource-parameter",
+          "text": "<code>imageSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure",
+          "page": "vkspec"
+        }
+      ]
+    },
+    "vkCopyMemoryToImageEXT": {
+      "core": [
+        {
+          "vuid": "VUID-vkCopyMemoryToImageEXT-hostImageCopy-99058",
+          "text": "Risus quis varius <a href=\"#features-hostImageCopy\"><code>hostImageCopy</code></a> quam quisque id diam vel",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCopyMemoryToImageEXT-device-parameter",
+          "text": "<code>device</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkDevice\">VkDevice</a> handle",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-vkCopyMemoryToImageEXT-pCopyMemoryToImageInfo-parameter",
+          "text": "<code>pCopyMemoryToImageInfo</code> <strong class=\"purple\">must</strong> be a valid pointer to a valid <a href=\"#VkCopyMemoryToImageInfoEXT\">VkCopyMemoryToImageInfoEXT</a> structure",
+          "page": "vkspec"
+        }
+      ]
+    },
+    "VkCopyMemoryToImageInfoEXT": {
+      "core": [
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-dstImage-97966",
+          "text": "If <code>dstImage</code> is non-sparse then the image or the specified <em>disjoint</em> plane <strong class=\"purple\">must</strong> be bound completely and contiguously to a single <code>VkDeviceMemory</code> object",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97967",
+          "text": "The <code>imageSubresource.mipLevel</code> member of each element of <code>pRegions</code> <strong class=\"purple\">must</strong> be less than the <code>mipLevels</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-imageSubresource-97968",
+          "text": "The <span class=\"eq\"><code>imageSubresource.baseArrayLayer</code> +  <code>imageSubresource.layerCount</code></span> of each element of <code>pRegions</code> , if <code>imageSubresource.layerCount</code> is not <code>VK_REMAINING_ARRAY_LAYERS</code> and <a href=\"#features-maintenance5\"><code>maintenance5</code></a> is not enabled, <strong class=\"purple\">must</strong> be less than or equal to the <code>arrayLayers</code> specified in <a href=\"#VkImageCreateInfo\">VkImageCreateInfo</a> when <code>dstImage</code> was created",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-dstImage-97969",
+          "text": "<code>dstImage</code> <strong class=\"purple\">must</strong> not have been created with <code>flags</code> containing <code>VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-99059",
+          "text": "<code>dstImageLayout</code> <strong class=\"purple\">must</strong> Lorem ipsum dolor sit amet, <code>dstImage</code> consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore <code>pRegions</code> et dolore magna aliqua",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-sType-sType",
+          "text": "<code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-pNext-pNext",
+          "text": "<code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-flags-parameter",
+          "text": "<code>flags</code> <strong class=\"purple\">must</strong> be a valid combination of <a href=\"#VkHostImageCopyFlagBitsEXT\">VkHostImageCopyFlagBitsEXT</a> values",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-dstImage-parameter",
+          "text": "<code>dstImage</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImage\">VkImage</a> handle",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-parameter",
+          "text": "<code>dstImageLayout</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageLayout\">VkImageLayout</a> value",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-pRegions-parameter",
+          "text": "<code>pRegions</code> <strong class=\"purple\">must</strong> be a valid pointer to an array of <code>regionCount</code> valid <a href=\"#VkMemoryToImageCopyEXT\">VkMemoryToImageCopyEXT</a> structures",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkCopyMemoryToImageInfoEXT-regionCount-arraylength",
+          "text": "<code>regionCount</code> <strong class=\"purple\">must</strong> be greater than <code>0</code>",
+          "page": "vkspec"
+        }
+      ]
+    },
+    "VkMemoryToImageCopyEXT": {
+      "core": [
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-pHostPointer-99061",
+          "text": "<code>pHostPointer</code> <strong class=\"purple\">must</strong> Nisl condimentum id venenatis a condimentum vitae",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-memoryRowLength-99101",
+          "text": "<code>memoryRowLength</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>width</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-memoryImageHeight-99102",
+          "text": "<code>memoryImageHeight</code> <strong class=\"purple\">must</strong> be <code>0</code>, or greater than or equal to the <code>height</code> member of <code>imageExtent</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-aspectMask-99103",
+          "text": "The <code>aspectMask</code> member of <code>imageSubresource</code> <strong class=\"purple\">must</strong> only have a single bit set",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-imageExtent-96659",
+          "text": "<code>imageExtent.width</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-imageExtent-96660",
+          "text": "<code>imageExtent.height</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-imageExtent-96661",
+          "text": "<code>imageExtent.depth</code> <strong class=\"purple\">must</strong> not be 0",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-sType-sType",
+          "text": "<code>sType</code> <strong class=\"purple\">must</strong> be <code>VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-pNext-pNext",
+          "text": "<code>pNext</code> <strong class=\"purple\">must</strong> be <code>NULL</code>",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-pHostPointer-parameter",
+          "text": "<code>pHostPointer</code> <strong class=\"purple\">must</strong> be a pointer value",
+          "page": "vkspec"
+        },
+        {
+          "vuid": "VUID-VkMemoryToImageCopyEXT-imageSubresource-parameter",
+          "text": "<code>imageSubresource</code> <strong class=\"purple\">must</strong> be a valid <a href=\"#VkImageSubresourceLayers\">VkImageSubresourceLayers</a> structure",
+          "page": "vkspec"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/images/test-build.svg b/codegen/vulkan/vulkan-docs-next/build_tests/images/test-build.svg
new file mode 100644
index 0000000..6201714
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/images/test-build.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   viewBox="0 0 1150 326"
+   version="1.1"
+   xml:space="preserve"
+   style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"
+   id="svg31"
+   sodipodi:docname="test-build.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"><defs
+   id="defs35">
+        
+        
+        
+    
+            
+        
+            
+            
+            
+            
+            
+            
+            
+            
+        
+                
+                
+            </defs><sodipodi:namedview
+   id="namedview33"
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1.0"
+   inkscape:showpageshadow="2"
+   inkscape:pageopacity="0.0"
+   inkscape:pagecheckerboard="0"
+   inkscape:deskcolor="#d1d1d1"
+   showgrid="false"
+   inkscape:zoom="1"
+   inkscape:cx="869.5"
+   inkscape:cy="86.5"
+   inkscape:window-width="2560"
+   inkscape:window-height="1375"
+   inkscape:window-x="0"
+   inkscape:window-y="28"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="svg31" />
+    <rect
+   x="0"
+   y="2.2e-05"
+   width="1150.0006"
+   height="325.99985"
+   style="fill:none;stroke-width:0.92111"
+   id="rect2" />
+<text
+   xml:space="preserve"
+   style="font-style:normal;font-weight:normal;font-size:192px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none"
+   x="138.95676"
+   y="249.31372"
+   id="text349"><tspan
+     sodipodi:role="line"
+     id="tspan347"
+     x="138.95676"
+     y="249.31372"
+     style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#3939a3;fill-opacity:1">V K  T E S T</tspan></text><path
+   d="M 113.43071,144.21059 C 136.9508,75.320429 277.58134,50.050368 427.58191,87.780459 517.55225,110.40051 591.07253,154.28062 639.09271,197.67072 617.30263,140.12058 511.65223,58.080387 366.18167,29.96032 201.70105,-1.8397564 39.470433,26.110311 19.390357,99.100486 4.8903016,151.83061 68.570544,213.60076 167.05092,255.84086 122.81075,220.02078 101.29067,179.78068 113.43071,144.21059 Z"
+   style="fill:#ac162c;fill-rule:nonzero;stroke-width:1"
+   id="path20" /></svg>
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/testspec.adoc b/codegen/vulkan/vulkan-docs-next/build_tests/testspec.adoc
new file mode 100644
index 0000000..4f915f6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/testspec.adoc
@@ -0,0 +1,65 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Core versions and extensions to enable
+// Must be included before the header and attribs.adoc
+include::{generated}/specattribs.adoc[]
+
+// Define titles and title logos for either Vulkan or Vulkan SC
+:DocTitle: Test^®^ {revnumber} - {apititle}
+:SC:
+:VulkanLogo: test-build.svg
+:LogoDir: vulkan
+
+= {DocTitle}
+:regtitle: pass:q,r[^®^]
+The Khronos{regtitle} Vulkan Working Group
+:data-uri:
+:icons: font
+:toc2:
+:toclevels: 2
+:numbered:
+:source-highlighter: rouge
+:rouge-style: github
+:title-logo-image: image:{images}/{VulkanLogo}[top="25%"]
+:attribute-missing: warn
+:last-update-label!:
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.adoc[]
+
+// Table of contents is inserted here
+toc::[]
+
+:leveloffset: 1
+
+<<<<
+
+// Preamble "chapter"
+
+include::{chapters}/preamble.adoc[]
+
+// Actual chapters
+
+include::{chapters}/lorem.adoc[]
+
+ifdef::VK_EXT_host_image_copy[]
+include::{chapters}/ipsum.adoc[]
+endif::VK_EXT_host_image_copy[]
+
+// Appendices
+:numbered!:
+
+[[extensions]]
+= Layers & Extensions (Informative)
+
+Cursus euismod quis viverra nibh cras pulvinar.
+
+== Extension Dependencies
+
+Id diam vel quam elementum
+
+ifdef::VK_EXT_host_image_copy[]
+include::{appendices}/test.adoc[]
+endif::VK_EXT_host_image_copy[]
diff --git a/codegen/vulkan/vulkan-docs-next/build_tests/update-expectations b/codegen/vulkan/vulkan-docs-next/build_tests/update-expectations
new file mode 100755
index 0000000..2e0a1ae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/build_tests/update-expectations
@@ -0,0 +1,18 @@
+#! /bin/bash
+#
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+echo "Note: Run 'testBuild' first to generate gen-*/"
+
+for build in gen-*; do
+  if [ "$build" == gen-validusage ]; then continue; fi
+
+  output=$build/out/html/vkspec.html
+  expectation=expectations/${build#gen-}.html
+
+  cp -f "$output" "$expectation"
+done
+
+cp -f gen-validusage/out/validation/validusage.json expectations/validusage.json
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_buffer_marker/copies.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_buffer_marker/copies.adoc
new file mode 100644
index 0000000..345bd47
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_buffer_marker/copies.adoc
@@ -0,0 +1,157 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[copies-buffer-markers]]
+== Buffer Markers
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdWriteBufferMarker2AMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos']
+--
+:refpage: vkCmdWriteBufferMarker2AMD
+
+To write a 32-bit marker value into a buffer as a pipelined operation, call:
+
+include::{generated}/api/protos/vkCmdWriteBufferMarker2AMD.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:stage specifies the pipeline stage whose completion triggers the
+    marker write.
+  * pname:dstBuffer is the buffer where the marker will be written.
+  * pname:dstOffset is the byte offset into the buffer where the marker will
+    be written.
+  * pname:marker is the 32-bit value of the marker.
+
+The command will write the 32-bit marker value into the buffer only after
+all preceding commands have finished executing up to at least the specified
+pipeline stage.
+This includes the completion of other preceding
+fname:vkCmdWriteBufferMarker2AMD commands so long as their specified
+pipeline stages occur either at the same time or earlier than this command's
+specified pname:stage.
+
+While consecutive buffer marker writes with the same pname:stage parameter
+implicitly complete in submission order, memory and execution dependencies
+between buffer marker writes and other operations must: still be explicitly
+ordered using synchronization commands.
+The access scope for buffer marker writes falls under the
+ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying
+the synchronization scope must: include both pname:stage and
+ename:VK_PIPELINE_STAGE_TRANSFER_BIT.
+
+[NOTE]
+.Note
+====
+Similar to fname:vkCmdWriteTimestamp2, if an implementation is unable to
+write a marker at any specific pipeline stage, it may: instead do so at any
+logically later stage.
+====
+
+[NOTE]
+.Note
+====
+Implementations may: only support a limited number of pipelined marker write
+operations in flight at a given time.
+Thus an excessive number of marker write operations may: degrade command
+execution performance.
+====
+
+.Valid Usage
+****
+:stageMaskName: stage
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+  * [[VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03894]]
+    pname:stage must: include only a single pipeline stage
+  * [[VUID-vkCmdWriteBufferMarker2AMD-stage-03895]]
+    pname:stage must: include only stages that are valid for the queue
+    family that was used to create the command pool that pname:commandBuffer
+    was allocated from
+  * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03896]]
+    pname:dstOffset must: be less than or equal to the size of
+    pname:dstBuffer minus `4`
+  * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03897]]
+    pname:dstBuffer must: have been created with the
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03898]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03899]]
+    pname:dstOffset must: be a multiple of `4`
+****
+
+include::{generated}/validity/protos/vkCmdWriteBufferMarker2AMD.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdWriteBufferMarkerAMD',desc='Execute a pipelined write of a marker value into a buffer',type='protos']
+--
+:refpage: vkCmdWriteBufferMarkerAMD
+
+To write a 32-bit marker value into a buffer as a pipelined operation, call:
+
+include::{generated}/api/protos/vkCmdWriteBufferMarkerAMD.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pipelineStage is a elink:VkPipelineStageFlagBits value specifying
+    the pipeline stage whose completion triggers the marker write.
+  * pname:dstBuffer is the buffer where the marker will be written to.
+  * pname:dstOffset is the byte offset into the buffer where the marker will
+    be written to.
+  * pname:marker is the 32-bit value of the marker.
+
+The command will write the 32-bit marker value into the buffer only after
+all preceding commands have finished executing up to at least the specified
+pipeline stage.
+This includes the completion of other preceding
+fname:vkCmdWriteBufferMarkerAMD commands so long as their specified pipeline
+stages occur either at the same time or earlier than this command's
+specified pname:pipelineStage.
+
+While consecutive buffer marker writes with the same pname:pipelineStage
+parameter are implicitly complete in submission order, memory and execution
+dependencies between buffer marker writes and other operations must still be
+explicitly ordered using synchronization commands.
+The access scope for buffer marker writes falls under the
+ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying
+the synchronization scope must: include both pname:pipelineStage and
+ename:VK_PIPELINE_STAGE_TRANSFER_BIT.
+
+[NOTE]
+.Note
+====
+Similar to fname:vkCmdWriteTimestamp, if an implementation is unable to
+write a marker at any specific pipeline stage, it may: instead do so at any
+logically later stage.
+====
+
+[NOTE]
+.Note
+====
+Implementations may: only support a limited number of pipelined marker write
+operations in flight at a given time, thus excessive number of marker write
+operations may: degrade command execution performance.
+====
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/pipeline_stage_common.adoc[]
+  * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798]]
+    pname:dstOffset must: be less than or equal to the size of
+    pname:dstBuffer minus `4`
+  * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801]]
+    pname:dstOffset must: be a multiple of `4`
+****
+
+include::{generated}/validity/protos/vkCmdWriteBufferMarkerAMD.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_pipeline_compiler_control.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_pipeline_compiler_control.adoc
new file mode 100644
index 0000000..a16bc68
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_pipeline_compiler_control.adoc
@@ -0,0 +1,43 @@
+// Copyright (c) 2019-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Pipelines chapter (pipelines.adoc)
+
+[[pipelines-compiler-control]]
+== Pipeline Compiler Control
+
+[open,refpage='VkPipelineCompilerControlCreateInfoAMD',desc='Structure used to pass compilation control flags to a pipeline',type='structs']
+--
+The compilation of a pipeline can: be tuned by adding a
+sname:VkPipelineCompilerControlCreateInfoAMD structure to the pname:pNext
+chain of slink:VkGraphicsPipelineCreateInfo or
+slink:VkComputePipelineCreateInfo.
+
+include::{generated}/api/structs/VkPipelineCompilerControlCreateInfoAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:compilerControlFlags is a bitmask of
+    elink:VkPipelineCompilerControlFlagBitsAMD affecting how the pipeline
+    will be compiled.
+
+include::{generated}/validity/structs/VkPipelineCompilerControlCreateInfoAMD.adoc[]
+--
+
+[open,refpage='VkPipelineCompilerControlFlagBitsAMD',desc='Enum specifying available compilation control flags',type='enums']
+--
+There are currently no available flags for this extension; flags will be
+added by future versions of this extension.
+
+include::{generated}/api/enums/VkPipelineCompilerControlFlagBitsAMD.adoc[]
+--
+
+[open,refpage='VkPipelineCompilerControlFlagsAMD',desc='Bitmask of VkPipelineCompilerControlFlagBitsAMD',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCompilerControlFlagsAMD.adoc[]
+
+tname:VkPipelineCompilerControlFlagsAMD is a bitmask type for setting a mask
+of zero or more elink:VkPipelineCompilerControlFlagBitsAMD.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_shader_info.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_shader_info.adoc
new file mode 100644
index 0000000..9c146bb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_AMD_shader_info.adoc
@@ -0,0 +1,136 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Pipelines chapter (pipelines.adoc)
+
+[open,refpage='vkGetShaderInfoAMD',desc='Get information about a shader in a pipeline',type='protos']
+--
+Information about a particular shader that has been compiled as part of a
+pipeline object can be extracted by calling:
+
+include::{generated}/api/protos/vkGetShaderInfoAMD.adoc[]
+
+  * pname:device is the device that created pname:pipeline.
+  * pname:pipeline is the target of the query.
+  * pname:shaderStage is a elink:VkShaderStageFlagBits specifying the
+    particular shader within the pipeline about which information is being
+    queried.
+  * pname:infoType describes what kind of information is being queried.
+  * pname:pInfoSize is a pointer to a value related to the amount of data
+    the query returns, as described below.
+  * pname:pInfo is either `NULL` or a pointer to a buffer.
+
+If pname:pInfo is `NULL`, then the maximum size of the information that can:
+be retrieved about the shader, in bytes, is returned in pname:pInfoSize.
+Otherwise, pname:pInfoSize must: point to a variable set by the user to the
+size of the buffer, in bytes, pointed to by pname:pInfo, and on return the
+variable is overwritten with the amount of data actually written to
+pname:pInfo.
+If pname:pInfoSize is less than the maximum size that can: be retrieved by
+the pipeline cache, then at most pname:pInfoSize bytes will be written to
+pname:pInfo, and ename:VK_INCOMPLETE will be returned, instead of
+ename:VK_SUCCESS, to indicate that not all required of the pipeline cache
+was returned.
+
+Not all information is available for every shader and implementations may
+not support all kinds of information for any shader.
+When a certain type of information is unavailable, the function returns
+ename:VK_ERROR_FEATURE_NOT_PRESENT.
+
+If information is successfully and fully queried, the function will return
+ename:VK_SUCCESS.
+
+For pname:infoType ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD, a
+sname:VkShaderStatisticsInfoAMD structure will be written to the buffer
+pointed to by pname:pInfo.
+This structure will be populated with statistics regarding the physical
+device resources used by that shader along with other miscellaneous
+information and is described in further detail below.
+
+For pname:infoType ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD, pname:pInfo is
+a pointer to a UTF-8 null-terminated string containing human-readable
+disassembly.
+The exact formatting and contents of the disassembly string are
+vendor-specific.
+
+The formatting and contents of all other types of information, including
+pname:infoType ename:VK_SHADER_INFO_TYPE_BINARY_AMD, are left to the vendor
+and are not further specified by this extension.
+
+include::{generated}/validity/protos/vkGetShaderInfoAMD.adoc[]
+--
+
+[open,refpage='VkShaderInfoTypeAMD',desc='Enum specifying which type of shader information to query',type='enums']
+--
+Possible values of flink:vkGetShaderInfoAMD::pname:infoType, specifying the
+information being queried from a shader, are:
+
+include::{generated}/api/enums/VkShaderInfoTypeAMD.adoc[]
+
+  * ename:VK_SHADER_INFO_TYPE_STATISTICS_AMD specifies that device resources
+    used by a shader will be queried.
+  * ename:VK_SHADER_INFO_TYPE_BINARY_AMD specifies that
+    implementation-specific information will be queried.
+  * ename:VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD specifies that human-readable
+    disassembly of a shader.
+--
+
+[open,refpage='VkShaderStatisticsInfoAMD',desc='Statistical information about a particular shader within a pipeline',type='structs']
+--
+The sname:VkShaderStatisticsInfoAMD structure is defined as:
+
+include::{generated}/api/structs/VkShaderStatisticsInfoAMD.adoc[]
+
+  * pname:shaderStageMask are the combination of logical shader stages
+    contained within this shader.
+  * pname:resourceUsage is a slink:VkShaderResourceUsageAMD structure
+    describing internal physical device resources used by this shader.
+  * pname:numPhysicalVgprs is the maximum number of vector instruction
+    general-purpose registers (VGPRs) available to the physical device.
+  * pname:numPhysicalSgprs is the maximum number of scalar instruction
+    general-purpose registers (SGPRs) available to the physical device.
+  * pname:numAvailableVgprs is the maximum limit of VGPRs made available to
+    the shader compiler.
+  * pname:numAvailableSgprs is the maximum limit of SGPRs made available to
+    the shader compiler.
+  * pname:computeWorkGroupSize is the local workgroup size of this shader in
+    { X, Y, Z } dimensions.
+
+Some implementations may merge multiple logical shader stages together in a
+single shader.
+In such cases, pname:shaderStageMask will contain a bitmask of all of the
+stages that are active within that shader.
+Consequently, if specifying those stages as input to
+flink:vkGetShaderInfoAMD, the same output information may: be returned for
+all such shader stage queries.
+
+The number of available VGPRs and SGPRs (pname:numAvailableVgprs and
+pname:numAvailableSgprs respectively) are the shader-addressable subset of
+physical registers that is given as a limit to the compiler for register
+assignment.
+These values may: further be limited by implementations due to performance
+optimizations where register pressure is a bottleneck.
+
+include::{generated}/validity/structs/VkShaderStatisticsInfoAMD.adoc[]
+--
+
+[open,refpage='VkShaderResourceUsageAMD',desc='Resource usage information about a particular shader within a pipeline',type='structs']
+--
+The sname:VkShaderResourceUsageAMD structure is defined as:
+
+include::{generated}/api/structs/VkShaderResourceUsageAMD.adoc[]
+
+  * pname:numUsedVgprs is the number of vector instruction general-purpose
+    registers used by this shader.
+  * pname:numUsedSgprs is the number of scalar instruction general-purpose
+    registers used by this shader.
+  * pname:ldsSizePerLocalWorkGroup is the maximum local data store size per
+    work group in bytes.
+  * pname:ldsUsageSizeInBytes is the LDS usage size in bytes per work group
+    by this shader.
+  * pname:scratchMemUsageInBytes is the scratch memory usage in bytes by
+    this shader.
+
+include::{generated}/validity/structs/VkShaderResourceUsageAMD.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.adoc
new file mode 100644
index 0000000..fd24e3b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.adoc
@@ -0,0 +1,62 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkAcquireDrmDisplayEXT',desc='Acquire access to a VkDisplayKHR using DRM',type='protos']
+--
+To acquire permission to directly a display in Vulkan from the Direct
+Rendering Manager (DRM) interface, call:
+
+include::{generated}/api/protos/vkAcquireDrmDisplayEXT.adoc[]
+
+  * pname:physicalDevice The physical device the display is on.
+  * pname:drmFd DRM primary file descriptor.
+  * pname:display The display the caller wishes Vulkan to control.
+
+All permissions necessary to control the display are granted to the Vulkan
+instance associated with the provided pname:physicalDevice until the display
+is either released or the connector is unplugged.
+The provided pname:drmFd must correspond to the one owned by the
+pname:physicalDevice.
+If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
+The DRM FD must have DRM master permissions.
+If any error is encountered during the acquisition of the display, the call
+must return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
+
+The provided DRM fd should not be closed before the display is released,
+attempting to do it may result in undefined: behaviour.
+
+include::{generated}/validity/protos/vkAcquireDrmDisplayEXT.adoc[]
+--
+
+[open,refpage='vkGetDrmDisplayEXT',desc='Query the VkDisplayKHR corresponding to a DRM connector ID',type='protos']
+--
+Before acquiring a display from the DRM interface, the caller may want to
+select a specific sname:VkDisplayKHR handle by identifying it using a
+pname:connectorId.
+To do so, call:
+
+include::{generated}/api/protos/vkGetDrmDisplayEXT.adoc[]
+
+  * pname:physicalDevice The physical device to query the display from.
+  * pname:drmFd DRM primary file descriptor.
+  * pname:connectorId Identifier of the specified DRM connector.
+  * pname:display The corresponding slink:VkDisplayKHR handle will be
+    returned here.
+
+If there is no slink:VkDisplayKHR corresponding to the pname:connectorId on
+the pname:physicalDevice, the returning pname:display must be set to
+dlink:VK_NULL_HANDLE.
+The provided pname:drmFd must correspond to the one owned by the
+pname:physicalDevice.
+If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
+Master permissions are not required, because the file descriptor is just
+used for information gathering purposes.
+The given pname:connectorId must be a resource owned by the provided
+pname:drmFd.
+If not, the error code ename:VK_ERROR_UNKNOWN must be returned.
+If any error is encountered during the identification of the display, the
+call must return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
+
+include::{generated}/validity/protos/vkGetDrmDisplayEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.adoc
new file mode 100644
index 0000000..cc86f69
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.adoc
@@ -0,0 +1,61 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkAcquireXlibDisplayEXT',desc='Acquire access to a VkDisplayKHR using Xlib',type='protos']
+--
+To acquire permission to directly access a display in Vulkan from an X11
+server, call:
+
+include::{generated}/api/protos/vkAcquireXlibDisplayEXT.adoc[]
+
+  * pname:physicalDevice The physical device the display is on.
+  * pname:dpy A connection to the X11 server that currently owns
+    pname:display.
+  * pname:display The display the caller wishes to control in Vulkan.
+
+All permissions necessary to control the display are granted to the Vulkan
+instance associated with pname:physicalDevice until the display is released
+or the X11 connection specified by pname:dpy is terminated.
+Permission to access the display may: be temporarily revoked during periods
+when the X11 server from which control was acquired itself loses access to
+pname:display.
+During such periods, operations which require access to the display must:
+fail with an appropriate error code.
+If the X11 server associated with pname:dpy does not own pname:display, or
+if permission to access it has already been acquired by another entity, the
+call must: return the error code ename:VK_ERROR_INITIALIZATION_FAILED.
+
+[NOTE]
+.Note
+====
+One example of when an X11 server loses access to a display is when it loses
+ownership of its virtual terminal.
+====
+
+include::{generated}/validity/protos/vkAcquireXlibDisplayEXT.adoc[]
+--
+
+[open,refpage='vkGetRandROutputDisplayEXT',desc='Query the VkDisplayKHR corresponding to an X11 RandR Output',type='protos']
+--
+When acquiring displays from an X11 server, an application may also wish to
+enumerate and identify them using a native handle rather than a
+sname:VkDisplayKHR handle.
+To determine the sname:VkDisplayKHR handle corresponding to an X11 RandR
+Output, call:
+
+include::{generated}/api/protos/vkGetRandROutputDisplayEXT.adoc[]
+
+  * pname:physicalDevice The physical device to query the display handle on.
+  * pname:dpy A connection to the X11 server from which pname:rrOutput was
+    queried.
+  * pname:rrOutput An X11 RandR output ID.
+  * pname:pDisplay The corresponding slink:VkDisplayKHR handle will be
+    returned here.
+
+If there is no slink:VkDisplayKHR corresponding to pname:rrOutput on
+pname:physicalDevice, dlink:VK_NULL_HANDLE must: be returned in
+pname:pDisplay.
+
+include::{generated}/validity/protos/vkGetRandROutputDisplayEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_blend_operation_advanced/advanced_blend.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_blend_operation_advanced/advanced_blend.adoc
new file mode 100644
index 0000000..919e422
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_blend_operation_advanced/advanced_blend.adoc
@@ -0,0 +1,903 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[framebuffer-blend-advanced]]
+=== Advanced Blend Operations
+
+The _advanced blend operations_ are those listed in tables
+<<framebuffer-blend-advanced-fxyz-modes,f/X/Y/Z Advanced Blend Operations>>,
+<<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
+Blend Operations>>, and
+<<framebuffer-blend-advanced-additional-rgb,Additional RGB Blend
+Operations>>.
+
+[open,refpage='VkPipelineColorBlendAdvancedStateCreateInfoEXT',desc='Structure specifying parameters that affect advanced blend operations',type='structs']
+--
+If the pname:pNext chain of slink:VkPipelineColorBlendStateCreateInfo
+includes a sname:VkPipelineColorBlendAdvancedStateCreateInfoEXT structure,
+then that structure includes parameters that affect advanced blend
+operations.
+
+The sname:VkPipelineColorBlendAdvancedStateCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineColorBlendAdvancedStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcPremultiplied specifies whether the source color of the blend
+    operation is treated as premultiplied.
+  * pname:dstPremultiplied specifies whether the destination color of the
+    blend operation is treated as premultiplied.
+  * pname:blendOverlap is a elink:VkBlendOverlapEXT value specifying how the
+    source and destination sample's coverage is correlated.
+
+If this structure is not present, pname:srcPremultiplied and
+pname:dstPremultiplied are both considered to be ename:VK_TRUE, and
+pname:blendOverlap is considered to be
+ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424]]
+    If the <<limits-advancedBlendNonPremultipliedSrcColor, non-premultiplied
+    source color>> property is not supported, pname:srcPremultiplied must:
+    be ename:VK_TRUE
+  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425]]
+    If the <<limits-advancedBlendNonPremultipliedDstColor, non-premultiplied
+    destination color>> property is not supported, pname:dstPremultiplied
+    must: be ename:VK_TRUE
+  * [[VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426]]
+    If the <<limits-advancedBlendCorrelatedOverlap, correlated overlap>>
+    property is not supported, pname:blendOverlap must: be
+    ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT
+****
+
+include::{generated}/validity/structs/VkPipelineColorBlendAdvancedStateCreateInfoEXT.adoc[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetColorBlendAdvancedEXT',desc='Specify the advanced color blend state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the advanced blend state,
+call:
+
+include::{generated}/api/protos/vkCmdSetColorBlendAdvancedEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstAttachment the first color attachment the advanced blend
+    parameters apply to.
+  * pname:attachmentCount the number of slink:VkColorBlendAdvancedEXT
+    elements in the pname:pColorBlendAdvanced array.
+  * pname:pColorBlendAdvanced an array of slink:VkColorBlendAdvancedEXT
+    structs that specify the advanced color blend parameters for the
+    corresponding attachments.
+
+This command sets the advanced blend operation parameters of the specified
+attachments for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied,
+slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied,
+and slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
+values used to create the currently active pipeline.
+
+:refpage: vkCmdSetColorBlendAdvancedEXT
+:requiredfeature: extendedDynamicState3ColorBlendAdvanced
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetColorBlendAdvancedEXT.adoc[]
+--
+
+[open,refpage='VkColorBlendAdvancedEXT',desc='Structure specifying the advanced blend operation parameters for an attachment',type='structs']
+--
+The sname:VkColorBlendAdvancedEXT structure is defined as:
+
+include::{generated}/api/structs/VkColorBlendAdvancedEXT.adoc[]
+
+  * pname:advancedBlendOp selects which blend operation is used to calculate
+    the RGB values to write to the color attachment.
+  * pname:srcPremultiplied specifies whether the source color of the blend
+    operation is treated as premultiplied.
+  * pname:dstPremultiplied specifies whether the destination color of the
+    blend operation is treated as premultiplied.
+  * pname:blendOverlap is a elink:VkBlendOverlapEXT value specifying how the
+    source and destination sample's coverage is correlated.
+  * pname:clampResults specifies the results must be clamped to the [0,1]
+    range before writing to the attachment, which is useful when the
+    attachment format is not normalized fixed-point.
+
+.Valid Usage
+****
+  * [[VUID-VkColorBlendAdvancedEXT-srcPremultiplied-07505]]
+    If the <<limits-advancedBlendNonPremultipliedSrcColor, non-premultiplied
+    source color>> property is not supported, pname:srcPremultiplied must:
+    be ename:VK_TRUE
+  * [[VUID-VkColorBlendAdvancedEXT-dstPremultiplied-07506]]
+    If the <<limits-advancedBlendNonPremultipliedDstColor, non-premultiplied
+    destination color>> property is not supported, pname:dstPremultiplied
+    must: be ename:VK_TRUE
+  * [[VUID-VkColorBlendAdvancedEXT-blendOverlap-07507]]
+    If the <<limits-advancedBlendCorrelatedOverlap, correlated overlap>>
+    property is not supported, pname:blendOverlap must: be
+    ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT
+****
+
+include::{generated}/validity/structs/VkColorBlendAdvancedEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+When using one of the operations in table
+<<framebuffer-blend-advanced-fxyz-modes,f/X/Y/Z Advanced Blend Operations>>
+or <<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
+Blend Operations>>, blending is performed according to the following
+equations:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  R & = & f(R_s',R_d')*p_0(A_s,A_d) & + & Y*R_s'*p_1(A_s,A_d) & + & Z*R_d'*p_2(A_s,A_d) \\
+  G & = & f(G_s',G_d')*p_0(A_s,A_d) & + & Y*G_s'*p_1(A_s,A_d) & + & Z*G_d'*p_2(A_s,A_d) \\
+  B & = & f(B_s',B_d')*p_0(A_s,A_d) & + & Y*B_s'*p_1(A_s,A_d) & + & Z*B_d'*p_2(A_s,A_d) \\
+  A & = &            X*p_0(A_s,A_d) & + &      Y*p_1(A_s,A_d) & + &      Z*p_2(A_s,A_d)
+\end{aligned}
++++++++++++++++++++
+
+where the function f and terms X, Y, and Z are specified in the table.
+The R, G, and B components of the source color used for blending are derived
+according to pname:srcPremultiplied.
+If pname:srcPremultiplied is set to ename:VK_TRUE, the fragment color
+components are considered to have been premultiplied by the A component
+prior to blending.
+The base source color [eq]#(R~s~',G~s~',B~s~')# is obtained by dividing
+through by the A component:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  (R_s', G_s', B_s') & =
+  \begin{cases}
+    (0, 0, 0)                    & A_s = 0 \\
+    (\frac{R_s}{A_s}, \frac{G_s}{A_s}, \frac{B_s}{A_s})  & \text{otherwise}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+If pname:srcPremultiplied is ename:VK_FALSE, the fragment color components
+are used as the base color:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  (R_s', G_s', B_s') & = (R_s, G_s, B_s)
+\end{aligned}
++++++++++++++++++++
+
+The R, G, and B components of the destination color used for blending are
+derived according to pname:dstPremultiplied.
+If pname:dstPremultiplied is set to ename:VK_TRUE, the destination
+components are considered to have been premultiplied by the A component
+prior to blending.
+The base destination color [eq]#(R~d~',G~d~',B~d~')# is obtained by dividing
+through by the A component:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  (R_d', G_d', B_d') & =
+  \begin{cases}
+    (0, 0, 0)                    & A_d = 0 \\
+    (\frac{R_d}{A_d}, \frac{G_d}{A_d}, \frac{B_d}{A_d})  & \text{otherwise}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+If pname:dstPremultiplied is ename:VK_FALSE, the destination color
+components are used as the base color:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  (R_d', G_d', B_d') & = (R_d, G_d, B_d)
+\end{aligned}
++++++++++++++++++++
+
+When blending using advanced blend operations, we expect that the R, G, and
+B components of premultiplied source and destination color inputs be stored
+as the product of non-premultiplied R, G, and B component values and the A
+component of the color.
+If any R, G, or B component of a premultiplied input color is non-zero and
+the A component is zero, the color is considered ill-formed, and the
+corresponding component of the blend result is undefined:.
+
+All of the advanced blend operation formulas in this chapter compute the
+result as a premultiplied color.
+If pname:dstPremultiplied is ename:VK_FALSE, that result color's R, G, and B
+components are divided by the A component before being written to the
+framebuffer.
+If any R, G, or B component of the color is non-zero and the A component is
+zero, the result is considered ill-formed, and the corresponding component
+of the blend result is undefined:.
+If all components are zero, that value is unchanged.
+
+If the A component of any input or result color is less than zero, the color
+is considered ill-formed, and all components of the blend result are
+undefined:.
+
+[open,refpage='VkBlendOverlapEXT',desc='Enumerant specifying the blend overlap parameter',type='enums']
+--
+The weighting functions [eq]#p~0~#, [eq]#p~1~#, and [eq]#p~2~# are defined
+in table <<framebuffer-blend-advanced-overlap-modes,Advanced Blend Overlap
+Modes>>.
+In these functions, the A components of the source and destination colors
+are taken to indicate the portion of the pixel covered by the fragment
+(source) and the fragments previously accumulated in the pixel
+(destination).
+The functions [eq]#p~0~#, [eq]#p~1~#, and [eq]#p~2~# approximate the
+relative portion of the pixel covered by the intersection of the source and
+destination, covered only by the source, and covered only by the
+destination, respectively.
+
+Possible values of
+slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap,
+specifying the blend overlap functions, are:
+
+include::{generated}/api/enums/VkBlendOverlapEXT.adoc[]
+
+  * ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT specifies that there is no
+    correlation between the source and destination coverage.
+  * ename:VK_BLEND_OVERLAP_CONJOINT_EXT specifies that the source and
+    destination coverage are considered to have maximal overlap.
+  * ename:VK_BLEND_OVERLAP_DISJOINT_EXT specifies that the source and
+    destination coverage are considered to have minimal overlap.
+
+[[framebuffer-blend-advanced-overlap-modes]]
+.Advanced Blend Overlap Modes
+[width="80%",options="header"]
+|====
+| Overlap Mode                              | Weighting Equations
+| ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT  a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                p_0(A_s,A_d) & = A_sA_d \\
+                                                p_1(A_s,A_d) & = A_s(1-A_d) \\
+                                                p_2(A_s,A_d) & = A_d(1-A_s) \\
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OVERLAP_CONJOINT_EXT      a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                p_0(A_s,A_d) & = min(A_s,A_d) \\
+                                                p_1(A_s,A_d) & = max(A_s-A_d,0) \\
+                                                p_2(A_s,A_d) & = max(A_d-A_s,0) \\
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+| ename:VK_BLEND_OVERLAP_DISJOINT_EXT      a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                p_0(A_s,A_d) & = max(A_s+A_d-1,0) \\
+                                                p_1(A_s,A_d) & = min(A_s,1-A_d) \\
+                                                p_2(A_s,A_d) & = min(A_d,1-A_s) \\
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|====
+--
+
+[[framebuffer-blend-advanced-fxyz-modes]]
+.f/X/Y/Z Advanced Blend Operations
+[width="80%",options="header"]
+|====
+| Mode                                      | Blend Coefficients
+| ename:VK_BLEND_OP_ZERO_EXT               a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (0,0,0) \\
+                                                f(C_s,C_d) & = 0
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+| ename:VK_BLEND_OP_SRC_EXT                a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,0) \\
+                                                f(C_s,C_d) & = C_s
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DST_EXT                a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,1) \\
+                                                f(C_s,C_d) & = C_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SRC_OVER_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = C_s
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DST_OVER_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = C_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SRC_IN_EXT             a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,0) \\
+                                                f(C_s,C_d) & = C_s
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DST_IN_EXT             a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,0) \\
+                                                f(C_s,C_d) & = C_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SRC_OUT_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (0,1,0) \\
+                                                f(C_s,C_d) & = 0
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DST_OUT_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (0,0,1) \\
+                                                f(C_s,C_d) & = 0
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SRC_ATOP_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,1) \\
+                                                f(C_s,C_d) & = C_s
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DST_ATOP_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,0) \\
+                                                f(C_s,C_d) & = C_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_XOR_EXT                a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (0,1,1) \\
+                                                f(C_s,C_d) & = 0
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_MULTIPLY_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = C_sC_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SCREEN_EXT             a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = C_s+C_d-C_sC_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+| ename:VK_BLEND_OP_OVERLAY_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                    2 C_sC_d            & C_d \leq 0.5 \\
+                                                    1-2 (1-C_s)(1-C_d)  & \text{otherwise}
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DARKEN_EXT             a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = min(C_s,C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_LIGHTEN_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = max(C_s,C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_COLORDODGE_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  0                         & C_d \leq 0 \\
+                                                  min(1,\frac{C_d}{1-C_s})  & C_d \gt 0 \text{ and } C_s \lt 1 \\
+                                                  1                         & C_d \gt 0 \text{ and } C_s \geq 1
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_COLORBURN_EXT          a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  1                             & C_d \geq 1 \\
+                                                  1 - min(1,\frac{1-C_d}{C_s})  & C_d \lt 1 \text{ and } C_s \gt 0 \\
+                                                  0                             & C_d \lt 1 \text{ and } C_s \leq 0
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_HARDLIGHT_EXT          a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                    2 C_sC_d            & C_s \leq 0.5 \\
+                                                    1-2 (1-C_s)(1-C_d)  & \text{otherwise}
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_SOFTLIGHT_EXT          a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  C_d-(1-2 C_s)C_d(1-C_d)               & C_s \leq 0.5 \\
+                                                  C_d+(2 C_s-1)C_d((16 C_d-12)C_d+3)    & C_s \gt 0.5 \text{ and } C_d \leq 0.25 \\
+                                                  C_d+(2 C_s-1)(\sqrt{C_d}-C_d)         & C_s \gt 0.5 \text{ and } C_d \gt 0.25
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_DIFFERENCE_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = \lvert C_d-C_s \rvert
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_EXCLUSION_EXT          a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = C_s+C_d-2C_sC_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_INVERT_EXT             a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,1) \\
+                                                f(C_s,C_d) & = 1-C_d
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_INVERT_RGB_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,0,1) \\
+                                                f(C_s,C_d) & = C_s(1-C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_LINEARDODGE_EXT        a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  C_s+C_d           & C_s+C_d \leq 1 \\
+                                                  1                 & \text{otherwise}
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_LINEARBURN_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  C_s+C_d-1         & C_s+C_d \gt 1 \\
+                                                  0                 & \text{otherwise}
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_VIVIDLIGHT_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  1-min(1,\frac{1-C_d}{2C_s})   & 0  \lt  C_s  \lt  0.5 \\
+                                                  0                             & C_s  \leq  0 \\
+                                                  min(1,\frac{C_d}{2(1-C_s)})   & 0.5  \leq  C_s  \lt  1 \\
+                                                  1                             & C_s  \geq  1
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_LINEARLIGHT_EXT        a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  1                         & 2C_s+C_d \gt 2 \\
+                                                  2C_s+C_d-1                & 1  \lt  2C_s+C_d  \leq  2 \\
+                                                  0                         & 2C_s+C_d \leq 1
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_PINLIGHT_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  0                         & 2C_s-1 \gt C_d \text{ and } C_s \lt 0.5 \\
+                                                  2C_s-1                    & 2C_s-1 \gt C_d \text{ and } C_s \geq 0.5 \\
+                                                  2C_s                      & 2C_s-1 \leq C_d \text{ and } C_s \lt 0.5C_d \\
+                                                  C_d                       & 2C_s-1 \leq C_d \text{ and } C_s \geq 0.5C_d
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_HARDMIX_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & =
+                                                \begin{cases}
+                                                  0             & C_s+C_d \lt 1 \\
+                                                  1             & \text{otherwise}
+                                                \end{cases}
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+|====
+
+
+When using one of the HSL blend operations in table
+<<framebuffer-blend-advanced-hsl-modes,Hue-Saturation-Luminosity Advanced
+Blend Operations>> as the blend operation, the RGB color components produced
+by the function f are effectively obtained by converting both the
+non-premultiplied source and destination colors to the HSL (hue, saturation,
+luminosity) color space, generating a new HSL color by selecting H, S, and L
+components from the source or destination according to the blend operation,
+and then converting the result back to RGB.
+In the equations below, a blended RGB color is produced according to the
+following pseudocode:
+
+[source,c++]
+----
+  float minv3(vec3 c) {
+    return min(min(c.r, c.g), c.b);
+  }
+  float maxv3(vec3 c) {
+    return max(max(c.r, c.g), c.b);
+  }
+  float lumv3(vec3 c) {
+    return dot(c, vec3(0.30, 0.59, 0.11));
+  }
+  float satv3(vec3 c) {
+    return maxv3(c) - minv3(c);
+  }
+
+  // If any color components are outside [0,1], adjust the color to
+  // get the components in range.
+  vec3 ClipColor(vec3 color) {
+    float lum = lumv3(color);
+    float mincol = minv3(color);
+    float maxcol = maxv3(color);
+    if (mincol < 0.0) {
+      color = lum + ((color-lum)*lum) / (lum-mincol);
+    }
+    if (maxcol > 1.0) {
+      color = lum + ((color-lum)*(1-lum)) / (maxcol-lum);
+    }
+    return color;
+  }
+
+  // Take the base RGB color <cbase> and override its luminosity
+  // with that of the RGB color <clum>.
+  vec3 SetLum(vec3 cbase, vec3 clum) {
+    float lbase = lumv3(cbase);
+    float llum = lumv3(clum);
+    float ldiff = llum - lbase;
+    vec3 color = cbase + vec3(ldiff);
+    return ClipColor(color);
+  }
+
+  // Take the base RGB color <cbase> and override its saturation with
+  // that of the RGB color <csat>.  The override the luminosity of the
+  // result with that of the RGB color <clum>.
+  vec3 SetLumSat(vec3 cbase, vec3 csat, vec3 clum)
+  {
+    float minbase = minv3(cbase);
+    float sbase = satv3(cbase);
+    float ssat = satv3(csat);
+    vec3 color;
+    if (sbase > 0) {
+      // Equivalent (modulo rounding errors) to setting the
+      // smallest (R,G,B) component to 0, the largest to <ssat>,
+      // and interpolating the "middle" component based on its
+      // original value relative to the smallest/largest.
+      color = (cbase - minbase) * ssat / sbase;
+    } else {
+      color = vec3(0.0);
+    }
+    return SetLum(color, clum);
+  }
+----
+
+[[framebuffer-blend-advanced-hsl-modes]]
+.Hue-Saturation-Luminosity Advanced Blend Operations
+[width="80%",options="header"]
+|====
+| Mode                                      | Result
+| ename:VK_BLEND_OP_HSL_HUE_EXT            a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = SetLumSat(C_s,C_d,C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_HSL_SATURATION_EXT     a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = SetLumSat(C_d,C_s,C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_HSL_COLOR_EXT          a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = SetLum(C_s,C_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_HSL_LUMINOSITY_EXT     a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (X,Y,Z) & = (1,1,1) \\
+                                                f(C_s,C_d) & = SetLum(C_d,C_s)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|====
+
+
+When using one of the operations in table
+<<framebuffer-blend-advanced-additional-rgb,Additional RGB Blend
+Operations>> as the blend operation, the source and destination colors used
+by these blending operations are interpreted according to
+pname:srcPremultiplied and pname:dstPremultiplied.
+The blending operations below are evaluated where the RGB source and
+destination color components are both considered to have been premultiplied
+by the corresponding A component.
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+  (R_s', G_s', B_s') & =
+  \begin{cases}
+    (R_s, G_s, B_s)                     & \text{if srcPremultiplied is VK\_TRUE} \\
+    (R_sA_s, G_sA_s, B_sA_s)            & \text{if srcPremultiplied is VK\_FALSE}
+  \end{cases} \\
+  (R_d', G_d', B_d') & =
+  \begin{cases}
+    (R_d, G_d, B_d)                     & \text{if dstPremultiplied is VK\_TRUE} \\
+    (R_dA_d, G_dA_d, B_dA_d)            & \text{if dstPremultiplied is VK\_FALSE}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+[[framebuffer-blend-advanced-additional-rgb]]
+.Additional RGB Blend Operations
+[width="80%",options="header"]
+|====
+| Mode                                      | Result
+| ename:VK_BLEND_OP_PLUS_EXT               a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & R_s'+R_d', \\
+                                                              & G_s'+G_d', \\
+                                                              & B_s'+B_d', \\
+                                                              & A_s+A_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_PLUS_CLAMPED_EXT       a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & min(1,R_s'+R_d'), \\
+                                                              & min(1,G_s'+G_d'), \\
+                                                              & min(1,B_s'+B_d'), \\
+                                                              & min(1,A_s+A_d))
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & min(min(1,A_s+A_d),R_s'+R_d'), \\
+                                                              & min(min(1,A_s+A_d),G_s'+G_d'), \\
+                                                              & min(min(1,A_s+A_d),B_s'+B_d'), \\
+                                                              & min(1,A_s+A_d))
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_PLUS_DARKER_EXT        a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & max(0,min(1,A_s+A_d)-((A_s-R_s')+(A_d-R_d'))), \\
+                                                              & max(0,min(1,A_s+A_d)-((A_s-G_s')+(A_d-G_d'))), \\
+                                                              & max(0,min(1,A_s+A_d)-((A_s-B_s')+(A_d-B_d'))), \\
+                                                              & min(1,A_s+A_d))
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_MINUS_EXT              a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & R_d'-R_s', \\
+                                                              & G_d'-G_s', \\
+                                                              & B_d'-B_s', \\
+                                                              & A_d-A_s)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_MINUS_CLAMPED_EXT      a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & max(0,R_d'-R_s'), \\
+                                                              & max(0,G_d'-G_s'), \\
+                                                              & max(0,B_d'-B_s'), \\
+                                                              & max(0,A_d-A_s))
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_CONTRAST_EXT           a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & \frac{A_d}{2} + 2(R_d'-\frac{A_d}{2})(R_s'-\frac{A_s}{2}), \\
+                                                              & \frac{A_d}{2} + 2(G_d'-\frac{A_d}{2})(G_s'-\frac{A_s}{2}), \\
+                                                              & \frac{A_d}{2} + 2(B_d'-\frac{A_d}{2})(B_s'-\frac{A_s}{2}), \\
+                                                              & A_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_INVERT_OVG_EXT         a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) = ( & A_s(1-R_d') + (1-A_s)R_d', \\
+                                                              & A_s(1-G_d') + (1-A_s)G_d', \\
+                                                              & A_s(1-B_d') + (1-A_s)B_d', \\
+                                                              & A_s+A_d-A_sA_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_RED_EXT                a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) & = (R_s', G_d', B_d', A_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_GREEN_EXT              a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) & = (R_d', G_s', B_d', A_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+| ename:VK_BLEND_OP_BLUE_EXT               a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                (R,G,B,A) & = (R_d', G_d', B_s', A_d)
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|====
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_marker.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_marker.adoc
new file mode 100644
index 0000000..0a79e31
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_marker.adoc
@@ -0,0 +1,225 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Debugging chapter (debugging.adoc)
+
+
+[[debugging-debug-markers]]
+== Debug Markers
+
+Debug markers provide a flexible way for debugging and validation layers to
+receive annotation and debug information.
+
+The <<debugging-object-annotation,Object Annotation>> section describes how
+to associate a name or binary data with a Vulkan object.
+
+The <<debugging-command-buffer-markers,Command Buffer Markers>> section
+describes how to associate logical elements of the scene with commands in
+the command buffer.
+
+
+[[debugging-object-annotation]]
+=== Object Annotation
+
+The commands in this section allow application developers to associate
+user-defined information with Vulkan objects at will.
+
+[open,refpage='vkDebugMarkerSetObjectNameEXT',desc='Give a user-friendly name to an object',type='protos']
+--
+An object can be given a user-friendly name by calling:
+
+include::{generated}/api/protos/vkDebugMarkerSetObjectNameEXT.adoc[]
+
+  * pname:device is the device that created the object.
+  * pname:pNameInfo is a pointer to a slink:VkDebugMarkerObjectNameInfoEXT
+    structure specifying the parameters of the name to set on the object.
+
+include::{generated}/validity/protos/vkDebugMarkerSetObjectNameEXT.adoc[]
+--
+
+[open,refpage='VkDebugMarkerObjectNameInfoEXT',desc='Specify parameters of a name to give to an object',type='structs']
+--
+The sname:VkDebugMarkerObjectNameInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugMarkerObjectNameInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
+    type of the object to be named.
+  * pname:object is the object to be named.
+  * pname:pObjectName is a null-terminated UTF-8 string specifying the name
+    to apply to pname:object.
+
+Applications may: change the name associated with an object simply by
+calling fname:vkDebugMarkerSetObjectNameEXT again with a new string.
+To remove a previously set name, pname:pObjectName should: be set to an
+empty string.
+
+.Valid Usage
+****
+  * [[VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490]]
+    pname:objectType must: not be
+    ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
+  * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01491]]
+    pname:object must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkDebugMarkerObjectNameInfoEXT-object-01492]]
+    pname:object must: be a Vulkan object of the type associated with
+    pname:objectType as defined in <<debug-report-object-types>>
+****
+
+include::{generated}/validity/structs/VkDebugMarkerObjectNameInfoEXT.adoc[]
+--
+
+[open,refpage='vkDebugMarkerSetObjectTagEXT',desc='Attach arbitrary data to an object',type='protos']
+--
+In addition to setting a name for an object, debugging and validation layers
+may have uses for additional binary data on a per-object basis that has no
+other place in the Vulkan API.
+For example, a sname:VkShaderModule could have additional debugging data
+attached to it to aid in offline shader tracing.
+To attach data to an object, call:
+
+include::{generated}/api/protos/vkDebugMarkerSetObjectTagEXT.adoc[]
+
+  * pname:device is the device that created the object.
+  * pname:pTagInfo is a pointer to a slink:VkDebugMarkerObjectTagInfoEXT
+    structure specifying the parameters of the tag to attach to the object.
+
+include::{generated}/validity/protos/vkDebugMarkerSetObjectTagEXT.adoc[]
+--
+
+[open,refpage='VkDebugMarkerObjectTagInfoEXT',desc='Specify parameters of a tag to attach to an object',type='structs']
+--
+The sname:VkDebugMarkerObjectTagInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugMarkerObjectTagInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
+    type of the object to be named.
+  * pname:object is the object to be tagged.
+  * pname:tagName is a numerical identifier of the tag.
+  * pname:tagSize is the number of bytes of data to attach to the object.
+  * pname:pTag is a pointer to an array of pname:tagSize bytes containing
+    the data to be associated with the object.
+
+The pname:tagName parameter gives a name or identifier to the type of data
+being tagged.
+This can be used by debugging layers to easily filter for only data that can
+be used by that implementation.
+
+.Valid Usage
+****
+  * [[VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493]]
+    pname:objectType must: not be
+    ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
+  * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01494]]
+    pname:object must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkDebugMarkerObjectTagInfoEXT-object-01495]]
+    pname:object must: be a Vulkan object of the type associated with
+    pname:objectType as defined in <<debug-report-object-types>>
+****
+
+include::{generated}/validity/structs/VkDebugMarkerObjectTagInfoEXT.adoc[]
+--
+
+
+[[debugging-command-buffer-markers]]
+=== Command Buffer Markers
+
+Typical Vulkan applications will submit many command buffers in each frame,
+with each command buffer containing a large number of individual commands.
+Being able to logically annotate regions of command buffers that belong
+together as well as hierarchically subdivide the frame is important to a
+developer's ability to navigate the commands viewed holistically.
+
+The marker commands fname:vkCmdDebugMarkerBeginEXT and
+fname:vkCmdDebugMarkerEndEXT define regions of a series of commands that are
+grouped together, and they can be nested to create a hierarchy.
+The fname:vkCmdDebugMarkerInsertEXT command allows insertion of a single
+label within a command buffer.
+
+[open,refpage='vkCmdDebugMarkerBeginEXT',desc='Open a command buffer marker region',type='protos']
+--
+A marker region can be opened by calling:
+
+include::{generated}/api/protos/vkCmdDebugMarkerBeginEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pMarkerInfo is a pointer to a slink:VkDebugMarkerMarkerInfoEXT
+    structure specifying the parameters of the marker region to open.
+
+include::{generated}/validity/protos/vkCmdDebugMarkerBeginEXT.adoc[]
+--
+
+[open,refpage='VkDebugMarkerMarkerInfoEXT',desc='Specify parameters of a command buffer marker region',type='structs']
+--
+The sname:VkDebugMarkerMarkerInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugMarkerMarkerInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pMarkerName is a pointer to a null-terminated UTF-8 string
+    containing the name of the marker.
+  * pname:color is an optional: RGBA color value that can be associated with
+    the marker.
+    A particular implementation may: choose to ignore this color value.
+    The values contain RGBA values in order, in the range 0.0 to 1.0.
+    If all elements in pname:color are set to 0.0 then it is ignored.
+
+include::{generated}/validity/structs/VkDebugMarkerMarkerInfoEXT.adoc[]
+--
+
+[open,refpage='vkCmdDebugMarkerEndEXT',desc='Close a command buffer marker region',type='protos']
+--
+A marker region can be closed by calling:
+
+include::{generated}/api/protos/vkCmdDebugMarkerEndEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+
+An application may: open a marker region in one command buffer and close it
+in another, or otherwise split marker regions across multiple command
+buffers or multiple queue submissions.
+When viewed from the linear series of submissions to a single queue, the
+calls to fname:vkCmdDebugMarkerBeginEXT and fname:vkCmdDebugMarkerEndEXT
+must: be matched and balanced.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239]]
+    There must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command
+    prior to the fname:vkCmdDebugMarkerEndEXT on the queue that
+    pname:commandBuffer is submitted to
+  * [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240]]
+    If pname:commandBuffer is a secondary command buffer, there must: be an
+    outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
+    pname:commandBuffer that has not previously been ended by a call to
+    flink:vkCmdDebugMarkerEndEXT
+****
+
+include::{generated}/validity/protos/vkCmdDebugMarkerEndEXT.adoc[]
+--
+
+[open,refpage='vkCmdDebugMarkerInsertEXT',desc='Insert a marker label into a command buffer',type='protos']
+--
+A single marker label can be inserted into a command buffer by calling:
+
+include::{generated}/api/protos/vkCmdDebugMarkerInsertEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pMarkerInfo is a pointer to a slink:VkDebugMarkerMarkerInfoEXT
+    structure specifying the parameters of the marker to insert.
+
+include::{generated}/validity/protos/vkCmdDebugMarkerInsertEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_report.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_report.adoc
new file mode 100644
index 0000000..c363d49
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_report.adoc
@@ -0,0 +1,300 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Debugging chapter (debugging.adoc)
+
+
+[[debugging-debug-report-callbacks]]
+== Debug Report Callbacks
+
+[open,refpage='VkDebugReportCallbackEXT',desc='Opaque handle to a debug report callback object',type='handles']
+--
+Debug report callbacks are represented by sname:VkDebugReportCallbackEXT
+handles:
+
+include::{generated}/api/handles/VkDebugReportCallbackEXT.adoc[]
+--
+
+[open,refpage='vkCreateDebugReportCallbackEXT',desc='Create a debug report callback object',type='protos']
+--
+Debug report callbacks give more detailed feedback on the application's use
+of Vulkan when events of interest occur.
+
+To register a debug report callback, an application uses
+flink:vkCreateDebugReportCallbackEXT.
+
+include::{generated}/api/protos/vkCreateDebugReportCallbackEXT.adoc[]
+
+  * pname:instance is the instance the callback will be logged on.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkDebugReportCallbackCreateInfoEXT structure defining the
+    conditions under which this callback will be called.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pCallback is a pointer to a slink:VkDebugReportCallbackEXT handle
+    in which the created object is returned.
+
+include::{generated}/validity/protos/vkCreateDebugReportCallbackEXT.adoc[]
+--
+
+[open,refpage='VkDebugReportCallbackCreateInfoEXT',desc='Structure specifying parameters of a newly created debug report callback',type='structs']
+--
+The definition of slink:VkDebugReportCallbackCreateInfoEXT is:
+
+include::{generated}/api/structs/VkDebugReportCallbackCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkDebugReportFlagBitsEXT specifying
+    which event(s) will cause this callback to be called.
+  * pname:pfnCallback is the application callback function to call.
+  * pname:pUserData is user data to be passed to the callback.
+
+For each sname:VkDebugReportCallbackEXT that is created the
+sname:VkDebugReportCallbackCreateInfoEXT::pname:flags determine when that
+sname:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback is called.
+When an event happens, the implementation will do a bitwise AND of the
+event's elink:VkDebugReportFlagBitsEXT flags to each
+sname:VkDebugReportCallbackEXT object's flags.
+For each non-zero result the corresponding callback will be called.
+The callback will come directly from the component that detected the event,
+unless some other layer intercepts the calls for its own purposes (filter
+them in a different way, log to a system error log, etc.).
+
+An application may: receive multiple callbacks if multiple
+sname:VkDebugReportCallbackEXT objects were created.
+A callback will always be executed in the same thread as the originating
+Vulkan call.
+
+A callback may be called from multiple threads simultaneously (if the
+application is making Vulkan calls from multiple threads).
+
+include::{generated}/validity/structs/VkDebugReportCallbackCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkDebugReportFlagBitsEXT',desc='Bitmask specifying events which cause a debug report callback',type='enums']
+--
+Bits which can: be set in
+slink:VkDebugReportCallbackCreateInfoEXT::pname:flags, specifying events
+which cause a debug report, are:
+
+include::{generated}/api/enums/VkDebugReportFlagBitsEXT.adoc[]
+
+  * ename:VK_DEBUG_REPORT_ERROR_BIT_EXT specifies that the application has
+    violated a valid usage condition of the specification.
+  * ename:VK_DEBUG_REPORT_WARNING_BIT_EXT specifies use of Vulkan that may:
+    expose an app bug.
+    Such cases may not be immediately harmful, such as a fragment shader
+    outputting to a location with no attachment.
+    Other cases may: point to behavior that is almost certainly bad when
+    unintended such as using an image whose memory has not been filled.
+    In general if you see a warning but you know that the behavior is
+    intended/desired, then simply ignore the warning.
+  * ename:VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT specifies a
+    potentially non-optimal use of Vulkan, e.g. using
+    flink:vkCmdClearColorImage when setting
+    slink:VkAttachmentDescription::pname:loadOp to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR would have worked.
+  * ename:VK_DEBUG_REPORT_INFORMATION_BIT_EXT specifies an informational
+    message such as resource details that may be handy when debugging an
+    application.
+  * ename:VK_DEBUG_REPORT_DEBUG_BIT_EXT specifies diagnostic information
+    from the implementation and layers.
+--
+
+[open,refpage='VkDebugReportFlagsEXT',desc='Bitmask of VkDebugReportFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkDebugReportFlagsEXT.adoc[]
+
+tname:VkDebugReportFlagsEXT is a bitmask type for setting a mask of zero or
+more elink:VkDebugReportFlagBitsEXT.
+--
+
+[open,refpage='PFN_vkDebugReportCallbackEXT',desc='Application-defined debug report callback function',type='funcpointers']
+--
+The prototype for the
+slink:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback function
+implemented by the application is:
+
+include::{generated}/api/funcpointers/PFN_vkDebugReportCallbackEXT.adoc[]
+
+  * pname:flags specifies the elink:VkDebugReportFlagBitsEXT that triggered
+    this callback.
+  * pname:objectType is a elink:VkDebugReportObjectTypeEXT value specifying
+    the type of object being used or created at the time the event was
+    triggered.
+  * pname:object is the object where the issue was detected.
+    If pname:objectType is ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
+    pname:object is undefined:.
+  * pname:location is a component (layer, driver, loader) defined value
+    specifying the _location_ of the trigger.
+    This is an optional: value.
+  * pname:messageCode is a layer-defined value indicating what test
+    triggered this callback.
+  * pname:pLayerPrefix is a null-terminated string that is an abbreviation
+    of the name of the component making the callback.
+    pname:pLayerPrefix is only valid for the duration of the callback.
+  * pname:pMessage is a null-terminated string detailing the trigger
+    conditions.
+    pname:pMessage is only valid for the duration of the callback.
+  * pname:pUserData is the user data given when the
+    slink:VkDebugReportCallbackEXT was created.
+
+The callback must: not call fname:vkDestroyDebugReportCallbackEXT.
+
+The callback returns a basetype:VkBool32, which is interpreted in a
+layer-specified manner.
+The application should: always return ename:VK_FALSE.
+The ename:VK_TRUE value is reserved for use in layer development.
+
+pname:object must: be a Vulkan object or dlink:VK_NULL_HANDLE.
+If pname:objectType is not ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT and
+pname:object is not dlink:VK_NULL_HANDLE, pname:object must: be a Vulkan
+object of the corresponding type associated with pname:objectType as defined
+in <<debug-report-object-types>>.
+--
+
+[open,refpage='VkDebugReportObjectTypeEXT',desc='Specify the type of an object handle',type='enums']
+--
+Possible values passed to the pname:objectType parameter of the callback
+function specified by
+slink:VkDebugReportCallbackCreateInfoEXT::pname:pfnCallback, specifying the
+type of object handle being reported, are:
+
+include::{generated}/api/enums/VkDebugReportObjectTypeEXT.adoc[]
+
+[[debug-report-object-types]]
+.`VkDebugReportObjectTypeEXT` and Vulkan Handle Relationship
+[width="80%",cols="<35,<23",options="header"]
+|====
+| elink:VkDebugReportObjectTypeEXT                            | Vulkan Handle Type
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT               | Unknown/Undefined Handle
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT              | slink:VkInstance
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT       | slink:VkPhysicalDevice
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT                | slink:VkDevice
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT                 | slink:VkQueue
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT             | slink:VkSemaphore
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT        | slink:VkCommandBuffer
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT                 | slink:VkFence
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT         | slink:VkDeviceMemory
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT                | slink:VkBuffer
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT                 | slink:VkImage
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT                 | slink:VkEvent
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT            | slink:VkQueryPool
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT           | slink:VkBufferView
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT            | slink:VkImageView
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT         | slink:VkShaderModule
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT        | slink:VkPipelineCache
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT       | slink:VkPipelineLayout
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT           | slink:VkRenderPass
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT              | slink:VkPipeline
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT | slink:VkDescriptorSetLayout
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT               | slink:VkSampler
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT       | slink:VkDescriptorPool
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT        | slink:VkDescriptorSet
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT           | slink:VkFramebuffer
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT          | slink:VkCommandPool
+ifdef::VK_KHR_surface[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT           | slink:VkSurfaceKHR
+endif::VK_KHR_surface[]
+ifdef::VK_KHR_surface[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT         | slink:VkSwapchainKHR
+endif::VK_KHR_surface[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT | slink:VkDebugReportCallbackEXT
+ifdef::VK_KHR_display[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT           | slink:VkDisplayKHR
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT      | slink:VkDisplayModeKHR
+endif::VK_KHR_display[]
+ifndef::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT | slink:VkDescriptorUpdateTemplate
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+| ename:VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT | slink:VkDescriptorUpdateTemplate
+endif::VK_VERSION_1_1[]
+|====
+
+[NOTE]
+.Note
+====
+The primary expected use of ename:VK_ERROR_VALIDATION_FAILED_EXT is for
+validation layer testing.
+It is not expected that an application would see this error code during
+normal use of the validation layers.
+====
+--
+
+[open,refpage='vkDebugReportMessageEXT',desc='Inject a message into a debug stream',type='protos']
+--
+To inject its own messages into the debug stream, call:
+
+include::{generated}/api/protos/vkDebugReportMessageEXT.adoc[]
+
+  * pname:instance is the debug stream's slink:VkInstance.
+  * pname:flags specifies the elink:VkDebugReportFlagBitsEXT classification
+    of this event/message.
+  * pname:objectType is a elink:VkDebugReportObjectTypeEXT specifying the
+    type of object being used or created at the time the event was
+    triggered.
+  * pname:object is the object where the issue was detected.
+    pname:object can: be dlink:VK_NULL_HANDLE if there is no object
+    associated with the event.
+  * pname:location is an application defined value.
+  * pname:messageCode is an application defined value.
+  * pname:pLayerPrefix is the abbreviation of the component making this
+    event/message.
+  * pname:pMessage is a null-terminated string detailing the trigger
+    conditions.
+
+The call will propagate through the layers and generate callback(s) as
+indicated by the message's flags.
+The parameters are passed on to the callback in addition to the
+pname:pUserData value that was defined at the time the callback was
+registered.
+
+.Valid Usage
+****
+  * [[VUID-vkDebugReportMessageEXT-object-01241]]
+    pname:object must: be a Vulkan object or dlink:VK_NULL_HANDLE
+  * [[VUID-vkDebugReportMessageEXT-objectType-01498]]
+    If pname:objectType is not ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
+    and pname:object is not dlink:VK_NULL_HANDLE, pname:object must: be a
+    Vulkan object of the corresponding type associated with pname:objectType
+    as defined in <<debug-report-object-types>>
+****
+
+include::{generated}/validity/protos/vkDebugReportMessageEXT.adoc[]
+--
+
+[open,refpage='vkDestroyDebugReportCallbackEXT',desc='Destroy a debug report callback object',type='protos']
+--
+To destroy a sname:VkDebugReportCallbackEXT object, call:
+
+include::{generated}/api/protos/vkDestroyDebugReportCallbackEXT.adoc[]
+
+  * pname:instance is the instance where the callback was created.
+  * pname:callback is the slink:VkDebugReportCallbackEXT object to destroy.
+    pname:callback is an externally synchronized object and must: not be
+    used on more than one thread at a time.
+    This means that fname:vkDestroyDebugReportCallbackEXT must: not be
+    called when a callback is active.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyDebugReportCallbackEXT-instance-01242]]
+    If sname:VkAllocationCallbacks were provided when pname:callback was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyDebugReportCallbackEXT-instance-01243]]
+    If no sname:VkAllocationCallbacks were provided when pname:callback was
+    created, pname:pAllocator must: be `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyDebugReportCallbackEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_utils.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_utils.adoc
new file mode 100644
index 0000000..2bbe256
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_debug_utils.adoc
@@ -0,0 +1,878 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[debugging-debug-utils]]
+== Debug Utilities
+
+Vulkan provides flexible debugging utilities for debugging an application.
+
+The <<debugging-object-debug-annotation,Object Debug Annotation>> section
+describes how to associate either a name or binary data with a specific
+Vulkan object.
+
+The <<debugging-queue-labels,Queue Labels>> section describes how to
+annotate and group the work submitted to a queue.
+
+The <<debugging-command-buffer-labels,Command Buffer Labels>> section
+describes how to associate logical elements of the scene with commands in a
+slink:VkCommandBuffer.
+
+The <<debugging-debug-messengers,Debug Messengers>> section describes how to
+create debug messenger objects associated with an application supplied
+callback to capture debug messages from a variety of Vulkan components.
+
+
+[[debugging-object-debug-annotation]]
+=== Object Debug Annotation
+
+It can be useful for an application to provide its own content relative to a
+specific Vulkan object.
+
+The following commands allow application developers to associate
+user-defined information with Vulkan objects.
+These commands are device-level commands but they may: reference
+instance-level objects (such as slink:VkInstance) and physical device-level
+objects (such as slink:VkPhysicalDevice) with a few restrictions:
+  * The data for the corresponding object may: still be available after the
+    slink:VkDevice used in the corresponding API call to set it is
+    destroyed, but access to this data is not guaranteed and should be
+    avoided.
+  * Subsequent calls to change the data of the same object across multiple
+    sname:VkDevice objects, may: result in the data being changed to the
+    most recent version for all sname:VkDevice objects and not just the
+    sname:VkDevice used in the most recent API call.
+
+[[debugging-object-naming]]
+==== Object Naming
+
+An object can be provided a user-defined name by calling
+fname:vkSetDebugUtilsObjectNameEXT as defined below.
+
+[open,refpage='vkSetDebugUtilsObjectNameEXT',desc='Give a user-friendly name to an object',type='protos']
+--
+include::{generated}/api/protos/vkSetDebugUtilsObjectNameEXT.adoc[]
+
+  * pname:device is the device that is associated with the named object
+    passed in via pname:objectHandle.
+  * pname:pNameInfo is a pointer to a slink:VkDebugUtilsObjectNameInfoEXT
+    structure specifying parameters of the name to set on the object.
+
+.Valid Usage
+****
+  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587]]
+    pname:pNameInfo->objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
+  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588]]
+    pname:pNameInfo->objectHandle must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07872]]
+    If pname:pNameInfo->objectHandle is the valid handle of an
+    instance-level object, the slink:VkDevice identified by pname:device
+    must: be a descendent of the same slink:VkInstance as the object
+    identified by pname:pNameInfo->objectHandle
+  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07873]]
+    If pname:pNameInfo->objectHandle is the valid handle of a
+    physical-device-level object, the slink:VkDevice identified by
+    pname:device must: be a descendant of the same slink:VkPhysicalDevice as
+    the object identified by pname:pNameInfo->objectHandle
+  * [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07874]]
+    If pname:pNameInfo->objectHandle is the valid handle of a device-level
+    object, that object must: be a descendent of the slink:VkDevice
+    identified by pname:device
+****
+
+include::{generated}/validity/protos/vkSetDebugUtilsObjectNameEXT.adoc[]
+--
+
+[open,refpage='VkDebugUtilsObjectNameInfoEXT',desc='Specify parameters of a name to give to an object',type='structs']
+--
+The sname:VkDebugUtilsObjectNameInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugUtilsObjectNameInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:objectType is a elink:VkObjectType specifying the type of the
+    object to be named.
+  * pname:objectHandle is the object to be named.
+  * pname:pObjectName is either `NULL` or a null-terminated UTF-8 string
+    specifying the name to apply to pname:objectHandle.
+
+Applications may: change the name associated with an object simply by
+calling fname:vkSetDebugUtilsObjectNameEXT again with a new string.
+If pname:pObjectName is either `NULL` or an empty string, then any
+previously set name is removed.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+The <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
+feature allows the specification of pipelines without the creation of
+slink:VkShaderModule objects beforehand.
+In order to continue to allow naming these shaders independently,
+sname:VkDebugUtilsObjectNameInfoEXT can: be included in the pname:pNext
+chain of slink:VkPipelineShaderStageCreateInfo, which associates a static
+name with that particular shader.
+endif::VK_EXT_graphics_pipeline_library[]
+
+.Valid Usage
+****
+  * [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589]]
+    If pname:objectType is ename:VK_OBJECT_TYPE_UNKNOWN, pname:objectHandle
+    must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590]]
+    If pname:objectType is not ename:VK_OBJECT_TYPE_UNKNOWN,
+    pname:objectHandle must: be dlink:VK_NULL_HANDLE or a valid Vulkan
+    handle of the type associated with pname:objectType as defined in the
+    <<debugging-object-types, `VkObjectType` and Vulkan Handle
+    Relationship>> table
+****
+
+include::{generated}/validity/structs/VkDebugUtilsObjectNameInfoEXT.adoc[]
+--
+
+
+[[debugging-object-data-association]]
+==== Object Data Association
+
+In addition to setting a name for an object, debugging and validation layers
+may: have uses for additional binary data on a per-object basis that have no
+other place in the Vulkan API.
+
+For example, a sname:VkShaderModule could have additional debugging data
+attached to it to aid in offline shader tracing.
+
+Additional data can be attached to an object by calling
+fname:vkSetDebugUtilsObjectTagEXT as defined below.
+
+[open,refpage='vkSetDebugUtilsObjectTagEXT',desc='Attach arbitrary data to an object',type='protos']
+--
+include::{generated}/api/protos/vkSetDebugUtilsObjectTagEXT.adoc[]
+
+  * pname:device is the device that created the object.
+  * pname:pTagInfo is a pointer to a slink:VkDebugUtilsObjectTagInfoEXT
+    structure specifying parameters of the tag to attach to the object.
+
+.Valid Usage
+****
+  * [[VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07875]]
+    If pname:pNameInfo->objectHandle is the valid handle of an
+    instance-level object, the slink:VkDevice identified by pname:device
+    must: be a descendent of the same slink:VkInstance as the object
+    identified by pname:pNameInfo->objectHandle
+  * [[VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07876]]
+    If pname:pNameInfo->objectHandle is the valid handle of a
+    physical-device-level object, the slink:VkDevice identified by
+    pname:device must: be a descendant of the same slink:VkPhysicalDevice as
+    the object identified by pname:pNameInfo->objectHandle
+  * [[VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07877]]
+    If pname:pNameInfo->objectHandle is the valid handle of a device-level
+    object, that object must: be a descendent of the slink:VkDevice
+    identified by pname:device
+****
+
+include::{generated}/validity/protos/vkSetDebugUtilsObjectTagEXT.adoc[]
+--
+
+[open,refpage='VkDebugUtilsObjectTagInfoEXT',desc='Specify parameters of a tag to attach to an object',type='structs']
+--
+The sname:VkDebugUtilsObjectTagInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugUtilsObjectTagInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:objectType is a elink:VkObjectType specifying the type of the
+    object to be named.
+  * pname:objectHandle is the object to be tagged.
+  * pname:tagName is a numerical identifier of the tag.
+  * pname:tagSize is the number of bytes of data to attach to the object.
+  * pname:pTag is a pointer to an array of pname:tagSize bytes containing
+    the data to be associated with the object.
+
+The pname:tagName parameter gives a name or identifier to the type of data
+being tagged.
+This can be used by debugging layers to easily filter for only data that can
+be used by that implementation.
+
+.Valid Usage
+****
+  * [[VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908]]
+    pname:objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
+  * [[VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910]]
+    pname:objectHandle must: be a valid Vulkan handle of the type associated
+    with pname:objectType as defined in the <<debugging-object-types,
+    `VkObjectType` and Vulkan Handle Relationship>> table
+****
+
+include::{generated}/validity/structs/VkDebugUtilsObjectTagInfoEXT.adoc[]
+--
+
+
+[[debugging-queue-labels]]
+=== Queue Labels
+
+All Vulkan work must be submitted using queues.
+It is possible for an application to use multiple queues, each containing
+multiple command buffers, when performing work.
+It can be useful to identify which queue, or even where in a queue,
+something has occurred.
+
+To begin identifying a region using a debug label inside a queue, you may
+use the flink:vkQueueBeginDebugUtilsLabelEXT command.
+
+Then, when the region of interest has passed, you may end the label region
+using flink:vkQueueEndDebugUtilsLabelEXT.
+
+Additionally, a single debug label may be inserted at any time using
+flink:vkQueueInsertDebugUtilsLabelEXT.
+
+[open,refpage='vkQueueBeginDebugUtilsLabelEXT',desc='Open a queue debug label region',type='protos']
+--
+A queue debug label region is opened by calling:
+
+include::{generated}/api/protos/vkQueueBeginDebugUtilsLabelEXT.adoc[]
+
+  * pname:queue is the queue in which to start a debug label region.
+  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
+    specifying parameters of the label region to open.
+
+include::{generated}/validity/protos/vkQueueBeginDebugUtilsLabelEXT.adoc[]
+--
+
+[open,refpage='VkDebugUtilsLabelEXT',desc='Specify parameters of a label region',type='structs']
+--
+The sname:VkDebugUtilsLabelEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugUtilsLabelEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pLabelName is a pointer to a null-terminated UTF-8 string
+    containing the name of the label.
+  * pname:color is an optional RGBA color value that can be associated with
+    the label.
+    A particular implementation may: choose to ignore this color value.
+    The values contain RGBA values in order, in the range 0.0 to 1.0.
+    If all elements in pname:color are set to 0.0 then it is ignored.
+
+include::{generated}/validity/structs/VkDebugUtilsLabelEXT.adoc[]
+--
+
+[open,refpage='vkQueueEndDebugUtilsLabelEXT',desc='Close a queue debug label region',type='protos']
+--
+A queue debug label region is closed by calling:
+
+include::{generated}/api/protos/vkQueueEndDebugUtilsLabelEXT.adoc[]
+
+  * pname:queue is the queue in which a debug label region should be closed.
+
+The calls to flink:vkQueueBeginDebugUtilsLabelEXT and
+flink:vkQueueEndDebugUtilsLabelEXT must: be matched and balanced.
+
+.Valid Usage
+****
+  * [[VUID-vkQueueEndDebugUtilsLabelEXT-None-01911]]
+    There must: be an outstanding fname:vkQueueBeginDebugUtilsLabelEXT
+    command prior to the fname:vkQueueEndDebugUtilsLabelEXT on the queue
+****
+
+include::{generated}/validity/protos/vkQueueEndDebugUtilsLabelEXT.adoc[]
+--
+
+[open,refpage='vkQueueInsertDebugUtilsLabelEXT',desc='Insert a label into a queue',type='protos']
+--
+A single label can be inserted into a queue by calling:
+
+include::{generated}/api/protos/vkQueueInsertDebugUtilsLabelEXT.adoc[]
+
+  * pname:queue is the queue into which a debug label will be inserted.
+  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
+    specifying parameters of the label to insert.
+
+include::{generated}/validity/protos/vkQueueInsertDebugUtilsLabelEXT.adoc[]
+--
+
+
+[[debugging-command-buffer-labels]]
+=== Command Buffer Labels
+
+Typical Vulkan applications will submit many command buffers in each frame,
+with each command buffer containing a large number of individual commands.
+Being able to logically annotate regions of command buffers that belong
+together as well as hierarchically subdivide the frame is important to a
+developer's ability to navigate the commands viewed holistically.
+
+To identify the beginning of a debug label region in a command buffer,
+flink:vkCmdBeginDebugUtilsLabelEXT can: be used as defined below.
+
+To indicate the end of a debug label region in a command buffer,
+flink:vkCmdEndDebugUtilsLabelEXT can: be used.
+
+To insert a single command buffer debug label inside of a command buffer,
+flink:vkCmdInsertDebugUtilsLabelEXT can: be used as defined below.
+
+[open,refpage='vkCmdBeginDebugUtilsLabelEXT',desc='Open a command buffer debug label region',type='protos']
+--
+A command buffer debug label region can be opened by calling:
+
+include::{generated}/api/protos/vkCmdBeginDebugUtilsLabelEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pLabelInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
+    specifying parameters of the label region to open.
+
+include::{generated}/validity/protos/vkCmdBeginDebugUtilsLabelEXT.adoc[]
+--
+
+[open,refpage='vkCmdEndDebugUtilsLabelEXT',desc='Close a command buffer label region',type='protos']
+--
+A command buffer label region can be closed by calling:
+
+include::{generated}/api/protos/vkCmdEndDebugUtilsLabelEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+
+An application may: open a debug label region in one command buffer and
+close it in another, or otherwise split debug label regions across multiple
+command buffers or multiple queue submissions.
+When viewed from the linear series of submissions to a single queue, the
+calls to flink:vkCmdBeginDebugUtilsLabelEXT and
+flink:vkCmdEndDebugUtilsLabelEXT must: be matched and balanced.
+
+There can: be problems reporting command buffer debug labels during the
+recording process because command buffers may: be recorded out of sequence
+with the resulting execution order.
+Since the recording order may: be different, a solitary command buffer may:
+have an inconsistent view of the debug label regions by itself.
+Therefore, if an issue occurs during the recording of a command buffer, and
+the environment requires returning debug labels, the implementation may:
+return only those labels it is aware of.
+This is true even if the implementation is aware of only the debug labels
+within the command buffer being actively recorded.
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912]]
+    There must: be an outstanding fname:vkCmdBeginDebugUtilsLabelEXT command
+    prior to the fname:vkCmdEndDebugUtilsLabelEXT on the queue that
+    pname:commandBuffer is submitted to
+  * [[VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913]]
+    If pname:commandBuffer is a secondary command buffer, there must: be an
+    outstanding fname:vkCmdBeginDebugUtilsLabelEXT command recorded to
+    pname:commandBuffer that has not previously been ended by a call to
+    fname:vkCmdEndDebugUtilsLabelEXT
+****
+
+include::{generated}/validity/protos/vkCmdEndDebugUtilsLabelEXT.adoc[]
+--
+
+[open,refpage='vkCmdInsertDebugUtilsLabelEXT',desc='Insert a label into a command buffer',type='protos']
+--
+A single debug label can be inserted into a command buffer by calling:
+
+include::{generated}/api/protos/vkCmdInsertDebugUtilsLabelEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
+    specifying parameters of the label to insert.
+
+include::{generated}/validity/protos/vkCmdInsertDebugUtilsLabelEXT.adoc[]
+--
+
+
+[[debugging-debug-messengers]]
+=== Debug Messengers
+
+Vulkan allows an application to register multiple callbacks with any Vulkan
+component wishing to report debug information.
+Some callbacks may log the information to a file, others may cause a debug
+break point or other application defined behavior.
+A primary producer of callback messages are the validation layers.
+An application can: register callbacks even when no validation layers are
+enabled, but they will only be called for the Vulkan loader and, if
+implemented, other layer and driver events.
+
+[open,refpage='VkDebugUtilsMessengerEXT',desc='Opaque handle to a debug messenger object',type='handles']
+--
+A sname:VkDebugUtilsMessengerEXT is a messenger object which handles passing
+along debug messages to a provided debug callback.
+
+include::{generated}/api/handles/VkDebugUtilsMessengerEXT.adoc[]
+
+The debug messenger will provide detailed feedback on the application's use
+of Vulkan when events of interest occur.
+When an event of interest does occur, the debug messenger will submit a
+debug message to the debug callback that was provided during its creation.
+Additionally, the debug messenger is responsible with filtering out debug
+messages that the callback is not interested in and will only provide
+desired debug messages.
+--
+
+[open,refpage='vkCreateDebugUtilsMessengerEXT',desc='Create a debug messenger object',type='protos']
+--
+A debug messenger triggers a debug callback with a debug message when an
+event of interest occurs.
+To create a debug messenger which will trigger a debug callback, call:
+
+include::{generated}/api/protos/vkCreateDebugUtilsMessengerEXT.adoc[]
+
+  * pname:instance is the instance the messenger will be used with.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkDebugUtilsMessengerCreateInfoEXT structure containing the
+    callback pointer, as well as defining conditions under which this
+    messenger will trigger the callback.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pMessenger is a pointer to a slink:VkDebugUtilsMessengerEXT handle
+    in which the created object is returned.
+
+include::{generated}/validity/protos/vkCreateDebugUtilsMessengerEXT.adoc[]
+
+The application must: ensure that flink:vkCreateDebugUtilsMessengerEXT is
+not executed in parallel with any Vulkan command that is also called with
+pname:instance or child of pname:instance as the dispatchable argument.
+--
+
+[open,refpage='VkDebugUtilsMessengerCreateInfoEXT',desc='Structure specifying parameters of a newly created debug messenger',type='structs']
+--
+The definition of sname:VkDebugUtilsMessengerCreateInfoEXT is:
+
+include::{generated}/api/structs/VkDebugUtilsMessengerCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is `0` and is reserved for future use.
+  * pname:messageSeverity is a bitmask of
+    elink:VkDebugUtilsMessageSeverityFlagBitsEXT specifying which severity
+    of event(s) will cause this callback to be called.
+  * pname:messageType is a bitmask of
+    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
+    event(s) will cause this callback to be called.
+  * pname:pfnUserCallback is the application callback function to call.
+  * pname:pUserData is user data to be passed to the callback.
+
+For each sname:VkDebugUtilsMessengerEXT that is created the
+sname:VkDebugUtilsMessengerCreateInfoEXT::pname:messageSeverity and
+sname:VkDebugUtilsMessengerCreateInfoEXT::pname:messageType determine when
+that sname:VkDebugUtilsMessengerCreateInfoEXT::pname:pfnUserCallback is
+called.
+The process to determine if the user's pname:pfnUserCallback is triggered
+when an event occurs is as follows:
+
+  . The implementation will perform a bitwise AND of the event's
+    elink:VkDebugUtilsMessageSeverityFlagBitsEXT with the
+    pname:messageSeverity provided during creation of the
+    slink:VkDebugUtilsMessengerEXT object.
+  .. If the value is 0, the message is skipped.
+  . The implementation will perform bitwise AND of the event's
+    elink:VkDebugUtilsMessageTypeFlagBitsEXT with the pname:messageType
+    provided during the creation of the slink:VkDebugUtilsMessengerEXT
+    object.
+  .. If the value is 0, the message is skipped.
+  . The callback will trigger a debug message for the current event
+
+The callback will come directly from the component that detected the event,
+unless some other layer intercepts the calls for its own purposes (filter
+them in a different way, log to a system error log, etc.).
+
+An application can: receive multiple callbacks if multiple
+sname:VkDebugUtilsMessengerEXT objects are created.
+A callback will always be executed in the same thread as the originating
+Vulkan call.
+
+A callback can: be called from multiple threads simultaneously (if the
+application is making Vulkan calls from multiple threads).
+
+.Valid Usage
+****
+  * [[VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914]]
+    pname:pfnUserCallback must: be a valid
+    tlink:PFN_vkDebugUtilsMessengerCallbackEXT
+****
+
+include::{generated}/validity/structs/VkDebugUtilsMessengerCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkDebugUtilsMessengerCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessengerCreateFlagsEXT.adoc[]
+
+tname:VkDebugUtilsMessengerCreateFlagsEXT is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkDebugUtilsMessageSeverityFlagBitsEXT',desc='Bitmask specifying which severities of events cause a debug messenger callback',type='enums']
+--
+Bits which can: be set in
+slink:VkDebugUtilsMessengerCreateInfoEXT::pname:messageSeverity, specifying
+event severities which cause a debug messenger to call the callback, are:
+
+include::{generated}/api/enums/VkDebugUtilsMessageSeverityFlagBitsEXT.adoc[]
+
+  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT specifies the most
+    verbose output indicating all diagnostic messages from the Vulkan
+    loader, layers, and drivers should be captured.
+  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT specifies an
+    informational message such as resource details that may be handy when
+    debugging an application.
+  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT specifies use of
+    Vulkan that may: expose an app bug.
+    Such cases may not be immediately harmful, such as a fragment shader
+    outputting to a location with no attachment.
+    Other cases may: point to behavior that is almost certainly bad when
+    unintended such as using an image whose memory has not been filled.
+    In general if you see a warning but you know that the behavior is
+    intended/desired, then simply ignore the warning.
+  * ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT specifies that the
+    application has violated a valid usage condition of the specification.
+
+[NOTE]
+.Note
+====
+The values of elink:VkDebugUtilsMessageSeverityFlagBitsEXT are sorted based
+on severity.
+The higher the flag value, the more severe the message.
+This allows for simple boolean operation comparisons when looking at
+elink:VkDebugUtilsMessageSeverityFlagBitsEXT values.
+
+For example:
+
+[source,c++]
+----
+    if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
+        // Do something for warnings and errors
+    }
+----
+
+In addition, space has been left between the enums to allow for later
+addition of new severities in between the existing values.
+====
+--
+
+[open,refpage='VkDebugUtilsMessageSeverityFlagsEXT',desc='Bitmask of VkDebugUtilsMessageSeverityFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessageSeverityFlagsEXT.adoc[]
+
+tname:VkDebugUtilsMessageSeverityFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkDebugUtilsMessageSeverityFlagBitsEXT.
+--
+
+[open,refpage='VkDebugUtilsMessageTypeFlagBitsEXT',desc='Bitmask specifying which types of events cause a debug messenger callback',type='enums']
+--
+Bits which can: be set in
+slink:VkDebugUtilsMessengerCreateInfoEXT::pname:messageType, specifying
+event types which cause a debug messenger to call the callback, are:
+
+include::{generated}/api/enums/VkDebugUtilsMessageTypeFlagBitsEXT.adoc[]
+
+  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT specifies that some
+    general event has occurred.
+    This is typically a non-specification, non-performance event.
+  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT specifies that
+    something has occurred during validation against the Vulkan
+    specification that may indicate invalid behavior.
+  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT specifies a
+    potentially non-optimal use of Vulkan, e.g. using
+    flink:vkCmdClearColorImage when setting
+    slink:VkAttachmentDescription::pname:loadOp to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR would have worked.
+ifdef::VK_EXT_device_address_binding_report[]
+  * ename:VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT
+    specifies that the implementation has modified the set of GPU-visible
+    virtual addresses associated with a Vulkan object.
+endif::VK_EXT_device_address_binding_report[]
+--
+
+[open,refpage='VkDebugUtilsMessageTypeFlagsEXT',desc='Bitmask of VkDebugUtilsMessageTypeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessageTypeFlagsEXT.adoc[]
+
+tname:VkDebugUtilsMessageTypeFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkDebugUtilsMessageTypeFlagBitsEXT.
+--
+
+[open,refpage='PFN_vkDebugUtilsMessengerCallbackEXT',desc='Application-defined debug messenger callback function',type='funcpointers']
+--
+The prototype for the
+slink:VkDebugUtilsMessengerCreateInfoEXT::pname:pfnUserCallback function
+implemented by the application is:
+
+include::{generated}/api/funcpointers/PFN_vkDebugUtilsMessengerCallbackEXT.adoc[]
+
+  * pname:messageSeverity specifies the
+    elink:VkDebugUtilsMessageSeverityFlagBitsEXT that triggered this
+    callback.
+  * pname:messageTypes is a bitmask of
+    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
+    event(s) triggered this callback.
+  * pname:pCallbackData contains all the callback related data in the
+    slink:VkDebugUtilsMessengerCallbackDataEXT structure.
+  * pname:pUserData is the user data provided when the
+    slink:VkDebugUtilsMessengerEXT was created.
+
+The callback returns a basetype:VkBool32, which is interpreted in a
+layer-specified manner.
+The application should: always return ename:VK_FALSE.
+The ename:VK_TRUE value is reserved for use in layer development.
+
+.Valid Usage
+****
+  * [[VUID-PFN_vkDebugUtilsMessengerCallbackEXT-None-04769]]
+    The callback must: not make calls to any Vulkan commands
+****
+--
+
+[open,refpage='VkDebugUtilsMessengerCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
+--
+The definition of sname:VkDebugUtilsMessengerCallbackDataEXT is:
+
+include::{generated}/api/structs/VkDebugUtilsMessengerCallbackDataEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is `0` and is reserved for future use.
+  * pname:pMessageIdName is a null-terminated string that identifies the
+    particular message ID that is associated with the provided message.
+    If the message corresponds to a validation layer message, then this
+    string may contain the portion of the Vulkan specification that is
+    believed to have been violated.
+  * pname:messageIdNumber is the ID number of the triggering message.
+    If the message corresponds to a validation layer message, then this
+    number is related to the internal number associated with the message
+    being triggered.
+  * pname:pMessage is a null-terminated string detailing the trigger
+    conditions.
+  * pname:queueLabelCount is a count of items contained in the
+    pname:pQueueLabels array.
+  * pname:pQueueLabels is `NULL` or a pointer to an array of
+    slink:VkDebugUtilsLabelEXT active in the current sname:VkQueue at the
+    time the callback was triggered.
+    Refer to <<debugging-queue-labels,Queue Labels>> for more information.
+  * pname:cmdBufLabelCount is a count of items contained in the
+    pname:pCmdBufLabels array.
+  * pname:pCmdBufLabels is `NULL` or a pointer to an array of
+    slink:VkDebugUtilsLabelEXT active in the current sname:VkCommandBuffer
+    at the time the callback was triggered.
+    Refer to <<debugging-command-buffer-labels, Command Buffer Labels>> for
+    more information.
+  * pname:objectCount is a count of items contained in the pname:pObjects
+    array.
+  * pname:pObjects is a pointer to an array of
+    slink:VkDebugUtilsObjectNameInfoEXT objects related to the detected
+    issue.
+    The array is roughly in order or importance, but the 0th element is
+    always guaranteed to be the most important object for this message.
+
+[NOTE]
+.Note
+====
+This structure should only be considered valid during the lifetime of the
+triggered callback.
+====
+
+Since adding queue and command buffer labels behaves like pushing and
+popping onto a stack, the order of both pname:pQueueLabels and
+pname:pCmdBufLabels is based on the order the labels were defined.
+The result is that the first label in either pname:pQueueLabels or
+pname:pCmdBufLabels will be the first defined (and therefore the oldest)
+while the last label in each list will be the most recent.
+
+[NOTE]
+.Note
+====
+pname:pQueueLabels will only be non-`NULL` if one of the objects in
+pname:pObjects can be related directly to a defined sname:VkQueue which has
+had one or more labels associated with it.
+
+Likewise, pname:pCmdBufLabels will only be non-`NULL` if one of the objects
+in pname:pObjects can be related directly to a defined sname:VkCommandBuffer
+which has had one or more labels associated with it.
+Additionally, while command buffer labels allow for beginning and ending
+across different command buffers, the debug messaging framework cannot:
+guarantee that labels in pname:pCmdBufLables will contain those defined
+outside of the associated command buffer.
+This is partially due to the fact that the association of one command buffer
+with another may not have been defined at the time the debug message is
+triggered.
+====
+
+include::{generated}/validity/structs/VkDebugUtilsMessengerCallbackDataEXT.adoc[]
+--
+
+[open,refpage='VkDebugUtilsMessengerCallbackDataFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessengerCallbackDataFlagsEXT.adoc[]
+
+tname:VkDebugUtilsMessengerCallbackDataFlagsEXT is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_EXT_device_address_binding_report[]
+[open,refpage='VkDeviceAddressBindingCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
+--
+The definition of sname:VkDeviceAddressBindingCallbackDataEXT is:
+
+include::{generated}/api/structs/VkDeviceAddressBindingCallbackDataEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkDeviceAddressBindingFlagBitsEXT
+    specifying additional information about the binding event that caused
+    the callback to be called.
+  * pname:baseAddress is a GPU-accessible virtual address identifying the
+    start of a region of the virtual address space associated with a Vulkan
+    object, as identified by the pname:pObjects member of
+    slink:VkDebugUtilsMessengerCallbackDataEXT.
+  * pname:size is the size in bytes of a region of GPU-accessible virtual
+    address space.
+  * pname:bindingType is a elink:VkDeviceAddressBindingTypeEXT specifying
+    the type of binding event that caused the callback to be called.
+
+If the <<features-reportAddressBinding, pname:reportAddressBinding>> feature
+is enabled and the implementation binds or unbinds a region of virtual
+address space associated with a Vulkan object, the implementation must:
+submit a debug message with the following properties:
+
+  * pname:messageSeverity equal to
+    ename:VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
+  * pname:messageType equal to
+    ename:VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT
+  * sname:VkDebugUtilsMessengerCallbackDataEXT::pname:pObjects must:
+    identify the associated Vulkan object
+  * sname:VkDeviceAddressBindingCallbackDataEXT must: be included in the
+    pname:pNext chain of sname:VkDebugUtilsMessengerCallbackDataEXT
+
+These debug messages must: be emitted both for GPU virtual address space
+regions that are explicitly bound to a Vulkan object via the
+sname:vkBind*Memory/sname:vkBind*Memory2 functions, and for those that are
+implicitly generated via memory allocation or importing external memory.
+
+An implementation may: report binding events associated with a Vulkan object
+via sname:VkDebugUtilsMessengerEXT prior to the object becoming visible to
+an application via other Vulkan commands.
+For example, object creation functions may: report binding events that occur
+during an objects creation.
+In such cases, sname:VkDeviceAddressBindingCallbackDataEXT::pname:flags
+must: include ename:VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT.
+
+Object handles reported in this manner are not
+<<fundamentals-validusage-handles, valid object handles>>, and must: not be
+used as an input parameter to any Vulkan command.
+
+Any valid object handle returned by an object creation function must: match
+the handle specified via any previously reported binding events associated
+with the object's creation.
+
+include::{generated}/validity/structs/VkDeviceAddressBindingCallbackDataEXT.adoc[]
+--
+
+[open,refpage='VkDeviceAddressBindingFlagBitsEXT',desc='Bitmask specifying the additional information about a binding event',type='enums']
+--
+Bits which can: be set in
+slink:VkDeviceAddressBindingCallbackDataEXT::pname:flags specifying
+additional information about a binding event are:
+
+include::{generated}/api/enums/VkDeviceAddressBindingFlagBitsEXT.adoc[]
+
+  * ename:VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT specifies that
+    slink:VkDeviceAddressBindingCallbackDataEXT describes a Vulkan object
+    that has not been made visible to the application via a Vulkan command.
+--
+
+[open,refpage='VkDeviceAddressBindingFlagsEXT',desc='Bitmask of VkDeviceAddressBindingFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkDeviceAddressBindingFlagsEXT.adoc[]
+
+tlink:VkDeviceAddressBindingFlagsEXT is a bitmask type for setting a mask of
+zero or more elink:VkDeviceAddressBindingFlagBitsEXT.
+--
+
+[open,refpage='VkDeviceAddressBindingTypeEXT',desc='Enum describing a change in device address bindings',type='enums']
+--
+The ename:VkDeviceAddressBindingTypeEXT enum is defined as:
+
+include::{generated}/api/enums/VkDeviceAddressBindingTypeEXT.adoc[]
+
+  * ename:VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT specifies that a new
+    GPU-accessible virtual address range has been bound.
+  * ename:VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT specifies that a
+    GPU-accessible virtual address range has been unbound.
+
+--
+endif::VK_EXT_device_address_binding_report[]
+
+[open,refpage='vkSubmitDebugUtilsMessageEXT',desc='Inject a message into a debug stream',type='protos']
+--
+There may be times that a user wishes to intentionally submit a debug
+message.
+To do this, call:
+
+include::{generated}/api/protos/vkSubmitDebugUtilsMessageEXT.adoc[]
+
+  * pname:instance is the debug stream's slink:VkInstance.
+  * pname:messageSeverity is a elink:VkDebugUtilsMessageSeverityFlagBitsEXT
+    value specifying the severity of this event/message.
+  * pname:messageTypes is a bitmask of
+    elink:VkDebugUtilsMessageTypeFlagBitsEXT specifying which type of
+    event(s) to identify with this message.
+  * pname:pCallbackData contains all the callback related data in the
+    slink:VkDebugUtilsMessengerCallbackDataEXT structure.
+
+The call will propagate through the layers and generate callback(s) as
+indicated by the message's flags.
+The parameters are passed on to the callback in addition to the
+pname:pUserData value that was defined at the time the messenger was
+registered.
+
+.Valid Usage
+****
+  * [[VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591]]
+    The pname:objectType member of each element of
+    pname:pCallbackData->pObjects must: not be ename:VK_OBJECT_TYPE_UNKNOWN
+****
+
+include::{generated}/validity/protos/vkSubmitDebugUtilsMessageEXT.adoc[]
+--
+
+[open,refpage='vkDestroyDebugUtilsMessengerEXT',desc='Destroy a debug messenger object',type='protos']
+--
+To destroy a sname:VkDebugUtilsMessengerEXT object, call:
+
+include::{generated}/api/protos/vkDestroyDebugUtilsMessengerEXT.adoc[]
+
+  * pname:instance is the instance where the callback was created.
+  * pname:messenger is the slink:VkDebugUtilsMessengerEXT object to destroy.
+    pname:messenger is an externally synchronized object and must: not be
+    used on more than one thread at a time.
+    This means that fname:vkDestroyDebugUtilsMessengerEXT must: not be
+    called when a callback is active.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915]]
+    If sname:VkAllocationCallbacks were provided when pname:messenger was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916]]
+    If no sname:VkAllocationCallbacks were provided when pname:messenger was
+    created, pname:pAllocator must: be `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyDebugUtilsMessengerEXT.adoc[]
+
+The application must: ensure that flink:vkDestroyDebugUtilsMessengerEXT is
+not executed in parallel with any Vulkan command that is also called with
+pname:instance or child of pname:instance as the dispatchable argument.
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_direct_mode_display/acquire_release_displays.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_direct_mode_display/acquire_release_displays.adoc
new file mode 100644
index 0000000..1cee9f4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_direct_mode_display/acquire_release_displays.adoc
@@ -0,0 +1,35 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+==== Acquiring and Releasing Displays
+
+On some platforms, access to displays is limited to a single process or
+native driver instance.
+On such platforms, some or all of the displays may not be available to
+Vulkan if they are already in use by a native windowing system or other
+application.
+
+ifdef::VK_EXT_acquire_xlib_display[]
+include::{chapters}/VK_EXT_acquire_xlib_display/acquire_xlib_display.adoc[]
+endif::VK_EXT_acquire_xlib_display[]
+
+ifdef::VK_NV_acquire_winrt_display[]
+include::{chapters}/VK_NV_acquire_winrt_display/acquire_winrt_display.adoc[]
+endif::VK_NV_acquire_winrt_display[]
+
+ifdef::VK_EXT_acquire_drm_display[]
+include::{chapters}/VK_EXT_acquire_drm_display/acquire_drm_display.adoc[]
+endif::VK_EXT_acquire_drm_display[]
+
+[open,refpage='vkReleaseDisplayEXT',desc='Release access to an acquired VkDisplayKHR',type='protos']
+--
+To release a previously acquired display, call:
+
+include::{generated}/api/protos/vkReleaseDisplayEXT.adoc[]
+
+  * pname:physicalDevice The physical device the display is on.
+  * pname:display The display to release control of.
+
+include::{generated}/validity/protos/vkReleaseDisplayEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.adoc
new file mode 100644
index 0000000..a8c7268
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.adoc
@@ -0,0 +1,62 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_directfb]]
+=== DirectFB Platform
+
+[open,refpage='vkCreateDirectFBSurfaceEXT',desc='Create a slink:VkSurfaceKHR object for a DirectFB surface',type='protos']
+--
+:refpage: vkCreateDirectFBSurfaceEXT
+
+To create a sname:VkSurfaceKHR object for a DirectFB surface, call:
+
+include::{generated}/api/protos/vkCreateDirectFBSurfaceEXT.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a sname:VkDirectFBSurfaceCreateInfoEXT
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateDirectFBSurfaceEXT.adoc[]
+--
+
+[open,refpage='VkDirectFBSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created DirectFB surface object',type='structs']
+--
+The sname:VkDirectFBSurfaceCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDirectFBSurfaceCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:dfb is a pointer to the code:IDirectFB main interface of DirectFB.
+  * pname:surface is a pointer to a code:IDirectFBSurface surface interface.
+
+.Valid Usage
+****
+  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-dfb-04117]]
+    pname:dfb must: point to a valid DirectFB code:IDirectFB
+  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-surface-04118]]
+    pname:surface must: point to a valid DirectFB code:IDirectFBSurface
+****
+
+include::{generated}/validity/structs/VkDirectFBSurfaceCreateInfoEXT.adoc[]
+--
+
+With DirectFB, pname:minImageExtent, pname:maxImageExtent, and
+pname:currentExtent must: always equal the surface size.
+
+[open,refpage='VkDirectFBSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDirectFBSurfaceCreateFlagsEXT.adoc[]
+
+tname:VkDirectFBSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.adoc
new file mode 100644
index 0000000..773698a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.adoc
@@ -0,0 +1,31 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_directfb]]
+=== DirectFB Platform
+
+[open,refpage='vkGetPhysicalDeviceDirectFBPresentationSupportEXT',desc='Query physical device for presentation with DirectFB',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation with DirectFB library, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+  * pname:dfb is a pointer to the code:IDirectFB main interface of DirectFB.
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-queueFamilyIndex-04119]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/display_control.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/display_control.adoc
new file mode 100644
index 0000000..408dc51
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/display_control.adoc
@@ -0,0 +1,56 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+=== Display Control
+
+[open,refpage='vkDisplayPowerControlEXT',desc='Set the power state of a display',type='protos']
+--
+:refpage: vkDisplayPowerControlEXT
+
+To set the power state of a display, call:
+
+include::{generated}/api/protos/vkDisplayPowerControlEXT.adoc[]
+
+  * pname:device is a logical device associated with pname:display.
+  * pname:display is the display whose power state is modified.
+  * pname:pDisplayPowerInfo is a pointer to a slink:VkDisplayPowerInfoEXT
+    structure specifying the new power state of pname:display.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkDisplayPowerControlEXT.adoc[]
+--
+
+[open,refpage='VkDisplayPowerInfoEXT',desc='Describe the power state of a display',type='structs']
+--
+The sname:VkDisplayPowerInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPowerInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:powerState is a elink:VkDisplayPowerStateEXT value specifying the
+    new power state of the display.
+
+include::{generated}/validity/structs/VkDisplayPowerInfoEXT.adoc[]
+--
+
+[open,refpage='VkDisplayPowerStateEXT',desc='Possible power states for a display',type='enums']
+--
+Possible values of slink:VkDisplayPowerInfoEXT::pname:powerState, specifying
+the new power state of a display, are:
+
+include::{generated}/api/enums/VkDisplayPowerStateEXT.adoc[]
+
+  * ename:VK_DISPLAY_POWER_STATE_OFF_EXT specifies that the display is
+    powered down.
+  * ename:VK_DISPLAY_POWER_STATE_SUSPEND_EXT specifies that the display is
+    put into a low power mode, from which it may: be able to transition back
+    to ename:VK_DISPLAY_POWER_STATE_ON_EXT more quickly than if it were in
+    ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
+    This state may: be the same as ename:VK_DISPLAY_POWER_STATE_OFF_EXT.
+  * ename:VK_DISPLAY_POWER_STATE_ON_EXT specifies that the display is
+    powered on.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/fence_events.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/fence_events.adoc
new file mode 100644
index 0000000..eb1dd02
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/fence_events.adoc
@@ -0,0 +1,110 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+=== Alternate Methods to Signal Fences
+
+Besides submitting a fence to a queue as part of a
+<<devsandqueues-submission, queue submission>> command, a fence may: also be
+signaled when a particular event occurs on a device or display.
+
+[open,refpage='vkRegisterDeviceEventEXT',desc='Signal a fence when a device event occurs',type='protos']
+--
+:refpage: vkRegisterDeviceEventEXT
+
+To create a fence that will be signaled when an event occurs on a device,
+call:
+
+include::{generated}/api/protos/vkRegisterDeviceEventEXT.adoc[]
+
+  * pname:device is a logical device on which the event may: occur.
+  * pname:pDeviceEventInfo is a pointer to a slink:VkDeviceEventInfoEXT
+    structure describing the event of interest to the application.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pFence is a pointer to a handle in which the resulting fence
+    object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkRegisterDeviceEventEXT.adoc[]
+--
+
+[open,refpage='VkDeviceEventInfoEXT',desc='Describe a device event to create',type='structs']
+--
+The sname:VkDeviceEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceEventInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:device is a elink:VkDeviceEventTypeEXT value specifying when the
+    fence will be signaled.
+
+include::{generated}/validity/structs/VkDeviceEventInfoEXT.adoc[]
+--
+
+[open,refpage='VkDeviceEventTypeEXT',desc='Events that can occur on a device object',type='enums']
+--
+Possible values of slink:VkDeviceEventInfoEXT::pname:device, specifying when
+a fence will be signaled, are:
+
+include::{generated}/api/enums/VkDeviceEventTypeEXT.adoc[]
+
+  * ename:VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT specifies that the fence
+    is signaled when a display is plugged into or unplugged from the
+    specified device.
+    Applications can: use this notification to determine when they need to
+    re-enumerate the available displays on a device.
+--
+
+[open,refpage='vkRegisterDisplayEventEXT',desc='Signal a fence when a display event occurs',type='protos']
+--
+:refpage: vkRegisterDisplayEventEXT
+
+To create a fence that will be signaled when an event occurs on a
+slink:VkDisplayKHR object, call:
+
+include::{generated}/api/protos/vkRegisterDisplayEventEXT.adoc[]
+
+  * pname:device is a logical device associated with pname:display
+  * pname:display is the display on which the event may: occur.
+  * pname:pDisplayEventInfo is a pointer to a slink:VkDisplayEventInfoEXT
+    structure describing the event of interest to the application.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pFence is a pointer to a handle in which the resulting fence
+    object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkRegisterDisplayEventEXT.adoc[]
+--
+
+[open,refpage='VkDisplayEventInfoEXT',desc='Describe a display event to create',type='structs']
+--
+The sname:VkDisplayEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDisplayEventInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayEvent is a elink:VkDisplayEventTypeEXT specifying when the
+    fence will be signaled.
+
+include::{generated}/validity/structs/VkDisplayEventInfoEXT.adoc[]
+--
+
+[open,refpage='VkDisplayEventTypeEXT',desc='Events that can occur on a display object',type='enums']
+--
+Possible values of slink:VkDisplayEventInfoEXT::pname:displayEvent,
+specifying when a fence will be signaled, are:
+
+include::{generated}/api/enums/VkDisplayEventTypeEXT.adoc[]
+
+  * ename:VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT specifies that the fence
+    is signaled when the first pixel of the next display refresh cycle
+    leaves the display engine for the display.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/swapchain_counters.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/swapchain_counters.adoc
new file mode 100644
index 0000000..637e4e3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_control/swapchain_counters.adoc
@@ -0,0 +1,60 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkSwapchainCounterCreateInfoEXT',desc='Specify the surface counters desired',type='structs']
+--
+To enable surface counters when creating a swapchain, add a
+sname:VkSwapchainCounterCreateInfoEXT structure to the pname:pNext chain of
+slink:VkSwapchainCreateInfoKHR.
+sname:VkSwapchainCounterCreateInfoEXT is defined as:
+
+include::{generated}/api/structs/VkSwapchainCounterCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:surfaceCounters is a bitmask of elink:VkSurfaceCounterFlagBitsEXT
+    specifying surface counters to enable for the swapchain.
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244]]
+    The bits in pname:surfaceCounters must: be supported by
+    slink:VkSwapchainCreateInfoKHR::pname:surface, as reported by
+    flink:vkGetPhysicalDeviceSurfaceCapabilities2EXT
+****
+
+include::{generated}/validity/structs/VkSwapchainCounterCreateInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetSwapchainCounterEXT',desc='Query the current value of a surface counter',type='protos']
+--
+:refpage: vkGetSwapchainCounterEXT
+
+The requested counters become active when the first presentation command for
+the associated swapchain is processed by the presentation engine.
+To query the value of an active counter, use:
+
+include::{generated}/api/protos/vkGetSwapchainCounterEXT.adoc[]
+
+  * pname:device is the slink:VkDevice associated with pname:swapchain.
+  * pname:swapchain is the swapchain from which to query the counter value.
+  * pname:counter is a elink:VkSurfaceCounterFlagBitsEXT value specifying
+    the counter to query.
+  * pname:pCounterValue will return the current value of the counter.
+
+If a counter is not available because the swapchain is out of date, the
+implementation may: return ename:VK_ERROR_OUT_OF_DATE_KHR.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetSwapchainCounterEXT-swapchain-01245]]
+    One or more present commands on pname:swapchain must: have been
+    processed by the presentation engine
+****
+
+include::{generated}/validity/protos/vkGetSwapchainCounterEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_surface_counter/surface_capabilities.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_surface_counter/surface_capabilities.adoc
new file mode 100644
index 0000000..7202692
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_display_surface_counter/surface_capabilities.adoc
@@ -0,0 +1,82 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkGetPhysicalDeviceSurfaceCapabilities2EXT',desc='Query surface capabilities',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceCapabilities2EXT
+
+To query the basic capabilities of a surface, needed in order to create a
+swapchain, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:surface is the surface that will be associated with the swapchain.
+  * pname:pSurfaceCapabilities is a pointer to a
+    slink:VkSurfaceCapabilities2EXT structure in which the capabilities are
+    returned.
+
+fname:vkGetPhysicalDeviceSurfaceCapabilities2EXT behaves similarly to
+flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to return
+extended information by adding extending structures to the pname:pNext chain
+of its pname:pSurfaceCapabilities parameter.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.adoc[]
+--
+
+[open,refpage='VkSurfaceCapabilities2EXT',desc='Structure describing capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilities2EXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilities2EXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+include::{chapters}/VK_KHR_surface/wsi.adoc[tag=surface_capabilities_members]
+  * pname:supportedSurfaceCounters is a bitmask of
+    elink:VkSurfaceCounterFlagBitsEXT indicating the supported surface
+    counter types.
+
+.Valid Usage
+****
+  * [[VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246]]
+    pname:supportedSurfaceCounters must: not include
+    ename:VK_SURFACE_COUNTER_VBLANK_BIT_EXT unless the surface queried is a
+    <<wsi-display-surfaces,display surface>>
+****
+
+include::{generated}/validity/structs/VkSurfaceCapabilities2EXT.adoc[]
+--
+
+[open,refpage='VkSurfaceCounterFlagBitsEXT',desc='Surface-relative counter types',type='enums']
+--
+Bits which can: be set in
+slink:VkSurfaceCapabilities2EXT::pname:supportedSurfaceCounters, indicating
+supported surface counter types, are:
+
+include::{generated}/api/enums/VkSurfaceCounterFlagBitsEXT.adoc[]
+
+  * ename:VK_SURFACE_COUNTER_VBLANK_BIT_EXT specifies a counter incrementing
+    once every time a vertical blanking period occurs on the display
+    associated with the surface.
+--
+
+[open,refpage='VkSurfaceCounterFlagsEXT',desc='Bitmask of VkSurfaceCounterFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkSurfaceCounterFlagsEXT.adoc[]
+
+tname:VkSurfaceCounterFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkSurfaceCounterFlagBitsEXT.
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_hdr_metadata.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_hdr_metadata.adoc
new file mode 100644
index 0000000..98f0767
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_hdr_metadata.adoc
@@ -0,0 +1,84 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside VK_KHR_swapchain
+
+== Hdr Metadata
+
+This section describes how to improve color reproduction of content to
+better reproduce colors as seen on the reference monitor.
+Definitions below are from the associated SMPTE 2086, CTA 861.3 and CIE
+15:2004 specifications.
+
+[open,refpage='vkSetHdrMetadataEXT',desc='Set Hdr metadata',type='protos']
+--
+To provide Hdr metadata to an implementation, call:
+
+include::{generated}/api/protos/vkSetHdrMetadataEXT.adoc[]
+
+  * pname:device is the logical device where the swapchain(s) were created.
+  * pname:swapchainCount is the number of swapchains included in
+    pname:pSwapchains.
+  * pname:pSwapchains is a pointer to an array of pname:swapchainCount
+    slink:VkSwapchainKHR handles.
+  * pname:pMetadata is a pointer to an array of pname:swapchainCount
+    slink:VkHdrMetadataEXT structures.
+
+The metadata will be applied to the specified slink:VkSwapchainKHR objects
+at the next fname:vkQueuePresentKHR call using that slink:VkSwapchainKHR
+object.
+The metadata will persist until a subsequent fname:vkSetHdrMetadataEXT
+changes it.
+
+include::{generated}/validity/protos/vkSetHdrMetadataEXT.adoc[]
+--
+
+[open,refpage='VkHdrMetadataEXT',desc='Specify Hdr metadata',type='structs']
+--
+The sname:VkHdrMetadataEXT structure is defined as:
+
+include::{generated}/api/structs/VkHdrMetadataEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayPrimaryRed is a slink:VkXYColorEXT structure specifying the
+    reference monitor's red primary in chromaticity coordinates
+  * pname:displayPrimaryGreen is a slink:VkXYColorEXT structure specifying
+    the reference monitor's green primary in chromaticity coordinates
+  * pname:displayPrimaryBlue is a slink:VkXYColorEXT structure specifying
+    the reference monitor's blue primary in chromaticity coordinates
+  * pname:whitePoint is a slink:VkXYColorEXT structure specifying the
+    reference monitor's white-point in chromaticity coordinates
+  * pname:maxLuminance is the maximum luminance of the reference monitor in
+    nits
+  * pname:minLuminance is the minimum luminance of the reference monitor in
+    nits
+  * pname:maxContentLightLevel is content's maximum luminance in nits
+  * pname:maxFrameAverageLightLevel is the maximum frame average light level
+    in nits
+
+include::{generated}/validity/structs/VkHdrMetadataEXT.adoc[]
+
+[NOTE]
+.Note
+====
+The validity and use of this data is outside the scope of Vulkan.
+====
+--
+
+[open,refpage='VkXYColorEXT',desc='Specify X,Y chromaticity coordinates',type='structs']
+--
+The sname:VkXYColorEXT structure is defined as:
+
+include::{generated}/api/structs/VkXYColorEXT.adoc[]
+
+  * pname:x is the [eq]#x# chromaticity coordinate.
+  * pname:y is the [eq]#y# chromaticity coordinate.
+
+Chromaticity coordinates are as specified in CIE 15:2004 "`Calculation of
+chromaticity coordinates`" (Section 7.3) and are limited to between 0 and 1
+for real colors for the reference monitor.
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_headless_surface/headless.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_headless_surface/headless.adoc
new file mode 100644
index 0000000..2b0a06e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_headless_surface/headless.adoc
@@ -0,0 +1,72 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[headless]]
+=== Presenting to Headless Surfaces
+
+Vulkan rendering can be presented to a headless surface, where the
+presentation operation is a no-op producing no externally-visible result.
+
+[NOTE]
+.Note
+====
+Because there is no real presentation target, the headless presentation
+engine may be extended to impose an arbitrary or customisable set of
+restrictions and features.
+This makes it a useful portable test target for applications targeting a
+wide range of presentation engines where the actual target presentation
+engines might be scarce, unavailable or otherwise undesirable or
+inconvenient to use for general Vulkan application development.
+
+The usual surface query mechanisms must be used to determine the actual
+restrictions and features of the implementation.
+====
+
+[open,refpage='vkCreateHeadlessSurfaceEXT',desc='Create a headless slink:VkSurfaceKHR object',type='protos']
+--
+:refpage: vkCreateHeadlessSurfaceEXT
+
+To create a headless sname:VkSurfaceKHR object, call:
+
+include::{generated}/api/protos/vkCreateHeadlessSurfaceEXT.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a slink:VkHeadlessSurfaceCreateInfoEXT
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a sname:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateHeadlessSurfaceEXT.adoc[]
+--
+
+[open,refpage='VkHeadlessSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created headless surface object',type='structs']
+--
+The sname:VkHeadlessSurfaceCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkHeadlessSurfaceCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+
+include::{generated}/validity/structs/VkHeadlessSurfaceCreateInfoEXT.adoc[]
+--
+
+For headless surfaces, pname:currentExtent is the reserved value
+[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#.
+Whatever the application sets a swapchain's pname:imageExtent to will be the
+size of the surface, after the first image is presented.
+
+[open,refpage='VkHeadlessSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkHeadlessSurfaceCreateFlagsEXT.adoc[]
+
+tname:VkHeadlessSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_host_image_copy/copies.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_host_image_copy/copies.adoc
new file mode 100644
index 0000000..8dc1fa6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_host_image_copy/copies.adoc
@@ -0,0 +1,407 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+The following commands can be used to copy between host memory and images.
+
+[open,refpage='vkCopyMemoryToImageEXT',desc='Copy data from host memory into an image',type='protos']
+--
+:refpage: vkCopyMemoryToImageEXT
+
+To copy data from host memory to an image object, call:
+
+include::{generated}/api/protos/vkCopyMemoryToImageEXT.adoc[]
+
+  * pname:device is the device which owns
+    pname:pCopyMemoryToImageInfo->dstImage.
+  * pname:pCopyMemoryToImageInfo is a pointer to a
+    slink:VkCopyMemoryToImageInfoEXT structure describing the copy
+    parameters.
+
+This command is functionally similar to flink:vkCmdCopyBufferToImage2,
+except it is executed on the host and reads from host memory instead of a
+buffer.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyMemoryToImageEXT-hostImageCopy-09058]]
+    The <<features-hostImageCopy, pname:hostImageCopy>> feature must: be
+    enabled
+****
+
+include::{generated}/validity/protos/vkCopyMemoryToImageEXT.adoc[]
+--
+
+[open,refpage='VkCopyMemoryToImageInfoEXT',desc='Structure specifying parameters of host memory to image copy command',type='structs']
+--
+:refpage: VkCopyMemoryToImageInfoEXT
+:imageparam: dstImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+The sname:VkCopyMemoryToImageInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCopyMemoryToImageInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkHostImageCopyFlagBitsEXT values
+    describing additional copy parameters.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the copy.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkMemoryToImageCopyEXT
+    structures specifying the regions to copy.
+
+fname:vkCopyMemoryToImageEXT does not check whether the device memory
+associated with pname:dstImage is currently in use before performing the
+copy.
+The application must: guarantee that any previously submitted command that
+reads from or writes to the copy regions has completed before the host
+performs the copy.
+
+Copy regions for the image must: be aligned to a multiple of the texel block
+extent in each dimension, except at the edges of the image, where region
+extents must: match the edge of the image.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_memoryimage_to_imagememory_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+  * [[VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-09059]]
+    pname:dstImageLayout must: specify the current layout of the image
+    subresources of pname:dstImage specified in pname:pRegions
+  * [[VUID-VkCopyMemoryToImageInfoEXT-dstImageLayout-09060]]
+    pname:dstImageLayout must: be one of the image layouts returned in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopyDstLayouts
+  * [[VUID-VkCopyMemoryToImageInfoEXT-flags-09393]]
+    If pname:flags includes ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT, for each
+    region in pname:pRegions, pname:memoryRowLength and
+    pname:memoryImageHeight must: both be 0
+****
+
+include::{generated}/validity/structs/VkCopyMemoryToImageInfoEXT.adoc[]
+--
+
+[open,refpage='VkMemoryToImageCopyEXT',desc='Structure specifying a host memory to image copy operation',type='structs']
+--
+:refpage: VkMemoryToImageCopyEXT
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+Each element of slink:VkCopyMemoryToImageInfoEXT::pname:pRegions is a
+structure defined as:
+
+include::{generated}/api/structs/VkMemoryToImageCopyEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pHostPointer is the host memory address which is the source of the
+    copy.
+  * pname:memoryRowLength and pname:memoryImageHeight specify in texels a
+    subregion of a larger two- or three-dimensional image in host memory,
+    and control the addressing calculations.
+    If either of these values is zero, that aspect of the host memory is
+    considered to be tightly packed according to the pname:imageExtent.
+  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
+    specify the specific image subresources of the image used for the source
+    or destination image data.
+  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
+    in texels of the sub-region of the destination image data.
+  * pname:imageExtent is the size in texels of the image to copy in
+    pname:width, pname:height and pname:depth.
+
+This structure is functionally similar to slink:VkBufferImageCopy2, except
+it defines host memory as the source of copy instead of a buffer.
+In particular, the same data packing rules and restrictions as that
+structure apply here as well.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryToImageCopyEXT-pHostPointer-09061]]
+    pname:pHostPointer must: point to memory that is large enough to contain
+    all memory locations that are accessed according to
+    <<copies-buffers-images-addressing,Buffer and Image Addressing>>, for
+    each element of pname:pRegions
+  * [[VUID-VkMemoryToImageCopyEXT-pRegions-09062]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+include::{chapters}/commonvalidity/buffer_or_memory_image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkMemoryToImageCopyEXT.adoc[]
+--
+
+[open,refpage='vkCopyImageToMemoryEXT',desc='Copy image data into host memory',type='protos']
+--
+:refpage: vkCopyImageToMemoryEXT
+
+To copy data from an image object to host memory, call:
+
+include::{generated}/api/protos/vkCopyImageToMemoryEXT.adoc[]
+
+  * pname:device is the device which owns
+    pname:pCopyImageToMemoryInfo->srcImage.
+  * pname:pCopyImageToMemoryInfo is a pointer to a
+    slink:VkCopyImageToMemoryInfoEXT structure describing the copy
+    parameters.
+
+This command is functionally similar to flink:vkCmdCopyImageToBuffer2,
+except it is executed on the host and writes to host memory instead of a
+buffer.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyImageToMemoryEXT-hostImageCopy-09063]]
+    The <<features-hostImageCopy, pname:hostImageCopy>> feature must: be
+    enabled
+****
+
+include::{generated}/validity/protos/vkCopyImageToMemoryEXT.adoc[]
+--
+
+[open,refpage='VkCopyImageToMemoryInfoEXT',desc='Structure specifying parameters of an image to host memory copy command',type='structs']
+--
+:refpage: VkCopyImageToMemoryInfoEXT
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+The sname:VkCopyImageToMemoryInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageToMemoryInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkHostImageCopyFlagBitsEXT values
+    describing additional copy parameters.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the copy.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkImageToMemoryCopyEXT
+    structures specifying the regions to copy.
+
+fname:vkCopyImageToMemoryEXT does not check whether the device memory
+associated with pname:srcImage is currently in use before performing the
+copy.
+The application must: guarantee that any previously submitted command that
+writes to the copy regions has completed before the host performs the copy.
+
+Copy regions for the image must: be aligned to a multiple of the texel block
+extent in each dimension, except at the edges of the image, where region
+extents must: match the edge of the image.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_memoryimage_to_imagememory_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+  * [[VUID-VkCopyImageToMemoryInfoEXT-srcImageLayout-09064]]
+    pname:srcImageLayout must: specify the current layout of the image
+    subresources of pname:srcImage specified in pname:pRegions
+  * [[VUID-VkCopyImageToMemoryInfoEXT-srcImageLayout-09065]]
+    pname:srcImageLayout must: be one of the image layouts returned in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopySrcLayouts
+  * [[VUID-VkCopyImageToMemoryInfoEXT-flags-09394]]
+    If pname:flags includes ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT, for each
+    region in pname:pRegions, pname:memoryRowLength and
+    pname:memoryImageHeight must: both be 0
+****
+
+include::{generated}/validity/structs/VkCopyImageToMemoryInfoEXT.adoc[]
+--
+
+[open,refpage='VkImageToMemoryCopyEXT',desc='Structure specifying an image to host memory copy operation',type='structs']
+--
+:refpage: VkImageToMemoryCopyEXT
+:bufferrowlength: memoryRowLength
+:bufferimageheight: memoryImageHeight
+
+Each element of slink:VkCopyImageToMemoryInfoEXT::pname:pRegions is a
+structure defined as:
+
+include::{generated}/api/structs/VkImageToMemoryCopyEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pHostPointer is the host memory address which is the destination
+    of the copy.
+  * pname:memoryRowLength and pname:memoryImageHeight specify in texels a
+    subregion of a larger two- or three-dimensional image in host memory,
+    and control the addressing calculations.
+    If either of these values is zero, that aspect of the host memory is
+    considered to be tightly packed according to the pname:imageExtent.
+  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
+    specify the specific image subresources of the image used for the source
+    or destination image data.
+  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
+    in texels of the sub-region of the source image data.
+  * pname:imageExtent is the size in texels of the image to copy in
+    pname:width, pname:height and pname:depth.
+
+This structure is functionally similar to slink:VkBufferImageCopy2, except
+it defines host memory as the target of copy instead of a buffer.
+In particular, the same data packing rules and restrictions as that
+structure apply here as well.
+
+.Valid Usage
+****
+  * [[VUID-VkImageToMemoryCopyEXT-pHostPointer-09066]]
+    pname:pHostPointer must: point to memory that is large enough to contain
+    all memory locations that are accessed according to
+    <<copies-buffers-images-addressing,Buffer and Image Addressing>>, for
+    each element of pname:pRegions
+  * [[VUID-VkImageToMemoryCopyEXT-pRegions-09067]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+include::{chapters}/commonvalidity/buffer_or_memory_image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageToMemoryCopyEXT.adoc[]
+--
+
+[open,refpage='VkHostImageCopyFlagBitsEXT',desc='Bitmask specifying additional copy parameters',type='enums']
+--
+Bits which can: be set in slink:VkCopyMemoryToImageInfoEXT::pname:flags,
+slink:VkCopyImageToMemoryInfoEXT::pname:flags, and
+slink:VkCopyImageToImageInfoEXT::pname:flags, specifying additional copy
+parameters are:
+
+include::{generated}/api/enums/VkHostImageCopyFlagBitsEXT.adoc[]
+
+  * ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT specifies that no memory layout
+    swizzling is to be applied during data copy.
+    For copies between memory and images, this flag indicates that image
+    data in host memory is swizzled in exactly the same way as the image
+    data on the device.
+    Using this flag indicates that the implementations may: use a simple
+    memory copy to transfer the data between the host memory and the device
+    memory.
+    The format of the swizzled data in host memory is platform dependent and
+    is not defined in this specification.
+--
+
+[open,refpage='VkHostImageCopyFlagsEXT',desc='Bitmask of VkHostImageCopyFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkHostImageCopyFlagsEXT.adoc[]
+
+tname:VkHostImageCopyFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkHostImageCopyFlagBitsEXT.
+--
+[open,refpage='vkCopyImageToImageEXT',desc='Copy image data using the host',type='protos']
+--
+:refpage: vkCopyImageToImageEXT
+
+To copy data from an image object to another image object using the host,
+call:
+
+include::{generated}/api/protos/vkCopyImageToImageEXT.adoc[]
+
+  * pname:device is the device which owns
+    pname:pCopyImageToMemoryInfo->srcImage.
+  * pname:pCopyImageToImageInfo is a pointer to a
+    slink:VkCopyImageToImageInfoEXT structure describing the copy
+    parameters.
+
+This command is functionally similar to flink:vkCmdCopyImage2, except it is
+executed on the host.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyImageToImageEXT-hostImageCopy-09068]]
+    The <<features-hostImageCopy, pname:hostImageCopy>> feature must: be
+    enabled
+****
+
+include::{generated}/validity/protos/vkCopyImageToImageEXT.adoc[]
+--
+
+[open,refpage='VkCopyImageToImageInfoEXT',desc='Structure specifying parameters of an image to image host copy command',type='structs']
+--
+:refpage: VkCopyImageToImageInfoEXT
+
+The sname:VkCopyImageToImageInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageToImageInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkHostImageCopyFlagBitsEXT values
+    describing additional copy parameters.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the copy.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the copy.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkImageCopy2 structures
+    specifying the regions to copy.
+
+fname:vkCopyImageToImageEXT does not check whether the device memory
+associated with pname:srcImage or pname:dstImage is currently in use before
+performing the copy.
+The application must: guarantee that any previously submitted command that
+writes to the copy regions has completed before the host performs the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyImageToImageInfoEXT-srcImage-09069]]
+    pname:srcImage and pname:dstImage must: have been created with identical
+    image creation parameters
+
+:imageparam: srcImage
+:imagesubresource: srcSubresource
+:imageoffset: srcOffset
+:imageextent: extent
+include::{chapters}/commonvalidity/copy_memoryimage_to_imagememory_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+
+:imageparam: dstImage
+:imagesubresource: dstSubresource
+:imageoffset: dstOffset
+:imageextent: extent
+include::{chapters}/commonvalidity/copy_memoryimage_to_imagememory_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+  * [[VUID-VkCopyImageToImageInfoEXT-srcImageLayout-09070]]
+    pname:srcImageLayout must: specify the current layout of the image
+    subresources of pname:srcImage specified in pname:pRegions
+  * [[VUID-VkCopyImageToImageInfoEXT-dstImageLayout-09071]]
+    pname:dstImageLayout must: specify the current layout of the image
+    subresources of pname:dstImage specified in pname:pRegions
+  * [[VUID-VkCopyImageToImageInfoEXT-srcImageLayout-09072]]
+    pname:srcImageLayout must: be one of the image layouts returned in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopySrcLayouts
+  * [[VUID-VkCopyImageToImageInfoEXT-dstImageLayout-09073]]
+    pname:dstImageLayout must: be one of the image layouts returned in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopyDstLayouts
+****
+
+include::{generated}/validity/structs/VkCopyImageToImageInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_objects/device_memory.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_objects/device_memory.adoc
new file mode 100644
index 0000000..acda700
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_objects/device_memory.adoc
@@ -0,0 +1,548 @@
+// Copyright (c) 2021-2022 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[metal-objects]]
+=== Metal Objects
+
+A Vulkan implementation that is layered on top of Metal on Apple device
+platform, and implements the `apiext:VK_EXT_metal_objects` extension,
+supports the ability to import and export the underlying Metal objects
+associated with specific Vulkan objects.
+
+The underlying Metal objects associated with certain Vulkan objects can be
+exported from those Vulkan objects using the pname:pNext chain of the
+slink:VkExportMetalObjectsInfoEXT parameter of the
+flink:vkExportMetalObjectsEXT command.
+
+An slink:VkDeviceMemory object can be allocated on an existing
+code:MTLBuffer object, by including the code:MTLBuffer object in a
+slink:VkImportMetalBufferInfoEXT structure in the pname:pNext chain of the
+slink:VkMemoryAllocateInfo structure in the flink:vkAllocateMemory command.
+
+A new slink:VkImage object can be created on an existing code:IOSurface
+object, or one or more existing Metal code:MTLTexture objects, by including
+those Metal objects in either slink:VkImportMetalIOSurfaceInfoEXT or
+slink:VkImportMetalTextureInfoEXT structures in the pname:pNext chain of the
+slink:VkImageCreateInfo structure in the flink:vkCreateImage command.
+
+[open,refpage='VkExportMetalObjectCreateInfoEXT',desc='Structure that identifies the Metal objects that can be exported from Vulkan objects',type='structs']
+--
+To export Metal objects from Vulkan objects, the app must: first indicate
+the intention to do so during the creation of the Vulkan object, by
+including one or more slink:VkExportMetalObjectCreateInfoEXT structures in
+the pname:pNext chain of the slink:VkInstanceCreateInfo,
+slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo,
+slink:VkImageViewCreateInfo, slink:VkBufferViewCreateInfo,
+slink:VkSemaphoreCreateInfo, or slink:VkEventCreateInfo, in the
+corresponding Vulkan object creation command.
+
+The sname:VkExportMetalObjectCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalObjectCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:exportObjectType is a elink:VkExportMetalObjectTypeFlagBitsEXT
+    indicating the type of Metal object that the application may request to
+    be exported from the Vulkan object.
+
+include::{generated}/validity/structs/VkExportMetalObjectCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkExportMetalObjectTypeFlagBitsEXT',desc='Bitmask specifying Metal object types that can be exported from a Vulkan object',type='enums']
+--
+Bits which indicate the types of Metal objects that may be exported from a
+corresponding Vulkan object are:
+
+include::{generated}/api/enums/VkExportMetalObjectTypeFlagBitsEXT.adoc[]
+
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT indicates a Metal
+    code:MTLDevice may be exported.
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT indicates
+    a Metal code:MTLCommandQueue may be exported.
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT indicates a Metal
+    code:MTLBuffer may be exported.
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT indicates a
+    Metal code:MTLTexture may be exported.
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT indicates a
+    Metal code:IOSurface may be exported.
+  * ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT indicates a
+    Metal code:MTLSharedEvent may be exported.
+--
+
+[open,refpage='VkExportMetalObjectTypeFlagsEXT',desc='Bitmask of VkExportMetalObjectTypeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkExportMetalObjectTypeFlagsEXT.adoc[]
+
+tname:VkExportMetalObjectTypeFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkExportMetalObjectTypeFlagBitsEXT.
+--
+
+[open,refpage='vkExportMetalObjectsEXT',desc='Export Metal objects from the corresponding Vulkan objects',type='protos']
+--
+To export Metal objects that underlie Vulkan objects, call:
+
+include::{generated}/api/protos/vkExportMetalObjectsEXT.adoc[]
+
+  * pname:device is the device that created the Vulkan objects.
+  * pname:pMetalObjectsInfo is a pointer to a
+    slink:VkExportMetalObjectsInfoEXT structure whose pname:pNext chain
+    contains structures, each identifying a Vulkan object and providing a
+    pointer through which the Metal object will be returned.
+
+include::{generated}/validity/protos/vkExportMetalObjectsEXT.adoc[]
+--
+
+[open,refpage='VkExportMetalObjectsInfoEXT',desc='Structure whose pNext chain identifies Vulkan objects and corresponding Metal objects',type='structs']
+--
+The sname:VkExportMetalObjectsInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalObjectsInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+.Valid Usage
+****
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06791]]
+    If the pname:pNext chain includes a slink:VkExportMetalDeviceInfoEXT
+    structure, the slink:VkInstance must: have been created with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkInstanceCreateInfo structure in the
+    flink:vkCreateInstance command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06792]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalCommandQueueInfoEXT structure, the slink:VkInstance
+    must: have been created with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkInstanceCreateInfo structure in the
+    flink:vkCreateInstance command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06793]]
+    If the pname:pNext chain includes a slink:VkExportMetalBufferInfoEXT
+    structure, the slink:VkDeviceMemory in its pname:memory member must:
+    have been allocated with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkMemoryAllocateInfo structure in the
+    flink:vkAllocateMemory command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06794]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, exactly one of its pname:image, pname:imageView, or
+    pname:bufferView members must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06795]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and its pname:image member is not dlink:VK_NULL_HANDLE, the
+    slink:VkImage in its pname:image member must: have been created with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkImageCreateInfo structure in the
+    flink:vkCreateImage command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06796]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and its pname:imageView member is not dlink:VK_NULL_HANDLE,
+    the slink:VkImageView in its pname:imageView member must: have been
+    created with ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in
+    the pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkImageViewCreateInfo structure in the
+    flink:vkCreateImageView command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06797]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and its pname:bufferView member is not dlink:VK_NULL_HANDLE,
+    the slink:VkBufferView in its pname:bufferView member must: have been
+    created with ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in
+    the pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkBufferViewCreateInfo structure in the
+    flink:vkCreateBufferView command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06798]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and if either its pname:image or pname:imageView member is
+    not dlink:VK_NULL_HANDLE, then pname:plane must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06799]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and if the slink:VkImage in its pname:image member does not
+    have a multi-planar format, then its pname:plane member must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06800]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and if the slink:VkImage in its pname:image member has a
+    multi-planar format with only two planes, then its pname:plane member
+    must: not be ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06801]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and if the slink:VkImageView in its pname:imageView member
+    does not have a multi-planar format, then its pname:plane member must:
+    be ename:VK_IMAGE_ASPECT_PLANE_0_BIT
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06802]]
+    If the pname:pNext chain includes a slink:VkExportMetalTextureInfoEXT
+    structure, and if the slink:VkImageView in its pname:imageView member
+    has a multi-planar format with only two planes, then its pname:plane
+    member must: not be ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06803]]
+    If the pname:pNext chain includes a slink:VkExportMetalIOSurfaceInfoEXT
+    structure, the slink:VkImage in its pname:image member must: have been
+    created with ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT
+    in the pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkImageCreateInfo structure in the
+    flink:vkCreateImage command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06804]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalSharedEventInfoEXT structure, exactly one of its
+    pname:semaphore or pname:event members must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06805]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalSharedEventInfoEXT structure, and its pname:semaphore
+    member is not dlink:VK_NULL_HANDLE, the slink:VkSemaphore in its
+    pname:semaphore member must: have been created with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkSemaphoreCreateInfo structure in the
+    flink:vkCreateSemaphore command
+  * [[VUID-VkExportMetalObjectsInfoEXT-pNext-06806]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalSharedEventInfoEXT structure, and its pname:event
+    member is not dlink:VK_NULL_HANDLE, the slink:VkEvent in its pname:event
+    member must: have been created with
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT in the
+    pname:exportObjectType member of a
+    slink:VkExportMetalObjectCreateInfoEXT structure in the pname:pNext
+    chain of the slink:VkEventCreateInfo structure in the
+    flink:vkCreateEvent command
+****
+
+include::{generated}/validity/structs/VkExportMetalObjectsInfoEXT.adoc[]
+--
+
+[open,refpage='VkExportMetalDeviceInfoEXT',desc='Structure that identifies a VkDevice object and corresponding Metal MTLDevice object',type='structs']
+--
+To export the Metal code:MTLDevice object underlying the
+slink:VkPhysicalDevice associated with a slink:VkDevice object, include a
+sname:VkExportMetalDeviceInfoEXT structure in the pname:pNext chain of the
+pname:pMetalObjectsInfo parameter of a flink:vkExportMetalObjectsEXT call.
+
+The sname:VkExportMetalDeviceInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalDeviceInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mtlDevice is the Metal `id<MTLDevice>` object underlying the
+    slink:VkPhysicalDevice associated with the slink:VkDevice object
+    identified in the call.
+    The implementation will return the code:MTLDevice in this member, or it
+    will return `NULL` if no code:MTLDevice could be found underlying the
+    slink:VkPhysicalDevice object.
+
+include::{generated}/validity/structs/VkExportMetalDeviceInfoEXT.adoc[]
+--
+
+[open,refpage='MTLDevice_id',desc='Metal MTLDevice type reference',type='basetypes']
+--
+The type `id<MTLDevice>` is defined in Apple's Metal framework, but to
+remove an unnecessary compile time dependency, an incomplete type definition
+of basetype:MTLDevice_id is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/MTLDevice_id.adoc[]
+--
+
+[open,refpage='VkExportMetalCommandQueueInfoEXT',desc='Structure that identifies a VkQueue object and corresponding Metal MTLCommandQueue object',type='structs']
+--
+To export the Metal code:MTLCommandQueue object underlying a slink:VkQueue
+object, include a sname:VkExportMetalCommandQueueInfoEXT structure in the
+pname:pNext chain of the pname:pMetalObjectsInfo parameter of a
+flink:vkExportMetalObjectsEXT call.
+
+The sname:VkExportMetalCommandQueueInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalCommandQueueInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queue is a slink:VkQueue.
+  * pname:mtlCommandQueue is the Metal `id<MTLCommandQueue>` object
+    underlying the slink:VkQueue object in pname:queue.
+    The implementation will return the code:MTLCommandQueue in this member,
+    or it will return `NULL` if no code:MTLCommandQueue could be found
+    underlying the slink:VkQueue object.
+
+include::{generated}/validity/structs/VkExportMetalCommandQueueInfoEXT.adoc[]
+--
+
+[open,refpage='MTLCommandQueue_id',desc='Metal MTLCommandQueue type reference',type='basetypes']
+--
+The type `id<MTLCommandQueue>` is defined in Apple's Metal framework, but to
+remove an unnecessary compile time dependency, an incomplete type definition
+of basetype:MTLCommandQueue_id is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/MTLCommandQueue_id.adoc[]
+--
+
+[open,refpage='VkExportMetalBufferInfoEXT',desc='Structure that identifies a VkDeviceMemory object and corresponding Metal MTLBuffer object',type='structs']
+--
+To export the Metal code:MTLBuffer object underlying a slink:VkDeviceMemory
+object, include a sname:VkExportMetalBufferInfoEXT structure in the
+pname:pNext chain of the pname:pMetalObjectsInfo parameter of a
+flink:vkExportMetalObjectsEXT call.
+
+The sname:VkExportMetalBufferInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalBufferInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is a slink:VkDeviceMemory.
+  * pname:mtlBuffer is the Metal `id<MTLBuffer>` object underlying the
+    slink:VkDeviceMemory object in pname:memory.
+    The implementation will return the code:MTLBuffer in this member, or it
+    will return `NULL` if no code:MTLBuffer could be found underlying the
+    slink:VkDeviceMemory object.
+
+include::{generated}/validity/structs/VkExportMetalBufferInfoEXT.adoc[]
+--
+
+[open,refpage='VkImportMetalBufferInfoEXT',desc='Structure that identifies a Metal MTLBuffer object to use when creating a VkDeviceMemory object.',type='structs']
+--
+To import a Metal code:MTLBuffer object to underlie a slink:VkDeviceMemory
+object, include a sname:VkImportMetalBufferInfoEXT structure in the
+pname:pNext chain of the slink:VkMemoryAllocateInfo structure in a
+flink:vkAllocateMemory command.
+
+The sname:VkImportMetalBufferInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImportMetalBufferInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mtlBuffer is the Metal `id<MTLBuffer>` object that is to underlie
+    the slink:VkDeviceMemory.
+
+The app must: ensure that the configuration of the `id<MTLBuffer>` object is
+compatible with the configuration of the slink:VkDeviceMemory.
+Failure to do so results in undefined: behavior.
+
+include::{generated}/validity/structs/VkImportMetalBufferInfoEXT.adoc[]
+--
+
+[open,refpage='MTLBuffer_id',desc='Metal MTLBuffer type reference',type='basetypes']
+--
+The type `id<MTLBuffer>` is defined in Apple's Metal framework, but to
+remove an unnecessary compile time dependency, an incomplete type definition
+of basetype:MTLBuffer_id is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/MTLBuffer_id.adoc[]
+--
+
+[open,refpage='VkExportMetalTextureInfoEXT',desc='Structure that identifies a VkImage, VkImageView, or VkBufferView object and corresponding Metal MTLTexture object',type='structs']
+--
+To export a Metal code:MTLTexture object underlying a slink:VkImage,
+slink:VkImageView, or slink:VkBufferView object, include a
+sname:VkExportMetalTextureInfoEXT structure in the pname:pNext chain of the
+pname:pMetalObjectsInfo parameter of a flink:vkExportMetalObjectsEXT call.
+
+The sname:VkExportMetalTextureInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalTextureInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is dlink:VK_NULL_HANDLE or a slink:VkImage.
+  * pname:imageView is dlink:VK_NULL_HANDLE or a slink:VkImageView.
+  * pname:bufferView is dlink:VK_NULL_HANDLE or a slink:VkBufferView.
+  * pname:plane indicates the plane of a multi-planar slink:VkImage or
+    slink:VkImageView.
+  * pname:mtlTexture is the Metal `id<MTLTexture>` object underlying the
+    slink:VkImage, slink:VkImageView, or slink:VkBufferView object in
+    pname:image, pname:imageView, or pname:bufferView, respectively, at the
+    plane indicated in pname:aspectMask.
+    The implementation will return the code:MTLTexture in this member, or it
+    will return `NULL` if no code:MTLTexture could be found underlying the
+    slink:VkImage, slink:VkImageView, or slink:VkBufferView object, at the
+    plane indicated in pname:aspectMask.
+
+include::{generated}/validity/structs/VkExportMetalTextureInfoEXT.adoc[]
+--
+
+[open,refpage='VkImportMetalTextureInfoEXT',desc='Structure that identifies Metal MTLTexture objects to use when creating a VkImage.',type='structs']
+--
+To import one or more existing Metal code:MTLTexture objects to underlie a
+slink:VkImage object, include one or more sname:VkImportMetalTextureInfoEXT
+structures in the pname:pNext chain of the slink:VkImageCreateInfo structure
+in a flink:vkCreateImage command.
+
+The sname:VkImportMetalTextureInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImportMetalTextureInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:plane indicates the plane of the slink:VkImage that the
+    `id<MTLTexture>` object should be attached to.
+  * pname:mtlTexture is a the Metal `id<MTLTexture>` object that is to
+    underlie the slink:VkImage plane.
+
+The pname:pNext chain must: include one sname:VkImportMetalTextureInfoEXT
+structure for each plane in the slink:VkImage.
+The app must: ensure that the configuration of the Metal `id<MTLTexture>`
+objects are compatible with the configuration of the slink:VkImage.
+Failure to do so results in undefined: behavior.
+
+include::{generated}/validity/structs/VkImportMetalTextureInfoEXT.adoc[]
+--
+
+[open,refpage='MTLTexture_id',desc='Metal MTLTexture type reference',type='basetypes']
+--
+The type `id<MTLTexture>` is defined in Apple's Metal framework, but to
+remove an unnecessary compile time dependency, an incomplete type definition
+of basetype:MTLTexture_id is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/MTLTexture_id.adoc[]
+--
+
+[open,refpage='VkExportMetalIOSurfaceInfoEXT',desc='Structure that identifies a VkImage object and corresponding Metal IOSurfaceRef object',type='structs']
+--
+To export the Metal basetype:IOSurfaceRef object underlying a slink:VkImage
+object, include a sname:VkExportMetalIOSurfaceInfoEXT structure in the
+pname:pNext chain of the pname:pMetalObjectsInfo parameter of a
+flink:vkExportMetalObjectsEXT call.
+
+The sname:VkExportMetalIOSurfaceInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalIOSurfaceInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is a slink:VkImage.
+  * pname:ioSurface is the Metal basetype:IOSurfaceRef object underlying the
+    slink:VkImage object in pname:image.
+    The implementation will return the basetype:IOSurfaceRef in this member,
+    or it will return `NULL` if no basetype:IOSurfaceRef could be found
+    underlying the slink:VkImage object.
+
+include::{generated}/validity/structs/VkExportMetalIOSurfaceInfoEXT.adoc[]
+--
+
+[open,refpage='VkImportMetalIOSurfaceInfoEXT',desc='Structure that identifies a VkImage object and corresponding Metal IOSurfaceRef object to use.',type='structs']
+--
+To import, or create, a Metal basetype:IOSurfaceRef object to underlie a
+slink:VkImage object, include a sname:VkImportMetalIOSurfaceInfoEXT
+structure in the pname:pNext chain of the slink:VkImageCreateInfo structure
+in a flink:vkCreateImage command.
+
+The sname:VkImportMetalIOSurfaceInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImportMetalIOSurfaceInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:ioSurface is dlink:VK_NULL_HANDLE or the Metal
+    basetype:IOSurfaceRef object that is to underlie the slink:VkImage.
+
+If pname:ioSurface is not dlink:VK_NULL_HANDLE, it will be used to underlie
+the slink:VkImage.
+If pname:ioSurface is dlink:VK_NULL_HANDLE, the implementation will create a
+new code:IOSurface to underlie the slink:VkImage.
+
+If provided, the app must: ensure that the configuration of the
+basetype:IOSurfaceRef object is compatible with the configuration of the
+slink:VkImage.
+Failure to do so results in undefined: behavior.
+
+include::{generated}/validity/structs/VkImportMetalIOSurfaceInfoEXT.adoc[]
+--
+
+[open,refpage='IOSurfaceRef',desc='Metal IOSurfaceRef type reference',type='basetypes']
+--
+The type basetype:IOSurfaceRef is defined in Apple's CoreGraphics framework,
+but to remove an unnecessary compile time dependency, an incomplete type
+definition of basetype:IOSurfaceRef is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/IOSurfaceRef.adoc[]
+--
+
+[open,refpage='VkExportMetalSharedEventInfoEXT',desc='Structure that identifies a VkSemaphore or VkEvent object and corresponding Metal MTLSharedEvent object',type='structs']
+--
+To export the Metal code:MTLSharedEvent object underlying a
+slink:VkSemaphore or slink:VkEvent object, include a
+sname:VkExportMetalSharedEventInfoEXT structure in the pname:pNext chain of
+the pname:pMetalObjectsInfo parameter of a flink:vkExportMetalObjectsEXT
+call.
+
+The sname:VkExportMetalSharedEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkExportMetalSharedEventInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is dlink:VK_NULL_HANDLE or a slink:VkSemaphore.
+  * pname:event is dlink:VK_NULL_HANDLE or a slink:VkEvent.
+  * pname:mtlSharedEvent is the Metal `id<MTLSharedEvent>` object underlying
+    the slink:VkSemaphore or slink:VkEvent object in pname:semaphore or
+    pname:event, respectively.
+    The implementation will return the code:MTLSharedEvent in this member,
+    or it will return `NULL` if no code:MTLSharedEvent could be found
+    underlying the slink:VkSemaphore or slink:VkEvent object.
+
+include::{generated}/validity/structs/VkExportMetalSharedEventInfoEXT.adoc[]
+--
+
+[open,refpage='VkImportMetalSharedEventInfoEXT',desc='Structure that identifies a VkSemaphore or VkEvent object and corresponding Metal Shared Event object to use.',type='structs']
+--
+To import a Metal `id<MTLSharedEvent>` object to underlie a
+slink:VkSemaphore or slink:VkEvent object, include a
+sname:VkImportMetalSharedEventInfoEXT structure in the pname:pNext chain of
+the slink:VkSemaphoreCreateInfo or slink:VkEventCreateInfo structure in a
+flink:vkCreateSemaphore or flink:vkCreateEvent command, respectively.
+
+The sname:VkImportMetalSharedEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImportMetalSharedEventInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mtlSharedEvent is the Metal `id<MTLSharedEvent>` object that is to
+    underlie the slink:VkSemaphore or slink:VkEvent.
+
+ifdef::VK_KHR_timeline_semaphore[]
+If the pname:pNext chain of the slink:VkSemaphoreCreateInfo structure
+includes both sname:VkImportMetalSharedEventInfoEXT and
+slink:VkSemaphoreTypeCreateInfo, the code:signaledValue property of the
+imported `id<MTLSharedEvent>` object will be set to pname:initialValue of
+slink:VkSemaphoreTypeCreateInfo.
+endif::VK_KHR_timeline_semaphore[]
+
+include::{generated}/validity/structs/VkImportMetalSharedEventInfoEXT.adoc[]
+--
+
+[open,refpage='MTLSharedEvent_id',desc='Metal MTLSharedEvent type reference',type='basetypes']
+--
+The type `id<MTLSharedEvent>` is defined in Apple's Metal framework, but to
+remove an unnecessary compile time dependency, an incomplete type definition
+of basetype:MTLSharedEvent_id is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/MTLSharedEvent_id.adoc[]
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.adoc
new file mode 100644
index 0000000..199d937
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.adoc
@@ -0,0 +1,62 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_metal]]
+=== Metal Platform
+
+[open,refpage='vkCreateMetalSurfaceEXT',desc='Create a VkSurfaceKHR object for CAMetalLayer',type='protos']
+--
+:refpage: vkCreateMetalSurfaceEXT
+
+To create a sname:VkSurfaceKHR object for a basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateMetalSurfaceEXT.adoc[]
+
+  * pname:instance is the instance with which to associate the surface.
+  * pname:pCreateInfo is a pointer to a slink:VkMetalSurfaceCreateInfoEXT
+    structure specifying parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a sname:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateMetalSurfaceEXT.adoc[]
+--
+
+[open,refpage='VkMetalSurfaceCreateInfoEXT',desc='Structure specifying parameters of a newly created Metal surface object',type='structs']
+--
+The slink:VkMetalSurfaceCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMetalSurfaceCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pLayer is a reference to a basetype:CAMetalLayer object
+    representing a renderable surface.
+
+include::{generated}/validity/structs/VkMetalSurfaceCreateInfoEXT.adoc[]
+--
+
+[open,refpage='CAMetalLayer',desc='CoreAnimation native layer type for Metal',type='basetypes']
+--
+To remove an unnecessary compile time dependency, an incomplete type
+definition of basetype:CAMetalLayer is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/CAMetalLayer.adoc[]
+
+The actual basetype:CAMetalLayer type is defined in the QuartzCore
+framework.
+--
+
+[open,refpage='VkMetalSurfaceCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMetalSurfaceCreateFlagsEXT.adoc[]
+
+tname:VkMetalSurfaceCreateFlagsEXT is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.adoc
new file mode 100644
index 0000000..1a28da5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.adoc
@@ -0,0 +1,10 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_metal]]
+=== Metal Platform
+
+On Apple platforms with Metal support, all physical devices and queue
+families must: be capable of presentation with any layer.
+As a result there is no Apple-specific query for these capabilities.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_opacity_micromap/micromaps.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_opacity_micromap/micromaps.adoc
new file mode 100644
index 0000000..9b629e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_opacity_micromap/micromaps.adoc
@@ -0,0 +1,1249 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[micromap]]
+= Micromap
+
+
+[[micromap-def]]
+== Micromaps
+
+_Acceleration structures_ store and organize geometry for ray tracing, but
+in some cases it is beneficial to include some information within the
+geometry, particularly for triangles.
+A _micromap_ organizes this data around a map of values corresponding to
+subdivided microtriangles which can be added to a triangle geometry when
+building a _bottom level acceleration structure_.
+
+An _opacity micromap_ is a type of micromap which stores information to
+control intersection opacity as described in <<ray-opacity-micromap,Ray
+Opacity Micromap>>.
+
+ifdef::VK_NV_displacement_micromap[]
+A _displacement micromap_ is a type of micromap which stores information to
+displace sub-triangle vertices as described in <<displacement-micromap,
+Displacement Micromap>>.
+endif::VK_NV_displacement_micromap[]
+
+A micromap is considered to be constructed if a <<micromap-building,micromap
+build command>> or <<micromap-copying,copy command>> has been executed with
+the given acceleration structure as the destination.
+
+
+[[micromap-building]]
+=== Building Micromaps
+
+[open,refpage='vkCmdBuildMicromapsEXT',desc='Build a micromap',type='protos']
+--
+:refpage: vkCmdBuildMicromapsEXT
+
+To build micromaps call:
+
+include::{generated}/api/protos/vkCmdBuildMicromapsEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:infoCount is the number of micromaps to build.
+    It specifies the number of the pname:pInfos structures that must: be
+    provided.
+  * pname:pInfos is a pointer to an array of pname:infoCount
+    slink:VkMicromapBuildInfoEXT structures defining the data used to build
+    each micromap.
+
+The fname:vkCmdBuildMicromapsEXT command provides the ability to initiate
+multiple micromaps builds, however there is no ordering or synchronization
+implied between any of the individual micromap builds.
+
+[NOTE]
+.Note
+====
+This means that there cannot: be any memory aliasing between any micromap
+memories or scratch memories being used by any of the builds.
+====
+
+[[micromap-scratch]]
+Accesses to the micromap scratch buffers as identified by the
+slink:VkMicromapBuildInfoEXT::pname:scratchData buffer device addresses
+must: be <<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+(ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT |
+ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT).
+Accesses to slink:VkMicromapBuildInfoEXT::pname:dstMicromap must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT.
+
+Accesses to other input buffers as identified by any used values of
+slink:VkMicromapBuildInfoEXT::pname:data or
+slink:VkMicromapBuildInfoEXT::pname:triangleArray must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_SHADER_READ_BIT.
+
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/build_micromap_common.adoc[]
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07508]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstMicromap member must: be bound to device memory
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07509]]
+    If pname:pInfos[i].pname:mode is ename:VK_BUILD_MICROMAP_MODE_BUILD_EXT,
+    all addresses between pname:pInfos[i].pname:scratchData.deviceAddress
+    and pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must:
+    be in the buffer device address range of the same buffer, where N is
+    given by the pname:buildScratchSize member of the
+    slink:VkMicromapBuildSizesInfoEXT structure returned from a call to
+    flink:vkGetMicromapBuildSizesEXT with an identical
+    slink:VkMicromapBuildInfoEXT structure and primitive count
+  * [[VUID-vkCmdBuildMicromapsEXT-data-07510]]
+    The buffers from which the buffer device addresses for all of the
+    pname:data and pname:triangleArray members of all pname:pInfos[i] are
+    queried must: have been created with the
+    ename:VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT usage flag
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07511]]
+    For each element of pname:pInfos[i] the buffer from which the buffer
+    device address pname:pInfos[i].pname:scratchData.deviceAddress is
+    queried must: have been created with
+    ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07512]]
+    For each element of pname:pInfos, its pname:scratchData.deviceAddress,
+    pname:data.deviceAddress, and pname:triangleArray.deviceAddress members
+    must: be valid device addresses obtained from
+    flink:vkGetBufferDeviceAddress
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07513]]
+    For each element of pname:pInfos, if pname:scratchData.deviceAddress,
+    pname:data.deviceAddress, or pname:triangleArray.deviceAddress is the
+    address of a non-sparse buffer then it must: be bound completely and
+    contiguously to a single slink:VkDeviceMemory object
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07514]]
+    For each element of pname:pInfos, its pname:scratchData.deviceAddress
+    member must: be a multiple of
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:minAccelerationStructureScratchOffsetAlignment
+  * [[VUID-vkCmdBuildMicromapsEXT-pInfos-07515]]
+    For each element of pname:pInfos, its pname:triangleArray.deviceAddress
+    and pname:data.deviceAddress members must: be a multiple of `256`
+****
+
+include::{generated}/validity/protos/vkCmdBuildMicromapsEXT.adoc[]
+--
+
+[open,refpage='VkOpacityMicromapFormatEXT',desc='Format enum for opacity micromaps',type='enums']
+--
+:refpage: VkOpacityMicromapFormatEXT
+
+Formats which can: be set in slink:VkMicromapUsageEXT::pname:format and
+slink:VkMicromapTriangleEXT::pname:format for micromap builds, are:
+
+include::{generated}/api/enums/VkOpacityMicromapFormatEXT.adoc[]
+
+  * ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT indicates that the given
+    micromap format has one bit per subtriangle encoding either fully opaque
+    or fully transparent.
+  * ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT indicates that the given
+    micromap format has two bits per subtriangle encoding four modes which
+    can be interpreted as described in <<ray-opacity-micromap,ray
+    traversal>>.
+
+[NOTE]
+.Note
+====
+For compactness, these values are stored as 16-bit in some structures.
+====
+--
+
+ifdef::VK_NV_displacement_micromap[]
+[open,refpage='VkDisplacementMicromapFormatNV',desc='Format enum for displacement micromaps',type='enums']
+--
+:refpage: VkDisplacementMicromapFormatNV
+
+Formats which can: be set in slink:VkMicromapUsageEXT::pname:format and
+slink:VkMicromapTriangleEXT::pname:format for micromap builds, are:
+
+include::{generated}/api/enums/VkDisplacementMicromapFormatNV.adoc[]
+
+  * ename:VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV indicates
+    that the given micromap format encodes 64 micro-triangles worth of
+    displacements in 64 bytes as described in
+    <<displacement-micromap-encoding, Displacement Micromap Encoding>>.
+  * ename:VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV
+    indicates that the given micromap format encodes 256 micro-triangles
+    worth of displacements in 128 bytes as described in
+    <<displacement-micromap-encoding, Displacement Micromap Encoding>>.
+  * ename:VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV
+    indicates that the given micromap format encodes 1024 micro-triangles
+    worth of displacements in 128 bytes as described in
+    <<displacement-micromap-encoding, Displacement Micromap Encoding>>.
+
+[NOTE]
+.Note
+====
+For compactness, these values are stored as 16-bit in some structures.
+====
+--
+endif::VK_NV_displacement_micromap[]
+
+[open,refpage='VkMicromapBuildInfoEXT',desc='Structure specifying the  data used to build a micromap',type='structs']
+--
+:refpage: VkMicromapBuildInfoEXT
+
+The sname:VkMicromapBuildInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMicromapBuildInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is a elink:VkMicromapTypeEXT value specifying the type of
+    micromap being built.
+  * pname:flags is a bitmask of elink:VkBuildMicromapFlagBitsEXT specifying
+    additional parameters of the micromap.
+  * pname:mode is a elink:VkBuildMicromapModeEXT value specifying the type
+    of operation to perform.
+  * pname:dstMicromap is a pointer to the target micromap for the build.
+  * pname:usageCountsCount specifies the number of usage counts structures
+    that will be used to determine the size of this micromap.
+  * pname:pUsageCounts is a pointer to an array of slink:VkMicromapUsageEXT
+    structures.
+  * pname:ppUsageCounts is a pointer to an array of pointers to
+    slink:VkMicromapUsageEXT structures.
+  * pname:data is the device or host address to memory which contains the
+    data for the micromap.
+  * pname:scratchData is the device or host address to memory that will be
+    used as scratch memory for the build.
+  * pname:triangleArray is the device or host address to memory containing
+    the slink:VkMicromapTriangleEXT data
+  * pname:triangleArrayStride is the stride in bytes between each element of
+    pname:triangleArray
+
+Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+pointer, the other must: be `NULL`.
+The elements of the non-`NULL` array describe the total counts used to build
+each micromap.
+Each element contains a pname:count which is the number of micromap
+triangles of that pname:format and pname:subdivisionLevel contained in the
+micromap.
+Multiple elements with the same pname:format and pname:subdivisionLevel are
+allowed and the total count for that pname:format and pname:subdivisionLevel
+is the sum of the pname:count for each element.
+
+
+
+Each micromap triangle refers to one element in pname:triangleArray which
+contains the pname:format and pname:subdivisionLevel for that particular
+triangle as well as a pname:dataOffset in bytes which is the location
+relative to pname:data where that triangle's micromap data begins.
+The data at pname:triangleArray is laid out as a 4 byte unsigned integer for
+the pname:dataOffset followed by a 2 byte unsigned integer for the
+subdivision level then a 2 byte unsigned integer for the format.
+In practice, compilers compile slink:VkMicromapTriangleEXT to match this
+pattern.
+
+For opacity micromaps, the data at pname:data is packed as either one bit
+per element for ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT or two bits per
+element for ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT and is packed from
+LSB to MSB in each byte.
+The data at each index in those bytes is interpreted as discussed in
+<<ray-opacity-micromap, Ray Opacity Micromap>>.
+
+ifdef::VK_NV_displacement_micromap[]
+For displacement micromaps, the data at pname:data is interpreted as
+discussed in <<displacement-micromap-encoding, Displacement Micromap
+Encoding>>.
+endif::VK_NV_displacement_micromap[]
+
+.Valid Usage
+****
+  * [[VUID-VkMicromapBuildInfoEXT-pUsageCounts-07516]]
+    Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+    pointer, the other must: be `NULL`
+  * [[VUID-VkMicromapBuildInfoEXT-type-07517]]
+    If pname:type is ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT the
+    pname:format member of slink:VkMicromapUsageEXT must: be a valid value
+    from ename:VkOpacityMicromapFormatEXT
+  * [[VUID-VkMicromapBuildInfoEXT-type-07518]]
+    If pname:type is ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT the
+    pname:format member of slink:VkMicromapTriangleEXT must: be a valid
+    value from ename:VkOpacityMicromapFormatEXT
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkMicromapBuildInfoEXT-type-08704]]
+    If pname:type is ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV the
+    pname:format member of slink:VkMicromapUsageEXT must: be a valid value
+    from ename:VkDisplacementMicromapFormatNV
+  * [[VUID-VkMicromapBuildInfoEXT-type-08705]]
+    If pname:type is ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV the
+    pname:format member of slink:VkMicromapTriangleEXT must: be a valid
+    value from ename:VkDisplacementMicromapFormatNV
+endif::VK_NV_displacement_micromap[]
+****
+include::{generated}/validity/structs/VkMicromapBuildInfoEXT.adoc[]
+--
+
+[open,refpage='VkBuildMicromapModeEXT',desc='Enum specifying the type of build operation to perform',type='enums']
+--
+:refpage: VkBuildMicromapModeEXT
+
+The ename:VkBuildMicromapModeEXT enumeration is defined as:
+
+include::{generated}/api/enums/VkBuildMicromapModeEXT.adoc[]
+
+  * ename:VK_BUILD_MICROMAP_MODE_BUILD_EXT specifies that the destination
+    micromap will be built using the specified data.
+--
+
+[open,refpage='VkMicromapUsageEXT',desc='Structure specifying the usage information used to build a micromap',type='structs']
+--
+:refpage: VkMicromapUsageEXT
+
+The sname:VkMicromapUsageEXT structure is defined as:
+
+include::{generated}/api/structs/VkMicromapUsageEXT.adoc[]
+
+  * pname:count is the number of triangles in the usage format defined by
+    the pname:subdivisionLevel and pname:format below in the micromap
+  * pname:subdivisionLevel is the subdivision level of this usage format
+  * pname:format is the format of this usage format
+
+.Valid Usage
+****
+  * [[VUID-VkMicromapUsageEXT-format-07519]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT then pname:format must: be
+    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT or
+    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT
+  * [[VUID-VkMicromapUsageEXT-format-07520]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT then pname:subdivisionLevel
+    must: be less than or equal to
+    slink:VkPhysicalDeviceOpacityMicromapPropertiesEXT::pname:maxOpacity2StateSubdivisionLevel
+  * [[VUID-VkMicromapUsageEXT-format-07521]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT then pname:subdivisionLevel
+    must: be less than or equal to
+    slink:VkPhysicalDeviceOpacityMicromapPropertiesEXT::pname:maxOpacity4StateSubdivisionLevel
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkMicromapUsageEXT-format-08706]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then pname:format must:
+    be ename:VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV,
+    ename:VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV or
+    ename:VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV
+  * [[VUID-VkMicromapUsageEXT-subdivisionLevel-08707]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then
+    pname:subdivisionLevel must: be less than or equal to
+    slink:VkPhysicalDeviceDisplacementMicromapPropertiesNV::pname:maxDisplacementMicromapSubdivisionLevel
+endif::VK_NV_displacement_micromap[]
+****
+
+The pname:format is interpreted based on the pname:type of the micromap
+using it.
+
+include::{generated}/validity/structs/VkMicromapUsageEXT.adoc[]
+--
+
+[open,refpage='VkMicromapTriangleEXT',desc='Structure specifying the micromap format and data for a triangle',type='structs']
+--
+:refpage: VkMicromapTriangleEXT
+
+The sname:VkMicromapTriangleEXT structure is defined as:
+
+include::{generated}/api/structs/VkMicromapTriangleEXT.adoc[]
+
+  * pname:dataOffset is the offset in bytes of the start of the data for
+    this triangle.
+    This is a byte aligned value.
+  * pname:subdivisionLevel is the subdivision level of this triangle
+  * pname:format is the format of this triangle
+
+.Valid Usage
+****
+  * [[VUID-VkMicromapTriangleEXT-format-07522]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT then pname:format must: be
+    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT or
+    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT
+  * [[VUID-VkMicromapTriangleEXT-format-07523]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT then pname:subdivisionLevel
+    must: be less than or equal to
+    slink:VkPhysicalDeviceOpacityMicromapPropertiesEXT::pname:maxOpacity2StateSubdivisionLevel
+  * [[VUID-VkMicromapTriangleEXT-format-07524]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT then pname:subdivisionLevel
+    must: be less than or equal to
+    slink:VkPhysicalDeviceOpacityMicromapPropertiesEXT::pname:maxOpacity4StateSubdivisionLevel
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkMicromapTriangleEXT-format-08708]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then pname:format must:
+    be ename:VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV,
+    ename:VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV or
+    ename:VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV
+  * [[VUID-VkMicromapTriangleEXT-subdivisionLevel-08709]]
+    If the elink:VkMicromapTypeEXT of the micromap is
+    ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then
+    pname:subdivisionLevel must: be less than or equal to
+    slink:VkPhysicalDeviceDisplacementMicromapPropertiesNV::pname:maxDisplacementMicromapSubdivisionLevel
+endif::VK_NV_displacement_micromap[]
+****
+
+The pname:format is interpreted based on the pname:type of the micromap
+using it.
+
+include::{generated}/validity/structs/VkMicromapTriangleEXT.adoc[]
+--
+
+
+[[micromap-copying]]
+=== Copying Micromaps
+
+An additional command exists for copying micromaps without updating their
+contents.
+Before copying, an application must: query the size of the resulting
+micromap.
+
+[open,refpage='vkCmdWriteMicromapsPropertiesEXT',desc='Write micromap result parameters to query results.',type='protos']
+--
+:refpage: vkCmdWriteMicromapsPropertiesEXT
+
+To query micromap size parameters call:
+
+include::{generated}/api/protos/vkCmdWriteMicromapsPropertiesEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:micromapCount is the count of micromaps for which to query the
+    property.
+  * pname:pMicromaps is a pointer to an array of existing previously built
+    micromaps.
+  * pname:queryType is a elink:VkQueryType value specifying the type of
+    queries managed by the pool.
+  * pname:queryPool is the query pool that will manage the results of the
+    query.
+  * pname:firstQuery is the first query index within the query pool that
+    will contain the pname:micromapCount number of results.
+
+Accesses to any of the micromaps listed in pname:pMicromaps must: be
+<<synchronization-dependencies, synchronized>> with the
+ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT.
+
+  * If pname:queryType is
+    ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, then the value
+    written out is the number of bytes required by a serialized micromap.
+  * If pname:queryType is ename:VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT,
+    then the value written out is the number of bytes required by a
+    compacted micromap.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdWriteMicromapsPropertiesEXT-queryPool-07525]]
+    pname:queryPool must: have been created with a pname:queryType matching
+    pname:queryType
+  * [[VUID-vkCmdWriteMicromapsPropertiesEXT-queryPool-07526]]
+    The queries identified by pname:queryPool and pname:firstQuery must: be
+    _unavailable_
+  * [[VUID-vkCmdWriteMicromapsPropertiesEXT-buffer-07527]]
+    The pname:buffer used to create each micromap in pname:pMicrmaps must:
+    be bound to device memory
+  * [[VUID-vkCmdWriteMicromapsPropertiesEXT-query-07528]]
+    The sum of pname:query plus pname:micromapCount must: be less than or
+    equal to the number of queries in pname:queryPool
+include::{chapters}/commonvalidity/write_micromap_properties_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdWriteMicromapsPropertiesEXT.adoc[]
+--
+
+[open,refpage='vkCmdCopyMicromapEXT',desc='Copy a micromap',type='protos']
+--
+:refpage: vkCmdCopyMicromapEXT
+
+To copy a micromap call:
+
+include::{generated}/api/protos/vkCmdCopyMicromapEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is a pointer to a slink:VkCopyMicromapInfoEXT structure
+    defining the copy operation.
+
+This command copies the pname:pInfo->src micromap to the pname:pInfo->dst
+micromap in the manner specified by pname:pInfo->mode.
+
+Accesses to pname:pInfo->src and pname:pInfo->dst must: be
+<<synchronization-dependencies, synchronized>> with the
+ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT or
+ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT as appropriate.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMicromapEXT-buffer-07529]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    device memory
+  * [[VUID-vkCmdCopyMicromapEXT-buffer-07530]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyMicromapEXT.adoc[]
+--
+
+[open,refpage='VkCopyMicromapInfoEXT',desc='Parameters for copying a micromap',type='structs']
+--
+:refpage: VkCopyMicromapInfoEXT
+
+The sname:VkCopyMicromapInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCopyMicromapInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the source micromap for the copy.
+  * pname:dst is the target micromap for the copy.
+  * pname:mode is a elink:VkCopyMicromapModeEXT value specifying additional
+    operations to perform during the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMicromapInfoEXT-mode-07531]]
+    pname:mode must: be ename:VK_COPY_MICROMAP_MODE_COMPACT_EXT or
+    ename:VK_COPY_MICROMAP_MODE_CLONE_EXT
+  * [[VUID-VkCopyMicromapInfoEXT-src-07532]]
+    The source acceleration structure pname:src must: have been constructed
+    prior to the execution of this command
+  * [[VUID-VkCopyMicromapInfoEXT-mode-07533]]
+    If pname:mode is ename:VK_COPY_MICROMAP_MODE_COMPACT_EXT, pname:src
+    must: have been constructed with
+    ename:VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT in the build
+  * [[VUID-VkCopyMicromapInfoEXT-buffer-07534]]
+    The pname:buffer used to create pname:src must: be bound to device
+    memory
+  * [[VUID-VkCopyMicromapInfoEXT-buffer-07535]]
+    The pname:buffer used to create pname:dst must: be bound to device
+    memory
+****
+
+include::{generated}/validity/structs/VkCopyMicromapInfoEXT.adoc[]
+--
+
+[open,refpage='VkCopyMicromapModeEXT',desc='Micromap copy mode',type='enums']
+--
+:refpage: VkCopyMicromapModeEXT
+
+Possible values of pname:mode specifying additional operations to perform
+during the copy, are:
+
+include::{generated}/api/enums/VkCopyMicromapModeEXT.adoc[]
+
+  * ename:VK_COPY_MICROMAP_MODE_CLONE_EXT creates a direct copy of the
+    micromap specified in pname:src into the one specified by pname:dst.
+    The pname:dst micromap must: have been created with the same parameters
+    as pname:src.
+  * ename:VK_COPY_MICROMAP_MODE_SERIALIZE_EXT serializes the micromap to a
+    semi-opaque format which can be reloaded on a compatible implementation.
+  * ename:VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT deserializes the semi-opaque
+    serialization format in the buffer to the micromap.
+  * ename:VK_COPY_MICROMAP_MODE_COMPACT_EXT creates a more compact version
+    of a micromap pname:src into pname:dst.
+    The micromap pname:dst must: have been created with a size at least as
+    large as that returned by flink:vkCmdWriteMicromapsPropertiesEXT after
+    the build of the micromap specified by pname:src.
+--
+
+[open,refpage='vkCmdCopyMicromapToMemoryEXT',desc='Copy a micromap to device memory',type='protos']
+--
+:refpage: vkCmdCopyMicromapToMemoryEXT
+
+To copy a micromap to device memory call:
+
+include::{generated}/api/protos/vkCmdCopyMicromapToMemoryEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is an a pointer to a slink:VkCopyMicromapToMemoryInfoEXT
+    structure defining the copy operation.
+
+Accesses to pname:pInfo->src must: be <<synchronization-dependencies,
+synchronized>> with the ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT.
+Accesses to the buffer indicated by pname:pInfo->dst.deviceAddress must: be
+synchronized with the ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+pipeline stage and an access type of ename:VK_ACCESS_TRANSFER_WRITE_BIT.
+
+This command produces the same results as flink:vkCopyMicromapToMemoryEXT,
+but writes its result to a device address, and is executed on the device
+rather than the host.
+The output may: not necessarily be bit-for-bit identical, but it can be
+equally used by either flink:vkCmdCopyMemoryToMicromapEXT or
+flink:vkCopyMemoryToMicromapEXT.
+
+[[serialized-micromap-header]]
+The defined header structure for the serialized data consists of:
+
+  * ename:VK_UUID_SIZE bytes of data matching
+    sname:VkPhysicalDeviceIDProperties::pname:driverUUID
+  * ename:VK_UUID_SIZE bytes of data identifying the compatibility for
+    comparison using flink:vkGetDeviceMicromapCompatibilityEXT
+The serialized data is written to the buffer (or read from the buffer)
+according to the host endianness.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07536]]
+    pname:pInfo->dst.deviceAddress must: be a valid device address for a
+    buffer bound to device memory
+  * [[VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07537]]
+    pname:pInfo->dst.deviceAddress must: be aligned to `256` bytes
+  * [[VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07538]]
+    If the buffer pointed to by pname:pInfo->dst.deviceAddress is non-sparse
+    then it must: be bound completely and contiguously to a single
+    slink:VkDeviceMemory object
+  * [[VUID-vkCmdCopyMicromapToMemoryEXT-buffer-07539]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyMicromapToMemoryEXT.adoc[]
+--
+
+[open,refpage='VkCopyMicromapToMemoryInfoEXT',desc='Parameters for serializing a micromap',type='structs']
+--
+:refpage: VkCopyMicromapToMemoryInfoEXT
+
+include::{generated}/api/structs/VkCopyMicromapToMemoryInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the source micromap for the copy
+  * pname:dst is the device or host address to memory which is the target
+    for the copy
+  * pname:mode is a elink:VkCopyMicromapModeEXT value specifying additional
+    operations to perform during the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMicromapToMemoryInfoEXT-src-07540]]
+    The source micromap pname:src must: have been constructed prior to the
+    execution of this command
+  * [[VUID-VkCopyMicromapToMemoryInfoEXT-dst-07541]]
+    The memory pointed to by pname:dst must: be at least as large as the
+    serialization size of pname:src, as reported by
+    flink:vkWriteMicromapsPropertiesEXT or
+    flink:vkCmdWriteMicromapsPropertiesEXT with a query type of
+    ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT
+  * [[VUID-VkCopyMicromapToMemoryInfoEXT-mode-07542]]
+    pname:mode must: be ename:VK_COPY_MICROMAP_MODE_SERIALIZE_EXT
+****
+
+include::{generated}/validity/structs/VkCopyMicromapToMemoryInfoEXT.adoc[]
+--
+
+[open,refpage='vkCmdCopyMemoryToMicromapEXT',desc='Copy device memory to a micromap',type='protos']
+--
+:refpage: vkCmdCopyMemoryToMicromapEXT
+
+To copy device memory to a micromap call:
+
+include::{generated}/api/protos/vkCmdCopyMemoryToMicromapEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is a pointer to a slink:VkCopyMicromapToMemoryInfoEXT
+    structure defining the copy operation.
+
+Accesses to pname:pInfo->dst must: be <<synchronization-dependencies,
+synchronized>> with the ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT.
+Accesses to the buffer indicated by pname:pInfo->src.deviceAddress must: be
+synchronized with the ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+pipeline stage and an access type of ename:VK_ACCESS_TRANSFER_READ_BIT.
+
+This command can accept micromaps produced by either
+flink:vkCmdCopyMicromapToMemoryEXT or flink:vkCopyMicromapToMemoryEXT.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07543]]
+    pname:pInfo->src.deviceAddress must: be a valid device address for a
+    buffer bound to device memory
+  * [[VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07544]]
+    pname:pInfo->src.deviceAddress must: be aligned to `256` bytes
+  * [[VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07545]]
+    If the buffer pointed to by pname:pInfo->src.deviceAddress is non-sparse
+    then it must: be bound completely and contiguously to a single
+    slink:VkDeviceMemory object
+  * [[VUID-vkCmdCopyMemoryToMicromapEXT-buffer-07546]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyMemoryToMicromapEXT.adoc[]
+--
+
+[open,refpage='VkCopyMemoryToMicromapInfoEXT',desc='Parameters for deserializing a micromap',type='structs']
+--
+:refpage: VkCopyMemoryToMicromapInfoEXT
+
+The sname:VkCopyMemoryToMicromapInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCopyMemoryToMicromapInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the device or host address to memory containing the source
+    data for the copy.
+  * pname:dst is the target micromap for the copy.
+  * pname:mode is a elink:VkCopyMicromapModeEXT value specifying additional
+    operations to perform during the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMemoryToMicromapInfoEXT-src-07547]]
+    The source memory pointed to by pname:src must: contain data previously
+    serialized using flink:vkCmdCopyMicromapToMemoryEXT
+  * [[VUID-VkCopyMemoryToMicromapInfoEXT-mode-07548]]
+    pname:mode must: be ename:VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT
+  * [[VUID-VkCopyMemoryToMicromapInfoEXT-src-07549]]
+    The data in pname:src must: have a format compatible with the
+    destination physical device as returned by
+    flink:vkGetDeviceMicromapCompatibilityEXT
+  * [[VUID-VkCopyMemoryToMicromapInfoEXT-dst-07550]]
+    pname:dst must: have been created with a pname:size greater than or
+    equal to that used to serialize the data in pname:src
+****
+
+include::{generated}/validity/structs/VkCopyMemoryToMicromapInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetDeviceMicromapCompatibilityEXT',desc='Check if a serialized micromap is compatible with the current device',type='protos']
+--
+:refpage: vkGetDeviceMicromapCompatibilityEXT
+
+To check if a serialized micromap is compatible with the current device
+call:
+
+include::{generated}/api/protos/vkGetDeviceMicromapCompatibilityEXT.adoc[]
+
+  * pname:device is the device to check the version against.
+  * pname:pVersionInfo is a pointer to a slink:VkMicromapVersionInfoEXT
+    structure specifying version information to check against the device.
+  * pname:pCompatibility is a pointer to a
+    elink:VkAccelerationStructureCompatibilityKHR value in which
+    compatibility information is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceMicromapCompatibilityEXT-micromap-07551]]
+    The <<features-micromap, pname:micromap>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetDeviceMicromapCompatibilityEXT.adoc[]
+--
+
+[open,refpage='VkMicromapVersionInfoEXT',desc='Micromap version information',type='structs']
+--
+:refpage: VkMicromapVersionInfoEXT
+
+The sname:VkMicromapVersionInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMicromapVersionInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pVersionData is a pointer to the version header of a micromap as
+    defined in flink:vkCmdCopyMicromapToMemoryEXT
+
+[NOTE]
+.Note
+====
+pname:pVersionData is a _pointer_ to an array of 2{times}ename:VK_UUID_SIZE
+code:uint8_t values instead of two ename:VK_UUID_SIZE arrays as the expected
+use case for this member is to be pointed at the header of a previously
+serialized micromap (via flink:vkCmdCopyMicromapToMemoryEXT or
+flink:vkCopyMicromapToMemoryEXT) that is loaded in memory.
+Using arrays would necessitate extra memory copies of the UUIDs.
+====
+
+include::{generated}/validity/structs/VkMicromapVersionInfoEXT.adoc[]
+--
+
+
+[[host-micromap]]
+== Host Micromap Operations
+
+Implementations are also required to provide host implementations of the
+micromap operations if the <<features-micromapHostCommands,
+pname:micromapHostCommands>> feature is enabled:
+
+  * flink:vkBuildMicromapsEXT corresponding to flink:vkCmdBuildMicromapsEXT
+  * flink:vkCopyMicromapEXT corresponding to flink:vkCmdCopyMicromapEXT
+  * flink:vkCopyMicromapToMemoryEXT corresponding to
+    flink:vkCmdCopyMicromapToMemoryEXT
+  * flink:vkCopyMemoryToMicromapEXT corresponding to
+    flink:vkCmdCopyMemoryToMicromapEXT
+  * flink:vkWriteMicromapsPropertiesEXT corresponding to
+    flink:vkCmdWriteMicromapsPropertiesEXT
+
+These commands are functionally equivalent to their device counterparts,
+except that they are executed on the host timeline, rather than being
+enqueued into command buffers.
+
+All micromaps used by the host commands must: be bound to host-visible
+memory, and all input data for micromap builds must: be referenced using
+host addresses instead of device addresses.
+Applications are not required to map micromap memory when using the host
+commands.
+
+
+[NOTE]
+.Note
+====
+The flink:vkBuildMicromapsEXT and flink:vkCmdBuildMicromapsEXT may: use
+different algorithms, and thus are not required to produce identical
+structures.
+
+Apart from these details, the host and device operations are
+interchangeable.
+====
+
+[NOTE]
+.Note
+====
+For efficient execution, micromaps manipulated using these commands should
+always be bound to host cached memory, as the implementation may need to
+repeatedly read and write this memory during the execution of the command.
+====
+
+[open,refpage='vkBuildMicromapsEXT',desc='Build a micromap on the host',type='protos']
+--
+:refpage: vkBuildMicromapsEXT
+
+To build micromaps on the host, call:
+
+include::{generated}/api/protos/vkBuildMicromapsEXT.adoc[]
+
+  * pname:device is the sname:VkDevice for which the micromaps are being
+    built.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:infoCount is the number of micromaps to build.
+    It specifies the number of the pname:pInfos that must: be provided.
+  * pname:pInfos is a pointer to an array of pname:infoCount
+    slink:VkMicromapBuildInfoEXT structures defining the geometry used to
+    build each micromap.
+
+This command fulfills the same task as flink:vkCmdBuildMicromapsEXT but is
+executed by the host.
+
+The fname:vkBuildMicromapsEXT command provides the ability to initiate
+multiple micromaps builds, however there is no ordering or synchronization
+implied between any of the individual micromap builds.
+
+[NOTE]
+.Note
+====
+This means that there cannot: be any memory aliasing between any micromap
+memories or scratch memories being used by any of the builds.
+====
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/build_micromap_common.adoc[]
+  * [[VUID-vkBuildMicromapsEXT-pInfos-07552]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstMicromap member must: be bound to host-visible device memory
+  * [[VUID-vkBuildMicromapsEXT-pInfos-07553]]
+    For each element of pname:pInfos, all referenced addresses of
+    pname:pInfos[i].pname:data.hostAddress must: be valid host memory
+  * [[VUID-vkBuildMicromapsEXT-pInfos-07554]]
+    For each element of pname:pInfos, all referenced addresses of
+    pname:pInfos[i].pname:triangleArray.hostAddress must: be valid host
+    memory
+  * [[VUID-vkBuildMicromapsEXT-micromapHostCommands-07555]]
+    The <<features-micromapHostCommands,
+    sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapHostCommands>>
+    feature must: be enabled
+  * [[VUID-vkBuildMicromapsEXT-pInfos-07556]]
+    If pname:pInfos[i].pname:mode is ename:VK_BUILD_MICROMAP_MODE_BUILD_EXT,
+    all addresses between pname:pInfos[i].pname:scratchData.hostAddress and
+    pname:pInfos[i].pname:scratchData.hostAddress + N - 1 must: be valid
+    host memory, where N is given by the pname:buildScratchSize member of
+    the slink:VkMicromapBuildSizesInfoEXT structure returned from a call to
+    flink:vkGetMicromapBuildSizesEXT with an identical
+    slink:VkMicromapBuildInfoEXT structure and primitive count
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkBuildMicromapsEXT-pInfos-07557]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstMicromap member must: be bound to memory that was not allocated
+    with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkBuildMicromapsEXT.adoc[]
+--
+
+[open,refpage='vkCopyMicromapEXT',desc='Copy a micromap on the host',type='protos']
+--
+:refpage: vkCopyMicromapEXT
+
+To copy or compact a micromap on the host, call:
+
+include::{generated}/api/protos/vkCopyMicromapEXT.adoc[]
+
+  * pname:device is the device which owns the micromaps.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a slink:VkCopyMicromapInfoEXT structure
+    defining the copy operation.
+
+This command fulfills the same task as flink:vkCmdCopyMicromapEXT but is
+executed by the host.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyMicromapEXT-buffer-07558]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyMicromapEXT-buffer-07559]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyMicromapEXT-micromapHostCommands-07560]]
+    The <<features-micromapHostCommands,
+    sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapHostCommands>>
+    feature must: be enabled
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyMicromapEXT-buffer-07561]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    memory that was not allocated with multiple instances
+  * [[VUID-vkCopyMicromapEXT-buffer-07562]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyMicromapEXT.adoc[]
+--
+
+[open,refpage='vkCopyMemoryToMicromapEXT',desc='Deserialize a micromap on the host',type='protos']
+--
+:refpage: vkCopyMemoryToMicromapEXT
+
+To copy host accessible memory to a micromap, call:
+
+include::{generated}/api/protos/vkCopyMemoryToMicromapEXT.adoc[]
+
+  * pname:device is the device which owns pname:pInfo->dst.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a slink:VkCopyMemoryToMicromapInfoEXT
+    structure defining the copy operation.
+
+This command fulfills the same task as flink:vkCmdCopyMemoryToMicromapEXT
+but is executed by the host.
+
+This command can accept micromaps produced by either
+flink:vkCmdCopyMicromapToMemoryEXT or flink:vkCopyMicromapToMemoryEXT.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyMemoryToMicromapEXT-pInfo-07563]]
+    pname:pInfo->src.hostAddress must: be a valid host pointer
+  * [[VUID-vkCopyMemoryToMicromapEXT-pInfo-07564]]
+    pname:pInfo->src.hostAddress must: be aligned to 16 bytes
+  * [[VUID-vkCopyMemoryToMicromapEXT-buffer-07565]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyMemoryToMicromapEXT-micromapHostCommands-07566]]
+    The <<features-micromapHostCommands,
+    sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapHostCommands>>
+    feature must: be enabled
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyMemoryToMicromapEXT-buffer-07567]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyMemoryToMicromapEXT.adoc[]
+--
+
+[open,refpage='vkCopyMicromapToMemoryEXT',desc='Serialize a micromap on the host',type='protos']
+--
+:refpage: vkCopyMicromapToMemoryEXT
+
+To copy a micromap to host accessible memory, call:
+
+include::{generated}/api/protos/vkCopyMicromapToMemoryEXT.adoc[]
+
+  * pname:device is the device which owns pname:pInfo->src.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a slink:VkCopyMicromapToMemoryInfoEXT
+    structure defining the copy operation.
+
+This command fulfills the same task as flink:vkCmdCopyMicromapToMemoryEXT
+but is executed by the host.
+
+This command produces the same results as
+flink:vkCmdCopyMicromapToMemoryEXT, but writes its result directly to a host
+pointer, and is executed on the host rather than the device.
+The output may: not necessarily be bit-for-bit identical, but it can be
+equally used by either flink:vkCmdCopyMemoryToMicromapEXT or
+flink:vkCopyMemoryToMicromapEXT.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyMicromapToMemoryEXT-buffer-07568]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyMicromapToMemoryEXT-pInfo-07569]]
+    pname:pInfo->dst.hostAddress must: be a valid host pointer
+  * [[VUID-vkCopyMicromapToMemoryEXT-pInfo-07570]]
+    pname:pInfo->dst.hostAddress must: be aligned to 16 bytes
+  * [[VUID-vkCopyMicromapToMemoryEXT-micromapHostCommands-07571]]
+    The <<features-micromapHostCommands,
+    sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapHostCommands>>
+    feature must: be enabled
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyMicromapToMemoryEXT-buffer-07572]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyMicromapToMemoryEXT.adoc[]
+--
+
+[open,refpage='vkWriteMicromapsPropertiesEXT',desc='Query micromap meta-data on the host',type='protos']
+--
+:refpage: vkWriteMicromapsPropertiesEXT
+
+To query micromap size parameters on the host, call:
+
+include::{generated}/api/protos/vkWriteMicromapsPropertiesEXT.adoc[]
+
+  * pname:device is the device which owns the micromaps in pname:pMicromaps.
+  * pname:micromapCount is the count of micromaps for which to query the
+    property.
+  * pname:pMicromaps is a pointer to an array of existing previously built
+    micromaps.
+  * pname:queryType is a elink:VkQueryType value specifying the property to
+    be queried.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written.
+  * pname:stride is the stride in bytes between results for individual
+    queries within pname:pData.
+
+This command fulfills the same task as
+flink:vkCmdWriteMicromapsPropertiesEXT but is executed by the host.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/write_micromap_properties_common.adoc[]
+  * [[VUID-vkWriteMicromapsPropertiesEXT-queryType-07573]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, then pname:stride
+    must: be a multiple of the size of basetype:VkDeviceSize
+  * [[VUID-vkWriteMicromapsPropertiesEXT-queryType-07574]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, then pname:pData
+    must: point to a basetype:VkDeviceSize
+  * [[VUID-vkWriteMicromapsPropertiesEXT-queryType-07575]]
+    If pname:queryType is
+  * [[VUID-vkWriteMicromapsPropertiesEXT-dataSize-07576]]
+    pname:dataSize must: be greater than or equal to
+    [eq]#pname:micromapCount*pname:stride#
+  * [[VUID-vkWriteMicromapsPropertiesEXT-buffer-07577]]
+    The pname:buffer used to create each micromap in pname:pMicromaps must:
+    be bound to host-visible device memory
+  * [[VUID-vkWriteMicromapsPropertiesEXT-micromapHostCommands-07578]]
+    The <<features-micromapHostCommands,
+    sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapHostCommands>>
+    feature must: be enabled
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkWriteMicromapsPropertiesEXT-buffer-07579]]
+    The pname:buffer used to create each micromap in pname:pMicromaps must:
+    be bound to memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkWriteMicromapsPropertiesEXT.adoc[]
+--
+
+ifdef::VK_NV_displacement_micromap[]
+[[displacement-micromap]]
+=== Displacement Micromap
+
+A displacement micromap in an acceleration structure includes information in
+the slink:VkAccelerationStructureTrianglesDisplacementMicromapNV to define a
+base triangle and displacement directions then uses displacement information
+encoded in the micromap to apply to those values to generate the final
+position.
+
+==== Displacement Base Triangle
+
+If pname:displacementBiasAndScaleBuffer is provided the bias and scale are
+fetched from that buffer.
+If pname:displacementBiasAndScaleBuffer is zero the bias and scale are
+assumed to be 0.0 and 1.0, respectively.
+
+Given an input position from the geometry, the base position and
+displacement vector used by the displacement are computed by:
+
+[eq]#basePosition = inputPosition {plus} displacementVector {times} bias#
+
+[eq]#baseDisplacementVector = displacementVector {times} scale#
+
+The parameters of each micro-vertex are derived from a combination of the
+base triangle parameters extracted from the bottom-level acceleration
+structure, the barycentrics of that micro-vertex, and the displacement value
+fetched from the displacement micromap corresponding to that micro-vertex.
+
+[eq]#microVertexBasePosition = lerp(basePositions, microVertexBarycentrics)#
+
+[eq]#microVertexDisplacementVector = lerp(displacementVectors,
+microVertexBarycentrics)#
+
+[eq]#microVertexDisplacedPosition = microVertexBasePosition {plus}
+microVertexDisplacementVector {times} micromapDisplacementValue#
+
+==== Displacement Micromap Encoding
+
+[[displacement-micromap-encoding]]
+
+// XXX Needs a lot of diagrams and pseudocode
+
+Displacement amounts are stored in displacement blocks, each covering a
+triangular region of microvertices.
+Depending on the subdivision level and encoding format, one or more
+displacement blocks combine to store all displacement values for a given
+displacement micromap.
+
+Displacement blocks are organized along a space filling curve within a
+displacement micromap if more than one block is required, then
+micro-vertices are organized along the same space filling curve within a
+displacement micromap.
+
+The space-filling curve is purely hierarchical with recursive splitting,
+similar to that for opacity micromaps but operating on vertices instead of
+triangles.
+To maintain that the hierarchical ordering is contiguous while keeping
+continuous winding, some triangles are flipped and wound differently.
+
+The ename:VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV format is
+an uncompressed, packed format which covers 64 microtriangles (subdivision
+level 3) in a block.
+The block contains 45 displacement values encoded as 11 bit unorm values and
+stored tightly packed in the vertex order described above, occupying 495
+bits.
+This is followed by 15 unused bits then 2 reserved bits which must: be 0.
+If this block is used to store displacement for a subdivision level below 3
+the later unused values are ignored.
+
+[options="header"]
+|====
+| Section | Field | Entries | Bits per entry | Starting bit offset
+| Displacement amounts | Vertex 0 - 44 | 45 | 11 | 0
+| Unused | | 1 | 15 | 495
+| Reserved | Must be 0 | 1 | 2 | 510
+|====
+
+The ename:VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV and
+ename:VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV formats
+store displacements in a compressed form to save space.
+Both formats use the same compression algorithm, differing in the number of
+bits used in the different fields.
+
+The compression algorithm works by starting with fully specified anchor
+vertices, then for each level, predicting the value for the displacement and
+encoding the correction for that value, using fewer bits for each level of
+subdivision.
+
+When adding a vertex in the recursive subdivision process between two
+adjacent displacement values, the predicted value is given by the rounded
+average of the two adjacent values as integers:
+
+[eq]#prediction = (A {plus} B {plus} 1) / 2#
+
+The decoded value after applying the correction is given by:
+
+[eq]#decoded = prediction {plus} ( SignExtend(correction) << shift )#
+
+where [eq]#correction# is given by the corrections field for a given level
+and micro vertex and [eq]#shift# is given by the shifts field indexed from
+the level then by 4 values, selected from interior or the 3 edges in vertex
+order in that order.
+
+The bit encoding for
+ename:VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV
+
+[options="header"]
+|====
+| Section | Field | Entries | Bits per entry | Starting bit offset
+| Anchors | Vertex 0 - 2 | 3 | 11 | 0
+| Corrections | Level 1 | 3 | 11 | 33
+| | Level 2 | 9 | 11 | 66
+| | Level 3 | 30 | 10 | 165
+| | Level 4 | 108 | 5 | 465
+| Unused |  | 1 | 1 | 1005
+| Shifts | Level 4 | 4 | 3 | 1006
+| | Level 3 | 4 | 1 | 1018
+| Reserved | Must be 0 | 1 | 2 | 1022
+|====
+
+The bit encoding for
+ename:VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV
+
+[options="header"]
+|====
+| Section | Field | Entries | Bits per entry | Starting bit offset
+| Anchors | Vertex 0 - 2 | 3 | 11 | 0
+| Corrections | Level 1 | 3 | 11 | 33
+| | Level 2 | 9 | 8 | 66
+| | Level 3 | 30 | 4 | 138
+| | Level 4 | 108 | 2 | 258
+| | Level 5 | 408 | 1 | 474
+| Unused |  | 1 | 88 | 882
+| Shifts | Level 5 | 4 | 4 | 970
+| | Level 4 | 4 | 4 | 986
+| | Level 3 | 4 | 3 | 1002
+| | Level 2 | 4 | 2 | 1014
+| Reserved | Must be 0 | 1 | 2 | 1022
+|====
+
+endif::VK_NV_displacement_micromap[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_pipeline_creation_feedback/pipelines.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_pipeline_creation_feedback/pipelines.adoc
new file mode 100644
index 0000000..f1f71d2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_pipeline_creation_feedback/pipelines.adoc
@@ -0,0 +1,175 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Pipelines chapter (pipelines.adoc)
+
+
+[[pipelines-creation-feedback]]
+== Pipeline Creation Feedback
+
+[open,refpage='VkPipelineCreationFeedbackCreateInfo',desc='Request for feedback about the creation of a pipeline',type='structs',xrefs='VkGraphicsPipelineCreateInfo VkComputePipelineCreateInfo VkRayTracingPipelineCreateInfoNV VkRayTracingPipelineCreateInfoKHR VkPipelineCreationFeedback',alias='VkPipelineCreationFeedbackCreateInfoEXT']
+--
+Feedback about the creation of a particular pipeline object can: be obtained
+by adding a sname:VkPipelineCreationFeedbackCreateInfo structure to the
+pname:pNext chain of slink:VkGraphicsPipelineCreateInfo,
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
+or slink:VkComputePipelineCreateInfo.
+The sname:VkPipelineCreationFeedbackCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCreationFeedbackCreateInfo.adoc[]
+
+ifdef::VK_EXT_pipeline_creation_feedback[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineCreationFeedbackCreateInfoEXT.adoc[]
+endif::VK_EXT_pipeline_creation_feedback[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pPipelineCreationFeedback is a pointer to a
+    slink:VkPipelineCreationFeedback structure.
+  * pname:pipelineStageCreationFeedbackCount is the number of elements in
+    pname:pPipelineStageCreationFeedbacks.
+  * pname:pPipelineStageCreationFeedbacks is a pointer to an array of
+    pname:pipelineStageCreationFeedbackCount
+    slink:VkPipelineCreationFeedback structures.
+
+An implementation should: write pipeline creation feedback to
+pname:pPipelineCreationFeedback and may: write pipeline stage creation
+feedback to pname:pPipelineStageCreationFeedbacks.
+An implementation must: set or clear the
+ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT in
+slink:VkPipelineCreationFeedback::pname:flags for
+pname:pPipelineCreationFeedback and every element of
+pname:pPipelineStageCreationFeedbacks.
+
+[NOTE]
+.Note
+====
+One common scenario for an implementation to skip per-stage feedback is when
+ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT is
+set in pname:pPipelineCreationFeedback.
+====
+
+When chained to
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[or]
+slink:VkGraphicsPipelineCreateInfo, the `i` element of
+pname:pPipelineStageCreationFeedbacks corresponds to the `i` element of
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV::pname:pStages,]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[or]
+slink:VkGraphicsPipelineCreateInfo::pname:pStages.
+When chained to slink:VkComputePipelineCreateInfo, the first element of
+pname:pPipelineStageCreationFeedbacks corresponds to
+slink:VkComputePipelineCreateInfo::pname:stage.
+
+include::{generated}/validity/structs/VkPipelineCreationFeedbackCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineCreationFeedback',desc='Feedback about the creation of a pipeline or pipeline stage',type='structs',xrefs='VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackFlagBits',alias='VkPipelineCreationFeedbackEXT']
+--
+The sname:VkPipelineCreationFeedback structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCreationFeedback.adoc[]
+
+ifdef::VK_EXT_pipeline_creation_feedback[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineCreationFeedbackEXT.adoc[]
+endif::VK_EXT_pipeline_creation_feedback[]
+
+  * pname:flags is a bitmask of elink:VkPipelineCreationFeedbackFlagBits
+    providing feedback about the creation of a pipeline or of a pipeline
+    stage.
+  * pname:duration is the duration spent creating a pipeline or pipeline
+    stage in nanoseconds.
+
+If the ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT is not set in
+pname:flags, an implementation must: not set any other bits in pname:flags,
+and the values of all other sname:VkPipelineCreationFeedback data members
+are undefined:.
+
+include::{generated}/validity/structs/VkPipelineCreationFeedback.adoc[]
+--
+
+[open,refpage='VkPipelineCreationFeedbackFlagBits',desc='Bitmask specifying pipeline or pipeline stage creation feedback',type='enums',xrefs='VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedback',alias='VkPipelineCreationFeedbackFlagBitsEXT']
+--
+Possible values of the pname:flags member of
+slink:VkPipelineCreationFeedback are:
+
+include::{generated}/api/enums/VkPipelineCreationFeedbackFlagBits.adoc[]
+
+ifdef::VK_EXT_pipeline_creation_feedback[]
+or the equivalent
+
+include::{generated}/api/enums/VkPipelineCreationFeedbackFlagBitsEXT.adoc[]
+endif::VK_EXT_pipeline_creation_feedback[]
+
+  * ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT indicates that the
+    feedback information is valid.
+  * ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT
+    indicates that a readily usable pipeline or pipeline stage was found in
+    the pname:pipelineCache specified by the application in the pipeline
+    creation command.
++
+An implementation should: set the
+ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT bit
+if it was able to avoid the large majority of pipeline or pipeline stage
+creation work by using the pname:pipelineCache parameter of
+flink:vkCreateGraphicsPipelines,
+ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
+ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
+or flink:vkCreateComputePipelines.
+When an implementation sets this bit for the entire pipeline, it may: leave
+it unset for any stage.
++
+[NOTE]
+.Note
+====
+Implementations are encouraged to provide a meaningful signal to
+applications using this bit.
+The intention is to communicate to the application that the pipeline or
+pipeline stage was created "`as fast as it gets`" using the pipeline cache
+provided by the application.
+If an implementation uses an internal cache, it is discouraged from setting
+this bit as the feedback would be unactionable.
+====
+
+  * ename:VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT
+    indicates that the base pipeline specified by the
+    pname:basePipelineHandle or pname:basePipelineIndex member of the
+    stext:Vk*PipelineCreateInfo structure was used to accelerate the
+    creation of the pipeline.
++
+An implementation should: set the
+ename:VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT bit if it
+was able to avoid a significant amount of work by using the base pipeline.
++
+[NOTE]
+.Note
+====
+While "`significant amount of work`" is subjective, implementations are
+encouraged to provide a meaningful signal to applications using this bit.
+For example, a 1% reduction in duration may not warrant setting this bit,
+while a 50% reduction would.
+====
+--
+
+[open,refpage='VkPipelineCreationFeedbackFlags',desc='Bitmask of VkPipelineCreationFeedbackFlagBits',type='flags',xrefs='VkPipelineCreationFeedback VkPipelineCreationFeedbackFlagBits',alias='VkPipelineCreationFeedbackFlagsEXT']
+--
+include::{generated}/api/flags/VkPipelineCreationFeedbackFlags.adoc[]
+
+ifdef::VK_EXT_pipeline_creation_feedback[]
+or the equivalent
+
+include::{generated}/api/flags/VkPipelineCreationFeedbackFlagsEXT.adoc[]
+endif::VK_EXT_pipeline_creation_feedback[]
+
+tname:VkPipelineCreationFeedbackFlags is a bitmask type for providing zero
+or more elink:VkPipelineCreationFeedbackFlagBits.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_private_data.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_private_data.adoc
new file mode 100644
index 0000000..c37c6a7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_private_data.adoc
@@ -0,0 +1,225 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[private-data]]
+= Private Data
+
+The private data extension provides a way for users to associate arbitrary
+user defined data with Vulkan objects.
+This association is accomplished by storing 64-bit unsigned integers of user
+defined data in private data slots.
+A private data slot represents a storage allocation for one data item for
+each child object of the device.
+
+An application can: reserve private data slots at device creation.
+To reserve private data slots, insert a slink:VkDevicePrivateDataCreateInfo
+in the pname:pNext chain in slink:VkDeviceCreateInfo before device creation.
+Multiple slink:VkDevicePrivateDataCreateInfo structures can: be chained
+together, and the sum of the requested slots will be reserved.
+This is an exception to the specified valid usage for
+<<fundamentals-validusage-pNext,structure pointer chains>>.
+Reserving slots in this manner is not strictly necessary but it may: improve
+performance.
+
+[open,refpage='VkPrivateDataSlot',desc='Opaque handle to a private data slot object',type='handles',alias='VkPrivateDataSlotEXT']
+--
+Private data slots are represented by sname:VkPrivateDataSlot handles:
+
+include::{generated}/api/handles/VkPrivateDataSlot.adoc[]
+
+ifdef::VK_EXT_private_data[]
+or the equivalent
+
+include::{generated}/api/handles/VkPrivateDataSlotEXT.adoc[]
+endif::VK_EXT_private_data[]
+--
+
+[open,refpage='vkCreatePrivateDataSlot',desc='Create a slot for private data storage',type='protos',alias='vkCreatePrivateDataSlotEXT']
+--
+To create a private data slot, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCreatePrivateDataSlot.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_EXT_private_data[or the equivalent command]
+
+ifdef::VK_EXT_private_data[]
+include::{generated}/api/protos/vkCreatePrivateDataSlotEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:device is the logical device associated with the creation of the
+    object(s) holding the private data slot.
+  * pname:pCreateInfo is a pointer to a sname:VkPrivateDataSlotCreateInfo
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPrivateDataSlot is a pointer to a slink:VkPrivateDataSlot handle
+    in which the resulting private data slot is returned
+
+.Valid Usage
+****
+  * [[VUID-vkCreatePrivateDataSlot-privateData-04564]]
+    The <<features-privateData, pname:privateData>> feature must: be enabled
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreatePrivateDataSlotEXT-device-05000]]
+    The number of private data slots currently allocated from pname:device
+    plus 1 must: be less than or equal to the total number of private data
+    slots requested via
+    slink:VkDevicePrivateDataCreateInfoEXT::pname:privateDataSlotRequestCount
+    when pname:device was created
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkCreatePrivateDataSlot.adoc[]
+--
+
+[open,refpage='VkPrivateDataSlotCreateInfo',desc='Structure specifying the parameters of private data slot construction',type='structs',alias='VkPrivateDataSlotCreateInfoEXT']
+--
+The sname:VkPrivateDataSlotCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPrivateDataSlotCreateInfo.adoc[]
+
+ifdef::VK_EXT_private_data[]
+or the equivalent
+
+include::{generated}/api/structs/VkPrivateDataSlotCreateInfoEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+
+include::{generated}/validity/structs/VkPrivateDataSlotCreateInfo.adoc[]
+--
+
+[open,refpage='VkPrivateDataSlotCreateFlags',desc='Reserved for future use',type='flags',alias='VkPrivateDataSlotCreateFlagsEXT']
+--
+include::{generated}/api/flags/VkPrivateDataSlotCreateFlags.adoc[]
+
+ifdef::VK_EXT_private_data[]
+or the equivalent
+
+include::{generated}/api/flags/VkPrivateDataSlotCreateFlagsEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+tname:VkPrivateDataSlotCreateFlags is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+[open,refpage='vkDestroyPrivateDataSlot',desc='Destroy a private data slot',type='protos',alias='vkDestroyPrivateDataSlotEXT']
+--
+To destroy a private data slot, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkDestroyPrivateDataSlot.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_EXT_private_data[or the equivalent command]
+
+ifdef::VK_EXT_private_data[]
+include::{generated}/api/protos/vkDestroyPrivateDataSlotEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:device is the logical device associated with the creation of the
+    object(s) holding the private data slot.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:privateDataSlot is the private data slot to destroy.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyPrivateDataSlot-privateDataSlot-04062]]
+    If sname:VkAllocationCallbacks were provided when pname:privateDataSlot
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyPrivateDataSlot-privateDataSlot-04063]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:privateDataSlot was created, pname:pAllocator must: be `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyPrivateDataSlot.adoc[]
+--
+
+[open,refpage='vkSetPrivateData',desc='Associate data with a Vulkan object',type='protos',alias='vkSetPrivateDataEXT']
+--
+To store user defined data in a slot associated with a Vulkan object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkSetPrivateData.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_EXT_private_data[or the equivalent command]
+
+ifdef::VK_EXT_private_data[]
+include::{generated}/api/protos/vkSetPrivateDataEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:device is the device that created the object.
+  * pname:objectType is a elink:VkObjectType specifying the type of object
+    to associate data with.
+  * pname:objectHandle is a handle to the object to associate data with.
+  * pname:privateDataSlot is a handle to a slink:VkPrivateDataSlot
+    specifying location of private data storage.
+  * pname:data is user defined data to associate the object with.
+    This data will be stored at pname:privateDataSlot.
+
+.Valid Usage
+****
+  * [[VUID-vkSetPrivateData-objectHandle-04016]]
+    pname:objectHandle must: be pname:device or a child of pname:device
+  * [[VUID-vkSetPrivateData-objectHandle-04017]]
+    pname:objectHandle must: be a valid handle to an object of type
+    pname:objectType
+****
+
+include::{generated}/validity/protos/vkSetPrivateData.adoc[]
+--
+
+[open,refpage='vkGetPrivateData',desc='Retrieve data associated with a Vulkan object',type='protos',alias='vkGetPrivateDataEXT']
+--
+To retrieve user defined data from a slot associated with a Vulkan object,
+call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkGetPrivateData.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_EXT_private_data[or the equivalent command]
+
+ifdef::VK_EXT_private_data[]
+include::{generated}/api/protos/vkGetPrivateDataEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:device is the device that created the object
+  * pname:objectType is a elink:VkObjectType specifying the type of object
+    data is associated with.
+  * pname:objectHandle is a handle to the object data is associated with.
+  * pname:privateDataSlot is a handle to a slink:VkPrivateDataSlot
+    specifying location of private data pointer storage.
+  * pname:pData is a pointer to specify where user data is returned.
+    `0` will be written in the absence of a previous call to
+    fname:vkSetPrivateData using the object specified by pname:objectHandle.
+
+[NOTE]
+.Note
+====
+Due to platform details on Android, implementations might not be able to
+reliably return `0` from calls to fname:vkGetPrivateData for
+slink:VkSwapchainKHR objects on which fname:vkSetPrivateData has not
+previously been called.
+This erratum is exclusive to the Android platform and objects of type
+slink:VkSwapchainKHR.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkGetPrivateData-objectType-04018]]
+    pname:objectType must: be ename:VK_OBJECT_TYPE_DEVICE, or an object type
+    whose parent is slink:VkDevice
+****
+
+include::{generated}/validity/protos/vkGetPrivateData.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_subpass_merge_feedback/renderpass.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_subpass_merge_feedback/renderpass.adoc
new file mode 100644
index 0000000..0a6eddb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_subpass_merge_feedback/renderpass.adoc
@@ -0,0 +1,149 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the render pass chapter (renderpass.adoc)
+
+[[renderpass-creation-feedback]]
+== Render Pass Creation Feedback
+
+[open,refpage='VkRenderPassCreationControlEXT',desc='Control about the creation of render pass or subpass',type='structs',xrefs='vkCreateRenderPass2 VkRenderPassCreateInfo2 VkSubpassDescription2']
+--
+A sname:VkRenderPassCreationControlEXT structure can: be included in the
+pname:pNext chain of sname:VkRenderPassCreateInfo2 or pname:pNext chain of
+slink:VkSubpassDescription2.
+The sname:VkRenderPassCreationControlEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassCreationControlEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:disallowMerging is a boolean value indicating whether subpass
+    merging will be disabled.
+
+If a sname:VkRenderPassCreationControlEXT structure is included in the
+pname:pNext chain of slink:VkRenderPassCreateInfo2 and its value of
+pname:disallowMerging is ename:VK_TRUE, the implementation will disable
+subpass merging for the entire render pass.
+If a sname:VkRenderPassCreationControlEXT structure is included in the
+pname:pNext chain of slink:VkSubpassDescription2 and its value of
+pname:disallowMerging is ename:VK_TRUE, the implementation will disable
+merging the described subpass with previous subpasses in the render pass.
+
+include::{generated}/validity/structs/VkRenderPassCreationControlEXT.adoc[]
+--
+
+[open,refpage='VkRenderPassCreationFeedbackCreateInfoEXT',desc='Request feedback about the creation of render pass',type='structs',xrefs='vkCreateRenderPass2 VkRenderPassCreateInfo2 VkRenderPassCreationControlEXT']
+--
+To obtain feedback about the creation of a render pass, include a
+sname:VkRenderPassCreationFeedbackCreateInfoEXT structure in the pname:pNext
+chain of slink:VkRenderPassCreateInfo2.
+The sname:VkRenderPassCreationFeedbackCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassCreationFeedbackCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pRenderPassFeedback is a pointer to a
+    slink:VkRenderPassCreationFeedbackInfoEXT structure in which feedback is
+    returned.
+
+include::{generated}/validity/structs/VkRenderPassCreationFeedbackCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkRenderPassCreationFeedbackInfoEXT',desc='Feedback about the creation of a render pass',type='structs',xrefs='VkRenderPassCreationFeedbackCreateInfoEXT']
+--
+The sname:VkRenderPassCreationFeedbackInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassCreationFeedbackInfoEXT.adoc[]
+
+  * pname:postMergeSubpassCount is the subpass count after merge.
+
+include::{generated}/validity/structs/VkRenderPassCreationFeedbackInfoEXT.adoc[]
+--
+
+[open,refpage='VkRenderPassSubpassFeedbackCreateInfoEXT',desc='Request for feedback about the creation of subpass',type='structs',xrefs='vkCreateRenderPass2 VkRenderPassCreateInfo2 VkSubpassDescription2 VkRenderPassCreationControlEXT']
+--
+Feedback about the creation of a subpass can: be obtained by including a
+sname:VkRenderPassSubpassFeedbackCreateInfoEXT structure in the pname:pNext
+chain of slink:VkSubpassDescription2.
+sname:VkRenderPassSubpassFeedbackCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassSubpassFeedbackCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pSubpassFeedback is a pointer to a
+    slink:VkRenderPassSubpassFeedbackInfoEXT structure in which feedback is
+    returned.
+
+include::{generated}/validity/structs/VkRenderPassSubpassFeedbackCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkRenderPassSubpassFeedbackInfoEXT',desc='Feedback about the creation of subpass',type='structs',xrefs='VkRenderPassSubpassFeedbackCreateInfoEXT']
+--
+The sname:VkRenderPassSubpassFeedbackInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassSubpassFeedbackInfoEXT.adoc[]
+
+  * pname:subpassMergeStatus is a ename:VkSubpassMergeStatusEXT value
+    specifying information about whether the subpass is merged with previous
+    subpass and the reason why it is not merged.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which provides additional
+    details.
+  * pname:postMergeIndex is the subpass index after the subpass merging.
+
+include::{generated}/validity/structs/VkRenderPassSubpassFeedbackInfoEXT.adoc[]
+--
+
+[open,refpage='VkSubpassMergeStatusEXT',desc='Specify a subpass merging status',type='enums']
+--
+Possible values of
+sname:VkRenderPassSubpassFeedbackInfoEXT:subpassMergeStatus are:
+
+include::{generated}/api/enums/VkSubpassMergeStatusEXT.adoc[]
+
+  * ename:VK_SUBPASS_MERGE_STATUS_MERGED_EXT specifies the subpass is merged
+    with a previous subpass.
+  * ename:VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT specifies the subpass is
+    disallowed to merge with previous subpass.
+    If the render pass does not allow subpass merging, then all subpass
+    statuses are set to this value.
+    If a subpass description does not allow subpass merging, then only that
+    subpass's status is set to this value.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT specifies the
+    subpass is not merged because it contains side effects.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT specifies
+    the subpass is not merged because sample count is not compatible with
+    previous subpass.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT specifies
+    the subpass is not merged because view masks do not match with previous
+    subpass.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT specifies the
+    subpass is not merged because of attachments aliasing between them.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT specifies the
+    subpass is not merged because subpass dependencies do not allow merging.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT
+    specifies the subpass is not merged because input attachment is not a
+    color attachment from previous subpass or the formats are incompatible.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT
+    specifies the subpass is not merged because of too many attachments.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT
+    specifies the subpass is not merged because of insufficient memory.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT
+    specifies the subpass is not merged because of too many depth/stencil
+    attachments.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT
+    specifies the subpass is not merged because a resolve attachment is
+    reused as an input attachment in a subsequent subpass.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT specifies
+    the subpass is not merged because the render pass has only one subpass.
+  * ename:VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT specifies other
+    reasons why subpass is not merged.
+    It is also the recommended default value that should be reported when a
+    subpass is not merged and when no other value is appropriate.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentFenceInfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentFenceInfo.adoc
new file mode 100644
index 0000000..2c5d475
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentFenceInfo.adoc
@@ -0,0 +1,67 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkSwapchainPresentFenceInfoEXT',desc='Fences associated with a vkQueuePresentKHR operation',type='structs']
+--
+The sname:VkSwapchainPresentFenceInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainPresentFenceInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is the number of swapchains being presented to by
+    this command.
+  * pname:pFences is a list of fences with pname:swapchainCount entries.
+    Each entry must: be dlink:VK_NULL_HANDLE or the handle of a fence to
+    signal when the relevant operations on the associated swapchain have
+    completed.
+
+The set of _queue operations_ defined by queuing an image for presentation,
+as well as operations performed by the presentation engine access the
+payloads of objects associated with the presentation operation.
+The associated objects include:
+
+  * The swapchain image, its implicitly bound memory, and any other
+    resources bound to that memory.
+  * The wait semaphores specified when queuing the image for presentation.
+
+The application can: provide a fence that the implementation will signal
+when all such queue operations have completed and the presentation engine
+has taken a reference to the payload of any objects it accesses as part of
+the present operation.
+For all
+ifdef::VK_KHR_timeline_semaphore[binary]
+wait semaphores imported by the presentation engine using the equivalent of
+reference transference, as described in
+<<synchronization-semaphores-importing,Importing Semaphore Payloads>>, this
+fence must: not signal until all such semaphore payloads have been reset by
+the presentation engine.
+
+The application can: destroy the wait semaphores associated with a given
+presentation operation when at least one of the associated fences is
+signaled, and can: destroy the swapchain when the fences associated with all
+past presentation requests referring to that swapchain have signaled.
+
+Fences associated with presentations to the same swapchain on the same
+slink:VkQueue must: be signaled in the same order as the present operations.
+
+To specify a fence for each swapchain in a present operation, include the
+sname:VkSwapchainPresentFenceInfoEXT structure in the pname:pNext chain of
+the slink:VkPresentInfoKHR structure.
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainPresentFenceInfoEXT-swapchainCount-07757]]
+    pname:swapchainCount must: be equal to
+    slink:VkPresentInfoKHR::pname:swapchainCount
+  * [[VUID-VkSwapchainPresentFenceInfoEXT-pFences-07758]]
+    Each element of pname:pFences must: be unsignaled
+  * [[VUID-VkSwapchainPresentFenceInfoEXT-pFences-07759]]
+    Each element of pname:pFences must: not be associated with any other
+    queue command that has not yet completed execution on that queue
+****
+
+include::{generated}/validity/structs/VkSwapchainPresentFenceInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModeInfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModeInfo.adoc
new file mode 100644
index 0000000..cd65bd3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModeInfo.adoc
@@ -0,0 +1,88 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkSwapchainPresentModeInfoEXT',desc='Presentation modes for a vkQueuePresentKHR operation',type='structs']
+--
+The sname:VkSwapchainPresentModeInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainPresentModeInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is the number of swapchains being presented to by
+    this command.
+  * pname:pPresentModes is a list of presentation modes with
+    pname:swapchainCount entries.
+
+If the pname:pNext chain of slink:VkPresentInfoKHR includes a
+sname:VkSwapchainPresentModeInfoEXT structure, then that structure defines
+the presentation modes used for the current and subsequent presentation
+operations.
+
+When the application changes present modes with
+slink:VkSwapchainPresentModeInfoEXT, images that have already been queued
+for presentation will continue to be presented according to the previous
+present mode.
+The current image being queued for presentation and subsequent images will
+be presented according to the new present mode.
+The behavior during the transition between the two modes is defined as
+follows.
+
+ifdef::VK_KHR_shared_presentable_image[]
+  * Transition from ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR to
+    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR: the presentation engine
+    updates the shared presentable image according to the behavior of
+    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR.
+  * Transition from ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR to
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR: the presentation
+    engine may: update the shared presentable image or defer that to its
+    regular refresh cycle, according to the behavior of
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
+endif::VK_KHR_shared_presentable_image[]
+  * Transition between ename:VK_PRESENT_MODE_FIFO_KHR and
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR: Images continue to be appended
+    to the same FIFO queue, and the behavior with respect to waiting for
+    vertical blanking period will follow the new mode for current and
+    subsequent images.
+  * Transition from ename:VK_PRESENT_MODE_IMMEDIATE_KHR to
+    ename:VK_PRESENT_MODE_FIFO_KHR or
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR: As all prior present requests in
+    the ename:VK_PRESENT_MODE_IMMEDIATE_KHR mode are applied immediately,
+    there are no outstanding present operations in this mode, and current
+    and subsequent images are appended to the FIFO queue and presented
+    according to the new mode.
+  * Transition from ename:VK_PRESENT_MODE_MAILBOX_KHR to
+    ename:VK_PRESENT_MODE_FIFO_KHR or
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR: Presentation in both modes
+    require waiting for the next vertical blanking period, with
+    ename:VK_PRESENT_MODE_MAILBOX_KHR allowing the pending present operation
+    to be replaced by a new one.
+    In this case, the current present operation will replace the pending
+    present operation and is applied according to the new mode.
+  * Transition from ename:VK_PRESENT_MODE_FIFO_KHR or
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR to
+    ename:VK_PRESENT_MODE_IMMEDIATE_KHR or
+    ename:VK_PRESENT_MODE_MAILBOX_KHR: If the FIFO queue is empty,
+    presentation is done according to the behavior of the new mode.
+    If there are present operations in the FIFO queue, once the last present
+    operation is performed based on the respective vertical blanking period,
+    the current and subsequent updates are applied according to the new
+    mode.
+  * The behavior during transition between any other present modes, if
+    possible, is implementation defined.
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainPresentModeInfoEXT-swapchainCount-07760]]
+    pname:swapchainCount must: be equal to
+    slink:VkPresentInfoKHR::pname:swapchainCount
+  * [[VUID-VkSwapchainPresentModeInfoEXT-pPresentModes-07761]]
+    Each entry in pname:pPresentModes must be a presentation mode specified
+    in slink:VkSwapchainPresentModesCreateInfoEXT::pname:pPresentModes when
+    creating the entry's corresponding swapchain
+****
+
+include::{generated}/validity/structs/VkSwapchainPresentModeInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModesCreateInfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModesCreateInfo.adoc
new file mode 100644
index 0000000..fde75d2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentModesCreateInfo.adoc
@@ -0,0 +1,45 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkSwapchainPresentModesCreateInfoEXT',desc='All presentation modes usable by the swapchain',type='structs']
+--
+Applications can: modify the presentation mode used by the swapchain on a
+per-presentation basis.
+However, all presentation modes the application intends to use with the
+swapchain must: be specified at swapchain creation time.
+To specify more than one presentation mode when creating a swapchain,
+include the sname:VkSwapchainPresentModesCreateInfoEXT structure in the
+pname:pNext chain of the slink:VkSwapchainCreateInfoKHR structure.
+
+The sname:VkSwapchainPresentModesCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainPresentModesCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentModeCount is the number of presentation modes provided.
+  * pname:pPresentModes is a list of presentation modes with
+    pname:presentModeCount entries
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainPresentModesCreateInfoEXT-None-07762]]
+    Each entry in pPresentModes must: be one of the elink:VkPresentModeKHR
+    values returned by fname:vkGetPhysicalDeviceSurfacePresentModesKHR for
+    the surface
+  * [[VUID-VkSwapchainPresentModesCreateInfoEXT-pPresentModes-07763]]
+    The entries in pPresentModes must: be a subset of the present modes
+    returned in
+    slink:VkSurfacePresentModeCompatibilityEXT::pname:pPresentModes, given
+    slink:VkSwapchainCreateInfoKHR::pname:presentMode in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentModesCreateInfoEXT-presentMode-07764]]
+    slink:VkSwapchainCreateInfoKHR::pname:presentMode must: be included in
+    pname:pPresentModes
+****
+
+include::{generated}/validity/structs/VkSwapchainPresentModesCreateInfoEXT.adoc[]
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentScalingCreateInfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentScalingCreateInfo.adoc
new file mode 100644
index 0000000..124684d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_swapchain_maintenance1/SwapchainPresentScalingCreateInfo.adoc
@@ -0,0 +1,105 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkSwapchainPresentScalingCreateInfoEXT',desc='Scaling behavior when presenting to the surface',type='structs']
+--
+When an application presents a swapchain image with dimensions different
+than those of the target surface, different behavior is possible on
+different platforms per their respective specifications:
+
+  * Presentation fails and ename:VK_ERROR_OUT_OF_DATE_KHR is returned
+  * Scaling is done and ename:VK_SUCCESS or ename:VK_SUBOPTIMAL_KHR is
+    returned
+  * Unspecified scaling using an arbitrary combination of stretching,
+    centering and/or clipping.
+
+Applications can: define specific behavior when creating a swapchain by
+including the sname:VkSwapchainPresentScalingCreateInfoEXT structure in the
+pname:pNext chain of the slink:VkSwapchainCreateInfoKHR structure.
+
+The sname:VkSwapchainPresentScalingCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainPresentScalingCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:scalingBehavior is `0` or the scaling method to use when the
+    dimensions of the surface and swapchain images differ.
+  * pname:presentGravityX is `0` or the x-axis direction in which swapchain
+    image pixels gravitate relative to the surface when
+    pname:scalingBehavior does not result in a one-to-one pixel mapping
+    between the scaled swapchain image and the surface.
+  * pname:presentGravityY is `0` or the y-axis direction in which swapchain
+    image pixels gravitate relative to the surface when
+    pname:scalingBehavior does not result in a one-to-one pixel mapping
+    between the scaled swapchain image and the surface.
+
+If pname:scalingBehavior is `0`, the result of presenting a swapchain image
+with dimensions that do not match the surface dimensions is implementation
+and platform-dependent.
+If pname:presentGravityX or pname:presentGravityY are `0`, the presentation
+gravity must: match that defined by the native platform surface on platforms
+which define surface gravity.
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07765]]
+    If pname:presentGravityX is `0`, pname:presentGravityY must: be `0`
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07766]]
+    If pname:presentGravityX is not `0`, pname:presentGravityY must: not be
+    `0`
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-scalingBehavior-07767]]
+    pname:scalingBehavior must: not have more than one bit set
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07768]]
+    pname:presentGravityX must: not have more than one bit set
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07769]]
+    pname:presentGravityY must: not have more than one bit set
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-scalingBehavior-07770]]
+    pname:scalingBehavior must: be a valid scaling method for the surface as
+    returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentScaling,
+    given slink:VkSwapchainCreateInfoKHR::pname:presentMode in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-scalingBehavior-07771]]
+    If the swapchain is created with
+    slink:VkSwapchainPresentModesCreateInfoEXT, pname:scalingBehavior must:
+    be a valid scaling method for the surface as returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentScaling,
+    given each present mode in
+    slink:VkSwapchainPresentModesCreateInfoEXT::pname:pPresentModes in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07772]]
+    pname:presentGravityX must: be a valid x-axis present gravity for the
+    surface as returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentGravityX,
+    given slink:VkSwapchainCreateInfoKHR::pname:presentMode in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityX-07773]]
+    If the swapchain is created with
+    slink:VkSwapchainPresentModesCreateInfoEXT, pname:presentGravityX must:
+    be a valid x-axis present gravity for the surface as returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentGravityX,
+    given each present mode in
+    slink:VkSwapchainPresentModesCreateInfoEXT::pname:pPresentModes in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07774]]
+    pname:presentGravityY must: be a valid y-axis present gravity for the
+    surface as returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentGravityY,
+    given slink:VkSwapchainCreateInfoKHR::pname:presentMode in
+    slink:VkSurfacePresentModeEXT
+  * [[VUID-VkSwapchainPresentScalingCreateInfoEXT-presentGravityY-07775]]
+    If the swapchain is created with
+    slink:VkSwapchainPresentModesCreateInfoEXT, pname:presentGravityY must:
+    be a valid y-axis present gravity for the surface as returned in
+    slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentGravityY,
+    given each present mode in
+    slink:VkSwapchainPresentModesCreateInfoEXT::pname:pPresentModes in
+    slink:VkSurfacePresentModeEXT
+****
+
+include::{generated}/validity/structs/VkSwapchainPresentScalingCreateInfoEXT.adoc[]
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_cache/shader-module-validation-cache.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_cache/shader-module-validation-cache.adoc
new file mode 100644
index 0000000..41f1b37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_cache/shader-module-validation-cache.adoc
@@ -0,0 +1,25 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkShaderModuleValidationCacheCreateInfoEXT',desc='Specify validation cache to use during shader module creation',type='structs']
+--
+To use a slink:VkValidationCacheEXT to cache shader validation results, add
+a slink:VkShaderModuleValidationCacheCreateInfoEXT structure to the
+pname:pNext chain of the slink:VkShaderModuleCreateInfo structure,
+specifying the cache object to use.
+
+The sname:VkShaderModuleValidationCacheCreateInfoEXT struct is defined as:
+
+include::{generated}/api/structs/VkShaderModuleValidationCacheCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:validationCache is the validation cache object from which the
+    results of prior validation attempts will be written, and to which new
+    validation results for this slink:VkShaderModule will be written (if not
+    already present).
+
+include::{generated}/validity/structs/VkShaderModuleValidationCacheCreateInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_features.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_features.adoc
new file mode 100644
index 0000000..ccfb77c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_features.adoc
@@ -0,0 +1,137 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkValidationFeaturesEXT',desc='Specify validation features to enable or disable for a Vulkan instance',type='structs']
+--
+When creating a Vulkan instance for which you wish to enable or disable
+specific validation features, add a slink:VkValidationFeaturesEXT structure
+to the pname:pNext chain of the slink:VkInstanceCreateInfo structure,
+specifying the features to be enabled or disabled.
+
+include::{generated}/api/structs/VkValidationFeaturesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:enabledValidationFeatureCount is the number of features to enable.
+  * pname:pEnabledValidationFeatures is a pointer to an array of
+    elink:VkValidationFeatureEnableEXT values specifying the validation
+    features to be enabled.
+  * pname:disabledValidationFeatureCount is the number of features to
+    disable.
+  * pname:pDisabledValidationFeatures is a pointer to an array of
+    elink:VkValidationFeatureDisableEXT values specifying the validation
+    features to be disabled.
+
+.Valid Usage
+****
+  * [[VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02967]]
+    If the pname:pEnabledValidationFeatures array contains
+    ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
+    then it must: also contain
+    ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
+  * [[VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02968]]
+    If the pname:pEnabledValidationFeatures array contains
+    ename:VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, then it must: not
+    contain ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT
+****
+
+include::{generated}/validity/structs/VkValidationFeaturesEXT.adoc[]
+--
+
+[open,refpage='VkValidationFeatureEnableEXT',desc='Specify validation features to enable',type='enums']
+--
+Possible values of elements of the
+slink:VkValidationFeaturesEXT::pname:pEnabledValidationFeatures array,
+specifying validation features to be enabled, are:
+
+include::{generated}/api/enums/VkValidationFeatureEnableEXT.adoc[]
+
+  * ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT specifies that
+    GPU-assisted validation is enabled.
+    Activating this feature instruments shader programs to generate
+    additional diagnostic data.
+    This feature is disabled by default.
+  * ename:VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT
+    specifies that the validation layers reserve a descriptor set binding
+    slot for their own use.
+    The layer reports a value for
+    slink:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets that is one
+    less than the value reported by the device.
+    If the device supports the binding of only one descriptor set, the
+    validation layer does not perform GPU-assisted validation.
+    This feature is disabled by default.
+  * ename:VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT specifies that
+    Vulkan best-practices validation is enabled.
+    Activating this feature enables the output of warnings related to common
+    misuse of the API, but which are not explicitly prohibited by the
+    specification.
+    This feature is disabled by default.
+  * ename:VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT specifies that the
+    layers will process code:debugPrintfEXT operations in shaders and send
+    the resulting output to the debug callback.
+    This feature is disabled by default.
+  * ename:VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT
+    specifies that Vulkan synchronization validation is enabled.
+    This feature reports resource access conflicts due to missing or
+    incorrect synchronization operations between actions (Draw, Copy,
+    Dispatch, Blit) reading or writing the same regions of memory.
+    This feature is disabled by default.
+--
+
+[open,refpage='VkValidationFeatureDisableEXT',desc='Specify validation features to disable',type='enums']
+--
+Possible values of elements of the
+slink:VkValidationFeaturesEXT::pname:pDisabledValidationFeatures array,
+specifying validation features to be disabled, are:
+
+include::{generated}/api/enums/VkValidationFeatureDisableEXT.adoc[]
+
+  * ename:VK_VALIDATION_FEATURE_DISABLE_ALL_EXT specifies that all
+    validation checks are disabled.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT specifies that shader
+    validation is disabled.
+    This feature is enabled by default.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT specifies that
+    thread safety validation is disabled.
+    This feature is enabled by default.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT specifies that
+    stateless parameter validation is disabled.
+    This feature is enabled by default.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT specifies that
+    object lifetime validation is disabled.
+    This feature is enabled by default.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT specifies that core
+    validation checks are disabled.
+    This feature is enabled by default.
+    If this feature is disabled, the shader validation and GPU-assisted
+    validation features are also disabled.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT specifies that
+    protection against duplicate non-dispatchable object handles is
+    disabled.
+    This feature is enabled by default.
+  * ename:VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT
+    specifies that there will be no caching of shader validation results and
+    every shader will be validated on every application execution.
+    Shader validation caching is enabled by default.
+--
+
+[NOTE]
+.Note
+====
+Disabling checks such as parameter validation and object lifetime validation
+prevents the reporting of error conditions that can cause other validation
+checks to behave incorrectly or crash.
+Some validation checks assume that their inputs are already valid and do not
+always revalidate them.
+====
+
+ifdef::VK_EXT_validation_flags[]
+[NOTE]
+.Note
+====
+The `apiext:VK_EXT_validation_features` extension subsumes all the
+functionality provided in the `apiext:VK_EXT_validation_flags` extension.
+====
+endif::VK_EXT_validation_flags[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_flags.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_flags.adoc
new file mode 100644
index 0000000..6b9c578
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_EXT_validation_flags.adoc
@@ -0,0 +1,37 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkValidationFlagsEXT',desc='Specify validation checks to disable for a Vulkan instance',type='structs']
+--
+When creating a Vulkan instance for which you wish to disable validation
+checks, add a slink:VkValidationFlagsEXT structure to the pname:pNext chain
+of the slink:VkInstanceCreateInfo structure, specifying the checks to be
+disabled.
+
+include::{generated}/api/structs/VkValidationFlagsEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:disabledValidationCheckCount is the number of checks to disable.
+  * pname:pDisabledValidationChecks is a pointer to an array of
+    elink:VkValidationCheckEXT values specifying the validation checks to be
+    disabled.
+
+include::{generated}/validity/structs/VkValidationFlagsEXT.adoc[]
+--
+
+[open,refpage='VkValidationCheckEXT',desc='Specify validation checks to disable',type='enums']
+--
+Possible values of elements of the
+slink:VkValidationFlagsEXT::pname:pDisabledValidationChecks array,
+specifying validation checks to be disabled, are:
+
+include::{generated}/api/enums/VkValidationCheckEXT.adoc[]
+
+  * ename:VK_VALIDATION_CHECK_ALL_EXT specifies that all validation checks
+    are disabled.
+  * ename:VK_VALIDATION_CHECK_SHADERS_EXT specifies that shader validation
+    is disabled.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_external_memory/device_memory.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_external_memory/device_memory.adoc
new file mode 100644
index 0000000..a67d7d4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_external_memory/device_memory.adoc
@@ -0,0 +1,169 @@
+// Copyright (c) 2021 Google Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[fuchsia-external-memory]]
+=== Fuchsia External Memory
+
+On Fuchsia, when allocating memory that may: be imported from another
+device, process or Vulkan instance, add a
+slink:VkImportMemoryZirconHandleInfoFUCHSIA structure to the pname:pNext
+chain of the slink:VkMemoryAllocateInfo structure.
+
+External memory on Fuchsia is imported and exported using VMO handles of
+type code:zx_handle_t.
+VMO handles to external memory are canonically obtained from Fuchsia's
+Sysmem service or from syscalls such as sname:zx_vmo_create().
+VMO handles for import can also be obtained by exporting them from another
+Vulkan instance as described in <<exporting-fuchsia-device-memory,exporting
+fuchsia device memory>>.
+
+Importing VMO handles to the Vulkan instance transfers ownership of the
+handle to the instance from the application.
+The application must: not perform any operations on the handle after
+successful import.
+
+Applications can: import the same underlying memory into multiple instances
+of Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+In all cases, each import operation must: create a distinct
+sname:VkDeviceMemory object.
+
+
+[[importing-fuchsia-external-memory]]
+==== Importing Fuchsia External Memory
+
+[open,refpage='VkImportMemoryZirconHandleInfoFUCHSIA',desc='Structure specifying import parameters for Zircon handle to external memory',type='structs']
+--
+The sname:VkImportMemoryZirconHandleInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryZirconHandleInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of pname:handle.
+  * pname:handle is a code:zx_handle_t (Zircon) handle to the external
+    memory.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handleType-04771]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
+  * [[VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handle-04772]]
+    pname:handle must be a valid VMO handle
+****
+
+include::{generated}/validity/structs/VkImportMemoryZirconHandleInfoFUCHSIA.adoc[]
+--
+
+[open,refpage='vkGetMemoryZirconHandlePropertiesFUCHSIA',desc='Get a Zircon handle properties for an external memory object',type='protos']
+--
+To obtain the memoryTypeIndex for the slink:VkMemoryAllocateInfo structure,
+call fname:vkGetMemoryZirconHandlePropertiesFUCHSIA:
+
+include::{generated}/api/protos/vkGetMemoryZirconHandlePropertiesFUCHSIA.adoc[]
+
+  * pname:device is the slink:VkDevice.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of pname:zirconHandle
+  * pname:zirconHandle is a code:zx_handle_t (Zircon) handle to the external
+    resource.
+  * pname:pMemoryZirconHandleProperties is a pointer to a
+    slink:VkMemoryZirconHandlePropertiesFUCHSIA structure in which the
+    result will be stored.
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-handleType-04773]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
+  * [[VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-zirconHandle-04774]]
+    pname:zirconHandle must reference a valid VMO
+****
+
+include::{generated}/validity/protos/vkGetMemoryZirconHandlePropertiesFUCHSIA.adoc[]
+--
+
+[open,refpage='VkMemoryZirconHandlePropertiesFUCHSIA',desc='Structure specifying Zircon handle compatible external memory',type='structs']
+--
+The sname:VkMemoryZirconHandlePropertiesFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkMemoryZirconHandlePropertiesFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryTypeBits a bitmask containing one bit set for every memory
+    type which the specified handle can be imported as.
+
+include::{generated}/validity/structs/VkMemoryZirconHandlePropertiesFUCHSIA.adoc[]
+--
+
+With pname:pMemoryZirconHandleProperties now successfully populated by
+flink:vkGetMemoryZirconHandlePropertiesFUCHSIA, assign the
+slink:VkMemoryAllocateInfo memoryTypeIndex field to a memory type which has
+a bit set in the slink:VkMemoryZirconHandlePropertiesFUCHSIA memoryTypeBits
+field.
+
+
+[[exporting-fuchsia-device-memory]]
+==== Exporting Fuchsia Device Memory
+Similar to importing, exporting a VMO handle from Vulkan transfers ownership
+of the handle from the Vulkan instance to the application.
+The application is responsible for closing the handle with
+code:zx_handle_close() when it is no longer in use.
+
+
+[open,refpage='vkGetMemoryZirconHandleFUCHSIA',desc='Get a Zircon handle for an external memory object',type='protos']
+--
+To export device memory as a Zircon handle that can be used by another
+instance, device, or process, the handle to the slink:VkDeviceMemory must be
+retrieved using flink:vkGetMemoryZirconHandleFUCHSIA:
+
+include::{generated}/api/protos/vkGetMemoryZirconHandleFUCHSIA.adoc[]
+
+  * pname:device is the slink:VkDevice.
+  * pname:pGetZirconHandleInfo is a pointer to a
+    slink:VkMemoryGetZirconHandleInfoFUCHSIA structure.
+  * pname:pZirconHandle is a pointer to a code:zx_handle_t which holds the
+    resulting Zircon handle.
+
+include::{generated}/validity/protos/vkGetMemoryZirconHandleFUCHSIA.adoc[]
+--
+
+[open,refpage='VkMemoryGetZirconHandleInfoFUCHSIA',desc='Structure specifying export parameters for Zircon handle to device memory',type='structs']
+--
+sname:VkMemoryGetZirconHandleInfoFUCHSIA is defined as:
+
+include::{generated}/api/structs/VkMemoryGetZirconHandleInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory the slink:VkDeviceMemory being exported.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of the handle pointed to by
+    flink:vkGetMemoryZirconHandleFUCHSIA::pname:pZirconHandle.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04775]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
+  * [[VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04776]]
+    pname:handleType must: have been included in the sname:handleTypes field
+    of the sname:VkExportMemoryAllocateInfo structure when the external
+    memory was allocated
+****
+
+include::{generated}/validity/structs/VkMemoryGetZirconHandleInfoFUCHSIA.adoc[]
+--
+
+With the result pname:pZirconHandle now obtained, the memory properties for
+the handle can be retrieved using
+flink:vkGetMemoryZirconHandlePropertiesFUCHSIA as documented above
+substituting the dereferenced, retrieved pname:pZirconHandle in for the
+pname:zirconHandle argument.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.adoc
new file mode 100644
index 0000000..6b54d4f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.adoc
@@ -0,0 +1,61 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_imagepipe]]
+=== Fuchsia Platform
+
+[open,refpage='vkCreateImagePipeSurfaceFUCHSIA',desc='Create a slink:VkSurfaceKHR object for a Fuchsia ImagePipe',type='protos']
+--
+:refpage: vkCreateImagePipeSurfaceFUCHSIA
+
+To create a sname:VkSurfaceKHR object for a Fuchsia ImagePipe, call:
+
+include::{generated}/api/protos/vkCreateImagePipeSurfaceFUCHSIA.adoc[]
+
+  * pname:instance is the instance to associate with the surface.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkImagePipeSurfaceCreateInfoFUCHSIA structure containing
+    parameters affecting the creation of the surface object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateImagePipeSurfaceFUCHSIA.adoc[]
+--
+
+[open,refpage='VkImagePipeSurfaceCreateInfoFUCHSIA',desc='Structure specifying parameters of a newly created ImagePipe surface object',type='structs']
+--
+The sname:VkImagePipeSurfaceCreateInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImagePipeSurfaceCreateInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:imagePipeHandle is a code:zx_handle_t referring to the ImagePipe
+    to associate with the surface.
+
+.Valid Usage
+****
+  * [[VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-04863]]
+    pname:imagePipeHandle must: be a valid code:zx_handle_t
+****
+
+include::{generated}/validity/structs/VkImagePipeSurfaceCreateInfoFUCHSIA.adoc[]
+--
+
+On Fuchsia, the surface pname:currentExtent is the special value
+[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#, indicating that the surface size will be
+determined by the extent of a swapchain targeting the surface.
+
+[open,refpage='VkImagePipeSurfaceCreateFlagsFUCHSIA',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImagePipeSurfaceCreateFlagsFUCHSIA.adoc[]
+
+tname:VkImagePipeSurfaceCreateFlagsFUCHSIA is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.adoc
new file mode 100644
index 0000000..af3670a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.adoc
@@ -0,0 +1,11 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_fuchsia]]
+=== Fuchsia Platform
+
+On Fuchsia, all physical devices and queue families must: be capable of
+presentation with any ImagePipe.
+As a result there is no Fuchsia-specific query for these capabilities.
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_frame_token.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_frame_token.adoc
new file mode 100644
index 0000000..69eb2f9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_frame_token.adoc
@@ -0,0 +1,28 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkPresentFrameTokenGGP',desc='The Google Games Platform frame token',type='structs']
+--
+When the `apiext:VK_GGP_frame_token` extension is enabled, a Google Games
+Platform frame token can: be specified when presenting an image to a
+swapchain by adding a sname:VkPresentFrameTokenGGP structure to the
+pname:pNext chain of the sname:VkPresentInfoKHR structure.
+
+The sname:VkPresentFrameTokenGGP structure is defined as:
+
+include::{generated}/api/structs/VkPresentFrameTokenGGP.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:frameToken is the Google Games Platform frame token.
+
+.Valid Usage
+****
+  * [[VUID-VkPresentFrameTokenGGP-frameToken-02680]]
+    pname:frameToken must: be a valid code:GgpFrameToken
+****
+
+include::{generated}/validity/structs/VkPresentFrameTokenGGP.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.adoc
new file mode 100644
index 0000000..6e4db6a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.adoc
@@ -0,0 +1,74 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_streamdescriptor]]
+=== Google Games Platform
+
+[open,refpage='vkCreateStreamDescriptorSurfaceGGP',desc='Create a slink:VkSurfaceKHR object for a Google Games Platform stream',type='protos']
+--
+:refpage: vkCreateStreamDescriptorSurfaceGGP
+
+To create a sname:VkSurfaceKHR object for a Google Games Platform stream
+descriptor, call:
+
+include::{generated}/api/protos/vkCreateStreamDescriptorSurfaceGGP.adoc[]
+
+  * pname:instance is the instance to associate with the surface.
+  * pname:pCreateInfo is a pointer to a
+    sname:VkStreamDescriptorSurfaceCreateInfoGGP structure containing
+    parameters that affect the creation of the surface object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateStreamDescriptorSurfaceGGP.adoc[]
+--
+
+[open,refpage='VkStreamDescriptorSurfaceCreateInfoGGP',desc='Structure specifying parameters of a newly created Google Games Platform stream surface object',type='structs']
+--
+The sname:VkStreamDescriptorSurfaceCreateInfoGGP structure is defined as:
+
+include::{generated}/api/structs/VkStreamDescriptorSurfaceCreateInfoGGP.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:streamDescriptor is a code:GgpStreamDescriptor referring to the
+    GGP stream descriptor to associate with the surface.
+
+.Valid Usage
+****
+  * [[VUID-VkStreamDescriptorSurfaceCreateInfoGGP-streamDescriptor-02681]]
+    pname:streamDescriptor must: be a valid code:GgpStreamDescriptor
+****
+
+include::{generated}/validity/structs/VkStreamDescriptorSurfaceCreateInfoGGP.adoc[]
+--
+
+On Google Games Platform, the surface extents are dynamic.
+The pname:minImageExtent will never be greater than 1080p and the
+pname:maxImageExtent will never be less than 1080p.
+The pname:currentExtent will reflect the current optimal resolution.
+
+ifdef::VK_KHR_swapchain[]
+Applications are expected to choose an appropriate size for the swapchain's
+pname:imageExtent, within the bounds of the surface.
+Using the surface's pname:currentExtent will offer the best performance and
+quality.
+When a swapchain's pname:imageExtent does not match the surface's
+pname:currentExtent, the presentable images are scaled to the surface's
+dimensions during presentation if possible and ename:VK_SUBOPTIMAL_KHR is
+returned, otherwise presentation fails with ename:VK_ERROR_OUT_OF_DATE_KHR.
+endif::VK_KHR_swapchain[]
+
+[open,refpage='VkStreamDescriptorSurfaceCreateFlagsGGP',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkStreamDescriptorSurfaceCreateFlagsGGP.adoc[]
+
+tname:VkStreamDescriptorSurfaceCreateFlagsGGP is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.adoc
new file mode 100644
index 0000000..7f81fc0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.adoc
@@ -0,0 +1,12 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_streamdescriptor]]
+=== Google Games Platform
+
+On Google Games Platform, all physical devices and queue families with the
+ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT capabilities must:
+be capable of presentation with any Google Games Platform stream descriptor.
+As a result, there is no query specific to Google Games Platform for these
+capabilities.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.adoc
new file mode 100644
index 0000000..120a2a4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.adoc
@@ -0,0 +1,69 @@
+// Copyright (c) 2018-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[open,refpage='VkPresentTimesInfoGOOGLE',desc='The earliest time each image should be presented',type='structs']
+--
+When the `apiext:VK_GOOGLE_display_timing` extension is enabled, additional
+fields can: be specified that allow an application to specify the earliest
+time that an image should be displayed.
+This allows an application to avoid stutter that is caused by an image being
+displayed earlier than planned.
+Such stuttering can occur with both fixed and variable-refresh-rate
+displays, because stuttering occurs when the geometry is not correctly
+positioned for when the image is displayed.
+An application can: instruct the presentation engine that an image should
+not be displayed earlier than a specified time by adding a
+sname:VkPresentTimesInfoGOOGLE structure to the pname:pNext chain of the
+sname:VkPresentInfoKHR structure.
+
+The sname:VkPresentTimesInfoGOOGLE structure is defined as:
+
+include::{generated}/api/structs/VkPresentTimesInfoGOOGLE.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is the number of swapchains being presented to by
+    this command.
+  * pname:pTimes is `NULL` or a pointer to an array of
+    sname:VkPresentTimeGOOGLE elements with pname:swapchainCount entries.
+    If not `NULL`, each element of pname:pTimes contains the earliest time
+    to present the image corresponding to the entry in the
+    sname:VkPresentInfoKHR::pname:pImageIndices array.
+
+.Valid Usage
+****
+  * [[VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247]]
+    pname:swapchainCount must: be the same value as
+    sname:VkPresentInfoKHR::pname:swapchainCount, where
+    sname:VkPresentInfoKHR is included in the pname:pNext chain of this
+    sname:VkPresentTimesInfoGOOGLE structure
+****
+
+include::{generated}/validity/structs/VkPresentTimesInfoGOOGLE.adoc[]
+--
+
+[open,refpage='VkPresentTimeGOOGLE',desc='The earliest time image should be presented',type='structs']
+--
+The sname:VkPresentTimeGOOGLE structure is defined as:
+
+include::{generated}/api/structs/VkPresentTimeGOOGLE.adoc[]
+
+  * pname:presentID is an application-provided identification value, that
+    can: be used with the results of
+    flink:vkGetPastPresentationTimingGOOGLE, in order to uniquely identify
+    this present.
+    In order to be useful to the application, it should: be unique within
+    some period of time that is meaningful to the application.
+  * pname:desiredPresentTime specifies that the image given should: not be
+    displayed to the user any earlier than this time.
+    pname:desiredPresentTime is a time in nanoseconds, relative to a
+    monotonically-increasing clock (e.g. `CLOCK_MONOTONIC` (see
+    clock_gettime(2)) on Android and Linux).
+    A value of zero specifies that the presentation engine may: display the
+    image at any time.
+    This is useful when the application desires to provide pname:presentID,
+    but does not need a specific pname:desiredPresentTime.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/queries.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/queries.adoc
new file mode 100644
index 0000000..f201c74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_GOOGLE_display_timing/queries.adoc
@@ -0,0 +1,260 @@
+// Copyright (c) 2016-2018 Google LLC.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+== Display Timing Queries
+
+Traditional game and real-time-animation applications frequently use
+ename:VK_PRESENT_MODE_FIFO_KHR so that presentable images are updated during
+the vertical blanking period of a given refresh cycle (RC) of the
+presentation engine's display.
+This avoids the visual anomaly known as tearing.
+
+However, synchronizing the presentation of images with the RC does not
+prevent all forms of visual anomalies.
+Stuttering occurs when the geometry for each presentable image is not
+accurately positioned for when that image will be displayed.
+The geometry may appear to move too little some RCs, and too much for
+others.
+Sometimes the animation appears to freeze, when the same image is used for
+more than one RC.
+
+In order to minimize stuttering, an application needs to correctly position
+their geometry for when the presentable image will be displayed to the user.
+To accomplish this, applications need various timing information about the
+presentation engine's display.
+They need to know when presentable images were actually presented, and when
+they could have been presented.
+Applications also need to tell the presentation engine to display an image
+no sooner than a given time.
+This can allow the application's animation to look smooth to the user, with
+no stuttering.
+The `apiext:VK_GOOGLE_display_timing` extension allows an application to
+satisfy these needs.
+
+The presentation engine's display typically refreshes the pixels that are
+displayed to the user on a periodic basis.
+The period may be fixed or variable.
+In many cases, the presentation engine is associated with fixed refresh rate
+(FRR) display technology, with a fixed refresh rate (RR, e.g. 60Hz).
+In some cases, the presentation engine is associated with variable refresh
+rate (VRR) display technology, where each refresh cycle (RC) can vary in
+length.
+This extension treats VRR displays as if they are FRR.
+
+[open,refpage='vkGetRefreshCycleDurationGOOGLE',desc='Obtain the RC duration of the PE\'s display',type='protos']
+--
+To query the duration of a refresh cycle (RC) for the presentation engine's
+display, call:
+
+include::{generated}/api/protos/vkGetRefreshCycleDurationGOOGLE.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to obtain the refresh duration for.
+  * pname:pDisplayTimingProperties is a pointer to a
+    sname:VkRefreshCycleDurationGOOGLE structure.
+
+include::{generated}/validity/protos/vkGetRefreshCycleDurationGOOGLE.adoc[]
+--
+
+[open,refpage='VkRefreshCycleDurationGOOGLE',desc='Structure containing the RC duration of a display',type='structs']
+--
+The sname:VkRefreshCycleDurationGOOGLE structure is defined as:
+
+include::{generated}/api/structs/VkRefreshCycleDurationGOOGLE.adoc[]
+
+  * pname:refreshDuration is the number of nanoseconds from the start of one
+    refresh cycle to the next.
+
+include::{generated}/validity/structs/VkRefreshCycleDurationGOOGLE.adoc[]
+--
+
+[NOTE]
+.Note
+====
+The rate at which an application renders and presents new images is known as
+the image present rate (IPR, aka frame rate).
+The inverse of IPR, or the duration between each image present, is the image
+present duration (IPD).
+In order to provide a smooth, stutter-free animation, an application will
+want its IPD to be a multiple of pname:refreshDuration.
+For example, if a display has a 60Hz refresh rate, pname:refreshDuration
+will be a value in nanoseconds that is approximately equal to 16.67ms.
+In such a case, an application will want an IPD of 16.67ms (1X multiplier of
+pname:refreshDuration), or 33.33ms (2X multiplier of pname:refreshDuration),
+or 50.0ms (3X multiplier of pname:refreshDuration), etc.
+
+In order to determine a target IPD for a display (i.e. a multiple of
+pname:refreshDuration), an application needs to determine when its images
+are actually displayed.
+Suppose an application has an initial target IPD of 16.67ms (1X multiplier
+of pname:refreshDuration).
+It will therefore position the geometry of a new image 16.67ms later than
+the previous image.
+But suppose this application is running on slower hardware, so that it
+actually takes 20ms to render each new image.
+This will create visual anomalies, because the images will not be displayed
+to the user every 16.67ms, nor every 20ms.
+In this case, it is better for the application to adjust its target IPD to
+33.33ms (i.e. a 2X multiplier of pname:refreshDuration), and tell the
+presentation engine to not present images any sooner than every 33.33ms.
+This will allow the geometry to be correctly positioned for each presentable
+image.
+
+Adjustments to an application's IPD may be needed because different views of
+an application's geometry can take different amounts of time to render.
+For example, looking at the sky may take less time to render than looking at
+multiple, complex items in a room.
+In general, it is good to not frequently change IPD, as that can cause
+visual anomalies.
+Adjustments to a larger IPD because of late images should happen quickly,
+but adjustments to a smaller IPD should only happen if the
+pname:actualPresentTime and pname:earliestPresentTime members of the
+slink:VkPastPresentationTimingGOOGLE structure are consistently different,
+and if pname:presentMargin is consistently large, over multiple images.
+====
+
+[open,refpage='vkGetPastPresentationTimingGOOGLE',desc='Obtain timing of a previously-presented image',type='protos']
+--
+The implementation will maintain a limited amount of history of timing
+information about previous presents.
+Because of the asynchronous nature of the presentation engine, the timing
+information for a given flink:vkQueuePresentKHR command will become
+available some time later.
+These time values can be asynchronously queried, and will be returned if
+available.
+All time values are in nanoseconds, relative to a monotonically-increasing
+clock (e.g. `CLOCK_MONOTONIC` (see clock_gettime(2)) on Android and Linux).
+
+To asynchronously query the presentation engine, for newly-available timing
+information about one or more previous presents to a given swapchain, call:
+
+include::{generated}/api/protos/vkGetPastPresentationTimingGOOGLE.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to obtain presentation timing
+    information duration for.
+  * pname:pPresentationTimingCount is a pointer to an integer related to the
+    number of sname:VkPastPresentationTimingGOOGLE structures to query, as
+    described below.
+  * pname:pPresentationTimings is either `NULL` or a pointer to an array of
+    sname:VkPastPresentationTimingGOOGLE structures.
+
+If pname:pPresentationTimings is `NULL`, then the number of newly-available
+timing records for the given pname:swapchain is returned in
+pname:pPresentationTimingCount.
+Otherwise, pname:pPresentationTimingCount must: point to a variable set by
+the user to the number of elements in the pname:pPresentationTimings array,
+and on return the variable is overwritten with the number of structures
+actually written to pname:pPresentationTimings.
+If the value of pname:pPresentationTimingCount is less than the number of
+newly-available timing records, at most pname:pPresentationTimingCount
+structures will be written, and ename:VK_INCOMPLETE will be returned instead
+of ename:VK_SUCCESS, to indicate that not all the available timing records
+were returned.
+
+include::{generated}/validity/protos/vkGetPastPresentationTimingGOOGLE.adoc[]
+--
+
+[open,refpage='VkPastPresentationTimingGOOGLE',desc='Structure containing timing information about a previously-presented image',type='structs']
+--
+The sname:VkPastPresentationTimingGOOGLE structure is defined as:
+
+include::{generated}/api/structs/VkPastPresentationTimingGOOGLE.adoc[]
+
+  * pname:presentID is an application-provided value that was given to a
+    previous fname:vkQueuePresentKHR command via
+    slink:VkPresentTimeGOOGLE::pname:presentID (see below).
+    It can: be used to uniquely identify a previous present with the
+    flink:vkQueuePresentKHR command.
+  * pname:desiredPresentTime is an application-provided value that was given
+    to a previous flink:vkQueuePresentKHR command via
+    slink:VkPresentTimeGOOGLE::pname:desiredPresentTime.
+    If non-zero, it was used by the application to indicate that an image
+    not be presented any sooner than pname:desiredPresentTime.
+  * pname:actualPresentTime is the time when the image of the
+    pname:swapchain was actually displayed.
+  * pname:earliestPresentTime is the time when the image of the
+    pname:swapchain could have been displayed.
+    This may: differ from pname:actualPresentTime if the application
+    requested that the image be presented no sooner than
+    slink:VkPresentTimeGOOGLE::pname:desiredPresentTime.
+  * pname:presentMargin is an indication of how early the
+    fname:vkQueuePresentKHR command was processed compared to how soon it
+    needed to be processed, and still be presented at
+    pname:earliestPresentTime.
+
+The results for a given pname:swapchain and pname:presentID are only
+returned once from fname:vkGetPastPresentationTimingGOOGLE.
+
+The application can: use the sname:VkPastPresentationTimingGOOGLE values to
+occasionally adjust its timing.
+For example, if pname:actualPresentTime is later than expected (e.g. one
+pname:refreshDuration late), the application may increase its target IPD to
+a higher multiple of pname:refreshDuration (e.g. decrease its frame rate
+from 60Hz to 30Hz).
+If pname:actualPresentTime and pname:earliestPresentTime are consistently
+different, and if pname:presentMargin is consistently large enough, the
+application may decrease its target IPD to a smaller multiple of
+pname:refreshDuration (e.g. increase its frame rate from 30Hz to 60Hz).
+If pname:actualPresentTime and pname:earliestPresentTime are same, and if
+pname:presentMargin is consistently high, the application may delay the
+start of its input-render-present loop in order to decrease the latency
+between user input and the corresponding present (always leaving some margin
+in case a new image takes longer to render than the previous image).
+An application that desires its target IPD to always be the same as
+pname:refreshDuration, can also adjust features until
+pname:actualPresentTime is never late and pname:presentMargin is
+satisfactory.
+--
+
+The full `apiext:VK_GOOGLE_display_timing` extension semantics are described
+for swapchains created with ename:VK_PRESENT_MODE_FIFO_KHR.
+For example, non-zero values of
+sname:VkPresentTimeGOOGLE::pname:desiredPresentTime must: be honored, and
+fname:vkGetPastPresentationTimingGOOGLE should: return a
+sname:VkPastPresentationTimingGOOGLE structure with valid values for all
+images presented with fname:vkQueuePresentKHR.
+The semantics for other present modes are as follows:
+
+  * ename:VK_PRESENT_MODE_IMMEDIATE_KHR.
+    The presentation engine may: ignore non-zero values of
+    sname:VkPresentTimeGOOGLE::pname:desiredPresentTime in favor of
+    presenting immediately.
+    The value of
+    sname:VkPastPresentationTimingGOOGLE::pname:earliestPresentTime must: be
+    the same as
+    sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime, which
+    should: be when the presentation engine displayed the image.
+  * ename:VK_PRESENT_MODE_MAILBOX_KHR.
+    The intention of using this present mode with this extension is to
+    handle cases where an image is presented late, and the next image is
+    presented soon enough to replace it at the next vertical blanking
+    period.
+    For images that are displayed to the user, the value of
+    sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime must: be
+    when the image was displayed.
+    For images that are not displayed to the user,
+    fname:vkGetPastPresentationTimingGOOGLE may: not return a
+    sname:VkPastPresentationTimingGOOGLE structure, or it may: return a
+    sname:VkPastPresentationTimingGOOGLE structure with the value of zero
+    for both sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime
+    and sname:VkPastPresentationTimingGOOGLE::pname:earliestPresentTime.
+    It is possible that an application can: submit images with
+    sname:VkPresentTimeGOOGLE::pname:desiredPresentTime values such that new
+    images may: not be displayed.
+    For example, if sname:VkPresentTimeGOOGLE::pname:desiredPresentTime is
+    far enough in the future that an image is not presented before
+    fname:vkQueuePresentKHR is called to present another image, the first
+    image will not be displayed to the user.
+    If the application continues to do that, the presentation may: not
+    display new images.
+  * ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR.
+    For images that are presented in time to be displayed at the next
+    vertical blanking period, the semantics are identical as for
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR.
+    For images that are presented late, and are displayed after the start of
+    the vertical blanking period (i.e. with tearing), the values of
+    sname:VkPastPresentationTimingGOOGLE may: be treated as if the image was
+    displayed at the start of the vertical blanking period, or may: be
+    treated the same as for ename:VK_PRESENT_MODE_IMMEDIATE_KHR.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/clusterculling.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/clusterculling.adoc
new file mode 100644
index 0000000..59255e0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/clusterculling.adoc
@@ -0,0 +1,124 @@
+// Copyright (c) 2020-2024 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[cluster-culling]]
+= Cluster Culling Shading
+
+This shader type has an execution environment similar to that of a compute
+shader, where a collection of shader invocations form a workgroup and
+cooperate to perform coarse level geometry culling and LOD selection.
+A shader invocation can emit a set of built-in output variables via a new
+built-in function.
+The cluster culling shader organizes these emitted variables into a drawing
+command used by the subsequent rendering pipeline.
+
+
+[[cluster-culling-input]]
+== Cluster Culling Shader Input
+
+The only inputs available to the cluster culling shader are variables
+identifying the specific workgroup and invocation.
+
+
+[[cluster-culling-output]]
+== Cluster Culling Shader Output
+
+If a cluster survives after culling in a cluster culling shader invocation,
+a drawing command to draw this cluster should be emitted by this shader
+invocation for further rendering processing.
+There are two types of drawing command, indexed mode and non-indexed mode.
+Both type of drawing commands consist of a set of built-in output variables
+which have a similar definition to slink:VkDrawIndexedIndirectCommand and
+slink:VkDrawIndirectCommand members.
+
+Cluster culling shaders have the following built-in output variables:
+
+  * <<interfaces-builtin-variables,built-in variable>> code:IndexCountHUAWEI
+    is the number of vertices to draw.
+  * <<interfaces-builtin-variables,built-in variable>>
+    code:VertexCountHUAWEI is the number of vertices to draw.
+  * <<interfaces-builtin-variables,built-in variable>>
+    code:InstanceCountHUAWEI is the number of instances to draw.
+  * <<interfaces-builtin-variables,built-in variable>> code:FirstIndexHUAWEI
+    is the base index within the index buffer.
+  * <<interfaces-builtin-variables,built-in variable>>
+    code:FirstVertexHUAWEI is the index of the first vertex to draw
+  * <<interfaces-builtin-variables,built-in variable>>
+    code:VertexOffsetHUAWEI is the value added to the vertex index before
+    indexing into the vertex buffer.
+  * <<interfaces-builtin-variables,built-in variable>>
+    code:FirstInstanceHUAWEI is the instance ID of the first instance to
+    draw.
+  * <<interfaces-builtin-variables,built-in variable>> code:ClusterIDHUAWEI
+    is the index of cluster being rendered by this drawing command.
+    When cluster culling shader is enabled, code:ClusterIDHUAWEI will
+    replace code:gl_DrawID pass to vertex shader.
+
+
+[[cluster-culling-cluster-ordering]]
+== Cluster Culling Shader Cluster Ordering
+
+  * When a cluster culling shader is used, all output clusters generated by
+    code:DispatchClusterHUAWEI() in a given workgroup are passed to
+    subsequent pipeline stage before any cluster generated from subsequent
+    workgroup.
+  * In a workgroup, the order of output clusters generated by
+    code:DispatchClusterHUAWEI() is specified by the local invocation id,
+    from lower to higher values.
+  * If any cluster culling invocation in the workgroup does not call
+    code:DispatchClusterHUAWEI(), no cluster will be sent to the subsequent
+    rendering pipeline.
+  * Any cluster culling shader invocation may also call
+    code:DispatchClusterHUAWEI() many times as shown below:
+
+[source,c]
+----
+// Cluster Culling Shader sample code:
+        ......
+    DispatchClusterHUAWEI();  // dispatch 0
+        ......
+    DispatchClusterHUAWEI();  // dispatch 1
+        ......
+    DispatchClusterHUAWEI();  // dispatch 2
+        ......
+----
+
+In this case, the output sequence of clusters in a workgroup are specified
+as shown below ( in case of 32 shader invocations in a workgroup):
+
+[source,c]
+----
+1. shader invocation0.dispatch0
+2. shader invocation1.dispatch0,
+            ..........
+32. shader invocation31.dispatch0
+33. shader invocation0.dispatch1
+34. shader invocation1.dispatch1
+            ..........
+64. shader invocation31.dispatch1
+65. shader invocation0.dispatch2
+66. shader invocation1.dispatch2
+            ..........
+96. shader Invocation31.dispatch2
+----
+
+
+[[cluster-culling-primitive-ordering]]
+== Cluster Culling Shader Primitive Ordering
+
+Following guarantees are provided for the relative ordering of primitives
+produced by a cluster culling shader, as they pertain to
+<<drawing-primitive-order,primitive order>>.
+
+  * Limited guarantees are provided for the relative ordering of primitives
+    produced by a cluster culling shader, as they pertain to primitive
+    order.
+  * The order of primitives in a given cluster is specified by the content
+    of
+  ** code:DispatchClusterHUAWEI() with indexed output built-in variables,
+     vertices sourced from a lower index buffer addresses to higher
+     addresses.
+  ** code:DispatchClusterHUAWEI() with non-indexed output built-in
+     variables, from vertices with a lower numbered vertexIndex to a higher
+     numbered vertexIndex.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/drawing.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/drawing.adoc
new file mode 100644
index 0000000..59c93d9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_HUAWEI_cluster_culling_shader/drawing.adoc
@@ -0,0 +1,105 @@
+// Copyright (c) 2020-2023 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[drawing-cluster-culling-shading]]
+== Programmable Cluster Culling Shading
+
+In this drawing approach, cluster are generated by the cluster culling
+shader stage.
+It operates similarly to <<dispatch, dispatching compute>> as the shaders
+make use of workgroups.
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[open,refpage='vkCmdDrawClusterHUAWEI',desc='Draw cluster culling work items',type='protos']
+--
+:refpage: vkCmdDrawClusterHUAWEI
+
+To record a cluster culling shader drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawClusterHUAWEI.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:groupCountX is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:groupCountY is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
+    dimension.
+
+When the command is executed,a global workgroup consisting of
+groupCountX*groupCountY*groupCountZ local workgroup is assembled.
+Note that the cluster culling shader pipeline only accepts
+fname:vkCmdDrawClusterHUAWEI and flink:vkCmdDrawClusterIndirectHUAWEI as
+drawing commands.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdDrawClusterHUAWEI-None-07819]]
+    The pname:pipelineStatistics member used to create any active
+    <<queries-pipestats, Pipeline Statistics Query>> must: not contain
+    ename:VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT, or
+    ename:VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdDrawClusterHUAWEI-groupCountX-07820]]
+    pname:groupCountX must: be less than or equal to
+    sname:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::pname:maxWorkGroupCount[0]
+  * [[VUID-vkCmdDrawClusterHUAWEI-groupCountY-07821]]
+    pname:groupCountY must: be less than or equal to
+    sname:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::pname:maxWorkGroupCount[1]
+  * [[VUID-vkCmdDrawClusterHUAWEI-groupCountZ-07822]]
+    pname:groupCountZ must: be less than or equal to
+    sname:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::pname:maxWorkGroupCount[2]
+  * [[VUID-vkCmdDrawClusterHUAWEI-ClusterCullingHUAWEI-07823]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:ClusterCullingHUAWEI
+    {ExecutionModel}.
+****
+
+include::{generated}/validity/protos/vkCmdDrawClusterHUAWEI.adoc[]
+--
+
+[open,refpage='vkCmdDrawClusterIndirectHUAWEI',desc='Issue an indirect cluster culling draw into a command buffer',type='protos']
+--
+:refpage: vkCmdDrawClusterIndirectHUAWEI
+
+To record an indirect cluster culling drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawClusterIndirectHUAWEI.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+
+fname:vkCmdDrawClusterIndirectHUAWEI behaves similarly to
+flink:vkCmdDrawClusterHUAWEI except that the parameters are read by the
+device from a buffer during execution.
+The parameters of the dispatch are encoded in a
+slink:VkDispatchIndirectCommand structure taken from buffer starting at
+offset.Note the cluster culling shader pipeline only accepts
+flink:vkCmdDrawClusterHUAWEI and fname:vkCmdDrawClusterIndirectHUAWEI as
+drawing commands.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.adoc[]
+  * [[VUID-vkCmdDrawClusterIndirectHUAWEI-ClusterCullingHUAWEI-07824]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:ClusterCullingHUAWEI
+    {ExecutionModel}.
+  * [[VUID-vkCmdDrawClusterIndirectHUAWEI-offset-07918]]
+    pname:offset must: be a multiple of
+    slink:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::pname:indirectBufferOffsetAlignment
+****
+
+include::{generated}/validity/protos/vkCmdDrawClusterIndirectHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_INTEL_performance_query/queries.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_INTEL_performance_query/queries.adoc
new file mode 100644
index 0000000..2781dc7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_INTEL_performance_query/queries.adoc
@@ -0,0 +1,380 @@
+// Copyright (c) 2018-2020 Intel Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::VK_INTEL_performance_query[]
+[[queries-performance-intel]]
+== Intel Performance Queries
+
+Intel performance queries allow an application to capture performance data
+for a set of commands.
+Performance queries are used in a similar way than other types of queries.
+A main difference with existing queries is that the resulting data should be
+handed over to a library capable to produce human readable results rather
+than being read directly by an application.
+
+[open,refpage='vkInitializePerformanceApiINTEL',desc='Initialize a device for performance queries',type='protos']
+--
+Prior to creating a performance query pool, initialize the device for
+performance queries with the call:
+
+include::{generated}/api/protos/vkInitializePerformanceApiINTEL.adoc[]
+
+  * pname:device is the logical device used for the queries.
+  * pname:pInitializeInfo is a pointer to a
+    slink:VkInitializePerformanceApiInfoINTEL structure specifying
+    initialization parameters.
+
+include::{generated}/validity/protos/vkInitializePerformanceApiINTEL.adoc[]
+--
+
+[open,refpage='VkInitializePerformanceApiInfoINTEL',desc='Structure specifying parameters of initialize of the device',type='structs']
+--
+The sname:VkInitializePerformanceApiInfoINTEL structure is defined as :
+
+include::{generated}/api/structs/VkInitializePerformanceApiInfoINTEL.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pUserData is a pointer for application data.
+
+include::{generated}/validity/structs/VkInitializePerformanceApiInfoINTEL.adoc[]
+--
+
+[open,refpage='vkUninitializePerformanceApiINTEL',desc='Uninitialize a device for performance queries',type='protos']
+--
+Once performance query operations have completed, uninitialize the device
+for performance queries with the call:
+
+include::{generated}/api/protos/vkUninitializePerformanceApiINTEL.adoc[]
+
+  * pname:device is the logical device used for the queries.
+
+include::{generated}/validity/protos/vkUninitializePerformanceApiINTEL.adoc[]
+--
+
+[open,refpage='vkGetPerformanceParameterINTEL',desc='Query performance capabilities of the device',type='protos']
+--
+Some performance query features of a device can be discovered with the call:
+
+include::{generated}/api/protos/vkGetPerformanceParameterINTEL.adoc[]
+
+  * pname:device is the logical device to query.
+  * pname:parameter is the parameter to query.
+  * pname:pValue is a pointer to a slink:VkPerformanceValueINTEL structure
+    in which the type and value of the parameter are returned.
+
+include::{generated}/validity/protos/vkGetPerformanceParameterINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceParameterTypeINTEL',desc='Parameters that can be queried',type='enums']
+--
+Possible values of flink:vkGetPerformanceParameterINTEL::pname:parameter,
+specifying a performance query feature, are:
+
+include::{generated}/api/enums/VkPerformanceParameterTypeINTEL.adoc[]
+
+  * ename:VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL has a
+    boolean result which tells whether hardware counters can be captured.
+  * ename:VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL has a
+    32 bits integer result which tells how many bits can be written into the
+    sname:VkPerformanceValueINTEL value.
+--
+
+[open,refpage='VkPerformanceValueINTEL',desc='Container for value and types of parameters that can be queried',type='structs']
+--
+The sname:VkPerformanceValueINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceValueINTEL.adoc[]
+
+  * pname:type is a elink:VkPerformanceValueTypeINTEL value specifying the
+    type of the returned data.
+  * pname:data is a slink:VkPerformanceValueDataINTEL union specifying the
+    value of the returned data.
+
+include::{generated}/validity/structs/VkPerformanceValueINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceValueTypeINTEL',desc='Type of the parameters that can be queried',type='enums']
+--
+Possible values of slink:VkPerformanceValueINTEL::pname:type, specifying the
+type of the data returned in slink:VkPerformanceValueINTEL::pname:data, are:
+
+  * ename:VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL specifies that unsigned
+    32-bit integer data is returned in pname:data.value32.
+  * ename:VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL specifies that unsigned
+    64-bit integer data is returned in pname:data.value64.
+  * ename:VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL specifies that
+    floating-point data is returned in pname:data.valueFloat.
+  * ename:VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL specifies that
+    basetype:VkBool32 data is returned in pname:data.valueBool.
+  * ename:VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL specifies that a pointer to
+    a null-terminated UTF-8 string is returned in pname:data.valueString.
+    The pointer is valid for the lifetime of the pname:device parameter
+    passed to flink:vkGetPerformanceParameterINTEL.
+
+include::{generated}/api/enums/VkPerformanceValueTypeINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceValueDataINTEL',desc='Values returned for the parameters',type='structs']
+--
+The sname:VkPerformanceValueDataINTEL union is defined as:
+
+include::{generated}/api/structs/VkPerformanceValueDataINTEL.adoc[]
+
+  * pname:data.value32 represents 32-bit integer data.
+  * pname:data.value64 represents 64-bit integer data.
+  * pname:data.valueFloat represents floating-point data.
+  * pname:data.valueBool represents basetype:VkBool32 data.
+  * pname:data.valueString represents a pointer to a null-terminated UTF-8
+    string.
+
+The correct member of the union is determined by the associated
+elink:VkPerformanceValueTypeINTEL value.
+
+include::{generated}/validity/structs/VkPerformanceValueDataINTEL.adoc[]
+--
+
+[open,refpage='VkQueryPoolPerformanceQueryCreateInfoINTEL',desc='Structure specifying parameters to create a pool of performance queries',type='structs',alias='VkQueryPoolCreateInfoINTEL']
+--
+The sname:VkQueryPoolPerformanceQueryCreateInfoINTEL structure is defined
+as:
+
+include::{generated}/api/structs/VkQueryPoolPerformanceQueryCreateInfoINTEL.adoc[]
+
+include::{generated}/api/structs/VkQueryPoolCreateInfoINTEL.adoc[]
+
+To create a pool for Intel performance queries, set
+slink:VkQueryPoolCreateInfo::pname:queryType to
+ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL and add a
+sname:VkQueryPoolPerformanceQueryCreateInfoINTEL structure to the
+pname:pNext chain of the slink:VkQueryPoolCreateInfo structure.
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:performanceCountersSampling describe how performance queries
+    should be captured.
+
+include::{generated}/validity/structs/VkQueryPoolPerformanceQueryCreateInfoINTEL.adoc[]
+--
+
+[open,refpage='VkQueryPoolSamplingModeINTEL',desc='Enum specifying how performance queries should be captured',type='enums']
+--
+Possible values of
+slink:VkQueryPoolPerformanceQueryCreateInfoINTEL::pname:performanceCountersSampling
+are:
+
+include::{generated}/api/enums/VkQueryPoolSamplingModeINTEL.adoc[]
+
+  * ename:VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL is the default mode in
+    which the application calls flink:vkCmdBeginQuery and
+    flink:vkCmdEndQuery to record performance data.
+--
+
+[open,refpage='vkCmdSetPerformanceMarkerINTEL',desc='Markers',type='protos']
+--
+To help associate query results with a particular point at which an
+application emitted commands, markers can be set into the command buffers
+with the call:
+
+include::{generated}/api/protos/vkCmdSetPerformanceMarkerINTEL.adoc[]
+
+The last marker set onto a command buffer before the end of a query will be
+part of the query result.
+
+include::{generated}/validity/protos/vkCmdSetPerformanceMarkerINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceMarkerInfoINTEL',desc='Structure specifying performance markers',type='structs']
+--
+The sname:VkPerformanceMarkerInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceMarkerInfoINTEL.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:marker is the marker value that will be recorded into the opaque
+    query results.
+
+include::{generated}/validity/structs/VkPerformanceMarkerInfoINTEL.adoc[]
+--
+
+[open,refpage='vkCmdSetPerformanceStreamMarkerINTEL',desc='Markers',type='protos']
+--
+When monitoring the behavior of an application within the dataset generated
+by the entire set of applications running on the system, it is useful to
+identify draw calls within a potentially huge amount of performance data.
+To do so, application can generate stream markers that will be used to trace
+back a particular draw call with a particular performance data item.
+
+include::{generated}/api/protos/vkCmdSetPerformanceStreamMarkerINTEL.adoc[]
+
+include::{generated}/validity/protos/vkCmdSetPerformanceStreamMarkerINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceStreamMarkerInfoINTEL',desc='Structure specifying stream performance markers',type='structs']
+--
+The sname:VkPerformanceStreamMarkerInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceStreamMarkerInfoINTEL.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:marker is the marker value that will be recorded into the reports
+    consumed by an external application.
+
+.Valid Usage
+****
+  * [[VUID-VkPerformanceStreamMarkerInfoINTEL-marker-02735]]
+    The value written by the application into pname:marker must: only used
+    the valid bits as reported by flink:vkGetPerformanceParameterINTEL with
+    the ename:VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL
+****
+
+include::{generated}/validity/structs/VkPerformanceStreamMarkerInfoINTEL.adoc[]
+--
+
+[open,refpage='vkCmdSetPerformanceOverrideINTEL',desc='Performance override settings',type='protos']
+--
+Some applications might want measure the effect of a set of commands with a
+different settings.
+It is possible to override a particular settings using :
+
+include::{generated}/api/protos/vkCmdSetPerformanceOverrideINTEL.adoc[]
+
+  * pname:commandBuffer is the command buffer where the override takes
+    place.
+  * pname:pOverrideInfo is a pointer to a
+    slink:VkPerformanceOverrideInfoINTEL structure selecting the parameter
+    to override.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-02736]]
+    pname:pOverrideInfo must: not be used with a
+    elink:VkPerformanceOverrideTypeINTEL that is not reported available by
+    fname:vkGetPerformanceParameterINTEL
+****
+
+include::{generated}/validity/protos/vkCmdSetPerformanceOverrideINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceOverrideInfoINTEL',desc='Performance override information',type='structs']
+--
+The sname:VkPerformanceOverrideInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceOverrideInfoINTEL.adoc[]
+
+  * pname:type is the particular elink:VkPerformanceOverrideTypeINTEL to
+    set.
+  * pname:enable defines whether the override is enabled.
+  * pname:parameter is a potential required parameter for the override.
+
+include::{generated}/validity/structs/VkPerformanceOverrideInfoINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceOverrideTypeINTEL',desc='Performance override type',type='enums']
+--
+Possible values of slink:VkPerformanceOverrideInfoINTEL::pname:type,
+specifying performance override types, are:
+
+include::{generated}/api/enums/VkPerformanceOverrideTypeINTEL.adoc[]
+
+  * ename:VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL turns all
+    rendering operations into noop.
+  * ename:VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL stalls the
+    stream of commands until all previously emitted commands have completed
+    and all caches been flushed and invalidated.
+--
+
+[open,refpage='VkPerformanceConfigurationINTEL',desc='Device configuration for performance queries',type='handles']
+--
+Before submitting command buffers containing performance queries commands to
+a device queue, the application must acquire and set a performance query
+configuration.
+The configuration can be released once all command buffers containing
+performance query commands are not in a pending state.
+
+include::{generated}/api/handles/VkPerformanceConfigurationINTEL.adoc[]
+--
+
+[open,refpage='vkAcquirePerformanceConfigurationINTEL',desc='Acquire the performance query capability',type='protos']
+--
+To acquire a device performance configuration, call:
+
+include::{generated}/api/protos/vkAcquirePerformanceConfigurationINTEL.adoc[]
+
+  * pname:device is the logical device that the performance query commands
+    will be submitted to.
+  * pname:pAcquireInfo is a pointer to a
+    slink:VkPerformanceConfigurationAcquireInfoINTEL structure, specifying
+    the performance configuration to acquire.
+  * pname:pConfiguration is a pointer to a
+    sname:VkPerformanceConfigurationINTEL handle in which the resulting
+    configuration object is returned.
+
+include::{generated}/validity/protos/vkAcquirePerformanceConfigurationINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceConfigurationAcquireInfoINTEL',desc='Acquire a configuration to capture performance data',type='structs']
+--
+The sname:VkPerformanceConfigurationAcquireInfoINTEL structure is defined
+as:
+
+include::{generated}/api/structs/VkPerformanceConfigurationAcquireInfoINTEL.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is one of the elink:VkPerformanceConfigurationTypeINTEL type
+    of performance configuration that will be acquired.
+
+include::{generated}/validity/structs/VkPerformanceConfigurationAcquireInfoINTEL.adoc[]
+--
+
+[open,refpage='VkPerformanceConfigurationTypeINTEL',desc='Type of performance configuration',type='enums']
+--
+Possible values of
+slink:VkPerformanceConfigurationAcquireInfoINTEL::pname:type, specifying
+performance configuration types, are:
+
+include::{generated}/api/enums/VkPerformanceConfigurationTypeINTEL.adoc[]
+--
+
+[open,refpage='vkQueueSetPerformanceConfigurationINTEL',desc='Set a performance query',type='protos']
+--
+To set a performance configuration, call:
+
+include::{generated}/api/protos/vkQueueSetPerformanceConfigurationINTEL.adoc[]
+
+  * pname:queue is the queue on which the configuration will be used.
+  * pname:configuration is the configuration to use.
+
+include::{generated}/validity/protos/vkQueueSetPerformanceConfigurationINTEL.adoc[]
+--
+
+[open,refpage='vkReleasePerformanceConfigurationINTEL',desc='Release a configuration to capture performance data',type='protos']
+--
+To release a device performance configuration, call:
+
+include::{generated}/api/protos/vkReleasePerformanceConfigurationINTEL.adoc[]
+
+  * pname:device is the device associated to the configuration object to
+    release.
+  * pname:configuration is the configuration object to release.
+
+.Valid Usage
+****
+  * [[VUID-vkReleasePerformanceConfigurationINTEL-configuration-02737]]
+    pname:configuration must: not be released before all command buffers
+    submitted while the configuration was set are in
+    <<commandbuffers-lifecycle, pending state>>
+****
+
+include::{generated}/validity/protos/vkReleasePerformanceConfigurationINTEL.adoc[]
+--
+endif::VK_INTEL_performance_query[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformCreateSurface_android.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformCreateSurface_android.adoc
new file mode 100644
index 0000000..15731a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformCreateSurface_android.adoc
@@ -0,0 +1,93 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_android]]
+=== Android Platform
+
+[open,refpage='vkCreateAndroidSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for an Android native window',type='protos']
+--
+:refpage: vkCreateAndroidSurfaceKHR
+
+To create a sname:VkSurfaceKHR object for an Android native window, call:
+
+include::{generated}/api/protos/vkCreateAndroidSurfaceKHR.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a sname:VkAndroidSurfaceCreateInfoKHR
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+During the lifetime of a surface created using a particular
+basetype:ANativeWindow handle any attempts to create another surface for the
+same basetype:ANativeWindow and any attempts to connect to the same
+basetype:ANativeWindow through other platform mechanisms will fail.
+
+[NOTE]
+.Note
+====
+In particular, only one sname:VkSurfaceKHR can: exist at a time for a given
+window.
+Similarly, a native window cannot: be used by both a sname:VkSurfaceKHR and
+code:EGLSurface simultaneously.
+====
+
+If successful, fname:vkCreateAndroidSurfaceKHR increments the
+basetype:ANativeWindow's reference count, and fname:vkDestroySurfaceKHR will
+decrement it.
+
+On Android, when a swapchain's pname:imageExtent does not match the
+surface's pname:currentExtent, the presentable images will be scaled to the
+surface's dimensions during presentation.
+pname:minImageExtent is [eq]#(1,1)#, and pname:maxImageExtent is the maximum
+image size supported by the consumer.
+For the system compositor, pname:currentExtent is the window size (i.e. the
+consumer's preferred size).
+
+include::{generated}/validity/protos/vkCreateAndroidSurfaceKHR.adoc[]
+--
+
+[open,refpage='VkAndroidSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Android surface object',type='structs']
+--
+The sname:VkAndroidSurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAndroidSurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:window is a pointer to the basetype:ANativeWindow to associate the
+    surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkAndroidSurfaceCreateInfoKHR-window-01248]]
+    pname:window must: point to a valid Android basetype:ANativeWindow
+****
+
+include::{generated}/validity/structs/VkAndroidSurfaceCreateInfoKHR.adoc[]
+--
+
+[open,refpage='ANativeWindow',desc='Android native window type',type='basetypes']
+--
+To remove an unnecessary compile time dependency, an incomplete type
+definition of basetype:ANativeWindow is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/ANativeWindow.adoc[]
+
+The actual basetype:ANativeWindow type is defined in Android NDK headers.
+--
+
+[open,refpage='VkAndroidSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAndroidSurfaceCreateFlagsKHR.adoc[]
+
+tname:VkAndroidSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformQuerySupport_android.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformQuerySupport_android.adoc
new file mode 100644
index 0000000..d2e48c1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_android_surface/platformQuerySupport_android.adoc
@@ -0,0 +1,11 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_android]]
+=== Android Platform
+
+On Android, all physical devices and queue families must: be capable of
+presentation with any native window.
+As a result there is no Android-specific query for these capabilities.
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.adoc
new file mode 100644
index 0000000..cc96b73
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.adoc
@@ -0,0 +1,289 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[deferred-host-operations]]
+= Deferred Host Operations
+
+Certain Vulkan commands are inherently expensive for the host CPU to
+execute.
+It is often desirable to offload such work onto background threads, and to
+parallelize the work across multiple CPUs.
+The concept of _deferred operations_ allows applications and drivers to
+coordinate the execution of expensive host commands using an
+application-managed thread pool.
+
+The `apiext:VK_KHR_deferred_host_operations` extension defines the
+infrastructure and usage patterns for _deferrable commands_, but does not
+specify any commands as deferrable.
+This is left to additional dependent extensions.
+Commands must: not be deferred unless the deferral is specifically allowed
+by another extension which depends on
+`apiext:VK_KHR_deferred_host_operations`.
+This specification will refer to such extensions as _deferral extensions_.
+
+
+[[deferred-host-operations-requesting]]
+== Requesting Deferral
+
+When an application requests an operation deferral, the implementation may:
+defer the operation.
+When deferral is requested and the implementation defers any operation, the
+implementation must: return ename:VK_OPERATION_DEFERRED_KHR as the success
+code if no errors occurred.
+When deferral is requested, the implementation should: defer the operation
+when the workload is significant, however if the implementation chooses not
+to defer any of the requested operations and instead executes all of them
+immediately, the implementation must: return
+ename:VK_OPERATION_NOT_DEFERRED_KHR as the success code if no errors
+occurred.
+
+A deferred operation is created _complete_ with an initial result value of
+ename:VK_SUCCESS.
+The deferred operation becomes _pending_ when an operation has been
+successfully deferred with that deferred operation object.
+
+A deferred operation is considered pending until the deferred operation
+completes.
+A pending deferred operation becomes _complete_ when it has been fully
+executed by one or more threads.
+Pending deferred operations will never complete until they are _joined_ by
+an application thread, using flink:vkDeferredOperationJoinKHR.
+Applications can: join multiple threads to the same deferred operation,
+enabling concurrent execution of subtasks within that operation.
+
+The application can: query the status of a slink:VkDeferredOperationKHR
+using the flink:vkGetDeferredOperationMaxConcurrencyKHR or
+flink:vkGetDeferredOperationResultKHR commands.
+
+Parameters to the command requesting a deferred operation may: be accessed
+by the implementation at any time until the deferred operation enters the
+complete state.
+The application must: obey the following rules while a deferred operation is
+pending:
+
+  * Externally synchronized parameters must: not be accessed.
+  * Pointer parameters must: not be modified (e.g. reallocated/freed).
+  * The contents of pointer parameters which may: be read by the command
+    must: not be modified.
+  * The contents of pointer parameters which may: be written by the command
+    must: not be read.
+  * Vulkan object parameters must: not be passed as externally synchronized
+    parameters to any other command.
+
+When the deferred operation is complete, the application should: call
+flink:vkGetDeferredOperationResultKHR to obtain the elink:VkResult
+indicating success or failure of the operation.
+The elink:VkResult value returned will be one of the values that the command
+requesting the deferred operation is able to return.
+Writes to output parameters of the requesting command will happen-before the
+deferred operation is complete.
+
+When a deferral is requested for a command, the implementation may: perform
+memory management operations on the allocator supplied to
+flink:vkCreateDeferredOperationKHR for the deferred operation object, as
+described in the <<memory-allocation,Memory Allocation>> chapter.
+Such allocations must: occur on the thread which requests deferral.
+
+If an allocator was supplied for the deferred command at the time of the
+deferral request, then the implementation may: perform memory management
+operations on this allocator during the execution of
+flink:vkDeferredOperationJoinKHR.
+These operations may: occur concurrently and may: be performed by any joined
+thread.
+The application must: ensure that the supplied allocator is able to operate
+correctly under these conditions.
+
+
+== Deferred Host Operations API
+
+[open,refpage='VkDeferredOperationKHR',desc='A deferred operation',type='handles']
+--
+The sname:VkDeferredOperationKHR handle is defined as:
+
+include::{generated}/api/handles/VkDeferredOperationKHR.adoc[]
+
+This handle refers to a tracking structure which manages the execution state
+for a deferred command.
+--
+
+[open,refpage='vkCreateDeferredOperationKHR',desc='Create a deferred operation handle',type='protos']
+--
+:refpage: vkCreateDeferredOperationKHR
+
+To construct the tracking object for a deferred command, call:
+
+include::{generated}/api/protos/vkCreateDeferredOperationKHR.adoc[]
+
+  * pname:device is the device which owns pname:operation.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation,Memory Allocation>> chapter.
+  * pname:pDeferredOperation is a pointer to a handle in which the created
+    slink:VkDeferredOperationKHR is returned.
+
+include::{generated}/validity/protos/vkCreateDeferredOperationKHR.adoc[]
+--
+
+[open,refpage='vkDeferredOperationJoinKHR',desc='Assign a thread to a deferred operation',type='protos']
+--
+:refpage: vkDeferredOperationJoinKHR
+
+To assign a thread to a deferred operation, call:
+
+include::{generated}/api/protos/vkDeferredOperationJoinKHR.adoc[]
+
+  * pname:device is the device which owns pname:operation.
+  * pname:operation is the deferred operation that the calling thread should
+    work on.
+
+The fname:vkDeferredOperationJoinKHR command will execute a portion of the
+deferred operation on the calling thread.
+
+The return value will be one of the following:
+
+  * A return value of ename:VK_SUCCESS indicates that pname:operation is
+    complete.
+    The application should: use flink:vkGetDeferredOperationResultKHR to
+    retrieve the result of pname:operation.
+  * A return value of ename:VK_THREAD_DONE_KHR indicates that the deferred
+    operation is not complete, but there is no work remaining to assign to
+    threads.
+    Future calls to flink:vkDeferredOperationJoinKHR are not necessary and
+    will simply harm performance.
+    This situation may: occur when other threads executing
+    flink:vkDeferredOperationJoinKHR are about to complete pname:operation,
+    and the implementation is unable to partition the workload any further.
+  * A return value of ename:VK_THREAD_IDLE_KHR indicates that the deferred
+    operation is not complete, and there is no work for the thread to do at
+    the time of the call.
+    This situation may: occur if the operation encounters a temporary
+    reduction in parallelism.
+    By returning ename:VK_THREAD_IDLE_KHR, the implementation is signaling
+    that it expects that more opportunities for parallelism will emerge as
+    execution progresses, and that future calls to
+    flink:vkDeferredOperationJoinKHR can: be beneficial.
+    In the meantime, the application can: perform other work on the calling
+    thread.
+
+Implementations must: guarantee forward progress by enforcing the following
+invariants:
+
+  1. If only one thread has invoked flink:vkDeferredOperationJoinKHR on a
+     given operation, that thread must: execute the operation to completion
+     and return ename:VK_SUCCESS.
+  2. If multiple threads have concurrently invoked
+     flink:vkDeferredOperationJoinKHR on the same operation, then at least
+     one of them must: complete the operation and return ename:VK_SUCCESS.
+
+include::{generated}/validity/protos/vkDeferredOperationJoinKHR.adoc[]
+--
+
+[open,refpage='vkDestroyDeferredOperationKHR',desc='Destroy a deferred operation handle',type='protos']
+--
+:refpage: vkDestroyDeferredOperationKHR
+
+When a deferred operation is completed, the application can: destroy the
+tracking object by calling:
+
+include::{generated}/api/protos/vkDestroyDeferredOperationKHR.adoc[]
+
+  * pname:device is the device which owns pname:operation.
+  * pname:operation is the completed operation to be destroyed.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation,Memory Allocation>> chapter.
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyDeferredOperationKHR-operation-03434]]
+    If sname:VkAllocationCallbacks were provided when pname:operation was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyDeferredOperationKHR-operation-03435]]
+    If no sname:VkAllocationCallbacks were provided when pname:operation was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyDeferredOperationKHR-operation-03436]]
+    pname:operation must: be completed
+****
+include::{generated}/validity/protos/vkDestroyDeferredOperationKHR.adoc[]
+--
+
+[open,refpage='vkGetDeferredOperationMaxConcurrencyKHR',desc='Query the maximum concurrency on a deferred operation',type='protos']
+--
+:refpage: vkGetDeferredOperationMaxConcurrencyKHR
+
+To query the number of additional threads that can usefully be joined to a
+deferred operation, call:
+
+include::{generated}/api/protos/vkGetDeferredOperationMaxConcurrencyKHR.adoc[]
+
+  * pname:device is the device which owns pname:operation.
+  * pname:operation is the deferred operation to be queried.
+
+The returned value is the maximum number of threads that can usefully
+execute a deferred operation concurrently, reported for the state of the
+deferred operation at the point this command is called.
+This value is intended to be used to better schedule work onto available
+threads.
+Applications can: join any number of threads to the deferred operation and
+expect it to eventually complete, though excessive joins may: return
+ename:VK_THREAD_DONE_KHR immediately, performing no useful work.
+
+If pname:operation is complete,
+fname:vkGetDeferredOperationMaxConcurrencyKHR returns zero.
+
+If pname:operation is currently joined to any threads, the value returned by
+this command may: immediately be out of date.
+
+If pname:operation is pending, implementations must: not return zero unless
+at least one thread is currently executing flink:vkDeferredOperationJoinKHR
+on pname:operation.
+If there are such threads, the implementation should: return an estimate of
+the number of additional threads which it could profitably use.
+
+Implementations may: return [eq]#2^32^-1# to indicate that the maximum
+concurrency is unknown and cannot be easily derived.
+Implementations may: return values larger than the maximum concurrency
+available on the host CPU.
+In these situations, an application should: clamp the return value rather
+than oversubscribing the machine.
+
+[NOTE]
+.Note
+====
+The recommended usage pattern for applications is to query this value once,
+after deferral, and schedule no more than the specified number of threads to
+join the operation.
+Each time a joined thread receives ename:VK_THREAD_IDLE_KHR, the application
+should schedule an additional join at some point in the future, but is not
+required to do so.
+====
+
+include::{generated}/validity/protos/vkGetDeferredOperationMaxConcurrencyKHR.adoc[]
+--
+
+[open,refpage='vkGetDeferredOperationResultKHR',desc='Query the result of a deferred operation',type='protos']
+--
+:refpage: vkGetDeferredOperationResultKHR
+
+The fname:vkGetDeferredOperationResultKHR function is defined as:
+
+include::{generated}/api/protos/vkGetDeferredOperationResultKHR.adoc[]
+
+  * pname:device is the device which owns pname:operation.
+  * pname:operation is the operation whose deferred result is being queried.
+
+If no command has been deferred on pname:operation,
+fname:vkGetDeferredOperationResultKHR returns ename:VK_SUCCESS.
+
+If the deferred operation is pending, fname:vkGetDeferredOperationResultKHR
+returns ename:VK_NOT_READY.
+
+If the deferred operation is complete, it returns the appropriate return
+value from the original command.
+This value must: be one of the elink:VkResult values which could have been
+returned by the original command if the operation had not been deferred.
+
+include::{generated}/validity/protos/vkGetDeferredOperationResultKHR.adoc[]
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display/display.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display/display.adoc
new file mode 100644
index 0000000..a63ac22
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display/display.adoc
@@ -0,0 +1,787 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[display]]
+== Presenting Directly to Display Devices
+
+In some environments applications can: also present Vulkan rendering
+directly to display devices without using an intermediate windowing system.
+This can: be useful for embedded applications, or implementing the
+rendering/presentation backend of a windowing system using Vulkan.
+The `apiext:VK_KHR_display` extension provides the functionality necessary
+to enumerate display devices and create sname:VkSurfaceKHR objects that
+target displays.
+
+
+=== Display Enumeration
+
+[open,refpage='VkDisplayKHR',desc='Opaque handle to a display object',type='handles']
+--
+Displays are represented by sname:VkDisplayKHR handles:
+
+include::{generated}/api/handles/VkDisplayKHR.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceDisplayPropertiesKHR',desc='Query information about the available displays',type='protos']
+--
+:refpage: vkGetPhysicalDeviceDisplayPropertiesKHR
+
+Various functions are provided for enumerating the available display devices
+present on a Vulkan physical device.
+To query information about the available displays, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPropertiesKHR.adoc[]
+
+  * pname:physicalDevice is a physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display devices available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayPropertiesKHR structures.
+
+If pname:pProperties is `NULL`, then the number of display devices available
+for pname:physicalDevice is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If the value of pname:pPropertyCount is less than the number of display
+devices for pname:physicalDevice, at most pname:pPropertyCount structures
+will be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available properties were
+returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPropertiesKHR.adoc[]
+--
+
+[open,refpage='VkDisplayPropertiesKHR',desc='Structure describing an available display device',type='structs']
+--
+The sname:VkDisplayPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPropertiesKHR.adoc[]
+
+  * pname:display is a handle that is used to refer to the display described
+    here.
+    This handle will be valid for the lifetime of the Vulkan instance.
+  * pname:displayName is `NULL` or a pointer to a null-terminated UTF-8
+    string containing the name of the display.
+    Generally, this will be the name provided by the display's EDID.
+    If `NULL`, no suitable name is available.
+    If not `NULL`, the string pointed to must: remain accessible and
+    unmodified as long as pname:display is valid.
+  * pname:physicalDimensions describes the physical width and height of the
+    visible portion of the display, in millimeters.
+  * pname:physicalResolution describes the physical, native, or preferred
+    resolution of the display.
+
+[NOTE]
+.Note
+====
+For devices which have no natural value to return here, implementations
+should: return the maximum resolution supported.
+====
+
+  * pname:supportedTransforms is a bitmask of
+    elink:VkSurfaceTransformFlagBitsKHR describing which transforms are
+    supported by this display.
+  * pname:planeReorderPossible tells whether the planes on this display can:
+    have their z order changed.
+    If this is ename:VK_TRUE, the application can: re-arrange the planes on
+    this display in any order relative to each other.
+  * pname:persistentContent tells whether the display supports
+    self-refresh/internal buffering.
+    If this is true, the application can: submit persistent present
+    operations on swapchains created against this display.
+
+[NOTE]
+.Note
+====
+Persistent presents may: have higher latency, and may: use less power when
+the screen content is updated infrequently, or when only a portion of the
+screen needs to be updated in most frames.
+====
+
+include::{generated}/validity/structs/VkDisplayPropertiesKHR.adoc[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetPhysicalDeviceDisplayProperties2KHR',desc='Query information about the available displays',type='protos']
+--
+:refpage: vkGetPhysicalDeviceDisplayProperties2KHR
+
+To query information about the available displays, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayProperties2KHR.adoc[]
+
+  * pname:physicalDevice is a physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display devices available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayProperties2KHR structures.
+
+fname:vkGetPhysicalDeviceDisplayProperties2KHR behaves similarly to
+flink:vkGetPhysicalDeviceDisplayPropertiesKHR, with the ability to return
+extended information via chained output structures.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayProperties2KHR.adoc[]
+--
+
+[open,refpage='VkDisplayProperties2KHR',desc='Structure describing an available display device',type='structs']
+--
+The sname:VkDisplayProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayProperties2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayProperties is a slink:VkDisplayPropertiesKHR structure.
+
+include::{generated}/validity/structs/VkDisplayProperties2KHR.adoc[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+ifdef::VK_EXT_direct_mode_display[]
+include::{chapters}/VK_EXT_direct_mode_display/acquire_release_displays.adoc[]
+endif::VK_EXT_direct_mode_display[]
+
+
+==== Display Planes
+
+[open,refpage='vkGetPhysicalDeviceDisplayPlanePropertiesKHR',desc='Query the plane properties',type='protos']
+--
+:refpage: vkGetPhysicalDeviceDisplayPlanePropertiesKHR
+
+Images are presented to individual planes on a display.
+Devices must: support at least one plane on each display.
+Planes can: be stacked and blended to composite multiple images on one
+display.
+Devices may: support only a fixed stacking order and fixed mapping between
+planes and displays, or they may: allow arbitrary application specified
+stacking orders and mappings between planes and displays.
+To query the properties of device display planes, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.adoc[]
+
+  * pname:physicalDevice is a physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display planes available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayPlanePropertiesKHR structures.
+
+If pname:pProperties is `NULL`, then the number of display planes available
+for pname:physicalDevice is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If the value of pname:pPropertyCount is less than the number of display
+planes for pname:physicalDevice, at most pname:pPropertyCount structures
+will be written.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.adoc[]
+--
+
+[open,refpage='VkDisplayPlanePropertiesKHR',desc='Structure describing display plane properties',type='structs']
+--
+The sname:VkDisplayPlanePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlanePropertiesKHR.adoc[]
+
+  * pname:currentDisplay is the handle of the display the plane is currently
+    associated with.
+    If the plane is not currently attached to any displays, this will be
+    dlink:VK_NULL_HANDLE.
+  * pname:currentStackIndex is the current z-order of the plane.
+    This will be between 0 and the value returned by
+    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR in
+    pname:pPropertyCount.
+
+include::{generated}/validity/structs/VkDisplayPlanePropertiesKHR.adoc[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetPhysicalDeviceDisplayPlaneProperties2KHR',desc='Query information about the available display planes.',type='protos']
+--
+:refpage: vkGetPhysicalDeviceDisplayPlaneProperties2KHR
+
+To query the properties of a device's display planes, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.adoc[]
+
+  * pname:physicalDevice is a physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display planes available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayPlaneProperties2KHR structures.
+
+fname:vkGetPhysicalDeviceDisplayPlaneProperties2KHR behaves similarly to
+flink:vkGetPhysicalDeviceDisplayPlanePropertiesKHR, with the ability to
+return extended information via chained output structures.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.adoc[]
+--
+
+[open,refpage='VkDisplayPlaneProperties2KHR',desc='Structure describing an available display plane',type='structs']
+--
+The sname:VkDisplayPlaneProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlaneProperties2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayPlaneProperties is a slink:VkDisplayPlanePropertiesKHR
+    structure.
+
+include::{generated}/validity/structs/VkDisplayPlaneProperties2KHR.adoc[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+[open,refpage='vkGetDisplayPlaneSupportedDisplaysKHR',desc='Query the list of displays a plane supports',type='protos']
+--
+:refpage: vkGetDisplayPlaneSupportedDisplaysKHR
+
+To determine which displays a plane is usable with, call
+
+include::{generated}/api/protos/vkGetDisplayPlaneSupportedDisplaysKHR.adoc[]
+
+  * pname:physicalDevice is a physical device.
+  * pname:planeIndex is the plane which the application wishes to use, and
+    must: be in the range [eq]#[0, physical device plane count - 1]#.
+  * pname:pDisplayCount is a pointer to an integer related to the number of
+    displays available or queried, as described below.
+  * pname:pDisplays is either `NULL` or a pointer to an array of
+    sname:VkDisplayKHR handles.
+
+If pname:pDisplays is `NULL`, then the number of displays usable with the
+specified pname:planeIndex for pname:physicalDevice is returned in
+pname:pDisplayCount.
+Otherwise, pname:pDisplayCount must: point to a variable set by the user to
+the number of elements in the pname:pDisplays array, and on return the
+variable is overwritten with the number of handles actually written to
+pname:pDisplays.
+If the value of pname:pDisplayCount is less than the number of usable
+display-plane pairs for pname:physicalDevice, at most pname:pDisplayCount
+handles will be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available pairs were
+returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249]]
+    pname:planeIndex must: be less than the number of display planes
+    supported by the device as determined by calling
+    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
+****
+
+include::{generated}/validity/protos/vkGetDisplayPlaneSupportedDisplaysKHR.adoc[]
+--
+
+Additional properties of displays are queried using specialized query
+functions.
+
+
+==== Display Modes
+
+[open,refpage='VkDisplayModeKHR',desc='Opaque handle to a display mode object',type='handles']
+--
+Display modes are represented by sname:VkDisplayModeKHR handles:
+
+include::{generated}/api/handles/VkDisplayModeKHR.adoc[]
+--
+
+[open,refpage='vkGetDisplayModePropertiesKHR',desc='Query the set of mode properties supported by the display',type='protos']
+--
+:refpage: vkGetDisplayModePropertiesKHR
+
+Each display has one or more supported modes associated with it by default.
+These built-in modes are queried by calling:
+
+include::{generated}/api/protos/vkGetDisplayModePropertiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device associated with
+    pname:display.
+  * pname:display is the display to query.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display modes available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayModePropertiesKHR structures.
+
+If pname:pProperties is `NULL`, then the number of display modes available
+on the specified pname:display for pname:physicalDevice is returned in
+pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If the value of pname:pPropertyCount is less than the number of display
+modes for pname:physicalDevice, at most pname:pPropertyCount structures will
+be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available display modes were
+returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetDisplayModePropertiesKHR.adoc[]
+--
+
+[open,refpage='VkDisplayModePropertiesKHR',desc='Structure describing display mode properties',type='structs']
+--
+The sname:VkDisplayModePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModePropertiesKHR.adoc[]
+
+  * pname:displayMode is a handle to the display mode described in this
+    structure.
+    This handle will be valid for the lifetime of the Vulkan instance.
+  * pname:parameters is a slink:VkDisplayModeParametersKHR structure
+    describing the display parameters associated with pname:displayMode.
+
+include::{generated}/validity/structs/VkDisplayModePropertiesKHR.adoc[]
+--
+
+[open,refpage='VkDisplayModeCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDisplayModeCreateFlagsKHR.adoc[]
+
+tname:VkDisplayModeCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetDisplayModeProperties2KHR',desc='Query information about the available display modes.',type='protos']
+--
+:refpage: vkGetDisplayModeProperties2KHR
+
+To query the properties of a device's built-in display modes, call:
+
+include::{generated}/api/protos/vkGetDisplayModeProperties2KHR.adoc[]
+
+  * pname:physicalDevice is the physical device associated with
+    pname:display.
+  * pname:display is the display to query.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    display modes available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    sname:VkDisplayModeProperties2KHR structures.
+
+fname:vkGetDisplayModeProperties2KHR behaves similarly to
+flink:vkGetDisplayModePropertiesKHR, with the ability to return extended
+information via chained output structures.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetDisplayModeProperties2KHR.adoc[]
+--
+
+[open,refpage='VkDisplayModeProperties2KHR',desc='Structure describing an available display mode',type='structs']
+--
+The sname:VkDisplayModeProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModeProperties2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayModeProperties is a slink:VkDisplayModePropertiesKHR
+    structure.
+
+include::{generated}/validity/structs/VkDisplayModeProperties2KHR.adoc[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+[open,refpage='VkDisplayModeParametersKHR',desc='Structure describing display parameters associated with a display mode',type='structs']
+--
+The sname:VkDisplayModeParametersKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModeParametersKHR.adoc[]
+
+  * pname:visibleRegion is the 2D extents of the visible region.
+  * pname:refreshRate is a code:uint32_t that is the number of times the
+    display is refreshed each second multiplied by 1000.
+
+[NOTE]
+.Note
+====
+For example, a 60Hz display mode would report a pname:refreshRate of 60,000.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkDisplayModeParametersKHR-width-01990]]
+    The pname:width member of pname:visibleRegion must: be greater than `0`
+  * [[VUID-VkDisplayModeParametersKHR-height-01991]]
+    The pname:height member of pname:visibleRegion must: be greater than `0`
+  * [[VUID-VkDisplayModeParametersKHR-refreshRate-01992]]
+    pname:refreshRate must: be greater than `0`
+****
+
+include::{generated}/validity/structs/VkDisplayModeParametersKHR.adoc[]
+--
+
+[open,refpage='vkCreateDisplayModeKHR',desc='Create a display mode',type='protos']
+--
+:refpage: vkCreateDisplayModeKHR
+
+Additional modes may: also be created by calling:
+
+include::{generated}/api/protos/vkCreateDisplayModeKHR.adoc[]
+
+  * pname:physicalDevice is the physical device associated with
+    pname:display.
+  * pname:display is the display to create an additional mode for.
+  * pname:pCreateInfo is a pointer to a slink:VkDisplayModeCreateInfoKHR
+    structure describing the new mode to create.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    display mode object when there is no more specific allocator available
+    (see <<memory-allocation,Memory Allocation>>).
+  * pname:pMode is a pointer to a slink:VkDisplayModeKHR handle in which the
+    mode created is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkCreateDisplayModeKHR.adoc[]
+--
+
+[open,refpage='VkDisplayModeCreateInfoKHR',desc='Structure specifying parameters of a newly created display mode object',type='structs']
+--
+The sname:VkDisplayModeCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModeCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use, and must: be zero.
+  * pname:parameters is a slink:VkDisplayModeParametersKHR structure
+    describing the display parameters to use in creating the new mode.
+    If the parameters are not compatible with the specified display, the
+    implementation must: return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+include::{generated}/validity/structs/VkDisplayModeCreateInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetDisplayPlaneCapabilitiesKHR',desc='Query capabilities of a mode and plane combination',type='protos']
+--
+:refpage: vkGetDisplayPlaneCapabilitiesKHR
+
+Applications that wish to present directly to a display must: select which
+layer, or "`plane`" of the display they wish to target, and a mode to use
+with the display.
+Each display supports at least one plane.
+The capabilities of a given mode and plane combination are determined by
+calling:
+
+include::{generated}/api/protos/vkGetDisplayPlaneCapabilitiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device associated with the display
+    specified by pname:mode
+  * pname:mode is the display mode the application intends to program when
+    using the specified plane.
+    Note this parameter also implicitly specifies a display.
+  * pname:planeIndex is the plane which the application intends to use with
+    the display, and is less than the number of display planes supported by
+    the device.
+  * pname:pCapabilities is a pointer to a
+    slink:VkDisplayPlaneCapabilitiesKHR structure in which the capabilities
+    are returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetDisplayPlaneCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkDisplayPlaneCapabilitiesKHR',desc='Structure describing capabilities of a mode and plane combination',type='structs']
+--
+The sname:VkDisplayPlaneCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlaneCapabilitiesKHR.adoc[]
+
+  * pname:supportedAlpha is a bitmask of
+    elink:VkDisplayPlaneAlphaFlagBitsKHR describing the supported alpha
+    blending modes.
+  * pname:minSrcPosition is the minimum source rectangle offset supported by
+    this plane using the specified mode.
+  * pname:maxSrcPosition is the maximum source rectangle offset supported by
+    this plane using the specified mode.
+    The pname:x and pname:y components of pname:maxSrcPosition must: each be
+    greater than or equal to the pname:x and pname:y components of
+    pname:minSrcPosition, respectively.
+  * pname:minSrcExtent is the minimum source rectangle size supported by
+    this plane using the specified mode.
+  * pname:maxSrcExtent is the maximum source rectangle size supported by
+    this plane using the specified mode.
+  * pname:minDstPosition, pname:maxDstPosition, pname:minDstExtent,
+    pname:maxDstExtent all have similar semantics to their corresponding
+    ptext:*Src* equivalents, but apply to the output region within the mode
+    rather than the input region within the source image.
+    Unlike the ptext:*Src* offsets, pname:minDstPosition and
+    pname:maxDstPosition may: contain negative values.
+
+The minimum and maximum position and extent fields describe the
+implementation limits, if any, as they apply to the specified display mode
+and plane.
+Vendors may: support displaying a subset of a swapchain's presentable images
+on the specified display plane.
+This is expressed by returning pname:minSrcPosition, pname:maxSrcPosition,
+pname:minSrcExtent, and pname:maxSrcExtent values that indicate a range of
+possible positions and sizes which may: be used to specify the region within
+the presentable images that source pixels will be read from when creating a
+swapchain on the specified display mode and plane.
+
+Vendors may: also support mapping the presentable images`' content to a
+subset or superset of the visible region in the specified display mode.
+This is expressed by returning pname:minDstPosition, pname:maxDstPosition,
+pname:minDstExtent and pname:maxDstExtent values that indicate a range of
+possible positions and sizes which may: be used to describe the region
+within the display mode that the source pixels will be mapped to.
+
+Other vendors may: support only a 1-1 mapping between pixels in the
+presentable images and the display mode.
+This may: be indicated by returning [eq]#(0,0)# for pname:minSrcPosition,
+pname:maxSrcPosition, pname:minDstPosition, and pname:maxDstPosition, and
+(display mode width, display mode height) for pname:minSrcExtent,
+pname:maxSrcExtent, pname:minDstExtent, and pname:maxDstExtent.
+
+The value pname:supportedAlpha must: contain at least one valid
+elink:VkDisplayPlaneAlphaFlagBitsKHR bit.
+
+These values indicate the limits of the implementation's individual fields.
+Not all combinations of values within the offset and extent ranges returned
+in sname:VkDisplayPlaneCapabilitiesKHR are guaranteed to be supported.
+Presentation requests specifying unsupported combinations may: fail.
+
+include::{generated}/validity/structs/VkDisplayPlaneCapabilitiesKHR.adoc[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetDisplayPlaneCapabilities2KHR',desc='Query capabilities of a mode and plane combination',type='protos']
+--
+:refpage: vkGetDisplayPlaneCapabilities2KHR
+
+To query the capabilities of a given mode and plane combination, call:
+
+include::{generated}/api/protos/vkGetDisplayPlaneCapabilities2KHR.adoc[]
+
+  * pname:physicalDevice is the physical device associated with
+    pname:pDisplayPlaneInfo.
+  * pname:pDisplayPlaneInfo is a pointer to a slink:VkDisplayPlaneInfo2KHR
+    structure describing the plane and mode.
+  * pname:pCapabilities is a pointer to a
+    slink:VkDisplayPlaneCapabilities2KHR structure in which the capabilities
+    are returned.
+
+fname:vkGetDisplayPlaneCapabilities2KHR behaves similarly to
+flink:vkGetDisplayPlaneCapabilitiesKHR, with the ability to specify extended
+inputs via chained input structures, and to return extended information via
+chained output structures.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetDisplayPlaneCapabilities2KHR.adoc[]
+--
+
+[open,refpage='VkDisplayPlaneInfo2KHR',desc='Structure defining the intended configuration of a display plane',type='structs']
+--
+The sname:VkDisplayPlaneInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlaneInfo2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mode is the display mode the application intends to program when
+    using the specified plane.
+
+[NOTE]
+.Note
+====
+This parameter also implicitly specifies a display.
+====
+
+  * pname:planeIndex is the plane which the application intends to use with
+    the display.
+
+The members of sname:VkDisplayPlaneInfo2KHR correspond to the arguments to
+flink:vkGetDisplayPlaneCapabilitiesKHR, with pname:sType and pname:pNext
+added for extensibility.
+
+include::{generated}/validity/structs/VkDisplayPlaneInfo2KHR.adoc[]
+--
+
+[open,refpage='VkDisplayPlaneCapabilities2KHR',desc='Structure describing the capabilities of a mode and plane combination',type='structs']
+--
+The sname:VkDisplayPlaneCapabilities2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlaneCapabilities2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:capabilities is a slink:VkDisplayPlaneCapabilitiesKHR structure.
+
+include::{generated}/validity/structs/VkDisplayPlaneCapabilities2KHR.adoc[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+ifdef::VK_EXT_display_control[]
+include::{chapters}/VK_EXT_display_control/display_control.adoc[]
+endif::VK_EXT_display_control[]
+
+
+[[wsi-display-surfaces]]
+=== Display Surfaces
+
+[open,refpage='vkCreateDisplayPlaneSurfaceKHR',desc='Create a slink:VkSurfaceKHR structure representing a display plane and mode',type='protos']
+--
+:refpage: vkCreateDisplayPlaneSurfaceKHR
+
+A complete display configuration includes a mode, one or more display planes
+and any parameters describing their behavior, and parameters describing some
+aspects of the images associated with those planes.
+Display surfaces describe the configuration of a single plane within a
+complete display configuration.
+To create a sname:VkSurfaceKHR object for a display plane, call:
+
+include::{generated}/api/protos/vkCreateDisplayPlaneSurfaceKHR.adoc[]
+
+  * pname:instance is the instance corresponding to the physical device the
+    targeted display is on.
+  * pname:pCreateInfo is a pointer to a slink:VkDisplaySurfaceCreateInfoKHR
+    structure specifying which mode, plane, and other parameters to use, as
+    described below.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface is returned.
+
+include::{generated}/validity/protos/vkCreateDisplayPlaneSurfaceKHR.adoc[]
+--
+
+[open,refpage='VkDisplaySurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created display plane surface object',type='structs']
+--
+The sname:VkDisplaySurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplaySurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use, and must: be zero.
+  * pname:displayMode is a slink:VkDisplayModeKHR handle specifying the mode
+    to use when displaying this surface.
+  * pname:planeIndex is the plane on which this surface appears.
+  * pname:planeStackIndex is the z-order of the plane.
+  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
+    specifying the transformation to apply to images as part of the scanout
+    operation.
+  * pname:globalAlpha is the global alpha value.
+    This value is ignored if pname:alphaMode is not
+    ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR.
+  * pname:alphaMode is a elink:VkDisplayPlaneAlphaFlagBitsKHR value
+    specifying the type of alpha blending to use.
+  * pname:imageExtent is the size of the presentable images to use with the
+    surface.
+
+[NOTE]
+.Note
+====
+Creating a display surface must: not modify the state of the displays,
+planes, or other resources it names.
+For example, it must: not apply the specified mode to be set on the
+associated display.
+Application of display configuration occurs as a side effect of presenting
+to a display surface.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252]]
+    pname:planeIndex must: be less than the number of display planes
+    supported by the device as determined by calling
+    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253]]
+    If the pname:planeReorderPossible member of the
+    sname:VkDisplayPropertiesKHR structure returned by
+    fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display
+    corresponding to pname:displayMode is ename:VK_TRUE then
+    pname:planeStackIndex must: be less than the number of display planes
+    supported by the device as determined by calling
+    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR; otherwise
+    pname:planeStackIndex must: equal the pname:currentStackIndex member of
+    sname:VkDisplayPlanePropertiesKHR returned by
+    fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR for the display plane
+    corresponding to pname:displayMode
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254]]
+    If pname:alphaMode is ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then
+    pname:globalAlpha must: be between `0` and `1`, inclusive
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255]]
+    pname:alphaMode must: be one of the bits present in the
+    pname:supportedAlpha member of sname:VkDisplayPlaneCapabilitiesKHR for
+    the display plane corresponding to pname:displayMode
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-transform-06740]]
+    pname:transform must: be one of the bits present in the
+    pname:supportedTransforms member of sname:VkDisplayPropertiesKHR for the
+    display corresponding to pname:displayMode
+  * [[VUID-VkDisplaySurfaceCreateInfoKHR-width-01256]]
+    The pname:width and pname:height members of pname:imageExtent must: be
+    less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D
+****
+
+include::{generated}/validity/structs/VkDisplaySurfaceCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkDisplaySurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDisplaySurfaceCreateFlagsKHR.adoc[]
+
+tname:VkDisplaySurfaceCreateFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+[open,refpage='VkDisplayPlaneAlphaFlagBitsKHR',desc='Alpha blending type',type='enums']
+--
+Bits which can: be set in
+slink:VkDisplaySurfaceCreateInfoKHR::pname:alphaMode, specifying the type of
+alpha blending to use on a display, are:
+
+include::{generated}/api/enums/VkDisplayPlaneAlphaFlagBitsKHR.adoc[]
+
+  * ename:VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR specifies that the source
+    image will be treated as opaque.
+  * ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR specifies that a global
+    alpha value must: be specified that will be applied to all pixels in the
+    source image.
+  * ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR specifies that the alpha
+    value will be determined by the alpha component of the source image's
+    pixels.
+    If the source format contains no alpha values, no blending will be
+    applied.
+    The source alpha values are not premultiplied into the source image's
+    other color components.
+  * ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR is
+    equivalent to ename:VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR, except the
+    source alpha values are assumed to be premultiplied into the source
+    image's other color components.
+--
+
+[open,refpage='VkDisplayPlaneAlphaFlagsKHR',desc='Bitmask of VkDisplayPlaneAlphaFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkDisplayPlaneAlphaFlagsKHR.adoc[]
+
+tname:VkDisplayPlaneAlphaFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkDisplayPlaneAlphaFlagBitsKHR.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/create_shared_swapchains.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/create_shared_swapchains.adoc
new file mode 100644
index 0000000..837d39a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/create_shared_swapchains.adoc
@@ -0,0 +1,56 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[create_shared_swapchains]]
+
+[open,refpage='vkCreateSharedSwapchainsKHR',desc='Create multiple swapchains that share presentable images',type='protos']
+--
+:refpage: vkCreateSharedSwapchainsKHR
+:objectnameplural: swapchains
+:objectnamecamelcase: swapchain
+:objectcount: pname:swapchainCount
+
+When the `apiext:VK_KHR_display_swapchain` extension is enabled, multiple
+swapchains that share presentable images are created by calling:
+
+include::{generated}/api/protos/vkCreateSharedSwapchainsKHR.adoc[]
+
+  * pname:device is the device to create the swapchains for.
+  * pname:swapchainCount is the number of swapchains to create.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkSwapchainCreateInfoKHR structures specifying the parameters of
+    the created swapchains.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    swapchain objects when there is no more specific allocator available
+    (see <<memory-allocation,Memory Allocation>>).
+  * pname:pSwapchains is a pointer to an array of slink:VkSwapchainKHR
+    handles in which the created swapchain objects will be returned.
+
+fname:vkCreateSharedSwapchainsKHR is similar to flink:vkCreateSwapchainKHR,
+except that it takes an array of slink:VkSwapchainCreateInfoKHR structures,
+and returns an array of swapchain objects.
+
+The swapchain creation parameters that affect the properties and number of
+presentable images must: match between all the swapchains.
+If the displays used by any of the swapchains do not use the same
+presentable image layout or are incompatible in a way that prevents sharing
+images, swapchain creation will fail with the result code
+ename:VK_ERROR_INCOMPATIBLE_DISPLAY_KHR.
+If any error occurs, no swapchains will be created.
+Images presented to multiple swapchains must: be re-acquired from all of
+them before being modified.
+After destroying one or more of the swapchains, the remaining swapchains and
+the presentable images can: continue to be used.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateSharedSwapchainsKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.adoc
new file mode 100644
index 0000000..afb4c42
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.adoc
@@ -0,0 +1,11 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+When a swapchain associated with a display surface is destroyed, if the
+image most recently presented to the display surface is from the swapchain
+being destroyed, then either any display resources modified by presenting
+images from any swapchain associated with the display surface must: be
+reverted by the implementation to their state prior to the first present
+performed on one of these swapchains, or such resources must: be left in
+their current state.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/display_swapchain_present.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/display_swapchain_present.adoc
new file mode 100644
index 0000000..fc8c609
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/display_swapchain_present.adoc
@@ -0,0 +1,67 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[display_swapchain_present]]
+When the `apiext:VK_KHR_display_swapchain` extension is enabled, additional
+fields can: be specified when presenting an image to a swapchain by setting
+slink:VkPresentInfoKHR::pname:pNext to point to a
+slink:VkDisplayPresentInfoKHR structure.
+
+[open,refpage='VkDisplayPresentInfoKHR',desc='Structure describing parameters of a queue presentation to a swapchain',type='structs']
+--
+The sname:VkDisplayPresentInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPresentInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcRect is a rectangular region of pixels to present.
+    It must: be a subset of the image being presented.
+    If sname:VkDisplayPresentInfoKHR is not specified, this region will be
+    assumed to be the entire presentable image.
+  * pname:dstRect is a rectangular region within the visible region of the
+    swapchain's display mode.
+    If sname:VkDisplayPresentInfoKHR is not specified, this region will be
+    assumed to be the entire visible region of the swapchain's mode.
+    If the specified rectangle is a subset of the display mode's visible
+    region, content from display planes below the swapchain's plane will be
+    visible outside the rectangle.
+    If there are no planes below the swapchain's, the area outside the
+    specified rectangle will be black.
+    If portions of the specified rectangle are outside of the display's
+    visible region, pixels mapping only to those portions of the rectangle
+    will be discarded.
+  * pname:persistent: If this is ename:VK_TRUE, the display engine will
+    enable buffered mode on displays that support it.
+    This allows the display engine to stop sending content to the display
+    until a new image is presented.
+    The display will instead maintain a copy of the last presented image.
+    This allows less power to be used, but may: increase presentation
+    latency.
+    If sname:VkDisplayPresentInfoKHR is not specified, persistent mode will
+    not be used.
+
+If the extent of the pname:srcRect and pname:dstRect are not equal, the
+presented pixels will be scaled accordingly.
+
+.Valid Usage
+****
+  * [[VUID-VkDisplayPresentInfoKHR-srcRect-01257]]
+    pname:srcRect must: specify a rectangular region that is a subset of the
+    image being presented
+  * [[VUID-VkDisplayPresentInfoKHR-dstRect-01258]]
+    pname:dstRect must: specify a rectangular region that is a subset of the
+    pname:visibleRegion parameter of the display mode the swapchain being
+    presented uses
+  * [[VUID-VkDisplayPresentInfoKHR-persistentContent-01259]]
+    If the pname:persistentContent member of the
+    sname:VkDisplayPropertiesKHR structure returned by
+    fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display the
+    present operation targets is ename:VK_FALSE, then pname:persistent must:
+    be ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkDisplayPresentInfoKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/queue_present_interactions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/queue_present_interactions.adoc
new file mode 100644
index 0000000..6375063
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_display_swapchain/queue_present_interactions.adoc
@@ -0,0 +1,9 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+If an image is presented to a swapchain created from a display surface, the
+mode of the associated display will be updated, if necessary, to match the
+mode specified when creating the display surface.
+The mode switch and presentation of the specified image will be performed as
+one atomic operation.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_incremental_present/wsi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_incremental_present/wsi.adoc
new file mode 100644
index 0000000..e2d7150
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_incremental_present/wsi.adoc
@@ -0,0 +1,104 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkPresentRegionsKHR',desc='Structure hint of rectangular regions changed by vkQueuePresentKHR',type='structs']
+--
+When the `apiext:VK_KHR_incremental_present` extension is enabled,
+additional fields can: be specified that allow an application to specify
+that only certain rectangular regions of the presentable images of a
+swapchain are changed.
+This is an optimization hint that a presentation engine may: use to only
+update the region of a surface that is actually changing.
+The application still must: ensure that all pixels of a presented image
+contain the desired values, in case the presentation engine ignores this
+hint.
+An application can: provide this hint by adding a sname:VkPresentRegionsKHR
+structure to the pname:pNext chain of the sname:VkPresentInfoKHR structure.
+
+The sname:VkPresentRegionsKHR structure is defined as:
+
+include::{generated}/api/structs/VkPresentRegionsKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is the number of swapchains being presented to by
+    this command.
+  * pname:pRegions is `NULL` or a pointer to an array of
+    sname:VkPresentRegionKHR elements with pname:swapchainCount entries.
+    If not `NULL`, each element of pname:pRegions contains the region that
+    has changed since the last present to the swapchain in the corresponding
+    entry in the sname:VkPresentInfoKHR::pname:pSwapchains array.
+
+.Valid Usage
+****
+  * [[VUID-VkPresentRegionsKHR-swapchainCount-01260]]
+    pname:swapchainCount must: be the same value as
+    sname:VkPresentInfoKHR::pname:swapchainCount, where
+    sname:VkPresentInfoKHR is included in the pname:pNext chain of this
+    sname:VkPresentRegionsKHR structure
+****
+
+include::{generated}/validity/structs/VkPresentRegionsKHR.adoc[]
+--
+
+[open,refpage='VkPresentRegionKHR',desc='Structure containing rectangular region changed by vkQueuePresentKHR for a given VkImage',type='structs']
+--
+For a given image and swapchain, the region to present is specified by the
+sname:VkPresentRegionKHR structure, which is defined as:
+
+include::{generated}/api/structs/VkPresentRegionKHR.adoc[]
+
+  * pname:rectangleCount is the number of rectangles in pname:pRectangles,
+    or zero if the entire image has changed and should be presented.
+  * pname:pRectangles is either `NULL` or a pointer to an array of
+    sname:VkRectLayerKHR structures.
+    The sname:VkRectLayerKHR structure is the framebuffer coordinates, plus
+    layer, of a portion of a presentable image that has changed and must: be
+    presented.
+    If non-`NULL`, each entry in pname:pRectangles is a rectangle of the
+    given image that has changed since the last image was presented to the
+    given swapchain.
+    The rectangles must: be specified relative to
+    slink:VkSurfaceCapabilitiesKHR::pname:currentTransform, regardless of
+    the swapchain's pname:preTransform.
+    The presentation engine will apply the pname:preTransform transformation
+    to the rectangles, along with any further transformation it applies to
+    the image content.
+
+include::{generated}/validity/structs/VkPresentRegionKHR.adoc[]
+--
+
+[open,refpage='VkRectLayerKHR',desc='Structure containing a rectangle, including layer, changed by vkQueuePresentKHR for a given VkImage',type='structs']
+--
+The sname:VkRectLayerKHR structure is defined as:
+
+include::{generated}/api/structs/VkRectLayerKHR.adoc[]
+
+  * pname:offset is the origin of the rectangle, in pixels.
+  * pname:extent is the size of the rectangle, in pixels.
+  * pname:layer is the layer of the image.
+    For images with only one layer, the value of pname:layer must: be 0.
+
+Some platforms allow the size of a surface to change, and then scale the
+pixels of the image to fit the surface.
+sname:VkRectLayerKHR specifies pixels of the swapchain's image(s), which
+will be constant for the life of the swapchain.
+
+.Valid Usage
+****
+  * [[VUID-VkRectLayerKHR-offset-04864]]
+    The sum of pname:offset and pname:extent, after being transformed
+    according to the pname:preTransform member of the
+    slink:VkSwapchainCreateInfoKHR structure, must: be no greater than the
+    pname:imageExtent member of the slink:VkSwapchainCreateInfoKHR structure
+    passed to flink:vkCreateSwapchainKHR
+  * [[VUID-VkRectLayerKHR-layer-01262]]
+    pname:layer must: be less than the pname:imageArrayLayers member of the
+    slink:VkSwapchainCreateInfoKHR structure passed to
+    flink:vkCreateSwapchainKHR
+****
+
+include::{generated}/validity/structs/VkRectLayerKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/capabilities.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/capabilities.adoc
new file mode 100644
index 0000000..999df37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/capabilities.adoc
@@ -0,0 +1,37 @@
+// Copyright (c) 2014-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[capabilities-object-refresh]]
+== Object Refresh Capabilities
+
+[open,refpage='vkGetPhysicalDeviceRefreshableObjectTypesKHR',desc='Query refreshable objects',type='protos']
+--
+To query the set of object types that require periodic refreshing, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceRefreshableObjectTypesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the set
+    of refreshable object types.
+  * pname:pRefreshableObjectTypeCount is a pointer to an integer related to
+    the number of refreshable object types available or queried, as
+    described below.
+  * pname:pRefreshableObjectTypes is either `NULL` or a pointer to an array
+    of elink:VkObjectType values, indicating the supported refreshable
+    object types.
+
+If pname:pRefreshableObjectTypes is `NULL`, then the number of refreshable
+object types supported for the given pname:physicalDevice is returned in
+pname:pRefreshableObjectTypeCount.
+Otherwise, pname:pRefreshableObjectTypeCount must: point to a variable set
+by the user to the number of elements in the pname:pRefreshableObjectTypes
+array, and on return the variable is overwritten with the number of object
+types actually written to pname:pRefreshableObjectTypes.
+If the value of pname:pRefreshableObjectTypeCount is less than the number of
+refreshable object types supported, at most
+pname:pRefreshableObjectTypeCount object types will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available object types were returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceRefreshableObjectTypesKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/copies.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/copies.adoc
new file mode 100644
index 0000000..d2d538a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_object_refresh/copies.adoc
@@ -0,0 +1,104 @@
+// Copyright (c) 2014-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[copies-object_refreshes]]
+== Object Refreshes
+
+Safety critical applications may: need to contend with single event upsets
+(SEUs).
+For a Vulkan object explicitly backed by device memory, such as a
+sname:VkImage or sname:VkBuffer, an application can: bind its backing memory
+to a SEU-safe heap with the ename:VK_MEMORY_HEAP_SEU_SAFE_BIT bit set.
+Alternatively, an application can: also periodically reload the non-SEU-safe
+device memory contents from a known SEU-safe portion of host memory, or
+otherwise periodically regenerate or refresh the contents of non-SEU-safe
+device memory.
+
+However, an implementation may: store implementation-specific internal
+object data in non-SEU-safe memory, and Base Vulkan provides no method to
+determine which object types this applies to or how to refresh their data.
+An application can: query the list of object types that have implementation
+internal object data stored in non-SEU-safe memory using
+flink:vkGetPhysicalDeviceRefreshableObjectTypesKHR, and can: instruct the
+implementation to refresh the internal data of specific objects from a
+backup in SEU-safe memory using the fname:vkCmdRefreshObjectsKHR command.
+
+[open,refpage='vkCmdRefreshObjectsKHR',desc='Execute a pipelined refresh of a list of objects',type='protos']
+--
+To refresh a list of objects as a pipelined operation, call:
+
+include::{generated}/api/protos/vkCmdRefreshObjectsKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pRefreshObjects is a pointer to a slink:VkRefreshObjectListKHR
+    structure specifying the list of objects to refresh.
+
+The access scope for object refreshes falls under the
+ename:VK_ACCESS_TRANSFER_WRITE_BIT, and the pipeline stages for identifying
+the synchronization scope must: include
+ename:VK_PIPELINE_STAGE_TRANSFER_BIT.
+
+[NOTE]
+.Note
+====
+If an implementation does not store a supplied object's internal data in
+SEU-susceptible memory, it may: ignore the refresh command for that object.
+====
+
+include::{generated}/validity/protos/vkCmdRefreshObjectsKHR.adoc[]
+--
+
+[open,refpage='VkRefreshObjectListKHR',desc='Structure specifying a list of objects to refresh',type='structs']
+--
+The sname:VkRefreshObjectListKHR structure is defined as:
+
+include::{generated}/api/structs/VkRefreshObjectListKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:objectCount is the number of objects to refresh.
+  * pname:pObjects is a pointer to an array of slink:VkRefreshObjectKHR
+    structures, defining the objects to refresh.
+
+include::{generated}/validity/structs/VkRefreshObjectListKHR.adoc[]
+--
+
+[open,refpage='VkRefreshObjectKHR',desc='Structure specifying an object to refresh',type='structs']
+--
+The sname:VkRefreshObjectKHR structure is defined as:
+
+include::{generated}/api/structs/VkRefreshObjectKHR.adoc[]
+
+  * pname:objectType is a elink:VkObjectType specifying the type of the
+    object to refresh.
+  * pname:objectHandle is the object to refresh.
+  * pname:flags is a bitmask of tlink:VkRefreshObjectFlagsKHR.
+
+.Valid Usage
+****
+  * [[VUID-VkRefreshObjectKHR-objectHandle-05069]]
+    pname:objectHandle must: be a valid Vulkan handle of the type associated
+    with pname:objectType as defined in the <<debugging-object-types,
+    VkObjectType and Vulkan Handle Relationship>> table
+  * [[VUID-VkRefreshObjectKHR-objectType-05070]]
+    pname:objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
+****
+
+include::{generated}/validity/structs/VkRefreshObjectKHR.adoc[]
+--
+
+[open,refpage='VkRefreshObjectFlagBitsKHR',desc='Reserved for future use',type='enums',xrefs='VkRefreshObjectKHR']
+--
+include::{generated}/api/enums/VkRefreshObjectFlagBitsKHR.adoc[]
+--
+
+[open,refpage='VkRefreshObjectFlagsKHR',desc='Reserved for future use',type='flags',xrefs='VkRefreshObjectKHR']
+--
+include::{generated}/api/flags/VkRefreshObjectFlagsKHR.adoc[]
+
+tlink:VkRefreshObjectFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/features.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/features.adoc
new file mode 100644
index 0000000..010c057
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/features.adoc
@@ -0,0 +1,31 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkPhysicalDevicePerformanceQueryFeaturesKHR',desc='Structure describing performance query support for an implementation',type='structs']
+--
+The sname:VkPhysicalDevicePerformanceQueryFeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePerformanceQueryFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+// tag::VK_KHR_performance_query-features[]
+  * [[features-performanceCounterQueryPools]]
+    pname:performanceCounterQueryPools indicates whether the implementation
+    supports performance counter query pools.
+  * [[features-performanceCounterMultipleQueryPools]]
+    pname:performanceCounterMultipleQueryPools indicates whether the
+    implementation supports using multiple performance query pools in a
+    primary command buffer and secondary command buffers executed within it.
+// end::VK_KHR_performance_query-features[]
+
+:refpage: VkPhysicalDevicePerformanceQueryFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryFeaturesKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/props.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/props.adoc
new file mode 100644
index 0000000..22ff209
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/props.adoc
@@ -0,0 +1,22 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkPhysicalDevicePerformanceQueryPropertiesKHR',desc='Structure describing performance query properties for an implementation',type='structs']
+--
+The sname:VkPhysicalDevicePerformanceQueryPropertiesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePerformanceQueryPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:allowCommandBufferQueryCopies is ename:VK_TRUE if the performance
+    query pools are allowed to be used with flink:vkCmdCopyQueryPoolResults.
+
+:refpage: VkPhysicalDevicePerformanceQueryPropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryPropertiesKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queriesperformance.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queriesperformance.adoc
new file mode 100644
index 0000000..75fcb5d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queriesperformance.adoc
@@ -0,0 +1,159 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[queries-performance]]
+== Performance Queries
+
+_Performance queries_ provide applications with a mechanism for getting
+performance counter information about the execution of command buffers,
+render passes, and commands.
+
+Each queue family advertises the performance counters that can: be queried
+on a queue of that family via a call to
+flink:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.
+Implementations may: limit access to performance counters based on platform
+requirements or only to specialized drivers for development purposes.
+
+[NOTE]
+.Note
+====
+This may include no performance counters being enumerated, or a reduced set.
+Please refer to platform-specific documentation for guidance on any such
+restrictions.
+====
+
+Performance queries use the existing flink:vkCmdBeginQuery and
+flink:vkCmdEndQuery to control what command buffers, render passes, or
+commands to get performance information for.
+
+Implementations may: require multiple passes where the command buffer,
+render passes, or commands being recorded are the same and are executed on
+the same queue to record performance counter data.
+This is achieved by submitting the same batch and providing a
+slink:VkPerformanceQuerySubmitInfoKHR structure containing a counter pass
+index.
+The number of passes required for a given performance query pool can: be
+queried via a call to
+flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
+
+[NOTE]
+.Note
+====
+Command buffers created with
+ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT must: not be re-submitted.
+Changing command buffer usage bits may: affect performance.
+To avoid this, the application should: re-record any command buffers with
+the ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT when multiple counter
+passes are required.
+====
+
+Performance counter results from a performance query pool can: be obtained
+with the command flink:vkGetQueryPoolResults.
+
+[open,refpage='VkPerformanceCounterResultKHR',desc='Union containing a performance counter result',type='structs']
+--
+The sname:VkPerformanceCounterResultKHR union is defined as:
+
+include::{generated}/api/structs/VkPerformanceCounterResultKHR.adoc[]
+
+  * pname:int32 is a 32-bit signed integer value.
+  * pname:int64 is a 64-bit signed integer value.
+  * pname:uint32 is a 32-bit unsigned integer value.
+  * pname:uint64 is a 64-bit unsigned integer value.
+  * pname:float32 is a 32-bit floating-point value.
+  * pname:float64 is a 64-bit floating-point value.
+
+Performance query results are returned in an array of
+sname:VkPerformanceCounterResultKHR unions containing the data associated
+with each counter in the query, stored in the same order as the counters
+supplied in pname:pCounterIndices when creating the performance query.
+slink:VkPerformanceCounterKHR::pname:storage specifies how to parse the
+counter data.
+
+include::{generated}/validity/structs/VkPerformanceCounterResultKHR.adoc[]
+--
+
+
+[[profiling-lock]]
+=== Profiling Lock
+
+[open,refpage='vkAcquireProfilingLockKHR',desc='Acquires the profiling lock',type='protos']
+--
+:refpage: vkAcquireProfilingLockKHR
+
+To record and submit a command buffer containing a performance query pool
+the profiling lock must: be held.
+The profiling lock must: be acquired prior to any call to
+flink:vkBeginCommandBuffer that will be using a performance query pool.
+The profiling lock must: be held while any command buffer containing a
+performance query pool is in the _recording_, _executable_, or _pending
+state_.
+To acquire the profiling lock, call:
+
+include::{generated}/api/protos/vkAcquireProfilingLockKHR.adoc[]
+
+  * pname:device is the logical device to profile.
+  * pname:pInfo is a pointer to a sname:VkAcquireProfilingLockInfoKHR
+    structure containing information about how the profiling is to be
+    acquired.
+
+Implementations may: allow multiple actors to hold the profiling lock
+concurrently.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkAcquireProfilingLockKHR.adoc[]
+--
+
+[open,refpage='VkAcquireProfilingLockInfoKHR',desc='Structure specifying parameters to acquire the profiling lock',type='structs']
+--
+The sname:VkAcquireProfilingLockInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAcquireProfilingLockInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:timeout indicates how long the function waits, in nanoseconds, if
+    the profiling lock is not available.
+
+include::{generated}/validity/structs/VkAcquireProfilingLockInfoKHR.adoc[]
+
+If pname:timeout is 0, fname:vkAcquireProfilingLockKHR will not block while
+attempting to acquire the profiling lock.
+If pname:timeout is code:UINT64_MAX, the function will not return until the
+profiling lock was acquired.
+--
+
+[open,refpage='VkAcquireProfilingLockFlagBitsKHR',desc='Reserved for future use',type='enums']
+--
+include::{generated}/api/enums/VkAcquireProfilingLockFlagBitsKHR.adoc[]
+--
+
+[open,refpage='VkAcquireProfilingLockFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAcquireProfilingLockFlagsKHR.adoc[]
+
+tlink:VkAcquireProfilingLockFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+[open,refpage='vkReleaseProfilingLockKHR',desc='Releases the profiling lock',type='protos']
+--
+To release the profiling lock, call:
+
+include::{generated}/api/protos/vkReleaseProfilingLockKHR.adoc[]
+
+  * pname:device is the logical device to cease profiling on.
+
+.Valid Usage
+****
+  * [[VUID-vkReleaseProfilingLockKHR-device-03235]]
+    The profiling lock of pname:device must: have been held via a previous
+    successful call to flink:vkAcquireProfilingLockKHR
+****
+
+include::{generated}/validity/protos/vkReleaseProfilingLockKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/querycreateinfo.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/querycreateinfo.adoc
new file mode 100644
index 0000000..37f2d40
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/querycreateinfo.adoc
@@ -0,0 +1,63 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkQueryPoolPerformanceCreateInfoKHR',desc='Structure specifying parameters of a newly created performance query pool',type='structs']
+--
+The sname:VkQueryPoolPerformanceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkQueryPoolPerformanceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queueFamilyIndex is the queue family index to create this
+    performance query pool for.
+  * pname:counterIndexCount is the length of the pname:pCounterIndices
+    array.
+  * pname:pCounterIndices is a pointer to an array of indices into the
+    flink:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR::pname:pCounters
+    to enable in this performance query pool.
+
+.Valid Usage
+****
+  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-queueFamilyIndex-03236]]
+    pname:queueFamilyIndex must: be a valid queue family index of the device
+  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-performanceCounterQueryPools-03237]]
+    The <<features-performanceCounterQueryPools,
+    pname:performanceCounterQueryPools>> feature must: be enabled
+  * [[VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-03321]]
+    Each element of pname:pCounterIndices must: be in the range of counters
+    reported by
+    fname:vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
+    for the queue family specified in pname:queueFamilyIndex
+****
+
+include::{generated}/validity/structs/VkQueryPoolPerformanceCreateInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR',desc='Reports the number of passes require for a performance query pool type',type='protos']
+--
+To query the number of passes required to query a performance query pool on
+a physical device, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose queue
+    family performance query counter properties will be queried.
+  * pname:pPerformanceQueryCreateInfo is a pointer to a
+    sname:VkQueryPoolPerformanceCreateInfoKHR of the performance query that
+    is to be created.
+  * pname:pNumPasses is a pointer to an integer related to the number of
+    passes required to query the performance query pool, as described below.
+
+The pname:pPerformanceQueryCreateInfo member
+sname:VkQueryPoolPerformanceCreateInfoKHR::pname:queueFamilyIndex must: be a
+queue family of pname:physicalDevice.
+The number of passes required to capture the counters specified in the
+pname:pPerformanceQueryCreateInfo member
+sname:VkQueryPoolPerformanceCreateInfoKHR::pname:pCounters is returned in
+pname:pNumPasses.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queuefamily.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queuefamily.adoc
new file mode 100644
index 0000000..93e4c169
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_performance_query/queuefamily.adoc
@@ -0,0 +1,187 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR',desc='Reports properties of the performance query counters available on a queue family of a device',type='protos']
+--
+:refpage: vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR
+
+To enumerate the performance query counters available on a queue family of a
+physical device, call:
+
+include::{generated}/api/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose queue
+    family performance query counter properties will be queried.
+  * pname:queueFamilyIndex is the index into the queue family of the
+    physical device we want to get properties for.
+  * pname:pCounterCount is a pointer to an integer related to the number of
+    counters available or queried, as described below.
+  * pname:pCounters is either `NULL` or a pointer to an array of
+    slink:VkPerformanceCounterKHR structures.
+  * pname:pCounterDescriptions is either `NULL` or a pointer to an array of
+    slink:VkPerformanceCounterDescriptionKHR structures.
+
+If pname:pCounters is `NULL` and pname:pCounterDescriptions is `NULL`, then
+the number of counters available is returned in pname:pCounterCount.
+Otherwise, pname:pCounterCount must: point to a variable set by the user to
+the number of elements in the pname:pCounters, pname:pCounterDescriptions,
+or both arrays and on return the variable is overwritten with the number of
+structures actually written out.
+If pname:pCounterCount is less than the number of counters available, at
+most pname:pCounterCount structures will be written, and ename:VK_INCOMPLETE
+will be returned instead of ename:VK_SUCCESS, to indicate that not all the
+available counters were returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.adoc[]
+--
+
+[open,refpage='VkPerformanceCounterKHR',desc='Structure providing information about a counter',type='structs']
+--
+The sname:VkPerformanceCounterKHR structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceCounterKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:unit is a elink:VkPerformanceCounterUnitKHR specifying the unit
+    that the counter data will record.
+  * pname:scope is a elink:VkPerformanceCounterScopeKHR specifying the scope
+    that the counter belongs to.
+  * pname:storage is a elink:VkPerformanceCounterStorageKHR specifying the
+    storage type that the counter's data uses.
+  * pname:uuid is an array of size ename:VK_UUID_SIZE, containing 8-bit
+    values that represent a universally unique identifier for the counter of
+    the physical device.
+
+include::{generated}/validity/structs/VkPerformanceCounterKHR.adoc[]
+--
+
+[open,refpage='VkPerformanceCounterUnitKHR',desc='Supported counter unit types',type='enums']
+--
+Performance counters have an associated unit.
+This unit describes how to interpret the performance counter result.
+
+The performance counter unit types which may: be returned in
+slink:VkPerformanceCounterKHR::pname:unit are:
+
+include::{generated}/api/enums/VkPerformanceCounterUnitKHR.adoc[]
+
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR - the performance counter
+    unit is a generic data point.
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR - the performance
+    counter unit is a percentage (%).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR - the performance
+    counter unit is a value of nanoseconds (ns).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR - the performance counter
+    unit is a value of bytes.
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR - the performance
+    counter unit is a value of bytes/s.
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR - the performance counter
+    unit is a temperature reported in Kelvin.
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR - the performance counter
+    unit is a value of watts (W).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR - the performance counter
+    unit is a value of volts (V).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR - the performance counter
+    unit is a value of amps (A).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR - the performance counter
+    unit is a value of hertz (Hz).
+  * ename:VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR - the performance counter
+    unit is a value of cycles.
+--
+
+[open,refpage='VkPerformanceCounterScopeKHR',desc='Supported counter scope types',type='enums']
+--
+Performance counters have an associated scope.
+This scope describes the granularity of a performance counter.
+
+The performance counter scope types which may: be returned in
+slink:VkPerformanceCounterKHR::pname:scope are:
+
+include::{generated}/api/enums/VkPerformanceCounterScopeKHR.adoc[]
+
+  * ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR - the performance
+    counter scope is a single complete command buffer.
+  * ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR - the performance
+    counter scope is zero or more complete render passes.
+    The performance query containing the performance counter must: begin and
+    end outside a render pass instance.
+  * ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR - the performance counter
+    scope is zero or more commands.
+--
+
+[open,refpage='VkPerformanceCounterStorageKHR',desc='Supported counter storage types',type='enums']
+--
+Performance counters have an associated storage.
+This storage describes the payload of a counter result.
+
+The performance counter storage types which may: be returned in
+slink:VkPerformanceCounterKHR::pname:storage are:
+
+include::{generated}/api/enums/VkPerformanceCounterStorageKHR.adoc[]
+
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR - the performance counter
+    storage is a 32-bit signed integer.
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR - the performance counter
+    storage is a 64-bit signed integer.
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR - the performance
+    counter storage is a 32-bit unsigned integer.
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR - the performance
+    counter storage is a 64-bit unsigned integer.
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR - the performance
+    counter storage is a 32-bit floating-point.
+  * ename:VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR - the performance
+    counter storage is a 64-bit floating-point.
+--
+
+[open,refpage='VkPerformanceCounterDescriptionKHR',desc='Structure providing more detailed information about a counter',type='structs']
+--
+The sname:VkPerformanceCounterDescriptionKHR structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceCounterDescriptionKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of
+    elink:VkPerformanceCounterDescriptionFlagBitsKHR indicating the usage
+    behavior for the counter.
+  * pname:name is an array of size ename:VK_MAX_DESCRIPTION_SIZE, containing
+    a null-terminated UTF-8 string specifying the name of the counter.
+  * pname:category is an array of size ename:VK_MAX_DESCRIPTION_SIZE,
+    containing a null-terminated UTF-8 string specifying the category of the
+    counter.
+  * pname:description is an array of size ename:VK_MAX_DESCRIPTION_SIZE,
+    containing a null-terminated UTF-8 string specifying the description of
+    the counter.
+
+include::{generated}/validity/structs/VkPerformanceCounterDescriptionKHR.adoc[]
+--
+
+[open,refpage='VkPerformanceCounterDescriptionFlagBitsKHR',desc='Bitmask specifying usage behavior for a counter',type='enums']
+--
+Bits which can: be set in
+slink:VkPerformanceCounterDescriptionKHR::pname:flags, specifying usage
+behavior of a performance counter, are:
+
+include::{generated}/api/enums/VkPerformanceCounterDescriptionFlagBitsKHR.adoc[]
+
+  * ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR
+    specifies that recording the counter may: have a noticeable performance
+    impact.
+  * ename:VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR
+    specifies that concurrently recording the counter while other submitted
+    command buffers are running may: impact the accuracy of the recording.
+--
+
+[open,refpage='VkPerformanceCounterDescriptionFlagsKHR',desc='Bitmask of VkPerformanceCounterDescriptionFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkPerformanceCounterDescriptionFlagsKHR.adoc[]
+
+tlink:VkPerformanceCounterDescriptionFlagsKHR is a bitmask type for setting
+a mask of zero or more elink:VkPerformanceCounterDescriptionFlagBitsKHR.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/WaitForPresent.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/WaitForPresent.adoc
new file mode 100644
index 0000000..aa56555
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/WaitForPresent.adoc
@@ -0,0 +1,69 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkWaitForPresentKHR',desc='Wait for presentation',type='protos']
+--
+When the <<features-presentWait, pname:presentWait>> feature is enabled, an
+application can: wait for an image to be presented to the user by first
+specifying a presentId for the target presentation by adding a
+sname:VkPresentIdKHR structure to the pname:pNext chain of the
+slink:VkPresentInfoKHR structure and then waiting for that presentation to
+complete by calling:
+
+include::{generated}/api/protos/vkWaitForPresentKHR.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the non-retired swapchain on which an image was
+    queued for presentation.
+  * pname:presentId is the presentation presentId to wait for.
+  * pname:timeout is the timeout period in units of nanoseconds.
+    pname:timeout is adjusted to the closest value allowed by the
+    implementation-dependent timeout accuracy, which may: be substantially
+    longer than one nanosecond, and may: be longer than the requested
+    period.
+
+fname:vkWaitForPresentKHR waits for the presentId associated with
+pname:swapchain to be increased in value so that it is at least equal to
+pname:presentId.
+
+For ename:VK_PRESENT_MODE_MAILBOX_KHR (or other present mode where images
+may be replaced in the presentation queue) any wait of this type associated
+with such an image must: be signaled no later than a wait associated with
+the replacing image would be signaled.
+
+When the presentation has completed, the presentId associated with the
+related pname:pSwapchains entry will be increased in value so that it is at
+least equal to the value provided in the sname:VkPresentIdKHR structure.
+
+There is no requirement for any precise timing relationship between the
+presentation of the image to the user and the update of the presentId value,
+but implementations should: make this as close as possible to the
+presentation of the first pixel in the next image being presented to the
+user.
+
+The call to fname:vkWaitForPresentKHR will block until either the presentId
+associated with pname:swapchain is greater than or equal to pname:presentId,
+or pname:timeout nanoseconds passes.
+When the swapchain becomes OUT_OF_DATE, the call will either return
+ename:VK_SUCCESS (if the image was delivered to the presentation engine and
+may have been presented to the user) or will return early with status
+ename:VK_ERROR_OUT_OF_DATE_KHR (if the image was not presented to the user).
+
+As an exception to the normal rules for objects which are externally
+synchronized, the pname:swapchain passed to fname:vkWaitForPresentKHR may:
+be simultaneously used by other threads in calls to functions other than
+flink:vkDestroySwapchainKHR.
+Access to the swapchain data associated with this extension must: be atomic
+within the implementation.
+
+.Valid Usage
+****
+  * [[VUID-vkWaitForPresentKHR-swapchain-04997]]
+    pname:swapchain must: not be in the retired state
+  * [[VUID-vkWaitForPresentKHR-presentWait-06234]]
+    The <<features-presentWait, pname:presentWait>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkWaitForPresentKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/present_wait.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/present_wait.adoc
new file mode 100644
index 0000000..e5e53d9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_present_wait/present_wait.adoc
@@ -0,0 +1,36 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[present-wait]]
+== Present Wait
+
+Applications wanting to control the pacing of the application by monitoring
+when presentation processes have completed to limit the number of
+outstanding images queued for presentation, need to have a method of being
+signaled during the presentation process.
+
+ifdef::VK_GOOGLE_display_timing,VK_KHR_present_timing[]
+Using
+ifdef::VK_KHR_present_timing[]
+the `apiext:VK_KHR_present_timing` extension
+ifdef::VK_GOOGLE_display_timing[or]
+endif::VK_KHR_present_timing[]
+ifdef::VK_GOOGLE_display_timing[]
+the `apiext:VK_GOOGLE_display_timing` extension
+endif::VK_GOOGLE_display_timing[]
+applications can discover when images were presented, but only
+asynchronously.
+endif::VK_GOOGLE_display_timing,VK_KHR_present_timing[]
+
+Providing a mechanism which allows applications to block, waiting for a
+specific step of the presentation process to complete allows them to control
+the amount of outstanding work (and hence the potential lag in responding to
+user input or changes in the rendering environment).
+
+The `apiext:VK_KHR_present_wait` extension allows applications to tell the
+presentation engine at the flink:vkQueuePresentKHR call that it plans on
+waiting for presentation by passing a slink:VkPresentIdKHR structure.
+The pname:presentId passed in that structure may then be passed to a future
+flink:vkWaitForPresentKHR call to cause the application to block until that
+presentation is finished.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_shared_presentable_image/wsi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_shared_presentable_image/wsi.adoc
new file mode 100644
index 0000000..af0cfbd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_shared_presentable_image/wsi.adoc
@@ -0,0 +1,85 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+If a swapchain is created with pname:presentMode set to either
+ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, a single presentable
+image can: be acquired, referred to as a shared presentable image.
+A shared presentable image may: be concurrently accessed by the application
+and the presentation engine, without transitioning the image's layout after
+it is initially presented.
+
+  * With ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, the presentation
+    engine is only required to update to the latest contents of a shared
+    presentable image after a present.
+    The application must: call fname:vkQueuePresentKHR to guarantee an
+    update.
+    However, the presentation engine may: update from it at any time.
+  * With ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, the
+    presentation engine will automatically present the latest contents of a
+    shared presentable image during every refresh cycle.
+    The application is only required to make one initial call to
+    fname:vkQueuePresentKHR, after which the presentation engine will update
+    from it without any need for further present calls.
+    The application can: indicate the image contents have been updated by
+    calling fname:vkQueuePresentKHR, but this does not guarantee the timing
+    of when updates will occur.
+
+The presentation engine may: access a shared presentable image at any time
+after it is first presented.
+To avoid tearing, an application should: coordinate access with the
+presentation engine.
+This requires presentation engine timing information through
+platform-specific mechanisms and ensuring that color attachment writes are
+made available during the portion of the presentation engine's refresh cycle
+they are intended for.
+
+[NOTE]
+.Note
+====
+The `apiext:VK_KHR_shared_presentable_image` extension does not provide
+functionality for determining the timing of the presentation engine's
+refresh cycles.
+====
+
+[open,refpage='vkGetSwapchainStatusKHR',desc='Get a swapchain\'s status',type='protos']
+--
+:refpage: vkGetSwapchainStatusKHR
+
+In order to query a swapchain's status when rendering to a shared
+presentable image, call:
+include::{generated}/api/protos/vkGetSwapchainStatusKHR.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to query.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetSwapchainStatusKHR.adoc[]
+--
+
+The possible return values for fname:vkGetSwapchainStatusKHR should: be
+interpreted as follows:
+
+  * ename:VK_SUCCESS specifies the presentation engine is presenting the
+    contents of the shared presentable image, as per the swapchain's
+    elink:VkPresentModeKHR.
+  * ename:VK_SUBOPTIMAL_KHR the swapchain no longer matches the surface
+    properties exactly, but the presentation engine is presenting the
+    contents of the shared presentable image, as per the swapchain's
+    elink:VkPresentModeKHR.
+  * ename:VK_ERROR_OUT_OF_DATE_KHR the surface has changed in such a way
+    that it is no longer compatible with the swapchain.
+  * ename:VK_ERROR_SURFACE_LOST_KHR the surface is no longer available.
+
+[NOTE]
+.Note
+====
+The swapchain state may: be cached by implementations, so applications
+should: regularly call fname:vkGetSwapchainStatusKHR when using a swapchain
+with elink:VkPresentModeKHR set to
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
+====
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_surface/wsi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_surface/wsi.adoc
new file mode 100644
index 0000000..628279f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_surface/wsi.adoc
@@ -0,0 +1,1938 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[wsi]]
+= Window System Integration (WSI)
+
+This chapter discusses the window system integration (WSI) between the
+Vulkan API and the various forms of displaying the results of rendering to a
+user.
+Since the Vulkan API can: be used without displaying results, WSI is
+provided through the use of optional Vulkan extensions.
+This chapter provides an overview of WSI.
+See the appendix for additional details of each WSI extension, including
+which extensions must: be enabled in order to use each of the functions
+described in this chapter.
+
+
+== WSI Platform
+
+A platform is an abstraction for a window system, OS, etc.
+Some examples include MS Windows, Android, and Wayland.
+The Vulkan API may: be integrated in a unique manner for each platform.
+
+The Vulkan API does not define any type of platform object.
+Platform-specific WSI extensions are defined, each containing
+platform-specific functions for using WSI.
+Use of these extensions is guarded by preprocessor symbols as defined in the
+<<boilerplate-wsi-header,Window System-Specific Header Control>> appendix.
+
+In order for an application to be compiled to use WSI with a given platform,
+it must either:
+
+  * `#define` the appropriate preprocessor symbol prior to including the
+    `{full_header}` header file, or
+  * include `{core_header}` and any native platform headers, followed by the
+    appropriate platform-specific header.
+
+The preprocessor symbols and platform-specific headers are defined in the
+<<boilerplate-wsi-header-table, Window System Extensions and Headers>>
+table.
+
+Each platform-specific extension is an instance extension.
+The application must: enable instance extensions with fname:vkCreateInstance
+before using them.
+
+
+== WSI Surface
+
+[open,refpage='VkSurfaceKHR',desc='Opaque handle to a surface object',type='handles']
+--
+Native platform surface or window objects are abstracted by surface objects,
+which are represented by sname:VkSurfaceKHR handles:
+
+include::{generated}/api/handles/VkSurfaceKHR.adoc[]
+
+The `apiext:VK_KHR_surface` extension declares the sname:VkSurfaceKHR
+object, and provides a function for destroying sname:VkSurfaceKHR objects.
+Separate platform-specific extensions each provide a function for creating a
+sname:VkSurfaceKHR object for the respective platform.
+From the application's perspective this is an opaque handle, just like the
+handles of other Vulkan objects.
+
+ifdef::implementation-guide[]
+[NOTE]
+.Note
+====
+On certain platforms, the Vulkan loader and ICDs may: have conventions that
+treat the handle as a pointer to a structure containing the
+platform-specific information about the surface.
+This will be described in the documentation for the loader-ICD interface,
+and in the `vk_icd.h` header file of the LoaderAndTools source-code
+repository.
+This does not affect the loader-layer interface; layers may: wrap
+sname:VkSurfaceKHR objects.
+====
+endif::implementation-guide[]
+--
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+TODO: Consider replacing the above note editing note with a pointer to the
+loader specification, when it exists.
+However, the information is not relevant to users of the API nor does it
+affect conformance of a Vulkan implementation.
+====
+endif::editing-notes[]
+
+ifdef::VK_KHR_android_surface[]
+include::{chapters}/VK_KHR_android_surface/platformCreateSurface_android.adoc[]
+endif::VK_KHR_android_surface[]
+
+ifdef::VK_KHR_wayland_surface[]
+include::{chapters}/VK_KHR_wayland_surface/platformCreateSurface_wayland.adoc[]
+endif::VK_KHR_wayland_surface[]
+
+ifdef::VK_KHR_win32_surface[]
+include::{chapters}/VK_KHR_win32_surface/platformCreateSurface_win32.adoc[]
+endif::VK_KHR_win32_surface[]
+
+ifdef::VK_KHR_xcb_surface[]
+include::{chapters}/VK_KHR_xcb_surface/platformCreateSurface_xcb.adoc[]
+endif::VK_KHR_xcb_surface[]
+
+ifdef::VK_KHR_xlib_surface[]
+include::{chapters}/VK_KHR_xlib_surface/platformCreateSurface_xlib.adoc[]
+endif::VK_KHR_xlib_surface[]
+
+ifdef::VK_EXT_directfb_surface[]
+include::{chapters}/VK_EXT_directfb_surface/platformCreateSurface_directfb.adoc[]
+endif::VK_EXT_directfb_surface[]
+
+ifdef::VK_FUCHSIA_imagepipe_surface[]
+include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.adoc[]
+endif::VK_FUCHSIA_imagepipe_surface[]
+
+ifdef::VK_GGP_stream_descriptor_surface[]
+include::{chapters}/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.adoc[]
+endif::VK_GGP_stream_descriptor_surface[]
+
+ifdef::VK_MVK_ios_surface[]
+include::{chapters}/VK_MVK_ios_surface/platformCreateSurface_ios.adoc[]
+endif::VK_MVK_ios_surface[]
+
+ifdef::VK_MVK_macos_surface[]
+include::{chapters}/VK_MVK_macos_surface/platformCreateSurface_macos.adoc[]
+endif::VK_MVK_macos_surface[]
+
+ifdef::VK_NN_vi_surface[]
+include::{chapters}/VK_NN_vi_surface/platformCreateSurface_vi.adoc[]
+endif::VK_NN_vi_surface[]
+
+ifdef::VK_EXT_metal_surface[]
+include::{chapters}/VK_EXT_metal_surface/platformCreateSurface_metal.adoc[]
+endif::VK_EXT_metal_surface[]
+
+ifdef::VK_QNX_screen_surface[]
+include::{chapters}/VK_QNX_screen_surface/platformCreateSurface_screen.adoc[]
+endif::VK_QNX_screen_surface[]
+
+
+=== Platform-Independent Information
+
+Once created, sname:VkSurfaceKHR objects can: be used in this and other
+extensions, in particular the `apiext:VK_KHR_swapchain` extension.
+
+Several WSI functions return ename:VK_ERROR_SURFACE_LOST_KHR if the surface
+becomes no longer available.
+After such an error, the surface (and any child swapchain, if one exists)
+should: be destroyed, as there is no way to restore them to a not-lost
+state.
+Applications may: attempt to create a new sname:VkSurfaceKHR using the same
+native platform window object, but whether such re-creation will succeed is
+platform-dependent and may: depend on the reason the surface became
+unavailable.
+A lost surface does not otherwise cause devices to be
+<<devsandqueues-lost-device,lost>>.
+
+[open,refpage='vkDestroySurfaceKHR',desc='Destroy a VkSurfaceKHR object',type='protos']
+--
+To destroy a sname:VkSurfaceKHR object, call:
+
+include::{generated}/api/protos/vkDestroySurfaceKHR.adoc[]
+
+  * pname:instance is the instance used to create the surface.
+  * pname:surface is the surface to destroy.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+
+Destroying a sname:VkSurfaceKHR merely severs the connection between Vulkan
+and the native surface, and does not imply destroying the native surface,
+closing a window, or similar behavior.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroySurfaceKHR-surface-01266]]
+    All sname:VkSwapchainKHR objects created for pname:surface must: have
+    been destroyed prior to destroying pname:surface
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroySurfaceKHR-surface-01267]]
+    If sname:VkAllocationCallbacks were provided when pname:surface was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroySurfaceKHR-surface-01268]]
+    If no sname:VkAllocationCallbacks were provided when pname:surface was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroySurfaceKHR.adoc[]
+--
+
+ifdef::VK_KHR_display[]
+include::{chapters}/VK_KHR_display/display.adoc[]
+endif::VK_KHR_display[]
+
+ifdef::VK_EXT_headless_surface[]
+include::{chapters}/VK_EXT_headless_surface/headless.adoc[]
+endif::VK_EXT_headless_surface[]
+
+
+== Querying for WSI Support
+
+Not all physical devices will include WSI support.
+Within a physical device, not all queue families will support presentation.
+WSI support and compatibility can: be determined in a platform-neutral
+manner (which determines support for presentation to a particular surface
+object) and additionally may: be determined in platform-specific manners
+(which determine support for presentation on the specified physical device
+but do not guarantee support for presentation to a particular surface
+object).
+
+[open,refpage='vkGetPhysicalDeviceSurfaceSupportKHR',desc='Query if presentation is supported',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceSupportKHR
+
+To determine whether a queue family of a physical device supports
+presentation to a given surface, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceSupportKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family.
+  * pname:surface is the surface.
+  * pname:pSupported is a pointer to a basetype:VkBool32, which is set to
+    ename:VK_TRUE to indicate support, and ename:VK_FALSE otherwise.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceSupportKHR.adoc[]
+--
+
+ifdef::VK_KHR_android_surface[]
+include::{chapters}/VK_KHR_android_surface/platformQuerySupport_android.adoc[]
+endif::VK_KHR_android_surface[]
+
+ifdef::VK_KHR_wayland_surface[]
+include::{chapters}/VK_KHR_wayland_surface/platformQuerySupport_wayland.adoc[]
+endif::VK_KHR_wayland_surface[]
+
+ifdef::VK_KHR_win32_surface[]
+include::{chapters}/VK_KHR_win32_surface/platformQuerySupport_win32.adoc[]
+endif::VK_KHR_win32_surface[]
+
+ifdef::VK_KHR_xcb_surface[]
+include::{chapters}/VK_KHR_xcb_surface/platformQuerySupport_xcb.adoc[]
+endif::VK_KHR_xcb_surface[]
+
+ifdef::VK_KHR_xlib_surface[]
+include::{chapters}/VK_KHR_xlib_surface/platformQuerySupport_xlib.adoc[]
+endif::VK_KHR_xlib_surface[]
+
+ifdef::VK_EXT_directfb_surface[]
+include::{chapters}/VK_EXT_directfb_surface/platformQuerySupport_directfb.adoc[]
+endif::VK_EXT_directfb_surface[]
+
+ifdef::VK_FUCHSIA_imagepipe_surface[]
+include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.adoc[]
+endif::VK_FUCHSIA_imagepipe_surface[]
+
+ifdef::VK_GGP_stream_descriptor_surface[]
+include::{chapters}/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.adoc[]
+endif::VK_GGP_stream_descriptor_surface[]
+
+ifdef::VK_MVK_ios_surface[]
+include::{chapters}/VK_MVK_ios_surface/platformQuerySupport_ios.adoc[]
+endif::VK_MVK_ios_surface[]
+
+ifdef::VK_MVK_macos_surface[]
+include::{chapters}/VK_MVK_macos_surface/platformQuerySupport_macos.adoc[]
+endif::VK_MVK_macos_surface[]
+
+ifdef::VK_NN_vi_surface[]
+include::{chapters}/VK_NN_vi_surface/platformQuerySupport_vi.adoc[]
+endif::VK_NN_vi_surface[]
+
+ifdef::VK_QNX_screen_surface[]
+include::{chapters}/VK_QNX_screen_surface/platformQuerySupport_screen.adoc[]
+endif::VK_QNX_screen_surface[]
+
+
+== Surface Queries
+
+The capabilities of a swapchain targeting a surface are the intersection of
+the capabilities of the WSI platform, the native window or display, and the
+physical device.
+The resulting capabilities can: be obtained with the queries listed below in
+this section.
+
+[NOTE]
+.Note
+====
+In addition to the surface capabilities as obtained by surface queries
+below, swapchain images are also subject to ordinary image creation limits
+as reported by flink:vkGetPhysicalDeviceImageFormatProperties.
+As an application is instructed by the appropriate Valid Usage sections,
+both the surface capabilities and the image creation limits have to be
+satisfied whenever swapchain images are created.
+====
+
+
+=== Surface Capabilities
+
+[open,refpage='vkGetPhysicalDeviceSurfaceCapabilitiesKHR',desc='Query surface capabilities',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+
+To query the basic capabilities of a surface, needed in order to create a
+swapchain, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:surface is the surface that will be associated with the swapchain.
+  * pname:pSurfaceCapabilities is a pointer to a
+    slink:VkSurfaceCapabilitiesKHR structure in which the capabilities are
+    returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkSurfaceCapabilitiesKHR',desc='Structure describing capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilitiesKHR.adoc[]
+
+// These members are defined identically in VkSurfaceCapabilities2EXT, an
+// extendable structure version of this query, so they are just reused from
+// here.
+
+// tag::surface_capabilities_members[]
+  * pname:minImageCount is the minimum number of images the specified device
+    supports for a swapchain created for the surface, and will be at least
+    one.
+  * pname:maxImageCount is the maximum number of images the specified device
+    supports for a swapchain created for the surface, and will be either 0,
+    or greater than or equal to pname:minImageCount.
+    A value of 0 means that there is no limit on the number of images,
+    though there may: be limits related to the total amount of memory used
+    by presentable images.
+  * pname:currentExtent is the current width and height of the surface, or
+    the special value [eq]#(0xFFFFFFFF, 0xFFFFFFFF)# indicating that the
+    surface size will be determined by the extent of a swapchain targeting
+    the surface.
+  * pname:minImageExtent contains the smallest valid swapchain extent for
+    the surface on the specified device.
+    The pname:width and pname:height of the extent will each be less than or
+    equal to the corresponding pname:width and pname:height of
+    pname:currentExtent, unless pname:currentExtent has the special value
+    described above.
+  * pname:maxImageExtent contains the largest valid swapchain extent for the
+    surface on the specified device.
+    The pname:width and pname:height of the extent will each be greater than
+    or equal to the corresponding pname:width and pname:height of
+    pname:minImageExtent.
+    The pname:width and pname:height of the extent will each be greater than
+    or equal to the corresponding pname:width and pname:height of
+    pname:currentExtent, unless pname:currentExtent has the special value
+    described above.
+  * pname:maxImageArrayLayers is the maximum number of layers presentable
+    images can: have for a swapchain created for this device and surface,
+    and will be at least one.
+  * pname:supportedTransforms is a bitmask of
+    elink:VkSurfaceTransformFlagBitsKHR indicating the presentation
+    transforms supported for the surface on the specified device.
+    At least one bit will be set.
+  * pname:currentTransform is elink:VkSurfaceTransformFlagBitsKHR value
+    indicating the surface's current transform relative to the presentation
+    engine's natural orientation.
+  * pname:supportedCompositeAlpha is a bitmask of
+    elink:VkCompositeAlphaFlagBitsKHR, representing the alpha compositing
+    modes supported by the presentation engine for the surface on the
+    specified device, and at least one bit will be set.
+    Opaque composition can: be achieved in any alpha compositing mode by
+    either using an image format that has no alpha component, or by ensuring
+    that all pixels in the presentable images have an alpha value of 1.0.
+  * pname:supportedUsageFlags is a bitmask of elink:VkImageUsageFlagBits
+    representing the ways the application can: use the presentable images of
+    a swapchain created
+ifdef::VK_KHR_shared_presentable_image[]
+    with elink:VkPresentModeKHR set to ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
+    ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR
+endif::VK_KHR_shared_presentable_image[]
+    for the surface on the specified device.
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set.
+    Implementations may: support additional usages.
+// end::surface_capabilities_members[]
+
+ifdef::VK_KHR_shared_presentable_image[]
+[NOTE]
+.Note
+====
+Supported usage flags of a presentable image when using
+ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR presentation mode are
+provided by
+slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags.
+====
+endif::VK_KHR_shared_presentable_image[]
+
+[NOTE]
+.Note
+====
+Formulas such as [eq]#min(N, pname:maxImageCount)# are not correct, since
+pname:maxImageCount may: be zero.
+====
+
+include::{generated}/validity/structs/VkSurfaceCapabilitiesKHR.adoc[]
+--
+
+ifdef::VK_KHR_get_surface_capabilities2[]
+[open,refpage='vkGetPhysicalDeviceSurfaceCapabilities2KHR',desc='Reports capabilities of a surface on a physical device',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceCapabilities2KHR
+
+To query the basic capabilities of a surface defined by the core or
+extensions, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:pSurfaceInfo is a pointer to a
+    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
+    and other fixed parameters that would be consumed by
+    flink:vkCreateSwapchainKHR.
+  * pname:pSurfaceCapabilities is a pointer to a
+    slink:VkSurfaceCapabilities2KHR structure in which the capabilities are
+    returned.
+
+fname:vkGetPhysicalDeviceSurfaceCapabilities2KHR behaves similarly to
+flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to specify
+extended inputs via chained input structures, and to return extended
+information via chained output structures.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_info_physical_device_surfaceless_common.adoc[]
+ifdef::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
+  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-02671]]
+    If a slink:VkSurfaceCapabilitiesFullScreenExclusiveEXT structure is
+    included in the pname:pNext chain of pname:pSurfaceCapabilities, a
+    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
+    included in the pname:pNext chain of pname:pSurfaceInfo
+endif::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
+ifdef::VK_EXT_surface_maintenance1[]
+  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07776]]
+    If a slink:VkSurfacePresentModeCompatibilityEXT structure is included in
+    the pname:pNext chain of pname:pSurfaceCapabilities, a
+    slink:VkSurfacePresentModeEXT structure must: be included in the
+    pname:pNext chain of pname:pSurfaceInfo
+  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07777]]
+    If a slink:VkSurfacePresentScalingCapabilitiesEXT structure is included
+    in the pname:pNext chain of pname:pSurfaceCapabilities, a
+    slink:VkSurfacePresentModeEXT structure must: be included in the
+    pname:pNext chain of pname:pSurfaceInfo
+ifdef::VK_GOOGLE_surfaceless_query[]
+  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07778]]
+    If a slink:VkSurfacePresentModeCompatibilityEXT structure is included in
+    the pname:pNext chain of pname:pSurfaceCapabilities,
+    pname:pSurfaceInfo->surface must: be a valid slink:VkSurfaceKHR handle
+  * [[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07779]]
+    If a slink:VkSurfacePresentScalingCapabilitiesEXT structure is included
+    in the pname:pNext chain of pname:pSurfaceCapabilities,
+    pname:pSurfaceInfo->surface must: be a valid slink:VkSurfaceKHR handle
+endif::VK_GOOGLE_surfaceless_query[]
+endif::VK_EXT_surface_maintenance1[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceSurfaceInfo2KHR',desc='Structure specifying a surface and related swapchain creation parameters',type='structs']
+--
+The sname:VkPhysicalDeviceSurfaceInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSurfaceInfo2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:surface is the surface that will be associated with the swapchain.
+
+The members of sname:VkPhysicalDeviceSurfaceInfo2KHR correspond to the
+arguments to flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with
+pname:sType and pname:pNext added for extensibility.
+
+ifdef::VK_EXT_full_screen_exclusive[]
+Additional capabilities of a surface may: be available to swapchains created
+with different full-screen exclusive settings - particularly if exclusive
+full-screen access is application controlled.
+These additional capabilities can: be queried by adding a
+slink:VkSurfaceFullScreenExclusiveInfoEXT structure to the pname:pNext chain
+of this structure when used to query surface properties.
+ifdef::VK_KHR_win32_surface[]
+Additionally, for Win32 surfaces with application controlled exclusive
+full-screen access, chaining a
+slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure may: also report
+additional surface capabilities.
+endif::VK_KHR_win32_surface[]
+These additional capabilities only apply to swapchains created with the same
+parameters included in the pname:pNext chain of
+slink:VkSwapchainCreateInfoKHR.
+endif::VK_EXT_full_screen_exclusive[]
+
+.Valid Usage
+****
+ifdef::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[]
+  * [[VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-02672]]
+    If the pname:pNext chain includes a
+    slink:VkSurfaceFullScreenExclusiveInfoEXT structure with its
+    pname:fullScreenExclusive member set to
+    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and
+    pname:surface was created using flink:vkCreateWin32SurfaceKHR, a
+    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
+    included in the pname:pNext chain
+endif::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[]
+ifdef::VK_GOOGLE_surfaceless_query[]
+  * [[VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-07919]]
+    If the `apiext:VK_GOOGLE_surfaceless_query` extension is not enabled,
+    pname:surface must: be a valid slink:VkSurfaceKHR handle
+endif::VK_GOOGLE_surfaceless_query[]
+ifndef::VK_GOOGLE_surfaceless_query[]
+  * [[VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-06529]]
+    pname:surface must: be a valid slink:VkSurfaceKHR handle
+endif::VK_GOOGLE_surfaceless_query[]
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceSurfaceInfo2KHR.adoc[]
+--
+
+ifdef::VK_EXT_full_screen_exclusive[]
+[open,refpage='VkSurfaceFullScreenExclusiveInfoEXT',desc='Structure specifying the preferred full-screen transition behavior',type='structs']
+--
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
+sname:VkSurfaceFullScreenExclusiveInfoEXT structure, then that structure
+specifies the application's preferred full-screen transition behavior.
+
+The sname:VkSurfaceFullScreenExclusiveInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceFullScreenExclusiveInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fullScreenExclusive is a elink:VkFullScreenExclusiveEXT value
+    specifying the preferred full-screen transition behavior.
+
+If this structure is not present, pname:fullScreenExclusive is considered to
+be ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT.
+
+include::{generated}/validity/structs/VkSurfaceFullScreenExclusiveInfoEXT.adoc[]
+--
+
+[open,refpage='VkFullScreenExclusiveEXT',desc='Hint values an application can specify affecting full-screen transition behavior',type='enums']
+--
+Possible values of
+sname:VkSurfaceFullScreenExclusiveInfoEXT::pname:fullScreenExclusive are:
+
+include::{generated}/api/enums/VkFullScreenExclusiveEXT.adoc[]
+
+  * ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT indicates the implementation
+    should: determine the appropriate full-screen method by whatever means
+    it deems appropriate.
+  * ename:VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT indicates the implementation
+    may: use full-screen exclusive mechanisms when available.
+    Such mechanisms may: result in better performance and/or the
+    availability of different presentation capabilities, but may: require a
+    more disruptive transition during swapchain initialization, first
+    presentation and/or destruction.
+  * ename:VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT indicates the
+    implementation should: avoid using full-screen mechanisms which rely on
+    disruptive transitions.
+  * ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT indicates the
+    application will manage full-screen exclusive mode by using the
+    flink:vkAcquireFullScreenExclusiveModeEXT and
+    flink:vkReleaseFullScreenExclusiveModeEXT commands.
+--
+
+ifdef::VK_KHR_win32_surface[]
+[open,refpage='VkSurfaceFullScreenExclusiveWin32InfoEXT',desc='Structure specifying additional creation parameters specific to Win32 fullscreen exclusive mode',type='structs']
+--
+The sname:VkSurfaceFullScreenExclusiveWin32InfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceFullScreenExclusiveWin32InfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:hmonitor is the Win32 code:HMONITOR handle identifying the display
+    to create the surface with.
+
+[NOTE]
+.Note
+====
+If pname:hmonitor is invalidated (e.g. the monitor is unplugged) during the
+lifetime of a swapchain created with this structure, operations on that
+swapchain will return ename:VK_ERROR_OUT_OF_DATE_KHR.
+====
+
+[NOTE]
+.Note
+====
+It is the responsibility of the application to change the display settings
+of the targeted Win32 display using the appropriate platform APIs.
+Such changes may: alter the surface capabilities reported for the created
+surface.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-hmonitor-02673]]
+    pname:hmonitor must: be a valid code:HMONITOR
+****
+
+include::{generated}/validity/structs/VkSurfaceFullScreenExclusiveWin32InfoEXT.adoc[]
+--
+endif::VK_KHR_win32_surface[]
+endif::VK_EXT_full_screen_exclusive[]
+
+[open,refpage='VkSurfaceCapabilities2KHR',desc='Structure describing capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilities2KHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilities2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:surfaceCapabilities is a slink:VkSurfaceCapabilitiesKHR structure
+    describing the capabilities of the specified surface.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+If the `apiext:VK_GOOGLE_surfaceless_query` extension is enabled and
+slink:VkPhysicalDeviceSurfaceInfo2KHR::pname:surface in the
+flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR call is
+dlink:VK_NULL_HANDLE, the values returned in pname:minImageCount,
+pname:maxImageCount, pname:currentExtent, and pname:currentTransform will
+not reflect that of any surface and will instead be as such:
+
+  * pname:minImageCount and pname:maxImageCount will be [eq]#0xFFFFFFFF#
+  * pname:currentExtent will be [eq]#(0xFFFFFFFF, 0xFFFFFFFF)#
+  * pname:currentTransform will be
+    ename:VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
+endif::VK_GOOGLE_surfaceless_query[]
+
+include::{generated}/validity/structs/VkSurfaceCapabilities2KHR.adoc[]
+--
+
+ifdef::VK_KHR_surface_protected_capabilities[]
+[open,refpage='VkSurfaceProtectedCapabilitiesKHR',desc='Structure describing capability of a surface to be protected',type='structs']
+--
+An application queries if a protected slink:VkSurfaceKHR is displayable on a
+specific windowing system using sname:VkSurfaceProtectedCapabilitiesKHR,
+which can: be passed in pname:pNext parameter of
+sname:VkSurfaceCapabilities2KHR.
+
+The sname:VkSurfaceProtectedCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceProtectedCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:supportsProtected specifies whether a protected swapchain created
+    from slink:VkPhysicalDeviceSurfaceInfo2KHR::pname:surface for a
+    particular windowing system can: be displayed on screen or not.
+    If pname:supportsProtected is ename:VK_TRUE, then creation of swapchains
+    with the ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR flag set must: be
+    supported for pname:surface.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+If the `apiext:VK_GOOGLE_surfaceless_query` extension is enabled, the value
+returned in pname:supportsProtected will be identical for every valid
+surface created on this physical device, and so in the
+flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR call,
+slink:VkPhysicalDeviceSurfaceInfo2KHR::pname:surface can: be
+dlink:VK_NULL_HANDLE.
+In that case, the contents of
+slink:VkSurfaceCapabilities2KHR::pname:surfaceCapabilities as well as any
+other struct chained to it will be undefined:.
+endif::VK_GOOGLE_surfaceless_query[]
+
+include::{generated}/validity/structs/VkSurfaceProtectedCapabilitiesKHR.adoc[]
+--
+endif::VK_KHR_surface_protected_capabilities[]
+
+ifdef::VK_EXT_surface_maintenance1[]
+[open,refpage='VkSurfacePresentScalingCapabilitiesEXT',desc='Structure describing the presentation scaling capabilities of the surface',type='structs']
+--
+The sname:VkSurfacePresentScalingCapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfacePresentScalingCapabilitiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:supportedPresentScaling is a bitmask of
+    elink:VkPresentScalingFlagBitsEXT representing the scaling methods
+    supported by the surface, or `0` if application-defined scaling is not
+    supported.
+  * pname:supportedPresentGravityX is a bitmask of
+    elink:VkPresentGravityFlagBitsEXT representing the X-axis pixel gravity
+    supported by the surface, or `0` if Vulkan-defined pixel gravity is not
+    supported for the X axis.
+  * pname:supportedPresentGravityY is a bitmask of
+    elink:VkPresentGravityFlagBitsEXT representing the Y-axis pixel gravity
+    supported by the surface, or `0` if Vulkan-defined pixel gravity is not
+    supported for the Y axis.
+  * pname:minScaledImageExtent contains the smallest valid swapchain extent
+    for the surface on the specified device when one of the scaling methods
+    specified in pname:supportedPresentScaling is used, or the special value
+    [eq]#(0xFFFFFFFF, 0xFFFFFFFF)# indicating that the surface size will be
+    determined by the extent of a swapchain targeting the surface.
+    The pname:width and pname:height of the extent will each be smaller than
+    or equal to the corresponding pname:width and pname:height of
+    slink:VkSurfaceCapabilitiesKHR::pname:minImageExtent.
+  * pname:maxScaledImageExtent contains the largest valid swapchain extent
+    for the surface on the specified device when one of the scaling methods
+    specified in pname:supportedPresentScaling is used, or the special value
+    described above for pname:minScaledImageExtent.
+    The pname:width and pname:height of the extent will each be greater than
+    or equal to the corresponding pname:width and pname:height of
+    slink:VkSurfaceCapabilitiesKHR::pname:maxImageExtent.
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+Before creating a swapchain whose scaling mode can: be specified through the
+use of slink:VkSwapchainPresentScalingCreateInfoEXT, obtain the set of
+supported scaling modes by including a slink:VkSurfacePresentModeEXT
+structure in the pname:pNext chain of slink:VkPhysicalDeviceSurfaceInfo2KHR
+when calling flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
+The implementation must: return the same values in
+sname:VkSurfacePresentScalingCapabilitiesEXT for any of the compatible
+present modes as obtained through
+slink:VkSurfacePresentModeCompatibilityEXT.
+endif::VK_EXT_swapchain_maintenance1[]
+
+include::{generated}/validity/structs/VkSurfacePresentScalingCapabilitiesEXT.adoc[]
+--
+
+[open,refpage='VkPresentScalingFlagBitsEXT',desc='Bitmask specifying presentation scaling methods',type='enums']
+--
+Bits which may: be set in
+slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentScaling,
+specifying scaling modes supported by the surface, are:
+
+include::{generated}/api/enums/VkPresentScalingFlagBitsEXT.adoc[]
+
+  * ename:VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT specifies that no scaling
+    occurs, and pixels in the swapchain image are mapped to one and only one
+    pixel in the surface.
+    The mapping between pixels is defined by the chosen presentation
+    gravity.
+  * ename:VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT specifies that the
+    swapchain image will be minified or magnified such that at least one of
+    the resulting width or height is equal to the corresponding surface
+    dimension, and the other resulting dimension is less than or equal to
+    the corresponding surface dimension, with the aspect ratio of the
+    resulting image being identical to that of the original swapchain image.
+  * ename:VK_PRESENT_SCALING_STRETCH_BIT_EXT specifies that the swapchain
+    image will be minified or magnified such that the resulting image
+    dimensions are equal to those of the surface.
+--
+
+[open,refpage='VkPresentScalingFlagsEXT',desc='Bitmask of VkPresentScalingFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkPresentScalingFlagsEXT.adoc[]
+
+tname:VkPresentScalingFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkPresentScalingFlagBitsEXT.
+--
+
+[open,refpage='VkPresentGravityFlagBitsEXT',desc='Bitmask specifying presentation pixel gravity on either the x or y axis',type='enums']
+--
+Bits which may: be set in the
+slink:VkSurfacePresentScalingCapabilitiesEXT::pname:supportedPresentGravityX
+or pname:supportedPresentGravityY fields, specifying the gravity of
+presented pixels supported by the surface, are:
+
+include::{generated}/api/enums/VkPresentGravityFlagBitsEXT.adoc[]
+
+  * ename:VK_PRESENT_GRAVITY_MIN_BIT_EXT means that the pixels will
+    gravitate towards the top or left side of the surface.
+  * ename:VK_PRESENT_GRAVITY_MAX_BIT_EXT means that the pixels will
+    gravitate towards the bottom or right side of the surface.
+  * ename:VK_PRESENT_GRAVITY_CENTERED_BIT_EXT means that the pixels will be
+    centered in the surface.
+
+If the value in slink:VkSurfaceCapabilitiesKHR::pname:currentTransform is
+not ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, it is
+implementation-defined whether the gravity configuration applies to the
+presented image before or after transformation.
+--
+
+[open,refpage='VkPresentGravityFlagsEXT',desc='Bitmask of VkPresentGravityFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkPresentGravityFlagsEXT.adoc[]
+
+tname:VkPresentGravityFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkPresentGravityFlagBitsEXT.
+--
+
+[open,refpage='VkSurfacePresentModeEXT',desc='Structure describing present mode of a surface',type='structs']
+--
+The sname:VkSurfacePresentModeEXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfacePresentModeEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentMode is the presentation mode the swapchain will use.
+
+If the sname:VkSurfacePresentModeEXT structure is included in the
+pname:pNext chain of slink:VkPhysicalDeviceSurfaceInfo2KHR, the values
+returned in slink:VkSurfaceCapabilitiesKHR::pname:minImageCount,
+slink:VkSurfaceCapabilitiesKHR::pname:maxImageCount,
+slink:VkSurfacePresentScalingCapabilitiesEXT::pname:minScaledImageExtent,
+and slink:VkSurfacePresentScalingCapabilitiesEXT::pname:maxScaledImageExtent
+are valid only for the specified pname:presentMode.
+ifdef::VK_KHR_shared_presentable_image[]
+If pname:presentMode is ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, the per-present mode
+image counts must: both be one.
+endif::VK_KHR_shared_presentable_image[]
+The per-present mode image counts may: be less-than or greater-than the
+image counts returned when sname:VkSurfacePresentModeEXT is not provided.
+
+[NOTE]
+.Note
+====
+If slink:VkSwapchainPresentModesCreateInfoEXT is provided to swapchain
+creation, the requirements for forward progress may be less strict.
+For example, a FIFO swapchain might only require 2 images to guarantee
+forward progress, but a MAILBOX one might require 4.
+Without the per-present image counts, such an implementation would have to
+return 4 in slink:VkSurfaceCapabilitiesKHR::pname:minImageCount, which
+pessimizes FIFO.
+Conversely, an implementation may return a low number for minImageCount, but
+internally bump the image count when application queries
+flink:vkGetSwapchainImagesKHR, which can surprise applications, and is not
+discoverable until swapchain creation.
+Using sname:VkSurfacePresentModeEXT and
+slink:VkSwapchainPresentModesCreateInfoEXT together effectively removes this
+problem.
+
+slink:VkSwapchainPresentModesCreateInfoEXT is required for the specification
+to be backwards compatible with applications that do not know about, or make
+use of this feature.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkSurfacePresentModeEXT-presentMode-07780]]
+    pname:presentMode must: be a value reported by
+    flink:vkGetPhysicalDeviceSurfacePresentModesKHR for the specified
+    surface.
+****
+
+include::{generated}/validity/structs/VkSurfacePresentModeEXT.adoc[]
+--
+
+[open,refpage='VkSurfacePresentModeCompatibilityEXT',desc='Structure describing the subset of compatible presentation modes for the purposes of switching without swapchain recreation',type='structs']
+--
+The sname:VkSurfacePresentModeCompatibilityEXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfacePresentModeCompatibilityEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentModeCount is an integer related to the number of present
+    modes available or queried, as described below.
+  * pname:pPresentModes is a pointer to an array of elink:VkPresentModeKHR
+    in which present modes compatible with a given present mode are
+    returned.
+
+If pname:pPresentModes is `NULL`, then the number of present modes that are
+compatible with the one specified in slink:VkSurfacePresentModeEXT is
+returned in pname:presentModeCount.
+Otherwise, pname:presentModeCount must be set by the user to the number of
+elements in the pname:pPresentModes array, and on return the variable is
+overwritten with the number of values actually written to
+pname:pPresentModes.
+If the value of pname:presentModeCount is less than the number of compatible
+present modes that are supported, at most pname:presentModeCount values will
+be written to pname:pPresentModes.
+The implementation must: include the present mode passed to
+slink:VkSurfacePresentModeEXT in pname:pPresentModes, unless
+pname:presentModeCount is zero.
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+Before creating a swapchain whose present modes can: be modified through the
+use of slink:VkSwapchainPresentModesCreateInfoEXT, obtain the set of present
+modes compatible with a given initial present mode by including a
+slink:VkSurfacePresentModeEXT structure in the pname:pNext chain of
+slink:VkPhysicalDeviceSurfaceInfo2KHR when calling
+flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
+endif::VK_EXT_swapchain_maintenance1[]
+
+include::{generated}/validity/structs/VkSurfacePresentModeCompatibilityEXT.adoc[]
+--
+endif::VK_EXT_surface_maintenance1[]
+
+ifdef::VK_KHR_shared_presentable_image[]
+[open,refpage='VkSharedPresentSurfaceCapabilitiesKHR',desc='Structure describing capabilities of a surface for shared presentation',type='structs']
+--
+The sname:VkSharedPresentSurfaceCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkSharedPresentSurfaceCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sharedPresentSupportedUsageFlags is a bitmask of
+    elink:VkImageUsageFlagBits representing the ways the application can:
+    use the shared presentable image from a swapchain created with
+    elink:VkPresentModeKHR set to
+    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR for the surface on
+    the specified device.
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set
+    but implementations may: support additional usages.
+
+include::{generated}/validity/structs/VkSharedPresentSurfaceCapabilitiesKHR.adoc[]
+--
+endif::VK_KHR_shared_presentable_image[]
+
+ifdef::VK_AMD_display_native_hdr[]
+[open,refpage='VkDisplayNativeHdrSurfaceCapabilitiesAMD',desc='Structure describing display native HDR specific capabilities of a surface',type='structs']
+--
+The sname:VkDisplayNativeHdrSurfaceCapabilitiesAMD structure is defined as:
+
+include::{generated}/api/structs/VkDisplayNativeHdrSurfaceCapabilitiesAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:localDimmingSupport specifies whether the surface supports local
+    dimming.
+    If this is ename:VK_TRUE, slink:VkSwapchainDisplayNativeHdrCreateInfoAMD
+    can: be used to explicitly enable or disable local dimming for the
+    surface.
+    Local dimming may also be overridden by flink:vkSetLocalDimmingAMD
+    during the lifetime of the swapchain.
+
+include::{generated}/validity/structs/VkDisplayNativeHdrSurfaceCapabilitiesAMD.adoc[]
+--
+endif::VK_AMD_display_native_hdr[]
+
+ifdef::VK_EXT_full_screen_exclusive[]
+[open,refpage='VkSurfaceCapabilitiesFullScreenExclusiveEXT',desc='Structure describing full screen exclusive capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilitiesFullScreenExclusiveEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkSurfaceCapabilitiesFullScreenExclusiveEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fullScreenExclusiveControlSupported is a boolean describing
+    whether the surface is able to make use of exclusive full-screen access.
+
+This structure can: be included in the pname:pNext chain of
+slink:VkSurfaceCapabilities2KHR to determine support for exclusive
+full-screen access.
+If pname:fullScreenExclusiveSupported is ename:VK_FALSE, it indicates that
+exclusive full-screen access is not obtainable for this surface.
+
+Applications must: not attempt to create swapchains with
+ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT set if
+pname:fullScreenExclusiveSupported is ename:VK_FALSE.
+
+include::{generated}/validity/structs/VkSurfaceCapabilitiesFullScreenExclusiveEXT.adoc[]
+--
+endif::VK_EXT_full_screen_exclusive[]
+
+ifdef::VK_NV_present_barrier[]
+[open,refpage='VkSurfaceCapabilitiesPresentBarrierNV',desc='Structure describing present barrier capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilitiesPresentBarrierNV structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilitiesPresentBarrierNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentBarrierSupported is a boolean describing whether the
+    surface is able to make use of the present barrier feature.
+
+This structure can: be included in the pname:pNext chain of
+slink:VkSurfaceCapabilities2KHR to determine support for present barrier
+access.
+If pname:presentBarrierSupported is ename:VK_FALSE, it indicates that the
+present barrier feature is not obtainable for this surface.
+
+include::{generated}/validity/structs/VkSurfaceCapabilitiesPresentBarrierNV.adoc[]
+--
+endif::VK_NV_present_barrier[]
+endif::VK_KHR_get_surface_capabilities2[]
+
+ifdef::VK_EXT_display_surface_counter[]
+include::{chapters}/VK_EXT_display_surface_counter/surface_capabilities.adoc[]
+endif::VK_EXT_display_surface_counter[]
+
+[open,refpage='VkSurfaceTransformFlagBitsKHR',desc='Presentation transforms supported on a device',type='enums']
+--
+Bits which may: be set in
+slink:VkSurfaceCapabilitiesKHR::pname:supportedTransforms indicating the
+presentation transforms supported for the surface on the specified device,
+and possible values of
+slink:VkSurfaceCapabilitiesKHR::pname:currentTransform indicating the
+surface's current transform relative to the presentation engine's natural
+orientation, are:
+
+include::{generated}/api/enums/VkSurfaceTransformFlagBitsKHR.adoc[]
+
+  * ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR specifies that image content
+    is presented without being transformed.
+  * ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR specifies that image
+    content is rotated 90 degrees clockwise.
+  * ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR specifies that image
+    content is rotated 180 degrees clockwise.
+  * ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR specifies that image
+    content is rotated 270 degrees clockwise.
+  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR specifies that
+    image content is mirrored horizontally.
+  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR specifies
+    that image content is mirrored horizontally, then rotated 90 degrees
+    clockwise.
+  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
+    specifies that image content is mirrored horizontally, then rotated 180
+    degrees clockwise.
+  * ename:VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
+    specifies that image content is mirrored horizontally, then rotated 270
+    degrees clockwise.
+  * ename:VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR specifies that the
+    presentation transform is not specified, and is instead determined by
+    platform-specific considerations and mechanisms outside Vulkan.
+--
+
+[open,refpage='VkSurfaceTransformFlagsKHR',desc='Bitmask of VkSurfaceTransformFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkSurfaceTransformFlagsKHR.adoc[]
+
+tname:VkSurfaceTransformFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkSurfaceTransformFlagBitsKHR.
+--
+
+[open,refpage='VkCompositeAlphaFlagBitsKHR',desc='Alpha compositing modes supported on a device',type='enums']
+--
+The pname:supportedCompositeAlpha member is of type
+elink:VkCompositeAlphaFlagBitsKHR, containing the following values:
+
+include::{generated}/api/enums/VkCompositeAlphaFlagBitsKHR.adoc[]
+
+These values are described as follows:
+
+  * ename:VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR: The alpha component, if it
+    exists, of the images is ignored in the compositing process.
+    Instead, the image is treated as if it has a constant alpha of 1.0.
+  * ename:VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR: The alpha component, if
+    it exists, of the images is respected in the compositing process.
+    The non-alpha components of the image are expected to already be
+    multiplied by the alpha component by the application.
+  * ename:VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR: The alpha component,
+    if it exists, of the images is respected in the compositing process.
+    The non-alpha components of the image are not expected to already be
+    multiplied by the alpha component by the application; instead, the
+    compositor will multiply the non-alpha components of the image by the
+    alpha component during compositing.
+  * ename:VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR: The way in which the
+    presentation engine treats the alpha component in the images is unknown
+    to the Vulkan API.
+    Instead, the application is responsible for setting the composite alpha
+    blending mode using native window system commands.
+    If the application does not set the blending mode using native window
+    system commands, then a platform-specific default will be used.
+--
+
+[open,refpage='VkCompositeAlphaFlagsKHR',desc='Bitmask of VkCompositeAlphaFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkCompositeAlphaFlagsKHR.adoc[]
+
+tname:VkCompositeAlphaFlagsKHR is a bitmask type for setting a mask of zero
+or more elink:VkCompositeAlphaFlagBitsKHR.
+--
+
+
+=== Surface Format Support
+
+[open,refpage='vkGetPhysicalDeviceSurfaceFormatsKHR',desc='Query color formats supported by surface',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceFormatsKHR
+
+To query the supported swapchain format-color space pairs for a surface,
+call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceFormatsKHR.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:surface is the surface that will be associated with the swapchain.
+  * pname:pSurfaceFormatCount is a pointer to an integer related to the
+    number of format pairs available or queried, as described below.
+  * pname:pSurfaceFormats is either `NULL` or a pointer to an array of
+    sname:VkSurfaceFormatKHR structures.
+
+If pname:pSurfaceFormats is `NULL`, then the number of format pairs
+supported for the given pname:surface is returned in
+pname:pSurfaceFormatCount.
+Otherwise, pname:pSurfaceFormatCount must: point to a variable set by the
+user to the number of elements in the pname:pSurfaceFormats array, and on
+return the variable is overwritten with the number of structures actually
+written to pname:pSurfaceFormats.
+If the value of pname:pSurfaceFormatCount is less than the number of format
+pairs supported, at most pname:pSurfaceFormatCount structures will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available format pairs were
+returned.
+
+The number of format pairs supported must: be greater than or equal to 1.
+pname:pSurfaceFormats must: not contain an entry whose value for
+pname:format is ename:VK_FORMAT_UNDEFINED.
+
+If pname:pSurfaceFormats includes an entry whose value for pname:colorSpace
+is ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR and whose value for pname:format
+is a UNORM (or SRGB) format and the corresponding SRGB (or UNORM) format is
+a color renderable format for ename:VK_IMAGE_TILING_OPTIMAL, then
+pname:pSurfaceFormats must: also contain an entry with the same value for
+pname:colorSpace and pname:format equal to the corresponding SRGB (or UNORM)
+format.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+If the `apiext:VK_GOOGLE_surfaceless_query` extension is enabled, the values
+returned in pname:pSurfaceFormats will be identical for every valid surface
+created on this physical device, and so pname:surface can: be
+dlink:VK_NULL_HANDLE.
+endif::VK_GOOGLE_surfaceless_query[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_surfaceless_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormatsKHR.adoc[]
+--
+
+[open,refpage='VkSurfaceFormatKHR',desc='Structure describing a supported swapchain format-color space pair',type='structs']
+--
+The sname:VkSurfaceFormatKHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceFormatKHR.adoc[]
+
+  * pname:format is a elink:VkFormat that is compatible with the specified
+    surface.
+  * pname:colorSpace is a presentation elink:VkColorSpaceKHR that is
+    compatible with the surface.
+
+include::{generated}/validity/structs/VkSurfaceFormatKHR.adoc[]
+--
+
+ifdef::VK_KHR_get_surface_capabilities2[]
+[open,refpage='vkGetPhysicalDeviceSurfaceFormats2KHR',desc='Query color formats supported by surface',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfaceFormats2KHR
+
+To query the supported swapchain format tuples for a surface, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:pSurfaceInfo is a pointer to a
+    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
+    and other fixed parameters that would be consumed by
+    flink:vkCreateSwapchainKHR.
+  * pname:pSurfaceFormatCount is a pointer to an integer related to the
+    number of format tuples available or queried, as described below.
+  * pname:pSurfaceFormats is either `NULL` or a pointer to an array of
+    slink:VkSurfaceFormat2KHR structures.
+
+flink:vkGetPhysicalDeviceSurfaceFormats2KHR behaves similarly to
+flink:vkGetPhysicalDeviceSurfaceFormatsKHR, with the ability to be extended
+via pname:pNext chains.
+
+If pname:pSurfaceFormats is `NULL`, then the number of format tuples
+supported for the given pname:surface is returned in
+pname:pSurfaceFormatCount.
+Otherwise, pname:pSurfaceFormatCount must: point to a variable set by the
+user to the number of elements in the pname:pSurfaceFormats array, and on
+return the variable is overwritten with the number of structures actually
+written to pname:pSurfaceFormats.
+If the value of pname:pSurfaceFormatCount is less than the number of format
+tuples supported, at most pname:pSurfaceFormatCount structures will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available values were
+returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_info_physical_device_surfaceless_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.adoc[]
+--
+
+[open,refpage='VkSurfaceFormat2KHR',desc='Structure describing a supported swapchain format tuple',type='structs']
+--
+The sname:VkSurfaceFormat2KHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceFormat2KHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:surfaceFormat is a slink:VkSurfaceFormatKHR structure describing a
+    format-color space pair that is compatible with the specified surface.
+
+ifdef::VK_EXT_image_compression_control[]
+ifdef::VK_EXT_image_compression_control_swapchain[]
+If the <<features-imageCompressionControlSwapchain,
+pname:imageCompressionControlSwapchain>> feature is supported and a
+slink:VkImageCompressionPropertiesEXT structure is included in the
+pname:pNext chain of this structure, then it will be filled with the
+compression properties that are supported for the pname:surfaceFormat.
+endif::VK_EXT_image_compression_control_swapchain[]
+endif::VK_EXT_image_compression_control[]
+
+ifdef::VK_EXT_image_compression_control[]
+.Valid Usage
+****
+ifndef::VK_EXT_image_compression_control_swapchain[]
+  * [[VUID-VkSurfaceFormat2KHR-pNext-06749]]
+    The pname:pNext chain must: not include an
+    slink:VkImageCompressionPropertiesEXT structure
+endif::VK_EXT_image_compression_control_swapchain[]
+ifdef::VK_EXT_image_compression_control_swapchain[]
+  * [[VUID-VkSurfaceFormat2KHR-pNext-06750]]
+    If the <<features-imageCompressionControlSwapchain,
+    pname:imageCompressionControlSwapchain>> feature is not enabled, the
+    pname:pNext chain must: not include an
+    slink:VkImageCompressionPropertiesEXT structure
+endif::VK_EXT_image_compression_control_swapchain[]
+****
+endif::VK_EXT_image_compression_control[]
+
+include::{generated}/validity/structs/VkSurfaceFormat2KHR.adoc[]
+--
+
+endif::VK_KHR_get_surface_capabilities2[]
+
+While the pname:format of a presentable image refers to the encoding of each
+pixel, the pname:colorSpace determines how the presentation engine
+interprets the pixel values.
+A color space in this document refers to a specific color space (defined by
+the chromaticities of its primaries and a white point in CIE Lab), and a
+transfer function that is applied before storing or transmitting color data
+in the given color space.
+
+[open,refpage='VkColorSpaceKHR',desc='Supported color space of the presentation engine',type='enums']
+--
+Possible values of slink:VkSurfaceFormatKHR::pname:colorSpace, specifying
+supported color spaces of a presentation engine, are:
+
+include::{generated}/api/enums/VkColorSpaceKHR.adoc[]
+
+  * ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR specifies support for the sRGB
+    color space.
+ifdef::VK_EXT_swapchain_colorspace[]
+  * ename:VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT specifies support for the
+    Display-P3 color space to be displayed using an sRGB-like EOTF (defined
+    below).
+  * ename:VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT specifies support for the
+    extended sRGB color space to be displayed using a linear EOTF.
+  * ename:VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT specifies support for
+    the extended sRGB color space to be displayed using an sRGB EOTF.
+  * ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT specifies support for the
+    Display-P3 color space to be displayed using a linear EOTF.
+  * ename:VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT specifies support for the
+    DCI-P3 color space to be displayed using the DCI-P3 EOTF.
+    Note that values in such an image are interpreted as XYZ encoded color
+    data by the presentation engine.
+  * ename:VK_COLOR_SPACE_BT709_LINEAR_EXT specifies support for the BT709
+    color space to be displayed using a linear EOTF.
+  * ename:VK_COLOR_SPACE_BT709_NONLINEAR_EXT specifies support for the BT709
+    color space to be displayed using the SMPTE 170M EOTF.
+  * ename:VK_COLOR_SPACE_BT2020_LINEAR_EXT specifies support for the BT2020
+    color space to be displayed using a linear EOTF.
+  * ename:VK_COLOR_SPACE_HDR10_ST2084_EXT specifies support for the HDR10
+    (BT2020 color) space to be displayed using the SMPTE ST2084 Perceptual
+    Quantizer (PQ) EOTF.
+  * ename:VK_COLOR_SPACE_DOLBYVISION_EXT specifies support for the Dolby
+    Vision (BT2020 color space), proprietary encoding, to be displayed using
+    the SMPTE ST2084 EOTF.
+  * ename:VK_COLOR_SPACE_HDR10_HLG_EXT specifies support for the HDR10
+    (BT2020 color space) to be displayed using the Hybrid Log Gamma (HLG)
+    EOTF.
+  * ename:VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT specifies support for the
+    AdobeRGB color space to be displayed using a linear EOTF.
+  * ename:VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT specifies support for the
+    AdobeRGB color space to be displayed using the Gamma 2.2 EOTF.
+  * ename:VK_COLOR_SPACE_PASS_THROUGH_EXT specifies that color components
+    are used "`as is`".
+    This is intended to allow applications to supply data for color spaces
+    not described here.
+ifdef::VK_AMD_display_native_hdr[]
+  * ename:VK_COLOR_SPACE_DISPLAY_NATIVE_AMD specifies support for the
+    display's native color space.
+    This matches the color space expectations of AMD's FreeSync2 standard,
+    for displays supporting it.
+endif::VK_AMD_display_native_hdr[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkColorSpaceKHR (deprecated aliases)
+  ** etext:VK_COLORSPACE_SRGB_NONLINEAR_KHR <<SCID-8>>
+  ** etext:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+In the initial release of the `apiext:VK_KHR_surface` and
+`apiext:VK_KHR_swapchain` extensions, the token
+etext:VK_COLORSPACE_SRGB_NONLINEAR_KHR was used.
+Starting in the 2016-05-13 updates to the extension branches, matching
+release 1.0.13 of the core API specification,
+ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR is used instead for consistency with
+Vulkan naming rules.
+The older enum is still available for backwards compatibility.
+====
+
+[NOTE]
+.Note
+====
+In older versions of this extension
+ename:VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT was misnamed
+etext:VK_COLOR_SPACE_DCI_P3_LINEAR_EXT.
+This has been updated to indicate that it uses RGB color encoding, not XYZ.
+The old name is deprecated but is maintained for backwards compatibility.
+====
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+For a traditional "`Linear`" or non-gamma transfer function color space use
+ename:VK_COLOR_SPACE_PASS_THROUGH_EXT.
+====
+
+The color components of non-linear color space swapchain images must: have
+had the appropriate transfer function applied.
+The color space selected for the swapchain image will not affect the
+processing of data written into the image by the implementation.
+Vulkan requires that all implementations support the sRGB transfer function
+by use of an SRGB pixel format.
+Other transfer functions, such as SMPTE 170M or SMPTE2084, can: be performed
+by the application shader.
+This extension defines enums for elink:VkColorSpaceKHR that correspond to
+the following color spaces:
+
+[[VK_EXT_swapchain_colorspace-table]]
+.Color Spaces and Attributes
+[options="header"]
+|====
+| Name           | Red Primary  | Green Primary | Blue Primary | White-point          | Transfer function
+| DCI-P3         | 1.000, 0.000 | 0.000, 1.000  | 0.000, 0.000 | 0.3333, 0.3333       | DCI P3
+| Display-P3     | 0.680, 0.320 | 0.265, 0.690  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | Display-P3
+| BT709          | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | ITU (SMPTE 170M)
+| sRGB           | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | sRGB
+| extended sRGB  | 0.640, 0.330 | 0.300, 0.600  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | extended sRGB
+| HDR10_ST2084   | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084 PQ
+| DOLBYVISION    | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | ST2084 PQ
+| HDR10_HLG      | 0.708, 0.292 | 0.170, 0.797  | 0.131, 0.046 | 0.3127, 0.3290 (D65) | HLG
+| AdobeRGB       | 0.640, 0.330 | 0.210, 0.710  | 0.150, 0.060 | 0.3127, 0.3290 (D65) | AdobeRGB
+|====
+
+The transfer functions are described in the "`Transfer Functions`" chapter
+of the <<data-format,Khronos Data Format Specification>>.
+
+Except Display-P3 OETF, which is:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+E & =
+  \begin{cases}
+    1.055 \times L^{1 \over 2.4} - 0.055 & \text{for}\  0.0030186 \leq L \leq 1 \\
+    12.92 \times L                       & \text{for}\  0 \leq L < 0.0030186
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+where [eq]#L# is the linear value of a color component and [eq]#E# is the
+encoded value (as stored in the image in memory).
+
+[NOTE]
+.Note
+====
+For most uses, the sRGB OETF is equivalent.
+====
+endif::VK_EXT_swapchain_colorspace[]
+--
+
+
+=== Surface Presentation Mode Support
+
+[open,refpage='vkGetPhysicalDeviceSurfacePresentModesKHR',desc='Query supported presentation modes',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfacePresentModesKHR
+
+To query the supported presentation modes for a surface, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfacePresentModesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:surface is the surface that will be associated with the swapchain.
+  * pname:pPresentModeCount is a pointer to an integer related to the number
+    of presentation modes available or queried, as described below.
+  * pname:pPresentModes is either `NULL` or a pointer to an array of
+    elink:VkPresentModeKHR values, indicating the supported presentation
+    modes.
+
+If pname:pPresentModes is `NULL`, then the number of presentation modes
+supported for the given pname:surface is returned in
+pname:pPresentModeCount.
+Otherwise, pname:pPresentModeCount must: point to a variable set by the user
+to the number of elements in the pname:pPresentModes array, and on return
+the variable is overwritten with the number of values actually written to
+pname:pPresentModes.
+If the value of pname:pPresentModeCount is less than the number of
+presentation modes supported, at most pname:pPresentModeCount values will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available modes were
+returned.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+If the `apiext:VK_GOOGLE_surfaceless_query` extension is enabled and
+pname:surface is dlink:VK_NULL_HANDLE, the values returned in
+pname:pPresentModes will only indicate support for
+ifndef::VK_KHR_shared_presentable_image[]
+ename:VK_PRESENT_MODE_FIFO_KHR.
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+ename:VK_PRESENT_MODE_FIFO_KHR,
+ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, and
+ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
+endif::VK_KHR_shared_presentable_image[]
+To query support for any other present mode, a valid handle must: be
+provided in pname:surface.
+endif::VK_GOOGLE_surfaceless_query[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_surfaceless_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModesKHR.adoc[]
+--
+
+ifdef::VK_EXT_full_screen_exclusive[]
+[open,refpage='vkGetPhysicalDeviceSurfacePresentModes2EXT',desc='Query supported presentation modes',type='protos']
+--
+:refpage: vkGetPhysicalDeviceSurfacePresentModes2EXT
+
+Alternatively, to query the supported presentation modes for a surface
+combined with select other fixed swapchain creation parameters, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfacePresentModes2EXT.adoc[]
+
+  * pname:physicalDevice is the physical device that will be associated with
+    the swapchain to be created, as described for
+    flink:vkCreateSwapchainKHR.
+  * pname:pSurfaceInfo is a pointer to a
+    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
+    and other fixed parameters that would be consumed by
+    flink:vkCreateSwapchainKHR.
+  * pname:pPresentModeCount is a pointer to an integer related to the number
+    of presentation modes available or queried, as described below.
+  * pname:pPresentModes is either `NULL` or a pointer to an array of
+    elink:VkPresentModeKHR values, indicating the supported presentation
+    modes.
+
+fname:vkGetPhysicalDeviceSurfacePresentModes2EXT behaves similarly to
+flink:vkGetPhysicalDeviceSurfacePresentModesKHR, with the ability to specify
+extended inputs via chained input structures.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_info_physical_device_surfaceless_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModes2EXT.adoc[]
+--
+endif::VK_EXT_full_screen_exclusive[]
+
+[open,refpage='VkPresentModeKHR',desc='Presentation mode supported for a surface',type='enums']
+--
+Possible values of elements of the
+flink:vkGetPhysicalDeviceSurfacePresentModesKHR::pname:pPresentModes array,
+indicating the supported presentation modes for a surface, are:
+
+include::{generated}/api/enums/VkPresentModeKHR.adoc[]
+
+  * ename:VK_PRESENT_MODE_IMMEDIATE_KHR specifies that the presentation
+    engine does not wait for a vertical blanking period to update the
+    current image, meaning this mode may: result in visible tearing.
+    No internal queuing of presentation requests is needed, as the requests
+    are applied immediately.
+  * ename:VK_PRESENT_MODE_MAILBOX_KHR specifies that the presentation engine
+    waits for the next vertical blanking period to update the current image.
+    Tearing cannot: be observed.
+    An internal single-entry queue is used to hold pending presentation
+    requests.
+    If the queue is full when a new presentation request is received, the
+    new request replaces the existing entry, and any images associated with
+    the prior entry become available for reuse by the application.
+    One request is removed from the queue and processed during each vertical
+    blanking period in which the queue is non-empty.
+  * ename:VK_PRESENT_MODE_FIFO_KHR specifies that the presentation engine
+    waits for the next vertical blanking period to update the current image.
+    Tearing cannot: be observed.
+    An internal queue is used to hold pending presentation requests.
+    New requests are appended to the end of the queue, and one request is
+    removed from the beginning of the queue and processed during each
+    vertical blanking period in which the queue is non-empty.
+    This is the only value of pname:presentMode that is required: to be
+    supported.
+  * ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR specifies that the presentation
+    engine generally waits for the next vertical blanking period to update
+    the current image.
+    If a vertical blanking period has already passed since the last update
+    of the current image then the presentation engine does not wait for
+    another vertical blanking period for the update, meaning this mode may:
+    result in visible tearing in this case.
+    This mode is useful for reducing visual stutter with an application that
+    will mostly present a new image before the next vertical blanking
+    period, but may occasionally be late, and present a new image just after
+    the next vertical blanking period.
+    An internal queue is used to hold pending presentation requests.
+    New requests are appended to the end of the queue, and one request is
+    removed from the beginning of the queue and processed during or after
+    each vertical blanking period in which the queue is non-empty.
+ifdef::VK_KHR_shared_presentable_image[]
+  * ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR specifies that the
+    presentation engine and application have concurrent access to a single
+    image, which is referred to as a _shared presentable image_.
+    The presentation engine is only required to update the current image
+    after a new presentation request is received.
+    Therefore the application must: make a presentation request whenever an
+    update is required.
+    However, the presentation engine may: update the current image at any
+    point, meaning this mode may: result in visible tearing.
+  * ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR specifies that the
+    presentation engine and application have concurrent access to a single
+    image, which is referred to as a _shared presentable image_.
+    The presentation engine periodically updates the current image on its
+    regular refresh cycle.
+    The application is only required to make one initial presentation
+    request, after which the presentation engine must: update the current
+    image without any need for further presentation requests.
+    The application can: indicate the image contents have been updated by
+    making a presentation request, but this does not guarantee the timing of
+    when it will be updated.
+    This mode may: result in visible tearing if rendering to the image is
+    not timed correctly.
+
+The supported elink:VkImageUsageFlagBits of the presentable images of a
+swapchain created for a surface may: differ depending on the presentation
+mode, and can be determined as per the table below:
+
+.Presentable image usage queries
+[width="100%",cols="<50%,<50%",options="header"]
+|====
+| Presentation mode                                   | Image usage flags
+| ename:VK_PRESENT_MODE_IMMEDIATE_KHR                 | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
+| ename:VK_PRESENT_MODE_MAILBOX_KHR                   | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
+| ename:VK_PRESENT_MODE_FIFO_KHR                      | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
+| ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR              | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
+| ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR     | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
+| ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
+|====
+endif::VK_KHR_shared_presentable_image[]
+
+[NOTE]
+.Note
+====
+For reference, the mode indicated by ename:VK_PRESENT_MODE_FIFO_KHR is
+equivalent to the behavior of {wgl|glX|egl}SwapBuffers with a swap interval
+of 1, while the mode indicated by ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR is
+equivalent to the behavior of {wgl|glX}SwapBuffers with a swap interval of
+-1 (from the {WGL|GLX}_EXT_swap_control_tear extensions).
+====
+--
+
+ifdef::VK_EXT_full_screen_exclusive[]
+== Full Screen Exclusive Control
+
+Swapchains created with pname:fullScreenExclusive set to
+ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT must: acquire and
+release exclusive full-screen access explicitly, using the following
+commands.
+
+[open,refpage='vkAcquireFullScreenExclusiveModeEXT',desc='Acquire full-screen exclusive mode for a swapchain',type='protos']
+--
+To acquire exclusive full-screen access for a swapchain, call:
+
+include::{generated}/api/protos/vkAcquireFullScreenExclusiveModeEXT.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to acquire exclusive full-screen access
+    for.
+
+.Valid Usage
+****
+  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02674]]
+    pname:swapchain must: not be in the retired state
+  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02675]]
+    pname:swapchain must: be a swapchain created with a
+    slink:VkSurfaceFullScreenExclusiveInfoEXT structure, with
+    pname:fullScreenExclusive set to
+    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
+  * [[VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02676]]
+    pname:swapchain must: not currently have exclusive full-screen access
+****
+
+A return value of ename:VK_SUCCESS indicates that the pname:swapchain
+successfully acquired exclusive full-screen access.
+The swapchain will retain this exclusivity until either the application
+releases exclusive full-screen access with
+flink:vkReleaseFullScreenExclusiveModeEXT, destroys the swapchain, or if any
+of the swapchain commands return
+ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT indicating that the mode
+was lost because of platform-specific changes.
+
+If the swapchain was unable to acquire exclusive full-screen access to the
+display then ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+An application can: attempt to acquire exclusive full-screen access again
+for the same swapchain even if this command fails, or if
+ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT has been returned by a
+swapchain command.
+
+include::{generated}/validity/protos/vkAcquireFullScreenExclusiveModeEXT.adoc[]
+--
+
+[open,refpage='vkReleaseFullScreenExclusiveModeEXT',desc='Release full-screen exclusive mode from a swapchain',type='protos']
+--
+To release exclusive full-screen access from a swapchain, call:
+
+include::{generated}/api/protos/vkReleaseFullScreenExclusiveModeEXT.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to release exclusive full-screen access
+    from.
+
+[NOTE]
+.Note
+====
+Applications will not be able to present to pname:swapchain after this call
+until exclusive full-screen access is reacquired.
+This is usually useful to handle when an application is minimised or
+otherwise intends to stop presenting for a time.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02677]]
+    pname:swapchain must: not be in the retired state
+  * [[VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02678]]
+    pname:swapchain must: be a swapchain created with a
+    slink:VkSurfaceFullScreenExclusiveInfoEXT structure, with
+    pname:fullScreenExclusive set to
+    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
+****
+--
+endif::VK_EXT_full_screen_exclusive[]
+
+
+ifdef::VK_KHR_swapchain[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+== Device Group Queries
+
+[open,refpage='vkGetDeviceGroupPresentCapabilitiesKHR',desc='Query present capabilities from other physical devices',type='protos']
+--
+:refpage: vkGetDeviceGroupPresentCapabilitiesKHR
+
+A logical device that represents multiple physical devices may: support
+presenting from images on more than one physical device, or combining images
+from multiple physical devices.
+
+To query these capabilities, call:
+
+include::{generated}/api/protos/vkGetDeviceGroupPresentCapabilitiesKHR.adoc[]
+
+  * pname:device is the logical device.
+  * pname:pDeviceGroupPresentCapabilities is a pointer to a
+    slink:VkDeviceGroupPresentCapabilitiesKHR structure in which the
+    device's capabilities are returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetDeviceGroupPresentCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkDeviceGroupPresentCapabilitiesKHR',desc='Present capabilities from other physical devices',type='structs']
+--
+The sname:VkDeviceGroupPresentCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupPresentCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentMask is an array of ename:VK_MAX_DEVICE_GROUP_SIZE
+    code:uint32_t masks, where the mask at element [eq]#i# is non-zero if
+    physical device [eq]#i# has a presentation engine, and where bit [eq]#j#
+    is set in element [eq]#i# if physical device [eq]#i# can: present
+    swapchain images from physical device [eq]#j#.
+    If element [eq]#i# is non-zero, then bit [eq]#i# must: be set.
+  * pname:modes is a bitmask of elink:VkDeviceGroupPresentModeFlagBitsKHR
+    indicating which device group presentation modes are supported.
+
+pname:modes always has ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR set.
+
+The present mode flags are also used when presenting an image, in
+slink:VkDeviceGroupPresentInfoKHR::pname:mode.
+
+If a device group only includes a single physical device, then pname:modes
+must: equal ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
+
+include::{generated}/validity/structs/VkDeviceGroupPresentCapabilitiesKHR.adoc[]
+--
+
+
+[open,refpage='VkDeviceGroupPresentModeFlagBitsKHR',desc='Bitmask specifying supported device group present modes',type='enums']
+--
+Bits which may: be set in
+slink:VkDeviceGroupPresentCapabilitiesKHR::pname:modes, indicating which
+device group presentation modes are supported, are:
+
+include::{generated}/api/enums/VkDeviceGroupPresentModeFlagBitsKHR.adoc[]
+
+  * ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR specifies that any
+    physical device with a presentation engine can: present its own
+    swapchain images.
+  * ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR specifies that any
+    physical device with a presentation engine can: present swapchain images
+    from any physical device in its pname:presentMask.
+  * ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR specifies that any
+    physical device with a presentation engine can: present the sum of
+    swapchain images from any physical devices in its pname:presentMask.
+  * ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR specifies
+    that multiple physical devices with a presentation engine can: each
+    present their own swapchain images.
+--
+
+[open,refpage='VkDeviceGroupPresentModeFlagsKHR',desc='Bitmask of VkDeviceGroupPresentModeFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkDeviceGroupPresentModeFlagsKHR.adoc[]
+
+tname:VkDeviceGroupPresentModeFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkDeviceGroupPresentModeFlagBitsKHR.
+--
+
+[open,refpage='vkGetDeviceGroupSurfacePresentModesKHR',desc='Query present capabilities for a surface',type='protos']
+--
+:refpage: vkGetDeviceGroupSurfacePresentModesKHR
+
+Some surfaces may: not be capable of using all the device group present
+modes.
+
+To query the supported device group present modes for a particular surface,
+call:
+
+include::{generated}/api/protos/vkGetDeviceGroupSurfacePresentModesKHR.adoc[]
+
+  * pname:device is the logical device.
+  * pname:surface is the surface.
+  * pname:pModes is a pointer to a tlink:VkDeviceGroupPresentModeFlagsKHR in
+    which the supported device group present modes for the surface are
+    returned.
+
+The modes returned by this command are not invariant, and may: change in
+response to the surface being moved, resized, or occluded.
+These modes must: be a subset of the modes returned by
+flink:vkGetDeviceGroupPresentCapabilitiesKHR.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-06212]]
+    pname:surface must: be supported by all physical devices associated with
+    pname:device, as reported by flink:vkGetPhysicalDeviceSurfaceSupportKHR
+    or an equivalent platform-specific mechanism
+****
+
+include::{generated}/validity/protos/vkGetDeviceGroupSurfacePresentModesKHR.adoc[]
+--
+
+ifdef::VK_EXT_full_screen_exclusive[]
+[open,refpage='vkGetDeviceGroupSurfacePresentModes2EXT',desc='Query device group present capabilities for a surface',type='protos']
+--
+Alternatively, to query the supported device group presentation modes for a
+surface combined with select other fixed swapchain creation parameters,
+call:
+
+include::{generated}/api/protos/vkGetDeviceGroupSurfacePresentModes2EXT.adoc[]
+
+  * pname:device is the logical device.
+  * pname:pSurfaceInfo is a pointer to a
+    slink:VkPhysicalDeviceSurfaceInfo2KHR structure describing the surface
+    and other fixed parameters that would be consumed by
+    flink:vkCreateSwapchainKHR.
+  * pname:pModes is a pointer to a tlink:VkDeviceGroupPresentModeFlagsKHR in
+    which the supported device group present modes for the surface are
+    returned.
+
+fname:vkGetDeviceGroupSurfacePresentModes2EXT behaves similarly to
+flink:vkGetDeviceGroupSurfacePresentModesKHR, with the ability to specify
+extended inputs via chained input structures.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-06213]]
+    pname:pSurfaceInfo->surface must: be supported by all physical devices
+    associated with pname:device, as reported by
+    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
+    platform-specific mechanism
+****
+
+include::{generated}/validity/protos/vkGetDeviceGroupSurfacePresentModes2EXT.adoc[]
+--
+endif::VK_EXT_full_screen_exclusive[]
+
+[open,refpage='vkGetPhysicalDevicePresentRectanglesKHR',desc='Query present rectangles for a surface on a physical device',type='protos']
+--
+:refpage: vkGetPhysicalDevicePresentRectanglesKHR
+
+When using ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR,
+the application may: need to know which regions of the surface are used when
+presenting locally on each physical device.
+Presentation of swapchain images to this surface need only have valid
+contents in the regions returned by this command.
+
+To query a set of rectangles used in presentation on the physical device,
+call:
+
+include::{generated}/api/protos/vkGetPhysicalDevicePresentRectanglesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:surface is the surface.
+  * pname:pRectCount is a pointer to an integer related to the number of
+    rectangles available or queried, as described below.
+  * pname:pRects is either `NULL` or a pointer to an array of slink:VkRect2D
+    structures.
+
+If pname:pRects is `NULL`, then the number of rectangles used when
+presenting the given pname:surface is returned in pname:pRectCount.
+Otherwise, pname:pRectCount must: point to a variable set by the user to the
+number of elements in the pname:pRects array, and on return the variable is
+overwritten with the number of structures actually written to pname:pRects.
+If the value of pname:pRectCount is less than the number of rectangles, at
+most pname:pRectCount structures will be written, and ename:VK_INCOMPLETE
+will be returned instead of ename:VK_SUCCESS, to indicate that not all the
+available rectangles were returned.
+
+The values returned by this command are not invariant, and may: change in
+response to the surface being moved, resized, or occluded.
+
+The rectangles returned by this command must: not overlap.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDevicePresentRectanglesKHR.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_GOOGLE_display_timing[]
+include::{chapters}/VK_GOOGLE_display_timing/queries.adoc[]
+endif::VK_GOOGLE_display_timing[]
+
+ifdef::VK_KHR_present_wait[]
+include::{chapters}/VK_KHR_present_wait/present_wait.adoc[]
+endif::VK_KHR_present_wait[]
+
+include::{chapters}/VK_KHR_swapchain/wsi.adoc[]
+endif::VK_KHR_swapchain[]
+
+ifdef::VK_NV_present_barrier[]
+include::{chapters}/VK_NV_present_barrier/present_barrier.adoc[]
+endif::VK_NV_present_barrier[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/PresentId.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/PresentId.adoc
new file mode 100644
index 0000000..89222f6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/PresentId.adoc
@@ -0,0 +1,68 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkPresentIdKHR',desc='The list of presentation identifiers',type='structs']
+--
+The sname:VkPresentIdKHR structure is defined as:
+
+include::{generated}/api/structs/VkPresentIdKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is the number of swapchains being presented to the
+    fname:vkQueuePresentKHR command.
+  * pname:pPresentIds is `NULL` or a pointer to an array of code:uint64_t
+    with pname:swapchainCount entries.
+    If not `NULL`, each non-zero value in pname:pPresentIds specifies the
+    present id to be associated with the presentation of the swapchain with
+    the same index in the flink:vkQueuePresentKHR call.
+
+For applications to be able to reference specific presentation events queued
+by a call to fname:vkQueuePresentKHR, an identifier needs to be associated
+with them.
+When the <<features-presentId, pname:presentId>> feature is enabled,
+applications can: include the sname:VkPresentIdKHR structure in the
+pname:pNext chain of the slink:VkPresentInfoKHR structure to supply
+identifiers.
+
+Each sname:VkSwapchainKHR has a presentId associated with it.
+This value is initially set to zero when the sname:VkSwapchainKHR is
+created.
+
+When a sname:VkPresentIdKHR structure with a non-NULL pname:pPresentIds is
+included in the pname:pNext chain of a slink:VkPresentInfoKHR structure,
+each pname:pSwapchains entry has a presentId associated in the
+pname:pPresentIds array at the same index as the swapchain in the
+pname:pSwapchains array.
+If this presentId is non-zero, then the application can: later use this
+value to refer to that image presentation.
+A value of zero indicates that this presentation has no associated
+presentId.
+A non-zero presentId must: be greater than any non-zero presentId passed
+previously by the application for the same swapchain.
+
+There is no requirement for any precise timing relationship between the
+presentation of the image to the user and the update of the presentId value,
+but implementations should: make this as close as possible to the
+presentation of the first pixel in the new image to the user.
+
+.Valid Usage
+****
+  * [[VUID-VkPresentIdKHR-swapchainCount-04998]]
+    pname:swapchainCount must: be the same value as
+    sname:VkPresentInfoKHR::pname:swapchainCount, where this
+    sname:VkPresentIdKHR is in the pname:pNext chain of the
+    sname:VkPresentInfoKHR structure
+  * [[VUID-VkPresentIdKHR-presentIds-04999]]
+    Each pname:presentIds entry must: be greater than any previous
+    pname:presentIds entry passed for the associated pname:pSwapchains entry
+****
+
+include::{generated}/validity/structs/VkPresentIdKHR.adoc[]
+--
+
+ifdef::VK_KHR_present_wait[]
+include::{chapters}/VK_KHR_present_wait/WaitForPresent.adoc[]
+endif::VK_KHR_present_wait[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/wsi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/wsi.adoc
new file mode 100644
index 0000000..6440f69
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_swapchain/wsi.adoc
@@ -0,0 +1,1781 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+== WSI Swapchain
+
+[open,refpage='VkSwapchainKHR',desc='Opaque handle to a swapchain object',type='handles',xrefs='vkQueuePresentKHR']
+--
+A swapchain object (a.k.a.
+swapchain) provides the ability to present rendering results to a surface.
+Swapchain objects are represented by sname:VkSwapchainKHR handles:
+
+include::{generated}/api/handles/VkSwapchainKHR.adoc[]
+
+A swapchain is an abstraction for an array of presentable images that are
+associated with a surface.
+The presentable images are represented by sname:VkImage objects created by
+the platform.
+One image (which can: be an array image for multiview/stereoscopic-3D
+surfaces) is displayed at a time, but multiple images can: be queued for
+presentation.
+An application renders to the image, and then queues the image for
+presentation to the surface.
+
+A native window cannot: be associated with more than one non-retired
+swapchain at a time.
+Further, swapchains cannot: be created for native windows that have a
+non-Vulkan graphics API surface associated with them.
+
+[NOTE]
+.Note
+====
+The presentation engine is an abstraction for the platform's compositor or
+display engine.
+
+The presentation engine may: be synchronous or asynchronous with respect to
+the application and/or logical device.
+
+Some implementations may: use the device's graphics queue or dedicated
+presentation hardware to perform presentation.
+====
+
+The presentable images of a swapchain are owned by the presentation engine.
+An application can: acquire use of a presentable image from the presentation
+engine.
+Use of a presentable image must: occur only after the image is returned by
+flink:vkAcquireNextImageKHR, and before it is released by
+flink:vkQueuePresentKHR.
+This includes transitioning the image layout and rendering commands.
+
+An application can: acquire use of a presentable image with
+flink:vkAcquireNextImageKHR.
+After acquiring a presentable image and before modifying it, the application
+must: use a synchronization primitive to ensure that the presentation engine
+has finished reading from the image.
+The application can: then transition the image's layout, queue rendering
+commands to it, etc.
+Finally, the application presents the image with flink:vkQueuePresentKHR,
+which releases the acquisition of the image.
+ifdef::VK_EXT_swapchain_maintenance1[]
+The application can: also release the acquisition of the image through
+flink:vkReleaseSwapchainImagesEXT, if the image is not in use by the device,
+and skip the present operation.
+endif::VK_EXT_swapchain_maintenance1[]
+
+The presentation engine controls the order in which presentable images are
+acquired for use by the application.
+
+[NOTE]
+.Note
+====
+This allows the platform to handle situations which require out-of-order
+return of images after presentation.
+At the same time, it allows the application to generate command buffers
+referencing all of the images in the swapchain at initialization time,
+rather than in its main loop.
+====
+--
+
+How this all works is described below.
+
+ifdef::VK_KHR_shared_presentable_image[]
+include::{chapters}/VK_KHR_shared_presentable_image/wsi.adoc[]
+endif::VK_KHR_shared_presentable_image[]
+
+[open,refpage='vkCreateSwapchainKHR',desc='Create a swapchain',type='protos']
+--
+:refpage: vkCreateSwapchainKHR
+:objectnameplural: swapchains
+:objectnamecamelcase: swapchain
+:objectcount: 1
+
+To create a swapchain, call:
+
+include::{generated}/api/protos/vkCreateSwapchainKHR.adoc[]
+
+  * pname:device is the device to create the swapchain for.
+  * pname:pCreateInfo is a pointer to a slink:VkSwapchainCreateInfoKHR
+    structure specifying the parameters of the created swapchain.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    swapchain object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSwapchain is a pointer to a slink:VkSwapchainKHR handle in which
+    the created swapchain object will be returned.
+
+As mentioned above, if fname:vkCreateSwapchainKHR succeeds, it will return a
+handle to a swapchain containing an array of at least
+pname:pCreateInfo->minImageCount presentable images.
+
+While acquired by the application, presentable images can: be used in any
+way that equivalent non-presentable images can: be used.
+A presentable image is equivalent to a non-presentable image created with
+the following slink:VkImageCreateInfo parameters:
+
+[[swapchain-wsi-image-create-info]]
+[options="header"]
+|====
+| sname:VkImageCreateInfo Field | Value
+ifndef::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
+| pname:flags                   | 0
+endif::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
+| pname:flags                   |
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT is set if
+ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR is set
+
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1[]
+ename:VK_IMAGE_CREATE_PROTECTED_BIT is set if
+ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR is set
+
+endif::VK_VERSION_1_1[]
+ifdef::VK_KHR_swapchain_mutable_format[]
+ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and
+ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR are both set if
+ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR is set
+
+endif::VK_KHR_swapchain_mutable_format[]
+all other bits are unset
+endif::VK_VERSION_1_1,VK_KHR_device_group,VK_KHR_swapchain_mutable_format[]
+| pname:imageType               | ename:VK_IMAGE_TYPE_2D
+| pname:format                  | pname:pCreateInfo->imageFormat
+| pname:extent                  | {pname:pCreateInfo->imageExtent.width, pname:pCreateInfo->imageExtent.height, `1`}
+| pname:mipLevels               | 1
+| pname:arrayLayers             | pname:pCreateInfo->imageArrayLayers
+| pname:samples                 | ename:VK_SAMPLE_COUNT_1_BIT
+| pname:tiling                  | ename:VK_IMAGE_TILING_OPTIMAL
+| pname:usage                   | pname:pCreateInfo->imageUsage
+| pname:sharingMode             | pname:pCreateInfo->imageSharingMode
+| pname:queueFamilyIndexCount   | pname:pCreateInfo->queueFamilyIndexCount
+| pname:pQueueFamilyIndices     | pname:pCreateInfo->pQueueFamilyIndices
+| pname:initialLayout           | ename:VK_IMAGE_LAYOUT_UNDEFINED
+|====
+
+The pname:pCreateInfo->surface must: not be destroyed until after the
+swapchain is destroyed.
+
+ifdef::VKSC_VERSION_1_0[If]
+ifndef::VKSC_VERSION_1_0[If pname:oldSwapchain is dlink:VK_NULL_HANDLE, and]
+the native window referred to by pname:pCreateInfo->surface is already
+associated with a Vulkan swapchain, ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
+must: be returned.
+
+If the native window referred to by pname:pCreateInfo->surface is already
+associated with a non-Vulkan graphics API surface,
+ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR must: be returned.
+
+The native window referred to by pname:pCreateInfo->surface must: not become
+associated with a non-Vulkan graphics API surface before all associated
+Vulkan swapchains have been destroyed.
+
+fname:vkCreateSwapchainKHR will return ename:VK_ERROR_DEVICE_LOST if the
+logical device was lost.
+ifndef::VKSC_VERSION_1_0[]
+The sname:VkSwapchainKHR is a child of the pname:device, and must: be
+destroyed before the pname:device.
+endif::VKSC_VERSION_1_0[]
+However, sname:VkSurfaceKHR is not a child of any sname:VkDevice and is not
+affected by the lost device.
+After successfully recreating a sname:VkDevice, the same sname:VkSurfaceKHR
+can: be used to create a new sname:VkSwapchainKHR, provided the previous one
+was destroyed.
+
+ifdef::VK_EXT_full_screen_exclusive[]
+If the pname:oldSwapchain parameter of pname:pCreateInfo is a valid
+swapchain, which has exclusive full-screen access, that access is released
+from pname:pCreateInfo->oldSwapchain.
+If the command succeeds in this case, the newly created swapchain will
+automatically acquire exclusive full-screen access from
+pname:pCreateInfo->oldSwapchain.
+
+[NOTE]
+.Note
+====
+This implicit transfer is intended to avoid exiting and entering full-screen
+exclusive mode, which may otherwise cause unwanted visual updates to the
+display.
+====
+
+In some cases, swapchain creation may: fail if exclusive full-screen mode is
+requested for application control, but for some implementation-specific
+reason exclusive full-screen access is unavailable for the particular
+combination of parameters provided.
+If this occurs, ename:VK_ERROR_INITIALIZATION_FAILED will be returned.
+
+[NOTE]
+.Note
+====
+In particular, it will fail if the pname:imageExtent member of
+pname:pCreateInfo does not match the extents of the monitor.
+ifdef::VK_KHR_win32_surface[]
+Other reasons for failure may include the app not being set as high-dpi
+aware, or if the physical device and monitor are not compatible in this
+mode.
+endif::VK_KHR_win32_surface[]
+====
+
+endif::VK_EXT_full_screen_exclusive[]
+
+ifdef::VK_NV_present_barrier[]
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
+slink:VkSwapchainPresentBarrierCreateInfoNV structure, then that structure
+includes additional swapchain creation parameters specific to the present
+barrier.
+Swapchain creation may: fail if the state of the current system restricts
+the usage of the present barrier feature
+slink:VkSurfaceCapabilitiesPresentBarrierNV, or a swapchain itself does not
+satisfy all the required conditions.
+In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+endif::VK_NV_present_barrier[]
+
+ifdef::VK_NV_acquire_winrt_display[]
+When the slink:VkSurfaceKHR in slink:VkSwapchainCreateInfoKHR is a display
+surface, then the slink:VkDisplayModeKHR in display surface's
+slink:VkDisplaySurfaceCreateInfoKHR is associated with a particular
+slink:VkDisplayKHR.
+Swapchain creation may: fail if that slink:VkDisplayKHR is not acquired by
+the application.
+In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+endif::VK_NV_acquire_winrt_display[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateSwapchainKHR.adoc[]
+--
+
+[open,refpage='VkSwapchainCreateInfoKHR',desc='Structure specifying parameters of a newly created swapchain object',type='structs']
+--
+The sname:VkSwapchainCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSwapchainCreateFlagBitsKHR
+    indicating parameters of the swapchain creation.
+  * pname:surface is the surface onto which the swapchain will present
+    images.
+    If the creation succeeds, the swapchain becomes associated with
+    pname:surface.
+  * pname:minImageCount is the minimum number of presentable images that the
+    application needs.
+    The implementation will either create the swapchain with at least that
+    many images, or it will fail to create the swapchain.
+  * pname:imageFormat is a elink:VkFormat value specifying the format the
+    swapchain image(s) will be created with.
+  * pname:imageColorSpace is a elink:VkColorSpaceKHR value specifying the
+    way the swapchain interprets image data.
+  * pname:imageExtent is the size (in pixels) of the swapchain image(s).
+    The behavior is platform-dependent if the image extent does not match
+    the surface's pname:currentExtent as returned by
+    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
++
+[NOTE]
+.Note
+====
+On some platforms, it is normal that pname:maxImageExtent may: become `(0,
+0)`, for example when the window is minimized.
+In such a case, it is not possible to create a swapchain due to the Valid
+Usage requirements
+ifdef::VK_EXT_swapchain_maintenance1[]
+, unless scaling is selected through
+slink:VkSwapchainPresentScalingCreateInfoEXT, if supported
+endif::VK_EXT_swapchain_maintenance1[]
+.
+====
+  * pname:imageArrayLayers is the number of views in a multiview/stereo
+    surface.
+    For non-stereoscopic-3D applications, this value is 1.
+  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits describing
+    the intended usage of the (acquired) swapchain images.
+  * pname:imageSharingMode is the sharing mode used for the image(s) of the
+    swapchain.
+  * pname:queueFamilyIndexCount is the number of queue families having
+    access to the image(s) of the swapchain when pname:imageSharingMode is
+    ename:VK_SHARING_MODE_CONCURRENT.
+  * pname:pQueueFamilyIndices is a pointer to an array of queue family
+    indices having access to the images(s) of the swapchain when
+    pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT.
+  * pname:preTransform is a elink:VkSurfaceTransformFlagBitsKHR value
+    describing the transform, relative to the presentation engine's natural
+    orientation, applied to the image content prior to presentation.
+    If it does not match the pname:currentTransform value returned by
+    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, the presentation engine
+    will transform the image content as part of the presentation operation.
+  * pname:compositeAlpha is a elink:VkCompositeAlphaFlagBitsKHR value
+    indicating the alpha compositing mode to use when this surface is
+    composited together with other surfaces on certain window systems.
+  * pname:presentMode is the presentation mode the swapchain will use.
+    A swapchain's present mode determines how incoming present requests will
+    be processed and queued internally.
+  * pname:clipped specifies whether the Vulkan implementation is allowed to
+    discard rendering operations that affect regions of the surface that are
+    not visible.
+  ** If set to ename:VK_TRUE, the presentable images associated with the
+     swapchain may: not own all of their pixels.
+     Pixels in the presentable images that correspond to regions of the
+     target surface obscured by another window on the desktop, or subject to
+     some other clipping mechanism will have undefined: content when read
+     back.
+     Fragment shaders may: not execute for these pixels, and thus any side
+     effects they would have had will not occur.
+     Setting ename:VK_TRUE does not guarantee any clipping will occur, but
+     allows more efficient presentation methods to be used on some
+     platforms.
+  ** If set to ename:VK_FALSE, presentable images associated with the
+     swapchain will own all of the pixels they contain.
++
+[NOTE]
+.Note
+====
+Applications should: set this value to ename:VK_TRUE if they do not expect
+to read back the content of presentable images before presenting them or
+after reacquiring them, and if their fragment shaders do not have any side
+effects that require them to run for all pixels in the presentable image.
+====
+ifdef::VKSC_VERSION_1_0[]
+  * pname:oldSwapchain must: be dlink:VK_NULL_HANDLE in Vulkan SC
+    <<SCID-4>>.
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+  * pname:oldSwapchain is dlink:VK_NULL_HANDLE, or the existing non-retired
+    swapchain currently associated with pname:surface.
+    Providing a valid pname:oldSwapchain may: aid in the resource reuse, and
+    also allows the application to still present any images that are already
+    acquired from it.
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+Upon calling fname:vkCreateSwapchainKHR with an pname:oldSwapchain that is
+not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired -- even if creation
+of the new swapchain fails.
+The new swapchain is created in the non-retired state whether or not
+pname:oldSwapchain is dlink:VK_NULL_HANDLE.
+
+Upon calling fname:vkCreateSwapchainKHR with an pname:oldSwapchain that is
+not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are not
+acquired by the application may: be freed by the implementation, which may:
+occur even if creation of the new swapchain fails.
+The application can: destroy pname:oldSwapchain to free all memory
+associated with pname:oldSwapchain.
+
+[NOTE]
+.Note
+====
+Multiple retired swapchains can: be associated with the same
+sname:VkSurfaceKHR through multiple uses of pname:oldSwapchain that
+outnumber calls to flink:vkDestroySwapchainKHR.
+
+After pname:oldSwapchain is retired, the application can: pass to
+flink:vkQueuePresentKHR any images it had already acquired from
+pname:oldSwapchain.
+E.g., an application may present an image from the old swapchain before an
+image from the new swapchain is ready to be presented.
+As usual, flink:vkQueuePresentKHR may: fail if pname:oldSwapchain has
+entered a state that causes ename:VK_ERROR_OUT_OF_DATE_KHR to be returned.
+
+ifdef::VK_KHR_shared_presentable_image[]
+The application can: continue to use a shared presentable image obtained
+from pname:oldSwapchain until a presentable image is acquired from the new
+swapchain, as long as it has not entered a state that causes it to return
+ename:VK_ERROR_OUT_OF_DATE_KHR.
+endif::VK_KHR_shared_presentable_image[]
+====
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainCreateInfoKHR-surface-01270]]
+    pname:surface must: be a surface that is supported by the device as
+    determined using flink:vkGetPhysicalDeviceSurfaceSupportKHR
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01271]]
+    pname:minImageCount must: be greater than or equal to the value returned
+    in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01272]]
+    pname:minImageCount must: be less than or equal to the value returned in
+    the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface if the returned pname:maxImageCount is not zero
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-02839]]
+    If pname:presentMode is not
+    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR nor
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, then
+    pname:minImageCount must: be greater than or equal to the value returned
+    in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface
+  * [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01383]]
+    pname:minImageCount must: be `1` if pname:presentMode is either
+    ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
+    ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01273]]
+    pname:imageFormat and pname:imageColorSpace must: match the pname:format
+    and pname:colorSpace members, respectively, of one of the
+    sname:VkSurfaceFormatKHR structures returned by
+    fname:vkGetPhysicalDeviceSurfaceFormatsKHR for the surface
+ifndef::VK_EXT_swapchain_maintenance1[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01274]]
+    pname:imageExtent must: be between pname:minImageExtent and
+    pname:maxImageExtent, inclusive, where pname:minImageExtent and
+    pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface
+endif::VK_EXT_swapchain_maintenance1[]
+ifdef::VK_EXT_swapchain_maintenance1[]
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-07781]]
+    If a slink:VkSwapchainPresentScalingCreateInfoEXT structure was not
+    included in the pname:pNext chain, or it is included and
+    slink:VkSwapchainPresentScalingCreateInfoEXT::pname:scalingBehavior is
+    zero then pname:imageExtent must: be between pname:minImageExtent and
+    pname:maxImageExtent, inclusive, where pname:minImageExtent and
+    pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-07782]]
+    If a slink:VkSwapchainPresentScalingCreateInfoEXT structure was included
+    in the pname:pNext chain and
+    slink:VkSwapchainPresentScalingCreateInfoEXT::pname:scalingBehavior is
+    not zero then pname:imageExtent must: be between
+    pname:minScaledImageExtent and pname:maxScaledImageExtent, inclusive,
+    where pname:minScaledImageExtent and pname:maxScaledImageExtent are
+    members of the sname:VkSurfacePresentScalingCapabilitiesEXT structure
+    returned by fname:vkGetPhysicalDeviceSurfaceCapabilities2KHR for the
+    surface and pname:presentMode
+endif::VK_EXT_swapchain_maintenance1[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01689]]
+    pname:imageExtent members pname:width and pname:height must: both be
+    non-zero
+  * [[VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275]]
+    pname:imageArrayLayers must: be greater than `0` and less than or equal
+    to the pname:maxImageArrayLayers member of the
+    sname:VkSurfaceCapabilitiesKHR structure returned by
+    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
+  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-01427]]
+    If pname:presentMode is ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
+    ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
+    ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR, pname:imageUsage must: be a
+    subset of the supported usage flags present in the
+    pname:supportedUsageFlags member of the slink:VkSurfaceCapabilitiesKHR
+    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for pname:surface
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01384]]
+    If pname:presentMode is ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
+    or ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, pname:imageUsage
+    must: be a subset of the supported usage flags present in the
+    pname:sharedPresentSupportedUsageFlags member of the
+    slink:VkSharedPresentSurfaceCapabilitiesKHR structure returned by
+    flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR for pname:surface
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277]]
+    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:pQueueFamilyIndices must: be a valid pointer to an array of
+    pname:queueFamilyIndexCount code:uint32_t values
+  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278]]
+    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:queueFamilyIndexCount must: be greater than `1`
+ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01393]]
+    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, each
+    element of pname:pQueueFamilyIndices must: be unique and must: be less
+    than pname:pQueueFamilyPropertyCount returned by
+    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01428]]
+    If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, each
+    element of pname:pQueueFamilyIndices must: be unique and must: be less
+    than pname:pQueueFamilyPropertyCount returned by either
+    flink:vkGetPhysicalDeviceQueueFamilyProperties or
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkSwapchainCreateInfoKHR-preTransform-01279]]
+    pname:preTransform must: be one of the bits present in the
+    pname:supportedTransforms member of the sname:VkSurfaceCapabilitiesKHR
+    structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+    for the surface
+  * [[VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280]]
+    pname:compositeAlpha must: be one of the bits present in the
+    pname:supportedCompositeAlpha member of the
+    sname:VkSurfaceCapabilitiesKHR structure returned by
+    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
+  * [[VUID-VkSwapchainCreateInfoKHR-presentMode-01281]]
+    pname:presentMode must: be one of the elink:VkPresentModeKHR values
+    returned by fname:vkGetPhysicalDeviceSurfacePresentModesKHR for the
+    surface
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSwapchainCreateInfoKHR-physicalDeviceCount-01429]]
+    If the logical device was created with
+    slink:VkDeviceGroupDeviceCreateInfo::pname:physicalDeviceCount equal to
+    1, pname:flags must: not contain
+    ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSwapchainCreateInfoKHR-flags-05072]]
+    pname:flags must: not contain
+    ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01933]]
+    If pname:oldSwapchain is not dlink:VK_NULL_HANDLE, pname:oldSwapchain
+    must: be a non-retired swapchain associated with native window referred
+    to by pname:surface
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSwapchainCreateInfoKHR-oldSwapchain-05073]]
+    pname:oldSwapchain must: be dlink:VK_NULL_HANDLE
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01778]]
+    The <<swapchain-wsi-image-create-info, implied image creation
+    parameters>> of the swapchain must: be supported as reported by
+    flink:vkGetPhysicalDeviceImageFormatProperties
+ifdef::VK_KHR_swapchain_mutable_format[]
+  * [[VUID-VkSwapchainCreateInfoKHR-flags-03168]]
+    If pname:flags contains ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR
+    then the pname:pNext chain must: include a
+    slink:VkImageFormatListCreateInfo structure with a pname:viewFormatCount
+    greater than zero and pname:pViewFormats must: have an element equal to
+    pname:imageFormat
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-04099]]
+    If a slink:VkImageFormatListCreateInfo structure was included in the
+    pname:pNext chain and
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero
+    then all of the formats in
+    slink:VkImageFormatListCreateInfo::pname:pViewFormats must: be
+    compatible with the pname:format as described in the
+    <<formats-compatibility,compatibility table>>
+  * [[VUID-VkSwapchainCreateInfoKHR-flags-04100]]
+    If pname:flags does not contain
+    ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR and the pname:pNext
+    chain include a slink:VkImageFormatListCreateInfo structure then
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount must: be `0` or
+    `1`
+endif::VK_KHR_swapchain_mutable_format[]
+ifdef::VK_KHR_surface_protected_capabilities[]
+  * [[VUID-VkSwapchainCreateInfoKHR-flags-03187]]
+    If pname:flags contains ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR,
+    then sname:VkSurfaceProtectedCapabilitiesKHR::pname:supportsProtected
+    must: be ename:VK_TRUE in the slink:VkSurfaceProtectedCapabilitiesKHR
+    structure returned by flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR
+    for pname:surface
+endif::VK_KHR_surface_protected_capabilities[]
+ifdef::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-02679]]
+    If the pname:pNext chain includes a
+    slink:VkSurfaceFullScreenExclusiveInfoEXT structure with its
+    pname:fullScreenExclusive member set to
+    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and
+    pname:surface was created using flink:vkCreateWin32SurfaceKHR, a
+    slink:VkSurfaceFullScreenExclusiveWin32InfoEXT structure must: be
+    included in the pname:pNext chain
+endif::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
+ifdef::VK_EXT_image_compression_control[]
+ifndef::VK_EXT_image_compression_control_swapchain[]
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-06751]]
+    The pname:pNext chain must: not include an
+    slink:VkImageCompressionControlEXT structure
+endif::VK_EXT_image_compression_control_swapchain[]
+ifdef::VK_EXT_image_compression_control_swapchain[]
+  * [[VUID-VkSwapchainCreateInfoKHR-pNext-06752]]
+    If the <<features-imageCompressionControlSwapchain,
+    pname:imageCompressionControlSwapchain>> feature is not enabled, the
+    pname:pNext chain must: not include an
+    slink:VkImageCompressionControlEXT structure
+endif::VK_EXT_image_compression_control_swapchain[]
+endif::VK_EXT_image_compression_control[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkSwapchainCreateInfoKHR::pname:flags must: not contain
+    ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+    <<SCID-8>>.
+  * slink:VkSwapchainCreateInfoKHR::pname:oldSwapchain must: be
+    dlink:VK_NULL_HANDLE <<SCID-4>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkSwapchainCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkSwapchainCreateFlagBitsKHR',desc='Bitmask controlling swapchain creation',type='enums']
+--
+Bits which can: be set in slink:VkSwapchainCreateInfoKHR::pname:flags,
+specifying parameters of swapchain creation, are:
+
+include::{generated}/api/enums/VkSwapchainCreateFlagBitsKHR.adoc[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR specifies
+    that images created from the swapchain (i.e. with the pname:swapchain
+    member of slink:VkImageSwapchainCreateInfoKHR set to this swapchain's
+    handle) must: use ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR specifies that images
+    created from the swapchain are protected images.
+endif::VK_VERSION_1_1[]
+ifdef::VK_KHR_swapchain_mutable_format[]
+  * ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR specifies that the
+    images of the swapchain can: be used to create a sname:VkImageView with
+    a different format than what the swapchain was created with.
+    The list of allowed image view formats is specified by adding a
+    slink:VkImageFormatListCreateInfo structure to the pname:pNext chain of
+    slink:VkSwapchainCreateInfoKHR.
+    In addition, this flag also specifies that the swapchain can: be created
+    with usage flags that are not supported for the format the swapchain is
+    created with but are supported for at least one of the allowed image
+    view formats.
+endif::VK_KHR_swapchain_mutable_format[]
+ifdef::VK_EXT_swapchain_maintenance1[]
+  * ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT specifies
+    that the implementation may: defer allocation of memory associated with
+    each swapchain image until its index is to be returned from
+    flink:vkAcquireNextImageKHR
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[or flink:vkAcquireNextImage2KHR]
+    for the first time.
+endif::VK_EXT_swapchain_maintenance1[]
+--
+
+[open,refpage='VkSwapchainCreateFlagsKHR',desc='Bitmask of VkSwapchainCreateFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkSwapchainCreateFlagsKHR.adoc[]
+
+tname:VkSwapchainCreateFlagsKHR is a bitmask type for setting a mask of zero
+or more elink:VkSwapchainCreateFlagBitsKHR.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkDeviceGroupSwapchainCreateInfoKHR',desc='Structure specifying parameters of a newly created swapchain object',type='structs']
+--
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
+sname:VkDeviceGroupSwapchainCreateInfoKHR structure, then that structure
+includes a set of device group present modes that the swapchain can: be used
+with.
+
+The sname:VkDeviceGroupSwapchainCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupSwapchainCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:modes is a bitfield of modes that the swapchain can: be used with.
+
+If this structure is not present, pname:modes is considered to be
+ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
+
+include::{generated}/validity/structs/VkDeviceGroupSwapchainCreateInfoKHR.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_AMD_display_native_hdr[]
+[open,refpage='VkSwapchainDisplayNativeHdrCreateInfoAMD',desc='Structure specifying display native HDR parameters of a newly created swapchain object',type='structs']
+--
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
+sname:VkSwapchainDisplayNativeHdrCreateInfoAMD structure, then that
+structure includes additional swapchain creation parameters specific to
+display native HDR support.
+
+The sname:VkSwapchainDisplayNativeHdrCreateInfoAMD structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainDisplayNativeHdrCreateInfoAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:localDimmingEnable specifies whether local dimming is enabled for
+    the swapchain.
+
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR does not include
+this structure, the default value for pname:localDimmingEnable is
+ename:VK_TRUE, meaning local dimming is initially enabled for the swapchain.
+
+include::{generated}/validity/structs/VkSwapchainDisplayNativeHdrCreateInfoAMD.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-localDimmingEnable-04449]]
+    It is only valid to set pname:localDimmingEnable to ename:VK_TRUE if
+    slink:VkDisplayNativeHdrSurfaceCapabilitiesAMD::pname:localDimmingSupport
+    is supported
+****
+--
+
+[open,refpage='vkSetLocalDimmingAMD',desc='Set Local Dimming',type='protos']
+--
+The local dimming HDR setting may also be changed over the life of a
+swapchain by calling:
+
+include::{generated}/api/protos/vkSetLocalDimmingAMD.adoc[]
+
+  * pname:device is the device associated with pname:swapChain.
+  * pname:swapChain handle to enable local dimming.
+  * pname:localDimmingEnable specifies whether local dimming is enabled for
+    the swapchain.
+
+include::{generated}/validity/protos/vkSetLocalDimmingAMD.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkSetLocalDimmingAMD-localDimmingSupport-04618]]
+    slink:VkDisplayNativeHdrSurfaceCapabilitiesAMD::pname:localDimmingSupport
+    must: be supported
+****
+--
+endif::VK_AMD_display_native_hdr[]
+
+ifdef::VK_EXT_full_screen_exclusive[]
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a
+slink:VkSurfaceFullScreenExclusiveInfoEXT structure, then that structure
+specifies the application's preferred full-screen presentation behavior.
+If this structure is not present, pname:fullScreenExclusive is considered to
+be ename:VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT.
+endif::VK_EXT_full_screen_exclusive[]
+
+ifdef::VK_EXT_display_control[]
+include::{chapters}/VK_EXT_display_control/swapchain_counters.adoc[]
+endif::VK_EXT_display_control[]
+
+ifdef::VK_EXT_image_compression_control[]
+ifdef::VK_EXT_image_compression_control_swapchain[]
+To specify compression properties for the swapchain images in this
+swapchain, add a slink:VkImageCompressionControlEXT structure to the
+pname:pNext chain of the slink:VkSwapchainCreateInfoKHR structure.
+endif::VK_EXT_image_compression_control_swapchain[]
+endif::VK_EXT_image_compression_control[]
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentModesCreateInfo.adoc[]
+include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentScalingCreateInfo.adoc[]
+endif::VK_EXT_swapchain_maintenance1[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkDestroySwapchainKHR <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+
+Swapchains cannot: be destroyed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, the memory for swapchain images is returned to the system
+when the device is destroyed.
+
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='vkDestroySwapchainKHR',desc='Destroy a swapchain object',type='protos']
+--
+To destroy a swapchain object call:
+
+include::{generated}/api/protos/vkDestroySwapchainKHR.adoc[]
+
+  * pname:device is the slink:VkDevice associated with pname:swapchain.
+  * pname:swapchain is the swapchain to destroy.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    swapchain object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+
+The application must: not destroy a swapchain until after completion of all
+outstanding operations on images that were acquired from the swapchain.
+pname:swapchain and all associated sname:VkImage handles are destroyed, and
+must: not be acquired or used any more by the application.
+The memory of each sname:VkImage will only be freed after that image is no
+longer used by the presentation engine.
+For example, if one image of the swapchain is being displayed in a window,
+the memory for that image may: not be freed until the window is destroyed,
+or another swapchain is created for the window.
+Destroying the swapchain does not invalidate the parent sname:VkSurfaceKHR,
+and a new swapchain can: be created with it.
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/destroy_swapchain_interactions.adoc[]
+endif::VK_KHR_display_swapchain[]
+
+ifdef::VK_EXT_full_screen_exclusive[]
+If pname:swapchain has exclusive full-screen access, it is released before
+the swapchain is destroyed.
+endif::VK_EXT_full_screen_exclusive[]
+
+.Valid Usage
+****
+  * [[VUID-vkDestroySwapchainKHR-swapchain-01282]]
+    All uses of presentable images acquired from pname:swapchain must: have
+    completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroySwapchainKHR-swapchain-01283]]
+    If sname:VkAllocationCallbacks were provided when pname:swapchain was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroySwapchainKHR-swapchain-01284]]
+    If no sname:VkAllocationCallbacks were provided when pname:swapchain was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroySwapchainKHR.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/create_shared_swapchains.adoc[]
+endif::VK_KHR_display_swapchain[]
+
+[open,refpage='vkGetSwapchainImagesKHR',desc='Obtain the array of presentable images associated with a swapchain',type='protos']
+--
+:refpage: vkGetSwapchainImagesKHR
+
+To obtain the array of presentable images associated with a swapchain, call:
+
+include::{generated}/api/protos/vkGetSwapchainImagesKHR.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to query.
+  * pname:pSwapchainImageCount is a pointer to an integer related to the
+    number of presentable images available or queried, as described below.
+  * pname:pSwapchainImages is either `NULL` or a pointer to an array of
+    sname:VkImage handles.
+
+If pname:pSwapchainImages is `NULL`, then the number of presentable images
+for pname:swapchain is returned in pname:pSwapchainImageCount.
+Otherwise, pname:pSwapchainImageCount must: point to a variable set by the
+user to the number of elements in the pname:pSwapchainImages array, and on
+return the variable is overwritten with the number of structures actually
+written to pname:pSwapchainImages.
+If the value of pname:pSwapchainImageCount is less than the number of
+presentable images for pname:swapchain, at most pname:pSwapchainImageCount
+structures will be written, and ename:VK_INCOMPLETE will be returned instead
+of ename:VK_SUCCESS, to indicate that not all the available presentable
+images were returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetSwapchainImagesKHR.adoc[]
+--
+
+[NOTE]
+.Note
+====
+By knowing all presentable images used in the swapchain, the application can
+create command buffers that reference these images prior to entering its
+main rendering loop.
+ifdef::VK_EXT_swapchain_maintenance1[]
+However, command buffers are not allowed to reference presentable images
+created with ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT
+until their indices have been returned from flink:vkAcquireNextImageKHR at
+least once.
+endif::VK_EXT_swapchain_maintenance1[]
+====
+
+Images returned by flink:vkGetSwapchainImagesKHR are fully backed by memory
+before they are passed to the application, as if they are each bound
+completely and contiguously to a single sname:VkDeviceMemory object
+ifdef::VK_EXT_swapchain_maintenance1[]
+, unless the swapchain is created with the
+ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT flag
+endif::VK_EXT_swapchain_maintenance1[]
+.
+All presentable images are initially in the ename:VK_IMAGE_LAYOUT_UNDEFINED
+layout, thus before using presentable images, the application must:
+transition them to a valid layout for the intended use.
+
+ifndef::VKSC_VERSION_1_0[]
+
+Further, the lifetime of presentable images is controlled by the
+implementation, so applications must: not destroy a presentable image.
+See flink:vkDestroySwapchainKHR for further details on the lifetime of
+presentable images.
+
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+
+Images can: also be created by using flink:vkCreateImage with
+slink:VkImageSwapchainCreateInfoKHR and bound to swapchain memory using
+flink:vkBindImageMemory2 with slink:VkBindImageMemorySwapchainInfoKHR.
+These images can: be used anywhere swapchain images are used, and are useful
+in logical devices with multiple physical devices to create peer memory
+bindings of swapchain memory.
+These images and bindings have no effect on what memory is presented.
+Unlike images retrieved from fname:vkGetSwapchainImagesKHR, these images
+must: be destroyed with flink:vkDestroyImage.
+
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[open,refpage='vkAcquireNextImageKHR',desc='Retrieve the index of the next available presentable image',type='protos']
+--
+:refpage: vkAcquireNextImageKHR
+
+To acquire an available presentable image to use, and retrieve the index of
+that image, call:
+
+include::{generated}/api/protos/vkAcquireNextImageKHR.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the non-retired swapchain from which an image is
+    being acquired.
+  * pname:timeout specifies how long the function waits, in nanoseconds, if
+    no image is available.
+  * pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
+  * pname:fence is dlink:VK_NULL_HANDLE or a fence to signal.
+  * pname:pImageIndex is a pointer to a code:uint32_t in which the index of
+    the next image to use (i.e. an index into the array of images returned
+    by fname:vkGetSwapchainImagesKHR) is returned.
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+If the pname:swapchain has been created with the
+ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT flag, the image
+whose index is returned in pname:pImageIndex will be fully backed by memory
+before this call returns to the application, as if it is bound completely
+and contiguously to a single sname:VkDeviceMemory object.
+endif::VK_EXT_swapchain_maintenance1[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkAcquireNextImageKHR-swapchain-01285]]
+    pname:swapchain must: not be in the retired state
+  * [[VUID-vkAcquireNextImageKHR-semaphore-01286]]
+    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
+  * [[VUID-vkAcquireNextImageKHR-semaphore-01779]]
+    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: not have any
+    uncompleted signal or wait operations pending
+  * [[VUID-vkAcquireNextImageKHR-fence-01287]]
+    If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
+    must: not be associated with any other queue command that has not yet
+    completed execution on that queue
+  * [[VUID-vkAcquireNextImageKHR-semaphore-01780]]
+    pname:semaphore and pname:fence must: not both be equal to
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkAcquireNextImageKHR-surface-07783]]
+    If <<swapchain-acquire-forward-progress,forward progress>> cannot be
+    guaranteed for the pname:surface used to create the pname:swapchain
+    member of pname:pAcquireInfo, the pname:timeout member of
+    pname:pAcquireInfo must: not be code:UINT64_MAX
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkAcquireNextImageKHR-semaphore-03265]]
+    pname:semaphore must: have a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/protos/vkAcquireNextImageKHR.adoc[]
+--
+
+If an image is acquired successfully, fname:vkAcquireNextImageKHR must:
+either return ename:VK_SUCCESS or ename:VK_SUBOPTIMAL_KHR.
+The implementation may: return ename:VK_SUBOPTIMAL_KHR if the swapchain no
+longer matches the surface properties exactly, but can: still be used for
+presentation.
+
+When successful, fname:vkAcquireNextImageKHR acquires a presentable image
+from pname:swapchain that an application can: use, and sets
+pname:pImageIndex to the index of that image within the swapchain.
+The presentation engine may: not have finished reading from the image at the
+time it is acquired, so the application must: use pname:semaphore and/or
+pname:fence to ensure that the image layout and contents are not modified
+until the presentation engine reads have completed.
+Once fname:vkAcquireNextImageKHR successfully acquires an image, the
+semaphore signal operation referenced by pname:semaphore, if not
+dlink:VK_NULL_HANDLE, and the fence signal operation referenced by
+pname:fence, if not dlink:VK_NULL_HANDLE, are submitted for execution.
+If fname:vkAcquireNextImageKHR does not successfully acquire an image,
+pname:semaphore and pname:fence are unaffected.
+The order in which images are acquired is implementation-dependent, and may:
+be different than the order the images were presented.
+
+If pname:timeout is zero, then fname:vkAcquireNextImageKHR does not wait,
+and will either successfully acquire an image, or fail and return
+ename:VK_NOT_READY if no image is available.
+
+If the specified timeout period expires before an image is acquired,
+fname:vkAcquireNextImageKHR returns ename:VK_TIMEOUT.
+If pname:timeout is code:UINT64_MAX, the timeout period is treated as
+infinite, and fname:vkAcquireNextImageKHR will block until an image is
+acquired or an error occurs.
+
+[[swapchain-acquire-forward-progress]]
+Let [eq]#S# be the number of images in pname:swapchain.
+ifndef::VK_EXT_swapchain_maintenance1[]
+Let [eq]#M# be the value of
+slink:VkSurfaceCapabilitiesKHR::pname:minImageCount.
+endif::VK_EXT_swapchain_maintenance1[]
+ifdef::VK_EXT_swapchain_maintenance1[]
+If pname:swapchain is created with
+slink:VkSwapchainPresentModesCreateInfoEXT, let [eq]#M# be the maximum of
+the values in slink:VkSurfaceCapabilitiesKHR::pname:minImageCount when
+queried with each present mode in
+slink:VkSwapchainPresentModesCreateInfoEXT::pname:pPresentModes in
+slink:VkSurfacePresentModeEXT.
+Otherwise, let [eq]#M# be the value of
+slink:VkSurfaceCapabilitiesKHR::pname:minImageCount without a
+slink:VkSurfacePresentModeEXT as part of the query input.
+endif::VK_EXT_swapchain_maintenance1[]
+
+fname:vkAcquireNextImageKHR should: not be called if the number of images
+that the application has currently acquired is greater than [eq]#S-M#.
+If fname:vkAcquireNextImageKHR is called when the number of images that the
+application has currently acquired is less than or equal to [eq]#S-M#,
+fname:vkAcquireNextImageKHR must: return in finite time with an allowed
+ename:VkResult code.
+
+[NOTE]
+.Note
+====
+Returning a result in finite time guarantees that the implementation cannot
+deadlock an application, or suspend its execution indefinitely with correct
+API usage.
+Acquiring too many images at once may block indefinitely, which is covered
+by valid usage when attempting to use code:UINT64_MAX.
+For example, a scenario here is when a compositor holds on to images which
+are currently being presented, and there are not any vacant images left to
+be acquired.
+====
+
+[NOTE]
+.Note
+====
+ename:VK_SUBOPTIMAL_KHR may: happen, for example, if the platform surface
+has been resized but the platform is able to scale the presented images to
+the new size to produce valid surface updates.
+It is up to the application to decide whether it prefers to continue using
+the current swapchain in this state, or to re-create the swapchain to better
+match the platform surface properties.
+====
+
+If the swapchain images no longer match native surface properties, either
+ename:VK_SUBOPTIMAL_KHR or ename:VK_ERROR_OUT_OF_DATE_KHR must: be returned.
+If ename:VK_ERROR_OUT_OF_DATE_KHR is returned, no image is acquired and
+attempts to present previously acquired images to the swapchain will also
+fail with ename:VK_ERROR_OUT_OF_DATE_KHR.
+Applications need to create a new swapchain for the surface to continue
+presenting if ename:VK_ERROR_OUT_OF_DATE_KHR is returned.
+
+If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
+the timeout has expired, fname:vkAcquireNextImageKHR must: return in finite
+time with either one of the allowed success codes, or
+ename:VK_ERROR_DEVICE_LOST.
+
+If pname:semaphore is not dlink:VK_NULL_HANDLE, the semaphore must: be
+unsignaled, with no signal or wait operations pending.
+It will become signaled when the application can: use the image.
+
+[NOTE]
+.Note
+====
+Use of pname:semaphore allows rendering operations to be recorded and
+submitted before the presentation engine has completed its use of the image.
+====
+
+If pname:fence is not equal to dlink:VK_NULL_HANDLE, the fence must: be
+unsignaled, with no signal operations pending.
+It will become signaled when the application can: use the image.
+
+[NOTE]
+.Note
+====
+Applications should: not rely on fname:vkAcquireNextImageKHR blocking in
+order to meter their rendering speed.
+The implementation may: return from this function immediately regardless of
+how many presentation requests are queued, and regardless of when queued
+presentation requests will complete relative to the call.
+Instead, applications can: use pname:fence to meter their frame generation
+work to match the presentation rate.
+====
+
+An application must: wait until either the pname:semaphore or pname:fence is
+signaled before accessing the image's data.
+
+[NOTE]
+.Note
+====
+When the presentable image will be accessed by some stage [eq]#S#, the
+recommended idiom for ensuring correct synchronization is:
+
+  * The slink:VkSubmitInfo used to submit the image layout transition for
+    execution includes fname:vkAcquireNextImageKHR::pname:semaphore in its
+    pname:pWaitSemaphores member, with the corresponding element of
+    pname:pWaitDstStageMask including [eq]#S#.
+  * The <<synchronization, synchronization command>> that performs any
+    necessary image layout transition includes [eq]#S# in both the
+    pname:srcStageMask and pname:dstStageMask.
+====
+
+After a successful return, the image indicated by pname:pImageIndex and its
+data will be unmodified compared to when it was presented.
+
+[NOTE]
+.Note
+====
+Exclusive ownership of presentable images corresponding to a swapchain
+created with ename:VK_SHARING_MODE_EXCLUSIVE as defined in
+<<resources-sharing,Resource Sharing>> is not altered by a call to
+fname:vkAcquireNextImageKHR.
+That means upon the first acquisition from such a swapchain presentable
+images are not owned by any queue family, while at subsequent acquisitions
+the presentable images remain owned by the queue family the image was
+previously presented on.
+====
+
+The possible return values for fname:vkAcquireNextImageKHR depend on the
+pname:timeout provided:
+
+  * ename:VK_SUCCESS is returned if an image became available.
+  * ename:VK_ERROR_SURFACE_LOST_KHR is returned if the surface becomes no
+    longer available.
+  * ename:VK_NOT_READY is returned if pname:timeout is zero and no image was
+    available.
+  * ename:VK_TIMEOUT is returned if pname:timeout is greater than zero and
+    less than code:UINT64_MAX, and no image became available within the time
+    allowed.
+  * ename:VK_SUBOPTIMAL_KHR is returned if an image became available, and
+    the swapchain no longer matches the surface properties exactly, but can:
+    still be used to present to the surface successfully.
+
+[NOTE]
+.Note
+====
+This may: happen, for example, if the platform surface has been resized but
+the platform is able to scale the presented images to the new size to
+produce valid surface updates.
+It is up to the application to decide whether it prefers to continue using
+the current swapchain indefinitely or temporarily in this state, or to
+re-create the swapchain to better match the platform surface properties.
+====
+
+  * ename:VK_ERROR_OUT_OF_DATE_KHR is returned if the surface has changed in
+    such a way that it is no longer compatible with the swapchain, and
+    further presentation requests using the swapchain will fail.
+    Applications must: query the new surface properties and recreate their
+    swapchain if they wish to continue presenting to the surface.
+
+If the native surface and presented image sizes no longer match,
+presentation may: fail
+ifdef::VK_EXT_swapchain_maintenance1[]
+unless the swapchain is created with a non-zero value in
+slink:VkSwapchainPresentScalingCreateInfoEXT::pname:scalingBehavior
+endif::VK_EXT_swapchain_maintenance1[]
+.
+If presentation does succeed, the mapping from the presented image to the
+native surface is
+ifdef::VK_EXT_swapchain_maintenance1[]
+defined by the slink:VkSwapchainPresentScalingCreateInfoEXT structure if
+provided.
+Otherwise it is
+endif::VK_EXT_swapchain_maintenance1[]
+implementation-defined.
+It is the application's responsibility to detect surface size changes and
+react appropriately.
+If presentation fails because of a mismatch in the surface and presented
+image sizes, a ename:VK_ERROR_OUT_OF_DATE_KHR error will be returned.
+
+[NOTE]
+.Note
+====
+For example, consider a 4x3 window/surface that gets resized to be 3x4
+(taller than wider).
+On some window systems, the portion of the window/surface that was
+previously and still is visible (the 3x3 part) will contain the same
+contents as before, while the remaining parts of the window will have
+undefined: contents.
+Other window systems may: squash/stretch the image to fill the new window
+size without any undefined: contents, or apply some other mapping.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='vkAcquireNextImage2KHR',desc='Retrieve the index of the next available presentable image',type='protos']
+--
+:refpage: vkAcquireNextImage2KHR
+
+To acquire an available presentable image to use, and retrieve the index of
+that image, call:
+
+include::{generated}/api/protos/vkAcquireNextImage2KHR.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:pAcquireInfo is a pointer to a slink:VkAcquireNextImageInfoKHR
+    structure containing parameters of the acquire.
+  * pname:pImageIndex is a pointer to a code:uint32_t that is set to the
+    index of the next image to use.
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+If the pname:swapchain has been created with the
+ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT flag, the image
+whose index is returned in pname:pImageIndex will be fully backed by memory
+before this call returns to the application.
+endif::VK_EXT_swapchain_maintenance1[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkAcquireNextImage2KHR-surface-07784]]
+    If <<swapchain-acquire-forward-progress,forward progress>> cannot be
+    guaranteed for the pname:surface used to create pname:swapchain, the
+    pname:timeout member of pname:pAcquireInfo must: not be code:UINT64_MAX
+****
+
+include::{generated}/validity/protos/vkAcquireNextImage2KHR.adoc[]
+--
+
+[open,refpage='VkAcquireNextImageInfoKHR',desc='Structure specifying parameters of the acquire',type='structs']
+--
+The sname:VkAcquireNextImageInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAcquireNextImageInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchain is a non-retired swapchain from which an image is
+    acquired.
+  * pname:timeout specifies how long the function waits, in nanoseconds, if
+    no image is available.
+  * pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
+  * pname:fence is dlink:VK_NULL_HANDLE or a fence to signal.
+  * pname:deviceMask is a mask of physical devices for which the swapchain
+    image will be ready to use when the semaphore or fence is signaled.
+
+If flink:vkAcquireNextImageKHR is used, the device mask is considered to
+include all physical devices in the logical device.
+
+[NOTE]
+.Note
+====
+flink:vkAcquireNextImage2KHR signals at most one semaphore, even if the
+application requests waiting for multiple physical devices to be ready via
+the pname:deviceMask.
+However, only a single physical device can: wait on that semaphore, since
+the semaphore becomes unsignaled when the wait succeeds.
+For other physical devices to wait for the image to be ready, it is
+necessary for the application to submit semaphore signal operation(s) to
+that first physical device to signal additional semaphore(s) after the wait
+succeeds, which the other physical device(s) can: wait upon.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkAcquireNextImageInfoKHR-swapchain-01675]]
+    pname:swapchain must: not be in the retired state
+  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01288]]
+    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
+  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01781]]
+    If pname:semaphore is not dlink:VK_NULL_HANDLE it must: not have any
+    uncompleted signal or wait operations pending
+  * [[VUID-VkAcquireNextImageInfoKHR-fence-01289]]
+    If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
+    must: not be associated with any other queue command that has not yet
+    completed execution on that queue
+  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-01782]]
+    pname:semaphore and pname:fence must: not both be equal to
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkAcquireNextImageInfoKHR-deviceMask-01290]]
+    pname:deviceMask must: be a valid device mask
+  * [[VUID-VkAcquireNextImageInfoKHR-deviceMask-01291]]
+    pname:deviceMask must: not be zero
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkAcquireNextImageInfoKHR-semaphore-03266]]
+    pname:semaphore must: have a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/structs/VkAcquireNextImageInfoKHR.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[open,refpage='vkQueuePresentKHR',desc='Queue an image for presentation',type='protos']
+--
+:refpage: vkQueuePresentKHR
+
+After queueing all rendering commands and transitioning the image to the
+correct layout, to queue an image for presentation, call:
+
+include::{generated}/api/protos/vkQueuePresentKHR.adoc[]
+
+  * pname:queue is a queue that is capable of presentation to the target
+    surface's platform on the same device as the image's swapchain.
+  * pname:pPresentInfo is a pointer to a slink:VkPresentInfoKHR structure
+    specifying parameters of the presentation.
+
+.Note
+[NOTE]
+====
+There is no requirement for an application to present images in the same
+order that they were acquired - applications can arbitrarily present any
+image that is currently acquired.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkQueuePresentKHR-pSwapchains-01292]]
+    Each element of pname:pSwapchains member of pname:pPresentInfo must: be
+    a swapchain that is created for a surface for which presentation is
+    supported from pname:queue as determined using a call to
+    fname:vkGetPhysicalDeviceSurfaceSupportKHR
+ifdef::VK_KHR_display_swapchain[]
+  * [[VUID-vkQueuePresentKHR-pSwapchains-01293]]
+    If more than one member of pname:pSwapchains was created from a display
+    surface, all display surfaces referenced that refer to the same display
+    must: use the same display mode
+endif::VK_KHR_display_swapchain[]
+  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01294]]
+    When a semaphore wait operation referring to a binary semaphore defined
+    by the elements of the pname:pWaitSemaphores member of
+    pname:pPresentInfo executes on pname:queue, there must: be no other
+    queues waiting on the same semaphore
+ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01295]]
+    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
+    must: be semaphores that are signaled, or have
+    <<synchronization-semaphores-signaling, semaphore signal operations>>
+    previously submitted for execution
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03267]]
+    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
+    must: be created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_BINARY
+  * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03268]]
+    All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
+    must: reference a semaphore signal operation that has been submitted for
+    execution and any <<synchronization-semaphores-signaling, semaphore
+    signal operations>> on which it depends (if any) must: have also been
+    submitted for execution
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+Any writes to memory backing the images referenced by the
+pname:pImageIndices and pname:pSwapchains members of pname:pPresentInfo,
+that are available before flink:vkQueuePresentKHR is executed, are
+automatically made visible to the read access performed by the presentation
+engine.
+This automatic visibility operation for an image happens-after the semaphore
+signal operation, and happens-before the presentation engine accesses the
+image.
+
+Queueing an image for presentation defines a set of _queue operations_,
+including waiting on the semaphores and submitting a presentation request to
+the presentation engine.
+However, the scope of this set of queue operations does not include the
+actual processing of the image by the presentation engine.
+
+.Note
+[NOTE]
+====
+The origin of the native orientation of the surface coordinate system is not
+specified in the Vulkan specification; it depends on the platform.
+For most platforms the origin is by default upper-left, meaning the pixel of
+the presented slink:VkImage at coordinates [eq]#(0,0)# would appear at the
+upper left pixel of the platform surface (assuming
+ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the display standing the
+right way up).
+====
+
+If fname:vkQueuePresentKHR fails to enqueue the corresponding set of queue
+operations, it may: return ename:VK_ERROR_OUT_OF_HOST_MEMORY or
+ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+If it does, the implementation must: ensure that the state and contents of
+any resources or synchronization primitives referenced is unaffected by the
+call or its failure.
+
+If fname:vkQueuePresentKHR fails in such a way that the implementation is
+unable to make that guarantee, the implementation must: return
+ename:VK_ERROR_DEVICE_LOST.
+
+However, if the presentation request is rejected by the presentation engine
+with an error ename:VK_ERROR_OUT_OF_DATE_KHR,
+ifdef::VK_EXT_full_screen_exclusive[]
+ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT,
+endif::VK_EXT_full_screen_exclusive[]
+or ename:VK_ERROR_SURFACE_LOST_KHR, the set of queue operations are still
+considered to be enqueued and thus any semaphore wait operation specified in
+slink:VkPresentInfoKHR will execute when the corresponding queue operation
+is complete.
+
+Calls to fname:vkQueuePresentKHR may: block, but must: return in finite
+time.
+
+ifdef::VK_EXT_full_screen_exclusive[]
+If any pname:swapchain member of pname:pPresentInfo was created with
+ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
+ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT will be returned if that
+swapchain does not have exclusive full-screen access, possibly for
+implementation-specific reasons outside of the application's control.
+endif::VK_EXT_full_screen_exclusive[]
+
+include::{generated}/validity/protos/vkQueuePresentKHR.adoc[]
+--
+
+[open,refpage='VkPresentInfoKHR',desc='Structure describing parameters of a queue presentation',type='structs']
+--
+The sname:VkPresentInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPresentInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreCount is the number of semaphores to wait for before
+    issuing the present request.
+    The number may: be zero.
+  * pname:pWaitSemaphores is `NULL` or a pointer to an array of
+    slink:VkSemaphore objects with pname:waitSemaphoreCount entries, and
+    specifies the semaphores to wait for before issuing the present request.
+  * pname:swapchainCount is the number of swapchains being presented to by
+    this command.
+  * pname:pSwapchains is a pointer to an array of slink:VkSwapchainKHR
+    objects with pname:swapchainCount entries.
+  * pname:pImageIndices is a pointer to an array of indices into the array
+    of each swapchain's presentable images, with pname:swapchainCount
+    entries.
+    Each entry in this array identifies the image to present on the
+    corresponding entry in the pname:pSwapchains array.
+  * pname:pResults is a pointer to an array of elink:VkResult typed elements
+    with pname:swapchainCount entries.
+    Applications that do not need per-swapchain results can: use `NULL` for
+    pname:pResults.
+    If non-`NULL`, each entry in pname:pResults will be set to the
+    elink:VkResult for presenting the swapchain corresponding to the same
+    index in pname:pSwapchains.
+
+Before an application can: present an image, the image's layout must: be
+transitioned to the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+ifdef::VK_KHR_shared_presentable_image[]
+layout, or for a shared presentable image the
+ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+layout.
+
+.Note
+[NOTE]
+====
+When transitioning the image to
+ifdef::VK_KHR_shared_presentable_image[]
+ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
+endif::VK_KHR_shared_presentable_image[]
+ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, there is no need to delay subsequent
+processing, or perform any visibility operations (as flink:vkQueuePresentKHR
+performs automatic visibility operations).
+To achieve this, the pname:dstAccessMask member of the
+slink:VkImageMemoryBarrier should: be set to `0`, and the pname:dstStageMask
+parameter should: be set to ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkPresentInfoKHR-pSwapchain-09231]]
+    Elements of pname:pSwapchain must: be unique
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkPresentInfoKHR-pImageIndices-01296]]
+    Each element of pname:pImageIndices must: be the index of a presentable
+    image acquired from the swapchain specified by the corresponding element
+    of the pname:pSwapchains array, and the presented image subresource
+    must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout at the time
+    the operation is executed on a sname:VkDevice
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkPresentInfoKHR-pImageIndices-01430]]
+    Each element of pname:pImageIndices must: be the index of a presentable
+    image acquired from the swapchain specified by the corresponding element
+    of the pname:pSwapchains array, and the presented image subresource
+    must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the
+    operation is executed on a sname:VkDevice
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_present_id[]
+  * [[VUID-VkPresentInfoKHR-pNext-06235]]
+    If a slink:VkPresentIdKHR structure is included in the pname:pNext
+    chain, and the <<features-presentId, pname:presentId>> feature is not
+    enabled, each pname:presentIds entry in that structure must: be NULL
+endif::VK_KHR_present_id[]
+ifdef::VK_EXT_swapchain_maintenance1[]
+  * [[VUID-VkPresentInfoKHR-pSwapchains-09199]]
+    If any element of the pname:pSwapchains array has been created with
+    slink:VkSwapchainPresentModesCreateInfoEXT, all of the elements of this
+    array must: be created with slink:VkSwapchainPresentModesCreateInfoEXT
+endif::VK_EXT_swapchain_maintenance1[]
+****
+
+include::{generated}/validity/structs/VkPresentInfoKHR.adoc[]
+--
+
+ifdef::VK_KHR_incremental_present[]
+include::{chapters}/VK_KHR_incremental_present/wsi.adoc[]
+endif::VK_KHR_incremental_present[]
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/display_swapchain_present.adoc[]
+endif::VK_KHR_display_swapchain[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkDeviceGroupPresentInfoKHR',desc='Mode and mask controlling which physical devices\' images are presented',type='structs']
+--
+If the pname:pNext chain of slink:VkPresentInfoKHR includes a
+sname:VkDeviceGroupPresentInfoKHR structure, then that structure includes an
+array of device masks and a device group present mode.
+
+The sname:VkDeviceGroupPresentInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupPresentInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchainCount is zero or the number of elements in
+    pname:pDeviceMasks.
+  * pname:pDeviceMasks is a pointer to an array of device masks, one for
+    each element of slink:VkPresentInfoKHR::pname:pSwapchains.
+  * pname:mode is a elink:VkDeviceGroupPresentModeFlagBitsKHR value
+    specifying the device group present mode that will be used for this
+    present.
+
+If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, then each
+element of pname:pDeviceMasks selects which instance of the swapchain image
+is presented.
+Each element of pname:pDeviceMasks must: have exactly one bit set, and the
+corresponding physical device must: have a presentation engine as reported
+by slink:VkDeviceGroupPresentCapabilitiesKHR.
+
+If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, then
+each element of pname:pDeviceMasks selects which instance of the swapchain
+image is presented.
+Each element of pname:pDeviceMasks must: have exactly one bit set, and some
+physical device in the logical device must: include that bit in its
+slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask.
+
+If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, then each
+element of pname:pDeviceMasks selects which instances of the swapchain image
+are component-wise summed and the sum of those images is presented.
+If the sum in any component is outside the representable range, the value of
+that component is undefined:.
+Each element of pname:pDeviceMasks must: have a value for which all set bits
+are set in one of the elements of
+slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask.
+
+If pname:mode is
+ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR, then each
+element of pname:pDeviceMasks selects which instance(s) of the swapchain
+images are presented.
+For each bit set in each element of pname:pDeviceMasks, the corresponding
+physical device must: have a presentation engine as reported by
+slink:VkDeviceGroupPresentCapabilitiesKHR.
+
+If sname:VkDeviceGroupPresentInfoKHR is not provided or pname:swapchainCount
+is zero then the masks are considered to be `1`.
+If sname:VkDeviceGroupPresentInfoKHR is not provided, pname:mode is
+considered to be ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297]]
+    pname:swapchainCount must: equal `0` or
+    slink:VkPresentInfoKHR::pname:swapchainCount
+  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01298]]
+    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, then
+    each element of pname:pDeviceMasks must: have exactly one bit set, and
+    the corresponding element of
+    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask must: be
+    non-zero
+  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01299]]
+    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, then
+    each element of pname:pDeviceMasks must: have exactly one bit set, and
+    some physical device in the logical device must: include that bit in its
+    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
+  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01300]]
+    If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, then
+    each element of pname:pDeviceMasks must: have a value for which all set
+    bits are set in one of the elements of
+    slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
+  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01301]]
+    If pname:mode is
+    ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR, then for
+    each bit set in each element of pname:pDeviceMasks, the corresponding
+    element of slink:VkDeviceGroupPresentCapabilitiesKHR::pname:presentMask
+    must: be non-zero
+  * [[VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302]]
+    The value of each element of pname:pDeviceMasks must: be equal to the
+    device mask passed in slink:VkAcquireNextImageInfoKHR::pname:deviceMask
+    when the image index was last acquired
+  * [[VUID-VkDeviceGroupPresentInfoKHR-mode-01303]]
+    pname:mode must: have exactly one bit set, and that bit must: have been
+    included in slink:VkDeviceGroupSwapchainCreateInfoKHR::pname:modes
+****
+
+include::{generated}/validity/structs/VkDeviceGroupPresentInfoKHR.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_GOOGLE_display_timing[]
+include::{chapters}/VK_GOOGLE_display_timing/PresentTimeInfo.adoc[]
+endif::VK_GOOGLE_display_timing[]
+
+ifdef::VK_KHR_present_id[]
+include::{chapters}/VK_KHR_swapchain/PresentId.adoc[]
+endif::VK_KHR_present_id[]
+
+ifdef::VK_GGP_frame_token[]
+include::{chapters}/VK_GGP_frame_token.adoc[]
+endif::VK_GGP_frame_token[]
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentModeInfo.adoc[]
+include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentFenceInfo.adoc[]
+endif::VK_EXT_swapchain_maintenance1[]
+
+fname:vkQueuePresentKHR releases the acquisition of the images referenced by
+pname:imageIndices.
+The queue family corresponding to the queue fname:vkQueuePresentKHR is
+executed on must: have ownership of the presented images as defined in
+<<resources-sharing,Resource Sharing>>.
+fname:vkQueuePresentKHR does not alter the queue family ownership, but the
+presented images must: not be used again before they have been reacquired
+using fname:vkAcquireNextImageKHR.
+
+The processing of the presentation happens in issue order with other queue
+operations, but semaphores have to be used to ensure that prior rendering
+and other commands in the specified queue complete before the presentation
+begins.
+The presentation command itself does not delay processing of subsequent
+commands on the queue, however, presentation requests sent to a particular
+queue are always performed in order.
+Exact presentation timing is controlled by the semantics of the presentation
+engine and native platform in use.
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/queue_present_interactions.adoc[]
+endif::VK_KHR_display_swapchain[]
+
+The result codes ename:VK_ERROR_OUT_OF_DATE_KHR and ename:VK_SUBOPTIMAL_KHR
+have the same meaning when returned by fname:vkQueuePresentKHR as they do
+when returned by fname:vkAcquireNextImageKHR.
+If multiple swapchains are presented, the result code is determined applying
+the following rules in order:
+
+  * If the device is lost, ename:VK_ERROR_DEVICE_LOST is returned.
+  * If any of the target surfaces are no longer available the error
+    ename:VK_ERROR_SURFACE_LOST_KHR is returned.
+  * If any of the presents would have a result of
+    ename:VK_ERROR_OUT_OF_DATE_KHR if issued separately then
+    ename:VK_ERROR_OUT_OF_DATE_KHR is returned.
+ifdef::VK_EXT_full_screen_exclusive[]
+  * If any of the presents would have a result of
+    ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT if issued separately
+    then ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT is returned.
+endif::VK_EXT_full_screen_exclusive[]
+  * If any of the presents would have a result of ename:VK_SUBOPTIMAL_KHR if
+    issued separately then ename:VK_SUBOPTIMAL_KHR is returned.
+  * Otherwise ename:VK_SUCCESS is returned.
+
+Presentation is a read-only operation that will not affect the content of
+the presentable images.
+Upon reacquiring the image and transitioning it away from the
+ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout, the contents will be the same
+as they were prior to transitioning the image to the present source layout
+and presenting it.
+However, if a mechanism other than Vulkan is used to modify the platform
+window associated with the swapchain, the content of all presentable images
+in the swapchain becomes undefined:.
+
+[NOTE]
+.Note
+====
+The application can: continue to present any acquired images from a retired
+swapchain as long as the swapchain has not entered a state that causes
+flink:vkQueuePresentKHR to return ename:VK_ERROR_OUT_OF_DATE_KHR.
+====
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+[open,refpage='vkReleaseSwapchainImagesEXT',desc='Release previously acquired but unused images',type='protos']
+--
+To release images previously acquired through
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[flink:vkAcquireNextImage2KHR or]
+flink:vkAcquireNextImageKHR, call:
+
+include::{generated}/api/protos/vkReleaseSwapchainImagesEXT.adoc[]
+
+  * pname:device is the device associated with
+    slink:VkReleaseSwapchainImagesInfoEXT::pname:swapchain.
+  * pname:pReleaseInfo is a pointer to a
+    slink:VkReleaseSwapchainImagesInfoEXT structure containing parameters of
+    the release.
+
+Only images that are not in use by the device can: be released.
+
+Releasing images is a read-only operation that will not affect the content
+of the released images.
+Upon reacquiring the image, the image contents and its layout will be the
+same as they were prior to releasing it.
+However, if a mechanism other than Vulkan is used to modify the platform
+window associated with the swapchain, the content of all presentable images
+in the swapchain becomes undefined:.
+
+.Note
+[NOTE]
+====
+This functionality is useful during swapchain recreation, where acquired
+images from the old swapchain can be released instead of presented.
+====
+
+include::{generated}/validity/protos/vkReleaseSwapchainImagesEXT.adoc[]
+--
+
+[open,refpage='VkReleaseSwapchainImagesInfoEXT',desc='Structure describing a list of swapchain image indices to be released',type='structs']
+--
+The sname:VkReleaseSwapchainImagesInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkReleaseSwapchainImagesInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchain is a swapchain to which images are being released.
+  * pname:imageIndexCount is the number of image indices to be released.
+  * pname:pImageIndices is a pointer to an array of indices into the array
+    of pname:swapchain's presentable images, with pname:imageIndexCount
+    entries.
+
+.Valid Usage
+****
+  * [[VUID-VkReleaseSwapchainImagesInfoEXT-pImageIndices-07785]]
+    Each element of pname:pImageIndices must: be the index of a presentable
+    image acquired from the swapchain specified by pname:swapchain
+  * [[VUID-VkReleaseSwapchainImagesInfoEXT-pImageIndices-07786]]
+    All uses of presentable images identified by elements of
+    pname:pImageIndices must: have completed execution
+****
+
+include::{generated}/validity/structs/VkReleaseSwapchainImagesInfoEXT.adoc[]
+--
+endif::VK_EXT_swapchain_maintenance1[]
+
+ifdef::VK_EXT_hdr_metadata[]
+include::{chapters}/VK_EXT_hdr_metadata.adoc[]
+endif::VK_EXT_hdr_metadata[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.adoc
new file mode 100644
index 0000000..300abaf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.adoc
@@ -0,0 +1,96 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_wayland]]
+=== Wayland Platform
+
+[open,refpage='vkCreateWaylandSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for a Wayland window',type='protos']
+--
+:refpage: vkCreateWaylandSurfaceKHR
+
+To create a sname:VkSurfaceKHR object for a Wayland surface, call:
+
+include::{generated}/api/protos/vkCreateWaylandSurfaceKHR.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a slink:VkWaylandSurfaceCreateInfoKHR
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateWaylandSurfaceKHR.adoc[]
+--
+
+[open,refpage='VkWaylandSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Wayland surface object',type='structs']
+--
+The sname:VkWaylandSurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkWaylandSurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:display and pname:surface are pointers to the Wayland
+    code:wl_display and code:wl_surface to associate the surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkWaylandSurfaceCreateInfoKHR-display-01304]]
+    pname:display must: point to a valid Wayland code:wl_display
+  * [[VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305]]
+    pname:surface must: point to a valid Wayland code:wl_surface
+****
+
+include::{generated}/validity/structs/VkWaylandSurfaceCreateInfoKHR.adoc[]
+--
+
+On Wayland, pname:currentExtent is the special value [eq]#(0xFFFFFFFF,
+0xFFFFFFFF)#, indicating that the surface size will be determined by the
+extent of a swapchain targeting the surface.
+Whatever the application sets a swapchain's pname:imageExtent to will be the
+size of the window, after the first image is presented.
+pname:minImageExtent is [eq]#(1,1)#, and pname:maxImageExtent is the maximum
+supported surface size.
+Any calls to flink:vkGetPhysicalDeviceSurfacePresentModesKHR on a surface
+created with fname:vkCreateWaylandSurfaceKHR are required: to return
+ename:VK_PRESENT_MODE_MAILBOX_KHR as one of the valid present modes.
+
+Some Vulkan functions may: send protocol over the specified code:wl_display
+connection when using a swapchain or presentable images created from a
+sname:VkSurfaceKHR referring to a code:wl_surface.
+Applications must: therefore ensure that both the code:wl_display and the
+code:wl_surface remain valid for the lifetime of any sname:VkSwapchainKHR
+objects created from a particular code:wl_display and code:wl_surface.
+Also, calling flink:vkQueuePresentKHR will result in Vulkan sending
+code:wl_surface.commit requests to the underlying code:wl_surface of each
+The code:wl_surface.attach, code:wl_surface.damage, and
+code:wl_surface.commit requests must: be issued by the implementation during
+the call to flink:vkQueuePresentKHR and must: not be issued by the
+implementation outside of flink:vkQueuePresentKHR.
+This ensures that any Wayland requests sent by the client after the call to
+flink:vkQueuePresentKHR returns will be received by the compositor after the
+code:wl_surface.commit.
+Regardless of the mode of swapchain creation, a new code:wl_event_queue
+must: be created for each successful flink:vkCreateWaylandSurfaceKHR call,
+and every Wayland object created by the implementation must: be assigned to
+this event queue.
+If the platform provides Wayland 1.11 or greater, this must: be implemented
+by the use of Wayland proxy object wrappers, to avoid race conditions.
+
+If the application wishes to synchronize any window changes with a
+particular frame, such requests must: be sent to the Wayland display server
+prior to calling flink:vkQueuePresentKHR.
+
+[open,refpage='VkWaylandSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkWaylandSurfaceCreateFlagsKHR.adoc[]
+
+tname:VkWaylandSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.adoc
new file mode 100644
index 0000000..389e9da
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.adoc
@@ -0,0 +1,32 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_walyand]]
+=== Wayland Platform
+
+[open,refpage='vkGetPhysicalDeviceWaylandPresentationSupportKHR',desc='Query physical device for presentation to Wayland',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation to a Wayland compositor, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceWaylandPresentationSupportKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+  * pname:display is a pointer to the code:wl_display associated with a
+    Wayland compositor.
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceWaylandPresentationSupportKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.adoc
new file mode 100644
index 0000000..3293e2f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.adoc
@@ -0,0 +1,84 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_win32]]
+=== Win32 Platform
+
+[open,refpage='vkCreateWin32SurfaceKHR',desc='Create a VkSurfaceKHR object for an Win32 native window',type='protos']
+--
+:refpage: vkCreateWin32SurfaceKHR
+
+To create a sname:VkSurfaceKHR object for a Win32 window, call:
+
+include::{generated}/api/protos/vkCreateWin32SurfaceKHR.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a sname:VkWin32SurfaceCreateInfoKHR
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateWin32SurfaceKHR.adoc[]
+--
+
+[open,refpage='VkWin32SurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Win32 surface object',type='structs']
+--
+The sname:VkWin32SurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkWin32SurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:hinstance is the Win32 code:HINSTANCE for the window to associate
+    the surface with.
+  * pname:hwnd is the Win32 code:HWND for the window to associate the
+    surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307]]
+    pname:hinstance must: be a valid Win32 code:HINSTANCE
+  * [[VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308]]
+    pname:hwnd must: be a valid Win32 code:HWND
+****
+
+include::{generated}/validity/structs/VkWin32SurfaceCreateInfoKHR.adoc[]
+--
+
+With Win32, pname:minImageExtent, pname:maxImageExtent, and
+pname:currentExtent must: always equal the window size.
+
+The pname:currentExtent of a Win32 surface must: have both pname:width and
+pname:height greater than 0, or both of them 0.
+
+[NOTE]
+.Note
+====
+Due to above restrictions,
+ifdef::VK_EXT_swapchain_maintenance1[]
+unless slink:VkSwapchainPresentScalingCreateInfoEXT is used to specify
+handling of disparities between surface and swapchain dimensions,
+endif::VK_EXT_swapchain_maintenance1[]
+it is only possible to create a new swapchain on this platform with
+pname:imageExtent being equal to the current size of the window, as reported
+in slink:VkSurfaceCapabilitiesKHR::pname:currentExtent.
+
+The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
+window is minimized), and so a swapchain cannot: be created until the size
+changes.
+====
+
+[open,refpage='VkWin32SurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkWin32SurfaceCreateFlagsKHR.adoc[]
+
+tname:VkWin32SurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.adoc
new file mode 100644
index 0000000..b67f44d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.adoc
@@ -0,0 +1,30 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_win32]]
+=== Win32 Platform
+
+[open,refpage='vkGetPhysicalDeviceWin32PresentationSupportKHR',desc='Query queue family support for presentation on a Win32 display',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation to the Microsoft Windows desktop, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceWin32PresentationSupportKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceWin32PresentationSupportKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.adoc
new file mode 100644
index 0000000..093a427
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.adoc
@@ -0,0 +1,99 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_xcb]]
+=== XCB Platform
+
+[open,refpage='vkCreateXcbSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for a X11 window, using the XCB client-side library',type='protos']
+--
+:refpage: vkCreateXcbSurfaceKHR
+
+To create a sname:VkSurfaceKHR object for an X11 window, using the XCB
+client-side library, call:
+
+include::{generated}/api/protos/vkCreateXcbSurfaceKHR.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a sname:VkXcbSurfaceCreateInfoKHR
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateXcbSurfaceKHR.adoc[]
+--
+
+[open,refpage='VkXcbSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Xcb surface object',type='structs']
+--
+The sname:VkXcbSurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkXcbSurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:connection is a pointer to an code:xcb_connection_t to the X
+    server.
+  * pname:window is the code:xcb_window_t for the X11 window to associate
+    the surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkXcbSurfaceCreateInfoKHR-connection-01310]]
+    pname:connection must: point to a valid X11 code:xcb_connection_t
+  * [[VUID-VkXcbSurfaceCreateInfoKHR-window-01311]]
+    pname:window must: be a valid X11 code:xcb_window_t
+****
+
+include::{generated}/validity/structs/VkXcbSurfaceCreateInfoKHR.adoc[]
+--
+
+With Xcb, pname:minImageExtent, pname:maxImageExtent, and
+pname:currentExtent must: always equal the window size.
+
+The pname:currentExtent of an Xcb surface must: have both pname:width and
+pname:height greater than 0, or both of them 0.
+
+[NOTE]
+.Note
+====
+Due to above restrictions,
+ifdef::VK_EXT_swapchain_maintenance1[]
+unless slink:VkSwapchainPresentScalingCreateInfoEXT is used to specify
+handling of disparities between surface and swapchain dimensions,
+endif::VK_EXT_swapchain_maintenance1[]
+it is only possible to create a new swapchain on this platform with
+pname:imageExtent being equal to the current size of the window, as reported
+in slink:VkSurfaceCapabilitiesKHR::pname:currentExtent.
+
+The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
+window is minimized), and so a swapchain cannot: be created until the size
+changes.
+====
+
+Some Vulkan functions may: send protocol over the specified xcb connection
+when using a swapchain or presentable images created from a
+slink:VkSurfaceKHR referring to an xcb window.
+Applications must: therefore ensure the xcb connection is available to
+Vulkan for the duration of any functions that manipulate such swapchains or
+their presentable images, and any functions that build or queue command
+buffers that operate on such presentable images.
+Specifically, applications using Vulkan with xcb-based swapchains must:
+
+  * Avoid holding a server grab on an xcb connection while waiting for
+    Vulkan operations to complete using a swapchain derived from a different
+    xcb connection referring to the same X server instance.
+    Failing to do so may: result in deadlock.
+
+[open,refpage='VkXcbSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkXcbSurfaceCreateFlagsKHR.adoc[]
+
+tname:VkXcbSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.adoc
new file mode 100644
index 0000000..e70b6ea
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.adoc
@@ -0,0 +1,33 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_xcb]]
+=== XCB Platform
+
+[open,refpage='vkGetPhysicalDeviceXcbPresentationSupportKHR',desc='Query physical device for presentation to X11 server using XCB',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation to an X11 server, using the XCB client-side library, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceXcbPresentationSupportKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+  * pname:connection is a pointer to an code:xcb_connection_t to the X
+    server.
+  * pname:visual_id is an X11 visual (code:xcb_visualid_t).
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceXcbPresentationSupportKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.adoc
new file mode 100644
index 0000000..876531c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.adoc
@@ -0,0 +1,102 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_xlib]]
+=== Xlib Platform
+
+[open,refpage='vkCreateXlibSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for an X11 window, using the Xlib client-side library',type='protos']
+--
+:refpage: vkCreateXlibSurfaceKHR
+
+To create a sname:VkSurfaceKHR object for an X11 window, using the Xlib
+client-side library, call:
+
+include::{generated}/api/protos/vkCreateXlibSurfaceKHR.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a sname:VkXlibSurfaceCreateInfoKHR
+    structure containing the parameters affecting the creation of the
+    surface object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateXlibSurfaceKHR.adoc[]
+--
+
+[open,refpage='VkXlibSurfaceCreateInfoKHR',desc='Structure specifying parameters of a newly created Xlib surface object',type='structs']
+--
+The sname:VkXlibSurfaceCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkXlibSurfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:dpy is a pointer to an Xlib code:Display connection to the X
+    server.
+  * pname:window is an Xlib code:Window to associate the surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313]]
+    pname:dpy must: point to a valid Xlib code:Display
+  * [[VUID-VkXlibSurfaceCreateInfoKHR-window-01314]]
+    pname:window must: be a valid Xlib code:Window
+****
+
+include::{generated}/validity/structs/VkXlibSurfaceCreateInfoKHR.adoc[]
+--
+
+With Xlib, pname:minImageExtent, pname:maxImageExtent, and
+pname:currentExtent must: always equal the window size.
+
+The pname:currentExtent of an Xlib surface must: have both pname:width and
+pname:height greater than 0, or both of them 0.
+
+[NOTE]
+.Note
+====
+Due to above restrictions,
+ifdef::VK_EXT_swapchain_maintenance1[]
+unless slink:VkSwapchainPresentScalingCreateInfoEXT is used to specify
+handling of disparities between surface and swapchain dimensions,
+endif::VK_EXT_swapchain_maintenance1[]
+it is only possible to create a new swapchain on this platform with
+pname:imageExtent being equal to the current size of the window, as reported
+in slink:VkSurfaceCapabilitiesKHR::pname:currentExtent.
+
+The window size may: become [eq]#(0, 0)# on this platform (e.g. when the
+window is minimized), and so a swapchain cannot: be created until the size
+changes.
+====
+
+Some Vulkan functions may: send protocol over the specified Xlib
+code:Display connection when using a swapchain or presentable images created
+from a slink:VkSurfaceKHR referring to an Xlib window.
+Applications must: therefore ensure the display connection is available to
+Vulkan for the duration of any functions that manipulate such swapchains or
+their presentable images, and any functions that build or queue command
+buffers that operate on such presentable images.
+Specifically, applications using Vulkan with Xlib-based swapchains must:
+
+  * Avoid holding a server grab on a display connection while waiting for
+    Vulkan operations to complete using a swapchain derived from a different
+    display connection referring to the same X server instance.
+    Failing to do so may: result in deadlock.
+
+Some implementations may require threads to implement some presentation
+modes so applications must: call code:XInitThreads() before calling any
+other Xlib functions.
+
+[open,refpage='VkXlibSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkXlibSurfaceCreateFlagsKHR.adoc[]
+
+tname:VkXlibSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.adoc
new file mode 100644
index 0000000..e955936
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.adoc
@@ -0,0 +1,32 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_xlib]]
+=== Xlib Platform
+
+[open,refpage='vkGetPhysicalDeviceXlibPresentationSupportKHR',desc='Query physical device for presentation to X11 server using Xlib',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation to an X11 server, using the Xlib client-side library, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceXlibPresentationSupportKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+  * pname:dpy is a pointer to an Xlib code:Display connection to the server.
+  * pname:visualId is an X11 visual (code:VisualID).
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceXlibPresentationSupportKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc
new file mode 100644
index 0000000..827c2d7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc
@@ -0,0 +1,73 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_ios]]
+=== iOS Platform
+
+[open,refpage='vkCreateIOSSurfaceMVK',desc='Create a VkSurfaceKHR object for an iOS UIView',type='protos']
+--
+:refpage: vkCreateIOSSurfaceMVK
+
+To create a sname:VkSurfaceKHR object for an iOS code:UIView or
+basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateIOSSurfaceMVK.adoc[]
+
+ifdef::VK_EXT_metal_surface[]
+[NOTE]
+.Note
+====
+The `vkCreateIOSSurfaceMVK` function is considered deprecated and has been
+superseded by flink:vkCreateMetalSurfaceEXT from the
+`apiext:VK_EXT_metal_surface` extension.
+====
+endif::VK_EXT_metal_surface[]
+
+  * pname:instance is the instance with which to associate the surface.
+  * pname:pCreateInfo is a pointer to a slink:VkIOSSurfaceCreateInfoMVK
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateIOSSurfaceMVK.adoc[]
+--
+
+[open,refpage='VkIOSSurfaceCreateInfoMVK',desc='Structure specifying parameters of a newly created iOS surface object',type='structs']
+--
+The slink:VkIOSSurfaceCreateInfoMVK structure is defined as:
+
+include::{generated}/api/structs/VkIOSSurfaceCreateInfoMVK.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pView is a reference to either a basetype:CAMetalLayer object or a
+    code:UIView object.
+
+.Valid Usage
+****
+  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-04143]]
+    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
+    basetype:CAMetalLayer
+  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-01316]]
+    If pname:pView is a code:UIView object, it must: be a valid code:UIView,
+    must: be backed by a code:CALayer object of type basetype:CAMetalLayer,
+    and flink:vkCreateIOSSurfaceMVK must: be called on the main thread
+****
+
+include::{generated}/validity/structs/VkIOSSurfaceCreateInfoMVK.adoc[]
+--
+
+[open,refpage='VkIOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkIOSSurfaceCreateFlagsMVK.adoc[]
+
+tname:VkIOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.adoc
new file mode 100644
index 0000000..27cdc36
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.adoc
@@ -0,0 +1,10 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_ios]]
+=== iOS Platform
+
+On iOS, all physical devices and queue families must: be capable of
+presentation with any layer.
+As a result there is no iOS-specific query for these capabilities.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc
new file mode 100644
index 0000000..a6fe1c2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc
@@ -0,0 +1,74 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_macos]]
+=== macOS Platform
+
+[open,refpage='vkCreateMacOSSurfaceMVK',desc='Create a VkSurfaceKHR object for a macOS NSView',type='protos']
+--
+:refpage: vkCreateMacOSSurfaceMVK
+
+To create a sname:VkSurfaceKHR object for a macOS code:NSView or
+basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateMacOSSurfaceMVK.adoc[]
+
+ifdef::VK_EXT_metal_surface[]
+[NOTE]
+.Note
+====
+The `vkCreateMacOSSurfaceMVK` function is considered deprecated and has been
+superseded by flink:vkCreateMetalSurfaceEXT from the
+`apiext:VK_EXT_metal_surface` extension.
+====
+endif::VK_EXT_metal_surface[]
+
+  * pname:instance is the instance with which to associate the surface.
+  * pname:pCreateInfo is a pointer to a slink:VkMacOSSurfaceCreateInfoMVK
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateMacOSSurfaceMVK.adoc[]
+--
+
+[open,refpage='VkMacOSSurfaceCreateInfoMVK',desc='Structure specifying parameters of a newly created macOS surface object',type='structs']
+--
+The slink:VkMacOSSurfaceCreateInfoMVK structure is defined as:
+
+include::{generated}/api/structs/VkMacOSSurfaceCreateInfoMVK.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pView is a reference to either a basetype:CAMetalLayer object or
+    an code:NSView object.
+
+.Valid Usage
+****
+  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-04144]]
+    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
+    basetype:CAMetalLayer
+  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317]]
+    If pname:pView is an code:NSView object, it must: be a valid
+    code:NSView, must: be backed by a code:CALayer object of type
+    basetype:CAMetalLayer, and flink:vkCreateMacOSSurfaceMVK must: be called
+    on the main thread
+****
+
+include::{generated}/validity/structs/VkMacOSSurfaceCreateInfoMVK.adoc[]
+--
+
+[open,refpage='VkMacOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMacOSSurfaceCreateFlagsMVK.adoc[]
+
+tname:VkMacOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.adoc
new file mode 100644
index 0000000..6512058
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.adoc
@@ -0,0 +1,10 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_macos]]
+=== macOS Platform
+
+On macOS, all physical devices and queue families must: be capable of
+presentation with any layer.
+As a result there is no macOS-specific query for these capabilities.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformCreateSurface_vi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformCreateSurface_vi.adoc
new file mode 100644
index 0000000..56d533d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformCreateSurface_vi.adoc
@@ -0,0 +1,75 @@
+// Copyright (c) 2018-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_vi]]
+=== VI Platform
+
+[open,refpage='vkCreateViSurfaceNN',desc='Create a slink:VkSurfaceKHR object for a VI layer',type='protos']
+--
+:refpage: vkCreateViSurfaceNN
+
+To create a sname:VkSurfaceKHR object for an code:nn::code:vi::code:Layer,
+query the layer's native handle using
+code:nn::code:vi::code:GetNativeWindow, and then call:
+
+include::{generated}/api/protos/vkCreateViSurfaceNN.adoc[]
+
+  * pname:instance is the instance with which to associate the surface.
+  * pname:pCreateInfo is a pointer to a sname:VkViSurfaceCreateInfoNN
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+During the lifetime of a surface created using a particular
+code:nn::code:vi::code:NativeWindowHandle, applications must: not attempt to
+create another surface for the same code:nn::code:vi::code:Layer or attempt
+to connect to the same code:nn::code:vi::code:Layer through other platform
+mechanisms.
+
+If the native window is created with a specified size, pname:currentExtent
+will reflect that size.
+In this case, applications should use the same size for the swapchain's
+pname:imageExtent.
+Otherwise, the pname:currentExtent will have the special value
+[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#, indicating that applications are expected to
+choose an appropriate size for the swapchain's pname:imageExtent (e.g., by
+matching the result of a call to
+code:nn::code:vi::code:GetDisplayResolution).
+
+include::{generated}/validity/protos/vkCreateViSurfaceNN.adoc[]
+--
+
+[open,refpage='VkViSurfaceCreateInfoNN',desc='Structure specifying parameters of a newly created VI surface object',type='structs']
+--
+The sname:VkViSurfaceCreateInfoNN structure is defined as:
+
+include::{generated}/api/structs/VkViSurfaceCreateInfoNN.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:window is the code:nn::code:vi::code:NativeWindowHandle for the
+    code:nn::code:vi::code:Layer with which to associate the surface.
+
+.Valid Usage
+****
+  * [[VUID-VkViSurfaceCreateInfoNN-window-01318]]
+    pname:window must: be a valid code:nn::code:vi::code:NativeWindowHandle
+****
+
+include::{generated}/validity/structs/VkViSurfaceCreateInfoNN.adoc[]
+--
+
+[open,refpage='VkViSurfaceCreateFlagsNN',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkViSurfaceCreateFlagsNN.adoc[]
+
+tname:VkViSurfaceCreateFlagsNN is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformQuerySupport_vi.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformQuerySupport_vi.adoc
new file mode 100644
index 0000000..32396da
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NN_vi_surface/platformQuerySupport_vi.adoc
@@ -0,0 +1,11 @@
+// Copyright (c) 2018-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_vi]]
+=== VI Platform
+
+On VI, all physical devices and queue families must: be capable of
+presentation with any layer.
+As a result there is no VI-specific query for these capabilities.
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.adoc
new file mode 100644
index 0000000..6f89b25
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.adoc
@@ -0,0 +1,90 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkAcquireWinrtDisplayNV',desc='Acquire access to a VkDisplayKHR',type='protos']
+--
+To acquire permission to directly access a display in Vulkan on Windows 10,
+call:
+
+include::{generated}/api/protos/vkAcquireWinrtDisplayNV.adoc[]
+
+  * pname:physicalDevice The physical device the display is on.
+  * pname:display The display the caller wishes to control in Vulkan.
+
+All permissions necessary to control the display are granted to the Vulkan
+instance associated with pname:physicalDevice until the display is released
+or the application is terminated.
+Permission to access the display may: be revoked by events that cause
+Windows 10 itself to lose access to pname:display.
+If this has happened, operations which require access to the display must:
+fail with an appropriate error code.
+If permission to access pname:display has already been acquired by another
+entity, the call must: return the error code
+ename:VK_ERROR_INITIALIZATION_FAILED.
+
+[NOTE]
+.Note
+====
+The Vulkan instance acquires control of a
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`winrt::Windows::Devices::Display::Core::DisplayTarget`"]
+by performing an operation equivalent to
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaymanager.tryacquiretarget["`winrt::Windows::Devices::Display::Core::DisplayManager.TryAcquireTarget()`"]
+on the "`DisplayTarget`".
+====
+
+[NOTE]
+.Note
+====
+One example of when Windows 10 loses access to a display is when the display
+is hot-unplugged.
+====
+
+[NOTE]
+.Note
+====
+One example of when a display has already been acquired by another entity is
+when the Windows desktop compositor (DWM) is in control of the display.
+Beginning with Windows 10 version 2004 it is possible to cause DWM to
+release a display by using the "`Advanced display settings`" sub-page of the
+"`Display settings`" control panel.
+flink:vkAcquireWinrtDisplayNV does not itself cause DWM to release a
+display; this action must be performed outside of Vulkan.
+====
+
+include::{generated}/validity/protos/vkAcquireWinrtDisplayNV.adoc[]
+--
+
+[open,refpage='vkGetWinrtDisplayNV',desc='Query the VkDisplayKHR corresponding to a WinRT DisplayTarget',type='protos']
+--
+When acquiring displays on Windows 10, an application may also wish to
+enumerate and identify them using a native handle rather than a
+sname:VkDisplayKHR handle.
+
+To determine the sname:VkDisplayKHR handle corresponding to a
+https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`winrt::Windows::Devices::Display::Core::DisplayTarget`"],
+call:
+
+include::{generated}/api/protos/vkGetWinrtDisplayNV.adoc[]
+
+  * pname:physicalDevice The physical device on which to query the display
+    handle.
+  * pname:deviceRelativeId The value of the
+    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget.adapterrelativeid["`AdapterRelativeId`"]
+    property of a
+    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displaytarget["`DisplayTarget`"]
+    that is enumerated by a
+    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displayadapter["`DisplayAdapter`"]
+    with an
+    https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.core.displayadapter.id["`Id`"]
+    property matching the pname:deviceLUID property of a
+    slink:VkPhysicalDeviceIDProperties for pname:physicalDevice.
+  * pname:pDisplay The corresponding slink:VkDisplayKHR handle will be
+    returned here.
+
+If there is no slink:VkDisplayKHR corresponding to pname:deviceRelativeId on
+pname:physicalDevice, dlink:VK_NULL_HANDLE must: be returned in
+pname:pDisplay.
+
+include::{generated}/validity/protos/vkGetWinrtDisplayNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.adoc
new file mode 100644
index 0000000..7cf5269
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.adoc
@@ -0,0 +1,138 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[vertexpostproc-viewportwscaling]]
+== Controlling Viewport W Scaling
+
+If viewport *W* scaling is enabled, the *W* component of the clip coordinate
+is modified by the provided coefficients from the corresponding viewport as
+follows.
+
+  {empty}:: [eq]#w~c~' = x~coeff~ x~c~ {plus} y~coeff~ y~c~ {plus} w~c~#
+
+[open,refpage='VkPipelineViewportWScalingStateCreateInfoNV',desc='Structure specifying parameters of a newly created pipeline viewport W scaling state',type='structs']
+--
+The sname:VkPipelineViewportWScalingStateCreateInfoNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineViewportWScalingStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:viewportWScalingEnable controls whether viewport *W* scaling is
+    enabled.
+  * pname:viewportCount is the number of viewports used by *W* scaling, and
+    must: match the number of viewports in the pipeline if viewport *W*
+    scaling is enabled.
+  * pname:pViewportWScalings is a pointer to an array of
+    slink:VkViewportWScalingNV structures defining the *W* scaling
+    parameters for the corresponding viewports.
+    If the viewport *W* scaling state is dynamic, this member is ignored.
+
+include::{generated}/validity/structs/VkPipelineViewportWScalingStateCreateInfoNV.adoc[]
+--
+
+The sname:VkPipelineViewportWScalingStateCreateInfoNV state is set by adding
+this structure to the pname:pNext chain of a
+sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
+pipeline state with flink:vkCreateGraphicsPipelines.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetViewportWScalingEnableNV',desc='Specify the viewport W scaling enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:viewportWScalingEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetViewportWScalingEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:viewportWScalingEnable specifies the pname:viewportWScalingEnable
+    state.
+
+This command sets the pname:viewportWScalingEnable state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportWScalingEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetViewportWScalingEnableNV
+:requiredfeature: extendedDynamicState3ViewportWScalingEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportWScalingEnableNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetViewportWScalingNV',desc='Set the viewport W scaling dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the viewport *W* scaling
+parameters, call:
+
+include::{generated}/api/protos/vkCmdSetViewportWScalingNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstViewport is the index of the first viewport whose parameters
+    are updated by the command.
+  * pname:viewportCount is the number of viewports whose parameters are
+    updated by the command.
+  * pname:pViewportWScalings is a pointer to an array of
+    slink:VkViewportWScalingNV structures specifying viewport parameters.
+
+The viewport parameters taken from element [eq]#i# of
+pname:pViewportWScalings replace the current state for the viewport index
+[eq]#pname:firstViewport {plus} i#, for [eq]#i# in [eq]#[0,
+pname:viewportCount)#.
+
+This command sets the viewport *W* scaling for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:pViewportWScalings
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01324]]
+    The sum of pname:firstViewport and pname:viewportCount must: be between
+    `1` and slink:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportWScalingNV.adoc[]
+--
+
+Both slink:VkPipelineViewportWScalingStateCreateInfoNV and
+flink:vkCmdSetViewportWScalingNV use sname:VkViewportWScalingNV to set the
+viewport transformation parameters.
+
+[open,refpage='VkViewportWScalingNV',desc='Structure specifying a viewport',type='structs']
+--
+The sname:VkViewportWScalingNV structure is defined as:
+
+include::{generated}/api/structs/VkViewportWScalingNV.adoc[]
+
+  * pname:xcoeff and pname:ycoeff are the viewport's W scaling factor for x
+    and y respectively.
+
+include::{generated}/validity/structs/VkViewportWScalingNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/dispatch.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/dispatch.adoc
new file mode 100644
index 0000000..cb6a0e6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/dispatch.adoc
@@ -0,0 +1,243 @@
+// Copyright (c) 2020-2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[cudadispatch]]
+== Dispatch Command for CUDA PTX Kernels
+
+Compute kernels can: be provided in SPIR-V or PTX code.
+When using PTX kernels the dispatch mechanism is different than with regular
+compute pipelines.
+
+The way to create a PTX assembly file is beyond the scope of this
+documentation.
+For mode information, please refer to the CUDA toolkit documentation at
+https://docs.nvidia.com/cuda/.
+
+Prior to using this command, you must: initialize a CUDA module, and create
+a function handle that will serve as the entry point of the kernel to
+dispatch.
+See <<cuda-modules, CUDA Modules>>.
+
+The dispatching of a CUDA kernel is recorded into a command buffer, and when
+executed by a queue submit, will produce work which executes according to
+the bound compute pipeline.
+
+[open,refpage='vkCmdCudaLaunchKernelNV',desc='Dispatch compute work items',type='protos']
+--
+:refpage: vkCmdCudaLaunchKernelNV
+
+To record a CUDA kernel launch, call:
+
+include::{generated}/api/protos/vkCmdCudaLaunchKernelNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pLaunchInfo is a pointer to a slink:VkCudaLaunchInfoNV structure
+    in which the grid (similar to workgroup) dimension, function handle and
+    related arguments are defined.
+
+When the command is executed, a global workgroup consisting of
+[eq]#pname:gridDimX {times} pname:gridDimY {times} pname:gridDimZ# local
+workgroups is assembled.
+
+include::{generated}/validity/protos/vkCmdCudaLaunchKernelNV.adoc[]
+--
+
+
+[[cudadispatch_info]]
+=== Passing Dispatch Parameters and Arguments
+
+[open,refpage='VkCudaLaunchInfoNV',desc='Structure specifying the parameters to launch a CUDA kernel',type='structs']
+--
+The sname:VkCudaLaunchInfoNV structure is very close to the parameters of
+the CUDA-Driver function
+link:++https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC_1gb8f3dc3031b40da29d5f9a7139e52e15++[cuLaunchKernel]
+documented in section
+link:++https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC++[6.19
+Execution Control] of CUDA Driver API.
+
+The structure is defined as:
+
+include::{generated}/api/structs/VkCudaLaunchInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:function is the CUDA-Driver handle to the function being launched.
+  * pname:gridDimX is the number of local workgroups to dispatch in the X
+    dimension.
+    It must be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * pname:gridDimY is the number of local workgroups to dispatch in the Y
+    dimension.
+    It must be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * pname:gridDimZ is the number of local workgroups to dispatch in the Z
+    dimension.
+    It must be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+  * pname:blockDimX is block size in the X dimension.
+  * pname:blockDimY is block size in the Y dimension.
+  * pname:blockDimZ is block size in the Z dimension.
+  * pname:sharedMemBytes is the dynamic shared-memory size per thread block
+    in bytes.
+  * pname:paramCount is the length of the pname:pParams table.
+  * pname:pParams is a pointer to an array of pname:paramCount pointers,
+    corresponding to the arguments of pname:function.
+  * pname:extraCount is reserved for future use.
+  * pname:pExtras is reserved for future use.
+
+.Valid Usage
+****
+  * [[VUID-VkCudaLaunchInfoNV-gridDimX-09406]]
+    pname:gridDimX must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * [[VUID-VkCudaLaunchInfoNV-gridDimY-09407]]
+    pname:gridDimY must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * [[VUID-VkCudaLaunchInfoNV-gridDimZ-09408]]
+    pname:gridDimZ must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+  * [[VUID-VkCudaLaunchInfoNV-paramCount-09409]]
+    pname:paramCount must: be the total amount of parameters listed in the
+    pname:pParams table.
+  * [[VUID-VkCudaLaunchInfoNV-pParams-09410]]
+    pname:pParams must: be a pointer to a table of pname:paramCount
+    parameters, corresponding to the arguments of pname:function.
+  * [[VUID-VkCudaLaunchInfoNV-extraCount-09411]]
+    pname:extraCount must be 0
+  * [[VUID-VkCudaLaunchInfoNV-pExtras-09412]]
+    pname:pExtras must be NULL
+****
+
+include::{generated}/validity/structs/VkCudaLaunchInfoNV.adoc[]
+--
+
+Kernel parameters of pname:function are specified via pname:pParams, very
+much the same way as described in
+link:++https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC_1gb8f3dc3031b40da29d5f9a7139e52e15++[cuLaunchKernel]
+
+If pname:function has N parameters, then pname:pParams must: be an array of
+N pointers and pname:paramCount must: be set to N. Each of
+pname:kernelParams[0] through pname:kernelParams[N-1] must: point to a
+region of memory from which the actual kernel parameter will be copied.
+The number of kernel parameters and their offsets and sizes are not
+specified here as that information is stored in the slink:VkCudaFunctionNV
+object.
+
+The application-owned memory pointed to by pname:pParams and
+pname:kernelParams[0] through pname:kernelParams[N-1] are consumed
+immediately, and may: be altered or freed after
+flink:vkCmdCudaLaunchKernelNV has returned.
+[[cudadispatch_sharing_resources]]
+=== Resources sharing from Vulkan to the CUDA Kernel
+
+Given that one key limitation of this extension is that Vulkan cannot:
+access, nor bind any global resource of CUDA modules, the only way to
+exchange data with the kernel must: be to __pass resources via the arguments
+of the function__.
+
+ifdef::VK_KHR_buffer_device_address[]
+You can use apiext:VK_KHR_buffer_device_address to write/read to/from a
+slink:VkBuffer object.
+<<VK_KHR_buffer_device_address>> allows you to get the device address of the
+buffer to pass it as an argument into pname:pParams.
+Application-side pointer arithmetic on the device address is legal, but will
+not be bounds-checked on the device.
+
+The corresponding argument of the CUDA function should: be declared as a
+pointer of the same type as the referenced buffer.
+And the CUDA code may: simply read or write to this buffer in the typical C
+way.
+
+endif::VK_KHR_buffer_device_address[]
+
+ifdef::VK_NVX_image_view_handle[]
+You may: also use apiext:VK_NVX_image_view_handle as another convenient way
+to read/write from/to a slink:VkImage.
+
+The corresponding argument of the CUDA function must: be typed as
+`cudaSurfaceObject_t`.
+
+  * You may: then read from it by using the CUDA surface-read functions such
+    as `surf3Dread`/`surf2Dread`/`surf1Dread`
+  * You may: then write to it by using the CUDA surface-write functions such
+    as `surf3Dwrite`/`surf2Dwrite`/`surf1Dwrite`
+
+Please refer to CUDA
+link:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html%23surface-object-api-appendix[surface
+object] documentation for more details
+
+On Vulkan side, here is an example on how to setup
+slink:VkImageViewHandleInfoNVX to query the handle for
+`cudaSurfaceObject_t`:
+
+[source,c++]
+----
+VkImageViewHandleInfoNVX imageViewHandleInfo = {VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX};
+imageViewHandleInfo.sampler = VK_NULL_HANDLE;
+imageViewHandleInfo.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
+imageViewHandleInfo.imageView = imageViewIn; // the VkImageView we want to access
+uint32_t myViewHandleIn = vkGetImageViewHandleNVX(m_device, &imageViewHandleInfo);
+imageViewHandleInfo.imageView = imageViewOut; // the VkImageView we want to access
+uint32_t myViewHandleOut = vkGetImageViewHandleNVX(m_device, &imageViewHandleInfo);
+----
+
+Here is an example of how to declare parameters for pname:pParams
+
+[source,c++]
+----
+VkCudaLaunchInfoNV launchInfo = { VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV };
+
+int block_size = 8;
+float dt = 1.0f / 60.0f;
+
+const void* params[] =
+{
+  &dt,
+  &uint32_t myViewHandleIn,
+  &uint32_t myViewHandleOut
+};
+
+launchInfo.function = cudaFunction; // CUDA function previously created
+launchInfo.gridDimX = (volumeTexDimensionNonBoundary / block_size);
+launchInfo.gridDimY = (volumeTexDimensionNonBoundary / block_size);
+launchInfo.gridDimZ = (volumeTexDimensionNonBoundary / block_size);
+launchInfo.blockDimX = block_size;
+launchInfo.blockDimY = block_size;
+launchInfo.blockDimZ = block_size;
+launchInfo.sharedMemBytes = 0;
+launchInfo.paramCount = 3;
+launchInfo.pParams = &params[0];
+launchInfo.extraCount = 0;
+launchInfo.pExtras = nullptr;
+
+vkCmdCudaLaunchKernelNV(commandBuffer, &launchInfo);
+----
+
+In the CUDA kernel source code, here is an example on how arguments match
+pname:pParams and how we can use Surface object:
+
+[source,c++]
+----
+extern "C"  __global__ void cudaFunction(
+  float dt,
+  cudaSurfaceObject_t volumeTexIn,
+  cudaSurfaceObject_t volumeTexOut
+  )
+{
+  int i = 1 + blockIdx.x * blockDim.x + threadIdx.x;
+  int j = 1 + blockIdx.y * blockDim.y + threadIdx.y;
+  int k = 1 + blockIdx.z * blockDim.z + threadIdx.z;
+
+  float val;
+  surf3Dread(&val, volumeTexIn, i * sizeof(float), j, k);
+  ...
+  float result = ...;
+  // write result
+  surf3Dwrite(result, volumeTexOut, i * sizeof(float), j, k);
+}
+----
+
+endif::VK_NVX_image_view_handle[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/module.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/module.adoc
new file mode 100644
index 0000000..e8ea51c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_cuda_kernel_launch/module.adoc
@@ -0,0 +1,240 @@
+// Copyright (c) 2020-2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[cuda-modules]]
+== CUDA Modules
+
+
+[[cuda-modules-creation]]
+=== Creating a CUDA Module
+
+[open,refpage='VkCudaModuleNV',desc='Opaque handle to a CUDA module object',type='handles']
+--
+CUDA modules must: contain some kernel code and must: expose at least one
+function entry point.
+
+CUDA modules are represented by sname:VkCudaModuleNV handles:
+
+include::{generated}/api/handles/VkCudaModuleNV.adoc[]
+--
+
+[open,refpage='vkCreateCudaModuleNV',desc='Creates a new CUDA module object',type='protos']
+--
+To create a CUDA module, call:
+
+include::{generated}/api/protos/vkCreateCudaModuleNV.adoc[]
+
+  * pname:device is the logical device that creates the shader module.
+  * pname:pCreateInfo is a pointer to a slink:VkCudaModuleCreateInfoNV
+    structure.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pModule is a pointer to a slink:VkCudaModuleNV handle in which the
+    resulting CUDA module object is returned.
+
+Once a CUDA module has been created, you may: create the function entry
+point that must: refer to one function in the module.
+
+include::{generated}/validity/protos/vkCreateCudaModuleNV.adoc[]
+
+--
+
+[open,refpage='VkCudaModuleCreateInfoNV',desc='Structure specifying the parameters to create a CUDA Module',type='structs']
+--
+The sname:VkCudaModuleCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkCudaModuleCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext may: be `NULL` or may: be a pointer to a structure extending
+    this structure.
+  * pname:dataSize is the length of the pname:pData array.
+  * pname:pData is a pointer to CUDA code
+
+.Valid Usage
+****
+  * [[VUID-VkCudaModuleCreateInfoNV-dataSize-09413]]
+    pname:dataSize must: be the total size in bytes of the PTX files or
+    binary cache passed to pname:pData.
+****
+
+include::{generated}/validity/structs/VkCudaModuleCreateInfoNV.adoc[]
+--
+
+
+[[cuda-function-creation]]
+=== Creating a CUDA Function Handle
+
+[open,refpage='VkCudaFunctionNV',desc='Opaque handle to a CUDA function object',type='handles']
+--
+CUDA functions are represented by sname:VkCudaFunctionNV handles.
+Handles to `__global__` functions may: then be used to issue a kernel launch
+(i.e. dispatch) from a commandbuffer.
+See <<cudadispatch, Dispatching Command for CUDA PTX kernel>>.
+
+include::{generated}/api/handles/VkCudaFunctionNV.adoc[]
+--
+
+[open,refpage='vkCreateCudaFunctionNV',desc='Creates a new CUDA function object',type='protos']
+--
+To create a CUDA function, call:
+
+include::{generated}/api/protos/vkCreateCudaFunctionNV.adoc[]
+
+  * pname:device is the logical device that creates the shader module.
+  * pname:pCreateInfo is a pointer to a slink:VkCudaFunctionCreateInfoNV
+    structure.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pFunction is a pointer to a slink:VkCudaFunctionNV handle in which
+    the resulting CUDA function object is returned.
+
+include::{generated}/validity/protos/vkCreateCudaFunctionNV.adoc[]
+--
+
+[open,refpage='VkCudaFunctionCreateInfoNV',desc='Structure specifying the parameters to create a CUDA Function',type='structs']
+--
+The sname:VkCudaFunctionCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkCudaFunctionCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext may: be `NULL` or may: be a pointer to a structure extending
+    this structure.
+  * pname:module must: be the CUDA slink:VkCudaModuleNV module in which the
+    function resides.
+  * pname:pName is a null-terminated UTF-8 string containing the name of the
+    shader entry point for this stage.
+
+include::{generated}/validity/structs/VkCudaFunctionCreateInfoNV.adoc[]
+--
+
+
+[[cuda-function-destruction]]
+=== Destroying a CUDA Function
+
+[open,refpage='vkDestroyCudaFunctionNV',desc='Destroy a CUDA function',type='protos']
+--
+To destroy a CUDA function handle, call:
+
+include::{generated}/api/protos/vkDestroyCudaFunctionNV.adoc[]
+
+  * pname:device is the logical device that destroys the Function.
+  * pname:function is the handle of the CUDA function to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroyCudaFunctionNV.adoc[]
+--
+
+
+[[cuda-modules-destruction]]
+=== Destroying a CUDA Module
+
+[open,refpage='vkDestroyCudaModuleNV',desc='Destroy a CUDA module',type='protos']
+--
+To destroy a CUDA shader module, call:
+
+include::{generated}/api/protos/vkDestroyCudaModuleNV.adoc[]
+
+  * pname:device is the logical device that destroys the shader module.
+  * pname:module is the handle of the CUDA module to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroyCudaModuleNV.adoc[]
+--
+
+
+[[cuda-modules-getcache]]
+=== Reading back CUDA Module Cache
+
+After uploading the PTX kernel code, the module compiles the code to
+generate a binary cache with all the necessary information for the device to
+execute it.
+It is possible to read back this cache for later use, such as accelerating
+the initialization of further executions.
+
+[open,refpage='vkGetCudaModuleCacheNV',desc='Get CUDA module cache',type='protos']
+--
+To get the CUDA module cache call:
+
+include::{generated}/api/protos/vkGetCudaModuleCacheNV.adoc[]
+
+  * pname:device is the logical device that destroys the Function.
+  * pname:module is the CUDA module.
+  * pname:pCacheSize is a pointer containing the amount of bytes to be
+    copied in pname:pCacheData
+  * pname:pCacheData is a pointer to a buffer in which to copy the binary
+    cache
+
+.Valid Usage
+****
+  * [[VUID-vkGetCudaModuleCacheNV-pCacheSize-09414]]
+    pname:pCacheSize must: be a pointer containing the amount of bytes to be
+    copied in pname:pCacheData.
+    If pname:pCacheData is NULL, the function will return in this pointer
+    the total amount of bytes required to later perform the copy into
+    pname:pCacheData.
+  * [[VUID-vkGetCudaModuleCacheNV-pCacheData-09415]]
+    pname:pCacheData may: be a pointer to a buffer in which the binary cache
+    will be copied.
+    The amount of bytes copied is defined by the value in pname:pCacheSize.
+    This pointer may: be NULL.
+    In this case, the function will write the total amount of required data
+    in pname:pCacheSize.
+****
+
+include::{generated}/validity/protos/vkGetCudaModuleCacheNV.adoc[]
+--
+
+A typical use of vkGetCudaModuleCacheNV happens in two steps:
+
+  * First call it without with pname:pCacheData set to NULL and with a valid
+    pointer pname:pCacheSize.
+  * Another call with a valid pname:pCacheData pointing to the expected size
+    returned by pname:pCacheSize, and pname:pCacheSize containing the amount
+    in bytes to copy.
+
+The returned cache may: then be used later for further initialization of the
+CUDA module, by sending this cache _instead_ of the PTX code, when using
+flink:vkCreateCudaModuleNV.
+
+Using the binary cache instead of the original PTX code should:
+significantly speed up initialization of the CUDA module, given that the
+whole compilation and validation will not be necessary.
+
+As with slink:VkPipelineCache, the binary cache depends on the specific
+implementation.
+Therefore the application must: assume the cache upload might fail in many
+circumstances and thus may: have to get ready for falling back to the
+original PTX code if necessary.
+Most often, the cache may: succeed if the same device driver and
+architecture is used between the cache generation from PTX and the use of
+this cache.
+But most of the time, in the event of a new driver version or a if using a
+different device architecture, this cache may: become invalid.
+
+
+[[cuda-modules-limitations]]
+=== Limitations
+
+CUDA and Vulkan do not use the device in the same configuration, therefore,
+few limitations must be taken into account:
+
+  * It is not possible to read or write global parameters from Vulkan.
+    The only way to share resources or send values to the PTX kernel is to
+    pass them as arguments of the function.
+    See <<cudadispatch_sharing_resources, Resources sharing between CUDA
+    Kernel and Vulkan>> for more details.
+  * No calls to functions external to the module PTX are supported
+  * Vulkan disables some shader/kernel exceptions, which could break CUDA
+    kernels relying on exceptions
+  * CUDA kernels submitted to Vulkan are limited to the amount of shared
+    memory you can query from physical capabilities.
+    It may be less than what CUDA can offer
+  * CUDA instruction-level preemption (CILP) does not work
+  * CUDA Unified Memory will not work in this extension.
+  * CUDA Dynamic parallelism is not supported
+  * DispatchIndirect not available
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.adoc
new file mode 100644
index 0000000..6d8e664
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.adoc
@@ -0,0 +1,147 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[device-diagnostic-checkpoints]]
+=== Device Diagnostic Checkpoints
+
+Device execution progress can: be tracked for the purposes of debugging a
+device loss by annotating the command stream with application-defined
+diagnostic checkpoints.
+
+[open,refpage='vkCmdSetCheckpointNV',desc='Insert diagnostic checkpoint in command stream',type='protos']
+--
+Device diagnostic checkpoints are inserted into the command stream by
+calling flink:vkCmdSetCheckpointNV.
+
+include::{generated}/api/protos/vkCmdSetCheckpointNV.adoc[]
+
+  * pname:commandBuffer is the command buffer that will receive the marker
+  * pname:pCheckpointMarker is an opaque application-provided value that
+    will be associated with the checkpoint.
+
+include::{generated}/validity/protos/vkCmdSetCheckpointNV.adoc[]
+--
+
+Note that pname:pCheckpointMarker is treated as an opaque value.
+It does not need to be a valid pointer and will not be dereferenced by the
+implementation.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkGetQueueCheckpointData2NV',desc='Retrieve diagnostic checkpoint data',type='protos']
+--
+If the device encounters an error during execution, the implementation will
+return a ename:VK_ERROR_DEVICE_LOST error to the application at some point
+during host execution.
+When this happens, the application can: call
+flink:vkGetQueueCheckpointData2NV to retrieve information on the most recent
+diagnostic checkpoints that were executed by the device.
+
+include::{generated}/api/protos/vkGetQueueCheckpointData2NV.adoc[]
+
+  * pname:queue is the slink:VkQueue object the caller would like to
+    retrieve checkpoint data for
+  * pname:pCheckpointDataCount is a pointer to an integer related to the
+    number of checkpoint markers available or queried, as described below.
+  * pname:pCheckpointData is either `NULL` or a pointer to an array of
+    sname:VkCheckpointData2NV structures.
+
+If pname:pCheckpointData is `NULL`, then the number of checkpoint markers
+available is returned in pname:pCheckpointDataCount.
+Otherwise, pname:pCheckpointDataCount must: point to a variable set by the
+user to the number of elements in the pname:pCheckpointData array, and on
+return the variable is overwritten with the number of structures actually
+written to pname:pCheckpointData.
+
+If pname:pCheckpointDataCount is less than the number of checkpoint markers
+available, at most pname:pCheckpointDataCount structures will be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetQueueCheckpointData2NV-queue-03892]]
+    The device that pname:queue belongs to must: be in the lost state
+****
+
+include::{generated}/validity/protos/vkGetQueueCheckpointData2NV.adoc[]
+--
+
+[open,refpage='VkCheckpointData2NV',desc='Return structure for command buffer checkpoint data',type='structs']
+--
+The slink:VkCheckpointData2NV structure is defined as:
+
+include::{generated}/api/structs/VkCheckpointData2NV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stage indicates a single pipeline stage which the checkpoint
+    marker data refers to.
+  * pname:pCheckpointMarker contains the value of the last checkpoint marker
+    executed in the stage that pname:stage refers to.
+
+include::{generated}/validity/structs/VkCheckpointData2NV.adoc[]
+
+The stages at which a checkpoint marker can: be executed are
+implementation-defined and can: be queried by calling
+flink:vkGetPhysicalDeviceQueueFamilyProperties2.
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkGetQueueCheckpointDataNV',desc='Retrieve diagnostic checkpoint data',type='protos']
+--
+If the device encounters an error during execution, the implementation will
+return a ename:VK_ERROR_DEVICE_LOST error to the application at a certain
+point during host execution.
+When this happens, the application can: call
+flink:vkGetQueueCheckpointDataNV to retrieve information on the most recent
+diagnostic checkpoints that were executed by the device.
+
+include::{generated}/api/protos/vkGetQueueCheckpointDataNV.adoc[]
+
+  * pname:queue is the slink:VkQueue object the caller would like to
+    retrieve checkpoint data for
+  * pname:pCheckpointDataCount is a pointer to an integer related to the
+    number of checkpoint markers available or queried, as described below.
+  * pname:pCheckpointData is either `NULL` or a pointer to an array of
+    sname:VkCheckpointDataNV structures.
+
+If pname:pCheckpointData is `NULL`, then the number of checkpoint markers
+available is returned in pname:pCheckpointDataCount.
+
+Otherwise, pname:pCheckpointDataCount must: point to a variable set by the
+user to the number of elements in the pname:pCheckpointData array, and on
+return the variable is overwritten with the number of structures actually
+written to pname:pCheckpointData.
+
+If pname:pCheckpointDataCount is less than the number of checkpoint markers
+available, at most pname:pCheckpointDataCount structures will be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetQueueCheckpointDataNV-queue-02025]]
+    The device that pname:queue belongs to must: be in the lost state
+****
+
+include::{generated}/validity/protos/vkGetQueueCheckpointDataNV.adoc[]
+--
+
+[open,refpage='VkCheckpointDataNV',desc='Return structure for command buffer checkpoint data',type='structs']
+--
+The slink:VkCheckpointDataNV structure is defined as:
+
+include::{generated}/api/structs/VkCheckpointDataNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stage is a ename:VkPipelineStageFlagBits value specifying which
+    pipeline stage the checkpoint marker data refers to.
+  * pname:pCheckpointMarker contains the value of the last checkpoint marker
+    executed in the stage that pname:stage refers to.
+
+The stages at which a checkpoint marker can: be executed are
+implementation-defined and can: be queried by calling
+flink:vkGetPhysicalDeviceQueueFamilyProperties2.
+
+include::{generated}/validity/structs/VkCheckpointDataNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.adoc
new file mode 100644
index 0000000..ecb917a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.adoc
@@ -0,0 +1,43 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkQueueFamilyCheckpointProperties2NV',desc='Return structure for queue family checkpoint information query',type='structs']
+--
+The slink:VkQueueFamilyCheckpointProperties2NV structure is defined as:
+
+include::{generated}/api/structs/VkQueueFamilyCheckpointProperties2NV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
+    stages the implementation can execute checkpoint markers in.
+
+Additional queue family information can be queried by setting
+slink:VkQueueFamilyProperties2::pname:pNext to point to a
+sname:VkQueueFamilyCheckpointProperties2NV structure.
+
+include::{generated}/validity/structs/VkQueueFamilyCheckpointProperties2NV.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkQueueFamilyCheckpointPropertiesNV',desc='Return structure for queue family checkpoint information query',type='structs']
+--
+The slink:VkQueueFamilyCheckpointPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkQueueFamilyCheckpointPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:checkpointExecutionStageMask is a mask indicating which pipeline
+    stages the implementation can execute checkpoint markers in.
+
+Additional queue family information can be queried by setting
+slink:VkQueueFamilyProperties2::pname:pNext to point to a
+sname:VkQueueFamilyCheckpointPropertiesNV structure.
+
+include::{generated}/validity/structs/VkQueueFamilyCheckpointPropertiesNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.adoc
new file mode 100644
index 0000000..a239d46
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.adoc
@@ -0,0 +1,25 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[source,c]
+----
+void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
+{
+  for (s = 0; s < sequencesCount; s++)
+  {
+    sUsed = s;
+
+    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
+      sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
+    }
+
+    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
+      sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
+    }
+
+    cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
+  }
+}
+----
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generatedcommands.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generatedcommands.adoc
new file mode 100644
index 0000000..cf9698d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generatedcommands.adoc
@@ -0,0 +1,40 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[device-generated-commands]]
+= Device-Generated Commands
+
+This chapter discusses the generation of command buffer content on the
+device, for which these principle steps are to be taken:
+
+  * Define via sname:VkIndirectCommandsLayoutNV the sequence of commands
+    which should be generated.
+  * Optionally make use of <<graphics-shadergroups, device-bindable Shader
+    Groups>> for graphics pipelines.
+  * Retrieve device addresses by flink:vkGetBufferDeviceAddressEXT for
+    setting buffers on the device.
+ifdef::VK_NV_device_generated_commands_compute[]
+  * Retrieve device addresses of compute pipelines by
+    flink:vkGetPipelineIndirectDeviceAddressNV to be able to bind it in
+    device generated rendering.
+endif::VK_NV_device_generated_commands_compute[]
+  * Fill one or more sname:VkBuffer with the appropriate content that gets
+    interpreted by sname:VkIndirectCommandsLayoutNV.
+  * Create a `preprocess` sname:VkBuffer using the allocation information
+    from flink:vkGetGeneratedCommandsMemoryRequirementsNV.
+  * Optionally preprocess the input data using
+    flink:vkCmdPreprocessGeneratedCommandsNV in a separate action.
+  * Generate and execute the actual commands via
+    flink:vkCmdExecuteGeneratedCommandsNV passing all required data.
+
+flink:vkCmdPreprocessGeneratedCommandsNV executes in a separate logical
+pipeline from either graphics or compute.
+When preprocessing commands in a separate step they must: be explicitly
+synchronized against the command execution.
+When not preprocessing, the preprocessing is automatically synchronized
+against the command execution.
+
+include::{chapters}/VK_NV_device_generated_commands/indirectcommands.adoc[]
+
+include::{chapters}/VK_NV_device_generated_commands/generation.adoc[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generation.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generation.adoc
new file mode 100644
index 0000000..36ac42c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/generation.adoc
@@ -0,0 +1,478 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+== Indirect Commands Generation and Execution
+
+[open,refpage='vkGetGeneratedCommandsMemoryRequirementsNV',desc='Retrieve the buffer allocation requirements for generated commands',type='protos']
+--
+The generation of commands on the device requires a `preprocess` buffer.
+To retrieve the memory size and alignment requirements of a particular
+execution state call:
+
+include::{generated}/api/protos/vkGetGeneratedCommandsMemoryRequirementsNV.adoc[]
+
+  * pname:device is the logical device that owns the buffer.
+  * pname:pInfo is a pointer to a
+    sname:VkGeneratedCommandsMemoryRequirementsInfoNV structure containing
+    parameters required for the memory requirements query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the memory requirements of the buffer object are
+    returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+ifdef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-09074]]
+    If pname:pInfo::pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, then the
+    <<features-deviceGeneratedCompute,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedCompute>>
+    feature must: be enabled
+endif::VK_NV_device_generated_commands_compute[]
+****
+
+include::{generated}/validity/protos/vkGetGeneratedCommandsMemoryRequirementsNV.adoc[]
+--
+
+[open,refpage='VkGeneratedCommandsMemoryRequirementsInfoNV',desc='Structure specifying parameters for the reservation of preprocess buffer space',type='structs']
+--
+include::{generated}/api/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint of the
+    pname:pipeline that this buffer memory is intended to be used with
+    during the execution.
+  * pname:pipeline is the slink:VkPipeline that this buffer memory is
+    intended to be used with during the execution.
+  * pname:indirectCommandsLayout is the slink:VkIndirectCommandsLayoutNV
+    that this buffer memory is intended to be used with.
+  * pname:maxSequencesCount is the maximum number of sequences that this
+    buffer memory in combination with the other state provided can: be used
+    with.
+
+.Valid Usage
+****
+  * [[VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907]]
+    pname:maxSequencesCount must: be less or equal to
+    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectSequenceCount
+  * [[VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09075]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS, then pname:pipeline must: be a
+    valid slink:VkPipeline handle
+ifdef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09076]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, and the
+    pname:indirectCommandsLayout was not created with a
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV token, then the
+    pname:pipeline must: be a valid slink:VkPipeline handle
+  * [[VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09077]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, and the
+    pname:indirectCommandsLayout contains a
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV token, then the
+    pname:pipeline must: be `NULL`
+endif::VK_NV_device_generated_commands_compute[]
+****
+
+include::{generated}/validity/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.adoc[]
+--
+
+ifdef::VK_NV_device_generated_commands_compute[]
+
+To bind a compute pipeline in <<device-generated-commands,Device-Generated
+Commands>>, an application must: query the pipeline's device address.
+
+[open,refpage='vkGetPipelineIndirectDeviceAddressNV',desc='Get pipeline\'s 64-bit device address',type='protos']
+--
+:refpage: vkGetPipelineIndirectDeviceAddressNV
+
+To query a compute pipeline's 64-bit device address, call:
+
+include::{generated}/api/protos/vkGetPipelineIndirectDeviceAddressNV.adoc[]
+  * pname:device is the logical device on which the pipeline was created.
+  * pname:pInfo is a pointer to a
+    slink:VkPipelineIndirectDeviceAddressInfoNV structure specifying the
+    pipeline to retrieve the address for.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelineIndirectDeviceAddressNV-deviceGeneratedComputePipelines-09078]]
+    The <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetPipelineIndirectDeviceAddressNV.adoc[]
+--
+
+[open,refpage='VkPipelineIndirectDeviceAddressInfoNV',desc='Structure specifying the pipeline to query an address for',type='structs']
+--
+:refpage: VkPipelineIndirectDeviceAddressInfoNV
+
+The sname:VkPipelineIndirectDeviceAddressInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkPipelineIndirectDeviceAddressInfoNV.adoc[]
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    the type of pipeline whose device address is being queried.
+  * pname:pipeline specifies the pipeline whose device address is being
+    queried.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineIndirectDeviceAddressInfoNV-pipelineBindPoint-09079]]
+    The provided pname:pipelineBindPoint must: be of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE
+  * [[VUID-VkPipelineIndirectDeviceAddressInfoNV-pipeline-09080]]
+    pname:pipeline must: have been created with flag
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV set
+  * [[VUID-VkPipelineIndirectDeviceAddressInfoNV-pipeline-09081]]
+    pname:pipeline must: have been created with a
+    slink:VkComputePipelineIndirectBufferInfoNV structure specifying a valid
+    address where its metadata will be saved
+****
+include::{generated}/validity/structs/VkPipelineIndirectDeviceAddressInfoNV.adoc[]
+--
+
+[open,refpage='vkGetPipelineIndirectMemoryRequirementsNV',desc='Get the memory requirements for the compute indirect pipeline',type='protos']
+--
+:refpage: vkGetPipelineIndirectMemoryRequirementsNV
+
+To determine the memory requirements for a compute pipeline's metadata,
+call:
+
+include::{generated}/api/protos/vkGetPipelineIndirectMemoryRequirementsNV.adoc[]
+
+  * pname:device is the logical device that owns the buffer.
+  * pname:pCreateInfo is a slink:VkComputePipelineCreateInfo structure
+    specifying the creation parameters of the compute pipeline whose memory
+    requirements are being queried.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the requested pipeline's memory requirements are
+    returned.
+
+If pname:pCreateInfo::pname:pNext chain includes a pointer to a
+slink:VkComputePipelineIndirectBufferInfoNV structure, then the contents of
+that structure are ignored.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelineIndirectMemoryRequirementsNV-deviceGeneratedComputePipelines-09082]]
+    The <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+  * [[VUID-vkGetPipelineIndirectMemoryRequirementsNV-pCreateInfo-09083]]
+    pname:pCreateInfo::pname:flags must: include
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+****
+
+include::{generated}/validity/protos/vkGetPipelineIndirectMemoryRequirementsNV.adoc[]
+--
+endif::VK_NV_device_generated_commands_compute[]
+
+[open,refpage='vkCmdExecuteGeneratedCommandsNV',desc='Generate and execute commands on the device',type='protos']
+--
+:refpage: vkCmdExecuteGeneratedCommandsNV
+
+The actual generation of commands as well as their execution on the device
+is handled as single action with:
+
+include::{generated}/api/protos/vkCmdExecuteGeneratedCommandsNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:isPreprocessed represents whether the input data has already been
+    preprocessed on the device.
+    If it is ename:VK_FALSE this command will implicitly trigger the
+    preprocessing step, otherwise not.
+  * pname:pGeneratedCommandsInfo is a pointer to a
+    slink:VkGeneratedCommandsInfoNV structure containing parameters
+    affecting the generation of commands.
+
+If the ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
+flag was used to create the
+slink:VkGeneratedCommandsInfoNV::pname:indirectCommandsLayout then the order
+of execution of individual draws through this command may: execute in any
+order, and may: not necessarily be in the same order as specified in
+slink:VkGeneratedCommandsInfoNV::pname:pStreams.
+
+ifdef::VK_NV_device_generated_commands_compute[]
+The order of execution of individual dispatches through this command may:
+execute in any order and may: not necessarily be in the same order as
+specified in slink:VkGeneratedCommandsInfoNV::pname:pStreams.
+endif::VK_NV_device_generated_commands_compute[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+  * [[VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908]]
+    If pname:isPreprocessed is ename:VK_TRUE then
+    flink:vkCmdPreprocessGeneratedCommandsNV must: have already been
+    executed on the device, using the same pname:pGeneratedCommandsInfo
+    content as well as the content of the input buffers it references (all
+    except slink:VkGeneratedCommandsInfoNV::pname:preprocessBuffer).
+    Furthermore pname:pGeneratedCommandsInfo`s pname:indirectCommandsLayout
+    must: have been created with the
+    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit
+    set
+  * [[VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909]]
+    slink:VkGeneratedCommandsInfoNV::pname:pipeline must: match the current
+    bound pipeline at
+    slink:VkGeneratedCommandsInfoNV::pname:pipelineBindPoint
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdExecuteGeneratedCommandsNV-None-02910]]
+    Transform feedback must: not be active
+endif::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdExecuteGeneratedCommandsNV.adoc[]
+--
+
+[open,refpage='VkGeneratedCommandsInfoNV',desc='Structure specifying parameters for the generation of commands',type='structs']
+--
+include::{generated}/api/structs/VkGeneratedCommandsInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint used for the
+    pname:pipeline.
+  * pname:pipeline is the slink:VkPipeline used in the generation and
+    execution process.
+  * pname:indirectCommandsLayout is the slink:VkIndirectCommandsLayoutNV
+    that provides the command sequence to generate.
+  * pname:streamCount defines the number of input streams
+  * pname:pStreams is a pointer to an array of pname:streamCount
+    slink:VkIndirectCommandsStreamNV structures providing the input data for
+    the tokens used in pname:indirectCommandsLayout.
+  * pname:sequencesCount is the maximum number of sequences to reserve.
+    If pname:sequencesCountBuffer is dlink:VK_NULL_HANDLE, this is also the
+    actual number of sequences generated.
+  * pname:preprocessBuffer is the slink:VkBuffer that is used for
+    preprocessing the input data for execution.
+    If this structure is used with flink:vkCmdExecuteGeneratedCommandsNV
+    with its pname:isPreprocessed set to ename:VK_TRUE, then the
+    preprocessing step is skipped and data is only read from this buffer.
+    The contents and the layout of this buffer is opaque to applications and
+    must: not be modified or copied to another buffer for reuse.
+  * pname:preprocessOffset is the byte offset into pname:preprocessBuffer
+    where the preprocessed data is stored.
+  * pname:preprocessSize is the maximum byte size within the
+    pname:preprocessBuffer after the pname:preprocessOffset that is
+    available for preprocessing.
+  * pname:sequencesCountBuffer is a sname:VkBuffer in which the actual
+    number of sequences is provided as single code:uint32_t value.
+  * pname:sequencesCountOffset is the byte offset into
+    pname:sequencesCountBuffer where the count value is stored.
+  * pname:sequencesIndexBuffer is a sname:VkBuffer that encodes the used
+    sequence indices as code:uint32_t array.
+  * pname:sequencesIndexOffset is the byte offset into
+    pname:sequencesIndexBuffer where the index values start.
+
+.Valid Usage
+****
+  * [[VUID-VkGeneratedCommandsInfoNV-pipeline-02912]]
+    The provided pname:pipeline must: match the pipeline bound at execution
+    time
+  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913]]
+    If the pname:indirectCommandsLayout uses a token of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the
+    pname:pipeline must: have been created with multiple shader groups
+  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914]]
+    If the pname:indirectCommandsLayout uses a token of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the
+    pname:pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV set in
+    sname:VkGraphicsPipelineCreateInfo::pname:flags
+  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915]]
+    If the pname:indirectCommandsLayout uses a token of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, then the
+    pname:pipeline`s sname:VkPipelineLayout must: match the
+    slink:VkIndirectCommandsLayoutTokenNV::pname:pushconstantPipelineLayout
+  * [[VUID-VkGeneratedCommandsInfoNV-streamCount-02916]]
+    pname:streamCount must: match the pname:indirectCommandsLayout's
+    pname:streamCount
+ifdef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09084]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, then the pname:pipeline must: have
+    been created with the flag
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+  * [[VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09085]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, then the pname:pipeline must: have
+    been created with a slink:VkComputePipelineIndirectBufferInfoNV
+    structure specifying a valid address where its metadata will be saved
+  * [[VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09086]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, then
+    flink:vkCmdUpdatePipelineIndirectBufferNV must: have been called on that
+    pipeline to save its metadata to a device address
+  * [[VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09087]]
+    If pname:pipelineBindPoint is of type
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE, and if
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV is used, then
+    pname:pipeline must: be dlink:VK_NULL_HANDLE
+endif::VK_NV_device_generated_commands_compute[]
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917]]
+    pname:sequencesCount must: be less or equal to
+    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectSequenceCount
+    and
+    slink:VkGeneratedCommandsMemoryRequirementsInfoNV::pname:maxSequencesCount
+    that was used to determine the pname:preprocessSize
+  * [[VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918]]
+    pname:preprocessBuffer must: have the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set in its usage flag
+  * [[VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919]]
+    pname:preprocessOffset must: be aligned to
+    slink:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minIndirectCommandsBufferOffsetAlignment
+  * [[VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971]]
+    If pname:preprocessBuffer is non-sparse then it must: be bound
+    completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-VkGeneratedCommandsInfoNV-preprocessSize-02920]]
+    pname:preprocessSize must: be at least equal to the memory requirement`s
+    size returned by flink:vkGetGeneratedCommandsMemoryRequirementsNV using
+    the matching inputs (pname:indirectCommandsLayout, ...) as within this
+    structure
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921]]
+    pname:sequencesCountBuffer can: be set if the actual used count of
+    sequences is sourced from the provided buffer.
+    In that case the pname:sequencesCount serves as upper bound
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922]]
+    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE, its usage
+    flag must: have the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923]]
+    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE,
+    pname:sequencesCountOffset must: be aligned to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minSequencesCountBufferOffsetAlignment
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972]]
+    If pname:sequencesCountBuffer is not dlink:VK_NULL_HANDLE and is
+    non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924]]
+    If pname:indirectCommandsLayout's
+    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV is set,
+    pname:sequencesIndexBuffer must: be set otherwise it must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925]]
+    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE, its usage
+    flag must: have the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926]]
+    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE,
+    pname:sequencesIndexOffset must: be aligned to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minSequencesIndexBufferOffsetAlignment
+  * [[VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973]]
+    If pname:sequencesIndexBuffer is not dlink:VK_NULL_HANDLE and is
+    non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07078]]
+    If the pname:indirectCommandsLayout uses a token of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV, then the
+    pname:pipeline must: contain a shader stage using the code:MeshNV
+    {ExecutionModel}
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07079]]
+    If the pname:indirectCommandsLayout uses a token of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV, then the
+    pname:pipeline must: contain a shader stage using the code:MeshEXT
+    {ExecutionModel}
+endif::VK_EXT_mesh_shader[]
+****
+
+include::{generated}/validity/structs/VkGeneratedCommandsInfoNV.adoc[]
+--
+
+Referencing the functions defined in <<indirectmdslayout>>,
+fname:vkCmdExecuteGeneratedCommandsNV behaves as:
+
+[source,c]
+----
+uint32_t sequencesCount = sequencesCountBuffer ?
+      min(maxSequencesCount, sequencesCountBuffer.load_uint32(sequencesCountOffset) :
+      maxSequencesCount;
+
+
+cmdProcessAllSequences(commandBuffer, pipeline,
+                       indirectCommandsLayout, pIndirectCommandsStreams,
+                       sequencesCount,
+                       sequencesIndexBuffer, sequencesIndexOffset);
+
+// The stateful commands within indirectCommandsLayout will not
+// affect the state of subsequent commands in the target
+// command buffer (cmd)
+----
+
+[NOTE]
+.Note
+====
+It is important to note that the values of all state related to the
+pname:pipelineBindPoint used are undefined: after this command.
+====
+
+[open,refpage='vkCmdPreprocessGeneratedCommandsNV',desc='Performs preprocessing for generated commands',type='protos']
+--
+Commands can: be preprocessed prior execution using the following command:
+
+include::{generated}/api/protos/vkCmdPreprocessGeneratedCommandsNV.adoc[]
+
+  * pname:commandBuffer is the command buffer which does the preprocessing.
+  * pname:pGeneratedCommandsInfo is a pointer to a
+    slink:VkGeneratedCommandsInfoNV structure containing parameters
+    affecting the preprocessing step.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927]]
+    pname:pGeneratedCommandsInfo`s pname:indirectCommandsLayout must: have
+    been created with the
+    ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit
+    set
+  * [[VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdPreprocessGeneratedCommandsNV.adoc[]
+--
+
+ifdef::VK_NV_device_generated_commands_compute[]
+The bound descriptor sets and push constants that will be used with indirect
+command generation for the compute piplines must: already be specified at
+the time of preprocessing commands with
+flink:vkCmdPreprocessGeneratedCommandsNV.
+They must: not change until the execution of indirect commands is submitted
+with flink:vkCmdExecuteGeneratedCommandsNV.
+
+If push constants for the compute pipeline are also specified in the
+slink:VkGeneratedCommandsInfoNV::pname:indirectCommandsLayout with
+ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV token, then those
+values override the push constants that were previously pushed for the
+compute pipeline.
+
+endif::VK_NV_device_generated_commands_compute[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/indirectcommands.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/indirectcommands.adoc
new file mode 100644
index 0000000..59f5325
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_device_generated_commands/indirectcommands.adoc
@@ -0,0 +1,736 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[indirectmdslayout]]
+== Indirect Commands Layout
+
+[open,refpage='VkIndirectCommandsLayoutNV',desc='Opaque handle to an indirect commands layout object',type='handles']
+--
+The device-side command generation happens through an iterative processing
+of an atomic sequence comprised of command tokens, which are represented by:
+
+include::{generated}/api/handles/VkIndirectCommandsLayoutNV.adoc[]
+--
+
+
+=== Creation and Deletion
+
+[open,refpage='vkCreateIndirectCommandsLayoutNV',desc='Create an indirect command layout object',type='protos']
+--
+Indirect command layouts are created by:
+
+include::{generated}/api/protos/vkCreateIndirectCommandsLayoutNV.adoc[]
+
+  * pname:device is the logical device that creates the indirect command
+    layout.
+  * pname:pCreateInfo is a pointer to a
+    sname:VkIndirectCommandsLayoutCreateInfoNV structure containing
+    parameters affecting creation of the indirect command layout.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pIndirectCommandsLayout is a pointer to a
+    sname:VkIndirectCommandsLayoutNV handle in which the resulting indirect
+    command layout is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateIndirectCommandsLayoutNV.adoc[]
+--
+
+[open,refpage='VkIndirectCommandsLayoutCreateInfoNV',desc='Structure specifying the parameters of a newly created indirect commands layout object',type='structs']
+--
+The sname:VkIndirectCommandsLayoutCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkIndirectCommandsLayoutCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineBindPoint is the elink:VkPipelineBindPoint that this
+    layout targets.
+  * pname:flags is a bitmask of
+    elink:VkIndirectCommandsLayoutUsageFlagBitsNV specifying usage hints of
+    this layout.
+  * pname:tokenCount is the length of the individual command sequence.
+  * pname:pTokens is an array describing each command token in detail.
+    See elink:VkIndirectCommandsTokenTypeNV and
+    slink:VkIndirectCommandsLayoutTokenNV below for details.
+  * pname:streamCount is the number of streams used to provide the token
+    inputs.
+  * pname:pStreamStrides is an array defining the byte stride for each input
+    stream.
+
+The following code illustrates some of the flags:
+
+[source,c]
+----
+void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
+{
+  for (s = 0; s < sequencesCount; s++)
+  {
+    sUsed = s;
+
+    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
+      sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
+    }
+
+    if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
+      sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
+    }
+
+    cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
+  }
+}
+----
+
+When tokens are consumed, an offset is computed based on token offset and
+stream stride.
+The resulting offset is required to be aligned.
+The alignment for a specific token is equal to the scalar alignment of the
+data type as defined in <<interfaces-alignment-requirements,Alignment
+Requirements>>, or
+sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minIndirectCommandsBufferOffsetAlignment,
+whichever is lower.
+
+[NOTE]
+.Note
+====
+A pname:minIndirectCommandsBufferOffsetAlignment of 4 allows
+basetype:VkDeviceAddress to be packed as code:uvec2 with scalar layout
+instead of code:uint64_t with 8 byte alignment.
+This enables direct compatibility with D3D12 command signature layouts.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930]]
+    The pname:pipelineBindPoint must: be
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+ifdef::VK_NV_device_generated_commands_compute[]
+    or ename:VK_PIPELINE_BIND_POINT_COMPUTE
+endif::VK_NV_device_generated_commands_compute[]
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931]]
+    pname:tokenCount must: be greater than `0` and less than or equal to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsTokenCount
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932]]
+    If pname:pTokens contains an entry of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV it must: be the
+    first element of the array and there must: be only a single element of
+    such token type
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933]]
+    If pname:pTokens contains an entry of
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV there must: be only
+    a single element of such token type
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934]]
+    All state tokens in pname:pTokens must: occur before any work provoking
+    tokens (ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV,
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV,
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV,
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV
+ifdef::VK_NV_device_generated_commands_compute[]
+    , ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV
+endif::VK_NV_device_generated_commands_compute[]
+    )
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935]]
+    The content of pname:pTokens must: include one single work provoking
+    token that is compatible with the pname:pipelineBindPoint
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936]]
+    pname:streamCount must: be greater than `0` and less or equal to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsStreamCount
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937]]
+    each element of pname:pStreamStrides must: be greater than `0`and less
+    than or equal to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsStreamStride.
+    Furthermore the alignment of each token input must: be ensured
+ifdef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09088]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE then
+    the <<features-deviceGeneratedCompute,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedCompute>>
+    feature must: be enabled
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09089]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE then
+    the state tokens in pname:pTokens must: only include
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV,
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV, or
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09090]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE and
+    pname:pTokens includes
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV, then the
+    <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+endif::VK_NV_device_generated_commands_compute[]
+****
+
+include::{generated}/validity/structs/VkIndirectCommandsLayoutCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkIndirectCommandsLayoutUsageFlagBitsNV',desc='Bitmask specifying allowed usage of an indirect commands layout',type='enums']
+--
+Bits which can: be set in
+slink:VkIndirectCommandsLayoutCreateInfoNV::pname:flags, specifying usage
+hints of an indirect command layout, are:
+
+include::{generated}/api/enums/VkIndirectCommandsLayoutUsageFlagBitsNV.adoc[]
+
+  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
+    specifies that the layout is always used with the manual preprocessing
+    step through calling flink:vkCmdPreprocessGeneratedCommandsNV and
+    executed by flink:vkCmdExecuteGeneratedCommandsNV with `isPreprocessed`
+    set to ename:VK_TRUE.
+  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
+    specifies that the input data for the sequences is not implicitly
+    indexed from 0..sequencesUsed but a user provided sname:VkBuffer
+    encoding the index is provided.
+  * ename:VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
+    specifies that the processing of sequences can: happen at an
+    implementation-dependent order, which is not: guaranteed to be coherent
+    using the same input data.
+ifdef::VK_NV_device_generated_commands_compute[]
+    This flag is ignored when the pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_COMPUTE as it is implied that the dispatch
+    sequence is always unordered.
+endif::VK_NV_device_generated_commands_compute[]
+--
+
+[open,refpage='VkIndirectCommandsLayoutUsageFlagsNV',desc='Bitmask of VkIndirectCommandsLayoutUsageFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkIndirectCommandsLayoutUsageFlagsNV.adoc[]
+
+tname:VkIndirectCommandsLayoutUsageFlagsNV is a bitmask type for setting a
+mask of zero or more elink:VkIndirectCommandsLayoutUsageFlagBitsNV.
+--
+
+[open,refpage='vkDestroyIndirectCommandsLayoutNV',desc='Destroy an indirect commands layout',type='protos']
+--
+Indirect command layouts are destroyed by:
+
+include::{generated}/api/protos/vkDestroyIndirectCommandsLayoutNV.adoc[]
+
+  * pname:device is the logical device that destroys the layout.
+  * pname:indirectCommandsLayout is the layout to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938]]
+    All submitted commands that refer to pname:indirectCommandsLayout must:
+    have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:indirectCommandsLayout was created, a compatible set of callbacks
+    must: be provided here
+  * [[VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:indirectCommandsLayout was created, pname:pAllocator must: be
+    `NULL`
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkDestroyIndirectCommandsLayoutNV.adoc[]
+--
+
+
+=== Token Input Streams
+
+[open,refpage='VkIndirectCommandsStreamNV',desc='Structure specifying input streams for generated command tokens',type='structs']
+--
+The sname:VkIndirectCommandsStreamNV structure specifies the input data for
+one or more tokens at processing time.
+
+include::{generated}/api/structs/VkIndirectCommandsStreamNV.adoc[]
+
+  * pname:buffer specifies the slink:VkBuffer storing the functional
+    arguments for each sequence.
+    These arguments can: be written by the device.
+  * pname:offset specified an offset into pname:buffer where the arguments
+    start.
+
+.Valid Usage
+****
+  * [[VUID-VkIndirectCommandsStreamNV-buffer-02942]]
+    The pname:buffer's usage flag must: have the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-VkIndirectCommandsStreamNV-offset-02943]]
+    The pname:offset must: be aligned to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:minIndirectCommandsBufferOffsetAlignment
+  * [[VUID-VkIndirectCommandsStreamNV-buffer-02975]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+****
+
+include::{generated}/validity/structs/VkIndirectCommandsStreamNV.adoc[]
+--
+
+The input streams can: contain raw `uint32_t` values, existing indirect
+commands such as:
+
+  * slink:VkDrawIndirectCommand
+  * slink:VkDrawIndexedIndirectCommand
+ifdef::VK_NV_mesh_shader[]
+  * slink:VkDrawMeshTasksIndirectCommandNV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+  * slink:VkDrawMeshTasksIndirectCommandEXT
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_NV_device_generated_commands_compute[]
+  * slink:VkDispatchIndirectCommand
+endif::VK_NV_device_generated_commands_compute[]
+
+or additional commands as listed below.
+How the data is used is described in the next section.
+
+[open,refpage='VkBindShaderGroupIndirectCommandNV',desc='Structure specifying input data for a single shader group command token',type='structs']
+--
+The sname:VkBindShaderGroupIndirectCommandNV structure specifies the input
+data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV token.
+
+include::{generated}/api/structs/VkBindShaderGroupIndirectCommandNV.adoc[]
+
+  * pname:groupIndex specifies which shader group of the current bound
+    graphics pipeline is used.
+
+.Valid Usage
+****
+  * [[VUID-VkBindShaderGroupIndirectCommandNV-None-02944]]
+    The current bound graphics pipeline, as well as the pipelines it may
+    reference, must: have been created with
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+  * [[VUID-VkBindShaderGroupIndirectCommandNV-index-02945]]
+    The pname:index must: be within range of the accessible shader groups of
+    the current bound graphics pipeline.
+    See flink:vkCmdBindPipelineShaderGroupNV for further details
+****
+
+include::{generated}/validity/structs/VkBindShaderGroupIndirectCommandNV.adoc[]
+--
+
+[open,refpage='VkBindIndexBufferIndirectCommandNV',desc='Structure specifying input data for a single index buffer command token',type='structs']
+--
+The sname:VkBindIndexBufferIndirectCommandNV structure specifies the input
+data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV token.
+
+include::{generated}/api/structs/VkBindIndexBufferIndirectCommandNV.adoc[]
+
+  * pname:bufferAddress specifies a physical address of the slink:VkBuffer
+    used as index buffer.
+  * pname:size is the byte size range which is available for this operation
+    from the provided address.
+  * pname:indexType is a elink:VkIndexType value specifying how indices are
+    treated.
+    Instead of the Vulkan enum values, a custom `uint32_t` value can: be
+    mapped to an elink:VkIndexType by specifying the
+    sname:VkIndirectCommandsLayoutTokenNV::pname:pIndexTypes and
+    sname:VkIndirectCommandsLayoutTokenNV::pname:pIndexTypeValues arrays.
+
+.Valid Usage
+****
+  * [[VUID-VkBindIndexBufferIndirectCommandNV-None-02946]]
+    The buffer's usage flag from which the address was acquired must: have
+    the ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT bit set
+  * [[VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947]]
+    The pname:bufferAddress must: be aligned to the pname:indexType used
+  * [[VUID-VkBindIndexBufferIndirectCommandNV-None-02948]]
+    Each element of the buffer from which the address was acquired and that
+    is non-sparse must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+****
+
+include::{generated}/validity/structs/VkBindIndexBufferIndirectCommandNV.adoc[]
+--
+
+[open,refpage='VkBindVertexBufferIndirectCommandNV',desc='Structure specifying input data for a single vertex buffer command token',type='structs']
+--
+The sname:VkBindVertexBufferIndirectCommandNV structure specifies the input
+data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV token.
+
+include::{generated}/api/structs/VkBindVertexBufferIndirectCommandNV.adoc[]
+
+  * pname:bufferAddress specifies a physical address of the slink:VkBuffer
+    used as vertex input binding.
+  * pname:size is the byte size range which is available for this operation
+    from the provided address.
+  * pname:stride is the byte size stride for this vertex input binding as in
+    sname:VkVertexInputBindingDescription::pname:stride.
+    It is only used if
+    sname:VkIndirectCommandsLayoutTokenNV::pname:vertexDynamicStride was
+    set, otherwise the stride is inherited from the current bound graphics
+    pipeline.
+
+.Valid Usage
+****
+  * [[VUID-VkBindVertexBufferIndirectCommandNV-None-02949]]
+    The buffer's usage flag from which the address was acquired must: have
+    the ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT bit set
+  * [[VUID-VkBindVertexBufferIndirectCommandNV-None-02950]]
+    Each element of the buffer from which the address was acquired and that
+    is non-sparse must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+****
+
+include::{generated}/validity/structs/VkBindVertexBufferIndirectCommandNV.adoc[]
+--
+
+[open,refpage='VkSetStateFlagsIndirectCommandNV',desc='Structure specifying input data for a single state flag command token',type='structs']
+--
+The sname:VkSetStateFlagsIndirectCommandNV structure specifies the input
+data for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV token.
+Which state is changed depends on the elink:VkIndirectStateFlagBitsNV
+specified at sname:VkIndirectCommandsLayoutNV creation time.
+
+include::{generated}/api/structs/VkSetStateFlagsIndirectCommandNV.adoc[]
+
+  * pname:data encodes packed state that this command alters.
+  ** Bit `0`: If set represents ename:VK_FRONT_FACE_CLOCKWISE, otherwise
+     ename:VK_FRONT_FACE_COUNTER_CLOCKWISE
+
+include::{generated}/validity/structs/VkSetStateFlagsIndirectCommandNV.adoc[]
+--
+
+[open,refpage='VkIndirectStateFlagBitsNV',desc='Bitmask specifying state that can be altered on the device',type='enums']
+--
+A subset of the graphics pipeline state can: be altered using indirect state
+flags:
+
+include::{generated}/api/enums/VkIndirectStateFlagBitsNV.adoc[]
+
+  * ename:VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV allows to toggle the
+    elink:VkFrontFace rasterization state for subsequent drawing commands.
+--
+
+[open,refpage='VkIndirectStateFlagsNV',desc='Bitmask of VkIndirectStateFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkIndirectStateFlagsNV.adoc[]
+
+tname:VkIndirectStateFlagsNV is a bitmask type for setting a mask of zero or
+more elink:VkIndirectStateFlagBitsNV.
+--
+
+[open,refpage='VkBindPipelineIndirectCommandNV',desc='Structure specifying input data for the compute pipeline dispatch token',type='structs']
+--
+The sname:VkBindPipelineIndirectCommandNV structure specifies the input data
+for the ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV token.
+
+include::{generated}/api/structs/VkBindPipelineIndirectCommandNV.adoc[]
+
+  * pname:pipelineAddress specifies the pipeline address of the compute
+    pipeline that will be used in device generated rendering.
+
+.Valid Usage
+****
+  * [[VUID-VkBindPipelineIndirectCommandNV-deviceGeneratedComputePipelines-09091]]
+    The <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+  * [[VUID-VkBindPipelineIndirectCommandNV-None-09092]]
+    The referenced pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+  * [[VUID-VkBindPipelineIndirectCommandNV-None-09093]]
+    The referenced pipeline must: have been updated with
+    flink:vkCmdUpdatePipelineIndirectBufferNV
+  * [[VUID-VkBindPipelineIndirectCommandNV-None-09094]]
+    The referenced pipeline's address must: have been queried with
+    flink:vkGetPipelineIndirectDeviceAddressNV
+****
+
+include::{generated}/validity/structs/VkBindPipelineIndirectCommandNV.adoc[]
+--
+
+=== Tokenized Command Processing
+
+The processing is in principle illustrated below:
+
+[source,c]
+----
+void cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s)
+{
+  for (t = 0; t < indirectCommandsLayout.tokenCount; t++)
+  {
+    uint32_t stream  = indirectCommandsLayout.pTokens[t].stream;
+    uint32_t offset  = indirectCommandsLayout.pTokens[t].offset;
+    uint32_t stride  = indirectCommandsLayout.pStreamStrides[stream];
+    stream            = pIndirectCommandsStreams[stream];
+    const void* input = stream.buffer.pointer( stream.offset + stride * s + offset )
+
+    // further details later
+    indirectCommandsLayout.pTokens[t].command (cmd, pipeline, input, s);
+  }
+}
+
+void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, sequencesCount)
+{
+  for (s = 0; s < sequencesCount; s++)
+  {
+    cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s);
+  }
+}
+----
+
+The processing of each sequence is considered stateless, therefore all state
+changes must: occur prior work provoking commands within the sequence.
+A single sequence is strictly targeting the elink:VkPipelineBindPoint it was
+created with.
+
+The primary input data for each token is provided through sname:VkBuffer
+content at preprocessing using flink:vkCmdPreprocessGeneratedCommandsNV or
+execution time using flink:vkCmdExecuteGeneratedCommandsNV, however some
+functional arguments, for example binding sets, are specified at layout
+creation time.
+The input size is different for each token.
+
+[open,refpage='VkIndirectCommandsTokenTypeNV',desc='Enum specifying token commands',type='enums']
+--
+Possible values of those elements of the
+slink:VkIndirectCommandsLayoutCreateInfoNV::pname:pTokens array specifying
+command tokens (other elements of the array specify command parameters) are:
+
+include::{generated}/api/enums/VkIndirectCommandsTokenTypeNV.adoc[]
+
+.Supported indirect command tokens
+[width="80%",cols="67%,33%",options="header",align="center"]
+|====
+|Token type                                                 | Equivalent command
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV      | flink:vkCmdBindPipelineShaderGroupNV
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV       | -
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV      | flink:vkCmdBindIndexBuffer
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV     | flink:vkCmdBindVertexBuffers
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV     | flink:vkCmdPushConstants
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV      | flink:vkCmdDrawIndexedIndirect
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV              | flink:vkCmdDrawIndirect
+ifdef::VK_NV_mesh_shader[]
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV        | flink:vkCmdDrawMeshTasksIndirectNV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV   | flink:vkCmdDrawMeshTasksIndirectEXT
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_NV_device_generated_commands_compute[]
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV          | flink:vkCmdBindPipeline
+|ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV          | flink:vkCmdDispatchIndirect
+endif::VK_NV_device_generated_commands_compute[]
+|====
+--
+
+[open,refpage='VkIndirectCommandsLayoutTokenNV',desc='Struct specifying the details of an indirect command layout token',type='structs']
+--
+The sname:VkIndirectCommandsLayoutTokenNV structure specifies details to the
+function arguments that need to be known at layout creation time:
+
+include::{generated}/api/structs/VkIndirectCommandsLayoutTokenNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:tokenType specifies the token command type.
+  * pname:stream is the index of the input stream containing the token
+    argument data.
+  * pname:offset is a relative starting offset within the input stream
+    memory for the token argument data.
+  * pname:vertexBindingUnit is used for the vertex buffer binding command.
+  * pname:vertexDynamicStride sets if the vertex buffer stride is provided
+    by the binding command rather than the current bound graphics pipeline
+    state.
+  * pname:pushconstantPipelineLayout is the sname:VkPipelineLayout used for
+    the push constant command.
+  * pname:pushconstantShaderStageFlags are the shader stage flags used for
+    the push constant command.
+  * pname:pushconstantOffset is the offset used for the push constant
+    command.
+  * pname:pushconstantSize is the size used for the push constant command.
+  * pname:indirectStateFlags are the active states for the state flag
+    command.
+  * pname:indexTypeCount is the optional size of the pname:pIndexTypes and
+    pname:pIndexTypeValues array pairings.
+    If not zero, it allows to register a custom `uint32_t` value to be
+    treated as specific ename:VkIndexType.
+  * pname:pIndexTypes is the used ename:VkIndexType for the corresponding
+    `uint32_t` value entry in pname:pIndexTypeValues.
+
+.Valid Usage
+****
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-stream-02951]]
+    pname:stream must: be smaller than
+    sname:VkIndirectCommandsLayoutCreateInfoNV::pname:streamCount
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-offset-02952]]
+    pname:offset must: be less than or equal to
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxIndirectCommandsTokenOffset
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-offset-06888]]
+    pname:offset must: be aligned to the scalar alignment of pname:tokenType
+    or pname:minIndirectCommandsBufferOffsetAlignment, whichever is lower
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV,
+    pname:vertexBindingUnit must: stay within device supported limits for
+    the appropriate commands
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+    pname:pushconstantPipelineLayout must: be valid
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+    pname:pushconstantOffset must: be a multiple of `4`
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+    pname:pushconstantSize must: be a multiple of `4`
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+    pname:pushconstantOffset must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,
+    pname:pushconstantSize must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
+    pname:pushconstantOffset
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in
+    the range specified by pname:pushconstantOffset and
+    pname:pushconstantSize and for each shader stage in
+    pname:pushconstantShaderStageFlags, there must: be a push constant range
+    in pname:pushconstantPipelineLayout that includes that byte and that
+    stage
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in
+    the range specified by pname:pushconstantOffset and
+    pname:pushconstantSize and for each push constant range that overlaps
+    that byte, pname:pushconstantShaderStageFlags must: include all stages
+    in that push constant range's
+    slink:VkPushConstantRange::pname:stageFlags
+  * [[VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984]]
+    If pname:tokenType is
+    ename:VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV,
+    pname:indirectStateFlags must: not be `0`
+****
+
+include::{generated}/validity/structs/VkIndirectCommandsLayoutTokenNV.adoc[]
+--
+
+The following code provides detailed information on how an individual
+sequence is processed.
+For valid usage, all restrictions from the regular commands apply.
+
+[source,c]
+----
+void cmdProcessSequence(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsStreams, s)
+{
+  for (uint32_t t = 0; t < indirectCommandsLayout.tokenCount; t++){
+    token = indirectCommandsLayout.pTokens[t];
+
+    uint32_t stride   = indirectCommandsLayout.pStreamStrides[token.stream];
+    stream            = pIndirectCommandsStreams[token.stream];
+    uint32_t offset   = stream.offset + stride * s + token.offset;
+    const void* input = stream.buffer.pointer( offset )
+
+    switch(input.type){
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV:
+      VkBindShaderGroupIndirectCommandNV* bind = input;
+
+      vkCmdBindPipelineShaderGroupNV(cmd, indirectCommandsLayout.pipelineBindPoint,
+        pipeline, bind->groupIndex);
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV:
+      VkSetStateFlagsIndirectCommandNV* state = input;
+
+      if (token.indirectStateFlags & VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV){
+        if (state.data & (1 << 0)){
+          set VK_FRONT_FACE_CLOCKWISE;
+        } else {
+          set VK_FRONT_FACE_COUNTER_CLOCKWISE;
+        }
+      }
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV:
+      uint32_t* data = input;
+
+      vkCmdPushConstants(cmd,
+        token.pushconstantPipelineLayout
+        token.pushconstantStageFlags,
+        token.pushconstantOffset,
+        token.pushconstantSize, data);
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV:
+      VkBindIndexBufferIndirectCommandNV* data = input;
+
+      // the indexType may optionally be remapped
+      // from a custom uint32_t value, via
+      // VkIndirectCommandsLayoutTokenNV::pIndexTypeValues
+
+      vkCmdBindIndexBuffer(cmd,
+        deriveBuffer(data->bufferAddress),
+        deriveOffset(data->bufferAddress),
+        data->indexType);
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV:
+      VkBindVertexBufferIndirectCommandNV* data = input;
+
+      // if token.vertexDynamicStride is VK_TRUE
+      // then the stride for this binding is set
+      // using data->stride as well
+
+      vkCmdBindVertexBuffers(cmd,
+        token.vertexBindingUnit, 1,
+        &deriveBuffer(data->bufferAddress),
+        &deriveOffset(data->bufferAddress));
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV:
+      vkCmdDrawIndexedIndirect(cmd,
+        stream.buffer, offset, 1, 0);
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV:
+      vkCmdDrawIndirect(cmd,
+        stream.buffer,
+        offset, 1, 0);
+    break;
+
+    // only available if VK_NV_mesh_shader is supported
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV:
+      vkCmdDrawMeshTasksIndirectNV(cmd,
+        stream.buffer, offset, 1, 0);
+    break;
+
+    // only available if VK_EXT_mesh_shader is supported
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV:
+      vkCmdDrawMeshTasksIndirectEXT(cmd,
+        stream.buffer, offset, 1, 0);
+    break;
+
+ifdef::VK_NV_device_generated_commands_compute[]
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV:
+      VkBindPipelineIndirectCommandNV *data = input;
+      VkPipeline computePipeline = deriveFromDeviceAddress(data->pipelineAddress);
+      vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, computePipeline);
+    break;
+
+    case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV:
+      vkCmdDispatchIndirect(cmd, stream.buffer, offset);
+    break;
+endif::VK_NV_device_generated_commands_compute[]
+    }
+  }
+}
+----
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory/allocate_memory.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory/allocate_memory.adoc
new file mode 100644
index 0000000..e7f7499
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory/allocate_memory.adoc
@@ -0,0 +1,27 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+When allocating memory that may: be exported to another process or Vulkan
+instance, add a slink:VkExportMemoryAllocateInfoNV structure to the
+pname:pNext chain of the slink:VkMemoryAllocateInfo structure, specifying
+the handle types that may: be exported.
+
+[open,refpage='VkExportMemoryAllocateInfoNV',desc='Specify memory handle types that may be exported',type='structs']
+--
+The slink:VkExportMemoryAllocateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExportMemoryAllocateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBitsNV specifying one or more memory
+    handle types that may: be exported.
+    Multiple handle types may: be requested for the same allocation as long
+    as they are compatible, as reported by
+    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV.
+
+include::{generated}/validity/structs/VkExportMemoryAllocateInfoNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_capabilities/external_image_format.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_capabilities/external_image_format.adoc
new file mode 100644
index 0000000..a0a3fb6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_capabilities/external_image_format.adoc
@@ -0,0 +1,102 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkGetPhysicalDeviceExternalImageFormatPropertiesNV',desc='Determine image capabilities compatible with external memory handle types',type='protos']
+--
+To determine the image capabilities compatible with an external memory
+handle type, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    image capabilities
+  * pname:format is the image format, corresponding to
+    slink:VkImageCreateInfo::pname:format.
+  * pname:type is the image type, corresponding to
+    slink:VkImageCreateInfo::pname:imageType.
+  * pname:tiling is the image tiling, corresponding to
+    slink:VkImageCreateInfo::pname:tiling.
+  * pname:usage is the intended usage of the image, corresponding to
+    slink:VkImageCreateInfo::pname:usage.
+  * pname:flags is a bitmask describing additional parameters of the image,
+    corresponding to slink:VkImageCreateInfo::pname:flags.
+  * pname:externalHandleType is either one of the bits from
+    elink:VkExternalMemoryHandleTypeFlagBitsNV, or 0.
+  * pname:pExternalImageFormatProperties is a pointer to a
+    slink:VkExternalImageFormatPropertiesNV structure in which capabilities
+    are returned.
+
+If pname:externalHandleType is 0,
+pname:pExternalImageFormatProperties->imageFormatProperties will return the
+same values as a call to flink:vkGetPhysicalDeviceImageFormatProperties, and
+the other members of pname:pExternalImageFormatProperties will all be 0.
+Otherwise, they are filled in as described for
+slink:VkExternalImageFormatPropertiesNV.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-07721]]
+    pname:externalHandleType must: not have more than one bit set
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.adoc[]
+--
+
+[open,refpage='VkExternalImageFormatPropertiesNV',desc='Structure specifying external image format properties',type='structs']
+--
+The sname:VkExternalImageFormatPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkExternalImageFormatPropertiesNV.adoc[]
+
+  * pname:imageFormatProperties will be filled in as when calling
+    flink:vkGetPhysicalDeviceImageFormatProperties, but the values returned
+    may: vary depending on the external handle type requested.
+  * pname:externalMemoryFeatures is a bitmask of
+    elink:VkExternalMemoryFeatureFlagBitsNV, indicating properties of the
+    external memory handle type
+    (flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType)
+    being queried, or 0 if the external memory handle type is 0.
+  * pname:exportFromImportedHandleTypes is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
+    every external handle type that may: be used to create memory from which
+    the handles of the type specified in
+    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
+    can: be exported, or 0 if the external memory handle type is 0.
+  * pname:compatibleHandleTypes is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
+    every external handle type that may: be specified simultaneously with
+    the handle type specified by
+    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
+    when calling flink:vkAllocateMemory, or 0 if the external memory handle
+    type is 0.
+    pname:compatibleHandleTypes will always contain
+    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
+
+include::{generated}/validity/structs/VkExternalImageFormatPropertiesNV.adoc[]
+--
+
+[open,refpage='VkExternalMemoryFeatureFlagBitsNV',desc='Bitmask specifying external memory features',type='enums',xrefs='vkGetPhysicalDeviceExternalImageFormatPropertiesNV VkExternalImageFormatPropertiesNV']
+--
+Bits which can: be set in
+slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryFeatures,
+indicating properties of the external memory handle type, are:
+
+include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsNV.adoc[]
+
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV specifies that
+    external memory of the specified type must: be created as a dedicated
+    allocation when used in the manner specified.
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV specifies that the
+    implementation supports exporting handles of the specified type.
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV specifies that the
+    implementation supports importing handles of the specified type.
+--
+
+[open,refpage='VkExternalMemoryFeatureFlagsNV',desc='Bitmask of VkExternalMemoryFeatureFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkExternalMemoryFeatureFlagsNV.adoc[]
+
+tname:VkExternalMemoryFeatureFlagsNV is a bitmask type for setting a mask of
+zero or more elink:VkExternalMemoryFeatureFlagBitsNV.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/get_handle_win32.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/get_handle_win32.adoc
new file mode 100644
index 0000000..7e2e62c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/get_handle_win32.adoc
@@ -0,0 +1,31 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkGetMemoryWin32HandleNV',desc='Retrieve Win32 handle to a device memory object',type='protos']
+--
+To retrieve the handle corresponding to a device memory object created with
+slink:VkExportMemoryAllocateInfoNV::pname:handleTypes set to include
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV or
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV, call:
+
+include::{generated}/api/protos/vkGetMemoryWin32HandleNV.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the slink:VkDeviceMemory object.
+  * pname:handleType is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a single bit
+    specifying the type of handle requested.
+  * pname:handle is a pointer to a Windows code:HANDLE in which the handle
+    is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryWin32HandleNV-handleType-01326]]
+    pname:handleType must: be a flag specified in
+    slink:VkExportMemoryAllocateInfoNV::pname:handleTypes when allocating
+    pname:memory
+****
+
+include::{generated}/validity/protos/vkGetMemoryWin32HandleNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/handle_permissions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/handle_permissions.adoc
new file mode 100644
index 0000000..c766aae
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/handle_permissions.adoc
@@ -0,0 +1,36 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkExportMemoryWin32HandleInfoNV',desc='Specify security attributes and access rights for Win32 memory handles',type='structs']
+--
+When slink:VkExportMemoryAllocateInfoNV::pname:handleTypes includes
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV, add a
+sname:VkExportMemoryWin32HandleInfoNV structure to the pname:pNext chain of
+the slink:VkExportMemoryAllocateInfoNV structure to specify security
+attributes and access rights for the memory object's external handle.
+
+The sname:VkExportMemoryWin32HandleInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExportMemoryWin32HandleInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
+    structure specifying security attributes of the handle.
+  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
+
+If this structure is not present, or if pname:pAttributes is set to `NULL`,
+default security descriptor values will be used, and child processes created
+by the application will not inherit the handle, as described in the MSDN
+documentation for "`Synchronization Object Security and Access Rights`"^1^.
+Further, if the structure is not present, the access rights will be
+
+code:DXGI_SHARED_RESOURCE_READ | code:DXGI_SHARED_RESOURCE_WRITE
+
+1::
+    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
+
+include::{generated}/validity/structs/VkExportMemoryWin32HandleInfoNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/import_memory_win32.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/import_memory_win32.adoc
new file mode 100644
index 0000000..bf52d00
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_external_memory_win32/import_memory_win32.adoc
@@ -0,0 +1,77 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkImportMemoryWin32HandleInfoNV',desc='Import Win32 memory created on the same physical device',type='structs']
+--
+To import memory created on the same physical device but outside of the
+current Vulkan instance, add a slink:VkImportMemoryWin32HandleInfoNV
+structure to the pname:pNext chain of the slink:VkMemoryAllocateInfo
+structure, specifying a handle to and the type of the memory.
+
+The sname:VkImportMemoryWin32HandleInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryWin32HandleInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is `0` or a elink:VkExternalMemoryHandleTypeFlagBitsNV
+    value specifying the type of memory handle in pname:handle.
+  * pname:handle is a Windows code:HANDLE referring to the memory.
+
+If pname:handleType is `0`, this structure is ignored by consumers of the
+slink:VkMemoryAllocateInfo structure it is chained from.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327]]
+    pname:handleType must: not have more than one bit set
+  * [[VUID-VkImportMemoryWin32HandleInfoNV-handle-01328]]
+    pname:handle must: be a valid handle to memory, obtained as specified by
+    pname:handleType
+****
+
+include::{generated}/validity/structs/VkImportMemoryWin32HandleInfoNV.adoc[]
+--
+Bits which can: be set in pname:handleType are:
+
+[open,refpage='VkExternalMemoryHandleTypeFlagBitsNV',desc='Bitmask specifying external memory handle types',type='enums']
+--
+Possible values of slink:VkImportMemoryWin32HandleInfoNV::pname:handleType,
+specifying the type of an external memory handle, are:
+
+include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsNV.adoc[]
+
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV specifies a
+    handle to memory returned by flink:vkGetMemoryWin32HandleNV.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV specifies a
+    handle to memory returned by flink:vkGetMemoryWin32HandleNV, or one
+    duplicated from such a handle using `DuplicateHandle()`.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV specifies a
+    valid NT handle to memory returned by
+    `IDXGIResource1::CreateSharedHandle`, or a handle duplicated from such a
+    handle using `DuplicateHandle()`.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV specifies a
+    handle to memory returned by `IDXGIResource::GetSharedHandle()`.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Jon) If additional (non-Win32) bits are added to the possible memory types,
+this type should move to the `apiext:VK_NV_external_memory_capabilities`
+section, and each bit would then be protected by ifdefs for the extension it
+is defined by.
+====
+endif::editing-notes[]
+--
+
+[open,refpage='VkExternalMemoryHandleTypeFlagsNV',desc='Bitmask of VkExternalMemoryHandleTypeFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsNV.adoc[]
+
+tname:VkExternalMemoryHandleTypeFlagsNV is a bitmask type for setting a mask
+of zero or more elink:VkExternalMemoryHandleTypeFlagBitsNV.
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_low_latency2/low_latency2.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_low_latency2/low_latency2.adoc
new file mode 100644
index 0000000..b408fb8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_low_latency2/low_latency2.adoc
@@ -0,0 +1,381 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[[low-latency2]]
+= Low Latency 2
+
+== Latency Reduction
+[open,refpage='vkSetLatencySleepModeNV',desc='Enable or Disable low latency mode on a swapchain',type='protos']
+--
+To enable or disable low latency mode on a swapchain, call:
+
+include::{generated}/api/protos/vkSetLatencySleepModeNV.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to enable or disable low latency mode
+    on.
+  * pname:pSleepModeInfo is `NULL` or a pointer to a
+    slink:VkLatencySleepModeInfoNV structure specifying the parameters of
+    the latency sleep mode.
+
+If pname:pSleepModeInfo is `NULL`, fname:vkSetLatencySleepModeNV will
+disable low latency mode, low latency boost, and set the minimum present
+interval previously specified by slink:VkLatencySleepModeInfoNV to zero on
+pname:swapchain.
+
+include::{generated}/validity/protos/vkSetLatencySleepModeNV.adoc[]
+--
+
+[open,refpage='VkLatencySleepModeInfoNV',desc='Structure to set low latency mode',type='structs']
+--
+The sname:VkLatencySleepModeInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkLatencySleepModeInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:lowLatencyMode is the toggle to enable or disable low latency
+    mode.
+  * pname:lowLatencyBoost allows an application to hint to the GPU to
+    increase performance to provide additional latency savings at a cost of
+    increased power consumption.
+  * pname:minimumPresentIntervalUs is the microseconds between
+    flink:vkQueuePresentKHR calls for a given swapchain that
+    flink:vkLatencySleepNV will enforce.
+
+If pname:lowLatencyMode is set to ename:VK_FALSE, pname:lowLatencyBoost will
+still hint to the GPU to increase its power state and fname:vkLatencySleepNV
+will still enforce pname:minimumIntervalUs between fname:vkQueuePresentKHR
+calls.
+
+include::{generated}/validity/structs/VkLatencySleepModeInfoNV.adoc[]
+--
+
+[open,refpage='vkLatencySleepNV',desc='Trigger low latency mode Sleep',type='protos']
+--
+To provide the synchronization primitive used to delay host CPU work for
+lower latency rendering, call:
+
+include::{generated}/api/protos/vkLatencySleepNV.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to delay associated CPU work based on
+    slink:VkLatencySubmissionPresentIdNV submissions.
+  * pname:pSleepInfo is a pointer to a slink:VkLatencySleepInfoNV structure
+    specifying the parameters of the latency sleep.
+
+fname:vkLatencySleepNV returns immediately.
+Applications should: use flink:vkWaitSemaphores with
+pname:pSleepInfo::pname:signalSemaphore to delay host CPU work.
+CPU work refers to application work done before presenting which includes
+but is not limited to: input sampling, simulation, command buffer recording,
+command buffer submission, and present submission.
+It is recommended to call this function before input sampling.
+When using this function, it should: be called exactly once between
+presents.
+
+include::{generated}/validity/protos/vkLatencySleepNV.adoc[]
+--
+
+[open,refpage='VkLatencySleepInfoNV',desc='Structure specifying the parameters of vkLatencySleepNV',type='structs']
+--
+The sname:VkLatencySleepInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkLatencySleepInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:signalSemaphore is a semaphore that is signaled to indicate that
+    the application should: resume input sampling work.
+  * pname:value is the value that pname:signalSemaphore is set to for
+    resuming sampling work.
+
+.Valid Usage
+****
+  * [[VUID-VkLatencySleepInfoNV-signalSemaphore-09361]]
+    pname:signalSemaphore must: be a timeline semaphore
+****
+
+include::{generated}/validity/structs/VkLatencySleepInfoNV.adoc[]
+--
+
+[open,refpage='vkSetLatencyMarkerNV',desc='Pass in marker for timing info',type='protos']
+--
+An application can: provide timestamps at various stages of its frame
+generation work by calling:
+
+include::{generated}/api/protos/vkSetLatencyMarkerNV.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to capture timestamps on.
+  * pname:pSetLatencyMarkerInfo is a pointer to a
+    slink:VkSetLatencyMarkerInfoNV structure specifying the parameters of
+    the marker to set.
+
+At the beginning and end of simulation and render threads and beginning and
+end of flink:vkQueuePresentKHR calls, fname:vkSetLatencyMarkerNV can: be
+called to provide timestamps for the application's reference.
+These timestamps are returned with a call to flink:vkGetLatencyTimingsNV
+alongside driver provided timestamps at various points of interest with
+regards to latency within the application.
+
+include::{generated}/validity/protos/vkSetLatencyMarkerNV.adoc[]
+--
+
+[open,refpage='VkSetLatencyMarkerInfoNV',desc='Structure specifying the parameters of vkSetLatencyMarkerNV',type='structs']
+--
+The sname:VkSetLatencyMarkerInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSetLatencyMarkerInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentId is an application provided value that is used to
+    associate the timestamp with a fname:vkQueuePresentKHR command using
+    slink:VkPresentIdKHR::pname:pPresentIds for a given present.
+  * pname:marker is the type of timestamp to be recorded.
+
+include::{generated}/validity/structs/VkSetLatencyMarkerInfoNV.adoc[]
+--
+
+[open,refpage='VkLatencyMarkerNV',desc='Structure used to mark different points in latency',type='enums']
+--
+The elink:VkLatencyMarkerNV enum is defined as:
+
+include::{generated}/api/enums/VkLatencyMarkerNV.adoc[]
+
+The members of the elink:VkLatencyMarkerNV are used as arguments for
+flink:vkSetLatencyMarkerNV in the use cases described below:
+
+  * ename:VK_LATENCY_MARKER_SIMULATION_START_NV should: be called at the
+    start of the simulation execution each frame, but after the call to
+    fname:vkLatencySleepNV.
+  * ename:VK_LATENCY_MARKER_SIMULATION_END_NV should: be called at the end
+    of the simulation execution each frame.
+  * ename:VK_LATENCY_MARKER_RENDERSUBMIT_START_NV should: be called at the
+    beginning of the render submission execution each frame.
+    This should: be wherever Vulkan API calls are made and must: not span
+    into asynchronous rendering.
+  * ename:VK_LATENCY_MARKER_RENDERSUBMIT_END_NV should: be called at the end
+    of the render submission execution each frame.
+  * ename:VK_LATENCY_MARKER_PRESENT_START_NV should: be called just before
+    fname:vkQueuePresentKHR.
+  * ename:VK_LATENCY_MARKER_PRESENT_END_NV should: be called when
+    fname:vkQueuePresentKHR returns.
+  * ename:VK_LATENCY_MARKER_INPUT_SAMPLE_NV should: be called just before
+    the application gathers input data.
+  * ename:VK_LATENCY_MARKER_TRIGGER_FLASH_NV should: be called anywhere
+    between ename:VK_LATENCY_MARKER_SIMULATION_START_NV and
+    ename:VK_LATENCY_MARKER_SIMULATION_END_NV whenever a left mouse click
+    occurs.
+--
+
+[open,refpage='vkGetLatencyTimingsNV',desc='Get latency marker results',type='protos']
+--
+To get an array containing the newest collected latency data, call:
+
+include::{generated}/api/protos/vkGetLatencyTimingsNV.adoc[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to return data from.
+  * pname:pTimingCount is a pointer to an integer related to the number of
+    of previous frames of latency data available or queried, as described
+    below.
+  * pname:pGetLatencyMarkerInfo is a pointer to a
+    slink:VkGetLatencyMarkerInfoNV structure specifying the parameters for
+    returning latency information.
+
+The timings returned by fname:vkGetLatencyTimingsNV contain the timestamps
+requested from flink:vkSetLatencyMarkerNV and additional
+implementation-specific markers defined in
+slink:VkLatencyTimingsFrameReportNV.
+If pname:pTimings is `NULL`, then the maximum number of queryable frame data
+is returned in pname:pTimingCount.
+Otherwise, pname:pTimingCount must: point to a variable set by the user to
+the number of elements in the pname:pTimings array in
+pname:pGetLatencyMarkerInfo, and on return the variable is overwritten with
+the number of values actually written to pname:pTimings.
+
+include::{generated}/validity/protos/vkGetLatencyTimingsNV.adoc[]
+--
+
+[open,refpage='VkGetLatencyMarkerInfoNV',desc='Structure specifying the parameters of vkGetLatencyTimingsNV',type='structs']
+--
+The sname:VkGetLatencyMarkerInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkGetLatencyMarkerInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is either `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pTimings is either `NULL` or a pointer to an array of
+    slink:VkLatencyTimingsFrameReportNV structures.
+
+The elements of pname:pTimings are arranged in the order they were requested
+in, with the oldest data in the first entry.
+
+include::{generated}/validity/structs/VkGetLatencyMarkerInfoNV.adoc[]
+--
+
+[open,refpage='VkLatencyTimingsFrameReportNV',desc='Structure containing latency data',type='structs']
+--
+The slink:VkLatencyTimingsFrameReportNV structure describes latency data
+returned by flink:vkGetLatencyTimingsNV
+
+include::{generated}/api/structs/VkLatencyTimingsFrameReportNV.adoc[]
+
+The members of the slink:VkLatencyTimingsFrameReportNV structure describe
+the following:
+
+  * pname:presentId is the application provided value that is used to
+    associate the timestamp with a fname:vkQueuePresentKHR command using
+    slink:VkPresentIdKHR::pname:pPresentIds for a given present.
+  * pname:simStartTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_SIMULATION_START_NV.
+  * pname:simEndTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_SIMULATION_END_NV
+  * pname:renderStartTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_RENDERSUBMIT_START_NV.
+  * pname:renderEndTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_RENDERSUBMIT_END_NV.
+  * pname:presentStartTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_PRESENT_START_NV.
+  * pname:presentEndTimeUs is the timestamp written when
+    fname:vkSetLatencyMarkerNV is called with the ename:VkLatencyMarkerNV
+    enum ename:VK_LATENCY_MARKER_PRESENT_END_NV.
+  * pname:driverStartTimeUs is the timestamp written when the first
+    fname:vkQueueSubmit for the frame is called.
+  * pname:driverEndTimeUs is the timestamp written when the final
+    fname:vkQueueSubmit hands off from the Vulkan Driver.
+  * pname:osRenderQueueStartTimeUs is the timestamp written when the final
+    fname:vkQueueSubmit hands off from the Vulkan Driver.
+  * pname:osRenderQueueEndTimeUs is the timestamp written when the first
+    submission reaches the GPU.
+  * pname:gpuRenderStartTimeUs is the timestamp written when the first
+    submission reaches the GPU.
+  * pname:gpuRenderEndTimeUs is the timestamp written when the final
+    submission finishes on the GPU for the frame.
+
+include::{generated}/validity/structs/VkLatencyTimingsFrameReportNV.adoc[]
+--
+
+[open,refpage='VkLatencySubmissionPresentIdNV',desc='Structure used to associate a queueSubmit with a presentId',type='structs']
+--
+The slink:VkLatencySubmissionPresentIdNV structure is defined as:
+
+include::{generated}/api/structs/VkLatencySubmissionPresentIdNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentId is used to associate the fname:vkQueueSubmit with the
+    presentId used for a given fname:vkQueuePresentKHR via
+    slink:VkPresentIdKHR::pname:pPresentIds.
+
+For any submission to be tracked with low latency mode pacing, it needs to
+be associated with other submissions in a given present.
+Applications :must include the VkLatencySubmissionPresentIdNV in the pNext
+chain of flink:vkQueueSubmit to associate that submission with the
+pname:presentId present for low latency mode.
+
+include::{generated}/validity/structs/VkLatencySubmissionPresentIdNV.adoc[]
+--
+
+[open,refpage='vkQueueNotifyOutOfBandNV',desc='Notify out of band queue',type='protos']
+--
+An application can mark a queue as Out of Band to indicate that all
+fname:vkQueueSubmit calls on this queue are ignored for latency evaluation
+by calling:
+include::{generated}/api/protos/vkQueueNotifyOutOfBandNV.adoc[]
+
+  * pname:queue is the VkQueue to be marked as out of band.
+  * pname:pQueueTypeInfo is a pointer to a slink:VkOutOfBandQueueTypeInfoNV
+    structure specifying the queue type.
+
+include::{generated}/validity/protos/vkQueueNotifyOutOfBandNV.adoc[]
+--
+
+[open,refpage='VkOutOfBandQueueTypeInfoNV',desc='Structure used to describe the queue that is being marked as Out of Band',type='structs']
+--
+The slink:VkOutOfBandQueueTypeInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkOutOfBandQueueTypeInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queueType describes the usage of the queue to be marked as out of
+    band.
+
+include::{generated}/validity/structs/VkOutOfBandQueueTypeInfoNV.adoc[]
+--
+
+[open,refpage='VkOutOfBandQueueTypeNV',desc='Type of out of band queue',type='enums']
+--
+The elink:VkOutOfBandQueueTypeNV enum is defined as:
+
+include::{generated}/api/enums/VkOutOfBandQueueTypeNV.adoc[]
+
+The members of the elink:VkOutOfBandQueueTypeNV are used to describe the
+queue type in slink:VkOutOfBandQueueTypeInfoNV as described below:
+
+  * ename:VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV indicates that work will be
+    submitted to this queue.
+  * ename:VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV indicates that this queue
+    will be presented from.
+--
+
+[open,refpage='VkSwapchainLatencyCreateInfoNV',desc='Specify that a swapchain will use low latency mode',type='structs']
+--
+To allow low latency mode to be used by a swapchain, add a
+sname:VkSwapchainLatencyCreateInfoNV structure to the pname:pNext chain of
+slink:VkSwapchainCreateInfoKHR.
+
+The sname:VkSwapchainLatencyCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainLatencyCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:lowLatencyModeEnable indicates if the swapchain created will
+    utilize low latency mode.
+
+include::{generated}/validity/structs/VkSwapchainLatencyCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkLatencySurfaceCapabilitiesNV',desc='Structure describing surface optimized presentation modes for use with low latency mode',type='structs']
+--
+The sname:VkLatencySurfaceCapabilitiesNV structure is defined as:
+
+include::{generated}/api/structs/VkLatencySurfaceCapabilitiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentModeCount is the number of presentation modes provided.
+  * pname:pPresentModes is list of presentation modes optimized for use with
+    low latency mode with pname:presentModeCount entries.
+
+If pname:pPresentModes is `NULL`, then the number of present modes that are
+optimized for use with low latency mode returned in pname:presentModeCount.
+Otherwise, pname:presentModeCount must be set by the user to the number of
+elements in the pname:pPresentModes array, and on return the variable is
+overwritten with the number of values actually written to
+pname:pPresentModes.
+If the value of pname:presentModeCount is less than the number of optimized
+present modes, at most pname:presentModeCount values will be written to
+pname:pPresentModes.
+
+include::{generated}/validity/structs/VkLatencySurfaceCapabilitiesNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_memory_decompression.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_memory_decompression.adoc
new file mode 100644
index 0000000..72d5f13
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_memory_decompression.adoc
@@ -0,0 +1,174 @@
+// Copyright (c) 2022 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[memory-decompression]]
+= Memory Decompression
+
+[open,refpage='vkCmdDecompressMemoryNV',desc='Decompress data between memory regions',type='protos']
+--
+To decompress data between one or more memory regions call:
+
+include::{generated}/api/protos/vkCmdDecompressMemoryNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:decompressRegionCount is the number of memory regions to
+    decompress.
+  * pname:pDecompressMemoryRegions is a pointer to an array of
+    pname:decompressRegionCount slink:VkDecompressMemoryRegionNV structures
+    specifying decompression parameters.
+
+Each region specified in pname:pDecompressMemoryRegions is decompressed from
+the source to destination region based on the specified decompression
+method.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdDecompressMemoryNV-None-07684]]
+    The <<features-memoryDecompression, pname:memoryDecompression>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdDecompressMemoryNV.adoc[]
+--
+
+[open,refpage='VkDecompressMemoryRegionNV',desc='Structure specifying decompression parameters',type='structs']
+--
+The sname:VkDecompressMemoryRegionNV structure is defined as:
+
+include::{generated}/api/structs/VkDecompressMemoryRegionNV.adoc[]
+
+  * pname:srcAddress is the address where compressed data is stored.
+  * pname:dstAddress is the destination address where decompressed data will
+    be written.
+  * pname:compressedSize is the size of compressed data in bytes.
+  * pname:decompressedSize is the size of decompressed data in bytes.
+  * pname:decompressionMethod is a bitmask of
+    ename:VkMemoryDecompressionMethodFlagBitsNV with a single bit set
+    specifying the method used to decompress data.
+
+.Valid Usage
+****
+  * [[VUID-VkDecompressMemoryRegionNV-srcAddress-07685]]
+    The pname:srcAddress must: be 4 byte aligned
+  * [[VUID-VkDecompressMemoryRegionNV-srcAddress-07686]]
+    The memory in range pname:srcAddress and pname:srcAddress {plus}
+    pname:compressedSize must: be valid and bound to a sname:VkDeviceMemory
+    object
+  * [[VUID-VkDecompressMemoryRegionNV-dstAddress-07687]]
+    The pname:dstAddress must: be 4 byte aligned
+  * [[VUID-VkDecompressMemoryRegionNV-decompressionMethod-09395]]
+    If pname:decompressionMethod is
+    ename:VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV, then
+    pname:decompressedSize must: be less than or equal to 65536 bytes
+  * [[VUID-VkDecompressMemoryRegionNV-dstAddress-07688]]
+    The memory in range pname:dstAddress and pname:dstAddress {plus}
+    pname:decompressedSize must: be valid and bound to a
+    sname:VkDeviceMemory object
+  * [[VUID-VkDecompressMemoryRegionNV-decompressedSize-07689]]
+    The pname:decompressedSize must: be large enough to hold the
+    decompressed data based on the pname:decompressionMethod
+  * [[VUID-VkDecompressMemoryRegionNV-decompressionMethod-07690]]
+    The pname:decompressionMethod must: have a single bit set
+  * [[VUID-VkDecompressMemoryRegionNV-srcAddress-07691]]
+    The pname:srcAddress to pname:srcAddress {plus} pname:compressedSize
+    region must: not overlap with the pname:dstAddress and pname:dstAddress
+    {plus} pname:decompressedSize region
+****
+
+include::{generated}/validity/structs/VkDecompressMemoryRegionNV.adoc[]
+--
+
+[open,refpage='vkCmdDecompressMemoryIndirectCountNV',desc='Indirect decompress data between memory regions',type='protos']
+--
+To decompress data between one or more memory regions by specifying
+decompression parameters indirectly in a buffer, call:
+
+include::{generated}/api/protos/vkCmdDecompressMemoryIndirectCountNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:indirectCommandsAddress is the device address containing
+    decompression parameters laid out as an array of
+    slink:VkDecompressMemoryRegionNV structures.
+  * pname:indirectCommandsCountAddress is the device address containing the
+    decompression count.
+  * pname:stride is the byte stride between successive sets of decompression
+    parameters located starting from pname:indirectCommandsAddress.
+
+Each region specified in pname:indirectCommandsAddress is decompressed from
+the source to destination region based on the specified decompression
+method.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-None-07692]]
+    The <<features-memoryDecompression, pname:memoryDecompression>> feature
+    must: be enabled
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07693]]
+    If pname:indirectCommandsAddress comes from a non-sparse buffer then it
+    must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07694]]
+    The slink:VkBuffer that pname:indirectCommandsAddress comes from must:
+    have been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit
+    set
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-offset-07695]]
+    pname:offset must: be a multiple of `4`
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07696]]
+    If pname:indirectCommandsCountAddress comes from a non-sparse buffer
+    then it must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07697]]
+    The slink:VkBuffer that pname:indirectCommandsCountAddress comes from
+    must: have been created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07698]]
+    pname:indirectCommandsCountAddress must: be a multiple of `4`
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07699]]
+    The count stored in pname:indirectCommandsCountAddress must: be less
+    than or equal to
+    sname:VkPhysicalDeviceMemoryDecompressionPropertiesNV::pname:maxDecompressionIndirectCount
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-stride-07700]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to sizeof(sname:VkDecompressMemoryRegionNV)
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07701]]
+    If the count stored in pname:indirectCommandsCountAddress is equal to
+    `1`, [eq]#(pname:offset {plus}
+    sizeof(sname:VkDecompressMemoryRegionNV))# must: be less than or equal
+    to the size of the slink:VkBuffer that pname:indirectCommandsAddress
+    comes from
+  * [[VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07702]]
+    If the count stored in pname:indirectCommandsCountAddress is greater
+    than `1`, pname:indirectCommandsAddress {plus}
+    sizeof(sname:VkDecompressMemoryRegionNV) {plus} [eq]#(pname:stride
+    {times} (count stored in pname:countBuffer - 1))# must: be less than or
+    equal to the last valid address in the slink:VkBuffer that
+    pname:indirectCommandsAddress was created from
+****
+
+include::{generated}/validity/protos/vkCmdDecompressMemoryIndirectCountNV.adoc[]
+--
+
+[open,refpage='VkMemoryDecompressionMethodFlagBitsNV',desc='List the supported memory decompression methods',type='enums']
+--
+Bits which can: be set in
+sname:VkDecompressMemoryRegionNV::pname:decompressionMethod specifying the
+decompression method to select, or returned in
+sname:VkPhysicalDeviceMemoryDecompressionPropertiesNV::pname:decompressionMethods
+specifying the available decompression methods are:
+
+include::{generated}/api/enums/VkMemoryDecompressionMethodFlagBitsNV.adoc[]
+
+  * ename:VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV specifies that
+    the GDeflate 1.0 algorithm is used to decompress data.
+--
+
+[open,refpage='VkMemoryDecompressionMethodFlagsNV',desc='Bitmask of VkMemoryDecompressionMethodFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkMemoryDecompressionMethodFlagsNV.adoc[]
+
+tname:VkMemoryDecompressionMethodFlagsNV is a bitmask type for specifying a
+mask of one or more ename:VkMemoryDecompressionMethodFlagBitsNV:
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/drawing.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/drawing.adoc
new file mode 100644
index 0000000..88e5a2a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/drawing.adoc
@@ -0,0 +1,364 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[drawing-mesh-shading]]
+== Programmable Mesh Shading
+
+In this drawing approach, primitives are assembled by the mesh shader stage.
+<<mesh, Mesh shading>> operates similarly to <<dispatch, dispatching
+compute>> as the shaders make use of workgroups.
+
+ifdef::VK_NV_mesh_shader[]
+[open,refpage='vkCmdDrawMeshTasksNV',desc='Draw mesh task work items',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksNV
+
+To record a mesh tasks drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:taskCount is the number of local workgroups to dispatch in the X
+    dimension.
+    Y and Z dimension are implicitly set to one.
+  * pname:firstTask is the X component of the first workgroup ID.
+
+When the command is executed, a global workgroup consisting of
+pname:taskCount local workgroups is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksNV-taskCount-02119]]
+    pname:taskCount must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount
+  * [[VUID-vkCmdDrawMeshTasksNV-MeshNV-07080]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshNV {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksNV.adoc[]
+--
+
+[open,refpage='vkCmdDrawMeshTasksIndirectNV',desc='Issue an indirect mesh tasks draw into a command buffer',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksIndirectNV
+
+To record an indirect mesh tasks drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawMeshTasksIndirectNV behaves similarly to
+flink:vkCmdDrawMeshTasksNV except that the parameters are read by the device
+from a buffer during execution.
+pname:drawCount draws are executed by the command, with parameters taken
+from pname:buffer starting at pname:offset and increasing by pname:stride
+bytes for each successive draw.
+The parameters of each draw are encoded in an array of
+slink:VkDrawMeshTasksIndirectCommandNV structures.
+If pname:drawCount is less than or equal to one, pname:stride is ignored.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02146]]
+    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
+    of `4` and must: be greater than or equal to
+    code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV)
+  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02156]]
+    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
+    code:sizeof(slink:VkDrawMeshTasksIndirectCommandNV))# must: be less than
+    or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157]]
+    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
+    (pname:drawCount - 1) {plus} pname:offset {plus}
+    code:sizeof(slink:VkDrawMeshTasksIndirectCommandNV))# must: be less than
+    or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectNV-MeshNV-07081]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshNV {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectNV.adoc[]
+--
+
+[open,refpage='VkDrawMeshTasksIndirectCommandNV',desc='Structure specifying a mesh tasks draw indirect command',type='structs',xrefs='vkCmdDrawMeshTasksIndirectNV']
+--
+The sname:VkDrawMeshTasksIndirectCommandNV structure is defined as:
+
+include::{generated}/api/structs/VkDrawMeshTasksIndirectCommandNV.adoc[]
+
+  * pname:taskCount is the number of local workgroups to dispatch in the X
+    dimension.
+    Y and Z dimension are implicitly set to one.
+  * pname:firstTask is the X component of the first workgroup ID.
+
+The members of sname:VkDrawMeshTasksIndirectCommandNV have the same meaning
+as the similarly named parameters of flink:vkCmdDrawMeshTasksNV.
+
+.Valid Usage
+****
+  * [[VUID-VkDrawMeshTasksIndirectCommandNV-taskCount-02175]]
+    pname:taskCount must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount
+****
+
+include::{generated}/validity/structs/VkDrawMeshTasksIndirectCommandNV.adoc[]
+--
+
+[open,refpage='vkCmdDrawMeshTasksIndirectCountNV',desc='Perform an indirect mesh tasks draw with the draw count sourced from a buffer',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksIndirectCountNV
+
+To record an indirect mesh tasks drawing command with the draw count sourced
+from a buffer, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectCountNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:countBuffer is the buffer containing the draw count.
+  * pname:countBufferOffset is the byte offset into pname:countBuffer where
+    the draw count begins.
+  * pname:maxDrawCount specifies the maximum number of draws that will be
+    executed.
+    The actual number of executed draw calls is the minimum of the count
+    specified in pname:countBuffer and pname:maxDrawCount.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawMeshTasksIndirectCountNV behaves similarly to
+flink:vkCmdDrawMeshTasksIndirectNV except that the draw count is read by the
+device from a buffer during execution.
+The command will read an unsigned 32-bit integer from pname:countBuffer
+located at pname:countBufferOffset and use this as the draw count.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV)
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183]]
+    If pname:maxDrawCount is greater than or equal to `1`,
+    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
+    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be
+    less than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02191]]
+    If the count stored in pname:countBuffer is equal to `1`,
+    [eq]#(pname:offset {plus}
+    code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be less than
+    or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02192]]
+    If the count stored in pname:countBuffer is greater than `1`,
+    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
+    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandNV))# must: be
+    less than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountNV-MeshNV-07082]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshNV {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectCountNV.adoc[]
+
+--
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+[open,refpage='vkCmdDrawMeshTasksEXT',desc='Draw mesh task work items',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksEXT
+
+To record a mesh tasks drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:groupCountX is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:groupCountY is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
+    dimension.
+
+When the command is executed, a global workgroup consisting of
+[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
+local workgroups is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_limits_common.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksEXT-MeshEXT-07087]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshEXT {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksEXT.adoc[]
+--
+
+[open,refpage='vkCmdDrawMeshTasksIndirectEXT',desc='Issue an indirect mesh tasks draw into a command buffer',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksIndirectEXT
+
+To record an indirect mesh tasks drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawMeshTasksIndirectEXT behaves similarly to
+flink:vkCmdDrawMeshTasksEXT except that the parameters are read by the
+device from a buffer during execution.
+pname:drawCount draws are executed by the command, with parameters taken
+from pname:buffer starting at pname:offset and increasing by pname:stride
+bytes for each successive draw.
+The parameters of each draw are encoded in an array of
+slink:VkDrawMeshTasksIndirectCommandEXT structures.
+If pname:drawCount is less than or equal to one, pname:stride is ignored.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07088]]
+    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
+    of `4` and must: be greater than or equal to
+    code:sizeof(sname:VkDrawMeshTasksIndirectCommandEXT)
+  * [[VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07089]]
+    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
+    code:sizeof(slink:VkDrawMeshTasksIndirectCommandEXT))# must: be less
+    than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07090]]
+    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
+    (pname:drawCount - 1) {plus} pname:offset {plus}
+    code:sizeof(slink:VkDrawMeshTasksIndirectCommandEXT))# must: be less
+    than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectEXT-MeshEXT-07091]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshEXT {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectEXT.adoc[]
+--
+
+[open,refpage='VkDrawMeshTasksIndirectCommandEXT',desc='Structure specifying a mesh tasks draw indirect command',type='structs',xrefs='vkCmdDrawMeshTasksIndirectEXT']
+--
+:refpage: VkDrawMeshTasksIndirectCommandEXT
+
+The sname:VkDrawMeshTasksIndirectCommandEXT structure is defined as:
+
+include::{generated}/api/structs/VkDrawMeshTasksIndirectCommandEXT.adoc[]
+
+  * pname:groupCountX is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:groupCountY is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
+    dimension.
+
+The members of sname:VkDrawMeshTasksIndirectCommandEXT have the same meaning
+as the similarly named parameters of flink:vkCmdDrawMeshTasksEXT.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_mesh_limits_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkDrawMeshTasksIndirectCommandEXT.adoc[]
+--
+
+[open,refpage='vkCmdDrawMeshTasksIndirectCountEXT',desc='Perform an indirect mesh tasks draw with the draw count sourced from a buffer',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksIndirectCountEXT
+
+To record an indirect mesh tasks drawing command with the draw count sourced
+from a buffer, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectCountEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:countBuffer is the buffer containing the draw count.
+  * pname:countBufferOffset is the byte offset into pname:countBuffer where
+    the draw count begins.
+  * pname:maxDrawCount specifies the maximum number of draws that will be
+    executed.
+    The actual number of executed draw calls is the minimum of the count
+    specified in pname:countBuffer and pname:maxDrawCount.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawMeshTasksIndirectCountEXT behaves similarly to
+flink:vkCmdDrawMeshTasksIndirectEXT except that the draw count is read by
+the device from a buffer during execution.
+The command will read an unsigned 32-bit integer from pname:countBuffer
+located at pname:countBufferOffset and use this as the draw count.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_mesh_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.adoc[]
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountEXT-stride-07096]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to code:sizeof(sname:VkDrawMeshTasksIndirectCommandEXT)
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountEXT-maxDrawCount-07097]]
+    If pname:maxDrawCount is greater than or equal to `1`,
+    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
+    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandEXT))# must: be
+    less than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-07098]]
+    If the count stored in pname:countBuffer is equal to `1`,
+    [eq]#(pname:offset {plus}
+    code:sizeof(sname:VkDrawMeshTasksIndirectCommandEXT))# must: be less
+    than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-07099]]
+    If the count stored in pname:countBuffer is greater than `1`,
+    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
+    {plus} code:sizeof(sname:VkDrawMeshTasksIndirectCommandEXT))# must: be
+    less than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawMeshTasksIndirectCountEXT-MeshEXT-07100]]
+    The current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    must: contain a shader stage using the code:MeshEXT {ExecutionModel}
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectCountEXT.adoc[]
+
+--
+endif::VK_EXT_mesh_shader[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/mesh.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/mesh.adoc
new file mode 100644
index 0000000..a0c7c2a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_mesh_shader/mesh.adoc
@@ -0,0 +1,249 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[mesh]]
+= Mesh Shading
+
+<<shaders-task,Task>> and <<shaders-mesh,mesh shaders>> operate in
+workgroups to produce a collection of primitives that will be processed by
+subsequent stages of the graphics pipeline.
+
+Work on the mesh pipeline is initiated by the application
+<<drawing-mesh-shading,drawing>> a set of mesh tasks organized in global
+workgroups.
+If the optional task shader is active, each workgroup triggers the execution
+of task shader invocations that will create a new set of mesh workgroups
+upon completion.
+Each of these created workgroups, or each of the original workgroups if no
+task shader is present, triggers the execution of mesh shader invocations.
+
+Each mesh shader workgroup emits zero or more output primitives along with
+the group of vertices and their associated data required for each output
+primitive.
+
+
+[[mesh-task-input]]
+== Task Shader Input
+For every workgroup issued via the drawing commands a group of task shader
+invocations is executed.
+There are no inputs other than the builtin workgroup identifiers.
+
+
+[[mesh-task-output]]
+== Task Shader Output
+The task shader can emit zero or more mesh workgroups to be generated.
+ifdef::VK_NV_mesh_shader[]
+Shaders using the code:TaskNV {ExecutionModel} can do so using the
+<<interfaces-builtin-variables,built-in variable>> code:TaskCountNV.
+This value must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+Shaders using the code:TaskEXT {ExecutionModel} can do so using the
+code:OpEmitMeshTasksEXT instruction.
+The code:groupCountX, code:groupCountY and code:groupCountZ arguments passed
+to this instruction must: be less than or equal to the respective dimension
+within
+sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount.
+The product of these arguments must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount.
+endif::VK_EXT_mesh_shader[]
+
+The task shader can also pass user-defined data to all mesh shader
+invocations that it creates.
+ifdef::VK_NV_mesh_shader[]
+Shaders using the code:TaskNV {ExecutionModel} can do so by writing to
+output variables that are decorated with code:PerTaskNV.
+They are available as inputs in mesh shaders.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+Shaders using the code:TaskEXT {ExecutionModel} can do so by writing to a
+payload variable with code:TaskPayloadWorkgroupEXT storage class that is
+passed to the code:OpEmitMeshTasksEXT instruction.
+endif::VK_EXT_mesh_shader[]
+
+
+[[mesh-generation]]
+== Mesh Generation
+If a task shader exists, the mesh assembler creates a variable amount of
+mesh workgroups depending on each task's output.
+If there is no task shader, the drawing commands emit the mesh shader
+invocations directly.
+
+
+[[mesh-input]]
+== Mesh Shader Input
+The only inputs available to the mesh shader are variables identifying the
+specific workgroup and invocation and, if applicable,
+ifdef::VK_NV_mesh_shader[]
+any outputs written as code:PerTaskNV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_mesh_shader+VK_EXT_mesh_shader[or]
+ifdef::VK_EXT_mesh_shader[]
+the payload variable passed to the code:OpEmitMeshTasksEXT instruction
+endif::VK_EXT_mesh_shader[]
+by the task shader that spawned the mesh shader's workgroup.
+The mesh shader can operate without a task shader as well.
+
+
+[[mesh-output]]
+== Mesh Shader Output
+
+A mesh shader generates primitives in one of three output modes: points,
+lines, or triangles.
+ifdef::VK_NV_mesh_shader[]
+For shaders using the code:MeshNV {ExecutionModel} the primitive mode is
+specified in the shader using an code:OpExecutionMode instruction with the
+code:OutputPoints, code:OutputLinesNV, or code:OutputTrianglesNV modes,
+respectively.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+For shaders using the code:MeshEXT {ExecutionModel} the primitive mode is
+specified in the shader using an code:OpExecutionMode instruction with the
+code:OutputPoints, code:OutputLinesEXT, or code:OutputTrianglesEXT modes,
+respectively.
+endif::VK_EXT_mesh_shader[]
+Each mesh shader must: include exactly one output primitive mode.
+
+ifdef::VK_NV_mesh_shader[]
+For shaders using the code:MeshNV {ExecutionModel} the maximum output vertex
+count is specified as a literal in the shader using an code:OpExecutionMode
+instruction with the mode set to code:OutputVertices and must: be less than
+or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+For shaders using the code:MeshEXT {ExecutionModel} the maximum output
+vertex count is specified as a literal in the shader using an
+code:OpExecutionMode instruction with the mode set to code:OutputVertices
+and must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_NV_mesh_shader[]
+For shaders using the code:MeshNV {ExecutionModel} the maximum output
+primitive count is specified as a literal in the shader using an
+code:OpExecutionMode instruction with the mode set to
+code:OutputPrimitivesNV and must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+For shaders using the code:MeshEXT {ExecutionModel} the maximum output
+primitive count is specified as a literal in the shader using an
+code:OpExecutionMode instruction with the mode set to
+code:OutputPrimitivesEXT, and must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_NV_mesh_shader[]
+For shaders using the code:MeshNV {ExecutionModel} the number of primitives
+output by the mesh shader is provided via writing to the
+<<interfaces-builtin-variables,built-in variable>> code:PrimitiveCountNV and
+must: be less than or equal to the maximum output primitive count specified
+in the shader.
+A variable decorated with code:PrimitiveIndicesNV is an output array of
+local index values into the vertex output arrays from which primitives are
+assembled according to the output primitive type.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+For shaders using the code:MeshEXT {ExecutionModel} the number of vertices
+and primitives output by the mesh shader is provided via calling the
+code:OpSetMeshOutputsEXT instruction.
+The code:vertexCount argument must: be less than or equal to the maximum
+output vertex count specified in the shader.
+The code:primitiveCount argument must: be less than or equal to the maximum
+output primitive count specified in the shader.
+
+Depending on the output primitive mode an appropriately-decorated variable
+is the output array of local index values into the vertex output arrays from
+which primitives are assembled according to the output primitive type:
+
+  * code:OutputPoints uses the code:PrimitivePointIndicesEXT decoration.
+  * code:OutputLinesEXT uses the code:PrimitiveLineIndicesEXT decoration.
+  * code:OutputTrianglesEXT uses the code:PrimitiveTriangleIndicesEXT
+    decoration.
+endif::VK_EXT_mesh_shader[]
+
+These resulting primitives are then further processed as described in
+<<primsrast>>.
+
+ifdef::VK_EXT_mesh_shader[]
+With the exception of primitive indices, all output built-ins and custom
+attributes count towards the total storage size occupied by output variables
+in mesh shaders.
+This size can be calculated as follows, taking into account the fact that
+the number of effective scalar attributes is 4 times the number of effective
+locations used according to the <<interfaces-iointerfaces-locations,location
+assignment rules>>.
+Let latexmath:[v] be the number of views, latexmath:[n_v] be the number of
+effective scalar per-vertex attributes not dependent on code:ViewIndex,
+latexmath:[n_{vpv}] be the number of effective scalar per-vertex attributes
+dependent on code:ViewIndex, latexmath:[m_v] be the maximum number of
+vertices specified by the code:OutputVertices {ExecutionMode},
+latexmath:[g_v] be pname:meshOutputPerVertexGranularity, latexmath:[n_p] be
+the number of effective scalar per-primitive attributes not dependent on
+code:ViewIndex, latexmath:[n_{ppv}] be the number of effective scalar
+per-primitive attributes dependent on code:ViewIndex, latexmath:[m_p] be the
+maximum number of primitives specified by the code:OutputPrimitivesEXT
+{ExecutionMode} and latexmath:[g_p] be
+pname:meshOutputPerPrimitiveGranularity:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+(n_v + (n_{vpv} \times v)) \times 4 \times \mathrm{align}(m_v, g_v) +
+(n_p + (n_{ppv} \times v)) \times 4 \times \mathrm{align}(m_p, g_p)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_NV_mesh_shader[]
+[[mesh-output-perview]]
+== Mesh Shader Per-View Outputs
+
+The mesh shader outputs decorated with the code:PositionPerViewNV,
+code:ClipDistancePerViewNV, code:CullDistancePerViewNV, code:LayerPerViewNV,
+and code:ViewportMaskPerViewNV built-in decorations are the per-view
+versions of the single-view variables with equivalent names (that is
+code:Position, code:ClipDistance, code:CullDistance, code:Layer, and
+code:ViewportMaskNV, respectively).
+If a shader statically assigns a value to any element of a per-view array it
+must: not statically assign a value to the equivalent single-view variable.
+
+Each of these outputs is considered arrayed, with separate values for each
+view.
+The view number is used to index the first dimension of these arrays.
+
+The second dimension of the code:ClipDistancePerViewNV, and
+code:CullDistancePerViewNV arrays have the same requirements as the
+code:ClipDistance, and code:CullDistance arrays.
+
+If a mesh shader output is _per-view_, the corresponding fragment shader
+input is taken from the element of the per-view output array that
+corresponds to the view that is currently being processed by the fragment
+shader.
+
+ifdef::VK_EXT_mesh_shader[]
+These _per-view_ outputs are available only in shaders using the code:MeshNV
+{ExecutionModel}.
+They are not available in shaders using the code:MeshEXT {ExecutionModel}.
+endif::VK_EXT_mesh_shader[]
+
+endif::VK_NV_mesh_shader[]
+
+
+[[mesh-ordering]]
+== Mesh Shader Primitive Ordering
+
+Following guarantees are provided for the relative ordering of primitives
+produced by a mesh shader, as they pertain to <<drawing-primitive-order,
+primitive order>>.
+
+  * When a task shader is used, mesh workgroups spawned from lower tasks
+    will be ordered prior those workgroups from subsequent tasks.
+  * All output primitives generated from a given mesh workgroup are passed
+    to subsequent pipeline stages before any output primitives generated
+    from subsequent input workgroups.
+  * All output primitives within a mesh workgroup, will be generated in the
+    ordering provided by the builtin primitive indexbuffer (from low address
+    to high address).
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_optical_flow/optical_flow.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_optical_flow/optical_flow.adoc
new file mode 100644
index 0000000..e81e984
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_optical_flow/optical_flow.adoc
@@ -0,0 +1,563 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[opticalflow]]
+= Optical Flow
+
+
+== Optical Flow Queues
+
+`apiext:VK_NV_optical_flow` adds a optical flow queue type bit
+ename:VK_QUEUE_OPTICAL_FLOW_BIT_NV to elink:VkQueueFlagBits.
+Optical flow operations are supported by queues with an advertised queue
+capability of ename:VK_QUEUE_OPTICAL_FLOW_BIT_NV.
+As in the case of other queue types, an application must: use
+flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
+device has support for the Optical Flow Queue.
+When the implementation reports the ename:VK_QUEUE_OPTICAL_FLOW_BIT_NV bit
+for a queue family, it advertises general support for Vulkan queue
+operations described in <<devsandqueues, Devices and Queues>>.
+
+
+[[opticalflow-formats]]
+== Optical Flow Image Formats
+
+[open,refpage='vkGetPhysicalDeviceOpticalFlowImageFormatsNV',desc='Query image formats for optical flow',type='protos']
+--
+To enumerate the supported image formats for a specific optical flow usage,
+call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.adoc[]
+
+  * pname:physicalDevice is the physical device being queried.
+  * [[opticalflow-getimageformat-pOpticalFlowImageFormatInfo]]
+    pname:pOpticalFlowImageFormatInfo is a pointer to a
+    slink:VkOpticalFlowImageFormatInfoNV structure specifying the optical
+    flow usage for which information is returned.
+  * [[opticalflow-getimageformat-pFormatCount]] pname:pFormatCount is a
+    pointer to an integer related to the number of optical flow properties
+    available or queried, as described below.
+  * [[opticalflow-getimageformat-pImageFormatProperties]]
+    pname:pImageFormatProperties is a pointer to an array of
+    slink:VkOpticalFlowImageFormatPropertiesNV structures in which supported
+    formats and image parameters are returned.
+
+If pname:pImageFormatProperties is `NULL`, then the number of optical flow
+properties supported for the given pname:physicalDevice is returned in
+pname:pFormatCount.
+Otherwise, pname:pFormatCount must point to a variable set by the user to
+the number of elements in the pname:pImageFormatProperties array, and on
+return the variable is overwritten with the number of values actually
+written to pname:pImageFormatProperties.
+If the value of pname:pFormatCount is less than the number of optical flow
+properties supported, at most pname:pFormatCount values will be written to
+pname:pImageFormatProperties, and ename:VK_INCOMPLETE will be returned
+instead of ename:VK_SUCCESS, to indicate that not all the available values
+were returned.
+Before creating an image to be used as a optical flow frame, obtain the
+supported image creation parameters by querying with
+flink:vkGetPhysicalDeviceFormatProperties2 and
+flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the reported
+formats and adding slink:VkOpticalFlowImageFormatInfoNV to the pname:pNext
+chain of slink:VkPhysicalDeviceImageFormatInfo2.
+When querying the parameters with
+flink:vkGetPhysicalDeviceImageFormatProperties2 for images used for optical
+flow operations, the slink:VkOpticalFlowImageFormatInfoNV::pname:usage field
+should contain one or more of the bits defined in
+elink:VkOpticalFlowUsageFlagBitsNV.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.adoc[]
+
+[NOTE]
+.Note
+====
+ename:VK_FORMAT_B8G8R8A8_UNORM, ename:VK_FORMAT_R8_UNORM and
+ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM are initially supported for images
+with <<opticalflow-usage,optical usage>>
+ename:VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV.
+
+ename:VK_FORMAT_R16G16_S10_5_NV is initially supported for images with
+<<opticalflow-usage,optical flow usage>>
+ename:VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV,
+ename:VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV and
+ename:VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV.
+
+ename:VK_FORMAT_R8_UINT and ename:VK_FORMAT_R32_UINT are initially supported
+for images with <<opticalflow-usage,optical flow usage>>
+ename:VK_OPTICAL_FLOW_USAGE_COST_BIT_NV.
+It is recommended to use ename:VK_FORMAT_R8_UINT because of the lower
+bandwidth.
+====
+--
+
+[open,refpage='VkOpticalFlowImageFormatInfoNV',desc='Structure describing optical flow image format info',type='structs']
+--
+The slink:VkOpticalFlowImageFormatInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkOpticalFlowImageFormatInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[opticalflow-usage]] pname:usage is a bitmask of
+    elink:VkOpticalFlowUsageFlagBitsNV describing the intended optical flow
+    usage of the image.
+
+include::{generated}/validity/structs/VkOpticalFlowImageFormatInfoNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowUsageFlagBitsNV',desc='Bits specifying usage for optical flow operations',type='enums']
+--
+Bits which can: be set in slink:VkOpticalFlowImageFormatInfoNV::pname:usage,
+controlling optical flow usage, are:
+
+include::{generated}/api/enums/VkOpticalFlowUsageFlagBitsNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV specifies that the image can:
+    be used as input or reference frame for an optical flow operation.
+  * ename:VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV specifies that the image can:
+    be used as output flow vector map for an optical flow operation.
+  * ename:VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV specifies that the image can: be
+    used as hint flow vector map for an optical flow operation.
+  * ename:VK_OPTICAL_FLOW_USAGE_COST_BIT_NV specifies that the image can: be
+    used as output cost map for an optical flow operation.
+  * ename:VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV specifies that the image
+    can: be used as global flow vector for an optical flow operation.
+--
+
+[open,refpage='VkOpticalFlowUsageFlagsNV',desc='Bitmask of VkOpticalFlowUsageFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkOpticalFlowUsageFlagsNV.adoc[]
+
+tname:VkOpticalFlowUsageFlagsNV is a bitmask type for setting a mask of zero
+or more elink:VkOpticalFlowUsageFlagBitsNV.
+--
+
+[open,refpage='VkOpticalFlowImageFormatPropertiesNV',desc='Structure describing properties of an optical flow image format',type='structs']
+--
+The slink:VkOpticalFlowImageFormatPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkOpticalFlowImageFormatPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[opticalflow-format]] pname:format is a elink:VkFormat that specifies
+    the format that can be used with the specified optical flow image
+    usages.
+
+include::{generated}/validity/structs/VkOpticalFlowImageFormatPropertiesNV.adoc[]
+--
+
+
+[[opticalflow-session]]
+== Optical Flow Session
+
+
+[[opticalflow-session-object]]
+=== Optical Flow Session Object
+
+[open,refpage='VkOpticalFlowSessionNV',desc='Opaque handle to an optical flow session object',type='handles']
+--
+Optical flow session objects are abstracted and represented by
+slink:VkOpticalFlowSessionNV handles:
+
+include::{generated}/api/handles/VkOpticalFlowSessionNV.adoc[]
+--
+
+
+[[opticalflow-session-creation]]
+==== Creating an Optical Flow Session
+
+[open,refpage='vkCreateOpticalFlowSessionNV',desc='Creates an optical flow session object',type='protos']
+--
+To create an optical flow session object, call:
+
+include::{generated}/api/protos/vkCreateOpticalFlowSessionNV.adoc[]
+
+  * pname:device is the logical device that creates the optical flow session
+    object.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkOpticalFlowSessionCreateInfoNV structure containing parameters
+    specifying the creation of the optical flow session.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pSession is a pointer to a slink:VkOpticalFlowSessionNV handle
+    specifying the optical flow session object which will be created by this
+    function when it returns ename:VK_SUCCESS
+
+include::{generated}/validity/protos/vkCreateOpticalFlowSessionNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowSessionCreateInfoNV',desc='Structure specifying parameters of a newly created optical flow session',type='structs']
+--
+The slink:VkOpticalFlowSessionCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkOpticalFlowSessionCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:width is the width in pixels of the input or reference frame to be
+    bound to this optical flow session.
+  * pname:height is the height in pixels of the input or reference frame to
+    be bound to this optical flow session.
+  * pname:imageFormat is the elink:VkFormat of the input and reference frame
+    to be bound to this optical flow session.
+  * pname:flowVectorFormat is the elink:VkFormat of the flow vector maps
+    (output or hint) to be bound to this optical flow session.
+  * pname:costFormat is the elink:VkFormat of the cost maps to be bound to
+    this optical flow session.
+  * pname:outputGridSize is exactly one bit of
+    tlink:VkOpticalFlowGridSizeFlagsNV specifying the grid size of the
+    output flow and cost maps to be bound to this optical flow session.
+    The size of the output flow and cost maps is determined by
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:width and
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:height divided by
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:outputGridSize.
+  * pname:hintGridSize is one exactly bit of
+    tlink:VkOpticalFlowGridSizeFlagsNV specifying the grid size of the hint
+    flow vector maps to be bound to this optical flow session.
+    The size of the hint maps is determined by
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:width and
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:height divided by
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:hintGridSize.
+  * pname:performanceLevel is the elink:VkOpticalFlowPerformanceLevelNV used
+    for this optical flow session.
+  * pname:flags are the tlink:VkOpticalFlowSessionCreateFlagsNV used for
+    this optical flow session.
+
+.Valid Usage
+****
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-width-07581]]
+    pname:width must: be greater than or equal to
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:minWidth and less
+    than or equal to
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:maxWidth
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-height-07582]]
+    pname:height must: be greater than or equal to
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:minHeight and less
+    than or equal to
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:maxHeight
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-imageFormat-07583]]
+    pname:imageFormat must: be one of the formats returned by
+    flink:vkGetPhysicalDeviceOpticalFlowImageFormatsNV for
+    ename:VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flowVectorFormat-07584]]
+    pname:flowVectorFormat must: be one of the formats returned by
+    flink:vkGetPhysicalDeviceOpticalFlowImageFormatsNV for
+    ename:VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-costFormat-07585]]
+    pname:costFormat must: be one of the formats returned by
+    flink:vkGetPhysicalDeviceOpticalFlowImageFormatsNV for
+    ename:VK_OPTICAL_FLOW_USAGE_COST_BIT_NV if
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV is set in
+    pname:flags
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-07586]]
+    pname:outputGridSize must: be exactly one of the bits reported in
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:supportedOutputGridSizes
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-hintGridSize-07587]]
+    pname:hintGridSize must: be exactly one of the bits reported in
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:supportedHintGridSizes
+    if ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV is set in
+    pname:flags
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flags-07588]]
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV must: not be set
+    in pname:flags if
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:hintSupported is
+    ename:VK_FALSE
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flags-07589]]
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV must: not be set
+    in pname:flags if
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:costSupported is
+    ename:VK_FALSE
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flags-07590]]
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV must: not
+    be set in pname:flags if
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:globalFlowSupported
+    is ename:VK_FALSE
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flags-07591]]
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV must: not be
+    set in pname:flags if
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:maxNumRegionsOfInterest
+    is 0
+  * [[VUID-VkOpticalFlowSessionCreateInfoNV-flags-07592]]
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV must: not be
+    set in pname:flags if
+    sname:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:bidirectionalFlowSupported
+    is ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkOpticalFlowSessionCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowSessionCreatePrivateDataInfoNV',desc='Structure for NV internal use only',type='structs']
+--
+The slink:VkOpticalFlowSessionCreatePrivateDataInfoNV structure is for NV
+internal use only and is defined as:
+
+include::{generated}/api/structs/VkOpticalFlowSessionCreatePrivateDataInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:id is an identifier for data which is passed at a memory location
+    specified in
+    sname:VkOpticalFlowSessionCreatePrivateDataInfoNV::pname:pPrivateData.
+  * pname:size is the size of data in bytes which is passed at a memory
+    location specified in
+    sname:VkOpticalFlowSessionCreatePrivateDataInfoNV::pname:pPrivateData.
+  * pname:pPrivateData is a pointer to NV internal data.
+
+include::{generated}/validity/structs/VkOpticalFlowSessionCreatePrivateDataInfoNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowGridSizeFlagBitsNV',desc='Bits specifying grid sizes for optical flow operations',type='enums']
+--
+Optical flow vectors are generated block-wise, one vector for each block of
+NxN pixels (referred to as grid).
+
+Bits which can: be set in
+slink:VkOpticalFlowSessionCreateInfoNV::pname:outputGridSize and
+slink:VkOpticalFlowSessionCreateInfoNV::pname:hintGridSize, or which are
+returned in
+slink:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:supportedOutputGridSizes
+and
+slink:VkPhysicalDeviceOpticalFlowPropertiesNV::pname:supportedHintGridSizes
+controlling optical flow grid sizes, are:
+
+include::{generated}/api/enums/VkOpticalFlowGridSizeFlagBitsNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV specifies that grid is 1x1
+    pixel.
+  * ename:VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV specifies that grid is 2x2
+    pixel.
+  * ename:VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV specifies that grid is 4x4
+    pixel.
+  * ename:VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV specifies that grid is 8x8
+    pixel.
+--
+
+[open,refpage='VkOpticalFlowGridSizeFlagsNV',desc='Bitmask of VkOpticalFlowGridSizeFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkOpticalFlowGridSizeFlagsNV.adoc[]
+
+tname:VkOpticalFlowGridSizeFlagsNV is a bitmask type for setting a mask of
+zero or more elink:VkOpticalFlowGridSizeFlagBitsNV.
+--
+
+[open,refpage='VkOpticalFlowPerformanceLevelNV',desc='Optical flow performance level types',type='enums']
+--
+Optical flow exposes performance levels which the user can choose based on
+the desired performance and quality requirement.
+
+The optical flow performance level types are defined with the following:
+
+include::{generated}/api/enums/VkOpticalFlowPerformanceLevelNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV is a level with slower
+    performance but higher quality.
+  * ename:VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV is a level with medium
+    performance and medium quality.
+  * ename:VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV is a preset with higher
+    performance but lower quality.
+--
+
+[open,refpage='VkOpticalFlowSessionCreateFlagBitsNV',desc='Bits specifying flags for optical flow session',type='enums']
+--
+Bits which can: be set in
+slink:VkOpticalFlowSessionCreateInfoNV::pname:flags, controlling optical
+flow session operations, are:
+
+include::{generated}/api/enums/VkOpticalFlowSessionCreateFlagBitsNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV specifies that a
+    slink:VkImageView with external flow vectors will be used as hints in
+    performing the motion search and must: be bound to
+    ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV.
+  * ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV specifies that
+    the cost for the forward flow is generated in a slink:VkImageView which
+    must: be bound to ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV.
+    Additionally, if
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV is also set,
+    the cost for backward flow is generated in a slink:VkImageView which
+    must: be bound to
+    ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV.
+    The cost is the confidence level of the flow vector for each grid in the
+    frame.
+    The Cost implies how (in)accurate the flow vector is.
+    Higher cost value implies the flow vector to be less accurate and
+    vice-versa.
+  * ename:VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV specifies
+    that a global flow vector is estimated from forward flow in a single
+    pixel slink:VkImageView which must: be bound to
+    ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV.
+  * ename:VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV specifies that
+    regions of interest can: be specified in
+    slink:VkOpticalFlowExecuteInfoNV.
+  * ename:VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV specifies
+    that backward flow is generated in addition to forward flow which is
+    always generated.
+--
+
+[open,refpage='VkOpticalFlowSessionCreateFlagsNV',desc='Bitmask of VkOpticalFlowSessionCreateFlagBitsNV',type='flags']
+--
+tname:VkOpticalFlowSessionCreateFlagsNV is a bitmask type for setting a mask
+of zero or more elink:VkOpticalFlowSessionCreateFlagBitsNV.
+
+include::{generated}/api/flags/VkOpticalFlowSessionCreateFlagsNV.adoc[]
+--
+
+
+[[opticalflow-session-destruction]]
+==== Destroying an Optical Flow Session
+
+[open,refpage='vkDestroyOpticalFlowSessionNV',desc='Destroy optical flow session object',type='protos']
+--
+To destroy a optical flow session object, call:
+
+include::{generated}/api/protos/vkDestroyOpticalFlowSessionNV.adoc[]
+
+  * pname:device is the device that was used for the creation of the optical
+    flow session.
+  * pname:session is the optical flow session to be destroyed.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroyOpticalFlowSessionNV.adoc[]
+--
+
+
+[[opticalflow-session-binding-images]]
+=== Binding Vulkan Image Views to an Optical Flow Session
+
+[open,refpage='vkBindOpticalFlowSessionImageNV',desc='Bind image to an optical flow session',type='protos']
+--
+To bind a vulkan image to an optical flow session object, call:
+
+include::{generated}/api/protos/vkBindOpticalFlowSessionImageNV.adoc[]
+
+  * pname:device is the device which owns the optical flow session object
+    pname:session.
+  * pname:session is the optical flow session object to which the image view
+    is to be bound.
+  * pname:bindingPoint specifies the binding point
+    elink:VkOpticalFlowSessionBindingPointNV to which the image view is
+    bound.
+  * pname:view is a slink:VkImageView to be bound.
+  * layout must: specify the layout that the image subresources accessible
+    from pname:view will be in at the time the optical flow vectors are
+    calculated with flink:vkCmdOpticalFlowExecuteNV on a sname:VkDevice.
+
+include::{generated}/validity/protos/vkBindOpticalFlowSessionImageNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowSessionBindingPointNV',desc='Binding points of an optical flow session',type='enums']
+--
+The optical flow session binding points are defined with the following:
+
+include::{generated}/api/enums/VkOpticalFlowSessionBindingPointNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV specifies the
+    binding point for the input frame.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV specifies the
+    binding point for the input reference frame.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV specifies the
+    binding point for the optional external hint flow vectors.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV specifies the
+    binding point for output flow vectors of default forward flow calcution.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV
+    specifies the binding point for the optional output flow vector map of
+    optional backward flow calcution.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV specifies the
+    binding point for the optional output cost map of default forward flow
+    calcution.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV specifies
+    the binding point for the optional output cost map of optional backward
+    flow calcution.
+  * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV specifies the
+    binding point for the optional global flow value of default forward flow
+    calcution.
+--
+
+
+[[opticalflow-operations]]
+=== Optical Flow Execution
+
+[open,refpage='vkCmdOpticalFlowExecuteNV',desc='Calculate optical flow vectors',type='protos']
+--
+Default direction of flow estimation is forward which calculates the optical
+flow from input frame to reference frame.
+Optionally backward flow estimation can be additionally calculated.
+An output flow vector (Vx, Vy) means that current pixel (x, y) of input
+frame can be found at location (x+Vx, y+Vy) in reference frame.
+A backward flow vector (Vx, Vy) means that current pixel (x, y) of reference
+frame can be found at location (x+Vx, y+Vy) in input frame.
+
+To calculate optical flow vectors from two input frames, call:
+
+include::{generated}/api/protos/vkCmdOpticalFlowExecuteNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:session is the optical flow session object on which this command
+    is operating.
+  * pname:pExecuteInfo Info is a pointer to a
+    slink:VkOpticalFlowExecuteInfoNV.
+
+include::{generated}/validity/protos/vkCmdOpticalFlowExecuteNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowExecuteInfoNV',desc='Structure specifying parameters of a optical flow vector calculation',type='structs']
+--
+The slink:VkOpticalFlowExecuteInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkOpticalFlowExecuteInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags are the tlink:VkOpticalFlowExecuteFlagsNV used for this
+    command.
+  * pname:regionCount is the number of regions of interest specified in
+    pname:pRegions.
+  * pname:pRegions is a pointer to pname:regionCount sname:VkRect2D regions
+    of interest.
+
+.Valid Usage
+****
+  * [[VUID-VkOpticalFlowExecuteInfoNV-regionCount-07593]]
+    pname:regionCount must: be 0 if
+    ename:VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV was not set
+    for sname:VkOpticalFlowSessionNV on which this command is operating
+****
+
+include::{generated}/validity/structs/VkOpticalFlowExecuteInfoNV.adoc[]
+--
+
+[open,refpage='VkOpticalFlowExecuteFlagBitsNV',desc='Bits specifying flags for a optical flow vector calculation',type='enums']
+--
+Bits which can: be set in slink:VkOpticalFlowExecuteInfoNV::pname:flags,
+controlling optical flow execution, are:
+
+include::{generated}/api/enums/VkOpticalFlowExecuteFlagBitsNV.adoc[]
+
+  * ename:VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV specifies
+    that temporal hints from previously generated flow vectors are not used.
+    If temporal hints are enabled, optical flow vectors from previous
+    flink:vkCmdOpticalFlowExecuteNV call are automatically used as hints for
+    the current flink:vkCmdOpticalFlowExecuteNV call, to take advantage of
+    temporal correlation in a video sequence.
+    Temporal hints should be disabled if there is a-priori knowledge of no
+    temporal correlation (e.g. a scene change, independent successive frame
+    pairs).
+--
+
+[open,refpage='VkOpticalFlowExecuteFlagsNV',desc='Bitmask of VkOpticalFlowExecuteFlagBitsNV',type='flags']
+--
+tname:VkOpticalFlowExecuteFlagsNV is a bitmask type for setting a mask of
+zero or more elink:VkOpticalFlowExecuteFlagBitsNV.
+
+include::{generated}/api/flags/VkOpticalFlowExecuteFlagsNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_present_barrier/present_barrier.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_present_barrier/present_barrier.adoc
new file mode 100644
index 0000000..aa9b136
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_present_barrier/present_barrier.adoc
@@ -0,0 +1,66 @@
+// Copyright (c) 2018-2022 NVIDIA Corporation.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[present-barrier]]
+== Present Barrier
+
+The `apiext:VK_NV_present_barrier` extension allows applications to
+synchronize corresponding presentation requests across multiple swapchains
+using the _present barrier_.
+A swapchain is said to be using the _present barrier_ if the swapchain is
+created by adding a slink:VkSwapchainPresentBarrierCreateInfoNV structure to
+the pname:pNext chain of the slink:VkSwapchainCreateInfoKHR structure, and
+setting
+slink:VkSwapchainPresentBarrierCreateInfoNV::pname:presentBarrierEnable to
+true.
+
+A set of corresponding presentation requests is defined as exactly one
+queued presentation request associated with each swapchain using the present
+barrier, whether or not that queued request has executed.
+A given presentation request is added, when created by calling
+flink:vkQueuePresentKHR and specifying a swapchain using the present
+barrier, either to the oldest existing set of corresponding requests for
+which there is no existing member associated with the request's swapcahin,
+or to a new set of corresponding requests if no such set exists.
+
+A set of corresponding requests is said to be _full_ when it contains one
+request from each swapchain using the present barrier.
+Queued presentation of an image to a swapchain using the _present barrier_
+is _deferred_ by the implementation until the set of corresponding requests
+is full, and the visibility operations associated with all requests in that
+set, as described by flink:vkQueuePresentKHR, have completed.
+
+Additionally, the set of swapchains using the present barrier can be in the
+same process, or different processes running under the same operating
+system.
+And if the required synchronization hardware is connected and correctly
+configured, this extension also supports applications to synchronize
+corresponding presentation requests using the _present barrier_ across
+distributed systems.
+However, the configuration mechanism of the required hardware is outside the
+scope of the Vulkan specification and this extension.
+
+[open,refpage='VkSwapchainPresentBarrierCreateInfoNV',desc='specify the present barrier membership of this swapchain',type='structs']
+--
+The slink:VkSwapchainPresentBarrierCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSwapchainPresentBarrierCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:presentBarrierEnable is a boolean value indicating a request for
+    using the _present barrier_.
+
+If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR does not include
+this structure, the default value for pname:presentBarrierEnable is
+ename:VK_FALSE, meaning the swapchain does not request to use the present
+barrier.
+Additionally, when recreating a swapchain that was using the present
+barrier, and the pname:pNext chain of slink:VkSwapchainCreateInfoKHR does
+not include this structure, it means the swapchain will stop using the
+present barrier.
+
+include::{generated}/validity/structs/VkSwapchainPresentBarrierCreateInfoNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.adoc
new file mode 100644
index 0000000..1fdf598
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.adoc
@@ -0,0 +1,44 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='VkWin32KeyedMutexAcquireReleaseInfoNV',desc='Use Windows keyex mutex mechanism to synchronize work',type='structs']
+--
+When submitting work that operates on memory imported from a Direct3D 11
+resource to a queue, the keyed mutex mechanism may: be used in addition to
+Vulkan semaphores to synchronize the work.
+Keyed mutexes are a property of a properly created shareable Direct3D 11
+resource.
+They can: only be used if the imported resource was created with the
+etext:D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX flag.
+
+To acquire keyed mutexes before submitted work and/or release them after,
+add a slink:VkWin32KeyedMutexAcquireReleaseInfoNV structure to the
+pname:pNext chain of the slink:VkSubmitInfo structure.
+
+The sname:VkWin32KeyedMutexAcquireReleaseInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkWin32KeyedMutexAcquireReleaseInfoNV.adoc[]
+
+  * pname:acquireCount is the number of entries in the pname:pAcquireSyncs,
+    pname:pAcquireKeys, and pname:pAcquireTimeoutMilliseconds arrays.
+  * pname:pAcquireSyncs is a pointer to an array of slink:VkDeviceMemory
+    objects which were imported from Direct3D 11 resources.
+  * pname:pAcquireKeys is a pointer to an array of mutex key values to wait
+    for prior to beginning the submitted work.
+    Entries refer to the keyed mutex associated with the corresponding
+    entries in pname:pAcquireSyncs.
+  * pname:pAcquireTimeoutMilliseconds is a pointer to an array of timeout
+    values, in millisecond units, for each acquire specified in
+    pname:pAcquireKeys.
+  * pname:releaseCount is the number of entries in the pname:pReleaseSyncs
+    and pname:pReleaseKeys arrays.
+  * pname:pReleaseSyncs is a pointer to an array of slink:VkDeviceMemory
+    objects which were imported from Direct3D 11 resources.
+  * pname:pReleaseKeys is a pointer to an array of mutex key values to set
+    when the submitted work has completed.
+    Entries refer to the keyed mutex associated with the corresponding
+    entries in pname:pReleaseSyncs.
+
+include::{generated}/validity/structs/VkWin32KeyedMutexAcquireReleaseInfoNV.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.adoc
new file mode 100644
index 0000000..4f8dd63
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.adoc
@@ -0,0 +1,89 @@
+// Copyright (c) 2020 Qualcomm Technologies Incorporated
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[copies-images-scaling-rotation]]
+=== Image Blits With Scaling and Rotation
+
+When slink:VkCopyCommandTransformInfoQCOM is in the pname:pNext chain of
+slink:VkImageBlit2, the specified region is rotated during the blit.
+The following description of rotated addressing replaces the description in
+flink:vkCmdBlitImage.
+
+The following code computes rotation of normalized coordinates.
+
+[source,c]
+----
+// rotation of normalized coordinates
+VkOffset2D RotateNormUV(VkOffset2D in, VkSurfaceTransformFlagBitsKHR flags)
+{
+    VkOffset2D output;
+    switch (flags)
+    {
+        case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR:
+            out.x = in.x;
+            out.y = in.y;
+            break;
+        case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR:
+            out.x = in.y;
+            out.y = 1.0 - in.x;
+            break;
+        case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR:
+            out.x = 1.0 - in.x;
+            out.y = 1.0 - in.y;
+            break;
+        case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR:
+            out.x = 1.0 - in.y;
+            out.y = in.x;
+            break;
+    }
+    return out;
+}
+----
+
+  * For each destination texel, the integer coordinate of that texel is
+    converted to an unnormalized texture coordinate, using the effective
+    inverse of the equations described in
+    <<textures-unnormalized-to-integer, unnormalized to integer
+    conversion>>:
+  {empty}:: [eq]#u~base~ = i {plus} {onehalf}#
+  {empty}:: [eq]#v~base~ = j {plus} {onehalf}#
+  {empty}:: [eq]#w~base~ = k {plus} {onehalf}#
+  * These base coordinates are then offset by the first destination offset:
+  {empty}:: [eq]#u~offset~ = u~base~ - x~dst0~#
+  {empty}:: [eq]#v~offset~ = v~base~ - y~dst0~#
+  {empty}:: [eq]#w~offset~ = w~base~ - z~dst0~#
+  {empty}:: [eq]#a~offset~ = a - pname:baseArrayCount~dst~#
+
+  * The UV destination coordinates are scaled by the destination region,
+    rotated, and scaled by the source region.
+  {empty}:: [eq]#u~dest_scaled~ = u~offset~ / (x~dst1~ - x~dst0~)#
+  {empty}:: [eq]#v~dest_scaled~ = v~offset~ / (y~dst1~ - y~dst0~)#
+  {empty}:: [eq]#(u~src_scaled~, v~src_scaled~) =
+            code:RotateNormUV(u~dest_scaled~, v~dest_scaled~,
+            pname:transform)#
+  {empty}:: [eq]#u~scaled~ = u~src_scaled~ {times} (x~Src1~ - x~Src0~)#
+  {empty}:: [eq]#v~scaled~ = v~src_scaled~ {times} (y~Src1~ - y~Src0~)#
+
+  * The W coordinate is unaffected by rotation.
+    The scale is determined from the ratio of source and destination
+    regions, and applied to the offset coordinate:
+  {empty}:: [eq]#scale~w~ = (z~Src1~ - z~Src0~) / (z~dst1~ - z~dst0~)#
+  {empty}:: [eq]#w~scaled~ = w~offset~ {times} scale~w~#
+
+
+  * Finally the source offset is added to the scaled source coordinates, to
+    determine the final unnormalized coordinates used to sample from
+    pname:srcImage:
+  {empty}:: [eq]#u = u~scaled~ {plus} x~Src0~#
+  {empty}:: [eq]#v = v~scaled~ {plus} y~Src0~#
+  {empty}:: [eq]#w = w~scaled~ {plus} z~Src0~#
+  {empty}:: [eq]#q = pname:mipLevel#
+  {empty}:: [eq]#a = a~offset~ {plus} pname:baseArrayCount~src~#
+
+These coordinates are used to sample from the source image as described for
+<<textures, Image Operations>>, with the filter mode equal to that of
+pname:filter; a mipmap mode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST; and an
+address mode of ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+Implementations must: clamp at the edge of the source image, and may:
+additionally clamp to the edge of the source region.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/device_memory.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/device_memory.adoc
new file mode 100644
index 0000000..cb597d4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/device_memory.adoc
@@ -0,0 +1,128 @@
+// Copyright 2023 QNX Software Systems
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[qnx-screen-buffer-external-memory]]
+=== QNX Screen Buffer External Memory
+
+[open,refpage='VkImportScreenBufferInfoQNX',desc='Import memory from a QNX Screen buffer',type='structs']
+--
+To import memory created outside of the current Vulkan instance from a QNX
+Screen buffer, add a sname:VkImportScreenBufferInfoQNX structure to the
+pname:pNext chain of the slink:VkMemoryAllocateInfo structure.
+The sname:VkImportScreenBufferInfoQNX structure is defined as:
+
+include::{generated}/api/structs/VkImportScreenBufferInfoQNX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is a pointer to a code:struct code:_screen_buffer, the QNX
+    Screen buffer to import
+
+The implementation may: not acquire a reference to the imported Screen
+buffer.
+Therefore, the application must: ensure that the object referred to by
+pname:buffer stays valid as long as the device memory to which it is
+imported is being used.
+
+.Valid Usage
+****
+  * [[VUID-VkImportScreenBufferInfoQNX-buffer-08966]]
+    If pname:buffer is not `NULL`, QNX Screen Buffers must: be supported for
+    import, as reported by slink:VkExternalImageFormatProperties or
+    slink:VkExternalBufferProperties
+  * [[VUID-VkImportScreenBufferInfoQNX-buffer-08967]]
+    pname:buffer is not `NULL`, it must: be a pointer to
+    <<memory-external-screen-buffer-validity,valid QNX Screen buffer>>
+
+****
+
+include::{generated}/validity/structs/VkImportScreenBufferInfoQNX.adoc[]
+--
+
+[open,refpage='vkGetScreenBufferPropertiesQNX',desc='Get Properties of External Memory QNX Screen Buffers',type='protos']
+--
+To determine the memory parameters to use when importing a QNX Screen
+buffer, call:
+
+include::{generated}/api/protos/vkGetScreenBufferPropertiesQNX.adoc[]
+
+  * pname:device is the logical device that will be importing pname:buffer.
+  * pname:buffer is the QNX Screen buffer which will be imported.
+  * pname:pProperties is a pointer to a slink:VkScreenBufferPropertiesQNX
+    structure in which the properties of pname:buffer are returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetScreenBufferPropertiesQNX-buffer-08968]]
+    pname:buffer must: be a <<memory-external-screen-buffer-validity,valid
+    QNX Screen buffer>>
+****
+
+include::{generated}/validity/protos/vkGetScreenBufferPropertiesQNX.adoc[]
+--
+
+[open,refpage='VkScreenBufferPropertiesQNX',desc='Properties of External Memory QNX Screen Buffers',type='structs']
+--
+The sname:VkScreenBufferPropertiesQNX structure returned is defined as:
+
+include::{generated}/api/structs/VkScreenBufferPropertiesQNX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:allocationSize is the size of the external memory.
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the specified Screen buffer can: be imported as.
+
+include::{generated}/validity/structs/VkScreenBufferPropertiesQNX.adoc[]
+--
+
+[open,refpage='VkScreenBufferFormatPropertiesQNX',desc='Structure describing the image format properties of a QNX Screen buffer',type='structs']
+--
+To obtain format properties of a QNX Screen buffer, include a
+sname:VkScreenBufferFormatPropertiesQNX structure in the pname:pNext chain
+of the slink:VkScreenBufferPropertiesQNX structure passed to
+flink:vkGetScreenBufferPropertiesQNX.
+This structure is defined as:
+
+include::{generated}/api/structs/VkScreenBufferFormatPropertiesQNX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is the Vulkan format corresponding to the Screen buffer's
+    format or ename:VK_FORMAT_UNDEFINED if there is not an equivalent Vulkan
+    format.
+  * pname:externalFormat is an implementation-defined external format
+    identifier for use with slink:VkExternalFormatQNX.
+    It must: not be zero.
+  * pname:screenUsage is an implementation-defined external usage identifier
+    for the QNX Screen buffer.
+  * pname:formatFeatures describes the capabilities of this external format
+    when used with an image bound to memory imported from pname:buffer.
+  * pname:samplerYcbcrConversionComponents is the component swizzle that
+    should: be used in slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrModel is a suggested color model to use in the
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrRange is a suggested numerical value range to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedXChromaOffset is a suggested X chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYChromaOffset is a suggested Y chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+
+If the QNX Screen buffer has one of the formats listed in the
+<<memory-external-qnx-screen-buffer-formats,QNX Screen Format Equivalence
+table>>, then pname:format must: have the equivalent Vulkan format listed in
+the table.
+Otherwise, pname:format may: be ename:VK_FORMAT_UNDEFINED, indicating the
+QNX Screen buffer can: only be used with an external format.
+The pname:formatFeatures member must: include
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT and should: include
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT.
+
+include::{generated}/validity/structs/VkScreenBufferFormatPropertiesQNX.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/qnx_screen_buffer.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/qnx_screen_buffer.adoc
new file mode 100644
index 0000000..8745c3d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_external_memory_screen_buffer/qnx_screen_buffer.adoc
@@ -0,0 +1,133 @@
+// Copyright 2023 QNX Software Systems
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[memory-external-qnx-screen-buffer]]
+==== QNX Screen Buffer
+
+The QNX SDP defines code:_screen_buffer objects, which represent a buffer
+that the QNX Screen graphics subsystem can use directly in its windowing
+system APIs.
+More specifically, a Screen buffer is an area of memory that stores pixel
+data.
+It can be attached to Screen windows, streams, or pixmaps.
+These QNX Screen buffer objects may: be imported into slink:VkDeviceMemory
+objects for access via Vulkan.
+An slink:VkImage or slink:VkBuffer can: be bound to the imported
+slink:VkDeviceMemory object if it is created with
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX.
+
+--
+code:struct code:_screen_buffer is strongly typed, so naming the handle type
+is redundant.
+The internal layout and therefore size of a code:struct code:_screen_buffer
+image may depend on native usage flags that do not have corresponding Vulkan
+counterparts.
+--
+
+[[memory-external-screen-buffer-validity]]
+===== QNX Screen Buffer Validity
+The design of Screen in the QNX SDP makes it difficult to determine the
+validity of objects from outside of Screen.
+Therefore, applications must: ensure that QNX Screen buffer objects provided
+used in various Vulkan interfaces are ones created explicitly with QNX
+Screen APIs.
+See QNX SDP documentation for more information.
+
+A slink:VkDeviceMemory imported from a QNX Screen buffer has no way to
+acquire a reference to its code:_screen_buffer object.
+Therefore, during the host execution of a Vulkan command that has a QNX
+Screen buffer as a parameter (including indirect parameters via pname:pNext
+chains), the application must: ensure that the QNX Screen buffer resource
+remains valid.
+
+Generally, for a code:_screen_buffer object to be valid for use within a
+Vulkan implementation, the buffer object should: have a
+code:_screen_buffer::code:SCREEN_PROPERTY_USAGE that includes at least one
+of: code:SCREEN_USAGE_VULKAN, code:SCREEN_USAGE_OPENGL_ES2,
+code:SCREEN_USAGE_OPENGL_ES3, or code:SCREEN_USAGE_NATIVE.
+The exact Screen-native usage flags required depends on the Vulkan
+implementation, and QNX Screen itself will not necessarily enforce these
+requirements.
+Note that Screen-native usage flags are in no way related to usage flags in
+the Vulkan specification.
+
+[[memory-external-screen-buffer-external-formats]]
+===== QNX Screen Buffer External Formats
+
+QNX Screen buffers may: represent images using implementation-specific
+formats, layouts, color models, etc., which do not have Vulkan equivalents.
+Such _external formats_ are commonly used by external image sources such as
+video decoders or cameras.
+Vulkan can: import QNX Screen buffers that have external formats, but since
+the image contents are in an undiscoverable and possibly proprietary
+representation, images with external formats must: only be used as sampled
+images, must: only be sampled with a sampler that has {YCbCr} conversion
+enabled, and must: have optimal tiling.
+
+Images that will be backed by a QNX Screen buffer can: use an external
+format by setting slink:VkImageCreateInfo::pname:format to
+ename:VK_FORMAT_UNDEFINED and including a slink:VkExternalFormatQNX
+structure in the pname:pNext chain.
+Images can: be created with an external format even if the QNX Screen buffer
+has a format which has an
+<<memory-external-qnx-screen-buffer-formats,equivalent Vulkan format>> to
+enable consistent handling of images from sources that might use either
+category of format.
+The external format of a QNX Screen buffer can: be obtained by passing a
+slink:VkScreenBufferFormatPropertiesQNX structure to
+flink:vkGetScreenBufferPropertiesQNX.
+
+
+[[memory-external-qnx-screen-buffer-image-resources]]
+===== QNX Screen Buffer Image Resources
+
+QNX Screen buffers have intrinsic width, height, format, and usage
+properties, so Vulkan images bound to memory imported from a QNX Screen
+buffer must: use dedicated allocations:
+sname:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation must:
+be ename:VK_TRUE for images created with
+slink:VkExternalMemoryImageCreateInfo::pname:handleTypes that includes
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX.
+When creating an image that will be bound to an imported QNX Screen buffer,
+the image creation parameters must: be equivalent to the code:_screen_buffer
+properties as described by the valid usage of slink:VkMemoryAllocateInfo.
+
+[[memory-external-qnx-screen-buffer-formats]]
+.QNX Screen Buffer Format Equivalence
+[width="100%",options="header"]
+|====
+| QNX Screen Format                              | Vulkan Format
+| code:SCREEN_FORMAT_RGBA8888                    | ename:VK_FORMAT_B8G8R8A8_UNORM
+| code:SCREEN_FORMAT_RGBX8888 ^1^                | ename:VK_FORMAT_B8G8R8A8_UNORM
+| code:SCREEN_FORMAT_BGRA8888                    | ename:VK_FORMAT_R8G8B8A8_UNORM
+| code:SCREEN_FORMAT_BGRX8888 ^1^                | ename:VK_FORMAT_R8G8B8A8_UNORM
+| code:SCREEN_FORMAT_RGBA1010102                 | ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32
+| code:SCREEN_FORMAT_RGBX1010102 ^1^             | ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32
+| code:SCREEN_FORMAT_BGRA1010102                 | ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+| code:SCREEN_FORMAT_BGRX1010102 ^1^             | ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+| code:SCREEN_FORMAT_RGBA5551                    | ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
+| code:SCREEN_FORMAT_RGBX5551 ^1^                | ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
+| code:SCREEN_FORMAT_RGB565                      | ename:VK_FORMAT_R5G6B5_UNORM_PACK16
+| code:SCREEN_FORMAT_RGB888                      | ename:VK_FORMAT_R8G8B8_UNORM
+|====
+
+
+1::
+    Vulkan does not differentiate between code:SCREEN_FORMAT_RGBA8888 and
+    code:SCREEN_FORMAT_RGBX8888: they both behave as
+    ename:VK_FORMAT_R8G8B8A8_UNORM.
+    After an external entity writes to a code:SCREEN_FORMAT_RGBX8888 QNX
+    Screen buffer, the values read by Vulkan from the X/A component are
+    undefined:.
+    To emulate the traditional behavior of the X component during sampling
+    or blending, applications should: use ename:VK_COMPONENT_SWIZZLE_ONE in
+    image view component mappings and ename:VK_BLEND_FACTOR_ONE in color
+    blend factors.
+    There is no way to avoid copying these undefined: values when copying
+    from such an image to another image or buffer.
+    The same behavior applies to the following pairs:
+    code:SCREEN_FORMAT_BGRA8888 and code:SCREEN_FORMAT_BGRX8888,
+    code:SCREEN_FORMAT_RGBA1010102 and code:SCREEN_FORMAT_RGBX1010102,
+    code:SCREEN_FORMAT_BGRA1010102 and code:SCREEN_FORMAT_BGRX1010102,
+    code:SCREEN_FORMAT_RGBA5551 and code:SCREEN_FORMAT_RGBX5551
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.adoc
new file mode 100644
index 0000000..e278940
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.adoc
@@ -0,0 +1,59 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_screen]]
+=== QNX Screen Platform
+
+[open,refpage='vkCreateScreenSurfaceQNX',desc='Create a slink:VkSurfaceKHR object for a QNX Screen window',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a QNX Screen surface, call:
+
+include::{generated}/api/protos/vkCreateScreenSurfaceQNX.adoc[]
+
+  * pname:instance is the instance to associate the surface with.
+  * pname:pCreateInfo is a pointer to a slink:VkScreenSurfaceCreateInfoQNX
+    structure containing parameters affecting the creation of the surface
+    object.
+  * pname:pAllocator is the allocator used for host memory allocated for the
+    surface object when there is no more specific allocator available (see
+    <<memory-allocation,Memory Allocation>>).
+  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
+    created surface object is returned.
+
+include::{generated}/validity/protos/vkCreateScreenSurfaceQNX.adoc[]
+--
+
+[open,refpage='VkScreenSurfaceCreateInfoQNX',desc='Structure specifying parameters of a newly created QNX Screen surface object',type='structs']
+--
+The sname:VkScreenSurfaceCreateInfoQNX structure is defined as:
+
+include::{generated}/api/structs/VkScreenSurfaceCreateInfoQNX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:context and pname:window are QNX Screen code:context and
+    code:window to associate the surface with.
+
+.Valid Usage
+****
+  * [[VUID-VkScreenSurfaceCreateInfoQNX-context-04741]]
+    pname:context must: point to a valid QNX Screen code:struct
+    _screen_context
+  * [[VUID-VkScreenSurfaceCreateInfoQNX-window-04742]]
+    pname:window must: point to a valid QNX Screen code:struct
+    _screen_window
+****
+
+include::{generated}/validity/structs/VkScreenSurfaceCreateInfoQNX.adoc[]
+--
+
+[open,refpage='VkScreenSurfaceCreateFlagsQNX',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkScreenSurfaceCreateFlagsQNX.adoc[]
+
+tname:VkScreenSurfaceCreateFlagsQNX is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.adoc b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.adoc
new file mode 100644
index 0000000..b91f643
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.adoc
@@ -0,0 +1,31 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_screen]]
+=== QNX Screen Platform
+
+[open,refpage='vkGetPhysicalDeviceScreenPresentationSupportQNX',desc='Query physical device for presentation to QNX Screen',type='protos']
+--
+To determine whether a queue family of a physical device supports
+presentation to a QNX Screen compositor, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceScreenPresentationSupportQNX.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:queueFamilyIndex is the queue family index.
+  * pname:window is the QNX Screen code:window object.
+
+This platform-specific function can: be called prior to creating a surface.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-queueFamilyIndex-04743]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
+    pname:physicalDevice
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceScreenPresentationSupportQNX.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/accelstructures.adoc b/codegen/vulkan/vulkan-docs-next/chapters/accelstructures.adoc
new file mode 100644
index 0000000..b2c2bac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/accelstructures.adoc
@@ -0,0 +1,2647 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[acceleration-structure]]
+= Acceleration Structures
+
+
+[[acceleration-structure-def]]
+== Acceleration Structures
+
+_Acceleration structures_ are data structures used by the implementation to
+efficiently manage scene geometry as it is <<ray-traversal, traversed during
+a ray tracing query>>.
+The application is responsible for managing acceleration structure objects
+(see <<resources-acceleration-structures,Acceleration Structures>>),
+including allocation, destruction, executing builds or updates, and
+synchronizing resources used during ray tracing queries.
+
+There are two types of acceleration structures, _top level acceleration
+structures_ and _bottom level acceleration structures_.
+
+An acceleration structure is considered to be constructed if an
+<<acceleration-structure-building,acceleration structure build command>> or
+<<acceleration-structure-copying,copy command>> has been executed with the
+given acceleration structure as the destination.
+
+[[fig-accelstruct]]
+image::{images}/accelstruct.svg[align="center",title="Acceleration Structure",opts="{imageopts}"]
+
+.Caption
+****
+The diagram shows the relationship between top and bottom level acceleration
+structures.
+****
+
+
+[[acceleration-structure-geometry]]
+=== Geometry
+
+_Geometries_ refer to a triangle or axis-aligned bounding box.
+
+
+[[acceleration-structure-top-level]]
+=== Top Level Acceleration Structures
+
+Opaque acceleration structure for an array of instances.
+The descriptor or device address referencing this is the starting point for
+traversal.
+
+The top level acceleration structure takes a reference to any bottom level
+acceleration structure referenced by its instances.
+Those bottom level acceleration structure objects must: be valid when the
+top level acceleration structure is accessed.
+
+
+[[acceleration-structure-bottom-level]]
+=== Bottom Level Acceleration Structures
+
+Opaque acceleration structure for an array of geometries.
+
+
+[[acceleration-structure-update]]
+=== Acceleration Structure Update Rules
+
+The API defines two types of operations to produce acceleration structures
+from geometry:
+
+  * A _build_ operation is used to construct an acceleration structure.
+  * An _update_ operation is used to modify an existing acceleration
+    structure.
+
+An update operation imposes certain constraints on the input, in exchange
+for considerably faster execution.
+When performing an update, the application is required to provide a full
+description of the acceleration structure, but is prohibited from changing
+anything other than instance definitions, transform matrices, and vertex or
+AABB positions.
+All other aspects of the description must: exactly match the one from the
+original build.
+
+More precisely, the application must: not use an update operation to do any
+of the following:
+
+  * Change primitives or instances from _active_ to _inactive_, or vice
+    versa (as defined in <<acceleration-structure-inactive-prims>>).
+  * Change the index or vertex formats of triangle geometry.
+  * Change triangle geometry transform pointers from null to non-null or
+    vice versa.
+  * Change the number of geometries or instances in the structure.
+  * Change the geometry flags for any geometry in the structure.
+  * Change the number of vertices or primitives for any geometry in the
+    structure.
+
+ifdef::VK_EXT_opacity_micromap[]
+
+If the original acceleration structure was built using opacity micromaps and
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT
+was set in pname:flags, the application must: provide the corresponding
+micromap information to the update operation.
+The application is prohibited from changing anything other than the specific
+opacity values assigned to the triangles.
+
+More precisely, the application must: not use an update operation to do any
+of the following:
+
+  * Remove micromaps or elink:VkOpacityMicromapSpecialIndexEXT values from a
+    geometry which previously had them, or vice versa.
+  * Change between use of elink:VkOpacityMicromapSpecialIndexEXT values and
+    explicit micro-map triangles.
+  * Change the subdivision level or format of the micromap triangle
+    associated with any acceleration-structure triangle.
+
+If the original acceleration structure was built using opacity micromaps and
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT was
+set in pname:flags, the application must: provide a micromap to the update
+operation.
+
+If the original acceleration structure was built using opacity micromaps and
+neither opacity micromap update flag is set the application must: provide
+the original micromap to the update operation.
+
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_NV_displacement_micromap[]
+If the original acceleration structure was built using displacement
+micromaps and
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV
+was set in pname:flags, the application must: provide a displacement
+micromap to the update operation.
+
+If the original acceleration structure was built using displacement
+micromaps and the displacement micromap update flag is not set the
+application must: provide the original micromap to the update operation.
+endif::VK_NV_displacement_micromap[]
+
+[[acceleration-structure-inactive-prims]]
+=== Inactive Primitives and Instances
+
+Acceleration structures allow the use of particular input values to signal
+_inactive_ primitives or instances.
+
+An _inactive_ triangle is one for which the first (X) component of any
+vertex is NaN.
+If any other vertex component is NaN, and the first is not, the behavior is
+undefined:.
+If the vertex format does not have a NaN representation, then all triangles
+are considered active.
+
+An _inactive_ instance is one whose acceleration structure reference is `0`.
+
+An _inactive_ AABB is one for which the minimum X coordinate is NaN.
+If any other component is NaN, and the first is not, the behavior is
+undefined:.
+
+In the above definitions, "`NaN`" refers to any type of NaN.
+Signaling, non-signaling, quiet, loud, or otherwise.
+
+An inactive object is considered invisible to all rays, and should: not be
+represented in the acceleration structure.
+Implementations should: ensure that the presence of inactive objects does
+not seriously degrade traversal performance.
+
+Inactive objects are counted in the auto-generated index sequences which are
+provided to shaders via code:InstanceId and code:PrimitiveId SPIR-V
+decorations.
+This allows objects in the scene to change freely between the active and
+inactive states, without affecting the layout of any arrays which are being
+indexed using the ID values.
+
+Any transition between the active and inactive states requires a full
+acceleration structure rebuild.
+Applications must: not perform an acceleration structure update where an
+object is active in the source acceleration structure but would be inactive
+in the destination, or vice versa.
+
+
+[[acceleration-structure-building]]
+=== Building Acceleration Structures
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='vkCmdBuildAccelerationStructureNV',desc='Build an acceleration structure',type='protos']
+--
+:refpage: vkCmdBuildAccelerationStructureNV
+
+To build an acceleration structure call:
+
+include::{generated}/api/protos/vkCmdBuildAccelerationStructureNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo contains the shared information for the acceleration
+    structure's structure.
+  * pname:instanceData is the buffer containing an array of
+    slink:VkAccelerationStructureInstanceKHR structures defining
+    acceleration structures.
+    This parameter must: be `NULL` for bottom level acceleration structures.
+  * pname:instanceOffset is the offset in bytes (relative to the start of
+    pname:instanceData) at which the instance data is located.
+  * pname:update specifies whether to update the pname:dst acceleration
+    structure with the data in pname:src.
+  * pname:dst is a pointer to the target acceleration structure for the
+    build.
+  * pname:src is a pointer to an existing acceleration structure that is to
+    be used to update the pname:dst acceleration structure.
+  * pname:scratch is the slink:VkBuffer that will be used as scratch memory
+    for the build.
+  * pname:scratchOffset is the offset in bytes relative to the start of
+    pname:scratch that will be used as a scratch memory.
+
+Accesses to pname:dst, pname:src, and pname:scratch must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBuildAccelerationStructureNV-geometryCount-02241]]
+    pname:geometryCount must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxGeometryCount
+  * [[VUID-vkCmdBuildAccelerationStructureNV-dst-02488]]
+    pname:dst must: have been created with compatible
+    slink:VkAccelerationStructureInfoNV where
+    slink:VkAccelerationStructureInfoNV::pname:type and
+    slink:VkAccelerationStructureInfoNV::pname:flags are identical,
+    slink:VkAccelerationStructureInfoNV::pname:instanceCount and
+    slink:VkAccelerationStructureInfoNV::pname:geometryCount for pname:dst
+    are greater than or equal to the build size and each geometry in
+    slink:VkAccelerationStructureInfoNV::pname:pGeometries for pname:dst has
+    greater than or equal to the number of vertices, indices, and AABBs
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02489]]
+    If pname:update is ename:VK_TRUE, pname:src must: not be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02490]]
+    If pname:update is ename:VK_TRUE, pname:src must: have previously been
+    constructed with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV set in
+    slink:VkAccelerationStructureInfoNV::pname:flags in the original build
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02491]]
+    If pname:update is ename:VK_FALSE, the pname:size member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetAccelerationStructureMemoryRequirementsNV with
+    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:accelerationStructure
+    set to pname:dst and
+    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:type set to
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
+    must: be less than or equal to the size of pname:scratch minus
+    pname:scratchOffset
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-02492]]
+    If pname:update is ename:VK_TRUE, the pname:size member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetAccelerationStructureMemoryRequirementsNV with
+    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:accelerationStructure
+    set to pname:dst and
+    slink:VkAccelerationStructureMemoryRequirementsInfoNV::pname:type set to
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
+    must: be less than or equal to the size of pname:scratch minus
+    pname:scratchOffset
+  * [[VUID-vkCmdBuildAccelerationStructureNV-scratch-03522]]
+    pname:scratch must: have been created with
+    ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag
+  * [[VUID-vkCmdBuildAccelerationStructureNV-instanceData-03523]]
+    If pname:instanceData is not dlink:VK_NULL_HANDLE, pname:instanceData
+    must: have been created with ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV
+    usage flag
+  * [[VUID-vkCmdBuildAccelerationStructureNV-accelerationStructureReference-03786]]
+    Each
+    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
+    value in pname:instanceData must: be a valid device address containing a
+    value obtained from flink:vkGetAccelerationStructureHandleNV
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03524]]
+    If pname:update is ename:VK_TRUE, then objects that were previously
+    active must: not be made inactive as per
+    <<acceleration-structure-inactive-prims>>
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03525]]
+    If pname:update is ename:VK_TRUE, then objects that were previously
+    inactive must: not be made active as per
+    <<acceleration-structure-inactive-prims>>
+  * [[VUID-vkCmdBuildAccelerationStructureNV-update-03526]]
+    If pname:update is ename:VK_TRUE, the pname:src and pname:dst objects
+    must: either be the same object or not have any
+    <<resources-memory-aliasing, memory aliasing>>
+  * [[VUID-vkCmdBuildAccelerationStructureNV-dst-07787]]
+    pname:dst must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object via
+    flink:vkBindAccelerationStructureMemoryNV
+
+****
+
+include::{generated}/validity/protos/vkCmdBuildAccelerationStructureNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='vkCmdBuildAccelerationStructuresKHR',desc='Build an acceleration structure',type='protos']
+--
+:refpage: vkCmdBuildAccelerationStructuresKHR
+
+To build acceleration structures call:
+
+include::{generated}/api/protos/vkCmdBuildAccelerationStructuresKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:infoCount is the number of acceleration structures to build.
+    It specifies the number of the pname:pInfos structures and
+    pname:ppBuildRangeInfos pointers that must: be provided.
+  * pname:pInfos is a pointer to an array of pname:infoCount
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
+    the geometry used to build each acceleration structure.
+  * pname:ppBuildRangeInfos is a pointer to an array of pname:infoCount
+    pointers to arrays of slink:VkAccelerationStructureBuildRangeInfoKHR
+    structures.
+    Each pname:ppBuildRangeInfos[i] is a pointer to an array of
+    pname:pInfos[i].pname:geometryCount
+    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
+    dynamic offsets to the addresses where geometry data is stored, as
+    defined by pname:pInfos[i].
+
+The fname:vkCmdBuildAccelerationStructuresKHR command provides the ability
+to initiate multiple acceleration structures builds, however there is no
+ordering or synchronization implied between any of the individual
+acceleration structure builds.
+
+[NOTE]
+.Note
+====
+This means that an application cannot: build a top-level acceleration
+structure in the same flink:vkCmdBuildAccelerationStructuresKHR call as the
+associated bottom-level or instance acceleration structures are being built.
+There also cannot: be any memory aliasing between any acceleration structure
+memories or scratch memories being used by any of the builds.
+====
+
+[[acceleration-structure-scratch]]
+Accesses to the acceleration structure scratch buffers as identified by the
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:scratchData buffer
+device addresses must: be <<synchronization-dependencies,synchronized>> with
+the ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+(ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR |
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR).
+Accesses to each
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:srcAccelerationStructure
+and
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:dstAccelerationStructure
+must: be <<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, as appropriate.
+
+Accesses to other input buffers as identified by any used values of
+ifdef::VK_NV_ray_tracing_motion_blur[]
+slink:VkAccelerationStructureGeometryMotionTrianglesDataNV::pname:vertexData,
+endif::VK_NV_ray_tracing_motion_blur[]
+slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData,
+slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData,
+slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData,
+slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data, and
+slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_SHADER_READ_BIT.
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBuildAccelerationStructuresKHR-accelerationStructure-08923]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+
+:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
+include::{chapters}/commonvalidity/build_acceleration_structure_common.adoc[]
+include::{chapters}/commonvalidity/build_acceleration_structure_device_common.adoc[]
+include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBuildAccelerationStructuresKHR.adoc[]
+--
+
+[open,refpage='vkCmdBuildAccelerationStructuresIndirectKHR',desc='Build an acceleration structure with some parameters provided on the device',type='protos']
+--
+:refpage: vkCmdBuildAccelerationStructuresIndirectKHR
+
+To build acceleration structures with some parameters sourced on the device
+call:
+
+include::{generated}/api/protos/vkCmdBuildAccelerationStructuresIndirectKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:infoCount is the number of acceleration structures to build.
+  * pname:pInfos is a pointer to an array of pname:infoCount
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
+    the geometry used to build each acceleration structure.
+  * pname:pIndirectDeviceAddresses is a pointer to an array of
+    pname:infoCount buffer device addresses which point to
+    pname:pInfos[i].pname:geometryCount
+    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
+    dynamic offsets to the addresses where geometry data is stored, as
+    defined by pname:pInfos[i].
+  * pname:pIndirectStrides is a pointer to an array of pname:infoCount byte
+    strides between elements of pname:pIndirectDeviceAddresses.
+  * pname:ppMaxPrimitiveCounts is a pointer to an array of pname:infoCount
+    pointers to arrays of pname:pInfos[i].pname:geometryCount values
+    indicating the maximum number of primitives that will be built by this
+    command for each geometry.
+
+Accesses to acceleration structures, scratch buffers, vertex buffers, index
+buffers, and instance buffers must be synchronized as with
+<<acceleration-structure-scratch,vkCmdBuildAccelerationStructuresKHR>>.
+
+Accesses to any element of pname:pIndirectDeviceAddresses must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT.
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-accelerationStructureIndirectBuild-03650]]
+    The <<features-accelerationStructureIndirectBuild,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureIndirectBuild>>
+    feature must: be enabled
+
+:maxinstancecheck: pname:ppMaxPrimitiveCounts[i][j]
+include::{chapters}/commonvalidity/build_acceleration_structure_common.adoc[]
+include::{chapters}/commonvalidity/build_acceleration_structure_device_common.adoc[]
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03645]]
+    For any element of pname:pIndirectDeviceAddresses, if the buffer from
+    which it was queried is non-sparse then it must: be bound completely and
+    contiguously to a single slink:VkDeviceMemory object
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03646]]
+    For any element of pname:pIndirectDeviceAddresses[i], all device
+    addresses between pname:pIndirectDeviceAddresses[i] and
+    [eq]#pname:pIndirectDeviceAddresses[i] {plus}
+    (pname:pInfos[i].pname:geometryCount {times} pname:pIndirectStrides[i]) -
+    1# must: be in the buffer device address range of the same buffer
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03647]]
+    For any element of pname:pIndirectDeviceAddresses, the buffer from which
+    it was queried must: have been created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03648]]
+    Each element of pname:pIndirectDeviceAddresses must: be a multiple of
+    `4`
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-03787]]
+    Each element of pname:pIndirectStrides must: be a multiple of `4`
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-03649]]
+    pname:commandBuffer must: not be a protected command buffer
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03651]]
+    Each slink:VkAccelerationStructureBuildRangeInfoKHR structure referenced
+    by any element of pname:pIndirectDeviceAddresses must: be a valid
+    slink:VkAccelerationStructureBuildRangeInfoKHR structure
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03652]]
+    pname:pInfos[i].pname:dstAccelerationStructure must: have been created
+    with a value of slink:VkAccelerationStructureCreateInfoKHR::pname:size
+    greater than or equal to the memory size required by the build
+    operation, as returned by flink:vkGetAccelerationStructureBuildSizesKHR
+    with [eq]#pname:pBuildInfo = pname:pInfos[i]# and
+    [eq]#pname:pMaxPrimitiveCounts = pname:ppMaxPrimitiveCounts[i]#
+  * [[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-03653]]
+    Each pname:ppMaxPrimitiveCounts[i][j] must: be greater than or equal to
+    the pname:primitiveCount value specified by the
+    slink:VkAccelerationStructureBuildRangeInfoKHR structure located at
+    [eq]#pname:pIndirectDeviceAddresses[i] {plus} (code:j {times}
+    pname:pIndirectStrides[i])#
+****
+
+include::{generated}/validity/protos/vkCmdBuildAccelerationStructuresIndirectKHR.adoc[]
+--
+
+
+[open,refpage='VkAccelerationStructureBuildGeometryInfoKHR',desc='Structure specifying the geometry data used to build an acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureBuildGeometryInfoKHR
+
+The sname:VkAccelerationStructureBuildGeometryInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkAccelerationStructureBuildGeometryInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is a elink:VkAccelerationStructureTypeKHR value specifying
+    the type of acceleration structure being built.
+  * pname:flags is a bitmask of
+    elink:VkBuildAccelerationStructureFlagBitsKHR specifying additional
+    parameters of the acceleration structure.
+  * pname:mode is a elink:VkBuildAccelerationStructureModeKHR value
+    specifying the type of operation to perform.
+  * pname:srcAccelerationStructure is a pointer to an existing acceleration
+    structure that is to be used to update the pname:dst acceleration
+    structure when pname:mode is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR.
+  * pname:dstAccelerationStructure is a pointer to the target acceleration
+    structure for the build.
+  * pname:geometryCount specifies the number of geometries that will be
+    built into pname:dstAccelerationStructure.
+  * pname:pGeometries is a pointer to an array of
+    slink:VkAccelerationStructureGeometryKHR structures.
+  * pname:ppGeometries is a pointer to an array of pointers to
+    slink:VkAccelerationStructureGeometryKHR structures.
+  * pname:scratchData is the device or host address to memory that will be
+    used as scratch memory for the build.
+
+Only one of pname:pGeometries or pname:ppGeometries can: be a valid pointer,
+the other must: be `NULL`.
+Each element of the non-`NULL` array describes the data used to build each
+acceleration structure geometry.
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+[[acceleration-structure-geometry-index]]
+The index of each element of the pname:pGeometries or pname:ppGeometries
+members of slink:VkAccelerationStructureBuildGeometryInfoKHR is used as the
+_geometry index_ during ray traversal.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+The geometry index is available in ray shaders via the
+<<interfaces-builtin-variables-raygeometryindex,code:RayGeometryIndexKHR
+built-in>>, and is <<shader-binding-table-hit-shader-indexing, used to
+determine hit and intersection shaders executed during traversal>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_query[]
+The geometry index is available to ray queries via the
+code:OpRayQueryGetIntersectionGeometryIndexKHR instruction.
+endif::VK_KHR_ray_query[]
+endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[[acceleration-structure-motion-instances]]
+Setting ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
+indicates that this build is a motion top level acceleration structure.
+A motion top level uses instances of format
+slink:VkAccelerationStructureMotionInstanceNV if
+slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:arrayOfPointers
+is ename:VK_FALSE.
+
+If
+slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:arrayOfPointers
+is ename:VK_TRUE, the pointer for each element of the array of instance
+pointers consists of 4 bits of
+ename:VkAccelerationStructureMotionInstanceTypeNV in the low 4 bits of the
+pointer identifying the type of structure at the pointer.
+The device address accessed is the value in the array with the low 4 bits
+set to zero.
+The structure at the pointer is one of
+slink:VkAccelerationStructureInstanceKHR,
+slink:VkAccelerationStructureMatrixMotionInstanceNV or
+slink:VkAccelerationStructureSRTMotionInstanceNV, depending on the type
+value encoded in the low 4 bits.
+
+A top level acceleration structure with either motion instances or vertex
+motion in its instances must: set
+ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags.
+endif::VK_NV_ray_tracing_motion_blur[]
+
+Members pname:srcAccelerationStructure and pname:dstAccelerationStructure
+may: be the same or different for an update operation (when pname:mode is
+ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR).
+If they are the same, the update happens in-place.
+Otherwise, the target acceleration structure is updated and the source is
+not modified.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654]]
+    pname:type must: not be ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-03788]]
+    Only one of pname:pGeometries or pname:ppGeometries can: be a valid
+    pointer, the other must: be `NULL`
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03789]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, the
+    pname:geometryType member of elements of either pname:pGeometries or
+    pname:ppGeometries must: be ename:VK_GEOMETRY_TYPE_INSTANCES_KHR
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03790]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
+    pname:geometryCount must: be `1`
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03791]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+    the pname:geometryType member of elements of either pname:pGeometries or
+    pname:ppGeometries must: not be ename:VK_GEOMETRY_TYPE_INSTANCES_KHR
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03792]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+    then the pname:geometryType member of each geometry in either
+    pname:pGeometries or pname:ppGeometries must: be the same
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03793]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+    then pname:geometryCount must: be less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxGeometryCount
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03794]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+    and the pname:geometryType member of either pname:pGeometries or
+    pname:ppGeometries is ename:VK_GEOMETRY_TYPE_AABBS_KHR, the total number
+    of AABBs in all geometries must: be less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPrimitiveCount
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03795]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
+    and the pname:geometryType member of either pname:pGeometries or
+    pname:ppGeometries is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the total
+    number of triangles in all geometries must: be less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPrimitiveCount
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796]]
+    If pname:flags has the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR bit set,
+    then it must: not have the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR bit set
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927]]
+    If pname:dstAccelerationStructure was created with
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in
+    slink:VkAccelerationStructureCreateInfoKHR::pname:flags,
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV must: be set in
+    pname:flags
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928]]
+    If ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in
+    pname:flags, pname:dstAccelerationStructure must: have been created with
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in
+    slink:VkAccelerationStructureCreateInfoKHR::pname:flags
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929]]
+    If ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in
+    pname:flags, pname:type must: not be
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-07334]]
+    If pname:flags has the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT
+    bit set then it must: not have the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT
+    bit set
+endif::VK_EXT_opacity_micromap[]
+****
+include::{generated}/validity/structs/VkAccelerationStructureBuildGeometryInfoKHR.adoc[]
+--
+
+[open,refpage='VkBuildAccelerationStructureModeKHR',desc='Enum specifying the type of build operation to perform',type='enums']
+--
+:refpage: VkBuildAccelerationStructureModeKHR
+
+The ename:VkBuildAccelerationStructureModeKHR enumeration is defined as:
+
+include::{generated}/api/enums/VkBuildAccelerationStructureModeKHR.adoc[]
+
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR specifies that the
+    destination acceleration structure will be built using the specified
+    geometries.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR specifies that the
+    destination acceleration structure will be built using data in a source
+    acceleration structure, updated by the specified geometries.
+--
+
+[open,refpage='VkDeviceOrHostAddressKHR',desc='Union specifying a device or host address',type='structs']
+--
+:refpage: VkDeviceOrHostAddressKHR
+
+The sname:VkDeviceOrHostAddressKHR union is defined as:
+
+include::{generated}/api/structs/VkDeviceOrHostAddressKHR.adoc[]
+
+  * pname:deviceAddress is a buffer device address as returned by the
+    flink:vkGetBufferDeviceAddressKHR command.
+  * pname:hostAddress is a host memory address.
+
+include::{generated}/validity/structs/VkDeviceOrHostAddressKHR.adoc[]
+--
+
+[open,refpage='VkDeviceOrHostAddressConstKHR',desc='Union specifying a const device or host address',type='structs']
+--
+:refpage: VkDeviceOrHostAddressConstKHR
+
+The sname:VkDeviceOrHostAddressConstKHR union is defined as:
+
+include::{generated}/api/structs/VkDeviceOrHostAddressConstKHR.adoc[]
+
+  * pname:deviceAddress is a buffer device address as returned by the
+    flink:vkGetBufferDeviceAddressKHR command.
+  * pname:hostAddress is a const host memory address.
+
+include::{generated}/validity/structs/VkDeviceOrHostAddressConstKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureGeometryKHR',desc='Structure specifying geometries to be built into an acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryKHR
+
+The sname:VkAccelerationStructureGeometryKHR structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:geometryType describes which type of geometry this
+    sname:VkAccelerationStructureGeometryKHR refers to.
+  * pname:geometry is a slink:VkAccelerationStructureGeometryDataKHR union
+    describing the geometry data for the relevant geometry type.
+  * pname:flags is a bitmask of elink:VkGeometryFlagBitsKHR values
+    describing additional properties of how the geometry should be built.
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureGeometryDataKHR',desc='Union specifying acceleration structure geometry data',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryDataKHR
+
+The sname:VkAccelerationStructureGeometryDataKHR union is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryDataKHR.adoc[]
+
+  * pname:triangles is a
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR structure.
+  * pname:aabbs is a slink:VkAccelerationStructureGeometryAabbsDataKHR
+    structure.
+  * pname:instances is a
+    slink:VkAccelerationStructureGeometryInstancesDataKHR structure.
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryDataKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureGeometryTrianglesDataKHR',desc='Structure specifying a triangle geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryTrianglesDataKHR
+
+The sname:VkAccelerationStructureGeometryTrianglesDataKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryTrianglesDataKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vertexFormat is the elink:VkFormat of each vertex element.
+  * pname:vertexData is a device or host address to memory containing vertex
+    data for this geometry.
+  * pname:maxVertex is the highest index of a vertex that will be addressed
+    by a build command using this structure.
+  * pname:vertexStride is the stride in bytes between each vertex.
+  * pname:indexType is the elink:VkIndexType of each index element.
+  * pname:indexData is a device or host address to memory containing index
+    data for this geometry.
+  * pname:transformData is a device or host address to memory containing an
+    optional reference to a slink:VkTransformMatrixKHR structure describing
+    a transformation from the space in which the vertices in this geometry
+    are described to the space in which the acceleration structure is
+    defined.
+
+[NOTE]
+.Note
+====
+Unlike the stride for vertex buffers in
+slink:VkVertexInputBindingDescription for graphics pipelines which must not
+exceed pname:maxVertexInputBindingStride, pname:vertexStride for
+acceleration structure geometry is instead restricted to being a 32-bit
+value.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735]]
+    pname:vertexStride must: be a multiple of the size in bytes of the
+    smallest component of pname:vertexFormat
+  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819]]
+    pname:vertexStride must: be less than or equal to [eq]#2^32^-1#
+  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797]]
+    The <<resources-buffer-view-format-features,format features>> of
+    pname:vertexFormat must: contain
+    ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+  * [[VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798]]
+    pname:indexType must: be ename:VK_INDEX_TYPE_UINT16,
+    ename:VK_INDEX_TYPE_UINT32, or ename:VK_INDEX_TYPE_NONE_KHR
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryTrianglesDataKHR.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[open,refpage='VkAccelerationStructureGeometryMotionTrianglesDataNV',desc='Structure specifying vertex motion in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryMotionTrianglesDataNV
+
+The sname:VkAccelerationStructureGeometryMotionTrianglesDataNV structure is
+defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryMotionTrianglesDataNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vertexData is a pointer to vertex data for this geometry at time
+    1.0
+
+If sname:VkAccelerationStructureGeometryMotionTrianglesDataNV is included in
+the pname:pNext chain of a
+slink:VkAccelerationStructureGeometryTrianglesDataKHR structure, the basic
+vertex positions are used for the position of the triangles in the geometry
+at time 0.0 and the pname:vertexData in
+sname:VkAccelerationStructureGeometryMotionTrianglesDataNV is used for the
+vertex positions at time 1.0, with positions linearly interpolated at
+intermediate times.
+
+Indexing for sname:VkAccelerationStructureGeometryMotionTrianglesDataNV
+pname:vertexData is equivalent to the basic vertex position data.
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryMotionTrianglesDataNV.adoc[]
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+ifdef::VK_EXT_opacity_micromap[]
+[open,refpage='VkAccelerationStructureTrianglesOpacityMicromapEXT',desc='Structure specifying an opacity micromap in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureTrianglesOpacityMicromapEXT
+
+The sname:VkAccelerationStructureTrianglesOpacityMicromapEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureTrianglesOpacityMicromapEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:indexType is the type of triangle indices used when indexing this
+    micromap
+  * pname:indexBuffer is the address containing the triangle indices
+  * pname:indexStride is the byte stride between triangle indices
+  * pname:baseTriangle is the base value added to the non-negative triangle
+    indices
+  * pname:usageCountsCount specifies the number of usage counts structures
+    that will be used to determine the size of this micromap.
+  * pname:pUsageCounts is a pointer to an array of slink:VkMicromapUsageEXT
+    structures.
+  * pname:ppUsageCounts is a pointer to an array of pointers to
+    slink:VkMicromapUsageEXT structures.
+  * pname:micromap is the handle to the micromap object to include in this
+    geometry
+
+If sname:VkAccelerationStructureTrianglesOpacityMicromapEXT is included in
+the pname:pNext chain of a
+slink:VkAccelerationStructureGeometryTrianglesDataKHR structure, that
+geometry will reference that micromap.
+
+For each triangle in the geometry, the acceleration structure build fetches
+an index from pname:indexBuffer using pname:indexType and pname:indexStride.
+If that value is the unsigned cast of one of the values from
+elink:VkOpacityMicromapSpecialIndexEXT then that triangle behaves as
+described for that special value in <<ray-opacity-micromap,Ray Opacity
+Micromap>>.
+Otherwise that triangle uses the opacity micromap information from
+pname:micromap at that index plus pname:baseTriangle.
+
+Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+pointer, the other must: be `NULL`.
+The elements of the non-`NULL` array describe the total count used to build
+this geometry.
+For a given pname:format and pname:subdivisionLevel the number of triangles
+in this geometry matching those values after indirection and special index
+handling must: be equal to the sum of matching pname:count provided.
+
+If pname:micromap is dlink:VK_NULL_HANDLE, then every value read from
+pname:indexBuffer must: be one of the values in
+ename:VkOpacityMicromapSpecialIndexEXT.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-pUsageCounts-07335]]
+    Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+    pointer, the other must: be `NULL`
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureTrianglesOpacityMicromapEXT.adoc[]
+--
+
+[open,refpage='VkOpacityMicromapSpecialIndexEXT',desc='Enum for special indices in the opacity micromap',type='enums']
+--
+:refpage: VkOpacityMicromapSpecialIndexEXT
+
+The ename:VkOpacityMicromapSpecialIndexEXT enumeration is defined as:
+
+include::{generated}/api/enums/VkOpacityMicromapSpecialIndexEXT.adoc[]
+
+  * ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT specifies
+    that the entire triangle is fully transparent.
+  * ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT specifies that
+    the entire triangle is fully opaque.
+  * ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT
+    specifies that the entire triangle is unknown-transparent.
+  * ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT
+    specifies that the entire triangle is unknown-opaque.
+--
+
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_NV_displacement_micromap[]
+[open,refpage='VkAccelerationStructureTrianglesDisplacementMicromapNV',desc='Structure specifying a displacement micromap in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureTrianglesDisplacementMicromapNV
+
+The sname:VkAccelerationStructureTrianglesDisplacementMicromapNV structure
+is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureTrianglesDisplacementMicromapNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displacementBiasAndScaleFormat is the format of displacement bias
+    and scale used in this displacement micromap reference.
+  * pname:displacementVectorFormat is the format of displacement vector used
+    in this displacement micromap reference.
+  * pname:displacementBiasAndScaleBuffer is the address containing the bias
+    and scale.
+  * pname:displacementBiasAndScaleStride is the byte stride between bias and
+    scale values.
+  * pname:displacementVectorBuffer is the address containing the
+    displacement vector values.
+  * pname:displacementVectorStride is the byte stride between displacement
+    vector values.
+  * pname:displacedMicromapPrimitiveFlags is the address containing the
+    primitive flags.
+  * pname:displacedMicromapPrimitiveFlagsStride is the byte stride between
+    primitive flag values.
+  * pname:indexType is the type of triangle indices used when indexing this
+    micromap.
+  * pname:indexBuffer is the address containing the triangle indices.
+  * pname:indexStride is the byte stride between triangle indices.
+  * pname:baseTriangle is the base value added to the non-negative triangle
+    indices.
+  * pname:usageCountsCount specifies the number of usage counts structures
+    that will be used to determine the size of this micromap.
+  * pname:pUsageCounts is a pointer to an array of slink:VkMicromapUsageEXT
+    structures.
+  * pname:ppUsageCounts is a pointer to an array of pointers to
+    slink:VkMicromapUsageEXT structures.
+  * pname:micromap is the handle to the micromap object to include in this
+    geometry.
+
+If sname:VkAccelerationStructureTrianglesDisplacementMicromapNV is included
+in the pname:pNext chain of a
+slink:VkAccelerationStructureGeometryTrianglesDataKHR structure, that
+geometry will reference that micromap.
+
+For each triangle in the geometry, the acceleration structure build fetches
+an index from pname:indexBuffer using pname:indexType and pname:indexStride.
+That triangle uses the displacement micromap information from pname:micromap
+at that index plus pname:baseTriangle.
+
+Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+pointer, the other must: be `NULL`.
+The elements of the non-`NULL` array describe the total count used to build
+this geometry.
+For a given pname:format and pname:subdivisionLevel the number of triangles
+in this geometry matching those values after indirection must: be equal to
+the sum of matching pname:count provided.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-pUsageCounts-07992]]
+    Only one of pname:pUsageCounts or pname:ppUsageCounts can: be a valid
+    pointer, the other must: be `NULL`
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureTrianglesDisplacementMicromapNV.adoc[]
+--
+endif::VK_NV_displacement_micromap[]
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkTransformMatrixKHR',desc='Structure specifying a 3x4 affine transformation matrix',type='structs',alias='VkTransformMatrixNV']
+--
+:refpage: VkTransformMatrixKHR
+
+The sname:VkTransformMatrixKHR structure is defined as:
+
+include::{generated}/api/structs/VkTransformMatrixKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkTransformMatrixNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * pname:matrix is a 3x4 row-major affine transformation matrix.
+
+include::{generated}/validity/structs/VkTransformMatrixKHR.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-VkTransformMatrixKHR-matrix-03799]]
+    The first three columns of pname:matrix must: define an invertible 3x3
+    matrix
+****
+--
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkAccelerationStructureGeometryAabbsDataKHR',desc='Structure specifying axis-aligned bounding box geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryAabbsDataKHR
+
+The sname:VkAccelerationStructureGeometryAabbsDataKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryAabbsDataKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:data is a device or host address to memory containing
+    slink:VkAabbPositionsKHR structures containing position data for each
+    axis-aligned bounding box in the geometry.
+  * pname:stride is the stride in bytes between each entry in pname:data.
+    The stride must: be a multiple of `8`.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545]]
+    pname:stride must: be a multiple of `8`
+  * [[VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03820]]
+    pname:stride must: be less than or equal to [eq]#2^32^-1#
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryAabbsDataKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkAabbPositionsKHR',desc='Structure specifying two opposing corners of an axis-aligned bounding box',type='structs',alias='VkAabbPositionsNV']
+--
+:refpage: VkAabbPositionsKHR
+
+The sname:VkAabbPositionsKHR structure is defined as:
+
+include::{generated}/api/structs/VkAabbPositionsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkAabbPositionsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+
+  * pname:minX is the x position of one opposing corner of a bounding box.
+  * pname:minY is the y position of one opposing corner of a bounding box.
+  * pname:minZ is the z position of one opposing corner of a bounding box.
+  * pname:maxX is the x position of the other opposing corner of a bounding
+    box.
+  * pname:maxY is the y position of the other opposing corner of a bounding
+    box.
+  * pname:maxZ is the z position of the other opposing corner of a bounding
+    box.
+
+.Valid Usage
+****
+  * [[VUID-VkAabbPositionsKHR-minX-03546]]
+    pname:minX must: be less than or equal to pname:maxX
+  * [[VUID-VkAabbPositionsKHR-minY-03547]]
+    pname:minY must: be less than or equal to pname:maxY
+  * [[VUID-VkAabbPositionsKHR-minZ-03548]]
+    pname:minZ must: be less than or equal to pname:maxZ
+****
+
+include::{generated}/validity/structs/VkAabbPositionsKHR.adoc[]
+--
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkAccelerationStructureGeometryInstancesDataKHR',desc='Structure specifying a geometry consisting of instances of other acceleration structures',type='structs']
+--
+:refpage: VkAccelerationStructureGeometryInstancesDataKHR
+
+The sname:VkAccelerationStructureGeometryInstancesDataKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureGeometryInstancesDataKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:arrayOfPointers specifies whether pname:data is used as an array
+    of addresses or just an array.
+  * pname:data is either the address of an array of device or host addresses
+    referencing individual slink:VkAccelerationStructureInstanceKHR
+    structures
+ifdef::VK_NV_ray_tracing_motion_blur[]
+    or packed motion instance information as described in
+    <<acceleration-structure-motion-instances, motion instances>>
+endif::VK_NV_ray_tracing_motion_blur[]
+    if pname:arrayOfPointers is ename:VK_TRUE, or the address of an array of
+    slink:VkAccelerationStructureInstanceKHR
+ifdef::VK_NV_ray_tracing_motion_blur[]
+    or slink:VkAccelerationStructureMotionInstanceNV
+endif::VK_NV_ray_tracing_motion_blur[]
+    structures.
+    Addresses and slink:VkAccelerationStructureInstanceKHR structures are
+    tightly packed.
+ifdef::VK_NV_ray_tracing_motion_blur[]
+    slink:VkAccelerationStructureMotionInstanceNV structures have a stride
+    of 160 bytes.
+endif::VK_NV_ray_tracing_motion_blur[]
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryInstancesDataKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkAccelerationStructureInstanceKHR',desc='Structure specifying a single acceleration structure instance for building into an acceleration structure geometry',type='structs',alias='VkAccelerationStructureInstanceNV']
+--
+:refpage: VkAccelerationStructureInstanceKHR
+
+_Acceleration structure instances_ can: be built into top-level acceleration
+structures.
+Each acceleration structure instance is a separate entry in the top-level
+acceleration structure which includes all the geometry of a bottom-level
+acceleration structure at a transformed location.
+Multiple instances can: point to the same bottom level acceleration
+structure.
+
+An acceleration structure instance is defined by the structure:
+
+include::{generated}/api/structs/VkAccelerationStructureInstanceKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkAccelerationStructureInstanceNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * pname:transform is a slink:VkTransformMatrixKHR structure describing a
+    transformation to be applied to the acceleration structure.
+  * pname:instanceCustomIndex is a 24-bit user-specified index value
+    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
+  * pname:mask is an 8-bit visibility mask for the geometry.
+    The instance may: only be hit if `Cull Mask & instance.mask != 0`
+  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
+    calculating the hit shader binding table index.
+  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
+    values to apply to this instance.
+  * pname:accelerationStructureReference is either:
+  ** a device address containing the value obtained from
+ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
+     (used by device operations which reference acceleration structures) or,
+  ** a slink:VkAccelerationStructureKHR object (used by host operations
+     which reference acceleration structures).
+
+The C language specification does not define the ordering of bit-fields, but
+in practice, this struct produces the correct layout with existing
+compilers.
+The intended bit pattern is for the following:
+
+  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
+    single code:uint32_t was specified in their place
+  ** pname:instanceCustomIndex occupies the 24 least significant bits of
+     that memory
+  ** pname:mask occupies the 8 most significant bits of that memory
+  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
+    same memory as if a single code:uint32_t was specified in their place
+  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
+     significant bits of that memory
+  ** pname:flags occupies the 8 most significant bits of that memory
+
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values according to the correct bit
+pattern.
+
+include::{generated}/validity/structs/VkAccelerationStructureInstanceKHR.adoc[]
+--
+
+[open,refpage='VkGeometryInstanceFlagBitsKHR',desc='Instance flag bits',type='enums',alias='VkGeometryInstanceFlagBitsNV']
+--
+:refpage: VkGeometryInstanceFlagBitsKHR
+
+Possible values of pname:flags in the instance modifying the behavior of
+that instance are:
+
+include::{generated}/api/enums/VkGeometryInstanceFlagBitsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryInstanceFlagBitsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR disables
+    face culling for this instance.
+  * ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR indicates that
+    the <<ray-traversal-culling-face, facing determination>> for geometry in
+    this instance is inverted.
+    Because the facing is determined in object space, an instance transform
+    does not change the winding, but a geometry transform does.
+  * ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR causes this instance to
+    act as though ename:VK_GEOMETRY_OPAQUE_BIT_KHR were specified on all
+    geometries referenced by this instance.
+    This behavior can: be overridden by the SPIR-V code:NoOpaqueKHR ray
+    flag.
+  * ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR causes this instance
+    to act as though ename:VK_GEOMETRY_OPAQUE_BIT_KHR were not specified on
+    all geometries referenced by this instance.
+    This behavior can: be overridden by the SPIR-V code:OpaqueKHR ray flag.
+
+ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR and
+ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR must: not be used in the
+same flag.
+--
+
+[open,refpage='VkGeometryInstanceFlagsKHR',desc='Bitmask of VkGeometryInstanceFlagBitsKHR',type='flags',alias='VkGeometryInstanceFlagsNV']
+--
+:refpage: VkGeometryInstanceFlagsKHR
+
+include::{generated}/api/flags/VkGeometryInstanceFlagsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkGeometryInstanceFlagsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+tname:VkGeometryInstanceFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkGeometryInstanceFlagBitsKHR.
+--
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[open,refpage='VkAccelerationStructureMotionInstanceNV',desc='Structure specifying a single acceleration structure motion instance for building into an acceleration structure geometry',type='structs']
+--
+:refpage: VkAccelerationStructureMotionInstanceNV
+
+_Acceleration structure motion instances_ can: be built into top-level
+acceleration structures.
+Each acceleration structure instance is a separate entry in the top-level
+acceleration structure which includes all the geometry of a bottom-level
+acceleration structure at a transformed location including a type of motion
+and parameters to determine the motion of the instance over time.
+
+An acceleration structure motion instance is defined by the structure:
+
+include::{generated}/api/structs/VkAccelerationStructureMotionInstanceNV.adoc[]
+
+  * pname:type is a elink:VkAccelerationStructureMotionInstanceTypeNV
+    enumerant identifying which type of motion instance this is and which
+    type of the union is valid.
+  * pname:flags is currently unused, but is required to keep natural
+    alignment of pname:data.
+  * pname:data is a slink:VkAccelerationStructureMotionInstanceDataNV
+    containing motion instance data for this instance.
+
+[NOTE]
+.Note
+====
+If writing this other than with a standard C compiler, note that the final
+structure should be 152 bytes in size.
+====
+
+include::{generated}/validity/structs/VkAccelerationStructureMotionInstanceNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureMotionInstanceDataNV',desc='Union specifying a acceleration structure motion instance data for building into an acceleration structure geometry',type='structs']
+--
+:refpage: VkAccelerationStructureMotionInstanceDataNV
+
+Acceleration structure motion instance is defined by the union:
+
+include::{generated}/api/structs/VkAccelerationStructureMotionInstanceDataNV.adoc[]
+
+  * pname:staticInstance is a slink:VkAccelerationStructureInstanceKHR
+    structure containing data for a static instance.
+  * pname:matrixMotionInstance is a
+    slink:VkAccelerationStructureMatrixMotionInstanceNV structure containing
+    data for a matrix motion instance.
+  * pname:srtMotionInstance is a
+    slink:VkAccelerationStructureSRTMotionInstanceNV structure containing
+    data for an SRT motion instance.
+
+include::{generated}/validity/structs/VkAccelerationStructureMotionInstanceDataNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureMotionInstanceFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureMotionInstanceFlagsNV.adoc[]
+
+tname:VkAccelerationStructureMotionInstanceFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkAccelerationStructureMotionInstanceTypeNV',desc='Enum specifying a type of acceleration structure motion instance data for building into an acceleration structure geometry',type='enums']
+--
+:refpage: VkAccelerationStructureMotionInstanceTypeNV
+
+The ename:VkAccelerationStructureMotionInstanceTypeNV enumeration is defined
+as:
+
+include::{generated}/api/enums/VkAccelerationStructureMotionInstanceTypeNV.adoc[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV specifies
+    that the instance is a static instance with no instance motion.
+  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV
+    specifies that the instance is a motion instance with motion specified
+    by interpolation between two matrices.
+  * ename:VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV
+    specifies that the instance is a motion instance with motion specified
+    by interpolation in the SRT decomposition.
+--
+
+[open,refpage='VkAccelerationStructureMatrixMotionInstanceNV',desc='Structure specifying a single acceleration structure matrix motion instance for building into an acceleration structure geometry',type='structs']
+--
+:refpage: VkAccelerationStructureMatrixMotionInstanceNV
+
+An acceleration structure matrix motion instance is defined by the
+structure:
+
+include::{generated}/api/structs/VkAccelerationStructureMatrixMotionInstanceNV.adoc[]
+
+  * pname:transformT0 is a slink:VkTransformMatrixKHR structure describing a
+    transformation to be applied to the acceleration structure at time 0.
+  * pname:transformT1 is a slink:VkTransformMatrixKHR structure describing a
+    transformation to be applied to the acceleration structure at time 1.
+  * pname:instanceCustomIndex is a 24-bit user-specified index value
+    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
+  * pname:mask is an 8-bit visibility mask for the geometry.
+    The instance may: only be hit if `Cull Mask & instance.mask != 0`
+  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
+    calculating the hit shader binding table index.
+  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
+    values to apply to this instance.
+  * pname:accelerationStructureReference is either:
+  ** a device address containing the value obtained from
+ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
+     (used by device operations which reference acceleration structures) or,
+  ** a slink:VkAccelerationStructureKHR object (used by host operations
+     which reference acceleration structures).
+
+The C language specification does not define the ordering of bit-fields, but
+in practice, this struct produces the correct layout with existing
+compilers.
+The intended bit pattern is for the following:
+
+  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
+    single code:uint32_t was specified in their place
+  ** pname:instanceCustomIndex occupies the 24 least significant bits of
+     that memory
+  ** pname:mask occupies the 8 most significant bits of that memory
+  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
+    same memory as if a single code:uint32_t was specified in their place
+  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
+     significant bits of that memory
+  ** pname:flags occupies the 8 most significant bits of that memory
+
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values according to the correct bit
+pattern.
+
+The transform for a matrix motion instance at a point in time is derived by
+component-wise linear interpolation of the two transforms.
+That is, for a code:time in [0,1] the resulting transform is
+
+  {empty}:: [eq]#pname:transformT0 {times} (1 - code:time) {plus}
+            pname:transformT1 {times} code:time#
+
+include::{generated}/validity/structs/VkAccelerationStructureMatrixMotionInstanceNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureSRTMotionInstanceNV',desc='Structure specifying a single acceleration structure SRT motion instance for building into an acceleration structure geometry',type='structs']
+--
+:refpage: VkAccelerationStructureSRTMotionInstanceNV
+
+An acceleration structure SRT motion instance is defined by the structure:
+
+include::{generated}/api/structs/VkAccelerationStructureSRTMotionInstanceNV.adoc[]
+
+  * pname:transformT0 is a slink:VkSRTDataNV structure describing a
+    transformation to be applied to the acceleration structure at time 0.
+  * pname:transformT1 is a slink:VkSRTDataNV structure describing a
+    transformation to be applied to the acceleration structure at time 1.
+  * pname:instanceCustomIndex is a 24-bit user-specified index value
+    accessible to ray shaders in the code:InstanceCustomIndexKHR built-in.
+  * pname:mask is an 8-bit visibility mask for the geometry.
+    The instance may: only be hit if `Cull Mask & instance.mask != 0`
+  * pname:instanceShaderBindingTableRecordOffset is a 24-bit offset used in
+    calculating the hit shader binding table index.
+  * pname:flags is an 8-bit mask of elink:VkGeometryInstanceFlagBitsKHR
+    values to apply to this instance.
+  * pname:accelerationStructureReference is either:
+  ** a device address containing the value obtained from
+ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
+     (used by device operations which reference acceleration structures) or,
+  ** a slink:VkAccelerationStructureKHR object (used by host operations
+     which reference acceleration structures).
+
+The C language specification does not define the ordering of bit-fields, but
+in practice, this struct produces the correct layout with existing
+compilers.
+The intended bit pattern is for the following:
+
+  * pname:instanceCustomIndex and pname:mask occupy the same memory as if a
+    single code:uint32_t was specified in their place
+  ** pname:instanceCustomIndex occupies the 24 least significant bits of
+     that memory
+  ** pname:mask occupies the 8 most significant bits of that memory
+  * pname:instanceShaderBindingTableRecordOffset and pname:flags occupy the
+    same memory as if a single code:uint32_t was specified in their place
+  ** pname:instanceShaderBindingTableRecordOffset occupies the 24 least
+     significant bits of that memory
+  ** pname:flags occupies the 8 most significant bits of that memory
+
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values according to the correct bit
+pattern.
+
+The transform for a SRT motion instance at a point in time is derived from
+component-wise linear interpolation of the two SRT transforms.
+That is, for a code:time in [0,1] the resulting transform is
+
+  {empty}:: [eq]#pname:transformT0 {times} (1 - code:time) {plus}
+            pname:transformT1 {times} code:time#
+
+include::{generated}/validity/structs/VkAccelerationStructureSRTMotionInstanceNV.adoc[]
+--
+
+[open,refpage='VkSRTDataNV',desc='Structure specifying a transform in SRT decomposition',type='structs']
+--
+:refpage: VkSRTDataNV
+
+An acceleration structure SRT transform is defined by the structure:
+
+include::{generated}/api/structs/VkSRTDataNV.adoc[]
+
+  * pname:sx is the x component of the scale of the transform
+  * pname:a is one component of the shear for the transform
+  * pname:b is one component of the shear for the transform
+  * pname:pvx is the x component of the pivot point of the transform
+  * pname:sy is the y component of the scale of the transform
+  * pname:c is one component of the shear for the transform
+  * pname:pvy is the y component of the pivot point of the transform
+  * pname:sz is the z component of the scale of the transform
+  * pname:pvz is the z component of the pivot point of the transform
+  * pname:qx is the x component of the rotation quaternion
+  * pname:qy is the y component of the rotation quaternion
+  * pname:qz is the z component of the rotation quaternion
+  * pname:qw is the w component of the rotation quaternion
+  * pname:tx is the x component of the post-rotation translation
+  * pname:ty is the y component of the post-rotation translation
+  * pname:tz is the z component of the post-rotation translation
+
+This transform decomposition consists of three elements.
+The first is a matrix S, consisting of a scale, shear, and translation,
+usually used to define the pivot point of the following rotation.
+This matrix is constructed from the parameters above by:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+S =
+\left(
+    \begin{matrix}
+        sx & a  & b  & pvx \\
+        0  & sy & c  & pvy \\
+        0  & 0  & sz & pvz
+    \end{matrix}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+The rotation quaternion is defined as:
+
+  {empty}:: [eq]#code:R = [ pname:qx, pname:qy, pname:qz, pname:qw ]#
+
+This is a rotation around a conceptual normalized axis [eq]#[ ax, ay, az ]#
+of amount code:theta such that:
+
+  {empty}:: [eq]#[ pname:qx, pname:qy, pname:qz ] = sin(code:theta/2)
+            {times} [ code:ax, code:ay, code:az ]#
+
+and
+
+  {empty}:: [eq]#pname:qw = cos(code:theta/2)#
+
+Finally, the transform has a translation T constructed from the parameters
+above by:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+T =
+\left(
+    \begin{matrix}
+        1 & 0 & 0 & tx \\
+        0 & 1 & 0 & ty \\
+        0 & 0 & 1 & tz
+    \end{matrix}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+The effective derived transform is then given by
+
+  {empty}:: [eq]#code:T {times} code:R {times} code:S#
+
+include::{generated}/validity/structs/VkSRTDataNV.adoc[]
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkAccelerationStructureBuildRangeInfoKHR',desc='Structure specifying build offsets and counts for acceleration structure builds',type='structs']
+--
+:refpage: VkAccelerationStructureBuildOffsetInfoKHR
+
+sname:VkAccelerationStructureBuildRangeInfoKHR is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureBuildRangeInfoKHR.adoc[]
+
+  * pname:primitiveCount defines the number of primitives for a
+    corresponding acceleration structure geometry.
+  * pname:primitiveOffset defines an offset in bytes into the memory where
+    primitive data is defined.
+  * pname:firstVertex is the index of the first vertex to build from for
+    triangle geometry.
+  * pname:transformOffset defines an offset in bytes into the memory where a
+    transform matrix is defined.
+
+The primitive count and primitive offset are interpreted differently
+depending on the elink:VkGeometryTypeKHR used:
+
+  * For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
+    pname:primitiveCount is the number of triangles to be built, where each
+    triangle is treated as 3 vertices.
+  ** If the geometry uses indices, [eq]#pname:primitiveCount {times} 3#
+     indices are consumed from
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData,
+     starting at an offset of pname:primitiveOffset.
+     The value of pname:firstVertex is added to the index values before
+     fetching vertices.
+  ** If the geometry does not use indices, [eq]#pname:primitiveCount {times}
+     3# vertices are consumed from
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData,
+     starting at an offset of [eq]#pname:primitiveOffset {plus}
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexStride
+     {times} pname:firstVertex#.
+  ** If
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
+     is not `NULL`, a single slink:VkTransformMatrixKHR structure is
+     consumed from
+     slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData,
+     at an offset of pname:transformOffset.
+     This matrix describes a transformation from the space in which the
+     vertices for all triangles in this geometry are described to the space
+     in which the acceleration structure is defined.
+  * For geometries of type ename:VK_GEOMETRY_TYPE_AABBS_KHR,
+    pname:primitiveCount is the number of axis-aligned bounding boxes.
+    pname:primitiveCount slink:VkAabbPositionsKHR structures are consumed
+    from slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data,
+    starting at an offset of pname:primitiveOffset.
+  * For geometries of type ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
+    pname:primitiveCount is the number of acceleration structures.
+    pname:primitiveCount slink:VkAccelerationStructureInstanceKHR
+ifdef::VK_NV_ray_tracing_motion_blur[]
+    or slink:VkAccelerationStructureMotionInstanceNV
+endif::VK_NV_ray_tracing_motion_blur[]
+    structures are consumed from
+    slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data,
+    starting at an offset of pname:primitiveOffset.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03656]]
+    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
+    geometry uses indices, the offset pname:primitiveOffset from
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexData
+    must: be a multiple of the element size of
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:indexType
+  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03657]]
+    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
+    geometry does not use indices, the offset pname:primitiveOffset from
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexData
+    must: be a multiple of the component size of
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat
+  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-transformOffset-03658]]
+    For geometries of type ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the offset
+    pname:transformOffset from
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
+    must: be a multiple of 16
+  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03659]]
+    For geometries of type ename:VK_GEOMETRY_TYPE_AABBS_KHR, the offset
+    pname:primitiveOffset from
+    slink:VkAccelerationStructureGeometryAabbsDataKHR::pname:data must: be a
+    multiple of 8
+  * [[VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03660]]
+    For geometries of type ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, the offset
+    pname:primitiveOffset from
+    slink:VkAccelerationStructureGeometryInstancesDataKHR::pname:data must:
+    be a multiple of 16
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureBuildRangeInfoKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+
+[[acceleration-structure-copying]]
+=== Copying Acceleration Structures
+
+An additional command exists for copying acceleration structures without
+updating their contents.
+The acceleration structure object can: be compacted in order to improve
+performance.
+Before copying, an application must: query the size of the resulting
+acceleration structure.
+
+[open,refpage='vkCmdWriteAccelerationStructuresPropertiesKHR',desc='Write acceleration structure result parameters to query results.',type='protos']
+--
+:refpage: vkCmdWriteAccelerationStructuresPropertiesKHR
+
+To query acceleration structure size parameters call:
+
+ifdef::VK_KHR_acceleration_structure[]
+include::{generated}/api/protos/vkCmdWriteAccelerationStructuresPropertiesKHR.adoc[]
+endif::VK_KHR_acceleration_structure[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:accelerationStructureCount is the count of acceleration structures
+    for which to query the property.
+  * pname:pAccelerationStructures is a pointer to an array of existing
+    previously built acceleration structures.
+  * pname:queryType is a elink:VkQueryType value specifying the type of
+    queries managed by the pool.
+  * pname:queryPool is the query pool that will manage the results of the
+    query.
+  * pname:firstQuery is the first query index within the query pool that
+    will contain the pname:accelerationStructureCount number of results.
+
+Accesses to any of the acceleration structures listed in
+pname:pAccelerationStructures must: be <<synchronization-dependencies,
+synchronized>> with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
+
+  * If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then the
+    value written out is the number of bytes required by a compacted
+    acceleration structure.
+  * If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
+    the value written out is the number of bytes required by a serialized
+    acceleration structure.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructure-08924]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493]]
+    pname:queryPool must: have been created with a pname:queryType matching
+    pname:queryType
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494]]
+    The queries identified by pname:queryPool and pname:firstQuery must: be
+    _unavailable_
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-buffer-03736]]
+    The pname:buffer used to create each acceleration structure in
+    pname:pAccelerationStructures must: be bound to device memory
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-query-04880]]
+    The sum of pname:query plus pname:accelerationStructureCount must: be
+    less than or equal to the number of queries in pname:queryPool
+include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdWriteAccelerationStructuresPropertiesKHR.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='vkCmdWriteAccelerationStructuresPropertiesNV',desc='Write acceleration structure result parameters to query results.',type='protos']
+--
+:refpage: vkCmdWriteAccelerationStructuresPropertiesNV
+
+To query acceleration structure size parameters call:
+
+include::{generated}/api/protos/vkCmdWriteAccelerationStructuresPropertiesNV.adoc[]
+
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:accelerationStructureCount is the count of acceleration structures
+    for which to query the property.
+  * pname:pAccelerationStructures is a pointer to an array of existing
+    previously built acceleration structures.
+  * pname:queryType is a elink:VkQueryType value specifying the type of
+    queries managed by the pool.
+  * pname:queryPool is the query pool that will manage the results of the
+    query.
+  * pname:firstQuery is the first query index within the query pool that
+    will contain the pname:accelerationStructureCount number of results.
+
+Accesses to any of the acceleration structures listed in
+pname:pAccelerationStructures must: be <<synchronization-dependencies,
+synchronized>> with the
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03755]]
+    pname:queryPool must: have been created with a pname:queryType matching
+    pname:queryType
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03756]]
+    The queries identified by pname:queryPool and pname:firstQuery must: be
+    _unavailable_
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-accelerationStructure-03757]]
+    pname:accelerationStructure must: be bound completely and contiguously
+    to a single sname:VkDeviceMemory object via
+    flink:vkBindAccelerationStructureMemoryNV
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-04958]]
+    All acceleration structures in pname:pAccelerationStructures must: have
+    been built prior to the execution of this command
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-06215]]
+    All acceleration structures in pname:pAccelerationStructures must: have
+    been built with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if
+    pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
+  * [[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryType-06216]]
+    pname:queryType must: be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
+****
+
+include::{generated}/validity/protos/vkCmdWriteAccelerationStructuresPropertiesNV.adoc[]
+--
+
+[open,refpage='vkCmdCopyAccelerationStructureNV',desc='Copy an acceleration structure',type='protos']
+--
+:refpage: vkCmdCopyAccelerationStructureNV
+
+To copy an acceleration structure call:
+
+include::{generated}/api/protos/vkCmdCopyAccelerationStructureNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:dst is the target acceleration structure for the copy.
+  * pname:src is the source acceleration structure for the copy.
+  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value
+    specifying additional operations to perform during the copy.
+
+Accesses to pname:src and pname:dst must: be <<synchronization-dependencies,
+synchronized>> with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR as appropriate.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_acceleration_structure_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyAccelerationStructureNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='vkCmdCopyAccelerationStructureKHR',desc='Copy an acceleration structure',type='protos']
+--
+:refpage: vkCmdCopyAccelerationStructureKHR
+
+To copy an acceleration structure call:
+
+include::{generated}/api/protos/vkCmdCopyAccelerationStructureKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is a pointer to a slink:VkCopyAccelerationStructureInfoKHR
+    structure defining the copy operation.
+
+This command copies the pname:pInfo->src acceleration structure to the
+pname:pInfo->dst acceleration structure in the manner specified by
+pname:pInfo->mode.
+
+Accesses to pname:pInfo->src and pname:pInfo->dst must: be
+<<synchronization-dependencies, synchronized>> with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR as appropriate.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyAccelerationStructureKHR-accelerationStructure-08925]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkCmdCopyAccelerationStructureKHR-buffer-03737]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    device memory
+  * [[VUID-vkCmdCopyAccelerationStructureKHR-buffer-03738]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyAccelerationStructureKHR.adoc[]
+--
+
+[open,refpage='VkCopyAccelerationStructureInfoKHR',desc='Parameters for copying an acceleration structure',type='structs']
+--
+:refpage: VkCopyAccelerationStructureInfoKHR
+
+The sname:VkCopyAccelerationStructureInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkCopyAccelerationStructureInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the source acceleration structure for the copy.
+  * pname:dst is the target acceleration structure for the copy.
+  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value
+    specifying additional operations to perform during the copy.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_acceleration_structure_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkCopyAccelerationStructureInfoKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkCopyAccelerationStructureModeKHR',desc='Acceleration structure copy mode',type='enums',alias='VkCopyAccelerationStructureModeNV']
+--
+:refpage: VkCopyAccelerationStructureModeKHR
+
+Possible values of pname:mode specifying additional operations to perform
+during the copy, are:
+
+include::{generated}/api/enums/VkCopyAccelerationStructureModeKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkCopyAccelerationStructureModeNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR creates a direct
+    copy of the acceleration structure specified in pname:src into the one
+    specified by pname:dst.
+    The pname:dst acceleration structure must: have been created with the
+    same parameters as pname:src.
+    If pname:src contains references to other acceleration structures,
+    pname:dst will reference the same acceleration structures.
+  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR creates a more
+    compact version of an acceleration structure pname:src into pname:dst.
+    The acceleration structure pname:dst must: have been created with a size
+    at least as large as that returned by
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR
+ifdef::VK_KHR_acceleration_structure[]
+    or flink:vkWriteAccelerationStructuresPropertiesKHR
+endif::VK_KHR_acceleration_structure[]
+    after the build of the acceleration structure specified by pname:src.
+    If pname:src contains references to other acceleration structures,
+    pname:dst will reference the same acceleration structures.
+  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR serializes the
+    acceleration structure to a semi-opaque format which can be reloaded on
+    a compatible implementation.
+  * ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR deserializes
+    the semi-opaque serialization format in the buffer to the acceleration
+    structure.
+--
+
+[open,refpage='vkCmdCopyAccelerationStructureToMemoryKHR',desc='Copy an acceleration structure to device memory',type='protos']
+--
+:refpage: vkCmdCopyAccelerationStructureToMemoryKHR
+
+To copy an acceleration structure to device memory call:
+
+include::{generated}/api/protos/vkCmdCopyAccelerationStructureToMemoryKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is an a pointer to a
+    slink:VkCopyAccelerationStructureToMemoryInfoKHR structure defining the
+    copy operation.
+
+Accesses to pname:pInfo->src must: be <<synchronization-dependencies,
+synchronized>> with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR.
+Accesses to the buffer indicated by pname:pInfo->dst.deviceAddress must: be
+synchronized with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an and an access
+type of ename:VK_ACCESS_TRANSFER_WRITE_BIT.
+
+This command produces the same results as
+flink:vkCopyAccelerationStructureToMemoryKHR, but writes its result to a
+device address, and is executed on the device rather than the host.
+The output may: not necessarily be bit-for-bit identical, but it can be
+equally used by either flink:vkCmdCopyMemoryToAccelerationStructureKHR or
+flink:vkCopyMemoryToAccelerationStructureKHR.
+
+[[serialized-as-header]]
+The defined header structure for the serialized data consists of:
+
+  * ename:VK_UUID_SIZE bytes of data matching
+    sname:VkPhysicalDeviceIDProperties::pname:driverUUID
+  * ename:VK_UUID_SIZE bytes of data identifying the compatibility for
+    comparison using flink:vkGetDeviceAccelerationStructureCompatibilityKHR
+  * A 64-bit integer of the total size matching the value queried using
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+  * A 64-bit integer of the deserialized size to be passed in to
+    sname:VkAccelerationStructureCreateInfoKHR::pname:size
+  * A 64-bit integer of the count of the number of acceleration structure
+    handles following.
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+    This value matches the value queried using
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR.
+endif::VK_KHR_ray_tracing_maintenance1[]
+    This will be zero for a bottom-level acceleration structure.
+    For top-level acceleration structures this number is
+    implementation-dependent; the number of and ordering of the handles may
+    not match the instance descriptions which were used to build the
+    acceleration structure.
+
+The corresponding handles matching the values returned by
+ifdef::VK_KHR_acceleration_structure[flink:vkGetAccelerationStructureDeviceAddressKHR]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[flink:vkGetAccelerationStructureHandleNV]
+are tightly packed in the buffer following the count.
+The application is expected to store a mapping between those handles and the
+original application-generated bottom-level acceleration structures to
+provide when deserializing.
+The serialized data is written to the buffer (or read from the buffer)
+according to the host endianness.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-accelerationStructure-08926]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03739]]
+    pname:pInfo->dst.deviceAddress must: be a valid device address for a
+    buffer bound to device memory
+  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03740]]
+    pname:pInfo->dst.deviceAddress must: be aligned to `256` bytes
+  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03741]]
+    If the buffer pointed to by pname:pInfo->dst.deviceAddress is non-sparse
+    then it must: be bound completely and contiguously to a single
+    slink:VkDeviceMemory object
+  * [[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyAccelerationStructureToMemoryKHR.adoc[]
+--
+
+[open,refpage='VkCopyAccelerationStructureToMemoryInfoKHR',desc='Parameters for serializing an acceleration structure',type='structs']
+--
+:refpage: VkCopyAccelerationStructureToMemoryInfoKHR
+
+include::{generated}/api/structs/VkCopyAccelerationStructureToMemoryInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the source acceleration structure for the copy
+  * pname:dst is the device or host address to memory which is the target
+    for the copy
+  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value
+    specifying additional operations to perform during the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-04959]]
+    The source acceleration structure pname:src must: have been constructed
+    prior to the execution of this command
+  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561]]
+    The memory pointed to by pname:dst must: be at least as large as the
+    serialization size of pname:src, as reported by
+    flink:vkWriteAccelerationStructuresPropertiesKHR or
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR with a query type of
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+  * [[VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412]]
+    pname:mode must: be
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
+****
+
+include::{generated}/validity/structs/VkCopyAccelerationStructureToMemoryInfoKHR.adoc[]
+--
+
+[open,refpage='vkCmdCopyMemoryToAccelerationStructureKHR',desc='Copy device memory to an acceleration structure',type='protos']
+--
+:refpage: vkCmdCopyMemoryToAccelerationStructureKHR
+
+To copy device memory to an acceleration structure call:
+
+include::{generated}/api/protos/vkCmdCopyMemoryToAccelerationStructureKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pInfo is a pointer to a
+    slink:VkCopyMemoryToAccelerationStructureInfoKHR structure defining the
+    copy operation.
+
+Accesses to pname:pInfo->dst must: be <<synchronization-dependencies,
+synchronized>> with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
+Accesses to the buffer indicated by pname:pInfo->src.deviceAddress must: be
+synchronized with the
+ifdef::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> or the
+endif::VK_KHR_synchronization2[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>>, and an access type of
+ename:VK_ACCESS_TRANSFER_READ_BIT.
+
+This command can accept acceleration structures produced by either
+flink:vkCmdCopyAccelerationStructureToMemoryKHR or
+flink:vkCopyAccelerationStructureToMemoryKHR.
+
+The structure provided as input to deserialize is as described in
+flink:vkCmdCopyAccelerationStructureToMemoryKHR, with any acceleration
+structure handles filled in with the newly-queried handles to bottom level
+acceleration structures created before deserialization.
+These do not need to be built at deserialize time, but must: be created.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-accelerationStructure-08927]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03742]]
+    pname:pInfo->src.deviceAddress must: be a valid device address for a
+    buffer bound to device memory
+  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03743]]
+    pname:pInfo->src.deviceAddress must: be aligned to `256` bytes
+  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03744]]
+    If the buffer pointed to by pname:pInfo->src.deviceAddress is non-sparse
+    then it must: be bound completely and contiguously to a single
+    slink:VkDeviceMemory object
+  * [[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-buffer-03745]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    device memory
+****
+
+include::{generated}/validity/protos/vkCmdCopyMemoryToAccelerationStructureKHR.adoc[]
+--
+
+[open,refpage='VkCopyMemoryToAccelerationStructureInfoKHR',desc='Parameters for deserializing an acceleration structure',type='structs']
+--
+:refpage: VkCopyMemoryToAccelerationStructureInfoKHR
+
+The sname:VkCopyMemoryToAccelerationStructureInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkCopyMemoryToAccelerationStructureInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:src is the device or host address to memory containing the source
+    data for the copy.
+  * pname:dst is the target acceleration structure for the copy.
+  * pname:mode is a elink:VkCopyAccelerationStructureModeKHR value
+    specifying additional operations to perform during the copy.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-04960]]
+    The source memory pointed to by pname:src must: contain data previously
+    serialized using flink:vkCmdCopyAccelerationStructureToMemoryKHR,
+    potentially modified to relocate acceleration structure references as
+    described in that command
+  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413]]
+    pname:mode must: be
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
+  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414]]
+    The data in pname:src must: have a format compatible with the
+    destination physical device as returned by
+    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
+  * [[VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-03746]]
+    pname:dst must: have been created with a pname:size greater than or
+    equal to that used to serialize the data in pname:src
+****
+
+include::{generated}/validity/structs/VkCopyMemoryToAccelerationStructureInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetDeviceAccelerationStructureCompatibilityKHR',desc='Check if a serialized acceleration structure is compatible with the current device',type='protos']
+--
+:refpage: vkGetDeviceAccelerationStructureCompatibilityKHR
+
+To check if a serialized acceleration structure is compatible with the
+current device call:
+
+include::{generated}/api/protos/vkGetDeviceAccelerationStructureCompatibilityKHR.adoc[]
+
+  * pname:device is the device to check the version against.
+  * pname:pVersionInfo is a pointer to a
+    slink:VkAccelerationStructureVersionInfoKHR structure specifying version
+    information to check against the device.
+  * pname:pCompatibility is a pointer to a
+    elink:VkAccelerationStructureCompatibilityKHR value in which
+    compatibility information is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-accelerationStructure-08928]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetDeviceAccelerationStructureCompatibilityKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureVersionInfoKHR',desc='Acceleration structure version information',type='structs']
+--
+:refpage: VkAccelerationStructureVersionKHR
+
+The sname:VkAccelerationStructureVersionInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureVersionInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pVersionData is a pointer to the version header of an acceleration
+    structure as defined in flink:vkCmdCopyAccelerationStructureToMemoryKHR
+
+[NOTE]
+.Note
+====
+pname:pVersionData is a _pointer_ to an array of 2{times}ename:VK_UUID_SIZE
+code:uint8_t values instead of two ename:VK_UUID_SIZE arrays as the expected
+use case for this member is to be pointed at the header of a previously
+serialized acceleration structure (via
+flink:vkCmdCopyAccelerationStructureToMemoryKHR or
+flink:vkCopyAccelerationStructureToMemoryKHR) that is loaded in memory.
+Using arrays would necessitate extra memory copies of the UUIDs.
+====
+
+include::{generated}/validity/structs/VkAccelerationStructureVersionInfoKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureCompatibilityKHR',desc='Acceleration structure compatibility',type='enums']
+--
+Possible values of pname:pCompatibility returned by
+flink:vkGetDeviceAccelerationStructureCompatibilityKHR are:
+
+include::{generated}/api/enums/VkAccelerationStructureCompatibilityKHR.adoc[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR if the
+    pname:pVersionData version acceleration structure is compatible with
+    pname:device.
+  * ename:VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR if the
+    pname:pVersionData version acceleration structure is not compatible with
+    pname:device.
+--
+
+
+[[host-acceleration-structure]]
+== Host Acceleration Structure Operations
+
+Implementations are also required to provide host implementations of the
+acceleration structure operations if the
+<<features-accelerationStructureHostCommands,
+pname:accelerationStructureHostCommands>> feature is enabled:
+
+  * flink:vkBuildAccelerationStructuresKHR corresponding to
+    flink:vkCmdBuildAccelerationStructuresKHR
+  * flink:vkCopyAccelerationStructureKHR corresponding to
+    flink:vkCmdCopyAccelerationStructureKHR
+  * flink:vkCopyAccelerationStructureToMemoryKHR corresponding to
+    flink:vkCmdCopyAccelerationStructureToMemoryKHR
+  * flink:vkCopyMemoryToAccelerationStructureKHR corresponding to
+    flink:vkCmdCopyMemoryToAccelerationStructureKHR
+  * flink:vkWriteAccelerationStructuresPropertiesKHR corresponding to
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR
+
+These commands are functionally equivalent to their device counterparts,
+except that they are executed on the host timeline, rather than being
+enqueued into command buffers.
+
+All acceleration structures used by the host commands must: be bound to
+host-visible memory, and all input data for acceleration structure builds
+must: be referenced using host addresses instead of device addresses.
+Applications are not required to map acceleration structure memory when
+using the host commands.
+
+
+[NOTE]
+.Note
+====
+The flink:vkBuildAccelerationStructuresKHR and
+flink:vkCmdBuildAccelerationStructuresKHR may: use different algorithms, and
+thus are not required to produce identical structures.
+The structures produced by these two commands may: exhibit different memory
+footprints or traversal performance, but should strive to be similar where
+possible.
+
+Apart from these details, the host and device operations are
+interchangeable.
+For example, an application can: use flink:vkBuildAccelerationStructuresKHR
+to build a structure, compact it on the device using
+flink:vkCmdCopyAccelerationStructureKHR, and serialize the result using
+flink:vkCopyAccelerationStructureToMemoryKHR.
+====
+
+[NOTE]
+.Note
+====
+For efficient execution, acceleration structures manipulated using these
+commands should always be bound to host cached memory, as the implementation
+may need to repeatedly read and write this memory during the execution of
+the command.
+====
+
+[open,refpage='vkBuildAccelerationStructuresKHR',desc='Build an acceleration structure on the host',type='protos']
+--
+:refpage: vkBuildAccelerationStructuresKHR
+
+To build acceleration structures on the host, call:
+
+include::{generated}/api/protos/vkBuildAccelerationStructuresKHR.adoc[]
+
+  * pname:device is the sname:VkDevice for which the acceleration structures
+    are being built.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:infoCount is the number of acceleration structures to build.
+    It specifies the number of the pname:pInfos structures and
+    pname:ppBuildRangeInfos pointers that must: be provided.
+  * pname:pInfos is a pointer to an array of pname:infoCount
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structures defining
+    the geometry used to build each acceleration structure.
+  * pname:ppBuildRangeInfos is a pointer to an array of pname:infoCount
+    pointers to arrays of slink:VkAccelerationStructureBuildRangeInfoKHR
+    structures.
+    Each pname:ppBuildRangeInfos[i] is a pointer to an array of
+    pname:pInfos[i].pname:geometryCount
+    slink:VkAccelerationStructureBuildRangeInfoKHR structures defining
+    dynamic offsets to the addresses where geometry data is stored, as
+    defined by pname:pInfos[i].
+
+This command fulfills the same task as
+flink:vkCmdBuildAccelerationStructuresKHR but is executed by the host.
+
+The fname:vkBuildAccelerationStructuresKHR command provides the ability to
+initiate multiple acceleration structures builds, however there is no
+ordering or synchronization implied between any of the individual
+acceleration structure builds.
+
+[NOTE]
+.Note
+====
+This means that an application cannot: build a top-level acceleration
+structure in the same flink:vkBuildAccelerationStructuresKHR call as the
+associated bottom-level or instance acceleration structures are being built.
+There also cannot: be any memory aliasing between any acceleration structure
+memories or scratch memories being used by any of the builds.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkBuildAccelerationStructuresKHR-accelerationStructureHostCommands-03581]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+
+:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
+include::{chapters}/commonvalidity/build_acceleration_structure_common.adoc[]
+include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.adoc[]
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03722]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstAccelerationStructure member must: be bound to host-visible
+    device memory
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03723]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
+    used to create its pname:srcAccelerationStructure member must: be bound
+    to host-visible device memory
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03724]]
+    For each element of pname:pInfos, the pname:buffer used to create each
+    acceleration structure referenced by the pname:geometry.instances.data
+    member of any element of pname:pGeometries or pname:ppGeometries with a
+    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
+    bound to host-visible device memory
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03725]]
+    If pname:pInfos[i].pname:mode is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses
+    between pname:pInfos[i].pname:scratchData.hostAddress and
+    pname:pInfos[i].pname:scratchData.hostAddress + N - 1 must: be valid
+    host memory, where N is given by the pname:buildScratchSize member of
+    the slink:VkAccelerationStructureBuildSizesInfoKHR structure returned
+    from a call to flink:vkGetAccelerationStructureBuildSizesKHR with an
+    identical slink:VkAccelerationStructureBuildGeometryInfoKHR structure
+    and primitive count
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03726]]
+    If pname:pInfos[i].pname:mode is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses
+    between pname:pInfos[i].pname:scratchData.hostAddress and
+    pname:pInfos[i].pname:scratchData.hostAddress + N - 1 must: be valid
+    host memory, where N is given by the pname:updateScratchSize member of
+    the slink:VkAccelerationStructureBuildSizesInfoKHR structure returned
+    from a call to flink:vkGetAccelerationStructureBuildSizesKHR with an
+    identical slink:VkAccelerationStructureBuildGeometryInfoKHR structure
+    and primitive count
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03771]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
+    pname:geometry.triangles.vertexData.hostAddress must: be a valid host
+    address
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03772]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
+    pname:geometry.triangles.indexData.hostAddress must: be a valid host
+    address
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03773]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.transformData.hostAddress is not `0`, it must:
+    be a valid host address
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03774]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_AABBS_KHR, pname:geometry.aabbs.data.hostAddress
+    must: be a valid host address
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03775]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstAccelerationStructure member must: be bound to memory that was
+    not allocated with multiple instances
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03776]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
+    used to create its pname:srcAccelerationStructure member must: be bound
+    to memory that was not allocated with multiple instances
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03777]]
+    For each element of pname:pInfos, the pname:buffer used to create each
+    acceleration structure referenced by the pname:geometry.instances.data
+    member of any element of pname:pGeometries or pname:ppGeometries with a
+    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
+    bound to memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03778]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
+    pname:geometry.instances.data.hostAddress must: be a valid host address
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-03779]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
+    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
+    value in pname:geometry.instances.data.hostAddress must be a valid
+    slink:VkAccelerationStructureKHR object
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-vkBuildAccelerationStructuresKHR-pInfos-04930]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV set, each
+    pname:accelerationStructureReference in any structure in
+    slink:VkAccelerationStructureMotionInstanceNV value in
+    pname:geometry.instances.data.hostAddress must be a valid
+    slink:VkAccelerationStructureKHR object
+endif::VK_NV_ray_tracing_motion_blur[]
+****
+
+include::{generated}/validity/protos/vkBuildAccelerationStructuresKHR.adoc[]
+--
+
+[open,refpage='vkCopyAccelerationStructureKHR',desc='Copy an acceleration structure on the host',type='protos']
+--
+:refpage: vkCopyAccelerationStructureKHR
+
+To copy or compact an acceleration structure on the host, call:
+
+include::{generated}/api/protos/vkCopyAccelerationStructureKHR.adoc[]
+
+  * pname:device is the device which owns the acceleration structures.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a slink:VkCopyAccelerationStructureInfoKHR
+    structure defining the copy operation.
+
+This command fulfills the same task as
+flink:vkCmdCopyAccelerationStructureKHR but is executed by the host.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03727]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03728]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    host-visible device memory feature must: be enabled
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03780]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    memory that was not allocated with multiple instances
+  * [[VUID-vkCopyAccelerationStructureKHR-buffer-03781]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyAccelerationStructureKHR.adoc[]
+--
+
+[open,refpage='vkCopyMemoryToAccelerationStructureKHR',desc='Deserialize an acceleration structure on the host',type='protos']
+--
+:refpage: vkCopyMemoryToAccelerationStructureKHR
+
+To copy host accessible memory to an acceleration structure, call:
+
+include::{generated}/api/protos/vkCopyMemoryToAccelerationStructureKHR.adoc[]
+
+  * pname:device is the device which owns pname:pInfo->dst.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a
+    slink:VkCopyMemoryToAccelerationStructureInfoKHR structure defining the
+    copy operation.
+
+This command fulfills the same task as
+flink:vkCmdCopyMemoryToAccelerationStructureKHR but is executed by the host.
+
+This command can accept acceleration structures produced by either
+flink:vkCmdCopyAccelerationStructureToMemoryKHR or
+flink:vkCopyAccelerationStructureToMemoryKHR.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-accelerationStructureHostCommands-03583]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03729]]
+    pname:pInfo->src.hostAddress must: be a valid host pointer
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03750]]
+    pname:pInfo->src.hostAddress must: be aligned to 16 bytes
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03730]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    host-visible device memory
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03782]]
+    The pname:buffer used to create pname:pInfo->dst must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyMemoryToAccelerationStructureKHR.adoc[]
+--
+
+[open,refpage='vkCopyAccelerationStructureToMemoryKHR',desc='Serialize an acceleration structure on the host',type='protos']
+--
+:refpage: vkCopyAccelerationStructureToMemoryKHR
+
+To copy an acceleration structure to host accessible memory, call:
+
+include::{generated}/api/protos/vkCopyAccelerationStructureToMemoryKHR.adoc[]
+
+  * pname:device is the device which owns pname:pInfo->src.
+  * pname:deferredOperation is an optional slink:VkDeferredOperationKHR to
+    <<deferred-host-operations-requesting, request deferral>> for this
+    command.
+  * pname:pInfo is a pointer to a
+    slink:VkCopyAccelerationStructureToMemoryInfoKHR structure defining the
+    copy operation.
+
+This command fulfills the same task as
+flink:vkCmdCopyAccelerationStructureToMemoryKHR but is executed by the host.
+
+This command produces the same results as
+flink:vkCmdCopyAccelerationStructureToMemoryKHR, but writes its result
+directly to a host pointer, and is executed on the host rather than the
+device.
+The output may: not necessarily be bit-for-bit identical, but it can be
+equally used by either flink:vkCmdCopyMemoryToAccelerationStructureKHR or
+flink:vkCopyMemoryToAccelerationStructureKHR.
+
+.Valid Usage
+****
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-accelerationStructureHostCommands-03584]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03731]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    host-visible device memory
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03732]]
+    pname:pInfo->dst.hostAddress must: be a valid host pointer
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03751]]
+    pname:pInfo->dst.hostAddress must: be aligned to 16 bytes
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03783]]
+    The pname:buffer used to create pname:pInfo->src must: be bound to
+    memory that was not allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCopyAccelerationStructureToMemoryKHR.adoc[]
+--
+
+[open,refpage='vkWriteAccelerationStructuresPropertiesKHR',desc='Query acceleration structure meta-data on the host',type='protos']
+--
+:refpage: vkWriteAccelerationStructuresPropertiesKHR
+
+To query acceleration structure size parameters on the host, call:
+
+include::{generated}/api/protos/vkWriteAccelerationStructuresPropertiesKHR.adoc[]
+
+  * pname:device is the device which owns the acceleration structures in
+    pname:pAccelerationStructures.
+  * pname:accelerationStructureCount is the count of acceleration structures
+    for which to query the property.
+  * pname:pAccelerationStructures is a pointer to an array of existing
+    previously built acceleration structures.
+  * pname:queryType is a elink:VkQueryType value specifying the property to
+    be queried.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written.
+  * pname:stride is the stride in bytes between results for individual
+    queries within pname:pData.
+
+This command fulfills the same task as
+flink:vkCmdWriteAccelerationStructuresPropertiesKHR but is executed by the
+host.
+
+.Valid Usage
+****
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureHostCommands-03585]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.adoc[]
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then
+    pname:stride must: be a multiple of the size of basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then
+    pname:pData must: point to a basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
+    pname:stride must: be a multiple of the size of basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then
+    pname:pData must: point to a basetype:VkDeviceSize
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06731]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, then pname:stride
+    must: be a multiple of the size of basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06732]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, then pname:pData
+    must: point to a basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06733]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR,
+    then pname:stride must: be a multiple of the size of
+    basetype:VkDeviceSize
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06734]]
+    If pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR,
+    then pname:pData must: point to a basetype:VkDeviceSize
+endif::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452]]
+    pname:dataSize must: be greater than or equal to
+    [eq]#pname:accelerationStructureCount*pname:stride#
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03733]]
+    The pname:buffer used to create each acceleration structure in
+    pname:pAccelerationStructures must: be bound to host-visible device
+    memory
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03784]]
+    The pname:buffer used to create each acceleration structure in
+    pname:pAccelerationStructures must: be bound to memory that was not
+    allocated with multiple instances
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkWriteAccelerationStructuresPropertiesKHR.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/capabilities.adoc b/codegen/vulkan/vulkan-docs-next/chapters/capabilities.adoc
new file mode 100644
index 0000000..490c0bc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/capabilities.adoc
@@ -0,0 +1,1801 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[capabilities]]
+= Additional Capabilities
+
+This chapter describes additional capabilities beyond the minimum
+capabilities described in the <<limits, Limits>> and <<formats, Formats>>
+chapters, including:
+
+  * <<capabilities-image, Additional Image Capabilities>>
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+  * <<capabilities-buffer, Additional Buffer Capabilities>>
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+  * <<capabilities-semaphore, Optional Semaphore Capabilities>>
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+  * <<capabilities-fence, Optional Fence Capabilities>>
+endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+ifdef::VK_EXT_calibrated_timestamps[]
+  * <<features-timestamp-calibration, Timestamp Calibration Capabilities>>
+endif::VK_EXT_calibrated_timestamps[]
+
+
+[[capabilities-image]]
+== Additional Image Capabilities
+
+Additional image capabilities, such as larger dimensions or additional
+sample counts for certain image types, or additional capabilities for
+_linear_ tiling format images, are described in this section.
+
+[open,refpage='vkGetPhysicalDeviceImageFormatProperties',desc='Lists physical device\'s image format capabilities',type='protos']
+--
+:refpage: vkGetPhysicalDeviceImageFormatProperties
+
+To query additional capabilities specific to image types, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    image capabilities.
+  * pname:format is a elink:VkFormat value specifying the image format,
+    corresponding to slink:VkImageCreateInfo::pname:format.
+  * pname:type is a elink:VkImageType value specifying the image type,
+    corresponding to slink:VkImageCreateInfo::pname:imageType.
+  * pname:tiling is a elink:VkImageTiling value specifying the image tiling,
+    corresponding to slink:VkImageCreateInfo::pname:tiling.
+  * pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying the
+    intended usage of the image, corresponding to
+    slink:VkImageCreateInfo::pname:usage.
+  * pname:flags is a bitmask of elink:VkImageCreateFlagBits specifying
+    additional parameters of the image, corresponding to
+    slink:VkImageCreateInfo::pname:flags.
+  * pname:pImageFormatProperties is a pointer to a
+    slink:VkImageFormatProperties structure in which capabilities are
+    returned.
+
+The pname:format, pname:type, pname:tiling, pname:usage, and pname:flags
+parameters correspond to parameters that would be consumed by
+flink:vkCreateImage (as members of slink:VkImageCreateInfo).
+
+If pname:format is not a supported image format, or if the combination of
+pname:format, pname:type, pname:tiling, pname:usage, and pname:flags is not
+supported for images, then fname:vkGetPhysicalDeviceImageFormatProperties
+returns ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
+
+The limitations on an image format that are reported by
+fname:vkGetPhysicalDeviceImageFormatProperties have the following property:
+if code:usage1 and code:usage2 of type tlink:VkImageUsageFlags are such that
+the bits set in code:usage1 are a subset of the bits set in code:usage2, and
+code:flags1 and code:flags2 of type tlink:VkImageCreateFlags are such that
+the bits set in code:flags1 are a subset of the bits set in code:flags2,
+then the limitations for code:usage1 and code:flags1 must: be no more strict
+than the limitations for code:usage2 and code:flags2, for all values of
+pname:format, pname:type, and pname:tiling.
+
+ifdef::VK_EXT_host_image_copy[]
+If `apiext:VK_EXT_host_image_copy` is supported, pname:usage includes
+ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:flags does not include either of
+ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, then the result of calls to
+fname:vkGetPhysicalDeviceImageFormatProperties with identical parameters
+except for the inclusion of ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT in
+pname:usage must: be identical.
+endif::VK_EXT_host_image_copy[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248]]
+    pname:tiling must: not be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
+    (Use flink:vkGetPhysicalDeviceImageFormatProperties2 instead)
+****
+endif::VK_EXT_image_drm_format_modifier[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties.adoc[]
+--
+
+[open,refpage='VkImageFormatProperties',desc='Structure specifying an image format properties',type='structs']
+--
+The sname:VkImageFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatProperties.adoc[]
+
+  * pname:maxExtent are the maximum image dimensions.
+    See the <<features-extentperimagetype, Allowed Extent Values>> section
+    below for how these values are constrained by pname:type.
+  * pname:maxMipLevels is the maximum number of mipmap levels.
+    pname:maxMipLevels must: be equal to the number of levels in the
+    complete mipmap chain based on the [eq]#pname:maxExtent.width#,
+    [eq]#pname:maxExtent.height#, and [eq]#pname:maxExtent.depth#, except
+    when one of the following conditions is true, in which case it may:
+    instead be `1`:
+  ** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was
+     ename:VK_IMAGE_TILING_LINEAR
+ifdef::VK_EXT_image_drm_format_modifier[]
+  ** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was
+     ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+  ** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain included
+     a slink:VkPhysicalDeviceExternalImageFormatInfo structure with a handle
+     type included in the pname:handleTypes member for which mipmap image
+     support is not required
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** image pname:format is one of the
+     <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+     sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_fragment_density_map[]
+  ** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * pname:maxArrayLayers is the maximum number of array layers.
+    pname:maxArrayLayers must: be no less than
+    slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, except when one
+    of the following conditions is true, in which case it may: instead be
+    `1`:
+  ** pname:tiling is ename:VK_IMAGE_TILING_LINEAR
+  ** pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is
+     ename:VK_IMAGE_TYPE_3D
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** pname:format is one of the
+     <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+     sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+    pname:maxArrayLayers must: not be 0.
+endif::VK_EXT_image_drm_format_modifier[]
+  * pname:sampleCounts is a bitmask of elink:VkSampleCountFlagBits
+    specifying all the supported sample counts for this image as described
+    <<features-supported-sample-counts, below>>.
+  * pname:maxResourceSize is an upper bound on the total image size in
+    bytes, inclusive of all image subresources.
+    Implementations may: have an address space limit on total size of a
+    resource, which is advertised by this property.
+    pname:maxResourceSize must: be at least 2^31^.
+
+[NOTE]
+.Note
+====
+There is no mechanism to query the size of an image before creating it, to
+compare that size against pname:maxResourceSize.
+If an application attempts to create an image that exceeds this limit, the
+creation will fail and flink:vkCreateImage will return
+ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+While the advertised limit must: be at least 2^31^, it may: not be possible
+to create an image that approaches that size, particularly for
+ename:VK_IMAGE_TYPE_1D.
+====
+
+If the combination of parameters to
+fname:vkGetPhysicalDeviceImageFormatProperties is not supported by the
+implementation for use in flink:vkCreateImage, then all members of
+sname:VkImageFormatProperties will be filled with zero.
+
+[NOTE]
+.Note
+====
+Filling sname:VkImageFormatProperties with zero for unsupported formats is
+an exception to the usual rule that output structures have undefined:
+contents on error.
+This exception was unintentional, but is preserved for backwards
+compatibility.
+====
+
+include::{generated}/validity/structs/VkImageFormatProperties.adoc[]
+--
+
+ifdef::VK_NV_external_memory_capabilities[]
+include::{chapters}/VK_NV_external_memory_capabilities/external_image_format.adoc[]
+endif::VK_NV_external_memory_capabilities[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+[open,refpage='vkGetPhysicalDeviceImageFormatProperties2',desc='Lists physical device\'s image format capabilities',type='protos']
+--
+:refpage: vkGetPhysicalDeviceImageFormatProperties2
+
+To query additional capabilities specific to image types, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    image capabilities.
+  * pname:pImageFormatInfo is a pointer to a
+    slink:VkPhysicalDeviceImageFormatInfo2 structure describing the
+    parameters that would be consumed by flink:vkCreateImage.
+  * pname:pImageFormatProperties is a pointer to a
+    slink:VkImageFormatProperties2 structure in which capabilities are
+    returned.
+
+fname:vkGetPhysicalDeviceImageFormatProperties2 behaves similarly to
+flink:vkGetPhysicalDeviceImageFormatProperties, with the ability to return
+extended information in a pname:pNext chain of output structures.
+
+ifdef::VK_KHR_video_queue[]
+If the pname:pNext chain of pname:pImageFormatInfo includes a
+slink:VkVideoProfileListInfoKHR structure with a pname:profileCount member
+greater than `0`, then this command returns format capabilities specific to
+image types used in conjunction with the specified <<video-profiles,video
+profiles>>.
+In this case, this command will return one of the
+<<video-profile-error-codes, video-profile-specific error codes>> if any of
+the profiles specified via slink:VkVideoProfileListInfoKHR::pname:pProfiles
+are not supported.
+Furthermore, if slink:VkPhysicalDeviceImageFormatInfo2::pname:usage includes
+any image usage flag not supported by the specified video profiles, then
+this command returns ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR.
+endif::VK_KHR_video_queue[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_EXT_host_image_copy[]
+.Valid Usage
+****
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868]]
+    If the pname:pNext chain of pname:pImageFormatProperties includes a
+    slink:VkAndroidHardwareBufferUsageANDROID structure, the pname:pNext
+    chain of pname:pImageFormatInfo must: include a
+    slink:VkPhysicalDeviceExternalImageFormatInfo structure with
+    pname:handleType set to
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_EXT_host_image_copy[]
+  * [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-09004]]
+    If the pname:pNext chain of pname:pImageFormatProperties includes a
+    slink:VkHostImageCopyDevicePerformanceQueryEXT structure,
+    pname:pImageFormatInfo->usage must: contain
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT
+endif::VK_EXT_host_image_copy[]
+****
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_EXT_host_image_copy[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties2.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceImageFormatInfo2',desc='Structure specifying image creation parameters',type='structs']
+--
+The sname:VkPhysicalDeviceImageFormatInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+    The pname:pNext chain of sname:VkPhysicalDeviceImageFormatInfo2 is used
+    to provide additional image parameters to
+    fname:vkGetPhysicalDeviceImageFormatProperties2.
+  * pname:format is a elink:VkFormat value indicating the image format,
+    corresponding to slink:VkImageCreateInfo::pname:format.
+  * pname:type is a elink:VkImageType value indicating the image type,
+    corresponding to slink:VkImageCreateInfo::pname:imageType.
+  * pname:tiling is a elink:VkImageTiling value indicating the image tiling,
+    corresponding to slink:VkImageCreateInfo::pname:tiling.
+  * pname:usage is a bitmask of elink:VkImageUsageFlagBits indicating the
+    intended usage of the image, corresponding to
+    slink:VkImageCreateInfo::pname:usage.
+  * pname:flags is a bitmask of elink:VkImageCreateFlagBits indicating
+    additional parameters of the image, corresponding to
+    slink:VkImageCreateInfo::pname:flags.
+
+The members of sname:VkPhysicalDeviceImageFormatInfo2 correspond to the
+arguments to flink:vkGetPhysicalDeviceImageFormatProperties, with
+pname:sType and pname:pNext added for extensibility.
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249]]
+    pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT if
+    and only if the pname:pNext chain includes
+    slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+  * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313]]
+    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
+    pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
+    pname:pNext chain must: include a slink:VkImageFormatListCreateInfo
+    structure with non-zero pname:viewFormatCount
+****
+endif::VK_EXT_image_drm_format_modifier[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageFormatInfo2.adoc[]
+--
+
+[open,refpage='VkImageFormatProperties2',desc='Structure specifying an image format properties',type='structs']
+--
+The sname:VkImageFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+    The pname:pNext chain of sname:VkImageFormatProperties2 is used to allow
+    the specification of additional capabilities to be returned from
+    fname:vkGetPhysicalDeviceImageFormatProperties2.
+  * pname:imageFormatProperties is a slink:VkImageFormatProperties structure
+    in which capabilities are returned.
+
+If the combination of parameters to
+fname:vkGetPhysicalDeviceImageFormatProperties2 is not supported by the
+implementation for use in flink:vkCreateImage, then all members of
+pname:imageFormatProperties will be filled with zero.
+
+[NOTE]
+.Note
+====
+Filling pname:imageFormatProperties with zero for unsupported formats is an
+exception to the usual rule that output structures have undefined: contents
+on error.
+This exception was unintentional, but is preserved for backwards
+compatibility.
+This exception only applies to pname:imageFormatProperties, not pname:sType,
+pname:pNext, or any structures chained from pname:pNext.
+====
+
+include::{generated}/validity/structs/VkImageFormatProperties2.adoc[]
+--
+
+ifdef::VK_AMD_texture_gather_bias_lod[]
+[open,refpage='VkTextureLODGatherFormatPropertiesAMD',desc='Structure informing whether or not texture gather bias/LOD functionality is supported for a given image format and a given physical device.',type='structs']
+--
+To determine if texture gather functions that take explicit LOD and/or bias
+argument values can: be used with a given image format, add a
+slink:VkTextureLODGatherFormatPropertiesAMD structure to the pname:pNext
+chain of the slink:VkImageFormatProperties2 structure in a call to
+fname:vkGetPhysicalDeviceImageFormatProperties2.
+
+The sname:VkTextureLODGatherFormatPropertiesAMD structure is defined as:
+
+include::{generated}/api/structs/VkTextureLODGatherFormatPropertiesAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:supportsTextureGatherLODBiasAMD tells if the image format can be
+    used with texture gather bias/LOD functions, as introduced by the
+    `apiext:VK_AMD_texture_gather_bias_lod` extension.
+    This field is set by the implementation.
+    User-specified value is ignored.
+
+include::{generated}/validity/structs/VkTextureLODGatherFormatPropertiesAMD.adoc[]
+--
+endif::VK_AMD_texture_gather_bias_lod[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+[open,refpage='VkPhysicalDeviceExternalImageFormatInfo',desc='Structure specifying external image creation parameters',type='structs']
+--
+To determine the image capabilities compatible with an external memory
+handle type, add a slink:VkPhysicalDeviceExternalImageFormatInfo structure
+to the pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2
+structure and a sname:VkExternalImageFormatProperties structure to the
+pname:pNext chain of the slink:VkImageFormatProperties2 structure.
+
+The sname:VkPhysicalDeviceExternalImageFormatInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfo.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfoKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the memory handle type that will be used with the memory
+    associated with the image.
+
+If pname:handleType is 0, flink:vkGetPhysicalDeviceImageFormatProperties2
+will behave as if slink:VkPhysicalDeviceExternalImageFormatInfo was not
+present, and slink:VkExternalImageFormatProperties will be ignored.
+
+If pname:handleType is not compatible with the pname:format, pname:type,
+pname:tiling, pname:usage, and pname:flags specified in
+slink:VkPhysicalDeviceImageFormatInfo2, then
+flink:vkGetPhysicalDeviceImageFormatProperties2 returns
+ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalImageFormatInfo.adoc[]
+--
+
+[open,refpage='VkExternalMemoryHandleTypeFlagBits',desc='Bit specifying external memory handle types',type='enums']
+--
+Possible values of
+slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType, specifying
+an external memory handle type, are:
+
+include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBits.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
+    file descriptor handle that has only limited valid usage outside of
+    Vulkan and other compatible APIs.
+    It must: be compatible with the POSIX system calls code:dup, code:dup2,
+    code:close, and the non-standard system call code:dup3.
+    Additionally, it must: be transportable over a socket using an
+    code:SCM_RIGHTS control message.
+    It owns a reference to the underlying memory resource represented by its
+    Vulkan memory object.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
+    handle that has only limited valid usage outside of Vulkan and other
+    compatible APIs.
+    It must: be compatible with the functions code:DuplicateHandle,
+    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
+    and code:SetHandleInformation.
+    It owns a reference to the underlying memory resource represented by its
+    Vulkan memory object.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
+    global share handle that has only limited valid usage outside of Vulkan
+    and other compatible APIs.
+    It is not compatible with any native APIs.
+    It does not own a reference to the underlying memory resource
+    represented by its Vulkan memory object, and will therefore become
+    invalid when all Vulkan memory objects associated with it are destroyed.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT specifies an NT
+    handle returned by code:IDXGIResource1::code:CreateSharedHandle
+    referring to a Direct3D 10 or 11 texture resource.
+    It owns a reference to the memory used by the Direct3D resource.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT specifies a
+    global share handle returned by code:IDXGIResource::code:GetSharedHandle
+    referring to a Direct3D 10 or 11 texture resource.
+    It does not own a reference to the underlying Direct3D resource, and
+    will therefore become invalid when all Vulkan memory objects and
+    Direct3D resources associated with it are destroyed.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT specifies an NT
+    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
+    to a Direct3D 12 heap resource.
+    It owns a reference to the resources used by the Direct3D heap.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT specifies an NT
+    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
+    to a Direct3D 12 committed resource.
+    It owns a reference to the memory used by the Direct3D resource.
+ifdef::VK_EXT_external_memory_host[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT specifies a
+    host pointer returned by a host memory allocation command.
+    It does not own a reference to the underlying memory resource, and will
+    therefore become invalid if the host memory is freed.
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
+    specifies a host pointer to _host mapped foreign memory_.
+    It does not own a reference to the underlying memory resource, and will
+    therefore become invalid if the foreign memory is unmapped or otherwise
+    becomes no longer available.
+endif::VK_EXT_external_memory_host[]
+ifdef::VK_EXT_external_memory_dma_buf[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT is a file
+    descriptor for a Linux dma_buf.
+    It owns a reference to the underlying memory resource represented by its
+    Vulkan memory object.
+endif::VK_EXT_external_memory_dma_buf[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    specifies an basetype:AHardwareBuffer object defined by the Android NDK.
+    See <<memory-external-android-hardware-buffer,Android Hardware Buffers>>
+    for more details of this handle type.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_FUCHSIA_external_memory[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA is a Zircon
+    handle to a virtual memory object.
+endif::VK_FUCHSIA_external_memory[]
+ifdef::VK_NV_external_memory_rdma[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV is a handle to
+    an allocation accessible by remote devices.
+    It owns a reference to the underlying memory resource represented by its
+    Vulkan memory object.
+endif::VK_NV_external_memory_rdma[]
+ifdef::VK_NV_external_memory_sci_buf[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV specifies a volatile
+    memory object (stext:NvSciBufObj) that is backed by a buffer and
+    shareable across various hardware engines including the CPU, and
+    software (intra-process and inter-process) and hardware (system memory)
+    operating domains.
+endif::VK_NV_external_memory_sci_buf[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX specifies a
+    code:_screen_buffer object defined by the QNX SDP.
+    See <<memory-external-qnx-screen-buffer,QNX Screen Buffer>> for more
+    details of this handle type.
+endif::VK_QNX_external_memory_screen_buffer[]
+
+<<<
+
+Some external memory handle types can only be shared within the same
+underlying physical device and/or the same driver version, as defined in the
+following table:
+
+[[external-memory-handle-types-compatibility]]
+.External memory handle types compatibility
+|====
+| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT | Must match | Must match
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT | Must match | Must match
+ifdef::VK_EXT_external_memory_host[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT | No restriction | No restriction
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT | No restriction | No restriction
+endif::VK_EXT_external_memory_host[]
+ifdef::VK_EXT_external_memory_dma_buf[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT | No restriction | No restriction
+endif::VK_EXT_external_memory_dma_buf[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID | No restriction | No restriction
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_FUCHSIA_external_memory[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA | No restriction | No restriction
+endif::VK_FUCHSIA_external_memory[]
+ifdef::VK_NV_external_memory_rdma[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV | No restriction | No restriction
+endif::VK_NV_external_memory_rdma[]
+ifdef::VK_NV_external_memory_sci_buf[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV | No restriction | No restriction
+endif::VK_NV_external_memory_sci_buf[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX | No restriction | No restriction
+endif::VK_QNX_external_memory_screen_buffer[]
+|====
+
+ifdef::VK_EXT_external_memory_host[]
+[NOTE]
+.Note
+====
+The above table does not restrict the drivers and devices with which
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT and
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT may:
+be shared, as these handle types inherently mean memory that does not come
+from the same device, as they import memory from the host or a foreign
+device, respectively.
+====
+endif::VK_EXT_external_memory_host[]
+
+ifdef::VK_EXT_external_memory_dma_buf[]
+[NOTE]
+.Note
+====
+Even though the above table does not restrict the drivers and devices with
+which ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT may: be shared,
+query mechanisms exist in the Vulkan API that prevent the import of
+incompatible dma-bufs (such as flink:vkGetMemoryFdPropertiesKHR) and that
+prevent incompatible usage of dma-bufs (such as
+slink:VkPhysicalDeviceExternalBufferInfo and
+slink:VkPhysicalDeviceExternalImageFormatInfo).
+====
+endif::VK_EXT_external_memory_dma_buf[]
+--
+
+[open,refpage='VkExternalMemoryHandleTypeFlags',desc='Bitmask of VkExternalMemoryHandleTypeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalMemoryHandleTypeFlags.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+tname:VkExternalMemoryHandleTypeFlags is a bitmask type for setting a mask
+of zero or more elink:VkExternalMemoryHandleTypeFlagBits.
+--
+
+[open,refpage='VkExternalImageFormatProperties',desc='Structure specifying supported external handle properties',type='structs']
+--
+The sname:VkExternalImageFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalImageFormatProperties.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalImageFormatPropertiesKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties
+    structure specifying various capabilities of the external handle type
+    when used with the specified image creation parameters.
+
+include::{generated}/validity/structs/VkExternalImageFormatProperties.adoc[]
+--
+
+[open,refpage='VkExternalMemoryProperties',desc='Structure specifying external memory handle type capabilities',type='structs']
+--
+The sname:VkExternalMemoryProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalMemoryProperties.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryPropertiesKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:externalMemoryFeatures is a bitmask of
+    elink:VkExternalMemoryFeatureFlagBits specifying the features of
+    pname:handleType.
+  * pname:exportFromImportedHandleTypes is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBits specifying which types of
+    imported handle pname:handleType can: be exported from.
+  * pname:compatibleHandleTypes is a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBits specifying handle types which
+    can: be specified at the same time as pname:handleType when creating an
+    image compatible with external memory.
+
+pname:compatibleHandleTypes must: include at least pname:handleType.
+Inclusion of a handle type in pname:compatibleHandleTypes does not imply the
+values returned in slink:VkImageFormatProperties2 will be the same when
+slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is set to
+that type.
+The application is responsible for querying the capabilities of all handle
+types intended for concurrent use in a single image and intersecting them to
+obtain the compatible set of capabilities.
+
+include::{generated}/validity/structs/VkExternalMemoryProperties.adoc[]
+--
+
+[open,refpage='VkExternalMemoryFeatureFlagBits',desc='Bitmask specifying features of an external memory handle type',type='enums']
+--
+Bits which may: be set in
+slink:VkExternalMemoryProperties::pname:externalMemoryFeatures, specifying
+features of an external memory handle type, are:
+
+include::{generated}/api/enums/VkExternalMemoryFeatureFlagBits.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT specifies that
+    images or buffers created with the specified parameters and handle type
+    must: use the mechanisms defined by slink:VkMemoryDedicatedRequirements
+    and slink:VkMemoryDedicatedAllocateInfo to create (or import) a
+    dedicated allocation for the image or buffer.
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT specifies that handles
+    of this type can: be exported from Vulkan memory objects.
+  * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT specifies that handles
+    of this type can: be imported as Vulkan memory objects.
+
+Because their semantics in external APIs roughly align with that of an image
+or buffer with a dedicated allocation in Vulkan, implementations are
+required: to report ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for
+the following external handle types:
+
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    for images only
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX for images
+    only
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+Implementations must: not report
+ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with
+external handle type
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+Implementations must: not report
+ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with
+external handle type
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX.
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_EXT_external_memory_host[]
+Implementations must: not report
+ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for images or buffers
+with external handle type
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, or
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT.
+endif::VK_EXT_external_memory_host[]
+--
+
+[open,refpage='VkExternalMemoryFeatureFlags',desc='Bitmask of VkExternalMemoryFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalMemoryFeatureFlags.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalMemoryFeatureFlagsKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+tname:VkExternalMemoryFeatureFlags is a bitmask type for setting a mask of
+zero or more elink:VkExternalMemoryFeatureFlagBits.
+--
+
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[open,refpage='VkPhysicalDeviceImageDrmFormatModifierInfoEXT',desc='Structure specifying a DRM format modifier as image creation parameter',type='structs']
+--
+To query the image capabilities that are compatible with a
+<<glossary-drm-format-modifier,Linux DRM format modifier>>, set
+slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling to
+ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and add a
+slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure to the
+pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2.
+
+The slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifier is the image's _Linux DRM format modifier_,
+    corresponding to
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:modifier or
+    to slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pModifiers.
+  * pname:sharingMode specifies how the image will be accessed by multiple
+    queue families.
+  * pname:queueFamilyIndexCount is the number of entries in the
+    pname:pQueueFamilyIndices array.
+  * pname:pQueueFamilyIndices is a pointer to an array of queue families
+    that will access the image.
+    It is ignored if pname:sharingMode is not
+    ename:VK_SHARING_MODE_CONCURRENT.
+
+If the pname:drmFormatModifier is incompatible with the parameters specified
+in slink:VkPhysicalDeviceImageFormatInfo2 and its pname:pNext chain, then
+flink:vkGetPhysicalDeviceImageFormatProperties2 returns
+ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
+The implementation must: support the query of any pname:drmFormatModifier,
+including unknown and invalid modifier values.
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
+    pname:pQueueFamilyIndices must: be a valid pointer to an array of
+    pname:queueFamilyIndexCount code:uint32_t values
+  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
+    pname:queueFamilyIndexCount must: be greater than `1`
+  * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
+    of pname:pQueueFamilyIndices must: be unique and must: be less than the
+    pname:pQueueFamilyPropertyCount returned by
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
+    pname:physicalDevice that was used to create pname:device
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.adoc[]
+--
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[open,refpage='VkSamplerYcbcrConversionImageFormatProperties',desc='Structure specifying combined image sampler descriptor count for multi-planar images',type='structs']
+--
+To determine the number of combined image samplers required to support a
+multi-planar format, add slink:VkSamplerYcbcrConversionImageFormatProperties
+to the pname:pNext chain of the slink:VkImageFormatProperties2 structure in
+a call to fname:vkGetPhysicalDeviceImageFormatProperties2.
+
+The sname:VkSamplerYcbcrConversionImageFormatProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatProperties.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatPropertiesKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:combinedImageSamplerDescriptorCount is the number of combined
+    image sampler descriptors that the implementation uses to access the
+    format.
+
+include::{generated}/validity/structs/VkSamplerYcbcrConversionImageFormatProperties.adoc[]
+--
+
+pname:combinedImageSamplerDescriptorCount is a number between 1 and the
+number of planes in the format.
+A descriptor set layout binding with immutable {YCbCr} conversion samplers
+will have a maximum pname:combinedImageSamplerDescriptorCount which is the
+maximum across all formats supported by its samplers of the
+pname:combinedImageSamplerDescriptorCount for each format.
+Descriptor sets with that layout will internally use that maximum
+pname:combinedImageSamplerDescriptorCount descriptors for each descriptor in
+the binding.
+This expanded number of descriptors will be consumed from the descriptor
+pool when a descriptor set is allocated, and counts towards the
+pname:maxDescriptorSetSamplers, pname:maxDescriptorSetSampledImages,
+pname:maxPerStageDescriptorSamplers, and
+pname:maxPerStageDescriptorSampledImages limits.
+
+.Note
+[NOTE]
+====
+All descriptors in a binding use the same maximum
+pname:combinedImageSamplerDescriptorCount descriptors to allow
+implementations to use a uniform stride for dynamic indexing of the
+descriptors in the binding.
+
+For example, consider a descriptor set layout binding with two descriptors
+and immutable samplers for multi-planar formats that have
+sname:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount
+values of `2` and `3` respectively.
+There are two descriptors in the binding and the maximum
+pname:combinedImageSamplerDescriptorCount is `3`, so descriptor sets with
+this layout consume `6` descriptors from the descriptor pool.
+To create a descriptor pool that allows allocating four descriptor sets with
+this layout, pname:descriptorCount must be at least `24`.
+====
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+[open,refpage='VkAndroidHardwareBufferUsageANDROID',desc='Struct containing Android hardware buffer usage flags',type='structs']
+--
+To obtain optimal Android hardware buffer usage flags for specific image
+creation parameters, add a sname:VkAndroidHardwareBufferUsageANDROID
+structure to the pname:pNext chain of a slink:VkImageFormatProperties2
+structure passed to flink:vkGetPhysicalDeviceImageFormatProperties2.
+This structure is defined as:
+
+include::{generated}/api/structs/VkAndroidHardwareBufferUsageANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:androidHardwareBufferUsage returns the Android hardware buffer
+    usage flags.
+
+The pname:androidHardwareBufferUsage field must: include Android hardware
+buffer usage flags listed in the
+<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
+Equivalence>> table when the corresponding Vulkan image usage or image
+creation flags are included in the pname:usage or pname:flags fields of
+slink:VkPhysicalDeviceImageFormatInfo2.
+It must: include at least one GPU usage flag
+(code:AHARDWAREBUFFER_USAGE_GPU_*), even if none of the corresponding Vulkan
+usages or flags are requested.
+
+.Note
+[NOTE]
+====
+Requiring at least one GPU usage flag ensures that Android hardware buffer
+memory will be allocated in a memory pool accessible to the Vulkan
+implementation, and that specializing the memory layout based on usage flags
+does not prevent it from being compatible with Vulkan.
+Implementations may: avoid unnecessary restrictions caused by this
+requirement by using vendor usage flags to indicate that only the Vulkan
+uses indicated in slink:VkImageFormatProperties2 are required.
+====
+
+include::{generated}/validity/structs/VkAndroidHardwareBufferUsageANDROID.adoc[]
+--
+
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+ifdef::VK_EXT_host_image_copy[]
+
+[open,refpage='VkHostImageCopyDevicePerformanceQueryEXT',desc='Struct containing information about optimality of device access',type='structs']
+--
+To query if using ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT has a negative
+impact on device performance when accessing an image, add
+ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT to
+slink:VkPhysicalDeviceImageFormatInfo2::pname:usage, and add a
+sname:VkHostImageCopyDevicePerformanceQueryEXT structure to the pname:pNext
+chain of a slink:VkImageFormatProperties2 structure passed to
+flink:vkGetPhysicalDeviceImageFormatProperties2.
+This structure is defined as:
+
+include::{generated}/api/structs/VkHostImageCopyDevicePerformanceQueryEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:optimalDeviceAccess returns ename:VK_TRUE if use of host image
+    copy has no adverse effect on device access performance, compared to an
+    image that is created with exact same creation parameters, and bound to
+    the same slink:VkDeviceMemory, except that
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT.
+  * pname:identicalMemoryLayout returns ename:VK_TRUE if use of host image
+    copy has no impact on memory layout compared to an image that is created
+    with exact same creation parameters, and bound to the same
+    slink:VkDeviceMemory, except that
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT.
+
+The implementation may: return ename:VK_FALSE in pname:optimalDeviceAccess
+if pname:identicalMemoryLayout is ename:VK_FALSE.
+If pname:identicalMemoryLayout is ename:VK_TRUE, pname:optimalDeviceAccess
+must: be ename:VK_TRUE.
+
+The implementation may: return ename:VK_TRUE in pname:optimalDeviceAccess
+while pname:identicalMemoryLayout is ename:VK_FALSE.
+In this situation, any device performance impact should: not be measurable.
+
+If slink:VkPhysicalDeviceImageFormatInfo2::pname:format is a
+block-compressed format and flink:vkGetPhysicalDeviceImageFormatProperties2
+returns ename:VK_SUCCESS, the implementation must: return ename:VK_TRUE in
+pname:optimalDeviceAccess.
+
+.Note
+[NOTE]
+====
+Applications can make use of pname:optimalDeviceAccess to determine their
+resource copying strategy.
+If a resource is expected to be accessed more on device than on the host,
+and the implementation considers the resource sub-optimally accessed, it is
+likely better to use device copies instead.
+====
+
+.Note
+[NOTE]
+====
+Layout not being identical yet still considered optimal for device access
+could happen if the implementation has different memory layout patterns,
+some of which are easier to access on the host.
+====
+
+.Note
+[NOTE]
+====
+The most practical reason for pname:optimalDeviceAccess to be ename:VK_FALSE
+is that host image access may disable framebuffer compression where it would
+otherwise have been enabled.
+This represents far more efficient host image access since no compression
+algorithm is required to read or write to the image, but it would impact
+device access performance.
+Some implementations may only set pname:optimalDeviceAccess to
+ename:VK_FALSE if certain conditions are met, such as specific image usage
+flags or creation flags.
+====
+
+include::{generated}/validity/structs/VkHostImageCopyDevicePerformanceQueryEXT.adoc[]
+--
+
+endif::VK_EXT_host_image_copy[]
+
+ifdef::VK_EXT_filter_cubic[]
+
+To determine if cubic filtering can be used with a given image format and a
+given image view type add a
+slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure to the
+pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2 structure,
+and a slink:VkFilterCubicImageViewImageFormatPropertiesEXT structure to the
+pname:pNext chain of the slink:VkImageFormatProperties2 structure.
+
+[open,refpage='VkPhysicalDeviceImageViewImageFormatInfoEXT',desc='Structure for providing image view type',type='structs']
+--
+The sname:VkPhysicalDeviceImageViewImageFormatInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageViewType is a elink:VkImageViewType value specifying the type
+    of the image view.
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.adoc[]
+--
+
+[open,refpage='VkFilterCubicImageViewImageFormatPropertiesEXT',desc='Structure for querying cubic filtering capabilities of an image view type',type='structs']
+--
+The sname:VkFilterCubicImageViewImageFormatPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:filterCubic tells if image format, image type and image view type
+    can: be used with cubic filtering.
+    This field is set by the implementation.
+    User-specified value is ignored.
+  * pname:filterCubicMinmax tells if image format, image type and image view
+    type can: be used with cubic filtering and minmax filtering.
+    This field is set by the implementation.
+    User-specified value is ignored.
+
+include::{generated}/validity/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627]]
+    If the pname:pNext chain of the slink:VkImageFormatProperties2 structure
+    includes a slink:VkFilterCubicImageViewImageFormatPropertiesEXT
+    structure, the pname:pNext chain of the
+    slink:VkPhysicalDeviceImageFormatInfo2 structure must: include a
+    slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure with an
+    pname:imageViewType that is compatible with pname:imageType
+****
+--
+endif::VK_EXT_filter_cubic[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+
+[[features-supported-sample-counts]]
+=== Supported Sample Counts
+
+fname:vkGetPhysicalDeviceImageFormatProperties returns a bitmask of
+elink:VkSampleCountFlagBits in pname:sampleCounts specifying the supported
+sample counts for the image parameters.
+
+pname:sampleCounts will be set to ename:VK_SAMPLE_COUNT_1_BIT if at least
+one of the following conditions is true:
+
+  * pname:tiling is ename:VK_IMAGE_TILING_LINEAR
+  * pname:type is not ename:VK_IMAGE_TYPE_2D
+  * pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
+  * Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in
+    sname:VkFormatProperties::pname:optimalTilingFeatures returned by
+    flink:vkGetPhysicalDeviceFormatProperties is set
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+  * slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is an
+    external handle type for which multisampled image support is not
+    required.
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * pname:format is one of the <<formats-requiring-sampler-ycbcr-conversion,
+    formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * pname:usage contains
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * pname:usage contains ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+
+Otherwise, the bits set in pname:sampleCounts will be the sample counts
+supported for the specified values of pname:usage and pname:format.
+For each bit set in pname:usage, the supported sample counts relate to the
+limits in sname:VkPhysicalDeviceLimits as follows:
+
+  * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
+    pname:format is a floating- or fixed-point color format, a superset of
+    sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts
+ifdef::VK_VERSION_1_2[]
+  * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
+    pname:format is an integer format, a superset of
+    sname:VkPhysicalDeviceVulkan12Properties::pname:framebufferIntegerColorSampleCounts
+endif::VK_VERSION_1_2[]
+  * If pname:usage includes
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
+    includes a depth component, a superset of
+    sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts
+  * If pname:usage includes
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
+    includes a stencil component, a superset of
+    sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
+    pname:format includes a color component, a superset of
+    sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
+    pname:format includes a depth component, a superset of
+    sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
+    pname:format is an integer format, a superset of
+    sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of
+    sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts
+
+If multiple bits are set in pname:usage, pname:sampleCounts will be the
+intersection of the per-usage values described above.
+
+If none of the bits described above are set in pname:usage, then there is no
+corresponding limit in sname:VkPhysicalDeviceLimits.
+In this case, pname:sampleCounts must: include at least
+ename:VK_SAMPLE_COUNT_1_BIT.
+
+
+[[features-extentperimagetype]]
+=== Allowed Extent Values Based on Image Type
+
+Implementations may: support extent values larger than the <<limits-minmax,
+required minimum/maximum values>> for certain types of images.
+slink:VkImageFormatProperties::pname:maxExtent for each type is subject to
+the constraints below.
+
+[NOTE]
+.Note
+====
+Implementations must: support images with dimensions up to the
+<<limits-minmax, required minimum/maximum values>> for all types of images.
+It follows that the query for additional capabilities must: return extent
+values that are at least as large as the required values.
+====
+
+For ename:VK_IMAGE_TYPE_1D:
+
+  * [eq]#pname:maxExtent.width {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D#
+  * [eq]#pname:maxExtent.height = 1#
+  * [eq]#pname:maxExtent.depth = 1#
+
+For ename:VK_IMAGE_TYPE_2D when pname:flags does not contain
+ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
+
+  * [eq]#pname:maxExtent.width {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D#
+  * [eq]#pname:maxExtent.height {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D#
+  * [eq]#pname:maxExtent.depth = 1#
+
+For ename:VK_IMAGE_TYPE_2D when pname:flags contains
+ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
+
+  * [eq]#pname:maxExtent.width {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube#
+  * [eq]#pname:maxExtent.height {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube#
+  * [eq]#pname:maxExtent.depth = 1#
+
+For ename:VK_IMAGE_TYPE_3D:
+
+  * [eq]#pname:maxExtent.width {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
+  * [eq]#pname:maxExtent.height {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
+  * [eq]#pname:maxExtent.depth {geq}
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D#
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+[[capabilities-buffer]]
+== Additional Buffer Capabilities
+
+[open,refpage='vkGetPhysicalDeviceExternalBufferProperties',desc='Query external handle types supported by buffers',type='protos']
+--
+To query the external handle types supported by buffers, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferProperties.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_external_memory_capabilities[or the equivalent command]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferPropertiesKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    buffer capabilities.
+  * pname:pExternalBufferInfo is a pointer to a
+    slink:VkPhysicalDeviceExternalBufferInfo structure describing the
+    parameters that would be consumed by flink:vkCreateBuffer.
+  * pname:pExternalBufferProperties is a pointer to a
+    slink:VkExternalBufferProperties structure in which capabilities are
+    returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalBufferProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalBufferInfo',desc='Structure specifying buffer creation parameters',type='structs']
+--
+The sname:VkPhysicalDeviceExternalBufferInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfo.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfoKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkBufferCreateFlagBits describing
+    additional parameters of the buffer, corresponding to
+    slink:VkBufferCreateInfo::pname:flags.
+  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits describing the
+    intended usage of the buffer, corresponding to
+    slink:VkBufferCreateInfo::pname:usage.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the memory handle type that will be used with the memory
+    associated with the buffer.
+
+Only usage flags representable in elink:VkBufferUsageFlagBits are returned
+in this structure's pname:usage.
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkBufferUsageFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, all usage flags of the buffer are returned in
+slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage.
+endif::VK_KHR_maintenance5[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalBufferInfo.adoc[]
+--
+
+[open,refpage='VkExternalBufferProperties',desc='Structure specifying supported external handle capabilities',type='structs']
+--
+The sname:VkExternalBufferProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalBufferProperties.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalBufferPropertiesKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties
+    structure specifying various capabilities of the external handle type
+    when used with the specified buffer creation parameters.
+
+include::{generated}/validity/structs/VkExternalBufferProperties.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+[[capabilities-semaphore]]
+== Optional Semaphore Capabilities
+
+[open,refpage='vkGetPhysicalDeviceExternalSemaphoreProperties',desc='Function for querying external semaphore handle capabilities.',type='protos']
+--
+Semaphores may: support import and export of their
+<<synchronization-semaphores-payloads, payload>> to external handles.
+To query the external handle types supported by semaphores, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_external_semaphore_capabilities[or the equivalent command]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    semaphore capabilities.
+  * pname:pExternalSemaphoreInfo is a pointer to a
+    slink:VkPhysicalDeviceExternalSemaphoreInfo structure describing the
+    parameters that would be consumed by flink:vkCreateSemaphore.
+  * pname:pExternalSemaphoreProperties is a pointer to a
+    slink:VkExternalSemaphoreProperties structure in which capabilities are
+    returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalSemaphoreInfo',desc='Structure specifying semaphore creation parameters.',type='structs']
+--
+The sname:VkPhysicalDeviceExternalSemaphoreInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfo.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the external semaphore handle type for which capabilities
+    will be returned.
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalSemaphoreInfo.adoc[]
+--
+
+[open,refpage='VkExternalSemaphoreHandleTypeFlagBits',desc='Bitmask of valid external semaphore handle types',type='enums']
+--
+Bits which may: be set in
+slink:VkPhysicalDeviceExternalSemaphoreInfo::pname:handleType, specifying an
+external semaphore handle type, are:
+
+include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBits.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
+    file descriptor handle that has only limited valid usage outside of
+    Vulkan and other compatible APIs.
+    It must: be compatible with the POSIX system calls code:dup, code:dup2,
+    code:close, and the non-standard system call code:dup3.
+    Additionally, it must: be transportable over a socket using an
+    code:SCM_RIGHTS control message.
+    It owns a reference to the underlying synchronization primitive
+    represented by its Vulkan semaphore object.
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
+    handle that has only limited valid usage outside of Vulkan and other
+    compatible APIs.
+    It must: be compatible with the functions code:DuplicateHandle,
+    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
+    and code:SetHandleInformation.
+    It owns a reference to the underlying synchronization primitive
+    represented by its Vulkan semaphore object.
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
+    global share handle that has only limited valid usage outside of Vulkan
+    and other compatible APIs.
+    It is not compatible with any native APIs.
+    It does not own a reference to the underlying synchronization primitive
+    represented by its Vulkan semaphore object, and will therefore become
+    invalid when all Vulkan semaphore objects associated with it are
+    destroyed.
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT specifies an NT
+    handle returned by code:ID3D12Device::code:CreateSharedHandle referring
+    to a Direct3D 12 fence, or code:ID3D11Device5::code:CreateFence
+    referring to a Direct3D 11 fence.
+    It owns a reference to the underlying synchronization primitive
+    associated with the Direct3D fence.
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT is an alias of
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT with the same
+    meaning.
+    It is provided for convenience and code clarity when interacting with
+    D3D11 fences.
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX
+    file descriptor handle to a Linux Sync File or Android Fence object.
+    It can be used with any native API accepting a valid sync file or fence
+    as input.
+    It owns a reference to the underlying synchronization primitive
+    associated with the file descriptor.
+    Implementations which support importing this handle type must: accept
+    any type of sync or fence FD supported by the native system they are
+    running on.
+ifdef::VK_FUCHSIA_external_semaphore[]
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA
+    specifies a handle to a Zircon event object.
+    It can be used with any native API that accepts a Zircon event handle.
+    Zircon event handles are created with code:ZX_RIGHTS_BASIC and
+    code:ZX_RIGHTS_SIGNAL rights.
+    Vulkan on Fuchsia uses only the ZX_EVENT_SIGNALED bit when signaling or
+    waiting.
+endif::VK_FUCHSIA_external_semaphore[]
+ifdef::VK_NV_external_sci_sync[]
+  * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV specifies a
+    synchronization object (code:NvSciSyncObj) shareable across various
+    hardware engines including the CPU and software (intra-process and
+    inter-process) operating domains and perform signal and wait operations.
+endif::VK_NV_external_sci_sync[]
+
+[NOTE]
+.Note
+====
+Handles of type ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+generated by the implementation may represent either Linux Sync Files or
+Android Fences at the implementation's discretion.
+Applications should: only use operations defined for both types of file
+descriptors, unless they know via means external to Vulkan the type of the
+file descriptor, or are prepared to deal with the system-defined operation
+failures resulting from using the wrong type.
+====
+
+<<<
+
+Some external semaphore handle types can only be shared within the same
+underlying physical device and/or the same driver version, as defined in the
+following table:
+
+[[external-semaphore-handle-types-compatibility]]
+.External semaphore handle types compatibility
+|====
+| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT | Must match | Must match
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA | No restriction | No restriction
+ifdef::VK_NV_external_sci_sync[]
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV | No restriction | No restriction
+endif::VK_NV_external_sci_sync[]
+|====
+--
+
+[open,refpage='VkExternalSemaphoreHandleTypeFlags',desc='Bitmask of VkExternalSemaphoreHandleTypeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlags.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlagsKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+tname:VkExternalSemaphoreHandleTypeFlags is a bitmask type for setting a
+mask of zero or more elink:VkExternalSemaphoreHandleTypeFlagBits.
+--
+
+[open,refpage='VkExternalSemaphoreProperties',desc='Structure describing supported external semaphore handle features',type='structs']
+--
+The sname:VkExternalSemaphoreProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalSemaphoreProperties.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalSemaphorePropertiesKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:exportFromImportedHandleTypes is a bitmask of
+    elink:VkExternalSemaphoreHandleTypeFlagBits specifying which types of
+    imported handle pname:handleType can: be exported from.
+  * pname:compatibleHandleTypes is a bitmask of
+    elink:VkExternalSemaphoreHandleTypeFlagBits specifying handle types
+    which can: be specified at the same time as pname:handleType when
+    creating a semaphore.
+  * pname:externalSemaphoreFeatures is a bitmask of
+    elink:VkExternalSemaphoreFeatureFlagBits describing the features of
+    pname:handleType.
+
+If pname:handleType is not supported by the implementation, then
+slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures will be
+set to zero.
+
+include::{generated}/validity/structs/VkExternalSemaphoreProperties.adoc[]
+--
+
+[open,refpage='VkExternalSemaphoreFeatureFlagBits',desc='Bitfield describing features of an external semaphore handle type',type='enums']
+--
+Bits which may: be set in
+slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures,
+specifying the features of an external semaphore handle type, are:
+
+include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBits.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBitsKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT specifies that
+    handles of this type can: be exported from Vulkan semaphore objects.
+  * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT specifies that
+    handles of this type can: be imported as Vulkan semaphore objects.
+--
+
+[open,refpage='VkExternalSemaphoreFeatureFlags',desc='Bitmask of VkExternalSemaphoreFeatureFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkExternalSemaphoreFeatureFlags.adoc[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalSemaphoreFeatureFlagsKHR.adoc[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+tname:VkExternalSemaphoreFeatureFlags is a bitmask type for setting a mask
+of zero or more elink:VkExternalSemaphoreFeatureFlagBits.
+--
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+[[capabilities-fence]]
+== Optional Fence Capabilities
+
+[open,refpage='vkGetPhysicalDeviceExternalFenceProperties',desc='Function for querying external fence handle capabilities.',type='protos']
+--
+Fences may: support import and export of their
+<<synchronization-fences-payloads, payload>> to external handles.
+To query the external handle types supported by fences, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalFenceProperties.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_external_fence_capabilities[or the equivalent command]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalFencePropertiesKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    fence capabilities.
+  * pname:pExternalFenceInfo is a pointer to a
+    slink:VkPhysicalDeviceExternalFenceInfo structure describing the
+    parameters that would be consumed by flink:vkCreateFence.
+  * pname:pExternalFenceProperties is a pointer to a
+    slink:VkExternalFenceProperties structure in which capabilities are
+    returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalFenceProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalFenceInfo',desc='Structure specifying fence creation parameters.',type='structs']
+--
+The sname:VkPhysicalDeviceExternalFenceInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfo.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfoKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
+    specifying an external fence handle type for which capabilities will be
+    returned.
+
+[NOTE]
+.Note
+====
+Handles of type ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT generated by
+the implementation may represent either Linux Sync Files or Android Fences
+at the implementation's discretion.
+Applications should: only use operations defined for both types of file
+descriptors, unless they know via means external to Vulkan the type of the
+file descriptor, or are prepared to deal with the system-defined operation
+failures resulting from using the wrong type.
+====
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalFenceInfo.adoc[]
+--
+
+[open,refpage='VkExternalFenceHandleTypeFlagBits',desc='Bitmask of valid external fence handle types',type='enums']
+--
+Bits which may: be set in
+
+  * slink:VkPhysicalDeviceExternalFenceInfo::pname:handleType
+  * slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes
+  * slink:VkExternalFenceProperties::pname:compatibleHandleTypes
+
+indicate external fence handle types, and are:
+
+include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBits.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBitsKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX file
+    descriptor handle that has only limited valid usage outside of Vulkan
+    and other compatible APIs.
+    It must: be compatible with the POSIX system calls code:dup, code:dup2,
+    code:close, and the non-standard system call code:dup3.
+    Additionally, it must: be transportable over a socket using an
+    code:SCM_RIGHTS control message.
+    It owns a reference to the underlying synchronization primitive
+    represented by its Vulkan fence object.
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
+    handle that has only limited valid usage outside of Vulkan and other
+    compatible APIs.
+    It must: be compatible with the functions code:DuplicateHandle,
+    code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
+    and code:SetHandleInformation.
+    It owns a reference to the underlying synchronization primitive
+    represented by its Vulkan fence object.
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
+    global share handle that has only limited valid usage outside of Vulkan
+    and other compatible APIs.
+    It is not compatible with any native APIs.
+    It does not own a reference to the underlying synchronization primitive
+    represented by its Vulkan fence object, and will therefore become
+    invalid when all Vulkan fence objects associated with it are destroyed.
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX file
+    descriptor handle to a Linux Sync File or Android Fence.
+    It can be used with any native API accepting a valid sync file or fence
+    as input.
+    It owns a reference to the underlying synchronization primitive
+    associated with the file descriptor.
+    Implementations which support importing this handle type must: accept
+    any type of sync or fence FD supported by the native system they are
+    running on.
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV specifies a
+    synchronization object (code:NvSciSyncObj) shareable across various
+    hardware engines including the CPU and software (intra-process and
+    inter-process) operating domains and perform signal and wait operations.
+  * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV specifies a
+    struct of code:NvSciSyncFence that is a snapshot of a synchronization
+    object’s underlying primitive and represents its possible state.
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+<<<
+
+Some external fence handle types can only be shared within the same
+underlying physical device and/or the same driver version, as defined in the
+following table:
+
+[[external-fence-handle-types-compatibility]]
+.External fence handle types compatibility
+|====
+| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV | Must match | Must match
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV | Must match | Must match
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+|====
+--
+
+[open,refpage='VkExternalFenceHandleTypeFlags',desc='Bitmask of VkExternalFenceHandleTypeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalFenceHandleTypeFlags.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalFenceHandleTypeFlagsKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+tname:VkExternalFenceHandleTypeFlags is a bitmask type for setting a mask of
+zero or more elink:VkExternalFenceHandleTypeFlagBits.
+--
+
+[open,refpage='VkExternalFenceProperties',desc='Structure describing supported external fence handle features',type='structs']
+--
+The sname:VkExternalFenceProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalFenceProperties.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalFencePropertiesKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * pname:exportFromImportedHandleTypes is a bitmask of
+    elink:VkExternalFenceHandleTypeFlagBits indicating which types of
+    imported handle pname:handleType can: be exported from.
+  * pname:compatibleHandleTypes is a bitmask of
+    elink:VkExternalFenceHandleTypeFlagBits specifying handle types which
+    can: be specified at the same time as pname:handleType when creating a
+    fence.
+  * pname:externalFenceFeatures is a bitmask of
+    elink:VkExternalFenceFeatureFlagBits indicating the features of
+    pname:handleType.
+
+If pname:handleType is not supported by the implementation, then
+slink:VkExternalFenceProperties::pname:externalFenceFeatures will be set to
+zero.
+
+include::{generated}/validity/structs/VkExternalFenceProperties.adoc[]
+--
+
+[open,refpage='VkExternalFenceFeatureFlagBits',desc='Bitfield describing features of an external fence handle type',type='enums']
+--
+Bits which may: be set in
+slink:VkExternalFenceProperties::pname:externalFenceFeatures, indicating
+features of a fence external handle type, are:
+
+include::{generated}/api/enums/VkExternalFenceFeatureFlagBits.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalFenceFeatureFlagBitsKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * ename:VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT specifies handles of this
+    type can: be exported from Vulkan fence objects.
+  * ename:VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT specifies handles of this
+    type can: be imported to Vulkan fence objects.
+--
+
+[open,refpage='VkExternalFenceFeatureFlags',desc='Bitmask of VkExternalFenceFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalFenceFeatureFlags.adoc[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalFenceFeatureFlagsKHR.adoc[]
+endif::VK_KHR_external_fence_capabilities[]
+
+tname:VkExternalFenceFeatureFlags is a bitmask type for setting a mask of
+zero or more elink:VkExternalFenceFeatureFlagBits.
+--
+endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+
+
+ifdef::VK_EXT_calibrated_timestamps[]
+[[features-timestamp-calibration]]
+== Timestamp Calibration Capabilities
+
+[open,refpage='vkGetPhysicalDeviceCalibrateableTimeDomainsEXT',desc='Query calibrateable time domains',type='protos']
+--
+:refpage: vkGetPhysicalDeviceCalibrateableTimeDomainsEXT
+
+To query the set of time domains for which a physical device supports
+timestamp calibration, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the set
+    of calibrateable time domains.
+  * pname:pTimeDomainCount is a pointer to an integer related to the number
+    of calibrateable time domains available or queried, as described below.
+  * pname:pTimeDomains is either `NULL` or a pointer to an array of
+    elink:VkTimeDomainEXT values, indicating the supported calibrateable
+    time domains.
+
+If pname:pTimeDomains is `NULL`, then the number of calibrateable time
+domains supported for the given pname:physicalDevice is returned in
+pname:pTimeDomainCount.
+Otherwise, pname:pTimeDomainCount must: point to a variable set by the user
+to the number of elements in the pname:pTimeDomains array, and on return the
+variable is overwritten with the number of values actually written to
+pname:pTimeDomains.
+If the value of pname:pTimeDomainCount is less than the number of
+calibrateable time domains supported, at most pname:pTimeDomainCount values
+will be written to pname:pTimeDomains, and ename:VK_INCOMPLETE will be
+returned instead of ename:VK_SUCCESS, to indicate that not all the available
+time domains were returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.adoc[]
+--
+endif::VK_EXT_calibrated_timestamps[]
+
+ifdef::VK_KHR_object_refresh[]
+include::{chapters}/VK_KHR_object_refresh/capabilities.adoc[]
+endif::VK_KHR_object_refresh[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/clears.adoc b/codegen/vulkan/vulkan-docs-next/chapters/clears.adoc
new file mode 100644
index 0000000..00d3662
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/clears.adoc
@@ -0,0 +1,678 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside a Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource
+    ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure
+    containing the values that the image subresource ranges will be cleared
+    to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in
+    pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image
+    Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
+
+[open,refpage='vkCmdClearDepthStencilImage',desc='Fill regions of a combined depth/stencil image',type='protos']
+--
+To clear one or more subranges of a depth/stencil image, call:
+
+include::{generated}/api/protos/vkCmdClearDepthStencilImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource
+    ranges to be cleared, and must: be ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pDepthStencil is a pointer to a slink:VkClearDepthStencilValue
+    structure containing the values that the depth and stencil image
+    subresource ranges will be cleared to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in
+    pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image
+    Views>>.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearDepthStencilImage-image-01994]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02658]]
+    If the pname:aspect member of any element of pname:pRanges includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:image was created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage used to create
+    pname:image
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02659]]
+    If the pname:aspect member of any element of pname:pRanges includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT,
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    and pname:image was not created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
+    slink:VkImageCreateInfo::pname:usage used to create pname:image
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02660]]
+    If the pname:aspect member of any element of pname:pRanges includes
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT, ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+    must: have been included in the slink:VkImageCreateInfo::pname:usage
+    used to create pname:image
+  * [[VUID-vkCmdClearDepthStencilImage-image-00010]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearDepthStencilImage-imageLayout-00011]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearDepthStencilImage-imageLayout-00012]]
+    pname:imageLayout must: be either of
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-vkCmdClearDepthStencilImage-aspectMask-02824]]
+    The slink:VkImageSubresourceRange::pname:aspectMask member of each
+    element of the pname:pRanges array must: not include bits other than
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-vkCmdClearDepthStencilImage-image-02825]]
+    If the pname:image's format does not have a stencil component, then the
+    slink:VkImageSubresourceRange::pname:aspectMask member of each element
+    of the pname:pRanges array must: not include the
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT bit
+  * [[VUID-vkCmdClearDepthStencilImage-image-02826]]
+    If the pname:image's format does not have a depth component, then the
+    slink:VkImageSubresourceRange::pname:aspectMask member of each element
+    of the pname:pRanges array must: not include the
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT bit
+  * [[VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-01694]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-01695]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearDepthStencilImage-image-00014]]
+    pname:image must: have a depth/stencil format
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearDepthStencilImage-commandBuffer-01807]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearDepthStencilImage-commandBuffer-01808]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearDepthStencilImage.adoc[]
+--
+
+Clears outside render pass instances are treated as transfer operations for
+the purposes of memory barriers.
+
+
+[[clears-inside]]
+== Clearing Images Inside a Render Pass Instance
+
+[open,refpage='vkCmdClearAttachments',desc='Clear regions within bound framebuffer attachments',type='protos']
+--
+To clear one or more regions of color and depth/stencil attachments inside a
+render pass instance, call:
+
+include::{generated}/api/protos/vkCmdClearAttachments.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:attachmentCount is the number of entries in the pname:pAttachments
+    array.
+  * pname:pAttachments is a pointer to an array of slink:VkClearAttachment
+    structures defining the attachments to clear and the clear values to
+    use.
+  * pname:rectCount is the number of entries in the pname:pRects array.
+  * pname:pRects is a pointer to an array of slink:VkClearRect structures
+    defining regions within each selected attachment to clear.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a <<renderpass-fragmentdensitymapattachment,fragment
+density map attachment>>, clears follow the
+<<fragmentdensitymapops,operations of fragment density maps>> as if each
+clear region was a primitive which generates fragments.
+The clear color is applied to all pixels inside each fragment's area
+regardless if the pixels lie outside of the clear region.
+Clears may: have a different set of supported fragment areas than draws.
+endif::VK_EXT_fragment_density_map[]
+
+Unlike other <<clears,clear commands>>, flink:vkCmdClearAttachments is not a
+transfer command.
+It performs its operations in <<primsrast-order, rasterization order>>.
+For color attachments, the operations are executed as color attachment
+writes, by the ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage.
+For depth/stencil attachments, the operations are executed as
+<<fragops-depth, depth writes>> and <<fragops-stencil, stencil writes>> by
+the ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT and
+ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT stages.
+
+fname:vkCmdClearAttachments is not affected by the bound pipeline state.
+
+[NOTE]
+.Note
+====
+It is generally preferable to clear attachments by using the
+ename:VK_ATTACHMENT_LOAD_OP_CLEAR load operation at the start of rendering,
+as it is more efficient on some implementations.
+====
+
+If any attachment's pname:aspectMask to be cleared is not backed by an image
+view, the clear has no effect on that aspect.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If an attachment being cleared refers to an image view created with an
+pname:aspectMask equal to one of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_BIT, it
+is considered to be ename:VK_IMAGE_ASPECT_COLOR_BIT for purposes of this
+command, and must: be cleared with the ename:VK_IMAGE_ASPECT_COLOR_BIT
+aspect as specified by <<image-views-plane-promotion,image view creation>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearAttachments-aspectMask-07884]]
+    If
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the current render pass instance does not use dynamic rendering, and
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_DEPTH_BIT, the current subpass instance's
+    depth-stencil attachment must: be either ename:VK_ATTACHMENT_UNUSED or
+    the attachment pname:format must: contain a depth component
+  * [[VUID-vkCmdClearAttachments-aspectMask-07885]]
+    If
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the current render pass instance does not use dynamic rendering, and
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_STENCIL_BIT, the current subpass
+    instance's depth-stencil attachment must: be either
+    ename:VK_ATTACHMENT_UNUSED or the attachment pname:format must: contain
+    a stencil component
+  * [[VUID-vkCmdClearAttachments-aspectMask-07271]]
+    If the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the pname:colorAttachment
+    must: be a valid color attachment index in the current render pass
+    instance
+  * [[VUID-vkCmdClearAttachments-rect-02682]]
+    The pname:rect member of each element of pname:pRects must: have an
+    pname:extent.width greater than `0`
+  * [[VUID-vkCmdClearAttachments-rect-02683]]
+    The pname:rect member of each element of pname:pRects must: have an
+    pname:extent.height greater than `0`
+  * [[VUID-vkCmdClearAttachments-pRects-00016]]
+    The rectangular region specified by each element of pname:pRects must:
+    be contained within the render area of the current render pass instance
+  * [[VUID-vkCmdClearAttachments-pRects-06937]]
+    The layers specified by each element of pname:pRects must: be contained
+    within every attachment that pname:pAttachments refers to, i.e. for each
+    element of pname:pRects, slink:VkClearRect::pname:baseArrayLayer {plus}
+    slink:VkClearRect::pname:layerCount must: be less than or equal to the
+    number of layers rendered to in the current render pass instance
+  * [[VUID-vkCmdClearAttachments-layerCount-01934]]
+    The pname:layerCount member of each element of pname:pRects must: not be
+    `0`
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearAttachments-commandBuffer-02504]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    each attachment to be cleared must: not be a protected image
+  * [[VUID-vkCmdClearAttachments-commandBuffer-02505]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    each attachment to be cleared must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]]
+    If the render pass instance this is recorded in uses multiview, then
+    pname:baseArrayLayer must: be zero and pname:layerCount must: be one
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-vkCmdClearAttachments-aspectMask-09298]]
+    If the subpass this is recorded in performs an external format resolve,
+    the pname:aspectMask member of any element of pname:pAttachments must:
+    not include `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT` for any index _i_
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/protos/vkCmdClearAttachments.adoc[]
+--
+
+[open,refpage='VkClearRect',desc='Structure specifying a clear rectangle',type='structs']
+--
+The sname:VkClearRect structure is defined as:
+
+include::{generated}/api/structs/VkClearRect.adoc[]
+
+  * pname:rect is the two-dimensional region to be cleared.
+  * pname:baseArrayLayer is the first layer to be cleared.
+  * pname:layerCount is the number of layers to clear.
+
+The layers [eq]#[pname:baseArrayLayer, pname:baseArrayLayer {plus}
+pname:layerCount)# counting from the base layer of the attachment image view
+are cleared.
+
+include::{generated}/validity/structs/VkClearRect.adoc[]
+--
+
+[open,refpage='VkClearAttachment',desc='Structure specifying a clear attachment',type='structs']
+--
+The sname:VkClearAttachment structure is defined as:
+
+include::{generated}/api/structs/VkClearAttachment.adoc[]
+
+  * pname:aspectMask is a mask selecting the color, depth and/or stencil
+    aspects of the attachment to be cleared.
+  * pname:colorAttachment is only meaningful if
+    ename:VK_IMAGE_ASPECT_COLOR_BIT is set in pname:aspectMask, in which
+    case it is an index into the currently bound color attachments.
+  * pname:clearValue is the color or depth/stencil value to clear the
+    attachment to, as described in <<clears-values,Clear Values>> below.
+
+.Valid Usage
+****
+  * [[VUID-VkClearAttachment-aspectMask-00019]]
+    If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
+    not include ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-VkClearAttachment-aspectMask-00020]]
+    pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkClearAttachment-aspectMask-02246]]
+    pname:aspectMask must: not include
+    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkClearAttachment.adoc[]
+--
+
+
+[[clears-values]]
+== Clear Values
+
+[open,refpage='VkClearColorValue',desc='Structure specifying a clear color value',type='structs']
+--
+The sname:VkClearColorValue structure is defined as:
+
+include::{generated}/api/structs/VkClearColorValue.adoc[]
+
+  * pname:float32 are the color clear values when the format of the image or
+    attachment is one of the <<formats-numericformat, numeric formats>> with
+    a numeric type that is floating-point.
+    Floating point values are automatically converted to the format of the
+    image, with the clear value being treated as linear if the image is
+    sRGB.
+  * pname:int32 are the color clear values when the format of the image or
+    attachment has a numeric type that is signed integer (etext:SINT).
+    Signed integer values are converted to the format of the image by
+    casting to the smaller type (with negative 32-bit values mapping to
+    negative values in the smaller type).
+    If the integer clear value is not representable in the target type (e.g.
+    would overflow in conversion to that type), the clear value is
+    undefined:.
+  * pname:uint32 are the color clear values when the format of the image or
+    attachment has a numeric type that is unsigned integer (etext:UINT).
+    Unsigned integer values are converted to the format of the image by
+    casting to the integer type with fewer bits.
+
+The four array elements of the clear color map to R, G, B, and A components
+of image formats, in order.
+
+If the image has more than one sample, the same value is written to all
+samples for any pixels being cleared.
+
+include::{generated}/validity/structs/VkClearColorValue.adoc[]
+--
+
+[open,refpage='VkClearDepthStencilValue',desc='Structure specifying a clear depth stencil value',type='structs']
+--
+The sname:VkClearDepthStencilValue structure is defined as:
+
+include::{generated}/api/structs/VkClearDepthStencilValue.adoc[]
+
+  * pname:depth is the clear value for the depth aspect of the depth/stencil
+    attachment.
+    It is a floating-point value which is automatically converted to the
+    attachment's format.
+  * pname:stencil is the clear value for the stencil aspect of the
+    depth/stencil attachment.
+    It is a 32-bit integer value which is converted to the attachment's
+    format by taking the appropriate number of LSBs.
+
+.Valid Usage
+****
+  * [[VUID-VkClearDepthStencilValue-depth-00022]]
+ifdef::VK_EXT_depth_range_unrestricted[]
+    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
+endif::VK_EXT_depth_range_unrestricted[]
+    pname:depth must: be between `0.0` and `1.0`, inclusive
+****
+
+include::{generated}/validity/structs/VkClearDepthStencilValue.adoc[]
+--
+
+[open,refpage='VkClearValue',desc='Structure specifying a clear value',type='structs']
+--
+The sname:VkClearValue union is defined as:
+
+include::{generated}/api/structs/VkClearValue.adoc[]
+
+  * pname:color specifies the color image clear values to use when clearing
+    a color image or attachment.
+  * pname:depthStencil specifies the depth and stencil clear values to use
+    when clearing a depth/stencil image or attachment.
+
+This union is used where part of the API requires either color or
+depth/stencil clear values, depending on the attachment, and defines the
+initial clear values in the slink:VkRenderPassBeginInfo structure.
+
+include::{generated}/validity/structs/VkClearValue.adoc[]
+--
+
+
+[[clears-filling-buffers]]
+== Filling Buffers
+
+[open,refpage='vkCmdFillBuffer',desc='Fill a region of a buffer with a fixed value',type='protos']
+--
+To clear buffer data, call:
+
+include::{generated}/api/protos/vkCmdFillBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:dstBuffer is the buffer to be filled.
+  * pname:dstOffset is the byte offset into the buffer at which to start
+    filling, and must: be a multiple of 4.
+  * pname:size is the number of bytes to fill, and must: be either a
+    multiple of 4, or ename:VK_WHOLE_SIZE to fill the range from
+    pname:offset to the end of the buffer.
+    If ename:VK_WHOLE_SIZE is used and the remaining size of the buffer is
+    not a multiple of 4, then the nearest smaller multiple is used.
+  * pname:data is the 4-byte word written repeatedly to the buffer to fill
+    pname:size bytes of data.
+    The data word is written to memory according to the host endianness.
+
+fname:vkCmdFillBuffer is treated as a "`transfer`" operation for the
+purposes of synchronization barriers.
+The ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT must: be specified in pname:usage
+of slink:VkBufferCreateInfo in order for the buffer to be compatible with
+fname:vkCmdFillBuffer.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdFillBuffer-dstOffset-00024]]
+    pname:dstOffset must: be less than the size of pname:dstBuffer
+  * [[VUID-vkCmdFillBuffer-dstOffset-00025]]
+    pname:dstOffset must: be a multiple of `4`
+  * [[VUID-vkCmdFillBuffer-size-00026]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    greater than `0`
+  * [[VUID-vkCmdFillBuffer-size-00027]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    less than or equal to the size of pname:dstBuffer minus pname:dstOffset
+  * [[VUID-vkCmdFillBuffer-size-00028]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
+    multiple of `4`
+  * [[VUID-vkCmdFillBuffer-dstBuffer-00029]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdFillBuffer-apiVersion-07894]]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifndef::VKSC_VERSION_1_0[]
+    If the apiext:VK_KHR_maintenance1 extension is not enabled and
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1, the
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[The]
+    slink:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics or compute operations
+  * [[VUID-vkCmdFillBuffer-dstBuffer-00031]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single slink:VkDeviceMemory object
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdFillBuffer-commandBuffer-01811]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be a protected buffer
+  * [[VUID-vkCmdFillBuffer-commandBuffer-01812]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be an unprotected buffer
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdFillBuffer.adoc[]
+--
+
+
+[[clears-updating-buffers]]
+== Updating Buffers
+
+[open,refpage='vkCmdUpdateBuffer',desc='Update a buffer\'s contents from host memory',type='protos']
+--
+To update buffer data inline in a command buffer, call:
+
+include::{generated}/api/protos/vkCmdUpdateBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:dstBuffer is a handle to the buffer to be updated.
+  * pname:dstOffset is the byte offset into the buffer to start updating,
+    and must: be a multiple of 4.
+  * pname:dataSize is the number of bytes to update, and must: be a multiple
+    of 4.
+  * pname:pData is a pointer to the source data for the buffer update, and
+    must: be at least pname:dataSize bytes in size.
+
+pname:dataSize must: be less than or equal to 65536 bytes.
+For larger updates, applications can: use buffer to buffer
+<<copies-buffers,copies>>.
+
+[NOTE]
+.Note
+====
+Buffer updates performed with fname:vkCmdUpdateBuffer first copy the data
+into command buffer memory when the command is recorded (which requires
+additional storage and may incur an additional allocation), and then copy
+the data from the command buffer into pname:dstBuffer when the command is
+executed on a device.
+
+The additional cost of this functionality compared to <<copies-buffers,
+buffer to buffer copies>> means it is only recommended for very small
+amounts of data, and is why it is limited to only 65536 bytes.
+
+Applications can: work around this by issuing multiple
+fname:vkCmdUpdateBuffer commands to different ranges of the same buffer, but
+it is strongly recommended that they should: not.
+====
+
+The source data is copied from the user pointer to the command buffer when
+the command is called.
+
+fname:vkCmdUpdateBuffer is only allowed outside of a render pass.
+This command is treated as a "`transfer`" operation for the purposes of
+synchronization barriers.
+The ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT must: be specified in pname:usage
+of slink:VkBufferCreateInfo in order for the buffer to be compatible with
+fname:vkCmdUpdateBuffer.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdUpdateBuffer-dstOffset-00032]]
+    pname:dstOffset must: be less than the size of pname:dstBuffer
+  * [[VUID-vkCmdUpdateBuffer-dataSize-00033]]
+    pname:dataSize must: be less than or equal to the size of
+    pname:dstBuffer minus pname:dstOffset
+  * [[VUID-vkCmdUpdateBuffer-dstBuffer-00034]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdUpdateBuffer-dstBuffer-00035]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdUpdateBuffer-dstOffset-00036]]
+    pname:dstOffset must: be a multiple of `4`
+  * [[VUID-vkCmdUpdateBuffer-dataSize-00037]]
+    pname:dataSize must: be less than or equal to `65536`
+  * [[VUID-vkCmdUpdateBuffer-dataSize-00038]]
+    pname:dataSize must: be a multiple of `4`
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdUpdateBuffer-commandBuffer-01813]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be a protected buffer
+  * [[VUID-vkCmdUpdateBuffer-commandBuffer-01814]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be an unprotected buffer
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdUpdateBuffer.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+The pname:pData parameter was of type code:uint32_t* instead of code:void*
+prior to version 1.0.19 of the Specification and dlink:VK_HEADER_VERSION 19
+of the <<boilerplate-headers,Vulkan Header Files>>.
+This was a historical anomaly, as the source data may be of other types.
+====
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/cmdbuffers.adoc b/codegen/vulkan/vulkan-docs-next/chapters/cmdbuffers.adoc
new file mode 100644
index 0000000..910141b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/cmdbuffers.adoc
@@ -0,0 +1,3366 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[commandbuffers]]
+= Command Buffers
+
+[open,refpage='VkCommandBuffer',desc='Opaque handle to a command buffer object',type='handles']
+--
+Command buffers are objects used to record commands which can: be
+subsequently submitted to a device queue for execution.
+There are two levels of command buffers - _primary command buffers_, which
+can: execute secondary command buffers, and which are submitted to queues,
+and _secondary command buffers_, which can: be executed by primary command
+buffers, and which are not directly submitted to queues.
+
+Command buffers are represented by sname:VkCommandBuffer handles:
+
+include::{generated}/api/handles/VkCommandBuffer.adoc[]
+--
+
+Recorded commands include commands to bind pipelines and descriptor sets to
+the command buffer, commands to modify dynamic state, commands to draw (for
+graphics rendering), commands to dispatch (for compute), commands to execute
+secondary command buffers (for primary command buffers only), commands to
+copy buffers and images, and other commands.
+
+[[commandbuffers-statereset]]
+Each command buffer manages state independently of other command buffers.
+There is no inheritance of state across primary and secondary command
+buffers, or between secondary command buffers.
+When a command buffer begins recording, all state in that command buffer is
+undefined:.
+When secondary command buffer(s) are recorded to execute on a primary
+command buffer, the secondary command buffer inherits no state from the
+primary command buffer, and all state of the primary command buffer is
+undefined: after an execute secondary command buffer command is recorded.
+There is one exception to this rule - if the primary command buffer is
+inside a render pass instance, then the render pass and subpass state is not
+disturbed by executing secondary command buffers.
+For state dependent commands (such as draws and dispatches), any state
+consumed by those commands must: not be undefined:.
+
+ifdef::VK_NV_inherited_viewport_scissor[]
+slink:VkCommandBufferInheritanceViewportScissorInfoNV defines an exception
+allowing limited inheritance of dynamic viewport and scissor state.
+endif::VK_NV_inherited_viewport_scissor[]
+
+Unless otherwise specified, and without explicit synchronization, the
+various commands submitted to a queue via command buffers may: execute in
+arbitrary order relative to each other, and/or concurrently.
+Also, the memory side effects of those commands may: not be directly visible
+to other commands without explicit memory dependencies.
+This is true within a command buffer, and across command buffers submitted
+to a given queue.
+See <<synchronization, the synchronization chapter>> for information on
+<<synchronization-implicit, implicit>> and explicit synchronization between
+commands.
+
+
+[[commandbuffers-lifecycle]]
+== Command Buffer Lifecycle
+
+Each command buffer is always in one of the following states:
+
+Initial::
+    When a command buffer is <<vkAllocateCommandBuffers, allocated>>, it is
+    in the _initial state_.
+    Some commands are able to _reset_ a command buffer (or a set of command
+    buffers) back to this state from any of the executable, recording or
+    invalid state.
+    Command buffers in the initial state can: only be moved to the recording
+    state, or freed.
+Recording::
+    flink:vkBeginCommandBuffer changes the state of a command buffer from
+    the initial state to the _recording state_.
+    Once a command buffer is in the recording state, ftext:vkCmd* commands
+    can: be used to record to the command buffer.
+Executable::
+    flink:vkEndCommandBuffer ends the recording of a command buffer, and
+    moves it from the recording state to the _executable state_.
+    Executable command buffers can: be <<commandbuffers-submission,
+    submitted>>, reset, or <<commandbuffers-secondary, recorded to another
+    command buffer>>.
+Pending::
+    <<commandbuffers-submission, Queue submission>> of a command buffer
+    changes the state of a command buffer from the executable state to the
+    _pending state_.
+    Whilst in the pending state, applications must: not attempt to modify
+    the command buffer in any way - as the device may: be processing the
+    commands recorded to it.
+    Once execution of a command buffer completes, the command buffer either
+    reverts back to the _executable state_, or if it was recorded with
+    ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, it moves to the
+    _invalid state_.
+    A <<synchronization, synchronization>> command should: be used to detect
+    when this occurs.
+Invalid::
+    Some operations, such as <<fundamentals-objectmodel-lifetime-cmdbuffers,
+    modifying or deleting a resource>> that was used in a command recorded
+    to a command buffer, will transition the state of that command buffer
+    into the _invalid state_.
+    Command buffers in the invalid state can: only be reset or freed.
+
+[[commandbuffer-lifecycle-diagram]]
+image::{images}/commandbuffer_lifecycle.svg[title="Lifecycle of a command buffer",align="center",opts="{imageopts}"]
+
+Any given command that operates on a command buffer has its own requirements
+on what state a command buffer must: be in, which are detailed in the valid
+usage constraints for that command.
+
+Resetting a command buffer is an operation that discards any previously
+recorded commands and puts a command buffer in the _initial state_.
+Resetting occurs as a result of flink:vkResetCommandBuffer or
+flink:vkResetCommandPool, or as part of flink:vkBeginCommandBuffer (which
+additionally puts the command buffer in the _recording state_).
+
+<<commandbuffers-secondary, Secondary command buffers>> can: be recorded to
+a primary command buffer via flink:vkCmdExecuteCommands.
+This partially ties the lifecycle of the two command buffers together - if
+the primary is submitted to a queue, both the primary and any secondaries
+recorded to it move to the _pending state_.
+Once execution of the primary completes, so it does for any secondary
+recorded within it.
+After all executions of each command buffer complete, they each move to
+their appropriate completion state (either to the _executable state_ or the
+_invalid state_, as specified above).
+
+If a secondary moves to the _invalid state_ or the _initial state_, then all
+primary buffers it is recorded in move to the _invalid state_.
+A primary moving to any other state does not affect the state of a secondary
+recorded in it.
+
+[NOTE]
+.Note
+====
+Resetting or freeing a primary command buffer removes the lifecycle linkage
+to all secondary command buffers that were recorded into it.
+====
+
+
+[[commandbuffers-pools]]
+== Command Pools
+
+[open,refpage='VkCommandPool',desc='Opaque handle to a command pool object',type='handles']
+--
+Command pools are opaque objects that command buffer memory is allocated
+from, and which allow the implementation to amortize the cost of resource
+creation across multiple command buffers.
+Command pools are externally synchronized, meaning that a command pool must:
+not be used concurrently in multiple threads.
+That includes use via recording commands on any command buffers allocated
+from the pool, as well as operations that allocate, free, and reset command
+buffers or the pool itself.
+
+Command pools are represented by sname:VkCommandPool handles:
+
+include::{generated}/api/handles/VkCommandPool.adoc[]
+--
+
+[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
+--
+:refpage: vkCreateCommandPool
+:objectnameplural: command pools
+:objectnamecamelcase: commandPool
+:objectcount: 1
+
+To create a command pool, call:
+
+include::{generated}/api/protos/vkCreateCommandPool.adoc[]
+
+  * pname:device is the logical device that creates the command pool.
+  * pname:pCreateInfo is a pointer to a slink:VkCommandPoolCreateInfo
+    structure specifying the state of the command pool object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pCommandPool is a pointer to a slink:VkCommandPool handle in which
+    the created pool is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
+    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
+    available in the logical device pname:device
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCreateCommandPool.adoc[]
+--
+
+[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
+--
+The sname:VkCommandPoolCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandPoolCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
+    usage behavior for the pool and command buffers allocated from it.
+  * pname:queueFamilyIndex designates a queue family as described in section
+    <<devsandqueues-queueprops,Queue Family Properties>>.
+    All command buffers allocated from this command pool must: be submitted
+    on queues from the same queue family.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, the ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of
+    pname:flags must: not be set
+endif::VK_VERSION_1_1[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkCommandPoolCreateInfo-pNext-05002]]
+    The pname:pNext chain must: include a
+    slink:VkCommandPoolMemoryReservationCreateInfo structure
+endif::VKSC_VERSION_1_0[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * The slink:VkCommandPoolCreateInfo::pname:pNext chain must: include a
+    valid slink:VkCommandPoolMemoryReservationCreateInfo structure
+    <<SCID-4>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkCommandPoolCreateInfo.adoc[]
+--
+
+[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
+--
+Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags,
+specifying usage behavior for a command pool, are:
+
+include::{generated}/api/enums/VkCommandPoolCreateFlagBits.adoc[]
+
+  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
+    buffers allocated from the pool will be short-lived, meaning that they
+    will be reset or freed in a relatively short timeframe.
+    This flag may: be used by the implementation to control memory
+    allocation behavior within the pool.
+  * ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT allows any command
+    buffer allocated from a pool to be individually reset to the
+    <<commandbuffers-lifecycle, initial state>>; either by calling
+    flink:vkResetCommandBuffer, or via the implicit reset when calling
+    flink:vkBeginCommandBuffer.
+    If this flag is not set on a pool, then fname:vkResetCommandBuffer must:
+    not be called for any command buffer allocated from that pool.
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
+    buffers allocated from the pool are protected command buffers.
+endif::VK_VERSION_1_1[]
+--
+
+[open,refpage='VkCommandPoolCreateFlags',desc='Bitmask of VkCommandPoolCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCommandPoolCreateFlags.adoc[]
+
+tname:VkCommandPoolCreateFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandPoolCreateFlagBits.
+--
+
+ifdef::VKSC_VERSION_1_0[]
+
+[open,refpage='VkCommandPoolMemoryReservationCreateInfo',desc='Structure specifying command pool memory reservation info',type='structs']
+--
+
+The pname:pNext chain of slink:VkCommandPoolCreateInfo must: include a
+sname:VkCommandPoolMemoryReservationCreateInfo structure.
+This structure controls how much memory is allocated at command pool
+creation time to be used for all command buffers recorded from this pool.
+
+The sname:VkCommandPoolMemoryReservationCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandPoolMemoryReservationCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:commandPoolReservedSize is the number of bytes to be allocated for
+    all command buffer data recorded into this pool.
+  * pname:commandPoolMaxCommandBuffers is the maximum number of command
+    buffers that can be allocated from this command pool.
+
+The number of command buffers reserved using
+pname:commandPoolMaxCommandBuffers is permanently counted against the total
+number of command buffers requested via
+slink:VkDeviceObjectReservationCreateInfo::pname:commandBufferRequestCount
+even if the command buffers are freed at a later time.
+
+Each command recorded into a command buffer has an implementation-dependent
+size that counts against pname:commandPoolReservedSize.
+There is no minimum command pool size, but some sizes may be too small for
+any commands to be recorded in them on a given implementation.
+Applications are expected to estimate their worst-case command buffer memory
+usage at development time using flink:vkGetCommandPoolMemoryConsumption and
+reserve large enough command buffers.
+This command can: also be used at runtime to verify expected memory usage.
+
+While the memory consumption of a particular command is
+implementation-dependent, it is a deterministic function of the parameters
+to the command and of the objects used by the command (including the command
+buffer itself).
+Two command buffers will consume the same amount of pool memory if:
+
+  * all numerical parameters to each command match exactly,
+  * all objects used by each command are
+    <<glossary-identically-defined,identically defined>>, and
+  * the order of the commands is the same.
+
+[NOTE]
+.Note
+====
+The rules for identically defined objects apply recursively, implying for
+example that if the command buffers are created in different devices that
+those devices must have been created with the same features enabled.
+====
+
+Each command buffer may: require some base alignment in the pool, so the
+total pool memory will match if each command buffer's consumption matches
+and the command buffers are recorded one at a time and in the same order.
+
+If all these criteria are satisfied, then a command pool memory consumption
+returned by flink:vkGetCommandPoolMemoryConsumption will be sufficient to
+record the same command buffers again.
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkCommandPoolMemoryReservationCreateInfo <<SCID-4>>
+// end::scaddition[]
+endif::hidden[]
+
+.Valid Usage
+****
+  * [[VUID-VkCommandPoolMemoryReservationCreateInfo-commandPoolReservedSize-05003]]
+    pname:commandPoolReservedSize must: be greater than `0`
+  * [[VUID-VkCommandPoolMemoryReservationCreateInfo-commandPoolMaxCommandBuffers-05004]]
+    pname:commandPoolMaxCommandBuffers must: be greater than `0`
+  * [[VUID-VkCommandPoolMemoryReservationCreateInfo-commandPoolMaxCommandBuffers-05090]]
+    pname:commandPoolMaxCommandBuffers must: be less than or equal to
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxCommandPoolCommandBuffers
+  * [[VUID-VkCommandPoolMemoryReservationCreateInfo-commandPoolMaxCommandBuffers-05074]]
+    The number of command buffers reserved by all command pools plus
+    pname:commandPoolMaxCommandBuffers must: be less than or equal to the
+    total number of command buffers requested via
+    slink:VkDeviceObjectReservationCreateInfo::pname:commandBufferRequestCount
+****
+
+include::{generated}/validity/structs/VkCommandPoolMemoryReservationCreateInfo.adoc[]
+--
+
+[open,refpage='vkGetCommandPoolMemoryConsumption',desc='Get memory usage information for a command pool object',type='protos']
+--
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * flink:vkGetCommandPoolMemoryConsumption <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+
+To get memory usage information for a command pool object, call:
+
+include::{generated}/api/protos/vkGetCommandPoolMemoryConsumption.adoc[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:commandPool is the command pool from which to query the memory
+    usage.
+  * pname:commandBuffer is an optional command buffer from which to query
+    the memory usage.
+  * pname:pConsumption is a pointer to a
+    sname:VkCommandPoolMemoryConsumption structure where the memory usage is
+    written.
+
+include::{generated}/validity/protos/vkGetCommandPoolMemoryConsumption.adoc[]
+--
+
+[open,refpage='VkCommandPoolMemoryConsumption',desc='Structure where memory usage information is written',type='structs']
+--
+
+The sname:VkCommandPoolMemoryConsumption structure is defined as:
+
+include::{generated}/api/structs/VkCommandPoolMemoryConsumption.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:commandPoolAllocated is the number of bytes currently allocated
+    from this pool for command buffer data.
+  * pname:commandPoolReservedSize is the total number of bytes available for
+    all command buffer data recorded into this pool.
+    This is equal to the value requested in
+    slink:VkCommandPoolMemoryReservationCreateInfo::pname:commandPoolReservedSize.
+  * pname:commandBufferAllocated is the number of bytes currently allocated
+    from this pool for the specified command buffer's data.
+    This number will be less than or equal to
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxCommandBufferSize.
+    If no command buffer is specified, then this is set to zero.
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkCommandPoolMemoryConsumption <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkCommandPoolMemoryConsumption.adoc[]
+--
+
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkTrimCommandPool, fname:vkTrimCommandPoolKHR <<SCID-8>>
+  * tname:VkCommandPoolTrimFlags, tname:VkCommandPoolTrimFlagsKHR <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+[open,refpage='vkTrimCommandPool',desc='Trim a command pool',type='protos']
+--
+To trim a command pool, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkTrimCommandPool.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_maintenance1[or the equivalent command]
+
+ifdef::VK_KHR_maintenance1[]
+include::{generated}/api/protos/vkTrimCommandPoolKHR.adoc[]
+endif::VK_KHR_maintenance1[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:commandPool is the command pool to trim.
+  * pname:flags is reserved for future use.
+
+Trimming a command pool recycles unused memory from the command pool back to
+the system.
+Command buffers allocated from the pool are not affected by the command.
+
+[NOTE]
+.Note
+====
+This command provides applications with some control over the internal
+memory allocations used by command pools.
+
+Unused memory normally arises from command buffers that have been recorded
+and later reset, such that they are no longer using the memory.
+On reset, a command buffer can return memory to its command pool, but the
+only way to release memory from a command pool to the system requires
+calling flink:vkResetCommandPool, which cannot be executed while any command
+buffers from that pool are still in use.
+Subsequent recording operations into command buffers will reuse this memory
+but since total memory requirements fluctuate over time, unused memory can
+accumulate.
+
+In this situation, trimming a command pool may: be useful to return unused
+memory back to the system, returning the total outstanding memory allocated
+by the pool back to a more "`average`" value.
+
+Implementations utilize many internal allocation strategies that make it
+impossible to guarantee that all unused memory is released back to the
+system.
+For instance, an implementation of a command pool may: involve allocating
+memory in bulk from the system and sub-allocating from that memory.
+In such an implementation any live command buffer that holds a reference to
+a bulk allocation would prevent that allocation from being freed, even if
+only a small proportion of the bulk allocation is in use.
+
+In most cases trimming will result in a reduction in allocated but unused
+memory, but it does not guarantee the "`ideal`" behavior.
+
+Trimming may: be an expensive operation, and should: not be called
+frequently.
+Trimming should: be treated as a way to relieve memory pressure after
+application-known points when there exists enough unused memory that the
+cost of trimming is "`worth`" it.
+====
+
+include::{generated}/validity/protos/vkTrimCommandPool.adoc[]
+--
+
+[open,refpage='VkCommandPoolTrimFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkCommandPoolTrimFlags.adoc[]
+
+ifdef::VK_KHR_maintenance1[]
+or the equivalent
+
+include::{generated}/api/flags/VkCommandPoolTrimFlagsKHR.adoc[]
+endif::VK_KHR_maintenance1[]
+
+tname:VkCommandPoolTrimFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='vkResetCommandPool',desc='Reset a command pool',type='protos']
+--
+To reset a command pool, call:
+
+include::{generated}/api/protos/vkResetCommandPool.adoc[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:commandPool is the command pool to reset.
+  * pname:flags is a bitmask of elink:VkCommandPoolResetFlagBits controlling
+    the reset operation.
+
+Resetting a command pool recycles all of the resources from all of the
+command buffers allocated from the command pool back to the command pool.
+All command buffers that have been allocated from the command pool are put
+in the <<commandbuffers-lifecycle, initial state>>.
+
+Any primary command buffer allocated from another slink:VkCommandPool that
+is in the <<commandbuffers-lifecycle, recording or executable state>> and
+has a secondary command buffer allocated from pname:commandPool recorded
+into it, becomes <<commandbuffers-lifecycle, invalid>>.
+
+.Valid Usage
+****
+  * [[VUID-vkResetCommandPool-commandPool-00040]]
+    All sname:VkCommandBuffer objects allocated from pname:commandPool must:
+    not be in the <<commandbuffers-lifecycle, pending state>>
+****
+
+include::{generated}/validity/protos/vkResetCommandPool.adoc[]
+--
+
+[open,refpage='VkCommandPoolResetFlagBits',desc='Bitmask controlling behavior of a command pool reset',type='enums']
+--
+Bits which can: be set in flink:vkResetCommandPool::pname:flags, controlling
+the reset operation, are:
+
+include::{generated}/api/enums/VkCommandPoolResetFlagBits.adoc[]
+
+  * ename:VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
+ifndef::VKSC_VERSION_1_0[]
+    specifies that resetting a command pool recycles all of the resources
+    from the command pool back to the system.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+    is not supported in Vulkan SC <<SCID-4>>.
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkCommandPoolResetFlagBits
+  ** ename:VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+
+[open,refpage='VkCommandPoolResetFlags',desc='Bitmask of VkCommandPoolResetFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCommandPoolResetFlags.adoc[]
+
+tname:VkCommandPoolResetFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandPoolResetFlagBits.
+--
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkDestroyCommandPool <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+
+Command pools cannot: be destroyed or trimmed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, then the memory used by command pools is returned to the
+system when the device is destroyed.
+
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+
+[open,refpage='vkDestroyCommandPool',desc='Destroy a command pool object',type='protos']
+--
+To destroy a command pool, call:
+
+include::{generated}/api/protos/vkDestroyCommandPool.adoc[]
+
+  * pname:device is the logical device that destroys the command pool.
+  * pname:commandPool is the handle of the command pool to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+When a pool is destroyed, all command buffers allocated from the pool are
+<<vkFreeCommandBuffers, freed>>.
+
+Any primary command buffer allocated from another slink:VkCommandPool that
+is in the <<commandbuffers-lifecycle, recording or executable state>> and
+has a secondary command buffer allocated from pname:commandPool recorded
+into it, becomes <<commandbuffers-lifecycle, invalid>>.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyCommandPool-commandPool-00041]]
+    All sname:VkCommandBuffer objects allocated from pname:commandPool must:
+    not be in the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkDestroyCommandPool-commandPool-00042]]
+    If sname:VkAllocationCallbacks were provided when pname:commandPool was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyCommandPool-commandPool-00043]]
+    If no sname:VkAllocationCallbacks were provided when pname:commandPool
+    was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyCommandPool.adoc[]
+--
+
+endif::VKSC_VERSION_1_0[]
+
+[[commandbuffer-allocation]]
+== Command Buffer Allocation and Management
+
+[open,refpage='vkAllocateCommandBuffers',desc='Allocate command buffers from an existing command pool',type='protos']
+--
+:refpage: vkAllocateCommandBuffers
+
+To allocate command buffers, call:
+
+include::{generated}/api/protos/vkAllocateCommandBuffers.adoc[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:pAllocateInfo is a pointer to a slink:VkCommandBufferAllocateInfo
+    structure describing parameters of the allocation.
+  * pname:pCommandBuffers is a pointer to an array of slink:VkCommandBuffer
+    handles in which the resulting command buffer objects are returned.
+    The array must: be at least the length specified by the
+    pname:commandBufferCount member of pname:pAllocateInfo.
+    Each allocated command buffer begins in the initial state.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+fname:vkAllocateCommandBuffers can: be used to allocate multiple command
+buffers.
+If the allocation of any of those command buffers fails, the implementation
+must: free all successfully allocated command buffer objects from this
+command, set all entries of the pname:pCommandBuffers array to `NULL` and
+return the error.
+
+[NOTE]
+.Note
+====
+Filling pname:pCommandBuffers with `NULL` values on failure is an exception
+to the default error behavior that output parameters will have undefined:
+contents.
+====
+
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+When command buffers are first allocated, they are in the
+<<commandbuffers-lifecycle, initial state>>.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkAllocateCommandBuffers.adoc[]
+--
+
+[open,refpage='VkCommandBufferAllocateInfo',desc='Structure specifying the allocation parameters for command buffer object',type='structs']
+--
+The sname:VkCommandBufferAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandBufferAllocateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:commandPool is the command pool from which the command buffers are
+    allocated.
+  * pname:level is a elink:VkCommandBufferLevel value specifying the command
+    buffer level.
+  * pname:commandBufferCount is the number of command buffers to allocate
+    from the pool.
+
+ifdef::VKSC_VERSION_1_0[]
+The number of command buffers allocated using pname:commandBufferCount
+counts against the maximum number of command buffers reserved via
+slink:VkCommandPoolMemoryReservationCreateInfo::pname:commandPoolMaxCommandBuffers
+specified when pname:commandPool was created.
+Once command buffers are freed with flink:vkFreeCommandBuffers, they can be
+allocated from pname:commandPool again.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferAllocateInfo-commandPool-05006]]
+    The number of command buffers currently allocated from pname:commandPool
+    plus pname:commandBufferCount must: be less than or equal to the value
+    of
+    slink:VkCommandPoolMemoryReservationCreateInfo::pname:commandPoolMaxCommandBuffers
+    specified when pname:commandPool was created
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkCommandBufferAllocateInfo.adoc[]
+--
+
+[open,refpage='VkCommandBufferLevel',desc='Enumerant specifying a command buffer level',type='enums']
+--
+Possible values of slink:VkCommandBufferAllocateInfo::pname:level,
+specifying the command buffer level, are:
+
+include::{generated}/api/enums/VkCommandBufferLevel.adoc[]
+
+  * ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY specifies a primary command
+    buffer.
+  * ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY specifies a secondary command
+    buffer.
+--
+
+[open,refpage='vkResetCommandBuffer',desc='Reset a command buffer to the initial state',type='protos']
+--
+To reset a command buffer, call:
+
+include::{generated}/api/protos/vkResetCommandBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer to reset.
+    The command buffer can: be in any state other than
+    <<commandbuffers-lifecycle, pending>>, and is moved into the
+    <<commandbuffers-lifecycle, initial state>>.
+  * pname:flags is a bitmask of elink:VkCommandBufferResetFlagBits
+    controlling the reset operation.
+
+Any primary command buffer that is in the <<commandbuffers-lifecycle,
+recording or executable state>> and has pname:commandBuffer recorded into
+it, becomes <<commandbuffers-lifecycle, invalid>>.
+
+.Valid Usage
+****
+  * [[VUID-vkResetCommandBuffer-commandBuffer-00045]]
+    pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
+    pending state>>
+  * [[VUID-vkResetCommandBuffer-commandBuffer-00046]]
+    pname:commandBuffer must: have been allocated from a pool that was
+    created with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkResetCommandBuffer-commandPoolResetCommandBuffer-05135]]
+    <<limits-commandPoolResetCommandBuffer,pname:commandPoolResetCommandBuffer>>
+    must: be supported
+endif::VKSC_VERSION_1_0[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * If
+    <<limits-commandPoolResetCommandBuffer,pname:commandPoolResetCommandBuffer>>
+    is not supported <<SCID-8>>, flink:vkResetCommandBuffer must: not be
+    called.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkResetCommandBuffer.adoc[]
+--
+
+[open,refpage='VkCommandBufferResetFlagBits',desc='Bitmask controlling behavior of a command buffer reset',type='enums']
+--
+Bits which can: be set in flink:vkResetCommandBuffer::pname:flags,
+controlling the reset operation, are:
+
+include::{generated}/api/enums/VkCommandBufferResetFlagBits.adoc[]
+
+  * ename:VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT specifies that most
+    or all memory resources currently owned by the command buffer should: be
+    returned to the parent command pool.
+    If this flag is not set, then the command buffer may: hold onto memory
+    resources and reuse them when recording commands.
+    pname:commandBuffer is moved to the <<commandbuffers-lifecycle, initial
+    state>>.
+--
+
+[open,refpage='VkCommandBufferResetFlags',desc='Bitmask of VkCommandBufferResetFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCommandBufferResetFlags.adoc[]
+
+tname:VkCommandBufferResetFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandBufferResetFlagBits.
+--
+
+[open,refpage='vkFreeCommandBuffers',desc='Free command buffers',type='protos']
+--
+To free command buffers, call:
+
+include::{generated}/api/protos/vkFreeCommandBuffers.adoc[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:commandPool is the command pool from which the command buffers
+    were allocated.
+  * pname:commandBufferCount is the length of the pname:pCommandBuffers
+    array.
+  * pname:pCommandBuffers is a pointer to an array of handles of command
+    buffers to free.
+
+Any primary command buffer that is in the <<commandbuffers-lifecycle,
+recording or executable state>> and has any element of pname:pCommandBuffers
+recorded into it, becomes <<commandbuffers-lifecycle, invalid>>.
+
+ifdef::VKSC_VERSION_1_0[]
+Freeing a command buffer does not return the memory used by command
+recording back to its parent command pool.
+This memory will be reclaimed the next time flink:vkResetCommandPool is
+called.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkFreeCommandBuffers does not return the memory used by command
+    recording back to its parent command pool <<SCID-4>>.
+    This memory is reclaimed when flink:vkResetCommandPool is next called.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+  * [[VUID-vkFreeCommandBuffers-pCommandBuffers-00047]]
+    All elements of pname:pCommandBuffers must: not be in the
+    <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkFreeCommandBuffers-pCommandBuffers-00048]]
+    pname:pCommandBuffers must: be a valid pointer to an array of
+    pname:commandBufferCount sname:VkCommandBuffer handles, each element of
+    which must: either be a valid handle or `NULL`
+****
+
+include::{generated}/validity/protos/vkFreeCommandBuffers.adoc[]
+--
+
+
+[[commandbuffers-recording]]
+== Command Buffer Recording
+
+[open,refpage='vkBeginCommandBuffer',desc='Start recording a command buffer',type='protos']
+--
+
+:refpage: vkBeginCommandBuffer
+
+To begin recording a command buffer, call:
+
+include::{generated}/api/protos/vkBeginCommandBuffer.adoc[]
+
+  * pname:commandBuffer is the handle of the command buffer which is to be
+    put in the recording state.
+  * pname:pBeginInfo is a pointer to a slink:VkCommandBufferBeginInfo
+    structure defining additional information about how the command buffer
+    begins recording.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkBeginCommandBuffer-commandBuffer-00049]]
+    pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
+    recording or pending state>>
+  * [[VUID-vkBeginCommandBuffer-commandBuffer-00050]]
+    If pname:commandBuffer was allocated from a slink:VkCommandPool which
+    did not have the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
+    flag set, pname:commandBuffer must: be in the
+    <<commandbuffers-lifecycle, initial state>>
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkBeginCommandBuffer-commandPoolResetCommandBuffer-05136]]
+    If
+    <<limits-commandPoolResetCommandBuffer,pname:commandPoolResetCommandBuffer>>
+    is not supported, pname:commandBuffer must: be in the
+    <<commandbuffers-lifecycle, initial state>>
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-vkBeginCommandBuffer-commandBuffer-00051]]
+    If pname:commandBuffer is a secondary command buffer, the
+    pname:pInheritanceInfo member of pname:pBeginInfo must: be a valid
+    sname:VkCommandBufferInheritanceInfo structure
+  * [[VUID-vkBeginCommandBuffer-commandBuffer-00052]]
+    If pname:commandBuffer is a secondary command buffer and either the
+    pname:occlusionQueryEnable member of the pname:pInheritanceInfo member
+    of pname:pBeginInfo is ename:VK_FALSE, or the
+    <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>> feature
+    is not enabled, then pname:pBeginInfo->pInheritanceInfo->queryFlags
+    must: not contain ename:VK_QUERY_CONTROL_PRECISE_BIT
+  * [[VUID-vkBeginCommandBuffer-commandBuffer-02840]]
+    If pname:commandBuffer is a primary command buffer, then
+    pname:pBeginInfo->flags must: not set both the
+    ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT and the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flags
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkBeginCommandBuffer-commandPoolMultipleCommandBuffersRecording-05007]]
+    If
+    <<limits-commandPoolMultipleCommandBuffersRecording,pname:commandPoolMultipleCommandBuffersRecording>>
+    is ename:VK_FALSE, then the command pool that pname:commandBuffer was
+    created from must: have no other command buffers in the
+    <<commandbuffers-lifecycle, recording state>>
+  * [[VUID-vkBeginCommandBuffer-commandBufferSimultaneousUse-05008]]
+    If
+    <<limits-commandBufferSimultaneousUse,pname:commandBufferSimultaneousUse>>
+    is ename:VK_FALSE, then pname:pBeginInfo->flags must: not include
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
+endif::VKSC_VERSION_1_0[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:commandPoolMultipleCommandBuffersRecording
+    is ename:VK_FALSE, then only one command buffer from a command pool can
+    be in the <<commandbuffers-lifecycle, recording state>> at a time
+    <<SCID-8>>.
+  * If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:commandBufferSimultaneousUse
+    is ename:VK_FALSE, then slink:VkCommandBufferBeginInfo::pname:flags
+    must: not include ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
+    <<SCID-8>>.
+  * If
+    <<limits-commandPoolResetCommandBuffer,pname:commandPoolResetCommandBuffer>>
+    is not supported, pname:commandBuffer must: be in the
+    <<commandbuffers-lifecycle, initial state>> when
+    flink:vkBeginCommandBuffer is called <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkBeginCommandBuffer.adoc[]
+--
+
+[open,refpage='VkCommandBufferBeginInfo',desc='Structure specifying a command buffer begin operation',type='structs']
+--
+The sname:VkCommandBufferBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandBufferBeginInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkCommandBufferUsageFlagBits
+    specifying usage behavior for the command buffer.
+  * pname:pInheritanceInfo is a pointer to a
+    sname:VkCommandBufferInheritanceInfo structure, used if
+    pname:commandBuffer is a secondary command buffer.
+    If this is a primary command buffer, then this value is ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferBeginInfo-flags-09123]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
+    slink:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-00055]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
+    pname:framebuffer member of pname:pInheritanceInfo must: be either
+    dlink:VK_NULL_HANDLE, or a valid sname:VkFramebuffer that is compatible
+    with the pname:renderPass member of pname:pInheritanceInfo
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-05009]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and
+    pname:secondaryCommandBufferNullOrImagelessFramebuffer is ename:VK_TRUE,
+    the pname:framebuffer member of pname:pInheritanceInfo must: be either
+    dlink:VK_NULL_HANDLE, or a valid sname:VkFramebuffer that is compatible
+    with the pname:renderPass member of pname:pInheritanceInfo
+  * [[VUID-VkCommandBufferBeginInfo-flags-05010]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and
+    pname:secondaryCommandBufferNullOrImagelessFramebuffer is
+    ename:VK_FALSE, the pname:framebuffer member of pname:pInheritanceInfo
+    must: be a valid sname:VkFramebuffer that is compatible with the
+    pname:renderPass member of pname:pInheritanceInfo and must: not have
+    been created with a slink:VkFramebufferCreateInfo::pname:flags value
+    that includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-09240]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
+    <<features-dynamicRendering,pname:dynamicRendering>> feature is not
+    enabled, the pname:renderPass member of pname:pInheritanceInfo must: not
+    be dlink:VK_NULL_HANDLE
+  * [[VUID-VkCommandBufferBeginInfo-flags-06002]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
+    pname:renderPass member of pname:pInheritanceInfo is
+    dlink:VK_NULL_HANDLE, the pname:pNext chain of pname:pInheritanceInfo
+    must: include a slink:VkCommandBufferInheritanceRenderingInfo structure
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-06003]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
+    pname:renderPass member of pname:pInheritanceInfo is
+    dlink:VK_NULL_HANDLE, and the pname:pNext chain of
+    pname:pInheritanceInfo includes a slink:VkAttachmentSampleCountInfoAMD
+    or slink:VkAttachmentSampleCountInfoNV structure, the
+    pname:colorAttachmentCount member of that structure must: be equal to
+    the value of
+    slink:VkCommandBufferInheritanceRenderingInfo::pname:colorAttachmentCount
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-06000]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    and the pname:renderPass member of pname:pInheritanceInfo is not
+    dlink:VK_NULL_HANDLE,
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the pname:renderPass member of pname:pInheritanceInfo must: be a valid
+    sname:VkRenderPass
+  * [[VUID-VkCommandBufferBeginInfo-flags-06001]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    and the pname:renderPass member of pname:pInheritanceInfo is not
+    dlink:VK_NULL_HANDLE,
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    the pname:subpass member of pname:pInheritanceInfo must: be a valid
+    subpass index within the pname:renderPass member of
+    pname:pInheritanceInfo
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:secondaryCommandBufferNullOrImagelessFramebuffer
+    is ename:VK_FALSE, then
+    slink:VkCommandBufferInheritanceInfo:pname:framebuffer must: not be
+    dlink:VK_NULL_HANDLE and must: not have been created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that includes
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT if the command buffer will be
+    executed within a render pass instance <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkCommandBufferBeginInfo.adoc[]
+--
+
+[open,refpage='VkCommandBufferUsageFlagBits',desc='Bitmask specifying usage behavior for command buffer',type='enums']
+--
+Bits which can: be set in slink:VkCommandBufferBeginInfo::pname:flags,
+specifying usage behavior for a command buffer, are:
+
+include::{generated}/api/enums/VkCommandBufferUsageFlagBits.adoc[]
+
+  * ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT specifies that each
+    recording of the command buffer will only be submitted once, and the
+    command buffer will be reset and recorded again between each submission.
+  * ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT specifies that a
+    secondary command buffer is considered to be entirely inside a render
+    pass.
+    If this is a primary command buffer, then this bit is ignored.
+  * ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT specifies that a
+    command buffer can: be resubmitted to any queue of the same queue family
+    while it is in the _pending state_, and recorded into multiple primary
+    command buffers.
+--
+
+[open,refpage='VkCommandBufferUsageFlags',desc='Bitmask of VkCommandBufferUsageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCommandBufferUsageFlags.adoc[]
+
+tname:VkCommandBufferUsageFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandBufferUsageFlagBits.
+--
+
+[open,refpage='VkCommandBufferInheritanceInfo',desc='Structure specifying command buffer inheritance information',type='structs']
+--
+If the command buffer is a secondary command buffer, then the
+sname:VkCommandBufferInheritanceInfo structure defines any state that will
+be inherited from the primary command buffer:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:renderPass is a slink:VkRenderPass object defining which render
+    passes the sname:VkCommandBuffer will be <<renderpass-compatibility,
+    compatible>> with and can: be executed within.
+  * pname:subpass is the index of the subpass within the render pass
+    instance that the sname:VkCommandBuffer will be executed within.
+  * pname:framebuffer can: refer to the slink:VkFramebuffer object that the
+    sname:VkCommandBuffer will be rendering to if it is executed within a
+    render pass instance.
+    It can: be dlink:VK_NULL_HANDLE if the framebuffer is not known.
++
+[NOTE]
+.Note
+====
+Specifying the exact framebuffer that the secondary command buffer will be
+executed with may: result in better performance at command buffer execution
+time.
+====
+  * pname:occlusionQueryEnable specifies whether the command buffer can: be
+    executed while an occlusion query is active in the primary command
+    buffer.
+    If this is ename:VK_TRUE, then this command buffer can: be executed
+    whether the primary command buffer has an occlusion query active or not.
+    If this is ename:VK_FALSE, then the primary command buffer must: not
+    have an occlusion query active.
+  * pname:queryFlags specifies the query flags that can: be used by an
+    active occlusion query in the primary command buffer when this secondary
+    command buffer is executed.
+    If this value includes the ename:VK_QUERY_CONTROL_PRECISE_BIT bit, then
+    the active query can: return boolean results or actual sample counts.
+    If this bit is not set, then the active query must: not use the
+    ename:VK_QUERY_CONTROL_PRECISE_BIT bit.
+  * pname:pipelineStatistics is a bitmask of
+    elink:VkQueryPipelineStatisticFlagBits specifying the set of pipeline
+    statistics that can: be counted by an active query in the primary
+    command buffer when this secondary command buffer is executed.
+    If this value includes a given bit, then this command buffer can: be
+    executed whether the primary command buffer has a pipeline statistics
+    query active that includes this bit or not.
+    If this value excludes a given bit, then the active pipeline statistics
+    query must: not be from a query pool that counts that statistic.
+
+If the slink:VkCommandBuffer will not be executed within a render pass
+instance,
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+or if the render pass instance was begun with flink:vkCmdBeginRendering,
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+pname:renderPass, pname:subpass, and pname:framebuffer are ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056]]
+    If the <<features-inheritedQueries, pname:inheritedQueries>> feature is
+    not enabled, pname:occlusionQueryEnable must: be ename:VK_FALSE
+  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-00057]]
+    If the <<features-inheritedQueries, pname:inheritedQueries>> feature is
+    enabled, pname:queryFlags must: be a valid combination of
+    elink:VkQueryControlFlagBits values
+  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-02788]]
+    If the <<features-inheritedQueries, pname:inheritedQueries>> feature is
+    not enabled, pname:queryFlags must: be code:0
+  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789]]
+    If the <<features-pipelineStatisticsQuery,
+    pname:pipelineStatisticsQuery>> feature is enabled,
+    pname:pipelineStatistics must: be a valid combination of
+    elink:VkQueryPipelineStatisticFlagBits values
+  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058]]
+    If the <<features-pipelineStatisticsQuery,
+    pname:pipelineStatisticsQuery>> feature is not enabled,
+    pname:pipelineStatistics must: be code:0
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceInfo.adoc[]
+--
+
+[NOTE]
+.Note
+====
+On some implementations, not using the
+ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT bit enables command
+buffers to be patched in-place if needed, rather than creating a copy of the
+command buffer.
+====
+
+If a command buffer is in the <<commandbuffers-lifecycle, invalid, or
+executable state>>, and the command buffer was allocated from a command pool
+with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT flag set,
+then fname:vkBeginCommandBuffer implicitly resets the command buffer,
+behaving as if fname:vkResetCommandBuffer had been called with
+ename:VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT not set.
+After the implicit reset, pname:commandBuffer is moved to the
+<<commandbuffers-lifecycle, recording state>>.
+
+ifdef::VK_EXT_conditional_rendering[]
+[open,refpage='VkCommandBufferInheritanceConditionalRenderingInfoEXT',desc='Structure specifying command buffer inheritance information',type='structs']
+--
+If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
+sname:VkCommandBufferInheritanceConditionalRenderingInfoEXT structure, then
+that structure controls whether a command buffer can: be executed while
+conditional rendering is <<active-conditional-rendering,active>> in the
+primary command buffer.
+
+The sname:VkCommandBufferInheritanceConditionalRenderingInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceConditionalRenderingInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:conditionalRenderingEnable specifies whether the command buffer
+    can: be executed while conditional rendering is active in the primary
+    command buffer.
+    If this is ename:VK_TRUE, then this command buffer can: be executed
+    whether the primary command buffer has active conditional rendering or
+    not.
+    If this is ename:VK_FALSE, then the primary command buffer must: not
+    have conditional rendering active.
+
+If this structure is not present, the behavior is as if
+pname:conditionalRenderingEnable is ename:VK_FALSE.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-conditionalRenderingEnable-01977]]
+    If the <<features-inheritedConditionalRendering,
+    pname:inheritedConditionalRendering>> feature is not enabled,
+    pname:conditionalRenderingEnable must: be ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceConditionalRenderingInfoEXT.adoc[]
+--
+endif::VK_EXT_conditional_rendering[]
+
+ifdef::VK_QCOM_render_pass_transform[]
+[open,refpage='VkCommandBufferInheritanceRenderPassTransformInfoQCOM',desc='Structure describing transformed render pass parameters command buffer',type='structs']
+--
+To begin recording a secondary command buffer compatible with execution
+inside a render pass using <<vertexpostproc-renderpass-transform, render
+pass transform>>, add the
+slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM to the
+pname:pNext chain of slink:VkCommandBufferInheritanceInfo structure passed
+to the flink:vkBeginCommandBuffer command specifying the parameters for
+transformed rasterization.
+
+The sname:VkCommandBufferInheritanceRenderPassTransformInfoQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
+    describing the transform to be applied to the render pass.
+  * pname:renderArea is the render area that is affected by the command
+    buffer.
+
+When the secondary is recorded to execute within a render pass instance
+using flink:vkCmdExecuteCommands, the render pass transform parameters of
+the secondary command buffer must: be consistent with the render pass
+transform parameters specified for the render pass instance.
+In particular, the pname:transform and pname:renderArea for command buffer
+must: be identical to the pname:transform and pname:renderArea of the render
+pass instance.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864]]
+    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
+    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.adoc[]
+--
+endif::VK_QCOM_render_pass_transform[]
+
+ifdef::VK_NV_inherited_viewport_scissor[]
+[open,refpage='VkCommandBufferInheritanceViewportScissorInfoNV',desc='Structure specifying command buffer inheritance information',type='structs']
+--
+The sname:VkCommandBufferInheritanceViewportScissorInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceViewportScissorInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:viewportScissor2D specifies whether the listed dynamic state is
+    inherited.
+  * pname:viewportDepthCount specifies the maximum number of viewports to
+    inherit.
+    When pname:viewportScissor2D is ename:VK_FALSE, the behavior is as if
+    this value is zero.
+  * pname:pViewportDepths is a pointer to a slink:VkViewport structure
+    specifying the expected depth range for each inherited viewport.
+
+If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
+sname:VkCommandBufferInheritanceViewportScissorInfoNV structure, then that
+structure controls whether a command buffer can: inherit the following state
+from other command buffers:
+
+  * ename:VK_DYNAMIC_STATE_SCISSOR
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_discard_rectangles[]
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT
+endif::VK_EXT_discard_rectangles[]
+
+as well as the following state, with restrictions on inherited depth values
+and viewport count:
+
+  * ename:VK_DYNAMIC_STATE_VIEWPORT
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+
+If pname:viewportScissor2D is ename:VK_FALSE, then the command buffer does
+not inherit the listed dynamic state, and should: set this state itself.
+If this structure is not present, the behavior is as if
+pname:viewportScissor2D is ename:VK_FALSE.
+
+If pname:viewportScissor2D is ename:VK_TRUE, then the listed dynamic state
+is inherited, and the command buffer must: not set this
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[state.]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+state, except that the viewport and scissor count may: be set by binding a
+graphics pipeline that does not specify this state as dynamic.
+
+[NOTE]
+.Note
+====
+Due to this restriction, applications should: ensure either all or none of
+the graphics pipelines bound in this secondary command buffer use dynamic
+viewport/scissor counts.
+====
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+
+When the command buffer is executed as part of a the execution of a
+flink:vkCmdExecuteCommands command, the inherited state (if enabled) is
+determined by the following procedure, performed separately for each dynamic
+state, and separately for each value for dynamic state that consists of
+multiple values (e.g. multiple viewports).
+
+  * With [eq]#i# being the index of the executed command buffer in the
+    pname:pCommandBuffers array of flink:vkCmdExecuteCommands, if [eq]#i >
+    0# and any secondary command buffer from index [eq]#0# to [eq]#i-1#
+    modifies the state, the inherited state is provisionally set to the
+    final value set by the last such secondary command buffer.
+    Binding a graphics pipeline defining the state statically is equivalent
+    to setting the state to an undefined: value.
+  * Otherwise, the tentatative inherited state is that of the primary
+    command buffer at the point the flink:vkCmdExecuteCommands command was
+    recorded; if the state is undefined:, then so is the provisional
+    inherited state.
+  * If the provisional inherited state is an undefined: value, then the
+    state is not inherited.
+  * If the provisional inherited state is a viewport, with [eq]#n# being its
+    viewport index, then if [eq]#n {geq} pname:viewportDepthCount#, or if
+    either slink:VkViewport::pname:minDepth or
+    slink:VkViewport::pname:maxDepth are not equal to the respective values
+    of the [eq]#n^th^# element of pname:pViewportDepths, then the state is
+    not inherited.
+  * If the provisional inherited state passes both checks, then it becomes
+    the actual inherited state.
+
+[NOTE]
+.Note
+====
+There is no support for inheriting dynamic state from a secondary command
+buffer executed as part of a different `vkCmdExecuteCommands` command.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04782]]
+    If the <<features-inheritedViewportScissor2D,
+    pname:inheritedViewportScissor2D>> feature is not enabled,
+    pname:viewportScissor2D must: be ename:VK_FALSE
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04783]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled and pname:viewportScissor2D is ename:VK_TRUE, then
+    pname:viewportDepthCount must: be `1`
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04784]]
+    If pname:viewportScissor2D is ename:VK_TRUE, then
+    pname:viewportDepthCount must: be greater than `0`
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04785]]
+    If pname:viewportScissor2D is ename:VK_TRUE, then pname:pViewportDepths
+    must: be a valid pointer to an array of `viewportDepthCount` valid
+    sname:VkViewport structures, except any requirements on `x`, `y`,
+    `width`, and `height` do not apply
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04786]]
+    If pname:viewportScissor2D is ename:VK_TRUE, then the command buffer
+    must: be recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceViewportScissorInfoNV.adoc[]
+--
+endif::VK_NV_inherited_viewport_scissor[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+[open,refpage='VkCommandBufferInheritanceRenderingInfo',desc='Structure specifying command buffer inheritance info for dynamic render pass instances',type='structs',alias='VkCommandBufferInheritanceRenderingInfoKHR']
+--
+The sname:VkCommandBufferInheritanceRenderingInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceRenderingInfo.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/structs/VkCommandBufferInheritanceRenderingInfoKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:flags is a bitmask of elink:VkRenderingFlagBits used by the render
+    pass instance.
+  * pname:viewMask is the view mask used for rendering.
+  * pname:colorAttachmentCount is the number of color attachments specified
+    in the render pass instance.
+  * pname:pColorAttachmentFormats is a pointer to an array of elink:VkFormat
+    values defining the format of color attachments.
+  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
+    format of the depth attachment.
+  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
+    format of the stencil attachment.
+  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits specifying
+    the number of samples used in rasterization.
+
+If the pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes a
+sname:VkCommandBufferInheritanceRenderingInfo structure, then that structure
+controls parameters of dynamic render pass instances that the
+slink:VkCommandBuffer can: be executed within.
+If slink:VkCommandBufferInheritanceInfo::pname:renderPass is not
+dlink:VK_NULL_HANDLE, or
+ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not specified in
+slink:VkCommandBufferBeginInfo::pname:flags, parameters of this structure
+are ignored.
+
+If pname:colorAttachmentCount is `0` and the
+<<features-variableMultisampleRate, pname:variableMultisampleRate>> feature
+is enabled, pname:rasterizationSamples is ignored.
+
+If pname:depthAttachmentFormat, pname:stencilAttachmentFormat, or any
+element of pname:pColorAttachmentFormats is ename:VK_FORMAT_UNDEFINED, it
+indicates that the corresponding attachment is unused within the render pass
+and writes to those attachments are discarded.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-colorAttachmentCount-06004]]
+    If pname:colorAttachmentCount is not `0`, pname:rasterizationSamples
+    must: be a valid elink:VkSampleCountFlagBits value
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-variableMultisampleRate-06005]]
+    If the <<features-variableMultisampleRate,
+    pname:variableMultisampleRate>> feature is not enabled,
+    pname:rasterizationSamples must: be a valid elink:VkSampleCountFlagBits
+    value
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06540]]
+    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
+    must: be a format that includes a depth component
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06007]]
+    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
+    must: be a format with <<potential-format-features, potential format
+    features>> that include
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-pColorAttachmentFormats-06492]]
+    If any element of pname:pColorAttachmentFormats is not
+    ename:VK_FORMAT_UNDEFINED, it must: be a format with
+    <<potential-format-features, potential format features>> that include
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+    , or ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV if the
+    <<features-linearColorAttachment, pname:linearColorAttachment>> feature
+    is enabled
+endif::VK_NV_linear_color_attachment[]
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06541]]
+    If pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
+    must: be a format that includes a stencil aspect
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06199]]
+    If pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED, it
+    must: be a format with <<potential-format-features, potential format
+    features>> that include
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06200]]
+    If pname:depthAttachmentFormat is not ename:VK_FORMAT_UNDEFINED and
+    pname:stencilAttachmentFormat is not ename:VK_FORMAT_UNDEFINED,
+    pname:depthAttachmentFormat must: equal pname:stencilAttachmentFormat
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-multiview-06008]]
+    If the <<features-multiview, pname:multiview>> feature is not enabled,
+    pname:viewMask must: be `0`
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkCommandBufferInheritanceRenderingInfo-viewMask-06009]]
+    The index of the most significant bit in pname:viewMask must: be less
+    than <<limits-maxMultiviewViewCount, pname:maxMultiviewViewCount>>
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceRenderingInfo.adoc[]
+--
+
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+[open,refpage='VkAttachmentSampleCountInfoAMD',desc='Structure specifying command buffer inheritance info for dynamic render pass instances',type='structs',alias='VkAttachmentSampleCountInfoNV']
+--
+The
+ifdef::VK_AMD_mixed_attachment_samples[sname:VkAttachmentSampleCountInfoAMD]
+ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or]
+ifdef::VK_NV_framebuffer_mixed_samples[sname:VkAttachmentSampleCountInfoNV]
+structure is defined as:
+
+ifdef::VK_AMD_mixed_attachment_samples[]
+include::{generated}/api/structs/VkAttachmentSampleCountInfoAMD.adoc[]
+endif::VK_AMD_mixed_attachment_samples[]
+
+ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or the equivalent]
+
+ifdef::VK_NV_framebuffer_mixed_samples[]
+include::{generated}/api/structs/VkAttachmentSampleCountInfoNV.adoc[]
+endif::VK_NV_framebuffer_mixed_samples[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:colorAttachmentCount is the number of color attachments specified
+    in a render pass instance.
+  * pname:pColorAttachmentSamples is a pointer to an array of
+    elink:VkSampleCountFlagBits values defining the sample count of color
+    attachments.
+  * pname:depthStencilAttachmentSamples is a elink:VkSampleCountFlagBits
+    value defining the sample count of a depth/stencil attachment.
+
+If slink:VkCommandBufferInheritanceInfo::pname:renderPass is
+dlink:VK_NULL_HANDLE, ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+is specified in slink:VkCommandBufferBeginInfo::pname:flags, and the
+pname:pNext chain of slink:VkCommandBufferInheritanceInfo includes
+sname:VkAttachmentSampleCountInfoAMD, then this structure defines the sample
+counts of each attachment within the render pass instance.
+If sname:VkAttachmentSampleCountInfoAMD is not included, the value of
+slink:VkCommandBufferInheritanceRenderingInfo::pname:rasterizationSamples is
+used as the sample count for each attachment.
+If slink:VkCommandBufferInheritanceInfo::pname:renderPass is not
+dlink:VK_NULL_HANDLE, or
+ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not specified in
+slink:VkCommandBufferBeginInfo::pname:flags, parameters of this structure
+are ignored.
+
+sname:VkAttachmentSampleCountInfoAMD can: also be included in the
+pname:pNext chain of slink:VkGraphicsPipelineCreateInfo.
+When a graphics pipeline is created without a slink:VkRenderPass, if this
+structure is included in the pname:pNext chain of
+slink:VkGraphicsPipelineCreateInfo, it specifies the sample count of
+attachments used for rendering.
+If this structure is not specified, and the pipeline does not include a
+slink:VkRenderPass, the value of
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples is
+used as the sample count for each attachment.
+If a graphics pipeline is created with a valid slink:VkRenderPass,
+parameters of this structure are ignored.
+
+include::{generated}/validity/structs/VkAttachmentSampleCountInfoAMD.adoc[]
+--
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+
+Once recording starts, an application records a sequence of commands
+(ftext:vkCmd*) to set state in the command buffer, draw, dispatch, and other
+commands.
+
+ifdef::VK_NV_device_generated_commands[]
+Several commands can also be recorded indirectly from sname:VkBuffer
+content, see <<device-generated-commands>>.
+endif::VK_NV_device_generated_commands[]
+
+[open,refpage='vkEndCommandBuffer',desc='Finish recording a command buffer',type='protos']
+--
+
+:refpage: vkEndCommandBuffer
+
+To complete recording of a command buffer, call:
+
+include::{generated}/api/protos/vkEndCommandBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer to complete recording.
+
+The command buffer must: have been in the <<commandbuffers-lifecycle,
+recording state>>, and, if successful, is moved to the
+<<commandbuffers-lifecycle, executable state>>.
+
+If there was an error during recording, the application will be notified by
+an unsuccessful return code returned by fname:vkEndCommandBuffer, and the
+command buffer will be moved to the <<commandbuffers-lifecycle, invalid
+state>>.
+
+ifdef::VK_KHR_video_encode_queue[]
+In case the application recorded one or more <<video-encode-operations,video
+encode operations>> into the command buffer, implementations may: return the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error if any of the
+specified Video Std parameters do not adhere to the syntactic or semantic
+requirements of the used video compression standard, or if values derived
+from parameters according to the rules defined by the used video compression
+standard do not adhere to the capabilities of the video compression standard
+or the implementation.
+
+[NOTE]
+.Note
+====
+Applications should: not rely on the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error being returned by any
+command as a means to verify Video Std parameters, as implementations are
+not required to report the error in any specific set of cases.
+====
+endif::VK_KHR_video_encode_queue[]
+
+ifdef::VKSC_VERSION_1_0[]
+If recording a command would exceed the amount of command pool memory
+reserved by
+slink:VkCommandPoolMemoryReservationCreateInfo::pname:commandPoolReservedSize,
+the implementation may: report a ename:VK_FAULT_TYPE_COMMAND_BUFFER_FULL
+fault.
+The command buffer remains in the <<commandbuffers-lifecycle, recording
+state>> until fname:vkEndCommandBuffer is called.
+When fname:vkEndCommandBuffer is called on a command buffer for which the
+command pool memory reservation was exceeded during recording, it must:
+return ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+endif::VKSC_VERSION_1_0[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkEndCommandBuffer-commandBuffer-00059]]
+    pname:commandBuffer must: be in the <<commandbuffers-lifecycle,
+    recording state>>
+  * [[VUID-vkEndCommandBuffer-commandBuffer-00060]]
+    If pname:commandBuffer is a primary command buffer, there must: not be
+    an active render pass instance
+  * [[VUID-vkEndCommandBuffer-commandBuffer-00061]]
+    All queries made <<queries-operation-active,active>> during the
+    recording of pname:commandBuffer must: have been made inactive
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-vkEndCommandBuffer-None-01978]]
+    Conditional rendering must: not be
+    <<active-conditional-rendering,active>>
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_KHR_video_queue[]
+  * [[VUID-vkEndCommandBuffer-None-06991]]
+    There must: be no video session object bound
+endif::VK_KHR_video_queue[]
+ifdef::VK_EXT_debug_utils[]
+  * [[VUID-vkEndCommandBuffer-commandBuffer-01815]]
+    If pname:commandBuffer is a secondary command buffer, there must: not be
+    an outstanding flink:vkCmdBeginDebugUtilsLabelEXT command recorded to
+    pname:commandBuffer that has not previously been ended by a call to
+    flink:vkCmdEndDebugUtilsLabelEXT
+endif::VK_EXT_debug_utils[]
+ifdef::VK_EXT_debug_marker[]
+  * [[VUID-vkEndCommandBuffer-commandBuffer-00062]]
+    If pname:commandBuffer is a secondary command buffer, there must: not be
+    an outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
+    pname:commandBuffer that has not previously been ended by a call to
+    flink:vkCmdDebugMarkerEndEXT
+endif::VK_EXT_debug_marker[]
+****
+
+include::{generated}/validity/protos/vkEndCommandBuffer.adoc[]
+--
+
+When a command buffer is in the executable state, it can: be submitted to a
+queue for execution.
+
+
+[[commandbuffers-submission]]
+== Command Buffer Submission
+
+[NOTE]
+.Note
+====
+Submission can be a high overhead operation, and applications should:
+attempt to batch work together into as few calls to fname:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+or fname:vkQueueSubmit2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+as possible.
+====
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkQueueSubmit2',desc='Submits command buffers to a queue',type='protos',alias='vkQueueSubmit2KHR']
+--
+
+:refpage: vkQueueSubmit2KHR
+
+To submit command buffers to a queue, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkQueueSubmit2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkQueueSubmit2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:queue is the queue that the command buffers will be submitted to.
+  * pname:submitCount is the number of elements in the pname:pSubmits array.
+  * pname:pSubmits is a pointer to an array of slink:VkSubmitInfo2
+    structures, each specifying a command buffer submission batch.
+  * pname:fence is an optional: handle to a fence to be signaled once all
+    submitted command buffers have completed execution.
+    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
+    <<synchronization-fences-signaling, fence signal operation>>.
+
+fname:vkQueueSubmit2 is a <<devsandqueues-submission,queue submission
+command>>, with each batch defined by an element of pname:pSubmits.
+
+Semaphore operations submitted with flink:vkQueueSubmit2 have additional
+ordering constraints compared to other submission commands, with
+dependencies involving previous and subsequent queue operations.
+Information about these additional constraints can be found in the
+<<synchronization-semaphores, semaphore>> section of <<synchronization, the
+synchronization chapter>>.
+
+If any command buffer submitted to this queue is in the
+<<commandbuffers-lifecycle, executable state>>, it is moved to the
+<<commandbuffers-lifecycle, pending state>>.
+Once execution of all submissions of a command buffer complete, it moves
+from the <<commandbuffers-lifecycle, pending state>>, back to the
+<<commandbuffers-lifecycle, executable state>>.
+If a command buffer was recorded with the
+ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT flag, it instead moves
+back to the <<commandbuffers-lifecycle, invalid state>>.
+
+If fname:vkQueueSubmit2 fails, it may: return
+ename:VK_ERROR_OUT_OF_HOST_MEMORY or ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+If it does, the implementation must: ensure that the state and contents of
+any resources or synchronization primitives referenced by the submitted
+command buffers and any semaphores referenced by pname:pSubmits is
+unaffected by the call or its failure.
+If fname:vkQueueSubmit2 fails in such a way that the implementation is
+unable to make that guarantee, the implementation must: return
+ename:VK_ERROR_DEVICE_LOST.
+See <<devsandqueues-lost-device,Lost Device>>.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkQueueSubmit2-fence-04894]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
+    unsignaled
+  * [[VUID-vkQueueSubmit2-fence-04895]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
+    associated with any other queue command that has not yet completed
+    execution on that queue
+  * [[VUID-vkQueueSubmit2-synchronization2-03866]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkQueueSubmit2-commandBuffer-03867]]
+    If a command recorded into the pname:commandBuffer member of any element
+    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
+    referenced an slink:VkEvent, that event must: not be referenced by a
+    command that has been submitted to another queue and is still in the
+    _pending state_
+  * [[VUID-vkQueueSubmit2-semaphore-03868]]
+    The pname:semaphore member of any binary semaphore element of the
+    pname:pSignalSemaphoreInfos member of any element of pname:pSubmits
+    must: be unsignaled when the semaphore signal operation it defines is
+    executed on the device
+  * [[VUID-vkQueueSubmit2-stageMask-03869]]
+    The pname:stageMask member of any element of the
+    pname:pSignalSemaphoreInfos member of any element of pname:pSubmits
+    must: only include pipeline stages that are supported by the queue
+    family which pname:queue belongs to
+  * [[VUID-vkQueueSubmit2-stageMask-03870]]
+    The pname:stageMask member of any element of the
+    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits must:
+    only include pipeline stages that are supported by the queue family
+    which pname:queue belongs to
+  * [[VUID-vkQueueSubmit2-semaphore-03871]]
+    When a semaphore wait operation for a binary semaphore is executed, as
+    defined by the pname:semaphore member of any element of the
+    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits, there
+    must: be no other queues waiting on the same semaphore
+  * [[VUID-vkQueueSubmit2-semaphore-03873]]
+    The pname:semaphore member of any element of the
+    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    that was created with a elink:VkSemaphoreTypeKHR of
+    ename:VK_SEMAPHORE_TYPE_BINARY_KHR
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    must: reference a semaphore signal operation that has been submitted for
+    execution and any <<synchronization-semaphores-signaling, semaphore
+    signal operations>> on which it depends must: have also been submitted
+    for execution
+  * [[VUID-vkQueueSubmit2-commandBuffer-03874]]
+    The pname:commandBuffer member of any element of the
+    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
+    be in the <<commandbuffers-lifecycle, pending or executable state>>
+  * [[VUID-vkQueueSubmit2-commandBuffer-03875]]
+    If a command recorded into the pname:commandBuffer member of any element
+    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
+    was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
+    the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkQueueSubmit2-commandBuffer-03876]]
+    Any <<commandbuffers-secondary, secondary command buffers recorded>>
+    into the pname:commandBuffer member of any element of the
+    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
+    be in the <<commandbuffers-lifecycle, pending or executable state>>
+  * [[VUID-vkQueueSubmit2-commandBuffer-03877]]
+    If any <<commandbuffers-secondary, secondary command buffers recorded>>
+    into the pname:commandBuffer member of any element of the
+    pname:pCommandBufferInfos member of any element of pname:pSubmits was
+    not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
+    the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkQueueSubmit2-commandBuffer-03878]]
+    The pname:commandBuffer member of any element of the
+    pname:pCommandBufferInfos member of any element of pname:pSubmits must:
+    have been allocated from a sname:VkCommandPool that was created for the
+    same queue family pname:queue belongs to
+  * [[VUID-vkQueueSubmit2-commandBuffer-03879]]
+    If a command recorded into the pname:commandBuffer member of any element
+    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
+    includes a <<synchronization-queue-transfers-acquire, Queue Family
+    Transfer Acquire Operation>>, there must: exist a previously submitted
+    <<synchronization-queue-transfers-release, Queue Family Transfer Release
+    Operation>> on a queue in the queue family identified by the acquire
+    operation, with parameters matching the acquire operation as defined in
+    the definition of such <<synchronization-queue-transfers-acquire,
+    acquire operations>>, and which happens before the acquire operation
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkQueueSubmit2-commandBuffer-03880]]
+    If a command recorded into the pname:commandBuffer member of any element
+    of the pname:pCommandBufferInfos member of any element of pname:pSubmits
+    was a flink:vkCmdBeginQuery whose pname:queryPool was created with a
+    pname:queryType of ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
+    <<profiling-lock, profiling lock>> must: have been held continuously on
+    the sname:VkDevice that pname:queue was retrieved from, throughout
+    recording of those command buffers
+endif::VK_KHR_performance_query[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkQueueSubmit2-queue-06447]]
+    If pname:queue was not created with
+    ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, the pname:flags member of
+    any element of pname:pSubmits must: not include
+    ename:VK_SUBMIT_PROTECTED_BIT_KHR
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkQueueSubmit2.adoc[]
+--
+
+[open,refpage='VkSubmitInfo2',desc='Structure specifying a queue submit operation',type='structs',alias='VkSubmitInfo2KHR']
+--
+The sname:VkSubmitInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkSubmitInfo2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubmitInfo2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSubmitFlagBits.
+  * pname:waitSemaphoreInfoCount is the number of elements in
+    pname:pWaitSemaphoreInfos.
+  * pname:pWaitSemaphoreInfos is a pointer to an array of
+    slink:VkSemaphoreSubmitInfo structures defining
+    <<synchronization-semaphores-waiting, semaphore wait operations>>.
+  * pname:commandBufferInfoCount is the number of elements in
+    pname:pCommandBufferInfos and the number of command buffers to execute
+    in the batch.
+  * pname:pCommandBufferInfos is a pointer to an array of
+    slink:VkCommandBufferSubmitInfo structures describing command buffers to
+    execute in the batch.
+  * pname:signalSemaphoreInfoCount is the number of elements in
+    pname:pSignalSemaphoreInfos.
+  * pname:pSignalSemaphoreInfos is a pointer to an array of
+    slink:VkSemaphoreSubmitInfo describing
+    <<synchronization-semaphores-signaling, semaphore signal operations>>.
+
+.Valid Usage
+****
+ifdef::VK_KHR_timeline_semaphore[]
+  * [[VUID-VkSubmitInfo2-semaphore-03881]]
+    If the same semaphore is used as the pname:semaphore member of both an
+    element of pname:pSignalSemaphoreInfos and pname:pWaitSemaphoreInfos,
+    and that semaphore is a timeline semaphore, the pname:value member of
+    the pname:pSignalSemaphoreInfos element must: be greater than the
+    pname:value member of the pname:pWaitSemaphoreInfos element
+  * [[VUID-VkSubmitInfo2-semaphore-03882]]
+    If the pname:semaphore member of any element of
+    pname:pSignalSemaphoreInfos is a timeline semaphore, the pname:value
+    member of that element must: have a value greater than the current value
+    of the semaphore when the <<synchronization-semaphores-signaling,
+    semaphore signal operation>> is executed
+  * [[VUID-VkSubmitInfo2-semaphore-03883]]
+    If the pname:semaphore member of any element of
+    pname:pSignalSemaphoreInfos is a timeline semaphore, the pname:value
+    member of that element must: have a value which does not differ from the
+    current value of the semaphore or the value of any outstanding semaphore
+    wait or signal operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+  * [[VUID-VkSubmitInfo2-semaphore-03884]]
+    If the pname:semaphore member of any element of
+    pname:pWaitSemaphoreInfos is a timeline semaphore, the pname:value
+    member of that element must: have a value which does not differ from the
+    current value of the semaphore or the value of any outstanding semaphore
+    wait or signal operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+endif::VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkSubmitInfo2-flags-03886]]
+    If pname:flags includes ename:VK_SUBMIT_PROTECTED_BIT, all elements of
+    pname:pCommandBuffers must: be protected command buffers
+  * [[VUID-VkSubmitInfo2-flags-03887]]
+    If pname:flags does not include ename:VK_SUBMIT_PROTECTED_BIT, each
+    element of pname:pCommandBuffers must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06192]]
+    If any pname:commandBuffer member of an element of
+    pname:pCommandBufferInfos contains any <<renderpass-suspension,resumed
+    render pass instances>>, they must: be suspended by a render pass
+    instance earlier in submission order within pname:pCommandBufferInfos
+  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06010]]
+    If any pname:commandBuffer member of an element of
+    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
+    render pass instances>>, they must: be resumed by a render pass instance
+    later in submission order within pname:pCommandBufferInfos
+  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06011]]
+    If any pname:commandBuffer member of an element of
+    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no action or synchronization
+    commands between that render pass instance and the render pass instance
+    that resumes it
+  * [[VUID-VkSubmitInfo2KHR-commandBuffer-06012]]
+    If any pname:commandBuffer member of an element of
+    pname:pCommandBufferInfos contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no render pass instances between
+    that render pass instance and the render pass instance that resumes it
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-VkSubmitInfo2KHR-variableSampleLocations-06013]]
+    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
+    limit is not supported, and any pname:commandBuffer member of an element
+    of pname:pCommandBufferInfos contains any <<renderpass-suspension,
+    suspended render pass instances>>, where a graphics pipeline has been
+    bound, any pipelines bound in the render pass instance that resumes it,
+    or any subsequent render pass instances that resume from that one and so
+    on, must: use the same sample locations
+endif::VK_EXT_sample_locations[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkSubmitInfo2.adoc[]
+--
+
+[open,refpage='VkSubmitFlagBits',desc='Bitmask specifying behavior of a submission',type='enums',alias='VkSubmitFlagBitsKHR']
+--
+Bits which can: be set in slink:VkSubmitInfo2::pname:flags, specifying
+submission behavior, are:
+
+include::{generated}/api/enums/VkSubmitFlagBits.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/enums/VkSubmitFlagBitsKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * ename:VK_SUBMIT_PROTECTED_BIT specifies that this batch is a protected
+    submission.
+--
+
+[open,refpage='VkSubmitFlags',desc='Bitmask of VkSubmitFlagBits',type='flags',alias='VkSubmitFlagsKHR']
+--
+include::{generated}/api/flags/VkSubmitFlags.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/flags/VkSubmitFlagsKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+tname:VkSubmitFlags is a bitmask type for setting a mask of zero or more
+elink:VkSubmitFlagBits.
+--
+
+[open,refpage='VkSemaphoreSubmitInfo',desc='Structure specifying a semaphore signal or wait operation',type='structs',alias='VkSemaphoreSubmitInfoKHR']
+--
+:refpage: VkSemaphoreSubmitInfo
+
+The sname:VkSemaphoreSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreSubmitInfo.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreSubmitInfoKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is a slink:VkSemaphore affected by this operation.
+  * pname:value is
+ifdef::VK_KHR_timeline_semaphore[]
+    either the value used to signal pname:semaphore or the value waited on
+    by pname:semaphore, if pname:semaphore is a timeline semaphore.
+    Otherwise it is
+endif::VK_KHR_timeline_semaphore[]
+    ignored.
+  * pname:stageMask is a tlink:VkPipelineStageFlags2 mask of pipeline stages
+    which limit the first synchronization scope of a semaphore signal
+    operation, or second synchronization scope of a semaphore wait operation
+    as described in the <<synchronization-semaphores-waiting, semaphore wait
+    operation>> and <<synchronization-semaphores-signaling, semaphore signal
+    operation>> sections of <<synchronization, the synchronization
+    chapter>>.
+  * pname:deviceIndex is the index of the device within a device group that
+    executes the semaphore wait or signal operation.
+
+Whether this structure defines a semaphore wait or signal operation is
+defined by how it is used.
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+  * [[VUID-VkSemaphoreSubmitInfo-device-03888]]
+    If the pname:device that pname:semaphore was created on is not a device
+    group, pname:deviceIndex must: be `0`
+ifdef::VK_KHR_device_group_creation,VK_VERSION_1_1[]
+  * [[VUID-VkSemaphoreSubmitInfo-device-03889]]
+    If the pname:device that pname:semaphore was created on is a device
+    group, pname:deviceIndex must: be a valid device index
+endif::VK_KHR_device_group_creation,VK_VERSION_1_1[]
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * [[VUID-VkSemaphoreSubmitInfoKHR-semaphore-05094]]
+    If pname:semaphore has a payload of stext:NvSciSyncObj, pname:value
+    must: be calculated by application via <<NvSciSync-extension-page,
+    NvSciSync APIs>>.
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+****
+
+include::{generated}/validity/structs/VkSemaphoreSubmitInfo.adoc[]
+--
+
+[open,refpage='VkCommandBufferSubmitInfo',desc='Structure specifying a command buffer submission',type='structs',alias='VkCommandBufferSubmitInfoKHR']
+--
+The sname:VkCommandBufferSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandBufferSubmitInfo.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCommandBufferSubmitInfoKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:commandBuffer is a slink:VkCommandBuffer to be submitted for
+    execution.
+  * pname:deviceMask is a bitmask indicating which devices in a device group
+    execute the command buffer.
+    A pname:deviceMask of `0` is equivalent to setting all bits
+    corresponding to valid devices in the group to `1`.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferSubmitInfo-commandBuffer-03890]]
+    pname:commandBuffer must: not have been allocated with
+    ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+ifdef::VK_KHR_device_group_creation,VK_VERSION_1_1[]
+  * [[VUID-VkCommandBufferSubmitInfo-deviceMask-03891]]
+    If pname:deviceMask is not `0`, it must: be a valid device mask
+endif::VK_KHR_device_group_creation,VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/structs/VkCommandBufferSubmitInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkQueueSubmit',desc='Submits a sequence of semaphores or command buffers to a queue',type='protos']
+--
+
+:refpage: vkQueueSubmit
+
+To submit command buffers to a queue, call:
+
+include::{generated}/api/protos/vkQueueSubmit.adoc[]
+
+  * pname:queue is the queue that the command buffers will be submitted to.
+  * pname:submitCount is the number of elements in the pname:pSubmits array.
+  * pname:pSubmits is a pointer to an array of slink:VkSubmitInfo
+    structures, each specifying a command buffer submission batch.
+  * pname:fence is an optional: handle to a fence to be signaled once all
+    submitted command buffers have completed execution.
+    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
+    <<synchronization-fences-signaling, fence signal operation>>.
+
+fname:vkQueueSubmit is a <<devsandqueues-submission,queue submission
+command>>, with each batch defined by an element of pname:pSubmits.
+Batches begin execution in the order they appear in pname:pSubmits, but may:
+complete out of order.
+
+Fence and semaphore operations submitted with flink:vkQueueSubmit have
+additional ordering constraints compared to other submission commands, with
+dependencies involving previous and subsequent queue operations.
+Information about these additional constraints can be found in the
+<<synchronization-semaphores, semaphore>> and <<synchronization-fences,
+fence>> sections of <<synchronization, the synchronization chapter>>.
+
+Details on the interaction of pname:pWaitDstStageMask with synchronization
+are described in the <<synchronization-semaphores-waiting, semaphore wait
+operation>> section of <<synchronization, the synchronization chapter>>.
+
+The order that batches appear in pname:pSubmits is used to determine
+<<synchronization-submission-order, submission order>>, and thus all the
+<<synchronization-implicit, implicit ordering guarantees>> that respect it.
+Other than these implicit ordering guarantees and any <<synchronization,
+explicit synchronization primitives>>, these batches may: overlap or
+otherwise execute out of order.
+
+If any command buffer submitted to this queue is in the
+<<commandbuffers-lifecycle, executable state>>, it is moved to the
+<<commandbuffers-lifecycle, pending state>>.
+Once execution of all submissions of a command buffer complete, it moves
+from the <<commandbuffers-lifecycle, pending state>>, back to the
+<<commandbuffers-lifecycle, executable state>>.
+If a command buffer was recorded with the
+ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT flag, it instead moves to
+the <<commandbuffers-lifecycle, invalid state>>.
+
+If fname:vkQueueSubmit fails, it may: return
+ename:VK_ERROR_OUT_OF_HOST_MEMORY or ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+If it does, the implementation must: ensure that the state and contents of
+any resources or synchronization primitives referenced by the submitted
+command buffers and any semaphores referenced by pname:pSubmits is
+unaffected by the call or its failure.
+If fname:vkQueueSubmit fails in such a way that the implementation is unable
+to make that guarantee, the implementation must: return
+ename:VK_ERROR_DEVICE_LOST.
+See <<devsandqueues-lost-device,Lost Device>>.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkQueueSubmit-fence-00063]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
+    unsignaled
+  * [[VUID-vkQueueSubmit-fence-00064]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
+    associated with any other queue command that has not yet completed
+    execution on that queue
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00065]]
+    Any calls to flink:vkCmdSetEvent, flink:vkCmdResetEvent or
+    flink:vkCmdWaitEvents that have been recorded into any of the command
+    buffer elements of the pname:pCommandBuffers member of any element of
+    pname:pSubmits, must: not reference any slink:VkEvent that is referenced
+    by any of those commands in a command buffer that has been submitted to
+    another queue and is still in the _pending state_
+  * [[VUID-vkQueueSubmit-pWaitDstStageMask-00066]]
+    Any stage flag included in any element of the pname:pWaitDstStageMask
+    member of any element of pname:pSubmits must: be a pipeline stage
+    supported by one of the capabilities of pname:queue, as specified in the
+    <<synchronization-pipeline-stages-supported, table of supported pipeline
+    stages>>
+  * [[VUID-vkQueueSubmit-pSignalSemaphores-00067]]
+    Each binary semaphore element of the pname:pSignalSemaphores member of
+    any element of pname:pSubmits must: be unsignaled when the semaphore
+    signal operation it defines is executed on the device
+  * [[VUID-vkQueueSubmit-pWaitSemaphores-00068]]
+    When a semaphore wait operation referring to a binary semaphore defined
+    by any element of the pname:pWaitSemaphores member of any element of
+    pname:pSubmits executes on pname:queue, there must: be no other queues
+    waiting on the same semaphore
+  * [[VUID-vkQueueSubmit-pWaitSemaphores-03238]]
+    All elements of the pname:pWaitSemaphores member of all elements of
+    pname:pSubmits
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+    must: reference a semaphore signal operation that has been submitted for
+    execution and any <<synchronization-semaphores-signaling, semaphore
+    signal operations>> on which it depends must: have also been submitted
+    for execution
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00070]]
+    Each element of the pname:pCommandBuffers member of each element of
+    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
+    executable state>>
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00071]]
+    If any element of the pname:pCommandBuffers member of any element of
+    pname:pSubmits was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
+    the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00072]]
+    Any <<commandbuffers-secondary, secondary command buffers recorded>>
+    into any element of the pname:pCommandBuffers member of any element of
+    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
+    executable state>>
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00073]]
+    If any <<commandbuffers-secondary, secondary command buffers recorded>>
+    into any element of the pname:pCommandBuffers member of any element of
+    pname:pSubmits was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
+    the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkQueueSubmit-pCommandBuffers-00074]]
+    Each element of the pname:pCommandBuffers member of each element of
+    pname:pSubmits must: have been allocated from a sname:VkCommandPool that
+    was created for the same queue family pname:queue belongs to
+  * [[VUID-vkQueueSubmit-pSubmits-02207]]
+    If any element of pname:pSubmits->pCommandBuffers includes a
+    <<synchronization-queue-transfers-acquire, Queue Family Transfer Acquire
+    Operation>>, there must: exist a previously submitted
+    <<synchronization-queue-transfers-release, Queue Family Transfer Release
+    Operation>> on a queue in the queue family identified by the acquire
+    operation, with parameters matching the acquire operation as defined in
+    the definition of such <<synchronization-queue-transfers-acquire,
+    acquire operations>>, and which happens-before the acquire operation
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkQueueSubmit-pCommandBuffers-03220]]
+    If a command recorded into any element of pname:pCommandBuffers was a
+    flink:vkCmdBeginQuery whose pname:queryPool was created with a
+    pname:queryType of ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
+    <<profiling-lock, profiling lock>> must: have been held continuously on
+    the sname:VkDevice that pname:queue was retrieved from, throughout
+    recording of those command buffers
+endif::VK_KHR_performance_query[]
+  * [[VUID-vkQueueSubmit-pSubmits-02808]]
+    Any resource created with ename:VK_SHARING_MODE_EXCLUSIVE that is read
+    by an operation specified by pname:pSubmits must: not be owned by any
+    queue family other than the one which pname:queue belongs to, at the
+    time it is executed
+  * [[VUID-vkQueueSubmit-pSubmits-04626]]
+    Any resource created with ename:VK_SHARING_MODE_CONCURRENT that is
+    accessed by an operation specified by pname:pSubmits must: have included
+    the queue family of pname:queue at resource creation time
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkQueueSubmit-queue-06448]]
+    If pname:queue was not created with
+    ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, there must: be no element of
+    pname:pSubmits that includes an slink:VkProtectedSubmitInfo structure in
+    its pname:pNext chain with pname:protectedSubmit equal to ename:VK_TRUE
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkQueueSubmit.adoc[]
+--
+
+[open,refpage='VkSubmitInfo',desc='Structure specifying a queue submit operation',type='structs']
+--
+:refpage: VkSubmitInfo
+The sname:VkSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkSubmitInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreCount is the number of semaphores upon which to wait
+    before executing the command buffers for the batch.
+  * pname:pWaitSemaphores is a pointer to an array of slink:VkSemaphore
+    handles upon which to wait before the command buffers for this batch
+    begin execution.
+    If semaphores to wait on are provided, they define a
+    <<synchronization-semaphores-waiting, semaphore wait operation>>.
+  * pname:pWaitDstStageMask is a pointer to an array of pipeline stages at
+    which each corresponding semaphore wait will occur.
+  * pname:commandBufferCount is the number of command buffers to execute in
+    the batch.
+  * pname:pCommandBuffers is a pointer to an array of slink:VkCommandBuffer
+    handles to execute in the batch.
+  * pname:signalSemaphoreCount is the number of semaphores to be signaled
+    once the commands specified in pname:pCommandBuffers have completed
+    execution.
+  * pname:pSignalSemaphores is a pointer to an array of slink:VkSemaphore
+    handles which will be signaled when the command buffers for this batch
+    have completed execution.
+    If semaphores to be signaled are provided, they define a
+    <<synchronization-semaphores-signaling, semaphore signal operation>>.
+
+The order that command buffers appear in pname:pCommandBuffers is used to
+determine <<synchronization-submission-order, submission order>>, and thus
+all the <<synchronization-implicit, implicit ordering guarantees>> that
+respect it.
+Other than these implicit ordering guarantees and any <<synchronization,
+explicit synchronization primitives>>, these command buffers may: overlap or
+otherwise execute out of order.
+
+
+.Valid Usage
+****
+:stageMaskName: pWaitDstStageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+
+  * [[VUID-VkSubmitInfo-pCommandBuffers-00075]]
+    Each element of pname:pCommandBuffers must: not have been allocated with
+    ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00078]]
+    Each element of pname:pWaitDstStageMask must: not include
+    ename:VK_PIPELINE_STAGE_HOST_BIT
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkSubmitInfo-pWaitSemaphores-03239]]
+    If any element of pname:pWaitSemaphores or pname:pSignalSemaphores was
+    created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE, then the pname:pNext chain must:
+    include a slink:VkTimelineSemaphoreSubmitInfo structure
+  * [[VUID-VkSubmitInfo-pNext-03240]]
+    If the pname:pNext chain of this structure includes a
+    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
+    pname:pWaitSemaphores was created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE, then its pname:waitSemaphoreValueCount
+    member must: equal pname:waitSemaphoreCount
+  * [[VUID-VkSubmitInfo-pNext-03241]]
+    If the pname:pNext chain of this structure includes a
+    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
+    pname:pSignalSemaphores was created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE, then its
+    pname:signalSemaphoreValueCount member must: equal
+    pname:signalSemaphoreCount
+  * [[VUID-VkSubmitInfo-pSignalSemaphores-03242]]
+    For each element of pname:pSignalSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
+    have a value greater than the current value of the semaphore when the
+    <<synchronization-semaphores-signaling,semaphore signal operation>> is
+    executed
+  * [[VUID-VkSubmitInfo-pWaitSemaphores-03243]]
+    For each element of pname:pWaitSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pWaitSemaphoreValues must:
+    have a value which does not differ from the current value of the
+    semaphore or the value of any outstanding semaphore wait or signal
+    operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+  * [[VUID-VkSubmitInfo-pSignalSemaphores-03244]]
+    For each element of pname:pSignalSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
+    have a value which does not differ from the current value of the
+    semaphore or the value of any outstanding semaphore wait or signal
+    operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkSubmitInfo-pNext-04120]]
+    If the pname:pNext chain of this structure does not include a
+    sname:VkProtectedSubmitInfo structure with pname:protectedSubmit set to
+    ename:VK_TRUE, then each element of the pname:pCommandBuffers array
+    must: be an unprotected command buffer
+  * [[VUID-VkSubmitInfo-pNext-04148]]
+    If the pname:pNext chain of this structure includes a
+    sname:VkProtectedSubmitInfo structure with pname:protectedSubmit set to
+    ename:VK_TRUE, then each element of the pname:pCommandBuffers array
+    must: be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkSubmitInfo-pCommandBuffers-06193]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,resumed
+    render pass instances>>, they must: be suspended by a render pass
+    instance earlier in submission order within pname:pCommandBuffers
+  * [[VUID-VkSubmitInfo-pCommandBuffers-06014]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
+    render pass instances>>, they must: be resumed by a render pass instance
+    later in submission order within pname:pCommandBuffers
+  * [[VUID-VkSubmitInfo-pCommandBuffers-06015]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no action or synchronization
+    commands executed in a primary or <<commandbuffers-secondary,
+    secondary>> command buffer between that render pass instance and the
+    render pass instance that resumes it
+  * [[VUID-VkSubmitInfo-pCommandBuffers-06016]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no render pass instances between
+    that render pass instance and the render pass instance that resumes it
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-VkSubmitInfo-variableSampleLocations-06017]]
+    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
+    limit is not supported, and any element of pname:pCommandBuffers
+    contains any <<renderpass-suspension, suspended render pass instances>>,
+    where a graphics pipeline has been bound, any pipelines bound in the
+    render pass instance that resumes it, or any subsequent render pass
+    instances that resume from that one and so on, must: use the same sample
+    locations
+endif::VK_EXT_sample_locations[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkSubmitInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[open,refpage='VkTimelineSemaphoreSubmitInfo',desc='Structure specifying signal and wait values for timeline semaphores',type='structs',alias='VkTimelineSemaphoreSubmitInfoKHR']
+--
+To specify the values to use when waiting for and signaling semaphores
+created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE,
+add a slink:VkTimelineSemaphoreSubmitInfo structure to the pname:pNext chain
+of the slink:VkSubmitInfo structure when using flink:vkQueueSubmit
+ifndef::VKSC_VERSION_1_0[or the slink:VkBindSparseInfo structure when using flink:vkQueueBindSparse]
+.
+The sname:VkTimelineSemaphoreSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfo.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfoKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreValueCount is the number of semaphore wait values
+    specified in pname:pWaitSemaphoreValues.
+  * pname:pWaitSemaphoreValues is a pointer to an array of
+    pname:waitSemaphoreValueCount values for the corresponding semaphores in
+    slink:VkSubmitInfo::pname:pWaitSemaphores to wait for.
+  * pname:signalSemaphoreValueCount is the number of semaphore signal values
+    specified in pname:pSignalSemaphoreValues.
+  * pname:pSignalSemaphoreValues is a pointer to an array
+    pname:signalSemaphoreValueCount values for the corresponding semaphores
+    in slink:VkSubmitInfo::pname:pSignalSemaphores to set when signaled.
+
+If the semaphore in slink:VkSubmitInfo::pname:pWaitSemaphores or
+slink:VkSubmitInfo::pname:pSignalSemaphores corresponding to an entry in
+pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues respectively was
+not created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE, the implementation must: ignore the value
+in the pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry.
+
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+If the semaphore in slink:VkSubmitInfo::pname:pWaitSemaphores or
+slink:VkSubmitInfo::pname:pSignalSemaphores corresponding to an entry in
+pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues respectively was
+created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE,
+and has stext:NvSciSyncObj as the payload, the value in the
+pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry must: be
+calculated by application via <<NvSciSync-extension-page, NvSciSync APIs>>.
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+include::{generated}/validity/structs/VkTimelineSemaphoreSubmitInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_KHR_external_semaphore_win32[]
+[open,refpage='VkD3D12FenceSubmitInfoKHR',desc='Structure specifying values for Direct3D 12 fence-backed semaphores',type='structs']
+--
+To specify the values to use when waiting for and signaling semaphores whose
+<<synchronization-semaphores-importing,current payload>> refers to a
+Direct3D 12 fence, add a slink:VkD3D12FenceSubmitInfoKHR structure to the
+pname:pNext chain of the slink:VkSubmitInfo structure.
+The sname:VkD3D12FenceSubmitInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkD3D12FenceSubmitInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreValuesCount is the number of semaphore wait values
+    specified in pname:pWaitSemaphoreValues.
+  * pname:pWaitSemaphoreValues is a pointer to an array of
+    pname:waitSemaphoreValuesCount values for the corresponding semaphores
+    in slink:VkSubmitInfo::pname:pWaitSemaphores to wait for.
+  * pname:signalSemaphoreValuesCount is the number of semaphore signal
+    values specified in pname:pSignalSemaphoreValues.
+  * pname:pSignalSemaphoreValues is a pointer to an array of
+    pname:signalSemaphoreValuesCount values for the corresponding semaphores
+    in slink:VkSubmitInfo::pname:pSignalSemaphores to set when signaled.
+
+If the semaphore in slink:VkSubmitInfo::pname:pWaitSemaphores or
+slink:VkSubmitInfo::pname:pSignalSemaphores corresponding to an entry in
+pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues respectively does
+not currently have a <<synchronization-semaphores-payloads, payload>>
+referring to a Direct3D 12 fence, the implementation must: ignore the value
+in the pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[NOTE]
+.Note
+====
+As the introduction of the external semaphore handle type
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT predates that of
+timeline semaphores, support for importing semaphore payloads from external
+handles of that type into semaphores created (implicitly or explicitly) with
+a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY is preserved for
+backwards compatibility.
+However, applications should: prefer importing such handle types into
+semaphores created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE, and use the
+slink:VkTimelineSemaphoreSubmitInfo structure instead of the
+sname:VkD3D12FenceSubmitInfoKHR structure to specify the values to use when
+waiting for and signaling such semaphores.
+====
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+.Valid Usage
+****
+  * [[VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079]]
+    pname:waitSemaphoreValuesCount must: be the same value as
+    sname:VkSubmitInfo::pname:waitSemaphoreCount, where this structure is in
+    the pname:pNext chain of a sname:VkSubmitInfo structure
+  * [[VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080]]
+    pname:signalSemaphoreValuesCount must: be the same value as
+    sname:VkSubmitInfo::pname:signalSemaphoreCount, where this structure is
+    in the pname:pNext chain of a sname:VkSubmitInfo structure
+****
+
+include::{generated}/validity/structs/VkD3D12FenceSubmitInfoKHR.adoc[]
+--
+endif::VK_KHR_external_semaphore_win32[]
+
+ifdef::VK_KHR_win32_keyed_mutex[]
+[open,refpage='VkWin32KeyedMutexAcquireReleaseInfoKHR',desc='Use the Windows keyed mutex mechanism to synchronize work',type='structs']
+--
+When submitting work that operates on memory imported from a Direct3D 11
+resource to a queue, the keyed mutex mechanism may: be used in addition to
+Vulkan semaphores to synchronize the work.
+Keyed mutexes are a property of a properly created shareable Direct3D 11
+resource.
+They can: only be used if the imported resource was created with the
+etext:D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX flag.
+
+To acquire keyed mutexes before submitted work and/or release them after,
+add a slink:VkWin32KeyedMutexAcquireReleaseInfoKHR structure to the
+pname:pNext chain of the slink:VkSubmitInfo structure.
+
+The sname:VkWin32KeyedMutexAcquireReleaseInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkWin32KeyedMutexAcquireReleaseInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:acquireCount is the number of entries in the pname:pAcquireSyncs,
+    pname:pAcquireKeys, and pname:pAcquireTimeouts arrays.
+  * pname:pAcquireSyncs is a pointer to an array of slink:VkDeviceMemory
+    objects which were imported from Direct3D 11 resources.
+  * pname:pAcquireKeys is a pointer to an array of mutex key values to wait
+    for prior to beginning the submitted work.
+    Entries refer to the keyed mutex associated with the corresponding
+    entries in pname:pAcquireSyncs.
+  * pname:pAcquireTimeouts is a pointer to an array of timeout values, in
+    millisecond units, for each acquire specified in pname:pAcquireKeys.
+  * pname:releaseCount is the number of entries in the pname:pReleaseSyncs
+    and pname:pReleaseKeys arrays.
+  * pname:pReleaseSyncs is a pointer to an array of slink:VkDeviceMemory
+    objects which were imported from Direct3D 11 resources.
+  * pname:pReleaseKeys is a pointer to an array of mutex key values to set
+    when the submitted work has completed.
+    Entries refer to the keyed mutex associated with the corresponding
+    entries in pname:pReleaseSyncs.
+
+.Valid Usage
+****
+  * [[VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081]]
+    Each member of pname:pAcquireSyncs and pname:pReleaseSyncs must: be a
+    device memory object imported by setting
+    slink:VkImportMemoryWin32HandleInfoKHR::pname:handleType to
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+****
+
+include::{generated}/validity/structs/VkWin32KeyedMutexAcquireReleaseInfoKHR.adoc[]
+--
+endif::VK_KHR_win32_keyed_mutex[]
+
+ifdef::VK_NV_win32_keyed_mutex[]
+include::{chapters}/VK_NV_win32_keyed_mutex/keyed_mutex_submit.adoc[]
+endif::VK_NV_win32_keyed_mutex[]
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkProtectedSubmitInfo',desc='Structure indicating whether the submission is protected',type='structs']
+--
+If the pname:pNext chain of slink:VkSubmitInfo includes a
+sname:VkProtectedSubmitInfo structure, then the structure indicates whether
+the batch is protected.
+The sname:VkProtectedSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkProtectedSubmitInfo.adoc[]
+
+  * pname:protectedSubmit specifies whether the batch is protected.
+    If pname:protectedSubmit is ename:VK_TRUE, the batch is protected.
+    If pname:protectedSubmit is ename:VK_FALSE, the batch is unprotected.
+    If the sname:VkSubmitInfo::pname:pNext chain does not include this
+    structure, the batch is unprotected.
+
+include::{generated}/validity/structs/VkProtectedSubmitInfo.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkDeviceGroupSubmitInfo',desc='Structure indicating which physical devices execute semaphore operations and command buffers',type='structs']
+--
+If the pname:pNext chain of slink:VkSubmitInfo includes a
+sname:VkDeviceGroupSubmitInfo structure, then that structure includes device
+indices and masks specifying which physical devices execute semaphore
+operations and command buffers.
+
+The sname:VkDeviceGroupSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupSubmitInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupSubmitInfoKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreCount is the number of elements in the
+    pname:pWaitSemaphoreDeviceIndices array.
+  * pname:pWaitSemaphoreDeviceIndices is a pointer to an array of
+    pname:waitSemaphoreCount device indices indicating which physical device
+    executes the semaphore wait operation in the corresponding element of
+    slink:VkSubmitInfo::pname:pWaitSemaphores.
+  * pname:commandBufferCount is the number of elements in the
+    pname:pCommandBufferDeviceMasks array.
+  * pname:pCommandBufferDeviceMasks is a pointer to an array of
+    pname:commandBufferCount device masks indicating which physical devices
+    execute the command buffer in the corresponding element of
+    slink:VkSubmitInfo::pname:pCommandBuffers.
+    A physical device executes the command buffer if the corresponding bit
+    is set in the mask.
+  * pname:signalSemaphoreCount is the number of elements in the
+    pname:pSignalSemaphoreDeviceIndices array.
+  * pname:pSignalSemaphoreDeviceIndices is a pointer to an array of
+    pname:signalSemaphoreCount device indices indicating which physical
+    device executes the semaphore signal operation in the corresponding
+    element of slink:VkSubmitInfo::pname:pSignalSemaphores.
+
+If this structure is not present, semaphore operations and command buffers
+execute on device index zero.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082]]
+    pname:waitSemaphoreCount must: equal
+    slink:VkSubmitInfo::pname:waitSemaphoreCount
+  * [[VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083]]
+    pname:commandBufferCount must: equal
+    slink:VkSubmitInfo::pname:commandBufferCount
+  * [[VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084]]
+    pname:signalSemaphoreCount must: equal
+    slink:VkSubmitInfo::pname:signalSemaphoreCount
+  * [[VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085]]
+    All elements of pname:pWaitSemaphoreDeviceIndices and
+    pname:pSignalSemaphoreDeviceIndices must: be valid device indices
+  * [[VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086]]
+    All elements of pname:pCommandBufferDeviceMasks must: be valid device
+    masks
+****
+
+include::{generated}/validity/structs/VkDeviceGroupSubmitInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_KHR_performance_query[]
+If the pname:pNext chain of slink:VkSubmitInfo includes a
+slink:VkPerformanceQuerySubmitInfoKHR structure, then the structure
+indicates which counter pass is active for the batch in that submit.
+
+[open,refpage='VkPerformanceQuerySubmitInfoKHR',desc='Structure indicating which counter pass index is active for performance queries',type='structs']
+--
+The sname:VkPerformanceQuerySubmitInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceQuerySubmitInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:counterPassIndex specifies which counter pass index is active.
+
+If the sname:VkSubmitInfo::pname:pNext chain does not include this
+structure, the batch defaults to use counter pass index 0.
+
+.Valid Usage
+****
+  * [[VUID-VkPerformanceQuerySubmitInfoKHR-counterPassIndex-03221]]
+    pname:counterPassIndex must: be less than the number of counter passes
+    required by any queries within the batch.
+    The required number of counter passes for a performance query is
+    obtained by calling
+    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
+****
+
+include::{generated}/validity/structs/VkPerformanceQuerySubmitInfoKHR.adoc[]
+--
+endif::VK_KHR_performance_query[]
+
+
+[[commandbuffers-submission-progress]]
+== Queue Forward Progress
+
+When using binary semaphores, the application must: ensure that command
+buffer submissions will be able to complete without any subsequent
+operations by the application on any queue.
+After any call to fname:vkQueueSubmit (or other queue operation), for every
+queued wait on a semaphore
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+there must: be a prior signal of that semaphore that will not be consumed by
+a different wait on the semaphore.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+When using timeline semaphores, wait-before-signal behavior is well-defined
+and applications can: submit work via fname:vkQueueSubmit defining a
+<<synchronization-semaphores-waiting, timeline semaphore wait operation>>
+before submitting a corresponding <<synchronization-semaphores-signaling,
+semaphore signal operation>>.
+For each <<synchronization-semaphores-waiting, timeline semaphore wait
+operation>> defined by a call to fname:vkQueueSubmit, the application must:
+ensure that a corresponding <<synchronization-semaphores-signaling,
+semaphore signal operation>> is executed before forward progress can be
+made.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+If a command buffer submission waits for any events to be signaled, the
+application must: ensure that command buffer submissions will be able to
+complete without any subsequent operations by the application.
+Events signaled by the host must: be signaled before the command buffer
+waits on those events.
+
+[NOTE]
+.Note
+====
+The ability for commands to wait on the host to set an events was originally
+added to allow low-latency updates to resources between host and device.
+However, to ensure quality of service, implementations would necessarily
+detect extended stalls in execution and timeout after a short period.
+As this period is not defined in the Vulkan specification, it is impossible
+to correctly validate any application with any wait period.
+Since the original users of this functionality were highly limited and
+platform-specific, this functionality is now considered defunct and should
+not be used.
+====
+
+
+[[commandbuffers-secondary]]
+== Secondary Command Buffer Execution
+
+[open,refpage='vkCmdExecuteCommands',desc='Execute a secondary command buffer from a primary command buffer',type='protos']
+--
+Secondary command buffers must: not be directly submitted to a queue.
+To record a secondary command buffer to execute as part of a primary command
+buffer, call:
+
+include::{generated}/api/protos/vkCmdExecuteCommands.adoc[]
+
+  * pname:commandBuffer is a handle to a primary command buffer that the
+    secondary command buffers are executed in.
+  * pname:commandBufferCount is the length of the pname:pCommandBuffers
+    array.
+  * pname:pCommandBuffers is a pointer to an array of
+    pname:commandBufferCount secondary command buffer handles, which are
+    recorded to execute in the primary command buffer in the order they are
+    listed in the array.
+
+If any element of pname:pCommandBuffers was not recorded with the
+ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, and it was recorded
+into any other primary command buffer which is currently in the
+<<commandbuffers-lifecycle, executable or recording state>>, that primary
+command buffer becomes <<commandbuffers-lifecycle, invalid>>.
+
+ifdef::VK_EXT_nested_command_buffer[]
+If the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>> feature
+is enabled it is valid usage for fname:vkCmdExecuteCommands to also be
+recorded to a <<glossary, secondary command buffer>>.
+endif::VK_EXT_nested_command_buffer[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]]
+    Each element of pname:pCommandBuffers must: have been allocated with a
+    pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00089]]
+    Each element of pname:pCommandBuffers must: be in the
+    <<commandbuffers-lifecycle, pending or executable state>>
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00091]]
+    If any element of pname:pCommandBuffers was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not be
+    in the <<commandbuffers-lifecycle, pending state>>
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00092]]
+    If any element of pname:pCommandBuffers was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
+    have already been recorded to pname:commandBuffer
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00093]]
+    If any element of pname:pCommandBuffers was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
+    appear more than once in pname:pCommandBuffers
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]]
+    Each element of pname:pCommandBuffers must: have been allocated from a
+    sname:VkCommandPool that was created for the same queue family as the
+    sname:VkCommandPool from which pname:commandBuffer was allocated
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance, each element of pname:pCommandBuffers must: have been recorded
+    with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance, and any element of pname:pCommandBuffers was recorded with
+    slink:VkCommandBufferInheritanceInfo::pname:framebuffer not equal to
+    dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
+    sname:VkFramebuffer used in the current render pass instance
+  * [[VUID-vkCmdExecuteCommands-contents-06018]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderPass, its pname:contents
+    parameter must: have been set to
+    ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
+ifdef::VK_EXT_nested_command_buffer[, or ename:VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT]
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06019]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderPass, each element of
+    pname:pCommandBuffers must: have been recorded with
+    slink:VkCommandBufferInheritanceInfo::pname:subpass set to the index of
+    the subpass which the given command buffer will be executed in
+  * [[VUID-vkCmdExecuteCommands-pBeginInfo-06020]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderPass, the render passes
+    specified in the pname:pBeginInfo->pInheritanceInfo->renderPass members
+    of the flink:vkBeginCommandBuffer commands used to begin recording each
+    element of pname:pCommandBuffers must: be
+    <<renderpass-compatibility,compatible>> with the current render pass
+ifdef::VK_QCOM_render_pass_transform[]
+  * [[VUID-vkCmdExecuteCommands-pNext-02865]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
+    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM in the
+    pname:pNext chain of slink:VkCommandBufferBeginInfo
+  * [[VUID-vkCmdExecuteCommands-pNext-02866]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
+    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM::pname:transform
+    identical to slink:VkRenderPassTransformBeginInfoQCOM::pname:transform
+  * [[VUID-vkCmdExecuteCommands-pNext-02867]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance that included slink:VkRenderPassTransformBeginInfoQCOM in the
+    pname:pNext chain of slink:VkRenderPassBeginInfo, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM::pname:renderArea
+    identical to slink:VkRenderPassBeginInfo::pname:renderArea
+endif::VK_QCOM_render_pass_transform[]
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]]
+    If fname:vkCmdExecuteCommands is not being called within a render pass
+    instance, each element of pname:pCommandBuffers must: not have been
+    recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-00101]]
+    If the <<features-inheritedQueries, pname:inheritedQueries>> feature is
+    not enabled, pname:commandBuffer must: not have any queries
+    <<queries-operation-active,active>>
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-00102]]
+    If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
+    <<queries-operation-active,active>>, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    sname:VkCommandBufferInheritanceInfo::pname:occlusionQueryEnable set to
+    ename:VK_TRUE
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-00103]]
+    If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
+    <<queries-operation-active,active>>, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    sname:VkCommandBufferInheritanceInfo::pname:queryFlags having all bits
+    set that are set for the query
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-00104]]
+    If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
+    query <<queries-operation-active,active>>, then each element of
+    pname:pCommandBuffers must: have been recorded with
+    sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having
+    all bits set that are set in the sname:VkQueryPool the query uses
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]]
+    Each element of pname:pCommandBuffers must: not begin any query types
+    that are <<queries-operation-active,active>> in pname:commandBuffer
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-07594]]
+    pname:commandBuffer must: not have any queries other than
+    ename:VK_QUERY_TYPE_OCCLUSION and
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
+    <<queries-operation-active,active>>
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-01820]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    each element of pname:pCommandBuffers must: be a protected command
+    buffer
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-01821]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    each element of pname:pCommandBuffers must: be an unprotected command
+    buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdExecuteCommands-None-02286]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-06533]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance and any recorded command in pname:commandBuffer in the current
+    subpass will write to an image subresource as an attachment, commands
+    recorded in elements of pname:pCommandBuffers must: not read from the
+    memory backing that image subresource in any other way
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-06534]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance and any recorded command in pname:commandBuffer in the current
+    subpass will read from an image subresource used as an attachment in any
+    way other than as an attachment, commands recorded in elements of
+    pname:pCommandBuffers must: not write to that image subresource as an
+    attachment
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06535]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance and any recorded command in a given element of
+    pname:pCommandBuffers will write to an image subresource as an
+    attachment, commands recorded in elements of pname:pCommandBuffers at a
+    higher index must: not read from the memory backing that image
+    subresource in any other way
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06536]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance and any recorded command in a given element of
+    pname:pCommandBuffers will read from an image subresource used as an
+    attachment in any way other than as an attachment, commands recorded in
+    elements of pname:pCommandBuffers at a higher index must: not write to
+    that image subresource as an attachment
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06021]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no action or synchronization
+    commands between that render pass instance and any render pass instance
+    that resumes it
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-06022]]
+    If pname:pCommandBuffers contains any <<renderpass-suspension,suspended
+    render pass instances>>, there must: be no render pass instances between
+    that render pass instance and any render pass instance that resumes it
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-vkCmdExecuteCommands-variableSampleLocations-06023]]
+    If the <<limits-variableSampleLocations, pname:variableSampleLocations>>
+    limit is not supported, and any element of pname:pCommandBuffers
+    contains any <<renderpass-suspension, suspended render pass instances>>,
+    where a graphics pipeline has been bound, any pipelines bound in the
+    render pass instance that resumes it, or any subsequent render pass
+    instances that resume from that one and so on, must: use the same sample
+    locations
+endif::VK_EXT_sample_locations[]
+  * [[VUID-vkCmdExecuteCommands-flags-06024]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, its
+    slink:VkRenderingInfo::pname:flags parameter must: have included
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT
+  * [[VUID-vkCmdExecuteCommands-pBeginInfo-06025]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, the render passes
+    specified in the pname:pBeginInfo->pInheritanceInfo->renderPass members
+    of the flink:vkBeginCommandBuffer commands used to begin recording each
+    element of pname:pCommandBuffers must: be dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdExecuteCommands-flags-06026]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, the pname:flags member of
+    the slink:VkCommandBufferInheritanceRenderingInfo structure included in
+    the pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    slink:VkRenderingInfo::pname:flags parameter to
+    flink:vkCmdBeginRendering, excluding
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT
+  * [[VUID-vkCmdExecuteCommands-colorAttachmentCount-06027]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, the
+    pname:colorAttachmentCount member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    slink:VkRenderingInfo::pname:colorAttachmentCount parameter to
+    flink:vkCmdBeginRendering
+  * [[VUID-vkCmdExecuteCommands-imageView-06028]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, if the pname:imageView
+    member of an element of the
+    slink:VkRenderingInfo::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the corresponding
+    element of the pname:pColorAttachmentFormats member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    format used to create that image view
+  * [[VUID-vkCmdExecuteCommands-imageView-07606]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, if the pname:imageView
+    member of an element of the
+    slink:VkRenderingInfo::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRendering is dlink:VK_NULL_HANDLE, the corresponding
+    element of the pname:pColorAttachmentFormats member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be
+    ename:VK_FORMAT_UNDEFINED
+  * [[VUID-vkCmdExecuteCommands-pDepthAttachment-06029]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, if the
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of the
+    pname:depthAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    format used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pStencilAttachment-06030]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, if the
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of the
+    pname:stencilAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    format used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pDepthAttachment-06774]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRendering was dlink:VK_NULL_HANDLE, the value of the
+    pname:depthAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be
+    ename:VK_FORMAT_UNDEFINED
+  * [[VUID-vkCmdExecuteCommands-pStencilAttachment-06775]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView parameter to
+    flink:vkCmdBeginRendering was dlink:VK_NULL_HANDLE, the value of the
+    pname:stencilAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfo structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be
+    ename:VK_FORMAT_UNDEFINED
+ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
+  * [[VUID-vkCmdExecuteCommands-viewMask-06031]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, the pname:viewMask member
+    of the slink:VkCommandBufferInheritanceRenderingInfo structure included
+    in the pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    slink:VkRenderingInfo::pname:viewMask parameter to
+    flink:vkCmdBeginRendering
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-vkCmdExecuteCommands-pNext-06032]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo includes a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the pname:imageView
+    member of an element of the
+    slink:VkRenderingInfo::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the corresponding
+    element of the pname:pColorAttachmentSamples member of the
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    sample count used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pNext-06033]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo includes a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of the
+    pname:depthStencilAttachmentSamples member of the
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    sample count used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pNext-06034]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo includes a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of the
+    pname:depthStencilAttachmentSamples member of the
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure included in the
+    pname:pNext chain of
+    slink:VkCommandBufferBeginInfo::pname:pInheritanceInfo used to begin
+    recording each element of pname:pCommandBuffers must: be equal to the
+    sample count used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pNext-06035]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo does not include a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the pname:imageView
+    member of an element of the
+    slink:VkRenderingInfo::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of
+    slink:VkCommandBufferInheritanceRenderingInfo::pname:rasterizationSamples
+    must: be equal to the sample count used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pNext-06036]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo does not include a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of
+    slink:VkCommandBufferInheritanceRenderingInfo::pname:rasterizationSamples
+    must: be equal to the sample count used to create that image view
+  * [[VUID-vkCmdExecuteCommands-pNext-06037]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering and the pname:pNext chain
+    of slink:VkCommandBufferInheritanceInfo does not include a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView parameter to
+    flink:vkCmdBeginRendering is not dlink:VK_NULL_HANDLE, the value of
+    slink:VkCommandBufferInheritanceRenderingInfo::pname:rasterizationSamples
+    must: be equal to the sample count used to create that image view
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-vkCmdExecuteCommands-pNext-09299]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering, with any color attachment
+    using a resolve mode of
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, the
+    pname:pNext chain of slink:VkCommandBufferInheritanceInfo used to create
+    each element of pname:pCommandBuffers must: include a
+    slink:VkExternalFormatANDROID structure with a pname:externalFormat
+    matching that used to create the resolve attachment in the render pass
+  * [[VUID-vkCmdExecuteCommands-pNext-09300]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRendering with any color attachment
+    using a resolve mode of
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, and the
+    pname:pNext chain of slink:VkCommandBufferInheritanceInfo does not
+    include a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, the value of
+    slink:VkCommandBufferInheritanceRenderingInfo::pname:rasterizationSamples
+    must: be ename:VK_SAMPLE_COUNT_1_BIT
+endif::VK_ANDROID_external_format_resolve[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdExecuteCommands-commandBuffer-09375]]
+    pname:commandBuffer must: not be a <<glossary, secondary command
+    buffer>>
+ifdef::VK_EXT_nested_command_buffer[]
+    unless the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>
+    feature is enabled
+  * [[VUID-vkCmdExecuteCommands-nestedCommandBuffer-09376]]
+    If the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>
+    feature is enabled, the <<glossary, command buffer nesting level>> of
+    each element of pname:pCommandBuffers must: be less than
+    <<limits-maxCommandBufferNestingLevel,
+    pname:maxCommandBufferNestingLevel>>
+  * [[VUID-vkCmdExecuteCommands-nestedCommandBufferRendering-09377]]
+    If the <<features-nestedCommandBufferRendering,
+    pname:nestedCommandBufferRendering>> feature is not enabled, and
+    pname:commandBuffer is a <<glossary, secondary command buffer>>,
+    pname:commandBuffer must: not have been recorded with
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+  * [[VUID-vkCmdExecuteCommands-nestedCommandBufferSimultaneousUse-09378]]
+    If the <<features-nestedCommandBufferSimultaneousUse,
+    pname:nestedCommandBufferSimultaneousUse>> feature is not enabled, and
+    pname:commandBuffer is a <<glossary, secondary command buffer>>, each
+    element of pname:pCommandBuffers must: not have been recorded with
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
+endif::VK_EXT_nested_command_buffer[]
+****
+
+include::{generated}/validity/protos/vkCmdExecuteCommands.adoc[]
+--
+
+ifdef::VK_EXT_nested_command_buffer[]
+[[commandbuffers-nested]]
+== Nested Command Buffers
+
+In addition to secondary command buffer execution from primary command
+buffers, an implementation may: support <<glossary, nested command
+buffers>>, which enable secondary command buffers to be executed from other
+secondary command buffers.
+If the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>> feature
+is enabled, the implementation supports <<glossary, nested command
+buffers>>.
+
+Nested command buffer execution works the same as primary-to-secondary
+execution, except that it is subject to some additional
+implementation-defined limits.
+
+Each secondary command buffer has a <<glossary, command buffer nesting
+level>>, which is determined at flink:vkEndCommandBuffer time and evaluated
+at flink:vkCmdExecuteCommands time.
+A secondary command buffer that executes no other secondary command buffers
+has a <<glossary, command buffer nesting level>> of zero.
+Otherwise, the <<glossary, command buffer nesting level>> of a secondary
+command buffer is equal to the maximum nesting level of all secondary
+command buffers executed by that command buffer plus one.
+Some implementations may: have a limit on the maximum nesting level of
+secondary command buffers that can: be recorded.
+This limit is advertised in <<limits-maxCommandBufferNestingLevel,
+pname:maxCommandBufferNestingLevel>>.
+
+If the <<features-nestedCommandBufferRendering,
+pname:nestedCommandBufferRendering>> feature is enabled, the implementation
+supports calling flink:vkCmdExecuteCommands inside secondary command buffers
+recorded with ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT.
+If the <<features-nestedCommandBufferSimultaneousUse,
+pname:nestedCommandBufferSimultaneousUse>> feature is enabled, the
+implementation supports calling flink:vkCmdExecuteCommands with secondary
+command buffers recorded with
+ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT.
+
+Whenever flink:vkCmdExecuteCommands is recorded inside a secondary command
+buffer recorded with ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
+each member of pname:pCommandBuffers must: have been recorded with a
+slink:VkCommandBufferBeginInfo with slink:VkCommandBufferInheritanceInfo
+compatible with the slink:VkCommandBufferInheritanceInfo of the command
+buffer into which the flink:vkCmdExecuteCommands call is being recorded.
+The slink:VkCommandBufferInheritanceRenderingInfo structures are compatible
+when the sname:VkCommandBufferInheritanceRenderingInfo::pname:renderpass are
+<<renderpass-compatibility, compatible>>, or if they are
+dlink:VK_NULL_HANDLE then the slink:VkCommandBufferInheritanceRenderingInfo
+members match, and all other members of
+sname:VkCommandBufferInheritanceRenderingInfo match.
+This requirement applies recursively, down to the most nested command buffer
+and up to the command buffer where the render pass was originally begun.
+
+endif::VK_EXT_nested_command_buffer[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[[commandbuffers-devicemask]]
+== Command Buffer Device Mask
+
+Each command buffer has a piece of state storing the current device mask of
+the command buffer.
+This mask controls which physical devices within the logical device all
+subsequent commands will execute on, including state-setting commands,
+action commands, and synchronization commands.
+
+ifndef::VK_NV_scissor_exclusive[]
+Scissor
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_scissor_exclusive[]
+Scissor, exclusive scissor,
+endif::VK_NV_scissor_exclusive[]
+and viewport state
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+(excluding the count of each)
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+can: be set to different values on each physical device (only when set as
+dynamic state), and each physical device will render using its local copy of
+the state.
+Other state is shared between physical devices, such that all physical
+devices use the most recently set values for the state.
+However, when recording an action command that uses a piece of state, the
+most recent command that set that state must: have included all physical
+devices that execute the action command in its current device mask.
+
+The command buffer's device mask is orthogonal to the
+pname:pCommandBufferDeviceMasks member of slink:VkDeviceGroupSubmitInfo.
+Commands only execute on a physical device if the device index is set in
+both device masks.
+
+[open,refpage='VkDeviceGroupCommandBufferBeginInfo',desc='Set the initial device mask for a command buffer',type='structs']
+--
+If the pname:pNext chain of slink:VkCommandBufferBeginInfo includes a
+sname:VkDeviceGroupCommandBufferBeginInfo structure, then that structure
+includes an initial device mask for the command buffer.
+
+The sname:VkDeviceGroupCommandBufferBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupCommandBufferBeginInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupCommandBufferBeginInfoKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceMask is the initial value of the command buffer's device
+    mask.
+
+The initial device mask also acts as an upper bound on the set of devices
+that can: ever be in the device mask in the command buffer.
+
+If this structure is not present, the initial value of a command buffer's
+device mask is set to include all physical devices in the logical device
+when the command buffer begins recording.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106]]
+    pname:deviceMask must: be a valid device mask value
+  * [[VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107]]
+    pname:deviceMask must: not be zero
+****
+
+include::{generated}/validity/structs/VkDeviceGroupCommandBufferBeginInfo.adoc[]
+--
+
+[open,refpage='vkCmdSetDeviceMask',desc='Modify device mask of a command buffer',type='protos']
+--
+To update the current device mask of a command buffer, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkCmdSetDeviceMask.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
+
+ifdef::VK_KHR_device_group[]
+include::{generated}/api/protos/vkCmdSetDeviceMaskKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:commandBuffer is command buffer whose current device mask is
+    modified.
+  * pname:deviceMask is the new value of the current device mask.
+
+pname:deviceMask is used to filter out subsequent commands from executing on
+all physical devices whose bit indices are not set in the mask, except
+commands beginning a render pass instance, commands transitioning to the
+next subpass in the render pass instance, and commands ending a render pass
+instance, which always execute on the set of physical devices whose bit
+indices are included in the pname:deviceMask member of the
+slink:VkDeviceGroupRenderPassBeginInfo structure passed to the command
+beginning the corresponding render pass instance.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDeviceMask-deviceMask-00108]]
+    pname:deviceMask must: be a valid device mask value
+  * [[VUID-vkCmdSetDeviceMask-deviceMask-00109]]
+    pname:deviceMask must: not be zero
+  * [[VUID-vkCmdSetDeviceMask-deviceMask-00110]]
+    pname:deviceMask must: not include any set bits that were not in the
+    slink:VkDeviceGroupCommandBufferBeginInfo::pname:deviceMask value when
+    the command buffer began recording
+  * [[VUID-vkCmdSetDeviceMask-deviceMask-00111]]
+    If fname:vkCmdSetDeviceMask is called inside a render pass instance,
+    pname:deviceMask must: not include any set bits that were not in the
+    slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceMask value when the
+    render pass instance began recording
+****
+
+include::{generated}/validity/protos/vkCmdSetDeviceMask.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_2_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_2_common.adoc
new file mode 100644
index 0000000..6c99a3c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_2_common.adoc
@@ -0,0 +1,304 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to structs taking VkPipelineStageFlags2 and VkAccessFlags2 parameters to define scopes
+// Set "stageMaskName" and "accessMaskName" attribute to the name of the stage and access mask to validate
+  * [[VUID-{refpage}-{accessMaskName}-03900]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03901]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_INDEX_READ_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT,
+    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03902]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT,
+    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03903]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03904]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_UNIFORM_READ_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03905]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03906]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03907]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-07454]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_SHADER_READ_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_EXT_opacity_micromap[]
+    ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT,
+endif::VK_EXT_opacity_micromap[]
+    or one of the etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03909]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_SHADER_WRITE_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03910]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03911]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03912]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03913]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03914]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_TRANSFER_READ_BIT,
+    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_COPY_BIT,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT,
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
+endif::VK_KHR_ray_tracing_maintenance1[]
+    or ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03915]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_TRANSFER_WRITE_BIT,
+    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_COPY_BIT,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT,
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT,
+    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+    or ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
+endif::VK_KHR_ray_tracing_maintenance1[]
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03916]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_READ_BIT,
+    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03917]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_WRITE_BIT,
+    pname:{stageMaskName} must: include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-{refpage}-{accessMaskName}-03918]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-{accessMaskName}-03919]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-{accessMaskName}-03920]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-04747]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03922]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{accessMaskName}-03923]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * [[VUID-{refpage}-{accessMaskName}-04994]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_NV_device_generated_commands[]
+  * [[VUID-{refpage}-{accessMaskName}-03924]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-03925]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * [[VUID-{refpage}-{accessMaskName}-03926]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-03927]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03928]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT
+  * [[VUID-{refpage}-{accessMaskName}-06256]]
+    If
+ifdef::VK_KHR_ray_query[]
+    the <<features-rayQuery, pname:rayQuery>> feature is not enabled and
+endif::VK_KHR_ray_query[]
+    pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
+    pname:{stageMaskName} must: not include any of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+    except ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-{refpage}-{accessMaskName}-07272]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_KHR_ray_tracing_maintenance1[]
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-{refpage}-{accessMaskName}-04858]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-04859]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-{refpage}-{accessMaskName}-04860]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-04861]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_NV_optical_flow[]
+  * [[VUID-{refpage}-{accessMaskName}-07455]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
+  * [[VUID-{refpage}-{accessMaskName}-07456]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
+endif::VK_NV_optical_flow[]
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-{refpage}-{accessMaskName}-07457]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT
+  * [[VUID-{refpage}-{accessMaskName}-07458]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-{refpage}-{accessMaskName}-08118]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+endif::VK_EXT_descriptor_buffer[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_common.adoc
new file mode 100644
index 0000000..09c29d9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/access_mask_common.adoc
@@ -0,0 +1,23 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdPipelineBarrier and vkCmdWaitEvents which is where both VkPipelineStageFlags and VkAccessFlags
+// parameters can be found.
+// Set "stageMaskName" and "accessMaskName" attribute to the name of the stage and access mask to validate
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-06257]]
+    If
+ifdef::VK_KHR_ray_query[]
+    the <<features-rayQuery, pname:rayQuery>> feature is not enabled and
+endif::VK_KHR_ray_query[]
+    a memory barrier pname:{accessMaskName} includes
+    ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
+    pname:{stageMaskName} must: not include any of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+    except ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_description_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_description_common.adoc
new file mode 100644
index 0000000..8c286f6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_description_common.adoc
@@ -0,0 +1,117 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to attachment description structures
+  * [[VUID-{refpage}-format-06699]]
+    If pname:format includes a color or depth component and pname:loadOp is
+    ename:VK_ATTACHMENT_LOAD_OP_LOAD, then pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED
+  * [[VUID-{refpage}-finalLayout-00843]]
+    pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+  * [[VUID-{refpage}-format-03280]]
+    If pname:format is a color format, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-03281]]
+    If pname:format is a depth/stencil format, pname:initialLayout must: not
+    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-{refpage}-format-03282]]
+    If pname:format is a color format, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-03283]]
+    If pname:format is a depth/stencil format, pname:finalLayout must: not
+    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-{refpage}-format-06487]]
+    If pname:format is a color format, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-{refpage}-format-06488]]
+    If pname:format is a color format, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-separateDepthStencilLayouts-03284]]
+    If the <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>> feature is not enabled,
+    pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+  * [[VUID-{refpage}-separateDepthStencilLayouts-03285]]
+    If the <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>> feature is not enabled,
+    pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+  * [[VUID-{refpage}-format-03286]]
+    If pname:format is a color format, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-03287]]
+    If pname:format is a color format, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-06906]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-06907]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-03290]]
+    If pname:format is a depth/stencil format which includes only the depth
+    component, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-format-03291]]
+    If pname:format is a depth/stencil format which includes only the depth
+    component, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-synchronization2-06908]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+  * [[VUID-{refpage}-synchronization2-06909]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-attachmentFeedbackLoopLayout-07309]]
+    If the <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>> feature is not enabled,
+    pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+  * [[VUID-{refpage}-attachmentFeedbackLoopLayout-07310]]
+    If the <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>> feature is not enabled,
+    pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-samples-08745]]
+    pname:samples must: be a bit value that is set in
+    pname:imageCreateSampleCounts (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) for the given
+    pname:format
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_reference_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_reference_common.adoc
new file mode 100644
index 0000000..dab8036
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/attachment_reference_common.adoc
@@ -0,0 +1,36 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to attachment reference structures
+  * [[VUID-{refpage}-layout-03077]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout
+    must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED, or
+    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-separateDepthStencilLayouts-03313]]
+    If the <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>> feature is not enabled, and
+    pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout must:
+    not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-synchronization2-06910]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:layout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-attachmentFeedbackLoopLayout-07311]]
+    If the <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>> feature is not enabled,
+    pname:layout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_buffer_common.adoc
new file mode 100644
index 0000000..604889b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_buffer_common.adoc
@@ -0,0 +1,144 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to binding any memory to a buffer
+  * [[VUID-{refpage}-buffer-07459]]
+    pname:buffer must: not have been bound to a memory object
+  * [[VUID-{refpage}-buffer-01030]]
+    pname:buffer must: not have been created with any sparse memory binding
+    flags
+  * [[VUID-{refpage}-memoryOffset-01031]]
+    pname:memoryOffset must: be less than the size of pname:memory
+  * [[VUID-{refpage}-memory-01035]]
+    pname:memory must: have been allocated using one of the memory types
+    allowed in the pname:memoryTypeBits member of the
+    sname:VkMemoryRequirements structure returned from a call to
+    fname:vkGetBufferMemoryRequirements with pname:buffer
+  * [[VUID-{refpage}-memoryOffset-01036]]
+    pname:memoryOffset must: be an integer multiple of the pname:alignment
+    member of the sname:VkMemoryRequirements structure returned from a call
+    to fname:vkGetBufferMemoryRequirements with pname:buffer
+  * [[VUID-{refpage}-size-01037]]
+    The pname:size member of the sname:VkMemoryRequirements structure
+    returned from a call to fname:vkGetBufferMemoryRequirements with
+    pname:buffer must: be less than or equal to the size of pname:memory
+    minus pname:memoryOffset
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+  * [[VUID-{refpage}-buffer-01444]]
+    If pname:buffer requires a dedicated allocation (as reported by
+    flink:vkGetBufferMemoryRequirements2 in
+    slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation
+    for pname:buffer), pname:memory must: have been allocated with
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer equal to pname:buffer
+  * [[VUID-{refpage}-memory-01508]]
+    If the sname:VkMemoryAllocateInfo provided when pname:memory was
+    allocated included a slink:VkMemoryDedicatedAllocateInfo structure in
+    its pname:pNext chain, and
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer was not
+    dlink:VK_NULL_HANDLE, then pname:buffer must: equal
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer, and
+    pname:memoryOffset must: be zero
+endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-01898]]
+    If pname:buffer was created with the
+    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must: be bound
+    to a memory object allocated with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+  * [[VUID-{refpage}-None-01899]]
+    If pname:buffer was created with the
+    ename:VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must: not
+    be bound to a memory object allocated with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+endif::VK_VERSION_1_1[]
+ifdef::VK_NV_dedicated_allocation[]
+  * [[VUID-{refpage}-buffer-01038]]
+    If pname:buffer was created with
+    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE, pname:memory must: have been allocated with
+    slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to a
+    buffer handle created with identical creation parameters to pname:buffer
+    and pname:memoryOffset must: be zero
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-apiVersion-07920]]
+    If
+ifdef::VK_KHR_dedicated_allocation[]
+    the apiext:VK_KHR_dedicated_allocation extension is not enabled,
+endif::VK_KHR_dedicated_allocation[]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[and]
+    pname:buffer was not created with
+    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE, pname:memory must: not have been allocated
+    dedicated for a specific buffer or image
+endif::VKSC_VERSION_1_0[]
+endif::VK_NV_dedicated_allocation[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-memory-02726]]
+    If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used
+    to allocate pname:memory is not `0`, it must: include at least one of
+    the handles set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
+    pname:buffer was created
+  * [[VUID-{refpage}-memory-02985]]
+    If pname:memory was allocated by a memory import operation,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    that is not slink:VkImportAndroidHardwareBufferInfoANDROID with a
+    non-`NULL` pname:buffer value,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    the external handle type of the imported memory must: also have been set
+    in slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
+    pname:buffer was created
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02986]]
+    If pname:memory was allocated with the
+    slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation
+    with a non-`NULL` pname:buffer value,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    must: also have been set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
+    pname:buffer was created
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+  * [[VUID-{refpage}-bufferDeviceAddress-03339]]
+    If the
+    slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddress
+    feature is enabled and pname:buffer was created with the
+    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, pname:memory
+    must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
+  * [[VUID-{refpage}-bufferDeviceAddressCaptureReplay-09200]]
+    If the
+    slink:VkPhysicalDeviceBufferDeviceAddressFeatures::pname:bufferDeviceAddressCaptureReplay
+    feature is enabled and pname:buffer was created with the
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set,
+    pname:memory must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-{refpage}-buffer-06408]]
+    If pname:buffer was created with
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to
+    slink:VkBufferCreateInfo::pname:pNext, pname:memory must: be allocated
+    with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to
+    slink:VkMemoryAllocateInfo::pname:pNext
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-{refpage}-descriptorBufferCaptureReplay-08112]]
+    If the pname:buffer was created with the
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
+    pname:memory must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
+  * [[VUID-{refpage}-buffer-09201]]
+    If the pname:buffer was created with the
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
+    pname:memory must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
+endif::VK_EXT_descriptor_buffer[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_image_common.adoc
new file mode 100644
index 0000000..8c0347f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_image_common.adoc
@@ -0,0 +1,126 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to binding any memory to an image
+  * [[VUID-{refpage}-image-07460]]
+    pname:image must: not have been bound to a memory object
+  * [[VUID-{refpage}-image-01045]]
+    pname:image must: not have been created with any sparse memory binding
+    flags
+  * [[VUID-{refpage}-memoryOffset-01046]]
+    pname:memoryOffset must: be less than the size of pname:memory
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+  * [[VUID-{refpage}-image-01445]]
+    If pname:image requires a dedicated allocation (as reported by
+    flink:vkGetImageMemoryRequirements2 in
+    slink:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation
+    for pname:image), pname:memory must: have been created with
+    slink:VkMemoryDedicatedAllocateInfo::pname:image equal to pname:image
+  * [[VUID-{refpage}-memory-02628]]
+    If
+ifdef::VK_NV_dedicated_allocation_image_aliasing[]
+    the <<features-dedicatedAllocationImageAliasing,
+    pname:dedicatedAllocationImageAliasing>> feature is not enabled, and
+endif::VK_NV_dedicated_allocation_image_aliasing[]
+    the sname:VkMemoryAllocateInfo provided when pname:memory was allocated
+    included a slink:VkMemoryDedicatedAllocateInfo structure in its
+    pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
+    was not dlink:VK_NULL_HANDLE, then pname:image must: equal
+    slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
+    must: be zero
+ifdef::VK_NV_dedicated_allocation_image_aliasing[]
+  * [[VUID-{refpage}-memory-02629]]
+    If the <<features-dedicatedAllocationImageAliasing,
+    pname:dedicatedAllocationImageAliasing>> feature is enabled, and the
+    sname:VkMemoryAllocateInfo provided when pname:memory was allocated
+    included a slink:VkMemoryDedicatedAllocateInfo structure in its
+    pname:pNext chain, and slink:VkMemoryDedicatedAllocateInfo::pname:image
+    was not dlink:VK_NULL_HANDLE, then pname:memoryOffset must: be zero, and
+    pname:image must: be either equal to
+    slink:VkMemoryDedicatedAllocateInfo::pname:image or an image that was
+    created using the same parameters in slink:VkImageCreateInfo, with the
+    exception that pname:extent and pname:arrayLayers may: differ subject to
+    the following restrictions: every dimension in the pname:extent
+    parameter of the image being bound must: be equal to or smaller than the
+    original image for which the allocation was created; and the
+    pname:arrayLayers parameter of the image being bound must: be equal to
+    or smaller than the original image for which the allocation was created
+endif::VK_NV_dedicated_allocation_image_aliasing[]
+endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-01901]]
+    If image was created with the ename:VK_IMAGE_CREATE_PROTECTED_BIT bit
+    set, the image must: be bound to a memory object allocated with a memory
+    type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+  * [[VUID-{refpage}-None-01902]]
+    If image was created with the ename:VK_IMAGE_CREATE_PROTECTED_BIT bit
+    not set, the image must: not be bound to a memory object created with a
+    memory type that reports ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+endif::VK_VERSION_1_1[]
+ifdef::VK_NV_dedicated_allocation[]
+  * [[VUID-{refpage}-image-01050]]
+    If pname:image was created with
+    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE, pname:memory must: have been created with
+    slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to an
+    image handle created with identical creation parameters to pname:image
+    and pname:memoryOffset must: be zero
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-apiVersion-07921]]
+    If
+ifdef::VK_KHR_dedicated_allocation[]
+    the apiext:VK_KHR_dedicated_allocation extension is not enabled,
+endif::VK_KHR_dedicated_allocation[]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[and]
+    pname:image was not created with
+    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE, pname:memory must: not have been allocated
+    dedicated for a specific buffer or image
+endif::VKSC_VERSION_1_0[]
+endif::VK_NV_dedicated_allocation[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-memory-02728]]
+    If the value of slink:VkExportMemoryAllocateInfo::pname:handleTypes used
+    to allocate pname:memory is not `0`, it must: include at least one of
+    the handles set in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
+    pname:image was created
+  * [[VUID-{refpage}-memory-02989]]
+    If pname:memory was created by a memory import operation,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    that is not slink:VkImportAndroidHardwareBufferInfoANDROID with a
+    non-`NULL` pname:buffer value,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    the external handle type of the imported memory must: also have been set
+    in slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
+    pname:image was created
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02990]]
+    If pname:memory was created with the
+    slink:VkImportAndroidHardwareBufferInfoANDROID memory import operation
+    with a non-`NULL` pname:buffer value,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    must: also have been set in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
+    pname:image was created
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-{refpage}-descriptorBufferCaptureReplay-08113]]
+    If the pname:image was created with the
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
+    pname:memory must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set
+  * [[VUID-{refpage}-image-09202]]
+    If the pname:image was created with the
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set,
+    pname:memory must: have been allocated with the
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set
+endif::VK_EXT_descriptor_buffer[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_index_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_index_buffer_common.adoc
new file mode 100644
index 0000000..27cbe4e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/bind_index_buffer_common.adoc
@@ -0,0 +1,28 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+  * [[VUID-{refpage}-offset-08782]]
+    pname:offset must: be less than the size of pname:buffer
+  * [[VUID-{refpage}-offset-08783]]
+    The sum of pname:offset and the base address of the range of
+    sname:VkDeviceMemory object that is backing pname:buffer, must: be a
+    multiple of the size of the type indicated by pname:indexType
+  * [[VUID-{refpage}-buffer-08784]]
+    pname:buffer must: have been created with the
+    ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag
+  * [[VUID-{refpage}-buffer-08785]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  * [[VUID-{refpage}-indexType-08786]]
+    pname:indexType must: not be ename:VK_INDEX_TYPE_NONE_KHR
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_EXT_index_type_uint8[]
+  * [[VUID-{refpage}-indexType-08787]]
+    If pname:indexType is ename:VK_INDEX_TYPE_UINT8_EXT, the
+    <<features-indexTypeUint8, pname:indexTypeUint8>> feature must: be
+    enabled
+endif::VK_EXT_index_type_uint8[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_command_buffer_common.adoc
new file mode 100644
index 0000000..085658a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_command_buffer_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdBlitImage* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01834]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01835]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01836]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_common.adoc
new file mode 100644
index 0000000..e2dae1a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/blit_image_common.adoc
@@ -0,0 +1,202 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdBlitImage* commands
+  * [[VUID-{refpage}-pRegions-00215]]
+    The source region specified by each element of pname:pRegions must: be a
+    region that is contained within pname:srcImage
+  * [[VUID-{refpage}-pRegions-00216]]
+    The destination region specified by each element of pname:pRegions must:
+    be a region that is contained within pname:dstImage
+  * [[VUID-{refpage}-pRegions-00217]]
+    The union of all destination regions, specified by the elements of
+    pname:pRegions, must: not overlap in memory with any texel that may: be
+    sampled during the blit operation
+  * [[VUID-{refpage}-srcImage-01999]]
+    The <<resources-image-format-features,format features>> of
+    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-06421]]
+    pname:srcImage must: not use a
+    <<formats-requiring-sampler-ycbcr-conversion, format that requires a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-00219]]
+    pname:srcImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
+  * [[VUID-{refpage}-srcImage-00220]]
+    If pname:srcImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-srcImageLayout-00221]]
+    pname:srcImageLayout must: specify the layout of the image subresources
+    of pname:srcImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImageLayout-00222]]
+    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImageLayout-01398]]
+    pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImage-02000]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_BLIT_DST_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-dstImage-06422]]
+    pname:dstImage must: not use a
+    <<formats-requiring-sampler-ycbcr-conversion, format that requires a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-dstImage-00224]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00225]]
+    If pname:dstImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImageLayout-00226]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00227]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-01399]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImage-00229]]
+    If either of pname:srcImage or pname:dstImage was created with a signed
+    integer elink:VkFormat, the other must: also have been created with a
+    signed integer elink:VkFormat
+  * [[VUID-{refpage}-srcImage-00230]]
+    If either of pname:srcImage or pname:dstImage was created with an
+    unsigned integer elink:VkFormat, the other must: also have been created
+    with an unsigned integer elink:VkFormat
+  * [[VUID-{refpage}-srcImage-00231]]
+    If either of pname:srcImage or pname:dstImage was created with a
+    depth/stencil format, the other must: have exactly the same format
+  * [[VUID-{refpage}-srcImage-00232]]
+    If pname:srcImage was created with a depth/stencil format, pname:filter
+    must: be ename:VK_FILTER_NEAREST
+  * [[VUID-{refpage}-srcImage-00233]]
+    pname:srcImage must: have been created with a pname:samples value of
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-dstImage-00234]]
+    pname:dstImage must: have been created with a pname:samples value of
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-filter-02001]]
+    If pname:filter is ename:VK_FILTER_LINEAR, then the
+    <<resources-image-format-features,format features>> of pname:srcImage
+    must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-filter-02002]]
+    If pname:filter is ename:VK_FILTER_CUBIC_EXT, then the
+    <<resources-image-format-features,format features>> of pname:srcImage
+    must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
+  * [[VUID-{refpage}-filter-00237]]
+    If pname:filter is ename:VK_FILTER_CUBIC_EXT, pname:srcImage must: be of
+    type ename:VK_IMAGE_TYPE_2D
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-srcSubresource-01705]]
+    The pname:srcSubresource.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:srcImage was created
+  * [[VUID-{refpage}-dstSubresource-01706]]
+    The pname:dstSubresource.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:dstImage was created
+  * [[VUID-{refpage}-srcSubresource-01707]]
+ifdef::VK_KHR_maintenance5[]
+    If pname:srcSubresource.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    [eq]#pname:srcSubresource.baseArrayLayer {plus}
+    pname:srcSubresource.layerCount# of each element of pname:pRegions must:
+    be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:srcImage was created
+  * [[VUID-{refpage}-dstSubresource-01708]]
+ifdef::VK_KHR_maintenance5[]
+    If pname:srcSubresource.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    [eq]#pname:dstSubresource.baseArrayLayer {plus}
+    pname:dstSubresource.layerCount# of each element of pname:pRegions must:
+    be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:dstImage was created
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-dstImage-02545]]
+    pname:dstImage and pname:srcImage must: not have been created with
+    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-srcImage-00240]]
+    If either pname:srcImage or pname:dstImage is of type
+    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
+    pname:srcSubresource.baseArrayLayer and
+    pname:dstSubresource.baseArrayLayer must: each be `0`, and
+    pname:srcSubresource.layerCount and pname:dstSubresource.layerCount
+    must: each be `1`
+  * [[VUID-{refpage}-aspectMask-00241]]
+    For each element of pname:pRegions, pname:srcSubresource.aspectMask
+    must: specify aspects present in pname:srcImage
+  * [[VUID-{refpage}-aspectMask-00242]]
+    For each element of pname:pRegions, pname:dstSubresource.aspectMask
+    must: specify aspects present in pname:dstImage
+  * [[VUID-{refpage}-srcOffset-00243]]
+    For each element of pname:pRegions, pname:srcOffsets[0].x and
+    pname:srcOffsets[1].x must: both be greater than or equal to `0` and
+    less than or equal to the width of the specified pname:srcSubresource of
+    pname:srcImage
+  * [[VUID-{refpage}-srcOffset-00244]]
+    For each element of pname:pRegions, pname:srcOffsets[0].y and
+    pname:srcOffsets[1].y must: both be greater than or equal to `0` and
+    less than or equal to the height of the specified pname:srcSubresource
+    of pname:srcImage
+  * [[VUID-{refpage}-srcImage-00245]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:srcOffsets[0].y must: be `0` and
+    pname:srcOffsets[1].y must: be `1`
+  * [[VUID-{refpage}-srcOffset-00246]]
+    For each element of pname:pRegions, pname:srcOffsets[0].z and
+    pname:srcOffsets[1].z must: both be greater than or equal to `0` and
+    less than or equal to the depth of the specified pname:srcSubresource of
+    pname:srcImage
+  * [[VUID-{refpage}-srcImage-00247]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:srcOffsets[0].z must: be `0` and pname:srcOffsets[1].z must: be
+    `1`
+  * [[VUID-{refpage}-dstOffset-00248]]
+    For each element of pname:pRegions, pname:dstOffsets[0].x and
+    pname:dstOffsets[1].x must: both be greater than or equal to `0` and
+    less than or equal to the width of the specified pname:dstSubresource of
+    pname:dstImage
+  * [[VUID-{refpage}-dstOffset-00249]]
+    For each element of pname:pRegions, pname:dstOffsets[0].y and
+    pname:dstOffsets[1].y must: both be greater than or equal to `0` and
+    less than or equal to the height of the specified pname:dstSubresource
+    of pname:dstImage
+  * [[VUID-{refpage}-dstImage-00250]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:dstOffsets[0].y must: be `0` and
+    pname:dstOffsets[1].y must: be `1`
+  * [[VUID-{refpage}-dstOffset-00251]]
+    For each element of pname:pRegions, pname:dstOffsets[0].z and
+    pname:dstOffsets[1].z must: both be greater than or equal to `0` and
+    less than or equal to the depth of the specified pname:dstSubresource of
+    pname:dstImage
+  * [[VUID-{refpage}-dstImage-00252]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:dstOffsets[0].z must: be `0` and pname:dstOffsets[1].z must: be
+    `1`
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_copy_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_copy_common.adoc
new file mode 100644
index 0000000..6f26cf6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_copy_common.adoc
@@ -0,0 +1,9 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkBufferCopy* struct
+  * [[VUID-{refpage}-size-01988]]
+    The pname:size must: be greater than `0`
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_memory_barrier_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_memory_barrier_common.adoc
new file mode 100644
index 0000000..1b844e0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_memory_barrier_common.adoc
@@ -0,0 +1,85 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkBufferMemoryBarrier* structs
+  * [[VUID-{refpage}-offset-01187]]
+    pname:offset must: be less than the size of pname:buffer
+  * [[VUID-{refpage}-size-01188]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    greater than `0`
+  * [[VUID-{refpage}-size-01189]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    less than or equal to than the size of pname:buffer minus pname:offset
+  * [[VUID-{refpage}-buffer-01931]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-buffer-09095]]
+    If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex must:
+    be
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    ename:VK_QUEUE_FAMILY_EXTERNAL,
+ifdef::VK_EXT_queue_family_foreign[]
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT,
+endif::VK_EXT_queue_family_foreign[]
+    or
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    a valid queue family
+  * [[VUID-{refpage}-buffer-09096]]
+    If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, pname:dstQueueFamilyIndex must:
+    be
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    ename:VK_QUEUE_FAMILY_EXTERNAL,
+ifdef::VK_EXT_queue_family_foreign[]
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT,
+endif::VK_EXT_queue_family_foreign[]
+    or
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    a valid queue family
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04087]]
+    If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex,
+    at least one of pname:srcQueueFamilyIndex or pname:dstQueueFamilyIndex
+    must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+ifdef::VK_EXT_queue_family_foreign[]
+    or ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+endif::VK_EXT_queue_family_foreign[]
+  * [[VUID-{refpage}-None-09097]]
+    {empty}
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[If]
+ifdef::VK_KHR_external_memory[]
+    the apiext:VK_KHR_external_memory extension is not enabled,
+endif::VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1+VK_KHR_external_memory[and]
+ifdef::VK_VERSION_1_1[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is not greater than or equal to Version 1.1,
+endif::VK_VERSION_1_1[]
+    pname:srcQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+  * [[VUID-{refpage}-None-09098]]
+    {empty}
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[If]
+ifdef::VK_KHR_external_memory[]
+    the apiext:VK_KHR_external_memory extension is not enabled,
+endif::VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1+VK_KHR_external_memory[and]
+ifdef::VK_VERSION_1_1[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is not greater than or equal to Version 1.1,
+endif::VK_VERSION_1_1[]
+    pname:dstQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+ifdef::VK_EXT_queue_family_foreign[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-09099]]
+    If the apiext:VK_EXT_queue_family_foreign extension is not enabled
+    pname:srcQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+  * [[VUID-{refpage}-dstQueueFamilyIndex-09100]]
+    If the apiext:VK_EXT_queue_family_foreign extension is not enabled
+    pname:dstQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+endif::VK_EXT_queue_family_foreign[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_or_memory_image_copy_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_or_memory_image_copy_common.adoc
new file mode 100644
index 0000000..ee132ba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/buffer_or_memory_image_copy_common.adoc
@@ -0,0 +1,28 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkBufferImageCopy*, VkMemoryToImageCopy* and VkImageToMemoryCopy*
+// structs
+// This relies on additional attributes {bufferrowlength} and
+// {bufferimageheight} set by the command which includes this file, specifying
+// the type of the non-image target of the copy (which is either buffer* or
+// memory*).
+
+  * [[VUID-{refpage}-{bufferrowlength}-09101]]
+    pname:{bufferrowlength} must: be `0`, or greater than or equal to the
+    pname:width member of pname:imageExtent
+  * [[VUID-{refpage}-{bufferimageheight}-09102]]
+    pname:{bufferimageheight} must: be `0`, or greater than or equal to the
+    pname:height member of pname:imageExtent
+  * [[VUID-{refpage}-aspectMask-09103]]
+    The pname:aspectMask member of pname:imageSubresource must: only have a
+    single bit set
+  * [[VUID-{refpage}-imageExtent-06659]]
+    pname:imageExtent.width must: not be 0
+  * [[VUID-{refpage}-imageExtent-06660]]
+    pname:imageExtent.height must: not be 0
+  * [[VUID-{refpage}-imageExtent-06661]]
+    pname:imageExtent.depth must: not be 0
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_common.adoc
new file mode 100644
index 0000000..5b88784
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_common.adoc
@@ -0,0 +1,209 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to acceleration structure build commands
+  * [[VUID-{refpage}-mode-04628]]
+    The pname:mode member of each element of pname:pInfos must: be a valid
+    elink:VkBuildAccelerationStructureModeKHR value
+  * [[VUID-{refpage}-srcAccelerationStructure-04629]]
+    If the pname:srcAccelerationStructure member of any element of
+    pname:pInfos is not dlink:VK_NULL_HANDLE, the
+    pname:srcAccelerationStructure member must: be a valid
+    slink:VkAccelerationStructureKHR handle
+  * [[VUID-{refpage}-pInfos-04630]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
+    pname:srcAccelerationStructure member must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-{refpage}-pInfos-03403]]
+    The pname:srcAccelerationStructure member of any element of pname:pInfos
+    must: not be the same acceleration structure as the
+    pname:dstAccelerationStructure member of any other element of
+    pname:pInfos
+  * [[VUID-{refpage}-dstAccelerationStructure-03698]]
+    The pname:dstAccelerationStructure member of any element of pname:pInfos
+    must: not be the same acceleration structure as the
+    pname:dstAccelerationStructure member of any other element of
+    pname:pInfos
+  * [[VUID-{refpage}-dstAccelerationStructure-03800]]
+    The pname:dstAccelerationStructure member of any element of pname:pInfos
+    must: be a valid slink:VkAccelerationStructureKHR handle
+  * [[VUID-{refpage}-pInfos-03699]]
+    For each element of pname:pInfos, if its pname:type member is
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its
+    pname:dstAccelerationStructure member must: have been created with a
+    value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to
+    either ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+  * [[VUID-{refpage}-pInfos-03700]]
+    For each element of pname:pInfos, if its pname:type member is
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its
+    pname:dstAccelerationStructure member must: have been created with a
+    value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to
+    either ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+  * [[VUID-{refpage}-pInfos-03663]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR,
+    <<acceleration-structure-inactive-prims,inactive primitives>> in its
+    pname:srcAccelerationStructure member must: not be made active
+  * [[VUID-{refpage}-pInfos-03664]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives
+    in its pname:srcAccelerationStructure member must: not be made
+    <<acceleration-structure-inactive-prims,inactive>>
+  * [[VUID-{refpage}-None-03407]]
+    The pname:dstAccelerationStructure member of any element of pname:pInfos
+    must: not be referenced by the pname:geometry.instances.data member of
+    any element of pname:pGeometries or pname:ppGeometries with a
+    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other
+    element of pname:pInfos
+  * [[VUID-{refpage}-dstAccelerationStructure-03701]]
+    The range of memory backing the pname:dstAccelerationStructure member of
+    any element of pname:pInfos that is accessed by this command must: not
+    overlap the memory backing the pname:srcAccelerationStructure member of
+    any other element of pname:pInfos with a pname:mode equal to
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed
+    by this command
+  * [[VUID-{refpage}-dstAccelerationStructure-03702]]
+    The range of memory backing the pname:dstAccelerationStructure member of
+    any element of pname:pInfos that is accessed by this command must: not
+    overlap the memory backing the pname:dstAccelerationStructure member of
+    any other element of pname:pInfos, which is accessed by this command
+  * [[VUID-{refpage}-dstAccelerationStructure-03703]]
+    The range of memory backing the pname:dstAccelerationStructure member of
+    any element of pname:pInfos that is accessed by this command must: not
+    overlap the memory backing the pname:scratchData member of any element
+    of pname:pInfos (including the same element), which is accessed by this
+    command
+  * [[VUID-{refpage}-scratchData-03704]]
+    The range of memory backing the pname:scratchData member of any element
+    of pname:pInfos that is accessed by this command must: not overlap the
+    memory backing the pname:scratchData member of any other element of
+    pname:pInfos, which is accessed by this command
+  * [[VUID-{refpage}-scratchData-03705]]
+    The range of memory backing the pname:scratchData member of any element
+    of pname:pInfos that is accessed by this command must: not overlap the
+    memory backing the pname:srcAccelerationStructure member of any element
+    of pname:pInfos with a pname:mode equal to
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the
+    same element), which is accessed by this command
+  * [[VUID-{refpage}-dstAccelerationStructure-03706]]
+    The range of memory backing the pname:dstAccelerationStructure member of
+    any element of pname:pInfos that is accessed by this command must: not
+    overlap the memory backing any acceleration structure referenced by the
+    pname:geometry.instances.data member of any element of pname:pGeometries
+    or pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of
+    pname:pInfos, which is accessed by this command
+  * [[VUID-{refpage}-pInfos-03667]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
+    pname:srcAccelerationStructure member must: have previously been
+    constructed with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in
+    slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:flags in the
+    build
+  * [[VUID-{refpage}-pInfos-03668]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
+    pname:srcAccelerationStructure and pname:dstAccelerationStructure
+    members must: either be the same slink:VkAccelerationStructureKHR, or
+    not have any <<resources-memory-aliasing, memory aliasing>>
+  * [[VUID-{refpage}-pInfos-03758]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
+    pname:geometryCount member must: have the same value which was specified
+    when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03759]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:flags
+    member must: have the same value which was specified when
+    pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03760]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:type
+    member must: have the same value which was specified when
+    pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03761]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, its pname:geometryType
+    member must: have the same value which was specified when
+    pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03762]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, its pname:flags member
+    must: have the same value which was specified when
+    pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03763]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
+    pname:geometry.triangles.vertexFormat member must: have the same value
+    which was specified when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03764]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
+    pname:geometry.triangles.maxVertex member must: have the same value
+    which was specified when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03765]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its
+    pname:geometry.triangles.indexType member must: have the same value
+    which was specified when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03766]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its
+    pname:geometry.triangles.transformData address was `NULL` when
+    pname:srcAccelerationStructure was last built, then it must: be `NULL`
+  * [[VUID-{refpage}-pInfos-03767]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its
+    pname:geometry.triangles.transformData address was not `NULL` when
+    pname:srcAccelerationStructure was last built, then it must: not be
+    `NULL`
+  * [[VUID-{refpage}-pInfos-03768]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
+    sname:VkAccelerationStructureGeometryKHR structure referred to by its
+    pname:pGeometries or pname:ppGeometries members, if pname:geometryType
+    is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and
+    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
+    then the value of each index referenced must: be the same as the
+    corresponding index value when pname:srcAccelerationStructure was last
+    built
+  * [[VUID-{refpage}-primitiveCount-03769]]
+    For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by
+    this command, its pname:primitiveCount member must: have the same value
+    which was specified when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-firstVertex-03770]]
+    For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by
+    this command, if the corresponding geometry uses indices, its
+    pname:firstVertex member must: have the same value which was specified
+    when pname:srcAccelerationStructure was last built
+  * [[VUID-{refpage}-pInfos-03801]]
+    For each element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding
+    {maxinstancecheck} must: be less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxInstanceCount
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_device_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_device_common.adoc
new file mode 100644
index 0000000..cd06a03
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_device_common.adoc
@@ -0,0 +1,189 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to acceleration structure build commands executed on the device
+  * [[VUID-{refpage}-pInfos-03707]]
+    For each element of pname:pInfos, the pname:buffer used to create its
+    pname:dstAccelerationStructure member must: be bound to device memory
+  * [[VUID-{refpage}-pInfos-03708]]
+    For each element of pname:pInfos, if its pname:mode member is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
+    used to create its pname:srcAccelerationStructure member must: be bound
+    to device memory
+  * [[VUID-{refpage}-pInfos-03709]]
+    For each element of pname:pInfos, the pname:buffer used to create each
+    acceleration structure referenced by the pname:geometry.instances.data
+    member of any element of pname:pGeometries or pname:ppGeometries with a
+    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
+    bound to device memory
+  * [[VUID-{refpage}-pInfos-03671]]
+    If pname:pInfos[i].pname:mode is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses
+    between pname:pInfos[i].pname:scratchData.deviceAddress and
+    pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
+    the buffer device address range of the same buffer, where N is given by
+    the pname:buildScratchSize member of the
+    slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
+    call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
+    primitive count
+  * [[VUID-{refpage}-pInfos-03672]]
+    If pname:pInfos[i].pname:mode is
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses
+    between pname:pInfos[i].pname:scratchData.deviceAddress and
+    pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
+    the buffer device address range of the same buffer, where N is given by
+    the pname:updateScratchSize member of the
+    slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
+    call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
+    primitive count
+  * [[VUID-{refpage}-geometry-03673]]
+    The buffers from which the buffer device addresses for all of the
+    pname:geometry.triangles.vertexData, pname:geometry.triangles.indexData,
+    pname:geometry.triangles.transformData, pname:geometry.aabbs.data, and
+    pname:geometry.instances.data members of all
+    pname:pInfos[i].pname:pGeometries and pname:pInfos[i].pname:ppGeometries
+    are queried must: have been created with the
+    ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
+    usage flag
+  * [[VUID-{refpage}-pInfos-03674]]
+    The buffer from which the buffer device address
+    pname:pInfos[i].pname:scratchData.deviceAddress is queried must: have
+    been created with ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag
+  * [[VUID-{refpage}-pInfos-03802]]
+    For each element of pname:pInfos, its pname:scratchData.deviceAddress
+    member must: be a valid device address obtained from
+    flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03803]]
+    For each element of pname:pInfos, if pname:scratchData.deviceAddress is
+    the address of a non-sparse buffer then it must: be bound completely and
+    contiguously to a single slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-03710]]
+    For each element of pname:pInfos, its pname:scratchData.deviceAddress
+    member must: be a multiple of
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:minAccelerationStructureScratchOffsetAlignment
+  * [[VUID-{refpage}-pInfos-03804]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
+    pname:geometry.triangles.vertexData.deviceAddress must: be a valid
+    device address obtained from flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03805]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.vertexData.deviceAddress is the address of a
+    non-sparse buffer then it must: be bound completely and contiguously to
+    a single slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-03711]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
+    pname:geometry.triangles.vertexData.deviceAddress must: be aligned to
+    the size in bytes of the smallest component of the format in
+    pname:vertexFormat
+  * [[VUID-{refpage}-pInfos-03806]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
+    pname:geometry.triangles.indexData.deviceAddress must: be a valid device
+    address obtained from flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03807]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
+    if pname:geometry.triangles.indexData.deviceAddress is the address of a
+    non-sparse buffer then it must: be bound completely and contiguously to
+    a single slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-03712]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and with
+    pname:geometry.triangles.indexType not equal to
+    ename:VK_INDEX_TYPE_NONE_KHR,
+    pname:geometry.triangles.indexData.deviceAddress must: be aligned to the
+    size in bytes of the type in pname:indexType
+  * [[VUID-{refpage}-pInfos-03808]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.transformData.deviceAddress is not `0`, it
+    must: be a valid device address obtained from
+    flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03809]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.transformData.deviceAddress is the address of a
+    non-sparse buffer then it must: be bound completely and contiguously to
+    a single slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-03810]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
+    pname:geometry.triangles.transformData.deviceAddress is not `0`, it
+    must: be aligned to `16` bytes
+  * [[VUID-{refpage}-pInfos-03811]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_AABBS_KHR,
+    pname:geometry.aabbs.data.deviceAddress must: be a valid device address
+    obtained from flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03812]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_AABBS_KHR, if
+    pname:geometry.aabbs.data.deviceAddress is the address of a non-sparse
+    buffer then it must: be bound completely and contiguously to a single
+    slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-03714]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_AABBS_KHR,
+    pname:geometry.aabbs.data.deviceAddress must: be aligned to `8` bytes
+  * [[VUID-{refpage}-pInfos-03715]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
+    is ename:VK_FALSE, pname:geometry.instances.data.deviceAddress must: be
+    aligned to `16` bytes
+  * [[VUID-{refpage}-pInfos-03716]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
+    is ename:VK_TRUE, pname:geometry.instances.data.deviceAddress must: be
+    aligned to `8` bytes
+  * [[VUID-{refpage}-pInfos-03717]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
+    is ename:VK_TRUE, each element of
+    pname:geometry.instances.data.deviceAddress in device memory must: be
+    aligned to `16` bytes
+  * [[VUID-{refpage}-pInfos-03813]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
+    pname:geometry.instances.data.deviceAddress must: be a valid device
+    address obtained from flink:vkGetBufferDeviceAddress
+  * [[VUID-{refpage}-pInfos-03814]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if
+    pname:geometry.instances.data.deviceAddress is the address of a
+    non-sparse buffer then it must: be bound completely and contiguously to
+    a single slink:VkDeviceMemory object
+  * [[VUID-{refpage}-pInfos-06707]]
+    For any element of pname:pInfos[i].pname:pGeometries or
+    pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
+    ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
+    slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
+    value in pname:geometry.instances.data.deviceAddress must: be a valid
+    device address containing a value obtained from
+    flink:vkGetAccelerationStructureDeviceAddressKHR or `0`
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.adoc
new file mode 100644
index 0000000..5a7a7e1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to acceleration structure build commands
+  * [[VUID-{refpage}-pInfos-03675]]
+    For each pname:pInfos[i], pname:dstAccelerationStructure must: have been
+    created with a value of
+    slink:VkAccelerationStructureCreateInfoKHR::pname:size greater than or
+    equal to the memory size required by the build operation, as returned by
+    flink:vkGetAccelerationStructureBuildSizesKHR with [eq]#pname:pBuildInfo
+    = pname:pInfos[i]# and with each element of the
+    pname:pMaxPrimitiveCounts array greater than or equal to the equivalent
+    pname:ppBuildRangeInfos[i][j].pname:primitiveCount values for code:j in
+    [eq]#[0,pname:pInfos[i].pname:geometryCount)#
+  * [[VUID-{refpage}-ppBuildRangeInfos-03676]]
+    Each element of pname:ppBuildRangeInfos[i] must: be a valid pointer to
+    an array of pname:pInfos[i].pname:geometryCount
+    sname:VkAccelerationStructureBuildRangeInfoKHR structures
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_micromap_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_micromap_common.adoc
new file mode 100644
index 0000000..d8da307
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/build_micromap_common.adoc
@@ -0,0 +1,40 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to micromap build commands
+  * [[VUID-{refpage}-pInfos-07461]]
+    For each pname:pInfos[i], pname:dstMicromap must: have been created with
+    a value of slink:VkMicromapCreateInfoEXT::pname:size greater than or
+    equal to the memory size required by the build operation, as returned by
+    flink:vkGetMicromapBuildSizesEXT with [eq]#pname:pBuildInfo =
+    pname:pInfos[i]#
+  * [[VUID-{refpage}-mode-07462]]
+    The pname:mode member of each element of pname:pInfos must: be a valid
+    elink:VkBuildMicromapModeEXT value
+  * [[VUID-{refpage}-dstMicromap-07463]]
+    The pname:dstMicromap member of any element of pname:pInfos must: be a
+    valid slink:VkMicromapEXT handle
+  * [[VUID-{refpage}-pInfos-07464]]
+    For each element of pname:pInfos its pname:type member must: match the
+    value of slink:VkMicromapCreateInfoEXT::pname:type when its
+    pname:dstMicromap was created
+  * [[VUID-{refpage}-dstMicromap-07465]]
+    The range of memory backing the pname:dstMicromap member of any element
+    of pname:pInfos that is accessed by this command must: not overlap the
+    memory backing the pname:dstMicromap member of any other element of
+    pname:pInfos, which is accessed by this command
+  * [[VUID-{refpage}-dstMicromap-07466]]
+    The range of memory backing the pname:dstMicromap member of any element
+    of pname:pInfos that is accessed by this command must: not overlap the
+    memory backing the pname:scratchData member of any element of
+    pname:pInfos (including the same element), which is accessed by this
+    command
+  * [[VUID-{refpage}-scratchData-07467]]
+    The range of memory backing the pname:scratchData member of any element
+    of pname:pInfos that is accessed by this command must: not overlap the
+    memory backing the pname:scratchData member of any other element of
+    pname:pInfos, which is accessed by this command
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/compute_graph_pipeline_create_info_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/compute_graph_pipeline_create_info_common.adoc
new file mode 100644
index 0000000..627d3ee
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/compute_graph_pipeline_create_info_common.adoc
@@ -0,0 +1,64 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all compute and execution graph create infos
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-{refpage}-flags-03365]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+  * [[VUID-{refpage}-flags-03366]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+  * [[VUID-{refpage}-flags-03367]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+  * [[VUID-{refpage}-flags-03368]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+  * [[VUID-{refpage}-flags-03369]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+  * [[VUID-{refpage}-flags-03370]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-{refpage}-flags-03576]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-{refpage}-flags-04945]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_NV_device_generated_commands[]
+ifndef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-{refpage}-flags-02874]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+endif::VK_NV_device_generated_commands_compute[]
+ifdef::VK_NV_device_generated_commands_compute[]
+  * [[VUID-{refpage}-flags-09007]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the
+    <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+  * [[VUID-{refpage}-flags-09008]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the pname:pNext
+    chain must: include a pointer to a valid instance of
+    slink:VkComputePipelineIndirectBufferInfoNV specifying the address where
+    the pipeline's metadata will be saved
+endif::VK_NV_device_generated_commands_compute[]
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-{refpage}-pipelineCreationCacheControl-02875]]
+    If the <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_acceleration_structure_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_acceleration_structure_common.adoc
new file mode 100644
index 0000000..111c81d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_acceleration_structure_common.adoc
@@ -0,0 +1,33 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to acceleration structure copy commands
+  * [[VUID-{refpage}-mode-03410]]
+    pname:mode must: be
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR or
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
+  * [[VUID-{refpage}-src-04963]]
+    The source acceleration structure pname:src must: have been constructed
+    prior to the execution of this command
+  * [[VUID-{refpage}-src-03411]]
+    If pname:mode is ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
+    pname:src must: have been constructed with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR in the
+    build
+  * [[VUID-{refpage}-buffer-03718]]
+    The pname:buffer used to create pname:src must: be bound to device
+    memory
+  * [[VUID-{refpage}-buffer-03719]]
+    The pname:buffer used to create pname:dst must: be bound to device
+    memory
+  * [[VUID-{refpage}-dst-07791]]
+    The range of memory backing pname:dst that is accessed by this command
+    must: not overlap the memory backing pname:src that is accessed by this
+    command
+  * [[VUID-{refpage}-dst-07792]]
+    pname:dst must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object via
+    flink:vkBindAccelerationStructureMemoryNV
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_common.adoc
new file mode 100644
index 0000000..f80e3b7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_common.adoc
@@ -0,0 +1,38 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vk*Copy* commands that have image as source and/or destination.
+// This relies on an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+// Additionally, it relies on the {imagesubresource} attribute to specify the
+// field in pRegions corresponding to {imageparam}
+
+  * [[VUID-{refpage}-{imageparam}-07966]]
+    If pname:{imageparam} is non-sparse then the image
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    or the specified _disjoint_ plane
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-{refpage}-{imagesubresource}-07967]]
+    The pname:{imagesubresource}.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:{imageparam} was created
+  * [[VUID-{refpage}-{imagesubresource}-07968]]
+ifdef::VK_KHR_maintenance5[]
+    If pname:{imageSubresource}.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    [eq]#pname:{imagesubresource}.baseArrayLayer {plus}
+    pname:{imageSubresource}.layerCount# of each element of pname:pRegions
+    must: be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:{imageparam} was created
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-{imageparam}-07969]]
+    pname:{imageparam} must: not have been created with pname:flags
+    containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc
new file mode 100644
index 0000000..80802b3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc
@@ -0,0 +1,30 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vk*Copy* commands that have image as source and/or destination and
+// where VkCopyCommandTransformInfoQCOM is not applicable.
+// This relies on an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+// Additionally, it relies on the {imagesubresource} attribute to specify the
+// field in pRegions corresponding to {imageparam}, as well as {imageoffset}
+// and {imageextents} to specify the fields in pRegions corresponding to the
+// offset and extent of the copy.
+
+  * [[VUID-{refpage}-{imagesubresource}-07970]]
+    The image region specified by each element of pname:pRegions must: be
+    contained within the specified pname:{imagesubresource} of
+    pname:{imageparam}
+  * [[VUID-{refpage}-{imagesubresource}-07971]]
+    For each element of pname:pRegions, pname:{imageoffset}.x and
+    [eq]#(pname:{imageextent}.width {plus} pname:{imageoffset}.x)# must:
+    both be greater than or equal to `0` and less than or equal to the width
+    of the specified pname:{imagesubresource} of pname:{imageparam}
+  * [[VUID-{refpage}-{imagesubresource}-07972]]
+    For each element of pname:pRegions, pname:{imageoffset}.y and
+    [eq]#(pname:{imageextent}.height {plus} pname:{imageoffset}.y)# must:
+    both be greater than or equal to `0` and less than or equal to the
+    height of the specified pname:{imagesubresource} of pname:{imageparam}
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc
new file mode 100644
index 0000000..ded944c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc
@@ -0,0 +1,15 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vk*Copy* commands that have image as source and/or destination and
+// require the image to be single sampled.
+// This relies on an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+
+  * [[VUID-{refpage}-{imageparam}-07973]]
+    pname:{imageparam} must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_command_buffer_common.adoc
new file mode 100644
index 0000000..4a4607a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_command_buffer_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBuffer* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01822]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcBuffer must: not be a protected buffer
+  * [[VUID-{refpage}-commandBuffer-01823]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be a protected buffer
+  * [[VUID-{refpage}-commandBuffer-01824]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be an unprotected buffer
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_common.adoc
new file mode 100644
index 0000000..efe07d2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_common.adoc
@@ -0,0 +1,35 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBuffer* commands
+  * [[VUID-{refpage}-srcOffset-00113]]
+    The pname:srcOffset member of each element of pname:pRegions must: be
+    less than the size of pname:srcBuffer
+  * [[VUID-{refpage}-dstOffset-00114]]
+    The pname:dstOffset member of each element of pname:pRegions must: be
+    less than the size of pname:dstBuffer
+  * [[VUID-{refpage}-size-00115]]
+    The pname:size member of each element of pname:pRegions must: be less
+    than or equal to the size of pname:srcBuffer minus pname:srcOffset
+  * [[VUID-{refpage}-size-00116]]
+    The pname:size member of each element of pname:pRegions must: be less
+    than or equal to the size of pname:dstBuffer minus pname:dstOffset
+  * [[VUID-{refpage}-pRegions-00117]]
+    The union of the source regions, and the union of the destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcBuffer-00118]]
+    pname:srcBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+  * [[VUID-{refpage}-srcBuffer-00119]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstBuffer-00120]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstBuffer-00121]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.adoc
new file mode 100644
index 0000000..0d1d4b2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.adoc
@@ -0,0 +1,39 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01828]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcBuffer must: not be a protected buffer
+  * [[VUID-{refpage}-commandBuffer-01829]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01830]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-07737]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, the
+    pname:bufferOffset member of any element of {regionsparam} must: be a
+    multiple of `4`
+  * [[VUID-{refpage}-imageOffset-07738]]
+    The pname:imageOffset and pname:imageExtent members of each element of
+    {regionsparam} must: respect the image transfer granularity requirements
+    of pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+  * [[VUID-{refpage}-commandBuffer-07739]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT, for each element of {regionsparam}, the
+    pname:aspectMask member of pname:imageSubresource must: not be
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_common.adoc
new file mode 100644
index 0000000..ff1420c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_buffer_to_image_common.adoc
@@ -0,0 +1,48 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * [[VUID-{refpage}-pRegions-00173]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcBuffer-00174]]
+    pname:srcBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-01997]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImageLayout-00180]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-dstImageLayout-01396]]
+    pname:dstImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-{refpage}-pRegions-07931]]
+ifdef::VK_EXT_depth_range_unrestricted[]
+    If apiext:VK_EXT_depth_range_unrestricted is not enabled, for
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[For]
+    each element of pname:pRegions whose pname:imageSubresource contains a
+    depth aspect, the data in pname:srcBuffer must: be in the range
+    [eq]#[0,1]#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc
new file mode 100644
index 0000000..fc1605c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc
@@ -0,0 +1,31 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to commands copying from images to buffers, or buffers to images
+// This relies on the following additional attributes set by the command which
+// includes this file:
+//
+//  - {imageparam}, specifying the name of the source or destination image,
+
+  * [[VUID-{refpage}-{imageparam}-07975]]
+    If pname:{imageparam} does not have either a depth/stencil format
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    or a <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>,
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    then for each element of pname:pRegions, pname:bufferOffset must: be a
+    multiple of the <<formats-compatibility-classes,texel block size>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-07976]]
+    If pname:{imageparam} has a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
+    for each element of pname:pRegions, pname:bufferOffset must: be a
+    multiple of the element size of the compatible format for the format and
+    the pname:aspectMask of the pname:imageSubresource as defined in
+    <<formats-compatible-planes>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-07978]]
+    If pname:{imageparam} has a depth/stencil format, the pname:bufferOffset
+    member of any element of pname:pRegions must: be a multiple of `4`
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc
new file mode 100644
index 0000000..9fa3a41
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc
@@ -0,0 +1,75 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to commands copying from images to buffers, or buffers to images
+// This relies on the following additional attributes set by the command which
+// includes this file:
+//
+//  - {imageparam}, specifying the name of the source or destination image,
+//  - {imagesubresource} specifying the field in pRegions corresponding to
+//    {imageparam},
+//  - {imageoffset} and {imageextents} specifying the fields in pRegions
+//    corresponding to the offset and extent of the copy.
+
+  * [[VUID-{refpage}-{imageparam}-07979]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:{imageoffset}.y must: be `0` and
+    pname:{imageextent}.height must: be `1`
+  * [[VUID-{refpage}-{imageoffset}-09104]]
+    For each element of pname:pRegions, pname:{imageoffset}.z and
+    [eq]#(pname:{imageextent}.depth {plus} pname:{imageoffset}.z)# must:
+    both be greater than or equal to `0` and less than or equal to the depth
+    of the specified pname:{imagesubresource} of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-07980]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:{imageoffset}.z must: be `0` and pname:{imageextent}.depth must:
+    be `1`
+  * [[VUID-{refpage}-{imageparam}-07274]]
+    For each element of pname:pRegions, pname:{imageoffset}.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-07275]]
+    For each element of pname:pRegions, pname:{imageoffset}.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-07276]]
+    For each element of pname:pRegions, pname:{imageoffset}.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-00207]]
+    For each element of pname:pRegions, if the sum of pname:{imageoffset}.x
+    and pname:extent.width does not equal the width of the subresource
+    specified by pname:srcSubresource, pname:extent.width must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-00208]]
+    For each element of pname:pRegions, if the sum of pname:{imageoffset}.y
+    and pname:extent.height does not equal the height of the subresource
+    specified by pname:srcSubresource, pname:extent.height must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-00209]]
+    For each element of pname:pRegions, if the sum of pname:{imageoffset}.z
+    and pname:extent.depth does not equal the depth of the subresource
+    specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imagesubresource}-09105]]
+    For each element of pname:pRegions, pname:{imagesubresource}.aspectMask
+    must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-07981]]
+    If pname:{imageparam} has a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar image
+    format>>, then for each element of pname:pRegions,
+    pname:{imagesubresource}.aspectMask must: be a single valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-07983]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each
+    element of pname:pRegions, pname:{imagesubresource}.baseArrayLayer must:
+    be `0` and pname:{imagesubresource}.layerCount must: be `1`
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc
new file mode 100644
index 0000000..5b57635
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc
@@ -0,0 +1,29 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to commands copying from images to buffers, or buffers to images
+// This relies on the following additional attributes set by the command which
+// includes this file:
+//
+//  - {imageparam}, specifying the name of the source or destination image,
+//  - {bufferrowlength}, either "bufferRowLength" or "memoryRowLength" based on
+//    whether the non-image copy target is a buffer or host memory,
+//  - {bufferimageheight}, either "bufferImageHeight" or "memoryImageHeight"
+//    similarly,
+
+  * [[VUID-{refpage}-{bufferrowlength}-09106]]
+    For each element of pname:pRegions, pname:{bufferrowlength} must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{bufferimageheight}-09107]]
+    For each element of pname:pRegions, pname:{bufferimageheight} must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{bufferrowlength}-09108]]
+    For each element of pname:pRegions, pname:{bufferrowlength} divided by
+    the <<formats-compatibility-classes,texel block extent width>> and then
+    multiplied by the texel block size of pname:{imageparam} must: be less
+    than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_command_buffer_common.adoc
new file mode 100644
index 0000000..39b06d2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_command_buffer_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyImage* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01825]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01826]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01827]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_common.adoc
new file mode 100644
index 0000000..a274403
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_common.adoc
@@ -0,0 +1,360 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyImage* commands
+  * [[VUID-{refpage}-pRegions-00124]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-01995]]
+    The <<resources-image-format-features,format features>> of
+    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImageLayout-00128]]
+    pname:srcImageLayout must: specify the layout of the image subresources
+    of pname:srcImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-srcImageLayout-01917]]
+    pname:srcImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-01996]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImageLayout-00133]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-dstImageLayout-01395]]
+    pname:dstImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-{refpage}-srcImage-01548]]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    If the elink:VkFormat of each of pname:srcImage and pname:dstImage is
+    not a <<formats-requiring-sampler-ycbcr-conversion,_multi-planar
+    format_>>, the
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[The]
+    elink:VkFormat of each of pname:srcImage and pname:dstImage must: be
+    <<formats-size-compatibility,size-compatible>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-None-01549]]
+    In a copy to or from a plane of a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image>>, the
+    elink:VkFormat of the image and plane must: be compatible according to
+    <<formats-compatible-planes,the description of compatible planes>> for
+    the plane being copied
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-09247]]
+    If the elink:VkFormat of each of pname:srcImage and pname:dstImage is a
+    <<compressed_image_formats,compressed image format>>, the formats must:
+    have the same texel block extent
+  * [[VUID-{refpage}-srcImage-00136]]
+    The sample count of pname:srcImage and pname:dstImage must: match
+  * [[VUID-{refpage}-srcOffset-01783]]
+    The pname:srcOffset and pname:extent members of each element of
+    pname:pRegions must: respect the image transfer granularity requirements
+    of pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+  * [[VUID-{refpage}-dstOffset-01784]]
+    The pname:dstOffset and pname:extent members of each element of
+    pname:pRegions must: respect the image transfer granularity requirements
+    of pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+// The remaining common VU used to be in image_copy_common.adoc and have been
+// rewritten to apply to the calling command rather than the structure
+// parameter(s) of that command.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-01551]]
+    If neither pname:srcImage nor pname:dstImage has a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar image
+    format>> then for each element of pname:pRegions,
+    pname:srcSubresource.aspectMask and pname:dstSubresource.aspectMask
+    must: match
+  * [[VUID-{refpage}-srcImage-08713]]
+    If pname:srcImage has a <<formats-requiring-sampler-ycbcr-conversion,
+    multi-planar image format>>, then for each element of pname:pRegions,
+    pname:srcSubresource.aspectMask must: be a single valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+  * [[VUID-{refpage}-dstImage-08714]]
+    If pname:dstImage has a <<formats-requiring-sampler-ycbcr-conversion,
+    multi-planar image format>>, then for each element of pname:pRegions,
+    pname:dstSubresource.aspectMask must: be a single valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+  * [[VUID-{refpage}-srcImage-01556]]
+    If pname:srcImage has a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image format>>
+    and the pname:dstImage does not have a multi-planar image format, then
+    for each element of pname:pRegions, pname:dstSubresource.aspectMask
+    must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-{refpage}-dstImage-01557]]
+    If pname:dstImage has a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar image format>>
+    and the pname:srcImage does not have a multi-planar image format, then
+    for each element of pname:pRegions, pname:srcSubresource.aspectMask
+    must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-apiVersion-07932]]
+    If
+ifdef::VK_KHR_maintenance1[]
+    the apiext:VK_KHR_maintenance1 extension is not enabled,
+endif::VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[or]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[and]
+    either pname:srcImage or pname:dstImage is of type
+    ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions,
+    pname:srcSubresource.baseArrayLayer and
+    pname:dstSubresource.baseArrayLayer must: both be `0`, and
+    pname:srcSubresource.layerCount and pname:dstSubresource.layerCount
+    must: both be `1`
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-srcImage-04443]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:srcSubresource.baseArrayLayer must: be
+    `0` and pname:srcSubresource.layerCount must: be `1`
+  * [[VUID-{refpage}-dstImage-04444]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:dstSubresource.baseArrayLayer must: be
+    `0` and pname:dstSubresource.layerCount must: be `1`
+  * [[VUID-{refpage}-aspectMask-00142]]
+    For each element of pname:pRegions, pname:srcSubresource.aspectMask
+    must: specify aspects present in pname:srcImage
+  * [[VUID-{refpage}-aspectMask-00143]]
+    For each element of pname:pRegions, pname:dstSubresource.aspectMask
+    must: specify aspects present in pname:dstImage
+  * [[VUID-{refpage}-srcOffset-00144]]
+    For each element of pname:pRegions, pname:srcOffset.x and
+    [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must: both be
+    greater than or equal to `0` and less than or equal to the width of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcOffset-00145]]
+    For each element of pname:pRegions, pname:srcOffset.y and
+    [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must: both be
+    greater than or equal to `0` and less than or equal to the height of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-00146]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:srcOffset.y must: be `0` and
+    pname:extent.height must: be `1`
+  * [[VUID-{refpage}-srcOffset-00147]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:srcOffset.z and
+    [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-01785]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:srcOffset.z must: be `0` and
+    pname:extent.depth must: be `1`
+  * [[VUID-{refpage}-dstImage-01786]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:dstOffset.z must: be `0` and
+    pname:extent.depth must: be `1`
+  * [[VUID-{refpage}-srcImage-01787]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_2D, then for each
+    element of pname:pRegions, pname:srcOffset.z must: be `0`
+  * [[VUID-{refpage}-dstImage-01788]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_2D, then for each
+    element of pname:pRegions, pname:dstOffset.z must: be `0`
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-apiVersion-07933]]
+    If
+ifdef::VK_KHR_maintenance1[]
+    the apiext:VK_KHR_maintenance1 extension is not enabled,
+endif::VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[and]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+    pname:srcImage and pname:dstImage must: have the same elink:VkImageType
+  * [[VUID-{refpage}-apiVersion-08969]]
+    If
+ifdef::VK_KHR_maintenance1[]
+    the apiext:VK_KHR_maintenance1 extension is not enabled,
+endif::VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[and]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+    pname:srcImage or pname:dstImage is of type ename:VK_IMAGE_TYPE_2D, then
+    for each element of pname:pRegions, pname:extent.depth must: be `1`
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-07743]]
+    If pname:srcImage and pname:dstImage have a different elink:VkImageType,
+ifdef::VK_KHR_maintenance5[]
+    and <<features-maintenance5, pname:maintenance5>> is not enabled,
+endif::VK_KHR_maintenance5[]
+    one must: be ename:VK_IMAGE_TYPE_3D and the other must: be
+    ename:VK_IMAGE_TYPE_2D
+  * [[VUID-{refpage}-srcImage-08793]]
+    If pname:srcImage and pname:dstImage have the same elink:VkImageType,
+    for each element of pname:pRegions,
+ifdef::VK_KHR_maintenance5[]
+    if neither of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource are ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource must: match
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-maintenance5-08792]]
+    If the <<features-maintenance5, pname:maintenance5>> feature is not
+    enabled, the pname:layerCount member of pname:srcSubresource or
+    pname:dstSubresource must: not be ename:VK_REMAINING_ARRAY_LAYERS
+  * [[VUID-{refpage}-srcImage-08794]]
+    If pname:srcImage and pname:dstImage have the same elink:VkImageType,
+    and one of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource is ename:VK_REMAINING_ARRAY_LAYERS, the other
+    member must: be either ename:VK_REMAINING_ARRAY_LAYERS or equal to the
+    pname:arrayLayers member of the slink:VkImageCreateInfo used to create
+    the image minus pname:baseArrayLayer
+endif::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-srcImage-01790]]
+    If pname:srcImage and pname:dstImage are both of type
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:extent.depth must: be `1`
+  * [[VUID-{refpage}-srcImage-01791]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_2D, and pname:dstImage
+    is of type ename:VK_IMAGE_TYPE_3D, then for each element of
+    pname:pRegions, pname:extent.depth must: equal
+    pname:srcSubresource.layerCount
+  * [[VUID-{refpage}-dstImage-01792]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_2D, and pname:srcImage
+    is of type ename:VK_IMAGE_TYPE_3D, then for each element of
+    pname:pRegions, pname:extent.depth must: equal
+    pname:dstSubresource.layerCount
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstOffset-00150]]
+    For each element of pname:pRegions, pname:dstOffset.x and
+    [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must: both be
+    greater than or equal to `0` and less than or equal to the width of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstOffset-00151]]
+    For each element of pname:pRegions, pname:dstOffset.y and
+    [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must: both be
+    greater than or equal to `0` and less than or equal to the height of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstImage-00152]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:dstOffset.y must: be `0` and
+    pname:extent.height must: be `1`
+  * [[VUID-{refpage}-dstOffset-00153]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:dstOffset.z and
+    [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-pRegions-07278]]
+    For each element of pname:pRegions, pname:srcOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-pRegions-07279]]
+    For each element of pname:pRegions, pname:srcOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-pRegions-07280]]
+    For each element of pname:pRegions, pname:srcOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-pRegions-07281]]
+    For each element of pname:pRegions, pname:dstOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-pRegions-07282]]
+    For each element of pname:pRegions, pname:dstOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-pRegions-07283]]
+    For each element of pname:pRegions, pname:dstOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-srcImage-01728]]
+    For each element of pname:pRegions, if the sum of pname:srcOffset.x and
+    pname:extent.width does not equal the width of the subresource specified
+    by pname:srcSubresource, pname:extent.width must: be a multiple of the
+    <<formats-compatibility-classes,texel block extent width>> of the
+    elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-srcImage-01729]]
+    For each element of pname:pRegions, if the sum of pname:srcOffset.y and
+    pname:extent.height does not equal the height of the subresource
+    specified by pname:srcSubresource, pname:extent.height must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-srcImage-01730]]
+    For each element of pname:pRegions, if the sum of pname:srcOffset.z and
+    pname:extent.depth does not equal the depth of the subresource specified
+    by pname:srcSubresource, pname:extent.depth must: be a multiple of the
+    <<formats-compatibility-classes,texel block extent depth>> of the
+    elink:VkFormat of pname:srcImage
+  * [[VUID-{refpage}-dstImage-01732]]
+    For each element of pname:pRegions, if the sum of pname:dstOffset.x and
+    pname:extent.width does not equal the width of the subresource specified
+    by pname:dstSubresource, pname:extent.width must: be a multiple of the
+    <<formats-compatibility-classes,texel block extent width>> of the
+    elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-dstImage-01733]]
+    For each element of pname:pRegions, if the sum of pname:dstOffset.y and
+    pname:extent.height does not equal the height of the subresource
+    specified by pname:dstSubresource, pname:extent.height must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-dstImage-01734]]
+    For each element of pname:pRegions, if the sum of pname:dstOffset.z and
+    pname:extent.depth does not equal the depth of the subresource specified
+    by pname:dstSubresource, pname:extent.depth must: be a multiple of the
+    <<formats-compatibility-classes,texel block extent depth>> of the
+    elink:VkFormat of pname:dstImage
+  * [[VUID-{refpage}-aspect-06662]]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    If the pname:aspect member of any element of pname:pRegions includes any
+    flag other than ename:VK_IMAGE_ASPECT_STENCIL_BIT or pname:srcImage was
+    not created with <<VkImageStencilUsageCreateInfo,separate stencil
+    usage>>,
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT must: have been included in the
+    slink:VkImageCreateInfo::pname:usage used to create pname:srcImage
+  * [[VUID-{refpage}-aspect-06663]]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    If the pname:aspect member of any element of pname:pRegions includes any
+    flag other than ename:VK_IMAGE_ASPECT_STENCIL_BIT or pname:dstImage was
+    not created with <<VkImageStencilUsageCreateInfo,separate stencil
+    usage>>,
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
+    slink:VkImageCreateInfo::pname:usage used to create pname:dstImage
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-{refpage}-aspect-06664]]
+    If the pname:aspect member of any element of pname:pRegions includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:srcImage was created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT must: have been included in the
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage used to create
+    pname:srcImage
+  * [[VUID-{refpage}-aspect-06665]]
+    If the pname:aspect member of any element of pname:pRegions includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:dstImage was created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT must: have been included in the
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage used to create
+    pname:dstImage
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.adoc
new file mode 100644
index 0000000..d8063b4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.adoc
@@ -0,0 +1,33 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyImageToBuffer* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01831]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01832]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be a protected buffer
+  * [[VUID-{refpage}-commandBuffer-01833]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstBuffer must: not be an unprotected buffer
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-07746]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, the
+    pname:bufferOffset member of any element of {regionsparam} must: be a
+    multiple of `4`
+  * [[VUID-{refpage}-imageOffset-07747]]
+    The pname:imageOffset and pname:imageExtent members of each element of
+    {regionsparam} must: respect the image transfer granularity requirements
+    of pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_common.adoc
new file mode 100644
index 0000000..9de04de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_image_to_buffer_common.adoc
@@ -0,0 +1,40 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyImageToBuffer* commands
+  * [[VUID-{refpage}-pRegions-00183]]
+    pname:dstBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * [[VUID-{refpage}-pRegions-00184]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcImage-00186]]
+    pname:srcImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-01998]]
+    The <<resources-image-format-features,format features>> of
+    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstBuffer-00191]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstBuffer-00192]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-srcImageLayout-00189]]
+    pname:srcImageLayout must: specify the layout of the image subresources
+    of pname:srcImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-srcImageLayout-01397]]
+    pname:srcImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_memoryimage_to_imagememory_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_memoryimage_to_imagememory_common.adoc
new file mode 100644
index 0000000..b1f892f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/copy_memoryimage_to_imagememory_common.adoc
@@ -0,0 +1,51 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vk*Copy*ToImage* commands
+// This relies on an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+// Additionally, it relies on the {imagesubresource} attribute to specify the
+// field in pRegions corresponding to {imageparam}
+// Finally, it relies on the {imageoffset} and {imageextents} attributes to
+// specify the fields in pRegions corresponding to the offset and extent of the
+// copy.
+
+  * [[VUID-{refpage}-{imageparam}-09109]]
+    If pname:{imageparam} is sparse then all memory ranges accessed by the
+    copy command must: be bound as described in
+    <<sparsememory-resource-binding, Binding Resource Memory>>
+  * [[VUID-{refpage}-{imageparam}-09111]]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    If the stencil aspect of pname:{imageparam} is accessed, and
+    pname:{imageparam} was not created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+    pname:{imageparam} must: have been created with
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT set in
+    slink:VkImageCreateInfo::pname:usage
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-{refpage}-{imageparam}-09112]]
+    If the stencil aspect of pname:{imageparam} is accessed, and
+    pname:{imageparam} was created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>,
+    pname:{imageparam} must: have been created with
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT set in
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
+  * [[VUID-{refpage}-{imageparam}-09113]]
+    If non-stencil aspects of pname:{imageparam} are accessed,
+    pname:{imageparam} must: have been created with
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT set in
+    slink:VkImageCreateInfo::pname:usage
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-{refpage}-{imageoffset}-09114]]
+    If pname:flags contains ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT, the
+    pname:x, pname:y, and pname:z members of the pname:{imageoffset} member
+    of each element of pname:pRegions must: be `0`
+  * [[VUID-{refpage}-{imageparam}-09115]]
+    If pname:flags contains ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT, the
+    pname:{imageextent} member of each element of pname:pRegions must: equal
+    the extents of pname:{imageparam} identified by pname:{imagesubresource}
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/create_ray_tracing_pipelines_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/create_ray_tracing_pipelines_common.adoc
new file mode 100644
index 0000000..e36446f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/create_ray_tracing_pipelines_common.adoc
@@ -0,0 +1,32 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to CreateRayTracingPipelines
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-flags-03415]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+    pname:basePipelineIndex member of that same element is not `-1`,
+    pname:basePipelineIndex must: be less than the index into
+    pname:pCreateInfos that corresponds to that element
+  * [[VUID-{refpage}-flags-03416]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+    must: have been created with the
+    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-{refpage}-flags-03816]]
+    pname:flags must: not contain the ename:VK_PIPELINE_CREATE_DISPATCH_BASE
+    flag
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-{refpage}-pipelineCache-02903]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
+    to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/deferred_operations_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/deferred_operations_common.adoc
new file mode 100644
index 0000000..c27eabb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/deferred_operations_common.adoc
@@ -0,0 +1,13 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to commands including a deferredOperation parameter
+  * [[VUID-{refpage}-deferredOperation-03677]]
+    If pname:deferredOperation is not dlink:VK_NULL_HANDLE, it must: be a
+    valid slink:VkDeferredOperationKHR object
+  * [[VUID-{refpage}-deferredOperation-03678]]
+    Any previous deferred operation that was associated with
+    pname:deferredOperation must: be complete
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dispatch_graph_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dispatch_graph_common.adoc
new file mode 100644
index 0000000..ed8f80a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dispatch_graph_common.adoc
@@ -0,0 +1,46 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all graph dispatch commands
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+  * [[VUID-{refpage}-commandBuffer-09181]]
+    pname:commandBuffer must: not be a protected command buffer
+  * [[VUID-{refpage}-commandBuffer-09182]]
+    pname:commandBuffer must: be a primary command buffer
+  * [[VUID-{refpage}-scratch-09183]]
+    pname:scratch must: be the device address of an allocated memory range
+    at least as large as the value of
+    slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size returned by
+    slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+    execution graph pipeline
+  * [[VUID-{refpage}-scratch-09184]]
+    pname:scratch must: be a device address within a slink:VkBuffer created
+    with the ename:VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
+ifdef::VK_KHR_maintenance5[]
+    or ename:VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
+endif::VK_KHR_maintenance5[]
+    flag
+  * [[VUID-{refpage}-scratch-09185]]
+    Device memory in the range [pname:scratch,pname:scratch +
+    slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size) must: have
+    been initialized with flink:vkCmdInitializeGraphScratchMemoryAMDX using
+    the currently bound execution graph pipeline, and not modified after
+    that by anything other than another execution graph dispatch command
+  * [[VUID-{refpage}-maxComputeWorkGroupCount-09186]]
+    Execution of this command must: not cause a node to be dispatched with a
+    larger number of workgroups than that specified by either a
+    code:MaxNumWorkgroupsAMDX decoration in the dispatched node or
+    <<limits-maxComputeWorkGroupCount,pname:maxComputeWorkGroupCount>>
+  * [[VUID-{refpage}-maxExecutionGraphShaderPayloadCount-09187]]
+    Execution of this command must: not cause any shader to initialize more
+    than <<limits-maxExecutionGraphShaderPayloadCount,
+    pname:maxExecutionGraphShaderPayloadCount>> output payloads
+  * [[VUID-{refpage}-NodeMaxPayloadsAMDX-09188]]
+    Execution of this command must: not cause any shader that declares
+    code:NodeMaxPayloadsAMDX to initialize more output payloads than
+    specified by the max number of payloads for that decoration.
+    This requirement applies to each code:NodeMaxPayloadsAMDX decoration
+    separately
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_common.adoc
new file mode 100644
index 0000000..5e43845
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_common.adoc
@@ -0,0 +1,2561 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all drawing commands
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+  * [[VUID-{refpage}-renderPass-02684]]
+    The current render pass must: be <<renderpass-compatibility,compatible>>
+    with the pname:renderPass member of the
+    sname:VkGraphicsPipelineCreateInfo structure specified when creating the
+    sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+  * [[VUID-{refpage}-subpass-02685]]
+    The subpass index of the current render pass must: be equal to the
+    pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
+    specified when creating the sname:VkPipeline bound to
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+  * [[VUID-{refpage}-None-07748]]
+    If any shader statically accesses an input attachment, a valid
+    descriptor must: be bound to the pipeline via a descriptor set
+  * [[VUID-{refpage}-OpTypeImage-07468]]
+    If any shader executed by this pipeline accesses an code:OpTypeImage
+    variable with a code:Dim operand of code:SubpassData, it must: be
+    decorated with an code:InputAttachmentIndex that corresponds to a valid
+    input attachment in the current subpass
+  * [[VUID-{refpage}-None-07469]]
+    Input attachment views accessed in a subpass must: be created with the
+    same elink:VkFormat as the corresponding subpass definition, and be
+    created with a slink:VkImageView that is compatible with the attachment
+    referenced by the subpass'
+    pname:pInputAttachments[code:InputAttachmentIndex] in the currently
+    bound slink:VkFramebuffer as specified by
+    <<compatibility-inputattachment,Fragment Input Attachment
+    Compatibility>>
+  * [[VUID-{refpage}-None-06537]]
+    Memory backing image subresources used as attachments in the current
+    render pass must: not be written in any way other than as an attachment
+    by this command
+  * [[VUID-{refpage}-None-09000]]
+    If a color attachment is written by any prior command in this subpass or
+    by the load, store, or resolve operations for this subpass,
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+    it is not in the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
+    and
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    either:
+  ** {empty}
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    the ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is
+    set on the currently bound pipeline
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    or
+  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
+     ename:VK_IMAGE_ASPECT_COLOR_BIT and
+ifdef::VK_EXT_shader_object[]
+  *** there is no currently bound graphics pipeline or
+endif::VK_EXT_shader_object[]
+  *** the currently bound graphics pipeline was created with
+      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+endif::VK_EXT_attachment_feedback_loop_layout[]
+    it must: not be accessed in any way other than as an attachment by this
+    command
+  * [[VUID-{refpage}-None-09001]]
+    If a depth attachment is written by any prior command in this subpass or
+    by the load, store, or resolve operations for this subpass,
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+    it is not in the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
+    and
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    either:
+  ** {empty}
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    the
+    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    is set on the currently bound pipeline
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    or
+  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
+     ename:VK_IMAGE_ASPECT_DEPTH_BIT and
+ifdef::VK_EXT_shader_object[]
+  *** there is no currently bound graphics pipeline or
+endif::VK_EXT_shader_object[]
+  *** the currently bound graphics pipeline was created with
+      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+endif::VK_EXT_attachment_feedback_loop_layout[]
+    it must: not be accessed in any way other than as an attachment by this
+    command
+  * [[VUID-{refpage}-None-09002]]
+    If a stencil attachment is written by any prior command in this subpass
+    or by the load, store, or resolve operations for this subpass,
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+    it is not in the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
+    and
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    either:
+  ** {empty}
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    the
+    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    is set on the currently bound pipeline
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    or
+  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
+     ename:VK_IMAGE_ASPECT_STENCIL_BIT and
+ifdef::VK_EXT_shader_object[]
+  *** there is no currently bound graphics pipeline or
+endif::VK_EXT_shader_object[]
+  *** the currently bound graphics pipeline was created with
+      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+endif::VK_EXT_attachment_feedback_loop_layout[]
+    it must: not be accessed in any way other than as an attachment by this
+    command
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-None-09003]]
+    If an attachment is written by any prior command in this subpass or by
+    the load, store, or resolve operations for this subpass, it must: not be
+    accessed in any way other than as an attachment, storage image, or
+    sampled image by this command
+endif::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-None-06539]]
+    If any previously recorded command in the current subpass accessed an
+    image subresource used as an attachment in this subpass in any way other
+    than as an attachment, this command must: not write to that image
+    subresource as an attachment
+  * [[VUID-{refpage}-None-06886]]
+    If the current render pass instance uses a depth/stencil attachment with
+    a read-only layout for the depth aspect, <<fragops-depth-write, depth
+    writes>> must: be disabled
+  * [[VUID-{refpage}-None-06887]]
+    If the current render pass instance uses a depth/stencil attachment with
+    a read-only layout for the stencil aspect, both front and back
+    pname:writeMask are not zero, and stencil test is enabled,
+    <<fragops-stencil, all stencil ops>> must: be ename:VK_STENCIL_OP_KEEP
+  * [[VUID-{refpage}-None-07831]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then
+    flink:vkCmdSetViewport must: have been called in the current command
+    buffer prior to this drawing command
+  * [[VUID-{refpage}-None-07832]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then
+    flink:vkCmdSetScissor must: have been called in the current command
+    buffer prior to this drawing command
+  * [[VUID-{refpage}-None-07833]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then
+    flink:vkCmdSetLineWidth must: have been called in the current command
+    buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08617]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetPolygonModeEXT in the current command
+    buffer set pname:polygonMode to ename:VK_POLYGON_MODE_LINE,
+    flink:vkCmdSetLineWidth must: have been called in the current command
+    buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08618]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetPrimitiveTopology in the current command
+    buffer set pname:primitiveTopology to any line topology,
+    flink:vkCmdSetLineWidth must: have been called in the current command
+    buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08619]]
+    If a shader object that outputs line primitives is bound to the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, flink:vkCmdSetLineWidth
+    must: have been called in the current command buffer prior to this
+    drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07834]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled then
+    flink:vkCmdSetDepthBias
+ifdef::VK_EXT_depth_bias_control[]
+    or flink:vkCmdSetDepthBias2EXT
+endif::VK_EXT_depth_bias_control[]
+    must: have been called in the current command buffer prior to this
+    drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08620]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetDepthBiasEnable in the current command
+    buffer set pname:depthBiasEnable to ename:VK_TRUE,
+    flink:vkCmdSetDepthBias
+ifdef::VK_EXT_depth_bias_control[]
+    or flink:vkCmdSetDepthBias2EXT
+endif::VK_EXT_depth_bias_control[]
+    must: have been called in the current command buffer prior to this
+    drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07835]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled then
+    flink:vkCmdSetBlendConstants must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08621]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetColorBlendEnableEXT in the current command buffer set any
+    element of pname:pColorBlendEnables to ename:VK_TRUE, and the most
+    recent call to flink:vkCmdSetColorBlendEquationEXT in the current
+    command buffer set the same element of pname:pColorBlendEquations to a
+    sname:VkColorBlendEquationEXT structure with any elink:VkBlendFactor
+    member with a value of ename:VK_BLEND_FACTOR_CONSTANT_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
+    flink:vkCmdSetBlendConstants must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07836]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, and if the
+    current pname:depthBoundsTestEnable state is ename:VK_TRUE, then
+    flink:vkCmdSetDepthBounds must: have been called in the current command
+    buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08622]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetDepthBoundsTestEnable in the current
+    command buffer set pname:depthBoundsTestEnable to ename:VK_TRUE, then
+    flink:vkCmdSetDepthBounds must: have been called in the current command
+    buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07837]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, and
+    if the current pname:stencilTestEnable state is ename:VK_TRUE, then
+    flink:vkCmdSetStencilCompareMask must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08623]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetStencilTestEnable in the current command
+    buffer set pname:stencilTestEnable to ename:VK_TRUE,
+    flink:vkCmdSetStencilCompareMask must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07838]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, and if
+    the current pname:stencilTestEnable state is ename:VK_TRUE, then
+    flink:vkCmdSetStencilWriteMask must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08624]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetStencilTestEnable in the current command
+    buffer set pname:stencilTestEnable to ename:VK_TRUE,
+    flink:vkCmdSetStencilWriteMask must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07839]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, and if
+    the current pname:stencilTestEnable state is ename:VK_TRUE, then
+    flink:vkCmdSetStencilReference must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08625]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetStencilTestEnable in the current command
+    buffer set pname:stencilTestEnable to ename:VK_TRUE,
+    flink:vkCmdSetStencilReference must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-{refpage}-maxMultiviewInstanceIndex-02688]]
+    If the draw is recorded in a render pass instance with multiview
+    enabled, the maximum instance index must: be less than or equal to
+    slink:VkPhysicalDeviceMultiviewProperties::pname:maxMultiviewInstanceIndex
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-{refpage}-sampleLocationsEnable-02689]]
+    If the bound graphics pipeline was created with
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    set to ename:VK_TRUE and the current subpass has a depth/stencil
+    attachment, then that attachment must: have been created with the
+    ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set
+  * [[VUID-{refpage}-None-06666]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled then
+    flink:vkCmdSetSampleLocationsEXT must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08626]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetSampleLocationsEnableEXT in the current
+    command buffer set pname:sampleLocationsEnable to ename:VK_TRUE, then
+    flink:vkCmdSetSampleLocationsEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-sampleLocationsPerPixel-07934]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled, then the
+    pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo in
+    the last call to flink:vkCmdSetSampleLocationsEXT must: equal the
+    pname:rasterizationSamples member of the
+    slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
+    pipeline has been created with
+endif::VK_EXT_sample_locations[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-{refpage}-None-07840]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled then
+    flink:vkCmdSetCullMode must: have been called in the current command
+    buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08627]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetCullMode must: have been called in the current command
+    buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07841]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled then
+    flink:vkCmdSetFrontFace must: have been called in the current command
+    buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08628]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetFrontFace must: have been called in the current command
+    buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07843]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled then
+    flink:vkCmdSetDepthTestEnable must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08629]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetDepthTestEnable must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07844]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled then
+    flink:vkCmdSetDepthWriteEnable must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08630]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetDepthWriteEnable must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07845]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled then
+    flink:vkCmdSetDepthCompareOp must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08631]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetDepthTestEnable in the current command
+    buffer set pname:depthTestEnable to ename:VK_TRUE, then
+    flink:vkCmdSetDepthCompareOp must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07846]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled
+    then flink:vkCmdSetDepthBoundsTestEnable must: have been called in the
+    current command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08632]]
+    If a shader object is bound to any graphics stage, and the
+    <<features-depthBounds, pname:depthBounds>> feature is enabled, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    the flink:vkCmdSetDepthBoundsTestEnable must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07847]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled then
+    flink:vkCmdSetStencilTestEnable must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08633]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetStencilTestEnable must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07848]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled then
+    flink:vkCmdSetStencilOp must: have been called in the current command
+    buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08634]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetStencilTestEnable in the current command
+    buffer set pname:stencilTestEnable to ename:VK_TRUE, then
+    flink:vkCmdSetStencilOp must: have been called in the current command
+    buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-viewportCount-03417]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
+    not the ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled,
+    then flink:vkCmdSetViewportWithCount must: have been called in the
+    current command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
+    match the sname:VkPipelineViewportStateCreateInfo::pname:scissorCount of
+    the pipeline
+  * [[VUID-{refpage}-scissorCount-03418]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, but not
+    the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled,
+    then flink:vkCmdSetScissorWithCount must: have been called in the
+    current command buffer prior to this drawing command, and the
+    pname:scissorCount parameter of fname:vkCmdSetScissorWithCount must:
+    match the sname:VkPipelineViewportStateCreateInfo::pname:viewportCount
+    of the pipeline
+  * [[VUID-{refpage}-viewportCount-03419]]
+    If the bound graphics pipeline state was created with both the
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled then
+    both flink:vkCmdSetViewportWithCount and flink:vkCmdSetScissorWithCount
+    must: have been called in the current command buffer prior to this
+    drawing command, and the pname:viewportCount parameter of
+    fname:vkCmdSetViewportWithCount must: match the pname:scissorCount
+    parameter of fname:vkCmdSetScissorWithCount
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08635]]
+    If a shader object is bound to any graphics stage, then both
+    flink:vkCmdSetViewportWithCount and flink:vkCmdSetScissorWithCount must:
+    have been called in the current command buffer prior to this drawing
+    command, and the pname:viewportCount parameter of
+    fname:vkCmdSetViewportWithCount must: match the pname:scissorCount
+    parameter of fname:vkCmdSetScissorWithCount
+endif::VK_EXT_shader_object[]
+ifdef::VK_NV_clip_space_w_scaling[]
+  * [[VUID-{refpage}-viewportCount-04137]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
+    not the ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state
+    enabled, then the bound graphics pipeline must: have been created with
+    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
+    greater or equal to the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportWithCount
+  * [[VUID-{refpage}-viewportCount-04138]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic states enabled then
+    the pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWScalingNV must: be greater than or equal to the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-09232]]
+    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetViewportWScalingEnableNV in the current command buffer
+    set pname:viewportWScalingEnable to ename:VK_TRUE, then
+    flink:vkCmdSetViewportWScalingNV must: have been called in the current
+    command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08636]]
+    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetViewportWScalingEnableNV in the current command buffer
+    set pname:viewportWScalingEnable to ename:VK_TRUE, then the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWScalingNV must: be greater than or equal to the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+endif::VK_EXT_shader_object[]
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-viewportCount-04139]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
+    not the ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic
+    state enabled, then the bound graphics pipeline must: have been created
+    with
+    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:viewportCount
+    greater or equal to the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportWithCount
+  * [[VUID-{refpage}-viewportCount-04140]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic states
+    enabled then the pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportShadingRatePaletteNV must: be greater than or
+    equal to the pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-shadingRateImage-09233]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, and a shader object is bound to any graphics stage, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetCoarseSampleOrderNV must: have been called in the current
+    command buffer prior to this drawing command
+  * [[VUID-{refpage}-shadingRateImage-09234]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, and a shader object is bound to any graphics stage, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and
+    the most recent call to flink:vkCmdSetShadingRateImageEnableNV in the
+    current command buffer set pname:shadingRateImageEnable to
+    ename:VK_TRUE, then flink:vkCmdSetViewportShadingRatePaletteNV must:
+    have been called in the current command buffer prior to this drawing
+    command
+  * [[VUID-{refpage}-None-08637]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, and a shader object is bound to any graphics stage, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and
+    the most recent call to flink:vkCmdSetShadingRateImageEnableNV in the
+    current command buffer set pname:shadingRateImageEnable to
+    ename:VK_TRUE, then the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportShadingRatePaletteNV must: be greater than or
+    equal to the pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+endif::VK_EXT_shader_object[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_NV_viewport_swizzle[]
+  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04141]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a
+    slink:VkPipelineViewportSwizzleStateCreateInfoNV structure chained from
+    slink:VkPipelineViewportStateCreateInfo, then the bound graphics
+    pipeline must: have been created with
+    slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount
+    greater or equal to the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportWithCount
+endif::VK_NV_viewport_swizzle[]
+ifdef::VK_NV_scissor_exclusive[]
+  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04142]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
+    chained from slink:VkPipelineViewportStateCreateInfo, then the bound
+    graphics pipeline must: have been created with
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:exclusiveScissorCount
+    greater or equal to the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportWithCount
+  * [[VUID-{refpage}-None-07878]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled
+    then flink:vkCmdSetExclusiveScissorEnableNV must: have been called in
+    the current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-07879]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled then
+    flink:vkCmdSetExclusiveScissorNV must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-exclusiveScissor-09235]]
+    If the <<features-exclusiveScissor, pname:exclusiveScissor>> feature is
+    enabled, and a shader object is bound to any graphics stage, then
+    flink:vkCmdSetExclusiveScissorEnableNV must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08638]]
+    If the <<features-exclusiveScissor, pname:exclusiveScissor>> feature is
+    enabled, and a shader object is bound to any graphics stage, and the
+    most recent call to flink:vkCmdSetExclusiveScissorEnableNV in the
+    current command buffer set any element of pname:pExclusiveScissorEnables
+    to ename:VK_TRUE, then flink:vkCmdSetExclusiveScissorNV must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_scissor_exclusive[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+  * [[VUID-{refpage}-None-04876]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled
+    then flink:vkCmdSetRasterizerDiscardEnable must: have been called in the
+    current command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08639]]
+    If a shader object is bound to any graphics stage, then
+    flink:vkCmdSetRasterizerDiscardEnable must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-04877]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled then
+    flink:vkCmdSetDepthBiasEnable must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08640]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetDepthBiasEnable must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-{refpage}-logicOp-04878]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled then
+    flink:vkCmdSetLogicOpEXT must: have been called in the current command
+    buffer prior to this drawing command and the pname:logicOp must: be a
+    valid elink:VkLogicOp value
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08641]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetLogicOpEnableEXT set pname:logicOpEnable to ename:VK_TRUE,
+    then flink:vkCmdSetLogicOpEXT must: have been called in the current
+    command buffer prior to this drawing command and the pname:logicOp must:
+    be a valid elink:VkLogicOp value
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_extended_dynamic_state2[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-04552]]
+    If the <<limits-primitiveFragmentShadingRateWithMultipleViewports,
+    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
+    supported, the bound graphics pipeline was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and
+    any of the shader stages of the bound graphics pipeline write to the
+    code:PrimitiveShadingRateKHR built-in, then
+    flink:vkCmdSetViewportWithCount must: have been called in the current
+    command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
+    be `1`
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-08642]]
+    If the <<limits-primitiveFragmentShadingRateWithMultipleViewports,
+    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
+    supported, and any shader object bound to a graphics stage writes to the
+    code:PrimitiveShadingRateKHR built-in, then
+    flink:vkCmdSetViewportWithCount must: have been called in the current
+    command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
+    be `1`
+endif::VK_EXT_shader_object[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-blendEnable-04727]]
+    If rasterization is not disabled in the bound graphics pipeline, then
+    for each color attachment in the subpass, if the corresponding image
+    view's <<resources-image-view-format-features,format features>> do not
+    contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
+    pname:blendEnable member of the corresponding element of the
+    pname:pAttachments member of pname:pColorBlendState must: be
+    ename:VK_FALSE
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08643]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then for each color attachment in the render pass, if
+    the corresponding image view's
+    <<resources-image-view-format-features,format features>> do not contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
+    corresponding member of pname:pColorBlendEnables in the most recent call
+    to fname:vkCmdSetColorBlendEnableEXT in the current command buffer that
+    affected that attachment index must: have been ename:VK_FALSE
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline, and
+    none of the `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is enabled, then
+    pname:rasterizationSamples for the currently bound graphics pipeline
+    must: be the same as the current subpass color and/or depth/stencil
+    attachments
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08644]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and none of
+    the `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is enabled, then the
+    most recent call to flink:vkCmdSetRasterizationSamplesEXT in the current
+    command buffer must: have set pname:rasterizationSamples to be the same
+    as the number of samples for the current render pass color and/or
+    depth/stencil attachments
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifndef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-rasterizationSamples-04740]]
+    If rasterization is not disabled in the bound graphics pipeline, and
+    neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
+    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then
+    pname:rasterizationSamples for the currently bound graphics pipeline
+    must: be the same as the current subpass color and/or depth/stencil
+    attachments
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08645]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and neither
+    the `apiext:VK_AMD_mixed_attachment_samples` nor the
+    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then
+    the most recent call to flink:vkCmdSetRasterizationSamplesEXT in the
+    current command buffer must: have set pname:rasterizationSamples to be
+    the same as the number of samples for the current render pass color
+    and/or depth/stencil attachments
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08876]]
+    If a shader object is bound to any graphics stage, the current render
+    pass instance must: have been begun with flink:vkCmdBeginRendering
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-imageView-06172]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
+    member of pname:pDepthAttachment is
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
+    must: not write any values to the depth attachment
+  * [[VUID-{refpage}-imageView-06173]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
+    pname:layout member of pname:pStencilAttachment is
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
+    must: not write any values to the stencil attachment
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-{refpage}-imageView-06174]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
+    member of pname:pDepthAttachment is
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this
+    command must: not write any values to the depth attachment
+  * [[VUID-{refpage}-imageView-06175]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
+    pname:layout member of pname:pStencilAttachment is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this
+    command must: not write any values to the stencil attachment
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-imageView-06176]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
+    member of pname:pDepthAttachment is
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must: not
+    write any values to the depth attachment
+  * [[VUID-{refpage}-imageView-06177]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the pname:imageView member of
+    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
+    pname:layout member of pname:pStencilAttachment is
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must: not
+    write any values to the stencil attachment
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-viewMask-06178]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound graphics pipeline must:
+    have been created with a
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask equal to
+    slink:VkRenderingInfo::pname:viewMask
+  * [[VUID-{refpage}-colorAttachmentCount-06179]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound graphics pipeline must:
+    have been created with a
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount equal to
+    slink:VkRenderingInfo::pname:colorAttachmentCount
+ifndef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-colorAttachmentCount-06180]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
+    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
+    with a pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with a elink:VkFormat equal to the corresponding element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the currently bound graphics pipeline
+  * [[VUID-{refpage}-colorAttachmentCount-07616]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
+    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
+    with a pname:imageView equal to dlink:VK_NULL_HANDLE must: have the
+    corresponding element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the currently bound pipeline equal to
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08910]]
+    If the <<features-dynamicRenderingUnusedAttachments,
+    pname:dynamicRenderingUnusedAttachments>> feature is not enabled, and
+    the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
+    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
+    with a pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with a elink:VkFormat equal to the corresponding element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the currently bound graphics pipeline
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08911]]
+    If the <<features-dynamicRenderingUnusedAttachments,
+    pname:dynamicRenderingUnusedAttachments>> feature is enabled, and the
+    current render pass instance was begun with flink:vkCmdBeginRendering
+    and slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`,
+    then each element of the slink:VkRenderingInfo::pname:pColorAttachments
+    array with a pname:imageView not equal to dlink:VK_NULL_HANDLE must:
+    have been created with a elink:VkFormat equal to the corresponding
+    element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the currently bound graphics pipeline, or the corresponding
+    element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats, if
+    it exists, must: be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08912]]
+    If the <<features-dynamicRenderingUnusedAttachments,
+    pname:dynamicRenderingUnusedAttachments>> feature is not enabled, and
+    the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
+    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
+    with a pname:imageView equal to dlink:VK_NULL_HANDLE must: have the
+    corresponding element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the currently bound pipeline equal to
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-{refpage}-colorAttachmentCount-09362]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, with a
+    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`,
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and a color attachment with a resolve mode of
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element
+    of the slink:VkRenderingInfo::pname:pColorAttachments array with a
+    pname:resolveImageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with an image created with a
+    slink:VkExternalFormatANDROID::pname:externalFormat value equal to the
+    slink:VkExternalFormatANDROID::pname:externalFormat value used to create
+    the currently bound graphics pipeline
+  * [[VUID-{refpage}-None-09363]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    the current render pass instance was begun with
+    flink:vkCmdBeginRendering and a
+    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`, and a
+    color attachment with a resolve mode of
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element
+    of the slink:VkRenderingInfo::pname:pColorAttachments array with a
+    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with an image created with a
+    slink:VkExternalFormatANDROID::pname:externalFormat value equal to the
+    slink:VkExternalFormatANDROID::pname:externalFormat value used to create
+    the currently bound graphics pipeline
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-09364]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering,
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and the currently bound graphics pipeline was created with a non-zero
+    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled,
+    then flink:vkCmdSetColorBlendEnableEXT must: have set the blend enable
+    to ename:VK_FALSE prior to this drawing command
+  * [[VUID-{refpage}-None-09365]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering,
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and the currently bound graphics pipeline was created with a non-zero
+    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled,
+    then flink:vkCmdSetRasterizationSamplesEXT must: have set
+    pname:rasterizationSamples to ename:VK_SAMPLE_COUNT_1_BIT prior to this
+    drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-09366]]
+    If there is a shader object bound to any graphics stage, and the current
+    render pass includes a color attachment that uses the
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
+    then flink:vkCmdSetColorBlendEnableEXT must: have set blend enable to
+    ename:VK_FALSE prior to this drawing command
+  * [[VUID-{refpage}-rasterizationSamples-09367]]
+    If there is a shader object bound to any graphics stage, and the current
+    render pass includes a color attachment that uses the
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
+    then flink:vkCmdSetRasterizationSamplesEXT must: have set
+    pname:rasterizationSamples to ename:VK_SAMPLE_COUNT_1_BIT prior to this
+    drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-None-09368]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering,
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and the currently bound graphics pipeline was created with a non-zero
+    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled,
+    then flink:vkCmdSetFragmentShadingRateKHR must: have set
+    pname:pFragmentSize->width to `1` prior to this drawing command
+  * [[VUID-{refpage}-None-09369]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering,
+ifdef::VK_EXT_shader_object[]
+    there is no shader object bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and the currently bound graphics pipeline was created with a non-zero
+    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled,
+    then flink:vkCmdSetFragmentShadingRateKHR must: have set
+    pname:pFragmentSize->height to `1` prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-pFragmentSize-09370]]
+    If there is a shader object bound to any graphics stage, and the current
+    render pass includes a color attachment that uses the
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
+    then flink:vkCmdSetFragmentShadingRateKHR must: have set
+    pname:pFragmentSize->width to `1` prior to this drawing command
+  * [[VUID-{refpage}-pFragmentSize-09371]]
+    If there is a shader object bound to any graphics stage, and the current
+    render pass includes a color attachment that uses the
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
+    then flink:vkCmdSetFragmentShadingRateKHR must: have set
+    pname:pFragmentSize->height to `1` prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_ANDROID_external_format_resolve[]
+ifdef::VK_EXT_color_write_enable[]
+  * [[VUID-{refpage}-None-07749]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetColorWriteEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08646]]
+    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
+    enabled on the device, and a shader object is bound to the
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetColorWriteEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-attachmentCount-07750]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then
+    the pname:attachmentCount parameter of fname:vkCmdSetColorWriteEnableEXT
+    must: be greater than or equal to the
+    sname:VkPipelineColorBlendStateCreateInfo::pname:attachmentCount of the
+    currently bound graphics pipeline
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08647]]
+    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
+    enabled on the device, and a shader object is bound to the
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, then the
+    pname:attachmentCount parameter of most recent call to
+    fname:vkCmdSetColorWriteEnableEXT in the current command buffer must: be
+    greater than or equal to the number of color attachments in the current
+    render pass instance
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_color_write_enable[]
+ifdef::VK_EXT_discard_rectangles[]
+  * [[VUID-{refpage}-None-07751]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled then
+    flink:vkCmdSetDiscardRectangleEXT must: have been called in the current
+    command buffer prior to this drawing command for each discard rectangle
+    in
+    slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:discardRectangleCount
+  * [[VUID-{refpage}-None-07880]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state
+    enabled then flink:vkCmdSetDiscardRectangleEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09236]]
+    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
+    call to flink:vkCmdSetDiscardRectangleEnableEXT in the current command
+    buffer set pname:discardRectangleEnable to ename:VK_TRUE, then
+    flink:vkCmdSetDiscardRectangleEXT must: have been called in the current
+    command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08648]]
+    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetDiscardRectangleEnableEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-07881]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled
+    then flink:vkCmdSetDiscardRectangleModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08649]]
+    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
+    call to flink:vkCmdSetDiscardRectangleEnableEXT in the current command
+    buffer set pname:discardRectangleEnable to ename:VK_TRUE, then
+    flink:vkCmdSetDiscardRectangleModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_discard_rectangles[]
+ifndef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-pDepthAttachment-06181]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the currently bound graphics pipeline must: be equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView
+  * [[VUID-{refpage}-pDepthAttachment-07617]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the currently bound graphics pipeline must: be equal to
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08913]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
+    feature is not enabled, and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the currently bound graphics pipeline must: be equal to
+    ename:VK_FORMAT_UNDEFINED
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08914]]
+    If current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
+    feature is not enabled, and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the currently bound graphics pipeline must: be equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08915]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,
+    pname:dynamicRenderingUnusedAttachments>> feature is enabled,
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, and the value of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the currently bound graphics pipeline was not equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView, the value of
+    the format must: be ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifndef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-pStencilAttachment-06182]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the currently bound graphics pipeline must: be equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
+  * [[VUID-{refpage}-pStencilAttachment-07618]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the currently bound graphics pipeline must: be equal to
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08916]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
+    feature is not enabled, and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the currently bound graphics pipeline must: be equal to
+    ename:VK_FORMAT_UNDEFINED
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08917]]
+    If current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
+    feature is not enabled, and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the currently bound graphics pipeline must: be equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
+  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08918]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the
+    <<features-dynamicRenderingUnusedAttachments,
+    pname:dynamicRenderingUnusedAttachments>> feature is enabled,
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, and the value of
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the currently bound graphics pipeline was not equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView, the value of
+    the format must: be ename:VK_FORMAT_UNDEFINED
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-imageView-06183]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR::pname:imageView
+    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
+    must: have been created with
+    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-imageView-06184]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT::pname:imageView
+    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
+    must: have been created with
+    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-{refpage}-colorAttachmentCount-06185]]
+    If the currently bound pipeline was created with a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and the current render
+    pass instance was begun with flink:vkCmdBeginRendering with a
+    slink:VkRenderingInfo::pname:colorAttachmentCount parameter greater than
+    `0`, then each element of the
+    slink:VkRenderingInfo::pname:pColorAttachments array with a
+    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with a sample count equal to the corresponding element of the
+    pname:pColorAttachmentSamples member of
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
+    graphics pipeline
+  * [[VUID-{refpage}-pDepthAttachment-06186]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created with
+    a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of the
+    pname:depthStencilAttachmentSamples member of
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
+    graphics pipeline must: be equal to the sample count used to create
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView
+  * [[VUID-{refpage}-pStencilAttachment-06187]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created with
+    a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of the
+    pname:depthStencilAttachmentSamples member of
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
+    graphics pipeline must: be equal to the sample count used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07285]]
+    If the currently bound pipeline was created without a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
+    the current render pass instance was begun with
+    flink:vkCmdBeginRendering with a
+    slink:VkRenderingInfo::pname:colorAttachmentCount parameter greater than
+    `0`, then each element of the
+    slink:VkRenderingInfo::pname:pColorAttachments array with a
+    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with a sample count equal to the value of
+    pname:rasterizationSamples for the currently bound graphics pipeline
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07286]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
+    currently bound graphics pipeline must: be equal to the sample count
+    used to create slink:VkRenderingInfo::pname:pDepthAttachment->imageView
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07287]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
+    currently bound graphics pipeline must: be equal to the sample count
+    used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
+  * [[VUID-{refpage}-pNext-07935]]
+    If this command has been called inside a render pass instance started
+    with flink:vkCmdBeginRendering, and the pname:pNext chain of
+    slink:VkRenderingInfo includes a
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
+    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
+    then the value of pname:rasterizationSamples for the currently bound
+    graphics pipeline must: be equal to
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifndef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-colorAttachmentCount-06188]]
+    If the currently bound pipeline was created without a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and the current render
+    pass instance was begun with flink:vkCmdBeginRendering with a
+    slink:VkRenderingInfo::pname:colorAttachmentCount parameter greater than
+    `0`, then each element of the
+    slink:VkRenderingInfo::pname:pColorAttachments array with a
+    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
+    created with a sample count equal to the value of
+    pname:rasterizationSamples for the currently bound graphics pipeline
+  * [[VUID-{refpage}-pDepthAttachment-06189]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
+    currently bound graphics pipeline must: be equal to the sample count
+    used to create slink:VkRenderingInfo::pname:pDepthAttachment->imageView
+  * [[VUID-{refpage}-pStencilAttachment-06190]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
+    currently bound graphics pipeline must: be equal to the sample count
+    used to create
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-renderPass-06198]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, the currently bound pipeline must: have been
+    created with a slink:VkGraphicsPipelineCreateInfo::pname:renderPass
+    equal to dlink:VK_NULL_HANDLE
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-{refpage}-pColorAttachments-08963]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, there is a graphics pipeline bound with a
+    fragment shader that statically writes to a color attachment, the color
+    write mask is not zero, color writes are enabled, and the corresponding
+    element of the slink:VkRenderingInfo::pname:pColorAttachments->imageView
+    was not dlink:VK_NULL_HANDLE, then the corresponding element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
+    to create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-{refpage}-pDepthAttachment-08964]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, there is a graphics pipeline bound, depth
+    test is enabled, depth write is enabled, and the
+    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, then the
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
+    create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-{refpage}-pStencilAttachment-08965]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering, there is a graphics pipeline bound, stencil
+    test is enabled and the
+    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
+    dlink:VK_NULL_HANDLE, then the
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
+    to create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_primitives_generated_query[]
+  * [[VUID-{refpage}-primitivesGeneratedQueryWithRasterizerDiscard-06708]]
+    If the <<features-primitivesGeneratedQueryWithRasterizerDiscard,
+    pname:primitivesGeneratedQueryWithRasterizerDiscard>> feature is not
+    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
+    active, <<primsrast-discard,rasterization discard>> must: not be enabled
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-primitivesGeneratedQueryWithNonZeroStreams-06709]]
+    If the <<features-primitivesGeneratedQueryWithNonZeroStreams,
+    pname:primitivesGeneratedQueryWithNonZeroStreams>> feature is not
+    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
+    active, the bound graphics pipeline must: not have been created with a
+    non-zero value in
+    sname:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
+endif::VK_EXT_transform_feedback[]
+endif::VK_EXT_primitives_generated_query[]
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07619]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state
+    enabled then flink:vkCmdSetTessellationDomainOriginEXT must: have been
+    called in the current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-07620]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetDepthClampEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-09237]]
+    If a shader object is bound to the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage, then
+    flink:vkCmdSetTessellationDomainOriginEXT must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08650]]
+    If the <<features-depthClamp, pname:depthClamp>> feature is enabled, and
+    a shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetDepthClampEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07621]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled then
+    flink:vkCmdSetPolygonModeEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08651]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetPolygonModeEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07622]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled
+    then flink:vkCmdSetRasterizationSamplesEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08652]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetRasterizationSamplesEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07623]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled then
+    flink:vkCmdSetSampleMaskEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08653]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetSampleMaskEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07624]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state
+    enabled then flink:vkCmdSetAlphaToCoverageEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+  * [[VUID-{refpage}-alphaToCoverageEnable-08919]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state
+    enabled, and pname:alphaToCoverageEnable was ename:VK_TRUE in the last
+    call to flink:vkCmdSetAlphaToCoverageEnableEXT, then the
+    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
+    variable for the alpha code:Component word in code:Location 0 at
+    code:Index 0
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08654]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetAlphaToCoverageEnableEXT must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-alphaToCoverageEnable-08920]]
+    If a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetAlphaToCoverageEnableEXT in the current command
+    buffer set pname:alphaToCoverageEnable to ename:VK_TRUE, then the
+    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
+    variable for the alpha code:Component word in code:Location 0 at
+    code:Index 0
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07625]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled
+    then flink:vkCmdSetAlphaToOneEnableEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08655]]
+    If the <<features-alphaToOne, pname:alphaToOne>> feature is enabled, and
+    a shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetAlphaToOneEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07626]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetLogicOpEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08656]]
+    If the <<features-logicOp, pname:logicOp>> feature is enabled, and a
+    shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage,
+    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
+    current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetLogicOpEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07627]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetColorBlendEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08657]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetColorBlendEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07628]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled
+    then flink:vkCmdSetColorBlendEquationEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08658]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetColorBlendEnableEXT for any attachment set that
+    attachment's value in pname:pColorBlendEnables to ename:VK_TRUE, then
+    flink:vkCmdSetColorBlendEquationEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07629]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then
+    flink:vkCmdSetColorWriteMaskEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08659]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetColorWriteMaskEXT must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07630]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled
+    then flink:vkCmdSetRasterizationStreamEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08660]]
+    If the <<features-geometryStreams, pname:geometryStreams>> feature is
+    enabled, and a shader object is bound to the
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, then
+    flink:vkCmdSetRasterizationStreamEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07631]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state
+    enabled then flink:vkCmdSetConservativeRasterizationModeEXT must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08661]]
+    If the `apiext:VK_EXT_conservative_rasterization` extension is enabled,
+    and a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetConservativeRasterizationModeEXT must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07632]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic
+    state enabled then flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT
+    must: have been called in the current command buffer prior to this
+    drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08662]]
+    If the `apiext:VK_EXT_conservative_rasterization` extension is enabled,
+    and a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetConservativeRasterizationModeEXT in the
+    current command buffer set pname:conservativeRasterizationMode to
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then
+    flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT must: have been called
+    in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_depth_clip_enable[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07633]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetDepthClipEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08663]]
+    If the <<features-depthClipEnable, pname:depthClipEnable>> feature is
+    enabled, and a shader object is bound to any graphics stage, then
+    flink:vkCmdSetDepthClipEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_depth_clip_enable[]
+ifdef::VK_EXT_sample_locations[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07634]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled
+    then flink:vkCmdSetSampleLocationsEnableEXT must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08664]]
+    If the `apiext:VK_EXT_sample_locations` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetSampleLocationsEnableEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * [[VUID-{refpage}-None-07635]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled
+    then flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
+    current command buffer prior to this drawing command
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09416]]
+    If the `apiext:VK_EXT_blend_operation_advanced` extension is enabled,
+    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then at least one of flink:vkCmdSetColorBlendEquationEXT
+    and flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_EXT_provoking_vertex[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07636]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled
+    then flink:vkCmdSetProvokingVertexModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08665]]
+    If the `apiext:VK_EXT_provoking_vertex` extension is enabled, and a
+    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
+    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
+    current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetProvokingVertexModeEXT must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_provoking_vertex[]
+ifdef::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07637]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled
+    then flink:vkCmdSetLineRasterizationModeEXT must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08666]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
+    call to flink:vkCmdSetPolygonModeEXT in the current command buffer set
+    pname:polygonMode to ename:VK_POLYGON_MODE_LINE, then
+    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08667]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
+    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
+    current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetPrimitiveTopology in the current command buffer set
+    pname:primitiveTopology to any line topology, then
+    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08668]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object that outputs line primitives is bound to the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07638]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled
+    then flink:vkCmdSetLineStippleEnableEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08669]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
+    call to flink:vkCmdSetPolygonModeEXT in the current command buffer set
+    pname:polygonMode to ename:VK_POLYGON_MODE_LINE, then
+    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08670]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
+    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
+    current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetPrimitiveTopology in the current command buffer set
+    pname:primitiveTopology to any line topology, then
+    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08671]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object that outputs line primitives is bound to the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07849]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT dynamic state enabled then
+    flink:vkCmdSetLineStippleEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08672]]
+    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
+    shader object is bound to any graphics stage, and the most recent call
+    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
+    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
+    call to flink:vkCmdSetLineStippleEnableEXT in the current command buffer
+    set pname:stippledLineEnable to ename:VK_TRUE, then
+    flink:vkCmdSetLineStippleEXT must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_depth_clip_control[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07639]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state
+    enabled then flink:vkCmdSetDepthClipNegativeOneToOneEXT must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08673]]
+    If the <<features-depthClipControl, pname:depthClipControl>> feature is
+    enabled, and a shader object is bound to any graphics stage, then
+    flink:vkCmdSetDepthClipNegativeOneToOneEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_depth_clip_control[]
+ifdef::VK_NV_clip_space_w_scaling[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07640]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state
+    enabled then flink:vkCmdSetViewportWScalingEnableNV must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08674]]
+    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
+    shader object is bound to any graphics stage, then
+    flink:vkCmdSetViewportWScalingEnableNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_NV_viewport_swizzle[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07641]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled then
+    flink:vkCmdSetViewportSwizzleNV must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08675]]
+    If the `apiext:VK_NV_viewport_swizzle` extension is enabled, and a
+    shader object is bound to any graphics stage, then
+    flink:vkCmdSetViewportSwizzleNV must: have been called in the current
+    command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_viewport_swizzle[]
+ifdef::VK_NV_fragment_coverage_to_color[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07642]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled
+    then flink:vkCmdSetCoverageToColorEnableNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08676]]
+    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
+    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetCoverageToColorEnableNV must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07643]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state
+    enabled then flink:vkCmdSetCoverageToColorLocationNV must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08677]]
+    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
+    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the most recent call to
+    flink:vkCmdSetCoverageToColorEnableNV in the current command buffer set
+    pname:coverageToColorEnable to ename:VK_TRUE, then
+    flink:vkCmdSetCoverageToColorLocationNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_fragment_coverage_to_color[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07644]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled
+    then flink:vkCmdSetCoverageModulationModeNV must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08678]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetCoverageModulationModeNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07645]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state
+    enabled then flink:vkCmdSetCoverageModulationTableEnableNV must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08679]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetCoverageModulationModeNV in the current
+    command buffer set coverageModulationMode to any value other than
+    ename:VK_COVERAGE_MODULATION_MODE_NONE_NV, then
+    flink:vkCmdSetCoverageModulationTableEnableNV must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07646]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state
+    enabled then flink:vkCmdSetCoverageModulationTableNV must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08680]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and a shader object is bound to any graphics stage, and the most recent
+    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
+    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
+    recent call to flink:vkCmdSetCoverageModulationTableEnableNV in the
+    current command buffer set pname:coverageModulationTableEnable to
+    ename:VK_TRUE, then flink:vkCmdSetCoverageModulationTableNV must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07647]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state
+    enabled then flink:vkCmdSetShadingRateImageEnableNV must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-pipelineFragmentShadingRate-09238]]
+    If the <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> feature is enabled, and a shader
+    object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetFragmentShadingRateKHR must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-08681]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, and a shader object is bound to any graphics stage, and the
+    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
+    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetShadingRateImageEnableNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_NV_representative_fragment_test[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07648]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic
+    state enabled then flink:vkCmdSetRepresentativeFragmentTestEnableNV
+    must: have been called in the current command buffer prior to this
+    drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08682]]
+    If the <<features-representativeFragmentTest,
+    pname:representativeFragmentTest>> feature is enabled, and a shader
+    object is bound to any graphics stage, and the most recent call to
+    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
+    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
+    flink:vkCmdSetRepresentativeFragmentTestEnableNV must: have been called
+    in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_representative_fragment_test[]
+ifdef::VK_NV_coverage_reduction_mode[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-None-07649]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled
+    then flink:vkCmdSetCoverageReductionModeNV must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08683]]
+    If the <<features-coverageReductionMode, pname:coverageReductionMode>>
+    feature is enabled, and a shader object is bound to any graphics stage,
+    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
+    current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetCoverageReductionModeNV must: have
+    been called in the current command buffer prior to this drawing command
+endif::VK_EXT_shader_object[]
+endif::VK_NV_coverage_reduction_mode[]
+  * [[VUID-{refpage}-pColorBlendEnables-07470]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last
+    call to flink:vkCmdSetColorBlendEnableEXT set pname:pColorBlendEnables
+    for any attachment to ename:VK_TRUE, then for those attachments in the
+    subpass the corresponding image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
+  * [[VUID-{refpage}-rasterizationSamples-07471]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the
+    current subpass does not use any color and/or depth/stencil attachments,
+    then the pname:rasterizationSamples in the last call to
+    flink:vkCmdSetRasterizationSamplesEXT must: follow the rules for a
+    <<renderpass-noattachments, zero-attachment subpass>>
+  * [[VUID-{refpage}-samples-07472]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then
+    the pname:samples parameter in the last call to
+    flink:vkCmdSetSampleMaskEXT must: be greater or equal to the
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    parameter used to create the bound graphics pipeline
+  * [[VUID-{refpage}-samples-07473]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then
+    the pname:samples parameter in the last call to
+    flink:vkCmdSetSampleMaskEXT must: be greater or equal to the
+    pname:rasterizationSamples parameter in the last call to
+    flink:vkCmdSetRasterizationSamplesEXT
+  * [[VUID-{refpage}-rasterizationSamples-07474]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and
+    neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
+    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then
+    the pname:rasterizationSamples in the last call to
+    flink:vkCmdSetRasterizationSamplesEXT must: be the same as the current
+    subpass color and/or depth/stencil attachments
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-None-09211]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled,
+ifdef::VK_EXT_shader_object[]
+    or a shader object is bound to any graphics stage,
+endif::VK_EXT_shader_object[]
+    and the current render pass instance includes a
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
+    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
+    then the pname:rasterizationSamples in the last call to
+    flink:vkCmdSetRasterizationSamplesEXT must: be the same as the
+    pname:rasterizationSamples member of that structure
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-{refpage}-firstAttachment-07476]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetColorBlendEnableEXT must: have been called in the current
+    command buffer prior to this drawing command, and the attachments
+    specified by the pname:firstAttachment and pname:attachmentCount
+    parameters of fname:vkCmdSetColorBlendEnableEXT calls must: specify an
+    enable for all active color attachments in the current subpass
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09417]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetColorBlendEnableEXT must: have been
+    called in the current command buffer prior to this drawing command, and
+    the attachments specified by the pname:firstAttachment and
+    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEnableEXT
+    calls must: specify an enable for all active color attachments in the
+    current subpass
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-firstAttachment-07477]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled
+    then flink:vkCmdSetColorBlendEquationEXT must: have been called in the
+    current command buffer prior to this drawing command, and the
+    attachments specified by the pname:firstAttachment and
+    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEquationEXT
+    calls must: specify the blend equations for all active color attachments
+    in the current subpass where blending is enabled
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09418]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetColorBlendEquationEXT must: have been
+    called in the current command buffer prior to this drawing command, and
+    the attachments specified by the pname:firstAttachment and
+    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEquationEXT
+    calls must: specify the blend equations for all active color attachments
+    in the current subpass where blending is enabled
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-firstAttachment-07478]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then
+    flink:vkCmdSetColorWriteMaskEXT must: have been called in the current
+    command buffer prior to this drawing command, and the attachments
+    specified by the pname:firstAttachment and pname:attachmentCount
+    parameters of fname:vkCmdSetColorWriteMaskEXT calls must: specify the
+    color write mask for all active color attachments in the current subpass
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09419]]
+    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetColorWriteMaskEXT must: have been
+    called in the current command buffer prior to this drawing command, and
+    the attachments specified by the pname:firstAttachment and
+    pname:attachmentCount parameters of fname:vkCmdSetColorWriteMaskEXT
+    calls must: specify the color write mask for all active color
+    attachments in the current subpass
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * [[VUID-{refpage}-firstAttachment-07479]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled
+    then flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
+    current command buffer prior to this drawing command, and the
+    attachments specified by the pname:firstAttachment and
+    pname:attachmentCount parameters of fname:vkCmdSetColorBlendAdvancedEXT
+    calls must: specify the advanced blend equations for all active color
+    attachments in the current subpass where blending is enabled
+  * [[VUID-{refpage}-advancedBlendMaxColorAttachments-07480]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and
+    the last calls to flink:vkCmdSetColorBlendEnableEXT and
+    flink:vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then
+    the number of active color attachments in the current subpass must: not
+    exceed <<limits-advancedBlendMaxColorAttachments,
+    pname:advancedBlendMaxColorAttachments>>
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-primitivesGeneratedQueryWithNonZeroStreams-07481]]
+    If the <<features-primitivesGeneratedQueryWithNonZeroStreams,
+    pname:primitivesGeneratedQueryWithNonZeroStreams>> feature is not
+    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
+    active, and the bound graphics pipeline was created with
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last
+    call to flink:vkCmdSetRasterizationStreamEXT must: have set the
+    pname:rasterizationStream to zero
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-{refpage}-sampleLocationsPerPixel-07482]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then
+    the pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo
+    in the last call to flink:vkCmdSetSampleLocationsEXT must: equal the
+    pname:rasterizationSamples member of the
+    slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
+    pipeline has been created with
+  * [[VUID-{refpage}-sampleLocationsPerPixel-07483]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, then the
+    pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo in
+    the last call to flink:vkCmdSetSampleLocationsEXT must: equal the
+    pname:rasterizationSamples parameter of the last call to
+    flink:vkCmdSetRasterizationSamplesEXT
+  * [[VUID-{refpage}-sampleLocationsEnable-07484]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, or
+endif::VK_EXT_shader_object[]
+    the bound graphics pipeline was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and
+    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
+    flink:vkCmdSetSampleLocationsEnableEXT, and the current subpass has a
+    depth/stencil attachment, then that attachment must: have been created
+    with the ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+    bit set
+  * [[VUID-{refpage}-sampleLocationsEnable-07485]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, or
+endif::VK_EXT_shader_object[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
+    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
+    flink:vkCmdSetSampleLocationsEnableEXT, then the
+    pname:sampleLocationsInfo.sampleLocationGridSize.width in the last call
+    to flink:vkCmdSetSampleLocationsEXT must: evenly divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling pname:rasterizationSamples
+  * [[VUID-{refpage}-sampleLocationsEnable-07486]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, or
+endif::VK_EXT_shader_object[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
+    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
+    flink:vkCmdSetSampleLocationsEnableEXT, then the
+    pname:sampleLocationsInfo.sampleLocationGridSize.height in the last call
+    to flink:vkCmdSetSampleLocationsEXT must: evenly divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling pname:rasterizationSamples
+  * [[VUID-{refpage}-sampleLocationsEnable-07487]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, or
+endif::VK_EXT_shader_object[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
+    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
+    flink:vkCmdSetSampleLocationsEnableEXT, the fragment shader code must:
+    not statically use the extended instruction code:InterpolateAtSample
+  * [[VUID-{refpage}-sampleLocationsEnable-07936]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    in the bound graphics pipeline is ename:VK_TRUE or
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
+    pname:sampleLocationsInfo.sampleLocationGridSize.width must: evenly
+    divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling the value of pname:rasterizationSamples
+    in the last call to flink:vkCmdSetRasterizationSamplesEXT
+  * [[VUID-{refpage}-sampleLocationsEnable-07937]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    in the bound graphics pipeline is ename:VK_TRUE or
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
+    pname:sampleLocationsInfo.sampleLocationGridSize.height must: evenly
+    divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling the value of pname:rasterizationSamples
+    in the last call to flink:vkCmdSetRasterizationSamplesEXT
+  * [[VUID-{refpage}-sampleLocationsEnable-07938]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    in the bound graphics pipeline is ename:VK_TRUE or
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
+    pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
+    pname:rasterizationSamples in the last call to
+    flink:vkCmdSetRasterizationSamplesEXT
+endif::VK_EXT_sample_locations[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-{refpage}-coverageModulationTableEnable-07488]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to any graphics stage or
+endif::VK_EXT_shader_object[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state
+    enabled, and the last call to
+    flink:vkCmdSetCoverageModulationTableEnableNV set
+    pname:coverageModulationTableEnable to ename:VK_TRUE, then the
+    pname:coverageModulationTableCount parameter in the last call to
+    flink:vkCmdSetCoverageModulationTableNV must: equal the current
+    pname:rasterizationSamples divided by the number of color samples in the
+    current subpass
+  * [[VUID-{refpage}-rasterizationSamples-07489]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and if current subpass has a depth/stencil attachment and depth test,
+    stencil test, or depth bounds test are enabled in the currently bound
+    pipeline state, then the current pname:rasterizationSamples must: be the
+    same as the sample count of the depth/stencil attachment
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_NV_fragment_coverage_to_color[]
+  * [[VUID-{refpage}-coverageToColorEnable-07490]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the
+    last call to flink:vkCmdSetCoverageToColorEnableNV set the
+    pname:coverageToColorEnable to ename:VK_TRUE, then the current subpass
+    must: have a color attachment at the location selected by the last call
+    to flink:vkCmdSetCoverageToColorLocationNV
+    pname:coverageToColorLocation, with a elink:VkFormat of
+    ename:VK_FORMAT_R8_UINT, ename:VK_FORMAT_R8_SINT,
+    ename:VK_FORMAT_R16_UINT, ename:VK_FORMAT_R16_SINT,
+    ename:VK_FORMAT_R32_UINT, or ename:VK_FORMAT_R32_SINT
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-rasterizerDiscardEnable-09420]]
+    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
+    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, and the last call to
+    flink:vkCmdSetCoverageToColorEnableNV set the
+    pname:coverageToColorEnable to ename:VK_TRUE, then the current subpass
+    must: have a color attachment at the location selected by the last call
+    to flink:vkCmdSetCoverageToColorLocationNV
+    pname:coverageToColorLocation, with a elink:VkFormat of
+    ename:VK_FORMAT_R8_UINT, ename:VK_FORMAT_R8_SINT,
+    ename:VK_FORMAT_R16_UINT, ename:VK_FORMAT_R16_SINT,
+    ename:VK_FORMAT_R32_UINT, or ename:VK_FORMAT_R32_SINT
+endif::VK_EXT_shader_object[]
+ifdef::VK_NV_coverage_reduction_mode[]
+  * [[VUID-{refpage}-coverageReductionMode-07491]]
+    If this `apiext:VK_NV_coverage_reduction_mode` extension is enabled, the
+    bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV and
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, the
+    current coverage reduction mode pname:coverageReductionMode, then the
+    current pname:rasterizationSamples, and the sample counts for the color
+    and depth/stencil attachments (if the subpass has them) must: be a valid
+    combination returned by
+    flink:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
+endif::VK_NV_coverage_reduction_mode[]
+endif::VK_NV_fragment_coverage_to_color[]
+ifdef::VK_NV_viewport_swizzle[]
+  * [[VUID-{refpage}-viewportCount-07492]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
+    not the ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state
+    enabled, then the bound graphics pipeline must: have been created with
+    slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount
+    greater or equal to the pname:viewportCount parameter in the last call
+    to flink:vkCmdSetViewportWithCount
+  * [[VUID-{refpage}-viewportCount-07493]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then
+    the pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportSwizzleNV must: be greater than or equal to the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+  * [[VUID-{refpage}-viewportCount-09421]]
+    If the `apiext:VK_NV_viewport_swizzle` extension is enabled, and a
+    shader object is bound to any graphics stage, then the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportSwizzleNV must: be greater than or equal to the
+    pname:viewportCount parameter in the last call to
+    flink:vkCmdSetViewportWithCount
+endif::VK_NV_viewport_swizzle[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-{refpage}-rasterizationSamples-07494]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and if the current subpass has any color attachments and
+    pname:rasterizationSamples of the last call to
+    flink:vkCmdSetRasterizationSamplesEXT is greater than the number of
+    color samples, then the pipeline pname:sampleShadingEnable must: be
+    ename:VK_FALSE
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_line_rasterization[]
+  * [[VUID-{refpage}-stippledLineEnable-07495]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
+    enabled, and if the current pname:stippledLineEnable state is
+    ename:VK_TRUE and the current pname:lineRasterizationMode state is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
+    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
+    feature must: be enabled
+  * [[VUID-{refpage}-stippledLineEnable-07496]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
+    enabled, and if the current pname:stippledLineEnable state is
+    ename:VK_TRUE and the current pname:lineRasterizationMode state is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
+    <<features-stippledBresenhamLines, pname:stippledBresenhamLines>>
+    feature must: be enabled
+  * [[VUID-{refpage}-stippledLineEnable-07497]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
+    enabled, and if the current pname:stippledLineEnable state is
+    ename:VK_TRUE and the current pname:lineRasterizationMode state is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    <<features-stippledSmoothLines, pname:stippledSmoothLines>> feature
+    must: be enabled
+  * [[VUID-{refpage}-stippledLineEnable-07498]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
+    enabled, and if the current pname:stippledLineEnable state is
+    ename:VK_TRUE and the current pname:lineRasterizationMode state is
+    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, then the
+    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
+    feature must: be enabled and
+    slink:VkPhysicalDeviceLimits::pname:strictLines must: be ename:VK_TRUE
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_conservative_rasterization[]
+  * [[VUID-{refpage}-conservativePointAndLineRasterization-07499]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state
+    enabled, <<limits-conservativePointAndLineRasterization,
+    pname:conservativePointAndLineRasterization>> is not supported, and the
+    effective primitive topology output by the last pre-rasterization shader
+    stage is a line or point, then the pname:conservativeRasterizationMode
+    set by the last call to flink:vkCmdSetConservativeRasterizationModeEXT
+    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+endif::VK_EXT_conservative_rasterization[]
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-stage-07073]]
+    If the currently bound pipeline was created with the
+    slink:VkPipelineShaderStageCreateInfo::pname:stage member of an element
+    of slink:VkGraphicsPipelineCreateInfo::pname:pStages set to
+    ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, then <<queries-mesh-shader, Mesh
+    Shader Queries>> must: not be active
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+  * [[VUID-{refpage}-None-08877]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state
+    flink:vkCmdSetAttachmentFeedbackLoopEnableEXT must: have been called in
+    the current command buffer prior to this drawing command
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-{refpage}-None-07850]]
+    If dynamic state was inherited from
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV, it must: be set
+    in the current command buffer prior to this drawing command
+endif::VK_NV_inherited_viewport_scissor[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08684]]
+    If there is no bound graphics pipeline, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_VERTEX_BIT
+  * [[VUID-{refpage}-None-08685]]
+    If there is no bound graphics pipeline, and the
+    <<features-tessellationShader, pname:tessellationShader>> feature is
+    enabled, fname:vkCmdBindShadersEXT must: have been called in the current
+    command buffer with pname:pStages with an element of
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
+  * [[VUID-{refpage}-None-08686]]
+    If there is no bound graphics pipeline, and the
+    <<features-tessellationShader, pname:tessellationShader>> feature is
+    enabled, fname:vkCmdBindShadersEXT must: have been called in the current
+    command buffer with pname:pStages with an element of
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  * [[VUID-{refpage}-None-08687]]
+    If there is no bound graphics pipeline, and the
+    <<features-geometryShader, pname:geometryShader>> feature is enabled,
+    fname:vkCmdBindShadersEXT must: have been called in the current command
+    buffer with pname:pStages with an element of
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT
+  * [[VUID-{refpage}-None-08688]]
+    If there is no bound graphics pipeline, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_FRAGMENT_BIT
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-None-08689]]
+    If there is no bound graphics pipeline, and the <<features-taskShader,
+    pname:taskShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_TASK_BIT_EXT
+  * [[VUID-{refpage}-None-08690]]
+    If there is no bound graphics pipeline, and the <<features-meshShader,
+    pname:meshShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_MESH_BIT_EXT
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-{refpage}-None-08691]]
+    If there is no bound graphics pipeline, and the <<features-taskShader,
+    pname:taskShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_TASK_BIT_NV
+  * [[VUID-{refpage}-None-08692]]
+    If there is no bound graphics pipeline, and the <<features-meshShader,
+    pname:meshShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
+    have been called in the current command buffer with pname:pStages with
+    an element of ename:VK_SHADER_STAGE_MESH_BIT_NV
+endif::VK_NV_mesh_shader[]
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-None-08693]]
+    If there is no bound graphics pipeline, and at least one of the
+    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
+    pname:meshShader>> features is enabled, one of the
+    ename:VK_SHADER_STAGE_VERTEX_BIT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
+    stages must: have a valid sname:VkShaderEXT bound, and the other must:
+    have no sname:VkShaderEXT bound
+  * [[VUID-{refpage}-None-08694]]
+    If there is no bound graphics pipeline, and both the
+    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
+    pname:meshShader>> features are enabled, and a valid sname:VkShaderEXT
+    is bound the to the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage, and that
+    sname:VkShaderEXT was created without the
+    ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid
+    sname:VkShaderEXT must: be bound to the
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT stage
+  * [[VUID-{refpage}-None-08695]]
+    If there is no bound graphics pipeline, and both the
+    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
+    pname:meshShader>> features are enabled, and a valid sname:VkShaderEXT
+    is bound the to the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage, and that
+    sname:VkShaderEXT was created with the
+    ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must: be no
+    sname:VkShaderEXT bound to the ename:VK_SHADER_STAGE_TASK_BIT_EXT stage
+  * [[VUID-{refpage}-None-08696]]
+    If there is no bound graphics pipeline, and a valid sname:VkShaderEXT is
+    bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage, there must: be no
+    sname:VkShaderEXT bound to either the ename:VK_SHADER_STAGE_TASK_BIT_EXT
+    stage or the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-None-08697]]
+    If there is no bound graphics pipeline, a sname:VkShaderEXT must: be
+    bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage
+endif::VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-None-08698]]
+    If any graphics shader is bound which was created with the
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created
+    with the ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same
+    flink:vkCreateShadersEXT call must: also be bound
+  * [[VUID-{refpage}-None-08699]]
+    If any graphics shader is bound which was created with the
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between
+    stages whose shaders which did not create a shader with the
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same
+    flink:vkCreateShadersEXT call must: not have any sname:VkShaderEXT bound
+  * [[VUID-{refpage}-None-08878]]
+    All bound graphics shader objects must: have been created with identical
+    or identically defined push constant ranges
+  * [[VUID-{refpage}-None-08879]]
+    All bound graphics shader objects must: have been created with identical
+    or identically defined arrays of descriptor set layouts
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-{refpage}-colorAttachmentCount-09372]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRendering and a
+    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`, a color
+    attachment with a resolve mode of
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, and a fragment
+    shader is bound, it must: not declare the code:DepthReplacing or
+    code:StencilRefReplacingEXT execution modes
+endif::VK_ANDROID_external_format_resolve[]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+  * [[VUID-{refpage}-None-08880]]
+    If the <<features-attachmentFeedbackLoopDynamicState,
+    attachmentFeedbackLoopDynamicState>> feature is enabled on the device,
+    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
+    in the current command buffer set pname:rasterizerDiscardEnable to
+    ename:VK_FALSE, then flink:vkCmdSetAttachmentFeedbackLoopEnableEXT must:
+    have been called in the current command buffer prior to this drawing
+    command
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+ifdef::VK_EXT_shader_tile_image[]
+  * [[VUID-{refpage}-pDynamicStates-08715]]
+    If the bound graphics pipeline state includes a fragment shader stage,
+    was created with ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in
+    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
+    fragment shader declares the code:EarlyFragmentTests execution mode and
+    uses code:OpDepthAttachmentReadEXT, the pname:depthWriteEnable parameter
+    in the last call to flink:vkCmdSetDepthWriteEnable must: be
+    ename:VK_FALSE
+  * [[VUID-{refpage}-pDynamicStates-08716]]
+    If the bound graphics pipeline state includes a fragment shader stage,
+    was created with ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in
+    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
+    fragment shader declares the code:EarlyFragmentTests execution mode and
+    uses code:OpStencilAttachmentReadEXT, the pname:writeMask parameter in
+    the last call to flink:vkCmdSetStencilWriteMask must: be `0`
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-09116]]
+    If
+ifdef::VK_EXT_shader_object[]
+    a shader object is bound to any graphics stage
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3+VK_EXT_shader_object[or]
+ifdef::VK_EXT_extended_dynamic_state3[]
+    the currently bound graphics pipeline was created with
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT,
+endif::VK_EXT_extended_dynamic_state3[]
+    and the format of any color attachment is
+    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the
+    pname:pColorWriteMasks parameter of flink:vkCmdSetColorWriteMaskEXT
+    must: either include all of ename:VK_COLOR_COMPONENT_R_BIT,
+    ename:VK_COLOR_COMPONENT_G_BIT, and ename:VK_COLOR_COMPONENT_B_BIT, or
+    none of them
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+  * [[VUID-{refpage}-maxFragmentDualSrcAttachments-09239]]
+    If <<framebuffer-blending,blending>> is enabled for any attachment where
+    either the source or destination blend factors for that attachment
+    <<framebuffer-dsb, use the secondary color input>>, the maximum value of
+    code:Location for any output attachment <<shaders-staticuse, statically
+    used>> in the code:Fragment {ExecutionModel} executed by this command
+    must: be less than <<limits-maxFragmentDualSrcAttachments,
+    pname:maxFragmentDualSrcAttachments>>
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_common.adoc
new file mode 100644
index 0000000..d4c6f83
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_common.adoc
@@ -0,0 +1,530 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all dispatch and drawing commands
+  * [[VUID-{refpage}-magFilter-04553]]
+    If a slink:VkSampler created with pname:magFilter or pname:minFilter
+    equal to ename:VK_FILTER_LINEAR and pname:compareEnable equal to
+    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
+    command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+  * [[VUID-{refpage}-mipmapMode-04770]]
+    If a slink:VkSampler created with pname:mipmapMode equal to
+    ename:VK_SAMPLER_MIPMAP_MODE_LINEAR and pname:compareEnable equal to
+    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
+    command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-aspectMask-06478]]
+    If a slink:VkImageView is sampled with
+    <<textures-depth-compare-operation,depth comparison>>, the image view
+    must: have been created with an pname:aspectMask that contains
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-None-06479]]
+    If a slink:VkImageView is sampled with
+    <<textures-depth-compare-operation,depth comparison>>, the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-None-02691]]
+    If a slink:VkImageView is accessed using atomic operations as a result
+    of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
+  * [[VUID-{refpage}-None-07888]]
+    If a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is
+    accessed using atomic operations as a result of this command, then the
+    storage texel buffer's <<resources-buffer-view-format-features,format
+    features>> must: contain
+    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-None-02692]]
+    If a slink:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
+    result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
+  * [[VUID-{refpage}-None-02693]]
+    If
+ifdef::VK_EXT_filter_cubic[]
+    the apiext:VK_EXT_filter_cubic extension is not enabled and
+endif::VK_EXT_filter_cubic[]
+    any slink:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
+    result of this command, it must: not have a elink:VkImageViewType of
+    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
+    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
+ifdef::VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-filterCubic-02694]]
+    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
+    result of this command must: have a elink:VkImageViewType and format
+    that supports cubic filtering, as specified by
+    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
+    returned by flink:vkGetPhysicalDeviceImageFormatProperties2
+  * [[VUID-{refpage}-filterCubicMinmax-02695]]
+    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
+    a reduction mode of either ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+    ename:VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must:
+    have a elink:VkImageViewType and format that supports cubic filtering
+    together with minmax filtering, as specified by
+    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
+    returned by flink:vkGetPhysicalDeviceImageFormatProperties2
+endif::VK_EXT_filter_cubic[]
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+ifdef::VK_QCOM_filter_cubic_clamp[]
+  * [[VUID-{refpage}-cubicRangeClamp-09212]]
+    If the <<features-filter-cubic-range-clamp, pname:cubicRangeClamp>>
+    feature is not enabled, then any slink:VkImageView being sampled with
+    ename:VK_FILTER_CUBIC_EXT as a result of this command
+    must: not have a
+    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
+  * [[VUID-{refpage}-reductionMode-09213]]
+    Any slink:VkImageView being sampled with a
+    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a
+    result of this command must: sample with ename:VK_FILTER_CUBIC_EXT
+endif::VK_QCOM_filter_cubic_clamp[]
+ifdef::VK_QCOM_filter_cubic_weights[]
+  * [[VUID-{refpage}-selectableCubicWeights-09214]]
+    If the <<features-filter-cubic-weight-selection,
+    pname:selectableCubicWeights>> feature is not enabled, then any
+    slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
+    result of this command must: have
+    slink:VkSamplerCubicWeightsCreateInfoQCOM::pname:cubicWeights equal to
+    ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
+endif::VK_QCOM_filter_cubic_weights[]
+ifdef::VK_NV_corner_sampled_image[]
+  * [[VUID-{refpage}-flags-02696]]
+    Any slink:VkImage created with a slink:VkImageCreateInfo::pname:flags
+    containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a
+    result of this command must: only be sampled using a
+    elink:VkSamplerAddressMode of
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
+endif::VK_NV_corner_sampled_image[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-OpTypeImage-07027]]
+    For any slink:VkImageView being written as a storage image where the
+    image format field of the code:OpTypeImage is code:Unknown, the view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
+  * [[VUID-{refpage}-OpTypeImage-07028]]
+    For any slink:VkImageView being read as a storage image where the image
+    format field of the code:OpTypeImage is code:Unknown, the view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
+  * [[VUID-{refpage}-OpTypeImage-07029]]
+    For any slink:VkBufferView being written as a storage texel buffer where
+    the image format field of the code:OpTypeImage is code:Unknown, the
+    view's <<VkFormatProperties3,buffer features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
+  * [[VUID-{refpage}-OpTypeImage-07030]]
+    Any slink:VkBufferView being read as a storage texel buffer where the
+    image format field of the code:OpTypeImage is code:Unknown then the
+    view's <<VkFormatProperties3,buffer features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifndef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-02697]]
+    For each set _n_ that is statically used by <<shaders-binding,a bound
+    shader>>, a descriptor set must: have been bound to _n_ at the same
+    pipeline bind point, with a slink:VkPipelineLayout that is compatible
+    for set _n_, with the slink:VkPipelineLayout used to create the current
+    slink:VkPipeline, as described in <<descriptorsets-compatibility>>
+  * [[VUID-{refpage}-None-02698]]
+    For each push constant that is statically used by <<shaders-binding,a
+    bound shader>>, a push constant value must: have been set for the same
+    pipeline bind point, with a slink:VkPipelineLayout that is compatible
+    for push constants, with the slink:VkPipelineLayout used to create the
+    current slink:VkPipeline, as described in
+    <<descriptorsets-compatibility>>
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08600]]
+    For each set _n_ that is statically used by <<shaders-binding,a bound
+    shader>>, a descriptor set must: have been bound to _n_ at the same
+    pipeline bind point, with a slink:VkPipelineLayout that is compatible
+    for set _n_, with the slink:VkPipelineLayout or
+    slink:VkDescriptorSetLayout array that was used to create the current
+    slink:VkPipeline or slink:VkShaderEXT, as described in
+    <<descriptorsets-compatibility>>
+  * [[VUID-{refpage}-None-08601]]
+    For each push constant that is statically used by <<shaders-binding,a
+    bound shader>>, a push constant value must: have been set for the same
+    pipeline bind point, with a slink:VkPipelineLayout that is compatible
+    for push constants, with the slink:VkPipelineLayout or
+    slink:VkDescriptorSetLayout and slink:VkPushConstantRange arrays used to
+    create the current slink:VkPipeline or slink:VkShaderEXT, as described
+    in <<descriptorsets-compatibility>>
+endif::VK_EXT_shader_object[]
+ifndef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifndef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-maintenance4-06425]]
+    If the <<features-maintenance4, pname:maintenance4>> feature is not
+    enabled, then for each push constant that is statically used by
+    <<shaders-binding,a bound shader>>, a push constant value must: have
+    been set for the same pipeline bind point, with a slink:VkPipelineLayout
+    that is compatible for push constants, with the slink:VkPipelineLayout
+    used to create the current slink:VkPipeline, as described in
+    <<descriptorsets-compatibility>>
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-maintenance4-08602]]
+    If the <<features-maintenance4, pname:maintenance4>> feature is not
+    enabled, then for each push constant that is statically used by
+    <<shaders-binding,a bound shader>>, a push constant value must: have
+    been set for the same pipeline bind point, with a slink:VkPipelineLayout
+    that is compatible for push constants, with the slink:VkPipelineLayout
+    or slink:VkDescriptorSetLayout and slink:VkPushConstantRange arrays used
+    to create the current slink:VkPipeline or slink:VkShaderEXT, as
+    described in <<descriptorsets-compatibility>>
+endif::VK_EXT_shader_object[]
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifndef::VK_EXT_descriptor_buffer[]
+  * [[VUID-{refpage}-None-02699]]
+    Descriptors in each bound descriptor set, specified via
+    flink:vkCmdBindDescriptorSets, must: be valid as described by
+    <<descriptor-validity,descriptor validity>> if they are statically used
+    by <<shaders-binding,a bound shader>>
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-{refpage}-None-08114]]
+    Descriptors in each bound descriptor set, specified via
+    flink:vkCmdBindDescriptorSets, must: be valid if they are statically
+    used by the slink:VkPipeline bound to the pipeline bind point used by
+    this command and the bound slink:VkPipeline was not created with
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+  * [[VUID-{refpage}-None-08115]]
+    If the descriptors used by the slink:VkPipeline bound to the pipeline
+    bind point were specified via flink:vkCmdBindDescriptorSets, the bound
+    slink:VkPipeline must: have been created without
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+  * [[VUID-{refpage}-None-08116]]
+    Descriptors in bound descriptor buffers, specified via
+    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
+    dynamically used by the slink:VkPipeline bound to the pipeline bind
+    point used by this command and the bound slink:VkPipeline was created
+    with ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08604]]
+    Descriptors in bound descriptor buffers, specified via
+    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
+    dynamically used by any slink:VkShaderEXT bound to a stage corresponding
+    to the pipeline bind point used by this command
+endif::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08117]]
+    If the descriptors used by the slink:VkPipeline bound to the pipeline
+    bind point were specified via flink:vkCmdSetDescriptorBufferOffsetsEXT,
+    the bound slink:VkPipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+  * [[VUID-{refpage}-None-08119]]
+    If a descriptor is dynamically used with a slink:VkPipeline created with
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor
+    memory must: be resident
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08605]]
+    If a descriptor is dynamically used with a slink:VkShaderEXT created
+    with a sname:VkDescriptorSetLayout that was created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the
+    descriptor memory must: be resident
+endif::VK_EXT_shader_object[]
+endif::VK_EXT_descriptor_buffer[]
+ifndef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-02700]]
+    A valid pipeline must: be bound to the pipeline bind point used by this
+    command
+  * [[VUID-{refpage}-None-02859]]
+    There must: not have been any calls to dynamic state setting commands
+    for any state not specified as dynamic in the slink:VkPipeline object
+    bound to the pipeline bind point used by this command, since that
+    pipeline was bound
+  * [[VUID-{refpage}-None-02702]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a slink:VkSampler object that uses unnormalized
+    coordinates, that sampler must: not be used to sample from any
+    slink:VkImage with a slink:VkImageView of the type
+    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
+    ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
+    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
+  * [[VUID-{refpage}-None-02703]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a slink:VkSampler object that uses unnormalized
+    coordinates, that sampler must: not be used with any of the SPIR-V
+    `OpImageSample*` or `OpImageSparseSample*` instructions with
+    code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
+    stage
+  * [[VUID-{refpage}-None-02704]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a slink:VkSampler object that uses unnormalized
+    coordinates, that sampler must: not be used with any of the SPIR-V
+    `OpImageSample*` or `OpImageSparseSample*` instructions that includes a
+    LOD bias or any offset values, in any shader stage
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08606]]
+    If the <<features-shaderObject, pname:shaderObject>> feature is not
+    enabled, a valid pipeline must: be bound to the pipeline bind point used
+    by this command
+  * [[VUID-{refpage}-None-08607]]
+    If the <<features-shaderObject, pname:shaderObject>> is enabled, either
+    a valid pipeline must: be bound to the pipeline bind point used by this
+    command, or a valid combination of valid and dlink:VK_NULL_HANDLE shader
+    objects must: be bound to every supported shader stage corresponding to
+    the pipeline bind point used by this command
+  * [[VUID-{refpage}-None-08608]]
+    If a pipeline is bound to the pipeline bind point used by this command,
+    there must: not have been any calls to dynamic state setting commands
+    for any state not specified as dynamic in the slink:VkPipeline object
+    bound to the pipeline bind point used by this command, since that
+    pipeline was bound
+  * [[VUID-{refpage}-None-08609]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command or any slink:VkShaderEXT bound to a stage corresponding to
+    the pipeline bind point used by this command accesses a slink:VkSampler
+    object that uses unnormalized coordinates, that sampler must: not be
+    used to sample from any slink:VkImage with a slink:VkImageView of the
+    type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
+    ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
+    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
+  * [[VUID-{refpage}-None-08610]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command or any slink:VkShaderEXT bound to a stage corresponding to
+    the pipeline bind point used by this command accesses a slink:VkSampler
+    object that uses unnormalized coordinates, that sampler must: not be
+    used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*`
+    instructions with code:ImplicitLod, code:Dref or code:Proj in their
+    name, in any shader stage
+  * [[VUID-{refpage}-None-08611]]
+    If the slink:VkPipeline object bound to the pipeline bind point used by
+    this command or any slink:VkShaderEXT bound to a stage corresponding to
+    the pipeline bind point used by this command accesses a slink:VkSampler
+    object that uses unnormalized coordinates, that sampler must: not be
+    used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*`
+    instructions that includes a LOD bias or any offset values, in any
+    shader stage
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_pipeline_robustness[]
+  * [[VUID-{refpage}-None-02705]]
+    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
+    is not enabled, and if the slink:VkPipeline object bound to the pipeline
+    bind point used by this command accesses a uniform buffer, it must: not
+    access values outside of the range of the buffer as specified in the
+    descriptor set bound to the same pipeline bind point
+endif::VK_EXT_pipeline_robustness[]
+ifdef::VK_EXT_pipeline_robustness[]
+  * [[VUID-{refpage}-uniformBuffers-06935]]
+    If any stage of the slink:VkPipeline object bound to the pipeline bind
+    point used by this command accesses a uniform buffer, and that stage was
+    created without enabling either
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+    for pname:uniformBuffers, and the <<features-robustBufferAccess,
+    pname:robustBufferAccess>> feature is not enabled, that stage must: not
+    access values outside of the range of the buffer as specified in the
+    descriptor set bound to the same pipeline bind point
+endif::VK_EXT_pipeline_robustness[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08612]]
+    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
+    is not enabled, and any slink:VkShaderEXT bound to a stage corresponding
+    to the pipeline bind point used by this command accesses a uniform
+    buffer, it must: not access values outside of the range of the buffer as
+    specified in the descriptor set bound to the same pipeline bind point
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_pipeline_robustness[]
+  * [[VUID-{refpage}-None-02706]]
+    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
+    is not enabled, and if the slink:VkPipeline object bound to the pipeline
+    bind point used by this command accesses a storage buffer, it must: not
+    access values outside of the range of the buffer as specified in the
+    descriptor set bound to the same pipeline bind point
+endif::VK_EXT_pipeline_robustness[]
+ifdef::VK_EXT_pipeline_robustness[]
+  * [[VUID-{refpage}-storageBuffers-06936]]
+    If any stage of the slink:VkPipeline object bound to the pipeline bind
+    point used by this command accesses a storage buffer, and that stage was
+    created without enabling either
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+    for pname:storageBuffers, and the <<features-robustBufferAccess,
+    pname:robustBufferAccess>> feature is not enabled, that stage must: not
+    access values outside of the range of the buffer as specified in the
+    descriptor set bound to the same pipeline bind point
+endif::VK_EXT_pipeline_robustness[]
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08613]]
+    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
+    is not enabled, and any slink:VkShaderEXT bound to a stage corresponding
+    to the pipeline bind point used by this command accesses a storage
+    buffer, it must: not access values outside of the range of the buffer as
+    specified in the descriptor set bound to the same pipeline bind point
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-02707]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    any resource accessed by <<shaders-binding,bound shaders>> must: not be
+    a protected resource
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-None-06550]]
+    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
+    slink:VkImageView object that enables
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
+    must: only be used with `OpImageSample*` or `OpImageSparseSample*`
+    instructions
+  * [[VUID-{refpage}-ConstOffset-06551]]
+    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
+    slink:VkImageView object that enables
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
+    must: not use the code:ConstOffset and code:Offset operands
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-viewType-07752]]
+    If a slink:VkImageView is accessed as a result of this command, then the
+    image view's pname:viewType must: match the code:Dim operand of the
+    code:OpTypeImage as described in <<textures-operation-validation>>
+  * [[VUID-{refpage}-format-07753]]
+    If a slink:VkImageView is accessed as a result of this command, then the
+    <<formats-numericformat, numeric type>> of the image view's pname:format
+    and the code:Sampled code:Type operand of the code:OpTypeImage must:
+    match
+  * [[VUID-{refpage}-OpImageWrite-08795]]
+    If a slink:VkImageView
+ifdef::VK_KHR_maintenance5[]
+    created with a format other than ename:VK_FORMAT_A8_UNORM_KHR
+endif::VK_KHR_maintenance5[]
+    is accessed using code:OpImageWrite as a result of this command, then
+    the code:Type of the code:Texel operand of that instruction must: have
+    at least as many components as the image view's format
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-OpImageWrite-08796]]
+    If a slink:VkImageView created with the format
+    ename:VK_FORMAT_A8_UNORM_KHR is accessed using code:OpImageWrite as a
+    result of this command, then the code:Type of the code:Texel operand of
+    that instruction must: have four components
+endif::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-OpImageWrite-04469]]
+    If a slink:VkBufferView is accessed using code:OpImageWrite as a result
+    of this command, then the code:Type of the code:Texel operand of that
+    instruction must: have at least as many components as the buffer view's
+    format
+ifdef::VK_EXT_shader_image_atomic_int64[]
+  * [[VUID-{refpage}-SampledType-04470]]
+    If a slink:VkImageView with a elink:VkFormat that has a 64-bit component
+    width is accessed as a result of this command, the code:SampledType of
+    the code:OpTypeImage operand of that instruction must: have a code:Width
+    of 64
+  * [[VUID-{refpage}-SampledType-04471]]
+    If a slink:VkImageView with a elink:VkFormat that has a component width
+    less than 64-bit is accessed as a result of this command, the
+    code:SampledType of the code:OpTypeImage operand of that instruction
+    must: have a code:Width of 32
+  * [[VUID-{refpage}-SampledType-04472]]
+    If a slink:VkBufferView with a elink:VkFormat that has a 64-bit
+    component width is accessed as a result of this command, the
+    code:SampledType of the code:OpTypeImage operand of that instruction
+    must: have a code:Width of 64
+  * [[VUID-{refpage}-SampledType-04473]]
+    If a slink:VkBufferView with a elink:VkFormat that has a component width
+    less than 64-bit is accessed as a result of this command, the
+    code:SampledType of the code:OpTypeImage operand of that instruction
+    must: have a code:Width of 32
+  * [[VUID-{refpage}-sparseImageInt64Atomics-04474]]
+    If the <<features-sparseImageInt64Atomics,
+    pname:sparseImageInt64Atomics>> feature is not enabled, slink:VkImage
+    objects created with the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag
+    must: not be accessed by atomic instructions through an code:OpTypeImage
+    with a code:SampledType with a code:Width of 64 by this command
+  * [[VUID-{refpage}-sparseImageInt64Atomics-04475]]
+    If the <<features-sparseImageInt64Atomics,
+    pname:sparseImageInt64Atomics>> feature is not enabled, slink:VkBuffer
+    objects created with the ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+    flag must: not be accessed by atomic instructions through an
+    code:OpTypeImage with a code:SampledType with a code:Width of 64 by this
+    command
+endif::VK_EXT_shader_image_atomic_int64[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06971]]
+    If code:OpImageWeightedSampleQCOM is used to sample a slink:VkImageView
+    as a result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06972]]
+    If code:OpImageWeightedSampleQCOM uses a slink:VkImageView as a sample
+    weight image as a result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM
+  * [[VUID-{refpage}-OpImageBoxFilterQCOM-06973]]
+    If code:OpImageBoxFilterQCOM is used to sample a slink:VkImageView as a
+    result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
+  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06974]]
+    If code:OpImageBlockMatchSSDQCOM is used to read from an
+    slink:VkImageView as a result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
+  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06975]]
+    If code:OpImageBlockMatchSADQCOM is used to read from an
+    slink:VkImageView as a result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
+  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06976]]
+    If code:OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to
+    read from a reference image as result of this command, then the
+    specified reference coordinates must: not fail
+    <<textures-integer-coordinate-validation,integer texel coordinate
+    validation>>
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06977]]
+    If code:OpImageWeightedSampleQCOM, code:OpImageBoxFilterQCOM,
+ifdef::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchWindowSSDQCOM,
+    code:OpImageBlockMatchWindowSADQCOM,
+    code:OpImageBlockMatchGatherSSDQCOM,
+    code:OpImageBlockMatchGatherSADQCOM,
+endif::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
+    slink:VkSampler as a result of this command, then the sampler must: have
+    been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
+  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06978]]
+    If any command other than code:OpImageWeightedSampleQCOM,
+    code:OpImageBoxFilterQCOM,
+ifdef::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchWindowSSDQCOM,
+    code:OpImageBlockMatchWindowSADQCOM,
+    code:OpImageBlockMatchGatherSSDQCOM,
+    code:OpImageBlockMatchGatherSADQCOM,
+endif::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
+    slink:VkSampler as a result of this command, then the sampler must: not
+    have been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
+endif::VK_QCOM_image_processing[]
+ifdef::VK_QCOM_image_processing2[]
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09215]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
+    slink:VkImageView as a result of this command, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09216]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
+    slink:VkImageView as a result of this command, then the image view's
+    format must: be a single-component format.
+  * [[VUID-{refpage}-OpImageBlockMatchWindow-09217]]
+    If a code:OpImageBlockMatchWindow*QCOM or
+    code:OpImageBlockMatchGather*QCOM read from a reference image as result
+    of this command, then the specified reference coordinates must: not fail
+    <<textures-integer-coordinate-validation,integer texel coordinate
+    validation>>
+endif::VK_QCOM_image_processing2[]
+  * [[VUID-{refpage}-None-07288]]
+    Any shader invocation executed by this command must:
+    <<shaders-termination,terminate>>
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_indirect_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_indirect_common.adoc
new file mode 100644
index 0000000..ed49cfc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_indirect_common.adoc
@@ -0,0 +1,19 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to indirect drawing commands
+  * [[VUID-{refpage}-buffer-02708]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-buffer-02709]]
+    pname:buffer must: have been created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-{refpage}-offset-02710]]
+    pname:offset must: be a multiple of `4`
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-02711]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_nonindirect_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_nonindirect_common.adoc
new file mode 100644
index 0000000..5d043cf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_dispatch_nonindirect_common.adoc
@@ -0,0 +1,29 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to non-indirect drawing commands
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-02712]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    any resource written to by the sname:VkPipeline object bound to the
+    pipeline bind point used by this command must: not be an unprotected
+    resource
+  * [[VUID-{refpage}-commandBuffer-02713]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pipeline stages other than the framebuffer-space and compute stages in
+    the sname:VkPipeline object bound to the pipeline bind point used by
+    this command must: not write to any resource
+ifdef::VK_KHR_ray_query[]
+  * [[VUID-{refpage}-commandBuffer-04617]]
+    If any of the shader stages of the sname:VkPipeline bound to the
+    pipeline bind point used by this command uses the
+    <<spirvenv-capabilities-table-RayQueryKHR, code:RayQueryKHR>>
+    capability, then pname:commandBuffer must: not be a protected command
+    buffer
+endif::VK_KHR_ray_query[]
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_index_binding.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_index_binding.adoc
new file mode 100644
index 0000000..074def8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_index_binding.adoc
@@ -0,0 +1,29 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+ifndef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-robustBufferAccess2-08797]]
+    If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is not
+    enabled, [eq]#(code:indexSize {times} (pname:firstIndex {plus}
+    pname:indexCount) {plus} pname:offset)# must: be less than or equal to
+    the size of the bound index buffer, with code:indexSize being based on
+    the type specified by pname:indexType, where the index buffer,
+    pname:indexType, and pname:offset are specified via
+    fname:vkCmdBindIndexBuffer
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-robustBufferAccess2-08798]]
+    If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is not
+    enabled, [eq]#(code:indexSize {times} (pname:firstIndex {plus}
+    pname:indexCount) {plus} pname:offset)# must: be less than or equal to
+    the size of the bound index buffer, with code:indexSize being based on
+    the type specified by pname:indexType, where the index buffer,
+    pname:indexType, and pname:offset are specified via
+    fname:vkCmdBindIndexBuffer or fname:vkCmdBindIndexBuffer2KHR.
+    If fname:vkCmdBindIndexBuffer2KHR is used to bind the index buffer, the
+    size of the bound index buffer is
+    flink:vkCmdBindIndexBuffer2KHR::pname:size
+endif::VK_KHR_maintenance5[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indexed_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indexed_common.adoc
new file mode 100644
index 0000000..c487201
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indexed_common.adoc
@@ -0,0 +1,17 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to drawing commands that are indexed
+  * [[VUID-{refpage}-None-07312]]
+    An index buffer must: be bound
+  * [[VUID-{refpage}-robustBufferAccess2-07825]]
+    If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is not
+    enabled, [eq]#(code:indexSize {times} (pname:firstIndex {plus}
+    pname:indexCount) {plus} pname:offset)# must: be less than or equal to
+    the size of the bound index buffer, with code:indexSize being based on
+    the type specified by pname:indexType, where the index buffer,
+    pname:indexType, and pname:offset are specified via
+    fname:vkCmdBindIndexBuffer
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_count_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_count_common.adoc
new file mode 100644
index 0000000..7ef74bd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_count_common.adoc
@@ -0,0 +1,26 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to indirect drawing commands with a pname:countBuffer parameter
+  * [[VUID-{refpage}-countBuffer-02714]]
+    If pname:countBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-countBuffer-02715]]
+    pname:countBuffer must: have been created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-{refpage}-countBufferOffset-02716]]
+    pname:countBufferOffset must: be a multiple of `4`
+  * [[VUID-{refpage}-countBuffer-02717]]
+    The count stored in pname:countBuffer must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
+  * [[VUID-{refpage}-countBufferOffset-04129]]
+    [eq]#(pname:countBufferOffset {plus} code:sizeof(uint32_t))# must: be
+    less than or equal to the size of pname:countBuffer
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-None-04445]]
+    If <<features-drawIndirectCount, pname:drawIndirectCount>> is not
+    enabled this function must: not be used
+endif::VK_VERSION_1_2[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_drawcount.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_drawcount.adoc
new file mode 100644
index 0000000..fe37721
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_indirect_drawcount.adoc
@@ -0,0 +1,13 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to indirect drawing commands with a pname:drawCount parameter
+  * [[VUID-{refpage}-drawCount-02718]]
+    If the <<features-multiDrawIndirect, pname:multiDrawIndirect>> feature
+    is not enabled, pname:drawCount must: be `0` or `1`
+  * [[VUID-{refpage}-drawCount-02719]]
+    pname:drawCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_common.adoc
new file mode 100644
index 0000000..25316fb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_common.adoc
@@ -0,0 +1,40 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to drawing commands for mesh shading
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-stage-06480]]
+    The bound graphics pipeline must: not have been created with the
+    slink:VkPipelineShaderStageCreateInfo::pname:stage member of an element
+    of slink:VkGraphicsPipelineCreateInfo::pname:pStages set to
+    ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-None-07074]]
+    <<queries-transform-feedback, Transform Feedback Queries>> must: not be
+    active
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_primitives_generated_query[]
+  * [[VUID-{refpage}-None-07075]]
+    <<queries-primitives-generated, Primitives Generated Queries>> must: not
+    be active
+endif::VK_EXT_primitives_generated_query[]
+  * [[VUID-{refpage}-pipelineStatistics-07076]]
+    The pname:pipelineStatistics member used to create any active
+    <<queries-pipestats, Pipeline Statistics Query>> must: not contain
+    ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
+    ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
+    or
+    ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_limits_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_limits_common.adoc
new file mode 100644
index 0000000..f0951d4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_mesh_limits_common.adoc
@@ -0,0 +1,51 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common limits for draw mesh commands
+
+  * [[VUID-{refpage}-TaskEXT-07322]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    contains a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountX must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount[0]
+  * [[VUID-{refpage}-TaskEXT-07323]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    contains a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountY must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount[1]
+  * [[VUID-{refpage}-TaskEXT-07324]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    contains a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountZ must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount[2]
+  * [[VUID-{refpage}-TaskEXT-07325]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    contains a shader using the code:TaskEXT {ExecutionModel}, The product
+    of pname:groupCountX, pname:groupCountY and pname:groupCountZ must: be
+    less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount
+  * [[VUID-{refpage}-TaskEXT-07326]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    does not contain a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountX must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[0]
+  * [[VUID-{refpage}-TaskEXT-07327]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    does not contain a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountY must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[1]
+  * [[VUID-{refpage}-TaskEXT-07328]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    does not contain a shader using the code:TaskEXT {ExecutionModel},
+    pname:groupCountZ must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount[2]
+  * [[VUID-{refpage}-TaskEXT-07329]]
+    If the current pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    does not contain a shader using the code:TaskEXT {ExecutionModel}, The
+    product of pname:groupCountX, pname:groupCountY and pname:groupCountZ
+    must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_vertex_binding.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_vertex_binding.adoc
new file mode 100644
index 0000000..2305a91
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/draw_vertex_binding.adoc
@@ -0,0 +1,216 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to drawing commands that consume vertex binding state
+  * [[VUID-{refpage}-None-04007]]
+    All vertex input bindings accessed via vertex input variables declared
+    in the vertex shader entry point's interface must: have either valid or
+    dlink:VK_NULL_HANDLE buffers bound
+  * [[VUID-{refpage}-None-04008]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, all vertex input bindings accessed via vertex input variables
+    declared in the vertex shader entry point's interface must: not be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-{refpage}-None-02721]]
+    For a given vertex buffer binding, any attribute data fetched must: be
+    entirely contained within the corresponding vertex buffer binding, as
+    described in <<fxvertex-input>>
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-{refpage}-None-07842]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    then flink:vkCmdSetPrimitiveTopology must: have been called in the
+    current command buffer prior to this drawing command
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-primitiveTopology-03420]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then the
+    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopology
+    must: be of the same <<drawing-primitive-topology-class, topology
+    class>> as the pipeline
+    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-{refpage}-dynamicPrimitiveTopologyUnrestricted-07500]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the
+    <<limits-dynamicPrimitiveTopologyUnrestricted,
+    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_FALSE, then the
+    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopology
+    must: be of the same <<drawing-primitive-topology-class, topology
+    class>> as the pipeline
+    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-{refpage}-None-04912]]
+    If the bound graphics pipeline was created with both the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT and
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic states
+    enabled, then flink:vkCmdSetVertexInputEXT must: have been called in the
+    current command buffer prior to this draw command
+  * [[VUID-{refpage}-pStrides-04913]]
+    If the bound graphics pipeline was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
+    enabled, but not the ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic
+    state enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been
+    called in the current command buffer prior to this draw command, and the
+    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
+    be `NULL`
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifndef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-{refpage}-pStrides-04884]]
+    If the bound graphics pipeline was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
+    enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been called in
+    the current command buffer prior to this drawing command, and the
+    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
+    be `NULL`
+endif::VK_EXT_vertex_input_dynamic_state[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-04914]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    then flink:vkCmdSetVertexInputEXT must: have been called in the current
+    command buffer prior to this draw command
+  * [[VUID-{refpage}-Input-07939]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    then all variables with the code:Input storage class decorated with
+    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
+    must: contain a location in
+    slink:VkVertexInputAttributeDescription2EXT::pname:location
+  * [[VUID-{refpage}-Input-08734]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    then the numeric type associated with all code:Input variables of the
+    corresponding code:Location in the code:Vertex {ExecutionModel}
+    code:OpEntryPoint must: be the same as
+    slink:VkVertexInputAttributeDescription2EXT::pname:format
+  * [[VUID-{refpage}-format-08936]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    and slink:VkVertexInputAttributeDescription2EXT::pname:format has a
+    64-bit component, then the scalar width associated with all code:Input
+    variables of the corresponding code:Location in the code:Vertex
+    {ExecutionModel} code:OpEntryPoint must: be 64-bit
+  * [[VUID-{refpage}-format-08937]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    and the scalar width associated with a code:Location decorated
+    code:Input variable in the code:Vertex {ExecutionModel}
+    code:OpEntryPoint is 64-bit, then the corresponding
+    slink:VkVertexInputAttributeDescription2EXT::pname:format must: have a
+    64-bit component
+  * [[VUID-{refpage}-None-09203]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_vertex_input_dynamic_state[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+    and slink:VkVertexInputAttributeDescription2EXT::pname:format has a
+    64-bit component, then all code:Input variables at the corresponding
+    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
+    must: not use components that are not present in the format
+endif::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-{refpage}-None-04875]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage and the most recent call to fname:vkCmdSetPrimitiveTopology in the
+    current command buffer set pname:primitiveTopology to
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
+ifdef::VK_EXT_extended_dynamic_state2[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled
+endif::VK_EXT_extended_dynamic_state2[]
+    then flink:vkCmdSetPatchControlPointsEXT must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state2[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-04879]]
+    If
+ifdef::VK_EXT_shader_object[]
+    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
+    stage
+ifdef::VK_EXT_extended_dynamic_state2[or]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+    the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled
+endif::VK_EXT_extended_dynamic_state2[]
+    then flink:vkCmdSetPrimitiveRestartEnable must: have been called in the
+    current command buffer prior to this drawing command
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-stage-06481]]
+    The bound graphics pipeline must: not have been created with the
+    slink:VkPipelineShaderStageCreateInfo::pname:stage member of an element
+    of slink:VkGraphicsPipelineCreateInfo::pname:pStages set to
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
+ifdef::VK_EXT_shader_object[]
+  * [[VUID-{refpage}-None-08885]]
+    There must: be no shader object bound to either of the
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
+    stages
+endif::VK_EXT_shader_object[]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_feature_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_feature_common.adoc
new file mode 100644
index 0000000..b3df488
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_feature_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state2
+  * [[VUID-{refpage}-None-08970]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state2[]
+  ** the <<features-extendedDynamicState2, pname:extendedDynamicState2>>
+     feature is enabled
+endif::VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or
+     equal to Version 1.3
+endif::VK_VERSION_1_3[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_optional_feature_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_optional_feature_common.adoc
new file mode 100644
index 0000000..c240cef
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state2_optional_feature_common.adoc
@@ -0,0 +1,19 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by the optional (not promoted)
+// VK_EXT_extended_dynamic_state2 features.  Requires the requiredfeature
+// attribute to be set to the name of the required feature.
+
+  * [[VUID-{refpage}-None-09422]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state2[]
+  ** The <<features-{requiredfeature}, pname:{requiredfeature}>> feature is
+     enabled
+endif::VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_shader_object[]
+  ** The <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state3_feature_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state3_feature_common.adoc
new file mode 100644
index 0000000..45ba966
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state3_feature_common.adoc
@@ -0,0 +1,18 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state3.  Requires the
+// requiredfeature attribute to be set to the name of the required feature.
+
+  * [[VUID-{refpage}-None-09423]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state3[]
+  ** The <<features-{requiredfeature}, pname:{requiredfeature}>> feature is
+     enabled
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_shader_object[]
+  ** The <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state_feature_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state_feature_common.adoc
new file mode 100644
index 0000000..5cfe069
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/dynamic_state_feature_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>>
+     feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or
+     equal to Version 1.3
+endif::VK_VERSION_1_3[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/fine_sync_commands_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/fine_sync_commands_common.adoc
new file mode 100644
index 0000000..9e8f878
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/fine_sync_commands_common.adoc
@@ -0,0 +1,59 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdPipelineBarrier and vkCmdWaitEvents
+  * [[VUID-{refpage}-srcAccessMask-02815]]
+    The pname:srcAccessMask member of each element of pname:pMemoryBarriers
+    must: only include access flags that are supported by one or more of the
+    pipeline stages in pname:srcStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-{refpage}-dstAccessMask-02816]]
+    The pname:dstAccessMask member of each element of pname:pMemoryBarriers
+    must: only include access flags that are supported by one or more of the
+    pipeline stages in pname:dstStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-{refpage}-pBufferMemoryBarriers-02817]]
+    For any element of pname:pBufferMemoryBarriers, if its
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
+    equal, or if its pname:srcQueueFamilyIndex is the queue family index
+    that was used to create the command pool that pname:commandBuffer was
+    allocated from, then its pname:srcAccessMask member must: only contain
+    access flags that are supported by one or more of the pipeline stages in
+    pname:srcStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-{refpage}-pBufferMemoryBarriers-02818]]
+    For any element of pname:pBufferMemoryBarriers, if its
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
+    equal, or if its pname:dstQueueFamilyIndex is the queue family index
+    that was used to create the command pool that pname:commandBuffer was
+    allocated from, then its pname:dstAccessMask member must: only contain
+    access flags that are supported by one or more of the pipeline stages in
+    pname:dstStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-{refpage}-pImageMemoryBarriers-02819]]
+    For any element of pname:pImageMemoryBarriers, if its
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
+    equal, or if its pname:srcQueueFamilyIndex is the queue family index
+    that was used to create the command pool that pname:commandBuffer was
+    allocated from, then its pname:srcAccessMask member must: only contain
+    access flags that are supported by one or more of the pipeline stages in
+    pname:srcStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-{refpage}-pImageMemoryBarriers-02820]]
+    For any element of pname:pImageMemoryBarriers, if its
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members are
+    equal, or if its pname:dstQueueFamilyIndex is the queue family index
+    that was used to create the command pool that pname:commandBuffer was
+    allocated from, then its pname:dstAccessMask member must: only contain
+    access flags that are supported by one or more of the pipeline stages in
+    pname:dstStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/get_image_subresource_layout_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/get_image_subresource_layout_common.adoc
new file mode 100644
index 0000000..3556021
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/get_image_subresource_layout_common.adoc
@@ -0,0 +1,72 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkGetImageSubresourceLayout and vkGetImageSubresourceLayout2EXT
+  * [[VUID-{refpage}-aspectMask-00997]]
+    The pname:aspectMask member of pname:pSubresource must: only have a
+    single bit set
+  * [[VUID-{refpage}-mipLevel-01716]]
+    The pname:mipLevel member of pname:pSubresource must: be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-{refpage}-arrayLayer-01717]]
+    The pname:arrayLayer member of pname:pSubresource must: be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-format-08886]]
+    If pname:format of the pname:image is a color format, pname:tiling of
+    the pname:image is ename:VK_IMAGE_TILING_LINEAR or
+    ename:VK_IMAGE_TILING_OPTIMAL, and does not have a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar image
+    format>>, the pname:aspectMask member of pname:pSubresource must: be
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-format-08887]]
+    If pname:format of the pname:image is a color format and pname:tiling of
+    the pname:image is ename:VK_IMAGE_TILING_LINEAR or
+    ename:VK_IMAGE_TILING_OPTIMAL, the pname:aspectMask member of
+    pname:pSubresource must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-format-04462]]
+    If pname:format of the pname:image has a depth component, the
+    pname:aspectMask member of pname:pSubresource must: contain
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT
+  * [[VUID-{refpage}-format-04463]]
+    If pname:format of the pname:image has a stencil component, the
+    pname:aspectMask member of pname:pSubresource must: contain
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-{refpage}-format-04464]]
+    If pname:format of the pname:image does not contain a stencil or depth
+    component, the pname:aspectMask member of pname:pSubresource must: not
+    contain ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-tiling-08717]]
+    If the pname:tiling of the pname:image is ename:VK_IMAGE_TILING_LINEAR
+    and has a <<formats-requiring-sampler-ycbcr-conversion, multi-planar
+    image format>>, then the pname:aspectMask member of pname:pSubresource
+    must: be a single valid <<formats-planes-image-aspect,multi-planar
+    aspect mask>> bit
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-image-01895]]
+    If pname:image was created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    external memory handle type, then pname:image must: be bound to memory
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-{refpage}-tiling-02271]]
+    If the pname:tiling of the pname:image is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the pname:aspectMask
+    member of pname:pSubresource must: be
+    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` and the index _i_ must:
+    be less than the
+    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+    associated with the image's pname:format and
+    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier
+endif::VK_EXT_image_drm_format_modifier[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_blit_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_blit_common.adoc
new file mode 100644
index 0000000..226305a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_blit_common.adoc
@@ -0,0 +1,30 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageBlit* structures
+  * [[VUID-{refpage}-aspectMask-00238]]
+    The pname:aspectMask member of pname:srcSubresource and
+    pname:dstSubresource must: match
+  * [[VUID-{refpage}-layerCount-08800]]
+ifdef::VK_KHR_maintenance5[]
+    If neither of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource are ename:VK_REMAINING_ARRAY_LAYERS, the
+endif::VK_KHR_maintenance5[]
+ifndef::VK_KHR_maintenance5[The]
+    pname:layerCount members of pname:srcSubresource or pname:dstSubresource
+    must: match
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-maintenance5-08799]]
+    If the <<features-maintenance5, pname:maintenance5>> feature is not
+    enabled, the pname:layerCount member of pname:srcSubresource or
+    pname:dstSubresource must: not be ename:VK_REMAINING_ARRAY_LAYERS
+  * [[VUID-{refpage}-layerCount-08801]]
+    If one of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource is ename:VK_REMAINING_ARRAY_LAYERS, the other
+    member must: be either ename:VK_REMAINING_ARRAY_LAYERS or equal to the
+    pname:arrayLayers member of the slink:VkImageCreateInfo used to create
+    the image minus pname:baseArrayLayer
+endif::VK_KHR_maintenance5[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_copy_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_copy_common.adoc
new file mode 100644
index 0000000..de6ad74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_copy_common.adoc
@@ -0,0 +1,43 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageCopy* struct
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-apiVersion-07940]]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[If]
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+    the apiext:VK_KHR_sampler_ycbcr_conversion extension is not enabled,
+endif::VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[and]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[the]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[The]
+    pname:aspectMask member of pname:srcSubresource and pname:dstSubresource
+    must: match
+  * [[VUID-{refpage}-apiVersion-07941]]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[If]
+ifdef::VK_KHR_maintenance1[]
+    the apiext:VK_KHR_maintenance1 extension is not enabled,
+endif::VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[and]
+ifdef::VK_VERSION_1_1[]
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[the]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[The]
+    pname:layerCount member of pname:srcSubresource and pname:dstSubresource
+    must: match
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-extent-06668]]
+    pname:extent.width must: not be 0
+  * [[VUID-{refpage}-extent-06669]]
+    pname:extent.height must: not be 0
+  * [[VUID-{refpage}-extent-06670]]
+    pname:extent.depth must: not be 0
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_layout_transition_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_layout_transition_common.adoc
new file mode 100644
index 0000000..208e33c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_layout_transition_common.adoc
@@ -0,0 +1,84 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageMemoryBarrier* structs
+
+  * [[VUID-{refpage}-subresourceRange-01486]]
+    pname:subresourceRange.baseMipLevel must: be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-{refpage}-subresourceRange-01724]]
+    If pname:subresourceRange.levelCount is not
+    ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
+    {plus} pname:subresourceRange.levelCount# must: be less than or equal to
+    the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-{refpage}-subresourceRange-01488]]
+    pname:subresourceRange.baseArrayLayer must: be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-{refpage}-subresourceRange-01725]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+    [eq]#pname:subresourceRange.baseArrayLayer {plus}
+    pname:subresourceRange.layerCount# must: be less than or equal to the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-{refpage}-image-01932]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-image-02902]]
+    If pname:image has a color format, then the pname:aspectMask member of
+    pname:subresourceRange must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-image-09241]]
+    If pname:image has a color format that is single-plane, then the
+    pname:aspectMask member of pname:subresourceRange must: be
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-{refpage}-image-09242]]
+    If pname:image has a color format and is not _disjoint_, then the
+    pname:aspectMask member of pname:subresourceRange must: be
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-{refpage}-image-01672]]
+    If pname:image has a multi-planar format and the image is _disjoint_,
+    then the pname:aspectMask member of pname:subresourceRange must: include
+    at least one <<formats-planes-image-aspect,multi-planar aspect mask>>
+    bit or ename:VK_IMAGE_ASPECT_COLOR_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-image-01207]]
+    If pname:image has a depth/stencil format with both depth and stencil
+    components, then the pname:aspectMask member of pname:subresourceRange
+    must: include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-image-03319]]
+    If pname:image has a depth/stencil format with both depth and stencil
+    and the <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>> feature is enabled, then the
+    pname:aspectMask member of pname:subresourceRange must: include either
+    or both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-{refpage}-image-03320]]
+    If pname:image has a depth/stencil format with both depth and stencil
+    and the <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>> feature is not enabled, then the
+    pname:aspectMask member of pname:subresourceRange must: include both
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-{refpage}-aspectMask-08702]]
+    If the pname:aspectMask member of pname:subresourceRange includes
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT, pname:oldLayout and pname:newLayout
+    must: not be one of ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-aspectMask-08703]]
+    If the pname:aspectMask member of pname:subresourceRange includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, pname:oldLayout and pname:newLayout
+    must: not be one of ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_memory_barrier_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_memory_barrier_common.adoc
new file mode 100644
index 0000000..42dd2a9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_memory_barrier_common.adoc
@@ -0,0 +1,316 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageMemoryBarrier* structs
+  * [[VUID-{refpage}-oldLayout-01208]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then pname:image must:
+    have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-{refpage}-oldLayout-01209]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL then pname:image
+    must: have been created with
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-{refpage}-oldLayout-01210]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then pname:image
+    must: have been created with
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-{refpage}-oldLayout-01211]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then pname:image must:
+    have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-{refpage}-oldLayout-01212]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+  * [[VUID-{refpage}-oldLayout-01213]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+  * [[VUID-{refpage}-oldLayout-01197]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    pname:oldLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or the current
+    layout of the image subresources affected by the barrier
+  * [[VUID-{refpage}-newLayout-01198]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    pname:newLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-{refpage}-oldLayout-01658]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL then
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-{refpage}-oldLayout-01659]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL then
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04065]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL then pname:image must:
+    have been created with at least one of
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04066]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL then pname:image must:
+    have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+    set
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04067]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then pname:image must:
+    have been created with at least one of
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04068]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL then pname:image must:
+    have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+    set
+endif::VK_VERSION_1_2,VK_EXT_separate_depth_stencil_layouts[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-synchronization2-07793]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:oldLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+  * [[VUID-{refpage}-synchronization2-07794]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:newLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+  * [[VUID-{refpage}-srcQueueFamilyIndex-03938]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, pname:image must: have been
+    created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-{refpage}-srcQueueFamilyIndex-03939]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, pname:image must: have been
+    created with at least one of
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-oldLayout-02088]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR then
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR set
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-image-09117]]
+    If pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, pname:srcQueueFamilyIndex must:
+    be
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    ename:VK_QUEUE_FAMILY_EXTERNAL,
+ifdef::VK_EXT_queue_family_foreign[]
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT,
+endif::VK_EXT_queue_family_foreign[]
+    or
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    a valid queue family
+  * [[VUID-{refpage}-image-09118]]
+    If pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, pname:dstQueueFamilyIndex must:
+    be
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    ename:VK_QUEUE_FAMILY_EXTERNAL,
+ifdef::VK_EXT_queue_family_foreign[]
+    ename:VK_QUEUE_FAMILY_FOREIGN_EXT,
+endif::VK_EXT_queue_family_foreign[]
+    or
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    a valid queue family
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-04070]]
+    If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex,
+    at least one of pname:srcQueueFamilyIndex or pname:dstQueueFamilyIndex
+    must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+ifdef::VK_EXT_queue_family_foreign[]
+    or ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+endif::VK_EXT_queue_family_foreign[]
+  * [[VUID-{refpage}-None-09119]]
+    {empty}
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[If]
+ifdef::VK_KHR_external_memory[]
+    the apiext:VK_KHR_external_memory extension is not enabled,
+endif::VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1+VK_KHR_external_memory[and]
+ifdef::VK_VERSION_1_1[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is not greater than or equal to Version 1.1,
+endif::VK_VERSION_1_1[]
+    pname:srcQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+  * [[VUID-{refpage}-None-09120]]
+    {empty}
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[If]
+ifdef::VK_KHR_external_memory[]
+    the apiext:VK_KHR_external_memory extension is not enabled,
+endif::VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1+VK_KHR_external_memory[and]
+ifdef::VK_VERSION_1_1[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is not greater than or equal to Version 1.1,
+endif::VK_VERSION_1_1[]
+    pname:dstQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_EXTERNAL
+ifdef::VK_EXT_queue_family_foreign[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-09121]]
+    If the apiext:VK_EXT_queue_family_foreign extension is not enabled
+    pname:srcQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+  * [[VUID-{refpage}-dstQueueFamilyIndex-09122]]
+    If the apiext:VK_EXT_queue_family_foreign extension is not enabled
+    pname:dstQueueFamilyIndex must: not be ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+endif::VK_EXT_queue_family_foreign[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07120]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07121]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07122]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07123]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07124]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07125]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR then pname:image must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-{refpage}-srcQueueFamilyIndex-07006]]
+    If pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    and pname:oldLayout or pname:newLayout is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then
+    pname:image must: have been created with either the
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bits, and the
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bits, and the
+    ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit
+  * [[VUID-{refpage}-attachmentFeedbackLoopLayout-07313]]
+    If the <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>> feature is not enabled,
+    pname:newLayout must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_resolve_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_resolve_common.adoc
new file mode 100644
index 0000000..3caae54
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/image_resolve_common.adoc
@@ -0,0 +1,30 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageResolve* struct
+  * [[VUID-{refpage}-aspectMask-00266]]
+    The pname:aspectMask member of pname:srcSubresource and
+    pname:dstSubresource must: only contain ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-{refpage}-layerCount-08803]]
+ifdef::VK_KHR_maintenance5[]
+    If neither of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource are ename:VK_REMAINING_ARRAY_LAYERS, the
+endif::VK_KHR_maintenance5[]
+ifndef::VK_KHR_maintenance5[The]
+    pname:layerCount member of pname:srcSubresource and pname:dstSubresource
+    must: match
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-{refpage}-maintenance5-08802]]
+    If the <<features-maintenance5, pname:maintenance5>> feature is not
+    enabled, the pname:layerCount member of pname:srcSubresource or
+    pname:dstSubresource must: not be ename:VK_REMAINING_ARRAY_LAYERS
+  * [[VUID-{refpage}-layerCount-08804]]
+    If one of the pname:layerCount members of pname:srcSubresource or
+    pname:dstSubresource is ename:VK_REMAINING_ARRAY_LAYERS, the other
+    member must: be either ename:VK_REMAINING_ARRAY_LAYERS or equal to the
+    pname:arrayLayers member of the slink:VkImageCreateInfo used to create
+    the image minus pname:baseArrayLayer
+endif::VK_KHR_maintenance5[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_combined_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_combined_common.adoc
new file mode 100644
index 0000000..8cca274
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_combined_common.adoc
@@ -0,0 +1,16 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to creating objects
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-{uniqifier}-device-05089]]
+    The number of {combinedobjectnameplural} currently allocated from
+    pname:device across all slink:{combinedparentobject} objects plus
+    {combinedobjectcount} must: be less than or equal to the total number of
+    {combinedobjectnameplural} requested via
+    slink:VkDeviceObjectReservationCreateInfo::pname:{combinedobjectnamecamelcase}RequestCount
+    specified when pname:device was created
+endif::VKSC_VERSION_1_0[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_common.adoc
new file mode 100644
index 0000000..cf018bd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/memory_reservation_request_count_common.adoc
@@ -0,0 +1,15 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to creating objects
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-device-05068]]
+    The number of {objectnameplural} currently allocated from pname:device
+    plus {objectcount} must: be less than or equal to the total number of
+    {objectnameplural} requested via
+    slink:VkDeviceObjectReservationCreateInfo::pname:{objectnamecamelcase}RequestCount
+    specified when pname:device was created
+endif::VKSC_VERSION_1_0[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/no_dynamic_allocations_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/no_dynamic_allocations_common.adoc
new file mode 100644
index 0000000..838685d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/no_dynamic_allocations_common.adoc
@@ -0,0 +1,13 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common include
+ifdef::VKSC_VERSION_1_0[]
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::pname:deviceNoDynamicHostAllocations
+is ename:VK_TRUE, fname:{refpage} must: not return
+ename:VK_ERROR_OUT_OF_HOST_MEMORY.
+endif::VKSC_VERSION_1_0[]
+
+// Common include
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/performance_query_begin_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/performance_query_begin_common.adoc
new file mode 100644
index 0000000..0ea273a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/performance_query_begin_common.adoc
@@ -0,0 +1,47 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all drawing commands
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-{refpage}-queryPool-07289]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then the
+    slink:VkQueryPoolPerformanceCreateInfoKHR::pname:queueFamilyIndex
+    pname:queryPool was created with must: equal the queue family index of
+    the sname:VkCommandPool that pname:commandBuffer was allocated from
+  * [[VUID-{refpage}-queryPool-03223]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the <<profiling-lock,
+    profiling lock>> must: have been held before flink:vkBeginCommandBuffer
+    was called on pname:commandBuffer
+  * [[VUID-{refpage}-queryPool-03224]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used
+    to create pname:queryPool was
+    ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin
+    must: be the first recorded command in pname:commandBuffer
+  * [[VUID-{refpage}-queryPool-03225]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used
+    to create pname:queryPool was
+    ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the begin command
+    must: not be recorded within a render pass instance
+  * [[VUID-{refpage}-queryPool-03226]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and another query pool with a
+    pname:queryType ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR has been used
+    within pname:commandBuffer, its parent primary command buffer or
+    secondary command buffer recorded within the same parent primary command
+    buffer as pname:commandBuffer, the
+    <<features-performanceCounterMultipleQueryPools,
+    pname:performanceCounterMultipleQueryPools>> feature must: be enabled
+  * [[VUID-{refpage}-None-02863]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must: not be
+    recorded in a command buffer that, either directly or through secondary
+    command buffers, also contains a fname:vkCmdResetQueryPool command
+    affecting the same query
+endif::VK_KHR_performance_query[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_barrier_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_barrier_common.adoc
new file mode 100644
index 0000000..10fe328
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_barrier_common.adoc
@@ -0,0 +1,109 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdPipelineBarrier* commands
+ifndef::VK_KHR_multiview,VK_VERSION_1_1[]
+  * [[VUID-{refpage}-pDependencies-02285]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, the render pass must: have been created with
+    at least one subpass dependency that expresses a dependency from the
+    current subpass to itself, does not include
+    ename:VK_DEPENDENCY_BY_REGION_BIT if this command does not, and has
+    <<synchronization-dependencies-scopes, synchronization scopes>> and
+    <<synchronization-dependencies-access-scopes, access scopes>> that are
+    all supersets of the scopes defined in this command
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-07889]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, the render pass must: have been created with
+    at least one subpass dependency that expresses a dependency from the
+    current subpass to itself, does not include
+    ename:VK_DEPENDENCY_BY_REGION_BIT if this command does not, does not
+    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT if this command does not, and
+    has <<synchronization-dependencies-scopes, synchronization scopes>> and
+    <<synchronization-dependencies-access-scopes, access scopes>> that are
+    all supersets of the scopes defined in this command
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+  * [[VUID-{refpage}-bufferMemoryBarrierCount-01178]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, it must: not include any buffer memory
+    barriers
+  * [[VUID-{refpage}-image-04073]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, the pname:image member of any image memory
+    barrier included in this command must: be an attachment used in the
+    current subpass both as an input attachment, and as either a color,
+ifdef::VK_ANDROID_external_format_resolve[]
+    color resolve,
+endif::VK_ANDROID_external_format_resolve[]
+    or depth/stencil attachment
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-{refpage}-image-09373]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, and the pname:image member of any image
+    memory barrier is a color resolve attachment, the corresponding color
+    attachment must: be ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-{refpage}-image-09374]]
+    If fname:{refpage} is called within a render pass instance using a
+    slink:VkRenderPass object, and the pname:image member of any image
+    memory barrier is a color resolve attachment, it must: have been created
+    with a non-zero slink:VkExternalFormatANDROID::pname:externalFormat
+    value
+endif::VK_ANDROID_external_format_resolve[]
+  * [[VUID-{refpage}-oldLayout-01181]]
+    If fname:{refpage} is called within a render pass instance, the
+    pname:oldLayout and pname:newLayout members of any image memory barrier
+    included in this command must: be equal
+  * [[VUID-{refpage}-srcQueueFamilyIndex-01182]]
+    If fname:{refpage} is called within a render pass instance, the
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members of any
+    memory barrier included in this command must: be equal
+  * [[VUID-{refpage}-None-07890]]
+    If fname:{refpage} is called within a render pass instance, and the
+    source stage masks of any memory barriers include
+    <<synchronization-framebuffer-regions, framebuffer-space stages>>,
+    destination stage masks of all memory barriers must: only include
+    <<synchronization-framebuffer-regions, framebuffer-space stages>>
+  * [[VUID-{refpage}-dependencyFlags-07891]]
+    If fname:{refpage} is called within a render pass instance, and and the
+    source stage masks of any memory barriers include
+    <<synchronization-framebuffer-regions, framebuffer-space stages>>, then
+    pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT
+  * [[VUID-{refpage}-None-07892]]
+    If fname:{refpage} is called within a render pass instance, the source
+    and destination stage masks of any memory barriers must: only include
+    graphics pipeline stages
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-{refpage}-dependencyFlags-01186]]
+    If fname:{refpage} is called outside of a render pass instance, the
+    dependency flags must: not include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+  * [[VUID-{refpage}-None-07893]]
+    If fname:{refpage} is called inside a render pass instance, and there is
+    more than one view in the current subpass, dependency flags must:
+    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-{refpage}-shaderTileImageColorReadAccess-08718]]
+    If fname:{refpage} is called within a render pass instance
+ifdef::VK_EXT_shader_tile_image[]
+    and none of the <<features-shaderTileImageColorReadAccess,
+    pname:shaderTileImageColorReadAccess>>,
+    <<features-shaderTileImageDepthReadAccess,
+    pname:shaderTileImageDepthReadAccess>>,
+    <<features-shaderTileImageStencilReadAccess,
+    pname:shaderTileImageStencilReadAccess>> features are enabled,
+endif::VK_EXT_shader_tile_image[]
+    the render pass must: not have been started with
+    flink:vkCmdBeginRendering
+ifdef::VK_EXT_shader_tile_image[]
+  * [[VUID-{refpage}-None-08719]]
+    If fname:{refpage} is called within a render pass instance started with
+    flink:vkCmdBeginRendering, it must: adhere to the restrictions in
+    <<synchronization-pipeline-barriers-explicit-renderpass-tileimage,
+    Explicit Render Pass Tile Image Access Synchronization>>
+endif::VK_EXT_shader_tile_image[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_create_info_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_create_info_common.adoc
new file mode 100644
index 0000000..739aac3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_create_info_common.adoc
@@ -0,0 +1,51 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to all pipeline creations
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-flags-07984]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
+    be a valid {pipelineType} sname:VkPipeline handle
+  * [[VUID-{refpage}-flags-07985]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
+    pname:basePipelineIndex must: be a valid index into the calling
+    command's pname:pCreateInfos parameter
+  * [[VUID-{refpage}-flags-07986]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, pname:basePipelineIndex must: be -1 or pname:basePipelineHandle
+    must: be dlink:VK_NULL_HANDLE
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-basePipelineHandle-05024]]
+    pname:basePipelineHandle must: be dlink:VK_NULL_HANDLE
+  * [[VUID-{refpage}-basePipelineIndex-05025]]
+    pname:basePipelineIndex must: be zero
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-{refpage}-layout-07987]]
+    If a push constant block is declared in a shader, a push constant range
+    in pname:layout must: match both the shader stage and range
+  * [[VUID-{refpage}-layout-07988]]
+    If a <<interfaces-resources,resource variables>> is declared in a
+    shader, a descriptor slot in pname:layout must: match the shader stage
+ifndef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-{refpage}-layout-07989]]
+    If a <<interfaces-resources,resource variables>> is declared in a
+    shader, a descriptor slot in pname:layout must: match the descriptor
+    type
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-{refpage}-layout-07990]]
+    If a <<interfaces-resources,resource variables>> is declared in a
+    shader, and the descriptor type is not
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, a descriptor slot in pname:layout
+    must: match the descriptor type
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-{refpage}-layout-07991]]
+    If a <<interfaces-resources,resource variables>> is declared in a shader
+    as an array, a descriptor slot in pname:layout must: match the
+    descriptor count
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_stage_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_stage_common.adoc
new file mode 100644
index 0000000..8d29d71
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/pipeline_stage_common.adoc
@@ -0,0 +1,107 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkPipelineStageFlagBits parameters
+  * [[VUID-{refpage}-pipelineStage-04074]]
+    pname:pipelineStage must: be a
+    <<synchronization-pipeline-stages-supported,valid stage>> for the queue
+    family that was used to create the command pool that pname:commandBuffer
+    was allocated from
+  * [[VUID-{refpage}-pipelineStage-04075]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-{refpage}-pipelineStage-04076]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-{refpage}-pipelineStage-04077]]
+    If the <<features-conditionalRendering, pname:conditionalRendering>>
+    feature is not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-pipelineStage-04078]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-pipelineStage-04079]]
+    If the <<features-transformFeedback, pname:transformFeedback>> feature
+    is not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-pipelineStage-04080]]
+    If the <<features-meshShader, pname:meshShader>> feature is not enabled,
+    pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT
+  * [[VUID-{refpage}-pipelineStage-07077]]
+    If the <<features-taskShader, pname:taskShader>> feature is not enabled,
+    pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+ifndef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-pipelineStage-04081]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-shadingRateImage-07314]]
+    If neither the <<features-shadingRateImage, pname:shadingRateImage>> or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> are enabled, pname:pipelineStage
+    must: not be
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+ifndef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-fragmentShadingRate-07315]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-synchronization2-06489]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_NONE
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-pipelineStage-06490]]
+    pname:pipelineStage must: not be ename:VK_PIPELINE_STAGE_NONE
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_NV_ray_tracing[]
+ifndef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-{refpage}-pipelineStage-07942]]
+    If the apiext:VK_NV_ray_tracing extension is not enabled,
+    pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-rayTracingPipeline-07943]]
+    If neither the apiext:VK_NV_ray_tracing extension or
+    <<features-rayTracingPipeline, pname:rayTracingPipeline feature>> are
+    enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+ifndef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-rayTracingPipeline-07944]]
+    If the <<features-rayTracingPipeline, pname:rayTracingPipeline feature>>
+    is not enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+endif::VK_KHR_ray_tracing_pipeline[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_begin_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_begin_common.adoc
new file mode 100644
index 0000000..e8b029a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_begin_common.adoc
@@ -0,0 +1,122 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdBeginQuery* commands
+  * [[VUID-{refpage}-None-00807]]
+    All queries used by the command must: be _unavailable_
+  * [[VUID-{refpage}-queryType-02804]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_TIMESTAMP
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-{refpage}-queryType-04728]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-{refpage}-queryType-06741]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR or
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
+endif::VK_KHR_ray_tracing_maintenance1[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-queryType-04729]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_VK_EXT_opacity_micromap[]
+  * [[VUID-{refpage}-queryType-08972]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT or
+    ename:VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT
+endif::VK_KHR_VK_EXT_opacity_micromap[]
+  * [[VUID-{refpage}-queryType-00800]]
+    If the <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>>
+    feature is not enabled, or the pname:queryType used to create
+    pname:queryPool was not ename:VK_QUERY_TYPE_OCCLUSION, pname:flags must:
+    not contain ename:VK_QUERY_CONTROL_PRECISE_BIT
+  * [[VUID-{refpage}-query-00802]]
+    pname:query must: be less than the number of queries in pname:queryPool
+  * [[VUID-{refpage}-queryType-00803]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_OCCLUSION, the sname:VkCommandPool that
+    pname:commandBuffer was allocated from must: support graphics operations
+  * [[VUID-{refpage}-queryType-00804]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
+    pname:pipelineStatistics indicate graphics operations, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+  * [[VUID-{refpage}-queryType-00805]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
+    pname:pipelineStatistics indicate compute operations, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support compute operations
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01885]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-{refpage}-query-00808]]
+    If called within a render pass instance, the sum of pname:query and the
+    number of bits set in the current subpass's view mask must: be less than
+    or equal to the number of queries in pname:queryPool
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_KHR_video_queue[]
+  * [[VUID-{refpage}-queryType-07126]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the sname:VkCommandPool
+    that pname:commandBuffer was allocated from must: have been created with
+    a queue family index that supports <<queries-result-status-only,result
+    status queries>>, as indicated by
+    slink:VkQueueFamilyQueryResultStatusPropertiesKHR::pname:queryResultStatusSupport
+  * [[VUID-{refpage}-None-07127]]
+    If there is a bound video session, then there must: be no
+    <<queries-operation-active,active>> queries
+  * [[VUID-{refpage}-queryType-07128]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and there is a bound video
+    session, then pname:queryPool must: have been created with a
+    slink:VkVideoProfileInfoKHR structure included in the pname:pNext chain
+    of slink:VkQueryPoolCreateInfo identical to the one specified in
+    slink:VkVideoSessionCreateInfoKHR::pname:pVideoProfile the bound video
+    session was created with
+endif::VK_KHR_video_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-{refpage}-queryType-04862]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support <<video-encode-operations, video encode operations>>
+  * [[VUID-{refpage}-queryType-07129]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must: be a
+    bound video session
+  * [[VUID-{refpage}-queryType-07130]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR and there is a bound video
+    session, then pname:queryPool must: have been created with a
+    slink:VkVideoProfileInfoKHR structure included in the pname:pNext chain
+    of slink:VkQueryPoolCreateInfo identical to the one specified in
+    slink:VkVideoSessionCreateInfoKHR::pname:pVideoProfile the bound video
+    session was created with
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-{refpage}-queryType-07131]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must: be no
+    bound video session
+endif::VK_KHR_video_encode_queue[]
+ifndef::VK_KHR_video_encode_queue[]
+  * [[VUID-{refpage}-queryType-07132]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then there must: be no bound
+    video session
+endif::VK_KHR_video_encode_queue[]
+endif::VK_KHR_video_queue[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_end_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_end_common.adoc
new file mode 100644
index 0000000..539e30f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/query_end_common.adoc
@@ -0,0 +1,15 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdEndQuery* commands
+  * [[VUID-{refpage}-None-07007]]
+    If called within a subpass of a render pass instance, the corresponding
+    fname:vkCmdBeginQuery* command must: have been called previously within
+    the same subpass
+  * [[VUID-{refpage}-None-07008]]
+    If called outside of a render pass instance, the corresponding
+    fname:vkCmdBeginQuery* command must: have been called outside of a
+    render pass instance
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.adoc
new file mode 100644
index 0000000..f465508
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.adoc
@@ -0,0 +1,29 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to VkRayTracingPipelineCreateInfo* structures
+  * [[VUID-{refpage}-pStages-03426]]
+    The shader code for the entry points identified by pname:pStages, and
+    the rest of the state identified by this structure must: adhere to the
+    pipeline linking rules described in the <<interfaces,Shader Interfaces>>
+    chapter
+  * [[VUID-{refpage}-layout-03428]]
+    The number of resources in pname:layout accessible to each shader stage
+    that is used by the pipeline must: be less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxPerStageResources
+ifdef::VK_NV_device_generated_commands[]
+  * [[VUID-{refpage}-flags-02904]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-{refpage}-pipelineCreationCacheControl-02905]]
+    If the <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_command_buffer_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_command_buffer_common.adoc
new file mode 100644
index 0000000..d654737
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_command_buffer_common.adoc
@@ -0,0 +1,21 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdResolveImage* command buffer
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-commandBuffer-01837]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:srcImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01838]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be a protected image
+  * [[VUID-{refpage}-commandBuffer-01839]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:dstImage must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_common.adoc
new file mode 100644
index 0000000..11f1995
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/resolve_image_common.adoc
@@ -0,0 +1,160 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdResolveImage* commands
+  * [[VUID-{refpage}-pRegions-00255]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcImage-00256]]
+    If pname:srcImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-srcImage-00257]]
+    pname:srcImage must: have a sample count equal to any valid sample count
+    value other than ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-dstImage-00258]]
+    If pname:dstImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00259]]
+    pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-srcImageLayout-00260]]
+    pname:srcImageLayout must: specify the layout of the image subresources
+    of pname:srcImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-srcImageLayout-01400]]
+    pname:srcImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-{refpage}-dstImageLayout-00262]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+  * [[VUID-{refpage}-dstImageLayout-01401]]
+    pname:dstImageLayout must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-{refpage}-dstImage-02003]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+  * [[VUID-{refpage}-linearColorAttachment-06519]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, the
+    <<resources-image-format-features,format features>> of pname:dstImage
+    must: contain ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+  * [[VUID-{refpage}-srcImage-01386]]
+    pname:srcImage and pname:dstImage must: have been created with the same
+    image format
+  * [[VUID-{refpage}-srcSubresource-01709]]
+    The pname:srcSubresource.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:srcImage was created
+  * [[VUID-{refpage}-dstSubresource-01710]]
+    The pname:dstSubresource.mipLevel member of each element of
+    pname:pRegions must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:dstImage was created
+  * [[VUID-{refpage}-srcSubresource-01711]]
+ifdef::VK_KHR_maintenance5[]
+    If pname:srcSubresource.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    [eq]#pname:srcSubresource.baseArrayLayer {plus}
+    pname:srcSubresource.layerCount# of each element of pname:pRegions must:
+    be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:srcImage was created
+  * [[VUID-{refpage}-dstSubresource-01712]]
+ifdef::VK_KHR_maintenance5[]
+    If pname:dstSubresource.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+endif::VK_KHR_maintenance5[]
+    [eq]#pname:dstSubresource.baseArrayLayer {plus}
+    pname:dstSubresource.layerCount# of each element of pname:pRegions must:
+    be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:dstImage was created
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-dstImage-02546]]
+    pname:dstImage and pname:srcImage must: not have been created with
+    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-srcImage-04446]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:srcSubresource.layerCount must: be `1`
+  * [[VUID-{refpage}-srcImage-04447]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_3D, then for each
+    element of pname:pRegions, pname:dstSubresource.baseArrayLayer must: be
+    `0` and pname:dstSubresource.layerCount must: be `1`
+  * [[VUID-{refpage}-srcOffset-00269]]
+    For each element of pname:pRegions, pname:srcOffset.x and
+    [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must: both be
+    greater than or equal to `0` and less than or equal to the width of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcOffset-00270]]
+    For each element of pname:pRegions, pname:srcOffset.y and
+    [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must: both be
+    greater than or equal to `0` and less than or equal to the height of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-00271]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:srcOffset.y must: be `0` and
+    pname:extent.height must: be `1`
+  * [[VUID-{refpage}-srcOffset-00272]]
+    For each element of pname:pRegions, pname:srcOffset.z and
+    [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-00273]]
+    If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:srcOffset.z must: be `0` and pname:extent.depth must: be `1`
+  * [[VUID-{refpage}-dstOffset-00274]]
+    For each element of pname:pRegions, pname:dstOffset.x and
+    [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must: both be
+    greater than or equal to `0` and less than or equal to the width of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstOffset-00275]]
+    For each element of pname:pRegions, pname:dstOffset.y and
+    [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must: both be
+    greater than or equal to `0` and less than or equal to the height of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstImage-00276]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:dstOffset.y must: be `0` and
+    pname:extent.height must: be `1`
+  * [[VUID-{refpage}-dstOffset-00277]]
+    For each element of pname:pRegions, pname:dstOffset.z and
+    [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstImage-00278]]
+    If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:dstOffset.z must: be `0` and pname:extent.depth must: be `1`
+  * [[VUID-{refpage}-srcImage-06762]]
+    pname:srcImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-06763]]
+    The <<resources-image-format-features,format features>> of
+    pname:srcImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-06764]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-06765]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/shader_create_spv_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/shader_create_spv_common.adoc
new file mode 100644
index 0000000..f2de1ef
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/shader_create_spv_common.adoc
@@ -0,0 +1,39 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to all creating of shaders using SPIR-V
+  * [[VUID-{refpage}-codeSize-08735]]
+    {prefixCondition} pname:codeSize must: be a multiple of 4
+  * [[VUID-{refpage}-pCode-08736]]
+     {prefixCondition} pname:pCode must: point to valid SPIR-V code,
+     formatted and packed as described by the <<spirv-spec,Khronos SPIR-V
+     Specification>>
+  * [[VUID-{refpage}-pCode-08737]]
+     {prefixCondition} pname:pCode must: adhere to the validation rules
+     described by the <<spirvenv-module-validation,Validation Rules within a
+     Module>> section of the <<spirvenv-capabilities,SPIR-V Environment>>
+     appendix
+  * [[VUID-{refpage}-pCode-08738]]
+     {prefixCondition} pname:pCode must: declare the code:Shader capability
+     for SPIR-V code
+  * [[VUID-{refpage}-pCode-08739]]
+     {prefixCondition} pname:pCode must: not declare any capability that is
+     not supported by the API, as described by the
+     <<spirvenv-module-validation,Capabilities>> section of the
+     <<spirvenv-capabilities,SPIR-V Environment>> appendix
+  * [[VUID-{refpage}-pCode-08740]]
+     {prefixCondition} and pname:pCode declares any of the capabilities
+     listed in the <<spirvenv-capabilities-table,SPIR-V Environment>>
+     appendix, one of the corresponding requirements must: be satisfied
+  * [[VUID-{refpage}-pCode-08741]]
+     {prefixCondition} pname:pCode must: not declare any SPIR-V extension
+     that is not supported by the API, as described by the
+     <<spirvenv-extensions,Extension>> section of the
+     <<spirvenv-capabilities,SPIR-V Environment>> appendix
+  * [[VUID-{refpage}-pCode-08742]]
+     {prefixCondition} and pname:pCode declares any of the SPIR-V extensions
+     listed in the <<spirvenv-extensions-table,SPIR-V Environment>>
+     appendix, one of the corresponding requirements must: be satisfied
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_2_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_2_common.adoc
new file mode 100644
index 0000000..9842f8c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_2_common.adoc
@@ -0,0 +1,105 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkPipelineStageFlags2 parameters
+// Set "stageMaskName" attribute to the name of the stage mask to validate
+  * [[VUID-{refpage}-{stageMaskName}-03929]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT
+  * [[VUID-{refpage}-{stageMaskName}-03930]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-{refpage}-{stageMaskName}-03931]]
+    If the <<features-conditionalRendering, pname:conditionalRendering>>
+    feature is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-{stageMaskName}-03932]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-{stageMaskName}-03933]]
+    If the <<features-transformFeedback, pname:transformFeedback>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-{stageMaskName}-03934]]
+    If the <<features-meshShader, pname:meshShader>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT
+  * [[VUID-{refpage}-{stageMaskName}-03935]]
+    If the <<features-taskShader, pname:taskShader>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+ifndef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-{stageMaskName}-04956]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-07316]]
+    If neither the <<features-shadingRateImage, pname:shadingRateImage>> or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> are enabled, pname:{stageMaskName}
+    must: not contain
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+ifndef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-07317]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-{refpage}-{stageMaskName}-04957]]
+    If the <<features-subpassShading, pname:subpassShading>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * [[VUID-{refpage}-{stageMaskName}-04995]]
+    If the <<features-invocationMask, pname:invocationMask>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_NV_ray_tracing[]
+ifndef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-{refpage}-{stageMaskName}-07945]]
+    If the apiext:VK_NV_ray_tracing extension is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{stageMaskName}-07946]]
+    If neither the apiext:VK_NV_ray_tracing extension or
+    <<features-rayTracingPipeline, pname:rayTracingPipeline feature>> are
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+ifndef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{stageMaskName}-07947]]
+    If the <<features-rayTracingPipeline, pname:rayTracingPipeline feature>>
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+endif::VK_KHR_ray_tracing_pipeline[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_common.adoc
new file mode 100644
index 0000000..bff912d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/stage_mask_common.adoc
@@ -0,0 +1,102 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkPipelineStageFlags parameters
+// Set "stageMaskName" attribute to the name of the stage mask to validate
+  * [[VUID-{refpage}-{stageMaskName}-04090]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-{refpage}-{stageMaskName}-04091]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-{refpage}-{stageMaskName}-04092]]
+    If the <<features-conditionalRendering, pname:conditionalRendering>>
+    feature is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-{stageMaskName}-04093]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-{refpage}-{stageMaskName}-04094]]
+    If the <<features-transformFeedback, pname:transformFeedback>> feature
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-{refpage}-{stageMaskName}-04095]]
+    If the <<features-meshShader, pname:meshShader>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT
+  * [[VUID-{refpage}-{stageMaskName}-04096]]
+    If the <<features-taskShader, pname:taskShader>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+ifndef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-{stageMaskName}-04097]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-07318]]
+    If neither the <<features-shadingRateImage, pname:shadingRateImage>> or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> are enabled, pname:{stageMaskName}
+    must: not contain
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+ifndef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-07319]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image[]
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-{stageMaskName}-03937]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:{stageMaskName} must: not be `0`
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-{stageMaskName}-04996]]
+    pname:{stageMaskName} must: not be `0`
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_NV_ray_tracing[]
+ifndef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-{refpage}-{stageMaskName}-07948]]
+    If the apiext:VK_NV_ray_tracing extension is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{stageMaskName}-07949]]
+    If neither the apiext:VK_NV_ray_tracing extension or
+    <<features-rayTracingPipeline, pname:rayTracingPipeline feature>> are
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+ifndef::VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{stageMaskName}-07950]]
+    If the <<features-rayTracingPipeline, pname:rayTracingPipeline feature>>
+    is not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_NV_ray_tracing[]
+endif::VK_KHR_ray_tracing_pipeline[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/subpass_description_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/subpass_description_common.adoc
new file mode 100644
index 0000000..fd6cdfa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/subpass_description_common.adoc
@@ -0,0 +1,77 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// Common Valid Usage
+// Common to subpass description structures
+  * [[VUID-{refpage}-attachment-06912]]
+    If the pname:attachment member of an element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-{refpage}-attachment-06913]]
+    If the pname:attachment member of an element of pname:pColorAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-attachment-06914]]
+    If the pname:attachment member of an element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED, its
+    pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-attachment-06915]]
+    If the pname:attachment member of pname:pDepthStencilAttachment is not
+    ename:VK_ATTACHMENT_UNUSED, ts pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-{refpage}-attachment-06916]]
+    If the pname:attachment member of an element of pname:pColorAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-{refpage}-attachment-06917]]
+    If the pname:attachment member of an element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED, its
+    pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-{refpage}-attachment-06918]]
+    If the pname:attachment member of an element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-{refpage}-attachment-06919]]
+    If the pname:attachment member of an element of pname:pColorAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-{refpage}-attachment-06920]]
+    If the pname:attachment member of an element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED, its
+    pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-attachment-06921]]
+    If the pname:attachment member of an element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR
+  * [[VUID-{refpage}-attachment-06922]]
+    If the pname:attachment member of an element of pname:pColorAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, its pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+  * [[VUID-{refpage}-attachment-06923]]
+    If the pname:attachment member of an element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED, its
+    pname:layout member must: not be
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_common.adoc
new file mode 100644
index 0000000..303d37d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_common.adoc
@@ -0,0 +1,16 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all VkPhysicalDevice commands accepting a
+// VkPhysicalDeviceSurfaceInfo2KHR param
+
+  * [[VUID-{refpage}-pSurfaceInfo-06520]]
+    pname:pSurfaceInfo->surface must: be a valid slink:VkSurfaceKHR handle
+  * [[VUID-{refpage}-pSurfaceInfo-06210]]
+    pname:pSurfaceInfo->surface must: be supported by pname:physicalDevice,
+    as reported by flink:vkGetPhysicalDeviceSurfaceSupportKHR or an
+    equivalent platform-specific mechanism
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_surfaceless_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_surfaceless_common.adoc
new file mode 100644
index 0000000..7f994b4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_info_physical_device_surfaceless_common.adoc
@@ -0,0 +1,24 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all VkPhysicalDevice commands accepting a
+// VkPhysicalDeviceSurfaceInfo2KHR param, which may also accept VK_NULL_HANDLE
+// as surface as part of VK_GOOGLE_surfaceless_query.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+  * [[VUID-{refpage}-pSurfaceInfo-06521]]
+    If the `apiext:VK_GOOGLE_surfaceless_query` extension is not enabled,
+    pname:pSurfaceInfo->surface must: be a valid slink:VkSurfaceKHR handle
+  * [[VUID-{refpage}-pSurfaceInfo-06522]]
+    If pname:pSurfaceInfo->surface is not dlink:VK_NULL_HANDLE, it must: be
+    supported by pname:physicalDevice, as reported by
+    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
+    platform-specific mechanism
+endif::VK_GOOGLE_surfaceless_query[]
+ifndef::VK_GOOGLE_surfaceless_query[]
+include::{chapters}/commonvalidity/surface_info_physical_device_common.adoc[]
+endif::VK_GOOGLE_surfaceless_query[]
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_common.adoc
new file mode 100644
index 0000000..437a70d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_common.adoc
@@ -0,0 +1,15 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all VkPhysicalDevice commands accepting a VkSurfaceKHR param
+
+  * [[VUID-{refpage}-surface-06523]]
+    pname:surface must: be a valid slink:VkSurfaceKHR handle
+  * [[VUID-{refpage}-surface-06211]]
+    pname:surface must: be supported by pname:physicalDevice, as reported by
+    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
+    platform-specific mechanism
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_surfaceless_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_surfaceless_common.adoc
new file mode 100644
index 0000000..1d873fe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/surface_physical_device_surfaceless_common.adoc
@@ -0,0 +1,23 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all VkPhysicalDevice commands accepting a VkSurfaceKHR param,
+// which may also accept VK_NULL_HANDLE as part of VK_GOOGLE_surfaceless_query.
+
+ifdef::VK_GOOGLE_surfaceless_query[]
+  * [[VUID-{refpage}-surface-06524]]
+    If the `apiext:VK_GOOGLE_surfaceless_query` extension is not enabled,
+    pname:surface must: be a valid slink:VkSurfaceKHR handle
+  * [[VUID-{refpage}-surface-06525]]
+    If pname:surface is not dlink:VK_NULL_HANDLE, it must: be supported by
+    pname:physicalDevice, as reported by
+    flink:vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent
+    platform-specific mechanism
+endif::VK_GOOGLE_surfaceless_query[]
+ifndef::VK_GOOGLE_surfaceless_query[]
+include::{chapters}/commonvalidity/surface_physical_device_common.adoc[]
+endif::VK_GOOGLE_surfaceless_query[]
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table.adoc
new file mode 100644
index 0000000..dfa949a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table.adoc
@@ -0,0 +1,120 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to KHR trace rays SBT commands/structures
+
+  * [[VUID-{refpage}-pRayGenShaderBindingTable-03680]]
+    If the buffer from which {rayGenShaderBindingTableAddress} was queried
+    is non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-pRayGenShaderBindingTable-03681]]
+    The buffer from which the {rayGenShaderBindingTableAddress} is queried
+    must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pRayGenShaderBindingTable-03682]]
+    {rayGenShaderBindingTableAddress} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-pMissShaderBindingTable-03683]]
+    If the buffer from which {missShaderBindingTableAddress} was queried is
+    non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-pMissShaderBindingTable-03684]]
+    The buffer from which the {missShaderBindingTableAddress} is queried
+    must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pMissShaderBindingTable-03685]]
+    {missShaderBindingTableAddress} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03686]]
+    {missShaderBindingTableStride} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04029]]
+    {missShaderBindingTableStride} must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
+  * [[VUID-{refpage}-pHitShaderBindingTable-03687]]
+    If the buffer from which {hitShaderBindingTableAddress} was queried is
+    non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-pHitShaderBindingTable-03688]]
+    The buffer from which the {hitShaderBindingTableAddress} is queried
+    must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pHitShaderBindingTable-03689]]
+    {hitShaderBindingTableAddress} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03690]]
+    {hitShaderBindingTableStride} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04035]]
+    {hitShaderBindingTableStride} must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
+  * [[VUID-{refpage}-pCallableShaderBindingTable-03691]]
+    If the buffer from which {callableShaderBindingTableAddress} was queried
+    is non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-pCallableShaderBindingTable-03692]]
+    The buffer from which the {callableShaderBindingTableAddress} is queried
+    must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pCallableShaderBindingTable-03693]]
+    {callableShaderBindingTableAddress} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03694]]
+    {callableShaderBindingTableStride} must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04041]]
+    {callableShaderBindingTableStride} must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
+  * [[VUID-{refpage}-flags-03696]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+    {hitShaderBindingTableAddress} must: not be zero
+  * [[VUID-{refpage}-flags-03697]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
+    {hitShaderBindingTableAddress} must: not be zero
+  * [[VUID-{refpage}-flags-03511]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the
+    shader group handle identified by {missShaderBindingTableAddress} must:
+    not be set to zero
+  * [[VUID-{refpage}-flags-03512]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
+    entries in the table identified by {hitShaderBindingTableAddress}
+    accessed as a result of this command in order to execute an any-hit
+    shader must: not be set to zero
+  * [[VUID-{refpage}-flags-03513]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+    entries in the table identified by {hitShaderBindingTableAddress}
+    accessed as a result of this command in order to execute a closest hit
+    shader must: not be set to zero
+  * [[VUID-{refpage}-flags-03514]]
+    If the currently bound ray tracing pipeline was created with pname:flags
+    that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
+    entries in the table identified by {hitShaderBindingTableAddress}
+    accessed as a result of this command in order to execute an intersection
+    shader must: not be set to zero
+  * [[VUID-{refpage}-pHitShaderBindingTable-04735]]
+    Any non-zero hit shader group entries in the table identified by
+    {hitShaderBindingTableAddress} accessed by this call from a geometry
+    with a pname:geometryType of ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR must:
+    have been created with
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR
+  * [[VUID-{refpage}-pHitShaderBindingTable-04736]]
+    Any non-zero hit shader group entries in the table identified by
+    {hitShaderBindingTableAddress} accessed by this call from a geometry
+    with a pname:geometryType of ename:VK_GEOMETRY_TYPE_AABBS_KHR must: have
+    been created with
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table_raygen_stride.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table_raygen_stride.adoc
new file mode 100644
index 0000000..2a3945f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_binding_table_raygen_stride.adoc
@@ -0,0 +1,13 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to KHR trace rays commands with non-indirect SBT
+
+  * [[VUID-{refpage}-size-04023]]
+    The pname:size member of pname:pRayGenShaderBindingTable must: be equal
+    to its pname:stride member
+
+// Common Valid Usage
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common.adoc
new file mode 100644
index 0000000..3bef44f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common.adoc
@@ -0,0 +1,13 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to trace rays commands
+
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+  * [[VUID-{refpage}-None-03429]]
+    Any shader group handle referenced by this call must: have been queried
+    from the currently bound ray tracing pipeline
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common_khr.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common_khr.adoc
new file mode 100644
index 0000000..e19d490
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_common_khr.adoc
@@ -0,0 +1,16 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to KHR trace rays commands
+
+  * [[VUID-{refpage}-maxPipelineRayRecursionDepth-03679]]
+    This command must: not cause a shader call instruction to be executed
+    from a shader invocation with a <<ray-tracing-recursion-depth, recursion
+    depth>> greater than the value of pname:maxPipelineRayRecursionDepth
+    used to create the bound ray tracing pipeline
+  * [[VUID-{refpage}-commandBuffer-03635]]
+    pname:commandBuffer must: not be a protected command buffer
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_indirect_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_indirect_common.adoc
new file mode 100644
index 0000000..102c255
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_indirect_common.adoc
@@ -0,0 +1,31 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to trace rays indirect commands
+
+  * [[VUID-{refpage}-indirectDeviceAddress-03632]]
+    If the buffer from which pname:indirectDeviceAddress was queried is
+    non-sparse then it must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-indirectDeviceAddress-03633]]
+    The buffer from which pname:indirectDeviceAddress was queried must: have
+    been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-{refpage}-indirectDeviceAddress-03634]]
+    pname:indirectDeviceAddress must: be a multiple of `4`
+  * [[VUID-{refpage}-indirectDeviceAddress-03636]]
+    All device addresses between pname:indirectDeviceAddress and
+    [eq]#pname:indirectDeviceAddress {plus} code:sizeof(sname:{cmdstruct}) -
+    1# must: be in the buffer device address range of the same buffer
+  * [[VUID-{refpage}-{feature}-03637]]
+    The <<features-{feature}, pname:{feature}>> feature must: be enabled
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-{refpage}-rayTracingMotionBlurPipelineTraceRaysIndirect-04951]]
+    If the bound ray tracing pipeline was created with
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+    sname:VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::pname:rayTracingMotionBlurPipelineTraceRaysIndirect
+    feature must: be enabled
+endif::VK_NV_ray_tracing_motion_blur[]
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_limits_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_limits_common.adoc
new file mode 100644
index 0000000..5cbeb5e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/trace_rays_limits_common.adoc
@@ -0,0 +1,25 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common limits for trace rays commands
+
+  * [[VUID-{refpage}-width-03638]]
+    pname:width must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]#
+  * [[VUID-{refpage}-height-03639]]
+    pname:height must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]#
+  * [[VUID-{refpage}-depth-03640]]
+    pname:depth must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]#
+  * [[VUID-{refpage}-width-03641]]
+    [eq]#pname:width {times} pname:height {times} pname:depth# must: be less
+    than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayDispatchInvocationCount
+
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_acceleration_structure_properties_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_acceleration_structure_properties_common.adoc
new file mode 100644
index 0000000..b68359e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_acceleration_structure_properties_common.adoc
@@ -0,0 +1,30 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to acceleration structure property query
+  * [[VUID-{refpage}-pAccelerationStructures-04964]]
+    All acceleration structures in pname:pAccelerationStructures must: have
+    been built prior to the execution of this command
+  * [[VUID-{refpage}-accelerationStructures-03431]]
+    All acceleration structures in pname:pAccelerationStructures must: have
+    been built with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if
+    pname:queryType is
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-{refpage}-queryType-06742]]
+    pname:queryType must: be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR,
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR,
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+endif::VK_KHR_ray_tracing_maintenance1[]
+ifndef::VK_KHR_ray_tracing_maintenance1[]
+  * [[VUID-{refpage}-queryType-03432]]
+    pname:queryType must: be
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or
+    ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+endif::VK_KHR_ray_tracing_maintenance1[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_micromap_properties_common.adoc b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_micromap_properties_common.adoc
new file mode 100644
index 0000000..4918d77
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/commonvalidity/write_micromap_properties_common.adoc
@@ -0,0 +1,17 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to micromap property query
+  * [[VUID-{refpage}-pMicromaps-07501]]
+    All micromaps in pname:pMicromaps must: have been constructed prior to
+    the execution of this command
+  * [[VUID-{refpage}-pMicromaps-07502]]
+    All micromaps in pname:pMicromaps must: have been constructed with
+    ename:VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT if pname:queryType is
+    ename:VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT
+  * [[VUID-{refpage}-queryType-07503]]
+    pname:queryType must: be ename:VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT
+    or ename:VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/copies.adoc b/codegen/vulkan/vulkan-docs-next/chapters/copies.adoc
new file mode 100644
index 0000000..cec09b1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/copies.adoc
@@ -0,0 +1,1883 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[copies]]
+= Copy Commands
+
+An application can: copy buffer and image data using several methods
+described in this chapter, depending on the type of data transfer.
+
+All copy commands are treated as "`transfer`" operations for the purposes of
+synchronization barriers.
+
+All copy commands that have a source format with an X component in its
+format description read undefined: values from those bits.
+
+All copy commands that have a destination format with an X component in its
+format description write undefined: values to those bits.
+
+
+[[copies-buffers]]
+== Copying Data Between Buffers
+
+[open,refpage='vkCmdCopyBuffer',desc='Copy data between buffer regions',type='protos']
+--
+:refpage: vkCmdCopyBuffer
+
+To copy data between buffer objects, call:
+
+include::{generated}/api/protos/vkCmdCopyBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcBuffer is the source buffer.
+  * pname:dstBuffer is the destination buffer.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferCopy structures
+    specifying the regions to copy.
+
+Each source region specified by pname:pRegions is copied from the source
+buffer to the destination region of the destination buffer.
+If any of the specified regions in pname:srcBuffer overlaps in memory with
+any of the specified regions in pname:dstBuffer, values read from those
+overlapping regions are undefined:.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBuffer.adoc[]
+--
+
+[open,refpage='VkBufferCopy',desc='Structure specifying a buffer copy operation',type='structs']
+--
+:refpage: VkBufferCopy
+
+The sname:VkBufferCopy structure is defined as:
+
+include::{generated}/api/structs/VkBufferCopy.adoc[]
+
+  * pname:srcOffset is the starting offset in bytes from the start of
+    pname:srcBuffer.
+  * pname:dstOffset is the starting offset in bytes from the start of
+    pname:dstBuffer.
+  * pname:size is the number of bytes to copy.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkBufferCopy.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+A more extensible version of the copy buffer command is defined below.
+
+[open,refpage='vkCmdCopyBuffer2',desc='Copy data between buffer regions',type='protos',alias='vkCmdCopyBuffer2KHR']
+--
+:refpage: vkCmdCopyBuffer2
+
+To copy data between buffer objects, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdCopyBuffer2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdCopyBuffer2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyBufferInfo is a pointer to a slink:VkCopyBufferInfo2
+    structure describing the copy parameters.
+
+Each source region specified by pname:pCopyBufferInfo->pRegions is copied
+from the source buffer to the destination region of the destination buffer.
+If any of the specified regions in pname:pCopyBufferInfo->srcBuffer overlaps
+in memory with any of the specified regions in
+pname:pCopyBufferInfo->dstBuffer, values read from those overlapping regions
+are undefined:.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBuffer2.adoc[]
+--
+
+[open,refpage='VkCopyBufferInfo2',desc='Structure specifying parameters of a buffer copy command',type='structs',alias='VkCopyBufferInfo2KHR']
+--
+:refpage: VkCopyBufferInfo2
+
+The sname:VkCopyBufferInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkCopyBufferInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCopyBufferInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcBuffer is the source buffer.
+  * pname:dstBuffer is the destination buffer.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferCopy2
+    structures specifying the regions to copy.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkCopyBufferInfo2.adoc[]
+--
+
+[open,refpage='VkBufferCopy2',desc='Structure specifying a buffer copy operation',type='structs',alias='VkBufferCopy2KHR']
+--
+:refpage: VkBufferCopy2
+
+The sname:VkBufferCopy2 structure is defined as:
+
+include::{generated}/api/structs/VkBufferCopy2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferCopy2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcOffset is the starting offset in bytes from the start of
+    pname:srcBuffer.
+  * pname:dstOffset is the starting offset in bytes from the start of
+    pname:dstBuffer.
+  * pname:size is the number of bytes to copy.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkBufferCopy2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+
+[[copies-images]]
+== Copying Data Between Images
+
+[open,refpage='vkCmdCopyImage',desc='Copy data between images',type='protos']
+--
+:refpage: vkCmdCopyImage
+
+To copy data between image objects, call:
+
+include::{generated}/api/protos/vkCmdCopyImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the current layout of the source image
+    subresource.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the current layout of the destination image
+    subresource.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkImageCopy structures
+    specifying the regions to copy.
+
+Each source region specified by pname:pRegions is copied from the source
+image to the destination region of the destination image.
+If any of the specified regions in pname:srcImage overlaps in memory with
+any of the specified regions in pname:dstImage, values read from those
+overlapping regions are undefined:.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+<<formats-requiring-sampler-ycbcr-conversion, Multi-planar images>> can:
+only be copied on a per-plane basis, and the subresources used in each
+region when copying to or from such images must: specify only one plane,
+though different regions can: specify different planes.
+When copying planes of multi-planar images, the format considered is the
+<<formats-compatible-planes, compatible format for that plane>>, rather than
+the format of the multi-planar image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+If the format of the destination image has a different
+<<formats-compatibility-classes,block extent>> than the source image (e.g.
+one is a compressed format), the offset and extent for each of the regions
+specified is <<formats-size-compatibility, scaled according to the block
+extents of each format>> to match in size.
+Copy regions for each image must: be aligned to a multiple of the texel
+block extent in each dimension, except at the edges of the image, where
+region extents must: match the edge of the image.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+Image data can: be copied between images with different image types.
+If one image is ename:VK_IMAGE_TYPE_3D and the other image is
+ename:VK_IMAGE_TYPE_2D with multiple layers, then each slice is copied to or
+from a different layer; pname:depth slices in the 3D image correspond to
+pname:layerCount layers in the 2D image, with an effective pname:depth of
+`1` used for the 2D image.
+ifndef::VK_KHR_maintenance5[]
+Other combinations of image types are disallowed.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+If <<features-maintenance5,pname:maintenance5>> is enabled, all other
+combinations are allowed and function as if 1D images are 2D images with a
+height of 1.
+Otherwise, other combinations of image types are disallowed.
+endif::VK_KHR_maintenance5[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_image_common.adoc[]
+
+:imageparam: srcImage
+:imagesubresource: srcSubresource
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+
+:imageparam: dstImage
+:imagesubresource: dstSubresource
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImage.adoc[]
+--
+
+[open,refpage='VkImageCopy',desc='Structure specifying an image copy operation',type='structs']
+--
+:refpage: VkImageCopy
+
+The sname:VkImageCopy structure is defined as:
+
+include::{generated}/api/structs/VkImageCopy.adoc[]
+
+  * pname:srcSubresource and pname:dstSubresource are
+    slink:VkImageSubresourceLayers structures specifying the image
+    subresources of the images used for the source and destination image
+    data, respectively.
+  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
+    and pname:z offsets in texels of the sub-regions of the source and
+    destination image data.
+  * pname:extent is the size in texels of the image to copy in pname:width,
+    pname:height and pname:depth.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageCopy.adoc[]
+--
+
+[open,refpage='VkImageSubresourceLayers',desc='Structure specifying an image subresource layers',type='structs']
+--
+The sname:VkImageSubresourceLayers structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresourceLayers.adoc[]
+
+  * pname:aspectMask is a combination of elink:VkImageAspectFlagBits,
+    selecting the color, depth and/or stencil aspects to be copied.
+  * pname:mipLevel is the mipmap level to copy
+  * pname:baseArrayLayer and pname:layerCount are the starting layer and
+    number of layers to copy.
+
+.Valid Usage
+****
+  * [[VUID-VkImageSubresourceLayers-aspectMask-00167]]
+    If pname:aspectMask contains ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
+    not contain either of ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-VkImageSubresourceLayers-aspectMask-00168]]
+    pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageSubresourceLayers-aspectMask-02247]]
+    pname:aspectMask must: not include
+    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
+endif::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageSubresourceLayers-layerCount-09243]]
+    {empty}
+ifdef::VK_KHR_maintenance5[]
+    If the <<features-maintenance5, pname:maintenance5>> feature is not
+    enabled,
+endif::VK_KHR_maintenance5[]
+    pname:layerCount must: not be ename:VK_REMAINING_ARRAY_LAYERS
+  * [[VUID-VkImageSubresourceLayers-layerCount-01700]]
+    If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, it must: be
+    greater than 0
+****
+
+include::{generated}/validity/structs/VkImageSubresourceLayers.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+A more extensible version of the copy image command is defined below.
+
+[open,refpage='vkCmdCopyImage2',desc='Copy data between images',type='protos',alias='vkCmdCopyImage2KHR']
+--
+:refpage: vkCmdCopyImage2
+
+To copy data between image objects, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdCopyImage2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdCopyImage2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyImageInfo is a pointer to a slink:VkCopyImageInfo2 structure
+    describing the copy parameters.
+
+This command is functionally identical to flink:vkCmdCopyImage, but includes
+extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImage2.adoc[]
+--
+
+
+[open,refpage='VkCopyImageInfo2',desc='Structure specifying parameters of an image copy command',type='structs',alias='VkCopyImageInfo2KHR']
+--
+:refpage: VkCopyImageInfo2
+
+The sname:VkCopyImageInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCopyImageInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the current layout of the source image
+    subresource.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the current layout of the destination image
+    subresource.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkImageCopy2 structures
+    specifying the regions to copy.
+
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_common.adoc[]
+
+:imageparam: srcImage
+:imagesubresource: srcSubresource
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+
+:imageparam: dstImage
+:imagesubresource: dstSubresource
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkCopyImageInfo2.adoc[]
+--
+
+[open,refpage='VkImageCopy2',desc='Structure specifying an image copy operation',type='structs',alias='VkImageCopy2KHR']
+--
+:refpage: VkImageCopy2
+
+The sname:VkImageCopy2 structure is defined as:
+
+include::{generated}/api/structs/VkImageCopy2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageCopy2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcSubresource and pname:dstSubresource are
+    slink:VkImageSubresourceLayers structures specifying the image
+    subresources of the images used for the source and destination image
+    data, respectively.
+  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
+    and pname:z offsets in texels of the sub-regions of the source and
+    destination image data.
+  * pname:extent is the size in texels of the image to copy in pname:width,
+    pname:height and pname:depth.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageCopy2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+
+[[copies-buffers-images]]
+== Copying Data Between Buffers and Images
+
+Data can: be copied between buffers and images, enabling applications to
+load and store data between images and user defined offsets in buffer
+memory.
+
+[[copies-buffers-images-addressing]]
+When copying between a buffer and an image, whole texel blocks are always
+copied; each texel block in the specified extent in the image to be copied
+will be written to a region in the buffer, specified according to the
+position of the texel block, and the <<formats-compatibility-classes,texel
+block extent>> and size of the format being copied.
+
+For a set of coordinates [eq]#(x,y,z,layer)#, where:
+
+  {empty}:: [eq]#x# is in the range [eq]#[pname:imageOffset.x / blockWidth,
+            {lceil}(pname:imageOffset.x {plus} pname:imageExtent.width) /
+            blockWidth{rceil})#,
+  {empty}:: [eq]#y# is in the range [eq]#[pname:imageOffset.y / blockHeight,
+            {lceil}(pname:imageOffset.y {plus} pname:imageExtent.height) /
+            blockHeight{rceil})#,
+  {empty}:: [eq]#z# is in the range [eq]#[pname:imageOffset.z / blockDepth,
+            {lceil}(pname:imageOffset.z {plus} pname:imageExtent.depth) /
+            blockDepth{rceil})#,
+  {empty}:: [eq]#layer# is in the range
+            [pname:imageSubresource.baseArrayLayer,
+            pname:imageSubresource.baseArrayLayer {plus}
+            pname:imageSubresource.layerCount),
+
+and where [eq]#blockWidth#, [eq]#blockHeight#, and [eq]#blockDepth# are the
+dimensions of the <<formats-compatibility-classes,texel block extent>> of
+the image's format.
+
+For each [eq]#(x,y,z,layer)# coordinate, texels in the image layer selected
+by [eq]#layer# are accessed in the following ranges:
+
+  {empty}:: [eq]#[x {times} blockWidth, max( (x {times} blockWidth) {plus}
+            blockWidth, imageWidth) )#
+  {empty}:: [eq]#[y {times} blockHeight, max( (y {times} blockHeight) {plus}
+            blockHeight, imageHeight) )#
+  {empty}:: [eq]#[z {times} blockDepth, max( (z {times} blockDepth) {plus}
+            blockDepth, imageDepth) )#
+
+where [eq]#imageWidth#, [eq]#imageHeight#, and [eq]#imageDepth# are the
+dimensions of the image subresource.
+
+For each [eq]#(x,y,z,layer)# coordinate, bytes in the buffer are accessed at
+offsets in the range [eq]#[texelOffset, texelOffset {plus} blockSize)#,
+where:
+
+  {empty}:: [eq]#texelOffset = pname:bufferOffset {plus} (x {times}
+            blockSize) {plus} (y {times} rowExtent) {plus} (z {times}
+            sliceExtent) + (layer {times} layerExtent)#
+  {empty}:: [eq]#blockSize# is the size of the block in bytes for the format
+  {empty}:: [eq]#rowExtent = max(pname:bufferRowLength,
+            {lceil}pname:imageExtent.width / blockWidth{rceil} {times}
+            blockSize)#
+  {empty}:: [eq]#sliceExtent = max(pname:bufferImageHeight,
+            pname:imageExtent.height {times} rowExtent)#
+  {empty}:: [eq]#layerExtent = pname:imageExtent.depth {times} sliceExtent#
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+[[copies-buffers-images-rotation-addressing]]
+If a rotation is specified by slink:VkCopyCommandTransformInfoQCOM, the 2D
+region of the image being addressed is rotated around the offset, modifying
+the range of [eq]#x# and [eq]#y# coordinates for the image address according
+to the specified elink:VkSurfaceTransformFlagBitsKHR:
+
+  * If ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR is specified, no rotation
+    is performed:
+      {empty}:: [eq]#x'# is in the same range as [eq]#x#
+      {empty}:: [eq]#y'# is in the same range as [eq]#y#
+      {empty}:: [eq]#blockWidth' = blockWidth#
+      {empty}:: [eq]#blockHeight' = blockHeight#
+      {empty}:: [eq]#imageWidth' = imageWidth#
+      {empty}:: [eq]#imageHeight' = imageHeight#
+  * If ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR is specified
+      {empty}:: [eq]#x'# is in the range [eq]#[{lceil}(pname:imageOffset.x
+                {minus} pname:imageExtent.height) / blockHeight{rceil},
+                pname:imageOffset.x {minus} image/ blockHeight)#
+      {empty}:: [eq]#y'# is in the range [eq]#[pname:imageOffset.y /
+                blockWidth, {lceil}(pname:imageOffset.y {plus}
+                pname:imageExtent.width) / blockWidth{rceil})#
+      {empty}:: [eq]#blockWidth' = blockHeight#
+      {empty}:: [eq]#blockHeight' = blockWidth#
+      {empty}:: [eq]#imageWidth' = imageHeight#
+      {empty}:: [eq]#imageHeight' = imageWidth#
+  * If ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR is specified:
+      {empty}:: [eq]#x'# is in the range [eq]#[{lceil}(pname:imageOffset.x
+                {minus} pname:imageExtent.width) / blockWidth{rceil},
+                pname:imageOffset.x / blockWidth)#,
+      {empty}:: [eq]#y'# is in the range [eq]#[{lceil}(pname:imageOffset.x
+                {plus} pname:imageExtent.height) / blockHeight{rceil},
+                pname:imageOffset.x / blockHeight)#,
+      {empty}:: [eq]#blockWidth' = blockWidth#
+      {empty}:: [eq]#blockHeight' = blockHeight#
+      {empty}:: [eq]#imageWidth' = imageWidth#
+      {empty}:: [eq]#imageHeight' = imageHeight#
+  * If ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR is specified:
+      {empty}:: [eq]#x# is in the range [eq]#[pname:imageOffset.x /
+                blockHeight, {lceil}(pname:imageOffset.x {plus}
+                pname:imageExtent.height) / blockHeight{rceil})#
+      {empty}:: [eq]#y# is in the range [eq]#[{lceil}(pname:imageOffset.y
+                {minus} pname:imageExtent.width) / blockWidth{rceil},
+                pname:imageOffset.y / blockWidth)#.
+      {empty}:: [eq]#blockWidth' = blockHeight#
+      {empty}:: [eq]#blockHeight' = blockWidth#
+      {empty}:: [eq]#imageWidth' = imageHeight#
+      {empty}:: [eq]#imageHeight' = imageWidth#
+
+When rotation is performed, for each [eq]#(x,y,z,layer)# coordinate, texels
+in the image layer selected by [eq]#layer# are instead accessed in the
+following ranges:
+
+  {empty}:: [eq]#[x' {times} blockWidth', max( (x' {times} blockWidth')
+            {plus} blockWidth', imageWidth') )#
+  {empty}:: [eq]#[y' {times} blockHeight', max( (y' {times} blockHeight')
+            {plus} blockHeight', imageHeight') )#
+  {empty}:: [eq]#[z' {times} blockDepth', max( (z' {times} blockDepth')
+            {plus} blockDepth', imageDepth') )#
+
+Buffer addressing calculations are unaffected by this rotation.
+endif::VK_QCOM_rotated_copy_commands[]
+
+[[copies-buffers-images-depth-stencil]]
+When copying between a buffer and the depth or stencil aspect of an image,
+data in the buffer is assumed to be laid out as separate planes rather than
+interleaved.
+Addressing calculations are thus performed for a different format than the
+base image, according to the aspect, as described in the following table:
+
+.Depth/Stencil Aspect Copy Table
+[width="95%",cols="1,1,1",options="header"]
+|====
+^| Base Format ^| Depth Aspect Format ^| Stencil Aspect Format
+^| ename:VK_FORMAT_D16_UNORM
+^| ename:VK_FORMAT_D16_UNORM
+^| -
+^| ename:VK_FORMAT_X8_D24_UNORM_PACK32
+^| ename:VK_FORMAT_X8_D24_UNORM_PACK32
+^| -
+^| ename:VK_FORMAT_D32_SFLOAT
+^| ename:VK_FORMAT_D32_SFLOAT
+^| -
+^| ename:VK_FORMAT_S8_UINT
+^| -
+^| ename:VK_FORMAT_S8_UINT
+^| ename:VK_FORMAT_D16_UNORM_S8_UINT
+^| ename:VK_FORMAT_D16_UNORM
+^| ename:VK_FORMAT_S8_UINT
+^| ename:VK_FORMAT_D24_UNORM_S8_UINT
+^| ename:VK_FORMAT_X8_D24_UNORM_PACK32
+^| ename:VK_FORMAT_S8_UINT
+^| ename:VK_FORMAT_D32_SFLOAT_S8_UINT
+^| ename:VK_FORMAT_D32_SFLOAT
+^| ename:VK_FORMAT_S8_UINT
+|====
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[copies-buffers-images-multi-planar]]
+When copying between a buffer and any plane of a
+<<formats-requiring-sampler-ycbcr-conversion, multi-planar image>>,
+addressing calculations are performed using the <<formats-compatible-planes,
+compatible format for that plane>>, rather than the format of the
+multi-planar image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Each texel block is copied from one resource to the other according to the
+above addressing equations.
+
+
+[open,refpage='vkCmdCopyBufferToImage',desc='Copy data from a buffer into an image',type='protos']
+--
+:refpage: vkCmdCopyBufferToImage
+
+To copy data from a buffer object to an image object, call:
+
+include::{generated}/api/protos/vkCmdCopyBufferToImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcBuffer is the source buffer.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the copy.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy
+    structures specifying the regions to copy.
+
+Each source region specified by pname:pRegions is copied from the source
+buffer to the destination region of the destination image according to the
+<<copies-buffers-images-addressing,addressing calculations>> for each
+resource.
+If any of the specified regions in pname:srcBuffer overlaps in memory with
+any of the specified regions in pname:dstImage, values read from those
+overlapping regions are undefined:.
+If any region accesses a depth aspect in pname:dstImage
+ifdef::VK_EXT_depth_range_unrestricted[]
+and the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled,
+endif::VK_EXT_depth_range_unrestricted[]
+values copied from pname:srcBuffer outside of the range [eq]#[0,1]# will be
+be written as undefined: values to the destination image.
+
+Copy regions for the image must: be aligned to a multiple of the texel block
+extent in each dimension, except at the edges of the image, where region
+extents must: match the edge of the image.
+
+:imageparam: dstImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+:regionsparam: pname:pRegions
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_buffer_to_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBufferToImage.adoc[]
+--
+
+[open,refpage='vkCmdCopyImageToBuffer',desc='Copy image data into a buffer',type='protos']
+--
+:refpage: vkCmdCopyImageToBuffer
+
+To copy data from an image object to a buffer object, call:
+
+include::{generated}/api/protos/vkCmdCopyImageToBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the copy.
+  * pname:dstBuffer is the destination buffer.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy
+    structures specifying the regions to copy.
+
+Each source region specified by pname:pRegions is copied from the source
+image to the destination region of the destination buffer according to the
+<<copies-buffers-images-addressing,addressing calculations>> for each
+resource.
+If any of the specified regions in pname:srcImage overlaps in memory with
+any of the specified regions in pname:dstBuffer, values read from those
+overlapping regions are undefined:.
+
+Copy regions for the image must: be aligned to a multiple of the texel block
+extent in each dimension, except at the edges of the image, where region
+extents must: match the edge of the image.
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+:regionsparam: pname:pRegions
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_no_rotation_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_image_to_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImageToBuffer.adoc[]
+--
+
+[open,refpage='VkBufferImageCopy',desc='Structure specifying a buffer image copy operation',type='structs']
+--
+:refpage: VkBufferImageCopy
+
+For both flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer, each
+element of pname:pRegions is a structure defined as:
+
+include::{generated}/api/structs/VkBufferImageCopy.adoc[]
+
+  * pname:bufferOffset is the offset in bytes from the start of the buffer
+    object where the image data is copied from or to.
+  * pname:bufferRowLength and pname:bufferImageHeight specify in texels a
+    subregion of a larger two- or three-dimensional image in buffer memory,
+    and control the addressing calculations.
+    If either of these values is zero, that aspect of the buffer memory is
+    considered to be tightly packed according to the pname:imageExtent.
+  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
+    specify the specific image subresources of the image used for the source
+    or destination image data.
+  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
+    in texels of the sub-region of the source or destination image data.
+  * pname:imageExtent is the size in texels of the image to copy in
+    pname:width, pname:height and pname:depth.
+
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_or_memory_image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkBufferImageCopy.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+More extensible versions of the commands to copy between buffers and images
+are defined below.
+
+[open,refpage='vkCmdCopyBufferToImage2',desc='Copy data from a buffer into an image',type='protos',alias='vkCmdCopyBufferToImage2KHR']
+--
+:refpage: vkCmdCopyBufferToImage2
+
+To copy data from a buffer object to an image object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdCopyBufferToImage2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdCopyBufferToImage2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyBufferToImageInfo is a pointer to a
+    slink:VkCopyBufferToImageInfo2 structure describing the copy parameters.
+
+This command is functionally identical to flink:vkCmdCopyBufferToImage, but
+includes extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+:regionsparam: pname:pCopyBufferToImageInfo->pRegions
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBufferToImage2.adoc[]
+--
+
+[open,refpage='VkCopyBufferToImageInfo2',desc='Structure specifying parameters of a buffer to image copy command',type='structs',alias='VkCopyBufferToImageInfo2KHR']
+--
+:refpage: VkCopyBufferToImageInfo2
+
+The sname:VkCopyBufferToImageInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkCopyBufferToImageInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCopyBufferToImageInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcBuffer is the source buffer.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the copy.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy2
+    structures specifying the regions to copy.
+
+:imageparam: dstImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+:regionsparam: pname:pRegions
+
+.Valid Usage
+****
+  * [[VUID-VkCopyBufferToImageInfo2-pRegions-04565]]
+    The image region specified by each element of pname:pRegions
+ifdef::VK_QCOM_rotated_copy_commands[]
+    that does not contain slink:VkCopyCommandTransformInfoQCOM in its
+    pname:pNext chain
+endif::VK_QCOM_rotated_copy_commands[]
+    must: be contained within the specified pname:imageSubresource of
+    pname:dstImage
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04554]]
+    If the image region specified by each element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, the
+    rotated destination region as described in
+    <<copies-buffers-images-rotation-addressing>> must: be contained within
+    pname:dstImage
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04555]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:dstImage must: have a 1x1x1 <<formats-compatibility-classes,texel
+    block extent>>
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06203]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:dstImage must: be of type ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-06204]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:dstImage must: not have a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
+endif::VK_QCOM_rotated_copy_commands[]
+include::{chapters}/commonvalidity/copy_buffer_to_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc[]
+  * [[VUID-VkCopyBufferToImageInfo2-pRegions-06223]]
+    For each element of pname:pRegions not containing
+    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    pname:imageOffset.x and [eq]#(pname:imageExtent.width {plus}
+    pname:imageOffset.x)# must: both be greater than or equal to `0` and
+    less than or equal to the width of the specified pname:imageSubresource
+    of pname:dstImage
+  * [[VUID-VkCopyBufferToImageInfo2-pRegions-06224]]
+    For each element of pname:pRegions not containing
+    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    pname:imageOffset.y and [eq]#(pname:imageExtent.height {plus}
+    pname:imageOffset.y)# must: both be greater than or equal to `0` and
+    less than or equal to the height of the specified pname:imageSubresource
+    of pname:dstImage
+****
+
+include::{generated}/validity/structs/VkCopyBufferToImageInfo2.adoc[]
+--
+
+[open,refpage='vkCmdCopyImageToBuffer2',desc='Copy image data into a buffer',type='protos',alias='vkCmdCopyImageToBuffer2KHR']
+--
+:refpage: vkCmdCopyImageToBuffer2
+
+To copy data from an image object to a buffer object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdCopyImageToBuffer2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdCopyImageToBuffer2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyImageToBufferInfo is a pointer to a
+    slink:VkCopyImageToBufferInfo2 structure describing the copy parameters.
+
+This command is functionally identical to flink:vkCmdCopyImageToBuffer, but
+includes extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+:regionsparam: pname:pCopyImageToBufferInfo->pRegions
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImageToBuffer2.adoc[]
+--
+
+[open,refpage='VkCopyImageToBufferInfo2',desc='Structure specifying parameters of an image to buffer copy command',type='structs',alias='VkCopyImageToBufferInfo2KHR']
+--
+:refpage: VkCopyImageToBufferInfo2
+
+The sname:VkCopyImageToBufferInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageToBufferInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkCopyImageToBufferInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the copy.
+  * pname:dstBuffer is the destination buffer.
+  * pname:regionCount is the number of regions to copy.
+  * pname:pRegions is a pointer to an array of slink:VkBufferImageCopy2
+    structures specifying the regions to copy.
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+:imageoffset: imageOffset
+:imageextent: imageExtent
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+:regionsparam: pname:pRegions
+
+.Valid Usage
+****
+  * [[VUID-VkCopyImageToBufferInfo2-pRegions-04566]]
+    The image region specified by each element of pname:pRegions
+ifdef::VK_QCOM_rotated_copy_commands[]
+    that does not contain slink:VkCopyCommandTransformInfoQCOM in its
+    pname:pNext chain
+endif::VK_QCOM_rotated_copy_commands[]
+    must: be contained within the specified pname:imageSubresource of
+    pname:srcImage
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04557]]
+    If the image region specified by each element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, the
+    rotated source region as described in
+    <<copies-buffers-images-rotation-addressing>> must: be contained within
+    pname:srcImage
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04558]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage must: have a 1x1x1 <<formats-compatibility-classes,texel
+    block extent>>
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-06205]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage must: be of type ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-06206]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage must: not have a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
+endif::VK_QCOM_rotated_copy_commands[]
+include::{chapters}/commonvalidity/copy_image_to_buffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_common.adoc[]
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_not_both_image_common.adoc[]
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_buffer_alignment_common.adoc[]
+  * [[VUID-VkCopyImageToBufferInfo2-imageOffset-00197]]
+    For each element of pname:pRegions not containing
+    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    pname:imageOffset.x and [eq]#(pname:imageExtent.width {plus}
+    pname:imageOffset.x)# must: both be greater than or equal to `0` and
+    less than or equal to the width of the specified pname:imageSubresource
+    of pname:srcImage
+  * [[VUID-VkCopyImageToBufferInfo2-imageOffset-00198]]
+    For each element of pname:pRegions not containing
+    sname:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    pname:imageOffset.y and [eq]#(pname:imageExtent.height {plus}
+    pname:imageOffset.y)# must: both be greater than or equal to `0` and
+    less than or equal to the height of the specified pname:imageSubresource
+    of pname:srcImage
+****
+
+include::{generated}/validity/structs/VkCopyImageToBufferInfo2.adoc[]
+--
+
+[open,refpage='VkBufferImageCopy2',desc='Structure specifying a buffer image copy operation',type='structs',alias='VkBufferImageCopy2KHR']
+--
+:refpage: VkBufferImageCopy2
+
+For both flink:vkCmdCopyBufferToImage2 and flink:vkCmdCopyImageToBuffer2,
+each element of pname:pRegions is a structure defined as:
+
+include::{generated}/api/structs/VkBufferImageCopy2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferImageCopy2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:bufferOffset is the offset in bytes from the start of the buffer
+    object where the image data is copied from or to.
+  * pname:bufferRowLength and pname:bufferImageHeight specify in texels a
+    subregion of a larger two- or three-dimensional image in buffer memory,
+    and control the addressing calculations.
+    If either of these values is zero, that aspect of the buffer memory is
+    considered to be tightly packed according to the pname:imageExtent.
+  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
+    specify the specific image subresources of the image used for the source
+    or destination image data.
+  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
+    in texels of the sub-region of the source or destination image data.
+  * pname:imageExtent is the size in texels of the image to copy in
+    pname:width, pname:height and pname:depth.
+
+This structure is functionally identical to slink:VkBufferImageCopy, but
+adds pname:sType and pname:pNext parameters, allowing it to be more easily
+extended.
+
+:bufferrowlength: bufferRowLength
+:bufferimageheight: bufferImageHeight
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_or_memory_image_copy_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkBufferImageCopy2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+[open,refpage='VkCopyCommandTransformInfoQCOM',desc='Structure describing transform parameters of rotated copy command',type='structs']
+--
+The sname:VkCopyCommandTransformInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkCopyCommandTransformInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
+    describing the transform to be applied.
+
+Including this structure in the pname:pNext chain of
+slink:VkBufferImageCopy2 defines a rotation to be performed when copying
+between an image and a buffer.
+Including this structure in the pname:pNext chain of slink:VkBlitImageInfo2
+defines a rotation to be performed when blitting between two images.
+If this structure is not specified in either case, the implementation
+behaves as if it was specified with a pname:transform equal to
+ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR.
+
+Specifying a transform for a copy between an image and a buffer
+<<copies-buffers-images-rotation-addressing, rotates the region accessed in
+the image around the offset>>.
+Specifying a transform for a blit performs a similar transform as described
+in <<copies-images-scaling-rotation, Image Blits with Scaling and
+Rotation>>.
+
+Rotations other than ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR can: only
+be specified for single-plane 2D images with a 1x1x1
+<<formats-compatibility-classes,texel block extent>>.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyCommandTransformInfoQCOM-transform-04560]]
+    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
+    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+****
+
+include::{generated}/validity/structs/VkCopyCommandTransformInfoQCOM.adoc[]
+--
+endif::VK_QCOM_rotated_copy_commands[]
+
+ifdef::VK_EXT_host_image_copy[]
+include::{chapters}/VK_EXT_host_image_copy/copies.adoc[]
+endif::VK_EXT_host_image_copy[]
+
+
+ifdef::VK_NV_copy_memory_indirect[]
+[[indirect-copies]]
+== Indirect Copies
+
+An application can use indirect copies when the copy parameters are not
+known during the command buffer creation time.
+
+[open,refpage='vkCmdCopyMemoryIndirectNV',desc='Copy data between memory regions',type='protos']
+--
+To copy data between two memory regions by specifying copy parameters
+indirectly in a buffer, call:
+
+include::{generated}/api/protos/vkCmdCopyMemoryIndirectNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:copyBufferAddress is the buffer address specifying the copy
+    parameters.
+    This buffer is laid out in memory as an array of
+    slink:VkCopyMemoryIndirectCommandNV structures.
+  * pname:copyCount is the number of copies to execute, and can be zero.
+  * pname:stride is the stride in bytes between successive sets of copy
+    parameters.
+
+Each region read from pname:copyBufferAddress is copied from the source
+region to the specified destination region.
+The results are undefined: if any of the source and destination regions
+overlap in memory.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMemoryIndirectNV-None-07653]]
+    The <<features-indirectCopy, pname:indirectCopy>> feature must: be
+    enabled
+  * [[VUID-vkCmdCopyMemoryIndirectNV-copyBufferAddress-07654]]
+    pname:copyBufferAddress must: be 4 byte aligned
+  * [[VUID-vkCmdCopyMemoryIndirectNV-stride-07655]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to sizeof(sname:VkCopyMemoryIndirectCommandNV)
+  * [[VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-07656]]
+    The slink:VkCommandPool that pname:commandBuffer was allocated from
+    must: support at least one of the
+    slink:VkPhysicalDeviceCopyMemoryIndirectPropertiesNV::pname:supportedQueues
+****
+
+include::{generated}/validity/protos/vkCmdCopyMemoryIndirectNV.adoc[]
+--
+
+[open,refpage='VkCopyMemoryIndirectCommandNV',desc='Structure specifying indirect memory region copy operation',type='structs']
+--
+The structure describing source and destination memory regions,
+sname:VkCopyMemoryIndirectCommandNV is defined as:
+
+include::{generated}/api/structs/VkCopyMemoryIndirectCommandNV.adoc[]
+
+  * pname:srcAddress is the starting address of the source device memory to
+    copy from.
+  * pname:dstAddress is the starting address of the destination device
+    memory to copy to.
+  * pname:size is the size of the copy in bytes.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMemoryIndirectCommandNV-srcAddress-07657]]
+    The pname:srcAddress must: be 4 byte aligned
+  * [[VUID-VkCopyMemoryIndirectCommandNV-dstAddress-07658]]
+    The pname:dstAddress must: be 4 byte aligned
+  * [[VUID-VkCopyMemoryIndirectCommandNV-size-07659]]
+    The pname:size must: be 4 byte aligned
+****
+
+include::{generated}/validity/structs/VkCopyMemoryIndirectCommandNV.adoc[]
+--
+
+[open,refpage='vkCmdCopyMemoryToImageIndirectNV',desc='Copy data from a memory region into an image',type='protos']
+--
+:refpage: vkCmdCopyMemoryToImageIndirectNV
+
+To copy data from a memory region to an image object by specifying copy
+parameters in a buffer, call:
+
+include::{generated}/api/protos/vkCmdCopyMemoryToImageIndirectNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:copyBufferAddress is the buffer address specifying the copy
+    parameters.
+    This buffer is laid out in memory as an array of
+    slink:VkCopyMemoryToImageIndirectCommandNV structures.
+  * pname:copyCount is the number of copies to execute, and can be zero.
+  * pname:stride is the byte stride between successive sets of copy
+    parameters.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the copy.
+  * pname:pImageSubresources is a pointer to an array of size
+    pname:copyCount of slink:VkImageSubresourceLayers used to specify the
+    specific image subresource of the destination image data for that copy.
+
+Each region in pname:copyBufferAddress is copied from the source memory
+region to an image region in the destination image.
+If the destination image is of type ename:VK_IMAGE_TYPE_3D, the starting
+slice and number of slices to copy are specified in
+pname:pImageSubresources::pname:baseArrayLayer and
+pname:pImageSubresources::pname:layerCount respectively.
+The copy must: be performed on a queue that supports indirect copy
+operations, see slink:VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.
+
+:imageparam: dstImage
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-None-07660]]
+    The <<features-indirectCopy, pname:indirectCopy>> feature must: be
+    enabled
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07661]]
+    pname:dstImage must: not be a protected image
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-aspectMask-07662]]
+    The pname:aspectMask member for every subresource in
+    pname:pImageSubresources must: only have a single bit set
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07663]]
+    The image region specified by each element in sname:copyBufferAddress
+    must: be a region that is contained within pname:dstImage
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07664]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07665]]
+    If pname:dstImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+include::{chapters}/commonvalidity/copy_anyimage_to_imageany_single_sampled_common.adoc[]
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImageLayout-07667]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage at the time this command is executed on a
+    sname:VkDevice
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImageLayout-07669]]
+    pname:dstImageLayout must: be
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-mipLevel-07670]]
+    The specified pname:mipLevel of each region must: be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:dstImage
+    was created
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-layerCount-09244]]
+    {empty}
+ifdef::VK_KHR_maintenance5[]
+    If the <<features-maintenance5, pname:maintenance5>> feature is not
+    enabled,
+endif::VK_KHR_maintenance5[]
+    pname:layerCount must: not be ename:VK_REMAINING_ARRAY_LAYERS
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-layerCount-08764]]
+    If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, the
+    specified pname:baseArrayLayer {plus} pname:layerCount of each region
+    must: be less than or equal to the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:dstImage was created
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-imageOffset-07672]]
+    The pname:imageOffset and pname:imageExtent members of each region must:
+    respect the image transfer granularity requirements of
+    pname:commandBuffer's command pool's queue family, as described in
+    slink:VkQueueFamilyProperties
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07673]]
+    pname:dstImage must: not have been created with pname:flags containing
+    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-07674]]
+    If the queue family used to create the slink:VkCommandPool which
+    pname:commandBuffer was allocated from does not support
+    ename:VK_QUEUE_GRAPHICS_BIT, for each region, the pname:aspectMask
+    member of pname:pImageSubresources must: not be
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-imageOffset-07675]]
+    For each region in sname:copyBufferAddress, pname:imageOffset.y and
+    [eq]#(pname:imageExtent.height {plus} pname:imageOffset.y)# must: both
+    be greater than or equal to `0` and less than or equal to the height of
+    the specified subresource
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-offset-07676]]
+    pname:offset must: be 4 byte aligned
+  * [[VUID-vkCmdCopyMemoryToImageIndirectNV-stride-07677]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to sizeof(sname:VkCopyMemoryToImageIndirectCommandNV)
+****
+
+include::{generated}/validity/protos/vkCmdCopyMemoryToImageIndirectNV.adoc[]
+--
+
+[open,refpage='VkCopyMemoryToImageIndirectCommandNV',desc='Structure specifying indirect buffer image copy operation',type='structs']
+--
+The sname:VkCopyMemoryToImageIndirectCommandNV is defined as:
+
+include::{generated}/api/structs/VkCopyMemoryToImageIndirectCommandNV.adoc[]
+
+  * pname:srcAddress is the starting address of the source device memory to
+    copy from.
+  * pname:bufferRowLength and pname:bufferImageHeight specify in texels a
+    subregion of a larger two- or three-dimensional image in buffer memory,
+    and control the addressing calculations.
+    If either of these values is zero, that aspect of the buffer memory is
+    considered to be tightly packed according to the pname:imageExtent.
+  * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
+    specify the specific image subresources of the image used for the
+    destination image data, which must: match the values specified in
+    pname:pImageSubresources parameter of
+    flink:vkCmdCopyMemoryToImageIndirectNV during command recording.
+  * pname:imageOffset selects the initial pname:x, pname:y, pname:z offsets
+    in texels of the sub-region of the destination image data.
+  * pname:imageExtent is the size in texels of the destination image in
+    pname:width, pname:height and pname:depth.
+
+.Valid Usage
+****
+  * [[VUID-VkCopyMemoryToImageIndirectCommandNV-srcAddress-07678]]
+    The pname:srcAddress must: be 4 byte aligned
+  * [[VUID-VkCopyMemoryToImageIndirectCommandNV-bufferRowLength-07679]]
+    pname:bufferRowLength must: be `0`, or greater than or equal to the
+    pname:width member of pname:imageExtent
+  * [[VUID-VkCopyMemoryToImageIndirectCommandNV-bufferImageHeight-07680]]
+    pname:bufferImageHeight must: be `0`, or greater than or equal to the
+    pname:height member of pname:imageExtent
+  * [[VUID-VkCopyMemoryToImageIndirectCommandNV-imageOffset-07681]]
+    pname:imageOffset must: specify a valid offset in the destination image
+  * [[VUID-VkCopyMemoryToImageIndirectCommandNV-imageExtent-07682]]
+    pname:imageExtent must: specify a valid region in the destination image
+    and can be `0`
+****
+
+include::{generated}/validity/structs/VkCopyMemoryToImageIndirectCommandNV.adoc[]
+--
+endif::VK_NV_copy_memory_indirect[]
+
+
+[[copies-imagescaling]]
+== Image Copies With Scaling
+
+[open,refpage='vkCmdBlitImage',desc='Copy regions of an image, potentially performing format conversion,',type='protos']
+--
+:refpage: vkCmdBlitImage
+
+To copy regions of a source image into a destination image, potentially
+performing format conversion, arbitrary scaling, and filtering, call:
+
+include::{generated}/api/protos/vkCmdBlitImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the blit.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the blit.
+  * pname:regionCount is the number of regions to blit.
+  * pname:pRegions is a pointer to an array of slink:VkImageBlit structures
+    specifying the regions to blit.
+  * pname:filter is a elink:VkFilter specifying the filter to apply if the
+    blits require scaling.
+
+fname:vkCmdBlitImage must: not be used for multisampled source or
+destination images.
+Use flink:vkCmdResolveImage for this purpose.
+
+As the sizes of the source and destination extents can: differ in any
+dimension, texels in the source extent are scaled and filtered to the
+destination extent.
+Scaling occurs via the following operations:
+
+  * For each destination texel, the integer coordinate of that texel is
+    converted to an unnormalized texture coordinate, using the effective
+    inverse of the equations described in
+    <<textures-unnormalized-to-integer, unnormalized to integer
+    conversion>>:
+  {empty}:: [eq]#u~base~ = i {plus} {onehalf}#
+  {empty}:: [eq]#v~base~ = j {plus} {onehalf}#
+  {empty}:: [eq]#w~base~ = k {plus} {onehalf}#
+  * These base coordinates are then offset by the first destination offset:
+  {empty}:: [eq]#u~offset~ = u~base~ - x~dst0~#
+  {empty}:: [eq]#v~offset~ = v~base~ - y~dst0~#
+  {empty}:: [eq]#w~offset~ = w~base~ - z~dst0~#
+  {empty}:: [eq]#a~offset~ = a - pname:baseArrayCount~dst~#
+  * The scale is determined from the source and destination regions, and
+    applied to the offset coordinates:
+  {empty}:: [eq]#scale~u~ = (x~src1~ - x~src0~) / (x~dst1~ - x~dst0~)#
+  {empty}:: [eq]#scale~v~ = (y~src1~ - y~src0~) / (y~dst1~ - y~dst0~)#
+  {empty}:: [eq]#scale~w~ = (z~src1~ - z~src0~) / (z~dst1~ - z~dst0~)#
+  {empty}:: [eq]#u~scaled~ = u~offset~ {times} scale~u~#
+  {empty}:: [eq]#v~scaled~ = v~offset~ {times} scale~v~#
+  {empty}:: [eq]#w~scaled~ = w~offset~ {times} scale~w~#
+  * Finally the source offset is added to the scaled coordinates, to
+    determine the final unnormalized coordinates used to sample from
+    pname:srcImage:
+  {empty}:: [eq]#u = u~scaled~ {plus} x~src0~#
+  {empty}:: [eq]#v = v~scaled~ {plus} y~src0~#
+  {empty}:: [eq]#w = w~scaled~ {plus} z~src0~#
+  {empty}:: [eq]#q = pname:mipLevel#
+  {empty}:: [eq]#a = a~offset~ {plus} pname:baseArrayCount~src~#
+
+These coordinates are used to sample from the source image, as described in
+<<textures, Image Operations chapter>>, with the filter mode equal to that
+of pname:filter, a mipmap mode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST and
+an address mode of ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+Implementations must: clamp at the edge of the source image, and may:
+additionally clamp to the edge of the source region.
+
+[NOTE]
+.Note
+====
+Due to allowable rounding errors in the generation of the source texture
+coordinates, it is not always possible to guarantee exactly which source
+texels will be sampled for a given blit.
+As rounding errors are implementation-dependent, the exact results of a
+blitting operation are also implementation-dependent.
+====
+
+Blits are done layer by layer starting with the pname:baseArrayLayer member
+of pname:srcSubresource for the source and pname:dstSubresource for the
+destination.
+pname:layerCount layers are blitted to the destination image.
+
+When blitting 3D textures, slices in the destination region bounded by
+pname:dstOffsets[0].z and pname:dstOffsets[1].z are sampled from slices in
+the source region bounded by pname:srcOffsets[0].z and
+pname:srcOffsets[1].z.
+If the pname:filter parameter is ename:VK_FILTER_LINEAR then the value
+sampled from the source image is taken by doing linear filtering using the
+interpolated *z* coordinate represented by *w* in the previous equations.
+If the pname:filter parameter is ename:VK_FILTER_NEAREST then the value
+sampled from the source image is taken from the single nearest slice, with
+an implementation-dependent arithmetic rounding mode.
+
+The following filtering and conversion rules apply:
+
+  * Integer formats can: only be converted to other integer formats with the
+    same signedness.
+  * No format conversion is supported between depth/stencil images.
+    The formats must: match.
+  * Format conversions on unorm, snorm, scaled and packed float formats of
+    the copied aspect of the image are performed by first converting the
+    pixels to float values.
+  * For sRGB source formats, nonlinear RGB values are converted to linear
+    representation prior to filtering.
+  * After filtering, the float values are first clamped and then cast to the
+    destination image format.
+    In case of sRGB destination format, linear RGB values are converted to
+    nonlinear representation before writing the pixel to the image.
+
+Signed and unsigned integers are converted by first clamping to the
+representable range of the destination format, then casting the value.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/blit_image_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/blit_image_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBlitImage.adoc[]
+--
+
+[open,refpage='VkImageBlit',desc='Structure specifying an image blit operation',type='structs']
+--
+:refpage: VkImageBlit
+
+The sname:VkImageBlit structure is defined as:
+
+include::{generated}/api/structs/VkImageBlit.adoc[]
+
+  * pname:srcSubresource is the subresource to blit from.
+  * pname:srcOffsets is a pointer to an array of two slink:VkOffset3D
+    structures specifying the bounds of the source region within
+    pname:srcSubresource.
+  * pname:dstSubresource is the subresource to blit into.
+  * pname:dstOffsets is a pointer to an array of two slink:VkOffset3D
+    structures specifying the bounds of the destination region within
+    pname:dstSubresource.
+
+For each element of the pname:pRegions array, a blit operation is performed
+for the specified source and destination regions.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_blit_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageBlit.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+A more extensible version of the blit image command is defined below.
+
+[open,refpage='vkCmdBlitImage2',desc='Copy regions of an image, potentially performing format conversion,',type='protos',alias='vkCmdBlitImage2KHR']
+--
+:refpage: vkCmdBlitImage2
+
+To copy regions of a source image into a destination image, potentially
+performing format conversion, arbitrary scaling, and filtering, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdBlitImage2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdBlitImage2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pBlitImageInfo is a pointer to a slink:VkBlitImageInfo2 structure
+    describing the blit parameters.
+
+This command is functionally identical to flink:vkCmdBlitImage, but includes
+extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/blit_image_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBlitImage2.adoc[]
+--
+
+[open,refpage='VkBlitImageInfo2',desc='Structure specifying parameters of blit image command',type='structs',alias='VkBlitImageInfo2KHR']
+--
+:refpage: VkBlitImageInfo2
+
+The sname:VkBlitImageInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkBlitImageInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBlitImageInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the blit.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the blit.
+  * pname:regionCount is the number of regions to blit.
+  * pname:pRegions is a pointer to an array of slink:VkImageBlit2 structures
+    specifying the regions to blit.
+  * pname:filter is a elink:VkFilter specifying the filter to apply if the
+    blits require scaling.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/blit_image_common.adoc[]
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkBlitImageInfo2-pRegions-04561]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage and pname:dstImage must: not be block-compressed images
+  * [[VUID-VkBlitImageInfo2KHR-pRegions-06207]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage must: be of type ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkBlitImageInfo2KHR-pRegions-06208]]
+    If any element of pname:pRegions contains
+    slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain, then
+    pname:srcImage must: not have a
+    <<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>
+endif::VK_QCOM_rotated_copy_commands[]
+ifdef::VK_QCOM_filter_cubic_weights[]
+  * [[VUID-VkBlitImageInfo2-filter-09204]]
+    If pname:filter is ename:VK_FILTER_CUBIC_EXT and if the
+    <<features-filter-cubic-weight-selection,selectableCubicWeights>>
+    feature is not enabled then the cubic weights must: be
+    ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
+endif::VK_QCOM_filter_cubic_weights[]
+****
+
+include::{generated}/validity/structs/VkBlitImageInfo2.adoc[]
+--
+
+ifdef::VK_QCOM_filter_cubic_weights[]
+
+If pname:filter is ename:VK_FILTER_CUBIC_EXT and if the pname:pNext chain of
+slink:VkBlitImageInfo2 includes a sname:VkBlitImageCubicWeightsInfoQCOM
+structure, then that structure specifies cubic weights are used in the blit.
+If that structure is not present, then cubic weights are considered to be
+ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM.
+
+[open,refpage='VkBlitImageCubicWeightsInfoQCOM',desc='Structure specifying image blit cubic weight info',type='structs',alias='VkImageBlit2KHR']
+--
+:refpage: VkBlitImageCubicWeightsInfoQCOM
+
+The sname:VkBlitImageCubicWeightsInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkBlitImageCubicWeightsInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:cubicWeights is a elink:VkCubicFilterWeightsQCOM value controlling
+    cubic filter weights for the blit.
+
+include::{generated}/validity/structs/VkBlitImageCubicWeightsInfoQCOM.adoc[]
+--
+
+endif::VK_QCOM_filter_cubic_weights[]
+
+
+[open,refpage='VkImageBlit2',desc='Structure specifying an image blit operation',type='structs',alias='VkImageBlit2KHR']
+--
+:refpage: VkImageBlit2
+
+The sname:VkImageBlit2 structure is defined as:
+
+include::{generated}/api/structs/VkImageBlit2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageBlit2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcSubresource is the subresource to blit from.
+  * pname:srcOffsets is a pointer to an array of two slink:VkOffset3D
+    structures specifying the bounds of the source region within
+    pname:srcSubresource.
+  * pname:dstSubresource is the subresource to blit into.
+  * pname:dstOffsets is a pointer to an array of two slink:VkOffset3D
+    structures specifying the bounds of the destination region within
+    pname:dstSubresource.
+
+For each element of the pname:pRegions array, a blit operation is performed
+for the specified source and destination regions.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_blit_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageBlit2.adoc[]
+--
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+For flink:vkCmdBlitImage2, each region copied can include a rotation.
+To specify a rotated region, add slink:VkCopyCommandTransformInfoQCOM to the
+pname:pNext chain of slink:VkImageBlit2.
+For each region with a rotation specified,
+<<copies-images-scaling-rotation,Image Blits with Scaling and Rotation>>
+specifies how coordinates are rotated prior to sampling from the source
+image.
+When rotation is specified, the source and destination images must: each be
+2D images, have a 1x1x1 <<formats-compatibility-classes,texel block
+extent>>, and only one plane.
+endif::VK_QCOM_rotated_copy_commands[]
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+include::{chapters}/VK_QCOM_rotated_copies/rotated_addressing_blits.adoc[]
+endif::VK_QCOM_rotated_copy_commands[]
+
+
+[[copies-resolve]]
+== Resolving Multisample Images
+
+[open,refpage='vkCmdResolveImage',desc='Resolve regions of an image',type='protos']
+--
+:refpage: vkCmdResolveImage
+
+To resolve a multisample color image to a non-multisample color image, call:
+
+include::{generated}/api/protos/vkCmdResolveImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the resolve.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the resolve.
+  * pname:regionCount is the number of regions to resolve.
+  * pname:pRegions is a pointer to an array of slink:VkImageResolve
+    structures specifying the regions to resolve.
+
+During the resolve the samples corresponding to each pixel location in the
+source are converted to a single sample before being written to the
+destination.
+If the source formats are floating-point or normalized types, the sample
+values for each pixel are resolved in an implementation-dependent manner.
+If the source formats are integer types, a single sample's value is selected
+for each pixel.
+
+pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y, and
+pname:z offsets in texels of the sub-regions of the source and destination
+image data.
+pname:extent is the size in texels of the source image to resolve in
+pname:width, pname:height and pname:depth.
+Each element of pname:pRegions must: be a region that is contained within
+its corresponding image.
+
+Resolves are done layer by layer starting with pname:baseArrayLayer member
+of pname:srcSubresource for the source and pname:dstSubresource for the
+destination.
+pname:layerCount layers are resolved to the destination image.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/resolve_image_command_buffer_common.adoc[]
+include::{chapters}/commonvalidity/resolve_image_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdResolveImage.adoc[]
+--
+
+[open,refpage='VkImageResolve',desc='Structure specifying an image resolve operation',type='structs']
+--
+:refpage: VkImageResolve
+
+The sname:VkImageResolve structure is defined as:
+
+include::{generated}/api/structs/VkImageResolve.adoc[]
+
+  * pname:srcSubresource and pname:dstSubresource are
+    slink:VkImageSubresourceLayers structures specifying the image
+    subresources of the images used for the source and destination image
+    data, respectively.
+    Resolve of depth/stencil images is not supported.
+  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
+    and pname:z offsets in texels of the sub-regions of the source and
+    destination image data.
+  * pname:extent is the size in texels of the source image to resolve in
+    pname:width, pname:height and pname:depth.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_resolve_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageResolve.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+A more extensible version of the resolve image command is defined below.
+
+[open,refpage='vkCmdResolveImage2',desc='Resolve regions of an image',type='protos',alias='vkCmdResolveImage2KHR']
+--
+:refpage: vkCmdResolveImage2
+
+To resolve a multisample image to a non-multisample image, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdResolveImage2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_copy_commands2[or the equivalent command]
+
+ifdef::VK_KHR_copy_commands2[]
+include::{generated}/api/protos/vkCmdResolveImage2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pResolveImageInfo is a pointer to a slink:VkResolveImageInfo2
+    structure describing the resolve parameters.
+
+This command is functionally identical to flink:vkCmdResolveImage, but
+includes extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/resolve_image_command_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdResolveImage2.adoc[]
+--
+
+[open,refpage='VkResolveImageInfo2',desc='Structure specifying parameters of resolve image command',type='structs',alias='VkResolveImageInfo2KHR']
+--
+:refpage: VkResolveImageInfo2
+
+The sname:VkResolveImageInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkResolveImageInfo2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkResolveImageInfo2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcImage is the source image.
+  * pname:srcImageLayout is the layout of the source image subresources for
+    the resolve.
+  * pname:dstImage is the destination image.
+  * pname:dstImageLayout is the layout of the destination image subresources
+    for the resolve.
+  * pname:regionCount is the number of regions to resolve.
+  * pname:pRegions is a pointer to an array of slink:VkImageResolve2
+    structures specifying the regions to resolve.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/resolve_image_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkResolveImageInfo2.adoc[]
+--
+
+[open,refpage='VkImageResolve2',desc='Structure specifying an image resolve operation',type='structs',alias='VkImageResolve2KHR']
+--
+:refpage: VkImageResolve2
+
+The sname:VkImageResolve2 structure is defined as:
+
+include::{generated}/api/structs/VkImageResolve2.adoc[]
+
+ifdef::VK_KHR_copy_commands2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageResolve2KHR.adoc[]
+endif::VK_KHR_copy_commands2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcSubresource and pname:dstSubresource are
+    slink:VkImageSubresourceLayers structures specifying the image
+    subresources of the images used for the source and destination image
+    data, respectively.
+    Resolve of depth/stencil images is not supported.
+  * pname:srcOffset and pname:dstOffset select the initial pname:x, pname:y,
+    and pname:z offsets in texels of the sub-regions of the source and
+    destination image data.
+  * pname:extent is the size in texels of the source image to resolve in
+    pname:width, pname:height and pname:depth.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_resolve_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkImageResolve2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+
+ifdef::VK_KHR_object_refresh[]
+include::{chapters}/VK_KHR_object_refresh/copies.adoc[]
+endif::VK_KHR_object_refresh[]
+
+ifdef::VK_AMD_buffer_marker[]
+include::{chapters}/VK_AMD_buffer_marker/copies.adoc[]
+endif::VK_AMD_buffer_marker[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/debugging.adoc b/codegen/vulkan/vulkan-docs-next/chapters/debugging.adoc
new file mode 100644
index 0000000..1e59856
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/debugging.adoc
@@ -0,0 +1,758 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[debugging]]
+= Debugging
+
+To aid developers in tracking down errors in the application's use of
+Vulkan, particularly in combination with an external debugger or profiler,
+_debugging extensions_ may be available.
+
+[open,refpage='VkObjectType',desc='Specify an enumeration to track object handle types',type='enums']
+--
+The elink:VkObjectType enumeration defines values, each of which corresponds
+to a specific Vulkan handle type.
+These values can: be used to associate debug information with a particular
+type of object through one or more extensions.
+
+include::{generated}/api/enums/VkObjectType.adoc[]
+
+[[debugging-object-types]]
+.`VkObjectType` and Vulkan Handle Relationship
+[width="80%",cols="<35,<23",options="header"]
+|====
+| elink:VkObjectType                         | Vulkan Handle Type
+| ename:VK_OBJECT_TYPE_UNKNOWN               | Unknown/Undefined Handle
+| ename:VK_OBJECT_TYPE_INSTANCE              | slink:VkInstance
+| ename:VK_OBJECT_TYPE_PHYSICAL_DEVICE       | slink:VkPhysicalDevice
+| ename:VK_OBJECT_TYPE_DEVICE                | slink:VkDevice
+| ename:VK_OBJECT_TYPE_QUEUE                 | slink:VkQueue
+| ename:VK_OBJECT_TYPE_SEMAPHORE             | slink:VkSemaphore
+| ename:VK_OBJECT_TYPE_COMMAND_BUFFER        | slink:VkCommandBuffer
+| ename:VK_OBJECT_TYPE_FENCE                 | slink:VkFence
+| ename:VK_OBJECT_TYPE_DEVICE_MEMORY         | slink:VkDeviceMemory
+| ename:VK_OBJECT_TYPE_BUFFER                | slink:VkBuffer
+| ename:VK_OBJECT_TYPE_IMAGE                 | slink:VkImage
+| ename:VK_OBJECT_TYPE_EVENT                 | slink:VkEvent
+| ename:VK_OBJECT_TYPE_QUERY_POOL            | slink:VkQueryPool
+| ename:VK_OBJECT_TYPE_BUFFER_VIEW           | slink:VkBufferView
+| ename:VK_OBJECT_TYPE_IMAGE_VIEW            | slink:VkImageView
+ifndef::VKSC_VERSION_1_0[]
+| ename:VK_OBJECT_TYPE_SHADER_MODULE         | slink:VkShaderModule
+endif::VKSC_VERSION_1_0[]
+| ename:VK_OBJECT_TYPE_PIPELINE_CACHE        | slink:VkPipelineCache
+| ename:VK_OBJECT_TYPE_PIPELINE_LAYOUT       | slink:VkPipelineLayout
+| ename:VK_OBJECT_TYPE_RENDER_PASS           | slink:VkRenderPass
+| ename:VK_OBJECT_TYPE_PIPELINE              | slink:VkPipeline
+| ename:VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT | slink:VkDescriptorSetLayout
+| ename:VK_OBJECT_TYPE_SAMPLER               | slink:VkSampler
+| ename:VK_OBJECT_TYPE_DESCRIPTOR_POOL       | slink:VkDescriptorPool
+| ename:VK_OBJECT_TYPE_DESCRIPTOR_SET        | slink:VkDescriptorSet
+| ename:VK_OBJECT_TYPE_FRAMEBUFFER           | slink:VkFramebuffer
+| ename:VK_OBJECT_TYPE_COMMAND_POOL          | slink:VkCommandPool
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| ename:VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION | slink:VkSamplerYcbcrConversion
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+ifndef::VKSC_VERSION_1_0[]
+| ename:VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE | slink:VkDescriptorUpdateTemplate
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+| ename:VK_OBJECT_TYPE_PRIVATE_DATA_SLOT | slink:VkPrivateDataSlot
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+ifdef::VK_KHR_surface[]
+| ename:VK_OBJECT_TYPE_SURFACE_KHR           | slink:VkSurfaceKHR
+endif::VK_KHR_surface[]
+ifdef::VK_KHR_swapchain[]
+| ename:VK_OBJECT_TYPE_SWAPCHAIN_KHR         | slink:VkSwapchainKHR
+endif::VK_KHR_swapchain[]
+ifdef::VK_KHR_display[]
+| ename:VK_OBJECT_TYPE_DISPLAY_KHR           | slink:VkDisplayKHR
+| ename:VK_OBJECT_TYPE_DISPLAY_MODE_KHR      | slink:VkDisplayModeKHR
+endif::VK_KHR_display[]
+ifdef::VK_EXT_debug_report[]
+| ename:VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT | slink:VkDebugReportCallbackEXT
+endif::VK_EXT_debug_report[]
+ifdef::VK_KHR_video_queue[]
+| ename:VK_OBJECT_TYPE_VIDEO_SESSION_KHR | slink:VkVideoSessionKHR
+| ename:VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR | slink:VkVideoSessionParametersKHR
+endif::VK_KHR_video_queue[]
+ifdef::VK_EXT_debug_utils[]
+| ename:VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT | slink:VkDebugUtilsMessengerEXT
+endif::VK_EXT_debug_utils[]
+ifdef::VK_KHR_acceleration_structure[]
+| ename:VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR | slink:VkAccelerationStructureKHR
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_EXT_validation_cache[]
+| ename:VK_OBJECT_TYPE_VALIDATION_CACHE_EXT | slink:VkValidationCacheEXT
+endif::VK_EXT_validation_cache[]
+ifdef::VK_NV_ray_tracing[]
+| ename:VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV | slink:VkAccelerationStructureNV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_INTEL_performance_query[]
+| ename:VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL | slink:VkPerformanceConfigurationINTEL
+endif::VK_INTEL_performance_query[]
+ifdef::VK_KHR_deferred_host_operations[]
+| ename:VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR | slink:VkDeferredOperationKHR
+endif::VK_KHR_deferred_host_operations[]
+ifdef::VK_NV_device_generated_commands[]
+| ename:VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV | slink:VkIndirectCommandsLayoutNV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+| ename:VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA | slink:VkBufferCollectionFUCHSIA
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_EXT_opacity_micromap[]
+| ename:VK_OBJECT_TYPE_MICROMAP_EXT | slink:VkMicromapEXT
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_optical_flow[]
+| ename:VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV | slink:VkOpticalFlowSessionNV
+endif::VK_NV_optical_flow[]
+ifdef::VK_EXT_shader_object[]
+| ename:VK_OBJECT_TYPE_SHADER_EXT | slink:VkShaderEXT
+endif::VK_EXT_shader_object[]
+|====
+--
+
+If this Specification was generated with any such extensions included, they
+will be described in the remainder of this chapter.
+
+ifdef::VK_EXT_debug_utils[]
+include::{chapters}/VK_EXT_debug_utils.adoc[]
+endif::VK_EXT_debug_utils[]
+
+ifdef::VK_EXT_debug_marker[]
+include::{chapters}/VK_EXT_debug_marker.adoc[]
+endif::VK_EXT_debug_marker[]
+
+ifdef::VK_EXT_debug_report[]
+include::{chapters}/VK_EXT_debug_report.adoc[]
+endif::VK_EXT_debug_report[]
+
+ifdef::VK_NV_device_diagnostic_checkpoints,VK_EXT_device_fault[]
+== Device Loss Debugging
+endif::VK_NV_device_diagnostic_checkpoints,VK_EXT_device_fault[]
+
+ifdef::VK_NV_device_diagnostic_checkpoints[]
+include::{chapters}/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.adoc[]
+endif::VK_NV_device_diagnostic_checkpoints[]
+
+ifdef::VKSC_VERSION_1_0[]
+include::{chapters}/fault_handling.adoc[]
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_EXT_device_fault[]
+=== Device Fault Diagnosis
+
+[open,refpage='vkGetDeviceFaultInfoEXT',desc='Reports diagnostic fault information on the specified logical device',type='protos']
+--
+To retrieve diagnostic information about faults that may: have caused device
+loss, call:
+
+include::{generated}/api/protos/vkGetDeviceFaultInfoEXT.adoc[]
+
+  * pname:device is the logical device from which to query the diagnostic
+    fault information.
+  * pname:pFaultCounts is a pointer to a slink:VkDeviceFaultCountsEXT
+    structure in which counts for structures describing additional fault
+    information are returned.
+  * pname:pFaultInfo is `NULL` or a pointer to a slink:VkDeviceFaultInfoEXT
+    structure in which fault information is returned.
+
+If pname:pFaultInfo is `NULL`, then the counts of corresponding additional
+fault information structures available are returned in the
+pname:addressInfoCount and pname:vendorInfoCount members of
+pname:pFaultCounts.
+Additionally, the size of any vendor-specific binary crash dump is returned
+in the pname:vendorBinarySize member of pname:pFaultCounts.
+
+If pname:pFaultInfo is not `NULL`, pname:pFaultCounts must: point to a
+slink:VkDeviceFaultCountsEXT structure with each structure count or size
+member (pname:addressInfoCount, pname:vendorInfoCount,
+pname:vendorBinarySize) set by the user to the number of elements in the
+corresponding output array member of pname:pFaultInfo (pname:pAddressInfos
+and pname:pVendorInfos), or to the size of the output buffer in bytes
+(pname:pVendorBinaryData).
+On return, each structure count member is overwritten with the number of
+structures actually written to the corresponding output array member of
+pname:pFaultInfo.
+Similarly, pname:vendorBinarySize is overwritten with the number of bytes
+actually written to the pname:pVendorBinaryData member of pname:pFaultInfo.
+
+If the <<features-deviceFaultVendorBinary, vendor-specific crash dumps>>
+feature is not enabled, then implementations must: set
+pname:pFaultCounts\->vendorBinarySize to zero and must: not modify
+pname:pFaultInfo\->pVendorBinaryData.
+
+If any pname:pFaultCounts structure count member is less than the number of
+corresponding fault properties available, at most structure count
+(pname:addressInfoCount, pname:vendorInfoCount) elements will be written to
+the associated pname:pFaultInfo output array.
+Similarly, if pname:vendorBinarySize is less than the size in bytes of the
+available crash dump data, at most pname:vendorBinarySize elements will be
+written to pname:pVendorBinaryData.
+
+If pname:pFaultInfo is `NULL`, then subsequent calls to
+flink:vkGetDeviceFaultInfoEXT for the same pname:device must: return
+identical values in the pname:addressInfoCount, pname:vendorInfoCount and
+pname:vendorBinarySize members of pname:pFaultCounts.
+
+If pname:pFaultInfo is not `NULL`, then subsequent calls to
+flink:vkGetDeviceFaultInfoEXT for the same pname:device must: return
+identical values in the output members of pname:pFaultInfo
+(pname:pAddressInfos, pname:pVendorInfos, pname:pVendorBinaryData), up to
+the limits described by the structure count and buffer size members of
+pname:pFaultCounts (pname:addressInfoCount, pname:vendorInfoCount,
+pname:vendorBinarySize).
+If the sizes of the output members of pname:pFaultInfo increase for a
+subsequent call to flink:vkGetDeviceFaultInfoEXT, then supplementary
+information may: be returned in the additional available space.
+
+If any pname:pFaultCounts structure count member is smaller than the number
+of corresponding fault properties available, or if
+pname:pFaultCounts\->vendorBinarySize is smaller than the size in bytes of
+the generated binary crash dump data, ename:VK_INCOMPLETE will be returned
+instead of ename:VK_SUCCESS, to indicate that not all the available
+properties were returned.
+
+If pname:pFaultCounts\->vendorBinarySize is less than what is necessary to
+store the <<vendor-binary-crash-dumps, binary crash dump header>>, nothing
+will be written to pname:pFaultInfo\->pVendorBinaryData and zero will be
+written to pname:pFaultCounts\->vendorBinarySize.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceFaultInfoEXT-device-07336]]
+    pname:device must: be in the _lost_ state
+  * [[VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07337]]
+    If the value referenced by pname:pFaultCounts->addressInfoCount is not
+    `0`, and pname:pFaultInfo->pAddressInfos is not `NULL`,
+    pname:pFaultInfo->pAddressInfos must be a valid pointer to an array of
+    pname:pFaultCounts->addressInfoCount slink:VkDeviceFaultAddressInfoEXT
+    structures
+  * [[VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07338]]
+    If the value referenced by pname:pFaultCounts->vendorInfoCount is not
+    `0`, and pname:pFaultInfo->pVendorInfos is not `NULL`,
+    pname:pFaultInfo->pVendorInfos must be a valid pointer to an array of
+    pname:pFaultCounts->vendorInfoCount slink:VkDeviceFaultVendorInfoEXT
+    structures
+  * [[VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07339]]
+    If the value referenced by pname:pFaultCounts->vendorBinarySize is not
+    `0`, and pname:pFaultInfo->pVendorBinaryData is not `NULL`,
+    pname:pFaultInfo->pVendorBinaryData must be a valid pointer to an array
+    of pname:pFaultCounts->vendorBinarySize bytes
+****
+
+include::{generated}/validity/protos/vkGetDeviceFaultInfoEXT.adoc[]
+--
+
+[open,refpage='VkDeviceFaultCountsEXT',desc='Structure specifying device fault information',type='structs']
+--
+The sname:VkDeviceFaultCountsEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceFaultCountsEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:addressInfoCount is the number of
+    slink:VkDeviceFaultAddressInfoEXT structures describing either memory
+    accesses which may: have caused a page fault, or the addresses of active
+    instructions at the time of the fault.
+  * pname:vendorInfoCount is the number of slink:VkDeviceFaultVendorInfoEXT
+    structures describing vendor-specific fault information.
+  * pname:vendorBinarySize is the size in bytes of a vendor-specific binary
+    crash dump, which may provide additional information when imported into
+    external tools.
+
+include::{generated}/validity/structs/VkDeviceFaultCountsEXT.adoc[]
+--
+
+[open,refpage='VkDeviceFaultInfoEXT',desc='Structure specifying device fault information',type='structs']
+--
+The sname:VkDeviceFaultInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceFaultInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a human readable
+    description of the fault.
+  * pname:pAddressInfos is `NULL` or a pointer to an array of
+    slink:VkDeviceFaultAddressInfoEXT structures describing either memory
+    accesses which may: have caused a page fault, or describing active
+    instruction pointers at the time of the fault.
+    If not `NULL`, each element of pname:pAddressInfos describes the a
+    bounded region of GPU virtual address space containing either the GPU
+    virtual address accessed, or the value of an active instruction pointer.
+  * pname:pVendorInfos is `NULL` or a pointer to an array of
+    slink:VkDeviceFaultVendorInfoEXT structures describing vendor-specific
+    fault information.
+  * pname:pVendorBinaryData is `NULL` or a pointer to pname:vendorBinarySize
+    number of bytes of data, which will be populated with a vendor-specific
+    binary crash dump, as described in <<vendor-binary-crash-dumps, Vendor
+    Binary Crash Dumps>>.
+
+An implementation should: populate as many members of
+slink:VkDeviceFaultInfoEXT as possible, given the information available at
+the time of the fault and the constraints of the implementation itself.
+
+Due to hardware limitations, pname:pAddressInfos describes ranges of GPU
+virtual address space, rather than precise addresses.
+The precise memory address accessed or the precise value of the instruction
+pointer must: lie within the region described.
+
+ifdef::VK_EXT_device_address_binding_report[]
+[NOTE]
+.Note
+====
+Each element of pname:pAddressInfos describes either:
+
+  * A memory access which may have triggered a page fault and may have
+    contributed to device loss
+  * The value of an active instruction pointer at the time a fault occurred.
+    This value may be indicative of the active pipeline or shader at the
+    time of device loss
+
+Comparison of the GPU virtual addresses described by pname:pAddressInfos to
+GPU virtual address ranges reported by the
+`apiext:VK_EXT_device_address_binding_report` extension may allow
+applications to correlate between these addresses and Vulkan objects.
+Applications should be aware that these addresses may also correspond to
+resources internal to an implementation, which will not be reported via the
+`apiext:VK_EXT_device_address_binding_report` extension.
+====
+endif::VK_EXT_device_address_binding_report[]
+
+include::{generated}/validity/structs/VkDeviceFaultInfoEXT.adoc[]
+--
+
+[open,refpage='VkDeviceFaultAddressInfoEXT',desc='Structure specifying GPU virtual address information',type='structs']
+--
+The sname:VkDeviceFaultAddressInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceFaultAddressInfoEXT.adoc[]
+
+  * pname:addressType is either the type of memory operation that triggered
+    a page fault, or the type of association between an instruction pointer
+    and a fault.
+  * pname:reportedAddress is the GPU virtual address recorded by the device.
+  * pname:addressPrecision is a power of two value that specifies how
+    precisely the device can report the address.
+
+The combination of pname:reportedAddress and pname:addressPrecision allow
+the possible range of addresses to be calculated, such that:
+
+[source,c++]
+----
+lower_address = (pInfo->reportedAddress & ~(pInfo->addressPrecision-1))
+upper_address = (pInfo->reportedAddress |  (pInfo->addressPrecision-1))
+----
+
+[NOTE]
+.Note
+====
+It is valid for the pname:reportedAddress to contain a more precise address
+than indicated by pname:addressPrecision.
+In this case, the value of pname:reportedAddress should be treated as an
+additional hint as to the value of the address that triggered the page
+fault, or to the value of an instruction pointer.
+====
+
+include::{generated}/validity/structs/VkDeviceFaultAddressInfoEXT.adoc[]
+--
+
+[open,refpage='VkDeviceFaultAddressTypeEXT',desc='Page fault access types',type='enums']
+--
+Possible values of slink:VkDeviceFaultAddressInfoEXT::pname:addressType are:
+
+include::{generated}/api/enums/VkDeviceFaultAddressTypeEXT.adoc[]
+
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT specifies that
+    slink:VkDeviceFaultAddressInfoEXT does not describe a page fault, or an
+    instruction address.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT specifies that
+    slink:VkDeviceFaultAddressInfoEXT describes a page fault triggered by an
+    invalid read operation.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT specifies that
+    slink:VkDeviceFaultAddressInfoEXT describes a page fault triggered by an
+    invalid write operation.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT describes a page
+    fault triggered by an attempt to execute non-executable memory.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT
+    specifies an instruction pointer value at the time the fault occurred.
+    This may or may not be related to a fault.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT
+    specifies an instruction pointer value associated with an invalid
+    instruction fault.
+  * ename:VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT
+    specifies an instruction pointer value associated with a fault.
+
+[NOTE]
+.Note
+====
+The instruction pointer values recorded may not identify the specific
+instruction(s) that triggered the fault.
+The relationship between the instruction pointer reported and triggering
+instruction will be vendor-specific.
+====
+--
+
+[open,refpage='VkDeviceFaultVendorInfoEXT',desc='Structure specifying vendor-specific fault information',type='structs']
+--
+The sname:VkDeviceFaultVendorInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceFaultVendorInfoEXT.adoc[]
+
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a human readable
+    description of the fault.
+  * pname:vendorFaultCode is the vendor-specific fault code for this fault.
+  * pname:vendorFaultData is the vendor-specific fault data associated with
+    this fault.
+
+include::{generated}/validity/structs/VkDeviceFaultVendorInfoEXT.adoc[]
+--
+
+
+[[vendor-binary-crash-dumps]]
+==== Vendor Binary Crash Dumps
+
+Applications can: store the vendor-specific binary crash dump data retrieved
+by calling flink:vkGetDeviceFaultInfoEXT for later analysis using external
+tools.
+
+However, the format of this data may: depend on the vendor ID, device ID,
+driver version, and other details of the device.
+To enable external applications to identify the original device from which a
+crash dump was generated, the initial bytes written to
+sname:VkDeviceFaultInfoEXT::pname:pVendorBinaryData must: begin with a valid
+crash dump header.
+
+[open,refpage='VkDeviceFaultVendorBinaryHeaderVersionOneEXT',desc='Structure describing the layout of the vendor binary crash dump header',type='structs']
+--
+Version one of the crash dump header is defined as:
+
+include::{generated}/api/structs/VkDeviceFaultVendorBinaryHeaderVersionOneEXT.adoc[]
+
+  * pname:headerSize is the length in bytes of the crash dump header.
+  * pname:headerVersion is a elink:VkDeviceFaultVendorBinaryHeaderVersionEXT
+    enum value specifying the version of the header.
+    A consumer of the crash dump should: use the header version to interpret
+    the remainder of the header.
+  * pname:vendorID is the sname:VkPhysicalDeviceProperties::pname:vendorID
+    of the implementation.
+  * pname:deviceID is the sname:VkPhysicalDeviceProperties::pname:deviceID
+    of the implementation.
+  * pname:driverVersion is the
+    sname:VkPhysicalDeviceProperties::pname:driverVersion of the
+    implementation.
+  * pname:pipelineCacheUUID is an array of ename:VK_UUID_SIZE code:uint8_t
+    values matching the
+    sname:VkPhysicalDeviceProperties::pname:pipelineCacheUUID property of
+    the implementation.
+  * pname:applicationNameOffset is zero, or an offset from the base address
+    of the crash dump header to a null-terminated UTF-8 string containing
+    the name of the application.
+    If pname:applicationNameOffset is non-zero, this string must: match the
+    application name specified via
+    slink:VkApplicationInfo::pname:pApplicationName during instance
+    creation.
+  * pname:applicationVersion must: be zero or the value specified by
+    slink:VkApplicationInfo::pname:applicationVersion during instance
+    creation.
+  * pname:engineNameOffset is zero, or an offset from the base address of
+    the crash dump header to a null-terminated UTF-8 string containing the
+    name of the engine (if any) used to create the application.
+    If pname:engineNameOffset is non-zero, this string must: match the
+    engine name specified via slink:VkApplicationInfo::pname:pEngineName
+    during instance creation.
+  * pname:engineVersion must: be zero or the value specified by
+    slink:VkApplicationInfo::pname:engineVersion during instance creation.
+  * pname:apiVersion must: be zero or the value specified by
+    slink:VkApplicationInfo::pname:apiVersion during instance creation.
+
+Unlike most structures declared by the Vulkan API, all fields of this
+structure are written with the least significant byte first, regardless of
+host byte-order.
+
+The C language specification does not define the packing of structure
+members.
+This layout assumes tight structure member packing, with members laid out in
+the order listed in the structure, and the intended size of the structure is
+56 bytes.
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values at the correct offsets.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceFaultVendorBinaryHeaderVersionOneEXT-headerSize-07340]]
+    pname:headerSize must: be 56
+  * [[VUID-VkDeviceFaultVendorBinaryHeaderVersionOneEXT-headerVersion-07341]]
+    pname:headerVersion must: be
+    ename:VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT
+****
+
+include::{generated}/validity/structs/VkDeviceFaultVendorBinaryHeaderVersionOneEXT.adoc[]
+--
+
+[open,refpage='VkDeviceFaultVendorBinaryHeaderVersionEXT',desc='Encode vendor binary crash dump version',type='enums',xrefs='vkGetDeviceFaultInfoEXT']
+--
+Possible values of the pname:headerVersion value of the crash dump header
+are:
+
+include::{generated}/api/enums/VkDeviceFaultVendorBinaryHeaderVersionEXT.adoc[]
+
+  * ename:VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT specifies
+    version one of the binary crash dump header.
+--
+endif::VK_EXT_device_fault[]
+
+
+ifdef::VK_VERSION_1_3,VK_EXT_tooling_info[]
+[[debugging-tooling-info]]
+== Active Tooling Information
+
+[open,refpage='vkGetPhysicalDeviceToolProperties',desc='Reports properties of tools active on the specified physical device',type='protos',alias='vkGetPhysicalDeviceToolPropertiesEXT']
+--
+Information about tools providing debugging, profiling, or similar services,
+active for a given physical device, can be obtained by calling:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkGetPhysicalDeviceToolProperties.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_EXT_tooling_info[or the equivalent command]
+
+ifdef::VK_EXT_tooling_info[]
+include::{generated}/api/protos/vkGetPhysicalDeviceToolPropertiesEXT.adoc[]
+endif::VK_EXT_tooling_info[]
+
+  * pname:physicalDevice is the handle to the physical device to query for
+    active tools.
+  * pname:pToolCount is a pointer to an integer describing the number of
+    tools active on pname:physicalDevice.
+  * pname:pToolProperties is either `NULL` or a pointer to an array of
+    slink:VkPhysicalDeviceToolProperties structures.
+
+If pname:pToolProperties is `NULL`, then the number of tools currently
+active on pname:physicalDevice is returned in pname:pToolCount.
+Otherwise, pname:pToolCount must: point to a variable set by the user to the
+number of elements in the pname:pToolProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pToolProperties.
+If pname:pToolCount is less than the number of currently active tools, at
+most pname:pToolCount structures will be written.
+
+The count and properties of active tools may: change in response to events
+outside the scope of the specification.
+An application should: assume these properties might change at any given
+time.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceToolProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceToolProperties',desc='Structure providing information about an active tool',type='structs',alias='VkPhysicalDeviceToolPropertiesEXT']
+--
+The slink:VkPhysicalDeviceToolProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceToolProperties.adoc[]
+
+ifdef::VK_EXT_tooling_info[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceToolPropertiesEXT.adoc[]
+endif::VK_EXT_tooling_info[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:name is a null-terminated UTF-8 string containing the name of the
+    tool.
+  * pname:version is a null-terminated UTF-8 string containing the version
+    of the tool.
+  * pname:purposes is a bitmask of elink:VkToolPurposeFlagBits which is
+    populated with purposes supported by the tool.
+  * pname:description is a null-terminated UTF-8 string containing a
+    description of the tool.
+  * pname:layer is a null-terminated UTF-8 string containing the name of the
+    layer implementing the tool, if the tool is implemented in a layer -
+    otherwise it may: be an empty string.
+
+include::{generated}/validity/structs/VkPhysicalDeviceToolProperties.adoc[]
+--
+
+[open,refpage='VkToolPurposeFlagBits',desc='Bitmask specifying the purposes of an active tool',type='enums',alias='VkToolPurposeFlagBitsEXT']
+--
+Bits which can: be set in
+slink:VkPhysicalDeviceToolProperties::pname:purposes, specifying the
+purposes of an active tool, are:
+
+include::{generated}/api/enums/VkToolPurposeFlagBits.adoc[]
+
+ifdef::VK_EXT_tooling_info[]
+or the equivalent
+
+include::{generated}/api/enums/VkToolPurposeFlagBitsEXT.adoc[]
+endif::VK_EXT_tooling_info[]
+
+  * ename:VK_TOOL_PURPOSE_VALIDATION_BIT specifies that the tool provides
+    validation of API usage.
+  * ename:VK_TOOL_PURPOSE_PROFILING_BIT specifies that the tool provides
+    profiling of API usage.
+  * ename:VK_TOOL_PURPOSE_TRACING_BIT specifies that the tool is capturing
+    data about the application's API usage, including anything from simple
+    logging to capturing data for later replay.
+  * ename:VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT specifies that the tool
+    provides additional API features/extensions on top of the underlying
+    implementation.
+  * ename:VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT specifies that the tool
+    modifies the API features/limits/extensions presented to the
+    application.
+ifdef::VK_EXT_debug_report,VK_EXT_debug_utils[]
+  * ename:VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT specifies that the tool
+    reports additional information to the application via callbacks
+    specified by
+ifdef::VK_EXT_debug_report[]
+    flink:vkCreateDebugReportCallbackEXT
+endif::VK_EXT_debug_report[]
+ifdef::VK_EXT_debug_report+VK_EXT_debug_utils[]
+    or
+endif::VK_EXT_debug_report+VK_EXT_debug_utils[]
+ifdef::VK_EXT_debug_utils[]
+    flink:vkCreateDebugUtilsMessengerEXT
+endif::VK_EXT_debug_utils[]
+endif::VK_EXT_debug_report,VK_EXT_debug_utils[]
+ifdef::VK_EXT_debug_marker,VK_EXT_debug_utils[]
+  * ename:VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT specifies that the tool
+    consumes
+ifdef::VK_EXT_debug_marker[]
+    <<debugging-debug-markers,debug markers>>
+endif::VK_EXT_debug_marker[]
+ifdef::VK_EXT_debug_marker+VK_EXT_debug_utils[]
+    or
+endif::VK_EXT_debug_marker+VK_EXT_debug_utils[]
+ifdef::VK_EXT_debug_utils[]
+    <<debugging-object-debug-annotation,object debug annotation>>,
+    <<debugging-queue-labels, queue labels>>, or
+    <<debugging-command-buffer-labels, command buffer labels>>
+endif::VK_EXT_debug_utils[]
+endif::VK_EXT_debug_marker,VK_EXT_debug_utils[]
+--
+
+[open,refpage='VkToolPurposeFlags',desc='Bitmask of VkToolPurposeFlagBits',type='flags',alias='VkToolPurposeFlagsEXT']
+--
+include::{generated}/api/flags/VkToolPurposeFlags.adoc[]
+
+ifdef::VK_EXT_tooling_info[]
+or the equivalent
+
+include::{generated}/api/flags/VkToolPurposeFlagsEXT.adoc[]
+endif::VK_EXT_tooling_info[]
+
+tlink:VkToolPurposeFlags is a bitmask type for setting a mask of zero or
+more elink:VkToolPurposeFlagBits.
+--
+endif::VK_VERSION_1_3,VK_EXT_tooling_info[]
+
+
+ifdef::VK_EXT_frame_boundary[]
+== Frame Boundary
+
+[open,refpage='VkFrameBoundaryEXT',desc='Add frame boundary information to queue submissions',type='structs']
+--
+The sname:VkFrameBoundaryEXT structure is defined as:
+
+include::{generated}/api/structs/VkFrameBoundaryEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkFrameBoundaryFlagBitsEXT that can
+    flag the last submission of a frame identifier.
+  * pname:frameID is the frame identifier.
+  * pname:imageCount is the number of images that store frame results.
+  * pname:pImages is a pointer to an array of VkImage objects with
+    imageCount entries.
+  * pname:bufferCount is the number of buffers the store the frame results.
+  * pname:pBuffers is a pointer to an array of VkBuffer objects with
+    bufferCount entries.
+  * pname:tagName is a numerical identifier for tag data.
+  * pname:tagSize is the number of bytes of tag data.
+  * pname:pTag is a pointer to an array of pname:tagSize bytes containing
+    tag data.
+
+The application can: associate frame boundary information to a queue
+submission call by adding a sname:VkFrameBoundaryEXT structure to the
+pname:pNext chain of <<devsandqueues-submission,queue submission>>,
+ifdef::VK_KHR_swapchain[slink:VkPresentInfoKHR,]
+or slink:VkBindSparseInfo.
+
+The frame identifier is used to associate one or more queue submission to a
+frame, it is thus meant to be unique within a frame lifetime, i.e. it is
+possible (but not recommended) to reuse frame identifiers, as long as any
+two frames with any chance of having overlapping queue submissions (as in
+the example above) use two different frame identifiers.
+
+[NOTE]
+.Note
+====
+Since the concept of frame is application-dependent, there is no way to
+validate the use of frame identifier.
+It is good practice to use a monotonically increasing counter as the frame
+identifier and not reuse identifiers between frames.
+====
+
+The pname:pImages and pname:pBuffers arrays contain a list of images and
+buffers which store the "end result" of the frame.
+As the concept of frame is application-dependent, not all frames may:
+produce their results in images or buffers, yet this is a sufficiently
+common case to be handled by sname:VkFrameBoundaryEXT.
+Note that no extra information, such as image layout is being provided,
+since the images are meant to be used by tools which would already be
+tracking this required information.
+ifdef::VK_KHR_swapchain[]
+Having the possibility of passing a list of end-result images makes
+sname:VkFrameBoundaryEXT as expressive as flink:vkQueuePresentKHR, which is
+often the default frame boundary delimiter.
+endif::VK_KHR_swapchain[]
+
+The application can: also associate arbitrary extra information via tag data
+using pname:tagName, pname:tagSize and pname:pTag.
+This extra information is typically tool-specific.
+
+include::{generated}/validity/structs/VkFrameBoundaryEXT.adoc[]
+--
+
+[open,refpage='VkFrameBoundaryFlagBitsEXT',desc='Bitmask specifying whether a queue submission is the last one for a given frame',type='enums']
+--
+The bit which can: be set in slink:VkFrameBoundaryEXT::pname:flags is:
+
+include::{generated}/api/enums/VkFrameBoundaryFlagBitsEXT.adoc[]
+
+  * ename:VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT specifies that this queue
+    submission is the last one for this frame, i.e. once this queue
+    submission has terminated, then the work for this frame is completed.
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+Note that in the presence of timeline semaphores, the last queue submission
+might not be the last one to be submitted, as timeline semaphores allow for
+wait-before-signal submissions.
+In the context of frame boundary, the queue submission that should be done
+flagged as the last one is the one that is meant to be executed last, even
+if it may: not be the last one to be submitted.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+[open,refpage='VkFrameBoundaryFlagsEXT',desc='Bitmask of VkFrameBoundaryFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkFrameBoundaryFlagsEXT.adoc[]
+
+tlink:VkFrameBoundaryFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkFrameBoundaryFlagBitsEXT.
+--
+
+endif::VK_EXT_frame_boundary[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/descriptorsets.adoc b/codegen/vulkan/vulkan-docs-next/chapters/descriptorsets.adoc
new file mode 100644
index 0000000..e234776
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/descriptorsets.adoc
@@ -0,0 +1,6697 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[descriptorsets]]
+= Resource Descriptors
+
+A _descriptor_ is an opaque data structure representing a shader resource
+such as a buffer, buffer view, image view, sampler, or combined image
+sampler.
+Descriptors are organized into _descriptor sets_, which are bound during
+command recording for use in subsequent drawing commands.
+The arrangement of content in each descriptor set is determined by a
+_descriptor set layout_, which determines what descriptors can be stored
+within it.
+The sequence of descriptor set layouts that can: be used by a pipeline is
+specified in a _pipeline layout_.
+Each pipeline object can: use up to pname:maxBoundDescriptorSets (see
+<<limits, Limits>>) descriptor sets.
+
+ifdef::VK_EXT_descriptor_buffer[]
+If the <<features-descriptorBuffer, pname:descriptorBuffer>> feature is
+enabled, the implementation supports placing descriptors into
+<<descriptorbuffers,descriptor buffers>> which are bound during command
+recording in a similar way to descriptor sets.
+endif::VK_EXT_descriptor_buffer[]
+
+Shaders access resources via variables decorated with a descriptor set and
+binding number that link them to a descriptor in a descriptor set.
+The shader interface mapping to bound descriptor sets is described in the
+<<interfaces-resources, Shader Resource Interface>> section.
+
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+Shaders can: also access buffers without going through descriptors by using
+<<descriptorsets-physical-storage-buffer,Physical Storage Buffer Access>> to
+access them through 64-bit addresses.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+
+
+[[descriptorsets-types]]
+== Descriptor Types
+
+There are a number of different types of descriptor supported by Vulkan,
+corresponding to different resources or usage.
+The following sections describe the API definitions of each descriptor type.
+The mapping of each type to SPIR-V is listed in the
+<<interfaces-resources-correspondence, Shader Resource and Descriptor Type
+Correspondence>> and <<interfaces-resources-storage-class-correspondence,
+Shader Resource and Storage Class Correspondence>> tables in the
+<<interfaces, Shader Interfaces>> chapter.
+
+
+[[descriptorsets-storageimage]]
+=== Storage Image
+
+A _storage image_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) is a descriptor
+type associated with an <<resources-images, image resource>> via an
+<<resources-image-views, image view>> that load, store, and atomic
+operations can: be performed on.
+
+Storage image loads are supported in all shader stages for image views whose
+<<resources-image-view-format-features,format features>> contain
+<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT>>.
+
+Stores to storage images are supported in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh and]
+compute shaders for image views whose
+<<resources-image-view-format-features,format features>> contain
+<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT>>.
+
+Atomic operations on storage images are supported in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh and]
+compute shaders for image views whose
+<<resources-image-view-format-features,format features>> contain
+<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT>>.
+
+When the <<features-fragmentStoresAndAtomics,
+pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
+operations are also supported for storage images in fragment shaders with
+the same set of image formats as supported in compute shaders.
+When the <<features-vertexPipelineStoresAndAtomics,
+pname:vertexPipelineStoresAndAtomics>> feature is enabled, stores and atomic
+operations are also supported in vertex, tessellation, and geometry shaders
+with the same set of image formats as supported in compute shaders.
+
+The image subresources for a storage image must: be in the
+ifdef::VK_KHR_shared_presentable_image[]
+ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
+endif::VK_KHR_shared_presentable_image[]
+ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
+shader.
+
+
+[[descriptorsets-sampler]]
+=== Sampler
+
+A _sampler descriptor_ (ename:VK_DESCRIPTOR_TYPE_SAMPLER) is a descriptor
+type associated with a <<samplers,sampler>> object, used to control the
+behavior of <<textures,sampling operations>> performed on a
+<<descriptorsets-sampledimage, sampled image>>.
+
+
+[[descriptorsets-sampledimage]]
+=== Sampled Image
+
+A _sampled image_ (ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) is a descriptor
+type associated with an <<resources-images, image resource>> via an
+<<resources-image-views, image view>> that <<textures,sampling operations>>
+can: be performed on.
+
+Shaders combine a sampled image variable and a sampler variable to perform
+sampling operations.
+
+Sampled images are supported in all shader stages for image views whose
+<<resources-image-view-format-features,format features>> contain
+<<formats-properties,ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT>>.
+
+An image subresources for a sampled image must: be in one of the following
+layouts:
+
+  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+  * ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+
+[[descriptorsets-combinedimagesampler]]
+=== Combined Image Sampler
+
+A _combined image sampler_ (ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
+is a single descriptor type associated with both a <<samplers,sampler>> and
+an <<resources-images,image resource>>, combining both a
+<<descriptorsets-sampler,sampler>> and <<descriptorsets-sampledimage,
+sampled image>> descriptor into a single descriptor.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If the descriptor refers to a sampler that performs
+ifndef::VK_EXT_fragment_density_map[]
+<<samplers-YCbCr-conversion,{YCbCr} conversion>>,
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_fragment_density_map[]
+<<samplers-YCbCr-conversion,{YCbCr} conversion>> or samples a
+<<samplers-subsamplesampler,subsampled image>>,
+endif::VK_EXT_fragment_density_map[]
+the sampler must: only be used to sample the image in the same descriptor.
+Otherwise, the
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_EXT_fragment_density_map[]
+The
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_fragment_density_map[]
+If the descriptor refers to a sampler that samples a
+<<samplers-subsamplesampler,subsampled image>>, the sampler must: only be
+used to sample the image in the same descriptor.
+Otherwise, the
+endif::VK_EXT_fragment_density_map[]
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+sampler and image in this type of descriptor can: be used freely with any
+other samplers and images.
+
+An image subresources for a combined image sampler must: be in one of the
+following layouts:
+
+  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+  * ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+
+[NOTE]
+.Note
+====
+On some implementations, it may: be more efficient to sample from an image
+using a combination of sampler and sampled image that are stored together in
+the descriptor set in a combined descriptor.
+====
+
+
+[[descriptorsets-uniformtexelbuffer]]
+=== Uniform Texel Buffer
+
+A _uniform texel buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) is
+a descriptor type associated with a <<resources-buffers,buffer resource>>
+via a <<resources-buffer-views, buffer view>> that <<textures,image sampling
+operations>> can: be performed on.
+
+Uniform texel buffers define a tightly-packed 1-dimensional linear array of
+texels, with texels going through format conversion when read in a shader in
+the same way as they are for an image.
+
+Load operations from uniform texel buffers are supported in all shader
+stages for buffer view formats which report
+<<resources-buffer-view-format-features,format features>> support for
+ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+
+
+[[descriptorsets-storagetexelbuffer]]
+=== Storage Texel Buffer
+
+A _storage texel buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER) is
+a descriptor type associated with a <<resources-buffers,buffer resource>>
+via a <<resources-buffer-views, buffer view>> that <<textures,image load,
+store, and atomic operations>> can: be performed on.
+
+Storage texel buffers define a tightly-packed 1-dimensional linear array of
+texels, with texels going through format conversion when read in a shader in
+the same way as they are for an image.
+Unlike <<descriptorsets-uniformtexelbuffer,uniform texel buffers>>, these
+buffers can also be written to in the same way as for
+<<descriptorsets-storageimage, storage images>>.
+
+Storage texel buffer loads are supported in all shader stages for texel
+buffer view formats which report
+<<resources-buffer-view-format-features,format features>> support for
+ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+
+Stores to storage texel buffers are supported in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh and]
+compute shaders for texel buffer formats which report
+<<resources-buffer-view-format-features,format features>> support for
+ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+
+Atomic operations on storage texel buffers are supported in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh and]
+compute shaders for texel buffer formats which report
+<<resources-buffer-view-format-features,format features>> support for
+ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
+
+When the <<features-fragmentStoresAndAtomics,
+pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
+operations are also supported for storage texel buffers in fragment shaders
+with the same set of texel buffer formats as supported in compute shaders.
+When the <<features-vertexPipelineStoresAndAtomics,
+pname:vertexPipelineStoresAndAtomics>> feature is enabled, stores and atomic
+operations are also supported in vertex, tessellation, and geometry shaders
+with the same set of texel buffer formats as supported in compute shaders.
+
+
+[[descriptorsets-storagebuffer]]
+=== Storage Buffer
+
+A _storage buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) is a descriptor
+type associated with a <<resources-buffers,buffer resource>> directly,
+described in a shader as a structure with various members that load, store,
+and atomic operations can: be performed on.
+
+[NOTE]
+.Note
+====
+Atomic operations can: only be performed on members of certain types as
+defined in the <<spirvenv, SPIR-V environment appendix>>.
+====
+
+
+[[descriptorsets-uniformbuffer]]
+=== Uniform Buffer
+
+A _uniform buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) is a descriptor
+type associated with a <<resources-buffers,buffer resource>> directly,
+described in a shader as a structure with various members that load
+operations can: be performed on.
+
+
+[[descriptorsets-uniformbufferdynamic]]
+=== Dynamic Uniform Buffer
+
+A _dynamic uniform buffer_ (ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
+is almost identical to a <<descriptorsets-uniformbuffer, uniform buffer>>,
+and differs only in how the offset into the buffer is specified.
+The base offset calculated by the slink:VkDescriptorBufferInfo when
+initially <<descriptorsets-updates, updating the descriptor set>> is added
+to a <<descriptorsets-binding-dynamicoffsets, dynamic offset>> when binding
+the descriptor set.
+
+
+[[descriptorsets-storagebufferdynamic]]
+=== Dynamic Storage Buffer
+
+A _dynamic storage buffer_ (ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
+is almost identical to a <<descriptorsets-storagebuffer, storage buffer>>,
+and differs only in how the offset into the buffer is specified.
+The base offset calculated by the slink:VkDescriptorBufferInfo when
+initially <<descriptorsets-updates, updating the descriptor set>> is added
+to a <<descriptorsets-binding-dynamicoffsets, dynamic offset>> when binding
+the descriptor set.
+
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[[descriptorsets-inlineuniformblock]]
+=== Inline Uniform Block
+
+An _inline uniform block_ (ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) is
+almost identical to a <<descriptorsets-uniformbuffer, uniform buffer>>, and
+differs only in taking its storage directly from the encompassing descriptor
+set instead of being backed by buffer memory.
+It is typically used to access a small set of constant data that does not
+require the additional flexibility provided by the indirection enabled when
+using a uniform buffer where the descriptor and the referenced buffer memory
+are decoupled.
+Compared to push constants, they allow reusing the same set of constant data
+across multiple disjoint sets of drawing and dispatching commands.
+
+Inline uniform block descriptors cannot: be aggregated into arrays.
+Instead, the array size specified for an inline uniform block descriptor
+binding specifies the binding's capacity in bytes.
+
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+
+ifdef::VK_QCOM_image_processing[]
+[[descriptorsets-weightimage]]
+=== Sample Weight Image
+
+A _sample weight image_ (ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM)
+is a descriptor type associated with an <<resources-images, image resource>>
+via an <<resources-image-views, image view>> that can: be used in
+<<textures-weightimage, weight image sampling>>.
+The image view must have been created with
+slink:VkImageViewSampleWeightCreateInfoQCOM.
+
+Shaders can: combine a weight image variable, a sampled image variable, and
+a sampler variable to perform <<textures-weightimage, weight image
+sampling>>.
+
+Weight image sampling is supported in all shader stages if the weight image
+view specifies a format that supports
+<<resources-image-view-format-features,format feature>>
+<<formats-properties,ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM>> and
+the sampled image view specifies a format that supports
+<<resources-image-view-format-features,format feature>>
+<<formats-properties,ename:VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM>>
+
+The image subresources for the weight image must: be in the
+ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
+ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
+shader.
+
+
+[[descriptorsets-blockmatch]]
+=== Block Matching Image
+
+A _block matching image_ (ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM)
+is a descriptor type associated with an <<resources-images, image resource>>
+via an <<resources-image-views, image view>> that can: be used in
+<<textures-blockmatch, block matching>>.
+
+Shaders can: combine a target image variable, a reference image variable,
+and a sampler variable to perform <<textures-blockmatch, block matching>>.
+
+Block matching is supported in all shader stages for if both the target view
+and reference view specifies a format that supports
+<<resources-image-view-format-features,format feature>>
+<<formats-properties,ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM>>
+
+
+The image subresources for block matching must: be in the
+ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
+ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
+shader.
+endif::VK_QCOM_image_processing[]
+
+
+[[descriptorsets-inputattachment]]
+=== Input Attachment
+
+An _input attachment_ (ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT) is a
+descriptor type associated with an <<resources-images, image resource>> via
+an <<resources-image-views, image view>> that can: be used for
+<<synchronization-framebuffer-regions,framebuffer local>> load operations in
+fragment shaders.
+
+All image formats that are supported for color attachments
+(ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+or ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+) or depth/stencil attachments
+(ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) for a given image
+tiling mode are also supported for input attachments.
+
+An image view used as an input attachment must: be in one of the following
+layouts:
+
+  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+  * ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_KHR_synchronization2[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+[[descriptorsets-accelerationstructure]]
+=== Acceleration Structure
+
+An _acceleration structure_ (
+ifdef::VK_KHR_acceleration_structure[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV]
+) is a descriptor type that is used to retrieve scene geometry from within
+shaders that are used for ray traversal.
+Shaders have read-only access to the memory.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+[[descriptorsets-mutable]]
+=== Mutable
+
+A descriptor of _mutable_ (ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT) type
+indicates that this descriptor can: mutate to any of the descriptor types
+given in the
+slink:VkMutableDescriptorTypeCreateInfoEXT::pname:pDescriptorTypes list of
+descriptor types in the pname:pNext chain of
+slink:VkDescriptorSetLayoutCreateInfo for this binding.
+At any point, each individual descriptor of mutable type has an active
+descriptor type.
+The active descriptor type can: be any one of the declared types in
+pname:pDescriptorTypes.
+Additionally, a mutable descriptor's active descriptor type can: be of the
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT type, which is the initial active
+descriptor type.
+The active descriptor type can: change when the descriptor is updated.
+When a descriptor is consumed by binding a descriptor set, the active
+descriptor type is considered, not ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT.
+
+An active descriptor type of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT is
+considered an undefined: descriptor.
+If a descriptor is consumed where the active descriptor type does not match
+what the shader expects, the descriptor is considered an undefined:
+descriptor.
+
+[NOTE]
+.Note
+====
+To find which descriptor types are supported as
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the application can: use
+flink:vkGetDescriptorSetLayoutSupport with an
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT binding, with the list of descriptor
+types to query in the
+slink:VkMutableDescriptorTypeCreateInfoEXT::pname:pDescriptorTypes array for
+that binding.
+====
+
+[NOTE]
+.Note
+====
+The intention of a mutable descriptor type is that implementations allocate
+N bytes per descriptor, where N is determined by the maximum descriptor size
+for a given descriptor binding.
+Implementations are not expected to keep track of the active descriptor
+type, and it should be considered a C-like union type.
+
+A mutable descriptor type is not considered as efficient in terms of runtime
+performance as using a non-mutable descriptor type, and applications are not
+encouraged to use them outside API layering efforts.
+Mutable descriptor types can be more efficient if the alternative is using
+many different descriptors to emulate mutable descriptor types.
+====
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+
+[[descriptorsets-sets]]
+== Descriptor Sets
+
+Descriptors are grouped together into descriptor set objects.
+A descriptor set object is an opaque object containing storage for a set of
+descriptors, where the types and number of descriptors is defined by a
+descriptor set layout.
+The layout object may: be used to define the association of each descriptor
+binding with memory or other implementation resources.
+The layout is used both for determining the resources that need to be
+associated with the descriptor set, and determining the interface between
+shader stages and shader resources.
+
+
+[[descriptorsets-setlayout]]
+=== Descriptor Set Layout
+
+[open,refpage='VkDescriptorSetLayout',desc='Opaque handle to a descriptor set layout object',type='handles']
+--
+A descriptor set layout object is defined by an array of zero or more
+descriptor bindings.
+Each individual descriptor binding is specified by a descriptor type, a
+count (array size) of the number of descriptors in the binding, a set of
+shader stages that can: access the binding, and (if using immutable
+samplers) an array of sampler descriptors.
+
+Descriptor set layout objects are represented by sname:VkDescriptorSetLayout
+handles:
+
+include::{generated}/api/handles/VkDescriptorSetLayout.adoc[]
+--
+
+[open,refpage='vkCreateDescriptorSetLayout',desc='Create a new descriptor set layout',type='protos']
+--
+:refpage: vkCreateDescriptorSetLayout
+:objectnameplural: descriptor set layouts
+:objectnamecamelcase: descriptorSetLayout
+:objectcount: 1
+
+To create descriptor set layout objects, call:
+
+include::{generated}/api/protos/vkCreateDescriptorSetLayout.adoc[]
+
+  * pname:device is the logical device that creates the descriptor set
+    layout.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkDescriptorSetLayoutCreateInfo structure specifying the state of
+    the descriptor set layout object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pSetLayout is a pointer to a slink:VkDescriptorSetLayout handle in
+    which the resulting descriptor set layout object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+
+:uniqifier: layoutbindings
+:combinedobjectnameplural: descriptor set layout bindings
+:combinedparentobject: VkDescriptorSetLayout
+:combinedobjectcount: pname:pCreateInfo->bindingCount
+:combinedobjectnamecamelcase: descriptorSetLayoutBinding
+include::{chapters}/commonvalidity/memory_reservation_request_count_combined_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateDescriptorSetLayout.adoc[]
+--
+
+[open,refpage='VkDescriptorSetLayoutCreateInfo',desc='Structure specifying parameters of a newly created descriptor set layout',type='structs']
+--
+Information about the descriptor set layout is passed in a
+sname:VkDescriptorSetLayoutCreateInfo structure:
+
+include::{generated}/api/structs/VkDescriptorSetLayoutCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask
+ifdef::VK_KHR_push_descriptor[]
+    of elink:VkDescriptorSetLayoutCreateFlagBits
+endif::VK_KHR_push_descriptor[]
+    specifying options for descriptor set layout creation.
+  * pname:bindingCount is the number of elements in pname:pBindings.
+  * pname:pBindings is a pointer to an array of
+    slink:VkDescriptorSetLayoutBinding structures.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-binding-00279]]
+    The slink:VkDescriptorSetLayoutBinding::pname:binding members of the
+    elements of the pname:pBindings array must: each have different values
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00280]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
+    elements of pname:pBindings must: not have a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-02208]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
+    elements of pname:pBindings must: not have a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00281]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then the
+    total number of elements of all bindings must: be less than or equal to
+    slink:VkPhysicalDevicePushDescriptorPropertiesKHR::pname:maxPushDescriptors
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04590]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
+    pname:flags must: not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04591]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
+    pname:pBindings must: not have a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-03000]]
+    If any binding has the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+    bit set, pname:flags must: include
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001]]
+    If any binding has the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+    bit set, then all bindings must: not have pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04592]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
+    pname:flags must: not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-pBindings-07303]]
+    If any element pname:pBindings[i] has a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then a
+    slink:VkMutableDescriptorTypeCreateInfoEXT must: be present in the
+    pname:pNext chain, and pname:mutableDescriptorTypeListCount must: be
+    greater than i
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04594]]
+    If a binding has a pname:descriptorType value of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then sname:pImmutableSamplers
+    must: be `NULL`
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-mutableDescriptorType-04595]]
+    If
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::pname:mutableDescriptorType
+    is not enabled, pname:pBindings must: not contain a pname:descriptorType
+    of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04596]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT,
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::pname:mutableDescriptorType
+    must: be enabled
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-bindingCount-05011]]
+    pname:bindingCount must: be less than or equal to
+    <<limits-maxDescriptorSetLayoutBindings,maxDescriptorSetLayoutBindings>>
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorCount-05071]]
+    The sum of pname:descriptorCount over all bindings in pname:pBindings
+    that have pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and
+    sname:pImmutableSamplers not equal to `NULL` must: be less than or equal
+    to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxImmutableSamplersPerDescriptorSetLayout
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-08000]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then
+    all elements of pname:pBindings must: not have a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-08001]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+    pname:flags must: also contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-08002]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then
+    pname:flags must: not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-08003]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then
+    pname:flags must: not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE
+endif::VK_VALVE_mutable_descriptor_type[]
+endif::VK_EXT_descriptor_buffer[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutCreateInfo.adoc[]
+--
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+[open,refpage='VkMutableDescriptorTypeCreateInfoEXT',desc='Structure describing the list of possible active descriptor types for mutable type descriptors',type='structs',alias='VkMutableDescriptorTypeCreateInfoVALVE']
+--
+If the pname:pNext chain of a slink:VkDescriptorSetLayoutCreateInfo or
+slink:VkDescriptorPoolCreateInfo structure includes a
+slink:VkMutableDescriptorTypeCreateInfoEXT structure, then that structure
+specifies Information about the possible descriptor types for mutable
+descriptor types.
+
+The sname:VkMutableDescriptorTypeCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMutableDescriptorTypeCreateInfoEXT.adoc[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+or the equivalent
+
+include::{generated}/api/structs/VkMutableDescriptorTypeCreateInfoVALVE.adoc[]
+endif::VK_VALVE_mutable_descriptor_type[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mutableDescriptorTypeListCount is the number of elements in
+    pname:pMutableDescriptorTypeLists.
+  * pname:pMutableDescriptorTypeLists is a pointer to an array of
+    sname:VkMutableDescriptorTypeListEXT structures.
+
+If pname:mutableDescriptorTypeListCount is zero or if this structure is not
+included in the pname:pNext chain, the slink:VkMutableDescriptorTypeListEXT
+for each element is considered to be zero or `NULL` for each member.
+Otherwise, the descriptor set layout binding at
+slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings[i] uses the
+descriptor type lists in
+slink:VkMutableDescriptorTypeCreateInfoEXT::pname:pMutableDescriptorTypeLists[i].
+
+include::{generated}/validity/structs/VkMutableDescriptorTypeCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkMutableDescriptorTypeListEXT',desc='Structure describing descriptor types that a given descriptor may mutate to',type='structs',alias='VkMutableDescriptorTypeListVALVE']
+--
+The list of potential descriptor types a given mutable descriptor can:
+mutate to is passed in a sname:VkMutableDescriptorTypeListEXT structure.
+
+The sname:VkMutableDescriptorTypeListEXT structure is defined as:
+
+include::{generated}/api/structs/VkMutableDescriptorTypeListEXT.adoc[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+or the equivalent
+
+include::{generated}/api/structs/VkMutableDescriptorTypeListVALVE.adoc[]
+endif::VK_VALVE_mutable_descriptor_type[]
+
+  * pname:descriptorTypeCount is the number of elements in
+    pname:pDescriptorTypes.
+  * pname:pDescriptorTypes is `NULL` or a pointer to an array of
+    pname:descriptorTypeCount elink:VkDescriptorType values defining which
+    descriptor types a given binding may mutate to.
+
+.Valid Usage
+****
+  * [[VUID-VkMutableDescriptorTypeListEXT-descriptorTypeCount-04597]]
+    pname:descriptorTypeCount must: not be `0` if the corresponding binding
+    is of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04598]]
+    pname:pDescriptorTypes must: be a valid pointer to an array of
+    pname:descriptorTypeCount valid, unique elink:VkDescriptorType values if
+    the given binding is of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT type
+  * [[VUID-VkMutableDescriptorTypeListEXT-descriptorTypeCount-04599]]
+    pname:descriptorTypeCount must: be `0` if the corresponding binding is
+    not of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04600]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04601]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+  * [[VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04602]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04603]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkMutableDescriptorTypeListEXT.adoc[]
+--
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+[open,refpage='VkDescriptorSetLayoutCreateFlagBits',desc='Bitmask specifying descriptor set layout properties',type='enums']
+--
+Bits which can: be set in
+slink:VkDescriptorSetLayoutCreateInfo::pname:flags, specifying options for
+descriptor set layout, are:
+
+include::{generated}/api/enums/VkDescriptorSetLayoutCreateFlagBits.adoc[]
+
+ifdef::VK_KHR_push_descriptor[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR specifies
+    that descriptor sets must: not be allocated using this layout, and
+    descriptors are instead pushed by flink:vkCmdPushDescriptorSetKHR.
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+// Jon: "UpdateAfterBind" is a vague reference, should be more precise /
+// link to the right specification area
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+    specifies that descriptor sets using this layout must: be allocated from
+    a descriptor pool created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
+    Descriptor set layouts created with this bit set have alternate limits
+    for the maximum number of descriptors per-stage and per-pipeline layout.
+    The non-UpdateAfterBind limits only count descriptors in sets created
+    without this flag.
+    The UpdateAfterBind limits count all descriptors, but the limits may: be
+    higher than the non-UpdateAfterBind limits.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_NV_device_generated_commands_compute[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV specifies
+    that descriptor sets using this layout allows them to be bound with
+    compute pipelines that are created with
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV flag set to be used in
+    <<device-generated-commands,Device-Generated Commands>>.
+endif::VK_NV_device_generated_commands_compute[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+    specifies that this layout must: only be used with descriptor buffers.
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT
+    specifies that this is a layout only containing immutable samplers that
+    can: be bound by flink:vkCmdBindDescriptorBufferEmbeddedSamplersEXT.
+    Unlike normal immutable samplers, embedded immutable samplers do not
+    require the application to provide them in a descriptor buffer.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT specifies
+    that descriptor sets using this layout must: be allocated from a
+    descriptor pool created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set.
+    Descriptor set layouts created with this bit have no expressible limit
+    for maximum number of descriptors per-stage.
+    Host descriptor sets are limited only by available host memory, but may:
+    be limited for implementation specific reasons.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Implementations may: limit the number of supported descriptors to
+    UpdateAfterBind limits or non-UpdateAfterBind limits, whichever is
+    larger.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Implementations may: limit the number of supported descriptors to
+    non-UpdateAfterBind limits.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+ifndef::VK_KHR_push_descriptor[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_KHR_push_descriptor[]
+--
+
+[open,refpage='VkDescriptorSetLayoutCreateFlags',desc='Bitmask of VkDescriptorSetLayoutCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorSetLayoutCreateFlags.adoc[]
+
+tname:VkDescriptorSetLayoutCreateFlags is a bitmask type for setting a mask
+of zero or more elink:VkDescriptorSetLayoutCreateFlagBits.
+--
+
+[open,refpage='VkDescriptorSetLayoutBinding',desc='Structure specifying a descriptor set layout binding',type='structs']
+--
+The sname:VkDescriptorSetLayoutBinding structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorSetLayoutBinding.adoc[]
+
+  * pname:binding is the binding number of this entry and corresponds to a
+    resource of the same binding number in the shader stages.
+  * pname:descriptorType is a elink:VkDescriptorType specifying which type
+    of resource descriptors are used for this binding.
+  * pname:descriptorCount is the number of descriptors contained in the
+    binding, accessed in a shader as an
+ifndef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[array.]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    array, except if pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK in which case
+    pname:descriptorCount is the size in bytes of the inline uniform block.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If pname:descriptorCount is zero this binding entry is reserved and the
+    resource must: not be accessed from any stage via this binding within
+    any pipeline using the set layout.
+  * pname:stageFlags member is a bitmask of elink:VkShaderStageFlagBits
+    specifying which pipeline shader stages can: access a resource for this
+    binding.
+    ename:VK_SHADER_STAGE_ALL is a shorthand specifying that all defined
+    shader stages, including any additional stages defined by extensions,
+    can: access the resource.
++
+If a shader stage is not included in pname:stageFlags, then a resource must:
+not be accessed from that stage via this binding within any pipeline using
+the set layout.
+Other than input attachments which are limited to the fragment shader, there
+are no limitations on what combinations of stages can: use a descriptor
+binding, and in particular a binding can: be used by both graphics stages
+and the compute stage.
+  * pname:pImmutableSamplers affects initialization of samplers.
+    If pname:descriptorType specifies a ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER type descriptor, then
+    pname:pImmutableSamplers can: be used to initialize a set of _immutable
+    samplers_.
+    Immutable samplers are permanently bound into the set layout and must:
+    not be changed; updating a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor
+    with immutable samplers is not allowed and updates to a
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor with
+    immutable samplers does not modify the samplers (the image views are
+    updated, but the sampler updates are ignored).
+    If pname:pImmutableSamplers is not `NULL`, then it is a pointer to an
+    array of sampler handles that will be copied into the set layout and
+    used for the corresponding binding.
+    Only the sampler handles are copied; the sampler objects must: not be
+    destroyed before the final use of the set layout and any descriptor
+    pools and sets created using it.
+    If pname:pImmutableSamplers is `NULL`, then the sampler slots are
+    dynamic and sampler handles must: be bound into descriptor sets using
+    this layout.
+    If pname:descriptorType is not one of these descriptor types, then
+    pname:pImmutableSamplers is ignored.
+
+The above layout definition allows the descriptor bindings to be specified
+sparsely such that not all binding numbers between 0 and the maximum binding
+number need to be specified in the pname:pBindings array.
+Bindings that are not specified have a pname:descriptorCount and
+pname:stageFlags of zero, and the value of pname:descriptorType is
+undefined:.
+However, all binding numbers between 0 and the maximum binding number in the
+slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings array may: consume
+memory in the descriptor set layout even if not all descriptor bindings are
+used, though it should: not consume additional memory from the descriptor
+pool.
+
+[NOTE]
+.Note
+====
+The maximum binding number specified should: be as compact as possible to
+avoid wasted memory.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-00282]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
+    pname:descriptorCount is not `0` and pname:pImmutableSamplers is not
+    `NULL`, pname:pImmutableSamplers must: be a valid pointer to an array of
+    pname:descriptorCount valid sname:VkSampler handles
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04604]]
+    If the <<features-inlineUniformBlock, pname:inlineUniformBlock>> feature
+    is not enabled, pname:descriptorType must: not be
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-02209]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+    then pname:descriptorCount must: be a multiple of `4`
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-08004]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+ifdef::VK_EXT_descriptor_buffer[]
+    and slink:VkDescriptorSetLayoutCreateInfo::pname:flags does not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+    then pname:descriptorCount must: be less than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockProperties::pname:maxInlineUniformBlockSize
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkDescriptorSetLayoutBinding-flags-08005]]
+    If slink:VkDescriptorSetLayoutCreateInfo::pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+    pname:descriptorType must: be ename:VK_DESCRIPTOR_TYPE_SAMPLER
+  * [[VUID-VkDescriptorSetLayoutBinding-flags-08006]]
+    If slink:VkDescriptorSetLayoutCreateInfo::pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+    pname:descriptorCount must: less than or equal to `1`
+  * [[VUID-VkDescriptorSetLayoutBinding-flags-08007]]
+    If slink:VkDescriptorSetLayoutCreateInfo::pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+    and pname:descriptorCount is equal to `1`, pname:pImmutableSamplers
+    must: not be `NULL`
+endif::VK_EXT_descriptor_buffer[]
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283]]
+    If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid
+    combination of elink:VkShaderStageFlagBits values
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-01510]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and
+    pname:descriptorCount is not `0`, then pname:stageFlags must: be `0` or
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT
+ifdef::VK_EXT_custom_border_color[]
+  * [[VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009]]
+    The sampler objects indicated by pname:pImmutableSamplers must: not have
+    a pname:borderColor with one of the values
+    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
+endif::VK_EXT_custom_border_color[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04605]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then
+    sname:pImmutableSamplers must: be `NULL`
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkDescriptorSetLayoutBinding-binding-05012]]
+    pname:binding must: be less than the value of
+    slink:VkDeviceObjectReservationCreateInfo::pname:descriptorSetLayoutBindingLimit
+    provided when the device was created
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutBinding.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[open,refpage='VkDescriptorSetLayoutBindingFlagsCreateInfo',desc='Structure specifying creation flags for descriptor set layout bindings',type='structs',alias='VkDescriptorSetLayoutBindingFlagsCreateInfoEXT']
+--
+If the pname:pNext chain of a slink:VkDescriptorSetLayoutCreateInfo
+structure includes a slink:VkDescriptorSetLayoutBindingFlagsCreateInfo
+structure, then that structure includes an array of flags, one for each
+descriptor set layout binding.
+
+The slink:VkDescriptorSetLayoutBindingFlagsCreateInfo structure is defined
+as:
+
+include::{generated}/api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfo.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfoEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:bindingCount is zero or the number of elements in
+    pname:pBindingFlags.
+  * pname:pBindingFlags is a pointer to an array of
+    tlink:VkDescriptorBindingFlags bitfields, one for each descriptor set
+    layout binding.
+
+If pname:bindingCount is zero or if this structure is not included in the
+pname:pNext chain, the tlink:VkDescriptorBindingFlags for each descriptor
+set layout binding is considered to be zero.
+Otherwise, the descriptor set layout binding at
+slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings[i] uses the flags in
+pname:pBindingFlags[i].
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-bindingCount-03002]]
+    If pname:bindingCount is not zero, pname:bindingCount must: equal
+    slink:VkDescriptorSetLayoutCreateInfo::pname:bindingCount
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-flags-03003]]
+    If slink:VkDescriptorSetLayoutCreateInfo::pname:flags includes
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
+    elements of pname:pBindingFlags must: not include
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, or
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
+endif::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004]]
+    If an element of pname:pBindingFlags includes
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then all
+    other elements of slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings
+    must: have a smaller value of pname:binding
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-09379]]
+    If an element of pname:pBindingFlags includes
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then it must:
+    be the element with the the highest pname:binding number
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUniformBufferUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingSampledImageUpdateAfterBind-03006]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingSampledImageUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageImageUpdateAfterBind-03007]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageImageUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageBufferUpdateAfterBind-03008]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageBufferUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformTexelBufferUpdateAfterBind-03009]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUniformTexelBufferUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTexelBufferUpdateAfterBind-03010]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingStorageTexelBufferUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211]]
+    If
+    slink:VkPhysicalDeviceInlineUniformBlockFeatures::pname:descriptorBindingInlineUniformBlockUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingAccelerationStructureUpdateAfterBind-03570]]
+    If
+    slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:descriptorBindingAccelerationStructureUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+endif::VK_KHR_acceleration_structure[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-None-03011]]
+    All bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUpdateUnusedWhilePending-03012]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingUpdateUnusedWhilePending
+    is not enabled, all elements of pname:pBindingFlags must: not include
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingPartiallyBound-03013]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingPartiallyBound
+    is not enabled, all elements of pname:pBindingFlags must: not include
+    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingVariableDescriptorCount-03014]]
+    If
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingVariableDescriptorCount
+    is not enabled, all elements of pname:pBindingFlags must: not include
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03015]]
+    If an element of pname:pBindingFlags includes
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, that
+    element's pname:descriptorType must: not be
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+****
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutBindingFlagsCreateInfo.adoc[]
+--
+
+[open,refpage='VkDescriptorBindingFlagBits',desc='Bitmask specifying descriptor set layout binding properties',type='enums',alias='VkDescriptorBindingFlagBitsEXT']
+--
+Bits which can: be set in each element of
+slink:VkDescriptorSetLayoutBindingFlagsCreateInfo::pname:pBindingFlags,
+specifying options for the corresponding descriptor set layout binding, are:
+
+include::{generated}/api/enums/VkDescriptorBindingFlagBits.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/enums/VkDescriptorBindingFlagBitsEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+// Used below for VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+:maxBlockSize: <<limits-maxInlineUniformBlockSize, pname:maxInlineUniformBlockSize>>
+:maxTotalSize: <<limits-maxInlineUniformTotalSize, pname:maxInlineUniformTotalSize>>
+
+  * ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT indicates that if
+    descriptors in this binding are updated between when the descriptor set
+    is bound in a command buffer and when that command buffer is submitted
+    to a queue, then the submission will use the most recently set
+    descriptors for this binding and the updates do not invalidate the
+    command buffer.
+    Descriptor bindings created with this flag are also partially exempt
+    from the external synchronization requirement in
+ifdef::VK_KHR_descriptor_update_template[]
+    flink:vkUpdateDescriptorSetWithTemplateKHR and
+endif::VK_KHR_descriptor_update_template[]
+    flink:vkUpdateDescriptorSets.
+    Multiple descriptors with this flag set can: be updated concurrently in
+    different threads, though the same descriptor must: not be updated
+    concurrently by two threads.
+    Descriptors with this flag set can: be updated concurrently with the set
+    being bound to a command buffer in another thread, but not concurrently
+    with the set being reset or freed.
+  * ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT indicates that
+    descriptors in this binding that are not _dynamically used_ need not
+    contain valid descriptors at the time the descriptors are consumed.
+    A descriptor is dynamically used if any shader invocation executes an
+    instruction that performs any memory access using the descriptor.
+    If a descriptor is not dynamically used, any resource referenced by the
+    descriptor is not considered to be referenced during command execution.
+  * ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT indicates
+    that descriptors in this binding can: be updated after a command buffer
+    has bound this descriptor set, or while a command buffer that uses this
+    descriptor set is pending execution, as long as the descriptors that are
+    updated are not used by those command buffers.
+    Descriptor bindings created with this flag are also partially exempt
+    from the external synchronization requirement in
+    flink:vkUpdateDescriptorSetWithTemplateKHR and
+    flink:vkUpdateDescriptorSets in the same way as for
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
+    If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT is also set, then
+    descriptors can: be updated as long as they are not dynamically used by
+    any shader invocations.
+    If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT is not set, then
+    descriptors can: be updated as long as they are not statically used by
+    any shader invocations.
+  * ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT indicates that
+    this is a _variable-sized descriptor binding_ whose size will be
+    specified when a descriptor set is allocated using this layout.
+    The value of pname:descriptorCount is treated as an upper bound on the
+    size of the binding.
+    This must: only be used for the last binding in the descriptor set
+    layout (i.e. the binding with the largest value of pname:binding).
+    For the purposes of counting against limits such as
+    pname:maxDescriptorSet* and pname:maxPerStageDescriptor*, the full value
+    of pname:descriptorCount is
+ifndef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[counted.]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    counted, except for descriptor bindings with a descriptor type of
+ifndef::VK_EXT_descriptor_buffer[]
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_descriptor_buffer[]
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, when
+    slink:VkDescriptorSetLayoutCreateInfo::pname:flags does not contain
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT.
+endif::VK_EXT_descriptor_buffer[]
+    In this case, pname:descriptorCount specifies the upper bound on the
+    byte size of the binding; thus it counts against the
+ifdef::VK_VERSION_1_3+VK_EXT_inline_uniform_block[{maxBlockSize} and {maxTotalSize} limits]
+ifndef::VK_VERSION_1_3[{maxBlockSize} limit]
+ifndef::VK_EXT_inline_uniform_block[{maxTotalSize} limit]
+instead.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+[NOTE]
+.Note
+====
+Note that while ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT and
+ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT both involve
+updates to descriptor sets after they are bound,
+ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT is a weaker
+requirement since it is only about descriptors that are not used, whereas
+ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT requires the
+implementation to observe updates to descriptors that are used.
+====
+--
+
+[open,refpage='VkDescriptorBindingFlags',desc='Bitmask of VkDescriptorBindingFlagBits',type='flags',alias='VkDescriptorBindingFlagsEXT']
+--
+include::{generated}/api/flags/VkDescriptorBindingFlags.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/flags/VkDescriptorBindingFlagsEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+tname:VkDescriptorBindingFlags is a bitmask type for setting a mask of zero
+or more elink:VkDescriptorBindingFlagBits.
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
+[open,refpage='vkGetDescriptorSetLayoutSupport',desc='Query whether a descriptor set layout can be created',type='protos']
+--
+To query information about whether a descriptor set layout can: be created,
+call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetDescriptorSetLayoutSupport.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_maintenance3[or the equivalent command]
+
+ifdef::VK_KHR_maintenance3[]
+include::{generated}/api/protos/vkGetDescriptorSetLayoutSupportKHR.adoc[]
+endif::VK_KHR_maintenance3[]
+
+  * pname:device is the logical device that would create the descriptor set
+    layout.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkDescriptorSetLayoutCreateInfo structure specifying the state of
+    the descriptor set layout object.
+  * pname:pSupport is a pointer to a slink:VkDescriptorSetLayoutSupport
+    structure, in which information about support for the descriptor set
+    layout object is returned.
+
+Some implementations have limitations on what fits in a descriptor set which
+are not easily expressible in terms of existing limits like
+pname:maxDescriptorSet*, for example if all descriptor types share a limited
+space in memory but each descriptor is a different size or alignment.
+This command returns information about whether a descriptor set satisfies
+this limit.
+If the descriptor set layout satisfies the
+slink:VkPhysicalDeviceMaintenance3Properties::pname:maxPerSetDescriptors
+limit, this command is guaranteed to return ename:VK_TRUE in
+slink:VkDescriptorSetLayoutSupport::pname:supported.
+If the descriptor set layout exceeds the
+slink:VkPhysicalDeviceMaintenance3Properties::pname:maxPerSetDescriptors
+limit, whether the descriptor set layout is supported is
+implementation-dependent and may: depend on whether the descriptor sizes and
+alignments cause the layout to exceed an internal limit.
+
+This command does not consider other limits such as
+pname:maxPerStageDescriptor*, and so a descriptor set layout that is
+supported according to this command must: still satisfy the pipeline layout
+limits such as pname:maxPerStageDescriptor* in order to be used in a
+pipeline layout.
+
+[NOTE]
+.Note
+====
+This is a sname:VkDevice query rather than sname:VkPhysicalDevice because
+the answer may: depend on enabled features.
+====
+
+include::{generated}/validity/protos/vkGetDescriptorSetLayoutSupport.adoc[]
+--
+
+[open,refpage='VkDescriptorSetLayoutSupport',desc='Structure returning information about whether a descriptor set layout can be supported',type='structs']
+--
+Information about support for the descriptor set layout is returned in a
+sname:VkDescriptorSetLayoutSupport structure:
+
+include::{generated}/api/structs/VkDescriptorSetLayoutSupport.adoc[]
+
+ifdef::VK_KHR_maintenance3[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetLayoutSupportKHR.adoc[]
+endif::VK_KHR_maintenance3[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:supported specifies whether the descriptor set layout can: be
+    created.
+
+pname:supported is set to ename:VK_TRUE if the descriptor set can: be
+created, or else is set to ename:VK_FALSE.
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutSupport.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[open,refpage='VkDescriptorSetVariableDescriptorCountLayoutSupport',desc='Structure returning information about whether a descriptor set layout can be supported',type='structs',alias='VkDescriptorSetVariableDescriptorCountLayoutSupportEXT']
+--
+If the pname:pNext chain of a slink:VkDescriptorSetLayoutSupport structure
+includes a sname:VkDescriptorSetVariableDescriptorCountLayoutSupport
+structure, then that structure returns additional information about whether
+the descriptor set layout is supported.
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupport.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupportEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxVariableDescriptorCount indicates the maximum number of
+    descriptors supported in the highest numbered binding of the layout, if
+    that binding is variable-sized.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the highest numbered binding of the layout has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+    pname:maxVariableDescriptorCount indicates the maximum byte size
+    supported for the binding, if that binding is variable-sized.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+If the slink:VkDescriptorSetLayoutCreateInfo structure specified in
+flink:vkGetDescriptorSetLayoutSupport::pname:pCreateInfo includes a
+variable-sized descriptor, then pname:supported is determined assuming the
+requested size of the variable-sized descriptor, and
+pname:maxVariableDescriptorCount is set to the maximum size of that
+descriptor that can: be successfully created (which is greater than or equal
+to the requested size passed in).
+If the slink:VkDescriptorSetLayoutCreateInfo structure does not include a
+variable-sized descriptor, or if the
+slink:VkPhysicalDeviceDescriptorIndexingFeatures::pname:descriptorBindingVariableDescriptorCount
+feature is not enabled, then pname:maxVariableDescriptorCount is set to
+zero.
+For the purposes of this command, a variable-sized descriptor binding with a
+pname:descriptorCount of zero is treated as having a pname:descriptorCount
+of
+ifndef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[one,]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+four if pname:descriptorType is
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, or one otherwise,
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+and thus the binding is not ignored and the maximum descriptor count will be
+returned.
+If the layout is not supported, then the value written to
+pname:maxVariableDescriptorCount is undefined:.
+
+include::{generated}/validity/structs/VkDescriptorSetVariableDescriptorCountLayoutSupport.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+The following examples show a shader snippet using two descriptor sets, and
+application code that creates corresponding descriptor set layouts.
+
+.GLSL example
+[source,glsl]
+----
+//
+// binding to a single sampled image descriptor in set 0
+//
+layout (set=0, binding=0) uniform texture2D mySampledImage;
+
+//
+// binding to an array of sampled image descriptors in set 0
+//
+layout (set=0, binding=1) uniform texture2D myArrayOfSampledImages[12];
+
+//
+// binding to a single uniform buffer descriptor in set 1
+//
+layout (set=1, binding=0) uniform myUniformBuffer
+{
+    vec4 myElement[32];
+};
+----
+
+.SPIR-V example
+[source,spirv]
+----
+               ...
+          %1 = OpExtInstImport "GLSL.std.450"
+               ...
+               OpName %9 "mySampledImage"
+               OpName %14 "myArrayOfSampledImages"
+               OpName %18 "myUniformBuffer"
+               OpMemberName %18 0 "myElement"
+               OpName %20 ""
+               OpDecorate %9 DescriptorSet 0
+               OpDecorate %9 Binding 0
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 1
+               OpDecorate %20 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeImage %6 2D 0 0 0 1 Unknown
+          %8 = OpTypePointer UniformConstant %7
+          %9 = OpVariable %8 UniformConstant
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 12
+         %12 = OpTypeArray %7 %11
+         %13 = OpTypePointer UniformConstant %12
+         %14 = OpVariable %13 UniformConstant
+         %15 = OpTypeVector %6 4
+         %16 = OpConstant %10 32
+         %17 = OpTypeArray %15 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+               ...
+----
+
+.API example
+[source,c++]
+----
+VkResult myResult;
+
+const VkDescriptorSetLayoutBinding myDescriptorSetLayoutBinding[] =
+{
+    // binding to a single image descriptor
+    {
+        .binding = 0,
+        .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+        .descriptorCount = 1,
+        .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .pImmutableSamplers = NULL
+    },
+
+    // binding to an array of image descriptors
+    {
+        .binding = 1,
+        .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+        .descriptorCount = 12,
+        .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .pImmutableSamplers = NULL
+    },
+
+    // binding to a single uniform buffer descriptor
+    {
+        .binding = 0,
+        .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+        .descriptorCount = 1,
+        .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .pImmutableSamplers = NULL
+    }
+};
+
+const VkDescriptorSetLayoutCreateInfo myDescriptorSetLayoutCreateInfo[] =
+{
+    // Information for first descriptor set with two descriptor bindings
+    {
+        .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+        .pNext = NULL,
+        .flags = 0,
+        .bindingCount = 2,
+        .pBindings = &myDescriptorSetLayoutBinding[0]
+    },
+
+    // Information for second descriptor set with one descriptor binding
+    {
+        .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+        .pNext = NULL,
+        .flags = 0,
+        .bindingCount = 1,
+        .pBindings = &myDescriptorSetLayoutBinding[2]
+    }
+};
+
+VkDescriptorSetLayout myDescriptorSetLayout[2];
+
+//
+// Create first descriptor set layout
+//
+myResult = vkCreateDescriptorSetLayout(
+    myDevice,
+    &myDescriptorSetLayoutCreateInfo[0],
+    NULL,
+    &myDescriptorSetLayout[0]);
+
+//
+// Create second descriptor set layout
+//
+myResult = vkCreateDescriptorSetLayout(
+    myDevice,
+    &myDescriptorSetLayoutCreateInfo[1],
+    NULL,
+    &myDescriptorSetLayout[1]);
+----
+
+[open,refpage='vkDestroyDescriptorSetLayout',desc='Destroy a descriptor set layout object',type='protos']
+--
+To destroy a descriptor set layout, call:
+
+include::{generated}/api/protos/vkDestroyDescriptorSetLayout.adoc[]
+
+  * pname:device is the logical device that destroys the descriptor set
+    layout.
+  * pname:descriptorSetLayout is the descriptor set layout to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:descriptorSetLayout was created, a compatible set of callbacks
+    must: be provided here
+  * [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:descriptorSetLayout was created, pname:pAllocator must: be `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyDescriptorSetLayout.adoc[]
+--
+
+
+[[descriptorsets-pipelinelayout]]
+=== Pipeline Layouts
+
+[open,refpage='VkPipelineLayout',desc='Opaque handle to a pipeline layout object',type='handles']
+--
+Access to descriptor sets from a pipeline is accomplished through a
+_pipeline layout_.
+Zero or more descriptor set layouts and zero or more push constant ranges
+are combined to form a pipeline layout object describing the complete set of
+resources that can: be accessed by a pipeline.
+The pipeline layout represents a sequence of descriptor sets with each
+having a specific layout.
+This sequence of layouts is used to determine the interface between shader
+stages and shader resources.
+Each pipeline is created using a pipeline layout.
+
+Pipeline layout objects are represented by sname:VkPipelineLayout handles:
+
+include::{generated}/api/handles/VkPipelineLayout.adoc[]
+--
+
+[open,refpage='vkCreatePipelineLayout',desc='Creates a new pipeline layout object',type='protos']
+--
+:refpage: vkCreatePipelineLayout
+:objectnameplural: pipeline layouts
+:objectnamecamelcase: pipelineLayout
+:objectcount: 1
+
+To create a pipeline layout, call:
+
+include::{generated}/api/protos/vkCreatePipelineLayout.adoc[]
+
+  * pname:device is the logical device that creates the pipeline layout.
+  * pname:pCreateInfo is a pointer to a slink:VkPipelineLayoutCreateInfo
+    structure specifying the state of the pipeline layout object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelineLayout is a pointer to a slink:VkPipelineLayout handle in
+    which the resulting pipeline layout object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreatePipelineLayout.adoc[]
+--
+
+[open,refpage='VkPipelineLayoutCreateInfo',desc='Structure specifying the parameters of a newly created pipeline layout object',type='structs']
+--
+The slink:VkPipelineLayoutCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineLayoutCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineLayoutCreateFlagBits
+    specifying options for pipeline layout creation.
+  * pname:setLayoutCount is the number of descriptor sets included in the
+    pipeline layout.
+  * pname:pSetLayouts is a pointer to an array of
+    sname:VkDescriptorSetLayout objects.
+  * pname:pushConstantRangeCount is the number of push constant ranges
+    included in the pipeline layout.
+  * pname:pPushConstantRanges is a pointer to an array of
+    sname:VkPushConstantRange structures defining a set of push constant
+    ranges for use in a single pipeline layout.
+    In addition to descriptor set layouts, a pipeline layout also describes
+    how many push constants can: be accessed by each stage of the pipeline.
++
+[NOTE]
+.Note
+====
+Push constants represent a high speed path to modify constant data in
+pipelines that is expected to outperform memory-backed resource updates.
+====
+
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, the pipeline compilation process occurs
+<<pipelines-offline-compilation,offline>>, but the application must: still
+provide values to sname:VkPipelineLayoutCreateInfo that match the values
+used for offline compilation of pipelines using this slink:VkPipelineLayout.
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286]]
+    pname:setLayoutCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03016]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03017]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+    and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03018]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+    and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-06939]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+ifdef::VK_QCOM_image_processing[]
+    ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,
+    ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,
+endif::VK_QCOM_image_processing[]
+    and ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03020]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03021]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+    accessible to any given shader stage across all elements of
+    pname:pSetLayouts must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorInputAttachments
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02214]]
+    The total number of bindings in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    and
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible to any given
+    shader stage across all elements of pname:pSetLayouts, must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockProperties::pname:maxPerStageDescriptorInlineUniformBlocks
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03022]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03023]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03024]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03025]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03026]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03027]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02215]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible to any given
+    shader stage across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockProperties::pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03028]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03029]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+    accessible across all shader stages and across all elements of
+    pname:pSetLayouts must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03030]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03031]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+    accessible across all shader stages and across all elements of
+    pname:pSetLayouts must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03032]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03033]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03034]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03035]]
+    The total number of descriptors in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+    accessible across all shader stages and across all elements of
+    pname:pSetLayouts must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02216]]
+    The total number of bindings in descriptor set layouts
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockProperties::pname:maxDescriptorSetInlineUniformBlocks
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
+    stages and across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
+    stages and across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
+    stages and across all elements of pname:pSetLayouts must: be less than
+    or equal to
+    sname:VkPhysicalDeviceDescriptorIndexingProperties::pname:maxDescriptorSetUpdateAfterBindInputAttachments
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02217]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockProperties::pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_3[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-06531]]
+    The total number of descriptors with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceVulkan13Properties::pname:maxInlineUniformTotalSize
+endif::VK_VERSION_1_3[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292]]
+    Any two elements of pname:pPushConstantRanges must: not include the same
+    stage in pname:stageFlags
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293]]
+    pname:pSetLayouts must: not contain more than one descriptor set layout
+    that was created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03571]]
+    The total number of bindings in descriptor set layouts created without
+    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPerStageDescriptorAccelerationStructures
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03572]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03573]]
+    The total number of bindings in descriptor set layouts created without
+    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across
+    all shader stages and across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxDescriptorSetAccelerationStructures
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03574]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across
+    all shader stages and across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02381]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxDescriptorSetAccelerationStructures
+endif::VK_NV_ray_tracing[]
+ifdef::VK_EXT_fragment_density_map2[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pImmutableSamplers-03566]]
+    The total number of pname:pImmutableSamplers created with pname:flags
+    containing ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT or
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT across
+    all shader stages and across all elements of pname:pSetLayouts must: be
+    less than or equal to <<limits-maxDescriptorSetSubsampledSamplers,
+    sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:maxDescriptorSetSubsampledSamplers>>
+endif::VK_EXT_fragment_density_map2[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-04606]]
+    Any element of pname:pSetLayouts must: not have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT bit set
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkPipelineLayoutCreateInfo-graphicsPipelineLibrary-06753]]
+ifdef::VK_EXT_graphics_pipeline_library[]
+    If <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
+    is not enabled, elements
+endif::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_graphics_pipeline_library[Elements]
+    of pname:pSetLayouts must: be valid slink:VkDescriptorSetLayout objects
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-08008]]
+    If any element of pname:pSetLayouts was created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set,
+    all elements of pname:pSetLayouts must: have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set
+endif::VK_EXT_descriptor_buffer[]
+****
+
+include::{generated}/validity/structs/VkPipelineLayoutCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineLayoutCreateFlagBits',desc='Pipeline layout creation flag bits',type='enums']
+--
+include::{generated}/api/enums/VkPipelineLayoutCreateFlagBits.adoc[]
+
+ifndef::VK_EXT_graphics_pipeline_library[]
+All values for this enum are defined by extensions.
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT specifies that
+    implementations must: ensure that the properties and/or absence of a
+    particular descriptor set do not influence any other properties of the
+    pipeline layout.
+    This allows pipelines libraries linked without
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT to be created
+    with a subset of the total descriptor sets.
+endif::VK_EXT_graphics_pipeline_library[]
+--
+
+[open,refpage='VkPipelineLayoutCreateFlags',desc='Bitmask of pipeline layout creation flag bits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineLayoutCreateFlags.adoc[]
+
+tname:VkPipelineLayoutCreateFlags is a bitmask type for setting a mask of
+elink:VkPipelineLayoutCreateFlagBits.
+--
+
+[open,refpage='VkPushConstantRange',desc='Structure specifying a push constant range',type='structs']
+--
+The sname:VkPushConstantRange structure is defined as:
+
+include::{generated}/api/structs/VkPushConstantRange.adoc[]
+
+  * pname:stageFlags is a set of stage flags describing the shader stages
+    that will access a range of push constants.
+    If a particular stage is not included in the range, then accessing
+    members of that range of push constants from the corresponding shader
+    stage will return undefined: values.
+  * pname:offset and pname:size are the start offset and size, respectively,
+    consumed by the range.
+    Both pname:offset and pname:size are in units of bytes and must: be a
+    multiple of 4.
+    The layout of the push constant variables is specified in the shader.
+
+.Valid Usage
+****
+  * [[VUID-VkPushConstantRange-offset-00294]]
+    pname:offset must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
+  * [[VUID-VkPushConstantRange-offset-00295]]
+    pname:offset must: be a multiple of `4`
+  * [[VUID-VkPushConstantRange-size-00296]]
+    pname:size must: be greater than `0`
+  * [[VUID-VkPushConstantRange-size-00297]]
+    pname:size must: be a multiple of `4`
+  * [[VUID-VkPushConstantRange-size-00298]]
+    pname:size must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
+    pname:offset
+****
+
+include::{generated}/validity/structs/VkPushConstantRange.adoc[]
+--
+
+Once created, pipeline layouts are used as part of pipeline creation (see
+<<pipelines, Pipelines>>), as part of binding descriptor sets (see
+<<descriptorsets-binding, Descriptor Set Binding>>), and as part of setting
+push constants (see <<descriptorsets-push-constants, Push Constant
+Updates>>).
+Pipeline creation accepts a pipeline layout as input, and the layout may: be
+used to map (set, binding, arrayElement) tuples to implementation resources
+or memory locations within a descriptor set.
+The assignment of implementation resources depends only on the bindings
+defined in the descriptor sets that comprise the pipeline layout, and not on
+any shader source.
+
+[[descriptorsets-pipelinelayout-consistency]]
+All resource variables <<shaders-staticuse,statically used>> in all shaders
+in a pipeline must: be declared with a (set, binding, arrayElement) that
+exists in the corresponding descriptor set layout and is of an appropriate
+descriptor type and includes the set of shader stages it is used by in
+pname:stageFlags.
+The pipeline layout can: include entries that are not used by a particular
+pipeline.
+The pipeline layout allows the application to provide a consistent set of
+bindings across multiple pipeline compiles, which enables those pipelines to
+be compiled in a way that the implementation may: cheaply switch pipelines
+without reprogramming the bindings.
+
+Similarly, the push constant block declared in each shader (if present)
+must: only place variables at offsets that are each included in a push
+constant range with pname:stageFlags including the bit corresponding to the
+shader stage that uses it.
+The pipeline layout can: include ranges or portions of ranges that are not
+used by a particular pipeline.
+
+There is a limit on the total number of resources of each type that can: be
+included in bindings in all descriptor set layouts in a pipeline layout as
+shown in <<descriptorsets-pipelinelayout-limits,Pipeline Layout Resource
+Limits>>.
+The "`Total Resources Available`" column gives the limit on the number of
+each type of resource that can: be included in bindings in all descriptor
+sets in the pipeline layout.
+Some resource types count against multiple limits.
+Additionally, there are limits on the total number of each type of resource
+that can: be used in any pipeline stage as described in
+<<interfaces-resources-limits,Shader Resource Limits>>.
+
+[[descriptorsets-pipelinelayout-limits]]
+.Pipeline Layout Resource Limits
+[width="80%",cols="<37,<22",options="header"]
+|====
+| Total Resources Available | Resource Types
+.2+<.^| pname:maxDescriptorSetSamplers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindSamplers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | sampler           | combined image sampler
+.3+<.^| pname:maxDescriptorSetSampledImages
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindSampledImages
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | sampled image     | combined image sampler | uniform texel buffer
+.2+<.^| pname:maxDescriptorSetStorageImages
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindStorageImages
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | storage image     | storage texel buffer
+.2+<.^| pname:maxDescriptorSetUniformBuffers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindUniformBuffers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | uniform buffer    | uniform buffer dynamic
+| pname:maxDescriptorSetUniformBuffersDynamic
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | uniform buffer dynamic
+.2+<.^| pname:maxDescriptorSetStorageBuffers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindStorageBuffers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | storage buffer    | storage buffer dynamic
+| pname:maxDescriptorSetStorageBuffersDynamic
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | storage buffer dynamic
+| pname:maxDescriptorSetInputAttachments
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindInputAttachments
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | input attachment
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| pname:maxDescriptorSetInlineUniformBlocks
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | inline uniform block
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+| pname:maxDescriptorSetAccelerationStructures
+ifdef::VK_KHR_acceleration_structure[]
+or pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
+endif::VK_KHR_acceleration_structure[]
+            | acceleration structure
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+|====
+
+
+[open,refpage='vkDestroyPipelineLayout',desc='Destroy a pipeline layout object',type='protos']
+--
+To destroy a pipeline layout, call:
+
+include::{generated}/api/protos/vkDestroyPipelineLayout.adoc[]
+
+  * pname:device is the logical device that destroys the pipeline layout.
+  * pname:pipelineLayout is the pipeline layout to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-00299]]
+    If sname:VkAllocationCallbacks were provided when pname:pipelineLayout
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-00300]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:pipelineLayout was created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyPipelineLayout-pipelineLayout-02004]]
+    pname:pipelineLayout must: not have been passed to any ftext:vkCmd*
+    command for any command buffers that are still in the
+    <<commandbuffers-lifecycle, recording state>> when
+    fname:vkDestroyPipelineLayout is called
+****
+
+include::{generated}/validity/protos/vkDestroyPipelineLayout.adoc[]
+--
+
+
+[[descriptorsets-compatibility]]
+==== Pipeline Layout Compatibility
+
+Two pipeline layouts are defined to be "`compatible for
+<<descriptorsets-push-constants, push constants>>`" if they were created
+with identical push constant ranges.
+Two pipeline layouts are defined to be "`compatible for set N`" if they were
+created with _identically defined_ descriptor set layouts for sets zero
+through N,
+ifdef::VK_EXT_graphics_pipeline_library[]
+if both of them either were or were not created with
+ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT,
+endif::VK_EXT_graphics_pipeline_library[]
+and if they were created with identical push constant ranges.
+
+When binding a descriptor set (see <<descriptorsets-binding, Descriptor Set
+Binding>>) to set number N, a previously bound descriptor set bound with
+lower index M than N is disturbed if the pipeline layouts for set M and N
+are not compatible for set M. Otherwise, the bound descriptor set in M is
+not disturbed.
+
+If, additionally, the previously bound descriptor set for set N was bound
+using a pipeline layout not compatible for set N, then all bindings in sets
+numbered greater than N are disturbed.
+
+When binding a pipeline, the pipeline can: correctly access any previously
+bound descriptor set N if it was bound with compatible pipeline layout for
+set N, and it was not disturbed.
+
+Layout compatibility means that descriptor sets can: be bound to a command
+buffer for use by any pipeline created with a compatible pipeline layout,
+and without having bound a particular pipeline first.
+It also means that descriptor sets can: remain valid across a pipeline
+change, and the same resources will be accessible to the newly bound
+pipeline.
+
+When a descriptor set is disturbed by binding descriptor sets, the disturbed
+set is considered to contain undefined: descriptors bound with the same
+pipeline layout as the disturbing descriptor set.
+
+ifdef::implementation-guide[]
+.Implementor's Note
+****
+A consequence of layout compatibility is that when the implementation
+compiles a pipeline layout and maps pipeline resources to implementation
+resources, the mechanism for set N should: only be a function of sets
+[0..N].
+****
+endif::implementation-guide[]
+
+
+[NOTE]
+.Note
+====
+Place the least frequently changing descriptor sets near the start of the
+pipeline layout, and place the descriptor sets representing the most
+frequently changing resources near the end.
+When pipelines are switched, only the descriptor set bindings that have been
+invalidated will need to be updated and the remainder of the descriptor set
+bindings will remain in place.
+====
+
+The maximum number of descriptor sets that can: be bound to a pipeline
+layout is queried from physical device properties (see
+pname:maxBoundDescriptorSets in <<limits, Limits>>).
+
+.API example
+[source,c++]
+----
+const VkDescriptorSetLayout layouts[] = { layout1, layout2 };
+
+const VkPushConstantRange ranges[] =
+{
+    {
+        .stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
+        .offset = 0,
+        .size = 4
+    },
+    {
+        .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .offset = 4,
+        .size = 4
+    },
+};
+
+const VkPipelineLayoutCreateInfo createInfo =
+{
+    .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+    .pNext = NULL,
+    .flags = 0,
+    .setLayoutCount = 2,
+    .pSetLayouts = layouts,
+    .pushConstantRangeCount = 2,
+    .pPushConstantRanges = ranges
+};
+
+VkPipelineLayout myPipelineLayout;
+myResult = vkCreatePipelineLayout(
+    myDevice,
+    &createInfo,
+    NULL,
+    &myPipelineLayout);
+----
+
+
+[[descriptorsets-allocation]]
+=== Allocation of Descriptor Sets
+
+[open,refpage='VkDescriptorPool',desc='Opaque handle to a descriptor pool object',type='handles']
+--
+A _descriptor pool_ maintains a pool of descriptors, from which descriptor
+sets are allocated.
+Descriptor pools are externally synchronized, meaning that the application
+must: not allocate and/or free descriptor sets from the same pool in
+multiple threads simultaneously.
+
+Descriptor pools are represented by sname:VkDescriptorPool handles:
+
+include::{generated}/api/handles/VkDescriptorPool.adoc[]
+--
+
+[open,refpage='vkCreateDescriptorPool',desc='Creates a descriptor pool object',type='protos']
+--
+:refpage: vkCreateDescriptorPool
+:objectnameplural: descriptor pools
+:objectnamecamelcase: descriptorPool
+:objectcount: 1
+
+To create a descriptor pool object, call:
+
+include::{generated}/api/protos/vkCreateDescriptorPool.adoc[]
+
+  * pname:device is the logical device that creates the descriptor pool.
+  * pname:pCreateInfo is a pointer to a slink:VkDescriptorPoolCreateInfo
+    structure specifying the state of the descriptor pool object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pDescriptorPool is a pointer to a slink:VkDescriptorPool handle in
+    which the resulting descriptor pool object is returned.
+
+The created descriptor pool is returned in pname:pDescriptorPool.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateDescriptorPool.adoc[]
+--
+
+[open,refpage='VkDescriptorPoolCreateInfo',desc='Structure specifying parameters of a newly created descriptor pool',type='structs']
+--
+Additional information about the pool is passed in a
+sname:VkDescriptorPoolCreateInfo structure:
+
+include::{generated}/api/structs/VkDescriptorPoolCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkDescriptorPoolCreateFlagBits
+    specifying certain supported operations on the pool.
+  * pname:maxSets is the maximum number of descriptor sets that can: be
+    allocated from the pool.
+  * pname:poolSizeCount is the number of elements in pname:pPoolSizes.
+  * pname:pPoolSizes is a pointer to an array of slink:VkDescriptorPoolSize
+    structures, each containing a descriptor type and number of descriptors
+    of that type to be allocated in the pool.
+
+If multiple sname:VkDescriptorPoolSize structures containing the same
+descriptor type appear in the pname:pPoolSizes array then the pool will be
+created with enough storage for the total number of descriptors of each
+type.
+
+Fragmentation of a descriptor pool is possible and may: lead to descriptor
+set allocation failures.
+A failure due to fragmentation is defined as failing a descriptor set
+allocation despite the sum of all outstanding descriptor set allocations
+from the pool plus the requested allocation requiring no more than the total
+number of descriptors requested at pool creation.
+Implementations provide certain guarantees of when fragmentation must: not
+cause allocation failure, as described below.
+
+If a descriptor pool has not had any descriptor sets freed since it was
+created or most recently reset then fragmentation must: not cause an
+allocation failure (note that this is always the case for a pool created
+without the ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT bit
+set).
+Additionally, if all sets allocated from the pool since it was created or
+most recently reset use the same number of descriptors (of each type) and
+the requested allocation also uses that same number of descriptors (of each
+type), then fragmentation must: not cause an allocation failure.
+
+If an allocation failure occurs due to fragmentation, an application can:
+create an additional descriptor pool to perform further descriptor set
+allocations.
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If pname:flags has the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
+bit set, descriptor pool creation may: fail with the error
+ename:VK_ERROR_FRAGMENTATION if the total number of descriptors across all
+pools (including this one) created with this bit set exceeds
+pname:maxUpdateAfterBindDescriptorsInAllPools, or if fragmentation of the
+underlying hardware resources occurs.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+If a pname:pPoolSizes[i]::pname:type is
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, a
+slink:VkMutableDescriptorTypeCreateInfoEXT struct in the pname:pNext chain
+can: be used to specify which mutable descriptor types can: be allocated
+from the pool.
+If included in the pname:pNext chain,
+slink:VkMutableDescriptorTypeCreateInfoEXT::pname:pMutableDescriptorTypeLists[i]
+specifies which kind of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT descriptors
+can: be allocated from this pool entry.
+If slink:VkMutableDescriptorTypeCreateInfoEXT does not exist in the
+pname:pNext chain, or
+slink:VkMutableDescriptorTypeCreateInfoEXT::pname:pMutableDescriptorTypeLists[i]
+is out of range, the descriptor pool allocates enough memory to be able to
+allocate a ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT descriptor with any
+supported elink:VkDescriptorType as a mutable descriptor.
+A mutable descriptor can: be allocated from a pool entry if the type list in
+slink:VkDescriptorSetLayoutCreateInfo is a subset of the type list declared
+in the descriptor pool, or if the pool entry is created without a descriptor
+type list.
+Multiple pname:pPoolSizes entries with ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+can: be declared.
+When multiple such pool entries are present in pname:pPoolSizes, they
+specify sets of supported descriptor types which either fully overlap,
+partially overlap, or are disjoint.
+Two sets fully overlap if the sets of supported descriptor types are equal.
+If the sets are not disjoint they partially overlap.
+A pool entry without a sname:VkMutableDescriptorTypeListEXT assigned to it
+is considered to partially overlap any other pool entry which has a
+sname:VkMutableDescriptorTypeListEXT assigned to it.
+The application must: ensure that partial overlap does not exist in
+pname:pPoolSizes.
+
+[NOTE]
+.Note
+====
+The requirement of no partial overlap is intended to resolve ambiguity for
+validation as there is no confusion which pname:pPoolSizes entries will be
+allocated from.
+An implementation is not expected to depend on this requirement.
+====
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorPoolCreateInfo-descriptorPoolOverallocation-09227]]
+ifdef::VK_NV_descriptor_pool_overallocation[]
+    If the <<features-descriptorPoolOverallocation,
+    pname:descriptorPoolOverallocation>> feature is not enabled, or
+    pname:flags does not have
+    ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV set,
+endif::VK_NV_descriptor_pool_overallocation[]
+    pname:maxSets must: be greater than `0`
+ifdef::VK_NV_descriptor_pool_overallocation[]
+  * [[VUID-VkDescriptorPoolCreateInfo-flags-09228]]
+    If pname:flags has the
+    ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV or
+    ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV bits
+    set, then <<features-descriptorPoolOverallocation,
+    pname:descriptorPoolOverallocation>> must: be enabled
+endif::VK_NV_descriptor_pool_overallocation[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorPoolCreateInfo-flags-04607]]
+    If pname:flags has the ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT
+    bit set, then the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
+    bit must: not be set
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorPoolCreateInfo-mutableDescriptorType-04608]]
+    If
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::pname:mutableDescriptorType
+    is not enabled, pname:pPoolSizes must: not contain a
+    pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkDescriptorPoolCreateInfo-flags-04609]]
+    If pname:flags has the ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT
+    bit set,
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::pname:mutableDescriptorType
+    must: be enabled
+  * [[VUID-VkDescriptorPoolCreateInfo-pPoolSizes-04787]]
+    If pname:pPoolSizes contains a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, any other
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT element in pname:pPoolSizes must:
+    not have sets of supported descriptor types which partially overlap
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkDescriptorPoolCreateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[open,refpage='VkDescriptorPoolInlineUniformBlockCreateInfo',desc='Structure specifying the maximum number of inline uniform block bindings of a newly created descriptor pool',type='structs',alias='VkDescriptorPoolInlineUniformBlockCreateInfoEXT']
+--
+In order to be able to allocate descriptor sets having
+<<descriptorsets-inlineuniformblock, inline uniform block>> bindings the
+descriptor pool must: be created with specifying the inline uniform block
+binding capacity of the descriptor pool, in addition to the total inline
+uniform data capacity in bytes which is specified through a
+slink:VkDescriptorPoolSize structure with a pname:descriptorType value of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK.
+This can: be done by adding a
+sname:VkDescriptorPoolInlineUniformBlockCreateInfo structure to the
+pname:pNext chain of slink:VkDescriptorPoolCreateInfo.
+
+The sname:VkDescriptorPoolInlineUniformBlockCreateInfo structure is defined
+as:
+
+include::{generated}/api/structs/VkDescriptorPoolInlineUniformBlockCreateInfo.adoc[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorPoolInlineUniformBlockCreateInfoEXT.adoc[]
+endif::VK_EXT_inline_uniform_block[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxInlineUniformBlockBindings is the number of inline uniform
+    block bindings to allocate.
+
+include::{generated}/validity/structs/VkDescriptorPoolInlineUniformBlockCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+[open,refpage='VkDescriptorPoolCreateFlagBits',desc='Bitmask specifying certain supported operations on a descriptor pool',type='enums']
+--
+Bits which can: be set in slink:VkDescriptorPoolCreateInfo::pname:flags,
+enabling operations on a descriptor pool, are:
+
+include::{generated}/api/enums/VkDescriptorPoolCreateFlagBits.adoc[]
+
+  * ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT specifies that
+    descriptor sets can: return their individual allocations to the pool,
+    i.e. all of flink:vkAllocateDescriptorSets, flink:vkFreeDescriptorSets,
+    and flink:vkResetDescriptorPool are allowed.
+    Otherwise, descriptor sets allocated from the pool must: not be
+    individually freed back to the pool, i.e. only
+    flink:vkAllocateDescriptorSets and flink:vkResetDescriptorPool are
+    allowed.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT specifies that
+    descriptor sets allocated from this pool can: include bindings with the
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set.
+    It is valid to allocate descriptor sets that have bindings that do not
+    set the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit from a
+    pool that has ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT set.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT specifies that this
+    descriptor pool and the descriptor sets allocated from it reside
+    entirely in host memory and cannot be bound.
+    Similar to descriptor sets allocated without this flag, applications
+    can: copy-from and copy-to descriptors sets allocated from this
+    descriptor pool.
+    Descriptor sets allocated from this pool are partially exempt from the
+    external synchronization requirement in
+ifdef::VK_KHR_descriptor_update_template[]
+    flink:vkUpdateDescriptorSetWithTemplateKHR and
+endif::VK_KHR_descriptor_update_template[]
+    flink:vkUpdateDescriptorSets.
+    Descriptor sets and their descriptors can be updated concurrently in
+    different threads, though the same descriptor must: not be updated
+    concurrently by two threads.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_NV_descriptor_pool_overallocation[]
+  * ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV
+    specifies that the implementation should allow the application to
+    allocate more than slink:VkDescriptorPoolCreateInfo::pname:maxSets
+    descriptor set objects from the descriptor pool as available resources
+    allow.
+    The implementation may: use the pname:maxSets value to allocate the
+    initial available sets, but using zero is permitted.
+  * ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV
+    specifies that the implementation should allow the application to
+    allocate more descriptors from the pool than was specified by the
+    slink:VkDescriptorPoolSize::pname:descriptorCount for any descriptor
+    type as specified by
+    slink:VkDescriptorPoolCreateInfo::pname:poolSizeCount and
+    slink:VkDescriptorPoolCreateInfo::pname:pPoolSizes, as available
+    resources allow.
+    The implementation may: use the pname:descriptorCount for each
+    descriptor type to allocate the initial pool, but the application is
+    allowed to set the pname:poolSizeCount to zero, or any of the
+    pname:descriptorCount values in the pname:pPoolSizes array to zero.
+endif::VK_NV_descriptor_pool_overallocation[]
+--
+
+[open,refpage='VkDescriptorPoolCreateFlags',desc='Bitmask of VkDescriptorPoolCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorPoolCreateFlags.adoc[]
+
+tname:VkDescriptorPoolCreateFlags is a bitmask type for setting a mask of
+zero or more elink:VkDescriptorPoolCreateFlagBits.
+--
+
+[open,refpage='VkDescriptorPoolSize',desc='Structure specifying descriptor pool size',type='structs']
+--
+The sname:VkDescriptorPoolSize structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorPoolSize.adoc[]
+
+  * pname:type is the type of descriptor.
+  * pname:descriptorCount is the number of descriptors of that type to
+    allocate.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+    pname:descriptorCount is the number of bytes to allocate for descriptors
+    of this type.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[NOTE]
+.Note
+====
+When creating a descriptor pool that will contain descriptors for combined
+image samplers of multi-planar formats, an application needs to account for
+non-trivial descriptor consumption when choosing the pname:descriptorCount
+value, as indicated by
+slink:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount.
+====
+endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorPoolSize-descriptorCount-00302]]
+    pname:descriptorCount must: be greater than `0`
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorPoolSize-type-02218]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+    pname:descriptorCount must: be a multiple of `4`
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkDescriptorPoolSize.adoc[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkDestroyDescriptorPool <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+
+Descriptor pools cannot: be destroyed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, the memory is returned to the system when the device is
+destroyed.
+
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+
+[open,refpage='vkDestroyDescriptorPool',desc='Destroy a descriptor pool object',type='protos']
+--
+To destroy a descriptor pool, call:
+
+include::{generated}/api/protos/vkDestroyDescriptorPool.adoc[]
+
+  * pname:device is the logical device that destroys the descriptor pool.
+  * pname:descriptorPool is the descriptor pool to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+When a pool is destroyed, all descriptor sets allocated from the pool are
+implicitly freed and become invalid.
+Descriptor sets allocated from a given pool do not need to be freed before
+destroying that descriptor pool.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00303]]
+    All submitted commands that refer to pname:descriptorPool (via any
+    allocated descriptor sets) must: have completed execution
+  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00304]]
+    If sname:VkAllocationCallbacks were provided when pname:descriptorPool
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyDescriptorPool-descriptorPool-00305]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:descriptorPool was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyDescriptorPool.adoc[]
+--
+
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VkDescriptorSet',desc='Opaque handle to a descriptor set object',type='handles']
+--
+Descriptor sets are allocated from descriptor pool objects, and are
+represented by sname:VkDescriptorSet handles:
+
+include::{generated}/api/handles/VkDescriptorSet.adoc[]
+--
+
+[open,refpage='vkAllocateDescriptorSets',desc='Allocate one or more descriptor sets',type='protos']
+--
+:refpage: vkAllocateDescriptorSets
+:objectnameplural: descriptor sets
+:objectnamecamelcase: descriptorSet
+:objectcount: slink:VkDescriptorSetAllocateInfo::pname:descriptorSetCount
+
+To allocate descriptor sets from a descriptor pool, call:
+
+include::{generated}/api/protos/vkAllocateDescriptorSets.adoc[]
+
+  * pname:device is the logical device that owns the descriptor pool.
+  * pname:pAllocateInfo is a pointer to a slink:VkDescriptorSetAllocateInfo
+    structure describing parameters of the allocation.
+  * pname:pDescriptorSets is a pointer to an array of slink:VkDescriptorSet
+    handles in which the resulting descriptor set objects are returned.
+
+The allocated descriptor sets are returned in pname:pDescriptorSets.
+
+[[descriptor-set-initial-state]]
+When a descriptor set is allocated, the initial state is largely
+uninitialized and all descriptors are undefined:, with the exception that
+samplers with a non-null pname:pImmutableSamplers are initialized on
+allocation.
+Descriptors also become undefined: if the underlying resource or view object
+is destroyed.
+Descriptor sets containing undefined: descriptors can: still be bound and
+used, subject to the following conditions:
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * For descriptor set bindings created with the
+    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT bit set, all descriptors
+    in that binding that are dynamically used must: have been populated
+    before the descriptor set is <<descriptorsets-binding,consumed>>.
+  * For descriptor set bindings created without the
+    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT bit set, all descriptors
+    in that binding that are statically used must: have been populated
+    before the descriptor set is <<descriptorsets-binding,consumed>>.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * Descriptors that are <<shaders-staticuse,statically used>> must: have
+    been populated before the descriptor set is
+    <<descriptorsets-binding,consumed>>.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * Descriptor bindings with descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK can: be undefined: when
+    the descriptor set is <<descriptorsets-binding,consumed>>; though values
+    in that block will be undefined:.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * Entries that are not used by a pipeline can: have undefined:
+    descriptors.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+If a call to fname:vkAllocateDescriptorSets would cause the total number of
+descriptor sets allocated from the pool to exceed the value of
+slink:VkDescriptorPoolCreateInfo::pname:maxSets used to create
+pname:pAllocateInfo->descriptorPool, then the allocation may: fail due to
+lack of space in the descriptor pool.
+Similarly, the allocation may: fail due to lack of space if the call to
+fname:vkAllocateDescriptorSets would cause the number of any given
+descriptor type to exceed the sum of all the pname:descriptorCount members
+of each element of slink:VkDescriptorPoolCreateInfo::pname:pPoolSizes with a
+pname:type equal to that type.
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+Additionally, the allocation may: also fail if a call to
+fname:vkAllocateDescriptorSets would cause the total number of inline
+uniform block bindings allocated from the pool to exceed the value of
+slink:VkDescriptorPoolInlineUniformBlockCreateInfo::pname:maxInlineUniformBlockBindings
+used to create the descriptor pool.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+If the allocation fails due to no more space in the descriptor pool, and not
+because of system or device memory exhaustion, then
+ename:VK_ERROR_OUT_OF_POOL_MEMORY must: be returned.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+If an allocation fails due to fragmentation, an indeterminate error is
+returned with an unspecified error code.
+Any returned error other than
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ename:VK_ERROR_OUT_OF_POOL_MEMORY or
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning:
+applications should: assume that the allocation failed due to fragmentation,
+and create a new descriptor pool.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+fname:vkAllocateDescriptorSets can: be used to create multiple descriptor
+sets.
+If the creation of any of those descriptor sets fails, then the
+implementation must: destroy all successfully created descriptor set objects
+from this command, set all entries of the pname:pDescriptorSets array to
+dlink:VK_NULL_HANDLE and return the error.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[NOTE]
+.Note
+====
+Applications should: check for a negative return value when allocating new
+descriptor sets, assume that any error
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+other than ename:VK_ERROR_OUT_OF_POOL_MEMORY
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+effectively means ename:VK_ERROR_FRAGMENTED_POOL, and try to create a new
+descriptor pool.
+If ename:VK_ERROR_FRAGMENTED_POOL is the actual return value, it adds
+certainty to that decision.
+
+The reason for this is that ename:VK_ERROR_FRAGMENTED_POOL was only added in
+a later version of the 1.0 specification, and so drivers may: return other
+errors if they were written against earlier versions.
+To ensure full compatibility with earlier patch versions, these other errors
+are allowed.
+====
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkAllocateDescriptorSets.adoc[]
+--
+
+[open,refpage='VkDescriptorSetAllocateInfo',desc='Structure specifying the allocation parameters for descriptor sets',type='structs']
+--
+The sname:VkDescriptorSetAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorSetAllocateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:descriptorPool is the pool which the sets will be allocated from.
+  * pname:descriptorSetCount determines the number of descriptor sets to be
+    allocated from the pool.
+  * pname:pSetLayouts is a pointer to an array of descriptor set layouts,
+    with each member specifying how the corresponding descriptor set is
+    allocated.
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkDescriptorSetAllocateInfo-apiVersion-07895]]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+    If the apiext:VK_KHR_maintenance1 extension is not enabled and
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+    pname:descriptorSetCount must: not be greater than the number of sets
+    that are currently available for allocation in pname:descriptorPool
+  * [[VUID-VkDescriptorSetAllocateInfo-apiVersion-07896]]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+    If the apiext:VK_KHR_maintenance1 extension is not enabled and
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1,
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+    pname:descriptorPool must: have enough free descriptor capacity
+    remaining to allocate the descriptor sets of the specified layouts
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308]]
+    Each element of pname:pSetLayouts must: not have been created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044]]
+    If any element of pname:pSetLayouts was created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set, pname:descriptorPool must: have been created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
+  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-09380]]
+    If pname:pSetLayouts[i] was created with an element of
+    pname:pBindingFlags that includes
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, and
+    slink:VkDescriptorSetVariableDescriptorCountAllocateInfo is included in
+    the pname:pNext chain, and
+    sname:VkDescriptorSetVariableDescriptorCountAllocateInfo::pname:descriptorSetCount
+    is not zero, then
+    slink:VkDescriptorSetVariableDescriptorCountAllocateInfo::pDescriptorCounts[i]
+    must: be less than or equal to
+    slink:VkDescriptorSetLayoutBinding::descriptorCount for the
+    corresponding binding used to create pname:pSetLayouts[i]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-04610]]
+    If any element of pname:pSetLayouts was created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT bit set,
+    pname:descriptorPool must: have been created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-08009]]
+    Each element of pname:pSetLayouts must: not have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set
+endif::VK_EXT_descriptor_buffer[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetAllocateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[open,refpage='VkDescriptorSetVariableDescriptorCountAllocateInfo',desc='Structure specifying additional allocation parameters for descriptor sets',type='structs',alias='VkDescriptorSetVariableDescriptorCountAllocateInfoEXT']
+--
+If the pname:pNext chain of a slink:VkDescriptorSetAllocateInfo structure
+includes a sname:VkDescriptorSetVariableDescriptorCountAllocateInfo
+structure, then that structure includes an array of descriptor counts for
+variable-sized descriptor bindings, one for each descriptor set being
+allocated.
+
+The sname:VkDescriptorSetVariableDescriptorCountAllocateInfo structure is
+defined as:
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfoEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:descriptorSetCount is zero or the number of elements in
+    pname:pDescriptorCounts.
+  * pname:pDescriptorCounts is a pointer to an array of descriptor counts,
+    with each member specifying the number of descriptors in a
+    variable-sized descriptor binding in the corresponding descriptor set
+    being allocated.
+
+If pname:descriptorSetCount is zero or this structure is not included in the
+pname:pNext chain, then the variable lengths are considered to be zero.
+Otherwise, pname:pDescriptorCounts[i] is the number of descriptors in the
+variable-sized descriptor binding in the corresponding descriptor set
+layout.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+If the variable-sized descriptor binding in the corresponding descriptor set
+layout has a descriptor type of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+pname:pDescriptorCounts[i] specifies the binding's capacity in bytes.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] does not include
+a variable-sized descriptor binding, then pname:pDescriptorCounts[i] is
+ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-descriptorSetCount-03045]]
+    If pname:descriptorSetCount is not zero, pname:descriptorSetCount must:
+    equal slink:VkDescriptorSetAllocateInfo::pname:descriptorSetCount
+  * [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pSetLayouts-03046]]
+    If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] has a
+    variable-sized descriptor binding, then pname:pDescriptorCounts[i] must:
+    be less than or equal to the descriptor count specified for that binding
+    when the descriptor set layout was created
+****
+
+include::{generated}/validity/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+[open,refpage='vkFreeDescriptorSets',desc='Free one or more descriptor sets',type='protos']
+--
+To free allocated descriptor sets, call:
+
+include::{generated}/api/protos/vkFreeDescriptorSets.adoc[]
+
+  * pname:device is the logical device that owns the descriptor pool.
+  * pname:descriptorPool is the descriptor pool from which the descriptor
+    sets were allocated.
+  * pname:descriptorSetCount is the number of elements in the
+    pname:pDescriptorSets array.
+  * pname:pDescriptorSets is a pointer to an array of handles to
+    slink:VkDescriptorSet objects.
+
+After calling fname:vkFreeDescriptorSets, all descriptor sets in
+pname:pDescriptorSets are invalid.
+
+ifdef::VKSC_VERSION_1_0[]
+If <<limits-recycleDescriptorSetMemory,recycleDescriptorSetMemory>> is
+ename:VK_FALSE, then freeing a descriptor set does not make the pool memory
+it used available to be reallocated until the descriptor pool is reset.
+If <<limits-recycleDescriptorSetMemory,recycleDescriptorSetMemory>> is
+ename:VK_TRUE, then the memory is available to be reallocated immediately
+after freeing the descriptor set.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * If <<limits-recycleDescriptorSetMemory,recycleDescriptorSetMemory>> is
+    ename:VK_FALSE, then freeing a descriptor set does not make the pool
+    memory it used available to be reallocated until the descriptor pool is
+    reset <<SCID-4>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+  * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00309]]
+    All submitted commands that refer to any element of
+    pname:pDescriptorSets must: have completed execution
+  * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00310]]
+    pname:pDescriptorSets must: be a valid pointer to an array of
+    pname:descriptorSetCount sname:VkDescriptorSet handles, each element of
+    which must: either be a valid handle or dlink:VK_NULL_HANDLE
+  * [[VUID-vkFreeDescriptorSets-descriptorPool-00312]]
+    pname:descriptorPool must: have been created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag
+****
+
+include::{generated}/validity/protos/vkFreeDescriptorSets.adoc[]
+--
+
+[open,refpage='vkResetDescriptorPool',desc='Resets a descriptor pool object',type='protos']
+--
+To return all descriptor sets allocated from a given pool to the pool,
+rather than freeing individual descriptor sets, call:
+
+include::{generated}/api/protos/vkResetDescriptorPool.adoc[]
+
+  * pname:device is the logical device that owns the descriptor pool.
+  * pname:descriptorPool is the descriptor pool to be reset.
+  * pname:flags is reserved for future use.
+
+Resetting a descriptor pool recycles all of the resources from all of the
+descriptor sets allocated from the descriptor pool back to the descriptor
+pool, and the descriptor sets are implicitly freed.
+
+.Valid Usage
+****
+  * [[VUID-vkResetDescriptorPool-descriptorPool-00313]]
+    All uses of pname:descriptorPool (via any allocated descriptor sets)
+    must: have completed execution
+****
+
+include::{generated}/validity/protos/vkResetDescriptorPool.adoc[]
+--
+
+[open,refpage='VkDescriptorPoolResetFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorPoolResetFlags.adoc[]
+
+tname:VkDescriptorPoolResetFlags is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+
+[[descriptorsets-updates]]
+=== Descriptor Set Updates
+
+[open,refpage='vkUpdateDescriptorSets',desc='Update the contents of a descriptor set object',type='protos']
+--
+Once allocated, descriptor sets can: be updated with a combination of write
+and copy operations.
+To update descriptor sets, call:
+
+include::{generated}/api/protos/vkUpdateDescriptorSets.adoc[]
+
+  * pname:device is the logical device that updates the descriptor sets.
+  * pname:descriptorWriteCount is the number of elements in the
+    pname:pDescriptorWrites array.
+  * pname:pDescriptorWrites is a pointer to an array of
+    slink:VkWriteDescriptorSet structures describing the descriptor sets to
+    write to.
+  * pname:descriptorCopyCount is the number of elements in the
+    pname:pDescriptorCopies array.
+  * pname:pDescriptorCopies is a pointer to an array of
+    slink:VkCopyDescriptorSet structures describing the descriptor sets to
+    copy between.
+
+The operations described by pname:pDescriptorWrites are performed first,
+followed by the operations described by pname:pDescriptorCopies.
+Within each array, the operations are performed in the order they appear in
+the array.
+
+Each element in the pname:pDescriptorWrites array describes an operation
+updating the descriptor set using descriptors for resources specified in the
+structure.
+
+Each element in the pname:pDescriptorCopies array is a
+slink:VkCopyDescriptorSet structure describing an operation copying
+descriptors between sets.
+
+If the pname:dstSet member of any element of pname:pDescriptorWrites or
+pname:pDescriptorCopies is bound, accessed, or modified by any command that
+was recorded to a command buffer which is currently in the
+<<commandbuffers-lifecycle, recording or executable state>>,
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+and any of the descriptor bindings that are updated were not created with
+the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT or
+ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT bits set,
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+that command buffer becomes <<commandbuffers-lifecycle, invalid>>.
+
+.Valid Usage
+****
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06236]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, elements of the
+    pname:pTexelBufferView member of pname:pDescriptorWrites[i] must: have
+    been created on pname:device
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06237]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
+    of any element of the pname:pBufferInfo member of
+    pname:pDescriptorWrites[i] must: have been created on pname:device
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06238]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
+    not allocated with a layout that included immutable samplers for
+    pname:dstBinding with pname:descriptorType, the pname:sampler member of
+    any element of the pname:pImageInfo member of pname:pDescriptorWrites[i]
+    must: have been created on pname:device
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06239]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the pname:imageView
+    member of any element of pname:pDescriptorWrites[i] must: have been
+    created on pname:device
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06240]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, elements of the
+    pname:pAccelerationStructures member of a
+    slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
+    pname:pNext chain of pname:pDescriptorWrites[i] must: have been created
+    on pname:device
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06241]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, elements of the
+    pname:pAccelerationStructures member of a
+    slink:VkWriteDescriptorSetAccelerationStructureNV structure in the
+    pname:pNext chain of pname:pDescriptorWrites[i] must: have been created
+    on pname:device
+endif::VK_NV_ray_tracing[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06940]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM or
+    ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, the pname:imageView
+    member of any element of pname:pDescriptorWrites[i] must: have been
+    created on pname:device
+endif::VK_QCOM_image_processing[]
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06493]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    pname:pDescriptorWrites[i].pname:pImageInfo must: be a valid pointer to
+    an array of pname:pDescriptorWrites[i].pname:descriptorCount valid
+    sname:VkDescriptorImageInfo structures
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06941]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM or
+    ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,
+    pname:pDescriptorWrites[i].pname:pImageInfo must: be a valid pointer to
+    an array of pname:pDescriptorWrites[i].pname:descriptorCount valid
+    sname:VkDescriptorImageInfo structures
+endif::VK_QCOM_image_processing[]
+  * [[VUID-vkUpdateDescriptorSets-None-03047]]
+    The pname:dstSet member of each element of pname:pDescriptorWrites or
+    pname:pDescriptorCopies
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    for bindings which were created without the
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT or
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT bits set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    must: not be used by any command that was recorded to a command buffer
+    which is in the <<commandbuffers-lifecycle,pending state>>
+  * [[VUID-vkUpdateDescriptorSets-pDescriptorWrites-06993]]
+    Host access to pname:pDescriptorWrites[i].pname:dstSet and
+    pname:pDescriptorCopies[i].pname:dstSet must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    unless explicitly denoted otherwise for specific flags
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+****
+
+include::{generated}/validity/protos/vkUpdateDescriptorSets.adoc[]
+--
+
+[open,refpage='VkWriteDescriptorSet',desc='Structure specifying the parameters of a descriptor set write operation',type='structs']
+--
+The sname:VkWriteDescriptorSet structure is defined as:
+
+include::{generated}/api/structs/VkWriteDescriptorSet.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:dstSet is the destination descriptor set to update.
+  * pname:dstBinding is the descriptor binding within that set.
+  * pname:dstArrayElement is the starting element in that array.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstSet and
+    pname:dstBinding has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then pname:dstArrayElement
+    specifies the starting byte offset within the binding.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:descriptorCount is the number of descriptors to update.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstSet and
+    pname:dstBinding has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, then
+    pname:descriptorCount specifies the number of bytes to update.
+    Otherwise,
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    pname:descriptorCount is one of
+  ** the number of elements in pname:pImageInfo
+  ** the number of elements in pname:pBufferInfo
+  ** the number of elements in pname:pTexelBufferView
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  ** a value matching the pname:dataSize member of a
+     slink:VkWriteDescriptorSetInlineUniformBlock structure in the
+     pname:pNext chain
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  ** a value matching the pname:accelerationStructureCount of a
+     slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
+     pname:pNext chain
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  * pname:descriptorType is a elink:VkDescriptorType specifying the type of
+    each descriptor in pname:pImageInfo, pname:pBufferInfo, or
+    pname:pTexelBufferView, as described below.
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is not equal to ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT,
+    pname:descriptorType must:
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifndef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    It must:
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    be the same type as the pname:descriptorType specified in
+    sname:VkDescriptorSetLayoutBinding for pname:dstSet at pname:dstBinding.
+    The type of the descriptor also controls which array the descriptors are
+    taken from.
+  * pname:pImageInfo is a pointer to an array of slink:VkDescriptorImageInfo
+    structures or is ignored, as described below.
+  * pname:pBufferInfo is a pointer to an array of
+    slink:VkDescriptorBufferInfo structures or is ignored, as described
+    below.
+  * pname:pTexelBufferView is a pointer to an array of slink:VkBufferView
+    handles as described in the <<resources-buffer-views,Buffer Views>>
+    section or is ignored, as described below.
+
+Only one of pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView
+members is used according to the descriptor type specified in the
+pname:descriptorType member of the containing sname:VkWriteDescriptorSet
+structure,
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+or none of them in case pname:descriptorType is
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, in which case the source data
+for the descriptor writes is taken from the
+slink:VkWriteDescriptorSetInlineUniformBlock structure included in the
+pname:pNext chain of sname:VkWriteDescriptorSet,
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_KHR_acceleration_structure[]
+or if pname:descriptorType is
+ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, in which case the
+source data for the descriptor writes is taken from the
+slink:VkWriteDescriptorSetAccelerationStructureKHR structure in the
+pname:pNext chain of sname:VkWriteDescriptorSet,
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+or if pname:descriptorType is
+ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, in which case the source
+data for the descriptor writes is taken from the
+slink:VkWriteDescriptorSetAccelerationStructureNV structure in the
+pname:pNext chain of sname:VkWriteDescriptorSet,
+endif::VK_NV_ray_tracing[]
+as specified below.
+
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+the buffer,
+ifdef::VK_KHR_acceleration_structure[]
+acceleration structure,
+endif::VK_KHR_acceleration_structure[]
+imageView, or bufferView can: be dlink:VK_NULL_HANDLE.
+Loads from a null descriptor return zero values and stores and atomics to a
+null descriptor are discarded.
+ifdef::VK_KHR_acceleration_structure[]
+A null acceleration structure descriptor results in the miss shader being
+invoked.
+endif::VK_KHR_acceleration_structure[]
+endif::VK_EXT_robustness2[]
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+If the destination descriptor is a mutable descriptor, the active descriptor
+type for the destination descriptor becomes pname:descriptorType.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+[[descriptorsets-updates-consecutive, consecutive binding updates]]
+If the pname:dstBinding has fewer than pname:descriptorCount array elements
+remaining starting from pname:dstArrayElement, then the remainder will be
+used to update the subsequent binding - [eq]#pname:dstBinding+1# starting at
+array element zero.
+If a binding has a pname:descriptorCount of zero, it is skipped.
+This behavior applies recursively, with the update affecting consecutive
+bindings as needed to update all pname:descriptorCount descriptors.
+Consecutive bindings must: have identical elink:VkDescriptorType,
+tlink:VkShaderStageFlags,
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+elink:VkDescriptorBindingFlagBits,
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+and immutable samplers references.
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+In addition, if the elink:VkDescriptorType is
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the supported descriptor types in
+slink:VkMutableDescriptorTypeCreateInfoEXT must: be equally defined.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[NOTE]
+.Note
+====
+The same behavior applies to bindings with a descriptor type of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK where pname:descriptorCount
+specifies the number of bytes to update while pname:dstArrayElement
+specifies the starting byte offset, thus in this case if the
+pname:dstBinding has a smaller byte size than the sum of
+pname:dstArrayElement and pname:descriptorCount, then the remainder will be
+used to update the subsequent binding - [eq]#pname:dstBinding+1# starting at
+offset zero.
+This falls out as a special case of the above rule.
+====
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+.Valid Usage
+****
+  * [[VUID-VkWriteDescriptorSet-dstBinding-00315]]
+    pname:dstBinding must: be less than or equal to the maximum value of
+    pname:binding of all slink:VkDescriptorSetLayoutBinding structures
+    specified when pname:dstSet's descriptor set layout was created
+  * [[VUID-VkWriteDescriptorSet-dstBinding-00316]]
+    pname:dstBinding must: be a binding with a non-zero
+    pname:descriptorCount
+  * [[VUID-VkWriteDescriptorSet-descriptorCount-00317]]
+    All consecutive bindings updated via a single sname:VkWriteDescriptorSet
+    structure, except those with a pname:descriptorCount of zero, must: have
+    identical pname:descriptorType and pname:stageFlags
+  * [[VUID-VkWriteDescriptorSet-descriptorCount-00318]]
+    All consecutive bindings updated via a single sname:VkWriteDescriptorSet
+    structure, except those with a pname:descriptorCount of zero, must: all
+    either use immutable samplers or must: all not use immutable samplers
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00319]]
+    pname:descriptorType must: match the type of pname:dstBinding within
+    pname:dstSet
+  * [[VUID-VkWriteDescriptorSet-dstSet-00320]]
+    pname:dstSet must: be a valid slink:VkDescriptorSet handle
+  * [[VUID-VkWriteDescriptorSet-dstArrayElement-00321]]
+    The sum of pname:dstArrayElement and pname:descriptorCount must: be less
+    than or equal to the number of array elements in the descriptor set
+    binding specified by pname:dstBinding, and all applicable consecutive
+    bindings, as described by <<descriptorsets-updates-consecutive>>
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02219]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, pname:dstArrayElement
+    must: be an integer multiple of `4`
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02220]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02994]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+    or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, each element of
+    pname:pTexelBufferView must: be either a valid sname:VkBufferView handle
+    or dlink:VK_NULL_HANDLE
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02995]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+    or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, each element of pname:pTexelBufferView must: not be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00324]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must:
+    be a valid pointer to an array of pname:descriptorCount valid
+    sname:VkDescriptorBufferInfo structures
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00325]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
+    not allocated with a layout that included immutable samplers for
+    pname:dstBinding with pname:descriptorType, the pname:sampler member of
+    each element of pname:pImageInfo must: be a valid sname:VkSampler object
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02996]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the pname:imageView member of
+    each element of pname:pImageInfo must: be either a valid
+    sname:VkImageView handle or dlink:VK_NULL_HANDLE
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02997]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, the pname:imageView member of each element of pname:pImageInfo
+    must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkWriteDescriptorSet-descriptorType-07683]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    the pname:imageView member of each element of pname:pImageInfo must: not
+    be dlink:VK_NULL_HANDLE
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02221]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, the pname:pNext chain
+    must: include a slink:VkWriteDescriptorSetInlineUniformBlock structure
+    whose pname:dataSize member equals pname:descriptorCount
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02382]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, the pname:pNext
+    chain must: include a slink:VkWriteDescriptorSetAccelerationStructureKHR
+    structure whose pname:accelerationStructureCount member equals
+    pname:descriptorCount
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-03817]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, the pname:pNext
+    chain must: include a slink:VkWriteDescriptorSetAccelerationStructureNV
+    structure whose pname:accelerationStructureCount member equals
+    pname:descriptorCount
+endif::VK_NV_ray_tracing[]
+ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-01946]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, then
+    the pname:imageView member of each pname:pImageInfo element must: have
+    been created without a sname:VkSamplerYcbcrConversionInfo structure in
+    its pname:pNext chain
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02738]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and if any element of
+    pname:pImageInfo has a pname:imageView member that was created with a
+    sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain,
+    then pname:dstSet must: have been allocated with a layout that included
+    immutable samplers for pname:dstBinding, and the corresponding immutable
+    sampler must: have been created with an _identically defined_
+    sname:VkSamplerYcbcrConversionInfo object
+  * [[VUID-VkWriteDescriptorSet-descriptorType-01948]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
+    allocated with a layout that included immutable samplers for
+    pname:dstBinding, then the pname:imageView member of each element of
+    pname:pImageInfo which corresponds to an immutable sampler that enables
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> must: have been
+    created with a sname:VkSamplerYcbcrConversionInfo structure in its
+    pname:pNext chain with an _identically defined_
+    sname:VkSamplerYcbcrConversionInfo to the corresponding immutable
+    sampler
+endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00327]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member
+    of each element of pname:pBufferInfo must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00328]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:offset member
+    of each element of pname:pBufferInfo must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00329]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, and the pname:buffer
+    member of any element of pname:pBufferInfo is the handle of a non-sparse
+    buffer, then that buffer must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00330]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:buffer member
+    of each element of pname:pBufferInfo must: have been created with
+    ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00331]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
+    of each element of pname:pBufferInfo must: have been created with
+    ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00332]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member
+    of each element of pname:pBufferInfo, or the
+    <<buffer-info-effective-range,effective range>> if pname:range is
+    ename:VK_WHOLE_SIZE, must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00333]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:range member
+    of each element of pname:pBufferInfo, or the
+    <<buffer-info-effective-range,effective range>> if pname:range is
+    ename:VK_WHOLE_SIZE, must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
+  * [[VUID-VkWriteDescriptorSet-descriptorType-08765]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the
+    pname:pTexelBufferView <<resources-buffer-views-usage, buffer view
+    usage>> must: include ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
+  * [[VUID-VkWriteDescriptorSet-descriptorType-08766]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the
+    pname:pTexelBufferView <<resources-buffer-views-usage, buffer view
+    usage>> must: include ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00336]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of
+    each element of pname:pImageInfo must: have been created with the
+    identity swizzle
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00337]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView
+    member of each element of pname:pImageInfo must: have been created with
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-04149]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE the
+    pname:imageLayout member of each element of pname:pImageInfo must: be a
+    member of the list given in <<descriptorsets-sampledimage, Sampled
+    Image>>
+  * [[VUID-VkWriteDescriptorSet-descriptorType-04150]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the pname:imageLayout
+    member of each element of pname:pImageInfo must: be a member of the list
+    given in <<descriptorsets-combinedimagesampler, Combined Image Sampler>>
+  * [[VUID-VkWriteDescriptorSet-descriptorType-04151]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT the
+    pname:imageLayout member of each element of pname:pImageInfo must: be a
+    member of the list given in <<descriptorsets-inputattachment, Input
+    Attachment>>
+  * [[VUID-VkWriteDescriptorSet-descriptorType-04152]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE the
+    pname:imageLayout member of each element of pname:pImageInfo must: be a
+    member of the list given in <<descriptorsets-storageimage, Storage
+    Image>>
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00338]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    the pname:imageView member of each element of pname:pImageInfo must:
+    have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00339]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
+    pname:imageView member of each element of pname:pImageInfo must: have
+    been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02752]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER, then
+    pname:dstSet must: not have been allocated with a layout that included
+    immutable samplers for pname:dstBinding
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkWriteDescriptorSet-dstSet-04611]]
+    If the sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the new active
+    descriptor type pname:descriptorType must: exist in the corresponding
+    pname:pMutableDescriptorTypeLists list for pname:dstBinding
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_EXT_image_view_min_lod[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-06450]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    the pname:imageView member of each element of pname:pImageInfo must:
+    have either been created without a slink:VkImageViewMinLodCreateInfoEXT
+    included in the pname:pNext chain or with a
+    slink:VkImageViewMinLodCreateInfoEXT::pname:minLod of `0.0`
+endif::VK_EXT_image_view_min_lod[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-06942]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, the pname:imageView
+    member of each element of pname:pImageInfo must: have been created with
+    a view created with an pname:image created with
+    ename:VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM
+  * [[VUID-VkWriteDescriptorSet-descriptorType-06943]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, the pname:imageView
+    member of each element of pname:pImageInfo must: have been created with
+    a view created with an pname:image created with
+    ename:VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM
+endif::VK_QCOM_image_processing[]
+
+
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSet.adoc[]
+--
+
+[open,refpage='VkDescriptorType',desc='Specifies the type of a descriptor in a descriptor set',type='enums']
+--
+The type of descriptors in a descriptor set is specified by
+slink:VkWriteDescriptorSet::pname:descriptorType, which must: be one of the
+values:
+
+include::{generated}/api/enums/VkDescriptorType.adoc[]
+
+  * ename:VK_DESCRIPTOR_TYPE_SAMPLER specifies a <<descriptorsets-sampler,
+    sampler descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER specifies a
+    <<descriptorsets-combinedimagesampler, combined image sampler
+    descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE specifies a
+    <<descriptorsets-sampledimage, sampled image descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE specifies a
+    <<descriptorsets-storageimage, storage image descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER specifies a
+    <<descriptorsets-uniformtexelbuffer, uniform texel buffer descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER specifies a
+    <<descriptorsets-storagetexelbuffer, storage texel buffer descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER specifies a
+    <<descriptorsets-uniformbuffer, uniform buffer descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER specifies a
+    <<descriptorsets-storagebuffer, storage buffer descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC specifies a
+    <<descriptorsets-uniformbufferdynamic, dynamic uniform buffer
+    descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC specifies a
+    <<descriptorsets-storagebufferdynamic, dynamic storage buffer
+    descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT specifies an
+    <<descriptorsets-inputattachment, input attachment descriptor>>.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK specifies an
+    <<descriptorsets-inlineuniformblock, inline uniform block>>.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT specifies a
+    <<descriptorsets-mutable, descriptor of mutable type>>.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_QCOM_image_processing[]
+  * ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM specifies a
+    <<descriptorsets-weightimage, sampled weight image descriptor>>.
+  * ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM specifies a
+    <<descriptorsets-blockmatch, block matching image descriptor>>.
+
+endif::VK_QCOM_image_processing[]
+
+When a descriptor set is updated via elements of slink:VkWriteDescriptorSet,
+members of pname:pImageInfo, pname:pBufferInfo and pname:pTexelBufferView
+are only accessed by the implementation when they correspond to descriptor
+type being defined - otherwise they are ignored.
+The members accessed are as follows for each descriptor type:
+
+  * For ename:VK_DESCRIPTOR_TYPE_SAMPLER, only the pname:sampler member of
+    each element of slink:VkWriteDescriptorSet::pname:pImageInfo is
+    accessed.
+  * For ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, only the pname:imageView and
+    pname:imageLayout members of each element of
+    slink:VkWriteDescriptorSet::pname:pImageInfo are accessed.
+  * For ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, all members of each
+    element of slink:VkWriteDescriptorSet::pname:pImageInfo are accessed.
+  * For ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, all members of each
+    element of slink:VkWriteDescriptorSet::pname:pBufferInfo are accessed.
+  * For ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, each element of
+    slink:VkWriteDescriptorSet::pname:pTexelBufferView is accessed.
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+When updating descriptors with a pname:descriptorType of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, none of the pname:pImageInfo,
+pname:pBufferInfo, or pname:pTexelBufferView members are accessed, instead
+the source data of the descriptor update operation is taken from the
+slink:VkWriteDescriptorSetInlineUniformBlock structure in the pname:pNext
+chain of sname:VkWriteDescriptorSet.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_KHR_acceleration_structure[]
+When updating descriptors with a pname:descriptorType of
+ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, none of the
+pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView members are
+accessed, instead the source data of the descriptor update operation is
+taken from the slink:VkWriteDescriptorSetAccelerationStructureKHR structure
+in the pname:pNext chain of sname:VkWriteDescriptorSet.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+When updating descriptors with a pname:descriptorType of
+ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, none of the
+pname:pImageInfo, pname:pBufferInfo, or pname:pTexelBufferView members are
+accessed, instead the source data of the descriptor update operation is
+taken from the slink:VkWriteDescriptorSetAccelerationStructureNV structure
+in the pname:pNext chain of sname:VkWriteDescriptorSet.
+endif::VK_NV_ray_tracing[]
+--
+
+[open,refpage='VkDescriptorBufferInfo',desc='Structure specifying descriptor buffer information',type='structs']
+--
+The sname:VkDescriptorBufferInfo structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorBufferInfo.adoc[]
+
+  * pname:buffer is
+ifdef::VK_EXT_robustness2[]
+dlink:VK_NULL_HANDLE or
+endif::VK_EXT_robustness2[]
+the buffer resource.
+  * pname:offset is the offset in bytes from the start of pname:buffer.
+    Access to buffer memory via this descriptor uses addressing that is
+    relative to this starting offset.
+  * pname:range is the size in bytes that is used for this descriptor
+    update, or ename:VK_WHOLE_SIZE to use the range from pname:offset to the
+    end of the buffer.
++
+[NOTE]
+.Note
+====
+When setting pname:range to ename:VK_WHOLE_SIZE, the
+<<buffer-info-effective-range, effective range>> must: not be larger than
+the maximum range for the descriptor type (<<limits-maxUniformBufferRange,
+pname:maxUniformBufferRange>> or <<limits-maxStorageBufferRange,
+pname:maxStorageBufferRange>>).
+This means that ename:VK_WHOLE_SIZE is not typically useful in the common
+case where uniform buffer descriptors are suballocated from a buffer that is
+much larger than pname:maxUniformBufferRange.
+====
+
+For ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC and
+ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC descriptor types,
+pname:offset is the base offset from which the dynamic offset is applied and
+pname:range is the static size used for all dynamic offsets.
+
+[[buffer-info-effective-range]]
+When pname:range is ename:VK_WHOLE_SIZE the effective range is calculated at
+flink:vkUpdateDescriptorSets is by taking the size of pname:buffer minus the
+pname:offset.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorBufferInfo-offset-00340]]
+    pname:offset must: be less than the size of pname:buffer
+  * [[VUID-VkDescriptorBufferInfo-range-00341]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
+    greater than `0`
+  * [[VUID-VkDescriptorBufferInfo-range-00342]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
+    less than or equal to the size of pname:buffer minus pname:offset
+  * [[VUID-VkDescriptorBufferInfo-buffer-02998]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:buffer must: not be dlink:VK_NULL_HANDLE
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-VkDescriptorBufferInfo-buffer-02999]]
+    If pname:buffer is dlink:VK_NULL_HANDLE, pname:offset must: be zero and
+    pname:range must: be ename:VK_WHOLE_SIZE
+endif::VK_EXT_robustness2[]
+****
+
+include::{generated}/validity/structs/VkDescriptorBufferInfo.adoc[]
+--
+
+[open,refpage='VkDescriptorImageInfo',desc='Structure specifying descriptor image information',type='structs']
+--
+The sname:VkDescriptorImageInfo structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorImageInfo.adoc[]
+
+  * pname:sampler is a sampler handle, and is used in descriptor updates for
+    types ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER if the binding being
+    updated does not use immutable samplers.
+  * pname:imageView is
+ifdef::VK_EXT_robustness2[]
+    dlink:VK_NULL_HANDLE or
+endif::VK_EXT_robustness2[]
+    an image view handle, and is used in descriptor updates for types
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.
+  * pname:imageLayout is the layout that the image subresources accessible
+    from pname:imageView will be in at the time this descriptor is accessed.
+    pname:imageLayout is used in descriptor updates for types
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT.
+
+Members of sname:VkDescriptorImageInfo that are not used in an update (as
+described above) are ignored.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkDescriptorImageInfo-imageView-06712]]
+    pname:imageView must: not be a 2D array image view created from a 3D
+    image
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkDescriptorImageInfo-imageView-07795]]
+    If pname:imageView is a 2D view created from a 3D image, then
+    pname:descriptorType must: be ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+  * [[VUID-VkDescriptorImageInfo-imageView-07796]]
+    If pname:imageView is a 2D view created from a 3D image, then the image
+    must: have been created with
+    ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set
+endif::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkDescriptorImageInfo-descriptorType-06713]]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+    If the <<features-image2DViewOf3D, pname:image2DViewOf3D>> feature is
+    not enabled or pname:descriptorType is not
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE then
+endif::VK_EXT_image_2d_view_of_3d[]
+    pname:imageView must: not be a 2D view created from a 3D image
+  * [[VUID-VkDescriptorImageInfo-descriptorType-06714]]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+    If the <<features-sampler2DViewOf3D, pname:sampler2DViewOf3D>> feature
+    is not enabled or pname:descriptorType is not
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER then
+endif::VK_EXT_image_2d_view_of_3d[]
+    pname:imageView must: not be a 2D view created from a 3D image
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkDescriptorImageInfo-imageView-01976]]
+    If pname:imageView is created from a depth/stencil image, the
+    pname:aspectMask used to create the pname:imageView must: include either
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT but
+    not both
+  * [[VUID-VkDescriptorImageInfo-imageLayout-00344]]
+    pname:imageLayout must: match the actual elink:VkImageLayout of each
+    subresource accessible from pname:imageView at the time this descriptor
+    is accessed as defined by the <<resources-image-layouts-matching-rule,
+    image layout matching rules>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkDescriptorImageInfo-sampler-01564]]
+    If pname:sampler is used and the elink:VkFormat of the image is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, the
+    image must: have been created with
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the pname:aspectMask of
+    the pname:imageView must: be a valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkDescriptorImageInfo-mutableComparisonSamplers-04450]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:mutableComparisonSamplers
+    is ename:VK_FALSE, then pname:sampler must: have been created with
+    slink:VkSamplerCreateInfo::pname:compareEnable set to ename:VK_FALSE
+endif::VK_KHR_portability_subset[]
+****
+
+
+include::{generated}/validity/structs/VkDescriptorImageInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[open,refpage='VkWriteDescriptorSetInlineUniformBlock',desc='Structure specifying inline uniform block data',type='structs',alias='VkWriteDescriptorSetInlineUniformBlockEXT']
+--
+If the pname:descriptorType member of slink:VkWriteDescriptorSet is
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then the data to write to the
+descriptor set is specified through a
+sname:VkWriteDescriptorSetInlineUniformBlock structure included in the
+pname:pNext chain of sname:VkWriteDescriptorSet.
+
+The sname:VkWriteDescriptorSetInlineUniformBlock structure is defined as:
+
+include::{generated}/api/structs/VkWriteDescriptorSetInlineUniformBlock.adoc[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+or the equivalent
+
+include::{generated}/api/structs/VkWriteDescriptorSetInlineUniformBlockEXT.adoc[]
+endif::VK_EXT_inline_uniform_block[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:dataSize is the number of bytes of inline uniform block data
+    pointed to by pname:pData.
+  * pname:pData is a pointer to pname:dataSize number of bytes of data to
+    write to the inline uniform block.
+
+.Valid Usage
+****
+  * [[VUID-VkWriteDescriptorSetInlineUniformBlock-dataSize-02222]]
+    pname:dataSize must: be an integer multiple of `4`
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetInlineUniformBlock.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkWriteDescriptorSetAccelerationStructureKHR',desc='Structure specifying acceleration structure descriptor information',type='structs']
+--
+:refpage: VkWriteDescriptorSetAccelerationStructureKHR
+
+The sname:VkWriteDescriptorSetAccelerationStructureKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkWriteDescriptorSetAccelerationStructureKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructureCount is the number of elements in
+    pname:pAccelerationStructures.
+  * pname:pAccelerationStructures is a pointer to an array of
+    slink:VkAccelerationStructureKHR structures specifying the acceleration
+    structures to update.
+
+.Valid Usage
+****
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-02236]]
+    pname:accelerationStructureCount must: be equal to pname:descriptorCount
+    in the extended structure
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03579]]
+    Each acceleration structure in pname:pAccelerationStructures must: have
+    been created with a pname:type of
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03580]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, each element of pname:pAccelerationStructures must: not be
+    dlink:VK_NULL_HANDLE
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkWriteDescriptorSetAccelerationStructureNV',desc='Structure specifying acceleration structure descriptor information',type='structs']
+--
+:refpage: VkWriteDescriptorSetAccelerationStructureNV
+
+The sname:VkWriteDescriptorSetAccelerationStructureNV structure is defined
+as:
+
+include::{generated}/api/structs/VkWriteDescriptorSetAccelerationStructureNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructureCount is the number of elements in
+    pname:pAccelerationStructures.
+  * pname:pAccelerationStructures is a pointer to an array of
+    slink:VkAccelerationStructureNV structures specifying the acceleration
+    structures to update.
+
+.Valid Usage
+****
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-accelerationStructureCount-03747]]
+    pname:accelerationStructureCount must: be equal to pname:descriptorCount
+    in the extended structure
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03748]]
+    Each acceleration structure in pname:pAccelerationStructures must: have
+    been created with ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
+  * [[VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03749]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, each member of pname:pAccelerationStructures must: not be
+    dlink:VK_NULL_HANDLE
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+[open,refpage='VkCopyDescriptorSet',desc='Structure specifying a copy descriptor set operation',type='structs']
+--
+The sname:VkCopyDescriptorSet structure is defined as:
+
+include::{generated}/api/structs/VkCopyDescriptorSet.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcSet, pname:srcBinding, and pname:srcArrayElement are the source
+    set, binding, and array element, respectively.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:srcSet and
+    pname:srcBinding has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then pname:srcArrayElement
+    specifies the starting byte offset within the binding to copy from.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:dstSet, pname:dstBinding, and pname:dstArrayElement are the
+    destination set, binding, and array element, respectively.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstSet and
+    pname:dstBinding has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then pname:dstArrayElement
+    specifies the starting byte offset within the binding to copy to.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:descriptorCount is the number of descriptors to copy from the
+    source to destination.
+    If pname:descriptorCount is greater than the number of remaining array
+    elements in the source or destination binding, those affect consecutive
+    bindings in a manner similar to slink:VkWriteDescriptorSet above.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:srcSet and
+    pname:srcBinding has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then pname:descriptorCount
+    specifies the number of bytes to copy and the remaining array elements
+    in the source or destination binding refer to the remaining number of
+    bytes in those.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+If the sname:VkDescriptorSetLayoutBinding for pname:dstBinding is
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT and pname:srcBinding is not
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the new active descriptor type becomes
+the descriptor type of pname:srcBinding.
+If both sname:VkDescriptorSetLayoutBinding for pname:srcBinding and
+pname:dstBinding are ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the active
+descriptor type in each source descriptor is copied into the corresponding
+destination descriptor.
+The active descriptor type can: be different for each source descriptor.
+
+[NOTE]
+.Note
+====
+The intention is that copies to and from mutable descriptors is a simple
+memcpy.
+Copies between non-mutable and mutable descriptors are expected to require
+one memcpy per descriptor to handle the difference in size, but this use
+case with more than one pname:descriptorCount is considered rare.
+====
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+.Valid Usage
+****
+  * [[VUID-VkCopyDescriptorSet-srcBinding-00345]]
+    pname:srcBinding must: be a valid binding within pname:srcSet
+  * [[VUID-VkCopyDescriptorSet-srcArrayElement-00346]]
+    The sum of pname:srcArrayElement and pname:descriptorCount must: be less
+    than or equal to the number of array elements in the descriptor set
+    binding specified by pname:srcBinding, and all applicable consecutive
+    bindings, as described by <<descriptorsets-updates-consecutive>>
+  * [[VUID-VkCopyDescriptorSet-dstBinding-00347]]
+    pname:dstBinding must: be a valid binding within pname:dstSet
+  * [[VUID-VkCopyDescriptorSet-dstArrayElement-00348]]
+    The sum of pname:dstArrayElement and pname:descriptorCount must: be less
+    than or equal to the number of array elements in the descriptor set
+    binding specified by pname:dstBinding, and all applicable consecutive
+    bindings, as described by <<descriptorsets-updates-consecutive>>
+  * [[VUID-VkCopyDescriptorSet-dstBinding-02632]]
+    The type of pname:dstBinding within pname:dstSet must: be equal to the
+    type of pname:srcBinding within pname:srcSet
+  * [[VUID-VkCopyDescriptorSet-srcSet-00349]]
+    If pname:srcSet is equal to pname:dstSet, then the source and
+    destination ranges of descriptors must: not overlap, where the ranges
+    may: include array elements from consecutive bindings as described by
+    <<descriptorsets-updates-consecutive>>
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkCopyDescriptorSet-srcBinding-02223]]
+    If the descriptor type of the descriptor set binding specified by
+    pname:srcBinding is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
+    pname:srcArrayElement must: be an integer multiple of `4`
+  * [[VUID-VkCopyDescriptorSet-dstBinding-02224]]
+    If the descriptor type of the descriptor set binding specified by
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
+    pname:dstArrayElement must: be an integer multiple of `4`
+  * [[VUID-VkCopyDescriptorSet-srcBinding-02225]]
+    If the descriptor type of the descriptor set binding specified by either
+    pname:srcBinding or pname:dstBinding is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkCopyDescriptorSet-srcSet-01918]]
+    If pname:srcSet's layout was created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
+    set, then pname:dstSet's layout must: also have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
+    set
+  * [[VUID-VkCopyDescriptorSet-srcSet-04885]]
+    If pname:srcSet's layout was created without
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    either the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT
+    flag or
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
+    flag set, then pname:dstSet's layout must: have been created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
+    set
+  * [[VUID-VkCopyDescriptorSet-srcSet-01920]]
+    If the descriptor pool from which pname:srcSet was allocated was created
+    with the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set,
+    then the descriptor pool from which pname:dstSet was allocated must:
+    also have been created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
+  * [[VUID-VkCopyDescriptorSet-srcSet-04887]]
+    If the descriptor pool from which pname:srcSet was allocated was created
+    without
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    either the ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag or
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+    the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set, then
+    the descriptor pool from which pname:dstSet was allocated must: have
+    been created without the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkCopyDescriptorSet-dstBinding-02753]]
+    If the descriptor type of the descriptor set binding specified by
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_SAMPLER, then pname:dstSet
+    must: not have been allocated with a layout that included immutable
+    samplers for pname:dstBinding
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-dstSet-04612]]
+    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the new active
+    descriptor type must: exist in the corresponding
+    pname:pMutableDescriptorTypeLists list for pname:dstBinding if the new
+    active descriptor type is not ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+  * [[VUID-VkCopyDescriptorSet-srcSet-04613]]
+    If sname:VkDescriptorSetLayoutBinding for pname:srcSet at
+    pname:srcBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT and the
+    sname:VkDescriptorSetLayoutBinding for pname:dstSet at pname:dstBinding
+    is not ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the active descriptor type
+    for the source descriptor must: match the descriptor type of
+    pname:dstBinding
+  * [[VUID-VkCopyDescriptorSet-dstSet-04614]]
+    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, and the new
+    active descriptor type is ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the
+    pname:pMutableDescriptorTypeLists for pname:srcBinding and
+    pname:dstBinding must: match exactly
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkCopyDescriptorSet.adoc[]
+--
+
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkStructureType
+  ** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR
+     <<SCID-8>>
+  * elink:VkObjectType
+  ** ename:VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR <<SCID-8>>
+  * fname:vkCreateDescriptorUpdateTemplateKHR,
+    fname:vkDestroyDescriptorUpdateTemplateKHR,
+    fname:vkUpdateDescriptorSetWithTemplateKHR,
+    fname:vkCmdPushDescriptorSetWithTemplateKHR <<SCID-8>>
+  * sname:VkDescriptorUpdateTemplateKHR,
+    sname:VkDescriptorUpdateTemplateEntryKHR,
+    sname:VkDescriptorUpdateTemplateCreateInfoKHR <<SCID-8>>
+  * ename:VkDescriptorUpdateTemplateTypeKHR <<SCID-8>>
+  * tname:VkDescriptorUpdateTemplateCreateFlagsKHR <<SCID-8>>
+  * ename:VkDescriptorUpdateTemplateType
+  ** ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR <<SCID-8>>
+  ** ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+     <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+
+ifndef::VKSC_VERSION_1_0[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+[[descriptorsets-updates-with-template]]
+=== Descriptor Update Templates
+
+[open,refpage='VkDescriptorUpdateTemplate',desc='Opaque handle to a descriptor update template',type='handles']
+--
+A descriptor update template specifies a mapping from descriptor update
+information in host memory to descriptors in a descriptor set.
+It is designed to avoid passing redundant information to the driver when
+frequently updating the same set of descriptors in descriptor sets.
+
+Descriptor update template objects are represented by
+sname:VkDescriptorUpdateTemplate handles:
+
+include::{generated}/api/handles/VkDescriptorUpdateTemplate.adoc[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/handles/VkDescriptorUpdateTemplateKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+--
+
+
+=== Descriptor Set Updates With Templates
+
+[open,refpage='vkCreateDescriptorUpdateTemplate',desc='Create a new descriptor update template',type='protos']
+--
+Updating a large sname:VkDescriptorSet array can: be an expensive operation
+since an application must: specify one slink:VkWriteDescriptorSet structure
+for each descriptor or descriptor array to update, each of which
+re-specifies the same state when updating the same descriptor in multiple
+descriptor sets.
+For cases when an application wishes to update the same set of descriptors
+in multiple descriptor sets allocated using the same
+sname:VkDescriptorSetLayout, flink:vkUpdateDescriptorSetWithTemplate can: be
+used as a replacement for flink:vkUpdateDescriptorSets.
+
+sname:VkDescriptorUpdateTemplate allows implementations to convert a set of
+descriptor update operations on a single descriptor set to an internal
+format that, in conjunction with flink:vkUpdateDescriptorSetWithTemplate
+ifdef::VK_KHR_push_descriptor[]
+or flink:vkCmdPushDescriptorSetWithTemplateKHR
+endif::VK_KHR_push_descriptor[]
+, can: be more efficient compared to calling flink:vkUpdateDescriptorSets
+ifdef::VK_KHR_push_descriptor[]
+or flink:vkCmdPushDescriptorSetKHR
+endif::VK_KHR_push_descriptor[]
+.
+The descriptors themselves are not specified in the
+sname:VkDescriptorUpdateTemplate, rather, offsets into an application
+provided pointer to host memory are specified, which are combined with a
+pointer passed to flink:vkUpdateDescriptorSetWithTemplate
+ifdef::VK_KHR_push_descriptor[]
+or flink:vkCmdPushDescriptorSetWithTemplateKHR
+endif::VK_KHR_push_descriptor[]
+.
+This allows large batches of updates to be executed without having to
+convert application data structures into a strictly-defined Vulkan data
+structure.
+
+To create a descriptor update template, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkCreateDescriptorUpdateTemplate.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
+
+ifdef::VK_KHR_descriptor_update_template[]
+include::{generated}/api/protos/vkCreateDescriptorUpdateTemplateKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:device is the logical device that creates the descriptor update
+    template.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkDescriptorUpdateTemplateCreateInfo structure specifying the set
+    of descriptors to update with a single call to
+ifdef::VK_KHR_push_descriptor[]
+    flink:vkCmdPushDescriptorSetWithTemplateKHR or
+endif::VK_KHR_push_descriptor[]
+    flink:vkUpdateDescriptorSetWithTemplate.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pDescriptorUpdateTemplate is a pointer to a
+    sname:VkDescriptorUpdateTemplate handle in which the resulting
+    descriptor update template object is returned.
+
+include::{generated}/validity/protos/vkCreateDescriptorUpdateTemplate.adoc[]
+--
+
+[open,refpage='VkDescriptorUpdateTemplateCreateInfo',desc='Structure specifying parameters of a newly created descriptor update template',type='structs']
+--
+The slink:VkDescriptorUpdateTemplateCreateInfo structure is defined as:
+include::{generated}/api/structs/VkDescriptorUpdateTemplateCreateInfo.adoc[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorUpdateTemplateCreateInfoKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:descriptorUpdateEntryCount is the number of elements in the
+    pname:pDescriptorUpdateEntries array.
+  * pname:pDescriptorUpdateEntries is a pointer to an array of
+    slink:VkDescriptorUpdateTemplateEntry structures describing the
+    descriptors to be updated by the descriptor update template.
+  * pname:templateType Specifies the type of the descriptor update template.
+    If set to ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET it
+    can: only be used to update descriptor sets with a fixed
+    pname:descriptorSetLayout.
+ifdef::VK_KHR_push_descriptor[]
+    If set to ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+    it can: only be used to push descriptor sets using the provided
+    pname:pipelineBindPoint, pname:pipelineLayout, and pname:set number.
+endif::VK_KHR_push_descriptor[]
+  * pname:descriptorSetLayout is the descriptor set layout used to build the
+    descriptor update template.
+    All descriptor sets which are going to be updated through the newly
+    created descriptor update template must: be created with a layout that
+    matches (is the same as, or defined identically to) this layout.
+    This parameter is ignored if pname:templateType is not
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET.
+ifdef::VK_KHR_push_descriptor[]
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
+    type of the pipeline that will use the descriptors.
+    This parameter is ignored if pname:templateType is not
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+  * pname:pipelineLayout is a slink:VkPipelineLayout object used to program
+    the bindings.
+    This parameter is ignored if pname:templateType is not
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+  * pname:set is the set number of the descriptor set in the pipeline layout
+    that will be updated.
+    This parameter is ignored if pname:templateType is not
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+endif::VK_KHR_push_descriptor[]
+ifndef::VK_KHR_push_descriptor[]
+  * pname:pipelineBindPoint is reserved for future use and is ignored
+  * pname:pipelineLayout is reserved for future use and is ignored
+  * pname:set is reserved for future use and is ignored
+endif::VK_KHR_push_descriptor[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350]]
+    If pname:templateType is
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+    pname:descriptorSetLayout must: be a valid sname:VkDescriptorSetLayout
+    handle
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351]]
+    If pname:templateType is
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
+    pname:pipelineBindPoint must: be a valid elink:VkPipelineBindPoint value
+  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352]]
+    If pname:templateType is
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
+    pname:pipelineLayout must: be a valid sname:VkPipelineLayout handle
+  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353]]
+    If pname:templateType is
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, pname:set
+    must: be the unique set number in the pipeline layout that uses a
+    descriptor set layout that was created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-04615]]
+    If pname:templateType is
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+    pname:descriptorSetLayout must: not contain a binding with type
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+****
+
+
+include::{generated}/validity/structs/VkDescriptorUpdateTemplateCreateInfo.adoc[]
+--
+
+[open,refpage='VkDescriptorUpdateTemplateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlags.adoc[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlagsKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+tname:VkDescriptorUpdateTemplateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkDescriptorUpdateTemplateType',desc='Indicates the valid usage of the descriptor update template',type='enums']
+--
+The descriptor update template type is determined by the
+slink:VkDescriptorUpdateTemplateCreateInfo::pname:templateType property,
+which takes the following values:
+
+include::{generated}/api/enums/VkDescriptorUpdateTemplateType.adoc[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/enums/VkDescriptorUpdateTemplateTypeKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET specifies that
+    the descriptor update template will be used for descriptor set updates
+    only.
+ifdef::VK_KHR_push_descriptor[]
+  * ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR specifies
+    that the descriptor update template will be used for push descriptor
+    updates only.
+endif::VK_KHR_push_descriptor[]
+--
+
+
+[open,refpage='VkDescriptorUpdateTemplateEntry',desc='Describes a single descriptor update of the descriptor update template',type='structs']
+--
+The sname:VkDescriptorUpdateTemplateEntry structure is defined as:
+include::{generated}/api/structs/VkDescriptorUpdateTemplateEntry.adoc[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorUpdateTemplateEntryKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:dstBinding is the descriptor binding to update when using this
+    descriptor update template.
+  * pname:dstArrayElement is the starting element in the array belonging to
+    pname:dstBinding.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstBinding has a
+    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+    pname:dstArrayElement specifies the starting byte offset to update.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:descriptorCount is the number of descriptors to update.
+    If pname:descriptorCount is greater than the number of remaining array
+    elements in the destination binding, those affect consecutive bindings
+    in a manner similar to slink:VkWriteDescriptorSet above.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstBinding has a
+    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then
+    pname:descriptorCount specifies the number of bytes to update and the
+    remaining array elements in the destination binding refer to the
+    remaining number of bytes in it.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:descriptorType is a elink:VkDescriptorType specifying the type of
+    the descriptor.
+  * pname:offset is the offset in bytes of the first binding in the raw data
+    structure.
+  * pname:stride is the stride in bytes between two consecutive array
+    elements of the descriptor update information in the raw data structure.
+    The actual pointer ptr for each array element j of update entry i is
+    computed using the following formula:
++
+[source,c++]
+----
+    const char *ptr = (const char *)pData + pDescriptorUpdateEntries[i].offset + j * pDescriptorUpdateEntries[i].stride
+----
++
+The stride is useful in case the bindings are stored in structs along with
+other data.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+then the value of pname:stride is ignored and the stride is assumed to be
+`1`, i.e. the descriptor update information for them is always specified as
+a contiguous range.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354]]
+    pname:dstBinding must: be a valid binding in the descriptor set layout
+    implicitly specified when using a descriptor update template to update
+    descriptors
+  * [[VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355]]
+    pname:dstArrayElement and pname:descriptorCount must: be less than or
+    equal to the number of array elements in the descriptor set binding
+    implicitly specified when using a descriptor update template to update
+    descriptors, and all applicable consecutive bindings, as described by
+    <<descriptorsets-updates-consecutive>>
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226]]
+    If pname:descriptor type is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, pname:dstArrayElement
+    must: be an integer multiple of `4`
+  * [[VUID-VkDescriptorUpdateTemplateEntry-descriptor-02227]]
+    If pname:descriptor type is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkDescriptorUpdateTemplateEntry.adoc[]
+--
+
+[open,refpage='vkDestroyDescriptorUpdateTemplate',desc='Destroy a descriptor update template object',type='protos']
+--
+To destroy a descriptor update template, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkDestroyDescriptorUpdateTemplate.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
+
+ifdef::VK_KHR_descriptor_update_template[]
+include::{generated}/api/protos/vkDestroyDescriptorUpdateTemplateKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:device is the logical device that has been used to create the
+    descriptor update template
+  * pname:descriptorUpdateTemplate is the descriptor update template to
+    destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:descriptorUpdateTemplate was created, a compatible set of
+    callbacks must: be provided here
+  * [[VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:descriptorUpdateTemplate was created, pname:pAllocator must: be
+    `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyDescriptorUpdateTemplate.adoc[]
+--
+
+[open,refpage='vkUpdateDescriptorSetWithTemplate',desc='Update the contents of a descriptor set object using an update template',type='protos']
+--
+Once a sname:VkDescriptorUpdateTemplate has been created, descriptor sets
+can: be updated by calling:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplate.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_descriptor_update_template[or the equivalent command]
+
+ifdef::VK_KHR_descriptor_update_template[]
+include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplateKHR.adoc[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:device is the logical device that updates the descriptor set.
+  * pname:descriptorSet is the descriptor set to update
+  * pname:descriptorUpdateTemplate is a slink:VkDescriptorUpdateTemplate
+    object specifying the update mapping between pname:pData and the
+    descriptor set to update.
+  * pname:pData is a pointer to memory containing one or more
+    slink:VkDescriptorImageInfo, slink:VkDescriptorBufferInfo, or
+    slink:VkBufferView structures
+ifdef::VK_KHR_acceleration_structure[or slink:VkAccelerationStructureKHR]
+ifdef::VK_NV_ray_tracing[or slink:VkAccelerationStructureNV]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[handles]
+    used to write the descriptors.
+
+.Valid Usage
+****
+  * [[VUID-vkUpdateDescriptorSetWithTemplate-pData-01685]]
+    pname:pData must: be a valid pointer to a memory containing one or more
+    valid instances of slink:VkDescriptorImageInfo,
+    slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
+    by pname:descriptorUpdateTemplate when it was created with
+    flink:vkCreateDescriptorUpdateTemplate
+  * [[VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-06995]]
+    Host access to pname:descriptorSet must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    unless explicitly denoted otherwise for specific flags
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+****
+
+include::{generated}/validity/protos/vkUpdateDescriptorSetWithTemplate.adoc[]
+
+.API example
+[source,c++]
+----
+struct AppBufferView {
+    VkBufferView bufferView;
+    uint32_t     applicationRelatedInformation;
+};
+
+struct AppDataStructure
+{
+    VkDescriptorImageInfo  imageInfo;          // a single image info
+    VkDescriptorBufferInfo bufferInfoArray[3]; // 3 buffer infos in an array
+    AppBufferView          bufferView[2];      // An application defined structure containing a bufferView
+    // ... some more application related data
+};
+
+const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
+{
+    // binding to a single image descriptor
+    {
+        .binding = 0,
+        .dstArrayElement = 0,
+        .descriptorCount = 1,
+        .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+        .offset = offsetof(AppDataStructure, imageInfo),
+        .stride = 0         // stride not required if descriptorCount is 1
+    },
+
+    // binding to an array of buffer descriptors
+    {
+        .binding = 1,
+        .dstArrayElement = 0,
+        .descriptorCount = 3,
+        .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+        .offset = offsetof(AppDataStructure, bufferInfoArray),
+        .stride = sizeof(VkDescriptorBufferInfo)    // descriptor buffer infos are compact
+    },
+
+    // binding to an array of buffer views
+    {
+        .binding = 2,
+        .dstArrayElement = 0,
+        .descriptorCount = 2,
+        .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+        .offset = offsetof(AppDataStructure, bufferView) +
+                  offsetof(AppBufferView, bufferView),
+        .stride = sizeof(AppBufferView)             // bufferViews do not have to be compact
+    },
+};
+
+// create a descriptor update template for descriptor set updates
+const VkDescriptorUpdateTemplateCreateInfo createInfo =
+{
+    .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
+    .pNext = NULL,
+    .flags = 0,
+    .descriptorUpdateEntryCount = 3,
+    .pDescriptorUpdateEntries = descriptorUpdateTemplateEntries,
+    .templateType = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
+    .descriptorSetLayout = myLayout,
+    .pipelineBindPoint = 0,     // ignored by given templateType
+    .pipelineLayout = 0,        // ignored by given templateType
+    .set = 0,                   // ignored by given templateType
+};
+
+VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
+myResult = vkCreateDescriptorUpdateTemplate(
+    myDevice,
+    &createInfo,
+    NULL,
+    &myDescriptorUpdateTemplate);
+
+AppDataStructure appData;
+
+// fill appData here or cache it in your engine
+vkUpdateDescriptorSetWithTemplate(myDevice, myDescriptorSet, myDescriptorUpdateTemplate, &appData);
+----
+--
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+
+endif::VKSC_VERSION_1_0[]
+
+
+[[descriptorsets-binding]]
+=== Descriptor Set Binding
+
+[open,refpage='vkCmdBindDescriptorSets',desc='Binds descriptor sets to a command buffer',type='protos']
+--
+To bind one or more descriptor sets to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindDescriptorSets.adoc[]
+
+  * pname:commandBuffer is the command buffer that the descriptor sets will
+    be bound to.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
+    type of the pipeline that will use the descriptors.
+    There is a separate set of bind points for each pipeline type, so
+    binding one does not disturb the others.
+  * pname:layout is a slink:VkPipelineLayout object used to program the
+    bindings.
+  * pname:firstSet is the set number of the first descriptor set to be
+    bound.
+  * pname:descriptorSetCount is the number of elements in the
+    pname:pDescriptorSets array.
+  * pname:pDescriptorSets is a pointer to an array of handles to
+    slink:VkDescriptorSet objects describing the descriptor sets to bind to.
+  * pname:dynamicOffsetCount is the number of dynamic offsets in the
+    pname:pDynamicOffsets array.
+  * pname:pDynamicOffsets is a pointer to an array of code:uint32_t values
+    specifying dynamic offsets.
+
+fname:vkCmdBindDescriptorSets binds descriptor sets
+pname:pDescriptorSets[0..pname:descriptorSetCount-1] to set numbers
+[pname:firstSet..pname:firstSet+pname:descriptorSetCount-1] for subsequent
+<<pipelines-bindpoint-commands, bound pipeline commands>> set by
+pname:pipelineBindPoint.
+Any bindings that were previously applied via these sets
+ifdef::VK_EXT_descriptor_buffer[]
+, or calls to flink:vkCmdSetDescriptorBufferOffsetsEXT or
+flink:vkCmdBindDescriptorBufferEmbeddedSamplersEXT,
+endif::VK_EXT_descriptor_buffer[]
+are no longer valid.
+
+Once bound, a descriptor set affects rendering of subsequent commands that
+interact with the given pipeline type in the command buffer until either a
+different set is bound to the same set number, or the set is disturbed as
+described in <<descriptorsets-compatibility, Pipeline Layout
+Compatibility>>.
+
+A compatible descriptor set must: be bound for all set numbers that any
+shaders in a pipeline access, at the time that a drawing or dispatching
+command is recorded to execute using that pipeline.
+However, if none of the shaders in a pipeline statically use any bindings
+with a particular set number, then no descriptor set need be bound for that
+set number, even if the pipeline layout includes a non-trivial descriptor
+set layout for that set number.
+
+[[descriptor-validity]]
+When consuming a descriptor, a descriptor is considered valid if the
+descriptor is not undefined: as described by
+<<descriptor-set-initial-state,descriptor set allocation>>.
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+a null descriptor is also considered valid.
+endif::VK_EXT_robustness2[]
+A descriptor that was disturbed by <<descriptorsets-compatibility, Pipeline
+Layout Compatibility>>, or was never bound by fname:vkCmdBindDescriptorSets
+is not considered valid.
+If a pipeline accesses a descriptor either statically or dynamically
+depending on the elink:VkDescriptorBindingFlagBits, the consuming descriptor
+type in the pipeline must: match the elink:VkDescriptorType in
+slink:VkDescriptorSetLayoutCreateInfo for the descriptor to be considered
+valid.
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+If a descriptor is a mutable descriptor, the consuming descriptor type in
+the pipeline must: match the active descriptor type for the descriptor to be
+considered valid.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+[NOTE]
+.Note
+====
+Further validation may be carried out beyond validation for descriptor
+types, e.g. <<textures-input-validation,Texel Input Validation>>.
+====
+
+[[descriptorsets-binding-dynamicoffsets]]
+If any of the sets being bound include dynamic uniform or storage buffers,
+then pname:pDynamicOffsets includes one element for each array element in
+each dynamic descriptor type binding in each set.
+Values are taken from pname:pDynamicOffsets in an order such that all
+entries for set N come before set N+1; within a set, entries are ordered by
+the binding numbers in the descriptor set layouts; and within a binding
+array, elements are in order.
+pname:dynamicOffsetCount must: equal the total number of dynamic descriptors
+in the sets being bound.
+
+[[dynamic-effective-offset]]
+The effective offset used for dynamic uniform and storage buffer bindings is
+the sum of the relative offset taken from pname:pDynamicOffsets, and the
+base address of the buffer plus base offset in the descriptor set.
+The range of the dynamic uniform and storage buffer bindings is the buffer
+range as specified in the descriptor set.
+
+Each of the pname:pDescriptorSets must: be compatible with the pipeline
+layout specified by pname:layout.
+The layout used to program the bindings must: also be compatible with the
+pipeline used in subsequent <<pipelines-bindpoint-commands, bound pipeline
+commands>> with that pipeline type, as defined in the
+<<descriptorsets-compatibility, Pipeline Layout Compatibility>> section.
+
+The descriptor set contents bound by a call to fname:vkCmdBindDescriptorSets
+may: be consumed at the following times:
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * For descriptor bindings created with the
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set, the contents
+    may: be consumed when the command buffer is submitted to a queue, or
+    during shader execution of the resulting draws and dispatches, or any
+    time in between.
+    Otherwise,
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * during host execution of the command, or during shader execution of the
+    resulting draws and dispatches, or any time in between.
+
+Thus, the contents of a descriptor set binding must: not be altered
+(overwritten by an update command, or freed) between the first point in time
+that it may: be consumed, and when the command completes executing on the
+queue.
+
+The contents of pname:pDynamicOffsets are consumed immediately during
+execution of fname:vkCmdBindDescriptorSets.
+Once all pending uses have completed, it is legal to update and reuse a
+descriptor set.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]]
+    Each element of pname:pDescriptorSets must: have been allocated with a
+    sname:VkDescriptorSetLayout that matches (is the same as, or identically
+    defined as) the sname:VkDescriptorSetLayout at set _n_ in pname:layout,
+    where _n_ is the sum of pname:firstSet and the index into
+    pname:pDescriptorSets
+  * [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]]
+    pname:dynamicOffsetCount must: be equal to the total number of dynamic
+    descriptors in pname:pDescriptorSets
+  * [[VUID-vkCmdBindDescriptorSets-firstSet-00360]]
+    The sum of pname:firstSet and pname:descriptorSetCount must: be less
+    than or equal to slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount
+    provided when pname:layout was created
+  * [[VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361]]
+    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
+    parent sname:VkCommandPool's queue family
+  * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971]]
+    Each element of pname:pDynamicOffsets which corresponds to a descriptor
+    binding with type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must:
+    be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
+  * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972]]
+    Each element of pname:pDynamicOffsets which corresponds to a descriptor
+    binding with type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must:
+    be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
+  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979]]
+    For each dynamic uniform or storage buffer binding in
+    pname:pDescriptorSets, the sum of the <<dynamic-effective-offset,
+    effective offset>> and the range of the binding must: be less than or
+    equal to the size of the buffer
+  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-06715]]
+    For each dynamic uniform or storage buffer binding in
+    pname:pDescriptorSets, if the range was set with ename:VK_WHOLE_SIZE
+    then pname:pDynamicOffsets which corresponds to the descriptor binding
+    must: be 0
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616]]
+    Each element of pname:pDescriptorSets must: not have been allocated from
+    a sname:VkDescriptorPool with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-vkCmdBindDescriptorSets-graphicsPipelineLibrary-06754]]
+ifdef::VK_EXT_graphics_pipeline_library[]
+    If <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
+    is not enabled, each
+endif::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_graphics_pipeline_library[Each]
+    element of pname:pDescriptorSets must: be a valid slink:VkDescriptorSet
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-08010]]
+    Each element of pname:pDescriptorSets must: have been allocated with a
+    sname:VkDescriptorSetLayout which was not created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+****
+
+include::{generated}/validity/protos/vkCmdBindDescriptorSets.adoc[]
+--
+
+
+ifdef::VK_KHR_push_descriptor[]
+[[descriptorsets-push-descriptors]]
+=== Push Descriptor Updates
+
+[open,refpage='vkCmdPushDescriptorSetKHR',desc='Pushes descriptor updates into a command buffer',type='protos']
+--
+In addition to allocating descriptor sets and binding them to a command
+buffer, an application can: record descriptor updates into the command
+buffer.
+
+To push descriptor updates into a command buffer, call:
+
+include::{generated}/api/protos/vkCmdPushDescriptorSetKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer that the descriptors will be
+    recorded in.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
+    type of the pipeline that will use the descriptors.
+    There is a separate set of push descriptor bindings for each pipeline
+    type, so binding one does not disturb the others.
+  * pname:layout is a slink:VkPipelineLayout object used to program the
+    bindings.
+  * pname:set is the set number of the descriptor set in the pipeline layout
+    that will be updated.
+  * pname:descriptorWriteCount is the number of elements in the
+    pname:pDescriptorWrites array.
+  * pname:pDescriptorWrites is a pointer to an array of
+    slink:VkWriteDescriptorSet structures describing the descriptors to be
+    updated.
+
+_Push descriptors_ are a small bank of descriptors whose storage is
+internally managed by the command buffer rather than being written into a
+descriptor set and later bound to a command buffer.
+Push descriptors allow for incremental updates of descriptors without
+managing the lifetime of descriptor sets.
+
+When a command buffer begins recording, all push descriptors are undefined:.
+Push descriptors can: be updated incrementally and cause shaders to use the
+updated descriptors for subsequent <<pipelines-bindpoint-commands, bound
+pipeline commands>> with the pipeline type set by pname:pipelineBindPoint
+until the descriptor is overwritten, or else until the set is disturbed as
+described in <<descriptorsets-compatibility, Pipeline Layout
+Compatibility>>.
+When the set is disturbed or push descriptors with a different descriptor
+set layout are set, all push descriptors are undefined:.
+
+Push descriptors that are <<shaders-staticuse,statically used>> by a
+pipeline must: not be undefined: at the time that a drawing or dispatching
+command is recorded to execute using that pipeline.
+This includes immutable sampler descriptors, which must: be pushed before
+they are accessed by a pipeline (the immutable samplers are pushed, rather
+than the samplers in pname:pDescriptorWrites).
+Push descriptors that are not statically used can: remain undefined:.
+
+Push descriptors do not use dynamic offsets.
+Instead, the corresponding non-dynamic descriptor types can: be used and the
+pname:offset member of slink:VkDescriptorBufferInfo can: be changed each
+time the descriptor is written.
+
+Each element of pname:pDescriptorWrites is interpreted as in
+slink:VkWriteDescriptorSet, except the pname:dstSet member is ignored.
+
+To push an immutable sampler, use a slink:VkWriteDescriptorSet with
+pname:dstBinding and pname:dstArrayElement selecting the immutable sampler's
+binding.
+If the descriptor type is ename:VK_DESCRIPTOR_TYPE_SAMPLER, the
+pname:pImageInfo parameter is ignored and the immutable sampler is taken
+from the push descriptor set layout in the pipeline layout.
+If the descriptor type is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+the pname:sampler member of the pname:pImageInfo parameter is ignored and
+the immutable sampler is taken from the push descriptor set layout in the
+pipeline layout.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363]]
+    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
+    parent sname:VkCommandPool's queue family
+  * [[VUID-vkCmdPushDescriptorSetKHR-set-00364]]
+    pname:set must: be less than
+    slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
+    pname:layout was created
+  * [[VUID-vkCmdPushDescriptorSetKHR-set-00365]]
+    pname:set must: be the unique set number in the pipeline layout that
+    uses a descriptor set layout that was created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
+  * [[VUID-vkCmdPushDescriptorSetKHR-pDescriptorWrites-06494]]
+    For each element [eq]#i# where
+    pname:pDescriptorWrites[i].pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+    pname:pDescriptorWrites[i].pname:pImageInfo must: be a valid pointer to
+    an array of pname:pDescriptorWrites[i].pname:descriptorCount valid
+    sname:VkDescriptorImageInfo structures
+****
+
+include::{generated}/validity/protos/vkCmdPushDescriptorSetKHR.adoc[]
+--
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+=== Push Descriptor Updates With Descriptor Update Templates
+
+[open,refpage='vkCmdPushDescriptorSetWithTemplateKHR',desc='Pushes descriptor updates into a command buffer using a descriptor update template',type='protos']
+--
+It is also possible to use a descriptor update template to specify the push
+descriptors to update.
+To do so, call:
+
+include::{generated}/api/protos/vkCmdPushDescriptorSetWithTemplateKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer that the descriptors will be
+    recorded in.
+  * pname:descriptorUpdateTemplate is a descriptor update template defining
+    how to interpret the descriptor information in pname:pData.
+  * pname:layout is a slink:VkPipelineLayout object used to program the
+    bindings.
+    It must: be compatible with the layout used to create the
+    pname:descriptorUpdateTemplate handle.
+  * pname:set is the set number of the descriptor set in the pipeline layout
+    that will be updated.
+    This must: be the same number used to create the
+    pname:descriptorUpdateTemplate handle.
+  * pname:pData is a pointer to memory containing descriptors for the
+    templated update.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366]]
+    The pname:pipelineBindPoint specified during the creation of the
+    descriptor update template must: be supported by the
+    pname:commandBuffer's parent sname:VkCommandPool's queue family
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686]]
+    pname:pData must: be a valid pointer to a memory containing one or more
+    valid instances of slink:VkDescriptorImageInfo,
+    slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
+    by pname:descriptorUpdateTemplate when it was created with
+    flink:vkCreateDescriptorUpdateTemplate
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-layout-07993]]
+    pname:layout must: be compatible with the layout used to create
+    pname:descriptorUpdateTemplate
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-descriptorUpdateTemplate-07994]]
+    pname:descriptorUpdateTemplate must: have been created with a
+    pname:templateType of
+    ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-set-07995]]
+    pname:set must: be the same value used to create
+    pname:descriptorUpdateTemplate
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-set-07304]]
+    pname:set must: be less than
+    slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
+    pname:layout was created
+  * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-set-07305]]
+    pname:set must: be the unique set number in the pipeline layout that
+    uses a descriptor set layout that was created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
+****
+
+include::{generated}/validity/protos/vkCmdPushDescriptorSetWithTemplateKHR.adoc[]
+
+.API example
+[source,c++]
+----
+
+struct AppDataStructure
+{
+    VkDescriptorImageInfo  imageInfo;          // a single image info
+    // ... some more application related data
+};
+
+const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
+{
+    // binding to a single image descriptor
+    {
+        .binding = 0,
+        .dstArrayElement = 0,
+        .descriptorCount = 1,
+        .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+        .offset = offsetof(AppDataStructure, imageInfo),
+        .stride = 0     // not required if descriptorCount is 1
+    }
+};
+
+// create a descriptor update template for push descriptor set updates
+const VkDescriptorUpdateTemplateCreateInfo createInfo =
+{
+    .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
+    .pNext = NULL,
+    .flags = 0,
+    .descriptorUpdateEntryCount = 1,
+    .pDescriptorUpdateEntries = descriptorUpdateTemplateEntries,
+    .templateType = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
+    .descriptorSetLayout = 0,   // ignored by given templateType
+    .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
+    .pipelineLayout = myPipelineLayout,
+    .set = 0,
+};
+
+VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
+myResult = vkCreateDescriptorUpdateTemplate(
+    myDevice,
+    &createInfo,
+    NULL,
+    &myDescriptorUpdateTemplate);
+
+AppDataStructure appData;
+// fill appData here or cache it in your engine
+vkCmdPushDescriptorSetWithTemplateKHR(myCmdBuffer, myDescriptorUpdateTemplate, myPipelineLayout, 0,&appData);
+----
+--
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+endif::VK_KHR_push_descriptor[]
+
+
+[[descriptorsets-push-constants]]
+=== Push Constant Updates
+
+As described above in section <<descriptorsets-pipelinelayout, Pipeline
+Layouts>>, the pipeline layout defines shader push constants which are
+updated via Vulkan commands rather than via writes to memory or copy
+commands.
+
+[NOTE]
+.Note
+====
+Push constants represent a high speed path to modify constant data in
+pipelines that is expected to outperform memory-backed resource updates.
+====
+
+[open,refpage='vkCmdPushConstants',desc='Update the values of push constants',type='protos']
+--
+To update push constants, call:
+
+include::{generated}/api/protos/vkCmdPushConstants.adoc[]
+
+  * pname:commandBuffer is the command buffer in which the push constant
+    update will be recorded.
+  * pname:layout is the pipeline layout used to program the push constant
+    updates.
+  * pname:stageFlags is a bitmask of elink:VkShaderStageFlagBits specifying
+    the shader stages that will use the push constants in the updated range.
+  * pname:offset is the start offset of the push constant range to update,
+    in units of bytes.
+  * pname:size is the size of the push constant range to update, in units of
+    bytes.
+  * pname:pValues is a pointer to an array of pname:size bytes containing
+    the new push constant values.
+
+When a command buffer begins recording, all push constant values are
+undefined:.
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+Reads of undefined: push constant values by the executing shader return
+undefined: values.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+Push constant values can: be updated incrementally, causing shader stages in
+pname:stageFlags to read the new data from pname:pValues for push constants
+modified by this command, while still reading the previous data for push
+constants not modified by this command.
+When a <<pipelines-bindpoint-commands, bound pipeline command>> is issued,
+the bound pipeline's layout must: be compatible with the layouts used to set
+the values of all push constants in the pipeline layout's push constant
+ranges, as described in <<descriptorsets-compatibility,Pipeline Layout
+Compatibility>>.
+Binding a pipeline with a layout that is not compatible with the push
+constant layout does not disturb the push constant values.
+
+[NOTE]
+.Note
+====
+As pname:stageFlags needs to include all flags the relevant push constant
+ranges were created with, any flags that are not supported by the queue
+family that the slink:VkCommandPool used to allocate pname:commandBuffer was
+created on are ignored.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdPushConstants-offset-01795]]
+    For each byte in the range specified by pname:offset and pname:size and
+    for each shader stage in pname:stageFlags, there must: be a push
+    constant range in pname:layout that includes that byte and that stage
+  * [[VUID-vkCmdPushConstants-offset-01796]]
+    For each byte in the range specified by pname:offset and pname:size and
+    for each push constant range that overlaps that byte, pname:stageFlags
+    must: include all stages in that push constant range's
+    slink:VkPushConstantRange::pname:stageFlags
+  * [[VUID-vkCmdPushConstants-offset-00368]]
+    pname:offset must: be a multiple of `4`
+  * [[VUID-vkCmdPushConstants-size-00369]]
+    pname:size must: be a multiple of `4`
+  * [[VUID-vkCmdPushConstants-offset-00370]]
+    pname:offset must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
+  * [[VUID-vkCmdPushConstants-size-00371]]
+    pname:size must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
+    pname:offset
+****
+
+include::{generated}/validity/protos/vkCmdPushConstants.adoc[]
+--
+
+
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+[[descriptorsets-physical-storage-buffer]]
+== Physical Storage Buffer Access
+
+[open,refpage='vkGetBufferDeviceAddress',desc='Query an address of a buffer',type='protos',alias='vkGetBufferDeviceAddressKHR']
+--
+To query a 64-bit buffer device address value through which buffer memory
+can: be accessed in a shader, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkGetBufferDeviceAddress.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
+
+ifdef::VK_KHR_buffer_device_address[]
+include::{generated}/api/protos/vkGetBufferDeviceAddressKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+// Jon: 3-way conditional logic here is wrong
+
+ifdef::VK_EXT_buffer_device_address[]
+or the equivalent command
+
+include::{generated}/api/protos/vkGetBufferDeviceAddressEXT.adoc[]
+endif::VK_EXT_buffer_device_address[]
+
+  * pname:device is the logical device that the buffer was created on.
+  * pname:pInfo is a pointer to a slink:VkBufferDeviceAddressInfo structure
+    specifying the buffer to retrieve an address for.
+
+The 64-bit return value is an address of the start of pname:pInfo->buffer.
+The address range starting at this value and whose size is the size of the
+buffer can: be used in a shader to access the memory bound to that buffer,
+using the
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+`SPV_KHR_physical_storage_buffer` extension
+ifdef::VK_EXT_buffer_device_address[or the equivalent]
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_buffer_device_address[]
+`SPV_EXT_physical_storage_buffer` extension
+endif::VK_EXT_buffer_device_address[]
+and the code:PhysicalStorageBuffer storage class.
+For example, this value can: be stored in a uniform buffer, and the shader
+can: read the value from the uniform buffer and use it to do a dependent
+read/write to this buffer.
+A value of zero is reserved as a "`null`" pointer and must: not be returned
+as a valid buffer device address.
+All loads, stores, and atomics in a shader through
+code:PhysicalStorageBuffer pointers must: access addresses in the address
+range of some buffer.
+
+If the buffer was created with a non-zero value of
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_buffer_device_address[slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress or]
+ifndef::VK_EXT_buffer_device_address[slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress,]
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_buffer_device_address[]
+slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress,
+endif::VK_EXT_buffer_device_address[]
+the return value will be the same address that was returned at capture time.
+
+The returned address must: satisfy the alignment requirement specified by
+slink:VkMemoryRequirements::pname:alignment for the buffer in
+slink:VkBufferDeviceAddressInfo::pname:buffer.
+
+If multiple slink:VkBuffer objects are bound to overlapping ranges of
+slink:VkDeviceMemory, implementations may: return address ranges which
+overlap.
+In this case, it is ambiguous which slink:VkBuffer is associated with any
+given device address.
+For purposes of valid usage, if multiple slink:VkBuffer objects can: be
+attributed to a device address, a slink:VkBuffer is selected such that valid
+usage passes, if it exists.
+
+.Valid Usage
+****
+  * [[VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324]]
+    The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>
+ifdef::VK_EXT_buffer_device_address[]
+    or <<features-bufferDeviceAddressEXT,
+    sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddress>>
+endif::VK_EXT_buffer_device_address[]
+    feature must: be enabled
+  * [[VUID-vkGetBufferDeviceAddress-device-03325]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>>
+ifdef::VK_EXT_buffer_device_address[]
+    or <<features-bufferDeviceAddressMultiDeviceEXT,
+    sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddressMultiDevice>>
+endif::VK_EXT_buffer_device_address[]
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetBufferDeviceAddress.adoc[]
+--
+
+[open,refpage='VkBufferDeviceAddressInfo',desc='Structure specifying the buffer to query an address for',type='structs',alias='VkBufferDeviceAddressInfoKHR,VkBufferDeviceAddressInfoEXT']
+--
+The sname:VkBufferDeviceAddressInfo structure is defined as:
+
+include::{generated}/api/structs/VkBufferDeviceAddressInfo.adoc[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferDeviceAddressInfoKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+// Jon: three-way conditional logic is broken
+ifdef::VK_EXT_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferDeviceAddressInfoEXT.adoc[]
+endif::VK_EXT_buffer_device_address[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer specifies the buffer whose address is being queried.
+
+.Valid Usage
+****
+  * [[VUID-VkBufferDeviceAddressInfo-buffer-02600]]
+    If pname:buffer is non-sparse and was not created with the
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag, then it
+    must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-VkBufferDeviceAddressInfo-buffer-02601]]
+    pname:buffer must: have been created with
+    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
+****
+
+include::{generated}/validity/structs/VkBufferDeviceAddressInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+[open,refpage='vkGetBufferOpaqueCaptureAddress',desc='Query an opaque capture address of a buffer',type='protos',alias='vkGetBufferOpaqueCaptureAddressKHR']
+--
+To query a 64-bit buffer opaque capture address, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkGetBufferOpaqueCaptureAddress.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
+
+ifdef::VK_KHR_buffer_device_address[]
+include::{generated}/api/protos/vkGetBufferOpaqueCaptureAddressKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:device is the logical device that the buffer was created on.
+  * pname:pInfo is a pointer to a slink:VkBufferDeviceAddressInfo structure
+    specifying the buffer to retrieve an address for.
+
+The 64-bit return value is an opaque capture address of the start of
+pname:pInfo->buffer.
+
+If the buffer was created with a non-zero value of
+slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress the
+return value must: be the same address.
+
+.Valid Usage
+****
+  * [[VUID-vkGetBufferOpaqueCaptureAddress-None-03326]]
+    The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature
+    must: be enabled
+  * [[VUID-vkGetBufferOpaqueCaptureAddress-device-03327]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetBufferOpaqueCaptureAddress.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+
+ifdef::VK_EXT_descriptor_buffer[]
+[[descriptorbuffers]]
+== Descriptor Buffers
+
+If the <<features-descriptorBuffer, pname:descriptorBuffer>> feature is
+enabled, an alternative way to specify descriptor sets is via buffers,
+rather than descriptor set objects.
+
+
+[[descriptorbuffers-puttingdescriptorsinmemory]]
+=== Putting Descriptors in Memory
+
+Commands are provided to retrieve descriptor data, and also to locate where
+in memory that data must: be written to match the given descriptor set
+layout.
+
+[open,refpage='vkGetDescriptorSetLayoutSizeEXT',desc='Get the size of a descriptor set layout in memory',type='protos']
+--
+To determine the amount of memory needed to store all descriptors with a
+given layout, call:
+
+include::{generated}/api/protos/vkGetDescriptorSetLayoutSizeEXT.adoc[]
+
+  * pname:device is the logical device that gets the size.
+  * pname:layout is the descriptor set layout being queried.
+  * pname:pLayoutSizeInBytes is a pointer to basetype:VkDeviceSize where the
+    size in bytes will be written.
+
+The size of a descriptor set layout will be at least as large as the sum
+total of the size of all descriptors in the layout, and may: be larger.
+This size represents the amount of memory that will be required to store all
+of the descriptors for this layout in memory, when placed according to the
+layout's offsets as obtained by
+flink:vkGetDescriptorSetLayoutBindingOffsetEXT.
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If any pname:binding in pname:layout is
+ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, the returned size
+includes space for the maximum pname:descriptorCount descriptors as declared
+for that pname:binding.
+To compute the required size of a descriptor set with a
+ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT:
+
+  {empty}:: [eq]#size = offset + descriptorSize {times}
+            variableDescriptorCount#
+
+where [eq]#offset# is obtained by
+flink:vkGetDescriptorSetLayoutBindingOffsetEXT and [eq]#descriptorSize# is
+the size of the relevant descriptor as obtained from
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT, and
+[eq]#variableDescriptorCount# is the equivalent of
+slink:VkDescriptorSetVariableDescriptorCountAllocateInfo::pname:pDescriptorCounts.
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+For ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
+[eq]#variableDescriptorCount# is the size in bytes for the inline uniform
+block, and [eq]#descriptorSize# is 1.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+If
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:combinedImageSamplerDescriptorSingleArray
+is ename:VK_FALSE and the variable descriptor type is
+ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+[eq]#variableDescriptorCount# is always considered to be the upper bound.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetDescriptorSetLayoutSizeEXT-None-08011]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkGetDescriptorSetLayoutSizeEXT-layout-08012]]
+    pname:layout must: have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT flag set
+****
+
+include::{generated}/validity/protos/vkGetDescriptorSetLayoutSizeEXT.adoc[]
+--
+
+[open,refpage='vkGetDescriptorSetLayoutBindingOffsetEXT',desc='Get the offset of a binding within a descriptor set layout',type='protos']
+--
+To get the offset of a binding within a descriptor set layout in memory,
+call:
+
+include::{generated}/api/protos/vkGetDescriptorSetLayoutBindingOffsetEXT.adoc[]
+
+  * pname:device is the logical device that gets the offset.
+  * pname:layout is the descriptor set layout being queried.
+  * pname:binding is the binding number being queried.
+  * pname:pOffset is a pointer to basetype:VkDeviceSize where the byte
+    offset of the binding will be written.
+
+Each binding in a descriptor set layout is assigned an offset in memory by
+the implementation.
+When a shader accesses a resource with that binding, it will access the
+bound descriptor buffer from that offset to look for its descriptor.
+This command provides an application with that offset, so that descriptors
+can be placed in the correct locations.
+The precise location accessed by a shader for a given descriptor is as
+follows:
+
+  {empty}:: [eq]#location = bufferAddress {plus} setOffset {plus}
+            descriptorOffset {plus} (arrayElement {times} descriptorSize)#
+
+where [eq]#bufferAddress# and [eq]#setOffset# are the base address and
+offset for the identified descriptor set as specified by
+flink:vkCmdBindDescriptorBuffersEXT and
+flink:vkCmdSetDescriptorBufferOffsetsEXT, [eq]#descriptorOffset# is the
+offset for the binding returned by this command, [eq]#arrayElement# is the
+index into the array specified in the shader, and [eq]#descriptorSize# is
+the size of the relevant descriptor as obtained from
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT.
+Applications are responsible for placing valid descriptors at the expected
+location in order for a shader to access it.
+The overall offset added to [eq]#bufferAddress# to calculate [eq]#location#
+must: be less than
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxSamplerDescriptorBufferRange
+for samplers and
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxResourceDescriptorBufferRange
+for resources.
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If any pname:binding in pname:layout is
+ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, that
+pname:binding must: have the largest offset of any pname:binding.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+A descriptor pname:binding with type ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+can: be used.
+Any potential types in
+slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes for
+pname:binding share the same offset.
+If the size of the <<descriptorsets-mutable, mutable descriptor>> is larger
+than the size of a concrete descriptor type being accessed, the padding area
+is ignored by the implementation.
+endif::VK_VALVE_mutable_descriptor_type[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-None-08013]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-layout-08014]]
+    pname:layout must: have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT flag set
+****
+
+include::{generated}/validity/protos/vkGetDescriptorSetLayoutBindingOffsetEXT.adoc[]
+--
+
+[open,refpage='vkGetDescriptorEXT',desc='To get a descriptor to place in a buffer',type='protos']
+--
+To get descriptor data to place in a buffer, call:
+
+include::{generated}/api/protos/vkGetDescriptorEXT.adoc[]
+
+  * pname:device is the logical device that gets the descriptor.
+  * pname:pDescriptorInfo is a pointer to a slink:VkDescriptorGetInfoEXT
+    structure specifying the parameters of the descriptor to get.
+  * pname:dataSize is the amount of the descriptor data to get in bytes.
+  * pname:pDescriptor is a pointer to a user-allocated buffer where the
+    descriptor will be written.
+
+The size of the data for each descriptor type is determined by the value in
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT.
+This value also defines the stride in bytes for arrays of that descriptor
+type.
+
+If the
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:combinedImageSamplerDescriptorSingleArray
+property is ename:VK_FALSE the implementation requires an array of
+ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptors to be written
+into a descriptor buffer as an array of image descriptors, immediately
+followed by an array of sampler descriptors.
+Applications must: write the first
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:sampledImageDescriptorSize
+bytes of the data returned through pname:pDescriptor to the first array, and
+the remaining
+slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:samplerDescriptorSize
+bytes of the data to the second array.
+For variable-sized descriptor bindings of
+ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptors, the two arrays
+each have a size equal to the upper bound pname:descriptorCount of that
+binding.
+
+A descriptor obtained by this command references the underlying
+slink:VkImageView or slink:VkSampler, and these objects must: not be
+destroyed before the last time a descriptor is dynamically accessed.
+For descriptor types which consume an address instead of an object, the
+underlying slink:VkBuffer is referenced instead.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDescriptorEXT-None-08015]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkGetDescriptorEXT-dataSize-08125]]
+    pname:dataSize must: equal the size of a descriptor of type
+    slink:VkDescriptorGetInfoEXT::pname:type determined by the value in
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT
+ifdef::VK_EXT_fragment_density_map[]
+    , or determined by
+    slink:VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT::pname:combinedImageSamplerDensityMapDescriptorSize
+    if pname:pDescriptorInfo specifies a
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER whose slink:VkSampler
+    was created with ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT set
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-vkGetDescriptorEXT-pDescriptor-08016]]
+    pname:pDescriptor must: be a valid pointer to an array of at least
+    pname:dataSize bytes
+****
+
+include::{generated}/validity/protos/vkGetDescriptorEXT.adoc[]
+--
+
+[open,refpage='VkDescriptorGetInfoEXT',desc='Structure specifying parameters of descriptor to get',type='structs']
+--
+Information about the descriptor to get is passed in a
+sname:VkDescriptorGetInfoEXT structure:
+
+include::{generated}/api/structs/VkDescriptorGetInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is the type of descriptor to get.
+  * pname:data is a structure containing the information needed to get the
+    descriptor.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorGetInfoEXT-type-08018]]
+    pname:type must: not be ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC or
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+  * [[VUID-VkDescriptorGetInfoEXT-type-08019]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the
+    pname:pCombinedImageSampler->sampler member of pname:data must: be a
+    slink:VkSampler created on pname:device
+  * [[VUID-VkDescriptorGetInfoEXT-type-08020]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the
+    pname:pCombinedImageSampler->imageView member of pname:data must: be a
+    slink:VkImageView created on pname:device, or dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorGetInfoEXT-type-08021]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the
+    pname:pInputAttachmentImage->imageView member of pname:data must: be a
+    slink:VkImageView created on pname:device
+  * [[VUID-VkDescriptorGetInfoEXT-type-08022]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and if
+    pname:pSampledImage is not `NULL`, the pname:pSampledImage->imageView
+    member of pname:data must: be a slink:VkImageView created on
+    pname:device, or dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorGetInfoEXT-type-08023]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and if
+    pname:pStorageImage is not `NULL`, the pname:pStorageImage->imageView
+    member of pname:data must: be a slink:VkImageView created on
+    pname:device, or dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorGetInfoEXT-type-08024]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+    pname:pUniformTexelBuffer is not `NULL` and
+    pname:pUniformTexelBuffer->address is not zero,
+    pname:pUniformTexelBuffer->address must be an address within a
+    slink:VkBuffer created on pname:device
+  * [[VUID-VkDescriptorGetInfoEXT-type-08025]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+    pname:pStorageTexelBuffer is not `NULL` and
+    pname:pStorageTexelBuffer->address is not zero,
+    pname:pStorageTexelBuffer->address must be an address within a
+    slink:VkBuffer created on pname:device
+  * [[VUID-VkDescriptorGetInfoEXT-type-08026]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    pname:pUniformBuffer is not `NULL` and pname:pUniformBuffer->address is
+    not zero, pname:pUniformBuffer->address must be an address within a
+    slink:VkBuffer created on pname:device
+  * [[VUID-VkDescriptorGetInfoEXT-type-08027]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    pname:pStorageBuffer is not `NULL` and pname:pStorageBuffer->address is
+    not zero, pname:pStorageBuffer->address must be an address within a
+    slink:VkBuffer created on pname:device
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkDescriptorGetInfoEXT-type-08028]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR and
+    pname:accelerationStructure is not `0`, pname:accelerationStructure
+    must: contain the address of a slink:VkAccelerationStructureKHR created
+    on pname:device
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-VkDescriptorGetInfoEXT-type-08029]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV and
+    pname:accelerationStructure is not `0`, pname:accelerationStructure
+    must: contain the handle of a slink:VkAccelerationStructureNV created on
+    pname:device, returned by flink:vkGetAccelerationStructureHandleNV
+endif::VK_NV_ray_tracing[]
+****
+
+include::{generated}/validity/structs/VkDescriptorGetInfoEXT.adoc[]
+--
+
+[open,refpage='VkDescriptorDataEXT',desc='Structure specifying descriptor data',type='structs']
+--
+Data describing the descriptor is passed in a sname:VkDescriptorDataEXT
+structure:
+
+include::{generated}/api/structs/VkDescriptorDataEXT.adoc[]
+
+  * pname:pSampler is a pointer to a slink:VkSampler handle specifying the
+    parameters of a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor.
+  * pname:pCombinedImageSampler is a pointer to a
+    slink:VkDescriptorImageInfo structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
+  * pname:pInputAttachmentImage is a pointer to a
+    slink:VkDescriptorImageInfo structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor.
+  * pname:pSampledImage is a pointer to a slink:VkDescriptorImageInfo
+    structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE descriptor.
+  * pname:pStorageImage is a pointer to a slink:VkDescriptorImageInfo
+    structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE descriptor.
+  * pname:pUniformTexelBuffer is a pointer to a
+    slink:VkDescriptorAddressInfoEXT structure specifying the parameters of
+    a ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
+  * pname:pStorageTexelBuffer is a pointer to a
+    slink:VkDescriptorAddressInfoEXT structure specifying the parameters of
+    a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
+  * pname:pUniformBuffer is a pointer to a slink:VkDescriptorAddressInfoEXT
+    structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor.
+  * pname:pStorageBuffer is a pointer to a slink:VkDescriptorAddressInfoEXT
+    structure specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor.
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[]
+  * pname:accelerationStructure is
+ifdef::VK_KHR_acceleration_structure[]
+     the address of a slink:VkAccelerationStructureKHR specifying the
+     parameters of a ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
+     descriptor
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[, or ]
+ifdef::VK_NV_ray_tracing[]
+    a slink:VkAccelerationStructureNV handle specifying the parameters of a
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor.
+endif::VK_NV_ray_tracing[]
+endif::VK_KHR_acceleration_structure+VK_NV_ray_tracing[]
+ifndef::VK_NV_ray_tracing,VK_NV_ray_tracing[]
+  * pname:accelerationStructure is reserved for future use and is ignored.
+endif::VK_NV_ray_tracing,VK_NV_ray_tracing[]
+
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+pname:pSampledImage, pname:pStorageImage, pname:pUniformTexelBuffer,
+pname:pStorageTexelBuffer, pname:pUniformBuffer, and pname:pStorageBuffer
+can: each be `NULL`.
+Loads from a null descriptor return zero values and stores and atomics to a
+null descriptor are discarded.
+
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+pname:accelerationStructure can: be `0`.
+A null acceleration structure descriptor results in the miss shader being
+invoked.
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorDataEXT-type-08030]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, and
+    pname:pUniformBuffer->address is the address of a non-sparse buffer,
+    then that buffer must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-VkDescriptorDataEXT-type-08031]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and
+    pname:pStorageBuffer->address is the address of a non-sparse buffer,
+    then that buffer must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+  * [[VUID-VkDescriptorDataEXT-type-08032]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, and
+    pname:pUniformTexelBuffer->address is the address of a non-sparse
+    buffer, then that buffer must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+  * [[VUID-VkDescriptorDataEXT-type-08033]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and
+    pname:pStorageTexelBuffer->address is the address of a non-sparse
+    buffer, then that buffer must: be bound completely and contiguously to a
+    single sname:VkDeviceMemory object
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-VkDescriptorDataEXT-type-08034]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pCombinedImageSampler->imageView must: not be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorDataEXT-type-08035]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pSampledImage must: not be `NULL` and
+    pname:pSampledImage->imageView must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorDataEXT-type-08036]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pStorageImage must: not be `NULL` and
+    pname:pStorageImage->imageView must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkDescriptorDataEXT-type-08037]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pUniformTexelBuffer must: not be `NULL`
+  * [[VUID-VkDescriptorDataEXT-type-08038]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pStorageTexelBuffer must: not be `NULL`
+  * [[VUID-VkDescriptorDataEXT-type-08039]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pUniformBuffer must: not be `NULL`
+  * [[VUID-VkDescriptorDataEXT-type-08040]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:pStorageBuffer must: not be `NULL`
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkDescriptorDataEXT-type-08041]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:accelerationStructure must: not be `0`
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-VkDescriptorDataEXT-type-08042]]
+    If slink:VkDescriptorGetInfoEXT:pname:type is
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, and the
+    <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, pname:accelerationStructure must: not be `0`
+endif::VK_NV_ray_tracing[]
+endif::VK_EXT_robustness2[]
+****
+
+include::{generated}/validity/structs/VkDescriptorDataEXT.adoc[]
+
+endif::VK_EXT_robustness2[]
+--
+
+[open,refpage='VkDescriptorAddressInfoEXT',desc='Structure specifying descriptor buffer address info',type='structs']
+--
+Data describing a ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, or
+ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is passed in a
+sname:VkDescriptorAddressInfoEXT structure:
+
+include::{generated}/api/structs/VkDescriptorAddressInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:address is either `0` or a device address at an offset in a
+    buffer, where the base address can be queried from
+    flink:vkGetBufferDeviceAddress.
+  * pname:range is the size in bytes of the buffer or buffer view used by
+    the descriptor.
+  * pname:format is the format of the data elements in the buffer view and
+    is ignored for buffers.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorAddressInfoEXT-address-08043]]
+ifdef::VK_EXT_robustness2[]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled,
+endif::VK_EXT_robustness2[]
+    pname:address must: not be zero
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-VkDescriptorAddressInfoEXT-nullDescriptor-08938]]
+    If pname:address is zero, pname:range must: be ename:VK_WHOLE_SIZE
+endif::VK_EXT_robustness2[]
+  * [[VUID-VkDescriptorAddressInfoEXT-nullDescriptor-08939]]
+ifdef::VK_EXT_robustness2[]
+    If pname:address is not zero,
+endif::VK_EXT_robustness2[]
+    pname:range must: not be ename:VK_WHOLE_SIZE
+  * [[VUID-VkDescriptorAddressInfoEXT-None-08044]]
+    If pname:address is not zero, pname:address must: be a valid device
+    address at an offset within a slink:VkBuffer
+  * [[VUID-VkDescriptorAddressInfoEXT-range-08045]]
+    pname:range must: be less than or equal to the size of the buffer
+    containing pname:address minus the offset of pname:address from the base
+    address of the buffer
+  * [[VUID-VkDescriptorAddressInfoEXT-range-08940]]
+    pname:range must: not be zero
+****
+
+include::{generated}/validity/structs/VkDescriptorAddressInfoEXT.adoc[]
+
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+pname:address can: be zero.
+Loads from a null descriptor return zero values and stores and atomics to a
+null descriptor are discarded.
+endif::VK_EXT_robustness2[]
+--
+
+Immutable samplers specified in a descriptor set layout through
+pname:pImmutableSamplers must: be provided by applications when obtaining
+descriptor data.
+Immutable samplers written in a descriptor buffer must: have identical
+parameters to the immutable samplers in the descriptor set layout that
+consumes the sampler.
+
+[NOTE]
+.Note
+====
+If the descriptor set layout was created with
+ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+there is no buffer backing for the immutable sampler, so this requirement
+does not exist.
+The implementation handles allocation of these descriptors internally.
+====
+
+[NOTE]
+.Note
+====
+As descriptors are now in regular memory, drivers cannot hide copies of
+immutable samplers that end up in descriptor sets from the application.
+As such, applications are required to provide these samplers as if they were
+not provided immutably.
+====
+
+
+[[descriptorbuffers-binding]]
+=== Binding Descriptor Buffers
+
+Descriptor buffers have their own separate binding point on the command
+buffer, with buffers bound using flink:vkCmdBindDescriptorBuffersEXT.
+flink:vkCmdSetDescriptorBufferOffsetsEXT assigns pairs of buffer binding
+indices and buffer offsets to the same binding point on the command buffer
+as flink:vkCmdBindDescriptorSets, allowing subsequent
+<<pipelines-bindpoint-commands, bound pipeline commands>> to use the
+specified descriptor buffers.
+Bindings applied via flink:vkCmdBindDescriptorSets cannot: exist
+simultaneously with those applied via calls to
+flink:vkCmdSetDescriptorBufferOffsetsEXT or
+flink:vkCmdBindDescriptorBufferEmbeddedSamplersEXT, as calls to
+flink:vkCmdSetDescriptorBufferOffsetsEXT or
+flink:vkCmdBindDescriptorBufferEmbeddedSamplersEXT invalidate any bindings
+by previous calls to flink:vkCmdBindDescriptorSets and vice-versa.
+
+[open,refpage='vkCmdBindDescriptorBuffersEXT',desc='Binding descriptor buffers to a command buffer',type='protos']
+--
+To bind descriptor buffers to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindDescriptorBuffersEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer that the descriptor buffers
+    will be bound to.
+  * pname:bufferCount is the number of elements in the pname:pBindingInfos
+    array.
+  * pname:pBindingInfos is a pointer to an array of
+    slink:VkDescriptorBufferBindingInfoEXT structures.
+
+`vkCmdBindDescriptorBuffersEXT` causes any offsets previously set by
+flink:vkCmdSetDescriptorBufferOffsetsEXT that use the bindings numbered
+[`0`..
+pname:bufferCount-1] to be no longer valid for subsequent bound pipeline
+commands.
+Any previously bound buffers at binding points greater than or equal to
+pname:bufferCount are unbound.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-None-08047]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-maxSamplerDescriptorBufferBindings-08048]]
+    There must: be no more than
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxSamplerDescriptorBufferBindings
+    descriptor buffers containing sampler descriptor data bound
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-maxResourceDescriptorBufferBindings-08049]]
+    There must: be no more than
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxResourceDescriptorBufferBindings
+    descriptor buffers containing resource descriptor data bound
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-None-08050]]
+    There must: be no more than `1` descriptor buffer bound that was created
+    with the
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT bit set
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-bufferCount-08051]]
+    pname:bufferCount must: be less than or equal to
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxDescriptorBufferBindings
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08052]]
+    For any element of pname:pBindingInfos, if the buffer from which
+    pname:address was queried is non-sparse then it must: be bound
+    completely and contiguously to a single slink:VkDeviceMemory object
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08053]]
+    For any element of pname:pBindingInfos, the buffer from which
+    pname:address was queried must: have been created with the
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT bit set if it
+    contains sampler descriptor data
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08054]]
+    For any element of pname:pBindingInfos, the buffer from which
+    pname:address was queried must: have been created with the
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT bit set if it
+    contains resource descriptor data
+  * [[VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08055]]
+    For any element of pname:pBindingInfos, pname:usage must: match the
+    buffer from which pname:address was queried
+****
+
+include::{generated}/validity/protos/vkCmdBindDescriptorBuffersEXT.adoc[]
+--
+
+[open,refpage='VkDescriptorBufferBindingInfoEXT',desc='Structure specifying descriptor buffer binding information',type='structs']
+--
+Data describing a descriptor buffer binding is passed in a
+sname:VkDescriptorBufferBindingInfoEXT structure:
+
+include::{generated}/api/structs/VkDescriptorBufferBindingInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:address is a basetype:VkDeviceAddress specifying the device
+    address defining the descriptor buffer to be bound.
+  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits specifying the
+    slink:VkBufferCreateInfo::pname:usage for the buffer from which
+    pname:address was queried.
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
+from that structure is used instead of pname:flags from this structure.
+endif::VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorBufferBindingInfoEXT-bufferlessPushDescriptors-08056]]
+    If <<limits-bufferlessPushDescriptors,
+    sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferlessPushDescriptors>>
+    is ename:VK_FALSE, and pname:usage contains
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, then
+    the pname:pNext chain must: include a
+    slink:VkDescriptorBufferBindingPushDescriptorBufferHandleEXT structure
+  * [[VUID-VkDescriptorBufferBindingInfoEXT-address-08057]]
+    pname:address must: be aligned to
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:descriptorBufferOffsetAlignment
+  * [[VUID-VkDescriptorBufferBindingInfoEXT-usage-08122]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, pname:address
+    must: be an address within a valid buffer that was created with
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT
+  * [[VUID-VkDescriptorBufferBindingInfoEXT-usage-08123]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, pname:address
+    must: be an address within a valid buffer that was created with
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT
+ifdef::VK_KHR_push_descriptor[]
+  * [[VUID-VkDescriptorBufferBindingInfoEXT-usage-08124]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT,
+    pname:address must: be an address within a valid buffer that was created
+    with ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
+endif::VK_KHR_push_descriptor[]
+****
+
+include::{generated}/validity/structs/VkDescriptorBufferBindingInfoEXT.adoc[]
+--
+
+[open,refpage='VkDescriptorBufferBindingPushDescriptorBufferHandleEXT',desc='Structure specifying push descriptor buffer binding information',type='structs']
+--
+When the <<limits-bufferlessPushDescriptors,
+sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferlessPushDescriptors>>
+property is ename:VK_FALSE, the sname:VkBuffer handle of the buffer for push
+descriptors is passed in a
+sname:VkDescriptorBufferBindingPushDescriptorBufferHandleEXT structure:
+
+include::{generated}/api/structs/VkDescriptorBufferBindingPushDescriptorBufferHandleEXT.adoc[]
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is the sname:VkBuffer handle of the buffer for push
+    descriptors.
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorBufferBindingPushDescriptorBufferHandleEXT-bufferlessPushDescriptors-08059]]
+    <<limits-bufferlessPushDescriptors,
+    sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferlessPushDescriptors>>
+    must: be ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkDescriptorBufferBindingPushDescriptorBufferHandleEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetDescriptorBufferOffsetsEXT',desc='Setting descriptor buffer offsets in a command buffer',type='protos']
+--
+To set descriptor buffer offsets in a command buffer, call:
+
+include::{generated}/api/protos/vkCmdSetDescriptorBufferOffsetsEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer in which the descriptor buffer
+    offsets will be set.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
+    type of the pipeline that will use the descriptors.
+  * pname:layout is a slink:VkPipelineLayout object used to program the
+    bindings.
+  * pname:firstSet is the number of the first set to be bound.
+  * pname:setCount is the number of elements in the pname:pBufferIndices and
+    pname:pOffsets arrays.
+  * pname:pBufferIndices is a pointer to an array of indices into the
+    descriptor buffer binding points set by
+    flink:vkCmdBindDescriptorBuffersEXT.
+  * pname:pOffsets is a pointer to an array of basetype:VkDeviceSize offsets
+    to apply to the bound descriptor buffers.
+
+fname:vkCmdSetDescriptorBufferOffsetsEXT binds pname:setCount pairs of
+descriptor buffers, specified by indices into the binding points bound using
+flink:vkCmdBindDescriptorBuffersEXT, and buffer offsets to set numbers
+[pname:firstSet..pname:firstSet+pname:descriptorSetCount-1] for subsequent
+<<pipelines-bindpoint-commands, bound pipeline commands>> set by
+pname:pipelineBindPoint.
+Set [pname:firstSet + i] is bound to the descriptor buffer at binding
+pname:pBufferIndices[i] at an offset of pname:pOffsets[i].
+Any bindings that were previously applied via these sets, or calls to
+flink:vkCmdBindDescriptorSets, are no longer valid.
+Other sets will also be invalidated upon calling this command if
+pname:layout differs from the pipeline layout used to bind those other sets,
+as described in <<descriptorsets-compatibility,Pipeline Layout
+Compatibility>>.
+
+After binding descriptors, applications can: modify descriptor memory either
+by performing writes on the host or with device commands.
+When descriptor memory is updated with device commands, visibility for the
+shader stage accessing a descriptor is ensured with the
+ename:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT access flag.
+Implementations must: not access resources referenced by these descriptors
+unless they are dynamically accessed by shaders.
+Descriptors bound with this call can: be undefined: if they are not
+dynamically accessed by shaders.
+
+Implementations may: read descriptor data for any statically accessed
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+descriptor if the pname:binding in pname:layout is not declared with the
+ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT flag.
+If the pname:binding in pname:layout is declared with
+ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, implementations
+must: not read descriptor data that is not dynamically accessed.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+descriptor.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+Applications must: ensure that any descriptor which the implementation may:
+read must: be in-bounds of the underlying descriptor buffer binding.
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[NOTE]
+.Note
+====
+Applications can freely decide how large a variable descriptor buffer
+binding is, so it may not be safe to read such descriptor payloads
+statically.
+The intention of these rules is to allow implementations to speculatively
+prefetch descriptor payloads where feasible.
+====
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+Dynamically accessing a resource through descriptor data from an unbound
+region of a <<sparsememory-partially-resident-buffers, sparse
+partially-resident buffer>> will result in invalid descriptor data being
+read, and therefore undefined: behavior.
+
+[NOTE]
+.Note
+====
+For descriptors written by the host, visibility is implied through the
+automatic visibility operation on queue submit, and there is no need to
+consider etext:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT.
+Explicit synchronization for descriptors is only required when descriptors
+are updated on the device.
+====
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[NOTE]
+.Note
+====
+The requirements above imply that all descriptor bindings have been defined
+with the equivalent of ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,
+ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT and
+ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, but enabling those features
+is not required to get this behavior.
+====
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-None-08060]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08061]]
+    The offsets in pname:pOffsets must: be aligned to
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:descriptorBufferOffsetAlignment
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08063]]
+    The offsets in pname:pOffsets must: be small enough such that any
+    descriptor binding referenced by pname:layout
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    without the ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT
+    flag
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    computes a valid address inside the underlying slink:VkBuffer
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08126]]
+    The offsets in pname:pOffsets must: be small enough such that any
+    location accessed by a shader as a sampler descriptor must: be within
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxSamplerDescriptorBufferRange
+    of the sampler descriptor buffer binding
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08127]]
+    The offsets in pname:pOffsets must: be small enough such that any
+    location accessed by a shader as a resource descriptor must: be within
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxResourceDescriptorBufferRange
+    of the resource descriptor buffer binding
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pBufferIndices-08064]]
+    Each element of pname:pBufferIndices must: be less than
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:maxDescriptorBufferBindings
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pBufferIndices-08065]]
+    Each element of pname:pBufferIndices must: reference a valid descriptor
+    buffer binding set by a previous call to
+    flink:vkCmdBindDescriptorBuffersEXT in pname:commandBuffer
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-firstSet-08066]]
+    The sum of pname:firstSet and pname:setCount must: be less than or equal
+    to slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
+    pname:layout was created
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-pipelineBindPoint-08067]]
+    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
+    parent sname:VkCommandPool's queue family
+  * [[VUID-vkCmdSetDescriptorBufferOffsetsEXT-firstSet-09006]]
+    The slink:VkDescriptorSetLayout for each set from pname:firstSet to
+    [eq]#pname:firstSet {plus} pname:setCount# when pname:layout was created
+    must: have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set
+****
+
+include::{generated}/validity/protos/vkCmdSetDescriptorBufferOffsetsEXT.adoc[]
+--
+
+[open,refpage='vkCmdBindDescriptorBufferEmbeddedSamplersEXT',desc='Setting embedded immutable samplers offsets in a command buffer',type='protos']
+--
+To bind an embedded immutable sampler set to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer that the embedded immutable
+    samplers will be bound to.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating the
+    type of the pipeline that will use the embedded immutable samplers.
+  * pname:layout is a slink:VkPipelineLayout object used to program the
+    bindings.
+  * pname:set is the number of the set to be bound.
+
+`vkCmdBindDescriptorBufferEmbeddedSamplersEXT` binds the embedded immutable
+samplers in pname:set of pname:layout to pname:set for the command buffer
+for subsequent <<pipelines-bindpoint-commands, bound pipeline commands>> set
+by pname:pipelineBindPoint.
+Any previous binding to this set by flink:vkCmdSetDescriptorBufferOffsetsEXT
+or this command is overwritten.
+Any sets that were last bound by a call to flink:vkCmdBindDescriptorSets are
+invalidated upon calling this command.
+Other sets will also be invalidated upon calling this command if
+pname:layout differs from the pipeline layout used to bind those other sets,
+as described in <<descriptorsets-compatibility,Pipeline Layout
+Compatibility>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-None-08068]]
+    The <<features-descriptorBuffer, pname:descriptorBuffer>> feature must:
+    be enabled
+  * [[VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-pipelineBindPoint-08069]]
+    pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
+    parent sname:VkCommandPool's queue family
+  * [[VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-set-08070]]
+    The slink:VkDescriptorSetLayout at index pname:set when pname:layout was
+    created must: have been created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT
+    bit set
+  * [[VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-set-08071]]
+    pname:set must: be less than or equal to
+    slink:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
+    pname:layout was created
+****
+
+include::{generated}/validity/protos/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.adoc[]
+--
+
+
+[[descriptorbuffers-updates]]
+=== Updating Descriptor Buffers
+
+Updates to descriptor data in buffers can: be performed by any operation on
+either the host or device that can: access memory.
+
+Descriptor buffer reads can: be synchronized using
+ename:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT in the relevant shader
+stage.
+
+
+[[descriptorbuffers-push-descriptors]]
+=== Push Descriptors With Descriptor Buffers
+
+If the <<features-descriptorBufferPushDescriptors,
+pname:descriptorBufferPushDescriptors>> feature is enabled, push descriptors
+can: be used with descriptor buffers in the same way as with descriptor
+sets.
+
+The <<limits-bufferlessPushDescriptors,
+sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferlessPushDescriptors>>
+property indicates whether the implementation requires a buffer to back push
+descriptors.
+If the property is ename:VK_FALSE then before recording any push descriptors
+the application must: bind exactly `1` descriptor buffer that was created
+with the ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
+bit set.
+When this buffer is bound any previously recorded push descriptors that are
+required for a subsequent command must: be recorded again.
+
+
+[[descriptorbuffers-capturereplay]]
+=== Capture and Replay
+
+In a similar way to <<features-bufferDeviceAddressCaptureReplay,
+pname:bufferDeviceAddressCaptureReplay>>, the
+<<features-descriptorBufferCaptureReplay,
+pname:descriptorBufferCaptureReplay>> feature allows the creation of opaque
+handles for objects at capture time that can: be passed into object creation
+calls in a future replay, causing descriptors to be created with the same
+data.
+The opaque memory address for any memory used by these resources must: have
+been captured using flink:vkGetDeviceMemoryOpaqueCaptureAddress and be
+replayed using slink:VkMemoryOpaqueCaptureAddressAllocateInfo.
+
+[open,refpage='vkGetBufferOpaqueCaptureDescriptorDataEXT',desc='Get buffer opaque capture descriptor data',type='protos']
+--
+To get the opaque descriptor data for a buffer, call:
+
+include::{generated}/api/protos/vkGetBufferOpaqueCaptureDescriptorDataEXT.adoc[]
+
+  * pname:device is the logical device that gets the data.
+  * pname:pInfo is a pointer to a slink:VkBufferCaptureDescriptorDataInfoEXT
+    structure specifying the buffer.
+  * pname:pData is a pointer to a user-allocated buffer where the data will
+    be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-None-08072]]
+    The <<features-descriptorBuffer, pname:descriptorBufferCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-pData-08073]]
+    pname:pData must: point to a buffer that is at least
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferCaptureReplayDescriptorDataSize
+    bytes in size
+  * [[VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-device-08074]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetBufferOpaqueCaptureDescriptorDataEXT.adoc[]
+--
+
+[open,refpage='VkBufferCaptureDescriptorDataInfoEXT',desc='Structure specifying a buffer for descriptor capture',type='structs']
+--
+Information about the buffer to get descriptor buffer capture data for is
+passed in a sname:VkBufferCaptureDescriptorDataInfoEXT structure:
+
+include::{generated}/api/structs/VkBufferCaptureDescriptorDataInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is the sname:VkBuffer handle of the buffer to get opaque
+    capture data for.
+
+.Valid Usage
+****
+  * [[VUID-VkBufferCaptureDescriptorDataInfoEXT-buffer-08075]]
+    pname:buffer must: have been created with
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in
+    slink:VkBufferCreateInfo::pname:flags
+****
+
+include::{generated}/validity/structs/VkBufferCaptureDescriptorDataInfoEXT.adoc[]
+--
+
+
+[open,refpage='vkGetImageOpaqueCaptureDescriptorDataEXT',desc='Get image opaque capture descriptor data',type='protos']
+--
+To get the opaque capture descriptor data for an image, call:
+
+include::{generated}/api/protos/vkGetImageOpaqueCaptureDescriptorDataEXT.adoc[]
+
+  * pname:device is the logical device that gets the data.
+  * pname:pInfo is a pointer to a slink:VkImageCaptureDescriptorDataInfoEXT
+    structure specifying the image.
+  * pname:pData is a pointer to a user-allocated buffer where the data will
+    be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-None-08076]]
+    The <<features-descriptorBuffer, pname:descriptorBufferCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-pData-08077]]
+    pname:pData must: point to a buffer that is at least
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:imageCaptureReplayDescriptorDataSize
+    bytes in size
+  * [[VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-device-08078]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetImageOpaqueCaptureDescriptorDataEXT.adoc[]
+--
+
+[open,refpage='VkImageCaptureDescriptorDataInfoEXT',desc='Structure specifying an image for descriptor capture',type='structs']
+--
+Information about the image to get descriptor buffer capture data for is
+passed in a sname:VkImageCaptureDescriptorDataInfoEXT structure:
+
+include::{generated}/api/structs/VkImageCaptureDescriptorDataInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is the sname:VkImage handle of the image to get opaque
+    capture data for.
+
+.Valid Usage
+****
+  * [[VUID-VkImageCaptureDescriptorDataInfoEXT-image-08079]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in
+    slink:VkImageCreateInfo::pname:flags
+****
+
+include::{generated}/validity/structs/VkImageCaptureDescriptorDataInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetImageViewOpaqueCaptureDescriptorDataEXT',desc='Get image view opaque capture descriptor data',type='protos']
+--
+To get the opaque capture descriptor data for an image view, call:
+
+include::{generated}/api/protos/vkGetImageViewOpaqueCaptureDescriptorDataEXT.adoc[]
+
+  * pname:device is the logical device that gets the data.
+  * pname:pInfo is a pointer to a
+    slink:VkImageViewCaptureDescriptorDataInfoEXT structure specifying the
+    image view.
+  * pname:pData is a pointer to a user-allocated buffer where the data will
+    be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-None-08080]]
+    The <<features-descriptorBuffer, pname:descriptorBufferCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-pData-08081]]
+    pname:pData must: point to a buffer that is at least
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:imageViewCaptureReplayDescriptorDataSize
+    bytes in size
+  * [[VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-device-08082]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetImageViewOpaqueCaptureDescriptorDataEXT.adoc[]
+--
+
+[open,refpage='VkImageViewCaptureDescriptorDataInfoEXT',desc='Structure specifying an image view for descriptor capture',type='structs']
+--
+Information about the image view to get descriptor buffer capture data for
+is passed in a sname:VkImageViewCaptureDescriptorDataInfoEXT structure:
+
+include::{generated}/api/structs/VkImageViewCaptureDescriptorDataInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageView is the sname:VkImageView handle of the image view to get
+    opaque capture data for.
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewCaptureDescriptorDataInfoEXT-imageView-08083]]
+    pname:imageView must: have been created with
+    ename:VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set
+    in slink:VkImageViewCreateInfo::pname:flags
+****
+
+include::{generated}/validity/structs/VkImageViewCaptureDescriptorDataInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetSamplerOpaqueCaptureDescriptorDataEXT',desc='Get sampler opaque capture descriptor data',type='protos']
+--
+To get the opaque capture descriptor data for a sampler, call:
+
+include::{generated}/api/protos/vkGetSamplerOpaqueCaptureDescriptorDataEXT.adoc[]
+
+  * pname:device is the logical device that gets the data.
+  * pname:pInfo is a pointer to a
+    slink:VkSamplerCaptureDescriptorDataInfoEXT structure specifying the
+    sampler.
+  * pname:pData is a pointer to a user-allocated buffer where the data will
+    be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-None-08084]]
+    The <<features-descriptorBuffer, pname:descriptorBufferCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-pData-08085]]
+    pname:pData must: point to a buffer that is at least
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:samplerCaptureReplayDescriptorDataSize
+    bytes in size
+  * [[VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-device-08086]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetSamplerOpaqueCaptureDescriptorDataEXT.adoc[]
+--
+
+[open,refpage='VkSamplerCaptureDescriptorDataInfoEXT',desc='Structure specifying a sampler for descriptor capture',type='structs']
+--
+Information about the sampler to get descriptor buffer capture data for is
+passed in a sname:VkSamplerCaptureDescriptorDataInfoEXT structure:
+
+include::{generated}/api/structs/VkSamplerCaptureDescriptorDataInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sampler is the sname:VkSampler handle of the sampler to get opaque
+    capture data for.
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerCaptureDescriptorDataInfoEXT-sampler-08087]]
+    pname:sampler must: have been created with
+    ename:VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in
+    slink:VkSamplerCreateInfo::pname:flags
+****
+
+include::{generated}/validity/structs/VkSamplerCaptureDescriptorDataInfoEXT.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+[open,refpage='vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT',desc='Get acceleration structure opaque capture descriptor data',type='protos']
+--
+To get the opaque capture descriptor data for an acceleration structure,
+call:
+
+include::{generated}/api/protos/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.adoc[]
+
+  * pname:device is the logical device that gets the data.
+  * pname:pInfo is a pointer to a
+    slink:VkAccelerationStructureCaptureDescriptorDataInfoEXT structure
+    specifying the acceleration structure.
+  * pname:pData is a pointer to a user-allocated buffer where the data will
+    be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-None-08088]]
+    The <<features-descriptorBuffer, pname:descriptorBufferCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-pData-08089]]
+    pname:pData must: point to a buffer that is at least
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:accelerationStructureCaptureReplayDescriptorDataSize
+    bytes in size
+  * [[VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-device-08090]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureCaptureDescriptorDataInfoEXT',desc='Structure specifying an acceleration structure for descriptor capture',type='structs']
+--
+Information about the acceleration structure to get descriptor buffer
+capture data for is passed in a
+sname:VkAccelerationStructureCaptureDescriptorDataInfoEXT structure:
+
+include::{generated}/api/structs/VkAccelerationStructureCaptureDescriptorDataInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructure is the sname:VkAccelerationStructureKHR
+    handle of the acceleration structure to get opaque capture data for.
+  * pname:accelerationStructureNV is the sname:VkAccelerationStructureNV
+    handle of the acceleration structure to get opaque capture data for.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructure-08091]]
+    If pname:accelerationStructure is not dlink:VK_NULL_HANDLE then
+    pname:accelerationStructure must: have been created with
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    set in slink:VkAccelerationStructureCreateInfoKHR::pname:createFlags
+  * [[VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructureNV-08092]]
+    If pname:accelerationStructureNV is not dlink:VK_NULL_HANDLE then
+    pname:accelerationStructureNV must: have been created with
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    set in slink:VkAccelerationStructureCreateInfoNV::pname:info.flags
+  * [[VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructure-08093]]
+    If pname:accelerationStructure is not dlink:VK_NULL_HANDLE then
+    pname:accelerationStructureNV must: be dlink:VK_NULL_HANDLE
+  * [[VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructureNV-08094]]
+    If pname:accelerationStructureNV is not dlink:VK_NULL_HANDLE then
+    pname:accelerationStructure must: be dlink:VK_NULL_HANDLE
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureCaptureDescriptorDataInfoEXT.adoc[]
+--
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+[open,refpage='VkOpaqueCaptureDescriptorDataCreateInfoEXT',desc='Structure specifying opaque capture descriptor data',type='structs']
+--
+The sname:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkOpaqueCaptureDescriptorDataCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:opaqueCaptureDescriptorData is a pointer to a user-allocated
+    buffer containing opaque capture data retrieved using
+    flink:vkGetBufferOpaqueCaptureDescriptorDataEXT,
+    flink:vkGetImageOpaqueCaptureDescriptorDataEXT,
+    flink:vkGetImageViewOpaqueCaptureDescriptorDataEXT,
+    flink:vkGetSamplerOpaqueCaptureDescriptorDataEXT, or
+    flink:vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.
+
+During replay, opaque descriptor capture data can: be specified by adding a
+sname:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure to the relevant
+pname:pNext chain of a slink:VkBufferCreateInfo, slink:VkImageCreateInfo,
+slink:VkImageViewCreateInfo, slink:VkSamplerCreateInfo,
+slink:VkAccelerationStructureCreateInfoNV or
+slink:VkAccelerationStructureCreateInfoKHR structure.
+
+
+include::{generated}/validity/structs/VkOpaqueCaptureDescriptorDataCreateInfoEXT.adoc[]
+--
+
+endif::VK_EXT_descriptor_buffer[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/devsandqueues.adoc b/codegen/vulkan/vulkan-docs-next/chapters/devsandqueues.adoc
new file mode 100644
index 0000000..035d199
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/devsandqueues.adoc
@@ -0,0 +1,3540 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[devsandqueues]]
+= Devices and Queues
+
+Once Vulkan is initialized, devices and queues are the primary objects used
+to interact with a Vulkan implementation.
+
+[open,refpage='VkPhysicalDevice',desc='Opaque handle to a physical device object',type='handles']
+--
+Vulkan separates the concept of _physical_ and _logical_ devices.
+A physical device usually represents a single complete implementation of
+Vulkan (excluding instance-level functionality) available to the host, of
+which there are a finite number.
+A logical device represents an instance of that implementation with its own
+state and resources independent of other logical devices.
+
+Physical devices are represented by sname:VkPhysicalDevice handles:
+
+include::{generated}/api/handles/VkPhysicalDevice.adoc[]
+--
+
+
+[[devsandqueues-physical-device-enumeration]]
+== Physical Devices
+
+[open,refpage='vkEnumeratePhysicalDevices',desc='Enumerates the physical devices accessible to a Vulkan instance',type='protos']
+--
+To retrieve a list of physical device objects representing the physical
+devices installed in the system, call:
+
+include::{generated}/api/protos/vkEnumeratePhysicalDevices.adoc[]
+
+  * pname:instance is a handle to a Vulkan instance previously created with
+    flink:vkCreateInstance.
+  * pname:pPhysicalDeviceCount is a pointer to an integer related to the
+    number of physical devices available or queried, as described below.
+  * pname:pPhysicalDevices is either `NULL` or a pointer to an array of
+    sname:VkPhysicalDevice handles.
+
+If pname:pPhysicalDevices is `NULL`, then the number of physical devices
+available is returned in pname:pPhysicalDeviceCount.
+Otherwise, pname:pPhysicalDeviceCount must: point to a variable set by the
+user to the number of elements in the pname:pPhysicalDevices array, and on
+return the variable is overwritten with the number of handles actually
+written to pname:pPhysicalDevices.
+If pname:pPhysicalDeviceCount is less than the number of physical devices
+available, at most pname:pPhysicalDeviceCount structures will be written,
+and ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available physical devices were returned.
+
+include::{generated}/validity/protos/vkEnumeratePhysicalDevices.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceProperties',desc='Returns properties of a physical device',type='protos']
+--
+To query general properties of physical devices once enumerated, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceProperties.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties
+    structure in which properties are returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceProperties',desc='Structure specifying physical device properties',type='structs']
+--
+The sname:VkPhysicalDeviceProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties.adoc[]
+
+  * pname:apiVersion is the version of Vulkan supported by the device,
+    encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
+  * pname:driverVersion is the vendor-specified version of the driver.
+  * pname:vendorID is a unique identifier for the _vendor_ (see below) of
+    the physical device.
+  * pname:deviceID is a unique identifier for the physical device among
+    devices available from the vendor.
+  * pname:deviceType is a elink:VkPhysicalDeviceType specifying the type of
+    device.
+  * pname:deviceName is an array of ename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
+    code:char containing a null-terminated UTF-8 string which is the name of
+    the device.
+  * pname:pipelineCacheUUID is an array of ename:VK_UUID_SIZE code:uint8_t
+    values representing a universally unique identifier for the device.
+  * pname:limits is the slink:VkPhysicalDeviceLimits structure specifying
+    device-specific limits of the physical device.
+    See <<limits, Limits>> for details.
+  * pname:sparseProperties is the slink:VkPhysicalDeviceSparseProperties
+    structure specifying various sparse related properties of the physical
+    device.
+    See <<sparsememory-physicalprops, Sparse Properties>> for details.
+
+ifdef::VK_VERSION_1_1[]
+[NOTE]
+.Note
+====
+The value of pname:apiVersion may: be different than the version returned by
+flink:vkEnumerateInstanceVersion; either higher or lower.
+In such cases, the application must: not use functionality that exceeds the
+version of Vulkan associated with a given object.
+The pname:pApiVersion parameter returned by flink:vkEnumerateInstanceVersion
+is the version associated with a slink:VkInstance and its children, except
+for a slink:VkPhysicalDevice and its children.
+sname:VkPhysicalDeviceProperties::pname:apiVersion is the version associated
+with a slink:VkPhysicalDevice and its children.
+====
+endif::VK_VERSION_1_1[]
+
+[NOTE]
+.Note
+====
+The encoding of pname:driverVersion is implementation-defined.
+It may: not use the same encoding as pname:apiVersion.
+Applications should follow information from the _vendor_ on how to extract
+the version information from pname:driverVersion.
+====
+
+ifdef::VK_VERSION_1_3[]
+On implementations that claim support for the <<roadmap-2022, Roadmap 2022>>
+profile, the major and minor version expressed by pname:apiVersion must: be
+at least Vulkan 1.3.
+endif::VK_VERSION_1_3[]
+
+The pname:vendorID and pname:deviceID fields are provided to allow
+applications to adapt to device characteristics that are not adequately
+exposed by other Vulkan queries.
+
+[NOTE]
+.Note
+====
+These may: include performance profiles, hardware errata, or other
+characteristics.
+====
+
+The _vendor_ identified by pname:vendorID is the entity responsible for the
+most salient characteristics of the underlying implementation of the
+slink:VkPhysicalDevice being queried.
+
+[NOTE]
+.Note
+====
+For example, in the case of a discrete GPU implementation, this should: be
+the GPU chipset vendor.
+In the case of a hardware accelerator integrated into a system-on-chip
+(SoC), this should: be the supplier of the silicon IP used to create the
+accelerator.
+====
+
+If the vendor has a https://pcisig.com/membership/member-companies[PCI
+vendor ID], the low 16 bits of pname:vendorID must: contain that PCI vendor
+ID, and the remaining bits must: be set to zero.
+Otherwise, the value returned must: be a valid Khronos vendor ID, obtained
+as described in the <<vulkan-styleguide,Vulkan Documentation and Extensions:
+Procedures and Conventions>> document in the section "`Registering a Vendor
+ID with Khronos`".
+Khronos vendor IDs are allocated starting at 0x10000, to distinguish them
+from the PCI vendor ID namespace.
+Khronos vendor IDs are symbolically defined in the elink:VkVendorId type.
+
+The vendor is also responsible for the value returned in pname:deviceID.
+If the implementation is driven primarily by a https://pcisig.com/[PCI
+device] with a https://pcisig.com/[PCI device ID], the low 16 bits of
+pname:deviceID must: contain that PCI device ID, and the remaining bits
+must: be set to zero.
+Otherwise, the choice of what values to return may: be dictated by operating
+system or platform policies - but should: uniquely identify both the device
+version and any major configuration options (for example, core count in the
+case of multicore devices).
+
+[NOTE]
+.Note
+====
+The same device ID should: be used for all physical implementations of that
+device version and configuration.
+For example, all uses of a specific silicon IP GPU version and configuration
+should: use the same device ID, even if those uses occur in different SoCs.
+====
+
+include::{generated}/validity/structs/VkPhysicalDeviceProperties.adoc[]
+--
+
+[open,refpage='VkVendorId',desc='Khronos vendor IDs',type='enums']
+--
+Khronos vendor IDs which may: be returned in
+slink:VkPhysicalDeviceProperties::pname:vendorID are:
+
+include::{generated}/api/enums/VkVendorId.adoc[]
+
+[NOTE]
+.Note
+====
+Khronos vendor IDs may be allocated by vendors at any time.
+Only the latest canonical versions of this Specification, of the
+corresponding `vk.xml` API Registry, and of the corresponding
+`{core_header}` header file must: contain all reserved Khronos vendor IDs.
+
+Only Khronos vendor IDs are given symbolic names at present.
+PCI vendor IDs returned by the implementation can be looked up in the
+PCI-SIG database.
+====
+--
+
+[open,refpage='VK_MAX_PHYSICAL_DEVICE_NAME_SIZE',desc='Length of a physical device name string',type='consts']
+--
+ename:VK_MAX_PHYSICAL_DEVICE_NAME_SIZE is the length in code:char values of
+an array containing a physical device name string, as returned in
+slink:VkPhysicalDeviceProperties::pname:deviceName.
+
+include::{generated}/api/enums/VK_MAX_PHYSICAL_DEVICE_NAME_SIZE.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceType',desc='Supported physical device types',type='enums']
+--
+The physical device types which may: be returned in
+slink:VkPhysicalDeviceProperties::pname:deviceType are:
+
+include::{generated}/api/enums/VkPhysicalDeviceType.adoc[]
+
+  * ename:VK_PHYSICAL_DEVICE_TYPE_OTHER - the device does not match any
+    other available types.
+  * ename:VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU - the device is typically
+    one embedded in or tightly coupled with the host.
+  * ename:VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - the device is typically a
+    separate processor connected to the host via an interlink.
+  * ename:VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU - the device is typically a
+    virtual node in a virtualization environment.
+  * ename:VK_PHYSICAL_DEVICE_TYPE_CPU - the device is typically running on
+    the same processors as the host.
+
+The physical device type is advertised for informational purposes only, and
+does not directly affect the operation of the system.
+However, the device type may: correlate with other advertised properties or
+capabilities of the system, such as how many memory heaps there are.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[open,refpage='vkGetPhysicalDeviceProperties2',desc='Returns properties of a physical device',type='protos']
+--
+To query general properties of physical devices once enumerated, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:pProperties is a pointer to a slink:VkPhysicalDeviceProperties2
+    structure in which properties are returned.
+
+Each structure in pname:pProperties and its pname:pNext chain contains
+members corresponding to implementation-dependent properties, behaviors, or
+limits.
+fname:vkGetPhysicalDeviceProperties2 fills in each member to specify the
+corresponding value for the implementation.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceProperties2.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceProperties2',desc='Structure specifying physical device properties',type='structs']
+--
+The sname:VkPhysicalDeviceProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:properties is a slink:VkPhysicalDeviceProperties structure
+    describing properties of the physical device.
+    This structure is written with the same values as if it were written by
+    flink:vkGetPhysicalDeviceProperties.
+
+The pname:pNext chain of this structure is used to extend the structure with
+properties defined by extensions.
+
+include::{generated}/validity/structs/VkPhysicalDeviceProperties2.adoc[]
+--
+
+ifdef::VK_VERSION_1_2[]
+[open,refpage='VkPhysicalDeviceVulkan11Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.1',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan11Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan11Properties.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/devsandqueues.adoc[tag=VK_KHR_external_memory_capabilities-properties]
+  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
+    default number of invocations in each subgroup.
+    pname:subgroupSize is at least 1 if any of the physical device's queues
+    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
+    pname:subgroupSize is a power-of-two.
+  * [[{anchor-prefix}limits-subgroupSupportedStages]]
+    pname:subgroupSupportedStages is a bitfield of
+    elink:VkShaderStageFlagBits describing the shader stages that
+    <<shaders-group-operations, group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>> are supported in.
+    pname:subgroupSupportedStages will have the
+    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
+    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
+  * pname:subgroupSupportedOperations is a bitmask of
+    elink:VkSubgroupFeatureFlagBits specifying the sets of
+    <<shaders-group-operations, group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
+    pname:subgroupSupportedOperations will have the
+    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
+    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
+    ename:VK_QUEUE_COMPUTE_BIT.
+  * [[{anchor-prefix}limits-subgroupQuadOperationsInAllStages]]
+    pname:subgroupQuadOperationsInAllStages is a boolean specifying whether
+    <<shaders-quad-operations,quad group operations>> are available in all
+    stages, or are restricted to fragment and compute stages.
+include::{chapters}/limits.adoc[tag=VK_KHR_maintenance2-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_multiview-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_protected_memory-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_maintenance3-properties]
+
+:refpage: VkPhysicalDeviceVulkan11Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties correspond to Vulkan 1.1 functionality.
+
+The members of sname:VkPhysicalDeviceVulkan11Properties have the same values
+as the corresponding members of slink:VkPhysicalDeviceIDProperties,
+slink:VkPhysicalDeviceSubgroupProperties,
+slink:VkPhysicalDevicePointClippingProperties,
+slink:VkPhysicalDeviceMultiviewProperties,
+slink:VkPhysicalDeviceProtectedMemoryProperties, and
+slink:VkPhysicalDeviceMaintenance3Properties.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Properties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceVulkan12Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.2',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan12Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan12Properties.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/devsandqueues.adoc[tag=VK_KHR_driver_properties-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_shader_float_controls-properties]
+include::{chapters}/limits.adoc[tag=VK_EXT_descriptor_indexing-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_depth_stencil_resolve-properties]
+include::{chapters}/limits.adoc[tag=VK_EXT_sampler_filter_minmax-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_timeline_semaphore-properties]
+  * [[limits-framebufferIntegerColorSampleCounts]]
+    pname:framebufferIntegerColorSampleCounts is a bitmask of
+    elink:VkSampleCountFlagBits indicating the color sample counts that are
+    supported for all framebuffer color attachments with integer formats.
+
+:refpage: VkPhysicalDeviceVulkan12Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties correspond to Vulkan 1.2 functionality.
+
+The members of sname:VkPhysicalDeviceVulkan12Properties must: have the same
+values as the corresponding members of
+slink:VkPhysicalDeviceDriverProperties,
+slink:VkPhysicalDeviceFloatControlsProperties,
+slink:VkPhysicalDeviceDescriptorIndexingProperties,
+slink:VkPhysicalDeviceDepthStencilResolveProperties,
+slink:VkPhysicalDeviceSamplerFilterMinmaxProperties, and
+slink:VkPhysicalDeviceTimelineSemaphoreProperties.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan12Properties.adoc[]
+--
+endif::VK_VERSION_1_2[]
+
+ifdef::VKSC_VERSION_1_0[]
+[open,refpage='VkPhysicalDeviceVulkanSC10Properties',desc='Structure describing safety critical properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceVulkanSC10Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkanSC10Properties.adoc[]
+
+:anchor-prefix:
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-deviceNoDynamicHostAllocations]]
+    pname:deviceNoDynamicHostAllocations indicates whether the
+    implementation will perform dynamic host memory allocations for physical
+    or logical device commands.
+    If pname:deviceNoDynamicHostAllocations is ename:VK_TRUE the
+    implementation will allocate host memory for objects based on the
+    provided slink:VkDeviceObjectReservationCreateInfo limits during
+    flink:vkCreateDevice.
+    Under valid API usage, ename:VK_ERROR_OUT_OF_HOST_MEMORY may: only be
+    returned by commands which do not explicitly disallow it.
+  * [[limits-deviceDestroyFreesMemory]] pname:deviceDestroyFreesMemory
+    indicates whether destroying the device frees all memory resources back
+    to the system.
+  * [[limits-commandPoolMultipleCommandBuffersRecording]]
+    pname:commandPoolMultipleCommandBuffersRecording indicates whether
+    multiple command buffers from the same command pool can: be in the
+    <<commandbuffers-lifecycle, recording state>> at the same time.
+  * [[limits-commandPoolResetCommandBuffer]]
+    pname:commandPoolResetCommandBuffer indicates whether command buffers
+    support flink:vkResetCommandBuffer, and flink:vkBeginCommandBuffer when
+    not in the <<commandbuffers-lifecycle, initial state>>.
+  * [[limits-commandBufferSimultaneousUse]]
+    pname:commandBufferSimultaneousUse indicates whether command buffers
+    support ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT.
+  * [[limits-secondaryCommandBufferNullOrImagelessFramebuffer]]
+    pname:secondaryCommandBufferNullOrImagelessFramebuffer indicates whether
+    the pname:framebuffer member of sname:VkCommandBufferInheritanceInfo
+    may: be equal to dlink:VK_NULL_HANDLE or be created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that includes
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT if the command buffer will be
+    executed within a render pass instance.
+  * [[limits-recycleDescriptorSetMemory]] pname:recycleDescriptorSetMemory
+    indicates whether descriptor pools are able to immediately reuse pool
+    memory from descriptor sets that have been freed.
+    If this is ename:VK_FALSE, then memory may: only be reallocated after
+    flink:vkResetDescriptorPool is called.
+  * [[limits-recyclePipelineMemory]] pname:recyclePipelineMemory indicates
+    whether the memory for a pipeline is available for reuse by new
+    pipelines after the pipeline is destroyed.
+  * [[limits-maxRenderPassSubpasses]] pname:maxRenderPassSubpasses is the
+    maximum number of subpasses in a render pass.
+  * [[limits-maxRenderPassDependencies]] pname:maxRenderPassDependencies is
+    the maximum number of dependencies in a render pass.
+  * [[limits-maxSubpassInputAttachments]] pname:maxSubpassInputAttachments
+    is the maximum number of input attachments in a subpass.
+  * [[limits-maxSubpassPreserveAttachments]]
+    pname:maxSubpassPreserveAttachments is the maximum number of preserve
+    attachments in a subpass.
+  * [[limits-maxFramebufferAttachments]] pname:maxFramebufferAttachments is
+    the maximum number of attachments in a framebuffer, as well as the
+    maximum number of attachments in a render pass.
+  * [[limits-maxDescriptorSetLayoutBindings]]
+    pname:maxDescriptorSetLayoutBindings is the maximum number of bindings
+    in a descriptor set layout.
+  * [[limits-maxQueryFaultCount]] pname:maxQueryFaultCount is the maximum
+    number of faults that the implementation can: record, to be reported via
+    flink:vkGetFaultData.
+  * [[limits-maxCallbackFaultCount]] pname:maxCallbackFaultCount is the
+    maximum number of faults that the implementation can: report via a
+    single call to tlink:PFN_vkFaultCallbackFunction.
+  * [[limits-maxCommandPoolCommandBuffers]]
+    pname:maxCommandPoolCommandBuffers is the maximum number of command
+    buffers that can: be allocated from a single command pool.
+  * [[limits-maxCommandBufferSize]] pname:maxCommandBufferSize is the
+    maximum supported size of a single command buffer in bytes.
+    Applications can: use flink:vkGetCommandPoolMemoryConsumption to compare
+    a command buffer's current memory usage to this limit.
+
+[NOTE]
+.Note
+====
+Implementations that do not have a fixed upper bound on the number of
+command buffers that may: be allocated from a command pool can: report
+0xFFFFFFFFU for pname:maxCommandPoolCommandBuffers.
+
+Implementations that do not have a fixed upper bound on the command buffer
+size can: report code:UINT64_MAX for pname:maxCommandBufferSize.
+====
+
+:refpage: VkPhysicalDeviceVulkanSC10Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties correspond to Vulkan SC 1.0 functionality.
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkPhysicalDeviceVulkanSC10Properties <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkanSC10Properties.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_VERSION_1_3[]
+[open,refpage='VkPhysicalDeviceVulkan13Properties',desc='Structure specifying physical device properties for functionality promoted to Vulkan 1.3',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan13Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan13Properties.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/limits.adoc[tag=VK_EXT_subgroup_size_control-properties]
+include::{chapters}/limits.adoc[tag=VK_EXT_inline_uniform_block-properties]
+  * [[{anchor-prefix}limits-maxInlineUniformTotalSize]]
+    pname:maxInlineUniformTotalSize is the maximum total size in bytes of
+    all inline uniform block bindings, across all pipeline shader stages and
+    descriptor set numbers, that can: be included in a pipeline layout.
+    Descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
+include::{chapters}/devsandqueues.adoc[tag=VK_KHR_shader_integer_dot_product-properties]
+include::{chapters}/limits.adoc[tag=VK_EXT_texel_buffer_alignment-properties]
+include::{chapters}/limits.adoc[tag=VK_KHR_maintenance4-properties]
+
+:refpage: VkPhysicalDeviceVulkan13Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties correspond to Vulkan 1.3 functionality.
+
+The members of sname:VkPhysicalDeviceVulkan13Properties must: have the same
+values as the corresponding members of
+slink:VkPhysicalDeviceInlineUniformBlockProperties and
+slink:VkPhysicalDeviceSubgroupSizeControlProperties.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan13Properties.adoc[]
+--
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+[open,refpage='VkPhysicalDeviceIDProperties',desc='Structure specifying IDs related to the physical device',type='structs']
+--
+The sname:VkPhysicalDeviceIDProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceIDProperties.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceIDPropertiesKHR.adoc[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_external_memory_capabilities-properties[]
+  * pname:deviceUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
+    representing a universally unique identifier for the device.
+  * pname:driverUUID is an array of ename:VK_UUID_SIZE code:uint8_t values
+    representing a universally unique identifier for the driver build in use
+    by the device.
+  * pname:deviceLUID is an array of ename:VK_LUID_SIZE code:uint8_t values
+    representing a locally unique identifier for the device.
+  * pname:deviceNodeMask is a code:uint32_t bitfield identifying the node
+    within a linked device adapter corresponding to the device.
+  * pname:deviceLUIDValid is a boolean value that will be ename:VK_TRUE if
+    pname:deviceLUID contains a valid LUID and pname:deviceNodeMask contains
+    a valid node mask, and ename:VK_FALSE if they do not.
+// end::VK_KHR_external_memory_capabilities-properties[]
+
+:refpage: VkPhysicalDeviceIDProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+pname:deviceUUID must: be immutable for a given device across instances,
+processes, driver APIs, driver versions, and system reboots.
+
+Applications can: compare the pname:driverUUID value across instance and
+process boundaries, and can: make similar queries in external APIs to
+determine whether they are capable of sharing memory objects and resources
+using them with the device.
+
+pname:deviceUUID and/or pname:driverUUID must: be used to determine whether
+a particular external object can be shared between driver components, where
+such a restriction exists as defined in the compatibility table for the
+particular object type:
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+  * <<external-memory-handle-types-compatibility,External memory handle
+    types compatibility>>
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+  * <<external-semaphore-handle-types-compatibility,External semaphore
+    handle types compatibility>>
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+  * <<external-fence-handle-types-compatibility,External fence handle types
+    compatibility>>
+endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[]
+
+If pname:deviceLUIDValid is ename:VK_FALSE, the values of pname:deviceLUID
+and pname:deviceNodeMask are undefined:.
+If pname:deviceLUIDValid is ename:VK_TRUE and Vulkan is running on the
+Windows operating system, the contents of pname:deviceLUID can: be cast to
+an code:LUID object and must: be equal to the locally unique identifier of a
+code:IDXGIAdapter1 object that corresponds to pname:physicalDevice.
+If pname:deviceLUIDValid is ename:VK_TRUE, pname:deviceNodeMask must:
+contain exactly one bit.
+If Vulkan is running on an operating system that supports the Direct3D 12
+API and pname:physicalDevice corresponds to an individual device in a linked
+device adapter, pname:deviceNodeMask identifies the Direct3D 12 node
+corresponding to pname:physicalDevice.
+Otherwise, pname:deviceNodeMask must: be `1`.
+
+[NOTE]
+.Note
+====
+Although they have identical descriptions,
+slink:VkPhysicalDeviceIDProperties::pname:deviceUUID may differ from
+slink:VkPhysicalDeviceProperties2::pname:pipelineCacheUUID.
+The former is intended to identify and correlate devices across API and
+driver boundaries, while the latter is used to identify a compatible device
+and driver combination to use when serializing and de-serializing pipeline
+state.
+
+Implementations should: return pname:deviceUUID values which are likely to
+be unique even in the presence of multiple Vulkan implementations (such as a
+GPU driver and a software renderer; two drivers for different GPUs; or the
+same Vulkan driver running on two logically different devices).
+
+Khronos' conformance testing is unable to guarantee that pname:deviceUUID
+values are actually unique, so implementors should: make their own best
+efforts to ensure this.
+In particular, hard-coded pname:deviceUUID values, especially all-`0` bits,
+should: never be used.
+
+A combination of values unique to the vendor, the driver, and the hardware
+environment can be used to provide a pname:deviceUUID which is unique to a
+high degree of certainty.
+Some possible inputs to such a computation are:
+
+  * Information reported by flink:vkGetPhysicalDeviceProperties
+  * PCI device ID (if defined)
+  * PCI bus ID, or similar system configuration information.
+  * Driver binary checksums.
+====
+
+
+[NOTE]
+.Note
+====
+While slink:VkPhysicalDeviceIDProperties::pname:deviceUUID is specified to
+remain consistent across driver versions and system reboots, it is not
+intended to be usable as a serializable persistent identifier for a device.
+It may change when a device is physically added to, removed from, or moved
+to a different connector in a system while that system is powered down.
+Further, there is no reasonable way to verify with conformance testing that
+a given device retains the same UUID in a given system across all driver
+versions supported in that system.
+While implementations should make every effort to report consistent device
+UUIDs across driver versions, applications should avoid relying on the
+persistence of this value for uses other than identifying compatible devices
+for external object sharing purposes.
+====
+
+include::{generated}/validity/structs/VkPhysicalDeviceIDProperties.adoc[]
+--
+
+[open,refpage='VK_UUID_SIZE',desc='Length of a universally unique device or driver build identifier',type='consts']
+--
+ename:VK_UUID_SIZE is the length in code:uint8_t values of an array
+containing a universally unique device or driver build identifier, as
+returned in slink:VkPhysicalDeviceIDProperties::pname:deviceUUID and
+slink:VkPhysicalDeviceIDProperties::pname:driverUUID.
+
+include::{generated}/api/enums/VK_UUID_SIZE.adoc[]
+--
+
+[open,refpage='VK_LUID_SIZE',desc='Length of a locally unique device identifier',type='consts',alias='VK_LUID_SIZE_KHR']
+--
+ename:VK_LUID_SIZE is the length in code:uint8_t values of an array
+containing a locally unique device identifier, as returned in
+slink:VkPhysicalDeviceIDProperties::pname:deviceLUID.
+
+include::{generated}/api/enums/VK_LUID_SIZE.adoc[]
+
+ifdef::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VK_LUID_SIZE_KHR.adoc[]
+endif::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_driver_properties[]
+[open,refpage='VkPhysicalDeviceDriverProperties',desc='Structure containing driver identification information',type='structs',alias='VkPhysicalDeviceDriverPropertiesKHR']
+--
+The sname:VkPhysicalDeviceDriverProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDriverProperties.adoc[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDriverPropertiesKHR.adoc[]
+endif::VK_KHR_driver_properties[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_driver_properties-properties[]
+  * pname:driverID is a unique identifier for the driver of the physical
+    device.
+  * pname:driverName is an array of ename:VK_MAX_DRIVER_NAME_SIZE code:char
+    containing a null-terminated UTF-8 string which is the name of the
+    driver.
+  * pname:driverInfo is an array of ename:VK_MAX_DRIVER_INFO_SIZE code:char
+    containing a null-terminated UTF-8 string with additional information
+    about the driver.
+  * pname:conformanceVersion is the version of the Vulkan conformance test
+    this driver is conformant against (see slink:VkConformanceVersion).
+// end::VK_KHR_driver_properties-properties[]
+
+:refpage: VkPhysicalDeviceDriverProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the driver corresponding to a physical device.
+
+pname:driverID must: be immutable for a given driver across instances,
+processes, driver versions, and system reboots.
+
+include::{generated}/validity/structs/VkPhysicalDeviceDriverProperties.adoc[]
+--
+
+[open,refpage='VkDriverId',desc='Khronos driver IDs',type='enums',alias='VkDriverIdKHR']
+--
+Khronos driver IDs which may: be returned in
+slink:VkPhysicalDeviceDriverProperties::pname:driverID are:
+
+include::{generated}/api/enums/VkDriverId.adoc[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VkDriverIdKHR.adoc[]
+endif::VK_KHR_driver_properties[]
+
+[NOTE]
+.Note
+====
+Khronos driver IDs may be allocated by vendors at any time.
+There may be multiple driver IDs for the same vendor, representing different
+drivers (for e.g. different platforms, proprietary or open source, etc.).
+Only the latest canonical versions of this Specification, of the
+corresponding `vk.xml` API Registry, and of the corresponding
+`{core_header}` header file must: contain all reserved Khronos driver IDs.
+
+Only driver IDs registered with Khronos are given symbolic names.
+There may: be unregistered driver IDs returned.
+====
+--
+
+[open,refpage='VK_MAX_DRIVER_NAME_SIZE',desc='Maximum length of a physical device driver name string',type='consts',alias='VK_MAX_DRIVER_NAME_SIZE_KHR']
+--
+ename:VK_MAX_DRIVER_NAME_SIZE is the length in code:char values of an array
+containing a driver name string, as returned in
+slink:VkPhysicalDeviceDriverProperties::pname:driverName.
+
+include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE.adoc[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE_KHR.adoc[]
+endif::VK_KHR_driver_properties[]
+--
+
+[open,refpage='VK_MAX_DRIVER_INFO_SIZE',desc='Length of a physical device driver information string',type='consts',alias='VK_MAX_DRIVER_INFO_SIZE_KHR']
+--
+ename:VK_MAX_DRIVER_INFO_SIZE is the length in code:char values of an array
+containing a driver information string, as returned in
+slink:VkPhysicalDeviceDriverProperties::pname:driverInfo.
+
+include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE.adoc[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE_KHR.adoc[]
+endif::VK_KHR_driver_properties[]
+--
+
+[open,refpage='VkConformanceVersion',desc='Structure containing the conformance test suite version the implementation is compliant with',type='structs',alias='VkConformanceVersionKHR']
+--
+The conformance test suite version an implementation is compliant with is
+described with the sname:VkConformanceVersion structure:
+
+include::{generated}/api/structs/VkConformanceVersion.adoc[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/structs/VkConformanceVersionKHR.adoc[]
+endif::VK_KHR_driver_properties[]
+
+  * pname:major is the major version number of the conformance test suite.
+  * pname:minor is the minor version number of the conformance test suite.
+  * pname:subminor is the subminor version number of the conformance test
+    suite.
+  * pname:patch is the patch version number of the conformance test suite.
+
+include::{generated}/validity/structs/VkConformanceVersion.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_driver_properties[]
+
+ifdef::VK_EXT_pci_bus_info[]
+[open,refpage='VkPhysicalDevicePCIBusInfoPropertiesEXT',desc='Structure containing PCI bus information of a physical device',type='structs']
+--
+The sname:VkPhysicalDevicePCIBusInfoPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pciDomain is the PCI bus domain.
+  * pname:pciBus is the PCI bus identifier.
+  * pname:pciDevice is the PCI device identifier.
+  * pname:pciFunction is the PCI device function identifier.
+
+:refpage: VkPhysicalDevicePCIBusInfoPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the PCI bus information of a physical device.
+
+include::{generated}/validity/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.adoc[]
+--
+endif::VK_EXT_pci_bus_info[]
+
+ifdef::VK_EXT_physical_device_drm[]
+[open,refpage='VkPhysicalDeviceDrmPropertiesEXT',desc='Structure containing DRM information of a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceDrmPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDrmPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:hasPrimary is a boolean indicating whether the physical device has
+    a DRM primary node.
+  * pname:hasRender is a boolean indicating whether the physical device has
+    a DRM render node.
+  * pname:primaryMajor is the DRM primary node major number, if any.
+  * pname:primaryMinor is the DRM primary node minor number, if any.
+  * pname:renderMajor is the DRM render node major number, if any.
+  * pname:renderMinor is the DRM render node minor number, if any.
+
+:refpage: VkPhysicalDeviceDrmPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the DRM information of a physical device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceDrmPropertiesEXT.adoc[]
+--
+endif::VK_EXT_physical_device_drm[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+[open,refpage='VkPhysicalDeviceShaderIntegerDotProductProperties',desc='Structure containing information about integer dot product support for a physical device',type='structs',alias='VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR']
+--
+The sname:VkPhysicalDeviceShaderIntegerDotProductProperties structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductProperties.adoc[]
+
+ifdef::VK_KHR_shader_integer_dot_product[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.adoc[]
+endif::VK_KHR_shader_integer_dot_product[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// NOTE: none of these properties currently have anchors, so the
+// {anchor-prefix} is not used in the property descriptions.
+// tag::VK_KHR_shader_integer_dot_product-properties[]
+  * pname:integerDotProduct8BitUnsignedAccelerated is a boolean that will be
+    ename:VK_TRUE if the support for 8-bit unsigned dot product operations
+    using the code:OpUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct8BitSignedAccelerated is a boolean that will be
+    ename:VK_TRUE if the support for 8-bit signed dot product operations
+    using the code:OpSDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct8BitMixedSignednessAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 8-bit mixed signedness dot
+    product operations using the code:OpSUDotKHR SPIR-V instruction is
+    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
+    below>>.
+  * pname:integerDotProduct4x8BitPackedUnsignedAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 8-bit unsigned dot product
+    operations from operands packed into 32-bit integers using the
+    code:OpUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct4x8BitPackedSignedAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 8-bit signed dot product
+    operations from operands packed into 32-bit integers using the
+    code:OpSDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct4x8BitPackedMixedSignednessAccelerated is a
+    boolean that will be ename:VK_TRUE if the support for 8-bit mixed
+    signedness dot product operations from operands packed into 32-bit
+    integers using the code:OpSUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct16BitUnsignedAccelerated is a boolean that will
+    be ename:VK_TRUE if the support for 16-bit unsigned dot product
+    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct16BitSignedAccelerated is a boolean that will be
+    ename:VK_TRUE if the support for 16-bit signed dot product operations
+    using the code:OpSDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct16BitMixedSignednessAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 16-bit mixed signedness dot
+    product operations using the code:OpSUDotKHR SPIR-V instruction is
+    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
+    below>>.
+  * pname:integerDotProduct32BitUnsignedAccelerated is a boolean that will
+    be ename:VK_TRUE if the support for 32-bit unsigned dot product
+    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct32BitSignedAccelerated is a boolean that will be
+    ename:VK_TRUE if the support for 32-bit signed dot product operations
+    using the code:OpSDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct32BitMixedSignednessAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 32-bit mixed signedness dot
+    product operations using the code:OpSUDotKHR SPIR-V instruction is
+    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
+    below>>.
+  * pname:integerDotProduct64BitUnsignedAccelerated is a boolean that will
+    be ename:VK_TRUE if the support for 64-bit unsigned dot product
+    operations using the code:OpUDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct64BitSignedAccelerated is a boolean that will be
+    ename:VK_TRUE if the support for 64-bit signed dot product operations
+    using the code:OpSDotKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProduct64BitMixedSignednessAccelerated is a boolean that
+    will be ename:VK_TRUE if the support for 64-bit mixed signedness dot
+    product operations using the code:OpSUDotKHR SPIR-V instruction is
+    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
+    below>>.
+  * pname:integerDotProductAccumulatingSaturating8BitUnsignedAccelerated is
+    a boolean that will be ename:VK_TRUE if the support for 8-bit unsigned
+    accumulating saturating dot product operations using the
+    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating8BitSignedAccelerated is a
+    boolean that will be ename:VK_TRUE if the support for 8-bit signed
+    accumulating saturating dot product operations using the
+    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
+    signedness accumulating saturating dot product operations using the
+    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 8-bit
+    unsigned accumulating saturating dot product operations from operands
+    packed into 32-bit integers using the code:OpUDotAccSatKHR SPIR-V
+    instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 8-bit signed
+    accumulating saturating dot product operations from operands packed into
+    32-bit integers using the code:OpSDotAccSatKHR SPIR-V instruction is
+    accelerated <<devsandqueues-integer-dot-product-accelerated,as defined
+    below>>.
+  * pname:integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 8-bit mixed
+    signedness accumulating saturating dot product operations from operands
+    packed into 32-bit integers using the code:OpSUDotAccSatKHR SPIR-V
+    instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating16BitUnsignedAccelerated is
+    a boolean that will be ename:VK_TRUE if the support for 16-bit unsigned
+    accumulating saturating dot product operations using the
+    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating16BitSignedAccelerated is a
+    boolean that will be ename:VK_TRUE if the support for 16-bit signed
+    accumulating saturating dot product operations using the
+    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 16-bit mixed
+    signedness accumulating saturating dot product operations using the
+    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating32BitUnsignedAccelerated is
+    a boolean that will be ename:VK_TRUE if the support for 32-bit unsigned
+    accumulating saturating dot product operations using the
+    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating32BitSignedAccelerated is a
+    boolean that will be ename:VK_TRUE if the support for 32-bit signed
+    accumulating saturating dot product operations using the
+    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 32-bit mixed
+    signedness accumulating saturating dot product operations using the
+    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating64BitUnsignedAccelerated is
+    a boolean that will be ename:VK_TRUE if the support for 64-bit unsigned
+    accumulating saturating dot product operations using the
+    code:OpUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating64BitSignedAccelerated is a
+    boolean that will be ename:VK_TRUE if the support for 64-bit signed
+    accumulating saturating dot product operations using the
+    code:OpSDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+  * pname:integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated
+    is a boolean that will be ename:VK_TRUE if the support for 64-bit mixed
+    signedness accumulating saturating dot product operations using the
+    code:OpSUDotAccSatKHR SPIR-V instruction is accelerated
+    <<devsandqueues-integer-dot-product-accelerated,as defined below>>.
+// end::VK_KHR_shader_integer_dot_product-properties[]
+
+:refpage: VkPhysicalDeviceShaderIntegerDotProductProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the integer dot product acceleration information of
+a physical device.
+
+[[devsandqueues-integer-dot-product-accelerated]]
+[NOTE]
+.Note
+====
+A dot product operation is deemed accelerated if its implementation provides
+a performance advantage over application-provided code composed from
+elementary instructions and/or other dot product instructions, either
+because the implementation uses optimized machine code sequences whose
+generation from application-provided code cannot be guaranteed or because it
+uses hardware features that cannot otherwise be targeted from
+application-provided code.
+====
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductProperties.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+
+ifdef::VK_QCOM_image_processing[]
+[open,refpage='VkPhysicalDeviceImageProcessingPropertiesQCOM',desc='Structure containing image processing properties',type='structs']
+--
+The sname:VkPhysicalDeviceImageProcessingPropertiesQCOM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageProcessingPropertiesQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-weightfilter-phases]] pname:maxWeightFilterPhases is the
+    maximum value that can: be specified for
+    slink:VkImageViewSampleWeightCreateInfoQCOM::pname:numPhases in
+    <<textures-weightimage-filterphases, weight image sampling>> operations.
+  * [[limits-weightfilter-maxdimension]] pname:maxWeightFilterDimension is a
+    slink:VkExtent2D describing the largest dimensions (pname:width and
+    pname:height) that can: be specified for
+    slink:VkImageViewSampleWeightCreateInfoQCOM::pname:filterSize.
+  * [[limits-blockmatch-maxblocksize]] pname:maxBlockMatchRegion is a
+    slink:VkExtent2D describing the largest dimensions (pname:width and
+    pname:height) that can: be specified for code:blockSize in
+    <<textures-blockmatch,block matching>> operations.
+  * [[limits-boxfilter-maxblocksize]] pname:maxBoxFilterBlockSize is a
+    slink:VkExtent2D describing the maximum dimensions (pname:width and
+    pname:height) that can: be specified for code:blocksize in
+    <<textures-boxfilter,box filter sampling>> operations.
+
+:refpage: VkPhysicalDeviceImageProcessingPropertiesQCOM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the image processing information of a physical
+device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageProcessingPropertiesQCOM.adoc[]
+--
+endif::VK_QCOM_image_processing[]
+
+ifdef::VK_EXT_shader_tile_image[]
+[open,refpage='VkPhysicalDeviceShaderTileImagePropertiesEXT',desc='Structure containing information about tile image support for a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceShaderTileImagePropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderTileImagePropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shaderTileImageCoherentReadAccelerated is a boolean that will be
+    ename:VK_TRUE if coherent reads of tile image data is accelerated.
+  * pname:shaderTileImageReadSampleFromPixelRateInvocation is a boolean that
+    will be ename:VK_TRUE if reading from samples from a pixel rate fragment
+    invocation is supported when
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples > 1.
+  * pname:shaderTileImageReadFromHelperInvocation is a boolean that will be
+    ename:VK_TRUE if reads of tile image data from helper fragment
+    invocations result in valid values.
+
+:refpage: VkPhysicalDeviceShaderTileImagePropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the tile image information of a physical device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderTileImagePropertiesEXT.adoc[]
+--
+endif::VK_EXT_shader_tile_image[]
+
+ifdef::VK_QCOM_image_processing2[]
+[open,refpage='VkPhysicalDeviceImageProcessing2PropertiesQCOM',desc='Structure containing image processing2 properties',type='structs']
+--
+The sname:VkPhysicalDeviceImageProcessing2PropertiesQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageProcessing2PropertiesQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+  * [[limits-blockmatch-maxWindowExtent]] pname:maxBlockMatchWindow is a
+    slink:VkExtent2D describing the largest dimensions (pname:width and
+    pname:height) that can: be specified for the block match window.
+
+:refpage: VkPhysicalDeviceImageProcessing2PropertiesQCOM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These are properties of the image processing2 information of a physical
+device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageProcessing2PropertiesQCOM.adoc[]
+--
+endif::VK_QCOM_image_processing2[]
+
+ifdef::VK_MSFT_layered_driver[]
+[open,refpage='VkPhysicalDeviceLayeredDriverPropertiesMSFT',desc='Structure containing information about driver layering for a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceLayeredDriverPropertiesMSFT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLayeredDriverPropertiesMSFT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:underlyingAPI is a elink:VkLayeredDriverUnderlyingApiMSFT value
+    indicating which underlying API is used to implement the layered driver,
+    or ename:VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT if the driver is not
+    layered.
+
+These are properties of the driver layering information of a physical
+device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceLayeredDriverPropertiesMSFT.adoc[]
+--
+
+[open,refpage='VkLayeredDriverUnderlyingApiMSFT',desc='Layered driver underlying APIs',type='enums']
+--
+Underlying APIs which may: be returned in
+slink:VkPhysicalDeviceLayeredDriverPropertiesMSFT::pname:underlyingAPI are:
+
+include::{generated}/api/enums/VkLayeredDriverUnderlyingApiMSFT.adoc[]
+--
+endif::VK_MSFT_layered_driver[]
+
+ifdef::VK_ARM_scheduling_controls[]
+[open,refpage='VkPhysicalDeviceSchedulingControlsPropertiesARM',desc='Structure containing scheduling control properties of a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceSchedulingControlsPropertiesARM structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSchedulingControlsPropertiesARM.adoc[]
+
+  * [[limits-schedulingControlsFlags]]pname:schedulingControlsFlags
+    specifies the specific scheduling controls that a physical device
+    supports.
+
+:refpage: VkPhysicalDeviceSchedulingControlsPropertiesARM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSchedulingControlsPropertiesARM.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceSchedulingControlsFlagBitsARM',desc='Bitmask specifying scheduling controls supported by a physical device',type='enums']
+--
+Bits which can: be set in
+slink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags,
+specifying supported scheduling controls, are:
+
+include::{generated}/api/enums/VkPhysicalDeviceSchedulingControlsFlagBitsARM.adoc[]
+
+  * ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM
+    indicates that a slink:VkDeviceQueueShaderCoreControlCreateInfoARM
+    structure may: be included in the pname:pNext chain of a
+    slink:VkDeviceQueueCreateInfo or slink:VkDeviceCreateInfo structure.
+--
+
+[open,refpage='VkPhysicalDeviceSchedulingControlsFlagsARM',desc='Bitmask of VkPhysicalDeviceSchedulingControlsFlagBitsARM',type='flags']
+--
+include::{generated}/api/flags/VkPhysicalDeviceSchedulingControlsFlagsARM.adoc[]
+
+tname:VkPhysicalDeviceSchedulingControlsFlagsARM is a bitmask type for
+setting a mask of zero or more
+elink:VkPhysicalDeviceSchedulingControlsFlagBitsARM.
+--
+endif::VK_ARM_scheduling_controls[]
+
+[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties',desc='Reports properties of the queues of the specified physical device',type='protos']
+--
+To query properties of queues available on a physical device, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
+    the number of queue families available or queried, as described below.
+  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
+    of slink:VkQueueFamilyProperties structures.
+
+If pname:pQueueFamilyProperties is `NULL`, then the number of queue families
+available is returned in pname:pQueueFamilyPropertyCount.
+Implementations must: support at least one queue family.
+Otherwise, pname:pQueueFamilyPropertyCount must: point to a variable set by
+the user to the number of elements in the pname:pQueueFamilyProperties
+array, and on return the variable is overwritten with the number of
+structures actually written to pname:pQueueFamilyProperties.
+If pname:pQueueFamilyPropertyCount is less than the number of queue families
+available, at most pname:pQueueFamilyPropertyCount structures will be
+written.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties.adoc[]
+--
+
+[open,refpage='VkQueueFamilyProperties',desc='Structure providing information about a queue family',type='structs']
+--
+The sname:VkQueueFamilyProperties structure is defined as:
+
+include::{generated}/api/structs/VkQueueFamilyProperties.adoc[]
+
+  * pname:queueFlags is a bitmask of elink:VkQueueFlagBits indicating
+    capabilities of the queues in this queue family.
+  * pname:queueCount is the unsigned integer count of queues in this queue
+    family.
+    Each queue family must: support at least one queue.
+  * pname:timestampValidBits is the unsigned integer count of meaningful
+    bits in the timestamps written via
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    flink:vkCmdWriteTimestamp2 or
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    flink:vkCmdWriteTimestamp.
+    The valid range for the count is 36 to 64 bits, or a value of 0,
+    indicating no support for timestamps.
+    Bits outside the valid range are guaranteed to be zeros.
+  * pname:minImageTransferGranularity is the minimum granularity supported
+    for image transfer operations on the queues in this queue family.
+
+The value returned in pname:minImageTransferGranularity has a unit of
+compressed texel blocks for images having a block-compressed format, and a
+unit of texels otherwise.
+
+Possible values of pname:minImageTransferGranularity are:
+
+  * [eq]#(0,0,0)# specifies that only whole mip levels must: be transferred
+    using the image transfer operations on the corresponding queues.
+    In this case, the following restrictions apply to all offset and extent
+    parameters of image transfer operations:
+  ** The pname:x, pname:y, and pname:z members of a slink:VkOffset3D
+     parameter must: always be zero.
+  ** The pname:width, pname:height, and pname:depth members of a
+     slink:VkExtent3D parameter must: always match the width, height, and
+     depth of the image subresource corresponding to the parameter,
+     respectively.
+  * [eq]#(A~x~, A~y~, A~z~)# where [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#
+    are all integer powers of two.
+    In this case the following restrictions apply to all image transfer
+    operations:
+  ** pname:x, pname:y, and pname:z of a slink:VkOffset3D parameter must: be
+     integer multiples of [eq]#A~x~#, [eq]#A~y~#, and [eq]#A~z~#,
+     respectively.
+  ** pname:width of a slink:VkExtent3D parameter must: be an integer
+     multiple of [eq]#A~x~#, or else [eq]#pname:x {plus} pname:width# must:
+     equal the width of the image subresource corresponding to the
+     parameter.
+  ** pname:height of a slink:VkExtent3D parameter must: be an integer
+     multiple of [eq]#A~y~#, or else [eq]#pname:y {plus} pname:height# must:
+     equal the height of the image subresource corresponding to the
+     parameter.
+  ** pname:depth of a slink:VkExtent3D parameter must: be an integer
+     multiple of [eq]#A~z~#, or else [eq]#pname:z {plus} pname:depth# must:
+     equal the depth of the image subresource corresponding to the
+     parameter.
+  ** If the format of the image corresponding to the parameters is one of
+     the block-compressed formats then for the purposes of the above
+     calculations the granularity must: be scaled up by the compressed texel
+     block dimensions.
+
+Queues supporting graphics and/or compute operations must: report
+[eq]#(1,1,1)# in pname:minImageTransferGranularity, meaning that there are
+no additional restrictions on the granularity of image transfer operations
+for these queues.
+Other queues supporting image transfer operations are only required: to
+support whole mip level transfers, thus pname:minImageTransferGranularity
+for queues belonging to such queue families may: be [eq]#(0,0,0)#.
+
+The <<memory-device,Device Memory>> section describes memory properties
+queried from the physical device.
+
+For physical device feature queries see the <<features, Features>> chapter.
+
+include::{generated}/validity/structs/VkQueueFamilyProperties.adoc[]
+--
+
+[open,refpage='VkQueueFlagBits',desc='Bitmask specifying capabilities of queues in a queue family',type='enums']
+--
+Bits which may: be set in slink:VkQueueFamilyProperties::pname:queueFlags,
+indicating capabilities of queues in a queue family are:
+
+include::{generated}/api/enums/VkQueueFlagBits.adoc[]
+
+  * ename:VK_QUEUE_GRAPHICS_BIT specifies that queues in this queue family
+    support graphics operations.
+  * ename:VK_QUEUE_COMPUTE_BIT specifies that queues in this queue family
+    support compute operations.
+  * ename:VK_QUEUE_TRANSFER_BIT specifies that queues in this queue family
+    support transfer operations.
+  * ename:VK_QUEUE_SPARSE_BINDING_BIT specifies that queues in this queue
+    family support sparse memory management operations (see
+    <<sparsememory,Sparse Resources>>).
+    If any of the sparse resource features are enabled, then at least one
+    queue family must: support this bit.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkQueueFlagBits
+  ** ename:VK_QUEUE_SPARSE_BINDING_BIT <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR specifies that queues in this queue
+    family support <<video-decode-operations,video decode operations>>.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR specifies that queues in this queue
+    family support <<video-encode-operations,video encode operations>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_NV_optical_flow[]
+  * ename:VK_QUEUE_OPTICAL_FLOW_BIT_NV specifies that queues in this queue
+    family support optical flow operations.
+endif::VK_NV_optical_flow[]
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_QUEUE_PROTECTED_BIT specifies that queues in this queue family
+    support the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit.
+    (see <<memory-protected-memory,Protected Memory>>).
+    If the physical device supports the <<features-protectedMemory,
+    pname:protectedMemory>> feature, at least one of its queue families
+    must: support this bit.
+endif::VK_VERSION_1_1[]
+
+If an implementation exposes any queue family that supports graphics
+operations, at least one queue family of at least one physical device
+exposed by the implementation must: support both graphics and compute
+operations.
+
+ifdef::VK_VERSION_1_1[]
+Furthermore, if the <<features-protectedMemory, pname:protectedMemory>>
+physical device feature is supported, then at least one queue family of at
+least one physical device exposed by the implementation must: support
+graphics operations, compute operations, and protected memory operations.
+endif::VK_VERSION_1_1[]
+
+[NOTE]
+.Note
+====
+All commands that are allowed on a queue that supports transfer operations
+are also allowed on a queue that supports either graphics or compute
+operations.
+Thus, if the capabilities of a queue family include
+ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, then reporting
+the ename:VK_QUEUE_TRANSFER_BIT capability separately for that queue family
+is optional:.
+====
+
+For further details see <<devsandqueues-queues,Queues>>.
+--
+
+[open,refpage='VkQueueFlags',desc='Bitmask of VkQueueFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkQueueFlags.adoc[]
+
+tname:VkQueueFlags is a bitmask type for setting a mask of zero or more
+elink:VkQueueFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[open,refpage='vkGetPhysicalDeviceQueueFamilyProperties2',desc='Reports properties of the queues of the specified physical device',type='protos']
+--
+To query properties of queues available on a physical device, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceQueueFamilyProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:pQueueFamilyPropertyCount is a pointer to an integer related to
+    the number of queue families available or queried, as described in
+    flink:vkGetPhysicalDeviceQueueFamilyProperties.
+  * pname:pQueueFamilyProperties is either `NULL` or a pointer to an array
+    of slink:VkQueueFamilyProperties2 structures.
+
+fname:vkGetPhysicalDeviceQueueFamilyProperties2 behaves similarly to
+flink:vkGetPhysicalDeviceQueueFamilyProperties, with the ability to return
+extended information in a pname:pNext chain of output structures.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceQueueFamilyProperties2.adoc[]
+--
+
+[open,refpage='VkQueueFamilyProperties2',desc='Structure providing information about a queue family',type='structs']
+--
+The sname:VkQueueFamilyProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkQueueFamilyProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkQueueFamilyProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queueFamilyProperties is a slink:VkQueueFamilyProperties structure
+    which is populated with the same values as in
+    flink:vkGetPhysicalDeviceQueueFamilyProperties.
+
+include::{generated}/validity/structs/VkQueueFamilyProperties2.adoc[]
+--
+
+ifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+[open,refpage='VkQueueFamilyGlobalPriorityPropertiesKHR',desc='Return structure for queue family global priority information query',type='structs']
+--
+The definition of slink:VkQueueFamilyGlobalPriorityPropertiesKHR is:
+
+include::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesKHR.adoc[]
+ifdef::VK_EXT_global_priority_query[]
+or the equivalent
+
+include::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.adoc[]
+endif::VK_EXT_global_priority_query[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:priorityCount is the number of supported global queue priorities
+    in this queue family, and it must: be greater than 0.
+  * pname:priorities is an array of ename:VK_MAX_GLOBAL_PRIORITY_SIZE_EXT
+    elink:VkQueueGlobalPriorityEXT enums representing all supported global
+    queue priorities in this queue family.
+    The first pname:priorityCount elements of the array will be valid.
+
+If the sname:VkQueueFamilyGlobalPriorityPropertiesKHR structure is included
+in the pname:pNext chain of the slink:VkQueueFamilyProperties2 structure
+passed to flink:vkGetPhysicalDeviceQueueFamilyProperties2, it is filled in
+with the list of supported global queue priorities for the indicated family.
+
+The valid elements of pname:priorities must: not contain any duplicate
+values.
+
+The valid elements of pname:priorities must: be a continuous sequence of
+elink:VkQueueGlobalPriorityKHR enums in the ascending order.
+
+[NOTE]
+.Note
+====
+For example, returning pname:priorityCount as 3 with supported
+pname:priorities as ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
+ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR and
+ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR is not allowed.
+====
+
+include::{generated}/validity/structs/VkQueueFamilyGlobalPriorityPropertiesKHR.adoc[]
+--
+
+[open,refpage='VK_MAX_GLOBAL_PRIORITY_SIZE_KHR',desc='Length of an array of global queue priorities',type='consts']
+--
+ename:VK_MAX_GLOBAL_PRIORITY_SIZE_KHR is the length of an array of
+elink:VkQueueGlobalPriorityKHR enumerants representing supported queue
+priorities, as returned in
+slink:VkQueueFamilyGlobalPriorityPropertiesKHR::pname:priorities.
+
+include::{generated}/api/enums/VK_MAX_GLOBAL_PRIORITY_SIZE_KHR.adoc[]
+
+ifdef::VK_EXT_global_priority_query[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_GLOBAL_PRIORITY_SIZE_EXT.adoc[]
+endif::VK_EXT_global_priority_query[]
+--
+endif::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+
+ifdef::VK_NV_device_diagnostic_checkpoints[]
+include::{chapters}/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.adoc[]
+endif::VK_NV_device_diagnostic_checkpoints[]
+
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_KHR_video_queue[]
+[open,refpage='VkQueueFamilyVideoPropertiesKHR',desc='Structure describing video codec operations supported by a queue family',type='structs']
+--
+The slink:VkQueueFamilyVideoPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkQueueFamilyVideoPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoCodecOperations is a bitmask of
+    elink:VkVideoCodecOperationFlagBitsKHR that indicates the set of video
+    codec operations supported by the queue family.
+
+If this structure is included in the pname:pNext chain of the
+slink:VkQueueFamilyProperties2 structure passed to
+flink:vkGetPhysicalDeviceQueueFamilyProperties2, then it is filled with the
+set of video codec operations supported by the specified queue family.
+
+include::{generated}/validity/structs/VkQueueFamilyVideoPropertiesKHR.adoc[]
+--
+
+[open,refpage='VkQueueFamilyQueryResultStatusPropertiesKHR',desc='Structure specifying support for result status query',type='structs']
+--
+The slink:VkQueueFamilyQueryResultStatusPropertiesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkQueueFamilyQueryResultStatusPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queryResultStatusSupport reports ename:VK_TRUE if query type
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and use of
+    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR are supported.
+
+If this structure is included in the pname:pNext chain of the
+slink:VkQueueFamilyProperties2 structure passed to
+flink:vkGetPhysicalDeviceQueueFamilyProperties2, then it is filled with
+information about whether <<queries-result-status-only,result status
+queries>> are supported by the specified queue family.
+
+include::{generated}/validity/structs/VkQueueFamilyQueryResultStatusPropertiesKHR.adoc[]
+--
+endif::VK_KHR_video_queue[]
+
+ifdef::VK_KHR_performance_query[]
+include::{chapters}/VK_KHR_performance_query/queuefamily.adoc[]
+endif::VK_KHR_performance_query[]
+
+
+[[devsandqueues-devices]]
+== Devices
+
+Device objects represent logical connections to physical devices.
+Each device exposes a number of _queue families_ each having one or more
+_queues_.
+All queues in a queue family support the same operations.
+
+As described in <<devsandqueues-physical-device-enumeration,Physical
+Devices>>, a Vulkan application will first query for all physical devices in
+a system.
+Each physical device can: then be queried for its capabilities, including
+its queue and queue family properties.
+Once an acceptable physical device is identified, an application will create
+a corresponding logical device.
+The created logical device is then the primary interface to the physical
+device.
+
+How to enumerate the physical devices in a system and query those physical
+devices for their queue family properties is described in the
+<<devsandqueues-physical-device-enumeration, Physical Device Enumeration>>
+section above.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+
+A single logical device can: be created from multiple physical devices, if
+those physical devices belong to the same device group.
+A _device group_ is a set of physical devices that support accessing each
+other's memory and recording a single command buffer that can: be executed
+on all the physical devices.
+Device groups are enumerated by calling
+flink:vkEnumeratePhysicalDeviceGroups, and a logical device is created from
+a subset of the physical devices in a device group by passing the physical
+devices through slink:VkDeviceGroupDeviceCreateInfo.
+For two physical devices to be in the same device group, they must: support
+identical extensions, features, and properties.
+
+[NOTE]
+.Note
+====
+Physical devices in the same device group must: be so similar because there
+are no rules for how different features/properties would interact.
+They must: return the same values for nearly every invariant
+ftext:vkGetPhysicalDevice* feature, property, capability, etc., but could
+potentially differ for certain queries based on things like having a
+different display connected, or a different compositor.
+The specification does not attempt to enumerate which state is in each
+category, because such a list would quickly become out of date.
+====
+
+[open,refpage='vkEnumeratePhysicalDeviceGroups',desc='Enumerates groups of physical devices that can be used to create a single logical device',type='protos']
+--
+To retrieve a list of the device groups present in the system, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkEnumeratePhysicalDeviceGroups.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_device_group_creation[or the equivalent command]
+
+ifdef::VK_KHR_device_group_creation[]
+include::{generated}/api/protos/vkEnumeratePhysicalDeviceGroupsKHR.adoc[]
+endif::VK_KHR_device_group_creation[]
+
+  * pname:instance is a handle to a Vulkan instance previously created with
+    flink:vkCreateInstance.
+  * pname:pPhysicalDeviceGroupCount is a pointer to an integer related to
+    the number of device groups available or queried, as described below.
+  * pname:pPhysicalDeviceGroupProperties is either `NULL` or a pointer to an
+    array of slink:VkPhysicalDeviceGroupProperties structures.
+
+If pname:pPhysicalDeviceGroupProperties is `NULL`, then the number of device
+groups available is returned in pname:pPhysicalDeviceGroupCount.
+Otherwise, pname:pPhysicalDeviceGroupCount must: point to a variable set by
+the user to the number of elements in the
+pname:pPhysicalDeviceGroupProperties array, and on return the variable is
+overwritten with the number of structures actually written to
+pname:pPhysicalDeviceGroupProperties.
+If pname:pPhysicalDeviceGroupCount is less than the number of device groups
+available, at most pname:pPhysicalDeviceGroupCount structures will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available device groups were
+returned.
+
+Every physical device must: be in exactly one device group.
+
+include::{generated}/validity/protos/vkEnumeratePhysicalDeviceGroups.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceGroupProperties',desc='Structure specifying physical device group properties',type='structs']
+--
+The sname:VkPhysicalDeviceGroupProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGroupProperties.adoc[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceGroupPropertiesKHR.adoc[]
+endif::VK_KHR_device_group_creation[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:physicalDeviceCount is the number of physical devices in the
+    group.
+  * pname:physicalDevices is an array of ename:VK_MAX_DEVICE_GROUP_SIZE
+    slink:VkPhysicalDevice handles representing all physical devices in the
+    group.
+    The first pname:physicalDeviceCount elements of the array will be valid.
+  * pname:subsetAllocation specifies whether logical devices created from
+    the group support allocating device memory on a subset of devices, via
+    the pname:deviceMask member of the slink:VkMemoryAllocateFlagsInfo.
+    If this is ename:VK_FALSE, then all device memory allocations are made
+    across all physical devices in the group.
+    If pname:physicalDeviceCount is `1`, then pname:subsetAllocation must:
+    be ename:VK_FALSE.
+
+include::{generated}/validity/structs/VkPhysicalDeviceGroupProperties.adoc[]
+--
+
+[open,refpage='VK_MAX_DEVICE_GROUP_SIZE',desc='Length of a physical device handle array',type='consts',alias='VK_MAX_DEVICE_GROUP_SIZE_KHR']
+--
+ename:VK_MAX_DEVICE_GROUP_SIZE is the length of an array containing
+slink:VkPhysicalDevice handle values representing all physical devices in a
+group, as returned in
+slink:VkPhysicalDeviceGroupProperties::pname:physicalDevices.
+
+include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE.adoc[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE_KHR.adoc[]
+endif::VK_KHR_device_group_creation[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+
+
+[[devsandqueues-device-creation]]
+=== Device Creation
+
+[open,refpage='VkDevice',desc='Opaque handle to a device object',type='handles']
+--
+Logical devices are represented by sname:VkDevice handles:
+
+include::{generated}/api/handles/VkDevice.adoc[]
+--
+
+[open,refpage='vkCreateDevice',desc='Create a new device instance',type='protos']
+--
+A logical device is created as a _connection_ to a physical device.
+To create a logical device, call:
+
+include::{generated}/api/protos/vkCreateDevice.adoc[]
+
+  * pname:physicalDevice must: be one of the device handles returned from a
+    call to fname:vkEnumeratePhysicalDevices (see
+    <<devsandqueues-physical-device-enumeration, Physical Device
+    Enumeration>>).
+  * pname:pCreateInfo is a pointer to a slink:VkDeviceCreateInfo structure
+    containing information about how to create the device.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pDevice is a pointer to a handle in which the created
+    slink:VkDevice is returned.
+
+fname:vkCreateDevice verifies that extensions and features requested in the
+pname:ppEnabledExtensionNames and pname:pEnabledFeatures members of
+pname:pCreateInfo, respectively, are supported by the implementation.
+If any requested extension is not supported, fname:vkCreateDevice must:
+return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
+If any requested feature is not supported, fname:vkCreateDevice must: return
+ename:VK_ERROR_FEATURE_NOT_PRESENT.
+Support for extensions can: be checked before creating a device by querying
+flink:vkEnumerateDeviceExtensionProperties.
+Support for features can: similarly be checked by querying
+flink:vkGetPhysicalDeviceFeatures.
+
+ifdef::VKSC_VERSION_1_0[]
+fname:vkCreateDevice also verifies that mandatory structures and features
+for Vulkan SC are present and enabled:
+
+  * The pname:pNext chain must: include a
+    slink:VkDeviceObjectReservationCreateInfo structure.
+  * The pname:pNext chain must: include a
+    slink:VkPhysicalDeviceVulkanSC10Features structure.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * The slink:VkDeviceCreateInfo::pname:pNext chain must: include a
+    slink:VkDeviceObjectReservationCreateInfo structure <<SCID-4>>.
+  * The slink:VkDeviceCreateInfo::pname:pNext chain must: include a
+    slink:VkPhysicalDeviceVulkanSC10Features structure <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+
+If any of these conditions are not met, fname:vkCreateDevice must: return
+ename:VK_ERROR_INITIALIZATION_FAILED.
+endif::VKSC_VERSION_1_0[]
+
+After verifying and enabling the extensions the sname:VkDevice object is
+created and returned to the application.
+
+ifndef::VKSC_VERSION_1_0[]
+Multiple logical devices can: be created from the same physical device.
+Logical device creation may: fail due to lack of device-specific resources
+(in addition to other errors).
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+An implementation may: allow multiple logical devices to be created from the
+same physical device.
+Logical device creation may: fail due to lack of device-specific resources,
+including too many other logical devices, in addition to other errors.
+endif::VKSC_VERSION_1_0[]
+If that occurs, fname:vkCreateDevice will return
+ename:VK_ERROR_TOO_MANY_OBJECTS.
+
+ifdef::VKSC_VERSION_1_0[]
+If the pipeline cache data pointed to by the pname:pInitialData member of
+any element of
+slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
+is not compatible with the device, then fname:vkCreateDevice will return
+ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkCreateDevice returns ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA
+    if the pname:pInitialData member of any element of
+    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
+    is a pointer to incompatible pipeline cache data <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_EXT_application_parameters[]
+To provide _application parameters_ at device creation time, an application
+can: link one or more slink:VkApplicationParametersEXT structures to the
+pname:pNext chain of the sname:VkDeviceCreateInfo structure.
+
+If the slink:VkApplicationParametersEXT::pname:vendorID and
+slink:VkApplicationParametersEXT::pname:deviceID values do not match the
+slink:VkPhysicalDeviceProperties::pname:vendorID and
+slink:VkPhysicalDeviceProperties::pname:deviceID of pname:physicalDevice,
+flink:vkCreateDevice must: return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+If slink:VkApplicationParametersEXT::pname:key is not a valid
+implementation-defined application parameter key for the device being
+created, or if pname:value is not a valid value for the specified pname:key,
+flink:vkCreateDevice will fail and return
+ename:VK_ERROR_INITIALIZATION_FAILED.
+
+For any implementation-defined application parameter pname:key that exists
+but is not set by the application, the implementation-specific default value
+is used.
+endif::VK_EXT_application_parameters[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateDevice-ppEnabledExtensionNames-01387]]
+    All <<extendingvulkan-extensions-extensiondependencies, required device
+    extensions>> for each extension in the
+    slink:VkDeviceCreateInfo::pname:ppEnabledExtensionNames list must: also
+    be present in that list
+ifdef::VK_EXT_application_parameters[]
+  * [[VUID-vkCreateDevice-key-05092]]
+    The pname:key value of each slink:VkApplicationParametersEXT structure
+    in the slink:VkDeviceCreateInfo::pname:pNext chain must: be unique
+endif::VK_EXT_application_parameters[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateDevice-deviceMemoryRequestCount-05095]]
+    The sum of pname:deviceMemoryRequestCount over all
+    sname:VkDeviceObjectReservationCreateInfo structures must: be less than
+    or equal to slink:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount
+  * [[VUID-vkCreateDevice-samplerRequestCount-05096]]
+    The sum of pname:samplerRequestCount over all
+    sname:VkDeviceObjectReservationCreateInfo structures must: be less than
+    or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxSamplerAllocationCount
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkCreateDevice.adoc[]
+--
+
+[open,refpage='VkDeviceCreateInfo',desc='Structure specifying parameters of a newly created device',type='structs']
+--
+The sname:VkDeviceCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:queueCreateInfoCount is the unsigned integer size of the
+    pname:pQueueCreateInfos array.
+    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
+    below for further details.
+  * pname:pQueueCreateInfos is a pointer to an array of
+    slink:VkDeviceQueueCreateInfo structures describing the queues that are
+    requested to be created along with the logical device.
+    Refer to the <<devsandqueues-queue-creation,Queue Creation>> section
+    below for further details.
+  * pname:enabledLayerCount is deprecated and ignored.
+  * pname:ppEnabledLayerNames is deprecated and ignored.
+    See <<extendingvulkan-layers-devicelayerdeprecation>>.
+  * pname:enabledExtensionCount is the number of device extensions to
+    enable.
+  * pname:ppEnabledExtensionNames is a pointer to an array of
+    pname:enabledExtensionCount null-terminated UTF-8 strings containing the
+    names of extensions to enable for the created device.
+    See the <<extendingvulkan-extensions>> section for further details.
+  * pname:pEnabledFeatures is `NULL` or a pointer to a
+    slink:VkPhysicalDeviceFeatures structure containing boolean indicators
+    of all the features to be enabled.
+    Refer to the <<features, Features>> section for further details.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-02802]]
+    The pname:queueFamilyIndex member of each element of
+    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
+ifdef::VK_VERSION_1_1[]
+    , except that two members can share the same pname:queueFamilyIndex if
+    one describes protected-capable queues and one describes queues that are
+    not protected-capable
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkDeviceCreateInfo-pQueueCreateInfos-06755]]
+    If multiple elements of pname:pQueueCreateInfos share the same
+    pname:queueFamilyIndex, the sum of their pname:queueCount members must:
+    be less than or equal to the pname:queueCount member of the
+    sname:VkQueueFamilyProperties structure, as returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties in the
+    pname:pQueueFamilyProperties[queueFamilyIndex]
+ifdef::VK_KHR_global_priority,VK_EXT_global_priority[]
+  * [[VUID-VkDeviceCreateInfo-pQueueCreateInfos-06654]]
+    If multiple elements of pname:pQueueCreateInfos share the same
+    pname:queueFamilyIndex, then all of such elements must: have the same
+    global priority level, which can: be specified explicitly by the
+    including a slink:VkDeviceQueueGlobalPriorityCreateInfoKHR structure in
+    the pname:pNext chain, or by the implicit default value
+endif::VK_KHR_global_priority,VK_EXT_global_priority[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkDeviceCreateInfo-pNext-00373]]
+    If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2
+    structure, then pname:pEnabledFeatures must: be `NULL`
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_AMD_negative_viewport_height[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840]]
+    If slink:VkPhysicalDeviceProperties::pname:apiVersion advertises Vulkan
+    1.1 or later, pname:ppEnabledExtensionNames must: not contain
+    `apiext:VK_AMD_negative_viewport_height`
+endif::VK_VERSION_1_1[]
+ifdef::VK_KHR_maintenance1[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374]]
+    pname:ppEnabledExtensionNames must: not contain both
+    `apiext:VK_KHR_maintenance1` and
+    `apiext:VK_AMD_negative_viewport_height`
+endif::VK_KHR_maintenance1[]
+endif::VK_AMD_negative_viewport_height[]
+ifdef::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328]]
+    pname:ppEnabledExtensionNames must: not contain both
+    `apiext:VK_KHR_buffer_device_address` and
+    `apiext:VK_EXT_buffer_device_address`
+endif::VK_EXT_buffer_device_address+VK_KHR_buffer_device_address[]
+ifdef::VK_VERSION_1_2[]
+ifdef::VK_EXT_buffer_device_address[]
+  * [[VUID-VkDeviceCreateInfo-pNext-04748]]
+    If the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan12Features structure and
+    slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress is
+    ename:VK_TRUE, pname:ppEnabledExtensionNames must: not contain
+    `apiext:VK_EXT_buffer_device_address`
+endif::VK_EXT_buffer_device_address[]
+  * [[VUID-VkDeviceCreateInfo-pNext-02829]]
+    If the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan11Features structure, then it must: not
+    include a slink:VkPhysicalDevice16BitStorageFeatures,
+    slink:VkPhysicalDeviceMultiviewFeatures,
+    slink:VkPhysicalDeviceVariablePointersFeatures,
+    slink:VkPhysicalDeviceProtectedMemoryFeatures,
+    slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures, or
+    slink:VkPhysicalDeviceShaderDrawParametersFeatures structure
+  * [[VUID-VkDeviceCreateInfo-pNext-02830]]
+    If the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan12Features structure, then it must: not
+    include a slink:VkPhysicalDevice8BitStorageFeatures,
+    slink:VkPhysicalDeviceShaderAtomicInt64Features,
+    slink:VkPhysicalDeviceShaderFloat16Int8Features,
+    slink:VkPhysicalDeviceDescriptorIndexingFeatures,
+    slink:VkPhysicalDeviceScalarBlockLayoutFeatures,
+    slink:VkPhysicalDeviceImagelessFramebufferFeatures,
+    slink:VkPhysicalDeviceUniformBufferStandardLayoutFeatures,
+    slink:VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures,
+    slink:VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures,
+    slink:VkPhysicalDeviceHostQueryResetFeatures,
+    slink:VkPhysicalDeviceTimelineSemaphoreFeatures,
+    slink:VkPhysicalDeviceBufferDeviceAddressFeatures, or
+    slink:VkPhysicalDeviceVulkanMemoryModelFeatures structure
+ifdef::VK_KHR_shader_draw_parameters[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-04476]]
+    If pname:ppEnabledExtensionNames contains
+    `"VK_KHR_shader_draw_parameters"` and the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan11Features structure, then
+    sname:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters must:
+    be ename:VK_TRUE
+endif::VK_KHR_shader_draw_parameters[]
+ifdef::VK_KHR_draw_indirect_count[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02831]]
+    If pname:ppEnabledExtensionNames contains `"VK_KHR_draw_indirect_count"`
+    and the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan12Features structure, then
+    sname:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount must: be
+    ename:VK_TRUE
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02832]]
+    If pname:ppEnabledExtensionNames contains
+    `"VK_KHR_sampler_mirror_clamp_to_edge"` and the pname:pNext chain
+    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
+    sname:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge
+    must: be ename:VK_TRUE
+endif::VK_KHR_sampler_mirror_clamp_to_edge[]
+ifdef::VK_EXT_descriptor_indexing[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02833]]
+    If pname:ppEnabledExtensionNames contains `"VK_EXT_descriptor_indexing"`
+    and the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan12Features structure, then
+    sname:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing must:
+    be ename:VK_TRUE
+endif::VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_sampler_filter_minmax[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02834]]
+    If pname:ppEnabledExtensionNames contains
+    `"VK_EXT_sampler_filter_minmax"` and the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan12Features structure, then
+    sname:VkPhysicalDeviceVulkan12Features::pname:samplerFilterMinmax must:
+    be ename:VK_TRUE
+endif::VK_EXT_sampler_filter_minmax[]
+ifdef::VK_EXT_shader_viewport_index_layer[]
+  * [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02835]]
+    If pname:ppEnabledExtensionNames contains
+    `"VK_EXT_shader_viewport_index_layer"` and the pname:pNext chain
+    includes a slink:VkPhysicalDeviceVulkan12Features structure, then
+    sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex
+    and sname:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer
+    must: both be ename:VK_TRUE
+endif::VK_EXT_shader_viewport_index_layer[]
+endif::VK_VERSION_1_2[]
+ifdef::VK_VERSION_1_3[]
+  * [[VUID-VkDeviceCreateInfo-pNext-06532]]
+    If the pname:pNext chain includes a
+    slink:VkPhysicalDeviceVulkan13Features structure, then it must: not
+    include a slink:VkPhysicalDeviceDynamicRenderingFeatures,
+    slink:VkPhysicalDeviceImageRobustnessFeatures,
+    slink:VkPhysicalDeviceInlineUniformBlockFeatures,
+    slink:VkPhysicalDeviceMaintenance4Features,
+    slink:VkPhysicalDevicePipelineCreationCacheControlFeatures,
+    slink:VkPhysicalDevicePrivateDataFeatures,
+    slink:VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures,
+    slink:VkPhysicalDeviceShaderIntegerDotProductFeatures,
+    slink:VkPhysicalDeviceShaderTerminateInvocationFeatures,
+    slink:VkPhysicalDeviceSubgroupSizeControlFeatures,
+    slink:VkPhysicalDeviceSynchronization2Features,
+    slink:VkPhysicalDeviceTextureCompressionASTCHDRFeatures, or
+    slink:VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures structure
+// Jon 1.3 TBD - add extension-specific VUs specifying when Vulkan13Features
+// members must: be true.
+endif::VK_VERSION_1_3[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkDeviceCreateInfo-pProperties-04451]]
+    If the `apiext:VK_KHR_portability_subset` extension is included in
+    pname:pProperties of flink:vkEnumerateDeviceExtensionProperties,
+    pname:ppEnabledExtensionNames must: include
+    `"VK_KHR_portability_subset"`
+endif::VK_KHR_portability_subset[]
+ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[]
+  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04478]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, the <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> feature must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04479]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, the <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04480]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature must: not be enabled
+endif::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[]
+  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04481]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is enabled, the <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> feature must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04482]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is enabled, the <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04483]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is enabled, the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature must: not be enabled
+endif::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_shader_image_atomic_int64[]
+  * [[VUID-VkDeviceCreateInfo-None-04896]]
+    If <<features-sparseImageInt64Atomics, pname:sparseImageInt64Atomics>>
+    is enabled, <<features-shaderImageInt64Atomics,
+    pname:shaderImageInt64Atomics>> must: be enabled
+endif::VK_EXT_shader_image_atomic_int64[]
+ifdef::VK_EXT_shader_atomic_float[]
+  * [[VUID-VkDeviceCreateInfo-None-04897]]
+    If <<features-sparseImageFloat32Atomics,
+    pname:sparseImageFloat32Atomics>> is enabled,
+    <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
+    must: be enabled
+  * [[VUID-VkDeviceCreateInfo-None-04898]]
+    If <<features-sparseImageFloat32AtomicAdd,
+    pname:sparseImageFloat32AtomicAdd>> is enabled,
+    <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>> must: be enabled
+endif::VK_EXT_shader_atomic_float[]
+ifdef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975]]
+    If <<features-sparseImageFloat32AtomicMinMax,
+    pname:sparseImageFloat32AtomicMinMax>> is enabled,
+    <<features-shaderImageFloat32AtomicMinMax,
+    pname:shaderImageFloat32AtomicMinMax>> must: be enabled
+endif::VK_EXT_shader_atomic_float2[]
+ifdef::VK_EXT_descriptor_buffer[]
+ifdef::VK_AMD_shader_fragment_mask[]
+  * [[VUID-VkDeviceCreateInfo-None-08095]]
+    If <<features-descriptorBuffer, pname:descriptorBuffer>> is enabled,
+    pname:ppEnabledExtensionNames must: not contain
+    `apiext:VK_AMD_shader_fragment_mask`
+endif::VK_AMD_shader_fragment_mask[]
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_ARM_scheduling_controls[]
+  * [[VUID-VkDeviceCreateInfo-pNext-09396]]
+    If the pname:pNext chain includes a
+    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure, then it
+    must: not be included in the pname:pNext chain of any of the
+    slink:VkDeviceQueueCreateInfo structures in pname:pQueueCreateInfos.
+  * [[VUID-VkDeviceCreateInfo-pNext-09397]]
+    If the pname:pNext chain includes a
+    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure then
+    slink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags
+    must: contain
+    ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM.
+endif::VK_ARM_scheduling_controls[]
+****
+
+include::{generated}/validity/structs/VkDeviceCreateInfo.adoc[]
+--
+
+[open,refpage='VkDeviceCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDeviceCreateFlags.adoc[]
+
+tname:VkDeviceCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+[open,refpage='VkDeviceGroupDeviceCreateInfo',desc='Create a logical device from multiple physical devices',type='structs']
+--
+A logical device can: be created that connects to one or more physical
+devices by adding a sname:VkDeviceGroupDeviceCreateInfo structure to the
+pname:pNext chain of slink:VkDeviceCreateInfo.
+The sname:VkDeviceGroupDeviceCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupDeviceCreateInfo.adoc[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupDeviceCreateInfoKHR.adoc[]
+endif::VK_KHR_device_group_creation[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:physicalDeviceCount is the number of elements in the
+    pname:pPhysicalDevices array.
+  * pname:pPhysicalDevices is a pointer to an array of physical device
+    handles belonging to the same device group.
+
+The elements of the pname:pPhysicalDevices array are an ordered list of the
+physical devices that the logical device represents.
+These must: be a subset of a single device group, and need not be in the
+same order as they were enumerated.
+The order of the physical devices in the pname:pPhysicalDevices array
+determines the _device index_ of each physical device, with element [eq]#i#
+being assigned a device index of [eq]#i#.
+Certain commands and structures refer to one or more physical devices by
+using device indices or _device masks_ formed using device indices.
+
+A logical device created without using sname:VkDeviceGroupDeviceCreateInfo,
+or with pname:physicalDeviceCount equal to zero, is equivalent to a
+pname:physicalDeviceCount of one and pname:pPhysicalDevices pointing to the
+pname:physicalDevice parameter to flink:vkCreateDevice.
+In particular, the device index of that physical device is zero.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375]]
+    Each element of pname:pPhysicalDevices must: be unique
+  * [[VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376]]
+    All elements of pname:pPhysicalDevices must: be in the same device group
+    as enumerated by flink:vkEnumeratePhysicalDeviceGroups
+  * [[VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377]]
+    If pname:physicalDeviceCount is not `0`, the pname:physicalDevice
+    parameter of flink:vkCreateDevice must: be an element of
+    pname:pPhysicalDevices
+****
+
+include::{generated}/validity/structs/VkDeviceGroupDeviceCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+
+ifdef::VK_AMD_memory_overallocation_behavior[]
+[open,refpage='VkDeviceMemoryOverallocationCreateInfoAMD',desc='Specify memory overallocation behavior for a Vulkan device',type='structs']
+--
+To specify whether device memory allocation is allowed beyond the size
+reported by slink:VkPhysicalDeviceMemoryProperties, add a
+slink:VkDeviceMemoryOverallocationCreateInfoAMD structure to the pname:pNext
+chain of the slink:VkDeviceCreateInfo structure.
+If this structure is not specified, it is as if the
+ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD value is used.
+
+include::{generated}/api/structs/VkDeviceMemoryOverallocationCreateInfoAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:overallocationBehavior is the desired overallocation behavior.
+
+include::{generated}/validity/structs/VkDeviceMemoryOverallocationCreateInfoAMD.adoc[]
+--
+
+[open,refpage='VkMemoryOverallocationBehaviorAMD',desc='Specify memory overallocation behavior',type='enums']
+--
+Possible values for
+slink:VkDeviceMemoryOverallocationCreateInfoAMD::pname:overallocationBehavior
+include:
+
+include::{generated}/api/enums/VkMemoryOverallocationBehaviorAMD.adoc[]
+
+  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD lets the
+    implementation decide if overallocation is allowed.
+  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD specifies
+    overallocation is allowed if platform permits.
+  * ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD specifies the
+    application is not allowed to allocate device memory beyond the heap
+    sizes reported by slink:VkPhysicalDeviceMemoryProperties.
+    Allocations that are not explicitly made by the application within the
+    scope of the Vulkan instance are not accounted for.
+--
+endif::VK_AMD_memory_overallocation_behavior[]
+
+ifdef::VK_NV_device_diagnostics_config[]
+[open,refpage='VkDeviceDiagnosticsConfigCreateInfoNV',desc='Specify diagnostics config for a Vulkan device',type='structs']
+--
+When using the Nsight^(TM)^ Aftermath SDK, to configure how device crash
+dumps are created, add a slink:VkDeviceDiagnosticsConfigCreateInfoNV
+structure to the pname:pNext chain of the slink:VkDeviceCreateInfo
+structure.
+
+include::{generated}/api/structs/VkDeviceDiagnosticsConfigCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkDeviceDiagnosticsConfigFlagBitsNV
+    specifying additional parameters for configuring diagnostic tools.
+
+include::{generated}/validity/structs/VkDeviceDiagnosticsConfigCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkDeviceDiagnosticsConfigFlagBitsNV',desc='Bitmask specifying diagnostics flags',type='enums']
+--
+Bits which can: be set in
+slink:VkDeviceDiagnosticsConfigCreateInfoNV::pname:flags include:
+
+include::{generated}/api/enums/VkDeviceDiagnosticsConfigFlagBitsNV.adoc[]
+
+  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV
+    enables the generation of debug information for shaders.
+  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV
+    enables driver side tracking of resources (images, buffers, etc.) used
+    to augment the device fault information.
+  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV
+    enables automatic insertion of <<device-diagnostic-checkpoints,
+    diagnostic checkpoints>> for draw calls, dispatches,
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+    trace rays,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+    and copies.
+    The CPU call stack at the time of the command will be associated as the
+    marker data for the automatically inserted checkpoints.
+  * ename:VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV
+    enables shader error reporting.
+--
+
+[open,refpage='VkDeviceDiagnosticsConfigFlagsNV',desc='Bitmask of VkDeviceDiagnosticsConfigFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkDeviceDiagnosticsConfigFlagsNV.adoc[]
+
+tname:VkDeviceDiagnosticsConfigFlagsNV is a bitmask type for setting a mask
+of zero or more elink:VkDeviceDiagnosticsConfigFlagBitsNV.
+--
+endif::VK_NV_device_diagnostics_config[]
+
+ifdef::VK_EXT_device_memory_report[]
+[open,refpage='VkDeviceDeviceMemoryReportCreateInfoEXT',desc='Register device memory report callbacks for a Vulkan device',type='structs']
+--
+To register callbacks for underlying device memory events of type
+elink:VkDeviceMemoryReportEventTypeEXT, add one or multiple
+slink:VkDeviceDeviceMemoryReportCreateInfoEXT structures to the pname:pNext
+chain of the slink:VkDeviceCreateInfo structure.
+
+include::{generated}/api/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is 0 and reserved for future use.
+  * pname:pfnUserCallback is the application callback function to call.
+  * pname:pUserData is user data to be passed to the callback.
+
+The callback may: be called from multiple threads simultaneously.
+
+The callback must: be called only once by the implementation when a
+elink:VkDeviceMemoryReportEventTypeEXT event occurs.
+
+[NOTE]
+.Note
+====
+The callback could be called from a background thread other than the thread
+calling the Vulkan commands.
+====
+
+include::{generated}/validity/structs/VkDeviceDeviceMemoryReportCreateInfoEXT.adoc[]
+--
+
+[open,refpage='PFN_vkDeviceMemoryReportCallbackEXT',desc='Application-defined device memory report callback function',type='funcpointers']
+--
+The prototype for the
+slink:VkDeviceDeviceMemoryReportCreateInfoEXT::pname:pfnUserCallback
+function implemented by the application is:
+
+include::{generated}/api/funcpointers/PFN_vkDeviceMemoryReportCallbackEXT.adoc[]
+
+  * pname:pCallbackData contains all the callback related data in the
+    slink:VkDeviceMemoryReportCallbackDataEXT structure.
+  * pname:pUserData is the user data provided when the
+    slink:VkDeviceDeviceMemoryReportCreateInfoEXT was created.
+
+The callback must: not make calls to any Vulkan commands.
+--
+
+[open,refpage='VkDeviceMemoryReportCallbackDataEXT',desc='Structure specifying parameters returned to the callback',type='structs']
+--
+The definition of sname:VkDeviceMemoryReportCallbackDataEXT is:
+
+include::{generated}/api/structs/VkDeviceMemoryReportCallbackDataEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is 0 and reserved for future use.
+  * pname:type is a elink:VkDeviceMemoryReportEventTypeEXT type specifying
+    the type of event reported in this
+    sname:VkDeviceMemoryReportCallbackDataEXT structure.
+  * pname:memoryObjectId is the unique id for the underlying memory object
+    as described below.
+  * pname:size is the size of the memory object in bytes.
+    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
+    pname:size is a valid basetype:VkDeviceSize value.
+    Otherwise, pname:size is undefined:.
+  * pname:objectType is a elink:VkObjectType value specifying the type of
+    the object associated with this device memory report event.
+    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT or
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
+    pname:objectType is a valid elink:VkObjectType enum.
+    Otherwise, pname:objectType is undefined:.
+  * pname:objectHandle is the object this device memory report event is
+    attributed to.
+    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT,
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT or
+    ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT,
+    pname:objectHandle is a valid Vulkan handle of the type associated with
+    pname:objectType as defined in the <<debugging-object-types,
+    `VkObjectType` and Vulkan Handle Relationship>> table.
+    Otherwise, pname:objectHandle is undefined:.
+  * pname:heapIndex describes which memory heap this device memory
+    allocation is made from.
+    If pname:type is ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT
+    or ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT,
+    pname:heapIndex corresponds to one of the valid heaps from the
+    slink:VkPhysicalDeviceMemoryProperties structure.
+    Otherwise, pname:heapIndex is undefined:.
+
+pname:memoryObjectId is used to avoid double-counting on the same memory
+object.
+
+If an internally-allocated device memory object or a slink:VkDeviceMemory
+cannot: be exported, pname:memoryObjectId must: be unique in the
+slink:VkDevice.
+
+If an internally-allocated device memory object or a slink:VkDeviceMemory
+supports being exported, pname:memoryObjectId must: be unique system wide.
+
+If an internal device memory object or a slink:VkDeviceMemory is backed by
+an imported external memory object, pname:memoryObjectId must: be unique
+system wide.
+
+ifdef::implementation-guide[]
+.Implementor's Note
+****
+If the heap backing an internally-allocated device memory cannot: be used to
+back slink:VkDeviceMemory, implementations can: advertise that heap with no
+types.
+****
+endif::implementation-guide[]
+
+[NOTE]
+.Note
+====
+This structure should only be considered valid during the lifetime of the
+triggered callback.
+
+For ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT and
+ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT events,
+pname:objectHandle usually will not yet exist when the application or tool
+receives the callback.
+pname:objectHandle will only exist when the create or allocate call that
+triggered the event returns, and if the allocation or import ends up failing
+pname:objectHandle will not ever exist.
+====
+
+include::{generated}/validity/structs/VkDeviceMemoryReportCallbackDataEXT.adoc[]
+--
+
+[open,refpage='VkDeviceMemoryReportFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDeviceMemoryReportFlagsEXT.adoc[]
+
+tname:VkDeviceMemoryReportFlagsEXT is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+[open,refpage='VkDeviceMemoryReportEventTypeEXT',desc='Events that can occur on a device memory object',type='enums']
+--
+Possible values of slink:VkDeviceMemoryReportCallbackDataEXT::pname:type,
+specifying event types which cause the device driver to call the callback,
+are:
+
+include::{generated}/api/enums/VkDeviceMemoryReportEventTypeEXT.adoc[]
+
+  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT specifies this
+    event corresponds to the allocation of an internal device memory object
+    or a slink:VkDeviceMemory.
+  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT specifies this event
+    corresponds to the deallocation of an internally-allocated device memory
+    object or a slink:VkDeviceMemory.
+  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT specifies this event
+    corresponds to the import of an external memory object.
+  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT specifies this
+    event is the release of an imported external memory object.
+  * ename:VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT specifies
+    this event corresponds to the failed allocation of an internal device
+    memory object or a slink:VkDeviceMemory.
+--
+endif::VK_EXT_device_memory_report[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+[open,refpage='VkDevicePrivateDataCreateInfo',desc='Reserve private data slots',type='structs',alias='VkDevicePrivateDataCreateInfoEXT']
+--
+To reserve private data storage slots, add a
+slink:VkDevicePrivateDataCreateInfo structure to the pname:pNext chain of
+the slink:VkDeviceCreateInfo structure.
+Reserving slots in this manner is not strictly necessary, but doing so may:
+improve performance.
+
+include::{generated}/api/structs/VkDevicePrivateDataCreateInfo.adoc[]
+
+ifdef::VK_EXT_private_data[]
+or the equivalent
+
+include::{generated}/api/structs/VkDevicePrivateDataCreateInfoEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:privateDataSlotRequestCount is the amount of slots to reserve.
+
+include::{generated}/validity/structs/VkDevicePrivateDataCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+
+ifdef::VKSC_VERSION_1_0[]
+
+[open,refpage='VkDeviceObjectReservationCreateInfo',desc='Request memory reservation',type='structs']
+--
+Data structures for objects are reserved by the implementation at device
+creation time.
+The application must: provide upper bounds on numbers of objects and other
+limits at device creation time.
+To reserve data structures for use by objects created from this device, add
+a slink:VkDeviceObjectReservationCreateInfo structure to the pname:pNext
+chain of the slink:VkDeviceCreateInfo structure.
+
+include::{generated}/api/structs/VkDeviceObjectReservationCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineCacheCreateInfoCount is the length of the
+    pname:pPipelineCacheCreateInfos array.
+  * pname:pPipelineCacheCreateInfos is a pointer to an array of
+    slink:VkPipelineCacheCreateInfo structures that contain the creation
+    information of the pipeline caches that can: be created on this device.
+  * pname:pipelinePoolSizeCount is the length of the
+    pname:pPipelinePoolSizes array.
+  * pname:pPipelinePoolSizes is a pointer to an array of
+    slink:VkPipelinePoolSize structures requesting memory be reserved for
+    pipelines of the specified sizes.
+  * pname:semaphoreRequestCount is the requested maximum number of
+    sname:VkSemaphore objects that can: exist at the same time.
+  * pname:commandBufferRequestCount is the requested maximum number of
+    sname:VkCommandBuffer objects that can: be reserved by all
+    sname:VkCommandPool objects.
+  * pname:fenceRequestCount is the requested maximum number of sname:VkFence
+    objects that can: exist at the same time.
+  * pname:deviceMemoryRequestCount is the requested maximum number of
+    sname:VkDeviceMemory objects that can: exist at the same time.
+  * pname:bufferRequestCount is the requested maximum number of
+    sname:VkBuffer objects that can: exist at the same time.
+  * pname:imageRequestCount is the requested maximum number of sname:VkImage
+    objects that can: exist at the same time.
+  * pname:eventRequestCount is the requested maximum number of sname:VkEvent
+    objects that can: exist at the same time.
+  * pname:queryPoolRequestCount is the requested maximum number of
+    sname:VkQueryPool objects that can: exist at the same time.
+  * pname:bufferViewRequestCount is the requested maximum number of
+    sname:VkBufferView objects that can: exist at the same time.
+  * pname:imageViewRequestCount is the requested maximum number of
+    sname:VkImageView objects that can: exist at the same time.
+  * pname:layeredImageViewRequestCount is the requested maximum number
+    sname:VkImageView objects created with
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount greater
+    than `1` that can: exist at the same time.
+  * pname:pipelineCacheRequestCount is the requested maximum number of
+    sname:VkPipelineCache objects that can: exist at the same time.
+  * pname:pipelineLayoutRequestCount is the requested maximum number of
+    sname:VkPipelineLayout objects that can: exist at the same time.
+  * pname:renderPassRequestCount is the requested maximum number of
+    sname:VkRenderPass objects that can: exist at the same time.
+  * pname:graphicsPipelineRequestCount is the requested maximum number of
+    graphics sname:VkPipeline objects that can: exist at the same time.
+  * pname:computePipelineRequestCount is the requested maximum number of
+    compute sname:VkPipeline objects that can: exist at the same time.
+  * pname:descriptorSetLayoutRequestCount is the requested maximum number of
+    sname:VkDescriptorSetLayout objects that can: exist at the same time.
+  * pname:samplerRequestCount is the requested maximum number of
+    sname:VkSampler objects that can: exist at the same time.
+  * pname:descriptorPoolRequestCount is the requested maximum number of
+    sname:VkDescriptorPool objects that can: exist at the same time.
+  * pname:descriptorSetRequestCount is the requested maximum number of
+    sname:VkDescriptorSet objects that can: exist at the same time.
+  * pname:framebufferRequestCount is the requested maximum number of
+    sname:VkFramebuffer objects that can: exist at the same time.
+  * pname:commandPoolRequestCount is the requested maximum number of
+    sname:VkCommandPool objects that can: exist at the same time.
+  * pname:samplerYcbcrConversionRequestCount is the requested maximum number
+    of sname:VkSamplerYcbcrConversion objects that can: exist at the same
+    time.
+  * pname:surfaceRequestCount is deprecated and implementations must: ignore
+    it.
+  * pname:swapchainRequestCount is the requested maximum number of
+    sname:VkSwapchainKHR objects that can: exist at the same time.
+  * pname:displayModeRequestCount is deprecated and implementations must:
+    ignore it.
+  * pname:subpassDescriptionRequestCount is the requested maximum sum of all
+    slink:VkRenderPassCreateInfo2::pname:subpassCount values across all
+    sname:VkRenderPass objects that can: exist at the same time.
+  * pname:attachmentDescriptionRequestCount is the requested maximum sum of
+    all slink:VkRenderPassCreateInfo2::pname:attachmentCount values across
+    all sname:VkRenderPass objects that can: exist at the same time.
+  * pname:descriptorSetLayoutBindingRequestCount is the requested maximum
+    sum of all slink:VkDescriptorSetLayoutCreateInfo::pname:bindingCount
+    values across all sname:VkDescriptorSetLayout objects that can: exist at
+    the same time.
+  * pname:descriptorSetLayoutBindingLimit is one greater than the maximum
+    value of slink:VkDescriptorSetLayoutBinding::pname:binding that can: be
+    used.
+  * pname:maxImageViewMipLevels is the maximum value of
+    slink:VkImageViewCreateInfo::pname:subresourceRange.levelCount that can:
+    be used.
+  * pname:maxImageViewArrayLayers is the maximum value of
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount that can:
+    be used.
+  * pname:maxLayeredImageViewMipLevels is the maximum value of
+    slink:VkImageViewCreateInfo::pname:subresourceRange.levelCount that can:
+    be used when
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount is
+    greater than `1`.
+  * pname:maxOcclusionQueriesPerPool is the requested maximum number of
+    ename:VK_QUERY_TYPE_OCCLUSION queries that can: exist at the same time
+    in a single query pool.
+  * pname:maxPipelineStatisticsQueriesPerPool is the requested maximum
+    number of ename:VK_QUERY_TYPE_PIPELINE_STATISTICS queries that can:
+    exist at the same time in a single query pool.
+  * pname:maxTimestampQueriesPerPool is the requested maximum number of
+    ename:VK_QUERY_TYPE_TIMESTAMP queries that can: exist at the same time
+    in a single query pool.
+  * pname:maxImmutableSamplersPerDescriptorSetLayout is the requested
+    maximum number of immutable samplers that can be used across all
+    bindings in a descriptor set layout.
+
+Multiple sname:VkDeviceObjectReservationCreateInfo structures can: be
+chained together.
+The maximum value from all instances of pname:maxImageViewMipLevels,
+pname:maxImageViewArrayLayers, pname:maxLayeredImageViewMipLevels,
+pname:descriptorSetLayoutBindingLimit, pname:maxOcclusionQueriesPerPool,
+pname:maxPipelineStatisticsQueriesPerPool, pname:maxTimestampQueriesPerPool,
+and pname:maxImmutableSamplersPerDescriptorSetLayout will be reserved.
+For the remaining members, the sum of the requested resources from all
+instances of sname:VkDeviceObjectReservationCreateInfo will be reserved.
+
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,
+pname:deviceDestroyFreesMemory>> is ename:VK_TRUE, the reserved memory is
+returned to the system when the device is destroyed, otherwise it may: not
+be returned to the system until the process is terminated.
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkDeviceObjectReservationCreateInfo <<SCID-4>>
+// end::scaddition[]
+endif::hidden[]
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceObjectReservationCreateInfo-maxImageViewArrayLayers-05014]]
+    pname:maxImageViewArrayLayers must: be less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers
+  * [[VUID-VkDeviceObjectReservationCreateInfo-maxImageViewMipLevels-05015]]
+    pname:maxImageViewMipLevels must: be less than or equal to the number of
+    levels in the complete mipmap chain based on the maximum of
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D,
+    pname:maxImageDimension2D, pname:maxImageDimension3D, and
+    pname:maxImageDimensionCube
+  * [[VUID-VkDeviceObjectReservationCreateInfo-maxLayeredImageViewMipLevels-05016]]
+    pname:maxLayeredImageViewMipLevels must: be less than or equal to the
+    number of levels in the complete mipmap chain based on
+    slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D,
+    pname:maxImageDimension2D, pname:maxImageDimension3D, and
+    pname:maxImageDimensionCube
+  * [[VUID-VkDeviceObjectReservationCreateInfo-subpassDescriptionRequestCount-05017]]
+    pname:subpassDescriptionRequestCount must: be less than or equal to
+    pname:renderPassRequestCount multiplied by
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxRenderPassSubpasses
+  * [[VUID-VkDeviceObjectReservationCreateInfo-attachmentDescriptionRequestCount-05018]]
+    pname:attachmentDescriptionRequestCount must: be less than or equal to
+    pname:renderPassRequestCount multiplied by
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:maxFramebufferAttachments
+****
+
+include::{generated}/validity/structs/VkDeviceObjectReservationCreateInfo.adoc[]
+--
+
+ifdef::VK_KHR_performance_query[]
+[open,refpage='VkPerformanceQueryReservationInfoKHR',desc='Request memory reservation',type='structs']
+--
+If the pname:pNext chain of slink:VkDeviceObjectReservationCreateInfo
+includes a slink:VkPerformanceQueryReservationInfoKHR structure, then the
+structure indicates upper bounds on the number of performance queries that
+can: exist at the same time in a query pool.
+
+The sname:VkPerformanceQueryReservationInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceQueryReservationInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxPerformanceQueriesPerPool is the requested maximum number of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR queries that can: exist at the
+    same time in a single query pool.
+
+If the sname:VkDeviceObjectReservationCreateInfo::pname:pNext chain does not
+include this structure, then pname:maxPerformanceQueriesPerPool defaults to
+`0`.
+
+Multiple sname:VkPerformanceQueryReservationInfoKHR structures can be
+chained together.
+The maximum value from all instances of pname:maxPerformanceQueriesPerPool
+will be reserved.
+
+ifdef::hidden[]
+// tag::scaddition[]
+ifdef::VK_KHR_performance_query[]
+  * slink:VkPerformanceQueryReservationInfoKHR <<SCID-4>>
+endif::VK_KHR_performance_query[]
+// end::scaddition[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkPerformanceQueryReservationInfoKHR.adoc[]
+--
+endif::VK_KHR_performance_query[]
+
+ifdef::VK_NV_external_sci_sync2[]
+[open,refpage='VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV',desc='Request memory reservation',type='structs']
+--
+If the pname:pNext chain of slink:VkDeviceObjectReservationCreateInfo
+includes a slink:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV
+structure, then the structure indicates the maximum number of
+slink:VkSemaphoreSciSyncPoolNV objects that can: exist at the same time.
+
+The sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphoreSciSyncPoolRequestCount is the requested maximum number
+    of slink:VkSemaphoreSciSyncPoolNV objects that can: exist at the same
+    time.
+
+If the sname:VkDeviceObjectReservationCreateInfo::pname:pNext chain does not
+include this structure, then pname:semaphoreSciSyncPoolRequestCount defaults
+to `0`.
+
+Multiple sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV
+structures can: be chained together.
+The sum of the pname:semaphoreSciSyncPoolRequestCount values from all
+instances of sname:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV will
+be reserved.
+
+include::{generated}/validity/structs/VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync2[]
+
+[open,refpage='VkPipelinePoolSize',desc='Request memory for pipelines',type='structs']
+--
+Memory for pipelines is reserved by the implementation at device creation
+time.
+The application specifies sizes to be reserved and a count for each size,
+and when a pipeline is created the application specifies which size to use.
+
+include::{generated}/api/structs/VkPipelinePoolSize.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:poolEntrySize is the size to reserve for each entry.
+  * pname:poolEntryCount is the number of entries to reserve.
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkPipelinePoolSize <<SCID-4>>
+// end::scaddition[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkPipelinePoolSize.adoc[]
+--
+
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_ARM_scheduling_controls[]
+The number of shader cores used by all the queues of a device can: be
+controlled by adding a sname:VkDeviceQueueShaderCoreControlCreateInfoARM
+structure to the pname:pNext chain of the slink:VkDeviceCreateInfo
+structure.
+endif::VK_ARM_scheduling_controls[]
+
+[[devsandqueues-use]]
+=== Device Use
+
+The following is a high-level list of sname:VkDevice uses along with
+references on where to find more information:
+
+  * Creation of queues.
+    See the <<devsandqueues-queues,Queues>> section below for further
+    details.
+  * Creation and tracking of various synchronization constructs.
+    See <<synchronization,Synchronization and Cache Control>> for further
+    details.
+  * Allocating, freeing, and managing memory.
+    See <<memory,Memory Allocation>> and <<resources,Resource Creation>> for
+    further details.
+  * Creation and destruction of command buffers and command buffer pools.
+    See <<commandbuffers,Command Buffers>> for further details.
+  * Creation, destruction, and management of graphics state.
+    See <<pipelines,Pipelines>> and <<descriptorsets,Resource Descriptors>>,
+    among others, for further details.
+
+
+[[devsandqueues-lost-device]]
+=== Lost Device
+
+A logical device may: become _lost_ for a number of implementation-specific
+reasons, indicating that pending and future command execution may: fail and
+cause resources and backing memory to become undefined:.
+
+ifdef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+<<fault-handling>> can be used by the implementation to provide more
+information on the cause of a device becoming _lost_.
+Allowing applications to take appropriate corrective behavior for the cause
+of the device lost.
+====
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+Typical reasons for device loss will include things like execution timing
+out (to prevent denial of service), power management events, platform
+resource management, implementation errors.
+
+Applications not adhering to <<fundamentals-validusage, valid usage>> may
+also result in device loss being reported, however this is not guaranteed.
+Even if device loss is reported, the system may be in an unrecoverable
+state, and further usage of the API is still considered invalid.
+====
+
+When this happens, certain commands will return ename:VK_ERROR_DEVICE_LOST.
+After any such event, the logical device is considered _lost_.
+It is not possible to reset the logical device to a non-lost state, however
+the lost state is specific to a logical device (sname:VkDevice), and the
+corresponding physical device (sname:VkPhysicalDevice) may: be otherwise
+unaffected.
+
+In some cases, the physical device may: also be lost, and attempting to
+create a new logical device will fail, returning ename:VK_ERROR_DEVICE_LOST.
+This is usually indicative of a problem with the underlying implementation,
+or its connection to the host.
+If the physical device has not been lost, and a new logical device is
+successfully created from that physical device, it must: be in the non-lost
+state.
+
+[NOTE]
+.Note
+====
+Whilst logical device loss may: be recoverable, in the case of physical
+device loss, it is unlikely that an application will be able to recover
+unless additional, unaffected physical devices exist on the system.
+The error is largely informational and intended only to inform the user that
+a platform issue has occurred, and should: be investigated further.
+For example, underlying hardware may: have developed a fault or become
+physically disconnected from the rest of the system.
+In many cases, physical device loss may: cause other more serious issues
+such as the operating system crashing; in which case it may: not be reported
+via the Vulkan API.
+====
+
+When a device is lost, its child objects are not implicitly destroyed and
+their handles are still valid.
+Those objects must: still be destroyed before their parents or the device
+can: be destroyed (see the <<fundamentals-objectmodel-lifetime,Object
+Lifetime>> section).
+The host address space corresponding to device memory mapped using
+flink:vkMapMemory is still valid, and host memory accesses to these mapped
+regions are still valid, but the contents are undefined:.
+It is still legal to call any API command on the device and child objects.
+
+Once a device is lost, command execution may: fail, and certain commands
+that return a elink:VkResult may: return ename:VK_ERROR_DEVICE_LOST.
+These commands can be identified by the inclusion of
+ename:VK_ERROR_DEVICE_LOST in the Return Codes section for each command.
+Commands that do not allow runtime errors must: still operate correctly for
+valid usage and, if applicable, return valid data.
+
+Commands that wait indefinitely for device execution (namely
+flink:vkDeviceWaitIdle, flink:vkQueueWaitIdle, flink:vkWaitForFences
+ifdef::VK_KHR_swapchain[]
+or flink:vkAcquireNextImageKHR
+endif::VK_KHR_swapchain[]
+with a maximum pname:timeout, and flink:vkGetQueryPoolResults with the
+ename:VK_QUERY_RESULT_WAIT_BIT bit set in pname:flags) must: return in
+finite time even in the case of a lost device, and return either
+ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
+For any command that may: return ename:VK_ERROR_DEVICE_LOST, for the purpose
+of determining whether a command buffer is in the
+<<commandbuffers-lifecycle, pending state>>, or whether resources are
+considered in-use by the device, a return value of
+ename:VK_ERROR_DEVICE_LOST is equivalent to ename:VK_SUCCESS.
+
+ifdef::VK_KHR_maintenance5[]
+If a device was created with the <<features-maintenance5,
+pname:maintenance5>> feature enabled, and any device command returns
+ename:VK_ERROR_DEVICE_LOST, then all device commands for which
+ename:VK_ERROR_DEVICE_LOST is a valid return value and which happen-after it
+on the same host thread must: return ename:VK_ERROR_DEVICE_LOST.
+
+Device commands executing on other threads must: begin returning
+ename:VK_ERROR_DEVICE_LOST within finite time.
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+The content of any external memory objects that have been exported from or
+imported to a lost device become undefined:.
+Objects on other logical devices or in other APIs which are associated with
+the same underlying memory resource as the external memory objects on the
+lost device are unaffected other than their content becoming undefined:.
+The layout of subresources of images on other logical devices that are bound
+to sname:VkDeviceMemory objects associated with the same underlying memory
+resources as external memory objects on the lost device becomes
+ename:VK_IMAGE_LAYOUT_UNDEFINED.
+
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+The state of sname:VkSemaphore objects on other logical devices created by
+<<synchronization-semaphores-importing,importing a semaphore payload>> with
+temporary permanence which was exported from the lost device is undefined:.
+The state of sname:VkSemaphore objects on other logical devices that
+permanently share a semaphore payload with a sname:VkSemaphore object on the
+lost device is undefined:, and remains undefined: following any subsequent
+signal operations.
+Implementations must: ensure pending and subsequently submitted wait
+operations on such semaphores behave as defined in
+<<synchronization-semaphores-waiting-state,Semaphore State Requirements For
+Wait Operations>> for external semaphores not in a valid state for a wait
+operation.
+
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+TODO (piman) - I do not think we are very clear about what "`in-use by the
+device`" means.
+====
+endif::editing-notes[]
+
+
+[[devsandqueues-destruction]]
+=== Device Destruction
+
+[open,refpage='vkDestroyDevice',desc='Destroy a logical device',type='protos']
+--
+To destroy a device, call:
+
+include::{generated}/api/protos/vkDestroyDevice.adoc[]
+
+  * pname:device is the logical device to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+To ensure that no work is active on the device, flink:vkDeviceWaitIdle can:
+be used to gate the destruction of the device.
+Prior to destroying a device, an application is responsible for
+destroying/freeing any Vulkan objects that were created using that device as
+the first parameter of the corresponding ftext:vkCreate* or
+ftext:vkAllocate* command.
+
+[NOTE]
+.Note
+====
+The lifetime of each of these objects is bound by the lifetime of the
+sname:VkDevice object.
+Therefore, to avoid resource leaks, it is critical that an application
+explicitly free all of these resources prior to calling
+fname:vkDestroyDevice.
+====
+
+ifdef::VKSC_VERSION_1_0[]
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,
+pname:deviceDestroyFreesMemory>> is ename:VK_TRUE, the reserved memory for
+child objects without explicit free or destroy commands is returned to the
+system when the device is destroyed, otherwise it may: not be returned to
+the system until the process is terminated.
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyDevice-device-05137]]
+    All child objects created on pname:device
+ifdef::VKSC_VERSION_1_0[]
+    , except those with no explicit <<fundamentals-objectmodel-no-destroy,
+    free or destroy command>>,
+endif::VKSC_VERSION_1_0[]
+    must: have been destroyed prior to destroying pname:device
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyDevice-device-00379]]
+    If sname:VkAllocationCallbacks were provided when pname:device was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyDevice-device-00380]]
+    If no sname:VkAllocationCallbacks were provided when pname:device was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyDevice.adoc[]
+--
+
+
+[[devsandqueues-queues]]
+== Queues
+
+
+[[devsandqueues-queueprops]]
+=== Queue Family Properties
+
+As discussed in the <<devsandqueues-physical-device-enumeration,Physical
+Device Enumeration>> section above, the
+flink:vkGetPhysicalDeviceQueueFamilyProperties command is used to retrieve
+details about the queue families and queues supported by a device.
+
+Each index in the pname:pQueueFamilyProperties array returned by
+flink:vkGetPhysicalDeviceQueueFamilyProperties describes a unique queue
+family on that physical device.
+These indices are used when creating queues, and they correspond directly
+with the pname:queueFamilyIndex that is passed to the flink:vkCreateDevice
+command via the slink:VkDeviceQueueCreateInfo structure as described in the
+<<devsandqueues-queue-creation,Queue Creation>> section below.
+
+Grouping of queue families within a physical device is
+implementation-dependent.
+
+[NOTE]
+.Note
+====
+The general expectation is that a physical device groups all queues of
+matching capabilities into a single family.
+However, while implementations should: do this, it is possible that a
+physical device may: return two separate queue families with the same
+capabilities.
+====
+
+Once an application has identified a physical device with the queue(s) that
+it desires to use, it will create those queues in conjunction with a logical
+device.
+This is described in the following section.
+
+
+[[devsandqueues-queue-creation]]
+=== Queue Creation
+
+[open,refpage='VkQueue',desc='Opaque handle to a queue object',type='handles']
+--
+Creating a logical device also creates the queues associated with that
+device.
+The queues to create are described by a set of slink:VkDeviceQueueCreateInfo
+structures that are passed to flink:vkCreateDevice in
+pname:pQueueCreateInfos.
+
+Queues are represented by sname:VkQueue handles:
+
+include::{generated}/api/handles/VkQueue.adoc[]
+--
+
+[open,refpage='VkDeviceQueueCreateInfo',desc='Structure specifying parameters of a newly created device queue',type='structs']
+--
+The sname:VkDeviceQueueCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceQueueCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifndef::VK_VERSION_1_1[]
+  * pname:flags is reserved for future use.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+  * pname:flags is a bitmask indicating behavior of the queues.
+endif::VK_VERSION_1_1[]
+  * pname:queueFamilyIndex is an unsigned integer indicating the index of
+    the queue family in which to create the queues on this device.
+    This index corresponds to the index of an element of the
+    pname:pQueueFamilyProperties array that was returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties.
+  * pname:queueCount is an unsigned integer specifying the number of queues
+    to create in the queue family indicated by pname:queueFamilyIndex, and
+    with the behavior specified by pname:flags.
+  * pname:pQueuePriorities is a pointer to an array of pname:queueCount
+    normalized floating point values, specifying priorities of work that
+    will be submitted to each created queue.
+    See <<devsandqueues-priority,Queue Priority>> for more information.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381]]
+    pname:queueFamilyIndex must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties
+  * [[VUID-VkDeviceQueueCreateInfo-queueCount-00382]]
+    pname:queueCount must: be less than or equal to the pname:queueCount
+    member of the sname:VkQueueFamilyProperties structure, as returned by
+    fname:vkGetPhysicalDeviceQueueFamilyProperties in the
+    pname:pQueueFamilyProperties[queueFamilyIndex]
+  * [[VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383]]
+    Each element of pname:pQueuePriorities must: be between `0.0` and `1.0`
+    inclusive
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkDeviceQueueCreateInfo-flags-02861]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, the ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of
+    pname:flags must: not be set
+  * [[VUID-VkDeviceQueueCreateInfo-flags-06449]]
+    If pname:flags includes ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,
+    pname:queueFamilyIndex must: be the index of a queue family that
+    includes the ename:VK_QUEUE_PROTECTED_BIT capability
+endif::VK_VERSION_1_1[]
+ifdef::VK_ARM_scheduling_controls[]
+  * [[VUID-VkDeviceQueueCreateInfo-pNext-09398]]
+    If the pname:pNext chain includes a
+    slink:VkDeviceQueueShaderCoreControlCreateInfoARM structure then
+    slink:VkPhysicalDeviceSchedulingControlsPropertiesARM::pname:schedulingControlsFlags
+    must: contain
+    ename:VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM.
+endif::VK_ARM_scheduling_controls[]
+****
+
+include::{generated}/validity/structs/VkDeviceQueueCreateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkDeviceQueueCreateFlagBits',desc='Bitmask specifying behavior of the queue',type='enums']
+--
+Bits which can: be set in slink:VkDeviceQueueCreateInfo::pname:flags,
+specifying usage behavior of a queue, are:
+
+include::{generated}/api/enums/VkDeviceQueueCreateFlagBits.adoc[]
+
+  * ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device
+    queue is a protected-capable queue.
+--
+endif::VK_VERSION_1_1[]
+
+[open,refpage='VkDeviceQueueCreateFlags',desc='Bitmask of VkDeviceQueueCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDeviceQueueCreateFlags.adoc[]
+
+ifndef::VK_VERSION_1_1[]
+tname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+tname:VkDeviceQueueCreateFlags is a bitmask type for setting a mask of zero
+or more elink:VkDeviceQueueCreateFlagBits.
+endif::VK_VERSION_1_1[]
+--
+
+ifdef::VK_EXT_global_priority,VK_KHR_global_priority[]
+[open,refpage='VkDeviceQueueGlobalPriorityCreateInfoKHR',desc='Specify a system wide priority',type='structs',alias='VkDeviceQueueGlobalPriorityCreateInfoEXT']
+--
+Queues can: be created with a system-wide priority by adding a
+sname:VkDeviceQueueGlobalPriorityCreateInfoKHR structure to the pname:pNext
+chain of slink:VkDeviceQueueCreateInfo.
+
+The sname:VkDeviceQueueGlobalPriorityCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoKHR.adoc[]
+
+ifdef::VK_EXT_global_priority[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.adoc[]
+endif::VK_EXT_global_priority[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:globalPriority is the system-wide priority associated to these
+    queues as specified by elink:VkQueueGlobalPriorityEXT
+
+Queues created without specifying
+sname:VkDeviceQueueGlobalPriorityCreateInfoKHR will default to
+ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR.
+
+include::{generated}/validity/structs/VkDeviceQueueGlobalPriorityCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkQueueGlobalPriorityKHR',desc='Values specifying a system-wide queue priority',type='enums',alias='VkQueueGlobalPriorityEXT']
+--
+Possible values of
+slink:VkDeviceQueueGlobalPriorityCreateInfoKHR::pname:globalPriority,
+specifying a system-wide priority level are:
+
+include::{generated}/api/enums/VkQueueGlobalPriorityKHR.adoc[]
+
+ifdef::VK_EXT_global_priority[]
+or the equivalent
+
+include::{generated}/api/enums/VkQueueGlobalPriorityEXT.adoc[]
+endif::VK_EXT_global_priority[]
+
+Priority values are sorted in ascending order.
+A comparison operation on the enum values can be used to determine the
+priority order.
+
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR is below the system default.
+    Useful for non-interactive tasks.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR is the system default
+    priority.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR is above the system default.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR is the highest priority.
+    Useful for critical tasks.
+--
+
+Queues with higher system priority may: be allotted more processing time
+than queues with lower priority.
+An implementation may: allow a higher-priority queue to starve a
+lower-priority queue until the higher-priority queue has no further commands
+to execute.
+
+Priorities imply no ordering or scheduling constraints.
+
+No specific guarantees are made about higher priority queues receiving more
+processing time or better quality of service than lower priority queues.
+
+The global priority level of a queue takes precedence over the per-process
+queue priority (slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
+
+Abuse of this feature may: result in starving the rest of the system of
+implementation resources.
+Therefore, the driver implementation may: deny requests to acquire a
+priority above the default priority
+(ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) if the caller does not have
+sufficient privileges.
+In this scenario ename:VK_ERROR_NOT_PERMITTED_KHR is returned.
+
+The driver implementation may: fail the queue allocation request if
+resources required to complete the operation have been exhausted (either by
+the same process or a different process).
+In this scenario ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+ifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+If the <<features-globalPriorityQuery, pname:globalPriorityQuery>> feature
+is enabled and the requested global priority is not reported via
+slink:VkQueueFamilyGlobalPriorityPropertiesKHR, the driver implementation
+must: fail the queue creation.
+In this scenario, ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+endif::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+endif::VK_EXT_global_priority,VK_KHR_global_priority[]
+
+ifdef::VK_ARM_scheduling_controls[]
+[open,refpage='VkDeviceQueueShaderCoreControlCreateInfoARM',desc='Control the number of shader cores used by queues',type='structs']
+--
+The number of shader cores used by a queue can: be controlled by adding a
+sname:VkDeviceQueueShaderCoreControlCreateInfoARM structure to the
+pname:pNext chain of slink:VkDeviceQueueCreateInfo structures.
+
+The sname:VkDeviceQueueShaderCoreControlCreateInfoARM structure is defined
+as:
+
+include::{generated}/api/structs/VkDeviceQueueShaderCoreControlCreateInfoARM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shaderCoreCount is the number of shader cores this queue uses.
+
+Queues created without specifying
+sname:VkDeviceQueueShaderCoreControlCreateInfoARM will default to using all
+the shader cores available.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceQueueShaderCoreControlCreateInfoARM-shaderCoreCount-09399]]
+    pname:shaderCoreCount must: be greater than 0 and less than or equal to
+    the total number of shader cores as reported via
+    slink:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM::pname:shaderCoreCount.
+****
+
+include::{generated}/validity/structs/VkDeviceQueueShaderCoreControlCreateInfoARM.adoc[]
+--
+endif::VK_ARM_scheduling_controls[]
+
+[open,refpage='vkGetDeviceQueue',desc='Get a queue handle from a device',type='protos']
+--
+To retrieve a handle to a slink:VkQueue object, call:
+
+include::{generated}/api/protos/vkGetDeviceQueue.adoc[]
+
+  * pname:device is the logical device that owns the queue.
+  * pname:queueFamilyIndex is the index of the queue family to which the
+    queue belongs.
+  * pname:queueIndex is the index within this queue family of the queue to
+    retrieve.
+  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
+    with the handle for the requested queue.
+
+ifdef::VK_VERSION_1_1[]
+fname:vkGetDeviceQueue must: only be used to get queues that were created
+with the pname:flags parameter of slink:VkDeviceQueueCreateInfo set to zero.
+To get queues that were created with a non-zero pname:flags parameter use
+flink:vkGetDeviceQueue2.
+endif::VK_VERSION_1_1[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceQueue-queueFamilyIndex-00384]]
+    pname:queueFamilyIndex must: be one of the queue family indices
+    specified when pname:device was created, via the
+    slink:VkDeviceQueueCreateInfo structure
+  * [[VUID-vkGetDeviceQueue-queueIndex-00385]]
+    pname:queueIndex must: be less than the value of
+    slink:VkDeviceQueueCreateInfo::pname:queueCount for the queue family
+    indicated by pname:queueFamilyIndex when pname:device was created
+  * [[VUID-vkGetDeviceQueue-flags-01841]]
+    slink:VkDeviceQueueCreateInfo::pname:flags must: have been set to zero
+    when pname:device was created
+****
+
+include::{generated}/validity/protos/vkGetDeviceQueue.adoc[]
+--
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='vkGetDeviceQueue2',desc='Get a queue handle from a device',type='protos']
+--
+To retrieve a handle to a slink:VkQueue object with specific
+tlink:VkDeviceQueueCreateFlags creation flags, call:
+
+include::{generated}/api/protos/vkGetDeviceQueue2.adoc[]
+
+  * pname:device is the logical device that owns the queue.
+  * pname:pQueueInfo is a pointer to a slink:VkDeviceQueueInfo2 structure,
+    describing parameters of the device queue to be retrieved.
+  * pname:pQueue is a pointer to a slink:VkQueue object that will be filled
+    with the handle for the requested queue.
+
+include::{generated}/validity/protos/vkGetDeviceQueue2.adoc[]
+--
+
+[open,refpage='VkDeviceQueueInfo2',desc='Structure specifying the parameters used for device queue creation',type='structs']
+--
+The sname:VkDeviceQueueInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkDeviceQueueInfo2.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+    The pname:pNext chain of sname:VkDeviceQueueInfo2 can: be used to
+    provide additional device queue parameters to fname:vkGetDeviceQueue2.
+  * pname:flags is a tlink:VkDeviceQueueCreateFlags value indicating the
+    flags used to create the device queue.
+  * pname:queueFamilyIndex is the index of the queue family to which the
+    queue belongs.
+  * pname:queueIndex is the index of the queue to retrieve from within the
+    set of queues that share both the queue family and flags specified.
+
+The queue returned by fname:vkGetDeviceQueue2 must: have the same
+pname:flags value from this structure as that used at device creation time
+in a slink:VkDeviceQueueCreateInfo structure.
+
+[NOTE]
+.Note
+====
+Normally, if you create both protected-capable and non-protected-capable
+queues with the same family, they are treated as separate lists of queues
+and pname:queueIndex is relative to the start of the list of queues
+specified by both pname:queueFamilyIndex and pname:flags.
+However, for historical reasons, some implementations may exhibit different
+behavior.
+These divergent implementations instead concatenate the lists of queues and
+treat pname:queueIndex as relative to the start of the first list of queues
+with the given pname:queueFamilyIndex.
+This only matters in cases where an application has created both
+protected-capable and non-protected-capable queues from the same queue
+family.
+
+For such divergent implementations, the maximum value of pname:queueIndex is
+equal to the sum of slink:VkDeviceQueueCreateInfo::pname:queueCount minus
+one, for all slink:VkDeviceQueueCreateInfo structures that share a common
+pname:queueFamilyIndex.
+
+Such implementations will return `NULL` for either the protected or
+unprotected queues when calling `vkGetDeviceQueue2` with pname:queueIndex in
+the range zero to slink:VkDeviceQueueCreateInfo::pname:queueCount minus one.
+In cases where these implementations returned `NULL`, the corresponding
+queues are instead located in the extended range described in the preceding
+two paragraphs.
+
+This behaviour will not be observed on any driver that has passed Vulkan
+conformance test suite version 1.3.3.0, or any subsequent version.
+This information can be found by querying
+sname:VkPhysicalDeviceDriverProperties::pname:conformanceVersion.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842]]
+    pname:queueFamilyIndex must: be one of the queue family indices
+    specified when pname:device was created, via the
+    slink:VkDeviceQueueCreateInfo structure
+  * [[VUID-VkDeviceQueueInfo2-flags-06225]]
+    pname:flags must: be equal to slink:VkDeviceQueueCreateInfo::pname:flags
+    for a slink:VkDeviceQueueCreateInfo structure for the queue family
+    indicated by pname:queueFamilyIndex when pname:device was created
+  * [[VUID-VkDeviceQueueInfo2-queueIndex-01843]]
+    pname:queueIndex must: be less than
+    slink:VkDeviceQueueCreateInfo::pname:queueCount for the corresponding
+    queue family and flags indicated by pname:queueFamilyIndex and
+    pname:flags when pname:device was created
+****
+
+include::{generated}/validity/structs/VkDeviceQueueInfo2.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+
+[[devsandqueues-index]]
+=== Queue Family Index
+
+The queue family index is used in multiple places in Vulkan in order to tie
+operations to a specific family of queues.
+
+When retrieving a handle to the queue via fname:vkGetDeviceQueue, the queue
+family index is used to select which queue family to retrieve the
+sname:VkQueue handle from as described in the previous section.
+
+When creating a sname:VkCommandPool object (see
+<<commandbuffers-pools,Command Pools>>), a queue family index is specified
+in the slink:VkCommandPoolCreateInfo structure.
+Command buffers from this pool can: only be submitted on queues
+corresponding to this queue family.
+
+When creating sname:VkImage (see <<resources-images,Images>>) and
+sname:VkBuffer (see <<resources-buffers,Buffers>>) resources, a set of queue
+families is included in the slink:VkImageCreateInfo and
+slink:VkBufferCreateInfo structures to specify the queue families that can:
+access the resource.
+
+When inserting a slink:VkBufferMemoryBarrier or slink:VkImageMemoryBarrier
+(see <<synchronization-pipeline-barriers>>), a source and destination queue
+family index is specified to allow the ownership of a buffer or image to be
+transferred from one queue family to another.
+See the <<resources-sharing,Resource Sharing>> section for details.
+
+
+[[devsandqueues-priority]]
+=== Queue Priority
+
+Each queue is assigned a priority, as set in the
+slink:VkDeviceQueueCreateInfo structures when creating the device.
+The priority of each queue is a normalized floating point value between 0.0
+and 1.0, which is then translated to a discrete priority level by the
+implementation.
+Higher values indicate a higher priority, with 0.0 being the lowest priority
+and 1.0 being the highest.
+
+Within the same device, queues with higher priority may: be allotted more
+processing time than queues with lower priority.
+The implementation makes no guarantees with regards to ordering or
+scheduling among queues with the same priority, other than the constraints
+defined by any <<synchronization, explicit synchronization primitives>>.
+The implementation makes no guarantees with regards to queues across
+different devices.
+
+An implementation may: allow a higher-priority queue to starve a
+lower-priority queue on the same sname:VkDevice until the higher-priority
+queue has no further commands to execute.
+The relationship of queue priorities must: not cause queues on one
+sname:VkDevice to starve queues on another sname:VkDevice.
+
+No specific guarantees are made about higher priority queues receiving more
+processing time or better quality of service than lower priority queues.
+
+
+[[devsandqueues-submission]]
+=== Queue Submission
+
+Work is submitted to a queue via _queue submission_ commands such as
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkQueueSubmit2 or
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkQueueSubmit.
+Queue submission commands define a set of _queue operations_ to be executed
+by the underlying physical device, including synchronization with semaphores
+and fences.
+
+Submission commands take as parameters a target queue, zero or more
+_batches_ of work, and an optional: fence to signal upon completion.
+Each batch consists of three distinct parts:
+
+  . Zero or more semaphores to wait on before execution of the rest of the
+    batch.
+  ** If present, these describe a <<synchronization-semaphores-waiting,
+     semaphore wait operation>>.
+  . Zero or more work items to execute.
+  ** If present, these describe a _queue operation_ matching the work
+     described.
+  . Zero or more semaphores to signal upon completion of the work items.
+  ** If present, these describe a <<synchronization-semaphores-signaling,
+     semaphore signal operation>>.
+
+If a fence is present in a queue submission, it describes a
+<<synchronization-fences-signaling, fence signal operation>>.
+
+All work described by a queue submission command must: be submitted to the
+queue before the command returns.
+
+
+ifndef::VKSC_VERSION_1_0[]
+[[devsandqueues-sparsebinding]]
+==== Sparse Memory Binding
+
+In Vulkan it is possible to sparsely bind memory to buffers and images as
+described in the <<sparsememory,Sparse Resource>> chapter.
+Sparse memory binding is a queue operation.
+A queue whose flags include the ename:VK_QUEUE_SPARSE_BINDING_BIT must: be
+able to support the mapping of a virtual address to a physical address on
+the device.
+This causes an update to the page table mappings on the device.
+This update must: be synchronized on a queue to avoid corrupting page table
+mappings during execution of graphics commands.
+By binding the sparse memory resources on queues, all commands that are
+dependent on the updated bindings are synchronized to only execute after the
+binding is updated.
+See the <<synchronization,Synchronization and Cache Control>> chapter for
+how this synchronization is accomplished.
+
+endif::VKSC_VERSION_1_0[]
+
+[[devsandqueues-queuedestruction]]
+=== Queue Destruction
+
+Queues are created along with a logical device during fname:vkCreateDevice.
+All queues associated with a logical device are destroyed when
+fname:vkDestroyDevice is called on that device.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/dispatch.adoc b/codegen/vulkan/vulkan-docs-next/chapters/dispatch.adoc
new file mode 100644
index 0000000..04f9c15
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/dispatch.adoc
@@ -0,0 +1,233 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[dispatch]]
+= Dispatching Commands
+
+_Dispatching commands_ (commands with ftext:Dispatch in the name) provoke
+work in a compute pipeline.
+Dispatching commands are recorded into a command buffer and when executed by
+a queue, will produce work which executes according to the bound compute
+pipeline.
+A compute pipeline must: be bound to a command buffer before any dispatching
+commands are recorded in that command buffer.
+
+[open,refpage='vkCmdDispatch',desc='Dispatch compute work items',type='protos']
+--
+:refpage: vkCmdDispatch
+
+To record a dispatch, call:
+
+include::{generated}/api/protos/vkCmdDispatch.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:groupCountX is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:groupCountY is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
+    dimension.
+
+When the command is executed, a global workgroup consisting of
+[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
+local workgroups is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+  * [[VUID-vkCmdDispatch-groupCountX-00386]]
+    pname:groupCountX must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * [[VUID-vkCmdDispatch-groupCountY-00387]]
+    pname:groupCountY must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * [[VUID-vkCmdDispatch-groupCountZ-00388]]
+    pname:groupCountZ must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+****
+
+include::{generated}/validity/protos/vkCmdDispatch.adoc[]
+--
+
+[open,refpage='vkCmdDispatchIndirect',desc='Dispatch compute work items with indirect parameters',type='protos']
+--
+:refpage: vkCmdDispatchIndirect
+
+To record an indirect dispatching command, call:
+
+include::{generated}/api/protos/vkCmdDispatchIndirect.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:buffer is the buffer containing dispatch parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+
+fname:vkCmdDispatchIndirect behaves similarly to flink:vkCmdDispatch except
+that the parameters are read by the device from a buffer during execution.
+The parameters of the dispatch are encoded in a
+slink:VkDispatchIndirectCommand structure taken from pname:buffer starting
+at pname:offset.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+  * [[VUID-vkCmdDispatchIndirect-offset-00407]]
+    The sum of pname:offset and the size of sname:VkDispatchIndirectCommand
+    must: be less than or equal to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdDispatchIndirect.adoc[]
+--
+
+[open,refpage='VkDispatchIndirectCommand',desc='Structure specifying a indirect dispatching command',type='structs',xrefs='vkCmdDispatchIndirect']
+--
+The sname:VkDispatchIndirectCommand structure is defined as:
+
+include::{generated}/api/structs/VkDispatchIndirectCommand.adoc[]
+
+  * pname:x is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:y is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:z is the number of local workgroups to dispatch in the Z
+    dimension.
+
+The members of sname:VkDispatchIndirectCommand have the same meaning as the
+corresponding parameters of flink:vkCmdDispatch.
+
+.Valid Usage
+****
+  * [[VUID-VkDispatchIndirectCommand-x-00417]]
+    pname:x must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * [[VUID-VkDispatchIndirectCommand-y-00418]]
+    pname:y must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * [[VUID-VkDispatchIndirectCommand-z-00419]]
+    pname:z must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+****
+
+include::{generated}/validity/structs/VkDispatchIndirectCommand.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='vkCmdDispatchBase',desc='Dispatch compute work items with non-zero base values for the workgroup IDs',type='protos']
+--
+:refpage: vkCmdDispatchBase
+
+To record a dispatch using non-zero base values for the components of
+code:WorkgroupId, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkCmdDispatchBase.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
+
+ifdef::VK_KHR_device_group[]
+include::{generated}/api/protos/vkCmdDispatchBaseKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:baseGroupX is the start value for the X component of
+    code:WorkgroupId.
+  * pname:baseGroupY is the start value for the Y component of
+    code:WorkgroupId.
+  * pname:baseGroupZ is the start value for the Z component of
+    code:WorkgroupId.
+  * pname:groupCountX is the number of local workgroups to dispatch in the X
+    dimension.
+  * pname:groupCountY is the number of local workgroups to dispatch in the Y
+    dimension.
+  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
+    dimension.
+
+When the command is executed, a global workgroup consisting of
+[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
+local workgroups is assembled, with code:WorkgroupId values ranging from
+[eq]#[ptext:baseGroup*, ptext:baseGroup* {plus} ptext:groupCount*)# in each
+component.
+flink:vkCmdDispatch is equivalent to
+`vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ)`.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+  * [[VUID-vkCmdDispatchBase-baseGroupX-00421]]
+    pname:baseGroupX must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * [[VUID-vkCmdDispatchBase-baseGroupX-00422]]
+    pname:baseGroupY must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * [[VUID-vkCmdDispatchBase-baseGroupZ-00423]]
+    pname:baseGroupZ must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+  * [[VUID-vkCmdDispatchBase-groupCountX-00424]]
+    pname:groupCountX must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] minus
+    pname:baseGroupX
+  * [[VUID-vkCmdDispatchBase-groupCountY-00425]]
+    pname:groupCountY must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] minus
+    pname:baseGroupY
+  * [[VUID-vkCmdDispatchBase-groupCountZ-00426]]
+    pname:groupCountZ must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] minus
+    pname:baseGroupZ
+  * [[VUID-vkCmdDispatchBase-baseGroupX-00427]]
+    If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
+    not zero, then the bound compute pipeline must: have been created with
+    the ename:VK_PIPELINE_CREATE_DISPATCH_BASE flag
+****
+
+include::{generated}/validity/protos/vkCmdDispatchBase.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+[open,refpage='vkCmdSubpassShadingHUAWEI',desc='Dispatch compute work items',type='protos']
+--
+:refpage: vkCmdSubpassShadingHUAWEI
+
+A subpass shading dispatches a compute pipeline work with the work dimension
+of render area of the calling subpass and work groups are partitioned by
+specified work group size.
+Subpass operations like subpassLoad and subpassLoadMS are allowed to be
+used.
+
+To record a subpass shading, call:
+
+include::{generated}/api/protos/vkCmdSubpassShadingHUAWEI.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+
+When the command is executed, a global workgroup consisting of ceil (render
+area size / local workgroup size) local workgroups is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
+  * [[VUID-vkCmdSubpassShadingHUAWEI-None-04931]]
+    This command must be called in a subpass with bind point
+    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
+    No draw commands can be called in the same subpass.
+    Only one flink:vkCmdSubpassShadingHUAWEI command can be called in a
+    subpass
+****
+
+include::{generated}/validity/protos/vkCmdSubpassShadingHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_NV_cuda_kernel_launch[]
+include::{chapters}/VK_NV_cuda_kernel_launch/dispatch.adoc[]
+endif::VK_NV_cuda_kernel_launch[]
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/drawing.adoc b/codegen/vulkan/vulkan-docs-next/chapters/drawing.adoc
new file mode 100644
index 0000000..414b13f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/drawing.adoc
@@ -0,0 +1,1754 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[drawing]]
+= Drawing Commands
+
+_Drawing commands_ (commands with ftext:Draw in the name) provoke work in a
+graphics pipeline.
+Drawing commands are recorded into a command buffer and when executed by a
+queue, will produce work which executes according to the bound graphics
+ifndef::VK_EXT_shader_object[pipeline.]
+ifdef::VK_EXT_shader_object[]
+pipeline, or if the <<features-shaderObject, pname:shaderObject>> feature is
+enabled, any <<shaders-objects, shader objects>> bound to graphics stages.
+endif::VK_EXT_shader_object[]
+A graphics pipeline
+ifdef::VK_EXT_shader_object[]
+or a combination of one or more graphics shader objects
+endif::VK_EXT_shader_object[]
+must: be bound to a command buffer before any drawing commands are recorded
+in that command buffer.
+
+[open,refpage='VkPipelineInputAssemblyStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline input assembly state',type='structs']
+--
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Drawing can be achieved in two modes:
+
+  * <<drawing-mesh-shading,Programmable Mesh Shading>>, the mesh shader
+    assembles primitives, or
+  * <<drawing-primitive-shading,Programmable Primitive Shading>>, the input
+    primitives are assembled as follows.
+
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+Each draw is made up of zero or more vertices and zero or more instances,
+which are processed by the device and result in the assembly of primitives.
+Primitives are assembled according to the pname:pInputAssemblyState member
+of the slink:VkGraphicsPipelineCreateInfo structure, which is of type
+sname:VkPipelineInputAssemblyStateCreateInfo:
+
+include::{generated}/api/structs/VkPipelineInputAssemblyStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:topology is a elink:VkPrimitiveTopology defining the primitive
+    topology, as described below.
+  * pname:primitiveRestartEnable controls whether a special vertex index
+    value is treated as restarting the assembly of primitives.
+    This enable only applies to indexed draws (flink:vkCmdDrawIndexed,
+ifdef::VK_EXT_multi_draw[]
+    flink:vkCmdDrawMultiIndexedEXT,
+endif::VK_EXT_multi_draw[]
+    and flink:vkCmdDrawIndexedIndirect), and the special index value is
+    either 0xFFFFFFFF when the pname:indexType parameter of
+ifdef::VK_KHR_maintenance5[fname:vkCmdBindIndexBuffer2KHR or]
+    fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32,
+ifdef::VK_EXT_index_type_uint8[]
+    0xFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT8_EXT,
+endif::VK_EXT_index_type_uint8[]
+    or 0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16.
+ifndef::VK_EXT_primitive_topology_list_restart[]
+    Primitive restart is not allowed for "`list`" topologies.
+endif::VK_EXT_primitive_topology_list_restart[]
+ifdef::VK_EXT_primitive_topology_list_restart[]
+    Primitive restart is not allowed for "`list`" topologies, unless one of
+    the features <<features-primitiveTopologyPatchListRestart,
+    pname:primitiveTopologyPatchListRestart>> (for
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) or
+    <<features-primitiveTopologyListRestart,
+    pname:primitiveTopologyListRestart>> (for all other list topologies) is
+    enabled.
+endif::VK_EXT_primitive_topology_list_restart[]
+
+Restarting the assembly of primitives discards the most recent index values
+if those elements formed an incomplete primitive, and restarts the primitive
+assembly using the subsequent indices, but only assembling the immediately
+following element through the end of the originally specified elements.
+The primitive restart index value comparison is performed before adding the
+pname:vertexOffset value to the index value.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252]]
+    If
+ifdef::VK_EXT_primitive_topology_list_restart[]
+    the <<features-primitiveTopologyListRestart,
+    pname:primitiveTopologyListRestart>> feature is not enabled, and
+endif::VK_EXT_primitive_topology_list_restart[]
+    pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
+    pname:primitiveRestartEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253]]
+    If
+ifdef::VK_EXT_primitive_topology_list_restart[]
+    the <<features-primitiveTopologyPatchListRestart,
+    pname:primitiveTopologyPatchListRestart>> feature is not enabled, and
+endif::VK_EXT_primitive_topology_list_restart[]
+    pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
+    pname:primitiveRestartEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:topology must: not be any of
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:topology must: not be
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans
+    is ename:VK_FALSE, pname:topology must: not be
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkPipelineInputAssemblyStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineInputAssemblyStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineInputAssemblyStateCreateFlags.adoc[]
+
+tname:VkPipelineInputAssemblyStateCreateFlags is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetPrimitiveRestartEnable',desc='Set primitive assembly restart state dynamically for a command buffer',type='protos',alias='vkCmdSetPrimitiveRestartEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically control>> whether a special vertex
+index value is treated as restarting the assembly of primitives, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetPrimitiveRestartEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetPrimitiveRestartEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:primitiveRestartEnable controls whether a special vertex index
+    value is treated as restarting the assembly of primitives.
+    It behaves in the same way as
+    sname:VkPipelineInputAssemblyStateCreateInfo::pname:primitiveRestartEnable
+
+This command sets the primitive restart enable for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+Otherwise, this state is specified by the
+slink:VkPipelineInputAssemblyStateCreateInfo::pname:primitiveRestartEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetPrimitiveRestartEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state2_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetPrimitiveRestartEnable.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+
+[[drawing-primitive-topologies]]
+== Primitive Topologies
+
+_Primitive topology_ determines how consecutive vertices are organized into
+primitives, and determines the type of primitive that is used at the
+beginning of the graphics pipeline.
+The effective topology for later stages of the pipeline is altered by
+tessellation or geometry shading (if either is in use) and depends on the
+execution modes of those shaders.
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+In the case of mesh shading the only effective topology is defined by the
+execution mode of the mesh shader.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+[open,refpage='VkPrimitiveTopology',desc='Supported primitive topologies',type='enums']
+--
+The primitive topologies defined by elink:VkPrimitiveTopology are:
+
+include::{generated}/api/enums/VkPrimitiveTopology.adoc[]
+
+  * ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST specifies a series of
+    <<drawing-point-lists,separate point primitives>>.
+  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST specifies a series of
+    <<drawing-line-lists,separate line primitives>>.
+  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP specifies a series of
+    <<drawing-line-strips,connected line primitives>> with consecutive lines
+    sharing a vertex.
+  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST specifies a series of
+    <<drawing-triangle-lists,separate triangle primitives>>.
+  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP specifies a series of
+    <<drawing-triangle-strips,connected triangle primitives>> with
+    consecutive triangles sharing an edge.
+  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN specifies a series of
+    <<drawing-triangle-fans,connected triangle primitives>> with all
+    triangles sharing a common vertex.
+ifdef::VK_KHR_portability_subset[]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans
+    is ename:VK_FALSE, then triangle fans are not supported by the
+    implementation, and ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN must: not
+    be used.
+endif::VK_KHR_portability_subset[]
+  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY specifies a series
+    of <<drawing-line-lists-with-adjacency,separate line primitives with
+    adjacency>>.
+  * ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY specifies a series
+    of <<drawing-line-strips-with-adjacency,connected line primitives with
+    adjacency>>, with consecutive primitives sharing three vertices.
+  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY specifies a
+    series of <<drawing-triangle-lists-with-adjacency,separate triangle
+    primitives with adjacency>>.
+  * ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY specifies
+    <<drawing-triangle-strips-with-adjacency,connected triangle primitives
+    with adjacency>>, with consecutive triangles sharing an edge.
+  * ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST specifies
+    <<drawing-patch-lists,separate patch primitives>>.
+
+Each primitive topology, and its construction from a list of vertices, is
+described in detail below with a supporting diagram, according to the
+following key:
+
+[cols="1,2,9"]
+|====
+^.^| image:{images}/primitive_topology_key_vertex.svg[pdfwidth=6pt,align="center",opts="{imageopts}"]
+.^| Vertex
+| A point in 3-dimensional space.
+  Positions chosen within the diagrams are arbitrary and for
+  illustration only.
+
+^.^| image:{images}/primitive_topology_key_vertex_number.svg[pdfwidth=6pt,align="center",opts="{imageopts}"]
+.^| Vertex Number
+| Sequence position of a vertex within the provided vertex data.
+
+^.^| image:{images}/primitive_topology_key_provoking_vertex.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
+.^| Provoking Vertex
+| Provoking vertex within the main primitive.
+  The tail is angled towards the relevant primitive.
+  Used in <<vertexpostproc-flatshading, flat shading>>.
+
+^.^| image:{images}/primitive_topology_key_edge.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
+.^| Primitive Edge
+| An edge connecting the points of a main primitive.
+
+^.^| image:{images}/primitive_topology_key_adjacency_edge.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
+.^| Adjacency Edge
+| Points connected by these lines do not contribute to a main primitive,
+  and are only accessible in a <<geometry,geometry shader>>.
+
+^.^| image:{images}/primitive_topology_key_winding_order.svg[pdfwidth=30pt,align="center",opts="{imageopts}"]
+.^| Winding Order
+| The relative order in which vertices are defined within a primitive,
+  used in the <<primsrast-polygons-basic,facing determination>>.
+  This ordering has no specific start or end point.
+|====
+
+The diagrams are supported with mathematical definitions where the vertices
+([eq]#v#) and primitives ([eq]#p#) are numbered starting from [eq]#0#;
+[eq]#v~0~# is the first vertex in the provided data and [eq]#p~0~# is the
+first primitive in the set of primitives defined by the vertices and
+topology.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetPrimitiveTopology',desc='Set primitive topology state dynamically for a command buffer',type='protos',alias='vkCmdSetPrimitiveTopologyEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> primitive topology, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetPrimitiveTopology.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetPrimitiveTopologyEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:primitiveTopology specifies the primitive topology to use for
+    drawing.
+
+This command sets the primitive topology for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetPrimitiveTopology
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetPrimitiveTopology.adoc[]
+--
+
+
+[[drawing-primitive-topology-class]]
+=== Topology Class
+
+The primitive topologies are grouped into the following topology classes:
+
+[[topology-classes]]
+.Topology classes
+[options="header"]
+|===
+| Topology Class  | Primitive Topology
+| Point           | ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST
+| Line            | ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
+                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
+                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
+                    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
+| Triangle        | ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
+                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
+                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
+                    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
+| Patch           | ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+|===
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+
+[[drawing-point-lists]]
+=== Point Lists
+
+When the topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, each
+consecutive vertex defines a single point primitive, according to the
+equation:
+
+  {empty}:: [eq]#p~i~ = {v~i~}#
+
+As there is only one vertex, that vertex is the provoking vertex.
+The number of primitives generated is equal to [eq]#pname:vertexCount#.
+
+image::{images}/primitive_topology_point_list.svg[align="center",opts="{imageopts}"]
+
+
+[[drawing-line-lists]]
+=== Line Lists
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, each
+consecutive pair of vertices defines a single line primitive, according to
+the equation:
+
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+1~}#
+
+The number of primitives generated is equal to
+[eq]#{lfloor}pname:vertexCount/2{rfloor}#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~2i~#.
+
+image::{images}/primitive_topology_line_list.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~2i+1~#.
+
+image::{images}/primitive_topology_line_list_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-line-strips]]
+=== Line Strips
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, one
+line primitive is defined by each vertex and the following vertex, according
+to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+The number of primitives generated is equal to
+[eq]#max(0,pname:vertexCount-1)#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~i~#.
+
+image::{images}/primitive_topology_line_strip.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~i+1~#.
+
+image::{images}/primitive_topology_line_strip_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-triangle-lists]]
+=== Triangle Lists
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+each consecutive set of three vertices defines a single triangle primitive,
+according to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~3i~, v~3i+1~, v~3i+2~}#
+
+The number of primitives generated is equal to
+[eq]#{lfloor}pname:vertexCount/3{rfloor}#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~3i~#.
+
+image::{images}/primitive_topology_triangle_list.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~3i+2~#.
+
+image::{images}/primitive_topology_triangle_list_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-triangle-strips]]
+=== Triangle Strips
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
+one triangle primitive is defined by each vertex and the two vertices that
+follow it, according to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~i~, v~i+(1+i%2)~, v~i+(2-i%2)~}#
+
+The number of primitives generated is equal to
+[eq]#max(0,pname:vertexCount-2)#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~i~#.
+
+image::{images}/primitive_topology_triangle_strip.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~i+2~#.
+
+image::{images}/primitive_topology_triangle_strip_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+[NOTE]
+.Note
+====
+The ordering of the vertices in each successive triangle is reversed, so
+that the winding order is consistent throughout the strip.
+====
+
+
+[[drawing-triangle-fans]]
+=== Triangle Fans
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
+triangle primitives are defined around a shared common vertex, according to
+the equation:
+
+  {empty}:: [eq]#p~i~ = {v~i+1~, v~i+2~, v~0~}#
+
+The number of primitives generated is equal to
+[eq]#max(0,pname:vertexCount-2)#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~i+1~#.
+
+image::{images}/primitive_topology_triangle_fan.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~i+2~#.
+
+image::{images}/primitive_topology_triangle_fan_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+ifdef::VK_KHR_portability_subset[]
+[NOTE]
+.Note
+====
+If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:triangleFans is
+ename:VK_FALSE, then triangle fans are not supported by the implementation,
+and ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN must: not be used.
+====
+endif::VK_KHR_portability_subset[]
+
+
+[[drawing-line-lists-with-adjacency]]
+=== Line Lists With Adjacency
+
+When the primitive topology is
+ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, each consecutive set
+of four vertices defines a single line primitive with adjacency, according
+to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~4i~, v~4i+1~, v~4i+2~,v~4i+3~}#
+
+A line primitive is described by the second and third vertices of the total
+primitive, with the remaining two vertices only accessible in a
+<<geometry,geometry shader>>.
+
+The number of primitives generated is equal to
+[eq]#{lfloor}pname:vertexCount/4{rfloor}#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~4i+1~#.
+
+image::{images}/primitive_topology_line_list_with_adjacency.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~4i+2~#.
+
+image::{images}/primitive_topology_line_list_with_adjacency_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-line-strips-with-adjacency]]
+=== Line Strips With Adjacency
+
+When the primitive topology is
+ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, one line primitive
+with adjacency is defined by each vertex and the following vertex, according
+to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~i~, v~i+1~, v~i+2~, v~i+3~}#
+
+A line primitive is described by the second and third vertices of the total
+primitive, with the remaining two vertices only accessible in a
+<<geometry,geometry shader>>.
+
+The number of primitives generated is equal to
+[eq]#max(0,pname:vertexCount-3)#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~i+1~#.
+
+image::{images}/primitive_topology_line_strip_with_adjacency.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~i+2~#.
+
+image::{images}/primitive_topology_line_strip_with_adjacency_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-triangle-lists-with-adjacency]]
+=== Triangle Lists With Adjacency
+
+When the primitive topology is
+ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, each consecutive
+set of six vertices defines a single triangle primitive with adjacency,
+according to the equations:
+
+  {empty}:: [eq]#p~i~ = {v~6i~, v~6i+1~, v~6i+2~, v~6i+3~, v~6i+4~,
+            v~6i+5~}#
+
+A triangle primitive is described by the first, third, and fifth vertices of
+the total primitive, with the remaining three vertices only accessible in a
+<<geometry,geometry shader>>.
+
+The number of primitives generated is equal to
+[eq]#{lfloor}pname:vertexCount/6{rfloor}#.
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is [eq]#v~6i~#.
+
+image::{images}/primitive_topology_triangle_list_with_adjacency.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is [eq]#v~6i+4~#.
+
+image::{images}/primitive_topology_triangle_list_with_adjacency_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-triangle-strips-with-adjacency]]
+=== Triangle Strips With Adjacency
+
+When the primitive topology is
+ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, one triangle
+primitive with adjacency is defined by each vertex and the following 5
+vertices.
+
+The number of primitives generated, [eq]#n#, is equal to [eq]#{lfloor}max(0,
+pname:vertexCount - 4)/2{rfloor}#.
+
+If [eq]#n=1#, the primitive is defined as:
+
+  {empty}:: [eq]#p = {v~0~, v~1~, v~2~, v~5~, v~4~, v~3~}#
+
+If [eq]#n>1#, the total primitive consists of different vertices according
+to where it is in the strip:
+
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+1~, v~2i+2~, v~2i+6~, v~2i+4~,
+            v~2i+3~}# when [eq]#i=0#
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+3~, v~2i+4~, v~2i+6~, v~2i+2~,
+            v~2i-2~}# when [eq]#i>0#, [eq]#i<n-1#, and [eq]#i%2=1#
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i-2~, v~2i+2~, v~2i+6~, v~2i+4~,
+            v~2i+3~}# when [eq]#i>0#, [eq]#i<n-1#, and [eq]#i%2=0#
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i+3~, v~2i+4~, v~2i+5~, v~2i+2~,
+            v~2i-2~}# when [eq]#i=n-1# and [eq]#i%2=1#
+  {empty}:: [eq]#p~i~ = {v~2i~, v~2i-2~, v~2i+2~, v~2i+5~, v~2i+4~,
+            v~2i+3~}# when [eq]#i=n-1# and [eq]#i%2=0#
+
+A triangle primitive is described by the first, third, and fifth vertices of
+the total primitive in all cases, with the remaining three vertices only
+accessible in a <<geometry,geometry shader>>.
+
+[NOTE]
+.Note
+====
+The ordering of the vertices in each successive triangle is altered so that
+the winding order is consistent throughout the strip.
+====
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+The
+endif::VK_EXT_provoking_vertex[]
+provoking vertex for [eq]#p~i~# is always [eq]#v~2i~#.
+
+image::{images}/primitive_topology_triangle_strip_with_adjacency.svg[align="center",opts="{imageopts}"]
+
+ifdef::VK_EXT_provoking_vertex[]
+When the pname:provokingVertexMode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the provoking vertex for
+[eq]#p~i~# is always [eq]#v~2i+4~#.
+
+image::{images}/primitive_topology_triangle_strip_with_adjacency_last.svg[align="center",opts="{imageopts}"]
+endif::VK_EXT_provoking_vertex[]
+
+
+[[drawing-patch-lists]]
+=== Patch Lists
+
+When the primitive topology is ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, each
+consecutive set of [eq]#m# vertices defines a single patch primitive,
+according to the equation:
+
+  {empty}:: [eq]#p~i~ = {v~mi~, v~mi+1~, ..., v~mi+(m-2)~, v~mi+(m-1)~}#
+
+where [eq]#m# is equal to
+slink:VkPipelineTessellationStateCreateInfo::pname:patchControlPoints.
+
+Patch lists are never passed to <<vertexpostproc, vertex post-processing>>,
+and as such no provoking vertex is defined for patch primitives.
+The number of primitives generated is equal to
+[eq]#{lfloor}pname:vertexCount/m{rfloor}#.
+
+The vertices comprising a patch have no implied geometry, and are used as
+inputs to tessellation shaders and the fixed-function tessellator to
+generate new point, line, or triangle primitives.
+
+
+[[drawing-primitive-order]]
+== Primitive Order
+
+Primitives generated by <<drawing, drawing commands>> progress through the
+stages of the <<synchronization-pipeline-graphics, graphics pipeline>> in
+_primitive order_.
+Primitive order is initially determined in the following way:
+
+  . Submission order determines the initial ordering
+  . For indirect drawing commands, the order in which accessed instances of
+    the slink:VkDrawIndirectCommand are stored in pname:buffer, from lower
+    indirect buffer addresses to higher addresses.
+  . If a drawing command includes multiple instances, the order in which
+    instances are executed, from lower numbered instances to higher.
+  . The order in which primitives are specified by a drawing command:
+  ** For non-indexed draws, from vertices with a lower numbered
+     code:vertexIndex to a higher numbered code:vertexIndex.
+  ** For indexed draws, vertices sourced from a lower index buffer addresses
+     to higher addresses.
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  ** For draws using mesh shaders, the order is provided by <<mesh-ordering,
+     mesh shading>>.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  ** For draws using cluster culling shaders, the order is provided by
+     <<cluster-culling-cluster-ordering, cluster culling shading>>.
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+Within this order implementations further sort primitives:
+
+[start=5]
+  . If tessellation shading is active, by an implementation-dependent order
+    of new primitives generated by <<tessellation-primitive-order,
+    tessellation>>.
+  . If geometry shading is active, by the order new primitives are generated
+    by <<geometry-ordering, geometry shading>>.
+  . If the <<primsrast-polygonmode,polygon mode>> is not
+    ename:VK_POLYGON_MODE_FILL,
+ifdef::VK_NV_fill_rectangle[]
+    or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV,
+endif::VK_NV_fill_rectangle[]
+    by an implementation-dependent ordering of the new primitives generated
+    within the original primitive.
+
+Primitive order is later used to define <<primsrast-order, rasterization
+order>>, which determines the order in which fragments output results to a
+framebuffer.
+
+
+[[drawing-primitive-shading]]
+== Programmable Primitive Shading
+
+Once primitives are assembled, they proceed to the vertex shading stage of
+the pipeline.
+If the draw includes multiple instances, then the set of primitives is sent
+to the vertex shading stage multiple times, once for each instance.
+
+It is implementation-dependent whether vertex shading occurs on vertices
+that are discarded as part of incomplete primitives, but if it does occur
+then it operates as if they were vertices in complete primitives and such
+invocations can: have side effects.
+
+Vertex shading receives two per-vertex inputs from the primitive assembly
+stage - the code:vertexIndex and the code:instanceIndex.
+How these values are generated is defined below, with each command.
+
+Drawing commands fall roughly into two categories:
+
+  * Non-indexed drawing commands present a sequential code:vertexIndex to
+    the vertex shader.
+    The sequential index is generated automatically by the device (see
+    <<fxvertex,Fixed-Function Vertex Processing>> for details on both
+    specifying the vertex attributes indexed by code:vertexIndex, as well as
+    binding vertex buffers containing those attributes to a command buffer).
+    These commands are:
+  ** flink:vkCmdDraw
+  ** flink:vkCmdDrawIndirect
+ifdef::VK_VERSION_1_2[]
+  ** flink:vkCmdDrawIndirectCount
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+  ** flink:vkCmdDrawIndirectCountKHR
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+  ** flink:vkCmdDrawIndirectCountAMD
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_EXT_multi_draw[]
+  ** flink:vkCmdDrawMultiEXT
+endif::VK_EXT_multi_draw[]
+  * Indexed drawing commands read index values from an _index buffer_ and
+    use this to compute the code:vertexIndex value for the vertex shader.
+    These commands are:
+  ** flink:vkCmdDrawIndexed
+  ** flink:vkCmdDrawIndexedIndirect
+ifdef::VK_VERSION_1_2[]
+  ** flink:vkCmdDrawIndexedIndirectCount
+endif::VK_VERSION_1_2[]
+ifdef::VK_KHR_draw_indirect_count[]
+  ** flink:vkCmdDrawIndexedIndirectCountKHR
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_AMD_draw_indirect_count[]
+  ** flink:vkCmdDrawIndexedIndirectCountAMD
+endif::VK_AMD_draw_indirect_count[]
+ifdef::VK_EXT_multi_draw[]
+  ** flink:vkCmdDrawMultiIndexedEXT
+endif::VK_EXT_multi_draw[]
+
+
+[open,refpage='vkCmdBindIndexBuffer',desc='Bind an index buffer to a command buffer',type='protos']
+--
+:refpage: vkCmdBindIndexBuffer
+
+To bind an index buffer to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindIndexBuffer.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer being bound.
+  * pname:offset is the starting offset in bytes within pname:buffer used in
+    index buffer address calculations.
+  * pname:indexType is a elink:VkIndexType value specifying the size of the
+    indices.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_index_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBindIndexBuffer.adoc[]
+--
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='vkCmdBindIndexBuffer2KHR',desc='Bind an index buffer to a command buffer',type='protos']
+--
+:refpage: vkCmdBindIndexBuffer2KHR
+
+To bind an index buffer, along with its size, to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindIndexBuffer2KHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer being bound.
+  * pname:offset is the starting offset in bytes within pname:buffer used in
+    index buffer address calculations.
+  * pname:size is the size in bytes of index data bound from pname:buffer.
+  * pname:indexType is a elink:VkIndexType value specifying the size of the
+    indices.
+
+pname:size specifies the bound size of the index buffer starting from
+pname:offset.
+If pname:size is ename:VK_WHOLE_SIZE then the bound size is from
+pname:offset to the end of the pname:buffer.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_index_buffer_common.adoc[]
+  * [[VUID-vkCmdBindIndexBuffer2KHR-size-08767]]
+    If pname:size is not ename:VK_WHOLE_SIZE, pname:size must: be a multiple
+    of the size of the type indicated by pname:indexType
+  * [[VUID-vkCmdBindIndexBuffer2KHR-size-08768]]
+    If pname:size is not ename:VK_WHOLE_SIZE, the sum of pname:offset and
+    pname:size must: be less than or equal to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdBindIndexBuffer2KHR.adoc[]
+--
+endif::VK_KHR_maintenance5[]
+
+[open,refpage='VkIndexType',desc='Type of index buffer indices',type='enums']
+--
+Possible values of
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR::pname:indexType and]
+flink:vkCmdBindIndexBuffer::pname:indexType, specifying the size of indices,
+are:
+
+include::{generated}/api/enums/VkIndexType.adoc[]
+
+  * ename:VK_INDEX_TYPE_UINT16 specifies that indices are 16-bit unsigned
+    integer values.
+  * ename:VK_INDEX_TYPE_UINT32 specifies that indices are 32-bit unsigned
+    integer values.
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  * ename:VK_INDEX_TYPE_NONE_KHR specifies that no indices are provided.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_EXT_index_type_uint8[]
+  * ename:VK_INDEX_TYPE_UINT8_EXT specifies that indices are 8-bit unsigned
+    integer values.
+endif::VK_EXT_index_type_uint8[]
+--
+
+The parameters for each drawing command are specified directly in the
+command or read from buffer memory, depending on the command.
+Drawing commands that source their parameters from buffer memory are known
+as _indirect_ drawing commands.
+
+All drawing commands interact with the <<features-robustBufferAccess,
+pname:robustBufferAccess>> feature.
+
+[open,refpage='vkCmdDraw',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDraw
+
+To record a non-indexed draw, call:
+
+include::{generated}/api/protos/vkCmdDraw.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:vertexCount is the number of vertices to draw.
+  * pname:instanceCount is the number of instances to draw.
+  * pname:firstVertex is the index of the first vertex to draw.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+
+When the command is executed, primitives are assembled using the current
+primitive topology and pname:vertexCount consecutive vertex indices with the
+first code:vertexIndex value equal to pname:firstVertex.
+The primitives are drawn pname:instanceCount times with code:instanceIndex
+starting with pname:firstInstance and increasing sequentially for each
+instance.
+The assembled primitives execute the bound graphics pipeline.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdDraw.adoc[]
+--
+
+[open,refpage='vkCmdDrawIndexed',desc='Draw primitives with indexed vertices',type='protos']
+--
+:refpage: vkCmdDrawIndexed
+
+To record an indexed draw, call:
+
+include::{generated}/api/protos/vkCmdDrawIndexed.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:indexCount is the number of vertices to draw.
+  * pname:instanceCount is the number of instances to draw.
+  * pname:firstIndex is the base index within the index buffer.
+  * pname:vertexOffset is the value added to the vertex index before
+    indexing into the vertex buffer.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+
+When the command is executed, primitives are assembled using the current
+primitive topology and pname:indexCount vertices whose indices are retrieved
+from the index buffer.
+The index buffer is treated as an array of tightly packed unsigned integers
+of size defined by the
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR::pname:indexType or the]
+flink:vkCmdBindIndexBuffer::pname:indexType parameter with which the buffer
+was bound.
+
+The first vertex index is at an offset of [eq]#pname:firstIndex {times}
+code:indexSize {plus} pname:offset# within the bound index buffer, where
+pname:offset is the offset specified by fname:vkCmdBindIndexBuffer
+ifdef::VK_KHR_maintenance5[or fname:vkCmdBindIndexBuffer2KHR,]
+and code:indexSize is the byte size of the type specified by
+pname:indexType.
+Subsequent index values are retrieved from consecutive locations in the
+index buffer.
+Indices are first compared to the primitive restart value, then zero
+extended to 32 bits (if the code:indexType is
+ifdef::VK_EXT_index_type_uint8[]
+ename:VK_INDEX_TYPE_UINT8_EXT or
+endif::VK_EXT_index_type_uint8[]
+ename:VK_INDEX_TYPE_UINT16) and have pname:vertexOffset added to them,
+before being supplied as the code:vertexIndex value.
+
+The primitives are drawn pname:instanceCount times with code:instanceIndex
+starting with pname:firstInstance and increasing sequentially for each
+instance.
+The assembled primitives execute the bound graphics pipeline.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_indexed_common.adoc[]
+include::{chapters}/commonvalidity/draw_index_binding.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndexed.adoc[]
+--
+
+ifdef::VK_EXT_multi_draw[]
+[open,refpage='vkCmdDrawMultiEXT',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDrawMultiEXT
+
+To record an ordered sequence of draws which have no state changes between
+them, call:
+
+include::{generated}/api/protos/vkCmdDrawMultiEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:pVertexInfo is a pointer to an array of slink:VkMultiDrawInfoEXT
+    with vertex information to be drawn.
+  * pname:instanceCount is the number of instances per draw.
+  * pname:firstInstance is the instance ID of the first instance in each
+    draw.
+  * pname:stride is the byte stride between consecutive elements of
+    pname:pVertexInfo.
+
+The number of draws recorded is pname:drawCount, with each draw reading,
+sequentially, a pname:firstVertex and a pname:vertexCount from
+pname:pVertexInfo.
+For each recorded draw, primitives are assembled as for flink:vkCmdDraw, and
+drawn pname:instanceCount times with code:instanceIndex starting with
+pname:firstInstance and sequentially for each instance.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+  * [[VUID-vkCmdDrawMultiEXT-None-04933]]
+    The <<features-multiDraw, pname:multiDraw>> feature must: be enabled
+  * [[VUID-vkCmdDrawMultiEXT-drawCount-04934]]
+    pname:drawCount must: be less than
+    sname:VkPhysicalDeviceMultiDrawPropertiesEXT::pname:maxMultiDrawCount
+  * [[VUID-vkCmdDrawMultiEXT-drawCount-04935]]
+    If pname:drawCount is greater than zero, pname:pVertexInfo must: be a
+    valid pointer to memory containing one or more valid instances of
+    slink:VkMultiDrawInfoEXT structures
+  * [[VUID-vkCmdDrawMultiEXT-stride-04936]]
+    pname:stride must be a multiple of 4
+****
+
+include::{generated}/validity/protos/vkCmdDrawMultiEXT.adoc[]
+--
+
+[open,refpage='vkCmdDrawMultiIndexedEXT',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDrawMultiIndexedEXT
+
+To record an ordered sequence of indexed draws which have no state changes
+between them, call:
+
+include::{generated}/api/protos/vkCmdDrawMultiIndexedEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:pIndexInfo is a pointer to an array of
+    slink:VkMultiDrawIndexedInfoEXT with index information to be drawn.
+  * pname:instanceCount is the number of instances per draw.
+  * pname:firstInstance is the instance ID of the first instance in each
+    draw.
+  * pname:stride is the byte stride between consecutive elements of
+    pname:pIndexInfo.
+  * pname:pVertexOffset is `NULL` or a pointer to the value added to the
+    vertex index before indexing into the vertex buffer.
+    When specified, sname:VkMultiDrawIndexedInfoEXT::pname:offset is
+    ignored.
+
+The number of draws recorded is pname:drawCount, with each draw reading,
+sequentially, a pname:firstIndex and an pname:indexCount from
+pname:pIndexInfo.
+For each recorded draw, primitives are assembled as for
+flink:vkCmdDrawIndexed, and drawn pname:instanceCount times with
+code:instanceIndex starting with pname:firstInstance and sequentially for
+each instance.
+If pname:pVertexOffset is `NULL`, a pname:vertexOffset is also read from
+pname:pIndexInfo, otherwise the value from dereferencing pname:pVertexOffset
+is used.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_indexed_common.adoc[]
+include::{chapters}/commonvalidity/draw_index_binding.adoc[]
+  * [[VUID-vkCmdDrawMultiIndexedEXT-None-04937]]
+    The <<features-multiDraw, pname:multiDraw>> feature must: be enabled
+  * [[VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939]]
+    pname:drawCount must: be less than
+    sname:VkPhysicalDeviceMultiDrawPropertiesEXT::pname:maxMultiDrawCount
+  * [[VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940]]
+    If pname:drawCount is greater than zero, pname:pIndexInfo must: be a
+    valid pointer to memory containing one or more valid instances of
+    slink:VkMultiDrawIndexedInfoEXT structures
+  * [[VUID-vkCmdDrawMultiIndexedEXT-stride-04941]]
+    pname:stride must be a multiple of 4
+****
+
+include::{generated}/validity/protos/vkCmdDrawMultiIndexedEXT.adoc[]
+--
+
+[open,refpage='VkMultiDrawInfoEXT',desc='Structure specifying a multi-draw command',type='structs',xrefs='vkCmdDrawMultiEXT']
+--
+The sname:VkMultiDrawInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMultiDrawInfoEXT.adoc[]
+
+  * pname:firstVertex is the first vertex to draw.
+  * pname:vertexCount is the number of vertices to draw.
+
+The members of sname:VkMultiDrawInfoEXT have the same meaning as the
+pname:firstVertex and pname:vertexCount parameters in flink:vkCmdDraw.
+
+include::{generated}/validity/structs/VkMultiDrawInfoEXT.adoc[]
+--
+
+[open,refpage='VkMultiDrawIndexedInfoEXT',desc='Structure specifying a multi-draw command',type='structs',xrefs='vkCmdDrawMultiIndexedEXT']
+--
+The sname:VkMultiDrawIndexedInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMultiDrawIndexedInfoEXT.adoc[]
+
+  * pname:firstIndex is the first index to draw.
+  * pname:indexCount is the number of vertices to draw.
+  * pname:vertexOffset is the value added to the vertex index before
+    indexing into the vertex buffer for indexed multidraws.
+
+The pname:firstIndex, pname:indexCount, and pname:vertexOffset members of
+sname:VkMultiDrawIndexedInfoEXT have the same meaning as the
+pname:firstIndex, pname:indexCount, and pname:vertexOffset parameters,
+respectively, of flink:vkCmdDrawIndexed.
+
+include::{generated}/validity/structs/VkMultiDrawIndexedInfoEXT.adoc[]
+
+--
+endif::VK_EXT_multi_draw[]
+
+[open,refpage='vkCmdDrawIndirect',desc='Draw primitives with indirect parameters',type='protos']
+--
+:refpage: vkCmdDrawIndirect
+
+To record a non-indexed indirect drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawIndirect.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawIndirect behaves similarly to flink:vkCmdDraw except that the
+parameters are read by the device from a buffer during execution.
+pname:drawCount draws are executed by the command, with parameters taken
+from pname:buffer starting at pname:offset and increasing by pname:stride
+bytes for each successive draw.
+The parameters of each draw are encoded in an array of
+slink:VkDrawIndirectCommand structures.
+If pname:drawCount is less than or equal to one, pname:stride is ignored.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.adoc[]
+  * [[VUID-vkCmdDrawIndirect-drawCount-00476]]
+    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
+    of `4` and must: be greater than or equal to
+    code:sizeof(sname:VkDrawIndirectCommand)
+  * [[VUID-vkCmdDrawIndirect-drawCount-00487]]
+    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
+    code:sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal
+    to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndirect-drawCount-00488]]
+    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
+    (pname:drawCount - 1) {plus} pname:offset {plus}
+    code:sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal
+    to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndirect.adoc[]
+--
+
+[open,refpage='VkDrawIndirectCommand',desc='Structure specifying a indirect drawing command',type='structs',xrefs='vkCmdDrawIndirect']
+--
+The sname:VkDrawIndirectCommand structure is defined as:
+
+include::{generated}/api/structs/VkDrawIndirectCommand.adoc[]
+
+  * pname:vertexCount is the number of vertices to draw.
+  * pname:instanceCount is the number of instances to draw.
+  * pname:firstVertex is the index of the first vertex to draw.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+
+The members of sname:VkDrawIndirectCommand have the same meaning as the
+similarly named parameters of flink:vkCmdDraw.
+
+.Valid Usage
+****
+  * [[VUID-VkDrawIndirectCommand-None-00500]]
+    For a given vertex buffer binding, any attribute data fetched must: be
+    entirely contained within the corresponding vertex buffer binding, as
+    described in <<fxvertex-input>>
+  * [[VUID-VkDrawIndirectCommand-firstInstance-00501]]
+    If the <<features-drawIndirectFirstInstance,
+    pname:drawIndirectFirstInstance>> feature is not enabled,
+    pname:firstInstance must: be code:0
+****
+
+include::{generated}/validity/structs/VkDrawIndirectCommand.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
+[open,refpage='vkCmdDrawIndirectCount',desc='Draw primitives with indirect parameters and draw count',type='protos',alias='vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountAMD']
+--
+:refpage: vkCmdDrawIndirectCount
+
+To record a non-indexed draw call with a draw call count sourced from a
+buffer, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCmdDrawIndirectCount.adoc[]
+endif::VK_VERSION_1_2[]
+
+// Jon: conditional logic on connective clauses with 3 forms of the command including VK_VERSION_1_2 needs work.
+ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[or the equivalent command]
+
+ifdef::VK_KHR_draw_indirect_count[]
+include::{generated}/api/protos/vkCmdDrawIndirectCountKHR.adoc[]
+endif::VK_KHR_draw_indirect_count[]
+
+ifdef::VK_KHR_draw_indirect_count+VK_AMD_draw_indirect_count[or the equivalent command]
+
+ifdef::VK_AMD_draw_indirect_count[]
+include::{generated}/api/protos/vkCmdDrawIndirectCountAMD.adoc[]
+endif::VK_AMD_draw_indirect_count[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:countBuffer is the buffer containing the draw count.
+  * pname:countBufferOffset is the byte offset into pname:countBuffer where
+    the draw count begins.
+  * pname:maxDrawCount specifies the maximum number of draws that will be
+    executed.
+    The actual number of executed draw calls is the minimum of the count
+    specified in pname:countBuffer and pname:maxDrawCount.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawIndirectCount behaves similarly to flink:vkCmdDrawIndirect
+except that the draw count is read by the device from a buffer during
+execution.
+The command will read an unsigned 32-bit integer from pname:countBuffer
+located at pname:countBufferOffset and use this as the draw count.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.adoc[]
+  * [[VUID-vkCmdDrawIndirectCount-stride-03110]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to sizeof(sname:VkDrawIndirectCommand)
+  * [[VUID-vkCmdDrawIndirectCount-maxDrawCount-03111]]
+    If pname:maxDrawCount is greater than or equal to `1`,
+    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
+    {plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
+    to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndirectCount-countBuffer-03121]]
+    If the count stored in pname:countBuffer is equal to `1`,
+    [eq]#(pname:offset {plus} sizeof(sname:VkDrawIndirectCommand))# must: be
+    less than or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndirectCount-countBuffer-03122]]
+    If the count stored in pname:countBuffer is greater than `1`,
+    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
+    {plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
+    to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndirectCount.adoc[]
+
+--
+endif::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
+
+[open,refpage='vkCmdDrawIndexedIndirect',desc='Draw primitives with indirect parameters and indexed vertices',type='protos']
+--
+:refpage: vkCmdDrawIndexedIndirect
+
+To record an indexed indirect drawing command, call:
+
+include::{generated}/api/protos/vkCmdDrawIndexedIndirect.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:drawCount is the number of draws to execute, and can: be zero.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawIndexedIndirect behaves similarly to flink:vkCmdDrawIndexed
+except that the parameters are read by the device from a buffer during
+execution.
+pname:drawCount draws are executed by the command, with parameters taken
+from pname:buffer starting at pname:offset and increasing by pname:stride
+bytes for each successive draw.
+The parameters of each draw are encoded in an array of
+slink:VkDrawIndexedIndirectCommand structures.
+If pname:drawCount is less than or equal to one, pname:stride is ignored.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.adoc[]
+include::{chapters}/commonvalidity/draw_indexed_common.adoc[]
+  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]]
+    If pname:drawCount is greater than `1`, pname:stride must: be a multiple
+    of `4` and must: be greater than or equal to
+    code:sizeof(sname:VkDrawIndexedIndirectCommand)
+  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00539]]
+    If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
+    code:sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or
+    equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00540]]
+    If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
+    (pname:drawCount - 1) {plus} pname:offset {plus}
+    code:sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or
+    equal to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndexedIndirect.adoc[]
+--
+
+[open,refpage='VkDrawIndexedIndirectCommand',desc='Structure specifying a indexed indirect drawing command',type='structs',xrefs='vkCmdDrawIndexedIndirect']
+--
+:refpage: VkDrawIndexedIndirectCommand
+
+The sname:VkDrawIndexedIndirectCommand structure is defined as:
+
+include::{generated}/api/structs/VkDrawIndexedIndirectCommand.adoc[]
+
+  * pname:indexCount is the number of vertices to draw.
+  * pname:instanceCount is the number of instances to draw.
+  * pname:firstIndex is the base index within the index buffer.
+  * pname:vertexOffset is the value added to the vertex index before
+    indexing into the vertex buffer.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+
+The members of sname:VkDrawIndexedIndirectCommand have the same meaning as
+the similarly named parameters of flink:vkCmdDrawIndexed.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_index_binding.adoc[]
+  * [[VUID-VkDrawIndexedIndirectCommand-None-00552]]
+    For a given vertex buffer binding, any attribute data fetched must: be
+    entirely contained within the corresponding vertex buffer binding, as
+    described in <<fxvertex-input>>
+  * [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]]
+    If the <<features-drawIndirectFirstInstance,
+    pname:drawIndirectFirstInstance>> feature is not enabled,
+    pname:firstInstance must: be code:0
+****
+
+include::{generated}/validity/structs/VkDrawIndexedIndirectCommand.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
+[open,refpage='vkCmdDrawIndexedIndirectCount',desc='Draw parameters with indirect parameters, indexed vertices, and draw count',type='protos',alias='vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountAMD']
+--
+:refpage: vkCmdDrawIndexedIndirectCount
+
+To record an indexed draw call with a draw call count sourced from a buffer,
+call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCmdDrawIndexedIndirectCount.adoc[]
+endif::VK_VERSION_1_2[]
+
+// Jon: conditional logic on connective clauses with 3 forms of the command including VK_VERSION_1_2 needs work.
+ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[or the equivalent command]
+
+ifdef::VK_KHR_draw_indirect_count[]
+include::{generated}/api/protos/vkCmdDrawIndexedIndirectCountKHR.adoc[]
+endif::VK_KHR_draw_indirect_count[]
+
+ifdef::VK_KHR_draw_indirect_count+VK_AMD_draw_indirect_count[or the equivalent command]
+
+ifdef::VK_AMD_draw_indirect_count[]
+include::{generated}/api/protos/vkCmdDrawIndexedIndirectCountAMD.adoc[]
+endif::VK_AMD_draw_indirect_count[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:buffer is the buffer containing draw parameters.
+  * pname:offset is the byte offset into pname:buffer where parameters
+    begin.
+  * pname:countBuffer is the buffer containing the draw count.
+  * pname:countBufferOffset is the byte offset into pname:countBuffer where
+    the draw count begins.
+  * pname:maxDrawCount specifies the maximum number of draws that will be
+    executed.
+    The actual number of executed draw calls is the minimum of the count
+    specified in pname:countBuffer and pname:maxDrawCount.
+  * pname:stride is the byte stride between successive sets of draw
+    parameters.
+
+fname:vkCmdDrawIndexedIndirectCount behaves similarly to
+flink:vkCmdDrawIndexedIndirect except that the draw count is read by the
+device from a buffer during execution.
+The command will read an unsigned 32-bit integer from pname:countBuffer
+located at pname:countBufferOffset and use this as the draw count.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.adoc[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.adoc[]
+include::{chapters}/commonvalidity/draw_indexed_common.adoc[]
+  * [[VUID-vkCmdDrawIndexedIndirectCount-stride-03142]]
+    pname:stride must: be a multiple of `4` and must: be greater than or
+    equal to sizeof(sname:VkDrawIndexedIndirectCommand)
+  * [[VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143]]
+    If pname:maxDrawCount is greater than or equal to `1`,
+    [eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
+    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
+    or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03153]]
+    If count stored in pname:countBuffer is equal to `1`, [eq]#(pname:offset
+    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
+    or equal to the size of pname:buffer
+  * [[VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03154]]
+    If count stored in pname:countBuffer is greater than `1`,
+    [eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
+    {plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
+    or equal to the size of pname:buffer
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndexedIndirectCount.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_draw_indirect_count[]
+
+
+ifdef::VK_EXT_transform_feedback[]
+[[drawing-transform-feedback]]
+=== Drawing Transform Feedback
+
+It is possible to draw vertex data that was previously captured during
+active <<vertexpostproc-transform-feedback,transform feedback>> by binding
+one or more of the transform feedback buffers as vertex buffers.
+A pipeline barrier is required between using the buffers as transform
+feedback buffers and vertex buffers to ensure all writes to the transform
+feedback buffers are visible when the data is read as vertex attributes.
+The source access is ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT and
+the destination access is ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT for the
+pipeline stages ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT and
+ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT respectively.
+The value written to the counter buffer by
+flink:vkCmdEndTransformFeedbackEXT can: be used to determine the vertex
+count for the draw.
+A pipeline barrier is required between using the counter buffer for
+fname:vkCmdEndTransformFeedbackEXT and fname:vkCmdDrawIndirectByteCountEXT
+where the source access is
+ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT and the destination
+access is ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT for the pipeline stages
+ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT and
+ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT respectively.
+
+[open,refpage='vkCmdDrawIndirectByteCountEXT',desc='Draw primitives with indirect parameters where the vertex count is derived from the counter byte value in the counter buffer',type='protos']
+--
+:refpage: vkCmdDrawIndirectByteCountEXT
+
+To record a non-indexed draw call, where the vertex count is based on a byte
+count read from a buffer and the passed in vertex stride parameter, call:
+
+include::{generated}/api/protos/vkCmdDrawIndirectByteCountEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:instanceCount is the number of instances to draw.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+  * pname:counterBuffer is the buffer handle from where the byte count is
+    read.
+  * pname:counterBufferOffset is the offset into the buffer used to read the
+    byte count, which is used to calculate the vertex count for this draw
+    call.
+  * pname:counterOffset is subtracted from the byte count read from the
+    pname:counterBuffer at the pname:counterBufferOffset
+  * pname:vertexStride is the stride in bytes between each element of the
+    vertex data that is used to calculate the vertex count from the counter
+    value.
+    This value is typically the same value that was used in the graphics
+    pipeline state when the transform feedback was captured as the
+    code:XfbStride.
+
+When the command is executed, primitives are assembled in the same way as
+done with flink:vkCmdDraw except the pname:vertexCount is calculated based
+on the byte count read from pname:counterBuffer at offset
+pname:counterBufferOffset.
+The assembled primitives execute the bound graphics pipeline.
+
+The effective pname:vertexCount is calculated as follows:
+
+[source,c]
+----
+const uint32_t * counterBufferPtr = (const uint8_t *)counterBuffer.address + counterBufferOffset;
+vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);
+----
+
+The effective pname:firstVertex is zero.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.adoc[]
+include::{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
+    must: be enabled
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288]]
+    The implementation must: support
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackDraw
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-02289]]
+    pname:vertexStride must: be greater than 0 and less than or equal to
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataStride
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567]]
+    If pname:counterBuffer is non-sparse then it must: be bound completely
+    and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290]]
+    pname:counterBuffer must: have been created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-counterBufferOffset-04568]]
+    pname:counterBufferOffset must: be a multiple of `4`
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndirectByteCountEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+
+ifdef::VK_EXT_conditional_rendering[]
+[[drawing-conditional-rendering]]
+== Conditional Rendering
+
+Certain rendering commands can: be executed conditionally based on a value
+in buffer memory.
+These rendering commands are limited to <<drawing,drawing commands>>,
+<<dispatch,dispatching commands>>, and clearing attachments with
+flink:vkCmdClearAttachments within a conditional rendering block which is
+defined by commands flink:vkCmdBeginConditionalRenderingEXT and
+flink:vkCmdEndConditionalRenderingEXT.
+Other rendering commands remain unaffected by conditional rendering.
+
+[[active-conditional-rendering]]
+After beginning conditional rendering, it is considered _active_ within the
+command buffer it was called until it is ended with
+flink:vkCmdEndConditionalRenderingEXT.
+
+Conditional rendering must: begin and end in the same command buffer.
+When conditional rendering is active, a primary command buffer can: execute
+secondary command buffers if the <<features-inheritedConditionalRendering,
+pname:inheritedConditionalRendering>> feature is enabled.
+For a secondary command buffer to be executed while conditional rendering is
+active in the primary command buffer, it must: set the
+pname:conditionalRenderingEnable flag of
+slink:VkCommandBufferInheritanceConditionalRenderingInfoEXT, as described in
+the <<commandbuffers-recording, Command Buffer Recording>> section.
+
+Conditional rendering must: also either begin and end inside the same
+subpass of a render pass instance, or must: both begin and end outside of a
+render pass instance (i.e. contain entire render pass instances).
+
+[open,refpage='vkCmdBeginConditionalRenderingEXT',desc='Define the beginning of a conditional rendering block',type='protos']
+--
+To begin conditional rendering, call:
+
+include::{generated}/api/protos/vkCmdBeginConditionalRenderingEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:pConditionalRenderingBegin is a pointer to a
+    slink:VkConditionalRenderingBeginInfoEXT structure specifying parameters
+    of conditional rendering.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginConditionalRenderingEXT-None-01980]]
+    Conditional rendering must: not already be
+    <<active-conditional-rendering,active>>
+****
+
+include::{generated}/validity/protos/vkCmdBeginConditionalRenderingEXT.adoc[]
+--
+
+[open,refpage='VkConditionalRenderingBeginInfoEXT',desc='Structure specifying conditional rendering begin information',type='structs']
+--
+The sname:VkConditionalRenderingBeginInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkConditionalRenderingBeginInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is a buffer containing the predicate for conditional
+    rendering.
+  * pname:offset is the byte offset into pname:buffer where the predicate is
+    located.
+  * pname:flags is a bitmask of tlink:VkConditionalRenderingFlagsEXT
+    specifying the behavior of conditional rendering.
+
+If the 32-bit value at pname:offset in pname:buffer memory is zero, then the
+rendering commands are discarded, otherwise they are executed as normal.
+If the value of the predicate in buffer memory changes while conditional
+rendering is active, the rendering commands may: be discarded in an
+implementation-dependent way.
+Some implementations may latch the value of the predicate upon beginning
+conditional rendering while others may read it before every rendering
+command.
+
+.Valid Usage
+****
+  * [[VUID-VkConditionalRenderingBeginInfoEXT-buffer-01981]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-VkConditionalRenderingBeginInfoEXT-buffer-01982]]
+    pname:buffer must: have been created with the
+    ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT bit set
+  * [[VUID-VkConditionalRenderingBeginInfoEXT-offset-01983]]
+    pname:offset must: be less than the size of pname:buffer by at least 32
+    bits
+  * [[VUID-VkConditionalRenderingBeginInfoEXT-offset-01984]]
+    pname:offset must: be a multiple of 4
+****
+
+include::{generated}/validity/structs/VkConditionalRenderingBeginInfoEXT.adoc[]
+--
+
+[open,refpage='VkConditionalRenderingFlagBitsEXT',desc='Specify the behavior of conditional rendering',type='enums']
+--
+Bits which can: be set in
+flink:vkCmdBeginConditionalRenderingEXT::pname:flags, specifying the
+behavior of conditional rendering, are:
+
+include::{generated}/api/enums/VkConditionalRenderingFlagBitsEXT.adoc[]
+
+  * ename:VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT specifies the condition
+    used to determine whether to discard rendering commands or not.
+    That is, if the 32-bit predicate read from pname:buffer memory at
+    pname:offset is zero, the rendering commands are not discarded, and if
+    non zero, then they are discarded.
+--
+
+[open,refpage='VkConditionalRenderingFlagsEXT',desc='Bitmask of VkConditionalRenderingFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkConditionalRenderingFlagsEXT.adoc[]
+
+tname:VkConditionalRenderingFlagsEXT is a bitmask type for setting a mask of
+zero or more elink:VkConditionalRenderingFlagBitsEXT.
+--
+
+[open,refpage='vkCmdEndConditionalRenderingEXT',desc='Define the end of a conditional rendering block',type='protos']
+--
+To end conditional rendering, call:
+
+include::{generated}/api/protos/vkCmdEndConditionalRenderingEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+
+Once ended, conditional rendering becomes inactive.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01985]]
+    Conditional rendering must: be <<active-conditional-rendering,active>>
+  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01986]]
+    If conditional rendering was made
+    <<active-conditional-rendering,active>> outside of a render pass
+    instance, it must: not be ended inside a render pass instance
+  * [[VUID-vkCmdEndConditionalRenderingEXT-None-01987]]
+    If conditional rendering was made
+    <<active-conditional-rendering,active>> within a subpass it must: be
+    ended in the same subpass
+****
+
+include::{generated}/validity/protos/vkCmdEndConditionalRenderingEXT.adoc[]
+--
+endif::VK_EXT_conditional_rendering[]
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+include::{chapters}/VK_NV_mesh_shader/drawing.adoc[]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+include::{chapters}/VK_HUAWEI_cluster_culling_shader/drawing.adoc[]
+endif::VK_HUAWEI_cluster_culling_shader[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/executiongraphs.adoc b/codegen/vulkan/vulkan-docs-next/chapters/executiongraphs.adoc
new file mode 100644
index 0000000..1970709
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/executiongraphs.adoc
@@ -0,0 +1,740 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[executiongraphs]]
+= Execution Graphs
+
+_Execution graphs_ provide a way for applications to dispatch multiple
+operations dynamically from a single initial command on the host.
+To achieve this, a new execution graph pipeline is provided, that links
+together multiple shaders or pipelines which each describe one or more
+operations that can be dispatched within the execution graph.
+Each linked pipeline or shader describes an _execution node_ within the
+graph, which can: be dispatched dynamically from another shader within the
+same graph.
+This allows applications to describe much richer execution topologies at a
+finer granularity than would typically be possible with API commands alone.
+
+
+== Pipeline Creation
+
+[open,refpage='vkCreateExecutionGraphPipelinesAMDX',desc='Creates a new execution graph pipeline object',type='protos']
+--
+To create execution graph pipelines, call:
+
+include::{generated}/api/protos/vkCreateExecutionGraphPipelinesAMDX.adoc[]
+
+  * pname:device is the logical device that creates the execution graph
+    pipelines.
+  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
+    pipeline caching is disabled; or the handle of a valid
+    <<pipelines-cache,pipeline cache>> object, in which case use of that
+    cache is enabled for the duration of the command.
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pPipelines arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkExecutionGraphPipelineCreateInfoAMDX structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
+    which the resulting execution graph pipeline objects are returned.
+
+The implementation will create a pipeline in each element of
+pname:pPipelines from the corresponding element of pname:pCreateInfos.
+If creation of any pipeline fails, that pipeline will be set to
+dlink:VK_NULL_HANDLE.
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+If creation fails for a pipeline create info with a
+slink:VkExecutionGraphPipelineCreateInfoAMDX::pname:flags value that
+included ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, all pipelines
+at a greater index all automatically fail.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateExecutionGraphPipelinesAMDX-shaderEnqueue-09124]]
+    The <<features-shaderEnqueue,pname:shaderEnqueue feature>> must: be
+    enabled
+  * [[VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09125]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+    pname:basePipelineIndex member of that same element is not `-1`,
+    pname:basePipelineIndex must: be less than the index into
+    pname:pCreateInfos that corresponds to that element
+  * [[VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09126]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+    must: have been created with the
+    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-09127]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
+    to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+****
+
+include::{generated}/validity/protos/vkCreateExecutionGraphPipelinesAMDX.adoc[]
+--
+
+[open,refpage='VkExecutionGraphPipelineCreateInfoAMDX',desc='Structure specifying parameters of a newly created execution graph pipeline',type='structs']
+--
+:refpage: VkExecutionGraphPipelineCreateInfoAMDX
+
+The sname:VkExecutionGraphPipelineCreateInfoAMDX structure is defined as:
+
+include::{generated}/api/structs/VkExecutionGraphPipelineCreateInfoAMDX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
+    how the pipeline will be generated.
+  * pname:stageCount is the number of entries in the pname:pStages array.
+  * pname:pStages is a pointer to an array of pname:stageCount
+    slink:VkPipelineShaderStageCreateInfo structures describing the set of
+    the shader stages to be included in the execution graph pipeline.
+  * pname:pLibraryInfo is a pointer to a
+    slink:VkPipelineLibraryCreateInfoKHR structure defining pipeline
+    libraries to include.
+  * pname:layout is the description of binding locations used by both the
+    pipeline and descriptor sets used with the pipeline.
+  * pname:basePipelineHandle is a pipeline to derive from
+  * pname:basePipelineIndex is an index into the pname:pCreateInfos
+    parameter to use as a pipeline to derive from
+
+The parameters pname:basePipelineHandle and pname:basePipelineIndex are
+described in more detail in <<pipelines-pipeline-derivatives,Pipeline
+Derivatives>>.
+
+Each shader stage provided when creating an execution graph pipeline
+(including those in libraries) is associated with a name and an index,
+determined by the inclusion or omission of a
+slink:VkPipelineShaderStageNodeCreateInfoAMDX structure in its pname:pNext
+chain.
+
+In addition to the shader name and index, an internal "node index" is also
+generated for each node, which can be queried with
+flink:vkGetExecutionGraphPipelineNodeIndexAMDX, and is used exclusively for
+initial dispatch of an execution graph.
+
+.Valid Usage
+****
+:pipelineType: execution graph
+include::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
+include::{chapters}/commonvalidity/compute_graph_pipeline_create_info_common.adoc[]
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-stage-09128]]
+    The pname:stage member of any element of pname:pStages must: be
+    ename:VK_SHADER_STAGE_COMPUTE_BIT
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-09129]]
+    The shader code for the entry point identified by each element of
+    pname:pStages and the rest of the state identified by this structure
+    must: adhere to the pipeline linking rules described in the
+    <<interfaces,Shader Interfaces>> chapter
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09130]]
+    pname:layout must: be
+    <<descriptorsets-pipelinelayout-consistency,consistent>> with the layout
+    of the shaders specified in pname:pStages
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09131]]
+    If pname:pLibraryInfo is not `NULL`, each element of its
+    pname:pLibraries member must: have been created with a pname:layout that
+    is compatible with the pname:layout in this pipeline
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09132]]
+    The number of resources in pname:layout accessible to each shader stage
+    that is used by the pipeline must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09133]]
+    If pname:pLibraryInfo is not `NULL`, each element of
+    pname:pLibraryInfo->libraries must: be either a compute pipeline or an
+    execution graph pipeline
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09134]]
+    There must: be no two nodes in the pipeline that share both the same
+    shader name and index, as specified by
+    slink:VkPipelineShaderStageNodeCreateInfoAMDX
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09135]]
+    There must: be no two nodes in the pipeline that share the same shader
+    name and have input payload declarations with different sizes
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09136]]
+    There must: be no two nodes in the pipeline that share the same name but
+    have different execution models
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-CoalescedInputCountAMDX-09137]]
+    There must: be no two nodes in the pipeline that share the same name
+    where one includes code:CoalescedInputCountAMDX and the other does not
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-StaticNumWorkgroupsAMDX-09138]]
+    There must: be no two nodes in the pipeline that share the same name
+    where one includes code:StaticNumWorkgroupsAMDX and the other does not
+  * [[VUID-VkExecutionGraphPipelineCreateInfoAMDX-PayloadNodeNameAMDX-09139]]
+    If an output payload declared in any shader in the pipeline has a
+    code:PayloadNodeNameAMDX decoration with a code:Node code:Name that
+    matches the shader name of any other node in the graph, the size of the
+    output payload must: match the size of the input payload in the matching
+    node
+****
+
+include::{generated}/validity/structs/VkExecutionGraphPipelineCreateInfoAMDX.adoc[]
+--
+
+[open,refpage='VK_SHADER_INDEX_UNUSED_AMDX',desc='Sentinel for an unused shader index',type='consts']
+--
+ename:VK_SHADER_INDEX_UNUSED_AMDX is a special shader index used to indicate
+that the created node does not override the index.
+In this case, the shader index is determined through other means.
+It is defined as:
+
+include::{generated}/api/enums/VK_SHADER_INDEX_UNUSED_AMDX.adoc[]
+--
+
+[open,refpage='VkPipelineShaderStageNodeCreateInfoAMDX',desc='Structure specifying the shader name and index with an execution graph',type='structs']
+--
+:refpage: VkPipelineShaderStageNodeCreateInfoAMDX
+
+The sname:VkPipelineShaderStageNodeCreateInfoAMDX structure is defined as:
+
+include::{generated}/api/structs/VkPipelineShaderStageNodeCreateInfoAMDX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pName is the shader name to use when creating a node in an
+    execution graph.
+    If pname:pName is `NULL`, the name of the entry point specified in
+    SPIR-V is used as the shader name.
+  * pname:index is the shader index to use when creating a node in an
+    execution graph.
+    If pname:index is ename:VK_SHADER_INDEX_UNUSED_AMDX then the original
+    index is used, either as specified by the code:ShaderIndexAMDX execution
+    mode, or `0` if that too is not specified.
+
+When included in the pname:pNext chain of a
+slink:VkPipelineShaderStageCreateInfo structure, this structure specifies
+the shader name and shader index of a node when creating an execution graph
+pipeline.
+If this structure is omitted, the shader name is set to the name of the
+entry point in SPIR-V and the shader index is set to `0`.
+
+When dispatching a node from another shader, the name is fixed at pipeline
+creation, but the index can: be set dynamically.
+By associating multiple shaders with the same name but different indexes,
+applications can dynamically select different nodes to execute.
+Applications must: ensure each node has a unique name and index.
+
+include::{generated}/validity/structs/VkPipelineShaderStageNodeCreateInfoAMDX.adoc[]
+--
+
+[open,refpage='vkGetExecutionGraphPipelineNodeIndexAMDX',desc='Query internal id of a node in an execution graph',type='protos']
+--
+:refpage: vkGetExecutionGraphPipelineNodeIndexAMDX
+
+To query the internal node index for a particular node in an execution
+graph, call:
+
+include::{generated}/api/protos/vkGetExecutionGraphPipelineNodeIndexAMDX.adoc[]
+
+  * pname:device is the that pname:executionGraph was created on.
+  * pname:executionGraph is the execution graph pipeline to query the
+    internal node index for.
+  * pname:pNodeInfo is a pointer to a
+    slink:VkPipelineShaderStageNodeCreateInfoAMDX structure identifying the
+    name and index of the node to query.
+  * pname:pNodeIndex is the returned internal node index of the identified
+    node.
+
+Once this function returns, the contents of pname:pNodeIndex contain the
+internal node index of the identified node.
+
+
+.Valid Usage
+****
+  * [[VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09140]]
+    pname:pNodeInfo->pName must: not be `NULL`
+  * [[VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09141]]
+    pname:pNodeInfo->index must: not be ename:VK_SHADER_INDEX_UNUSED_AMDX
+  * [[VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-09142]]
+    There must: be a node in pname:executionGraph with a shader name and
+    index equal to pname:pNodeInfo->pName and pname:pNodeInfo->index
+****
+
+include::{generated}/validity/protos/vkGetExecutionGraphPipelineNodeIndexAMDX.adoc[]
+--
+
+
+== Initializing Scratch Memory
+
+Implementations may: need scratch memory to manage dispatch queues or
+similar when executing a pipeline graph, and this is explicitly managed by
+the application.
+
+[open,refpage='vkGetExecutionGraphPipelineScratchSizeAMDX',desc='Query scratch space required to dispatch an execution graph',type='protos']
+--
+:refpage: vkGetExecutionGraphPipelineScratchSizeAMDX
+
+To query the scratch space required to dispatch an execution graph, call:
+
+include::{generated}/api/protos/vkGetExecutionGraphPipelineScratchSizeAMDX.adoc[]
+
+  * pname:device is the that pname:executionGraph was created on.
+  * pname:executionGraph is the execution graph pipeline to query the
+    scratch space for.
+  * pname:pSizeInfo is a pointer to a
+    slink:VkExecutionGraphPipelineScratchSizeAMDX structure that will
+    contain the required scratch size.
+
+After this function returns, information about the scratch space required
+will be returned in pname:pSizeInfo.
+
+include::{generated}/validity/protos/vkGetExecutionGraphPipelineScratchSizeAMDX.adoc[]
+--
+
+[open,refpage='VkExecutionGraphPipelineScratchSizeAMDX',desc='Structure describing the scratch space required to dispatch an execution graph',type='structs']
+--
+:refpage: VkExecutionGraphPipelineScratchSizeAMDX
+
+The sname:VkExecutionGraphPipelineScratchSizeAMDX structure is defined as:
+
+include::{generated}/api/structs/VkExecutionGraphPipelineScratchSizeAMDX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:size indicates the scratch space required for dispatch the queried
+    execution graph.
+
+include::{generated}/validity/structs/VkExecutionGraphPipelineScratchSizeAMDX.adoc[]
+--
+
+[open,refpage='vkCmdInitializeGraphScratchMemoryAMDX',desc='Initialize scratch memory for an execution graph',type='protos']
+--
+:refpage: vkCmdInitializeGraphScratchMemoryAMDX
+
+To initialize scratch memory for a particular execution graph, call:
+
+include::{generated}/api/protos/vkCmdInitializeGraphScratchMemoryAMDX.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:scratch is a pointer to the scratch memory to be initialized.
+
+This command must: be called before using pname:scratch to dispatch the
+currently bound execution graph pipeline.
+
+Execution of this command may: modify any memory locations in the range
+[pname:scratch,pname:scratch + pname:size), where pname:size is the value
+returned in slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size by
+slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+execution graph pipeline.
+Accesses to this memory range are performed in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT and
+ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.
+
+If any portion of pname:scratch is modified by any command other than
+flink:vkCmdDispatchGraphAMDX, flink:vkCmdDispatchGraphIndirectAMDX,
+flink:vkCmdDispatchGraphIndirectCountAMDX, or
+fname:vkCmdInitializeGraphScratchMemoryAMDX with the same execution graph,
+it must: be reinitialized for the execution graph again before dispatching
+against it.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09143]]
+    pname:scratch must: be the device address of an allocated memory range
+    at least as large as the value of
+    slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size returned by
+    slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+    execution graph pipeline.
+  * [[VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09144]]
+    pname:scratch must: be a multiple of 64
+****
+
+include::{generated}/validity/protos/vkCmdInitializeGraphScratchMemoryAMDX.adoc[]
+--
+
+
+== Dispatching a Graph
+
+Initial dispatch of an execution graph is done from the host in the same way
+as any other command, and can: be used in a similar way to compute dispatch
+commands, with indirect variants available.
+
+[open,refpage='vkCmdDispatchGraphAMDX',desc='Dispatch an execution graph',type='protos']
+--
+:refpage: vkCmdDispatchGraphAMDX
+
+To record an execution graph dispatch, call:
+
+include::{generated}/api/protos/vkCmdDispatchGraphAMDX.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:scratch is a pointer to the scratch memory to be used.
+  * pname:pCountInfo is a host pointer to a
+    slink:VkDispatchGraphCountInfoAMDX structure defining the nodes which
+    will be initially executed.
+
+When this command is executed, the nodes specified in pname:pCountInfo are
+executed.
+Nodes executed as part of this command are not implicitly synchronized in
+any way against each other once they are dispatched.
+
+For this command, all device/host pointers in substructures are treated as
+host pointers and read only during host execution of this command.
+Once this command returns, no reference to the original pointers is
+retained.
+
+Execution of this command may: modify any memory locations in the range
+[pname:scratch,pname:scratch + pname:size), where pname:size is the value
+returned in slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size by
+slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+execution graph pipeline Accesses to this memory range are performed in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT and
+ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dispatch_graph_common.adoc[]
+  * [[VUID-vkCmdDispatchGraphAMDX-pCountInfo-09145]]
+    pname:pCountInfo->infos must: be a host pointer to a memory allocation
+    at least as large as the product of pname:count and pname:stride
+  * [[VUID-vkCmdDispatchGraphAMDX-infos-09146]]
+    Host memory locations at indexes in the range [pname:infos, pname:infos
+    + (pname:count*pname:stride)), at a granularity of pname:stride must:
+    contain valid slink:VkDispatchGraphInfoAMDX structures in the first 24
+    bytes
+  * [[VUID-vkCmdDispatchGraphAMDX-pCountInfo-09147]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:payloads must: be a host pointer to a
+    memory allocation at least as large as the product of pname:payloadCount
+    and pname:payloadStride
+  * [[VUID-vkCmdDispatchGraphAMDX-pCountInfo-09148]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:nodeIndex must: be a valid node index in
+    the currently bound execution graph pipeline, as returned by
+    flink:vkGetExecutionGraphPipelineNodeIndexAMDX
+  * [[VUID-vkCmdDispatchGraphAMDX-pCountInfo-09149]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, host memory locations at indexes in the range
+    [pname:payloads, pname:payloads + (pname:payloadCount *
+    pname:payloadStride)), at a granularity of pname:payloadStride must:
+    contain a payload matching the size of the input payload expected by the
+    node in pname:nodeIndex in the first bytes
+****
+
+include::{generated}/validity/protos/vkCmdDispatchGraphAMDX.adoc[]
+--
+
+[open,refpage='vkCmdDispatchGraphIndirectAMDX',desc='Dispatch an execution graph with node and payload parameters read on the device',type='protos']
+--
+:refpage: vkCmdDispatchGraphIndirectAMDX
+
+To record an execution graph dispatch with node and payload parameters read
+on device, call:
+
+include::{generated}/api/protos/vkCmdDispatchGraphIndirectAMDX.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:scratch is a pointer to the scratch memory to be used.
+  * pname:pCountInfo is a host pointer to a
+    slink:VkDispatchGraphCountInfoAMDX structure defining the nodes which
+    will be initially executed.
+
+When this command is executed, the nodes specified in pname:pCountInfo are
+executed.
+Nodes executed as part of this command are not implicitly synchronized in
+any way against each other once they are dispatched.
+
+For this command, all device/host pointers in substructures are treated as
+device pointers and read during device execution of this command.
+The allocation and contents of these pointers only needs to be valid during
+device execution.
+All of these addresses will be read in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT access flag.
+
+Execution of this command may: modify any memory locations in the range
+[pname:scratch,pname:scratch + pname:size), where pname:size is the value
+returned in slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size by
+slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+execution graph pipeline.
+Accesses to this memory range are performed in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT and
+ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dispatch_graph_common.adoc[]
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09150]]
+    pname:pCountInfo->infos must: be a device pointer to a memory allocation
+    at least as large as the product of pname:count and pname:stride when
+    this command is executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09151]]
+    pname:pCountInfo->infos must: be a device address within a
+    slink:VkBuffer created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09152]]
+    pname:pCountInfo->infos must: be a multiple of
+    <<limits-executionGraphDispatchAddressAlignment,
+    pname:executionGraphDispatchAddressAlignment>>
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-infos-09153]]
+    Device memory locations at indexes in the range [pname:infos,
+    pname:infos + (pname:count*pname:stride)), at a granularity of
+    pname:stride must: contain valid slink:VkDispatchGraphInfoAMDX
+    structures in the first 24 bytes when this command is executed on the
+    device
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09154]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:payloads must: be a device pointer to a
+    memory allocation at least as large as the product of pname:payloadCount
+    and pname:payloadStride when this command is executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09155]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:payloads must: be a device address within
+    a slink:VkBuffer created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09156]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:payloads must: be a multiple of
+    <<limits-executionGraphDispatchAddressAlignment,
+    pname:executionGraphDispatchAddressAlignment>>
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09157]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, pname:nodeIndex must: be a valid node index in
+    the currently bound execution graph pipeline, as returned by
+    flink:vkGetExecutionGraphPipelineNodeIndexAMDX when this command is
+    executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09158]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:pCountInfo->infos, device memory locations at indexes in the range
+    [pname:payloads, pname:payloads + (pname:payloadCount *
+    pname:payloadStride)), at a granularity of pname:payloadStride must:
+    contain a payload matching the size of the input payload expected by the
+    node in pname:nodeIndex in the first bytes when this command is executed
+    on the device
+****
+
+include::{generated}/validity/protos/vkCmdDispatchGraphIndirectAMDX.adoc[]
+--
+
+[open,refpage='vkCmdDispatchGraphIndirectCountAMDX',desc='Dispatch an execution graph with all parameters read on the device',type='protos']
+--
+:refpage: vkCmdDispatchGraphIndirectCountAMDX
+
+To record an execution graph dispatch with all parameters read on device,
+call:
+
+include::{generated}/api/protos/vkCmdDispatchGraphIndirectCountAMDX.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:scratch is a pointer to the scratch memory to be used.
+  * pname:countInfo is a device address of a
+    slink:VkDispatchGraphCountInfoAMDX structure defining the nodes which
+    will be initially executed.
+
+When this command is executed, the nodes specified in pname:countInfo are
+executed.
+Nodes executed as part of this command are not implicitly synchronized in
+any way against each other once they are dispatched.
+
+For this command, all pointers in substructures are treated as device
+pointers and read during device execution of this command.
+The allocation and contents of these pointers only needs to be valid during
+device execution.
+All of these addresses will be read in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT access flag.
+
+Execution of this command may: modify any memory locations in the range
+[pname:scratch,pname:scratch + pname:size), where pname:size is the value
+returned in slink:VkExecutionGraphPipelineScratchSizeAMDX::pname:size by
+slink:VkExecutionGraphPipelineScratchSizeAMDX for the currently bound
+execution graph pipeline.
+Accesses to this memory range are performed in the
+ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT pipeline stage with the
+ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT and
+ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT access flags.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dispatch_graph_common.adoc[]
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09159]]
+    pname:countInfo must: be a device pointer to a memory allocation
+    containing a valid slink:VkDispatchGraphCountInfoAMDX structure when
+    this command is executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09160]]
+    pname:countInfo must: be a device address within a slink:VkBuffer
+    created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161]]
+    pname:countInfo must: be a multiple of
+    <<limits-executionGraphDispatchAddressAlignment,
+    pname:executionGraphDispatchAddressAlignment>>
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09162]]
+    pname:countInfo->infos must: be a device pointer to a memory allocation
+    at least as large as the product of pname:count and pname:stride when
+    this command is executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09163]]
+    pname:countInfo->infos must: be a device address within a slink:VkBuffer
+    created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164]]
+    pname:countInfo->infos must: be a multiple of
+    <<limits-executionGraphDispatchAddressAlignment,
+    pname:executionGraphDispatchAddressAlignment>>
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-infos-09165]]
+    Device memory locations at indexes in the range [pname:infos,
+    pname:infos + (pname:count*pname:stride)), at a granularity of
+    pname:stride must: contain valid slink:VkDispatchGraphInfoAMDX
+    structures in the first 24 bytes when this command is executed on the
+    device
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09166]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:countInfo->infos, pname:payloads must: be a device pointer to a
+    memory allocation at least as large as the product of pname:payloadCount
+    and pname:payloadStride when this command is executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09167]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:countInfo->infos, pname:payloads must: be a device address within
+    a slink:VkBuffer created with the
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:countInfo->infos, pname:payloads must: be a multiple of
+    <<limits-executionGraphDispatchAddressAlignment,
+    pname:executionGraphDispatchAddressAlignment>>
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09169]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:countInfo->infos, pname:nodeIndex must: be a valid node index in
+    the currently bound execution graph pipeline, as returned by
+    flink:vkGetExecutionGraphPipelineNodeIndexAMDX when this command is
+    executed on the device
+  * [[VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09170]]
+    For each slink:VkDispatchGraphInfoAMDX structure in
+    pname:countInfo->infos, device memory locations at indexes in the range
+    [pname:payloads, pname:payloads + (pname:payloadCount *
+    pname:payloadStride)), at a granularity of pname:payloadStride must:
+    contain a payload matching the size of the input payload expected by the
+    node in pname:nodeIndex in the first bytes when this command is executed
+    on the device
+****
+
+include::{generated}/validity/protos/vkCmdDispatchGraphIndirectCountAMDX.adoc[]
+--
+
+[open,refpage='VkDeviceOrHostAddressConstAMDX',desc='Union specifying a const device or host address',type='structs']
+--
+:refpage: VkDeviceOrHostAddressConstAMDX
+
+The sname:VkDeviceOrHostAddressConstAMDX union is defined as:
+
+include::{generated}/api/structs/VkDeviceOrHostAddressConstAMDX.adoc[]
+
+  * pname:deviceAddress is a buffer device address as returned by the
+    flink:vkGetBufferDeviceAddressKHR command.
+  * pname:hostAddress is a const host memory address.
+
+include::{generated}/validity/structs/VkDeviceOrHostAddressConstAMDX.adoc[]
+--
+
+[open,refpage='VkDispatchGraphCountInfoAMDX',desc='Structure specifying count parameters for execution graph dispatch',type='structs',xrefs='vkCmdDispatchGraphIndirectCountAMDX']
+--
+:refpage: VkDispatchGraphCountInfoAMDX
+
+The sname:VkDispatchGraphCountInfoAMDX structure is defined as:
+
+include::{generated}/api/structs/VkDispatchGraphCountInfoAMDX.adoc[]
+
+  * pname:count is the number of dispatches to perform.
+  * pname:infos is the device or host address of a flat array of
+    slink:VkDispatchGraphInfoAMDX structures
+  * pname:stride is the byte stride between successive
+    slink:VkDispatchGraphInfoAMDX structures in pname:infos
+
+Whether pname:infos is consumed as a device or host pointer is defined by
+the command this structure is used in.
+
+include::{generated}/validity/structs/VkDispatchGraphCountInfoAMDX.adoc[]
+--
+
+[open,refpage='VkDispatchGraphInfoAMDX',desc='Structure specifying node parameters for execution graph dispatch',type='structs',xrefs='VkDispatchGraphCountInfoAMDX']
+--
+:refpage: VkDispatchGraphInfoAMDX
+
+The sname:VkDispatchGraphInfoAMDX structure is defined as:
+
+include::{generated}/api/structs/VkDispatchGraphInfoAMDX.adoc[]
+
+  * pname:nodeIndex is the index of a node in an execution graph to be
+    dispatched.
+  * pname:payloadCount is the number of payloads to dispatch for the
+    specified node.
+  * pname:payloads is a device or host address pointer to a flat array of
+    payloads with size equal to the product of pname:payloadCount and
+    pname:payloadStride
+  * pname:payloadStride is the byte stride between successive payloads in
+    pname:payloads
+
+Whether pname:payloads is consumed as a device or host pointer is defined by
+the command this structure is used in.
+
+.Valid Usage
+****
+  * [[VUID-VkDispatchGraphInfoAMDX-payloadCount-09171]]
+    pname:payloadCount must: be no greater than
+    <<limits-maxExecutionGraphShaderPayloadCount,
+    pname:maxExecutionGraphShaderPayloadCount>>
+****
+
+include::{generated}/validity/structs/VkDispatchGraphInfoAMDX.adoc[]
+--
+
+
+== Shader Enqueue
+
+Compute shaders in an execution graph can: use the
+code:OpInitializeNodePayloadsAMDX to initialize nodes for dispatch.
+Any node payload initialized in this way will be enqueued for dispatch once
+the shader is done writing to the payload.
+As compilers may: be conservative when making this determination, shaders
+can: further call code:OpFinalizeNodePayloadsAMDX to guarantee that the
+payload is no longer being written.
+
+The code:Node code:Name operand of the code:PayloadNodeNameAMDX decoration
+on a payload identifies the shader name of the node to be enqueued, and the
+code:Shader code:Index operand of code:OpInitializeNodePayloadsAMDX
+identifies the shader index.
+A node identified in this way is dispatched as described in the following
+sections.
+
+
+=== Compute Nodes
+
+Compute shaders added as nodes to an execution graph are executed
+differently based on the presence or absence of the
+code:StaticNumWorkgroupsAMDX or code:CoalescingAMDX execution modes.
+
+Dispatching a compute shader node that does not declare either the
+code:StaticNumWorkgroupsAMDX or code:CoalescingAMDX execution mode will
+execute a number of workgroups in each dimension specified by the first 12
+bytes of the payload, interpreted as a slink:VkDispatchIndirectCommand.
+The same payload will be broadcast to each workgroup in the same dispatch.
+Additional values in the payload are have no effect on execution.
+
+Dispatching a compute shader node with the code:StaticNumWorkgroupsAMDX
+execution mode will execute workgroups in each dimension according to the
+code:x, code:y, and code:z code:size operands to the
+code:StaticNumWorkgroupsAMDX execution mode.
+The same payload will be broadcast to each workgroup in the same dispatch.
+Any values in the payload have no effect on execution.
+
+Dispatching a compute shader node with the code:CoalescingAMDX execution
+mode will enqueue a single invocation for execution.
+Implementations may: combine multiple such dispatches into the same
+workgroup, up to the size of the workgroup.
+The number of invocations coalesced into a given workgroup in this way can:
+be queried via the <<interfaces-builtin-variables-coalescedinputcountamd,
+code:CoalescedInputCountAMDX>> built-in.
+Any values in the payload have no effect on execution.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/extensions.adoc
new file mode 100644
index 0000000..5688937
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/extensions.adoc
@@ -0,0 +1,1060 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[extendingvulkan]]
+= Extending Vulkan
+
+New functionality may: be added to Vulkan via either new extensions or new
+versions of the core, or new versions of an extension in some cases.
+
+This chapter describes how Vulkan is versioned, how compatibility is
+affected between different versions, and compatibility rules that are
+followed by the Vulkan Working Group.
+
+
+[[extendingvulkan-instanceanddevicefunctionality]]
+== Instance and Device Functionality
+
+Commands that enumerate instance properties, or that accept a
+slink:VkInstance object as a parameter, are considered instance-level
+functionality.
+
+Commands that dispatch from a slink:VkDevice object or a child object of a
+slink:VkDevice, or take any of them as a parameter, are considered
+device-level functionality.
+Types defined by a <<extendingvulkan-device-extensions,device extension>>
+are also considered device-level functionality.
+
+Commands that dispatch from slink:VkPhysicalDevice, or accept a
+slink:VkPhysicalDevice object as a parameter, are considered either
+instance-level or device-level functionality depending if the functionality
+is specified by an <<extendingvulkan-instance-extensions,instance
+extension>> or <<extendingvulkan-device-extensions,device extension>>
+respectively.
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+Additionally, commands that enumerate physical device properties are
+considered device-level functionality.
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_VERSION_1_1[]
+[NOTE]
+.Note
+====
+Applications usually interface to Vulkan using a loader that implements only
+instance-level functionality, passing device-level functionality to
+implementations of the full Vulkan API on the system.
+In some circumstances, as these may be implemented independently, it is
+possible that the loader and device implementations on a given installation
+will support different versions.
+To allow for this and call out when it happens, the Vulkan specification
+enumerates device and instance level functionality separately - they have
+<<extendingvulkan-coreversions-queryingversionsupport,independent version
+queries>>.
+====
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[NOTE]
+.Note
+====
+Vulkan 1.0 initially specified new physical device enumeration functionality
+as instance-level, requiring it to be included in an instance extension.
+As the capabilities of device-level functionality require discovery via
+physical device enumeration, this led to the situation where many device
+extensions required an instance extension as well.
+To alleviate this extra work,
+`apiext:VK_KHR_get_physical_device_properties2` (and subsequently Vulkan
+1.1) redefined device-level functionality to include physical device
+enumeration.
+====
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+
+[[extendingvulkan-coreversions]]
+== Core Versions
+
+The Vulkan Specification is regularly updated with bug fixes and
+clarifications.
+Occasionally new functionality is added to the core and at some point it is
+expected that there will be a desire to perform a large, breaking change to
+the API.
+In order to indicate to developers how and when these changes are made to
+the specification, and to provide a way to identify each set of changes, the
+Vulkan API maintains a version number.
+
+
+[[extendingvulkan-coreversions-versionnumbers]]
+=== Version Numbers
+
+The Vulkan version number comprises four parts indicating the variant,
+major, minor and patch version of the Vulkan API Specification.
+
+The _variant_ indicates the variant of the Vulkan API supported by the
+implementation.
+ifndef::VKSC_VERSION_1_0[]
+This is always 0 for the Vulkan API.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+This is always 1 for the Vulkan SC API.
+The Base Vulkan API is variant 0.
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+A non-zero variant indicates the API is a variant of the Vulkan API and
+applications will typically need to be modified to run against it.
+The variant field was a later addition to the version number, added in
+version 1.2.175 of the
+ifdef::VKSC_VERSION_1_0[Base Vulkan]
+Specification.
+ifndef::VKSC_VERSION_1_0[]
+As Vulkan uses variant 0, this change is fully backwards compatible with the
+previous version number format for Vulkan implementations.
+New version number macros have been added for this change and the old macros
+deprecated.
+For existing applications using the older format and macros, an
+implementation with non-zero variant will decode as a very high Vulkan
+version.
+The high version number should be detectable by applications performing
+suitable version checking.
+endif::VKSC_VERSION_1_0[]
+====
+
+The _major version_ indicates a significant change in the API, which will
+encompass a wholly new version of the specification.
+
+The _minor version_ indicates the incorporation of new functionality into
+the core specification.
+
+The _patch version_ indicates bug fixes, clarifications, and language
+improvements have been incorporated into the specification.
+
+Compatibility guarantees made about versions of the API sharing any of the
+same version numbers are documented in
+<<extendingvulkan-compatibility-coreversions>>
+
+The version number is used in several places in the API.
+In each such use, the version numbers are packed into a 32-bit integer as
+follows:
+
+  * The variant is a 3-bit integer packed into bits 31-29.
+  * The major version is a 7-bit integer packed into bits 28-22.
+  * The minor version number is a 10-bit integer packed into bits 21-12.
+  * The patch version number is a 12-bit integer packed into bits 11-0.
+
+[open,refpage='VK_API_VERSION_VARIANT',desc='Extract API variant number',type='defines']
+--
+dname:VK_API_VERSION_VARIANT extracts the API variant number from a packed
+version number:
+
+include::{generated}/api/defines/VK_API_VERSION_VARIANT.adoc[]
+--
+
+[open,refpage='VK_API_VERSION_MAJOR',desc='Extract API major version number',type='defines']
+--
+dname:VK_API_VERSION_MAJOR extracts the API major version number from a
+packed version number:
+
+include::{generated}/api/defines/VK_API_VERSION_MAJOR.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='VK_VERSION_MAJOR',desc='Extract API major version number',type='defines']
+--
+dname:VK_VERSION_MAJOR extracts the API major version number from a packed
+version number:
+
+include::{generated}/api/defines/VK_VERSION_MAJOR.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VK_API_VERSION_MINOR',desc='Extract API minor version number',type='defines']
+--
+dname:VK_API_VERSION_MINOR extracts the API minor version number from a
+packed version number:
+
+include::{generated}/api/defines/VK_API_VERSION_MINOR.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='VK_VERSION_MINOR',desc='Extract API minor version number',type='defines']
+--
+dname:VK_VERSION_MINOR extracts the API minor version number from a packed
+version number:
+
+include::{generated}/api/defines/VK_VERSION_MINOR.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VK_API_VERSION_PATCH',desc='Extract API patch version number',type='defines']
+--
+dname:VK_API_VERSION_PATCH extracts the API patch version number from a
+packed version number:
+
+include::{generated}/api/defines/VK_API_VERSION_PATCH.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='VK_VERSION_PATCH',desc='Extract API patch version number',type='defines']
+--
+dname:VK_VERSION_PATCH extracts the API patch version number from a packed
+version number:
+
+include::{generated}/api/defines/VK_VERSION_PATCH.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VK_MAKE_API_VERSION',desc='Construct an API version number',type='defines',xrefs='VkApplicationInfo vkCreateInstance']
+--
+dname:VK_MAKE_API_VERSION constructs an API version number.
+
+include::{generated}/api/defines/VK_MAKE_API_VERSION.adoc[]
+
+  * pname:variant is the variant number.
+  * pname:major is the major version number.
+  * pname:minor is the minor version number.
+  * pname:patch is the patch version number.
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='VK_MAKE_VERSION',desc='Construct an API version number',type='defines',xrefs='VkApplicationInfo vkCreateInstance']
+--
+dname:VK_MAKE_VERSION constructs an API version number.
+
+include::{generated}/api/defines/VK_MAKE_VERSION.adoc[]
+
+  * pname:major is the major version number.
+  * pname:minor is the minor version number.
+  * pname:patch is the patch version number.
+--
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VK_API_VERSION_1_0',desc='Return API version number for Vulkan 1.0',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
+--
+dname:VK_API_VERSION_1_0 returns the API version number for Vulkan 1.0.0.
+
+include::{generated}/api/defines/VK_API_VERSION_1_0.adoc[]
+--
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VK_API_VERSION_1_1',desc='Return API version number for Vulkan 1.1',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
+--
+dname:VK_API_VERSION_1_1 returns the API version number for Vulkan 1.1.0.
+
+include::{generated}/api/defines/VK_API_VERSION_1_1.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_2[]
+[open,refpage='VK_API_VERSION_1_2',desc='Return API version number for Vulkan 1.2',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
+--
+dname:VK_API_VERSION_1_2 returns the API version number for Vulkan 1.2.0.
+
+include::{generated}/api/defines/VK_API_VERSION_1_2.adoc[]
+--
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_3[]
+[open,refpage='VK_API_VERSION_1_3',desc='Return API version number for Vulkan 1.3',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
+--
+dname:VK_API_VERSION_1_3 returns the API version number for Vulkan 1.3.0.
+
+include::{generated}/api/defines/VK_API_VERSION_1_3.adoc[]
+--
+endif::VK_VERSION_1_3[]
+
+ifdef::VKSC_VERSION_1_0[]
+[open,refpage='VKSC_API_VARIANT',desc='Returns the API variant number for Vulkan SC',type='defines']
+--
+dname:VKSC_API_VARIANT returns the API variant number for Vulkan SC.
+
+include::{generated}/api/defines/VKSC_API_VARIANT.adoc[]
+--
+
+[open,refpage='VKSC_API_VERSION_1_0',desc='Return API version number for Vulkan SC 1.0',type='defines',xrefs='vkCreateInstance vkGetPhysicalDeviceProperties']
+--
+dname:VKSC_API_VERSION_1_0 returns the API version number for Vulkan SC
+1.0.0.
+
+include::{generated}/api/defines/VKSC_API_VERSION_1_0.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+
+[[extendingvulkan-coreversions-queryingversionsupport]]
+=== Querying Version Support
+
+ifndef::VK_VERSION_1_1[]
+[NOTE]
+.Note
+====
+In Vulkan 1.0, there is no mechanism to detect the separate versions of
+<<extendingvulkan-instanceanddevicefunctionality,instance-level and
+device-level functionality>> supported.
+However, the fname:vkEnumerateInstanceVersion command was added in Vulkan
+1.1 to determine the supported version of instance-level functionality -
+querying for this function via flink:vkGetInstanceProcAddr will return
+`NULL` on implementations that only support Vulkan 1.0 functionality.
+For more information on this, please refer to the Vulkan 1.1 specification.
+====
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1[]
+The version of instance-level functionality can be queried by calling
+flink:vkEnumerateInstanceVersion.
+endif::VK_VERSION_1_1[]
+
+The version of device-level functionality can be queried by calling
+flink:vkGetPhysicalDeviceProperties
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+or flink:vkGetPhysicalDeviceProperties2,
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+and is returned in slink:VkPhysicalDeviceProperties::pname:apiVersion,
+encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
+
+
+[[extendingvulkan-layers]]
+== Layers
+
+When a layer is enabled, it inserts itself into the call chain for Vulkan
+commands the layer is interested in.
+Layers can: be used for a variety of tasks that extend the base behavior of
+Vulkan beyond what is required by the specification - such as call logging,
+tracing, validation, or providing additional extensions.
+
+[NOTE]
+.Note
+====
+For example, an implementation is not expected to check that the value of
+enums used by the application fall within allowed ranges.
+Instead, a validation layer would do those checks and flag issues.
+This avoids a performance penalty during production use of the application
+because those layers would not be enabled in production.
+====
+
+[NOTE]
+.Note
+====
+Vulkan layers may: wrap object handles (i.e. return a different handle value
+to the application than that generated by the implementation).
+This is generally discouraged, as it increases the probability of
+incompatibilities with new extensions.
+The validation layers wrap handles in order to track the proper use and
+destruction of each object.
+See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
+Interfaces`">> document for additional information.
+====
+
+[open,refpage='vkEnumerateInstanceLayerProperties',desc='Returns up to requested number of global layer properties',type='protos']
+--
+To query the available layers, call:
+
+include::{generated}/api/protos/vkEnumerateInstanceLayerProperties.adoc[]
+
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    layer properties available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkLayerProperties structures.
+
+If pname:pProperties is `NULL`, then the number of layer properties
+available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of layer properties
+available, at most pname:pPropertyCount structures will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available properties were returned.
+
+The list of available layers may change at any time due to actions outside
+of the Vulkan implementation, so two calls to
+fname:vkEnumerateInstanceLayerProperties with the same parameters may:
+return different results, or retrieve different pname:pPropertyCount values
+or pname:pProperties contents.
+Once an instance has been created, the layers enabled for that instance will
+continue to be enabled and valid for the lifetime of that instance, even if
+some of them become unavailable for future instances.
+
+include::{generated}/validity/protos/vkEnumerateInstanceLayerProperties.adoc[]
+--
+
+[open,refpage='VkLayerProperties',desc='Structure specifying layer properties',type='structs']
+--
+The sname:VkLayerProperties structure is defined as:
+
+include::{generated}/api/structs/VkLayerProperties.adoc[]
+
+  * pname:layerName is an array of ename:VK_MAX_EXTENSION_NAME_SIZE
+    code:char containing a null-terminated UTF-8 string which is the name of
+    the layer.
+    Use this name in the pname:ppEnabledLayerNames array passed in the
+    slink:VkInstanceCreateInfo structure to enable this layer for an
+    instance.
+  * pname:specVersion is the Vulkan version the layer was written to,
+    encoded as described in <<extendingvulkan-coreversions-versionnumbers>>.
+  * pname:implementationVersion is the version of this layer.
+    It is an integer, increasing with backward compatible changes.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which provides additional
+    details that can: be used by the application to identify the layer.
+
+include::{generated}/validity/structs/VkLayerProperties.adoc[]
+--
+
+[open,refpage='VK_MAX_EXTENSION_NAME_SIZE',desc='Maximum length of a layer of extension name string',type='consts']
+--
+ename:VK_MAX_EXTENSION_NAME_SIZE is the length in code:char values of an
+array containing a layer or extension name string, as returned in
+slink:VkLayerProperties::pname:layerName,
+slink:VkExtensionProperties::pname:extensionName, and other queries.
+
+include::{generated}/api/enums/VK_MAX_EXTENSION_NAME_SIZE.adoc[]
+--
+
+[open,refpage='VK_MAX_DESCRIPTION_SIZE',desc='Length of a driver name string',type='consts']
+--
+ename:VK_MAX_DESCRIPTION_SIZE is the length in code:char values of an array
+containing a string with additional descriptive information about a query,
+as returned in slink:VkLayerProperties::pname:description and other queries.
+
+include::{generated}/api/enums/VK_MAX_DESCRIPTION_SIZE.adoc[]
+--
+
+To enable a layer, the name of the layer should: be added to the
+pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo when creating
+a sname:VkInstance.
+
+Loader implementations may: provide mechanisms outside the Vulkan API for
+enabling specific layers.
+Layers enabled through such a mechanism are _implicitly enabled_, while
+layers enabled by including the layer name in the pname:ppEnabledLayerNames
+member of slink:VkInstanceCreateInfo are _explicitly enabled_.
+Implicitly enabled layers are loaded before explicitly enabled layers, such
+that implicitly enabled layers are closer to the application, and explicitly
+enabled layers are closer to the driver.
+Except where otherwise specified, implicitly enabled and explicitly enabled
+layers differ only in the way they are enabled, and the order in which they
+are loaded.
+Explicitly enabling a layer that is implicitly enabled results in this layer
+being loaded as an implicitly enabled layer; it has no additional effect.
+
+
+[[extendingvulkan-layers-devicelayerdeprecation]]
+=== Device Layer Deprecation
+
+Previous versions of this specification distinguished between instance and
+device layers.
+Instance layers were only able to intercept commands that operate on
+sname:VkInstance and sname:VkPhysicalDevice, except they were not able to
+intercept flink:vkCreateDevice.
+Device layers were enabled for individual devices when they were created,
+and could only intercept commands operating on that device or its child
+objects.
+
+Device-only layers are now deprecated, and this specification no longer
+distinguishes between instance and device layers.
+Layers are enabled during instance creation, and are able to intercept all
+commands operating on that instance or any of its child objects.
+At the time of deprecation there were no known device-only layers and no
+compelling reason to create one.
+
+ifndef::VKSC_VERSION_1_0[]
+In order to maintain compatibility with implementations released prior to
+device-layer deprecation, applications should: still enumerate and enable
+device layers.
+The behavior of fname:vkEnumerateDeviceLayerProperties and valid usage of
+the pname:ppEnabledLayerNames member of slink:VkDeviceCreateInfo maximizes
+compatibility with applications written to work with the previous
+requirements.
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='vkEnumerateDeviceLayerProperties',desc='Returns properties of available physical device layers',type='protos']
+--
+:refpage: vkEnumerateDeviceLayerProperties
+
+To enumerate device layers, call:
+
+include::{generated}/api/protos/vkEnumerateDeviceLayerProperties.adoc[]
+
+  * pname:physicalDevice is the physical device that will be queried.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    layer properties available or queried.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkLayerProperties structures.
+
+ifndef::VKSC_VERSION_1_0[]
+If pname:pProperties is `NULL`, then the number of layer properties
+available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of layer properties
+available, at most pname:pPropertyCount structures will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available properties were returned.
+
+The list of layers enumerated by fname:vkEnumerateDeviceLayerProperties
+must: be exactly the sequence of layers enabled for the instance.
+The members of sname:VkLayerProperties for each enumerated layer must: be
+the same as the properties when the layer was enumerated by
+fname:vkEnumerateInstanceLayerProperties.
+
+[NOTE]
+.Note
+====
+Due to platform details on Android, fname:vkEnumerateDeviceLayerProperties
+may be called with pname:physicalDevice equal to `NULL` during layer
+discovery.
+This behaviour will only be observed by layer implementations, and not the
+underlying Vulkan driver.
+====
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+Physical device layers are not supported.
+pname:pPropertyCount is set to `0` and ename:VK_SUCCESS is returned.
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkEnumerateDeviceLayerProperties.adoc[]
+--
+
+The pname:ppEnabledLayerNames and pname:enabledLayerCount members of
+slink:VkDeviceCreateInfo are deprecated and their values must: be ignored by
+implementations.
+ifndef::VKSC_VERSION_1_0[]
+However, for compatibility, only an empty list of layers or a list that
+exactly matches the sequence enabled at instance creation time are valid,
+and validation layers should: issue diagnostics for other cases.
+
+Regardless of the enabled layer list provided in slink:VkDeviceCreateInfo,
+the
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[The]
+sequence of layers active for a device will be exactly the sequence of
+layers enabled when the parent instance was created.
+
+
+[[extendingvulkan-extensions]]
+== Extensions
+
+Extensions may: define new Vulkan commands, structures, and enumerants.
+For compilation purposes, the interfaces defined by registered extensions,
+including new structures and enumerants as well as function pointer types
+for new commands, are defined in the Khronos-supplied `{core_header}`
+together with the core API.
+However, commands defined by extensions may: not be available for static
+linking - in which case function pointers to these commands should: be
+queried at runtime as described in <<initialization-functionpointers>>.
+Extensions may: be provided by layers as well as by a Vulkan implementation.
+
+Because extensions may: extend or change the behavior of the Vulkan API,
+extension authors should: add support for their extensions to the Khronos
+validation layers.
+This is especially important for new commands whose parameters have been
+wrapped by the validation layers.
+See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
+Interfaces`">> document for additional information.
+
+[NOTE]
+.Note
+====
+To enable an instance extension, the name of the extension can: be added to
+the pname:ppEnabledExtensionNames member of slink:VkInstanceCreateInfo when
+creating a sname:VkInstance.
+
+To enable a device extension, the name of the extension can: be added to the
+pname:ppEnabledExtensionNames member of slink:VkDeviceCreateInfo when
+creating a sname:VkDevice.
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+Physical-Device-Level functionality does not have any enabling mechanism and
+can: be used as long as the slink:VkPhysicalDevice supports the device
+extension as determined by flink:vkEnumerateDeviceExtensionProperties.
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+Enabling an extension (with no further use of that extension) does not
+change the behavior of functionality exposed by the core Vulkan API or any
+other extension, other than making valid the use of the commands, enums and
+structures defined by that extension.
+
+Valid Usage sections for individual commands and structures do not currently
+contain which extensions have to be enabled in order to make their use
+valid, although they might do so in the future.
+It is defined only in the <<fundamentals-validusage-extensions>> section.
+====
+
+
+[[extendingvulkan-instance-extensions]]
+=== Instance Extensions
+
+Instance extensions add new
+<<extendingvulkan-instanceanddevicefunctionality,instance-level
+functionality>> to the API, outside of the core specification.
+
+[open,refpage='vkEnumerateInstanceExtensionProperties',desc='Returns up to requested number of global extension properties',type='protos']
+--
+To query the available instance extensions, call:
+
+include::{generated}/api/protos/vkEnumerateInstanceExtensionProperties.adoc[]
+
+  * pname:pLayerName is either `NULL` or a pointer to a null-terminated
+    UTF-8 string naming the layer to retrieve extensions from.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    extension properties available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkExtensionProperties structures.
+
+When pname:pLayerName parameter is `NULL`, only extensions provided by the
+Vulkan implementation or by implicitly enabled layers are returned.
+When pname:pLayerName is the name of a layer, the instance extensions
+provided by that layer are returned.
+
+If pname:pProperties is `NULL`, then the number of extensions properties
+available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of extension properties
+available, at most pname:pPropertyCount structures will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available properties were returned.
+
+Because the list of available layers may change externally between calls to
+flink:vkEnumerateInstanceExtensionProperties, two calls may retrieve
+different results if a pname:pLayerName is available in one call but not in
+another.
+The extensions supported by a layer may also change between two calls, e.g.
+if the layer implementation is replaced by a different version between those
+calls.
+
+Implementations must: not advertise any pair of extensions that cannot be
+enabled together due to behavioral differences, or any extension that cannot
+be enabled against the advertised version.
+
+include::{generated}/validity/protos/vkEnumerateInstanceExtensionProperties.adoc[]
+--
+
+
+[[extendingvulkan-device-extensions]]
+=== Device Extensions
+
+Device extensions add new
+<<extendingvulkan-instanceanddevicefunctionality,device-level
+functionality>> to the API, outside of the core specification.
+
+[open,refpage='vkEnumerateDeviceExtensionProperties',desc='Returns properties of available physical device extensions',type='protos']
+--
+:refpage: vkEnumerateDeviceExtensionProperties
+
+To query the extensions available to a given physical device, call:
+
+include::{generated}/api/protos/vkEnumerateDeviceExtensionProperties.adoc[]
+
+  * pname:physicalDevice is the physical device that will be queried.
+  * pname:pLayerName is either `NULL` or a pointer to a null-terminated
+    UTF-8 string naming the layer to retrieve extensions from.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    extension properties available or queried, and is treated in the same
+    fashion as the
+    flink:vkEnumerateInstanceExtensionProperties::pname:pPropertyCount
+    parameter.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkExtensionProperties structures.
+
+When pname:pLayerName parameter is `NULL`, only extensions provided by the
+Vulkan implementation or by implicitly enabled layers are returned.
+When pname:pLayerName is the name of a layer, the device extensions provided
+by that layer are returned.
+
+Implementations must: not advertise any pair of extensions that cannot be
+enabled together due to behavioral differences, or any extension that cannot
+be enabled against the advertised version.
+
+ifdef::VK_VERSION_1_3[]
+Implementations claiming support for the <<roadmap-2022, Roadmap 2022>>
+profile must: advertise the `apiext:VK_KHR_global_priority` extension in
+pname:pProperties.
+endif::VK_VERSION_1_3[]
+
+[NOTE]
+.Note
+====
+Due to platform details on Android,
+fname:vkEnumerateDeviceExtensionProperties may be called with
+pname:physicalDevice equal to `NULL` during layer discovery.
+This behaviour will only be observed by layer implementations, and not the
+underlying Vulkan driver.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkEnumerateDeviceExtensionProperties.adoc[]
+--
+
+[open,refpage='VkExtensionProperties',desc='Structure specifying an extension properties',type='structs']
+--
+The sname:VkExtensionProperties structure is defined as:
+
+include::{generated}/api/structs/VkExtensionProperties.adoc[]
+
+  * pname:extensionName is an array of ename:VK_MAX_EXTENSION_NAME_SIZE
+    code:char containing a null-terminated UTF-8 string which is the name of
+    the extension.
+  * pname:specVersion is the version of this extension.
+    It is an integer, incremented with backward compatible changes.
+
+include::{generated}/validity/structs/VkExtensionProperties.adoc[]
+--
+
+[[extendingvulkan-accessing-device-physical-device]]
+==== Accessing Device-Level Functionality From a slink:VkPhysicalDevice
+
+Some device extensions also add support for physical-device-level
+functionality.
+Physical-device-level functionality can: be used, if the required extension
+is supported as advertised by flink:vkEnumerateDeviceExtensionProperties for
+a given slink:VkPhysicalDevice.
+
+[[extendingvulkan-accessing-device-logical-device]]
+==== Accessing Device-Level Functionality From a slink:VkDevice
+
+For commands that are dispatched from a slink:VkDevice, or from a child
+object of a slink:VkDevice, device extensions must: be enabled in
+flink:vkCreateDevice.
+
+[[extendingvulkan-extensions-extensiondependencies]]
+== Extension Dependencies
+
+Some extensions are dependent on other extensions, or on specific core API
+versions, to function.
+To enable extensions with dependencies, any _required extensions_ must: also
+be enabled through the same API mechanisms when creating an instance with
+flink:vkCreateInstance or a device with flink:vkCreateDevice.
+Each extension which has such dependencies documents them in the
+<<extensions, appendix summarizing that extension>>.
+
+If an extension is supported (as queried by
+flink:vkEnumerateInstanceExtensionProperties or
+flink:vkEnumerateDeviceExtensionProperties), then _required extensions_ of
+that extension must: also be supported for the same instance or physical
+device.
+
+Any device extension that has an instance extension dependency that is not
+enabled by flink:vkCreateInstance is considered to be unsupported, hence it
+must: not be returned by flink:vkEnumerateDeviceExtensionProperties for any
+slink:VkPhysicalDevice child of the instance.
+Instance extensions do not have dependencies on device extensions.
+
+If a required extension has been <<extendingvulkan-compatibility-promotion,
+promoted>> to another extension or to a core API version, then as a
+_general_ rule, the dependency is also satisfied by the promoted extension
+or core version.
+This will be true so long as any features required by the original extension
+are also required or enabled by the promoted extension or core version.
+However, in some cases an extension is promoted while making some of its
+features optional in the promoted extension or core version.
+In this case, the dependency may: not be satisfied.
+The only way to be certain is to look at the descriptions of the original
+dependency and the promoted version in the <<extensions, Layers &
+Extensions>> and <<versions, Core Revisions>> appendices.
+
+[NOTE]
+.Note
+====
+There is metadata in `vk.xml` describing some aspects of promotion,
+especially `requires`, `promotedto` and `deprecatedby` attributes of
+`<extension>` tags.
+However, the metadata does not yet fully describe this scenario.
+In the future, we may extend the XML schema to describe the full set of
+extensions and versions satisfying a dependency.
+====
+
+
+== Compatibility Guarantees (Informative)
+
+This section is marked as informal as there is no binding responsibility on
+implementations of the Vulkan API - these guarantees are however a contract
+between the Vulkan Working Group and developers using this Specification.
+
+
+[[extendingvulkan-compatibility-coreversions]]
+=== Core Versions
+
+Each of the <<extendingvulkan-coreversions,major, minor, and patch
+versions>> of the Vulkan specification provide different compatibility
+guarantees.
+
+
+==== Patch Versions
+
+A difference in the patch version indicates that a set of bug fixes or
+clarifications have been made to the Specification.
+Informative enums returned by Vulkan commands that will not affect the
+runtime behavior of a valid application may be added in a patch version
+(e.g. elink:VkVendorId).
+
+The specification's patch version is strictly increasing for a given major
+version of the specification; any change to a specification as described
+above will result in the patch version being increased by 1.
+Patch versions are applied to all minor versions, even if a given minor
+version is not affected by the provoking change.
+
+Specifications with different patch versions but the same major and minor
+version are _fully compatible_ with each other - such that a valid
+application written against one will work with an implementation of another.
+
+[NOTE]
+.Note
+====
+If a patch version includes a bug fix or clarification that could have a
+significant impact on developer expectations, these will be highlighted in
+the change log.
+Generally the Vulkan Working Group tries to avoid these kinds of changes,
+instead fixing them in either an extension or core version.
+====
+
+
+==== Minor Versions
+
+Changes in the minor version of the specification indicate that new
+functionality has been added to the core specification.
+This will usually include new interfaces in the header, and may: also
+include behavior changes and bug fixes.
+Core functionality may: be deprecated in a minor version, but will not be
+obsoleted or removed.
+
+The specification's minor version is strictly increasing for a given major
+version of the specification; any change to a specification as described
+above will result in the minor version being increased by 1.
+Changes that can be accommodated in a patch version will not increase the
+minor version.
+
+Specifications with a lower minor version are _backwards compatible_ with an
+implementation of a specification with a higher minor version for core
+functionality and extensions issued with the KHR vendor tag.
+Vendor and multi-vendor extensions are not guaranteed to remain functional
+across minor versions, though in general they are with few exceptions - see
+<<extendingvulkan-compatibility-obsoletion>> for more information.
+
+
+==== Major Versions
+
+A difference in the major version of specifications indicates a large set of
+changes which will likely include interface changes, behavioral changes,
+removal of <<extendingvulkan-compatibility-deprecation,deprecated
+functionality>>, and the modification, addition, or replacement of other
+functionality.
+
+The specification's major version is monotonically increasing; any change to
+the specification as described above will result in the major version being
+increased.
+Changes that can be accommodated in a patch or minor version will not
+increase the major version.
+
+The Vulkan Working Group intends to only issue a new major version of the
+Specification in order to realise significant improvements to the Vulkan API
+that will necessarily require breaking compatibility.
+
+A new major version will likely include a wholly new version of the
+specification to be issued - which could include an overhaul of the
+versioning semantics for the minor and patch versions.
+The patch and minor versions of a specification are therefore not meaningful
+across major versions.
+If a major version of the specification includes similar versioning
+semantics, it is expected that the patch and the minor version will be reset
+to 0 for that major version.
+
+
+[[extendingvulkan-compatibility-extensions]]
+=== Extensions
+
+A KHR extension must: be able to be enabled alongside any other KHR
+extension, and for any minor or patch version of the core Specification
+beyond the minimum version it requires.
+A multi-vendor extension should: be able to be enabled alongside any KHR
+extension or other multi-vendor extension, and for any minor or patch
+version of the core Specification beyond the minimum version it requires.
+A vendor extension should: be able to be enabled alongside any KHR
+extension, multi-vendor extension, or other vendor extension from the same
+vendor, and for any minor or patch version of the core Specification beyond
+the minimum version it requires.
+A vendor extension may: be able to be enabled alongside vendor extensions
+from another vendor.
+
+The one other exception to this is if a vendor or multi-vendor extension is
+<<extendingvulkan-compatibility-obsoletion, made obsolete>> by either a core
+version or another extension, which will be highlighted in the
+<<extensions,extension appendix>>.
+
+
+[[extendingvulkan-compatibility-promotion]]
+==== Promotion
+
+Extensions, or features of an extension, may: be promoted to a new
+<<versions,core version of the API>>, or a newer extension which an equal or
+greater number of implementors are in favour of.
+
+When extension functionality is promoted, minor changes may: be introduced,
+limited to the following:
+
+  * Naming
+  * Non-intrusive parameters changes
+  * <<features, Feature advertisement/enablement>>
+  * Combining structure parameters into larger structures
+  * Author ID suffixes changed or removed
+
+[NOTE]
+.Note
+====
+If extension functionality is promoted, there is no guarantee of direct
+compatibility, however it should require little effort to port code from the
+original feature to the promoted one.
+
+The Vulkan Working Group endeavours to ensure that larger changes are marked
+as either <<extendingvulkan-compatibility-deprecation, deprecated>> or
+<<extendingvulkan-compatibility-obsoletion, obsoleted>> as appropriate, and
+can do so retroactively if necessary.
+====
+
+Extensions that are promoted are listed as being promoted in their extension
+appendices, with reference to where they were promoted to.
+
+When an extension is promoted, any backwards compatibility aliases which
+exist in the extension will *not* be promoted.
+
+[NOTE]
+.Note
+====
+As a hypothetical example, if the `apiext:VK_KHR_surface` extension were
+promoted to part of a future core version, the
+ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR token defined by that extension
+would be promoted to etext:VK_COLOR_SPACE_SRGB_NONLINEAR.
+However, the etext:VK_COLORSPACE_SRGB_NONLINEAR_KHR token aliases
+ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
+The etext:VK_COLORSPACE_SRGB_NONLINEAR_KHR would not be promoted, because it
+is a backwards compatibility alias that exists only due to a naming mistake
+when the extension was initially published.
+====
+
+
+[[extendingvulkan-compatibility-deprecation]]
+==== Deprecation
+
+Extensions may: be marked as deprecated when the intended use cases either
+become irrelevant or can be solved in other ways.
+Generally, a new feature will become available to solve the use case in
+another extension or core version of the API, but it is not guaranteed.
+
+[NOTE]
+.Note
+====
+Features that are intended to replace deprecated functionality have no
+guarantees of compatibility, and applications may require drastic
+modification in order to make use of the new features.
+====
+
+Extensions that are deprecated are listed as being deprecated in their
+extension appendices, with an explanation of the deprecation and any
+features that are relevant.
+
+
+[[extendingvulkan-compatibility-obsoletion]]
+==== Obsoletion
+
+Occasionally, an extension will be marked as obsolete if a new version of
+the core API or a new extension is fundamentally incompatible with it.
+An obsoleted extension must: not be used with the extension or core version
+that obsoleted it.
+
+Extensions that are obsoleted are listed as being obsoleted in their
+extension appendices, with reference to what they were obsoleted by.
+
+
+[[extendingvulkan-compatibility-aliases]]
+==== Aliases
+
+When an extension is promoted or deprecated by a newer feature, some or all
+of its functionality may: be replicated into the newer feature.
+Rather than duplication of all the documentation and definitions, the
+specification instead identifies the identical commands and types as
+_aliases_ of one another.
+Each alias is mentioned together with the definition it aliases, with the
+older aliases marked as "`equivalents`".
+Each alias of the same command has identical behavior, and each alias of the
+same type has identical meaning - they can be used interchangeably in an
+application with no compatibility issues.
+
+[NOTE]
+.Note
+====
+For promoted types, the aliased extension type is semantically identical to
+the new core type.
+The C99 headers simply `typedef` the older aliases to the promoted types.
+
+For promoted command aliases, however, there are two separate entry point
+definitions, due to the fact that the C99 ABI has no way to alias command
+definitions without resorting to macros.
+Calling via either entry point definition will produce identical behavior
+within the bounds of the specification, and should still invoke the same
+entry point in the implementation.
+Debug tools may use separate entry points with different debug behavior; to
+write the appropriate command name to an output log, for instance.
+====
+
+
+[[extendingvulkan-compatibility-specialuse]]
+==== Special Use Extensions
+
+Some extensions exist only to support a specific purpose or specific class
+of application.
+These are referred to as "`special use extensions`".
+Use of these extensions in applications not meeting the special use criteria
+is not recommended.
+
+Special use cases are restricted, and only those defined below are used to
+describe extensions:
+
+// The attributes in the "Special Use" column are defined in
+// config/attribs.adoc, and used in reference pages as well as here.
+// They define human-readable names for corresponding XML attribute values,
+// so specialuse="cadsupport" -> "CAD Support". They are used in the table
+// here and in the ExtensionMetaDocGenerator script that produces metadata
+// includes for extension appendices. When introducing a new special use,
+// the attribute and the table must both be extended.
+
+[[extendingvulkan-specialuse-table]]
+.Extension Special Use Cases
+[width="100%",options="header",cols="25%,15%,60%"]
+|====
+| Special Use    | XML Tag      | Full Description
+| {cadsupport}   | cadsupport
+    | Extension is intended to support specialized functionality used by
+      CAD/CAM applications.
+| {d3demulation} | d3demulation
+    | Extension is intended to support D3D emulation layers, and
+      applications ported from D3D, by adding functionality specific to D3D.
+| {devtools}     | devtools
+    | Extension is intended to support developer tools such as
+      capture-replay libraries.
+| {debugging}    | debugging
+    | Extension is intended for use by applications when debugging.
+| {glemulation}  | glemulation
+    | Extension is intended to support OpenGL and/or OpenGL ES emulation
+      layers, and applications ported from those APIs, by adding
+      functionality specific to those APIs.
+|====
+
+Special use extensions are identified in the metadata for each such
+extension in the <<extensions, Layers & Extensions>> appendix, using the
+name in the "`Special Use`" column above.
+
+Special use extensions are also identified in `vk.xml` with the short name
+in "`XML Tag`" column above, as described in the "`API Extensions
+(`extension` tag)`" section of the <<vulkan-registry, registry schema
+documentation>>.
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/fault_handling.adoc b/codegen/vulkan/vulkan-docs-next/chapters/fault_handling.adoc
new file mode 100644
index 0000000..4c2f7c2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/fault_handling.adoc
@@ -0,0 +1,331 @@
+// Copyright (c) 2014-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[[fault-handling]]
+== Fault Handling
+
+The fault handling mechanism provides a method for the implementation to
+pass fault information to the application.
+A fault indicates that an issue has occurred with the host or device that
+could impact the implementation's ability to function correctly.
+It consists of a slink:VkFaultData structure that is used to communicate
+information about the fault between the implementation and the application,
+with two methods to obtain the data.
+The application can: obtain the fault data from the implementation using
+flink:vkGetFaultData.
+Alternatively, the implementation can: directly call a pre-registered fault
+handler function (tlink:PFN_vkFaultCallbackFunction) in the application when
+a fault occurs.
+
+The sname:VkFaultData structure provides categories the implementation must:
+set to provide basic information on a fault.
+These allow the implementation to provide a coarse classification of a fault
+to the application.
+As the potential faults that could occur will vary between different
+platforms, it is expected that an implementation would also provide
+additional implementation-specific data on the fault, enabling the
+application to take appropriate action.
+
+The implementation must: also define whether a particular fault results in
+the fault callback function being called, is communicated via
+flink:vkGetFaultData, or both.
+This will be decided by several factors including:
+
+  * the severity of the fault,
+  * the application's ability to handle the fault, and
+  * how the application should handle the fault.
+
+The implementation must: document the implementation-specific fault data,
+how the faults are communicated, and expected responses from the application
+for each of the faults that it can: report.
+
+[[fault-data]]
+=== Fault Data
+
+[open,refpage='VkFaultData',desc='structure describing fault data',type='structs']
+--
+The information on a single fault is returned using the sname:VkFaultData
+structure.
+The sname:VkFaultData structure is defined as:
+
+include::{generated}/api/structs/VkFaultData.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure that provides implementation-specific data on the fault.
+  * pname:faultLevel is a elink:VkFaultLevel that provides the severity of
+    the fault.
+  * pname:faultType is a elink:VkFaultType that provides the type of the
+    fault.
+
+To retrieve implementation-specific fault data, pname:pNext can: point to
+one or more implementation-defined fault structures or `NULL` to not
+retrieve implementation-specific data.
+
+.Valid Usage
+****
+  * [[VUID-VkFaultData-pNext-05019]]
+    pname:pNext must: be `NULL` or a valid pointer to an
+    implementation-specific structure
+****
+
+include::{generated}/validity/structs/VkFaultData.adoc[]
+
+--
+
+[open,refpage='VkFaultLevel',desc='The different fault severity levels that can be returned',type='enums']
+--
+Possible values of slink:VkFaultData::pname:faultLevel, specifying the fault
+severity, are:
+
+include::{generated}/api/enums/VkFaultLevel.adoc[]
+
+  * ename:VK_FAULT_LEVEL_UNASSIGNED A fault level has not been assigned.
+  * ename:VK_FAULT_LEVEL_CRITICAL A fault that cannot: be recovered by the
+    application.
+  * ename:VK_FAULT_LEVEL_RECOVERABLE A fault that can: be recovered by the
+    application.
+  * ename:VK_FAULT_LEVEL_WARNING A fault that indicates a non-optimal
+    condition has occurred, but no recovery is necessary at this point.
+
+--
+
+[open,refpage='VkFaultType',desc='The different fault types that can be returned',type='enums']
+--
+
+Possible values of slink:VkFaultData::pname:faultType, specifying the fault
+type, are:
+
+include::{generated}/api/enums/VkFaultType.adoc[]
+
+  * ename:VK_FAULT_TYPE_INVALID The fault data does not contain a valid
+    fault.
+  * ename:VK_FAULT_TYPE_UNASSIGNED A fault type has not been assigned.
+  * ename:VK_FAULT_TYPE_IMPLEMENTATION Implementation-defined fault.
+  * ename:VK_FAULT_TYPE_SYSTEM A fault occurred in the system components.
+  * ename:VK_FAULT_TYPE_PHYSICAL_DEVICE A fault occurred with the physical
+    device.
+  * ename:VK_FAULT_TYPE_COMMAND_BUFFER_FULL Command buffer memory was
+    exhausted before flink:vkEndCommandBuffer was called.
+  * ename:VK_FAULT_TYPE_INVALID_API_USAGE Invalid usage of the API was
+    detected by the implementation.
+--
+
+
+[[querrying-fault]]
+=== Querying Fault Status
+
+[open,refpage='vkGetFaultData',desc='Query fault information',type='protos']
+--
+:refpage: vkGetFaultData
+
+To query the number of current faults and obtain the fault data, call
+flink:vkGetFaultData.
+
+include::{generated}/api/protos/vkGetFaultData.adoc[]
+
+  * pname:device is the logical device to obtain faults from.
+  * pname:faultQueryBehavior is a elink:VkFaultQueryBehavior that specifies
+    the types of faults to obtain from the implementation, and how those
+    faults should be handled.
+  * pname:pUnrecordedFaults is a return boolean that specifies if the logged
+    fault information is incomplete and does not contain entries for all
+    faults that have been detected by the implementation and may: be
+    reported via flink:vkGetFaultData.
+  * pname:pFaultCount is a pointer to an integer that specifies the number
+    of fault entries.
+  * pname:pFaults is either `NULL` or a pointer to an array of
+    pname:pFaultCount slink:VkFaultData structures to be updated with the
+    recorded fault data.
+
+Access to fault data is internally synchronized, meaning
+flink:vkGetFaultData can: be called from multiple threads simultaneously.
+
+The implementation must: not record more than <<limits-maxQueryFaultCount,
+pname:maxQueryFaultCount>> faults to be reported by flink:vkGetFaultData.
+
+pname:pUnrecordedFaults is set to ename:VK_TRUE if the implementation has
+detected one or more faults since the last successful retrieval of fault
+data using this command, but was unable to record fault information for all
+faults.
+Otherwise, pname:pUnrecordedFaults is set to ename:VK_FALSE.
+
+If pname:pFaults is `NULL`, then the number of faults with the specified
+pname:faultQueryBehavior characteristics associated with pname:device is
+returned in pname:pFaultCount, and pname:pUnrecordedFaults is set as
+indicated above.
+Otherwise, pname:pFaultCount must: point to a variable set by the user to
+the number of elements in the pname:pFaults array, and on return the
+variable is overwritten with the number of faults actually written to
+pname:pFaults.
+If pname:pFaultCount is less than the number of recorded pname:device faults
+with the specified pname:faultQueryBehavior characteristics, at most
+pname:pFaultCount faults will be written, and ename:VK_INCOMPLETE will be
+returned instead of ename:VK_SUCCESS, to indicate that not all the available
+faults were returned.
+
+On success, the fault information stored by the implementation for the
+faults that were returned will be handled as specified by
+pname:faultQueryBehavior.
+
+For each filled pname:pFaults entry, if pname:pNext is not `NULL`, the
+implementation will fill in any implementation-specific structures
+applicable to that fault that are included in the pname:pNext chain.
+
+[NOTE]
+.Note
+====
+In order to simplify the application logic, an application could have a
+static allocation sized to <<limits-maxQueryFaultCount,
+pname:maxQueryFaultCount>> which it passes in to each call of
+flink:vkGetFaultData.
+This allows an application to obtain all the faults available at this time
+in a single call to flink:vkGetFaultData.
+Furthermore, under this usage pattern, the command will never return
+ename:VK_INCOMPLETE.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetFaultData-pFaultCount-05020]]
+    pname:pFaultCount must: be less than or equal to
+    <<limits-maxQueryFaultCount,pname:maxQueryFaultCount>>
+****
+
+include::{generated}/validity/protos/vkGetFaultData.adoc[]
+--
+
+
+[open,refpage='VkFaultQueryBehavior',desc='Controls how the faults are retrieved by vkGetFaultData',type='enums']
+--
+Possible values that can: be set in elink:VkFaultQueryBehavior, specifying
+which faults to return, are:
+
+include::{generated}/api/enums/VkFaultQueryBehavior.adoc[]
+
+  * ename:VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS All fault types
+    and severities are reported and are cleared from the internal fault
+    storage after retrieval.
+
+--
+
+[[fault-callback]]
+=== Fault Callback
+
+The slink:VkFaultCallbackInfo structure allows an application to register a
+function at device creation that the implementation can call to report
+faults when they occur.
+A callback function is registered by attaching a valid
+sname:VkFaultCallbackInfo structure to the pname:pNext chain of the
+slink:VkDeviceCreateInfo structure.
+The callback function is only called by the implementation during a call to
+the API, using the same thread that is making the API call.
+The sname:VkFaultCallbackInfo structure provides the function pointer to be
+called by the implementation, and optionally, application memory to store
+fault data.
+
+[open,refpage='VkFaultCallbackInfo',desc='Fault call back information',type='structs']
+--
+
+The sname:VkFaultCallbackInfo structure is defined as:
+
+include::{generated}/api/structs/VkFaultCallbackInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or pointer to a structure extending this
+    structure.
+  * pname:faultCount is the number of reported faults in the array pointed
+    to by pname:pFaults.
+  * pname:pFaults is either `NULL` or a pointer to an array of
+    pname:faultCount slink:VkFaultData structures.
+  * pname:pfnFaultCallback is a function pointer to the fault handler
+    function that will be called by the implementation when a fault occurs.
+
+If provided, the implementation may: make use of the pname:pFaults array to
+return fault data to the application when using the fault callback.
+
+[NOTE]
+.Note
+====
+Prior to Vulkan SC 1.0.11, the application was required to provide the
+pname:pFaults array for fault callback data.
+This proved to be unwieldy for both applications and implementations and it
+was made optional as of version 1.0.11.
+It is expected that most implementations will ignore this and use stack or
+other preallocated memory for fault callback parameters.
+====
+
+If provided, the application memory referenced by pname:pFaults must: remain
+accessible throughout the lifetime of the logical device that was created
+with this structure.
+
+[NOTE]
+.Note
+====
+The memory pointed to by pname:pFaults will be updated by the implementation
+and should not be used or accessed by the application outside of the fault
+handling function pointed to by pname:pfnFaultCallback.
+This restriction also applies to any implementation-specific structure
+chained to an element of pname:pFaults by pname:pNext.
+
+It is expected that implementations will maintain separate storage for fault
+information and populate the array pointed to by pname:pFaults ahead of
+calling the fault callback function.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkFaultCallbackInfo-faultCount-05138]]
+    pname:faultCount must: either be 0, or equal to
+    <<limits-maxCallbackFaultCount,
+    sname:VkPhysicalDeviceVulkanSC10Properties::pname:maxCallbackFaultCount>>
+****
+
+include::{generated}/validity/structs/VkFaultCallbackInfo.adoc[]
+--
+
+[open,refpage='PFN_vkFaultCallbackFunction',desc='Fault Callback Function',type='funcpointers']
+--
+
+The function pointer tlink:PFN_vkFaultCallbackFunction is defined as:
+
+include::{generated}/api/funcpointers/PFN_vkFaultCallbackFunction.adoc[]
+
+  * pname:unrecordedFaults is a boolean that specifies if the supplied fault
+    information is incomplete and does not contain entries for all faults
+    that have been detected by the implementation and may: be reported via
+    tlink:PFN_vkFaultCallbackFunction since the last call to this callback.
+  * pname:faultCount will contain the number of reported faults in the array
+    pointed to by pname:pFaults.
+  * pname:pFaults will point to an array of pname:faultCount
+    slink:VkFaultData structures containing the fault information.
+
+An implementation must: only make calls to pname:pfnFaultCallback during the
+execution of an API command.
+An implementation must: only make calls into the application-provided fault
+callback from the same thread that called the API command.
+The implementation should: not synchronize calls to the callback.
+If synchronization is needed, the callback must: provide it.
+
+The fault callback must: not call any Vulkan commands.
+
+It is implementation-dependent whether faults reported by this callback are
+also reported via flink:vkGetFaultData, but each unique fault will be
+reported by at most one callback.
+--
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkFaultData <<SCID-6>>
+  * slink:VkFaultCallbackInfo <<SCID-6>>
+  * elink:VkFaultLevel <<SCID-6>>
+  * elink:VkFaultType <<SCID-6>>
+  * elink:VkFaultQueryBehavior <<SCID-6>>
+  * tlink:PFN_vkFaultCallbackFunction <<SCID-6>>
+  * flink:vkGetFaultData <<SCID-6>>
+// end::scaddition[]
+endif::hidden[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/features.adoc b/codegen/vulkan/vulkan-docs-next/chapters/features.adoc
new file mode 100644
index 0000000..aafd60c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/features.adoc
@@ -0,0 +1,8105 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This text fragment is used many times in the Features chapter.
+ifdef::hidden[]
+// tag::features[]
+If the sname:{refpage} structure is included in the pname:pNext chain of the
+slink:VkPhysicalDeviceFeatures2 structure passed to
+flink:vkGetPhysicalDeviceFeatures2, it is filled in to indicate whether each
+corresponding feature is supported.
+sname:{refpage} can: also be used in the pname:pNext chain of
+slink:VkDeviceCreateInfo to selectively enable these features.
+// end::features[]
+endif::hidden[]
+
+
+[[features]]
+= Features
+
+_Features_ describe functionality which is not supported on all
+implementations.
+Features are properties of the physical device.
+Features are optional:, and must: be explicitly enabled before use.
+Support for features is reported and enabled on a per-feature basis.
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[NOTE]
+.Note
+====
+Features are reported via the basic slink:VkPhysicalDeviceFeatures
+structure, as well as the extensible structure
+sname:VkPhysicalDeviceFeatures2, which was added in the
+`apiext:VK_KHR_get_physical_device_properties2` extension and included in
+Vulkan 1.1.
+When new features are added in future Vulkan versions or extensions, each
+extension should: introduce one new feature structure, if needed.
+This structure can: be added to the pname:pNext chain of the
+sname:VkPhysicalDeviceFeatures2 structure.
+====
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+For convenience, new core versions of Vulkan may: introduce new unified
+feature structures for features promoted from extensions.
+At the same time, the extension's original feature structure (if any) is
+also promoted to the core API, and is an alias of the extension's structure.
+This results in multiple names for the same feature: in the original
+extension's feature structure and the promoted structure alias, in the
+unified feature structure.
+When a feature was implicitly supported and enabled in the extension, but an
+explicit name was added during promotion, then the extension itself acts as
+an alias for the feature as listed in the table below.
+
+All aliases of the same feature in the core API must: be reported
+consistently: either all must: be reported as supported, or none of them.
+When a promoted extension is available, any corresponding feature aliases
+must: be supported.
+
+[[features-extension-aliases]]
+.Extension Feature Aliases
+
+// Jon 1.3 TBD - add any appropriate extensions promoted to 1.3
+[width="100%",options="header"]
+|====
+| Extension                                    | Feature(s)
+ifdef::VK_VERSION_1_2[]
+ifdef::VK_KHR_shader_draw_parameters[]
+| `apiext:VK_KHR_shader_draw_parameters`       | <<features-shaderDrawParameters, pname:shaderDrawParameters>>
+endif::VK_KHR_shader_draw_parameters[]
+ifdef::VK_KHR_draw_indirect_count[]
+| `apiext:VK_KHR_draw_indirect_count`          | <<features-drawIndirectCount, pname:drawIndirectCount>>
+endif::VK_KHR_draw_indirect_count[]
+ifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
+| `apiext:VK_KHR_sampler_mirror_clamp_to_edge` | <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>
+endif::VK_KHR_sampler_mirror_clamp_to_edge[]
+ifdef::VK_EXT_descriptor_indexing[]
+| `apiext:VK_EXT_descriptor_indexing`          | <<features-descriptorIndexing, pname:descriptorIndexing>>
+endif::VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_sampler_filter_minmax[]
+| `apiext:VK_EXT_sampler_filter_minmax`        | <<features-samplerFilterMinmax, pname:samplerFilterMinmax>>
+endif::VK_EXT_sampler_filter_minmax[]
+ifdef::VK_EXT_shader_viewport_index_layer[]
+| `apiext:VK_EXT_shader_viewport_index_layer`  | <<features-shaderOutputViewportIndex, pname:shaderOutputViewportIndex>>, <<features-shaderOutputLayer, pname:shaderOutputLayer>>
+endif::VK_EXT_shader_viewport_index_layer[]
+endif::VK_VERSION_1_2[]
+|====
+
+[open,refpage='vkGetPhysicalDeviceFeatures',desc='Reports capabilities of a physical device',type='protos']
+--
+To query supported features, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceFeatures.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    supported features.
+  * pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures
+    structure in which the physical device features are returned.
+    For each feature, a value of ename:VK_TRUE specifies that the feature is
+    supported on this physical device, and ename:VK_FALSE specifies that the
+    feature is not supported.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures.adoc[]
+--
+
+Fine-grained features used by a logical device must: be enabled at
+sname:VkDevice creation time.
+If a feature is enabled that the physical device does not support,
+sname:VkDevice creation will fail and return
+ename:VK_ERROR_FEATURE_NOT_PRESENT.
+
+The fine-grained features are enabled by passing a pointer to the
+sname:VkPhysicalDeviceFeatures structure via the pname:pEnabledFeatures
+member of the slink:VkDeviceCreateInfo structure that is passed into the
+fname:vkCreateDevice call.
+If a member of pname:pEnabledFeatures is set to ename:VK_TRUE or
+ename:VK_FALSE, then the device will be created with the indicated feature
+enabled or disabled, respectively.
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+Features can: also be enabled by using the slink:VkPhysicalDeviceFeatures2
+structure.
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+If an application wishes to enable all features supported by a device, it
+can: simply pass in the sname:VkPhysicalDeviceFeatures structure that was
+previously returned by fname:vkGetPhysicalDeviceFeatures.
+To disable an individual feature, the application can: set the desired
+member to ename:VK_FALSE in the same structure.
+Setting pname:pEnabledFeatures to `NULL`
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+and not including a slink:VkPhysicalDeviceFeatures2 in the pname:pNext chain
+of slink:VkDeviceCreateInfo
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+is equivalent to setting all members of the structure to ename:VK_FALSE.
+
+[NOTE]
+.Note
+====
+Some features, such as pname:robustBufferAccess, may: incur a runtime
+performance cost.
+Application writers should: carefully consider the implications of enabling
+all supported features.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[open,refpage='vkGetPhysicalDeviceFeatures2',desc='Reports capabilities of a physical device',type='protos']
+--
+To query supported features defined by the core or extensions, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    supported features.
+  * pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures2
+    structure in which the physical device features are returned.
+
+Each structure in pname:pFeatures and its pname:pNext chain contains members
+corresponding to fine-grained features.
+fname:vkGetPhysicalDeviceFeatures2 writes each member to a boolean value
+indicating whether that feature is supported.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures2.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceFeatures2',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFeatures2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFeatures2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceFeatures2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:features is a slink:VkPhysicalDeviceFeatures structure describing
+    the fine-grained features of the Vulkan 1.0 API.
+
+The pname:pNext chain of this structure is used to extend the structure with
+features defined by extensions.
+This structure can: be used in flink:vkGetPhysicalDeviceFeatures2 or can: be
+included in the pname:pNext chain of a slink:VkDeviceCreateInfo structure,
+in which case it controls which features are enabled on the device in lieu
+of pname:pEnabledFeatures.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFeatures2.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+[open,refpage='VkPhysicalDeviceFeatures',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFeatures.adoc[]
+
+This structure describes the following features:
+
+  * [[features-robustBufferAccess]] pname:robustBufferAccess specifies that
+    accesses to buffers are bounds-checked against the range of the buffer
+    descriptor (as determined by sname:VkDescriptorBufferInfo::pname:range,
+    slink:VkBufferViewCreateInfo::pname:range, or the size of the buffer).
+    Out of bounds accesses must: not cause application termination, and the
+    effects of shader loads, stores, and atomics must: conform to an
+    implementation-dependent behavior as described below.
+  ** A buffer access is considered to be out of bounds if any of the
+     following are true:
+  *** The pointer was formed by code:OpImageTexelPointer and the coordinate
+      is less than zero or greater than or equal to the number of whole
+      elements in the bound range.
+  *** The pointer was not formed by code:OpImageTexelPointer and the object
+      pointed to is not wholly contained within the bound range.
+ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
+      This includes accesses performed via _variable pointers_ where the
+      buffer descriptor being accessed cannot be statically determined.
+      Uninitialized pointers and pointers equal to code:OpConstantNull are
+      treated as pointing to a zero-sized object, so all accesses through
+      such pointers are considered to be out of bounds.
+endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+      Buffer accesses through buffer device addresses are not
+      bounds-checked.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_NV_cooperative_matrix[]
+  *** If the <<features-cooperativeMatrixRobustBufferAccess-NV,
+      sname:VkPhysicalDeviceCooperativeMatrixFeaturesNV::pname:cooperativeMatrixRobustBufferAccess>>
+      feature is not enabled, then accesses using
+      code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
+      may: not be bounds-checked.
+endif::VK_NV_cooperative_matrix[]
+ifdef::VK_KHR_cooperative_matrix[]
+  *** If the <<features-cooperativeMatrixRobustBufferAccess,
+      sname:VkPhysicalDeviceCooperativeMatrixFeaturesKHR::pname:cooperativeMatrixRobustBufferAccess>>
+      feature is not enabled, then accesses using
+      code:OpCooperativeMatrixLoadKHR and code:OpCooperativeMatrixStoreKHR
+      may: not be bounds-checked.
+endif::VK_KHR_cooperative_matrix[]
++
+[NOTE]
+.Note
+====
+If a SPIR-V code:OpLoad instruction loads a structure and the tail end of
+the structure is out of bounds, then all members of the structure are
+considered out of bounds even if the members at the end are not statically
+used.
+====
+
+  *** If
+ifdef::VK_EXT_robustness2[]
+      <<features-robustBufferAccess2, pname:robustBufferAccess2>> is not
+      enabled and
+endif::VK_EXT_robustness2[]
+      any buffer access is determined to be out of bounds, then any other
+      access of the same type (load, store, or atomic) to the same buffer
+      that accesses an address less than 16 bytes away from the out of
+      bounds address may: also be considered out of bounds.
+  *** If the access is a load that reads from the same memory locations as a
+      prior store in the same shader invocation, with no other intervening
+      accesses to the same memory locations in that shader invocation, then
+      the result of the load may: be the value stored by the store
+      instruction, even if the access is out of bounds.
+      If the load is code:Volatile, then an out of bounds load must: return
+      the appropriate out of bounds value.
+ifdef::VK_EXT_robustness2[]
+  ** Accesses to descriptors written with a dlink:VK_NULL_HANDLE resource or
+     view are not considered to be out of bounds.
+     Instead, each type of descriptor access defines a specific behavior for
+     accesses to a null descriptor.
+endif::VK_EXT_robustness2[]
+  ** Out-of-bounds buffer loads will return any of the following values:
+ifdef::VK_EXT_robustness2[]
+  *** If the access is to a uniform buffer and
+      <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, loads of offsets between the end of the descriptor range and
+      the end of the descriptor range rounded up to a multiple of
+      <<limits-robustUniformBufferAccessSizeAlignment,
+      pname:robustUniformBufferAccessSizeAlignment>> bytes must: return
+      either zero values or the contents of the memory at the offset being
+      loaded.
+      Loads of offsets past the descriptor range rounded up to a multiple of
+      <<limits-robustUniformBufferAccessSizeAlignment,
+      pname:robustUniformBufferAccessSizeAlignment>> bytes must: return zero
+      values.
+  *** If the access is to a storage buffer and
+      <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, loads of offsets between the end of the descriptor range and
+      the end of the descriptor range rounded up to a multiple of
+      <<limits-robustStorageBufferAccessSizeAlignment,
+      pname:robustStorageBufferAccessSizeAlignment>> bytes must: return
+      either zero values or the contents of the memory at the offset being
+      loaded.
+      Loads of offsets past the descriptor range rounded up to a multiple of
+      <<limits-robustStorageBufferAccessSizeAlignment,
+      pname:robustStorageBufferAccessSizeAlignment>> bytes must: return zero
+      values.
+      Similarly, stores to addresses between the end of the descriptor range
+      and the end of the descriptor range rounded up to a multiple of
+      <<limits-robustStorageBufferAccessSizeAlignment,
+      pname:robustStorageBufferAccessSizeAlignment>> bytes may: be
+      discarded.
+  *** Non-atomic accesses to storage buffers that are a multiple of 32 bits
+      may: be decomposed into 32-bit accesses that are individually
+      bounds-checked.
+  *** If the access is to an index buffer and
+      <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, zero values must: be returned.
+  *** If the access is to a uniform texel buffer or storage texel buffer and
+      <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, zero values must: be returned, and then
+      <<textures-conversion-to-rgba,Conversion to RGBA>> is applied based on
+      the buffer view's format.
+endif::VK_EXT_robustness2[]
+  *** Values from anywhere within the memory range(s) bound to the buffer
+      (possibly including bytes of memory past the end of the buffer, up to
+      the end of the bound range).
+  *** Zero values, or [eq]#(0,0,0,x)# vectors for vector reads where x is a
+      valid value represented in the type of the vector components and may:
+      be any of:
+  **** 0, 1, or the maximum representable positive integer value, for signed
+       or unsigned integer components
+  **** 0.0 or 1.0, for floating-point components
+  ** Out-of-bounds writes may: modify values within the memory range(s)
+     bound to the buffer, but must: not modify any other memory.
+ifdef::VK_EXT_robustness2[]
+  *** If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, out of bounds writes must: not modify any memory.
+endif::VK_EXT_robustness2[]
+  ** Out-of-bounds atomics may: modify values within the memory range(s)
+     bound to the buffer, but must: not modify any other memory, and return
+     an undefined: value.
+ifdef::VK_EXT_robustness2[]
+  *** If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+      enabled, out of bounds atomics must: not modify any memory, and return
+      an undefined: value.
+  ** If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+     disabled, vertex
+endif::VK_EXT_robustness2[]
+ifndef::VK_EXT_robustness2[]
+  ** Vertex
+endif::VK_EXT_robustness2[]
+     input attributes are considered out of bounds if the offset of the
+     attribute in the bound vertex buffer range plus the size of the
+     attribute is greater than either:
++
+  *** code:vertexBufferRangeSize, if [eq]#code:bindingStride == 0#; or
+  *** [eq]#(code:vertexBufferRangeSize - (code:vertexBufferRangeSize %
+      code:bindingStride))#
++
+where code:vertexBufferRangeSize is the byte size of the memory range bound
+to the vertex buffer binding and code:bindingStride is the byte stride of
+the corresponding vertex input binding.
+Further, if any vertex input attribute using a specific vertex input binding
+is out of bounds, then all vertex input attributes using that vertex input
+binding for that vertex shader invocation are considered out of bounds.
+  *** If a vertex input attribute is out of bounds, it will be assigned one
+      of the following values:
+  **** Values from anywhere within the memory range(s) bound to the buffer,
+       converted according to the format of the attribute.
+  **** Zero values, format converted according to the format of the
+       attribute.
+  **** Zero values, or [eq]#(0,0,0,x)# vectors, as described above.
+ifdef::VK_EXT_robustness2[]
+  ** If <<features-robustBufferAccess2, pname:robustBufferAccess2>> is
+     enabled, vertex input attributes are considered out of bounds if the
+     offset of the attribute in the bound vertex buffer range plus the size
+     of the attribute is greater than the byte size of the memory range
+     bound to the vertex buffer binding.
+  *** If a vertex input attribute is out of bounds, the
+      <<fxvertex-input-extraction,raw data>> extracted are zero values, and
+      missing G, B, or A components are <<fxvertex-input-extraction,filled
+      with [eq]#(0,0,1)#>>.
+endif::VK_EXT_robustness2[]
+  ** If pname:robustBufferAccess is not enabled, applications must: not
+     perform out of bounds accesses
+ifdef::VK_EXT_pipeline_robustness[]
+     except under the conditions enabled by the
+     <<features-pipelineRobustness, pname:pipelineRobustness>> feature
+endif::VK_EXT_pipeline_robustness[]
+     .
+  * [[features-fullDrawIndexUint32]] pname:fullDrawIndexUint32 specifies the
+    full 32-bit range of indices is supported for indexed draw calls when
+    using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.
+    pname:maxDrawIndexedIndexValue is the maximum index value that may: be
+    used (aside from the primitive restart index, which is always 2^32^-1
+    when the elink:VkIndexType is ename:VK_INDEX_TYPE_UINT32).
+    If this feature is supported, pname:maxDrawIndexedIndexValue must: be
+    2^32^-1; otherwise it must: be no smaller than 2^24^-1.
+    See <<limits-maxDrawIndexedIndexValue, pname:maxDrawIndexedIndexValue>>.
+  * [[features-imageCubeArray]] pname:imageCubeArray specifies whether image
+    views with a elink:VkImageViewType of
+    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can: be created, and that the
+    corresponding code:SampledCubeArray and code:ImageCubeArray SPIR-V
+    capabilities can: be used in shader code.
+  * [[features-independentBlend]] pname:independentBlend specifies whether
+    the sname:VkPipelineColorBlendAttachmentState settings are controlled
+    independently per-attachment.
+    If this feature is not enabled, the
+    sname:VkPipelineColorBlendAttachmentState settings for all color
+    attachments must: be identical.
+    Otherwise, a different sname:VkPipelineColorBlendAttachmentState can: be
+    provided for each bound color attachment.
+  * [[features-geometryShader]] pname:geometryShader specifies whether
+    geometry shaders are supported.
+    If this feature is not enabled, the ename:VK_SHADER_STAGE_GEOMETRY_BIT
+    and ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT enum values must: not be
+    used.
+    This also specifies whether shader modules can: declare the
+    code:Geometry capability.
+  * [[features-tessellationShader]] pname:tessellationShader specifies
+    whether tessellation control and evaluation shaders are supported.
+    If this feature is not enabled, the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, and
+    ename:VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO enum
+    values must: not be used.
+    This also specifies whether shader modules can: declare the
+    code:Tessellation capability.
+  * [[features-sampleRateShading]] pname:sampleRateShading specifies whether
+    <<primsrast-sampleshading,Sample Shading>> and multisample interpolation
+    are supported.
+    If this feature is not enabled, the pname:sampleShadingEnable member of
+    the slink:VkPipelineMultisampleStateCreateInfo structure must: be set to
+    ename:VK_FALSE and the pname:minSampleShading member is ignored.
+    This also specifies whether shader modules can: declare the
+    code:SampleRateShading capability.
+  * [[features-dualSrcBlend]] pname:dualSrcBlend specifies whether blend
+    operations which take two sources are supported.
+    If this feature is not enabled, the ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA enum values must: not be used
+    as source or destination blending factors.
+    See <<framebuffer-dsb>>.
+  * [[features-logicOp]] pname:logicOp specifies whether logic operations
+    are supported.
+    If this feature is not enabled, the pname:logicOpEnable member of the
+    slink:VkPipelineColorBlendStateCreateInfo structure must: be set to
+    ename:VK_FALSE, and the pname:logicOp member is ignored.
+  * [[features-multiDrawIndirect]] pname:multiDrawIndirect specifies whether
+    multiple draw indirect is supported.
+    If this feature is not enabled, the pname:drawCount parameter to the
+    fname:vkCmdDrawIndirect and fname:vkCmdDrawIndexedIndirect commands
+    must: be 0 or 1.
+    The pname:maxDrawIndirectCount member of the
+    sname:VkPhysicalDeviceLimits structure must: also be 1 if this feature
+    is not supported.
+    See <<limits-maxDrawIndirectCount, pname:maxDrawIndirectCount>>.
+  * [[features-drawIndirectFirstInstance]] pname:drawIndirectFirstInstance
+    specifies whether indirect drawing calls support the pname:firstInstance
+    parameter.
+    If this feature is not enabled, the pname:firstInstance member of all
+    sname:VkDrawIndirectCommand and sname:VkDrawIndexedIndirectCommand
+    structures that are provided to the fname:vkCmdDrawIndirect and
+    fname:vkCmdDrawIndexedIndirect commands must: be 0.
+  * [[features-depthClamp]] pname:depthClamp specifies whether depth
+    clamping is supported.
+    If this feature is not enabled, the pname:depthClampEnable member of the
+    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
+    ename:VK_FALSE.
+    Otherwise, setting pname:depthClampEnable to ename:VK_TRUE will enable
+    depth clamping.
+  * [[features-depthBiasClamp]] pname:depthBiasClamp specifies whether depth
+    bias clamping is supported.
+    If this feature is not enabled, the pname:depthBiasClamp member of the
+    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
+    0.0 unless the ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state is
+    enabled, and the pname:depthBiasClamp parameter to
+    fname:vkCmdSetDepthBias must: be set to 0.0.
+  * [[features-fillModeNonSolid]] pname:fillModeNonSolid specifies whether
+    point and wireframe fill modes are supported.
+    If this feature is not enabled, the ename:VK_POLYGON_MODE_POINT and
+    ename:VK_POLYGON_MODE_LINE enum values must: not be used.
+  * [[features-depthBounds]] pname:depthBounds specifies whether depth
+    bounds tests are supported.
+    If this feature is not enabled, the pname:depthBoundsTestEnable member
+    of the slink:VkPipelineDepthStencilStateCreateInfo structure must: be
+    set to ename:VK_FALSE.
+    When pname:depthBoundsTestEnable is set to ename:VK_FALSE, the
+    pname:minDepthBounds and pname:maxDepthBounds members of the
+    slink:VkPipelineDepthStencilStateCreateInfo structure are ignored.
+  * [[features-wideLines]] pname:wideLines specifies whether lines with
+    width other than 1.0 are supported.
+    If this feature is not enabled, the pname:lineWidth member of the
+    slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
+    1.0 unless the ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state is
+    enabled, and the pname:lineWidth parameter to fname:vkCmdSetLineWidth
+    must: be set to 1.0.
+    When this feature is supported, the range and granularity of supported
+    line widths are indicated by the pname:lineWidthRange and
+    pname:lineWidthGranularity members of the sname:VkPhysicalDeviceLimits
+    structure, respectively.
+  * [[features-largePoints]] pname:largePoints specifies whether points with
+    size greater than 1.0 are supported.
+    If this feature is not enabled, only a point size of 1.0 written by a
+    shader is supported.
+    The range and granularity of supported point sizes are indicated by the
+    pname:pointSizeRange and pname:pointSizeGranularity members of the
+    sname:VkPhysicalDeviceLimits structure, respectively.
+  * [[features-alphaToOne]] pname:alphaToOne specifies whether the
+    implementation is able to replace the alpha value of the fragment shader
+    color output in the <<fragops-covg, Multisample Coverage>> fragment
+    operation.
+    If this feature is not enabled, then the pname:alphaToOneEnable member
+    of the slink:VkPipelineMultisampleStateCreateInfo structure must: be set
+    to ename:VK_FALSE.
+    Otherwise setting pname:alphaToOneEnable to ename:VK_TRUE will enable
+    alpha-to-one behavior.
+  * [[features-multiViewport]] pname:multiViewport specifies whether more
+    than one viewport is supported.
+    If this feature is not enabled:
+  ** The pname:viewportCount and pname:scissorCount members of the
+     slink:VkPipelineViewportStateCreateInfo structure must: be set to 1.
+  ** The pname:firstViewport and pname:viewportCount parameters to the
+     fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
+  ** The pname:firstScissor and pname:scissorCount parameters to the
+     fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
+ifdef::VK_NV_scissor_exclusive[]
+  ** The pname:exclusiveScissorCount member of the
+     slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
+     must: be set to 0 or 1.
+  ** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
+     parameters to the fname:vkCmdSetExclusiveScissorNV command must: be set
+     to 0 and 1, respectively.
+endif::VK_NV_scissor_exclusive[]
+  * [[features-samplerAnisotropy]] pname:samplerAnisotropy specifies whether
+    anisotropic filtering is supported.
+    If this feature is not enabled, the pname:anisotropyEnable member of the
+    slink:VkSamplerCreateInfo structure must: be ename:VK_FALSE.
+  * [[features-textureCompressionETC2]] pname:textureCompressionETC2
+    specifies whether all of the ETC2 and EAC compressed texture formats are
+    supported.
+    If this feature is enabled, then the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
+    be supported in pname:optimalTilingFeatures for the following formats:
++
+  ** ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
+  ** ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+  ** ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
+  ** ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+  ** ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
+  ** ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+  ** ename:VK_FORMAT_EAC_R11_UNORM_BLOCK
+  ** ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
+  ** ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK
+  ** ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
++
+To query for additional properties, or if the feature is not enabled,
+flink:vkGetPhysicalDeviceFormatProperties and
+flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
+supported properties of individual formats as normal.
+
+  * [[features-textureCompressionASTC_LDR]] pname:textureCompressionASTC_LDR
+    specifies whether all of the ASTC LDR compressed texture formats are
+    supported.
+    If this feature is enabled, then the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
+    be supported in pname:optimalTilingFeatures for the following formats:
++
+  ** ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
++
+To query for additional properties, or if the feature is not enabled,
+flink:vkGetPhysicalDeviceFormatProperties and
+flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
+supported properties of individual formats as normal.
+
+  * [[features-textureCompressionBC]] pname:textureCompressionBC specifies
+    whether all of the BC compressed texture formats are supported.
+    If this feature is enabled, then the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
+    be supported in pname:optimalTilingFeatures for the following formats:
++
+  ** ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
+  ** ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
+  ** ename:VK_FORMAT_BC2_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC2_SRGB_BLOCK
+  ** ename:VK_FORMAT_BC3_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC3_SRGB_BLOCK
+  ** ename:VK_FORMAT_BC4_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC4_SNORM_BLOCK
+  ** ename:VK_FORMAT_BC5_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC5_SNORM_BLOCK
+  ** ename:VK_FORMAT_BC6H_UFLOAT_BLOCK
+  ** ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_BC7_UNORM_BLOCK
+  ** ename:VK_FORMAT_BC7_SRGB_BLOCK
++
+To query for additional properties, or if the feature is not enabled,
+flink:vkGetPhysicalDeviceFormatProperties and
+flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
+supported properties of individual formats as normal.
+
+  * [[features-occlusionQueryPrecise]] pname:occlusionQueryPrecise specifies
+    whether occlusion queries returning actual sample counts are supported.
+    Occlusion queries are created in a sname:VkQueryPool by specifying the
+    pname:queryType of ename:VK_QUERY_TYPE_OCCLUSION in the
+    slink:VkQueryPoolCreateInfo structure which is passed to
+    fname:vkCreateQueryPool.
+    If this feature is enabled, queries of this type can: enable
+    ename:VK_QUERY_CONTROL_PRECISE_BIT in the pname:flags parameter to
+    fname:vkCmdBeginQuery.
+    If this feature is not supported, the implementation supports only
+    boolean occlusion queries.
+    When any samples are passed, boolean queries will return a non-zero
+    result value, otherwise a result value of zero is returned.
+    When this feature is enabled and ename:VK_QUERY_CONTROL_PRECISE_BIT is
+    set, occlusion queries will report the actual number of samples passed.
+  * [[features-pipelineStatisticsQuery]] pname:pipelineStatisticsQuery
+    specifies whether the pipeline statistics queries are supported.
+    If this feature is not enabled, queries of type
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS cannot: be created, and none of
+    the elink:VkQueryPipelineStatisticFlagBits bits can: be set in the
+    pname:pipelineStatistics member of the slink:VkQueryPoolCreateInfo
+    structure.
+  * [[features-vertexPipelineStoresAndAtomics]]
+    pname:vertexPipelineStoresAndAtomics specifies whether storage buffers
+    and images support stores and atomic operations in the vertex,
+    tessellation, and geometry shader stages.
+    If this feature is not enabled, all storage image, storage texel buffer,
+    and storage buffer variables used by these stages in shader modules
+    must: be decorated with the code:NonWritable decoration (or the
+    code:readonly memory qualifier in GLSL).
+  * [[features-fragmentStoresAndAtomics]] pname:fragmentStoresAndAtomics
+    specifies whether storage buffers and images support stores and atomic
+    operations in the fragment shader stage.
+    If this feature is not enabled, all storage image, storage texel buffer,
+    and storage buffer variables used by the fragment stage in shader
+    modules must: be decorated with the code:NonWritable decoration (or the
+    code:readonly memory qualifier in GLSL).
+  * [[features-shaderTessellationAndGeometryPointSize]]
+    pname:shaderTessellationAndGeometryPointSize specifies whether the
+    code:PointSize built-in decoration is available in the tessellation
+    control, tessellation evaluation, and geometry shader stages.
+    If this feature is not enabled, members decorated with the
+    code:PointSize built-in decoration must: not be read from or written to
+    and all points written from a tessellation or geometry shader will have
+    a size of 1.0.
+    This also specifies whether shader modules can: declare the
+    code:TessellationPointSize capability for tessellation control and
+    evaluation shaders, or if the shader modules can: declare the
+    code:GeometryPointSize capability for geometry shaders.
+    An implementation supporting this feature must: also support one or both
+    of the <<features-tessellationShader, pname:tessellationShader>> or
+    <<features-geometryShader, pname:geometryShader>> features.
+  * [[features-shaderImageGatherExtended]] pname:shaderImageGatherExtended
+    specifies whether the extended set of image gather instructions are
+    available in shader code.
+    If this feature is not enabled, the code:OpImage*Gather instructions do
+    not support the code:Offset and code:ConstOffsets operands.
+    This also specifies whether shader modules can: declare the
+    code:ImageGatherExtended capability.
+  * [[features-shaderStorageImageExtendedFormats]]
+    pname:shaderStorageImageExtendedFormats specifies whether all the
+    "`storage image extended formats`" below are supported; if this feature
+    is supported, then the ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT must:
+    be supported in pname:optimalTilingFeatures for the following formats:
++
+  ** ename:VK_FORMAT_R16G16_SFLOAT
+  ** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+  ** ename:VK_FORMAT_R16_SFLOAT
+  ** ename:VK_FORMAT_R16G16B16A16_UNORM
+  ** ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+  ** ename:VK_FORMAT_R16G16_UNORM
+  ** ename:VK_FORMAT_R8G8_UNORM
+  ** ename:VK_FORMAT_R16_UNORM
+  ** ename:VK_FORMAT_R8_UNORM
+  ** ename:VK_FORMAT_R16G16B16A16_SNORM
+  ** ename:VK_FORMAT_R16G16_SNORM
+  ** ename:VK_FORMAT_R8G8_SNORM
+  ** ename:VK_FORMAT_R16_SNORM
+  ** ename:VK_FORMAT_R8_SNORM
+  ** ename:VK_FORMAT_R16G16_SINT
+  ** ename:VK_FORMAT_R8G8_SINT
+  ** ename:VK_FORMAT_R16_SINT
+  ** ename:VK_FORMAT_R8_SINT
+  ** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
+  ** ename:VK_FORMAT_R16G16_UINT
+  ** ename:VK_FORMAT_R8G8_UINT
+  ** ename:VK_FORMAT_R16_UINT
+  ** ename:VK_FORMAT_R8_UINT
++
+[NOTE]
+.Note
+====
+pname:shaderStorageImageExtendedFormats feature only adds a guarantee of
+format support, which is specified for the whole physical device.
+Therefore enabling or disabling the feature via flink:vkCreateDevice has no
+practical effect.
+
+To query for additional properties, or if the feature is not supported,
+flink:vkGetPhysicalDeviceFormatProperties and
+flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
+supported properties of individual formats, as usual rules allow.
+
+ename:VK_FORMAT_R32G32_UINT, ename:VK_FORMAT_R32G32_SINT, and
+ename:VK_FORMAT_R32G32_SFLOAT from code:StorageImageExtendedFormats SPIR-V
+capability, are already covered by core Vulkan
+<<formats-mandatory-features-32bit,mandatory format support>>.
+====
+
+  * [[features-shaderStorageImageMultisample]]
+    pname:shaderStorageImageMultisample specifies whether multisampled
+    storage images are supported.
+    If this feature is not enabled, images that are created with a
+    pname:usage that includes ename:VK_IMAGE_USAGE_STORAGE_BIT must: be
+    created with pname:samples equal to ename:VK_SAMPLE_COUNT_1_BIT.
+    This also specifies whether shader modules can: declare the
+    code:StorageImageMultisample and code:ImageMSArray capabilities.
+  * [[features-shaderStorageImageReadWithoutFormat]]
+    pname:shaderStorageImageReadWithoutFormat specifies whether storage
+    images and storage texel buffers require a format qualifier to be
+    specified when reading.
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    pname:shaderStorageImageReadWithoutFormat applies only to formats listed
+    in the <<formats-without-shader-storage-format,storage without format>>
+    list.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[features-shaderStorageImageWriteWithoutFormat]]
+    pname:shaderStorageImageWriteWithoutFormat specifies whether storage
+    images and storage texel buffers require a format qualifier to be
+    specified when writing.
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    pname:shaderStorageImageWriteWithoutFormat applies only to formats
+    listed in the <<formats-without-shader-storage-format,storage without
+    format>> list.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * [[features-shaderUniformBufferArrayDynamicIndexing]]
+    pname:shaderUniformBufferArrayDynamicIndexing specifies whether arrays
+    of uniform buffers can: be indexed by _dynamically uniform_ integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: be indexed only by
+    constant integral expressions when aggregated into arrays in shader
+    code.
+    This also specifies whether shader modules can: declare the
+    code:UniformBufferArrayDynamicIndexing capability.
+  * [[features-shaderSampledImageArrayDynamicIndexing]]
+    pname:shaderSampledImageArrayDynamicIndexing specifies whether arrays of
+    samplers or sampled images can: be indexed by dynamically uniform
+    integer expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: be indexed only by constant
+    integral expressions when aggregated into arrays in shader code.
+    This also specifies whether shader modules can: declare the
+    code:SampledImageArrayDynamicIndexing capability.
+  * [[features-shaderStorageBufferArrayDynamicIndexing]]
+    pname:shaderStorageBufferArrayDynamicIndexing specifies whether arrays
+    of storage buffers can: be indexed by dynamically uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: be indexed only by
+    constant integral expressions when aggregated into arrays in shader
+    code.
+    This also specifies whether shader modules can: declare the
+    code:StorageBufferArrayDynamicIndexing capability.
+  * [[features-shaderStorageImageArrayDynamicIndexing]]
+    pname:shaderStorageImageArrayDynamicIndexing specifies whether arrays of
+    storage images can: be indexed by dynamically uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: be indexed only by constant
+    integral expressions when aggregated into arrays in shader code.
+    This also specifies whether shader modules can: declare the
+    code:StorageImageArrayDynamicIndexing capability.
+  * [[features-shaderClipDistance]] pname:shaderClipDistance specifies
+    whether clip distances are supported in shader code.
+    If this feature is not enabled, any members decorated with the
+    code:ClipDistance built-in decoration must: not be read from or written
+    to in shader modules.
+    This also specifies whether shader modules can: declare the
+    code:ClipDistance capability.
+  * [[features-shaderCullDistance]] pname:shaderCullDistance specifies
+    whether cull distances are supported in shader code.
+    If this feature is not enabled, any members decorated with the
+    code:CullDistance built-in decoration must: not be read from or written
+    to in shader modules.
+    This also specifies whether shader modules can: declare the
+    code:CullDistance capability.
+  * [[features-shaderFloat64]] pname:shaderFloat64 specifies whether 64-bit
+    floats (doubles) are supported in shader code.
+    If this feature is not enabled, 64-bit floating-point types must: not be
+    used in shader code.
+    This also specifies whether shader modules can: declare the code:Float64
+    capability.
+    Declaring and using 64-bit floats is enabled for all storage classes
+    that SPIR-V allows with the code:Float64 capability.
+  * [[features-shaderInt64]] pname:shaderInt64 specifies whether 64-bit
+    integers (signed and unsigned) are supported in shader code.
+    If this feature is not enabled, 64-bit integer types must: not be used
+    in shader code.
+    This also specifies whether shader modules can: declare the code:Int64
+    capability.
+    Declaring and using 64-bit integers is enabled for all storage classes
+    that SPIR-V allows with the code:Int64 capability.
+  * [[features-shaderInt16]] pname:shaderInt16 specifies whether 16-bit
+    integers (signed and unsigned) are supported in shader code.
+    If this feature is not enabled, 16-bit integer types must: not be used
+    in shader code.
+    This also specifies whether shader modules can: declare the code:Int16
+    capability.
+    However, this only enables a subset of the storage classes that SPIR-V
+    allows for the code:Int16 SPIR-V capability: Declaring and using 16-bit
+    integers in the code:Private,
+ifndef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup,
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup (for non-Block variables),
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+    and code:Function storage classes is enabled, while declaring them in
+    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
+    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
+    not enabled.
+  * [[features-shaderResourceResidency]] pname:shaderResourceResidency
+    specifies whether image operations that return resource residency
+    information are supported in shader code.
+    If this feature is not enabled, the code:OpImageSparse* instructions
+    must: not be used in shader code.
+    This also specifies whether shader modules can: declare the
+    code:SparseResidency capability.
+    The feature requires at least one of the ptext:sparseResidency* features
+    to be supported.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-shaderResourceMinLod]] pname:shaderResourceMinLod specifies
+    whether image operations specifying the minimum resource LOD are
+    supported in shader code.
+    If this feature is not enabled, the code:MinLod image operand must: not
+    be used in shader code.
+    This also specifies whether shader modules can: declare the code:MinLod
+    capability.
+  * [[features-sparseBinding]] pname:sparseBinding specifies whether
+    resource memory can: be managed at opaque sparse block level instead of
+    at the object level.
+    If this feature is not enabled, resource memory must: be bound only on a
+    per-object basis using the fname:vkBindBufferMemory and
+    fname:vkBindImageMemory commands.
+    In this case, buffers and images must: not be created with
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT and
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in the pname:flags member
+    of the slink:VkBufferCreateInfo and slink:VkImageCreateInfo structures,
+    respectively.
+    Otherwise resource memory can: be managed as described in
+    <<sparsememory-sparseresourcefeatures,Sparse Resource Features>>.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidencyBuffer]] pname:sparseResidencyBuffer specifies
+    whether the device can: access partially resident buffers.
+    If this feature is not enabled, buffers must: not be created with
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags
+    member of the slink:VkBufferCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidencyImage2D]] pname:sparseResidencyImage2D
+    specifies whether the device can: access partially resident 2D images
+    with 1 sample per pixel.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and pname:samples set to
+    ename:VK_SAMPLE_COUNT_1_BIT must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidencyImage3D]] pname:sparseResidencyImage3D
+    specifies whether the device can: access partially resident 3D images.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_3D must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidency2Samples]] pname:sparseResidency2Samples
+    specifies whether the physical device can: access partially resident 2D
+    images with 2 samples per pixel.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and pname:samples set to
+    ename:VK_SAMPLE_COUNT_2_BIT must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidency4Samples]] pname:sparseResidency4Samples
+    specifies whether the physical device can: access partially resident 2D
+    images with 4 samples per pixel.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and pname:samples set to
+    ename:VK_SAMPLE_COUNT_4_BIT must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidency8Samples]] pname:sparseResidency8Samples
+    specifies whether the physical device can: access partially resident 2D
+    images with 8 samples per pixel.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and pname:samples set to
+    ename:VK_SAMPLE_COUNT_8_BIT must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidency16Samples]] pname:sparseResidency16Samples
+    specifies whether the physical device can: access partially resident 2D
+    images with 16 samples per pixel.
+    If this feature is not enabled, images with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and pname:samples set to
+    ename:VK_SAMPLE_COUNT_16_BIT must: not be created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
+    of the slink:VkImageCreateInfo structure.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-sparseResidencyAliased]] pname:sparseResidencyAliased
+    specifies whether the physical device can: correctly access data aliased
+    into multiple locations.
+    If this feature is not enabled, the
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT enum values must: not be used
+    in pname:flags members of the slink:VkBufferCreateInfo and
+    slink:VkImageCreateInfo structures, respectively.
+ifdef::VKSC_VERSION_1_0[This must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * [[features-variableMultisampleRate]] pname:variableMultisampleRate
+    specifies whether all pipelines that will be bound to a command buffer
+    during a <<renderpass-noattachments, subpass which uses no attachments>>
+    must: have the same value for
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
+    If set to ename:VK_TRUE, the implementation supports variable
+    multisample rates in a subpass which uses no attachments.
+    If set to ename:VK_FALSE, then all pipelines bound in such a subpass
+    must: have the same multisample rate.
+    This has no effect in situations where a subpass uses any attachments.
+  * [[features-inheritedQueries]] pname:inheritedQueries specifies whether a
+    secondary command buffer may: be executed while a query is active.
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceFeatures::pname:shaderResourceResidency must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseBinding must: be reported as
+    ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidencyBuffer must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidencyImage2D must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidencyImage3D must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidency2Samples must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidency4Samples must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidency8Samples must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidency16Samples must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceFeatures::pname:sparseResidencyAliased must: be
+    reported as ename:VK_FALSE <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFeatures.adoc[]
+--
+
+ifdef::VK_VERSION_1_2[]
+[open,refpage='VkPhysicalDeviceVulkan11Features',desc='Structure describing the Vulkan 1.1 features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan11Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan11Features.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/features.adoc[tag=VK_KHR_16bit_storage-features]
+include::{chapters}/features.adoc[tag=VK_KHR_multiview-features]
+include::{chapters}/features.adoc[tag=VK_KHR_variable_pointers-features]
+include::{chapters}/features.adoc[tag=VK_KHR_protected_memory-features]
+include::{chapters}/features.adoc[tag=VK_KHR_sampler_ycbcr_conversion-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_draw_parameters-features]
+
+:refpage: VkPhysicalDeviceVulkan11Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Features.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceVulkan12Features',desc='Structure describing the Vulkan 1.2 features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan12Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan12Features.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+  * [[features-samplerMirrorClampToEdge]] pname:samplerMirrorClampToEdge
+    indicates whether the implementation supports the
+    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
+    If this feature is not enabled, the
+    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode
+    must: not be used.
+  * [[features-drawIndirectCount]] pname:drawIndirectCount indicates whether
+    the implementation supports the flink:vkCmdDrawIndirectCount and
+    flink:vkCmdDrawIndexedIndirectCount functions.
+    If this feature is not enabled, these functions must: not be used.
+include::{chapters}/features.adoc[tag=VK_KHR_8bit_storage-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_atomic_int64-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_float16_int8-features]
+  * [[features-descriptorIndexing]] pname:descriptorIndexing indicates
+    whether the implementation supports the minimum set of descriptor
+    indexing features as described in the <<features-requirements, Feature
+    Requirements>> section.
+    Enabling the pname:descriptorIndexing member when flink:vkCreateDevice
+    is called does not imply the other minimum descriptor indexing features
+    are also enabled.
+    Those other descriptor indexing features must: be enabled individually
+    as needed by the application.
+include::{chapters}/features.adoc[tag=VK_EXT_descriptor_indexing-features]
+  * [[features-samplerFilterMinmax]] pname:samplerFilterMinmax indicates
+    whether the implementation supports a minimum set of required formats
+    supporting min/max filtering as defined by the
+    <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,
+    pname:filterMinmaxSingleComponentFormats>> property minimum
+    requirements.
+    If this feature is not enabled, then
+    slink:VkSamplerReductionModeCreateInfo must: only use
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE.
+include::{chapters}/features.adoc[tag=VK_EXT_scalar_block_layout-features]
+include::{chapters}/features.adoc[tag=VK_KHR_imageless_framebuffer-features]
+include::{chapters}/features.adoc[tag=VK_KHR_uniform_buffer_standard_layout-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_subgroup_extended_types-features]
+include::{chapters}/features.adoc[tag=VK_KHR_separate_depth_stencil_layouts-features]
+include::{chapters}/features.adoc[tag=VK_EXT_host_query_reset-features]
+include::{chapters}/features.adoc[tag=VK_KHR_timeline_semaphore-features]
+include::{chapters}/features.adoc[tag=VK_EXT_buffer_device_address-features]
+include::{chapters}/features.adoc[tag=VK_KHR_vulkan_memory_model-features]
+  * [[features-shaderOutputViewportIndex]] pname:shaderOutputViewportIndex
+    indicates whether the implementation supports the
+    code:ShaderViewportIndex SPIR-V capability enabling variables decorated
+    with the code:ViewportIndex built-in to be exported from
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+    vertex or tessellation evaluation shaders.
+    If this feature is not enabled, the code:ViewportIndex built-in
+    decoration must: not be used on outputs in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+    vertex or tessellation evaluation shaders.
+  * [[features-shaderOutputLayer]] pname:shaderOutputLayer indicates whether
+    the implementation supports the code:ShaderLayer SPIR-V capability
+    enabling variables decorated with the code:Layer built-in to be exported
+    from
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+    vertex or tessellation evaluation shaders.
+    If this feature is not enabled, the code:Layer built-in decoration must:
+    not be used on outputs in
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+    vertex or tessellation evaluation shaders.
+  * [[features-subgroupBroadcastDynamicId]] If
+    pname:subgroupBroadcastDynamicId is ename:VK_TRUE, the "`Id`" operand of
+    code:OpGroupNonUniformBroadcast can: be dynamically uniform within a
+    subgroup, and the "`Index`" operand of
+    code:OpGroupNonUniformQuadBroadcast can: be dynamically uniform within
+    the derivative group.
+    If it is ename:VK_FALSE, these operands must: be constants.
+
+:refpage: VkPhysicalDeviceVulkan12Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan12Features.adoc[]
+--
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_3[]
+[open,refpage='VkPhysicalDeviceVulkan13Features',desc='Structure describing the Vulkan 1.3 features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceVulkan13Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkan13Features.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/features.adoc[tag=VK_EXT_image_robustness-features]
+include::{chapters}/features.adoc[tag=VK_EXT_inline_uniform_block-features]
+include::{chapters}/features.adoc[tag=VK_EXT_pipeline_creation_cache_control-features]
+include::{chapters}/features.adoc[tag=VK_EXT_private_data-features]
+include::{chapters}/features.adoc[tag=VK_EXT_shader_demote_to_helper_invocation-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_terminate_invocation-features]
+include::{chapters}/features.adoc[tag=VK_EXT_subgroup_size_control-features]
+include::{chapters}/features.adoc[tag=VK_KHR_synchronization2-features]
+include::{chapters}/features.adoc[tag=VK_EXT_texture_compression_astc_hdr-features]
+include::{chapters}/features.adoc[tag=VK_KHR_zero_initialize_workgroup_memory-features]
+include::{chapters}/features.adoc[tag=VK_KHR_dynamic_rendering-features]
+include::{chapters}/features.adoc[tag=VK_KHR_shader_integer_dot_product-features]
+include::{chapters}/features.adoc[tag=VK_KHR_maintenance4-features]
+
+:refpage: VkPhysicalDeviceVulkan13Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan13Features.adoc[]
+--
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
+[open,refpage='VkPhysicalDeviceVariablePointersFeatures',desc='Structure describing variable pointers features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceVariablePointerFeatures VkPhysicalDeviceVariablePointersFeaturesKHR VkPhysicalDeviceVariablePointerFeaturesKHR']
+--
+The sname:VkPhysicalDeviceVariablePointersFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointersFeatures.adoc[]
+
+ifndef::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeatures.adoc[]
+endif::VK_VERSION_1_1[]
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_KHR_variable_pointers[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointersFeaturesKHR.adoc[]
+
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeaturesKHR.adoc[]
+endif::VK_KHR_variable_pointers[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_variable_pointers-features[]
+  * [[{anchor-prefix}features-variablePointersStorageBuffer]]
+    pname:variablePointersStorageBuffer specifies whether the implementation
+    supports the SPIR-V code:VariablePointersStorageBuffer capability.
+    When this feature is not enabled, shader modules must: not declare the
+    `SPV_KHR_variable_pointers` extension or the
+    code:VariablePointersStorageBuffer capability.
+  * [[{anchor-prefix}features-variablePointers]] pname:variablePointers
+    specifies whether the implementation supports the SPIR-V
+    code:VariablePointers capability.
+    When this feature is not enabled, shader modules must: not declare the
+    code:VariablePointers capability.
+// end::VK_KHR_variable_pointers-features[]
+
+:refpage: VkPhysicalDeviceVariablePointersFeatures
+include::{chapters}/features.adoc[tag=features]
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431]]
+    If pname:variablePointers is enabled then
+    pname:variablePointersStorageBuffer must: also be enabled
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceVariablePointersFeatures.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+[open,refpage='VkPhysicalDeviceMultiviewFeatures',desc='Structure describing multiview features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiviewFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewFeatures.adoc[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewFeaturesKHR.adoc[]
+endif::VK_KHR_multiview[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_multiview-features[]
+  * [[{anchor-prefix}features-multiview]] pname:multiview specifies whether
+    the implementation supports multiview rendering within a render pass.
+    If this feature is not enabled, the view mask of each subpass must:
+    always be zero.
+  * [[{anchor-prefix}features-multiview-gs]] pname:multiviewGeometryShader
+    specifies whether the implementation supports multiview rendering within
+    a render pass, with <<geometry,geometry shaders>>.
+    If this feature is not enabled, then a pipeline compiled against a
+    subpass with a non-zero view mask must: not include a geometry shader.
+  * [[{anchor-prefix}features-multiview-tess]]
+    pname:multiviewTessellationShader specifies whether the implementation
+    supports multiview rendering within a render pass, with
+    <<tessellation,tessellation shaders>>.
+    If this feature is not enabled, then a pipeline compiled against a
+    subpass with a non-zero view mask must: not include any tessellation
+    shaders.
+// end::VK_KHR_multiview-features[]
+
+:refpage: VkPhysicalDeviceMultiviewFeatures
+include::{chapters}/features.adoc[tag=features]
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580]]
+    If pname:multiviewGeometryShader is enabled then pname:multiview must:
+    also be enabled
+  * [[VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581]]
+    If pname:multiviewTessellationShader is enabled then pname:multiview
+    must: also be enabled
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewFeatures.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_EXT_shader_atomic_float[]
+[open,refpage='VkPhysicalDeviceShaderAtomicFloatFeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_atomic_float',type='structs']
+--
+The slink:VkPhysicalDeviceShaderAtomicFloatFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// tag::VK_EXT_shader_atomic_float-features[]
+  * [[features-shaderBufferFloat32Atomics]] pname:shaderBufferFloat32Atomics
+    indicates whether shaders can: perform 32-bit floating-point load, store
+    and exchange atomic operations on storage buffers.
+  * [[features-shaderBufferFloat32AtomicAdd]]
+    pname:shaderBufferFloat32AtomicAdd indicates whether shaders can:
+    perform 32-bit floating-point add atomic operations on storage buffers.
+  * [[features-shaderBufferFloat64Atomics]] pname:shaderBufferFloat64Atomics
+    indicates whether shaders can: perform 64-bit floating-point load, store
+    and exchange atomic operations on storage buffers.
+  * [[features-shaderBufferFloat64AtomicAdd]]
+    pname:shaderBufferFloat64AtomicAdd indicates whether shaders can:
+    perform 64-bit floating-point add atomic operations on storage buffers.
+  * [[features-shaderSharedFloat32Atomics]] pname:shaderSharedFloat32Atomics
+    indicates whether shaders can: perform 32-bit floating-point load, store
+    and exchange atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat32AtomicAdd]]
+    pname:shaderSharedFloat32AtomicAdd indicates whether shaders can:
+    perform 32-bit floating-point add atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat64Atomics]] pname:shaderSharedFloat64Atomics
+    indicates whether shaders can: perform 64-bit floating-point load, store
+    and exchange atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat64AtomicAdd]]
+    pname:shaderSharedFloat64AtomicAdd indicates whether shaders can:
+    perform 64-bit floating-point add atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderImageFloat32Atomics]] pname:shaderImageFloat32Atomics
+    indicates whether shaders can: perform 32-bit floating-point load, store
+    and exchange atomic image operations.
+  * [[features-shaderImageFloat32AtomicAdd]]
+    pname:shaderImageFloat32AtomicAdd indicates whether shaders can: perform
+    32-bit floating-point add atomic image operations.
+  * [[features-sparseImageFloat32Atomics]] pname:sparseImageFloat32Atomics
+    indicates whether 32-bit floating-point load, store and exchange atomic
+    operations can: be used on sparse images.
+  * [[features-sparseImageFloat32AtomicAdd]]
+    pname:sparseImageFloat32AtomicAdd indicates whether 32-bit
+    floating-point add atomic operations can: be used on sparse images.
+// end::VK_EXT_shader_atomic_float-features[]
+
+:refpage: VkPhysicalDeviceShaderAtomicFloatFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_atomic_float[]
+
+ifdef::VK_EXT_shader_atomic_float2[]
+[open,refpage='VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_atomic_float2',type='structs']
+--
+The slink:VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// tag::VK_EXT_shader_atomic_float2-features[]
+  * [[features-shaderBufferFloat16Atomics]] pname:shaderBufferFloat16Atomics
+    indicates whether shaders can: perform 16-bit floating-point load,
+    store, and exchange atomic operations on storage buffers.
+  * [[features-shaderBufferFloat16AtomicAdd]]
+    pname:shaderBufferFloat16AtomicAdd indicates whether shaders can:
+    perform 16-bit floating-point add atomic operations on storage buffers.
+  * [[features-shaderBufferFloat16AtomicMinMax]]
+    pname:shaderBufferFloat16AtomicMinMax indicates whether shaders can:
+    perform 16-bit floating-point min and max atomic operations on storage
+    buffers.
+  * [[features-shaderBufferFloat32AtomicMinMax]]
+    pname:shaderBufferFloat32AtomicMinMax indicates whether shaders can:
+    perform 32-bit floating-point min and max atomic operations on storage
+    buffers.
+  * [[features-shaderBufferFloat64AtomicMinMax]]
+    pname:shaderBufferFloat64AtomicMinMax indicates whether shaders can:
+    perform 64-bit floating-point min and max atomic operations on storage
+    buffers.
+  * [[features-shaderSharedFloat16Atomics]] pname:shaderSharedFloat16Atomics
+    indicates whether shaders can: perform 16-bit floating-point load, store
+    and exchange atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat16AtomicAdd]]
+    pname:shaderSharedFloat16AtomicAdd indicates whether shaders can:
+    perform 16-bit floating-point add atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat16AtomicMinMax]]
+    pname:shaderSharedFloat16AtomicMinMax indicates whether shaders can:
+    perform 16-bit floating-point min and max atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat32AtomicMinMax]]
+    pname:shaderSharedFloat32AtomicMinMax indicates whether shaders can:
+    perform 32-bit floating-point min and max atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderSharedFloat64AtomicMinMax]]
+    pname:shaderSharedFloat64AtomicMinMax indicates whether shaders can:
+    perform 64-bit floating-point min and max atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+  * [[features-shaderImageFloat32AtomicMinMax]]
+    pname:shaderImageFloat32AtomicMinMax indicates whether shaders can:
+    perform 32-bit floating-point min and max atomic image operations.
+  * [[features-sparseImageFloat32AtomicMinMax]]
+    pname:sparseImageFloat32AtomicMinMax indicates whether 32-bit
+    floating-point min and max atomic operations can: be used on sparse
+    images.
+// end::VK_EXT_shader_atomic_float2-features[]
+
+:refpage: VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_atomic_float2[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
+[open,refpage='VkPhysicalDeviceShaderAtomicInt64Features',desc='Structure describing features supported by VK_KHR_shader_atomic_int64',type='structs',alias='VkPhysicalDeviceShaderAtomicInt64FeaturesKHR']
+--
+The slink:VkPhysicalDeviceShaderAtomicInt64Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicInt64Features.adoc[]
+
+ifdef::VK_KHR_shader_atomic_int64[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.adoc[]
+endif::VK_KHR_shader_atomic_int64[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_shader_atomic_int64-features[]
+  * [[{anchor-prefix}features-shaderBufferInt64Atomics]]
+    pname:shaderBufferInt64Atomics indicates whether shaders can: perform
+    64-bit unsigned and signed integer atomic operations on buffers.
+  * [[{anchor-prefix}features-shaderSharedInt64Atomics]]
+    pname:shaderSharedInt64Atomics indicates whether shaders can: perform
+    64-bit unsigned and signed integer atomic operations on shared
+ifdef::VK_EXT_mesh_shader[]
+    and payload
+endif::VK_EXT_mesh_shader[]
+    memory.
+// end::VK_KHR_shader_atomic_int64-features[]
+
+:refpage: VkPhysicalDeviceShaderAtomicInt64Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicInt64Features.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
+
+ifdef::VK_EXT_shader_image_atomic_int64[]
+[open,refpage='VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT',desc='Structure describing features supported by VK_EXT_shader_image_atomic_int64',type='structs']
+--
+The slink:VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderImageInt64Atomics]] pname:shaderImageInt64Atomics
+    indicates whether shaders can: support 64-bit unsigned and signed
+    integer atomic operations on images.
+  * [[features-sparseImageInt64Atomics]] pname:sparseImageInt64Atomics
+    indicates whether 64-bit integer atomics can: be used on sparse images.
+
+:refpage: VkPhysicalDeviceShaderAtomicInt64FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_image_atomic_int64[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_8bit_storage[]
+[open,refpage='VkPhysicalDevice8BitStorageFeatures',desc='Structure describing features supported by VK_KHR_8bit_storage',type='structs',alias='VkPhysicalDevice8BitStorageFeaturesKHR']
+--
+The slink:VkPhysicalDevice8BitStorageFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevice8BitStorageFeatures.adoc[]
+
+ifdef::VK_KHR_8bit_storage[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevice8BitStorageFeaturesKHR.adoc[]
+endif::VK_KHR_8bit_storage[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_8bit_storage-features[]
+  * [[{anchor-prefix}features-storageBuffer8BitAccess]]
+    pname:storageBuffer8BitAccess indicates whether objects in the
+    code:StorageBuffer,
+ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderRecordBufferKHR,]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    or code:PhysicalStorageBuffer
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    storage class with the code:Block decoration can: have 8-bit integer
+    members.
+    If this feature is not enabled, 8-bit integer members must: not be used
+    in such objects.
+    This also indicates whether shader modules can: declare the
+    code:StorageBuffer8BitAccess capability.
+  * [[{anchor-prefix}features-uniformAndStorageBuffer8BitAccess]]
+    pname:uniformAndStorageBuffer8BitAccess indicates whether objects in the
+    code:Uniform storage class with the code:Block decoration can: have
+    8-bit integer members.
+    If this feature is not enabled, 8-bit integer members must: not be used
+    in such objects.
+    This also indicates whether shader modules can: declare the
+    code:UniformAndStorageBuffer8BitAccess capability.
+  * [[{anchor-prefix}features-storagePushConstant8]]
+    pname:storagePushConstant8 indicates whether objects in the
+    code:PushConstant storage class can: have 8-bit integer members.
+    If this feature is not enabled, 8-bit integer members must: not be used
+    in such objects.
+    This also indicates whether shader modules can: declare the
+    code:StoragePushConstant8 capability.
+// end::VK_KHR_8bit_storage-features[]
+
+:refpage: VkPhysicalDevice8BitStorageFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice8BitStorageFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_8bit_storage[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+[open,refpage='VkPhysicalDevice16BitStorageFeatures',desc='Structure describing features supported by VK_KHR_16bit_storage',type='structs']
+--
+The slink:VkPhysicalDevice16BitStorageFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevice16BitStorageFeatures.adoc[]
+
+ifdef::VK_KHR_16bit_storage[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevice16BitStorageFeaturesKHR.adoc[]
+endif::VK_KHR_16bit_storage[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_16bit_storage-features[]
+  * [[{anchor-prefix}features-storageBuffer16BitAccess]]
+    pname:storageBuffer16BitAccess specifies whether objects in the
+    code:StorageBuffer,
+ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderRecordBufferKHR,]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    or code:PhysicalStorageBuffer
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    storage class with the code:Block decoration can: have 16-bit integer
+    and 16-bit floating-point members.
+    If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    members must: not be used in such objects.
+    This also specifies whether shader modules can: declare the
+    code:StorageBuffer16BitAccess capability.
+  * [[{anchor-prefix}features-uniformAndStorageBuffer16BitAccess]]
+    pname:uniformAndStorageBuffer16BitAccess specifies whether objects in
+    the code:Uniform storage class with the code:Block decoration can: have
+    16-bit integer and 16-bit floating-point members.
+    If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    members must: not be used in such objects.
+    This also specifies whether shader modules can: declare the
+    code:UniformAndStorageBuffer16BitAccess capability.
+  * [[{anchor-prefix}features-storagePushConstant16]]
+    pname:storagePushConstant16 specifies whether objects in the
+    code:PushConstant storage class can: have 16-bit integer and 16-bit
+    floating-point members.
+    If this feature is not enabled, 16-bit integer or floating-point members
+    must: not be used in such objects.
+    This also specifies whether shader modules can: declare the
+    code:StoragePushConstant16 capability.
+  * [[{anchor-prefix}features-storageInputOutput16]]
+    pname:storageInputOutput16 specifies whether objects in the code:Input
+    and code:Output storage classes can: have 16-bit integer and 16-bit
+    floating-point members.
+    If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    members must: not be used in such objects.
+    This also specifies whether shader modules can: declare the
+    code:StorageInputOutput16 capability.
+// end::VK_KHR_16bit_storage-features[]
+
+:refpage: VkPhysicalDevice16BitStorageFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice16BitStorageFeatures.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+[open,refpage='VkPhysicalDeviceShaderFloat16Int8Features',desc='Structure describing features supported by VK_KHR_shader_float16_int8',type='structs',alias='VkPhysicalDeviceShaderFloat16Int8FeaturesKHR VkPhysicalDeviceFloat16Int8FeaturesKHR']
+--
+The sname:VkPhysicalDeviceShaderFloat16Int8Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderFloat16Int8Features.adoc[]
+
+ifdef::VK_KHR_shader_float16_int8[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderFloat16Int8FeaturesKHR.adoc[]
+
+include::{generated}/api/structs/VkPhysicalDeviceFloat16Int8FeaturesKHR.adoc[]
+endif::VK_KHR_shader_float16_int8[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_shader_float16_int8-features[]
+  * [[{anchor-prefix}features-shaderFloat16]] pname:shaderFloat16 indicates
+    whether 16-bit floats (halfs) are supported in shader code.
+    This also indicates whether shader modules can: declare the code:Float16
+    capability.
+    However, this only enables a subset of the storage classes that SPIR-V
+    allows for the code:Float16 SPIR-V capability: Declaring and using
+    16-bit floats in the code:Private,
+ifndef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup,
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup (for non-Block variables),
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+    and code:Function storage classes is enabled, while declaring them in
+    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
+    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
+    not enabled.
+  * [[{anchor-prefix}features-shaderInt8]] pname:shaderInt8 indicates
+    whether 8-bit integers (signed and unsigned) are supported in shader
+    code.
+    This also indicates whether shader modules can: declare the code:Int8
+    capability.
+    However, this only enables a subset of the storage classes that SPIR-V
+    allows for the code:Int8 SPIR-V capability: Declaring and using 8-bit
+    integers in the code:Private,
+ifndef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup,
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+    code:Workgroup (for non-Block variables),
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+    and code:Function storage classes is enabled, while declaring them in
+    the interface storage classes (e.g., code:UniformConstant, code:Uniform,
+    code:StorageBuffer, code:Input, code:Output, and code:PushConstant) is
+    not enabled.
+// end::VK_KHR_shader_float16_int8-features[]
+
+:refpage: VkPhysicalDeviceShaderFloat16Int8Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderFloat16Int8Features.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
+
+ifdef::VK_KHR_shader_clock[]
+[open,refpage='VkPhysicalDeviceShaderClockFeaturesKHR',desc='Structure describing features supported by VK_KHR_shader_clock',type='structs']
+--
+The slink:VkPhysicalDeviceShaderClockFeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderClockFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderSubgroupClock]] pname:shaderSubgroupClock indicates
+    whether shaders can: perform code:Subgroup scoped clock reads.
+  * [[features-shaderDeviceClock]] pname:shaderDeviceClock indicates whether
+    shaders can: perform code:Device scoped clock reads.
+
+:refpage: VkPhysicalDeviceShaderClockFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderClockFeaturesKHR.adoc[]
+--
+endif::VK_KHR_shader_clock[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[open,refpage='VkPhysicalDeviceSamplerYcbcrConversionFeatures',desc='Structure describing {YCbCr} conversion features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR']
+--
+The sname:VkPhysicalDeviceSamplerYcbcrConversionFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_sampler_ycbcr_conversion-features[]
+  * [[{anchor-prefix}features-samplerYcbcrConversion]]
+    pname:samplerYcbcrConversion specifies whether the implementation
+    supports <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
+    If pname:samplerYcbcrConversion is ename:VK_FALSE, sampler {YCbCr}
+    conversion is not supported, and samplers using sampler {YCbCr}
+    conversion must: not be used.
+// end::VK_KHR_sampler_ycbcr_conversion-features[]
+
+:refpage: VkPhysicalDeviceSamplerYcbcrConversionFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkPhysicalDeviceProtectedMemoryFeatures',desc='Structure describing protected memory features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceProtectedMemoryFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryFeatures.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_protected_memory-features[]
+  * [[{anchor-prefix}features-protectedMemory]] pname:protectedMemory
+    specifies whether <<memory-protected-memory, protected memory>> is
+    supported.
+// end::VK_KHR_protected_memory-features[]
+
+:refpage: VkPhysicalDeviceProtectedMemoryFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryFeatures.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_EXT_blend_operation_advanced[]
+[open,refpage='VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT',desc='Structure describing advanced blending features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-advancedBlendCoherentOperations]]
+    pname:advancedBlendCoherentOperations specifies whether blending using
+    <<framebuffer-blend-advanced,advanced blend operations>> is guaranteed
+    to execute atomically and in <<drawing-primitive-order, primitive
+    order>>.
+    If this is ename:VK_TRUE,
+    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT is treated the
+    same as ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, and advanced blending
+    needs no additional synchronization over basic blending.
+    If this is ename:VK_FALSE, then memory dependencies are required to
+    guarantee order between two advanced blending operations that occur on
+    the same sample.
+
+:refpage: VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.adoc[]
+--
+endif::VK_EXT_blend_operation_advanced[]
+
+ifdef::VK_EXT_conditional_rendering[]
+[open,refpage='VkPhysicalDeviceConditionalRenderingFeaturesEXT',desc='Structure describing if a secondary command buffer can be executed if conditional rendering is active in the primary command buffer',type='structs']
+--
+The sname:VkPhysicalDeviceConditionalRenderingFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-conditionalRendering]] pname:conditionalRendering specifies
+    whether conditional rendering is supported.
+  * [[features-inheritedConditionalRendering]]
+    pname:inheritedConditionalRendering specifies whether a secondary
+    command buffer can: be executed while conditional rendering is active in
+    the primary command buffer.
+
+:refpage: VkPhysicalDeviceConditionalRenderingFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.adoc[]
+--
+endif::VK_EXT_conditional_rendering[]
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkPhysicalDeviceShaderDrawParametersFeatures',desc='Structure describing shader draw parameter features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceShaderDrawParameterFeatures']
+--
+The sname:VkPhysicalDeviceShaderDrawParametersFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderDrawParametersFeatures.adoc[]
+
+ifndef::VKSC_VERSION_1_0[]
+include::{generated}/api/structs/VkPhysicalDeviceShaderDrawParameterFeatures.adoc[]
+endif::VKSC_VERSION_1_0[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_shader_draw_parameters-features[]
+  * [[{anchor-prefix}features-shaderDrawParameters]]
+    pname:shaderDrawParameters specifies whether the implementation supports
+    the SPIR-V code:DrawParameters capability.
+    When this feature is not enabled, shader modules must: not declare the
+    `SPV_KHR_shader_draw_parameters` extension or the code:DrawParameters
+    capability.
+// end::VK_KHR_shader_draw_parameters-features[]
+
+:refpage: VkPhysicalDeviceShaderDrawParametersFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderDrawParametersFeatures.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_NV_mesh_shader[]
+[open,refpage='VkPhysicalDeviceMeshShaderFeaturesNV',desc='Structure describing mesh shading features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMeshShaderFeaturesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMeshShaderFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifdef::VK_EXT_mesh_shader[]
+  * pname:taskShader specifies whether task shaders are supported.
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+  * [[{vuprefix}features-taskShader]] pname:taskShader specifies whether
+    task shaders are supported.
+endif::VK_EXT_mesh_shader[]
+    If this feature is not enabled, the ename:VK_SHADER_STAGE_TASK_BIT_NV
+    and ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV enum values must: not be
+    used.
+ifdef::VK_EXT_mesh_shader[]
+  * pname:meshShader specifies whether mesh shaders are supported.
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+  * [[{vuprefix}features-meshShader]] pname:meshShader specifies whether
+    mesh shaders are supported.
+endif::VK_EXT_mesh_shader[]
+    If this feature is not enabled, the ename:VK_SHADER_STAGE_MESH_BIT_NV
+    and ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV enum values must: not be
+    used.
+
+:refpage: VkPhysicalDeviceMeshShaderFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderFeaturesNV.adoc[]
+--
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+[open,refpage='VkPhysicalDeviceMeshShaderFeaturesEXT',desc='Structure describing mesh shading features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMeshShaderFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMeshShaderFeaturesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-taskShader]] pname:taskShader specifies whether task shaders
+    are supported.
+    If this feature is not enabled, the ename:VK_SHADER_STAGE_TASK_BIT_EXT
+    and ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT enum values must: not be
+    used.
+  * [[features-meshShader]] pname:meshShader specifies whether mesh shaders
+    are supported.
+    If this feature is not enabled, the ename:VK_SHADER_STAGE_MESH_BIT_EXT
+    and ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT enum values must: not be
+    used.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[features-multiview-mesh]] pname:multiviewMeshShader specifies whether
+    the implementation supports <<features-multiview, pname:multiview>>
+    rendering within a render pass, with mesh shaders.
+    If this feature is not enabled, then a pipeline compiled against a
+    subpass with a non-zero view mask must: not include a mesh shader.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[features-primitiveFragmentShadingRate-mesh]]
+    pname:primitiveFragmentShadingRateMeshShader indicates that the
+    implementation supports the <<primsrast-fragment-shading-rate-primitive,
+    primitive fragment shading rate>> in mesh shaders.
+endif::VK_KHR_fragment_shading_rate[]
+  * [[features-meshShaderQueries]] pname:meshShaderQueries indicates that
+    the implementation supports creating query pools using the
+    ename:VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT query type and
+    statistic queries containing the
+    ename:VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT and
+    ename:VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT flags
+
+:refpage: VkPhysicalDeviceMeshShaderFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+ifdef::VK_NV_mesh_shader[]
+The corresponding features of the sname:VkPhysicalDeviceMeshShaderFeaturesNV
+structure must: match those in sname:VkPhysicalDeviceMeshShaderFeaturesEXT.
+endif::VK_NV_mesh_shader[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkPhysicalDeviceMeshShaderFeaturesEXT-multiviewMeshShader-07032]]
+    If pname:multiviewMeshShader is enabled then
+    sname:VkPhysicalDeviceMultiviewFeaturesKHR::pname:multiview must: also
+    be enabled
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkPhysicalDeviceMeshShaderFeaturesEXT-primitiveFragmentShadingRateMeshShader-07033]]
+    If pname:primitiveFragmentShadingRateMeshShader is enabled then
+    sname:VkPhysicalDeviceFragmentShadingRateFeaturesKHR::pname:primitiveFragmentShadingRate
+    must: also be enabled
+endif::VK_KHR_fragment_shading_rate[]
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderFeaturesEXT.adoc[]
+--
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_NV_memory_decompression[]
+[open,refpage='VkPhysicalDeviceMemoryDecompressionFeaturesNV',desc='Structure describing if memory decompression is supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryDecompressionFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryDecompressionFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-memoryDecompression]] pname:memoryDecompression indicates
+    whether memory decompression is supported.
+
+:refpage: VkPhysicalDeviceMemoryDecompressionFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryDecompressionFeaturesNV.adoc[]
+--
+endif::VK_NV_memory_decompression[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[open,refpage='VkPhysicalDeviceDescriptorIndexingFeatures',desc='Structure describing descriptor indexing features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingFeaturesEXT']
+--
+The sname:VkPhysicalDeviceDescriptorIndexingFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingFeatures.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_descriptor_indexing-features[]
+  * [[{anchor-prefix}features-shaderInputAttachmentArrayDynamicIndexing]]
+    pname:shaderInputAttachmentArrayDynamicIndexing indicates whether arrays
+    of input attachments can: be indexed by dynamically uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: be indexed only by
+    constant integral expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:InputAttachmentArrayDynamicIndexing capability.
+  * [[{anchor-prefix}features-shaderUniformTexelBufferArrayDynamicIndexing]]
+    pname:shaderUniformTexelBufferArrayDynamicIndexing indicates whether
+    arrays of uniform texel buffers can: be indexed by dynamically uniform
+    integer expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: be indexed only by
+    constant integral expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:UniformTexelBufferArrayDynamicIndexing capability.
+  * [[{anchor-prefix}features-shaderStorageTexelBufferArrayDynamicIndexing]]
+    pname:shaderStorageTexelBufferArrayDynamicIndexing indicates whether
+    arrays of storage texel buffers can: be indexed by dynamically uniform
+    integer expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: be indexed only by
+    constant integral expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:StorageTexelBufferArrayDynamicIndexing capability.
+  * [[{anchor-prefix}features-shaderUniformBufferArrayNonUniformIndexing]]
+    pname:shaderUniformBufferArrayNonUniformIndexing indicates whether
+    arrays of uniform buffers can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:UniformBufferArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderSampledImageArrayNonUniformIndexing]]
+    pname:shaderSampledImageArrayNonUniformIndexing indicates whether arrays
+    of samplers or sampled images can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:SampledImageArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderStorageBufferArrayNonUniformIndexing]]
+    pname:shaderStorageBufferArrayNonUniformIndexing indicates whether
+    arrays of storage buffers can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:StorageBufferArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderStorageImageArrayNonUniformIndexing]]
+    pname:shaderStorageImageArrayNonUniformIndexing indicates whether arrays
+    of storage images can: be indexed by non-uniform integer expressions in
+    shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:StorageImageArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderInputAttachmentArrayNonUniformIndexing]]
+    pname:shaderInputAttachmentArrayNonUniformIndexing indicates whether
+    arrays of input attachments can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:InputAttachmentArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderUniformTexelBufferArrayNonUniformIndexing]]
+    pname:shaderUniformTexelBufferArrayNonUniformIndexing indicates whether
+    arrays of uniform texel buffers can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:UniformTexelBufferArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-shaderStorageTexelBufferArrayNonUniformIndexing]]
+    pname:shaderStorageTexelBufferArrayNonUniformIndexing indicates whether
+    arrays of storage texel buffers can: be indexed by non-uniform integer
+    expressions in shader code.
+    If this feature is not enabled, resources with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not be indexed by
+    non-uniform integer expressions when aggregated into arrays in shader
+    code.
+    This also indicates whether shader modules can: declare the
+    code:StorageTexelBufferArrayNonUniformIndexing capability.
+  * [[{anchor-prefix}features-descriptorBindingUniformBufferUpdateAfterBind]]
+    pname:descriptorBindingUniformBufferUpdateAfterBind indicates whether
+    the implementation supports updating uniform buffer descriptors after a
+    set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER.
+  * [[{anchor-prefix}features-descriptorBindingSampledImageUpdateAfterBind]]
+    pname:descriptorBindingSampledImageUpdateAfterBind indicates whether the
+    implementation supports updating sampled image descriptors after a set
+    is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE.
+  * [[{anchor-prefix}features-descriptorBindingStorageImageUpdateAfterBind]]
+    pname:descriptorBindingStorageImageUpdateAfterBind indicates whether the
+    implementation supports updating storage image descriptors after a set
+    is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
+  * [[{anchor-prefix}features-descriptorBindingStorageBufferUpdateAfterBind]]
+    pname:descriptorBindingStorageBufferUpdateAfterBind indicates whether
+    the implementation supports updating storage buffer descriptors after a
+    set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER.
+  * [[{anchor-prefix}features-descriptorBindingUniformTexelBufferUpdateAfterBind]]
+    pname:descriptorBindingUniformTexelBufferUpdateAfterBind indicates
+    whether the implementation supports updating uniform texel buffer
+    descriptors after a set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
+  * [[{anchor-prefix}features-descriptorBindingStorageTexelBufferUpdateAfterBind]]
+    pname:descriptorBindingStorageTexelBufferUpdateAfterBind indicates
+    whether the implementation supports updating storage texel buffer
+    descriptors after a set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
+  * [[{anchor-prefix}features-descriptorBindingUpdateUnusedWhilePending]]
+    pname:descriptorBindingUpdateUnusedWhilePending indicates whether the
+    implementation supports updating descriptors while the set is in use.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT must: not be
+    used.
+  * [[{anchor-prefix}features-descriptorBindingPartiallyBound]]
+    pname:descriptorBindingPartiallyBound indicates whether the
+    implementation supports statically using a descriptor set binding in
+    which some descriptors are not valid.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT must: not be used.
+  * [[{anchor-prefix}features-descriptorBindingVariableDescriptorCount]]
+    pname:descriptorBindingVariableDescriptorCount indicates whether the
+    implementation supports descriptor sets with a variable-sized last
+    binding.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT must: not be
+    used.
+  * [[{anchor-prefix}features-runtimeDescriptorArray]]
+    pname:runtimeDescriptorArray indicates whether the implementation
+    supports the SPIR-V code:RuntimeDescriptorArray capability.
+    If this feature is not enabled, descriptors must: not be declared in
+    runtime arrays.
+// end::VK_EXT_descriptor_indexing-features[]
+
+:refpage: VkPhysicalDeviceDescriptorIndexingFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_NV_copy_memory_indirect[]
+[open,refpage='VkPhysicalDeviceCopyMemoryIndirectFeaturesNV',desc='Structure describing indirect copy features supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCopyMemoryIndirectFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCopyMemoryIndirectFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-indirectCopy]] pname:indirectCopy indicates whether
+    <<indirect-copies, indirect copies>> are supported.
+
+:refpage: VkPhysicalDeviceCopyMemoryIndirectFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCopyMemoryIndirectFeaturesNV.adoc[]
+--
+endif::VK_NV_copy_memory_indirect[]
+
+ifdef::VK_EXT_vertex_attribute_divisor[]
+[open,refpage='VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT',desc='Structure describing if fetching of vertex attribute may be repeated for instanced rendering',type='structs']
+--
+The sname:VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-vertexAttributeInstanceRateDivisor]]
+    pname:vertexAttributeInstanceRateDivisor specifies whether vertex
+    attribute fetching may be repeated in case of instanced rendering.
+  * [[features-vertexAttributeInstanceRateZeroDivisor]]
+    pname:vertexAttributeInstanceRateZeroDivisor specifies whether a zero
+    value for sname:VkVertexInputBindingDivisorDescriptionEXT::pname:divisor
+    is supported.
+
+:refpage: VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.adoc[]
+--
+endif::VK_EXT_vertex_attribute_divisor[]
+
+ifdef::VK_EXT_astc_decode_mode[]
+[open,refpage='VkPhysicalDeviceASTCDecodeFeaturesEXT',desc='Structure describing ASTC decode mode features',type='structs']
+--
+The sname:VkPhysicalDeviceASTCDecodeFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-astc-decodeModeSharedExponent]]
+    pname:decodeModeSharedExponent indicates whether the implementation
+    supports decoding ASTC compressed formats to
+    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 internal precision.
+
+:refpage: VkPhysicalDeviceASTCDecodeFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.adoc[]
+--
+endif::VK_EXT_astc_decode_mode[]
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='VkPhysicalDeviceTransformFeedbackFeaturesEXT',desc='Structure describing transform feedback features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-transformFeedback]] pname:transformFeedback indicates whether
+    the implementation supports transform feedback and shader modules can:
+    declare the code:TransformFeedback capability.
+  * [[features-geometryStreams]] pname:geometryStreams indicates whether the
+    implementation supports the code:GeometryStreams SPIR-V capability.
+
+:refpage: VkPhysicalDeviceTransformFeedbackFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+[open,refpage='VkPhysicalDeviceVulkanMemoryModelFeatures',desc='Structure describing features supported by the memory model',type='structs']
+--
+The sname:VkPhysicalDeviceVulkanMemoryModelFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkanMemoryModelFeatures.adoc[]
+
+ifdef::VK_KHR_vulkan_memory_model[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.adoc[]
+endif::VK_KHR_vulkan_memory_model[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_vulkan_memory_model-features[]
+  * [[{anchor-prefix}features-vulkanMemoryModel]] pname:vulkanMemoryModel
+    indicates whether shader modules can: declare the code:VulkanMemoryModel
+    capability.
+  * [[{anchor-prefix}features-vulkanMemoryModelDeviceScope]]
+    pname:vulkanMemoryModelDeviceScope indicates whether the Vulkan Memory
+    Model can use code:Device scope synchronization.
+    This also indicates whether shader modules can: declare the
+    code:VulkanMemoryModelDeviceScope capability.
+  * [[{anchor-prefix}features-vulkanMemoryModelAvailabilityVisibilityChains]]
+    pname:vulkanMemoryModelAvailabilityVisibilityChains indicates whether
+    the Vulkan Memory Model can use <<memory-model-availability-visibility,
+    availability and visibility chains>> with more than one element.
+// end::VK_KHR_vulkan_memory_model-features[]
+
+:refpage: VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkanMemoryModelFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[open,refpage='VkPhysicalDeviceInlineUniformBlockFeatures',desc='Structure describing inline uniform block features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceInlineUniformBlockFeaturesEXT']
+--
+The sname:VkPhysicalDeviceInlineUniformBlockFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockFeatures.adoc[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.adoc[]
+endif::VK_EXT_inline_uniform_block[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_inline_uniform_block-features[]
+  * [[{anchor-prefix}features-inlineUniformBlock]] pname:inlineUniformBlock
+    indicates whether the implementation supports inline uniform block
+    descriptors.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK must: not be used.
+  * [[{anchor-prefix}features-descriptorBindingInlineUniformBlockUpdateAfterBind]]
+    pname:descriptorBindingInlineUniformBlockUpdateAfterBind
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    is ename:VK_FALSE and reserved for future use.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    indicates whether the implementation supports updating inline uniform
+    block descriptors after a set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+// end::VK_EXT_inline_uniform_block-features[]
+
+:refpage: VkPhysicalDeviceInlineUniformBlockFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+ifdef::VK_NV_representative_fragment_test[]
+[open,refpage='VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV',desc='Structure describing the representative fragment test features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-representativeFragmentTest]] pname:representativeFragmentTest
+    indicates whether the implementation supports the representative
+    fragment test.
+    See <<fragops-rep-frag-test, Representative Fragment Test>>.
+
+:refpage: VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.adoc[]
+--
+endif::VK_NV_representative_fragment_test[]
+
+ifdef::VK_NV_scissor_exclusive[]
+[open,refpage='VkPhysicalDeviceExclusiveScissorFeaturesNV',desc='Structure describing exclusive scissor features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExclusiveScissorFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-exclusiveScissor]] pname:exclusiveScissor indicates that the
+    implementation supports the exclusive scissor test.
+
+See <<fragops-exclusive-scissor,Exclusive Scissor Test>> for more
+information.
+
+:refpage: VkPhysicalDeviceExclusiveScissorFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.adoc[]
+--
+endif::VK_NV_scissor_exclusive[]
+
+ifdef::VK_NV_corner_sampled_image[]
+[open,refpage='VkPhysicalDeviceCornerSampledImageFeaturesNV',desc='Structure describing corner sampled image features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCornerSampledImageFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-cornersampledimage]] pname:cornerSampledImage specifies
+    whether images can be created with a
+    slink:VkImageCreateInfo::pname:flags containing
+    ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV.
+    See <<resources-images-corner-sampled,Corner-Sampled Images>>.
+
+:refpage: VkPhysicalDeviceCornerSampledImageFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.adoc[]
+--
+endif::VK_NV_corner_sampled_image[]
+
+ifdef::VK_NV_compute_shader_derivatives[]
+[open,refpage='VkPhysicalDeviceComputeShaderDerivativesFeaturesNV',desc='Structure describing compute shader derivative features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceComputeShaderDerivativesFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-computeDerivativeGroupQuads]]
+    pname:computeDerivativeGroupQuads indicates that the implementation
+    supports the code:ComputeDerivativeGroupQuadsNV SPIR-V capability.
+  * [[features-computeDerivativeGroupLinear]]
+    pname:computeDerivativeGroupLinear indicates that the implementation
+    supports the code:ComputeDerivativeGroupLinearNV SPIR-V capability.
+
+See <<shaders-scope-quad, Quad shader scope>> for more information.
+
+:refpage: VkPhysicalDeviceComputeShaderDerivativesFeaturesNVfeatures.
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.adoc[]
+--
+endif::VK_NV_compute_shader_derivatives[]
+
+ifdef::VK_KHR_fragment_shader_barycentric[]
+[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR',desc='Structure describing barycentric support in fragment shaders that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.adoc[]
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.adoc[]
+endif::VK_NV_fragment_shader_barycentric[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentShaderBarycentric]] pname:fragmentShaderBarycentric
+    indicates that the implementation supports the code:BaryCoordKHR and
+    code:BaryCoordNoPerspKHR SPIR-V fragment shader built-ins and supports
+    the code:PerVertexKHR SPIR-V decoration on fragment shader input
+    variables.
+
+See <<primsrast-barycentric,Barycentric Interpolation>> for more
+information.
+
+:refpage: VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.adoc[]
+--
+endif::VK_KHR_fragment_shader_barycentric[]
+
+ifdef::VK_NV_shader_image_footprint[]
+[open,refpage='VkPhysicalDeviceShaderImageFootprintFeaturesNV',desc='Structure describing shader image footprint features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderImageFootprintFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-imageFootprint]] pname:imageFootprint specifies whether the
+    implementation supports the code:ImageFootprintNV SPIR-V capability.
+
+See <<textures-footprint,Texel Footprint Evaluation>> for more information.
+
+:refpage: VkPhysicalDeviceShaderImageFootprintFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.adoc[]
+--
+endif::VK_NV_shader_image_footprint[]
+
+ifdef::VK_NV_shading_rate_image[]
+[open,refpage='VkPhysicalDeviceShadingRateImageFeaturesNV',desc='Structure describing shading rate image features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShadingRateImageFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shadingRateImage]] pname:shadingRateImage indicates that the
+    implementation supports the use of a shading rate image to derive an
+    effective shading rate for fragment processing.
+    It also indicates that the implementation supports the
+    code:ShadingRateNV SPIR-V execution mode.
+  * [[features-shadingRateCoarseSampleOrder]]
+    pname:shadingRateCoarseSampleOrder indicates that the implementation
+    supports a user-configurable ordering of coverage samples in fragments
+    larger than one pixel.
+
+See <<primsrast-shading-rate-image, Shading Rate Image>> for more
+information.
+
+:refpage: VkPhysicalDeviceShadingRateImageFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.adoc[]
+--
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMapFeaturesEXT',desc='Structure describing fragment density map features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMapFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentDensityMap]] pname:fragmentDensityMap specifies
+    whether the implementation supports render passes with a fragment
+    density map attachment.
+    If this feature is not enabled and the pname:pNext chain of
+    slink:VkRenderPassCreateInfo includes a
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT structure,
+    pname:fragmentDensityMapAttachment must: be ename:VK_ATTACHMENT_UNUSED.
+  * [[features-fragmentDensityMapDynamic]] pname:fragmentDensityMapDynamic
+    specifies whether the implementation supports dynamic fragment density
+    map image views.
+    If this feature is not enabled,
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT must:
+    not be included in slink:VkImageViewCreateInfo::pname:flags.
+  * [[features-fragmentDensityMapNonSubsampledImages]]
+    pname:fragmentDensityMapNonSubsampledImages specifies whether the
+    implementation supports regular non-subsampled image attachments with
+    fragment density map render passes.
+    If this feature is not enabled, render passes with a
+    <<renderpass-fragmentdensitymapattachment,fragment density map
+    attachment>> must: only have <<samplers-subsamplesampler,subsampled
+    attachments>> bound.
+
+:refpage: VkPhysicalDeviceFragmentDensityMapFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.adoc[]
+--
+
+ifdef::VK_EXT_fragment_density_map2[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMap2FeaturesEXT',desc='Structure describing additional fragment density map features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMap2FeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentDensityMapDeferred]] pname:fragmentDensityMapDeferred
+    specifies whether the implementation supports deferred reads of fragment
+    density map image views.
+    If this feature is not enabled,
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT must:
+    not be included in sname:VkImageViewCreateInfo::pname:flags.
+
+:refpage: VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.adoc[]
+--
+endif::VK_EXT_fragment_density_map2[]
+
+ifdef::VK_QCOM_fragment_density_map_offset[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM',desc='Structure describing fragment density map offset features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentDensityMapOffsets]] pname:fragmentDensityMapOffsets
+    specifies whether the implementation supports
+    <<renderpass-fragmentdensitymapoffsets,fragment density map offsets>>
+
+:refpage: VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_HUAWEI_invocation_mask[]
+[open,refpage='VkPhysicalDeviceInvocationMaskFeaturesHUAWEI',desc='Structure describing invocation mask features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceInvocationMaskFeaturesHUAWEI structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-invocationMask]] pname:invocationMask indicates that the
+    implementation supports the use of an invocation mask image to optimize
+    the ray dispatch.
+
+:refpage: VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_invocation_mask[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+[open,refpage='VkPhysicalDeviceScalarBlockLayoutFeatures',desc='Structure indicating support for scalar block layouts',type='structs',alias='VkPhysicalDeviceScalarBlockLayoutFeaturesEXT']
+--
+The sname:VkPhysicalDeviceScalarBlockLayoutFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceScalarBlockLayoutFeatures.adoc[]
+
+ifdef::VK_EXT_scalar_block_layout[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceScalarBlockLayoutFeaturesEXT.adoc[]
+endif::VK_EXT_scalar_block_layout[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_scalar_block_layout-features[]
+  * [[{anchor-prefix}features-scalarBlockLayout]] pname:scalarBlockLayout
+    indicates that the implementation supports the layout of resource blocks
+    in shaders using <<interfaces-alignment-requirements, scalar
+    alignment>>.
+// end::VK_EXT_scalar_block_layout-features[]
+
+:refpage: VkPhysicalDeviceScalarBlockLayoutFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceScalarBlockLayoutFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+[open,refpage='VkPhysicalDeviceUniformBufferStandardLayoutFeatures',desc='Structure indicating support for std430-like packing in uniform buffers',type='structs',alias='VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR']
+--
+The sname:VkPhysicalDeviceUniformBufferStandardLayoutFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.adoc[]
+
+ifdef::VK_KHR_uniform_buffer_standard_layout[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR.adoc[]
+endif::VK_KHR_uniform_buffer_standard_layout[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_uniform_buffer_standard_layout-features[]
+  * [[{anchor-prefix}features-uniformBufferStandardLayout]]
+    pname:uniformBufferStandardLayout indicates that the implementation
+    supports the same layouts for uniform buffers as for storage and other
+    kinds of buffers.
+    See <<interfaces-resources-standard-layout,Standard Buffer Layout>>.
+// end::VK_KHR_uniform_buffer_standard_layout-features[]
+
+:refpage: VkPhysicalDeviceUniformBufferStandardLayoutFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+
+ifdef::VK_EXT_depth_clip_enable[]
+[open,refpage='VkPhysicalDeviceDepthClipEnableFeaturesEXT',desc='Structure indicating support for explicit enable of depth clip',type='structs']
+--
+The sname:VkPhysicalDeviceDepthClipEnableFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthClipEnableFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-depthClipEnable]] pname:depthClipEnable indicates that the
+    implementation supports setting the depth clipping operation explicitly
+    via the slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT
+    pipeline state.
+    Otherwise depth clipping is only enabled when
+    slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
+    set to ename:VK_FALSE.
+
+:refpage: VkPhysicalDeviceDepthClipEnableFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthClipEnableFeaturesEXT.adoc[]
+--
+endif::VK_EXT_depth_clip_enable[]
+
+ifdef::VK_EXT_memory_priority[]
+[open,refpage='VkPhysicalDeviceMemoryPriorityFeaturesEXT',desc='Structure describing memory priority features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryPriorityFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryPriorityFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-memoryPriority]] pname:memoryPriority indicates that the
+    implementation supports memory priorities specified at memory allocation
+    time via slink:VkMemoryPriorityAllocateInfoEXT.
+
+:refpage: VkPhysicalDeviceMemoryPriorityFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryPriorityFeaturesEXT.adoc[]
+--
+endif::VK_EXT_memory_priority[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+[open,refpage='VkPhysicalDeviceBufferDeviceAddressFeatures',desc='Structure describing buffer address features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceBufferDeviceAddressFeaturesKHR']
+--
+The sname:VkPhysicalDeviceBufferDeviceAddressFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeatures.adoc[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_buffer_device_address-features[]
+  * [[{anchor-prefix}features-bufferDeviceAddress]]
+    pname:bufferDeviceAddress indicates that the implementation supports
+    accessing buffer memory in shaders as storage buffers via an address
+    queried from flink:vkGetBufferDeviceAddress.
+  * [[{anchor-prefix}features-bufferDeviceAddressCaptureReplay]]
+    pname:bufferDeviceAddressCaptureReplay indicates that the implementation
+    supports saving and reusing buffer and device addresses, e.g. for trace
+    capture and replay.
+  * [[{anchor-prefix}features-bufferDeviceAddressMultiDevice]]
+    pname:bufferDeviceAddressMultiDevice indicates that the implementation
+    supports the pname:bufferDeviceAddress
+ifndef::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[feature]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+ifndef::VK_KHR_ray_query[]
+    and pname:rayTracingPipeline features
+endif::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_query[]
+    , pname:rayTracingPipeline and pname:rayQuery features
+endif::VK_KHR_ray_query[]
+endif::VK_KHR_ray_tracing_pipeline[]
+ifndef::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_query[]
+    and pname:rayQuery features
+endif::VK_KHR_ray_query[]
+endif::VK_KHR_ray_tracing_pipeline[]
+    for logical devices created with multiple physical devices.
+    If this feature is not supported, buffer
+ifdef::VK_KHR_acceleration_structure[]
+    and acceleration structure
+endif::VK_KHR_acceleration_structure[]
+    addresses must: not be queried on a logical device created with more
+    than one physical device.
+// end::VK_EXT_buffer_device_address-features[]
+
+[NOTE]
+.Note
+====
+pname:bufferDeviceAddressMultiDevice exists to allow certain legacy
+platforms to be able to support pname:bufferDeviceAddress without needing to
+support shared GPU virtual addresses for multi-device configurations.
+====
+
+See flink:vkGetBufferDeviceAddress for more information.
+
+:refpage: VkPhysicalDeviceBufferDeviceAddressFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBufferDeviceAddressFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+ifdef::VK_EXT_buffer_device_address[]
+[open,refpage='VkPhysicalDeviceBufferDeviceAddressFeaturesEXT',desc='Structure describing buffer address features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceBufferAddressFeaturesEXT']
+--
+The sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.adoc[]
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-bufferDeviceAddressEXT]] pname:bufferDeviceAddress indicates
+    that the implementation supports accessing buffer memory in shaders as
+    storage buffers via an address queried from
+    flink:vkGetBufferDeviceAddressEXT.
+  * [[features-bufferDeviceAddressCaptureReplayEXT]]
+    pname:bufferDeviceAddressCaptureReplay indicates that the implementation
+    supports saving and reusing buffer addresses, e.g. for trace capture and
+    replay.
+  * [[features-bufferDeviceAddressMultiDeviceEXT]]
+    pname:bufferDeviceAddressMultiDevice indicates that the implementation
+    supports the pname:bufferDeviceAddress feature for logical devices
+    created with multiple physical devices.
+    If this feature is not supported, buffer addresses must: not be queried
+    on a logical device created with more than one physical device.
+
+:refpage: VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+[NOTE]
+.Note
+====
+The sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT structure has the
+same members as the sname:VkPhysicalDeviceBufferDeviceAddressFeatures
+structure, but the functionality indicated by the members is expressed
+differently.
+The features indicated by the
+sname:VkPhysicalDeviceBufferDeviceAddressFeatures structure requires
+additional flags to be passed at memory allocation time, and the capture and
+replay mechanism is built around opaque capture addresses for buffer and
+memory objects.
+====
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.adoc[]
+--
+endif::VK_EXT_buffer_device_address[]
+
+ifdef::VK_NV_dedicated_allocation_image_aliasing[]
+[open,refpage='VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',desc='Structure describing dedicated allocation image aliasing features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-dedicatedAllocationImageAliasing]]
+    pname:dedicatedAllocationImageAliasing indicates that the implementation
+    supports aliasing of compatible image objects on a dedicated allocation.
+
+:refpage: VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.adoc[]
+--
+endif::VK_NV_dedicated_allocation_image_aliasing[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+[open,refpage='VkPhysicalDeviceImagelessFramebufferFeatures',desc='Structure indicating support for imageless framebuffers',type='structs',alias='VkPhysicalDeviceImagelessFramebufferFeaturesKHR']
+--
+The sname:VkPhysicalDeviceImagelessFramebufferFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImagelessFramebufferFeatures.adoc[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceImagelessFramebufferFeaturesKHR.adoc[]
+endif::VK_KHR_imageless_framebuffer[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_imageless_framebuffer-features[]
+  * [[{anchor-prefix}features-imagelessFramebuffer]]
+    pname:imagelessFramebuffer indicates that the implementation supports
+    specifying the image view for attachments at render pass begin time via
+    slink:VkRenderPassAttachmentBeginInfo.
+// end::VK_KHR_imageless_framebuffer-features[]
+
+:refpage: VkPhysicalDeviceImagelessFramebufferFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImagelessFramebufferFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+
+ifdef::VK_EXT_fragment_shader_interlock[]
+[open,refpage='VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT',desc='Structure describing fragment shader interlock features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentShaderSampleInterlock]]
+    pname:fragmentShaderSampleInterlock indicates that the implementation
+    supports the code:FragmentShaderSampleInterlockEXT SPIR-V capability.
+  * [[features-fragmentShaderPixelInterlock]]
+    pname:fragmentShaderPixelInterlock indicates that the implementation
+    supports the code:FragmentShaderPixelInterlockEXT SPIR-V capability.
+  * [[features-fragmentShaderShadingRateInterlock]]
+    pname:fragmentShaderShadingRateInterlock indicates that the
+    implementation supports the code:FragmentShaderShadingRateInterlockEXT
+    SPIR-V capability.
+
+:refpage: VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.adoc[]
+--
+endif::VK_EXT_fragment_shader_interlock[]
+
+ifdef::VK_NV_cooperative_matrix[]
+[open,refpage='VkPhysicalDeviceCooperativeMatrixFeaturesNV',desc='Structure describing cooperative matrix features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCooperativeMatrixFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-cooperativeMatrix-NV]] pname:cooperativeMatrix indicates that
+    the implementation supports the code:CooperativeMatrixNV SPIR-V
+    capability.
+  * [[features-cooperativeMatrixRobustBufferAccess-NV]]
+    pname:cooperativeMatrixRobustBufferAccess indicates that the
+    implementation supports robust buffer access for SPIR-V
+    code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
+    instructions.
+
+:refpage: VkPhysicalDeviceCooperativeMatrixFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixFeaturesNV.adoc[]
+--
+endif::VK_NV_cooperative_matrix[]
+
+ifdef::VK_KHR_cooperative_matrix[]
+[open,refpage='VkPhysicalDeviceCooperativeMatrixFeaturesKHR',desc='Structure describing cooperative matrix features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCooperativeMatrixFeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-cooperativeMatrix]] pname:cooperativeMatrix indicates that
+    the implementation supports the code:CooperativeMatrixKHR SPIR-V
+    capability.
+  * [[features-cooperativeMatrixRobustBufferAccess]]
+    pname:cooperativeMatrixRobustBufferAccess indicates that the
+    implementation supports robust buffer access for SPIR-V
+    code:OpCooperativeMatrixLoadKHR and code:OpCooperativeMatrixStoreKHR
+    instructions.
+
+:refpage: VkPhysicalDeviceCooperativeMatrixFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixFeaturesKHR.adoc[]
+--
+endif::VK_KHR_cooperative_matrix[]
+
+ifdef::VK_EXT_ycbcr_image_arrays[]
+[open,refpage='VkPhysicalDeviceYcbcrImageArraysFeaturesEXT',desc='Structure describing extended {YCbCr} image creation features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceYcbcrImageArraysFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-ycbcrImageArrays]] pname:ycbcrImageArrays indicates that the
+    implementation supports creating images with a format that requires
+    <<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> and
+    has multiple array layers.
+
+:refpage: VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.adoc[]
+--
+endif::VK_EXT_ycbcr_image_arrays[]
+
+ifdef::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+[open,refpage='VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures',desc='Structure describing the extended types subgroups support feature for an implementation',type='structs',alias='VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR']
+--
+The sname:VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.adoc[]
+
+ifdef::VK_KHR_shader_subgroup_extended_types[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.adoc[]
+endif::VK_KHR_shader_subgroup_extended_types[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_shader_subgroup_extended_types-features[]
+  * [[{anchor-prefix}features-subgroup-extended-types]]
+    pname:shaderSubgroupExtendedTypes is a boolean specifying whether
+    subgroup operations can use 8-bit integer, 16-bit integer, 64-bit
+    integer, 16-bit floating-point, and vectors of these types in
+    <<shaders-group-operations,group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>>, if the implementation
+    supports the types.
+// end::VK_KHR_shader_subgroup_extended_types-features[]
+
+:refpage: VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+[open,refpage='VkPhysicalDeviceHostQueryResetFeatures',desc='Structure describing whether queries can be reset from the host',type='structs',alias='VkPhysicalDeviceHostQueryResetFeaturesEXT']
+--
+The sname:VkPhysicalDeviceHostQueryResetFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceHostQueryResetFeatures.adoc[]
+
+ifdef::VK_EXT_host_query_reset[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceHostQueryResetFeaturesEXT.adoc[]
+endif::VK_EXT_host_query_reset[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_host_query_reset-features[]
+  * [[{anchor-prefix}features-hostQueryReset]] pname:hostQueryReset
+    indicates that the implementation supports resetting queries from the
+    host with flink:vkResetQueryPool.
+// end::VK_EXT_host_query_reset-features[]
+
+:refpage: VkPhysicalDeviceHostQueryResetFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceHostQueryResetFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+
+ifdef::VK_INTEL_shader_integer_functions2[]
+[open,refpage='VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',desc='Structure describing shader integer functions that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderIntegerFunctions2]] pname:shaderIntegerFunctions2
+    indicates that the implementation supports the
+    code:IntegerFunctions2INTEL SPIR-V capability.
+
+:refpage: VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTELfeatures.
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.adoc[]
+--
+endif::VK_INTEL_shader_integer_functions2[]
+
+ifdef::VK_NV_coverage_reduction_mode[]
+[open,refpage='VkPhysicalDeviceCoverageReductionModeFeaturesNV',desc='Structure describing the coverage reduction mode features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCoverageReductionModeFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCoverageReductionModeFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-coverageReductionMode]] pname:coverageReductionMode indicates
+    whether the implementation supports coverage reduction modes.
+    See <<fragops-coverage-reduction, Coverage Reduction>>.
+
+:refpage: VkPhysicalDeviceCoverageReductionModeFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCoverageReductionModeFeaturesNV.adoc[]
+--
+endif::VK_NV_coverage_reduction_mode[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[open,refpage='VkPhysicalDeviceTimelineSemaphoreFeatures',desc='Structure describing timeline semaphore features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphoreFeaturesKHR']
+--
+The sname:VkPhysicalDeviceTimelineSemaphoreFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreFeatures.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreFeaturesKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_timeline_semaphore-features[]
+  * [[{anchor-prefix}features-timelineSemaphore]] pname:timelineSemaphore
+    indicates whether semaphores created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE are supported.
+// end::VK_KHR_timeline_semaphore-features[]
+
+:refpage: VkPhysicalDeviceTimelineSemaphoreFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_NV_external_sci_sync[]
+[open,refpage='VkPhysicalDeviceExternalSciSyncFeaturesNV',desc='Structure describing SciSync features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalSciSyncFeaturesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSciSyncFeaturesNV.adoc[]
+
+The members of the sname:VkPhysicalDeviceExternalSciSyncFeaturesNV structure
+describe the following features:
+
+  * [[features-sciSyncFence]] pname:sciSyncFence indicates whether external
+    fences created with a handle type of
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV and
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV are supported
+    for import and/or export.
+  * [[features-sciSyncSemaphore]] pname:sciSyncSemaphore indicates whether
+    external semaphores created with a handle type of
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV are
+    supported for import and/or export.
+  * [[features-sciSyncImport]] pname:sciSyncImport indicates whether
+    stext:NvSciSyncObj import functionality is supported.
+    If pname:sciSyncImport is set to ename:VK_TRUE, slink:VkFence and/or
+    slink:VkSemaphore support importing stext:NvSciSyncObj from
+    applications.
+    In this case, the application is responsible for the resource management
+    of the stext:NvSciSyncObj.
+  * [[features-sciSyncExport]] pname:sciSyncExport indicates whether
+    stext:NvSciSyncObj export functionality is supported.
+    If pname:sciSyncExport is set to ename:VK_TRUE, slink:VkFence and/or
+    slink:VkSemaphore support exporting stext:NvSciSyncObj created by the
+    driver to applications.
+    In this case, the driver is responsible for the resource management of
+    the stext:NvSciSyncObj.
+
+[[features-externalscisync-table]]
+.Functionality supported for NvSciSync features
+|=====
+| Features           | pname:sciSyncImport | pname:sciSyncExport | Always supported^1^
+| pname:sciSyncFence
+  | flink:vkImportFenceSciSyncFenceNV, flink:vkImportFenceSciSyncObjNV
+  | slink:VkExportFenceSciSyncInfoNV
+  | flink:vkGetFenceSciSyncFenceNV, flink:vkGetFenceSciSyncObjNV, flink:vkGetPhysicalDeviceSciSyncAttributesNV (with ename:VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV)
+| pname:sciSyncSemaphore
+  | flink:vkImportSemaphoreSciSyncObjNV
+  | slink:VkExportSemaphoreSciSyncInfoNV
+  | flink:vkGetSemaphoreSciSyncObjNV, flink:vkGetPhysicalDeviceSciSyncAttributesNV (with ename:VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV)
+|=====
+
+1::
+    Functionality in this column is always available.
+
+The <<features-externalscisync-table, Functionality supported for NvSciSync
+features>> table summarizes the functionality enabled by the
+sname:VkPhysicalDeviceExternalSciSyncFeaturesNV structure.
+There are two orthogonal pieces of functionality: fence and semaphore
+support; import and export support.
+Each entry in the body of the table summarizes the functionality that can:
+be used when the given features are supported and enabled.
+This summarizes Valid Usage statements that are added elsewhere in this
+specification.
+
+:refpage: VkPhysicalDeviceExternalSciSyncFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalSciSyncFeaturesNV.adoc[]
+--
+endif::VK_NV_external_sci_sync[]
+
+ifdef::VK_NV_external_sci_sync2[]
+[open,refpage='VkPhysicalDeviceExternalSciSync2FeaturesNV',desc='Structure describing SciSync features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalSciSync2FeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSciSync2FeaturesNV.adoc[]
+
+The members of the sname:VkPhysicalDeviceExternalSciSync2FeaturesNV
+structure describe the following features:
+
+  * [[features-sciSyncFence2]] pname:sciSyncFence indicates whether external
+    fences created with a handle type of
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV and
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV are supported
+    for import and/or export.
+  * [[features-sciSyncSemaphore2]] pname:sciSyncSemaphore2 indicates whether
+    semaphore SciSync pools are supported and semaphores can be created from
+    stext:NvSciSyncObj via slink:VkSemaphoreSciSyncPoolNV objects.
+    In this case, the application is responsible for the resource management
+    of the stext:NvSciSyncObj.
+  * [[features-sciSyncImport2]] pname:sciSyncImport indicates whether
+    stext:NvSciSyncObj import functionality is supported.
+    If pname:sciSyncImport is set to ename:VK_TRUE, slink:VkFence and/or
+    slink:VkSemaphore support importing stext:NvSciSyncObj from
+    applications.
+    In this case, the application is responsible for the resource management
+    of the stext:NvSciSyncObj.
+  * [[features-sciSyncExport2]] pname:sciSyncExport indicates whether
+    stext:NvSciSyncObj export functionality is supported.
+    If pname:sciSyncExport is set to ename:VK_TRUE, slink:VkFence supports
+    exporting stext:NvSciSyncObj created by the driver to applications.
+    In this case, the driver is responsible for the resource management of
+    the stext:NvSciSyncObj.
+
+[[features-externalscisync2-table]]
+.Functionality supported for NvSciSync features
+|=====
+| Features           | pname:sciSyncImport | pname:sciSyncExport | Always supported^1^
+| pname:sciSyncFence
+  | flink:vkImportFenceSciSyncFenceNV, flink:vkImportFenceSciSyncObjNV
+  | slink:VkExportFenceSciSyncInfoNV
+  | flink:vkGetFenceSciSyncFenceNV, flink:vkGetFenceSciSyncObjNV, flink:vkGetPhysicalDeviceSciSyncAttributesNV (with ename:VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV)
+| pname:sciSyncSemaphore2
+  | flink:vkCreateSemaphoreSciSyncPoolNV, slink:VkSemaphoreSciSyncCreateInfoNV
+  | n/a
+  | flink:vkGetPhysicalDeviceSciSyncAttributesNV (with ename:VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV)
+|=====
+
+1::
+    Functionality in this column is always available.
+
+The <<features-externalscisync2-table, Functionality supported for NvSciSync
+features>> table summarizes the functionality enabled by the
+sname:VkPhysicalDeviceExternalSciSync2FeaturesNV structure.
+There are two orthogonal pieces of functionality: fence and semaphore
+support; import and export support.
+Each entry in the body of the table summarizes the functionality that can:
+be used when the given features are supported and enabled.
+This summarizes Valid Usage statements that are added elsewhere in this
+specification.
+
+:refpage: VkPhysicalDeviceExternalSciSync2FeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalSciSync2FeaturesNV.adoc[]
+--
+endif::VK_NV_external_sci_sync2[]
+
+ifdef::VK_NV_external_memory_sci_buf[]
+[open,refpage='VkPhysicalDeviceExternalMemorySciBufFeaturesNV',desc='Structure describing NvSciBuf features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalMemorySciBufFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalMemorySciBufFeaturesNV.adoc[]
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSciBufFeaturesNV.adoc[]
+
+The members of the sname:VkPhysicalDeviceExternalMemorySciBufFeaturesNV
+structure describe the following features:
+
+  * [[features-sciBufImport]] pname:sciBufImport indicates whether
+    stext:NvSciBufObj import functionality is supported.
+    If pname:sciBufImport is set to ename:VK_TRUE, slink:VkDeviceMemory
+    supports importing stext:NvSciBufObj from applications.
+    In this case, the application is responsible for the resource management
+    of the stext:NvSciBufObj.
+  * [[features-sciBufExport]] pname:sciBufExport indicates whether
+    stext:NvSciBufObj export functionality is supported.
+    If pname:sciBufExport is set to ename:VK_TRUE, slink:VkDeviceMemory
+    supports exporting stext:NvSciBufObj created by the driver to
+    applications.
+    In this case, the driver is responsible for the resource management of
+    the stext:NvSciBufObj.
+
+[[features-externalscibuf-table]]
+.Functionality supported for NvSciBuf features
+|=====
+| Features            | Functionality
+| pname:sciBufImport  | slink:VkImportMemorySciBufInfoNV, flink:vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV
+| pname:sciBufExport  | slink:VkExportMemorySciBufInfoNV
+| Always supported^1^ | flink:vkGetPhysicalDeviceSciBufAttributesNV, flink:vkGetMemorySciBufNV,
+|=====
+
+1::
+    Functionality in this row is always available.
+
+The <<features-externalscibuf-table, Functionality supported for NvSciBuf
+features>> table summarizes the functionality enabled by the
+sname:VkPhysicalDeviceExternalMemorySciBufFeaturesNV structure.
+Each entry in the body of the table summarizes the functionality that can:
+be used when the given features are supported and enabled.
+This summarizes Valid Usage statements that are added elsewhere in this
+specification.
+
+:refpage: VkPhysicalDeviceExternalMemorySciBufFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemorySciBufFeaturesNV.adoc[]
+--
+endif::VK_NV_external_memory_sci_buf[]
+
+ifdef::VK_QNX_external_memory_screen_buffer[]
+[open,refpage='VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX',desc='Structure describing QNX Screen Buffer features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX.adoc[]
+
+The members of the
+sname:VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX structure
+describe the following features:
+
+  * [[features-screenBufferImport]] pname:screenBufferImport indicates
+    whether QNX Screen buffer import functionality is supported.
+    If pname:screenBufferImport is set to ename:VK_TRUE,
+    slink:VkDeviceMemory supports importing code:_screen_buffer from
+    applications.
+    In this case, the application is responsible for the resource management
+    of the code:_screen_buffer.
+
+[[features-externalscreenbuffer-table]]
+.Functionality supported for QNX Screen Buffer features
+|=====
+| Features            | Functionality
+| pname:screenBufferImport  | slink:VkImportScreenBufferInfoQNX
+| Always supported^1^ | flink:vkGetScreenBufferPropertiesQNX, slink:VkScreenBufferPropertiesQNX, slink:VkScreenBufferFormatPropertiesQNX,
+slink:VkExternalFormatQNX
+|=====
+
+1::
+    Functionality in this row is always available.
+
+The <<features-externalscreenbuffer-table, Functionality supported for QNX
+Screen buffer features>> table summarizes the functionality enabled by the
+sname:VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX structure.
+Each entry in the body of the table summarizes the functionality that can:
+be used when the given features are supported and enabled.
+This summarizes Valid Usage statements that are added elsewhere in this
+specification.
+
+:refpage: VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX.adoc[]
+--
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_EXT_index_type_uint8[]
+[open,refpage='VkPhysicalDeviceIndexTypeUint8FeaturesEXT',desc='Structure describing whether uint8 index type can be used',type='structs']
+--
+The sname:VkPhysicalDeviceIndexTypeUint8FeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceIndexTypeUint8FeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-indexTypeUint8]] pname:indexTypeUint8 indicates that
+    ename:VK_INDEX_TYPE_UINT8_EXT can be used with
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR and]
+    flink:vkCmdBindIndexBuffer.
+
+:refpage: VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceIndexTypeUint8FeaturesEXT.adoc[]
+--
+endif::VK_EXT_index_type_uint8[]
+
+ifdef::VK_EXT_primitive_topology_list_restart[]
+[open,refpage='VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',desc='Structure describing whether list type primitives can support primitive restart',type='structs']
+--
+The sname:VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-primitiveTopologyListRestart]]
+    pname:primitiveTopologyListRestart indicates that list type primitives,
+    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY and
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, can: use the
+    primitive restart index value in index buffers.
+  * [[features-primitiveTopologyPatchListRestart]]
+    pname:primitiveTopologyPatchListRestart indicates that the
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST topology can: use the primitive
+    restart index value in index buffers.
+
+:refpage: VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.adoc[]
+--
+endif::VK_EXT_primitive_topology_list_restart[]
+
+ifdef::VK_NV_shader_sm_builtins[]
+[open,refpage='VkPhysicalDeviceShaderSMBuiltinsFeaturesNV',desc='Structure describing the shader SM Builtins features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderSMBuiltinsFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderSMBuiltins]] pname:shaderSMBuiltins indicates whether
+    the implementation supports the SPIR-V code:ShaderSMBuiltinsNV
+    capability.
+
+:refpage: VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.adoc[]
+--
+endif::VK_NV_shader_sm_builtins[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+[open,refpage='VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures',desc='Structure describing whether the implementation can do depth and stencil image barriers separately',type='structs',alias='VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR']
+--
+The sname:VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.adoc[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.adoc[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_separate_depth_stencil_layouts-features[]
+  * [[{anchor-prefix}features-separateDepthStencilLayouts]]
+    pname:separateDepthStencilLayouts indicates whether the implementation
+    supports a sname:VkImageMemoryBarrier for a depth/stencil image with
+    only one of ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT set, and whether
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL can be used.
+// end::VK_KHR_separate_depth_stencil_layouts-features[]
+
+:refpage: VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+ifdef::VK_KHR_pipeline_executable_properties[]
+[open,refpage='VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR',desc='Structure describing whether pipeline executable properties are available',type='structs']
+--
+The sname:VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pipelineExecutableInfo]] pname:pipelineExecutableInfo
+    indicates that the implementation supports reporting properties and
+    statistics about the pipeline executables associated with a compiled
+    pipeline.
+
+:refpage: VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.adoc[]
+--
+endif::VK_KHR_pipeline_executable_properties[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+[open,refpage='VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures',desc='Structure describing the shader demote to helper invocations features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT']
+--
+The sname:VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.adoc[]
+
+ifdef::VK_EXT_shader_demote_to_helper_invocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.adoc[]
+endif::VK_EXT_shader_demote_to_helper_invocation[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_shader_demote_to_helper_invocation-features[]
+  * [[{anchor-prefix}features-shaderDemoteToHelperInvocation]]
+    pname:shaderDemoteToHelperInvocation indicates whether the
+    implementation supports the SPIR-V code:DemoteToHelperInvocationEXT
+    capability.
+// end::VK_EXT_shader_demote_to_helper_invocation-features[]
+
+:refpage: VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+
+ifdef::VK_EXT_texel_buffer_alignment[]
+[open,refpage='VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT',desc='Structure describing the texel buffer alignment features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-texelBufferAlignment]] pname:texelBufferAlignment indicates
+    whether the implementation uses more specific alignment requirements
+    advertised in slink:VkPhysicalDeviceTexelBufferAlignmentProperties
+    rather than
+    slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
+
+:refpage: VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.adoc[]
+--
+endif::VK_EXT_texel_buffer_alignment[]
+
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+[open,refpage='VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT',desc='Structure describing if dynamic feedback loops can be used',type='structs']
+--
+The sname:VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-attachmentFeedbackLoopDynamicState]]
+    pname:attachmentFeedbackLoopDynamicState specifies whether dynamic
+    feedback loops are supported.
+
+:refpage: VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.adoc[]
+--
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+[open,refpage='VkPhysicalDeviceTextureCompressionASTCHDRFeatures',desc='Structure describing ASTC HDR features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT']
+--
+The sname:VkPhysicalDeviceTextureCompressionASTCHDRFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeatures.adoc[]
+
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT.adoc[]
+endif::VK_EXT_texture_compression_astc_hdr[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_texture_compression_astc_hdr-features[]
+  * [[{anchor-prefix}features-textureCompressionASTC_HDR]]
+    pname:textureCompressionASTC_HDR indicates whether all of the ASTC HDR
+    compressed texture formats are supported.
+    If this feature is enabled, then the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
+    be supported in pname:optimalTilingFeatures for the following formats:
++
+  ** ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK
+  ** ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK
++
+To query for additional properties, or if the feature is not enabled,
+flink:vkGetPhysicalDeviceFormatProperties and
+flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
+supported properties of individual formats as normal.
+// end::VK_EXT_texture_compression_astc_hdr-features[]
+
+:refpage: VkPhysicalDeviceTextureCompressionASTCHDRFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+
+ifdef::VK_EXT_line_rasterization[]
+[open,refpage='VkPhysicalDeviceLineRasterizationFeaturesEXT',desc='Structure describing the line rasterization features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceLineRasterizationFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rectangularLines]] pname:rectangularLines indicates whether
+    the implementation supports <<primsrast-lines,rectangular line
+    rasterization>>.
+  * [[features-bresenhamLines]] pname:bresenhamLines indicates whether the
+    implementation supports <<primsrast-lines-bresenham,Bresenham-style line
+    rasterization>>.
+  * [[features-smoothLines]] pname:smoothLines indicates whether the
+    implementation supports <<primsrast-lines-smooth,smooth line
+    rasterization>>.
+  * [[features-stippledRectangularLines]] pname:stippledRectangularLines
+    indicates whether the implementation supports
+    <<primsrast-lines-stipple,stippled line rasterization>> with
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT lines.
+  * [[features-stippledBresenhamLines]] pname:stippledBresenhamLines
+    indicates whether the implementation supports
+    <<primsrast-lines-stipple,stippled line rasterization>> with
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT lines.
+  * [[features-stippledSmoothLines]] pname:stippledSmoothLines indicates
+    whether the implementation supports <<primsrast-lines-stipple,stippled
+    line rasterization>> with
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT lines.
+
+:refpage: VkPhysicalDeviceLineRasterizationFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationFeaturesEXT.adoc[]
+--
+endif::VK_EXT_line_rasterization[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+[open,refpage='VkPhysicalDeviceSubgroupSizeControlFeatures',desc='Structure describing the subgroup size control features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSubgroupSizeControlFeaturesEXT']
+--
+The sname:VkPhysicalDeviceSubgroupSizeControlFeatures structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlFeatures.adoc[]
+
+ifdef::VK_EXT_subgroup_size_control[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.adoc[]
+endif::VK_EXT_subgroup_size_control[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_subgroup_size_control-features[]
+  * [[{anchor-prefix}features-subgroupSizeControl]]
+    pname:subgroupSizeControl indicates whether the implementation supports
+    controlling shader subgroup sizes via the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    flag and the slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo
+    structure.
+  * [[{anchor-prefix}features-computeFullSubgroups]]
+    pname:computeFullSubgroups indicates whether the implementation supports
+    requiring full subgroups in compute
+ifdef::VK_NV_mesh_shader[]
+    , mesh, or task
+endif::VK_NV_mesh_shader[]
+    shaders via the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag.
+// end::VK_EXT_subgroup_size_control-features[]
+
+:refpage: VkPhysicalDeviceSubgroupSizeControlFeatures
+include::{chapters}/features.adoc[tag=features]
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+The sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure was added
+in version 2 of the `apiext:VK_EXT_subgroup_size_control` extension.
+Version 1 implementations of this extension will not fill out the features
+structure but applications may assume that both pname:subgroupSizeControl
+and pname:computeFullSubgroups are supported if the extension is supported.
+(See also the <<features-requirements, Feature Requirements>> section.)
+Applications are advised to add a
+sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure to the
+pname:pNext chain of slink:VkDeviceCreateInfo to enable the features
+regardless of the version of the extension supported by the implementation.
+If the implementation only supports version 1, it will safely ignore the
+sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure.
+
+Vulkan 1.3 implementations always support the features structure.
+====
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+
+ifdef::VK_AMD_device_coherent_memory[]
+[open,refpage='VkPhysicalDeviceCoherentMemoryFeaturesAMD',desc='Structure describing whether device coherent memory can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCoherentMemoryFeaturesAMD structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCoherentMemoryFeaturesAMD.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-deviceCoherentMemory]] pname:deviceCoherentMemory indicates
+    that the implementation supports <<VkMemoryPropertyFlagBits,device
+    coherent memory>>.
+
+:refpage: VkPhysicalDeviceCoherentMemoryFeaturesAMD
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCoherentMemoryFeaturesAMD.adoc[]
+--
+endif::VK_AMD_device_coherent_memory[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkPhysicalDeviceAccelerationStructureFeaturesKHR',desc='Structure describing the acceleration structure features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructureFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-accelerationStructure]] pname:accelerationStructure indicates
+    whether the implementation supports the acceleration structure
+    functionality.
+    See <<acceleration-structure,Acceleration Structures>>.
+  * [[features-accelerationStructureCaptureReplay]]
+    pname:accelerationStructureCaptureReplay indicates whether the
+    implementation supports saving and reusing acceleration structure device
+    addresses, e.g. for trace capture and replay.
+  * [[features-accelerationStructureIndirectBuild]]
+    pname:accelerationStructureIndirectBuild indicates whether the
+    implementation supports indirect acceleration structure build commands,
+    e.g. flink:vkCmdBuildAccelerationStructuresIndirectKHR.
+  * [[features-accelerationStructureHostCommands]]
+    pname:accelerationStructureHostCommands indicates whether the
+    implementation supports host side acceleration structure commands, e.g.
+    flink:vkBuildAccelerationStructuresKHR,
+    flink:vkCopyAccelerationStructureKHR,
+    flink:vkCopyAccelerationStructureToMemoryKHR,
+    flink:vkCopyMemoryToAccelerationStructureKHR,
+    flink:vkWriteAccelerationStructuresPropertiesKHR.
+  * [[features-descriptorBindingAccelerationStructureUpdateAfterBind]]
+    pname:descriptorBindingAccelerationStructureUpdateAfterBind indicates
+    whether the implementation supports updating acceleration structure
+    descriptors after a set is bound.
+    If this feature is not enabled,
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT must: not be used with
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR.
+
+:refpage: VkPhysicalDeviceAccelerationStructureFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructureFeaturesKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='VkPhysicalDeviceRayTracingPipelineFeaturesKHR',desc='Structure describing the ray tracing features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayTracingPipeline]] pname:rayTracingPipeline indicates
+    whether the implementation supports the ray tracing pipeline
+    functionality.
+    See <<ray-tracing,Ray Tracing>>.
+  * [[features-rayTracingPipelineShaderGroupHandleCaptureReplay]]
+    pname:rayTracingPipelineShaderGroupHandleCaptureReplay indicates whether
+    the implementation supports saving and reusing shader group handles,
+    e.g. for trace capture and replay.
+  * [[features-rayTracingPipelineShaderGroupHandleCaptureReplayMixed]]
+    pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed indicates
+    whether the implementation supports reuse of shader group handles being
+    arbitrarily mixed with creation of non-reused shader group handles.
+    If this is ename:VK_FALSE, all reused shader group handles must: be
+    specified before any non-reused handles may: be created.
+  * [[features-rayTracingPipelineTraceRaysIndirect]]
+    pname:rayTracingPipelineTraceRaysIndirect indicates whether the
+    implementation supports indirect ray tracing commands, e.g.
+    flink:vkCmdTraceRaysIndirectKHR.
+  * [[features-rayTraversalPrimitiveCulling]]
+    pname:rayTraversalPrimitiveCulling indicates whether the implementation
+    supports <<ray-traversal-culling-primitive, primitive culling during ray
+    traversal>>.
+
+:refpage: VkPhysicalDeviceRayTracingPipelineFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03575]]
+    If pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed is
+    ename:VK_TRUE, pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+    must: also be ename:VK_TRUE
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_query[]
+[open,refpage='VkPhysicalDeviceRayQueryFeaturesKHR',desc='Structure describing the ray query features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRayQueryFeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayQueryFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayQuery]] pname:rayQuery indicates whether the
+    implementation supports ray query (code:OpRayQueryProceedKHR)
+    functionality.
+
+:refpage: VkPhysicalDeviceRayQueryFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayQueryFeaturesKHR.adoc[]
+--
+endif::VK_KHR_ray_query[]
+
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+[open,refpage='VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR',desc='Structure describing the ray tracing maintenance features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayTracingMaintenance1]] pname:rayTracingMaintenance1
+    indicates that the implementation supports the following:
+  ** The code:CullMaskKHR SPIR-V builtin using the `SPV_KHR_ray_cull_mask`
+     SPIR-V extension.
+  ** Additional acceleration structure property queries:
+     ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
+     and ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR.
+  ** A new access flag ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR.
+  ** A new pipeline stage flag bit
+     ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR
+  * [[features-rayTracingPipelineTraceRaysIndirect2]]
+    pname:rayTracingPipelineTraceRaysIndirect2 indicates whether the
+    implementation supports the extended indirect ray tracing command
+    flink:vkCmdTraceRaysIndirect2KHR.
+
+:refpage: VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_maintenance1[]
+
+ifdef::VK_EXT_extended_dynamic_state[]
+[open,refpage='VkPhysicalDeviceExtendedDynamicStateFeaturesEXT',desc='Structure describing what extended dynamic state can be used',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-extendedDynamicState]] pname:extendedDynamicState indicates
+    that the implementation supports the following dynamic states:
+  ** ename:VK_DYNAMIC_STATE_CULL_MODE
+  ** ename:VK_DYNAMIC_STATE_FRONT_FACE
+  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY
+  ** ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT
+  ** ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT
+  ** ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE
+  ** ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE
+  ** ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE
+  ** ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP
+  ** ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE
+  ** ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE
+  ** ename:VK_DYNAMIC_STATE_STENCIL_OP
+
+:refpage: VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+ifdef::VK_EXT_extended_dynamic_state2[]
+[open,refpage='VkPhysicalDeviceExtendedDynamicState2FeaturesEXT',desc='Structure describing what extended dynamic state can be used',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-extendedDynamicState2]] pname:extendedDynamicState2 indicates
+    that the implementation supports the following dynamic states:
+  ** ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE
+  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE
+  ** ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE
+  * [[features-extendedDynamicState2LogicOp]]
+    pname:extendedDynamicState2LogicOp indicates that the implementation
+    supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT
+  * [[features-extendedDynamicState2PatchControlPoints]]
+    pname:extendedDynamicState2PatchControlPoints indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
+
+:refpage: VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+ifdef::VK_EXT_extended_dynamic_state3[]
+[open,refpage='VkPhysicalDeviceExtendedDynamicState3FeaturesEXT',desc='Structure describing what extended dynamic state is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedDynamicState3FeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState3FeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-extendedDynamicState3TessellationDomainOrigin]]
+    pname:extendedDynamicState3TessellationDomainOrigin indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT
+  * [[features-extendedDynamicState3DepthClampEnable]]
+    pname:extendedDynamicState3DepthClampEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT
+  * [[features-extendedDynamicState3PolygonMode]]
+    pname:extendedDynamicState3PolygonMode indicates that the implementation
+    supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT
+  * [[features-extendedDynamicState3RasterizationSamples]]
+    pname:extendedDynamicState3RasterizationSamples indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
+  * [[features-extendedDynamicState3SampleMask]]
+    pname:extendedDynamicState3SampleMask indicates that the implementation
+    supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT
+  * [[features-extendedDynamicState3AlphaToCoverageEnable]]
+    pname:extendedDynamicState3AlphaToCoverageEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT
+  * [[features-extendedDynamicState3AlphaToOneEnable]]
+    pname:extendedDynamicState3AlphaToOneEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
+  * [[features-extendedDynamicState3LogicOpEnable]]
+    pname:extendedDynamicState3LogicOpEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT
+  * [[features-extendedDynamicState3ColorBlendEnable]]
+    pname:extendedDynamicState3ColorBlendEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
+  * [[features-extendedDynamicState3ColorBlendEquation]]
+    pname:extendedDynamicState3ColorBlendEquation indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT
+  * [[features-extendedDynamicState3ColorWriteMask]]
+    pname:extendedDynamicState3ColorWriteMask indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT
+  * [[features-extendedDynamicState3RasterizationStream]]
+    pname:extendedDynamicState3RasterizationStream indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT
+  * [[features-extendedDynamicState3ConservativeRasterizationMode]]
+    pname:extendedDynamicState3ConservativeRasterizationMode indicates that
+    the implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
+  * [[features-extendedDynamicState3ExtraPrimitiveOverestimationSize]]
+    pname:extendedDynamicState3ExtraPrimitiveOverestimationSize indicates
+    that the implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT
+  * [[features-extendedDynamicState3DepthClipEnable]]
+    pname:extendedDynamicState3DepthClipEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT
+  * [[features-extendedDynamicState3SampleLocationsEnable]]
+    pname:extendedDynamicState3SampleLocationsEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
+  * [[features-extendedDynamicState3ColorBlendAdvanced]]
+    pname:extendedDynamicState3ColorBlendAdvanced indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT
+  * [[features-extendedDynamicState3ProvokingVertexMode]]
+    pname:extendedDynamicState3ProvokingVertexMode indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT
+  * [[features-extendedDynamicState3LineRasterizationMode]]
+    pname:extendedDynamicState3LineRasterizationMode indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
+  * [[features-extendedDynamicState3LineStippleEnable]]
+    pname:extendedDynamicState3LineStippleEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
+  * [[features-extendedDynamicState3DepthClipNegativeOneToOne]]
+    pname:extendedDynamicState3DepthClipNegativeOneToOne indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT
+  * [[features-extendedDynamicState3ViewportWScalingEnable]]
+    pname:extendedDynamicState3ViewportWScalingEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV
+  * [[features-extendedDynamicState3ViewportSwizzle]]
+    pname:extendedDynamicState3ViewportSwizzle indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
+  * [[features-extendedDynamicState3CoverageToColorEnable]]
+    pname:extendedDynamicState3CoverageToColorEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
+  * [[features-extendedDynamicState3CoverageToColorLocation]]
+    pname:extendedDynamicState3CoverageToColorLocation indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV
+  * [[features-extendedDynamicState3CoverageModulationMode]]
+    pname:extendedDynamicState3CoverageModulationMode indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV
+  * [[features-extendedDynamicState3CoverageModulationTableEnable]]
+    pname:extendedDynamicState3CoverageModulationTableEnable indicates that
+    the implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV
+  * [[features-extendedDynamicState3CoverageModulationTable]]
+    pname:extendedDynamicState3CoverageModulationTable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV
+  * [[features-extendedDynamicState3CoverageReductionMode]]
+    pname:extendedDynamicState3CoverageReductionMode indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV
+  * [[features-extendedDynamicState3RepresentativeFragmentTestEnable]]
+    pname:extendedDynamicState3RepresentativeFragmentTestEnable indicates
+    that the implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV
+  * [[features-extendedDynamicState3ShadingRateImageEnable]]
+    pname:extendedDynamicState3ShadingRateImageEnable indicates that the
+    implementation supports the following dynamic state:
+  ** ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV
+
+:refpage: VkPhysicalDeviceExtendedDynamicState3FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState3FeaturesEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3[]
+
+ifdef::VK_NV_device_generated_commands[]
+[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV',desc='Structure describing the device-generated commands features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-deviceGeneratedCommands]] pname:deviceGeneratedCommands
+    indicates whether the implementation supports functionality to generate
+    commands on the device.
+    See <<device-generated-commands,Device-Generated Commands>>.
+
+:refpage: VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.adoc[]
+--
+endif::VK_NV_device_generated_commands[]
+
+ifdef::VK_NV_device_generated_commands_compute[]
+[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV',desc='Structure describing the device-generated compute features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-deviceGeneratedCompute]] pname:deviceGeneratedCompute
+    indicates whether the implementation supports functionality to generate
+    dispatch commands and push constants for the compute pipeline on the
+    device.
+    See <<device-generated-commands,Device-Generated Commands>>.
+  * [[features-deviceGeneratedComputePipelines]]
+    pname:deviceGeneratedComputePipelines indicates whether the
+    implementation supports functionality to generate commands to bind
+    compute pipelines on the device.
+    See <<device-generated-commands,Device-Generated Commands>>.
+  * [[features-deviceGeneratedComputeCaptureReplay]]
+    pname:deviceGeneratedComputeCaptureReplay indicates whether the
+    implementation supports functionality to capture compute pipeline
+    address and reuse later for replay in
+    <<device-generated-commands,Device-Generated Commands>>.
+
+:refpage: VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.adoc[]
+--
+endif::VK_NV_device_generated_commands_compute[]
+
+ifdef::VK_NV_device_diagnostics_config[]
+[open,refpage='VkPhysicalDeviceDiagnosticsConfigFeaturesNV',desc='Structure describing the device-generated diagnostic configuration features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDiagnosticsConfigFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-diagnosticsConfig]] pname:diagnosticsConfig indicates whether
+    the implementation supports the ability to configure diagnostic tools.
+
+:refpage: VkPhysicalDeviceDiagnosticsConfigFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.adoc[]
+--
+endif::VK_NV_device_diagnostics_config[]
+
+ifdef::VK_EXT_device_memory_report[]
+[open,refpage='VkPhysicalDeviceDeviceMemoryReportFeaturesEXT',desc='Structure describing whether device memory report callback can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDeviceMemoryReportFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-deviceMemoryReport]] pname:deviceMemoryReport indicates
+    whether the implementation supports the ability to register device
+    memory report callbacks.
+
+:refpage: VkPhysicalDeviceDeviceMemoryReportFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.adoc[]
+--
+endif::VK_EXT_device_memory_report[]
+
+ifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+[open,refpage='VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR',desc='Structure describing whether global priority query can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR.adoc[]
+ifdef::VK_EXT_global_priority_query[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT.adoc[]
+endif::VK_EXT_global_priority_query[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-globalPriorityQuery]] pname:globalPriorityQuery indicates
+    whether the implementation supports the ability to query global queue
+    priorities.
+
+:refpage: VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR.adoc[]
+--
+endif::VK_EXT_global_priority_query,VK_KHR_global_priority[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+[open,refpage='VkPhysicalDevicePipelineCreationCacheControlFeatures',desc='Structure describing whether pipeline cache control can be supported by an implementation',type='structs',alias='VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT']
+--
+The sname:VkPhysicalDevicePipelineCreationCacheControlFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineCreationCacheControlFeatures.adoc[]
+
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT.adoc[]
+endif::VK_EXT_pipeline_creation_cache_control[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_pipeline_creation_cache_control-features[]
+  * [[{anchor-prefix}features-pipelineCreationCacheControl]]
+    pname:pipelineCreationCacheControl indicates that the implementation
+    supports:
+  ** The following can: be used in stext:Vk*PipelineCreateInfo::pname:flags:
+  *** ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT
+  *** ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
+  ** The following can: be used in
+     slink:VkPipelineCacheCreateInfo::pname:flags:
+  *** ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
+// end::VK_EXT_pipeline_creation_cache_control-features[]
+
+:refpage: VkPhysicalDevicePipelineCreationCacheControlFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineCreationCacheControlFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+[open,refpage='VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures',desc='Structure describing support for zero initialization of workgroup memory by an implementation',type='structs',alias='VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR']
+--
+The sname:VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures.adoc[]
+
+ifdef::VK_KHR_zero_initialize_workgroup_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.adoc[]
+endif::VK_KHR_zero_initialize_workgroup_memory[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_zero_initialize_workgroup_memory-features[]
+  * [[{anchor-prefix}features-shaderZeroInitializeWorkgroupMemory]]
+    pname:shaderZeroInitializeWorkgroupMemory specifies whether the
+    implementation supports initializing a variable in Workgroup storage
+    class.
+// end::VK_KHR_zero_initialize_workgroup_memory-features[]
+
+:refpage: VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+[open,refpage='VkPhysicalDevicePrivateDataFeatures',desc='Structure specifying physical device support',type='structs',alias='VkPhysicalDevicePrivateDataFeaturesEXT']
+--
+The sname:VkPhysicalDevicePrivateDataFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePrivateDataFeatures.adoc[]
+
+ifdef::VK_EXT_private_data[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevicePrivateDataFeaturesEXT.adoc[]
+endif::VK_EXT_private_data[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_private_data-features[]
+  * [[{anchor-prefix}features-privateData]] pname:privateData indicates
+    whether the implementation supports private data.
+    See <<private-data, Private Data>>.
+// end::VK_EXT_private_data-features[]
+
+:refpage: VkPhysicalDevicePrivateDataFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePrivateDataFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+
+ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
+[open,refpage='VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR',desc='Structure describing support for shader subgroup uniform control flow by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderSubgroupUniformControlFlow]]
+    pname:shaderSubgroupUniformControlFlow specifies whether the
+    implementation supports the shader execution mode
+    code:SubgroupUniformControlFlowKHR
+
+:refpage: VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.adoc[]
+--
+endif::VK_KHR_shader_subgroup_uniform_control_flow[]
+
+ifdef::VK_EXT_robustness2[]
+[open,refpage='VkPhysicalDeviceRobustness2FeaturesEXT',desc='Structure describing the out-of-bounds behavior for an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRobustness2FeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRobustness2FeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-robustBufferAccess2]] pname:robustBufferAccess2 indicates
+    whether buffer accesses are tightly bounds-checked against the range of
+    the descriptor.
+    Uniform buffers must: be bounds-checked to the range of the descriptor,
+    where the range is rounded up to a multiple of
+    <<limits-robustUniformBufferAccessSizeAlignment,
+    pname:robustUniformBufferAccessSizeAlignment>>.
+    Storage buffers must: be bounds-checked to the range of the descriptor,
+    where the range is rounded up to a multiple of
+    <<limits-robustStorageBufferAccessSizeAlignment,
+    pname:robustStorageBufferAccessSizeAlignment>>.
+    Out of bounds buffer loads will return zero values, and <<textures,
+    image load, sample, and atomic operations>> from texel buffers will have
+    [eq]#(0,0,1)# values <<textures-conversion-to-rgba,inserted for missing
+    G, B, or A components>> based on the format.
+  * [[features-robustImageAccess2]] pname:robustImageAccess2 indicates
+    whether image accesses are tightly bounds-checked against the dimensions
+    of the image view.
+    Out of bounds <<textures, image load, sample, and atomic operations>>
+    from images will return zero values, with [eq]#(0,0,1)# values
+    <<textures-conversion-to-rgba,inserted for missing G, B, or A
+    components>> based on the format.
+  * [[{vuprefix}features-nullDescriptor]] pname:nullDescriptor indicates
+    whether descriptors can: be written with a dlink:VK_NULL_HANDLE resource
+    or view, which are considered valid to access and act as if the
+    descriptor were bound to nothing.
+
+:refpage: VkPhysicalDeviceRobustness2FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000]]
+    If pname:robustBufferAccess2 is enabled then
+    <<features-robustBufferAccess, pname:robustBufferAccess>> must: also be
+    enabled
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceRobustness2FeaturesEXT.adoc[]
+--
+endif::VK_EXT_robustness2[]
+
+ifndef::VK_EXT_robustness2[]
+[[features-nullDescriptor]] nullDescriptor support requires the
+`apiext:VK_EXT_robustness2` extension.
+endif::VK_EXT_robustness2[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_image_robustness[]
+[open,refpage='VkPhysicalDeviceImageRobustnessFeatures',desc='Structure describing the out-of-bounds behavior for an implementation',type='structs',alias='VkPhysicalDeviceImageRobustnessFeaturesEXT']
+--
+The sname:VkPhysicalDeviceImageRobustnessFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageRobustnessFeatures.adoc[]
+
+ifdef::VK_EXT_image_robustness[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceImageRobustnessFeaturesEXT.adoc[]
+endif::VK_EXT_image_robustness[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_image_robustness-features[]
+  * [[{anchor-prefix}features-robustImageAccess]] pname:robustImageAccess
+    indicates whether image accesses are tightly bounds-checked against the
+    dimensions of the image view.
+    <<textures-input-validation,Invalid texels>> resulting from out of
+    bounds image loads will be replaced as described in
+    <<textures-texel-replacement,Texel Replacement>>, with either
+    [eq]#(0,0,1)# or [eq]#(0,0,0)# values inserted for missing G, B, or A
+    components based on the format.
+// end::VK_EXT_image_robustness-features[]
+
+:refpage: VkPhysicalDeviceImageRobustnessFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageRobustnessFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_image_robustness[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+[open,refpage='VkPhysicalDeviceShaderTerminateInvocationFeatures',desc='Structure describing support for the SPIR-V code:SPV_KHR_terminate_invocation extension',type='structs',alias='VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR']
+--
+The sname:VkPhysicalDeviceShaderTerminateInvocationFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderTerminateInvocationFeatures.adoc[]
+
+ifdef::VK_KHR_shader_terminate_invocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR.adoc[]
+endif::VK_KHR_shader_terminate_invocation[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_shader_terminate_invocation-features[]
+  * [[{anchor-prefix}features-shaderTerminateInvocation]]
+    pname:shaderTerminateInvocation specifies whether the implementation
+    supports SPIR-V modules that use the `SPV_KHR_terminate_invocation`
+    extension.
+// end::VK_KHR_shader_terminate_invocation-features[]
+
+:refpage: VkPhysicalDeviceShaderTerminateInvocationFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderTerminateInvocationFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+
+ifdef::VK_EXT_custom_border_color[]
+[open,refpage='VkPhysicalDeviceCustomBorderColorFeaturesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCustomBorderColorFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-customBorderColors]] pname:customBorderColors indicates that
+    the implementation supports providing a pname:borderColor value with one
+    of the following values at sampler creation time:
+  ** ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
+  ** ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
+  * [[features-customBorderColorWithoutFormat]]
+    pname:customBorderColorWithoutFormat indicates that explicit formats are
+    not required for custom border colors and the value of the pname:format
+    member of the slink:VkSamplerCustomBorderColorCreateInfoEXT structure
+    may: be ename:VK_FORMAT_UNDEFINED.
+    If this feature bit is not set, applications must: provide the
+    elink:VkFormat of the image view(s) being sampled by this sampler in the
+    pname:format member of the slink:VkSamplerCustomBorderColorCreateInfoEXT
+    structure.
+
+:refpage: VkPhysicalDeviceCustomBorderColorFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorFeaturesEXT.adoc[]
+--
+endif::VK_EXT_custom_border_color[]
+
+ifdef::VK_EXT_border_color_swizzle[]
+[open,refpage='VkPhysicalDeviceBorderColorSwizzleFeaturesEXT',desc='Structure describing whether samplers with custom border colors require the component swizzle specified in order to have defined behavior',type='structs']
+--
+The sname:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-borderColorSwizzle]] pname:borderColorSwizzle indicates that
+    defined values are returned by sampled image operations when used with a
+    sampler that uses a ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
+    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK,
+    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT pname:borderColor and an image view
+    that uses a non-<<resources-image-views-identity-mappings,identity
+    component mapping>>, when either pname:borderColorSwizzleFromImage is
+    enabled or the slink:VkSamplerBorderColorComponentMappingCreateInfoEXT
+    is specified.
+  * [[features-borderColorSwizzleFromImage]]
+    pname:borderColorSwizzleFromImage indicates that the implementation will
+    return the correct border color values from sampled image operations
+    under the conditions expressed above, without the application having to
+    specify the border color component mapping when creating the sampler
+    object.
+    If this feature bit is not set, applications can: chain a
+    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT structure when
+    creating samplers for use with image views that do not have an
+    <<resources-image-views-identity-mappings,identity swizzle>> and, when
+    those samplers are combined with image views using the same component
+    mapping, sampled image operations that use opaque black or custom border
+    colors will return the correct border color values.
+
+:refpage: VkPhysicalDeviceBorderColorSwizzleFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.adoc[]
+--
+endif::VK_EXT_border_color_swizzle[]
+
+ifdef::VK_KHR_portability_subset[]
+[open,refpage='VkPhysicalDevicePortabilitySubsetFeaturesKHR',desc='Structure describing the features that may not be supported by an implementation of the Vulkan 1.0 Portability Subset',type='structs']
+--
+The sname:VkPhysicalDevicePortabilitySubsetFeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-constantAlphaColorBlendFactors]]
+    pname:constantAlphaColorBlendFactors indicates whether this
+    implementation supports constant _alpha_ <<framebuffer-blendfactors>>
+    used as source or destination _color_ <<framebuffer-blending>>.
+  * [[features-events]] pname:events indicates whether this implementation
+    supports synchronization using <<synchronization-events>>.
+  * [[features-imageViewFormatReinterpretation]]
+    pname:imageViewFormatReinterpretation indicates whether this
+    implementation supports a sname:VkImageView being created with a texel
+    format containing a different number of components, or a different
+    number of bits in each component, than the texel format of the
+    underlying sname:VkImage.
+  * [[features-imageViewFormatSwizzle]] pname:imageViewFormatSwizzle
+    indicates whether this implementation supports remapping format
+    components using slink:VkImageViewCreateInfo::pname:components.
+  * [[features-imageView2DOn3DImage]] pname:imageView2DOn3DImage indicates
+    whether this implementation supports a sname:VkImage being created with
+    the ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT flag set, permitting a
+    2D or 2D array image view to be created on a 3D sname:VkImage.
+  * [[features-multisampleArrayImage]] pname:multisampleArrayImage indicates
+    whether this implementation supports a sname:VkImage being created as a
+    2D array with multiple samples per texel.
+  * [[features-mutableComparisonSamplers]] pname:mutableComparisonSamplers
+    indicates whether this implementation allows descriptors with comparison
+    samplers to be <<descriptorsets-updates, updated>>.
+  * [[features-pointPolygons]] pname:pointPolygons indicates whether this
+    implementation supports <<primsrast>> using a _point_
+    <<primsrast-polygonmode>>.
+  * [[features-samplerMipLodBias]] pname:samplerMipLodBias indicates whether
+    this implementation supports setting a <<samplers-mipLodBias, mipmap LOD
+    bias value>> when <<samplers, creating a sampler>>.
+  * [[features-separateStencilMaskRef]] pname:separateStencilMaskRef
+    indicates whether this implementation supports separate front and back
+    <<fragops-stencil>> reference values.
+  * [[features-shaderSampleRateInterpolationFunctions]]
+    pname:shaderSampleRateInterpolationFunctions indicates whether this
+    implementation supports fragment shaders which use the
+    <<spirvenv-capabilities-table-InterpolationFunction,
+    code:InterpolationFunction>> capability and the extended instructions
+    `InterpolateAtCentroid`, `InterpolateAtOffset`, and
+    `InterpolateAtSample` from the `GLSL.std.450` extended instruction set.
+    This member is only meaningful if the <<features-sampleRateShading,
+    pname:sampleRateShading>> feature is supported.
+  * [[features-tessellationIsolines]] pname:tessellationIsolines indicates
+    whether this implementation supports
+    <<tessellation-isoline-tessellation, isoline output>> from the
+    <<tessellation>> stage of a graphics pipeline.
+    This member is only meaningful if <<features-tessellationShader,
+    pname:tessellationShader>> are supported.
+  * [[features-tessellationPointMode]] pname:tessellationPointMode indicates
+    whether this implementation supports <<tessellation-point-mode, point
+    output>> from the <<tessellation>> stage of a graphics pipeline.
+    This member is only meaningful if <<features-tessellationShader,
+    pname:tessellationShader>> are supported.
+  * [[features-triangleFans]] pname:triangleFans indicates whether this
+    implementation supports <<drawing-triangle-fans>> primitive topology.
+  * [[features-vertexAttributeAccessBeyondStride]]
+    pname:vertexAttributeAccessBeyondStride indicates whether this
+    implementation supports accessing a vertex input attribute beyond the
+    stride of the corresponding vertex input binding.
+
+:refpage: VkPhysicalDevicePortabilitySubsetFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetFeaturesKHR.adoc[]
+--
+endif::VK_KHR_portability_subset[]
+
+ifdef::VKSC_VERSION_1_0[]
+[open,refpage='VkPhysicalDeviceVulkanSC10Features',desc='Structure describing the features that may not be supported by an implementation of Vulkan SC',type='structs']
+--
+The sname:VkPhysicalDeviceVulkanSC10Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkanSC10Features.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderAtomicInstructions]] pname:shaderAtomicInstructions
+    indicates whether this implementation supports shaders which use the
+    SPIR-V code:OpAtomic* instructions.
+
+:refpage: VkPhysicalDeviceVulkanSC10Features
+include::{chapters}/features.adoc[tag=features]
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkPhysicalDeviceVulkanSC10Features <<SCID-1>>
+// end::scaddition[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkanSC10Features::pname:shaderAtomicInstructions
+    are made optional <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkanSC10Features.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_KHR_performance_query[]
+include::{chapters}/VK_KHR_performance_query/features.adoc[]
+endif::VK_KHR_performance_query[]
+
+ifdef::VK_EXT_4444_formats[]
+[open,refpage='VkPhysicalDevice4444FormatsFeaturesEXT',desc='Structure describing additional 4444 formats supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDevice4444FormatsFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevice4444FormatsFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-formatA4R4G4B4]] pname:formatA4R4G4B4 indicates that the
+    implementation must: support using a elink:VkFormat of
+    ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT with at least the following
+    elink:VkFormatFeatureFlagBits:
+  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+  ** ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
+  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+  * [[features-formatA4B4G4R4]] pname:formatA4B4G4R4 indicates that the
+    implementation must: support using a elink:VkFormat of
+    ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT with at least the following
+    elink:VkFormatFeatureFlagBits:
+  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+  ** ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
+  ** ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+
+:refpage: VkPhysicalDevice4444FormatsFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice4444FormatsFeaturesEXT.adoc[]
+
+ifdef::VK_VERSION_1_3[]
+[NOTE]
+.Note
+====
+Although the formats defined by the `apiext:VK_EXT_4444_formats` extension
+were promoted to Vulkan 1.3 as optional formats, the
+slink:VkPhysicalDevice4444FormatsFeaturesEXT structure was not promoted to
+Vulkan 1.3.
+====
+endif::VK_VERSION_1_3[]
+--
+endif::VK_EXT_4444_formats[]
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+[open,refpage='VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT',desc='Structure describing whether the mutable descriptor type is supported',type='structs',alias='VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE']
+--
+The sname:VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.adoc[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE.adoc[]
+endif::VK_VALVE_mutable_descriptor_type[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-mutableDescriptorType]] pname:mutableDescriptorType indicates
+    that the implementation must: support using the elink:VkDescriptorType
+    of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT with at least the following
+    descriptor types, where any combination of the types must: be supported:
+  ** ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
+  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+
+  * Additionally, pname:mutableDescriptorType indicates that:
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Non-uniform descriptor indexing must: be supported if all descriptor
+     types in a slink:VkMutableDescriptorTypeListEXT for
+     ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT have the corresponding non-uniform
+     indexing features enabled in
+     slink:VkPhysicalDeviceDescriptorIndexingFeatures.
+  ** ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT with
+     pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT relaxes
+     the list of required descriptor types to the descriptor types which
+     have the corresponding update-after-bind feature enabled in
+     slink:VkPhysicalDeviceDescriptorIndexingFeatures.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Dynamically uniform descriptor indexing must: be supported if all
+     descriptor types in a slink:VkMutableDescriptorTypeListEXT for
+     ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT have the corresponding dynamic
+     indexing features enabled.
+  ** ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT must: be
+     supported.
+  ** ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT must: be supported.
+
+:refpage: VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.adoc[]
+--
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+ifdef::VK_EXT_depth_clip_control[]
+[open,refpage='VkPhysicalDeviceDepthClipControlFeaturesEXT',desc='Structure describing additional depth clip control supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDepthClipControlFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthClipControlFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-depthClipControl]] pname:depthClipControl indicates that the
+    implementation supports setting
+    slink:VkPipelineViewportDepthClipControlCreateInfoEXT::pname:negativeOneToOne
+    to ename:VK_TRUE.
+
+:refpage: VkPhysicalDeviceDepthClipControlFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthClipControlFeaturesEXT.adoc[]
+--
+endif::VK_EXT_depth_clip_control[]
+
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+[open,refpage='VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',desc='Structure describing the workgroup storage explicit layout features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-workgroupMemoryExplicitLayout]]
+    pname:workgroupMemoryExplicitLayout indicates whether the implementation
+    supports the SPIR-V code:WorkgroupMemoryExplicitLayoutKHR capability.
+  * [[features-workgroupMemoryExplicitLayoutScalarBlockLayout]]
+    pname:workgroupMemoryExplicitLayoutScalarBlockLayout indicates whether
+    the implementation supports scalar alignment for laying out Workgroup
+    Blocks.
+  * [[features-workgroupMemoryExplicitLayout8BitAccess]]
+    pname:workgroupMemoryExplicitLayout8BitAccess indicates whether objects
+    in the code:Workgroup storage class with the code:Block decoration can:
+    have 8-bit integer members.
+    If this feature is not enabled, 8-bit integer members must: not be used
+    in such objects.
+    This also indicates whether shader modules can: declare the
+    code:WorkgroupMemoryExplicitLayout8BitAccessKHR capability.
+  * [[features-workgroupMemoryExplicitLayout16BitAccess]]
+    pname:workgroupMemoryExplicitLayout16BitAccess indicates whether objects
+    in the code:Workgroup storage class with the code:Block decoration can:
+    have 16-bit integer and 16-bit floating-point members.
+    If this feature is not enabled, 16-bit integer or 16-bit floating-point
+    members must: not be used in such objects.
+    This also indicates whether shader modules can: declare the
+    code:WorkgroupMemoryExplicitLayout16BitAccessKHR capability.
+
+:refpage: VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.adoc[]
+--
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkPhysicalDeviceSynchronization2Features',desc='Structure describing whether the implementation supports v2 synchronization commands',type='structs',alias='VkPhysicalDeviceSynchronization2FeaturesKHR']
+--
+The sname:VkPhysicalDeviceSynchronization2Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSynchronization2Features.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSynchronization2FeaturesKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_synchronization2-features[]
+  * [[{anchor-prefix}features-synchronization2]] pname:synchronization2
+    indicates whether the implementation supports the new set of
+    synchronization commands introduced in `apiext:VK_KHR_synchronization2`.
+// end::VK_KHR_synchronization2-features[]
+
+:refpage: VkPhysicalDeviceSynchronization2Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSynchronization2Features.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+[open,refpage='VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT',desc='Structure describing whether the dynamic vertex input state can be used',type='structs']
+--
+The sname:VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-vertexInputDynamicState]] pname:vertexInputDynamicState
+    indicates that the implementation supports the following dynamic states:
+  ** ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
+
+:refpage: VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.adoc[]
+--
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+ifdef::VK_EXT_primitives_generated_query[]
+[open,refpage='VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT',desc='Structure describing support for primitives generated query',type='structs']
+--
+The sname:VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-primitivesGeneratedQuery]] pname:primitivesGeneratedQuery
+    indicates whether the implementation supports the
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query type.
+  * [[features-primitivesGeneratedQueryWithRasterizerDiscard]]
+    pname:primitivesGeneratedQueryWithRasterizerDiscard indicates whether
+    the implementation supports this query when
+    <<primsrast-discard,rasterization discard>> is enabled.
+  * [[features-primitivesGeneratedQueryWithNonZeroStreams]]
+    pname:primitivesGeneratedQueryWithNonZeroStreams indicates whether the
+    implementation supports this query with a non-zero index in
+    flink:vkCmdBeginQueryIndexedEXT.
+
+:refpage: VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT.adoc[]
+--
+endif::VK_EXT_primitives_generated_query[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[open,refpage='VkPhysicalDeviceFragmentShadingRateFeaturesKHR',desc='Structure indicating support for variable rate fragment shading',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShadingRateFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pipelineFragmentShadingRate]]
+    pname:pipelineFragmentShadingRate indicates that the implementation
+    supports the <<primsrast-fragment-shading-rate-pipeline, pipeline
+    fragment shading rate>>.
+  * [[features-primitiveFragmentShadingRate]]
+    pname:primitiveFragmentShadingRate indicates that the implementation
+    supports the <<primsrast-fragment-shading-rate-primitive, primitive
+    fragment shading rate>>.
+  * [[features-attachmentFragmentShadingRate]]
+    pname:attachmentFragmentShadingRate indicates that the implementation
+    supports the <<primsrast-fragment-shading-rate-attachment, attachment
+    fragment shading rate>>.
+
+:refpage: VkPhysicalDeviceFragmentShadingRateFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.adoc[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_EXT_legacy_dithering[]
+[open,refpage='VkPhysicalDeviceLegacyDitheringFeaturesEXT',desc='Structure describing support for legacy dithering',type='structs']
+--
+The sname:VkPhysicalDeviceLegacyDitheringFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLegacyDitheringFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-legacyDithering]] pname:legacyDithering indicates whether the
+    implementation supports <<interfaces-legacy-dithering, Legacy
+    Dithering>>.
+
+:refpage: VkPhysicalDeviceLegacyDitheringFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLegacyDitheringFeaturesEXT.adoc[]
+--
+endif::VK_EXT_legacy_dithering[]
+
+ifdef::VK_NV_fragment_shading_rate_enums[]
+[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV',desc='Structure indicating support for fragment shading rate enums',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-fragmentShadingRateEnums]] pname:fragmentShadingRateEnums
+    indicates that the implementation supports specifying fragment shading
+    rates using the ename:VkFragmentShadingRateNV enumerated type.
+  * [[features-supersampleFragmentShadingRates]]
+    pname:supersampleFragmentShadingRates indicates that the implementation
+    supports fragment shading rate enum values indicating more than one
+    invocation per fragment.
+  * [[features-noInvocationFragmentShadingRates]]
+    pname:noInvocationFragmentShadingRates indicates that the implementation
+    supports a fragment shading rate enum value indicating that no fragment
+    shaders should be invoked when that shading rate is used.
+
+:refpage: VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.adoc[]
+--
+endif::VK_NV_fragment_shading_rate_enums[]
+
+
+ifdef::VK_NV_inherited_viewport_scissor[]
+[open,refpage='VkPhysicalDeviceInheritedViewportScissorFeaturesNV',desc='Structure describing the viewport scissor inheritance behavior for an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceInheritedViewportScissorFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-inheritedViewportScissor2D]] pname:inheritedViewportScissor2D
+    indicates whether secondary command buffers can inherit most of the
+    dynamic state affected by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_discard_rectangles[]
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT,
+endif::VK_EXT_discard_rectangles[]
+    ename:VK_DYNAMIC_STATE_VIEWPORT or ename:VK_DYNAMIC_STATE_SCISSOR, from
+    a primary command buffer.
+
+:refpage: VkPhysicalDeviceInheritedViewportScissorFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.adoc[]
+--
+endif::VK_NV_inherited_viewport_scissor[]
+
+ifdef::VK_EXT_pipeline_protected_access[]
+[open,refpage='VkPhysicalDevicePipelineProtectedAccessFeaturesEXT',desc='Structure describing support for specifying protected access on individual pipelines',type='structs']
+--
+The sname:VkPhysicalDevicePipelineProtectedAccessFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineProtectedAccessFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pipelineProtectedAccess]] pname:pipelineProtectedAccess
+    indicates whether the implementation supports specifying protected
+    access on individual pipelines.
+
+:refpage: VkPhysicalDevicePipelineProtectedAccessFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineProtectedAccessFeaturesEXT.adoc[]
+--
+endif::VK_EXT_pipeline_protected_access[]
+
+ifdef::VK_EXT_ycbcr_2plane_444_formats[]
+[open,refpage='VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT',desc='Structure describing whether the implementation supports additional 2-plane 444 {YCbCr} formats',type='structs']
+--
+The sname:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-ycbcr2plane444Formats]] pname:ycbcr2plane444Formats indicates
+    that the implementation supports the following 2-plane 444 {YCbCr}
+    formats:
+  ** ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM
+  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16
+  ** ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM
+
+:refpage: VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.adoc[]
+
+ifdef::VK_VERSION_1_3[]
+[NOTE]
+.Note
+====
+Although the formats defined by the `apiext:VK_EXT_ycbcr_2plane_444_formats`
+were promoted to Vulkan 1.3 as optional formats, the
+slink:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT structure was not
+promoted to Vulkan 1.3.
+====
+endif::VK_VERSION_1_3[]
+--
+endif::VK_EXT_ycbcr_2plane_444_formats[]
+
+ifdef::VK_EXT_color_write_enable[]
+[open,refpage='VkPhysicalDeviceColorWriteEnableFeaturesEXT',desc='Structure describing whether writes to color attachments can be enabled and disabled dynamically',type='structs']
+--
+The sname:VkPhysicalDeviceColorWriteEnableFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceColorWriteEnableFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-colorWriteEnable]] pname:colorWriteEnable indicates that the
+    implementation supports the dynamic state
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT.
+
+:refpage: VkPhysicalDeviceColorWriteEnableFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceColorWriteEnableFeaturesEXT.adoc[]
+--
+endif::VK_EXT_color_write_enable[]
+
+ifdef::VK_EXT_pipeline_properties[]
+[open,refpage='VkPhysicalDevicePipelinePropertiesFeaturesEXT',desc='Structure describing what pipeline properties are supported',type='structs']
+--
+The sname:VkPhysicalDevicePipelinePropertiesFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelinePropertiesFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pipelinePropertiesIdentifier]]
+    pname:pipelinePropertiesIdentifier indicates that the implementation
+    supports querying a unique pipeline identifier.
+
+:refpage: VkPhysicalDevicePipelinePropertiesFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelinePropertiesFeaturesEXT.adoc[]
+--
+endif::VK_EXT_pipeline_properties[]
+
+ifdef::VK_EXT_provoking_vertex[]
+[open,refpage='VkPhysicalDeviceProvokingVertexFeaturesEXT',desc='Structure describing the provoking vertex features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceProvokingVertexFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-provokingVertexLast]] pname:provokingVertexLast indicates
+    whether the implementation supports the
+    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT
+    <<VkProvokingVertexModeEXT,provoking vertex mode>> for flat shading.
+  * [[features-transformFeedbackPreservesProvokingVertex]]
+    pname:transformFeedbackPreservesProvokingVertex indicates that the order
+    of vertices within each primitive written by transform feedback will
+    preserve the provoking vertex.
+    This does not apply to triangle fan primitives when
+    <<limits-transformFeedbackPreservesTriangleFanProvokingVertex,
+    pname:transformFeedbackPreservesTriangleFanProvokingVertex>> is
+    ename:VK_FALSE.
+    pname:transformFeedbackPreservesProvokingVertex must: be ename:VK_FALSE
+    when the `apiext:VK_EXT_transform_feedback` extension is not supported.
+
+:refpage: VkPhysicalDeviceProvokingVertexFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+ifdef::VK_EXT_transform_feedback[]
+When sname:VkPhysicalDeviceProvokingVertexFeaturesEXT is in the pname:pNext
+chain of slink:VkDeviceCreateInfo but the <<features-transformFeedback,
+pname:transformFeedback>> feature is not enabled, the value of
+pname:transformFeedbackPreservesProvokingVertex is ignored.
+endif::VK_EXT_transform_feedback[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexFeaturesEXT.adoc[]
+--
+endif::VK_EXT_provoking_vertex[]
+
+ifdef::VK_EXT_descriptor_buffer[]
+[open,refpage='VkPhysicalDeviceDescriptorBufferFeaturesEXT',desc='Structure describing the descriptor buffer features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDescriptorBufferFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-descriptorBuffer]] pname:descriptorBuffer indicates that the
+    implementation supports putting shader-accessible descriptors directly
+    in memory.
+  * [[features-descriptorBufferCaptureReplay]]
+    pname:descriptorBufferCaptureReplay indicates that the implementation
+    supports capture and replay when using descriptor buffers.
+    If this is ename:VK_TRUE, all resources created with
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT,
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT,
+    ename:VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT,
+    ename:VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, or
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    must: be created before resources of the same types without those flags.
+  * [[features-descriptorBufferImageLayoutIgnored]]
+    pname:descriptorBufferImageLayoutIgnored indicates that the
+    implementation will ignore pname:imageLayout in
+    sname:VkDescriptorImageInfo when calling flink:vkGetDescriptorEXT.
+  * [[features-descriptorBufferPushDescriptors]]
+    pname:descriptorBufferPushDescriptors indicates that the implementation
+    supports using push descriptors with descriptor buffers.
+
+:refpage: VkPhysicalDeviceDescriptorBufferFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferFeaturesEXT.adoc[]
+--
+endif::VK_EXT_descriptor_buffer[]
+
+ifdef::VK_EXT_pageable_device_local_memory[]
+[open,refpage='VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT',desc='Structure describing whether the implementation supports pageable device-local memory',type='structs']
+--
+The sname:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pageableDeviceLocalMemory]] pname:pageableDeviceLocalMemory
+    indicates that the implementation supports pageable device-local memory
+    and may: transparently move device-local memory allocations to
+    host-local memory to better share device-local memory with other
+    applications.
+
+:refpage: VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.adoc[]
+--
+endif::VK_EXT_pageable_device_local_memory[]
+
+ifdef::VK_EXT_multi_draw[]
+[open,refpage='VkPhysicalDeviceMultiDrawFeaturesEXT',desc='Structure describing whether the implementation supports multi draw functionality',type='structs']
+--
+The sname:VkPhysicalDeviceMultiDrawFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiDrawFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-multiDraw]] pname:multiDraw indicates that the implementation
+    supports flink:vkCmdDrawMultiEXT and flink:vkCmdDrawMultiIndexedEXT.
+
+:refpage: VkPhysicalDeviceMultiDrawFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawFeaturesEXT.adoc[]
+--
+endif::VK_EXT_multi_draw[]
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[open,refpage='VkPhysicalDeviceRayTracingMotionBlurFeaturesNV',desc='Structure describing the ray tracing motion blur features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingMotionBlurFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayTracingMotionBlur]] pname:rayTracingMotionBlur indicates
+    whether the implementation supports the motion blur feature.
+  * [[features-rayTracingMotionBlurPipelineTraceRaysIndirect]]
+    pname:rayTracingMotionBlurPipelineTraceRaysIndirect indicates whether
+    the implementation supports indirect ray tracing commands with the
+    motion blur feature enabled.
+
+:refpage: VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.adoc[]
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+ifdef::VK_EXT_opacity_micromap[]
+[open,refpage='VkPhysicalDeviceOpacityMicromapFeaturesEXT',desc='Structure describing the ray tracing opacity micromap features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceOpacityMicromapFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceOpacityMicromapFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-micromap]] pname:micromap indicates whether the
+    implementation supports the micromap array feature.
+  * [[features-micromapCaptureReplay]] pname:micromapCaptureReplay indicates
+    whether the implementation supports capture and replay of addresses for
+    micromap arrays.
+  * [[features-micromapHostCommands]] pname:micromapHostCommands indicates
+    whether the implementation supports host side micromap array commands.
+
+:refpage: VkPhysicalDeviceOpacityMicromapFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceOpacityMicromapFeaturesEXT.adoc[]
+--
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_NV_displacement_micromap[]
+[open,refpage='VkPhysicalDeviceDisplacementMicromapFeaturesNV',desc='Structure describing the ray tracing displacement micromap features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDisplacementMicromapFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDisplacementMicromapFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-displacementMicromap]] pname:displacementMicromap indicates
+    whether the implementation supports the displacement micromap feature.
+
+:refpage: VkPhysicalDeviceDisplacementMicromapFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDisplacementMicromapFeaturesNV.adoc[]
+--
+endif::VK_NV_displacement_micromap[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+[open,refpage='VkPhysicalDeviceSubpassShadingFeaturesHUAWEI',desc='Structure describing whether subpass shading is enabled',type='structs']
+--
+The sname:VkPhysicalDeviceSubpassShadingFeaturesHUAWEI structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-subpassShading]] pname:subpassShading specifies whether
+    subpass shading is supported.
+
+:refpage: VkPhysicalDeviceSubpassShadingFeaturesHUAWEI
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_NV_external_memory_rdma[]
+[open,refpage='VkPhysicalDeviceExternalMemoryRDMAFeaturesNV',desc='Structure describing the external memory RDMA features supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalMemoryRDMAFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-externalMemoryRDMA]] pname:externalMemoryRDMA indicates
+    whether the implementation has support for the
+    ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV memory property and the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV external memory
+    handle type.
+
+:refpage: VkPhysicalDeviceExternalMemoryRDMAFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.adoc[]
+--
+endif::VK_NV_external_memory_rdma[]
+
+ifdef::VK_KHR_present_id[]
+[open,refpage='VkPhysicalDevicePresentIdFeaturesKHR',desc='Structure indicating support for present id',type='structs']
+--
+The sname:VkPhysicalDevicePresentIdFeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePresentIdFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-presentId]] pname:presentId indicates that the implementation
+    supports specifying present ID values in the sname:VkPresentIdKHR
+    extension to the sname:VkPresentInfoKHR struct.
+
+:refpage: VkPhysicalDevicePresentIdFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePresentIdFeaturesKHR.adoc[]
+--
+endif::VK_KHR_present_id[]
+
+ifdef::VK_KHR_present_wait[]
+[open,refpage='VkPhysicalDevicePresentWaitFeaturesKHR',desc='Structure indicating support for present wait',type='structs']
+--
+The sname:VkPhysicalDevicePresentWaitFeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePresentWaitFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-presentWait]] pname:presentWait indicates that the
+    implementation supports fname:vkWaitForPresentKHR.
+
+:refpage: VkPhysicalDevicePresentWaitFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePresentWaitFeaturesKHR.adoc[]
+--
+endif::VK_KHR_present_wait[]
+
+ifdef::VK_EXT_host_image_copy[]
+[open,refpage='VkPhysicalDeviceHostImageCopyFeaturesEXT',desc='Structure indicating support for copies to or from images from host memory',type='structs']
+--
+The sname:VkPhysicalDeviceHostImageCopyFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceHostImageCopyFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-hostImageCopy]] pname:hostImageCopy indicates that the
+    implementation supports copying from host memory to images using the
+    flink:vkCopyMemoryToImageEXT command, copying from images to host memory
+    using the flink:vkCopyImageToMemoryEXT command, and copying between
+    images using the flink:vkCopyImageToImageEXT command.
+
+:refpage: VkPhysicalDeviceHostImageCopyFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceHostImageCopyFeaturesEXT.adoc[]
+--
+endif::VK_EXT_host_image_copy[]
+
+ifdef::VK_NV_present_barrier[]
+[open,refpage='VkPhysicalDevicePresentBarrierFeaturesNV',desc='Structure indicating support for VK_NV_present_barrier extension',type='structs']
+--
+The sname:VkPhysicalDevicePresentBarrierFeaturesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePresentBarrierFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-presentBarrier]] pname:presentBarrier indicates that the
+    implementation supports the present barrier feature.
+
+:refpage: VkPhysicalDevicePresentBarrierFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePresentBarrierFeaturesNV.adoc[]
+--
+endif::VK_NV_present_barrier[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+[open,refpage='VkPhysicalDeviceShaderIntegerDotProductFeatures',desc='Structure describing integer dot product features that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR']
+--
+The sname:VkPhysicalDeviceShaderIntegerDotProductFeatures structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductFeatures.adoc[]
+
+ifdef::VK_KHR_shader_integer_dot_product[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR.adoc[]
+endif::VK_KHR_shader_integer_dot_product[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_shader_integer_dot_product-features[]
+  * [[{anchor-prefix}features-shaderIntegerDotProduct]]
+    pname:shaderIntegerDotProduct specifies whether shader modules can:
+    declare the code:DotProductInputAllKHR, code:DotProductInput4x8BitKHR,
+    code:DotProductInput4x8BitPackedKHR and code:DotProductKHR capabilities.
+// end::VK_KHR_shader_integer_dot_product-features[]
+
+:refpage: VkPhysicalDeviceShaderIntegerDotProductFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='VkPhysicalDeviceMaintenance4Features',desc='Structure describing whether the implementation supports maintenance4 functionality',type='structs',alias='VkPhysicalDeviceMaintenance4FeaturesKHR']
+--
+The sname:VkPhysicalDeviceMaintenance4Features structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4Features.adoc[]
+
+ifdef::VK_KHR_maintenance4[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4FeaturesKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_maintenance4-features[]
+  * [[{anchor-prefix}features-maintenance4]] pname:maintenance4 indicates
+    that the implementation supports the following:
+  ** The application may: destroy a slink:VkPipelineLayout object
+     immediately after using it to create another object.
+  ** code:LocalSizeId can: be used as an alternative to code:LocalSize to
+     specify the local workgroup size with specialization constants.
+  ** Images created with identical creation parameters will always have the
+     same alignment requirements.
+  ** The size memory requirement of a buffer or image is never greater than
+     that of another buffer or image created with a greater or equal size.
+  ** Push constants do not have to be initialized before they are
+     dynamically accessed.
+  ** The interface matching rules allow a larger output vector to match with
+     a smaller input vector, with additional values being discarded.
+// end::VK_KHR_maintenance4-features[]
+
+:refpage: VkPhysicalDeviceMaintenance4Features
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4Features.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='VkPhysicalDeviceMaintenance5FeaturesKHR',desc='Structure describing whether the implementation supports maintenance5 functionality',type='structs',alias='VkPhysicalDeviceMaintenance5FeaturesKHR']
+--
+The sname:VkPhysicalDeviceMaintenance5FeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance5FeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-maintenance5]] pname:maintenance5 indicates that the
+    implementation supports the following:
+  ** The ability to expose support for the optional format
+     ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR.
+  ** The ability to expose support for the optional format
+     ename:VK_FORMAT_A8_UNORM_KHR.
+  ** A property to indicate that multisample coverage operations are
+     performed after sample counting in EarlyFragmentTests mode.
+  ** Creating a sname:VkBufferView with a subset of the associated
+     sname:VkBuffer usage using slink:VkBufferUsageFlags2CreateInfoKHR.
+  ** A new function flink:vkCmdBindIndexBuffer2KHR, allowing a range of
+     memory to be bound as an index buffer.
+  ** flink:vkGetDeviceProcAddr will return `NULL` for function pointers of
+     core functions for versions higher than the version requested by the
+     application.
+  ** flink:vkCmdBindVertexBuffers2 supports using ename:VK_WHOLE_SIZE in the
+     pname:pSizes parameter.
+  ** If code:PointSize is not written, a default value of `1.0` is used for
+     the size of points.
+  ** slink:VkShaderModuleCreateInfo can: be added as a chained structure to
+     pipeline creation via slink:VkPipelineShaderStageCreateInfo, rather
+     than having to create a shader module.
+  ** A function flink:vkGetRenderingAreaGranularityKHR to query the optimal
+     render area for a dynamic rendering instance.
+  ** A property to indicate that depth/stencil texturing operations with
+     ename:VK_COMPONENT_SWIZZLE_ONE have defined behavior.
+  ** flink:vkGetDeviceImageSubresourceLayoutKHR allows an application to
+     perform a flink:vkGetImageSubresourceLayout query without having to
+     create an image.
+  ** ename:VK_REMAINING_ARRAY_LAYERS as the pname:layerCount member of
+     slink:VkImageSubresourceLayers.
+  ** A property to indicate whether code:PointSize controls the final
+     rasterization of polygons if <<primsrast-polygonmode, polygon mode>> is
+     ename:VK_POLYGON_MODE_POINT.
+  ** Two properties to indicate the non-strict line rasterization algorithm
+     used.
+  ** Two new flags words elink:VkPipelineCreateFlagBits2KHR and
+     elink:VkBufferUsageFlagBits2KHR.
+  ** Physical-device-level functions can: now be called with any value in
+     the valid range for a type beyond the defined enumerants, such that
+     applications can avoid checking individual features, extensions, or
+     versions before querying supported properties of a particular
+     enumerant.
+  ** Copies between images of any type are allowed, with 1D images treated
+     as 2D images with a height of `1`.
+
+:refpage: VkPhysicalDeviceMaintenance5FeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance5FeaturesKHR.adoc[]
+--
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+[open,refpage='VkPhysicalDeviceDynamicRenderingFeatures',desc='Structure indicating support for dynamic render pass instances',type='structs',alias='VkPhysicalDeviceDynamicRenderingFeaturesKHR']
+--
+The sname:VkPhysicalDeviceDynamicRenderingFeatures structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDynamicRenderingFeatures.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDynamicRenderingFeaturesKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_dynamic_rendering-features[]
+  * [[{anchor-prefix}features-dynamicRendering]] pname:dynamicRendering
+    specifies that the implementation supports dynamic render pass instances
+    using the flink:vkCmdBeginRendering command.
+// end::VK_KHR_dynamic_rendering-features[]
+
+:refpage: VkPhysicalDeviceDynamicRenderingFeatures
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDynamicRenderingFeatures.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+
+ifdef::VK_EXT_rgba10x6_formats[]
+[open,refpage='VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT',desc='Structure describing whether rendering to VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 formats can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-formatRgba10x6WithoutYCbCrSampler]]
+    pname:formatRgba10x6WithoutYCbCrSampler indicates that
+    ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 can: be used with a
+    sname:VkImageView with pname:subresourceRange.aspectMask equal to
+    ename:VK_IMAGE_ASPECT_COLOR_BIT without a <<samplers-YCbCr-conversion,
+    sampler {YCbCr} conversion>> enabled.
+
+:refpage: VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.adoc[]
+--
+endif::VK_EXT_rgba10x6_formats[]
+
+ifdef::VK_EXT_pipeline_robustness[]
+[open,refpage='VkPhysicalDevicePipelineRobustnessFeaturesEXT',desc='Structure describing whether an implementation supports robustness requests on a per-pipeline stage granularity',type='structs']
+--
+The sname:VkPhysicalDevicePipelineRobustnessFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineRobustnessFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-pipelineRobustness]] pname:pipelineRobustness indicates that
+    robustness can: be requested on a per-pipeline-stage granularity.
+
+[NOTE]
+.Note
+====
+Enabling <<features-pipelineRobustness, pname:pipelineRobustness>> may, on
+some platforms, incur a minor performance cost when
+<<features-robustBufferAccess, pname:robustBufferAccess>> is disabled, even
+for pipelines which do not make use of any robustness features.
+If robustness is not needed, <<features-pipelineRobustness,
+pname:pipelineRobustness>> should not be enabled by an application.
+====
+
+:refpage: VkPhysicalDevicePipelineRobustnessFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineRobustnessFeaturesEXT.adoc[]
+--
+endif::VK_EXT_pipeline_robustness[]
+
+ifdef::VK_EXT_image_view_min_lod[]
+[open,refpage='VkPhysicalDeviceImageViewMinLodFeaturesEXT',desc='Structure describing whether clamping the min LOD of a image view is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageViewMinLodFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageViewMinLodFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-minLod]] pname:minLod indicates whether the implementation
+    supports clamping the minimum LOD value during
+    <<textures-image-level-selection,Image Level(s) Selection>>,
+    <<textures-gather,Texel Gathering>> and
+    <<textures-integer-coordinate-operations,Integer Texel Coordinate
+    Operations>> with a given slink:VkImageView by
+    slink:VkImageViewMinLodCreateInfoEXT::pname:minLod.
+
+:refpage: VkPhysicalDeviceImageViewMinLodFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageViewMinLodFeaturesEXT.adoc[]
+--
+endif::VK_EXT_image_view_min_lod[]
+
+ifdef::VK_EXT_rasterization_order_attachment_access[]
+[open,refpage='VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT',desc='Structure describing whether rasterization order attachment access can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.adoc[]
+
+ifdef::VK_ARM_rasterization_order_attachment_access[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.adoc[]
+endif::VK_ARM_rasterization_order_attachment_access[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rasterizationOrderColorAttachmentAccess]]
+    pname:rasterizationOrderColorAttachmentAccess indicates that
+    rasterization order access to color and input attachments is supported
+    by the implementation.
+  * [[features-rasterizationOrderDepthAttachmentAccess]]
+    pname:rasterizationOrderDepthAttachmentAccess indicates that
+    rasterization order access to the depth aspect of depth/stencil and
+    input attachments is supported by the implementation.
+  * [[features-rasterizationOrderStencilAttachmentAccess]]
+    pname:rasterizationOrderStencilAttachmentAccess indicates that
+    rasterization order access to the stencil aspect of depth/stencil and
+    input attachments is supported by the implementation.
+
+:refpage: VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.adoc[]
+--
+endif::VK_EXT_rasterization_order_attachment_access[]
+
+ifdef::VK_EXT_subpass_merge_feedback[]
+[open,refpage='VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT',desc='Structure describing whether subpass merging feedback can be supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-subpassMergeFeedback]] pname:subpassMergeFeedback indicates
+    whether the implementation supports feedback of subpass merging.
+
+:refpage: VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT.adoc[]
+--
+endif::VK_EXT_subpass_merge_feedback[]
+
+ifdef::VK_NV_linear_color_attachment[]
+[open,refpage='VkPhysicalDeviceLinearColorAttachmentFeaturesNV',desc='Structure describing whether <<glossary-linear-color-attachment, Linear Color Attachment>> rendering is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceLinearColorAttachmentFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLinearColorAttachmentFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-linearColorAttachment]] pname:linearColorAttachment indicates
+    whether the implementation supports renderable
+    <<glossary-linear-color-attachment, Linear Color Attachment>>
+
+:refpage: VkPhysicalDeviceLinearColorAttachmentFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLinearColorAttachmentFeaturesNV.adoc[]
+--
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+
+[open,refpage='VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT',desc='Structure indicating support for a render feedback loop image layout',type='structs']
+--
+The sname:VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-attachmentFeedbackLoopLayout]]
+    pname:attachmentFeedbackLoopLayout indicates whether the implementation
+    supports using
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout
+    for images created with
+    ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT.
+
+include::{generated}/validity/structs/VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.adoc[]
+--
+
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+ifdef::VK_EXT_nested_command_buffer[]
+[open,refpage='VkPhysicalDeviceNestedCommandBufferFeaturesEXT',desc='Structure describing whether nested command buffers are supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceNestedCommandBufferFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceNestedCommandBufferFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * [[features-nestedCommandBuffer]] pname:nestedCommandBuffer indicates the
+    implementation supports nested command buffers, which allows <<glossary,
+    Secondary Command Buffers>> to execute other <<glossary, Secondary
+    Command Buffers>>.
+  * [[features-nestedCommandBufferRendering]]
+    pname:nestedCommandBufferRendering indicates that it is valid to call
+    flink:vkCmdExecuteCommands inside a <<glossary, Secondary Command
+    Buffer>> recorded with
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT.
+  * [[features-nestedCommandBufferSimultaneousUse]]
+    pname:nestedCommandBufferSimultaneousUse indicates that the
+    implementation supports nested command buffers with command buffers that
+    are recorded with ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT.
+    
+:refpage: VkPhysicalDeviceNestedCommandBufferFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceNestedCommandBufferFeaturesEXT.adoc[]
+--
+endif::VK_EXT_nested_command_buffer[]
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+[open,refpage='VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',desc='Structure describing support for graphics pipeline libraries',type='structs']
+--
+The sname:VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-graphicsPipelineLibrary]] pname:graphicsPipelineLibrary
+    indicates that the implementation supports <<pipelines-library, graphics
+    pipeline libraries>>.
+
+:refpage: VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT.adoc[]
+--
+endif::VK_EXT_graphics_pipeline_library[]
+
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+[open,refpage='VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT',desc='Structure describing whether multisampled rendering to single-sampled attachments is supported',type='structs']
+--
+The sname:VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-multisampledRenderToSingleSampled]]
+    pname:multisampledRenderToSingleSampled indicates that the
+    implementation supports multisampled rendering to single-sampled render
+    pass attachments.
+
+:refpage: VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.adoc[]
+--
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+
+ifdef::VK_EXT_image_2d_view_of_3d[]
+[open,refpage='VkPhysicalDeviceImage2DViewOf3DFeaturesEXT',desc='Structure describing whether single-slice 2D views of 3D images can be used in image descriptors',type='structs']
+--
+The sname:VkPhysicalDeviceImage2DViewOf3DFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImage2DViewOf3DFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-image2DViewOf3D]] pname:image2DViewOf3D indicates that the
+    implementation supports using a 2D view of a 3D image in a descriptor of
+    type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE if the image is created
+    using ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT.
+  * [[features-sampler2DViewOf3D]] pname:sampler2DViewOf3D indicates that
+    the implementation supports using a 2D view of a 3D image in a
+    descriptor of type ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER if the image is created
+    using ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT.
+
+:refpage: VkPhysicalDeviceImage2DViewOf3DFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+
+include::{generated}/validity/structs/VkPhysicalDeviceImage2DViewOf3DFeaturesEXT.adoc[]
+--
+endif::VK_EXT_image_2d_view_of_3d[]
+
+ifdef::VK_EXT_image_sliced_view_of_3d[]
+
+[open,refpage='VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT',desc='Structure describing whether slice-based views of 3D images can be used in storage image descriptors',type='structs']
+--
+The sname:VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT
+structure describe the following features:
+
+  * [[features-imageSlicedViewOf3D]] pname:imageSlicedViewOf3D indicates
+    that the implementation supports using a sliced view of a 3D image in a
+    descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE by using a
+    slink:VkImageViewSlicedCreateInfoEXT structure when creating the view.
+
+:refpage: VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT.adoc[]
+--
+
+endif::VK_EXT_image_sliced_view_of_3d[]
+
+ifdef::VK_EXT_image_compression_control[]
+[open,refpage='VkPhysicalDeviceImageCompressionControlFeaturesEXT',desc='Structure describing whether image compression controls can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageCompressionControlFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageCompressionControlFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-imageCompressionControl]] pname:imageCompressionControl
+    indicates that the implementation supports providing controls for image
+    compression at image creation time.
+
+:refpage: VkPhysicalDeviceImageCompressionControlFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageCompressionControlFeaturesEXT.adoc[]
+--
+
+ifdef::VK_EXT_image_compression_control_swapchain[]
+[open,refpage='VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT',desc='Structure describing whether per-swapchain image compression controls can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-imageCompressionControlSwapchain]]
+    pname:imageCompressionControlSwapchain indicates that the implementation
+    supports controlling image controls per swapchain and querying image
+    compression properties per surface.
+
+:refpage: VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT.adoc[]
+--
+endif::VK_EXT_image_compression_control_swapchain[]
+
+endif::VK_EXT_image_compression_control[]
+
+ifdef::VK_KHR_ray_tracing_position_fetch[]
+[open,refpage='VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR',desc='Structure describing support for fetching vertex positions of hit triangles',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayTracingPositionFetch]] pname:rayTracingPositionFetch
+    indicates that the implementation supports fetching the object space
+    vertex positions of a hit triangle.
+
+:refpage: VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_position_fetch[]
+
+
+ifdef::VK_AMD_shader_early_and_late_fragment_tests[]
+[open,refpage='VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD',desc='Structure describing whether early and late fragment tests can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderEarlyAndLateFragmentTests]]
+    pname:shaderEarlyAndLateFragmentTests indicates whether the
+    implementation supports the code:EarlyAndLateFragmentTestsAMD
+    {ExecutionMode}.
+
+:refpage: VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.adoc[]
+--
+endif::VK_AMD_shader_early_and_late_fragment_tests[]
+
+ifdef::VK_EXT_non_seamless_cube_map[]
+[open,refpage='VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT',desc='Structure describing features to disable seamless cube maps',type='structs']
+--
+The sname:VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-nonSeamlessCubeMap]] pname:nonSeamlessCubeMap indicates that
+    the implementation supports
+    ename:VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT.
+
+:refpage: VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT.adoc[]
+--
+endif::VK_EXT_non_seamless_cube_map[]
+
+ifdef::VK_EXT_shader_module_identifier[]
+[open,refpage='VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT',desc='Structure describing whether querying and providing an identifier of a shader module is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderModuleIdentifier]] pname:shaderModuleIdentifier
+    indicates whether the implementation supports querying an identifier of
+    a slink:VkShaderModule or slink:VkShaderModuleCreateInfo structure, and
+    creating pipelines from identifiers only.
+
+:refpage: VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_module_identifier[]
+
+ifdef::VK_QCOM_tile_properties[]
+[open,refpage='VkPhysicalDeviceTilePropertiesFeaturesQCOM',desc='Structure describing tile properties features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTilePropertiesFeaturesQCOM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTilePropertiesFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-tileProperties]] pname:tileProperties indicates that the
+    implementation supports queries for returning tile properties.
+
+:refpage: VkPhysicalDeviceTilePropertiesFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTilePropertiesFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_tile_properties[]
+
+ifdef::VK_QCOM_image_processing[]
+[open,refpage='VkPhysicalDeviceImageProcessingFeaturesQCOM',desc='Structure describing image processing features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageProcessingFeaturesQCOM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageProcessingFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-textureSampleWeighted]] pname:textureSampleWeighted indicates
+    that the implementation supports shader modules that declare the
+    pname:TextureSampleWeightedQCOM capability.
+  * [[features-textureBoxFilter]] pname:textureBoxFilter indicates that the
+    implementation supports shader modules that declare the
+    pname:TextureBoxFilterQCOM capability.
+  * [[features-textureBlockMatch]] pname:textureBlockMatch indicates that
+    the implementation supports shader modules that declare the
+    pname:TextureBlockMatchQCOM capability.
+
+:refpage: VkPhysicalDeviceImageProcessingFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageProcessingFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_image_processing[]
+
+ifdef::VK_QCOM_image_processing2[]
+[open,refpage='VkPhysicalDeviceImageProcessing2FeaturesQCOM',desc='Structure describing image processing features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageProcessing2FeaturesQCOM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageProcessing2FeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-textureBlockMatch2]] pname:textureBlockMatch2 indicates that
+    the implementation supports shader modules that declare the
+    code:TextureBlockMatch2QCOM capability.
+
+:refpage: VkPhysicalDeviceImageProcessing2FeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageProcessing2FeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_image_processing2[]
+
+
+
+ifdef::VK_EXT_depth_clamp_zero_one[]
+[open,refpage='VkPhysicalDeviceDepthClampZeroOneFeaturesEXT',desc='Structure describing feature to control zero to one depth clamping',type='structs']
+--
+The sname:VkPhysicalDeviceDepthClampZeroOneFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthClampZeroOneFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+  * [[features-depthClampZeroOne]] pname:depthClampZeroOne indicates that
+    the implementation supports clamping the depth to a range of `0` to `1`.
+
+:refpage: VkPhysicalDeviceDepthClampZeroOneFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthClampZeroOneFeaturesEXT.adoc[]
+--
+endif::VK_EXT_depth_clamp_zero_one[]
+ifdef::VK_EXT_shader_tile_image[]
+[open,refpage='VkPhysicalDeviceShaderTileImageFeaturesEXT',desc='Structure describing tile image features supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderTileImageFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderTileImageFeaturesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceShaderTileImageFeaturesEXT
+structure describe the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderTileImageColorReadAccess]]
+    pname:shaderTileImageColorReadAccess indicates that the implementation
+    supports the code:TileImageColorReadAccessEXT SPIR-V capability.
+  * [[features-shaderTileImageDepthReadAccess]]
+    pname:shaderTileImageDepthReadAccess indicates that the implementation
+    supports the code:TileImageDepthReadAccessEXT SPIR-V capability.
+  * [[features-shaderTileImageStencilReadAccess]]
+    pname:shaderTileImageStencilReadAccess indicates that the implementation
+    supports the code:TileImageStencilReadAccessEXT SPIR-V capability.
+
+:refpage: VkPhysicalDeviceShaderTileImageFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderTileImageFeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_tile_image[]
+
+
+ifdef::VK_EXT_depth_bias_control[]
+
+[open,refpage='VkPhysicalDeviceDepthBiasControlFeaturesEXT',desc='Structure indicating support for depth bias scaling and representation control',type='structs']
+--
+The sname:VkPhysicalDeviceDepthBiasControlFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthBiasControlFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-depthBiasControl]] pname:depthBiasControl indicates whether
+    the implementation supports the fname:vkCmdSetDepthBias2EXT command and
+    the sname:VkDepthBiasRepresentationInfoEXT structure.
+  * [[features-leastRepresentableValueForceUnormRepresentation]]
+    pname:leastRepresentableValueForceUnormRepresentation indicates whether
+    the implementation supports using the
+    ename:VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT
+    depth bias representation.
+  * [[features-floatRepresentation]] pname:floatRepresentation indicates
+    whether the implementation supports using the
+    ename:VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT depth bias representation.
+  * [[features-depthBiasExact]] pname:depthBiasExact indicates whether the
+    implementation supports forcing depth bias to not be scaled to ensure a
+    minimum resolvable difference using
+    sname:VkDepthBiasRepresentationInfoEXT::pname:depthBiasExact.
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthBiasControlFeaturesEXT.adoc[]
+--
+
+endif::VK_EXT_depth_bias_control[]
+
+ifdef::VK_EXT_device_address_binding_report[]
+[open,refpage='VkPhysicalDeviceAddressBindingReportFeaturesEXT',desc='Structure describing the virtual allocation reporting feature supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceAddressBindingReportFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceAddressBindingReportFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-reportAddressBinding]] pname:reportAddressBinding indicates
+    whether this implementation supports reporting the binding of GPU
+    virtual address ranges to Vulkan objects.
+
+:refpage: VkPhysicalDeviceAddressBindingReportFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAddressBindingReportFeaturesEXT.adoc[]
+--
+endif::VK_EXT_device_address_binding_report[]
+
+ifdef::VK_NV_optical_flow[]
+[open,refpage='VkPhysicalDeviceOpticalFlowFeaturesNV',desc='Structure describing the optical flow features supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceOpticalFlowFeaturesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceOpticalFlowFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-opticalFlow]] pname:opticalFlow indicates whether the
+    implementation supports optical flow.
+
+:refpage: VkPhysicalDeviceOpticalFlowFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceOpticalFlowFeaturesNV.adoc[]
+--
+endif::VK_NV_optical_flow[]
+
+ifdef::VK_EXT_device_fault[]
+[open,refpage='VkPhysicalDeviceFaultFeaturesEXT',desc='Structure indicating support for device fault reporting',type='structs']
+--
+The sname:VkPhysicalDeviceFaultFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFaultFeaturesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceFaultFeaturesEXT structure describe
+the following features:
+
+  * [[features-deviceFault]] pname:deviceFault indicates that the
+    implementation supports the reporting of device fault information.
+  * [[features-deviceFaultVendorBinary]] pname:deviceFaultVendorBinary
+    indicates that the implementation supports the generation of
+    vendor-specific binary crash dumps.
+    These may provide additional information when imported into
+    vendor-specific external tools.
+
+:refpage: VkPhysicalDeviceFaultFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFaultFeaturesEXT.adoc[]
+--
+endif::VK_EXT_device_fault[]
+
+ifdef::VK_EXT_pipeline_library_group_handles[]
+[open,refpage='VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT',desc='Structure describing whether querying shader group handles from a pipeline library is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT.adoc[]
+
+This structure describes the following features:
+
+  * [[features-pipelineLibraryGroupHandles]]
+    pname:pipelineLibraryGroupHandles indicates whether the implementation
+    supports querying group handles directly from a ray tracing pipeline
+    library, and guarantees bitwise identical group handles for such
+    libraries when linked into other pipelines.
+
+:refpage: VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT.adoc[]
+--
+endif::VK_EXT_pipeline_library_group_handles[]
+
+ifdef::VK_EXT_shader_object[]
+[open,refpage='VkPhysicalDeviceShaderObjectFeaturesEXT',desc='Structure describing whether shader objects can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderObjectFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderObjectFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * [[features-shaderObject]] pname:shaderObject indicates whether the
+    implementation supports <<shaders-objects, shader objects>>.
+
+:refpage: VkPhysicalDeviceShaderObjectFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderObjectFeaturesEXT.adoc[]
+--
+endif::VK_EXT_shader_object[]
+
+ifdef::VK_ARM_shader_core_builtins[]
+[open,refpage='VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM',desc='Structure describing the shader core builtins features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderCoreBuiltins]] pname:shaderCoreBuiltins indicates
+    whether the implementation supports the SPIR-V code:CoreBuiltinsARM
+    capability.
+
+:refpage: VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM.adoc[]
+--
+endif::VK_ARM_shader_core_builtins[]
+
+ifdef::VK_EXT_frame_boundary[]
+[open,refpage='VkPhysicalDeviceFrameBoundaryFeaturesEXT',desc='Structure describing the frame boundary features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFrameBoundaryFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFrameBoundaryFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-frameBoundary]] pname:frameBoundary indicates whether the
+    implementation supports frame boundary information.
+
+:refpage: VkPhysicalDeviceFrameBoundaryFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFrameBoundaryFeaturesEXT.adoc[]
+--
+endif::VK_EXT_frame_boundary[]
+
+ifdef::VK_EXT_swapchain_maintenance1[]
+[open,refpage='VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT',desc='Structure describing whether implementation supports swapchain maintenance1 functionality',type='structs']
+--
+The sname:VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-swapchainMaintenance1]] pname:swapchainMaintenance1 indicates
+    that the implementation supports the following:
+  ** slink:VkSwapchainPresentFenceInfoEXT, specifying a fence that is
+     signaled when the resources associated with a present operation can: be
+     safely destroyed.
+  ** slink:VkSwapchainPresentModesCreateInfoEXT and
+     slink:VkSwapchainPresentModeInfoEXT, allowing the swapchain to switch
+     present modes without a need for recreation.
+  ** slink:VkSwapchainPresentScalingCreateInfoEXT, specifying the scaling
+     behavior of the swapchain in presence of window resizing.
+  ** The ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT flag,
+     allowing the implementation to defer the allocation of swapchain image
+     memory until first acquisition.
+  ** flink:vkReleaseSwapchainImagesEXT, allowing acquired swapchain images
+     to be released without presenting them.
+
+:refpage: VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT.adoc[]
+--
+endif::VK_EXT_swapchain_maintenance1[]
+
+ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
+[open,refpage='VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT',desc='Structure describing the dynamic rendering unused attachment features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-dynamicRenderingUnusedAttachments]]
+    pname:dynamicRenderingUnusedAttachments indicates that the
+    implementation supports binding graphics pipelines within a render pass
+    instance where any pipeline
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats
+    element with a format other than ename:VK_FORMAT_UNDEFINED is allowed
+    with a corresponding slink:VkRenderingInfo::pname:pColorAttachments
+    element with a pname:imageView equal to dlink:VK_NULL_HANDLE, or any
+    pipeline
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats
+    element with a ename:VK_FORMAT_UNDEFINED format is allowed with a
+    corresponding slink:VkRenderingInfo::pname:pColorAttachments element
+    with a non-dlink:VK_NULL_HANDLE pname:imageView.
+    Also a slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat
+    other than ename:VK_FORMAT_UNDEFINED is allowed with a
+    dlink:VK_NULL_HANDLE slink:VkRenderingInfo::pname:pDepthAttachment, or a
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat of
+    ename:VK_FORMAT_UNDEFINED is allowed with a non-dlink:VK_NULL_HANDLE
+    slink:VkRenderingInfo::pname:pDepthAttachment.
+    Also a
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat other
+    than ename:VK_FORMAT_UNDEFINED is allowed with a dlink:VK_NULL_HANDLE
+    slink:VkRenderingInfo::pname:pStencilAttachment, or a
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat of
+    ename:VK_FORMAT_UNDEFINED is allowed with a non-dlink:VK_NULL_HANDLE
+    slink:VkRenderingInfo::pname:pStencilAttachment.
+    Any writes to a slink:VkRenderingInfo::pname:pColorAttachments,
+    slink:VkRenderingInfo::pname:pDepthAttachment, or
+    slink:VkRenderingInfo::pname:pStencilAttachment with
+    dlink:VK_NULL_HANDLE are discarded.
+
+:refpage: VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.adoc[]
+
+--
+endif::VK_EXT_dynamic_rendering_unused_attachments[]
+
+ifdef::VK_NV_ray_tracing_invocation_reorder[]
+[open,refpage='VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV',desc='Structure describing feature to control ray tracing invocation reordering',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-rayTracingInvocationReorder]]
+    pname:rayTracingInvocationReorder indicates that the implementation
+    supports `SPV_NV_shader_invocation_reorder`.
+
+:refpage: VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV.adoc[]
+
+--
+endif::VK_NV_ray_tracing_invocation_reorder[]
+
+ifdef::VK_NV_extended_sparse_address_space[]
+[open,refpage='VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV',desc='Structure describing feature to use extended sparse address space',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-extendedSparseAddressSpace]] pname:extendedSparseAddressSpace
+    indicates that the implementation supports allowing certain usages of
+    sparse memory resources to exceed
+    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize.
+    See slink:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.
+
+:refpage: VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV.adoc[]
+
+--
+endif::VK_NV_extended_sparse_address_space[]
+
+ifdef::VK_QCOM_multiview_per_view_viewports[]
+[open,refpage='VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM',desc='Structure describing multiview per view viewports features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * [[features-multiview-per-view-viewports]]
+    pname:multiviewPerViewViewports indicates that the implementation
+    supports multiview per-view viewports.
+
+:refpage: VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_multiview_per_view_viewports[]
+
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+[open,refpage='VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM',desc='Structure describing multiview per view render areas features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * [[features-multiview-per-view-render-areas]]
+    pname:multiviewPerViewRenderAreas indicates that the implementation
+    supports multiview per-view render areas.
+
+:refpage: VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_multiview_per_view_render_areas[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+
+[open,refpage='VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI',desc='Structure describing whether cluster culling shader is enabled',type='structs']
+--
+The sname:VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-clustercullingShader]] pname:clustercullingShader specifies
+    whether cluster culling shader is supported.
+  * [[features-multiviewClusterCullingShader]]
+    pname:multiviewClusterCullingShader specifies whether multiview is
+    supported.
+
+:refpage: VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+ifdef::VK_AMDX_shader_enqueue[]
+[open,refpage='VkPhysicalDeviceShaderEnqueueFeaturesAMDX',desc='Structure describing whether shader enqueue within execution graphs are supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderEnqueueFeaturesAMDX structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderEnqueueFeaturesAMDX.adoc[]
+
+This structure describes the following feature:
+
+  * [[features-shaderEnqueue]] pname:shaderEnqueue indicates whether the
+    implementation supports <<executiongraphs,execution graphs>>.
+
+:refpage: VkPhysicalDeviceShaderEnqueueFeaturesAMDX
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderEnqueueFeaturesAMDX.adoc[]
+--
+endif::VK_AMDX_shader_enqueue[]
+
+ifdef::VK_QCOM_filter_cubic_clamp[]
+[open,refpage='VkPhysicalDeviceCubicClampFeaturesQCOM',desc='Structure describing cubic clamp features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCubicClampFeaturesQCOM structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCubicClampFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * [[features-filter-cubic-range-clamp]] pname:cubicRangeClamp indicates
+    that the implementation supports cubic filtering in combination with a
+    <<textures-texel-range-clamp,texel range clamp>>.
+
+:refpage: VkPhysicalDeviceCubicClampFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCubicClampFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_filter_cubic_clamp[]
+
+ifdef::VK_QCOM_ycbcr_degamma[]
+[open,refpage='VkPhysicalDeviceYcbcrDegammaFeaturesQCOM',desc='Structure describing {YCbCr} degamma features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceYcbcrDegammaFeaturesQCOM structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceYcbcrDegammaFeaturesQCOM.adoc[]
+
+This structure describes the following features:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-ycbcr-degamma]] pname:ycbcrDegamma indicates whether the
+    implementation supports <<textures-ycbcr-degamma,{YCbCr} degamma>>.
+
+:refpage: VkPhysicalDeviceYcbcrDegammaFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceYcbcrDegammaFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_ycbcr_degamma[]
+
+ifdef::VK_QCOM_filter_cubic_weights[]
+[open,refpage='VkPhysicalDeviceCubicWeightsFeaturesQCOM',desc='Structure describing cubic weight selection features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCubicWeightsFeaturesQCOM structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCubicWeightsFeaturesQCOM.adoc[]
+
+This structure describes the following feature:
+
+  * [[features-filter-cubic-weight-selection]] pname:selectableCubicWeights
+    indicates that the implementation supports the selection of filter cubic
+    weights.
+
+:refpage: VkPhysicalDeviceCubicWeightsFeaturesQCOM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCubicWeightsFeaturesQCOM.adoc[]
+--
+endif::VK_QCOM_filter_cubic_weights[]
+
+ifdef::VK_NV_descriptor_pool_overallocation[]
+[open,refpage='VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV',desc='Structure describing feature to allow descriptor pool overallocation',type='structs']
+--
+The sname:VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-descriptorPoolOverallocation]]
+    pname:descriptorPoolOverallocation indicates that the implementation
+    allows the application to opt into descriptor pool overallocation by
+    creating the descriptor pool with
+    ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV and/or
+    ename:VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV flags.
+
+:refpage: VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV.adoc[]
+
+--
+endif::VK_NV_descriptor_pool_overallocation[]
+
+
+ifdef::VK_NV_cuda_kernel_launch[]
+[open,refpage='VkPhysicalDeviceCudaKernelLaunchFeaturesNV',desc='Structure describing whether cuda kernel launch is supported by the implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCudaKernelLaunchFeaturesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCudaKernelLaunchFeaturesNV.adoc[]
+
+This structure describes the following features:
+
+  * [[features-cudaKernelLaunchFeatures]] pname:cudaKernelLaunchFeatures is
+    non-zero if cuda kernel launch is supported.
+    
+:refpage: VkPhysicalDeviceCudaKernelLaunchFeaturesNV
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCudaKernelLaunchFeaturesNV.adoc[]
+--
+endif::VK_NV_cuda_kernel_launch[]
+
+ifdef::VK_ANDROID_external_format_resolve[]
+
+[open,refpage='VkPhysicalDeviceExternalFormatResolveFeaturesANDROID',desc='Structure describing whether external format resolves are supported',type='structs']
+--
+The sname:VkPhysicalDeviceExternalFormatResolveFeaturesANDROID structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFormatResolveFeaturesANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-externalFormatResolve]] pname:externalFormatResolve specifies
+    whether external format resolves are supported.
+    
+:refpage: VkPhysicalDeviceExternalFormatResolveFeaturesANDROID
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalFormatResolveFeaturesANDROID.adoc[]
+--
+
+endif::VK_ANDROID_external_format_resolve[]
+
+ifdef::VK_ARM_scheduling_controls[]
+[open,refpage='VkPhysicalDeviceSchedulingControlsFeaturesARM',desc='Structure describing scheduling controls features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSchedulingControlsFeaturesARM structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSchedulingControlsFeaturesARM.adoc[]
+
+This structure describes the following features:
+
+  * [[features-schedulingControls]] pname:schedulingControls indicates that
+    the implementation supports scheduling controls.
+
+:refpage: VkPhysicalDeviceSchedulingControlsFeaturesARM
+include::{chapters}/features.adoc[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSchedulingControlsFeaturesARM.adoc[]
+--
+endif::VK_ARM_scheduling_controls[]
+
+[[features-requirements]]
+== Feature Requirements
+
+All Vulkan graphics implementations must: support the following features:
+
+ifdef::VK_KHR_portability_subset[]
+  * <<features-robustBufferAccess, pname:robustBufferAccess>>, unless the
+    `apiext:VK_KHR_portability_subset` extension is enabled.
+endif::VK_KHR_portability_subset[]
+ifndef::VK_KHR_portability_subset[]
+  * <<features-robustBufferAccess, pname:robustBufferAccess>>
+endif::VK_KHR_portability_subset[]
+ifdef::VK_VERSION_1_1[]
+  * <<features-multiview, pname:multiview>>, if Vulkan 1.1 is supported.
+ifdef::VKSC_VERSION_1_0[]
+    Vulkan SC 1.0 does not require pname:multiview to be supported
+    <<SCID-8>>.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkan11Features::pname:multiview is made optional
+    <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_shader_draw_parameters[]
+  * <<features-shaderDrawParameters, pname:shaderDrawParameters>>, if the
+    `apiext:VK_KHR_shader_draw_parameters` extension is supported.
+endif::VK_KHR_shader_draw_parameters[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+  * <<features-uniformBufferStandardLayout,
+    pname:uniformBufferStandardLayout>>, if Vulkan 1.2 or the
+    `apiext:VK_KHR_uniform_buffer_standard_layout` extension is supported.
+endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+ifdef::VK_KHR_variable_pointers[]
+  * <<features-variablePointersStorageBuffer,
+    pname:variablePointersStorageBuffer>>, if the
+    `apiext:VK_KHR_variable_pointers` extension is supported.
+endif::VK_KHR_variable_pointers[]
+ifdef::VK_KHR_8bit_storage[]
+  * <<features-storageBuffer8BitAccess, pname:storageBuffer8BitAccess>>, if
+    the `apiext:VK_KHR_8bit_storage` extension is supported.
+endif::VK_KHR_8bit_storage[]
+ifdef::VK_VERSION_1_2,VK_KHR_8bit_storage[]
+  * <<features-storageBuffer8BitAccess, pname:storageBuffer8BitAccess>>, if
+    <<features-uniformAndStorageBuffer8BitAccess,
+    pname:uniformAndStorageBuffer8BitAccess>> is enabled.
+endif::VK_VERSION_1_2,VK_KHR_8bit_storage[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * If
+ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing, pname:descriptorIndexing>> feature is supported, or if]
+    the `apiext:VK_EXT_descriptor_indexing` extension is supported:
+  ** <<features-shaderSampledImageArrayDynamicIndexing,
+     pname:shaderSampledImageArrayDynamicIndexing>>
+  ** <<features-shaderStorageBufferArrayDynamicIndexing,
+     pname:shaderStorageBufferArrayDynamicIndexing>>
+  ** <<features-shaderUniformTexelBufferArrayDynamicIndexing,
+     pname:shaderUniformTexelBufferArrayDynamicIndexing>>
+  ** <<features-shaderStorageTexelBufferArrayDynamicIndexing,
+     pname:shaderStorageTexelBufferArrayDynamicIndexing>>
+  ** <<features-shaderSampledImageArrayNonUniformIndexing,
+     pname:shaderSampledImageArrayNonUniformIndexing>>
+  ** <<features-shaderStorageBufferArrayNonUniformIndexing,
+     pname:shaderStorageBufferArrayNonUniformIndexing>>
+  ** <<features-shaderUniformTexelBufferArrayNonUniformIndexing,
+     pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
+  ** <<features-descriptorBindingSampledImageUpdateAfterBind,
+     pname:descriptorBindingSampledImageUpdateAfterBind>>
+  ** <<features-descriptorBindingStorageImageUpdateAfterBind,
+     pname:descriptorBindingStorageImageUpdateAfterBind>>
+  ** <<features-descriptorBindingStorageBufferUpdateAfterBind,
+     pname:descriptorBindingStorageBufferUpdateAfterBind>> (see also
+     <<limits-robustBufferAccessUpdateAfterBind,
+     pname:robustBufferAccessUpdateAfterBind>>)
+  ** <<features-descriptorBindingUniformTexelBufferUpdateAfterBind,
+     pname:descriptorBindingUniformTexelBufferUpdateAfterBind>> (see also
+     <<limits-robustBufferAccessUpdateAfterBind,
+     pname:robustBufferAccessUpdateAfterBind>>)
+  ** <<features-descriptorBindingStorageTexelBufferUpdateAfterBind,
+     pname:descriptorBindingStorageTexelBufferUpdateAfterBind>> (see also
+     <<limits-robustBufferAccessUpdateAfterBind,
+     pname:robustBufferAccessUpdateAfterBind>>)
+  ** <<features-descriptorBindingUpdateUnusedWhilePending,
+     pname:descriptorBindingUpdateUnusedWhilePending>>
+  ** <<features-descriptorBindingPartiallyBound,
+     pname:descriptorBindingPartiallyBound>>
+  ** <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>>
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_3[]
+  * If Vulkan 1.3 is supported:
+  ** <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>
+  ** <<features-vulkanMemoryModelDeviceScope,
+     pname:vulkanMemoryModelDeviceScope>>
+endif::VK_VERSION_1_3[]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * <<features-inlineUniformBlock, pname:inlineUniformBlock>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_inline_uniform_block` extension is supported.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * <<features-descriptorBindingInlineUniformBlockUpdateAfterBind,
+    pname:descriptorBindingInlineUniformBlockUpdateAfterBind>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_inline_uniform_block` extension is supported; and if
+ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing, pname:descriptorIndexing>> feature is supported, or]
+    the `apiext:VK_EXT_descriptor_indexing` extension is supported.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_EXT_scalar_block_layout[]
+  * <<features-scalarBlockLayout, pname:scalarBlockLayout>>, if the
+    `apiext:VK_EXT_scalar_block_layout` extension is supported.
+endif::VK_EXT_scalar_block_layout[]
+ifdef::VK_VERSION_1_2[]
+  * <<features-subgroupBroadcastDynamicId,
+    pname:subgroupBroadcastDynamicId>>, if Vulkan 1.2 is supported.
+endif::VK_VERSION_1_2[]
+ifdef::VK_VERSION_1_2+VK_KHR_sampler_mirror_clamp_to_edge[]
+  * <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>,
+    if the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is
+    supported.
+endif::VK_VERSION_1_2+VK_KHR_sampler_mirror_clamp_to_edge[]
+ifdef::VK_VERSION_1_2+VK_KHR_draw_indirect_count[]
+  * <<features-drawIndirectCount, pname:drawIndirectCount>>, if the
+    `apiext:VK_KHR_draw_indirect_count` extension is supported.
+endif::VK_VERSION_1_2+VK_KHR_draw_indirect_count[]
+ifdef::VK_VERSION_1_2+VK_EXT_sampler_filter_minmax[]
+  * <<features-samplerFilterMinmax, pname:samplerFilterMinmax>>, if the
+    `apiext:VK_EXT_sampler_filter_minmax` extension is supported.
+endif::VK_VERSION_1_2+VK_EXT_sampler_filter_minmax[]
+ifdef::VK_VERSION_1_2+VK_EXT_shader_viewport_index_layer[]
+  * <<features-shaderOutputViewportIndex, pname:shaderOutputViewportIndex>>,
+    if the `apiext:VK_EXT_shader_viewport_index_layer` extension is
+    supported.
+  * <<features-shaderOutputLayer, pname:shaderOutputLayer>>, if the
+    `apiext:VK_EXT_shader_viewport_index_layer` extension is supported.
+endif::VK_VERSION_1_2+VK_EXT_shader_viewport_index_layer[]
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+  * <<features-subgroupSizeControl, pname:subgroupSizeControl>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_subgroup_size_control` extension is supported.
+  * <<features-computeFullSubgroups, pname:computeFullSubgroups>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_subgroup_size_control` extension is supported.
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+ifdef::VK_EXT_device_memory_report[]
+  * <<features-deviceMemoryReport, pname:deviceMemoryReport>>, if the
+    `apiext:VK_EXT_device_memory_report` extension is supported.
+endif::VK_EXT_device_memory_report[]
+ifdef::VK_EXT_global_priority_query[]
+  * <<features-globalPriorityQuery, pname:globalPriorityQuery>>, if the
+    `apiext:VK_EXT_global_priority_query` extension is supported.
+endif::VK_EXT_global_priority_query[]
+ifdef::VK_KHR_global_priority[]
+  * <<features-globalPriorityQuery, pname:globalPriorityQuery>>, if the
+    `apiext:VK_KHR_global_priority` extension is supported.
+endif::VK_KHR_global_priority[]
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * <<features-imagelessFramebuffer, pname:imagelessFramebuffer>>, if Vulkan
+    1.2 or the `apiext:VK_KHR_imageless_framebuffer` extension is supported.
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * <<features-separateDepthStencilLayouts,
+    pname:separateDepthStencilLayouts>>, if Vulkan 1.2 or the
+    `apiext:VK_KHR_separate_depth_stencil_layouts` extension is supported.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+  * <<features-hostQueryReset, pname:hostQueryReset>>, if Vulkan 1.2 or the
+    `apiext:VK_EXT_host_query_reset` extension is supported.
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * <<features-timelineSemaphore, pname:timelineSemaphore>>, if Vulkan 1.2
+    or the `apiext:VK_KHR_timeline_semaphore` extension is supported.
+ifdef::VKSC_VERSION_1_0[]
+    Vulkan SC 1.0 does not require pname:timelineSemaphore to be supported
+    <<SCID-8>>.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkan12Features::pname:timelineSemaphore is made
+    optional <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_KHR_acceleration_structure[]
+  * If the `apiext:VK_KHR_acceleration_structure` extension is supported:
+  ** <<features-accelerationStructure, pname:accelerationStructure>>
+  ** All the features required by
+ifdef::VK_VERSION_1_2[the <<features-descriptorIndexing, pname:descriptorIndexing>> feature if Vulkan 1.2 is supported, or]
+     the `apiext:VK_EXT_descriptor_indexing` extension.
+  ** <<features-descriptorBindingAccelerationStructureUpdateAfterBind,
+     pname:descriptorBindingAccelerationStructureUpdateAfterBind>>
+  ** <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> from
+ifdef::VK_VERSION_1_2[Vulkan 1.2 or]
+     the `apiext:VK_KHR_buffer_device_address` extension.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * If the `apiext:VK_KHR_ray_tracing_pipeline` extension is supported:
+  ** <<features-rayTracingPipeline, pname:rayTracingPipeline>>
+  ** <<features-rayTracingPipelineTraceRaysIndirect,
+     pname:rayTracingPipelineTraceRaysIndirect>>
+  ** <<features-rayTraversalPrimitiveCulling,
+     pname:rayTraversalPrimitiveCulling>>, if <<features-rayQuery,
+     pname:rayQuery>> is supported
+  ** the `apiext:VK_KHR_pipeline_library` extension must: be supported.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_query[]
+  * <<features-rayQuery, pname:rayQuery>>, if the `apiext:VK_KHR_ray_query`
+    extension is supported.
+endif::VK_KHR_ray_query[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_pipeline_creation_cache_control` extension is
+    supported.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+  * <<features-subgroup-extended-types, pname:shaderSubgroupExtendedTypes>>,
+    if Vulkan 1.2 or the `apiext:VK_KHR_shader_subgroup_extended_types`
+    extension is supported.
+endif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+  * <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>, if
+    the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is supported.
+endif::VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_KHR_pipeline_executable_properties[]
+  * <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>, if
+    the `apiext:VK_KHR_pipeline_executable_properties` extension is
+    supported.
+endif::VK_KHR_pipeline_executable_properties[]
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * <<features-textureCompressionASTC_HDR,
+    pname:textureCompressionASTC_HDR>>, if the
+    `apiext:VK_EXT_texture_compression_astc_hdr` extension is supported.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+ifdef::VK_EXT_depth_clip_enable[]
+  * <<features-depthClipEnable, pname:depthClipEnable>>, if the
+    `apiext:VK_EXT_depth_clip_enable` extension is supported.
+endif::VK_EXT_depth_clip_enable[]
+ifdef::VK_EXT_memory_priority[]
+  * <<features-memoryPriority, pname:memoryPriority>>, if the
+    `apiext:VK_EXT_memory_priority` extension is supported.
+endif::VK_EXT_memory_priority[]
+ifdef::VK_EXT_ycbcr_image_arrays[]
+  * <<features-ycbcrImageArrays, pname:ycbcrImageArrays>>, if the
+    `apiext:VK_EXT_ycbcr_image_arrays` extension is supported.
+endif::VK_EXT_ycbcr_image_arrays[]
+ifdef::VK_EXT_index_type_uint8[]
+  * <<features-indexTypeUint8, pname:indexTypeUint8>>, if the
+    `apiext:VK_EXT_index_type_uint8` extension is supported.
+endif::VK_EXT_index_type_uint8[]
+ifdef::VK_EXT_primitive_topology_list_restart[]
+  * <<features-primitiveTopologyListRestart,
+    pname:primitiveTopologyListRestart>>, if the
+    `apiext:VK_EXT_primitive_topology_list_restart` extension is supported.
+endif::VK_EXT_primitive_topology_list_restart[]
+ifdef::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+  * <<features-shaderDemoteToHelperInvocation,
+    pname:shaderDemoteToHelperInvocation>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_shader_demote_to_helper_invocation` extension is
+    supported.
+endif::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+  * <<features-texelBufferAlignment, pname:texelBufferAlignment>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_texel_buffer_alignment` extension is supported.
+endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+ifdef::VK_KHR_vulkan_memory_model,VKSC_VERSION_1_0[]
+  * <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>,
+ifdef::VKSC_VERSION_1_0[]
+    if Vulkan SC 1.0 <<SCID-5>> or
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel must: be
+    reported as ename:VK_TRUE <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+    if the `apiext:VK_KHR_vulkan_memory_model` extension is supported.
+endif::VK_KHR_vulkan_memory_model,VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_KHR_buffer_device_address[]
+  * <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_buffer_device_address` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_performance_query[]
+  * <<VkPhysicalDevicePerformanceQueryFeaturesKHR,
+    pname:performanceCounterQueryPools>>, if the
+    `apiext:VK_KHR_performance_query` extension is supported.
+endif::VK_KHR_performance_query[]
+ifdef::VK_EXT_transform_feedback[]
+  * <<features-transformFeedback, pname:transformFeedback>>, if the
+    `apiext:VK_EXT_transform_feedback` extension is supported.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_conditional_rendering[]
+  * <<features-conditionalRendering, pname:conditionalRendering>>, if the
+    `apiext:VK_EXT_conditional_rendering` extension is supported.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+  * <<features-vertexAttributeInstanceRateDivisor,
+    pname:vertexAttributeInstanceRateDivisor>>, if the
+    `apiext:VK_EXT_vertex_attribute_divisor` extension is supported.
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_EXT_fragment_density_map[]
+  * <<features-fragmentDensityMap, pname:fragmentDensityMap>>, if the
+    `apiext:VK_EXT_fragment_density_map` extension is supported.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_shader_clock[]
+  * <<features-shaderSubgroupClock, pname:shaderSubgroupClock>>, if the
+    `apiext:VK_KHR_shader_clock` extension is supported.
+endif::VK_KHR_shader_clock[]
+ifdef::VK_KHR_shader_atomic_int64[]
+  * <<features-shaderBufferInt64Atomics, pname:shaderBufferInt64Atomics>>,
+    if the `apiext:VK_KHR_shader_atomic_int64` extension is supported.
+endif::VK_KHR_shader_atomic_int64[]
+ifdef::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
+  * <<features-shaderInt64, pname:shaderInt64>>, if the
+    <<features-shaderSharedInt64Atomics, pname:shaderSharedInt64Atomics>> or
+    <<features-shaderBufferInt64Atomics, pname:shaderBufferInt64Atomics>>
+    features are supported.
+endif::VK_VERSION_1_2,VK_KHR_shader_atomic_int64[]
+ifdef::VK_KHR_shader_float16_int8[]
+  * <<features-shaderFloat16, pname:shaderFloat16>> or
+    <<features-shaderInt8, pname:shaderInt8>>, if the
+    `apiext:VK_KHR_shader_float16_int8` extension is supported.
+endif::VK_KHR_shader_float16_int8[]
+ifdef::VK_EXT_fragment_shader_interlock[]
+  * <<features-fragmentShaderSampleInterlock,
+    pname:fragmentShaderSampleInterlock>> or
+    <<features-fragmentShaderPixelInterlock,
+    pname:fragmentShaderPixelInterlock>> or
+    <<features-fragmentShaderShadingRateInterlock,
+    pname:fragmentShaderShadingRateInterlock>>, if the
+    `apiext:VK_EXT_fragment_shader_interlock` extension is supported.
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_EXT_line_rasterization[]
+  * <<features-rectangularLines, pname:rectangularLines>> or
+    <<features-bresenhamLines, pname:bresenhamLines>> or
+    <<features-smoothLines, pname:smoothLines>> or
+    <<features-stippledRectangularLines, pname:stippledRectangularLines>> or
+    <<features-stippledBresenhamLines, pname:stippledBresenhamLines>> or
+    <<features-stippledSmoothLines, pname:stippledSmoothLines>>, if the
+    `apiext:VK_EXT_line_rasterization` extension is supported.
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_KHR_16bit_storage[]
+  * <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>,
+    if the `apiext:VK_KHR_16bit_storage` extension is supported.
+endif::VK_KHR_16bit_storage[]
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+  * <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>,
+    if <<features-uniformAndStorageBuffer16BitAccess,
+    pname:uniformAndStorageBuffer16BitAccess>> is enabled.
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+ifdef::VK_VERSION_1_3,VK_EXT_image_robustness[]
+  * <<features-robustImageAccess, pname:robustImageAccess>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_image_robustness` extension is supported.
+endif::VK_VERSION_1_3,VK_EXT_image_robustness[]
+ifdef::VK_EXT_4444_formats[]
+  * <<features-formatA4R4G4B4, pname:formatA4R4G4B4>>, if the
+    `apiext:VK_EXT_4444_formats` extension is supported.
+endif::VK_EXT_4444_formats[]
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+  * <<features-mutableDescriptorType, pname:mutableDescriptorType>>, if the
+    `apiext:VK_EXT_mutable_descriptor_type` or
+    `apiext:VK_VALVE_mutable_descriptor_type` extension is supported.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+ifdef::VK_EXT_shader_image_atomic_int64[]
+  * <<features-shaderInt64, pname:shaderInt64>> and
+    <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>, if
+    the `apiext:VK_EXT_shader_image_atomic_int64` extension is supported.
+  * <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>, if
+    the <<features-sparseImageInt64Atomics, pname:sparseImageInt64Atomics>>
+    feature is supported.
+endif::VK_EXT_shader_image_atomic_int64[]
+ifdef::VK_EXT_shader_atomic_float[]
+  * <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>,
+    if the <<features-sparseImageFloat32Atomics,
+    pname:sparseImageFloat32Atomics>> feature is supported.
+  * <<features-shaderImageFloat32AtomicAdd,
+    pname:shaderImageFloat32AtomicAdd>>, if the
+    <<features-sparseImageFloat32AtomicAdd,
+    pname:sparseImageFloat32AtomicAdd>> feature is supported.
+endif::VK_EXT_shader_atomic_float[]
+ifdef::VK_EXT_primitives_generated_query[]
+  * <<features-primitivesGeneratedQuery, pname:primitivesGeneratedQuery>>,
+    if the `apiext:VK_EXT_primitives_generated_query` extension is
+    supported.
+endif::VK_EXT_primitives_generated_query[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>>, if the
+    `apiext:VK_KHR_fragment_shading_rate` extension is supported.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * <<features-pipelineProtectedAccess, pname:pipelineProtectedAccess>>, if
+    the `apiext:VK_EXT_pipeline_protected_access` extension is supported.
+endif::VK_EXT_pipeline_protected_access[]
+ifdef::VK_EXT_legacy_dithering[]
+  * <<features-legacyDithering, pname:legacyDithering>>, if the
+    `apiext:VK_EXT_legacy_dithering` extension is supported.
+endif::VK_EXT_legacy_dithering[]
+ifdef::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+  * <<features-shaderTerminateInvocation, pname:shaderTerminateInvocation>>
+    if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_shader_terminate_invocation` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+ifdef::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+  * <<features-shaderZeroInitializeWorkgroupMemory,
+    pname:shaderZeroInitializeWorkgroupMemory>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_zero_initialize_workgroup_memory` extension is
+    supported.
+endif::VK_VERSION_1_3,VK_KHR_zero_initialize_workgroup_memory[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+  * <<features-workgroupMemoryExplicitLayout,
+    pname:workgroupMemoryExplicitLayout>>, if the
+    `apiext:VK_KHR_workgroup_memory_explicit_layout` extension is supported.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * <<features-vertexInputDynamicState, pname:vertexInputDynamicState>>, if
+    the `apiext:VK_EXT_vertex_input_dynamic_state` extension is supported.
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * <<features-synchronization2, pname:synchronization2>> if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_synchronization2` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_EXT_provoking_vertex[]
+  * <<features-provokingVertexLast, pname:provokingVertexLast>>, if the
+    `apiext:VK_EXT_provoking_vertex` extension is supported.
+endif::VK_EXT_provoking_vertex[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * <<features-descriptorBuffer, pname:descriptorBuffer>>, if the
+    `<<VK_EXT_descriptor_buffer>>` extension is supported.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
+  * <<features-shaderSubgroupUniformControlFlow,
+    pname:shaderSubgroupUniformControlFlow>>, if the
+    `apiext:VK_KHR_shader_subgroup_uniform_control_flow` extension is
+    supported.
+endif::VK_KHR_shader_subgroup_uniform_control_flow[]
+ifdef::VK_EXT_border_color_swizzle[]
+  * <<features-borderColorSwizzle, pname:borderColorSwizzle>> if the
+    `apiext:VK_EXT_border_color_swizzle` extension is supported.
+endif::VK_EXT_border_color_swizzle[]
+ifdef::VK_EXT_multi_draw[]
+  * <<features-multiDraw, pname:multiDraw>>, if the
+    `apiext:VK_EXT_multi_draw` extension is supported.
+endif::VK_EXT_multi_draw[]
+ifdef::VK_EXT_shader_atomic_float2[]
+  * <<features-shaderImageFloat32AtomicMinMax,
+    pname:shaderImageFloat32AtomicMinMax>>, if the
+    <<features-sparseImageFloat32AtomicMinMax,
+    pname:sparseImageFloat32AtomicMinMax>> feature is supported.
+endif::VK_EXT_shader_atomic_float2[]
+ifdef::VK_KHR_present_id[]
+  * <<features-presentId, pname:presentId>>, if the
+    `apiext:VK_KHR_present_id` extension is supported.
+endif::VK_KHR_present_id[]
+ifdef::VK_KHR_present_wait[]
+  * <<features-presentWait, pname:presentWait>>, if the
+    `apiext:VK_KHR_present_wait` extension is supported.
+endif::VK_KHR_present_wait[]
+ifdef::VK_EXT_host_image_copy[]
+  * <<features-hostImageCopy, pname:hostImageCopy>>, if the
+    `<<VK_EXT_host_image_copy>>` extension is supported.
+endif::VK_EXT_host_image_copy[]
+ifdef::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+  * <<features-shaderIntegerDotProduct, pname:shaderIntegerDotProduct>> if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_shader_integer_dot_product` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_shader_integer_dot_product[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * <<features-maintenance4, pname:maintenance4>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_maintenance4` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_KHR_maintenance5[]
+  * <<features-maintenance5, pname:maintenance5>>, if the
+    `apiext:VK_KHR_maintenance5` extension is supported.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * <<features-image2DViewOf3D, pname:image2DViewOf3D>>, if the
+    `apiext:VK_EXT_image_2d_view_of_3d` extension is supported.
+endif::VK_EXT_image_2d_view_of_3d[]
+ifdef::VK_EXT_image_sliced_view_of_3d[]
+  * <<features-imageSlicedViewOf3D, pname:imageSlicedViewOf3D>>, if the
+    `apiext:VK_EXT_image_sliced_view_of_3d` extension is supported.
+endif::VK_EXT_image_sliced_view_of_3d[]
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+  * <<features-privateData, pname:privateData>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_EXT_private_data` extension is supported.
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+ifdef::VK_EXT_extended_dynamic_state[]
+  * <<features-extendedDynamicState, pname:extendedDynamicState>>, if the
+    `apiext:VK_EXT_extended_dynamic_state` extension is supported.
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * <<features-extendedDynamicState2, pname:extendedDynamicState2>>, if the
+    `apiext:VK_EXT_extended_dynamic_state2` extension is supported.
+endif::VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_depth_clip_control[]
+  * <<features-depthClipControl, pname:depthClipControl>>, if the
+    `apiext:VK_EXT_depth_clip_control` extension is supported.
+endif::VK_EXT_depth_clip_control[]
+ifdef::VK_EXT_image_view_min_lod[]
+  * <<features-minLod, pname:minLod>>, if the
+    `apiext:VK_EXT_image_view_min_lod` extension is supported.
+endif::VK_EXT_image_view_min_lod[]
+ifdef::VK_NV_external_sci_sync[]
+  * At least one of <<features-sciSyncFence, pname:sciSyncFence>> and
+    <<features-sciSyncSemaphore, pname:sciSyncSemaphore>>, and at least one
+    of <<features-sciSyncImport, pname:sciSyncImport>> and
+    <<features-sciSyncExport, pname:sciSyncExport>>, if the
+    `apiext:VK_NV_external_sci_sync` extension is supported.
+endif::VK_NV_external_sci_sync[]
+ifdef::VK_NV_external_sci_sync2[]
+  * At least one of <<features-sciSyncFence2, pname:sciSyncFence>> and
+    <<features-sciSyncSemaphore2, pname:sciSyncSemaphore2>>, and at least
+    one of <<features-sciSyncImport2, pname:sciSyncImport>> and
+    <<features-sciSyncExport2, pname:sciSyncExport>>, if the
+    `apiext:VK_NV_external_sci_sync2` extension is supported.
+endif::VK_NV_external_sci_sync2[]
+ifdef::VK_NV_external_memory_sci_buf[]
+  * At least one of <<features-sciBufImport, pname:sciBufImport>> and
+    <<features-sciBufExport, pname:sciBufExport>>, if the
+    `apiext:VK_NV_external_memory_sci_buf` extension is supported.
+endif::VK_NV_external_memory_sci_buf[]
+ifdef::VK_NV_linear_color_attachment[]
+  * <<features-linearColorAttachment, pname:linearColorAttachment>>, if the
+    `apiext:VK_NV_linear_color_attachment` extension is supported.
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_NV_present_barrier[]
+  * <<features-presentBarrier, pname:presentBarrier>>, if the
+    `apiext:VK_NV_present_barrier` extension is supported.
+endif::VK_NV_present_barrier[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>, if
+    the `apiext:VK_EXT_graphics_pipeline_library` extension is supported.
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * <<features-dynamicRendering, pname:dynamicRendering>>, if
+ifdef::VK_VERSION_1_3[Vulkan 1.3 or]
+    the `apiext:VK_KHR_dynamic_rendering` extension is supported.
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_nested_command_buffer[]
+  * <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>, if the
+    `apiext:VK_EXT_nested_command_buffer` extension is supported.
+endif::VK_EXT_nested_command_buffer[]
+ifdef::VK_EXT_mesh_shader[]
+  * <<features-taskShader, pname:taskShader>> and <<features-meshShader,
+    pname:meshShader>>, if the `apiext:VK_EXT_mesh_shader` extension is
+    supported.
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_mesh_shader+VK_KHR_fragment_shading_rate[]
+  * <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> if
+    <<features-primitiveFragmentShadingRate-mesh,
+    pname:primitiveFragmentShadingRateMeshShader>> feature is supported.
+endif::VK_EXT_mesh_shader+VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_subpass_merge_feedback[]
+  * <<features-subpassMergeFeedback, pname:subpassMergeFeedback>>, if the
+    `apiext:VK_EXT_subpass_merge_feedback` extension is supported.
+endif::VK_EXT_subpass_merge_feedback[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * <<features-rayTracingMaintenance1, pname:rayTracingMaintenance1>>, if
+    the `apiext:VK_KHR_ray_tracing_maintenance1` extension is supported.
+endif::VK_KHR_ray_tracing_maintenance1[]
+ifdef::VK_EXT_color_write_enable[]
+  * <<features-colorWriteEnable, pname:colorWriteEnable>>, if the
+    `apiext:VK_EXT_color_write_enable` extension is supported.
+endif::VK_EXT_color_write_enable[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>>, if the
+    `apiext:VK_EXT_multisampled_render_to_single_sampled` extension is
+    supported.
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_EXT_image_compression_control[]
+  * <<features-imageCompressionControl, pname:imageCompressionControl>>, if
+    the `apiext:VK_EXT_image_compression_control` extension is supported.
+ifdef::VK_EXT_image_compression_control_swapchain[]
+  * <<features-imageCompressionControlSwapchain,
+    pname:imageCompressionControlSwapchain>>, if the
+    `apiext:VK_EXT_image_compression_control_swapchain` extension is
+    supported.
+endif::VK_EXT_image_compression_control_swapchain[]
+endif::VK_EXT_image_compression_control[]
+ifdef::VK_AMD_shader_early_and_late_fragment_tests[]
+  * <<features-shaderEarlyAndLateFragmentTests,
+    pname:shaderEarlyAndLateFragmentTests>>, if the
+    `apiext:VK_AMD_shader_early_and_late_fragment_tests` extension is
+    supported.
+endif::VK_AMD_shader_early_and_late_fragment_tests[]
+ifdef::VK_EXT_non_seamless_cube_map[]
+  * <<features-nonSeamlessCubeMap, pname:nonSeamlessCubeMap>>, if the
+    `apiext:VK_EXT_non_seamless_cube_map` extension is supported.
+endif::VK_EXT_non_seamless_cube_map[]
+ifdef::VK_EXT_shader_module_identifier[]
+  * <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>, if
+    `apiext:VK_EXT_shader_module_identifier` extension is supported.
+endif::VK_EXT_shader_module_identifier[]
+ifdef::VK_EXT_pipeline_robustness[]
+  * <<features-pipelineRobustness, pname:pipelineRobustness>>, if the
+    `apiext:VK_EXT_pipeline_robustness` extension is supported.
+endif::VK_EXT_pipeline_robustness[]
+ifdef::VK_QCOM_image_processing[]
+  * <<features-textureSampleWeighted, pname:textureSampleWeighted>>,
+    <<features-textureBlockMatch, pname:TextureBlockMatch>>, and
+    <<features-textureBoxFilter, pname:TextureBoxFilter>> if
+    `apiext:VK_QCOM_image_processing` extension is supported.
+endif::VK_QCOM_image_processing[]
+ifdef::VK_QCOM_image_processing2[]
+  * <<features-textureBlockMatch2, pname:TextureBlockMatch2>> if
+    `apiext:VK_QCOM_image_processing2` extension is supported.
+endif::VK_QCOM_image_processing2[]
+ifdef::VK_QCOM_tile_properties[]
+  * <<features-tileProperties, pname:tileProperties>> if
+    `apiext:VK_QCOM_tile_properties` extension is supported.
+endif::VK_QCOM_tile_properties[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>>, if the
+    `apiext:VK_EXT_attachment_feedback_loop_layout` extension is supported.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+ifdef::VK_EXT_depth_clamp_zero_one[]
+  * <<features-depthClampZeroOne, pname:depthClampZeroOne>>, if the
+    `apiext:VK_EXT_depth_clamp_zero_one` extension is supported.
+endif::VK_EXT_depth_clamp_zero_one[]
+ifdef::VK_EXT_device_fault[]
+  * <<features-deviceFault, pname:deviceFault>>, if the
+    `apiext:VK_EXT_device_fault` extension is supported.
+endif::VK_EXT_device_fault[]
+ifdef::VK_EXT_device_address_binding_report[]
+  * <<features-reportAddressBinding, pname:reportAddressBinding>>, if the
+    `apiext:VK_EXT_device_address_binding_report` extension is supported.
+endif::VK_EXT_device_address_binding_report[]
+ifdef::VK_EXT_opacity_micromap[]
+  * <<features-micromap, pname:micromap>>, if the
+    `apiext:VK_EXT_opacity_micromap` extension is supported.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_EXT_frame_boundary[]
+  * <<features-frameBoundary, pname:frameBoundary>>, if the
+    `apiext:VK_EXT_frame_boundary` extension is supported.
+endif::VK_EXT_frame_boundary[]
+ifdef::VK_NV_displacement_micromap[]
+  * <<features-displacementMicromap, pname:displacementMicromap>>, if the
+    `apiext:VK_NV_displacement_micromap` extension is supported.
+endif::VK_NV_displacement_micromap[]
+ifdef::VK_EXT_pipeline_library_group_handles[]
+  * <<features-pipelineLibraryGroupHandles,
+    pname:pipelineLibraryGroupHandles>>, if the
+    `apiext:VK_EXT_pipeline_library_group_handles` extension is supported.
+endif::VK_EXT_pipeline_library_group_handles[]
+ifdef::VK_EXT_swapchain_maintenance1[]
+  * <<features-swapchainMaintenance1, pname:swapchainMaintenance1>>, if the
+    `apiext:VK_EXT_swapchain_maintenance1` extension is supported.
+endif::VK_EXT_swapchain_maintenance1[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * <<features-tessellationShader, pname:tessellationShader>>, if the
+    <<features-extendedDynamicState3TessellationDomainOrigin,
+    pname:extendedDynamicState3TessellationDomainOrigin>> feature is
+    supported.
+  * <<features-depthClamp, pname:depthClamp>>, if the
+    <<features-extendedDynamicState3DepthClampEnable,
+    pname:extendedDynamicState3DepthClampEnable>> feature is supported.
+  * <<features-fillModeNonSolid, pname:fillModeNonSolid>>, if the
+    <<features-extendedDynamicState3PolygonMode,
+    pname:extendedDynamicState3PolygonMode>> feature is supported.
+  * <<features-alphaToOne, pname:alphaToOne>>, if the
+    <<features-extendedDynamicState3AlphaToOneEnable,
+    pname:extendedDynamicState3AlphaToOneEnable>> feature is supported.
+  * <<features-logicOp, pname:logicOp>>, if the
+    <<features-extendedDynamicState3LogicOpEnable,
+    pname:extendedDynamicState3LogicOpEnable>> feature is supported.
+ifdef::VK_EXT_transform_feedback[]
+  * <<features-geometryStreams, pname:geometryStreams>>, if the
+    <<features-extendedDynamicState3RasterizationStream,
+    pname:extendedDynamicState3RasterizationStream>> feature is supported.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_conservative_rasterization[]
+  * `apiext:VK_EXT_conservative_rasterization` extension, if the
+    <<features-extendedDynamicState3ConservativeRasterizationMode,
+    pname:extendedDynamicState3ConservativeRasterizationMode>> feature is
+    supported.
+  * `apiext:VK_EXT_conservative_rasterization` extension, if the
+    <<features-extendedDynamicState3ExtraPrimitiveOverestimationSize,
+    pname:extendedDynamicState3ExtraPrimitiveOverestimationSize>> feature is
+    supported.
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_sample_locations[]
+  * `apiext:VK_EXT_sample_locations` extension, if the
+    <<features-extendedDynamicState3SampleLocationsEnable,
+    pname:extendedDynamicState3SampleLocationsEnable>> feature is supported.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * `apiext:VK_EXT_blend_operation_advanced` extension, if the
+    <<features-extendedDynamicState3ColorBlendAdvanced,
+    pname:extendedDynamicState3ColorBlendAdvanced>> feature is supported.
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_EXT_provoking_vertex[]
+  * <<features-provokingVertexLast, pname:provokingVertexLast>>, if the
+    <<features-extendedDynamicState3ProvokingVertexMode,
+    pname:extendedDynamicState3ProvokingVertexMode>> feature is supported.
+endif::VK_EXT_provoking_vertex[]
+ifdef::VK_EXT_line_rasterization[]
+  * `apiext:VK_EXT_line_rasterization` extension, if the
+    <<features-extendedDynamicState3LineRasterizationMode,
+    pname:extendedDynamicState3LineRasterizationMode>> feature is supported.
+  * `apiext:VK_EXT_line_rasterization` extension, if the
+    <<features-extendedDynamicState3LineStippleEnable,
+    pname:extendedDynamicState3LineStippleEnable>> feature is supported.
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_depth_clip_control[]
+  * <<features-depthClipControl, pname:depthClipControl>>, if the
+    <<features-extendedDynamicState3DepthClipNegativeOneToOne,
+    pname:extendedDynamicState3DepthClipNegativeOneToOne>> feature is
+    supported.
+endif::VK_EXT_depth_clip_control[]
+ifdef::VK_NV_clip_space_w_scaling[]
+  * `apiext:VK_NV_clip_space_w_scaling` extension, if the
+    <<features-extendedDynamicState3ViewportWScalingEnable,
+    pname:extendedDynamicState3ViewportWScalingEnable>> feature is
+    supported.
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_NV_viewport_swizzle[]
+  * `apiext:VK_NV_viewport_swizzle` extension, if the
+    <<features-extendedDynamicState3ViewportSwizzle,
+    pname:extendedDynamicState3ViewportSwizzle>> feature is supported.
+endif::VK_NV_viewport_swizzle[]
+ifdef::VK_NV_fragment_coverage_to_color[]
+  * `apiext:VK_NV_fragment_coverage_to_color` extension, if the
+    <<features-extendedDynamicState3CoverageToColorEnable,
+    pname:extendedDynamicState3CoverageToColorEnable>> feature is supported.
+  * `apiext:VK_NV_fragment_coverage_to_color` extension, if the
+    <<features-extendedDynamicState3CoverageToColorLocation,
+    pname:extendedDynamicState3CoverageToColorLocation>> feature is
+    supported.
+endif::VK_NV_fragment_coverage_to_color[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * `apiext:VK_NV_framebuffer_mixed_samples` extension, if the
+    <<features-extendedDynamicState3CoverageModulationMode,
+    pname:extendedDynamicState3CoverageModulationMode>> feature is
+    supported.
+  * `apiext:VK_NV_framebuffer_mixed_samples` extension, if the
+    <<features-extendedDynamicState3CoverageModulationTableEnable,
+    pname:extendedDynamicState3CoverageModulationTableEnable>> feature is
+    supported.
+  * `apiext:VK_NV_framebuffer_mixed_samples` extension, if the
+    <<features-extendedDynamicState3CoverageModulationTable,
+    pname:extendedDynamicState3CoverageModulationTable>> feature is
+    supported.
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_NV_coverage_reduction_mode[]
+  * <<features-coverageReductionMode, pname:coverageReductionMode>>, if the
+    <<features-extendedDynamicState3CoverageReductionMode,
+    pname:extendedDynamicState3CoverageReductionMode>> feature is supported.
+endif::VK_NV_coverage_reduction_mode[]
+ifdef::VK_NV_representative_fragment_test[]
+  * <<features-representativeFragmentTest,
+    pname:representativeFragmentTest>>, if the
+    <<features-extendedDynamicState3RepresentativeFragmentTestEnable,
+    pname:extendedDynamicState3RepresentativeFragmentTestEnable>> feature is
+    supported.
+endif::VK_NV_representative_fragment_test[]
+ifdef::VK_NV_shading_rate_image[]
+  * <<features-shadingRateImage, pname:shadingRateImage>>, if the
+    <<features-extendedDynamicState3ShadingRateImageEnable,
+    pname:extendedDynamicState3ShadingRateImageEnable>> feature is
+    supported.
+endif::VK_NV_shading_rate_image[]
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_QCOM_multiview_per_view_viewports[]
+  * <<features-multiview-per-view-viewports,
+    pname:multiviewPerViewViewports>>, if the
+    `apiext:VK_QCOM_multiview_per_view_viewports` extension is supported.
+endif::VK_QCOM_multiview_per_view_viewports[]
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+  * <<features-attachmentFeedbackLoopDynamicState,
+    pname:attachmentFeedbackLoopDynamicState>>, if the
+    `apiext:VK_EXT_attachment_feedback_loop_dynamic_state` extension is
+    supported.
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+ifdef::VK_KHR_ray_tracing_position_fetch[]
+  * <<features-rayTracingPositionFetch, pname:rayTracingPositionFetch>>, if
+    the `apiext:VK_KHR_ray_tracing_position_fetch` extension is supported.
+endif::VK_KHR_ray_tracing_position_fetch[]
+ifdef::VK_EXT_shader_object[]
+  * <<features-shaderObject, pname:shaderObject>>, if the
+    `apiext:VK_EXT_shader_object` extension is supported.
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_shader_tile_image[]
+  * <<features-shaderTileImageColorReadAccess,
+    pname:shaderTileImageColorReadAccess>>, if the
+    `apiext:VK_EXT_shader_tile_image` extension is supported.
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_depth_bias_control[]
+  * <<features-depthBiasControl, pname:depthBiasControl>>, if the
+    `apiext:VK_EXT_depth_bias_control` extension is supported.
+endif::VK_EXT_depth_bias_control[]
+ifdef::VK_NV_device_generated_commands_compute[]
+  * <<features-deviceGeneratedCompute, pname:deviceGeneratedCompute>>, if
+    the `apiext:VK_NV_device_generated_commands_compute` extension is
+    supported.
+endif::VK_NV_device_generated_commands_compute[]
+ifdef::VK_AMDX_shader_enqueue[]
+  * <<features-shaderEnqueue, pname:shaderEnqueue>> if the
+    `apiext:VK_AMDX_shader_enqueue` extension is supported.
+endif::VK_AMDX_shader_enqueue[]
+ifdef::VK_KHR_cooperative_matrix[]
+  * <<features-cooperativeMatrix, pname:cooperativeMatrix>> if the
+    `apiext:VK_KHR_cooperative_matrix` extension is supported.
+endif::VK_KHR_cooperative_matrix[]
+ifdef::VK_QCOM_ycbcr_degamma[]
+  * <<features-ycbcr-degamma,pname:ycbcrDegamma>>, if the
+    `apiext:VK_QCOM_ycbcr_degamma` extension is supported.
+endif::VK_QCOM_ycbcr_degamma[]
+ifdef::VK_NV_descriptor_pool_overallocation[]
+  * <<features-descriptorPoolOverallocation,pname:descriptorPoolOverallocation>>,
+    if the `apiext:VK_NV_descriptor_pool_overallocation` extension is
+    supported.
+endif::VK_NV_descriptor_pool_overallocation[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * <<features-externalFormatResolve, pname:externalFormatResolve>>, if the
+    `apiext:VK_ANDROID_external_format_resolve` extension is supported.
+endif::VK_ANDROID_external_format_resolve[]
+ifdef::VK_NV_extended_sparse_address_space[]
+  * <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>>, if the
+    `apiext:VK_NV_extended_sparse_address_space` extension is supported.
+endif::VK_NV_extended_sparse_address_space[]
+ifdef::VK_ARM_scheduling_controls[]
+  * <<features-schedulingControls,pname:schedulingControls>>, if the
+    `apiext:VK_ARM_scheduling_controls` extension is supported.
+endif::VK_ARM_scheduling_controls[]
+
+All other features defined in the Specification are optional:.
+
+
+ifdef::VK_VERSION_1_3[]
+[[profile-features]]
+== Profile Features
+
+
+[[profile-features-roadmap-2022]]
+=== Roadmap 2022
+
+Implementations that claim support for the <<roadmap-2022, Roadmap 2022>>
+profile must: support the following features:
+
+  * <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>>
+  * <<features-imageCubeArray, pname:imageCubeArray>>
+  * <<features-independentBlend, pname:independentBlend>>
+  * <<features-sampleRateShading, pname:sampleRateShading>>
+  * <<features-drawIndirectFirstInstance, pname:drawIndirectFirstInstance>>
+  * <<features-depthClamp, pname:depthClamp>>
+  * <<features-depthBiasClamp, pname:depthBiasClamp>>
+  * <<features-samplerAnisotropy, pname:samplerAnisotropy>>
+  * <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>>
+  * <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>>
+  * <<features-shaderStorageImageExtendedFormats,
+    pname:shaderStorageImageExtendedFormats>>
+  * <<features-shaderUniformBufferArrayDynamicIndexing,
+    pname:shaderUniformBufferArrayDynamicIndexing>>
+  * <<features-shaderSampledImageArrayDynamicIndexing,
+    pname:shaderSampledImageArrayDynamicIndexing>>
+  * <<features-shaderStorageBufferArrayDynamicIndexing,
+    pname:shaderStorageBufferArrayDynamicIndexing>>
+  * <<features-shaderStorageImageArrayDynamicIndexing,
+    pname:shaderStorageImageArrayDynamicIndexing>>
+  * <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>
+  * <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>
+  * <<features-descriptorIndexing, pname:descriptorIndexing>>
+  * <<features-shaderUniformTexelBufferArrayDynamicIndexing,
+    pname:shaderUniformTexelBufferArrayDynamicIndexing>>
+  * <<features-shaderStorageTexelBufferArrayDynamicIndexing,
+    pname:shaderStorageTexelBufferArrayDynamicIndexing>>
+  * <<features-shaderUniformBufferArrayNonUniformIndexing,
+    pname:shaderUniformBufferArrayNonUniformIndexing>>
+  * <<features-shaderSampledImageArrayNonUniformIndexing,
+    pname:shaderSampledImageArrayNonUniformIndexing>>
+  * <<features-shaderStorageBufferArrayNonUniformIndexing,
+    pname:shaderStorageBufferArrayNonUniformIndexing>>
+  * <<features-shaderStorageImageArrayNonUniformIndexing,
+    pname:shaderStorageImageArrayNonUniformIndexing>>
+  * <<features-shaderUniformTexelBufferArrayNonUniformIndexing,
+    pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
+  * <<features-shaderStorageTexelBufferArrayNonUniformIndexing,
+    pname:shaderStorageTexelBufferArrayNonUniformIndexing>>
+  * <<features-descriptorBindingSampledImageUpdateAfterBind,
+    pname:descriptorBindingSampledImageUpdateAfterBind>>
+  * <<features-descriptorBindingStorageImageUpdateAfterBind,
+    pname:descriptorBindingStorageImageUpdateAfterBind>>
+  * <<features-descriptorBindingStorageBufferUpdateAfterBind,
+    pname:descriptorBindingStorageBufferUpdateAfterBind>>
+  * <<features-descriptorBindingUniformTexelBufferUpdateAfterBind,
+    pname:descriptorBindingUniformTexelBufferUpdateAfterBind>>
+  * <<features-descriptorBindingStorageTexelBufferUpdateAfterBind,
+    pname:descriptorBindingStorageTexelBufferUpdateAfterBind>>
+  * <<features-descriptorBindingUpdateUnusedWhilePending,
+    pname:descriptorBindingUpdateUnusedWhilePending>>
+  * <<features-descriptorBindingPartiallyBound,
+    pname:descriptorBindingPartiallyBound>>
+  * <<features-descriptorBindingVariableDescriptorCount,
+    pname:descriptorBindingVariableDescriptorCount>>
+  * <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>>
+  * <<features-scalarBlockLayout, pname:scalarBlockLayout>>
+endif::VK_VERSION_1_3[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/formats.adoc b/codegen/vulkan/vulkan-docs-next/chapters/formats.adoc
new file mode 100644
index 0000000..e77abf9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/formats.adoc
@@ -0,0 +1,3653 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be
+explicitly queried before use to ensure they are supported by the
+implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the
+implementation are queried individually using the
+flink:vkGetPhysicalDeviceFormatProperties command.
+
+
+[[formats-definition]]
+== Format Definition
+
+[open,refpage='VkFormat',desc='Available image formats',type='enums']
+--
+The following image formats can: be passed to, and may: be returned from
+Vulkan commands.
+The memory required to store each format is discussed with that format, and
+also summarized in the <<texel-block-size, Representation and Texel Block
+Size>> section and the <<formats-compatibility, Compatible formats>> table.
+
+include::{generated}/api/enums/VkFormat.adoc[]
+
+  * ename:VK_FORMAT_UNDEFINED specifies that the format is not specified.
+  * ename:VK_FORMAT_R4G4_UNORM_PACK8 specifies a two-component, 8-bit packed
+    unsigned normalized format that has a 4-bit R component in bits 4..7,
+    and a 4-bit G component in bits 0..3.
+  * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 4-bit R component in bits
+    12..15, a 4-bit G component in bits 8..11, a 4-bit B component in bits
+    4..7, and a 4-bit A component in bits 0..3.
+  * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 4-bit B component in bits
+    12..15, a 4-bit G component in bits 8..11, a 4-bit R component in bits
+    4..7, and a 4-bit A component in bits 0..3.
+ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[]
+  * ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 4-bit A component in bits
+    12..15, a 4-bit R component in bits 8..11, a 4-bit G component in bits
+    4..7, and a 4-bit B component in bits 0..3.
+  * ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 4-bit A component in bits
+    12..15, a 4-bit B component in bits 8..11, a 4-bit G component in bits
+    4..7, and a 4-bit R component in bits 0..3.
+endif::VK_VERSION_1_3,VK_EXT_4444_formats[]
+  * ename:VK_FORMAT_R5G6B5_UNORM_PACK16 specifies a three-component, 16-bit
+    packed unsigned normalized format that has a 5-bit R component in bits
+    11..15, a 6-bit G component in bits 5..10, and a 5-bit B component in
+    bits 0..4.
+  * ename:VK_FORMAT_B5G6R5_UNORM_PACK16 specifies a three-component, 16-bit
+    packed unsigned normalized format that has a 5-bit B component in bits
+    11..15, a 6-bit G component in bits 5..10, and a 5-bit R component in
+    bits 0..4.
+  * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 5-bit R component in bits
+    11..15, a 5-bit G component in bits 6..10, a 5-bit B component in bits
+    1..5, and a 1-bit A component in bit 0.
+  * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 5-bit B component in bits
+    11..15, a 5-bit G component in bits 6..10, a 5-bit R component in bits
+    1..5, and a 1-bit A component in bit 0.
+  * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 specifies a four-component, 16-bit
+    packed unsigned normalized format that has a 1-bit A component in bit
+    15, a 5-bit R component in bits 10..14, a 5-bit G component in bits
+    5..9, and a 5-bit B component in bits 0..4.
+ifdef::VK_KHR_maintenance5[]
+  * ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR specifies a four-component,
+    16-bit packed unsigned normalized format that has a 1-bit A component in
+    bit 15, a 5-bit B component in bits 10..14, a 5-bit G component in bits
+    5..9, and a 5-bit R component in bits 0..4.
+  * ename:VK_FORMAT_A8_UNORM_KHR specifies a one-component, 8-bit unsigned
+    normalized format that has a single 8-bit A component.
+endif::VK_KHR_maintenance5[]
+  * ename:VK_FORMAT_R8_UNORM specifies a one-component, 8-bit unsigned
+    normalized format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_SNORM specifies a one-component, 8-bit signed
+    normalized format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_USCALED specifies a one-component, 8-bit unsigned
+    scaled integer format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_SSCALED specifies a one-component, 8-bit signed
+    scaled integer format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_UINT specifies a one-component, 8-bit unsigned
+    integer format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_SINT specifies a one-component, 8-bit signed integer
+    format that has a single 8-bit R component.
+  * ename:VK_FORMAT_R8_SRGB specifies a one-component, 8-bit unsigned
+    normalized format that has a single 8-bit R component stored with sRGB
+    nonlinear encoding.
+  * ename:VK_FORMAT_R8G8_UNORM specifies a two-component, 16-bit unsigned
+    normalized format that has an 8-bit R component in byte 0, and an 8-bit
+    G component in byte 1.
+  * ename:VK_FORMAT_R8G8_SNORM specifies a two-component, 16-bit signed
+    normalized format that has an 8-bit R component in byte 0, and an 8-bit
+    G component in byte 1.
+  * ename:VK_FORMAT_R8G8_USCALED specifies a two-component, 16-bit unsigned
+    scaled integer format that has an 8-bit R component in byte 0, and an
+    8-bit G component in byte 1.
+  * ename:VK_FORMAT_R8G8_SSCALED specifies a two-component, 16-bit signed
+    scaled integer format that has an 8-bit R component in byte 0, and an
+    8-bit G component in byte 1.
+  * ename:VK_FORMAT_R8G8_UINT specifies a two-component, 16-bit unsigned
+    integer format that has an 8-bit R component in byte 0, and an 8-bit G
+    component in byte 1.
+  * ename:VK_FORMAT_R8G8_SINT specifies a two-component, 16-bit signed
+    integer format that has an 8-bit R component in byte 0, and an 8-bit G
+    component in byte 1.
+  * ename:VK_FORMAT_R8G8_SRGB specifies a two-component, 16-bit unsigned
+    normalized format that has an 8-bit R component stored with sRGB
+    nonlinear encoding in byte 0, and an 8-bit G component stored with sRGB
+    nonlinear encoding in byte 1.
+  * ename:VK_FORMAT_R8G8B8_UNORM specifies a three-component, 24-bit
+    unsigned normalized format that has an 8-bit R component in byte 0, an
+    8-bit G component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_SNORM specifies a three-component, 24-bit signed
+    normalized format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_USCALED specifies a three-component, 24-bit
+    unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
+    G component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_SSCALED specifies a three-component, 24-bit
+    signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_UINT specifies a three-component, 24-bit unsigned
+    integer format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_SINT specifies a three-component, 24-bit signed
+    integer format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit B component in byte 2.
+  * ename:VK_FORMAT_R8G8B8_SRGB specifies a three-component, 24-bit unsigned
+    normalized format that has an 8-bit R component stored with sRGB
+    nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+    nonlinear encoding in byte 1, and an 8-bit B component stored with sRGB
+    nonlinear encoding in byte 2.
+  * ename:VK_FORMAT_B8G8R8_UNORM specifies a three-component, 24-bit
+    unsigned normalized format that has an 8-bit B component in byte 0, an
+    8-bit G component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_SNORM specifies a three-component, 24-bit signed
+    normalized format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_USCALED specifies a three-component, 24-bit
+    unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
+    G component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_SSCALED specifies a three-component, 24-bit
+    signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_UINT specifies a three-component, 24-bit unsigned
+    integer format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_SINT specifies a three-component, 24-bit signed
+    integer format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, and an 8-bit R component in byte 2.
+  * ename:VK_FORMAT_B8G8R8_SRGB specifies a three-component, 24-bit unsigned
+    normalized format that has an 8-bit B component stored with sRGB
+    nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+    nonlinear encoding in byte 1, and an 8-bit R component stored with sRGB
+    nonlinear encoding in byte 2.
+  * ename:VK_FORMAT_R8G8B8A8_UNORM specifies a four-component, 32-bit
+    unsigned normalized format that has an 8-bit R component in byte 0, an
+    8-bit G component in byte 1, an 8-bit B component in byte 2, and an
+    8-bit A component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_SNORM specifies a four-component, 32-bit signed
+    normalized format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_USCALED specifies a four-component, 32-bit
+    unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit
+    G component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_SSCALED specifies a four-component, 32-bit
+    signed scaled format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_UINT specifies a four-component, 32-bit
+    unsigned integer format that has an 8-bit R component in byte 0, an
+    8-bit G component in byte 1, an 8-bit B component in byte 2, and an
+    8-bit A component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_SINT specifies a four-component, 32-bit signed
+    integer format that has an 8-bit R component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_R8G8B8A8_SRGB specifies a four-component, 32-bit
+    unsigned normalized format that has an 8-bit R component stored with
+    sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+    nonlinear encoding in byte 1, an 8-bit B component stored with sRGB
+    nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_UNORM specifies a four-component, 32-bit
+    unsigned normalized format that has an 8-bit B component in byte 0, an
+    8-bit G component in byte 1, an 8-bit R component in byte 2, and an
+    8-bit A component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_SNORM specifies a four-component, 32-bit signed
+    normalized format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_USCALED specifies a four-component, 32-bit
+    unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit
+    G component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_SSCALED specifies a four-component, 32-bit
+    signed scaled format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_UINT specifies a four-component, 32-bit
+    unsigned integer format that has an 8-bit B component in byte 0, an
+    8-bit G component in byte 1, an 8-bit R component in byte 2, and an
+    8-bit A component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_SINT specifies a four-component, 32-bit signed
+    integer format that has an 8-bit B component in byte 0, an 8-bit G
+    component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+    component in byte 3.
+  * ename:VK_FORMAT_B8G8R8A8_SRGB specifies a four-component, 32-bit
+    unsigned normalized format that has an 8-bit B component stored with
+    sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+    nonlinear encoding in byte 1, an 8-bit R component stored with sRGB
+    nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
+  * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 specifies a four-component, 32-bit
+    packed unsigned normalized format that has an 8-bit A component in bits
+    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+    bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 specifies a four-component, 32-bit
+    packed signed normalized format that has an 8-bit A component in bits
+    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+    bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 specifies a four-component,
+    32-bit packed unsigned scaled integer format that has an 8-bit A
+    component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit
+    G component in bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 specifies a four-component,
+    32-bit packed signed scaled integer format that has an 8-bit A component
+    in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G
+    component in bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 specifies a four-component, 32-bit
+    packed unsigned integer format that has an 8-bit A component in bits
+    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+    bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 specifies a four-component, 32-bit
+    packed signed integer format that has an 8-bit A component in bits
+    24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+    bits 8..15, and an 8-bit R component in bits 0..7.
+  * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 specifies a four-component, 32-bit
+    packed unsigned normalized format that has an 8-bit A component in bits
+    24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits
+    16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits
+    8..15, and an 8-bit R component stored with sRGB nonlinear encoding in
+    bits 0..7.
+  * ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 specifies a four-component,
+    32-bit packed unsigned normalized format that has a 2-bit A component in
+    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 specifies a four-component,
+    32-bit packed signed normalized format that has a 2-bit A component in
+    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 specifies a four-component,
+    32-bit packed unsigned scaled integer format that has a 2-bit A
+    component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit
+    G component in bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 specifies a four-component,
+    32-bit packed signed scaled integer format that has a 2-bit A component
+    in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G
+    component in bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 specifies a four-component,
+    32-bit packed unsigned integer format that has a 2-bit A component in
+    bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 specifies a four-component,
+    32-bit packed signed integer format that has a 2-bit A component in bits
+    30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
+    bits 10..19, and a 10-bit B component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 specifies a four-component,
+    32-bit packed unsigned normalized format that has a 2-bit A component in
+    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 specifies a four-component,
+    32-bit packed signed normalized format that has a 2-bit A component in
+    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 specifies a four-component,
+    32-bit packed unsigned scaled integer format that has a 2-bit A
+    component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit
+    G component in bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 specifies a four-component,
+    32-bit packed signed scaled integer format that has a 2-bit A component
+    in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G
+    component in bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 specifies a four-component,
+    32-bit packed unsigned integer format that has a 2-bit A component in
+    bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component
+    in bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 specifies a four-component,
+    32-bit packed signed integer format that has a 2-bit A component in bits
+    30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
+    bits 10..19, and a 10-bit R component in bits 0..9.
+  * ename:VK_FORMAT_R16_UNORM specifies a one-component, 16-bit unsigned
+    normalized format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_SNORM specifies a one-component, 16-bit signed
+    normalized format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_USCALED specifies a one-component, 16-bit unsigned
+    scaled integer format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_SSCALED specifies a one-component, 16-bit signed
+    scaled integer format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_UINT specifies a one-component, 16-bit unsigned
+    integer format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_SINT specifies a one-component, 16-bit signed
+    integer format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16_SFLOAT specifies a one-component, 16-bit signed
+    floating-point format that has a single 16-bit R component.
+  * ename:VK_FORMAT_R16G16_UNORM specifies a two-component, 32-bit unsigned
+    normalized format that has a 16-bit R component in bytes 0..1, and a
+    16-bit G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_SNORM specifies a two-component, 32-bit signed
+    normalized format that has a 16-bit R component in bytes 0..1, and a
+    16-bit G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_USCALED specifies a two-component, 32-bit
+    unsigned scaled integer format that has a 16-bit R component in bytes
+    0..1, and a 16-bit G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_SSCALED specifies a two-component, 32-bit signed
+    scaled integer format that has a 16-bit R component in bytes 0..1, and a
+    16-bit G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_UINT specifies a two-component, 32-bit unsigned
+    integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
+    G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_SINT specifies a two-component, 32-bit signed
+    integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
+    G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16_SFLOAT specifies a two-component, 32-bit signed
+    floating-point format that has a 16-bit R component in bytes 0..1, and a
+    16-bit G component in bytes 2..3.
+  * ename:VK_FORMAT_R16G16B16_UNORM specifies a three-component, 48-bit
+    unsigned normalized format that has a 16-bit R component in bytes 0..1,
+    a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+    4..5.
+  * ename:VK_FORMAT_R16G16B16_SNORM specifies a three-component, 48-bit
+    signed normalized format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+    4..5.
+  * ename:VK_FORMAT_R16G16B16_USCALED specifies a three-component, 48-bit
+    unsigned scaled integer format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
+    bytes 4..5.
+  * ename:VK_FORMAT_R16G16B16_SSCALED specifies a three-component, 48-bit
+    signed scaled integer format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
+    bytes 4..5.
+  * ename:VK_FORMAT_R16G16B16_UINT specifies a three-component, 48-bit
+    unsigned integer format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+    4..5.
+  * ename:VK_FORMAT_R16G16B16_SINT specifies a three-component, 48-bit
+    signed integer format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+    4..5.
+  * ename:VK_FORMAT_R16G16B16_SFLOAT specifies a three-component, 48-bit
+    signed floating-point format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
+    bytes 4..5.
+  * ename:VK_FORMAT_R16G16B16A16_UNORM specifies a four-component, 64-bit
+    unsigned normalized format that has a 16-bit R component in bytes 0..1,
+    a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+    and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_SNORM specifies a four-component, 64-bit
+    signed normalized format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+    and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_USCALED specifies a four-component, 64-bit
+    unsigned scaled integer format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+    4..5, and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_SSCALED specifies a four-component, 64-bit
+    signed scaled integer format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+    4..5, and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_UINT specifies a four-component, 64-bit
+    unsigned integer format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+    and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_SINT specifies a four-component, 64-bit
+    signed integer format that has a 16-bit R component in bytes 0..1, a
+    16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+    and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R16G16B16A16_SFLOAT specifies a four-component, 64-bit
+    signed floating-point format that has a 16-bit R component in bytes
+    0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+    4..5, and a 16-bit A component in bytes 6..7.
+  * ename:VK_FORMAT_R32_UINT specifies a one-component, 32-bit unsigned
+    integer format that has a single 32-bit R component.
+  * ename:VK_FORMAT_R32_SINT specifies a one-component, 32-bit signed
+    integer format that has a single 32-bit R component.
+  * ename:VK_FORMAT_R32_SFLOAT specifies a one-component, 32-bit signed
+    floating-point format that has a single 32-bit R component.
+  * ename:VK_FORMAT_R32G32_UINT specifies a two-component, 64-bit unsigned
+    integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
+    G component in bytes 4..7.
+  * ename:VK_FORMAT_R32G32_SINT specifies a two-component, 64-bit signed
+    integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
+    G component in bytes 4..7.
+  * ename:VK_FORMAT_R32G32_SFLOAT specifies a two-component, 64-bit signed
+    floating-point format that has a 32-bit R component in bytes 0..3, and a
+    32-bit G component in bytes 4..7.
+  * ename:VK_FORMAT_R32G32B32_UINT specifies a three-component, 96-bit
+    unsigned integer format that has a 32-bit R component in bytes 0..3, a
+    32-bit G component in bytes 4..7, and a 32-bit B component in bytes
+    8..11.
+  * ename:VK_FORMAT_R32G32B32_SINT specifies a three-component, 96-bit
+    signed integer format that has a 32-bit R component in bytes 0..3, a
+    32-bit G component in bytes 4..7, and a 32-bit B component in bytes
+    8..11.
+  * ename:VK_FORMAT_R32G32B32_SFLOAT specifies a three-component, 96-bit
+    signed floating-point format that has a 32-bit R component in bytes
+    0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in
+    bytes 8..11.
+  * ename:VK_FORMAT_R32G32B32A32_UINT specifies a four-component, 128-bit
+    unsigned integer format that has a 32-bit R component in bytes 0..3, a
+    32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
+    and a 32-bit A component in bytes 12..15.
+  * ename:VK_FORMAT_R32G32B32A32_SINT specifies a four-component, 128-bit
+    signed integer format that has a 32-bit R component in bytes 0..3, a
+    32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
+    and a 32-bit A component in bytes 12..15.
+  * ename:VK_FORMAT_R32G32B32A32_SFLOAT specifies a four-component, 128-bit
+    signed floating-point format that has a 32-bit R component in bytes
+    0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes
+    8..11, and a 32-bit A component in bytes 12..15.
+  * ename:VK_FORMAT_R64_UINT specifies a one-component, 64-bit unsigned
+    integer format that has a single 64-bit R component.
+  * ename:VK_FORMAT_R64_SINT specifies a one-component, 64-bit signed
+    integer format that has a single 64-bit R component.
+  * ename:VK_FORMAT_R64_SFLOAT specifies a one-component, 64-bit signed
+    floating-point format that has a single 64-bit R component.
+  * ename:VK_FORMAT_R64G64_UINT specifies a two-component, 128-bit unsigned
+    integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
+    G component in bytes 8..15.
+  * ename:VK_FORMAT_R64G64_SINT specifies a two-component, 128-bit signed
+    integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
+    G component in bytes 8..15.
+  * ename:VK_FORMAT_R64G64_SFLOAT specifies a two-component, 128-bit signed
+    floating-point format that has a 64-bit R component in bytes 0..7, and a
+    64-bit G component in bytes 8..15.
+  * ename:VK_FORMAT_R64G64B64_UINT specifies a three-component, 192-bit
+    unsigned integer format that has a 64-bit R component in bytes 0..7, a
+    64-bit G component in bytes 8..15, and a 64-bit B component in bytes
+    16..23.
+  * ename:VK_FORMAT_R64G64B64_SINT specifies a three-component, 192-bit
+    signed integer format that has a 64-bit R component in bytes 0..7, a
+    64-bit G component in bytes 8..15, and a 64-bit B component in bytes
+    16..23.
+  * ename:VK_FORMAT_R64G64B64_SFLOAT specifies a three-component, 192-bit
+    signed floating-point format that has a 64-bit R component in bytes
+    0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in
+    bytes 16..23.
+  * ename:VK_FORMAT_R64G64B64A64_UINT specifies a four-component, 256-bit
+    unsigned integer format that has a 64-bit R component in bytes 0..7, a
+    64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
+    and a 64-bit A component in bytes 24..31.
+  * ename:VK_FORMAT_R64G64B64A64_SINT specifies a four-component, 256-bit
+    signed integer format that has a 64-bit R component in bytes 0..7, a
+    64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
+    and a 64-bit A component in bytes 24..31.
+  * ename:VK_FORMAT_R64G64B64A64_SFLOAT specifies a four-component, 256-bit
+    signed floating-point format that has a 64-bit R component in bytes
+    0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes
+    16..23, and a 64-bit A component in bytes 24..31.
+  * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 specifies a three-component,
+    32-bit packed unsigned floating-point format that has a 10-bit B
+    component in bits 22..31, an 11-bit G component in bits 11..21, an
+    11-bit R component in bits 0..10.
+    See <<fundamentals-fp10>> and <<fundamentals-fp11>>.
+  * ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 specifies a three-component,
+    32-bit packed unsigned floating-point format that has a 5-bit shared
+    exponent in bits 27..31, a 9-bit B component mantissa in bits 18..26, a
+    9-bit G component mantissa in bits 9..17, and a 9-bit R component
+    mantissa in bits 0..8.
+  * ename:VK_FORMAT_D16_UNORM specifies a one-component, 16-bit unsigned
+    normalized format that has a single 16-bit depth component.
+  * ename:VK_FORMAT_X8_D24_UNORM_PACK32 specifies a two-component, 32-bit
+    format that has 24 unsigned normalized bits in the depth component and,
+    optionally:, 8 bits that are unused.
+  * ename:VK_FORMAT_D32_SFLOAT specifies a one-component, 32-bit signed
+    floating-point format that has 32 bits in the depth component.
+  * ename:VK_FORMAT_S8_UINT specifies a one-component, 8-bit unsigned
+    integer format that has 8 bits in the stencil component.
+  * ename:VK_FORMAT_D16_UNORM_S8_UINT specifies a two-component, 24-bit
+    format that has 16 unsigned normalized bits in the depth component and 8
+    unsigned integer bits in the stencil component.
+  * ename:VK_FORMAT_D24_UNORM_S8_UINT specifies a two-component, 32-bit
+    packed format that has 8 unsigned integer bits in the stencil component,
+    and 24 unsigned normalized bits in the depth component.
+  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT specifies a two-component format that
+    has 32 signed float bits in the depth component and 8 unsigned integer
+    bits in the stencil component.
+    There are optionally: 24 bits that are unused.
+  * ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK specifies a three-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data.
+    This format has no alpha and is considered opaque.
+  * ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK specifies a three-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
+    nonlinear encoding.
+    This format has no alpha and is considered opaque.
+  * ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK specifies a four-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data, and
+    provides 1 bit of alpha.
+  * ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK specifies a four-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
+    nonlinear encoding, and provides 1 bit of alpha.
+  * ename:VK_FORMAT_BC2_UNORM_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
+    with the first 64 bits encoding alpha values followed by 64 bits
+    encoding RGB values.
+  * ename:VK_FORMAT_BC2_SRGB_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
+    with the first 64 bits encoding alpha values followed by 64 bits
+    encoding RGB values with sRGB nonlinear encoding.
+  * ename:VK_FORMAT_BC3_UNORM_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
+    with the first 64 bits encoding alpha values followed by 64 bits
+    encoding RGB values.
+  * ename:VK_FORMAT_BC3_SRGB_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
+    with the first 64 bits encoding alpha values followed by 64 bits
+    encoding RGB values with sRGB nonlinear encoding.
+  * ename:VK_FORMAT_BC4_UNORM_BLOCK specifies a one-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized red texel data.
+  * ename:VK_FORMAT_BC4_SNORM_BLOCK specifies a one-component,
+    block-compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of signed normalized red texel data.
+  * ename:VK_FORMAT_BC5_UNORM_BLOCK specifies a two-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RG texel data with
+    the first 64 bits encoding red values followed by 64 bits encoding green
+    values.
+  * ename:VK_FORMAT_BC5_SNORM_BLOCK specifies a two-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of signed normalized RG texel data with
+    the first 64 bits encoding red values followed by 64 bits encoding green
+    values.
+  * ename:VK_FORMAT_BC6H_UFLOAT_BLOCK specifies a three-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned floating-point RGB texel data.
+  * ename:VK_FORMAT_BC6H_SFLOAT_BLOCK specifies a three-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of signed floating-point RGB texel data.
+  * ename:VK_FORMAT_BC7_UNORM_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_BC7_SRGB_BLOCK specifies a four-component,
+    block-compressed format where each 128-bit compressed texel block
+    encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data
+    with sRGB nonlinear encoding applied to the RGB components.
+  * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK specifies a three-component,
+    ETC2 compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data.
+    This format has no alpha and is considered opaque.
+  * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK specifies a three-component, ETC2
+    compressed format where each 64-bit compressed texel block encodes a
+    4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
+    nonlinear encoding.
+    This format has no alpha and is considered opaque.
+  * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK specifies a four-component,
+    ETC2 compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data, and
+    provides 1 bit of alpha.
+  * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK specifies a four-component,
+    ETC2 compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB
+    nonlinear encoding, and provides 1 bit of alpha.
+  * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK specifies a four-component,
+    ETC2 compressed format where each 128-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
+    first 64 bits encoding alpha values followed by 64 bits encoding RGB
+    values.
+  * ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK specifies a four-component,
+    ETC2 compressed format where each 128-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data with the
+    first 64 bits encoding alpha values followed by 64 bits encoding RGB
+    values with sRGB nonlinear encoding applied.
+  * ename:VK_FORMAT_EAC_R11_UNORM_BLOCK specifies a one-component, ETC2
+    compressed format where each 64-bit compressed texel block encodes a
+    4{times}4 rectangle of unsigned normalized red texel data.
+  * ename:VK_FORMAT_EAC_R11_SNORM_BLOCK specifies a one-component, ETC2
+    compressed format where each 64-bit compressed texel block encodes a
+    4{times}4 rectangle of signed normalized red texel data.
+  * ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK specifies a two-component, ETC2
+    compressed format where each 128-bit compressed texel block encodes a
+    4{times}4 rectangle of unsigned normalized RG texel data with the first
+    64 bits encoding red values followed by 64 bits encoding green values.
+  * ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK specifies a two-component, ETC2
+    compressed format where each 128-bit compressed texel block encodes a
+    4{times}4 rectangle of signed normalized RG texel data with the first 64
+    bits encoding red values followed by 64 bits encoding green values.
+  * ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    4{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    4{times}4 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}4 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}5 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    5{times}5 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}5 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}5 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}6 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    6{times}6 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}5 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    8{times}5 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}6 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    8{times}6 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}8 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes an
+    8{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    8{times}8 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}5 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}5 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}5 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}6 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}6 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}6 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}8 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}8 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}8 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}10 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    10{times}10 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}10 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}10 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}10 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}12 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}12 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK specifies a four-component, ASTC
+    compressed format where each 128-bit compressed texel block encodes a
+    12{times}12 rectangle of signed floating-point RGBA texel data.
+endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_FORMAT_G8B8G8R8_422_UNORM specifies a four-component, 32-bit
+    format containing a pair of G components, an R component, and a B
+    component, collectively encoding a 2{times}1 rectangle of unsigned
+    normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has an 8-bit G component for the even _i_ coordinate in byte
+    0, an 8-bit B component in byte 1, an 8-bit G component for the odd _i_
+    coordinate in byte 2, and an 8-bit R component in byte 3.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_B8G8R8G8_422_UNORM specifies a four-component, 32-bit
+    format containing a pair of G components, an R component, and a B
+    component, collectively encoding a 2{times}1 rectangle of unsigned
+    normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has an 8-bit B component in byte 0, an 8-bit G component for
+    the even _i_ coordinate in byte 1, an 8-bit R component in byte 2, and
+    an 8-bit G component for the odd _i_ coordinate in byte 3.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
+    The horizontal and vertical dimensions of the R and B planes are halved
+    relative to the image dimensions, and each R and B component is shared
+    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
+    component in byte 0 and an 8-bit R component in byte 1.
+    The horizontal and vertical dimensions of the BR plane are halved
+    relative to the image dimensions, and each R and B value is shared with
+    the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
+    The horizontal dimension of the R and B plane is halved relative to the
+    image dimensions, and each R and B value is shared with the G components
+    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
+    i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
+    component in byte 0 and an 8-bit R component in byte 1.
+    The horizontal dimension of the BR plane is halved relative to the image
+    dimensions, and each R and B value is shared with the G components for
+    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2.
+    Each plane has the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+  * ename:VK_FORMAT_R10X6_UNORM_PACK16 specifies a one-component, 16-bit
+    unsigned normalized format that has a single 10-bit R component in the
+    top 10 bits of a 16-bit word, with the bottom 6 bits unused.
+  * ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 specifies a two-component,
+    32-bit unsigned normalized format that has a 10-bit R component in the
+    top 10 bits of the word in bytes 0..1, and a 10-bit G component in the
+    top 10 bits of the word in bytes 2..3, with the bottom 6 bits of each
+    word unused.
+  * ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 specifies a
+    four-component, 64-bit unsigned normalized format that has a 10-bit R
+    component in the top 10 bits of the word in bytes 0..1, a 10-bit G
+    component in the top 10 bits of the word in bytes 2..3, a 10-bit B
+    component in the top 10 bits of the word in bytes 4..5, and a 10-bit A
+    component in the top 10 bits of the word in bytes 6..7, with the bottom
+    6 bits of each word unused.
+  * ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 specifies a
+    four-component, 64-bit format containing a pair of G components, an R
+    component, and a B component, collectively encoding a 2{times}1
+    rectangle of unsigned normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 10-bit G component for the even _i_ coordinate in the
+    top 10 bits of the word in bytes 0..1, a 10-bit B component in the top
+    10 bits of the word in bytes 2..3, a 10-bit G component for the odd _i_
+    coordinate in the top 10 bits of the word in bytes 4..5, and a 10-bit R
+    component in the top 10 bits of the word in bytes 6..7, with the bottom
+    6 bits of each word unused.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 specifies a
+    four-component, 64-bit format containing a pair of G components, an R
+    component, and a B component, collectively encoding a 2{times}1
+    rectangle of unsigned normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 10-bit B component in the top 10 bits of the word in
+    bytes 0..1, a 10-bit G component for the even _i_ coordinate in the top
+    10 bits of the word in bytes 2..3, a 10-bit R component in the top 10
+    bits of the word in bytes 4..5, and a 10-bit G component for the odd _i_
+    coordinate in the top 10 bits of the word in bytes 6..7, with the bottom
+    6 bits of each word unused.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+    component in the top 10 bits of each 16-bit word of plane 2, with the
+    bottom 6 bits of each word unused.
+    The horizontal and vertical dimensions of the R and B planes are halved
+    relative to the image dimensions, and each R and B component is shared
+    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
+    of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
+    of the word in bytes 2..3, with the bottom 6 bits of each word unused.
+    The horizontal and vertical dimensions of the BR plane are halved
+    relative to the image dimensions, and each R and B value is shared with
+    the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+    component in the top 10 bits of each 16-bit word of plane 2, with the
+    bottom 6 bits of each word unused.
+    The horizontal dimension of the R and B plane is halved relative to the
+    image dimensions, and each R and B value is shared with the G components
+    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
+    i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
+    of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
+    of the word in bytes 2..3, with the bottom 6 bits of each word unused.
+    The horizontal dimension of the BR plane is halved relative to the image
+    dimensions, and each R and B value is shared with the G components for
+    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+    in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+    component in the top 10 bits of each 16-bit word of plane 2, with the
+    bottom 6 bits of each word unused.
+    Each plane has the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+  * ename:VK_FORMAT_R12X4_UNORM_PACK16 specifies a one-component, 16-bit
+    unsigned normalized format that has a single 12-bit R component in the
+    top 12 bits of a 16-bit word, with the bottom 4 bits unused.
+  * ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 specifies a two-component,
+    32-bit unsigned normalized format that has a 12-bit R component in the
+    top 12 bits of the word in bytes 0..1, and a 12-bit G component in the
+    top 12 bits of the word in bytes 2..3, with the bottom 4 bits of each
+    word unused.
+  * ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 specifies a
+    four-component, 64-bit unsigned normalized format that has a 12-bit R
+    component in the top 12 bits of the word in bytes 0..1, a 12-bit G
+    component in the top 12 bits of the word in bytes 2..3, a 12-bit B
+    component in the top 12 bits of the word in bytes 4..5, and a 12-bit A
+    component in the top 12 bits of the word in bytes 6..7, with the bottom
+    4 bits of each word unused.
+  * ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 specifies a
+    four-component, 64-bit format containing a pair of G components, an R
+    component, and a B component, collectively encoding a 2{times}1
+    rectangle of unsigned normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 12-bit G component for the even _i_ coordinate in the
+    top 12 bits of the word in bytes 0..1, a 12-bit B component in the top
+    12 bits of the word in bytes 2..3, a 12-bit G component for the odd _i_
+    coordinate in the top 12 bits of the word in bytes 4..5, and a 12-bit R
+    component in the top 12 bits of the word in bytes 6..7, with the bottom
+    4 bits of each word unused.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 specifies a
+    four-component, 64-bit format containing a pair of G components, an R
+    component, and a B component, collectively encoding a 2{times}1
+    rectangle of unsigned normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 12-bit B component in the top 12 bits of the word in
+    bytes 0..1, a 12-bit G component for the even _i_ coordinate in the top
+    12 bits of the word in bytes 2..3, a 12-bit R component in the top 12
+    bits of the word in bytes 4..5, and a 12-bit G component for the odd _i_
+    coordinate in the top 12 bits of the word in bytes 6..7, with the bottom
+    4 bits of each word unused.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+    component in the top 12 bits of each 16-bit word of plane 2, with the
+    bottom 4 bits of each word unused.
+    The horizontal and vertical dimensions of the R and B planes are halved
+    relative to the image dimensions, and each R and B component is shared
+    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
+    of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
+    of the word in bytes 2..3, with the bottom 4 bits of each word unused.
+    The horizontal and vertical dimensions of the BR plane are halved
+    relative to the image dimensions, and each R and B value is shared with
+    the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+    component in the top 12 bits of each 16-bit word of plane 2, with the
+    bottom 4 bits of each word unused.
+    The horizontal dimension of the R and B plane is halved relative to the
+    image dimensions, and each R and B value is shared with the G components
+    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
+    i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
+    of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
+    of the word in bytes 2..3, with the bottom 4 bits of each word unused.
+    The horizontal dimension of the BR plane is halved relative to the image
+    dimensions, and each R and B value is shared with the G components for
+    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+    in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+    component in the top 12 bits of each 16-bit word of plane 2, with the
+    bottom 4 bits of each word unused.
+    Each plane has the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+  * ename:VK_FORMAT_G16B16G16R16_422_UNORM specifies a four-component,
+    64-bit format containing a pair of G components, an R component, and a B
+    component, collectively encoding a 2{times}1 rectangle of unsigned
+    normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 16-bit G component for the even _i_ coordinate in the
+    word in bytes 0..1, a 16-bit B component in the word in bytes 2..3, a
+    16-bit G component for the odd _i_ coordinate in the word in bytes 4..5,
+    and a 16-bit R component in the word in bytes 6..7.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_B16G16R16G16_422_UNORM specifies a four-component,
+    64-bit format containing a pair of G components, an R component, and a B
+    component, collectively encoding a 2{times}1 rectangle of unsigned
+    normalized RGB texel data.
+    One G value is present at each _i_ coordinate, with the B and R values
+    shared across both G values and thus recorded at half the horizontal
+    resolution of the image.
+    This format has a 16-bit B component in the word in bytes 0..1, a 16-bit
+    G component for the even _i_ coordinate in the word in bytes 2..3, a
+    16-bit R component in the word in bytes 4..5, and a 16-bit G component
+    for the odd _i_ coordinate in the word in bytes 6..7.
+    This format only supports images with a width that is a multiple of two.
+    For the purposes of the constraints on copy extents, this format is
+    treated as a compressed format with a 2{times}1 compressed texel block.
+  * ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
+    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
+    The horizontal and vertical dimensions of the R and B planes are halved
+    relative to the image dimensions, and each R and B component is shared
+    with the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
+    consisting of a 16-bit B component in the word in bytes 0..1, and a
+    16-bit R component in the word in bytes 2..3.
+    The horizontal and vertical dimensions of the BR plane are halved
+    relative to the image dimensions, and each R and B value is shared with
+    the G components for which latexmath:[\left\lfloor i_G \times 0.5
+    \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5
+    \right\rfloor = j_B = j_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width and height that is a
+    multiple of two.
+  * ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
+    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
+    The horizontal dimension of the R and B plane is halved relative to the
+    image dimensions, and each R and B value is shared with the G components
+    for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B =
+    i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
+    consisting of a 16-bit B component in the word in bytes 0..1, and a
+    16-bit R component in the word in bytes 2..3.
+    The horizontal dimension of the BR plane is halved relative to the image
+    dimensions, and each R and B value is shared with the G components for
+    which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R].
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+    This format only supports images with a width that is a multiple of two.
+  * ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, a 16-bit B component in each 16-bit word of
+    plane 1, and a 16-bit R component in each 16-bit word of plane 2.
+    Each plane has the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
+  * ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has an 8-bit G component in plane
+    0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
+    component in byte 0 and an 8-bit R component in byte 1.
+    Both planes have the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+  * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 10-bit G component
+    in the top 10 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
+    of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
+    of the word in bytes 2..3, the bottom 6 bits of each word unused.
+    Both planes have the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+  * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 specifies an
+    unsigned normalized _multi-planar format_ that has a 12-bit G component
+    in the top 12 bits of each 16-bit word of plane 0, and a two-component,
+    32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
+    of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
+    of the word in bytes 2..3, the bottom 4 bits of each word unused.
+    Both planes have the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+  * ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM specifies an unsigned
+    normalized _multi-planar format_ that has a 16-bit G component in each
+    16-bit word of plane 0, and a two-component, 32-bit BR plane 1
+    consisting of a 16-bit B component in the word in bytes 0..1, and a
+    16-bit R component in the word in bytes 2..3.
+    Both planes have the same dimensions and each R, G and B component
+    contributes to a single texel.
+    The location of each plane when this image is in linear layout can be
+    determined via flink:vkGetImageSubresourceLayout, using
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane.
+endif::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
+ifdef::VK_IMG_format_pvrtc[]
+  * ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    an 8{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    an 8{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data.
+  * ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+  * ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+  * ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+  * ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG specifies a four-component,
+    PVRTC compressed format where each 64-bit compressed texel block encodes
+    a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB
+    nonlinear encoding applied to the RGB components.
+endif::VK_IMG_format_pvrtc[]
+ifdef::VK_NV_optical_flow[]
+  * ename:VK_FORMAT_R16G16_S10_5_NV specifies a two-component, fixed-point
+    format where most significant bit specifies the sign bit, next 10 bits
+    specify the integer value and last 5 bits represent the fractional
+    value.
+endif::VK_NV_optical_flow[]
+--
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[formats-compatible-planes]]
+=== Compatible Formats of Planes of Multi-Planar Formats
+
+Individual planes of multi-planar formats are size-compatible with
+single-plane color formats if they occupy the same number of bits per texel
+block, and are compatible with those formats if they have the same block
+extent.
+
+In the following table, individual planes of a _multi-planar_ format are
+compatible with the format listed against the relevant plane index for that
+multi-planar format, and any format compatible with the listed single-plane
+format according to <<formats-compatibility-classes, Format Compatibility
+Classes>>.
+These planes are also <<formats-size-compatibility,size-compatible>> with
+any format that is <<formats-size-compatibility, size-compatible>> with the
+listed single-plane format.
+
+.Plane Format Compatibility Table
+[width="95%",cols="1,6,3,3",options="header"]
+|====
+^| Plane ^| Compatible format for plane ^| Width relative to the width _w_ of the plane with the largest dimensions ^| Height relative to the height _h_ of the plane with the largest dimensions
+include::{generated}/formats/planeformat.adoc[]
+|====
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+[[formats-planes-image-aspect]]
+=== Multi-planar Format Image Aspect
+
+When using elink:VkImageAspectFlagBits to select a plane of a multi-planar
+format, the following are the valid options:
+
+  * Two planes
+  ** ename:VK_IMAGE_ASPECT_PLANE_0_BIT
+  ** ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * Three planes
+  ** ename:VK_IMAGE_ASPECT_PLANE_0_BIT
+  ** ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  ** ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+
+
+[[formats-packed]]
+=== Packed Formats
+
+For the purposes of address alignment when accessing buffer memory
+containing vertex attribute or texel data, the following formats are
+considered _packed_ - components of the texels or attributes are stored in
+bitfields packed into one or more 8-, 16-, or 32-bit fundamental data type.
+
+include::{generated}/formats/packed.adoc[]
+
+
+=== Identification of Formats
+
+A "`format`" is represented by a single enum value.
+The name of a format is usually built up by using the following pattern:
+
+....
+    VK_FORMAT_{component-format|compression-scheme}_{numeric-format}
+....
+
+The component-format indicates either the size of the R, G, B, and A
+components (if they are present) in the case of a color format, or the size
+of the depth (D) and stencil (S) components (if they are present) in the
+case of a depth/stencil format (see below).
+An X indicates a component that is unused, but may: be present for padding.
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,3,10",options="header"]
+|====
+| Numeric format | Type-Declaration instructions | Numeric type | Description
+| etext:UNORM    | OpTypeFloat   | floating-point   | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat   | floating-point   | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat   | floating-point   | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat   | floating-point   | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt     | unsigned integer | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt     | signed integer   | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat   | floating-point   | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat   | floating-point   | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat   | floating-point   | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+4+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an
+underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has
+etext:m groups of components (which may or may not be stored in separate
+_planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+The suffix etext:_BLOCK indicates that the format is a block-compressed
+format, with the representation of multiple pixels encoded interdependently
+within a region.
+
+[[formats-compressionscheme]]
+.Interpretation of Compression Scheme
+[width="95%",cols="2,10",options="header"]
+|====
+| Compression scheme | Description
+| etext:BC           | Block Compression. See <<appendix-compressedtex-bc>>.
+| etext:ETC2         | Ericsson Texture Compression. See <<appendix-compressedtex-etc2>>.
+| etext:EAC          | ETC2 Alpha Compression. See <<appendix-compressedtex-etc2>>.
+| etext:ASTC         | Adaptive Scalable Texture Compression (LDR Profile). See <<appendix-compressedtex-astc>>.
+|====
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[formats-planes]]
+For _multi-planar_ images, the components in separate _planes_ are separated
+by underscores, and the number of planes is indicated by the addition of a
+etext:_2PLANE or etext:_3PLANE suffix.
+Similarly, the separate aspects of depth-stencil formats are separated by
+underscores, although these are not considered separate planes.
+Formats are suffixed by etext:_422 to indicate that planes other than the
+first are reduced in size by a factor of two horizontally or that the R and
+B values appear at half the horizontal frequency of the G values, etext:_420
+to indicate that planes other than the first are reduced in size by a factor
+of two both horizontally and vertically, and etext:_444 for consistency to
+indicate that all three planes of a three-planar image are the same size.
+
+[NOTE]
+.Note
+====
+No common format has a single plane containing both R and B components but
+does not store these components at reduced horizontal resolution.
+====
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+[[texel-block-size]]
+=== Representation and Texel Block Size
+
+Color formats must: be represented in memory in exactly the form indicated
+by the format's name.
+This means that promoting one format to another with more bits per component
+and/or additional components must: not occur for color formats.
+Depth/stencil formats have more relaxed requirements as discussed
+<<formats-depth-stencil,below>>.
+
+Each format has a _texel block size_, the number of bytes used to store one
+_texel block_ (a single addressable element of an uncompressed image, or a
+single compressed block of a compressed image).
+The texel block size for each format is shown in the
+<<formats-compatibility, Compatible formats>> table.
+
+The representation of non-packed formats is that the first component
+specified in the name of the format is in the lowest memory addresses and
+the last component specified is in the highest memory addresses.
+See <<formats-non-packed,Byte mappings for non-packed/compressed color
+formats>>.
+The in-memory ordering of bytes within a component is determined by the host
+endianness.
+
+[[formats-non-packed]]
+.Byte mappings for non-packed/compressed color formats
+[options="header",cols="16*1,10",width="100%"]
+|====
+>|0 >|1 >|2 >|3 >|4 >|5 >|6 >|7 >|8 >|9 >|10 >|11 >|12 >|13 >|14 >|15 ^| {leftarrow} Byte
+^|R 16+>s|etext:VK_FORMAT_R8_*
+^|R ^|G 15+>s|etext:VK_FORMAT_R8G8_*
+^|R ^|G ^|B 14+>s|etext:VK_FORMAT_R8G8B8_*
+^|B ^|G ^|R 14+>s|etext:VK_FORMAT_B8G8R8_*
+^|R ^|G ^|B ^|A 13+>s|etext:VK_FORMAT_R8G8B8A8_*
+^|B ^|G ^|R ^|A 13+>s|etext:VK_FORMAT_B8G8R8A8_*
+ifdef::VK_KHR_maintenance5[]
+^|A 16+>s|ename:VK_FORMAT_A8_UNORM_KHR
+endif::VK_KHR_maintenance5[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+^|G~0~ ^|B ^|G~1~ ^|R 13+>s|ename:VK_FORMAT_G8B8G8R8_422_UNORM
+^|B ^|G~0~ ^|R ^|G~1~ 13+>s|ename:VK_FORMAT_B8G8R8G8_422_UNORM
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+2+^|R 15+>s|etext:VK_FORMAT_R16_*
+2+^|R 2+^|G 13+>s|etext:VK_FORMAT_R16G16_*
+2+^|R 2+^|G 2+^|B 11+>s|etext:VK_FORMAT_R16G16B16_*
+2+^|R 2+^|G 2+^|B 2+^|A 9+>s|etext:VK_FORMAT_R16G16B16A16_*
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+2+^|G~0~ 2+^|B 2+^|G~1~ 2+^|R 9+>s|etext:VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORM
+etext:VK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORM
+etext:VK_FORMAT_G16B16G16R16_UNORM
+2+^|B 2+^|G~0~ 2+^|R 2+^|G~1~ 9+>s|etext:VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORM
+etext:VK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORM
+ename:VK_FORMAT_B16G16R16G16_422_UNORM
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+4+^|R 13+>s|etext:VK_FORMAT_R32_*
+4+^|R 4+^|G 9+>s|etext:VK_FORMAT_R32G32_*
+4+^|R 4+^|G 4+^|B 5+>s|etext:VK_FORMAT_R32G32B32_*
+4+^|R 4+^|G 4+^|B 4+^|A >s|etext:VK_FORMAT_R32G32B32A32_*
+8+^|R 9+>s|etext:VK_FORMAT_R64_*
+8+^|R 8+^|G >s|etext:VK_FORMAT_R64G64_*
+17+^s|etext:VK_FORMAT_R64G64B64_* as etext:VK_FORMAT_R64G64_* but with B in bytes 16-23
+17+^s|etext:VK_FORMAT_R64G64B64A64_* as etext:VK_FORMAT_R64G64B64_* but with A in bytes 24-31
+|====
+
+Packed formats store multiple components within one underlying type.
+The bit representation is that the first component specified in the name of
+the format is in the most-significant bits and the last component specified
+is in the least-significant bits of the underlying type.
+The in-memory ordering of bytes comprising the underlying type is determined
+by the host endianness.
+
+[[formats-packed-8-bit]]
+.Bit mappings for packed 8-bit formats
+[options="header",cols="8*1",width="100%"]
+|====
+8+^h| Bit
+>|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
+8+^h| ename:VK_FORMAT_R4G4_UNORM_PACK8
+4+^s|R 4+^s|G
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+|====
+
+[[formats-packed-16-bit]]
+.Bit mappings for packed 16-bit formats
+[options="header",cols="16*1",width="100%"]
+|====
+16+^h| Bit
+>|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
+16+^h|ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
+4+^s|R 4+^s|G 4+^s|B 4+^s|A
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+16+^h|ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
+4+^s|B 4+^s|G 4+^s|R 4+^s|A
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[]
+16+^h|ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16
+4+^s|A 4+^s|R 4+^s|G 4+^s|B
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+16+^h|ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16
+4+^s|A 4+^s|B 4+^s|G 4+^s|R
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+endif::VK_VERSION_1_3,VK_EXT_4444_formats[]
+16+^h|ename:VK_FORMAT_R5G6B5_UNORM_PACK16
+5+^s|R 6+^s|G 5+^s|B
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+16+^h|ename:VK_FORMAT_B5G6R5_UNORM_PACK16
+5+^s|B 6+^s|G 5+^s|R
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+16+^h|ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
+5+^s|R 5+^s|G 5+^s|B 1+^s|A
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~0~
+16+^h|ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
+5+^s|B 5+^s|G 5+^s|R 1+^s|A
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~0~
+16+^h|ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
+1+^s|A 5+^s|R 5+^s|G 5+^s|B
+^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+ifdef::VK_KHR_maintenance5[]
+16+^h|ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR
+1+^s|A 5+^s|B 5+^s|G 5+^s|R
+^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+endif::VK_KHR_maintenance5[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+16+^h|ename:VK_FORMAT_R10X6_UNORM_PACK16
+10+^s|R 6+^s|X
+^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+16+^h|ename:VK_FORMAT_R12X4_UNORM_PACK16
+12+^s|R 4+^s|X
+^| ~11~ ^| ~10~
+^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~
+^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+|====
+
+[[formats-packed-32-bit]]
+.Bit mappings for packed 32-bit formats
+[cols="32*1",options="header"]
+|====
+32+^h|Bit
+>|~31~ >|~30~ >|~29~ >|~28~ >|~27~ >|~26~ >|~25~ >|~24~ >|~23~ >|~22~ >|~21~ >|~20~ >|~19~ >|~18~ >|~17~ >|~16~
+>|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~
+32+^h|etext:VK_FORMAT_A8B8G8R8_*_PACK32
+8+^s|A 8+^s|B 8+^s|G 8+^s|R
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+32+^h|etext:VK_FORMAT_A2R10G10B10_*_PACK32
+2+^s|A 10+^s|R 10+^s|G 10+^s|B
+^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+32+^h|etext:VK_FORMAT_A2B10G10R10_*_PACK32
+2+^s|A 10+^s|B 10+^s|G 10+^s|R
+^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+32+^h|ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+10+^s|B 11+^s|G 11+^s|R
+^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~10~ ^|~9~ ^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+32+^h|ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+5+^s|E 9+^s|B 9+^s|G 9+^s|R
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~8~ ^|~7~ ^|~6~ ^|~5~
+^|~4~ ^|~3~ ^|~2~ ^|~1~ ^|~0~
+32+^h|ename:VK_FORMAT_X8_D24_UNORM_PACK32
+8+^s|X 24+^s|D
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+^|~23~ ^|~22~ ^|~21~ ^|~20~
+^|~19~ ^|~18~ ^|~17~ ^|~16~
+^|~15~ ^|~14~ ^|~13~ ^|~12~
+^|~11~ ^|~10~ ^|~9~ ^|~8~
+^|~7~ ^|~6~ ^|~5~ ^|~4~
+^|~3~ ^|~2~ ^|~1~ ^|~0~
+|====
+
+
+[[formats-depth-stencil]]
+=== Depth/Stencil Formats
+
+Depth/stencil formats are considered opaque and need not be stored in the
+exact number of bits per texel or component ordering indicated by the format
+enum.
+However, implementations must: not substitute a different depth or stencil
+precision than is described in the format (e.g. D16 must: not be implemented
+as D24 or D32).
+
+
+[[formats-compatibility-classes]]
+=== Format Compatibility Classes
+
+Uncompressed color formats are _compatible_ with each other if they occupy
+the same number of bits per texel block
+ifdef::VK_KHR_maintenance5[]
+as long as neither or both are alpha formats (e.g.,
+ename:VK_FORMAT_A8_UNORM_KHR)
+endif::VK_KHR_maintenance5[]
+.
+Compressed color formats are compatible with each other if the only
+difference between them is the <<formats-numericformat, numeric format>> of
+the uncompressed pixels.
+Each depth/stencil format is only compatible with itself.
+In the <<formats-compatibility,following>> table, all the formats in the
+same row are compatible.
+Each format has a defined _texel block extent_ specifying how many texels
+each texel block represents in each dimension.
+
+
+[[formats-compatibility]]
+.Compatible Formats
+[width="90%",cols="4,10",options="header"]
+|====
+| Class, Texel Block Size, Texel Block Extent, # Texels/Block | Formats
+include::{generated}/formats/compatibility.adoc[]
+|====
+
+
+[[formats-size-compatibility]]
+==== Size Compatibility
+
+Color formats with the same texel block size are considered
+ifndef::VK_KHR_maintenance5[]
+_size-compatible_.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+_size-compatible_ as long as neither or both are alpha formats (e.g.,
+ename:VK_FORMAT_A8_UNORM_KHR).
+endif::VK_KHR_maintenance5[]
+If two size-compatible formats have different block extents (i.e. for
+compressed formats), then an image with size [eq]#A {times} B {times} C# in
+one format with a block extent of [eq]#a {times} b {times} c# can be
+represented as an image with size [eq]#X {times} Y {times} Z# in the other
+format with block extent [eq]#x {times} y {times} z# at the ratio between
+the block extents for each format, where
+
+  {empty}:: [eq]#{lceil}A/a{rceil} = {lceil}X/x{rceil}#
+  {empty}:: [eq]#{lceil}B/b{rceil} = {lceil}Y/y{rceil}#
+  {empty}:: [eq]#{lceil}C/c{rceil} = {lceil}Z/z{rceil}#
+
+[NOTE]
+.Note
+====
+For example, a 7x3 image in the ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK format
+can be represented as a 1x1 ename:VK_FORMAT_R64G64_UINT image.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+Images created with the
+ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag can have
+size-compatible views created from them to enable access via different
+size-compatible formats.
+Image views created in this way will be sized to match the expectations of
+the block extents noted above.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+Copy operations are able to copy between size-compatible formats in
+different resources to enable manipulation of data in different formats.
+The extent used in these copy operations always matches the source image,
+and is resized to the expectations of the block extents noted above for the
+destination image.
+
+
+[[formats-properties]]
+== Format Properties
+
+[open,refpage='vkGetPhysicalDeviceFormatProperties',desc='Lists physical device\'s format capabilities',type='protos']
+--
+To query supported format features which are properties of the physical
+device, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    format properties.
+  * pname:format is the format whose properties are queried.
+  * pname:pFormatProperties is a pointer to a slink:VkFormatProperties
+    structure in which physical device properties for pname:format are
+    returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties.adoc[]
+--
+
+[open,refpage='VkFormatProperties',desc='Structure specifying image format properties',type='structs']
+--
+The sname:VkFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties.adoc[]
+
+  * pname:linearTilingFeatures is a bitmask of elink:VkFormatFeatureFlagBits
+    specifying features supported by images created with a pname:tiling
+    parameter of ename:VK_IMAGE_TILING_LINEAR.
+  * pname:optimalTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits specifying features supported by images
+    created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL.
+  * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits
+    specifying features supported by buffers.
+
+[NOTE]
+.Note
+====
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+If no format feature flags are supported, then the only possible use would
+be image transfers - which alone are not useful.
+As such, if no format feature flags are supported, the format itself is not
+supported, and images of that format cannot be created.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+If no format feature flags are supported, the format itself is not
+supported, and images of that format cannot be created.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+====
+
+If pname:format is a block-compressed format, then pname:bufferFeatures
+must: not support any features for the format.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If pname:format is not a multi-plane format then pname:linearTilingFeatures
+and pname:optimalTilingFeatures must: not contain
+ename:VK_FORMAT_FEATURE_DISJOINT_BIT.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+include::{generated}/validity/structs/VkFormatProperties.adoc[]
+--
+
+[open,refpage='VkFormatFeatureFlagBits',desc='Bitmask specifying features supported by a buffer',type='enums']
+--
+Bits which can: be set in the slink:VkFormatProperties features
+pname:linearTilingFeatures, pname:optimalTilingFeatures,
+ifdef::VK_EXT_image_drm_format_modifier[]
+slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures,
+endif::VK_EXT_image_drm_format_modifier[]
+and pname:bufferFeatures are:
+
+include::{generated}/api/enums/VkFormatFeatureFlagBits.adoc[]
+
+These values
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+all have the same meaning as the equivalently named values for
+tlink:VkFormatFeatureFlags2 and
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+may: be set in
+ifndef::VK_EXT_image_drm_format_modifier[]
+pname:linearTilingFeatures and pname:optimalTilingFeatures,
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+pname:linearTilingFeatures, pname:optimalTilingFeatures, and
+slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures,
+endif::VK_EXT_image_drm_format_modifier[]
+specifying that the features are supported by <<VkImage,images>> or
+<<VkImageView,image views>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+created with the queried
+flink:vkGetPhysicalDeviceFormatProperties::pname:format:
+
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT specifies that an image view
+    can: be <<descriptorsets-sampledimage, sampled from>>.
+  * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT specifies that an image view
+    can: be used as a <<descriptorsets-storageimage, storage image>>.
+  * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT specifies that an image
+    view can: be used as storage image that supports atomic operations.
+  * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT specifies that an image
+    view can: be used as a framebuffer color attachment and as an input
+    attachment.
+  * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT specifies that an
+    image view can: be used as a framebuffer color attachment that supports
+    blending.
+  * ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an
+    image view can: be used as a framebuffer depth/stencil attachment and as
+    an input attachment.
+  * ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT specifies that an image can: be
+    used as pname:srcImage for the
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2 and fname:vkCmdBlitImage commands.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+  * ename:VK_FORMAT_FEATURE_BLIT_DST_BIT specifies that an image can: be
+    used as pname:dstImage for the
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2 and fname:vkCmdBlitImage commands.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that
+    if ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is also set, an image view
+    can: be used with a sampler that has either of pname:magFilter or
+    pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set
+    to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
+    If ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT is also set, an image can be
+    used as the pname:srcImage to
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2 and fname:vkCmdBlitImage
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    with a pname:filter of ename:VK_FILTER_LINEAR.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT or
+    ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT.
++
+If the format being queried is a depth/stencil format, this bit only
+specifies that the depth aspect (not the stencil aspect) of an image of this
+format supports linear filtering, and that linear filtering of the depth
+aspect is supported whether depth compare is enabled in the sampler or not.
+Where depth comparison is supported it may: be linear filtered whether this
+bit is present or not, but where this bit is not present the filtered value
+may: be computed in an implementation-dependent manner which differs from
+the normal rules of linear filtering.
+The resulting value must: be in the range [eq]#[0,1]# and should: be
+proportional to, or a weighted average of, the number of comparison passes
+or failures.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT specifies that an image can: be
+    used as a source image for <<copies, copy commands>>.
+    If the application pname:apiVersion is Vulkan 1.0 and
+    `apiext:VK_KHR_maintenance1` is not supported,
+    ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT is implied to be set when the
+    format feature flag is not 0.
+  * ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT specifies that an image can: be
+    used as a destination image for <<copies, copy commands>> and <<clears,
+    clear commands>>.
+    If the application pname:apiVersion is Vulkan 1.0 and
+    `apiext:VK_KHR_maintenance1` is not supported,
+    ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT is implied to be set when the
+    format feature flag is not 0.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT specifies
+    sname:VkImage can: be used as a sampled image with a min or max
+    elink:VkSamplerReductionMode.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT specifies
+    that sname:VkImage can: be used with a sampler that has either of
+    pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or
+    be the source image for a blit with pname:filter set to
+    ename:VK_FILTER_CUBIC_EXT.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT.
+    If the format being queried is a depth/stencil format, this only
+    specifies that the depth aspect is cubic filterable.
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an
+    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
+    conversion>> using this format as a source, and that an image of this
+    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
+    pname:xChromaOffset and/or pname:yChromaOffset of
+    ename:VK_CHROMA_LOCATION_MIDPOINT.
+    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
+    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
+    If a format does not incorporate chroma downsampling (it is not a
+    "`422`" or "`420`" format) but the implementation supports sampler
+    {YCbCr} conversion for this format, the implementation must: set
+    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT.
+  * ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT specifies that an
+    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
+    conversion>> using this format as a source, and that an image of this
+    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
+    pname:xChromaOffset and/or pname:yChromaOffset of
+    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
+    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
+    ename:VK_CHROMA_LOCATION_MIDPOINT.
+    If neither ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT nor
+    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT is set, the
+    application must: not define a <<samplers-YCbCr-conversion,sampler
+    {YCbCr} conversion>> using this format as a source.
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+    specifies that an application can: define a
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this
+    format as a source with pname:chromaFilter set to
+    ename:VK_FILTER_LINEAR.
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+    specifies that the format can have different chroma, min, and mag
+    filters.
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+    specifies that reconstruction is explicit, as described in
+    <<textures-chroma-reconstruction>>.
+    If this bit is not present, reconstruction is implicit by default.
+  * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+    specifies that reconstruction can: be forcibly made explicit by setting
+    slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
+    to ename:VK_TRUE.
+    If the format being queried supports
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+    it must: also support
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT.
+  * ename:VK_FORMAT_FEATURE_DISJOINT_BIT specifies that a multi-planar image
+    can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image
+    creation.
+    An implementation must: not set ename:VK_FORMAT_FEATURE_DISJOINT_BIT for
+    _single-plane formats_.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an
+    image view can: be used as a
+    <<renderpass-fragmentdensitymapattachment,fragment density map
+    attachment>>.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies that an image view can: be used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>.
+    An implementation must: not set this feature for formats with a
+    <<formats-numericformat, numeric format>> other than etext:UINT, or set
+    it as a buffer feature.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an
+    image view with this format can: be used as a <<decode-output-picture,
+    decode output picture>> in <<video-decode-operations, video decode
+    operations>>.
+  * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR specifies that an image
+    view with this format can: be used as an output <<reconstructed-picture,
+    reconstructed picture>> or an input <<reference-picture,reference
+    picture>> in <<video-decode-operations,video decode operations>>.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an
+    image view with this format can: be used as an <<encode-input-picture,
+    encode input picture>> in <<video-encode-operations,video encode
+    operations>>.
+  * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR specifies that an image
+    view with this format can: be used as an output <<reconstructed-picture,
+    reconstructed picture>> or an input <<reference-picture,reference
+    picture>> in <<video-encode-operations,video encode operations>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[]
++
+[NOTE]
+.Note
+====
+Specific <<video-profiles,video profiles>> may: have additional restrictions
+on the format and other image creation parameters corresponding to image
+views used by video coding operations that can: be enumerated using the
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR command.
+====
+endif::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[]
+
+[[buffer-compatible-format-features]]
+
+The following bits may: be set in pname:bufferFeatures, specifying that the
+features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer
+views>> created with the queried
+flink:vkGetPhysicalDeviceFormatProperties::pname:format:
+
+  * ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT specifies that the
+    format can: be used to create a buffer view that can: be bound to a
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
+  * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT specifies that the
+    format can: be used to create a buffer view that can: be bound to a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
+  * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that
+    atomic operations are supported on
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
+  * ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT specifies that the format can:
+    be used as a vertex attribute format
+    (sname:VkVertexInputAttributeDescription::pname:format).
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+    specifies that the format can: be used as the vertex format when
+    creating an <<acceleration-structure,acceleration structure>>
+    (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat).
+    This format can: also be used as the vertex format in host memory when
+    doing <<host-acceleration-structure, host acceleration structure>>
+    builds.
+endif::VK_KHR_acceleration_structure[]
+
+[NOTE]
+.Note
+====
+ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT and
+ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT are only intended to
+be advertised for single-component formats, since SPIR-V atomic operations
+require a scalar type.
+====
+--
+
+[open,refpage='VkFormatFeatureFlags',desc='Bitmask of VkFormatFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkFormatFeatureFlags.adoc[]
+
+tname:VkFormatFeatureFlags is a bitmask type for setting a mask of zero or
+more elink:VkFormatFeatureFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+[open,refpage='vkGetPhysicalDeviceFormatProperties2',desc='Lists physical device\'s format capabilities',type='protos']
+--
+To query supported format features which are properties of the physical
+device, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    format properties.
+  * pname:format is the format whose properties are queried.
+  * pname:pFormatProperties is a pointer to a slink:VkFormatProperties2
+    structure in which physical device properties for pname:format are
+    returned.
+
+fname:vkGetPhysicalDeviceFormatProperties2 behaves similarly to
+flink:vkGetPhysicalDeviceFormatProperties, with the ability to return
+extended information in a pname:pNext chain of output structures.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties2.adoc[]
+--
+
+[open,refpage='VkFormatProperties2',desc='Structure specifying image format properties',type='structs']
+--
+The sname:VkFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:formatProperties is a slink:VkFormatProperties structure
+    describing features supported by the requested format.
+
+include::{generated}/validity/structs/VkFormatProperties2.adoc[]
+--
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[open,refpage='VkDrmFormatModifierPropertiesListEXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs']
+--
+To obtain the list of <<glossary-drm-format-modifier,Linux DRM format
+modifiers>> compatible with a elink:VkFormat, add a
+slink:VkDrmFormatModifierPropertiesListEXT structure to the pname:pNext
+chain of slink:VkFormatProperties2.
+
+The slink:VkDrmFormatModifierPropertiesListEXT structure is defined as:
+
+include::{generated}/api/structs/VkDrmFormatModifierPropertiesListEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifierCount is an inout parameter related to the number
+    of modifiers compatible with the pname:format, as described below.
+  * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an
+    array of slink:VkDrmFormatModifierPropertiesEXT structures.
+
+If pname:pDrmFormatModifierProperties is `NULL`, then the function returns
+in pname:drmFormatModifierCount the number of modifiers compatible with the
+queried pname:format.
+Otherwise, the application must: set pname:drmFormatModifierCount to the
+length of the array pname:pDrmFormatModifierProperties; the function will
+write at most pname:drmFormatModifierCount elements to the array, and will
+return in pname:drmFormatModifierCount the number of elements written.
+
+Among the elements in array pname:pDrmFormatModifierProperties, each
+returned pname:drmFormatModifier must: be unique.
+
+include::{generated}/validity/structs/VkDrmFormatModifierPropertiesListEXT.adoc[]
+--
+
+[open,refpage='VkDrmFormatModifierPropertiesEXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs']
+--
+The slink:VkDrmFormatModifierPropertiesEXT structure describes properties of
+a elink:VkFormat when that format is combined with a
+<<glossary-drm-format-modifier,Linux DRM format modifier>>.
+These properties, like those of slink:VkFormatProperties2, are independent
+of any particular image.
+
+The slink:VkDrmFormatModifierPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkDrmFormatModifierPropertiesEXT.adoc[]
+
+  * pname:drmFormatModifier is a _Linux DRM format modifier_.
+  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
+    any image created with pname:format and pname:drmFormatModifier.
+    An image's _memory planecount_ is distinct from its _format planecount_,
+    as explained below.
+  * pname:drmFormatModifierTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits that are supported by any image created
+    with pname:format and pname:drmFormatModifier.
+
+The returned pname:drmFormatModifierTilingFeatures must: contain at least
+one bit.
+
+The implementation must: not return etext:DRM_FORMAT_MOD_INVALID in
+pname:drmFormatModifier.
+
+An image's _memory planecount_ (as returned by
+pname:drmFormatModifierPlaneCount) is distinct from its _format planecount_
+(in the sense of <<formats-requiring-sampler-ycbcr-conversion,multi-planar>>
+{YCbCr} formats).
+In tlink:VkImageAspectFlags, each
+`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` represents a _memory plane_
+and each `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT` a _format plane_.
+
+An image's set of _format planes_ is an ordered partition of the image's
+*content* into separable groups of format components.
+The ordered partition is encoded in the name of each elink:VkFormat.
+For example, ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM contains two _format
+planes_; the first plane contains the green component and the second plane
+contains the blue component and red component.
+If the format name does not contain `PLANE`, then the format contains a
+single plane; for example, ename:VK_FORMAT_R8G8B8A8_UNORM.
+Some commands, such as flink:vkCmdCopyBufferToImage, do not operate on all
+format components in the image, but instead operate only on the _format
+planes_ explicitly chosen by the application and operate on each _format
+plane_ independently.
+
+An image's set of _memory planes_ is an ordered partition of the image's
+*memory* rather than the image's *content*.
+Each _memory plane_ is a contiguous range of memory.
+The union of an image's _memory planes_ is not necessarily contiguous.
+
+If an image is <<glossary-linear-resource,linear>>, then the partition is
+the same for _memory planes_ and for _format planes_.
+Therefore, if the returned pname:drmFormatModifier is
+code:DRM_FORMAT_MOD_LINEAR, then pname:drmFormatModifierPlaneCount must:
+equal the _format planecount_, and pname:drmFormatModifierTilingFeatures
+must: be identical to the
+slink:VkFormatProperties2::pname:linearTilingFeatures returned in the same
+pname:pNext chain.
+
+If an image is <<glossary-linear-resource,non-linear>>, then the partition
+of the image's *memory* into _memory planes_ is implementation-specific and
+may: be unrelated to the partition of the image's *content* into _format
+planes_.
+For example, consider an image whose pname:format is
+ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, pname:tiling is
+ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, whose pname:drmFormatModifier
+is not code:DRM_FORMAT_MOD_LINEAR, and pname:flags lacks
+ename:VK_IMAGE_CREATE_DISJOINT_BIT.
+The image has 3 _format planes_, and commands such
+flink:vkCmdCopyBufferToImage act on each _format plane_ independently as if
+the data of each _format plane_ were separable from the data of the other
+planes.
+In a straightforward implementation, the implementation may: store the
+image's content in 3 adjacent _memory planes_ where each _memory plane_
+corresponds exactly to a _format plane_.
+However, the implementation may: also store the image's content in a single
+_memory plane_ where all format components are combined using an
+implementation-private block-compressed format; or the implementation may:
+store the image's content in a collection of 7 adjacent _memory planes_
+using an implementation-private sharding technique.
+Because the image is non-linear and non-disjoint, the implementation has
+much freedom when choosing the image's placement in memory.
+
+The _memory planecount_ applies to function parameters and structures only
+when the API specifies an explicit requirement on
+pname:drmFormatModifierPlaneCount.
+In all other cases, the _memory planecount_ is ignored.
+
+include::{generated}/validity/structs/VkDrmFormatModifierPropertiesEXT.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+[open,refpage='VkDrmFormatModifierPropertiesList2EXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs']
+--
+The list of <<glossary-drm-format-modifier,Linux DRM format modifiers>>
+compatible with a elink:VkFormat can: be obtained by adding a
+slink:VkDrmFormatModifierPropertiesList2EXT structure to the pname:pNext
+chain of slink:VkFormatProperties2.
+
+The slink:VkDrmFormatModifierPropertiesList2EXT structure is defined as:
+
+include::{generated}/api/structs/VkDrmFormatModifierPropertiesList2EXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifierCount is an inout parameter related to the number
+    of modifiers compatible with the pname:format, as described below.
+  * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an
+    array of slink:VkDrmFormatModifierProperties2EXT structures.
+
+If pname:pDrmFormatModifierProperties is `NULL`, the number of modifiers
+compatible with the queried pname:format is returned in
+pname:drmFormatModifierCount.
+Otherwise, the application must: set pname:drmFormatModifierCount to the
+length of the array pname:pDrmFormatModifierProperties; the function will
+write at most pname:drmFormatModifierCount elements to the array, and will
+return in pname:drmFormatModifierCount the number of elements written.
+
+Among the elements in array pname:pDrmFormatModifierProperties, each
+returned pname:drmFormatModifier must: be unique.
+
+Among the elements in array pname:pDrmFormatModifierProperties, the bits
+reported in pname:drmFormatModifierTilingFeatures must: include the bits
+reported in the corresponding element of
+sname:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties.
+
+include::{generated}/validity/structs/VkDrmFormatModifierPropertiesList2EXT.adoc[]
+--
+
+[open,refpage='VkDrmFormatModifierProperties2EXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs']
+--
+The slink:VkDrmFormatModifierProperties2EXT structure describes properties
+of a elink:VkFormat when that format is combined with a
+<<glossary-drm-format-modifier,Linux DRM format modifier>>.
+These properties, like those of slink:VkFormatProperties2, are independent
+of any particular image.
+
+The slink:VkDrmFormatModifierPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkDrmFormatModifierProperties2EXT.adoc[]
+
+  * pname:drmFormatModifier is a _Linux DRM format modifier_.
+  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
+    any image created with pname:format and pname:drmFormatModifier.
+    An image's _memory planecount_ is distinct from its _format planecount_,
+    as explained below.
+  * pname:drmFormatModifierTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits2 that are supported by any image created
+    with pname:format and pname:drmFormatModifier.
+include::{generated}/validity/structs/VkDrmFormatModifierProperties2EXT.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+[open,refpage='VkFormatProperties3',desc='Structure specifying image format properties',type='structs',alias='VkFormatProperties3KHR']
+--
+To query supported format extended features which are properties of the
+physical device, add slink:VkFormatProperties3 structure to the pname:pNext
+chain of slink:VkFormatProperties2.
+
+The slink:VkFormatProperties3 structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties3.adoc[]
+
+ifdef::VK_KHR_format_feature_flags2[]
+or the equivalent
+
+include::{generated}/api/structs/VkFormatProperties3KHR.adoc[]
+endif::VK_KHR_format_feature_flags2[]
+
+  * pname:linearTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits2 specifying features supported by images
+    created with a pname:tiling parameter of ename:VK_IMAGE_TILING_LINEAR.
+  * pname:optimalTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits2 specifying features supported by images
+    created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL.
+  * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits2
+    specifying features supported by buffers.
+
+The bits reported in pname:linearTilingFeatures, pname:optimalTilingFeatures
+and pname:bufferFeatures must: include the bits reported in the
+corresponding fields of sname:VkFormatProperties2::pname:formatProperties.
+
+include::{generated}/validity/structs/VkFormatProperties3.adoc[]
+--
+
+[open,refpage='VkFormatFeatureFlagBits2',desc='Bitmask specifying features supported by a buffer',type='enums',alias='VkFormatFeatureFlagBits2KHR']
+--
+Bits which can: be set in the slink:VkFormatProperties3 features
+pname:linearTilingFeatures, pname:optimalTilingFeatures, and
+pname:bufferFeatures are:
+
+include::{generated}/api/enums/VkFormatFeatureFlagBits2.adoc[]
+
+ifdef::VK_KHR_format_feature_flags2[]
+or the equivalent
+
+include::{generated}/api/enums/VkFormatFeatureFlagBits2KHR.adoc[]
+endif::VK_KHR_format_feature_flags2[]
+
+The following bits may: be set in pname:linearTilingFeatures and
+pname:optimalTilingFeatures, specifying that the features are supported by
+<<VkImage,images>> or <<VkImageView,image views>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+created with the queried
+flink:vkGetPhysicalDeviceFormatProperties2::pname:format:
+
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT specifies that an image view
+    can: be <<descriptorsets-sampledimage, sampled from>>.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT specifies that an image view
+    can: be used as a <<descriptorsets-storageimage, storage image>>.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT specifies that an
+    image view can: be used as storage image that supports atomic
+    operations.
+  * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT specifies that an image
+    view can: be used as a framebuffer color attachment and as an input
+    attachment.
+  * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT specifies that an
+    image view can: be used as a framebuffer color attachment that supports
+    blending.
+  * ename:VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an
+    image view can: be used as a framebuffer depth/stencil attachment and as
+    an input attachment.
+  * ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT specifies that an image can: be
+    used as the pname:srcImage for
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and]
+    flink:vkCmdBlitImage.
+  * ename:VK_FORMAT_FEATURE_2_BLIT_DST_BIT specifies that an image can: be
+    used as the pname:dstImage for
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and]
+    flink:vkCmdBlitImage.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that
+    if ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT is also set, an image
+    view can: be used with a sampler that has either of pname:magFilter or
+    pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set
+    to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
+    If ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT is also set, an image can be
+    used as the pname:srcImage for
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and]
+    fname:vkCmdBlitImage with a pname:filter of ename:VK_FILTER_LINEAR.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT or
+    ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT.
++
+If the format being queried is a depth/stencil format, this bit only
+specifies that the depth aspect (not the stencil aspect) of an image of this
+format supports linear filtering.
+Where depth comparison is supported it may: be linear filtered whether this
+bit is present or not, but where this bit is not present the filtered value
+may: be computed in an implementation-dependent manner which differs from
+the normal rules of linear filtering.
+The resulting value must: be in the range [eq]#[0,1]# and should: be
+proportional to, or a weighted average of, the number of comparison passes
+or failures.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * ename:VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT specifies that an image can:
+    be used as a source image for <<copies, copy commands>>.
+  * ename:VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT specifies that an image can:
+    be used as a destination image for <<copies, copy commands>> and
+    <<clears, clear commands>>.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT specifies
+    sname:VkImage can: be used as a sampled image with a min or max
+    elink:VkSamplerReductionMode.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT specifies that
+    sname:VkImage can: be used with a sampler that has either of
+    pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or
+    be the source image for a blit with pname:filter set to
+    ename:VK_FILTER_CUBIC_EXT.
+    This bit must: only be exposed for formats that also support the
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT.
+    If the format being queried is a depth/stencil format, this only
+    specifies that the depth aspect is cubic filterable.
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an
+    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
+    conversion>> using this format as a source, and that an image of this
+    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
+    pname:xChromaOffset and/or pname:yChromaOffset of
+    ename:VK_CHROMA_LOCATION_MIDPOINT.
+    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
+    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
+    If a format does not incorporate chroma downsampling (it is not a
+    "`422`" or "`420`" format) but the implementation supports sampler
+    {YCbCr} conversion for this format, the implementation must: set
+    ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT.
+  * ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT specifies that an
+    application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr}
+    conversion>> using this format as a source, and that an image of this
+    format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo
+    pname:xChromaOffset and/or pname:yChromaOffset of
+    ename:VK_CHROMA_LOCATION_COSITED_EVEN.
+    Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be
+    ename:VK_CHROMA_LOCATION_MIDPOINT.
+    If neither ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT nor
+    ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT is set, the
+    application must: not define a <<samplers-YCbCr-conversion,sampler
+    {YCbCr} conversion>> using this format as a source.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+    specifies that an application can: define a
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this
+    format as a source with pname:chromaFilter set to
+    ename:VK_FILTER_LINEAR.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+    specifies that the format can have different chroma, min, and mag
+    filters.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+    specifies that reconstruction is explicit, as described in
+    <<textures-chroma-reconstruction>>.
+    If this bit is not present, reconstruction is implicit by default.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+    specifies that reconstruction can: be forcibly made explicit by setting
+    slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction
+    to ename:VK_TRUE.
+    If the format being queried supports
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+    it must: also support
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT.
+  * ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT specifies that a multi-planar
+    image can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image
+    creation.
+    An implementation must: not set ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT
+    for _single-plane formats_.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an
+    image view can: be used as a
+    <<renderpass-fragmentdensitymapattachment,fragment density map
+    attachment>>.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies that an image view can: be used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>.
+    An implementation must: not set this feature for formats with a
+    <<formats-numericformat, numeric format>> other than etext:UINT, or set
+    it as a buffer feature.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an
+    image view with this format can: be used as a <<decode-output-picture,
+    decode output picture>> in <<video-decode-operations, video decode
+    operations>>.
+  * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR specifies that an
+    image view with this format can: be used as an output
+    <<reconstructed-picture, reconstructed picture>> or an input
+    <<reference-picture,reference picture>> in
+    <<video-decode-operations,video decode operations>>.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an
+    image view with this format can: be used as an <<encode-input-picture,
+    encode input picture>> in <<video-encode-operations,video encode
+    operations>>.
+  * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR specifies that an
+    image view with this format can: be used as an output
+    <<reconstructed-picture, reconstructed picture>> or an input
+    <<reference-picture,reference picture>> in
+    <<video-encode-operations,video encode operations>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[]
++
+[NOTE]
+.Note
+====
+Specific <<video-profiles,video profiles>> may: have additional restrictions
+on the format and other image creation parameters corresponding to image
+views used by video coding operations that can: be enumerated using the
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR command.
+====
+endif::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[]
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT specifies that
+    image views or buffer views created with this format can: be used as
+    <<descriptorsets-storageimage, storage images>> or
+    <<descriptorsets-storagetexelbuffer, storage texel buffers>>
+    respectively for read operations without specifying a format.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT specifies
+    that image views or buffer views created with this format can: be used
+    as <<descriptorsets-storageimage, storage images>> or
+    <<descriptorsets-storagetexelbuffer, storage texel buffers>>
+    respectively for write operations without specifying a format.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT specifies
+    that image views created with this format can: be used for depth
+    comparison performed by code:OpImage*Dref* instructions.
+ifdef::VK_NV_linear_color_attachment[]
+  * ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV specifies that
+    the format is supported as a renderable
+    <<glossary-linear-color-attachment, Linear Color Attachment>>.
+    This bit will be set for renderable color formats in the
+    pname:linearTilingFeatures.
+    This must: not be set in the pname:optimalTilingFeatures or
+    pname:bufferFeatures members.
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_QCOM_image_processing[]
+  * ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM specifies that image
+    views created with this format can: be used as the
+    <<descriptorsets-weightimage, weight image>> input to
+    <<textures-weightimage,weight image sampling>> operations.
+  * ename:VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM specifies that
+    image views created with this format can: be sampled in
+    <<textures-weightimage,weight image sampling>> operations.
+  * ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM specifies that image
+    views created with this format can: be used in
+    <<textures-blockmatch,block matching>> operations.
+  * ename:VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM specifies that
+    image views created with this format can: be sampled in
+    <<textures-boxfilter,box filter sampling>> operations.
+endif::VK_QCOM_image_processing[]
+ifdef::VK_EXT_host_image_copy[]
+  * ename:VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT specifies that an
+    image can: be created with ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT.
+endif::VK_EXT_host_image_copy[]
+
+The following bits may: be set in pname:bufferFeatures, specifying that the
+features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer
+views>> created with the queried
+flink:vkGetPhysicalDeviceFormatProperties2::pname:format:
+
+  * ename:VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT specifies that the
+    format can: be used to create a buffer view that can: be bound to a
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT specifies that the
+    format can: be used to create a buffer view that can: be bound to a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that
+    atomic operations are supported on
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
+  * ename:VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT specifies that the format
+    can: be used as a vertex attribute format
+    (sname:VkVertexInputAttributeDescription::pname:format).
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
+    specifies that the format can: be used as the vertex format when
+    creating an <<acceleration-structure,acceleration structure>>
+    (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat).
+    This format can: also be used as the vertex format in host memory when
+    doing <<host-acceleration-structure, host acceleration structure>>
+    builds.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT specifies that
+    buffer views created with this format can: be used as
+    <<descriptorsets-storagetexelbuffer, storage texel buffers>> for read
+    operations without specifying a format.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT specifies
+    that buffer views created with this format can: be used as
+    <<descriptorsets-storagetexelbuffer, storage texel buffers>> for write
+    operations without specifying a format.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_NV_optical_flow[]
+  * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV specifies that an
+    image view with this format can: be used as an input or reference to
+    <<opticalflow-operations,optical flow operations>>
+  * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV specifies that an
+    image view with this format can: be used as a flow vector map (either as
+    hint, output or global flow) for <<opticalflow-operations,optical flow
+    operations>>
+  * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV specifies that an
+    image view with this format can: be used as an output cost map for
+    <<opticalflow-operations,optical flow operations>>
+endif::VK_NV_optical_flow[]
+--
+
+[open,refpage='VkFormatFeatureFlags2',desc='Bitmask of VkFormatFeatureFlagBits2',type='flags',alias='VkFormatFeatureFlags2KHR']
+--
+include::{generated}/api/flags/VkFormatFeatureFlags2.adoc[]
+
+ifdef::VK_KHR_format_feature_flags2[]
+or the equivalent
+
+include::{generated}/api/flags/VkFormatFeatureFlags2KHR.adoc[]
+endif::VK_KHR_format_feature_flags2[]
+
+tname:VkFormatFeatureFlags2 is a bitmask type for setting a mask of zero or
+more elink:VkFormatFeatureFlagBits2.
+--
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+[open,refpage='VkSubpassResolvePerformanceQueryEXT',desc='Structure specifying the efficiency of subpass resolve for an attachment with a format',type='structs']
+--
+To query the performance characteristics of a <<renderpass-subpass,subpass
+resolve>> operation for an attachment with a elink:VkFormat, add a
+slink:VkSubpassResolvePerformanceQueryEXT structure to the pname:pNext chain
+of slink:VkFormatProperties2.
+
+The slink:VkSubpassResolvePerformanceQueryEXT structure is defined as:
+
+include::{generated}/api/structs/VkSubpassResolvePerformanceQueryEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:optimal specifies that a subpass resolve operation is optimally
+    performed.
+
+If pname:optimal is ename:VK_FALSE for a elink:VkFormat, using a subpass
+resolve operation on a multisampled attachment with this format can incur
+additional costs, including additional memory bandwidth usage and a higher
+memory footprint.
+If an attachment with such a format is used in a
+<<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+subpass, the additional memory and memory bandwidth usage can nullify the
+benefits of using the `apiext:VK_EXT_multisampled_render_to_single_sampled`
+extension.
+
+include::{generated}/validity/structs/VkSubpassResolvePerformanceQueryEXT.adoc[]
+--
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+
+
+[[potential-format-features]]
+=== Potential Format Features
+
+Some <<fundamentals-validusage,valid usage conditions>> depend on the format
+features supported by a slink:VkImage whose elink:VkImageTiling is unknown.
+In such cases the exact elink:VkFormatFeatureFlagBits supported by the
+slink:VkImage cannot be determined, so the valid usage conditions are
+expressed in terms of the _potential format features_ of the slink:VkImage
+format.
+
+The _potential format features_ of a elink:VkFormat are defined as follows:
+
+  * The union of elink:VkFormatFeatureFlagBits
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    and elink:VkFormatFeatureFlagBits2,
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    supported when the elink:VkImageTiling is ename:VK_IMAGE_TILING_OPTIMAL
+ifdef::VK_EXT_image_drm_format_modifier[]
+    , ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+endif::VK_EXT_image_drm_format_modifier[]
+    or ename:VK_IMAGE_TILING_LINEAR
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    if elink:VkFormat is not ename:VK_FORMAT_UNDEFINED
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    and
+    slink:VkAndroidHardwareBufferFormatProperties2ANDROID::pname:formatFeatures
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+    of a valid external format if elink:VkFormat is
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * slink:VkScreenBufferFormatPropertiesQNX::pname:formatFeatures of a valid
+    external format if elink:VkFormat is ename:VK_FORMAT_UNDEFINED
+endif::VK_QNX_external_memory_screen_buffer[]
+
+
+[[features-required-format-support]]
+== Required Format Support
+
+// Jon 1.3 TBD - add any appropriate required formats for 1.3
+
+Implementations must: support at least the following set of features on the
+listed formats.
+For images, these features must: be supported for every elink:VkImageType
+(including arrayed and cube variants) unless otherwise noted.
+These features are supported on existing formats without needing to
+advertise an extension or needing to explicitly enable them.
+Support for additional functionality beyond the requirements listed here is
+queried using the flink:vkGetPhysicalDeviceFormatProperties command.
+
+[NOTE]
+.Note
+====
+Unless otherwise excluded below, the required formats are supported for all
+tlink:VkImageCreateFlags values as long as those flag values are otherwise
+allowed.
+====
+
+The following tables show which feature bits must: be supported for each
+format.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+Formats that are required to support
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: also support
+ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and
+ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+.Key for format feature tables
+[width="70%",cols="1,10"]
+|====
+^|{sym1} | This feature must: be supported on the named format
+^|{sym2} | This feature must: be supported on at least some
+of the named formats, with more information in the table
+where the symbol appears
+^|{sym3} | This feature must: be supported with some caveats or
+preconditions, with more information in the table where the symbol appears
+|====
+
+.Feature bits in pname:optimalTilingFeatures
+[width="70%"]
+|====
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+|ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+|ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+|ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT
+|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+|ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
+|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+|ename:VK_FORMAT_FEATURE_BLIT_DST_BIT
+|ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
+|ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+|ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+|====
+
+.Feature bits in pname:bufferFeatures
+[width="70%"]
+|====
+|ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
+|ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+|ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
+|====
+
+<<<
+
+[[formats-mandatory-features-subbyte]]
+.Mandatory format support: sub-byte components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_UNDEFINED                  |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R4G4_UNORM_PACK8           |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16      | {sym1} | {sym1} | {sym1} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R5G6B5_UNORM_PACK16        | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
+| ename:VK_FORMAT_B5G6R5_UNORM_PACK16        |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16      |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16      | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
+ifdef::VK_KHR_maintenance5[]
+| ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR  |   |   |   |   |   |   |   |   |   |   |   |   |
+endif::VK_KHR_maintenance5[]
+ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[]
+| ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16      | {sym3} | {sym3} | {sym3} |   |   |   |   |   |   |   |   |   |
+// Jon 1.3 TBD - define interaction with 1.3 core here
+14+| Format features marked {sym2} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4R4G4B4 feature.
+14+| Format features marked {sym3} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4B4G4R4 feature.
+endif::VK_VERSION_1_3,VK_EXT_4444_formats[]
+|====
+
+<<<
+
+[[formats-mandatory-features-2byte]]
+.Mandatory format support: 1-3 byte-sized components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_R8_UNORM                   | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8_SNORM                   | {sym1} | {sym1} | {sym1} | {sym3} |   |        |        |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8_USCALED                 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8_SSCALED                 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8_UINT                    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8_SINT                    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8_SRGB                    |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8_UNORM                 | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8G8_SNORM                 | {sym1} | {sym1} | {sym1} | {sym3} |   |        |        |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8G8_USCALED               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8_SSCALED               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8_UINT                  | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8G8_SINT                  | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_R8G8_SRGB                  |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_UNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_SNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_USCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_UINT                |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_SINT                |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R8G8B8_SRGB                |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_UNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_SNORM               |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_USCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_UINT                |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_SINT                |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_B8G8R8_SRGB                |        |        |        |        |   |        |        |        |   |        |        |   |
+ifdef::VK_KHR_maintenance5[]
+| ename:VK_FORMAT_A8_UNORM_KHR               |        |        |        |        |   |        |        |        |   |        |        |   |
+endif::VK_KHR_maintenance5[]
+14+| Format features marked with {sym3} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+<<features-shaderStorageImageExtendedFormats,
+pname:shaderStorageImageExtendedFormats>> feature.
+|====
+
+<<<
+
+[[formats-mandatory-features-4byte]]
+.Mandatory format support: 4 byte-sized components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_R8G8B8A8_UNORM             | {sym1} | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R8G8B8A8_SNORM             | {sym1} | {sym1} | {sym1} | {sym1} |   |   |   |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R8G8B8A8_USCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R8G8B8A8_SSCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_R8G8B8A8_UINT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R8G8B8A8_SINT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R8G8B8A8_SRGB              | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_UNORM             | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_B8G8R8A8_SNORM             |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_USCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_SSCALED           |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_UINT              |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_SINT              |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_B8G8R8A8_SRGB              | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
+| ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32      | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32      | {sym1} | {sym1} | {sym1} |   |   |   |   |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32    |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32    |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_A8B8G8R8_UINT_PACK32       | {sym1} | {sym1} |   |   |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_A8B8G8R8_SINT_PACK32       | {sym1} | {sym1} |   |   |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32       | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |   |   |   |   |
+|====
+
+<<<
+
+[[formats-mandatory-features-10bit]]
+.Mandatory format support: 10- and 12-bit components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2R10G10B10_UINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2R10G10B10_SINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32   | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |   |
+| ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32   |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_A2B10G10R10_UINT_PACK32    | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   |        | {sym1} |   |
+| ename:VK_FORMAT_A2B10G10R10_SINT_PACK32    |        |        |        |        |   |        |        |        |   |        |        |   |
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| ename:VK_FORMAT_R10X6_UNORM_PACK16         |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16   |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R12X4_UNORM_PACK16         |        |        |        |        |   |        |        |        |   |        |        |   |
+| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16   |        |        |        |        |   |        |        |        |   |        |        |   |
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+14+| Format features marked with {sym3} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+<<features-shaderStorageImageExtendedFormats,
+pname:shaderStorageImageExtendedFormats>> feature.
+|====
+
+<<<
+
+[[formats-mandatory-features-16bit]]
+.Mandatory format support: 16-bit components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_R16_UNORM                  |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16_SNORM                  |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16_USCALED                |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16_SSCALED                |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16_UINT                   | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16_SINT                   | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16_SFLOAT                 | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16G16_UNORM               |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16G16_SNORM               |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16G16_USCALED             |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16_SSCALED             |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16_UINT                | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16G16_SINT                | {sym1} | {sym1} |        | {sym3} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16G16_SFLOAT              | {sym1} | {sym1} | {sym1} | {sym3} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} |        |
+| ename:VK_FORMAT_R16G16B16_UNORM            |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_SNORM            |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_USCALED          |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_SSCALED          |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_UINT             |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_SINT             |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16_SFLOAT           |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16A16_UNORM         |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16G16B16A16_SNORM         |        |        |        | {sym3} |   |        |        |        |   | {sym1} |        |        |
+| ename:VK_FORMAT_R16G16B16A16_USCALED       |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16A16_SSCALED       |        |        |        |        |   |        |        |        |   |        |        |        |
+| ename:VK_FORMAT_R16G16B16A16_UINT          | {sym1} | {sym1} |        | {sym1} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R16G16B16A16_SINT          | {sym1} | {sym1} |        | {sym1} |   | {sym1} | {sym1} |        |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R16G16B16A16_SFLOAT        | {sym1} | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} |
+14+| Format features marked with {sym3} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+<<features-shaderStorageImageExtendedFormats,
+pname:shaderStorageImageExtendedFormats>> feature.
+|====
+
+<<<
+
+[[formats-mandatory-features-32bit]]
+.Mandatory format support: 32-bit components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_R32_UINT                   | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} | {sym1}
+| ename:VK_FORMAT_R32_SINT                   | {sym1} | {sym1} |   | {sym1} | {sym1} | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} | {sym1}
+| ename:VK_FORMAT_R32_SFLOAT                 | {sym1} | {sym1} |   | {sym1}
+|
+ifdef::VK_EXT_shader_atomic_float[{sym2}]
+                                                                                | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32_UINT                | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32_SINT                | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32_SFLOAT              | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32B32_UINT             |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
+| ename:VK_FORMAT_R32G32B32_SINT             |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
+| ename:VK_FORMAT_R32G32B32_SFLOAT           |   |   |   |   |   |   |   |   |   | {sym1} |   |   |
+| ename:VK_FORMAT_R32G32B32A32_UINT          | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32B32A32_SINT          | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+| ename:VK_FORMAT_R32G32B32A32_SFLOAT        | {sym1} | {sym1} |   | {sym1} |   | {sym1} | {sym1} |   |   | {sym1} | {sym1} | {sym1} |
+ifdef::VK_EXT_shader_atomic_float[]
+14+| Format features marked with {sym2} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports
+the <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>
+or the <<features-shaderImageFloat32AtomicAdd, pname:shaderImageFloat32AtomicAdd>>
+ifdef::VK_EXT_shader_atomic_float2[]
+or the <<features-shaderImageFloat32AtomicMinMax, pname:shaderImageFloat32AtomicMinMax>>
+endif::VK_EXT_shader_atomic_float2[]
+feature.
+endif::VK_EXT_shader_atomic_float[]
+|====
+
+<<<
+
+[[formats-mandatory-features-64bit]]
+.Mandatory format support: 64-bit/uneven components
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_R64_UINT                   |        |        |
+|
+ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
+|
+ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
+                                                                                     |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64_SINT                   |        |        |
+|
+ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
+|
+ifdef::VK_EXT_shader_image_atomic_int64[{sym2}]
+                                                                                     |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64_SFLOAT                 |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64_UINT                |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64_SINT                |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64_SFLOAT              |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64_UINT             |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64_SINT             |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64_SFLOAT           |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64A64_UINT          |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64A64_SINT          |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_R64G64B64A64_SFLOAT        |        |        |        |        |   |   |   |   |   |   |        |   |
+| ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32    | {sym1} | {sym1} | {sym1} | {sym3} |   |   |   |   |   |   | {sym1} |   |
+| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32     | {sym1} | {sym1} | {sym1} |        |   |   |   |   |   |   |        |   |
+14+| Format features marked with {sym3} must: be supported for
+pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the
+<<features-shaderStorageImageExtendedFormats,
+pname:shaderStorageImageExtendedFormats>> feature.
+ifdef::VK_EXT_shader_image_atomic_int64[]
+14+|
+If the <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>>
+feature is supported, ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and
+ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must: be advertised in
+pname:optimalTilingFeatures for both ename:VK_FORMAT_R64_UINT and
+ename:VK_FORMAT_R64_SINT.
+endif::VK_EXT_shader_image_atomic_int64[]
+|====
+
+<<<
+
+[[formats-mandatory-features-depth-stencil]]
+.Mandatory format support: depth/stencil with `VkImageType` ename:VK_IMAGE_TYPE_2D
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_D16_UNORM                  | {sym1} | {sym1} |   |   |   |   |   |   | {sym1} |   |   |   |
+| ename:VK_FORMAT_X8_D24_UNORM_PACK32        |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
+| ename:VK_FORMAT_D32_SFLOAT                 | {sym1} | {sym1} |   |   |   |   |   |   | {sym2} |   |   |   |
+| ename:VK_FORMAT_S8_UINT                    |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_D16_UNORM_S8_UINT          |   |   |   |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_D24_UNORM_S8_UINT          |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
+| ename:VK_FORMAT_D32_SFLOAT_S8_UINT         |   |   |   |   |   |   |   |   | {sym2} |   |   |   |
+14+| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be
+supported for at least one of ename:VK_FORMAT_X8_D24_UNORM_PACK32 and
+ename:VK_FORMAT_D32_SFLOAT, and must: be supported for at least one of
+ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT.
+14+| pname:bufferFeatures must: not support any features for these formats
+|====
+
+<<<
+
+[[formats-mandatory-features-bcn]]
+.Mandatory format support: BC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D and ename:VK_IMAGE_TYPE_3D
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK         | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC2_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC2_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC3_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC3_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC4_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC4_SNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC5_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC5_SNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK          | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK          | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC7_UNORM_BLOCK            | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_BC7_SRGB_BLOCK             | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+14+| The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
+supported in pname:optimalTilingFeatures for all the formats in at least
+one of: this table, <<formats-mandatory-features-etc>>, or
+<<formats-mandatory-features-astc>>.
+|====
+
+<<<
+
+[[formats-mandatory-features-etc]]
+.Mandatory format support: ETC2 and EAC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK    | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK  | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK   | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK  | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK   | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
+supported in pname:optimalTilingFeatures for all the formats in at least
+one of: this table, <<formats-mandatory-features-bcn>>, or
+<<formats-mandatory-features-astc>>.
+|====
+
+<<<
+
+[[formats-mandatory-features-astc]]
+.Mandatory format support: ASTC LDR compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D
+[width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow}
+12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT        .13+^.^| {downarrow}
+11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT        .12+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT               .11+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT     .10+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT        .9+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT                      .8+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT              .7+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT          .6+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                 .5+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT   .4+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT                      .3+^.^| {downarrow}
+1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                 .2+^.^| {downarrow}
+s| Format
+| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK        | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK       | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK     | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be
+supported in pname:optimalTilingFeatures for all the formats in at least
+one of: this table, <<formats-mandatory-features-bcn>>, or
+<<formats-mandatory-features-etc>>.
+|====
+
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+If cubic filtering is supported,
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
+supported for the following image view types:
+
+  * ename:VK_IMAGE_VIEW_TYPE_2D
+  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+
+for the following formats:
+
+  * ename:VK_FORMAT_R4G4_UNORM_PACK8
+  * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
+  * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
+  * ename:VK_FORMAT_R5G6B5_UNORM_PACK16
+  * ename:VK_FORMAT_B5G6R5_UNORM_PACK16
+  * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16
+  * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16
+  * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16
+  * ename:VK_FORMAT_R8_UNORM
+  * ename:VK_FORMAT_R8_SNORM
+  * ename:VK_FORMAT_R8_SRGB
+  * ename:VK_FORMAT_R8G8_UNORM
+  * ename:VK_FORMAT_R8G8_SNORM
+  * ename:VK_FORMAT_R8G8_SRGB
+  * ename:VK_FORMAT_R8G8B8_UNORM
+  * ename:VK_FORMAT_R8G8B8_SNORM
+  * ename:VK_FORMAT_R8G8B8_SRGB
+  * ename:VK_FORMAT_B8G8R8_UNORM
+  * ename:VK_FORMAT_B8G8R8_SNORM
+  * ename:VK_FORMAT_B8G8R8_SRGB
+  * ename:VK_FORMAT_R8G8B8A8_UNORM
+  * ename:VK_FORMAT_R8G8B8A8_SNORM
+  * ename:VK_FORMAT_R8G8B8A8_SRGB
+  * ename:VK_FORMAT_B8G8R8A8_UNORM
+  * ename:VK_FORMAT_B8G8R8A8_SNORM
+  * ename:VK_FORMAT_B8G8R8A8_SRGB
+  * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
+  * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
+  * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
+
+If ETC compressed formats are supported,
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be
+supported for the following image view types:
+
+  * ename:VK_IMAGE_VIEW_TYPE_2D
+  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+
+for the following additional formats:
+
+  * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
+  * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+  * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
+  * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+  * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
+  * ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+
+If cubic filtering is supported for any other formats, the following image
+view types must: be supported for those formats:
+
+  * ename:VK_IMAGE_VIEW_TYPE_2D
+  * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+To be used with sname:VkImageView with pname:subresourceRange.aspectMask
+equal to ename:VK_IMAGE_ASPECT_COLOR_BIT, <<samplers-YCbCr-conversion,
+sampler {YCbCr} conversion>> must: be enabled for the following formats:
+
+[[formats-requiring-sampler-ycbcr-conversion]]
+.Formats requiring sampler {YCbCr} conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views
+[width="100%",cols="18,^3,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"]
+|====
+11+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT  .11+^.^| {downarrow}
+10+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT            .10+^.^| {downarrow}
+9+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT             .9+^.^| {downarrow}
+8+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT                              .8+^.^| {downarrow}
+7+>| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT         .7+^.^| {downarrow}
+6+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT          .6+^.^| {downarrow}
+5+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT                    .5+^.^| {downarrow}
+4+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT                    .4+^.^| {downarrow}
+3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                   .3+^.^| {downarrow}
+2+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT                        .2+^.^| {downarrow}
+s| Format                                                     s| Planes
+| ename:VK_FORMAT_G8B8G8R8_422_UNORM                           | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_B8G8R8G8_422_UNORM                           | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM                    | 3 |  | {sym2} | {sym2} | {sym2} | {sym2} | | | | |
+| ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM                     | 2 |  | {sym2} | {sym2} | {sym2} | {sym2} | | | | |
+| ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM                    | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM                     | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM                    | 3 |  |        |        |        |        | | | | |
+ifdef::VK_EXT_rgba10x6_formats[]
+| ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 {sym3}   | 1 |  |        |        |        |        | | | | |
+endif::VK_EXT_rgba10x6_formats[]
+ifndef::VK_EXT_rgba10x6_formats[]
+ | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16           | 1 |  |        |        |        |        | | | | |
+endif::VK_EXT_rgba10x6_formats[]
+| ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16           | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16   | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16B16G16R16_422_UNORM                       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_B16G16R16G16_422_UNORM                       | 1 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM                 | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM                  | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM                 | 3 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM                  | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM                 | 3 |  |        |        |        |        | | | | |
+ifdef::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
+| ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM                     | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM                  | 2 |  |        |        |        |        | | | | |
+endif::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[]
+12+| Format features marked {sym2} must: be supported for
+pname:optimalTilingFeatures with elink:VkImageType
+ename:VK_IMAGE_TYPE_2D if the sname:VkPhysicalDevice supports the
+slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures feature.
+ifdef::VK_EXT_rgba10x6_formats[]
+12+| Formats marked {sym3} do not require a sampler {YCbCr} conversion for
+ename:VK_IMAGE_ASPECT_COLOR_BIT image views if the
+slink:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::pname:formatRgba10x6WithoutYCbCrSampler
+feature is enabled.
+endif::VK_EXT_rgba10x6_formats[]
+|====
+
+Implementations are not required to support the
+ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT tlink:VkImageCreateFlags for the
+above formats that require <<samplers-YCbCr-conversion,sampler {YCbCr}
+conversion>>.
+To determine whether the implementation supports sparse image creation flags
+with these formats use flink:vkGetPhysicalDeviceImageFormatProperties or
+flink:vkGetPhysicalDeviceImageFormatProperties2.
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_EXT_fragment_density_map[]
+ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT must: be supported for
+the following formats if the <<features-fragmentDensityMap,
+pname:fragmentDensityMap>> feature is enabled:
+
+  * ename:VK_FORMAT_R8G8_UNORM
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_KHR_acceleration_structure[]
+ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR must:
+be supported in pname:bufferFeatures for the following formats if the
+<<features-accelerationStructure, pname:accelerationStructure>> feature is
+supported:
+
+  * ename:VK_FORMAT_R32G32_SFLOAT
+  * ename:VK_FORMAT_R32G32B32_SFLOAT
+  * ename:VK_FORMAT_R16G16_SFLOAT
+  * ename:VK_FORMAT_R16G16B16A16_SFLOAT
+  * ename:VK_FORMAT_R16G16_SNORM
+  * ename:VK_FORMAT_R16G16B16A16_SNORM
+endif::VK_KHR_acceleration_structure[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must: be
+supported for the following formats if the
+<<features-attachmentFragmentShadingRate,
+pname:attachmentFragmentShadingRate>> feature is supported:
+
+  * ename:VK_FORMAT_R8_UINT
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_EXT_host_image_copy[]
+If `apiext:VK_EXT_host_image_copy` is supported and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is supported in
+pname:optimalTilingFeatures or pname:linearTilingFeatures for a color
+format, ename:VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT must: also be
+supported in pname:optimalTilingFeatures or pname:linearTilingFeatures
+respectively.
+endif::VK_EXT_host_image_copy[]
+
+
+[[formats-without-shader-storage-format]]
+=== Formats Without Shader Storage Format
+
+The device-level features for using a storage image or a storage texel
+buffer with an image format of code:Unknown,
+<<features-shaderStorageImageReadWithoutFormat,
+pname:shaderStorageImageReadWithoutFormat>> and
+<<features-shaderStorageImageWriteWithoutFormat,
+pname:shaderStorageImageWriteWithoutFormat>>, only apply to the following
+formats:
+
+  * ename:VK_FORMAT_R8G8B8A8_UNORM
+  * ename:VK_FORMAT_R8G8B8A8_SNORM
+  * ename:VK_FORMAT_R8G8B8A8_UINT
+  * ename:VK_FORMAT_R8G8B8A8_SINT
+  * ename:VK_FORMAT_R32_UINT
+  * ename:VK_FORMAT_R32_SINT
+  * ename:VK_FORMAT_R32_SFLOAT
+  * ename:VK_FORMAT_R32G32_UINT
+  * ename:VK_FORMAT_R32G32_SINT
+  * ename:VK_FORMAT_R32G32_SFLOAT
+  * ename:VK_FORMAT_R32G32B32A32_UINT
+  * ename:VK_FORMAT_R32G32B32A32_SINT
+  * ename:VK_FORMAT_R32G32B32A32_SFLOAT
+  * ename:VK_FORMAT_R16G16B16A16_UINT
+  * ename:VK_FORMAT_R16G16B16A16_SINT
+  * ename:VK_FORMAT_R16G16B16A16_SFLOAT
+  * ename:VK_FORMAT_R16G16_SFLOAT
+  * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+  * ename:VK_FORMAT_R16_SFLOAT
+  * ename:VK_FORMAT_R16G16B16A16_UNORM
+  * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+  * ename:VK_FORMAT_R16G16_UNORM
+  * ename:VK_FORMAT_R8G8_UNORM
+  * ename:VK_FORMAT_R16_UNORM
+  * ename:VK_FORMAT_R8_UNORM
+  * ename:VK_FORMAT_R16G16B16A16_SNORM
+  * ename:VK_FORMAT_R16G16_SNORM
+  * ename:VK_FORMAT_R8G8_SNORM
+  * ename:VK_FORMAT_R16_SNORM
+  * ename:VK_FORMAT_R8_SNORM
+  * ename:VK_FORMAT_R16G16_SINT
+  * ename:VK_FORMAT_R8G8_SINT
+  * ename:VK_FORMAT_R16_SINT
+  * ename:VK_FORMAT_R8_SINT
+  * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
+  * ename:VK_FORMAT_R16G16_UINT
+  * ename:VK_FORMAT_R8G8_UINT
+  * ename:VK_FORMAT_R16_UINT
+  * ename:VK_FORMAT_R8_UINT
+ifdef::VK_KHR_maintenance5[]
+  * ename:VK_FORMAT_A8_UNORM_KHR
+endif::VK_KHR_maintenance5[]
+
+[NOTE]
+.Note
+====
+This list of formats is the union of required storage formats from
+<<features-required-format-support, Required Format Support>> section and
+formats listed in <<features-shaderStorageImageExtendedFormats,
+pname:shaderStorageImageExtendedFormats>>.
+====
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+for any format from the given list of formats and supports
+<<features-shaderStorageImageReadWithoutFormat,
+pname:shaderStorageImageReadWithoutFormat>> must: support
+ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT for that same
+format if Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension
+is supported.
+
+An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+for any format from the given list of formats and supports
+<<features-shaderStorageImageWriteWithoutFormat,
+pname:shaderStorageImageWriteWithoutFormat>> must: support
+ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT for that same
+format if Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension
+is supported.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+=== Depth Comparison Format Support
+
+If Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension is
+supported, a depth/stencil format with a depth component supporting
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: support
+ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT.
+
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+
+
+[[format-feature-dependent-usage-flags]]
+=== Format Feature Dependent Usage Flags
+
+Certain resource usage flags depend on support for the corresponding format
+feature flag for the format in question.
+The following tables list the elink:VkBufferUsageFlagBits and
+elink:VkImageUsageFlagBits that have such dependencies, and the format
+feature flags they depend on.
+Additional restrictions, including, but not limited to, further required
+format feature flags specific to the particular use of the resource may:
+apply, as described in the respective sections of this specification.
+
+.Format feature dependent buffer usage flags
+[cols="50%,50%",options="header"]
+|====
+|Buffer usage flag | Required format feature flag
+|ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+|ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+|ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
+|====
+
+.Format feature dependent image usage flags
+[cols="50%,50%",options="header"]
+|====
+|Image usage flag | Required format feature flag
+|ename:VK_IMAGE_USAGE_SAMPLED_BIT | ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+|ename:VK_IMAGE_USAGE_STORAGE_BIT | ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+|ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+|ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+|ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_KHR_fragment_shading_rate[]
+|ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_video_decode_queue[]
+|ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR
+|ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+|ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR
+|ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+|====
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/fragmentdensitymapops.adoc b/codegen/vulkan/vulkan-docs-next/chapters/fragmentdensitymapops.adoc
new file mode 100644
index 0000000..657fae9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/fragmentdensitymapops.adoc
@@ -0,0 +1,159 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[fragmentdensitymapops]]
+= Fragment Density Map Operations
+
+
+== Fragment Density Map Operations Overview
+
+When a fragment is generated in a render pass that has a fragment density
+map attachment, its area is determined by the properties of the local
+framebuffer region that the fragment occupies.
+The framebuffer is divided into a uniform grid of these local regions, and
+their fragment area property is derived from the density map with the
+following operations:
+
+  * <<fragmentdensitymap-fetch-density-value,Fetch density value>>
+  ** <<fragmentdensitymap-component-swizzle,Component swizzle>>
+  ** <<fragmentdensitymap-component-mapping,Component mapping>>
+  * <<fragmentdensitymap-conversion-to-fragment-area,Fragment area
+    conversion>>
+  ** <<fragmentdensitymap-fragment-area-filter,Fragment area filter>>
+  ** <<fragmentdensitymap-fragment-area-clamp,Fragment area clamp>>
+
+
+[[fragmentdensitymap-fetch-density-value]]
+== Fetch Density Value
+
+ifndef::VK_QCOM_fragment_density_map_offset[]
+Each local framebuffer region at center coordinate [eq]#(x,y)# fetches a
+texel from the fragment density map at integer coordinates:
+
+  {empty}:: latexmath:[i =
+            \left\lfloor{\frac{x}{fragmentDensityTexelSize_{width}}}\right\rfloor]
+  {empty}:: latexmath:[j =
+            \left\lfloor{\frac{y}{fragmentDensityTexelSize_{height}}}\right\rfloor]
+endif::VK_QCOM_fragment_density_map_offset[]
+
+ifdef::VK_QCOM_fragment_density_map_offset[]
+Each local framebuffer region at center coordinate [eq]#(x,y)# fetches a
+texel from the fragment density map.
+
+First, the local framebuffer region center coordinate [eq]#(x,y)# is offset
+by the value specified in
+slink:VkSubpassFragmentDensityMapOffsetEndInfoQCOM.
+If no offset is specified, then the default offset [eq]#(0,0)# is used.
+The offsetted coordinate [eq]#(x',y')# is computed as follows:
+
+[latexmath]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+x' &= \mathbin{clamp}(x + pFragmentDensityOffsets[layer]_{x}, 0, framebuffer_{width} - 1)   \\
+y' &= \mathbin{clamp}(y + pFragmentDensityOffsets[layer]_{y}, 0, framebuffer_{height} - 1)  \\
+\end{aligned}
+++++++++++++++++++++++++
+
+The offsetted coordinate [eq]#(x',y')# fetches a texel from the fragment
+density map at integer coordinates:
+
+  {empty}:: latexmath:[i =
+            \left\lfloor{\frac{x'}{fragmentDensityTexelSize_{width}}}\right\rfloor]
+  {empty}:: latexmath:[j =
+            \left\lfloor{\frac{y'}{fragmentDensityTexelSize_{height}}}\right\rfloor]
+endif::VK_QCOM_fragment_density_map_offset[]
+
+Where the size of each region in the framebuffer is:
+
+  {empty}:: latexmath:[fragmentDensityTexelSize'_{width} =
+            {2^{\lceil{\log_2(\frac{framebuffer_{width}}{fragmentDensityMap_{width}})}\rceil}}]
+  {empty}:: latexmath:[fragmentDensityTexelSize'_{height} =
+            {2^{\lceil{\log_2(\frac{framebuffer_{height}}{fragmentDensityMap_{height}})}\rceil}}]
+
+This region is subject to the limits in
+sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT and therefore the
+final region size is clamped:
+
+  {empty}:: latexmath:[fragmentDensityTexelSize_{width} =
+            \mathbin{clamp}(fragmentDensityTexelSize'_{width},minFragmentDensityTexelSize_{width},maxFragmentDensityTexelSize_{width})]
+  {empty}:: latexmath:[fragmentDensityTexelSize_{height} =
+            \mathbin{clamp}(fragmentDensityTexelSize'_{height},minFragmentDensityTexelSize_{height},maxFragmentDensityTexelSize_{height})]
+
+When multiview is enabled for the render pass and the fragment density map
+attachment view was created with pname:layerCount greater than `1`, the
+layer used for offsets and for fetching from the fragment density map is:
+
+  {empty}:: latexmath:[layer = baseArrayLayer + ViewIndex]
+
+Otherwise:
+
+  {empty}:: latexmath:[layer = baseArrayLayer]
+
+The texel fetched from the density map at [eq]#(i,j,layer)# is next
+converted to density with the following operations.
+
+
+[[fragmentdensitymap-component-swizzle]]
+=== Component Swizzle
+
+The pname:components member of slink:VkImageViewCreateInfo is applied to the
+fetched texel as defined in <<textures-component-swizzle,Image component
+swizzle>>.
+
+
+[[fragmentdensitymap-component-mapping]]
+=== Component Mapping
+
+The swizzled texel's components are mapped to a density value:
+
+  {empty}:: latexmath:[densityValue_{xy} = (C'_{r},C'_{g})]
+
+
+[[fragmentdensitymap-conversion-to-fragment-area]]
+== Fragment Area Conversion
+
+Fragment area for the framebuffer region is undefined: if the density
+fetched is not a normalized floating-point value greater than `0.0`.
+Otherwise, the fetched fragment area for that region is derived as:
+
+  {empty}:: latexmath:[fragmentArea_{wh} = \frac{1.0}{densityValue_{xy}}]
+
+
+[[fragmentdensitymap-fragment-area-filter]]
+===  Fragment Area Filter
+
+Optionally, the implementation may: fetch additional density map texels in
+an implementation defined window around [eq]#(i,j)#.
+The texels follow the standard conversion steps up to and including
+<<fragmentdensitymap-conversion-to-fragment-area,fragment area conversion>>.
+
+A single fetched fragment area for the framebuffer region is chosen by the
+implementation and must: have an area between the _min_ and _max_ areas of
+the fetched set.
+
+
+[[fragmentdensitymap-fragment-area-clamp]]
+=== Fragment Area Clamp
+
+The implementation may: clamp the fetched fragment area to one that it
+supports.
+The clamped fragment area must: have a size less than or equal to the
+original fetched value.
+Implementations may: vary the supported set of fragment areas per
+framebuffer region.
+Fragment area [eq]#(1,1)# must: always be in the supported set.
+
+[NOTE]
+.Note
+====
+For example, if the fetched fragment area is [eq]#(1,4)# but the
+implementation only supports areas of [eq]#{(1,1),(2,2)}#, it could choose
+to clamp the area to [eq]#(2,2)# since it has the same size as [eq]#(1,4)#.
+While this would produce fragments that have lower quality strictly in the
+x-axis, the overall density is maintained.
+====
+
+The clamped fragment area is assigned to the corresponding framebuffer
+region.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/fragops.adoc b/codegen/vulkan/vulkan-docs-next/chapters/fragops.adoc
new file mode 100644
index 0000000..5d53c53
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/fragops.adoc
@@ -0,0 +1,2794 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[fragops]]
+= Fragment Operations
+
+Fragments produced by rasterization go through a number of operations to
+determine whether or how values produced by fragment shading are written to
+the framebuffer.
+
+The following fragment operations adhere to <<primsrast-order,rasterization
+order>>, and are typically performed in this order:
+
+ifdef::VK_EXT_discard_rectangles[]
+  . <<fragops-discard-rectangles,Discard rectangles test>>
+endif::VK_EXT_discard_rectangles[]
+  . <<fragops-scissor,Scissor test>>
+ifdef::VK_NV_scissor_exclusive[]
+  . <<fragops-exclusive-scissor,Exclusive scissor test>>
+endif::VK_NV_scissor_exclusive[]
+  . <<fragops-samplemask,Sample mask test>>
+  . Certain <<fragops-shader,Fragment shading>> operations:
+  ** <<fragops-shader-samplemask, Sample Mask Accesses>>
+ifdef::VK_EXT_shader_tile_image[]
+  ** <<fragops-shader-tileimage-reads, Tile Image Reads>>
+endif::VK_EXT_shader_tile_image[]
+  ** <<fragops-shader-depthreplacement, Depth Replacement>>
+ifdef::VK_EXT_shader_stencil_export[]
+  ** <<fragops-shader-stencilrefreplacement, Stencil Reference Replacement>>
+endif::VK_EXT_shader_stencil_export[]
+ifdef::VK_EXT_fragment_shader_interlock[]
+  ** <<fragops-shader-interlock, Interlocked Operations>>
+endif::VK_EXT_fragment_shader_interlock[]
+  . <<fragops-covg, Multisample coverage>>
+  . <<fragops-dbt, Depth bounds test>>
+  . <<fragops-stencil, Stencil test>>
+  . <<fragops-depth, Depth test>>
+ifdef::VK_NV_representative_fragment_test[]
+  . <<fragops-rep-frag-test, Representative fragment test>>
+endif::VK_NV_representative_fragment_test[]
+  . <<fragops-samplecount, Sample counting>>
+ifdef::VK_NV_fragment_coverage_to_color[]
+  . <<fragops-coverage-to-color, Coverage to color>>
+endif::VK_NV_fragment_coverage_to_color[]
+  . <<fragops-coverage-reduction, Coverage reduction>>
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  . <<fragops-coverage-modulation, Coverage modulation>>
+endif::VK_NV_framebuffer_mixed_samples[]
+
+The <<primsrast-multisampling-coverage-mask, coverage mask>> generated by
+rasterization describes the initial coverage of each sample covered by the
+fragment.
+Fragment operations will update the coverage mask to add or subtract
+coverage where appropriate.
+If a fragment operation results in all bits of the coverage mask being `0`,
+the fragment is discarded, and no further operations are performed.
+Fragments can also be programmatically discarded in a fragment shader by
+executing one of
+
+ifdef::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+  * code:OpTerminateInvocation
+endif::VK_VERSION_1_3,VK_KHR_shader_terminate_invocation[]
+ifdef::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+  * code:OpDemoteToHelperInvocationEXT
+endif::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+  * code:OpKill.
+
+When one of the fragment operations in this chapter is described as
+"`replacing`" a fragment shader output, that output is replaced
+unconditionally, even if no fragment shader previously wrote to that output.
+
+ifdef::VK_EXT_post_depth_coverage[]
+If there is a <<fragops-shader, fragment shader>> and it declares the
+code:PostDepthCoverage execution mode, the <<fragops-samplemask, sample mask
+test>> is instead performed after the <<fragops-depth, depth test>>.
+endif::VK_EXT_post_depth_coverage[]
+
+ifdef::VK_KHR_maintenance5[]
+If
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:earlyFragmentMultisampleCoverageAfterSampleCounting
+is set to ename:VK_TRUE and there is a <<fragops-shader, fragment shader>>
+which declares the code:EarlyFragmentTests execution mode, <<fragops-shader,
+fragment shading>> and <<fragops-covg, multisample coverage>> operations
+must: be performed after <<fragops-samplecount, sample counting>>.
+
+Otherwise, if
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:earlyFragmentMultisampleCoverageAfterSampleCounting
+is set to ename:VK_FALSE and there is a <<fragops-shader, fragment shader>>
+which declares the code:EarlyFragmentTests execution mode, <<fragops-shader,
+fragment shading>> and <<fragops-covg, multisample coverage>> operations
+should: instead be performed after <<fragops-samplecount, sample counting>>,
+but may: be performed before <<fragops-samplecount, sample counting>>.
+
+If
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:earlyFragmentSampleMaskTestBeforeSampleCounting
+is set to ename:VK_TRUE and there is a <<fragops-shader, fragment shader>>
+which declares the code:EarlyFragmentTests execution mode
+<<fragops-samplemask, sample mask test>> operations must: follow the order
+of fragment operations from above.
+
+Otherwise, if
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:earlyFragmentSampleMaskTestBeforeSampleCounting
+is set to ename:VK_FALSE and there is a <<fragops-shader, fragment shader>>
+which declares the code:EarlyFragmentTests execution mode,
+<<fragops-samplemask, sample mask test>> operations should: follow the order
+of fragment operations from above but may: instead be performed after
+<<fragops-samplecount, sample counting>>.
+endif::VK_KHR_maintenance5[]
+ifndef::VK_KHR_maintenance5[]
+If there is a <<fragops-shader, fragment shader>> and it declares the
+code:EarlyFragmentTests execution mode, <<fragops-shader,fragment shading>>
+and <<fragops-covg, multisample coverage>> operations should: instead be
+performed after <<fragops-samplecount, sample counting>>, and
+<<fragops-samplemask,sample mask test>> may: instead be performed after
+<<fragops-samplecount, sample counting>>.
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_AMD_shader_early_and_late_fragment_tests[]
+If there is a <<fragops-shader, fragment shader>> which declares the
+code:EarlyAndLateFragmentTestsAMD execution mode, and it does not declare
+the code:DepthReplacing
+ifdef::VK_EXT_shader_stencil_export[]
+or code:StencilRefReplacingEXT
+endif::VK_EXT_shader_stencil_export[]
+execution mode, <<fragops-shader,fragment shading>> and <<fragops-covg,
+multisample coverage>> operations are instead be performed after
+<<fragops-samplecount, sample counting>>.
+
+ifdef::VK_EXT_shader_stencil_export[]
+For a pipeline with the following properties:
+
+  * a fragment shader is specified
+  * the fragment shader either specifies code:EarlyAndLateFragmentTestsAMD
+    or does not write to storage resources;
+  * the fragment shader specifies the code:StencilRefReplacingEXT execution
+    mode;
+  * either
+  ** the fragment shader specifies the code:StencilRefUnchangedFrontAMD
+     execution mode;
+  ** the fragment shader specifies the code:StencilRefLessFrontAMD execution
+     mode and the pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:front.compareOp of
+     ename:VK_COMPARE_OP_GREATER or ename:VK_COMPARE_OP_GREATER_OR_EQUAL; or
+  ** the fragment shader specifies the code:StencilRefGreaterFrontAMD
+     execution mode and the pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:front.compareOp of
+     ename:VK_COMPARE_OP_LESS or ename:VK_COMPARE_OP_LESS_OR_EQUAL; and
+  * either
+  ** the fragment shader specifies the code:StencilRefUnchangedBackAMD
+     execution mode;
+  ** the fragment shader specifies the code:StencilRefLessBackAMD execution
+     mode and the pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:back.compareOp of
+     ename:VK_COMPARE_OP_GREATER or ename:VK_COMPARE_OP_GREATER_OR_EQUAL; or
+  ** the fragment shader specifies the code:StencilRefGreaterBackAMD
+     execution mode and the pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:back.compareOp of
+     ename:VK_COMPARE_OP_LESS or ename:VK_COMPARE_OP_LESS_OR_EQUAL
+
+an additional <<fragops-stencil, stencil test>> may: be performed before
+<<fragops-shader, fragment shading>>, using the stencil reference value
+specified by
+slink:VkPipelineDepthStencilStateCreateInfo::pname:front.reference or
+slink:VkPipelineDepthStencilStateCreateInfo::pname:back.reference.
+endif::VK_EXT_shader_stencil_export[]
+endif::VK_AMD_shader_early_and_late_fragment_tests[]
+
+
+For a pipeline with the following properties:
+
+  * a fragment shader is specified
+  * the fragment shader
+ifdef::VK_AMD_shader_early_and_late_fragment_tests[]
+    either specifies code:EarlyAndLateFragmentTestsAMD or
+endif::VK_AMD_shader_early_and_late_fragment_tests[]
+    does not write to storage resources;
+  * the fragment shader specifies the code:DepthReplacing execution mode;
+    and
+  * either
+  ** the fragment shader specifies the code:DepthUnchanged execution mode;
+  ** the fragment shader specifies the code:DepthLess execution mode and the
+     pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp of
+     ename:VK_COMPARE_OP_GREATER or ename:VK_COMPARE_OP_GREATER_OR_EQUAL; or
+  ** the fragment shader specifies the code:DepthGreater execution mode and
+     the pipeline uses a
+     slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp of
+     ename:VK_COMPARE_OP_LESS or ename:VK_COMPARE_OP_LESS_OR_EQUAL
+
+the implementation may: perform <<fragops-dbt,depth bounds test>> before
+<<fragops-shader, fragment shading>> and perform an additional
+<<fragops-depth, depth test>> immediately after that using the interpolated
+depth value generated by rasterization.
+
+Once all fragment operations have completed, fragment shader outputs for
+covered color attachment samples pass through <<framebuffer, framebuffer
+operations>>.
+
+
+ifdef::VK_EXT_discard_rectangles[]
+[[fragops-discard-rectangles]]
+== Discard Rectangles Test
+
+The discard rectangle test compares the framebuffer coordinates
+[eq]#(x~f~,y~f~)# of each sample covered by a fragment against a set of
+_discard rectangles_.
+
+Each discard rectangle is defined by a slink:VkRect2D.
+These values are either set by the
+slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure during pipeline
+creation, or dynamically by the flink:vkCmdSetDiscardRectangleEXT command.
+
+A given sample is considered inside a discard rectangle if the [eq]#x~f~# is
+in the range [eq]#[slink:VkRect2D::pname:offset.x,
+slink:VkRect2D::pname:offset.x {plus} slink:VkRect2D::pname:extent.x)#, and
+[eq]#y~f~# is in the range [eq]#[slink:VkRect2D::pname:offset.y,
+slink:VkRect2D::pname:offset.y {plus} slink:VkRect2D::pname:extent.y)#.
+If the test is set to be inclusive, samples that are not inside any of the
+discard rectangles will have their coverage set to `0`.
+If the test is set to be exclusive, samples that are inside any of the
+discard rectangles will have their coverage set to `0`.
+
+If no discard rectangles are specified, the coverage mask is unmodified by
+this operation.
+
+[open,refpage='VkPipelineDiscardRectangleStateCreateInfoEXT',desc='Structure specifying discard rectangle',type='structs']
+--
+The sname:VkPipelineDiscardRectangleStateCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:discardRectangleMode is a elink:VkDiscardRectangleModeEXT value
+    determining whether the discard rectangle test is inclusive or
+    exclusive.
+  * pname:discardRectangleCount is the number of discard rectangles to use.
+  * pname:pDiscardRectangles is a pointer to an array of slink:VkRect2D
+    structures defining discard rectangles.
+
+If the ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state is enabled
+for a pipeline, the pname:pDiscardRectangles member is ignored.
+If the ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state is
+not enabled for the pipeline the presence of this structure in the
+slink:VkGraphicsPipelineCreateInfo chain, and a pname:discardRectangleCount
+greater than zero, implicitly enables discard rectangles in the pipeline,
+otherwise discard rectangles must: enabled or disabled by
+flink:vkCmdSetDiscardRectangleEnableEXT.
+If the ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state is
+enabled for the pipeline, the pname:discardRectangleMode member is ignored,
+and the discard rectangle mode must: be set by
+flink:vkCmdSetDiscardRectangleModeEXT.
+
+When this structure is included in the pname:pNext chain of
+slink:VkGraphicsPipelineCreateInfo, it defines parameters of the discard
+rectangle test.
+If the ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state is not
+enabled, and this structure is not included in the pname:pNext chain, it is
+equivalent to specifying this structure with a pname:discardRectangleCount
+of `0`.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582]]
+    pname:discardRectangleCount must: be less than or equal to
+    sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles
+****
+
+include::{generated}/validity/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkPipelineDiscardRectangleStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDiscardRectangleStateCreateFlagsEXT.adoc[]
+
+tname:VkPipelineDiscardRectangleStateCreateFlagsEXT is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkDiscardRectangleModeEXT',desc='Specify the discard rectangle mode',type='enums']
+--
+ename:VkDiscardRectangleModeEXT values are:
+
+include::{generated}/api/enums/VkDiscardRectangleModeEXT.adoc[]
+
+  * ename:VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT specifies that the discard
+    rectangle test is inclusive.
+  * ename:VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT specifies that the discard
+    rectangle test is exclusive.
+--
+
+[open,refpage='vkCmdSetDiscardRectangleEXT',desc='Set discard rectangles dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the discard rectangles,
+call:
+
+include::{generated}/api/protos/vkCmdSetDiscardRectangleEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstDiscardRectangle is the index of the first discard rectangle
+    whose state is updated by the command.
+  * pname:discardRectangleCount is the number of discard rectangles whose
+    state are updated by the command.
+  * pname:pDiscardRectangles is a pointer to an array of slink:VkRect2D
+    structures specifying discard rectangles.
+
+The discard rectangle taken from element [eq]#i# of pname:pDiscardRectangles
+replace the current state for the discard rectangle at index
+[eq]#pname:firstDiscardRectangle {plus} i#, for [eq]#i# in [eq]#[0,
+pname:discardRectangleCount)#.
+
+This command sets the discard rectangles for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:pDiscardRectangles
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585]]
+    The sum of pname:firstDiscardRectangle and pname:discardRectangleCount
+    must: be less than or equal to
+    slink:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles
+  * [[VUID-vkCmdSetDiscardRectangleEXT-x-00587]]
+    The pname:x and pname:y member of pname:offset in each slink:VkRect2D
+    element of pname:pDiscardRectangles must: be greater than or equal to
+    `0`
+  * [[VUID-vkCmdSetDiscardRectangleEXT-offset-00588]]
+    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# in each
+    slink:VkRect2D element of pname:pDiscardRectangles must: not cause a
+    signed integer addition overflow
+  * [[VUID-vkCmdSetDiscardRectangleEXT-offset-00589]]
+    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# in each
+    slink:VkRect2D element of pname:pDiscardRectangles must: not cause a
+    signed integer addition overflow
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetDiscardRectangleEXT-viewportScissor2D-04788]]
+    If this command is recorded in a secondary command buffer with
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled, then this function must: not be called
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDiscardRectangleEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetDiscardRectangleEnableEXT',desc='Enable discard rectangles dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> whether discard rectangles
+are enabled, call:
+
+include::{generated}/api/protos/vkCmdSetDiscardRectangleEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:discardRectangleEnable specifies whether discard rectangles are
+    enabled or not.
+
+This command sets the discard rectangle enable for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is implied by the
+slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:discardRectangleCount
+value used to create the currently active pipeline, where a non-zero
+pname:discardRectangleCount implicitly enables discard rectangles, otherwise
+they are disabled.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDiscardRectangleEnableEXT-specVersion-07851]]
+    The `apiext:VK_EXT_discard_rectangles` extension must: be enabled, and
+    the implementation must: support at least pname:specVersion `2` of this
+    extension
+****
+
+include::{generated}/validity/protos/vkCmdSetDiscardRectangleEnableEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetDiscardRectangleModeEXT',desc='Sets the discard rectangle mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the discard rectangle mode,
+call:
+
+include::{generated}/api/protos/vkCmdSetDiscardRectangleModeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:discardRectangleMode specifies the discard rectangle mode for all
+    discard rectangles, either inclusive or exclusive.
+
+This command sets the discard rectangle mode for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:discardRectangleMode
+value used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDiscardRectangleModeEXT-specVersion-07852]]
+    The `apiext:VK_EXT_discard_rectangles` extension must: be enabled, and
+    the implementation must: support at least pname:specVersion `2` of this
+    extension
+****
+
+include::{generated}/validity/protos/vkCmdSetDiscardRectangleModeEXT.adoc[]
+--
+
+endif::VK_EXT_discard_rectangles[]
+
+
+[[fragops-scissor]]
+== Scissor Test
+
+The scissor test compares the framebuffer coordinates [eq]#(x~f~,y~f~)# of
+each sample covered by a fragment against a _scissor rectangle_ at the index
+equal to the fragment's <<interfaces-builtin-variables-viewportindex,
+code:ViewportIndex>>.
+
+Each scissor rectangle is defined by a slink:VkRect2D.
+These values are either set by the slink:VkPipelineViewportStateCreateInfo
+structure during pipeline creation, or dynamically by the
+flink:vkCmdSetScissor command.
+
+A given sample is considered inside a scissor rectangle if [eq]#x~f~# is in
+the range [eq]#[slink:VkRect2D::pname:offset.x,
+slink:VkRect2D::pname:offset.x {plus} slink:VkRect2D::pname:extent.x)#, and
+[eq]#y~f~# is in the range [eq]#[slink:VkRect2D::pname:offset.y,
+slink:VkRect2D::pname:offset.y {plus} slink:VkRect2D::pname:extent.y)#.
+Samples with coordinates outside the scissor rectangle at the corresponding
+code:ViewportIndex will have their coverage set to `0`.
+
+ifdef::VK_QCOM_render_pass_transform[]
+If a render pass transform is enabled, the (pname:offset.x and
+pname:offset.y) and (pname:extent.width and pname:extent.height) values are
+transformed as described in <<vertexpostproc-renderpass-transform, render
+pass transform>> before participating in the scissor test.
+endif::VK_QCOM_render_pass_transform[]
+
+[open,refpage='vkCmdSetScissor',desc='Set scissor rectangles dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the scissor rectangles,
+call:
+
+include::{generated}/api/protos/vkCmdSetScissor.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstScissor is the index of the first scissor whose state is
+    updated by the command.
+  * pname:scissorCount is the number of scissors whose rectangles are
+    updated by the command.
+  * pname:pScissors is a pointer to an array of slink:VkRect2D structures
+    defining scissor rectangles.
+
+The scissor rectangles taken from element [eq]#i# of pname:pScissors replace
+the current state for the scissor index [eq]#pname:firstScissor {plus} i#,
+for [eq]#i# in [eq]#[0, pname:scissorCount)#.
+
+This command sets the scissor rectangles for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_SCISSOR
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineViewportStateCreateInfo::pname:pScissors values used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetScissor-firstScissor-00592]]
+    The sum of pname:firstScissor and pname:scissorCount must: be between
+    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetScissor-firstScissor-00593]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:firstScissor must: be `0`
+  * [[VUID-vkCmdSetScissor-scissorCount-00594]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:scissorCount must: be `1`
+  * [[VUID-vkCmdSetScissor-x-00595]]
+    The pname:x and pname:y members of pname:offset member of any element of
+    pname:pScissors must: be greater than or equal to `0`
+  * [[VUID-vkCmdSetScissor-offset-00596]]
+    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
+    cause a signed integer addition overflow for any element of
+    pname:pScissors
+  * [[VUID-vkCmdSetScissor-offset-00597]]
+    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
+    not cause a signed integer addition overflow for any element of
+    pname:pScissors
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetScissor-viewportScissor2D-04789]]
+    If this command is recorded in a secondary command buffer with
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled, then this function must: not be called
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetScissor.adoc[]
+--
+
+
+ifdef::VK_NV_scissor_exclusive[]
+[[fragops-exclusive-scissor]]
+== Exclusive Scissor Test
+
+The exclusive scissor test compares the framebuffer coordinates
+[eq]#(x~f~,y~f~)# of each sample covered by a fragment against an _exclusive
+scissor rectangle_ at the index equal to the fragment's
+<<interfaces-builtin-variables-viewportindex, code:ViewportIndex>>.
+
+Each exclusive scissor rectangle is defined by a slink:VkRect2D.
+These values are either set by the
+slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure during
+pipeline creation, or dynamically by the flink:vkCmdSetExclusiveScissorNV
+command.
+
+A given sample is considered inside an exclusive scissor rectangle if
+[eq]#x~f~# is in the range [eq]#[slink:VkRect2D::pname:offset.x,
+slink:VkRect2D::pname:offset.x {plus} slink:VkRect2D::pname:extent.x)#, and
+[eq]#y~f~# is in the range [eq]#[slink:VkRect2D::pname:offset.y,
+slink:VkRect2D::pname:offset.y {plus} slink:VkRect2D::pname:extent.y)#.
+Samples with coordinates inside the exclusive scissor rectangle at the
+corresponding code:ViewportIndex will have their coverage set to `0`.
+
+If no exclusive scissor rectangles are specified, the coverage mask is
+unmodified by this operation.
+
+[open,refpage='VkPipelineViewportExclusiveScissorStateCreateInfoNV',desc='Structure specifying parameters controlling exclusive scissor testing',type='structs']
+--
+The sname:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportExclusiveScissorStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:exclusiveScissorCount is the number of exclusive scissor
+    rectangles.
+  * pname:pExclusiveScissors is a pointer to an array of slink:VkRect2D
+    structures defining exclusive scissor rectangles.
+
+If the ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state is enabled
+for a pipeline, the pname:pExclusiveScissors member is ignored.
+
+When this structure is included in the pname:pNext chain of
+slink:VkGraphicsPipelineCreateInfo, it defines parameters of the exclusive
+scissor test.
+If this structure is not included in the pname:pNext chain, it is equivalent
+to specifying this structure with a pname:exclusiveScissorCount of `0`.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02027]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:exclusiveScissorCount must: be `0` or `1`
+  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02028]]
+    pname:exclusiveScissorCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewports
+  * [[VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02029]]
+    pname:exclusiveScissorCount must: be `0` or greater than or equal to the
+    pname:viewportCount member of slink:VkPipelineViewportStateCreateInfo
+
+****
+include::{generated}/validity/structs/VkPipelineViewportExclusiveScissorStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='vkCmdSetExclusiveScissorNV',desc='Set exclusive scissor rectangles dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the exclusive scissor
+rectangles, call:
+
+include::{generated}/api/protos/vkCmdSetExclusiveScissorNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstExclusiveScissor is the index of the first exclusive scissor
+    rectangle whose state is updated by the command.
+  * pname:exclusiveScissorCount is the number of exclusive scissor
+    rectangles updated by the command.
+  * pname:pExclusiveScissors is a pointer to an array of slink:VkRect2D
+    structures defining exclusive scissor rectangles.
+
+The scissor rectangles taken from element [eq]#i# of
+pname:pExclusiveScissors replace the current state for the scissor index
+[eq]#pname:firstExclusiveScissor {plus} i#, for [eq]#i# in [eq]#[0,
+pname:exclusiveScissorCount)#.
+
+This command sets the exclusive scissor rectangles for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:pExclusiveScissors
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetExclusiveScissorNV-None-02031]]
+    The <<features-exclusiveScissor, pname:exclusiveScissor>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02034]]
+    The sum of pname:firstExclusiveScissor and pname:exclusiveScissorCount
+    must: be between `1` and
+    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02035]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:firstExclusiveScissor must: be `0`
+  * [[VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:exclusiveScissorCount must: be `1`
+  * [[VUID-vkCmdSetExclusiveScissorNV-x-02037]]
+    The pname:x and pname:y members of pname:offset in each member of
+    pname:pExclusiveScissors must: be greater than or equal to `0`
+  * [[VUID-vkCmdSetExclusiveScissorNV-offset-02038]]
+    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# for each
+    member of pname:pExclusiveScissors must: not cause a signed integer
+    addition overflow
+  * [[VUID-vkCmdSetExclusiveScissorNV-offset-02039]]
+    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# for each
+    member of pname:pExclusiveScissors must: not cause a signed integer
+    addition overflow
+****
+
+include::{generated}/validity/protos/vkCmdSetExclusiveScissorNV.adoc[]
+--
+
+[open,refpage='vkCmdSetExclusiveScissorEnableNV',desc='Dynamically enable each exclusive scissor for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> whether an exclusive scissor
+is enabled or not, call:
+
+include::{generated}/api/protos/vkCmdSetExclusiveScissorEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstExclusiveScissor is the index of the first exclusive scissor
+    rectangle whose state is updated by the command.
+  * pname:exclusiveScissorCount is the number of exclusive scissor
+    rectangles updated by the command.
+  * pname:pExclusiveScissorEnables is a pointer to an array of
+    basetype:VkBool32 values defining whether the exclusive scissor is
+    enabled.
+
+The exclusive scissor enables taken from element [eq]#i# of
+pname:pExclusiveScissorEnables replace the current state for the scissor
+index [eq]#pname:firstExclusiveScissor {plus} i#, for [eq]#i# in [eq]#[0,
+pname:exclusiveScissorCount)#.
+
+This command sets the exclusive scissor enable for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is implied by the
+slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:exclusiveScissorCount
+value used to create the currently active pipeline, where all
+pname:exclusiveScissorCount exclusive scissors are implicitly enabled and
+the remainder up to sname:VkPhysicalDeviceLimits::pname:maxViewports are
+implicitly disabled.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetExclusiveScissorEnableNV-exclusiveScissor-07853]]
+    The <<features-exclusiveScissor, pname:exclusiveScissor>> feature must:
+    be enabled, and the implementation must: support at least
+    pname:specVersion `2` of the `apiext:VK_NV_scissor_exclusive` extension
+****
+
+include::{generated}/validity/protos/vkCmdSetExclusiveScissorEnableNV.adoc[]
+--
+endif::VK_NV_scissor_exclusive[]
+
+
+[[fragops-samplemask]]
+== Sample Mask Test
+
+The sample mask test compares the <<primsrast-multisampling-coverage-mask,
+coverage mask>> for a fragment with the _sample mask_ defined by
+slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetSampleMaskEXT',desc='Specify the sample mask dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the sample mask, call:
+
+include::{generated}/api/protos/vkCmdSetSampleMaskEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:samples specifies the number of sample bits in the
+    pname:pSampleMask.
+  * pname:pSampleMask is a pointer to an array of basetype:VkSampleMask
+    values, where the array size is based on the pname:samples parameter.
+
+This command sets the sample mask for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetSampleMaskEXT
+:requiredfeature: extendedDynamicState3SampleMask
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetSampleMaskEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+Each bit of the coverage mask is associated with a sample index as described
+in the <<primsrast-multisampling-coverage-mask, rasterization chapter>>.
+If the bit in slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask
+which is associated with that same sample index is set to `0`, the coverage
+mask bit is set to `0`.
+
+
+[[fragops-shader]]
+== Fragment Shading
+
+<<shaders-fragment, Fragment shaders>> are invoked for each fragment, or as
+<<shaders-helper-invocations, helper invocations>>.
+
+Most operations in the fragment shader are not performed in
+<<primsrast-order, rasterization order>>, with exceptions called out in the
+following sections.
+
+For fragment shaders invoked by fragments, the following rules apply:
+
+  * A fragment shader must: not be executed if a <<fragops, fragment
+    operation>> that executes before fragment shading discards the fragment.
+  * A fragment shader may: not be executed if:
+  ** An implementation determines that another fragment shader, invoked by a
+     subsequent primitive in <<drawing-primitive-order, primitive order>>,
+     overwrites all results computed by the shader (including writes to
+     storage resources).
+  ** Any other <<fragops, fragment operation>> discards the fragment, and
+     the shader does not write to any storage resources.
+  * Otherwise, at least one fragment shader must: be executed.
+  ** If <<primsrast-sampleshading,sample shading>> is enabled and multiple
+     invocations per fragment are required:, additional invocations must: be
+     executed as specified.
+ifdef::VK_NV_shading_rate_image[]
+  ** If a <<primsrast-shading-rate-image,shading rate image>> is used and
+     multiple invocations per fragment are required:, additional invocations
+     must: be executed as specified.
+endif::VK_NV_shading_rate_image[]
+  ** Each covered sample must: be included in at least one fragment shader
+     invocation.
+
+If no fragment shader is included in the pipeline, no fragment shader is
+executed, and undefined: values may: be written to all color attachment
+outputs during this fragment operation.
+
+[NOTE]
+.Note
+====
+Multiple fragment shader invocations may be executed for the same fragment
+for any number of implementation-dependent reasons.
+When there is more than one fragment shader invocation per fragment, the
+association of samples to invocations is implementation-dependent.
+Stores and atomics performed by these additional invocations have the normal
+effect.
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+For example, if the subpass includes multiple views in its view mask, a
+fragment shader may be invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_EXT_fragment_density_map[]
+Similarly, if the render pass has a fragment density map attachment, more
+than one fragment shader invocation may be invoked for each covered sample.
+Such additional invocations are only produced if
+sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT::pname:fragmentDensityInvocations
+is ename:VK_TRUE.
+Implementations may generate these additional fragment shader invocations in
+order to make transitions between fragment areas with different fragment
+densities more smooth.
+endif::VK_EXT_fragment_density_map[]
+====
+
+
+[[fragops-shader-samplemask]]
+=== Sample Mask
+
+Reading from the <<interfaces-builtin-variables-samplemask,
+code:SampleMask>> built-in in the code:Input storage class will return the
+coverage mask for the current fragment as calculated by fragment operations
+that executed prior to fragment shading.
+
+If <<primsrast-sampleshading, sample shading>> is enabled, fragment shaders
+will only see values of `1` for samples being shaded - other bits will be
+`0`.
+
+Each bit of the coverage mask is associated with a sample index as described
+in the <<primsrast-multisampling-coverage-mask, rasterization chapter>>.
+If the bit in code:SampleMask which is associated with that same sample
+index is set to `0`, that coverage mask bit is set to `0`.
+
+Values written to the <<interfaces-builtin-variables-samplemask,
+code:SampleMask>> built-in in the code:Output storage class will be used by
+the <<fragops-covg, multisample coverage>> operation, with the same encoding
+as the input built-in.
+
+ifdef::VK_EXT_shader_tile_image[]
+[[fragops-shader-tileimage-reads]]
+=== Fragment Shader Tile Image Reads
+If the `apiext:VK_EXT_shader_tile_image` extension is enabled,
+implementations divide the framebuffer into a grid of tiles.
+A <<glossary-tile-image, tile image>> is a view of a framebuffer attachment
+tile for fragments with locations within the tile.
+
+Within a render pass instance initiated by flink:vkCmdBeginRenderingKHR,
+fragment shader invocations can: read the framebuffer color, depth, and
+stencil values at the fragment location via tile images.
+
+[NOTE]
+.Note
+====
+Even though fragment shader invocation can only read from the corresponding
+fragment location, the abstraction of a tile image is introduced for the
+following reasons:
+
+  * Tile dimensions will be exposed in a future extension
+  * Future functionality such as executing compute dispatches within render
+    passes via tile shaders can leverage tile images.
+====
+
+Enabling <<features-shaderTileImageColorReadAccess,
+shaderTileImageColorReadAccess>>, <<features-shaderTileImageDepthReadAccess,
+shaderTileImageDepthReadAccess>>,
+<<features-shaderTileImageStencilReadAccess,
+shaderTileImageStencilReadAccess>> enables fragment shader invocations to
+read from color, depth, and stencil, respectively.
+
+Color values are read from tile image variables with
+code:OpColorAttachmentReadEXT.
+Tile image variables are linked to specific color attachments using
+code:Location decoration.
+See <<interfaces-fragmenttileimage, Fragment Tile Image Interface>> for more
+details.
+
+Depth values are read with code:OpDepthAttachmentReadEXT.
+
+Stencil values are read with code:OpStencilAttachmentReadEXT.
+
+The sample to read is specified by a
+<<primsrast-multisampling-coverage-mask, sample index>> value specified as
+the code:Sample operand to code:OpColorAttachmentReadEXT,
+code:OpDepthAttachmentReadEXT, or code:OpStencilAttachmentReadEXT.
+
+If <<primsrast-sampleshading, sample shading>> is disabled, a fragment
+invocation can: read from all sample locations associated with the fragment
+regardless of the fragment's coverage.
+This functionality is supported for
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples > 1
+when
+slink:VkPhysicalDeviceShaderTileImagePropertiesEXT::pname:shaderTileImageReadSampleFromPixelRateInvocation
+is ename:VK_TRUE.
+
+If <<primsrast-sampleshading, sample shading>> is enabled, and
+pname:minSampleShading is 1.0, a fragment invocation must: only read from
+the <<primsrast-multisampling-coverageindex, coverage index>> sample.
+Tile image access must: not be used if the value of pname:minSampleShading
+is not 1.0.
+
+If the <<fragops-shader, fragment shader>> declares the
+code:EarlyFragmentTests execution mode, depth reads are allowed only if
+depth writes are disabled and stencil reads are allowed only if stencil
+writes are disabled.
+
+If
+slink:VkPhysicalDeviceShaderTileImagePropertiesEXT::pname:shaderTileImageReadFromHelperInvocation
+is ename:VK_FALSE, values read from helper invocations are undefined:
+otherwise the values read are subject to the coherency guarantees described
+below.
+
+code:OpDepthAttachmentReadEXT returns an undefined: value if no depth
+attachment is present.
+code:OpStencilAttachmentReadEXT returns an undefined: value if no stencil
+attachment is present.
+
+Tile image reads from color, depth and stencil attachments are said to be
+coherent when the accesses happen in raster order and without
+<<memory-model-access-data-race, data race>> with respect to accesses to the
+attachments from framebuffer-space pipeline stages.
+The samples which qualify for coherent access and the enabling conditions
+are described below.
+
+  * Let [eq]#Rc# be the set of components being read from an attachment
+    [eq]#A# in a draw call
+  * Let [eq]#Wc# be the set of components being written to [eq]#A# by the
+    draw call
+
+The samples which qualify for coherent tile image reads from an attachment
+[eq]#A# are:
+
+  * All samples in a pixel when [eq]#Rc# is disjoint with [eq]#Wc#.
+  * The samples with coverage in a fragment when [eq]#Rc# is not disjoint
+    with [eq]#Wc#.
+    The samples with coverage are determined by the coverage mask for the
+    fragment as calculated by fragment operations that executed prior to
+    fragment shading, including early fragment tests if enabled for the draw
+    call.
+
+A fragment shader can: declare code:NonCoherentColorAttachmentReadEXT,
+code:NonCoherentDepthAttachmentReadEXT, or
+code:NonCoherentStencilAttachmentReadEXT execution modes to enable
+non-coherent tile image reads which requires
+<<synchronization-pipeline-barriers-explicit-renderpass-tileimage, explicit
+tile image synchronization>> for the writes to an attachment to be made
+visible via tile image reads.
+
+When
+slink:VkPhysicalDeviceShaderTileImagePropertiesEXT::pname:shaderTileImageCoherentReadAccelerated
+is ename:VK_TRUE, the implementation prefers that coherent tile image reads
+are used, otherwise the implementation prefers that non-coherent tile image
+reads are used.
+
+[NOTE]
+.Note
+====
+In practice, the most common tile image reads usage patterns fall under one
+of the following:
+
+  * Programmable blending - each fragment reads from a single sample
+    (SampleID) at its location.
+    Per-sample shading is typically enabled when multisampled rendertargets
+    are used.
+  * G-buffer generation and shading in one render pass - in the shading
+    phase a fragment reads from a single sample at its location.
+  * Programmable resolve - a fragment reads from all samples at its location
+    (per-sample shading is disabled).
+    This requires the use of a "full-screen triangle" instead of a rectangle
+    composed of two triangles in order to avoid data races along the shared
+    edge of the triangles.
+  * 1:1 texturing with LOD - in use cases such a deferred screen space
+    decals a fragment reads a single sample (SampleID) from depth buffer,
+    but requires being able to read from helper threads to derive the
+    texture LOD.
+    This use case is supported as long as the attachment components being
+    read are not overwritten by color, depth, or stencil attachment writes.
+
+All of the above use cases are supported by coherent tile image reads, but
+only the latter three are supported when non-coherent reads are used as
+there is no mechanism to synchronize non-coherent reads with writes within a
+draw call.
+====
+
+endif::VK_EXT_shader_tile_image[]
+
+[[fragops-shader-depthreplacement]]
+=== Depth Replacement
+
+Writing to the <<interfaces-builtin-variables-fragdepth,code:FragDepth>>
+built-in will replace the fragment's calculated depth values for each sample
+in the input code:SampleMask.
+<<fragops-depth, Depth testing>> performed after the fragment shader for
+this fragment will use this new value as [eq]#z~f~#.
+
+
+ifdef::VK_EXT_shader_stencil_export[]
+[[fragops-shader-stencilrefreplacement]]
+=== Stencil Reference Replacement
+
+Writing to the
+<<interfaces-builtin-variables-fragdepth,code:FragStencilRefEXT>> built-in
+will replace the fragment's stencil reference value for each sample in the
+input code:SampleMask.
+<<fragops-stencil, Stencil testing>> performed after the fragment shader for
+this fragment will use this new value as [eq]#s~r~#.
+endif::VK_EXT_shader_stencil_export[]
+
+
+ifdef::VK_EXT_fragment_shader_interlock[]
+[[fragops-shader-interlock]]
+=== Interlocked Operations
+
+code:OpBeginInvocationInterlockEXT and code:OpEndInvocationInterlockEXT
+define a section of a fragment shader which imposes additional ordering
+constraints on operations performed within them.
+These operations are defined as _interlocked operations_.
+How interlocked operations are ordered against other fragment shader
+invocations depends on the specified execution modes.
+
+ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+If the code:ShadingRateInterlockOrderedEXT execution mode is specified, any
+interlocked operations in a fragment shader must: happen before interlocked
+operations in fragment shader invocations that execute later in
+<<primsrast-order, rasterization order>> and cover at least one sample in
+the same fragment area, and must: happen after interlocked operations in a
+fragment shader that executes earlier in <<primsrast-order, rasterization
+order>> and cover at least one sample in the same fragment area.
+
+If the code:ShadingRateInterlockUnorderedEXT execution mode is specified,
+any interlocked operations in a fragment shader must: happen before or after
+interlocked operations in fragment shader invocations that execute earlier
+or later in <<primsrast-order, rasterization order>> and cover at least one
+sample in the same fragment area.
+endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+
+If the code:PixelInterlockOrderedEXT execution mode is specified, any
+interlocked operations in a fragment shader must: happen before interlocked
+operations in fragment shader invocations that execute later in
+<<primsrast-order, rasterization order>> and cover at least one sample in
+the same pixel, and must: happen after interlocked operations in a fragment
+shader that executes earlier in <<primsrast-order, rasterization order>> and
+cover at least one sample in the same pixel.
+
+If the code:PixelInterlockUnorderedEXT execution mode is specified, any
+interlocked operations in a fragment shader must: happen before or after
+interlocked operations in fragment shader invocations that execute earlier
+or later in <<primsrast-order, rasterization order>> and cover at least one
+sample in the same pixel.
+
+If the code:SampleInterlockOrderedEXT execution mode is specified, any
+interlocked operations in a fragment shader must: happen before interlocked
+operations in fragment shader invocations that execute later in
+<<primsrast-order, rasterization order>> and cover at least one of the same
+samples, and must: happen after interlocked operations in a fragment shader
+that executes earlier in <<primsrast-order, rasterization order>> and cover
+at least one of the same samples.
+
+If the code:SampleInterlockUnorderedEXT execution mode is specified, any
+interlocked operations in a fragment shader must: happen before or after
+interlocked operations in fragment shader invocations that execute earlier
+or later in <<primsrast-order, rasterization order>> and cover at least one
+of the same samples.
+endif::VK_EXT_fragment_shader_interlock[]
+
+
+[[fragops-covg]]
+== Multisample Coverage
+
+If a fragment shader is active and its entry point's interface includes a
+built-in output variable decorated with code:SampleMask,
+ifdef::VK_NV_sample_mask_override_coverage[]
+but not code:OverrideCoverageNV,
+endif::VK_NV_sample_mask_override_coverage[]
+the coverage mask is code:ANDed with the bits of the code:SampleMask
+built-in to generate a new coverage mask.
+ifdef::VK_NV_sample_mask_override_coverage[]
+If the code:SampleMask built-in is also decorated with
+code:OverrideCoverageNV, the coverage mask is replaced with the mask bits
+set in the shader.
+endif::VK_NV_sample_mask_override_coverage[]
+If <<primsrast-sampleshading,sample shading>> is enabled, bits written to
+code:SampleMask corresponding to samples that are not being shaded by the
+fragment shader invocation are ignored.
+If no fragment shader is active, or if the active fragment shader does not
+include code:SampleMask in its interface, the coverage mask is not modified.
+
+Next, the fragment alpha value and coverage mask are modified based on the
+ifdef::VK_EXT_line_rasterization[]
+line coverage factor if the pname:lineRasterizationMode member of the
+slink:VkPipelineRasterizationStateCreateInfo structure is
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, and the
+endif::VK_EXT_line_rasterization[]
+pname:alphaToCoverageEnable and pname:alphaToOneEnable members of the
+slink:VkPipelineMultisampleStateCreateInfo structure.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetAlphaToCoverageEnableEXT',desc='Specify the alpha to coverage enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:alphaToCoverageEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetAlphaToCoverageEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:alphaToCoverageEnable specifies the pname:alphaToCoverageEnable
+    state.
+
+This command sets the pname:alphaToCoverageEnable state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineMultisampleStateCreateInfo::pname:alphaToCoverageEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetAlphaToCoverageEnableEXT
+:requiredfeature: extendedDynamicState3AlphaToCoverageEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetAlphaToCoverageEnableEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetAlphaToOneEnableEXT',desc='Specify the alpha to one enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the pname:alphaToOneEnable
+state, call:
+
+include::{generated}/api/protos/vkCmdSetAlphaToOneEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:alphaToOneEnable specifies the pname:alphaToOneEnable state.
+
+This command sets the pname:alphaToOneEnable state for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineMultisampleStateCreateInfo::pname:alphaToOneEnable value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetAlphaToOneEnableEXT
+:requiredfeature: extendedDynamicState3AlphaToOneEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetAlphaToOneEnableEXT-alphaToOne-07607]]
+    If the <<features-alphaToOne, pname:alphaToOne>> feature is not enabled,
+    pname:alphaToOneEnable must: be ename:VK_FALSE
+****
+
+include::{generated}/validity/protos/vkCmdSetAlphaToOneEnableEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+All alpha values in this section refer only to the alpha component of the
+fragment shader output that has a code:Location and code:Index decoration of
+zero (see the <<interfaces-fragmentoutput,Fragment Output Interface>>
+section).
+If that shader output has an integer or unsigned integer type, then these
+operations are skipped.
+
+ifdef::VK_EXT_line_rasterization[]
+If the pname:lineRasterizationMode member of the
+slink:VkPipelineRasterizationStateCreateInfo structure is
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT and the fragment
+came from a line segment, then the alpha value is replaced by multiplying it
+by the coverage factor for the fragment computed during
+<<primsrast-lines-smooth,smooth line rasterization>>.
+endif::VK_EXT_line_rasterization[]
+
+If pname:alphaToCoverageEnable is enabled, a temporary coverage mask is
+generated where each bit is determined by the fragment's alpha value, which
+is ANDed with the fragment coverage mask.
+
+No specific algorithm is specified for converting the alpha value to a
+temporary coverage mask.
+It is intended that the number of 1's in this value be proportional to the
+alpha value (clamped to [eq]#[0,1]#), with all 1's corresponding to a value
+of 1.0 and all 0's corresponding to 0.0.
+The algorithm may: be different at different framebuffer coordinates.
+
+[NOTE]
+.Note
+====
+Using different algorithms at different framebuffer coordinates may: help to
+avoid artifacts caused by regular coverage sample locations.
+====
+
+Finally, if pname:alphaToOneEnable is enabled, each alpha value is replaced
+by the maximum representable alpha value for fixed-point color attachments,
+or by 1.0 for floating-point attachments.
+Otherwise, the alpha values are not changed.
+
+
+[[fragops-ds-state]]
+== Depth and Stencil Operations
+
+Pipeline state controlling the <<fragops-dbt,depth bounds tests>>,
+<<fragops-stencil,stencil test>>, and <<fragops-depth,depth test>> is
+specified through the members of the
+sname:VkPipelineDepthStencilStateCreateInfo structure.
+
+[open,refpage='VkPipelineDepthStencilStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline depth stencil state',type='structs']
+--
+The sname:VkPipelineDepthStencilStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineDepthStencilStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifndef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:flags is reserved for future use.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:flags is a bitmask of
+    elink:VkPipelineDepthStencilStateCreateFlagBits specifying additional
+    depth/stencil state information.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:depthTestEnable controls whether <<fragops-depth,depth testing>>
+    is enabled.
+  * pname:depthWriteEnable controls whether <<fragops-depth-write,depth
+    writes>> are enabled when pname:depthTestEnable is ename:VK_TRUE.
+    Depth writes are always disabled when pname:depthTestEnable is
+    ename:VK_FALSE.
+  * pname:depthCompareOp is a elink:VkCompareOp value specifying the
+    comparison operator to use in the <<fragops-depth-comparison, Depth
+    Comparison>> step of the <<fragops-depth,depth test>>.
+  * pname:depthBoundsTestEnable controls whether <<fragops-dbt,depth bounds
+    testing>> is enabled.
+  * pname:stencilTestEnable controls whether <<fragops-stencil,stencil
+    testing>> is enabled.
+  * pname:front and pname:back are slink:VkStencilOpState values controlling
+    the corresponding parameters of the <<fragops-stencil,stencil test>>.
+  * pname:minDepthBounds is the minimum depth bound used in the
+    <<fragops-dbt, depth bounds test>>.
+  * pname:maxDepthBounds is the maximum depth bound used in the
+    <<fragops-dbt, depth bounds test>>.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598]]
+    If the <<features-depthBounds, pname:depthBounds>> feature is not
+    enabled, pname:depthBoundsTestEnable must: be ename:VK_FALSE
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:separateStencilMaskRef
+    is ename:VK_FALSE, and the value of
+    slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable is
+    ename:VK_TRUE, and the value of
+    slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode is
+    ename:VK_CULL_MODE_NONE, the value of pname:reference in each of the
+    slink:VkStencilOpState structs in pname:front and pname:back must: be
+    the same
+endif::VK_KHR_portability_subset[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * [[VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderDepthAttachmentAccess-06463]]
+    If the <<features-rasterizationOrderDepthAttachmentAccess,
+    pname:rasterizationOrderDepthAttachmentAccess>> feature is not enabled,
+    pname:flags must: not include
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+  * [[VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderStencilAttachmentAccess-06464]]
+    If the <<features-rasterizationOrderStencilAttachmentAccess,
+    pname:rasterizationOrderStencilAttachmentAccess>> feature is not
+    enabled, pname:flags must: not include
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+****
+
+include::{generated}/validity/structs/VkPipelineDepthStencilStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineDepthStencilStateCreateFlags',desc='Bitmask of VkPipelineDepthStencilStateCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDepthStencilStateCreateFlags.adoc[]
+
+ifndef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+tname:VkPipelineDepthStencilStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+tname:VkPipelineDepthStencilStateCreateFlags is a bitmask type for setting a
+mask of zero or more elink:VkPipelineDepthStencilStateCreateFlagBits.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+--
+
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+[open,refpage='VkPipelineDepthStencilStateCreateFlagBits',desc='Bitmask specifying additional depth/stencil state information.',type='enums']
+--
+Bits which can: be set in the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:flags parameter are:
+
+include::{generated}/api/enums/VkPipelineDepthStencilStateCreateFlagBits.adoc[]
+
+  * ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+    indicates that access to the depth aspects of depth/stencil and input
+    attachments will have implicit framebuffer-local memory dependencies.
+  * ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+    indicates that access to the stencil aspects of depth/stencil and input
+    attachments will have implicit framebuffer-local memory dependencies.
+
+When
+ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+is included in a pipeline, it forms a framebuffer-local memory dependency
+for each fragment generated by draw commands for that pipeline with the
+following scopes:
+
+  * The first <<synchronization-dependencies-scopes, synchronization scope>>
+    includes ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT and
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages executed
+    by all previous fragments (as defined by <<drawing-primitive-order,
+    primitive order>>) in the corresponding
+    <<synchronization-framebuffer-regions, framebuffer regions>> including
+    those generated by the same draw command.
+  * The second <<synchronization-dependencies-scopes, synchronization
+    scope>> includes ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT stage
+    executed by the generated fragment.
+  * The first <<synchronization-dependencies-access-scopes, access scope>>
+    includes all writes to the depth aspect of depth/stencil attachments.
+  * The second <<synchronization-dependencies-access-scopes, access scope>>
+    includes all reads from the depth aspect of input attachments.
+
+When
+ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+is included in a pipeline, it forms a framebuffer-local memory dependency
+for each fragment generated by draw commands for that pipeline with the
+following scopes:
+
+  * The first <<synchronization-dependencies-scopes, synchronization scope>>
+    includes ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages executed
+    by all previous fragments (as defined by <<drawing-primitive-order,
+    primitive order>>) in the corresponding
+    <<synchronization-framebuffer-regions, framebuffer regions>> including
+    those generated by the same draw command.
+  * The second <<synchronization-dependencies-scopes, synchronization
+    scope>> includes ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT and
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages executed
+    by the generated fragment.
+  * The first <<synchronization-dependencies-access-scopes, access scope>>
+    includes all writes to the stencil aspect of depth/stencil attachments.
+  * The second <<synchronization-dependencies-access-scopes, access scope>>
+    includes all reads from the stencil aspect of input attachments.
+--
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+
+
+[[fragops-dbt]]
+== Depth Bounds Test
+
+The depth bounds test compares the depth value [eq]#z~a~# in the
+depth/stencil attachment at each sample's framebuffer coordinates
+[eq]#(x~f~,y~f~)# and <<primsrast-multisampling-coverage-mask, sample
+index>> [eq]#i# against a set of _depth bounds_.
+
+The depth bounds are determined by two floating point values defining a
+minimum (pname:minDepthBounds) and maximum (pname:maxDepthBounds) depth
+value.
+These values are either set by the
+slink:VkPipelineDepthStencilStateCreateInfo structure during pipeline
+creation, or dynamically by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetDepthBoundsTestEnable and
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetDepthBounds.
+
+A given sample is considered within the depth bounds if [eq]#z~a~# is in the
+range [eq]#[pname:minDepthBounds,pname:maxDepthBounds]#.
+Samples with depth attachment values outside of the depth bounds will have
+their coverage set to `0`.
+
+If the depth bounds test is disabled, or if there is no depth attachment,
+the coverage mask is unmodified by this operation.
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetDepthBoundsTestEnable',desc='Set depth bounds test enable dynamically for a command buffer',type='protos',alias='vkCmdSetDepthBoundsTestEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
+bounds test, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetDepthBoundsTestEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetDepthBoundsTestEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthBoundsTestEnable specifies if the depth bounds test is
+    enabled.
+
+This command sets the depth bounds enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthBoundsTestEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthBoundsTestEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBoundsTestEnable.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetDepthBounds',desc='Set depth bounds range dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth bounds range,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthBounds.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:minDepthBounds is the minimum depth bound.
+  * pname:maxDepthBounds is the maximum depth bound.
+
+This command sets the depth bounds range for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:minDepthBounds and
+slink:VkPipelineDepthStencilStateCreateInfo::pname:maxDepthBounds values
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthBounds-minDepthBounds-00600]]
+ifdef::VK_EXT_depth_range_unrestricted[]
+    If the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled
+endif::VK_EXT_depth_range_unrestricted[]
+    pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
+  * [[VUID-vkCmdSetDepthBounds-maxDepthBounds-00601]]
+ifdef::VK_EXT_depth_range_unrestricted[]
+    If the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled
+endif::VK_EXT_depth_range_unrestricted[]
+    pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBounds.adoc[]
+--
+
+
+[[fragops-stencil]]
+== Stencil Test
+
+The stencil test compares the stencil attachment value [eq]#s~a~# in the
+depth/stencil attachment at each sample's framebuffer coordinates
+[eq]#(x~f~,y~f~)# and <<primsrast-multisampling-coverage-mask, sample
+index>> [eq]#i# against a _stencil reference value_.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment and the fragment
+covers multiple pixels, there is an implementation-dependent association of
+coverage samples to stencil attachment samples within the fragment.
+However, if all samples in the fragment are covered, and the stencil
+attachment value is updated as a result of this test, all stencil attachment
+samples will be updated.
+endif::VK_EXT_fragment_density_map[]
+
+If the stencil test is not enabled, as specified by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilTestEnable or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable, or if
+there is no stencil attachment, the coverage mask is unmodified by this
+operation.
+
+The stencil test is controlled by one of two sets of stencil-related state,
+the front stencil state and the back stencil state.
+Stencil tests and writes use the back stencil state when processing
+fragments generated by <<primsrast-polygons-basic,back-facing>>
+<<primsrast-polygons,polygons>>, and the front stencil state when processing
+fragments generated by <<primsrast-polygons-basic,front-facing polygons>> or
+any other primitives.
+
+The comparison operation performed is determined by the elink:VkCompareOp
+value set by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilOp::pname:compareOp, or by
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+slink:VkStencilOpState::pname:compareOp during pipeline creation.
+
+The compare mask [eq]#s~c~# and stencil reference value [eq]#s~r~# of the
+front or the back stencil state set determine arguments of the comparison
+operation.
+[eq]#s~c~# is set by the slink:VkPipelineDepthStencilStateCreateInfo
+structure during pipeline creation, or by the
+flink:vkCmdSetStencilCompareMask command.
+[eq]#s~r~# is set by slink:VkPipelineDepthStencilStateCreateInfo or by
+flink:vkCmdSetStencilReference.
+
+[eq]#s~r~# and [eq]#s~a~# are each independently combined with [eq]#s~c~#
+using a bitwise code:AND operation to create masked reference and attachment
+values [eq]#s'~r~# and [eq]#s'~a~#.
+[eq]#s'~r~# and [eq]#s'~a~# are used as the _reference_ and _test_ values,
+respectively, in the operation specified by the elink:VkCompareOp.
+
+If the comparison evaluates to false, the coverage for the sample is set to
+`0`.
+
+A new stencil value [eq]#s~g~# is generated according to a stencil operation
+defined by elink:VkStencilOp parameters set by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilOp or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+slink:VkPipelineDepthStencilStateCreateInfo.
+If the stencil test fails, pname:failOp defines the stencil operation used.
+If the stencil test passes however, the stencil op used is based on the
+<<fragops-depth, depth test>> - if it passes,
+slink:VkPipelineDepthStencilStateCreateInfo::pname:passOp is used, otherwise
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthFailOp is used.
+
+The stencil attachment value [eq]#s~a~# is then updated with the generated
+stencil value [eq]#s~g~# according to the write mask [eq]#s~w~# defined by
+pname:writeMask in slink:VkPipelineDepthStencilStateCreateInfo::pname:front
+and slink:VkPipelineDepthStencilStateCreateInfo::pname:back as:
+
+  {empty}:: [eq]#s~a~ = (s~a~ & ¬s~w~) | (s~g~ & s~w~)#
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetStencilTestEnable',desc='Set stencil test enable dynamically for a command buffer',type='protos',alias='vkCmdSetStencilTestEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the stencil
+test, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetStencilTestEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetStencilTestEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:stencilTestEnable specifies if the stencil test is enabled.
+
+This command sets the stencil test enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetStencilTestEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetStencilTestEnable.adoc[]
+--
+
+[open,refpage='vkCmdSetStencilOp',desc='Set stencil operation dynamically for a command buffer',type='protos',alias='vkCmdSetStencilOpEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the stencil operation, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetStencilOp.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetStencilOpEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
+    the set of stencil state for which to update the stencil operation.
+  * pname:failOp is a elink:VkStencilOp value specifying the action
+    performed on samples that fail the stencil test.
+  * pname:passOp is a elink:VkStencilOp value specifying the action
+    performed on samples that pass both the depth and stencil tests.
+  * pname:depthFailOp is a elink:VkStencilOp value specifying the action
+    performed on samples that pass the stencil test and fail the depth test.
+  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
+    operator used in the stencil test.
+
+This command sets the stencil operation for subsequent drawing commands when
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_STENCIL_OP
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the corresponding
+sname:VkPipelineDepthStencilStateCreateInfo::pname:failOp, pname:passOp,
+pname:depthFailOp, and pname:compareOp values used to create the currently
+active pipeline, for both front and back faces.
+
+:refpage: vkCmdSetStencilOp
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetStencilOp.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+[open,refpage='VkStencilOpState',desc='Structure specifying stencil operation state',type='structs']
+--
+The sname:VkStencilOpState structure is defined as:
+
+include::{generated}/api/structs/VkStencilOpState.adoc[]
+
+  * pname:failOp is a elink:VkStencilOp value specifying the action
+    performed on samples that fail the stencil test.
+  * pname:passOp is a elink:VkStencilOp value specifying the action
+    performed on samples that pass both the depth and stencil tests.
+  * pname:depthFailOp is a elink:VkStencilOp value specifying the action
+    performed on samples that pass the stencil test and fail the depth test.
+  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
+    operator used in the stencil test.
+  * pname:compareMask selects the bits of the unsigned integer stencil
+    values participating in the stencil test.
+  * pname:writeMask selects the bits of the unsigned integer stencil values
+    updated by the stencil test in the stencil framebuffer attachment.
+  * pname:reference is an integer stencil reference value that is used in
+    the unsigned stencil comparison.
+
+include::{generated}/validity/structs/VkStencilOpState.adoc[]
+--
+
+[open,refpage='vkCmdSetStencilCompareMask',desc='Set stencil compare mask dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the stencil compare mask,
+call:
+
+include::{generated}/api/protos/vkCmdSetStencilCompareMask.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
+    the set of stencil state for which to update the compare mask.
+  * pname:compareMask is the new value to use as the stencil compare mask.
+
+This command sets the stencil compare mask for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkStencilOpState::pname:compareMask value used to create the currently
+active pipeline, for both front and back faces.
+
+include::{generated}/validity/protos/vkCmdSetStencilCompareMask.adoc[]
+--
+
+[open,refpage='VkStencilFaceFlagBits',desc='Bitmask specifying sets of stencil state for which to update the compare mask',type='enums']
+--
+ename:VkStencilFaceFlagBits values are:
+
+include::{generated}/api/enums/VkStencilFaceFlagBits.adoc[]
+
+  * ename:VK_STENCIL_FACE_FRONT_BIT specifies that only the front set of
+    stencil state is updated.
+  * ename:VK_STENCIL_FACE_BACK_BIT specifies that only the back set of
+    stencil state is updated.
+  * ename:VK_STENCIL_FACE_FRONT_AND_BACK is the combination of
+    ename:VK_STENCIL_FACE_FRONT_BIT and ename:VK_STENCIL_FACE_BACK_BIT, and
+    specifies that both sets of stencil state are updated.
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkStencilFaceFlagBits (deprecated alias)
+  ** etext:VK_STENCIL_FRONT_AND_BACK <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+
+[open,refpage='VkStencilFaceFlags',desc='Bitmask of VkStencilFaceFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkStencilFaceFlags.adoc[]
+
+tname:VkStencilFaceFlags is a bitmask type for setting a mask of zero or
+more elink:VkStencilFaceFlagBits.
+--
+
+[open,refpage='vkCmdSetStencilWriteMask',desc='Set stencil write mask dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the stencil write mask,
+call:
+
+include::{generated}/api/protos/vkCmdSetStencilWriteMask.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
+    the set of stencil state for which to update the write mask, as
+    described above for flink:vkCmdSetStencilCompareMask.
+  * pname:writeMask is the new value to use as the stencil write mask.
+
+This command sets the stencil write mask for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the pname:writeMask value used to
+create the currently active pipeline, for both
+slink:VkPipelineDepthStencilStateCreateInfo::pname:front and
+slink:VkPipelineDepthStencilStateCreateInfo::pname:back faces.
+
+include::{generated}/validity/protos/vkCmdSetStencilWriteMask.adoc[]
+--
+
+[open,refpage='vkCmdSetStencilReference',desc='Set stencil reference value dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the stencil reference value,
+call:
+
+include::{generated}/api/protos/vkCmdSetStencilReference.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:faceMask is a bitmask of elink:VkStencilFaceFlagBits specifying
+    the set of stencil state for which to update the reference value, as
+    described above for flink:vkCmdSetStencilCompareMask.
+  * pname:reference is the new value to use as the stencil reference value.
+
+This command sets the stencil reference value for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:reference value used to
+create the currently active pipeline, for both front and back faces.
+
+include::{generated}/validity/protos/vkCmdSetStencilReference.adoc[]
+--
+
+[open,refpage='VkStencilOp',desc='Stencil comparison function',type='enums']
+--
+Possible values of the pname:failOp, pname:passOp, and pname:depthFailOp
+members of slink:VkStencilOpState, specifying what happens to the stored
+stencil value if this or certain subsequent tests fail or pass, are:
+
+include::{generated}/api/enums/VkStencilOp.adoc[]
+
+  * ename:VK_STENCIL_OP_KEEP keeps the current value.
+  * ename:VK_STENCIL_OP_ZERO sets the value to 0.
+  * ename:VK_STENCIL_OP_REPLACE sets the value to pname:reference.
+  * ename:VK_STENCIL_OP_INCREMENT_AND_CLAMP increments the current value and
+    clamps to the maximum representable unsigned value.
+  * ename:VK_STENCIL_OP_DECREMENT_AND_CLAMP decrements the current value and
+    clamps to 0.
+  * ename:VK_STENCIL_OP_INVERT bitwise-inverts the current value.
+  * ename:VK_STENCIL_OP_INCREMENT_AND_WRAP increments the current value and
+    wraps to 0 when the maximum value would have been exceeded.
+  * ename:VK_STENCIL_OP_DECREMENT_AND_WRAP decrements the current value and
+    wraps to the maximum possible value when the value would go below 0.
+
+For purposes of increment and decrement, the stencil bits are considered as
+an unsigned integer.
+--
+
+
+[[fragops-depth]]
+== Depth Test
+
+The depth test compares the depth value [eq]#z~a~# in the depth/stencil
+attachment at each sample's framebuffer coordinates [eq]#(x~f~,y~f~)# and
+<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# against the
+sample's depth value [eq]#z~f~#.
+If there is no depth attachment then the depth test is skipped.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment and the fragment
+covers multiple pixels, there is an implementation-dependent association of
+rasterization samples to depth attachment samples within the fragment.
+However, if all samples in the fragment are covered, and the depth
+attachment value is updated as a result of this test, all depth attachment
+samples will be updated.
+endif::VK_EXT_fragment_density_map[]
+
+The depth test occurs in three stages, as detailed in the following
+sections.
+
+
+=== Depth Clamping and Range Adjustment
+
+If slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
+enabled, [eq]#z~f~# is clamped to [eq]#[z~min~, z~max~]#, where [eq]#z~min~
+= min(n,f)#, [eq]#z~max~ = max(n,f)]#, and [eq]#n# and [eq]#f# are the
+pname:minDepth and pname:maxDepth depth range values of the viewport used by
+this fragment, respectively.
+
+ifdef::VK_EXT_depth_clamp_zero_one[]
+If
+slink:VkPhysicalDeviceDepthClampZeroOneFeaturesEXT::pname:depthClampZeroOne
+is enabled:
+
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * If the depth attachment has a floating-point format and
+    apiext:VK_EXT_depth_range_unrestricted is enabled then [eq]#z~f~# is
+    unchanged.
+  * Otherwise, [eq]#z~f~# is clamped to the range [eq]#[0, 1]#.
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [eq]#z~f~# is clamped to the range [eq]#[0, 1]#.
+endif::VK_EXT_depth_range_unrestricted[]
+
+Otherwise:
+endif::VK_EXT_depth_clamp_zero_one[]
+ifndef::VK_EXT_depth_clamp_zero_one[]
+Following depth clamping:
+endif::VK_EXT_depth_clamp_zero_one[]
+
+  * If [eq]#z~f~# is not in the range [eq]#[z~min~, z~max~]#, then
+    [eq]#z~f~# is undefined: following this step.
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * If the depth attachment has a fixed-point format and [eq]#z~f~# is not
+    in the range [eq]#[0, 1]#, then [eq]#z~f~# is undefined: following this
+    step.
+endif::VK_EXT_depth_range_unrestricted[]
+
+
+[[fragops-depth-comparison]]
+=== Depth Comparison
+
+If the depth test is not enabled, as specified by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetDepthTestEnable or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable, then
+this step is skipped.
+
+The comparison operation performed is determined by the elink:VkCompareOp
+value set by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetDepthCompareOp, or by
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp during
+pipeline creation.
+[eq]#z~f~# and [eq]#z~a~# are used as the _reference_ and _test_ values,
+respectively, in the operation specified by the elink:VkCompareOp.
+
+If the comparison evaluates to false, the coverage for the sample is set to
+`0`.
+
+
+[[fragops-depth-write]]
+=== Depth Attachment Writes
+
+If depth writes are enabled, as specified by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetDepthWriteEnable or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthWriteEnable, and the
+comparison evaluated to true, the depth attachment value [eq]#z~a~# is set
+to the sample's depth value [eq]#z~f~#.
+If there is no depth attachment, no value is written.
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetDepthTestEnable',desc='Set depth test enable dynamically for a command buffer',type='protos',alias='vkCmdSetDepthTestEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
+test, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetDepthTestEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetDepthTestEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthTestEnable specifies if the depth test is enabled.
+
+This command sets the depth test enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthTestEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthTestEnable.adoc[]
+--
+
+[open,refpage='vkCmdSetDepthCompareOp',desc='Set depth comparison operator dynamically for a command buffer',type='protos',alias='vkCmdSetDepthCompareOpEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth compare operator,
+call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetDepthCompareOp.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetDepthCompareOpEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthCompareOp is a elink:VkCompareOp value specifying the
+    comparison operator used for the <<fragops-depth-comparison, Depth
+    Comparison>> step of the <<fragops-depth,depth test>>.
+
+This command sets the depth comparison operator for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp value used
+to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthCompareOp
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+
+include::{generated}/validity/protos/vkCmdSetDepthCompareOp.adoc[]
+--
+
+[open,refpage='vkCmdSetDepthWriteEnable',desc='Set depth write enable dynamically for a command buffer',type='protos',alias='vkCmdSetDepthWriteEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth write enable,
+call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetDepthWriteEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetDepthWriteEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthWriteEnable specifies if depth writes are enabled.
+
+This command sets the depth write enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthWriteEnable value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthWriteEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthWriteEnable.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+
+ifdef::VK_NV_representative_fragment_test[]
+[[fragops-rep-frag-test]]
+== Representative Fragment Test
+
+The representative fragment test allows implementations to reduce the amount
+of rasterization and fragment processing work performed for each point,
+line, or triangle primitive.
+For any primitive that produces one or more fragments that pass all prior
+early fragment tests, the implementation may: choose one or more
+"`representative`" fragments for processing and discard all other fragments.
+For draw calls rendering multiple points, lines, or triangles arranged in
+lists, strips, or fans, the representative fragment test is performed
+independently for each of those primitives.
+The set of fragments discarded by the representative fragment test is
+implementation-dependent.
+In some cases, the representative fragment test may not discard any
+fragments for a given primitive.
+
+[open,refpage='VkPipelineRepresentativeFragmentTestStateCreateInfoNV',desc='Structure specifying representative fragment test',type='structs']
+--
+If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
+sname:VkPipelineRepresentativeFragmentTestStateCreateInfoNV structure, then
+that structure includes parameters controlling the representative fragment
+test.
+
+The sname:VkPipelineRepresentativeFragmentTestStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:representativeFragmentTestEnable controls whether the
+    representative fragment test is enabled.
+
+If this structure is not included in the pname:pNext chain,
+pname:representativeFragmentTestEnable is considered to be ename:VK_FALSE,
+and the representative fragment test is disabled.
+
+If the active fragment shader does not specify the code:EarlyFragmentTests
+execution mode, the representative fragment shader test has no effect, even
+if enabled.
+
+include::{generated}/validity/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.adoc[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetRepresentativeFragmentTestEnableNV',desc='Specify the representative fragment test enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:representativeFragmentTestEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetRepresentativeFragmentTestEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:representativeFragmentTestEnable specifies the
+    pname:representativeFragmentTestEnable state.
+
+This command sets the pname:representativeFragmentTestEnable state for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV::pname:representativeFragmentTestEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetRepresentativeFragmentTestEnableNV
+:requiredfeature: extendedDynamicState3RepresentativeFragmentTestEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetRepresentativeFragmentTestEnableNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+endif::VK_NV_representative_fragment_test[]
+
+
+[[fragops-samplecount]]
+== Sample Counting
+
+Occlusion queries use query pool entries to track the number of samples that
+pass all the per-fragment tests.
+The mechanism of collecting an occlusion query value is described in
+<<queries-occlusion,Occlusion Queries>>.
+
+The occlusion query sample counter increments by one for each sample with a
+coverage value of 1 in each fragment that survives all the per-fragment
+tests, including scissor,
+ifdef::VK_NV_scissor_exclusive[]
+exclusive scissor,
+endif::VK_NV_scissor_exclusive[]
+sample mask, alpha to coverage, stencil, and depth tests.
+
+
+ifdef::VK_NV_fragment_coverage_to_color[]
+[[fragops-coverage-to-color]]
+== Fragment Coverage to Color
+
+[open,refpage='VkPipelineCoverageToColorStateCreateInfoNV',desc='Structure specifying whether fragment coverage replaces a color',type='structs']
+--
+The sname:VkPipelineCoverageToColorStateCreateInfoNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineCoverageToColorStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:coverageToColorEnable controls whether the fragment coverage value
+    replaces a fragment color output.
+  * pname:coverageToColorLocation controls which fragment shader color
+    output value is replaced.
+
+If the pname:pNext chain of slink:VkPipelineMultisampleStateCreateInfo
+includes a sname:VkPipelineCoverageToColorStateCreateInfoNV structure, then
+that structure controls whether the fragment coverage is substituted for a
+fragment color output and, if so, which output is replaced.
+
+If pname:coverageToColorEnable is ename:VK_TRUE, the
+<<primsrast-multisampling-coverage-mask, coverage mask>> replaces the first
+component of the color value corresponding to the fragment shader output
+location with code:Location equal to pname:coverageToColorLocation and
+code:Index equal to zero.
+If the color attachment format has fewer bits than the coverage mask, the
+low bits of the sample coverage mask are taken without any clamping.
+If the color attachment format has more bits than the coverage mask, the
+high bits of the sample coverage mask are filled with zeros.
+
+If pname:coverageToColorEnable is ename:VK_FALSE, these operations are
+skipped.
+If this structure is not included in the pname:pNext chain, it is as if
+pname:coverageToColorEnable is ename:VK_FALSE.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404]]
+    If pname:coverageToColorEnable is ename:VK_TRUE, then the render pass
+    subpass indicated by
+    slink:VkGraphicsPipelineCreateInfo::pname:renderPass and
+    slink:VkGraphicsPipelineCreateInfo::pname:subpass must: have a color
+    attachment at the location selected by pname:coverageToColorLocation,
+    with a elink:VkFormat of ename:VK_FORMAT_R8_UINT,
+    ename:VK_FORMAT_R8_SINT, ename:VK_FORMAT_R16_UINT,
+    ename:VK_FORMAT_R16_SINT, ename:VK_FORMAT_R32_UINT, or
+    ename:VK_FORMAT_R32_SINT
+****
+
+include::{generated}/validity/structs/VkPipelineCoverageToColorStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkPipelineCoverageToColorStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageToColorStateCreateFlagsNV.adoc[]
+
+tname:VkPipelineCoverageToColorStateCreateFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetCoverageToColorEnableNV',desc='Specify the coverage to color enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:coverageToColorEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageToColorEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageToColorEnable specifies the pname:coverageToColorEnable
+    state.
+
+This command sets the pname:coverageToColorEnable state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageToColorStateCreateInfoNV::pname:coverageToColorEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageToColorEnableNV
+:requiredfeature: extendedDynamicState3CoverageToColorEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageToColorEnableNV.adoc[]
+--
+
+[open,refpage='vkCmdSetCoverageToColorLocationNV',desc='Specify the coverage to color location dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:coverageToColorLocation state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageToColorLocationNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageToColorLocation specifies the
+    pname:coverageToColorLocation state.
+
+This command sets the pname:coverageToColorLocation state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageToColorStateCreateInfoNV::pname:coverageToColorLocation
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageToColorLocationNV
+:requiredfeature: extendedDynamicState3CoverageToColorLocation
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageToColorLocationNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+endif::VK_NV_fragment_coverage_to_color[]
+
+
+[[fragops-coverage-reduction]]
+== Coverage Reduction
+
+Coverage reduction takes the coverage information for a fragment and
+converts that to a boolean coverage value for each color sample in each
+pixel covered by the fragment.
+
+
+=== Pixel Coverage
+
+Coverage for each pixel is first extracted from the total fragment coverage
+mask.
+This consists of pname:rasterizationSamples unique coverage samples for each
+pixel in the fragment area, each with a unique
+<<primsrast-multisampling-coverage-mask, sample index>>.
+If the fragment only contains a single pixel, coverage for the pixel is
+equivalent to the fragment coverage.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment and the fragment
+covers multiple pixels, pixel coverage is generated in an
+implementation-dependent manner.
+If all samples in the fragment are covered, all samples will be covered in
+each pixel coverage.
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_NV_shading_rate_image[]
+If a <<primsrast-shading-rate-image,shading rate image>> is used, and the
+fragment covers multiple pixels, each pixel's coverage consists of the
+coverage samples corresponding to that pixel, and each sample retains its
+unique <<primsrast-multisampling-coverage-mask, sample index [eq]#i#>>.
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+If the <<primsrast-fragment-shading-rate, fragment shading rate>> is set,
+and the fragment covers multiple pixels, each pixel's coverage consists of
+the coverage samples with a <<primsrast-multisampling-coverage-mask-vrfs,
+pixel index>> matching that pixel, and each sample retains its unique
+<<primsrast-multisampling-coverage-mask, sample index [eq]#i#>>.
+endif::VK_KHR_fragment_shading_rate[]
+
+
+=== Color Sample Coverage
+
+Once pixel coverage is determined, coverage for each individual color sample
+corresponding to that pixel is determined.
+
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[If the]
+ifndef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[The]
+number of pname:rasterizationSamples is identical to the number of samples
+in the color
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[attachments, a]
+ifndef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[attachments. A]
+color sample is covered if the pixel coverage sample with the same
+<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is covered.
+
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[]
+Otherwise, the coverage for each color sample is computed from the pixel
+coverage as follows.
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_NV_coverage_reduction_mode[]
+
+ifdef::VK_AMD_mixed_attachment_samples[]
+If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled, for
+color samples present in the color attachments, a color sample is covered if
+the pixel coverage sample with the same
+<<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is covered;
+additional pixel coverage samples are discarded.
+endif::VK_AMD_mixed_attachment_samples[]
+
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+If the pname:pNext chain of slink:VkSubpassDescription2
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo]
+includes a slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
+the pname:multisampledRenderToSingleSampledEnable field equal to
+ename:VK_TRUE, sample coverage is calculated as if the attachment has
+slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+samples.
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+
+ifdef::VK_NV_framebuffer_mixed_samples[]
+
+ifndef::VK_NV_coverage_reduction_mode[]
+When the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled, if
+the pipeline's
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples is
+greater than the slink:VkAttachmentDescription::pname:samples of the color
+attachments in the subpass, each color sample will be associated with an
+implementation-dependent subset of samples in the pixel coverage.
+If any of those associated samples are covered, the color sample is covered.
+endif::VK_NV_coverage_reduction_mode[]
+
+ifdef::VK_NV_coverage_reduction_mode[]
+When the `apiext:VK_NV_coverage_reduction_mode` extension is enabled, the
+pipeline state controlling coverage reduction is specified through the
+members of the sname:VkPipelineCoverageReductionStateCreateInfoNV structure.
+
+[open,refpage='VkPipelineCoverageReductionStateCreateInfoNV',desc='Structure specifying parameters controlling coverage reduction',type='structs']
+--
+The sname:VkPipelineCoverageReductionStateCreateInfoNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineCoverageReductionStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:coverageReductionMode is a elink:VkCoverageReductionModeNV value
+    controlling how color sample coverage is generated from pixel coverage.
+
+If this structure is not included in the pname:pNext chain, or if the
+extension is not enabled, the default coverage reduction mode is inferred as
+follows:
+
+  * If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    then it is as if the pname:coverageReductionMode is
+    ename:VK_COVERAGE_REDUCTION_MODE_MERGE_NV.
+  * If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    then it is as if the pname:coverageReductionMode is
+    ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV.
+  * If both `apiext:VK_NV_framebuffer_mixed_samples` and
+    `apiext:VK_AMD_mixed_attachment_samples` are enabled, then the default
+    coverage reduction mode is implementation-dependent.
+
+include::{generated}/validity/structs/VkPipelineCoverageReductionStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkPipelineCoverageReductionStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageReductionStateCreateFlagsNV.adoc[]
+
+tname:VkPipelineCoverageReductionStateCreateFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkCoverageReductionModeNV',desc='Specify the coverage reduction mode',type='enums']
+--
+Possible values of
+slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode,
+specifying how color sample coverage is generated from pixel coverage, are:
+
+include::{generated}/api/enums/VkCoverageReductionModeNV.adoc[]
+
+  * ename:VK_COVERAGE_REDUCTION_MODE_MERGE_NV specifies that each color
+    sample will be associated with an implementation-dependent subset of
+    samples in the pixel coverage.
+    If any of those associated samples are covered, the color sample is
+    covered.
+  * ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV specifies that for color
+    samples present in the color attachments, a color sample is covered if
+    the pixel coverage sample with the same
+    <<primsrast-multisampling-coverage-mask, sample index>> [eq]#i# is
+    covered; other pixel coverage samples are discarded.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetCoverageReductionModeNV',desc='Specify the coverage reduction mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:coverageReductionMode state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageReductionModeNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageReductionMode specifies the pname:coverageReductionMode
+    state.
+
+This command sets the pname:coverageReductionMode state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageReductionModeNV
+:requiredfeature: extendedDynamicState3CoverageReductionMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageReductionModeNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV',desc='Query supported sample count combinations',type='protos']
+--
+To query the set of mixed sample combinations of coverage reduction mode,
+rasterization samples and color, depth, stencil attachment sample counts
+that are supported by a physical device, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the set
+    of combinations.
+  * pname:pCombinationCount is a pointer to an integer related to the number
+    of combinations available or queried, as described below.
+  * pname:pCombinations is either `NULL` or a pointer to an array of
+    slink:VkFramebufferMixedSamplesCombinationNV values, indicating the
+    supported combinations of coverage reduction mode, rasterization
+    samples, and color, depth, stencil attachment sample counts.
+
+If pname:pCombinations is `NULL`, then the number of supported combinations
+for the given pname:physicalDevice is returned in pname:pCombinationCount.
+Otherwise, pname:pCombinationCount must: point to a variable set by the user
+to the number of elements in the pname:pCombinations array, and on return
+the variable is overwritten with the number of values actually written to
+pname:pCombinations.
+If the value of pname:pCombinationCount is less than the number of
+combinations supported for the given pname:physicalDevice, at most
+pname:pCombinationCount values will be written to pname:pCombinations, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the supported values were returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.adoc[]
+--
+
+[open,refpage='VkFramebufferMixedSamplesCombinationNV',desc='Structure specifying a supported sample count combination',type='structs']
+--
+The sname:VkFramebufferMixedSamplesCombinationNV structure is defined as:
+
+include::{generated}/api/structs/VkFramebufferMixedSamplesCombinationNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:coverageReductionMode is a elink:VkCoverageReductionModeNV value
+    specifying the coverage reduction mode.
+  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits specifying
+    the number of rasterization samples in the supported combination.
+  * pname:depthStencilSamples specifies the number of samples in the depth
+    stencil attachment in the supported combination.
+    A value of 0 indicates the combination does not have a depth stencil
+    attachment.
+  * pname:colorSamples specifies the number of color samples in a color
+    attachment in the supported combination.
+    A value of 0 indicates the combination does not have a color attachment.
+
+include::{generated}/validity/structs/VkFramebufferMixedSamplesCombinationNV.adoc[]
+--
+endif::VK_NV_coverage_reduction_mode[]
+
+
+[[fragops-coverage-modulation]]
+=== Coverage Modulation
+
+[open,refpage='VkPipelineCoverageModulationStateCreateInfoNV',desc='Structure specifying parameters controlling coverage modulation',type='structs']
+--
+As part of coverage reduction, fragment color values can: also be modulated
+(multiplied) by a value that is a function of fraction of covered
+rasterization samples associated with that color sample.
+
+Pipeline state controlling coverage modulation is specified through the
+members of the sname:VkPipelineCoverageModulationStateCreateInfoNV
+structure.
+
+The sname:VkPipelineCoverageModulationStateCreateInfoNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineCoverageModulationStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:coverageModulationMode is a elink:VkCoverageModulationModeNV value
+    controlling which color components are modulated.
+  * pname:coverageModulationTableEnable controls whether the modulation
+    factor is looked up from a table in pname:pCoverageModulationTable.
+  * pname:coverageModulationTableCount is the number of elements in
+    pname:pCoverageModulationTable.
+  * pname:pCoverageModulationTable is a table of modulation factors
+    containing a value for each number of covered samples.
+
+If pname:coverageModulationTableEnable is ename:VK_FALSE, then for each
+color sample the associated bits of the pixel coverage are counted and
+divided by the number of associated bits to produce a modulation factor
+[eq]#R# in the range [eq]#(0,1]# (a value of zero would have been killed due
+to a color coverage of 0).
+Specifically:
+
+  * [eq]#N# = value of pname:rasterizationSamples
+  * [eq]#M# = value of slink:VkAttachmentDescription::pname:samples for any
+    color attachments
+  * [eq]#R = popcount(associated coverage bits) / (N / M)#
+
+If pname:coverageModulationTableEnable is ename:VK_TRUE, the value [eq]#R#
+is computed using a programmable lookup table.
+The lookup table has [eq]#N / M# elements, and the element of the table is
+selected by:
+
+  * [eq]#R = pname:pCoverageModulationTable[popcount(associated coverage
+    bits)-1]#
+
+Note that the table does not have an entry for [eq]#popcount(associated
+coverage bits) = 0#, because such samples would have been killed.
+
+The values of pname:pCoverageModulationTable may: be rounded to an
+implementation-dependent precision, which is at least as fine as [eq]#1 /
+N#, and clamped to [eq]#[0,1]#.
+
+For each color attachment with a floating point or normalized color format,
+each fragment output color value is replicated to [eq]#M# values which can:
+each be modulated (multiplied) by that color sample's associated value of
+[eq]#R#.
+Which components are modulated is controlled by
+pname:coverageModulationMode.
+
+If this structure is not included in the pname:pNext chain, it is as if
+pname:coverageModulationMode is ename:VK_COVERAGE_MODULATION_MODE_NONE_NV.
+
+ifdef::VK_NV_coverage_reduction_mode[]
+If the <<fragops-coverage-reduction, coverage reduction mode>> is
+ename:VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, each color sample is
+associated with only a single coverage sample.
+In this case, it is as if pname:coverageModulationMode is
+ename:VK_COVERAGE_MODULATION_MODE_NONE_NV.
+endif::VK_NV_coverage_reduction_mode[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405]]
+    If pname:coverageModulationTableEnable is ename:VK_TRUE,
+    pname:coverageModulationTableCount must: be equal to the number of
+    rasterization samples divided by the number of color samples in the
+    subpass
+****
+
+include::{generated}/validity/structs/VkPipelineCoverageModulationStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkPipelineCoverageModulationStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageModulationStateCreateFlagsNV.adoc[]
+
+tname:VkPipelineCoverageModulationStateCreateFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkCoverageModulationModeNV',desc='Specify the coverage modulation mode',type='enums']
+--
+Possible values of
+slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:coverageModulationMode,
+specifying which color components are modulated, are:
+
+include::{generated}/api/enums/VkCoverageModulationModeNV.adoc[]
+
+  * ename:VK_COVERAGE_MODULATION_MODE_NONE_NV specifies that no components
+    are multiplied by the modulation factor.
+  * ename:VK_COVERAGE_MODULATION_MODE_RGB_NV specifies that the red, green,
+    and blue components are multiplied by the modulation factor.
+  * ename:VK_COVERAGE_MODULATION_MODE_ALPHA_NV specifies that the alpha
+    component is multiplied by the modulation factor.
+  * ename:VK_COVERAGE_MODULATION_MODE_RGBA_NV specifies that all components
+    are multiplied by the modulation factor.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetCoverageModulationModeNV',desc='Specify the coverage modulation mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:coverageModulationMode state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageModulationModeNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageModulationMode specifies the pname:coverageModulationMode
+    state.
+
+This command sets the pname:coverageModulationMode state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:coverageModulationMode
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageModulationModeNV
+:requiredfeature: extendedDynamicState3CoverageModulationMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageModulationModeNV.adoc[]
+--
+
+[open,refpage='vkCmdSetCoverageModulationTableEnableNV',desc='Specify the coverage modulation table enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:coverageModulationTableEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageModulationTableEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageModulationTableEnable specifies the
+    pname:coverageModulationTableEnable state.
+
+This command sets the pname:coverageModulationTableEnable state for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:coverageModulationTableEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageModulationTableEnableNV
+:requiredfeature: extendedDynamicState3CoverageModulationTableEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageModulationTableEnableNV.adoc[]
+--
+
+[open,refpage='vkCmdSetCoverageModulationTableNV',desc='Specify the coverage modulation table dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:pCoverageModulationTable state, call:
+
+include::{generated}/api/protos/vkCmdSetCoverageModulationTableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:coverageModulationTableCount specifies the number of elements in
+    pname:pCoverageModulationTable.
+  * pname:pCoverageModulationTable specifies the table of modulation factors
+    containing a value for each number of covered samples.
+
+This command sets the table of modulation factors for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:coverageModulationTableCount,
+and
+slink:VkPipelineCoverageModulationStateCreateInfoNV::pname:pCoverageModulationTable
+values used to create the currently active pipeline.
+
+:refpage: vkCmdSetCoverageModulationTableNV
+:requiredfeature: extendedDynamicState3CoverageModulationTable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCoverageModulationTableNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+endif::VK_NV_framebuffer_mixed_samples[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/framebuffer.adoc b/codegen/vulkan/vulkan-docs-next/chapters/framebuffer.adoc
new file mode 100644
index 0000000..1b006a8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/framebuffer.adoc
@@ -0,0 +1,1123 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[framebuffer]]
+= The Framebuffer
+
+
+[[framebuffer-blending]]
+== Blending
+
+Blending combines the incoming _source_ fragment's R, G, B, and A values
+with the _destination_ R, G, B, and A values of each sample stored in the
+framebuffer at the fragment's [eq]#(x~f~,y~f~)# location.
+Blending is performed for each color sample covered by the fragment, rather
+than just once for each fragment.
+
+Source and destination values are combined according to the
+<<framebuffer-blendoperations,blend operation>>, quadruplets of source and
+destination weighting factors determined by the <<framebuffer-blendfactors,
+blend factors>>, and a <<framebuffer-blendconstants,blend constant>>, to
+obtain a new set of R, G, B, and A values, as described below.
+
+Blending is computed and applied separately to each color attachment used by
+the subpass, with separate controls for each attachment.
+
+Prior to performing the blend operation, signed and unsigned normalized
+fixed-point color components undergo an implied conversion to floating-point
+as specified by <<fundamentals-fixedfpconv,Conversion from Normalized
+Fixed-Point to Floating-Point>>.
+Blending computations are treated as if carried out in floating-point, and
+basic blend operations are performed with a precision and dynamic range no
+lower than that used to represent destination components.
+ifdef::VK_EXT_blend_operation_advanced[]
+<<framebuffer-blend-advanced,Advanced blending operations>> are performed
+with a precision and dynamic range no lower than the smaller of that used to
+represent destination components or that used to represent 16-bit
+floating-point values.
+endif::VK_EXT_blend_operation_advanced[]
+
+[NOTE]
+.Note
+====
+Blending is only defined for floating-point, UNORM, SNORM, and sRGB formats.
+Within those formats, the implementation may only support blending on some
+subset of them.
+Which formats support blending is indicated by
+ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT.
+====
+
+The pipeline blend state is included in the
+sname:VkPipelineColorBlendStateCreateInfo structure during graphics pipeline
+creation:
+
+[open,refpage='VkPipelineColorBlendStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline color blend state',type='structs']
+--
+The sname:VkPipelineColorBlendStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineColorBlendStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifndef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:flags is reserved for future use.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:flags is a bitmask of
+    elink:VkPipelineColorBlendStateCreateFlagBits specifying additional
+    color blending information.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * pname:logicOpEnable controls whether to apply <<framebuffer-logicop,
+    Logical Operations>>.
+  * pname:logicOp selects which logical operation to apply.
+  * pname:attachmentCount is the number of
+    slink:VkPipelineColorBlendAttachmentState elements in
+    pname:pAttachments.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    It is ignored if the pipeline is created with
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, and
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic states set, and
+    either ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT set or
+    <<features-advancedBlendCoherentOperations,advancedBlendCoherentOperations>>
+    is not enabled on the device.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pAttachments is a pointer to an array of
+    slink:VkPipelineColorBlendAttachmentState structures defining blend
+    state for each color attachment.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    It is ignored if the pipeline is created with
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, and
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic states set, and
+    either ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT set or
+    <<features-advancedBlendCoherentOperations,advancedBlendCoherentOperations>>
+    is not enabled on the device.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:blendConstants is a pointer to an array of four values used as the
+    R, G, B, and A components of the blend constant that are used in
+    blending, depending on the <<framebuffer-blendfactors,blend factor>>.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605]]
+    If the <<features-independentBlend, pname:independentBlend>> feature is
+    not enabled, all elements of pname:pAttachments must: be identical
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606]]
+    If the <<features-logicOp, pname:logicOp>> feature is not enabled,
+    pname:logicOpEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607]]
+    If pname:logicOpEnable is ename:VK_TRUE, pname:logicOp must: be a valid
+    elink:VkLogicOp value
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-rasterizationOrderColorAttachmentAccess-06465]]
+    If the <<features-rasterizationOrderColorAttachmentAccess,
+    pname:rasterizationOrderColorAttachmentAccess>> feature is not enabled,
+    pname:flags must: not include
+    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-07353]]
+    If pname:attachmentCount is not `0`
+ifdef::VK_EXT_extended_dynamic_state3[]
+    , and any of ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, or
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT are not set,
+endif::VK_EXT_extended_dynamic_state3[]
+    pname:pAttachments must: be a valid pointer to an array of
+    pname:attachmentCount valid slink:VkPipelineColorBlendAttachmentState
+    structures
+****
+
+include::{generated}/validity/structs/VkPipelineColorBlendStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineColorBlendStateCreateFlags',desc='Bitmask of VkPipelineColorBlendStateCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineColorBlendStateCreateFlags.adoc[]
+
+ifndef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+tname:VkPipelineColorBlendStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+tname:VkPipelineColorBlendStateCreateFlags is a bitmask type for setting a
+mask of zero or more elink:VkPipelineColorBlendStateCreateFlagBits.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+--
+
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+[open,refpage='VkPipelineColorBlendStateCreateFlagBits',desc='Bitmask specifying additional parameters of an image',type='enums']
+--
+Bits which can: be set in the
+slink:VkPipelineColorBlendStateCreateInfo::pname:flags parameter are:
+
+include::{generated}/api/enums/VkPipelineColorBlendStateCreateFlagBits.adoc[]
+
+  * ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
+    indicates that access to color and input attachments will have implicit
+    framebuffer-local memory dependencies, allowing applications to express
+    custom blending operations in a fragment shader.
+
+When
+ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
+is included in a pipeline, it forms a framebuffer-local memory dependency
+for each fragment generated by draw commands for that pipeline with the
+following scopes:
+
+  * The first <<synchronization-dependencies-scopes, synchronization scope>>
+    includes the ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+    pipeline stage executed by all previous fragments (as defined by
+    <<drawing-primitive-order, primitive order>>) in the corresponding
+    <<synchronization-framebuffer-regions, framebuffer regions>> including
+    those generated by the same draw command.
+  * The second <<synchronization-dependencies-scopes, synchronization
+    scope>> includes the ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+    pipeline stage executed by the generated fragment.
+  * The first <<synchronization-dependencies-access-scopes, access scope>>
+    includes all writes to color attachments.
+  * The second <<synchronization-dependencies-access-scopes, access scope>>
+    includes all reads from input attachments.
+--
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+
+[open,refpage='VkPipelineColorBlendAttachmentState',desc='Structure specifying a pipeline color blend attachment state',type='structs']
+--
+The sname:VkPipelineColorBlendAttachmentState structure is defined as:
+
+include::{generated}/api/structs/VkPipelineColorBlendAttachmentState.adoc[]
+
+  * pname:blendEnable controls whether blending is enabled for the
+    corresponding color attachment.
+    If blending is not enabled, the source fragment's color for that
+    attachment is passed through unmodified.
+  * pname:srcColorBlendFactor selects which blend factor is used to
+    determine the source factors [eq]#(S~r~,S~g~,S~b~)#.
+  * pname:dstColorBlendFactor selects which blend factor is used to
+    determine the destination factors [eq]#(D~r~,D~g~,D~b~)#.
+  * pname:colorBlendOp selects which blend operation is used to calculate
+    the RGB values to write to the color attachment.
+  * pname:srcAlphaBlendFactor selects which blend factor is used to
+    determine the source factor [eq]#S~a~#.
+  * pname:dstAlphaBlendFactor selects which blend factor is used to
+    determine the destination factor [eq]#D~a~#.
+  * pname:alphaBlendOp selects which blend operation is used to calculate
+    the alpha values to write to the color attachment.
+  * pname:colorWriteMask is a bitmask of elink:VkColorComponentFlagBits
+    specifying which of the R, G, B, and/or A components are enabled for
+    writing, as described for the <<framebuffer-color-write-mask,Color Write
+    Mask>>.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:srcColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:dstColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:srcAlphaBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:dstAlphaBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+ifdef::VK_EXT_blend_operation_advanced[]
+  * [[VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406]]
+    If either of pname:colorBlendOp or pname:alphaBlendOp is an
+    <<framebuffer-blend-advanced,advanced blend operation>>, then
+    pname:colorBlendOp must: equal pname:alphaBlendOp
+  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407]]
+    If
+    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendIndependentBlend
+    is ename:VK_FALSE and pname:colorBlendOp is an
+    <<framebuffer-blend-advanced,advanced blend operation>>, then
+    pname:colorBlendOp must: be the same for all attachments
+  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408]]
+    If
+    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendIndependentBlend
+    is ename:VK_FALSE and pname:alphaBlendOp is an
+    <<framebuffer-blend-advanced,advanced blend operation>>, then
+    pname:alphaBlendOp must: be the same for all attachments
+  * [[VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409]]
+    If
+    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendAllOperations
+    is ename:VK_FALSE, then pname:colorBlendOp must: not be
+    ename:VK_BLEND_OP_ZERO_EXT, ename:VK_BLEND_OP_SRC_EXT,
+    ename:VK_BLEND_OP_DST_EXT, ename:VK_BLEND_OP_SRC_OVER_EXT,
+    ename:VK_BLEND_OP_DST_OVER_EXT, ename:VK_BLEND_OP_SRC_IN_EXT,
+    ename:VK_BLEND_OP_DST_IN_EXT, ename:VK_BLEND_OP_SRC_OUT_EXT,
+    ename:VK_BLEND_OP_DST_OUT_EXT, ename:VK_BLEND_OP_SRC_ATOP_EXT,
+    ename:VK_BLEND_OP_DST_ATOP_EXT, ename:VK_BLEND_OP_XOR_EXT,
+    ename:VK_BLEND_OP_INVERT_EXT, ename:VK_BLEND_OP_INVERT_RGB_EXT,
+    ename:VK_BLEND_OP_LINEARDODGE_EXT, ename:VK_BLEND_OP_LINEARBURN_EXT,
+    ename:VK_BLEND_OP_VIVIDLIGHT_EXT, ename:VK_BLEND_OP_LINEARLIGHT_EXT,
+    ename:VK_BLEND_OP_PINLIGHT_EXT, ename:VK_BLEND_OP_HARDMIX_EXT,
+    ename:VK_BLEND_OP_PLUS_EXT, ename:VK_BLEND_OP_PLUS_CLAMPED_EXT,
+    ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
+    ename:VK_BLEND_OP_PLUS_DARKER_EXT, ename:VK_BLEND_OP_MINUS_EXT,
+    ename:VK_BLEND_OP_MINUS_CLAMPED_EXT, ename:VK_BLEND_OP_CONTRAST_EXT,
+    ename:VK_BLEND_OP_INVERT_OVG_EXT, ename:VK_BLEND_OP_RED_EXT,
+    ename:VK_BLEND_OP_GREEN_EXT, or ename:VK_BLEND_OP_BLUE_EXT
+  * [[VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410]]
+    If pname:colorBlendOp or pname:alphaBlendOp is an
+    <<framebuffer-blend-advanced,advanced blend operation>>, then
+    pname:colorAttachmentCount of the subpass this pipeline is compiled
+    against must: be less than or equal to
+    slink:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::pname:advancedBlendMaxColorAttachments
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
+    is ename:VK_FALSE, pname:srcColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+  * [[VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
+    is ename:VK_FALSE, pname:dstColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkPipelineColorBlendAttachmentState.adoc[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetColorBlendEnableEXT',desc='Specify the pname:blendEnable for each attachment dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> pname:blendEnable, call:
+
+include::{generated}/api/protos/vkCmdSetColorBlendEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstAttachment the first color attachment the color blending
+    enable applies.
+  * pname:attachmentCount the number of color blending enables in the
+    pname:pColorBlendEnables array.
+  * pname:pColorBlendEnables an array of booleans to indicate whether color
+    blending is enabled for the corresponding attachment.
+
+This command sets the color blending enable of the specified color
+attachments for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendAttachmentState::pname:blendEnable values used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetColorBlendEnableEXT
+:requiredfeature: extendedDynamicState3ColorBlendEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetColorBlendEnableEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetColorBlendEquationEXT',desc='Specify the blend factors and operations dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> color blend factors and
+operations, call:
+
+include::{generated}/api/protos/vkCmdSetColorBlendEquationEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstAttachment the first color attachment the color blend factors
+    and operations apply to.
+  * pname:attachmentCount the number of slink:VkColorBlendEquationEXT
+    elements in the pname:pColorBlendEquations array.
+  * pname:pColorBlendEquations an array of slink:VkColorBlendEquationEXT
+    structs that specify the color blend factors and operations for the
+    corresponding attachments.
+
+This command sets the color blending factors and operations of the specified
+attachments for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendAttachmentState::pname:srcColorBlendFactor,
+slink:VkPipelineColorBlendAttachmentState::pname:dstColorBlendFactor,
+slink:VkPipelineColorBlendAttachmentState::pname:colorBlendOp,
+slink:VkPipelineColorBlendAttachmentState::pname:srcAlphaBlendFactor,
+slink:VkPipelineColorBlendAttachmentState::pname:dstAlphaBlendFactor, and
+slink:VkPipelineColorBlendAttachmentState::pname:alphaBlendOp values used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetColorBlendEquationEXT
+:requiredfeature: extendedDynamicState3ColorBlendEquation
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetColorBlendEquationEXT.adoc[]
+--
+
+[open,refpage='VkColorBlendEquationEXT',desc='Structure specifying the color blend factors and operations for an attachment',type='structs']
+--
+The sname:VkColorBlendEquationEXT structure is defined as:
+
+include::{generated}/api/structs/VkColorBlendEquationEXT.adoc[]
+
+  * pname:srcColorBlendFactor selects which blend factor is used to
+    determine the source factors [eq]#(S~r~,S~g~,S~b~)#.
+  * pname:dstColorBlendFactor selects which blend factor is used to
+    determine the destination factors [eq]#(D~r~,D~g~,D~b~)#.
+  * pname:colorBlendOp selects which blend operation is used to calculate
+    the RGB values to write to the color attachment.
+  * pname:srcAlphaBlendFactor selects which blend factor is used to
+    determine the source factor [eq]#S~a~#.
+  * pname:dstAlphaBlendFactor selects which blend factor is used to
+    determine the destination factor [eq]#D~a~#.
+  * pname:alphaBlendOp selects which blend operation is use to calculate the
+    alpha values to write to the color attachment.
+
+.Valid Usage
+****
+  * [[VUID-VkColorBlendEquationEXT-dualSrcBlend-07357]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:srcColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkColorBlendEquationEXT-dualSrcBlend-07358]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:dstColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkColorBlendEquationEXT-dualSrcBlend-07359]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:srcAlphaBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  * [[VUID-VkColorBlendEquationEXT-dualSrcBlend-07360]]
+    If the <<features-dualSrcBlend, pname:dualSrcBlend>> feature is not
+    enabled, pname:dstAlphaBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+    ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+ifdef::VK_EXT_blend_operation_advanced[]
+  * [[VUID-VkColorBlendEquationEXT-colorBlendOp-07361]]
+    pname:colorBlendOp and pname:alphaBlendOp must: not be
+    ename:VK_BLEND_OP_ZERO_EXT, ename:VK_BLEND_OP_SRC_EXT,
+    ename:VK_BLEND_OP_DST_EXT, ename:VK_BLEND_OP_SRC_OVER_EXT,
+    ename:VK_BLEND_OP_DST_OVER_EXT, ename:VK_BLEND_OP_SRC_IN_EXT,
+    ename:VK_BLEND_OP_DST_IN_EXT, ename:VK_BLEND_OP_SRC_OUT_EXT,
+    ename:VK_BLEND_OP_DST_OUT_EXT, ename:VK_BLEND_OP_SRC_ATOP_EXT,
+    ename:VK_BLEND_OP_DST_ATOP_EXT, ename:VK_BLEND_OP_XOR_EXT,
+    ename:VK_BLEND_OP_MULTIPLY_EXT, ename:VK_BLEND_OP_SCREEN_EXT,
+    ename:VK_BLEND_OP_OVERLAY_EXT, ename:VK_BLEND_OP_DARKEN_EXT,
+    ename:VK_BLEND_OP_LIGHTEN_EXT, ename:VK_BLEND_OP_COLORDODGE_EXT,
+    ename:VK_BLEND_OP_COLORBURN_EXT, ename:VK_BLEND_OP_HARDLIGHT_EXT,
+    ename:VK_BLEND_OP_SOFTLIGHT_EXT, ename:VK_BLEND_OP_DIFFERENCE_EXT,
+    ename:VK_BLEND_OP_EXCLUSION_EXT, ename:VK_BLEND_OP_INVERT_EXT,
+    ename:VK_BLEND_OP_INVERT_RGB_EXT, ename:VK_BLEND_OP_LINEARDODGE_EXT,
+    ename:VK_BLEND_OP_LINEARBURN_EXT, ename:VK_BLEND_OP_VIVIDLIGHT_EXT,
+    ename:VK_BLEND_OP_LINEARLIGHT_EXT, ename:VK_BLEND_OP_PINLIGHT_EXT,
+    ename:VK_BLEND_OP_HARDMIX_EXT, ename:VK_BLEND_OP_HSL_HUE_EXT,
+    ename:VK_BLEND_OP_HSL_SATURATION_EXT, ename:VK_BLEND_OP_HSL_COLOR_EXT,
+    ename:VK_BLEND_OP_HSL_LUMINOSITY_EXT, ename:VK_BLEND_OP_PLUS_EXT,
+    ename:VK_BLEND_OP_PLUS_CLAMPED_EXT,
+    ename:VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
+    ename:VK_BLEND_OP_PLUS_DARKER_EXT, ename:VK_BLEND_OP_MINUS_EXT,
+    ename:VK_BLEND_OP_MINUS_CLAMPED_EXT, ename:VK_BLEND_OP_CONTRAST_EXT,
+    ename:VK_BLEND_OP_INVERT_OVG_EXT, ename:VK_BLEND_OP_RED_EXT,
+    ename:VK_BLEND_OP_GREEN_EXT, or ename:VK_BLEND_OP_BLUE_EXT
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkColorBlendEquationEXT-constantAlphaColorBlendFactors-07362]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
+    is ename:VK_FALSE, pname:srcColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+  * [[VUID-VkColorBlendEquationEXT-constantAlphaColorBlendFactors-07363]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:constantAlphaColorBlendFactors
+    is ename:VK_FALSE, pname:dstColorBlendFactor must: not be
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkColorBlendEquationEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetColorWriteMaskEXT',desc='Specify the color write masks for each attachment dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the color write masks, call:
+
+include::{generated}/api/protos/vkCmdSetColorWriteMaskEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstAttachment the first color attachment the color write masks
+    apply to.
+  * pname:attachmentCount the number of tlink:VkColorComponentFlags values
+    in the pname:pColorWriteMasks array.
+  * pname:pColorWriteMasks an array of tlink:VkColorComponentFlags values
+    that specify the color write masks of the corresponding attachments.
+
+This command sets the color write masks of the specified attachments for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendAttachmentState::pname:colorWriteMask values used
+to create the currently active pipeline.
+
+[NOTE]
+.Note
+====
+Formats with bits that are shared between components specified by
+elink:VkColorComponentFlagBits, such as
+ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, cannot have their channels
+individually masked by this functionality; either all components that share
+bits have to be enabled, or none of them.
+====
+
+:refpage: vkCmdSetColorWriteMaskEXT
+:requiredfeature: extendedDynamicState3ColorWriteMask
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetColorWriteMaskEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+
+[[framebuffer-blendfactors]]
+=== Blend Factors
+
+[open,refpage='VkBlendFactor',desc='Framebuffer blending factors',type='enums']
+--
+The source and destination color and alpha blending factors are selected
+from the enum:
+
+include::{generated}/api/enums/VkBlendFactor.adoc[]
+
+The semantics of the enum values are described in the table below:
+
+.Blend Factors
+[width="100%",options="header",align="center",cols="59%,28%,13%"]
+|====
+|elink:VkBlendFactor                            | RGB Blend Factors [eq]#(S~r~,S~g~,S~b~)# or [eq]#(D~r~,D~g~,D~b~)# | Alpha Blend Factor ([eq]#S~a~# or [eq]#D~a~#)
+|ename:VK_BLEND_FACTOR_ZERO                     | [eq]#(0,0,0)#                              | [eq]#0#
+|ename:VK_BLEND_FACTOR_ONE                      | [eq]#(1,1,1)#                              | [eq]#1#
+|ename:VK_BLEND_FACTOR_SRC_COLOR                | [eq]#(R~s0~,G~s0~,B~s0~)#                  | [eq]#A~s0~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR      | [eq]#(1-R~s0~,1-G~s0~,1-B~s0~)#            | [eq]#1-A~s0~#
+|ename:VK_BLEND_FACTOR_DST_COLOR                | [eq]#(R~d~,G~d~,B~d~)#                     | [eq]#A~d~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR      | [eq]#(1-R~d~,1-G~d~,1-B~d~)#               | [eq]#1-A~d~#
+|ename:VK_BLEND_FACTOR_SRC_ALPHA                | [eq]#(A~s0~,A~s0~,A~s0~)#                  | [eq]#A~s0~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA      | [eq]#(1-A~s0~,1-A~s0~,1-A~s0~)#            | [eq]#1-A~s0~#
+|ename:VK_BLEND_FACTOR_DST_ALPHA                | [eq]#(A~d~,A~d~,A~d~)#                     | [eq]#A~d~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA      | [eq]#(1-A~d~,1-A~d~,1-A~d~)#               | [eq]#1-A~d~#
+|ename:VK_BLEND_FACTOR_CONSTANT_COLOR           | [eq]#(R~c~,G~c~,B~c~)#                     | [eq]#A~c~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR | [eq]#(1-R~c~,1-G~c~,1-B~c~)#               | [eq]#1-A~c~#
+|ename:VK_BLEND_FACTOR_CONSTANT_ALPHA           | [eq]#(A~c~,A~c~,A~c~)#                     | [eq]#A~c~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA | [eq]#(1-A~c~,1-A~c~,1-A~c~)#               | [eq]#1-A~c~#
+|ename:VK_BLEND_FACTOR_SRC_ALPHA_SATURATE       | [eq]#(f,f,f)#; [eq]#f = min(A~s0~,1-A~d~)# | [eq]#1#
+|ename:VK_BLEND_FACTOR_SRC1_COLOR               | [eq]#(R~s1~,G~s1~,B~s1~)#                  | [eq]#A~s1~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR     | [eq]#(1-R~s1~,1-G~s1~,1-B~s1~)#            | [eq]#1-A~s1~#
+|ename:VK_BLEND_FACTOR_SRC1_ALPHA               | [eq]#(A~s1~,A~s1~,A~s1~)#                  | [eq]#A~s1~#
+|ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA     | [eq]#(1-A~s1~,1-A~s1~,1-A~s1~)#            | [eq]#1-A~s1~#
+|====
+
+In this table, the following conventions are used:
+
+  * [eq]#R~s0~,G~s0~,B~s0~# and [eq]#A~s0~# represent the first source color
+    R, G, B, and A components, respectively, for the fragment output
+    location corresponding to the color attachment being blended.
+  * [eq]#R~s1~,G~s1~,B~s1~# and [eq]#A~s1~# represent the second source
+    color R, G, B, and A components, respectively, used in dual source
+    blending modes, for the fragment output location corresponding to the
+    color attachment being blended.
+  * [eq]#R~d~,G~d~,B~d~# and [eq]#A~d~# represent the R, G, B, and A
+    components of the destination color.
+    That is, the color currently in the corresponding color attachment for
+    this fragment/sample.
+  * [eq]#R~c~,G~c~,B~c~# and [eq]#A~c~# represent the blend constant R, G,
+    B, and A components, respectively.
+--
+
+[open,refpage='vkCmdSetBlendConstants',desc='Set the values of blend constants',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set and change>> the blend
+constants, call:
+
+include::{generated}/api/protos/vkCmdSetBlendConstants.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:blendConstants is a pointer to an array of four values specifying
+    the [eq]#R~c~#, [eq]#G~c~#, [eq]#B~c~#, and [eq]#A~c~# components of the
+    blend constant color used in blending, depending on the
+    <<framebuffer-blendfactors,blend factor>>.
+
+[[framebuffer-blendconstants]]
+This command sets blend constants for subsequent drawing commands when
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+the graphics pipeline is created with ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendStateCreateInfo::pname:blendConstants values used
+to create the currently active pipeline.
+
+include::{generated}/validity/protos/vkCmdSetBlendConstants.adoc[]
+--
+
+
+[[framebuffer-dsb]]
+=== Dual-Source Blending
+
+Blend factors that use the secondary color input
+[eq]#(R~s1~,G~s1~,B~s1~,A~s1~)# (ename:VK_BLEND_FACTOR_SRC1_COLOR,
+ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
+ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
+ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA) may: consume implementation
+resources that could otherwise be used for rendering to multiple color
+attachments.
+Therefore, the number of color attachments that can: be used in a
+framebuffer may: be lower when using dual-source blending.
+
+Dual-source blending is only supported if the <<features-dualSrcBlend,
+pname:dualSrcBlend>> feature is enabled.
+
+The maximum number of color attachments that can: be used in a subpass when
+using dual-source blending functions is implementation-dependent and is
+reported as the pname:maxFragmentDualSrcAttachments member of
+sname:VkPhysicalDeviceLimits.
+
+Color outputs can: be bound to the first and second inputs of the blender
+using the code:Index decoration, as described in
+<<interfaces-fragmentoutput,Fragment Output Interface>>.
+If the second color input to the blender is not written in the shader, or if
+no output is bound to the second input of a blender, the value of the second
+input is undefined:.
+
+
+[[framebuffer-blendoperations]]
+=== Blend Operations
+
+[open,refpage='VkBlendOp',desc='Framebuffer blending operations',type='enums']
+--
+Once the source and destination blend factors have been selected, they along
+with the source and destination components are passed to the blending
+operations.
+RGB and alpha components can: use different operations.
+Possible values of elink:VkBlendOp, specifying the operations, are:
+
+include::{generated}/api/enums/VkBlendOp.adoc[]
+
+<<<
+
+The semantics of the basic blend operations are described in the table
+below:
+
+.Basic Blend Operations
+[width="100%",cols="45%,30%,25%",options="header",align="center"]
+|====
+|elink:VkBlendOp                             | RGB Components                    | Alpha Component
+
+|ename:VK_BLEND_OP_ADD
+| [eq]#R = R~s0~ {times} S~r~ {plus} R~d~ {times} D~r~# +
+  [eq]#G = G~s0~ {times} S~g~ {plus} G~d~ {times} D~g~# +
+  [eq]#B = B~s0~ {times} S~b~ {plus} B~d~ {times} D~b~#
+| [eq]#A = A~s0~ {times} S~a~ {plus} A~d~ {times} D~a~#
+
+|ename:VK_BLEND_OP_SUBTRACT
+| [eq]#R = R~s0~ {times} S~r~ - R~d~ {times} D~r~# +
+  [eq]#G = G~s0~ {times} S~g~ - G~d~ {times} D~g~# +
+  [eq]#B = B~s0~ {times} S~b~ - B~d~ {times} D~b~#
+| [eq]#A = A~s0~ {times} S~a~ - A~d~ {times} D~a~#
+
+|ename:VK_BLEND_OP_REVERSE_SUBTRACT
+| [eq]#R = R~d~ {times} D~r~ - R~s0~ {times} S~r~# +
+  [eq]#G = G~d~ {times} D~g~ - G~s0~ {times} S~g~# +
+  [eq]#B = B~d~ {times} D~b~ - B~s0~ {times} S~b~#
+| [eq]#A = A~d~ {times} D~a~ - A~s0~ {times} S~a~#
+
+|ename:VK_BLEND_OP_MIN
+| [eq]#R = min(R~s0~,R~d~)# +
+  [eq]#G = min(G~s0~,G~d~)# +
+  [eq]#B = min(B~s0~,B~d~)#
+| [eq]#A = min(A~s0~,A~d~)#
+
+|ename:VK_BLEND_OP_MAX
+| [eq]#R = max(R~s0~,R~d~)# +
+  [eq]#G = max(G~s0~,G~d~)# +
+  [eq]#B = max(B~s0~,B~d~)#
+| [eq]#A = max(A~s0~,A~d~)#
+|====
+
+In this table, the following conventions are used:
+
+  * [eq]#R~s0~, G~s0~, B~s0~# and [eq]#A~s0~# represent the first source
+    color R, G, B, and A components, respectively.
+  * [eq]#R~d~, G~d~, B~d~# and [eq]#A~d~# represent the R, G, B, and A
+    components of the destination color.
+    That is, the color currently in the corresponding color attachment for
+    this fragment/sample.
+  * [eq]#S~r~, S~g~, S~b~# and [eq]#S~a~# represent the source blend factor
+    R, G, B, and A components, respectively.
+  * [eq]#D~r~, D~g~, D~b~# and [eq]#D~a~# represent the destination blend
+    factor R, G, B, and A components, respectively.
+
+The blending operation produces a new set of values [eq]#R, G, B# and
+[eq]#A#, which are written to the framebuffer attachment.
+If blending is not enabled for this attachment, then [eq]#R, G, B# and
+[eq]#A# are assigned [eq]#R~s0~, G~s0~, B~s0~# and [eq]#A~s0~#,
+respectively.
+
+If the color attachment is fixed-point, the components of the source and
+destination values and blend factors are each clamped to [eq]#[0,1]# or
+[eq]#[-1,1]# respectively for an unsigned normalized or signed normalized
+color attachment prior to evaluating the blend operations.
+If the color attachment is floating-point, no clamping occurs.
+--
+
+If the <<formats-numericformat, numeric format>> of a framebuffer attachment
+uses sRGB encoding, the R, G, and B destination color values (after
+conversion from fixed-point to floating-point) are considered to be encoded
+for the sRGB color space and hence are linearized prior to their use in
+blending.
+Each R, G, and B component is converted from nonlinear to linear as
+described in the "`sRGB EOTF`" section of the <<data-format,Khronos Data
+Format Specification>>.
+If the format is not sRGB, no linearization is performed.
+
+If the <<formats-numericformat, numeric format>> of a framebuffer attachment
+uses sRGB encoding, then the final R, G and B values are converted into the
+nonlinear sRGB representation before being written to the framebuffer
+attachment as described in the "`sRGB EOTF^&#160;-1^`" section of the
+Khronos Data Format Specification.
+
+If the <<formats-numericformat, numeric format>> of a framebuffer color
+attachment is not sRGB encoded then the resulting [eq]#c~s~# values for R, G
+and B are unmodified.
+The value of A is never sRGB encoded.
+That is, the alpha component is always stored in memory as linear.
+
+If the framebuffer color attachment is ename:VK_ATTACHMENT_UNUSED, no writes
+are performed through that attachment.
+Writes are not performed to framebuffer color attachments greater than or
+equal to the sname:VkSubpassDescription::pname:colorAttachmentCount
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+or sname:VkSubpassDescription2::pname:colorAttachmentCount
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+value.
+
+ifdef::VK_EXT_blend_operation_advanced[]
+include::{chapters}/VK_EXT_blend_operation_advanced/advanced_blend.adoc[]
+endif::VK_EXT_blend_operation_advanced[]
+
+
+[[framebuffer-logicop]]
+== Logical Operations
+
+The application can: enable a _logical operation_ between the fragment's
+color values and the existing value in the framebuffer attachment.
+This logical operation is applied prior to updating the framebuffer
+attachment.
+Logical operations are applied only for signed and unsigned integer and
+normalized integer framebuffers.
+Logical operations are not applied to floating-point or sRGB format color
+attachments.
+
+[open,refpage='VkLogicOp',desc='Framebuffer logical operations',type='enums']
+--
+Logical operations are controlled by the pname:logicOpEnable and
+pname:logicOp members of slink:VkPipelineColorBlendStateCreateInfo.
+ifdef::VK_EXT_extended_dynamic_state3[]
+The pname:logicOpEnable state can also be controlled by
+flink:vkCmdSetLogicOpEnableEXT if graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+The pname:logicOp state can also be controlled by flink:vkCmdSetLogicOpEXT
+if graphics pipeline is created with ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT set
+in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state2[]
+If pname:logicOpEnable is ename:VK_TRUE, then a logical operation selected
+by pname:logicOp is applied between each color attachment and the fragment's
+corresponding output value, and blending of all attachments is treated as if
+it were disabled.
+Any attachments using color formats for which logical operations are not
+supported simply pass through the color values unmodified.
+The logical operation is applied independently for each of the red, green,
+blue, and alpha components.
+The pname:logicOp is selected from the following operations:
+
+include::{generated}/api/enums/VkLogicOp.adoc[]
+
+<<<
+
+The logical operations supported by Vulkan are summarized in the following
+table in which
+
+  * [eq]#{lnot}# is bitwise invert,
+  * [eq]#{land}# is bitwise and,
+  * [eq]#{lor}# is bitwise or,
+  * [eq]#{oplus}# is bitwise exclusive or,
+  * [eq]#s# is the fragment's [eq]#R~s0~, G~s0~, B~s0~# or [eq]#A~s0~#
+    component value for the fragment output corresponding to the color
+    attachment being updated, and
+  * [eq]#d# is the color attachment's [eq]#R, G, B# or [eq]#A# component
+    value:
+
+.Logical Operations
+[width="75%",options="header",align="center"]
+|====
+|Mode                            | Operation
+|ename:VK_LOGIC_OP_CLEAR         | [eq]#0#
+|ename:VK_LOGIC_OP_AND           | [eq]#s {land} d#
+|ename:VK_LOGIC_OP_AND_REVERSE   | [eq]#s {land} {lnot} d#
+|ename:VK_LOGIC_OP_COPY          | [eq]#s#
+|ename:VK_LOGIC_OP_AND_INVERTED  | [eq]#{lnot} s {land} d#
+|ename:VK_LOGIC_OP_NO_OP         | [eq]#d#
+|ename:VK_LOGIC_OP_XOR           | [eq]#s {oplus} d#
+|ename:VK_LOGIC_OP_OR            | [eq]#s {lor} d#
+|ename:VK_LOGIC_OP_NOR           | [eq]#{lnot} (s {lor} d)#
+|ename:VK_LOGIC_OP_EQUIVALENT    | [eq]#{lnot} (s {oplus} d)#
+|ename:VK_LOGIC_OP_INVERT        | [eq]#{lnot} d#
+|ename:VK_LOGIC_OP_OR_REVERSE    | [eq]#s {lor} {lnot} d#
+|ename:VK_LOGIC_OP_COPY_INVERTED | [eq]#{lnot} s#
+|ename:VK_LOGIC_OP_OR_INVERTED   | [eq]#{lnot} s {lor} d#
+|ename:VK_LOGIC_OP_NAND          | [eq]#{lnot} (s {land} d)#
+|ename:VK_LOGIC_OP_SET           | all 1s
+|====
+
+The result of the logical operation is then written to the color attachment
+as controlled by the component write mask, described in
+<<framebuffer-blendoperations,Blend Operations>>.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetLogicOpEnableEXT',desc='Specify dynamically whether logical operations are enabled for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> whether logical operations
+are enabled, call:
+
+include::{generated}/api/protos/vkCmdSetLogicOpEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:logicOpEnable specifies whether logical operations are enabled.
+
+This command sets whether logical operations are enabled for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendStateCreateInfo::pname:logicOpEnable value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetLogicOpEnableEXT
+:requiredfeature: extendedDynamicState3LogicOpEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetLogicOpEnableEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetLogicOpEXT',desc='Select which logical operation to apply for blend state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the logical operation to
+apply for blend state, call:
+
+include::{generated}/api/protos/vkCmdSetLogicOpEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:logicOp specifies the logical operation to apply for blend state.
+
+This command sets the logical operation for blend state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state2[]
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendStateCreateInfo::pname:logicOp value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetLogicOpEXT
+:requiredfeature: extendedDynamicState2LogicOp
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state2_optional_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetLogicOpEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+
+[[framebuffer-color-write-mask]]
+== Color Write Mask
+
+[open,refpage='VkColorComponentFlagBits',desc='Bitmask controlling which components are written to the framebuffer',type='enums']
+--
+Bits which can: be set in
+slink:VkPipelineColorBlendAttachmentState::pname:colorWriteMask, determining
+whether the final color values [eq]#R, G, B# and [eq]#A# are written to the
+framebuffer attachment, are:
+
+include::{generated}/api/enums/VkColorComponentFlagBits.adoc[]
+
+  * ename:VK_COLOR_COMPONENT_R_BIT specifies that the [eq]#R# value is
+    written to the color attachment for the appropriate sample.
+    Otherwise, the value in memory is unmodified.
+  * ename:VK_COLOR_COMPONENT_G_BIT specifies that the [eq]#G# value is
+    written to the color attachment for the appropriate sample.
+    Otherwise, the value in memory is unmodified.
+  * ename:VK_COLOR_COMPONENT_B_BIT specifies that the [eq]#B# value is
+    written to the color attachment for the appropriate sample.
+    Otherwise, the value in memory is unmodified.
+  * ename:VK_COLOR_COMPONENT_A_BIT specifies that the [eq]#A# value is
+    written to the color attachment for the appropriate sample.
+    Otherwise, the value in memory is unmodified.
+
+The color write mask operation is applied regardless of whether blending is
+enabled.
+
+ifdef::VK_EXT_color_write_enable[]
+The color write mask operation is applied only if
+<<framebuffer-color-write-enable,Color Write Enable>> is enabled for the
+respective attachment.
+Otherwise the color write mask is ignored and writes to all components of
+the attachment are disabled.
+endif::VK_EXT_color_write_enable[]
+--
+
+[open,refpage='VkColorComponentFlags',desc='Bitmask of VkColorComponentFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkColorComponentFlags.adoc[]
+
+tname:VkColorComponentFlags is a bitmask type for setting a mask of zero or
+more elink:VkColorComponentFlagBits.
+--
+
+
+ifdef::VK_EXT_color_write_enable[]
+[[framebuffer-color-write-enable]]
+== Color Write Enable
+
+[open,refpage='VkPipelineColorWriteCreateInfoEXT',desc='Structure specifying color write state of a newly created pipeline',type='structs']
+--
+The sname:VkPipelineColorWriteCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkPipelineColorWriteCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:attachmentCount is the number of basetype:VkBool32 elements in
+    pname:pColorWriteEnables.
+  * pname:pColorWriteEnables is a pointer to an array of per target
+    attachment boolean values specifying whether color writes are enabled
+    for the given attachment.
+
+When this structure is included in the pname:pNext chain of
+slink:VkPipelineColorBlendStateCreateInfo, it defines per-attachment color
+write state.
+If this structure is not included in the pname:pNext chain, it is equivalent
+to specifying this structure with pname:attachmentCount equal to the
+pname:attachmentCount member of slink:VkPipelineColorBlendStateCreateInfo,
+and pname:pColorWriteEnables pointing to an array of as many ename:VK_TRUE
+values.
+
+If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is not
+enabled on the device, all basetype:VkBool32 elements in the
+pname:pColorWriteEnables array must: be ename:VK_TRUE.
+
+Color Write Enable interacts with the <<framebuffer-color-write-mask,Color
+Write Mask>> as follows:
+
+  * If pname:colorWriteEnable is ename:VK_TRUE, writes to the attachment are
+    determined by the pname:colorWriteMask.
+  * If pname:colorWriteEnable is ename:VK_FALSE, the pname:colorWriteMask is
+    ignored and writes to all components of the attachment are disabled.
+    This is equivalent to specifying a pname:colorWriteMask of 0.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineColorWriteCreateInfoEXT-pAttachments-04801]]
+    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
+    not enabled, all elements of pname:pColorWriteEnables must: be
+    ename:VK_TRUE
+  * [[VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-07608]]
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the pipeline is being created with
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, or
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic states not set,
+endif::VK_EXT_extended_dynamic_state3[]
+    pname:attachmentCount must: be equal to the pname:attachmentCount member
+    of the sname:VkPipelineColorBlendStateCreateInfo structure specified
+    during pipeline creation
+  * [[VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-06655]]
+    pname:attachmentCount must: be less than or equal to the
+    pname:maxColorAttachments member of sname:VkPhysicalDeviceLimits
+****
+
+include::{generated}/validity/structs/VkPipelineColorWriteCreateInfoEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetColorWriteEnableEXT',desc='Enable or disable writes to a color attachment dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> writes to a
+color attachment, call:
+
+include::{generated}/api/protos/vkCmdSetColorWriteEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:attachmentCount is the number of basetype:VkBool32 elements in
+    pname:pColorWriteEnables.
+  * pname:pColorWriteEnables is a pointer to an array of per target
+    attachment boolean values specifying whether color writes are enabled
+    for the given attachment.
+
+This command sets the color write enables for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineColorWriteCreateInfoEXT::pname:pColorWriteEnables values
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetColorWriteEnableEXT-None-04803]]
+    The <<features-colorWriteEnable, pname:colorWriteEnable>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-06656]]
+    pname:attachmentCount must: be less than or equal to the
+    pname:maxColorAttachments member of sname:VkPhysicalDeviceLimits
+****
+
+include::{generated}/validity/protos/vkCmdSetColorWriteEnableEXT.adoc[]
+--
+endif::VK_EXT_color_write_enable[]
+
+
+ifdef::VK_QCOM_tile_properties[]
+[[framebuffer-queries]]
+== Framebuffer Query Instructions
+
+[open,refpage='vkGetFramebufferTilePropertiesQCOM',desc='Get tile properties from the attachments in framebuffer',type='protos']
+--
+To query the tile properties from the attachments in framebuffer, call:
+
+include::{generated}/api/protos/vkGetFramebufferTilePropertiesQCOM.adoc[]
+
+  * pname:device is a logical device associated with the framebuffer.
+  * pname:framebuffer is a handle of the framebuffer to query.
+  * pname:pPropertiesCount is a pointer to an integer related to the number
+    of tile properties available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkTilePropertiesQCOM structures.
+
+If pname:pProperties is `NULL`, then the number of tile properties available
+is returned in pname:pPropertiesCount.
+Otherwise, pname:pPropertiesCount must: point to a variable set by the user
+to the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of properties actually written to
+pname:pProperties.
+If pname:pPropertiesCount is less than the number of tile properties
+available, at most pname:pPropertiesCount structures will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available properties were returned.
+
+The number of tile properties available is determined by the number of
+merged subpasses, and each tile property is associated with a merged
+subpass.
+There will be at most as many properties as there are subpasses within the
+render pass.
+To obtain the tile properties for a given merged subpass, the `pProperties`
+array can be indexed using the `postMergeIndex` value provided in
+slink:VkRenderPassSubpassFeedbackInfoEXT.
+
+include::{generated}/validity/protos/vkGetFramebufferTilePropertiesQCOM.adoc[]
+--
+endif::VK_QCOM_tile_properties[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/fundamentals.adoc b/codegen/vulkan/vulkan-docs-next/chapters/fundamentals.adoc
new file mode 100644
index 0000000..5e5e073
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/fundamentals.adoc
@@ -0,0 +1,1954 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[fundamentals]]
+= Fundamentals
+
+This chapter introduces fundamental concepts including the Vulkan
+architecture and execution model, API syntax, queues, pipeline
+configurations, numeric representation, state and state queries, and the
+different types of objects and shaders.
+It provides a framework for interpreting more specific descriptions of
+commands and behavior in the remainder of the Specification.
+
+
+[[fundamentals-host-environment]]
+== Host and Device Environment
+
+The Vulkan Specification assumes and requires: the following properties of
+the host environment with respect to Vulkan implementations:
+
+  * The host must: have runtime support for 8, 16, 32 and 64-bit signed and
+    unsigned twos-complement integers, all addressable at the granularity of
+    their size in bytes.
+  * The host must: have runtime support for 32- and 64-bit floating-point
+    types satisfying the range and precision constraints in the
+    <<fundamentals-floatingpoint,Floating Point Computation>> section.
+  * The representation and endianness of these types on the host must: match
+    the representation and endianness of the same types on every physical
+    device supported.
+
+[NOTE]
+.Note
+====
+Since a variety of data types and structures in Vulkan may: be accessible by
+both host and physical device operations, the implementation should: be able
+to access such data efficiently in both paths in order to facilitate writing
+portable and performant applications.
+====
+
+
+[[fundamentals-execmodel]]
+== Execution Model
+
+This section outlines the execution model of a Vulkan system.
+
+Vulkan exposes one or more _devices_, each of which exposes one or more
+_queues_ which may: process work asynchronously to one another.
+The set of queues supported by a device is partitioned into _families_.
+Each family supports one or more types of functionality and may: contain
+multiple queues with similar characteristics.
+Queues within a single family are considered _compatible_ with one another,
+and work produced for a family of queues can: be executed on any queue
+within that family.
+This specification defines the following types of functionality that queues
+may: support: graphics, compute,
+ifdef::VK_KHR_video_decode_queue[]
+video decode,
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+video encode,
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_VERSION_1_1[protected memory management,]
+ifndef::VKSC_VERSION_1_0[sparse memory management,]
+and transfer.
+
+[NOTE]
+.Note
+====
+A single device may: report multiple similar queue families rather than, or
+as well as, reporting multiple members of one or more of those families.
+This indicates that while members of those families have similar
+capabilities, they are _not_ directly compatible with one another.
+====
+
+Device memory is explicitly managed by the application.
+Each device may: advertise one or more heaps, representing different areas
+of memory.
+Memory heaps are either device-local or host-local, but are always visible
+to the device.
+Further detail about memory heaps is exposed via memory types available on
+that heap.
+Examples of memory areas that may: be available on an implementation
+include:
+
+  * _device-local_ is memory that is physically connected to the device.
+  * _device-local, host visible_ is device-local memory that is visible to
+    the host.
+  * _host-local, host visible_ is memory that is local to the host and
+    visible to the device and host.
+
+On other architectures, there may: only be a single heap that can: be used
+for any purpose.
+
+
+[[fundamentals-queueoperation]]
+=== Queue Operation
+
+Vulkan queues provide an interface to the execution engines of a device.
+Commands for these execution engines are recorded into command buffers ahead
+of execution time, and then submitted to a queue for execution.
+Once submitted to a queue, command buffers will begin and complete execution
+without further application intervention, though the order of this execution
+is dependent on a number of <<synchronization, implicit and explicit
+ordering constraints>>.
+
+Work is submitted to queues using _queue submission commands_ that typically
+take the form ftext:vkQueue* (e.g. flink:vkQueueSubmit
+ifndef::VKSC_VERSION_1_0[, flink:vkQueueBindSparse]
+), and can: take a list of semaphores upon which to wait before work begins
+and a list of semaphores to signal once work has completed.
+The work itself, as well as signaling and waiting on the semaphores are all
+_queue operations_.
+Queue submission commands return control to the application once queue
+operations have been submitted - they do not wait for completion.
+
+There are no implicit ordering constraints between queue operations on
+different queues, or between queues and the host, so these may: operate in
+any order with respect to each other.
+Explicit ordering constraints between different queues or with the host can:
+be expressed with <<synchronization-semaphores,semaphores>> and
+<<synchronization-fences,fences>>.
+
+Command buffer submissions to a single queue respect
+<<synchronization-submission-order, submission order>> and other
+<<synchronization-implicit, implicit ordering guarantees>>, but otherwise
+may: overlap or execute out of order.
+Other types of batches and queue submissions against a single queue
+ifndef::VKSC_VERSION_1_0[(e.g. <<sparsemem-memory-binding, sparse memory binding>>)]
+have no implicit ordering constraints with any other queue submission or
+batch.
+Additional explicit ordering constraints between queue submissions and
+individual batches can be expressed with
+<<synchronization-semaphores,semaphores>> and
+<<synchronization-fences,fences>>.
+
+Before a fence or semaphore is signaled, it is guaranteed that any
+previously submitted queue operations have completed execution, and that
+memory writes from those queue operations are
+<<synchronization-dependencies-available-and-visible,available>> to future
+queue operations.
+Waiting on a signaled semaphore or fence guarantees that previous writes
+that are available are also
+<<synchronization-dependencies-available-and-visible,visible>> to subsequent
+commands.
+
+Command buffer boundaries, both between primary command buffers of the same
+or different batches or submissions as well as between primary and secondary
+command buffers, do not introduce any additional ordering constraints.
+In other words, submitting the set of command buffers (which can: include
+executing secondary command buffers) between any semaphore or fence
+operations execute the recorded commands as if they had all been recorded
+into a single primary command buffer, except that the current state is
+<<commandbuffers-statereset,reset>> on each boundary.
+Explicit ordering constraints can: be expressed with <<synchronization,
+explicit synchronization primitives>>.
+
+There are a few <<synchronization-implicit, implicit ordering guarantees>>
+between commands within a command buffer, but only covering a subset of
+execution.
+Additional explicit ordering constraints can be expressed with the various
+<<synchronization, explicit synchronization primitives>>.
+
+[NOTE]
+.Note
+====
+Implementations have significant freedom to overlap execution of work
+submitted to a queue, and this is common due to deep pipelining and
+parallelism in Vulkan devices.
+====
+
+[[fundamentals-queueoperation-command-types]]
+Commands recorded in command buffers can perform actions, set state that
+persists across commands, synchronize other commands, or indirectly launch
+other commands, with some commands fulfilling several of these roles.
+The "`Command Properties`" section for each such command lists which of
+these roles the command takes.
+State setting commands update the _current state_ of the command buffer.
+Some commands that perform actions (e.g. draw/dispatch) do so based on the
+current state set cumulatively since the start of the command buffer.
+The work involved in performing action commands is often allowed to overlap
+or to be reordered, but doing so must: not alter the state to be used by
+each action command.
+In general, action commands are those commands that alter framebuffer
+attachments, read/write buffer or image memory, or write to query pools.
+
+Synchronization commands introduce explicit
+<<synchronization-dependencies,execution and memory dependencies>> between
+two sets of action commands, where the second set of commands depends on the
+first set of commands.
+These dependencies enforce both that the execution of certain
+<<synchronization-pipeline-stages, pipeline stages>> in the later set occurs
+after the execution of certain stages in the source set, and that the
+effects of <<synchronization-global-memory-barriers,memory accesses>>
+performed by certain pipeline stages occur in order and are visible to each
+other.
+When not enforced by an explicit dependency or <<synchronization-implicit,
+implicit ordering guarantees>>, action commands may: overlap execution or
+execute out of order, and may: not see the side effects of each other's
+memory accesses.
+
+
+[[fundamentals-objectmodel-overview]]
+== Object Model
+
+The devices, queues, and other entities in Vulkan are represented by Vulkan
+objects.
+At the API level, all objects are referred to by handles.
+There are two classes of handles, dispatchable and non-dispatchable.
+_Dispatchable_ handle types are a pointer to an opaque type.
+This pointer may: be used by layers as part of intercepting API commands,
+and thus each API command takes a dispatchable type as its first parameter.
+Each object of a dispatchable type must: have a unique handle value during
+its lifetime.
+
+_Non-dispatchable_ handle types are a 64-bit integer type whose meaning is
+implementation-dependent.
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+If the <<features-privateData, pname:privateData>> feature is enabled for a
+slink:VkDevice, each object of a non-dispatchable type created on that
+device must: have a handle value that is unique among objects created on
+that device, for the duration of the object's lifetime.
+Otherwise, non-dispatchable
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+ifndef::VK_VERSION_1_3,VK_EXT_private_data[Non-dispatchable]
+handles may: encode object information directly in the handle rather than
+acting as a reference to an underlying object, and thus may: not have unique
+handle values.
+If handle values are not unique, then destroying one such handle must: not
+cause identical handles of other types to become invalid, and must: not
+cause identical handles of the same type to become invalid if that handle
+value has been created more times than it has been destroyed.
+
+All objects created or allocated from a sname:VkDevice (i.e. with a
+sname:VkDevice as the first parameter) are private to that device, and must:
+not be used on other devices.
+
+
+[[fundamentals-objectmodel-lifetime]]
+=== Object Lifetime
+
+Objects are created or allocated by ftext:vkCreate* and ftext:vkAllocate*
+commands, respectively.
+Once an object is created or allocated, its "`structure`" is considered to
+be immutable, though the contents of certain object types is still free to
+change.
+Objects are destroyed or freed by ftext:vkDestroy* and ftext:vkFree*
+commands, respectively.
+
+Objects that are allocated (rather than created) take resources from an
+existing pool object or memory heap, and when freed return resources to that
+pool or heap.
+While object creation and destruction are generally expected to be
+low-frequency occurrences during runtime, allocating and freeing objects
+can: occur at high frequency.
+Pool objects help accommodate improved performance of the allocations and
+frees.
+
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, data structures for objects are reserved by the implementation
+at device creation time in order to enable implementations to rely solely on
+static memory management at run-time.
+The slink:VkDeviceObjectReservationCreateInfo structure provides upper
+bounds on the simultaneous number of objects of each type that can: be
+allocated during the lifetime of the slink:VkDevice.
+Most objects can be created and destroyed as needed, provided that no more
+than the requested number are in existence at any point in time.
+endif::VKSC_VERSION_1_0[]
+
+It is an application's responsibility to track the lifetime of Vulkan
+objects, and not to destroy them while they are still in use.
+
+[[fundamentals-objectmodel-lifetime-acquire]]
+The ownership of application-owned memory is immediately acquired by any
+Vulkan command it is passed
+ifndef::VKSC_VERSION_1_0[into.]
+ifdef::VKSC_VERSION_1_0[into, unless otherwise noted below.]
+Ownership of such memory must: be released back to the application at the
+end of the duration of the command,
+ifdef::VK_KHR_deferred_host_operations[]
+unless that command was deferred,
+endif::VK_KHR_deferred_host_operations[]
+so that the application can: alter or free this memory as soon as all the
+commands that acquired it have returned.
+ifdef::VK_KHR_deferred_host_operations[]
+If the command was <<deferred-host-operations-requesting, deferred>>,
+ownership of such memory is released back to the application when the
+deferred operation is complete.
+endif::VK_KHR_deferred_host_operations[]
+
+The following object types are consumed when they are passed into a Vulkan
+command and not further accessed by the objects they are used to create.
+They must: not be destroyed in the duration of any API command they are
+passed into:
+
+ifndef::VKSC_VERSION_1_0[]
+  * sname:VkShaderModule
+endif::VKSC_VERSION_1_0[]
+  * sname:VkPipelineCache
+ifdef::VK_EXT_validation_cache[]
+  * sname:VkValidationCacheEXT
+endif::VK_EXT_validation_cache[]
+
+ifdef::VKSC_VERSION_1_0[]
+A sname:VkPipelineCache object created with
+ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT requires the
+application to maintain the memory contents pointed to by
+sname:VkPipelineCacheCreateInfo::pname:pInitialData for the lifetime of the
+pipeline cache object.
+endif::VKSC_VERSION_1_0[]
+
+A sname:VkRenderPass
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+or sname:VkPipelineLayout
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+object passed as a parameter to create another object is not further
+accessed by that object after the duration of the command it is passed into.
+A sname:VkRenderPass used in a command buffer follows the rules described
+below.
+
+ifndef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+A sname:VkPipelineLayout object must: not be destroyed while any command
+buffer that uses it is in the recording state.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+sname:VkDescriptorSetLayout objects may: be accessed by commands that
+operate on descriptor sets allocated using that layout, and those descriptor
+sets must: not be updated with flink:vkUpdateDescriptorSets after the
+descriptor set layout has been destroyed.
+Otherwise, a sname:VkDescriptorSetLayout object passed as a parameter to
+create another object is not further accessed by that object after the
+duration of the command it is passed into.
+
+The application must: not destroy any other type of Vulkan object until all
+uses of that object by the device (such as via command buffer execution)
+have completed.
+
+[[fundamentals-objectmodel-lifetime-cmdbuffers]]
+The following Vulkan objects must: not be destroyed while any command
+buffers using the object are in the <<commandbuffers-lifecycle, pending
+state>>:
+
+  * sname:VkEvent
+ifndef::VKSC_VERSION_1_0[]
+  * sname:VkQueryPool
+endif::VKSC_VERSION_1_0[]
+  * sname:VkBuffer
+  * sname:VkBufferView
+  * sname:VkImage
+  * sname:VkImageView
+  * sname:VkPipeline
+  * sname:VkSampler
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * sname:VkSamplerYcbcrConversion
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VKSC_VERSION_1_0[]
+  * sname:VkDescriptorPool
+endif::VKSC_VERSION_1_0[]
+  * sname:VkFramebuffer
+  * sname:VkRenderPass
+  * sname:VkCommandBuffer
+ifndef::VKSC_VERSION_1_0[]
+  * sname:VkCommandPool
+  * sname:VkDeviceMemory
+endif::VKSC_VERSION_1_0[]
+  * sname:VkDescriptorSet
+ifdef::VK_NV_device_generated_commands[]
+  * sname:VkIndirectCommandsLayoutNV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_NV_ray_tracing[]
+  * sname:VkAccelerationStructureNV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure[]
+  * sname:VkAccelerationStructureKHR
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_video_queue[]
+  * sname:VkVideoSessionKHR
+  * sname:VkVideoSessionParametersKHR
+endif::VK_KHR_video_queue[]
+
+Destroying these objects will move any command buffers that are in the
+<<commandbuffers-lifecycle, recording or executable state>>, and are using
+those objects, to the <<commandbuffers-lifecycle, invalid state>>.
+
+The following Vulkan objects must: not be destroyed while any queue is
+executing commands that use the object:
+
+  * sname:VkFence
+  * sname:VkSemaphore
+  * sname:VkCommandBuffer
+ifndef::VKSC_VERSION_1_0[]
+  * sname:VkCommandPool
+ifdef::VK_NV_external_sci_sync2[]
+  * sname:VkSemaphoreSciSyncPoolNV
+endif::VK_NV_external_sci_sync2[]
+endif::VKSC_VERSION_1_0[]
+
+In general, objects can: be destroyed or freed in any order, even if the
+object being freed is involved in the use of another object (e.g. use of a
+resource in a view, use of a view in a descriptor set,
+ifdef::VK_KHR_pipeline_library[]
+use of a <<pipelines-library,pipeline library>> in another pipeline,
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_NV_device_generated_commands[]
+use of a <<graphics-shadergroups,referenced pipeline>> for additional
+graphics shader groups in another pipeline,
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_KHR_acceleration_structure[]
+use of a <<acceleration-structure-bottom-level, bottom level acceleration
+structure>> in an instance referenced by a
+<<acceleration-structure-top-level, top level acceleration structure>>,
+endif::VK_KHR_acceleration_structure[]
+use of an object in a command buffer, binding of a memory allocation to a
+resource), as long as any object that uses the freed object is not further
+used in any way except to be destroyed or to be reset in such a way that it
+no longer uses the other object (such as resetting a command buffer).
+If the object has been reset, then it can: be used as if it never used the
+freed object.
+An exception to this is when there is a parent/child relationship between
+objects.
+In this case, the application must: not destroy a parent object before its
+children, except when the parent is explicitly defined to free its children
+when it is destroyed (e.g. for pool objects, as defined below).
+
+sname:VkCommandPool objects are parents of sname:VkCommandBuffer objects.
+sname:VkDescriptorPool objects are parents of sname:VkDescriptorSet objects.
+sname:VkDevice objects are parents of many object types (all that take a
+sname:VkDevice as a parameter to their creation).
+
+The following Vulkan objects have specific restrictions for when they can:
+be destroyed:
+
+  * sname:VkQueue objects cannot: be explicitly destroyed.
+    Instead, they are implicitly destroyed when the sname:VkDevice object
+    they are retrieved from is destroyed.
+ifndef::VKSC_VERSION_1_0[]
+  * Destroying a pool object implicitly frees all objects allocated from
+    that pool.
+    Specifically, destroying sname:VkCommandPool frees all
+    sname:VkCommandBuffer objects that were allocated from it, and
+    destroying sname:VkDescriptorPool frees all sname:VkDescriptorSet
+    objects that were allocated from it.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[fundamentals-objectmodel-no-destroy]] Device memory
+    (slink:VkDeviceMemory) allocations,
+ifdef::VK_KHR_swapchain[swapchains (slink:VkSwapchainKHR),]
+    and pool objects (slink:VkCommandPool, slink:VkDescriptorPool,
+ifdef::VK_NV_external_sci_sync2[slink:VkSemaphoreSciSyncPoolNV,]
+    slink:VkQueryPool) cannot: be explicitly freed or destroyed.
+    Instead, they are implicitly freed or destroyed when the sname:VkDevice
+    object they are created from is destroyed.
+endif::VKSC_VERSION_1_0[]
+  * sname:VkDevice objects can: be destroyed when all sname:VkQueue objects
+    retrieved from them are idle, and all objects created from them have
+    been destroyed.
+  ** This includes the following objects:
++
+--
+  ** sname:VkFence
+  ** sname:VkSemaphore
+  ** sname:VkEvent
+ifndef::VKSC_VERSION_1_0[]
+  ** sname:VkQueryPool
+endif::VKSC_VERSION_1_0[]
+  ** sname:VkBuffer
+  ** sname:VkBufferView
+  ** sname:VkImage
+  ** sname:VkImageView
+ifndef::VKSC_VERSION_1_0[]
+  ** sname:VkShaderModule
+endif::VKSC_VERSION_1_0[]
+  ** sname:VkPipelineCache
+  ** sname:VkPipeline
+  ** sname:VkPipelineLayout
+  ** sname:VkSampler
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** sname:VkSamplerYcbcrConversion
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** sname:VkDescriptorSetLayout
+ifndef::VKSC_VERSION_1_0[]
+  ** sname:VkDescriptorPool
+endif::VKSC_VERSION_1_0[]
+  ** sname:VkFramebuffer
+  ** sname:VkRenderPass
+ifndef::VKSC_VERSION_1_0[]
+  ** sname:VkCommandPool
+endif::VKSC_VERSION_1_0[]
+  ** sname:VkCommandBuffer
+ifndef::VKSC_VERSION_1_0[]
+  ** sname:VkDeviceMemory
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_validation_cache[]
+  ** sname:VkValidationCacheEXT
+endif::VK_EXT_validation_cache[]
+ifdef::VK_NV_ray_tracing[]
+  ** sname:VkAccelerationStructureNV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure[]
+  ** sname:VkAccelerationStructureKHR
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_video_queue[]
+  ** sname:VkVideoSessionKHR
+  ** sname:VkVideoSessionParametersKHR
+endif::VK_KHR_video_queue[]
+--
+ifdef::VKSC_VERSION_1_0[]
+  ** This does not include objects that do not have corresponding free or
+     destroy commands.
+     If
+     slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,
+     pname:deviceDestroyFreesMemory>> is ename:VK_TRUE, the memory from
+     these objects is returned to the system when the device is destroyed,
+     otherwise it may: not be returned to the system until the process is
+     terminated.
+endif::VKSC_VERSION_1_0[]
+  * sname:VkPhysicalDevice objects cannot: be explicitly destroyed.
+    Instead, they are implicitly destroyed when the sname:VkInstance object
+    they are retrieved from is destroyed.
+  * sname:VkInstance objects can: be destroyed once all sname:VkDevice
+    objects created from any of its sname:VkPhysicalDevice objects have been
+    destroyed.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+[[fundamentals-objectmodel-external]]
+=== External Object Handles
+
+As defined above, the scope of object handles created or allocated from a
+sname:VkDevice is limited to that logical device.
+Objects which are not in scope are said to be external.
+To bring an external object into scope, an external handle must: be exported
+from the object in the source scope and imported into the destination scope.
+
+[NOTE]
+.Note
+====
+The scope of external handles and their associated resources may: vary
+according to their type, but they can: generally be shared across process
+and API boundaries.
+====
+endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilities,VK_KHR_external_fence_capabilities[]
+
+
+[[fundamentals-abi]]
+== Application Binary Interface
+
+The mechanism by which Vulkan is made available to applications is platform-
+or implementation- defined.
+On many platforms the C interface described in this Specification is
+provided by a shared library.
+Since shared libraries can be changed independently of the applications that
+use them, they present particular compatibility challenges, and this
+Specification places some requirements on them.
+
+Shared library implementations must: use the default Application Binary
+Interface (ABI) of the standard C compiler for the platform, or provide
+customized API headers that cause application code to use the
+implementation's non-default ABI.
+An ABI in this context means the size, alignment, and layout of C data
+types; the procedure calling convention; and the naming convention for
+shared library symbols corresponding to C functions.
+Customizing the calling convention for a platform is usually accomplished by
+defining <<boilerplate-platform-specific-calling-conventions,calling
+convention macros>> appropriately in `vk_platform.h`.
+
+On platforms where Vulkan is provided as a shared library, library symbols
+beginning with "`vk`" and followed by a digit or uppercase letter are
+reserved for use by the implementation.
+Applications which use Vulkan must: not provide definitions of these
+symbols.
+This allows the Vulkan shared library to be updated with additional symbols
+for new API versions or extensions without causing symbol conflicts with
+existing applications.
+
+Shared library implementations should: provide library symbols for commands
+in the highest version of this Specification they support, and for
+ifdef::VK_KHR_surface[]
+<<wsi,Window System Integration>>
+endif::VK_KHR_surface[]
+ifndef::VK_KHR_surface[]
+Window System Integration
+endif::VK_KHR_surface[]
+extensions relevant to the platform.
+They may: also provide library symbols for commands defined by additional
+extensions.
+
+[NOTE]
+.Note
+====
+These requirements and recommendations are intended to allow implementors to
+take advantage of platform-specific conventions for SDKs, ABIs, library
+versioning mechanisms, etc.
+while still minimizing the code changes necessary to port applications or
+libraries between platforms.
+Platform vendors, or providers of the _de facto_ standard Vulkan shared
+library for a platform, are encouraged to document what symbols the shared
+library provides and how it will be versioned when new symbols are added.
+
+Applications should: only rely on shared library symbols for commands in the
+minimum core version required by the application.
+flink:vkGetInstanceProcAddr and flink:vkGetDeviceProcAddr should: be used to
+obtain function pointers for commands in core versions beyond the
+application's minimum required version.
+====
+
+
+[[fundamentals-commandsyntax]]
+== Command Syntax and Duration
+
+The Specification describes Vulkan commands as functions or procedures using
+C99 syntax.
+Language bindings for other languages such as C++ and JavaScript may: allow
+for stricter parameter passing, or object-oriented interfaces.
+
+Vulkan uses the standard C types for the base type of scalar parameters
+(e.g. types from `<stdint.h>`), with exceptions described below, or
+elsewhere in the text when appropriate:
+
+[open,refpage='VkBool32',desc='Vulkan boolean type',type='basetypes',xrefs='VK_TRUE VK_FALSE']
+--
+basetype:VkBool32 represents boolean `True` and `False` values, since C does
+not have a sufficiently portable built-in boolean type:
+
+include::{generated}/api/basetypes/VkBool32.adoc[]
+
+ename:VK_TRUE represents a boolean *True* (unsigned integer 1) value, and
+ename:VK_FALSE a boolean *False* (unsigned integer 0) value.
+
+All values returned from a Vulkan implementation in a basetype:VkBool32 will
+be either ename:VK_TRUE or ename:VK_FALSE.
+
+Applications must: not pass any other values than ename:VK_TRUE or
+ename:VK_FALSE into a Vulkan implementation where a basetype:VkBool32 is
+expected.
+--
+
+[open,refpage='VK_TRUE',desc='Boolean true value',type='consts',xrefs='VkBool32 VK_FALSE']
+--
+ename:VK_TRUE is a constant representing a basetype:VkBool32 *True* value.
+
+include::{generated}/api/enums/VK_TRUE.adoc[]
+--
+
+[open,refpage='VK_FALSE',desc='Boolean false value',type='consts',xrefs='VkBool32 VK_TRUE']
+--
+ename:VK_FALSE is a constant representing a basetype:VkBool32 *False* value.
+
+include::{generated}/api/enums/VK_FALSE.adoc[]
+--
+
+
+[open,refpage='VkDeviceSize',desc='Vulkan device memory size and offsets',type='basetypes']
+--
+basetype:VkDeviceSize represents device memory size and offset values:
+
+include::{generated}/api/basetypes/VkDeviceSize.adoc[]
+--
+
+ifdef::VK_VERSION_1_0,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+[open,refpage='VkDeviceAddress',desc='Vulkan device address type',type='basetypes']
+--
+basetype:VkDeviceAddress represents device buffer address values:
+
+include::{generated}/api/basetypes/VkDeviceAddress.adoc[]
+--
+endif::VK_VERSION_1_0,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+
+Commands that create Vulkan objects are of the form ftext:vkCreate* and take
+stext:Vk*CreateInfo structures with the parameters needed to create the
+object.
+These Vulkan objects are destroyed with commands of the form
+ftext:vkDestroy*.
+
+The last in-parameter to each command that creates or destroys a Vulkan
+object is pname:pAllocator.
+ifndef::VKSC_VERSION_1_0[]
+The pname:pAllocator parameter can: be set to a non-`NULL` value such that
+allocations for the given object are delegated to an application provided
+callback; refer to the <<memory-allocation,Memory Allocation>> chapter for
+further details.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+The pname:pAllocator parameter must: be set to `NULL`.
+Refer to the <<memory-allocation,Memory Allocation>> chapter for further
+details.
+endif::VKSC_VERSION_1_0[]
+
+Commands that allocate Vulkan objects owned by pool objects are of the form
+ftext:vkAllocate*, and take stext:Vk*AllocateInfo structures.
+These Vulkan objects are freed with commands of the form ftext:vkFree*.
+These objects do not take allocators; if host memory is needed, they will
+use the allocator that was specified when their parent pool was created.
+
+Commands are recorded into a command buffer by calling API commands of the
+form ftext:vkCmd*.
+Each such command may: have different restrictions on where it can: be used:
+in a primary and/or secondary command buffer, inside and/or outside a render
+pass, and in one or more of the supported queue types.
+These restrictions are documented together with the definition of each such
+command.
+
+The _duration_ of a Vulkan command refers to the interval between calling
+the command and its return to the caller.
+
+
+[[fundamentals-commandsyntax-results-lifetime]]
+=== Lifetime of Retrieved Results
+
+Information is retrieved from the implementation with commands of the form
+ftext:vkGet* and ftext:vkEnumerate*.
+
+Unless otherwise specified for an individual command, the results are
+_invariant_; that is, they will remain unchanged when retrieved again by
+calling the same command with the same parameters, so long as those
+parameters themselves all remain valid.
+
+
+[[fundamentals-threadingbehavior]]
+== Threading Behavior
+
+Vulkan is intended to provide scalable performance when used on multiple
+host threads.
+All commands support being called concurrently from multiple threads, but
+certain parameters, or components of parameters are defined to be
+_externally synchronized_.
+This means that the caller must: guarantee that no more than one thread is
+using such a parameter at a given time.
+
+More precisely, Vulkan commands use simple stores to update the state of
+Vulkan objects.
+A parameter declared as externally synchronized may: have its contents
+updated at any time during the host execution of the command.
+If two commands operate on the same object and at least one of the commands
+declares the object to be externally synchronized, then the caller must:
+guarantee not only that the commands do not execute simultaneously, but also
+that the two commands are separated by an appropriate memory barrier (if
+needed).
+
+[NOTE]
+.Note
+====
+Memory barriers are particularly relevant for hosts based on the ARM CPU
+architecture, which is more weakly ordered than many developers are
+accustomed to from x86/x64 programming.
+Fortunately, most higher-level synchronization primitives (like the pthread
+library) perform memory barriers as a part of mutual exclusion, so mutexing
+Vulkan objects via these primitives will have the desired effect.
+====
+
+Similarly the application must: avoid any potential data hazard of
+application-owned memory that has its
+<<fundamentals-objectmodel-lifetime-acquire,ownership temporarily acquired>>
+by a Vulkan command.
+While the ownership of application-owned memory remains acquired by a
+command the implementation may: read the memory at any point, and it may:
+write non-code:const qualified memory at any point.
+Parameters referring to non-code:const qualified application-owned memory
+are not marked explicitly as _externally synchronized_ in the Specification.
+
+ifdef::VK_KHR_deferred_host_operations[]
+If an application is using <<deferred-host-operations, deferred host
+operations>> in a command, and that operation is successfully deferred,
+object parameters and application-owned memory passed to that command may:
+be accessed at any time until the deferred operation is complete.
+endif::VK_KHR_deferred_host_operations[]
+
+Many object types are _immutable_, meaning the objects cannot: change once
+they have been created.
+These types of objects never need external synchronization, except that they
+must: not be destroyed while they are in use on another thread.
+In certain special cases mutable object parameters are internally
+synchronized, making external synchronization unnecessary.
+Any command parameters that are not labeled as externally synchronized are
+either not mutated by the command or are internally synchronized.
+Additionally, certain objects related to a command's parameters (e.g.
+command pools and descriptor pools) may: be affected by a command, and must:
+also be externally synchronized.
+These implicit parameters are documented as described below.
+
+Parameters of commands that are externally synchronized are listed below.
+
+include::{generated}/hostsynctable/parameters.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+For slink:VkPipelineCache objects created with pname:flags containing
+ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, the above table
+is extended with the pname:pipelineCache parameter to
+ftext:vkCreate*Pipelines being externally synchronized.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+There are also a few instances where a command can: take in a user allocated
+list whose contents are externally synchronized parameters.
+In these cases, the caller must: guarantee that at most one thread is using
+a given element within the list at a given time.
+These parameters are listed below.
+
+include::{generated}/hostsynctable/parameterlists.adoc[]
+
+In addition, there are some implicit parameters that need to be externally
+synchronized.
+For example, when a pname:commandBuffer parameter needs to be externally
+synchronized, it implies that the pname:commandPool from which that command
+buffer was allocated also needs to be externally synchronized.
+The implicit parameters and their associated object are listed below.
+
+include::{generated}/hostsynctable/implicit.adoc[]
+
+
+[[fundamentals-validusage]]
+== Valid Usage
+
+// preserving old id for permalinking
+[[fundamentals-errors]]
+Valid usage defines a set of conditions which must: be met in order to
+achieve well-defined runtime behavior in an application.
+These conditions depend only on Vulkan state, and the parameters or objects
+whose usage is constrained by the condition.
+
+The core layer assumes applications are using the API correctly.
+Except as documented elsewhere in the Specification, the behavior of the
+core layer to an application using the API incorrectly is undefined:, and
+may: include program termination.
+However, implementations must: ensure that incorrect usage by an application
+does not affect the integrity of the operating system, the Vulkan
+implementation, or other Vulkan client applications in the system.
+In particular, any guarantees made by an operating system about whether
+memory from one process can: be visible to another process or not must: not
+be violated by a Vulkan implementation for *any memory allocation*.
+Vulkan implementations are not required: to make additional security or
+integrity guarantees beyond those provided by the OS unless explicitly
+directed by the application's use of a particular feature or extension.
+
+[NOTE]
+.Note
+====
+For instance, if an operating system guarantees that data in all its memory
+allocations are set to zero when newly allocated, the Vulkan implementation
+must: make the same guarantees for any allocations it controls (e.g.
+slink:VkDeviceMemory).
+
+Similarly, if an operating system guarantees that use-after-free of host
+allocations will not result in values written by another process becoming
+visible, the same guarantees must: be made by the Vulkan implementation for
+device memory.
+====
+
+ifdef::VK_VERSION_1_1[]
+If the <<features-protectedMemory, pname:protectedMemory>> feature is
+supported, the implementation provides additional guarantees when invalid
+usage occurs to prevent values in protected memory from being accessed or
+inferred outside of protected operations, as described in
+<<memory-protected-access-rules>>.
+endif::VK_VERSION_1_1[]
+
+Some valid usage conditions have dependencies on runtime limits or feature
+availability.
+It is possible to validate these conditions against Vulkan's minimum
+supported values for these limits and features, or some subset of other
+known values.
+
+Valid usage conditions do not cover conditions where well-defined behavior
+(including returning an error code) exists.
+
+Valid usage conditions should: apply to the command or structure where
+complete information about the condition would be known during execution of
+an application.
+This is such that a validation layer or linter can: be written directly
+against these statements at the point they are specified.
+
+[NOTE]
+.Note
+====
+This does lead to some non-obvious places for valid usage statements.
+For instance, the valid values for a structure might depend on a separate
+value in the calling command.
+In this case, the structure itself will not reference this valid usage as it
+is impossible to determine validity from the structure that it is invalid -
+instead this valid usage would be attached to the calling command.
+
+Another example is draw state - the state setters are independent, and can
+cause a legitimately invalid state configuration between draw calls; so the
+valid usage statements are attached to the place where all state needs to be
+valid - at the drawing command.
+====
+
+Valid usage conditions are described in a block labelled "`Valid Usage`"
+following each command or structure they apply to.
+
+
+[[fundamentals-validation]]
+=== Usage Validation
+
+Vulkan is a layered API.
+The lowest layer is the core Vulkan layer, as defined by this Specification.
+The application can: use additional layers above the core for debugging,
+validation, and other purposes.
+
+One of the core principles of Vulkan is that building and submitting command
+buffers should: be highly efficient.
+Thus error checking and validation of state in the core layer is minimal,
+although more rigorous validation can: be enabled through the use of layers.
+
+Validation of correct API usage is left to validation layers.
+Applications should: be developed with validation layers enabled, to help
+catch and eliminate errors.
+ifndef::VKSC_VERSION_1_0[]
+Once validated, released applications should: not enable validation layers
+by default.
+endif::VKSC_VERSION_1_0[]
+
+
+[[fundamentals-implicit-validity]]
+=== Implicit Valid Usage
+
+Some valid usage conditions apply to all commands and structures in the API,
+unless explicitly denoted otherwise for a specific command or structure.
+These conditions are considered _implicit_, and are described in a block
+labelled "`Valid Usage (Implicit)`" following each command or structure they
+apply to.
+Implicit valid usage conditions are described in detail below.
+
+
+[[fundamentals-validusage-handles]]
+==== Valid Usage for Object Handles
+
+Any input parameter to a command that is an object handle must: be a valid
+object handle, unless otherwise specified.
+An object handle is valid if:
+
+  * It has been created or allocated by a previous, successful call to the
+    API.
+    Such calls are noted in the Specification.
+  * It has not been deleted or freed by a previous call to the API.
+    Such calls are noted in the Specification.
+  * Any objects used by that object, either as part of creation or
+    execution, must: also be valid.
+
+The reserved values dlink:VK_NULL_HANDLE and `NULL` can: be used in place of
+valid non-dispatchable handles and dispatchable handles, respectively, when
+_explicitly called out in the Specification_.
+Any command that creates an object successfully must: not return these
+values.
+It is valid to pass these values to ftext:vkDestroy* or ftext:vkFree*
+commands, which will silently ignore these values.
+
+
+[[fundamentals-validusage-pointers]]
+==== Valid Usage for Pointers
+
+Any parameter that is a pointer must: be a _valid pointer_ only if it is
+explicitly called out by a Valid Usage statement.
+
+A pointer is "`valid`" if it points at memory containing values of the
+number and type(s) expected by the command, and all fundamental types
+accessed through the pointer (e.g. as elements of an array or as members of
+a structure) satisfy the alignment requirements of the host processor.
+
+
+[[fundamentals-validusage-strings]]
+==== Valid Usage for Strings
+
+Any parameter that is a pointer to `char` must: be a finite sequence of
+values terminated by a null character, or if _explicitly called out in the
+Specification_, can: be `NULL`.
+
+
+[[fundamentals-validusage-enums]]
+==== Valid Usage for Enumerated Types
+
+Any parameter of an enumerated type must: be a valid enumerant for that
+type.
+Use of an enumerant is valid if the following conditions are true:
+
+  * The enumerant is defined as part of the enumerated type.
+  * The enumerant is not a value suffixed with etext:_MAX_ENUM.
+  ** This value exists only to ensure that C `enum` types are 32 bits in
+     size and must: not be used by applications.
+  * If the enumerant is used in a function that has a slink:VkInstance as
+    its first parameter and either:
+  ** it was added by a core version that is supported
+ifdef::VK_VERSION_1_1[]
+     (as reported by flink:vkEnumerateInstanceVersion)
+endif::VK_VERSION_1_1[]
+     and the value of slink:VkApplicationInfo::pname:apiVersion is greater
+     than or equal to the version that added it; or
+  ** it was added by an <<extensions, instance extension>> that was enabled
+     for the instance.
+  * If the enumerant is used in a function that has a slink:VkPhysicalDevice
+    object as its first parameter and either:
+  ** it was added by a core version that is supported by that device (as
+     reported by slink:VkPhysicalDeviceProperties::pname:apiVersion);
+  ** it was added by an <<extensions, instance extension>> that was enabled
+     for the instance; or
+  ** it was added by a <<extensions, device extension>> that is supported by
+     that device.
+  * If the enumerant is used in a function that has any other dispatchable
+    object as its first parameter and either:
+  ** it was added by a core version that is supported for the device (as
+     reported by slink:VkPhysicalDeviceProperties::pname:apiVersion); or
+  ** it was added by a <<extensions, device extension>> that was enabled for
+     the device.
+
+ifdef::VK_KHR_maintenance5[]
+Additionally, if <<features-maintenance5,pname:maintenance5>> is supported,
+any integer value representable in the range valid for the defined type is
+valid when used in a function that has a slink:VkPhysicalDevice object as
+its first parameter.
+Physical device queries will either return results indicating lack of
+support, or ignore unsupported values when used as a bit flag in a
+etext:Vk*Flags* parameter.
+endif::VK_KHR_maintenance5[]
+
+Any enumerated type returned from a query command or otherwise output from
+Vulkan to the application must: not have a reserved value.
+Reserved values are values not defined by any extension for that enumerated
+type.
+
+[NOTE]
+.Note
+====
+In some special cases, an enumerant is only meaningful if a feature defined
+by an extension is also enabled, as well as the extension itself.
+The global "`valid enumerant`" rule described here does not address such
+cases.
+====
+
+[NOTE]
+.Note
+====
+This language is intended to accommodate cases such as "`hidden`" extensions
+known only to driver internals, or layers enabling extensions without
+knowledge of the application, without allowing return of values not defined
+by any extension.
+====
+
+[NOTE]
+.Note
+====
+Application developers are encouraged to be careful when using `switch`
+statements with Vulkan API enums.
+This is because new extensions can add new values to existing enums.
+Using a `default:` statement within a `switch` may avoid future compilation
+issues.
+
+ifdef::VK_VERSION_1_2[]
+This is particularly true for enums such as elink:VkDriverId, which may have
+values added that do not belong to a corresponding new extension.
+endif::VK_VERSION_1_2[]
+====
+
+
+[[fundamentals-validusage-flags]]
+==== Valid Usage for Flags
+
+[open,refpage='VkFlags',desc='Vulkan bitmasks',type='basetypes',xrefs='VkColorComponentFlags VkFlags64']
+--
+A collection of flags is represented by a bitmask using the type
+basetype:VkFlags:
+
+include::{generated}/api/basetypes/VkFlags.adoc[]
+
+Bitmasks are passed to many commands and structures to compactly represent
+options, but basetype:VkFlags is not used directly in the API.
+Instead, a etext:Vk*Flags type which is an alias of basetype:VkFlags, and
+whose name matches the corresponding etext:Vk*FlagBits that are valid for
+that type, is used.
+
+Any etext:Vk*Flags member or parameter used in the API as an input must: be
+a valid combination of bit flags.
+A valid combination is either zero or the bitwise OR of valid bit flags.
+
+An individual bit flag is valid for a etext:Vk*Flags type if it would be a
+<<fundamentals-validusage-enums,valid enumerant>> when used with the
+equivalent etext:Vk*FlagBits type, where the bits type is obtained by taking
+the flag type and replacing the trailing etext:Flags with etext:FlagBits.
+For example, a flag value of type tlink:VkColorComponentFlags must: contain
+only bit flags defined by elink:VkColorComponentFlagBits.
+
+Any etext:Vk*Flags member or parameter returned from a query command or
+otherwise output from Vulkan to the application may: contain bit flags
+undefined: in its corresponding etext:Vk*FlagBits type.
+An application cannot: rely on the state of these unspecified bits.
+
+Only the low-order 31 bits (bit positions zero through 30) are available for
+use as flag bits.
+
+[NOTE]
+.Note
+====
+This restriction is due to poorly defined behavior by C compilers given a C
+enumerant value of `0x80000000`.
+In some cases adding this enumerant value may increase the size of the
+underlying etext:Vk*FlagBits type, breaking the ABI.
+====
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2,VK_KHR_synchronization2[]
+[open,refpage='VkFlags64',desc='Vulkan 64-bit bitmasks',type='basetypes',xrefs='VkFlags']
+--
+A collection of 64-bit flags is represented by a bitmask using the type
+basetype:VkFlags64:
+
+include::{generated}/api/basetypes/VkFlags64.adoc[]
+
+When the 31 bits available in basetype:VkFlags are insufficient, the
+basetype:VkFlags64 type can be passed to commands and structures to
+represent up to 64 options.
+basetype:VkFlags64 is not used directly in the API.
+Instead, a etext:Vk*Flags2 type which is an alias of basetype:VkFlags64, and
+whose name matches the corresponding etext:Vk*FlagBits2 that are valid for
+that type, is used.
+
+Any etext:Vk*Flags2 member or parameter used in the API as an input must: be
+a valid combination of bit flags.
+A valid combination is either zero or the bitwise OR of valid bit flags.
+
+An individual bit flag is valid for a etext:Vk*Flags2 type if it would be a
+<<fundamentals-validusage-enums,valid enumerant>> when used with the
+equivalent etext:Vk*FlagBits2 type, where the bits type is obtained by
+taking the flag type and replacing the trailing etext:Flags2 with
+etext:FlagBits2.
+For example, a flag value of type tlink:VkAccessFlags2KHR must: contain only
+bit flags defined by elink:VkAccessFlagBits2KHR.
+
+Any etext:Vk*Flags2 member or parameter returned from a query command or
+otherwise output from Vulkan to the application may: contain bit flags
+undefined: in its corresponding etext:Vk*FlagBits2 type.
+An application cannot: rely on the state of these unspecified bits.
+
+[NOTE]
+.Note
+====
+Both the etext:Vk*FlagBits2 type, and the individual bits defined for that
+type, are defined as `uint64_t` integers in the C API.
+This is in contrast to the 32-bit types, where the etext:Vk*FlagBits type is
+defined as a C `enum` and the individual bits as enumerants belonging to
+that `enum`.
+As a result, there is less compile time type checking possible for the
+64-bit types.
+This is unavoidable since there is no sufficiently portable way to define a
+64-bit `enum` type in C99.
+====
+--
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2,VK_KHR_synchronization2[]
+
+
+[[fundamentals-validusage-sType]]
+==== Valid Usage for Structure Types
+
+Any parameter that is a structure containing a pname:sType member must: have
+a value of ptext:sType which is a valid elink:VkStructureType value matching
+the type of the structure.
+
+
+[[fundamentals-validusage-pNext]]
+==== Valid Usage for Structure Pointer Chains
+
+Any parameter that is a structure containing a code:void* ptext:pNext member
+must: have a value of pname:pNext that is either `NULL`, or is a pointer to
+a valid _extending structure_, containing ptext:sType and ptext:pNext
+members as described in the <<vulkan-styleguide,Vulkan Documentation and
+Extensions>> document in the section "`Extending Structures`".
+The set of structures connected by ptext:pNext pointers is referred to as a
+_pname:pNext chain_.
+
+Each structure included in the pname:pNext chain must: be defined at runtime
+by either:
+
+  * a core version which is supported
+  * an extension which is enabled
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * a supported device extension in the case of physical-device-level
+functionality added by the device extension
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+Each type of extending structure must: not appear more than once in a
+ptext:pNext chain, including any
+<<extendingvulkan-compatibility-aliases,aliases>>.
+This general rule may be explicitly overridden for specific structures.
+
+Any component of the implementation (the loader, any enabled layers, and
+drivers) must: skip over, without processing (other than reading the
+pname:sType and pname:pNext members) any extending structures in the chain
+not defined by core versions or extensions supported by that component.
+
+As a convenience to implementations and layers needing to iterate through a
+structure pointer chain, the Vulkan API provides two _base structures_.
+These structures allow for some type safety, and can be used by Vulkan API
+functions that operate on generic inputs and outputs.
+
+[open,refpage='VkBaseInStructure',desc='Base structure for a read-only pointer chain',type='structs']
+--
+The sname:VkBaseInStructure structure is defined as:
+
+include::{generated}/api/structs/VkBaseInStructure.adoc[]
+
+  * pname:sType is the structure type of the structure being iterated
+    through.
+  * pname:pNext is `NULL` or a pointer to the next structure in a structure
+    chain.
+
+sname:VkBaseInStructure can be used to facilitate iterating through a
+read-only structure pointer chain.
+--
+
+[open,refpage='VkBaseOutStructure',desc='Base structure for a read-only pointer chain',type='structs']
+--
+The sname:VkBaseOutStructure structure is defined as:
+
+include::{generated}/api/structs/VkBaseOutStructure.adoc[]
+
+  * pname:sType is the structure type of the structure being iterated
+    through.
+  * pname:pNext is `NULL` or a pointer to the next structure in a structure
+    chain.
+
+sname:VkBaseOutStructure can be used to facilitate iterating through a
+structure pointer chain that returns data back to the application.
+--
+
+
+[[fundamentals-validusage-nested-structs]]
+==== Valid Usage for Nested Structures
+
+The above conditions also apply recursively to members of structures
+provided as input to a command, either as a direct argument to the command,
+or themselves a member of another structure.
+
+Specifics on valid usage of each command are covered in their individual
+sections.
+
+
+[[fundamentals-validusage-extensions]]
+==== Valid Usage for Extensions
+
+Instance-level functionality or behavior added by an <<extensions, instance
+extension>> to the API must: not be used unless that extension is supported
+by the instance as determined by
+flink:vkEnumerateInstanceExtensionProperties, and that extension is enabled
+in slink:VkInstanceCreateInfo.
+
+Physical-device-level functionality or behavior added by an <<extensions,
+instance extension>> to the API must: not be used unless that extension is
+supported by the instance as determined by
+flink:vkEnumerateInstanceExtensionProperties, and that extension is enabled
+in slink:VkInstanceCreateInfo.
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+Physical-device-level functionality or behavior added by a <<extensions,
+device extension>> to the API must: not be used unless the conditions
+described in <<initialization-phys-dev-extensions, Extending Physical Device
+Core Functionality>> are met.
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+Device-level functionality added by a <<extensions, device extension>> that
+is dispatched from a slink:VkDevice, or from a child object of a
+slink:VkDevice must: not be used unless that extension is supported by the
+device as determined by flink:vkEnumerateDeviceExtensionProperties, and that
+extension is enabled in slink:VkDeviceCreateInfo.
+
+[[fundamentals-validusage-versions]]
+==== Valid Usage for Newer Core Versions
+
+ifdef::VK_VERSION_1_1[]
+
+Instance-level functionality or behavior added by a <<versions, new core
+version>> of the API must: not be used unless it is supported by the
+instance as determined by flink:vkEnumerateInstanceVersion and the specified
+version of slink:VkApplicationInfo::pname:apiVersion.
+
+endif::VK_VERSION_1_1[]
+
+Physical-device-level functionality or behavior added by a <<versions, new
+core version>> of the API must: not be used unless it is supported by the
+physical device as determined by
+slink:VkPhysicalDeviceProperties::pname:apiVersion and the specified version
+of slink:VkApplicationInfo::pname:apiVersion.
+
+Device-level functionality or behavior added by a <<versions, new core
+version>> of the API must: not be used unless it is supported by the device
+as determined by slink:VkPhysicalDeviceProperties::pname:apiVersion and the
+specified version of slink:VkApplicationInfo::pname:apiVersion.
+
+
+[[fundamentals-returncodes]]
+== `VkResult` Return Codes
+
+[open,refpage='VkResult',desc='Vulkan command return codes',type='enums']
+--
+While the core Vulkan API is not designed to capture incorrect usage, some
+circumstances still require return codes.
+Commands in Vulkan return their status via return codes that are in one of
+two categories:
+
+  * Successful completion codes are returned when a command needs to
+    communicate success or status information.
+    All successful completion codes are non-negative values.
+  * Run time error codes are returned when a command needs to communicate a
+    failure that could only be detected at runtime.
+    All runtime error codes are negative values.
+
+All return codes in Vulkan are reported via elink:VkResult return values.
+The possible codes are:
+
+include::{generated}/api/enums/VkResult.adoc[]
+
+[[fundamentals-successcodes]]
+.Success Codes
+  * ename:VK_SUCCESS Command successfully completed
+  * ename:VK_NOT_READY A fence or query has not yet completed
+  * ename:VK_TIMEOUT A wait operation has not completed in the specified
+    time
+  * ename:VK_EVENT_SET An event is signaled
+  * ename:VK_EVENT_RESET An event is unsignaled
+  * ename:VK_INCOMPLETE A return array was too small for the result
+ifdef::VK_KHR_swapchain[]
+  * ename:VK_SUBOPTIMAL_KHR A swapchain no longer matches the surface
+    properties exactly, but can: still be used to present to the surface
+    successfully.
+endif::VK_KHR_swapchain[]
+ifdef::VK_KHR_deferred_host_operations[]
+  * ename:VK_THREAD_IDLE_KHR A deferred operation is not complete but there
+    is currently no work for this thread to do at the time of this call.
+  * ename:VK_THREAD_DONE_KHR A deferred operation is not complete but there
+    is no work remaining to assign to additional threads.
+  * ename:VK_OPERATION_DEFERRED_KHR A deferred operation was requested and
+    at least some of the work was deferred.
+  * ename:VK_OPERATION_NOT_DEFERRED_KHR A deferred operation was requested
+    and no operations were deferred.
+endif::VK_KHR_deferred_host_operations[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_COMPILE_REQUIRED A requested pipeline creation would
+    have required compilation, but the application requested compilation to
+    not be performed.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+[[fundamentals-errorcodes]]
+.Error codes
+  * ename:VK_ERROR_OUT_OF_HOST_MEMORY A host memory allocation has failed.
+  * ename:VK_ERROR_OUT_OF_DEVICE_MEMORY A device memory allocation has
+    failed.
+  * ename:VK_ERROR_INITIALIZATION_FAILED Initialization of an object could
+    not be completed for implementation-specific reasons.
+  * ename:VK_ERROR_DEVICE_LOST The logical or physical device has been lost.
+    See <<devsandqueues-lost-device,Lost Device>>
+  * ename:VK_ERROR_MEMORY_MAP_FAILED Mapping of a memory object has failed.
+  * ename:VK_ERROR_LAYER_NOT_PRESENT A requested layer is not present or
+    could not be loaded.
+  * ename:VK_ERROR_EXTENSION_NOT_PRESENT A requested extension is not
+    supported.
+  * ename:VK_ERROR_FEATURE_NOT_PRESENT A requested feature is not supported.
+  * ename:VK_ERROR_INCOMPATIBLE_DRIVER The requested version of Vulkan is
+    not supported by the driver or is otherwise incompatible for
+    implementation-specific reasons.
+  * ename:VK_ERROR_TOO_MANY_OBJECTS Too many objects of the type have
+    already been created.
+  * ename:VK_ERROR_FORMAT_NOT_SUPPORTED A requested format is not supported
+    on this device.
+  * ename:VK_ERROR_FRAGMENTED_POOL A pool allocation has failed due to
+    fragmentation of the pool's memory.
+    This must: only be returned if no attempt to allocate host or device
+    memory was made to accommodate the new allocation.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+    This should: be returned in preference to
+    ename:VK_ERROR_OUT_OF_POOL_MEMORY, but only if the implementation is
+    certain that the pool allocation failure was due to fragmentation.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_KHR_surface[]
+  * ename:VK_ERROR_SURFACE_LOST_KHR A surface is no longer available.
+  * ename:VK_ERROR_NATIVE_WINDOW_IN_USE_KHR The requested window is already
+    in use by Vulkan or another API in a manner which prevents it from being
+    used again.
+endif::VK_KHR_surface[]
+ifdef::VK_KHR_swapchain[]
+  * ename:VK_ERROR_OUT_OF_DATE_KHR A surface has changed in such a way that
+    it is no longer compatible with the swapchain, and further presentation
+    requests using the swapchain will fail.
+    Applications must: query the new surface properties and recreate their
+    swapchain if they wish to continue presenting to the surface.
+endif::VK_KHR_swapchain[]
+ifdef::VK_KHR_display_swapchain[]
+  * ename:VK_ERROR_INCOMPATIBLE_DISPLAY_KHR The display used by a swapchain
+    does not use the same presentable image layout, or is incompatible in a
+    way that prevents sharing an image.
+endif::VK_KHR_display_swapchain[]
+ifdef::VK_NV_glsl_shader[]
+  * ename:VK_ERROR_INVALID_SHADER_NV One or more shaders failed to compile
+    or link.
+    More details are reported back to the application via
+    `apiext:VK_EXT_debug_report` if enabled.
+endif::VK_NV_glsl_shader[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * ename:VK_ERROR_OUT_OF_POOL_MEMORY A pool memory allocation has failed.
+    This must: only be returned if no attempt to allocate host or device
+    memory was made to accommodate the new allocation.
+    If the failure was definitely due to fragmentation of the pool,
+    ename:VK_ERROR_FRAGMENTED_POOL should: be returned instead.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_external_fence[]
+  * ename:VK_ERROR_INVALID_EXTERNAL_HANDLE An external handle is not a valid
+    handle of the specified type.
+endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_external_fence[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * ename:VK_ERROR_FRAGMENTATION A descriptor pool creation has failed due
+    to fragmentation.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_EXT_buffer_device_address[]
+  * ename:VK_ERROR_INVALID_DEVICE_ADDRESS_EXT A buffer creation failed
+    because the requested address is not available.
+endif::VK_EXT_buffer_device_address[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS A buffer creation
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+    or memory allocation
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+    failed because the requested address is not available.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+    A shader group handle assignment failed because the requested shader
+    group handle information is no longer valid.
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_full_screen_exclusive[]
+  * ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT An operation on a
+    swapchain created with
+    ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT failed as it
+    did not have exclusive full-screen access.
+    This may: occur due to implementation-dependent reasons, outside of the
+    application's control.
+endif::VK_EXT_full_screen_exclusive[]
+ifdef::VKSC_VERSION_1_0,VK_EXT_debug_report[]
+ifdef::VKSC_VERSION_1_0[]
+  * ename:VK_ERROR_VALIDATION_FAILED
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_debug_report[]
+  * ename:VK_ERROR_VALIDATION_FAILED_EXT
+endif::VK_EXT_debug_report[]
+    A command failed because invalid usage was detected by the
+    implementation or a validation-layer.
+endif::VKSC_VERSION_1_0,VK_EXT_debug_report[]
+ifdef::VKSC_VERSION_1_0[]
+  * ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA The supplied pipeline cache
+    data was not valid for the current implementation.
+  * ename:VK_ERROR_NO_PIPELINE_MATCH The implementation did not find a match
+    in the pipeline cache for the specified pipeline, or
+    slink:VkPipelineOfflineCreateInfo was not provided to the
+    ftext:vkCreate*Pipelines function.
+ifdef::hidden[]
+// tag::scaddition[]
+  * extending elink:VkResult
+  ** ename:VK_ERROR_VALIDATION_FAILED <<SCID-1>>
+  ** ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA <<SCID-1>>
+  ** ename:VK_ERROR_NO_PIPELINE_MATCH <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_image_compression_control[]
+  * ename:VK_ERROR_COMPRESSION_EXHAUSTED_EXT An image creation failed
+    because internal resources required for compression are exhausted.
+    This must: only be returned when fixed-rate compression is requested.
+endif::VK_EXT_image_compression_control[]
+ifdef::VK_KHR_video_queue[]
+  * ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR The requested
+    tlink:VkImageUsageFlags are not supported.
+  * ename:VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR The requested
+    video picture layout is not supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR A video profile
+    operation specified via
+    slink:VkVideoProfileInfoKHR::pname:videoCodecOperation is not supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR Format parameters
+    in a requested slink:VkVideoProfileInfoKHR chain are not supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR Codec-specific
+    parameters in a requested slink:VkVideoProfileInfoKHR chain are not
+    supported.
+  * ename:VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR The specified video
+    Std header version is not supported.
+endif::VK_KHR_video_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR The specified Video Std
+    parameters do not adhere to the syntactic or semantic requirements of
+    the used video compression standard, or values derived from parameters
+    according to the rules defined by the used video compression standard do
+    not adhere to the capabilities of the video compression standard or the
+    implementation.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_shader_object[]
+  * ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT The provided binary shader
+    code is not compatible with this device.
+endif::VK_EXT_shader_object[]
+  * ename:VK_ERROR_UNKNOWN An unknown error has occurred; either the
+    application has provided invalid input, or an implementation failure has
+    occurred.
+
+If a command returns a runtime error, unless otherwise specified any output
+parameters will have undefined: contents, except that if the output
+parameter is a structure with pname:sType and pname:pNext fields, those
+fields will be unmodified.
+Any structures chained from pname:pNext will also have undefined: contents,
+except that pname:sType and pname:pNext will be unmodified.
+
+etext:VK_ERROR_OUT_OF_*_MEMORY errors do not modify any currently existing
+Vulkan objects.
+Objects that have already been successfully created can: still be used by
+the application.
+ifdef::VKSC_VERSION_1_0[]
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::pname:deviceNoDynamicHostAllocations
+is ename:VK_TRUE, ename:VK_ERROR_OUT_OF_HOST_MEMORY must: not be returned
+from any physical or logical device command which explicitly disallows it.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:deviceNoDynamicHostAllocations
+    is ename:VK_TRUE, ename:VK_ERROR_OUT_OF_HOST_MEMORY must: not be
+    returned by physical or logical device commands which explicitly
+    disallow it <<SCID-4>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+As a general rule, ftext:Free, ftext:Release, and ftext:Reset commands do
+not return ename:VK_ERROR_OUT_OF_HOST_MEMORY, while any other command with a
+return code may: return it.
+Any exceptions from this rule are described for those commands.
+====
+
+ename:VK_ERROR_UNKNOWN will be returned by an implementation when an
+unexpected error occurs that cannot be attributed to valid behavior of the
+application and implementation.
+Under these conditions, it may: be returned from any command returning a
+elink:VkResult.
+
+[NOTE]
+.Note
+====
+ename:VK_ERROR_UNKNOWN is not expected to ever be returned if the
+application behavior is valid, and if the implementation is bug-free.
+If ename:VK_ERROR_UNKNOWN is received, the application should be checked
+against the latest validation layers to verify correct behavior as much as
+possible.
+If no issues are identified it could be an implementation issue, and the
+implementor should be contacted for support.
+====
+
+ifdef::VKSC_VERSION_1_0,VK_EXT_debug_report[]
+Any command returning a elink:VkResult may: return
+ifdef::VKSC_VERSION_1_0[ename:VK_ERROR_VALIDATION_FAILED]
+ifdef::VK_EXT_debug_report[ename:VK_ERROR_VALIDATION_FAILED_EXT]
+if a violation of valid usage is detected, even though commands do not
+explicitly list this as a possible return code.
+endif::VKSC_VERSION_1_0,VK_EXT_debug_report[]
+
+Performance-critical commands generally do not have return codes.
+If a runtime error occurs in such commands, the implementation will defer
+reporting the error until a specified point.
+For commands that record into command buffers (ftext:vkCmd*) runtime errors
+are reported by fname:vkEndCommandBuffer.
+
+ifdef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Implementations can also use <<fault-handling>> to report runtime errors
+where suitable return values are not available or to provide more prompt
+notification of an error.
+====
+endif::VKSC_VERSION_1_0[]
+--
+
+
+[[fundamentals-numerics]]
+== Numeric Representation and Computation
+
+Implementations normally perform computations in floating-point, and must:
+meet the range and precision requirements defined under "`Floating-Point
+Computation`" below.
+
+These requirements only apply to computations performed in Vulkan operations
+outside of shader execution, such as texture image specification and
+sampling, and per-fragment operations.
+Range and precision requirements during shader execution differ and are
+specified by the <<spirvenv-precision-operation, Precision and Operation of
+SPIR-V Instructions>> section.
+
+In some cases, the representation and/or precision of operations is
+implicitly limited by the specified format of vertex or texel data consumed
+by Vulkan.
+Specific floating-point formats are described later in this section.
+
+
+[[fundamentals-floatingpoint]]
+=== Floating-Point Computation
+
+Most floating-point computation is performed in SPIR-V shader modules.
+The properties of computation within shaders are constrained as defined by
+the <<spirvenv-precision-operation, Precision and Operation of SPIR-V
+Instructions>> section.
+
+Some floating-point computation is performed outside of shaders, such as
+viewport and depth range calculations.
+For these computations, we do not specify how floating-point numbers are to
+be represented, or the details of how operations on them are performed, but
+only place minimal requirements on representation and precision as described
+in the remainder of this section.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Jon, Bug 14966) This is a rat's nest of complexity, both in terms of
+describing/enumerating places such computation may: take place (other than
+"`not shader code`") and in how implementations may: do it.
+We have consciously deferred the resolution of this issue to post-1.0, and
+in the meantime, the following language inherited from the OpenGL
+Specification is inserted as a placeholder.
+Hopefully it can: be tightened up considerably.
+====
+endif::editing-notes[]
+
+We require simply that numbers`' floating-point parts contain enough bits
+and that their exponent fields are large enough so that individual results
+of floating-point operations are accurate to about 1 part in 10^5^.
+The maximum representable magnitude for all floating-point values must: be
+at least 2^32^.
+
+  {empty}:: [eq]#x {times} 0 = 0 {times} x = 0# for any non-infinite and
+            non-[eq]#NaN# [eq]#x#.
+  {empty}:: [eq]#1 {times} x = x {times} 1 = x#.
+  {empty}:: [eq]#x {plus} 0 = 0 {plus} x = x#.
+  {empty}:: [eq]#0^0^ = 1#.
+
+Occasionally, further requirements will be specified.
+Most single-precision floating-point formats meet these requirements.
+
+The special values [eq]#Inf# and [eq]#-Inf# encode values with magnitudes
+too large to be represented; the special value [eq]#NaN# encodes "`Not A
+Number`" values resulting from undefined: arithmetic operations such as
+[eq]#0 / 0#.
+Implementations may: support [eq]#Inf# and [eq]#NaN# in their floating-point
+computations.
+Any computation which does not support either [eq]#Inf# or [eq]#NaN#, for
+which that value is an input or output will yield an undefined: value.
+
+
+[[fundamentals-fp-conversion]]
+=== Floating-Point Format Conversions
+
+When a value is converted to a defined floating-point representation, finite
+values falling between two representable finite values are rounded to one or
+the other.
+The rounding mode is not defined.
+Finite values whose magnitude is larger than that of any representable
+finite value may be rounded either to the closest representable finite value
+or to the appropriately signed infinity.
+For unsigned destination formats any negative values are converted to zero.
+Positive infinity is converted to positive infinity; negative infinity is
+converted to negative infinity in signed formats and to zero in unsigned
+formats; and any [eq]#NaN# is converted to a [eq]#NaN#.
+
+
+[[fundamentals-fp16]]
+=== 16-Bit Floating-Point Numbers
+
+16-bit floating point numbers are defined in the "`16-bit floating point
+numbers`" section of the <<data-format,Khronos Data Format Specification>>.
+
+
+[[fundamentals-fp11]]
+=== Unsigned 11-Bit Floating-Point Numbers
+
+Unsigned 11-bit floating point numbers are defined in the "`Unsigned 11-bit
+floating point numbers`" section of the <<data-format,Khronos Data Format
+Specification>>.
+
+
+[[fundamentals-fp10]]
+=== Unsigned 10-Bit Floating-Point Numbers
+
+Unsigned 10-bit floating point numbers are defined in the "`Unsigned 10-bit
+floating point numbers`" section of the <<data-format,Khronos Data Format
+Specification>>.
+
+
+[[fundamentals-general]]
+=== General Requirements
+
+Any representable floating-point value in the appropriate format is legal as
+input to a Vulkan command that requires floating-point data.
+The result of providing a value that is not a floating-point number to such
+a command is unspecified, but must: not lead to Vulkan interruption or
+termination.
+For example, providing a negative zero (where applicable) or a denormalized
+number to a Vulkan command must: yield deterministic results, while
+providing a [eq]#NaN# or [eq]#Inf# yields unspecified results.
+
+Some calculations require division.
+In such cases (including implied divisions performed by vector
+normalization), division by zero produces an unspecified result but must:
+not lead to Vulkan interruption or termination.
+
+
+[[fundamentals-fixedconv]]
+== Fixed-Point Data Conversions
+
+When generic vertex attributes and pixel color or depth _components_ are
+represented as integers, they are often (but not always) considered to be
+_normalized_.
+Normalized integer values are treated specially when being converted to and
+from floating-point values, and are usually referred to as _normalized
+fixed-point_.
+
+In the remainder of this section, [eq]#b# denotes the bit width of the
+fixed-point integer representation.
+When the integer is one of the types defined by the API, [eq]#b# is the bit
+width of that type.
+When the integer comes from an <<resources-images,image>> containing color
+or depth component texels, [eq]#b# is the number of bits allocated to that
+component in its <<formats,specified image format>>.
+
+The signed and unsigned fixed-point representations are assumed to be
+[eq]#b#-bit binary two's-complement integers and binary unsigned integers,
+respectively.
+
+
+[[fundamentals-fixedfpconv]]
+=== Conversion From Normalized Fixed-Point to Floating-Point
+
+Unsigned normalized fixed-point integers represent numbers in the range
+[eq]#[0,1]#.
+The conversion from an unsigned normalized fixed-point value [eq]#c# to the
+corresponding floating-point value [eq]#f# is defined as
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = { c \over { 2^b - 1 } }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Signed normalized fixed-point integers represent numbers in the range
+[eq]#[-1,1]#.
+The conversion from a signed normalized fixed-point value [eq]#c# to the
+corresponding floating-point value [eq]#f# is performed using
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Only the range [eq]#[-2^b-1^ {plus} 1, 2^b-1^ - 1]# is used to represent
+signed fixed-point values in the range [eq]#[-1,1]#.
+For example, if [eq]#b = 8#, then the integer value [eq]#-127# corresponds
+to [eq]#-1.0# and the value 127 corresponds to [eq]#1.0#.
+This equation is used everywhere that signed normalized fixed-point values
+are converted to floating-point.
+
+Note that while zero is exactly expressible in this representation, one
+value ([eq]#-128# in the example) is outside the representable range, and
+implementations must: clamp it to [eq]#-1.0#.
+Where the value is subject to further processing by the implementation, e.g.
+during texture filtering, values less than [eq]#-1.0# may: be used but the
+result must: be clamped before the value is returned to shaders.
+
+
+[[fundamentals-fpfixedconv]]
+=== Conversion From Floating-Point to Normalized Fixed-Point
+
+The conversion from a floating-point value [eq]#f# to the corresponding
+unsigned normalized fixed-point value [eq]#c# is defined by first clamping
+[eq]#f# to the range [eq]#[0,1]#, then computing
+
+  {empty}:: [eq]#c = convertFloatToUint(f {times} (2^b^ - 1), b)#
+
+where [eq]#convertFloatToUint(r,b)# returns one of the two unsigned binary
+integer values with exactly [eq]#b# bits which are closest to the
+floating-point value [eq]#r#.
+Implementations should: round to nearest.
+If [eq]#r# is equal to an integer, then that integer value must: be
+returned.
+In particular, if [eq]#f# is equal to 0.0 or 1.0, then [eq]#c# must: be
+assigned 0 or [eq]#2^b^ - 1#, respectively.
+
+The conversion from a floating-point value [eq]#f# to the corresponding
+signed normalized fixed-point value [eq]#c# is performed by clamping [eq]#f#
+to the range [eq]#[-1,1]#, then computing
+
+  {empty}:: [eq]#c = convertFloatToInt(f {times} (2^b-1^ - 1), b)#
+
+where [eq]#convertFloatToInt(r,b)# returns one of the two signed
+two's-complement binary integer values with exactly [eq]#b# bits which are
+closest to the floating-point value [eq]#r#.
+Implementations should: round to nearest.
+If [eq]#r# is equal to an integer, then that integer value must: be
+returned.
+In particular, if [eq]#f# is equal to -1.0, 0.0, or 1.0, then [eq]#c# must:
+be assigned [eq]#-(2^b-1^ - 1)#, 0, or [eq]#2^b-1^ - 1#, respectively.
+
+This equation is used everywhere that floating-point values are converted to
+signed normalized fixed-point.
+
+
+[[fundamentals-common-objects]]
+== Common Object Types
+
+Some types of Vulkan objects are used in many different structures and
+command parameters, and are described here.
+These types include _offsets_, _extents_, and _rectangles_.
+
+
+=== Offsets
+
+Offsets are used to describe a pixel location within an image or
+framebuffer, as an (x,y) location for two-dimensional images, or an (x,y,z)
+location for three-dimensional images.
+
+[open,refpage='VkOffset2D',desc='Structure specifying a two-dimensional offset',type='structs']
+--
+A two-dimensional offset is defined by the structure:
+
+include::{generated}/api/structs/VkOffset2D.adoc[]
+
+  * pname:x is the x offset.
+  * pname:y is the y offset.
+
+include::{generated}/validity/structs/VkOffset2D.adoc[]
+--
+
+[open,refpage='VkOffset3D',desc='Structure specifying a three-dimensional offset',type='structs']
+--
+A three-dimensional offset is defined by the structure:
+
+include::{generated}/api/structs/VkOffset3D.adoc[]
+
+  * pname:x is the x offset.
+  * pname:y is the y offset.
+  * pname:z is the z offset.
+
+include::{generated}/validity/structs/VkOffset3D.adoc[]
+--
+
+
+=== Extents
+
+Extents are used to describe the size of a rectangular region of pixels
+within an image or framebuffer, as (width,height) for two-dimensional
+images, or as (width,height,depth) for three-dimensional images.
+
+[open,refpage='VkExtent2D',desc='Structure specifying a two-dimensional extent',type='structs']
+--
+A two-dimensional extent is defined by the structure:
+
+include::{generated}/api/structs/VkExtent2D.adoc[]
+
+  * pname:width is the width of the extent.
+  * pname:height is the height of the extent.
+
+include::{generated}/validity/structs/VkExtent2D.adoc[]
+--
+
+[open,refpage='VkExtent3D',desc='Structure specifying a three-dimensional extent',type='structs']
+--
+A three-dimensional extent is defined by the structure:
+
+include::{generated}/api/structs/VkExtent3D.adoc[]
+
+  * pname:width is the width of the extent.
+  * pname:height is the height of the extent.
+  * pname:depth is the depth of the extent.
+
+include::{generated}/validity/structs/VkExtent3D.adoc[]
+--
+
+
+=== Rectangles
+
+[open,refpage='VkRect2D',desc='Structure specifying a two-dimensional subregion',type='structs']
+--
+Rectangles are used to describe a specified rectangular region of pixels
+within an image or framebuffer.
+Rectangles include both an offset and an extent of the same dimensionality,
+as described above.
+Two-dimensional rectangles are defined by the structure
+
+include::{generated}/api/structs/VkRect2D.adoc[]
+
+  * pname:offset is a slink:VkOffset2D specifying the rectangle offset.
+  * pname:extent is a slink:VkExtent2D specifying the rectangle extent.
+
+include::{generated}/validity/structs/VkRect2D.adoc[]
+--
+
+
+// VkStructureType is pretty long,
+// so keep it as a last chapter section for readability.
+=== Structure Types
+
+[open,refpage='VkStructureType',desc='Vulkan structure types (pname:sType)',type='enums']
+--
+Each value corresponds to a particular structure with a pname:sType member
+with a matching name.
+As a general rule, the name of each elink:VkStructureType value is obtained
+by taking the name of the structure, stripping the leading etext:Vk,
+prefixing each capital letter with etext:_, converting the entire resulting
+string to upper case, and prefixing it with etext:VK_STRUCTURE_TYPE_.
+For example, structures of type slink:VkImageCreateInfo correspond to a
+elink:VkStructureType value of ename:VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+and thus a structure of this type must: have its pname:sType member set to
+this value before it is passed to the API.
+
+The values ename:VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO and
+ename:VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO are reserved for internal
+use by the loader, and do not have corresponding Vulkan structures in this
+Specification.
+
+Structure types supported by the Vulkan API include:
+
+include::{generated}/api/enums/VkStructureType.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkStructureType (deprecated aliases)
+  ** etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
+     <<SCID-8>>
+  ** etext:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
+     <<SCID-8>>
+  ** etext:VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+
+
+[[fundamentals-api-name-aliases]]
+== API Name Aliases
+
+A small number of APIs did not follow the <<vulkan-styleguide, naming
+conventions>> when initially defined.
+For consistency, when we discover an API name that violates the naming
+conventions, we rename it in the Specification, XML, and header files.
+For backwards compatibility, the original (incorrect) name is retained as a
+"`typo alias`".
+The alias is deprecated and should not be used, but will be retained
+indefinitely.
+
+[NOTE]
+.Note
+====
+etext:VK_STENCIL_FRONT_AND_BACK is an example of a _typo alias_.
+It was initially defined as part of elink:VkStencilFaceFlagBits.
+Once the naming inconsistency was noticed, it was renamed to
+ename:VK_STENCIL_FACE_FRONT_AND_BACK, and the old name was aliased to the
+correct name.
+====
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/fxvertex.adoc b/codegen/vulkan/vulkan-docs-next/chapters/fxvertex.adoc
new file mode 100644
index 0000000..639509a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/fxvertex.adoc
@@ -0,0 +1,971 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[fxvertex]]
+= Fixed-Function Vertex Processing
+
+Vertex fetching is controlled via configurable state, as a logically
+distinct graphics pipeline stage.
+
+
+[[fxvertex-attrib]]
+== Vertex Attributes
+
+Vertex shaders can: define input variables, which receive _vertex attribute_
+data transferred from one or more sname:VkBuffer(s) by drawing commands.
+Vertex shader input variables are bound to buffers via an indirect binding
+where the vertex shader associates a _vertex input attribute_ number with
+each variable, vertex input attributes are associated to _vertex input
+bindings_ on a per-pipeline basis, and vertex input bindings are associated
+with specific buffers on a per-draw basis via the
+fname:vkCmdBindVertexBuffers command.
+Vertex input attribute and vertex input binding descriptions also contain
+format information controlling how data is extracted from buffer memory and
+converted to the format expected by the vertex shader.
+
+There are sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
+number of vertex input attributes and
+sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings number of vertex
+input bindings (each referred to by zero-based indices), where there are at
+least as many vertex input attributes as there are vertex input bindings.
+Applications can: store multiple vertex input attributes interleaved in a
+single buffer, and use a single vertex input binding to access those
+attributes.
+
+In GLSL, vertex shaders associate input variables with a vertex input
+attribute number using the code:location layout qualifier.
+The code:Component layout qualifier associates components of a vertex shader
+input variable with components of a vertex input attribute.
+
+.GLSL example
+[source,glsl]
+----
+// Assign location M to variableName
+layout (location=M, component=2) in vec2 variableName;
+
+// Assign locations [N,N+L) to the array elements of variableNameArray
+layout (location=N) in vec4 variableNameArray[L];
+----
+
+In SPIR-V, vertex shaders associate input variables with a vertex input
+attribute number using the code:Location decoration.
+The code:Component decoration associates components of a vertex shader input
+variable with components of a vertex input attribute.
+The code:Location and code:Component decorations are specified via the
+code:OpDecorate instruction.
+
+.SPIR-V example
+[source,spirv]
+----
+               ...
+          %1 = OpExtInstImport "GLSL.std.450"
+               ...
+               OpName %9 "variableName"
+               OpName %15 "variableNameArray"
+               OpDecorate %18 BuiltIn VertexIndex
+               OpDecorate %19 BuiltIn InstanceIndex
+               OpDecorate %9 Location M
+               OpDecorate %9 Component 2
+               OpDecorate %15 Location N
+               ...
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Input %7
+          %9 = OpVariable %8 Input
+         %10 = OpTypeVector %6 4
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 L
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypePointer Input %13
+         %15 = OpVariable %14 Input
+               ...
+----
+
+
+[[fxvertex-attrib-location]]
+=== Attribute Location and Component Assignment
+
+The code:Location decoration specifies which vertex input attribute is used
+to read and interpret the data that a variable will consume.
+
+When a vertex shader input variable declared using a 16- or 32-bit scalar or
+vector data type is assigned a code:Location, its value(s) are taken from
+the components of the input attribute specified with the corresponding
+sname:VkVertexInputAttributeDescription::pname:location.
+The components used depend on the type of variable and the code:Component
+decoration specified in the variable declaration, as identified in
+<<fxvertex-attrib-components>>.
+Any 16-bit or 32-bit scalar or vector input will consume a single
+code:Location.
+For 16-bit and 32-bit data types, missing components are filled in with
+default values as described <<fxvertex-input-extraction,below>>.
+
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+If an implementation supports <<features-storageInputOutput16,
+pname:storageInputOutput16>>, vertex shader input variables can: have a
+width of 16 bits.
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+
+[[fxvertex-attrib-components]]
+.Input attribute components accessed by 16-bit and 32-bit input variables
+[width="65%",cols="<5,<3,<3",options="header"]
+|====
+| 16-bit or 32-bit data type | code:Component decoration | Components consumed
+| scalar                     | 0 or unspecified             | (x, o, o, o)
+| scalar                     | 1                            | (o, y, o, o)
+| scalar                     | 2                            | (o, o, z, o)
+| scalar                     | 3                            | (o, o, o, w)
+| two-component vector       | 0 or unspecified             | (x, y, o, o)
+| two-component vector       | 1                            | (o, y, z, o)
+| two-component vector       | 2                            | (o, o, z, w)
+| three-component vector     | 0 or unspecified             | (x, y, z, o)
+| three-component vector     | 1                            | (o, y, z, w)
+| four-component vector      | 0 or unspecified             | (x, y, z, w)
+|====
+
+Components indicated by "`o`" are available for use by other input variables
+which are sourced from the same attribute, and if used, are either filled
+with the corresponding component from the input format (if present), or the
+default value.
+
+When a vertex shader input variable declared using a 32-bit floating point
+matrix type is assigned a code:Location _i_, its values are taken from
+consecutive input attributes starting with the corresponding
+sname:VkVertexInputAttributeDescription::pname:location.
+Such matrices are treated as an array of column vectors with values taken
+from the input attributes identified in <<fxvertex-attrib-matrix>>.
+The sname:VkVertexInputAttributeDescription::pname:format must: be specified
+with a elink:VkFormat that corresponds to the appropriate type of column
+vector.
+The code:Component decoration must: not be used with matrix types.
+
+[[fxvertex-attrib-matrix]]
+.Input attributes accessed by 32-bit input matrix variables
+[width="100%",cols="<10%,<24%,<21%,<45%",options="header"]
+|====
+| Data type     | Column vector type        | Locations consumed    | Components consumed
+| mat2          | two-component vector      | i, i+1                | (x, y, o, o), (x, y, o, o)
+| mat2x3        | three-component vector    | i, i+1                | (x, y, z, o), (x, y, z, o)
+| mat2x4        | four-component vector     | i, i+1                | (x, y, z, w), (x, y, z, w)
+| mat3x2        | two-component vector      | i, i+1, i+2           | (x, y, o, o), (x, y, o, o), (x, y, o, o)
+| mat3          | three-component vector    | i, i+1, i+2           | (x, y, z, o), (x, y, z, o), (x, y, z, o)
+| mat3x4        | four-component vector     | i, i+1, i+2           | (x, y, z, w), (x, y, z, w), (x, y, z, w)
+| mat4x2        | two-component vector      | i, i+1, i+2, i+3      | (x, y, o, o), (x, y, o, o), (x, y, o, o), (x, y, o, o)
+| mat4x3        | three-component vector    | i, i+1, i+2, i+3      | (x, y, z, o), (x, y, z, o), (x, y, z, o), (x, y, z, o)
+| mat4          | four-component vector     | i, i+1, i+2, i+3      | (x, y, z, w), (x, y, z, w), (x, y, z, w), (x, y, z, w)
+|====
+
+Components indicated by "`o`" are available for use by other input variables
+which are sourced from the same attribute, and if used, are either filled
+with the corresponding component from the input (if present), or the default
+value.
+
+When a vertex shader input variable declared using a scalar or vector 64-bit
+data type is assigned a code:Location _i_, its values are taken from
+consecutive input attributes starting with the corresponding
+sname:VkVertexInputAttributeDescription::pname:location.
+The code:Location slots and code:Component words used depend on the type of
+variable and the code:Component decoration specified in the variable
+declaration, as identified in <<fxvertex-attrib-double>>.
+For 64-bit data types, no default attribute values are provided.
+Input variables must: not use more components than provided by the
+attribute.
+
+[[fxvertex-attrib-double]]
+.Input attribute locations and components accessed by 64-bit input variables
+[width="100%",cols="<18%,^12%,<25%,^14%,^18%,<13%",options="header"]
+|====
+^.^| Input format | Locations consumed
+        ^.^| 64-bit data type   |code:Location decoration |code:Component decoration ^| 32-bit components consumed
+| R64          | i
+        | scalar                  | i                         | 0 or unspecified           | (x, y, -, -)
+.3+<.^| R64G64 .3+^.^| i
+        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o)
+        | scalar                  | i                         | 2                          | (o, o, z, w)
+        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w)
+.5+<.^| R64G64B64 .5+^.^| i, i+1
+        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o), (o, o, -, -)
+        | scalar                  | i                         | 2                          | (o, o, z, w), (o, o, -, -)
+        | scalar                  | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, -, -)
+        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w), (o, o, -, -)
+        | three-component vector  | i                         | unspecified                | (x, y, z, w), (x, y, -, -)
+.8+<.^| R64G64B64A64 .8+^.^| i, i+1
+        | scalar                  | i                         | 0 or unspecified           | (x, y, o, o), (o, o, o, o)
+        | scalar                  | i                         | 2                          | (o, o, z, w), (o, o, o, o)
+        | scalar                  | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, o, o)
+        | scalar                  | i+1                       | 2                          | (o, o, o, o), (o, o, z, w)
+        | two-component vector    | i                         | 0 or unspecified           | (x, y, z, w), (o, o, o, o)
+        | two-component vector    | i+1                       | 0 or unspecified           | (o, o, o, o), (x, y, z, w)
+        | three-component vector  | i                         | unspecified                | (x, y, z, w), (x, y, o, o)
+        | four-component vector   | i                         | unspecified                | (x, y, z, w), (x, y, z, w)
+|====
+
+Components indicated by "`o`" are available for use by other input variables
+which are sourced from the same attribute.
+Components indicated by "`-`" are not available for input variables as there
+are no default values provided for 64-bit data types, and there is no data
+provided by the input format.
+
+When a vertex shader input variable declared using a 64-bit floating-point
+matrix type is assigned a code:Location _i_, its values are taken from
+consecutive input attribute locations.
+Such matrices are treated as an array of column vectors with values taken
+from the input attributes as shown in <<fxvertex-attrib-double>>.
+Each column vector starts at the code:Location immediately following the
+last code:Location of the previous column vector.
+The number of attributes and components assigned to each matrix is
+determined by the matrix dimensions and ranges from two to eight locations.
+
+When a vertex shader input variable declared using an array type is assigned
+a location, its values are taken from consecutive input attributes starting
+with the corresponding
+sname:VkVertexInputAttributeDescription::pname:location.
+The number of attributes and components assigned to each element are
+determined according to the data type of the array elements and
+code:Component decoration (if any) specified in the declaration of the
+array, as described above.
+Each element of the array, in order, is assigned to consecutive locations,
+but all at the same specified component within each location.
+
+Only input variables declared with the data types and component decorations
+as specified above are supported.
+Two variables are allowed to share the same code:Location slot only if their
+code:Component words do not overlap.
+If multiple variables share the same code:Location slot, they must: all have
+the same SPIR-V floating-point component type or all have the same width
+scalar type components.
+
+[[fxvertex-input]]
+== Vertex Input Description
+
+Applications specify vertex input attribute and vertex input binding
+descriptions as part of graphics pipeline creation by setting the
+slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState pointer to a
+slink:VkPipelineVertexInputStateCreateInfo structure.
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+Alternatively, if the graphics pipeline is created with the
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then the
+vertex input attribute and vertex input binding descriptions are specified
+dynamically with flink:vkCmdSetVertexInputEXT, and the
+slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState pointer is
+ignored.
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+[open,refpage='VkPipelineVertexInputStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline vertex input state',type='structs']
+--
+The sname:VkPipelineVertexInputStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineVertexInputStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:vertexBindingDescriptionCount is the number of vertex binding
+    descriptions provided in pname:pVertexBindingDescriptions.
+  * pname:pVertexBindingDescriptions is a pointer to an array of
+    sname:VkVertexInputBindingDescription structures.
+  * pname:vertexAttributeDescriptionCount is the number of vertex attribute
+    descriptions provided in pname:pVertexAttributeDescriptions.
+  * pname:pVertexAttributeDescriptions is a pointer to an array of
+    sname:VkVertexInputAttributeDescription structures.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613]]
+    pname:vertexBindingDescriptionCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614]]
+    pname:vertexAttributeDescriptionCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
+  * [[VUID-VkPipelineVertexInputStateCreateInfo-binding-00615]]
+    For every pname:binding specified by each element of
+    pname:pVertexAttributeDescriptions, a
+    sname:VkVertexInputBindingDescription must: exist in
+    pname:pVertexBindingDescriptions with the same value of pname:binding
+  * [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616]]
+    All elements of pname:pVertexBindingDescriptions must: describe distinct
+    binding numbers
+  * [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617]]
+    All elements of pname:pVertexAttributeDescriptions must: describe
+    distinct attribute locations
+****
+
+include::{generated}/validity/structs/VkPipelineVertexInputStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineVertexInputStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineVertexInputStateCreateFlags.adoc[]
+
+tname:VkPipelineVertexInputStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkVertexInputBindingDescription',desc='Structure specifying vertex input binding description',type='structs']
+--
+Each vertex input binding is specified by the
+sname:VkVertexInputBindingDescription structure, defined as:
+
+include::{generated}/api/structs/VkVertexInputBindingDescription.adoc[]
+
+  * pname:binding is the binding number that this structure describes.
+  * pname:stride is the byte stride between consecutive elements within the
+    buffer.
+  * pname:inputRate is a elink:VkVertexInputRate value specifying whether
+    vertex attribute addressing is a function of the vertex index or of the
+    instance index.
+
+.Valid Usage
+****
+  * [[VUID-VkVertexInputBindingDescription-binding-00618]]
+    pname:binding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkVertexInputBindingDescription-stride-00619]]
+    pname:stride must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkVertexInputBindingDescription-stride-04456]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled,
+    pname:stride must: be a multiple of, and at least as large as,
+    slink:VkPhysicalDevicePortabilitySubsetPropertiesKHR::pname:minVertexInputBindingStrideAlignment
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkVertexInputBindingDescription.adoc[]
+--
+
+[open,refpage='VkVertexInputRate',desc='Specify rate at which vertex attributes are pulled from buffers',type='enums']
+--
+Possible values of slink:VkVertexInputBindingDescription::pname:inputRate,
+specifying the rate at which vertex attributes are pulled from buffers, are:
+
+include::{generated}/api/enums/VkVertexInputRate.adoc[]
+
+  * ename:VK_VERTEX_INPUT_RATE_VERTEX specifies that vertex attribute
+    addressing is a function of the vertex index.
+  * ename:VK_VERTEX_INPUT_RATE_INSTANCE specifies that vertex attribute
+    addressing is a function of the instance index.
+--
+
+[open,refpage='VkVertexInputAttributeDescription',desc='Structure specifying vertex input attribute description',type='structs']
+--
+Each vertex input attribute is specified by the
+sname:VkVertexInputAttributeDescription structure, defined as:
+
+include::{generated}/api/structs/VkVertexInputAttributeDescription.adoc[]
+
+  * pname:location is the shader input location number for this attribute.
+  * pname:binding is the binding number which this attribute takes its data
+    from.
+  * pname:format is the size and type of the vertex attribute data.
+  * pname:offset is a byte offset of this attribute relative to the start of
+    an element in the vertex input binding.
+
+.Valid Usage
+****
+  * [[VUID-VkVertexInputAttributeDescription-location-00620]]
+    pname:location must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
+  * [[VUID-VkVertexInputAttributeDescription-binding-00621]]
+    pname:binding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkVertexInputAttributeDescription-offset-00622]]
+    pname:offset must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
+  * [[VUID-VkVertexInputAttributeDescription-format-00623]]
+    The <<resources-buffer-view-format-features,format features>> of
+    pname:format must: contain ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:vertexAttributeAccessBeyondStride
+    is ename:VK_FALSE, the sum of pname:offset plus the size of the vertex
+    attribute data described by pname:format must: not be greater than
+    pname:stride in the slink:VkVertexInputBindingDescription referenced in
+    pname:binding
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkVertexInputAttributeDescription.adoc[]
+--
+
+ifdef::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetVertexInputEXT',desc='Set the vertex input state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the vertex input attribute
+and vertex input binding descriptions, call:
+
+include::{generated}/api/protos/vkCmdSetVertexInputEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:vertexBindingDescriptionCount is the number of vertex binding
+    descriptions provided in pname:pVertexBindingDescriptions.
+  * pname:pVertexBindingDescriptions is a pointer to an array of
+    sname:VkVertexInputBindingDescription2EXT structures.
+  * pname:vertexAttributeDescriptionCount is the number of vertex attribute
+    descriptions provided in pname:pVertexAttributeDescriptions.
+  * pname:pVertexAttributeDescriptions is a pointer to an array of
+    sname:VkVertexInputAttributeDescription2EXT structures.
+
+This command sets the vertex input attribute and vertex input binding
+descriptions state for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_vertex_input_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_vertex_input_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState values used to
+create the currently active pipeline.
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+If
+ifdef::VK_EXT_shader_object[]
+drawing using <<shaders-objects, shader objects>>,
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[or if]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+the bound pipeline state object was also created with the
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled,
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+then flink:vkCmdBindVertexBuffers2 can be used instead of
+fname:vkCmdSetVertexInputEXT to dynamically set the stride.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+.Valid Usage
+****
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-vkCmdSetVertexInputEXT-None-08546]]
+    Either the <<features-vertexInputDynamicState,
+    pname:vertexInputDynamicState>> feature or the <<features-shaderObject,
+    pname:shaderObject>> feature or both must: be enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifndef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-vkCmdSetVertexInputEXT-None-08547]]
+    The <<features-shaderObject, pname:shaderObject>> feature must: be
+    enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[]
+  * [[VUID-vkCmdSetVertexInputEXT-None-04790]]
+    The <<features-vertexInputDynamicState, pname:vertexInputDynamicState>>
+    feature must: be enabled
+endif::VK_EXT_shader_object[]
+  * [[VUID-vkCmdSetVertexInputEXT-vertexBindingDescriptionCount-04791]]
+    pname:vertexBindingDescriptionCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdSetVertexInputEXT-vertexAttributeDescriptionCount-04792]]
+    pname:vertexAttributeDescriptionCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
+  * [[VUID-vkCmdSetVertexInputEXT-binding-04793]]
+    For every pname:binding specified by each element of
+    pname:pVertexAttributeDescriptions, a
+    sname:VkVertexInputBindingDescription2EXT must: exist in
+    pname:pVertexBindingDescriptions with the same value of pname:binding
+  * [[VUID-vkCmdSetVertexInputEXT-pVertexBindingDescriptions-04794]]
+    All elements of pname:pVertexBindingDescriptions must: describe distinct
+    binding numbers
+  * [[VUID-vkCmdSetVertexInputEXT-pVertexAttributeDescriptions-04795]]
+    All elements of pname:pVertexAttributeDescriptions must: describe
+    distinct attribute locations
+****
+
+include::{generated}/validity/protos/vkCmdSetVertexInputEXT.adoc[]
+--
+
+[open,refpage='VkVertexInputBindingDescription2EXT',desc='Structure specifying the extended vertex input binding description',type='structs']
+--
+The sname:VkVertexInputBindingDescription2EXT structure is defined as:
+
+include::{generated}/api/structs/VkVertexInputBindingDescription2EXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:binding is the binding number that this structure describes.
+  * pname:stride is the byte stride between consecutive elements within the
+    buffer.
+  * pname:inputRate is a elink:VkVertexInputRate value specifying whether
+    vertex attribute addressing is a function of the vertex index or of the
+    instance index.
+ifdef::VK_EXT_vertex_attribute_divisor[]
+  * pname:divisor is the number of successive instances that will use the
+    same value of the vertex attribute when instanced rendering is enabled.
+    This member can: be set to a value other than `1` if the
+    <<features-vertexAttributeInstanceRateDivisor,
+    pname:vertexAttributeInstanceRateDivisor>> feature is enabled.
+    For example, if the divisor is N, the same vertex attribute will be
+    applied to N successive instances before moving on to the next vertex
+    attribute.
+    The maximum value of pname:divisor is implementation-dependent and can
+    be queried using
+    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor.
+    A value of `0` can: be used for the divisor if the
+    <<features-vertexAttributeInstanceRateZeroDivisor,
+    pname:vertexAttributeInstanceRateZeroDivisor>> feature is enabled.
+    In this case, the same vertex attribute will be applied to all
+    instances.
+endif::VK_EXT_vertex_attribute_divisor[]
+ifndef::VK_EXT_vertex_attribute_divisor[]
+  * pname:divisor must: be set to `1`
+endif::VK_EXT_vertex_attribute_divisor[]
+
+.Valid Usage
+****
+  * [[VUID-VkVertexInputBindingDescription2EXT-binding-04796]]
+    pname:binding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkVertexInputBindingDescription2EXT-stride-04797]]
+    pname:stride must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
+  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-04798]]
+    If the <<features-vertexAttributeInstanceRateZeroDivisor,
+    pname:vertexAttributeInstanceRateZeroDivisor>> feature is not enabled,
+    pname:divisor must: not be `0`
+  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-04799]]
+    If the <<features-vertexAttributeInstanceRateDivisor,
+    pname:vertexAttributeInstanceRateDivisor>> feature is not enabled,
+    pname:divisor must: be `1`
+  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-06226]]
+    pname:divisor must: be a value between `0` and
+    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor,
+    inclusive
+  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-06227]]
+    If pname:divisor is not `1` then pname:inputRate must: be of type
+    ename:VK_VERTEX_INPUT_RATE_INSTANCE
+****
+
+include::{generated}/validity/structs/VkVertexInputBindingDescription2EXT.adoc[]
+--
+
+[open,refpage='VkVertexInputAttributeDescription2EXT',desc='Structure specifying the extended vertex input attribute description',type='structs']
+--
+The sname:VkVertexInputAttributeDescription2EXT structure is defined as:
+
+include::{generated}/api/structs/VkVertexInputAttributeDescription2EXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:location is the shader input location number for this attribute.
+  * pname:binding is the binding number which this attribute takes its data
+    from.
+  * pname:format is the size and type of the vertex attribute data.
+  * pname:offset is a byte offset of this attribute relative to the start of
+    an element in the vertex input binding.
+
+.Valid Usage
+****
+  * [[VUID-VkVertexInputAttributeDescription2EXT-location-06228]]
+    pname:location must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
+  * [[VUID-VkVertexInputAttributeDescription2EXT-binding-06229]]
+    pname:binding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkVertexInputAttributeDescription2EXT-offset-06230]]
+    pname:offset must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
+  * [[VUID-VkVertexInputAttributeDescription2EXT-format-04805]]
+    The <<resources-buffer-view-format-features,format features>> of
+    pname:format must: contain ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkVertexInputAttributeDescription2EXT-vertexAttributeAccessBeyondStride-04806]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:vertexAttributeAccessBeyondStride
+    is ename:VK_FALSE, the sum of pname:offset plus the size of the vertex
+    attribute data described by pname:format must: not be greater than
+    pname:stride in the slink:VkVertexInputBindingDescription2EXT referenced
+    in pname:binding
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkVertexInputAttributeDescription2EXT.adoc[]
+--
+endif::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdBindVertexBuffers',desc='Bind vertex buffers to a command buffer',type='protos']
+--
+To bind vertex buffers to a command buffer for use in subsequent drawing
+commands, call:
+
+include::{generated}/api/protos/vkCmdBindVertexBuffers.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:firstBinding is the index of the first vertex input binding whose
+    state is updated by the command.
+  * pname:bindingCount is the number of vertex input bindings whose state is
+    updated by the command.
+  * pname:pBuffers is a pointer to an array of buffer handles.
+  * pname:pOffsets is a pointer to an array of buffer offsets.
+
+The values taken from elements [eq]#i# of pname:pBuffers and pname:pOffsets
+replace the current state for the vertex input binding
+[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
+pname:bindingCount)#.
+The vertex input binding is updated to start at the offset indicated by
+pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
+All vertex input attributes that use each of these bindings will use these
+updated addresses in their address calculations for subsequent drawing
+commands.
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+elements of pname:pBuffers can: be dlink:VK_NULL_HANDLE, and can: be used by
+the vertex shader.
+If a vertex input attribute is bound to a vertex input binding that is
+dlink:VK_NULL_HANDLE, the values taken from memory are considered to be
+zero, and missing G, B, or A components are
+<<fxvertex-input-extraction,filled with [eq]#(0,0,1)#>>.
+endif::VK_EXT_robustness2[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindVertexBuffers-firstBinding-00624]]
+    pname:firstBinding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers-firstBinding-00625]]
+    The sum of pname:firstBinding and pname:bindingCount must: be less than
+    or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers-pOffsets-00626]]
+    All elements of pname:pOffsets must: be less than the size of the
+    corresponding element in pname:pBuffers
+  * [[VUID-vkCmdBindVertexBuffers-pBuffers-00627]]
+    All elements of pname:pBuffers must: have been created with the
+    ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
+  * [[VUID-vkCmdBindVertexBuffers-pBuffers-00628]]
+    Each element of pname:pBuffers that is non-sparse must: be bound
+    completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdBindVertexBuffers-pBuffers-04001]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, all elements of pname:pBuffers must: not be
+    dlink:VK_NULL_HANDLE
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-vkCmdBindVertexBuffers-pBuffers-04002]]
+    If an element of pname:pBuffers is dlink:VK_NULL_HANDLE, then the
+    corresponding element of pname:pOffsets must: be zero
+endif::VK_EXT_robustness2[]
+****
+
+include::{generated}/validity/protos/vkCmdBindVertexBuffers.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdBindVertexBuffers2',desc='Bind vertex buffers to a command buffer and dynamically set strides',type='protos',alias='vkCmdBindVertexBuffers2EXT']
+--
+Alternatively, to bind vertex buffers, along with their sizes and strides,
+to a command buffer for use in subsequent drawing commands, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdBindVertexBuffers2.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdBindVertexBuffers2EXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:firstBinding is the index of the first vertex input binding whose
+    state is updated by the command.
+  * pname:bindingCount is the number of vertex input bindings whose state is
+    updated by the command.
+  * pname:pBuffers is a pointer to an array of buffer handles.
+  * pname:pOffsets is a pointer to an array of buffer offsets.
+  * pname:pSizes is `NULL` or a pointer to an array of the size in bytes of
+    vertex data bound from pname:pBuffers.
+  * pname:pStrides is `NULL` or a pointer to an array of buffer strides.
+
+The values taken from elements [eq]#i# of pname:pBuffers and pname:pOffsets
+replace the current state for the vertex input binding
+[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
+pname:bindingCount)#.
+The vertex input binding is updated to start at the offset indicated by
+pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
+If pname:pSizes is not `NULL` then pname:pSizes[i] specifies the bound size
+of the vertex buffer starting from the corresponding elements of
+pname:pBuffers[i] plus pname:pOffsets[i].
+ifdef::VK_KHR_maintenance5[]
+If pname:pSizes[i] is ename:VK_WHOLE_SIZE then the bound size is from
+pname:pBuffers[i] plus pname:pOffsets[i] to the end of the buffer
+pname:pBuffers[i].
+endif::VK_KHR_maintenance5[]
+All vertex input attributes that use each of these bindings will use these
+updated addresses in their address calculations for subsequent drawing
+commands.
+ifdef::VK_EXT_robustness2[]
+If the <<features-nullDescriptor, pname:nullDescriptor>> feature is enabled,
+elements of pname:pBuffers can: be dlink:VK_NULL_HANDLE, and can: be used by
+the vertex shader.
+If a vertex input attribute is bound to a vertex input binding that is
+dlink:VK_NULL_HANDLE, the values taken from memory are considered to be
+zero, and missing G, B, or A components are
+<<fxvertex-input-extraction,filled with [eq]#(0,0,1)#>>.
+endif::VK_EXT_robustness2[]
+
+This command also <<pipelines-dynamic-state, dynamically sets>> the byte
+strides between consecutive elements within buffer pname:pBuffers[i] to the
+corresponding pname:pStrides[i] value
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, strides are specified by the
+sname:VkVertexInputBindingDescription::pname:stride values used to create
+the currently active pipeline.
+
+ifdef::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+If
+ifdef::VK_EXT_shader_object[drawing using <<shaders-objects, shader objects>>]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+ifdef::VK_EXT_shader_object[or if]
+the bound pipeline state object was also created with the
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
+endif::VK_EXT_vertex_input_dynamic_state[]
+then flink:vkCmdSetVertexInputEXT can: be used instead of
+fname:vkCmdBindVertexBuffers2 to set the stride.
+endif::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+
+[NOTE]
+.Note
+====
+Unlike the static state to set the same, pname:pStrides must be between 0
+and the maximum extent of the attributes in the binding.
+ifdef::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+flink:vkCmdSetVertexInputEXT does not have this restriction so can be used
+if other stride values are desired.
+endif::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindVertexBuffers2-firstBinding-03355]]
+    pname:firstBinding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers2-firstBinding-03356]]
+    The sum of pname:firstBinding and pname:bindingCount must: be less than
+    or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers2-pOffsets-03357]]
+    If pname:pSizes is not `NULL`, all elements of pname:pOffsets must: be
+    less than the size of the corresponding element in pname:pBuffers
+  * [[VUID-vkCmdBindVertexBuffers2-pSizes-03358]]
+    If pname:pSizes is not `NULL`, all elements of pname:pOffsets plus
+    pname:pSizes
+ifdef::VK_KHR_maintenance5[]
+    , where pname:pSizes is not ename:VK_WHOLE_SIZE,
+endif::VK_KHR_maintenance5[]
+    must: be less than or equal to the size of the corresponding element in
+    pname:pBuffers
+  * [[VUID-vkCmdBindVertexBuffers2-pBuffers-03359]]
+    All elements of pname:pBuffers must: have been created with the
+    ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
+  * [[VUID-vkCmdBindVertexBuffers2-pBuffers-03360]]
+    Each element of pname:pBuffers that is non-sparse must: be bound
+    completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdBindVertexBuffers2-pBuffers-04111]]
+    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
+    enabled, all elements of pname:pBuffers must: not be
+    dlink:VK_NULL_HANDLE
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-vkCmdBindVertexBuffers2-pBuffers-04112]]
+    If an element of pname:pBuffers is dlink:VK_NULL_HANDLE, then the
+    corresponding element of pname:pOffsets must: be zero
+endif::VK_EXT_robustness2[]
+  * [[VUID-vkCmdBindVertexBuffers2-pStrides-03362]]
+    If pname:pStrides is not `NULL` each element of pname:pStrides must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
+  * [[VUID-vkCmdBindVertexBuffers2-pStrides-06209]]
+    If pname:pStrides is not `NULL` each element of pname:pStrides must: be
+    either 0 or greater than or equal to the maximum extent of all vertex
+    input attributes fetched from the corresponding binding, where the
+    extent is calculated as the
+    slink:VkVertexInputAttributeDescription::pname:offset plus
+    slink:VkVertexInputAttributeDescription::pname:format size
+****
+
+include::{generated}/validity/protos/vkCmdBindVertexBuffers2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+
+ifdef::VK_EXT_vertex_attribute_divisor[]
+[[fxvertex-attribute_divisor]]
+== Vertex Attribute Divisor in Instanced Rendering
+
+[open,refpage='VkPipelineVertexInputDivisorStateCreateInfoEXT',desc='Structure specifying vertex attributes assignment during instanced rendering',type='structs']
+--
+If the <<features-vertexAttributeInstanceRateDivisor,
+pname:vertexAttributeInstanceRateDivisor>> feature is enabled and the
+pname:pNext chain of slink:VkPipelineVertexInputStateCreateInfo includes a
+sname:VkPipelineVertexInputDivisorStateCreateInfoEXT structure, then that
+structure controls how vertex attributes are assigned to an instance when
+instanced rendering is enabled.
+
+The sname:VkPipelineVertexInputDivisorStateCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vertexBindingDivisorCount is the number of elements in the
+    pname:pVertexBindingDivisors array.
+  * pname:pVertexBindingDivisors is a pointer to an array of
+    sname:VkVertexInputBindingDivisorDescriptionEXT structures specifying
+    the divisor value for each binding.
+
+include::{generated}/validity/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkVertexInputBindingDivisorDescriptionEXT',desc='Structure specifying a divisor used in instanced rendering',type='structs']
+--
+The individual divisor values per binding are specified using the
+sname:VkVertexInputBindingDivisorDescriptionEXT structure which is defined
+as:
+
+include::{generated}/api/structs/VkVertexInputBindingDivisorDescriptionEXT.adoc[]
+
+  * pname:binding is the binding number for which the divisor is specified.
+  * pname:divisor is the number of successive instances that will use the
+    same value of the vertex attribute when instanced rendering is enabled.
+    For example, if the divisor is N, the same vertex attribute will be
+    applied to N successive instances before moving on to the next vertex
+    attribute.
+    The maximum value of pname:divisor is implementation-dependent and can
+    be queried using
+    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor.
+    A value of `0` can: be used for the divisor if the
+    <<features-vertexAttributeInstanceRateZeroDivisor,
+    pname:vertexAttributeInstanceRateZeroDivisor>> feature is enabled.
+    In this case, the same vertex attribute will be applied to all
+    instances.
+
+If this structure is not used to define a divisor value for an attribute,
+then the divisor has a logical default value of 1.
+
+.Valid Usage
+****
+  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869]]
+    pname:binding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateZeroDivisor-02228]]
+    If the pname:vertexAttributeInstanceRateZeroDivisor feature is not
+    enabled, pname:divisor must: not be `0`
+  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateDivisor-02229]]
+    If the pname:vertexAttributeInstanceRateDivisor feature is not enabled,
+    pname:divisor must: be `1`
+  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870]]
+    pname:divisor must: be a value between `0` and
+    sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor,
+    inclusive
+  * [[VUID-VkVertexInputBindingDivisorDescriptionEXT-inputRate-01871]]
+    slink:VkVertexInputBindingDescription::pname:inputRate must: be of type
+    ename:VK_VERTEX_INPUT_RATE_INSTANCE for this pname:binding
+****
+
+include::{generated}/validity/structs/VkVertexInputBindingDivisorDescriptionEXT.adoc[]
+--
+endif::VK_EXT_vertex_attribute_divisor[]
+
+
+[[fxvertex-input-address-calculation]]
+== Vertex Input Address Calculation
+The address of each attribute for each code:vertexIndex and
+code:instanceIndex is calculated as follows:
+
+  * Let code:attribDesc be the member of
+    slink:VkPipelineVertexInputStateCreateInfo::pname:pVertexAttributeDescriptions
+    with sname:VkVertexInputAttributeDescription::pname:location equal to
+    the vertex input attribute number.
+  * Let code:bindingDesc be the member of
+    slink:VkPipelineVertexInputStateCreateInfo::pname:pVertexBindingDescriptions
+    with sname:VkVertexInputAttributeDescription::pname:binding equal to
+    code:attribDesc.binding.
+  * Let code:vertexIndex be the index of the vertex within the draw (a value
+    between pname:firstVertex and pname:firstVertex+pname:vertexCount for
+    fname:vkCmdDraw, or a value taken from the index buffer plus
+    pname:vertexOffset for fname:vkCmdDrawIndexed), and let
+    code:instanceIndex be the instance number of the draw (a value between
+    pname:firstInstance and pname:firstInstance+pname:instanceCount).
+  * Let code:offset be an array of offsets into the currently bound vertex
+    buffers specified during fname:vkCmdBindVertexBuffers
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[or fname:vkCmdBindVertexBuffers2]
+    with pname:pOffsets.
+ifdef::VK_EXT_vertex_attribute_divisor[]
+  * Let code:divisor be the member of
+    slink:VkPipelineVertexInputDivisorStateCreateInfoEXT::pname:pVertexBindingDivisors
+    with sname:VkVertexInputBindingDivisorDescriptionEXT::pname:binding
+    equal to code:attribDesc.binding.
+endif::VK_EXT_vertex_attribute_divisor[]
+
+[source,c]
+----
+bufferBindingAddress = buffer[binding].baseAddress + offset[binding];
+
+if (bindingDesc.inputRate == VK_VERTEX_INPUT_RATE_VERTEX)
+    effectiveVertexOffset = vertexIndex * bindingDesc.stride;
+else
+ifndef::VK_EXT_vertex_attribute_divisor[]
+    effectiveVertexOffset = instanceIndex * bindingDesc.stride;
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+    if (divisor == 0)
+        effectiveVertexOffset = firstInstance * bindingDesc.stride;
+    else
+        effectiveVertexOffset = (firstInstance + ((instanceIndex - firstInstance) / divisor)) * bindingDesc.stride;
+endif::VK_EXT_vertex_attribute_divisor[]
+
+attribAddress = bufferBindingAddress + effectiveVertexOffset + attribDesc.offset;
+----
+
+
+[[fxvertex-input-extraction]]
+=== Vertex Input Extraction
+
+For each attribute, raw data is extracted starting at `attribAddress` and is
+converted from the sname:VkVertexInputAttributeDescription's pname:format to
+either floating-point, unsigned integer, or signed integer based on the
+<<formats-numericformat, numeric type>> of pname:format.
+The numeric type of pname:format must: match the numeric type of the input
+variable in the shader.
+The input variable in the shader must: be declared as a 64-bit data type if
+and only if pname:format is a 64-bit data type.
+If pname:format is a packed format, `attribAddress` must: be a multiple of
+the size in bytes of the whole attribute data type as described in
+<<formats-packed,Packed Formats>>.
+Otherwise, `attribAddress` must: be a multiple of the size in bytes of the
+component type indicated by pname:format (see <<formats,Formats>>).
+For attributes that are not 64-bit data types, each component is converted
+to the format of the input variable based on its type and size (as defined
+in the <<formats-definition,Format Definition>> section for each
+elink:VkFormat), using the appropriate equations in <<fundamentals-fp16,
+16-Bit Floating-Point Numbers>>, <<fundamentals-fp11,Unsigned 11-Bit
+Floating-Point Numbers>>, <<fundamentals-fp10,Unsigned 10-Bit Floating-Point
+Numbers>>, <<fundamentals-fixedconv,Fixed-Point Data Conversion>>, and
+<<textures-sexp-RGB,Shared Exponent to RGB>>.
+Signed integer components smaller than 32 bits are sign-extended.
+Attributes that are not 64-bit data types are expanded to four components in
+the same way as described in <<textures-conversion-to-rgba,conversion to
+RGBA>>.
+The number of components in the vertex shader input variable need not
+exactly match the number of components in the format.
+If the vertex shader has fewer components, the extra components are
+discarded.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/geometry.adoc b/codegen/vulkan/vulkan-docs-next/chapters/geometry.adoc
new file mode 100644
index 0000000..78ec89c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/geometry.adoc
@@ -0,0 +1,235 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[geometry]]
+= Geometry Shading
+
+The geometry shader operates on a group of vertices and their associated
+data assembled from a single input primitive, and emits zero or more output
+primitives and the group of vertices and their associated data required for
+each output primitive.
+Geometry shading is enabled when a geometry shader is included in the
+pipeline.
+
+
+[[geometry-input]]
+== Geometry Shader Input Primitives
+
+Each geometry shader invocation has access to all vertices in the primitive
+(and their associated data), which are presented to the shader as an array
+of inputs.
+
+The input primitive type expected by the geometry shader is specified with
+an code:OpExecutionMode instruction in the geometry shader, and must: match
+the incoming primitive type specified by either the pipeline's
+<<drawing-primitive-topologies, primitive topology>> if tessellation is
+inactive, or the <<tessellation, tessellation mode>> if tessellation is
+active, as follows:
+
+  * An input primitive type of code:InputPoints must: only be used with a
+    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, or with a
+    tessellation shader specifying code:PointMode.
+    The input arrays always contain one element, as described by the
+    <<drawing-point-lists, point list topology>> or
+    <<tessellation-point-mode, tessellation in point mode>>.
+  * An input primitive type of code:InputLines must: only be used with a
+    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST or
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, or with a tessellation shader
+    specifying code:IsoLines that does not specify code:PointMode.
+    The input arrays always contain two elements, as described by the
+    <<drawing-line-lists, line list topology>> or <<drawing-line-strips,
+    line strip topology>>, or by <<tessellation-isoline-tessellation,
+    isoline tessellation>>.
+  * An input primitive type of code:InputLinesAdjacency must: only be used
+    when tessellation is inactive, with a pipeline topology of
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY or
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY.
+    The input arrays always contain four elements, as described by the
+    <<drawing-line-lists-with-adjacency, line list with adjacency topology>>
+    or <<drawing-line-strips-with-adjacency, line strip with adjacency
+    topology>>.
+  * An input primitive type of code:Triangles must: only be used with a
+    pipeline topology of ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, or
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN; or with a tessellation shader
+    specifying code:Quads or code:Triangles that does not specify
+    code:PointMode.
+    The input arrays always contain three elements, as described by the
+    <<drawing-triangle-lists, triangle list topology>>,
+    <<drawing-triangle-strips, triangle strip topology>>, or
+    <<drawing-triangle-fans, triangle fan topology>>, or by
+    <<tessellation-triangle-tessellation, triangle>> or
+    <<tessellation-quad-tessellation, quad tessellation>>.
+    Vertices may: be in a different absolute order than specified by the
+    topology, but must: adhere to the specified winding order.
+  * An input primitive type of code:InputTrianglesAdjacency must: only be
+    used when tessellation is inactive, with a pipeline topology of
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY.
+    The input arrays always contain six elements, as described by the
+    <<drawing-triangle-lists-with-adjacency, triangle list with adjacency
+    topology>> or <<drawing-triangle-strips-with-adjacency, triangle strip
+    with adjacency topology>>.
+    Vertices may: be in a different absolute order than specified by the
+    topology, but must: adhere to the specified winding order, and the
+    vertices making up the main primitive must: still occur at the first,
+    third, and fifth index.
+
+
+[[geometry-output]]
+== Geometry Shader Output Primitives
+
+A geometry shader generates primitives in one of three output modes: points,
+line strips, or triangle strips.
+The primitive mode is specified in the shader using an code:OpExecutionMode
+instruction with the code:OutputPoints, code:OutputLineStrip or
+code:OutputTriangleStrip modes, respectively.
+Each geometry shader must: include exactly one output primitive mode.
+
+The vertices output by the geometry shader are assembled into points, lines,
+or triangles based on the output primitive type and the resulting primitives
+are then further processed as described in <<primsrast>>.
+If the number of vertices emitted by the geometry shader is not sufficient
+to produce a single primitive, vertices corresponding to incomplete
+primitives are not processed by subsequent pipeline stages.
+The number of vertices output by the geometry shader is limited to a maximum
+count specified in the shader.
+
+The maximum output vertex count is specified in the shader using an
+code:OpExecutionMode instruction with the mode set to code:OutputVertices
+and the maximum number of vertices that will be produced by the geometry
+shader specified as a literal.
+Each geometry shader must: specify a maximum output vertex count.
+
+
+[[geometry-invocations]]
+== Multiple Invocations of Geometry Shaders
+
+Geometry shaders can: be invoked more than one time for each input
+primitive.
+This is known as _geometry shader instancing_ and is requested by including
+an code:OpExecutionMode instruction with code:mode specified as
+code:Invocations and the number of invocations specified as an integer
+literal.
+
+In this mode, the geometry shader will execute at least [eq]#n# times for
+each input primitive, where [eq]#n# is the number of invocations specified
+in the code:OpExecutionMode instruction.
+The instance number is available to each invocation as a built-in input
+using code:InvocationId.
+
+
+[[geometry-ordering]]
+== Geometry Shader Primitive Ordering
+
+Limited guarantees are provided for the relative ordering of primitives
+produced by a geometry shader, as they pertain to <<drawing-primitive-order,
+primitive order>>.
+
+  * For instanced geometry shaders, the output primitives generated from
+    each input primitive are passed to subsequent pipeline stages using the
+    invocation number to order the primitives, from least to greatest.
+  * All output primitives generated from a given input primitive are passed
+    to subsequent pipeline stages before any output primitives generated
+    from subsequent input primitives.
+
+
+ifdef::VK_NV_geometry_shader_passthrough[]
+[[geometry-passthrough]]
+== Geometry Shader Passthrough
+
+A geometry shader that uses the code:PassthroughNV decoration on a variable
+in its input interface is considered a _passthrough geometry shader_.
+Output primitives in a passthrough geometry shader must: have the same
+topology as the input primitive and are not produced by emitting vertices.
+The vertices of the output primitive have two different types of attributes,
+per-vertex and per-primitive.
+Geometry shader input variables with code:PassthroughNV decoration are
+considered to produce per-vertex outputs, where values for each output
+vertex are copied from the corresponding input vertex.
+Any built-in or user-defined geometry shader outputs are considered
+per-primitive in a passthrough geometry shader, where a single output value
+is copied to all output vertices.
+
+The remainder of this section details the usage of the code:PassthroughNV
+decoration and modifications to the interface matching rules when using
+passthrough geometry shaders.
+
+
+[[geometry-passthrough-passthrough]]
+=== code:PassthroughNV Decoration
+
+Decorating a geometry shader input variable with the code:PassthroughNV
+decoration indicates that values of this input are copied through to the
+corresponding vertex of the output primitive.
+Input variables and block members which do not have the code:PassthroughNV
+decoration are consumed by the geometry shader without being passed through
+to subsequent stages.
+
+The code:PassthroughNV decoration must: only be used within a geometry
+shader.
+
+Any variable decorated with code:PassthroughNV must: be declared using the
+code:Input storage class.
+
+The code:PassthroughNV decoration must: not be used with any of:
+
+  * an input primitive type other than code:InputPoints, code:InputLines, or
+    code:Triangles, as specified by the mode for code:OpExecutionMode.
+  * an invocation count other than one, as specified by the code:Invocations
+    mode for code:OpExecutionMode.
+  * an code:OpEntryPoint which statically uses the code:OpEmitVertex or
+    code:OpEndPrimitive instructions.
+  * a variable decorated with the code:InvocationId built-in decoration.
+  * a variable decorated with the code:PrimitiveId built-in decoration that
+    is declared using the code:Input storage class.
+
+
+[[geometry-passthrough-interface]]
+=== Passthrough Interface Matching
+
+When a passthrough geometry shader is in use, the
+<<interfaces-iointerfaces-matching,Interface Matching>> rules involving the
+geometry shader input and output interfaces operate as described in this
+section.
+
+For the purposes of matching passthrough geometry shader inputs with outputs
+of the previous pipeline stages, the code:PassthroughNV decoration is
+ignored.
+
+For the purposes of matching the outputs of the geometry shader with
+subsequent pipeline stages, each input variable with the code:PassthroughNV
+decoration is considered to add an equivalent output variable with the same
+type, decoration (other than code:PassthroughNV), number, and declaration
+order on the output interface.
+The output variable declaration corresponding to an input variable decorated
+with code:PassthroughNV will be identical to the input declaration, except
+that the outermost array dimension of such variables is removed.
+The output block declaration corresponding to an input block decorated with
+code:PassthroughNV or having members decorated with code:PassthroughNV will
+be identical to the input declaration, except that the outermost array
+dimension of such declaration is removed.
+
+If an input block is decorated with code:PassthroughNV, the equivalent
+output block contains all the members of the input block.
+Otherwise, the equivalent output block contains only those input block
+members decorated with code:PassthroughNV.
+All members of the corresponding output block are assigned code:Location and
+code:Component decorations identical to those assigned to the corresponding
+input block members.
+
+Output variables and blocks generated from inputs decorated with
+code:PassthroughNV will only exist for the purposes of interface matching;
+these declarations are not available to geometry shader code or listed in
+the module interface.
+
+For the purposes of component counting, passthrough geometry shaders count
+all statically used input variable components declared with the
+code:PassthroughNV decoration as output components as well, since their
+values will be copied to the output primitive produced by the geometry
+shader.
+
+endif::VK_NV_geometry_shader_passthrough[]
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/initialization.adoc b/codegen/vulkan/vulkan-docs-next/chapters/initialization.adoc
new file mode 100644
index 0000000..24e3939
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/initialization.adoc
@@ -0,0 +1,765 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[initialization]]
+= Initialization
+
+Before using Vulkan, an application must: initialize it by loading the
+Vulkan commands, and creating a sname:VkInstance object.
+
+
+[[initialization-functionpointers]]
+== Command Function Pointers
+
+Vulkan commands are not necessarily exposed by static linking on a platform.
+Commands to query function pointers for Vulkan commands are described below.
+
+[NOTE]
+.Note
+====
+When extensions are <<extendingvulkan-compatibility-promotion,promoted>> or
+otherwise incorporated into another extension or Vulkan core version,
+command <<extendingvulkan-compatibility-aliases,aliases>> may be included.
+Whilst the behavior of each command alias is identical, the behavior of
+retrieving each alias's function pointer is not.
+A function pointer for a given alias can only be retrieved if the extension
+or version that introduced that alias is supported and enabled, irrespective
+of whether any other alias is available.
+====
+
+[open,refpage='vkGetInstanceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
+--
+Function pointers for all Vulkan commands can: be obtained by calling:
+
+include::{generated}/api/protos/vkGetInstanceProcAddr.adoc[]
+
+  * pname:instance is the instance that the function pointer will be
+    compatible with, or `NULL` for commands not dependent on any instance.
+  * pname:pName is the name of the command to obtain.
+
+fname:vkGetInstanceProcAddr itself is obtained in a platform- and loader-
+specific manner.
+Typically, the loader library will export this command as a function symbol,
+so applications can: link against the loader library, or load it dynamically
+and look up the symbol using platform-specific APIs.
+
+The table below defines the various use cases for
+fname:vkGetInstanceProcAddr and expected return value ("`fp`" is "`function
+pointer`") for each case.
+A valid returned function pointer ("`fp`") must: not be `NULL`.
+
+The returned function pointer is of type tlink:PFN_vkVoidFunction, and must:
+be cast to the type of the command being queried before use.
+
+.fname:vkGetInstanceProcAddr behavior
+[width="80%",options="header"]
+|====
+| pname:instance   | pname:pName                                  | return value
+| *^1^             | `NULL`                                       | undefined:
+| invalid non-`NULL` instance | *^1^                              | undefined:
+| `NULL`           | _global command_^2^                          | fp
+ifdef::VK_VERSION_1_2[]
+| `NULL`           | flink:vkGetInstanceProcAddr                  | fp^5^
+endif::VK_VERSION_1_2[]
+| instance         | flink:vkGetInstanceProcAddr                  | fp
+| instance         | core _dispatchable command_                  | fp^3^
+| instance         | enabled instance extension dispatchable command for pname:instance    | fp^3^
+| instance         | available device extension^4^ dispatchable command for pname:instance | fp^3^
+2+|  any other case, not covered above                            | `NULL`
+|====
+
+1::
+    "*" means any representable value for the parameter (including valid
+    values, invalid values, and `NULL`).
+
+2::
+    The global commands are:
+ifdef::VK_VERSION_1_1[flink:vkEnumerateInstanceVersion,]
+    flink:vkEnumerateInstanceExtensionProperties,
+    flink:vkEnumerateInstanceLayerProperties, and flink:vkCreateInstance.
+    Dispatchable commands are all other commands which are not global.
+
+3::
+    The returned function pointer must: only be called with a dispatchable
+    object (the first parameter) that is pname:instance or a child of
+    pname:instance, e.g. slink:VkInstance, slink:VkPhysicalDevice,
+    slink:VkDevice, slink:VkQueue, or slink:VkCommandBuffer.
+
+4::
+    An "`available device extension`" is a device extension supported by any
+    physical device enumerated by pname:instance.
+
+ifdef::VK_VERSION_1_2[]
+5::
+ifndef::VKSC_VERSION_1_0[Starting with Vulkan 1.2, ]
+    fname:vkGetInstanceProcAddr can resolve itself with a `NULL` instance
+    pointer.
+endif::VK_VERSION_1_2[]
+
+include::{generated}/validity/protos/vkGetInstanceProcAddr.adoc[]
+--
+
+[open,refpage='vkGetDeviceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
+--
+In order to support systems with multiple Vulkan implementations, the
+function pointers returned by flink:vkGetInstanceProcAddr may: point to
+dispatch code that calls a different real implementation for different
+slink:VkDevice objects or their child objects.
+The overhead of the internal dispatch for slink:VkDevice objects can be
+avoided by obtaining device-specific function pointers for any commands that
+use a device or device-child object as their dispatchable object.
+Such function pointers can: be obtained by calling:
+
+include::{generated}/api/protos/vkGetDeviceProcAddr.adoc[]
+
+The table below defines the various use cases for fname:vkGetDeviceProcAddr
+and expected return value ("`fp`" is "`function pointer`") for each case.
+A valid returned function pointer ("`fp`") must: not be `NULL`.
+
+The returned function pointer is of type tlink:PFN_vkVoidFunction, and must:
+be cast to the type of the command being queried before use.
+The function pointer must: only be called with a dispatchable object (the
+first parameter) that is pname:device or a child of pname:device.
+
+.fname:vkGetDeviceProcAddr behavior
+[width="80%",options="header"]
+|====
+| pname:device   | pname:pName                      | return value
+| `NULL`         | *^1^                             | undefined:
+| invalid device | *^1^                             | undefined:
+| device         | `NULL`                           | undefined:
+| device         | requested core version^2^ device-level dispatchable command^3^ | fp^4^
+| device         | enabled extension device-level dispatchable command^3^ | fp^4^
+2+| any other case, not covered above               | `NULL`
+|====
+
+1::
+    "*" means any representable value for the parameter (including valid
+    values, invalid values, and `NULL`).
+
+2::
+    Device-level commands which are part of the core version specified by
+    slink:VkApplicationInfo::pname:apiVersion when creating the instance
+    will always return a valid function pointer.
+ifndef::VK_KHR_maintenance5[]
+    Core commands beyond that version which are supported by the
+    implementation may: either return `NULL` or a function pointer.
+    If a function pointer is returned, it must: not be called.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+    If the <<features-maintenance5, pname:maintenance5>> feature is enabled,
+    core commands beyond that version which are supported by the
+    implementation will return `NULL`, otherwise the implementation may:
+    either return `NULL` or a function pointer.
+    If a function pointer is returned, it must: not be called.
+endif::VK_KHR_maintenance5[]
+
+3::
+    In this function, device-level excludes all physical-device-level
+    commands.
+
+4::
+    The returned function pointer must: only be called with a dispatchable
+    object (the first parameter) that is pname:device or a child of
+    pname:device e.g. slink:VkDevice, slink:VkQueue, or
+    slink:VkCommandBuffer.
+
+include::{generated}/validity/protos/vkGetDeviceProcAddr.adoc[]
+--
+
+[open,refpage='PFN_vkVoidFunction',desc='Placeholder function pointer type returned by queries',type='funcpointers',xrefs='vkGetDeviceProcAddr vkGetInstanceProcAddr']
+--
+The definition of tlink:PFN_vkVoidFunction is:
+
+include::{generated}/api/funcpointers/PFN_vkVoidFunction.adoc[]
+
+This type is returned from command function pointer queries, and must: be
+cast to an actual command function pointer before use.
+--
+
+
+ifdef::VK_VERSION_1_1[]
+=== Extending Physical Device Core Functionality
+
+New core physical-device-level functionality can: be used when the
+physical-device version is greater than or equal to the version of Vulkan
+that added the new functionality.
+The Vulkan version supported by a physical device can: be obtained by
+calling flink:vkGetPhysicalDeviceProperties.
+endif::VK_VERSION_1_1[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[[initialization-phys-dev-extensions]]
+=== Extending Physical Device From Device Extensions
+
+ifdef::VKSC_VERSION_1_0[In Vulkan SC 1.0,]
+ifndef::VKSC_VERSION_1_0[]
+When the `apiext:VK_KHR_get_physical_device_properties2` extension is
+enabled,
+ifdef::VK_VERSION_1_1[]
+or when both the instance and the physical-device versions are at least 1.1,
+endif::VK_VERSION_1_1[]
+endif::VKSC_VERSION_1_0[]
+physical-device-level functionality of a device extension can: be used with
+a physical device if the corresponding extension is enumerated by
+flink:vkEnumerateDeviceExtensionProperties for that physical device, even
+before a logical device has been created.
+
+To obtain a function pointer for a physical-device-level command from a
+device extension, an application can: use flink:vkGetInstanceProcAddr.
+This function pointer may: point to dispatch code, which calls a different
+real implementation for different sname:VkPhysicalDevice objects.
+Applications must: not use a slink:VkPhysicalDevice in any command added by
+an extension or core version that is not supported by that physical device.
+
+Device extensions may: define structures that can: be added to the
+ptext:pNext chain of physical-device-level commands.
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+
+[[initialization-instances]]
+== Instances
+
+[open,refpage='VkInstance',desc='Opaque handle to an instance object',type='handles']
+--
+There is no global state in Vulkan and all per-application state is stored
+in a sname:VkInstance object.
+Creating a sname:VkInstance object initializes the Vulkan library and allows
+the application to pass information about itself to the implementation.
+
+Instances are represented by sname:VkInstance handles:
+
+include::{generated}/api/handles/VkInstance.adoc[]
+--
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='vkEnumerateInstanceVersion',desc='Query instance-level version before instance creation',type='protos']
+--
+To query the version of instance-level functionality supported by the
+implementation, call:
+
+include::{generated}/api/protos/vkEnumerateInstanceVersion.adoc[]
+
+  * pname:pApiVersion is a pointer to a code:uint32_t, which is the version
+    of Vulkan supported by instance-level functionality, encoded as
+    described in <<extendingvulkan-coreversions-versionnumbers>>.
+
+[NOTE]
+.Note
+====
+The intended behaviour of flink:vkEnumerateInstanceVersion is that an
+implementation should: not need to perform memory allocations and should:
+unconditionally return ename:VK_SUCCESS.
+The loader, and any enabled layers, may: return
+ename:VK_ERROR_OUT_OF_HOST_MEMORY in the case of a failed memory allocation.
+====
+
+include::{generated}/validity/protos/vkEnumerateInstanceVersion.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+[open,refpage='vkCreateInstance',desc='Create a new Vulkan instance',type='protos']
+--
+To create an instance object, call:
+
+include::{generated}/api/protos/vkCreateInstance.adoc[]
+
+  * pname:pCreateInfo is a pointer to a slink:VkInstanceCreateInfo structure
+    controlling creation of the instance.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pInstance points a slink:VkInstance handle in which the resulting
+    instance is returned.
+
+fname:vkCreateInstance verifies that the requested layers exist.
+If not, fname:vkCreateInstance will return ename:VK_ERROR_LAYER_NOT_PRESENT.
+Next fname:vkCreateInstance verifies that the requested extensions are
+supported (e.g. in the implementation or in any enabled instance layer) and
+if any requested extension is not supported, fname:vkCreateInstance must:
+return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
+After verifying and enabling the instance layers and extensions the
+sname:VkInstance object is created and returned to the application.
+If a requested extension is only supported by a layer, both the layer and
+the extension need to be specified at fname:vkCreateInstance time for the
+creation to succeed.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateInstance-ppEnabledExtensionNames-01388]]
+    All <<extendingvulkan-extensions-extensiondependencies, required
+    extensions>> for each extension in the
+    slink:VkInstanceCreateInfo::pname:ppEnabledExtensionNames list must:
+    also be present in that list
+****
+
+include::{generated}/validity/protos/vkCreateInstance.adoc[]
+--
+
+[open,refpage='VkInstanceCreateInfo',desc='Structure specifying parameters of a newly created instance',type='structs']
+--
+The sname:VkInstanceCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkInstanceCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkInstanceCreateFlagBits indicating
+    the behavior of the instance.
+  * pname:pApplicationInfo is `NULL` or a pointer to a
+    sname:VkApplicationInfo structure.
+    If not `NULL`, this information helps implementations recognize behavior
+    inherent to classes of applications.
+    slink:VkApplicationInfo is defined in detail below.
+  * pname:enabledLayerCount is the number of global layers to enable.
+  * pname:ppEnabledLayerNames is a pointer to an array of
+    pname:enabledLayerCount null-terminated UTF-8 strings containing the
+    names of layers to enable for the created instance.
+    The layers are loaded in the order they are listed in this array, with
+    the first array element being the closest to the application, and the
+    last array element being the closest to the driver.
+    See the <<extendingvulkan-layers>> section for further details.
+  * pname:enabledExtensionCount is the number of global extensions to
+    enable.
+  * pname:ppEnabledExtensionNames is a pointer to an array of
+    pname:enabledExtensionCount null-terminated UTF-8 strings containing the
+    names of extensions to enable.
+
+ifdef::VK_EXT_debug_report,VK_EXT_debug_utils[]
+To capture events that occur while creating or destroying an instance, an
+application can: link a
+ifdef::VK_EXT_debug_report[]
+slink:VkDebugReportCallbackCreateInfoEXT structure
+ifdef::VK_EXT_debug_utils[]
+or a
+endif::VK_EXT_debug_utils[]
+endif::VK_EXT_debug_report[]
+ifdef::VK_EXT_debug_utils[]
+slink:VkDebugUtilsMessengerCreateInfoEXT structure
+endif::VK_EXT_debug_utils[]
+to the pname:pNext element of the sname:VkInstanceCreateInfo structure given
+to fname:vkCreateInstance.
+This callback is only valid for the duration of the flink:vkCreateInstance
+and the flink:vkDestroyInstance call.
+Use
+ifdef::VK_EXT_debug_report[]
+flink:vkCreateDebugReportCallbackEXT
+ifdef::VK_EXT_debug_utils[]
+or
+endif::VK_EXT_debug_utils[]
+endif::VK_EXT_debug_report[]
+ifdef::VK_EXT_debug_utils[]
+flink:vkCreateDebugUtilsMessengerEXT
+endif::VK_EXT_debug_utils[]
+to create persistent callback objects.
+endif::VK_EXT_debug_report,VK_EXT_debug_utils[]
+
+ifdef::VK_LUNARG_direct_driver_loading[]
+An application can add additional drivers by including the
+slink:VkDirectDriverLoadingListLUNARG struct to the pname:pNext element of
+the sname:VkInstanceCreateInfo structure given to fname:vkCreateInstance.
+
+[NOTE]
+.Note
+====
+slink:VkDirectDriverLoadingListLUNARG allows applications to ship drivers
+with themselves.
+Only drivers that are designed to work with it should be used, such as
+drivers that implement Vulkan in software or that implement Vulkan by
+translating it to a different API.
+Any driver that requires installation should not be used, such as hardware
+drivers.
+====
+endif::VK_LUNARG_direct_driver_loading[]
+
+ifdef::VK_EXT_debug_report,VK_EXT_debug_utils,VK_KHR_portability_enumeration,VK_LUNARG_direct_driver_loading[]
+.Valid Usage
+****
+ifdef::VK_EXT_debug_report[]
+  * [[VUID-VkInstanceCreateInfo-pNext-04925]]
+    If the pname:pNext chain of sname:VkInstanceCreateInfo includes a
+    sname:VkDebugReportCallbackCreateInfoEXT structure, the list of enabled
+    extensions in pname:ppEnabledExtensionNames must: contain
+    `apiext:VK_EXT_debug_report`
+endif::VK_EXT_debug_report[]
+ifdef::VK_EXT_debug_utils[]
+  * [[VUID-VkInstanceCreateInfo-pNext-04926]]
+    If the pname:pNext chain of sname:VkInstanceCreateInfo includes a
+    sname:VkDebugUtilsMessengerCreateInfoEXT structure, the list of enabled
+    extensions in pname:ppEnabledExtensionNames must: contain
+    `apiext:VK_EXT_debug_utils`
+endif::VK_EXT_debug_utils[]
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkInstanceCreateInfo-pNext-06779]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be either
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT or
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT
+endif::VK_EXT_metal_objects[]
+ifdef::VK_KHR_portability_enumeration[]
+  * [[VUID-VkInstanceCreateInfo-flags-06559]]
+    If pname:flags has the
+    ename:VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit set, the list
+    of enabled extensions in pname:ppEnabledExtensionNames must: contain
+    `apiext:VK_KHR_portability_enumeration`
+endif::VK_KHR_portability_enumeration[]
+ifdef::VK_LUNARG_direct_driver_loading[]
+  * [[VUID-VkInstanceCreateInfo-pNext-09400]]
+    If the pname:pNext chain of sname:VkInstanceCreateInfo includes a
+    slink:VkDirectDriverLoadingListLUNARG structure, the list of enabled
+    extensions in pname:ppEnabledExtensionNames must: contain
+    apiext:VK_LUNARG_direct_driver_loading
+endif::VK_LUNARG_direct_driver_loading[]
+****
+endif::VK_EXT_debug_report,VK_EXT_debug_utils,VK_KHR_portability_enumeration,VK_LUNARG_direct_driver_loading[]
+
+include::{generated}/validity/structs/VkInstanceCreateInfo.adoc[]
+--
+
+[open,refpage='VkInstanceCreateFlagBits',desc='Bitmask specifying behavior of the instance',type='enums']
+--
+include::{generated}/api/enums/VkInstanceCreateFlagBits.adoc[]
+
+ifdef::VK_KHR_portability_enumeration[]
+  * ename:VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR specifies that
+    the instance will enumerate available Vulkan Portability-compliant
+    physical devices and groups in addition to the Vulkan physical devices
+    and groups that are enumerated by default.
+endif::VK_KHR_portability_enumeration[]
+
+ifndef::VK_KHR_portability_enumeration[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_KHR_portability_enumeration[]
+--
+
+[open,refpage='VkInstanceCreateFlags',desc='Bitmask of VkInstanceCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkInstanceCreateFlags.adoc[]
+
+ifndef::VK_KHR_portability_enumeration[]
+tname:VkInstanceCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+endif::VK_KHR_portability_enumeration[]
+ifdef::VK_KHR_portability_enumeration[]
+tname:VkInstanceCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkInstanceCreateFlagBits.
+endif::VK_KHR_portability_enumeration[]
+--
+
+ifdef::VK_EXT_validation_flags[]
+include::{chapters}/VK_EXT_validation_flags.adoc[]
+endif::VK_EXT_validation_flags[]
+
+ifdef::VK_EXT_validation_features[]
+include::{chapters}/VK_EXT_validation_features.adoc[]
+endif::VK_EXT_validation_features[]
+
+ifdef::VK_LUNARG_direct_driver_loading[]
+[open,refpage='VkDirectDriverLoadingListLUNARG',desc='Structure specifying additional drivers to load',type='structs']
+--
+The sname:VkDirectDriverLoadingListLUNARG structure is defined as:
+
+include::{generated}/api/structs/VkDirectDriverLoadingListLUNARG.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:mode controls the mode in which to load the provided drivers.
+  * pname:driverCount is the number of driver manifest paths.
+  * pname:pDrivers is a pointer to an array of pname:driverCount
+    slink:VkDirectDriverLoadingInfoLUNARG structures.
+
+When creating a Vulkan instance for which additional drivers are to be
+included, add a sname:VkDirectDriverLoadingListLUNARG structure to the pNext
+chain of the slink:VkInstanceCreateInfo structure, and include in it the
+list of sname:VkDirectDriverLoadingInfoLUNARG structures which contain the
+information necessary to load additional drivers.
+
+include::{generated}/validity/structs/VkDirectDriverLoadingListLUNARG.adoc[]
+--
+
+[open,refpage='VkDirectDriverLoadingInfoLUNARG',desc='Structure specifying the information required to load an additional driver',type='structs']
+--
+The sname:VkDirectDriverLoadingInfoLUNARG structure is defined as:
+
+include::{generated}/api/structs/VkDirectDriverLoadingInfoLUNARG.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pfnGetInstanceProcAddr is a tlink:PFN_vkGetInstanceProcAddrLUNARG
+    pointer to the driver flink:vkGetInstanceProcAddr function.
+
+include::{generated}/validity/structs/VkDirectDriverLoadingInfoLUNARG.adoc[]
+--
+
+[open,refpage='VkDirectDriverLoadingModeLUNARG',desc='Specify loader behavior of added drivers',type='enums']
+--
+Possible values of slink:VkDirectDriverLoadingListLUNARG::pname:mode,
+specifying the mode in which drivers are used, are:
+
+include::{generated}/api/enums/VkDirectDriverLoadingModeLUNARG.adoc[]
+
+  * ename:VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG specifies that the
+    provided drivers are used instead of the system-loaded drivers.
+  * ename:VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG specifies that the
+    provided drivers are used in addition to the system-loaded drivers.
+--
+
+[open,refpage='VkDirectDriverLoadingFlagsLUNARG',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDirectDriverLoadingFlagsLUNARG.adoc[]
+
+tname:VkDirectDriverLoadingFlagsLUNARG is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+[open,refpage='PFN_vkGetInstanceProcAddrLUNARG',desc='Type definition for vkGetInstanceProcAddr',type='funcpointers']
+--
+The type of tlink:PFN_vkGetInstanceProcAddrLUNARG is:
+
+include::{generated}/api/funcpointers/PFN_vkGetInstanceProcAddrLUNARG.adoc[]
+
+  * pname:instance is a slink:VkInstance handle.
+  * pname:pName is the name of a Vulkan command.
+
+This type is compatible with the type of a pointer to the
+flink:vkGetInstanceProcAddr command, but is used only to specify device
+driver addresses in
+slink:VkDirectDriverLoadingInfoLUNARG::pname:pfnGetInstanceProcAddr.
+
+[NOTE]
+.Note
+====
+This type exists only because of limitations in the XML schema and
+processing scripts, and its name may change in the future.
+Ideally we would use the tname:PFN_vkGetInstanceProcAddr type generated in
+the `vulkan_core.h` header.
+====
+--
+endif::VK_LUNARG_direct_driver_loading[]
+
+[open,refpage='VkApplicationInfo',desc='Structure specifying application information',type='structs']
+--
+The sname:VkApplicationInfo structure is defined as:
+
+include::{generated}/api/structs/VkApplicationInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pApplicationName is `NULL` or is a pointer to a null-terminated
+    UTF-8 string containing the name of the application.
+  * pname:applicationVersion is an unsigned integer variable containing the
+    developer-supplied version number of the application.
+  * pname:pEngineName is `NULL` or is a pointer to a null-terminated UTF-8
+    string containing the name of the engine (if any) used to create the
+    application.
+  * pname:engineVersion is an unsigned integer variable containing the
+    developer-supplied version number of the engine used to create the
+    application.
+ifndef::VK_VERSION_1_1[]
+  * pname:apiVersion is the version of the Vulkan API against which the
+    application expects to run, encoded as described in
+    <<extendingvulkan-coreversions-versionnumbers>>.
+    If pname:apiVersion is 0 the implementation must: ignore it, otherwise
+    if the implementation does not support the requested pname:apiVersion,
+    or an effective substitute for pname:apiVersion, it must: return
+    ename:VK_ERROR_INCOMPATIBLE_DRIVER.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+  * pname:apiVersion must: be the highest version of Vulkan that the
+    application is designed to use, encoded as described in
+    <<extendingvulkan-coreversions-versionnumbers>>.
+endif::VK_VERSION_1_1[]
+    The patch version number specified in pname:apiVersion is ignored when
+    creating an instance object.
+    The variant version of the instance must: match that requested in
+    pname:apiVersion.
+
+ifdef::VK_VERSION_1_1[]
+Vulkan 1.0 implementations were required to return
+ename:VK_ERROR_INCOMPATIBLE_DRIVER if pname:apiVersion was larger than 1.0.
+Implementations that support Vulkan 1.1 or later must: not return
+ename:VK_ERROR_INCOMPATIBLE_DRIVER for any value of pname:apiVersion
+ifndef::VKSC_VERSION_1_0[.]
+ifdef::VKSC_VERSION_1_0[, unless an incompatible variant is requested.]
+
+ifdef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Vulkan SC 1.0 is based on Vulkan 1.2 and thus instance creation may only
+fail with ename:VK_ERROR_INCOMPATIBLE_DRIVER if an incompatible variant is
+requested - that is if the Vulkan SC API is requested from a Vulkan
+implementation or if the Vulkan API is requested from a Vulkan SC
+implementation.
+====
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Because Vulkan 1.0 implementations may: fail with
+ename:VK_ERROR_INCOMPATIBLE_DRIVER, applications should: determine the
+version of Vulkan available before calling flink:vkCreateInstance.
+If the flink:vkGetInstanceProcAddr returns `NULL` for
+flink:vkEnumerateInstanceVersion, it is a Vulkan 1.0 implementation.
+Otherwise, the application can: call flink:vkEnumerateInstanceVersion to
+determine the version of Vulkan.
+====
+
+As long as the instance supports at least Vulkan 1.1, an application can:
+use different versions of Vulkan with an instance than it does with a device
+or physical device.
+
+[NOTE]
+.Note
+====
+The Khronos validation layers will treat pname:apiVersion as the highest API
+version the application targets, and will validate API usage against the
+minimum of that version and the implementation version (instance or device,
+depending on context).
+If an application tries to use functionality from a greater version than
+this, a validation error will be triggered.
+
+For example, if the instance supports Vulkan 1.1 and three physical devices
+support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively, and if the
+application sets pname:apiVersion to 1.2, the application can: use the
+following versions of Vulkan:
+
+  * Vulkan 1.0 can: be used with the instance and with all physical devices.
+  * Vulkan 1.1 can: be used with the instance and with the physical devices
+    that support Vulkan 1.1 and Vulkan 1.2.
+  * Vulkan 1.2 can: be used with the physical device that supports Vulkan
+    1.2.
+
+If we modify the above example so that the application sets pname:apiVersion
+to 1.1, then the application must: not use Vulkan 1.2 functionality on the
+physical device that supports Vulkan 1.2.
+====
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+Providing a `NULL` slink:VkInstanceCreateInfo::pname:pApplicationInfo or
+providing an pname:apiVersion of 0 is equivalent to providing an
+pname:apiVersion of
+ifndef::VKSC_VERSION_1_0[`VK_MAKE_API_VERSION(0,1,0,0)`.]
+ifdef::VKSC_VERSION_1_0[`VK_MAKE_API_VERSION(1,1,0,0)`.]
+====
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_EXT_application_parameters[]
+To provide _application parameters_ at instance creation time, an
+application can: link one or more slink:VkApplicationParametersEXT
+structures to the pname:pNext chain of the sname:VkApplicationInfo
+structure.
+
+If slink:VkApplicationParametersEXT::pname:vendorID does not correspond to
+an ICD that is currently available, or if
+slink:VkApplicationParametersEXT::pname:deviceID is not `0` and does not
+correspond to a physical device that is available on the system,
+flink:vkCreateInstance will fail and return
+ename:VK_ERROR_INCOMPATIBLE_DRIVER.
+If slink:VkApplicationParametersEXT::pname:deviceID is `0`, the application
+parameter applies to all physical devices supported by the ICD identified by
+slink:VkApplicationParametersEXT::pname:vendorID.
+
+If slink:VkApplicationParametersEXT::pname:key is not a valid
+implementation-defined application parameter key for the instance being
+created with pname:vendorID, or if pname:value is not a valid value for the
+specified pname:key, flink:vkCreateInstance will fail and return
+ename:VK_ERROR_INITIALIZATION_FAILED.
+
+For any implementation-defined application parameter pname:key that exists
+but is not set by the application, the implementation-specific default value
+is used.
+endif::VK_EXT_application_parameters[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkApplicationInfo-apiVersion-04010]]
+    If pname:apiVersion is not `0`, then it must: be greater than or equal
+    to dlink:VK_API_VERSION_1_0
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkApplicationInfo-apiVersion-05021]]
+    If pname:apiVersion is not `0` and its variant is
+    dname:VKSC_API_VARIANT, then it must: be greater than or equal to
+    dlink:VKSC_API_VERSION_1_0
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_application_parameters[]
+  * [[VUID-VkApplicationInfo-key-05093]]
+    The pname:key value of each slink:VkApplicationParametersEXT structure
+    in the slink:VkApplicationInfo::pname:pNext chain must: be unique for
+    each pname:vendorID and pname:deviceID pairing
+endif::VK_EXT_application_parameters[]
+****
+
+include::{generated}/validity/structs/VkApplicationInfo.adoc[]
+--
+
+ifdef::VK_EXT_application_parameters[]
+[open,refpage='VkApplicationParametersEXT',desc='Structure specifying application parameters to an instance or device',type='structs']
+--
+The sname:VkApplicationParametersEXT structure is defined as:
+
+include::{generated}/api/structs/VkApplicationParametersEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vendorID is the slink:VkPhysicalDeviceProperties::pname:vendorID
+    of the ICD that the application parameter is applied to.
+  * pname:deviceID is `0` or the
+    slink:VkPhysicalDeviceProperties::pname:deviceID of the physical device
+    that the application parameter is applied to.
+  * pname:key is a 32-bit vendor-specific enumerant identifying the
+    application parameter that is being set.
+  * pname:value is the 64-bit value that is being set for the application
+    parameter specified by pname:key.
+
+include::{generated}/validity/structs/VkApplicationParametersEXT.adoc[]
+--
+endif::VK_EXT_application_parameters[]
+
+[open,refpage='vkDestroyInstance',desc='Destroy an instance of Vulkan',type='protos']
+--
+To destroy an instance, call:
+
+include::{generated}/api/protos/vkDestroyInstance.adoc[]
+
+  * pname:instance is the handle of the instance to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyInstance-instance-00629]]
+    All child objects created using pname:instance must: have been destroyed
+    prior to destroying pname:instance
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyInstance-instance-00630]]
+    If sname:VkAllocationCallbacks were provided when pname:instance was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyInstance-instance-00631]]
+    If no sname:VkAllocationCallbacks were provided when pname:instance was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyInstance.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/interfaces.adoc b/codegen/vulkan/vulkan-docs-next/chapters/interfaces.adoc
new file mode 100644
index 0000000..495afd8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/interfaces.adoc
@@ -0,0 +1,5321 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[interfaces]]
+= Shader Interfaces
+
+When a pipeline is created, the set of shaders specified in the
+corresponding stext:VkPipelineCreateInfo structure are implicitly linked at
+a number of different interfaces.
+
+  * <<interfaces-iointerfaces,Shader Input and Output Interface>>
+  * <<interfaces-vertexinput,Vertex Input Interface>>
+  * <<interfaces-fragmentoutput,Fragment Output Interface>>
+ifdef::VK_EXT_shader_tile_image[]
+  * <<interfaces-fragmenttileimage,Fragment Tile Image Interface>>
+endif::VK_EXT_shader_tile_image[]
+  * <<interfaces-inputattachment,Fragment Input Attachment Interface>>
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * <<interfaces-raypipeline, Ray Tracing Pipeline Interface>>
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * <<interfaces-resources,Shader Resource Interface>>
+ifdef::VK_NV_geometry_shader_passthrough[]
+  * <<geometry-passthrough-passthrough,Geometry Shader Passthrough>>
+endif::VK_NV_geometry_shader_passthrough[]
+
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, the pipeline compilation process occurs
+<<pipelines-offline-compilation,offline>> using the implementation-provided
+pipeline cache compiler.
+The set of shaders being used to create a pipeline can: be specified using
+the pipeline JSON schema.
+endif::VKSC_VERSION_1_0[]
+
+This chapter describes valid uses for a set of SPIR-V decorations.
+Any other use of one of these decorations is invalid, with the exception
+that, when using SPIR-V versions 1.4 and earlier: code:Block,
+code:BufferBlock, code:Offset, code:ArrayStride, and code:MatrixStride can
+also decorate types and type members used by variables in the code:Private
+and code:Function storage classes.
+
+[NOTE]
+.Note
+====
+In this chapter, there are references to SPIR-V terms such as the
+code:MeshNV execution model.
+These terms will appear even in a build of the specification which does not
+support any extensions.
+This is as intended, since these terms appear in the unified SPIR-V
+specification without such qualifiers.
+====
+
+
+[[interfaces-iointerfaces]]
+== Shader Input and Output Interfaces
+
+When multiple stages are present in a pipeline, the outputs of one stage
+form an interface with the inputs of the next stage.
+When such an interface involves a shader, shader outputs are matched against
+the inputs of the next stage, and shader inputs are matched against the
+outputs of the previous stage.
+
+All the variables forming the shader input and output _interfaces_ are
+listed as operands to the code:OpEntryPoint instruction and are declared
+with the code:Input or code:Output storage classes, respectively, in the
+SPIR-V module.
+These generally form the interfaces between consecutive shader stages,
+regardless of any non-shader stages between the consecutive shader stages.
+
+There are two classes of variables that can: be matched between shader
+stages, built-in variables and user-defined variables.
+Each class has a different set of matching criteria.
+
+code:Output variables of a shader stage have undefined: values until the
+shader writes to them or uses the code:Initializer operand when declaring
+the variable.
+
+
+[[interfaces-iointerfaces-builtin]]
+=== Built-in Interface Block
+
+Shader <<interfaces-builtin-variables,built-in>> variables meeting the
+following requirements define the _built-in interface block_.
+They must:
+
+  * be explicitly declared (there are no implicit built-ins),
+  * be identified with a code:BuiltIn decoration,
+  * form object types as described in the
+    <<interfaces-builtin-variables,Built-in Variables>> section, and
+  * be declared in a block whose top-level members are the built-ins.
+
+There must: be no more than one built-in interface block per shader per
+interface
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+, except for the mesh output interface where there must: be at most one
+built-in interface block decorated with the code:PerPrimitiveEXT decoration
+and at most one built-in interface block without this decoration
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+.
+
+Built-ins must: not have any code:Location or code:Component decorations.
+
+
+[[interfaces-iointerfaces-user]]
+=== User-defined Variable Interface
+
+The non-built-in variables listed by code:OpEntryPoint with the code:Input
+or code:Output storage class form the _user-defined variable interface_.
+These must: have <<formats-numericformat, numeric type>> or, recursively,
+composite types of such types.
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+If an implementation supports <<features-storageInputOutput16,
+pname:storageInputOutput16>>, components can: have a width of 16 bits.
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+These variables must: be identified with a code:Location decoration and can:
+also be identified with a code:Component decoration.
+
+
+[[interfaces-iointerfaces-matching]]
+=== Interface Matching
+
+An output variable, block, or structure member in a given shader stage has
+an interface match with an input variable, block, or structure member in a
+subsequent shader stage if they both adhere to the following conditions:
+
+  * They have equivalent decorations, other than:
+ifdef::VK_EXT_transform_feedback[]
+  ** code:XfbBuffer, code:XfbStride, code:Offset, and code:Stream
+endif::VK_EXT_transform_feedback[]
+  ** one is not decorated with code:Component and the other is declared with
+     a code:Component of `0`
+  ** <<shaders-interpolation-decorations,Interpolation decorations>>
+  ** code:RelaxedPrecision if one is an input variable and the other an
+     output variable
+  * Their types match as follows:
+  ** if the input is declared in a tessellation control or geometry shader
+     as an code:OpTypeArray with an code:Element code:Type equivalent to the
+     code:OpType* declaration of the output, and neither is a structure
+     member; or
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  ** if the <<features-maintenance4, pname:maintenance4>> feature is
+     enabled, they are declared as code:OpTypeVector variables, and the
+     output has a code:Component code:Count value higher than that of the
+     input but the same code:Component code:Type; or
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  ** if the output is declared in a mesh shader as an code:OpTypeArray with
+     an code:Element code:Type equivalent to the code:OpType* declaration of
+     the input, and neither is a structure member; or
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+  ** if the input is decorated with code:PerVertexKHR, and is declared in a
+     fragment shader as an code:OpTypeArray with an code:Element code:Type
+     equivalent to the code:OpType* declaration of the output, and neither
+     the input nor the output is a structure member; or
+endif::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+  ** if in any other case they are declared with an equivalent code:OpType*
+     declaration.
+  * If both are structures and every member has an interface match.
+
+[NOTE]
+.Note
+====
+The word "`structure`" above refers to both variables that have an
+code:OpTypeStruct type and interface blocks (which are also declared as
+code:OpTypeStruct).
+====
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+If the pipeline is compiled as separate graphics pipeline libraries and the
+<<limits-graphicsPipelineLibraryIndependentInterpolationDecoration,
+pname:graphicsPipelineLibraryIndependentInterpolationDecoration>> limit is
+not supported, matches are not found if the
+<<shaders-interpolation-decorations, interpolation decorations>> differ
+between the last <<pipelines-graphics-subsets-pre-rasterization,
+pre-rasterization shader stage>> and the fragment shader stage.
+endif::VK_EXT_graphics_pipeline_library[]
+
+All input variables and blocks must: have an interface match in the
+preceding shader stage, except for built-in variables in fragment shaders.
+Shaders can: declare and write to output variables that are not declared or
+read by the subsequent stage.
+
+ifdef::VK_NV_geometry_shader_passthrough[]
+Matching rules for _passthrough geometry shaders_ are slightly different and
+are described in the <<geometry-passthrough-interface,Passthrough Interface
+Matching>> section.
+endif::VK_NV_geometry_shader_passthrough[]
+
+The value of an input variable is undefined: if the preceding stage does not
+write to a matching output variable, as described above.
+
+
+[[interfaces-iointerfaces-locations]]
+=== Location Assignment
+
+This section describes code:Location assignments for user-defined variables
+and how many code:Location slots are consumed by a given user-variable type.
+<<interfaces-iointerfaces-matching, As mentioned above>>, some inputs and
+outputs have an additional level of arrayness relative to other shader
+inputs and outputs.
+This outer array level is removed from the type before considering how many
+code:Location slots the type consumes.
+
+The code:Location value specifies an interface slot comprised of a 32-bit
+four-component vector conveyed between stages.
+The code:Component specifies <<interfaces-iointerfaces-components, word
+components>> within these vector code:Location slots.
+Only types with widths of
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+16,
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+32 or 64 are supported in shader interfaces.
+
+Inputs and outputs of the following types consume a single interface
+code:Location:
+
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+  * 16-bit scalar and vector types, and
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+  * 32-bit scalar and vector types, and
+  * 64-bit scalar and 2-component vector types.
+
+64-bit three- and four-component vectors consume two consecutive
+code:Location slots.
+
+If a declared input or output is an array of size _n_ and each element takes
+_m_ code:Location slots, it will be assigned _m_ {times} _n_ consecutive
+code:Location slots starting with the specified code:Location.
+
+If the declared input or output is an _n_ {times} _m_
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+16-,
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+32- or 64-bit matrix, it will be assigned multiple code:Location slots
+starting with the specified code:Location.
+The number of code:Location slots assigned for each matrix will be the same
+as for an _n_-element array of _m_-component vectors.
+
+An code:OpVariable with a structure type that is not a block must: be
+decorated with a code:Location.
+
+When an code:OpVariable with a structure type (either block or non-block) is
+decorated with a code:Location, the members in the structure type must: not
+be decorated with a code:Location.
+The code:OpVariable's members are assigned consecutive code:Location slots
+in declaration order, starting from the first member, which is assigned the
+code:Location decoration from the code:OpVariable.
+
+When a block-type code:OpVariable is declared without a code:Location
+decoration, each member in its structure type must: be decorated with a
+code:Location.
+Types nested deeper than the top-level members must: not have code:Location
+decorations.
+
+The code:Location slots consumed by block and structure members are
+determined by applying the rules above in a depth-first traversal of the
+instantiated members as though the structure or block member were declared
+as an input or output variable of the same type.
+
+Any two inputs listed as operands on the same code:OpEntryPoint must: not be
+assigned the same code:Location slot and code:Component word, either
+explicitly or implicitly.
+Any two outputs listed as operands on the same code:OpEntryPoint must: not
+be assigned the same code:Location slot and code:Component word, either
+explicitly or implicitly.
+
+The number of input and output code:Location slots available for a shader
+input or output interface is limited, and dependent on the shader stage as
+described in <<interfaces-iointerfaces-limits>>.
+All variables in both the <<interfaces-builtin-variables,built-in interface
+block>> and the <<interfaces-iointerfaces-user,user-defined variable
+interface>> count against these limits.
+Each effective code:Location must: have a value less than the number of
+code:Location slots available for the given interface, as specified in the
+"`Locations Available`" column in <<interfaces-iointerfaces-limits>>.
+
+
+[[interfaces-iointerfaces-limits]]
+.Shader Input and Output Locations
+[width="90%",cols="<6,<13",options="header"]
+|====
+| Shader Interface              | Locations Available
+| vertex input                  | pname:maxVertexInputAttributes
+| vertex output                 | pname:maxVertexOutputComponents / 4
+| tessellation control input    | pname:maxTessellationControlPerVertexInputComponents / 4
+| tessellation control output   | pname:maxTessellationControlPerVertexOutputComponents / 4
+| tessellation evaluation input | pname:maxTessellationEvaluationInputComponents / 4
+| tessellation evaluation output| pname:maxTessellationEvaluationOutputComponents / 4
+| geometry input                | pname:maxGeometryInputComponents / 4
+| geometry output               | pname:maxGeometryOutputComponents / 4
+| fragment input                | pname:maxFragmentInputComponents / 4
+| fragment output               | pname:maxFragmentOutputAttachments
+ifdef::VK_EXT_mesh_shader[]
+| mesh output                   | pname:maxMeshOutputComponents / 4
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+// we forgot to add maxMeshOutputComponents
+| mesh output                   | pname:maxFragmentInputComponents / 4
+endif::VK_NV_mesh_shader[]
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+| cluster culling output        | pname:maxOutputClusterCount
+endif::VK_HUAWEI_cluster_culling_shader[]
+|====
+
+
+[[interfaces-iointerfaces-components]]
+=== Component Assignment
+
+The code:Component decoration allows the code:Location to be more finely
+specified for scalars and vectors, down to the individual code:Component
+word within a code:Location slot that are consumed.
+The code:Component word within a code:Location are 0, 1, 2, and 3.
+A variable or block member starting at code:Component N will consume
+code:Component words N, N+1, N+2, ...
+up through its size.
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+For 16-, and 32-bit types,
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+ifndef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+For single precision types,
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+it is invalid if this sequence of code:Component words gets larger than 3.
+A scalar 64-bit type will consume two of these code:Component words in
+sequence, and a two-component 64-bit vector type will consume all four
+code:Component words available within a code:Location.
+A three- or four-component 64-bit vector type must: not specify a non-zero
+code:Component decoration.
+A three-component 64-bit vector type will consume all four code:Component
+words of the first code:Location and code:Component 0 and 1 of the second
+code:Location.
+This leaves code:Component 2 and 3 available for other component-qualified
+declarations.
+
+A scalar or two-component 64-bit data type must: not specify a
+code:Component decoration of 1 or 3.
+A code:Component decoration must: not be specified for any type that is not
+a scalar or vector.
+
+A four-component 64-bit data type will consume all four code:Component words
+of the first code:Location and all four code:Component words of the second
+code:Location.
+
+[[interfaces-vertexinput]]
+== Vertex Input Interface
+
+When the vertex stage is present in a pipeline, the vertex shader input
+variables form an interface with the vertex input attributes.
+The vertex shader input variables are matched by the code:Location and
+code:Component decorations to the vertex input attributes specified in the
+pname:pVertexInputState member of the slink:VkGraphicsPipelineCreateInfo
+structure.
+
+The vertex shader input variables listed by code:OpEntryPoint with the
+code:Input storage class form the _vertex input interface_.
+These variables must: be identified with a code:Location decoration and can:
+also be identified with a code:Component decoration.
+
+For the purposes of interface matching: variables declared without a
+code:Component decoration are considered to have a code:Component decoration
+of zero.
+The number of available vertex input code:Location slots is given by the
+pname:maxVertexInputAttributes member of the sname:VkPhysicalDeviceLimits
+structure.
+
+See <<fxvertex-attrib-location>> for details.
+
+All vertex shader inputs declared as above must: have a corresponding
+attribute and binding in the pipeline.
+
+
+[[interfaces-fragmentoutput]]
+== Fragment Output Interface
+
+When the fragment stage is present in a pipeline, the fragment shader
+outputs form an interface with the output attachments defined by a
+<<renderpass, render pass instance>>.
+The fragment shader output variables are matched by the code:Location and
+code:Component decorations to specified color attachments.
+
+The fragment shader output variables listed by code:OpEntryPoint with the
+code:Output storage class form the _fragment output interface_.
+These variables must: be identified with a code:Location decoration.
+They can: also be identified with a code:Component decoration and/or an
+code:Index decoration.
+For the purposes of interface matching: variables declared without a
+code:Component decoration are considered to have a code:Component decoration
+of zero, and variables declared without an code:Index decoration are
+considered to have an code:Index decoration of zero.
+
+A fragment shader output variable identified with a code:Location decoration
+of _i_ is associated with
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+the color attachment indicated by
+slink:VkRenderingInfo::pname:pColorAttachments[_i_].
+When using render pass objects, it is associated with
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+the color attachment indicated by
+slink:VkSubpassDescription::pname:pColorAttachments[_i_].
+Values are written to those attachments after passing through the blending
+unit as described in <<framebuffer-blending>>, if enabled.
+Locations are consumed as described in
+<<interfaces-iointerfaces-locations,Location Assignment>>.
+The number of available fragment output code:Location slots is given by the
+pname:maxFragmentOutputAttachments member of the
+sname:VkPhysicalDeviceLimits structure.
+
+When an active fragment shader invocation finishes, the values of all
+fragment shader outputs are copied out and used as blend inputs or color
+attachments writes.
+If the invocation does not set a value for them, the input values to those
+blending or color attachment writes are undefined:.
+
+Components of the output variables are assigned as described in
+<<interfaces-iointerfaces-components,Component Assignment>>.
+Output code:Component words identified as 0, 1, 2, and 3 will be directed to
+the R, G, B, and A inputs to the blending unit, respectively, or to the
+output attachment if blending is disabled.
+If two variables are placed within the same code:Location, they must: have
+the same underlying type (floating-point or integer).
+code:Component words which do not correspond to any fragment shader output
+will also result in undefined: values for blending or color attachment
+writes.
+
+Fragment outputs identified with an code:Index of zero are directed to the
+first input of the blending unit associated with the corresponding
+code:Location.
+Outputs identified with an code:Index of one are directed to the second
+input of the corresponding blending unit.
+
+There must: be no output variable which has the same code:Location,
+code:Component, and code:Index as any other, either explicitly declared or
+implied.
+
+Output values written by a fragment shader must: be declared with either
+code:OpTypeFloat or code:OpTypeInt, and a code:Width of 32.
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+If pname:storageInputOutput16 is supported, output values written by a
+fragment shader can: be also declared with either code:OpTypeFloat or
+code:OpTypeInt and a code:Width of 16.
+endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+Composites of these types are also permitted.
+If the color attachment has a signed or unsigned normalized fixed-point
+format, color values are assumed to be floating-point and are converted to
+fixed-point as described in <<fundamentals-fpfixedconv>>; If the color
+attachment has an integer format, color values are assumed to be integers
+and converted to the bit-depth of the target.
+Any value that cannot be represented in the attachment's format is
+undefined:.
+For any other attachment format no conversion is performed.
+If the type of the values written by the fragment shader do not match the
+format of the corresponding color attachment, the resulting values are
+undefined: for those components.
+
+ifdef::VK_EXT_legacy_dithering[]
+[[interfaces-legacy-dithering]]
+== Legacy Dithering
+
+The application can: enable dithering to be applied to the color output of a
+subpass, by using the
+ename:VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT
+ifndef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+flag.
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+or the ename:VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flags.
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+
+When dithering is enabled, the implementation may: modify the output color
+value [eq]#c# by one ULP.
+This modification must: only depend on the framebuffer coordinates
+[eq]#(x~f~,y~f~)# of the sample, as well as on the value of [eq]#c#.
+
+The exact details of the dithering algorithm are unspecified, including the
+algorithm itself, the formats dithering is applied to, and the stage in
+which it is applied.
+
+[NOTE]
+.Note
+====
+This extension is intended only for use by OpenGL emulation layers, and as
+such the dithering algorithm applied to the subpass should: be equivalent to
+the vendor's OpenGL implementation, if any.
+====
+endif::VK_EXT_legacy_dithering[]
+
+ifdef::VK_EXT_shader_tile_image[]
+[[interfaces-fragmenttileimage]]
+== Fragment Tile Image Interface
+
+When a fragment stage is present in a pipeline, the fragment shader tile
+image variables decorated with code:Location form an interface with the
+color attachments defined by the render pass instance.
+The fragment shader tile image variables are matched by code:Location
+decorations to the color attachments specified in the
+pname:pColorAttachments array of the slink:VkRenderingInfoKHR structure
+describing the render pass instance the fragment shader is executed in.
+
+The fragment shader variables listed by code:OpEntryPoint with the
+code:TileImageEXT storage class and a decoration of code:Location form the
+_fragment tile image interface_.
+These variables must: be declared with a type of code:OpTypeImage, and a
+code:Dim operand of code:TileImageDataEXT.
+The code:Component decoration is not supported for these variables.
+
+Reading from a tile image variable with a code:Location decoration of _i_
+reads from the color attachment identified by the element of
+slink:VkRenderingInfoKHR::pname:pColorAttachments with a pname:location
+equal to _i_.
+If the tile image variable is declared as an array of size N, it consumes N
+consecutive tile image locations, starting with the index specified.
+There must: not be more than one tile image variable with the same
+code:Location whether explicitly declared or implied by an array
+declaration.
+The number of available tile image locations is the same as the number of
+available fragment output locations as given by the
+pname:maxFragmentOutputAttachments member of the
+sname:VkPhysicalDeviceLimits structure.
+
+The basic data type (floating-point, integer, unsigned integer) of the tile
+image variable must: match the basic format of the corresponding color
+attachment, or the values read from the tile image variables are undefined:.
+endif::VK_EXT_shader_tile_image[]
+
+[[interfaces-inputattachment]]
+== Fragment Input Attachment Interface
+
+When a fragment stage is present in a pipeline, the fragment shader subpass
+inputs form an interface with the input attachments of the current subpass.
+The fragment shader subpass input variables are matched by
+code:InputAttachmentIndex decorations to the input attachments specified in
+the pname:pInputAttachments array of the slink:VkSubpassDescription
+structure describing the subpass that the fragment shader is executed in.
+
+The fragment shader subpass input variables with the code:UniformConstant
+storage class and a decoration of code:InputAttachmentIndex that are
+statically used by code:OpEntryPoint form the _fragment input attachment
+interface_.
+These variables must: be declared with a type of code:OpTypeImage, a
+code:Dim operand of code:SubpassData, an code:Arrayed operand of 0, and a
+code:Sampled operand of 2.
+The code:MS operand of the code:OpTypeImage must: be 0 if the pname:samples
+field of the corresponding slink:VkAttachmentDescription is
+ename:VK_SAMPLE_COUNT_1_BIT and
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+<<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+is not enabled, and
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+1 otherwise.
+
+A subpass input variable identified with an code:InputAttachmentIndex
+decoration of _i_ reads from the input attachment indicated by
+pname:pInputAttachments[_i_] member of sname:VkSubpassDescription.
+If the subpass input variable is declared as an array of size N, it consumes
+N consecutive input attachments, starting with the index specified.
+There must: not be more than one input variable with the same
+code:InputAttachmentIndex whether explicitly declared or implied by an array
+declaration per image aspect.
+A multi-aspect image (e.g. a depth/stencil format) can: use the same input
+variable.
+The number of available input attachment indices is given by the
+pname:maxPerStageDescriptorInputAttachments member of the
+sname:VkPhysicalDeviceLimits structure.
+
+Variables identified with the code:InputAttachmentIndex must: only be used
+by a fragment stage.
+The <<formats-numericformat, numeric format>> of the subpass input must:
+match the format of the corresponding input attachment, or the values of
+subpass loads from these variables are undefined:.
+If the framebuffer attachment contains both depth and stencil aspects, the
+numeric format of the subpass input determines if depth or stencil aspect is
+accessed by the shader.
+
+See <<descriptorsets-inputattachment>> for more details.
+
+
+[[compatibility-inputattachment]]
+=== Fragment Input Attachment Compatibility
+An input attachment that is statically accessed by a fragment shader must:
+be backed by a descriptor that is equivalent to the slink:VkImageView in the
+slink:VkFramebuffer, except for pname:subresourceRange.aspectMask.
+The pname:aspectMask must: be equal to the aspect accessed by the shader.
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-raypipeline]]
+== Ray Tracing Pipeline Interface
+
+Ray tracing pipelines may: have more stages than other pipelines with
+multiple instances of each stage and more dynamic interactions between the
+stages, but still have interface structures that obey the same general rules
+as interfaces between shader stages in other pipelines.
+The three types of inter-stage interface variables for ray tracing pipelines
+are:
+
+  * Ray payloads containing data tracked for the entire lifetime of the ray.
+  * Hit attributes containing data about a specific hit for the duration of
+    its processing.
+  * Callable data for passing data into and out of a callable shader.
+
+Ray payloads and callable data are used in explicit shader call
+instructions, so they have an incoming variant to distinguish the parameter
+passed to the invocation from any other payloads or data being used by
+subsequent shader call instructions.
+
+An interface structure used between stages must: match between the stages
+using it.
+Specifically:
+
+  * The hit attribute structure read in an any-hit or closest hit shader
+    must: be the same structure as the hit attribute structure written in
+    the corresponding intersection shader in the same hit group.
+  * The incoming callable data for a callable shader must: be the same
+    structure as the callable data referenced by the execute callable
+    instruction in the calling shader.
+  * The ray payload for a shader invoked by a ray tracing command must: be
+    the same structure for all shader stages using the payload for that ray.
+
+Any shader with an incoming ray payload, incoming callable data, or hit
+attribute must: only declare one variable of that type.
+
+.Ray Pipeline Shader Interface
+[width="90%",options="header"]
+|====
+| Shader Stage    | Ray Payload | Incoming Ray Payload | Hit Attribute | Callable Data | Incoming Callable Data
+| Ray Generation  | r/w         |                      |               | r/w           |
+| Intersection    |             |                      | r/w           |               |
+| Any-Hit         |             | r/w                  | r             |               |
+| Closest Hit     | r/w         | r/w                  | r             | r/w           |
+| Miss            | r/w         | r/w                  |               | r/w           |
+| Callable        |             |                      |               | r/w           | r/w
+|====
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+
+[[interfaces-resources]]
+== Shader Resource Interface
+
+When a shader stage accesses buffer or image resources, as described in the
+<<descriptorsets,Resource Descriptors>> section, the shader resource
+variables must: be matched with the <<descriptorsets-pipelinelayout,pipeline
+layout>> that is provided at pipeline creation time.
+
+The set of shader variables that form the _shader resource interface_ for a
+stage are the variables statically used by that stage's code:OpEntryPoint
+with a storage class of code:Uniform, code:UniformConstant,
+ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+code:StorageBuffer,
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+or code:PushConstant.
+For the fragment shader, this includes the <<interfaces-inputattachment,
+fragment input attachment interface>>.
+
+The shader resource interface consists of two sub-interfaces: the push
+constant interface and the descriptor set interface.
+
+
+[[interfaces-resources-pushconst]]
+=== Push Constant Interface
+
+The shader variables defined with a storage class of code:PushConstant that
+are statically used by the shader entry points for the pipeline define the
+_push constant interface_.
+They must: be:
+
+  * typed as code:OpTypeStruct,
+  * identified with a code:Block decoration, and
+  * laid out explicitly using the code:Offset, code:ArrayStride, and
+    code:MatrixStride decorations as specified in
+    <<interfaces-resources-layout,Offset and Stride Assignment>>.
+
+There must: be no more than one push constant block statically used per
+shader entry point.
+
+Each statically used member of a push constant block must: be placed at an
+code:Offset such that the entire member is entirely contained within the
+slink:VkPushConstantRange for each code:OpEntryPoint that uses it, and the
+pname:stageFlags for that range must: specify the appropriate
+elink:VkShaderStageFlagBits for that stage.
+The code:Offset decoration for any member of a push constant block must: not
+cause the space required for that member to extend outside the range
+[eq]#[0, pname:maxPushConstantsSize)#.
+
+Any member of a push constant block that is declared as an array must: only
+be accessed with _dynamically uniform_ indices.
+
+
+[[interfaces-resources-descset]]
+=== Descriptor Set Interface
+
+The _descriptor set interface_ is comprised of the shader variables with the
+storage class of
+ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+code:StorageBuffer,
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+code:Uniform or code:UniformConstant (including the variables in the
+<<interfaces-inputattachment,fragment input attachment interface>>) that are
+statically used by the shader entry points for the pipeline.
+
+These variables must: have code:DescriptorSet and code:Binding decorations
+specified, which are assigned and matched with the
+sname:VkDescriptorSetLayout objects in the pipeline layout as described in
+<<interfaces-resources-setandbinding,DescriptorSet and Binding Assignment>>.
+
+The code:Image code:Format of an code:OpTypeImage declaration must: not be
+*Unknown*, for variables which are used for code:OpImageRead,
+code:OpImageSparseRead, or code:OpImageWrite operations, except under the
+following conditions:
+
+  * For code:OpImageWrite, if the image format is listed in the
+    <<formats-without-shader-storage-format,storage without format>> list
+    and if the pname:shaderStorageImageWriteWithoutFormat feature is enabled
+    and the shader module declares the code:StorageImageWriteWithoutFormat
+    capability.
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * For code:OpImageWrite, if the image format supports
+    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT and the
+    shader module declares the code:StorageImageWriteWithoutFormat
+    capability.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * For code:OpImageRead or code:OpImageSparseRead, if the image format is
+    listed in the <<formats-without-shader-storage-format,storage without
+    format>> list and if the pname:shaderStorageImageReadWithoutFormat
+    feature is enabled and the shader module declares the
+    code:StorageImageReadWithoutFormat capability.
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * For code:OpImageRead or code:OpImageSparseRead, if the image format
+    supports ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT and
+    the shader module declares the code:StorageImageReadWithoutFormat
+    capability.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * For code:OpImageRead, if code:Dim is code:SubpassData (indicating a read
+    from an input attachment).
+
+The code:Image code:Format of an code:OpTypeImage declaration must: not be
+*Unknown*, for variables which are used for code:OpAtomic* operations.
+
+Variables identified with the code:Uniform storage class are used to access
+transparent buffer backed resources.
+Such variables must: be:
+
+  * typed as code:OpTypeStruct, or an array of this type,
+  * identified with a code:Block or code:BufferBlock decoration, and
+  * laid out explicitly using the code:Offset, code:ArrayStride, and
+    code:MatrixStride decorations as specified in
+    <<interfaces-resources-layout,Offset and Stride Assignment>>.
+
+ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+Variables identified with the code:StorageBuffer storage class are used to
+access transparent buffer backed resources.
+Such variables must: be:
+
+  * typed as code:OpTypeStruct, or an array of this type,
+  * identified with a code:Block decoration, and
+  * laid out explicitly using the code:Offset, code:ArrayStride, and
+    code:MatrixStride decorations as specified in
+    <<interfaces-resources-layout,Offset and Stride Assignment>>.
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+
+ifndef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+The code:Offset decoration for any variable in a code:Block must: not cause
+the space required for that variable to extend outside the range [eq]#[0,
+pname:maxUniformBufferRange)#.
+The code:Offset decoration for any variable in a code:BufferBlock must: not
+cause the space required for that variable to extend outside the range
+[eq]#[0, pname:maxStorageBufferRange)#.
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+The code:Offset decoration for any member of a code:Block-decorated variable
+in the code:Uniform storage class must: not cause the space required for
+that variable to extend outside the range [eq]#[0,
+pname:maxUniformBufferRange)#.
+The code:Offset decoration for any member of a code:Block-decorated variable
+in the code:StorageBuffer storage class must: not cause the space required
+for that variable to extend outside the range [eq]#[0,
+pname:maxStorageBufferRange)#.
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+Variables identified with the code:Uniform storage class can: also be used
+to access transparent descriptor set backed resources when the variable is
+assigned to a descriptor set layout binding with a pname:descriptorType of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK.
+In this case the variable must: be typed as code:OpTypeStruct and cannot: be
+aggregated into arrays of that type.
+Further, the code:Offset decoration for any member of such a variable must:
+not cause the space required for that variable to extend outside the range
+[eq]#[0,pname:maxInlineUniformBlockSize)#.
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+Variables identified with a storage class of code:UniformConstant and a
+decoration of code:InputAttachmentIndex must: be declared as described in
+<<interfaces-inputattachment,Fragment Input Attachment Interface>>.
+
+SPIR-V variables decorated with a descriptor set and binding that identify a
+<<descriptorsets-combinedimagesampler, combined image sampler descriptor>>
+can: have a type of code:OpTypeImage, code:OpTypeSampler (code:Sampled=1),
+or code:OpTypeSampledImage.
+
+Arrays of any of these types can: be indexed with _constant integral
+expressions_.
+The following features must: be enabled and capabilities must: be declared
+in order to index such arrays with dynamically uniform or non-uniform
+indices:
+
+  * Storage images (except storage texel buffers and input attachments):
+  ** Dynamically uniform: pname:shaderStorageImageArrayDynamicIndexing and
+     code:StorageImageArrayDynamicIndexing
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Non-uniform: pname:shaderStorageImageArrayNonUniformIndexing and
+     code:StorageImageArrayNonUniformIndexing
+  * Storage texel buffers:
+  ** Dynamically uniform: pname:shaderStorageTexelBufferArrayDynamicIndexing
+     and code:StorageTexelBufferArrayDynamicIndexing
+  ** Non-uniform: pname:shaderStorageTexelBufferArrayNonUniformIndexing and
+     code:StorageTexelBufferArrayNonUniformIndexing
+  * Input attachments:
+  ** Dynamically uniform: pname:shaderInputAttachmentArrayDynamicIndexing
+     and code:InputAttachmentArrayDynamicIndexing
+  ** Non-uniform: pname:shaderInputAttachmentArrayNonUniformIndexing and
+     code:InputAttachmentArrayNonUniformIndexing
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * Sampled images (except uniform texel buffers), samplers and combined
+    image samplers:
+  ** Dynamically uniform: pname:shaderSampledImageArrayDynamicIndexing and
+     code:SampledImageArrayDynamicIndexing
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Non-uniform: pname:shaderSampledImageArrayNonUniformIndexing and
+     code:SampledImageArrayNonUniformIndexing
+  * Uniform texel buffers:
+  ** Dynamically uniform: pname:shaderUniformTexelBufferArrayDynamicIndexing
+     and code:UniformTexelBufferArrayDynamicIndexing
+  ** Non-uniform: pname:shaderUniformTexelBufferArrayNonUniformIndexing and
+     code:UniformTexelBufferArrayNonUniformIndexing
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * Uniform buffers:
+  ** Dynamically uniform: pname:shaderUniformBufferArrayDynamicIndexing and
+     code:UniformBufferArrayDynamicIndexing
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Non-uniform: pname:shaderUniformBufferArrayNonUniformIndexing and
+     code:UniformBufferArrayNonUniformIndexing
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * Storage buffers:
+  ** Dynamically uniform: pname:shaderStorageBufferArrayDynamicIndexing and
+     code:StorageBufferArrayDynamicIndexing
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  ** Non-uniform: pname:shaderStorageBufferArrayNonUniformIndexing and
+     code:StorageBufferArrayNonUniformIndexing
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  * Acceleration structures:
+  ** Dynamically uniform: Always supported.
+  ** Non-uniform: Always supported.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_QCOM_image_processing[]
+  * <<descriptorsets-weightimage,weight image>>:
+  ** Dynamically uniform: Always supported.
+  ** Non-uniform: Never supported.
+  * <<descriptorsets-blockmatch, Block matching image>>:
+  ** Dynamically uniform: Always supported.
+  ** Non-uniform: Never supported.
+endif::VK_QCOM_image_processing[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If an instruction loads from or stores to a resource (including atomics and
+image instructions) and the resource descriptor being accessed is not
+dynamically uniform, then the corresponding non-uniform indexing feature
+must: be enabled and the capability must: be declared.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If an instruction loads from or stores to a resource (including atomics and
+image instructions) and the resource descriptor being accessed is loaded
+from an array element with a non-constant index, then the corresponding
+dynamic
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or non-uniform
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+indexing feature must: be enabled and the capability must: be declared.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If the combined image sampler enables sampler {YCbCr}
+ifndef::VK_EXT_fragment_density_map[]
+conversion,
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_fragment_density_map[]
+conversion or samples a <<samplers-subsamplesampler,subsampled image>>,
+endif::VK_EXT_fragment_density_map[]
+it must: be indexed only by constant integral expressions when aggregated
+into arrays in shader code, irrespective of the
+pname:shaderSampledImageArrayDynamicIndexing feature.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_fragment_density_map[]
+If the combined image sampler samples a
+<<samplers-subsamplesampler,subsampled image>>, it must: be indexed only by
+constant integral expressions when aggregated into arrays in shader code,
+irrespective of the pname:shaderSampledImageArrayDynamicIndexing feature.
+endif::VK_EXT_fragment_density_map[]
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+[[interfaces-resources-correspondence]]
+.Shader Resource and Descriptor Type Correspondence
+[width="90%",cols="<1,<2",options="header"]
+|====
+| Resource type          | Descriptor Type
+| sampler                | ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+                           ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+| sampled image          | ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+                           ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+| storage image          | ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
+| combined image sampler | ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+| uniform texel buffer   | ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+| storage texel buffer   | ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
+| uniform buffer         | ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+                           ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+| storage buffer         | ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+                           ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+| input attachment       | ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| inline uniform block   | ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+| acceleration structure |
+ifdef::VK_KHR_acceleration_structure[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR]
+ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[or]
+ifdef::VK_NV_ray_tracing[ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_QCOM_image_processing[]
+| weight image   | ename:VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM
+| block matching image   | ename:VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM
+endif::VK_QCOM_image_processing[]
+|====
+
+[[interfaces-resources-storage-class-correspondence]]
+.Shader Resource and Storage Class Correspondence
+[width="100%",cols="<21%,<22%,<27%,<30%",options="header"]
+|====
+| Resource type   | Storage Class | Type^1^ | Decoration(s)^2^
+| sampler
+        | code:UniformConstant | code:OpTypeSampler |
+| sampled image
+        | code:UniformConstant | code:OpTypeImage (code:Sampled=1)|
+| storage image
+        | code:UniformConstant | code:OpTypeImage (code:Sampled=2) |
+| combined image sampler
+        | code:UniformConstant | code:OpTypeSampledImage +
+                                 code:OpTypeImage (code:Sampled=1) +
+                                 code:OpTypeSampler |
+| uniform texel buffer
+        | code:UniformConstant | code:OpTypeImage (code:Dim=code:Buffer, code:Sampled=1) |
+| storage texel buffer
+        | code:UniformConstant | code:OpTypeImage (code:Dim=code:Buffer, code:Sampled=2) |
+| uniform buffer
+        | code:Uniform         | code:OpTypeStruct
+        | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
+ifndef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+| storage buffer
+        | code:Uniform         | code:OpTypeStruct
+        | code:BufferBlock, code:Offset, (code:ArrayStride), (code:MatrixStride)
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+.2+<.^| storage buffer
+        | code:Uniform         .2+<.^| code:OpTypeStruct
+        | code:BufferBlock, code:Offset, (code:ArrayStride), (code:MatrixStride)
+        | code:StorageBuffer | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
+endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
+| input attachment
+        | code:UniformConstant | code:OpTypeImage (code:Dim=code:SubpassData, code:Sampled=2)
+        | code:InputAttachmentIndex
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| inline uniform block
+        | code:Uniform | code:OpTypeStruct
+        | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+| acceleration structure
+        | code:UniformConstant | code:OpTypeAccelerationStructureKHR |
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_QCOM_image_processing[]
+| sample weight image
+        | code:UniformConstant | code:OpTypeImage (code:Depth=0, code:Dim=code:2D, +
+                                 code:Arrayed=1, code:MS=0, code:Sampled=1)
+                | code:WeightTextureQCOM
+| block matching image
+        | code:UniformConstant | code:OpTypeImage (code:Depth=0, code:Dim=code:2D, +
+                                 code:Arrayed=0, code:MS=0, code:Sampled=1)
+                | code:BlockMatchTextureQCOM
+endif::VK_QCOM_image_processing[]
+|====
+
+1::
+    Where code:OpTypeImage is referenced, the code:Dim values code:Buffer
+    and code:Subpassdata are only accepted where they are specifically
+    referenced.
+    They do not correspond to resource types where a generic
+    code:OpTypeImage is specified.
+2::
+    In addition to code:DescriptorSet and code:Binding.
+
+
+[[interfaces-resources-setandbinding]]
+=== DescriptorSet and Binding Assignment
+
+A variable decorated with a code:DescriptorSet decoration of [eq]#s# and a
+code:Binding decoration of [eq]#b# indicates that this variable is
+associated with the slink:VkDescriptorSetLayoutBinding that has a
+pname:binding equal to [eq]#b# in pname:pSetLayouts[_s_] that was specified
+in slink:VkPipelineLayoutCreateInfo.
+
+code:DescriptorSet decoration values must: be between zero and
+pname:maxBoundDescriptorSets minus one, inclusive.
+code:Binding decoration values can: be any 32-bit unsigned integer value, as
+described in <<descriptorsets-setlayout>>.
+Each descriptor set has its own binding name space.
+
+If the code:Binding decoration is used with an array, the entire array is
+assigned that binding value.
+The array must: be a single-dimensional array and size of the array must: be
+no larger than the number of descriptors in the binding.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If the array is runtime-sized, then array elements greater than or equal to
+the size of that binding in the bound descriptor set must: not be used.
+If the array is runtime-sized, the pname:runtimeDescriptorArray feature
+must: be enabled and the code:RuntimeDescriptorArray capability must: be
+declared.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+The array must: not be runtime-sized.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+The index of each element of the array is referred to as the _arrayElement_.
+For the purposes of interface matching and descriptor set
+<<descriptorsets-updates,operations>>, if a resource variable is not an
+array, it is treated as if it has an arrayElement of zero.
+
+There is a limit on the number of resources of each type that can: be
+accessed by a pipeline stage as shown in
+<<interfaces-resources-limits,Shader Resource Limits>>.
+The "`Resources Per Stage`" column gives the limit on the number each type
+of resource that can: be statically used for an entry point in any given
+stage in a pipeline.
+The "`Resource Types`" column lists which resource types are counted against
+the limit.
+Some resource types count against multiple limits.
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+The ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT descriptor type counts as one
+individual resource and one for every unique resource limit per descriptor
+set type that is present in the associated binding's
+slink:VkMutableDescriptorTypeListEXT.
+If multiple descriptor types in slink:VkMutableDescriptorTypeListEXT map to
+the same resource limit, only one descriptor is consumed for purposes of
+computing resource limits.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+The pipeline layout may: include descriptor sets and bindings which are not
+referenced by any variables statically used by the entry points for the
+shader stages in the binding's pname:stageFlags.
+
+However, if a variable assigned to a given code:DescriptorSet and
+code:Binding is statically used by the entry point for a shader stage, the
+pipeline layout must: contain a descriptor set layout binding in that
+descriptor set layout and for that binding number, and that binding's
+pname:stageFlags must: include the appropriate elink:VkShaderStageFlagBits
+for that stage.
+The variable must: be of a valid resource type determined by its SPIR-V type
+and storage class, as defined in
+<<interfaces-resources-storage-class-correspondence,Shader Resource and
+Storage Class Correspondence>>.
+The descriptor set layout binding must: be of a corresponding descriptor
+type, as defined in <<interfaces-resources-correspondence,Shader Resource
+and Descriptor Type Correspondence>>.
+
+[NOTE]
+.Note
+====
+There are no limits on the number of shader variables that can have
+overlapping set and binding values in a shader; but which resources are
+<<shaders-staticuse,statically used>> has an impact.
+If any shader variable identifying a resource is
+<<shaders-staticuse,statically used>> in a shader, then the underlying
+descriptor bound at the declared set and binding must
+<<interfaces-resources-correspondence,support the declared type in the
+shader>> when the shader executes.
+
+If multiple shader variables are declared with the same set and binding
+values, and with the same underlying descriptor type, they can all be
+statically used within the same shader.
+However, accesses are not automatically synchronized, and code:Aliased
+decorations should be used to avoid data hazards (see
+https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#_a_id_aliasingsection_a_aliasing[section
+2.18.2 Aliasing in the SPIR-V specification]).
+
+If multiple shader variables with the same set and binding values are
+declared in a single shader, but with different declared types, where any of
+those are not supported by the relevant bound descriptor, that shader can
+only be executed if the variables with the unsupported type are not
+statically used.
+
+A noteworthy example of using multiple statically-used shader variables
+sharing the same descriptor set and binding values is a descriptor of type
+ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER that has multiple
+corresponding shader variables in the code:UniformConstant storage class,
+where some could be code:OpTypeImage (code:Sampled=1), some could be
+code:OpTypeSampler, and some could be code:OpTypeSampledImage.
+====
+
+[[interfaces-resources-limits]]
+.Shader Resource Limits
+[width="80%",cols="<35,<23",options="header"]
+|====
+| Resources per Stage                   | Resource Types
+.2+<.^| pname:maxPerStageDescriptorSamplers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindSamplers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | sampler           | combined image sampler
+ifndef::VK_QCOM_image_processing[]
+.3+<.^| pname:maxPerStageDescriptorSampledImages
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindSampledImages
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | sampled image     | combined image sampler | uniform texel buffer
+endif::VK_QCOM_image_processing[]
+ifdef::VK_QCOM_image_processing[]
+.5+<.^| pname:maxPerStageDescriptorSampledImages
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindSampledImages
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | sampled image     | combined image sampler | uniform texel buffer +
+            | sample weight image | block matching image
+endif::VK_QCOM_image_processing[]
+.2+<.^| pname:maxPerStageDescriptorStorageImages
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindStorageImages
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | storage image     | storage texel buffer
+.2+<.^| pname:maxPerStageDescriptorUniformBuffers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | uniform buffer    | uniform buffer dynamic
+.2+<.^| pname:maxPerStageDescriptorStorageBuffers
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | storage buffer    | storage buffer dynamic
+| pname:maxPerStageDescriptorInputAttachments
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | input attachment^1^
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| pname:maxPerStageDescriptorInlineUniformBlocks
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+or pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+            | inline uniform block
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+|
+ifdef::VK_NV_ray_tracing[sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxDescriptorSetAccelerationStructures]
+ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[or]
+ifdef::VK_KHR_acceleration_structure[]
+pname:maxPerStageDescriptorAccelerationStructures or
+pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
+endif::VK_KHR_acceleration_structure[]
+            | acceleration structure
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+|====
+
+1::
+    Input attachments can: only be used in the fragment shader stage
+
+
+[[interfaces-resources-layout]]
+=== Offset and Stride Assignment
+
+Certain objects must: be explicitly laid out using the code:Offset,
+code:ArrayStride, and code:MatrixStride, as described in
+https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#ShaderValidation[SPIR-V
+explicit layout validation rules].
+All such layouts also must: conform to the following requirements.
+
+[NOTE]
+.Note
+====
+The numeric order of code:Offset decorations does not need to follow member
+declaration order.
+====
+
+
+[[interfaces-alignment-requirements]]
+*Alignment Requirements*
+
+There are different alignment requirements depending on the specific
+resources and on the features enabled on the device.
+
+Matrix types are defined in terms of arrays as follows:
+
+  * A column-major matrix with [eq]#C# columns and [eq]#R# rows is
+    equivalent to a [eq]#C# element array of vectors with [eq]#R#
+    components.
+  * A row-major matrix with [eq]#C# columns and [eq]#R# rows is equivalent
+    to an [eq]#R# element array of vectors with [eq]#C# components.
+
+The _scalar alignment_ of the type of an code:OpTypeStruct member is defined
+recursively as follows:
+
+  * A scalar of size [eq]#N# has a scalar alignment of [eq]#N#.
+  * A vector type has a scalar alignment equal to that of its component
+    type.
+  * An array type has a scalar alignment equal to that of its element type.
+  * A structure has a scalar alignment equal to the largest scalar alignment
+    of any of its members.
+  * A matrix type inherits _scalar alignment_ from the equivalent array
+    declaration.
+
+The _base alignment_ of the type of an code:OpTypeStruct member is defined
+recursively as follows:
+
+  * A scalar has a base alignment equal to its scalar alignment.
+  * A two-component vector has a base alignment equal to twice its scalar
+    alignment.
+  * A three- or four-component vector has a base alignment equal to four
+    times its scalar alignment.
+  * An array has a base alignment equal to the base alignment of its element
+    type.
+  * A structure has a base alignment equal to the largest base alignment of
+    any of its members.
+    An empty structure has a base alignment equal to the size of the
+    smallest scalar type permitted by the capabilities declared in the
+    SPIR-V module.
+    (e.g., for a 1 byte aligned empty struct in the code:StorageBuffer
+    storage class, code:StorageBuffer8BitAccess or
+    code:UniformAndStorageBuffer8BitAccess must: be declared in the SPIR-V
+    module.)
+  * A matrix type inherits _base alignment_ from the equivalent array
+    declaration.
+
+The _extended alignment_ of the type of an code:OpTypeStruct member is
+similarly defined as follows:
+
+  * A scalar or vector type has an extended alignment equal to its base
+    alignment.
+  * An array or structure type has an extended alignment equal to the
+    largest extended alignment of any of its members, rounded up to a
+    multiple of 16.
+  * A matrix type inherits extended alignment from the equivalent array
+    declaration.
+
+ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+
+A member is defined to _improperly straddle_ if either of the following are
+true:
+
+  * It is a vector with total size less than or equal to 16 bytes, and has
+    code:Offset decorations placing its first byte at [eq]#F# and its last
+    byte at [eq]#L#, where [eq]#floor(F / 16) != floor(L / 16)#.
+  * It is a vector with total size greater than 16 bytes and has its
+    code:Offset decorations placing its first byte at a non-integer multiple
+    of 16.
+
+endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+
+[[interfaces-resources-standard-layout]]
+*Standard Buffer Layout*
+
+Every member of an code:OpTypeStruct that is required to be explicitly laid
+out must: be aligned according to the first matching rule as follows.
+If the struct is contained in pointer types of multiple storage classes, it
+must: satisfy the requirements for every storage class used to reference it.
+
+ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+  . If the code:scalarBlockLayout feature is enabled on the device and the
+    storage class is code:Uniform, code:StorageBuffer,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    code:PhysicalStorageBuffer,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+    code:ShaderRecordBufferKHR,
+endif::VK_KHR_ray_tracing_pipeline[]
+    or code:PushConstant then every member must: be aligned according to its
+    scalar alignment.
+endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+  . If the code:workgroupMemoryExplicitLayoutScalarBlockLayout feature is
+    enabled on the device and the storage class is code:Workgroup then every
+    member must: be aligned according to its scalar alignment.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+  . All vectors must: be aligned according to their scalar alignment.
+endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+ifdef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+  . If the pname:uniformBufferStandardLayout feature is not enabled on the
+    device, then any
+endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+ifndef::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+  . Any
+endif::VK_VERSION_1_2,VK_KHR_uniform_buffer_standard_layout[]
+    member of an code:OpTypeStruct with a storage class of code:Uniform and
+    a decoration of code:Block must: be aligned according to its extended
+    alignment.
+  . Every other member must: be aligned according to its base alignment.
+
+ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+[NOTE]
+.Note
+====
+Even if scalar alignment is supported, it is generally more performant to
+use the _base alignment_.
+====
+endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+
+The memory layout must: obey the following rules:
+
+  * The code:Offset decoration of any member must: be a multiple of its
+    alignment.
+  * Any code:ArrayStride or code:MatrixStride decoration must: be a multiple
+    of the alignment of the array or matrix as defined above.
+
+ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout,VK_KHR_workgroup_memory_explicit_layout[]
+If one of the conditions below applies
+
+ifdef::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+  * The storage class is code:Uniform, code:StorageBuffer,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    code:PhysicalStorageBuffer,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+    code:ShaderRecordBufferKHR,
+endif::VK_KHR_ray_tracing_pipeline[]
+    or code:PushConstant, and the code:scalarBlockLayout feature is not
+    enabled on the device.
+endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+  * The storage class is code:Workgroup, and either the struct member is not
+    part of a code:Block or the
+    code:workgroupMemoryExplicitLayoutScalarBlockLayout feature is not
+    enabled on the device.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+  * The storage class is any other storage class.
+
+the memory layout must: also obey the following rules:
+endif::VK_VERSION_1_2,VK_EXT_scalar_block_layout,VK_KHR_workgroup_memory_explicit_layout[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+  * Vectors must: not improperly straddle, as defined above.
+endif::VK_VERSION_1_1,VK_KHR_relaxed_block_layout[]
+  * The code:Offset decoration of a member must: not place it between the
+    end of a structure, an array or a matrix and the next multiple of the
+    alignment of that structure, array or matrix.
+
+[NOTE]
+.Note
+====
+The *std430 layout* in GLSL satisfies these rules for types using the base
+alignment.
+The *std140 layout* satisfies the rules for types using the extended
+alignment.
+====
+
+
+[[interfaces-builtin-variables]]
+== Built-In Variables
+
+Built-in variables are accessed in shaders by declaring a variable decorated
+with a code:BuiltIn SPIR-V decoration.
+The meaning of each code:BuiltIn decoration is as follows.
+In the remainder of this section, the name of a built-in is used
+interchangeably with a term equivalent to a variable decorated with that
+particular built-in.
+Built-ins that represent integer values can: be declared as either signed or
+unsigned 32-bit integers.
+
+<<interfaces-iointerfaces-matching, As mentioned above>>, some inputs and
+outputs have an additional level of arrayness relative to other shader
+inputs and outputs.
+This level of arrayness is not included in the type descriptions below, but
+must be included when declaring the built-in.
+
+ifdef::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+[[interfaces-builtin-variables-barycoordkhr]]
+[open,refpage='BaryCoordKHR',desc='Barycentric coordinates of a fragment',type='builtins']
+--
+:refpage: BaryCoordKHR
+
+code:BaryCoordKHR::
+
+The code:BaryCoordKHR decoration can: be used to decorate a fragment shader
+input variable.
+This variable will contain a three-component floating-point vector with
+barycentric weights that indicate the location of the fragment relative to
+the screen-space locations of vertices of its primitive, obtained using
+perspective interpolation.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordKHR-04154]]
+    The code:BaryCoordKHR decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordKHR-04155]]
+    The variable decorated with code:BaryCoordKHR must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordKHR-04156]]
+    The variable decorated with code:BaryCoordKHR must: be declared as a
+    three-component vector of 32-bit floating-point values
+****
+--
+endif::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+
+ifdef::VK_AMD_shader_explicit_vertex_parameter[]
+[open,refpage='BaryCoordNoPerspAMD',desc='Barycentric coordinates of a fragment center in screen-space',type='builtins']
+--
+:refpage: BaryCoordNoPerspAMD
+
+code:BaryCoordNoPerspAMD::
+
+The code:BaryCoordNoPerspAMD decoration can: be used to decorate a fragment
+shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using linear interpolation at the
+fragment's center.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04157]]
+    The code:BaryCoordNoPerspAMD decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04158]]
+    The variable decorated with code:BaryCoordNoPerspAMD must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNoPerspAMD-04159]]
+    The variable decorated with code:BaryCoordNoPerspAMD must: be declared
+    as a two-component vector of 32-bit floating-point values
+****
+--
+endif::VK_AMD_shader_explicit_vertex_parameter[]
+
+ifdef::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+[[interfaces-builtin-variables-barycoordnoperspkhr]]
+[open,refpage='BaryCoordNoPerspKHR',desc='Barycentric coordinates of a fragment in screen-space',type='builtins']
+--
+:refpage: BaryCoordNoPerspKHR
+
+code:BaryCoordNoPerspKHR::
+
+The code:BaryCoordNoPerspKHR decoration can: be used to decorate a fragment
+shader input variable.
+This variable will contain a three-component floating-point vector with
+barycentric weights that indicate the location of the fragment relative to
+the screen-space locations of vertices of its primitive, obtained using
+linear interpolation.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordNoPerspKHR-04160]]
+    The code:BaryCoordNoPerspKHR decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNoPerspKHR-04161]]
+    The variable decorated with code:BaryCoordNoPerspKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNoPerspKHR-04162]]
+    The variable decorated with code:BaryCoordNoPerspKHR must: be declared
+    as a three-component vector of 32-bit floating-point values
+****
+--
+endif::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+
+ifdef::VK_AMD_shader_explicit_vertex_parameter[]
+[open,refpage='BaryCoordNoPerspCentroidAMD',desc='Barycentric coordinates of a fragment centroid in screen-space',type='builtins']
+--
+:refpage: BaryCoordNoPerspCentroidAMD
+
+code:BaryCoordNoPerspCentroidAMD::
+
+The code:BaryCoordNoPerspCentroidAMD decoration can: be used to decorate a
+fragment shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using linear interpolation at the
+centroid.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04163]]
+    The code:BaryCoordNoPerspCentroidAMD decoration must: be used only
+    within the code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04164]]
+    The variable decorated with code:BaryCoordNoPerspCentroidAMD must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNoPerspCentroidAMD-04165]]
+    The variable decorated with code:BaryCoordNoPerspCentroidAMD must: be
+    declared as a three-component vector of 32-bit floating-point values
+****
+--
+
+[open,refpage='BaryCoordNoPerspSampleAMD',desc='Barycentric coordinates of a sample center in screen-space',type='builtins']
+--
+:refpage: BaryCoordNoPerspSampleAMD
+
+code:BaryCoordNoPerspSampleAMD::
+
+The code:BaryCoordNoPerspSampleAMD decoration can: be used to decorate a
+fragment shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using linear interpolation at each
+covered sample.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04166]]
+    The code:BaryCoordNoPerspSampleAMD decoration must: be used only within
+    the code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04167]]
+    The variable decorated with code:BaryCoordNoPerspSampleAMD must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNoPerspSampleAMD-04168]]
+    The variable decorated with code:BaryCoordNoPerspSampleAMD must: be
+    declared as a two-component vector of 32-bit floating-point values
+****
+--
+
+[open,refpage='BaryCoordPullModelAMD',desc='Inverse barycentric coordinates of a fragment center',type='builtins']
+--
+:refpage: BaryCoordPullModelAMD
+
+code:BaryCoordPullModelAMD::
+
+The code:BaryCoordPullModelAMD decoration can: be used to decorate a
+fragment shader input variable.
+This variable will contain (1/W, 1/I, 1/J) evaluated at the fragment center
+and can: be used to calculate gradients and then interpolate I, J, and W at
+any desired sample location.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordPullModelAMD-04169]]
+    The code:BaryCoordPullModelAMD decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordPullModelAMD-04170]]
+    The variable decorated with code:BaryCoordPullModelAMD must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordPullModelAMD-04171]]
+    The variable decorated with code:BaryCoordPullModelAMD must: be declared
+    as a three-component vector of 32-bit floating-point values
+****
+--
+
+[open,refpage='BaryCoordSmoothAMD',desc='Barycentric coordinates of a fragment center',type='builtins']
+--
+:refpage: BaryCoordSmoothAMD
+
+code:BaryCoordSmoothAMD::
+
+The code:BaryCoordSmoothAMD decoration can: be used to decorate a fragment
+shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using perspective interpolation at
+the fragment's center.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordSmoothAMD-04172]]
+    The code:BaryCoordSmoothAMD decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordSmoothAMD-04173]]
+    The variable decorated with code:BaryCoordSmoothAMD must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordSmoothAMD-04174]]
+    The variable decorated with code:BaryCoordSmoothAMD must: be declared as
+    a two-component vector of 32-bit floating-point values
+****
+--
+
+[open,refpage='BaryCoordSmoothCentroidAMD',desc='Barycentric coordinates of a fragment centroid',type='builtins']
+--
+:refpage: BaryCoordSmoothCentroidAMD
+
+code:BaryCoordSmoothCentroidAMD::
+
+The code:BaryCoordSmoothCentroidAMD decoration can: be used to decorate a
+fragment shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using perspective interpolation at
+the centroid.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04175]]
+    The code:BaryCoordSmoothCentroidAMD decoration must: be used only within
+    the code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04176]]
+    The variable decorated with code:BaryCoordSmoothCentroidAMD must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordSmoothCentroidAMD-04177]]
+    The variable decorated with code:BaryCoordSmoothCentroidAMD must: be
+    declared as a two-component vector of 32-bit floating-point values
+****
+--
+
+[open,refpage='BaryCoordSmoothSampleAMD',desc='Barycentric coordinates of a sample center',type='builtins']
+--
+:refpage: BaryCoordSmoothSampleAMD
+
+code:BaryCoordSmoothSampleAMD::
+
+The code:BaryCoordSmoothSampleAMD decoration can: be used to decorate a
+fragment shader input variable.
+This variable will contain the (I,J) pair of the barycentric coordinates
+corresponding to the fragment evaluated using perspective interpolation at
+each covered sample.
+The K coordinate of the barycentric coordinates can: be derived given the
+identity I {plus} J {plus} K = 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04178]]
+    The code:BaryCoordSmoothSampleAMD decoration must: be used only within
+    the code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04179]]
+    The variable decorated with code:BaryCoordSmoothSampleAMD must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordSmoothSampleAMD-04180]]
+    The variable decorated with code:BaryCoordSmoothSampleAMD must: be
+    declared as a two-component vector of 32-bit floating-point values
+****
+--
+endif::VK_AMD_shader_explicit_vertex_parameter[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
+[[interfaces-builtin-variables-baseinstance]]
+[open,refpage='BaseInstance',desc='First instance being rendered',type='builtins']
+--
+:refpage: BaseInstance
+
+code:BaseInstance::
+
+Decorating a variable with the code:BaseInstance built-in will make that
+variable contain the integer value corresponding to the first instance that
+was passed to the command that invoked the current vertex shader invocation.
+code:BaseInstance is the pname:firstInstance parameter to a _direct drawing
+command_ or the pname:firstInstance member of a structure consumed by an
+_indirect drawing command_.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaseInstance-04181]]
+    The code:BaseInstance decoration must: be used only within the
+    code:Vertex {ExecutionModel}
+  * [[VUID-{refpage}-BaseInstance-04182]]
+    The variable decorated with code:BaseInstance must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaseInstance-04183]]
+    The variable decorated with code:BaseInstance must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-basevertex]]
+[open,refpage='BaseVertex',desc='First vertex being rendered',type='builtins']
+--
+:refpage: BaseVertex
+
+code:BaseVertex::
+
+Decorating a variable with the code:BaseVertex built-in will make that
+variable contain the integer value corresponding to the first vertex or
+vertex offset that was passed to the command that invoked the current vertex
+shader invocation.
+For _non-indexed drawing commands_, this variable is the pname:firstVertex
+parameter to a _direct drawing command_ or the pname:firstVertex member of
+the structure consumed by an _indirect drawing command_.
+For _indexed drawing commands_, this variable is the pname:vertexOffset
+parameter to a _direct drawing command_ or the pname:vertexOffset member of
+the structure consumed by an _indirect drawing command_.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-BaseVertex-04184]]
+    The code:BaseVertex decoration must: be used only within the code:Vertex
+    {ExecutionModel}
+  * [[VUID-{refpage}-BaseVertex-04185]]
+    The variable decorated with code:BaseVertex must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-BaseVertex-04186]]
+    The variable decorated with code:BaseVertex must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
+
+[[interfaces-builtin-variables-clipdistance]]
+[open,refpage='ClipDistance',desc='Application-specified clip distances',type='builtins']
+--
+:refpage: ClipDistance
+
+code:ClipDistance::
+
+Decorating a variable with the code:ClipDistance built-in decoration will
+make that variable contain the mechanism for controlling user clipping.
+code:ClipDistance is an array such that the i^th^ element of the array
+specifies the clip distance for plane i.
+A clip distance of 0 means the vertex is on the plane, a positive distance
+means the vertex is inside the clip half-space, and a negative distance
+means the vertex is outside the clip half-space.
+
+[NOTE]
+.Note
+====
+The array variable decorated with code:ClipDistance is explicitly sized by
+the shader.
+====
+
+[NOTE]
+.Note
+====
+In the last <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>>, these values will be linearly interpolated across the
+primitive and the portion of the primitive with interpolated distances less
+than 0 will be considered outside the clip volume.
+If code:ClipDistance is then used by a fragment shader, code:ClipDistance
+contains these linearly interpolated values.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ClipDistance-04187]]
+    The code:ClipDistance decoration must: be used only within the
+    code:MeshEXT, code:MeshNV, code:Vertex, code:Fragment,
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel}
+  * [[VUID-{refpage}-ClipDistance-04188]]
+    The variable decorated with code:ClipDistance within the code:MeshEXT,
+    code:MeshNV, or code:Vertex {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-ClipDistance-04189]]
+    The variable decorated with code:ClipDistance within the code:Fragment
+    {ExecutionModel} must: be declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-ClipDistance-04190]]
+    The variable decorated with code:ClipDistance within the
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: not be declared in a {StorageClass} other than
+    code:Input or code:Output
+  * [[VUID-{refpage}-ClipDistance-04191]]
+    The variable decorated with code:ClipDistance must: be declared as an
+    array of 32-bit floating-point values
+****
+--
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-clipdistancepv]]
+[open,refpage='ClipDistancePerViewNV',desc='Application-specified clip distances per view',type='builtins']
+--
+:refpage: ClipDistancePerViewNV
+
+code:ClipDistancePerViewNV::
+
+Decorating a variable with the code:ClipDistancePerViewNV built-in
+decoration will make that variable contain the per-view clip distances.
+The per-view clip distances have the same semantics as code:ClipDistance.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ClipDistancePerViewNV-04192]]
+    The code:ClipDistancePerViewNV decoration must: be used only within the
+    code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-ClipDistancePerViewNV-04193]]
+    The variable decorated with code:ClipDistancePerViewNV must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-ClipDistancePerViewNV-04194]]
+    The variable decorated with code:ClipDistancePerViewNV must: also be
+    decorated with the code:PerViewNV decoration
+  * [[VUID-{refpage}-ClipDistancePerViewNV-04195]]
+    The variable decorated with code:ClipDistancePerViewNV must: be declared
+    as a two-dimensional array of 32-bit floating-point values
+****
+--
+endif::VK_NV_mesh_shader[]
+
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-clusteridhuawei]]
+[open,refpage='ClusterIDHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: ClusterIDHUAWEI
+
+code:ClusterIDHUAWEI::
+
+The code:ClusterIDHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this variable will contain an integer value
+that specifies the id of cluster being rendered by this drawing command.
+When Cluster Culling Shader enable, code:ClusterIDHUAWEI will replace
+gl_DrawID pass to vertex shader for cluster-related information fetching.
+
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ClusterIDHUAWEI-07797]]
+    The code:ClusterIDHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-ClusterIDHUAWEI-07798]]
+    The variable decorated with code:ClusterIDHUAWEI must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+
+[[interfaces-builtin-variables-culldistance]]
+[open,refpage='CullDistance',desc='Application-specified cull distances',type='builtins']
+--
+:refpage: CullDistance
+
+code:CullDistance::
+
+Decorating a variable with the code:CullDistance built-in decoration will
+make that variable contain the mechanism for controlling user culling.
+If any member of this array is assigned a negative value for all vertices
+belonging to a primitive, then the primitive is discarded before
+rasterization.
+
+[NOTE]
+.Note
+====
+In fragment shaders, the values of the code:CullDistance array are linearly
+interpolated across each primitive.
+====
+
+[NOTE]
+.Note
+====
+If code:CullDistance decorates an input variable, that variable will contain
+the corresponding value from the code:CullDistance decorated output variable
+from the previous shader stage.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CullDistance-04196]]
+    The code:CullDistance decoration must: be used only within the
+    code:MeshEXT, code:MeshNV, code:Vertex, code:Fragment,
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel}
+  * [[VUID-{refpage}-CullDistance-04197]]
+    The variable decorated with code:CullDistance within the code:MeshEXT,
+    code:MeshNV or code:Vertex {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-CullDistance-04198]]
+    The variable decorated with code:CullDistance within the code:Fragment
+    {ExecutionModel} must: be declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-CullDistance-04199]]
+    The variable decorated with code:CullDistance within the
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: not be declared using a {StorageClass} other than
+    code:Input or code:Output
+  * [[VUID-{refpage}-CullDistance-04200]]
+    The variable decorated with code:CullDistance must: be declared as an
+    array of 32-bit floating-point values
+****
+--
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-culldistancepv]]
+[open,refpage='CullDistancePerViewNV',desc='Application-specified cull distances per view',type='builtins']
+--
+:refpage: CullDistancePerViewNV
+
+code:CullDistancePerViewNV::
+
+Decorating a variable with the code:CullDistancePerViewNV built-in
+decoration will make that variable contain the per-view cull distances.
+The per-view cull distances have the same semantics as code:CullDistance.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CullDistancePerViewNV-04201]]
+    The code:CullDistancePerViewNV decoration must: be used only within the
+    code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-CullDistancePerViewNV-04202]]
+    The variable decorated with code:CullDistancePerViewNV must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-CullDistancePerViewNV-04203]]
+    The variable decorated with code:CullDistancePerViewNV must: also be
+    decorated with the code:PerViewNV decoration
+  * [[VUID-{refpage}-CullDistancePerViewNV-04204]]
+    The variable decorated with code:CullDistancePerViewNV must: be declared
+    as a two-dimensional array of 32-bit floating-point values
+****
+--
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+[[interfaces-builtin-variables-cullprimitive]]
+[open,refpage='CullPrimitiveEXT',desc='Application-specified culling state per primitive',type='builtins']
+--
+:refpage: CullPrimitiveEXT
+
+code:CullPrimitiveEXT::
+
+Decorating a variable with the code:CullPrimitiveEXT built-in decoration
+will make that variable contain the culling state of output primitives.
+If the per-primitive boolean value is code:true, the primitive will be
+culled, if it is code:false it will not be culled.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CullPrimitiveEXT-07034]]
+    The code:CullPrimitiveEXT decoration must: be used only within the
+    code:MeshEXT {ExecutionModel}
+  * [[VUID-{refpage}-CullPrimitiveEXT-07035]]
+    The variable decorated with code:CullPrimitiveEXT must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-CullPrimitiveEXT-07036]]
+    The variable decorated with code:CullPrimitiveEXT must: be declared as
+    an array of boolean values
+  * [[VUID-{refpage}-CullPrimitiveEXT-07037]]
+    The size of the array decorated with code:CullPrimitiveEXT must: match
+    the value specified by code:OutputPrimitivesEXT
+  * [[VUID-{refpage}-CullPrimitiveEXT-07038]]
+    The variable decorated with code:CullPrimitiveEXT within the
+    code:MeshEXT {ExecutionModel} must: also be decorated with the
+    code:PerPrimitiveEXT decoration
+****
+--
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_tracing_maintenance1[]
+[[interfaces-builtin-variables-cullmask]]
+[open,refpage='CullMaskKHR',desc='OpTrace specified ray cull mask',type='builtins']
+--
+:refpage: CullMaskKHR
+
+code:CullMaskKHR::
+
+A variable decorated with the code:CullMaskKHR decoration will specify the
+cull mask of the ray being processed.
+The value is given by the `Cull Mask` parameter passed into one of the
+code:OpTrace* instructions.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CullMaskKHR-06735]]
+    The code:CullMaskKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-CullMaskKHR-06736]]
+    The variable decorated with code:CullMaskKHR must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-CullMaskKHR-06737]]
+    The variable decorated with code:CullMaskKHR must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_tracing_maintenance1[]
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[[interfaces-builtin-variables-currentraytime]]
+[open,refpage='CurrentRayTimeNV',desc='Time value of a ray intersection',type='builtins']
+--
+:refpage: CurrentRayTimeNV
+
+code:CurrentRayTimeNV::
+
+A variable decorated with the code:CurrentRayTimeNV decoration contains the
+time value passed in to code:OpTraceRayMotionNV which called this shader.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CurrentRayTimeNV-04942]]
+    The code:CurrentRayTimeNV decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-CurrentRayTimeNV-04943]]
+    The variable decorated with code:CurrentRayTimeNV must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-CurrentRayTimeNV-04944]]
+    The variable decorated with code:CurrentRayTimeNV must: be declared as a
+    scalar 32-bit floating-point value
+****
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[[interfaces-builtin-variables-deviceindex]]
+[open,refpage='DeviceIndex',desc='Index of the device executing the shader',type='builtins']
+--
+:refpage: DeviceIndex
+
+code:DeviceIndex::
+
+The code:DeviceIndex decoration can: be applied to a shader input which will
+be filled with the device index of the physical device that is executing the
+current shader invocation.
+This value will be in the range latexmath:[[0,max(1,physicalDeviceCount))],
+where physicalDeviceCount is the pname:physicalDeviceCount member of
+slink:VkDeviceGroupDeviceCreateInfo.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-DeviceIndex-04205]]
+    The variable decorated with code:DeviceIndex must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-DeviceIndex-04206]]
+    The variable decorated with code:DeviceIndex must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
+[[interfaces-builtin-variables-drawindex]]
+[open,refpage='DrawIndex',desc='Index of the current draw',type='builtins']
+--
+:refpage: DrawIndex
+
+code:DrawIndex::
+
+Decorating a variable with the code:DrawIndex built-in will make that
+variable contain the integer value corresponding to the zero-based index of
+the draw that invoked the current
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
+vertex shader invocation.
+For _indirect drawing commands_, code:DrawIndex begins at zero and
+increments by one for each draw executed.
+The number of draws is given by the pname:drawCount parameter.
+For _direct drawing commands_,
+ifdef::VK_EXT_multi_draw[]
+if flink:vkCmdDrawMultiEXT or flink:vkCmdDrawMultiIndexedEXT is used, this
+variable contains the integer value corresponding to the zero-based index of
+the draw.
+Otherwise
+endif::VK_EXT_multi_draw[]
+code:DrawIndex is always zero.
+code:DrawIndex is dynamically uniform.
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+When task or mesh shaders are used, only the first active stage will have
+proper access to the variable.
+The value read by other stages is undefined:.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-DrawIndex-04207]]
+    The code:DrawIndex decoration must: be used only within the code:Vertex,
+    code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV {ExecutionModel}
+  * [[VUID-{refpage}-DrawIndex-04208]]
+    The variable decorated with code:DrawIndex must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-DrawIndex-04209]]
+    The variable decorated with code:DrawIndex must: be declared as a scalar
+    32-bit integer value
+****
+--
+endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-firstindexhuawei]]
+[open,refpage='FirstIndexHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: FirstIndexHUAWEI
+
+code:FirstIndexHUAWEI::
+
+The code:FirstIndexHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this indexed mode specific variable will
+contain an integer value that specifies the base index within the index
+buffer corresponding to a cluster.
+
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FirstIndexHUAWEI-07799]]
+    The code:FirstIndexHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-FirstIndexHUAWEI-07800]]
+    The variable decorated with code:FirstIndexHUAWEI must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+
+[[interfaces-builtin-variables-fragcoord]]
+[open,refpage='FragCoord',desc='Screen-space coordinate of the fragment center',type='builtins']
+--
+:refpage: FragCoord
+
+code:FragCoord::
+
+Decorating a variable with the code:FragCoord built-in decoration will make
+that variable contain the framebuffer coordinate
+latexmath:[(x,y,z,\frac{1}{w})] of the fragment being processed.
+The [eq]#(x,y)# coordinate [eq]#(0,0)# is the upper left corner of the upper
+left pixel in the framebuffer.
++
+When <<primsrast-sampleshading,Sample Shading>> is enabled, the [eq]#x# and
+[eq]#y# components of code:FragCoord reflect the location of one of the
+samples corresponding to the shader invocation.
++
+Otherwise, the [eq]#x# and [eq]#y# components of code:FragCoord reflect the
+location of the center of the fragment.
++
+The [eq]#z# component of code:FragCoord is the interpolated depth value of
+the primitive.
++
+The [eq]#w# component is the interpolated latexmath:[\frac{1}{w}].
++
+The code:Centroid interpolation decoration is ignored, but allowed, on
+code:FragCoord.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragCoord-04210]]
+    The code:FragCoord decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragCoord-04211]]
+    The variable decorated with code:FragCoord must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-FragCoord-04212]]
+    The variable decorated with code:FragCoord must: be declared as a
+    four-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-fragdepth]]
+[open,refpage='FragDepth',desc='Application-specified depth for depth testing',type='builtins']
+--
+:refpage: FragDepth
+
+code:FragDepth::
+
+To have a shader supply a fragment-depth value, the shader must: declare the
+code:DepthReplacing execution mode.
+Such a shader's fragment-depth value will come from the variable decorated
+with the code:FragDepth built-in decoration.
++
+This value will be used for any subsequent depth testing performed by the
+implementation or writes to the depth attachment.
+See <<fragops-shader-depthreplacement, fragment shader depth replacement>>
+for details.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragDepth-04213]]
+    The code:FragDepth decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragDepth-04214]]
+    The variable decorated with code:FragDepth must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-FragDepth-04215]]
+    The variable decorated with code:FragDepth must: be declared as a scalar
+    32-bit floating-point value
+  * [[VUID-{refpage}-FragDepth-04216]]
+    If the shader dynamically writes to the variable decorated with
+    code:FragDepth, the code:DepthReplacing {ExecutionMode} must: be
+    declared
+****
+--
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-firstinstancehuawei]]
+[open,refpage='FirstInstanceHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: FirstInstanceHUAWEI
+
+code:FirstInstanceHUAWEI::
+
+The code:FirstInstanceHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this variable will contain an integer value
+that specifies the instance ID of the first instance to draw.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FirstInstanceHUAWEI-07801]]
+    The code:FirstInstanceHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-FirstInstanceHUAWEI-07802]]
+    The variable decorated with code:FirstInstanceHUAWEI must: be declared
+    as a scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-firstvertexhuawei]]
+[open,refpage='FirstVertexHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: FirstVertexHUAWEI
+
+code:FirstVertexHUAWEI::
+
+The code:FirstVertexHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this non-indexed mode specific variable will
+contain an integer value that specifies the index of the first vertex in a
+cluster to draw.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FirstVertexHUAWEI-07803]]
+    The code:FirstVertexHUAWEI decoration must: be used only within the
+    code:FirstVertexHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-FirstVertexHUAWEI-07804]]
+    The variable decorated with code:FirstVertexHUAWEI must: be declared as
+    a scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+
+ifdef::VK_EXT_fragment_density_map[]
+[[interfaces-builtin-variables-fraginvocationcount]]
+[open,refpage='FragInvocationCountEXT',desc='Number of fragment shader invocations for a fragment',type='builtins']
+--
+:refpage: FragInvocationCountEXT
+
+code:FragInvocationCountEXT::
+
+Decorating a variable with the code:FragInvocationCountEXT built-in
+decoration will make that variable contain the maximum number of fragment
+shader invocations for the fragment, as determined by
+pname:minSampleShading.
++
+If <<primsrast-sampleshading,Sample Shading>> is not enabled,
+code:FragInvocationCountEXT will be filled with a value of 1.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragInvocationCountEXT-04217]]
+    The code:FragInvocationCountEXT decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragInvocationCountEXT-04218]]
+    The variable decorated with code:FragInvocationCountEXT must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-FragInvocationCountEXT-04219]]
+    The variable decorated with code:FragInvocationCountEXT must: be
+    declared as a scalar 32-bit integer value
+****
+--
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[[interfaces-builtin-variables-fragsize]]
+[open,refpage='FragSizeEXT',desc='Size of the screen-space area covered by the fragment',type='builtins']
+--
+:refpage: FragSizeEXT
+
+code:FragSizeEXT::
+
+Decorating a variable with the code:FragSizeEXT built-in decoration will
+make that variable contain the dimensions in pixels of the
+<<glossary-fragment-area,area>> that the fragment covers for that
+invocation.
++
+If fragment density map is not enabled, code:FragSizeEXT will be filled with
+a value of [eq]#(1,1)#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragSizeEXT-04220]]
+    The code:FragSizeEXT decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragSizeEXT-04221]]
+    The variable decorated with code:FragSizeEXT must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-FragSizeEXT-04222]]
+    The variable decorated with code:FragSizeEXT must: be declared as a
+    two-component vector of 32-bit integer values
+****
+--
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_EXT_shader_stencil_export[]
+[[interfaces-builtin-variables-fragstencilref]]
+[open,refpage='FragStencilRefEXT',desc='Application-specified stencil reference value used in stencil tests',type='builtins']
+--
+:refpage: FragStencilRefEXT
+
+code:FragStencilRefEXT::
+
+Decorating a variable with the code:FragStencilRefEXT built-in decoration
+will make that variable contain the new stencil reference value for all
+samples covered by the fragment.
+This value will be used as the stencil reference value used in stencil
+testing.
++
+To write to code:FragStencilRefEXT, a shader must: declare the
+code:StencilRefReplacingEXT execution mode.
+If a shader declares the code:StencilRefReplacingEXT execution mode and
+there is an execution path through the shader that does not set
+code:FragStencilRefEXT, then the fragment's stencil reference value is
+undefined: for executions of the shader that take that path.
++
+Only the least significant *s* bits of the integer value of the variable
+decorated with code:FragStencilRefEXT are considered for stencil testing,
+where *s* is the number of bits in the stencil framebuffer attachment, and
+higher order bits are discarded.
++
+See <<fragops-shader-stencilrefreplacement, fragment shader stencil
+reference replacement>> for more details.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragStencilRefEXT-04223]]
+    The code:FragStencilRefEXT decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragStencilRefEXT-04224]]
+    The variable decorated with code:FragStencilRefEXT must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-FragStencilRefEXT-04225]]
+    The variable decorated with code:FragStencilRefEXT must: be declared as
+    a scalar integer value
+****
+--
+endif::VK_EXT_shader_stencil_export[]
+
+ifdef::VK_NV_shading_rate_image[]
+[open,refpage='FragmentSizeNV',desc='Size of the screen-space area covered by the fragment',type='builtins']
+--
+:refpage: FragmentSizeNV
+
+code:FragmentSizeNV::
+
+Decorating a variable with the code:FragmentSizeNV built-in decoration will
+make that variable contain the width and height of the fragment.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FragmentSizeNV-04226]]
+    The code:FragmentSizeNV decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FragmentSizeNV-04227]]
+    The variable decorated with code:FragmentSizeNV must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-FragmentSizeNV-04228]]
+    The variable decorated with code:FragmentSizeNV must: be declared as a
+    two-component vector of 32-bit integer values
+****
+--
+endif::VK_NV_shading_rate_image[]
+
+
+[[interfaces-builtin-variables-frontfacing]]
+[open,refpage='FrontFacing',desc='Front face determination of a fragment',type='builtins']
+--
+:refpage: FrontFacing
+
+code:FrontFacing::
+
+Decorating a variable with the code:FrontFacing built-in decoration will
+make that variable contain whether the fragment is front or back facing.
+This variable is non-zero if the current fragment is considered to be part
+of a <<primsrast-polygons-basic,front-facing>> polygon primitive or of a
+non-polygon primitive and is zero if the fragment is considered to be part
+of a back-facing polygon primitive.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FrontFacing-04229]]
+    The code:FrontFacing decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FrontFacing-04230]]
+    The variable decorated with code:FrontFacing must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-FrontFacing-04231]]
+    The variable decorated with code:FrontFacing must: be declared as a
+    boolean value
+****
+--
+
+ifdef::VK_EXT_conservative_rasterization[]
+[[interfaces-builtin-variables-fullycoveredext]]
+[open,refpage='FullyCoveredEXT',desc='Indication of whether a fragment is fully covered',type='builtins']
+--
+:refpage: FullyCoveredEXT
+
+code:FullyCoveredEXT::
+
+Decorating a variable with the code:FullyCoveredEXT built-in decoration will
+make that variable indicate whether the <<glossary-fragment-area,fragment
+area>> is fully covered by the generating primitive.
+This variable is non-zero if conservative rasterization is enabled and the
+current fragment area is fully covered by the generating primitive, and is
+zero if the fragment is not covered or partially covered, or conservative
+rasterization is disabled.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-FullyCoveredEXT-04232]]
+    The code:FullyCoveredEXT decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-FullyCoveredEXT-04233]]
+    The variable decorated with code:FullyCoveredEXT must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-FullyCoveredEXT-04234]]
+    The variable decorated with code:FullyCoveredEXT must: be declared as a
+    boolean value
+ifdef::VK_EXT_post_depth_coverage[]
+  * [[VUID-{refpage}-conservativeRasterizationPostDepthCoverage-04235]]
+    If
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativeRasterizationPostDepthCoverage
+    is not supported the code:PostDepthCoverage {ExecutionMode} must: not be
+    declared, when a variable with the code:FullyCoveredEXT decoration is
+    declared
+endif::VK_EXT_post_depth_coverage[]
+****
+--
+endif::VK_EXT_conservative_rasterization[]
+
+[[interfaces-builtin-variables-globalinvocationid]]
+[open,refpage='GlobalInvocationId',desc='Global invocation ID',type='builtins']
+--
+:refpage: GlobalInvocationId
+
+code:GlobalInvocationId::
+
+Decorating a variable with the code:GlobalInvocationId built-in decoration
+will make that variable contain the location of the current invocation
+within the global workgroup.
+Each component is equal to the index of the local workgroup multiplied by
+the size of the local workgroup plus code:LocalInvocationId.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-GlobalInvocationId-04236]]
+    The code:GlobalInvocationId decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-GlobalInvocationId-04237]]
+    The variable decorated with code:GlobalInvocationId must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-GlobalInvocationId-04238]]
+    The variable decorated with code:GlobalInvocationId must: be declared as
+    a three-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-helperinvocation]]
+[open,refpage='HelperInvocation',desc='Indication of whether a fragment shader is a helper invocation',type='builtins']
+--
+:refpage: HelperInvocation
+
+code:HelperInvocation::
+
+Decorating a variable with the code:HelperInvocation built-in decoration
+will make that variable contain whether the current invocation is a helper
+invocation.
+This variable is non-zero if the current fragment being shaded is a helper
+invocation and zero otherwise.
+A helper invocation is an invocation of the shader that is produced to
+satisfy internal requirements such as the generation of derivatives.
+
+[NOTE]
+.Note
+====
+It is very likely that a helper invocation will have a value of
+code:SampleMask fragment shader input value that is zero.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-HelperInvocation-04239]]
+    The code:HelperInvocation decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-HelperInvocation-04240]]
+    The variable decorated with code:HelperInvocation must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-HelperInvocation-04241]]
+    The variable decorated with code:HelperInvocation must: be declared as a
+    boolean value
+****
+--
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-hitkind]]
+[open,refpage='HitKindKHR',desc='Kind of hit that triggered an any-hit or closest hit ray shader',type='builtins']
+--
+:refpage: HitKindKHR
+
+code:HitKindKHR::
+
+A variable decorated with the code:HitKindKHR decoration will describe the
+intersection that triggered the execution of the current shader.
+The values are determined by the intersection shader.
+For user-defined intersection shaders this is the value that was passed to
+the "`Hit Kind`" operand of code:OpReportIntersectionKHR.
+For triangle intersection candidates, this will be one of
+code:HitKindFrontFacingTriangleKHR or code:HitKindBackFacingTriangleKHR.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-HitKindKHR-04242]]
+    The code:HitKindKHR decoration must: be used only within the
+    code:AnyHitKHR or code:ClosestHitKHR {ExecutionModel}
+  * [[VUID-{refpage}-HitKindKHR-04243]]
+    The variable decorated with code:HitKindKHR must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-HitKindKHR-04244]]
+    The variable decorated with code:HitKindKHR must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+ifdef::VK_NV_ray_tracing[]
+[[interfaces-builtin-variables-hitt]]
+[open,refpage='HitTNV',desc='T value of a ray intersection',type='builtins']
+--
+:refpage: HitTNV
+
+code:HitTNV::
+
+A variable decorated with the code:HitTNV decoration is equivalent to a
+variable decorated with the code:RayTmaxKHR decoration.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-HitTNV-04245]]
+    The code:HitTNV decoration must: be used only within the code:AnyHitNV
+    or code:ClosestHitNV {ExecutionModel}
+  * [[VUID-{refpage}-HitTNV-04246]]
+    The variable decorated with code:HitTNV must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-HitTNV-04247]]
+    The variable decorated with code:HitTNV must: be declared as a scalar
+    32-bit floating-point value
+****
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_position_fetch[]
+[[interfaces-builtin-variables-hittrianglevertexpositions]]
+[open,refpage='HitTriangleVertexPositionsKHR',desc='Vertices of an intersected triangle',type='builtins']
+--
+:refpage: HitTriangleVertexPositionsKHR
+
+code:HitTriangleVertexPositionsKHR::
+
+A variable decorated with the code:HitTriangleVertexPositionsKHR decoration
+will specify the object space vertices of the triangle at the current
+intersection in application-provided order.
+The positions returned are transformed by the geometry transform, which is
+performed at standard <<fundamentals-floatingpoint, floating point>>
+precision, but without a specifically defined order of floating point
+operations to perform the matrix multiplication.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-HitTriangleVertexPositionsKHR-08747]]
+    The code:HitTriangleVertexPositionsKHR decoration must: be used only
+    within the code:AnyHitKHR or code:ClosestHitKHR {ExecutionModel}
+  * [[VUID-{refpage}-HitTriangleVertexPositionsKHR-08748]]
+    The variable decorated with code:HitTriangleVertexPositionsKHR must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-HitTriangleVertexPositionsKHR-08749]]
+    The variable decorated with code:HitTriangleVertexPositionsKHR must: be
+    declared as an array of three vectors of three 32-bit float values
+  * [[VUID-{refpage}-HitTriangleVertexPositionsKHR-08750]]
+    The variable decorated with code:HitTriangleVertexPositionsKHR must: be
+    used only if the value of code:HitKindKHR is
+    code:HitKindFrontFacingTriangleKHR or code:HitKindBackFacingTriangleKHR
+  * [[VUID-{refpage}-None-08751]]
+    The acceleration structure corresponding to the current intersection
+    must: have been built with
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR
+****
+--
+endif::VK_KHR_ray_tracing_position_fetch[]
+
+[[interfaces-builtin-variables-incomingrayflags]]
+[open,refpage='IncomingRayFlagsKHR',desc='Flags used to trace a ray',type='builtins']
+--
+:refpage: IncomingRayFlagsKHR
+
+code:IncomingRayFlagsKHR::
+
+A variable with the code:IncomingRayFlagsKHR decoration will contain the ray
+flags passed in to the trace call that invoked this particular shader.
+Setting pipeline flags on the raytracing pipeline must: not cause any
+corresponding flags to be set in variables with this decoration.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-IncomingRayFlagsKHR-04248]]
+    The code:IncomingRayFlagsKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-IncomingRayFlagsKHR-04249]]
+    The variable decorated with code:IncomingRayFlagsKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-IncomingRayFlagsKHR-04250]]
+    The variable decorated with code:IncomingRayFlagsKHR must: be declared
+    as a scalar 32-bit integer value
+****
+--
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-indexcounthuawei]]
+[open,refpage='IndexCountHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: IndexCountHUAWEI
+
+code:IndexCountHUAWEI::
+
+The code:IndexCountHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this indexed mode specific variable will
+contain an integer value that specifies the number of indexed vertices in a
+cluster to draw.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-IndexCountHUAWEI-07805]]
+    The code:IndexCountHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-IndexCountHUAWEI-07806]]
+    The variable decorated with code:IndexCountHUAWEI must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-instancecounthuawei]]
+[open,refpage='InstanceCountHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: InstanceCountHUAWEI
+
+code:InstanceCountHUAWEI::
+
+The code:InstanceCountHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this variable will contain an integer value
+that specifies the number of instance to draw in a cluster.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InstanceCountHUAWEI-07807]]
+    The code:InstanceCountHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-InstanceCountHUAWEI-07808]]
+    The variable decorated with code:InstanceCountHUAWEI must: be declared
+    as a scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+[[interfaces-builtin-variables-instancecustomindex]]
+[open,refpage='InstanceCustomIndexKHR',desc='Custom index associated with an intersected instance',type='builtins']
+--
+:refpage: InstanceCustomIndexKHR
+
+code:InstanceCustomIndexKHR::
+
+A variable decorated with the code:InstanceCustomIndexKHR decoration will
+contain the application-defined value of the instance that intersects the
+current ray.
+This variable contains the value that was specified in
+slink:VkAccelerationStructureInstanceKHR::pname:instanceCustomIndex for the
+current acceleration structure instance in the lower 24 bits and the upper 8
+bits will be zero.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InstanceCustomIndexKHR-04251]]
+    The code:InstanceCustomIndexKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-InstanceCustomIndexKHR-04252]]
+    The variable decorated with code:InstanceCustomIndexKHR must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-InstanceCustomIndexKHR-04253]]
+    The variable decorated with code:InstanceCustomIndexKHR must: be
+    declared as a scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-instanceid]]
+[open,refpage='InstanceId',desc='Id associated with an intersected instance',type='builtins']
+--
+:refpage: InstanceId
+
+code:InstanceId::
+
+Decorating a variable in an intersection, any-hit, or closest hit shader
+with the code:InstanceId decoration will make that variable contain the
+index of the instance that intersects the current ray.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InstanceId-04254]]
+    The code:InstanceId decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-InstanceId-04255]]
+    The variable decorated with code:InstanceId must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-InstanceId-04256]]
+    The variable decorated with code:InstanceId must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[[interfaces-builtin-variables-invocationid]]
+[open,refpage='InvocationId',desc='Invocation ID in a geometry or tessellation control shader',type='builtins']
+--
+:refpage: InvocationId
+
+code:InvocationId::
+
+Decorating a variable with the code:InvocationId built-in decoration will
+make that variable contain the index of the current shader invocation in a
+geometry shader, or the index of the output patch vertex in a tessellation
+control shader.
++
+In a geometry shader, the index of the current shader invocation ranges from
+zero to the number of <<geometry-invocations,instances>> declared in the
+shader minus one.
+If the instance count of the geometry shader is one or is not specified,
+then code:InvocationId will be zero.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InvocationId-04257]]
+    The code:InvocationId decoration must: be used only within the
+    code:TessellationControl or code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-InvocationId-04258]]
+    The variable decorated with code:InvocationId must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-InvocationId-04259]]
+    The variable decorated with code:InvocationId must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+ifdef::VK_NV_shading_rate_image[]
+[open,refpage='InvocationsPerPixelNV',desc='Number of fragment shader invocations for the current pixel',type='builtins']
+--
+:refpage: InvocationsPerPixelNV
+
+code:InvocationsPerPixelNV::
+
+Decorating a variable with the code:InvocationsPerPixelNV built-in
+decoration will make that variable contain the maximum number of fragment
+shader invocations per pixel, as derived from the effective shading rate for
+the fragment.
+If a primitive does not fully cover a pixel, the number of fragment shader
+invocations for that pixel may: be less than the value of
+code:InvocationsPerPixelNV.
+If the shading rate indicates a fragment covering multiple pixels, then
+code:InvocationsPerPixelNV will be one.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InvocationsPerPixelNV-04260]]
+    The code:InvocationsPerPixelNV decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-InvocationsPerPixelNV-04261]]
+    The variable decorated with code:InvocationsPerPixelNV must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-InvocationsPerPixelNV-04262]]
+    The variable decorated with code:InvocationsPerPixelNV must: be declared
+    as a scalar 32-bit integer value
+****
+--
+endif::VK_NV_shading_rate_image[]
+
+[[interfaces-builtin-variables-instanceindex]]
+[open,refpage='InstanceIndex',desc='Index of an instance',type='builtins']
+--
+:refpage: InstanceIndex
+
+code:InstanceIndex::
+
+Decorating a variable in a vertex shader with the code:InstanceIndex
+built-in decoration will make that variable contain the index of the
+instance that is being processed by the current vertex shader invocation.
+code:InstanceIndex begins at the pname:firstInstance parameter to
+flink:vkCmdDraw or flink:vkCmdDrawIndexed or at the pname:firstInstance
+member of a structure consumed by flink:vkCmdDrawIndirect or
+flink:vkCmdDrawIndexedIndirect.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-InstanceIndex-04263]]
+    The code:InstanceIndex decoration must: be used only within the
+    code:Vertex {ExecutionModel}
+  * [[VUID-{refpage}-InstanceIndex-04264]]
+    The variable decorated with code:InstanceIndex must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-InstanceIndex-04265]]
+    The variable decorated with code:InstanceIndex must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-launchid]]
+[open,refpage='LaunchIdKHR',desc='Launch Id for ray shaders',type='builtins']
+--
+:refpage: LaunchIdKHR
+
+code:LaunchIdKHR::
+
+A variable decorated with the code:LaunchIdKHR decoration will specify the
+index of the work item being processed.
+One work item is generated for each of the pname:width {times} pname:height
+{times} pname:depth items dispatched by a flink:vkCmdTraceRaysKHR command.
+All shader invocations inherit the same value for variables decorated with
+code:LaunchIdKHR.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-LaunchIdKHR-04266]]
+    The code:LaunchIdKHR decoration must: be used only within the
+    code:RayGenerationKHR, code:IntersectionKHR, code:AnyHitKHR,
+    code:ClosestHitKHR, code:MissKHR, or code:CallableKHR {ExecutionModel}
+  * [[VUID-{refpage}-LaunchIdKHR-04267]]
+    The variable decorated with code:LaunchIdKHR must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-LaunchIdKHR-04268]]
+    The variable decorated with code:LaunchIdKHR must: be declared as a
+    three-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-launchsize]]
+[open,refpage='LaunchSizeKHR',desc='Launch dimensions for ray shaders',type='builtins']
+--
+:refpage: LaunchSizeKHR
+
+code:LaunchSizeKHR::
+
+A variable decorated with the code:LaunchSizeKHR decoration will contain the
+pname:width, pname:height, and pname:depth dimensions passed to the
+flink:vkCmdTraceRaysKHR command that initiated this shader execution.
+The pname:width is in the first component, the pname:height is in the second
+component, and the pname:depth is in the third component.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-LaunchSizeKHR-04269]]
+    The code:LaunchSizeKHR decoration must: be used only within the
+    code:RayGenerationKHR, code:IntersectionKHR, code:AnyHitKHR,
+    code:ClosestHitKHR, code:MissKHR, or code:CallableKHR {ExecutionModel}
+  * [[VUID-{refpage}-LaunchSizeKHR-04270]]
+    The variable decorated with code:LaunchSizeKHR must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-LaunchSizeKHR-04271]]
+    The variable decorated with code:LaunchSizeKHR must: be declared as a
+    three-component vector of 32-bit integer values
+****
+--
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[[interfaces-builtin-variables-layer]]
+[open,refpage='Layer',desc='Layer index for layered rendering',type='builtins']
+--
+:refpage: Layer
+
+code:Layer::
++
+[open]
+----
+Decorating a variable with the code:Layer built-in decoration will make that
+variable contain the select layer of a multi-layer framebuffer attachment.
+
+In a
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+vertex, tessellation evaluation, or
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+geometry shader, any variable decorated with code:Layer can be written with
+the framebuffer layer index to which the primitive produced by that shader
+will be directed.
+
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+The last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> (in pipeline order) controls the code:Layer that is used.
+Outputs in previous shader stages are not used, even if the last stage fails
+to write the code:Layer.
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+
+If the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface does not include a variable decorated
+with code:Layer, then the first layer is used.
+If a <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface includes a variable decorated with
+code:Layer, it must: write the same value to code:Layer for all output
+vertices of a given primitive.
+If the code:Layer value is less than 0 or greater than or equal to the
+number of layers in the framebuffer, then primitives may: still be
+rasterized, fragment shaders may: be executed, and the framebuffer values
+for all layers are undefined:.
+ifdef::VK_EXT_mesh_shader[]
+In a mesh shader this also applies when the code:Layer value is greater than
+or equal to the pname:maxMeshOutputLayers limit.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_NV_viewport_array2[]
+If a variable with the code:Layer decoration is also decorated with
+code:ViewportRelativeNV, then the code:ViewportIndex is added to the layer
+that is used for rendering and that is made available in the fragment
+shader.
+
+If the shader writes to a variable decorated code:ViewportMaskNV, then the
+layer selected has a different value for each viewport a primitive is
+rendered to.
+endif::VK_NV_viewport_array2[]
+
+In a fragment shader, a variable decorated with code:Layer contains the
+layer index of the primitive that the fragment invocation belongs to.
+----
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-Layer-04272]]
+    The code:Layer decoration must: be used only within the code:MeshEXT,
+    code:MeshNV, code:Vertex, code:TessellationEvaluation, code:Geometry, or
+    code:Fragment {ExecutionModel}
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-Layer-04273]]
+    If the <<features-shaderOutputLayer, pname:shaderOutputLayer>> feature
+    is not enabled then the code:Layer decoration must: be used only within
+    the code:Geometry or code:Fragment {ExecutionModel}
+endif::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-Layer-04274]]
+    The variable decorated with code:Layer within the code:MeshEXT,
+    code:MeshNV, code:Vertex, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: be declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-Layer-04275]]
+    The variable decorated with code:Layer within the code:Fragment
+    {ExecutionModel} must: be declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-Layer-04276]]
+    The variable decorated with code:Layer must: be declared as a scalar
+    32-bit integer value
+  * [[VUID-{refpage}-Layer-07039]]
+    The variable decorated with code:Layer within the code:MeshEXT
+    {ExecutionModel} must: also be decorated with the code:PerPrimitiveEXT
+    decoration
+****
+--
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-layerpv]]
+[open,refpage='LayerPerViewNV',desc='Layer index per view for layered rendering',type='builtins']
+--
+:refpage: LayerPerViewNV
+
+code:LayerPerViewNV::
+
+Decorating a variable with the code:LayerPerViewNV built-in decoration will
+make that variable contain the per-view layer information.
+The per-view layer has the same semantics as code:Layer, for each view.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-LayerPerViewNV-04277]]
+    The code:LayerPerViewNV decoration must: be used only within the
+    code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-LayerPerViewNV-04278]]
+    The variable decorated with code:LayerPerViewNV must: be declared using
+    the code:Output {StorageClass}
+  * [[VUID-{refpage}-LayerPerViewNV-04279]]
+    The variable decorated with code:LayerPerViewNV must: also be decorated
+    with the code:PerViewNV decoration
+  * [[VUID-{refpage}-LayerPerViewNV-04280]]
+    The variable decorated with code:LayerPerViewNV must: be declared as an
+    array of scalar 32-bit integer values
+****
+--
+endif::VK_NV_mesh_shader[]
+
+[[interfaces-builtin-variables-localinvocationid]]
+[open,refpage='LocalInvocationId',desc='Local invocation ID',type='builtins']
+--
+:refpage: LocalInvocationId
+
+code:LocalInvocationId::
+
+Decorating a variable with the code:LocalInvocationId built-in decoration
+will make that variable contain the location of the current
+ifdef::VK_HUAWEI_cluster_culling_shader[cluster culling, ]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
+compute shader invocation within the local workgroup.
+Each component ranges from zero through to the size of the workgroup in that
+dimension minus one.
+
+[NOTE]
+.Note
+====
+If the size of the workgroup in a particular dimension is one, then the
+code:LocalInvocationId in that dimension will be zero.
+If the workgroup is effectively two-dimensional, then
+code:LocalInvocationId.z will be zero.
+If the workgroup is effectively one-dimensional, then both
+code:LocalInvocationId.y and code:LocalInvocationId.z will be zero.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-LocalInvocationId-04281]]
+    The code:LocalInvocationId decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-LocalInvocationId-04282]]
+    The variable decorated with code:LocalInvocationId must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-LocalInvocationId-04283]]
+    The variable decorated with code:LocalInvocationId must: be declared as
+    a three-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-localinvocationindex]]
+[open,refpage='LocalInvocationIndex',desc='Linear local invocation index',type='builtins']
+--
+:refpage: LocalInvocationIndex
+
+code:LocalInvocationIndex::
+
+Decorating a variable with the code:LocalInvocationIndex built-in decoration
+will make that variable contain a one-dimensional representation of
+code:LocalInvocationId.
+This is computed as:
++
+[source,c++]
+----
+LocalInvocationIndex =
+    LocalInvocationId.z * WorkgroupSize.x * WorkgroupSize.y +
+    LocalInvocationId.y * WorkgroupSize.x +
+    LocalInvocationId.x;
+----
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-LocalInvocationIndex-04284]]
+    The code:LocalInvocationIndex decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-LocalInvocationIndex-04285]]
+    The variable decorated with code:LocalInvocationIndex must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-LocalInvocationIndex-04286]]
+    The variable decorated with code:LocalInvocationIndex must: be declared
+    as a scalar 32-bit integer value
+****
+--
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-meshviewcount]]
+[open,refpage='MeshViewCountNV',desc='Number of views processed by a mesh or task shader',type='builtins']
+--
+:refpage: MeshViewCountNV
+
+code:MeshViewCountNV::
+
+Decorating a variable with the code:MeshViewCountNV built-in decoration will
+make that variable contain the number of views processed by the current mesh
+or task shader invocations.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-MeshViewCountNV-04287]]
+    The code:MeshViewCountNV decoration must: be used only within the
+    code:MeshNV or code:TaskNV {ExecutionModel}
+  * [[VUID-{refpage}-MeshViewCountNV-04288]]
+    The variable decorated with code:MeshViewCountNV must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-MeshViewCountNV-04289]]
+    The variable decorated with code:MeshViewCountNV must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-meshviewindices]]
+[open,refpage='MeshViewIndicesNV',desc='Indices of views processed by a mesh or task shader',type='builtins']
+--
+:refpage: MeshViewIndicesNV
+
+code:MeshViewIndicesNV::
+
+Decorating a variable with the code:MeshViewIndicesNV built-in decoration
+will make that variable contain the mesh view indices.
+The mesh view indices is an array of values where each element holds the
+view number of one of the views being processed by the current mesh or task
+shader invocations.
+The values of array elements with indices greater than or equal to
+code:MeshViewCountNV are undefined:.
+If the value of code:MeshViewIndicesNV[i] is [eq]#j#, then any outputs
+decorated with code:PerViewNV will take on the value of array element
+[eq]#i# when processing primitives for view index [eq]#j#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-MeshViewIndicesNV-04290]]
+    The code:MeshViewIndicesNV decoration must: be used only within the
+    code:MeshNV or code:TaskNV {ExecutionModel}
+  * [[VUID-{refpage}-MeshViewIndicesNV-04291]]
+    The variable decorated with code:MeshViewIndicesNV must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-MeshViewIndicesNV-04292]]
+    The variable decorated with code:MeshViewIndicesNV must: be declared as
+    an array of scalar 32-bit integer values
+****
+--
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_VERSION_1_1[]
+[[interfaces-builtin-variables-numsubgroups]]
+[open,refpage='NumSubgroups',desc='Number of subgroups in a workgroup',type='builtins']
+--
+:refpage: NumSubgroups
+
+code:NumSubgroups::
+
+Decorating a variable with the code:NumSubgroups built-in decoration will
+make that variable contain the number of subgroups in the local workgroup.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-NumSubgroups-04293]]
+    The code:NumSubgroups decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-NumSubgroups-04294]]
+    The variable decorated with code:NumSubgroups must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-NumSubgroups-04295]]
+    The variable decorated with code:NumSubgroups must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_VERSION_1_1[]
+
+[[interfaces-builtin-variables-numworkgroups]]
+[open,refpage='NumWorkgroups',desc='Number of workgroups in a dispatch',type='builtins']
+--
+:refpage: NumWorkgroups
+
+code:NumWorkgroups::
+
+Decorating a variable with the code:NumWorkgroups built-in decoration will
+make that variable contain the number of local workgroups that are part of
+the dispatch that the invocation belongs to.
+Each component is equal to the values of the workgroup count parameters
+passed into the dispatching commands.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-NumWorkgroups-04296]]
+    The code:NumWorkgroups decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, or code:TaskEXT {ExecutionModel}
+  * [[VUID-{refpage}-NumWorkgroups-04297]]
+    The variable decorated with code:NumWorkgroups must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-NumWorkgroups-04298]]
+    The variable decorated with code:NumWorkgroups must: be declared as a
+    three-component vector of 32-bit integer values
+****
+--
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-objectraydirection]]
+[open,refpage='ObjectRayDirectionKHR',desc='Ray direction in object space',type='builtins']
+--
+:refpage: ObjectRayDirectionKHR
+
+code:ObjectRayDirectionKHR::
+
+A variable decorated with the code:ObjectRayDirectionKHR decoration will
+specify the direction of the ray being processed, in object space.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ObjectRayDirectionKHR-04299]]
+    The code:ObjectRayDirectionKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-ObjectRayDirectionKHR-04300]]
+    The variable decorated with code:ObjectRayDirectionKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-ObjectRayDirectionKHR-04301]]
+    The variable decorated with code:ObjectRayDirectionKHR must: be declared
+    as a three-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-objectrayorigin]]
+[open,refpage='ObjectRayOriginKHR',desc='Ray origin in object space',type='builtins']
+--
+:refpage: ObjectRayOriginKHR
+
+code:ObjectRayOriginKHR::
+
+A variable decorated with the code:ObjectRayOriginKHR decoration will
+specify the origin of the ray being processed, in object space.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ObjectRayOriginKHR-04302]]
+    The code:ObjectRayOriginKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-ObjectRayOriginKHR-04303]]
+    The variable decorated with code:ObjectRayOriginKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-ObjectRayOriginKHR-04304]]
+    The variable decorated with code:ObjectRayOriginKHR must: be declared as
+    a three-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-objecttoworld]]
+[open,refpage='ObjectToWorldKHR',desc='Transformation matrix from object to world space',type='builtins']
+--
+:refpage: ObjectToWorldKHR
+
+code:ObjectToWorldKHR::
+
+A variable decorated with the code:ObjectToWorldKHR decoration will contain
+the current object-to-world transformation matrix, which is determined by
+the instance of the current intersection.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ObjectToWorldKHR-04305]]
+    The code:ObjectToWorldKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-ObjectToWorldKHR-04306]]
+    The variable decorated with code:ObjectToWorldKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-ObjectToWorldKHR-04307]]
+    The variable decorated with code:ObjectToWorldKHR must: be declared as a
+    matrix with four columns of three-component vectors of 32-bit
+    floating-point values
+****
+--
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[[interfaces-builtin-variables-patchvertices]]
+[open,refpage='PatchVertices',desc='Number of vertices in an input patch',type='builtins']
+--
+:refpage: PatchVertices
+
+code:PatchVertices::
+
+Decorating a variable with the code:PatchVertices built-in decoration will
+make that variable contain the number of vertices in the input patch being
+processed by the shader.
+In a Tessellation Control Shader, this is the same as the
+name:patchControlPoints member of
+slink:VkPipelineTessellationStateCreateInfo.
+In a Tessellation Evaluation Shader, code:PatchVertices is equal to the
+tessellation control output patch size.
+When the same shader is used in different pipelines where the patch sizes
+are configured differently, the value of the code:PatchVertices variable
+will also differ.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PatchVertices-04308]]
+    The code:PatchVertices decoration must: be used only within the
+    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
+  * [[VUID-{refpage}-PatchVertices-04309]]
+    The variable decorated with code:PatchVertices must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-PatchVertices-04310]]
+    The variable decorated with code:PatchVertices must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-pointcoord]]
+[open,refpage='PointCoord',desc='Fragment coordinates in screen-space within a point primitive',type='builtins']
+--
+:refpage: PointCoord
+
+code:PointCoord::
+
+Decorating a variable with the code:PointCoord built-in decoration will make
+that variable contain the coordinate of the current fragment within the
+point being rasterized, normalized to the size of the point with origin in
+the upper left corner of the point, as described in
+<<primsrast-points-basic,Basic Point Rasterization>>.
+If the primitive the fragment shader invocation belongs to is not a point,
+then the variable decorated with code:PointCoord contains an undefined:
+value.
+
+[NOTE]
+.Note
+====
+Depending on how the point is rasterized, code:PointCoord may: never reach
+[eq]#(0,0)# or [eq]#(1,1)#.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PointCoord-04311]]
+    The code:PointCoord decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-PointCoord-04312]]
+    The variable decorated with code:PointCoord must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-PointCoord-04313]]
+    The variable decorated with code:PointCoord must: be declared as a
+    two-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-pointsize]]
+[open,refpage='PointSize',desc='Size of a point primitive',type='builtins']
+--
+:refpage: PointSize
+
+code:PointSize::
+
+Decorating a variable with the code:PointSize built-in decoration will make
+that variable contain the size of point primitives
+ifdef::VK_KHR_maintenance5[]
+or the final rasterization of polygons if <<primsrast-polygonmode, polygon
+mode>> is ename:VK_POLYGON_MODE_POINT when
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:polygonModePointSize
+is set to ename:VK_TRUE
+endif::VK_KHR_maintenance5[]
+.
+The value written to the variable decorated with code:PointSize by the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> in the pipeline is used as the framebuffer-space size of points
+produced by rasterization.
+ifdef::VK_KHR_maintenance5[]
+If <<features-maintenance5, pname:maintenance5>> is enabled and a value is
+not written to a variable decorated with code:PointSize, a value of 1.0 is
+used as the size of points.
+endif::VK_KHR_maintenance5[]
+
+[NOTE]
+.Note
+====
+When code:PointSize decorates a variable in the code:Input {StorageClass},
+it contains the data written to the output variable decorated with
+code:PointSize from the previous shader stage.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PointSize-04314]]
+    The code:PointSize decoration must: be used only within the
+    code:MeshEXT, code:MeshNV, code:Vertex, code:TessellationControl,
+    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-PointSize-04315]]
+    The variable decorated with code:PointSize within the code:MeshEXT,
+    code:MeshNV, or code:Vertex {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-PointSize-04316]]
+    The variable decorated with code:PointSize within the
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: not be declared using a {StorageClass} other than
+    code:Input or code:Output
+  * [[VUID-{refpage}-PointSize-04317]]
+    The variable decorated with code:PointSize must: be declared as a scalar
+    32-bit floating-point value
+****
+--
+
+[[interfaces-builtin-variables-position]]
+[open,refpage='Position',desc='Vertex position',type='builtins']
+--
+:refpage: Position
+
+code:Position::
+
+Decorating a variable with the code:Position built-in decoration will make
+that variable contain the position of the current vertex.
+In the last <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>>, the value of the variable decorated with code:Position is
+used in subsequent primitive assembly, clipping, and rasterization
+operations.
+
+[NOTE]
+.Note
+====
+When code:Position decorates a variable in the code:Input {StorageClass}, it
+contains the data written to the output variable decorated with
+code:Position from the previous shader stage.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-Position-04318]]
+    The code:Position decoration must: be used only within the code:MeshEXT,
+    code:MeshNV, code:Vertex, code:TessellationControl,
+    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-Position-04319]]
+    The variable decorated with code:Position within the code:MeshEXT,
+    code:MeshNV, or code:Vertex {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-Position-04320]]
+    The variable decorated with code:Position within the
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: not be declared using a {StorageClass} other than
+    code:Input or code:Output
+  * [[VUID-{refpage}-Position-04321]]
+    The variable decorated with code:Position must: be declared as a
+    four-component vector of 32-bit floating-point values
+****
+--
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+[[interfaces-builtin-variables-positionperview]]
+[open,refpage='PositionPerViewNV',desc='Vertex position per view',type='builtins']
+--
+:refpage: PositionPerViewNV
+
+code:PositionPerViewNV::
+
+Decorating a variable with the code:PositionPerViewNV built-in decoration
+will make that variable contain the position of the current vertex, for each
+view.
++
+Elements of the array correspond to views in a multiview subpass, and those
+elements corresponding to views in the view mask of the subpass the shader
+is compiled against will be used as the position value for those views.
+For the final
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> in the pipeline, values written to an output variable decorated with
+code:PositionPerViewNV are used in subsequent primitive assembly, clipping,
+and rasterization operations, as with code:Position.
+code:PositionPerViewNV output in an earlier
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> is available as an input in the subsequent
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
++
+If a shader is compiled against a subpass that has the
+ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX bit set, then
+the position values for each view must: not differ in any component other
+than the X component.
+If the values do differ, one will be chosen in an implementation-dependent
+manner.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PositionPerViewNV-04322]]
+    The code:PositionPerViewNV decoration must: be used only within the
+    code:MeshNV, code:Vertex, code:TessellationControl,
+    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-PositionPerViewNV-04323]]
+    The variable decorated with code:PositionPerViewNV within the
+    code:Vertex, or code:MeshNV {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-PositionPerViewNV-04324]]
+    The variable decorated with code:PositionPerViewNV within the
+    code:TessellationControl, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: not be declared using a {StorageClass} other than
+    code:Input or code:Output
+  * [[VUID-{refpage}-PositionPerViewNV-04325]]
+    The variable decorated with code:PositionPerViewNV must: be declared as
+    an array of four-component vector of 32-bit floating-point values with
+    at least as many elements as the maximum view in the subpass's view mask
+    plus one
+  * [[VUID-{refpage}-PositionPerViewNV-04326]]
+    The array variable decorated with code:PositionPerViewNV must: only be
+    indexed by a constant or specialization constant
+****
+--
+endif::VK_NVX_multiview_per_view_attributes[]
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-primitivecount]]
+[open,refpage='PrimitiveCountNV',desc='Number of primitives output by a mesh shader',type='builtins']
+--
+:refpage: PrimitiveCountNV
+
+code:PrimitiveCountNV::
++
+Decorating a variable with the code:PrimitiveCountNV decoration will make
+that variable contain the primitive count.
+The primitive count specifies the number of primitives in the output mesh
+produced by the mesh shader that will be processed by subsequent pipeline
+stages.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveCountNV-04327]]
+    The code:PrimitiveCountNV decoration must: be used only within the
+    code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-PrimitiveCountNV-04328]]
+    The variable decorated with code:PrimitiveCountNV must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitiveCountNV-04329]]
+    The variable decorated with code:PrimitiveCountNV must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_NV_mesh_shader[]
+
+[[interfaces-builtin-variables-primitiveid]]
+[open,refpage='PrimitiveId',desc='Primitive ID',type='builtins']
+--
+:refpage: PrimitiveId
+
+code:PrimitiveId::
+
+Decorating a variable with the code:PrimitiveId built-in decoration will
+make that variable contain the index of the current primitive.
++
+The index of the first primitive generated by a drawing command is zero, and
+the index is incremented after every individual point, line, or triangle
+primitive is processed.
++
+For triangles drawn as points or line segments (see <<primsrast-polygonmode,
+Polygon Mode>>), the primitive index is incremented only once, even if
+multiple points or lines are eventually drawn.
++
+Variables decorated with code:PrimitiveId are reset to zero between each
+instance drawn.
++
+Restarting a primitive topology using primitive restart has no effect on the
+value of variables decorated with code:PrimitiveId.
++
+In tessellation control and tessellation evaluation shaders, it will contain
+the index of the patch within the current set of rendering primitives that
+corresponds to the shader invocation.
++
+In a geometry shader, it will contain the number of primitives presented as
+input to the shader since the current set of rendering primitives was
+started.
++
+In a fragment shader, it will contain the primitive index written by the
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+mesh shader if a mesh shader is present, or the primitive index written by
+the
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+geometry shader if a geometry shader is present, or with the value that
+would have been presented as input to the geometry shader had it been
+present.
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
++
+In an intersection, any-hit, or closest hit shader, it will contain the
+index within the geometry of the triangle or bounding box being processed.
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[NOTE]
+.Note
+====
+When the code:PrimitiveId decoration is applied to an output variable in the
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh shader or]
+geometry shader, the resulting value is seen through the code:PrimitiveId
+decorated input variable in the fragment shader.
+
+The fragment shader using code:PrimitiveId will need to declare either the
+ifdef::VK_NV_mesh_shader[code:MeshShadingNV,]
+ifdef::VK_EXT_mesh_shader[code:MeshShadingEXT,]
+code:Geometry or code:Tessellation capability to satisfy the requirement
+SPIR-V has to use code:PrimitiveId.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveId-04330]]
+    The code:PrimitiveId decoration must: be used only within the
+    code:MeshEXT, code:MeshNV, code:IntersectionKHR, code:AnyHitKHR,
+    code:ClosestHitKHR, code:TessellationControl,
+    code:TessellationEvaluation, code:Geometry, or code:Fragment
+    {ExecutionModel}
+  * [[VUID-{refpage}-Fragment-04331]]
+    If pipeline contains both the code:Fragment and code:Geometry
+    {ExecutionModel} and a variable decorated with code:PrimitiveId is read
+    from code:Fragment shader, then the code:Geometry shader must: write to
+    the output variables decorated with code:PrimitiveId in all execution
+    paths
+  * [[VUID-{refpage}-Fragment-04332]]
+    If pipeline contains both the code:Fragment and code:MeshEXT or
+    code:MeshNV {ExecutionModel} and a variable decorated with
+    code:PrimitiveId is read from code:Fragment shader, then the
+    code:MeshEXT or code:MeshNV shader must: write to the output variables
+    decorated with code:PrimitiveId in all execution paths
+  * [[VUID-{refpage}-Fragment-04333]]
+    If code:Fragment {ExecutionModel} contains a variable decorated with
+    code:PrimitiveId, then either the code:MeshShadingEXT,
+    code:MeshShadingNV, code:Geometry or code:Tessellation capability must:
+    also be declared
+  * [[VUID-{refpage}-PrimitiveId-04334]]
+    The variable decorated with code:PrimitiveId within the
+    code:TessellationControl, code:TessellationEvaluation, code:Fragment,
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel} must: be declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-PrimitiveId-04335]]
+    The variable decorated with code:PrimitiveId within the code:Geometry
+    {ExecutionModel} must: be declared using the code:Input or code:Output
+    {StorageClass}
+  * [[VUID-{refpage}-PrimitiveId-04336]]
+    The variable decorated with code:PrimitiveId within the code:MeshEXT or
+    code:MeshNV {ExecutionModel} must: be declared using the code:Output
+    {StorageClass}
+  * [[VUID-{refpage}-PrimitiveId-04337]]
+    The variable decorated with code:PrimitiveId must: be declared as a
+    scalar 32-bit integer value
+  * [[VUID-{refpage}-PrimitiveId-07040]]
+    The variable decorated with code:PrimitiveId within the code:MeshEXT
+    {ExecutionModel} must: also be decorated with the code:PerPrimitiveEXT
+    decoration
+****
+--
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-primitiveindices]]
+[open,refpage='PrimitiveIndicesNV',desc='Indices of primitives in a mesh shader',type='builtins']
+--
+:refpage: PrimitiveIndicesNV
+
+code:PrimitiveIndicesNV::
++
+Decorating a variable with the code:PrimitiveIndicesNV decoration will make
+that variable contain the output array of vertex index values.
+Depending on the output primitive type declared using the execution mode,
+the indices are split into groups of one (code:OutputPoints), two
+(code:OutputLinesNV), or three (code:OutputTriangles) indices and each group
+generates a primitive.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveIndicesNV-04338]]
+    The code:PrimitiveIndicesNV decoration must: be used only within the
+    code:MeshNV {ExecutionModel}
+  * [[VUID-{refpage}-PrimitiveIndicesNV-04339]]
+    The variable decorated with code:PrimitiveIndicesNV must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitiveIndicesNV-04340]]
+    The variable decorated with code:PrimitiveIndicesNV must: be declared as
+    an array of scalar 32-bit integer values
+  * [[VUID-{refpage}-PrimitiveIndicesNV-04341]]
+    All index values of the array decorated with code:PrimitiveIndicesNV
+    must: be in the range [eq]#[0, N-1]#, where [eq]#N# is the value
+    specified by the code:OutputVertices {ExecutionMode}
+  * [[VUID-{refpage}-OutputPoints-04342]]
+    If the {ExecutionMode} is code:OutputPoints, then the array decorated
+    with code:PrimitiveIndicesNV must be the size of the value specified by
+    code:OutputPrimitivesNV
+  * [[VUID-{refpage}-OutputLinesNV-04343]]
+    If the {ExecutionMode} is code:OutputLinesNV, then the array decorated
+    with code:PrimitiveIndicesNV must be the size of two times the value
+    specified by code:OutputPrimitivesNV
+  * [[VUID-{refpage}-OutputTrianglesNV-04344]]
+    If the {ExecutionMode} is code:OutputTrianglesNV, then the array
+    decorated with code:PrimitiveIndicesNV must be the size of three times
+    the value specified by code:OutputPrimitivesNV
+****
+--
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+[[interfaces-builtin-variables-primitivepointindices]]
+[open,refpage='PrimitivePointIndicesEXT',desc='Indices of point primitives in a mesh shader',type='builtins']
+--
+:refpage: PrimitivePointIndicesEXT
+
+code:PrimitivePointIndicesEXT::
++
+Decorating a variable with the code:PrimitivePointIndicesEXT decoration will
+make that variable contain the output array of vertex index values for point
+primitives.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07041]]
+    The code:PrimitivePointIndicesEXT decoration must: be used only within
+    the code:MeshEXT {ExecutionModel}
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07042]]
+    The code:PrimitivePointIndicesEXT decoration must: be used with the
+    code:OutputPoints {ExecutionMode}
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07043]]
+    The variable decorated with code:PrimitivePointIndicesEXT must: be
+    declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07044]]
+    The variable decorated with code:PrimitivePointIndicesEXT must: be
+    declared as an array of scalar 32-bit integer values
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07045]]
+    All index values of the array decorated with
+    code:PrimitivePointIndicesEXT must: be in the range [eq]#[0, N-1]#,
+    where [eq]#N# is the value specified by the code:OutputVertices
+    {ExecutionMode}
+  * [[VUID-{refpage}-PrimitivePointIndicesEXT-07046]]
+    The size of the array decorated with code:PrimitivePointIndicesEXT must:
+    match the value specified by code:OutputPrimitivesEXT
+****
+--
+
+[[interfaces-builtin-variables-primitivelineindices]]
+[open,refpage='PrimitiveLineIndicesEXT',desc='Indices of line primitives in a mesh shader',type='builtins']
+--
+:refpage: PrimitiveLineIndicesEXT
+
+code:PrimitiveLineIndicesEXT::
++
+Decorating a variable with the code:PrimitiveLineIndicesEXT decoration will
+make that variable contain the output array of vertex index values for line
+primitives.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07047]]
+    The code:PrimitiveLineIndicesEXT decoration must: be used only within
+    the code:MeshEXT {ExecutionModel}
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07048]]
+    The code:PrimitiveLineIndicesEXT decoration must: be used with the
+    code:OutputLinesEXT {ExecutionMode}
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07049]]
+    The variable decorated with code:PrimitiveLineIndicesEXT must: be
+    declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07050]]
+    The variable decorated with code:PrimitiveLineIndicesEXT must: be
+    declared as an array of two component vector 32-bit integer values
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07051]]
+    All index values of the array decorated with
+    code:PrimitiveLineIndicesEXT must: be in the range [eq]#[0, N-1]#, where
+    [eq]#N# is the value specified by the code:OutputVertices
+    {ExecutionMode}
+  * [[VUID-{refpage}-PrimitiveLineIndicesEXT-07052]]
+    The size of the array decorated with code:PrimitiveLineIndicesEXT must:
+    match the value specified by code:OutputPrimitivesEXT
+****
+--
+
+[[interfaces-builtin-variables-primitivetriangleindices]]
+[open,refpage='PrimitiveTriangleIndicesEXT',desc='Indices of triangle primitives in a mesh shader',type='builtins']
+--
+:refpage: PrimitiveTriangleIndicesEXT
+
+code:PrimitiveTriangleIndicesEXT::
++
+Decorating a variable with the code:PrimitiveTriangleIndicesEXT decoration
+will make that variable contain the output array of vertex index values for
+triangle primitives.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07053]]
+    The code:PrimitiveTriangleIndicesEXT decoration must: be used only
+    within the code:MeshEXT {ExecutionModel}
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07054]]
+    The code:PrimitiveTriangleIndicesEXT decoration must: be used with the
+    code:OutputTrianglesEXT {ExecutionMode}
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07055]]
+    The variable decorated with code:PrimitiveTriangleIndicesEXT must: be
+    declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07056]]
+    The variable decorated with code:PrimitiveTriangleIndicesEXT must: be
+    declared as an array of three component vector 32-bit integer values
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07057]]
+    All index values of the array decorated with
+    code:PrimitiveTriangleIndicesEXT must: be in the range [eq]#[0, N-1]#,
+    where [eq]#N# is the value specified by the code:OutputVertices
+    {ExecutionMode}
+  * [[VUID-{refpage}-PrimitiveTriangleIndicesEXT-07058]]
+    The size of the array decorated with code:PrimitiveTriangleIndicesEXT
+    must: match the value specified by code:OutputPrimitivesEXT
+****
+--
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[[interfaces-builtin-variables-primitiveshadingrate]]
+[open,refpage='PrimitiveShadingRateKHR',desc='Primitive contribution to fragment shading rate',type='builtins']
+--
+:refpage: PrimitiveShadingRateKHR
+
+code:PrimitiveShadingRateKHR::
+
+Decorating a variable with the code:PrimitiveShadingRateKHR built-in
+decoration will make that variable contain the
+<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
+rate>>.
++
+The value written to the variable decorated with
+code:PrimitiveShadingRateKHR by the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> in the pipeline is used as the
+<<primsrast-fragment-shading-rate-primitive, primitive fragment shading
+rate>>.
+Outputs in previous shader stages are ignored.
++
+If the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface does not include a variable decorated
+with code:PrimitiveShadingRateKHR, then it is as if the shader specified a
+fragment shading rate value of 0, indicating a horizontal and vertical rate
+of 1 pixel.
++
+If a shader has code:PrimitiveShadingRateKHR in the output interface and
+there is an execution path through the shader that does not write to it, its
+value is undefined: for executions of the shader that take that path.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04484]]
+    The code:PrimitiveShadingRateKHR decoration must: be used only within
+    the code:MeshEXT, code:MeshNV, code:Vertex, or code:Geometry
+    {ExecutionModel}
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04485]]
+    The variable decorated with code:PrimitiveShadingRateKHR must: be
+    declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04486]]
+    The variable decorated with code:PrimitiveShadingRateKHR must: be
+    declared as a scalar 32-bit integer value
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04487]]
+    The value written to code:PrimitiveShadingRateKHR must: include no more
+    than one of code:Vertical2Pixels and code:Vertical4Pixels
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04488]]
+    The value written to code:PrimitiveShadingRateKHR must: include no more
+    than one of code:Horizontal2Pixels and code:Horizontal4Pixels
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-04489]]
+    The value written to code:PrimitiveShadingRateKHR must: not have any
+    bits set other than those defined by *Fragment Shading Rate Flags*
+    enumerants in the SPIR-V specification
+  * [[VUID-{refpage}-PrimitiveShadingRateKHR-07059]]
+    The variable decorated with code:PrimitiveShadingRateKHR within the
+    code:MeshEXT {ExecutionModel} must: also be decorated with the
+    code:PerPrimitiveEXT decoration
+****
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-raygeometryindex]]
+[open,refpage='RayGeometryIndexKHR',desc='Geometry index in a ray shader',type='builtins']
+--
+:refpage: RayGeometryIndexKHR
+
+code:RayGeometryIndexKHR::
+
+A variable decorated with the code:RayGeometryIndexKHR decoration will
+contain the <<acceleration-structure-geometry-index, geometry index>> for
+the acceleration structure geometry currently being shaded.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-RayGeometryIndexKHR-04345]]
+    The code:RayGeometryIndexKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-RayGeometryIndexKHR-04346]]
+    The variable decorated with code:RayGeometryIndexKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-RayGeometryIndexKHR-04347]]
+    The variable decorated with code:RayGeometryIndexKHR must: be declared
+    as a scalar 32-bit integer value
+****
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-raytmax]]
+[open,refpage='RayTmaxKHR',desc='Maximum T value of a ray',type='builtins']
+--
+:refpage: RayTmaxKHR
+
+code:RayTmaxKHR::
+
+A variable decorated with the code:RayTmaxKHR decoration will contain the
+parametric [eq]#t~max~# value of the ray being processed.
+The value is independent of the space in which the ray origin and direction
+exist.
+The value is initialized to the parameter passed into code:OpTraceRayKHR.
++
+The [eq]#t~max~# value changes throughout the lifetime of the ray that
+produced the intersection.
+In the closest hit shader, the value reflects the closest distance to the
+intersected primitive.
+In the any-hit shader, it reflects the distance to the primitive currently
+being intersected.
+In the intersection shader, it reflects the distance to the closest
+primitive intersected so far or the initial value.
+The value can change in the intersection shader after calling
+code:OpReportIntersectionKHR if the corresponding any-hit shader does not
+ignore the intersection.
+In a miss shader, the value is identical to the parameter passed into
+code:OpTraceRayKHR.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-RayTmaxKHR-04348]]
+    The code:RayTmaxKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-RayTmaxKHR-04349]]
+    The variable decorated with code:RayTmaxKHR must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-RayTmaxKHR-04350]]
+    The variable decorated with code:RayTmaxKHR must: be declared as a
+    scalar 32-bit floating-point value
+****
+--
+
+[[interfaces-builtin-variables-raytmin]]
+[open,refpage='RayTminKHR',desc='Minimum T value of a ray',type='builtins']
+--
+:refpage: RayTminKHR
+
+code:RayTminKHR::
+
+A variable decorated with the code:RayTminKHR decoration will contain the
+parametric [eq]#t~min~# value of the ray being processed.
+The value is independent of the space in which the ray origin and direction
+exist.
+The value is the parameter passed into code:OpTraceRayKHR.
++
+The [eq]#t~min~# value remains constant for the duration of the ray query.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-RayTminKHR-04351]]
+    The code:RayTminKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-RayTminKHR-04352]]
+    The variable decorated with code:RayTminKHR must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-RayTminKHR-04353]]
+    The variable decorated with code:RayTminKHR must: be declared as a
+    scalar 32-bit floating-point value
+****
+--
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[[interfaces-builtin-variables-sampleid]]
+[open,refpage='SampleId',desc='Sample ID within a fragment',type='builtins']
+--
+:refpage: SampleId
+
+code:SampleId::
+
+Decorating a variable with the code:SampleId built-in decoration will make
+that variable contain the <<primsrast-multisampling-coverage-mask, coverage
+index>> for the current fragment shader invocation.
+code:SampleId ranges from zero to the number of samples in the framebuffer
+minus one.
+If a fragment shader entry point's interface includes an input variable
+decorated with code:SampleId, <<primsrast-sampleshading,Sample Shading>> is
+considered enabled with a pname:minSampleShading value of 1.0.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SampleId-04354]]
+    The code:SampleId decoration must: be used only within the code:Fragment
+    {ExecutionModel}
+  * [[VUID-{refpage}-SampleId-04355]]
+    The variable decorated with code:SampleId must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-SampleId-04356]]
+    The variable decorated with code:SampleId must: be declared as a scalar
+    32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-samplemask]]
+[open,refpage='SampleMask',desc='Coverage mask for a fragment shader invocation',type='builtins']
+--
+:refpage: SampleMask
+
+code:SampleMask::
+
+Decorating a variable with the code:SampleMask built-in decoration will make
+any variable contain the <<fragops-shader-samplemask, sample mask>> for the
+current fragment shader invocation.
++
+A variable in the code:Input storage class decorated with code:SampleMask
+will contain a bitmask of the set of samples covered by the primitive
+generating the fragment during rasterization.
+It has a sample bit set if and only if the sample is considered covered for
+this fragment shader invocation.
+code:SampleMask[] is an array of integers.
+Bits are mapped to samples in a manner where bit B of mask M
+(`SampleMask[M]`) corresponds to sample [eq]#32 {times} M {plus} B#.
++
+A variable in the code:Output storage class decorated with code:SampleMask
+is an array of integers forming a bit array in a manner similar to an input
+variable decorated with code:SampleMask, but where each bit represents
+coverage as computed by the shader.
+This computed code:SampleMask is combined with the generated coverage mask
+in the <<fragops-covg, multisample coverage>> operation.
++
+Variables decorated with code:SampleMask must: be either an unsized array,
+or explicitly sized to be no larger than the implementation-dependent
+maximum sample-mask (as an array of 32-bit elements), determined by the
+maximum number of samples.
++
+If a fragment shader entry point's interface includes an output variable
+decorated with code:SampleMask, the sample mask will be undefined: for any
+array elements of any fragment shader invocations that fail to assign a
+value.
+If a fragment shader entry point's interface does not include an output
+variable decorated with code:SampleMask, the sample mask has no effect on
+the processing of a fragment.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SampleMask-04357]]
+    The code:SampleMask decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-SampleMask-04358]]
+    The variable decorated with code:SampleMask must: be declared using the
+    code:Input or code:Output {StorageClass}
+  * [[VUID-{refpage}-SampleMask-04359]]
+    The variable decorated with code:SampleMask must: be declared as an
+    array of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sampleposition]]
+[open,refpage='SamplePosition',desc='Position of a shaded sample',type='builtins']
+--
+:refpage: SamplePosition
+
+code:SamplePosition::
+
+Decorating a variable with the code:SamplePosition built-in decoration will
+make that variable contain the sub-pixel position of the sample being
+shaded.
+The top left of the pixel is considered to be at coordinate [eq]#(0,0)# and
+the bottom right of the pixel is considered to be at coordinate [eq]#(1,1)#.
+ifdef::VK_EXT_fragment_density_map[]
+// Markup here is weird. To get all these paragraphs indented properly for
+// the keyword, the '+' connector must be *inside* ifdefs w/o blank lines.
++
+If the render pass has a fragment density map attachment, the variable will
+instead contain the sub-fragment position of the sample being shaded.
+The top left of the fragment is considered to be at coordinate [eq]#(0,0)#
+and the bottom right of the fragment is considered to be at coordinate
+[eq]#(1,1)# for any fragment area.
+endif::VK_EXT_fragment_density_map[]
++
+If a fragment shader entry point's interface includes an input variable
+decorated with code:SamplePosition, <<primsrast-sampleshading,Sample
+Shading>> is considered enabled with a pname:minSampleShading value of 1.0.
+ifdef::VK_EXT_sample_locations[]
++
+If the current pipeline uses <<primsrast-samplelocations, custom sample
+locations>> the value of any variable decorated with the code:SamplePosition
+built-in decoration is undefined:.
+endif::VK_EXT_sample_locations[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SamplePosition-04360]]
+    The code:SamplePosition decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-SamplePosition-04361]]
+    The variable decorated with code:SamplePosition must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SamplePosition-04362]]
+    The variable decorated with code:SamplePosition must: be declared as a
+    two-component vector of 32-bit floating-point values
+****
+--
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[[interfaces-builtin-variables-shadingratekhr]]
+[open,refpage='ShadingRateKHR',desc='Shading rate of a fragment',type='builtins']
+--
+:refpage: ShadingRateKHR
+
+code:ShadingRateKHR::
+
+Decorating a variable with the code:ShadingRateKHR built-in decoration will
+make that variable contain the <<primsrast-fragment-shading-rate, fragment
+shading rate>> for the current fragment invocation.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ShadingRateKHR-04490]]
+    The code:ShadingRateKHR decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-ShadingRateKHR-04491]]
+    The variable decorated with code:ShadingRateKHR must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-ShadingRateKHR-04492]]
+    The variable decorated with code:ShadingRateKHR must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_NV_shader_sm_builtins[]
+[[interfaces-builtin-variables-smcountnv]]
+[open,refpage='SMCountNV',desc='Number of SMs on the device',type='builtins']
+--
+:refpage: SMCountNV
+
+code:SMCountNV::
+
+Decorating a variable with the code:SMCountNV built-in decoration will make
+that variable contain the number of SMs on the device.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SMCountNV-04363]]
+    The variable decorated with code:SMCountNV must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-SMCountNV-04364]]
+    The variable decorated with code:SMCountNV must: be declared as a scalar
+    32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-smidnv]]
+[open,refpage='SMIDNV',desc='SM ID on which a shader invocation is running',type='builtins']
+--
+:refpage: SMIDNV
+
+code:SMIDNV::
+
+Decorating a variable with the code:SMIDNV built-in decoration will make
+that variable contain the ID of the SM on which the current shader
+invocation is running.
+This variable is in the range [eq]#[0, code:SMCountNV-1]#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SMIDNV-04365]]
+    The variable decorated with code:SMIDNV must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-SMIDNV-04366]]
+    The variable decorated with code:SMIDNV must: be declared as a scalar
+    32-bit integer value
+****
+--
+endif::VK_NV_shader_sm_builtins[]
+
+ifdef::VK_VERSION_1_1[]
+[[interfaces-builtin-variables-subgroupid]]
+[open,refpage='SubgroupId',desc='Subgroup ID ',type='builtins']
+--
+:refpage: SubgroupId
+
+code:SubgroupId::
++
+Decorating a variable with the code:SubgroupId built-in decoration will make
+that variable contain the index of the subgroup within the local workgroup.
+This variable is in range [0, code:NumSubgroups-1].
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupId-04367]]
+    The code:SubgroupId decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-SubgroupId-04368]]
+    The variable decorated with code:SubgroupId must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupId-04369]]
+    The variable decorated with code:SubgroupId must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
+[[interfaces-builtin-variables-sgeq]]
+[open,refpage='SubgroupEqMask',desc='Mask of shader invocations in a subgroup with the same subgroup local invocation ID',type='builtins']
+--
+:refpage: SubgroupEqMask
+
+code:SubgroupEqMask::
++
+Decorating a variable with the code:SubgroupEqMask builtin decoration will
+make that variable contain the _subgroup mask_ of the current subgroup
+invocation.
+The bit corresponding to the code:SubgroupLocalInvocationId is set in the
+variable decorated with code:SubgroupEqMask.
+All other bits are set to zero.
++
+code:SubgroupEqMaskKHR is an alias of code:SubgroupEqMask.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupEqMask-04370]]
+    The variable decorated with code:SubgroupEqMask must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupEqMask-04371]]
+    The variable decorated with code:SubgroupEqMask must: be declared as a
+    four-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sgge]]
+[open,refpage='SubgroupGeMask',desc='Mask of shader invocations in a subgroup with the same or higher subgroup local invocation ID',type='builtins']
+--
+:refpage: SubgroupGeMask
+
+code:SubgroupGeMask::
++
+Decorating a variable with the code:SubgroupGeMask builtin decoration will
+make that variable contain the _subgroup mask_ of the current subgroup
+invocation.
+The bits corresponding to the invocations greater than or equal to
+code:SubgroupLocalInvocationId through code:SubgroupSize-1 are set in the
+variable decorated with code:SubgroupGeMask.
+All other bits are set to zero.
++
+code:SubgroupGeMaskKHR is an alias of code:SubgroupGeMask.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupGeMask-04372]]
+    The variable decorated with code:SubgroupGeMask must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupGeMask-04373]]
+    The variable decorated with code:SubgroupGeMask must: be declared as a
+    four-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sggt]]
+[open,refpage='SubgroupGtMask',desc='Mask of shader invocations in a subgroup with a higher subgroup local invocation ID',type='builtins']
+--
+:refpage: SubgroupGtMask
+
+code:SubgroupGtMask::
++
+Decorating a variable with the code:SubgroupGtMask builtin decoration will
+make that variable contain the _subgroup mask_ of the current subgroup
+invocation.
+The bits corresponding to the invocations greater than
+code:SubgroupLocalInvocationId through code:SubgroupSize-1 are set in the
+variable decorated with code:SubgroupGtMask.
+All other bits are set to zero.
++
+code:SubgroupGtMaskKHR is an alias of code:SubgroupGtMask.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupGtMask-04374]]
+    The variable decorated with code:SubgroupGtMask must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupGtMask-04375]]
+    The variable decorated with code:SubgroupGtMask must: be declared as a
+    four-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sgle]]
+[open,refpage='SubgroupLeMask',desc='Mask of shader invocations in a subgroup with the same or lower subgroup local invocation ID',type='builtins']
+--
+:refpage: SubgroupLeMask
+
+code:SubgroupLeMask::
++
+Decorating a variable with the code:SubgroupLeMask builtin decoration will
+make that variable contain the _subgroup mask_ of the current subgroup
+invocation.
+The bits corresponding to the invocations less than or equal to
+code:SubgroupLocalInvocationId are set in the variable decorated with
+code:SubgroupLeMask.
+All other bits are set to zero.
++
+code:SubgroupLeMaskKHR is an alias of code:SubgroupLeMask.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupLeMask-04376]]
+    The variable decorated with code:SubgroupLeMask must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupLeMask-04377]]
+    The variable decorated with code:SubgroupLeMask must: be declared as a
+    four-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sglt]]
+[open,refpage='SubgroupLtMask',desc='Mask of shader invocations in a subgroup with a lower subgroup local invocation ID',type='builtins']
+--
+:refpage: SubgroupLtMask
+
+code:SubgroupLtMask::
++
+Decorating a variable with the code:SubgroupLtMask builtin decoration will
+make that variable contain the _subgroup mask_ of the current subgroup
+invocation.
+The bits corresponding to the invocations less than
+code:SubgroupLocalInvocationId are set in the variable decorated with
+code:SubgroupLtMask.
+All other bits are set to zero.
++
+code:SubgroupLtMaskKHR is an alias of code:SubgroupLtMask.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupLtMask-04378]]
+    The variable decorated with code:SubgroupLtMask must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupLtMask-04379]]
+    The variable decorated with code:SubgroupLtMask must: be declared as a
+    four-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-sgli]]
+[open,refpage='SubgroupLocalInvocationId',desc='ID of the invocation within a subgroup',type='builtins']
+--
+:refpage: SubgroupLocalInvocationId
+
+code:SubgroupLocalInvocationId::
++
+Decorating a variable with the code:SubgroupLocalInvocationId builtin
+decoration will make that variable contain the index of the invocation
+within the subgroup.
+This variable is in range [0,code:SubgroupSize-1].
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
++
+If ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT is
+specified,
+ifdef::VK_VERSION_1_3[]
+or if pname:module declares SPIR-V version 1.6 or higher, and the local
+workgroup size in the X dimension of the pname:stage is a multiple of
+<<interfaces-builtin-variables-sgs,code:SubgroupSize>>,
+endif::VK_VERSION_1_3[]
+full subgroups are enabled for that pipeline stage.
+When full subgroups are enabled, subgroups must: be launched with all
+invocations active, i.e., there is an active invocation with
+code:SubgroupLocalInvocationId for each value in range
+[0,code:SubgroupSize-1].
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+
+[NOTE]
+.Note
+====
+There is no direct relationship between code:SubgroupLocalInvocationId and
+code:LocalInvocationId or code:LocalInvocationIndex.
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+If the pipeline
+ifdef::VK_EXT_shader_object[]
+or shader object
+endif::VK_EXT_shader_object[]
+was created with full subgroups applications can compute their own local
+invocation index to serve the same purpose:
+
+[eq]#index = code:SubgroupLocalInvocationId + code:SubgroupId {times}
+code:SubgroupSize#
+
+If full subgroups are not enabled, some subgroups may be dispatched with
+inactive invocations that do not correspond to a local workgroup invocation,
+making the value of [eq]#index# unreliable.
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+====
+
+ifdef::VK_VERSION_1_3[]
+[NOTE]
+.Note
+====
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT
+ifndef::VK_EXT_shader_object[]
+is
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_shader_object[]
+and ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT are
+endif::VK_EXT_shader_object[]
+effectively deprecated when compiling SPIR-V 1.6 shaders, as this behavior
+is the default for Vulkan with SPIR-V 1.6.
+This is more aligned with developer expectations, and avoids applications
+unexpectedly breaking in the future.
+====
+endif::VK_VERSION_1_3[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupLocalInvocationId-04380]]
+    The variable decorated with code:SubgroupLocalInvocationId must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupLocalInvocationId-04381]]
+    The variable decorated with code:SubgroupLocalInvocationId must: be
+    declared as a scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-sgs]]
+[open,refpage='SubgroupSize',desc='Size of a subgroup',type='builtins']
+--
+:refpage: SubgroupSize
+
+code:SubgroupSize::
++
+Decorating a variable with the code:SubgroupSize builtin decoration will
+make that variable contain the implementation-dependent
+<<limits-subgroup-size, number of invocations in a subgroup>>.
+This value must: be a power-of-two integer.
++
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+If the pipeline was created with the
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flag
+set,
+ifdef::VK_EXT_shader_object[]
+or the shader object was created with the
+ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT flag set,
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+or the SPIR-V pname:module is at least version 1.6,
+endif::VK_VERSION_1_3[]
+the code:SubgroupSize decorated variable will contain the subgroup size for
+each subgroup that gets dispatched.
+This value must: be between <<limits-minSubgroupSize,
+pname:minSubgroupSize>> and <<limits-maxSubgroupSize,
+pname:maxSubgroupSize>> and must: be uniform with <<shaders-scope-subgroup,
+subgroup scope>>.
+The value may: vary across a single draw call, and for fragment shaders may:
+vary across a single primitive.
+In compute dispatches, code:SubgroupSize must: be uniform with
+<<shaders-scope-command, command scope>>.
++
+If the pipeline was created with a chained
+slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure,
+ifdef::VK_EXT_shader_object[]
+or the shader object was created with a chained
+slink:VkShaderRequiredSubgroupSizeCreateInfoEXT structure,
+endif::VK_EXT_shader_object[]
+the code:SubgroupSize decorated variable will match
+<<pipelines-required-subgroup-size, pname:requiredSubgroupSize>>.
++
+If
+ifdef::VK_VERSION_1_3[]
+SPIR-V pname:module is less than version 1.6 and
+endif::VK_VERSION_1_3[]
+the pipeline was not created with the
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flag
+set and no slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo
+structure was chained,
+ifdef::VK_EXT_shader_object[]
+and the shader was not created with the
+ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT flag set and no
+slink:VkShaderRequiredSubgroupSizeCreateInfoEXT structure was chained,
+endif::VK_EXT_shader_object[]
+the
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+ifndef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+The
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+variable decorated with code:SubgroupSize will match <<limits-subgroup-size,
+pname:subgroupSize>>.
++
+The maximum number of invocations that an implementation can support per
+subgroup is 128.
+
+ifdef::VK_VERSION_1_3[]
+[NOTE]
+.Note
+====
+The old behavior for code:SubgroupSize is considered deprecated as certain
+compute algorithms cannot be easily implemented without the guarantees of
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT and
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT.
+====
+endif::VK_VERSION_1_3[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-SubgroupSize-04382]]
+    The variable decorated with code:SubgroupSize must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-SubgroupSize-04383]]
+    The variable decorated with code:SubgroupSize must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_VERSION_1_1,VK_EXT_shader_subgroup_ballot[]
+
+ifdef::VK_NV_mesh_shader[]
+[[interfaces-builtin-variables-taskcount]]
+[open,refpage='TaskCountNV',desc='Number of mesh shader workgroups that will be generated',type='builtins']
+--
+:refpage: TaskCountNV
+
+code:TaskCountNV::
++
+Decorating a variable with the code:TaskCountNV decoration will make that
+variable contain the task count.
+The task count specifies the number of subsequent mesh shader workgroups
+that get generated upon completion of the task shader.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-TaskCountNV-04384]]
+    The code:TaskCountNV decoration must: be used only within the
+    code:TaskNV {ExecutionModel}
+  * [[VUID-{refpage}-TaskCountNV-04385]]
+    The variable decorated with code:TaskCountNV must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-TaskCountNV-04386]]
+    The variable decorated with code:TaskCountNV must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_NV_mesh_shader[]
+
+[[interfaces-builtin-variables-tesscoord]]
+[open,refpage='TessCoord',desc='Barycentric coordinate of a tessellated vertex within a patch',type='builtins']
+--
+:refpage: TessCoord
+
+code:TessCoord::
+
+Decorating a variable with the code:TessCoord built-in decoration will make
+that variable contain the three-dimensional [eq]#(u,v,w)# barycentric
+coordinate of the tessellated vertex within the patch.
+[eq]#u#, [eq]#v#, and [eq]#w# are in the range [eq]#[0,1]# and vary linearly
+across the primitive being subdivided.
+For the tessellation modes of code:Quads or code:IsoLines, the third
+component is always zero.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-TessCoord-04387]]
+    The code:TessCoord decoration must: be used only within the
+    code:TessellationEvaluation {ExecutionModel}
+  * [[VUID-{refpage}-TessCoord-04388]]
+    The variable decorated with code:TessCoord must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-TessCoord-04389]]
+    The variable decorated with code:TessCoord must: be declared as a
+    three-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-tesslevelouter]]
+[open,refpage='TessLevelOuter',desc='Outer tessellation levels',type='builtins']
+--
+:refpage: TessLevelOuter
+
+code:TessLevelOuter::
+
+Decorating a variable with the code:TessLevelOuter built-in decoration will
+make that variable contain the outer tessellation levels for the current
+patch.
++
+In tessellation control shaders, the variable decorated with
+code:TessLevelOuter can: be written to, controlling the tessellation factors
+for the resulting patch.
+These values are used by the tessellator to control primitive tessellation
+and can: be read by tessellation evaluation shaders.
++
+In tessellation evaluation shaders, the variable decorated with
+code:TessLevelOuter can: read the values written by the tessellation control
+shader.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-TessLevelOuter-04390]]
+    The code:TessLevelOuter decoration must: be used only within the
+    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
+  * [[VUID-{refpage}-TessLevelOuter-04391]]
+    The variable decorated with code:TessLevelOuter within the
+    code:TessellationControl {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-TessLevelOuter-04392]]
+    The variable decorated with code:TessLevelOuter within the
+    code:TessellationEvaluation {ExecutionModel} must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-TessLevelOuter-04393]]
+    The variable decorated with code:TessLevelOuter must: be declared as an
+    array of size four, containing 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-tesslevelinner]]
+[open,refpage='TessLevelInner',desc='Inner tessellation levels',type='builtins']
+--
+:refpage: TessLevelInner
+
+code:TessLevelInner::
+
+Decorating a variable with the code:TessLevelInner built-in decoration will
+make that variable contain the inner tessellation levels for the current
+patch.
++
+In tessellation control shaders, the variable decorated with
+code:TessLevelInner can: be written to, controlling the tessellation factors
+for the resulting patch.
+These values are used by the tessellator to control primitive tessellation
+and can: be read by tessellation evaluation shaders.
++
+In tessellation evaluation shaders, the variable decorated with
+code:TessLevelInner can: read the values written by the tessellation control
+shader.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-TessLevelInner-04394]]
+    The code:TessLevelInner decoration must: be used only within the
+    code:TessellationControl or code:TessellationEvaluation {ExecutionModel}
+  * [[VUID-{refpage}-TessLevelInner-04395]]
+    The variable decorated with code:TessLevelInner within the
+    code:TessellationControl {ExecutionModel} must: be declared using the
+    code:Output {StorageClass}
+  * [[VUID-{refpage}-TessLevelInner-04396]]
+    The variable decorated with code:TessLevelInner within the
+    code:TessellationEvaluation {ExecutionModel} must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-TessLevelInner-04397]]
+    The variable decorated with code:TessLevelInner must: be declared as an
+    array of size two, containing 32-bit floating-point values
+****
+--
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-vertexcounthuawei]]
+[open,refpage='VertexCountHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: VertexCountHUAWEI
+
+code:VertexCountHUAWEI::
+
+The code:VertexCountHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this non-indexed mode specific variable will
+contain an integer value that specifies the number of vertices in a cluster
+to draw.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-VertexCountHUAWEI-07809]]
+    The code:VertexCountHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-VertexCountHUAWEI-07810]]
+    The variable decorated with code:VertexCountHUAWEI must: be declared as
+    a scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+[[interfaces-builtin-variables-vertexindex]]
+[open,refpage='VertexIndex',desc='Vertex index of a shader invocation',type='builtins']
+--
+:refpage: VertexIndex
+
+code:VertexIndex::
+
+Decorating a variable with the code:VertexIndex built-in decoration will
+make that variable contain the index of the vertex that is being processed
+by the current vertex shader invocation.
+For non-indexed draws, this variable begins at the pname:firstVertex
+parameter to flink:vkCmdDraw or the pname:firstVertex member of a structure
+consumed by flink:vkCmdDrawIndirect and increments by one for each vertex in
+the draw.
+For indexed draws, its value is the content of the index buffer for the
+vertex plus the pname:vertexOffset parameter to flink:vkCmdDrawIndexed or
+the pname:vertexOffset member of the structure consumed by
+flink:vkCmdDrawIndexedIndirect.
+
+[NOTE]
+.Note
+====
+code:VertexIndex starts at the same starting value for each instance.
+====
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-VertexIndex-04398]]
+    The code:VertexIndex decoration must: be used only within the
+    code:Vertex {ExecutionModel}
+  * [[VUID-{refpage}-VertexIndex-04399]]
+    The variable decorated with code:VertexIndex must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-VertexIndex-04400]]
+    The variable decorated with code:VertexIndex must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[interfaces-builtin-variables-vertexoffsethuawei]]
+[open,refpage='VertexOffsetHUAWEI',desc='cluster culling shader output variable',type='builtins']
+--
+:refpage: VertexOffsetHUAWEI
+
+code:VertexOffsetHUAWEI::
+
+The code:VertexOffsetHUAWEI decoration can be used to decorate a cluster
+culling shader output variable,this indexed mode specific variable will
+contain an integer value that specifies a offset value added to the vertex
+index of a cluster before indexing into the vertex buffer.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-VertexOffsetHUAWEI-07811]]
+    The code:VertexOffsetHUAWEI decoration must: be used only within the
+    code:ClusterCullingHUAWEI {ExecutionModel}
+  * [[VUID-{refpage}-VertexOffsetHUAWEI-07812]]
+    The variable decorated with code:VertexOffsetHUAWEI must: be declared as
+    a scalar 32-bit integer value
+****
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+[[interfaces-builtin-variables-viewindex]]
+[open,refpage='ViewIndex',desc='View index of a shader invocation',type='builtins']
+--
+:refpage: ViewIndex
+
+code:ViewIndex::
+
+The code:ViewIndex decoration can: be applied to a shader input which will
+be filled with the index of the view that is being processed by the current
+shader invocation.
++
+If multiview is enabled in the render pass, this value will be one of the
+bits set in the view mask of the subpass the pipeline is compiled against.
+If multiview is not enabled in the render pass, this value will be zero.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ViewIndex-04401]]
+    The code:ViewIndex decoration must: be used only within the
+    code:MeshEXT, code:Vertex, code:Geometry, code:TessellationControl,
+    code:TessellationEvaluation or code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-ViewIndex-04402]]
+    The variable decorated with code:ViewIndex must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-ViewIndex-04403]]
+    The variable decorated with code:ViewIndex must: be declared as a scalar
+    32-bit integer value
+****
+--
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+[[interfaces-builtin-variables-viewportindex]]
+[open,refpage='ViewportIndex',desc='Viewport index used',type='builtins']
+--
+:refpage: ViewportIndex
+
+code:ViewportIndex::
+
+Decorating a variable with the code:ViewportIndex built-in decoration will
+make that variable contain the index of the viewport.
++
+In a
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[mesh,]
+vertex, tessellation evaluation, or
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+geometry shader, the variable decorated with code:ViewportIndex can be
+written to with the viewport index to which the primitive produced by that
+shader will be directed.
++
+The selected viewport index is used to select the
+ifndef::VK_NV_scissor_exclusive[]
+viewport transform and
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_scissor_exclusive[]
+viewport transform, scissor rectangle, and exclusive
+endif::VK_NV_scissor_exclusive[]
+scissor rectangle.
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
++
+The last active
+_<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>_ (in pipeline order) controls the code:ViewportIndex that is used.
+Outputs in previous shader stages are not used, even if the last stage fails
+to write the code:ViewportIndex.
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
++
+If the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface does not include a variable decorated
+with code:ViewportIndex
+ifdef::VK_QCOM_multiview_per_view_viewports[]
+, and if <<features-multiview-per-view-viewports,
+multiviewPerViewViewports>> is not enabled,
+endif::VK_QCOM_multiview_per_view_viewports[]
+then the first viewport is used.
+If a <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface includes a variable decorated with
+code:ViewportIndex, it must: write the same value to code:ViewportIndex for
+all output vertices of a given primitive.
++
+In a fragment shader, the variable decorated with code:ViewportIndex
+contains the viewport index of the primitive that the fragment invocation
+belongs to.
+ifdef::VK_QCOM_multiview_per_view_viewports[]
++
+If <<features-multiview-per-view-viewports,
+pname:multiviewPerViewViewports>> is enabled, and if the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface does not include a variable decorated
+with code:ViewportIndex, then the value of code:ViewIndex is used as an
+index to select the viewport transform and scissor rectangle, and the value
+of code:ViewportIndex in the fragment shader is undefined::.
+endif::VK_QCOM_multiview_per_view_viewports[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ViewportIndex-04404]]
+    The code:ViewportIndex decoration must: be used only within the
+    code:MeshEXT, code:MeshNV, code:Vertex, code:TessellationEvaluation,
+    code:Geometry, or code:Fragment {ExecutionModel}
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-ViewportIndex-04405]]
+    If the <<features-shaderOutputViewportIndex,
+    pname:shaderOutputViewportIndex>> feature is not enabled then the
+    code:ViewportIndex decoration must: be used only within the
+    code:Geometry or code:Fragment {ExecutionModel}
+endif::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-ViewportIndex-04406]]
+    The variable decorated with code:ViewportIndex within the code:MeshEXT,
+    code:MeshNV, code:Vertex, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel} must: be declared using the code:Output {StorageClass}
+  * [[VUID-{refpage}-ViewportIndex-04407]]
+    The variable decorated with code:ViewportIndex within the code:Fragment
+    {ExecutionModel} must: be declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-ViewportIndex-04408]]
+    The variable decorated with code:ViewportIndex must: be declared as a
+    scalar 32-bit integer value
+  * [[VUID-{refpage}-ViewportIndex-07060]]
+    The variable decorated with code:ViewportIndex within the code:MeshEXT
+    {ExecutionModel} must: also be decorated with the code:PerPrimitiveEXT
+    decoration
+****
+--
+
+ifdef::VK_NV_viewport_array2[]
+[[interfaces-builtin-variables-viewportmask]]
+[open,refpage='ViewportMaskNV',desc='Mask of the viewports used',type='builtins']
+--
+:refpage: ViewportMaskNV
+
+code:ViewportMaskNV::
+
+Decorating a variable with the code:ViewportMaskNV built-in decoration will
+make that variable contain the viewport mask.
++
+In a
+ifdef::VK_NV_mesh_shader[]
+mesh,
+endif::VK_NV_mesh_shader[]
+vertex, tessellation evaluation, or geometry shader, the variable decorated
+with code:ViewportMaskNV can be written to with the mask of which viewports
+the primitive produced by that shader will directed.
++
+The code:ViewportMaskNV variable must: be an array that has
+[eq]#{lceil}(sname:VkPhysicalDeviceLimits::pname:maxViewports / 32){rceil}#
+elements.
+When a shader writes to this variable, bit B of element M controls whether a
+primitive is emitted to viewport [eq]#32 {times} M {plus} B#.
+The viewports indicated by the mask are used to select the
+ifndef::VK_NV_scissor_exclusive[]
+viewport transform and
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_scissor_exclusive[]
+viewport transform, scissor rectangle, and exclusive
+endif::VK_NV_scissor_exclusive[]
+scissor rectangle that a primitive will be transformed by.
++
+The last active
+_<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>_ (in pipeline order) controls the code:ViewportMaskNV that is used.
+Outputs in previous shader stages are not used, even if the last stage fails
+to write the code:ViewportMaskNV.
+When code:ViewportMaskNV is written by the final
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>, any variable decorated with code:ViewportIndex in the fragment
+shader will have the index of the viewport that was used in generating that
+fragment.
++
+If a <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface includes a variable decorated with
+code:ViewportMaskNV, it must: write the same value to code:ViewportMaskNV
+for all output vertices of a given primitive.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ViewportMaskNV-04409]]
+    The code:ViewportMaskNV decoration must: be used only within the
+    code:Vertex, code:MeshNV, code:TessellationEvaluation, or code:Geometry
+    {ExecutionModel}
+  * [[VUID-{refpage}-ViewportMaskNV-04410]]
+    The variable decorated with code:ViewportMaskNV must: be declared using
+    the code:Output {StorageClass}
+  * [[VUID-{refpage}-ViewportMaskNV-04411]]
+    The variable decorated with code:ViewportMaskNV must: be declared as an
+    array of 32-bit integer values
+****
+--
+endif::VK_NV_viewport_array2[]
+
+ifdef::VK_NVX_multiview_per_view_attributes+VK_NV_viewport_array2[]
+[[interfaces-builtin-variables-viewportmaskperview]]
+[open,refpage='ViewportMaskPerViewNV',desc='Mask of viewports broadcast to per view',type='builtins']
+--
+:refpage: ViewportMaskPerViewNV
+
+code:ViewportMaskPerViewNV::
+
+Decorating a variable with the code:ViewportMaskPerViewNV built-in
+decoration will make that variable contain the mask of viewports primitives
+are broadcast to, for each view.
++
+The value written to an element of code:ViewportMaskPerViewNV in the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> is a bitmask indicating which viewports the primitive will be
+directed to.
+The primitive will be broadcast to the viewport corresponding to each
+non-zero bit of the bitmask, and that viewport index is used to select the
+ifndef::VK_NV_scissor_exclusive[]
+viewport transform and
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_scissor_exclusive[]
+viewport transform, scissor rectangle, and exclusive
+endif::VK_NV_scissor_exclusive[]
+scissor rectangle, for each view.
+The same values must: be written to all vertices in a given primitive, or
+else the set of viewports used for that primitive is undefined:.
++
+Elements of the array correspond to views in a multiview subpass, and those
+elements corresponding to views in the view mask of the subpass the shader
+is compiled against will be used as the viewport mask value for those views.
+code:ViewportMaskPerViewNV output in an earlier
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> is not available as an input in the subsequent
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
++
+Although code:ViewportMaskNV is an array, code:ViewportMaskPerViewNV is not
+a two-dimensional array.
+Instead, code:ViewportMaskPerViewNV is limited to 32 viewports.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04412]]
+    The code:ViewportMaskPerViewNV decoration must: be used only within the
+    code:Vertex, code:MeshNV, code:TessellationControl,
+    code:TessellationEvaluation, or code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04413]]
+    The variable decorated with code:ViewportMaskPerViewNV must: be declared
+    using the code:Output {StorageClass}
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04414]]
+    The variable decorated with code:ViewportMaskPerViewNV must: be declared
+    as an array of 32-bit integer values
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04415]]
+    The array decorated with code:ViewportMaskPerViewNV must: be a size less
+    than or equal to 32
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04416]]
+    The array decorated with code:ViewportMaskPerViewNV must: be a size
+    greater than the maximum view in the subpass's view mask
+  * [[VUID-{refpage}-ViewportMaskPerViewNV-04417]]
+    The array variable decorated with code:ViewportMaskPerViewNV must: only
+    be indexed by a constant or specialization constant
+****
+--
+endif::VK_NVX_multiview_per_view_attributes+VK_NV_viewport_array2[]
+
+ifdef::VK_NV_shader_sm_builtins[]
+[[interfaces-builtin-variables-warpspersmnv]]
+[open,refpage='WarpsPerSMNV',desc='Number of warps per SM',type='builtins']
+--
+:refpage: WarpsPerSMNV
+
+code:WarpsPerSMNV::
+
+Decorating a variable with the code:WarpsPerSMNV built-in decoration will
+make that variable contain the maximum number of warps executing on a SM.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WarpsPerSMNV-04418]]
+    The variable decorated with code:WarpsPerSMNV must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-WarpsPerSMNV-04419]]
+    The variable decorated with code:WarpsPerSMNV must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-warpidnv]]
+[open,refpage='WarpIDNV',desc='Warp ID within an SM of a shader invocation',type='builtins']
+--
+:refpage: WarpIDNV
+
+code:WarpIDNV::
+
+Decorating a variable with the code:WarpIDNV built-in decoration will make
+that variable contain the ID of the warp on a SM on which the current shader
+invocation is running.
+This variable is in the range [eq]#[0, code:WarpsPerSMNV-1]#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WarpIDNV-04420]]
+    The variable decorated with code:WarpIDNV must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-WarpIDNV-04421]]
+    The variable decorated with code:WarpIDNV must: be declared as a scalar
+    32-bit integer value
+****
+--
+endif::VK_NV_shader_sm_builtins[]
+
+[[interfaces-builtin-variables-workgroupid]]
+[open,refpage='WorkgroupId',desc='Workgroup ID of a shader',type='builtins']
+--
+:refpage: WorkgroupId
+
+code:WorkgroupId::
+
+Decorating a variable with the code:WorkgroupId built-in decoration will
+make that variable contain the global workgroup that the current invocation
+is a member of.
+Each component ranges from a base value to a [eq]#base {plus} count# value,
+based on the parameters passed into the dispatching commands.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WorkgroupId-04422]]
+    The code:WorkgroupId decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-WorkgroupId-04423]]
+    The variable decorated with code:WorkgroupId must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-WorkgroupId-04424]]
+    The variable decorated with code:WorkgroupId must: be declared as a
+    three-component vector of 32-bit integer values
+****
+--
+
+[[interfaces-builtin-variables-workgroupsize]]
+[open,refpage='WorkgroupSize',desc='Size of a workgroup',type='builtins']
+--
+:refpage: WorkgroupSize
+
+code:WorkgroupSize::
+
+ifdef::VK_VERSION_1_3[]
+[NOTE]
+.Note
+====
+SPIR-V 1.6 deprecated code:WorkgroupSize in favor of using the
+code:LocalSizeId Execution Mode instead.
+Support for code:LocalSizeId was added with `apiext:VK_KHR_maintenance4` and
+promoted to core in Version 1.3.
+====
+endif::VK_VERSION_1_3[]
+
+Decorating an object with the code:WorkgroupSize built-in decoration will
+make that object contain the dimensions of a local workgroup.
+If an object is decorated with the code:WorkgroupSize decoration, this takes
+precedence over any code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+execution mode.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WorkgroupSize-04425]]
+    The code:WorkgroupSize decoration must: be used only within the
+    code:GLCompute, code:MeshEXT, code:TaskEXT, code:MeshNV, or code:TaskNV
+    {ExecutionModel}
+  * [[VUID-{refpage}-WorkgroupSize-04426]]
+    The variable decorated with code:WorkgroupSize must: be a specialization
+    constant or a constant
+  * [[VUID-{refpage}-WorkgroupSize-04427]]
+    The variable decorated with code:WorkgroupSize must: be declared as a
+    three-component vector of 32-bit integer values
+****
+--
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[interfaces-builtin-variables-worldraydirection]]
+[open,refpage='WorldRayDirectionKHR',desc='Ray direction in world space',type='builtins']
+--
+:refpage: WorldRayDirectionKHR
+
+code:WorldRayDirectionKHR::
+
+A variable decorated with the code:WorldRayDirectionKHR decoration will
+specify the direction of the ray being processed, in world space.
+The value is the parameter passed into code:OpTraceRayKHR.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WorldRayDirectionKHR-04428]]
+    The code:WorldRayDirectionKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-WorldRayDirectionKHR-04429]]
+    The variable decorated with code:WorldRayDirectionKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-WorldRayDirectionKHR-04430]]
+    The variable decorated with code:WorldRayDirectionKHR must: be declared
+    as a three-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-worldrayorigin]]
+[open,refpage='WorldRayOriginKHR',desc='Ray origin in world space',type='builtins']
+--
+:refpage: WorldRayOriginKHR
+
+code:WorldRayOriginKHR::
+
+A variable decorated with the code:WorldRayOriginKHR decoration will specify
+the origin of the ray being processed, in world space.
+The value is the parameter passed into code:OpTraceRayKHR.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WorldRayOriginKHR-04431]]
+    The code:WorldRayOriginKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, code:ClosestHitKHR, or
+    code:MissKHR {ExecutionModel}
+  * [[VUID-{refpage}-WorldRayOriginKHR-04432]]
+    The variable decorated with code:WorldRayOriginKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-WorldRayOriginKHR-04433]]
+    The variable decorated with code:WorldRayOriginKHR must: be declared as
+    a three-component vector of 32-bit floating-point values
+****
+--
+
+[[interfaces-builtin-variables-worldtoobject]]
+[open,refpage='WorldToObjectKHR',desc='Transformation matrix from world to object space',type='builtins']
+--
+:refpage: WorldToObjectKHR
+
+code:WorldToObjectKHR::
+
+A variable decorated with the code:WorldToObjectKHR decoration will contain
+the current world-to-object transformation matrix, which is determined by
+the instance of the current intersection.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WorldToObjectKHR-04434]]
+    The code:WorldToObjectKHR decoration must: be used only within the
+    code:IntersectionKHR, code:AnyHitKHR, or code:ClosestHitKHR
+    {ExecutionModel}
+  * [[VUID-{refpage}-WorldToObjectKHR-04435]]
+    The variable decorated with code:WorldToObjectKHR must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-WorldToObjectKHR-04436]]
+    The variable decorated with code:WorldToObjectKHR must: be declared as a
+    matrix with four columns of three-component vectors of 32-bit
+    floating-point values
+****
+--
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_ARM_shader_core_builtins[]
+[[interfaces-builtin-variables-corecountarm]]
+[open,refpage='CoreCountARM',desc='Number of cores on the device',type='builtins']
+--
+:refpage: CoreCountARM
+
+code:CoreCountARM::
+
+Decorating a variable with the code:CoreCountARM built-in decoration will
+make that variable contain the number of cores on the device.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CoreCountARM-07595]]
+    The variable decorated with code:CoreCountARM must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-CoreCountARM-07596]]
+    The variable decorated with code:CoreCountARM must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-coremaxidarm]]
+[open,refpage='CoreMaxIDARM',desc='Max core ID that can be observed on the device running the invovation reading CoreMaxIDARM',type='builtins']
+--
+:refpage: CoreMaxIDARM
+
+code:CoreMaxIDARM::
+
+Decorating a variable with the code:CoreMaxIDARM built-in decoration will
+make that variable contain the max ID of any shader core on the device on
+which the current shader invocation is running.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CoreMaxIDARM-07597]]
+    The variable decorated with code:CoreMaxIDARM must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-CoreMaxIDARM-07598]]
+    The variable decorated with code:CoreMaxIDARM must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-coreidarm]]
+[open,refpage='CoreIDARM',desc='Core ID on which a shader invocation is running',type='builtins']
+--
+:refpage: CoreIDARM
+
+code:CoreIDARM::
+
+Decorating a variable with the code:CoreIDARM built-in decoration will make
+that variable contain the ID of the core on which the current shader
+invocation is running.
+This variable is in the range [eq]#[0, code:CoreMaxIDARM]#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CoreIDARM-07599]]
+    The variable decorated with code:CoreIDARM must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-CoreIDARM-07600]]
+    The variable decorated with code:CoreIDARM must: be declared as a scalar
+    32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-warpmaxidarm]]
+[open,refpage='WarpMaxIDARM',desc='Max ID for a warp on the core running a shader invovation',type='builtins']
+--
+:refpage: WarpMaxIDARM
+
+code:WarpMaxIDARM::
+
+Decorating a variable with the code:WarpMaxIDARM built-in decoration will
+make that variable contain the maximum warp ID for the core on which the
+current invocation is running.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WarpMaxIDARM-07601]]
+    The variable decorated with code:WarpMaxIDARM must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-WarpMaxIDARM-07602]]
+    The variable decorated with code:WarpMaxIDARM must: be declared as a
+    scalar 32-bit integer value
+****
+--
+
+[[interfaces-builtin-variables-warpidarm]]
+[open,refpage='WarpIDARM',desc='Warp ID within a core of a shader invocation',type='builtins']
+--
+:refpage: WarpIDARM
+
+code:WarpIDARM::
+
+Decorating a variable with the code:WarpIDARM built-in decoration will make
+that variable contain the ID of the warp on a core on which the current
+shader invocation is running.
+This variable is in the range [eq]#[0, code:WarpMaxIDARM]#.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-WarpIDARM-07603]]
+    The variable decorated with code:WarpIDARM must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-WarpIDARM-07604]]
+    The variable decorated with code:WarpIDARM must: be declared as a scalar
+    32-bit integer value
+****
+--
+endif::VK_ARM_shader_core_builtins[]
+
+ifdef::VK_AMDX_shader_enqueue[]
+[[interfaces-builtin-variables-coalescedinputcountamd]]
+[open,refpage='CoalescedInputCountAMDX',desc='Number of inputs coalesced for a coalescing node in a work graph',type='builtins']
+--
+:refpage: CoalescedInputCountAMDX
+
+code:CoalescedInputCountAMDX::
+
+Decorating a variable with the code:CoalescedInputCountAMDX built-in
+decoration will make that variable contain the number of node dispatches
+that the implementation coalesced into the input for the current shader.
+This variable will take a value in the range [eq]#[1, arraySize)#, where
+[eq]#arraySize# is the maximum size of the input payload array for the
+shader.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-CoalescedInputCountAMDX-09172]]
+    The variable decorated with code:CoalescedInputCountAMDX must: be
+    declared using the code:Input {StorageClass}
+  * [[VUID-{refpage}-CoalescedInputCountAMDX-09173]]
+    If a variable is decorated with code:CoalescedInputCountAMDX, the
+    code:CoalescingAMDX execution mode must: be declared
+  * [[VUID-{refpage}-CoalescedInputCountAMDX-09174]]
+    The variable decorated with code:CoalescedInputCountAMDX must: be
+    declared as a scalar 32-bit integer value
+****
+--
+
+[open,refpage='ShaderIndexAMDX',desc='Index assigned to the shader within the workgraph',type='builtins']
+--
+:refpage: ShaderIndexAMDX
+
+code:ShaderIndexAMDX::
+
+Decorating a variable with the code:ShaderIndexAMDX built-in decoration will
+make that variable contain the index of the shader specified when it was
+compiled, either via slink:VkPipelineShaderStageNodeCreateInfoAMDX::index or
+by the code:ShaderIndexAMDX execution mode.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ShaderIndexAMDX-09175]]
+    The variable decorated with code:ShaderIndexAMDX must: be declared using
+    the code:Input {StorageClass}
+  * [[VUID-{refpage}-ShaderIndexAMDX-09176]]
+    The variable decorated with code:ShaderIndexAMDX must: be declared as a
+    scalar 32-bit integer value
+****
+--
+endif::VK_AMDX_shader_enqueue[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/introduction.adoc b/codegen/vulkan/vulkan-docs-next/chapters/introduction.adoc
new file mode 100644
index 0000000..0dbc611
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/introduction.adoc
@@ -0,0 +1,263 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[[introduction]]
+= Introduction
+
+This document, referred to as the
+ifdef::VKSC_VERSION_1_0["`Vulkan SC Specification`", ]
+"`Vulkan Specification`" or just the "`Specification`" hereafter, describes
+the Vulkan
+ifdef::VKSC_VERSION_1_0[SC]
+Application Programming Interface (API).
+ifdef::VKSC_VERSION_1_0[]
+"`Base Vulkan Specification`" refers to the Vulkan Specification
+(https://registry.khronos.org/vulkan/) that Vulkan SC is based on.
+"`Vulkan`" and "`Vulkan SC`" refer to the Vulkan SC API and "`Base Vulkan`"
+refers to the Vulkan API that Vulkan SC is based on.
+endif::VKSC_VERSION_1_0[]
+Vulkan is a http://www.open-std.org/jtc1/sc22/wg14/www/standards[C99] API
+designed for explicit control of low-level graphics and compute
+functionality.
+
+ifndef::VKSC_VERSION_1_0[]
+The canonical version of the Specification is available in the official
+https://registry.khronos.org/vulkan/[Vulkan Registry]
+(https://registry.khronos.org/vulkan/).
+The source files used to generate the Vulkan specification are stored in the
+https://github.com/KhronosGroup/Vulkan-Docs[Vulkan Documentation Repository]
+(https://github.com/KhronosGroup/Vulkan-Docs).
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+The canonical version of the Specification is available in the official
+https://registry.khronos.org/vulkansc/[Vulkan SC Registry]
+(https://registry.khronos.org/vulkansc/).
+The source files used to generate the Vulkan SC specification are stored in
+the https://github.com/KhronosGroup/VulkanSC-Docs[Vulkan SC Documentation
+Repository] (https://github.com/KhronosGroup/VulkanSC-Docs).
+endif::VKSC_VERSION_1_0[]
+The source repository additionally has a public issue tracker and allows the
+submission of pull requests that improve the specification.
+
+
+[[introduction-conventions]]
+== Document Conventions
+
+The Vulkan specification is intended for use by both implementors of the API
+and application developers seeking to make use of the API, forming a
+contract between these parties.
+Specification text may address either party; typically the intended audience
+can be inferred from context, though some sections are defined to address
+only one of these parties.
+(For example, <<fundamentals-validusage>> sections only address application
+developers).
+Any requirements, prohibitions, recommendations or options defined by
+<<introduction-normative-terminology, normative terminology>> are imposed
+only on the audience of that text.
+
+[NOTE]
+.Note
+====
+Structure and enumerated types defined in extensions that were promoted to
+core in a later version of Vulkan are now defined in terms of the equivalent
+Vulkan core interfaces.
+This affects the Vulkan Specification, the Vulkan header files, and the
+corresponding XML Registry.
+====
+
+
+[[introduction-informative-language]]
+=== Informative Language
+
+Some language in the specification is purely informative, intended to give
+background or suggestions to implementors or developers.
+
+If an entire chapter or section contains only informative language, its
+title will be suffixed with "`(Informative)`".
+
+All NOTEs are implicitly informative.
+
+
+[[introduction-normative-terminology]]
+=== Normative Terminology
+
+Within this specification, the key words *must*, *required*, *should*,
+*recommended*, *may*, and *optional* are to be interpreted as described in
+https://www.ietf.org/rfc/rfc2119.txt[RFC 2119 - Key words for use in RFCs to
+Indicate Requirement Levels] (https://www.ietf.org/rfc/rfc2119.txt).
+The additional key word *optionally* is an alternate form of *optional*, for
+use where grammatically appropriate.
+
+These key words are highlighted in the specification for clarity.
+In text addressing application developers, their use expresses requirements
+that apply to application behavior.
+In text addressing implementors, their use expresses requirements that apply
+to implementations.
+
+In text addressing application developers, the additional key words *can*
+and *cannot* are to be interpreted as describing the capabilities of an
+application, as follows:
+
+*can*::
+This word means that the application is able to perform the action
+described.
+
+*cannot*::
+This word means that the API and/or the execution environment provide no
+mechanism through which the application can express or accomplish the action
+described.
+
+These key words are never used in text addressing implementors.
+
+[NOTE]
+.Note
+====
+There is an important distinction between *cannot* and *must not*, as used
+in this Specification.
+*Cannot* means something the application literally is unable to express or
+accomplish through the API, while *must not* means something that the
+application is capable of expressing through the API, but that the
+consequences of doing so are undefined: and potentially unrecoverable for
+the implementation (see <<fundamentals-validusage>>).
+====
+
+Unless otherwise noted in the section heading, all sections and appendices
+in this document are normative.
+
+
+[[introduction-technical-terminology]]
+=== Technical Terminology
+
+The Vulkan Specification makes use of common engineering and graphics terms
+such as *Pipeline*, *Shader*, and *Host* to identify and describe Vulkan API
+constructs and their attributes, states, and behaviors.
+The <<glossary,Glossary>> defines the basic meanings of these terms in the
+context of the Specification.
+The Specification text provides fuller definitions of the terms and may
+elaborate, extend, or clarify the <<glossary,Glossary>> definitions.
+When a term defined in the <<glossary,Glossary>> is used in normative
+language within the Specification, the definitions within the Specification
+govern and supersede any meanings the terms may have in other technical
+contexts (i.e. outside the Specification).
+
+
+[[introduction-normative-references]]
+=== Normative References
+
+References to external documents are considered normative references if the
+Specification uses any of the normative terms defined in
+<<introduction-normative-terminology>> to refer to them or their
+requirements, either as a whole or in part.
+
+The following documents are referenced by normative sections of the
+specification:
+
+[[ieee-754]]
+IEEE.
+August, 2008.
+_IEEE Standard for Floating-Point Arithmetic_.
+IEEE Std 754-2008.
+https://dx.doi.org/10.1109/IEEESTD.2008.4610935 .
+
+[[data-format]] Andrew Garrard.
+_Khronos Data Format Specification, version 1.3_.
+https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.html .
+
+[[spirv-extended]] John Kessenich.
+_SPIR-V Extended Instructions for GLSL, Version 1.00_ (February 10, 2016).
+https://registry.khronos.org/spir-v/ .
+
+[[spirv-spec]] John Kessenich, Boaz Ouriel, and Raun Krisch.
+_SPIR-V Specification, Version 1.5, Revision 3, Unified_ (April 24, 2020).
+https://registry.khronos.org/spir-v/ .
+
+[[itu-t-h264]]
+ITU-T.
+_H.264 Advanced Video Coding for Generic Audiovisual Services_ (August,
+2021).
+https://www.itu.int/rec/T-REC-H.264-202108-I/ .
+
+[[itu-t-h265]]
+ITU-T.
+_H.265 High Efficiency Video Coding_ (August, 2021).
+https://www.itu.int/rec/T-REC-H.265-202108-I/ .
+
+[[vulkan-registry]] Jon Leech.
+_The Khronos Vulkan API Registry_ (February 26, 2023).
+https://registry.khronos.org/vulkan/specs/1.3/registry.html .
+
+[[vulkan-styleguide]] Jon Leech and Tobias Hector.
+_Vulkan Documentation and Extensions: Procedures and Conventions_ (February
+26, 2023).
+https://registry.khronos.org/vulkan/specs/1.3/styleguide.html .
+
+[[LoaderInterfaceArchitecture]]
+_Architecture of the Vulkan Loader Interfaces_ (October, 2021).
+https://github.com/KhronosGroup/Vulkan-Loader/blob/master/docs/LoaderInterfaceArchitecture.md
+.
+
+ifdef::VKSC_VERSION_1_0[]
+[[introduction-vulkansc-philosophy]]
+== Safety Critical Philosophy
+
+Vulkan SC {revnumber} is based on Vulkan 1.2 and, except where explicitly
+noted, supports all of the same features, properties, and limits as Vulkan
+1.2.
+
+Throughout the Vulkan SC specification, changes have been made to the Base
+Vulkan Specification in order to align it with safety critical use cases and
+certification.
+In general changes were made to meet the following categories:
+
+  * Deterministic Execution (predictable execution times and results)
+  * Robustness (error handling, removing ambiguity, clarifying undefined:
+    behavior)
+  * Simplification (changes made to reduce certification effort and
+    challenges)
+
+To simplify capturing the reasoning behind deviations made from the Base
+Vulkan Specification, the Vulkan SC specification utilizes change
+identifications to give the reader insight into why the change was made in a
+concise manner.
+The change identifications are captured in
+<<introduction-vulkansc-change-justification-table>>.
+In addition, the Vulkan SC specification contains <<vulkansc-deviations>>
+which is a complete list of changes between Base Vulkan and Vulkan SC.
+This is targeted at readers who are familiar with Base Vulkan and would like
+to understand the differences between Vulkan SC and the Base Vulkan
+specification.
+
+Vulkan SC follows the Base Vulkan philosophy of requiring valid usage from
+the application.
+It is left to each implementation to determine how to ensure safe operation
+with respect to invalid usage.
+This may: involve determining that certain invalid usage does not pose a
+safety risk, adding valid usage checks in the driver, requiring valid usage
+checks in the application, or some combination of these.
+Additionally, validation layers are supported during development.
+
+[[introduction-vulkansc-change-justification-table]]
+=== Change Justification Table
+
+The following is a list of the safety critical change identifications used
+to concisely capture the justification for deviations from the Base Vulkan
+Specification.
+
+.Change Justifications
+[width="100%",options="header",cols="15h,~"]
+|====
+| Change ID     | Description
+| SCID-1[[SCID-1]]      | *Deterministic behavior* - no randomness or unpredictability, always produce the same output from a given starting condition or initial state
+| SCID-2[[SCID-2]]      | *Asynchronous calls* - calls initiated by the application but may not execute or use their parameter data until a later time shall be clearly defined when any parameter data is used, especially data which is passed by reference or pointer
+| SCID-3[[SCID-3]]      | *Notification of change of state* - avoid the use of asynchronous events causing code to execute (i.e. callbacks) as this can cause the worst case execution time of a system to be indeterminate
+| SCID-4[[SCID-4]]      | *Garbage collection methods* - avoid the use of garbage collection as this can cause the worst case execution time of a system to be indeterminate.  Avoid memory fragmentation by deleting entire buffers instead of individual items within a buffer
+| SCID-5[[SCID-5]]      | *Fully testable* - all behavior of the API must be testable in a repeatable manner, consistent from test run to test run (in some cases this may mean testable by inspection)
+| SCID-6[[SCID-6]]      | *Undefined behavior* - the API must behave as expected under valid input conditions, clearly document conditions that would result in 'fatal error' leaving the system in an unrecoverable state, and document conditions that would result in undefined: behavior based on invalid input
+| SCID-7[[SCID-7]]      | *Unique ID* - provide a facility to return a run time implementation unique identifier specific
+to that runtime so that is may be interrogated at any time.  For example, such information could be the version number, name, date, release build number or a combination of these that is unique and comprehensible
+| SCID-8[[SCID-8]]      | *Code complexity* - reducing code complexity to help facilitate certification (for example if there are multiple ways to do the same thing, potentially eliminating one or more of the alternative methods)
+|====
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/limits.adoc b/codegen/vulkan/vulkan-docs-next/chapters/limits.adoc
new file mode 100644
index 0000000..ee88c74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/limits.adoc
@@ -0,0 +1,5528 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This text fragment is used many times in the Devices and Queues, and
+// Limits chapters for different behavior, property, and limit queries.
+ifdef::hidden[]
+// tag::limits_desc[]
+If the sname:{refpage} structure is included in the pname:pNext chain of the
+slink:VkPhysicalDeviceProperties2 structure passed to
+flink:vkGetPhysicalDeviceProperties2, it is filled in with each
+corresponding implementation-dependent property.
+// end::limits_desc[]
+endif::hidden[]
+
+
+[[limits]]
+= Limits
+
+_Limits_ are implementation-dependent minimums, maximums, and other device
+characteristics that an application may: need to be aware of.
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[NOTE]
+.Note
+====
+Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as
+well as the extensible structure sname:VkPhysicalDeviceProperties2, which
+was added in `apiext:VK_KHR_get_physical_device_properties2` and included in
+Vulkan 1.1.
+When limits are added in future Vulkan versions or extensions, each
+extension should: introduce one new limit structure, if needed.
+This structure can: be added to the pname:pNext chain of the
+sname:VkPhysicalDeviceProperties2 structure.
+====
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs']
+--
+The sname:VkPhysicalDeviceLimits structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLimits.adoc[]
+
+The sname:VkPhysicalDeviceLimits are properties of the physical device.
+These are available in the pname:limits member of the
+slink:VkPhysicalDeviceProperties structure which is returned from
+flink:vkGetPhysicalDeviceProperties.
+
+  * [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest
+    dimension (pname:width) that is guaranteed to be supported for all
+    images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D.
+    Some combinations of image parameters (format, usage, etc.) may: allow
+    support for larger dimensions, which can: be queried using
+    flink:vkGetPhysicalDeviceImageFormatProperties.
+  * [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest
+    dimension (pname:width or pname:height) that is guaranteed to be
+    supported for all images created with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and without
+    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
+    Some combinations of image parameters (format, usage, etc.) may: allow
+    support for larger dimensions, which can: be queried using
+    flink:vkGetPhysicalDeviceImageFormatProperties.
+  * [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest
+    dimension (pname:width, pname:height, or pname:depth) that is guaranteed
+    to be supported for all images created with an pname:imageType of
+    ename:VK_IMAGE_TYPE_3D.
+    Some combinations of image parameters (format, usage, etc.) may: allow
+    support for larger dimensions, which can: be queried using
+    flink:vkGetPhysicalDeviceImageFormatProperties.
+  * [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the
+    largest dimension (pname:width or pname:height) that is guaranteed to be
+    supported for all images created with an pname:imageType of
+    ename:VK_IMAGE_TYPE_2D and with
+    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
+    Some combinations of image parameters (format, usage, etc.) may: allow
+    support for larger dimensions, which can: be queried using
+    flink:vkGetPhysicalDeviceImageFormatProperties.
+  * [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum
+    number of layers (pname:arrayLayers) for an image.
+  * [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the
+    maximum number of addressable texels for a buffer view created on a
+    buffer which was created with the
+    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
+    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
+    member of the slink:VkBufferCreateInfo structure.
+  * [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the
+    maximum value that can: be specified in the pname:range member of a
+    slink:VkDescriptorBufferInfo structure passed to
+    flink:vkUpdateDescriptorSets for descriptors of type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
+  * [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the
+    maximum value that can: be specified in the pname:range member of a
+    slink:VkDescriptorBufferInfo structure passed to
+    flink:vkUpdateDescriptorSets for descriptors of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
+  * [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the
+    maximum size, in bytes, of the pool of push constant memory.
+    For each of the push constant ranges indicated by the
+    pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo
+    structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or
+    equal to this limit.
+  * [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is
+    the maximum number of device memory allocations, as created by
+    flink:vkAllocateMemory, which can: simultaneously exist.
+  * [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is
+    the maximum number of sampler objects, as created by
+    flink:vkCreateSampler, which can: simultaneously exist on a device.
+  * [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the
+    granularity, in bytes, at which buffer or linear image resources, and
+    optimal image resources can: be bound to adjacent offsets in the same
+    sname:VkDeviceMemory object without aliasing.
+    See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for
+    more details.
+  * [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the
+    total amount of address space available, in bytes, for sparse memory
+    resources.
+    This is an upper bound on the sum of the sizes of all sparse resources,
+    regardless of whether any memory is bound to them.
+ifdef::VK_NV_extended_sparse_address_space[]
+    If the <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled, then the
+    difference between <<limits-extendedSparseAddressSpaceSize,
+    pname:extendedSparseAddressSpaceSize>> and pname:sparseAddressSpaceSize
+    can also be used, by sname:VkImage created with the pname:usage member
+    of slink:VkImageCreateInfo only containing bits in
+    <<limits-extendedSparseImageUsageFlags,
+    pname:extendedSparseImageUsageFlags>> and sname:VkBuffer created with
+    the pname:usage member of slink:VkBufferCreateInfo only containing bits
+    in <<limits-extendedSparseBufferUsageFlags,
+    pname:extendedSparseBufferUsageFlags>>.
+endif::VK_NV_extended_sparse_address_space[]
+  * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the
+    maximum number of descriptor sets that can: be simultaneously used by a
+    pipeline.
+    All code:DescriptorSet decorations in shader modules must: have a value
+    less than pname:maxBoundDescriptorSets.
+    See <<descriptorsets-sets>>.
+  * [[limits-maxPerStageDescriptorSamplers]]
+    pname:maxPerStageDescriptorSamplers is the maximum number of samplers
+    that can: be accessible to a single shader stage in a pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a shader stage when the pname:stageFlags
+    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
+    for that shader stage set.
+    See <<descriptorsets-sampler>> and
+    <<descriptorsets-combinedimagesampler>>.
+  * [[limits-maxPerStageDescriptorUniformBuffers]]
+    pname:maxPerStageDescriptorUniformBuffers is the maximum number of
+    uniform buffers that can: be accessible to a single shader stage in a
+    pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a shader stage when the pname:stageFlags
+    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
+    for that shader stage set.
+    See <<descriptorsets-uniformbuffer>> and
+    <<descriptorsets-uniformbufferdynamic>>.
+  * [[limits-maxPerStageDescriptorStorageBuffers]]
+    pname:maxPerStageDescriptorStorageBuffers is the maximum number of
+    storage buffers that can: be accessible to a single shader stage in a
+    pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a pipeline shader stage when the
+    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
+    structure has the bit for that shader stage set.
+    See <<descriptorsets-storagebuffer>> and
+    <<descriptorsets-storagebufferdynamic>>.
+  * [[limits-maxPerStageDescriptorSampledImages]]
+    pname:maxPerStageDescriptorSampledImages is the maximum number of
+    sampled images that can: be accessible to a single shader stage in a
+    pipeline layout.
+    Descriptors with a type of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a pipeline shader stage when the
+    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
+    structure has the bit for that shader stage set.
+    See <<descriptorsets-combinedimagesampler>>,
+    <<descriptorsets-sampledimage>>, and
+    <<descriptorsets-uniformtexelbuffer>>.
+  * [[limits-maxPerStageDescriptorStorageImages]]
+    pname:maxPerStageDescriptorStorageImages is the maximum number of
+    storage images that can: be accessible to a single shader stage in a
+    pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a pipeline shader stage when the
+    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
+    structure has the bit for that shader stage set.
+    See <<descriptorsets-storageimage>>, and
+    <<descriptorsets-storagetexelbuffer>>.
+  * [[limits-maxPerStageDescriptorInputAttachments]]
+    pname:maxPerStageDescriptorInputAttachments is the maximum number of
+    input attachments that can: be accessible to a single shader stage in a
+    pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+    count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    A descriptor is accessible to a pipeline shader stage when the
+    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
+    structure has the bit for that shader stage set.
+    These are only supported for the fragment stage.
+    See <<descriptorsets-inputattachment>>.
+  * [[limits-maxPerStageResources]] pname:maxPerStageResources is the
+    maximum number of resources that can: be accessible to a single shader
+    stage in a pipeline layout.
+    Descriptors with a type of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    For the fragment shader stage the framebuffer color attachments also
+    count against this limit.
+  * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is
+    the maximum number of samplers that can: be included in a pipeline
+    layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-sampler>> and
+    <<descriptorsets-combinedimagesampler>>.
+  * [[limits-maxDescriptorSetUniformBuffers]]
+    pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
+    buffers that can: be included in a pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-uniformbuffer>> and
+    <<descriptorsets-uniformbufferdynamic>>.
+  * [[limits-maxDescriptorSetUniformBuffersDynamic]]
+    pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
+    dynamic uniform buffers that can: be included in a pipeline layout.
+    Descriptors with a type of
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-uniformbufferdynamic>>.
+  * [[limits-maxDescriptorSetStorageBuffers]]
+    pname:maxDescriptorSetStorageBuffers is the maximum number of storage
+    buffers that can: be included in a pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-storagebuffer>> and
+    <<descriptorsets-storagebufferdynamic>>.
+  * [[limits-maxDescriptorSetStorageBuffersDynamic]]
+    pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
+    dynamic storage buffers that can: be included in a pipeline layout.
+    Descriptors with a type of
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
+    limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-storagebufferdynamic>>.
+  * [[limits-maxDescriptorSetSampledImages]]
+    pname:maxDescriptorSetSampledImages is the maximum number of sampled
+    images that can: be included in a pipeline layout.
+    Descriptors with a type of
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-combinedimagesampler>>,
+    <<descriptorsets-sampledimage>>, and
+    <<descriptorsets-uniformtexelbuffer>>.
+  * [[limits-maxDescriptorSetStorageImages]]
+    pname:maxDescriptorSetStorageImages is the maximum number of storage
+    images that can: be included in a pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-storageimage>>, and
+    <<descriptorsets-storagetexelbuffer>>.
+  * [[limits-maxDescriptorSetInputAttachments]]
+    pname:maxDescriptorSetInputAttachments is the maximum number of input
+    attachments that can: be included in a pipeline layout.
+    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+    count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptors in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    See <<descriptorsets-inputattachment>>.
+  * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is
+    the maximum number of vertex input attributes that can: be specified for
+    a graphics pipeline.
+    These are described in the array of
+    sname:VkVertexInputAttributeDescription structures that are provided at
+    graphics pipeline creation time via the
+    pname:pVertexAttributeDescriptions member of the
+    slink:VkPipelineVertexInputStateCreateInfo structure.
+    See <<fxvertex-attrib>> and <<fxvertex-input>>.
+  * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the
+    maximum number of vertex buffers that can: be specified for providing
+    vertex attributes to a graphics pipeline.
+    These are described in the array of
+    sname:VkVertexInputBindingDescription structures that are provided at
+    graphics pipeline creation time via the pname:pVertexBindingDescriptions
+    member of the slink:VkPipelineVertexInputStateCreateInfo structure.
+    The pname:binding member of sname:VkVertexInputBindingDescription must:
+    be less than this limit.
+    See <<fxvertex-input>>.
+  * [[limits-maxVertexInputAttributeOffset]]
+    pname:maxVertexInputAttributeOffset is the maximum vertex input
+    attribute offset that can: be added to the vertex input binding stride.
+    The pname:offset member of the sname:VkVertexInputAttributeDescription
+    structure must: be less than or equal to this limit.
+    See <<fxvertex-input>>.
+  * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride
+    is the maximum vertex input binding stride that can: be specified in a
+    vertex input binding.
+    The pname:stride member of the sname:VkVertexInputBindingDescription
+    structure must: be less than or equal to this limit.
+    See <<fxvertex-input>>.
+  * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is
+    the maximum number of components of output variables which can: be
+    output by a vertex shader.
+    See <<shaders-vertex>>.
+  * [[limits-maxTessellationGenerationLevel]]
+    pname:maxTessellationGenerationLevel is the maximum tessellation
+    generation level supported by the fixed-function tessellation primitive
+    generator.
+    See <<tessellation>>.
+  * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is
+    the maximum patch size, in vertices, of patches that can: be processed
+    by the tessellation control shader and tessellation primitive generator.
+    The pname:patchControlPoints member of the
+    slink:VkPipelineTessellationStateCreateInfo structure specified at
+    pipeline creation time and the value provided in the code:OutputVertices
+    execution mode of shader modules must: be less than or equal to this
+    limit.
+    See <<tessellation>>.
+  * [[limits-maxTessellationControlPerVertexInputComponents]]
+    pname:maxTessellationControlPerVertexInputComponents is the maximum
+    number of components of input variables which can: be provided as
+    per-vertex inputs to the tessellation control shader stage.
+  * [[limits-maxTessellationControlPerVertexOutputComponents]]
+    pname:maxTessellationControlPerVertexOutputComponents is the maximum
+    number of components of per-vertex output variables which can: be output
+    from the tessellation control shader stage.
+  * [[limits-maxTessellationControlPerPatchOutputComponents]]
+    pname:maxTessellationControlPerPatchOutputComponents is the maximum
+    number of components of per-patch output variables which can: be output
+    from the tessellation control shader stage.
+  * [[limits-maxTessellationControlTotalOutputComponents]]
+    pname:maxTessellationControlTotalOutputComponents is the maximum total
+    number of components of per-vertex and per-patch output variables which
+    can: be output from the tessellation control shader stage.
+  * [[limits-maxTessellationEvaluationInputComponents]]
+    pname:maxTessellationEvaluationInputComponents is the maximum number of
+    components of input variables which can: be provided as per-vertex
+    inputs to the tessellation evaluation shader stage.
+  * [[limits-maxTessellationEvaluationOutputComponents]]
+    pname:maxTessellationEvaluationOutputComponents is the maximum number of
+    components of per-vertex output variables which can: be output from the
+    tessellation evaluation shader stage.
+  * [[limits-maxGeometryShaderInvocations]]
+    pname:maxGeometryShaderInvocations is the maximum invocation count
+    supported for instanced geometry shaders.
+    The value provided in the code:Invocations execution mode of shader
+    modules must: be less than or equal to this limit.
+    See <<geometry>>.
+  * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents
+    is the maximum number of components of input variables which can: be
+    provided as inputs to the geometry shader stage.
+  * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents
+    is the maximum number of components of output variables which can: be
+    output from the geometry shader stage.
+  * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is
+    the maximum number of vertices which can: be emitted by any geometry
+    shader.
+  * [[limits-maxGeometryTotalOutputComponents]]
+    pname:maxGeometryTotalOutputComponents is the maximum total number of
+    components of output variables, across all emitted vertices, which can:
+    be output from the geometry shader stage.
+  * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents
+    is the maximum number of components of input variables which can: be
+    provided as inputs to the fragment shader stage.
+  * [[limits-maxFragmentOutputAttachments]]
+    pname:maxFragmentOutputAttachments is the maximum number of output
+    attachments which can: be written to by the fragment shader stage.
+  * [[limits-maxFragmentDualSrcAttachments]]
+    pname:maxFragmentDualSrcAttachments is the maximum number of output
+    attachments which can: be written to by the fragment shader stage when
+    blending is enabled and one of the dual source blend modes is in use.
+    See <<framebuffer-dsb>> and <<features-dualSrcBlend,
+    pname:dualSrcBlend>>.
+  * [[limits-maxFragmentCombinedOutputResources]]
+    pname:maxFragmentCombinedOutputResources is the total number of storage
+    buffers, storage images, and output code:Location decorated color
+    attachments (described in <<interfaces-fragmentoutput, Fragment Output
+    Interface>>) which can: be used in the fragment shader stage.
+  * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize
+    is the maximum total storage size, in bytes, available for variables
+    declared with the code:Workgroup storage class in shader modules (or
+    with the code:shared storage qualifier in GLSL) in the compute shader
+    stage.
+  * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is
+    the maximum number of local workgroups that can: be dispatched by a
+    single dispatching command.
+    These three values represent the maximum number of local workgroups for
+    the X, Y, and Z dimensions, respectively.
+    The workgroup count parameters to the dispatching commands must: be less
+    than or equal to the corresponding limit.
+    See <<dispatch>>.
+  * [[limits-maxComputeWorkGroupInvocations]]
+    pname:maxComputeWorkGroupInvocations is the maximum total number of
+    compute shader invocations in a single local workgroup.
+    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode in shader modules or by the object decorated by the
+    code:WorkgroupSize decoration, must: be less than or equal to this
+    limit.
+  * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is
+    the maximum size of a local compute workgroup, per dimension.
+    These three values represent the maximum local workgroup size in the X,
+    Y, and Z dimensions, respectively.
+    The pname:x, pname:y, and pname:z sizes, as specified by the
+    code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the code:WorkgroupSize
+    decoration in shader modules, must: be less than or equal to the
+    corresponding limit.
+  * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the
+    number of bits of subpixel precision in framebuffer coordinates
+    [eq]#x~f~# and [eq]#y~f~#.
+    See <<primsrast>>.
+  * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the
+    number of bits of precision in the division along an axis of an image
+    used for minification and magnification filters.
+    [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
+    along each axis of the image represented.
+    Sub-texel values calculated during image sampling will snap to these
+    locations when generating the filtered results.
+  * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number
+    of bits of division that the LOD calculation for mipmap fetching get
+    snapped to when determining the contribution from each mip level to the
+    mip filtered results.
+    [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
+  * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is
+    the maximum index value that can: be used for indexed draw calls when
+    using 32-bit indices.
+    This excludes the primitive restart index value of 0xFFFFFFFF.
+    See <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>>.
+  * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
+    maximum draw count that is supported for indirect drawing calls.
+    See <<features-multiDrawIndirect, pname:multiDrawIndirect>>.
+  * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum
+    absolute sampler LOD bias.
+    The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo
+    structure and the code:Bias operand of image sampling operations in
+    shader modules (or 0 if no code:Bias operand is provided to an image
+    sampling operation) are clamped to the range
+    [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
+    See <<samplers-mipLodBias>>.
+  * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the
+    maximum degree of sampler anisotropy.
+    The maximum degree of anisotropic filtering used for an image sampling
+    operation is the minimum of the pname:maxAnisotropy member of the
+    slink:VkSamplerCreateInfo structure and this limit.
+    See <<samplers-maxAnisotropy>>.
+  * [[limits-maxViewports]] pname:maxViewports is the maximum number of
+    active viewports.
+    The pname:viewportCount member of the
+    slink:VkPipelineViewportStateCreateInfo structure that is provided at
+    pipeline creation must: be less than or equal to this limit.
+  * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the
+    maximum viewport dimensions in the X (width) and Y (height) dimensions,
+    respectively.
+    The maximum viewport dimensions must: be greater than or equal to the
+    largest image which can: be created and used as a framebuffer
+    attachment.
+    See <<vertexpostproc-viewport,Controlling the Viewport>>.
+  * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the
+    [eq]#[minimum, maximum]# range that the corners of a viewport must: be
+    contained in.
+    This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
+    pname:size - 1]#, where [eq]#pname:size =
+    max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
+    See <<vertexpostproc-viewport,Controlling the Viewport>>.
++
+[NOTE]
+.Note
+====
+The intent of the pname:viewportBoundsRange limit is to allow a maximum
+sized viewport to be arbitrarily shifted relative to the output target as
+long as at least some portion intersects.
+This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
+pname:size - 1]# which would allow all possible non-empty-set intersections
+of the output target and the viewport.
+Since these numbers are typically powers of two, picking the signed number
+range using the smallest possible number of bits ends up with the specified
+range.
+====
+  * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number
+    of bits of subpixel precision for viewport bounds.
+    The subpixel precision that floating-point viewport bounds are
+    interpreted at is given by this limit.
+  * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the
+    minimum required: alignment, in bytes, of host visible memory
+    allocations within the host address space.
+    When mapping a memory allocation with flink:vkMapMemory, subtracting
+    pname:offset bytes from the returned pointer will always produce an
+    integer multiple of this limit.
+    See <<memory-device-hostaccess>>.
+    The value must: be a power of two.
+  * [[limits-minTexelBufferOffsetAlignment]]
+    pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
+    in bytes, for the pname:offset member of the
+    slink:VkBufferViewCreateInfo structure for texel buffers.
+    The value must: be a power of two.
+ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+    If <<features-texelBufferAlignment, pname:texelBufferAlignment>> is
+    enabled, this limit is equivalent to the maximum of the
+    <<limits-uniformTexelBufferOffsetAlignmentBytes,
+    pname:uniformTexelBufferOffsetAlignmentBytes>> and
+    <<limits-storageTexelBufferOffsetAlignmentBytes,
+    pname:storageTexelBufferOffsetAlignmentBytes>> members of
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties, but smaller
+    alignment is optionally: allowed by
+    <<limits-storageTexelBufferOffsetSingleTexelAlignment,
+    pname:storageTexelBufferOffsetSingleTexelAlignment>> and
+    <<limits-uniformTexelBufferOffsetSingleTexelAlignment,
+    pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
+    If <<features-texelBufferAlignment, pname:texelBufferAlignment>> is not
+    enabled,
+endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+    slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this
+    value.
+  * [[limits-minUniformBufferOffsetAlignment]]
+    pname:minUniformBufferOffsetAlignment is the minimum required:
+    alignment, in bytes, for the pname:offset member of the
+    sname:VkDescriptorBufferInfo structure for uniform buffers.
+    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
+    pname:offset must: be an integer multiple of this limit.
+    Similarly, dynamic offsets for uniform buffers must: be multiples of
+    this limit.
+    The value must: be a power of two.
+  * [[limits-minStorageBufferOffsetAlignment]]
+    pname:minStorageBufferOffsetAlignment is the minimum required:
+    alignment, in bytes, for the pname:offset member of the
+    sname:VkDescriptorBufferInfo structure for storage buffers.
+    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
+    pname:offset must: be an integer multiple of this limit.
+    Similarly, dynamic offsets for storage buffers must: be multiples of
+    this limit.
+    The value must: be a power of two.
+  * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset
+    value for the code:ConstOffset image operand of any of the
+    code:OpImageSample* or code:OpImageFetch* image instructions.
+  * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset
+    value for the code:ConstOffset image operand of any of the
+    code:OpImageSample* or code:OpImageFetch* image instructions.
+  * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the
+    minimum offset value for the code:Offset, code:ConstOffset, or
+    code:ConstOffsets image operands of any of the code:OpImage*Gather image
+    instructions.
+  * [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the
+    maximum offset value for the code:Offset, code:ConstOffset, or
+    code:ConstOffsets image operands of any of the code:OpImage*Gather image
+    instructions.
+  * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the
+    base minimum (inclusive) negative offset value for the code:Offset
+    operand of the code:InterpolateAtOffset extended instruction.
+  * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the
+    base maximum (inclusive) positive offset value for the code:Offset
+    operand of the code:InterpolateAtOffset extended instruction.
+  * [[limits-subPixelInterpolationOffsetBits]]
+    pname:subPixelInterpolationOffsetBits is the number of fractional bits
+    that the code:x and code:y offsets to the code:InterpolateAtOffset
+    extended instruction may: be rounded to as fixed-point values.
+  * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum
+    width for a framebuffer.
+    The pname:width member of the slink:VkFramebufferCreateInfo structure
+    must: be less than or equal to this limit.
+  * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the
+    maximum height for a framebuffer.
+    The pname:height member of the slink:VkFramebufferCreateInfo structure
+    must: be less than or equal to this limit.
+  * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the
+    maximum layer count for a layered framebuffer.
+    The pname:layers member of the slink:VkFramebufferCreateInfo structure
+    must: be less than or equal to this limit.
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceLimits::pname:maxFramebufferLayers may: be 1 if
+    neither pname:geometryShader or pname:shaderOutputLayer are supported
+    <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+  * [[limits-framebufferColorSampleCounts]]
+    pname:framebufferColorSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the color sample counts that are
+    supported for all framebuffer color attachments with floating- or
+    fixed-point formats.
+ifndef::VK_VERSION_1_2[]
+    There is no limit specifying the color sample counts that are supported
+    for all color attachments with integer formats.
+endif::VK_VERSION_1_2[]
+ifdef::VK_VERSION_1_2[]
+    For color attachments with integer formats, see
+    <<limits-framebufferIntegerColorSampleCounts,
+    pname:framebufferIntegerColorSampleCounts>>.
+endif::VK_VERSION_1_2[]
+  * [[limits-framebufferDepthSampleCounts]]
+    pname:framebufferDepthSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the supported depth sample counts
+    for all framebuffer depth/stencil attachments, when the format includes
+    a depth component.
+  * [[limits-framebufferStencilSampleCounts]]
+    pname:framebufferStencilSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the supported stencil sample
+    counts for all framebuffer depth/stencil attachments, when the format
+    includes a stencil component.
+  * [[limits-framebufferNoAttachmentsSampleCounts]]
+    pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the supported sample counts for a
+    <<renderpass-noattachments, subpass which uses no attachments>>.
+  * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum
+    number of color attachments that can: be used by a subpass in a render
+    pass.
+    The pname:colorAttachmentCount member of the sname:VkSubpassDescription
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+    or sname:VkSubpassDescription2
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+    structure must: be less than or equal to this limit.
+  * [[limits-sampledImageColorSampleCounts]]
+    pname:sampledImageColorSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the sample counts supported for
+    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
+    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
+    format.
+  * [[limits-sampledImageIntegerSampleCounts]]
+    pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the sample counts supported for
+    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
+    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
+    format.
+  * [[limits-sampledImageDepthSampleCounts]]
+    pname:sampledImageDepthSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the sample counts supported for
+    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
+    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
+  * [[limits-sampledImageStencilSampleCounts]]
+    pname:sampledImageStencilSampleCounts is a bitmask^1^ of
+    elink:VkSampleCountFlagBits indicating the sample counts supported for
+    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
+    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format.
+  * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a
+    bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts
+    supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL,
+    and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
+  * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum
+    number of array elements of a variable decorated with the
+    code:SampleMask built-in decoration.
+  * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics
+    specifies support for timestamps on all graphics and compute queues.
+    If this limit is set to ename:VK_TRUE, all queues that advertise the
+    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
+    sname:VkQueueFamilyProperties::pname:queueFlags support
+    sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
+    See <<queries-timestamps, Timestamp Queries>>.
+  * [[limits-timestampPeriod]] pname:timestampPeriod is the number of
+    nanoseconds required: for a timestamp query to be incremented by 1.
+    See <<queries-timestamps, Timestamp Queries>>.
+  * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number
+    of clip distances that can: be used in a single shader stage.
+    The size of any array declared with the code:ClipDistance built-in
+    decoration in a shader module must: be less than or equal to this limit.
+  * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number
+    of cull distances that can: be used in a single shader stage.
+    The size of any array declared with the code:CullDistance built-in
+    decoration in a shader module must: be less than or equal to this limit.
+  * [[limits-maxCombinedClipAndCullDistances]]
+    pname:maxCombinedClipAndCullDistances is the maximum combined number of
+    clip and cull distances that can: be used in a single shader stage.
+    The sum of the sizes of any pair of arrays declared with the
+    code:ClipDistance and code:CullDistance built-in decoration used by a
+    single shader stage in a shader module must: be less than or equal to
+    this limit.
+  * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the
+    number of discrete priorities that can: be assigned to a queue based on
+    the value of each member of
+    slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
+    This must: be at least 2, and levels must: be spread evenly over the
+    range, with at least one level at 1.0, and another at 0.0.
+    See <<devsandqueues-priority>>.
+  * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range
+    [eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
+    Values written to variables decorated with the code:PointSize built-in
+    decoration are clamped to this range.
+  * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range
+    [eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
+    Values specified by the pname:lineWidth member of the
+    slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
+    parameter to fname:vkCmdSetLineWidth are clamped to this range.
+  * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the
+    granularity of supported point sizes.
+    Not all point sizes in the range defined by pname:pointSizeRange are
+    supported.
+    This limit specifies the granularity (or increment) between successive
+    supported point sizes.
+  * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the
+    granularity of supported line widths.
+    Not all line widths in the range defined by pname:lineWidthRange are
+    supported.
+    This limit specifies the granularity (or increment) between successive
+    supported line widths.
+  * [[limits-strictLines]] pname:strictLines specifies whether lines are
+    rasterized according to the preferred method of rasterization.
+    If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
+    of rules.
+    If set to ename:VK_TRUE, lines are rasterized as per the strict
+    definition.
+    See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
+  * [[limits-standardSampleLocations]] pname:standardSampleLocations
+    specifies whether rasterization uses the standard sample locations as
+    documented in <<primsrast-multisampling,Multisampling>>.
+    If set to ename:VK_TRUE, the implementation uses the documented sample
+    locations.
+    If set to ename:VK_FALSE, the implementation may: use different sample
+    locations.
+  * [[limits-optimalBufferCopyOffsetAlignment]]
+    pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
+    alignment in bytes for
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage,
+    flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_EXT_host_image_copy[]
+    This value is also the optimal host memory offset alignment in bytes for
+    flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
+endif::VK_EXT_host_image_copy[]
+    The per texel alignment requirements are enforced, but applications
+    should: use the optimal alignment for optimal performance and power use.
+    The value must: be a power of two.
+  * [[limits-optimalBufferCopyRowPitchAlignment]]
+    pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
+    alignment in bytes for
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage,
+    flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer.
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_EXT_host_image_copy[]
+    This value is also the optimal host memory row pitch alignment in bytes
+    for flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
+endif::VK_EXT_host_image_copy[]
+    Row pitch is the number of bytes between texels with the same X
+    coordinate in adjacent rows (Y coordinates differ by one).
+    The per texel alignment requirements are enforced, but applications
+    should: use the optimal alignment for optimal performance and power use.
+    The value must: be a power of two.
+  * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
+    alignment in bytes that bounds concurrent access to
+    <<memory-device-hostaccess, host-mapped device memory>>.
+    The value must: be a power of two.
+
+1::
+    For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
+    defined above represent the minimum supported sample counts for each
+    image type.
+    Individual images may: support additional sample counts, which are
+    queried using flink:vkGetPhysicalDeviceImageFormatProperties as
+    described in <<features-supported-sample-counts, Supported Sample
+    Counts>>.
+
+include::{generated}/validity/structs/VkPhysicalDeviceLimits.adoc[]
+--
+
+
+[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
+--
+Bits which may: be set in the sample count limits returned by
+slink:VkPhysicalDeviceLimits, as well as in other queries and structures
+representing image sample counts, are:
+
+include::{generated}/api/enums/VkSampleCountFlagBits.adoc[]
+
+  * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
+    pixel.
+  * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
+  * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
+  * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
+  * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
+    pixel.
+  * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
+    pixel.
+  * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
+    pixel.
+--
+
+[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSampleCountFlags.adoc[]
+
+tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
+more elink:VkSampleCountFlagBits.
+--
+
+ifdef::VK_KHR_push_descriptor[]
+[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum
+    number of descriptors that can: be used in a descriptor set layout
+    created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
+
+:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[]
+--
+endif::VK_KHR_push_descriptor[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.adoc[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.adoc[]
+endif::VK_KHR_multiview[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_multiview-properties[]
+  * [[{anchor-prefix}limits-maxMultiviewViewCount]]
+    pname:maxMultiviewViewCount is one greater than the maximum view index
+    that can: be used in a subpass.
+  * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]]
+    pname:maxMultiviewInstanceIndex is the maximum valid value of instance
+    index allowed to be generated by a drawing command recorded within a
+    subpass of a multiview render pass instance.
+// end::VK_KHR_multiview-properties[]
+
+:refpage: VkPhysicalDeviceMultiviewProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR']
+--
+The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.adoc[]
+
+ifdef::VK_KHR_shader_float_controls[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.adoc[]
+endif::VK_KHR_shader_float_controls[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_shader_float_controls-properties[]
+  * [[{anchor-prefix}features-denormBehaviorIndependence]]
+    pname:denormBehaviorIndependence is a
+    elink:VkShaderFloatControlsIndependence value indicating whether, and
+    how, denorm behavior can be set independently for different bit widths.
+  * [[{anchor-prefix}features-roundingModeIndependence]]
+    pname:roundingModeIndependence is a
+    elink:VkShaderFloatControlsIndependence value indicating whether, and
+    how, rounding modes can be set independently for different bit widths.
+  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]]
+    pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
+    indicating whether sign of a zero, [eq]##Nan##s and
+    latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
+    computations.
+    It also indicates whether the code:SignedZeroInfNanPreserve execution
+    mode can: be used for 16-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]]
+    pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
+    indicating whether sign of a zero, [eq]##Nan##s and
+    latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
+    computations.
+    It also indicates whether the code:SignedZeroInfNanPreserve execution
+    mode can: be used for 32-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]]
+    pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
+    indicating whether sign of a zero, [eq]##Nan##s and
+    latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
+    computations.
+    It also indicates whether the code:SignedZeroInfNanPreserve execution
+    mode can: be used for 64-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]]
+    pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
+    denormals can: be preserved in 16-bit floating-point computations.
+    It also indicates whether the code:DenormPreserve execution mode can: be
+    used for 16-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]]
+    pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
+    denormals can: be preserved in 32-bit floating-point computations.
+    It also indicates whether the code:DenormPreserve execution mode can: be
+    used for 32-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]]
+    pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
+    denormals can: be preserved in 64-bit floating-point computations.
+    It also indicates whether the code:DenormPreserve execution mode can: be
+    used for 64-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]]
+    pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
+    whether denormals can: be flushed to zero in 16-bit floating-point
+    computations.
+    It also indicates whether the code:DenormFlushToZero execution mode can:
+    be used for 16-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]]
+    pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating
+    whether denormals can: be flushed to zero in 32-bit floating-point
+    computations.
+    It also indicates whether the code:DenormFlushToZero execution mode can:
+    be used for 32-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]]
+    pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating
+    whether denormals can: be flushed to zero in 64-bit floating-point
+    computations.
+    It also indicates whether the code:DenormFlushToZero execution mode can:
+    be used for 64-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]]
+    pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether
+    an implementation supports the round-to-nearest-even rounding mode for
+    16-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTE execution mode can:
+    be used for 16-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]]
+    pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether
+    an implementation supports the round-to-nearest-even rounding mode for
+    32-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTE execution mode can:
+    be used for 32-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]]
+    pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether
+    an implementation supports the round-to-nearest-even rounding mode for
+    64-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTE execution mode can:
+    be used for 64-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]]
+    pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether
+    an implementation supports the round-towards-zero rounding mode for
+    16-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTZ execution mode can:
+    be used for 16-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]]
+    pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether
+    an implementation supports the round-towards-zero rounding mode for
+    32-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTZ execution mode can:
+    be used for 32-bit floating-point types.
+  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]]
+    pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether
+    an implementation supports the round-towards-zero rounding mode for
+    64-bit floating-point arithmetic and conversion instructions.
+    It also indicates whether the code:RoundingModeRTZ execution mode can:
+    be used for 64-bit floating-point types.
+// end::VK_KHR_shader_float_controls-properties[]
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+Implementations may not be able to control behavior of denorms for
+floating-point atomics.
+This needs to be taken into account when such atomics will be added to
+Vulkan.
+====
+endif::editing-notes[]
+
+:refpage: VkPhysicalDeviceFloatControlsProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.adoc[]
+--
+
+[open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR']
+--
+Values which may: be returned in the pname:denormBehaviorIndependence and
+pname:roundingModeIndependence fields of
+sname:VkPhysicalDeviceFloatControlsProperties are:
+
+include::{generated}/api/enums/VkShaderFloatControlsIndependence.adoc[]
+
+ifdef::VK_KHR_shader_float_controls[]
+or the equivalent
+
+include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.adoc[]
+endif::VK_KHR_shader_float_controls[]
+
+  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that
+    shader float controls for 32-bit floating point can: be set
+    independently; other bit widths must: be set identically to each other.
+  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader
+    float controls for all bit widths can: be set independently.
+  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader
+    float controls for all bit widths must: be set identically.
+--
+endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
+
+ifdef::VK_EXT_discard_rectangles[]
+[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the
+    maximum number of active discard rectangles that can: be specified.
+
+:refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[]
+--
+endif::VK_EXT_discard_rectangles[]
+
+ifdef::VK_EXT_sample_locations[]
+[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts
+    is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts
+    supporting custom sample locations.
+  * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is
+    the maximum size of the pixel grid in which sample locations can: vary
+    that is supported for all sample counts in
+    pname:sampleLocationSampleCounts.
+  * [[limits-sampleLocationCoordinateRange]]
+    pname:sampleLocationCoordinateRange[2] is the range of supported sample
+    location coordinates.
+  * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits
+    is the number of bits of subpixel precision for sample locations.
+  * [[limits-variableSampleLocations]] pname:variableSampleLocations
+    specifies whether the sample locations used by all pipelines that will
+    be bound to a command buffer during a subpass must: match.
+    If set to ename:VK_TRUE, the implementation supports variable sample
+    locations in a subpass.
+    If set to ename:VK_FALSE, then the sample locations must: stay constant
+    in each subpass.
+
+:refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[]
+--
+endif::VK_EXT_sample_locations[]
+
+ifdef::VK_EXT_external_memory_host[]
+[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-minImportedHostPointerAlignment]]
+    pname:minImportedHostPointerAlignment is the minimum required:
+    alignment, in bytes, for the base address and size of host pointers that
+    can: be imported to a Vulkan memory object.
+    The value must: be a power of two.
+
+:refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[]
+--
+endif::VK_EXT_external_memory_host[]
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-perViewPositionAllComponents]]
+    pname:perViewPositionAllComponents is ename:VK_TRUE if the
+    implementation supports per-view position values that differ in
+    components other than the X component.
+
+:refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[]
+--
+endif::VK_NVX_multiview_per_view_attributes[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDevicePointClippingProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_maintenance2-properties[]
+  * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a
+    elink:VkPointClippingBehavior value specifying the point clipping
+    behavior supported by the implementation.
+// end::VK_KHR_maintenance2-properties[]
+
+:refpage: VkPhysicalDevicePointClippingProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSubgroupProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_subgroup-properties[]
+  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
+    default number of invocations in each subgroup.
+    pname:subgroupSize is at least 1 if any of the physical device's queues
+    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
+    pname:subgroupSize is a power-of-two.
+  * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield
+    of elink:VkShaderStageFlagBits describing the shader stages that
+    <<shaders-group-operations, group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>> are supported in.
+    pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT
+    bit set if any of the physical device's queues support
+    ename:VK_QUEUE_COMPUTE_BIT.
+  * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a
+    bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of
+    <<shaders-group-operations, group operations>> with
+    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
+    pname:supportedOperations will have the
+    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
+    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
+    ename:VK_QUEUE_COMPUTE_BIT.
+  * [[limits-subgroup-quadOperationsInAllStages]]
+    pname:quadOperationsInAllStages is a boolean specifying whether
+    <<shaders-quad-operations,quad group operations>> are available in all
+    stages, or are restricted to fragment and compute stages.
+// end::VK_KHR_subgroup-properties[]
+
+:refpage: VkPhysicalDeviceSubgroupProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+If pname:supportedOperations includes <<features-subgroup-quad,
+ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
+ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
+or <<features-shaderSubgroupUniformControlFlow,
+pname:shaderSubgroupUniformControlFlow>> is enabled,
+endif::VK_KHR_shader_subgroup_uniform_control_flow[]
+pname:subgroupSize must: be greater than or equal to 4.
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.adoc[]
+--
+
+[open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums']
+--
+Bits which can: be set in
+slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
+ifdef::VK_VERSION_1_2[]
+and
+slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations
+endif::VK_VERSION_1_2[]
+to specify supported <<shaders-group-operations, group operations>> with
+<<shaders-scope-subgroup, subgroup scope>> are:
+
+include::{generated}/api/enums/VkSubgroupFeatureFlagBits.adoc[]
+
+  * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT
+    specifies the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniform capability.
+  * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies
+    the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniformVote capability.
+  * [[features-subgroup-arithmetic]]
+    ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will
+    accept SPIR-V shader modules containing the
+    code:GroupNonUniformArithmetic capability.
+  * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT
+    specifies the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniformBallot capability.
+  * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT
+    specifies the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniformShuffle capability.
+  * [[features-subgroup-shuffle-relative]]
+    ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will
+    accept SPIR-V shader modules containing the
+    code:GroupNonUniformShuffleRelative capability.
+  * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT
+    specifies the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniformClustered capability.
+  * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies
+    the device will accept SPIR-V shader modules containing the
+    code:GroupNonUniformQuad capability.
+ifdef::VK_NV_shader_subgroup_partitioned[]
+  * [[features-subgroup-partitioned]]
+    ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
+    accept SPIR-V shader modules containing the
+    code:GroupNonUniformPartitionedNV capability.
+endif::VK_NV_shader_subgroup_partitioned[]
+--
+
+[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSubgroupFeatureFlags.adoc[]
+
+tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
+more elink:VkSubgroupFeatureFlagBits.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+[open,refpage='VkPhysicalDeviceSubgroupSizeControlProperties',desc='Structure describing the control subgroup size properties of an implementation',type='structs',alias='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT']
+--
+The sname:VkPhysicalDeviceSubgroupSizeControlProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[]
+
+ifdef::VK_EXT_subgroup_size_control[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.adoc[]
+endif::VK_EXT_subgroup_size_control[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_subgroup_size_control-properties[]
+  * [[{anchor-prefix}limits-minSubgroupSize]] pname:minSubgroupSize is the
+    minimum subgroup size supported by this device.
+    pname:minSubgroupSize is at least one if any of the physical device's
+    queues support ename:VK_QUEUE_GRAPHICS_BIT or
+    ename:VK_QUEUE_COMPUTE_BIT.
+    pname:minSubgroupSize is a power-of-two.
+    pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize.
+    pname:minSubgroupSize is less than or equal to <<limits-subgroup-size,
+    pname:subgroupSize>>.
+  * [[{anchor-prefix}limits-maxSubgroupSize]] pname:maxSubgroupSize is the
+    maximum subgroup size supported by this device.
+    pname:maxSubgroupSize is at least one if any of the physical device's
+    queues support ename:VK_QUEUE_GRAPHICS_BIT or
+    ename:VK_QUEUE_COMPUTE_BIT.
+    pname:maxSubgroupSize is a power-of-two.
+    pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize.
+    pname:maxSubgroupSize is greater than or equal to
+    <<limits-subgroup-size, pname:subgroupSize>>.
+  * [[{anchor-prefix}limits-maxComputeWorkgroupSubgroups]]
+    pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
+    supported by the implementation within a workgroup.
+  * [[{anchor-prefix}limits-requiredSubgroupSizeStages]]
+    pname:requiredSubgroupSizeStages is a bitfield of what shader stages
+    support having a required subgroup size specified.
+// end::VK_EXT_subgroup_size_control-properties[]
+
+:refpage: VkPhysicalDeviceSubgroupSizeControlProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
+includes <<features-subgroup-quad, ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
+pname:minSubgroupSize must: be greater than or equal to 4.
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_EXT_blend_operation_advanced[]
+[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-advancedBlendMaxColorAttachments]]
+    pname:advancedBlendMaxColorAttachments is one greater than the highest
+    color attachment index that can: be used in a subpass, for a pipeline
+    that uses an <<framebuffer-blend-advanced,advanced blend operation>>.
+  * [[limits-advancedBlendIndependentBlend]]
+    pname:advancedBlendIndependentBlend specifies whether advanced blend
+    operations can: vary per-attachment.
+  * [[limits-advancedBlendNonPremultipliedSrcColor]]
+    pname:advancedBlendNonPremultipliedSrcColor specifies whether the source
+    color can: be treated as non-premultiplied.
+    If this is ename:VK_FALSE, then
+    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied
+    must: be ename:VK_TRUE.
+  * [[limits-advancedBlendNonPremultipliedDstColor]]
+    pname:advancedBlendNonPremultipliedDstColor specifies whether the
+    destination color can: be treated as non-premultiplied.
+    If this is ename:VK_FALSE, then
+    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied
+    must: be ename:VK_TRUE.
+  * [[limits-advancedBlendCorrelatedOverlap]]
+    pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode
+    can: be treated as correlated.
+    If this is ename:VK_FALSE, then
+    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
+    must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
+  * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations
+    specifies whether all advanced blend operation enums are supported.
+    See the valid usage of slink:VkPipelineColorBlendAttachmentState.
+
+:refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[]
+--
+endif::VK_EXT_blend_operation_advanced[]
+
+ifdef::VK_EXT_vertex_attribute_divisor[]
+[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the
+    maximum value of the number of instances that will repeat the value of
+    vertex attribute data when instanced rendering is enabled.
+
+:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[]
+--
+endif::VK_EXT_vertex_attribute_divisor[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT']
+--
+The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.adoc[]
+endif::VK_EXT_sampler_filter_minmax[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_sampler_filter_minmax-properties[]
+  * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]]
+    pname:filterMinmaxSingleComponentFormats is a boolean value indicating
+    whether a minimum set of required formats support min/max filtering.
+  * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]]
+    pname:filterMinmaxImageComponentMapping is a boolean value indicating
+    whether the implementation supports non-identity component mapping of
+    the image when doing min/max filtering.
+// end::VK_EXT_sampler_filter_minmax-properties[]
+
+:refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+[[limits-filterMinmaxSingleComponentFormats-minimum-requirements]]
+If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following
+formats must: support the
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
+ename:VK_IMAGE_TILING_OPTIMAL, if they support
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT:
+
+  * ename:VK_FORMAT_R8_UNORM
+  * ename:VK_FORMAT_R8_SNORM
+  * ename:VK_FORMAT_R16_UNORM
+  * ename:VK_FORMAT_R16_SNORM
+  * ename:VK_FORMAT_R16_SFLOAT
+  * ename:VK_FORMAT_R32_SFLOAT
+  * ename:VK_FORMAT_D16_UNORM
+  * ename:VK_FORMAT_X8_D24_UNORM_PACK32
+  * ename:VK_FORMAT_D32_SFLOAT
+  * ename:VK_FORMAT_D16_UNORM_S8_UINT
+  * ename:VK_FORMAT_D24_UNORM_S8_UINT
+  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT
+
+If the format is a depth/stencil format, this bit only specifies that the
+depth aspect (not the stencil aspect) of an image of this format supports
+min/max filtering, and that min/max filtering of the depth aspect is
+supported when depth compare is disabled in the sampler.
+
+If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component
+mapping of the image view used with min/max filtering must: have been
+created with the pname:r component set to the
+<<resources-image-views-identity-mappings,identity swizzle>>.
+Only the pname:r component of the sampled image value is defined and the
+other component values are undefined:.
+If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction
+does not apply and image component mapping works as normal.
+
+include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+ifdef::VK_VERSION_1_1[]
+[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_protected_memory-properties[]
+  * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault
+    specifies how an implementation behaves when an application attempts to
+    write to unprotected memory in a protected queue operation, read from
+    protected memory in an unprotected queue operation, or perform a query
+    in a protected queue operation.
+    If this limit is ename:VK_TRUE, such writes will be discarded or have
+    undefined: values written, reads and queries will return undefined:
+    values.
+    If this limit is ename:VK_FALSE, applications must: not perform these
+    operations.
+    See <<memory-protected-access-rules>> for more information.
+// end::VK_KHR_protected_memory-properties[]
+
+:refpage: VkPhysicalDeviceProtectedMemoryProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[]
+--
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
+[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs']
+--
+The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.adoc[]
+
+ifdef::VK_KHR_maintenance3[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.adoc[]
+endif::VK_KHR_maintenance3[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_maintenance3-properties[]
+  * [[{anchor-prefix}limits-maxPerSetDescriptors]]
+    pname:maxPerSetDescriptors is a maximum number of descriptors (summed
+    over all descriptor types) in a single descriptor set that is guaranteed
+    to satisfy any implementation-dependent constraints on the size of a
+    descriptor set itself.
+    Applications can: query whether a descriptor set that goes beyond this
+    limit is supported using flink:vkGetDescriptorSetLayoutSupport.
+  * [[{anchor-prefix}limits-maxMemoryAllocationSize]]
+    pname:maxMemoryAllocationSize is the maximum size of a memory allocation
+    that can: be created, even if there is more space available in the heap.
+// end::VK_KHR_maintenance3-properties[]
+
+:refpage: VkPhysicalDeviceMaintenance3Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='VkPhysicalDeviceMaintenance4Properties',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs',alias='VkPhysicalDeviceMaintenance4PropertiesKHR']
+--
+The sname:VkPhysicalDeviceMaintenance4Properties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4Properties.adoc[]
+
+ifdef::VK_KHR_maintenance4[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_KHR_maintenance4-properties[]
+  * [[{anchor-prefix}limits-maxBufferSize]] pname:maxBufferSize is the
+    maximum size sname:VkBuffer that can: be created.
+// end::VK_KHR_maintenance4-properties[]
+
+:refpage: VkPhysicalDeviceMaintenance4Properties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4Properties.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='VkPhysicalDeviceMaintenance5PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance5',type='structs',alias='VkPhysicalDeviceMaintenance5PropertiesKHR']
+--
+The sname:VkPhysicalDeviceMaintenance5PropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance5PropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:earlyFragmentMultisampleCoverageAfterSampleCounting is a boolean
+    value indicating whether the <<fragops-shader,fragment shading>> and
+    <<fragops-covg, multisample coverage>> operations are performed after
+    <<fragops-samplecount, sample counting>> for <<fragops-shader, fragment
+    shaders>> with code:EarlyFragmentTests execution mode.
+  * pname:earlyFragmentSampleMaskTestBeforeSampleCounting is a boolean value
+    indicating whether the <<fragops-samplemask,sample mask test>> operation
+    is performed before <<fragops-samplecount, sample counting>> for
+    <<fragops-shader, fragment shaders>> using the code:EarlyFragmentTests
+    execution mode.
+  * pname:depthStencilSwizzleOneSupport is a boolean indicating that
+    depth/stencil texturing operations with ename:VK_COMPONENT_SWIZZLE_ONE
+    have defined behavior.
+  * pname:polygonModePointSize is a boolean value indicating whether the
+    point size of the final rasterization of polygons with
+    ename:VK_POLYGON_MODE_POINT is controlled by code:PointSize.
+  * pname:nonStrictSinglePixelWideLinesUseParallelogram is a boolean value
+    indicating whether non-strict lines with a width of 1.0 are rasterized
+    as parallelograms or using Bresenham's algorithm.
+  * pname:nonStrictWideLinesUseParallelogram is a boolean value indicating
+    whether non-strict lines with a width greater than 1.0 are rasterized as
+    parallelograms or using Bresenham's algorithm.
+
+:refpage: VkPhysicalDeviceMaintenance5PropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance5PropertiesKHR.adoc[]
+--
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_NV_mesh_shader[]
+[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs']
+--
+The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxDrawMeshTasksCount is the maximum number of local workgroups
+    that can: be launched by a single draw mesh tasks command.
+    See <<drawing-mesh-shading>>.
+  * pname:maxTaskWorkGroupInvocations is the maximum total number of task
+    shader invocations in a single local workgroup.
+    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode in shader modules or by the object decorated by the
+    code:WorkgroupSize decoration, must: be less than or equal to this
+    limit.
+  * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task
+    workgroup.
+    These three values represent the maximum local workgroup size in the X,
+    Y, and Z dimensions, respectively.
+    The pname:x, pname:y, and pname:z sizes, as specified by the
+    code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the code:WorkgroupSize
+    decoration in shader modules, must: be less than or equal to the
+    corresponding limit.
+  * pname:maxTaskTotalMemorySize is the maximum number of bytes that the
+    task shader can use in total for shared and output memory combined.
+  * pname:maxTaskOutputCount is the maximum number of output tasks a single
+    task shader workgroup can emit.
+  * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh
+    shader invocations in a single local workgroup.
+    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode in shader modules or by the object decorated by the
+    code:WorkgroupSize decoration, must: be less than or equal to this
+    limit.
+  * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh
+    workgroup.
+    These three values represent the maximum local workgroup size in the X,
+    Y, and Z dimensions, respectively.
+    The pname:x, pname:y, and pname:z sizes, as specified by the
+    code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the code:WorkgroupSize
+    decoration in shader modules, must: be less than or equal to the
+    corresponding limit.
+  * pname:maxMeshTotalMemorySize is the maximum number of bytes that the
+    mesh shader can use in total for shared and output memory combined.
+  * pname:maxMeshOutputVertices is the maximum number of vertices a mesh
+    shader output can store.
+  * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh
+    shader output can store.
+  * pname:maxMeshMultiviewViewCount is the maximum number of multiview views
+    a mesh shader can use.
+  * pname:meshOutputPerVertexGranularity is the granularity with which mesh
+    vertex outputs are allocated.
+    The value can be used to compute the memory size used by the mesh
+    shader, which must be less than or equal to
+    pname:maxMeshTotalMemorySize.
+  * pname:meshOutputPerPrimitiveGranularity is the granularity with which
+    mesh outputs qualified as per-primitive are allocated.
+    The value can be used to compute the memory size used by the mesh
+    shader, which must be less than or equal to
+    pname:maxMeshTotalMemorySize.
+
+:refpage: VkPhysicalDeviceMeshShaderPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[]
+--
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+
+[open,refpage='VkPhysicalDeviceMeshShaderPropertiesEXT',desc='Structure describing mesh shading properties',type='structs']
+--
+The sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure
+describe the following implementation-dependent limits:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxTaskWorkGroupTotalCount]] pname:maxTaskWorkGroupTotalCount
+    is the maximum number of total local workgroups that can: be launched by
+    a single mesh tasks drawing command.
+    See <<drawing-mesh-shading>>.
+  * [[limits-maxTaskWorkGroupCount]] pname:maxTaskWorkGroupCount[3] is the
+    maximum number of local workgroups that can: be launched by a single
+    mesh tasks drawing command.
+    These three values represent the maximum number of local workgroups for
+    the X, Y, and Z dimensions, respectively.
+    The workgroup count parameters to the drawing commands must: be less
+    than or equal to the corresponding limit.
+    The product of these dimensions must: be less than or equal to
+    pname:maxTaskWorkGroupTotalCount.
+  * [[limits-maxTaskWorkGroupInvocations]] pname:maxTaskWorkGroupInvocations
+    is the maximum total number of task shader invocations in a single local
+    workgroup.
+    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
+ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode in shader modules or by the object decorated by the
+    code:WorkgroupSize decoration, must: be less than or equal to this
+    limit.
+  * [[limits-maxTaskWorkGroupSize]] pname:maxTaskWorkGroupSize[3] is the
+    maximum size of a local task workgroup, per dimension.
+    These three values represent the maximum local workgroup size in the X,
+    Y, and Z dimensions, respectively.
+    The pname:x, pname:y, and pname:z sizes, as specified by the
+    code:LocalSize
+ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the code:WorkgroupSize
+    decoration in shader modules, must: be less than or equal to the
+    corresponding limit.
+  * [[limits-maxTaskPayloadSize]] pname:maxTaskPayloadSize is the maximum
+    total storage size, in bytes, available for variables declared with the
+    code:TaskPayloadWorkgroupEXT storage class in shader modules in the task
+    shader stage.
+  * [[limits-maxTaskSharedMemorySize]] pname:maxTaskSharedMemorySize is the
+    maximum total storage size, in bytes, available for variables declared
+    with the code:Workgroup storage class in shader modules in the task
+    shader stage.
+  * [[limits-maxTaskPayloadAndSharedMemorySize]]
+    pname:maxTaskPayloadAndSharedMemorySize is the maximum total storage
+    size, in bytes, available for variables that are declared with the
+    code:TaskPayloadWorkgroupEXT or code:Workgroup storage class, in shader
+    modules in the task shader stage.
+  * [[limits-maxMeshWorkGroupTotalCount]] pname:maxMeshWorkGroupTotalCount
+    is the maximum number of local output tasks a single task shader
+    workgroup can emit.
+  * [[limits-maxMeshWorkGroupCount]] pname:maxMeshWorkGroupCount[3] is the
+    maximum number of local output tasks a single task shader workgroup can
+    emit, per dimension.
+    These three values represent the maximum number of local output tasks
+    for the X, Y, and Z dimensions, respectively.
+    The workgroup count parameters to the code:OpEmitMeshTasksEXT must: be
+    less than or equal to the corresponding limit.
+    The product of these dimensions must: be less than or equal to
+    pname:maxMeshWorkGroupTotalCount.
+  * [[limits-maxMeshWorkGroupInvocations]] pname:maxMeshWorkGroupInvocations
+    is the maximum total number of mesh shader invocations in a single local
+    workgroup.
+    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
+ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode in shader modules or by the object decorated by the
+    code:WorkgroupSize decoration, must: be less than or equal to this
+    limit.
+  * [[limits-maxMeshWorkGroupSize]] pname:maxMeshWorkGroupSize[3] is the
+    maximum size of a local mesh workgroup, per dimension.
+    These three values represent the maximum local workgroup size in the X,
+    Y, and Z dimensions, respectively.
+    The pname:x, pname:y, and pname:z sizes, as specified by the
+    code:LocalSize
+ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the code:WorkgroupSize
+    decoration in shader modules, must: be less than or equal to the
+    corresponding limit.
+  * [[limits-maxMeshSharedMemorySize]] pname:maxMeshSharedMemorySize is the
+    maximum total storage size, in bytes, available for variables declared
+    with the code:Workgroup storage class in shader modules in the mesh
+    shader stage.
+  * [[limits-maxMeshPayloadAndSharedMemorySize]]
+    pname:maxMeshPayloadAndSharedMemorySize is the maximum total storage
+    size, in bytes, available for variables that are declared with the
+    code:TaskPayloadWorkgroupEXT or code:Workgroup storage class in shader
+    modules in the mesh shader stage.
+  * [[limits-maxMeshOutputMemorySize]] pname:maxMeshOutputMemorySize is the
+    maximum total storage size, in bytes, available for output variables in
+    shader modules in the mesh shader stage, according to the formula in
+    <<mesh-output, Mesh Shader Output>>.
+  * [[limits-maxMeshPayloadAndOutputMemorySize]]
+    pname:maxMeshPayloadAndOutputMemorySize is the maximum total storage
+    size, in bytes, available for variables that are declared with the
+    code:TaskPayloadWorkgroupEXT storage class, or output variables in
+    shader modules in the mesh shader stage, according to the formula in
+    <<mesh-output, Mesh Shader Output>>.
+  * [[limits-maxMeshOutputComponents]] pname:maxMeshOutputComponents is the
+    maximum number of components of output variables which can: be output
+    from the mesh shader stage.
+  * [[limits-maxMeshOutputVertices]] pname:maxMeshOutputVertices is the
+    maximum number of vertices which can: be emitted by a single mesh shader
+    workgroup.
+  * [[limits-maxMeshOutputPrimitives]] pname:maxMeshOutputPrimitives is the
+    maximum number of primitives which can: be emitted by a single mesh
+    shader workgroup.
+  * [[limits-maxMeshOutputLayers]] pname:maxMeshOutputLayers is one greater
+    than the maximum layer index that can: be output from the mesh shader
+    stage.
+  * [[limits-maxMeshMultiviewViewCount]] pname:maxMeshMultiviewViewCount is
+    one greater than the maximum view index that can: be used by any mesh
+    shader.
+  * [[limits-meshOutputPerVertexGranularity]]
+    pname:meshOutputPerVertexGranularity is the granularity of vertex
+    allocation.
+    The number of output vertices allocated for the mesh shader stage is
+    padded to a multiple of this number.
+    The value can be used to calculate the required storage size for output
+    variables in shader modules in the mesh shader stage, which must: be
+    less than or equal to pname:maxMeshOutputMemorySize.
+  * [[limits-meshOutputPerPrimitiveGranularity]]
+    pname:meshOutputPerPrimitiveGranularity is the granularity of primitive
+    allocation.
+    The number of output primitives allocated for the mesh shader stage is
+    padded to a multiple of this number.
+    The value can be used to calculate the required storage size for output
+    variables in shader modules in the mesh shader stage, which must: be
+    less than or equal to pname:maxMeshOutputMemorySize.
+  * [[limits-maxPreferredTaskWorkGroupInvocations]]
+    pname:maxPreferredTaskWorkGroupInvocations is the maximum number of task
+    shader invocations in a single workgroup that is preferred by the
+    implementation for optimal performance.
+    The value is guaranteed to be a multiple of a supported subgroup size
+    for the task shader stage.
+  * [[limits-maxPreferredMeshWorkGroupInvocations]]
+    pname:maxPreferredMeshWorkGroupInvocations is the maximum number of mesh
+    shader invocations in a single workgroup that is preferred by the
+    implementation for optimal performance.
+    The value is guaranteed to be a multiple of a supported subgroup size
+    for the mesh shader stage.
+  * [[limits-prefersLocalInvocationVertexOutput]]
+    pname:prefersLocalInvocationVertexOutput specifies whether writes to the
+    vertex output array in a mesh shader yield best performance when the
+    array index matches code:LocalInvocationIndex.
+  * [[limits-prefersLocalInvocationPrimitiveOutput]]
+    pname:prefersLocalInvocationPrimitiveOutput specifies whether writes to
+    the primitive output array in a mesh shader yield best performance when
+    the array index matches code:LocalInvocationIndex.
+  * [[limits-prefersCompactVertexOutput]] pname:prefersCompactVertexOutput
+    specifies whether output vertices should be compacted after custom
+    culling in the mesh shader for best performance, otherwise keeping the
+    vertices at their original location may be better.
+  * [[limits-prefersCompactPrimitiveOutput]]
+    pname:prefersCompactPrimitiveOutput specifies whether output primitives
+    should be compacted after custom culling in the mesh shader for best
+    performance, otherwise the use of code:CullPrimitiveEXT may be better.
+
+If the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is included
+in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
+with the implementation-dependent limits.
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+[open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT']
+--
+The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.adoc[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_EXT_descriptor_indexing-properties[]
+  * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]]
+    pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
+    descriptors (summed over all descriptor types) that can: be created
+    across all pools that are created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
+    Pool creation may: fail when this limit is exceeded, or when the space
+    this limit represents is unable to satisfy a pool creation due to
+    fragmentation.
+  * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]]
+    pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
+    value indicating whether uniform buffer descriptors natively support
+    nonuniform indexing.
+    If this is ename:VK_FALSE, then a single dynamic instance of an
+    instruction that nonuniformly indexes an array of uniform buffers may:
+    execute multiple times in order to access all the descriptors.
+  * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]]
+    pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
+    indicating whether sampler and image descriptors natively support
+    nonuniform indexing.
+    If this is ename:VK_FALSE, then a single dynamic instance of an
+    instruction that nonuniformly indexes an array of samplers or images
+    may: execute multiple times in order to access all the descriptors.
+  * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]]
+    pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
+    value indicating whether storage buffer descriptors natively support
+    nonuniform indexing.
+    If this is ename:VK_FALSE, then a single dynamic instance of an
+    instruction that nonuniformly indexes an array of storage buffers may:
+    execute multiple times in order to access all the descriptors.
+  * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]]
+    pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
+    indicating whether storage image descriptors natively support nonuniform
+    indexing.
+    If this is ename:VK_FALSE, then a single dynamic instance of an
+    instruction that nonuniformly indexes an array of storage images may:
+    execute multiple times in order to access all the descriptors.
+  * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
+    pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
+    value indicating whether input attachment descriptors natively support
+    nonuniform indexing.
+    If this is ename:VK_FALSE, then a single dynamic instance of an
+    instruction that nonuniformly indexes an array of input attachments may:
+    execute multiple times in order to access all the descriptors.
+  * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]]
+    pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
+    whether <<features-robustBufferAccess, pname:robustBufferAccess>> can:
+    be enabled on a device simultaneously with
+    pname:descriptorBindingUniformBufferUpdateAfterBind,
+    pname:descriptorBindingStorageBufferUpdateAfterBind,
+    pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
+    pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
+    If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
+    disabled or all of these update-after-bind features must: be disabled.
+  * [[{anchor-prefix}limits-quadDivergentImplicitLod]]
+    pname:quadDivergentImplicitLod is a boolean value indicating whether
+    implicit LOD calculations for image operations have well-defined results
+    when the image and/or sampler objects used for the instruction are not
+    uniform within a quad.
+    See <<textures-derivative-image-operations,Derivative Image
+    Operations>>.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
+    pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
+    pname:maxPerStageDescriptorSamplers but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
+    pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
+    pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
+    pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
+    pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
+    pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
+    pname:maxPerStageDescriptorSampledImages but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
+    pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
+    pname:maxPerStageDescriptorStorageImages but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
+    pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
+    pname:maxPerStageDescriptorInputAttachments but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]]
+    pname:maxPerStageUpdateAfterBindResources is similar to
+    pname:maxPerStageResources but counts descriptors from descriptor sets
+    created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]]
+    pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
+    pname:maxDescriptorSetSamplers but counts descriptors from descriptor
+    sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
+    pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
+    pname:maxDescriptorSetUniformBuffers but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
+    pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
+    pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+    While an application can: allocate dynamic uniform buffer descriptors
+    from a pool created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
+    bindings for these descriptors must: not be present in any descriptor
+    set layout that includes bindings created with
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
+    pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
+    pname:maxDescriptorSetStorageBuffers but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
+    pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
+    pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+    While an application can: allocate dynamic storage buffer descriptors
+    from a pool created with the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
+    bindings for these descriptors must: not be present in any descriptor
+    set layout that includes bindings created with
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]]
+    pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
+    pname:maxDescriptorSetSampledImages but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]]
+    pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
+    pname:maxDescriptorSetStorageImages but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
+    pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
+    pname:maxDescriptorSetInputAttachments but counts descriptors from
+    descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+// end::VK_EXT_descriptor_indexing-properties[]
+
+:refpage: VkPhysicalDeviceDescriptorIndexingProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+[open,refpage='VkPhysicalDeviceInlineUniformBlockProperties',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceInlineUniformBlockPropertiesEXT']
+--
+The sname:VkPhysicalDeviceInlineUniformBlockProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.adoc[]
+endif::VK_EXT_inline_uniform_block[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_inline_uniform_block-properties[]
+  * [[{anchor-prefix}limits-maxInlineUniformBlockSize]]
+    pname:maxInlineUniformBlockSize is the maximum size in bytes of an
+    <<descriptorsets-inlineuniformblock, inline uniform block>> binding.
+  * [[{anchor-prefix}limits-maxPerStageDescriptorInlineUniformBlocks]]
+    pname:maxPerStageDescriptorInlineUniformBlocks is the maximum number of
+    inline uniform block bindings that can: be accessible to a single shader
+    stage in a pipeline layout.
+    Descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptor bindings in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]]
+    pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved
+    for future use.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts
+    descriptor bindings from descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[{anchor-prefix}limits-maxDescriptorSetInlineUniformBlocks]]
+    pname:maxDescriptorSetInlineUniformBlocks is the maximum number of
+    inline uniform block bindings that can: be included in descriptor
+    bindings in a pipeline layout across all pipeline shader stages and
+    descriptor set numbers.
+    Descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    Only descriptor bindings in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]]
+    pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for
+    future use.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+    is similar to pname:maxDescriptorSetInlineUniformBlocks but counts
+    descriptor bindings from descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+// end::VK_EXT_inline_uniform_block-properties[]
+
+:refpage: VkPhysicalDeviceInlineUniformBlockProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+
+ifdef::VK_EXT_conservative_rasterization[]
+[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize
+    is the size in pixels the generating primitive is increased at each of
+    its edges during conservative rasterization overestimation mode.
+    Even with a size of 0.0, conservative rasterization overestimation rules
+    still apply and if any part of the pixel rectangle is covered by the
+    generating primitive, fragments are generated for the entire pixel.
+    However implementations may: make the pixel coverage area even more
+    conservative by increasing the size of the generating primitive.
+  * [[limits-maxExtraPrimitiveOverestimationSize]]
+    pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels
+    of extra overestimation the implementation supports in the pipeline
+    state.
+    A value of 0.0 means the implementation does not support any additional
+    overestimation of the generating primitive during conservative
+    rasterization.
+    A value above 0.0 allows the application to further increase the size of
+    the generating primitive during conservative rasterization
+    overestimation.
+  * [[limits-extraPrimitiveOverestimationSizeGranularity]]
+    pname:extraPrimitiveOverestimationSizeGranularity is the granularity of
+    extra overestimation that can be specified in the pipeline state between
+    0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive.
+    A value of 0.0 means the implementation can use the smallest
+    representable non-zero value in the screen space pixel fixed-point grid.
+  * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is
+    ename:VK_TRUE if the implementation supports the
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative
+    rasterization mode in addition to
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
+    Otherwise the implementation only supports
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
+  * [[limits-conservativePointAndLineRasterization]]
+    pname:conservativePointAndLineRasterization is ename:VK_TRUE if the
+    implementation supports conservative rasterization of point and line
+    primitives as well as triangle primitives.
+    Otherwise the implementation only supports triangle primitives.
+  * [[limits-degenerateTrianglesRasterized]]
+    pname:degenerateTrianglesRasterized is ename:VK_FALSE if the
+    implementation culls primitives generated from triangles that become
+    zero area after they are quantized to the fixed-point rasterization
+    pixel grid.
+    pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives
+    are not culled and the provoking vertex attributes and depth value are
+    used for the fragments.
+    The primitive area calculation is done on the primitive generated from
+    the clipped triangle if applicable.
+    Zero area primitives are backfacing and the application can: enable
+    backface culling if desired.
+  * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is
+    ename:VK_FALSE if the implementation culls lines that become zero length
+    after they are quantized to the fixed-point rasterization pixel grid.
+    pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines
+    are not culled and the provoking vertex attributes and depth value are
+    used for the fragments.
+  * [[limits-fullyCoveredFragmentShaderInputVariable]]
+    pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the
+    implementation supports the SPIR-V builtin fragment shader input
+    variable code:FullyCoveredEXT specifying that conservative rasterization
+    is enabled and the fragment area is fully covered by the generating
+    primitive.
+  * [[limits-conservativeRasterizationPostDepthCoverage]]
+ifdef::VK_EXT_post_depth_coverage[]
+    pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the
+    implementation supports conservative rasterization with the
+    code:PostDepthCoverage execution mode enabled.
+    Otherwise the code:PostDepthCoverage execution mode must: not be used
+    when conservative rasterization is enabled.
+endif::VK_EXT_post_depth_coverage[]
+ifndef::VK_EXT_post_depth_coverage[]
+    pname:conservativeRasterizationPostDepthCoverage must: be
+    ename:VK_FALSE.
+endif::VK_EXT_post_depth_coverage[]
+
+:refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[]
+--
+endif::VK_EXT_conservative_rasterization[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-minFragmentDensityTexelSize]] pname:minFragmentDensityTexelSize
+    is the minimum <<glossary-fragment-density-texel-size,fragment density
+    texel size>>.
+  * [[limits-maxFragmentDensityTexelSize]] pname:maxFragmentDensityTexelSize
+    is the maximum fragment density texel size.
+  * [[limits-fragmentDensityInvocations]] pname:fragmentDensityInvocations
+    specifies whether the implementation may: invoke additional fragment
+    shader invocations for each covered sample.
+
+:refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[]
+--
+
+ifdef::VK_EXT_fragment_density_map2[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing
+    image data read with load operations on subsampled attachments will be
+    resampled to the fragment density of the render pass
+  * [[limits-subsampledCoarseReconstructionEarlyAccess]]
+    pname:subsampledCoarseReconstructionEarlyAccess specifies if performing
+    image data read with samplers created with pname:flags containing
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in
+    fragment shader will trigger additional reads during
+    ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
+  * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is
+    the maximum number of slink:VkImageView array layers for usages
+    supporting subsampled samplers
+  * [[limits-maxDescriptorSetSubsampledSamplers]]
+    pname:maxDescriptorSetSubsampledSamplers is the maximum number of
+    subsampled samplers that can: be included in a slink:VkPipelineLayout
+
+:refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[]
+--
+endif::VK_EXT_fragment_density_map2[]
+
+ifdef::VK_QCOM_fragment_density_map_offset[]
+[open,refpage='VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM',desc='Structure describing fragment density map offset properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-fragmentdensityoffsetgranularity]]
+    pname:fragmentDensityOffsetGranularity is the granularity for
+    <<renderpass-fragmentdensitymapoffsets,fragment density offsets>>.
+
+:refpage: VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[]
+--
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_AMD_shader_core_properties[]
+[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned
+    integer value indicating the number of shader engines found inside the
+    shader core of the physical device.
+  * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount
+    is an unsigned integer value indicating the number of shader arrays
+    inside a shader engine.
+    Each shader array has its own scan converter, set of compute units, and
+    a render back end (color and depth attachments).
+    Shader arrays within a shader engine share shader processor input (wave
+    launcher) and shader export (export buffer) units.
+    Currently, a shader engine can have one or two shader arrays.
+  * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray
+    is an unsigned integer value indicating the physical number of compute
+    units within a shader array.
+    The active number of compute units in a shader array may: be lower.
+    A compute unit houses a set of SIMDs along with a sequencer module and a
+    local data store.
+  * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned
+    integer value indicating the number of SIMDs inside a compute unit.
+    Each SIMD processes a single instruction at a time.
+  * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer
+    value indicating the maximum size of a subgroup.
+  * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value
+    indicating the number of physical Scalar General-Purpose Registers
+    (SGPRs) per SIMD.
+  * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned
+    integer value indicating the minimum number of SGPRs allocated for a
+    wave.
+  * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned
+    integer value indicating the maximum number of SGPRs allocated for a
+    wave.
+  * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is
+    an unsigned integer value indicating the granularity of SGPR allocation
+    for a wave.
+  * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value
+    indicating the number of physical Vector General-Purpose Registers
+    (VGPRs) per SIMD.
+  * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned
+    integer value indicating the minimum number of VGPRs allocated for a
+    wave.
+  * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned
+    integer value indicating the maximum number of VGPRs allocated for a
+    wave.
+  * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is
+    an unsigned integer value indicating the granularity of VGPR allocation
+    for a wave.
+
+:refpage: VkPhysicalDeviceShaderCorePropertiesAMD
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[]
+--
+endif::VK_AMD_shader_core_properties[]
+
+ifdef::VK_AMD_shader_core_properties2[]
+[open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of
+    elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features
+    supported by the shader core.
+  * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an
+    unsigned integer value indicating the number of compute units that have
+    been enabled.
+
+:refpage: VkPhysicalDeviceShaderCoreProperties2AMD
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[]
+--
+
+[open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD']
+--
+Bits for this type may: be defined by future extensions, or new versions of
+the `apiext:VK_AMD_shader_core_properties2` extension.
+Possible values of the pname:flags member of
+tlink:VkShaderCorePropertiesFlagsAMD are:
+
+include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.adoc[]
+--
+
+[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD']
+--
+include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.adoc[]
+
+tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or
+more elink:VkShaderCorePropertiesFlagBitsAMD.
+--
+endif::VK_AMD_shader_core_properties2[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+[open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR']
+--
+The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.adoc[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_depth_stencil_resolve-properties[]
+  * [[{anchor-prefix}features-depthResolveModes]]
+    pname:supportedDepthResolveModes is a bitmask of
+    elink:VkResolveModeFlagBits indicating the set of supported depth
+    resolve modes.
+ifdef::VKSC_VERSION_1_0[]
+    A value of ename:VK_RESOLVE_MODE_NONE indicates that depth resolve
+    operations are disallowed <<SCID-8>>.
+    If any bits are set then
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkan12Properties::pname:supportedDepthResolveModes
+    may: be only ename:VK_RESOLVE_MODE_NONE <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
+    implementations may: support additional modes.
+  * [[{anchor-prefix}features-stencilResolveModes]]
+    pname:supportedStencilResolveModes is a bitmask of
+    elink:VkResolveModeFlagBits indicating the set of supported stencil
+    resolve modes.
+ifdef::VKSC_VERSION_1_0[]
+    A value of ename:VK_RESOLVE_MODE_NONE indicates that stencil resolve
+    operations are disallowed <<SCID-8>>.
+    If any bits are set then
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceVulkan12Properties::pname:supportedStencilResolveModes
+    may: be only ename:VK_RESOLVE_MODE_NONE <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
+    implementations may: support additional modes.
+    ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set.
+  * [[{anchor-prefix}features-independentResolveNone]]
+    pname:independentResolveNone is ename:VK_TRUE if the implementation
+    supports setting the depth and stencil resolve modes to different values
+    when one of those modes is ename:VK_RESOLVE_MODE_NONE.
+    Otherwise the implementation only supports setting both modes to the
+    same value.
+  * [[{anchor-prefix}features-independentResolve]] pname:independentResolve
+    is ename:VK_TRUE if the implementation supports all combinations of the
+    supported depth and stencil resolve modes, including setting either
+    depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE.
+    An implementation that supports pname:independentResolve must: also
+    support pname:independentResolveNone.
+// end::VK_KHR_depth_stencil_resolve-properties[]
+
+:refpage: VkPhysicalDeviceDepthStencilResolveProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+ifdef::VK_KHR_performance_query[]
+include::{chapters}/VK_KHR_performance_query/props.adoc[]
+endif::VK_KHR_performance_query[]
+
+ifdef::VK_NV_shading_rate_image[]
+[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shadingRateTexelSize]] pname:shadingRateTexelSize indicates the
+    width and height of the portion of the framebuffer corresponding to each
+    texel in the shading rate image.
+  * [[limits-shadingRatePaletteSize]] pname:shadingRatePaletteSize indicates
+    the maximum number of palette entries supported for the shading rate
+    image.
+  * [[limits-shadingRateMaxCoarseSamples]] pname:shadingRateMaxCoarseSamples
+    specifies the maximum number of coverage samples supported in a single
+    fragment.
+    If the product of the fragment size derived from the base shading rate
+    and the number of coverage samples per pixel exceeds this limit, the
+    final shading rate will be adjusted so that its product does not exceed
+    the limit.
+
+:refpage: VkPhysicalDeviceShadingRateImagePropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties are related to the <<primsrast-shading-rate-image, shading
+rate image>> feature.
+
+include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[]
+--
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_NV_memory_decompression[]
+[open,refpage='VkPhysicalDeviceMemoryDecompressionPropertiesNV',desc='Structure describing supported memory decompression methods by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryDecompressionPropertiesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:decompressionMethods is a bitmask of
+    elink:VkMemoryDecompressionMethodFlagBitsNV specifying memory
+    decompression methods supported by the implementation.
+  * pname:maxDecompressionIndirectCount specifies the maximum supported
+    count value in the pname:countBuffer of
+    flink:vkCmdDecompressMemoryIndirectCountNV
+
+:refpage: VkPhysicalDeviceMemoryDecompressionPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[]
+--
+endif::VK_NV_memory_decompression[]
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams
+    is the maximum number of vertex streams that can be output from geometry
+    shaders declared with the code:GeometryStreams capability.
+    If the implementation does not support
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
+    then pname:maxTransformFeedbackStreams must: be set to `1`.
+  * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers
+    is the maximum number of transform feedback buffers that can be bound
+    for capturing shader outputs from the last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>.
+  * [[limits-maxTransformFeedbackBufferSize]]
+    pname:maxTransformFeedbackBufferSize is the maximum size that can be
+    specified when binding a buffer for transform feedback in
+    flink:vkCmdBindTransformFeedbackBuffersEXT.
+  * [[limits-maxTransformFeedbackStreamDataSize]]
+    pname:maxTransformFeedbackStreamDataSize is the maximum amount of data
+    in bytes for each vertex that captured to one or more transform feedback
+    buffers associated with a specific vertex stream.
+  * [[limits-maxTransformFeedbackBufferDataSize]]
+    pname:maxTransformFeedbackBufferDataSize is the maximum amount of data
+    in bytes for each vertex that can be captured to a specific transform
+    feedback buffer.
+  * [[limits-maxTransformFeedbackBufferDataStride]]
+    pname:maxTransformFeedbackBufferDataStride is the maximum stride between
+    each capture of vertex data to the buffer.
+  * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is
+    ename:VK_TRUE if the implementation supports the
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type.
+    pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type
+    cannot: be created.
+  * [[limits-transformFeedbackStreamsLinesTriangles]]
+    pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the
+    implementation supports the geometry shader code:OpExecutionMode of
+    code:OutputLineStrip and code:OutputTriangleStrip in addition to
+    code:OutputPoints when more than one vertex stream is output.
+    If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the
+    implementation only supports an code:OpExecutionMode of
+    code:OutputPoints when more than one vertex stream is output from the
+    geometry shader.
+  * [[limits-transformFeedbackRasterizationStreamSelect]]
+    pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the
+    implementation supports the code:GeometryStreams SPIR-V capability and
+    the application can use
+    slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which
+    vertex stream output is used for rasterization.
+    Otherwise vertex stream `0` must: always be used for rasterization.
+  * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is
+    ename:VK_TRUE if the implementation supports the
+    flink:vkCmdDrawIndirectByteCountEXT function otherwise the function
+    must: not be called.
+
+:refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+ifdef::VK_NV_copy_memory_indirect[]
+[open,refpage='VkPhysicalDeviceCopyMemoryIndirectPropertiesNV',desc='Structure describing supported queues for indirect copy',type='structs']
+--
+The sname:VkPhysicalDeviceCopyMemoryIndirectPropertiesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:supportedQueues is a bitmask of elink:VkQueueFlagBits indicating
+    the queues on which <<indirect-copies, indirect copy commands>> are
+    supported.
+
+If the <<features-indirectCopy, pname:indirectCopy>> feature is supported,
+pname:supportedQueues must: return at least one supported queue.
+
+:refpage: VkPhysicalDeviceCopyMemoryIndirectPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[]
+--
+endif::VK_NV_copy_memory_indirect[]
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
+  * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum
+    number of levels of recursion allowed in a trace command.
+  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
+    between shader groups in the shader binding table.
+  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
+    the base of the shader binding table.
+  * pname:maxGeometryCount is the maximum number of geometries in the bottom
+    level acceleration structure.
+  * pname:maxInstanceCount is the maximum number of instances in the top
+    level acceleration structure.
+  * pname:maxTriangleCount is the maximum number of triangles in all
+    geometries in the bottom level acceleration structure.
+  * pname:maxDescriptorSetAccelerationStructures is the maximum number of
+    acceleration structure descriptors that are allowed in a descriptor set.
+
+Due to the fact that the geometry, instance, and triangle counts are
+specified at acceleration structure creation as 32-bit values,
+pname:maxGeometryCount, pname:maxInstanceCount, and pname:maxTriangleCount
+must: not exceed [eq]#2^32^-1#.
+
+:refpage: VkPhysicalDeviceRayTracingPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+Limits specified by this structure must: match those specified with the same
+name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and
+slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs']
+--
+The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxGeometryCount]] pname:maxGeometryCount is the maximum number
+    of geometries in the bottom level acceleration structure.
+  * [[limits-maxInstanceCount]] pname:maxInstanceCount is the maximum number
+    of instances in the top level acceleration structure.
+  * [[limits-maxPrimitiveCount]] pname:maxPrimitiveCount is the maximum
+    number of triangles or AABBs in all geometries in the bottom level
+    acceleration structure.
+  * [[limits-maxPerStageDescriptorAccelerationStructures]]
+    pname:maxPerStageDescriptorAccelerationStructures is the maximum number
+    of acceleration structure bindings that can: be accessible to a single
+    shader stage in a pipeline layout.
+    Descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
+    limit.
+    Only descriptor bindings in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+  * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]]
+    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is
+    similar to pname:maxPerStageDescriptorAccelerationStructures but counts
+    descriptor bindings from descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[limits-maxDescriptorSetAccelerationStructures]]
+    pname:maxDescriptorSetAccelerationStructures is the maximum number of
+    acceleration structure descriptors that can: be included in descriptor
+    bindings in a pipeline layout across all pipeline shader stages and
+    descriptor set numbers.
+    Descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
+    limit.
+    Only descriptor bindings in descriptor set layouts created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
+    count against this limit.
+  * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]]
+    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar
+    to pname:maxDescriptorSetAccelerationStructures but counts descriptor
+    bindings from descriptor sets created with or without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
+    set.
+  * [[limits-minAccelerationStructureScratchOffsetAlignment]]
+    pname:minAccelerationStructureScratchOffsetAlignment is the minimum
+    required: alignment, in bytes, for scratch data passed in to an
+    acceleration structure build command.
+    The value must: be a power of two.
+
+Due to the fact that the geometry, instance, and primitive counts are
+specified at acceleration structure creation as 32-bit values,
+<<limits-maxGeometryCount, pname:maxGeometryCount>>,
+<<limits-maxInstanceCount, pname:maxInstanceCount>>, and
+<<limits-maxPrimitiveCount, pname:maxPrimitiveCount>> must: not exceed
+[eq]#2^32^-1#.
+
+:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+ifdef::VK_NV_ray_tracing[]
+Limits specified by this structure must: match those specified with the same
+name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
+endif::VK_NV_ray_tracing[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
+  * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the
+    maximum number of levels of ray recursion allowed in a trace command.
+  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
+    between shader groups in the shader binding table.
+  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
+    the base of the shader binding table.
+  * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the
+    information required to do capture and replay for shader group handles.
+  * pname:maxRayDispatchInvocationCount is the maximum number of ray
+    generation shader invocations which may: be produced by a single
+    flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command.
+  * pname:shaderGroupHandleAlignment is the required: alignment in bytes for
+    each shader binding table entry.
+    The value must: be a power of two.
+  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
+    attribute structure
+
+:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+ifdef::VK_NV_ray_tracing[]
+Limits specified by this structure must: match those specified with the same
+name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
+endif::VK_NV_ray_tracing[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_cooperative_matrix[]
+[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-cooperativeMatrixSupportedStages-NV]]
+    pname:cooperativeMatrixSupportedStages is a bitfield of
+    elink:VkShaderStageFlagBits describing the shader stages that
+    cooperative matrix instructions are supported in.
+    pname:cooperativeMatrixSupportedStages will have the
+    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
+    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
+
+:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
+--
+endif::VK_NV_cooperative_matrix[]
+
+ifdef::VK_KHR_cooperative_matrix[]
+[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesKHR',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCooperativeMatrixPropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-cooperativeMatrixSupportedStages]]
+    pname:cooperativeMatrixSupportedStages is a bitfield of
+    elink:VkShaderStageFlagBits describing the shader stages that
+    cooperative matrix instructions are supported in.
+    pname:cooperativeMatrixSupportedStages will have the
+    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
+    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
+
+:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
+--
+endif::VK_KHR_cooperative_matrix[]
+
+ifdef::VK_NV_shader_sm_builtins[]
+[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the
+    device.
+  * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number
+    of simultaneously executing warps on an SM.
+
+:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[]
+--
+endif::VK_NV_shader_sm_builtins[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+[open,refpage='VkPhysicalDeviceTexelBufferAlignmentProperties',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs',alias='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT']
+--
+The sname:VkPhysicalDeviceTexelBufferAlignmentProperties structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[]
+
+ifdef::VK_EXT_texel_buffer_alignment[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.adoc[]
+endif::VK_EXT_texel_buffer_alignment[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_3[:anchor-prefix:]
+// tag::VK_EXT_texel_buffer_alignment-properties[]
+  * [[{anchor-prefix}limits-storageTexelBufferOffsetAlignmentBytes]]
+    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
+    sufficient for a storage texel buffer of any format.
+    The value must: be a power of two.
+  * [[{anchor-prefix}limits-storageTexelBufferOffsetSingleTexelAlignment]]
+    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
+    single texel alignment is sufficient for a storage texel buffer of any
+    format.
+  * [[{anchor-prefix}limits-uniformTexelBufferOffsetAlignmentBytes]]
+    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
+    sufficient for a uniform texel buffer of any format.
+    The value must: be a power of two.
+  * [[{anchor-prefix}limits-uniformTexelBufferOffsetSingleTexelAlignment]]
+    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
+    single texel alignment is sufficient for a uniform texel buffer of any
+    format.
+// end::VK_EXT_texel_buffer_alignment-properties[]
+
+:refpage: VkPhysicalDeviceTexelBufferAlignmentProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+If the single texel alignment property is ename:VK_FALSE, then the buffer
+view's offset must: be aligned to the corresponding byte alignment value.
+If the single texel alignment property is ename:VK_TRUE, then the buffer
+view's offset must: be aligned to the lesser of the corresponding byte
+alignment value or the size of a single texel, based on
+slink:VkBufferViewCreateInfo::pname:format.
+If the size of a single texel is a multiple of three bytes, then the size of
+a single component of the format is used instead.
+
+These limits must: not advertise a larger alignment than the
+<<limits-required, required>> maximum minimum value of
+slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any
+format that supports use as a texel buffer.
+
+include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR']
+--
+The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+// Must have preceding whitespace
+ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
+ifndef::VK_VERSION_1_2[:anchor-prefix:]
+// tag::VK_KHR_timeline_semaphore-properties[]
+  * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]]
+    pname:maxTimelineSemaphoreValueDifference indicates the maximum
+    difference allowed by the implementation between the current value of a
+    timeline semaphore and any pending signal or wait operations.
+// end::VK_KHR_timeline_semaphore-properties[]
+
+:refpage: VkPhysicalDeviceTimelineSemaphoreProperties
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_EXT_line_rasterization[]
+[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is
+    the number of bits of subpixel precision in framebuffer coordinates
+    [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line
+    segments>>.
+
+:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[]
+--
+endif::VK_EXT_line_rasterization[]
+
+ifdef::VK_EXT_robustness2[]
+[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-robustStorageBufferAccessSizeAlignment]]
+    pname:robustStorageBufferAccessSizeAlignment is the number of bytes that
+    the range of a storage buffer descriptor is rounded up to when used for
+    bounds-checking when the <<features-robustBufferAccess2,
+    pname:robustBufferAccess2>> feature is enabled.
+    This value must: be either 1 or 4.
+  * [[limits-robustUniformBufferAccessSizeAlignment]]
+    pname:robustUniformBufferAccessSizeAlignment is the number of bytes that
+    the range of a uniform buffer descriptor is rounded up to when used for
+    bounds-checking when the <<features-robustBufferAccess2,
+    pname:robustBufferAccess2>> feature is enabled.
+    This value must: be a power of two in the range [1, 256].
+
+:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[]
+--
+endif::VK_EXT_robustness2[]
+
+ifdef::VK_NV_device_generated_commands[]
+[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups
+    in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV.
+  * pname:maxIndirectSequenceCount is the maximum number of sequences in
+    slink:VkGeneratedCommandsInfoNV and in
+    slink:VkGeneratedCommandsMemoryRequirementsInfoNV.
+  * pname:maxIndirectCommandsTokenCount is the maximum number of tokens in
+    slink:VkIndirectCommandsLayoutCreateInfoNV.
+  * pname:maxIndirectCommandsStreamCount is the maximum number of streams in
+    slink:VkIndirectCommandsLayoutCreateInfoNV.
+  * pname:maxIndirectCommandsTokenOffset is the maximum offset in
+    slink:VkIndirectCommandsLayoutTokenNV.
+  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
+    slink:VkIndirectCommandsLayoutCreateInfoNV.
+  * pname:minSequencesCountBufferOffsetAlignment is the minimum alignment
+    for memory addresses which can: be used in
+    slink:VkGeneratedCommandsInfoNV.
+  * pname:minSequencesIndexBufferOffsetAlignment is the minimum alignment
+    for memory addresses which can: be used in
+    slink:VkGeneratedCommandsInfoNV.
+  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
+    for memory addresses used in slink:VkIndirectCommandsStreamNV, and as
+    preprocess buffer in slink:VkGeneratedCommandsInfoNV.
+
+:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[]
+--
+
+endif::VK_NV_device_generated_commands[]
+
+ifdef::VK_KHR_portability_subset[]
+[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs']
+--
+The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-minVertexInputBindingStrideAlignment]]
+    pname:minVertexInputBindingStrideAlignment indicates the minimum
+    alignment for vertex input strides.
+    slink:VkVertexInputBindingDescription::pname:stride must: be a multiple
+    of, and at least as large as, this value.
+    The value must: be a power of two.
+
+:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[]
+--
+endif::VK_KHR_portability_subset[]
+
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-minFragmentShadingRateAttachmentTexelSize]]
+    pname:minFragmentShadingRateAttachmentTexelSize indicates minimum
+    supported width and height of the portion of the framebuffer
+    corresponding to each texel in a fragment shading rate attachment.
+    Each value must: be less than or equal to the values in
+    pname:maxFragmentShadingRateAttachmentTexelSize.
+    Each value must: be a power-of-two.
+    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not supported.
+  * [[limits-maxFragmentShadingRateAttachmentTexelSize]]
+    pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum
+    supported width and height of the portion of the framebuffer
+    corresponding to each texel in a fragment shading rate attachment.
+    Each value must: be greater than or equal to the values in
+    pname:minFragmentShadingRateAttachmentTexelSize.
+    Each value must: be a power-of-two.
+    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not supported.
+  * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]]
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the
+    maximum ratio between the width and height of the portion of the
+    framebuffer corresponding to each texel in a fragment shading rate
+    attachment.
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a
+    power-of-two value, and must: be less than or equal to
+    [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width /
+    pname:minFragmentShadingRateAttachmentTexelSize.height,
+    pname:maxFragmentShadingRateAttachmentTexelSize.height /
+    pname:minFragmentShadingRateAttachmentTexelSize.width)#.
+    It must: be 0 if the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not supported.
+  * [[limits-primitiveFragmentShadingRateWithMultipleViewports]]
+    pname:primitiveFragmentShadingRateWithMultipleViewports specifies
+    whether the <<primsrast-fragment-shading-rate-primitive,primitive
+    fragment shading rate>> can: be used when multiple viewports are used.
+    If this value is ename:VK_FALSE, only a single viewport must: be used,
+    and applications must: not write to the
+ifdef::VK_NV_viewport_array2[]
+    code:ViewportMaskNV or
+endif::VK_NV_viewport_array2[]
+    code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR.
+    It must: be ename:VK_FALSE if
+ifdef::VK_VERSION_1_2[]
+    the <<features-shaderOutputViewportIndex,
+    pname:shaderOutputViewportIndex>> feature,
+endif::VK_VERSION_1_2[]
+ifdef::VK_EXT_shader_viewport_index_layer[]
+    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
+endif::VK_EXT_shader_viewport_index_layer[]
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
+    the <<features-geometryShader, pname:geometryShader>> feature is not
+    supported, or if the <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature is not supported.
+  * [[limits-layeredShadingRateAttachments]]
+    pname:layeredShadingRateAttachments specifies whether a shading rate
+    attachment image view can: be created with multiple layers.
+    If this value is ename:VK_FALSE, when creating an image view with a
+    pname:usage that includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+    pname:layerCount must: be `1`.
+    It must: be ename:VK_FALSE if
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+    the <<features-multiview, pname:multiview>> feature,
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_2[]
+    the <<features-shaderOutputViewportIndex,
+    pname:shaderOutputViewportIndex>> feature,
+endif::VK_VERSION_1_2[]
+ifdef::VK_EXT_shader_viewport_index_layer[]
+    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
+endif::VK_EXT_shader_viewport_index_layer[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
+    the <<features-geometryShader, pname:geometryShader>> feature is not
+    supported, or if the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not supported.
+  * [[limits-fragmentShadingRateNonTrivialCombinerOps]]
+    pname:fragmentShadingRateNonTrivialCombinerOps specifies whether
+    elink:VkFragmentShadingRateCombinerOpKHR enums other than
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used.
+    It must: be ename:VK_FALSE unless either the
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is supported.
+  * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum
+    supported width and height of a fragment.
+    Its pname:width and pname:height members must: both be power-of-two
+    values.
+    This limit is purely informational, and is not validated.
+  * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio
+    indicates the maximum ratio between the width and height of a fragment.
+    pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and
+    must: be less than or equal to the maximum of the pname:width and
+    pname:height members of pname:maxFragmentSize.
+    This limit is purely informational, and is not validated.
+  * [[limits-maxFragmentShadingRateCoverageSamples]]
+    pname:maxFragmentShadingRateCoverageSamples specifies the maximum number
+    of coverage samples supported in a single fragment.
+    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
+    to the product of the pname:width and pname:height members of
+    pname:maxFragmentSize, and the sample count reported by
+    pname:maxFragmentShadingRateRasterizationSamples.
+    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
+    to [eq]#pname:maxSampleMaskWords {times} 32# if
+    pname:fragmentShadingRateWithShaderSampleMask is supported.
+    This limit is purely informational, and is not validated.
+  * [[limits-maxFragmentShadingRateRasterizationSamples]]
+    pname:maxFragmentShadingRateRasterizationSamples is a
+    elink:VkSampleCountFlagBits value specifying the maximum sample rate
+    supported when a fragment covers multiple pixels.
+    This limit is purely informational, and is not validated.
+  * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]]
+    pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether
+    the implementation supports writing code:FragDepth
+ifdef::VK_EXT_shader_stencil_export[]
+    or code:FragStencilRefEXT
+endif::VK_EXT_shader_stencil_export[]
+    from a fragment shader for multi-pixel fragments.
+    If this value is ename:VK_FALSE, writing to those built-ins will clamp
+    the fragment shading rate to [eq]#(1,1)#.
+  * [[limits-fragmentShadingRateWithSampleMask]]
+    pname:fragmentShadingRateWithSampleMask specifies whether the
+    implementation supports setting valid bits of
+    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for
+    multi-pixel fragments.
+    If this value is ename:VK_FALSE, zeroing valid bits in the sample mask
+    will clamp the fragment shading rate to [eq]#(1,1)#.
+  * [[limits-fragmentShadingRateWithShaderSampleMask]]
+    pname:fragmentShadingRateWithShaderSampleMask specifies whether the
+    implementation supports reading or writing code:SampleMask for
+    multi-pixel fragments.
+    If this value is ename:VK_FALSE, using that built-in will clamp the
+    fragment shading rate to [eq]#(1,1)#.
+  * [[limits-fragmentShadingRateWithConservativeRasterization]]
+    pname:fragmentShadingRateWithConservativeRasterization
+ifndef::VK_EXT_conservative_rasterization[]
+    is reserved for future use.
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_conservative_rasterization[]
+    specifies whether <<primsrast-conservativeraster, conservative
+    rasterization>> is supported for multi-pixel fragments.
+    It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization`
+    is not supported.
+    If this value is ename:VK_FALSE, using <<primsrast-conservativeraster,
+    conservative rasterization>> will clamp the fragment shading rate to
+    [eq]#(1,1)#.
+endif::VK_EXT_conservative_rasterization[]
+  * [[limits-fragmentShadingRateWithFragmentShaderInterlock]]
+    pname:fragmentShadingRateWithFragmentShaderInterlock
+ifndef::VK_EXT_fragment_shader_interlock[]
+    is reserved for future use.
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_EXT_fragment_shader_interlock[]
+    specifies whether <<fragops-shader-interlock, fragment shader
+    interlock>> is supported for multi-pixel fragments.
+    It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock`
+    is not supported.
+    If this value is ename:VK_FALSE, using <<fragops-shader-interlock,
+    fragment shader interlock>> will clamp the fragment shading rate to
+    [eq]#(1,1)#.
+endif::VK_EXT_fragment_shader_interlock[]
+  * [[limits-fragmentShadingRateWithCustomSampleLocations]]
+    pname:fragmentShadingRateWithCustomSampleLocations
+ifndef::VK_EXT_sample_locations[]
+    is reserved for future use.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_sample_locations[]
+    specifies whether <<primsrast-samplelocations, custom sample locations>>
+    are supported for multi-pixel fragments.
+    It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not
+    supported.
+    If this value is ename:VK_FALSE, using <<primsrast-samplelocations,
+    custom sample locations>> will clamp the fragment shading rate to
+    [eq]#(1,1)#.
+endif::VK_EXT_sample_locations[]
+  * [[limits-fragmentShadingRateStrictMultiplyCombiner]]
+    pname:fragmentShadingRateStrictMultiplyCombiner specifies whether
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
+    multiplication or not.
+    Implementations where this value is ename:VK_FALSE will instead combine
+    rates with an addition.
+    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE,
+    implementations must: report this as ename:VK_FALSE.
+    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE,
+    implementations should: report this as ename:VK_TRUE.
+
+[NOTE]
+.Note
+====
+Multiplication of the combiner rates using the fragment width/height in
+linear space is equivalent to an addition of those values in log2 space.
+Some implementations inadvertently implemented an addition in linear space
+due to unclear requirements originating outside of this specification.
+This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner,
+pname:fragmentShadingRateStrictMultiplyCombiner>> being added.
+Fortunately, this only affects situations where a rate of 1 in either
+dimension is combined with another rate of 1.
+All other combinations result in the exact same result as if multiplication
+was performed in linear space due to the clamping logic, and the fact that
+both the sum and product of 2 and 2 are equal.
+In many cases, this limit will not affect the correct operation of
+applications.
+====
+
+:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties are related to <<primsrast-fragment-shading-rate, fragment
+shading rates>>.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_NV_fragment_shading_rate_enums[]
+[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxFragmentShadingRateInvocationCount]]
+    pname:maxFragmentShadingRateInvocationCount is a
+    elink:VkSampleCountFlagBits value indicating the maximum number of
+    fragment shader invocations per fragment supported in pipeline,
+    primitive, and attachment fragment shading rates.
+
+:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+These properties are related to <<primsrast-fragment-shading-rate, fragment
+shading rates>>.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[]
+--
+endif::VK_NV_fragment_shading_rate_enums[]
+
+ifdef::VK_EXT_custom_border_color[]
+[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[]
+
+  * [[limits-maxCustomBorderColorSamplers]]
+    pname:maxCustomBorderColorSamplers indicates the maximum number of
+    samplers with custom border colors which can: simultaneously exist on a
+    device.
+
+:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[]
+--
+endif::VK_EXT_custom_border_color[]
+
+ifdef::VK_EXT_provoking_vertex[]
+[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-provokingVertexModePerPipeline]]
+    pname:provokingVertexModePerPipeline indicates whether the
+    implementation supports graphics pipelines with different provoking
+    vertex modes within the same render pass instance.
+  * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]]
+    pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates
+    whether the implementation can preserve the provoking vertex order when
+    writing triangle fan vertices to transform feedback.
+
+:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[]
+--
+endif::VK_EXT_provoking_vertex[]
+
+ifdef::VK_EXT_descriptor_buffer[]
+[open,refpage='VkPhysicalDeviceDescriptorBufferPropertiesEXT',desc='Structure describing descriptor buffer properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-combinedImageSamplerDescriptorSingleArray]]
+    pname:combinedImageSamplerDescriptorSingleArray indicates that the
+    implementation does not require an array of
+    `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors to be written
+    into a descriptor buffer as an array of image descriptors, immediately
+    followed by an array of sampler descriptors.
+  * [[limits-bufferlessPushDescriptors]] pname:bufferlessPushDescriptors
+    indicates that the implementation does not require a buffer created with
+    `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` to be bound
+    when using push descriptors.
+  * [[limits-allowSamplerImageViewPostSubmitCreation]]
+    pname:allowSamplerImageViewPostSubmitCreation indicates that the
+    implementation does not restrict when the slink:VkSampler or
+    slink:VkImageView objects used to retrieve descriptor data can: be
+    created in relation to command buffer submission.
+    If this value is ename:VK_FALSE, then the application must: create any
+    slink:VkSampler or slink:VkImageView objects whose descriptor data is
+    accessed during the execution of a command buffer, before the
+    flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    , or flink:vkQueueSubmit2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    call that submits that command buffer.
+  * [[limits-descriptorBufferOffsetAlignment]]
+    pname:descriptorBufferOffsetAlignment indicates the required: alignment
+    in bytes when setting offsets into the descriptor buffer.
+  * [[limits-maxDescriptorBufferBindings]] pname:maxDescriptorBufferBindings
+    indicates the maximum sum total number of descriptor buffers and
+    embedded immutable sampler sets that can: be bound.
+  * [[limits-maxResourceDescriptorBufferBindings]]
+    pname:maxResourceDescriptorBufferBindings indicates the maximum number
+    of resource descriptor buffers that can: be bound.
+  * [[limits-maxSamplerDescriptorBufferBindings]]
+    pname:maxSamplerDescriptorBufferBindings indicates the maximum number of
+    sampler descriptor buffers that can: be bound.
+  * [[limits-maxEmbeddedImmutableSamplerBindings]]
+    pname:maxEmbeddedImmutableSamplerBindings indicates the maximum number
+    of embedded immutable sampler sets that can: be bound.
+  * [[limits-maxEmbeddedImmutableSamplers]]
+    pname:maxEmbeddedImmutableSamplers indicates the maximum number of
+    unique immutable samplers in descriptor set layouts created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+    and pipeline layouts created from them, which can: simultaneously exist
+    on a device.
+  * [[limits-bufferCaptureReplayDescriptorDataSize]]
+    pname:bufferCaptureReplayDescriptorDataSize indicates the maximum size
+    in bytes of the opaque data used for capture and replay with buffers.
+  * [[limits-imageCaptureReplayDescriptorDataSize]]
+    pname:imageCaptureReplayDescriptorDataSize indicates the maximum size in
+    bytes of the opaque data used for capture and replay with images.
+  * [[limits-imageViewCaptureReplayDescriptorDataSize]]
+    pname:imageViewCaptureReplayDescriptorDataSize indicates the maximum
+    size in bytes of the opaque data used for capture and replay with image
+    views.
+  * [[limits-samplerCaptureReplayDescriptorDataSize]]
+    pname:samplerCaptureReplayDescriptorDataSize indicates the maximum size
+    in bytes of the opaque data used for capture and replay with samplers.
+  * [[limits-accelerationStructureCaptureReplayDescriptorDataSize]]
+    pname:accelerationStructureCaptureReplayDescriptorDataSize indicates the
+    maximum size in bytes of the opaque data used for capture and replay
+    with acceleration structures.
+  * [[limits-samplerDescriptorSize]] pname:samplerDescriptorSize indicates
+    the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor.
+  * [[limits-combinedImageSamplerDescriptorSize]]
+    pname:combinedImageSamplerDescriptorSize indicates the size in bytes of
+    a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
+  * [[limits-sampledImageDescriptorSize]] pname:sampledImageDescriptorSize
+    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
+    descriptor.
+  * [[limits-storageImageDescriptorSize]] pname:storageImageDescriptorSize
+    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
+    descriptor.
+  * [[limits-uniformTexelBufferDescriptorSize]]
+    pname:uniformTexelBufferDescriptorSize indicates the size in bytes of a
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is not
+    enabled.
+  * [[limits-robustUniformTexelBufferDescriptorSize]]
+    pname:robustUniformTexelBufferDescriptorSize indicates the size in bytes
+    of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
+    enabled.
+  * [[limits-storageTexelBufferDescriptorSize]]
+    pname:storageTexelBufferDescriptorSize indicates the size in bytes of a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is not
+    enabled.
+  * [[limits-robustStorageTexelBufferDescriptorSize]]
+    pname:robustStorageTexelBufferDescriptorSize indicates the size in bytes
+    of a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
+    enabled.
+  * [[limits-uniformBufferDescriptorSize]] pname:uniformBufferDescriptorSize
+    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+    descriptor.
+  * [[limits-robustUniformBufferDescriptorSize]]
+    pname:robustUniformBufferDescriptorSize indicates the size in bytes of a
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
+    enabled.
+  * [[limits-storageBufferDescriptorSize]] pname:storageBufferDescriptorSize
+    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+    descriptor.
+  * [[limits-robustStorageBufferDescriptorSize]]
+    pname:robustStorageBufferDescriptorSize indicates the size in bytes of a
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor if the
+    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
+    enabled.
+  * [[limits-inputAttachmentDescriptorSize]]
+    pname:inputAttachmentDescriptorSize indicates the size in bytes of a
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor.
+  * [[limits-accelerationStructureDescriptorSize]]
+    pname:accelerationStructureDescriptorSize indicates the size in bytes of
+    a ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or
+    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor.
+  * [[limits-maxSamplerDescriptorBufferRange]]
+    pname:maxSamplerDescriptorBufferRange indicates the maximum range in
+    bytes from the address of a sampler descriptor buffer binding that is
+    accessible to a shader.
+  * [[limits-maxResourceDescriptorBufferRange]]
+    pname:maxResourceDescriptorBufferRange indicates the maximum range in
+    bytes from the address of a resource descriptor buffer binding that is
+    accessible to a shader.
+  * [[limits-samplerDescriptorBufferAddressSpaceSize]]
+    pname:samplerDescriptorBufferAddressSpaceSize indicates the total size
+    in bytes of the address space available for descriptor buffers created
+    with ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT.
+  * [[limits-resourceDescriptorBufferAddressSpaceSize]]
+    pname:resourceDescriptorBufferAddressSpaceSize indicates the total size
+    in bytes of the address space available for descriptor buffers created
+    with ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
+  * [[limits-descriptorBufferAddressSpaceSize]]
+    pname:descriptorBufferAddressSpaceSize indicates the total size in bytes
+    of the address space available for descriptor buffers created with both
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT and
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+A descriptor binding with type ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE has a
+descriptor size which is implied by the descriptor types included in the
+slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes list.
+The descriptor size is equal to the maximum size of any descriptor type
+included in the pname:pDescriptorTypes list.
+endif::VK_VALVE_mutable_descriptor_type[]
+
+ifdef::VK_EXT_pipeline_robustness[]
+As there is no way to request robust and non-robust descriptors separately,
+or specify robust/non-robust descriptors in the set layout, if
+<<features-robustBufferAccess, pname:robustBufferAccess>> is enabled then
+robust descriptors are always used.
+endif::VK_EXT_pipeline_robustness[]
+
+:refpage: VkPhysicalDeviceDescriptorBufferPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[]
+--
+
+ifdef::VK_EXT_fragment_density_map[]
+[open,refpage='VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT',desc='Structure describing descriptor buffer density map properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-combinedImageSamplerDensityMapDescriptorSize]]
+    pname:combinedImageSamplerDensityMapDescriptorSize indicates the size in
+    bytes of a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor
+    when creating the descriptor with
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT set.
+
+:refpage: VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+endif::VK_EXT_descriptor_buffer[]
+
+ifdef::VK_EXT_host_image_copy[]
+[open,refpage='VkPhysicalDeviceHostImageCopyPropertiesEXT',desc='Structure enumerating image layouts supported by an implementation for host memory copies',type='structs']
+--
+The sname:VkPhysicalDeviceHostImageCopyPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceHostImageCopyPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:copySrcLayoutCount is an integer related to the number of image
+    layouts for host copies from images available or queried, as described
+    below.
+  * pname:pCopySrcLayouts is a pointer to an array of elink:VkImageLayout in
+    which supported image layouts for use with host copy operations from
+    images are returned.
+  * pname:copyDstLayoutCount is an integer related to the number of image
+    layouts for host copies to images available or queried, as described
+    below.
+  * pname:pCopyDstLayouts is a pointer to an array of elink:VkImageLayout in
+    which supported image layouts for use with host copy operations to
+    images are returned.
+  * pname:optimalTilingLayoutUUID is an array of ename:VK_UUID_SIZE
+    code:uint8_t values representing a universally unique identifier for the
+    implementation's swizzling layout of images created with
+    ename:VK_IMAGE_TILING_OPTIMAL.
+  * pname:identicalMemoryTypeRequirements indicates that specifying the
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT flag in
+    slink:VkImageCreateInfo::pname:usage does not affect the memory type
+    requirements of the image.
+
+:refpage: VkPhysicalDeviceHostImageCopyPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+If pname:pCopyDstLayouts is `NULL`, then the number of image layouts that
+are supported in slink:VkCopyMemoryToImageInfoEXT::pname:dstImageLayout and
+slink:VkCopyImageToImageInfoEXT::pname:dstImageLayout is returned in
+pname:copyDstLayoutCount.
+Otherwise, pname:copyDstLayoutCount must: be set by the user to the number
+of elements in the pname:pCopyDstLayouts array, and on return the variable
+is overwritten with the number of values actually written to
+pname:pCopyDstLayouts.
+If the value of pname:copyDstLayoutCount is less than the number of image
+layouts that are supported, at most pname:copyDstLayoutCount values will be
+written to pname:pCopyDstLayouts.
+The implementation must: include the ename:VK_IMAGE_LAYOUT_GENERAL image
+layout in pname:pCopyDstLayouts.
+
+If pname:pCopySrcLayouts is `NULL`, then the number of image layouts that
+are supported in slink:VkCopyImageToMemoryInfoEXT::pname:srcImageLayout and
+slink:VkCopyImageToImageInfoEXT::pname:srcImageLayout is returned in
+pname:copySrcLayoutCount.
+Otherwise, pname:copySrcLayoutCount must: be set by the user to the number
+of elements in the pname:pCopySrcLayouts array, and on return the variable
+is overwritten with the number of values actually written to
+pname:pCopySrcLayouts.
+If the value of pname:copySrcLayoutCount is less than the number of image
+layouts that are supported, at most pname:copySrcLayoutCount values will be
+written to pname:pCopySrcLayouts.
+The implementation must: include the ename:VK_IMAGE_LAYOUT_GENERAL image
+layout in pname:pCopySrcLayouts.
+
+The pname:optimalTilingLayoutUUID value can be used to ensure compatible
+data layouts when using the ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT flag in
+flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
+
+include::{generated}/validity/structs/VkPhysicalDeviceHostImageCopyPropertiesEXT.adoc[]
+--
+endif::VK_EXT_host_image_copy[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]]
+    pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum
+    ratio between the width and height of the portion of the subpass shading
+    shader workgroup size.
+    pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two
+    value, and must: be less than or equal to max(code:WorkgroupSize.x /
+    code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x).
+
+:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_EXT_multi_draw[]
+
+[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure
+describe the following features:
+
+  * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the
+    maximum number of draw calls which can: be batched into a single
+    multidraw.
+
+:refpage: VkPhysicalDeviceMultiDrawPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_multi_draw[]
+
+ifdef::VK_EXT_nested_command_buffer[]
+
+[open,refpage='VkPhysicalDeviceNestedCommandBufferPropertiesEXT',desc='Structure describing the nested command buffer limits of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceNestedCommandBufferPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceNestedCommandBufferPropertiesEXT
+structure describe the following features:
+
+  * [[limits-maxCommandBufferNestingLevel]]
+    pname:maxCommandBufferNestingLevel indicates the maximum nesting level
+    of calls to flink:vkCmdExecuteCommands from <<glossary, Secondary
+    Command Buffers>>.
+    A pname:maxCommandBufferNestingLevel of code:UINT32_MAX means there is
+    no limit to the nesting level.
+
+:refpage: VkPhysicalDeviceNestedCommandBufferPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_nested_command_buffer[]
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+[open,refpage='VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',desc='Structure describing additional properties of graphics pipeline libraries',type='structs']
+--
+The sname:VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[]
+
+  * [[limits-graphicsPipelineLibraryFastLinking]]
+    pname:graphicsPipelineLibraryFastLinking indicates whether fast linking
+    of graphics pipelines is supported.
+    If it is ename:VK_TRUE, creating a graphics pipeline entirely from
+    pipeline libraries without
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT is comparable in
+    cost to recording a command in a command buffer.
+  * [[limits-graphicsPipelineLibraryIndependentInterpolationDecoration]]
+    pname:graphicsPipelineLibraryIndependentInterpolationDecoration
+    indicates whether code:NoPerspective and code:Flat interpolation
+    decorations in the last vertex processing stage and the fragment shader
+    are required to match when using graphics pipeline libraries.
+    If it is ename:VK_TRUE, the interpolation decorations do not need to
+    match.
+    If it is ename:VK_FALSE, these decorations must: either be present in
+    both stages or neither stage in order for a given interface variable to
+    match.
+
+:refpage: VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_KHR_fragment_shader_barycentric[]
+
+[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR',desc='Structure describing fragment shader barycentric limits of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[]
+
+  * [[limits-triStripVertexOrderIndependentOfProvokingVertex]] When the
+    <<vertexpostproc-flatshading,provoking vertex mode>> is
+    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, and the primitive order
+    is odd in a triangle strip, the ordering of vertices is defined in
+    <<primsrast-barycentric-order-table-last-vertex, last vertex table>>.
+    pname:triStripVertexOrderIndependentOfProvokingVertex equal to
+    ename:VK_TRUE indicates that the implementation ignores this and uses
+    the vertex order defined by
+    ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT instead.
+
+:refpage: VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[]
+--
+
+endif::VK_KHR_fragment_shader_barycentric[]
+
+ifdef::VK_EXT_shader_module_identifier[]
+[open,refpage='VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT',desc='Structure describing shader module identifier properties of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[]
+
+The members of the sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT
+structure describe the following:
+
+  * [[limits-shaderModuleIdentifierAlgorithmUUID]]
+    pname:shaderModuleIdentifierAlgorithmUUID is an array of
+    ename:VK_UUID_SIZE code:uint8_t values which uniquely represents the
+    algorithm used to compute an identifier in
+    flink:vkGetShaderModuleIdentifierEXT and
+    flink:vkGetShaderModuleCreateInfoIdentifierEXT.
+    Implementations should: not change this value in different driver
+    versions if the algorithm used to compute an identifier is the same.
+
+[NOTE]
+.Note
+====
+The algorithm UUID may be the same in different ICDs if the algorithms are
+guaranteed to produce the same results.
+This may happen in driver stacks which support different kinds of hardware
+with shared code.
+
+Khronos' conformance testing can not guarantee that
+pname:shaderModuleIdentifierAlgorithmUUID values are actually unique, so
+implementors should make their own best efforts to ensure that their UUID is
+unlikely to conflict with other implementations which may use a different
+algorithm.
+In particular, hard-coded values which easily conflict, such as all-`0`
+bits, should: never be used.
+Hard-coded values are acceptable if best effort is ensured that the value
+will not accidentally conflict.
+====
+
+:refpage: VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_shader_module_identifier[]
+
+ifdef::VK_EXT_pipeline_robustness[]
+[open,refpage='VkPhysicalDevicePipelineRobustnessPropertiesEXT',desc='Structure describing the default robustness behavior of a physical device',type='structs']
+--
+The sname:VkPhysicalDevicePipelineRobustnessPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:defaultRobustnessStorageBuffers describes the behaviour of out of
+    bounds accesses made to storage buffers when no robustness features are
+    enabled
+  * pname:defaultRobustnessUniformBuffers describes the behaviour of out of
+    bounds accesses made to uniform buffers when no robustness features are
+    enabled
+  * pname:defaultRobustnessVertexInputs describes the behaviour of out of
+    bounds accesses made to vertex input attributes when no robustness
+    features are enabled
+  * pname:defaultRobustnessImages describes the behaviour of out of bounds
+    accesses made to images when no robustness features are enabled
+
+Some implementations of Vulkan may be able to guarantee that certain types
+of accesses are always performed with robustness even when the Vulkan API's
+robustness features are not explicitly enabled.
+
+Even when an implementation reports that accesses to a given resource type
+are robust by default, it remains invalid to make an out of bounds access
+without requesting the appropriate robustness feature.
+
+:refpage: VkPhysicalDevicePipelineRobustnessPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[]
+--
+endif::VK_EXT_pipeline_robustness[]
+
+ifdef::VK_EXT_extended_dynamic_state3[]
+
+[open,refpage='VkPhysicalDeviceExtendedDynamicState3PropertiesEXT',desc='Structure describing capabilities of extended dynamic state',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedDynamicState3PropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[]
+
+  * [[limits-dynamicPrimitiveTopologyUnrestricted]]
+    pname:dynamicPrimitiveTopologyUnrestricted indicates that the
+    implementation allows fname:vkCmdSetPrimitiveTopology to use a different
+    <<drawing-primitive-topology-class, primitive topology class>> to the
+    one specified in the active graphics pipeline.
+
+:refpage: VkPhysicalDeviceExtendedDynamicState3PropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3[]
+
+ifdef::VK_NV_optical_flow[]
+[open,refpage='VkPhysicalDeviceOpticalFlowPropertiesNV',desc='Structure describing properties supported by VK_NV_optical_flow',type='structs']
+--
+The sname:VkPhysicalDeviceOpticalFlowPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-supportedOutputGridSizes]] pname:supportedOutputGridSizes are
+    the supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified
+    in sname:VkOpticalFlowSessionCreateInfoNV::pname:outputGridSize.
+  * [[limits-supportedHintGridSizes]] pname:supportedHintGridSizes are the
+    supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified in
+    sname:VkOpticalFlowSessionCreateInfoNV::pname:hintGridSize.
+  * [[limits-hintSupported]] pname:hintSupported is a boolean describing
+    whether using hint flow vector map is supported in an optical flow
+    session.
+  * [[limits-costSupported]] pname:costSupported is a boolean describing
+    whether cost map generation is supported in an optical flow session.
+  * [[limits-bidirectionalFlowSupported]] pname:bidirectionalFlowSupported
+    is a boolean describing whether bi-directional flow generation is
+    supported in an optical flow session.
+  * [[limits-globalFlowSupported]] pname:globalFlowSupported is a boolean
+    describing whether global flow vector map generation is supported in an
+    optical flow session.
+  * [[limits-minWidth]] pname:minWidth is the minimum width in pixels for
+    images used in an optical flow session.
+  * [[limits-minHeight]] pname:minHeight is the minimum height in pixels for
+    images used in an optical flow session.
+  * [[limits-maxWidth]] pname:maxWidth is the maximum width in pixels for
+    images used in an optical flow session.
+  * [[limits-maxHeight]] pname:maxHeight is the maximum height in pixels for
+    images used in an optical flow session.
+  * [[limits-maxNumRegionsOfInterest]] pname:maxNumRegionsOfInterest is the
+    maximum number of regions of interest which can be used in an optical
+    flow session.
+    If this pname:maxNumRegionsOfInterest is 0, regions of interest are not
+    supported in an optical flow session.
+
+:refpage: VkPhysicalDeviceOpticalFlowPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[]
+--
+endif::VK_NV_optical_flow[]
+
+ifdef::VK_EXT_opacity_micromap[]
+[open,refpage='VkPhysicalDeviceOpacityMicromapPropertiesEXT',desc='Structure describing the opacity micromap properties of a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceOpacityMicromapPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxOpacity2StateSubdivisionLevel is the maximum allowed
+    pname:subdivisionLevel when pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT
+  * pname:maxOpacity4StateSubdivisionLevel is the maximum allowed
+    pname:subdivisionLevel when pname:format is
+    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT
+
+:refpage: VkPhysicalDeviceOpacityMicromapPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[]
+--
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_NV_displacement_micromap[]
+[open,refpage='VkPhysicalDeviceDisplacementMicromapPropertiesNV',desc='Structure describing the displacement micromap properties of a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceDisplacementMicromapPropertiesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDisplacementMicromapPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxDisplacementMicromapSubdivisionLevel is the maximum allowed
+    pname:subdivisionLevel for displacement micromaps.
+
+:refpage: VkPhysicalDeviceDisplacementMicromapPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDisplacementMicromapPropertiesNV.adoc[]
+--
+endif::VK_NV_displacement_micromap[]
+
+ifdef::VK_ARM_shader_core_builtins[]
+[open,refpage='VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM',desc='Structure describing shader core builtins properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shaderCoreMask]] pname:shaderCoreMask is a bitfield where each
+    bit set represents the presence of a shader core whose ID is the bit
+    position.
+    The highest ID for any shader core on the device is the position of the
+    most significant bit set.
+  * [[limits-shaderCoreCount]] pname:shaderCoreCount is the number of shader
+    cores on the device.
+  * [[limits-shaderWarpsPerCore]] pname:shaderWarpsPerCore is the maximum
+    number of simultaneously executing warps on a shader core.
+
+:refpage: VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[]
+--
+endif::VK_ARM_shader_core_builtins[]
+
+ifdef::VK_NV_ray_tracing_invocation_reorder[]
+[open,refpage='VkRayTracingInvocationReorderModeNV',desc='Enum providing a hint on how the application may: reorder',type='enums']
+--
+Values which may: be returned in the
+pname:rayTracingInvocationReorderReorderingHint field of
+sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV are:
+
+include::{generated}/api/enums/VkRayTracingInvocationReorderModeNV.adoc[]
+
+  * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV indicates that the
+    implementation is likely to not reorder at reorder calls.
+  * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV indicates that
+    the implementation is likely to reorder at reorder calls.
+--
+
+[open,refpage='VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV',desc='Structure describing shader module identifier properties of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[]
+
+  * pname:rayTracingInvocationReorderReorderingHint is a hint indicating if
+    the implementation will actually reorder at the reorder calls.
+
+[NOTE]
+.Note
+====
+Because the extension changes how hits are managed there is a compatibility
+reason to expose the extension even when an implementation does not have
+sorting active.
+====
+
+:refpage: VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[]
+--
+endif::VK_NV_ray_tracing_invocation_reorder[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[open,refpage='VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI',desc='Structure describing cluster culling shader properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxWorkGroupCount[3] is the maximum number of local workgroups
+    that can be launched by a single command.
+    These three value represent the maximum local workgroup count in the X,
+    Y and Z dimensions, respectively.
+    In the current implementation, the values of Y and Z are both implicitly
+    set as one.
+    groupCountX of DrawCluster command must be less than or equal to
+    maxWorkGroupCount[0].
+  * pname:maxWorkGroupSize[3] is the maximum size of a local workgroup.
+    These three value represent the maximum local workgroup size in the X, Y
+    and Z dimensions, respectively.
+    The x, y and z sizes, as specified by the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+    execution mode or by the object decorated by the WorkgroupSize
+    decoration in shader modules, must be less than or equal to the
+    corresponding limit.
+    In the current implementation, the maximum workgroup size of the X
+    dimension is 32, the others are 1.
+  * pname:maxOutputClusterCount is the maximum number of output cluster a
+    single cluster culling shader workgroup can emit.
+  * pname:indirectBufferOffsetAlignment indicates the alignment for cluster
+    drawing command buffer stride.
+    flink:vkCmdDrawClusterIndirectHUAWEI::pname:offset must be a multiple of
+    this value.
+
+:refpage: VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+ifdef::VK_ARM_shader_core_properties[]
+[open,refpage='VkPhysicalDeviceShaderCorePropertiesARM',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderCorePropertiesARM structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesARM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pixelRate is an unsigned integer value indicating the maximum
+    number of pixels output per clock per shader core.
+  * pname:texelRate is an unsigned integer value indicating the maximum
+    number of texels per clock per shader core.
+  * pname:fmaRate is an unsigned integer value indicating the maximum number
+    of single-precision fused multiply-add operations per clock per shader
+    core.
+
+If a throughput rate cannot be determined on the physical device, the value
+`0` will be returned for that rate.
+
+:refpage: VkPhysicalDeviceShaderCorePropertiesARM
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesARM.adoc[]
+--
+endif::VK_ARM_shader_core_properties[]
+
+ifdef::VK_EXT_shader_object[]
+[open,refpage='VkPhysicalDeviceShaderObjectPropertiesEXT',desc='Structure describing shader object properties supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderObjectPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderObjectPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shaderBinaryUUID]] pname:shaderBinaryUUID is an array of
+    ename:VK_UUID_SIZE code:uint8_t values representing a universally unique
+    identifier for one or more implementations whose shader binaries are
+    guaranteed to be compatible with each other.
+  * [[limits-shaderBinaryVersion]] pname:shaderBinaryVersion is an unsigned
+    integer incremented to represent backwards compatible differences
+    between implementations with the same pname:shaderBinaryUUID.
+
+The purpose and usage of the values of this structure are described in
+greater detail in <<shaders-objects-binary-compatibility, Binary Shader
+Compatibility>>.
+
+:refpage: VkPhysicalDeviceShaderObjectPropertiesEXT
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderObjectPropertiesEXT.adoc[]
+--
+endif::VK_EXT_shader_object[]
+
+
+ifdef::VK_AMDX_shader_enqueue[]
+[open,refpage='VkPhysicalDeviceShaderEnqueuePropertiesAMDX',desc='Structure describing shader enqueue limits of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderEnqueuePropertiesAMDX structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.adoc[]
+
+The members of the sname:VkPhysicalDeviceShaderEnqueuePropertiesAMDX
+structure describe the following limits:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxExecutionGraphDepth]] pname:maxExecutionGraphDepth defines
+    the maximum node chain depth in the graph.
+    The dispatched node is at depth 1 and the node enqueued by it is at
+    depth 2, and so on.
+    If a node enqueues itself, each recursive enqueue increases the depth by
+    1 as well.
+  * [[limits-maxExecutionGraphShaderOutputNodes]]
+    pname:maxExecutionGraphShaderOutputNodes specifies the maximum number of
+    unique nodes that can be dispatched from a single shader, and must be at
+    least 256.
+  * [[limits-maxExecutionGraphShaderPayloadSize]]
+    pname:maxExecutionGraphShaderPayloadSize specifies the maximum total
+    size of payload declarations in a shader.
+    For any payload declarations that share resources, indicated by
+    code:NodeSharesPayloadLimitsWithAMDX decorations, the maximum size of
+    each set of shared payload declarations is taken.
+    The sum of each shared set's maximum size and the size of each unshared
+    payload is counted against this limit.
+  * [[limits-maxExecutionGraphShaderPayloadCount]]
+    pname:maxExecutionGraphShaderPayloadCount specifies the maximum number
+    of output payloads that can be initialized in a single workgroup.
+  * [[limits-executionGraphDispatchAddressAlignment]]
+    pname:executionGraphDispatchAddressAlignment specifies the alignment of
+    non-scratch basetype:VkDeviceAddress arguments consumed by graph
+    dispatch commands.
+
+:refpage: VkPhysicalDeviceShaderEnqueuePropertiesAMDX
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.adoc[]
+--
+endif::VK_AMDX_shader_enqueue[]
+
+ifdef::VK_NV_extended_sparse_address_space[]
+[open,refpage='VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV',desc='Structure describing sparse address space limits of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-extendedSparseAddressSpaceSize]]
+    pname:extendedSparseAddressSpaceSize is the total amount of address
+    space available, in bytes, for sparse memory resources of all usages if
+    the <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled.
+    This must: be greater than or equal to
+    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize, and the
+    difference in space must: only be used with usages allowed below.
+    This is an upper bound on the sum of the sizes of all sparse resources,
+    regardless of whether any memory is bound to them.
+  * [[limits-extendedSparseImageUsageFlags]]
+    pname:extendedSparseImageUsageFlags is a bitmask of
+    elink:VkImageUsageFlagBits of usages which may: allow an implementation
+    to use the full pname:extendedSparseAddressSpaceSize space.
+  * [[limits-extendedSparseBufferUsageFlags]]
+    pname:extendedSparseBufferUsageFlags is a bitmask of
+    elink:VkBufferUsageFlagBits of usages which may: allow an implementation
+    to use the full pname:extendedSparseAddressSpaceSize space.
+
+:refpage: VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.adoc[]
+--
+endif::VK_NV_extended_sparse_address_space[]
+
+ifdef::VK_NV_cuda_kernel_launch[]
+
+[open,refpage='VkPhysicalDeviceCudaKernelLaunchPropertiesNV',desc='Structure describing the compute capability version available',type='structs']
+--
+The sname:VkPhysicalDeviceCudaKernelLaunchPropertiesNV structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.adoc[]
+
+The members of the sname:VkPhysicalDeviceCudaKernelLaunchPropertiesNV
+structure describe the following features:
+
+  * [[limits-computeCapabilityMinor]] pname:computeCapabilityMinor indicates
+    the minor version number of the compute code.
+  * [[limits-computeCapabilityMajor]] pname:computeCapabilityMajor indicates
+    the minor version number of the compute code.
+
+:refpage: VkPhysicalDeviceCudaKernelLaunchPropertiesNV
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.adoc[]
+--
+
+endif::VK_NV_cuda_kernel_launch[]
+
+ifdef::VK_ANDROID_external_format_resolve[]
+[open,refpage='VkPhysicalDeviceExternalFormatResolvePropertiesANDROID',desc='Structure describing external format resolve supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceExternalFormatResolvePropertiesANDROID structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-nullColorAttachmentWithExternalFormatResolve]]
+    pname:nullColorAttachmentWithExternalFormatResolve indicates that there
+    must: be no color attachment image when performing external format
+    resolves if it is ename:VK_TRUE.
+  * [[limits-externalFormatResolveChromaOffsetX]]
+    pname:externalFormatResolveChromaOffsetX indicates the
+    elink:VkChromaLocation that an implementation uses in the X axis for
+    accesses to an external format image as a resolve attachment.
+    This must: be consistent between external format resolves and load
+    operations from external format resolve attachments to color attachments
+    when pname:nullColorAttachmentWithExternalFormatResolve is
+    ename:VK_TRUE.
+  * [[limits-externalFormatResolveChromaOffsetY]]
+    pname:externalFormatResolveChromaOffsetY indicates the
+    elink:VkChromaLocation that an implementation uses in the Y axis for
+    accesses to an external format image as a resolve attachment.
+    This must: be consistent between external format resolves and load
+    operations from external format resolve attachments to color attachments
+    when pname:nullColorAttachmentWithExternalFormatResolve is
+    ename:VK_TRUE.
+
+:refpage: VkPhysicalDeviceExternalFormatResolvePropertiesANDROID
+include::{chapters}/limits.adoc[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.adoc[]
+--
+endif::VK_ANDROID_external_format_resolve[]
+
+
+[[limits-minmax]]
+== Limit Requirements
+
+The following table specifies the required: minimum/maximum for all Vulkan
+graphics implementations.
+Where a limit corresponds to a fine-grained device feature which is
+optional:, the feature name is listed with two required: limits, one when
+the feature is supported and one when it is not supported.
+If an implementation supports a feature, the limits reported are the same
+whether or not the feature is enabled.
+
+[[limits-types]]
+.Required Limit Types
+[width="100%",cols="<20%,<50%,<30%",options="header"]
+|====
+| Type                     | Limit                                      | Feature
+| code:uint32_t            | pname:maxImageDimension1D                  | -
+| code:uint32_t            | pname:maxImageDimension2D                  | -
+| code:uint32_t            | pname:maxImageDimension3D                  | -
+| code:uint32_t            | pname:maxImageDimensionCube                | -
+| code:uint32_t            | pname:maxImageArrayLayers                  | -
+| code:uint32_t            | pname:maxTexelBufferElements               | -
+| code:uint32_t            | pname:maxUniformBufferRange                | -
+| code:uint32_t            | pname:maxStorageBufferRange                | -
+| code:uint32_t            | pname:maxPushConstantsSize                 | -
+| code:uint32_t            | pname:maxMemoryAllocationCount             | -
+| code:uint32_t            | pname:maxSamplerAllocationCount            | -
+| basetype:VkDeviceSize    | pname:bufferImageGranularity               | -
+| basetype:VkDeviceSize    | pname:sparseAddressSpaceSize               | pname:sparseBinding
+| code:uint32_t            | pname:maxBoundDescriptorSets               | -
+| code:uint32_t            | pname:maxPerStageDescriptorSamplers        | -
+| code:uint32_t            | pname:maxPerStageDescriptorUniformBuffers  | -
+| code:uint32_t            | pname:maxPerStageDescriptorStorageBuffers  | -
+| code:uint32_t            | pname:maxPerStageDescriptorSampledImages   | -
+| code:uint32_t            | pname:maxPerStageDescriptorStorageImages   | -
+| code:uint32_t            | pname:maxPerStageDescriptorInputAttachments| -
+| code:uint32_t            | pname:maxPerStageResources                 | -
+| code:uint32_t            | pname:maxDescriptorSetSamplers             | -
+| code:uint32_t            | pname:maxDescriptorSetUniformBuffers       | -
+| code:uint32_t            | pname:maxDescriptorSetUniformBuffersDynamic| -
+| code:uint32_t            | pname:maxDescriptorSetStorageBuffers       | -
+| code:uint32_t            | pname:maxDescriptorSetStorageBuffersDynamic| -
+| code:uint32_t            | pname:maxDescriptorSetSampledImages        | -
+| code:uint32_t            | pname:maxDescriptorSetStorageImages        | -
+| code:uint32_t            | pname:maxDescriptorSetInputAttachments     | -
+| code:uint32_t            | pname:maxVertexInputAttributes             | -
+| code:uint32_t            | pname:maxVertexInputBindings               | -
+| code:uint32_t            | pname:maxVertexInputAttributeOffset        | -
+| code:uint32_t            | pname:maxVertexInputBindingStride          | -
+| code:uint32_t            | pname:maxVertexOutputComponents            | -
+| code:uint32_t            | pname:maxTessellationGenerationLevel       | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationPatchSize             | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationControlPerVertexInputComponents  | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationControlPerPatchOutputComponents  | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationControlTotalOutputComponents     | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationEvaluationInputComponents        | pname:tessellationShader
+| code:uint32_t            | pname:maxTessellationEvaluationOutputComponents       | pname:tessellationShader
+| code:uint32_t            | pname:maxGeometryShaderInvocations         | pname:geometryShader
+| code:uint32_t            | pname:maxGeometryInputComponents           | pname:geometryShader
+| code:uint32_t            | pname:maxGeometryOutputComponents          | pname:geometryShader
+| code:uint32_t            | pname:maxGeometryOutputVertices            | pname:geometryShader
+| code:uint32_t            | pname:maxGeometryTotalOutputComponents     | pname:geometryShader
+| code:uint32_t            | pname:maxFragmentInputComponents           | -
+| code:uint32_t            | pname:maxFragmentOutputAttachments         | -
+| code:uint32_t            | pname:maxFragmentDualSrcAttachments        | pname:dualSrcBlend
+| code:uint32_t            | pname:maxFragmentCombinedOutputResources   | -
+| code:uint32_t            | pname:maxComputeSharedMemorySize           | -
+| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupCount             | -
+| code:uint32_t            | pname:maxComputeWorkGroupInvocations       | -
+| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupSize              | -
+| code:uint32_t            | pname:subPixelPrecisionBits                | -
+| code:uint32_t            | pname:subTexelPrecisionBits                | -
+| code:uint32_t            | pname:mipmapPrecisionBits                  | -
+| code:uint32_t            | pname:maxDrawIndexedIndexValue             | pname:fullDrawIndexUint32
+| code:uint32_t            | pname:maxDrawIndirectCount                 | pname:multiDrawIndirect
+| code:float               | pname:maxSamplerLodBias                    | -
+| code:float               | pname:maxSamplerAnisotropy                 | pname:samplerAnisotropy
+| code:uint32_t            | pname:maxViewports                         | pname:multiViewport
+| 2 {times} code:uint32_t  | pname:maxViewportDimensions                | -
+| 2 {times} code:float     | pname:viewportBoundsRange                  | -
+| code:uint32_t            | pname:viewportSubPixelBits                 | -
+| code:size_t              | pname:minMemoryMapAlignment                | -
+| basetype:VkDeviceSize    | pname:minTexelBufferOffsetAlignment        | -
+| basetype:VkDeviceSize    | pname:minUniformBufferOffsetAlignment      | -
+| basetype:VkDeviceSize    | pname:minStorageBufferOffsetAlignment      | -
+| code:int32_t             | pname:minTexelOffset                       | -
+| code:uint32_t            | pname:maxTexelOffset                       | -
+| code:int32_t             | pname:minTexelGatherOffset                 | pname:shaderImageGatherExtended
+| code:uint32_t            | pname:maxTexelGatherOffset                 | pname:shaderImageGatherExtended
+| code:float               | pname:minInterpolationOffset               | pname:sampleRateShading
+| code:float               | pname:maxInterpolationOffset               | pname:sampleRateShading
+| code:uint32_t            | pname:subPixelInterpolationOffsetBits      | pname:sampleRateShading
+| code:uint32_t            | pname:maxFramebufferWidth                  | -
+| code:uint32_t            | pname:maxFramebufferHeight                 | -
+| code:uint32_t            | pname:maxFramebufferLayers                 |
+ifdef::VKSC_VERSION_1_0[pname:geometryShader, pname:shaderOutputLayer]
+ifndef::VKSC_VERSION_1_0[-]
+| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts         | -
+ifdef::VK_VERSION_1_2[]
+| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts  | -
+endif::VK_VERSION_1_2[]
+| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts         | -
+| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts       | -
+| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
+| code:uint32_t            | pname:maxColorAttachments                  | -
+| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts        | -
+| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts      | -
+| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts        | -
+| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts      | -
+| tlink:VkSampleCountFlags | pname:storageImageSampleCounts             | pname:shaderStorageImageMultisample
+| code:uint32_t            | pname:maxSampleMaskWords                   | -
+| basetype:VkBool32        | pname:timestampComputeAndGraphics          | -
+| code:float               | pname:timestampPeriod                      | -
+| code:uint32_t            | pname:maxClipDistances                     | pname:shaderClipDistance
+| code:uint32_t            | pname:maxCullDistances                     | pname:shaderCullDistance
+| code:uint32_t            | pname:maxCombinedClipAndCullDistances      | pname:shaderCullDistance
+| code:uint32_t            | pname:discreteQueuePriorities              | -
+| 2 {times} code:float     | pname:pointSizeRange                       | pname:largePoints
+| 2 {times} code:float     | pname:lineWidthRange                       | pname:wideLines
+| code:float               | pname:pointSizeGranularity                 | pname:largePoints
+| code:float               | pname:lineWidthGranularity                 | pname:wideLines
+| basetype:VkBool32        | pname:strictLines                          | -
+| basetype:VkBool32        | pname:standardSampleLocations              | -
+| basetype:VkDeviceSize    | pname:optimalBufferCopyOffsetAlignment     | -
+| basetype:VkDeviceSize    | pname:optimalBufferCopyRowPitchAlignment   | -
+| basetype:VkDeviceSize    | pname:nonCoherentAtomSize                  | -
+ifdef::VK_EXT_discard_rectangles[]
+| code:uint32_t            | pname:maxDiscardRectangles                 | `apiext:VK_EXT_discard_rectangles`
+endif::VK_EXT_discard_rectangles[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+| basetype:VkBool32        | pname:filterMinmaxSingleComponentFormats   |
+ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax, pname:samplerFilterMinmax>>` ]
+ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
+| basetype:VkBool32        | pname:filterMinmaxImageComponentMapping    |
+ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax, pname:samplerFilterMinmax>>` ]
+ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4, pname:maintenance4>>`
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_EXT_conservative_rasterization[]
+| code:float           | pname:primitiveOverestimationSize                 | `apiext:VK_EXT_conservative_rasterization`
+| basetype:VkBool32        | pname:maxExtraPrimitiveOverestimationSize         | `apiext:VK_EXT_conservative_rasterization`
+| code:float           | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization`
+| basetype:VkBool32        | pname:degenerateTriangleRasterized                | `apiext:VK_EXT_conservative_rasterization`
+| code:float           | pname:degenerateLinesRasterized                   | `apiext:VK_EXT_conservative_rasterization`
+| basetype:VkBool32        | pname:fullyCoveredFragmentShaderInputVariable     | `apiext:VK_EXT_conservative_rasterization`
+| basetype:VkBool32        | pname:conservativeRasterizationPostDepthCoverage  | `apiext:VK_EXT_conservative_rasterization`
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+| code:uint32_t     | pname:maxUpdateAfterBindDescriptorsInAllPools             | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative    | -
+| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative     | -
+| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative    | -
+| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative     | -
+| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative  | -
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSamplers        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxPerStageUpdateAfterBindResources                 | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSamplers             | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSampledImages        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageImages        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInputAttachments     | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| code:uint32_t     | pname:maxInlineUniformBlockSize                               |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+| code:uint32_t     | pname:maxPerStageDescriptorInlineUniformBlocks                |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+| code:uint32_t     | pname:maxDescriptorSetInlineUniformBlocks                     |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_VERSION_1_3[]
+| code:uint32_t     | pname:maxInlineUniformTotalSize                               |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
+endif::VK_VERSION_1_3[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+| code:uint32_t            | pname:maxVertexAttribDivisor               | `apiext:VK_EXT_vertex_attribute_divisor`
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_NV_mesh_shader[]
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount                 | `apiext:VK_EXT_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount                      | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations                | `apiext:VK_EXT_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize                       | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize                         | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize                    | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize          | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount                 | `apiext:VK_EXT_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount                      | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations                | `apiext:VK_EXT_mesh_shader`
+| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize                       | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize                    | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize          | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize                    | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize          | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents                    | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices                      | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives                    | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers                        | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount                  | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity             | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity          | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations       | `apiext:VK_EXT_mesh_shader`
+| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations       | `apiext:VK_EXT_mesh_shader`
+| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput         | `apiext:VK_EXT_mesh_shader`
+| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput      | `apiext:VK_EXT_mesh_shader`
+| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput                 | `apiext:VK_EXT_mesh_shader`
+| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput              | `apiext:VK_EXT_mesh_shader`
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_transform_feedback[]
+| code:uint32_t            | pname:maxTransformFeedbackStreams                 | `apiext:VK_EXT_transform_feedback`
+| code:uint32_t            | pname:maxTransformFeedbackBuffers                 | `apiext:VK_EXT_transform_feedback`
+| basetype:VkDeviceSize    | pname:maxTransformFeedbackBufferSize              | `apiext:VK_EXT_transform_feedback`
+| code:uint32_t            | pname:maxTransformFeedbackStreamDataSize          | `apiext:VK_EXT_transform_feedback`
+| code:uint32_t            | pname:maxTransformFeedbackBufferDataSize          | `apiext:VK_EXT_transform_feedback`
+| code:uint32_t            | pname:maxTransformFeedbackBufferDataStride        | `apiext:VK_EXT_transform_feedback`
+| basetype:VkBool32        | pname:transformFeedbackQueries                    | `apiext:VK_EXT_transform_feedback`
+| basetype:VkBool32        | pname:transformFeedbackStreamsLinesTriangles      | `apiext:VK_EXT_transform_feedback`
+| basetype:VkBool32        | pname:transformFeedbackRasterizationStreamSelect  | `apiext:VK_EXT_transform_feedback`
+| basetype:VkBool32        | pname:transformFeedbackDraw                       | `apiext:VK_EXT_transform_feedback`
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_fragment_density_map[]
+| slink:VkExtent2D         | pname:minFragmentDensityTexelSize         | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
+| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
+| basetype:VkBool32        | pname:fragmentDensityInvocations          | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
+ifdef::VK_EXT_fragment_density_map2[]
+| basetype:VkBool32        | pname:subsampledLoads                           | `apiext:VK_EXT_fragment_density_map2`
+| basetype:VkBool32        | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2`
+| code:uint32_t            | pname:maxSubsampledArrayLayers                  | `apiext:VK_EXT_fragment_density_map2`
+| code:uint32_t            | pname:maxDescriptorSetSubsampledSamplers        | `apiext:VK_EXT_fragment_density_map2`
+endif::VK_EXT_fragment_density_map2[]
+ifdef::VK_QCOM_fragment_density_map_offset[]
+| slink:VkExtent2D         | pname:fragmentDensityOffsetGranularity    | `<<features-fragmentDensityMapOffsets, pname:fragmentDensityMapOffset>>`
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+| code:uint32_t            | pname:maxGeometryCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
+| code:uint32_t            | pname:maxInstanceCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+| code:uint32_t            | pname:shaderGroupHandleSize                    | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:maxShaderGroupStride                     | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:shaderGroupBaseAlignment                 | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+| code:uint32_t            | pname:maxRecursionDepth                        | `apiext:VK_NV_ray_tracing`
+| code:uint32_t            | pname:maxTriangleCount                         | `apiext:VK_NV_ray_tracing`
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure[]
+| code:uint32_t            | pname:maxPerStageDescriptorAccelerationStructures
+                                                                            | `apiext:VK_KHR_acceleration_structure`
+| code:uint32_t            | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
+                                                                            | `apiext:VK_KHR_acceleration_structure`
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+| code:uint32_t            | pname:maxDescriptorSetAccelerationStructures   | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_acceleration_structure[]
+| code:uint32_t            | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
+                                                                            | `apiext:VK_KHR_acceleration_structure`
+| code:uint32_t            | pname:minAccelerationStructureScratchOffsetAlignment
+                                                                            | `apiext:VK_KHR_acceleration_structure`
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+| code:uint32_t            | pname:maxRayRecursionDepth                     | `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:shaderGroupHandleCaptureReplaySize       | `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:maxRayDispatchInvocationCount            | `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:shaderGroupHandleAlignment               | `apiext:VK_KHR_ray_tracing_pipeline`
+| code:uint32_t            | pname:maxRayHitAttributeSize                   | `apiext:VK_KHR_ray_tracing_pipeline`
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+| code:uint64_t            | pname:maxTimelineSemaphoreValueDifference      | `<<features-timelineSemaphore, pname:timelineSemaphore>>`
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_EXT_line_rasterization[]
+| code:uint32_t            | pname:lineSubPixelPrecisionBits                | `apiext:VK_EXT_line_rasterization`
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_custom_border_color[]
+| code:uint32_t            | pname:maxCustomBorderColorSamplers             | `apiext:VK_EXT_custom_border_color`
+endif::VK_EXT_custom_border_color[]
+ifdef::VK_EXT_robustness2[]
+| basetype:VkDeviceSize    | pname:robustStorageBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
+| basetype:VkDeviceSize    | pname:robustUniformBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
+endif::VK_EXT_robustness2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+| 2 {times} code:uint32_t       | pname:minFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
+| 2 {times} code:uint32_t       | pname:maxFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
+| code:uint32_t                 | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
+| basetype:VkBool32             | pname:primitiveFragmentShadingRateWithMultipleViewports   | `<<features-primitiveFragmentShadingRate, pname:primitiveFragmentShadingRate>>`
+| basetype:VkBool32             | pname:layeredShadingRateAttachments                       | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateNonTrivialCombinerOps            | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| 2 {times} code:uint32_t       | pname:maxFragmentSize                                     | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| code:uint32_t                 | pname:maxFragmentSizeAspectRatio                          | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| code:uint32_t                 | pname:maxFragmentShadingRateCoverageSamples               | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateRasterizationSamples          | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithShaderDepthStencilWrites     | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithSampleMask                   | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithShaderSampleMask             | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithConservativeRasterization    | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithFragmentShaderInterlock      | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateWithCustomSampleLocations        | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+| basetype:VkBool32             | pname:fragmentShadingRateStrictMultiplyCombiner           | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_fragment_shading_rate_enums[]
+| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateInvocationCount               | `<<features-supersampleFragmentShadingRates, pname:supersampleFragmentShadingRates>>`
+endif::VK_NV_fragment_shading_rate_enums[]
+ifdef::VK_EXT_descriptor_buffer[]
+| basetype:VkBool32       | pname:combinedImageSamplerDescriptorSingleArray          | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkBool32       | pname:bufferlessPushDescriptors            | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkBool32       | pname:allowSamplerImageViewPostSubmitCreation     | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:descriptorBufferOffsetAlignment             | `<<VK_EXT_descriptor_buffer>>`
+| code:uint32_t           | pname:maxDescriptorBufferBindings                 | `<<VK_EXT_descriptor_buffer>>`
+| code:uint32_t           | pname:maxResourceDescriptorBufferBindings         | `<<VK_EXT_descriptor_buffer>>`
+| code:uint32_t           | pname:maxSamplerDescriptorBufferBindings          | `<<VK_EXT_descriptor_buffer>>`
+| code:uint32_t           | pname:maxEmbeddedImmutableSamplerBindings         | `<<VK_EXT_descriptor_buffer>>`
+| code:uint32_t           | pname:maxEmbeddedImmutableSamplers                | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:bufferCaptureReplayDescriptorDataSize       | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:imageCaptureReplayDescriptorDataSize        | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:imageViewCaptureReplayDescriptorDataSize    | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:samplerCaptureReplayDescriptorDataSize      | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:accelerationStructureCaptureReplayDescriptorDataSize      | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:samplerDescriptorSize                       | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:combinedImageSamplerDescriptorSize          | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:sampledImageDescriptorSize                  | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:storageImageDescriptorSize                  | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:uniformTexelBufferDescriptorSize            | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:robustUniformTexelBufferDescriptorSize      | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:storageTexelBufferDescriptorSize            | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:robustStorageTexelBufferDescriptorSize      | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:uniformBufferDescriptorSize                 | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:robustUniformBufferDescriptorSize           | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:storageBufferDescriptorSize                 | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:robustStorageBufferDescriptorSize           | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:inputAttachmentDescriptorSize               | `<<VK_EXT_descriptor_buffer>>`
+| code:size_t             | pname:accelerationStructureDescriptorSize         | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:maxSamplerDescriptorBufferRange             | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:maxResourceDescriptorBufferRange            | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:samplerDescriptorBufferAddressSpaceSize     | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:resourceDescriptorBufferAddressSpaceSize    | `<<VK_EXT_descriptor_buffer>>`
+| basetype:VkDeviceSize   | pname:descriptorBufferAddressSpaceSize            | `<<VK_EXT_descriptor_buffer>>`
+ifdef::VK_EXT_fragment_density_map[]
+| code:size_t             | pname:combinedImageSamplerDensityMapDescriptorSize          | `<<VK_EXT_descriptor_buffer>>`
+endif::VK_EXT_fragment_density_map[]
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_HUAWEI_subpass_shading[]
+| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading, pname:subpassShading>>`
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VKSC_VERSION_1_0[]
+| basetype:VkBool32        | pname:deviceNoDynamicHostAllocations                   | -
+| basetype:VkBool32        | pname:deviceDestroyFreesMemory                         | -
+| basetype:VkBool32        | pname:commandPoolMultipleCommandBuffersRecording       | -
+| basetype:VkBool32        | pname:commandPoolResetCommandBuffer                    | -
+| basetype:VkBool32        | pname:commandBufferSimultaneousUse                     | -
+| basetype:VkBool32        | pname:secondaryCommandBufferNullOrImagelessFramebuffer | -
+| basetype:VkBool32        | pname:recycleDescriptorSetMemory                       | -
+| basetype:VkBool32        | pname:recyclePipelineMemory                            | -
+| code:uint32_t            | pname:maxRenderPassSubpasses                           | -
+| code:uint32_t            | pname:maxRenderPassDependencies                        | -
+| code:uint32_t            | pname:maxSubpassInputAttachments                       | -
+| code:uint32_t            | pname:maxSubpassPreserveAttachments                    | -
+| code:uint32_t            | pname:maxFramebufferAttachments                        | -
+| code:uint32_t            | pname:maxDescriptorSetLayoutBindings                   | -
+| code:uint32_t            | pname:maxQueryFaultCount                               | -
+| code:uint32_t            | pname:maxCallbackFaultCount                            | -
+| code:uint32_t            | pname:maxCommandPoolCommandBuffers                     | -
+| basetype:VkDeviceSize    | pname:maxCommandBufferSize                             | -
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+| basetype:VkBool32             | pname:graphicsPipelineLibraryFastLinking                  | `<<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>`
+| basetype:VkBool32             | pname:graphicsPipelineLibraryIndependentInterpolationDecoration | `<<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>`
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_KHR_fragment_shader_barycentric[]
+| basetype:VkBool32             | pname:triStripVertexOrderIndependentOfProvokingVertex     | -
+endif::VK_KHR_fragment_shader_barycentric[]
+ifdef::VK_QCOM_image_processing[]
+| code:uint32_t                 | pname:maxWeightFilterPhases    | `<<features-textureSampleWeighted, pname:textureSampleWeighted>>`
+| 2 {times} code:uint32_t       | pname:maxWeightFilterDimension | `<<features-textureSampleWeighted, pname:textureSampleWeighted>>`
+| 2 {times} code:uint32_t       | pname:maxBlockMatchRegion      | `<<features-textureBlockMatch, pname:textureBlockMatch>>`
+| 2 {times} code:uint32_t       | pname:maxBoxFilterBlockSize    | `<<features-textureBoxFilter, pname:textureBoxFilter>>`
+endif::VK_QCOM_image_processing[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+| basetype:VkBool32             | pname:dynamicPrimitiveTopologyUnrestricted                | `apiext:VK_EXT_extended_dynamic_state3`
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_opacity_micromap[]
+| code:uint32_t                 | pname:maxOpacity2StateSubdivisionLevel                    | `apiext:VK_EXT_opacity_micromap`
+| code:uint32_t                 | pname:maxOpacity4StateSubdivisionLevel                    | `apiext:VK_EXT_opacity_micromap`
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_memory_decompression[]
+| code:uint64_t                 | pname:maxDecompressionIndirectCount                       | `apiext:VK_NV_memory_decompression`
+endif::VK_NV_memory_decompression[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+|  3 {times} code:uint32_t                 |
+pname:maxWorkGroupCount | `apiext:VK_HUAWEI_cluster_culling_shader`
+|  3 {times} code:uint32_t                 |
+pname:maxWorkGroupSize | `apiext:VK_HUAWEI_cluster_culling_shader`
+| code:uint32_t                 |
+pname:maxOutputClusterCount | `apiext:VK_HUAWEI_cluster_culling_shader`
+| basetype:VkDeviceSize                 |
+pname:indirectBufferOffsetAlignment | `apiext:VK_HUAWEI_cluster_culling_shader`
+endif::VK_HUAWEI_cluster_culling_shader[]
+ifdef::VK_AMDX_shader_enqueue[]
+| code:uint32_t                 | pname:maxExecutionGraphDepth                              | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
+| code:uint32_t                 | pname:maxExecutionGraphShaderOutputNodes                  | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
+| code:uint32_t                 | pname:maxExecutionGraphShaderPayloadSize                  | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
+| code:uint32_t                 | pname:maxExecutionGraphShaderPayloadCount                 | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
+| code:uint32_t                 | pname:executionGraphDispatchAddressAlignment              | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
+endif::VK_AMDX_shader_enqueue[]
+ifdef::VK_NV_extended_sparse_address_space[]
+| basetype:VkDeviceSize         | pname:extendedSparseAddressSpaceSize                      | pname:sparseBinding, `<<features-extendedSparseAddressSpace, pname:extendedSparseAddressSpace>>`
+endif::VK_NV_extended_sparse_address_space[]
+|====
+
+[[limits-required]]
+.Required Limits
+[width="100%",cols="<35,<9,<14,<11",options="header"]
+|====
+| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
+| pname:maxImageDimension1D                  | - | 4096    | min
+| pname:maxImageDimension2D                  | - | 4096    | min
+| pname:maxImageDimension3D                  | - | 256     | min
+| pname:maxImageDimensionCube                | - | 4096    | min
+| pname:maxImageArrayLayers                  | - | 256     | min
+| pname:maxTexelBufferElements               | - | 65536   | min
+| pname:maxUniformBufferRange                | - | 16384   | min
+| pname:maxStorageBufferRange                | - | 2^27^   | min
+| pname:maxPushConstantsSize                 | - | 128     | min
+| pname:maxMemoryAllocationCount             | - | 4096    | min
+| pname:maxSamplerAllocationCount            | - | 4000    | min
+| pname:bufferImageGranularity               | - | 131072  | max
+| pname:sparseAddressSpaceSize               | 0 | 2^31^   | min
+| pname:maxBoundDescriptorSets               | - | 4       | min
+| pname:maxPerStageDescriptorSamplers        | - | 16      | min
+| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | min
+| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | min
+| pname:maxPerStageDescriptorSampledImages   | - | 16      | min
+| pname:maxPerStageDescriptorStorageImages   | - | 4       | min
+| pname:maxPerStageDescriptorInputAttachments| - | 4       | min
+| pname:maxPerStageResources                 | - | 128 ^2^ | min
+| pname:maxDescriptorSetSamplers             | - | 96 ^8^  | min, _n_ {times} PerStage
+| pname:maxDescriptorSetUniformBuffers       | - | 72 ^8^  | min, _n_ {times} PerStage
+| pname:maxDescriptorSetUniformBuffersDynamic| - | 8       | min
+| pname:maxDescriptorSetStorageBuffers       | - | 24 ^8^  | min, _n_ {times} PerStage
+| pname:maxDescriptorSetStorageBuffersDynamic| - | 4       | min
+| pname:maxDescriptorSetSampledImages        | - | 96 ^8^  | min, _n_ {times} PerStage
+| pname:maxDescriptorSetStorageImages        | - | 24 ^8^  | min, _n_ {times} PerStage
+| pname:maxDescriptorSetInputAttachments     | - | 4       | min
+| pname:maxVertexInputAttributes             | - | 16      | min
+ifndef::VK_KHR_portability_subset[]
+| pname:maxVertexInputBindings               | - | 16      | min
+endif::VK_KHR_portability_subset[]
+ifdef::VK_KHR_portability_subset[]
+| pname:maxVertexInputBindings               | - | 16 ^10^ | min
+endif::VK_KHR_portability_subset[]
+| pname:maxVertexInputAttributeOffset        | - | 2047    | min
+| pname:maxVertexInputBindingStride          | - | 2048    | min
+| pname:maxVertexOutputComponents            | - | 64      | min
+| pname:maxTessellationGenerationLevel       | 0 | 64      | min
+| pname:maxTessellationPatchSize             | 0 | 32      | min
+| pname:maxTessellationControlPerVertexInputComponents  | 0 |64 | min
+| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
+| pname:maxTessellationControlPerPatchOutputComponents  | 0 |120 | min
+| pname:maxTessellationControlTotalOutputComponents     | 0 |2048 | min
+| pname:maxTessellationEvaluationInputComponents        | 0 |64 | min
+| pname:maxTessellationEvaluationOutputComponents       | 0 |64 | min
+| pname:maxGeometryShaderInvocations         | 0 | 32      | min
+| pname:maxGeometryInputComponents           | 0 | 64      | min
+| pname:maxGeometryOutputComponents          | 0 | 64      | min
+| pname:maxGeometryOutputVertices            | 0 | 256     | min
+| pname:maxGeometryTotalOutputComponents     | 0 | 1024    | min
+| pname:maxFragmentInputComponents           | - | 64      | min
+| pname:maxFragmentOutputAttachments         | - | 4       | min
+| pname:maxFragmentDualSrcAttachments        | 0 | 1       | min
+| pname:maxFragmentCombinedOutputResources   | - | 4       | min
+| pname:maxComputeSharedMemorySize           | - | 16384   | min
+| pname:maxComputeWorkGroupCount             | - | (65535,65535,65535) | min
+| pname:maxComputeWorkGroupInvocations       | - | 128     | min
+| pname:maxComputeWorkGroupSize              | - | (128,128,64) | min
+| pname:subPixelPrecisionBits                | - | 4       | min
+| pname:subTexelPrecisionBits                | - | 4       | min
+| pname:mipmapPrecisionBits                  | - | 4       | min
+| pname:maxDrawIndexedIndexValue             | 2^24^-1 | 2^32^-1 | min
+| pname:maxDrawIndirectCount                 | 1 | 2^16^-1 | min
+| pname:maxSamplerLodBias                    | - | 2       | min
+| pname:maxSamplerAnisotropy                 | 1 | 16      | min
+| pname:maxViewports                         | 1 | 16      | min
+| pname:maxViewportDimensions                | - | (4096,4096) ^3^  | min
+| pname:viewportBoundsRange                  | - | (-8192,8191) ^4^ | (max,min)
+| pname:viewportSubPixelBits                 | - | 0   | min
+| pname:minMemoryMapAlignment                | - | 64  | min
+| pname:minTexelBufferOffsetAlignment        | - | 256 | max
+| pname:minUniformBufferOffsetAlignment      | - | 256 | max
+| pname:minStorageBufferOffsetAlignment      | - | 256 | max
+| pname:minTexelOffset                       | - | -8  | max
+| pname:maxTexelOffset                       | - | 7   | min
+| pname:minTexelGatherOffset                 | 0 | -8  | max
+| pname:maxTexelGatherOffset                 | 0 | 7   | min
+| pname:minInterpolationOffset               |0.0| -0.5 ^5^ | max
+| pname:maxInterpolationOffset               |0.0| 0.5 - (1 ULP) ^5^ | min
+| pname:subPixelInterpolationOffsetBits      | 0 | 4 ^5^ | min
+| pname:maxFramebufferWidth                  | - | 4096  | min
+| pname:maxFramebufferHeight                 | - | 4096  | min
+| pname:maxFramebufferLayers                 |
+ifdef::VKSC_VERSION_1_0[1]
+ifndef::VKSC_VERSION_1_0[-]
+| 256   | min
+| pname:framebufferColorSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+ifdef::VK_VERSION_1_2[]
+| pname:framebufferIntegerColorSampleCounts  | - | (ename:VK_SAMPLE_COUNT_1_BIT)                                | min
+endif::VK_VERSION_1_2[]
+| pname:framebufferDepthSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:framebufferStencilSampleCounts       | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:maxColorAttachments                  | - | 4     | min
+| pname:sampledImageColorSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:sampledImageIntegerSampleCounts      | - | ename:VK_SAMPLE_COUNT_1_BIT                                  | min
+| pname:sampledImageDepthSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:sampledImageStencilSampleCounts      | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:storageImageSampleCounts             | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
+| pname:maxSampleMaskWords                   | - | 1     | min
+| pname:timestampComputeAndGraphics          | - | -     |implementation-dependent
+| pname:timestampPeriod                      | - | -     |duration
+| pname:maxClipDistances                     | 0 | 8     | min
+| pname:maxCullDistances                     | 0 | 8     | min
+| pname:maxCombinedClipAndCullDistances      | 0 | 8     | min
+| pname:discreteQueuePriorities              | - | 2     | min
+| pname:pointSizeRange                       | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
+| pname:lineWidthRange                       | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
+| pname:pointSizeGranularity                 |  0.0 | 1.0 ^6^ | max, fixed point increment
+| pname:lineWidthGranularity                 |  0.0 | 1.0 ^7^ | max, fixed point increment
+| pname:strictLines                          | - | -   | implementation-dependent
+| pname:standardSampleLocations              | - | -   | implementation-dependent
+| pname:optimalBufferCopyOffsetAlignment     | - | -   | recommendation
+| pname:optimalBufferCopyRowPitchAlignment   | - | -   | recommendation
+| pname:nonCoherentAtomSize                  | - | 256 | max
+ifdef::VK_KHR_push_descriptor[]
+| pname:maxPushDescriptors                   | - | 32  | min
+endif::VK_KHR_push_descriptor[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+| pname:maxMultiviewViewCount                | - |  6  | min
+| pname:maxMultiviewInstanceIndex            | - |  2^27^-1  | min
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_EXT_discard_rectangles[]
+| pname:maxDiscardRectangles                 | 0 | 4   | min
+endif::VK_EXT_discard_rectangles[]
+ifdef::VK_EXT_sample_locations[]
+| pname:sampleLocationSampleCounts           | - | ename:VK_SAMPLE_COUNT_4_BIT | min
+| pname:maxSampleLocationGridSize            | - | (1,1) | min
+| pname:sampleLocationCoordinateRange        | - | (0.0, 0.9375) | (max,min)
+| pname:sampleLocationSubPixelBits           | - | 4   | min
+| pname:variableSampleLocations              | - |false| implementation-dependent
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_external_memory_host[]
+| pname:minImportedHostPointerAlignment      | - | 65536 | max
+endif::VK_EXT_external_memory_host[]
+ifdef::VK_NVX_multiview_per_view_attributes[]
+| pname:perViewPositionAllComponents         | - | -   | implementation-dependent
+endif::VK_NVX_multiview_per_view_attributes[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+| pname:filterMinmaxSingleComponentFormats   | - | -   | implementation-dependent
+| pname:filterMinmaxImageComponentMapping    | - | -   | implementation-dependent
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_EXT_blend_operation_advanced[]
+| pname:advancedBlendMaxColorAttachments        | - | 1   | min
+| pname:advancedBlendIndependentBlend           | - |false| implementation-dependent
+| pname:advancedBlendNonPremultipliedSrcColor   | - |false| implementation-dependent
+| pname:advancedBlendNonPremultipliedDstColor   | - |false| implementation-dependent
+| pname:advancedBlendCorrelatedOverlap          | - |false| implementation-dependent
+| pname:advancedBlendAllOperations              | - |false| implementation-dependent
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
+| pname:maxPerSetDescriptors                                | - |1024 | min
+| pname:maxMemoryAllocationSize                             | - | 2^30^ | min
+endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+| pname:maxBufferSize                                       | - | 2^30^ | min
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_EXT_conservative_rasterization[]
+| pname:primitiveOverestimationSize                 | - |0.0   | min
+| pname:maxExtraPrimitiveOverestimationSize         | - |0.0   | min
+| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0   | min
+| pname:primitiveUnderestimation                    | - |false | implementation-dependent
+| pname:conservativePointAndLineRasterization       | - |false | implementation-dependent
+| pname:degenerateTrianglesRasterized               | - |false | implementation-dependent
+| pname:degenerateLinesRasterized                   | - |false | implementation-dependent
+| pname:fullyCoveredFragmentShaderInputVariable     | - |false | implementation-dependent
+| pname:conservativeRasterizationPostDepthCoverage  | - |false | implementation-dependent
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+| pname:maxUpdateAfterBindDescriptorsInAllPools             | 0 |500000| min
+| pname:shaderUniformBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
+| pname:shaderSampledImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
+| pname:shaderStorageBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
+| pname:shaderStorageImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
+| pname:shaderInputAttachmentArrayNonUniformIndexingNative  | - |false| implementation-dependent
+| pname:maxPerStageDescriptorUpdateAfterBindSamplers        | 0^9^ |500000 ^9^ | min
+| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | 0^9^ |12 ^9^ | min
+| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | 0^9^ |500000 ^9^ | min
+| pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | 0^9^ |500000 ^9^ | min
+| pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | 0^9^ |500000 ^9^ | min
+| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min
+| pname:maxPerStageUpdateAfterBindResources                 | 0^9^ |500000 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindSamplers             | 0^9^ |500000 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage
+| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | 0^9^ |500000 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindSampledImages        | 0^9^ |500000 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindStorageImages        | 0^9^ |500000 ^9^ | min
+| pname:maxDescriptorSetUpdateAfterBindInputAttachments     | 0^9^ |4 ^9^ | min
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+| pname:maxInlineUniformBlockSize                               | - | 256   | min
+| pname:maxPerStageDescriptorInlineUniformBlocks                | - | 4     | min
+| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4     | min
+| pname:maxDescriptorSetInlineUniformBlocks                     | - | 4     | min
+| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      | - | 4     | min
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+ifdef::VK_VERSION_1_3[]
+| pname:maxInlineUniformTotalSize                               | - | 256   | min
+endif::VK_VERSION_1_3[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_NV_mesh_shader[]
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations          | - | 32        | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize               | - | 16384     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount                   | - | 2^16^-1   | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations          | - | 32        | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize               | - | 16384     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices                | - | 256       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives              | - | 256       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount            | - | 1         | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount                 | - | 2^22      | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount                      | - | (65535,65535,65535) | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations                | - | 128       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize                       | - | (128,128,128) | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize                         | - | 16384     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize                    | - | 32768     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize          | - | 32768     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount                 | - | 2^22      | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount                      | - | (65535,65535,65535) | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations                | - | 128       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize                       | - | (128,128,128) | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize                    | - | 28672     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize          | - | 28672     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize                    | - | 32768     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize          | - | 48128     | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents                    | - | 128       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices                      | - | 256       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives                    | - | 256       | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers                        | - | 8         | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount                  | - | 1         | min
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity             | 0 | 32        | max
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity          | 0 | 32        | max
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations       | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations       | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput         | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput      | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput                 | - | -         | implementation-dependent
+| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput              | - | -         | implementation-dependent
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_transform_feedback[]
+| pname:maxTransformFeedbackStreams                         | - | 1         | min
+| pname:maxTransformFeedbackBuffers                         | - | 1         | min
+| pname:maxTransformFeedbackBufferSize                      | - | 2^27^     | min
+| pname:maxTransformFeedbackStreamDataSize                  | - | 512       | min
+| pname:maxTransformFeedbackBufferDataSize                  | - | 512       | min
+| pname:maxTransformFeedbackBufferDataStride                | - | 512       | min
+| pname:transformFeedbackQueries                            | - | false     | implementation-dependent
+| pname:transformFeedbackStreamsLinesTriangles              | - | false     | implementation-dependent
+| pname:transformFeedbackRasterizationStreamSelect          | - | false     | implementation-dependent
+| pname:transformFeedbackDraw                               | - | false     | implementation-dependent
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_fragment_density_map[]
+| pname:minFragmentDensityTexelSize          | - | (1,1)       | min
+| pname:maxFragmentDensityTexelSize          | - | (1,1)       | min
+| pname:fragmentDensityInvocations           | - |  -          | implementation-dependent
+ifdef::VK_EXT_fragment_density_map2[]
+| pname:subsampledLoads                           | true  | false | implementation-dependent
+| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent
+| pname:maxSubsampledArrayLayers                  | 2     | 2     | min
+| pname:maxDescriptorSetSubsampledSamplers        | 1     | 1     | min
+endif::VK_EXT_fragment_density_map2[]
+ifdef::VK_QCOM_fragment_density_map_offset[]
+| pname:fragmentDensityOffsetGranularity     | - | (1024,1024) | max
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16      | min
+| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth     | - | 31      | min
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32      | exact
+| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth  | - | 1       | min
+endif::VK_KHR_ray_tracing_pipeline[]
+| pname:maxShaderGroupStride                     | - | 4096    | min
+| pname:shaderGroupBaseAlignment                 | - | 64      | max
+| pname:maxGeometryCount                         | - | 2^24^-1 | min
+| pname:maxInstanceCount                         | - | 2^24^-1 | min
+ifdef::VK_NV_ray_tracing[]
+| pname:maxTriangleCount                         | - | 2^29^-1 | min
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure[]
+| pname:maxPrimitiveCount                        | - | 2^29^-1 | min
+| pname:maxPerStageDescriptorAccelerationStructures                 | - | 16         | min
+| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures  | - | 500000 ^9^ | min
+endif::VK_KHR_acceleration_structure[]
+| pname:maxDescriptorSetAccelerationStructures                      | - | 16         | min
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_acceleration_structure[]
+| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures       | - | 500000 ^9^ | min
+| pname:minAccelerationStructureScratchOffsetAlignment              | - | 256        | max
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+| pname:shaderGroupHandleCaptureReplaySize              | - | 64  | max
+| pname:maxRayDispatchInvocationCount                   | - | 2^30^ | min
+| pname:shaderGroupHandleAlignment                      | - | 32  | max
+| pname:maxRayHitAttributeSize                          | - | 32  | min
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+| pname:maxTimelineSemaphoreValueDifference      | - | 2^31^-1 | min
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_EXT_line_rasterization[]
+| pname:lineSubPixelPrecisionBits                | - | 4    | min
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_NV_device_generated_commands[]
+| pname:maxGraphicsShaderGroupCount               | - | 2^12^   | min
+| pname:maxIndirectSequenceCount                  | - | 2^20^   | min
+| pname:maxIndirectCommandsTokenCount             | - | 16     | min
+| pname:maxIndirectCommandsStreamCount            | - | 16     | min
+| pname:maxIndirectCommandsTokenOffset            | - | 2047   | min
+| pname:maxIndirectCommandsStreamStride           | - | 2048   | min
+| pname:minSequencesCountBufferOffsetAlignment    | - | 256    | max
+| pname:minSequencesIndexBufferOffsetAlignment    | - | 256    | max
+| pname:minIndirectCommandsBufferOffsetAlignment  | - | 256    | max
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_custom_border_color[]
+| pname:maxCustomBorderColorSamplers              | - | 32    | min
+endif::VK_EXT_custom_border_color[]
+ifdef::VK_EXT_robustness2[]
+| pname:robustStorageBufferAccessSizeAlignment   | - | 4    | max
+| pname:robustUniformBufferAccessSizeAlignment   | - | 256  | max
+endif::VK_EXT_robustness2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+| pname:minFragmentShadingRateAttachmentTexelSize           | (0,0) | (32,32) | max
+| pname:maxFragmentShadingRateAttachmentTexelSize           | (0,0) | (8,8)   | min
+| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio |  0   |   1     | min
+| pname:primitiveFragmentShadingRateWithMultipleViewports   | false | false   | implementation-dependent
+| pname:layeredShadingRateAttachments                       | false | false   | implementation-dependent
+| pname:fragmentShadingRateNonTrivialCombinerOps            |   -   | false   | implementation-dependent
+| pname:maxFragmentSize                                     |   -   | (2,2)   | min
+| pname:maxFragmentSizeAspectRatio                          |   -   | 2       | min
+| pname:maxFragmentShadingRateCoverageSamples               |   -   | 16      | min
+| pname:maxFragmentShadingRateRasterizationSamples          |   -   | ename:VK_SAMPLE_COUNT_4_BIT      | min
+| pname:fragmentShadingRateWithShaderDepthStencilWrites     |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateWithSampleMask                   |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateWithShaderSampleMask             |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateWithConservativeRasterization    |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateWithFragmentShaderInterlock      |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateWithCustomSampleLocations        |   -   | false   | implementation-dependent
+| pname:fragmentShadingRateStrictMultiplyCombiner           |   -   | false   | implementation-dependent
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_fragment_shading_rate_enums[]
+| pname:maxFragmentShadingRateInvocationCount               | - | ename:VK_SAMPLE_COUNT_4_BIT | min
+endif::VK_NV_fragment_shading_rate_enums[]
+ifdef::VK_EXT_descriptor_buffer[]
+| pname:combinedImageSamplerDescriptorSingleArray          | - | false | implementation-dependent
+| pname:bufferlessPushDescriptors            | - | false | implementation-dependent
+| pname:allowSamplerImageViewPostSubmitCreation     | - | false | implementation-dependent
+| pname:descriptorBufferOffsetAlignment             | - | 256 | max
+| pname:maxDescriptorBufferBindings                 | - | 3 | min
+| pname:maxResourceDescriptorBufferBindings         | - | 1 | min
+| pname:maxSamplerDescriptorBufferBindings          | - | 1 | min
+| pname:maxEmbeddedImmutableSamplerBindings         | - | 1 | min
+| pname:maxEmbeddedImmutableSamplers                | - | 2032 | min
+| pname:bufferCaptureReplayDescriptorDataSize       | - | 64 | max
+| pname:imageCaptureReplayDescriptorDataSize        | - | 64 | max
+| pname:imageViewCaptureReplayDescriptorDataSize    | - | 64 | max
+| pname:samplerCaptureReplayDescriptorDataSize      | - | 64 | max
+| pname:accelerationStructureCaptureReplayDescriptorDataSize | - | 64 | max
+| pname:samplerDescriptorSize                       | - | 256 | max
+| pname:combinedImageSamplerDescriptorSize          | - | 256 | max
+| pname:sampledImageDescriptorSize                  | - | 256 | max
+| pname:storageImageDescriptorSize                  | - | 256 | max
+| pname:uniformTexelBufferDescriptorSize            | - | 256 | max
+| pname:robustUniformTexelBufferDescriptorSize      | - | 256 | max
+| pname:storageTexelBufferDescriptorSize            | - | 256 | max
+| pname:robustStorageTexelBufferDescriptorSize      | - | 256 | max
+| pname:uniformBufferDescriptorSize                 | - | 256 | max
+| pname:robustUniformBufferDescriptorSize           | - | 256 | max
+| pname:storageBufferDescriptorSize                 | - | 256 | max
+| pname:robustStorageBufferDescriptorSize           | - | 256 | max
+| pname:inputAttachmentDescriptorSize               | - | 256 | max
+| pname:accelerationStructureDescriptorSize         | - | 256 | max
+| pname:maxSamplerDescriptorBufferRange             | - | [eq]#2^11^ {times} pname:samplerDescriptorSize# | min
+| pname:maxResourceDescriptorBufferRange            | - | [eq]#(2^20^ - 2^15^) {times} ptext:maxResourceDescriptorSize# ^12^ | min
+| pname:samplerDescriptorBufferAddressSpaceSize     | - | 2^27^ | min
+| pname:resourceDescriptorBufferAddressSpaceSize    | - | 2^27^ | min
+| pname:descriptorBufferAddressSpaceSize            | - | 2^27^ | min
+ifdef::VK_EXT_fragment_density_map[]
+| pname:combinedImageSamplerDensityMapDescriptorSize          | - | 256 | max
+endif::VK_EXT_fragment_density_map[]
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_HUAWEI_subpass_shading[]
+| pname:maxSubpassShadingWorkgroupSizeAspectRatio |  0   |   1     | min
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_EXT_multi_draw[]
+| pname:maxMultiDrawCount               | - | 1024 | min
+endif::VK_EXT_multi_draw[]
+ifdef::VK_EXT_nested_command_buffer[]
+| pname:maxCommandBufferNestingLevel                        | - | 1 | min
+endif::VK_EXT_nested_command_buffer[]
+ifdef::VKSC_VERSION_1_0[]
+| pname:deviceNoDynamicHostAllocations                      | - | -      | implementation-dependent
+| pname:deviceDestroyFreesMemory                            | - | -      | implementation-dependent
+| pname:commandPoolMultipleCommandBuffersRecording          | - | -      | implementation-dependent
+| pname:commandPoolResetCommandBuffer                       | - | -      | implementation-dependent
+| pname:commandBufferSimultaneousUse                        | - | -      | implementation-dependent
+| pname:secondaryCommandBufferNullOrImagelessFramebuffer    | - | -      | implementation-dependent
+| pname:recycleDescriptorSetMemory                          | - | -      | implementation-dependent
+| pname:recyclePipelineMemory                               | - | -      | implementation-dependent
+| pname:maxRenderPassSubpasses                              | - | 1      | min
+| pname:maxRenderPassDependencies                           | - | 18     | min
+| pname:maxSubpassInputAttachments                          | - | 0      | min
+| pname:maxSubpassPreserveAttachments                       | - | 0      | min
+| pname:maxFramebufferAttachments                           | - | 9 ^11^ | min
+| pname:maxDescriptorSetLayoutBindings                      | - | 64     | min
+| pname:maxQueryFaultCount                                  | - | 16     | min
+| pname:maxCallbackFaultCount                               | - | 1      | min
+| pname:maxCommandPoolCommandBuffers                        | - | 256    | min
+| pname:maxCommandBufferSize                                | - | 2^20^  | min
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+| pname:graphicsPipelineLibraryFastLinking                  | - | false | implementation-dependent
+| pname:graphicsPipelineLibraryIndependentInterpolationDecoration | - | false | implementation-dependent
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_KHR_fragment_shader_barycentric[]
+| pname:triStripVertexOrderIndependentOfProvokingVertex     |   -   | false   | implementation-dependent
+endif::VK_KHR_fragment_shader_barycentric[]
+ifdef::VK_QCOM_image_processing[]
+| pname:maxWeightFilterPhases           | - | 1024    | min
+| pname:maxWeightFilterDimension        | - | (64,64) | min
+| pname:maxBlockMatchRegion             | - | (64,64) | min
+| pname:maxBoxFilterBlockSize           | - | (64,64) | min
+endif::VK_QCOM_image_processing[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+| pname:dynamicPrimitiveTopologyUnrestricted   | - | -   | implementation-dependent
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_opacity_micromap[]
+| pname:maxOpacity2StateSubdivisionLevel | - | 3      | min
+| pname:maxOpacity4StateSubdivisionLevel | - | 3      | min
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_memory_decompression[]
+| pname:maxDecompressionIndirectCount    | 1 | 2^16^-1 | min
+endif::VK_NV_memory_decompression[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+| pname:maxWorkGroupCount | - | (65536,1,1) | min
+| pname:maxWorkGroupSize  | - | (32,1,1) | min
+| pname:maxOutputClusterCount | - | 1024 | min
+| pname:indirectBufferOffsetAlignment | - | - | implementation-dependent
+endif::VK_HUAWEI_cluster_culling_shader[]
+ifdef::VK_AMDX_shader_enqueue[]
+| pname:maxExecutionGraphDepth                              |   -   | 32      | min
+| pname:maxExecutionGraphShaderOutputNodes                  |   -   | 256     | min
+| pname:maxExecutionGraphShaderPayloadSize                  |   -   | 32768   | min
+| pname:maxExecutionGraphShaderPayloadCount                 |   -   | 256     | min
+| pname:executionGraphDispatchAddressAlignment              |   -   | 4       | max
+endif::VK_AMDX_shader_enqueue[]
+ifdef::VK_NV_extended_sparse_address_space[]
+| pname:extendedSparseAddressSpaceSize                      |   0   | pname:sparseAddressSpaceSize | min
+endif::VK_NV_extended_sparse_address_space[]
+|====
+
+1::
+    The *Limit Type* column specifies the limit is either the minimum limit
+    all implementations must: support, the maximum limit all implementations
+    must: support, or the exact value all implementations must: support.
+    For bitmasks a minimum limit is the least bits all implementations must:
+    set, but they may: have additional bits set beyond this minimum.
+
+2::
+    The pname:maxPerStageResources must: be at least the smallest of the
+    following:
++
+  * the sum of the pname:maxPerStageDescriptorUniformBuffers,
+    pname:maxPerStageDescriptorStorageBuffers,
+    pname:maxPerStageDescriptorSampledImages,
+    pname:maxPerStageDescriptorStorageImages,
+    pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
+    limits, or
+  * 128.
++
+It may: not be possible to reach this limit in every stage.
+
+3::
+    See <<limits-maxViewportDimensions, pname:maxViewportDimensions>> for
+    the required: relationship to other limits.
+
+4::
+    See <<limits-viewportboundsrange, pname:viewportBoundsRange>> for the
+    required: relationship to other limits.
+
+5::
+    The values pname:minInterpolationOffset and pname:maxInterpolationOffset
+    describe the closed interval of supported interpolation offsets:
+    [pname:minInterpolationOffset, pname:maxInterpolationOffset].
+    The ULP is determined by pname:subPixelInterpolationOffsetBits.
+    If pname:subPixelInterpolationOffsetBits is 4, this provides increments
+    of (1/2^4^) = 0.0625, and thus the range of supported interpolation
+    offsets would be [eq]#[-0.5, 0.4375]#.
+
+6::
+    The point size ULP is determined by pname:pointSizeGranularity.
+    If the pname:pointSizeGranularity is 0.125, the range of supported point
+    sizes must: be at least [1.0, 63.875].
+
+7::
+    The line width ULP is determined by pname:lineWidthGranularity.
+    If the pname:lineWidthGranularity is 0.0625, the range of supported line
+    widths must: be at least [1.0, 7.9375].
+
+8::
+    The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
+    _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
+    the number of shader stages supported by the slink:VkPhysicalDevice.
+    If all shader stages are supported, _n_ = 6 (vertex, tessellation
+    control, tessellation evaluation, geometry, fragment, compute).
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+9::
+    The ptext:UpdateAfterBind descriptor limits must: each be greater than
+    or equal to the corresponding ptext:non-UpdateAfterBind limit.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_KHR_portability_subset[]
+10::
+     If the `apiext:VK_KHR_portability_subset` extension is enabled, the
+     required minimum value of pname:maxVertexInputBindings is code:8.
+endif::VK_KHR_portability_subset[]
+
+ifdef::VKSC_VERSION_1_0[]
+11:: ptext:maxFramebufferAttachments must: be greater than or equal to two
+     times pname:maxColorAttachments (for color and resolve attachments)
+     plus one (for the depth/stencil attachment), or else must: be equal to
+     2^32^-1.
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_EXT_descriptor_buffer[]
+12::
+     ptext:maxResourceDescriptorSize is defined as the maximum value of
+     pname:storageImageDescriptorSize, pname:sampledImageDescriptorSize,
+     pname:robustUniformTexelBufferDescriptorSize,
+     pname:robustStorageTexelBufferDescriptorSize,
+     pname:robustUniformBufferDescriptorSize,
+     pname:robustStorageBufferDescriptorSize,
+     pname:inputAttachmentDescriptorSize, and
+     pname:accelerationStructureDescriptorSize.
+endif::VK_EXT_descriptor_buffer[]
+
+
+ifdef::VK_EXT_sample_locations[]
+[[limits-multisample]]
+== Additional Multisampling Capabilities
+
+[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
+--
+To query additional multisampling capabilities which may: be supported for a
+specific sample count, beyond the minimum capabilities described for
+<<limits, Limits>> above, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    additional multisampling capabilities.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    sample count to query capabilities for.
+  * pname:pMultisampleProperties is a pointer to a
+    slink:VkMultisamplePropertiesEXT structure in which information about
+    additional multisampling capabilities specific to the sample count is
+    returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[]
+--
+
+[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
+--
+The sname:VkMultisamplePropertiesEXT structure is defined as
+
+include::{generated}/api/structs/VkMultisamplePropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
+    which sample locations can: vary.
+
+include::{generated}/validity/structs/VkMultisamplePropertiesEXT.adoc[]
+--
+
+If the sample count for which additional multisampling capabilities are
+requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set in
+<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the
+pname:width and pname:height members of
+sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be
+greater than or equal to the corresponding members of
+<<limits-maxSampleLocationGridSize, pname:maxSampleLocationGridSize>>,
+respectively, otherwise both members must: be `0`.
+
+endif::VK_EXT_sample_locations[]
+
+// If you are adding a new features structure, it must be placed at the end
+// of the previous section (immediately before <<limits-multisample>>).
+
+
+ifdef::VK_VERSION_1_3[]
+[[profile-limits]]
+== Profile Limits
+
+
+[[profile-limits-roadmap-2022]]
+=== Roadmap 2022
+
+Implementations that claim support for the <<roadmap-2022, Roadmap 2022>>
+profile must: satisfy the following additional limit requirements:
+
+[width="100%",cols="<35,<14,<11",options="header"]
+|====
+| Limit                                    | Supported Limit  | Limit Type^1^
+| pname:maxImageDimension1D                   | 8192          | min
+| pname:maxImageDimension2D                   | 8192          | min
+| pname:maxImageDimensionCube                 | 8192          | min
+| pname:maxImageArrayLayers                   | 2048          | min
+| pname:maxUniformBufferRange                 | 65536         | min
+| pname:bufferImageGranularity                | 4096          | max
+| pname:maxPerStageDescriptorSamplers         | 64            | min
+| pname:maxPerStageDescriptorUniformBuffers   | 15            | min
+| pname:maxPerStageDescriptorStorageBuffers   | 30            | min
+| pname:maxPerStageDescriptorSampledImages    | 200           | min
+| pname:maxPerStageDescriptorStorageImages    | 16            | min
+| pname:maxPerStageResources                  | 200           | min
+| pname:maxDescriptorSetSamplers              | 576           | min
+| pname:maxDescriptorSetUniformBuffers        | 90            | min
+| pname:maxDescriptorSetStorageBuffers        | 96            | min
+| pname:maxDescriptorSetSampledImages         | 1800          | min
+| pname:maxDescriptorSetStorageImages         | 144           | min
+| pname:maxFragmentCombinedOutputResources    | 16            | min
+| pname:maxComputeWorkGroupInvocations        | 256           | min
+| pname:maxComputeWorkGroupSize               | (256,256,64)  | min
+| pname:subTexelPrecisionBits                 | 8             | min
+| pname:mipmapPrecisionBits                   | 6             | min
+| pname:maxSamplerLodBias                     | 14            | min
+| pname:pointSizeGranularity                  | 0.125         | max
+| pname:lineWidthGranularity                  | 0.5           | max
+| pname:standardSampleLocations               | ename:VK_TRUE | Boolean
+| pname:maxColorAttachments                   | 7             | min
+| pname:subgroupSize                          | 4             | min
+| pname:subgroupSupportedStages               | ename:VK_SHADER_STAGE_COMPUTE_BIT +
+                                                ename:VK_SHADER_STAGE_FRAGMENT_BIT
+                                                              | bitfield
+| pname:subgroupSupportedOperations           | ename:VK_SUBGROUP_FEATURE_BASIC_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_VOTE_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_BALLOT_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT +
+                                                ename:VK_SUBGROUP_FEATURE_QUAD_BIT
+                                                              | bitfield
+| pname:shaderSignedZeroInfNanPreserveFloat16 | ename:VK_TRUE | Boolean
+| pname:shaderSignedZeroInfNanPreserveFloat32 | ename:VK_TRUE | Boolean
+| pname:maxSubgroupSize                       | 4             | min
+| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 7    | min
+|====
+endif::VK_VERSION_1_3[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/memory.adoc b/codegen/vulkan/vulkan-docs-next/chapters/memory.adoc
new file mode 100644
index 0000000..ac391b7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/memory.adoc
@@ -0,0 +1,4543 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[memory]]
+= Memory Allocation
+
+Vulkan memory is broken up into two categories, _host memory_ and _device
+memory_.
+
+
+[[memory-host]]
+== Host Memory
+
+Host memory is memory needed by the Vulkan implementation for
+non-device-visible storage.
+
+[NOTE]
+.Note
+====
+This memory may: be used to store the implementation's representation and
+state of Vulkan objects.
+====
+
+[[memory-allocation]]
+
+ifdef::VKSC_VERSION_1_0[]
+The Vulkan SC implementation will perform its own host memory allocations.
+Support for application-provided memory allocation, as supported in Base
+Vulkan, has been removed in Vulkan SC.
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+Vulkan provides applications the opportunity to perform host memory
+allocations on behalf of the Vulkan implementation.
+If this feature is not used, the implementation will perform its own memory
+allocations.
+Since most memory allocations are off the critical path, this is not meant
+as a performance feature.
+Rather, this can: be useful for certain embedded systems, for debugging
+purposes (e.g. putting a guard page after all host allocations), or for
+memory allocation logging.
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VkAllocationCallbacks',desc='Structure containing callback function pointers for memory allocation',type='structs']
+--
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * <<memory-vkallocationcallbacks-null, vkCreate*>>::pname:pAllocator must:
+    be `NULL` <<SCID-2>>, <<SCID-8>>.
+  * <<memory-vkallocationcallbacks-null, vkDestroy*>>::pname:pAllocator
+    must: be `NULL` <<SCID-2>>, <<SCID-8>>.
+  * <<memory-vkallocationcallbacks-null, vk*Memory>>::pname:pAllocator must:
+    be `NULL` <<SCID-2>>, <<SCID-8>>.
+  * <<memory-vkallocationcallbacks-null,
+    vkRegisterDeviceEventEXT>>::pname:pAllocator must: be `NULL` <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+
+[[memory-vkallocationcallbacks-null]]
+sname:VkAllocationCallbacks is not supported and pointers to this type must:
+be `NULL` <<SCID-2>>, <<SCID-8>>.
+
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+Allocators are provided by the application as a pointer to a
+sname:VkAllocationCallbacks structure:
+
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/api/structs/VkAllocationCallbacks.adoc[]
+
+ifndef::VKSC_VERSION_1_0[]
+
+  * pname:pUserData is a value to be interpreted by the implementation of
+    the callbacks.
+    When any of the callbacks in sname:VkAllocationCallbacks are called, the
+    Vulkan implementation will pass this value as the first parameter to the
+    callback.
+    This value can: vary each time an allocator is passed into a command,
+    even when the same object takes an allocator in multiple commands.
+  * pname:pfnAllocation is a tlink:PFN_vkAllocationFunction pointer to an
+    application-defined memory allocation function.
+  * pname:pfnReallocation is a tlink:PFN_vkReallocationFunction pointer to
+    an application-defined memory reallocation function.
+  * pname:pfnFree is a tlink:PFN_vkFreeFunction pointer to an
+    application-defined memory free function.
+  * pname:pfnInternalAllocation is a
+    tlink:PFN_vkInternalAllocationNotification pointer to an
+    application-defined function that is called by the implementation when
+    the implementation makes internal allocations.
+  * pname:pfnInternalFree is a tlink:PFN_vkInternalFreeNotification pointer
+    to an application-defined function that is called by the implementation
+    when the implementation frees internal allocations.
+
+.Valid Usage
+****
+  * [[VUID-VkAllocationCallbacks-pfnAllocation-00632]]
+    pname:pfnAllocation must: be a valid pointer to a valid user-defined
+    tlink:PFN_vkAllocationFunction
+  * [[VUID-VkAllocationCallbacks-pfnReallocation-00633]]
+    pname:pfnReallocation must: be a valid pointer to a valid user-defined
+    tlink:PFN_vkReallocationFunction
+  * [[VUID-VkAllocationCallbacks-pfnFree-00634]]
+    pname:pfnFree must: be a valid pointer to a valid user-defined
+    tlink:PFN_vkFreeFunction
+  * [[VUID-VkAllocationCallbacks-pfnInternalAllocation-00635]]
+    If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not
+    `NULL`, both must: be valid callbacks
+****
+
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkAllocationCallbacks.adoc[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * ename:VkSystemAllocationScope, ename:VkInternalAllocationType <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+
+[open,refpage='PFN_vkAllocationFunction',desc='Application-defined memory allocation function',type='funcpointers',xrefs='VkAllocationCallbacks']
+--
+The type of pname:pfnAllocation is:
+
+include::{generated}/api/funcpointers/PFN_vkAllocationFunction.adoc[]
+
+  * pname:pUserData is the value specified for
+    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
+    by the application.
+  * pname:size is the size in bytes of the requested allocation.
+  * pname:alignment is the requested alignment of the allocation in bytes
+    and must: be a power of two.
+  * pname:allocationScope is a elink:VkSystemAllocationScope value
+    specifying the allocation scope of the lifetime of the allocation, as
+    described <<memory-host-allocation-scope,here>>.
+
+[[vkAllocationFunction_return_rules]]
+If pname:pfnAllocation is unable to allocate the requested memory, it must:
+return `NULL`.
+If the allocation was successful, it must: return a valid pointer to memory
+allocation containing at least pname:size bytes, and with the pointer value
+being a multiple of pname:alignment.
+
+[NOTE]
+.Note
+====
+Correct Vulkan operation cannot: be assumed if the application does not
+follow these rules.
+
+For example, pname:pfnAllocation (or pname:pfnReallocation) could cause
+termination of running Vulkan instance(s) on a failed allocation for
+debugging purposes, either directly or indirectly.
+In these circumstances, it cannot: be assumed that any part of any affected
+slink:VkInstance objects are going to operate correctly (even
+flink:vkDestroyInstance), and the application must: ensure it cleans up
+properly via other means (e.g. process termination).
+====
+
+If pname:pfnAllocation returns `NULL`, and if the implementation is unable
+to continue correct processing of the current command without the requested
+allocation, it must: treat this as a runtime error, and generate
+ename:VK_ERROR_OUT_OF_HOST_MEMORY at the appropriate time for the command in
+which the condition was detected, as described in <<fundamentals-errorcodes,
+Return Codes>>.
+
+If the implementation is able to continue correct processing of the current
+command without the requested allocation, then it may: do so, and must: not
+generate ename:VK_ERROR_OUT_OF_HOST_MEMORY as a result of this failed
+allocation.
+--
+
+[open,refpage='PFN_vkReallocationFunction',desc='Application-defined memory reallocation function',type='funcpointers',xrefs='VkAllocationCallbacks']
+--
+The type of pname:pfnReallocation is:
+
+include::{generated}/api/funcpointers/PFN_vkReallocationFunction.adoc[]
+
+  * pname:pUserData is the value specified for
+    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
+    by the application.
+  * pname:pOriginal must: be either `NULL` or a pointer previously returned
+    by pname:pfnReallocation or pname:pfnAllocation of a compatible
+    allocator.
+  * pname:size is the size in bytes of the requested allocation.
+  * pname:alignment is the requested alignment of the allocation in bytes
+    and must: be a power of two.
+  * pname:allocationScope is a elink:VkSystemAllocationScope value
+    specifying the allocation scope of the lifetime of the allocation, as
+    described <<memory-host-allocation-scope,here>>.
+
+If the reallocation was successful, pname:pfnReallocation must: return an
+allocation with enough space for pname:size bytes, and the contents of the
+original allocation from bytes zero to [eq]#min(original size, new size) -
+1# must: be preserved in the returned allocation.
+If pname:size is larger than the old size, the contents of the additional
+space are undefined:.
+If satisfying these requirements involves creating a new allocation, then
+the old allocation should: be freed.
+
+If pname:pOriginal is `NULL`, then pname:pfnReallocation must: behave
+equivalently to a call to tlink:PFN_vkAllocationFunction with the same
+parameter values (without pname:pOriginal).
+
+If pname:size is zero, then pname:pfnReallocation must: behave equivalently
+to a call to tlink:PFN_vkFreeFunction with the same pname:pUserData
+parameter value, and pname:pMemory equal to pname:pOriginal.
+
+If pname:pOriginal is non-`NULL`, the implementation must: ensure that
+pname:alignment is equal to the pname:alignment used to originally allocate
+pname:pOriginal.
+
+If this function fails and pname:pOriginal is non-`NULL` the application
+must: not free the old allocation.
+
+pname:pfnReallocation must: follow the same
+<<vkAllocationFunction_return_rules, rules for return values as
+tname:PFN_vkAllocationFunction>>.
+--
+
+[open,refpage='PFN_vkFreeFunction',desc='Application-defined memory free function',type='funcpointers',xrefs='VkAllocationCallbacks']
+--
+The type of pname:pfnFree is:
+
+include::{generated}/api/funcpointers/PFN_vkFreeFunction.adoc[]
+
+  * pname:pUserData is the value specified for
+    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
+    by the application.
+  * pname:pMemory is the allocation to be freed.
+
+pname:pMemory may: be `NULL`, which the callback must: handle safely.
+If pname:pMemory is non-`NULL`, it must: be a pointer previously allocated
+by pname:pfnAllocation or pname:pfnReallocation.
+The application should: free this memory.
+--
+
+[open,refpage='PFN_vkInternalAllocationNotification',desc='Application-defined memory allocation notification function',type='funcpointers',xrefs='VkAllocationCallbacks']
+--
+The type of pname:pfnInternalAllocation is:
+
+include::{generated}/api/funcpointers/PFN_vkInternalAllocationNotification.adoc[]
+
+  * pname:pUserData is the value specified for
+    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
+    by the application.
+  * pname:size is the requested size of an allocation.
+  * pname:allocationType is a elink:VkInternalAllocationType value
+    specifying the requested type of an allocation.
+  * pname:allocationScope is a elink:VkSystemAllocationScope value
+    specifying the allocation scope of the lifetime of the allocation, as
+    described <<memory-host-allocation-scope,here>>.
+
+This is a purely informational callback.
+--
+
+[open,refpage='PFN_vkInternalFreeNotification',desc='Application-defined memory free notification function',type='funcpointers',xrefs='VkAllocationCallbacks']
+--
+The type of pname:pfnInternalFree is:
+
+include::{generated}/api/funcpointers/PFN_vkInternalFreeNotification.adoc[]
+
+  * pname:pUserData is the value specified for
+    slink:VkAllocationCallbacks::pname:pUserData in the allocator specified
+    by the application.
+  * pname:size is the requested size of an allocation.
+  * pname:allocationType is a elink:VkInternalAllocationType value
+    specifying the requested type of an allocation.
+  * pname:allocationScope is a elink:VkSystemAllocationScope value
+    specifying the allocation scope of the lifetime of the allocation, as
+    described <<memory-host-allocation-scope,here>>.
+--
+
+[open,refpage='VkSystemAllocationScope',desc='Allocation scope',type='enums',xrefs='VkAllocationCallbacks']
+--
+[[memory-host-allocation-scope]]
+Each allocation has an _allocation scope_ defining its lifetime and which
+object it is associated with.
+Possible values passed to the pname:allocationScope parameter of the
+callback functions specified by slink:VkAllocationCallbacks, indicating the
+allocation scope, are:
+
+include::{generated}/api/enums/VkSystemAllocationScope.adoc[]
+
+  * ename:VK_SYSTEM_ALLOCATION_SCOPE_COMMAND specifies that the allocation
+    is scoped to the duration of the Vulkan command.
+  * ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT specifies that the allocation is
+    scoped to the lifetime of the Vulkan object that is being created or
+    used.
+  * ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE specifies that the allocation is
+    scoped to the lifetime of a sname:VkPipelineCache
+ifdef::VK_EXT_validation_cache[]
+    or sname:VkValidationCacheEXT
+endif::VK_EXT_validation_cache[]
+    object.
+  * ename:VK_SYSTEM_ALLOCATION_SCOPE_DEVICE specifies that the allocation is
+    scoped to the lifetime of the Vulkan device.
+  * ename:VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE specifies that the allocation
+    is scoped to the lifetime of the Vulkan instance.
+
+Most Vulkan commands operate on a single object, or there is a sole object
+that is being created or manipulated.
+When an allocation uses an allocation scope of
+ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT or
+ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE, the allocation is scoped to the
+object being created or manipulated.
+
+When an implementation requires host memory, it will make callbacks to the
+application using the most specific allocator and allocation scope
+available:
+
+  * If an allocation is scoped to the duration of a command, the allocator
+    will use the ename:VK_SYSTEM_ALLOCATION_SCOPE_COMMAND allocation scope.
+    The most specific allocator available is used: if the object being
+    created or manipulated has an allocator, that object's allocator will be
+    used, else if the parent sname:VkDevice has an allocator it will be
+    used, else if the parent sname:VkInstance has an allocator it will be
+    used.
+    Else,
+  * If an allocation is associated with a
+ifdef::VK_EXT_validation_cache[]
+    sname:VkValidationCacheEXT or
+endif::VK_EXT_validation_cache[]
+    sname:VkPipelineCache object, the allocator will use the
+    ename:VK_SYSTEM_ALLOCATION_SCOPE_CACHE allocation scope.
+    The most specific allocator available is used (cache, else device, else
+    instance).
+    Else,
+  * If an allocation is scoped to the lifetime of an object, that object is
+    being created or manipulated by the command, and that object's type is
+    not sname:VkDevice or sname:VkInstance, the allocator will use an
+    allocation scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_OBJECT.
+    The most specific allocator available is used (object, else device, else
+    instance).
+    Else,
+  * If an allocation is scoped to the lifetime of a device, the allocator
+    will use an allocation scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_DEVICE.
+    The most specific allocator available is used (device, else instance).
+    Else,
+  * If the allocation is scoped to the lifetime of an instance and the
+    instance has an allocator, its allocator will be used with an allocation
+    scope of ename:VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE.
+  * Otherwise an implementation will allocate memory through an alternative
+    mechanism that is unspecified.
+--
+
+Objects that are allocated from pools do not specify their own allocator.
+When an implementation requires host memory for such an object, that memory
+is sourced from the object's parent pool's allocator.
+
+The application is not expected to handle allocating memory that is intended
+for execution by the host due to the complexities of differing security
+implementations across multiple platforms.
+The implementation will allocate such memory internally and invoke an
+application provided informational callback when these _internal
+allocations_ are allocated and freed.
+Upon allocation of executable memory, pname:pfnInternalAllocation will be
+called.
+Upon freeing executable memory, pname:pfnInternalFree will be called.
+An implementation will only call an informational callback for executable
+memory allocations and frees.
+
+[open,refpage='VkInternalAllocationType',desc='Allocation type',type='enums',xrefs='PFN_vkInternalAllocationNotification PFN_vkInternalFreeNotification']
+--
+The pname:allocationType parameter to the pname:pfnInternalAllocation and
+pname:pfnInternalFree functions may: be one of the following values:
+
+include::{generated}/api/enums/VkInternalAllocationType.adoc[]
+
+  * ename:VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE specifies that the
+    allocation is intended for execution by the host.
+--
+
+An implementation must: only make calls into an application-provided
+allocator during the execution of an API command.
+An implementation must: only make calls into an application-provided
+allocator from the same thread that called the provoking API command.
+The implementation should: not synchronize calls to any of the callbacks.
+If synchronization is needed, the callbacks must: provide it themselves.
+The informational callbacks are subject to the same restrictions as the
+allocation callbacks.
+
+If an implementation intends to make calls through a
+sname:VkAllocationCallbacks structure between the time a ftext:vkCreate*
+command returns and the time a corresponding ftext:vkDestroy* command
+begins, that implementation must: save a copy of the allocator before the
+ftext:vkCreate* command returns.
+The callback functions and any data structures they rely upon must: remain
+valid for the lifetime of the object they are associated with.
+
+If an allocator is provided to a ftext:vkCreate* command, a _compatible_
+allocator must: be provided to the corresponding ftext:vkDestroy* command.
+Two sname:VkAllocationCallbacks structures are compatible if memory
+allocated with pname:pfnAllocation or pname:pfnReallocation in each can: be
+freed with pname:pfnReallocation or pname:pfnFree in the other.
+An allocator must: not be provided to a ftext:vkDestroy* command if an
+allocator was not provided to the corresponding ftext:vkCreate* command.
+
+If a non-`NULL` allocator is used, the pname:pfnAllocation,
+pname:pfnReallocation and pname:pfnFree members must: be non-`NULL` and
+point to valid implementations of the callbacks.
+An application can: choose to not provide informational callbacks by setting
+both pname:pfnInternalAllocation and pname:pfnInternalFree to `NULL`.
+pname:pfnInternalAllocation and pname:pfnInternalFree must: either both be
+`NULL` or both be non-`NULL`.
+
+If pname:pfnAllocation or pname:pfnReallocation fail, the implementation
+may: fail object creation and/or generate a
+ename:VK_ERROR_OUT_OF_HOST_MEMORY error, as appropriate.
+
+Allocation callbacks must: not call any Vulkan commands.
+
+The following sets of rules define when an implementation is permitted to
+call the allocator callbacks.
+
+pname:pfnAllocation or pname:pfnReallocation may: be called in the following
+situations:
+
+  * Allocations scoped to a sname:VkDevice or sname:VkInstance may: be
+    allocated from any API command.
+  * Allocations scoped to a command may: be allocated from any API command.
+  * Allocations scoped to a sname:VkPipelineCache may: only be allocated
+    from:
+  ** fname:vkCreatePipelineCache
+  ** fname:vkMergePipelineCaches for pname:dstCache
+  ** fname:vkCreateGraphicsPipelines for pname:pipelineCache
+  ** fname:vkCreateComputePipelines for pname:pipelineCache
+ifdef::VK_EXT_validation_cache[]
+  * Allocations scoped to a sname:VkValidationCacheEXT may: only be
+    allocated from:
+  ** fname:vkCreateValidationCacheEXT
+  ** fname:vkMergeValidationCachesEXT for pname:dstCache
+  ** fname:vkCreateShaderModule for pname:validationCache in
+     slink:VkShaderModuleValidationCacheCreateInfoEXT
+endif::VK_EXT_validation_cache[]
+  * Allocations scoped to a sname:VkDescriptorPool may: only be allocated
+    from:
+  ** any command that takes the pool as a direct argument
+  ** fname:vkAllocateDescriptorSets for the pname:descriptorPool member of
+     its pname:pAllocateInfo parameter
+  ** fname:vkCreateDescriptorPool
+  * Allocations scoped to a sname:VkCommandPool may: only be allocated from:
+  ** any command that takes the pool as a direct argument
+  ** fname:vkCreateCommandPool
+  ** fname:vkAllocateCommandBuffers for the pname:commandPool member of its
+     pname:pAllocateInfo parameter
+  ** any ftext:vkCmd* command whose pname:commandBuffer was allocated from
+     that sname:VkCommandPool
+  * Allocations scoped to any other object may: only be allocated in that
+    object's ftext:vkCreate* command.
+
+pname:pfnFree, or pname:pfnReallocation with zero pname:size, may: be called
+in the following situations:
+
+  * Allocations scoped to a sname:VkDevice or sname:VkInstance may: be freed
+    from any API command.
+  * Allocations scoped to a command must: be freed by any API command which
+    allocates such memory.
+  * Allocations scoped to a sname:VkPipelineCache may: be freed from
+    fname:vkDestroyPipelineCache.
+ifdef::VK_EXT_validation_cache[]
+  * Allocations scoped to a sname:VkValidationCacheEXT may: be freed from
+    fname:vkDestroyValidationCacheEXT.
+endif::VK_EXT_validation_cache[]
+  * Allocations scoped to a sname:VkDescriptorPool may: be freed from
+  ** any command that takes the pool as a direct argument
+  * Allocations scoped to a sname:VkCommandPool may: be freed from:
+  ** any command that takes the pool as a direct argument
+  ** fname:vkResetCommandBuffer whose pname:commandBuffer was allocated from
+     that sname:VkCommandPool
+  * Allocations scoped to any other object may: be freed in that object's
+    ftext:vkDestroy* command.
+  * Any command that allocates host memory may: also free host memory of the
+    same scope.
+
+endif::VKSC_VERSION_1_0[]
+
+[[memory-device]]
+== Device Memory
+
+_Device memory_ is memory that is visible to the device -- for example the
+contents of the image or buffer objects, which can: be natively used by the
+device.
+
+
+[[memory-device-properties]]
+=== Device Memory Properties
+
+Memory properties of a physical device describe the memory heaps and memory
+types available.
+
+[open,refpage='vkGetPhysicalDeviceMemoryProperties',desc='Reports memory information for the specified physical device',type='protos']
+--
+To query memory properties, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties.adoc[]
+
+  * pname:physicalDevice is the handle to the device to query.
+  * pname:pMemoryProperties is a pointer to a
+    slink:VkPhysicalDeviceMemoryProperties structure in which the properties
+    are returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceMemoryProperties.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceMemoryProperties',desc='Structure specifying physical device memory properties',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties.adoc[]
+
+  * pname:memoryTypeCount is the number of valid elements in the
+    pname:memoryTypes array.
+  * pname:memoryTypes is an array of ename:VK_MAX_MEMORY_TYPES
+    slink:VkMemoryType structures describing the _memory types_ that can: be
+    used to access memory allocated from the heaps specified by
+    pname:memoryHeaps.
+  * pname:memoryHeapCount is the number of valid elements in the
+    pname:memoryHeaps array.
+  * pname:memoryHeaps is an array of ename:VK_MAX_MEMORY_HEAPS
+    slink:VkMemoryHeap structures describing the _memory heaps_ from which
+    memory can: be allocated.
+
+The sname:VkPhysicalDeviceMemoryProperties structure describes a number of
+_memory heaps_ as well as a number of _memory types_ that can: be used to
+access memory allocated in those heaps.
+Each heap describes a memory resource of a particular size, and each memory
+type describes a set of memory properties (e.g. host cached vs. uncached)
+that can: be used with a given memory heap.
+Allocations using a particular memory type will consume resources from the
+heap indicated by that memory type's heap index.
+More than one memory type may: share each heap, and the heaps and memory
+types provide a mechanism to advertise an accurate size of the physical
+memory resources while allowing the memory to be used with a variety of
+different properties.
+
+The number of memory heaps is given by pname:memoryHeapCount and is less
+than or equal to ename:VK_MAX_MEMORY_HEAPS.
+Each heap is described by an element of the pname:memoryHeaps array as a
+slink:VkMemoryHeap structure.
+The number of memory types available across all memory heaps is given by
+pname:memoryTypeCount and is less than or equal to
+ename:VK_MAX_MEMORY_TYPES.
+Each memory type is described by an element of the pname:memoryTypes array
+as a slink:VkMemoryType structure.
+
+At least one heap must: include ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT in
+slink:VkMemoryHeap::pname:flags.
+If there are multiple heaps that all have similar performance
+characteristics, they may: all include
+ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT.
+In a unified memory architecture (UMA) system there is often only a single
+memory heap which is considered to be equally "`local`" to the host and to
+the device, and such an implementation must: advertise the heap as
+device-local.
+
+[[memory-device-bitmask-list]]
+Each memory type returned by flink:vkGetPhysicalDeviceMemoryProperties must:
+have its pname:propertyFlags set to one of the following values:
+
+  * 0
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT |
+    ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
+endif::VK_VERSION_1_1[]
+ifdef::VK_AMD_device_coherent_memory[]
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | +
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD | +
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD
+endif::VK_AMD_device_coherent_memory[]
+ifdef::VK_NV_external_memory_rdma[]
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | +
+    ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV
+endif::VK_NV_external_memory_rdma[]
+
+There must: be at least one memory type with both the
+ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bits set in its
+pname:propertyFlags.
+There must: be at least one memory type with the
+ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set in its
+pname:propertyFlags.
+ifdef::VK_AMD_device_coherent_memory[]
+If the <<features-deviceCoherentMemory, pname:deviceCoherentMemory>> feature
+is enabled, there must: be at least one memory type with the
+ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit set in its
+pname:propertyFlags.
+endif::VK_AMD_device_coherent_memory[]
+
+For each pair of elements *X* and *Y* returned in pname:memoryTypes, *X*
+must: be placed at a lower index position than *Y* if:
+
+  * the set of bit flags returned in the pname:propertyFlags member of *X*
+    is a strict subset of the set of bit flags returned in the
+    pname:propertyFlags member of *Y*; or
+  * the pname:propertyFlags members of *X* and *Y* are equal, and *X*
+    belongs to a memory heap with greater performance (as determined in an
+    implementation-specific manner)
+ifdef::VK_AMD_device_coherent_memory[]
+    ; or
+  * the pname:propertyFlags members of *Y* includes
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD or
+    ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD and *X* does not
+endif::VK_AMD_device_coherent_memory[]
+
+[NOTE]
+.Note
+====
+There is no ordering requirement between *X* and *Y* elements for the case
+their pname:propertyFlags members are not in a subset relation.
+That potentially allows more than one possible way to order the same set of
+memory types.
+Notice that the <<memory-device-bitmask-list,list of all allowed memory
+property flag combinations>> is written in a valid order.
+But if instead ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT was before
+ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, the list would still be in a
+valid order.
+ifdef::VK_AMD_device_coherent_memory[]
+
+There may be a performance penalty for using device coherent or uncached
+device memory types, and using these accidentally is undesirable.
+In order to avoid this, memory types with these properties always appear at
+the end of the list; but are subject to the same rules otherwise.
+endif::VK_AMD_device_coherent_memory[]
+====
+
+This ordering requirement enables applications to use a simple search loop
+to select the desired memory type along the lines of:
+
+[source,c++]
+----
+// Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
+int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
+                       uint32_t memoryTypeBitsRequirement,
+                       VkMemoryPropertyFlags requiredProperties) {
+    const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
+    for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
+        const uint32_t memoryTypeBits = (1 << memoryIndex);
+        const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
+
+        const VkMemoryPropertyFlags properties =
+            pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
+        const bool hasRequiredProperties =
+            (properties & requiredProperties) == requiredProperties;
+
+        if (isRequiredMemoryType && hasRequiredProperties)
+            return static_cast<int32_t>(memoryIndex);
+    }
+
+    // failed to find memory type
+    return -1;
+}
+
+// Try to find an optimal memory type, or if it does not exist try fallback memory type
+// `device` is the VkDevice
+// `image` is the VkImage that requires memory to be bound
+// `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
+// `requiredProperties` are the property flags that must be present
+// `optimalProperties` are the property flags that are preferred by the application
+VkMemoryRequirements memoryRequirements;
+vkGetImageMemoryRequirements(device, image, &memoryRequirements);
+int32_t memoryType =
+    findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
+if (memoryType == -1) // not found; try fallback properties
+    memoryType =
+        findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
+----
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryProperties.adoc[]
+--
+
+[open,refpage='VK_MAX_MEMORY_TYPES',desc='Length of an array of memory types',type='consts']
+--
+ename:VK_MAX_MEMORY_TYPES is the length of an array of slink:VkMemoryType
+structures describing memory types, as returned in
+slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypes.
+
+include::{generated}/api/enums/VK_MAX_MEMORY_TYPES.adoc[]
+--
+
+[open,refpage='VK_MAX_MEMORY_HEAPS',desc='Length of an array of memory heaps',type='consts']
+--
+ename:VK_MAX_MEMORY_HEAPS is the length of an array of slink:VkMemoryHeap
+structures describing memory heaps, as returned in
+slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeaps.
+
+include::{generated}/api/enums/VK_MAX_MEMORY_HEAPS.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[open,refpage='vkGetPhysicalDeviceMemoryProperties2',desc='Reports memory information for the specified physical device',type='protos']
+--
+To query memory properties, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceMemoryProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the handle to the device to query.
+  * pname:pMemoryProperties is a pointer to a
+    slink:VkPhysicalDeviceMemoryProperties2 structure in which the
+    properties are returned.
+
+fname:vkGetPhysicalDeviceMemoryProperties2 behaves similarly to
+flink:vkGetPhysicalDeviceMemoryProperties, with the ability to return
+extended information in a pname:pNext chain of output structures.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceMemoryProperties2.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceMemoryProperties2',desc='Structure specifying physical device memory properties',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryProperties is a slink:VkPhysicalDeviceMemoryProperties
+    structure which is populated with the same values as in
+    flink:vkGetPhysicalDeviceMemoryProperties.
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryProperties2.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+[open,refpage='VkMemoryHeap',desc='Structure specifying a memory heap',type='structs']
+--
+The sname:VkMemoryHeap structure is defined as:
+
+include::{generated}/api/structs/VkMemoryHeap.adoc[]
+
+  * pname:size is the total memory size in bytes in the heap.
+  * pname:flags is a bitmask of elink:VkMemoryHeapFlagBits specifying
+    attribute flags for the heap.
+
+include::{generated}/validity/structs/VkMemoryHeap.adoc[]
+--
+
+[open,refpage='VkMemoryHeapFlagBits',desc='Bitmask specifying attribute flags for a heap',type='enums']
+--
+Bits which may: be set in slink:VkMemoryHeap::pname:flags, indicating
+attribute flags for the heap, are:
+
+include::{generated}/api/enums/VkMemoryHeapFlagBits.adoc[]
+
+  * ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT specifies that the heap
+    corresponds to device-local memory.
+    Device-local memory may: have different performance characteristics than
+    host-local memory, and may: support different memory property flags.
+ifdef::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+  * ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT specifies that in a logical
+    device representing more than one physical device, there is a
+    per-physical device instance of the heap memory.
+    By default, an allocation from such a heap will be replicated to each
+    physical device's instance of the heap.
+endif::VK_VERSION_1_1,VK_KHR_device_group_creation[]
+ifdef::VKSC_VERSION_1_0[]
+  * ename:VK_MEMORY_HEAP_SEU_SAFE_BIT specifies that the heap is protected
+    against single event upsets.
+ifdef::hidden[]
+// tag::scaddition[]
+  * extending elink:VkMemoryHeapFlagBits
+  ** ename:VK_MEMORY_HEAP_SEU_SAFE_BIT <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Many safety critical environments are required to contend with single event
+upsets (SEUs).
+It is typical for host memory to include automatic error detection (EDC) or
+correction (ECC) on platforms where this a concern.
+ename:VK_MEMORY_HEAP_SEU_SAFE_BIT is used to denote device memory heaps that
+have this protection.
+
+SEU-safe memory may: have different performance characteristics than
+SEU-unsafe memory.
+====
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VkMemoryHeapFlags',desc='Bitmask of VkMemoryHeapFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkMemoryHeapFlags.adoc[]
+
+tname:VkMemoryHeapFlags is a bitmask type for setting a mask of zero or more
+elink:VkMemoryHeapFlagBits.
+--
+
+[open,refpage='VkMemoryType',desc='Structure specifying memory type',type='structs']
+--
+The sname:VkMemoryType structure is defined as:
+
+include::{generated}/api/structs/VkMemoryType.adoc[]
+
+  * pname:heapIndex describes which memory heap this memory type corresponds
+    to, and must: be less than pname:memoryHeapCount from the
+    slink:VkPhysicalDeviceMemoryProperties structure.
+  * pname:propertyFlags is a bitmask of elink:VkMemoryPropertyFlagBits of
+    properties for this memory type.
+
+include::{generated}/validity/structs/VkMemoryType.adoc[]
+--
+
+[open,refpage='VkMemoryPropertyFlagBits',desc='Bitmask specifying properties for a memory type',type='enums']
+--
+Bits which may: be set in slink:VkMemoryType::pname:propertyFlags,
+indicating properties of a memory type, are:
+
+include::{generated}/api/enums/VkMemoryPropertyFlagBits.adoc[]
+
+  * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit specifies that memory
+    allocated with this type is the most efficient for device access.
+    This property will be set if and only if the memory type belongs to a
+    heap with the ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT set.
+  * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit specifies that memory
+    allocated with this type can: be mapped for host access using
+    flink:vkMapMemory.
+  * ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit specifies that the host
+    cache management commands flink:vkFlushMappedMemoryRanges and
+    flink:vkInvalidateMappedMemoryRanges are not needed to flush host writes
+    to the device or make device writes visible to the host, respectively.
+  * ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT bit specifies that memory
+    allocated with this type is cached on the host.
+    Host memory accesses to uncached memory are slower than to cached
+    memory, however uncached memory is always host coherent.
+  * ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit specifies that the
+    memory type only allows device access to the memory.
+    Memory types must: not have both
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT and
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT set.
+    Additionally, the object's backing memory may: be provided by the
+    implementation lazily as specified in <<memory-device-lazy_allocation,
+    Lazily Allocated Memory>>.
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_MEMORY_PROPERTY_PROTECTED_BIT bit specifies that the memory
+    type only allows device access to the memory, and allows protected queue
+    operations to access the memory.
+    Memory types must: not have ename:VK_MEMORY_PROPERTY_PROTECTED_BIT set
+    and any of ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT set, or
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set, or
+    ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT set.
+endif::VK_VERSION_1_1[]
+ifdef::VK_AMD_device_coherent_memory[]
+  * ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit specifies that
+    device accesses to allocations of this memory type are automatically
+    made available and visible.
+  * ename:VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD bit specifies that
+    memory allocated with this type is not cached on the device.
+    Uncached device memory is always device coherent.
+endif::VK_AMD_device_coherent_memory[]
+ifdef::VK_NV_external_memory_rdma[]
+  * ename:VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV bit specifies that external
+    devices can access this memory directly.
+endif::VK_NV_external_memory_rdma[]
+
+ifdef::VK_AMD_device_coherent_memory[]
+For any memory allocated with both the
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT and the
+ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, host or device accesses
+also perform automatic memory domain transfer operations, such that writes
+are always automatically available and visible to both host and device
+memory domains.
+
+[NOTE]
+.Note
+====
+Device coherence is a useful property for certain debugging use cases (e.g.
+crash analysis, where performing separate coherence actions could mean
+values are not reported correctly).
+However, device coherent accesses may be slower than equivalent accesses
+without device coherence, particularly if they are also device uncached.
+For device uncached memory in particular, repeated accesses to the same or
+neighbouring memory locations over a short time period (e.g. within a frame)
+may be slower than it would be for the equivalent cached memory type.
+As such, it is generally inadvisable to use device coherent or device
+uncached memory except when really needed.
+====
+endif::VK_AMD_device_coherent_memory[]
+--
+
+[open,refpage='VkMemoryPropertyFlags',desc='Bitmask of VkMemoryPropertyFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkMemoryPropertyFlags.adoc[]
+
+tname:VkMemoryPropertyFlags is a bitmask type for setting a mask of zero or
+more elink:VkMemoryPropertyFlagBits.
+--
+
+ifdef::VK_EXT_memory_budget[]
+[open,refpage='VkPhysicalDeviceMemoryBudgetPropertiesEXT',desc='Structure specifying physical device memory budget and usage',type='structs']
+--
+If the sname:VkPhysicalDeviceMemoryBudgetPropertiesEXT structure is included
+in the pname:pNext chain of slink:VkPhysicalDeviceMemoryProperties2, it is
+filled with the current memory budgets and usages.
+
+The sname:VkPhysicalDeviceMemoryBudgetPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryBudgetPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:heapBudget is an array of ename:VK_MAX_MEMORY_HEAPS
+    basetype:VkDeviceSize values in which memory budgets are returned, with
+    one element for each memory heap.
+    A heap's budget is a rough estimate of how much memory the process can:
+    allocate from that heap before allocations may: fail or cause
+    performance degradation.
+    The budget includes any currently allocated device memory.
+  * pname:heapUsage is an array of ename:VK_MAX_MEMORY_HEAPS
+    basetype:VkDeviceSize values in which memory usages are returned, with
+    one element for each memory heap.
+    A heap's usage is an estimate of how much memory the process is
+    currently using in that heap.
+
+The values returned in this structure are not invariant.
+The pname:heapBudget and pname:heapUsage values must: be zero for array
+elements greater than or equal to
+slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeapCount.
+The pname:heapBudget value must: be non-zero for array elements less than
+slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeapCount.
+The pname:heapBudget value must: be less than or equal to
+slink:VkMemoryHeap::pname:size for each heap.
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryBudgetPropertiesEXT.adoc[]
+--
+endif::VK_EXT_memory_budget[]
+
+
+[[memory-device-objects]]
+=== Device Memory Objects
+
+[open,refpage='VkDeviceMemory',desc='Opaque handle to a device memory object',type='handles']
+--
+A Vulkan device operates on data in device memory via memory objects that
+are represented in the API by a sname:VkDeviceMemory handle:
+
+include::{generated}/api/handles/VkDeviceMemory.adoc[]
+--
+
+
+=== Device Memory Allocation
+
+[open,refpage='vkAllocateMemory',desc='Allocate device memory',type='protos']
+--
+:refpage: vkAllocateMemory
+:objectnameplural: device memory objects
+:objectnamecamelcase: deviceMemory
+:objectcount: 1
+
+To allocate memory objects, call:
+
+include::{generated}/api/protos/vkAllocateMemory.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:pAllocateInfo is a pointer to a slink:VkMemoryAllocateInfo
+    structure describing parameters of the allocation.
+    A successfully returned allocation must: use the requested parameters --
+    no substitution is permitted by the implementation.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pMemory is a pointer to a slink:VkDeviceMemory handle in which
+    information about the allocated memory is returned.
+
+Allocations returned by fname:vkAllocateMemory are guaranteed to meet any
+alignment requirement of the implementation.
+For example, if an implementation requires 128 byte alignment for images and
+64 byte alignment for buffers, the device memory returned through this
+mechanism would be 128-byte aligned.
+This ensures that applications can: correctly suballocate objects of
+different types (with potentially different alignment requirements) in the
+same memory object.
+
+ifndef::VK_VERSION_1_1[]
+When memory is allocated, its contents are undefined:.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+When memory is allocated, its contents are undefined: with the following
+constraint:
+
+  * The contents of unprotected memory must: not be a function of the
+    contents of data protected memory objects, even if those memory objects
+    were previously freed.
+
+[NOTE]
+.Note
+====
+The contents of memory allocated by one application should: not be a
+function of data from protected memory objects of another application, even
+if those memory objects were previously freed.
+====
+endif::VK_VERSION_1_1[]
+
+The maximum number of valid memory allocations that can: exist
+simultaneously within a slink:VkDevice may: be restricted by implementation-
+or platform-dependent limits.
+The <<limits-maxMemoryAllocationCount, pname:maxMemoryAllocationCount>>
+feature describes the number of allocations that can: exist simultaneously
+before encountering these internal limits.
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+For historical reasons, if pname:maxMemoryAllocationCount is exceeded, some
+implementations may return ename:VK_ERROR_TOO_MANY_OBJECTS.
+Exceeding this limit will result in undefined: behavior, and an application
+should not rely on the use of the returned error code in order to identify
+when the limit is reached.
+====
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+Many protected memory implementations involve complex hardware and system
+software support, and often have additional and much lower limits on the
+number of simultaneous protected memory allocations (from memory types with
+the ename:VK_MEMORY_PROPERTY_PROTECTED_BIT property) than for non-protected
+memory allocations.
+These limits can be system-wide, and depend on a variety of factors outside
+of the Vulkan implementation, so they cannot be queried in Vulkan.
+Applications should: use as few allocations as possible from such memory
+types by suballocating aggressively, and be prepared for allocation failure
+even when there is apparently plenty of capacity remaining in the memory
+heap.
+As a guideline, the Vulkan conformance test suite requires that at least 80
+minimum-size allocations can exist concurrently when no other uses of
+protected memory are active in the system.
+====
+
+Some platforms may: have a limit on the maximum size of a single allocation.
+For example, certain systems may: fail to create allocations with a size
+greater than or equal to 4GB.
+Such a limit is implementation-dependent, and if such a failure occurs then
+the error ename:VK_ERROR_OUT_OF_DEVICE_MEMORY must: be returned.
+ifdef::VK_KHR_maintenance3[]
+This limit is advertised in
+slink:VkPhysicalDeviceMaintenance3Properties::pname:maxMemoryAllocationSize.
+endif::VK_KHR_maintenance3[]
+
+ifdef::VK_AMD_memory_overallocation_behavior[]
+
+The cumulative memory size allocated to a heap can: be limited by the size
+of the specified heap.
+In such cases, allocated memory is tracked on a per-device and per-heap
+basis.
+Some platforms allow overallocation into other heaps.
+The overallocation behavior can: be specified through the
+`apiext:VK_AMD_memory_overallocation_behavior` extension.
+
+endif::VK_AMD_memory_overallocation_behavior[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VK_EXT_pageable_device_local_memory[]
+
+If the
+slink:VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT::pname:pageableDeviceLocalMemory
+feature is enabled, memory allocations made from a heap that includes
+ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT in slink:VkMemoryHeap::pname:flags
+may: be transparently moved to host-local memory allowing multiple
+applications to share device-local memory.
+If there is no space left in device-local memory when this new allocation is
+made, other allocations may: be moved out transparently to make room.
+The operating system will determine which allocations to move to
+device-local memory or host-local memory based on platform-specific
+criteria.
+To help the operating system make good choices, the application should: set
+the appropriate memory priority with slink:VkMemoryPriorityAllocateInfoEXT
+and adjust it as necessary with flink:vkSetDeviceMemoryPriorityEXT.
+Higher priority allocations will moved to device-local memory first.
+
+Memory allocations made on heaps without the
+ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT property will not be transparently
+promoted to device-local memory by the operating system.
+
+endif::VK_EXT_pageable_device_local_memory[]
+
+.Valid Usage
+****
+  * [[VUID-vkAllocateMemory-pAllocateInfo-01713]]
+    pname:pAllocateInfo->allocationSize must: be less than or equal to
+    slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeaps[`memindex`].pname:size
+    where `memindex` =
+    slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypes[pname:pAllocateInfo->memoryTypeIndex].pname:heapIndex
+    as returned by flink:vkGetPhysicalDeviceMemoryProperties for the
+    slink:VkPhysicalDevice that pname:device was created from
+  * [[VUID-vkAllocateMemory-pAllocateInfo-01714]]
+    pname:pAllocateInfo->memoryTypeIndex must: be less than
+    slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypeCount as
+    returned by flink:vkGetPhysicalDeviceMemoryProperties for the
+    slink:VkPhysicalDevice that pname:device was created from
+ifdef::VK_AMD_device_coherent_memory[]
+  * [[VUID-vkAllocateMemory-deviceCoherentMemory-02790]]
+    If the <<features-deviceCoherentMemory, pname:deviceCoherentMemory>>
+    feature is not enabled, pname:pAllocateInfo->memoryTypeIndex must: not
+    identify a memory type supporting
+    ename:VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD
+endif::VK_AMD_device_coherent_memory[]
+  * [[VUID-vkAllocateMemory-maxMemoryAllocationCount-04101]]
+    There must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount device
+    memory allocations currently allocated on the device
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkAllocateMemory.adoc[]
+--
+
+[open,refpage='VkMemoryAllocateInfo',desc='Structure containing parameters of a memory allocation',type='structs']
+--
+The sname:VkMemoryAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkMemoryAllocateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:allocationSize is the size of the allocation in bytes.
+  * pname:memoryTypeIndex is an index identifying a memory type from the
+    pname:memoryTypes array of the slink:VkPhysicalDeviceMemoryProperties
+    structure.
+
+The internal data of an allocated device memory object must: include a
+reference to implementation-specific resources, referred to as the memory
+object's _payload_.
+ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+Applications can: also import and export that internal data to and from
+device memory objects to share data between Vulkan instances and other
+compatible APIs.
+A sname:VkMemoryAllocateInfo structure defines a memory import operation if
+its pname:pNext chain includes one of the following structures:
+
+[[memory-import-operation]]
+ifdef::VK_KHR_external_memory_win32[]
+  * slink:VkImportMemoryWin32HandleInfoKHR with a non-zero pname:handleType
+    value
+endif::VK_KHR_external_memory_win32[]
+ifdef::VK_KHR_external_memory_fd[]
+  * slink:VkImportMemoryFdInfoKHR with a non-zero pname:handleType value
+endif::VK_KHR_external_memory_fd[]
+ifdef::VK_EXT_external_memory_host[]
+  * slink:VkImportMemoryHostPointerInfoEXT with a non-zero pname:handleType
+    value
+endif::VK_EXT_external_memory_host[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
+    pname:buffer value
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_FUCHSIA_external_memory[]
+  * slink:VkImportMemoryZirconHandleInfoFUCHSIA with a non-zero
+    pname:handleType value
+endif::VK_FUCHSIA_external_memory[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * slink:VkImportMemoryBufferCollectionFUCHSIA
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_NV_external_memory_sci_buf[]
+  * slink:VkImportMemorySciBufInfoNV with a non-zero pname:handleType value
+endif::VK_NV_external_memory_sci_buf[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * slink:VkImportScreenBufferInfoQNX with a non-`NULL` pname:buffer value
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_KHR_external_memory_win32[]
+If the parameters define an import operation and the external handle type is
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, or
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
+pname:allocationSize is ignored.
+The implementation must: query the size of these allocations from the OS.
+endif::VK_KHR_external_memory_win32[]
+
+ifdef::VK_NV_external_memory_sci_buf[]
+If the parameters define an import operation and the external handle type is
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV, pname:allocationSize is
+ignored.
+The implementation must: query the size of this allocation from the
+stext:NvSciBufAttrList associated with the external stext:NvSciBufObj.
+endif::VK_NV_external_memory_sci_buf[]
+
+Whether device memory objects constructed via a memory import operation hold
+a reference to their payload depends on the properties of the handle type
+used to perform the import, as defined below for each valid handle type.
+Importing memory must: not modify the content of the memory.
+Implementations must: ensure that importing memory does not enable the
+importing Vulkan instance to access any memory or resources in other Vulkan
+instances other than that corresponding to the memory object imported.
+Implementations must: also ensure accessing imported memory which has not
+been initialized does not allow the importing Vulkan instance to obtain data
+from the exporting Vulkan instance or vice-versa.
+
+[NOTE]
+.Note
+====
+How exported and imported memory is isolated is left to the implementation,
+but applications should be aware that such isolation may: prevent
+implementations from placing multiple exportable memory objects in the same
+physical or virtual page.
+Hence, applications should: avoid creating many small external memory
+objects whenever possible.
+====
+
+Importing memory must: not increase overall heap usage within a system.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance3,VK_EXT_memory_budget[]
+However, it must: affect the following per-process values:
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
+  * slink:VkPhysicalDeviceMaintenance3Properties::pname:maxMemoryAllocationCount
+endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
+ifdef::VK_EXT_memory_budget[]
+  * slink:VkPhysicalDeviceMemoryBudgetPropertiesEXT::pname:heapUsage
+endif::VK_EXT_memory_budget[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance3,VK_EXT_memory_budget[]
+
+When performing a memory import operation, it is the responsibility of the
+application to ensure the external handles and their associated payloads
+meet all valid usage requirements.
+However, implementations must: perform sufficient validation of external
+handles and payloads to ensure that the operation results in a valid memory
+object which will not cause program termination, device loss, queue stalls,
+or corruption of other resources when used as allowed according to its
+allocation parameters.
+If the external handle provided does not meet these requirements, the
+implementation must: fail the memory import operation with the error code
+ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+If the parameters define an export operation and the external handle type is
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+implementations should: not strictly follow pname:memoryTypeIndex.
+Instead, they should: modify the allocation internally to use the required
+memory type for the application's given usage.
+This is because for an export operation, there is currently no way for the
+client to know the memory type index before allocating.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-07897]]
+ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+    If the parameters do not define an <<memory-import-operation,import or
+    export operation>>,
+endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+    pname:allocationSize must: be greater than `0`
+ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkMemoryAllocateInfo-None-06657]]
+    The parameters must: not define more than one
+    <<memory-import-operation,import operation>>
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-07899]]
+    If the parameters define an export operation
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    and the handle type is not
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    , pname:allocationSize must: be greater than `0`
+endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer,VK_FUCHSIA_external_memory,VK_NV_external_memory_sci_buf,VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-VkMemoryAllocateInfo-buffer-06380]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA, and
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer is present and
+    non-NULL, slink:VkImportMemoryBufferCollectionFUCHSIA::pname:collection
+    and slink:VkImportMemoryBufferCollectionFUCHSIA::pname:index must match
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA::pname:collection and
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA::pname:index,
+    respectively, of the slink:VkBufferCollectionBufferCreateInfoFUCHSIA
+    structure used to create the
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer
+  * [[VUID-VkMemoryAllocateInfo-image-06381]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA, and
+    slink:VkMemoryDedicatedAllocateInfo::pname:image is present and
+    non-NULL, slink:VkImportMemoryBufferCollectionFUCHSIA::pname:collection
+    and slink:VkImportMemoryBufferCollectionFUCHSIA::pname:index must match
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection and
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:index,
+    respectively, of the slink:VkBufferCollectionImageCreateInfoFUCHSIA
+    structure used to create the
+    slink:VkMemoryDedicatedAllocateInfo::pname:image
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-06382]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA, pname:allocationSize must: match
+    slink:VkMemoryRequirements::pname:size value retrieved by
+    flink:vkGetImageMemoryRequirements or
+    flink:vkGetBufferMemoryRequirements for image-based or buffer-based
+    collections respectively
+  * [[VUID-VkMemoryAllocateInfo-pNext-06383]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA, the pname:pNext chain must: include a
+    slink:VkMemoryDedicatedAllocateInfo structure with either its
+    pname:image or pname:buffer field set to a value other than
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkMemoryAllocateInfo-image-06384]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA and
+    slink:VkMemoryDedicatedAllocateInfo::pname:image is not
+    dlink:VK_NULL_HANDLE, the pname:image must: be created with a
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA structure chained to its
+    slink:VkImageCreateInfo::pname:pNext pointer
+  * [[VUID-VkMemoryAllocateInfo-buffer-06385]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA and
+    slink:VkMemoryDedicatedAllocateInfo::pname:buffer is not
+    dlink:VK_NULL_HANDLE, the pname:buffer must: be created with a
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA structure chained to its
+    slink:VkBufferCreateInfo::pname:pNext pointer
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-06386]]
+    If the parameters define an import operation from an
+    slink:VkBufferCollectionFUCHSIA, pname:memoryTypeIndex must: be from
+    slink:VkBufferCollectionPropertiesFUCHSIA as retrieved by
+    flink:vkGetBufferCollectionPropertiesFUCHSIA
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_KHR_external_memory[]
+ifdef::VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-00639]]
+    If the pname:pNext chain includes a sname:VkExportMemoryAllocateInfo
+    structure, and any of the handle types specified in
+    sname:VkExportMemoryAllocateInfo::pname:handleTypes require a dedicated
+    allocation, as reported by
+    flink:vkGetPhysicalDeviceImageFormatProperties2 in
+    sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures,
+    or by flink:vkGetPhysicalDeviceExternalBufferProperties in
+    sname:VkExternalBufferProperties::pname:externalMemoryProperties.externalMemoryFeatures,
+    the pname:pNext chain must: include a
+    sname:VkMemoryDedicatedAllocateInfo or
+    sname:VkDedicatedAllocationMemoryAllocateInfoNV structure with either
+    its pname:image or pname:buffer member set to a value other than
+    dlink:VK_NULL_HANDLE
+endif::VK_KHR_dedicated_allocation,VK_NV_dedicated_allocation[]
+endif::VK_KHR_external_memory[]
+ifdef::VK_KHR_external_memory[]
+ifdef::VK_NV_external_memory[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-00640]]
+    If the pname:pNext chain includes a slink:VkExportMemoryAllocateInfo
+    structure, it must: not include a slink:VkExportMemoryAllocateInfoNV or
+    slink:VkExportMemoryWin32HandleInfoNV structure
+endif::VK_NV_external_memory[]
+endif::VK_KHR_external_memory[]
+ifdef::VK_KHR_external_memory_win32+VK_NV_external_memory_win32[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-00641]]
+    If the pname:pNext chain includes a
+    slink:VkImportMemoryWin32HandleInfoKHR structure, it must: not include a
+    slink:VkImportMemoryWin32HandleInfoNV structure
+endif::VK_KHR_external_memory_win32+VK_NV_external_memory_win32[]
+ifdef::VK_KHR_external_memory_fd[]
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-01742]]
+    If the parameters define an import operation, the external handle
+    specified was created by the Vulkan API, and the external handle type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, then the values of
+    pname:allocationSize and pname:memoryTypeIndex must: match those
+    specified when the payload being imported was created
+endif::VK_KHR_external_memory_fd[]
+ifdef::VK_KHR_external_memory+VK_KHR_device_group[]
+  * [[VUID-VkMemoryAllocateInfo-None-00643]]
+    If the parameters define an import operation and the external handle
+    specified was created by the Vulkan API, the device mask specified by
+    slink:VkMemoryAllocateFlagsInfo must: match the mask specified when the
+    payload being imported was allocated
+  * [[VUID-VkMemoryAllocateInfo-None-00644]]
+    If the parameters define an import operation and the external handle
+    specified was created by the Vulkan API, the list of physical devices
+    that comprise the logical device passed to flink:vkAllocateMemory must:
+    match the list of physical devices that comprise the logical device on
+    which the payload was originally allocated
+endif::VK_KHR_external_memory+VK_KHR_device_group[]
+ifdef::VK_KHR_external_memory_win32[]
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645]]
+    If the parameters define an import operation and the external handle is
+    an NT handle or a global share handle created outside of the Vulkan API,
+    the value of pname:memoryTypeIndex must: be one of those returned by
+    flink:vkGetMemoryWin32HandlePropertiesKHR
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-01743]]
+    If the parameters define an import operation, the external handle was
+    created by the Vulkan API, and the external handle type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, then the
+    values of pname:allocationSize and pname:memoryTypeIndex must: match
+    those specified when the payload being imported was created
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-00647]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
+    pname:allocationSize must: match the size specified when creating the
+    Direct3D 12 heap from which the payload was extracted
+endif::VK_KHR_external_memory_win32[]
+ifdef::VK_KHR_external_memory_fd[]
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648]]
+    If the parameters define an import operation and the external handle is
+    a POSIX file descriptor created outside of the Vulkan API, the value of
+    pname:memoryTypeIndex must: be one of those returned by
+    flink:vkGetMemoryFdPropertiesKHR
+endif::VK_KHR_external_memory_fd[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, the sname:VkMemoryAllocateInfo::pname:memoryTypeIndex must:
+    not indicate a memory type that reports
+    ename:VK_MEMORY_PROPERTY_PROTECTED_BIT
+endif::VK_VERSION_1_1[]
+ifdef::VK_EXT_external_memory_host[]
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744]]
+    If the parameters define an import operation and the external handle is
+    a host pointer, the value of pname:memoryTypeIndex must: be one of those
+    returned by flink:vkGetMemoryHostPointerPropertiesEXT
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-01745]]
+    If the parameters define an import operation and the external handle is
+    a host pointer, pname:allocationSize must: be an integer multiple of
+    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
+ifdef::VK_NV_dedicated_allocation[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-02805]]
+    If the parameters define an import operation and the external handle is
+    a host pointer, the pname:pNext chain must: not include a
+    slink:VkDedicatedAllocationMemoryAllocateInfoNV structure with either
+    its pname:image or pname:buffer field set to a value other than
+    dlink:VK_NULL_HANDLE
+endif::VK_NV_dedicated_allocation[]
+ifdef::VK_KHR_dedicated_allocation[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-02806]]
+    If the parameters define an import operation and the external handle is
+    a host pointer, the pname:pNext chain must: not include a
+    slink:VkMemoryDedicatedAllocateInfo structure with either its
+    pname:image or pname:buffer field set to a value other than
+    dlink:VK_NULL_HANDLE
+endif::VK_KHR_dedicated_allocation[]
+endif::VK_EXT_external_memory_host[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-02383]]
+    If the parameters define an import operation and the external handle
+    type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    pname:allocationSize must: be the size returned by
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
+    hardware buffer
+  * [[VUID-VkMemoryAllocateInfo-pNext-02384]]
+    If the parameters define an import operation and the external handle
+    type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    and the pname:pNext chain does not include a
+    slink:VkMemoryDedicatedAllocateInfo structure or
+    slink:VkMemoryDedicatedAllocateInfo::pname:image is
+    dlink:VK_NULL_HANDLE, the Android hardware buffer must: have a
+    code:AHardwareBuffer_Desc::code:format of
+    code:AHARDWAREBUFFER_FORMAT_BLOB and a
+    code:AHardwareBuffer_Desc::code:usage that includes
+    code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-02385]]
+    If the parameters define an import operation and the external handle
+    type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    pname:memoryTypeIndex must: be one of those returned by
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
+    hardware buffer
+  * [[VUID-VkMemoryAllocateInfo-pNext-01874]]
+    If the parameters do not define an import operation, and the pname:pNext
+    chain includes a sname:VkExportMemoryAllocateInfo structure with
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    included in its pname:handleTypes member, and the pname:pNext chain
+    includes a slink:VkMemoryDedicatedAllocateInfo structure with
+    pname:image not equal to dlink:VK_NULL_HANDLE, then pname:allocationSize
+    must: be `0`
+  * [[VUID-VkMemoryAllocateInfo-pNext-07900]]
+    If the parameters define an export operation, the handle type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    and the pname:pNext does not include a
+    slink:VkMemoryDedicatedAllocateInfo structure, pname:allocationSize
+    must: be greater than `0`
+  * [[VUID-VkMemoryAllocateInfo-pNext-07901]]
+    If the parameters define an export operation, the handle type is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    and the pname:pNext chain includes a slink:VkMemoryDedicatedAllocateInfo
+    structure with pname:buffer set to a valid slink:VkBuffer object,
+    pname:allocationSize must: be greater than `0`
+  * [[VUID-VkMemoryAllocateInfo-pNext-02386]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
+    dlink:VK_NULL_HANDLE, the Android hardware buffer's
+    basetype:AHardwareBuffer::code:usage must: include at least one of
+    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER,
+    code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE or
+    code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
+  * [[VUID-VkMemoryAllocateInfo-pNext-02387]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
+    dlink:VK_NULL_HANDLE, the format of pname:image must: be
+    ename:VK_FORMAT_UNDEFINED or the format returned by
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID in
+    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:format for
+    the Android hardware buffer
+  * [[VUID-VkMemoryAllocateInfo-pNext-02388]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
+    not dlink:VK_NULL_HANDLE, the width, height, and array layer dimensions
+    of pname:image and the Android hardware buffer's
+    code:AHardwareBuffer_Desc must: be identical
+  * [[VUID-VkMemoryAllocateInfo-pNext-02389]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
+    not dlink:VK_NULL_HANDLE, and the Android hardware buffer's
+    basetype:AHardwareBuffer::code:usage includes
+    code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
+    have a complete mipmap chain
+  * [[VUID-VkMemoryAllocateInfo-pNext-02586]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
+    not dlink:VK_NULL_HANDLE, and the Android hardware buffer's
+    basetype:AHardwareBuffer::code:usage does not include
+    code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
+    have exactly one mipmap level
+  * [[VUID-VkMemoryAllocateInfo-pNext-02390]]
+    If the parameters define an import operation, the external handle is an
+    Android hardware buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
+    not dlink:VK_NULL_HANDLE, each bit set in the usage of pname:image must:
+    be listed in
+    <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
+    Equivalence>>, and if there is a corresponding
+    code:AHARDWAREBUFFER_USAGE bit listed that bit must: be included in the
+    Android hardware buffer's code:AHardwareBuffer_Desc::code:usage
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkMemoryAllocateInfo-screenBufferImport-08941]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX,
+    slink:VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX::pname:screenBufferImport
+    must: be enabled
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-08942]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX,
+    pname:allocationSize must: be the size returned by
+    flink:vkGetScreenBufferPropertiesQNX for the QNX Screen buffer
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-08943]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX,
+    pname:memoryTypeIndex must: be one of those returned by
+    flink:vkGetScreenBufferPropertiesQNX for the QNX Screen buffer
+  * [[VUID-VkMemoryAllocateInfo-pNext-08944]]
+    If the parameters define an import operation, the external handle is a
+    QNX Screen buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
+    dlink:VK_NULL_HANDLE, the QNX Screen's buffer must be a
+    <<memory-external-screen-buffer-validity,valid QNX Screen buffer>>
+  * [[VUID-VkMemoryAllocateInfo-pNext-08945]]
+    If the parameters define an import operation, the external handle is an
+    QNX Screen buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
+    dlink:VK_NULL_HANDLE, the format of pname:image must: be
+    ename:VK_FORMAT_UNDEFINED or the format returned by
+    flink:vkGetScreenBufferPropertiesQNX in
+    slink:VkScreenBufferFormatPropertiesQNX::pname:format for the QNX Screen
+    buffer
+  * [[VUID-VkMemoryAllocateInfo-pNext-08946]]
+    If the parameters define an import operation, the external handle is a
+    QNX Screen buffer, and the pname:pNext chain includes a
+    slink:VkMemoryDedicatedAllocateInfo structure with pname:image that is
+    not dlink:VK_NULL_HANDLE, the width, height, and array layer dimensions
+    of pname:image and the QNX Screen buffer's code:_screen_buffer must be
+    identical
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+  * [[VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03329]]
+    If
+    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
+    is not zero, sname:VkMemoryAllocateFlagsInfo::pname:flags must: include
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+  * [[VUID-VkMemoryAllocateInfo-flags-03330]]
+    If sname:VkMemoryAllocateFlagsInfo::pname:flags includes
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
+    <<features-bufferDeviceAddressCaptureReplay,
+    pname:bufferDeviceAddressCaptureReplay>> feature must: be enabled
+  * [[VUID-VkMemoryAllocateInfo-flags-03331]]
+    If sname:VkMemoryAllocateFlagsInfo::pname:flags includes
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, the
+    <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature
+    must: be enabled
+ifdef::VK_EXT_external_memory_host[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-03332]]
+    If the pname:pNext chain includes a
+    sname:VkImportMemoryHostPointerInfoEXT structure,
+    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
+    must: be zero
+endif::VK_EXT_external_memory_host[]
+  * [[VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03333]]
+    If the parameters define an import operation,
+    slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress
+    must: be zero
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_FUCHSIA_external_memory[]
+  * [[VUID-VkMemoryAllocateInfo-None-04749]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
+    value of sname:memoryTypeIndex must: be an index identifying a memory
+    type from the sname:memoryTypeBits field of the
+    slink:VkMemoryZirconHandlePropertiesFUCHSIA structure populated by a
+    call to flink:vkGetMemoryZirconHandlePropertiesFUCHSIA
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-07902]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
+    value of pname:allocationSize must: be greater than `0`
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-07903]]
+    If the parameters define an import operation and the external handle
+    type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
+    value of pname:allocationSize must: be less than or equal to the size of
+    the VMO as determined by code:zx_vmo_get_size(pname:handle) where
+    pname:handle is the VMO handle to the imported external memory
+endif::VK_FUCHSIA_external_memory[]
+ifdef::VK_NV_external_memory_sci_buf[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-05097]]
+    If the pname:pNext chain includes a slink:VkExportMemorySciBufInfoNV
+    structure,
+    slink:VkPhysicalDeviceExternalMemorySciBufFeaturesNV::pname:sciBufExport
+    must: be enabled
+  * [[VUID-VkMemoryAllocateInfo-pNext-05098]]
+    If the pname:pNext chain includes a slink:VkImportMemorySciBufInfoNV
+    structure,
+    slink:VkPhysicalDeviceExternalMemorySciBufFeaturesNV::pname:sciBufImport
+    must: be enabled
+  * [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-05099]]
+    If the parameters define an import operation and the external handle is
+    a stext:NvSciBufObj, the value of pname:memoryTypeIndex must: be one of
+    those returned by
+    flink:vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV
+endif::VK_NV_external_memory_sci_buf[]
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkMemoryAllocateInfo-pNext-06780]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT
+endif::VK_EXT_metal_objects[]
+****
+
+include::{generated}/validity/structs/VkMemoryAllocateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+[open,refpage='VkMemoryDedicatedAllocateInfo',desc='Specify a dedicated memory allocation resource',type='structs']
+--
+If the pname:pNext chain includes a sname:VkMemoryDedicatedAllocateInfo
+structure, then that structure includes a handle of the sole buffer or image
+resource that the memory can: be bound to.
+
+The sname:VkMemoryDedicatedAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkMemoryDedicatedAllocateInfo.adoc[]
+
+ifdef::VK_KHR_dedicated_allocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryDedicatedAllocateInfoKHR.adoc[]
+endif::VK_KHR_dedicated_allocation[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
+    memory will be bound to.
+  * pname:buffer is dlink:VK_NULL_HANDLE or a handle of a buffer which this
+    memory will be bound to.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01432]]
+    At least one of pname:image and pname:buffer must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-02964]]
+    If pname:image is not dlink:VK_NULL_HANDLE
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    and the memory is not an imported
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[Android Hardware Buffer]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer+VK_QNX_external_memory_screen_buffer[or an imported]
+ifdef::VK_QNX_external_memory_screen_buffer[QNX Screen buffer]
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    , sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the image
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01434]]
+    If pname:image is not dlink:VK_NULL_HANDLE, pname:image must: have been
+    created without ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in
+    slink:VkImageCreateInfo::pname:flags
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-02965]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    and the memory is not an imported
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[Android Hardware Buffer]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer+VK_QNX_external_memory_screen_buffer[or an imported]
+ifdef::VK_QNX_external_memory_screen_buffer[QNX Screen buffer]
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    , sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the buffer
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01436]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE, pname:buffer must: have
+    been created without ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT set in
+    slink:VkBufferCreateInfo::pname:flags
+ifdef::VK_KHR_external_memory_win32[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01876]]
+    If pname:image is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the
+    external handle was created by the Vulkan API, then the memory being
+    imported must: also be a dedicated image allocation and pname:image
+    must: be identical to the image associated with the imported memory
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01877]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the
+    external handle was created by the Vulkan API, then the memory being
+    imported must: also be a dedicated buffer allocation and pname:buffer
+    must: be identical to the buffer associated with the imported memory
+endif::VK_KHR_external_memory_win32[]
+ifdef::VK_KHR_external_memory_fd[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01878]]
+    If pname:image is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory
+    being imported must: also be a dedicated image allocation and
+    pname:image must: be identical to the image associated with the imported
+    memory
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01879]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory
+    being imported must: also be a dedicated buffer allocation and
+    pname:buffer must: be identical to the buffer associated with the
+    imported memory
+endif::VK_KHR_external_memory_fd[]
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01797]]
+    If pname:image is not dlink:VK_NULL_HANDLE, pname:image must: not have
+    been created with ename:VK_IMAGE_CREATE_DISJOINT_BIT set in
+    slink:VkImageCreateInfo::pname:flags
+endif::VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_FUCHSIA_external_memory[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-04751]]
+    If pname:image is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
+    memory being imported must: also be a dedicated image allocation and
+    pname:image must: be identical to the image associated with the imported
+    memory
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-04752]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation with handle
+    type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the
+    memory being imported must: also be a dedicated buffer allocation and
+    pname:buffer must: be identical to the buffer associated with the
+    imported memory
+endif::VK_FUCHSIA_external_memory[]
+****
+
+include::{generated}/validity/structs/VkMemoryDedicatedAllocateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+
+ifdef::VK_NV_dedicated_allocation[]
+[open,refpage='VkDedicatedAllocationMemoryAllocateInfoNV',desc='Specify a dedicated memory allocation resource',type='structs']
+--
+If the pname:pNext chain includes a
+sname:VkDedicatedAllocationMemoryAllocateInfoNV structure, then that
+structure includes a handle of the sole buffer or image resource that the
+memory can: be bound to.
+
+The sname:VkDedicatedAllocationMemoryAllocateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkDedicatedAllocationMemoryAllocateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
+    memory will be bound to.
+  * pname:buffer is dlink:VK_NULL_HANDLE or a handle of a buffer which this
+    memory will be bound to.
+
+.Valid Usage
+****
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649]]
+    At least one of pname:image and pname:buffer must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650]]
+    If pname:image is not dlink:VK_NULL_HANDLE, the image must: have been
+    created with
+    slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE, the buffer must: have been
+    created with
+    slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
+    equal to ename:VK_TRUE
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652]]
+    If pname:image is not dlink:VK_NULL_HANDLE,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the image
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the buffer
+ifdef::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd[]
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654]]
+    If pname:image is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation, the memory
+    being imported must: also be a dedicated image allocation and
+    pname:image must: be identical to the image associated with the imported
+    memory
+  * [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE and
+    slink:VkMemoryAllocateInfo defines a memory import operation, the memory
+    being imported must: also be a dedicated buffer allocation and
+    pname:buffer must: be identical to the buffer associated with the
+    imported memory
+endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd[]
+****
+
+include::{generated}/validity/structs/VkDedicatedAllocationMemoryAllocateInfoNV.adoc[]
+--
+endif::VK_NV_dedicated_allocation[]
+
+ifdef::VK_EXT_memory_priority[]
+[open,refpage='VkMemoryPriorityAllocateInfoEXT',desc='Specify a memory allocation priority',type='structs']
+--
+If the pname:pNext chain includes a sname:VkMemoryPriorityAllocateInfoEXT
+structure, then that structure includes a priority for the memory.
+
+The sname:VkMemoryPriorityAllocateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMemoryPriorityAllocateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:priority is a floating-point value between `0` and `1`, indicating
+    the priority of the allocation relative to other memory allocations.
+    Larger values are higher priority.
+    The granularity of the priorities is implementation-dependent.
+
+Memory allocations with higher priority may: be more likely to stay in
+device-local memory when the system is under memory pressure.
+
+If this structure is not included, it is as if the pname:priority value were
+`0.5`.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryPriorityAllocateInfoEXT-priority-02602]]
+    pname:priority must: be between `0` and `1`, inclusive
+****
+
+include::{generated}/validity/structs/VkMemoryPriorityAllocateInfoEXT.adoc[]
+--
+endif::VK_EXT_memory_priority[]
+
+ifdef::VK_EXT_pageable_device_local_memory[]
+[open,refpage='vkSetDeviceMemoryPriorityEXT',desc='Change a memory allocation priority',type='protos']
+--
+To modify the priority of an existing memory allocation, call:
+
+include::{generated}/api/protos/vkSetDeviceMemoryPriorityEXT.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the slink:VkDeviceMemory object to which the new
+    priority will be applied.
+  * pname:priority is a floating-point value between `0` and `1`, indicating
+    the priority of the allocation relative to other memory allocations.
+    Larger values are higher priority.
+    The granularity of the priorities is implementation-dependent.
+
+Memory allocations with higher priority may: be more likely to stay in
+device-local memory when the system is under memory pressure.
+
+.Valid Usage
+****
+  * [[VUID-vkSetDeviceMemoryPriorityEXT-priority-06258]]
+    pname:priority must: be between `0` and `1`, inclusive
+****
+
+include::{generated}/validity/protos/vkSetDeviceMemoryPriorityEXT.adoc[]
+--
+endif::VK_EXT_pageable_device_local_memory[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+[open,refpage='VkExportMemoryAllocateInfo',desc='Specify exportable handle types for a device memory object',type='structs']
+--
+When allocating memory whose payload may: be exported to another process or
+Vulkan instance, add a slink:VkExportMemoryAllocateInfo structure to the
+pname:pNext chain of the slink:VkMemoryAllocateInfo structure, specifying
+the handle types that may: be exported.
+
+The slink:VkExportMemoryAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkExportMemoryAllocateInfo.adoc[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportMemoryAllocateInfoKHR.adoc[]
+endif::VK_KHR_external_memory[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is zero or a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more memory
+    handle types the application can: export from the resulting allocation.
+    The application can: request multiple handle types for the same
+    allocation.
+
+.Valid Usage
+****
+  * [[VUID-VkExportMemoryAllocateInfo-handleTypes-00656]]
+    The bits in pname:handleTypes must: be supported and compatible, as
+    reported by slink:VkExternalImageFormatProperties or
+    slink:VkExternalBufferProperties
+****
+
+include::{generated}/validity/structs/VkExportMemoryAllocateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_NV_external_memory[]
+include::{chapters}/VK_NV_external_memory/allocate_memory.adoc[]
+endif::VK_NV_external_memory[]
+
+ifdef::VK_KHR_external_memory_win32,VK_NV_external_memory_win32[]
+=== Win32 External Memory
+endif::VK_KHR_external_memory_win32,VK_NV_external_memory_win32[]
+
+ifdef::VK_KHR_external_memory_win32[]
+[open,refpage='VkExportMemoryWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a memory',type='structs']
+--
+To specify additional attributes of NT handles exported from a memory
+object, add a slink:VkExportMemoryWin32HandleInfoKHR structure to the
+pname:pNext chain of the slink:VkMemoryAllocateInfo structure.
+The sname:VkExportMemoryWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkExportMemoryWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
+    structure specifying security attributes of the handle.
+  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
+  * pname:name is a null-terminated UTF-16 string to associate with the
+    payload referenced by NT handles exported from the created memory.
+
+If slink:VkExportMemoryAllocateInfo is not included in the same pname:pNext
+chain, this structure is ignored.
+
+If slink:VkExportMemoryAllocateInfo is included in the pname:pNext chain of
+slink:VkMemoryAllocateInfo with a Windows pname:handleType, but either
+sname:VkExportMemoryWin32HandleInfoKHR is not included in the pname:pNext
+chain, or it is included but pname:pAttributes is set to `NULL`, default
+security descriptor values will be used, and child processes created by the
+application will not inherit the handle, as described in the MSDN
+documentation for "`Synchronization Object Security and Access Rights`"^1^.
+Further, if the structure is not present, the access rights used depend on
+the handle type.
+
+For handles of the following types:
+
+  * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+The implementation must: ensure the access rights allow read and write
+access to the memory.
+
+1::
+    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
+
+.Valid Usage
+****
+  * [[VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657]]
+    If slink:VkExportMemoryAllocateInfo::pname:handleTypes does not include
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, a
+    sname:VkExportMemoryWin32HandleInfoKHR structure must: not be included
+    in the pname:pNext chain of slink:VkMemoryAllocateInfo
+****
+
+include::{generated}/validity/structs/VkExportMemoryWin32HandleInfoKHR.adoc[]
+--
+
+[open,refpage='VkImportMemoryWin32HandleInfoKHR',desc='Import Win32 memory created on the same physical device',type='structs']
+--
+To import memory from a Windows handle, add a
+slink:VkImportMemoryWin32HandleInfoKHR structure to the pname:pNext chain of
+the slink:VkMemoryAllocateInfo structure.
+
+The sname:VkImportMemoryWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of pname:handle or pname:name.
+  * pname:handle is `NULL` or the external handle to import.
+  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
+    payload to import.
+
+Importing memory object payloads from Windows handles does not transfer
+ownership of the handle to the Vulkan implementation.
+For handle types defined as NT handles, the application must: release handle
+ownership using the code:CloseHandle system call when the handle is no
+longer needed.
+For handle types defined as NT handles, the imported memory object holds a
+reference to its payload.
+
+[NOTE]
+.Note
+====
+Non-NT handle import operations do not add a reference to their associated
+payload.
+If the original object owning the payload is destroyed, all resources and
+handles sharing that payload will become invalid.
+====
+
+Applications can: import the same payload into multiple instances of Vulkan,
+into the same instance from which it was exported, and multiple times into a
+given Vulkan instance.
+In all cases, each import operation must: create a distinct
+sname:VkDeviceMemory object.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00658]]
+    If pname:handleType is not `0`, it must: be supported for import, as
+    reported by slink:VkExternalImageFormatProperties or
+    slink:VkExternalBufferProperties
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659]]
+    The memory from which pname:handle was exported, or the memory named by
+    pname:name must: have been created on the same underlying physical
+    device as pname:device
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660]]
+    If pname:handleType is not `0`, it must: be defined as an NT handle or a
+    global share handle
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439]]
+    If pname:handleType is not
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, pname:name
+    must: be `NULL`
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440]]
+    If pname:handleType is not `0` and pname:handle is `NULL`, pname:name
+    must: name a valid memory resource of the type specified by
+    pname:handleType
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661]]
+    If pname:handleType is not `0` and pname:name is `NULL`, pname:handle
+    must: be a valid handle of the type specified by pname:handleType
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441]]
+    If pname:handle is not `NULL`, pname:name must: be `NULL`
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518]]
+    If pname:handle is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in
+    <<external-memory-handle-types-compatibility,external memory handle
+    types compatibility>>
+  * [[VUID-VkImportMemoryWin32HandleInfoKHR-name-01519]]
+    If pname:name is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in
+    <<external-memory-handle-types-compatibility,external memory handle
+    types compatibility>>
+****
+
+include::{generated}/validity/structs/VkImportMemoryWin32HandleInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetMemoryWin32HandleKHR',desc='Get a Windows HANDLE for a memory object',type='protos']
+--
+To export a Windows handle representing the payload of a Vulkan device
+memory object, call:
+
+include::{generated}/api/protos/vkGetMemoryWin32HandleKHR.adoc[]
+
+  * pname:device is the logical device that created the device memory being
+    exported.
+  * pname:pGetWin32HandleInfo is a pointer to a
+    slink:VkMemoryGetWin32HandleInfoKHR structure containing parameters of
+    the export operation.
+  * pname:pHandle will return the Windows handle representing the payload of
+    the device memory object.
+
+For handle types defined as NT handles, the handles returned by
+fname:vkGetMemoryWin32HandleKHR are owned by the application and hold a
+reference to their payload.
+To avoid leaking resources, the application must: release ownership of them
+using the code:CloseHandle system call when they are no longer needed.
+
+[NOTE]
+.Note
+====
+Non-NT handle types do not add a reference to their associated payload.
+If the original object owning the payload is destroyed, all resources and
+handles sharing that payload will become invalid.
+====
+
+include::{generated}/validity/protos/vkGetMemoryWin32HandleKHR.adoc[]
+--
+
+[open,refpage='VkMemoryGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle memory export operation',type='structs']
+--
+The sname:VkMemoryGetWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object from which the handle will be
+    exported.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the handle returned depend on the value of
+pname:handleType.
+See elink:VkExternalMemoryHandleTypeFlagBits for a description of the
+properties of the defined external memory handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662]]
+    pname:handleType must: have been included in
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
+    was created
+  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663]]
+    If pname:handleType is defined as an NT handle,
+    flink:vkGetMemoryWin32HandleKHR must: be called no more than once for
+    each valid unique combination of pname:memory and pname:handleType
+  * [[VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664]]
+    pname:handleType must: be defined as an NT handle or a global share
+    handle
+****
+
+include::{generated}/validity/structs/VkMemoryGetWin32HandleInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetMemoryWin32HandlePropertiesKHR',desc='Get Properties of External Memory Win32 Handles',type='protos']
+--
+Windows memory handles compatible with Vulkan may: also be created by
+non-Vulkan APIs using methods beyond the scope of this specification.
+To determine the correct parameters to use when importing such handles,
+call:
+
+include::{generated}/api/protos/vkGetMemoryWin32HandlePropertiesKHR.adoc[]
+
+  * pname:device is the logical device that will be importing pname:handle.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of the handle pname:handle.
+  * pname:handle is the handle which will be imported.
+  * pname:pMemoryWin32HandleProperties is a pointer to a
+    slink:VkMemoryWin32HandlePropertiesKHR structure in which properties of
+    pname:handle are returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665]]
+    pname:handle must: point to a valid Windows memory handle
+  * [[VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666]]
+    pname:handleType must: not be one of the handle types defined as opaque
+****
+
+include::{generated}/validity/protos/vkGetMemoryWin32HandlePropertiesKHR.adoc[]
+--
+
+[open,refpage='VkMemoryWin32HandlePropertiesKHR',desc='Properties of External Memory Windows Handles',type='structs']
+--
+The sname:VkMemoryWin32HandlePropertiesKHR structure returned is defined as:
+
+include::{generated}/api/structs/VkMemoryWin32HandlePropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the specified windows handle can: be imported as.
+
+include::{generated}/validity/structs/VkMemoryWin32HandlePropertiesKHR.adoc[]
+--
+endif::VK_KHR_external_memory_win32[]
+
+ifdef::VK_NV_external_memory_win32[]
+include::{chapters}/VK_NV_external_memory_win32/handle_permissions.adoc[]
+
+include::{chapters}/VK_NV_external_memory_win32/import_memory_win32.adoc[]
+
+include::{chapters}/VK_NV_external_memory_win32/get_handle_win32.adoc[]
+endif::VK_NV_external_memory_win32[]
+
+ifdef::VK_KHR_external_memory_fd[]
+=== File Descriptor External Memory
+
+[open,refpage='VkImportMemoryFdInfoKHR',desc='Import memory created on the same physical device from a file descriptor',type='structs']
+--
+To import memory from a POSIX file descriptor handle, add a
+slink:VkImportMemoryFdInfoKHR structure to the pname:pNext chain of the
+slink:VkMemoryAllocateInfo structure.
+The sname:VkImportMemoryFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the handle type of pname:fd.
+  * pname:fd is the external handle to import.
+
+Importing memory from a file descriptor transfers ownership of the file
+descriptor from the application to the Vulkan implementation.
+The application must: not perform any operations on the file descriptor
+after a successful import.
+The imported memory object holds a reference to its payload.
+
+Applications can: import the same payload into multiple instances of Vulkan,
+into the same instance from which it was exported, and multiple times into a
+given Vulkan instance.
+In all cases, each import operation must: create a distinct
+sname:VkDeviceMemory object.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00667]]
+    If pname:handleType is not `0`, it must: be supported for import, as
+    reported by slink:VkExternalImageFormatProperties or
+    slink:VkExternalBufferProperties
+  * [[VUID-VkImportMemoryFdInfoKHR-fd-00668]]
+    The memory from which pname:fd was exported must: have been created on
+    the same underlying physical device as pname:device
+  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00669]]
+    If pname:handleType is not `0`, it must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
+  * [[VUID-VkImportMemoryFdInfoKHR-handleType-00670]]
+    If pname:handleType is not `0`, pname:fd must: be a valid handle of the
+    type specified by pname:handleType
+  * [[VUID-VkImportMemoryFdInfoKHR-fd-01746]]
+    The memory represented by pname:fd must: have been created from a
+    physical device and driver that is compatible with pname:device and
+    pname:handleType, as described in
+    <<external-memory-handle-types-compatibility>>
+  * [[VUID-VkImportMemoryFdInfoKHR-fd-01520]]
+    pname:fd must: obey any requirements listed for pname:handleType in
+    <<external-memory-handle-types-compatibility,external memory handle
+    types compatibility>>
+****
+
+include::{generated}/validity/structs/VkImportMemoryFdInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetMemoryFdKHR',desc='Get a POSIX file descriptor for a memory object',type='protos']
+--
+
+:refpage: vkGetMemoryFdKHR
+
+To export a POSIX file descriptor referencing the payload of a Vulkan device
+memory object, call:
+
+include::{generated}/api/protos/vkGetMemoryFdKHR.adoc[]
+
+  * pname:device is the logical device that created the device memory being
+    exported.
+  * pname:pGetFdInfo is a pointer to a slink:VkMemoryGetFdInfoKHR structure
+    containing parameters of the export operation.
+  * pname:pFd will return a file descriptor referencing the payload of the
+    device memory object.
+
+Each call to fname:vkGetMemoryFdKHR must: create a new file descriptor
+holding a reference to the memory object's payload and transfer ownership of
+the file descriptor to the application.
+To avoid leaking resources, the application must: release ownership of the
+file descriptor using the code:close system call when it is no longer
+needed, or by importing a Vulkan memory object from it.
+Where supported by the operating system, the implementation must: set the
+file descriptor to be closed automatically when an code:execve system call
+is made.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetMemoryFdKHR.adoc[]
+--
+
+[open,refpage='VkMemoryGetFdInfoKHR',desc='Structure describing a POSIX FD memory export operation',type='structs']
+--
+The sname:VkMemoryGetFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object from which the handle will be
+    exported.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the file descriptor exported depend on the value of
+pname:handleType.
+See elink:VkExternalMemoryHandleTypeFlagBits for a description of the
+properties of the defined external memory handle types.
+
+ifdef::VK_EXT_external_memory_dma_buf[]
+[NOTE]
+.Note
+====
+The size of the exported file may: be larger than the size requested by
+slink:VkMemoryAllocateInfo::pname:allocationSize.
+If pname:handleType is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
+then the application can: query the file's actual size with
+link:https://man7.org/linux/man-pages/man2/lseek.2.html[`lseek`].
+====
+endif::VK_EXT_external_memory_dma_buf[]
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetFdInfoKHR-handleType-00671]]
+    pname:handleType must: have been included in
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
+    was created
+  * [[VUID-VkMemoryGetFdInfoKHR-handleType-00672]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
+****
+
+include::{generated}/validity/structs/VkMemoryGetFdInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetMemoryFdPropertiesKHR',desc='Get Properties of External Memory File Descriptors',type='protos']
+--
+
+:refpage: vkGetMemoryFdPropertiesKHR
+
+POSIX file descriptor memory handles compatible with Vulkan may: also be
+created by non-Vulkan APIs using methods beyond the scope of this
+specification.
+To determine the correct parameters to use when importing such handles,
+call:
+
+include::{generated}/api/protos/vkGetMemoryFdPropertiesKHR.adoc[]
+
+  * pname:device is the logical device that will be importing pname:fd.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of the handle pname:fd.
+  * pname:fd is the handle which will be imported.
+  * pname:pMemoryFdProperties is a pointer to a
+    slink:VkMemoryFdPropertiesKHR structure in which the properties of the
+    handle pname:fd are returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryFdPropertiesKHR-fd-00673]]
+    pname:fd must: point to a valid POSIX file descriptor memory handle
+  * [[VUID-vkGetMemoryFdPropertiesKHR-handleType-00674]]
+    pname:handleType must: not be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+****
+
+include::{generated}/validity/protos/vkGetMemoryFdPropertiesKHR.adoc[]
+--
+
+[open,refpage='VkMemoryFdPropertiesKHR',desc='Properties of External Memory File Descriptors',type='structs']
+--
+The sname:VkMemoryFdPropertiesKHR structure returned is defined as:
+
+include::{generated}/api/structs/VkMemoryFdPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the specified file descriptor can: be imported as.
+
+include::{generated}/validity/structs/VkMemoryFdPropertiesKHR.adoc[]
+--
+endif::VK_KHR_external_memory_fd[]
+
+ifdef::VK_EXT_external_memory_host[]
+=== Host External Memory
+
+[open,refpage='VkImportMemoryHostPointerInfoEXT',desc='Import memory from a host pointer',type='structs']
+--
+To import memory from a host pointer, add a
+slink:VkImportMemoryHostPointerInfoEXT structure to the pname:pNext chain of
+the slink:VkMemoryAllocateInfo structure.
+The sname:VkImportMemoryHostPointerInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryHostPointerInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the handle type.
+  * pname:pHostPointer is the host pointer to import from.
+
+Importing memory from a host pointer shares ownership of the memory between
+the host and the Vulkan implementation.
+The application can: continue to access the memory through the host pointer
+but it is the application's responsibility to synchronize device and
+non-device access to the payload as defined in
+<<memory-device-hostaccess,Host Access to Device Memory Objects>>.
+
+Applications can: import the same payload into multiple instances of Vulkan
+and multiple times into a given Vulkan instance.
+However, implementations may: fail to import the same payload multiple times
+into a given physical device due to platform constraints.
+
+Importing memory from a particular host pointer may: not be possible due to
+additional platform-specific restrictions beyond the scope of this
+specification in which case the implementation must: fail the memory import
+operation with the error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR.
+
+Whether device memory objects imported from a host pointer hold a reference
+to their payload is undefined:.
+As such, the application must: ensure that the imported memory range remains
+valid and accessible for the lifetime of the imported memory object.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747]]
+    If pname:handleType is not `0`, it must: be supported for import, as
+    reported in slink:VkExternalMemoryProperties
+  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748]]
+    If pname:handleType is not `0`, it must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
+  * [[VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749]]
+    pname:pHostPointer must: be a pointer aligned to an integer multiple of
+    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
+  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
+    pname:pHostPointer must: be a pointer to pname:allocationSize number of
+    bytes of host memory, where pname:allocationSize is the member of the
+    sname:VkMemoryAllocateInfo structure this structure is chained to
+  * [[VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,
+    pname:pHostPointer must: be a pointer to pname:allocationSize number of
+    bytes of host mapped foreign memory, where pname:allocationSize is the
+    member of the sname:VkMemoryAllocateInfo structure this structure is
+    chained to
+****
+
+include::{generated}/validity/structs/VkImportMemoryHostPointerInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetMemoryHostPointerPropertiesEXT',desc='Get properties of external memory host pointer',type='protos']
+--
+
+:refpage: vkGetMemoryHostPointerPropertiesEXT
+
+To determine the correct parameters to use when importing host pointers,
+call:
+
+include::{generated}/api/protos/vkGetMemoryHostPointerPropertiesEXT.adoc[]
+
+  * pname:device is the logical device that will be importing
+    pname:pHostPointer.
+  * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value
+    specifying the type of the handle pname:pHostPointer.
+  * pname:pHostPointer is the host pointer to import from.
+  * pname:pMemoryHostPointerProperties is a pointer to a
+    slink:VkMemoryHostPointerPropertiesEXT structure in which the host
+    pointer properties are returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
+  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753]]
+    pname:pHostPointer must: be a pointer aligned to an integer multiple of
+    sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT::pname:minImportedHostPointerAlignment
+  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
+    pname:pHostPointer must: be a pointer to host memory
+  * [[VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,
+    pname:pHostPointer must: be a pointer to host mapped foreign memory
+****
+
+include::{generated}/validity/protos/vkGetMemoryHostPointerPropertiesEXT.adoc[]
+--
+
+[open,refpage='VkMemoryHostPointerPropertiesEXT',desc='Properties of external memory host pointer',type='structs']
+--
+The sname:VkMemoryHostPointerPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkMemoryHostPointerPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the specified host pointer can: be imported as.
+
+The value returned by pname:memoryTypeBits must: only include bits that
+identify memory types which are host visible.
+
+include::{generated}/validity/structs/VkMemoryHostPointerPropertiesEXT.adoc[]
+--
+
+endif::VK_EXT_external_memory_host[]
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+=== Android Hardware Buffer External Memory
+
+[open,refpage='VkImportAndroidHardwareBufferInfoANDROID',desc='Import memory from an Android hardware buffer',type='structs']
+--
+To import memory created outside of the current Vulkan instance from an
+Android hardware buffer, add a
+sname:VkImportAndroidHardwareBufferInfoANDROID structure to the pname:pNext
+chain of the slink:VkMemoryAllocateInfo structure.
+The sname:VkImportAndroidHardwareBufferInfoANDROID structure is defined as:
+
+include::{generated}/api/structs/VkImportAndroidHardwareBufferInfoANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is the Android hardware buffer to import.
+
+If the flink:vkAllocateMemory command succeeds, the implementation must:
+acquire a reference to the imported hardware buffer, which it must: release
+when the device memory object is freed.
+If the command fails, the implementation must: not retain a reference.
+
+.Valid Usage
+****
+  * [[VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01880]]
+    If pname:buffer is not `NULL`, Android hardware buffers must: be
+    supported for import, as reported by
+    slink:VkExternalImageFormatProperties or
+    slink:VkExternalBufferProperties
+  * [[VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881]]
+    If pname:buffer is not `NULL`, it must: be a valid Android hardware
+    buffer object with code:AHardwareBuffer_Desc::code:usage compatible with
+    Vulkan as described in <<memory-external-android-hardware-buffer,Android
+    Hardware Buffers>>
+****
+
+include::{generated}/validity/structs/VkImportAndroidHardwareBufferInfoANDROID.adoc[]
+--
+
+[open,refpage='vkGetMemoryAndroidHardwareBufferANDROID',desc='Get an Android hardware buffer for a memory object',type='protos']
+--
+To export an Android hardware buffer referencing the payload of a Vulkan
+device memory object, call:
+
+include::{generated}/api/protos/vkGetMemoryAndroidHardwareBufferANDROID.adoc[]
+
+  * pname:device is the logical device that created the device memory being
+    exported.
+  * pname:pInfo is a pointer to a
+    slink:VkMemoryGetAndroidHardwareBufferInfoANDROID structure containing
+    parameters of the export operation.
+  * pname:pBuffer will return an Android hardware buffer referencing the
+    payload of the device memory object.
+
+Each call to fname:vkGetMemoryAndroidHardwareBufferANDROID must: return an
+Android hardware buffer with a new reference acquired in addition to the
+reference held by the slink:VkDeviceMemory.
+To avoid leaking resources, the application must: release the reference by
+calling code:AHardwareBuffer_release when it is no longer needed.
+When called with the same handle in
+slink:VkMemoryGetAndroidHardwareBufferInfoANDROID::pname:memory,
+fname:vkGetMemoryAndroidHardwareBufferANDROID must: return the same Android
+hardware buffer object.
+If the device memory was created by importing an Android hardware buffer,
+fname:vkGetMemoryAndroidHardwareBufferANDROID must: return that same Android
+hardware buffer object.
+
+include::{generated}/validity/protos/vkGetMemoryAndroidHardwareBufferANDROID.adoc[]
+--
+
+[open,refpage='VkMemoryGetAndroidHardwareBufferInfoANDROID',desc='Structure describing an Android hardware buffer memory export operation',type='structs']
+--
+The sname:VkMemoryGetAndroidHardwareBufferInfoANDROID structure is defined
+as:
+
+include::{generated}/api/structs/VkMemoryGetAndroidHardwareBufferInfoANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object from which the Android hardware buffer
+    will be exported.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882]]
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    must: have been included in
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
+    was created
+  * [[VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883]]
+    If the pname:pNext chain of the slink:VkMemoryAllocateInfo used to
+    allocate pname:memory included a slink:VkMemoryDedicatedAllocateInfo
+    with non-`NULL` pname:image member, then that pname:image must: already
+    be bound to pname:memory
+****
+
+include::{generated}/validity/structs/VkMemoryGetAndroidHardwareBufferInfoANDROID.adoc[]
+--
+
+[open,refpage='vkGetAndroidHardwareBufferPropertiesANDROID',desc='Get Properties of External Memory Android Hardware Buffers',type='protos']
+--
+To determine the memory parameters to use when importing an Android hardware
+buffer, call:
+
+include::{generated}/api/protos/vkGetAndroidHardwareBufferPropertiesANDROID.adoc[]
+
+  * pname:device is the logical device that will be importing pname:buffer.
+  * pname:buffer is the Android hardware buffer which will be imported.
+  * pname:pProperties is a pointer to a
+    slink:VkAndroidHardwareBufferPropertiesANDROID structure in which the
+    properties of pname:buffer are returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-01884]]
+    pname:buffer must: be a valid Android hardware buffer object with at
+    least one of the code:AHARDWAREBUFFER_USAGE_GPU_* flags in its
+    code:AHardwareBuffer_Desc::code:usage
+****
+
+include::{generated}/validity/protos/vkGetAndroidHardwareBufferPropertiesANDROID.adoc[]
+--
+
+[open,refpage='VkAndroidHardwareBufferPropertiesANDROID',desc='Properties of External Memory Android Hardware Buffers',type='structs']
+--
+The sname:VkAndroidHardwareBufferPropertiesANDROID structure returned is
+defined as:
+
+include::{generated}/api/structs/VkAndroidHardwareBufferPropertiesANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:allocationSize is the size of the external memory
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the specified Android hardware buffer can: be imported
+    as.
+
+include::{generated}/validity/structs/VkAndroidHardwareBufferPropertiesANDROID.adoc[]
+--
+
+[open,refpage='VkAndroidHardwareBufferFormatPropertiesANDROID',desc='Structure describing the image format properties of an Android hardware buffer',type='structs']
+--
+To obtain format properties of an Android hardware buffer, include a
+sname:VkAndroidHardwareBufferFormatPropertiesANDROID structure in the
+pname:pNext chain of the slink:VkAndroidHardwareBufferPropertiesANDROID
+structure passed to flink:vkGetAndroidHardwareBufferPropertiesANDROID.
+This structure is defined as:
+
+include::{generated}/api/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is the Vulkan format corresponding to the Android hardware
+    buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an
+    equivalent Vulkan format.
+  * pname:externalFormat is an implementation-defined external format
+    identifier for use with slink:VkExternalFormatANDROID.
+    It must: not be zero.
+  * pname:formatFeatures describes the capabilities of this external format
+    when used with an image bound to memory imported from pname:buffer.
+  * pname:samplerYcbcrConversionComponents is the component swizzle that
+    should: be used in slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrModel is a suggested color model to use in the
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrRange is a suggested numerical value range to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedXChromaOffset is a suggested X chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYChromaOffset is a suggested Y chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+
+If the Android hardware buffer has one of the formats listed in the
+<<memory-external-android-hardware-buffer-formats,Format Equivalence
+table>>, then pname:format must: have the equivalent Vulkan format listed in
+the table.
+Otherwise, pname:format may: be ename:VK_FORMAT_UNDEFINED, indicating the
+Android hardware buffer can: only be used with an external format.
+
+The pname:formatFeatures member must: include
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT and at least one of
+ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or
+ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, and should: include
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT.
+
+[NOTE]
+.Note
+====
+The pname:formatFeatures member only indicates the features available when
+using an
+<<memory-external-android-hardware-buffer-external-formats,external-format
+image>> created from the Android hardware buffer.
+Images from Android hardware buffers with a format other than
+ename:VK_FORMAT_UNDEFINED are subject to the format capabilities obtained
+from flink:vkGetPhysicalDeviceFormatProperties2, and
+flink:vkGetPhysicalDeviceImageFormatProperties2 with appropriate parameters.
+These sets of features are independent of each other, e.g. the external
+format will support sampler {YCbCr} conversion even if the non-external
+format does not, and rendering directly to the external format will not be
+supported even if the non-external format does support this.
+====
+
+Android hardware buffers with the same external format must: have the same
+support for ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
+ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
+ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
+and
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT.
+in pname:formatFeatures.
+Other format features may: differ between Android hardware buffers that have
+the same external format.
+This allows applications to use the same slink:VkSamplerYcbcrConversion
+object (and samplers and pipelines created from them) for any Android
+hardware buffers that have the same external format.
+
+If pname:format is not ename:VK_FORMAT_UNDEFINED, then the value of
+pname:samplerYcbcrConversionComponents must: be valid when used as the
+pname:components member of slink:VkSamplerYcbcrConversionCreateInfo with
+that format.
+If pname:format is ename:VK_FORMAT_UNDEFINED, all members of
+pname:samplerYcbcrConversionComponents must: be the
+<<resources-image-views-identity-mappings,identity swizzle>>.
+
+Implementations may: not always be able to determine the color model,
+numerical range, or chroma offsets of the image contents, so the values in
+sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions.
+Applications should: treat these values as sensible defaults to use in the
+absence of more reliable information obtained through some other means.
+If the underlying physical device is also usable via OpenGL ES with the
+{GLregistry}/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
+extension, the implementation should: suggest values that will produce
+similar sampled values as would be obtained by sampling the same external
+image via code:samplerExternalOES in OpenGL ES using equivalent sampler
+parameters.
+
+[NOTE]
+.Note
+====
+Since
+{GLregistry}/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
+does not require the same sampling and conversion calculations as Vulkan
+does, achieving identical results between APIs may: not be possible on some
+implementations.
+====
+
+include::{generated}/validity/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+[open,refpage='VkAndroidHardwareBufferFormatProperties2ANDROID',desc='Structure describing the image format properties of an Android hardware buffer',type='structs']
+--
+The format properties of an Android hardware buffer can: be obtained by
+including a sname:VkAndroidHardwareBufferFormatProperties2ANDROID structure
+in the pname:pNext chain of the
+slink:VkAndroidHardwareBufferPropertiesANDROID structure passed to
+flink:vkGetAndroidHardwareBufferPropertiesANDROID.
+This structure is defined as:
+
+include::{generated}/api/structs/VkAndroidHardwareBufferFormatProperties2ANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is the Vulkan format corresponding to the Android hardware
+    buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an
+    equivalent Vulkan format.
+  * pname:externalFormat is an implementation-defined external format
+    identifier for use with slink:VkExternalFormatANDROID.
+    It must: not be zero.
+  * pname:formatFeatures describes the capabilities of this external format
+    when used with an image bound to memory imported from pname:buffer.
+  * pname:samplerYcbcrConversionComponents is the component swizzle that
+    should: be used in slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrModel is a suggested color model to use in the
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYcbcrRange is a suggested numerical value range to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedXChromaOffset is a suggested X chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+  * pname:suggestedYChromaOffset is a suggested Y chroma offset to use in
+    slink:VkSamplerYcbcrConversionCreateInfo.
+
+The bits reported in pname:formatFeatures must: include the bits reported in
+the corresponding fields of
+sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures.
+
+include::{generated}/validity/structs/VkAndroidHardwareBufferFormatProperties2ANDROID.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+
+ifdef::VK_ANDROID_external_format_resolve[]
+[open,refpage='VkAndroidHardwareBufferFormatResolvePropertiesANDROID',desc='Structure defining properties of resolves using an external format',type='structs']
+--
+The slink:VkAndroidHardwareBufferFormatResolvePropertiesANDROID structure is
+defined as:
+
+include::{generated}/api/structs/VkAndroidHardwareBufferFormatResolvePropertiesANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:colorAttachmentFormat is a elink:VkFormat specifying the format of
+    color attachment images that must: be used for color attachments when
+    resolving to the specified external format.
+    If the implementation supports external format resolves for the
+    specified external format, this value will be set to a color format
+    supporting the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT in
+    slink:VkFormatProperties::pname:optimalTilingFeatures as returned by
+    flink:vkGetPhysicalDeviceFormatProperties with pname:format equal to
+    pname:colorAttachmentFormat If external format resolves are not
+    supported, this value will be set to `VK_FORMAT_UNDEFINED`.
+
+Any Android hardware buffer created with the code:GRALLOC_USAGE_HW_RENDER
+flag must: be renderable in some way in Vulkan, either:
+
+  * slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:format must:
+    be a format that supports ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+    or ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT in
+    slink:VkFormatProperties::pname:optimalTilingFeatures; or
+  * pname:colorAttachmentFormat must: be a format that supports
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT in
+    slink:VkFormatProperties::pname:optimalTilingFeatures.
+
+include::{generated}/validity/structs/VkAndroidHardwareBufferFormatResolvePropertiesANDROID.adoc[]
+--
+endif::VK_ANDROID_external_format_resolve[]
+
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+
+ifdef::VK_NV_external_memory_rdma[]
+=== Remote Device External Memory
+
+[open,refpage='vkGetMemoryRemoteAddressNV',desc='Get an address for a memory object accessible by remote devices',type='protos']
+--
+To export an address representing the payload of a Vulkan device memory
+object accessible by remote devices, call:
+
+include::{generated}/api/protos/vkGetMemoryRemoteAddressNV.adoc[]
+
+  * pname:device is the logical device that created the device memory being
+    exported.
+  * pname:pMemoryGetRemoteAddressInfo is a pointer to a
+    slink:VkMemoryGetRemoteAddressInfoNV structure containing parameters of
+    the export operation.
+  * pname:pAddress is a pointer to a basetype:VkRemoteAddressNV value in
+    which an address representing the payload of the device memory object is
+    returned.
+
+More communication may be required between the kernel-mode drivers of the
+devices involved.
+This information is out of scope of this documentation and should be
+requested from the vendors of the devices.
+
+include::{generated}/validity/protos/vkGetMemoryRemoteAddressNV.adoc[]
+--
+
+[open,refpage='VkMemoryGetRemoteAddressInfoNV',desc='Structure describing a remote accessible address export operation',type='structs']
+--
+The sname:VkMemoryGetRemoteAddressInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetRemoteAddressInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object from which the remote accessible
+    address will be exported.
+  * pname:handleType is the type of handle requested.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetRemoteAddressInfoNV-handleType-04966]]
+    pname:handleType must: have been included in
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes when pname:memory
+    was created
+****
+
+include::{generated}/validity/structs/VkMemoryGetRemoteAddressInfoNV.adoc[]
+--
+
+[open,refpage='VkRemoteAddressNV',desc='Remote device address type',type='basetypes']
+--
+basetype:VkRemoteAddressNV represents an address of a memory object
+accessible by remote devices, as returned in
+flink:vkGetMemoryRemoteAddressNV::pname:pAddress.
+
+include::{generated}/api/basetypes/VkRemoteAddressNV.adoc[]
+--
+endif::VK_NV_external_memory_rdma[]
+
+ifdef::VK_FUCHSIA_external_memory[]
+include::{chapters}/VK_FUCHSIA_external_memory/device_memory.adoc[]
+endif::VK_FUCHSIA_external_memory[]
+
+ifdef::VK_EXT_metal_objects[]
+include::{chapters}/VK_EXT_metal_objects/device_memory.adoc[]
+endif::VK_EXT_metal_objects[]
+
+ifdef::VK_NV_external_memory_sci_buf[]
+=== NvSciBuf External Memory
+
+[open,refpage='VkExportMemorySciBufInfoNV',desc='Structure specifying attributes of stext:NvSciBufObj exported from memory',type='structs']
+--
+To export a stext:NvSciBufObj from memory, add a
+slink:VkExportMemorySciBufInfoNV structure to the pname:pNext chain of the
+slink:VkMemoryAllocateInfo structure.
+The sname:VkExportMemorySciBufInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExportMemorySciBufInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is an opaque sname:NvSciBufAttrList describing the
+    attributes of the NvSciBuf object that will be exported.
+
+If slink:VkExportMemoryAllocateInfo is not present in the same pname:pNext
+chain, this structure is ignored.
+
+If the pname:pNext chain of slink:VkMemoryAllocateInfo includes a
+slink:VkExportMemoryAllocateInfo structure with a pname:handleType mask
+containing the ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV bit, but
+either sname:VkExportMemorySciBufInfoNV is not included in the pname:pNext
+chain, or it is included but pname:pAttributes is set to `NULL`,
+flink:vkAllocateMemory will return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+The pname:pAttributes parameter must: be a reconciled
+stext:NvSciBufAttrList.
+stext:NvSciBufAttrList consists of both public and private attributes.
+It is the application's responsibility to set the public attributes.
+To set the private attributes, the application must: use the
+flink:vkGetPhysicalDeviceSciBufAttributesNV command.
+The stext:NvSciBufAttrList is then reconciled using the
+<<NvSciBuf-extension-page, NvSciBuf APIs>>.
+
+.Valid Usage
+****
+  * [[VUID-VkExportMemorySciBufInfoNV-pAttributes-05100]]
+    pname:pAttributes must: be a reconciled stext:NvSciBufAttrList
+****
+
+include::{generated}/validity/structs/VkExportMemorySciBufInfoNV.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceSciBufAttributesNV',desc='Fill the private attributes of the stext:NvSciBufAttrList struct',type='protos']
+--
+To fill the private attributes of an unreconciled stext:NvSciBufAttrList,
+call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSciBufAttributesNV.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device that will be
+    used to determine the attributes.
+  * pname:pAttributes is an opaque stext:NvSciBufAttrList in which the
+    implementation will set the requested attributes.
+
+On success, pname:pAttributes will contain an unreconciled
+stext:NvSciBufAttrList whose private attributes are filled in by the
+implementation.
+If the private attributes of pname:physicalDevice could not be obtained,
+ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceSciBufAttributesNV-pAttributes-05101]]
+    pname:pAttributes must: be a valid stext:NvSciBufAttrList and must: not
+    be `NULL`
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSciBufAttributesNV.adoc[]
+--
+
+[open,refpage='VkImportMemorySciBufInfoNV',desc='import NvSciBuf memory created on the same physical device',type='structs']
+--
+To import memory from a stext:NvSciBufObj, add a
+slink:VkImportMemorySciBufInfoNV structure to the pname:pNext chain of the
+slink:VkMemoryAllocateInfo structure.
+
+The sname:VkImportMemorySciBufInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkImportMemorySciBufInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleType specifies the type of handle or name.
+  * pname:handle is the external handle to import.
+
+Importing memory from a stext:NvSciBufObj does not transfer ownership of the
+stext:NvSciBufObj from the application to the Vulkan implementation.
+Vulkan will increment the reference count of the underlying memory of the
+imported stext:NvSciBufObj.
+The application must: release its ownership using <<NvSciBuf-extension-page,
+NvSciBuf APIs>> when that ownership is no longer needed.
+
+Applications can: import the same payload into multiple instances of Vulkan,
+into the same instance from which it was exported, and multiple times into a
+given Vulkan instance.
+In all cases, each import operation must: create a distinct
+sname:VkDeviceMemory object.
+
+After successfully importing the stext:NvSciBufObj to sname:VkDeviceMemory,
+the application can: use it as a normal sname:VkDeviceMemory object.
+It is the application's responsibility to synchronize the different
+stext:NvSciBufObj accesses.
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemorySciBufInfoNV-handleType-05102]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV
+****
+
+include::{generated}/validity/structs/VkImportMemorySciBufInfoNV.adoc[]
+--
+
+[open,refpage='vkGetMemorySciBufNV',desc='Get a stext:NvSciBufObj handle for a memory object',type='protos']
+--
+To export a stext:NvSciBufObj representing the payload of a Vulkan device
+memory object, call:
+
+include::{generated}/api/protos/vkGetMemorySciBufNV.adoc[]
+
+  * pname:device is the logical device that created the device memory being
+    exported.
+  * pname:pGetSciBufInfo is a pointer to a slink:VkMemoryGetSciBufInfoNV
+    structure containing parameters of the export operation.
+  * pname:pHandle will return the stext:NvSciBufObj representing the payload
+    of the device memory object.
+
+A call to fname:vkGetMemorySciBufNV will not transfer the ownership of the
+stext:NvSciBufObj handle to the application.
+The application will hold a reference to the stext:NvSciBufObj, but it does
+not add a reference count to the stext:NvSciBufObj, so the application must:
+not release it.
+
+include::{generated}/validity/protos/vkGetMemorySciBufNV.adoc[]
+--
+
+[open,refpage='VkMemoryGetSciBufInfoNV',desc='Structure describing a stext:NvSciBufObj handle memory export operation',type='structs']
+--
+The sname:VkMemoryGetSciBufInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetSciBufInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object from which the handle will be
+    exported.
+  * pname:handleType is the type of handle requested.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryGetSciBufInfoNV-handleType-05103]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV
+****
+
+include::{generated}/validity/structs/VkMemoryGetSciBufInfoNV.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV',desc='Get physical device properties of External Memory stext:NvSciBufObj Handles',type='protos']
+--
+A stext:NvSciBufObj handle compatible with Vulkan can: also be created by
+non-Vulkan APIs using methods beyond the scope of this specification.
+To determine the correct parameters to use when importing such handles,
+call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:handleType is the type of the handle pname:handle.
+  * pname:handle is the stext:NvSciBuffObj handle which will be imported.
+  * pname:pMemorySciBufProperties is a pointer to a
+    slink:VkMemorySciBufPropertiesNV structure.
+
+This command will return properties of pname:handle, it contains the memory
+type bitmask that can: be used to determine the
+slink:VkMemoryAllocateInfo::pname:memoryTypeIndex when calling
+flink:vkAllocateMemory.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV-handleType-05104]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV
+  * [[VUID-vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV-sciBufImport-05105]]
+    slink:VkPhysicalDeviceExternalMemorySciBufFeaturesNV::pname:sciBufImport
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV.adoc[]
+--
+
+[open,refpage='VkMemorySciBufPropertiesNV',desc='Structure describing properties of External Memory stext:NvSciBufObj Handles',type='structs']
+--
+The sname:VkMemorySciBufPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkMemorySciBufPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type for which the specified stext:NvSciBufObj handle can: be
+    imported.
+
+include::{generated}/validity/structs/VkMemorySciBufPropertiesNV.adoc[]
+--
+endif::VK_NV_external_memory_sci_buf[]
+
+ifdef::VK_QNX_external_memory_screen_buffer[]
+include::{chapters}/VK_QNX_external_memory_screen_buffer/device_memory.adoc[]
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+=== Device Group Memory Allocations
+
+[open,refpage='VkMemoryAllocateFlagsInfo',desc='Structure controlling how many instances of memory will be allocated',type='structs']
+--
+If the pname:pNext chain of slink:VkMemoryAllocateInfo includes a
+sname:VkMemoryAllocateFlagsInfo structure, then that structure includes
+flags and a device mask controlling how many instances of the memory will be
+allocated.
+
+The sname:VkMemoryAllocateFlagsInfo structure is defined as:
+
+include::{generated}/api/structs/VkMemoryAllocateFlagsInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryAllocateFlagsInfoKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkMemoryAllocateFlagBits controlling
+    the allocation.
+  * pname:deviceMask is a mask of physical devices in the logical device,
+    indicating that memory must: be allocated on each device in the mask, if
+    ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set in pname:flags.
+
+If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is not set, the number of
+instances allocated depends on whether
+ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is set in the memory heap.
+If ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is set, then memory is allocated
+for every physical device in the logical device (as if pname:deviceMask has
+bits set for all device indices).
+If ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT is not set, then a single
+instance of memory is allocated (as if pname:deviceMask is set to one).
+
+On some implementations, allocations from a multi-instance heap may: consume
+memory on all physical devices even if the pname:deviceMask excludes some
+devices.
+If slink:VkPhysicalDeviceGroupProperties::pname:subsetAllocation is
+ename:VK_TRUE, then memory is only consumed for the devices in the device
+mask.
+
+[NOTE]
+.Note
+====
+In practice, most allocations on a multi-instance heap will be allocated
+across all physical devices.
+Unicast allocation support is an optional optimization for a minority of
+allocations.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryAllocateFlagsInfo-deviceMask-00675]]
+    If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, pname:deviceMask
+    must: be a valid device mask
+  * [[VUID-VkMemoryAllocateFlagsInfo-deviceMask-00676]]
+    If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, pname:deviceMask
+    must: not be zero
+****
+
+include::{generated}/validity/structs/VkMemoryAllocateFlagsInfo.adoc[]
+--
+
+[open,refpage='VkMemoryAllocateFlagBits',desc='Bitmask specifying flags for a device memory allocation',type='enums']
+--
+Bits which can: be set in slink:VkMemoryAllocateFlagsInfo::pname:flags,
+controlling device memory allocation, are:
+
+include::{generated}/api/enums/VkMemoryAllocateFlagBits.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/enums/VkMemoryAllocateFlagBitsKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT specifies that memory will be
+    allocated for the devices in
+    slink:VkMemoryAllocateFlagsInfo::pname:deviceMask.
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+  * ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT specifies that the memory
+    can: be attached to a buffer object created with the
+    ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set in pname:usage,
+    and that the memory handle can: be used to retrieve an opaque address
+    via flink:vkGetDeviceMemoryOpaqueCaptureAddress.
+  * ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT specifies
+    that the memory's address can: be saved and reused on a subsequent run
+    (e.g. for trace capture and replay), see
+    slink:VkBufferOpaqueCaptureAddressCreateInfo for more detail.
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+--
+
+[open,refpage='VkMemoryAllocateFlags',desc='Bitmask of VkMemoryAllocateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkMemoryAllocateFlags.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/flags/VkMemoryAllocateFlagsKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+tname:VkMemoryAllocateFlags is a bitmask type for setting a mask of zero or
+more elink:VkMemoryAllocateFlagBits.
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+=== Opaque Capture Address Allocation
+
+[open,refpage='VkMemoryOpaqueCaptureAddressAllocateInfo',desc='Request a specific address for a memory allocation',type='structs',alias='VkMemoryOpaqueCaptureAddressAllocateInfoKHR']
+--
+To request a specific device address for a memory allocation, add a
+slink:VkMemoryOpaqueCaptureAddressAllocateInfo structure to the pname:pNext
+chain of the slink:VkMemoryAllocateInfo structure.
+The sname:VkMemoryOpaqueCaptureAddressAllocateInfo structure is defined as:
+
+include::{generated}/api/structs/VkMemoryOpaqueCaptureAddressAllocateInfo.adoc[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryOpaqueCaptureAddressAllocateInfoKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:opaqueCaptureAddress is the opaque capture address requested for
+    the memory allocation.
+
+If pname:opaqueCaptureAddress is zero, no specific address is requested.
+
+If pname:opaqueCaptureAddress is not zero, it should: be an address
+retrieved from flink:vkGetDeviceMemoryOpaqueCaptureAddress on an identically
+created memory allocation on the same implementation.
+
+[NOTE]
+.Note
+====
+In most cases, it is expected that a non-zero pname:opaqueAddress is an
+address retrieved from flink:vkGetDeviceMemoryOpaqueCaptureAddress on an
+identically created memory allocation.
+If this is not the case, it is likely that
+ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS errors will occur.
+
+This is, however, not a strict requirement because trace capture/replay
+tools may need to adjust memory allocation parameters for imported memory.
+====
+
+If this structure is not present, it is as if pname:opaqueCaptureAddress is
+zero.
+
+include::{generated}/validity/structs/VkMemoryOpaqueCaptureAddressAllocateInfo.adoc[]
+--
+
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+
+=== Freeing Device Memory
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkFreeMemory <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+
+Device memory cannot: be freed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, the memory is returned to the system when the device is
+destroyed.
+
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='vkFreeMemory',desc='Free device memory',type='protos']
+--
+To free a memory object, call:
+
+include::{generated}/api/protos/vkFreeMemory.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the slink:VkDeviceMemory object to be freed.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+Before freeing a memory object, an application must: ensure the memory
+object is no longer in use by the device -- for example by command buffers
+in the _pending state_.
+Memory can: be freed whilst still bound to resources, but those resources
+must: not be used afterwards.
+Freeing a memory object releases the reference it held, if any, to its
+payload.
+If there are still any bound images or buffers, the memory object's payload
+may: not be immediately released by the implementation, but must: be
+released by the time all bound images and buffers have been destroyed.
+Once all references to a payload are released, it is returned to the heap
+from which it was allocated.
+
+How memory objects are bound to Images and Buffers is described in detail in
+the <<resources-association, Resource Memory Association>> section.
+
+If a memory object is mapped at the time it is freed, it is implicitly
+unmapped.
+
+[NOTE]
+.Note
+====
+As described <<memory-device-unmap-does-not-flush, below>>, host writes are
+not implicitly flushed when the memory object is unmapped, but the
+implementation must: guarantee that writes that have not been flushed do not
+affect any other memory.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkFreeMemory-memory-00677]]
+    All submitted commands that refer to pname:memory (via images or
+    buffers) must: have completed execution
+****
+
+include::{generated}/validity/protos/vkFreeMemory.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+[[memory-device-hostaccess]]
+=== Host Access to Device Memory Objects
+
+Memory objects created with flink:vkAllocateMemory are not directly host
+accessible.
+
+Memory objects created with the memory property
+ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT are considered _mappable_.
+Memory objects must: be mappable in order to be successfully mapped on the
+host.
+
+[open,refpage='vkMapMemory',desc='Map a memory object into application address space',type='protos']
+--
+
+:refpage: vkMapMemory
+
+To retrieve a host virtual address pointer to a region of a mappable memory
+object, call:
+
+include::{generated}/api/protos/vkMapMemory.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the slink:VkDeviceMemory object to be mapped.
+  * pname:offset is a zero-based byte offset from the beginning of the
+    memory object.
+  * pname:size is the size of the memory range to map, or
+    ename:VK_WHOLE_SIZE to map from pname:offset to the end of the
+    allocation.
+  * pname:flags is reserved for future use.
+  * pname:ppData is a pointer to a code:void* variable in which a
+    host-accessible pointer to the beginning of the mapped range is
+    returned.
+    This pointer minus pname:offset must: be aligned to at least
+    slink:VkPhysicalDeviceLimits::pname:minMemoryMapAlignment.
+
+After a successful call to fname:vkMapMemory the memory object pname:memory
+is considered to be currently _host mapped_.
+
+[NOTE]
+.Note
+====
+It is an application error to call fname:vkMapMemory on a memory object that
+is already _host mapped_.
+====
+
+[NOTE]
+.Note
+====
+fname:vkMapMemory will fail if the implementation is unable to allocate an
+appropriately sized contiguous virtual address range, e.g. due to virtual
+address space fragmentation or platform limits.
+In such cases, fname:vkMapMemory must: return
+ename:VK_ERROR_MEMORY_MAP_FAILED.
+The application can: improve the likelihood of success by reducing the size
+of the mapped range and/or removing unneeded mappings using
+flink:vkUnmapMemory.
+====
+
+[[memory-device-hostaccess-hazards]]
+fname:vkMapMemory does not check whether the device memory is currently in
+use before returning the host-accessible pointer.
+The application must: guarantee that any previously submitted command that
+writes to this range has completed before the host reads from or writes to
+that range, and that any previously submitted command that reads from that
+range has completed before the host writes to that region (see
+<<synchronization-submission-host-writes, here>> for details on fulfilling
+such a guarantee).
+If the device memory was allocated without the
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set, these guarantees must: be
+made for an extended range: the application must: round down the start of
+the range to the nearest multiple of
+slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, and round the end
+of the range up to the nearest multiple of
+slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize.
+
+While a range of device memory is host mapped, the application is
+responsible for synchronizing both device and host access to that memory
+range.
+
+[NOTE]
+.Note
+====
+It is important for the application developer to become meticulously
+familiar with all of the mechanisms described in the chapter on
+<<synchronization, Synchronization and Cache Control>> as they are crucial
+to maintaining memory access ordering.
+====
+
+ifdef::VK_KHR_map_memory2[]
+Calling fname:vkMapMemory is equivalent to calling flink:vkMapMemory2KHR
+with an empty pname:pNext chain.
+endif::VK_KHR_map_memory2[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkMapMemory-memory-00678]]
+    pname:memory must: not be currently host mapped
+  * [[VUID-vkMapMemory-offset-00679]]
+    pname:offset must: be less than the size of pname:memory
+  * [[VUID-vkMapMemory-size-00680]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    greater than `0`
+  * [[VUID-vkMapMemory-size-00681]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    less than or equal to the size of the pname:memory minus pname:offset
+  * [[VUID-vkMapMemory-memory-00682]]
+    pname:memory must: have been created with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
+ifdef::VK_KHR_device_group[]
+  * [[VUID-vkMapMemory-memory-00683]]
+    pname:memory must: not have been allocated with multiple instances
+endif::VK_KHR_device_group[]
+****
+
+include::{generated}/validity/protos/vkMapMemory.adoc[]
+--
+
+[open,refpage='VkMemoryMapFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMemoryMapFlags.adoc[]
+
+tname:VkMemoryMapFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_KHR_map_memory2[]
+[open,refpage='vkMapMemory2KHR',desc='Map a memory object into application address space',type='protos']
+--
+Alternatively, to retrieve a host virtual address pointer to a region of a
+mappable memory object, call:
+
+include::{generated}/api/protos/vkMapMemory2KHR.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:pMemoryMapInfo is a pointer to a slink:VkMemoryMapInfoKHR
+    structure describing parameters of the map.
+  * pname:ppData is a pointer to a `void *` variable in which is returned a
+    host-accessible pointer to the beginning of the mapped range.
+    This pointer minus slink:VkMemoryMapInfoKHR::pname:offset must: be
+    aligned to at least
+    slink:VkPhysicalDeviceLimits::pname:minMemoryMapAlignment.
+
+This function behaves identically to flink:vkMapMemory except that it gets
+its parameters via an extensible structure pointer rather than directly as
+function arguments.
+
+include::{generated}/validity/protos/vkMapMemory2KHR.adoc[]
+--
+
+[open,refpage='VkMemoryMapInfoKHR',desc='Structure containing parameters of a memory map operation',type='structs']
+--
+The sname:VkMemoryMapInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryMapInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:memory is the slink:VkDeviceMemory object to be mapped.
+  * pname:offset is a zero-based byte offset from the beginning of the
+    memory object.
+  * pname:size is the size of the memory range to map, or
+    ename:VK_WHOLE_SIZE to map from pname:offset to the end of the
+    allocation.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryMapInfoKHR-memory-07958]]
+    pname:memory must: not be currently host mapped
+  * [[VUID-VkMemoryMapInfoKHR-offset-07959]]
+    pname:offset must: be less than the size of pname:memory
+  * [[VUID-VkMemoryMapInfoKHR-size-07960]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    greater than `0`
+  * [[VUID-VkMemoryMapInfoKHR-size-07961]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
+    less than or equal to the size of the pname:memory minus pname:offset
+  * [[VUID-VkMemoryMapInfoKHR-memory-07962]]
+    pname:memory must: have been created with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
+ifdef::VK_KHR_device_group[]
+  * [[VUID-VkMemoryMapInfoKHR-memory-07963]]
+    pname:memory must: not have been allocated with multiple instances
+endif::VK_KHR_device_group[]
+****
+
+include::{generated}/validity/structs/VkMemoryMapInfoKHR.adoc[]
+--
+endif::VK_KHR_map_memory2[]
+
+Two commands are provided to enable applications to work with non-coherent
+memory allocations: fname:vkFlushMappedMemoryRanges and
+fname:vkInvalidateMappedMemoryRanges.
+
+[NOTE]
+.Note
+====
+If the memory object was created with the
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set,
+fname:vkFlushMappedMemoryRanges and fname:vkInvalidateMappedMemoryRanges are
+unnecessary and may: have a performance cost.
+However, <<synchronization-dependencies-available-and-visible, availability
+and visibility operations>> still need to be managed on the device.
+See the description of <<synchronization-host-access-types, host access
+types>> for more information.
+====
+
+ifdef::VK_EXT_external_memory_host[]
+[NOTE]
+.Note
+====
+While memory objects imported from a handle type of
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT are
+inherently mapped to host address space, they are not considered to be host
+mapped device memory unless they are explicitly host mapped using
+flink:vkMapMemory.
+That means flushing or invalidating host caches with respect to host
+accesses performed on such memory through the original host pointer
+specified at import time is the responsibility of the application and must:
+be performed with appropriate synchronization primitives provided by the
+platform which are outside the scope of Vulkan.
+fname:vkFlushMappedMemoryRanges and fname:vkInvalidateMappedMemoryRanges,
+however, can: still be used on such memory objects to synchronize host
+accesses performed through the host pointer of the host mapped device memory
+range returned by flink:vkMapMemory.
+====
+endif::VK_EXT_external_memory_host[]
+
+After a successful call to fname:vkMapMemory
+ifdef::VK_KHR_map_memory2[]
+or fname:vkMapMemory2KHR
+endif::VK_KHR_map_memory2[]
+the memory object pname:memory is considered to be currently _host mapped_.
+
+[open,refpage='vkFlushMappedMemoryRanges',desc='Flush mapped memory ranges',type='protos']
+--
+
+:refpage: vkFlushMappedMemoryRanges
+
+To flush ranges of non-coherent memory from the host caches, call:
+
+include::{generated}/api/protos/vkFlushMappedMemoryRanges.adoc[]
+
+  * pname:device is the logical device that owns the memory ranges.
+  * pname:memoryRangeCount is the length of the pname:pMemoryRanges array.
+  * pname:pMemoryRanges is a pointer to an array of
+    slink:VkMappedMemoryRange structures describing the memory ranges to
+    flush.
+
+fname:vkFlushMappedMemoryRanges guarantees that host writes to the memory
+ranges described by pname:pMemoryRanges are made available to the host
+memory domain, such that they can: be made available to the device memory
+domain via <<synchronization-dependencies-available-and-visible, memory
+domain operations>> using the ename:VK_ACCESS_HOST_WRITE_BIT
+<<synchronization-access-types,access type>>.
+
+Within each range described by pname:pMemoryRanges, each set of
+pname:nonCoherentAtomSize bytes in that range is flushed if any byte in that
+set has been written by the host since it was first host mapped, or the last
+time it was flushed.
+If pname:pMemoryRanges includes sets of pname:nonCoherentAtomSize bytes
+where no bytes have been written by the host, those bytes must: not be
+flushed.
+
+[[memory-device-unmap-does-not-flush]]
+Unmapping non-coherent memory does not implicitly flush the host mapped
+memory, and host writes that have not been flushed may: not ever be visible
+to the device.
+However, implementations must: ensure that writes that have not been flushed
+do not become visible to any other memory.
+
+[NOTE]
+.Note
+====
+The above guarantee avoids a potential memory corruption in scenarios where
+host writes to a mapped memory object have not been flushed before the
+memory is unmapped (or freed), and the virtual address range is subsequently
+reused for a different mapping (or memory allocation).
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkFlushMappedMemoryRanges.adoc[]
+--
+
+[open,refpage='vkInvalidateMappedMemoryRanges',desc='Invalidate ranges of mapped memory objects',type='protos']
+--
+
+:refpage: vkInvalidateMappedMemoryRanges
+
+To invalidate ranges of non-coherent memory from the host caches, call:
+
+include::{generated}/api/protos/vkInvalidateMappedMemoryRanges.adoc[]
+
+  * pname:device is the logical device that owns the memory ranges.
+  * pname:memoryRangeCount is the length of the pname:pMemoryRanges array.
+  * pname:pMemoryRanges is a pointer to an array of
+    slink:VkMappedMemoryRange structures describing the memory ranges to
+    invalidate.
+
+fname:vkInvalidateMappedMemoryRanges guarantees that device writes to the
+memory ranges described by pname:pMemoryRanges, which have been made
+available to the host memory domain using the ename:VK_ACCESS_HOST_WRITE_BIT
+and ename:VK_ACCESS_HOST_READ_BIT <<synchronization-access-types, access
+types>>, are made visible to the host.
+If a range of non-coherent memory is written by the host and then
+invalidated without first being flushed, its contents are undefined:.
+
+Within each range described by pname:pMemoryRanges, each set of
+pname:nonCoherentAtomSize bytes in that range is invalidated if any byte in
+that set has been written by the device since it was first host mapped, or
+the last time it was invalidated.
+
+[NOTE]
+.Note
+====
+Mapping non-coherent memory does not implicitly invalidate that memory.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkInvalidateMappedMemoryRanges.adoc[]
+--
+
+[open,refpage='VkMappedMemoryRange',desc='Structure specifying a mapped memory range',type='structs']
+--
+The sname:VkMappedMemoryRange structure is defined as:
+
+include::{generated}/api/structs/VkMappedMemoryRange.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory is the memory object to which this range belongs.
+  * pname:offset is the zero-based byte offset from the beginning of the
+    memory object.
+  * pname:size is either the size of range, or ename:VK_WHOLE_SIZE to affect
+    the range from pname:offset to the end of the current mapping of the
+    allocation.
+
+.Valid Usage
+****
+  * [[VUID-VkMappedMemoryRange-memory-00684]]
+    pname:memory must: be currently host mapped
+  * [[VUID-VkMappedMemoryRange-size-00685]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and
+    pname:size must: specify a range contained within the currently mapped
+    range of pname:memory
+  * [[VUID-VkMappedMemoryRange-size-00686]]
+    If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be
+    within the currently mapped range of pname:memory
+  * [[VUID-VkMappedMemoryRange-offset-00687]]
+    pname:offset must: be a multiple of
+    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
+  * [[VUID-VkMappedMemoryRange-size-01389]]
+    If pname:size is equal to ename:VK_WHOLE_SIZE, the end of the current
+    mapping of pname:memory must: either be a multiple of
+    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize bytes from the
+    beginning of the memory object, or be equal to the end of the memory
+    object
+  * [[VUID-VkMappedMemoryRange-size-01390]]
+    If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must:
+    either be a multiple of
+    slink:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, or pname:offset
+    plus pname:size must: equal the size of pname:memory
+****
+
+include::{generated}/validity/structs/VkMappedMemoryRange.adoc[]
+--
+
+
+[open,refpage='vkUnmapMemory',desc='Unmap a previously mapped memory object',type='protos']
+--
+To unmap a memory object once host access to it is no longer needed by the
+application, call:
+
+include::{generated}/api/protos/vkUnmapMemory.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the memory object to be unmapped.
+
+ifdef::VK_KHR_map_memory2[]
+Calling fname:vkUnmapMemory is equivalent to calling flink:vkUnmapMemory2KHR
+with an empty pname:pNext chain and the flags parameter set to zero.
+endif::VK_KHR_map_memory2[]
+
+.Valid Usage
+****
+  * [[VUID-vkUnmapMemory-memory-00689]]
+    pname:memory must: be currently host mapped
+****
+
+include::{generated}/validity/protos/vkUnmapMemory.adoc[]
+--
+
+ifdef::VK_KHR_map_memory2[]
+[open,refpage='vkUnmapMemory2KHR',desc='Unmap a previously mapped memory object',type='protos']
+--
+Alternatively, to unmap a memory object once host access to it is no longer
+needed by the application, call:
+
+include::{generated}/api/protos/vkUnmapMemory2KHR.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:pMemoryUnmapInfo is a pointer to a slink:VkMemoryUnmapInfoKHR
+    structure describing parameters of the unmap.
+
+This function behaves identically to flink:vkUnmapMemory except that it gets
+its parameters via an extensible structure pointer rather than directly as
+function arguments.
+
+include::{generated}/validity/protos/vkUnmapMemory2KHR.adoc[]
+--
+
+[open,refpage='VkMemoryUnmapInfoKHR',desc='Structure containing parameters of a memory unmap operation',type='structs']
+--
+The sname:VkMemoryUnmapInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryUnmapInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:memory is the slink:VkDeviceMemory object to be unmapped.
+
+.Valid Usage
+****
+  * [[VUID-VkMemoryUnmapInfoKHR-memory-07964]]
+    pname:memory must: be currently host mapped
+****
+
+include::{generated}/validity/structs/VkMemoryUnmapInfoKHR.adoc[]
+--
+
+[open,refpage='VkMemoryUnmapFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMemoryUnmapFlagsKHR.adoc[]
+
+tname:VkMemoryMapFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+endif::VK_KHR_map_memory2[]
+
+[[memory-device-lazy_allocation]]
+=== Lazily Allocated Memory
+
+If the memory object is allocated from a heap with the
+ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set, that object's backing
+memory may: be provided by the implementation lazily.
+The actual committed size of the memory may: initially be as small as zero
+(or as large as the requested size), and monotonically increases as
+additional memory is needed.
+
+A memory type with this flag set is only allowed to be bound to a
+sname:VkImage whose usage flags include
+ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT.
+
+[NOTE]
+.Note
+====
+Using lazily allocated memory objects for framebuffer attachments that are
+not needed once a render pass instance has completed may: allow some
+implementations to never allocate memory for such attachments.
+====
+
+[open,refpage='vkGetDeviceMemoryCommitment',desc='Query the current commitment for a VkDeviceMemory',type='protos']
+--
+To determine the amount of lazily-allocated memory that is currently
+committed for a memory object, call:
+
+include::{generated}/api/protos/vkGetDeviceMemoryCommitment.adoc[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the memory object being queried.
+  * pname:pCommittedMemoryInBytes is a pointer to a basetype:VkDeviceSize
+    value in which the number of bytes currently committed is returned, on
+    success.
+
+The implementation may: update the commitment at any time, and the value
+returned by this query may: be out of date.
+
+The implementation guarantees to allocate any committed memory from the
+pname:heapIndex indicated by the memory type that the memory object was
+created with.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceMemoryCommitment-memory-00690]]
+    pname:memory must: have been created with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
+****
+
+include::{generated}/validity/protos/vkGetDeviceMemoryCommitment.adoc[]
+--
+
+
+ifdef::VK_VERSION_1_1[]
+[[memory-protected-memory]]
+=== Protected Memory
+
+_Protected memory_ divides device memory into protected device memory and
+unprotected device memory.
+
+Protected memory adds the following concepts:
+
+  * Memory:
+  ** Unprotected device memory, which can: be visible to the device and can:
+     be visible to the host
+  ** Protected device memory, which can: be visible to the device but must:
+     not be visible to the host
+  * Resources:
+  ** Unprotected images and unprotected buffers, to which unprotected memory
+     can: be bound
+  ** Protected images and protected buffers, to which protected memory can:
+     be bound
+  * Command buffers:
+  ** Unprotected command buffers, which can: be submitted to a device queue
+     to execute unprotected queue operations
+  ** Protected command buffers, which can: be submitted to a
+     protected-capable device queue to execute protected queue operations
+  * Device queues:
+  ** Unprotected device queues, to which unprotected command buffers can: be
+     submitted
+  ** Protected-capable device queues, to which unprotected command buffers
+     or protected command buffers can: be submitted
+  * Queue submissions
+  ** Unprotected queue submissions, through which unprotected command
+     buffers can: be submitted
+  ** Protected queue submissions, through which protected command buffers
+     can: be submitted
+  * Queue operations
+  ** Unprotected queue operations
+  ** Protected queue operations
+
+ifdef::VK_EXT_pipeline_protected_access[]
+[NOTE]
+.Note
+====
+When the <<features-protectedMemory, pname:protectedMemory>> feature is
+enabled, all pipelines may: be recorded in either protected or unprotected
+command buffers (or both), which may incur an extra cost on some
+implementations.
+This can: be mitigated by enabling the <<features-pipelineProtectedAccess,
+pname:pipelineProtectedAccess>> feature, in which case pipelines created
+with ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT may only be
+recorded in protected command buffers, and pipelines created with
+ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT may only be recorded in
+unprotected command buffers.
+====
+endif::VK_EXT_pipeline_protected_access[]
+
+
+[[memory-protected-access-rules]]
+==== Protected Memory Access Rules
+
+If slink:VkPhysicalDeviceProtectedMemoryProperties::pname:protectedNoFault
+is ename:VK_FALSE, applications must: not perform any of the following
+operations:
+
+  * Write to unprotected memory within protected queue operations.
+  * Access protected memory within protected queue operations other than in
+    framebuffer-space pipeline stages, the compute shader stage, or the
+    transfer stage.
+  * Perform a query within protected queue operations.
+
+If slink:VkPhysicalDeviceProtectedMemoryProperties::pname:protectedNoFault
+is ename:VK_TRUE, these operations are valid, but reads will return
+undefined: values, and writes will either be dropped or store undefined:
+values.
+
+Additionally, indirect operations must: not be performed within protected
+queue operations.
+
+Whether these operations are valid or not, or if any other invalid usage is
+performed, the implementation must: guarantee that:
+
+  * Protected device memory must: never be visible to the host.
+  * Values written to unprotected device memory must: not be a function of
+    values from protected memory.
+endif::VK_VERSION_1_1[]
+
+
+ifdef::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[]
+[[memory-external-handle-types]]
+=== External Memory Handle Types
+
+
+[[memory-external-android-hardware-buffer]]
+==== Android Hardware Buffer
+
+Android's NDK defines basetype:AHardwareBuffer objects, which represent
+device memory that is shareable across processes and that can: be accessed
+by a variety of media APIs and the hardware used to implement them.
+These Android hardware buffer objects may: be imported into
+slink:VkDeviceMemory objects for access via Vulkan, or exported from Vulkan.
+An slink:VkImage or slink:VkBuffer can: be bound to the imported or exported
+slink:VkDeviceMemory object if it is created with
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
+
+[open,refpage='AHardwareBuffer',desc='Android hardware buffer type',type='basetypes']
+--
+To remove an unnecessary compile time dependency, an incomplete type
+definition of basetype:AHardwareBuffer is provided in the Vulkan headers:
+
+include::{generated}/api/basetypes/AHardwareBuffer.adoc[]
+
+The actual basetype:AHardwareBuffer type is defined in Android NDK headers.
+--
+
+[NOTE]
+.Note
+====
+The NDK format, usage, and size/dimensions of an basetype:AHardwareBuffer
+object can be obtained with the code:AHardwareBuffer_describe function.
+While Android hardware buffers can be imported to or exported from Vulkan
+without using that function, valid usage and implementation behavior is
+defined in terms of the code:AHardwareBuffer_Desc properties it returns.
+====
+
+Android hardware buffer objects are reference-counted using Android NDK
+functions outside of the scope of this specification.
+A slink:VkDeviceMemory imported from an Android hardware buffer or that can:
+be exported to an Android hardware buffer must: acquire a reference to its
+basetype:AHardwareBuffer object, and must: release this reference when the
+device memory is freed.
+During the host execution of a Vulkan command that has an Android hardware
+buffer as a parameter (including indirect parameters via pname:pNext
+chains), the application must: not decrement the Android hardware buffer's
+reference count to zero.
+
+Android hardware buffers can: be mapped and unmapped for CPU access using
+the NDK functions.
+These lock and unlock APIs are considered to acquire and release ownership
+of the Android hardware buffer, and applications must: follow the rules
+described in <<resources-external-sharing,External Resource Sharing>> to
+transfer ownership between the Vulkan instance and these native APIs.
+
+Android hardware buffers can: be shared with external APIs and Vulkan
+instances on the same device, and also with foreign devices.
+When transferring ownership of the Android hardware buffer, the external and
+foreign special queue families described in
+<<synchronization-queue-transfers>> are not identical.
+All APIs which produce or consume Android hardware buffers are considered to
+use foreign devices, except OpenGL ES contexts and Vulkan logical devices
+that have matching device and driver UUIDs.
+Implementations may: treat a transfer to or from the foreign queue family as
+if it were a transfer to or from the external queue family when the Android
+hardware buffer's usage only permits it to be used on the same physical
+device.
+
+
+[[memory-external-android-hardware-buffer-optimal-usages]]
+===== Android Hardware Buffer Optimal Usages
+
+Vulkan buffer and image usage flags do not correspond exactly to Android
+hardware buffer usage flags.
+When allocating Android hardware buffers with non-Vulkan APIs, if any
+code:AHARDWAREBUFFER_USAGE_GPU_* usage bits are included, by default the
+allocator must: allocate the memory in such a way that it supports Vulkan
+usages and creation flags in the
+<<memory-external-android-hardware-buffer-usage, usage equivalence table>>
+which do not have Android hardware buffer equivalents.
+
+An slink:VkAndroidHardwareBufferUsageANDROID structure can: be included in
+the pname:pNext chain of a slink:VkImageFormatProperties2 structure passed
+to flink:vkGetPhysicalDeviceImageFormatProperties2 to obtain optimal Android
+hardware buffer usage flags for specific Vulkan resource creation
+parameters.
+Some usage flags returned by these commands are required: based on the input
+parameters, but additional vendor-specific usage flags
+(code:AHARDWAREBUFFER_USAGE_VENDOR_*) may: also be returned.
+Any Android hardware buffer allocated with these vendor-specific usage flags
+and imported to Vulkan must: only be bound to resources created with
+parameters that are a subset of the parameters used to obtain the Android
+hardware buffer usage, since the memory may: have been allocated in a way
+incompatible with other parameters.
+If an Android hardware buffer is successfully allocated with additional
+non-vendor-specific usage flags in addition to the recommended usage, it
+must: support being used in the same ways as an Android hardware buffer
+allocated with only the recommended usage, and also in ways indicated by the
+additional usage.
+
+
+[[memory-external-android-hardware-buffer-external-formats]]
+===== Android Hardware Buffer External Formats
+
+Android hardware buffers may: represent images using implementation-specific
+formats, layouts, color models, etc., which do not have Vulkan equivalents.
+Such _external formats_ are commonly used by external image sources such as
+video decoders or cameras.
+Vulkan can: import Android hardware buffers that have external formats, but
+since the image contents are in an undiscoverable and possibly proprietary
+representation, images with external formats must: only be used as
+ifdef::VK_ANDROID_external_format_resolve[]
+resolve images or
+endif::VK_ANDROID_external_format_resolve[]
+sampled images, and must: have optimal tiling.
+Images with external formats must: only be sampled with a sampler that has
+{YCbCr} conversion enabled.
+
+Images that will be backed by an Android hardware buffer can: use an
+external format by setting slink:VkImageCreateInfo::pname:format to
+ename:VK_FORMAT_UNDEFINED and including a slink:VkExternalFormatANDROID
+structure in the pname:pNext chain.
+Images can: be created with an external format even if the Android hardware
+buffer has a format which has an
+<<memory-external-android-hardware-buffer-formats,equivalent Vulkan format>>
+to enable consistent handling of images from sources that might use either
+category of format.
+However, all images created with an external format are subject to the valid
+usage requirements associated with external formats, even if the Android
+hardware buffer's format has a Vulkan equivalent.
+The external format of an Android hardware buffer can: be obtained by
+passing a slink:VkAndroidHardwareBufferFormatPropertiesANDROID structure to
+flink:vkGetAndroidHardwareBufferPropertiesANDROID.
+
+
+[[memory-external-android-hardware-buffer-image-resources]]
+===== Android Hardware Buffer Image Resources
+
+Android hardware buffers have intrinsic width, height, format, and usage
+properties, so Vulkan images bound to memory imported from an Android
+hardware buffer must: use dedicated allocations:
+sname:VkMemoryDedicatedRequirements::pname:requiresDedicatedAllocation must:
+be ename:VK_TRUE for images created with
+slink:VkExternalMemoryImageCreateInfo::pname:handleTypes that includes
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
+When creating an image that will be bound to an imported Android hardware
+buffer, the image creation parameters must: be equivalent to the
+basetype:AHardwareBuffer properties as described by the valid usage of
+slink:VkMemoryAllocateInfo.
+Similarly, device memory allocated for a dedicated image must: not be
+exported to an Android hardware buffer until it has been bound to that
+image, and the implementation must: return an Android hardware buffer with
+properties derived from the image:
+
+  * The code:width and code:height members of code:AHardwareBuffer_Desc
+    must: be the same as the pname:width and pname:height members of
+    slink:VkImageCreateInfo::pname:extent, respectively.
+  * The code:layers member of code:AHardwareBuffer_Desc must: be the same as
+    the pname:arrayLayers member of slink:VkImageCreateInfo.
+  * The code:format member of code:AHardwareBuffer_Desc must: be equivalent
+    to slink:VkImageCreateInfo::pname:format as defined by
+    <<memory-external-android-hardware-buffer-formats,AHardwareBuffer Format
+    Equivalence>>.
+  * The code:usage member of code:AHardwareBuffer_Desc must: include bits
+    corresponding to bits included in slink:VkImageCreateInfo::pname:usage
+    and slink:VkImageCreateInfo::pname:flags where such a correspondence
+    exists according to
+    <<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage
+    Equivalence>>.
+    It may: also include additional usage bits, including vendor-specific
+    usages.
+    Presence of vendor usage bits may: make the Android hardware buffer only
+    usable in ways indicated by the image creation parameters, even when
+    used outside Vulkan, in a similar way that allocating the Android
+    hardware buffer with usage returned in
+    slink:VkAndroidHardwareBufferUsageANDROID does.
+
+Implementations may: support fewer combinations of image creation parameters
+for images with Android hardware buffer external handle type than for
+non-external images.
+Support for a given set of parameters can: be determined by passing
+slink:VkExternalImageFormatProperties to
+flink:vkGetPhysicalDeviceImageFormatProperties2 with pname:handleType set to
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
+Any Android hardware buffer successfully allocated outside Vulkan with usage
+that includes code:AHARDWAREBUFFER_USAGE_GPU_* must: be supported when using
+equivalent Vulkan image parameters.
+If a given choice of image parameters are supported for import, they can:
+also be used to create an image and memory that will be exported to an
+Android hardware buffer.
+
+[[memory-external-android-hardware-buffer-formats]]
+.AHardwareBuffer Format Equivalence
+[width="100%",options="header"]
+|====
+| AHardwareBuffer Format                         | Vulkan Format
+| code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM     | ename:VK_FORMAT_R8G8B8A8_UNORM
+| code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM ^1^ | ename:VK_FORMAT_R8G8B8A8_UNORM
+| code:AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM       | ename:VK_FORMAT_R8G8B8_UNORM
+| code:AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM       | ename:VK_FORMAT_R5G6B5_UNORM_PACK16
+| code:AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT | ename:VK_FORMAT_R16G16B16A16_SFLOAT
+| code:AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM  | ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+| code:AHARDWAREBUFFER_FORMAT_D16_UNORM          | ename:VK_FORMAT_D16_UNORM
+| code:AHARDWAREBUFFER_FORMAT_D24_UNORM          | ename:VK_FORMAT_X8_D24_UNORM_PACK32
+| code:AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT  | ename:VK_FORMAT_D24_UNORM_S8_UINT
+| code:AHARDWAREBUFFER_FORMAT_D32_FLOAT          | ename:VK_FORMAT_D32_SFLOAT
+| code:AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT  | ename:VK_FORMAT_D32_SFLOAT_S8_UINT
+| code:AHARDWAREBUFFER_FORMAT_S8_UINT            | ename:VK_FORMAT_S8_UINT
+|====
+
+[[memory-external-android-hardware-buffer-usage]]
+.AHardwareBuffer Usage Equivalence
+[width="100%",options="header"]
+|====
+| AHardwareBuffer Usage                          | Vulkan Usage or Creation Flag
+| None                                           | ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+| None                                           | ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE   | ename:VK_IMAGE_USAGE_SAMPLED_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE   | ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER ^3^ | ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER ^3^ | ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP        | ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE | None ^2^
+ifdef::VK_VERSION_1_1[]
+| code:AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT   | ename:VK_IMAGE_CREATE_PROTECTED_BIT
+endif::VK_VERSION_1_1[]
+| None                                           | ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+| None                                           | ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
+| code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER ^4^ | ename:VK_IMAGE_USAGE_STORAGE_BIT
+|====
+
+1::
+    Vulkan does not differentiate between
+    code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM and
+    code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM: they both behave as
+    ename:VK_FORMAT_R8G8B8A8_UNORM.
+    After an external entity writes to a
+    code:AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM Android hardware buffer, the
+    values read by Vulkan from the X/A component are undefined:.
+    To emulate the traditional behavior of the X component during sampling
+    or blending, applications should: use ename:VK_COMPONENT_SWIZZLE_ONE in
+    image view component mappings and ename:VK_BLEND_FACTOR_ONE in color
+    blend factors.
+    There is no way to avoid copying these undefined: values when copying
+    from such an image to another image or buffer.
+
+2::
+    The code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE flag does not
+    correspond to a Vulkan image usage or creation flag.
+    Instead, its presence indicates that the Android hardware buffer
+    contains a complete mipmap chain, and its absence indicates that the
+    Android hardware buffer contains only a single mip level.
+
+3::
+    Only image usages valid for the format are valid.
+    It would be invalid to take a Android Hardware Buffer with a format of
+    code:AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM that has a
+    code:AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER usage and try to create an
+    image with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT.
+
+4::
+    In combination with a hardware buffer format other than code:BLOB.
+
+ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
+[NOTE]
+.Note
+====
+When using ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT with Android hardware
+buffer images, applications should: use slink:VkImageFormatListCreateInfo to
+inform the implementation which view formats will be used with the image.
+For some common sets of format, this allows some implementations to provide
+significantly better performance when accessing the image via Vulkan.
+====
+endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
+
+
+[[memory-external-android-hardware-buffer-buffer-resources]]
+===== Android Hardware Buffer Buffer Resources
+
+Android hardware buffers with a format of code:AHARDWAREBUFFER_FORMAT_BLOB
+and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER can: be
+used as the backing store for slink:VkBuffer objects.
+Such Android hardware buffers have a size in bytes specified by their
+code:width; code:height and code:layers are both `1`.
+
+Unlike images, buffer resources backed by Android hardware buffers do not
+require dedicated allocations.
+
+Exported basetype:AHardwareBuffer objects that do not have dedicated images
+must: have a format of code:AHARDWAREBUFFER_FORMAT_BLOB, usage must: include
+code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, code:width must: equal the
+device memory allocation size, and code:height and code:layers must: be `1`.
+endif::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_hardware_buffer[]
+
+ifdef::VK_QNX_external_memory_screen_buffer[]
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+[[memory-external-handle-types]]
+=== External Memory Handle Types
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+include::{chapters}/VK_QNX_external_memory_screen_buffer/qnx_screen_buffer.adoc[]
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[[memory-peer-memory-features]]
+=== Peer Memory Features
+
+[open,refpage='vkGetDeviceGroupPeerMemoryFeatures',desc='Query supported peer memory features of a device',type='protos']
+--
+_Peer memory_ is memory that is allocated for a given physical device and
+then bound to a resource and accessed by a different physical device, in a
+logical device that represents multiple physical devices.
+Some ways of reading and writing peer memory may: not be supported by a
+device.
+
+To determine how peer memory can: be accessed, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetDeviceGroupPeerMemoryFeatures.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
+
+ifdef::VK_KHR_device_group[]
+include::{generated}/api/protos/vkGetDeviceGroupPeerMemoryFeaturesKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:heapIndex is the index of the memory heap from which the memory is
+    allocated.
+  * pname:localDeviceIndex is the device index of the physical device that
+    performs the memory access.
+  * pname:remoteDeviceIndex is the device index of the physical device that
+    the memory is allocated for.
+  * pname:pPeerMemoryFeatures is a pointer to a
+    tlink:VkPeerMemoryFeatureFlags bitmask indicating which types of memory
+    accesses are supported for the combination of heap, local, and remote
+    devices.
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-heapIndex-00691]]
+    pname:heapIndex must: be less than pname:memoryHeapCount
+  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00692]]
+    pname:localDeviceIndex must: be a valid device index
+  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-remoteDeviceIndex-00693]]
+    pname:remoteDeviceIndex must: be a valid device index
+  * [[VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00694]]
+    pname:localDeviceIndex must: not equal pname:remoteDeviceIndex
+****
+
+include::{generated}/validity/protos/vkGetDeviceGroupPeerMemoryFeatures.adoc[]
+--
+
+[open,refpage='VkPeerMemoryFeatureFlagBits',desc='Bitmask specifying supported peer memory features',type='enums']
+--
+Bits which may: be set in
+flink:vkGetDeviceGroupPeerMemoryFeatures::pname:pPeerMemoryFeatures,
+indicating supported peer memory features, are:
+
+include::{generated}/api/enums/VkPeerMemoryFeatureFlagBits.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/enums/VkPeerMemoryFeatureFlagBitsKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * ename:VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT specifies that the memory can:
+    be accessed as the source of any ftext:vkCmdCopy* command.
+  * ename:VK_PEER_MEMORY_FEATURE_COPY_DST_BIT specifies that the memory can:
+    be accessed as the destination of any ftext:vkCmdCopy* command.
+  * ename:VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT specifies that the memory
+    can: be read as any memory access type.
+  * ename:VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT specifies that the memory
+    can: be written as any memory access type.
+    Shader atomics are considered to be writes.
+
+[NOTE]
+.Note
+====
+The peer memory features of a memory heap also apply to any accesses that
+may: be performed during <<synchronization-image-layout-transitions, image
+layout transitions>>.
+====
+
+ename:VK_PEER_MEMORY_FEATURE_COPY_DST_BIT must: be supported for all host
+local heaps and for at least one device-local memory heap.
+
+If a device does not support a peer memory feature, it is still valid to use
+a resource that includes both local and peer memory bindings with the
+corresponding access type as long as only the local bindings are actually
+accessed.
+For example, an application doing split-frame rendering would use
+framebuffer attachments that include both local and peer memory bindings,
+but would scissor the rendering to only update local memory.
+--
+
+[open,refpage='VkPeerMemoryFeatureFlags',desc='Bitmask of VkPeerMemoryFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPeerMemoryFeatureFlags.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/flags/VkPeerMemoryFeatureFlagsKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+tname:VkPeerMemoryFeatureFlags is a bitmask type for setting a mask of zero
+or more elink:VkPeerMemoryFeatureFlagBits.
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+=== Opaque Capture Address Query
+
+[open,refpage='vkGetDeviceMemoryOpaqueCaptureAddress',desc='Query an opaque capture address of a memory object',type='protos',alias='vkGetDeviceMemoryOpaqueCaptureAddressKHR']
+--
+To query a 64-bit opaque capture address value from a memory object, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkGetDeviceMemoryOpaqueCaptureAddress.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_buffer_device_address[or the equivalent command]
+
+ifdef::VK_KHR_buffer_device_address[]
+include::{generated}/api/protos/vkGetDeviceMemoryOpaqueCaptureAddressKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:device is the logical device that the memory object was allocated
+    on.
+  * pname:pInfo is a pointer to a
+    slink:VkDeviceMemoryOpaqueCaptureAddressInfo structure specifying the
+    memory object to retrieve an address for.
+
+The 64-bit return value is an opaque address representing the start of
+pname:pInfo->memory.
+
+If the memory object was allocated with a non-zero value of
+slink:VkMemoryOpaqueCaptureAddressAllocateInfo::pname:opaqueCaptureAddress,
+the return value must: be the same address.
+
+[NOTE]
+.Note
+====
+The expected usage for these opaque addresses is only for trace
+capture/replay tools to store these addresses in a trace and subsequently
+specify them during replay.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-None-03334]]
+    The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature
+    must: be enabled
+  * [[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetDeviceMemoryOpaqueCaptureAddress.adoc[]
+--
+
+[open,refpage='VkDeviceMemoryOpaqueCaptureAddressInfo',desc='Structure specifying the memory object to query an address for',type='structs',alias='VkDeviceMemoryOpaqueCaptureAddressInfoKHR']
+--
+The sname:VkDeviceMemoryOpaqueCaptureAddressInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceMemoryOpaqueCaptureAddressInfo.adoc[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceMemoryOpaqueCaptureAddressInfoKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memory specifies the memory whose address is being queried.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-03336]]
+    pname:memory must: have been allocated with
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT
+****
+
+include::{generated}/validity/structs/VkDeviceMemoryOpaqueCaptureAddressInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/pipelines.adoc b/codegen/vulkan/vulkan-docs-next/chapters/pipelines.adoc
new file mode 100644
index 0000000..1576c22
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/pipelines.adoc
@@ -0,0 +1,9116 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[pipelines]]
+= Pipelines
+
+The following <<pipelines-block-diagram,figure>> shows a block diagram of
+the Vulkan pipelines.
+Some Vulkan commands specify geometric objects to be drawn or computational
+work to be performed, while others specify state controlling how objects are
+handled by the various pipeline stages, or control data transfer between
+memory organized as images and buffers.
+Commands are effectively sent through a processing pipeline, either a
+_graphics pipeline_,
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+a _ray tracing pipeline_,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+or a _compute pipeline_.
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+The graphics pipeline can be operated in two modes, as either _primitive
+shading_ or _mesh shading_ pipeline.
+
+*Primitive Shading*
+
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+The first stage of the <<pipelines-graphics,graphics pipeline>>
+(<<drawing,Input Assembler>>) assembles vertices to form geometric
+primitives such as points, lines, and triangles, based on a requested
+primitive topology.
+In the next stage (<<shaders-vertex,Vertex Shader>>) vertices can: be
+transformed, computing positions and attributes for each vertex.
+If <<tessellation,tessellation>> and/or <<geometry,geometry>> shaders are
+supported, they can: then generate multiple primitives from a single input
+primitive, possibly changing the primitive topology or generating additional
+attribute data in the process.
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+*Cluster Culling Shading*
+
+When using the Cluster Culling Shader, a compute-like shader will perform
+cluster-based culling, a set of new built-in output variables are used to
+express visible cluster, in addition, a new built-in function is used to
+emit these variables from the cluster culling shader to the Input
+Assembler(IA) stage, then IA can use these variables to fetches vertices of
+visible cluster and drive vertex shader to work.
+
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+*Mesh Shading*
+
+When using the <<mesh,_mesh shading_>> pipeline input primitives are not
+assembled implicitly, but explicitly through the (<<shaders-mesh,Mesh
+Shader>>).
+The work on the mesh pipeline is initiated by the application
+<<drawing-mesh-shading,drawing>> a set of mesh tasks.
+
+If an optional (<<shaders-task,Task Shader>>) is active, each task triggers
+the execution of a task shader workgroup that will generate a new set of
+tasks upon completion.
+Each of these spawned tasks, or each of the original dispatched tasks if no
+task shader is present, triggers the execution of a mesh shader workgroup
+that produces an output mesh with a variable-sized number of primitives
+assembled from vertices stored in the output mesh.
+
+*Common*
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+The final resulting primitives are <<vertexpostproc-clipping,clipped>> to a
+clip volume in preparation for the next stage, <<primsrast,Rasterization>>.
+The rasterizer produces a series of _fragments_ associated with a region of
+the framebuffer, from a two-dimensional description of a point, line
+segment, or triangle.
+These fragments are processed by <<fragops,fragment operations>> to
+determine whether generated values will be written to the framebuffer.
+<<fragops-shader, Fragment shading>> determines the values to be written to
+the framebuffer attachments.
+Framebuffer operations then read and write the color and depth/stencil
+attachments of the framebuffer for a given subpass of a <<renderpass,render
+pass instance>>.
+The attachments can: be used as input attachments in the fragment shader in
+a later subpass of the same render pass.
+
+The <<pipelines-compute,compute pipeline>> is a separate pipeline from the
+graphics pipeline, which operates on one-, two-, or three-dimensional
+workgroups which can: read from and write to buffer and image memory.
+
+This ordering is meant only as a tool for describing Vulkan, not as a strict
+rule of how Vulkan is implemented, and we present it only as a means to
+organize the various operations of the pipelines.
+Actual ordering guarantees between pipeline stages are explained in detail
+in the <<synchronization-pipeline-stages-order, synchronization chapter>>.
+
+[[pipelines-block-diagram]]
+ifndef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+image::{images}/pipeline.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+image::{images}/pipelinemesh.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+Each pipeline is controlled by a monolithic object created from a
+description of all of the shader stages and any relevant fixed-function
+stages.
+<<interfaces,Linking>> the whole pipeline together allows the optimization
+of shaders based on their input/outputs and eliminates expensive draw time
+state validation.
+
+A pipeline object is bound to the current state using
+flink:vkCmdBindPipeline.
+Any pipeline object state that is specified as <<pipelines-dynamic-state,
+dynamic>> is not applied to the current state when the pipeline object is
+bound, but is instead set by dynamic state setting commands.
+
+No state, including dynamic state, is inherited from one command buffer to
+another.
+
+
+[open,refpage='VkPipeline',desc='Opaque handle to a pipeline object',type='handles']
+--
+Compute,
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ray tracing,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+and graphics pipelines are each represented by sname:VkPipeline handles:
+
+include::{generated}/api/handles/VkPipeline.adoc[]
+--
+
+
+[[pipelines-compute]]
+== Compute Pipelines
+
+Compute pipelines consist of a single static compute shader stage and the
+pipeline layout.
+
+The compute pipeline represents a compute shader and is created by calling
+fname:vkCreateComputePipelines
+ifndef::VKSC_VERSION_1_0[]
+with pname:module and pname:pName selecting an entry point from a shader
+module, where that entry point defines a valid compute shader, in the
+slink:VkPipelineShaderStageCreateInfo structure contained within the
+slink:VkComputePipelineCreateInfo structure.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+with an offline compiled pipeline provided in pname:pipelineCache and the
+pipeline identified by slink:VkPipelineOfflineCreateInfo structure in the
+pname:pNext chain of slink:VkComputePipelineCreateInfo structure.
+endif::VKSC_VERSION_1_0[]
+
+
+[open,refpage='vkCreateComputePipelines',desc='Creates a new compute pipeline object',type='protos']
+--
+:refpage: vkCreateComputePipelines
+:objectnameplural: compute pipelines
+:objectnamecamelcase: computePipeline
+:objectcount: pname:createInfoCount
+
+To create compute pipelines, call:
+
+include::{generated}/api/protos/vkCreateComputePipelines.adoc[]
+
+  * pname:device is the logical device that creates the compute pipelines.
+ifndef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
+    pipeline caching is disabled; or the handle of a valid
+    <<pipelines-cache,pipeline cache>> object, in which case use of that
+    cache is enabled for the duration of the command.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
+    cache>> object.
+endif::VKSC_VERSION_1_0[]
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pPipelines arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkComputePipelineCreateInfo structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
+    which the resulting compute pipeline objects are returned.
+ifdef::editing-notes[]
++
+[NOTE]
+.editing-note
+====
+TODO (Jon) - Should we say something like "`the i'th element of the
+pname:pPipelines array is created based on the corresponding element of the
+pname:pCreateInfos array`"? Also for flink:vkCreateGraphicsPipelines below.
+====
+endif::editing-notes[]
+
+ifdef::VKSC_VERSION_1_0[]
+If a pipeline creation fails due to:
+
+  * The identified pipeline not being present in pname:pipelineCache
+  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
+    structure
+
+the operation will continue as specified in <<pipelines-multiple, Multiple
+Pipeline Creation>> and the command will return
+ename:VK_ERROR_NO_PIPELINE_MATCH.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkCreateComputePipelines returns ename:VK_ERROR_NO_PIPELINE_MATCH
+    if the slink:VkComputePipelineCreateInfo::pname:pNext chain does not
+    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateComputePipelines-flags-00695]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+    pname:basePipelineIndex member of that same element is not `-1`,
+    pname:basePipelineIndex must: be less than the index into
+    pname:pCreateInfos that corresponds to that element
+  * [[VUID-vkCreateComputePipelines-flags-00696]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+    must: have been created with the
+    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-vkCreateComputePipelines-pipelineCache-02873]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
+    to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkCreateComputePipelines::pname:pipelineCache must: not be
+    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateComputePipelines.adoc[]
+--
+
+[open,refpage='VkComputePipelineCreateInfo',desc='Structure specifying parameters of a newly created compute pipeline',type='structs']
+--
+:refpage: VkComputePipelineCreateInfo
+
+The sname:VkComputePipelineCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkComputePipelineCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
+    how the pipeline will be generated.
+  * pname:stage is a slink:VkPipelineShaderStageCreateInfo structure
+    describing the compute shader.
+  * pname:layout is the description of binding locations used by both the
+    pipeline and descriptor sets used with the pipeline.
+  * pname:basePipelineHandle is a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * pname:basePipelineIndex is an index into the pname:pCreateInfos
+    parameter to use as a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+The parameters pname:basePipelineHandle and pname:basePipelineIndex are
+described in more detail in <<pipelines-pipeline-derivatives,Pipeline
+Derivatives>>.
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
+from that structure is used instead of pname:flags from this structure.
+endif::VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+:pipelineType: compute
+include::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
+include::{chapters}/commonvalidity/compute_graph_pipeline_create_info_common.adoc[]
+  * [[VUID-VkComputePipelineCreateInfo-stage-00701]]
+    The pname:stage member of pname:stage must: be
+    ename:VK_SHADER_STAGE_COMPUTE_BIT
+  * [[VUID-VkComputePipelineCreateInfo-stage-00702]]
+    The shader code for the entry point identified by pname:stage and the
+    rest of the state identified by this structure must: adhere to the
+    pipeline linking rules described in the <<interfaces,Shader Interfaces>>
+    chapter
+  * [[VUID-VkComputePipelineCreateInfo-layout-01687]]
+    The number of resources in pname:layout accessible to the compute shader
+    stage must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
+ifdef::VK_KHR_pipeline_library[]
+  * [[VUID-VkComputePipelineCreateInfo-shaderEnqueue-09177]]
+ifdef::VK_AMDX_shader_enqueue[]
+    If <<features-shaderEnqueue,pname:shaderEnqueue>> is not enabled,
+endif::VK_AMDX_shader_enqueue[]
+    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+ifdef::VK_AMDX_shader_enqueue[]
+  * [[VUID-VkComputePipelineCreateInfo-flags-09178]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the shader specified by
+    pname:stage must: not declare the code:ShaderEnqueueAMDX capability
+endif::VK_AMDX_shader_enqueue[]
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkComputePipelineCreateInfo-pipelineStageCreationFeedbackCount-06566]]
+    If
+    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
+    is not `0`, it must: be `1`
+endif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-VkComputePipelineCreateInfo-flags-07367]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkComputePipelineCreateInfo-flags-07996]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+endif::VK_NV_displacement_micromap[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkComputePipelineCreateInfo::pname:basePipelineHandle must: be
+    dlink:VK_NULL_HANDLE <<SCID-8>>.
+  * slink:VkComputePipelineCreateInfo::pname:basePipelineIndex must: be zero
+    <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkComputePipelineCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineShaderStageCreateInfo',desc='Structure specifying parameters of a newly created pipeline shader stage',type='structs']
+--
+The sname:VkPipelineShaderStageCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineShaderStageCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineShaderStageCreateFlagBits
+    specifying how the pipeline shader stage will be generated.
+  * pname:stage is a elink:VkShaderStageFlagBits value specifying a single
+    pipeline stage.
+ifdef::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
+  * pname:module is optionally a slink:VkShaderModule object containing the
+    shader code for this stage.
+endif::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
+ifndef::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
+  * pname:module is a slink:VkShaderModule object containing the shader code
+    for this stage.
+endif::VK_EXT_graphics_pipeline_library,VK_EXT_shader_module_identifier,VK_KHR_maintenance5[]
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * pname:pName is a pointer to a null-terminated UTF-8 string specifying
+    the entry point name of the shader for this stage.
+  * pname:pSpecializationInfo is a pointer to a slink:VkSpecializationInfo
+    structure, as described in
+    <<pipelines-specialization-constants,Specialization Constants>>, or
+    `NULL`.
+
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, the pipeline compilation process occurs
+<<pipelines-offline-compilation,offline>> and the pname:module, pname:pName,
+and pname:pSpecializationInfo parameters are not used at runtime and should:
+be ignored by the implementation.
+If provided, the application must: set the pname:pName and
+pname:pSpecializationInfo parameters to the values that were specified for
+the offline compilation of this pipeline.
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+If pname:module is not dlink:VK_NULL_HANDLE, the shader code used by the
+pipeline is defined by pname:module.
+If pname:module is dlink:VK_NULL_HANDLE, the shader code is defined by the
+chained slink:VkShaderModuleCreateInfo if present.
+endif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+ifndef::VKSC_VERSION_1_0,VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+The shader code used by the pipeline is defined by pname:module.
+endif::VKSC_VERSION_1_0,VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_shader_module_identifier[]
+If the <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
+feature is enabled, applications can: omit shader code for pname:stage and
+instead provide a module identifier.
+This is done by including a
+slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT struct with
+pname:identifierSize not equal to 0 in the pname:pNext chain.
+A shader stage created in this way is equivalent to one created using a
+shader module with the same identifier.
+The identifier allows an implementation to look up a pipeline without
+consuming a valid SPIR-V module.
+If a pipeline is not found, pipeline compilation is not possible and the
+implementation must: fail as specified by
+ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT.
+
+When an identifier is used in lieu of a shader module, implementations may:
+fail pipeline compilation with ename:VK_PIPELINE_COMPILE_REQUIRED for any
+reason.
+
+[NOTE]
+.Note
+====
+The rationale for the relaxed requirement on implementations to return a
+pipeline with slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT is
+that layers or tools may intercept pipeline creation calls and require the
+full SPIR-V context to operate correctly.
+ICDs are not expected to fail pipeline compilation if the pipeline exists in
+a cache somewhere.
+====
+
+ifdef::VK_KHR_pipeline_library[]
+Applications can: use identifiers when creating pipelines with
+ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
+When creating such pipelines, ename:VK_SUCCESS may: be returned, but
+subsequently fail when referencing the pipeline in a
+slink:VkPipelineLibraryCreateInfoKHR struct.
+Applications must: allow pipeline compilation to fail during link steps with
+ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT as it may:
+not be possible to determine if a pipeline can: be created from identifiers
+until the link step.
+endif::VK_KHR_pipeline_library[]
+endif::VK_EXT_shader_module_identifier[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00704]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00705]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:stage must: not be
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02091]]
+    If the <<features-meshShader, pname:meshShaders>> feature is not
+    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_MESH_BIT_EXT
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02092]]
+    If the <<features-taskShader, pname:taskShaders>> feature is not
+    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_TASK_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-clustercullingShader-07813]]
+    If the <<features-clustercullingShader, pname:clustercullingShader>>
+    feature is not enabled, pname:stage must: not be
+    ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI
+endif::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00706]]
+    pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
+    ename:VK_SHADER_STAGE_ALL
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-module-05026]]
+    pname:module must: be dlink:VK_NULL_HANDLE.
+  * [[VUID-VkPipelineShaderStageCreateInfo-pName-05027]]
+    If pname:pName is not `NULL`, it must: be the name of an
+    code:OpEntryPoint in the SPIR-V shader module used for offline
+    compilation of this pipeline with an execution model that matches
+    pname:stage
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-pName-00707]]
+    pname:pName must: be the name of an code:OpEntryPoint in pname:module
+    with an execution model that matches pname:stage
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708]]
+    If the identified entry point includes any variable in its interface
+    that is declared with the code:ClipDistance code:BuiltIn decoration,
+    that variable must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxClipDistances
+  * [[VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709]]
+    If the identified entry point includes any variable in its interface
+    that is declared with the code:CullDistance code:BuiltIn decoration,
+    that variable must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxCullDistances
+  * [[VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710]]
+    If the identified entry point includes any variables in its interface
+    that are declared with the code:ClipDistance or code:CullDistance
+    code:BuiltIn decoration, those variables must: not have array sizes
+    which sum to more than
+    sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances
+  * [[VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711]]
+    If the identified entry point includes any variable in its interface
+    that is declared with the code:SampleMask code:BuiltIn decoration, that
+    variable must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00713]]
+    If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified
+    entry point has an code:OpExecutionMode instruction specifying a patch
+    size with code:OutputVertices, the patch size must: be greater than `0`
+    and less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00714]]
+    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
+    entry point must: have an code:OpExecutionMode instruction specifying a
+    maximum output vertex count that is greater than `0` and less than or
+    equal to sname:VkPhysicalDeviceLimits::pname:maxGeometryOutputVertices
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00715]]
+    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
+    entry point must: have an code:OpExecutionMode instruction specifying an
+    invocation count that is greater than `0` and less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxGeometryShaderInvocations
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02596]]
+    If pname:stage is either ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point
+    writes to code:Layer for any primitive, it must: write the same value to
+    code:Layer for all vertices of a given primitive
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02597]]
+    If pname:stage is either ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point
+    writes to code:ViewportIndex for any primitive, it must: write the same
+    value to code:ViewportIndex for all vertices of a given primitive
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06685]]
+    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
+    entry point writes to code:FragDepth in any execution path, all
+    execution paths that are not exclusive to helper invocations must:
+    either discard the fragment, or write or initialize the value of
+    code:FragDepth
+ifdef::VK_EXT_shader_stencil_export[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06686]]
+    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
+    entry point writes to code:FragStencilRefEXT in any execution path, all
+    execution paths that are not exclusive to helper invocations must:
+    either discard the fragment, or write or initialize the value of
+    code:FragStencilRefEXT
+endif::VK_EXT_shader_stencil_export[]
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02784]]
+    If pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    flag set, the <<features-subgroupSizeControl,
+    pname:subgroupSizeControl>> feature must: be enabled
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02785]]
+    If pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
+    set, the <<features-computeFullSubgroups, pname:computeFullSubgroups>>
+    feature must: be enabled
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-08988]]
+    If pname:flags includes
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT,
+    pname:stage must: be
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    one of ename:VK_SHADER_STAGE_MESH_BIT_EXT,
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT, or
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    ename:VK_SHADER_STAGE_COMPUTE_BIT
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02754]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
+    is included in the pname:pNext chain, pname:flags must: not have the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    flag set
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02755]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
+    is included in the pname:pNext chain, the
+    <<features-subgroupSizeControl, pname:subgroupSizeControl>> feature
+    must: be enabled, and pname:stage must: be a valid bit specified in
+    <<limits-requiredSubgroupSizeStages, pname:requiredSubgroupSizeStages>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02756]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
+    is included in the pname:pNext chain and pname:stage is
+    ename:VK_SHADER_STAGE_COMPUTE_BIT,
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[ename:VK_SHADER_STAGE_MESH_BIT_EXT, or ename:VK_SHADER_STAGE_TASK_BIT_EXT,]
+    the local workgroup size of the shader must: be less than or equal to
+    the product of
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::pname:requiredSubgroupSize
+    and <<limits-maxComputeWorkgroupSubgroups,
+    pname:maxComputeWorkgroupSubgroups>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02757]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure
+    is included in the pname:pNext chain, and pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
+    set, the local workgroup size in the X dimension of the pipeline must:
+    be a multiple of
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::pname:requiredSubgroupSize
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02758]]
+    If pname:flags has both the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT and
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    flags set, the local workgroup size in the X dimension of the pipeline
+    must: be a multiple of <<limits-maxSubgroupSize, pname:maxSubgroupSize>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02759]]
+    If pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag
+    set and pname:flags does not have the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    flag set and no
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
+    included in the pname:pNext chain, the local workgroup size in the X
+    dimension of the pipeline must: be a multiple of <<limits-subgroup-size,
+    pname:subgroupSize>>
+ifdef::VK_KHR_cooperative_matrix[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-module-08987]]
+    If pname:module uses the code:OpTypeCooperativeMatrixKHR instruction
+    with a code:Scope equal to code:Subgroup, then the local workgroup size
+    in the X dimension of the pipeline must: be a multiple of
+    <<limits-subgroup-size,pname:subgroupSize>>.
+endif::VK_KHR_cooperative_matrix[]
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-08771]]
+ifdef::VK_EXT_shader_module_identifier[]
+    If a shader module identifier is not specified for this pname:stage,
+endif::VK_EXT_shader_module_identifier[]
+    pname:module must: be a valid slink:VkShaderModule
+ifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+    if none of the following features are enabled:
+ifdef::VK_EXT_graphics_pipeline_library[]
+  ** <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_KHR_maintenance5[]
+  ** <<features-maintenance5, pname:maintenance5>>
+endif::VK_KHR_maintenance5[]
+endif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06845]]
+ifdef::VK_EXT_shader_module_identifier[]
+    If a shader module identifier is not specified for this pname:stage,
+    pname:module must: be a valid slink:VkShaderModule, or
+endif::VK_EXT_shader_module_identifier[]
+ifndef::VK_EXT_shader_module_identifier[]
+    If pname:module is dlink:VK_NULL_HANDLE]
+endif::VK_EXT_shader_module_identifier[]
+    there must: be a valid slink:VkShaderModuleCreateInfo structure in the
+    pname:pNext chain
+endif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_shader_module_identifier[]
+ifdef::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06844]]
+    If a shader module identifier is specified for this pname:stage, a
+    slink:VkShaderModuleCreateInfo structure must: not be present in the
+    pname:pNext chain
+endif::VK_EXT_graphics_pipeline_library,VK_KHR_maintenance5[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-06848]]
+    If a shader module identifier is specified for this pname:stage,
+    pname:module must: be dlink:VK_NULL_HANDLE
+endif::VK_EXT_shader_module_identifier[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849]]
+ifdef::VK_EXT_shader_module_identifier[]
+    If a shader module identifier is not specified, the
+endif::VK_EXT_shader_module_identifier[]
+ifndef::VK_EXT_shader_module_identifier[The]
+    shader code used by the pipeline must: be valid as described by the
+    <<spirv-spec,Khronos SPIR-V Specification>> after applying the
+    specializations provided in pname:pSpecializationInfo, if any, and then
+    converting all specialization constants into fixed constants
+****
+
+include::{generated}/validity/structs/VkPipelineShaderStageCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineShaderStageCreateFlags',desc='Bitmask of VkPipelineShaderStageCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineShaderStageCreateFlags.adoc[]
+
+tname:VkPipelineShaderStageCreateFlags is a bitmask type for setting a mask
+of zero or more elink:VkPipelineShaderStageCreateFlagBits.
+--
+
+[open,refpage='VkPipelineShaderStageCreateFlagBits',desc='Bitmask controlling how a pipeline shader stage is created',type='enums']
+--
+Possible values of the pname:flags member of
+slink:VkPipelineShaderStageCreateInfo specifying how a pipeline shader stage
+is created, are:
+
+include::{generated}/api/enums/VkPipelineShaderStageCreateFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT
+    specifies that the
+    <<interfaces-builtin-variables-sgs,code:SubgroupSize>> may: vary in the
+    shader stage.
+  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT
+    specifies that the subgroup sizes must: be launched with all invocations
+    active in the
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
+    compute stage.
+
+[NOTE]
+.Note
+====
+If ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+and ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT are
+specified and <<limits-minSubgroupSize, pname:minSubgroupSize>> does not
+equal <<limits-maxSubgroupSize, pname:maxSubgroupSize>> and no
+<<pipelines-required-subgroup-size, required subgroup size>> is specified,
+then the only way to guarantee that the 'X' dimension of the local workgroup
+size is a multiple of <<interfaces-builtin-variables-sgs,
+code:SubgroupSize>> is to make it a multiple of pname:maxSubgroupSize.
+Under these conditions, you are guaranteed full subgroups but not any
+particular subgroup size.
+====
+
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+--
+
+[open,refpage='VkShaderStageFlagBits',desc='Bitmask specifying a pipeline stage',type='enums']
+--
+Bits which can: be set by commands and structures, specifying one or more
+shader stages, are:
+
+include::{generated}/api/enums/VkShaderStageFlagBits.adoc[]
+
+  * ename:VK_SHADER_STAGE_VERTEX_BIT specifies the vertex stage.
+  * ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT specifies the
+    tessellation control stage.
+  * ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT specifies the
+    tessellation evaluation stage.
+  * ename:VK_SHADER_STAGE_GEOMETRY_BIT specifies the geometry stage.
+  * ename:VK_SHADER_STAGE_FRAGMENT_BIT specifies the fragment stage.
+  * ename:VK_SHADER_STAGE_COMPUTE_BIT specifies the compute stage.
+  * ename:VK_SHADER_STAGE_ALL_GRAPHICS is a combination of bits used as
+    shorthand to specify all graphics stages defined above (excluding the
+    compute stage).
+  * ename:VK_SHADER_STAGE_ALL is a combination of bits used as shorthand to
+    specify all shader stages supported by the device, including all
+    additional stages which are introduced by extensions.
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * ename:VK_SHADER_STAGE_TASK_BIT_EXT specifies the task stage.
+  * ename:VK_SHADER_STAGE_MESH_BIT_EXT specifies the mesh stage.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  * ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI specifies the cluster
+    culling stage.
+endif::VK_HUAWEI_cluster_culling_shader[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR specifies the ray generation stage.
+  * ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR specifies the any-hit stage.
+  * ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR specifies the closest hit
+    stage.
+  * ename:VK_SHADER_STAGE_MISS_BIT_KHR specifies the miss stage.
+  * ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR specifies the intersection
+    stage.
+  * ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR specifies the callable stage.
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+[NOTE]
+.Note
+====
+ename:VK_SHADER_STAGE_ALL_GRAPHICS only includes the original five graphics
+stages included in Vulkan 1.0, and not any stages added by extensions.
+Thus, it may not have the desired effect in all cases.
+====
+--
+
+[open,refpage='VkShaderStageFlags',desc='Bitmask of VkShaderStageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkShaderStageFlags.adoc[]
+
+tname:VkShaderStageFlags is a bitmask type for setting a mask of zero or
+more elink:VkShaderStageFlagBits.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+[open,refpage='VkPipelineShaderStageRequiredSubgroupSizeCreateInfo',desc='Structure specifying the required subgroup size of a newly created pipeline shader stage',type='structs',alias='VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT']
+--
+The sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.adoc[]
+
+ifdef::VK_EXT_subgroup_size_control[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.adoc[]
+endif::VK_EXT_subgroup_size_control[]
+
+ifdef::VK_EXT_shader_object[]
+or the equiavlent
+
+include::{generated}/api/structs/VkShaderRequiredSubgroupSizeCreateInfoEXT.adoc[]
+endif::VK_EXT_shader_object[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[pipelines-required-subgroup-size]] pname:requiredSubgroupSize is an
+    unsigned integer value specifying the required subgroup size for the
+    newly created pipeline shader stage.
+
+If a sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is
+included in the pname:pNext chain of slink:VkPipelineShaderStageCreateInfo,
+it specifies that the pipeline shader stage being compiled has a required
+subgroup size.
+
+ifdef::VK_EXT_shader_object[]
+If a sname:VkShaderRequiredSubgroupSizeCreateInfoEXT structure is included
+in the pname:pNext chain of slink:VkShaderCreateInfoEXT, it specifies that
+the shader being compiled has a required subgroup size.
+endif::VK_EXT_shader_object[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02760]]
+    pname:requiredSubgroupSize must: be a power-of-two integer
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02761]]
+    pname:requiredSubgroupSize must: be greater or equal to
+    <<limits-minSubgroupSize, pname:minSubgroupSize>>
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02762]]
+    pname:requiredSubgroupSize must: be less than or equal to
+    <<limits-maxSubgroupSize, pname:maxSubgroupSize>>
+****
+
+include::{generated}/validity/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+[open,refpage='VkSubpassShadingPipelineCreateInfoHUAWEI',desc='Structure specifying parameters of a newly created subpass shading pipeline',type='structs']
+--
+A subpass shading pipeline is a compute pipeline which must: be called only
+in a subpass of a render pass with work dimensions specified by render area
+size.
+The subpass shading pipeline shader is a compute shader allowed to access
+input attachments specified in the calling subpass.
+To create a subpass shading pipeline, call flink:vkCreateComputePipelines
+with slink:VkSubpassShadingPipelineCreateInfoHUAWEI in the pname:pNext chain
+of slink:VkComputePipelineCreateInfo.
+
+The sname:VkSubpassShadingPipelineCreateInfoHUAWEI structure is defined as:
+
+include::{generated}/api/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:renderPass is a handle to a render pass object describing the
+    environment in which the pipeline will be used.
+    The pipeline must: only be used with a render pass instance compatible
+    with the one provided.
+    See <<renderpass-compatibility,Render Pass Compatibility>> for more
+    information.
+  * pname:subpass is the index of the subpass in the render pass where this
+    pipeline will be used.
+
+.Valid Usage
+****
+  * [[VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-subpass-04946]]
+    pname:subpass must: be created with
+    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI bind point
+****
+
+include::{generated}/validity/structs/VkSubpassShadingPipelineCreateInfoHUAWEI.adoc[]
+--
+
+[open,refpage='vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI',desc='Query maximum supported subpass shading workgroup size for a give render pass',type='protos']
+--
+A subpass shading pipeline's workgroup size is a 2D vector with number of
+power-of-two in width and height.
+The maximum number of width and height is implementation-dependent, and may:
+vary for different formats and sample counts of attachments in a render
+pass.
+
+To query the maximum workgroup size, call:
+
+include::{generated}/api/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.adoc[]
+
+  * pname:device is a handle to a local device object that was used to
+    create the given render pass.
+  * pname:renderPass is a handle to a render pass object describing the
+    environment in which the pipeline will be used.
+    The pipeline must: only be used with a render pass instance compatible
+    with the one provided.
+    See <<renderpass-compatibility,Render Pass Compatibility>> for more
+    information.
+  * pname:pMaxWorkgroupSize is a pointer to a slink:VkExtent2D structure.
+
+include::{generated}/validity/protos/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_EXT_pipeline_robustness[]
+[open,refpage='VkPipelineRobustnessCreateInfoEXT',desc='Structure controlling the robustness of a newly created pipeline shader stage',type='structs']
+--
+The sname:VkPipelineRobustnessCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkPipelineRobustnessCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:storageBuffers sets the behaviour of out of bounds accesses made
+    to resources bound as:
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+  * pname:uniformBuffers describes the behaviour of out of bounds accesses
+    made to resources bound as:
+  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+  ** ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  ** ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
+endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
+  * pname:vertexInputs describes the behaviour of out of bounds accesses
+    made to vertex input attributes
+  * pname:images describes the behaviour of out of bounds accesses made to
+    resources bound as:
+  ** ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
+  ** ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
+
+ifdef::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+Resources bound as ename:VK_DESCRIPTOR_TYPE_MUTABLE_EXT will have the
+robustness behavior that covers its active descriptor type.
+endif::VK_EXT_mutable_descriptor_type,VK_VALVE_mutable_descriptor_type[]
+
+The scope of the effect of sname:VkPipelineRobustnessCreateInfoEXT depends
+on which structure's pname:pNext chain it is included in.
+
+  * sname:VkGraphicsPipelineCreateInfo,
+ifdef::VK_KHR_ray_tracing_pipeline[sname:VkRayTracingPipelineCreateInfoKHR,]
+    sname:VkComputePipelineCreateInfo: +
+    The robustness behavior described by
+    sname:VkPipelineRobustnessCreateInfoEXT applies to all accesses through
+    this pipeline
+  * sname:VkPipelineShaderStageCreateInfo: +
+    The robustness behavior described by
+    sname:VkPipelineRobustnessCreateInfoEXT applies to all accesses
+    emanating from the shader code of this shader stage
+
+If sname:VkPipelineRobustnessCreateInfoEXT is specified for both a pipeline
+and a pipeline stage, the sname:VkPipelineRobustnessCreateInfoEXT specified
+for the pipeline stage will take precedence.
+
+ifdef::VK_KHR_pipeline_library[]
+When sname:VkPipelineRobustnessCreateInfoEXT is specified for a pipeline, it
+only affects the subset of the pipeline that is specified by the create
+info, as opposed to subsets linked from pipeline libraries.
+ifdef::VK_EXT_graphics_pipeline_library[]
+For slink:VkGraphicsPipelineCreateInfo, that subset is specified by
+slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags.
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For slink:VkRayTracingPipelineCreateInfoKHR, that subset is specified by the
+specific stages in slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages.
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_KHR_pipeline_library[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06926]]
+    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
+    is not enabled, pname:storageBuffers must: be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06927]]
+    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
+    is not enabled, pname:uniformBuffers must: be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06928]]
+    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
+    is not enabled, pname:vertexInputs must: be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-pipelineRobustness-06929]]
+    If the <<features-pipelineRobustness, pname:pipelineRobustness>> feature
+    is not enabled, pname:images must: be
+    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustImageAccess-06930]]
+    If the <<features-robustImageAccess, pname:robustImageAccess>> feature
+    is not supported, pname:images must: not be
+    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06931]]
+    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
+    feature is not supported, pname:storageBuffers must: not be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06932]]
+    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
+    feature is not supported, pname:uniformBuffers must: not be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustBufferAccess2-06933]]
+    If the <<features-robustBufferAccess2, pname:robustBufferAccess2>>
+    feature is not supported, pname:vertexInputs must: not be
+    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+  * [[VUID-VkPipelineRobustnessCreateInfoEXT-robustImageAccess2-06934]]
+    If the <<features-robustImageAccess2, pname:robustImageAccess2>> feature
+    is not supported, pname:images must: not be
+    ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT
+****
+
+include::{generated}/validity/structs/VkPipelineRobustnessCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkPipelineRobustnessBufferBehaviorEXT',desc='Enum controlling the robustness of buffer accesses in a pipeline stage',type='enums']
+--
+Possible values of the pname:storageBuffers, pname:uniformBuffers, and
+pname:vertexInputs members of slink:VkPipelineRobustnessCreateInfoEXT are:
+
+include::{generated}/api/enums/VkPipelineRobustnessBufferBehaviorEXT.adoc[]
+
+  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT
+    specifies that this pipeline stage follows the behavior of robustness
+    features that are enabled on the device that created this pipeline
+  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT specifies that
+    buffer accesses by this pipeline stage to the relevant resource types
+    must: not be out of bounds
+  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT
+    specifies that out of bounds accesses by this pipeline stage to the
+    relevant resource types behave as if the <<features-robustBufferAccess,
+    pname:robustBufferAccess>> feature is enabled
+  * ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
+    specifies that out of bounds accesses by this pipeline stage to the
+    relevant resource types behave as if the <<features-robustBufferAccess2,
+    pname:robustBufferAccess2>> feature is enabled
+--
+
+[open,refpage='VkPipelineRobustnessImageBehaviorEXT',desc='Enum controlling the robustness of image accesses in a pipeline stage',type='enums']
+--
+Possible values of the pname:images member of
+slink:VkPipelineRobustnessCreateInfoEXT are:
+
+include::{generated}/api/enums/VkPipelineRobustnessImageBehaviorEXT.adoc[]
+
+  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT specifies
+    that this pipeline stage follows the behavior of robustness features
+    that are enabled on the device that created this pipeline
+  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT specifies that
+    image accesses by this pipeline stage to the relevant resource types
+    must: not be out of bounds
+  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT
+    specifies that out of bounds accesses by this pipeline stage to images
+    behave as if the <<features-robustImageAccess, pname:robustImageAccess>>
+    feature is enabled
+  * ename:VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT
+    specifies that out of bounds accesses by this pipeline stage to images
+    behave as if the <<features-robustImageAccess2,
+    pname:robustImageAccess2>> feature is enabled
+--
+endif::VK_EXT_pipeline_robustness[]
+
+ifdef::VK_EXT_shader_module_identifier[]
+[open,refpage='VkPipelineShaderStageModuleIdentifierCreateInfoEXT',desc='Structure specifying an identifier for a shader module',type='structs']
+--
+An identifier can: be provided instead of shader code in an attempt to
+compile pipelines without providing complete SPIR-V to the implementation.
+
+The sname:VkPipelineShaderStageModuleIdentifierCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:identifierSize is the size, in bytes, of the buffer pointed to by
+    pname:pIdentifier.
+  * pname:pIdentifier is a pointer to a buffer of opaque data specifying an
+    identifier.
+
+Any identifier can: be used.
+If the pipeline being created with identifier requires compilation to
+complete the pipeline creation call, pipeline compilation must: fail as
+defined by ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT.
+
+pname:pIdentifier and pname:identifierSize can: be obtained from an
+slink:VkShaderModuleIdentifierEXT queried earlier.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06850]]
+    If this structure is included in a pname:pNext chain and
+    pname:identifierSize is not equal to 0, the
+    <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
+    feature must: be enabled
+  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06851]]
+    If this struct is included in a pname:pNext chain of
+    slink:VkPipelineShaderStageCreateInfo and pname:identifierSize is not
+    equal to 0, the pipeline must: be created with the
+    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag set
+  * [[VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-identifierSize-06852]]
+    pname:identifierSize must: be less-or-equal to
+    ename:VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT
+****
+
+include::{generated}/validity/structs/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_shader_module_identifier[]
+
+ifdef::VK_NV_device_generated_commands_compute[]
+If a compute pipeline is going to be used in <<device-generated-commands,
+Device-Generated Commands>> by specifying its pipeline token with
+slink:VkBindPipelineIndirectCommandNV, then that pipeline's associated
+metadata must: be saved at a specified buffer device address for later use
+in indirect command generation.
+The buffer device address must: be specified at the time of compute pipeline
+creation with slink:VkComputePipelineIndirectBufferInfoNV structure in the
+pname:pNext chain of slink:VkComputePipelineCreateInfo.
+
+[open,refpage='VkComputePipelineIndirectBufferInfoNV',desc='Structure describing the device address where pipeline\'s metadata will be saved',type='structs']
+--
+The sname:VkComputePipelineIndirectBufferInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkComputePipelineIndirectBufferInfoNV.adoc[]
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceAddress is the address where the pipeline's metadata will be
+    stored.
+  * pname:size is the size of pipeline's metadata that was queried using
+    flink:vkGetPipelineIndirectMemoryRequirementsNV.
+  * pname:pipelineDeviceAddressCaptureReplay is the device address where
+    pipeline's metadata was originally saved and can now be used to
+    re-populate pname:deviceAddress for replay.
+
+If pname:pipelineDeviceAddressCaptureReplay is zero, no specific address is
+requested.
+If pname:pipelineDeviceAddressCaptureReplay is not zero, then it must: be an
+address retrieved from an identically created pipeline on the same
+implementation.
+The pipeline metadata must: also be placed on an identically created buffer
+and at the same offset using the flink:vkCmdUpdatePipelineIndirectBufferNV
+command.
+
+.Valid Usage
+****
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceGeneratedComputePipelines-09009]]
+    The <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-flags-09010]]
+    The pipeline creation flags in
+    slink:VkComputePipelineCreateInfo::pname:flags must: include
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09011]]
+    pname:deviceAddress must: be aligned to the
+    slink:VkMemoryRequirements2::pname:alignment, as returned by
+    flink:vkGetPipelineIndirectMemoryRequirementsNV
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09012]]
+    pname:deviceAddress must: have been allocated from a buffer that was
+    created with usage ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT and
+    ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-size-09013]]
+    pname:size must: be greater than or equal to the
+    slink:VkMemoryRequirements2::pname:size, as returned by
+    flink:vkGetPipelineIndirectMemoryRequirementsNV
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09014]]
+    If pname:pipelineDeviceAddressCaptureReplay is non-zero then the
+    <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputeCaptureReplay>>
+    feature must: be enabled
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09015]]
+    If pname:pipelineDeviceAddressCaptureReplay is non-zero then that
+    address must: have been allocated with flag
+    ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT set
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09016]]
+    If pname:pipelineDeviceAddressCaptureReplay is non-zero, the
+    pname:pipeline must: have been recreated for replay
+  * [[VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09017]]
+    pname:pipelineDeviceAddressCaptureReplay must: satisfy the
+    pname:alignment and pname:size requirements similar to
+    pname:deviceAddress
+****
+
+include::{generated}/validity/structs/VkComputePipelineIndirectBufferInfoNV.adoc[]
+--
+
+[open,refpage='vkCmdUpdatePipelineIndirectBufferNV',desc='Update the indirect compute pipeline\'s metadata',type='protos']
+--
+To save a compute pipeline's metadata at a device address call:
+
+include::{generated}/api/protos/vkCmdUpdatePipelineIndirectBufferNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    the type of pipeline whose metadata will be saved.
+  * pname:pipeline is the pipeline whose metadata will be saved.
+
+fname:vkCmdUpdatePipelineIndirectBufferNV is only allowed outside of a
+render pass.
+This command is treated as a "`transfer`" operation for the purposes of
+synchronization barriers.
+The writes to the address must: be synchronized using stages
+ename:VK_PIPELINE_STAGE_2_COPY_BIT and
+ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV and with access masks
+ename:VK_ACCESS_MEMORY_WRITE_BIT and
+ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV respectively before using the
+results in preprocessing.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipelineBindPoint-09018]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_COMPUTE
+  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09019]]
+    pname:pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV flag set
+  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09020]]
+    pname:pipeline must: have been created with
+    slink:VkComputePipelineIndirectBufferInfoNV structure specifying a valid
+    address where its metadata will be saved
+  * [[VUID-vkCmdUpdatePipelineIndirectBufferNV-deviceGeneratedComputePipelines-09021]]
+    The <<features-deviceGeneratedComputePipelines,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::pname:deviceGeneratedComputePipelines>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdUpdatePipelineIndirectBufferNV.adoc[]
+--
+
+endif::VK_NV_device_generated_commands_compute[]
+
+[[pipelines-graphics]]
+== Graphics Pipelines
+
+Graphics pipelines consist of multiple shader stages, multiple
+fixed-function pipeline stages, and a pipeline layout.
+
+[open,refpage='vkCreateGraphicsPipelines',desc='Create graphics pipelines',type='protos']
+--
+:refpage: vkCreateGraphicsPipelines
+:objectnameplural: graphics pipelines
+:objectnamecamelcase: graphicsPipeline
+:objectcount: pname:createInfoCount
+
+To create graphics pipelines, call:
+
+include::{generated}/api/protos/vkCreateGraphicsPipelines.adoc[]
+
+  * pname:device is the logical device that creates the graphics pipelines.
+ifndef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
+    pipeline caching is disabled; or the handle of a valid
+    <<pipelines-cache,pipeline cache>> object, in which case use of that
+    cache is enabled for the duration of the command.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
+    cache>> object.
+endif::VKSC_VERSION_1_0[]
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pPipelines arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkGraphicsPipelineCreateInfo structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelines is a pointer to an array of slink:VkPipeline handles in
+    which the resulting graphics pipeline objects are returned.
+
+The slink:VkGraphicsPipelineCreateInfo structure includes an array of
+slink:VkPipelineShaderStageCreateInfo structures for each of the desired
+active shader stages, as well as creation information for all relevant
+fixed-function stages, and a pipeline layout.
+
+ifdef::VKSC_VERSION_1_0[]
+If a pipeline creation fails due to:
+
+  * The identified pipeline not being present in pname:pipelineCache
+  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
+    structure
+
+the operation will continue as specified in <<pipelines-multiple, Multiple
+Pipeline Creation>> and the command will return
+ename:VK_ERROR_NO_PIPELINE_MATCH.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkCreateGraphicsPipelines returns ename:VK_ERROR_NO_PIPELINE_MATCH
+    if the slink:VkGraphicsPipelineCreateInfo::pname:pNext chain does not
+    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateGraphicsPipelines-flags-00720]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+    pname:basePipelineIndex member of that same element is not `-1`,
+    pname:basePipelineIndex must: be less than the index into
+    pname:pCreateInfos that corresponds to that element
+  * [[VUID-vkCreateGraphicsPipelines-flags-00721]]
+    If the pname:flags member of any element of pname:pCreateInfos contains
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+    must: have been created with the
+    ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-vkCreateGraphicsPipelines-pipelineCache-02876]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access
+    to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * flink:vkCreateGraphicsPipelines::pname:pipelineCache must: not be
+    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+[NOTE]
+.Note
+====
+An implicit cache may be provided by the implementation or a layer.
+For this reason, it is still valid to set
+ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT on
+pname:flags for any element of pname:pCreateInfos while passing
+dlink:VK_NULL_HANDLE for pname:pipelineCache.
+====
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+include::{generated}/validity/protos/vkCreateGraphicsPipelines.adoc[]
+--
+
+[open,refpage='VkGraphicsPipelineCreateInfo',desc='Structure specifying parameters of a newly created graphics pipeline',type='structs']
+--
+:refpage: VkGraphicsPipelineCreateInfo
+
+The sname:VkGraphicsPipelineCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkGraphicsPipelineCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
+    how the pipeline will be generated.
+  * pname:stageCount is the number of entries in the pname:pStages array.
+  * pname:pStages is a pointer to an array of pname:stageCount
+    slink:VkPipelineShaderStageCreateInfo structures describing the set of
+    the shader stages to be included in the graphics pipeline.
+  * pname:pVertexInputState is a pointer to a
+    slink:VkPipelineVertexInputStateCreateInfo structure.
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    It is ignored if the pipeline includes a mesh shader stage.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    It can: be `NULL` if the pipeline is created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state set.
+endif::VK_EXT_vertex_input_dynamic_state[]
+  * pname:pInputAssemblyState is a pointer to a
+    slink:VkPipelineInputAssemblyStateCreateInfo structure which determines
+    input assembly behavior for vertex shading, as described in <<drawing,
+    Drawing Commands>>.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with both
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, and
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic states set and
+    <<limits-dynamicPrimitiveTopologyUnrestricted,
+    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_TRUE.
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    It is ignored if the pipeline includes a mesh shader stage.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * pname:pTessellationState is a pointer to a
+    slink:VkPipelineTessellationStateCreateInfo structure defining
+    tessellation state used by tessellation shaders.
+ifdef::VK_EXT_extended_dynamic_state2[]
+    It can: be `NULL` if the pipeline is created with the
+    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state set.
+endif::VK_EXT_extended_dynamic_state2[]
+  * pname:pViewportState is a pointer to a
+    slink:VkPipelineViewportStateCreateInfo structure defining viewport
+    state used when rasterization is enabled.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with both
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic states set.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pRasterizationState is a pointer to a
+    slink:VkPipelineRasterizationStateCreateInfo structure defining
+    rasterization state.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with all of
+    ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE,
+    ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT,
+    ename:VK_DYNAMIC_STATE_CULL_MODE, ename:VK_DYNAMIC_STATE_FRONT_FACE,
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and ename:VK_DYNAMIC_STATE_LINE_WIDTH
+    dynamic states set.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pMultisampleState is a pointer to a
+    slink:VkPipelineMultisampleStateCreateInfo structure defining
+    multisample state used when rasterization is enabled.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with all of
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, and
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states set,
+    and either <<features-alphaToOne,alphaToOne>> is disabled on the device
+    or ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is set, in which case
+    slink:VkPipelineMultisampleStateCreateInfo::pname:sampleShadingEnable is
+    assumed to be ename:VK_FALSE.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pDepthStencilState is a pointer to a
+    slink:VkPipelineDepthStencilStateCreateInfo structure defining
+    depth/stencil state used when rasterization is enabled for depth or
+    stencil attachments accessed during rendering.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with all of
+    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_OP, and
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states set.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pColorBlendState is a pointer to a
+    slink:VkPipelineColorBlendStateCreateInfo structure defining color blend
+    state used when rasterization is enabled for any color attachments
+    accessed during rendering.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is enabled, it
+    can: be `NULL` if the pipeline is created with all of
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and
+    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states set.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:pDynamicState is a pointer to a
+    slink:VkPipelineDynamicStateCreateInfo structure defining which
+    properties of the pipeline state object are dynamic and can: be changed
+    independently of the pipeline state.
+    This can: be `NULL`, which means no state in the pipeline is considered
+    dynamic.
+  * pname:layout is the description of binding locations used by both the
+    pipeline and descriptor sets used with the pipeline.
+  * pname:renderPass is a handle to a render pass object describing the
+    environment in which the pipeline will be used.
+    The pipeline must: only be used with a render pass instance compatible
+    with the one provided.
+    See <<renderpass-compatibility,Render Pass Compatibility>> for more
+    information.
+  * pname:subpass is the index of the subpass in the render pass where this
+    pipeline will be used.
+  * pname:basePipelineHandle is a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * pname:basePipelineIndex is an index into the pname:pCreateInfos
+    parameter to use as a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+The parameters pname:basePipelineHandle and pname:basePipelineIndex are
+described in more detail in <<pipelines-pipeline-derivatives,Pipeline
+Derivatives>>.
+
+
+ifdef::VK_NV_glsl_shader[]
+If any shader stage fails to compile,
+ifdef::VK_EXT_debug_report[]
+the compile log will be reported back to the application, and
+endif::VK_EXT_debug_report[]
+ename:VK_ERROR_INVALID_SHADER_NV will be generated.
+endif::VK_NV_glsl_shader[]
+
+ifdef::VK_EXT_extended_dynamic_state3[]
+[NOTE]
+.Note
+====
+With `apiext:VK_EXT_extended_dynamic_state3`, it is possible that many of
+the sname:VkGraphicsPipelineCreateInfo members above can: be `NULL` because
+all their state is dynamic and therefore ignored.
+This is optional so the application can: still use a valid pointer if it
+needs to set the pname:pNext or pname:flags fields to specify state for
+other extensions.
+====
+endif::VK_EXT_extended_dynamic_state3[]
+
+[[pipelines-graphics-subsets]]
+The state required for a graphics pipeline is divided into
+<<pipelines-graphics-subsets-vertex-input, vertex input state>>,
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+state>>, <<pipelines-graphics-subsets-fragment-shader,fragment shader
+state>>, and <<pipelines-graphics-subsets-fragment-output,fragment output
+state>>.
+
+[[pipelines-graphics-subsets-vertex-input]]
+.Vertex Input State
+Vertex input state is defined by:
+
+  * slink:VkPipelineVertexInputStateCreateInfo
+  * slink:VkPipelineInputAssemblyStateCreateInfo
+
+ifndef::VK_EXT_mesh_shader[]
+This state must: be specified to create a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+If
+ifdef::VK_EXT_graphics_pipeline_library[]
+this pipeline specifies
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
+either directly or by including it as a pipeline library and its
+endif::VK_EXT_graphics_pipeline_library[]
+pname:pStages includes a vertex shader, this state must: be specified to
+create a <<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+If a pipeline includes
+ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT in
+slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
+or as a default, and either the conditions requiring this state for a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
+or this pipeline does not specify
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
+any way, that pipeline must: specify this state directly.
+endif::VK_EXT_graphics_pipeline_library[]
+
+
+[[pipelines-graphics-subsets-pre-rasterization]]
+.Pre-Rasterization Shader State
+Pre-rasterization shader state is defined by:
+
+  * slink:VkPipelineShaderStageCreateInfo entries for:
+  ** Vertex shaders
+  ** Tessellation control shaders
+  ** Tessellation evaluation shaders
+  ** Geometry shaders
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  ** Task shaders
+  ** Mesh shaders
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * Within the slink:VkPipelineLayout, all descriptor sets with
+    pre-rasterization shader bindings if
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was specified.
+  ** If ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was not
+     specified, the full pipeline layout must be specified.
+endif::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_graphics_pipeline_library[]
+  * Within the slink:VkPipelineLayout, the full pipeline layout must be
+    specified.
+endif::VK_EXT_graphics_pipeline_library[]
+  * slink:VkPipelineViewportStateCreateInfo
+  * slink:VkPipelineRasterizationStateCreateInfo
+  * slink:VkPipelineTessellationStateCreateInfo
+  * slink:VkRenderPass and pname:subpass parameter
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * The pname:viewMask parameter of slink:VkPipelineRenderingCreateInfo
+    (formats are ignored)
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_discard_rectangles[]
+  * slink:VkPipelineDiscardRectangleStateCreateInfoEXT
+endif::VK_EXT_discard_rectangles[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
+endif::VK_KHR_fragment_shading_rate[]
+
+This state must: be specified to create a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+If either the pname:pNext chain includes a
+slink:VkGraphicsPipelineLibraryCreateInfoEXT structure with
+ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT
+included in pname:flags, or it is not specified and would default to include
+that value, this state must: be specified in the pipeline.
+endif::VK_EXT_graphics_pipeline_library[]
+
+
+[[pipelines-graphics-subsets-fragment-shader]]
+.Fragment Shader State
+Fragment shader state is defined by:
+
+  * A slink:VkPipelineShaderStageCreateInfo entry for the fragment shader
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * Within the slink:VkPipelineLayout, all descriptor sets with fragment
+    shader bindings if
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was specified.
+  ** If ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT was not
+     specified, the full pipeline layout must be specified.
+endif::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_graphics_pipeline_library[]
+  * Within the slink:VkPipelineLayout, the full pipeline layout must be
+    specified.
+endif::VK_EXT_graphics_pipeline_library[]
+  * slink:VkPipelineMultisampleStateCreateInfo
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    if <<primsrast-sampleshading, sample shading>> is enabled or
+    pname:renderpass is not dlink:VK_NULL_HANDLE
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * slink:VkPipelineDepthStencilStateCreateInfo
+  * slink:VkRenderPass and pname:subpass parameter
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * The pname:viewMask parameter of slink:VkPipelineRenderingCreateInfo
+    (formats are ignored)
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
+ifdef::VK_NV_fragment_shading_rate_enums[]
+  * slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
+endif::VK_NV_fragment_shading_rate_enums[]
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_representative_fragment_test[]
+  * slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV
+endif::VK_NV_representative_fragment_test[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * Inclusion/omission of the
+    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    flag
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * Inclusion/omission of the
+    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+    flag
+endif::VK_EXT_fragment_density_map[]
+
+If
+ifdef::VK_EXT_graphics_pipeline_library[]
+a pipeline specifies
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
+either directly or by including it as a pipeline library and
+endif::VK_EXT_graphics_pipeline_library[]
+pname:rasterizerDiscardEnable is set to ename:VK_FALSE
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+or ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE is used,
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+endif::VK_EXT_graphics_pipeline_library[]
+this state must: be specified to create a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+If a pipeline includes
+ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT in
+slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
+or as a default, and either the conditions requiring this state for a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
+or this pipeline does not specify
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
+any way, that pipeline must: specify this state directly.
+endif::VK_EXT_graphics_pipeline_library[]
+
+
+[[pipelines-graphics-subsets-fragment-output]]
+.Fragment Output State
+Fragment output state is defined by:
+
+  * slink:VkPipelineColorBlendStateCreateInfo
+  * slink:VkRenderPass and pname:subpass parameter
+  * slink:VkPipelineMultisampleStateCreateInfo
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * slink:VkPipelineRenderingCreateInfo
+ifdef::VK_AMD_mixed_attachment_samples[]
+  * slink:VkAttachmentSampleCountInfoAMD
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * slink:VkAttachmentSampleCountInfoNV
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * slink:VkExternalFormatANDROID
+endif::VK_ANDROID_external_format_resolve[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * Inclusion/omission of the
+    ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT and
+    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    flags
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+If
+ifdef::VK_EXT_graphics_pipeline_library[]
+a pipeline specifies
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>>
+either directly or by including it as a pipeline library and
+endif::VK_EXT_graphics_pipeline_library[]
+pname:rasterizerDiscardEnable is set to ename:VK_FALSE
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+or ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE is used,
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+endif::VK_EXT_graphics_pipeline_library[]
+this state must: be specified to create a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>>.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+If a pipeline includes
+ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT in
+slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags either explicitly
+or as a default, and either the conditions requiring this state for a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>> are met
+or this pipeline does not specify
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization state>> in
+any way, that pipeline must: specify this state directly.
+endif::VK_EXT_graphics_pipeline_library[]
+
+
+[[pipelines-graphics-subsets-dynamic-state]]
+.Dynamic State
+Dynamic state values set via pname:pDynamicState must: be ignored if the
+state they correspond to is not otherwise statically set by one of the state
+subsets used to create the pipeline.
+ifdef::VK_EXT_graphics_pipeline_library[]
+Additionally, setting dynamic state values must: not modify whether state in
+a linked library is static or dynamic; this is set and unchangeable when the
+library is created.
+endif::VK_EXT_graphics_pipeline_library[]
+For example, if a pipeline only included
+<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+state>>, then any dynamic state value corresponding to depth or stencil
+testing has no effect.
+ifdef::VK_EXT_graphics_pipeline_library[]
+Any linked library that has dynamic state enabled that same dynamic state
+must: also be enabled in all the other linked libraries to which that
+dynamic state applies.
+endif::VK_EXT_graphics_pipeline_library[]
+
+[[pipelines-graphics-subsets-complete]]
+.Complete Graphics Pipelines
+
+A complete graphics pipeline always includes
+<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+state>>, with other subsets included depending on that state as specified in
+the above sections.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+.Graphics Pipeline Library Layouts
+
+If different subsets are linked together with pipeline layouts created with
+ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, the final
+effective pipeline layout is effectively the union of the linked pipeline
+layouts.
+When binding descriptor sets for this pipeline, the pipeline layout used
+must: be compatible with this union.
+This pipeline layout can: be overridden when linking with
+ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT by providing a
+slink:VkPipelineLayout that is <<descriptorsets-compatibility,compatible>>
+with this union other than
+ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, or when linking
+without ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT by providing
+a slink:VkPipelineLayout that is fully
+<<descriptorsets-compatibility,compatible>> with this union.
+endif::VK_EXT_graphics_pipeline_library[]
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
+from that structure is used instead of pname:flags from this structure.
+endif::VK_KHR_maintenance5[]
+
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, the pipeline compilation process occurs
+<<pipelines-offline-compilation,offline>> and the pname:pStages are not
+needed at runtime and may: be omitted.
+If omitted, pname:stageCount must: be set to `0` and pname:pStages must: be
+`NULL`.
+If provided, the values must: match the values specified to the offline
+compiler.
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+:pipelineType: graphics
+include::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-02096]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> the pname:stage member of one element
+    of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    or ename:VK_SHADER_STAGE_MESH_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02095]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> the geometric shader stages provided in
+    pname:pStages must: be either from the mesh shading pipeline
+    (pname:stage is ename:VK_SHADER_STAGE_TASK_BIT_EXT or
+    ename:VK_SHADER_STAGE_MESH_BIT_EXT) or from the primitive shading
+    pipeline (pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT)
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader+VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-TaskNV-07063]]
+    The shader stages for ename:VK_SHADER_STAGE_TASK_BIT_EXT or
+    ename:VK_SHADER_STAGE_MESH_BIT_EXT must: use either the code:TaskNV and
+    code:MeshNV {ExecutionModel} or the code:TaskEXT and code:MeshEXT
+    {ExecutionModel}, but must: not use both
+endif::VK_NV_mesh_shader+VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes a
+    tessellation control shader stage, it must: include a tessellation
+    evaluation shader stage
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00730]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes a
+    tessellation evaluation shader stage, it must: include a tessellation
+    control shader stage
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-09022]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes a
+    tessellation control shader stage,
+ifdef::VK_EXT_extended_dynamic_state3[]
+    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled
+    or the ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state is
+    not set,
+endif::VK_EXT_extended_dynamic_state3[]
+    pname:pTessellationState must: be a valid pointer to a valid
+    slink:VkPipelineTessellationStateCreateInfo structure
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pTessellationState-09023]]
+    If pname:pTessellationState is not `NULL` it must: be a pointer to a
+    valid slink:VkPipelineTessellationStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes tessellation
+    shader stages, the shader code of at least one stage must: contain an
+    code:OpExecutionMode instruction specifying the type of subdivision in
+    the pipeline
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00733]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes tessellation
+    shader stages, and the shader code of both stages contain an
+    code:OpExecutionMode instruction specifying the type of subdivision in
+    the pipeline, they must: both specify the same subdivision mode
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00734]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes tessellation
+    shader stages, the shader code of at least one stage must: contain an
+    code:OpExecutionMode instruction specifying the output patch size in the
+    pipeline
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00735]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes tessellation
+    shader stages, and the shader code of both contain an
+    code:OpExecutionMode instruction specifying the out patch size in the
+    pipeline, they must: both specify the same patch size
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08888]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and <<pipelines-graphics-subsets-vertex-input, vertex input
+    state>> and pname:pStages includes tessellation shader stages,
+ifdef::VK_EXT_extended_dynamic_state3[]
+    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
+    not enabled or
+    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
+    is ename:VK_FALSE,
+endif::VK_EXT_extended_dynamic_state3[]
+    the pname:topology member of pname:pInputAssembly must: be
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+  * [[VUID-VkGraphicsPipelineCreateInfo-topology-08889]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and <<pipelines-graphics-subsets-vertex-input, vertex input
+    state>> and the pname:topology member of pname:pInputAssembly is
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
+ifdef::VK_EXT_extended_dynamic_state3[]
+    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
+    not enabled or
+    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
+    is ename:VK_FALSE,
+endif::VK_EXT_extended_dynamic_state3[]
+    then pname:pStages must: include tessellation shader stages
+  * [[VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07723]]
+    If the pipeline is being created with a code:TessellationEvaluation
+    {ExecutionModel}, no code:Geometry {ExecutionModel}, uses the
+    code:PointMode {ExecutionMode}, and
+    <<features-shaderTessellationAndGeometryPointSize,
+    pname:shaderTessellationAndGeometryPointSize>> is enabled, a
+    code:PointSize decorated variable must: be written to
+ifdef::VK_KHR_maintenance5[]
+    if <<features-maintenance5, pname:maintenance5>> is not enabled
+endif::VK_KHR_maintenance5[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-topology-08773]]
+    If the pipeline is being created with a code:Vertex {ExecutionModel} and
+    no code:TessellationEvaluation or code:Geometry {ExecutionModel}, and
+    the pname:topology member of pname:pInputAssembly is
+    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+ifdef::VK_EXT_extended_dynamic_state3[]
+    and either ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is
+    not enabled or
+    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
+    is ename:VK_FALSE,
+endif::VK_EXT_extended_dynamic_state3[]
+    a code:PointSize decorated variable must: be written to
+ifdef::VK_KHR_maintenance5[]
+    if <<features-maintenance5, pname:maintenance5>> is not enabled
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-maintenance5-08775]]
+    If <<features-maintenance5, pname:maintenance5>> is enabled and a
+    code:PointSize decorated variable is written to, all execution paths
+    must: write to a code:PointSize decorated variable
+endif::VK_KHR_maintenance5[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07724]]
+    If the pipeline is being created with a code:TessellationEvaluation
+    {ExecutionModel}, no code:Geometry {ExecutionModel}, uses the
+    code:PointMode {ExecutionMode}, and
+    <<features-shaderTessellationAndGeometryPointSize,
+    pname:shaderTessellationAndGeometryPointSize>> is not enabled, a
+    code:PointSize decorated variable must: not be written to
+  * [[VUID-VkGraphicsPipelineCreateInfo-shaderTessellationAndGeometryPointSize-08776]]
+    If the pipeline is being created with a code:Geometry {ExecutionModel},
+    uses the code:OutputPoints {ExecutionMode}, and
+    <<features-shaderTessellationAndGeometryPointSize,
+    pname:shaderTessellationAndGeometryPointSize>> is enabled, a
+    code:PointSize decorated variable must: be written to for every vertex
+    emitted
+ifdef::VK_KHR_maintenance5[]
+    if <<features-maintenance5, pname:maintenance5>> is not enabled
+endif::VK_KHR_maintenance5[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-Geometry-07726]]
+    If the pipeline is being created with a code:Geometry {ExecutionModel},
+    uses the code:OutputPoints {ExecutionMode}, and
+    <<features-shaderTessellationAndGeometryPointSize,
+    pname:shaderTessellationAndGeometryPointSize>> is not enabled, a
+    code:PointSize decorated variable must: not be written to
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00738]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes a geometry
+    shader stage, and does not include any tessellation shader stages, its
+    shader code must: contain an code:OpExecutionMode instruction specifying
+    an input primitive type that is <<shaders-geometry-execution,
+    compatible>> with the primitive topology specified in
+    pname:pInputAssembly
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00739]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:pStages includes a geometry
+    shader stage, and also includes tessellation shader stages, its shader
+    code must: contain an code:OpExecutionMode instruction specifying an
+    input primitive type that is <<shaders-geometry-execution, compatible>>
+    with the primitive topology that is output by the tessellation stages
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00740]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    it includes both a fragment shader and a geometry shader, and the
+    fragment shader code reads from an input variable that is decorated with
+    code:PrimitiveId, then the geometry shader code must: write to a
+    matching output variable, decorated with code:PrimitiveId, in all
+    execution paths
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, it includes a mesh shader and the
+    fragment shader code reads from an input variable that is decorated with
+    code:PrimitiveId, then the mesh shader code must: write to a matching
+    output variable, decorated with code:PrimitiveId, in all execution paths
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06038]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
+    being created with <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> the fragment shader must: not read from any
+    input attachment that is defined as ename:VK_ATTACHMENT_UNUSED in
+    pname:subpass
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00742]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and multiple pre-rasterization shader
+    stages are included in pname:pStages, the shader code for the entry
+    points identified by those pname:pStages and the rest of the state
+    identified by this structure must: adhere to the pipeline linking rules
+    described in the <<interfaces,Shader Interfaces>> chapter
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-04889]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    the fragment shader and last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>> and any relevant state must: adhere to the pipeline linking
+    rules described in the <<interfaces,Shader Interfaces>> chapter
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06041]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
+    being created with <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, then for each color attachment in the
+    subpass, if the <<potential-format-features,potential format features>>
+    of the format of the corresponding attachment description do not contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
+    pname:blendEnable member of the corresponding element of the
+    pname:pAttachments member of pname:pColorBlendState must: be
+    ename:VK_FALSE
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07609]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
+    being created with <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and the pname:pColorBlendState
+    pointer is not `NULL`, and the subpass uses color attachments, the
+    pname:attachmentCount member of pname:pColorBlendState must: be equal to
+    the pname:colorAttachmentCount used to create pname:subpass
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and pname:pViewportState->pViewports
+    is not dynamic, then pname:pViewportState->pViewports must: be a valid
+    pointer to an array of pname:pViewportState->viewportCount valid
+    sname:VkViewport structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and pname:pViewportState->pScissors is
+    not dynamic, then pname:pViewportState->pScissors must: be a valid
+    pointer to an array of pname:pViewportState->scissorCount sname:VkRect2D
+    structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the <<features-wideLines,
+    pname:wideLines>> feature is not enabled, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of
+    pname:pRasterizationState must: be `1.0`
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the pname:rasterizerDiscardEnable
+    member of pname:pRasterizationState is ename:VK_FALSE,
+    pname:pViewportState must: be a valid pointer to a valid
+    slink:VkPipelineViewportStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-09024]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state is
+    enabled or the pname:rasterizerDiscardEnable member of
+    pname:pRasterizationState is ename:VK_FALSE, and either the
+    `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled, or
+    either the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT or
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic states are not set,
+    pname:pViewportState must: be a valid pointer to a valid
+    slink:VkPipelineViewportStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pViewportState-09025]]
+    If pname:pViewportState is not `NULL` it must: be a valid pointer to a
+    valid slink:VkPipelineViewportStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pViewportState-04892]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the graphics pipeline state was
+    created with the ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE
+    dynamic state enabled, pname:pViewportState must: be a valid pointer to
+    a valid slink:VkPipelineViewportStateCreateInfo structure
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:pMultisampleState must: be a
+    valid pointer to a valid slink:VkPipelineMultisampleStateCreateInfo
+    structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09026]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and the
+    `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled or any
+    of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is
+    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
+    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set,
+    pname:pMultisampleState must: be a valid pointer to a valid
+    slink:VkPipelineMultisampleStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09027]]
+    If pname:pMultisampleState is not `NULL` is must: be a valid pointer to
+    a valid slink:VkPipelineMultisampleStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-alphaToCoverageEnable-08891]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    the
+    slink:VkPipelineMultisampleStateCreateInfo::pname:alphaToCoverageEnable
+    is not ignored and is ename:VK_TRUE, then the
+    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
+    variable for the alpha code:Component word in code:Location 0 at
+    code:Index 0
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06043]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>>, and pname:subpass uses a depth/stencil attachment,
+    pname:pDepthStencilState must: be a valid pointer to a valid
+    slink:VkPipelineDepthStencilStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09028]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>>, and pname:subpass uses a depth/stencil attachment, and
+    the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled or,
+    any of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
+    pname:pDepthStencilState must: be a valid pointer to a valid
+    slink:VkPipelineDepthStencilStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09029]]
+    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
+    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06044]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, and pname:subpass uses color attachments,
+    pname:pColorBlendState must: be a valid pointer to a valid
+    slink:VkPipelineColorBlendStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09030]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, and pname:subpass uses color attachments, and
+    `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled, or any
+    of the ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, or
+    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states are not set,
+    pname:pColorBlendState must: be a valid pointer to a valid
+    slink:VkPipelineColorBlendStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, the <<features-depthBiasClamp,
+    pname:depthBiasClamp>> feature is not enabled, no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member
+    of pname:pRasterizationState is ename:VK_TRUE, the pname:depthBiasClamp
+    member of pname:pRasterizationState must: be `0.0`
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and no element of the pname:pDynamicStates
+    member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS,
+    and the pname:depthBoundsTestEnable member of pname:pDepthStencilState
+    is ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds
+    members of pname:pDepthStencilState must: be between `0.0` and `1.0`,
+    inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled and no
+    element of the pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable
+    member of pname:pDepthStencilState is ename:VK_TRUE, the
+    pname:minDepthBounds and pname:maxDepthBounds members of
+    pname:pDepthStencilState must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07610]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:rasterizationSamples and
+    pname:sampleLocationsInfo are not dynamic, and
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    included in the pname:pNext chain of pname:pMultisampleState is
+    ename:VK_TRUE, pname:sampleLocationsInfo.sampleLocationGridSize.width
+    must: evenly divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling pname:rasterizationSamples
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07611]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:rasterizationSamples and
+    pname:sampleLocationsInfo are not dynamic, and
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    the included in the pname:pNext chain of pname:pMultisampleState is
+    ename:VK_TRUE or ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is
+    used, pname:sampleLocationsInfo.sampleLocationGridSize.height must:
+    evenly divide
+    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
+    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
+    pname:samples parameter equaling pname:rasterizationSamples
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07612]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> or <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:rasterizationSamples and
+    pname:sampleLocationsInfo are not dynamic, and
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    included in the pname:pNext chain of pname:pMultisampleState is
+    ename:VK_TRUE or ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is
+    used, pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
+    pname:rasterizationSamples
+  * [[VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
+    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE, the
+    fragment shader code must: not statically use the extended instruction
+    code:InterpolateAtSample
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-multisampledRenderToSingleSampled-06853]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and none of the
+    `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature are enabled,
+    pname:rasterizationSamples is not dynamic, and if pname:subpass uses
+    color and/or depth/stencil attachments, then the
+    pname:rasterizationSamples member of pname:pMultisampleState must: be
+    the same as the sample count for those subpass attachments
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_AMD_mixed_attachment_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01505]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and the
+    `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    pname:rasterizationSamples is not dynamic, and if pname:subpass uses
+    color and/or depth/stencil attachments, then the
+    pname:rasterizationSamples member of pname:pMultisampleState must: equal
+    the maximum of the sample counts of those subpass attachments
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06854]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the
+    `apiext:VK_EXT_multisampled_render_to_single_sampled` extension is
+    enabled, pname:rasterizationSamples is not dynamic, and pname:subpass
+    has a slink:VkMultisampledRenderToSingleSampledInfoEXT structure
+    included in the slink:VkSubpassDescription2::pname:pNext chain with
+    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
+    then the pname:rasterizationSamples member of pname:pMultisampleState
+    must: be equal to
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01411]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    pname:rasterizationSamples is not dynamic, and if pname:subpass has a
+    depth/stencil attachment and depth test, stencil test, or depth bounds
+    test are enabled, then the pname:rasterizationSamples member of
+    pname:pMultisampleState must: be the same as the sample count of the
+    depth/stencil attachment
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01412]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    pname:rasterizationSamples is not dynamic, and if pname:subpass has any
+    color attachments, then the pname:rasterizationSamples member of
+    pname:pMultisampleState must: be greater than or equal to the sample
+    count for those subpass attachments
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_NV_coverage_reduction_mode[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, the
+    `apiext:VK_NV_coverage_reduction_mode` extension is enabled, and
+    pname:rasterizationSamples is not dynamic, the coverage reduction mode
+    specified by
+    slink:VkPipelineCoverageReductionStateCreateInfoNV::pname:coverageReductionMode,
+    the pname:rasterizationSamples member of pname:pMultisampleState and the
+    sample counts for the color and depth/stencil attachments (if the
+    subpass has them) must: be a valid combination returned by
+    fname:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
+endif::VK_NV_coverage_reduction_mode[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-00758]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:rasterizationSamples is not
+    dynamic, and pname:subpass does not use any color and/or depth/stencil
+    attachments, then the pname:rasterizationSamples member of
+    pname:pMultisampleState must: follow the rules for a
+    <<renderpass-noattachments, zero-attachment subpass>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06046]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass must: be
+    a valid subpass within pname:renderPass
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06047]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
+    pname:multiviewTessellationShader is not enabled, then pname:pStages
+    must: not include tessellation shaders
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06048]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
+    pname:multiviewGeometryShader is not enabled, then pname:pStages must:
+    not include a geometry shader
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06049]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
+    all of the shaders in the pipeline must: not write to the code:Layer
+    built-in output
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06050]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
+    being created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
+    then all of the shaders in the pipeline must: not include variables
+    decorated with the code:Layer built-in decoration in their interfaces
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07717]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
+    being created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and pname:subpass viewMask is not `0`,
+    then all of the shaders in the pipeline must: not include variables
+    decorated with the code:ViewMask built-in decoration in their interfaces
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07064]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, pname:subpass viewMask is not `0`, and
+    pname:multiviewMeshShader is not enabled, then pname:pStages must: not
+    include a mesh shader
+endif::VK_EXT_mesh_shader[]
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00764]]
+    pname:flags must: not contain the ename:VK_PIPELINE_CREATE_DISPATCH_BASE
+    flag
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-01565]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and an input attachment was referenced by an
+    pname:aspectMask at pname:renderPass creation time, the fragment shader
+    must: only read from the aspects that were specified for that input
+    attachment
+endif::VK_VERSION_1_1,VK_KHR_maintenance2,VK_KHR_create_renderpass2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-layout-01688]]
+    The number of resources in pname:layout accessible to each shader stage
+    that is used by the pipeline must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
+ifdef::VK_NV_clip_space_w_scaling[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and the
+    pname:viewportWScalingEnable member of a
+    slink:VkPipelineViewportWScalingStateCreateInfoNV structure, included in
+    the pname:pNext chain of pname:pViewportState, is ename:VK_TRUE, the
+    pname:pViewportWScalings member of the
+    slink:VkPipelineViewportWScalingStateCreateInfoNV must: be a pointer to
+    an array of
+    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
+    valid slink:VkViewportWScalingNV structures
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_NV_scissor_exclusive[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, and if
+    pname:pViewportState->pNext chain includes a
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure, and
+    if its pname:exclusiveScissorCount member is not `0`, then its
+    pname:pExclusiveScissors member must: be a valid pointer to an array of
+    pname:exclusiveScissorCount slink:VkRect2D structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07854]]
+    If ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV is included in the
+    pname:pDynamicStates array then the implementation must: support at
+    least pname:specVersion `2` of the `apiext:VK_NV_scissor_exclusive`
+    extension
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, and if
+    pname:pViewportState->pNext chain includes a
+    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV structure,
+    then its pname:pShadingRatePalettes member must: be a valid pointer to
+    an array of pname:viewportCount valid slink:VkShadingRatePaletteNV
+    structures
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_discard_rectangles[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, and if pname:pNext chain
+    includes a slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure,
+    and if its pname:discardRectangleCount member is not `0`, then its
+    pname:pDiscardRectangles member must: be a valid pointer to an array of
+    pname:discardRectangleCount slink:VkRect2D structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07855]]
+    If ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT is included in
+    the pname:pDynamicStates array then the implementation must: support at
+    least pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
+    extension
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07856]]
+    If ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT is included in the
+    pname:pDynamicStates array then the implementation must: support at
+    least pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
+    extension
+endif::VK_EXT_discard_rectangles[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02097]]
+    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
+    vertex input state>>, and pname:pVertexInputState is not dynamic, then
+    pname:pVertexInputState must: be a valid pointer to a valid
+    slink:VkPipelineVertexInputStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-Input-07904]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
+    pname:pVertexInputState is not dynamic, then all variables with the
+    code:Input storage class decorated with code:Location in the code:Vertex
+    {ExecutionModel} code:OpEntryPoint must: contain a location in
+    slink:VkVertexInputAttributeDescription::pname:location
+  * [[VUID-VkGraphicsPipelineCreateInfo-Input-08733]]
+    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
+    vertex input state>> and pname:pVertexInputState is not dynamic, then
+    the numeric type associated with all code:Input variables of the
+    corresponding code:Location in the code:Vertex {ExecutionModel}
+    code:OpEntryPoint must: be the same as
+    slink:VkVertexInputAttributeDescription::pname:format
+  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08929]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
+    pname:pVertexInputState is not dynamic, and
+    slink:VkVertexInputAttributeDescription::pname:format has a 64-bit
+    component, then the scalar width associated with all code:Input
+    variables of the corresponding code:Location in the code:Vertex
+    {ExecutionModel} code:OpEntryPoint must: be 64-bit
+  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08930]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
+    pname:pVertexInputState is not dynamic, and the scalar width associated
+    with a code:Location decorated code:Input variable in the code:Vertex
+    {ExecutionModel} code:OpEntryPoint is 64-bit, then the corresponding
+    slink:VkVertexInputAttributeDescription::pname:format must: have a
+    64-bit component
+  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-09198]]
+    If the pipeline is being created with
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
+    pname:pVertexInputState is not dynamic, and
+    slink:VkVertexInputAttributeDescription::pname:format has a 64-bit
+    component, then all code:Input variables at the corresponding
+    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
+    must: not use components that are not present in the format
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02098]]
+    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
+    vertex input state>>, pname:pInputAssemblyState must: be a valid pointer
+    to a valid slink:VkPipelineInputAssemblyStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicPrimitiveTopologyUnrestricted-09031]]
+    If the pipeline requires <<pipelines-graphics-subsets-vertex-input,
+    vertex input state>>, and the `apiext:VK_EXT_extended_dynamic_state3`
+    extension is not enabled, or either
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic states are not set, or
+    <<limits-dynamicPrimitiveTopologyUnrestricted,
+    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_FALSE,
+    pname:pInputAssemblyState must: be a valid pointer to a valid
+    slink:VkPipelineInputAssemblyStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pInputAssemblyState-09032]]
+    If pname:pInputAssemblyState is not `NULL` it must: be a valid pointer
+    to a valid slink:VkPipelineInputAssemblyStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02317]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, the code:Xfb execution mode can: be
+    specified by no more than one shader stage in pname:pStages
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02318]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and any shader stage in pname:pStages
+    specifies code:Xfb execution mode it must: be the last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and a
+    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
+    value other than zero is specified, all variables in the output
+    interface of the entry point being compiled decorated with
+    code:Position, code:PointSize, code:ClipDistance, or code:CullDistance
+    must: be decorated with identical code:Stream values that match the
+    pname:rasterizationStream
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
+    is zero, or not specified, all variables in the output interface of the
+    entry point being compiled decorated with code:Position, code:PointSize,
+    code:ClipDistance, or code:CullDistance must: be decorated with a
+    code:Stream value of zero, or must: not specify the code:Stream
+    decoration
+  * [[VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>> is a geometry shader, and that geometry shader uses the
+    code:GeometryStreams capability, then
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
+    feature must: be enabled
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-02322]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and there are any mesh shader stages
+    in the pipeline there must: not be any shader stage in the pipeline with
+    a code:Xfb execution mode
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_line_rasterization[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and at least one of
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>> or <<pipelines-graphics-subsets-fragment-shader, fragment shader
+    state>>, and pname:pMultisampleState is not `NULL`, the
+    pname:lineRasterizationMode member of a
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT structure included
+    in the pname:pNext chain of pname:pRasterizationState is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT or
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    pname:alphaToCoverageEnable, pname:alphaToOneEnable, and
+    pname:sampleShadingEnable members of pname:pMultisampleState must: all
+    be ename:VK_FALSE
+  * [[VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, the pname:stippledLineEnable member of
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT is ename:VK_TRUE,
+    and no element of the pname:pDynamicStates member of pname:pDynamicState
+    is ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, then the
+    pname:lineStippleFactor member of
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT must: be in the
+    range [eq]#[1,256]#
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_KHR_pipeline_library[]
+ifndef::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03371]]
+    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_graphics_pipeline_library[]
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03372]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03373]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03374]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03375]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03376]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03377]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03577]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04947]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378]]
+    If
+ifdef::VK_EXT_extended_dynamic_state[]
+    the <<features-extendedDynamicState, pname:extendedDynamicState>>
+    feature is not enabled,
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3+VK_EXT_extended_dynamic_state[and]
+ifdef::VK_VERSION_1_3[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is less than Version 1.3
+endif::VK_VERSION_1_3[]
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_CULL_MODE,
+    ename:VK_DYNAMIC_STATE_FRONT_FACE,
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY,
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE,
+    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, or
+    ename:VK_DYNAMIC_STATE_STENCIL_OP
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the
+    pname:pDynamicStates array then pname:viewportCount must: be zero
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the
+    pname:pDynamicStates array then pname:scissorCount must: be zero
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the
+    pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_VIEWPORT must:
+    not be present
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the
+    pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_SCISSOR must: not
+    be present
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07065]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and includes a mesh shader, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, or
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868]]
+    If
+ifdef::VK_EXT_extended_dynamic_state[]
+    the <<features-extendedDynamicState2, pname:extendedDynamicState2>>
+    feature is not enabled,
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3+VK_EXT_extended_dynamic_state[and]
+ifdef::VK_VERSION_1_3[]
+    the value of slink:VkApplicationInfo::pname:apiVersion used to create
+    the slink:VkInstance is less than Version 1.3
+endif::VK_VERSION_1_3[]
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869]]
+    If the <<features-extendedDynamicState2LogicOp,
+    pname:extendedDynamicState2LogicOp>> feature is not enabled, there must:
+    be no element of the pname:pDynamicStates member of pname:pDynamicState
+    set to ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870]]
+    If the <<features-extendedDynamicState2PatchControlPoints,
+    pname:extendedDynamicState2PatchControlPoints>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07066]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and includes a mesh shader, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or
+    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_NV_device_generated_commands[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02877]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the
+    <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
+    feature must: be enabled
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02966]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and pname:flags includes
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then all stages must:
+    not specify code:Xfb execution mode
+endif::VK_EXT_transform_feedback[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-libraryCount-06648]]
+    If the pipeline is not created with a
+    <<pipelines-graphics-subsets-complete, complete set of state>>,
+ifdef::VK_EXT_graphics_pipeline_library[]
+    or slink:VkPipelineLibraryCreateInfoKHR::pname:libraryCount is not `0`,
+endif::VK_EXT_graphics_pipeline_library[]
+    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount and
+    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:pipelineCount
+    must: be `0`
+  * [[VUID-VkGraphicsPipelineCreateInfo-libraryCount-06649]]
+    If the pipeline is created with a <<pipelines-graphics-subsets-complete,
+    complete set of state>>,
+ifdef::VK_EXT_graphics_pipeline_library[]
+    and slink:VkPipelineLibraryCreateInfoKHR::pname:libraryCount is `0`,
+endif::VK_EXT_graphics_pipeline_library[]
+    and the pname:pNext chain includes an instance of
+    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV,
+    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount must:
+    be greater than `0`
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878]]
+    If the <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineProtectedAccess-07368]]
+    If the <<features-pipelineProtectedAccess,
+    pname:pipelineProtectedAccess>> feature is not enabled, pname:flags
+    must: not include ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
+    or ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07369]]
+    pname:flags must: not include both
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT and
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
+endif::VK_EXT_pipeline_protected_access[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
+    must: be greater than or equal to `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
+    must: be greater than or equal to `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
+    must: be a power-of-two value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
+    must: be a power-of-two value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
+    must: be less than or equal to `4`
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
+    must: be less than or equal to `4`
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.width
+    and
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:fragmentSize.height
+    must: both be equal to `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06567]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[0]
+    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06568]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[1]
+    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[0]
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps[1]
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and the
+    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
+    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
+    supported, ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is not included in
+    pname:pDynamicState->pDynamicStates, and
+    slink:VkPipelineViewportStateCreateInfo::pname:viewportCount is greater
+    than `1`, entry points specified in pname:pStages must: not write to the
+    code:PrimitiveShadingRateKHR built-in
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and the
+    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
+    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
+    supported, and entry points specified in pname:pStages write to the
+    code:ViewportIndex built-in, they must: not also write to the
+    code:PrimitiveShadingRateKHR built-in
+ifdef::VK_NV_viewport_array2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and the
+    <<limits-primitiveFragmentShadingRateWithMultipleViewports,
+    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
+    supported, and entry points specified in pname:pStages write to the
+    code:ViewportMaskNV built-in, they must: not also write to the
+    code:PrimitiveShadingRateKHR built-in
+endif::VK_NV_viewport_array2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    the <<limits-fragmentShadingRateNonTrivialCombinerOps,
+    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported,
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, elements of
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:combinerOps
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_fragment_shading_rate_enums[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-06569]]
+     If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+     fragment shader state>>
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRateType
+    must: be a valid elink:VkFragmentShadingRateTypeNV value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06570]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
+    must: be a valid elink:VkFragmentShadingRateNV value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06571]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[0]
+    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06572]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[1]
+    must: be a valid elink:VkFragmentShadingRateCombinerOpKHR value
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-fragmentShadingRateEnums, pname:fragmentShadingRateEnums>>
+    feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRateType
+    must: be equal to ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
+    must: be equal to
+    ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[0]
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, and the
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps[1]
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    <<limits-fragmentShadingRateNonTrivialCombinerOps,
+    pname:fragmentShadingRateNonTrivialCombinerOps>> limit is not supported
+    and ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in
+    pname:pDynamicState->pDynamicStates, elements of
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:combinerOps
+    must: be ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-04574]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    <<features-supersampleFragmentShadingRates,
+    pname:supersampleFragmentShadingRates>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
+    must: not be equal to
+    ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
+    ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
+    ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or
+    ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-04575]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    <<features-noInvocationFragmentShadingRates,
+    pname:noInvocationFragmentShadingRates>> feature is not enabled,
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV::pname:shadingRate
+    must: not be equal to ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
+endif::VK_NV_fragment_shading_rate_enums[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578]]
+    All elements of the pname:pDynamicStates member of pname:pDynamicState
+    must: not be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> and the
+    <<features-vertexInputDynamicState, pname:vertexInputDynamicState>>
+    feature is not enabled, there must: be no element of the
+    pname:pDynamicStates member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07067]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and includes a mesh shader, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifdef::VK_EXT_color_write_enable[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800]]
+    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
+    not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
+endif::VK_EXT_color_write_enable[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    `apiext:VK_QCOM_render_pass_shader_resolve` extension is enabled,
+    pname:rasterizationSamples is not dynamic, and if subpass has any input
+    attachments, and if the subpass description contains
+    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the sample
+    count of the input attachments must: equal pname:rasterizationSamples
+  * [[VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>>, and the
+    `apiext:VK_QCOM_render_pass_shader_resolve` extension is enabled, and if
+    the subpass description contains
+    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then
+    pname:sampleShadingEnable must: be false
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04901]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
+    must: be the last subpass in a subpass dependency chain
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-04902]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+    pname:pResolveAttachments is not `NULL`, then each resolve attachment
+    must: be ename:VK_ATTACHMENT_UNUSED
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifndef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06574]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>,
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    or <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>>, pname:renderPass must: be a valid render pass object
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576]]
+    If the <<features-dynamicRendering, pname:dynamicRendering>> feature is
+    not enabled and the pipeline requires
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, <<pipelines-graphics-subsets-fragment-shader, fragment shader
+    state>>, or <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, pname:renderPass must: not be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-multiview-06577]]
+    If the <<features-multiview, pname:multiview>> feature is not enabled,
+    the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>,
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    or <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>>, and pname:renderPass is dlink:VK_NULL_HANDLE,
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be `0`
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06578]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>,
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    or <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>>, and pname:renderPass is dlink:VK_NULL_HANDLE, the
+    index of the most significant bit in
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be less than
+    <<limits-maxMultiviewViewCount, pname:maxMultiviewViewCount>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06579]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:renderPass is
+    dlink:VK_NULL_HANDLE, and
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount is not
+    0, slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats
+    must: be a valid pointer to an array of pname:colorAttachmentCount valid
+    elink:VkFormat values
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06580]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:renderPass is
+    dlink:VK_NULL_HANDLE, each element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats must:
+    be a valid elink:VkFormat value
+ifndef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06581]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and any element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats is
+    not ename:VK_FORMAT_UNDEFINED, that format must: be a format with
+    <<potential-format-features, potential format features>> that include
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06582]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and any element of
+    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats is
+    not ename:VK_FORMAT_UNDEFINED, that format must: be a format with
+    <<potential-format-features, potential format features>> that include
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06583]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:renderPass is
+    dlink:VK_NULL_HANDLE,
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat must:
+    be a valid elink:VkFormat value
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06584]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and pname:renderPass is
+    dlink:VK_NULL_HANDLE,
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat must:
+    be a valid elink:VkFormat value
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06585]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
+    ename:VK_FORMAT_UNDEFINED, it must: be a format with
+    <<potential-format-features, potential format features>> that include
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06586]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
+    not ename:VK_FORMAT_UNDEFINED, it must: be a format with
+    <<potential-format-features, potential format features>> that include
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06587]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
+    ename:VK_FORMAT_UNDEFINED, it must: be a format that includes a depth
+    component
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06588]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE, and
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
+    not ename:VK_FORMAT_UNDEFINED, it must: be a format that includes a
+    stencil component
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06589]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:renderPass is
+    dlink:VK_NULL_HANDLE,
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat is not
+    ename:VK_FORMAT_UNDEFINED, and
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat is
+    not ename:VK_FORMAT_UNDEFINED, pname:depthAttachmentFormat must: equal
+    pname:stencilAttachmentFormat
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06053]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> and <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and either of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat or
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat are
+    not ename:VK_FORMAT_UNDEFINED, pname:pDepthStencilState must: be a valid
+    pointer to a valid slink:VkPipelineDepthStencilStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09033]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> and <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and either of
+    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat or
+    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat are
+    not ename:VK_FORMAT_UNDEFINED, and the
+    `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled or any
+    of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
+    pname:pDepthStencilState must: be a valid pointer to a valid
+    slink:VkPipelineDepthStencilStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09034]]
+    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
+    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06590]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> but not <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, pname:pDepthStencilState must: be a
+    valid pointer to a valid slink:VkPipelineDepthStencilStateCreateInfo
+    structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09035]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> but not <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>>, and the
+    `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled, or any
+    of the ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+    ename:VK_DYNAMIC_STATE_STENCIL_OP, or
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set,
+    pname:pDepthStencilState must: be a valid pointer to a valid
+    slink:VkPipelineDepthStencilStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09036]]
+    If pname:pDepthStencilState is not `NULL` it must: be a valid pointer to
+    a valid slink:VkPipelineDepthStencilStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+endif::VK_EXT_graphics_pipeline_library[]
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06054]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount is not
+    equal to `0`, pname:pColorBlendState must: be a valid pointer to a valid
+    slink:VkPipelineColorBlendStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-09037]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount is not
+    equal to `0`, and the `apiext:VK_EXT_extended_dynamic_state3` extension
+    is not enabled, or any of the
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT,
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, or
+    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states are not set,
+    pname:pColorBlendState must: be a valid pointer to a valid
+    slink:VkPipelineColorBlendStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pColorBlendState-09038]]
+    If pname:pColorBlendState is not `NULL` it must: be a valid pointer to a
+    valid slink:VkPipelineColorBlendStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06055]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, pname:pColorBlendState is
+    not dynamic, and the pipeline is being created with
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:pColorBlendState->attachmentCount must: be equal to
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount
+ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06057]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>,
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and the
+    <<features-multiview-tess, pname:multiviewTessellationShader>> feature
+    is not enabled, then pname:pStages must: not include tessellation
+    shaders
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06058]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>,
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and the
+    <<features-multiview-gs, pname:multiviewGeometryShader>> feature is not
+    enabled, then pname:pStages must: not include a geometry shader
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07718]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
+    the shaders in the pipeline must: not write to the code:Layer built-in
+    output
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06059]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
+    the shaders in the pipeline must: not include variables decorated with
+    the code:Layer built-in decoration in their interfaces
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07719]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of
+    the shaders in the pipeline must: not include variables decorated with
+    the code:ViewIndex built-in decoration in their interfaces
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07720]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, and
+    pname:multiviewMeshShader is not enabled, then pname:pStages must: not
+    include a mesh shader
+endif::VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06061]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and pname:renderPass is dlink:VK_NULL_HANDLE,
+    fragment shaders in pname:pStages must: not include the
+    code:InputAttachment capability
+ifdef::VK_EXT_shader_tile_image[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-08710]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and pname:renderPass is not
+    dlink:VK_NULL_HANDLE, fragment shaders in pname:pStages must: not
+    include any of the code:TileImageColorReadAccessEXT,
+    code:TileImageDepthReadAccessEXT, or code:TileImageStencilReadAccessEXT
+    capabilities
+endif::VK_EXT_shader_tile_image[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06062]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>> and pname:renderPass is
+    dlink:VK_NULL_HANDLE, for each color attachment format defined by the
+    pname:pColorAttachmentFormats member of
+    slink:VkPipelineRenderingCreateInfo, if its
+    <<potential-format-features,potential format features>> do not contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
+    pname:blendEnable member of the corresponding element of the
+    pname:pAttachments member of pname:pColorBlendState must: be
+    ename:VK_FALSE
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06063]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>> and pname:renderPass is
+    dlink:VK_NULL_HANDLE, if the pname:pNext chain includes
+    slink:VkAttachmentSampleCountInfoAMD or
+    sname:VkAttachmentSampleCountInfoNV, the pname:colorAttachmentCount
+    member of that structure must: be equal to the value of
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06591]]
+    If pname:pStages includes a fragment shader stage, and the fragment
+    shader declares the code:EarlyFragmentTests execution mode, the
+    pname:flags member of slink:VkPipelineDepthStencilStateCreateInfo must:
+    not include
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+    or
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06482]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>> and the pname:flags member of
+    slink:VkPipelineColorBlendStateCreateInfo includes
+    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT,
+    pname:renderpass must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06483]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>> and the pname:flags member of
+    slink:VkPipelineDepthStencilStateCreateInfo includes
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+    or
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT,
+    pname:renderpass must: not be dlink:VK_NULL_HANDLE
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pColorAttachmentSamples-06592]]
+    If the <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>>, elements of the pname:pColorAttachmentSamples member
+    of slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV must: be valid
+    elink:VkSampleCountFlagBits values
+  * [[VUID-VkGraphicsPipelineCreateInfo-depthStencilAttachmentSamples-06593]]
+    If the <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>> and the pname:depthStencilAttachmentSamples member of
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV is not 0, it must: be a valid
+    elink:VkSampleCountFlagBits value
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06484]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-output,
+    fragment output interface state>> and the pname:flags member of
+    slink:VkPipelineColorBlendStateCreateInfo includes
+    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
+    pname:subpass must: have been created with
+    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06485]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and the pname:flags member of
+    slink:VkPipelineDepthStencilStateCreateInfo includes
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT,
+    pname:subpass must: have been created with
+    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06486]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and the pname:flags member of
+    slink:VkPipelineDepthStencilStateCreateInfo includes
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT,
+    pname:subpass must: have been created with
+    ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pipelineStageCreationFeedbackCount-06594]]
+    If
+    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
+    is not `0`, it must: be equal to pname:stageCount
+endif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+ifdef::VK_NVX_multiview_per_view_attributes[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06595]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    and
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
+    is ename:VK_TRUE then
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes must:
+    also be ename:VK_TRUE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06596]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, the value of
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes
+    specified in both this pipeline and the library must: be equal
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06597]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributes
+    specified in both libraries must: be equal
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06598]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, the value of
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
+    specified in both this pipeline and the library must: be equal
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06599]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of
+    slink:VkMultiviewPerViewAttributesInfoNVX::pname:perViewAttributesPositionXOnly
+    specified in both libraries must: be equal
+endif::VK_NVX_multiview_per_view_attributes[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06600]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    pname:pStages must: be a valid pointer to an array of pname:stageCount
+    valid slink:VkPipelineShaderStageCreateInfo structures
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-06601]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, pname:pRasterizationState must: be a
+    valid pointer to a valid slink:VkPipelineRasterizationStateCreateInfo
+    structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09039]]
+    If the `apiext:VK_EXT_extended_dynamic_state3` extension is not enabled,
+    or any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states are
+    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
+    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set, then
+    pname:pMultisampleState must: be a valid pointer to a valid
+    slink:VkPipelineMultisampleStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09040]]
+    If pname:pRasterizationState is not `NULL` it must: be a valid pointer
+    to a valid slink:VkPipelineRasterizationStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-layout-06602]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> or
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, pname:layout must: be a valid slink:VkPipelineLayout handle
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06603]]
+    If <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
+    shader state>>, <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>>, or <<pipelines-graphics-subsets-fragment-output,
+    fragment output state>>,
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    and pname:renderPass is not dlink:VK_NULL_HANDLE,
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+    pname:renderPass must: be a valid slink:VkRenderPass handle
+  * [[VUID-VkGraphicsPipelineCreateInfo-stageCount-06604]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    pname:stageCount must: be greater than `0`
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-graphicsPipelineLibrary-06606]]
+    If the <<features-graphicsPipelineLibrary,
+    pname:graphicsPipelineLibrary>> feature is not enabled, pname:flags
+    must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06608]]
+    If the pipeline defines, or includes as libraries, all the state subsets
+    required for a <<pipelines-graphics-subsets-complete, complete graphics
+    pipeline>>, pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06609]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, pipeline
+    libraries included via slink:VkPipelineLibraryCreateInfoKHR must: have
+    been created with
+    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-09245]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT,
+    pname:flags must: also include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06610]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT,
+    pipeline libraries included via slink:VkPipelineLibraryCreateInfoKHR
+    must: have been created with
+    ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06611]]
+    Any pipeline libraries included via
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries must: not include
+    any <<pipelines-graphics-subsets, state subset>> already defined by this
+    structure or defined by any other pipeline library in
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06612]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, and pname:layout was not created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
+    pname:layout used by this pipeline and the library must: be _identically
+    defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06613]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
+    pname:layout specified by either library was not created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
+    pname:layout used by each library must: be _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06614]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and pname:layout was created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
+    pname:layout used by the library must: also have been created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06615]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
+    pname:layout specified by either library was created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the
+    pname:layout used by both libraries must: have been created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06616]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and pname:layout was created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of
+    the pname:pSetLayouts array which pname:layout was created with that are
+    not dlink:VK_NULL_HANDLE must: be _identically defined_ to the element
+    at the same index of pname:pSetLayouts used to create the library's
+    pname:layout
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06617]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the
+    pname:layout specified by either library was created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of
+    the pname:pSetLayouts array which either pname:layout was created with
+    that are not dlink:VK_NULL_HANDLE must: be _identically defined_ to the
+    element at the same index of pname:pSetLayouts used to create the other
+    library's pname:layout
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06618]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, any descriptor set layout _N_ specified by
+    pname:layout in both this pipeline and the library which include
+    bindings accessed by shader stages in each must: be _identically
+    defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06619]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, any
+    descriptor set layout _N_ specified by pname:layout in both libraries
+    which include bindings accessed by shader stages in each must: be
+    _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06620]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, push constants specified in pname:layout in
+    both this pipeline and the library which are available to shader stages
+    in each must: be _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06621]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, push
+    constants specified in pname:layout in both this pipeline and the
+    library which are available to shader stages in each must: be
+    _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06679]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and any element of the pname:pSetLayouts array which
+    pname:layout was created with was dlink:VK_NULL_HANDLE, then the
+    corresponding element of the pname:pSetLayouts array used to create the
+    library's pname:layout must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06680]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and any element of the pname:pSetLayouts array used to
+    create the library's pname:layout was dlink:VK_NULL_HANDLE, then the
+    corresponding element of the pname:pSetLayouts array used to create this
+    pipeline's pname:layout must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any
+    element of the pname:pSetLayouts array used to create each library's
+    pname:layout was dlink:VK_NULL_HANDLE, then the corresponding element of
+    the pname:pSetLayouts array used to create the other library's
+    pname:layout must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06756]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and any element of the pname:pSetLayouts array which
+    pname:layout was created with was dlink:VK_NULL_HANDLE, then the
+    corresponding element of the pname:pSetLayouts array used to create the
+    library's pname:layout must: not have shader bindings for shaders in the
+    other subset
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06757]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes the
+    other subset, and any element of the pname:pSetLayouts array used to
+    create the library's pname:layout was dlink:VK_NULL_HANDLE, then the
+    corresponding element of the pname:pSetLayouts array used to create this
+    pipeline's pname:layout must: not have shader bindings for shaders in
+    the other subset
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any
+    element of the pname:pSetLayouts array used to create each library's
+    pname:layout was dlink:VK_NULL_HANDLE, then the corresponding element of
+    the pname:pSetLayouts array used to create the other library's
+    pname:layout must: not have shader bindings for shaders in the other
+    subset
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06682]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    both
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pname:layout
+    must: have been created with no elements of the pname:pSetLayouts array
+    set to dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06683]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    pname:pRasterizationState->rasterizerDiscardEnable is ename:VK_TRUE,
+    pname:layout must: have been created with no elements of the
+    pname:pSetLayouts array set to dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06684]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
+    least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes one of the other flags, the value of pname:subpass must: be
+    equal to that used to create the library
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06623]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes at least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and another element of
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
+    the other flags, the value of pname:subpass used to create each library
+    must: be identical
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06624]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE,
+    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
+    least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes one of the other flags, pname:renderPass must: be compatible
+    with that used to create the library
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06625]]
+    If pname:renderpass is dlink:VK_NULL_HANDLE,
+    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
+    least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes one of the other flags, the value of pname:renderPass used to
+    create that library must: also be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06626]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes at
+    least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes one of the other flags, and pname:renderPass is
+    dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask used by this
+    pipeline and that specified by the library must: be identical
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06627]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes at least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    another element of
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
+    the other flags, and pname:renderPass was dlink:VK_NULL_HANDLE for both
+    libraries, the value of
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask set by each library
+    must: be identical
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06628]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes at least one of and no more than two of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and another element of
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes one of
+    the other flags, the pname:renderPass objects used to create each
+    library must: be compatible or all equal to dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-06629]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> pname:pMultisampleState must: be `NULL` or a
+    valid pointer to a valid slink:VkPipelineMultisampleStateCreateInfo
+    structure
+ifndef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-06630]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> pname:pMultisampleState must: not be `NULL`
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderpass-06631]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and pname:renderpass is not
+    dlink:VK_NULL_HANDLE, then pname:pMultisampleState must: not be `NULL`
+  * [[VUID-VkGraphicsPipelineCreateInfo-Input-06632]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> with a fragment shader that either enables
+    <<primsrast-sampleshading, sample shading>> or decorates any variable in
+    the code:Input storage class with code:Sample, then
+    pname:pMultisampleState must: not be `NULL`
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06633]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
+    pname:pMultisampleState that was not `NULL`, and an element of
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    pname:pMultisampleState must: be _identically defined_ to that used to
+    create the library
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06634]]
+    If an element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    was created with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
+    pname:pMultisampleState that was not `NULL`, and if
+    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    pname:pMultisampleState must: be _identically defined_ to that used to
+    create the library
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06635]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    was created with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a
+    pname:pMultisampleState that was not `NULL`, and if a different element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created
+    with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    the pname:pMultisampleState used to create each library must: be
+    _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06636]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    was created with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT and
+    a value of pname:pMultisampleState->sampleShading equal ename:VK_TRUE,
+    and if a different element of
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created with
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the
+    pname:pMultisampleState used to create each library must: be
+    _identically defined_
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06637]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    pname:pMultisampleState->sampleShading is ename:VK_TRUE, and an element
+    of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries was created
+    with ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the
+    pname:pMultisampleState used to create that library must: be
+    _identically defined_ pname:pMultisampleState
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06638]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    only one of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an
+    element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes the other flag, values specified in
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR for both this
+    pipeline and that library must: be identical
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06639]]
+    If one element of slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries
+    includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and
+    another element includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, values
+    specified in slink:VkPipelineFragmentShadingRateStateCreateInfoKHR for
+    both this pipeline and that library must: be identical
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06640]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    pname:pStages must: be a valid pointer to an array of pname:stageCount
+    valid slink:VkPipelineShaderStageCreateInfo structures
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06641]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    pname:pRasterizationState must: be a valid pointer to a valid
+    slink:VkPipelineRasterizationStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-09041]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and the `apiext:VK_EXT_extended_dynamic_state3` extension is not
+    enabled, or any of the ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
+    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states are
+    not set, or <<features-alphaToOne,alphaToOne>> is enabled on the device
+    and ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set,
+    pname:pMultisampleState must: be a valid pointer to a valid
+    slink:VkPipelineMultisampleStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09042]]
+    If pname:pRasterizationState is not `NULL` it must: be a valid pointer
+    to a valid slink:VkPipelineRasterizationStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06642]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pname:layout
+    must: be a valid slink:VkPipelineLayout handle
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06643]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and pname:renderPass is not dlink:VK_NULL_HANDLE, pname:renderPass must:
+    be a valid slink:VkRenderPass handle
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06644]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    pname:stageCount must: be greater than `0`
+ifdef::VK_KHR_pipeline_executable_properties[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06645]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags is
+    non-zero, if pname:flags includes
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, any
+    libraries must: have also been created with
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06646]]
+    If slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes more
+    than one library, and any library was created with
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, all
+    libraries must: have also been created with
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+  * [[VUID-VkGraphicsPipelineCreateInfo-pLibraries-06647]]
+    If slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries includes at
+    least one library,
+    slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags is non-zero,
+    and any library was created with
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR,
+    pname:flags must: include
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+endif::VK_KHR_pipeline_executable_properties[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-07826]]
+    If the pipeline includes a <<pipelines-graphics-subsets-complete,
+    complete set of state>>, and there are no libraries included in
+    slink:VkPipelineLibraryCreateInfoKHR::pname:pLibraries, then
+    slink:VkPipelineLayout must: be a valid pipeline layout
+  * [[VUID-VkGraphicsPipelineCreateInfo-layout-07827]]
+    If the pipeline includes a <<pipelines-graphics-subsets-complete,
+    complete set of state>> specified entirely by libraries, and each
+    library was created with a slink:VkPipelineLayout created without
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
+    pname:layout must: be <<descriptorsets-compatibility,compatible>> with
+    the layouts in those libraries
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06729]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline
+    includes a <<pipelines-graphics-subsets-complete, complete set of
+    state>> specified entirely by libraries, and each library was created
+    with a slink:VkPipelineLayout created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
+    pname:layout must: be <<descriptorsets-compatibility,compatible>> with
+    the union of the libraries' pipeline layouts other than the
+    inclusion/exclusion of
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-06730]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline
+    includes a <<pipelines-graphics-subsets-complete, complete set of
+    state>> specified entirely by libraries, and each library was created
+    with a slink:VkPipelineLayout created with
+    ename:VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then
+    pname:layout must: be <<descriptorsets-compatibility, compatible>> with
+    the union of the libraries' pipeline layouts
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_EXT_conservative_rasterization[]
+ifndef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06759]]
+    If <<limits-conservativePointAndLineRasterization,
+    pname:conservativePointAndLineRasterization>> is not supported; the
+    pipeline requires <<pipelines-graphics-subsets-vertex-input, vertex
+    input state>> and <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>; the pipeline does not include a
+    geometry shader; and the value of
+    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology is
+    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, or
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, then
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-08892]]
+    If <<limits-conservativePointAndLineRasterization,
+    pname:conservativePointAndLineRasterization>> is not supported; the
+    pipeline is being created with
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>> and
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>; the pipeline does not include a geometry shader; and the value
+    of slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology is
+    ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, or
+    ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, and either
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is not enabled
+    or
+    <<limits-dynamicPrimitiveTopologyUnrestricted,pname:dynamicPrimitiveTopologyUnrestricted>>
+    is ename:VK_FALSE, then
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+endif::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06760]]
+    If <<limits-conservativePointAndLineRasterization,
+    pname:conservativePointAndLineRasterization>> is not supported, the
+    pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the pipeline includes a geometry
+    shader with either the code:OutputPoints or code:OutputLineStrip
+    execution modes,
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06761]]
+    If <<limits-conservativePointAndLineRasterization,
+    pname:conservativePointAndLineRasterization>> is not supported, the
+    pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the pipeline includes a mesh
+    shader with either the code:OutputPoints or code:OutputLinesNV execution
+    modes,
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+endif::VK_NV_mesh_shader[]
+endif::VK_EXT_conservative_rasterization[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06894]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>> but not
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    elements of pname:pStages must: not have pname:stage set to
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06895]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> but not
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, elements of pname:pStages must: not have pname:stage set to a
+    shader stage which participates in pre-rasterization
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-06896]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, all elements of pname:pStages must:
+    have a pname:stage set to a shader stage which participates in
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>> or
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-06897]]
+    If the pipeline requires <<pipelines-graphics-subsets-fragment-shader,
+    fragment shader state>> and/or
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, any value of pname:stage must: not be set in more than one
+    element of pname:pStages
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3TessellationDomainOrigin-07370]]
+    If the <<features-extendedDynamicState3TessellationDomainOrigin,
+    pname:extendedDynamicState3TessellationDomainOrigin>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClampEnable-07371]]
+    If the <<features-extendedDynamicState3DepthClampEnable,
+    pname:extendedDynamicState3DepthClampEnable>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3PolygonMode-07372]]
+    If the <<features-extendedDynamicState3PolygonMode,
+    pname:extendedDynamicState3PolygonMode>> feature is not enabled, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationSamples-07373]]
+    If the <<features-extendedDynamicState3RasterizationSamples,
+    pname:extendedDynamicState3RasterizationSamples>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleMask-07374]]
+    If the <<features-extendedDynamicState3SampleMask,
+    pname:extendedDynamicState3SampleMask>> feature is not enabled, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToCoverageEnable-07375]]
+    If the <<features-extendedDynamicState3AlphaToCoverageEnable,
+    pname:extendedDynamicState3AlphaToCoverageEnable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToOneEnable-07376]]
+    If the <<features-extendedDynamicState3AlphaToOneEnable,
+    pname:extendedDynamicState3AlphaToOneEnable>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LogicOpEnable-07377]]
+    If the <<features-extendedDynamicState3LogicOpEnable,
+    pname:extendedDynamicState3LogicOpEnable>> feature is not enabled, there
+    must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEnable-07378]]
+    If the <<features-extendedDynamicState3ColorBlendEnable,
+    pname:extendedDynamicState3ColorBlendEnable>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEquation-07379]]
+    If the <<features-extendedDynamicState3ColorBlendEquation,
+    pname:extendedDynamicState3ColorBlendEquation>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorWriteMask-07380]]
+    If the <<features-extendedDynamicState3ColorWriteMask,
+    pname:extendedDynamicState3ColorWriteMask>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationStream-07381]]
+    If the <<features-extendedDynamicState3RasterizationStream,
+    pname:extendedDynamicState3RasterizationStream>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ConservativeRasterizationMode-07382]]
+    If the <<features-extendedDynamicState3ConservativeRasterizationMode,
+    pname:extendedDynamicState3ConservativeRasterizationMode>> feature is
+    not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ExtraPrimitiveOverestimationSize-07383]]
+    If the <<features-extendedDynamicState3ExtraPrimitiveOverestimationSize,
+    pname:extendedDynamicState3ExtraPrimitiveOverestimationSize>> feature is
+    not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipEnable-07384]]
+    If the <<features-extendedDynamicState3DepthClipEnable,
+    pname:extendedDynamicState3DepthClipEnable>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleLocationsEnable-07385]]
+    If the <<features-extendedDynamicState3SampleLocationsEnable,
+    pname:extendedDynamicState3SampleLocationsEnable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendAdvanced-07386]]
+    If the <<features-extendedDynamicState3ColorBlendAdvanced,
+    pname:extendedDynamicState3ColorBlendAdvanced>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ProvokingVertexMode-07387]]
+    If the <<features-extendedDynamicState3ProvokingVertexMode,
+    pname:extendedDynamicState3ProvokingVertexMode>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineRasterizationMode-07388]]
+    If the <<features-extendedDynamicState3LineRasterizationMode,
+    pname:extendedDynamicState3LineRasterizationMode>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineStippleEnable-07389]]
+    If the <<features-extendedDynamicState3LineStippleEnable,
+    pname:extendedDynamicState3LineStippleEnable>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipNegativeOneToOne-07390]]
+    If the <<features-extendedDynamicState3DepthClipNegativeOneToOne,
+    pname:extendedDynamicState3DepthClipNegativeOneToOne>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportWScalingEnable-07391]]
+    If the <<features-extendedDynamicState3ViewportWScalingEnable,
+    pname:extendedDynamicState3ViewportWScalingEnable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportSwizzle-07392]]
+    If the <<features-extendedDynamicState3ViewportSwizzle,
+    pname:extendedDynamicState3ViewportSwizzle>> feature is not enabled,
+    there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorEnable-07393]]
+    If the <<features-extendedDynamicState3CoverageToColorEnable,
+    pname:extendedDynamicState3CoverageToColorEnable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorLocation-07394]]
+    If the <<features-extendedDynamicState3CoverageToColorLocation,
+    pname:extendedDynamicState3CoverageToColorLocation>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationMode-07395]]
+    If the <<features-extendedDynamicState3CoverageModulationMode,
+    pname:extendedDynamicState3CoverageModulationMode>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTableEnable-07396]]
+    If the <<features-extendedDynamicState3CoverageModulationTableEnable,
+    pname:extendedDynamicState3CoverageModulationTableEnable>> feature is
+    not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTable-07397]]
+    If the <<features-extendedDynamicState3CoverageModulationTable,
+    pname:extendedDynamicState3CoverageModulationTable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageReductionMode-07398]]
+    If the <<features-extendedDynamicState3CoverageReductionMode,
+    pname:extendedDynamicState3CoverageReductionMode>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RepresentativeFragmentTestEnable-07399]]
+    If the <<features-extendedDynamicState3RepresentativeFragmentTestEnable,
+    pname:extendedDynamicState3RepresentativeFragmentTestEnable>> feature is
+    not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV
+  * [[VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ShadingRateImageEnable-07400]]
+    If the <<features-extendedDynamicState3ShadingRateImageEnable,
+    pname:extendedDynamicState3ShadingRateImageEnable>> feature is not
+    enabled, there must: be no element of the pname:pDynamicStates member of
+    pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV
+endif::VK_EXT_extended_dynamic_state3[]
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07401]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-07997]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+endif::VK_NV_displacement_micromap[]
+ifdef::VK_QCOM_multiview_per_view_viewports[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07730]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_VIEWPORT or
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and if
+    <<features-multiview-per-view-viewports,
+    pname:multiviewPerViewViewports>> is enabled, then the index of the most
+    significant bit in each element of
+    slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks must: be less
+    than pname:pViewportState::pname:viewportCount
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07731]]
+    If the pipeline requires <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and no element of the
+    pname:pDynamicStates member of pname:pDynamicState is
+    ename:VK_DYNAMIC_STATE_SCISSOR or
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, and if
+    <<features-multiview-per-view-viewports,
+    pname:multiviewPerViewViewports>> is enabled, then the index of the most
+    significant bit in each element of
+    slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks must: be less
+    than pname:pViewportState::pname:scissorCount
+endif::VK_QCOM_multiview_per_view_viewports[]
+ifdef::VK_EXT_shader_tile_image[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08711]]
+    If pname:pStages includes a fragment shader stage,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE is not set in
+    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
+    fragment shader declares the code:EarlyFragmentTests execution mode and
+    uses code:OpDepthAttachmentReadEXT, the pname:depthWriteEnable member of
+    slink:VkPipelineDepthStencilStateCreateInfo must: be ename:VK_FALSE
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08712]]
+    If pname:pStages includes a fragment shader stage,
+    ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK is not set in
+    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
+    fragment shader declares the code:EarlyFragmentTests execution mode and
+    uses code:OpStencilAttachmentReadEXT, the value of
+    slink:VkStencilOpState::pname:writeMask for both pname:front and
+    pname:back in slink:VkPipelineDepthStencilStateCreateInfo must: be `0`
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-08744]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output state>> or
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>,
+    the pipeline enables <<primsrast-sampleshading, sample shading>>,
+    pname:rasterizationSamples is not dynamic, and the pname:pNext chain
+    includes a slink:VkPipelineRenderingCreateInfo structure,
+    pname:rasterizationSamples must: be a bit value that is set in
+    pname:imageCreateSampleCounts (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) for every
+    element of pname:depthAttachmentFormat, pname:stencilAttachmentFormat
+    and the pname:pColorAttachmentFormats array which is not
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifndef::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-08893]]
+    The pipeline must: be created with
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-08894]]
+    If pname:pStages includes a vertex shader stage, the pipeline must: be
+    created with <<pipelines-graphics-subsets-vertex-input, vertex input
+    state>>
+ifndef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-08895]]
+    If pname:pRasterizationState->rasterizerDiscardEnable is ename:VK_FALSE,
+    the pipeline must: be created with
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and <<pipelines-graphics-subsets-fragment-output,fragment output
+    interface state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+ifdef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-08896]]
+    If pname:pDynamicState->pDynamicStates includes
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, or if it does not and
+    pname:pRasterizationState->rasterizerDiscardEnable is ename:VK_FALSE,
+    the pipeline must: be created with
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and <<pipelines-graphics-subsets-fragment-output,fragment output
+    interface state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08897]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state includes a vertex shader stage in pname:pStages, the
+    pipeline must: define <<pipelines-graphics-subsets-vertex-input, vertex
+    input state>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08898]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, and
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is not specified, the pipeline must: define
+    <<pipelines-graphics-subsets-vertex-input, vertex input state>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08899]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state includes a vertex shader stage in pname:pStages, the
+    pipeline must: either define
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or include that state in a linked pipeline library
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08900]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT the
+    pipeline must: define <<pipelines-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08901]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pipeline must: either
+    define <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
+    shader state>> or include that state in a linked pipeline library
+ifndef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08902]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state has pname:pRasterizationState->rasterizerDiscardEnable
+    set to ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+ifdef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08903]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state either includes
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has
+    pname:pRasterizationState->rasterizerDiscardEnable set to
+    ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08904]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is not specified, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+ifndef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08905]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and that state has pname:pRasterizationState->rasterizerDiscardEnable
+    set to ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+ifdef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08906]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT,
+    and that state either includes
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has
+    pname:pRasterizationState->rasterizerDiscardEnable set to
+    ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>>
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08907]]
+    If slink:VkGraphicsPipelineLibraryCreateInfoEXT::pname:flags includes
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is not specified, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>>
+ifndef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08908]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state has pname:pRasterizationState->rasterizerDiscardEnable
+    set to ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>> and <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> or include those states in linked pipeline libraries
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+ifndef::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-08909]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> is specified either in a library or by the inclusion of
+    ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT,
+    and that state either includes
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has
+    pname:pRasterizationState->rasterizerDiscardEnable set to
+    ename:VK_FALSE, the pipeline must: define
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>> and <<pipelines-graphics-subsets-fragment-shader, fragment
+    shader state>> or include those states in linked pipeline libraries
+endif::VK_EXT_extended_dynamic_state3,VK_VERSION_1_3[]
+endif::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-09043]]
+    If
+ifdef::VK_EXT_extended_dynamic_state3[]
+    pname:pDynamicState->pDynamicStates does not include
+    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and
+endif::VK_EXT_extended_dynamic_state3[]
+    the format of any color attachment is
+    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the pname:colorWriteMask member
+    of the corresponding element of pname:pColorBlendState->pAttachments
+    must: either include all of ename:VK_COLOR_COMPONENT_R_BIT,
+    ename:VK_COLOR_COMPONENT_G_BIT, and ename:VK_COLOR_COMPONENT_B_BIT, or
+    none of them
+ifdef::VK_ANDROID_external_format_resolve[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09301]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`,
+    slink:VkPipelineRenderingCreateInfo::pname:viewMask must: be `0`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09304]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE,
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
+    pname:rasterizationSamples is not dynamic,
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    must: be `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09305]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
+    pname:blendEnable is not dynamic, the pname:blendEnable member of each
+    element of pname:pColorBlendState->pAttachments must: be ename:VK_FALSE
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09306]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
+    pname:pDynamicState->pDynamicStates does not include
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:width must:
+    be `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09307]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, and
+    pname:pDynamicState->pDynamicStates does not include
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:height
+    must: be `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09308]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, pre-rasterization shader
+    state>> and <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, the last
+    <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+    stage>> must: not statically use a variable with the
+    code:PrimitiveShadingRateKHR built-in
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09309]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`,
+    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount must: be
+    `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09310]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-shader, fragment shader state>>
+    and <<pipelines-graphics-subsets-fragment-output, fragment output
+    interface state>>, pname:renderPass is dlink:VK_NULL_HANDLE, and
+    slink:VkExternalFormatANDROID::pname:externalFormat is not `0`, the
+    fragment shader must: not declare the code:DepthReplacing or
+    code:StencilRefReplacingEXT execution modes
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09313]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
+    includes an external format resolve attachment, and
+    pname:rasterizationSamples is not dynamic,
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    must: be ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09314]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
+    includes an external format resolve attachment, and pname:blendEnable is
+    not dynamic, the pname:blendEnable member of each element of
+    pname:pColorBlendState->pAttachments must: be ename:VK_FALSE
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09315]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
+    includes an external format resolve attachment, and
+    pname:pDynamicState->pDynamicStates does not include
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:width must:
+    be `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09316]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, fragment output interface
+    state>>, pname:renderPass is not dlink:VK_NULL_HANDLE, pname:subpass
+    includes an external format resolve attachment, and
+    pname:pDynamicState->pDynamicStates does not include
+    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR::pname:height
+    must: be `1`
+  * [[VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09317]]
+    If the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is enabled, the pipeline requires
+    <<pipelines-graphics-subsets-fragment-output, pre-rasterization shader
+    state>> and <<pipelines-graphics-subsets-fragment-output, fragment
+    output interface state>>, pname:renderPass is not dlink:VK_NULL_HANDLE,
+    and pname:subpass includes an external format resolve attachment, the
+    last <<pipelines-graphics-subsets-pre-rasterization, pre-rasterization
+    shader stage>> must: not statically use a variable with the
+    code:PrimitiveShadingRateKHR built-in
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_ANDROID_external_format_resolve[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkGraphicsPipelineCreateInfo::pname:basePipelineHandle must: be
+    dlink:VK_NULL_HANDLE <<SCID-8>>.
+  * slink:VkGraphicsPipelineCreateInfo::pname:basePipelineIndex must: be
+    zero <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkGraphicsPipelineCreateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+[open,refpage='VkPipelineRenderingCreateInfo',desc='Structure specifying attachment formats',type='structs',alias='VkPipelineRenderingCreateInfoKHR']
+--
+The sname:VkPipelineRenderingCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineRenderingCreateInfo.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineRenderingCreateInfoKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:viewMask is the viewMask used for rendering.
+  * pname:colorAttachmentCount is the number of entries in
+    pname:pColorAttachmentFormats
+  * pname:pColorAttachmentFormats is a pointer to an array of elink:VkFormat
+    values defining the format of color attachments used in this pipeline.
+  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
+    format of the depth attachment used in this pipeline.
+  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
+    format of the stencil attachment used in this pipeline.
+
+When a pipeline is created without a slink:VkRenderPass, if the pname:pNext
+chain of slink:VkGraphicsPipelineCreateInfo includes this structure, it
+specifies the view mask and format of attachments used for rendering.
+If this structure is not specified, and the pipeline does not include a
+slink:VkRenderPass, pname:viewMask and pname:colorAttachmentCount are `0`,
+and pname:depthAttachmentFormat and pname:stencilAttachmentFormat are
+ename:VK_FORMAT_UNDEFINED.
+If a graphics pipeline is created with a valid slink:VkRenderPass,
+parameters of this structure are ignored.
+
+If pname:depthAttachmentFormat, pname:stencilAttachmentFormat, or any
+element of pname:pColorAttachmentFormats is ename:VK_FORMAT_UNDEFINED, it
+indicates that the corresponding attachment is unused within the render
+pass.
+Valid formats indicate that an attachment can: be used - but it is still
+valid to set the attachment to `NULL` when beginning rendering.
+
+ifdef::VK_ANDROID_external_format_resolve[]
+If the render pass is going to be used with an external format resolve
+attachment, a slink:VkExternalFormatANDROID structure must: also be included
+in the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo, defining the
+external format of the resolve attachment that will be used.
+endif::VK_ANDROID_external_format_resolve[]
+
+include::{generated}/validity/structs/VkPipelineRenderingCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='VkPipelineCreateFlags2CreateInfoKHR',desc='Extended pipeline create flags',type='structs']
+--
+The sname:VkPipelineCreateFlags2CreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCreateFlags2CreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits2KHR
+    specifying how a pipeline will be generated.
+
+If this structure is included in the pname:pNext chain of a pipeline
+creation structure, pname:flags is used instead of the corresponding
+pname:flags value passed in that creation structure, allowing additional
+creation flags to be specified.
+
+include::{generated}/validity/structs/VkPipelineCreateFlags2CreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkPipelineCreateFlagBits2KHR',desc='Bitmask controlling how a pipeline is created',type='enums']
+--
+Bits which can: be set in
+slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags, specifying how a
+pipeline is created, are:
+
+include::{generated}/api/enums/VkPipelineCreateFlagBits2KHR.adoc[]
+
+// Note - when editing this section, make sure that any relevant changes
+// are mirrored in VkPipelineCreateFlagBits2KHR/VkPipelineCreateFlagBits
+
+  * ename:VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR specifies that
+    the created pipeline will not be optimized.
+    Using this flag may: reduce the time taken to create the pipeline.
+  * ename:VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR specifies that the
+    pipeline to be created is allowed to be the parent of a pipeline that
+    will be created in a subsequent pipeline creation call.
+  * ename:VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR specifies that the
+    pipeline to be created will be a child of a previously created parent
+    pipeline.
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * ename:VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
+    specifies that any shader input variables decorated as code:ViewIndex
+    will be assigned values as if they were decorated as code:DeviceIndex.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * ename:VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR specifies that a
+    compute pipeline can: be used with flink:vkCmdDispatchBase with a
+    non-zero base workgroup.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV specifies that a
+    pipeline is created with all shaders in the deferred state.
+    Before using the pipeline the application must: call
+    flink:vkCompileDeferredNV exactly once on each shader in the pipeline
+    before using the pipeline.
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_pipeline_executable_properties[]
+  * ename:VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR specifies that the
+    shader compiler should capture statistics for the pipeline executables
+    produced by the compile process which can: later be retrieved by calling
+    flink:vkGetPipelineExecutableStatisticsKHR.
+    Enabling this flag must: not affect the final compiled pipeline but may:
+    disable pipeline caching or otherwise affect pipeline creation time.
+  * ename:VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+    specifies that the shader compiler should capture the internal
+    representations of pipeline executables produced by the compile process
+    which can: later be retrieved by calling
+    flink:vkGetPipelineExecutableInternalRepresentationsKHR.
+    Enabling this flag must: not affect the final compiled pipeline but may:
+    disable pipeline caching or otherwise affect pipeline creation time.
+ifdef::VK_KHR_pipeline_library[]
+    When capturing IR from pipelines created with pipeline libraries, there
+    is no guarantee that IR from libraries can: be retrieved from the linked
+    pipeline.
+    Applications should: retrieve IR from each library, and any linked
+    pipelines, separately.
+endif::VK_KHR_pipeline_library[]
+endif::VK_KHR_pipeline_executable_properties[]
+ifdef::VK_KHR_pipeline_library[]
+  * ename:VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR specifies that the pipeline
+    cannot: be used directly, and instead defines a _pipeline library_ that
+    can: be combined with other pipelines using the
+    slink:VkPipelineLibraryCreateInfoKHR structure.
+ifdef::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
+    This is available in
+ifdef::VK_KHR_ray_tracing_pipeline[ray tracing]
+ifdef::VK_KHR_ray_tracing_pipeline+VK_EXT_graphics_pipeline_library[and]
+ifdef::VK_EXT_graphics_pipeline_library[graphics]
+    pipelines.
+endif::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+    specifies that an any-hit shader will always be present when an any-hit
+    shader would be executed.
+    A NULL any-hit shader is an any-hit shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+    specifies that a closest hit shader will always be present when a
+    closest hit shader would be executed.
+    A NULL closest hit shader is a closest hit shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+    specifies that a miss shader will always be present when a miss shader
+    would be executed.
+    A NULL miss shader is a miss shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+    specifies that an intersection shader will always be present when an
+    intersection shader would be executed.
+    A NULL intersection shader is an intersection shader which is
+    effectively ename:VK_SHADER_UNUSED_KHR, such as from a shader group
+    consisting entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR specifies
+    that triangle primitives will be skipped during traversal using
+    code:OpTraceRayKHR.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR specifies that
+    AABB primitives will be skipped during traversal using
+    code:OpTraceRayKHR.
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+    specifies that the shader group handles can: be saved and reused on a
+    subsequent run (e.g. for trace capture and replay).
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV specifies that the
+    pipeline can be used in combination with <<device-generated-commands>>.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR
+    specifies that pipeline creation will fail if a compile is required for
+    creation of a valid slink:VkPipeline object;
+    ename:VK_PIPELINE_COMPILE_REQUIRED will be returned by pipeline
+    creation, and the slink:VkPipeline will be set to dlink:VK_NULL_HANDLE.
+  * When creating multiple pipelines,
+    ename:VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR specifies
+    that control will be returned to the application if any individual
+    pipeline returns a result which is not ename:VK_SUCCESS rather than
+    continuing to create additional pipelines.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV specifies
+    that the pipeline is allowed to use code:OpTraceRayMotionNV.
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies that the pipeline will be used with a fragment shading rate
+    attachment.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+    specifies that the pipeline will be used with a fragment density map
+    attachment.
+endif::VK_EXT_fragment_density_map[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT specifies that
+    pipeline libraries being linked into this library should: have link time
+    optimizations applied.
+    If this bit is omitted, implementations should: instead perform linking
+    as rapidly as possible.
+  * ename:VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
+    specifies that pipeline libraries should retain any information
+    necessary to later perform an optimal link with
+    ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT.
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT specifies that a
+    pipeline will be used with <<descriptorbuffers,descriptor buffers>>,
+    rather than <<descriptorsets,descriptor sets>>.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    specifies that the pipeline may: be used with an attachment feedback
+    loop including color attachments.
+  * ename:VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    specifies that the pipeline may: be used with an attachment feedback
+    loop including depth-stencil attachments.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+ifdef::VK_EXT_opacity_micromap[]
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
+    specifies that the pipeline can: be used with acceleration structures
+    which reference an opacity micromap array.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * ename:VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+    specifies that the pipeline can: be used with aceleration structures
+    which reference a displacement micromap array.
+endif::VK_NV_displacement_micromap[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * ename:VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT specifies that
+    the pipeline must: not be bound to a protected command buffer.
+  * ename:VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT specifies that
+    the pipeline must: not be bound to an unprotected command buffer.
+endif::VK_EXT_pipeline_protected_access[]
+
+It is valid to set both ename:VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR
+and ename:VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR.
+This allows a pipeline to be both a parent and possibly a child in a
+pipeline hierarchy.
+See <<pipelines-pipeline-derivatives,Pipeline Derivatives>> for more
+information.
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+When an implementation is looking up a pipeline in a
+<<pipelines-cache,pipeline cache>>, if that pipeline is being created using
+linked libraries, implementations should: always return an equivalent
+pipeline created with
+ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT if available,
+whether or not that bit was specified.
+
+[NOTE]
+.Note
+====
+Using ename:VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT (or not)
+when linking pipeline libraries is intended as a performance tradeoff
+between host and device.
+If the bit is omitted, linking should be faster and produce a pipeline more
+rapidly, but performance of the pipeline on the target device may be
+reduced.
+If the bit is included, linking may be slower but should produce a pipeline
+with device performance comparable to a monolithically created pipeline.
+Using both options can allow latency-sensitive applications to generate a
+suboptimal but usable pipeline quickly, and then perform an optimal link in
+the background, substituting the result for the suboptimally linked pipeline
+as soon as it is available.
+====
+endif::VK_EXT_graphics_pipeline_library[]
+--
+
+[open,refpage='VkPipelineCreateFlags2KHR',desc='Bitmask of VkPipelineCreateFlagBits2KHR',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCreateFlags2KHR.adoc[]
+
+tname:VkPipelineCreateFlags2KHR is a bitmask type for setting a mask of zero
+or more elink:VkPipelineCreateFlagBits2KHR.
+--
+endif::VK_KHR_maintenance5[]
+
+[open,refpage='VkPipelineCreateFlagBits',desc='Bitmask controlling how a pipeline is created',type='enums']
+--
+Bits which can: be set in
+
+  * slink:VkGraphicsPipelineCreateInfo::pname:flags
+  * slink:VkComputePipelineCreateInfo::pname:flags
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * slink:VkRayTracingPipelineCreateInfoKHR::pname:flags
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+  * slink:VkRayTracingPipelineCreateInfoNV::pname:flags
+endif::VK_NV_ray_tracing[]
+
+specify how a pipeline is created, and are:
+
+include::{generated}/api/enums/VkPipelineCreateFlagBits.adoc[]
+
+// Note - when editing this section, make sure that any relevant changes
+// are mirrored in VkPipelineCreateFlagBits2KHR/VkPipelineCreateFlagBits
+
+  * ename:VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT specifies that the
+    created pipeline will not be optimized.
+    Using this flag may: reduce the time taken to create the pipeline.
+ifndef::VKSC_VERSION_1_0[]
+  * ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT specifies that the
+    pipeline to be created is allowed to be the parent of a pipeline that
+    will be created in a subsequent pipeline creation call.
+  * ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT specifies that the pipeline to
+    be created will be a child of a previously created parent pipeline.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkPipelineCreateFlagBits
+  ** ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT <<SCID-8>>
+  ** ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT specifies that
+    any shader input variables decorated as code:ViewIndex will be assigned
+    values as if they were decorated as code:DeviceIndex.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * ename:VK_PIPELINE_CREATE_DISPATCH_BASE specifies that a compute pipeline
+    can: be used with flink:vkCmdDispatchBase with a non-zero base
+    workgroup.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV specifies that a pipeline
+    is created with all shaders in the deferred state.
+    Before using the pipeline the application must: call
+    flink:vkCompileDeferredNV exactly once on each shader in the pipeline
+    before using the pipeline.
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_pipeline_executable_properties[]
+  * ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR specifies that the
+    shader compiler should capture statistics for the pipeline executables
+    produced by the compile process which can: later be retrieved by calling
+    flink:vkGetPipelineExecutableStatisticsKHR.
+    Enabling this flag must: not affect the final compiled pipeline but may:
+    disable pipeline caching or otherwise affect pipeline creation time.
+  * ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+    specifies that the shader compiler should capture the internal
+    representations of pipeline executables produced by the compile process
+    which can: later be retrieved by calling
+    flink:vkGetPipelineExecutableInternalRepresentationsKHR.
+    Enabling this flag must: not affect the final compiled pipeline but may:
+    disable pipeline caching or otherwise affect pipeline creation time.
+ifdef::VK_KHR_pipeline_library[]
+    When capturing IR from pipelines created with pipeline libraries, there
+    is no guarantee that IR from libraries can: be retrieved from the linked
+    pipeline.
+    Applications should: retrieve IR from each library, and any linked
+    pipelines, separately.
+endif::VK_KHR_pipeline_library[]
+endif::VK_KHR_pipeline_executable_properties[]
+ifdef::VK_KHR_pipeline_library[]
+  * ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR specifies that the pipeline
+    cannot: be used directly, and instead defines a _pipeline library_ that
+    can: be combined with other pipelines using the
+    slink:VkPipelineLibraryCreateInfoKHR structure.
+ifdef::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
+    This is available in
+ifdef::VK_KHR_ray_tracing_pipeline[ray tracing]
+ifdef::VK_KHR_ray_tracing_pipeline+VK_EXT_graphics_pipeline_library[and]
+ifdef::VK_EXT_graphics_pipeline_library[graphics]
+    pipelines.
+endif::VK_KHR_ray_tracing_pipeline,VK_EXT_graphics_pipeline_library[]
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+    specifies that an any-hit shader will always be present when an any-hit
+    shader would be executed.
+    A NULL any-hit shader is an any-hit shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+    specifies that a closest hit shader will always be present when a
+    closest hit shader would be executed.
+    A NULL closest hit shader is a closest hit shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+    specifies that a miss shader will always be present when a miss shader
+    would be executed.
+    A NULL miss shader is a miss shader which is effectively
+    ename:VK_SHADER_UNUSED_KHR, such as from a shader group consisting
+    entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+    specifies that an intersection shader will always be present when an
+    intersection shader would be executed.
+    A NULL intersection shader is an intersection shader which is
+    effectively ename:VK_SHADER_UNUSED_KHR, such as from a shader group
+    consisting entirely of zeros.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR specifies
+    that triangle primitives will be skipped during traversal using
+    code:OpTraceRayKHR.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR specifies that
+    AABB primitives will be skipped during traversal using
+    code:OpTraceRayKHR.
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+    specifies that the shader group handles can: be saved and reused on a
+    subsequent run (e.g. for trace capture and replay).
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV specifies that the
+    pipeline can be used in combination with <<device-generated-commands>>.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT specifies
+    that pipeline creation will fail if a compile is required for creation
+    of a valid slink:VkPipeline object; ename:VK_PIPELINE_COMPILE_REQUIRED
+    will be returned by pipeline creation, and the slink:VkPipeline will be
+    set to dlink:VK_NULL_HANDLE.
+  * When creating multiple pipelines,
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT specifies that
+    control will be returned to the application if any individual pipeline
+    returns a result which is not ename:VK_SUCCESS rather than continuing to
+    create additional pipelines.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV specifies that
+    the pipeline is allowed to use code:OpTraceRayMotionNV.
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies that the pipeline will be used with a fragment shading rate
+    attachment and dynamic rendering.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+    specifies that the pipeline will be used with a fragment density map
+    attachment and dynamic rendering.
+endif::VK_EXT_fragment_density_map[]
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT specifies that
+    pipeline libraries being linked into this library should: have link time
+    optimizations applied.
+    If this bit is omitted, implementations should: instead perform linking
+    as rapidly as possible.
+  * ename:VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT
+    specifies that pipeline libraries should retain any information
+    necessary to later perform an optimal link with
+    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT.
+endif::VK_EXT_graphics_pipeline_library[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT specifies that a
+    pipeline will be used with <<descriptorbuffers,descriptor buffers>>,
+    rather than <<descriptorsets,descriptor sets>>.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    specifies that the pipeline may: be used with an attachment feedback
+    loop including color attachments.
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    It is ignored if
+    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT is set in
+    pname:pDynamicStates.
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+  * ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    specifies that the pipeline may: be used with an attachment feedback
+    loop including depth-stencil attachments.
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+    It is ignored if
+    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT is set in
+    pname:pDynamicStates.
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+endif::VK_EXT_attachment_feedback_loop_layout[]
+ifdef::VK_EXT_opacity_micromap[]
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT specifies
+    that the pipeline can: be used with acceleration structures which
+    reference an opacity micromap array.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+    specifies that the pipeline can: be used with aceleration structures
+    which reference a displacement micromap array.
+endif::VK_NV_displacement_micromap[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT specifies that the
+    pipeline must: not be bound to a protected command buffer.
+  * ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT specifies that
+    the pipeline must: not be bound to an unprotected command buffer.
+endif::VK_EXT_pipeline_protected_access[]
+
+ifndef::VKSC_VERSION_1_0[]
+It is valid to set both ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT and
+ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT.
+This allows a pipeline to be both a parent and possibly a child in a
+pipeline hierarchy.
+See <<pipelines-pipeline-derivatives,Pipeline Derivatives>> for more
+information.
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+When an implementation is looking up a pipeline in a
+<<pipelines-cache,pipeline cache>>, if that pipeline is being created using
+linked libraries, implementations should: always return an equivalent
+pipeline created with
+ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT if available,
+whether or not that bit was specified.
+
+[NOTE]
+.Note
+====
+Using ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT (or not) when
+linking pipeline libraries is intended as a performance tradeoff between
+host and device.
+If the bit is omitted, linking should be faster and produce a pipeline more
+rapidly, but performance of the pipeline on the target device may be
+reduced.
+If the bit is included, linking may be slower but should produce a pipeline
+with device performance comparable to a monolithically created pipeline.
+Using both options can allow latency-sensitive applications to generate a
+suboptimal but usable pipeline quickly, and then perform an optimal link in
+the background, substituting the result for the suboptimally linked pipeline
+as soon as it is available.
+====
+endif::VK_EXT_graphics_pipeline_library[]
+--
+
+[open,refpage='VkPipelineCreateFlags',desc='Bitmask of VkPipelineCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCreateFlags.adoc[]
+
+tname:VkPipelineCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkPipelineCreateFlagBits.
+--
+
+ifdef::VK_EXT_graphics_pipeline_library[]
+[open,refpage='VkGraphicsPipelineLibraryCreateInfoEXT',desc='Structure specifying the subsets of the graphics pipeline being compiled',type='structs']
+--
+The sname:VkGraphicsPipelineLibraryCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkGraphicsPipelineLibraryCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkGraphicsPipelineLibraryFlagBitsEXT
+    specifying the subsets of the graphics pipeline that are being compiled.
+
+If a sname:VkGraphicsPipelineLibraryCreateInfoEXT structure is included in
+the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo, it specifies
+the <<pipelines-graphics-subsets,subsets of the graphics pipeline>> being
+created, excluding any subsets from linked pipeline libraries.
+If the pipeline is created with pipeline libraries, state from those
+libraries is aggregated with said subset.
+
+If this structure is omitted, and either
+slink:VkGraphicsPipelineCreateInfo::pname:flags includes
+ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR or the
+slink:VkGraphicsPipelineCreateInfo::pname:pNext chain includes a
+slink:VkPipelineLibraryCreateInfoKHR structure with a pname:libraryCount
+greater than `0`, it is as if pname:flags is `0`.
+Otherwise if this structure is omitted, it is as if pname:flags includes all
+possible subsets of the graphics pipeline (i.e. a
+<<pipelines-graphics-subsets-complete,complete graphics pipeline>>).
+
+include::{generated}/validity/structs/VkGraphicsPipelineLibraryCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkGraphicsPipelineLibraryFlagsEXT', desc='Bitmask of VkGraphicsPipelineLibraryFlagBitsEXT', type='flags']
+--
+include::{generated}/api/flags/VkGraphicsPipelineLibraryFlagsEXT.adoc[]
+
+tname:VkGraphicsPipelineLibraryFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkGraphicsPipelineLibraryFlagBitsEXT.
+--
+
+[open,refpage='VkGraphicsPipelineLibraryFlagBitsEXT',desc='Bitmask specifying the subset of a graphics pipeline to compile',type='enums']
+--
+Possible values of the pname:flags member of
+slink:VkGraphicsPipelineLibraryCreateInfoEXT, specifying the subsets of a
+graphics pipeline to compile are:
+
+include::{generated}/api/enums/VkGraphicsPipelineLibraryFlagBitsEXT.adoc[]
+
+  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT
+    specifies that a pipeline will include
+    <<pipelines-graphics-subsets-vertex-input,vertex input interface
+    state>>.
+  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT
+    specifies that a pipeline will include
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    state>>.
+  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT specifies
+    that a pipeline will include
+    <<pipelines-graphics-subsets-fragment-shader,fragment shader state>>.
+  * ename:VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT
+    specifies that a pipeline will include
+    <<pipelines-graphics-subsets-fragment-output,fragment output interface
+    state>>.
+--
+endif::VK_EXT_graphics_pipeline_library[]
+
+[open,refpage='VkPipelineDynamicStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline dynamic state',type='structs']
+--
+The sname:VkPipelineDynamicStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineDynamicStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:dynamicStateCount is the number of elements in the
+    pname:pDynamicStates array.
+  * pname:pDynamicStates is a pointer to an array of elink:VkDynamicState
+    values specifying which pieces of pipeline state will use the values
+    from dynamic state commands rather than from pipeline state creation
+    information.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442]]
+    Each element of pname:pDynamicStates must: be unique
+****
+
+include::{generated}/validity/structs/VkPipelineDynamicStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineDynamicStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDynamicStateCreateFlags.adoc[]
+
+tname:VkPipelineDynamicStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkDynamicState',desc='Indicate which dynamic state is taken from dynamic state commands',type='enums']
+--
+The source of different pieces of dynamic state is specified by the
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates property of the
+currently active pipeline, each of whose elements must: be one of the
+values:
+
+include::{generated}/api/enums/VkDynamicState.adoc[]
+
+  * ename:VK_DYNAMIC_STATE_VIEWPORT specifies that the pname:pViewports
+    state in slink:VkPipelineViewportStateCreateInfo will be ignored and
+    must: be set dynamically with flink:vkCmdSetViewport before any drawing
+    commands.
+    The number of viewports used by a pipeline is still specified by the
+    pname:viewportCount member of slink:VkPipelineViewportStateCreateInfo.
+  * ename:VK_DYNAMIC_STATE_SCISSOR specifies that the pname:pScissors state
+    in slink:VkPipelineViewportStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetScissor before any drawing commands.
+    The number of scissor rectangles used by a pipeline is still specified
+    by the pname:scissorCount member of
+    slink:VkPipelineViewportStateCreateInfo.
+  * ename:VK_DYNAMIC_STATE_LINE_WIDTH specifies that the pname:lineWidth
+    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
+    and must: be set dynamically with flink:vkCmdSetLineWidth before any
+    drawing commands that generate line primitives for the rasterizer.
+ifdef::VK_EXT_depth_bias_control[]
+  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS specifies that any instance of
+    slink:VkDepthBiasRepresentationInfoEXT included in the pname:pNext chain
+    of slink:VkPipelineRasterizationStateCreateInfo as well as the
+    pname:depthBiasConstantFactor, pname:depthBiasClamp and
+    pname:depthBiasSlopeFactor states in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with either flink:vkCmdSetDepthBias or
+    flink:vkCmdSetDepthBias2EXT before any draws are performed with
+    <<primsrast-depthbias-enable, depth bias enabled>>.
+endif::VK_EXT_depth_bias_control[]
+ifndef::VK_EXT_depth_bias_control[]
+  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS specifies that the
+    pname:depthBiasConstantFactor, pname:depthBiasClamp and
+    pname:depthBiasSlopeFactor states in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetDepthBias before any draws are
+    performed with <<primsrast-depthbias-enable, depth bias enabled>>.
+endif::VK_EXT_depth_bias_control[]
+  * ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS specifies that the
+    pname:blendConstants state in slink:VkPipelineColorBlendStateCreateInfo
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetBlendConstants before any draws are performed with a
+    pipeline state with sname:VkPipelineColorBlendAttachmentState member
+    pname:blendEnable set to ename:VK_TRUE and any of the blend functions
+    using a constant blend color.
+  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS specifies that the
+    pname:minDepthBounds and pname:maxDepthBounds states of
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthBounds before any draws are
+    performed with a pipeline state with
+    slink:VkPipelineDepthStencilStateCreateInfo member
+    pname:depthBoundsTestEnable set to ename:VK_TRUE.
+  * ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK specifies that the
+    pname:compareMask state in slink:VkPipelineDepthStencilStateCreateInfo
+    for both pname:front and pname:back will be ignored and must: be set
+    dynamically with flink:vkCmdSetStencilCompareMask before any draws are
+    performed with a pipeline state with
+    slink:VkPipelineDepthStencilStateCreateInfo member
+    pname:stencilTestEnable set to ename:VK_TRUE
+  * ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK specifies that the
+    pname:writeMask state in slink:VkPipelineDepthStencilStateCreateInfo for
+    both pname:front and pname:back will be ignored and must: be set
+    dynamically with flink:vkCmdSetStencilWriteMask before any draws are
+    performed with a pipeline state with
+    slink:VkPipelineDepthStencilStateCreateInfo member
+    pname:stencilTestEnable set to ename:VK_TRUE
+  * ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE specifies that the
+    pname:reference state in slink:VkPipelineDepthStencilStateCreateInfo for
+    both pname:front and pname:back will be ignored and must: be set
+    dynamically with flink:vkCmdSetStencilReference before any draws are
+    performed with a pipeline state with
+    slink:VkPipelineDepthStencilStateCreateInfo member
+    pname:stencilTestEnable set to ename:VK_TRUE
+ifdef::VK_NV_clip_space_w_scaling[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV specifies that the
+    pname:pViewportWScalings state in
+    slink:VkPipelineViewportWScalingStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetViewportWScalingNV before
+    any draws are performed with a pipeline state with
+    slink:VkPipelineViewportWScalingStateCreateInfoNV member
+    pname:viewportScalingEnable set to ename:VK_TRUE
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_EXT_discard_rectangles[]
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT specifies that the
+    pname:pDiscardRectangles state in
+    slink:VkPipelineDiscardRectangleStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetDiscardRectangleEXT before
+    any draw or clear commands.
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT specifies that the
+    presence of the slink:VkPipelineDiscardRectangleStateCreateInfoEXT
+    structure in the slink:VkGraphicsPipelineCreateInfo chain with a
+    pname:discardRectangleCount greater than zero does not implicitly enable
+    discard rectangles and they must: be enabled dynamically with
+    flink:vkCmdSetDiscardRectangleEnableEXT before any draw commands.
+    This is available on implementations that support at least
+    pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
+    extension.
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT specifies that the
+    pname:discardRectangleMode state in
+    slink:VkPipelineDiscardRectangleStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetDiscardRectangleModeEXT
+    before any draw commands.
+    This is available on implementations that support at least
+    pname:specVersion `2` of the `apiext:VK_EXT_discard_rectangles`
+    extension.
+endif::VK_EXT_discard_rectangles[]
+ifdef::VK_EXT_sample_locations[]
+  * ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT specifies that the
+    pname:sampleLocationsInfo state in
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetSampleLocationsEXT before
+    any draw or clear commands.
+    Enabling custom sample locations is still indicated by the
+    pname:sampleLocationsEnable member of
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_NV_scissor_exclusive[]
+  * ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV specifies that the
+    pname:pExclusiveScissors state in
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetExclusiveScissorNV before any drawing commands.
+  * ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV specifies that the
+    the exclusive scissors must: be explicitly enabled with
+    flink:vkCmdSetExclusiveScissorEnableNV and the
+    pname:exclusiveScissorCount value in
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV will not
+    implicitly enable them.
+    This is available on implementations that support at least
+    pname:specVersion `2` of the `apiext:VK_NV_scissor_exclusive` extension.
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_shading_rate_image[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV specifies that
+    the pname:pShadingRatePalettes state in
+    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetViewportShadingRatePaletteNV before any drawing commands.
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV specifies that
+    the coarse sample order state in
+    slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetCoarseSampleOrderNV before any drawing commands.
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_line_rasterization[]
+  * ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT specifies that the
+    pname:lineStippleFactor and pname:lineStipplePattern state in
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetLineStippleEXT before any
+    draws are performed with a pipeline state with
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT member
+    pname:stippledLineEnable set to ename:VK_TRUE.
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_CULL_MODE specifies that the pname:cullMode state
+    in slink:VkPipelineRasterizationStateCreateInfo will be ignored and
+    must: be set dynamically with flink:vkCmdSetCullMode before any drawing
+    commands.
+  * ename:VK_DYNAMIC_STATE_FRONT_FACE specifies that the pname:frontFace
+    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
+    and must: be set dynamically with flink:vkCmdSetFrontFace before any
+    drawing commands.
+  * ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY specifies that the
+    pname:topology state in slink:VkPipelineInputAssemblyStateCreateInfo
+    only specifies the <<drawing-primitive-topology-class, topology class>>,
+    and the specific topology order and adjacency must: be set dynamically
+    with flink:vkCmdSetPrimitiveTopology before any drawing commands.
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT specifies that the
+    pname:viewportCount and pname:pViewports state in
+    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
+    dynamically with flink:vkCmdSetViewportWithCount before any draw call.
+  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT specifies that the
+    pname:scissorCount and pname:pScissors state in
+    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
+    dynamically with flink:vkCmdSetScissorWithCount before any draw call.
+  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE specifies that the
+    pname:stride state in slink:VkVertexInputBindingDescription will be
+    ignored and must: be set dynamically with flink:vkCmdBindVertexBuffers2
+    before any draw call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE specifies that the
+    pname:depthTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthTestEnable before any draw call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE specifies that the
+    pname:depthWriteEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthWriteEnable before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP specifies that the
+    pname:depthCompareOp state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthCompareOp before any draw call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE specifies that the
+    pname:depthBoundsTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthBoundsTestEnable before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE specifies that the
+    pname:stencilTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetStencilTestEnable before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_STENCIL_OP specifies that the pname:failOp,
+    pname:passOp, pname:depthFailOp, and pname:compareOp states in
+    sname:VkPipelineDepthStencilStateCreateInfo for both pname:front and
+    pname:back will be ignored and must: be set dynamically with
+    flink:vkCmdSetStencilOp before any draws are performed with a pipeline
+    state with sname:VkPipelineDepthStencilStateCreateInfo member
+    pname:stencilTestEnable set to ename:VK_TRUE
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT specifies that the
+    pname:patchControlPoints state in
+    slink:VkPipelineTessellationStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetPatchControlPointsEXT before any
+    drawing commands.
+endif::VK_EXT_extended_dynamic_state2[]
+  * ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE specifies that the
+    pname:rasterizerDiscardEnable state in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetRasterizerDiscardEnable before any
+    drawing commands.
+  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE specifies that the
+    pname:depthBiasEnable state in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetDepthBiasEnable before any drawing
+    commands.
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT specifies that the pname:logicOp
+    state in slink:VkPipelineColorBlendStateCreateInfo will be ignored and
+    must: be set dynamically with flink:vkCmdSetLogicOpEXT before any
+    drawing commands.
+endif::VK_EXT_extended_dynamic_state2[]
+  * ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE specifies that the
+    pname:primitiveRestartEnable state in
+    slink:VkPipelineInputAssemblyStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetPrimitiveRestartEnable before any
+    drawing commands.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR specifies that state in
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR
+ifdef::VK_NV_fragment_shading_rate_enums[]
+    and slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV
+endif::VK_NV_fragment_shading_rate_enums[]
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetFragmentShadingRateKHR
+ifdef::VK_NV_fragment_shading_rate_enums[]
+    or flink:vkCmdSetFragmentShadingRateEnumNV
+endif::VK_NV_fragment_shading_rate_enums[]
+    before any drawing commands.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR specifies
+    that the default stack size computation for the pipeline will be ignored
+    and must: be set dynamically with
+    flink:vkCmdSetRayTracingPipelineStackSizeKHR before any ray tracing
+    calls are performed.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT specifies that the
+    pname:pVertexInputState state will be ignored and must: be set
+    dynamically with flink:vkCmdSetVertexInputEXT before any drawing
+    commands
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifdef::VK_EXT_color_write_enable[]
+  * ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT specifies that the
+    pname:pColorWriteEnables state in
+    slink:VkPipelineColorWriteCreateInfoEXT will be ignored and must: be set
+    dynamically with flink:vkCmdSetColorWriteEnableEXT before any draw call.
+endif::VK_EXT_color_write_enable[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+  * ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT specifies that the
+    pname:domainOrigin state in
+    slink:VkPipelineTessellationDomainOriginStateCreateInfo will be ignored
+    and must: be set dynamically with
+    flink:vkCmdSetTessellationDomainOriginEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT specifies that the
+    pname:depthClampEnable state in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetDepthClampEnableEXT before any
+    draw call.
+  * ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT specifies that the
+    pname:polygonMode state in slink:VkPipelineRasterizationStateCreateInfo
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetPolygonModeEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT specifies that the
+    pname:rasterizationSamples state in
+    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetRasterizationSamplesEXT before any
+    draw call.
+  * ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT specifies that the
+    pname:pSampleMask state in slink:VkPipelineMultisampleStateCreateInfo
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetSampleMaskEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT specifies that the
+    pname:alphaToCoverageEnable state in
+    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetAlphaToCoverageEnableEXT before any
+    draw call.
+  * ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT specifies that the
+    pname:alphaToOneEnable state in
+    slink:VkPipelineMultisampleStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetAlphaToOneEnableEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT specifies that the
+    pname:logicOpEnable state in slink:VkPipelineColorBlendStateCreateInfo
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetLogicOpEnableEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT specifies that the
+    pname:blendEnable state in slink:VkPipelineColorBlendAttachmentState
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetColorBlendEnableEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT specifies that the
+    pname:srcColorBlendFactor, pname:dstColorBlendFactor,
+    pname:colorBlendOp, pname:srcAlphaBlendFactor,
+    pname:dstAlphaBlendFactor, and pname:alphaBlendOp states in
+    slink:VkPipelineColorBlendAttachmentState will be ignored and must: be
+    set dynamically with flink:vkCmdSetColorBlendEquationEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT specifies that the
+    pname:colorWriteMask state in slink:VkPipelineColorBlendAttachmentState
+    will be ignored and must: be set dynamically with
+    flink:vkCmdSetColorWriteMaskEXT before any draw call.
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT specifies that the
+    pname:rasterizationStream state in
+    slink:VkPipelineRasterizationStateStreamCreateInfoEXT will be ignored
+    and must: be set dynamically with flink:vkCmdSetRasterizationStreamEXT
+    before any draw call.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_conservative_rasterization[]
+  * ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT specifies
+    that the pname:conservativeRasterizationMode state in
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetConservativeRasterizationModeEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT specifies
+    that the pname:extraPrimitiveOverestimationSize state in
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT before any draw call.
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_depth_clip_enable[]
+  * ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT specifies that the
+    pname:depthClipEnable state in
+    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT will be ignored
+    and must: be set dynamically with flink:vkCmdSetDepthClipEnableEXT
+    before any draw call.
+endif::VK_EXT_depth_clip_enable[]
+ifdef::VK_EXT_sample_locations[]
+  * ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT specifies that the
+    pname:sampleLocationsEnable state in
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetSampleLocationsEnableEXT
+    before any draw call.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT specifies that the
+    pname:colorBlendOp state in slink:VkPipelineColorBlendAttachmentState,
+    and pname:srcPremultiplied, pname:dstPremultiplied, and
+    pname:blendOverlap states in
+    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetColorBlendAdvancedEXT before
+    any draw call.
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_EXT_provoking_vertex[]
+  * ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT specifies that the
+    pname:provokingVertexMode state in
+    slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetProvokingVertexModeEXT before any draw call.
+endif::VK_EXT_provoking_vertex[]
+ifdef::VK_EXT_line_rasterization[]
+  * ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT specifies that the
+    pname:lineRasterizationMode state in
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetLineRasterizationModeEXT
+    before any draw call.
+  * ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT specifies that the
+    pname:stippledLineEnable state in
+    slink:VkPipelineRasterizationLineStateCreateInfoEXT will be ignored and
+    must: be set dynamically with flink:vkCmdSetLineStippleEnableEXT before
+    any draw call.
+endif::VK_EXT_line_rasterization[]
+ifdef::VK_EXT_depth_clip_control[]
+  * ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT specifies that
+    the pname:negativeOneToOne state in
+    slink:VkPipelineViewportDepthClipControlCreateInfoEXT will be ignored
+    and must: be set dynamically with
+    flink:vkCmdSetDepthClipNegativeOneToOneEXT before any draw call.
+endif::VK_EXT_depth_clip_control[]
+ifdef::VK_NV_clip_space_w_scaling[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV specifies that the
+    pname:viewportWScalingEnable state in
+    slink:VkPipelineViewportWScalingStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetViewportWScalingEnableNV
+    before any draw call.
+endif::VK_NV_clip_space_w_scaling[]
+ifdef::VK_NV_viewport_swizzle[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV specifies that the
+    pname:viewportCount, and pname:pViewportSwizzles states in
+    slink:VkPipelineViewportSwizzleStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetViewportSwizzleNV before any
+    draw call.
+endif::VK_NV_viewport_swizzle[]
+ifdef::VK_NV_fragment_coverage_to_color[]
+  * ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV specifies that the
+    pname:coverageToColorEnable state in
+    slink:VkPipelineCoverageToColorStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetCoverageToColorEnableNV
+    before any draw call.
+  * ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV specifies that the
+    pname:coverageToColorLocation state in
+    slink:VkPipelineCoverageToColorStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetCoverageToColorLocationNV
+    before any draw call.
+endif::VK_NV_fragment_coverage_to_color[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV specifies that the
+    pname:coverageModulationMode state in
+    slink:VkPipelineCoverageModulationStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetCoverageModulationModeNV
+    before any draw call.
+  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV specifies
+    that the pname:coverageModulationTableEnable state in
+    slink:VkPipelineCoverageModulationStateCreateInfoNV will be ignored and
+    must: be set dynamically with
+    flink:vkCmdSetCoverageModulationTableEnableNV before any draw call.
+  * ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV specifies that the
+    pname:coverageModulationTableCount, and pname:pCoverageModulationTable
+    states in slink:VkPipelineCoverageModulationStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetCoverageModulationTableNV before any draw call.
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_NV_shading_rate_image[]
+  * ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV specifies that the
+    pname:shadingRateImageEnable state in
+    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetShadingRateImageEnableNV before any draw call.
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_NV_representative_fragment_test[]
+  * ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV specifies
+    that the pname:representativeFragmentTestEnable state in
+    slink:VkPipelineRepresentativeFragmentTestStateCreateInfoNV will be
+    ignored and must: be set dynamically with
+    flink:vkCmdSetRepresentativeFragmentTestEnableNV before any draw call.
+endif::VK_NV_representative_fragment_test[]
+ifdef::VK_NV_coverage_reduction_mode[]
+  * ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV specifies that the
+    pname:coverageReductionMode state in
+    slink:VkPipelineCoverageReductionStateCreateInfoNV will be ignored and
+    must: be set dynamically with flink:vkCmdSetCoverageReductionModeNV
+    before any draw call.
+endif::VK_NV_coverage_reduction_mode[]
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT specifies
+    that the ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    and
+    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
+    flags will be ignored and must: be set dynamically with
+    flink:vkCmdSetAttachmentFeedbackLoopEnableEXT before any draw call.
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+endif::VK_EXT_extended_dynamic_state3[]
+--
+
+
+=== Valid Combinations of Stages for Graphics Pipelines
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Primitive processing can be handled either on a per primitive basis by the
+vertex, tessellation, and geometry shader stages, or on a per mesh basis
+using task and mesh shader stages.
+If the pipeline includes a mesh shader stage, it uses the mesh pipeline,
+otherwise it uses the primitive pipeline.
+
+If a task shader is omitted, the task shading stage is skipped.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+If tessellation shader stages are omitted, the tessellation shading and
+fixed-function stages of the pipeline are skipped.
+
+If a geometry shader is omitted, the geometry shading stage is skipped.
+
+If a fragment shader is omitted, fragment color outputs have undefined:
+values, and the fragment depth value is determined by <<fragops, Fragment
+Operations>> state.
+This can: be useful for depth-only rendering.
+
+Presence of a shader stage in a pipeline is indicated by including a valid
+slink:VkPipelineShaderStageCreateInfo with pname:module and pname:pName
+selecting an entry point from a shader module, where that entry point is
+valid for the stage specified by pname:stage.
+
+Presence of some of the fixed-function stages in the pipeline is implicitly
+derived from enabled shaders and provided state.
+For example, the fixed-function tessellator is always present when the
+pipeline has valid Tessellation Control and Tessellation Evaluation shaders.
+
+.For example:
+  * Depth/stencil-only rendering in a subpass with no color attachments
+  ** Active Pipeline Shader Stages
+  *** Vertex Shader
+  ** Required: Fixed-Function Pipeline Stages
+  *** slink:VkPipelineVertexInputStateCreateInfo
+  *** slink:VkPipelineInputAssemblyStateCreateInfo
+  *** slink:VkPipelineViewportStateCreateInfo
+  *** slink:VkPipelineRasterizationStateCreateInfo
+  *** slink:VkPipelineMultisampleStateCreateInfo
+  *** slink:VkPipelineDepthStencilStateCreateInfo
+  * Color-only rendering in a subpass with no depth/stencil attachment
+  ** Active Pipeline Shader Stages
+  *** Vertex Shader
+  *** Fragment Shader
+  ** Required: Fixed-Function Pipeline Stages
+  *** slink:VkPipelineVertexInputStateCreateInfo
+  *** slink:VkPipelineInputAssemblyStateCreateInfo
+  *** slink:VkPipelineViewportStateCreateInfo
+  *** slink:VkPipelineRasterizationStateCreateInfo
+  *** slink:VkPipelineMultisampleStateCreateInfo
+  *** slink:VkPipelineColorBlendStateCreateInfo
+  * Rendering pipeline with tessellation and geometry shaders
+  ** Active Pipeline Shader Stages
+  *** Vertex Shader
+  *** Tessellation Control Shader
+  *** Tessellation Evaluation Shader
+  *** Geometry Shader
+  *** Fragment Shader
+  ** Required: Fixed-Function Pipeline Stages
+  *** slink:VkPipelineVertexInputStateCreateInfo
+  *** slink:VkPipelineInputAssemblyStateCreateInfo
+  *** slink:VkPipelineTessellationStateCreateInfo
+  *** slink:VkPipelineViewportStateCreateInfo
+  *** slink:VkPipelineRasterizationStateCreateInfo
+  *** slink:VkPipelineMultisampleStateCreateInfo
+  *** slink:VkPipelineDepthStencilStateCreateInfo
+  *** slink:VkPipelineColorBlendStateCreateInfo
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * Rendering pipeline with task and mesh shaders
+  ** Active Pipeline Shader Stages
+  *** Task Shader
+  *** Mesh Shader
+  *** Fragment Shader
+  ** Required: Fixed-Function Pipeline Stages
+  *** slink:VkPipelineViewportStateCreateInfo
+  *** slink:VkPipelineRasterizationStateCreateInfo
+  *** slink:VkPipelineMultisampleStateCreateInfo
+  *** slink:VkPipelineDepthStencilStateCreateInfo
+  *** slink:VkPipelineColorBlendStateCreateInfo
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+
+ifdef::VK_NV_device_generated_commands[]
+[[graphics-shadergroups]]
+=== Graphics Pipeline Shader Groups
+
+Graphics pipelines can contain multiple shader groups that can be bound
+individually.
+Each shader group behaves as if it was a pipeline using the shader group's
+state.
+When the pipeline is bound by regular means, it behaves as if the state of
+group `0` is active, use flink:vkCmdBindPipelineShaderGroupNV to bind an
+individual shader group.
+
+The primary purpose of shader groups is allowing the device to bind
+different pipeline state using <<device-generated-commands>>.
+
+[open,refpage='VkGraphicsPipelineShaderGroupsCreateInfoNV',desc='Structure specifying parameters of a newly created multi shader group pipeline',type='structs']
+--
+The sname:VkGraphicsPipelineShaderGroupsCreateInfoNV structure is defined
+as:
+
+include::{generated}/api/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:groupCount is the number of elements in the pname:pGroups array.
+  * pname:pGroups is a pointer to an array of
+    slink:VkGraphicsShaderGroupCreateInfoNV structures specifying which
+    state of the original slink:VkGraphicsPipelineCreateInfo each shader
+    group overrides.
+  * pname:pipelineCount is the number of elements in the pname:pPipelines
+    array.
+  * pname:pPipelines is a pointer to an array of graphics sname:VkPipeline
+    structures which are referenced within the created pipeline, including
+    all their shader groups.
+
+When referencing shader groups by index, groups defined in the referenced
+pipelines are treated as if they were defined as additional entries in
+pname:pGroups.
+They are appended in the order they appear in the pname:pPipelines array and
+in the pname:pGroups array when those pipelines were defined.
+
+The application must: maintain the lifetime of all such referenced pipelines
+based on the pipelines that make use of them.
+
+.Valid Usage
+****
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879]]
+    pname:groupCount must: be at least `1` and as maximum
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880]]
+    The sum of pname:groupCount including those groups added from referenced
+    pname:pPipelines must: also be as maximum
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::pname:maxGraphicsShaderGroupCount
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881]]
+    The state of the first element of pname:pGroups must: match its
+    equivalent within the parent's slink:VkGraphicsPipelineCreateInfo
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882]]
+    Each element of pname:pGroups must: in combination with the rest of the
+    pipeline state yield a valid state configuration
+ifndef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02883]]
+    All elements of pname:pGroups must: use the same shader stage
+    combinations
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884]]
+    All elements of pname:pGroups must: use the same shader stage
+    combinations unless any mesh shader stage is used, then either
+    combination of task and mesh or just mesh shader is valid
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885]]
+    Mesh and regular primitive shading stages cannot be mixed across
+    pname:pGroups
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886]]
+    Each element of pname:pPipelines must: have been created with identical
+    state to the pipeline currently created except the state that can be
+    overridden by slink:VkGraphicsShaderGroupCreateInfoNV
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887]]
+    The <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkGraphicsShaderGroupCreateInfoNV',desc='Structure specifying override parameters for each shader group',type='structs']
+--
+The sname:VkGraphicsShaderGroupCreateInfoNV structure provides the state
+overrides for each shader group.
+Each shader group behaves like a pipeline that was created from its state as
+well as the remaining parent's state.
+It is defined as:
+
+include::{generated}/api/structs/VkGraphicsShaderGroupCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stageCount is the number of entries in the pname:pStages array.
+  * pname:pStages is a pointer to an array
+    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
+    the shader stages to be included in this shader group.
+  * pname:pVertexInputState is a pointer to a
+    slink:VkPipelineVertexInputStateCreateInfo structure.
+  * pname:pTessellationState is a pointer to a
+    slink:VkPipelineTessellationStateCreateInfo structure, and is ignored if
+    the shader group does not include a tessellation control shader stage
+    and tessellation evaluation shader stage.
+
+.Valid Usage
+****
+  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888]]
+    For pname:stageCount, the same restrictions as in
+    slink:VkGraphicsPipelineCreateInfo::pname:stageCount apply
+  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889]]
+    For pname:pStages, the same restrictions as in
+    slink:VkGraphicsPipelineCreateInfo::pname:pStages apply
+  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890]]
+    For pname:pVertexInputState, the same restrictions as in
+    slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState apply
+  * [[VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891]]
+    For pname:pTessellationState, the same restrictions as in
+    slink:VkGraphicsPipelineCreateInfo::pname:pTessellationState apply
+****
+
+include::{generated}/validity/structs/VkGraphicsShaderGroupCreateInfoNV.adoc[]
+--
+endif::VK_NV_device_generated_commands[]
+
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[pipelines-ray-tracing]]
+== Ray Tracing Pipelines
+
+Ray tracing pipelines consist of multiple shader stages, fixed-function
+traversal stages, and a pipeline layout.
+
+[open,refpage='VK_SHADER_UNUSED_KHR',desc='Sentinel for an unused shader index',type='consts',alias='VK_SHADER_UNUSED_NV']
+--
+ename:VK_SHADER_UNUSED_KHR is a special shader index used to indicate that a
+ray generation, miss, or callable shader member is not used.
+
+include::{generated}/api/enums/VK_SHADER_UNUSED_KHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VK_SHADER_UNUSED_NV.adoc[]
+endif::VK_NV_ray_tracing[]
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='vkCreateRayTracingPipelinesNV',desc='Creates a new ray tracing pipeline object',type='protos']
+--
+:refpage: vkCreateRayTracingPipelinesNV
+
+To create ray tracing pipelines, call:
+
+include::{generated}/api/protos/vkCreateRayTracingPipelinesNV.adoc[]
+
+  * pname:device is the logical device that creates the ray tracing
+    pipelines.
+ifndef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
+    pipeline caching is disabled, or the handle of a valid
+    <<pipelines-cache,pipeline cache>> object, in which case use of that
+    cache is enabled for the duration of the command.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
+    cache>> object.
+endif::VKSC_VERSION_1_0[]
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pPipelines arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkRayTracingPipelineCreateInfoNV structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelines is a pointer to an array in which the resulting ray
+    tracing pipeline objects are returned.
+
+ifdef::VKSC_VERSION_1_0[]
+If a pipeline creation fails due to:
+
+  * The identified pipeline not being present in pname:pipelineCache
+  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
+    structure
+
+the operation will continue as specified in <<pipelines-multiple, Multiple
+Pipeline Creation>> and the command will return
+ename:VK_ERROR_NO_PIPELINE_MATCH.
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_NV_ray_tracing[]
+  * flink:vkCreateRayTracingPipelinesNV returns
+    ename:VK_ERROR_NO_PIPELINE_MATCH if the
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pNext chain does not
+    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
+endif::VK_NV_ray_tracing[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.adoc[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_NV_ray_tracing[]
+  * flink:vkCreateRayTracingPipelinesNV::pname:pipelineCache must: not be
+    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
+endif::VK_NV_ray_tracing[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateRayTracingPipelinesNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='vkCreateRayTracingPipelinesKHR',desc='Creates a new ray tracing pipeline object',type='protos']
+--
+:refpage: vkCreateRayTracingPipelinesKHR
+
+To create ray tracing pipelines, call:
+
+include::{generated}/api/protos/vkCreateRayTracingPipelinesKHR.adoc[]
+
+  * pname:device is the logical device that creates the ray tracing
+    pipelines.
+  * pname:deferredOperation is dlink:VK_NULL_HANDLE or the handle of a valid
+    slink:VkDeferredOperationKHR <<deferred-host-operations-requesting,
+    request deferral>> object for this command.
+ifndef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is either dlink:VK_NULL_HANDLE, indicating that
+    pipeline caching is disabled, or the handle of a valid
+    <<pipelines-cache,pipeline cache>> object, in which case use of that
+    cache is enabled for the duration of the command.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * pname:pipelineCache is the handle of a valid <<pipelines-cache,pipeline
+    cache>> object.
+endif::VKSC_VERSION_1_0[]
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pPipelines arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkRayTracingPipelineCreateInfoKHR structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelines is a pointer to an array in which the resulting ray
+    tracing pipeline objects are returned.
+
+The ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS error is returned if the
+implementation is unable to reuse the shader group handles provided in
+slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
+when
+slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+is enabled.
+
+ifdef::VKSC_VERSION_1_0[]
+If a pipeline creation fails due to:
+
+  * The identified pipeline not being present in pname:pipelineCache
+  * The pname:pNext chain not including a slink:VkPipelineOfflineCreateInfo
+    structure
+
+the operation will continue as specified in <<pipelines-multiple, Multiple
+Pipeline Creation>> and the command will return
+ename:VK_ERROR_NO_PIPELINE_MATCH.
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * flink:vkCreateRayTracingPipelinesKHR returns
+    ename:VK_ERROR_NO_PIPELINE_MATCH if the
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pNext chain does not
+    include a valid slink:VkPipelineOfflineCreateInfo structure <<SCID-1>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.adoc[]
+include::{chapters}/commonvalidity/deferred_operations_common.adoc[]
+  * [[VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586]]
+    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> feature
+    must: be enabled
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_KHR_deferred_host_operations[]
+  * [[VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03587]]
+    If pname:deferredOperation is not dlink:VK_NULL_HANDLE, the pname:flags
+    member of elements of pname:pCreateInfos must: not include
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
+endif::VK_KHR_deferred_host_operations[]
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * flink:vkCreateRayTracingPipelinesKHR::pname:pipelineCache must: not be
+    dlink:VK_NULL_HANDLE <<SCID-1>>, <<SCID-8>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateRayTracingPipelinesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkRayTracingPipelineCreateInfoNV',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
+--
+:refpage: VkRayTracingPipelineCreateInfoNV
+
+The sname:VkRayTracingPipelineCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkRayTracingPipelineCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
+    how the pipeline will be generated.
+  * pname:stageCount is the number of entries in the pname:pStages array.
+  * pname:pStages is a pointer to an array of
+    slink:VkPipelineShaderStageCreateInfo structures specifying the set of
+    the shader stages to be included in the ray tracing pipeline.
+  * pname:groupCount is the number of entries in the pname:pGroups array.
+  * pname:pGroups is a pointer to an array of
+    slink:VkRayTracingShaderGroupCreateInfoNV structures describing the set
+    of the shader stages to be included in each shader group in the ray
+    tracing pipeline.
+  * pname:maxRecursionDepth is the <<ray-tracing-recursion-depth, maximum
+    recursion depth>> of shaders executed by this pipeline.
+  * pname:layout is the description of binding locations used by both the
+    pipeline and descriptor sets used with the pipeline.
+  * pname:basePipelineHandle is a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * pname:basePipelineIndex is an index into the pname:pCreateInfos
+    parameter to use as a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+The parameters pname:basePipelineHandle and pname:basePipelineIndex are
+described in more detail in <<pipelines-pipeline-derivatives,Pipeline
+Derivatives>>.
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
+from that structure is used instead of pname:flags from this structure.
+endif::VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+:pipelineType: ray tracing
+include::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
+include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.adoc[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-stage-06232]]
+    The pname:stage member of at least one element of pname:pStages must: be
+    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
+ifdef::VK_KHR_pipeline_library[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03456]]
+    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_KHR_pipeline_library[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457]]
+    pname:maxRecursionDepth must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03458]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03459]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03460]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03461]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03462]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03463]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-03588]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-04948]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-02957]]
+    pname:flags must: not include both
+    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV and
+    ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT at the
+    same time
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-pipelineStageCreationFeedbackCount-06651]]
+    If
+    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
+    is not `0`, it must: be equal to pname:stageCount
+endif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-stage-06898]]
+    The pname:stage value in all pname:pStages elements must: be one of
+    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
+    ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_MISS_BIT_KHR,
+    ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-07402]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkRayTracingPipelineCreateInfoNV-flags-07998]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+endif::VK_NV_displacement_micromap[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_NV_ray_tracing[]
+  * slink:VkRayTracingPipelineCreateInfoNV::pname:basePipelineHandle must:
+    be dlink:VK_NULL_HANDLE <<SCID-8>>.
+  * slink:VkRayTracingPipelineCreateInfoNV::pname:basePipelineIndex must: be
+    zero <<SCID-8>>.
+endif::VK_NV_ray_tracing[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='VkRayTracingPipelineCreateInfoKHR',desc='Structure specifying parameters of a newly created ray tracing pipeline',type='structs']
+--
+:refpage: VkRayTracingPipelineCreateInfoKHR
+
+The sname:VkRayTracingPipelineCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkRayTracingPipelineCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkPipelineCreateFlagBits specifying
+    how the pipeline will be generated.
+  * pname:stageCount is the number of entries in the pname:pStages array.
+  * pname:pStages is a pointer to an array of pname:stageCount
+    slink:VkPipelineShaderStageCreateInfo structures describing the set of
+    the shader stages to be included in the ray tracing pipeline.
+  * pname:groupCount is the number of entries in the pname:pGroups array.
+  * pname:pGroups is a pointer to an array of pname:groupCount
+    slink:VkRayTracingShaderGroupCreateInfoKHR structures describing the set
+    of the shader stages to be included in each shader group in the ray
+    tracing pipeline.
+  * pname:maxPipelineRayRecursionDepth is the <<ray-tracing-recursion-depth,
+    maximum recursion depth>> of shaders executed by this pipeline.
+  * pname:pLibraryInfo is a pointer to a
+    slink:VkPipelineLibraryCreateInfoKHR structure defining pipeline
+    libraries to include.
+  * pname:pLibraryInterface is a pointer to a
+    slink:VkRayTracingPipelineInterfaceCreateInfoKHR structure defining
+    additional information when using pipeline libraries.
+  * pname:pDynamicState is a pointer to a
+    slink:VkPipelineDynamicStateCreateInfo structure, and is used to
+    indicate which properties of the pipeline state object are dynamic and
+    can: be changed independently of the pipeline state.
+    This can: be `NULL`, which means no state in the pipeline is considered
+    dynamic.
+  * pname:layout is the description of binding locations used by both the
+    pipeline and descriptor sets used with the pipeline.
+  * pname:basePipelineHandle is a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * pname:basePipelineIndex is an index into the pname:pCreateInfos
+    parameter to use as a pipeline to derive from.
+ifdef::VKSC_VERSION_1_0[]
+    This is not used in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+The parameters pname:basePipelineHandle and pname:basePipelineIndex are
+described in more detail in <<pipelines-pipeline-derivatives,Pipeline
+Derivatives>>.
+
+ifdef::VK_KHR_pipeline_library[]
+When ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR is specified, this pipeline
+defines a _pipeline library_ which cannot: be bound as a ray tracing
+pipeline directly.
+Instead, pipeline libraries define common shaders and shader groups which
+can: be included in future pipeline creation.
+
+If pipeline libraries are included in pname:pLibraryInfo, shaders defined in
+those libraries are treated as if they were defined as additional entries in
+pname:pStages, appended in the order they appear in the pname:pLibraries
+array and in the pname:pStages array when those libraries were defined.
+
+When referencing shader groups in order to obtain a shader group handle,
+groups defined in those libraries are treated as if they were defined as
+additional entries in pname:pGroups, appended in the order they appear in
+the pname:pLibraries array and in the pname:pGroups array when those
+libraries were defined.
+The shaders these groups reference are set when the pipeline library is
+created, referencing those specified in the pipeline library, not in the
+pipeline that includes it.
+endif::VK_KHR_pipeline_library[]
+
+The default stack size for a pipeline if
+ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR is not provided
+is computed as described in <<ray-tracing-pipeline-stack, Ray Tracing
+Pipeline Stack>>.
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkPipelineCreateFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkPipelineCreateFlags2CreateInfoKHR::pname:flags
+from that structure is used instead of pname:flags from this structure.
+endif::VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+:pipelineType: ray tracing
+include::{chapters}/commonvalidity/pipeline_create_info_common.adoc[]
+include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.adoc[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425]]
+    If pname:flags does not include
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pname:stage member of at
+    least one element of pname:pStages, including those implicitly added by
+    pname:pLibraryInfo, must: be ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-maxPipelineRayRecursionDepth-03589]]
+    pname:maxPipelineRayRecursionDepth must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth
+ifdef::VK_KHR_pipeline_library[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465]]
+    If pname:flags includes ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
+    pname:pLibraryInterface must: not be `NULL`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03590]]
+    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount member is
+    greater than `0`, pname:pLibraryInterface must: not be `NULL`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591]]
+    Each element of pname:pLibraryInfo->pLibraries must: have been created
+    with the value of pname:maxPipelineRayRecursionDepth equal to that in
+    this pipeline
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592]]
+    If pname:pLibraryInfo is not `NULL`, each element of its
+    pname:pLibraries member must: have been created with a pname:layout that
+    is compatible with the pname:layout in this pipeline
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03593]]
+    If pname:pLibraryInfo is not `NULL`, each element of its
+    pname:pLibraries member must: have been created with values of the
+    pname:maxPipelineRayPayloadSize and pname:maxPipelineRayHitAttributeSize
+    members of pname:pLibraryInterface equal to those in this pipeline
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03594]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
+    each element of pname:pLibraryInfo->pLibraries must: have been created
+    with the
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+    bit set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, each element of
+    pname:pLibraryInfo->pLibraries must: have been created with the
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR bit set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, each
+    element of pname:pLibraryInfo->pLibraries must: have been created with
+    the ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR bit set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
+    each element of pname:pLibraryInfo->pLibraries must: have been created
+    with the
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR bit
+    set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+    each element of pname:pLibraryInfo->pLibraries must: have been created
+    with the
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+    bit set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
+    each element of pname:pLibraryInfo->pLibraries must: have been created
+    with the
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+    bit set
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, each
+    element of pname:pLibraryInfo->pLibraries must: have been created with
+    the ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+    bit set
+endif::VK_KHR_pipeline_library[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595]]
+    If the `apiext:VK_KHR_pipeline_library` extension is not enabled,
+    pname:pLibraryInfo and pname:pLibraryInterface must: be `NULL`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
+    for any element of pname:pGroups with a pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
+    pname:anyHitShader of that element must: not be
+    ename:VK_SHADER_UNUSED_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+    for any element of pname:pGroups with a pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the
+    pname:closestHitShader of that element must: not be
+    ename:VK_SHADER_UNUSED_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03596]]
+    If the <<features-rayTraversalPrimitiveCulling,
+    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03597]]
+    If the <<features-rayTraversalPrimitiveCulling,
+    pname:rayTraversalPrimitiveCulling>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-06546]]
+    pname:flags must: not include both
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR and
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
+    <<features-rayTracingPipelineShaderGroupHandleCaptureReplay,
+    pname:rayTracingPipelineShaderGroupHandleCaptureReplay>> must: be
+    enabled
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03599]]
+    If
+    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+    is ename:VK_TRUE and the pname:pShaderGroupCaptureReplayHandle member of
+    any element of pname:pGroups is not `NULL`, pname:flags must: include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-07999]]
+    If pname:pLibraryInfo is `NULL` or its pname:libraryCount is `0`,
+    pname:stageCount must: not be `0`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-08700]]
+    If pname:flags does not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+    and either pname:pLibraryInfo is `NULL` or its pname:libraryCount is
+    `0`, pname:groupCount must: not be `0`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602]]
+    Any element of the pname:pDynamicStates member of pname:pDynamicState
+    must: be ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR
+ifdef::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pipelineStageCreationFeedbackCount-06652]]
+    If
+    slink:VkPipelineCreationFeedbackCreateInfo::pname:pipelineStageCreationFeedbackCount
+    is not `0`, it must: be equal to pname:stageCount
+endif::VK_EXT_pipeline_creation_feedback,VK_VERSION_1_3[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-stage-06899]]
+    The pname:stage value in all pname:pStages elements must: be one of
+    ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
+    ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_MISS_BIT_KHR,
+    ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
+ifdef::VK_EXT_opacity_micromap[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-07403]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT, each
+    element of pname:pLibraryInfo->pLibraries must: have been created with
+    the ename:VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT bit
+    set
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-flags-08701]]
+    If pname:flags includes
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV, each
+    element of pname:pLibraryInfo->pLibraries must: have been created with
+    the ename:VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV
+    bit set
+endif::VK_NV_displacement_micromap[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * slink:VkRayTracingPipelineCreateInfoKHR::pname:flags must: not contain
+    the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag <<SCID-8>>.
+  * slink:VkRayTracingPipelineCreateInfoKHR::pname:basePipelineHandle must:
+    be dlink:VK_NULL_HANDLE <<SCID-8>>.
+  * slink:VkRayTracingPipelineCreateInfoKHR::pname:basePipelineIndex must:
+    be zero <<SCID-8>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkRayTracingShaderGroupCreateInfoNV',desc='Structure specifying shaders in a shader group',type='structs']
+--
+:refpage: VkRayTracingShaderGroupCreateInfoNV
+
+The sname:VkRayTracingShaderGroupCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is the type of hit group specified in this structure.
+  * pname:generalShader is the index of the ray generation, miss, or
+    callable shader from
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV, and
+    ename:VK_SHADER_UNUSED_NV otherwise.
+  * pname:closestHitShader is the optional index of the closest hit shader
+    from slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group
+    if the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
+    ename:VK_SHADER_UNUSED_NV otherwise.
+  * pname:anyHitShader is the optional index of the any-hit shader from
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
+    ename:VK_SHADER_UNUSED_NV otherwise.
+  * pname:intersectionShader is the index of the intersection shader from
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV, and
+    ename:VK_SHADER_UNUSED_NV otherwise.
+
+.Valid Usage
+****
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413]]
+    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
+    pname:generalShader must: be a valid index into
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
+    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_NV,
+    ename:VK_SHADER_STAGE_MISS_BIT_NV, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_NV
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414]]
+    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then
+    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
+    must: be ename:VK_SHADER_UNUSED_NV
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415]]
+    If pname:type is
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV then
+    pname:intersectionShader must: be a valid index into
+    slink:VkRayTracingPipelineCreateInfoNV::pname:pStages referring to a
+    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_NV
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416]]
+    If pname:type is
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV then
+    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_NV
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417]]
+    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_NV or a
+    valid index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
+    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV
+  * [[VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418]]
+    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_NV or a valid
+    index into slink:VkRayTracingPipelineCreateInfoNV::pname:pStages
+    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV
+****
+
+include::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoNV.adoc[]
+--
+
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='VkRayTracingShaderGroupCreateInfoKHR',desc='Structure specifying shaders in a shader group',type='structs']
+--
+:refpage: VkRayTracingShaderGroupCreateInfoKHR
+
+The sname:VkRayTracingShaderGroupCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkRayTracingShaderGroupCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is the type of hit group specified in this structure.
+  * pname:generalShader is the index of the ray generation, miss, or
+    callable shader from
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, and
+    ename:VK_SHADER_UNUSED_KHR otherwise.
+  * pname:closestHitShader is the optional index of the closest hit shader
+    from slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group
+    if the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
+    ename:VK_SHADER_UNUSED_KHR otherwise.
+  * pname:anyHitShader is the optional index of the any-hit shader from
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
+    ename:VK_SHADER_UNUSED_KHR otherwise.
+  * pname:intersectionShader is the index of the intersection shader from
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages in the group if
+    the shader group has pname:type of
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, and
+    ename:VK_SHADER_UNUSED_KHR otherwise.
+  * pname:pShaderGroupCaptureReplayHandle is `NULL` or a pointer to replay
+    information for this shader group queried from
+    flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, as described in
+    <<ray-tracing-capture-replay, Ray Tracing Capture Replay>>.
+    Ignored if
+    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+    is ename:VK_FALSE.
+
+ifdef::VK_EXT_pipeline_library_group_handles[]
+If the pipeline is created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and
+the <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
+feature is enabled, pname:pShaderGroupCaptureReplayHandle is inherited by
+all pipelines which link against this pipeline and remains bitwise identical
+for any pipeline which references this pipeline library.
+endif::VK_EXT_pipeline_library_group_handles[]
+
+.Valid Usage
+****
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474]]
+    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
+    pname:generalShader must: be a valid index into
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
+    shader of ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
+    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475]]
+    If pname:type is ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then
+    pname:closestHitShader, pname:anyHitShader, and pname:intersectionShader
+    must: be ename:VK_SHADER_UNUSED_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476]]
+    If pname:type is
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR then
+    pname:intersectionShader must: be a valid index into
+    slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages referring to a
+    shader of ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477]]
+    If pname:type is
+    ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR then
+    pname:intersectionShader must: be ename:VK_SHADER_UNUSED_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478]]
+    pname:closestHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a
+    valid index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
+    referring to a shader of ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479]]
+    pname:anyHitShader must: be either ename:VK_SHADER_UNUSED_KHR or a valid
+    index into slink:VkRayTracingPipelineCreateInfoKHR::pname:pStages
+    referring to a shader of ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03603]]
+    If
+    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
+    is ename:VK_FALSE then pname:pShaderGroupCaptureReplayHandle must: not
+    be provided if it has not been provided on a previous call to ray
+    tracing pipeline creation
+  * [[VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03604]]
+    If
+    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplayMixed
+    is ename:VK_FALSE then the caller must: guarantee that no ray tracing
+    pipeline creation commands with pname:pShaderGroupCaptureReplayHandle
+    provided execute simultaneously with ray tracing pipeline creation
+    commands without pname:pShaderGroupCaptureReplayHandle provided
+****
+
+include::{generated}/validity/structs/VkRayTracingShaderGroupCreateInfoKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+[open,refpage='VkRayTracingShaderGroupTypeKHR',desc='Shader group types',type='enums',alias='VkRayTracingShaderGroupTypeNV']
+--
+:refpage: VkRayTracingShaderGroupTypeKHR
+
+Possible values of pname:type in sname:VkRayTracingShaderGroupCreateInfoKHR
+are:
+
+include::{generated}/api/enums/VkRayTracingShaderGroupTypeKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkRayTracingShaderGroupTypeNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR indicates a shader
+    group with a single ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
+    ename:VK_SHADER_STAGE_MISS_BIT_KHR, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR shader in it.
+  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR specifies
+    a shader group that only hits triangles and must: not contain an
+    intersection shader, only closest hit and any-hit shaders.
+  * ename:VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR
+    specifies a shader group that only intersects with custom geometry and
+    must: contain an intersection shader and may: contain closest hit and
+    any-hit shaders.
+
+[NOTE]
+.Note
+====
+For current group types, the hit group type could be inferred from the
+presence or absence of the intersection shader, but we provide the type
+explicitly for future hit groups that do not have that property.
+====
+--
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='VkRayTracingPipelineInterfaceCreateInfoKHR',desc='Structure specifying additional interface information when using libraries',type='structs']
+--
+:refpage: VkRayTracingPipelineInterfaceCreateInfoKHR
+
+The sname:VkRayTracingPipelineInterfaceCreateInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxPipelineRayPayloadSize is the maximum payload size in bytes
+    used by any shader in the pipeline.
+  * pname:maxPipelineRayHitAttributeSize is the maximum attribute structure
+    size in bytes used by any shader in the pipeline.
+
+pname:maxPipelineRayPayloadSize is calculated as the maximum number of bytes
+used by any block declared in the code:RayPayloadKHR or
+code:IncomingRayPayloadKHR storage classes.
+pname:maxPipelineRayHitAttributeSize is calculated as the maximum number of
+bytes used by any block declared in the code:HitAttributeKHR storage class.
+As variables in these storage classes do not have explicit offsets, the size
+should be calculated as if each variable has a
+<<interfaces-alignment-requirements, scalar alignment>> equal to the largest
+scalar alignment of any of the block's members.
+
+[NOTE]
+.Note
+====
+There is no explicit upper limit for pname:maxPipelineRayPayloadSize, but in
+practice it should be kept as small as possible.
+Similar to invocation local memory, it must be allocated for each shader
+invocation and for devices which support many simultaneous invocations, this
+storage can rapidly be exhausted, resulting in failure.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-maxPipelineRayHitAttributeSize-03605]]
+    pname:maxPipelineRayHitAttributeSize must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayHitAttributeSize
+****
+
+include::{generated}/validity/structs/VkRayTracingPipelineInterfaceCreateInfoKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+[open,refpage='vkGetRayTracingShaderGroupHandlesKHR',desc='Query ray tracing pipeline shader group handles',type='protos',alias='vkGetRayTracingShaderGroupHandlesNV']
+--
+:refpage: vkGetRayTracingShaderGroupHandlesKHR
+
+To query the opaque handles of shaders in the ray tracing pipeline, call:
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+include::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesKHR.adoc[]
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or the equivalent command]
+
+ifdef::VK_NV_ray_tracing[]
+include::{generated}/api/protos/vkGetRayTracingShaderGroupHandlesNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * pname:device is the logical device containing the ray tracing pipeline.
+  * pname:pipeline is the ray tracing pipeline object containing the
+    shaders.
+  * pname:firstGroup is the index of the first group to retrieve a handle
+    for from the
+ifdef::VK_KHR_ray_tracing_pipeline[]
+slink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_tracing_pipeline+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[]
+slink:VkRayTracingPipelineCreateInfoNV::pname:pGroups
+endif::VK_NV_ray_tracing[]
+    array.
+  * pname:groupCount is the number of shader handles to retrieve.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written.
+
+ifdef::VK_EXT_pipeline_library_group_handles[]
+If pname:pipeline was created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+and the <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
+feature is enabled applications can: query group handles from that pipeline,
+even if the pipeline is a library and is never bound to a command buffer.
+These group handles remain bitwise identical for any pname:pipeline which
+references the pipeline library.
+Group indices are assigned as-if the pipeline was created without
+ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
+endif::VK_EXT_pipeline_library_group_handles[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-04619]]
+    pname:pipeline must: be a ray tracing pipeline
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050]]
+    pname:firstGroup must: be less than the number of shader groups in
+    pname:pipeline
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419]]
+    The sum of pname:firstGroup and pname:groupCount must: be less than or
+    equal to the number of shader groups in pname:pipeline
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420]]
+    pname:dataSize must: be at least
+    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize
+    {times} pname:groupCount#
+ifdef::VK_KHR_pipeline_library[]
+ifdef::VK_EXT_pipeline_library_group_handles[]
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-07828]]
+    If the
+    <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
+    feature is not enabled, pname:pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_pipeline_library_group_handles[]
+ifndef::VK_EXT_pipeline_library_group_handles[]
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-03482]]
+    pname:pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_pipeline_library_group_handles[]
+endif::VK_KHR_pipeline_library[]
+****
+
+include::{generated}/validity/protos/vkGetRayTracingShaderGroupHandlesKHR.adoc[]
+--
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='vkGetRayTracingCaptureReplayShaderGroupHandlesKHR',desc='Query opaque capture replay data for pipeline shader group handles',type='protos']
+--
+:refpage: vkGetRayTracingCaptureReplayShaderGroupHandlesKHR
+
+To query the opaque capture data of shader groups in a ray tracing pipeline,
+call:
+
+include::{generated}/api/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.adoc[]
+
+  * pname:device is the logical device containing the ray tracing pipeline.
+  * pname:pipeline is the ray tracing pipeline object containing the
+    shaders.
+  * pname:firstGroup is the index of the first group to retrieve a handle
+    for from the slink:VkRayTracingPipelineCreateInfoKHR::pname:pGroups
+    array.
+  * pname:groupCount is the number of shader handles to retrieve.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written.
+
+Once queried, this opaque data can: be provided at pipeline creation time
+(in a subsequent execution), using
+slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle,
+as described in <<ray-tracing-capture-replay, Ray Tracing Capture Replay>>.
+
+ifdef::VK_EXT_pipeline_library_group_handles[]
+If pname:pipeline was created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+and the <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
+feature is enabled applications can: query capture replay group handles from
+that pipeline.
+The capture replay handle remains bitwise identical for any pname:pipeline
+which references the pipeline library.
+Group indices are assigned as-if the pipeline was created without
+ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR.
+endif::VK_EXT_pipeline_library_group_handles[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-04620]]
+    pname:pipeline must: be a ray tracing pipeline
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051]]
+    pname:firstGroup must: be less than the number of shader groups in
+    pname:pipeline
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483]]
+    The sum of pname:firstGroup and pname:groupCount must: be less than or
+    equal to the number of shader groups in pname:pipeline
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484]]
+    pname:dataSize must: be at least
+    [eq]#slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleCaptureReplaySize
+    {times} pname:groupCount#
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03606]]
+    sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+    must: be enabled to call this function
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-03607]]
+    pname:pipeline must: have been created with a pname:flags that included
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
+ifdef::VK_KHR_pipeline_library[]
+ifdef::VK_EXT_pipeline_library_group_handles[]
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-07829]]
+    If the
+    <<features-pipelineLibraryGroupHandles,pipelineLibraryGroupHandles>>
+    feature is not enabled, pname:pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_pipeline_library_group_handles[]
+ifndef::VK_EXT_pipeline_library_group_handles[]
+  * [[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-07830]]
+    pname:pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_pipeline_library_group_handles[]
+endif::VK_KHR_pipeline_library[]
+****
+
+include::{generated}/validity/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+Ray tracing pipelines can: contain more shaders than a graphics or compute
+pipeline, so to allow parallel compilation of shaders within a pipeline, an
+application can: choose to defer compilation until a later point in time.
+
+[open,refpage='vkCompileDeferredNV',desc='Deferred compilation of shaders',type='protos']
+--
+:refpage: vkCompileDeferredNV
+
+To compile a deferred shader in a pipeline call:
+
+include::{generated}/api/protos/vkCompileDeferredNV.adoc[]
+
+  * pname:device is the logical device containing the ray tracing pipeline.
+  * pname:pipeline is the ray tracing pipeline object containing the
+    shaders.
+  * pname:shader is the index of the shader to compile.
+
+.Valid Usage
+****
+  * [[VUID-vkCompileDeferredNV-pipeline-04621]]
+    pname:pipeline must: be a ray tracing pipeline
+  * [[VUID-vkCompileDeferredNV-pipeline-02237]]
+    pname:pipeline must: have been created with
+    ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
+  * [[VUID-vkCompileDeferredNV-shader-02238]]
+    pname:shader must: not have been called as a deferred compile before
+****
+
+include::{generated}/validity/protos/vkCompileDeferredNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='vkGetRayTracingShaderGroupStackSizeKHR',desc='Query ray tracing pipeline shader group shader stack size',type='protos']
+--
+To query the pipeline stack size of shaders in a shader group in the ray
+tracing pipeline, call:
+
+include::{generated}/api/protos/vkGetRayTracingShaderGroupStackSizeKHR.adoc[]
+
+  * pname:device is the logical device containing the ray tracing pipeline.
+  * pname:pipeline is the ray tracing pipeline object containing the shaders
+    groups.
+  * pname:group is the index of the shader group to query.
+  * pname:groupShader is the type of shader from the group to query.
+
+The return value is the ray tracing pipeline stack size in bytes for the
+specified shader as called from the specified shader group.
+
+.Valid Usage
+****
+  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-04622]]
+    pname:pipeline must: be a ray tracing pipeline
+  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-group-03608]]
+    The value of pname:group must be less than the number of shader groups
+    in pname:pipeline
+  * [[VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-03609]]
+    The shader identified by pname:groupShader in pname:group must: not be
+    ename:VK_SHADER_UNUSED_KHR
+****
+
+include::{generated}/validity/protos/vkGetRayTracingShaderGroupStackSizeKHR.adoc[]
+--
+
+[open,refpage='VkShaderGroupShaderKHR',desc='Shader group shaders',type='enums']
+--
+Possible values of pname:groupShader in
+flink:vkGetRayTracingShaderGroupStackSizeKHR are:
+
+include::{generated}/api/enums/VkShaderGroupShaderKHR.adoc[]
+
+  * ename:VK_SHADER_GROUP_SHADER_GENERAL_KHR uses the shader specified in
+    the group with
+    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:generalShader
+  * ename:VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR uses the shader specified
+    in the group with
+    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:closestHitShader
+  * ename:VK_SHADER_GROUP_SHADER_ANY_HIT_KHR uses the shader specified in
+    the group with
+    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:anyHitShader
+  * ename:VK_SHADER_GROUP_SHADER_INTERSECTION_KHR uses the shader specified
+    in the group with
+    slink:VkRayTracingShaderGroupCreateInfoKHR::pname:intersectionShader
+--
+
+[open,refpage='vkCmdSetRayTracingPipelineStackSizeKHR',desc='Set the stack size dynamically for a ray tracing pipeline',type='protos']
+--
+:refpage: vkCmdSetRayTracingPipelineStackSizeKHR
+
+To <<pipelines-dynamic-state, dynamically set>> the stack size for a ray
+tracing pipeline, call:
+
+include::{generated}/api/protos/vkCmdSetRayTracingPipelineStackSizeKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pipelineStackSize is the stack size to use for subsequent ray
+    tracing trace commands.
+
+This command sets the stack size for subsequent ray tracing commands when
+the ray tracing pipeline is created with
+ename:VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, the stack size is computed as described in
+<<ray-tracing-pipeline-stack, Ray Tracing Pipeline Stack>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetRayTracingPipelineStackSizeKHR-pipelineStackSize-03610]]
+    pname:pipelineStackSize must: be large enough for any dynamic execution
+    through the shaders in the ray tracing pipeline used by a subsequent
+    trace call
+****
+include::{generated}/validity/protos/vkCmdSetRayTracingPipelineStackSizeKHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_pipeline[]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+
+[[pipelines-destruction]]
+== Pipeline Destruction
+
+[open,refpage='vkDestroyPipeline',desc='Destroy a pipeline object',type='protos']
+--
+To destroy a pipeline, call:
+
+include::{generated}/api/protos/vkDestroyPipeline.adoc[]
+
+  * pname:device is the logical device that destroys the pipeline.
+  * pname:pipeline is the handle of the pipeline to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyPipeline-pipeline-00765]]
+    All submitted commands that refer to pname:pipeline must: have completed
+    execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyPipeline-pipeline-00766]]
+    If sname:VkAllocationCallbacks were provided when pname:pipeline was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyPipeline-pipeline-00767]]
+    If no sname:VkAllocationCallbacks were provided when pname:pipeline was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyPipeline.adoc[]
+--
+
+
+[[pipelines-multiple]]
+== Multiple Pipeline Creation
+
+Multiple pipelines can: be created simultaneously by passing an array of
+slink:VkGraphicsPipelineCreateInfo,
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
+or slink:VkComputePipelineCreateInfo structures into the
+flink:vkCreateGraphicsPipelines,
+ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
+ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
+and flink:vkCreateComputePipelines commands, respectively.
+Applications can: group together similar pipelines to be created in a single
+call, and implementations are encouraged to look for reuse opportunities
+within a group-create.
+
+When an application attempts to create many pipelines in a single command,
+it is possible that some subset may: fail creation.
+In that case, the corresponding entries in the pname:pPipelines output array
+will be filled with dlink:VK_NULL_HANDLE values.
+If any pipeline fails creation despite valid arguments (for example, due to
+out of memory errors), the elink:VkResult code returned by
+ftext:vkCreate*Pipelines will indicate why.
+The implementation will attempt to create all pipelines, and only return
+dlink:VK_NULL_HANDLE values for those that actually failed.
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+If creation fails for a pipeline that had
+ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT set, pipelines at an
+index in the pname:pPipelines array greater than or equal to that of the
+failing pipeline must: be set to dlink:VK_NULL_HANDLE.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+If multiple pipelines fail to be created, the elink:VkResult must: be the
+return value of any of the pipelines which did not return ename:VK_SUCCESS.
+
+
+[[pipelines-pipeline-derivatives]]
+== Pipeline Derivatives
+
+
+A pipeline derivative is a child pipeline created from a parent pipeline,
+where the child and parent are expected to have much commonality.
+
+ifndef::VKSC_VERSION_1_0[]
+The goal of derivative pipelines is that they be cheaper to create using the
+parent as a starting point, and that it be more efficient (on either host or
+device) to switch/bind between children of the same parent.
+
+A derivative pipeline is created by setting the
+ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag in the
+stext:Vk*PipelineCreateInfo structure.
+If this is set, then exactly one of pname:basePipelineHandle or
+pname:basePipelineIndex members of the structure must: have a valid
+handle/index, and specifies the parent pipeline.
+If pname:basePipelineHandle is used, the parent pipeline must: have already
+been created.
+If pname:basePipelineIndex is used, then the parent is being created in the
+same command.
+dlink:VK_NULL_HANDLE acts as the invalid handle for
+pname:basePipelineHandle, and -1 is the invalid index for
+pname:basePipelineIndex.
+If pname:basePipelineIndex is used, the base pipeline must: appear earlier
+in the array.
+The base pipeline must: have been created with the
+ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+Pipeline derivatives are not supported in Vulkan SC due to the use of
+read-only offline generated pipeline caches <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+[[pipelines-cache]]
+== Pipeline Cache
+
+[open,refpage='VkPipelineCache',desc='Opaque handle to a pipeline cache object',type='handles']
+--
+ifndef::VKSC_VERSION_1_0[]
+Pipeline cache objects allow the result of pipeline construction to be
+reused between pipelines and between runs of an application.
+Reuse between pipelines is achieved by passing the same pipeline cache
+object when creating multiple related pipelines.
+Reuse across runs of an application is achieved by retrieving pipeline cache
+contents in one run of an application, saving the contents, and using them
+to preinitialize a pipeline cache on a subsequent run.
+The contents of the pipeline cache objects are managed by the
+implementation.
+Applications can: manage the host memory consumed by a pipeline cache object
+and control the amount of data retrieved from a pipeline cache object.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+Pipeline cache objects allow the application to load multiple binary
+pipeline objects generated by an offline cache creation tool into pipeline
+cache objects.
+The cache can then be used during pipeline creation to load offline pipeline
+data.
+endif::VKSC_VERSION_1_0[]
+
+Pipeline cache objects are represented by sname:VkPipelineCache handles:
+
+include::{generated}/api/handles/VkPipelineCache.adoc[]
+--
+
+
+[[pipelines-cache-create]]
+=== Creating a Pipeline Cache
+
+[open,refpage='vkCreatePipelineCache',desc='Creates a new pipeline cache',type='protos']
+--
+:refpage: vkCreatePipelineCache
+:objectnameplural: pipeline caches
+:objectnamecamelcase: pipelineCache
+:objectcount: 1
+
+To create pipeline cache objects, call:
+
+include::{generated}/api/protos/vkCreatePipelineCache.adoc[]
+
+  * pname:device is the logical device that creates the pipeline cache
+    object.
+  * pname:pCreateInfo is a pointer to a slink:VkPipelineCacheCreateInfo
+    structure containing initial parameters for the pipeline cache object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPipelineCache is a pointer to a slink:VkPipelineCache handle in
+    which the resulting pipeline cache object is returned.
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Applications can: track and manage the total host memory size of a pipeline
+cache object using the pname:pAllocator.
+Applications can: limit the amount of data retrieved from a pipeline cache
+object in fname:vkGetPipelineCacheData.
+Implementations should: not internally limit the total number of entries
+added to a pipeline cache object or the total host memory consumed.
+====
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+If the pipeline cache data pointed to by
+slink:VkPipelineCacheCreateInfo::pname:pInitialData is not compatible with
+the device, pipeline cache creation will fail and
+ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA will be returned.
+endif::VKSC_VERSION_1_0[]
+
+Once created, a pipeline cache can: be passed to the
+flink:vkCreateGraphicsPipelines
+ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCreateRayTracingPipelinesKHR,]
+ifdef::VK_NV_ray_tracing[flink:vkCreateRayTracingPipelinesNV,]
+and flink:vkCreateComputePipelines commands.
+ifndef::VKSC_VERSION_1_0[]
+If the pipeline cache passed into these commands is not
+dlink:VK_NULL_HANDLE, the implementation will query it for possible reuse
+opportunities and update it with new content.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+The pipeline cache passed into these commands will be queried by the
+implementation for matching pipelines on pipeline creation.
+After the cache is created, its contents cannot be updated.
+endif::VKSC_VERSION_1_0[]
+The use of the pipeline cache object in these commands is internally
+synchronized, and the same pipeline cache object can: be used in multiple
+threads simultaneously.
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+If pname:flags of pname:pCreateInfo includes
+ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, all commands
+that modify the returned pipeline cache object must: be
+<<fundamentals-threadingbehavior,externally synchronized>>.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+
+ifndef::VKSC_VERSION_1_0[]
+[NOTE]
+.Note
+====
+Implementations should: make every effort to limit any critical sections to
+the actual accesses to the cache, which is expected to be significantly
+shorter than the duration of the ftext:vkCreate*Pipelines commands.
+====
+endif::VKSC_VERSION_1_0[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkCreatePipelineCache-pCreateInfo-05045]]
+    The contents of the structure pointed to by pname:pCreateInfo and the
+    data pointed to by pname:pCreateInfo->pInitialData must: be the same as
+    specified in one of the
+    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
+    structures when the device was created
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreatePipelineCache.adoc[]
+--
+
+[open,refpage='VkPipelineCacheCreateInfo',desc='Structure specifying parameters of a newly created pipeline cache',type='structs']
+--
+The sname:VkPipelineCacheCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCacheCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+  * pname:flags is a bitmask of elink:VkPipelineCacheCreateFlagBits
+    specifying the behavior of the pipeline cache.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+ifndef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+  * pname:flags is reserved for future use.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+  * pname:initialDataSize is the number of bytes in pname:pInitialData.
+ifndef::VKSC_VERSION_1_0[]
+    If pname:initialDataSize is zero, the pipeline cache will initially be
+    empty.
+  * pname:pInitialData is a pointer to previously retrieved pipeline cache
+    data.
+    If the pipeline cache data is incompatible (as defined below) with the
+    device, the pipeline cache will be initially empty.
+    If pname:initialDataSize is zero, pname:pInitialData is ignored.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * pname:pInitialData is a pointer to pipeline cache data that has been
+    generated offline.
+    If the pipeline cache data is incompatible (as defined below) with the
+    device, ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA is returned.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPipelineCacheCreateInfo::pname:pInitialData must: point to a
+    valid pipeline cache that has been generated offline <<SCID-1>>,
+    <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00768]]
+    If pname:initialDataSize is not `0`, it must: be equal to the size of
+    pname:pInitialData, as returned by fname:vkGetPipelineCacheData when
+    pname:pInitialData was originally retrieved
+  * [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00769]]
+    If pname:initialDataSize is not `0`, pname:pInitialData must: have been
+    retrieved from a previous call to fname:vkGetPipelineCacheData
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892]]
+    If the <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>> feature is not enabled, pname:flags
+    must: not include
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineCacheCreateInfo-flags-05043]]
+    pname:flags must: include ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT
+  * [[VUID-VkPipelineCacheCreateInfo-flags-05044]]
+    pname:flags must: include
+    ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT
+  * [[VUID-VkPipelineCacheCreateInfo-pInitialData-05139]]
+    The pipeline cache data pointed to by pname:pInitialData must: not
+    contain any pipelines with duplicate pipeline identifiers.
+endif::VKSC_VERSION_1_0[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPipelineCacheCreateInfo::pname:initialDataSize must: not be `0`
+    <<SCID-1>>, <<SCID-8>>.
+  * slink:VkPipelineCacheCreateInfo::pname:pInitialData must: not be `NULL`
+    <<SCID-1>>, <<SCID-8>>.
+  * slink:VkPipelineCacheCreateInfo::pname:flags must: include
+    ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT <<SCID-1>>, <<SCID-8>>.
+  * slink:VkPipelineCacheCreateInfo::pname:flags must: include
+    ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT <<SCID-2>>.
+  * The contents of slink:VkPipelineCacheCreateInfo, including the data
+    pointed to by slink:VkPipelineCacheCreateInfo::pname:pInitialData,
+    passed to flink:vkCreatePipelineCache must: be the same as specified in
+    one of the
+    slink:VkDeviceObjectReservationCreateInfo::pname:pPipelineCacheCreateInfos
+    structures when the device was created <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkPipelineCacheCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineCacheCreateFlags', desc='Bitmask of VkPipelineCreateFlagBits', type='flags']
+--
+include::{generated}/api/flags/VkPipelineCacheCreateFlags.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask of
+zero or more elink:VkPipelineCacheCreateFlagBits.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+ifndef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask, but
+is currently reserved for future use.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+[open,refpage='VkPipelineCacheCreateFlagBits',desc='Bitmask specifying the behavior of the pipeline cache',type='enums']
+--
+Bits which can: be set in slink:VkPipelineCacheCreateInfo::pname:flags,
+specifying behavior of the pipeline cache, are:
+
+include::{generated}/api/enums/VkPipelineCacheCreateFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT specifies
+    that all commands that modify the created slink:VkPipelineCache will be
+    <<fundamentals-threadingbehavior,externally synchronized>>.
+    When set, the implementation may: skip any unnecessary processing needed
+    to support simultaneous modification from multiple threads where
+    allowed.
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[]
+ifdef::VKSC_VERSION_1_0[]
+  * ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT specifies that the new
+    pipeline cache will be read-only.
+  * ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT specifies
+    that the application will maintain the contents of the memory pointed to
+    by pname:pInitialData for the lifetime of the pipeline cache object
+    created, avoiding the need for the implementation to make a copy of the
+    data.
+    The memory pointed to by pname:pInitialData can: be modified or released
+    by the application only after any pipeline cache objects created using
+    it have been destroyed.
+ifdef::hidden[]
+// tag::scaddition[]
+  * extending elink:VkPipelineCacheCreateFlagBits
+  ** ename:VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT <<SCID-1>>, <<SCID-8>>
+  ** ename:VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT <<SCID-2>>
+// end::scaddition[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control,VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkMergePipelineCaches, fname:vkGetPipelineCacheData <<SCID-1>>,
+    <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+
+
+[[pipelines-cache-merge]]
+=== Merging Pipeline Caches
+
+[open,refpage='vkMergePipelineCaches',desc='Combine the data stores of pipeline caches',type='protos']
+--
+Pipeline cache objects can: be merged using the command:
+
+include::{generated}/api/protos/vkMergePipelineCaches.adoc[]
+
+  * pname:device is the logical device that owns the pipeline cache objects.
+  * pname:dstCache is the handle of the pipeline cache to merge results
+    into.
+  * pname:srcCacheCount is the length of the pname:pSrcCaches array.
+  * pname:pSrcCaches is a pointer to an array of pipeline cache handles,
+    which will be merged into pname:dstCache.
+    The previous contents of pname:dstCache are included after the merge.
+
+[NOTE]
+.Note
+====
+The details of the merge operation are implementation-dependent, but
+implementations should: merge the contents of the specified pipelines and
+prune duplicate entries.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkMergePipelineCaches-dstCache-00770]]
+    pname:dstCache must: not appear in the list of source caches
+****
+
+include::{generated}/validity/protos/vkMergePipelineCaches.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+
+
+[[pipelines-cache-retrieval]]
+=== Retrieving Pipeline Cache Data
+
+[open,refpage='vkGetPipelineCacheData',desc='Get the data store from a pipeline cache',type='protos']
+--
+Data can: be retrieved from a pipeline cache object using the command:
+
+include::{generated}/api/protos/vkGetPipelineCacheData.adoc[]
+
+  * pname:device is the logical device that owns the pipeline cache.
+  * pname:pipelineCache is the pipeline cache to retrieve data from.
+  * pname:pDataSize is a pointer to a code:size_t value related to the
+    amount of data in the pipeline cache, as described below.
+  * pname:pData is either `NULL` or a pointer to a buffer.
+
+If pname:pData is `NULL`, then the maximum size of the data that can: be
+retrieved from the pipeline cache, in bytes, is returned in pname:pDataSize.
+Otherwise, pname:pDataSize must: point to a variable set by the user to the
+size of the buffer, in bytes, pointed to by pname:pData, and on return the
+variable is overwritten with the amount of data actually written to
+pname:pData.
+If pname:pDataSize is less than the maximum size that can: be retrieved by
+the pipeline cache, at most pname:pDataSize bytes will be written to
+pname:pData, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all of the pipeline cache was
+returned.
+
+Any data written to pname:pData is valid and can: be provided as the
+pname:pInitialData member of the slink:VkPipelineCacheCreateInfo structure
+passed to fname:vkCreatePipelineCache.
+
+Two calls to fname:vkGetPipelineCacheData with the same parameters must:
+retrieve the same data unless a command that modifies the contents of the
+cache is called between them.
+
+The initial bytes written to pname:pData must: be a header as described in
+the <<pipelines-cache-header, Pipeline Cache Header>> section.
+
+If pname:pDataSize is less than what is necessary to store this header,
+nothing will be written to pname:pData and zero will be written to
+pname:pDataSize.
+
+include::{generated}/validity/protos/vkGetPipelineCacheData.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+
+[[pipelines-cache-header]]
+=== Pipeline Cache Header
+
+ifdef::VKSC_VERSION_1_0[]
+Applications must: load data from <<pipelines-offline-compilation,offline
+compiled>> pipeline caches into pipeline cache objects.
+The results of pipeline compilations may: depend on the vendor ID, device
+ID, driver version, and other details of the target device.
+To allow detection of pipeline cache data that is incompatible with the
+device, the pipeline cache data must: begin with a valid pipeline cache
+header.
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+Applications can: store the data retrieved from the pipeline cache, and use
+these data, possibly in a future run of the application, to populate new
+pipeline cache objects.
+The results of pipeline compiles, however, may: depend on the vendor ID,
+device ID, driver version, and other details of the device.
+To enable applications to detect when previously retrieved data is
+incompatible with the device, the pipeline cache data must: begin with a
+valid pipeline cache header.
+endif::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+Structures described in this section are not part of the Vulkan API and are
+only used to describe the representation of data elements in pipeline cache
+data.
+Accordingly, the valid usage clauses defined for structures defined in this
+section do not define valid usage conditions for APIs accepting pipeline
+cache data as input, as providing invalid pipeline cache data as input to
+any Vulkan API commands will result
+ifndef::VKSC_VERSION_1_0[]
+in the provided pipeline cache data being ignored.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+in the runtime error ename:VK_ERROR_INVALID_PIPELINE_CACHE_DATA.
+endif::VKSC_VERSION_1_0[]
+====
+
+[open,refpage='VkPipelineCacheHeaderVersionOne',desc='Structure describing the layout of the pipeline cache header',type='structs']
+--
+Version one of the pipeline cache header is defined as:
+
+include::{generated}/api/structs/VkPipelineCacheHeaderVersionOne.adoc[]
+
+  * pname:headerSize is the length in bytes of the pipeline cache header.
+  * pname:headerVersion is a elink:VkPipelineCacheHeaderVersion value
+    specifying the version of the header.
+    A consumer of the pipeline cache should: use the cache version to
+    interpret the remainder of the cache header.
+  * pname:vendorID is the sname:VkPhysicalDeviceProperties::pname:vendorID
+    of the implementation.
+  * pname:deviceID is the sname:VkPhysicalDeviceProperties::pname:deviceID
+    of the implementation.
+  * pname:pipelineCacheUUID is the
+    sname:VkPhysicalDeviceProperties::pname:pipelineCacheUUID of the
+    implementation.
+
+Unlike most structures declared by the Vulkan API, all fields of this
+structure are written with the least significant byte first, regardless of
+host byte-order.
+
+The C language specification does not define the packing of structure
+members.
+This layout assumes tight structure member packing, with members laid out in
+the order listed in the structure, and the intended size of the structure is
+32 bytes.
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values at the correct offsets.
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967]]
+    pname:headerSize must: be 32
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968]]
+    pname:headerVersion must: be ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-05075]]
+    pname:headerSize must: be 56
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-05076]]
+    pname:headerVersion must: be
+    ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-08990]]
+    pname:headerSize must: not exceed the size of the pipeline cache
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPipelineCacheHeaderVersionOne::pname:headerSize must: be 56
+    <<SCID-1>>.
+  * slink:VkPipelineCacheHeaderVersionOne::pname:headerVersion must: be
+    ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE <<SCID-1>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkPipelineCacheHeaderVersionOne.adoc[]
+--
+
+[open,refpage='VkPipelineCacheHeaderVersion',desc='Encode pipeline cache version',type='enums',xrefs='vkCreatePipelineCache vkGetPipelineCacheData']
+--
+Possible values of the pname:headerVersion value of the pipeline cache
+header are:
+
+include::{generated}/api/enums/VkPipelineCacheHeaderVersion.adoc[]
+
+  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE specifies version one of the
+    pipeline cache, described by slink:VkPipelineCacheHeaderVersionOne.
+ifdef::VKSC_VERSION_1_0[]
+  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE specifies
+    version one of the pipeline cache for Vulkan SC, described by
+    slink:VkPipelineCacheHeaderVersionSafetyCriticalOne.
+endif::VKSC_VERSION_1_0[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+[open,refpage='VkPipelineCacheHeaderVersionSafetyCriticalOne',desc='Structure describing the layout of the pipeline cache header for safety critical',type='structs']
+--
+Version one of the pipeline cache header for Vulkan SC is defined as:
+
+include::{generated}/api/structs/VkPipelineCacheHeaderVersionSafetyCriticalOne.adoc[]
+
+  * pname:headerVersionOne is a slink:VkPipelineCacheHeaderVersionOne
+    structure.
+  * pname:validationVersion is a elink:VkPipelineCacheValidationVersion enum
+    value specifying the version of any validation information that is
+    included in this pipeline cache.
+  * pname:implementationData is 4 bytes of padding to ensure structure
+    members are consistently aligned on all platforms.
+    The contents of this field may: be used for implementation-specific
+    information.
+  * pname:pipelineIndexCount is the number of entries contained in the
+    pipeline cache index.
+  * pname:pipelineIndexStride is the number of bytes between consecutive
+    pipeline cache index entries.
+  * pname:pipelineIndexOffset is the offset in bytes from the beginning of
+    the pipeline cache header to the pipeline cache index.
+
+The <<pipelines-cache-index, pipeline cache index>> consists of
+pname:pipelineIndexCount slink:VkPipelineCacheSafetyCriticalIndexEntry
+structures containing an index of all the pipelines in this cache.
+The pipeline cache index is located starting at pname:pipelineIndexOffset
+bytes into the cache and the location of pipeline code:i is calculated as:
+[eq]#pname:pipelineIndexOffset + code:i {times} pname:pipelineIndexStride#.
+The slink:VkPipelineCacheSafetyCriticalIndexEntry structures may: not be
+tightly packed, enabling additional implementation-specific data to be
+stored with each entry, or for future extensibility.
+
+[NOTE]
+.Note
+====
+Because the pipeline cache index is keyed by pipeline identifier,
+applications and offline compilers must ensure that there are no pipelines
+with identical pipeline indentifiers in the same pipeline cache.
+====
+
+Unlike most structures declared by the Vulkan API, all fields of this
+structure are written with the least significant byte first, regardless of
+host byte-order.
+
+The C language specification does not define the packing of structure
+members.
+This layout assumes tight structure member packing, with members laid out in
+the order listed in the structure, and the intended size of the structure is
+56 bytes.
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values at the correct offsets.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-validationVersion-05077]]
+    pname:validationVersion must: be
+    ename:VK_PIPELINE_CACHE_VALIDATION_VERSION_SAFETY_CRITICAL_ONE
+  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-pipelineIndexStride-05078]]
+    pname:pipelineIndexStride must: be greater than or equal to 56 (the size
+    of the slink:VkPipelineCacheSafetyCriticalIndexEntry structure)
+  * [[VUID-VkPipelineCacheHeaderVersionSafetyCriticalOne-pipelineIndexOffset-05079]]
+    [eq]#pname:pipelineIndexOffset + pname:pipelineIndexCount {times}
+    pname:pipelineIndexStride# must: not exceed the size of the pipeline
+    cache
+****
+
+include::{generated}/validity/structs/VkPipelineCacheHeaderVersionSafetyCriticalOne.adoc[]
+--
+
+[open,refpage='VkPipelineCacheValidationVersion',desc='Encode pipeline cache validation version',type='enums']
+--
+The elink:VkPipelineCacheValidationVersion enumeration determines the
+contents of the pipeline cache validation information.
+Possible values are:
+
+include::{generated}/api/enums/VkPipelineCacheValidationVersion.adoc[]
+
+  * ename:VK_PIPELINE_CACHE_VALIDATION_VERSION_SAFETY_CRITICAL_ONE specifies
+    version one of the pipeline cache validation information for Vulkan SC.
+--
+
+[[pipelines-cache-index]]
+[open,refpage='VkPipelineCacheSafetyCriticalIndexEntry',desc='Structure describing the pipeline cache index entry',type='structs']
+--
+Each pipeline cache index entry consists of a
+sname:VkPipelineCacheSafetyCriticalIndexEntry structure:
+
+include::{generated}/api/structs/VkPipelineCacheSafetyCriticalIndexEntry.adoc[]
+
+  * pname:pipelineIdentifier is the <<pipelines-identifier, pipeline
+    identifier>> indicating which pipeline the information is associated
+    with.
+  * pname:pipelineMemorySize is the number of bytes of pipeline memory
+    required for this pipeline.
+    This is the minimum value that can: be successfully used for
+    slink:VkPipelineOfflineCreateInfo::pname:poolEntrySize when this
+    pipeline is used.
+  * pname:jsonSize is the size in bytes of the pipeline JSON data
+    representing the pipeline state for this pipeline.
+    This value may: be zero, indicating the JSON data is not present in the
+    pipeline cache for this pipeline.
+  * pname:jsonOffset is the offset in bytes from the beginning of the
+    pipeline cache header to the pipeline JSON data for this pipeline.
+    This value must: be zero if the JSON data is not present in the pipeline
+    cache for this pipeline.
+  * pname:stageIndexCount is the number of entries in the pipeline cache
+    stage validation index for this pipeline.
+    This value may: be zero, indicating that no stage validation information
+    is present in the pipeline cache for this pipeline.
+  * pname:stageIndexStride is the number of bytes between consecutive stage
+    validation index entries.
+  * pname:stageIndexOffset is the offset in bytes from the beginning of the
+    pipeline cache header to the <<pipelines-cache-stage-validation-index,
+    stage validation index>> for this pipeline.
+    This value must: be zero if no stage validation information is present
+    for this pipeline.
+
+The JSON data and the stage validation index are optionally: included in the
+pipeline cache index entry.
+They are only intended to be used for validation and debugging.
+If present they must: include both the JSON data and the corresponding
+SPIR-V modules that were used by the offline compiler to compile the
+pipeline cache entry.
+
+The data at pname:jsonOffset consists of a byte stream of pname:jsonSize
+bytes of UTF-8 encoded JSON that was used by the
+<<pipelines-offline-compilation, offline pipeline compiler>> to create this
+pipeline cache entry.
+
+The <<pipelines-cache-stage-validation-index, stage validation index>>
+consists of pname:stageIndexCount
+slink:VkPipelineCacheStageValidationIndexEntry structures which provide the
+SPIR-V modules used by this pipeline and these are provided in the same
+order as provided to the slink:VkPipelineShaderStageCreateInfo structure(s)
+in the stext:Vk*PipelineCreateInfo structure for this pipeline.
+The stage validation index is located at pname:stageIndexOffset bytes into
+the cache and the location of stage code:i is calculated as:
+[eq]#pname:stageIndexOffset {plus} code:i {times} pname:stageIndexStride#.
+The slink:VkPipelineCacheStageValidationIndexEntry structures may: not be
+tightly packed, enabling additional implementation-specific data to be
+stored with each entry, or for future extensibility.
+
+Unlike most structures declared by the Vulkan API, all fields of this
+structure are written with the least significant byte first, regardless of
+host byte-order.
+
+The C language specification does not define the packing of structure
+members.
+This layout assumes tight structure member packing, with members laid out in
+the order listed in the structure, and the intended size of the structure is
+56 bytes.
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values at the correct offsets.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-05080]]
+    If pname:jsonSize is 0, pname:jsonOffset must: be 0
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-05081]]
+    If pname:jsonSize is 0, pname:stageIndexCount must: be 0
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-jsonSize-08991]]
+    If pname:jsonSize is not 0, [eq]#pname:jsonOffset {plus} pname:jsonSize#
+    must: not exceed the size of the pipeline cache
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05082]]
+    If pname:stageIndexCount is 0, pname:stageIndexOffset and
+    pname:stageIndexStride must: be 0
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05083]]
+    If pname:stageIndexCount is not 0, pname:stageIndexStride must: be
+    greater than or equal to 16 (the size of the
+    slink:VkPipelineCacheStageValidationIndexEntry structure)
+  * [[VUID-VkPipelineCacheSafetyCriticalIndexEntry-stageIndexCount-05084]]
+    If pname:stageIndexCount is not 0, [eq]#pname:stageIndexOffset {plus}
+    pname:stageIndexCount {times} pname:stageIndexStride# must: not exceed
+    the size of the pipeline cache
+****
+
+include::{generated}/validity/structs/VkPipelineCacheSafetyCriticalIndexEntry.adoc[]
+--
+
+[[pipelines-cache-stage-validation-index]]
+[open,refpage='VkPipelineCacheStageValidationIndexEntry',desc='Structure describing the pipeline cache stage validation index',type='structs']
+--
+Each pipeline cache stage validation index entry consists of a
+sname:VkPipelineCacheStageValidationIndexEntry structure:
+
+include::{generated}/api/structs/VkPipelineCacheStageValidationIndexEntry.adoc[]
+
+  * pname:codeSize is the size in bytes of the SPIR-V module for this
+    pipeline stage.
+  * pname:codeOffset is the offset in bytes from the beginning of the
+    pipeline cache header to the SPIR-V module for this pipeline stage.
+
+The data at pname:codeOffset consists of pname:codeSize bytes of SPIR-V
+module as described in <<spirvenv, Appendix A>> that was used by the
+<<pipelines-offline-compilation, offline pipeline compiler>> for this shader
+stage when creating this pipeline cache entry.
+
+Unlike most structures declared by the Vulkan API, all fields of this
+structure are written with the least significant byte first, regardless of
+host byte-order.
+
+The C language specification does not define the packing of structure
+members.
+This layout assumes tight structure member packing, with members laid out in
+the order listed in the structure, and the intended size of the structure is
+16 bytes.
+If a compiler produces code that diverges from that pattern, applications
+must: employ another method to set values at the correct offsets.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeSize-05085]]
+    pname:codeSize must: be greater than 0
+  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeSize-05086]]
+    pname:codeSize must: be a multiple of 4
+  * [[VUID-VkPipelineCacheStageValidationIndexEntry-codeOffset-05087]]
+    [eq]#pname:codeOffset {plus} pname:codeSize# must: not exceed the size
+    of the pipeline cache
+****
+
+include::{generated}/validity/structs/VkPipelineCacheStageValidationIndexEntry.adoc[]
+--
+
+ifdef::hidden[]
+// tag::scaddition[]
+  * extending elink:VkPipelineCacheHeaderVersion
+  ** ename:VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE <<SCID-1>>,
+     <<SCID-8>>
+  * slink:VkPipelineCacheHeaderVersionSafetyCriticalOne <<SCID-1>>,
+    <<SCID-8>>
+  * elink:VkPipelineCacheValidationVersion <<SCID-1>>, <<SCID-8>>
+  * slink:VkPipelineCacheSafetyCriticalIndexEntry <<SCID-1>>, <<SCID-8>>
+  * slink:VkPipelineCacheStageValidationIndexEntry<<SCID-1>>, <<SCID-8>>
+// end::scaddition[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+
+[[pipelines-cache-destroy]]
+=== Destroying a Pipeline Cache
+
+[open,refpage='vkDestroyPipelineCache',desc='Destroy a pipeline cache object',type='protos']
+--
+To destroy a pipeline cache, call:
+
+include::{generated}/api/protos/vkDestroyPipelineCache.adoc[]
+
+  * pname:device is the logical device that destroys the pipeline cache
+    object.
+  * pname:pipelineCache is the handle of the pipeline cache to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifndef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+  * [[VUID-vkDestroyPipelineCache-pipelineCache-00771]]
+    If sname:VkAllocationCallbacks were provided when pname:pipelineCache
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyPipelineCache-pipelineCache-00772]]
+    If no sname:VkAllocationCallbacks were provided when pname:pipelineCache
+    was created, pname:pAllocator must: be `NULL`
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkDestroyPipelineCache.adoc[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+[[pipelines-offline-compilation]]
+== Offline Pipeline Compilation
+
+In Vulkan SC, the pipeline compilation process occurs offline <<SCID-8>>.
+
+The <<shader-modules,SPIR-V shader module>> and pipeline state are supplied
+to an offline pipeline cache compiler which creates a pipeline cache entry
+for the pipeline.
+The set of pipeline cache entries are combined offline into one or more
+<<pipelines-cache, pipeline caches>>.
+At application run-time, the offline generated pipeline cache is provided to
+device creation as part of the slink:VkDeviceObjectReservationCreateInfo
+structure and then loaded into a slink:VkPipelineCache object by the
+application.
+The device, pipeline, and pipeline cache creation functions can: extract
+implementation-specific information from the pipeline cache.
+The specific pipeline to be loaded from the cache is specified at pipeline
+creation time using a <<pipelines-identifier,pipeline identifier>>.
+The pipeline state that is provided at runtime to pipeline creation must:
+match the state that was specified to the offline pipeline cache compiler
+when the pipeline cache entry was created offline (with the exception of the
+slink:VkPipelineShaderStageCreateInfo structure).
+
+In order to assist with the specification of pipeline state for the offline
+pipeline cache compiler, Khronos has defined a _pipeline JSON schema_ to
+represent the pipeline state required to compile a SPIR-V module to
+device-specific machine code and a set of utilities to help with reading and
+writing of the JSON files.
+See https://github.com/KhronosGroup/VulkanSC-Docs/wiki/JSON-schema for more
+information.
+
+[[pipelines-memory-reservation]]
+== Pipeline Memory Reservation
+
+Pipeline memory is allocated from a pool that is reserved at device creation
+time.
+The offline pipeline cache compiler writes the pipeline memory size
+requirements for each pipeline into the pipeline's
+slink:VkPipelineCacheSafetyCriticalIndexEntry::pname:pipelineMemorySize
+entry in the <<pipelines-cache-index,pipeline cache index>>.
+The offline pipeline cache compiler may: also report it separately.
+The elements of
+slink:VkDeviceObjectReservationCreateInfo::pname:pPipelinePoolSizes are
+requests for pname:poolEntryCount pool entries each of pool size
+pname:poolEntrySize, and any pipeline with a
+slink:VkPipelineCacheSafetyCriticalIndexEntry::pname:pipelineMemorySize less
+than or equal to slink:VkPipelineOfflineCreateInfo::pname:poolEntrySize can:
+be placed in one of those pool entries.
+The application should: request a set of pool sizes that best suits its
+anticipated worst-case usage.
+
+On implementations where
+slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory is
+ename:VK_FALSE, the memory for the pipeline pool is not recycled when a
+pipeline is destroyed, and once an entry has been used it cannot: be reused.
+On implementations where
+slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory is
+ename:VK_TRUE, the memory for the pipeline pool is recycled when a pipeline
+is destroyed, and the entry it was using becomes available to be reused.
+
+[[pipelines-identifier]]
+== Pipeline Identifier
+
+A _pipeline identifier_ is an identifier that can be used to identify a
+specific pipeline independently from the pipeline description, shader stages
+and any relevant fixed-function stages, that were used to create the
+pipeline object.
+
+The slink:VkPipelineOfflineCreateInfo structure allows an identifier to be
+specified for the pipeline at pipeline creation via the pname:pNext field of
+the slink:VkGraphicsPipelineCreateInfo,
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
+and slink:VkComputePipelineCreateInfo structures.
+If a sname:VkPipelineOfflineCreateInfo structure is not included in the
+pname:pNext chain then pipeline creation will fail and
+ename:VK_ERROR_NO_PIPELINE_MATCH will be returned by the corresponding
+ftext:vkCreate*Pipelines command.
+
+The identifier must: be used by the implementation to match against the
+existing content of the pipeline cache at pipeline creation.
+This is required for Vulkan SC where pipelines are generated offline and
+there is no shader code in the pipeline cache to match at runtime.
+
+[NOTE]
+.Note
+====
+The identifier values must be specified or generated during the offline
+pipeline cache generation and embedded in to the pipeline cache blob.
+====
+
+[open,refpage='VkPipelineOfflineCreateInfo',desc='Structure specifying pipeline UUID and pipeline pool size to use',type='structs']
+--
+The sname:VkPipelineOfflineCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineOfflineCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineIdentifier is an array of ename:VK_UUID_SIZE code:uint8_t
+    values representing an identifier for the pipeline.
+  * pname:matchControl is a elink:VkPipelineMatchControl value specifying
+    the type of identifier being used and how the match should be performed.
+  * pname:poolEntrySize is the size of the entry in pipeline memory to use
+    for this pipeline.
+    It must: be a size that was requested via slink:VkPipelinePoolSize when
+    the device was created.
+
+If a match in the pipeline cache is not found then
+ename:VK_ERROR_NO_PIPELINE_MATCH will be returned to the application.
+
+If pname:poolEntrySize is too small for the pipeline, or the number of
+entries for the requested pool size exceeds the reserved count for that pool
+size, pipeline creation will fail and ename:VK_ERROR_OUT_OF_POOL_MEMORY will
+be returned by the corresponding ftext:vkCreate*Pipelines command.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineOfflineCreateInfo-poolEntrySize-05028]]
+    pname:poolEntrySize must: be one of the sizes requested via
+    slink:VkPipelinePoolSize when the device was created
+  * [[VUID-VkPipelineOfflineCreateInfo-recyclePipelineMemory-05029]]
+    If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory
+    is ename:VK_TRUE, the number of currently existing pipelines created
+    with this same value of pname:poolEntrySize plus 1 must: be less than or
+    equal to the sum of the slink:VkPipelinePoolSize::pname:poolEntryCount
+    values with the same value of pname:poolEntrySize
+  * [[VUID-VkPipelineOfflineCreateInfo-recyclePipelineMemory-05030]]
+    If
+    slink:VkPhysicalDeviceVulkanSC10Properties::pname:recyclePipelineMemory
+    is ename:VK_FALSE, the total number of pipelines ever created with this
+    same value of pname:poolEntrySize plus 1 must: be less than or equal to
+    the sum of the slink:VkPipelinePoolSize::pname:poolEntryCount values
+    with the same value of pname:poolEntrySize
+****
+ifdef::hidden[]
+// tag::scaddition[]
+  * slink:VkPipelineOfflineCreateInfo <<SCID-1>>, <<SCID-8>>
+  * elink:VkPipelineMatchControl <<SCID-1>>
+// end::scaddition[]
+endif::hidden[]
+
+include::{generated}/validity/structs/VkPipelineOfflineCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineMatchControl',desc='Describes the type of Identifier and Match being used',type='enums',xrefs='VkPipelineOfflineCreateInfo']
+--
+Possible values of the pname:matchControl member of
+sname:VkPipelineOfflineCreateInfo
+
+include::{generated}/api/enums/VkPipelineMatchControl.adoc[]
+
+are:
+
+  * ename:VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH specifies
+    that the identifier is a UUID generated by the application and the
+    identifiers must be an exact match.
+
+--
+endif::VKSC_VERSION_1_0[]
+
+[[pipelines-specialization-constants]]
+== Specialization Constants
+
+ifndef::VKSC_VERSION_1_0[]
+Specialization constants are a mechanism whereby constants in a SPIR-V
+module can: have their constant value specified at the time the
+sname:VkPipeline is created.
+This allows a SPIR-V module to have constants that can: be modified while
+executing an application that uses the Vulkan API.
+
+[NOTE]
+.Note
+====
+Specialization constants are useful to allow a compute shader to have its
+local workgroup size changed at runtime by the user, for example.
+====
+
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+Specialization constants are a mechanism whereby constants in a SPIR-V
+module can: have their constant value specified at the time the
+sname:VkPipeline is compiled offline.
+This allows a SPIR-V module to have constants that can: be modified at
+compilation time rather than in the SPIR-V source.
+The pname:pSpecializationInfo parameters are not used at runtime and should:
+be ignored by the implementation.
+If provided, the application must: set the pname:pSpecializationInfo
+parameters to the values that were specified for the offline compilation of
+this pipeline.
+
+[NOTE]
+.Note
+====
+Specialization constants are useful to allow a compute shader to have its
+local workgroup size changed at pipeline compilation time, for example.
+====
+endif::VKSC_VERSION_1_0[]
+
+Each slink:VkPipelineShaderStageCreateInfo structure contains a
+pname:pSpecializationInfo member, which can: be `NULL` to indicate no
+specialization constants, or point to a sname:VkSpecializationInfo
+structure.
+
+[open,refpage='VkSpecializationInfo',desc='Structure specifying specialization information',type='structs']
+--
+The sname:VkSpecializationInfo structure is defined as:
+
+include::{generated}/api/structs/VkSpecializationInfo.adoc[]
+
+  * pname:mapEntryCount is the number of entries in the pname:pMapEntries
+    array.
+  * pname:pMapEntries is a pointer to an array of
+    sname:VkSpecializationMapEntry structures, which map constant IDs to
+    offsets in pname:pData.
+  * pname:dataSize is the byte size of the pname:pData buffer.
+  * pname:pData contains the actual constant values to specialize with.
+
+.Valid Usage
+****
+  * [[VUID-VkSpecializationInfo-offset-00773]]
+    The pname:offset member of each element of pname:pMapEntries must: be
+    less than pname:dataSize
+  * [[VUID-VkSpecializationInfo-pMapEntries-00774]]
+    The pname:size member of each element of pname:pMapEntries must: be less
+    than or equal to pname:dataSize minus pname:offset
+  * [[VUID-VkSpecializationInfo-constantID-04911]]
+    The pname:constantID value of each element of pname:pMapEntries must: be
+    unique within pname:pMapEntries
+****
+
+include::{generated}/validity/structs/VkSpecializationInfo.adoc[]
+--
+
+[open,refpage='VkSpecializationMapEntry',desc='Structure specifying a specialization map entry',type='structs']
+--
+The sname:VkSpecializationMapEntry structure is defined as:
+
+include::{generated}/api/structs/VkSpecializationMapEntry.adoc[]
+
+  * pname:constantID is the ID of the specialization constant in SPIR-V.
+  * pname:offset is the byte offset of the specialization constant value
+    within the supplied data buffer.
+  * pname:size is the byte size of the specialization constant value within
+    the supplied data buffer.
+
+If a pname:constantID value is not a specialization constant ID used in the
+shader, that map entry does not affect the behavior of the pipeline.
+
+.Valid Usage
+****
+  * [[VUID-VkSpecializationMapEntry-constantID-00776]]
+    For a pname:constantID specialization constant declared in a shader,
+    pname:size must: match the byte size of the pname:constantID.
+    If the specialization constant is of type code:boolean, pname:size must:
+    be the byte size of basetype:VkBool32
+****
+
+include::{generated}/validity/structs/VkSpecializationMapEntry.adoc[]
+--
+
+In human readable SPIR-V:
+
+[source,glsl]
+----
+OpDecorate %x SpecId 13 ; decorate .x component of WorkgroupSize with ID 13
+OpDecorate %y SpecId 42 ; decorate .y component of WorkgroupSize with ID 42
+OpDecorate %z SpecId 3  ; decorate .z component of WorkgroupSize with ID 3
+OpDecorate %wgsize BuiltIn WorkgroupSize ; decorate WorkgroupSize onto constant
+%i32 = OpTypeInt 32 0 ; declare an unsigned 32-bit type
+%uvec3 = OpTypeVector %i32 3 ; declare a 3 element vector type of unsigned 32-bit
+%x = OpSpecConstant %i32 1 ; declare the .x component of WorkgroupSize
+%y = OpSpecConstant %i32 1 ; declare the .y component of WorkgroupSize
+%z = OpSpecConstant %i32 1 ; declare the .z component of WorkgroupSize
+%wgsize = OpSpecConstantComposite %uvec3 %x %y %z ; declare WorkgroupSize
+----
+
+From the above we have three specialization constants, one for each of the
+x, y & z elements of the WorkgroupSize vector.
+
+Now to specialize the above via the specialization constants mechanism:
+
+[source,c++]
+----
+const VkSpecializationMapEntry entries[] =
+{
+    {
+        .constantID = 13,
+        .offset = 0 * sizeof(uint32_t),
+        .size = sizeof(uint32_t)
+    },
+    {
+        .constantID = 42,
+        .offset = 1 * sizeof(uint32_t),
+        .size = sizeof(uint32_t)
+    },
+    {
+        .constantID = 3,
+        .offset = 2 * sizeof(uint32_t),
+        .size = sizeof(uint32_t)
+    }
+};
+
+const uint32_t data[] = { 16, 8, 4 }; // our workgroup size is 16x8x4
+
+const VkSpecializationInfo info =
+{
+    .mapEntryCount = 3,
+    .pMapEntries  = entries,
+    .dataSize = 3 * sizeof(uint32_t),
+    .pData = data,
+};
+----
+
+Then when calling flink:vkCreateComputePipelines, and passing the
+sname:VkSpecializationInfo we defined as the pname:pSpecializationInfo
+parameter of slink:VkPipelineShaderStageCreateInfo, we will create a compute
+pipeline with the runtime specified local workgroup size.
+
+Another example would be that an application has a SPIR-V module that has
+some platform-dependent constants they wish to use.
+
+In human readable SPIR-V:
+
+// [source,glsl]
+[source,glsl]
+----
+OpDecorate %1 SpecId 0  ; decorate our signed 32-bit integer constant
+OpDecorate %2 SpecId 12 ; decorate our 32-bit floating-point constant
+%i32 = OpTypeInt 32 1   ; declare a signed 32-bit type
+%float = OpTypeFloat 32 ; declare a 32-bit floating-point type
+%1 = OpSpecConstant %i32 -1 ; some signed 32-bit integer constant
+%2 = OpSpecConstant %float 0.5 ; some 32-bit floating-point constant
+----
+
+From the above we have two specialization constants, one is a signed 32-bit
+integer and the second is a 32-bit floating-point value.
+
+Now to specialize the above via the specialization constants mechanism:
+
+[source,c++]
+----
+struct SpecializationData {
+    int32_t data0;
+    float data1;
+};
+
+const VkSpecializationMapEntry entries[] =
+{
+    {
+        .constantID = 0,
+        .offset = offsetof(SpecializationData, data0),
+        .size = sizeof(SpecializationData::data0)
+    },
+    {
+        .constantID = 12,
+        .offset = offsetof(SpecializationData, data1),
+        .size = sizeof(SpecializationData::data1)
+    }
+};
+
+SpecializationData data;
+data.data0 = -42;    // set the data for the 32-bit integer
+data.data1 = 42.0f;  // set the data for the 32-bit floating-point
+
+const VkSpecializationInfo info =
+{
+    .mapEntryCount = 2,
+    .pMapEntries = entries,
+    .dataSize = sizeof(data),
+    .pdata = &data,
+};
+----
+
+It is legal for a SPIR-V module with specializations to be compiled into a
+pipeline where no specialization information was provided.
+SPIR-V specialization constants contain default values such that if a
+specialization is not provided, the default value will be used.
+In the examples above, it would be valid for an application to only
+specialize some of the specialization constants within the SPIR-V module,
+and let the other constants use their default values encoded within the
+OpSpecConstant declarations.
+
+
+ifdef::VK_KHR_pipeline_library[]
+[[pipelines-library]]
+== Pipeline Libraries
+
+A pipeline library is a special pipeline that was created using the
+ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and cannot be bound, instead it
+defines a set of pipeline state which can be linked into other pipelines.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For ray tracing pipelines this includes shaders and shader groups.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+For graphics pipelines this includes distinct library types defined by
+elink:VkGraphicsPipelineLibraryFlagBitsEXT.
+endif::VK_EXT_graphics_pipeline_library[]
+The application must: maintain the lifetime of a pipeline library based on
+the pipelines that link with it.
+
+This linkage is achieved by using the following structure within the
+appropriate creation mechanisms:
+
+[open,refpage='VkPipelineLibraryCreateInfoKHR',desc='Structure specifying pipeline libraries to use when creating a pipeline',type='structs']
+--
+The sname:VkPipelineLibraryCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineLibraryCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:libraryCount is the number of pipeline libraries in
+    pname:pLibraries.
+  * pname:pLibraries is a pointer to an array of slink:VkPipeline structures
+    specifying pipeline libraries to use when creating a pipeline.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381]]
+    Each element of pname:pLibraries must: have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+ifdef::VK_EXT_shader_module_identifier[]
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-06855]]
+    If any library in pname:pLibraries was created with a shader stage with
+    slink:VkPipelineShaderStageModuleIdentifierCreateInfoEXT and
+    pname:identifierSize not equal to 0, the pipeline must: be created with
+    the ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag
+    set
+endif::VK_EXT_shader_module_identifier[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-08096]]
+    If any element of pname:pLibraries was created with
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, all elements must:
+    have been created with
+    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07404]]
+    If pname:pipeline is being created with
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element of
+    pname:pLibraries must: have been created with
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07405]]
+    If pname:pipeline is being created without
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element of
+    pname:pLibraries must: have been created without
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07406]]
+    If pname:pipeline is being created with
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element of
+    pname:pLibraries must: have been created with
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
+  * [[VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07407]]
+    If pname:pipeline is being created without
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element of
+    pname:pLibraries must: have been created without
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
+endif::VK_EXT_pipeline_protected_access[]
+****
+
+include::{generated}/validity/structs/VkPipelineLibraryCreateInfoKHR.adoc[]
+--
+
+Pipelines created with ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR libraries
+can: depend on other pipeline libraries in
+slink:VkPipelineLibraryCreateInfoKHR.
+
+A pipeline library is considered in-use, as long as one of the linking
+pipelines is in-use.
+This applies recursively if a pipeline library includes other pipeline
+libraries.
+
+endif::VK_KHR_pipeline_library[]
+
+
+[[pipelines-binding]]
+== Pipeline Binding
+
+[open,refpage='vkCmdBindPipeline',desc='Bind a pipeline object to a command buffer',type='protos']
+--
+Once a pipeline has been created, it can: be bound to the command buffer
+using the command:
+
+include::{generated}/api/protos/vkCmdBindPipeline.adoc[]
+
+  * pname:commandBuffer is the command buffer that the pipeline will be
+    bound to.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    to which bind point the pipeline is bound.
+    Binding one does not disturb the others.
+  * pname:pipeline is the pipeline to be bound.
+
+[[pipelines-bindpoint-commands]]
+Once bound, a pipeline binding affects subsequent commands that interact
+with the given pipeline type in the command buffer until a different
+pipeline of the same type is bound to the bind
+ifdef::VK_EXT_shader_object[]
+point, or until the pipeline bind point is disturbed by binding a
+<<shaders-objects, shader object>> as described in
+<<shaders-objects-pipeline-interaction, Interaction with Pipelines>>.
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[]
+point.
+endif::VK_EXT_shader_object[]
+Commands that do not interact with the <<shaders-binding,given pipeline>>
+type must: not be affected by the pipeline state.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00777]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support compute operations
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00778]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00779]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE,
+    pname:pipeline must: be a compute pipeline
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-00780]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
+    pname:pipeline must: be a graphics pipeline
+  * [[VUID-vkCmdBindPipeline-pipeline-00781]]
+    If the <<features-variableMultisampleRate,
+    pname:variableMultisampleRate>> feature is not supported, pname:pipeline
+    is a graphics pipeline, the current subpass <<renderpass-noattachments,
+    uses no attachments>>, and this is not the first call to this function
+    with a graphics pipeline after transitioning to the current subpass,
+    then the sample count specified by this pipeline must: match that set in
+    the previous pipeline
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-vkCmdBindPipeline-variableSampleLocations-01525]]
+    If
+    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
+    is ename:VK_FALSE, and pname:pipeline is a graphics pipeline created
+    with a slink:VkPipelineSampleLocationsStateCreateInfoEXT structure
+    having its pname:sampleLocationsEnable member set to ename:VK_TRUE but
+    without ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled then the
+    current render pass instance must: have been begun by specifying a
+    slink:VkRenderPassSampleLocationsBeginInfoEXT structure whose
+    pname:pPostSubpassSampleLocations member contains an element with a
+    pname:subpassIndex matching the current subpass index and the
+    pname:sampleLocationsInfo member of that element must: match the
+    pname:sampleLocationsInfo specified in
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT when the pipeline was
+    created
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdBindPipeline-None-02323]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02391]]
+    If pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, the sname:VkCommandPool
+    that pname:commandBuffer was allocated from must: support compute
+    operations
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-02392]]
+    If pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pname:pipeline must: be a
+    ray tracing pipeline
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-06721]]
+    If pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pname:commandBuffer must:
+    not be a protected command buffer
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_EXT_pipeline_protected_access[]
+  * [[VUID-vkCmdBindPipeline-pipelineProtectedAccess-07408]]
+    If the <<features-pipelineProtectedAccess,
+    pname:pipelineProtectedAccess>> feature is enabled, and
+    pname:commandBuffer is a protected command buffer, pname:pipeline must:
+    have been created without
+    ename:VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
+  * [[VUID-vkCmdBindPipeline-pipelineProtectedAccess-07409]]
+    If the <<features-pipelineProtectedAccess,
+    pname:pipelineProtectedAccess>> feature is enabled, and
+    pname:commandBuffer is not a protected command buffer, pname:pipeline
+    must: have been created without
+    ename:VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
+endif::VK_EXT_pipeline_protected_access[]
+ifdef::VK_KHR_pipeline_library[]
+  * [[VUID-vkCmdBindPipeline-pipeline-03382]]
+    pname:pipeline must: not have been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR set
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdBindPipeline-commandBuffer-04808]]
+    If pname:commandBuffer is a secondary command buffer with
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled and pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS, then the pname:pipeline must:
+    have been created with ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT or
+    ename:VK_DYNAMIC_STATE_VIEWPORT, and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT or
+    ename:VK_DYNAMIC_STATE_SCISSOR enabled
+endif::VK_NV_inherited_viewport_scissor[]
+ifdef::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
+  * [[VUID-vkCmdBindPipeline-commandBuffer-04809]]
+    If pname:commandBuffer is a secondary command buffer with
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled and pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS and pname:pipeline was created
+    with slink:VkPipelineDiscardRectangleStateCreateInfoEXT structure and
+    its pname:discardRectangleCount member is not `0`, or the pipeline was
+    created with ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT
+    enabled, then the pipeline must: have been created with
+    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT enabled
+endif::VK_NV_inherited_viewport_scissor,VK_EXT_discard_rectangles[]
+ifdef::VK_EXT_provoking_vertex[]
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04881]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS and
+    the <<limits-provokingVertexModePerPipeline,
+    pname:provokingVertexModePerPipeline>> limit is ename:VK_FALSE, then
+    pipeline's
+    slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
+    must: be the same as that of any other pipelines previously bound to
+    this bind point within the current render pass instance, including any
+    pipeline already bound when beginning the render pass instance
+endif::VK_EXT_provoking_vertex[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04949]]
+    If pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support compute operations
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-04950]]
+    If pname:pipelineBindPoint is
+    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, pname:pipeline
+    must: be a subpass shading pipeline
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_EXT_graphics_pipeline_library[]
+  * [[VUID-vkCmdBindPipeline-pipelineBindPoint-06653]]
+    If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
+    pname:pipeline must: have been created without
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_EXT_graphics_pipeline_library[]
+****
+
+include::{generated}/validity/protos/vkCmdBindPipeline.adoc[]
+--
+
+[open,refpage='VkPipelineBindPoint',desc='Specify the bind point of a pipeline object to a command buffer',type='enums']
+--
+Possible values of flink:vkCmdBindPipeline::pname:pipelineBindPoint,
+specifying the bind point of a pipeline object, are:
+
+include::{generated}/api/enums/VkPipelineBindPoint.adoc[]
+
+  * ename:VK_PIPELINE_BIND_POINT_COMPUTE specifies binding as a compute
+    pipeline.
+  * ename:VK_PIPELINE_BIND_POINT_GRAPHICS specifies binding as a graphics
+    pipeline.
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR specifies binding as a ray
+    tracing pipeline.
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI specifies binding as
+    a subpass shading pipeline.
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_AMDX_shader_enqueue[]
+  * ename:VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX specifies binding as
+    an <<executiongraphs, execution graph pipeline>>.
+endif::VK_AMDX_shader_enqueue[]
+--
+
+ifdef::VK_NV_device_generated_commands[]
+[open,refpage='vkCmdBindPipelineShaderGroupNV',desc='Bind a pipeline object's shader group to a command buffer',type='protos']
+--
+For pipelines that were created with the support of multiple shader groups
+(see <<graphics-shadergroups,Graphics Pipeline Shader Groups>>), the regular
+fname:vkCmdBindPipeline command will bind Shader Group `0`.
+To explicitly bind a shader group use:
+
+include::{generated}/api/protos/vkCmdBindPipelineShaderGroupNV.adoc[]
+
+  * pname:commandBuffer is the command buffer that the pipeline will be
+    bound to.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    the bind point to which the pipeline will be bound.
+  * pname:pipeline is the pipeline to be bound.
+  * pname:groupIndex is the shader group to be bound.
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893]]
+    pname:groupIndex must: be `0` or less than the effective
+    slink:VkGraphicsPipelineShaderGroupsCreateInfoNV::pname:groupCount
+    including the referenced pipelines
+  * [[VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894]]
+    The pname:pipelineBindPoint must: be
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+  * [[VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895]]
+    The same restrictions as flink:vkCmdBindPipeline apply as if the bound
+    pipeline was created only with the Shader Group from the
+    pname:groupIndex information
+  * [[VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896]]
+    The <<features-deviceGeneratedCommands, pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdBindPipelineShaderGroupNV.adoc[]
+--
+endif::VK_NV_device_generated_commands[]
+
+ifdef::VK_EXT_shader_object[]
+[[pipelines-shader-object-interaction]]
+=== Interaction With Shader Objects
+
+If the <<features-shaderObject, pname:shaderObject>> feature is enabled,
+applications can: use both pipelines and <<shaders-objects, shader objects>>
+at the same time.
+The interaction between pipelines and shader objects is described in
+<<shaders-objects-pipeline-interaction, Interaction with Pipelines>>.
+endif::VK_EXT_shader_object[]
+
+[[pipelines-dynamic-state]]
+== Dynamic State
+
+When a pipeline object is bound, any pipeline object state that is not
+specified as dynamic is applied to the command buffer state.
+Pipeline object state that is specified as dynamic is not applied to the
+command buffer state at this time.
+Instead, dynamic state can: be modified at any time and persists for the
+lifetime of the command buffer, or until modified by another dynamic state
+setting command, or made invalid by another pipeline bind with that state
+specified as static.
+
+When a pipeline object is bound, the following applies to each state
+parameter:
+
+  * If the state is not specified as dynamic in the new pipeline object,
+    then that command buffer state is overwritten by the state in the new
+    pipeline object.
+    Before any draw or dispatch call with this pipeline there must: not have
+    been any calls to any of the corresponding dynamic state setting
+    commands after this pipeline was bound.
+  * If the state is specified as dynamic in the new pipeline object, then
+    that command buffer state is not disturbed.
+    Before any draw or dispatch call with this pipeline there must: have
+    been at least one call to each of the corresponding dynamic state
+    setting commands.
+    The state-setting commands must: be recorded after command buffer
+    recording was begun, or after the last command binding a pipeline object
+    with that state specified as static, whichever was the latter.
+  * If the state is not included (corresponding pointer in
+    slink:VkGraphicsPipelineCreateInfo was `NULL` or was ignored) in the new
+    pipeline object, then that command buffer state is not disturbed.
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    For example, mesh shading pipelines do not include vertex input state
+    and therefore do not disturb any such command buffer state.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+Dynamic state that does not affect the result of operations can: be left
+undefined:.
+
+[NOTE]
+.Note
+====
+For example, if blending is disabled by the pipeline object state then the
+dynamic color blend constants do not need to be specified in the command
+buffer, even if this state is specified as dynamic in the pipeline object.
+====
+
+
+ifdef::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
+[[pipelines-shader-information]]
+== Pipeline Properties and Shader Information
+endif::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
+
+ifdef::VK_KHR_pipeline_executable_properties[]
+[open,refpage='vkGetPipelineExecutablePropertiesKHR',desc='Get the executables associated with a pipeline',type='protos']
+--
+When a pipeline is created, its state and shaders are compiled into zero or
+more device-specific executables, which are used when executing commands
+against that pipeline.
+To query the properties of these pipeline executables, call:
+
+include::{generated}/api/protos/vkGetPipelineExecutablePropertiesKHR.adoc[]
+
+  * pname:device is the device that created the pipeline.
+  * pname:pPipelineInfo describes the pipeline being queried.
+  * pname:pExecutableCount is a pointer to an integer related to the number
+    of pipeline executables available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkPipelineExecutablePropertiesKHR structures.
+
+If pname:pProperties is `NULL`, then the number of pipeline executables
+associated with the pipeline is returned in pname:pExecutableCount.
+Otherwise, pname:pExecutableCount must: point to a variable set by the user
+to the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pExecutableCount is less than the number of pipeline executables
+associated with the pipeline, at most pname:pExecutableCount structures will
+be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available properties were
+returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270]]
+    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
+    feature must: be enabled
+  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271]]
+    The pname:pipeline member of pname:pPipelineInfo must: have been created
+    with pname:device
+****
+
+include::{generated}/validity/protos/vkGetPipelineExecutablePropertiesKHR.adoc[]
+--
+
+[open,refpage='VkPipelineExecutablePropertiesKHR',desc='Structure describing a pipeline executable',type='structs']
+--
+The sname:VkPipelineExecutablePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineExecutablePropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stages is a bitmask of zero or more elink:VkShaderStageFlagBits
+    indicating which shader stages (if any) were principally used as inputs
+    to compile this pipeline executable.
+  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a short human
+    readable name for this pipeline executable.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a human readable
+    description for this pipeline executable.
+  * pname:subgroupSize is the subgroup size with which this pipeline
+    executable is dispatched.
+
+Not all implementations have a 1:1 mapping between shader stages and
+pipeline executables and some implementations may: reduce a given shader
+stage to fixed function hardware programming such that no pipeline
+executable is available.
+No guarantees are provided about the mapping between shader stages and
+pipeline executables and pname:stages should: be considered a best effort
+hint.
+Because the application cannot: rely on the pname:stages field to provide an
+exact description, pname:name and pname:description provide a human readable
+name and description which more accurately describes the given pipeline
+executable.
+
+include::{generated}/validity/structs/VkPipelineExecutablePropertiesKHR.adoc[]
+--
+endif::VK_KHR_pipeline_executable_properties[]
+
+ifdef::VK_EXT_pipeline_properties[]
+[open,refpage='vkGetPipelinePropertiesEXT',desc='Query pipeline properties',type='protos']
+--
+To query the pipeline properties call:
+
+include::{generated}/api/protos/vkGetPipelinePropertiesEXT.adoc[]
+
+  * pname:device is the logical device that created the pipeline.
+  * pname:pPipelineInfo is a pointer to a slink:VkPipelineInfoEXT structure
+    which describes the pipeline being queried.
+  * pname:pPipelineProperties is a pointer to a slink:VkBaseOutStructure
+    structure in which the pipeline properties will be written.
+
+To query a pipeline's pname:pipelineIdentifier pass a
+slink:VkPipelinePropertiesIdentifierEXT structure in
+pname:pPipelineProperties.
+Each pipeline is associated with a pname:pipelineIdentifier and the
+identifier is implementation specific.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelinePropertiesEXT-pipeline-06738]]
+    The pname:pipeline member of pname:pPipelineInfo must have been created
+    with pname:device
+  * [[VUID-vkGetPipelinePropertiesEXT-pPipelineProperties-06739]]
+    pname:pPipelineProperties must: be a valid pointer to a
+    slink:VkPipelinePropertiesIdentifierEXT structure
+  * [[VUID-vkGetPipelinePropertiesEXT-None-06766]]
+    The <<features-pipelinePropertiesIdentifier,
+    pname:pipelinePropertiesIdentifier>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetPipelinePropertiesEXT.adoc[]
+--
+
+[open,refpage='VkPipelinePropertiesIdentifierEXT',desc='Structure used to retrieve pipeline properties',type='structs']
+--
+The sname:VkPipelinePropertiesIdentifierEXT structure is defined as:
+
+include::{generated}/api/structs/VkPipelinePropertiesIdentifierEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipelineIdentifier is an array of ename:VK_UUID_SIZE code:uint8_t
+    values into which the pipeline identifier will be written.
+
+include::{generated}/validity/structs/VkPipelinePropertiesIdentifierEXT.adoc[]
+--
+endif::VK_EXT_pipeline_properties[]
+
+// This structure is used by both vkGetPipelineExecutablePropertiesKHR and
+// vkGetPipelinePropertiesEXT above, placing it in a nonstandard position.
+ifdef::VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
+[open,refpage='VkPipelineInfoKHR',desc='Structure describing a pipeline',type='structs',alias='VkPipelineInfoEXT']
+--
+The sname:VkPipelineInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineInfoKHR.adoc[]
+
+ifdef::VK_EXT_pipeline_properties[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineInfoEXT.adoc[]
+endif::VK_EXT_pipeline_properties[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipeline is a sname:VkPipeline handle.
+
+include::{generated}/validity/structs/VkPipelineInfoKHR.adoc[]
+--
+endif::VK_KHR_pipeline_executable_properties,VK_EXT_pipeline_properties[]
+
+ifdef::VK_KHR_pipeline_executable_properties[]
+[open,refpage='vkGetPipelineExecutableStatisticsKHR',desc='Get compile time statistics associated with a pipeline executable',type='protos']
+--
+Each pipeline executable may: have a set of statistics associated with it
+that are generated by the pipeline compilation process.
+These statistics may: include things such as instruction counts, amount of
+spilling (if any), maximum number of simultaneous threads, or anything else
+which may: aid developers in evaluating the expected performance of a
+shader.
+To query the compile time statistics associated with a pipeline executable,
+call:
+
+include::{generated}/api/protos/vkGetPipelineExecutableStatisticsKHR.adoc[]
+
+  * pname:device is the device that created the pipeline.
+  * pname:pExecutableInfo describes the pipeline executable being queried.
+  * pname:pStatisticCount is a pointer to an integer related to the number
+    of statistics available or queried, as described below.
+  * pname:pStatistics is either `NULL` or a pointer to an array of
+    slink:VkPipelineExecutableStatisticKHR structures.
+
+If pname:pStatistics is `NULL`, then the number of statistics associated
+with the pipeline executable is returned in pname:pStatisticCount.
+Otherwise, pname:pStatisticCount must: point to a variable set by the user
+to the number of elements in the pname:pStatistics array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pStatistics.
+If pname:pStatisticCount is less than the number of statistics associated
+with the pipeline executable, at most pname:pStatisticCount structures will
+be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available statistics were
+returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272]]
+    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
+    feature must: be enabled
+  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273]]
+    The pname:pipeline member of pname:pExecutableInfo must: have been
+    created with pname:device
+  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274]]
+    The pname:pipeline member of pname:pExecutableInfo must: have been
+    created with ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
+****
+
+include::{generated}/validity/protos/vkGetPipelineExecutableStatisticsKHR.adoc[]
+--
+
+[open,refpage='VkPipelineExecutableInfoKHR',desc='Structure describing a pipeline executable to query for associated statistics or internal representations',type='structs']
+--
+The sname:VkPipelineExecutableInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineExecutableInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pipeline is the pipeline to query.
+  * pname:executableIndex is the index of the pipeline executable to query
+    in the array of executable properties returned by
+    flink:vkGetPipelineExecutablePropertiesKHR.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineExecutableInfoKHR-executableIndex-03275]]
+    pname:executableIndex must: be less than the number of pipeline
+    executables associated with pname:pipeline as returned in the
+    pname:pExecutableCount parameter of
+    fname:vkGetPipelineExecutablePropertiesKHR
+****
+
+include::{generated}/validity/structs/VkPipelineExecutableInfoKHR.adoc[]
+--
+
+[open,refpage='VkPipelineExecutableStatisticKHR',desc='Structure describing a compile time pipeline executable statistic',type='structs']
+--
+The sname:VkPipelineExecutableStatisticKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineExecutableStatisticKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a short human
+    readable name for this statistic.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a human readable
+    description for this statistic.
+  * pname:format is a elink:VkPipelineExecutableStatisticFormatKHR value
+    specifying the format of the data found in pname:value.
+  * pname:value is the value of this statistic.
+
+include::{generated}/validity/structs/VkPipelineExecutableStatisticKHR.adoc[]
+--
+
+[open,refpage='VkPipelineExecutableStatisticFormatKHR',desc='Enum describing a pipeline executable statistic's data format',type='enums']
+--
+The ename:VkPipelineExecutableStatisticFormatKHR enum is defined as:
+
+include::{generated}/api/enums/VkPipelineExecutableStatisticFormatKHR.adoc[]
+
+  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR specifies that
+    the statistic is returned as a 32-bit boolean value which must: be
+    either ename:VK_TRUE or ename:VK_FALSE and should: be read from the
+    fname:b32 field of sname:VkPipelineExecutableStatisticValueKHR.
+  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR specifies that
+    the statistic is returned as a signed 64-bit integer and should: be read
+    from the fname:i64 field of sname:VkPipelineExecutableStatisticValueKHR.
+  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR specifies that
+    the statistic is returned as an unsigned 64-bit integer and should: be
+    read from the fname:u64 field of
+    sname:VkPipelineExecutableStatisticValueKHR.
+  * ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR specifies that
+    the statistic is returned as a 64-bit floating-point value and should:
+    be read from the fname:f64 field of
+    sname:VkPipelineExecutableStatisticValueKHR.
+--
+
+[open,refpage='VkPipelineExecutableStatisticValueKHR',desc='A union describing a pipeline executable statistic's value',type='structs']
+--
+The sname:VkPipelineExecutableStatisticValueKHR union is defined as:
+
+include::{generated}/api/structs/VkPipelineExecutableStatisticValueKHR.adoc[]
+
+  * pname:b32 is the 32-bit boolean value if the
+    ename:VkPipelineExecutableStatisticFormatKHR is
+    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR.
+  * pname:i64 is the signed 64-bit integer value if the
+    ename:VkPipelineExecutableStatisticFormatKHR is
+    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR.
+  * pname:u64 is the unsigned 64-bit integer value if the
+    ename:VkPipelineExecutableStatisticFormatKHR is
+    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR.
+  * pname:f64 is the 64-bit floating-point value if the
+    ename:VkPipelineExecutableStatisticFormatKHR is
+    ename:VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR.
+
+include::{generated}/validity/structs/VkPipelineExecutableStatisticValueKHR.adoc[]
+--
+
+[open,refpage='vkGetPipelineExecutableInternalRepresentationsKHR',desc='Get internal representations of the pipeline executable',type='protos']
+--
+Each pipeline executable may: have one or more text or binary internal
+representations associated with it which are generated as part of the
+compile process.
+These may: include the final shader assembly, a binary form of the compiled
+shader, or the shader compiler's internal representation at any number of
+intermediate compile steps.
+To query the internal representations associated with a pipeline executable,
+call:
+
+include::{generated}/api/protos/vkGetPipelineExecutableInternalRepresentationsKHR.adoc[]
+
+  * pname:device is the device that created the pipeline.
+  * pname:pExecutableInfo describes the pipeline executable being queried.
+  * pname:pInternalRepresentationCount is a pointer to an integer related to
+    the number of internal representations available or queried, as
+    described below.
+  * pname:pInternalRepresentations is either `NULL` or a pointer to an array
+    of slink:VkPipelineExecutableInternalRepresentationKHR structures.
+
+If pname:pInternalRepresentations is `NULL`, then the number of internal
+representations associated with the pipeline executable is returned in
+pname:pInternalRepresentationCount.
+Otherwise, pname:pInternalRepresentationCount must: point to a variable set
+by the user to the number of elements in the pname:pInternalRepresentations
+array, and on return the variable is overwritten with the number of
+structures actually written to pname:pInternalRepresentations.
+If pname:pInternalRepresentationCount is less than the number of internal
+representations associated with the pipeline executable, at most
+pname:pInternalRepresentationCount structures will be written, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available representations were returned.
+
+While the details of the internal representations remain
+implementation-dependent, the implementation should: order the internal
+representations in the order in which they occur in the compiled pipeline
+with the final shader assembly (if any) last.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276]]
+    The <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>>
+    feature must: be enabled
+  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277]]
+    The pname:pipeline member of pname:pExecutableInfo must: have been
+    created with pname:device
+  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278]]
+    The pname:pipeline member of pname:pExecutableInfo must: have been
+    created with
+    ename:VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR
+****
+
+include::{generated}/validity/protos/vkGetPipelineExecutableInternalRepresentationsKHR.adoc[]
+--
+
+[open,refpage='VkPipelineExecutableInternalRepresentationKHR',desc='Structure describing the textual form of a pipeline executable internal representation',type='structs']
+--
+The sname:VkPipelineExecutableInternalRepresentationKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineExecutableInternalRepresentationKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:name is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a short human
+    readable name for this internal representation.
+  * pname:description is an array of ename:VK_MAX_DESCRIPTION_SIZE code:char
+    containing a null-terminated UTF-8 string which is a human readable
+    description for this internal representation.
+  * pname:isText specifies whether the returned data is text or opaque data.
+    If pname:isText is ename:VK_TRUE then the data returned in pname:pData
+    is text and is guaranteed to be a null-terminated UTF-8 string.
+  * pname:dataSize is an integer related to the size, in bytes, of the
+    internal representation's data, as described below.
+  * pname:pData is either `NULL` or a pointer to a block of data into which
+    the implementation will write the internal representation.
+
+If pname:pData is `NULL`, then the size, in bytes, of the internal
+representation data is returned in pname:dataSize.
+Otherwise, pname:dataSize must be the size of the buffer, in bytes, pointed
+to by pname:pData and on return pname:dataSize is overwritten with the
+number of bytes of data actually written to pname:pData including any
+trailing null character.
+If pname:dataSize is less than the size, in bytes, of the internal
+representation's data, at most pname:dataSize bytes of data will be written
+to pname:pData, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available representation was
+returned.
+
+If pname:isText is ename:VK_TRUE and pname:pData is not `NULL` and
+pname:dataSize is not zero, the last byte written to pname:pData will be a
+null character.
+
+include::{generated}/validity/structs/VkPipelineExecutableInternalRepresentationKHR.adoc[]
+--
+endif::VK_KHR_pipeline_executable_properties[]
+
+
+ifdef::VK_AMD_shader_info[]
+include::{chapters}/VK_AMD_shader_info.adoc[]
+endif::VK_AMD_shader_info[]
+
+
+// These includes have their own section headers
+
+ifdef::VK_AMD_pipeline_compiler_control[]
+include::{chapters}/VK_AMD_pipeline_compiler_control.adoc[]
+endif::VK_AMD_pipeline_compiler_control[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_feedback[]
+include::{chapters}/VK_EXT_pipeline_creation_feedback/pipelines.adoc[]
+endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_feedback[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/preamble.adoc b/codegen/vulkan/vulkan-docs-next/chapters/preamble.adoc
new file mode 100644
index 0000000..90a6ed4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/preamble.adoc
@@ -0,0 +1,12 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Note that this file is used to pull the Khronos Specification Copyright
+// into the output documents generated by Khronos. This file itself is under
+// CC-BY-4.0, but the output specifications are not.
+
+[[preamble]]
+= Preamble
+
+include::{config}/copyright-spec.adoc[]
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/primsrast.adoc b/codegen/vulkan/vulkan-docs-next/chapters/primsrast.adoc
new file mode 100644
index 0000000..d7bdee4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/primsrast.adoc
@@ -0,0 +1,4319 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[primsrast]]
+= Rasterization
+
+Rasterization is the process by which a primitive is converted to a
+two-dimensional image.
+Each discrete location of this image contains associated data such as depth,
+color, or other attributes.
+
+Rasterizing a primitive begins by determining which squares of an integer
+grid in framebuffer coordinates are occupied by the primitive, and assigning
+one or more depth values to each such square.
+This process is described below for points, lines, and polygons.
+
+A grid square, including its [eq]#(x,y)# framebuffer coordinates, [eq]#z#
+(depth), and associated data added by fragment shaders, is called a
+fragment.
+A fragment is located by its upper left corner, which lies on integer grid
+coordinates.
+
+Rasterization operations also refer to a fragment's sample locations, which
+are offset by fractional values from its upper left corner.
+The rasterization rules for points, lines, and triangles involve testing
+whether each sample location is inside the primitive.
+Fragments need not actually be square, and rasterization rules are not
+affected by the aspect ratio of fragments.
+Display of non-square grids, however, will cause rasterized points and line
+segments to appear fatter in one direction than the other.
+
+We assume that fragments are square, since it simplifies antialiasing and
+texturing.
+After rasterization, fragments are processed by <<fragops, fragment
+operations>>.
+
+Several factors affect rasterization, including the members of
+slink:VkPipelineRasterizationStateCreateInfo and
+slink:VkPipelineMultisampleStateCreateInfo.
+
+[open,refpage='VkPipelineRasterizationStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline rasterization state',type='structs']
+--
+The sname:VkPipelineRasterizationStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:depthClampEnable controls whether to clamp the fragment's depth
+    values as described in <<fragops-depth,Depth Test>>.
+ifdef::VK_EXT_depth_clip_enable[]
+    If the pipeline is not created with
+    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT present then
+    enabling depth clamp will also disable clipping primitives to the z
+    planes of the frustrum as described in <<vertexpostproc-clipping,
+    Primitive Clipping>>.
+    Otherwise depth clipping is controlled by the state set in
+    slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT.
+endif::VK_EXT_depth_clip_enable[]
+ifndef::VK_EXT_depth_clip_enable[]
+    Enabling depth clamp will also disable clipping primitives to the z
+    planes of the frustrum as described in <<vertexpostproc-clipping,
+    Primitive Clipping>>.
+endif::VK_EXT_depth_clip_enable[]
+  * pname:rasterizerDiscardEnable controls whether primitives are discarded
+    immediately before the rasterization stage.
+  * pname:polygonMode is the triangle rendering mode.
+    See elink:VkPolygonMode.
+  * pname:cullMode is the triangle facing direction used for primitive
+    culling.
+    See elink:VkCullModeFlagBits.
+  * pname:frontFace is a elink:VkFrontFace value specifying the front-facing
+    triangle orientation to be used for culling.
+  * pname:depthBiasEnable controls whether to bias fragment depth values.
+  * pname:depthBiasConstantFactor is a scalar factor controlling the
+    constant depth value added to each fragment.
+  * pname:depthBiasClamp is the maximum (or minimum) depth bias of a
+    fragment.
+  * pname:depthBiasSlopeFactor is a scalar factor applied to a fragment's
+    slope in depth bias calculations.
+  * pname:lineWidth is the width of rasterized line segments.
+
+ifdef::VK_AMD_rasterization_order[]
+The application can: also add a
+sname:VkPipelineRasterizationStateRasterizationOrderAMD structure to the
+pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
+structure.
+This structure enables selecting the rasterization order to use when
+rendering with the corresponding graphics pipeline as described in
+<<primsrast-order, Rasterization Order>>.
+endif::VK_AMD_rasterization_order[]
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782]]
+    If the <<features-depthClamp, pname:depthClamp>> feature is not enabled,
+    pname:depthClampEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507]]
+    If the <<features-fillModeNonSolid, pname:fillModeNonSolid>> feature is
+    not enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL
+ifdef::VK_NV_fill_rectangle[or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV]
+ifdef::VK_NV_fill_rectangle[]
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414]]
+    If the `apiext:VK_NV_fill_rectangle` extension is not enabled,
+    pname:polygonMode must: not be ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV
+endif::VK_NV_fill_rectangle[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:pointPolygons
+    is ename:VK_FALSE, and pname:rasterizerDiscardEnable is ename:VK_FALSE,
+    pname:polygonMode must: not be ename:VK_POLYGON_MODE_POINT
+endif::VK_KHR_portability_subset[]
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineRasterizationStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationStateCreateFlags.adoc[]
+
+tname:VkPipelineRasterizationStateCreateFlags is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_EXT_depth_clip_enable[]
+[open,refpage='VkPipelineRasterizationDepthClipStateCreateInfoEXT',desc='Structure specifying depth clipping state',type='structs']
+--
+If the pname:pNext chain of slink:VkPipelineRasterizationStateCreateInfo
+includes a sname:VkPipelineRasterizationDepthClipStateCreateInfoEXT
+structure, then that structure controls whether depth clipping is enabled or
+disabled.
+
+The sname:VkPipelineRasterizationDepthClipStateCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationDepthClipStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:depthClipEnable controls whether depth clipping is enabled as
+    described in <<vertexpostproc-clipping, Primitive Clipping>>.
+
+include::{generated}/validity/structs/VkPipelineRasterizationDepthClipStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkPipelineRasterizationDepthClipStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationDepthClipStateCreateFlagsEXT.adoc[]
+
+tname:VkPipelineRasterizationDepthClipStateCreateFlagsEXT is a bitmask type
+for setting a mask, but is currently reserved for future use.
+--
+endif::VK_EXT_depth_clip_enable[]
+
+[open,refpage='VkPipelineMultisampleStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline multisample state',type='structs']
+--
+The sname:VkPipelineMultisampleStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineMultisampleStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits value
+    specifying the number of samples used in rasterization.
+ifdef::VK_EXT_extended_dynamic_state3[]
+    This value is ignored for the purposes of setting the number of samples
+    used in rasterization if the pipeline is created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state set, but
+    if ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state is not set, it
+    is still used to define the size of the pname:pSampleMask array as
+    described below.
+endif::VK_EXT_extended_dynamic_state3[]
+  * pname:sampleShadingEnable can: be used to enable
+    <<primsrast-sampleshading,Sample Shading>>.
+  * pname:minSampleShading specifies a minimum fraction of sample shading if
+    pname:sampleShadingEnable is set to ename:VK_TRUE.
+  * pname:pSampleMask is a pointer to an array of basetype:VkSampleMask
+    values used in the <<fragops-samplemask,sample mask test>>.
+  * pname:alphaToCoverageEnable controls whether a temporary coverage value
+    is generated based on the alpha component of the fragment's first color
+    output as specified in the <<fragops-covg,Multisample Coverage>>
+    section.
+  * pname:alphaToOneEnable controls whether the alpha component of the
+    fragment's first color output is replaced with one as described in
+    <<fragops-covg,Multisample Coverage>>.
+
+Each bit in the sample mask is associated with a unique
+<<primsrast-multisampling-coverage-mask, sample index>> as defined for the
+<<primsrast-multisampling-coverage-mask, coverage mask>>.
+Each bit [eq]#b# for mask word [eq]#w# in the sample mask corresponds to
+sample index [eq]#i#, where [eq]#i = 32 {times} w {plus} b#.
+pname:pSampleMask has a length equal to [eq]#{lceil}
+pname:rasterizationSamples / 32 {rceil}# words.
+
+If pname:pSampleMask is `NULL`, it is treated as if the mask has all bits
+set to `1`.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784]]
+    If the <<features-sampleRateShading, pname:sampleRateShading>> feature
+    is not enabled, pname:sampleShadingEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785]]
+    If the <<features-alphaToOne, pname:alphaToOne>> feature is not enabled,
+    pname:alphaToOneEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786]]
+    pname:minSampleShading must: be in the range [eq]#[0,1]#
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415]]
+    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    and if the subpass has any color attachments and
+    pname:rasterizationSamples is greater than the number of color samples,
+    then pname:sampleShadingEnable must: be ename:VK_FALSE
+endif::VK_NV_framebuffer_mixed_samples[]
+****
+
+include::{generated}/validity/structs/VkPipelineMultisampleStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineMultisampleStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineMultisampleStateCreateFlags.adoc[]
+
+tname:VkPipelineMultisampleStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkSampleMask',desc='Mask of sample coverage information',type='basetypes',xrefs='VkPipelineMultisampleStateCreateInfo']
+--
+The elements of the sample mask array are of type basetype:VkSampleMask,
+each representing 32 bits of coverage information:
+
+include::{generated}/api/basetypes/VkSampleMask.adoc[]
+--
+
+Rasterization only generates fragments which cover one or more pixels inside
+the framebuffer.
+Pixels outside the framebuffer are never considered covered in the fragment.
+Fragments which would be produced by application of any of the primitive
+rasterization rules described below but which lie outside the framebuffer
+are not produced, nor are they processed by any later stage of the pipeline,
+including any of the <<fragops, fragment operations>>.
+
+Surviving fragments are processed by fragment shaders.
+Fragment shaders determine associated data for fragments, and can: also
+modify or replace their assigned depth values.
+
+
+[[primsrast-discard]]
+== Discarding Primitives Before Rasterization
+
+Primitives are discarded before rasterization if the
+pname:rasterizerDiscardEnable member of
+slink:VkPipelineRasterizationStateCreateInfo is enabled.
+When enabled, primitives are discarded after they are processed by the last
+active shader stage in the pipeline before rasterization.
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetRasterizerDiscardEnable',desc='Control whether primitives are discarded before the rasterization stage dynamically for a command buffer',type='protos',alias='vkCmdSetRasterizerDiscardEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically enable>> whether primitives are
+discarded before the rasterization stage, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetRasterizerDiscardEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetRasterizerDiscardEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:rasterizerDiscardEnable controls whether primitives are discarded
+    immediately before the rasterization stage.
+
+This command sets the discard enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetRasterizerDiscardEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state2_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetRasterizerDiscardEnable.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+
+ifdef::VK_EXT_transform_feedback[]
+[[primsrast-stream]]
+== Controlling the Vertex Stream Used for Rasterization
+
+By default vertex data output from the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> are directed to vertex stream zero.
+Geometry shaders can: emit primitives to multiple independent vertex
+streams.
+Each vertex emitted by the geometry shader is directed at one of the vertex
+streams.
+As vertices are received on each vertex stream, they are arranged into
+primitives of the type specified by the geometry shader output primitive
+type.
+The shading language instructions code:OpEndPrimitive and
+code:OpEndStreamPrimitive can: be used to end the primitive being assembled
+on a given vertex stream and start a new empty primitive of the same type.
+An implementation supports up to
+sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+streams, which is at least 1.
+The individual streams are numbered 0 through
+pname:maxTransformFeedbackStreams minus 1.
+There is no requirement on the order of the streams to which vertices are
+emitted, and the number of vertices emitted to each vertex stream can: be
+completely independent, subject only to the
+sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
+and
+sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataSize
+limits.
+The primitives output from all vertex streams are passed to the transform
+feedback stage to be captured to transform feedback buffers in the manner
+specified by the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader's code:XfbBuffer, code:XfbStride, and code:Offsets
+decorations on the output interface variables in the graphics pipeline.
+To use a vertex stream other than zero, or to use multiple streams, the
+code:GeometryStreams capability must: be specified.
+
+By default, the primitives output from vertex stream zero are rasterized.
+If the implementation supports the
+slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackRasterizationStreamSelect
+property it is possible to rasterize a vertex stream other than zero.
+
+By default, geometry shaders that emit vertices to multiple vertex streams
+are limited to using only the code:OutputPoints output primitive type.
+If the implementation supports the
+slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
+property it is possible to emit code:OutputLineStrip or
+code:OutputTriangleStrip in addition to code:OutputPoints.
+
+[open,refpage='VkPipelineRasterizationStateStreamCreateInfoEXT',desc='Structure defining the geometry stream used for rasterization',type='structs']
+--
+The vertex stream used for rasterization is specified by adding a
+sname:VkPipelineRasterizationStateStreamCreateInfoEXT structure to the
+pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
+structure.
+
+The sname:VkPipelineRasterizationStateStreamCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationStateStreamCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:rasterizationStream is the vertex stream selected for
+    rasterization.
+
+If this structure is not present, pname:rasterizationStream is assumed to be
+zero.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
+    must: be enabled
+  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02325]]
+    pname:rasterizationStream must: be less than
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02326]]
+    pname:rasterizationStream must: be zero if
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackRasterizationStreamSelect
+    is ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationStateStreamCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkPipelineRasterizationStateStreamCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationStateStreamCreateFlagsEXT.adoc[]
+
+tname:VkPipelineRasterizationStateStreamCreateFlagsEXT is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetRasterizationStreamEXT',desc='Specify the rasterization stream dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:rasterizationStream state, call:
+
+include::{generated}/api/protos/vkCmdSetRasterizationStreamEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:rasterizationStream specifies the pname:rasterizationStream state.
+
+This command sets the pname:rasterizationStream state for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetRasterizationStreamEXT
+:requiredfeature: extendedDynamicState3RasterizationStream
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetRasterizationStreamEXT-transformFeedback-07411]]
+    The <<features-transformFeedback, pname:transformFeedback>> feature
+    must: be enabled
+  * [[VUID-vkCmdSetRasterizationStreamEXT-rasterizationStream-07412]]
+    pname:rasterizationStream must: be less than
+    slink:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-vkCmdSetRasterizationStreamEXT-rasterizationStream-07413]]
+    pname:rasterizationStream must: be zero if
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackRasterizationStreamSelect
+    is ename:VK_FALSE
+****
+
+include::{generated}/validity/protos/vkCmdSetRasterizationStreamEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+endif::VK_EXT_transform_feedback[]
+
+
+[[primsrast-order]]
+== Rasterization Order
+
+Within a subpass of a <<renderpass,render pass instance>>, for a given
+(x,y,layer,sample) sample location, the following operations are guaranteed
+to execute in _rasterization order_, for each separate primitive that
+includes that sample location:
+
+  . <<fragops, Fragment operations>>, in the order defined
+  . <<framebuffer-blending, Blending>>, <<framebuffer-logicop, logic
+    operations>>, and color writes
+
+Execution of these operations for each primitive in a subpass occurs in
+ifndef::VK_AMD_rasterization_order[]
+<<drawing-primitive-order, primitive order>>.
+endif::VK_AMD_rasterization_order[]
+ifdef::VK_AMD_rasterization_order[]
+an order determined by the application.
+
+[open,refpage='VkPipelineRasterizationStateRasterizationOrderAMD',desc='Structure defining rasterization order for a graphics pipeline',type='structs']
+--
+The rasterization order to use for a graphics pipeline is specified by
+adding a sname:VkPipelineRasterizationStateRasterizationOrderAMD structure
+to the pname:pNext chain of a slink:VkPipelineRasterizationStateCreateInfo
+structure.
+
+The sname:VkPipelineRasterizationStateRasterizationOrderAMD structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationStateRasterizationOrderAMD.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:rasterizationOrder is a elink:VkRasterizationOrderAMD value
+    specifying the primitive rasterization order to use.
+
+include::{generated}/validity/structs/VkPipelineRasterizationStateRasterizationOrderAMD.adoc[]
+
+If the `apiext:VK_AMD_rasterization_order` device extension is not enabled
+or the application does not request a particular rasterization order through
+specifying a sname:VkPipelineRasterizationStateRasterizationOrderAMD
+structure then the rasterization order used by the graphics pipeline
+defaults to ename:VK_RASTERIZATION_ORDER_STRICT_AMD.
+--
+
+[open,refpage='VkRasterizationOrderAMD',desc='Specify rasterization order for a graphics pipeline',type='enums']
+--
+Possible values of
+slink:VkPipelineRasterizationStateRasterizationOrderAMD::pname:rasterizationOrder,
+specifying the primitive rasterization order, are:
+
+include::{generated}/api/enums/VkRasterizationOrderAMD.adoc[]
+
+  * ename:VK_RASTERIZATION_ORDER_STRICT_AMD specifies that operations for
+    each primitive in a subpass must: occur in <<drawing-primitive-order,
+    primitive order>>.
+  * ename:VK_RASTERIZATION_ORDER_RELAXED_AMD specifies that operations for
+    each primitive in a subpass may: not occur in <<drawing-primitive-order,
+    primitive order>>.
+--
+endif::VK_AMD_rasterization_order[]
+
+
+[[primsrast-multisampling]]
+== Multisampling
+
+Multisampling is a mechanism to antialias all Vulkan primitives: points,
+lines, and polygons.
+The technique is to sample all primitives multiple times at each pixel.
+Each sample in each framebuffer attachment has storage for a color, depth,
+and/or stencil value, such that per-fragment operations apply to each sample
+independently.
+The color sample values can: be later _resolved_ to a single color (see
+<<copies-resolve,Resolving Multisample Images>> and the <<renderpass,Render
+Pass>> chapter for more details on how to resolve multisample images to
+non-multisample images).
+
+Vulkan defines rasterization rules for single-sample modes in a way that is
+equivalent to a multisample mode with a single sample in the center of each
+fragment.
+
+Each fragment includes a <<primsrast-multisampling-coverage-mask, coverage
+mask>> with a single bit for each sample in the fragment, and a number of
+depth values and associated data for each sample.
+
+It is understood that each pixel has pname:rasterizationSamples locations
+associated with it.
+These locations are exact positions, rather than regions or areas, and each
+is referred to as a sample point.
+The sample points associated with a pixel must: be located inside or on the
+boundary of the unit square that is considered to bound the pixel.
+Furthermore, the relative locations of sample points may: be identical for
+each pixel in the framebuffer, or they may: differ.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment, each fragment only
+has pname:rasterizationSamples locations associated with it regardless of
+how many pixels are covered in the fragment area.
+Fragment sample locations are defined as if the fragment had an area of
+[eq]#(1,1)# and its sample points must: be located within these bounds.
+Their actual location in the framebuffer is calculated by scaling the sample
+location by the fragment area.
+Attachments with storage for multiple samples per pixel are located at the
+pixel sample locations.
+Otherwise, the fragment's sample locations are generally used for evaluation
+of associated data and fragment operations.
+endif::VK_EXT_fragment_density_map[]
+
+If the current pipeline includes a fragment shader with one or more
+variables in its interface decorated with code:Sample and code:Input, the
+data associated with those variables will be assigned independently for each
+sample.
+The values for each sample must: be evaluated at the location of the sample.
+The data associated with any other variables not decorated with code:Sample
+and code:Input need not be evaluated independently for each sample.
+
+[[primsrast-multisampling-coverage-mask]]
+A _coverage mask_ is generated for each fragment, based on which samples
+within that fragment are determined to be within the area of the primitive
+that generated the fragment.
+
+Single pixel fragments
+ifdef::VK_EXT_fragment_density_map[]
+and multi-pixel fragments defined by a
+<<renderpass-fragmentdensitymapattachment, fragment density map>>
+endif::VK_EXT_fragment_density_map[]
+have one set of samples.
+ifdef::VK_NV_shading_rate_image[]
+Multi-pixel fragments defined by a <<primsrast-shading-rate-image, shading
+rate image>> have one set of samples per pixel.
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate[]
+Multi-pixel fragments defined by setting the
+<<primsrast-fragment-shading-rate, fragment shading rate>> have one set of
+samples per pixel.
+endif::VK_KHR_fragment_shading_rate[]
+Each set of samples has a number of samples determined by
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
+Each sample in a set is assigned a unique _sample index_ [eq]#i# in the
+range [eq]#[0, pname:rasterizationSamples)#.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetRasterizationSamplesEXT',desc='Specify the rasterization samples dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:rasterizationSamples, call:
+
+include::{generated}/api/protos/vkCmdSetRasterizationSamplesEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:rasterizationSamples specifies pname:rasterizationSamples.
+
+This command sets the pname:rasterizationSamples for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetRasterizationSamplesEXT
+:requiredfeature: extendedDynamicState3RasterizationSamples
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetRasterizationSamplesEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[[primsrast-multisampling-coverageindex]]
+Each sample in a fragment is also assigned a unique _coverage index_ [eq]#j#
+in the range [eq]#[0, n {times} pname:rasterizationSamples)#, where [eq]#n#
+is the number of sets in the fragment.
+If the fragment contains a single set of samples, the _coverage index_ is
+always equal to the _sample index_.
+ifdef::VK_NV_shading_rate_image[]
+If a <<primsrast-shading-rate-image,shading rate image>> is used and a
+fragment covers multiple pixels, the coverage index is determined as defined
+by slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV or
+flink:vkCmdSetCoarseSampleOrderNV.
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[[primsrast-multisampling-coverage-mask-vrfs]]
+If the <<primsrast-fragment-shading-rate, fragment shading rate>> is set,
+the coverage index [eq]#j# is determined as a function of the _pixel index_
+[eq]#p#, the _sample index_ [eq]#i#, and the number of rasterization samples
+[eq]#r# as:
+
+  {empty}:: [eq]#j = i + r {times} ((f~w~ {times} f~h~) - 1 - p)#
+
+where the pixel index [eq]#p# is determined as a function of the pixel's
+framebuffer location [eq]#(x,y)# and the fragment size [eq]#(f~w~,f~h~)#:
+
+  {empty}:: [eq]#p~x~ = x % f~w~#
+  {empty}:: [eq]#p~y~ = y % f~h~#
+  {empty}:: [eq]#p = p~x~ + (p~y~ {times} f~w~)#
+
+The table below illustrates the pixel index for multi-pixel fragments:
+
+.Pixel indices - 1 wide
+[align="center"]
+|====
+| 1x1 | 1x2 | 1x4
+
+.>| image:{images}/pixel_index_1x1.svg[pdfwidth=90pt,opts="{imageopts}"]
+.>| image:{images}/pixel_index_1x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+.>| image:{images}/pixel_index_1x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|====
+
+.Pixel indices - 2 wide
+[align="center"]
+|====
+| 2x1 | 2x2 | 2x4
+
+.>| image:{images}/pixel_index_2x1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+.>| image:{images}/pixel_index_2x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+.>| image:{images}/pixel_index_2x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|====
+
+.Pixel indices - 4 wide
+[align="center"]
+|====
+| 4x1 | 4x2 | 4x4
+
+.>| image:{images}/pixel_index_4x1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+.>| image:{images}/pixel_index_4x2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+.>| image:{images}/pixel_index_4x4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|====
+endif::VK_KHR_fragment_shading_rate[]
+
+The coverage mask includes [eq]#B# bits packed into [eq]#W# words, defined
+as:
+
+  {empty}:: [eq]#B = n {times} pname:rasterizationSamples#
+  {empty}:: [eq]#W = {lceil}B/32{rceil}#
+
+Bit [eq]#b# in coverage mask word [eq]#w# is `1` if the sample with coverage
+index [eq]#j = 32{times}w + b# is covered, and `0` otherwise.
+
+If the pname:standardSampleLocations member of slink:VkPhysicalDeviceLimits
+is ename:VK_TRUE, then the sample counts ename:VK_SAMPLE_COUNT_1_BIT,
+ename:VK_SAMPLE_COUNT_2_BIT, ename:VK_SAMPLE_COUNT_4_BIT,
+ename:VK_SAMPLE_COUNT_8_BIT, and ename:VK_SAMPLE_COUNT_16_BIT have sample
+locations as listed in the following table, with the [eq]##i##th entry in
+the table corresponding to sample index [eq]#i#.
+ename:VK_SAMPLE_COUNT_32_BIT and ename:VK_SAMPLE_COUNT_64_BIT do not have
+standard sample locations.
+Locations are defined relative to an origin in the upper left corner of the
+fragment.
+
+<<<
+
+.Standard sample locations
+[options="header",align="center"]
+|====
+| Sample count 2+| Sample Locations
+|ename:VK_SAMPLE_COUNT_1_BIT
+    | [eq]#(0.5,0.5)#
+    | image:{images}/sample_count_1.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|ename:VK_SAMPLE_COUNT_2_BIT
+    | [eq]#(0.75,0.75)# +
+      [eq]#(0.25,0.25)#
+    | image:{images}/sample_count_2.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|ename:VK_SAMPLE_COUNT_4_BIT
+    | [eq]#(0.375, 0.125)# +
+      [eq]#(0.875, 0.375)# +
+      [eq]#(0.125, 0.625)# +
+      [eq]#(0.625, 0.875)#
+    | image:{images}/sample_count_4.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|ename:VK_SAMPLE_COUNT_8_BIT
+    | [eq]#(0.5625, 0.3125)# +
+      [eq]#(0.4375, 0.6875)# +
+      [eq]#(0.8125, 0.5625)# +
+      [eq]#(0.3125, 0.1875)# +
+      [eq]#(0.1875, 0.8125)# +
+      [eq]#(0.0625, 0.4375)# +
+      [eq]#(0.6875, 0.9375)# +
+      [eq]#(0.9375, 0.0625)#
+    | image:{images}/sample_count_8.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|ename:VK_SAMPLE_COUNT_16_BIT
+    | [eq]#(0.5625, 0.5625)# +
+      [eq]#(0.4375, 0.3125)# +
+      [eq]#(0.3125, 0.625)# +
+      [eq]#(0.75,   0.4375)# +
+      [eq]#(0.1875, 0.375)# +
+      [eq]#(0.625,  0.8125)# +
+      [eq]#(0.8125, 0.6875)# +
+      [eq]#(0.6875, 0.1875)# +
+      [eq]#(0.375,  0.875)# +
+      [eq]#(0.5,    0.0625)# +
+      [eq]#(0.25,   0.125)# +
+      [eq]#(0.125,  0.75)# +
+      [eq]#(0.0,    0.5)# +
+      [eq]#(0.9375, 0.25)# +
+      [eq]#(0.875,  0.9375)# +
+      [eq]#(0.0625, 0.0)#
+    | image:{images}/sample_count_16.svg[pdfwidth=90pt,align="center",opts="{imageopts}"]
+|====
+
+ifdef::VK_AMD_shader_fragment_mask[]
+Color images created with multiple samples per pixel use a compression
+technique where there are two arrays of data associated with each pixel.
+The first array contains one element per sample where each element stores an
+index to the second array defining the _fragment mask_ of the pixel.
+The second array contains one element per _color fragment_ and each element
+stores a unique color value in the format of the image.
+With this compression technique it is not always necessary to actually use
+unique storage locations for each color sample: when multiple samples share
+the same color value the fragment mask may: have two samples referring to
+the same color fragment.
+The number of color fragments is determined by the pname:samples member of
+the slink:VkImageCreateInfo structure used to create the image.
+The `apiext:VK_AMD_shader_fragment_mask` device extension provides shader
+instructions enabling the application to get direct access to the fragment
+mask and the individual color fragment values.
+
+[[vk-amd-shader-fragment-mask-diagram]]
+image::{images}/fragment_mask.svg[align="center",title="Fragment Mask",align="center",opts="{imageopts}"]
+
+endif::VK_AMD_shader_fragment_mask[]
+
+
+ifdef::VK_EXT_sample_locations[]
+[[primsrast-samplelocations]]
+== Custom Sample Locations
+
+[open,refpage='VkPipelineSampleLocationsStateCreateInfoEXT',desc='Structure specifying sample locations for a pipeline',type='structs']
+--
+Applications can: also control the sample locations used for rasterization.
+
+If the pname:pNext chain of the slink:VkPipelineMultisampleStateCreateInfo
+structure specified at pipeline creation time includes a
+sname:VkPipelineSampleLocationsStateCreateInfoEXT structure, then that
+structure controls the sample locations used when rasterizing primitives
+with the pipeline.
+
+The sname:VkPipelineSampleLocationsStateCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineSampleLocationsStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sampleLocationsEnable controls whether custom sample locations are
+    used.
+    If pname:sampleLocationsEnable is ename:VK_FALSE, the default sample
+    locations are used and the values specified in pname:sampleLocationsInfo
+    are ignored.
+  * pname:sampleLocationsInfo is the sample locations to use during
+    rasterization if pname:sampleLocationsEnable is ename:VK_TRUE and the
+    graphics pipeline is not created with
+    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT.
+
+include::{generated}/validity/structs/VkPipelineSampleLocationsStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkSampleLocationsInfoEXT',desc='Structure specifying a set of sample locations',type='structs']
+--
+The sname:VkSampleLocationsInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSampleLocationsInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sampleLocationsPerPixel is a elink:VkSampleCountFlagBits value
+    specifying the number of sample locations per pixel.
+  * pname:sampleLocationGridSize is the size of the sample location grid to
+    select custom sample locations for.
+  * pname:sampleLocationsCount is the number of sample locations in
+    pname:pSampleLocations.
+  * pname:pSampleLocations is a pointer to an array of
+    pname:sampleLocationsCount slink:VkSampleLocationEXT structures.
+
+This structure can: be used either to specify the sample locations to be
+used for rendering or to specify the set of sample locations an image
+subresource has been last rendered with for the purposes of layout
+transitions of depth/stencil images created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT.
+
+The sample locations in pname:pSampleLocations specify
+pname:sampleLocationsPerPixel number of sample locations for each pixel in
+the grid of the size specified in pname:sampleLocationGridSize.
+The sample location for sample [eq]#i# at the pixel grid location
+[eq]#(x,y)# is taken from [eq]#pname:pSampleLocations[(x {plus} y {times}
+pname:sampleLocationGridSize.width) {times} pname:sampleLocationsPerPixel
+{plus} i]#.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map, the implementation will
+choose the sample locations for the fragment and the contents of
+pname:pSampleLocations may: be ignored.
+endif::VK_EXT_fragment_density_map[]
+
+.Valid Usage
+****
+  * [[VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526]]
+    pname:sampleLocationsPerPixel must: be a bit value that is set in
+    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:sampleLocationSampleCounts
+  * [[VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527]]
+    pname:sampleLocationsCount must: equal
+    [eq]#pname:sampleLocationsPerPixel {times}
+    pname:sampleLocationGridSize.width {times}
+    pname:sampleLocationGridSize.height#
+****
+
+include::{generated}/validity/structs/VkSampleLocationsInfoEXT.adoc[]
+--
+
+[open,refpage='VkSampleLocationEXT',desc='Structure specifying the coordinates of a sample location',type='structs']
+--
+The sname:VkSampleLocationEXT structure is defined as:
+
+include::{generated}/api/structs/VkSampleLocationEXT.adoc[]
+
+  * pname:x is the horizontal coordinate of the sample's location.
+  * pname:y is the vertical coordinate of the sample's location.
+
+The domain space of the sample location coordinates has an upper-left origin
+within the pixel in framebuffer space.
+
+The values specified in a sname:VkSampleLocationEXT structure are always
+clamped to the implementation-dependent sample location coordinate range
+[eq]#[pname:sampleLocationCoordinateRange[0],pname:sampleLocationCoordinateRange[1]]#
+that can: be queried using
+slink:VkPhysicalDeviceSampleLocationsPropertiesEXT.
+
+include::{generated}/validity/structs/VkSampleLocationEXT.adoc[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetSampleLocationsEnableEXT',desc='Specify the samples locations enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:sampleLocationsEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetSampleLocationsEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:sampleLocationsEnable specifies the pname:sampleLocationsEnable
+    state.
+
+This command sets the pname:sampleLocationsEnable state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetSampleLocationsEnableEXT
+:requiredfeature: extendedDynamicState3SampleLocationsEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetSampleLocationsEnableEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetSampleLocationsEXT',desc='Set sample locations dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the sample locations used
+for rasterization, call:
+
+include::{generated}/api/protos/vkCmdSetSampleLocationsEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pSampleLocationsInfo is the sample locations state to set.
+
+This command sets the custom sample locations for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and when the
+slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+property of the bound graphics pipeline is ename:VK_TRUE.
+Otherwise, this state is specified by the
+slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsInfo
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530]]
+    If
+    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
+    is ename:VK_FALSE then the current render pass must: have been begun by
+    specifying a slink:VkRenderPassSampleLocationsBeginInfoEXT structure
+    whose pname:pPostSubpassSampleLocations member contains an element with
+    a pname:subpassIndex matching the current subpass index and the
+    pname:sampleLocationsInfo member of that element must: match the sample
+    locations state pointed to by pname:pSampleLocationsInfo
+****
+
+include::{generated}/validity/protos/vkCmdSetSampleLocationsEXT.adoc[]
+--
+endif::VK_EXT_sample_locations[]
+
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[[primsrast-fragment-shading-rate]]
+== Fragment Shading Rates
+
+The features advertised by
+slink:VkPhysicalDeviceFragmentShadingRateFeaturesKHR allow an application to
+control the <<glossary-shading-rate, shading rate>> of a given fragment
+shader invocation.
+
+The fragment shading rate strongly interacts with <<primsrast-multisampling,
+Multisampling>>, and the set of available rates for an implementation may:
+be restricted by sample rate.
+
+[open,refpage='vkGetPhysicalDeviceFragmentShadingRatesKHR',desc='Get available shading rates for a physical device',type='protos']
+--
+:refpage: vkGetPhysicalDeviceFragmentShadingRatesKHR
+
+To query available shading rates, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device whose
+    properties will be queried.
+  * pname:pFragmentShadingRateCount is a pointer to an integer related to
+    the number of fragment shading rates available or queried, as described
+    below.
+  * pname:pFragmentShadingRates is either `NULL` or a pointer to an array of
+    slink:VkPhysicalDeviceFragmentShadingRateKHR structures.
+
+If pname:pFragmentShadingRates is `NULL`, then the number of fragment
+shading rates available is returned in pname:pFragmentShadingRateCount.
+Otherwise, pname:pFragmentShadingRateCount must: point to a variable set by
+the user to the number of elements in the pname:pFragmentShadingRates array,
+and on return the variable is overwritten with the number of structures
+actually written to pname:pFragmentShadingRates.
+If pname:pFragmentShadingRateCount is less than the number of fragment
+shading rates available, at most pname:pFragmentShadingRateCount structures
+will be written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available fragment shading
+rates were returned.
+
+The returned array of fragment shading rates must: be ordered from largest
+pname:fragmentSize.width value to smallest, and each set of fragment shading
+rates with the same pname:fragmentSize.width value must: be ordered from
+largest pname:fragmentSize.height to smallest.
+Any two entries in the array must: not have the same pname:fragmentSize
+values.
+
+For any entry in the array, the following rules also apply:
+
+  * The value of pname:fragmentSize.width must: be less than or equal to
+    <<limits-maxFragmentSize, pname:maxFragmentSize.width>>.
+  * The value of pname:fragmentSize.width must: be greater than or equal to
+    `1`.
+  * The value of pname:fragmentSize.width must: be a power-of-two.
+  * The value of pname:fragmentSize.height must: be less than or equal to
+    <<limits-maxFragmentSize, pname:maxFragmentSize.height>>.
+  * The value of pname:fragmentSize.height must: be greater than or equal to
+    `1`.
+  * The value of pname:fragmentSize.height must: be a power-of-two.
+  * The highest sample count in pname:sampleCounts must: be less than or
+    equal to <<limits-maxFragmentShadingRateRasterizationSamples,
+    pname:maxFragmentShadingRateRasterizationSamples>>.
+  * The product of pname:fragmentSize.width, pname:fragmentSize.height, and
+    the highest sample count in pname:sampleCounts must: be less than or
+    equal to <<limits-maxFragmentShadingRateCoverageSamples,
+    pname:maxFragmentShadingRateCoverageSamples>>.
+
+Implementations must: support at least the following shading rates:
+
+[options="autowidth"]
+|===
+| pname:sampleCounts | pname:fragmentSize
+
+| ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT | {2,2}
+| ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT | {2,1}
+| ~0                                                         | {1,1}
+|===
+
+If <<limits-framebufferColorSampleCounts,
+pname:framebufferColorSampleCounts>>, includes ename:VK_SAMPLE_COUNT_2_BIT,
+the required rates must: also include ename:VK_SAMPLE_COUNT_2_BIT.
+
+[NOTE]
+.Note
+====
+Including the {1,1} fragment size is done for completeness; it has no actual
+effect on the support of rendering without setting the fragment size.
+All sample counts
+ifdef::VK_QCOM_render_pass_transform[]
+and render pass transforms
+endif::VK_QCOM_render_pass_transform[]
+are supported for this rate.
+====
+
+ifdef::VK_QCOM_render_pass_transform[]
+The returned set of fragment shading rates must: be returned in the native
+(rotated) coordinate system.
+For rasterization using render pass pname:transform not equal to
+ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the application must: transform
+the returned fragment shading rates into the current (unrotated) coordinate
+system to get the supported rates for that transform.
+
+[NOTE]
+.Note
+====
+For example, consider an implementation returning support for 4x2, but not
+2x4 in the set of supported fragment shading rates.
+This means that for transforms ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
+and ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, 2x4 is a supported rate,
+but 4x2 is an unsupported rate.
+====
+endif::VK_QCOM_render_pass_transform[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceFragmentShadingRateKHR',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShadingRateKHR structure is defined as
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sampleCounts is a bitmask of sample counts for which the shading
+    rate described by pname:fragmentSize is supported.
+  * pname:fragmentSize is a slink:VkExtent2D describing the width and height
+    of a supported shading rate.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateKHR.adoc[]
+--
+
+Fragment shading rates can: be set at three points, with the three rates
+combined to determine the final shading rate.
+
+
+[[primsrast-fragment-shading-rate-pipeline]]
+=== Pipeline Fragment Shading Rate
+
+The _pipeline fragment shading rate_ can: be set on a per-draw basis by
+either setting the rate in a graphics pipeline, or dynamically via
+flink:vkCmdSetFragmentShadingRateKHR.
+
+[open,refpage='VkPipelineFragmentShadingRateStateCreateInfoKHR',desc='Structure specifying parameters controlling the fragment shading rate',type='structs']
+--
+The sname:VkPipelineFragmentShadingRateStateCreateInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineFragmentShadingRateStateCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fragmentSize specifies a slink:VkExtent2D structure containing the
+    fragment size used to define the pipeline fragment shading rate for
+    drawing commands using this pipeline.
+  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
+    value determining how the
+    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
+    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
+    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
+    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
+    generated by drawing commands using the created pipeline.
+
+If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
+sname:VkPipelineFragmentShadingRateStateCreateInfoKHR structure, then that
+structure includes parameters controlling the pipeline fragment shading
+rate.
+
+If this structure is not present, pname:fragmentSize is considered to be
+equal to [eq]#(1,1)#, and both elements of pname:combinerOps are considered
+to be equal to ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR.
+
+include::{generated}/validity/structs/VkPipelineFragmentShadingRateStateCreateInfoKHR.adoc[]
+--
+
+[open,refpage='vkCmdSetFragmentShadingRateKHR',desc='Set pipeline fragment shading rate and combiner operation dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the pipeline fragment
+shading rate and combiner operation, call:
+
+include::{generated}/api/protos/vkCmdSetFragmentShadingRateKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pFragmentSize specifies the pipeline fragment shading rate for
+    subsequent drawing commands.
+  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
+    determining how the
+    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
+    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
+    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
+    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
+    generated by subsequent drawing commands.
+
+This command sets the pipeline fragment shading rate and combiner operation
+for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineFragmentShadingRateStateCreateInfoKHR values used to create
+the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04507]]
+    If <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> is not enabled,
+    pname:pFragmentSize->width must: be `1`
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04508]]
+    If <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> is not enabled,
+    pname:pFragmentSize->height must: be `1`
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04509]]
+    One of <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>>,
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>>, or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> must: be enabled
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-primitiveFragmentShadingRate-04510]]
+    If the <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature is not enabled,
+    pname:combinerOps[0] must: be
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-attachmentFragmentShadingRate-04511]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:combinerOps[1] must: be
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-fragmentSizeNonTrivialCombinerOps-04512]]
+    If the <<limits-fragmentShadingRateNonTrivialCombinerOps,
+    pname:fragmentSizeNonTrivialCombinerOps>> limit is not supported,
+    elements of pname:combinerOps must: be either
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04513]]
+    pname:pFragmentSize->width must: be greater than or equal to `1`
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04514]]
+    pname:pFragmentSize->height must: be greater than or equal to `1`
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04515]]
+    pname:pFragmentSize->width must: be a power-of-two value
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04516]]
+    pname:pFragmentSize->height must: be a power-of-two value
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04517]]
+    pname:pFragmentSize->width must: be less than or equal to `4`
+  * [[VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04518]]
+    pname:pFragmentSize->height must: be less than or equal to `4`
+****
+
+include::{generated}/validity/protos/vkCmdSetFragmentShadingRateKHR.adoc[]
+--
+
+
+[[primsrast-fragment-shading-rate-primitive]]
+=== Primitive Fragment Shading Rate
+
+The _primitive fragment shading rate_ can: be set via the
+<<interfaces-builtin-variables-primitiveshadingrate,
+code:PrimitiveShadingRateKHR>> built-in in the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
+ifdef::VK_EXT_mesh_shader[]
+If the last <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>> is using the code:MeshEXT {ExecutionModel}, the rate
+associated with a given primitive is sourced from the value written to the
+per-primitive code:PrimitiveShadingRateKHR.
+Otherwise the
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[The]
+rate associated with a given primitive is sourced from the value written to
+code:PrimitiveShadingRateKHR by that primitive's
+<<vertexpostproc-flatshading,provoking vertex>>.
+
+
+[[primsrast-fragment-shading-rate-attachment]]
+=== Attachment Fragment Shading Rate
+
+The _attachment shading rate_ can: be set by including
+slink:VkFragmentShadingRateAttachmentInfoKHR in a subpass to define a
+_fragment shading rate attachment_.
+Each pixel in the framebuffer is assigned an attachment fragment shading
+rate by the corresponding texel in the fragment shading rate attachment,
+according to:
+
+  {empty}:: [eq]#x' = floor(x / region~x~)#
+  {empty}:: [eq]#y' = floor(y / region~y~)#
+
+where [eq]#x'# and [eq]#y'# are the coordinates of a texel in the fragment
+shading rate attachment, [eq]#x# and [eq]#y# are the coordinates of the
+pixel in the framebuffer, and [eq]#region~x~# and [eq]#region~y~# are the
+size of the region each texel corresponds to, as defined by the
+pname:shadingRateAttachmentTexelSize member of
+slink:VkFragmentShadingRateAttachmentInfoKHR.
+
+If <<VkRenderPassMultiviewCreateInfo, multiview is enabled>> and the shading
+rate attachment has multiple layers, the shading rate attachment texel is
+selected from the layer determined by the
+<<interfaces-builtin-variables-viewindex,code:ViewIndex>> built-in.
+If <<VkRenderPassMultiviewCreateInfo, multiview is disabled>>, and both the
+shading rate attachment and the framebuffer have multiple layers, the
+shading rate attachment texel is selected from the layer determined by the
+<<interfaces-builtin-variables-layer,code:Layer>> built-in.
+Otherwise, the texel is unconditionally selected from the first layer of the
+attachment.
+
+The fragment size is encoded into the first component of the identified
+texel as follows:
+
+  {empty}:: [eq]#size~w~ = 2^((texel / 4) & 3)^#
+  {empty}:: [eq]#size~h~ = 2^(texel & 3)^#
+
+where [eq]#texel# is the value in the first component of the identified
+texel, and [eq]#size~w~# and [eq]#size~h~# are the width and height of the
+fragment size, decoded from the texel.
+
+If no fragment shading rate attachment is specified, this size is calculated
+as [eq]#size~w~ = size~h~ = 1#.
+Applications must: not specify a width or height greater than 4 by this
+method.
+
+The _Fragment Shading Rate_ enumeration in SPIR-V adheres to the above
+encoding.
+
+
+[[primsrast-fragment-shading-rate-combining]]
+=== Combining the Fragment Shading Rates
+
+The final rate ([eq]#C~xy~'#) used for fragment shading must: be one of the
+rates returned by flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the
+sample count
+ifdef::VK_QCOM_render_pass_transform[]
+and render pass transform
+endif::VK_QCOM_render_pass_transform[]
+used by rasterization.
+
+If any of the following conditions are met, [eq]#C~xy~'# must: be set to
+[eq]#{1,1}#:
+
+  * If <<primsrast-sampleshading,Sample Shading>> is enabled.
+  * The <<limits-fragmentShadingRateWithSampleMask,
+    pname:fragmentShadingRateWithSampleMask>> limit is not supported, and
+    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask contains a
+    zero value in any bit used by fragment operations.
+  * The <<limits-fragmentShadingRateWithShaderSampleMask,
+    pname:fragmentShadingRateWithShaderSampleMask>> is not supported, and
+    the fragment shader has code:SampleMask in the input or output
+    interface.
+  * The <<limits-fragmentShadingRateWithShaderDepthStencilWrites,
+    pname:fragmentShadingRateWithShaderDepthStencilWrites>> limit is not
+    supported, and the fragment shader declares the code:FragDepth
+ifdef::VK_EXT_shader_stencil_export[]
+    or code:FragStencilRefEXT
+endif::VK_EXT_shader_stencil_export[]
+    built-in.
+ifdef::VK_EXT_conservative_rasterization[]
+  * The <<limits-fragmentShadingRateWithConservativeRasterization,
+    pname:fragmentShadingRateWithConservativeRasterization>> limit is not
+    supported, and
+    slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+    is not ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT.
+endif::VK_EXT_conservative_rasterization[]
+ifdef::VK_EXT_fragment_shader_interlock[]
+  * The <<limits-fragmentShadingRateWithFragmentShaderInterlock,
+    pname:fragmentShadingRateWithFragmentShaderInterlock>> limit is not
+    supported, and the fragment shader declares any of the
+    <<fragops-shader-interlock, fragment shader interlock>> execution modes.
+endif::VK_EXT_fragment_shader_interlock[]
+ifdef::VK_EXT_sample_locations[]
+  * The <<limits-fragmentShadingRateWithCustomSampleLocations,
+    pname:fragmentShadingRateWithCustomSampleLocations>> limit is not
+    supported, and
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
+    is ename:VK_TRUE.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_shader_tile_image[]
+  * The fragment shader declares any of the
+    code:TileImageColorReadAccessEXT, code:TileImageDepthReadAccessEXT, or
+    code:TileImageStencilReadAccessEXT capabilities.
+endif::VK_EXT_shader_tile_image[]
+
+Otherwise, each of the specified shading rates are combined and then used to
+derive the value of [eq]#C~xy~'#.
+As there are three ways to specify shading rates, two combiner operations
+are specified - between the
+<<primsrast-fragment-shading-rate-pipeline,pipeline>> and
+<<primsrast-fragment-shading-rate-primitive,primitive>> shading rates, and
+between the result of that and the
+<<primsrast-fragment-shading-rate-attachment,attachment shading rate>>.
+
+[open,refpage='VkFragmentShadingRateCombinerOpKHR',desc='Control how fragment shading rates are combined',type='enums']
+--
+The equation used for each combiner operation is defined by
+ename:VkFragmentShadingRateCombinerOpKHR:
+
+include::{generated}/api/enums/VkFragmentShadingRateCombinerOpKHR.adoc[]
+
+  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR specifies a combiner
+    operation of [eq]#combine(A~xy~,B~xy~) = A~xy~#.
+  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR specifies a
+    combiner operation of [eq]#combine(A~xy~,B~xy~) = B~xy~#.
+  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR specifies a combiner
+    operation of [eq]#combine(A~xy~,B~xy~) = min(A~xy~,B~xy~)#.
+  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR specifies a combiner
+    operation of [eq]#combine(A~xy~,B~xy~) = max(A~xy~,B~xy~)#.
+  * ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR specifies a combiner
+    operation of [eq]#combine(A~xy~,B~xy~) = A~xy~*B~xy~#.
+
+where [eq]#combine(A~xy~,B~xy~)# is the combine operation, and [eq]#A~xy~#
+and [eq]#B~xy~# are the inputs to the operation.
+
+If <<limits-fragmentShadingRateStrictMultiplyCombiner,
+pname:fragmentShadingRateStrictMultiplyCombiner>> is ename:VK_FALSE, using
+ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR with values of 1 for both
+A and B in the same dimension results in the value 2 being produced for that
+dimension.
+See the definition of <<limits-fragmentShadingRateStrictMultiplyCombiner,
+pname:fragmentShadingRateStrictMultiplyCombiner>> for more information.
+
+These operations are performed in a component-wise fashion.
+--
+
+This is used to generate a combined fragment area using the equation:
+
+  {empty}:: [eq]#C~xy~ = combine(A~xy~,B~xy~)#
+
+where [eq]#C~xy~# is the combined fragment area result, and [eq]#A~xy~# and
+[eq]#B~xy~# are the fragment areas of the fragment shading rates being
+combined.
+
+Two combine operations are performed, first with [eq]#A~xy~# equal to the
+<<primsrast-fragment-shading-rate-pipeline,pipeline fragment shading rate>>
+and [eq]#B~xy~# equal to the <<primsrast-fragment-shading-rate-primitive,
+primitive fragment shading rate>>, with the [eq]#combine()# operation
+selected by combinerOps[0].
+A second combination is then performed, with [eq]#A~xy~# equal to the result
+of the first combination and [eq]#B~xy~# equal to the
+<<primsrast-fragment-shading-rate-attachment, attachment fragment shading
+rate>>, with the [eq]#combine()# operation selected by combinerOps[1].
+The result of the second combination is used as the final fragment shading
+rate, reported via the <<interfaces-builtin-variables-primitiveshadingrate,
+code:ShadingRateKHR built-in>>.
+
+Implementations should: clamp the inputs to the combiner operations
+[eq]#A~xy~# and [eq]#B~xy~#, and must: clamp the result of the second
+combiner operation.
+
+A fragment shading rate [eq]#R~xy~# representing any of [eq]#A~xy~#,
+[eq]#B~xy~# or [eq]#C~xy~# is clamped as follows.
+If [eq]#R~xy~# is one of the rates returned by
+flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the sample count
+ifdef::VK_QCOM_render_pass_transform[]
+and render pass transform
+endif::VK_QCOM_render_pass_transform[]
+used by rasterization, the clamped shading rate [eq]#R~xy~'# is [eq]#R~xy~#.
+Otherwise, the clamped shading rate is selected from the rates returned by
+flink:vkGetPhysicalDeviceFragmentShadingRatesKHR for the sample count
+ifdef::VK_QCOM_render_pass_transform[]
+and render pass transform
+endif::VK_QCOM_render_pass_transform[]
+used by rasterization.
+From this list of supported rates, the following steps are applied in order,
+to select a single value:
+
+  . Keep only rates where [eq]#R~x~' {leq} R~x~# and [eq]#R~y~' {leq} R~y~#.
+  ** Implementations may: also keep rates where [eq]#R~x~' {leq} R~y~# and
+     [eq]#R~y~' {leq} R~x~#.
+  . Keep only rates with the highest area ([eq]#R~x~' {times} R~y~'#).
+  . Keep only rates with the lowest aspect ratio ([eq]#R~x~' {plus} R~y~'#).
+  . In cases where a wide (e.g. 4x1) and tall (e.g. 1x4) rate remain, the
+    implementation may: choose either rate.
+    However, it must: choose this rate consistently for the same shading
+    rates,
+ifdef::VK_QCOM_render_pass_transform[]
+    render pass transform,
+endif::VK_QCOM_render_pass_transform[]
+    and combiner operations for the lifetime of the slink:VkDevice.
+endif::VK_KHR_fragment_shading_rate[]
+
+
+ifdef::VK_NV_fragment_shading_rate_enums[]
+=== Extended Fragment Shading Rates
+
+The features advertised by
+slink:VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV provide support for
+additional fragment shading rates beyond those specifying one fragment
+shader invocation covering all pixels in a fragment whose size is indicated
+by the fragment shading rate.
+
+[open,refpage='VkFragmentShadingRateNV',desc='Enumeration with fragment shading rates',type='enums']
+--
+If the pname:fragmentShadingRateEnums feature is enabled, fragment shading
+rates may be specified using the elink:VkFragmentShadingRateNV enumerated
+type defined as:
+
+include::{generated}/api/enums/VkFragmentShadingRateNV.adoc[]
+
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV specifies a
+    fragment size of 1x1 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV specifies
+    a fragment size of 1x2 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV specifies
+    a fragment size of 2x1 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV specifies
+    a fragment size of 2x2 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV specifies
+    a fragment size of 2x4 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV specifies
+    a fragment size of 4x2 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV specifies
+    a fragment size of 4x4 pixels.
+  * ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV specifies a
+    fragment size of 1x1 pixels, with two fragment shader invocations per
+    fragment.
+  * ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV specifies a
+    fragment size of 1x1 pixels, with four fragment shader invocations per
+    fragment.
+  * ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV specifies a
+    fragment size of 1x1 pixels, with eight fragment shader invocations per
+    fragment.
+  * ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV specifies a
+    fragment size of 1x1 pixels, with sixteen fragment shader invocations
+    per fragment.
+  * ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV specifies that any
+    portions of a primitive that use that shading rate should be discarded
+    without invoking any fragment shader.
+
+To use the shading rates
+ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
+ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
+ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, and
+ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV as a pipeline,
+primitive, or attachment shading rate, the
+pname:supersampleFragmentShadingRates feature must: be enabled.
+To use the shading rate ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV as
+a pipeline, primitive, or attachment shading rate, the
+pname:noInvocationFragmentShadingRates feature must: be enabled.
+--
+
+When using fragment shading rate enums, the pipeline fragment shading rate
+can: be set on a per-draw basis by either setting the rate in a graphics
+pipeline, or dynamically via flink:vkCmdSetFragmentShadingRateEnumNV.
+
+[open,refpage='VkPipelineFragmentShadingRateEnumStateCreateInfoNV',desc='Structure specifying parameters controlling the fragment shading rate using rate enums',type='structs']
+--
+The sname:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shadingRateType specifies a elink:VkFragmentShadingRateTypeNV
+    value indicating whether fragment shading rates are specified using
+    fragment sizes or elink:VkFragmentShadingRateNV enums.
+  * pname:shadingRate specifies a elink:VkFragmentShadingRateNV value
+    indicating the pipeline fragment shading rate.
+  * pname:combinerOps specifies elink:VkFragmentShadingRateCombinerOpKHR
+    values determining how the
+    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
+    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
+    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
+    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
+    generated by drawing commands using the created pipeline.
+
+If the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo includes a
+sname:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure, then
+that structure includes parameters controlling the pipeline fragment shading
+rate.
+
+If this structure is not present, pname:shadingRateType is considered to be
+equal to ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV,
+pname:shadingRate is considered to be equal to
+ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, and both elements
+of pname:combinerOps are considered to be equal to
+ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR.
+
+include::{generated}/validity/structs/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkFragmentShadingRateTypeNV',desc='Enumeration with fragment shading rate types',type='enums']
+--
+The elink:VkFragmentShadingRateTypeNV enumerated type specifies whether a
+graphics pipeline gets its pipeline fragment shading rates and combiners
+from the slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure
+or the slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure.
+
+include::{generated}/api/enums/VkFragmentShadingRateTypeNV.adoc[]
+
+  * ename:VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV specifies that a
+    graphics pipeline should obtain its pipeline fragment shading rate and
+    shading rate combiner state from the
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure and that
+    any state specified by the
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure
+    should be ignored.
+  * ename:VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV specifies that a graphics
+    pipeline should obtain its pipeline fragment shading rate and shading
+    rate combiner state from the
+    slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV structure and
+    that any state specified by the
+    slink:VkPipelineFragmentShadingRateStateCreateInfoKHR structure should
+    be ignored.
+--
+
+[open,refpage='vkCmdSetFragmentShadingRateEnumNV',desc='Set pipeline fragment shading rate dynamically for a command buffer using enums',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the pipeline fragment
+shading rate and combiner operation, call:
+
+include::{generated}/api/protos/vkCmdSetFragmentShadingRateEnumNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:shadingRate specifies a elink:VkFragmentShadingRateNV enum
+    indicating the pipeline fragment shading rate for subsequent drawing
+    commands.
+  * pname:combinerOps specifies a elink:VkFragmentShadingRateCombinerOpKHR
+    determining how the
+    <<primsrast-fragment-shading-rate-pipeline,pipeline>>,
+    <<primsrast-fragment-shading-rate-primitive,primitive>>, and
+    <<primsrast-fragment-shading-rate-attachment,attachment shading rates>>
+    are <<primsrast-fragment-shading-rate-combining,combined>> for fragments
+    generated by subsequent drawing commands.
+
+This command sets the pipeline fragment shading rate and combiner operation
+for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineFragmentShadingRateEnumStateCreateInfoNV values used to
+create the currently active pipeline.
+
+[NOTE]
+.Note
+====
+This command allows specifying additional shading rates beyond those
+supported by flink:vkCmdSetFragmentShadingRateKHR.
+For more information, refer to the
+`apiext:VK_NV_fragment_shading_rate_enums` appendix.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04576]]
+    If <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> is not enabled, pname:shadingRate
+    must: be ename:VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-supersampleFragmentShadingRates-04577]]
+    If <<features-supersampleFragmentShadingRates,
+    pname:supersampleFragmentShadingRates>> is not enabled,
+    pname:shadingRate must: not be
+    ename:VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
+    ename:VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
+    ename:VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or
+    ename:VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-noInvocationFragmentShadingRates-04578]]
+    If <<features-noInvocationFragmentShadingRates,
+    pname:noInvocationFragmentShadingRates>> is not enabled,
+    pname:shadingRate must: not be
+    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentShadingRateEnums-04579]]
+    The <<features-fragmentShadingRateEnums,
+    pname:fragmentShadingRateEnums>> feature must: be enabled
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580]]
+    One of the <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>>,
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>>, or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> features must: be enabled
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-primitiveFragmentShadingRate-04581]]
+    If the <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> feature is not enabled,
+    pname:combinerOps[0] must: be
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-attachmentFragmentShadingRate-04582]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:combinerOps[1] must: be
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentSizeNonTrivialCombinerOps-04583]]
+    If the <<limits-fragmentShadingRateNonTrivialCombinerOps,
+    pname:fragmentSizeNonTrivialCombinerOps>> limit is not supported,
+    elements of pname:combinerOps must: be either
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR
+****
+
+include::{generated}/validity/protos/vkCmdSetFragmentShadingRateEnumNV.adoc[]
+--
+
+When the <<features-supersampleFragmentShadingRates,
+pname:supersampleFragmentShadingRates>> or
+<<features-noInvocationFragmentShadingRates,
+pname:noInvocationFragmentShadingRates>> features are enabled, the behavior
+of the <<primsrast-fragment-shading-rate-combining,shading rate combiner
+operations>> is extended to support the shading rates enabled by those
+features.
+Primitive and attachment shading rate values are interpreted as
+elink:VkFragmentShadingRateNV values and the behavior of the combiners is
+modified as follows:
+
+  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR,
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, and
+    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR, if either
+    [eq]#A~xy~# or [eq]#B~xy~# is
+    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV,
+    [eq]#combine(A~xy~,B~xy~)# produces a shading rate of
+    ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV, regardless of the
+    other input shading rate.
+  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR,
+    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
+    is the smaller of the fragment sizes of [eq]#A~xy~# and [eq]#B~xy~# and
+    whose invocation count is the larger of the invocation counts of
+    [eq]#A~xy~# and [eq]#B~xy~#.
+  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR,
+    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
+    is the larger of the fragment sizes of [eq]#A~xy~# and [eq]#B~xy~# and
+    whose invocation count is the smaller of the invocation counts of
+    [eq]#A~xy~# and [eq]#B~xy~#.
+  * For ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR,
+    [eq]#combine(A~xy~,B~xy~)# produces a shading rate whose fragment size
+    and invocation count is the product of the fragment sizes and invocation
+    counts, respectively, of [eq]#A~xy~# and [eq]#B~xy~#.
+    If the resulting shading rate has both multiple pixels and multiple
+    invocations per fragment, an implementation may: adjust the shading rate
+    by reducing both the pixel and invocation counts.
+
+If the final shading rate from the combiners is
+ename:VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV, no fragments will be
+generated for any portion of a primitive using that shading rate.
+
+If the final shading rate from the combiners specifies multiple fragment
+shader invocations per fragment, the fragment will be processed with
+multiple unique samples as in <<primsrast-sampleshading, sample shading>>,
+where the total number the total number of invocations is taken from the
+shading rate and then clamped to pname:rasterizationSamples and
+<<limits-maxFragmentShadingRateInvocationCount,
+pname:maxFragmentShadingRateInvocationCount>>.
+
+endif::VK_NV_fragment_shading_rate_enums[]
+
+
+ifdef::VK_NV_shading_rate_image[]
+[[primsrast-shading-rate-image]]
+== Shading Rate Image
+
+The <<features-shadingRateImage, pname:shadingRateImage>> feature allows
+pipelines to use a <<glossary-shading-rate-image,shading rate image>> to
+control the <<glossary-fragment-area, fragment area>> and the minimum number
+of fragment shader invocations launched for each fragment.
+When the shading rate image is enabled, the rasterizer determines a base
+<<glossary-shading-rate,shading rate>> for each region of the framebuffer
+covered by a primitive by fetching a value from the shading rate image and
+translating it to a shading rate using a per-viewport shading rate palette.
+This base shading rate is then adjusted to derive a final shading rate.
+The final shading rate specifies the fragment area and fragment shader
+invocation count to use for fragments generated in the region.
+
+[open,refpage='VkPipelineViewportShadingRateImageStateCreateInfoNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
+--
+If the pname:pNext chain of slink:VkPipelineViewportStateCreateInfo includes
+a sname:VkPipelineViewportShadingRateImageStateCreateInfoNV structure, then
+that structure includes parameters controlling the shading rate.
+
+The sname:VkPipelineViewportShadingRateImageStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportShadingRateImageStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:shadingRateImageEnable specifies whether shading rate image and
+    palettes are used during rasterization.
+  * pname:viewportCount specifies the number of per-viewport palettes used
+    to translate values stored in shading rate images.
+  * pname:pShadingRatePalettes is a pointer to an array of
+    slink:VkShadingRatePaletteNV structures defining the palette for each
+    viewport.
+    If the shading rate palette state is dynamic, this member is ignored.
+
+If this structure is not present, pname:shadingRateImageEnable is considered
+to be ename:VK_FALSE, and the shading rate image and palettes are not used.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02054]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:viewportCount must: be `0` or `1`
+  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02055]]
+    pname:viewportCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewports
+  * [[VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-shadingRateImageEnable-02056]]
+    If pname:shadingRateImageEnable is ename:VK_TRUE, pname:viewportCount
+    must: be greater or equal to the pname:viewportCount member of
+    slink:VkPipelineViewportStateCreateInfo
+****
+include::{generated}/validity/structs/VkPipelineViewportShadingRateImageStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='vkCmdBindShadingRateImageNV',desc='Bind a shading rate image on a command buffer',type='protos']
+--
+When shading rate image usage is enabled in the bound pipeline, the pipeline
+uses a shading rate image specified by the command:
+
+include::{generated}/api/protos/vkCmdBindShadingRateImageNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:imageView is an image view handle specifying the shading rate
+    image.
+    pname:imageView may: be set to dlink:VK_NULL_HANDLE, which is equivalent
+    to specifying a view of an image filled with zero values.
+  * pname:imageLayout is the layout that the image subresources accessible
+    from pname:imageView will be in when the shading rate image is accessed.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindShadingRateImageNV-None-02058]]
+    The <<features-shadingRateImage, pname:shadingRateImage>> feature must:
+    be enabled
+  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02059]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: be a valid
+    slink:VkImageView handle of type ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02060]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a format
+    of ename:VK_FORMAT_R8_UINT
+  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02061]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
+  * [[VUID-vkCmdBindShadingRateImageNV-imageView-02062]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    match the actual elink:VkImageLayout of each subresource accessible from
+    pname:imageView at the time the subresource is accessed
+  * [[VUID-vkCmdBindShadingRateImageNV-imageLayout-02063]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    be ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+****
+
+include::{generated}/validity/protos/vkCmdBindShadingRateImageNV.adoc[]
+--
+
+When the shading rate image is enabled in the current pipeline, rasterizing
+a primitive covering the pixel with coordinates (_x_,_y_) will fetch a
+shading rate index value from the shading rate image bound by
+fname:vkCmdBindShadingRateImageNV.
+If the shading rate image view has a type of ename:VK_IMAGE_VIEW_TYPE_2D,
+the lookup will use texel coordinates (_u_,_v_) where latexmath:[u =
+\left\lfloor \frac{x}{twidth} \right\rfloor], latexmath:[v = \left\lfloor
+\frac{y}{theight} \right\rfloor], and latexmath:[twidth] and
+latexmath:[theight] are the width and height of the implementation-dependent
+<<limits-shadingRateTexelSize, shading rate texel size>>.
+If the shading rate image view has a type of
+ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, the lookup will use texel coordinates
+(_u_,_v_) to extract a texel from the layer _l_, where _l_ is the layer of
+the framebuffer being rendered to.
+If _l_ is greater than or equal to the number of layers in the image view,
+layer zero will be used.
+
+If the bound shading rate image view is not dlink:VK_NULL_HANDLE and
+contains a texel with coordinates (_u_,_v_) in layer _l_ (if applicable),
+the single unsigned integer component for that texel will be used as the
+shading rate index.
+If the (_u_,_v_) coordinate is outside the extents of the subresource used
+by the shading rate image view, or if the image view is
+dlink:VK_NULL_HANDLE, the shading rate index is zero.
+If the shading rate image view has multiple mipmap levels, the base level
+identified by sname:VkImageSubresourceRange::pname:baseMipLevel will be
+used.
+
+A shading rate index is mapped to a base shading rate using a lookup table
+called the shading rate image palette.
+There is a separate palette for each viewport.
+The number of entries in each palette is given by the
+implementation-dependent <<limits-shadingRatePaletteSize, shading rate image
+palette size>>.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetShadingRateImageEnableNV',desc='Specify the shading rate image enable state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:shadingRateImageEnable state, call:
+
+include::{generated}/api/protos/vkCmdSetShadingRateImageEnableNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:shadingRateImageEnable specifies the pname:shadingRateImageEnable
+    state.
+
+This command sets the pname:shadingRateImageEnable state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:shadingRateImageEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetShadingRateImageEnableNV
+:requiredfeature: extendedDynamicState3ShadingRateImageEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetShadingRateImageEnableNV.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetViewportShadingRatePaletteNV',desc='Set shading rate image palettes dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the per-viewport shading
+rate image palettes, call:
+
+include::{generated}/api/protos/vkCmdSetViewportShadingRatePaletteNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstViewport is the index of the first viewport whose shading
+    rate palette is updated by the command.
+  * pname:viewportCount is the number of viewports whose shading rate
+    palettes are updated by the command.
+  * pname:pShadingRatePalettes is a pointer to an array of
+    slink:VkShadingRatePaletteNV structures defining the palette for each
+    viewport.
+
+This command sets the per-viewport shading rate image palettes for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:pShadingRatePalettes
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-None-02064]]
+    The <<features-shadingRateImage, pname:shadingRateImage>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02067]]
+    The sum of pname:firstViewport and pname:viewportCount must: be between
+    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02068]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:firstViewport must: be `0`
+  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:viewportCount must: be `1`
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportShadingRatePaletteNV.adoc[]
+--
+
+[open,refpage='VkShadingRatePaletteNV',desc='Structure specifying a single shading rate palette',type='structs']
+--
+The sname:VkShadingRatePaletteNV structure specifies to contents of a single
+shading rate image palette and is defined as:
+
+include::{generated}/api/structs/VkShadingRatePaletteNV.adoc[]
+
+  * pname:shadingRatePaletteEntryCount specifies the number of entries in
+    the shading rate image palette.
+  * pname:pShadingRatePaletteEntries is a pointer to an array of
+    elink:VkShadingRatePaletteEntryNV enums defining the shading rate for
+    each palette entry.
+
+.Valid Usage
+****
+  * [[VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-02071]]
+    pname:shadingRatePaletteEntryCount must: be between `1` and
+    sname:VkPhysicalDeviceShadingRateImagePropertiesNV::pname:shadingRatePaletteSize,
+    inclusive
+
+****
+include::{generated}/validity/structs/VkShadingRatePaletteNV.adoc[]
+--
+
+To determine the base shading rate image, a shading rate index _i_ is mapped
+to array element _i_ in the array pname:pShadingRatePaletteEntries for the
+palette corresponding to the viewport used for the fragment.
+If _i_ is greater than or equal to the palette size
+pname:shadingRatePaletteEntryCount, the base shading rate is undefined:.
+
+[open,refpage='VkShadingRatePaletteEntryNV',desc='Shading rate image palette entry types',type='enums']
+--
+The supported shading rate image palette entries are defined by
+elink:VkShadingRatePaletteEntryNV:
+
+include::{generated}/api/enums/VkShadingRatePaletteEntryNV.adoc[]
+
+The following table indicates the width and height (in pixels) of each
+fragment generated using the indicated shading rate, as well as the maximum
+number of fragment shader invocations launched for each fragment.
+When processing regions of a primitive that have a shading rate of
+ename:VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, no fragments will be
+generated in that region.
+
+[options="header"]
+|====
+| Shading Rate | Width | Height | Invocations
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV                 | 0 | 0 | 0
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV       | 1 | 1 | 16
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 8
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 4
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV        | 1 | 1 | 2
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV         | 1 | 1 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV    | 2 | 1 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV    | 1 | 2 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV    | 2 | 2 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV    | 4 | 2 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV    | 2 | 4 | 1
+| ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV    | 4 | 4 | 1
+|====
+--
+
+When the shading rate image is disabled, a shading rate of
+ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV will be used
+as the base shading rate.
+
+Once a base shading rate has been established, it is adjusted to produce a
+final shading rate.
+First, if the base shading rate uses multiple pixels for each fragment, the
+implementation may: reduce the fragment area to ensure that the total number
+of coverage samples for all pixels in a fragment does not exceed
+<<limits-shadingRateMaxCoarseSamples, an implementation-dependent maximum>>.
+
+If <<primsrast-sampleshading, sample shading>> is active in the current
+pipeline and would result in processing _n_ (_n_ > 1) unique samples per
+fragment when the shading rate image is disabled, the shading rate is
+adjusted in an implementation-dependent manner to increase the number of
+fragment shader invocations spawned by the primitive.
+If the shading rate indicates _fs_ pixels per fragment and _fs_ is greater
+than _n_, the fragment area is adjusted so each fragment has approximately
+latexmath:[fs \over n] pixels.
+Otherwise, if the shading rate indicates _ipf_ invocations per fragment, the
+fragment area will be adjusted to a single pixel with approximately
+latexmath:[ipf \times n \over fs] invocations per fragment.
+
+If sample shading occurs due to the use of a fragment shader input variable
+decorated with code:SampleId or code:SamplePosition, the shading rate is
+ignored.
+Each fragment will have a single pixel and will spawn up to
+pname:rasterizationSamples fragment shader invocations, as when using
+<<primsrast-sampleshading, sample shading>> without a shading rate image.
+
+Finally, if the shading rate specifies multiple fragment shader invocations
+per fragment, the total number of invocations in the shading rate is clamped
+to be no larger than pname:rasterizationSamples.
+
+When the final shading rate for a primitive covering pixel (_x_,_y_) has a
+fragment area of latexmath:[fw \times fh], the fragment for that pixel will
+cover all pixels with coordinates (_x_',_y_') that satisfy the equations:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+\left\lfloor \frac{x}{fw} \right\rfloor = \left\lfloor \frac{x'}{fw} \right\rfloor
+\end{aligned}
++++++++++++++++++++
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+\left\lfloor \frac{y}{fh} \right\rfloor = \left\lfloor \frac{y'}{fh} \right\rfloor
+\end{aligned}
++++++++++++++++++++
+
+This combined fragment is considered to have multiple coverage samples; the
+total number of samples in this fragment is given by latexmath:[samples = fw
+\times fh \times rs] where _rs_ indicates the value of
+sname:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+specified at pipeline creation time.
+The set of coverage samples in the fragment is the union of the per-pixel
+coverage samples in each of the fragment's pixels The location and order of
+coverage samples within each pixel in the combined fragment are assigned as
+described in
+ifndef::VK_EXT_sample_locations[]
+<<primsrast-multisampling, Multisampling>>.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_sample_locations[]
+<<primsrast-multisampling, Multisampling>> and <<primsrast-samplelocations,
+Custom Sample Locations>>.
+endif::VK_EXT_sample_locations[]
+Each coverage sample in the set of pixels belonging to the combined fragment
+is assigned a unique <<primsrast-multisampling-coverage-mask, coverage
+index>> in the range [0,_samples_-1].
+If the <<features-shadingRateCoarseSampleOrder,
+pname:shadingRateCoarseSampleOrder>> feature is supported, the order of
+coverage samples can: be specified for each combination of fragment area and
+coverage sample count.
+If this feature is not supported, the sample order is
+implementation-dependent.
+
+[open,refpage='VkPipelineViewportCoarseSampleOrderStateCreateInfoNV',desc='Structure specifying parameters controlling sample order in coarse fragments',type='structs']
+--
+If the pname:pNext chain of slink:VkPipelineViewportStateCreateInfo includes
+a sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV structure, then
+that structure includes parameters controlling the order of coverage samples
+in fragments larger than one pixel.
+
+The sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sampleOrderType specifies the mechanism used to order coverage
+    samples in fragments larger than one pixel.
+  * pname:customSampleOrderCount specifies the number of custom sample
+    orderings to use when ordering coverage samples.
+  * pname:pCustomSampleOrders is a pointer to an array of
+    pname:customSampleOrderCount slink:VkCoarseSampleOrderCustomNV
+    structures, each structure specifying the coverage sample order for a
+    single combination of fragment area and coverage sample count.
+
+If this structure is not present, pname:sampleOrderType is considered to be
+ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
+
+If pname:sampleOrderType is ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, the
+coverage sample order used for any combination of fragment area and coverage
+sample count not enumerated in pname:pCustomSampleOrders will be identical
+to that used for ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
+
+If the pipeline was created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV, the contents of this
+structure (if present) are ignored, and the coverage sample order is instead
+specified by flink:vkCmdSetCoarseSampleOrderNV.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-02072]]
+    If pname:sampleOrderType is not
+    ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
+    pname:customSamplerOrderCount must: be `0`
+  * [[VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-02234]]
+    The array pname:pCustomSampleOrders must: not contain two structures
+    with matching values for both the pname:shadingRate and
+    pname:sampleCount members
+****
+include::{generated}/validity/structs/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkCoarseSampleOrderTypeNV',desc='Shading rate image sample ordering types',type='enums']
+--
+The type elink:VkCoarseSampleOrderTypeNV specifies the technique used to
+order coverage samples in fragments larger than one pixel, and is defined
+as:
+
+include::{generated}/api/enums/VkCoarseSampleOrderTypeNV.adoc[]
+
+  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV specifies that coverage
+    samples will be ordered in an implementation-dependent manner.
+  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV specifies that coverage
+    samples will be ordered according to the array of custom orderings
+    provided in either the pname:pCustomSampleOrders member of
+    sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV or the
+    pname:pCustomSampleOrders member of flink:vkCmdSetCoarseSampleOrderNV.
+  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV specifies that coverage
+    samples will be ordered sequentially, sorted first by pixel coordinate
+    (in row-major order) and then by
+    <<primsrast-multisampling-coverage-mask, sample index>>.
+  * ename:VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV specifies that
+    coverage samples will be ordered sequentially, sorted first by
+    <<primsrast-multisampling-coverage-mask, sample index>> and then by
+    pixel coordinate (in row-major order).
+--
+
+When using a coarse sample order of
+ename:VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV for a fragment with an
+upper-left corner of latexmath:[(fx,fy)] with a width of latexmath:[fw
+\times fh] and latexmath:[fsc] samples per pixel,
+<<primsrast-multisampling-coverage-mask, coverage index>> latexmath:[cs] of
+the fragment will be assigned to <<primsrast-multisampling-coverage-mask,
+sample index>> latexmath:[fs] of pixel latexmath:[(px,py)] as follows:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+px = & fx + (\left\lfloor {cs \over fsc} \right\rfloor \text{ \% } fw) \\
+py = & fy + \left\lfloor {cs \over {fsc \times fw}} \right\rfloor \\
+fs = & cs \text{ \% } fsc
+\end{aligned}
++++++++++++++++++++
+
+When using a coarse sample order of
+ename:VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV,
+<<primsrast-multisampling-coverage-mask, coverage index>> latexmath:[cs]
+will be assigned as follows:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+px = & fx + cs \text{ \% } fw \\
+py = & (fy + \left\lfloor {cs \over fw} \right\rfloor \text{ \% } fh) \\
+fs = & \left\lfloor {cs \over {fw \times fh}} \right\rfloor
+\end{aligned}
++++++++++++++++++++
+
+[open,refpage='VkCoarseSampleOrderCustomNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
+--
+The sname:VkCoarseSampleOrderCustomNV structure is defined as:
+
+include::{generated}/api/structs/VkCoarseSampleOrderCustomNV.adoc[]
+
+  * pname:shadingRate is a shading rate palette entry that identifies the
+    fragment width and height for the combination of fragment area and
+    per-pixel coverage sample count to control.
+  * pname:sampleCount identifies the per-pixel coverage sample count for the
+    combination of fragment area and coverage sample count to control.
+  * pname:sampleLocationCount specifies the number of sample locations in
+    the custom ordering.
+  * pname:pSampleLocations is a pointer to an array of
+    slink:VkCoarseSampleLocationNV structures specifying the location of
+    each sample in the custom ordering.
+
+The sname:VkCoarseSampleOrderCustomNV structure is used with a coverage
+sample ordering type of ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV to
+specify the order of coverage samples for one combination of fragment width,
+fragment height, and coverage sample count.
+
+When using a custom sample ordering, element _j_ in pname:pSampleLocations
+specifies a specific pixel location and
+<<primsrast-multisampling-coverage-mask, sample index>> that corresponds to
+<<primsrast-multisampling-coverage-mask, coverage index>> _j_ in the
+multi-pixel fragment.
+
+.Valid Usage
+****
+  * [[VUID-VkCoarseSampleOrderCustomNV-shadingRate-02073]]
+    pname:shadingRate must: be a shading rate that generates fragments with
+    more than one pixel
+  * [[VUID-VkCoarseSampleOrderCustomNV-sampleCount-02074]]
+    pname:sampleCount must: correspond to a sample count enumerated in
+    tlink:VkSampleCountFlags whose corresponding bit is set in
+    slink:VkPhysicalDeviceLimits::pname:framebufferNoAttachmentsSampleCounts
+  * [[VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02075]]
+    pname:sampleLocationCount must: be equal to the product of
+    pname:sampleCount, the fragment width for pname:shadingRate, and the
+    fragment height for pname:shadingRate
+  * [[VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02076]]
+    pname:sampleLocationCount must: be less than or equal to the value of
+    sname:VkPhysicalDeviceShadingRateImagePropertiesNV::pname:shadingRateMaxCoarseSamples
+  * [[VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-02077]]
+    The array pname:pSampleLocations must: contain exactly one entry for
+    every combination of valid values for pname:pixelX, pname:pixelY, and
+    pname:sample in the structure slink:VkCoarseSampleOrderCustomNV
+****
+include::{generated}/validity/structs/VkCoarseSampleOrderCustomNV.adoc[]
+--
+
+[open,refpage='VkCoarseSampleLocationNV',desc='Structure specifying parameters controlling shading rate image usage',type='structs']
+--
+The sname:VkCoarseSampleLocationNV structure identifies a specific pixel and
+<<primsrast-multisampling-coverage-mask, sample index>> for one of the
+coverage samples in a fragment that is larger than one pixel.
+This structure is defined as:
+
+include::{generated}/api/structs/VkCoarseSampleLocationNV.adoc[]
+
+  * pname:pixelX is added to the x coordinate of the upper-leftmost pixel of
+    each fragment to identify the pixel containing the coverage sample.
+  * pname:pixelY is added to the y coordinate of the upper-leftmost pixel of
+    each fragment to identify the pixel containing the coverage sample.
+  * pname:sample is the number of the coverage sample in the pixel
+    identified by pname:pixelX and pname:pixelY.
+
+.Valid Usage
+****
+  * [[VUID-VkCoarseSampleLocationNV-pixelX-02078]]
+    pname:pixelX must: be less than the width (in pixels) of the fragment
+  * [[VUID-VkCoarseSampleLocationNV-pixelY-02079]]
+    pname:pixelY must: be less than the height (in pixels) of the fragment
+  * [[VUID-VkCoarseSampleLocationNV-sample-02080]]
+    pname:sample must: be less than the number of coverage samples in each
+    pixel belonging to the fragment
+****
+
+include::{generated}/validity/structs/VkCoarseSampleLocationNV.adoc[]
+--
+
+[open,refpage='vkCmdSetCoarseSampleOrderNV',desc='Set order of coverage samples for coarse fragments dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the order of coverage
+samples in fragments larger than one pixel, call:
+
+include::{generated}/api/protos/vkCmdSetCoarseSampleOrderNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:sampleOrderType specifies the mechanism used to order coverage
+    samples in fragments larger than one pixel.
+  * pname:customSampleOrderCount specifies the number of custom sample
+    orderings to use when ordering coverage samples.
+  * pname:pCustomSampleOrders is a pointer to an array of
+    slink:VkCoarseSampleOrderCustomNV structures, each structure specifying
+    the coverage sample order for a single combination of fragment area and
+    coverage sample count.
+
+If pname:sampleOrderType is ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, the
+coverage sample order used for any combination of fragment area and coverage
+sample count not enumerated in pname:pCustomSampleOrders will be identical
+to that used for ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV.
+
+This command sets the order of coverage samples for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV values used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-02081]]
+    If pname:sampleOrderType is not
+    ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV,
+    pname:customSamplerOrderCount must: be `0`
+  * [[VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-02235]]
+    The array pname:pCustomSampleOrders must: not contain two structures
+    with matching values for both the pname:shadingRate and
+    pname:sampleCount members
+****
+
+include::{generated}/validity/protos/vkCmdSetCoarseSampleOrderNV.adoc[]
+--
+
+If the final shading rate for a primitive covering pixel (_x_,_y_) results
+in _n_ invocations per pixel (_n_ > 1), _n_ separate fragment shader
+invocations will be generated for the fragment.
+Each coverage sample in the fragment will be assigned to one of the _n_
+fragment shader invocations in an implementation-dependent manner.
+The outputs from the <<interfaces-fragmentoutput, fragment output
+interface>> of each shader invocation will be broadcast to all of the
+framebuffer samples associated with the invocation.
+If none of the coverage samples associated with a fragment shader invocation
+is covered by a primitive, the implementation may: discard the fragment
+shader invocation for those samples.
+
+If the final shading rate for a primitive covering pixel (_x_,_y_) results
+in a fragment containing multiple pixels, a single set of fragment shader
+invocations will be generated for all pixels in the combined fragment.
+Outputs from the <<interfaces-fragmentoutput, fragment output interface>>
+will be broadcast to all covered framebuffer samples belonging to the
+fragment.
+If the fragment shader executes code discarding the fragment, none of the
+samples of the fragment will be updated.
+
+endif::VK_NV_shading_rate_image[]
+
+
+[[primsrast-sampleshading]]
+== Sample Shading
+
+Sample shading can: be used to specify a minimum number of unique samples to
+process for each fragment.
+If sample shading is enabled, an implementation must: invoke the fragment
+shader at least [eq]#max({lceil}
+slink:VkPipelineMultisampleStateCreateInfo::pname:minSampleShading {times}
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+{rceil}, 1)# times per fragment.
+If slink:VkPipelineMultisampleStateCreateInfo::pname:sampleShadingEnable is
+set to ename:VK_TRUE, sample shading is enabled.
+
+If a fragment shader entry point <<shaders-staticuse, statically uses>> an
+input variable decorated with a code:BuiltIn of code:SampleId or
+code:SamplePosition, sample shading is enabled and a value of `1.0` is used
+instead of pname:minSampleShading.
+If a fragment shader entry point <<shaders-staticuse, statically uses>> an
+input variable decorated with code:Sample, sample shading may: be enabled
+and a value of `1.0` will be used instead of pname:minSampleShading if it
+is.
+ifdef::VK_AMD_mixed_attachment_samples[]
+If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled and the
+subpass uses color attachments, the pname:samples value used to create each
+color attachment is used instead of pname:rasterizationSamples.
+endif::VK_AMD_mixed_attachment_samples[]
+
+[NOTE]
+.Note
+====
+If a shader decorates an input variable with code:Sample and that value
+meaningfully impacts the output of a shader, sample shading will be enabled
+to ensure that the input is in fact interpolated per-sample.
+This is inherent to the specification and not spelled out here - if an
+application simply declares such a variable it is implementation-defined
+whether sample shading is enabled or not.
+It is possible to see the effects of this by using atomics in the shader or
+using a pipeline statistics query to query the number of fragment
+invocations, even if the shader itself does not use any per-sample
+variables.
+====
+
+If there are fewer fragment invocations than <<fragops,covered samples>>,
+implementations may: include those samples in fragment shader invocations in
+any manner as long as covered samples are all shaded at least once, and each
+invocation that is not a <<shaders-helper-invocations, helper invocation>>
+covers at least one sample.
+
+ifdef::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+[[primsrast-barycentric]]
+== Barycentric Interpolation
+
+When the pname:fragmentShaderBarycentric feature is enabled, the
+code:PerVertexKHR <<shaders-interpolation-decorations, interpolation
+decoration>> can: be used with fragment shader inputs to indicate that the
+decorated inputs do not have associated data in the fragment.
+Such inputs can: only be accessed in a fragment shader using an array index
+whose value (0, 1, or 2) identifies one of the vertices of the primitive
+that produced the fragment.
+Reads of per-vertex values for missing vertices, such as the third vertex of
+a line primitive, will return values from the valid vertex with the highest
+index.
+This means that the per-vertex values of indices 1 and 2 for point
+primitives will be equal to those of index 0, and the per-vertex values of
+index 2 for line primitives will be equal to those of index 1.
+
+ifndef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+When <<tessellation, tessellation>> and <<geometry, geometry shading>>
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+When <<tessellation, tessellation>>, <<geometry, geometry shading>>, and
+<<mesh,mesh shading>>
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+are not active, fragment shader inputs decorated with code:PerVertexKHR will
+take values from one of the vertices of the primitive that produced the
+fragment, identified by the extra index provided in SPIR-V code accessing
+the input.
+If the _n_ vertices passed to a draw call are numbered 0 through _n_-1, and
+the point, line, and triangle primitives produced by the draw call are
+numbered with consecutive integers beginning with zero, the following table
+indicates the original vertex numbers used
+ifdef::VK_EXT_provoking_vertex[]
+when the <<vertexpostproc-flatshading,provoking vertex mode>> is
+ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT
+endif::VK_EXT_provoking_vertex[]
+for index values of 0, 1, and 2.
+If an input decorated with code:PerVertexKHR is accessed with any other
+vertex index value, or is accessed while rasterizing a polygon when the
+slink:VkPipelineRasterizationStateCreateInfo::pname:polygonMode property of
+the currently active pipeline is not ename:VK_POLYGON_MODE_FILL, an
+undefined: value is returned.
+
+[[primsrast-barycentric-order-table]]
+[options="header"]
+|====
+| Primitive Topology                                               | Vertex 0    | Vertex 1    | Vertex 2
+| ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST                           | i           | i           | i
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST                            | 2i          | 2i+1        | 2i+1
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                           | i           | i+1         | i+1
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                        | 3i          | 3i+1        | 3i+2
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (even)                | i           | i+1         | i+2
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd)                 | i           | i+2         | i+1
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                         | i+1         | i+2         | 0
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY             | 4i+1        | 4i+2        | 4i+2
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY            | i+1         | i+2         | i+2
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY         | 6i          | 6i+2        | 6i+4
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (even) | 2i          | 2i+2        | 2i+4
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (odd)  | 2i          | 2i+4        | 2i+2
+|====
+
+ifdef::VK_EXT_provoking_vertex[]
+When the provoking vertex mode is
+ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the original vertex numbers
+used are the same as above except as indicated in the table below.
+
+[[primsrast-barycentric-order-table-last-vertex]]
+[options="header"]
+|====
+| Primitive Topology                                               | Vertex 0    | Vertex 1    | Vertex 2
+ifdef::VK_KHR_fragment_shader_barycentric[]
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd, and
+pname:triStripVertexOrderIndependentOfProvokingVertex of
+slink:VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR is ename:VK_FALSE)    | i+1         | i           | i+2
+endif::VK_KHR_fragment_shader_barycentric[]
+ifndef::VK_KHR_fragment_shader_barycentric[]
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd)                 | i+1         | i           | i+2
+endif::VK_KHR_fragment_shader_barycentric[]
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                         | 0           | i+1         | i+2
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (odd)  | 2i+2        | 2i          | 2i+4
+|====
+endif::VK_EXT_provoking_vertex[]
+
+When geometry
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[or mesh]
+shading is active, primitives processed by fragment shaders are assembled
+from the vertices emitted by the geometry
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[or mesh]
+shader.
+In this case, the vertices used for fragment shader inputs decorated with
+code:PerVertexKHR are derived by treating the primitives produced by the
+shader as though they were specified by a draw call and consulting
+<<primsrast-barycentric-order-table, the table above>>.
+
+When using tessellation without geometry shading, the tessellator produces
+primitives in an implementation-dependent manner.
+While there is no defined vertex ordering for inputs decorated with
+code:PerVertexKHR, the vertex ordering used in this case will be consistent
+with the ordering used to derive the values of inputs decorated with
+code:BaryCoordKHR or code:BaryCoordNoPerspKHR.
+
+Fragment shader inputs decorated with code:BaryCoordKHR or
+code:BaryCoordNoPerspKHR hold three-component vectors with barycentric
+weights that indicate the location of the fragment relative to the
+screen-space locations of vertices of its primitive.
+For point primitives, such variables are always assigned the value
+[eq]#(1,0,0)#.
+For <<primsrast-lines-basic, line>> primitives, the built-ins are obtained
+by interpolating an attribute whose values for the vertices numbered 0 and 1
+are [eq]#(1,0,0)# and [eq]#(0,1,0)#, respectively.
+For <<primsrast-polygons-basic, polygon>> primitives, the built-ins are
+obtained by interpolating an attribute whose values for the vertices
+numbered 0, 1, and 2 are [eq]#(1,0,0)#, [eq]#(0,1,0)#, and [eq]#(0,0,1)#,
+respectively.
+For code:BaryCoordKHR, the values are obtained using perspective
+interpolation.
+For code:BaryCoordNoPerspKHR, the values are obtained using linear
+interpolation.
+The values of code:BaryCoordKHR and code:BaryCoordNoPerspKHR are undefined:
+while rasterizing a polygon when the
+slink:VkPipelineRasterizationStateCreateInfo::pname:polygonMode property of
+the currently active pipeline is not ename:VK_POLYGON_MODE_FILL.
+
+endif::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+
+
+[[primsrast-points]]
+== Points
+
+A point is drawn by generating a set of fragments in the shape of a square
+centered around the vertex of the point.
+Each vertex has an associated point size controlling the width/height of
+that square.
+The point size is taken from the (potentially clipped) shader built-in
+code:PointSize written by:
+
+  * the geometry shader, if active;
+  * the tessellation evaluation shader, if active and no geometry shader is
+    active;
+  * the vertex shader, otherwise
+
+and clamped to the implementation-dependent point size range
+[eq]#[pname:pointSizeRange[0],pname:pointSizeRange[1]]#.
+The value written to code:PointSize must: be greater than zero.
+ifdef::VK_KHR_maintenance5[]
+If <<features-maintenance5, pname:maintenance5>> is enabled, and a value is
+not written to code:PointSize, the point size takes a default value of 1.0.
+endif::VK_KHR_maintenance5[]
+
+Not all point sizes need be supported, but the size 1.0 must: be supported.
+The range of supported sizes and the size of evenly-spaced gradations within
+that range are implementation-dependent.
+The range and gradations are obtained from the pname:pointSizeRange and
+pname:pointSizeGranularity members of slink:VkPhysicalDeviceLimits.
+If, for instance, the size range is from 0.1 to 2.0 and the gradation size
+is 0.1, then the sizes 0.1, 0.2, ..., 1.9, 2.0 are supported.
+Additional point sizes may: also be supported.
+There is no requirement that these sizes be equally spaced.
+If an unsupported size is requested, the nearest supported size is used
+instead.
+
+ifdef::VK_EXT_fragment_density_map[]
+Further, if the render pass has a fragment density map attachment, point
+size may: be rounded by the implementation to a multiple of the fragment's
+width or height.
+endif::VK_EXT_fragment_density_map[]
+
+
+[[primsrast-points-basic]]
+=== Basic Point Rasterization
+
+Point rasterization produces a fragment for each fragment area group of
+framebuffer pixels with one or more sample points that intersect a region
+centered at the point's [eq]#(x~f~,y~f~)#.
+This region is a square with side equal to the current point size.
+Coverage bits that correspond to sample points that intersect the region are
+1, other coverage bits are 0.
+All fragments produced in rasterizing a point are assigned the same
+associated data, which are those of the vertex corresponding to the point.
+However, the fragment shader built-in code:PointCoord contains point sprite
+texture coordinates.
+The [eq]#s# and [eq]#t# point sprite texture coordinates vary from zero to
+one across the point horizontally left-to-right and vertically
+top-to-bottom, respectively.
+The following formulas are used to evaluate [eq]#s# and [eq]#t#:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where size is the point's size; [eq]#(x~p~,y~p~)# is the location at which
+the point sprite coordinates are evaluated - this may: be the framebuffer
+coordinates of the fragment center, or the location of a sample; and
+[eq]#(x~f~,y~f~)# is the exact, unrounded framebuffer coordinate of the
+vertex for the point.
+
+
+[[primsrast-lines]]
+== Line Segments
+
+ifdef::VK_EXT_line_rasterization[]
+[open,refpage='VkPipelineRasterizationLineStateCreateInfoEXT',desc='Structure specifying parameters of a newly created pipeline line rasterization state',type='structs']
+--
+Line segment rasterization options are controlled by the
+slink:VkPipelineRasterizationLineStateCreateInfoEXT structure.
+
+The sname:VkPipelineRasterizationLineStateCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPipelineRasterizationLineStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:lineRasterizationMode is a elink:VkLineRasterizationModeEXT value
+    selecting the style of line rasterization.
+  * pname:stippledLineEnable enables <<primsrast-lines-stipple, stippled
+    line rasterization>>.
+  * pname:lineStippleFactor is the repeat factor used in stippled line
+    rasterization.
+  * pname:lineStipplePattern is the bit pattern used in stippled line
+    rasterization.
+
+If pname:stippledLineEnable is ename:VK_FALSE, the values of
+pname:lineStippleFactor and pname:lineStipplePattern are ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02768]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
+    <<features-rectangularLines, pname:rectangularLines>> feature must: be
+    enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
+    <<features-bresenhamLines, pname:bresenhamLines>> feature must: be
+    enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    <<features-smoothLines, pname:smoothLines>> feature must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02771]]
+    If pname:stippledLineEnable is ename:VK_TRUE and
+    pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
+    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
+    feature must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02772]]
+    If pname:stippledLineEnable is ename:VK_TRUE and
+    pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
+    <<features-stippledBresenhamLines, pname:stippledBresenhamLines>>
+    feature must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02773]]
+    If pname:stippledLineEnable is ename:VK_TRUE and
+    pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    <<features-stippledSmoothLines, pname:stippledSmoothLines>> feature
+    must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02774]]
+    If pname:stippledLineEnable is ename:VK_TRUE and
+    pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, then the
+    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
+    feature must: be enabled and
+    slink:VkPhysicalDeviceLimits::pname:strictLines must: be ename:VK_TRUE
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationLineStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkLineRasterizationModeEXT',desc='Line rasterization modes',type='enums']
+--
+Possible values of
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineRasterizationMode
+are:
+
+include::{generated}/api/enums/VkLineRasterizationModeEXT.adoc[]
+
+  * ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT is equivalent to
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT if
+    slink:VkPhysicalDeviceLimits::pname:strictLines is ename:VK_TRUE,
+    otherwise lines are drawn as non-pname:strictLines parallelograms.
+    Both of these modes are defined in <<primsrast-lines-basic,Basic Line
+    Segment Rasterization>>.
+  * ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT specifies lines drawn
+    as if they were rectangles extruded from the line
+  * ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT specifies lines drawn by
+    determining which pixel diamonds the line intersects and exits, as
+    defined in <<primsrast-lines-bresenham,Bresenham Line Segment
+    Rasterization>>.
+  * ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT specifies lines
+    drawn if they were rectangles extruded from the line, with alpha
+    falloff, as defined in <<primsrast-lines-smooth,Smooth Lines>>.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetLineRasterizationModeEXT',desc='Specify the line rasterization mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:lineRasterizationMode state, call:
+
+include::{generated}/api/protos/vkCmdSetLineRasterizationModeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:lineRasterizationMode specifies the pname:lineRasterizationMode
+    state.
+
+This command sets the pname:lineRasterizationMode state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineRasterizationMode
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetLineRasterizationModeEXT
+:requiredfeature: extendedDynamicState3LineRasterizationMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07418]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
+    <<features-rectangularLines, pname:rectangularLines>> feature must: be
+    enabled
+  * [[VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07419]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
+    <<features-bresenhamLines, pname:bresenhamLines>> feature must: be
+    enabled
+  * [[VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07420]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    <<features-smoothLines, pname:smoothLines>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetLineRasterizationModeEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetLineStippleEnableEXT',desc='Specify the line stipple enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the pname:stippledLineEnable
+state, call:
+
+include::{generated}/api/protos/vkCmdSetLineStippleEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:stippledLineEnable specifies the pname:stippledLineEnable state.
+
+This command sets the pname:stippledLineEnable state for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:stippledLineEnable
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetLineStippleEnableEXT
+:requiredfeature: extendedDynamicState3LineStippleEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetLineStippleEnableEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+endif::VK_EXT_line_rasterization[]
+
+[open,refpage='vkCmdSetLineWidth',desc='Set line width dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the line width, call:
+
+include::{generated}/api/protos/vkCmdSetLineWidth.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:lineWidth is the width of rasterized line segments.
+
+This command sets the line width for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_LINE_WIDTH
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:lineWidth value used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetLineWidth-lineWidth-00788]]
+    If the <<features-wideLines, pname:wideLines>> feature is not enabled,
+    pname:lineWidth must: be `1.0`
+****
+
+include::{generated}/validity/protos/vkCmdSetLineWidth.adoc[]
+--
+
+Not all line widths need be supported for line segment rasterization, but
+width 1.0 antialiased segments must: be provided.
+The range and gradations are obtained from the pname:lineWidthRange and
+pname:lineWidthGranularity members of slink:VkPhysicalDeviceLimits.
+If, for instance, the size range is from 0.1 to 2.0 and the gradation size
+is 0.1, then the sizes 0.1, 0.2, ..., 1.9, 2.0 are supported.
+Additional line widths may: also be supported.
+There is no requirement that these widths be equally spaced.
+If an unsupported width is requested, the nearest supported width is used
+instead.
+
+ifdef::VK_EXT_fragment_density_map[]
+Further, if the render pass has a fragment density map attachment, line
+width may: be rounded by the implementation to a multiple of the fragment's
+width or height.
+endif::VK_EXT_fragment_density_map[]
+
+
+[[primsrast-lines-basic]]
+=== Basic Line Segment Rasterization
+
+ifdef::VK_EXT_line_rasterization[]
+If the pname:lineRasterizationMode member of
+slink:VkPipelineRasterizationLineStateCreateInfoEXT is
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, rasterized
+endif::VK_EXT_line_rasterization[]
+ifndef::VK_EXT_line_rasterization[]
+Rasterized
+endif::VK_EXT_line_rasterization[]
+line segments produce fragments which intersect a rectangle centered on the
+line segment.
+Two of the edges are parallel to the specified line segment; each is at a
+distance of one-half the current width from that segment in directions
+perpendicular to the direction of the line.
+The other two edges pass through the line endpoints and are perpendicular to
+the direction of the specified line segment.
+Coverage bits that correspond to sample points that intersect the rectangle
+are 1, other coverage bits are 0.
+
+Next we specify how the data associated with each rasterized fragment are
+obtained.
+Let [eq]#**p**~r~ = (x~d~, y~d~)# be the framebuffer coordinates at which
+associated data are evaluated.
+This may: be the center of a fragment or the location of a sample within the
+fragment.
+When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
+center must: be used.
+Let [eq]#**p**~a~ = (x~a~, y~a~)# and [eq]#**p**~b~ = (x~b~,y~b~)# be
+initial and final endpoints of the line segment, respectively.
+Set
+
+// Equation {linet:eq}
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
+    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+(Note that [eq]#t = 0# at [eq]#**p**~a~# and [eq]#t = 1# at [eq]#**p**~b~#.
+Also note that this calculation projects the vector from [eq]#**p**~a~# to
+[eq]#**p**~r~# onto the line, and thus computes the normalized distance of
+the fragment along the line.)
+
+If <<limits-strictLines, pname:strictLines>> is ename:VK_TRUE, line segments
+are rasterized using perspective or linear interpolation.
+
+[[line_perspective_interpolation]]
+_Perspective interpolation_ for a line segment interpolates two values in a
+manner that is correct when taking the perspective of the viewport into
+consideration, by way of the line segment's clip coordinates.
+An interpolated value [eq]#f# can be determined by
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
+    {(1-t) / w_a + t / w_b }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where [eq]#f~a~# and [eq]#f~b~# are the data associated with the starting
+and ending endpoints of the segment, respectively; [eq]#w~a~# and [eq]#w~b~#
+are the clip [eq]#w# coordinates of the starting and ending endpoints of the
+segment, respectively.
+
+[[line_linear_interpolation]]
+_Linear interpolation_ for a line segment directly interpolates two values,
+and an interpolated value [eq]#f# can be determined by
+
+  {empty}:: [eq]#f = (1 - t) f~a~ {plus} t f~b~#
+
+where [eq]#f~a~# and [eq]#f~b~# are the data associated with the starting
+and ending endpoints of the segment, respectively.
+
+The clip coordinate [eq]#w# for a sample is determined using perspective
+interpolation.
+The depth value [eq]#z# for a sample is determined using linear
+interpolation.
+Interpolation of fragment shader input values are determined by
+<<shaders-interpolation-decorations,Interpolation decorations>>.
+
+The above description documents the preferred method of line rasterization,
+and must: be used when
+ifdef::VK_EXT_line_rasterization[]
+pname:lineRasterizationMode is
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT.
+endif::VK_EXT_line_rasterization[]
+ifndef::VK_EXT_line_rasterization[]
+the implementation advertises the pname:strictLines limit in
+slink:VkPhysicalDeviceLimits as ename:VK_TRUE.
+endif::VK_EXT_line_rasterization[]
+
+ifndef::VK_KHR_maintenance5[]
+When
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+By default, when
+endif::VK_KHR_maintenance5[]
+pname:strictLines is ename:VK_FALSE,
+ifdef::VK_EXT_line_rasterization[]
+and when the pname:lineRasterizationMode is
+ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+endif::VK_EXT_line_rasterization[]
+the edges of the lines are generated as a parallelogram surrounding the
+original line.
+The major axis is chosen by noting the axis in which there is the greatest
+distance between the line start and end points.
+If the difference is equal in both directions then the X axis is chosen as
+the major axis.
+Edges 2 and 3 are aligned to the minor axis and are centered on the
+endpoints of the line as in <<fig-non-strict-lines>>, and each is
+pname:lineWidth long.
+Edges 0 and 1 are parallel to the line and connect the endpoints of edges 2
+and 3.
+Coverage bits that correspond to sample points that intersect the
+parallelogram are 1, other coverage bits are 0.
+
+Samples that fall exactly on the edge of the parallelogram follow the
+polygon rasterization rules.
+
+Interpolation occurs as if the parallelogram was decomposed into two
+triangles where each pair of vertices at each end of the line has identical
+attributes.
+
+[[fig-non-strict-lines]]
+image::{images}/non_strict_lines.svg[align="center",title="Non strict lines",opts="{imageopts}"]
+
+Only when pname:strictLines is ename:VK_FALSE implementations may: deviate
+from the non-strict line algorithm described above in the following ways:
+
+  * Implementations may: instead interpolate each fragment according to the
+    formula in <<primsrast-lines-basic, Basic Line Segment Rasterization>>
+    using the original line segment endpoints.
+
+  * Rasterization of non-antialiased non-strict line segments may: be
+    performed using the rules defined in
+    <<primsrast-lines-bresenham,Bresenham Line Segment Rasterization>>.
+
+ifdef::VK_KHR_maintenance5[]
+If
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:nonStrictSinglePixelWideLinesUseParallelogram
+is ename:VK_TRUE,
+ifdef::VK_EXT_line_rasterization[]
+the pname:lineRasterizationMode is
+ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+endif::VK_EXT_line_rasterization[]
+and pname:strictLines is ename:VK_FALSE, non-strict lines of width 1.0 are
+rasterized as parallelograms, otherwise they are rasterized using
+Bresenham's algorithm.
+
+If
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:nonStrictWideLinesUseParallelogram
+is ename:VK_TRUE,
+ifdef::VK_EXT_line_rasterization[]
+the pname:lineRasterizationMode is
+ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+endif::VK_EXT_line_rasterization[]
+and pname:strictLines is ename:VK_FALSE, non-strict lines of width greater
+than 1.0 are rasterized as parallelograms, otherwise they are rasterized
+using Bresenham's algorithm.
+endif::VK_KHR_maintenance5[]
+
+[[primsrast-lines-bresenham]]
+=== Bresenham Line Segment Rasterization
+
+ifdef::VK_EXT_line_rasterization[]
+If pname:lineRasterizationMode is
+ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the following rules
+replace the line rasterization rules defined in <<primsrast-lines-basic,
+Basic Line Segment Rasterization>>.
+endif::VK_EXT_line_rasterization[]
+
+Non-strict lines may: also follow these rasterization rules for
+non-antialiased lines.
+
+Line segment rasterization begins by characterizing the segment as either
+_x-major_ or _y-major_.
+x-major line segments have slope in the closed interval [eq]#[-1,1]#; all
+other line segments are y-major (slope is determined by the segment's
+endpoints).
+We specify rasterization only for x-major segments except in cases where the
+modifications for y-major segments are not self-evident.
+
+Ideally, Vulkan uses a _diamond-exit_ rule to determine those fragments that
+are produced by rasterizing a line segment.
+For each fragment [eq]#f# with center at framebuffer coordinates [eq]#x~f~#
+and [eq]#y~f~#, define a diamond-shaped region that is the intersection of
+four half planes:
+
+[latexmath]
++++++++++++++++++++
+    R_f = \{ (x,y) \mid | x - x_f | + | y - y_f | < \frac{1}{2} \}
++++++++++++++++++++
+
+Essentially, a line segment starting at [eq]#p~a~# and ending at [eq]#p~b~#
+produces those fragments [eq]#f# for which the segment intersects
+[eq]#R~f~#, except if [eq]#p~b~# is contained in [eq]#R~f~#.
+
+image::{images}/bresenham.svg[title="Visualization of Bresenham's algorithm",align="center",opts="{imageopts}"]
+
+To avoid difficulties when an endpoint lies on a boundary of [eq]#R~f~# we
+(in principle) perturb the supplied endpoints by a tiny amount.
+Let [eq]#p~a~# and [eq]#p~b~# have framebuffer coordinates [eq]#(x~a~,
+y~a~)# and [eq]#(x~b~, y~b~)#, respectively.
+Obtain the perturbed endpoints [eq]#p~a~'# given by [eq]#(x~a~, y~a~) -
+({epsilon}, {epsilon}^2^)# and [eq]#p~b~'# given by [eq]#(x~b~, y~b~) -
+({epsilon}, {epsilon}^2^)#.
+Rasterizing the line segment starting at [eq]#p~a~# and ending at [eq]#p~b~#
+produces those fragments [eq]#f# for which the segment starting at
+[eq]#p~a~'# and ending on [eq]#p~b~'# intersects [eq]#R~f~#, except if
+[eq]#p~b~'# is contained in [eq]#R~f~#.
+[eq]#{epsilon}# is chosen to be so small that rasterizing the line segment
+produces the same fragments when [eq]#{delta}# is substituted for
+[eq]#{epsilon}# for any [eq]#0 < {delta} {leq} {epsilon}#.
+
+When [eq]#p~a~# and [eq]#p~b~# lie on fragment centers, this
+characterization of fragments reduces to Bresenham's algorithm with one
+modification: lines produced in this description are "`half-open`", meaning
+that the final fragment (corresponding to [eq]#p~b~#) is not drawn.
+This means that when rasterizing a series of connected line segments, shared
+endpoints will be produced only once rather than twice (as would occur with
+Bresenham's algorithm).
+
+Implementations may: use other line segment rasterization algorithms,
+subject to the following rules:
+
+  * The coordinates of a fragment produced by the algorithm must: not
+    deviate by more than one unit in either x or y framebuffer coordinates
+    from a corresponding fragment produced by the diamond-exit rule.
+  * The total number of fragments produced by the algorithm must: not differ
+    from that produced by the diamond-exit rule by no more than one.
+  * For an x-major line, two fragments that lie in the same
+    framebuffer-coordinate column must: not be produced (for a y-major line,
+    two fragments that lie in the same framebuffer-coordinate row must: not
+    be produced).
+  * If two line segments share a common endpoint, and both segments are
+    either x-major (both left-to-right or both right-to-left) or y-major
+    (both bottom-to-top or both top-to-bottom), then rasterizing both
+    segments must: not produce duplicate fragments.
+    Fragments also must: not be omitted so as to interrupt continuity of the
+    connected segments.
+
+The actual width [eq]#w# of Bresenham lines is determined by rounding the
+line width to the nearest integer, clamping it to the
+implementation-dependent pname:lineWidthRange (with both values rounded to
+the nearest integer), then clamping it to be no less than 1.
+
+Bresenham line segments of width other than one are rasterized by offsetting
+them in the minor direction (for an x-major line, the minor direction is y,
+and for a y-major line, the minor direction is x) and producing a row or
+column of fragments in the minor direction.
+If the line segment has endpoints given by [eq]#(x~0~, y~0~)# and
+[eq]#(x~1~, y~1~)# in framebuffer coordinates, the segment with endpoints
+latexmath:[(x_0, y_0 - \frac{w-1}{2})] and latexmath:[(x_1, y_1 -
+\frac{w-1}{2})] is rasterized, but instead of a single fragment, a column of
+fragments of height w (a row of fragments of length w for a y-major segment)
+is produced at each x (y for y-major) location.
+The lowest fragment of this column is the fragment that would be produced by
+rasterizing the segment of width 1 with the modified coordinates.
+
+The preferred method of attribute interpolation for a wide line is to
+generate the same attribute values for all fragments in the row or column
+described above, as if the adjusted line was used for interpolation and
+those values replicated to the other fragments, except for code:FragCoord
+which is interpolated as usual.
+Implementations may: instead interpolate each fragment according to the
+formula in <<primsrast-lines-basic,Basic Line Segment Rasterization>>, using
+the original line segment endpoints.
+
+When Bresenham lines are being rasterized, sample locations may: all be
+treated as being at the pixel center (this may: affect attribute and depth
+interpolation).
+
+[NOTE]
+.Note
+====
+The sample locations described above are *not* used for determining
+coverage, they are only used for things like attribute interpolation.
+The rasterization rules that determine coverage are defined in terms of
+whether the line intersects *pixels*, as opposed to the point sampling rules
+used for other primitive types.
+So these rules are independent of the sample locations.
+One consequence of this is that Bresenham lines cover the same pixels
+regardless of the number of rasterization samples, and cover all samples in
+those pixels (unless masked out or killed).
+====
+
+
+ifdef::VK_EXT_line_rasterization[]
+[[primsrast-lines-stipple]]
+=== Line Stipple
+
+If the pname:stippledLineEnable member of
+slink:VkPipelineRasterizationLineStateCreateInfoEXT is ename:VK_TRUE, then
+lines are rasterized with a _line stipple_ determined by
+pname:lineStippleFactor and pname:lineStipplePattern.
+pname:lineStipplePattern is an unsigned 16-bit integer that determines which
+fragments are to be drawn or discarded when the line is rasterized.
+pname:lineStippleFactor is a count that is used to modify the effective line
+stipple by causing each bit in pname:lineStipplePattern to be used
+pname:lineStippleFactor times.
+
+Line stippling discards certain fragments that are produced by
+rasterization.
+The masking is achieved using three parameters: the 16-bit line stipple
+pattern _p_, the line stipple factor _r_, and an integer stipple counter
+_s_.
+Let
+
+[latexmath]
++++++++++++++++++++
+b  = \left\lfloor \frac{s}{r} \right\rfloor \bmod 16
++++++++++++++++++++
+
+Then a fragment is produced if the _b_'th bit of _p_ is 1, and discarded
+otherwise.
+The bits of _p_ are numbered with 0 being the least significant and 15 being
+the most significant.
+
+The initial value of _s_ is zero.
+For ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT lines, _s_ is incremented
+after production of each fragment of a line segment (fragments are produced
+in order, beginning at the starting point and working towards the ending
+point).
+For ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT and
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT lines, the
+rectangular region is subdivided into adjacent unit-length rectangles, and s
+is incremented once for each rectangle.
+Rectangles with a value of _s_ such that the _b_'th bit of _p_ is zero are
+discarded.
+If the last rectangle in a line segment is shorter than unit-length, then
+the remainder may: carry over to the next line segment in the line strip
+using the same value of _s_ (this is the preferred behavior, for the stipple
+pattern to appear more consistent through the strip).
+
+_s_ is reset to 0 at the start of each strip (for line strips), and before
+every line segment in a group of independent segments.
+
+If the line segment has been clipped, then the value of _s_ at the beginning
+of the line segment is implementation-dependent.
+
+[open,refpage='vkCmdSetLineStippleEXT',desc='Set line stipple dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the line stipple state,
+call:
+
+include::{generated}/api/protos/vkCmdSetLineStippleEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:lineStippleFactor is the repeat factor used in stippled line
+    rasterization.
+  * pname:lineStipplePattern is the bit pattern used in stippled line
+    rasterization.
+
+This command sets the line stipple state for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineStippleFactor
+and
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineStipplePattern
+values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetLineStippleEXT-lineStippleFactor-02776]]
+    pname:lineStippleFactor must: be in the range [eq]#[1,256]#
+****
+
+include::{generated}/validity/protos/vkCmdSetLineStippleEXT.adoc[]
+--
+
+
+[[primsrast-lines-smooth]]
+=== Smooth Lines
+
+If the pname:lineRasterizationMode member of
+slink:VkPipelineRasterizationLineStateCreateInfoEXT is
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then lines are
+considered to be rectangles using the same geometry as for
+ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT lines.
+The rules for determining which pixels are covered are
+implementation-dependent, and may: include nearby pixels where no sample
+locations are covered or where the rectangle does not intersect the pixel at
+all.
+For each pixel that is considered covered, the fragment computes a coverage
+value that approximates the area of the intersection of the rectangle with
+the pixel square, and this coverage value is multiplied into the color
+location 0's alpha value after fragment shading, as described in
+<<fragops-covg,Multisample Coverage>>.
+
+[NOTE]
+.Note
+====
+The details of the rasterization rules and area calculation are left
+intentionally vague, to allow implementations to generate coverage and
+values that are aesthetically pleasing.
+====
+endif::VK_EXT_line_rasterization[]
+
+
+[[primsrast-polygons]]
+== Polygons
+
+A polygon results from the decomposition of a triangle strip, triangle fan
+or a series of independent triangles.
+Like points and line segments, polygon rasterization is controlled by
+several variables in the slink:VkPipelineRasterizationStateCreateInfo
+structure.
+
+
+[[primsrast-polygons-basic]]
+=== Basic Polygon Rasterization
+
+[open,refpage='VkFrontFace',desc='Interpret polygon front-facing orientation',type='enums']
+--
+The first step of polygon rasterization is to determine whether the triangle
+is _back-facing_ or _front-facing_.
+This determination is made based on the sign of the (clipped or unclipped)
+polygon's area computed in framebuffer coordinates.
+One way to compute this area is:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = -{1 \over 2}\sum_{i=0}^{n-1}
+      x_f^i y_f^{i \oplus 1} -
+      x_f^{i \oplus 1} y_f^i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where latexmath:[x_f^i] and latexmath:[y_f^i] are the [eq]#x# and [eq]#y#
+framebuffer coordinates of the [eq]##i##th vertex of the [eq]#n#-vertex
+polygon (vertices are numbered starting at zero for the purposes of this
+computation) and [eq]#i {oplus} 1# is [eq]#(i {plus} 1) mod n#.
+
+The interpretation of the sign of [eq]#a# is determined by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:frontFace property of
+the currently active pipeline.
+Possible values are:
+
+include::{generated}/api/enums/VkFrontFace.adoc[]
+
+  * ename:VK_FRONT_FACE_COUNTER_CLOCKWISE specifies that a triangle with
+    positive area is considered front-facing.
+  * ename:VK_FRONT_FACE_CLOCKWISE specifies that a triangle with negative
+    area is considered front-facing.
+
+Any triangle which is not front-facing is back-facing, including zero-area
+triangles.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetFrontFace',desc='Set front face orientation dynamically for a command buffer',type='protos',alias='vkCmdSetFrontFaceEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the front face orientation,
+call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetFrontFace.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetFrontFaceEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:frontFace is a elink:VkFrontFace value specifying the front-facing
+    triangle orientation to be used for culling.
+
+This command sets the front face orientation for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_FRONT_FACE
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:frontFace value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetFrontFace
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetFrontFace.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+
+[open,refpage='VkCullModeFlagBits',desc='Bitmask controlling triangle culling',type='enums']
+--
+Once the orientation of triangles is determined, they are culled according
+to the slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode property
+of the currently active pipeline.
+Possible values are:
+
+include::{generated}/api/enums/VkCullModeFlagBits.adoc[]
+
+  * ename:VK_CULL_MODE_NONE specifies that no triangles are discarded
+  * ename:VK_CULL_MODE_FRONT_BIT specifies that front-facing triangles are
+    discarded
+  * ename:VK_CULL_MODE_BACK_BIT specifies that back-facing triangles are
+    discarded
+  * ename:VK_CULL_MODE_FRONT_AND_BACK specifies that all triangles are
+    discarded.
+
+Following culling, fragments are produced for any triangles which have not
+been discarded.
+--
+
+[open,refpage='VkCullModeFlags',desc='Bitmask of VkCullModeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCullModeFlags.adoc[]
+
+tname:VkCullModeFlags is a bitmask type for setting a mask of zero or more
+elink:VkCullModeFlagBits.
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetCullMode',desc='Set cull mode dynamically for a command buffer',type='protos',alias='vkCmdSetCullModeEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the cull mode, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetCullMode.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetCullModeEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:cullMode specifies the cull mode property to use for drawing.
+
+This command sets the cull mode for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_CULL_MODE
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode value used to
+create the currently active pipeline.
+
+:refpage: vkCmdSetCullMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetCullMode.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+The rule for determining which fragments are produced by polygon
+rasterization is called _point sampling_.
+The two-dimensional projection obtained by taking the x and y framebuffer
+coordinates of the polygon's vertices is formed.
+Fragments are produced for any fragment area groups of pixels for which any
+sample points lie inside of this polygon.
+Coverage bits that correspond to sample points that satisfy the point
+sampling criteria are 1, other coverage bits are 0.
+Special treatment is given to a sample whose sample location lies on a
+polygon edge.
+In such a case, if two polygons lie on either side of a common edge (with
+identical endpoints) on which a sample point lies, then exactly one of the
+polygons must: result in a covered sample for that fragment during
+rasterization.
+As for the data associated with each fragment produced by rasterizing a
+polygon, we begin by specifying how these values are produced for fragments
+in a triangle.
+
+[[primsrast-polygon-barycentrics]]
+_Barycentric coordinates_ are a set of three numbers, [eq]#a#, [eq]#b#, and
+[eq]#c#, each in the range [eq]#[0,1]#, with [eq]#a {plus} b {plus} c = 1#.
+These coordinates uniquely specify any point [eq]#p# within the triangle or
+on the triangle's boundary as
+
+  {empty}:: [eq]#p = a p~a~ {plus} b p~b~ {plus} c p~c~#
+
+where [eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~# are the vertices of the
+triangle.
+[eq]#a#, [eq]#b#, and [eq]#c# are determined by:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where [eq]#A(lmn)# denotes the area in framebuffer coordinates of the
+triangle with vertices [eq]#l#, [eq]#m#, and [eq]#n#.
+
+Denote an associated datum at [eq]#p~a~#, [eq]#p~b~#, or [eq]#p~c~# as
+[eq]#f~a~#, [eq]#f~b~#, or [eq]#f~c~#, respectively.
+
+[[triangle_perspective_interpolation]]
+_Perspective interpolation_ for a triangle interpolates three values in a
+manner that is correct when taking the perspective of the viewport into
+consideration, by way of the triangle's clip coordinates.
+An interpolated value [eq]#f# can be determined by
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = {{ a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
+    { {a / w_a} + {b / w_b} + {c / w_c} }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where [eq]#w~a~#, [eq]#w~b~#, and [eq]#w~c~# are the clip [eq]#w#
+coordinates of [eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~#, respectively.
+[eq]#a#, [eq]#b#, and [eq]#c# are the barycentric coordinates of the
+location at which the data are produced.
+
+[[triangle_linear_interpolation]]
+_Linear interpolation_ for a triangle directly interpolates three values,
+and an interpolated value [eq]#f# can be determined by
+
+  {empty}:: [eq]#f = a f~a~ {plus} b f~b~ {plus} c f~c~#
+
+where [eq]#f~a~#, [eq]#f~b~#, and [eq]#f~c~# are the data associated with
+[eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~#, respectively.
+
+The clip coordinate [eq]#w# for a sample is determined using perspective
+interpolation.
+The depth value [eq]#z# for a sample is determined using linear
+interpolation.
+Interpolation of fragment shader input values are determined by
+<<shaders-interpolation-decorations,Interpolation decorations>>.
+
+For a polygon with more than three edges, such as are produced by clipping a
+triangle, a convex combination of the values of the datum at the polygon's
+vertices must: be used to obtain the value assigned to each fragment
+produced by the rasterization algorithm.
+That is, it must: be the case that at every fragment
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = \sum_{i=1}^{n} a_i f_i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where [eq]#n# is the number of vertices in the polygon and [eq]#f~i~# is the
+value of [eq]#f# at vertex [eq]#i#.
+For each [eq]#i#, [eq]#0 {leq} a~i~ {leq} 1# and
+latexmath:[\sum_{i=1}^{n}a_i = 1].
+The values of [eq]#a~i~# may: differ from fragment to fragment, but at
+vertex [eq]#i#, [eq]#a~i~ = 1# and [eq]#a~j~ = 0# for [eq]#j {neq} i#.
+
+[NOTE]
+.Note
+====
+One algorithm that achieves the required behavior is to triangulate a
+polygon (without adding any vertices) and then treat each triangle
+individually as already discussed.
+A scan-line rasterizer that linearly interpolates data along each edge and
+then linearly interpolates data across each horizontal span from edge to
+edge also satisfies the restrictions (in this case the numerator and
+denominator of <<triangle_perspective_interpolation, perspective
+interpolation>> are iterated independently, and a division is performed for
+each fragment).
+====
+
+
+[[primsrast-polygonmode]]
+=== Polygon Mode
+
+[open,refpage='VkPolygonMode',desc='Control polygon rasterization mode',type='enums']
+--
+Possible values of the
+slink:VkPipelineRasterizationStateCreateInfo::pname:polygonMode property of
+the currently active pipeline, specifying the method of rasterization for
+polygons, are:
+
+include::{generated}/api/enums/VkPolygonMode.adoc[]
+
+  * ename:VK_POLYGON_MODE_POINT specifies that polygon vertices are drawn as
+    points.
+  * ename:VK_POLYGON_MODE_LINE specifies that polygon edges are drawn as
+    line segments.
+  * ename:VK_POLYGON_MODE_FILL specifies that polygons are rendered using
+    the polygon rasterization rules in this section.
+ifdef::VK_NV_fill_rectangle[]
+  * ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV specifies that polygons are
+    rendered using polygon rasterization rules, modified to consider a
+    sample within the primitive if the sample location is inside the
+    axis-aligned bounding box of the triangle after projection.
+    Note that the barycentric weights used in attribute interpolation can:
+    extend outside the range [eq]#[0,1]# when these primitives are shaded.
+    Special treatment is given to a sample position on the boundary edge of
+    the bounding box.
+    In such a case, if two rectangles lie on either side of a common edge
+    (with identical endpoints) on which a sample position lies, then exactly
+    one of the triangles must: produce a fragment that covers that sample
+    during rasterization.
++
+Polygons rendered in ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV mode may: be
+clipped by the frustum or by user clip planes.
+If clipping is applied, the triangle is culled rather than clipped.
++
+Area calculation and facingness are determined for
+ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV mode using the triangle's vertices.
+endif::VK_NV_fill_rectangle[]
+
+These modes affect only the final rasterization of polygons: in particular,
+a polygon's vertices are shaded and the polygon is clipped and possibly
+culled before these modes are applied.
+
+ifndef::VK_KHR_maintenance5[]
+The point size of the final rasterization of polygons when
+<<primsrast-polygonmode, polygon mode>> is ename:VK_POLYGON_MODE_POINT is
+implementation-dependent, and the point size may: either be code:PointSize
+or 1.0.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+If
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:polygonModePointSize
+is set to ename:VK_TRUE, the point size of the final rasterization of
+polygons is taken from code:PointSize when <<primsrast-polygonmode, polygon
+mode>> is ename:VK_POLYGON_MODE_POINT.
+
+Otherwise, if
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:polygonModePointSize
+is set to ename:VK_FALSE, the point size of the final rasterization of
+polygons is 1.0 when <<primsrast-polygonmode, polygon mode>> is
+ename:VK_POLYGON_MODE_POINT.
+endif::VK_KHR_maintenance5[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetPolygonModeEXT',desc='Specify polygon mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the polygon mode, call:
+
+include::{generated}/api/protos/vkCmdSetPolygonModeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:polygonMode specifies polygon mode.
+
+This command sets the polygon mode for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:polygonMode value used
+to create the currently active pipeline.
+
+:refpage: vkCmdSetPolygonModeEXT
+:requiredfeature: extendedDynamicState3PolygonMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetPolygonModeEXT-fillModeNonSolid-07424]]
+    If the <<features-fillModeNonSolid, pname:fillModeNonSolid>> feature is
+    not enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL
+ifdef::VK_NV_fill_rectangle[or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV]
+ifdef::VK_NV_fill_rectangle[]
+  * [[VUID-vkCmdSetPolygonModeEXT-polygonMode-07425]]
+    If the `apiext:VK_NV_fill_rectangle` extension is not enabled,
+    pname:polygonMode must: not be ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV
+endif::VK_NV_fill_rectangle[]
+****
+
+include::{generated}/validity/protos/vkCmdSetPolygonModeEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+
+[[primsrast-depthbias]]
+=== Depth Bias
+
+The depth values of all fragments generated by the rasterization of a
+polygon can: be biased (offset) by a single depth bias value latexmath:[o]
+that is computed for that polygon.
+
+
+[[primsrast-depthbias-enable]]
+==== Depth Bias Enable
+
+The depth bias computation is enabled by the
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+pname:depthBiasEnable set with flink:vkCmdSetDepthBiasEnable
+ifdef::VK_EXT_extended_dynamic_state2[]
+and fname:vkCmdSetDepthBiasEnableEXT,
+endif::VK_EXT_extended_dynamic_state2[]
+or the corresponding
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasEnable value
+used to create the currently active pipeline.
+If the depth bias enable is ename:VK_FALSE, no bias is applied and the
+fragment's depth values are unchanged.
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetDepthBiasEnable',desc='Control whether to bias fragment depth values dynamically for a command buffer',type='protos',alias='vkCmdSetDepthBiasEnableEXT']
+--
+To <<pipelines-dynamic-state, dynamically enable>> whether to bias fragment
+depth values, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetDepthBiasEnable.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetDepthBiasEnableEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthBiasEnable controls whether to bias fragment depth values.
+
+This command sets the depth bias enable for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasEnable value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthBiasEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state2_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBiasEnable.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+
+[[primsrast-depthbias-computation]]
+==== Depth Bias Computation
+
+The depth bias depends on three parameters:
+
+  * pname:depthBiasSlopeFactor scales the maximum depth slope [eq]#m# of the
+    polygon
+  * pname:depthBiasConstantFactor scales the parameter [eq]#r# of the depth
+    attachment
+  * the scaled terms are summed to produce a value which is then clamped to
+    a minimum or maximum value specified by pname:depthBiasClamp
+
+pname:depthBiasSlopeFactor, pname:depthBiasConstantFactor, and
+pname:depthBiasClamp can: each be positive, negative, or zero.
+These parameters are set as described for flink:vkCmdSetDepthBias
+ifdef::VK_EXT_depth_bias_control[]
+and flink:vkCmdSetDepthBias2EXT
+endif::VK_EXT_depth_bias_control[]
+below.
+
+The maximum depth slope [eq]#m# of a triangle is
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
+        +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where [eq]#(x~f~, y~f~, z~f~)# is a point on the triangle.
+[eq]#m# may: be approximated as
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,
+               \left| { {\partial z_f} \over {\partial y_f} } \right|
+       \right).
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ifdef::VK_EXT_depth_bias_control[]
+In a pipeline with a depth bias representation of
+ename:VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT, [eq]#r#, for the given
+primitive is defined as
+
+  {empty}:: [eq]#r = 1#
+
+
+Otherwise
+endif::VK_EXT_depth_bias_control[]
+[eq]#r# is the minimum resolvable difference that depends on the depth
+attachment representation.
+ifdef::VK_EXT_depth_bias_control[]
+If sname:VkDepthBiasRepresentationInfoEXT::pname:depthBiasExact is
+ename:VK_FALSE it
+endif::VK_EXT_depth_bias_control[]
+ifndef::VK_EXT_depth_bias_control[It]
+is the smallest difference in framebuffer coordinate [eq]#z# values that is
+guaranteed to remain distinct throughout polygon rasterization and in the
+depth attachment.
+All pairs of fragments generated by the rasterization of two polygons with
+otherwise identical vertices, but [eq]#pname:z~f~# values that differ by
+[eq]#r#, will have distinct depth values.
+
+For fixed-point depth attachment representations,
+ifdef::VK_EXT_depth_bias_control[]
+or in a pipeline with a depth bias representation of
+ename:VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT,
+endif::VK_EXT_depth_bias_control[]
+[eq]#r# is constant throughout the range of the entire depth attachment.
+ifdef::VK_EXT_depth_bias_control[]
+If sname:VkDepthBiasRepresentationInfoEXT::pname:depthBiasExact is
+ename:VK_TRUE, then its value must: be
+
+  {empty}:: [eq]#r = 2^-n^#
+
+Otherwise its value is implementation-dependent but must: be at most
+endif::VK_EXT_depth_bias_control[]
+ifndef::VK_EXT_depth_bias_control[]
+Its value is implementation-dependent but must: be at most
+endif::VK_EXT_depth_bias_control[]
+
+  {empty}:: [eq]#r = 2 {times} 2^-n^#
+
+where [eq]#n# is the number of bits used for the depth
+ifndef::VK_EXT_depth_bias_control[aspect.]
+ifdef::VK_EXT_depth_bias_control[]
+aspect when using a fixed-point attachment, or the number of mantissa bits
+plus one when using a floating-point attachment.
+endif::VK_EXT_depth_bias_control[]
+
+
+ifdef::VK_EXT_depth_bias_control[Otherwise for]
+ifndef::VK_EXT_depth_bias_control[For]
+floating-point depth attachment, there is no single minimum resolvable
+difference.
+In this case, the minimum resolvable difference for a given polygon is
+dependent on the maximum exponent, [eq]#e#, in the range of [eq]#z# values
+spanned by the primitive.
+If [eq]#n# is the number of bits in the floating-point mantissa, the minimum
+resolvable difference, [eq]#r#, for the given primitive is defined as
+
+  {empty}:: [eq]#r = 2^e-n^#
+
+ifdef::VK_NV_fill_rectangle[]
+If a triangle is rasterized using the
+ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV polygon mode, then this minimum
+resolvable difference may: not be resolvable for samples outside of the
+triangle, where the depth is extrapolated.
+endif::VK_NV_fill_rectangle[]
+
+If no depth attachment is present, [eq]#r# is undefined:.
+
+The bias value [eq]#o# for a polygon is
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\begin{aligned}
+o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\
+\text{where} &\quad \mathrm{dbclamp}(x) =
+\begin{cases}
+    x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\
+    \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\
+    \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\
+\end{cases}
+\end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+[eq]#m# is computed as described above.
+If the depth attachment uses a fixed-point representation, [eq]#m# is a
+function of depth values in the range [eq]#[0,1]#, and [eq]#o# is applied to
+depth values in the same range.
+
+Depth bias is applied to triangle topology primitives received by the
+rasterizer regardless of <<primsrast-polygonmode, polygon mode>>.
+Depth bias may: also be applied to line and point topology primitives
+received by the rasterizer.
+
+[open,refpage='vkCmdSetDepthBias',desc='Set depth bias factors and clamp dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth bias parameters,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthBias.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthBiasConstantFactor is a scalar factor controlling the
+    constant depth value added to each fragment.
+  * pname:depthBiasClamp is the maximum (or minimum) depth bias of a
+    fragment.
+  * pname:depthBiasSlopeFactor is a scalar factor applied to a fragment's
+    slope in depth bias calculations.
+
+This command sets the depth bias parameters for subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_DEPTH_BIAS
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the corresponding
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasConstantFactor,
+pname:depthBiasClamp, and pname:depthBiasSlopeFactor values used to create
+the currently active pipeline.
+
+ifdef::VK_EXT_depth_bias_control[]
+Calling this function is equivalent to calling fname:vkCmdSetDepthBias2EXT
+without a sname:VkDepthBiasRepresentationInfoEXT in the pNext chain of
+sname:VkDepthBiasInfoEXT.
+endif::VK_EXT_depth_bias_control[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthBias-depthBiasClamp-00790]]
+    If the <<features-depthBiasClamp, pname:depthBiasClamp>> feature is not
+    enabled, pname:depthBiasClamp must: be `0.0`
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBias.adoc[]
+--
+
+ifdef::VK_EXT_depth_bias_control[]
+[open,refpage='VkDepthBiasRepresentationInfoEXT',desc='Structure specifying depth bias parameters',type='structs']
+--
+:refpage: VkDepthBiasRepresentationInfoEXT
+
+The sname:VkDepthBiasRepresentationInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDepthBiasRepresentationInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:depthBiasRepresentation is a elink:VkDepthBiasRepresentationEXT
+    value specifying the depth bias representation.
+  * pname:depthBiasExact specifies that the implementation is not allowed to
+    scale the depth bias value to ensure a minimum resolvable distance.
+
+.Valid Usage
+****
+  * [[VUID-VkDepthBiasRepresentationInfoEXT-leastRepresentableValueForceUnormRepresentation-08947]]
+    If the <<features-leastRepresentableValueForceUnormRepresentation,
+    pname:leastRepresentableValueForceUnormRepresentation>> feature is not
+    enabled, pname:depthBiasRepresentation must: not be
+    `VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT`
+  * [[VUID-VkDepthBiasRepresentationInfoEXT-floatRepresentation-08948]]
+    If the <<features-floatRepresentation, pname:floatRepresentation>>
+    feature is not enabled, pname:depthBiasRepresentation must: not be
+    `VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT`
+  * [[VUID-VkDepthBiasRepresentationInfoEXT-depthBiasExact-08949]]
+    If the <<features-depthBiasExact, pname:depthBiasExact>> feature is not
+    enabled, pname:depthBiasExact must: be `VK_FALSE`
+****
+
+include::{generated}/validity/structs/VkDepthBiasRepresentationInfoEXT.adoc[]
+--
+
+[open,refpage='VkDepthBiasRepresentationEXT',desc='Specify the depth bias representation',type='enums']
+--
+Possible values of
+slink:VkDepthBiasRepresentationInfoEXT::pname:depthBiasRepresentation,
+specifying the depth bias representation are:
+
+include::{generated}/api/enums/VkDepthBiasRepresentationEXT.adoc[]
+
+  * ename:VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT
+    specifies that the depth bias representation is a factor of the format's
+    [eq]#r# as described in <<primsrast-depthbias-computation>>.
+  * ename:VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT
+    specifies that the depth bias representation is a factor of a constant
+    [eq]#r# defined by the bit-size or mantissa of the format as described
+    in <<primsrast-depthbias-computation>>.
+  * ename:VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT specifies that the depth
+    bias representation is a factor of constant [eq]#r# equal to 1.
+--
+
+[open,refpage='VkDepthBiasInfoEXT',desc='Structure specifying depth bias parameters',type='structs']
+--
+:refpage: VkDepthBiasInfoEXT
+
+The sname:VkDepthBiasInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDepthBiasInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:depthBiasConstantFactor is a scalar factor controlling the
+    constant depth value added to each fragment.
+  * pname:depthBiasClamp is the maximum (or minimum) depth bias of a
+    fragment.
+  * pname:depthBiasSlopeFactor is a scalar factor applied to a fragment's
+    slope in depth bias calculations.
+
+If pname:pNext does not contain a slink:VkDepthBiasRepresentationInfoEXT
+structure, then this command is equivalent to including a
+slink:VkDepthBiasRepresentationInfoEXT with pname:depthBiasExact set to
+ename:VK_FALSE and pname:depthBiasRepresentation set to
+ename:VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT.
+
+.Valid Usage
+****
+  * [[VUID-VkDepthBiasInfoEXT-depthBiasClamp-08950]]
+    If the <<features-depthBiasClamp, pname:depthBiasClamp>> feature is not
+    enabled, pname:depthBiasClamp must: be `0.0`
+****
+
+include::{generated}/validity/structs/VkDepthBiasInfoEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetDepthBias2EXT',desc='Set depth bias factors and clamp dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth bias parameters,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthBias2EXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pDepthBiasInfo is a pointer to a slink:VkDepthBiasInfoEXT
+    structure specifying depth bias parameters.
+
+This command is functionally identical to flink:vkCmdSetDepthBias, but
+includes extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+include::{generated}/validity/protos/vkCmdSetDepthBias2EXT.adoc[]
+--
+endif::VK_EXT_depth_bias_control[]
+
+ifdef::VK_EXT_conservative_rasterization[]
+[[primsrast-conservativeraster]]
+=== Conservative Rasterization
+
+[open,refpage='VkPipelineRasterizationConservativeStateCreateInfoEXT',desc='Structure specifying conservative raster state',type='structs']
+--
+If the pname:pNext chain of slink:VkPipelineRasterizationStateCreateInfo
+includes a sname:VkPipelineRasterizationConservativeStateCreateInfoEXT
+structure, then that structure includes parameters controlling conservative
+rasterization.
+
+sname:VkPipelineRasterizationConservativeStateCreateInfoEXT is defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationConservativeStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:conservativeRasterizationMode is the conservative rasterization
+    mode to use.
+  * pname:extraPrimitiveOverestimationSize is the extra size in pixels to
+    increase the generating primitive during conservative rasterization at
+    each of its edges in `X` and `Y` equally in screen space beyond the base
+    overestimation specified in
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:primitiveOverestimationSize.
+    If pname:conservativeRasterizationMode is not
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, this value is
+    ignored.
+
+If this structure is not included in the pname:pNext chain,
+pname:conservativeRasterizationMode is considered to be
+ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, and and conservative
+rasterization is disabled.
+
+Polygon rasterization can: be made conservative by setting
+pname:conservativeRasterizationMode to
+ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT or
+ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT in
+sname:VkPipelineRasterizationConservativeStateCreateInfoEXT.
+
+[NOTE]
+.Note
+====
+If <<limits-conservativePointAndLineRasterization,
+pname:conservativePointAndLineRasterization>> is supported, conservative
+rasterization can be applied to line and point primitives, otherwise it must
+be disabled.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769]]
+    pname:extraPrimitiveOverestimationSize must: be in the range of `0.0` to
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:maxExtraPrimitiveOverestimationSize
+    inclusive
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationConservativeStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkPipelineRasterizationConservativeStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationConservativeStateCreateFlagsEXT.adoc[]
+
+tname:VkPipelineRasterizationConservativeStateCreateFlagsEXT is a bitmask
+type for setting a mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkConservativeRasterizationModeEXT',desc='Specify the conservative rasterization mode',type='enums']
+--
+Possible values of
+slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode,
+specifying the conservative rasterization mode are:
+
+include::{generated}/api/enums/VkConservativeRasterizationModeEXT.adoc[]
+
+  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT specifies that
+    conservative rasterization is disabled and rasterization proceeds as
+    normal.
+  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT specifies that
+    conservative rasterization is enabled in overestimation mode.
+  * ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT specifies
+    that conservative rasterization is enabled in underestimation mode.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetConservativeRasterizationModeEXT',desc='Specify the conservative rasterization mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:conservativeRasterizationMode, call:
+
+include::{generated}/api/protos/vkCmdSetConservativeRasterizationModeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:conservativeRasterizationMode specifies the
+    pname:conservativeRasterizationMode state.
+
+This command sets the pname:conservativeRasterizationMode state for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:conservativeRasterizationMode
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetConservativeRasterizationModeEXT
+:requiredfeature: extendedDynamicState3ConservativeRasterizationMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetConservativeRasterizationModeEXT.adoc[]
+--
+
+[open,refpage='vkCmdSetExtraPrimitiveOverestimationSizeEXT',desc='Specify the conservative rasterization extra primitive overestimation size dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:extraPrimitiveOverestimationSize, call:
+
+include::{generated}/api/protos/vkCmdSetExtraPrimitiveOverestimationSizeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:extraPrimitiveOverestimationSize specifies the
+    pname:extraPrimitiveOverestimationSize.
+
+This command sets the pname:extraPrimitiveOverestimationSize for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationConservativeStateCreateInfoEXT::pname:extraPrimitiveOverestimationSize
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetExtraPrimitiveOverestimationSizeEXT
+:requiredfeature: extendedDynamicState3ExtraPrimitiveOverestimationSize
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-extraPrimitiveOverestimationSize-07428]]
+    pname:extraPrimitiveOverestimationSize must: be in the range of `0.0` to
+    sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:maxExtraPrimitiveOverestimationSize
+    inclusive
+****
+
+include::{generated}/validity/protos/vkCmdSetExtraPrimitiveOverestimationSizeEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+When overestimate conservative rasterization is enabled, rather than
+evaluating coverage at individual sample locations, a determination is made
+whether any portion of the pixel (including its edges and corners) is
+covered by the primitive.
+If any portion of the pixel is covered, then all bits of the
+<<primsrast-multisampling-coverage-mask, coverage mask>> for the fragment
+corresponding to that pixel are enabled.
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment and any bit of the
+<<primsrast-multisampling-coverage-mask, coverage mask>> for the fragment is
+enabled, then all bits of the <<primsrast-multisampling-coverage-mask,
+coverage mask>> for the fragment are enabled.
+endif::VK_EXT_fragment_density_map[]
+
+For the purposes of evaluating which pixels are covered by the primitive,
+implementations can: increase the size of the primitive by up to
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:primitiveOverestimationSize
+pixels at each of the primitive edges.
+This may: increase the number of fragments generated by this primitive and
+represents an overestimation of the pixel coverage.
+
+This overestimation size can be increased further by setting the
+pname:extraPrimitiveOverestimationSize value above `0.0` in steps of
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:extraPrimitiveOverestimationSizeGranularity
+up to and including
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:extraPrimitiveOverestimationSize.
+This may: further increase the number of fragments generated by this
+primitive.
+
+The actual precision of the overestimation size used for conservative
+rasterization may: vary between implementations and produce results that
+only approximate the pname:primitiveOverestimationSize and
+pname:extraPrimitiveOverestimationSizeGranularity properties.
+ifdef::VK_EXT_fragment_density_map[]
+Implementations may: especially vary these approximations when the render
+pass has a fragment density map and the fragment area covers multiple
+pixels.
+endif::VK_EXT_fragment_density_map[]
+
+For triangles if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
+is enabled, fragments will be generated if the primitive area covers any
+portion of any pixel inside the fragment area, including their edges or
+corners.
+The tie-breaking rule described in <<primsrast-polygons-basic, Basic Polygon
+Rasterization>> does not apply during conservative rasterization and
+coverage is set for all fragments generated from shared edges of polygons.
+Degenerate triangles that evaluate to zero area after rasterization, even
+for pixels containing a vertex or edge of the zero-area polygon, will be
+culled if
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:degenerateTrianglesRasterized
+is ename:VK_FALSE or will generate fragments if
+pname:degenerateTrianglesRasterized is ename:VK_TRUE.
+The fragment input values for these degenerate triangles take their
+attribute and depth values from the provoking vertex.
+Degenerate triangles are considered backfacing and the application can:
+enable backface culling if desired.
+Triangles that are zero area before rasterization may: be culled regardless.
+
+For lines if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT is
+enabled, and the implementation sets
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
+to ename:VK_TRUE, fragments will be generated if the line covers any portion
+of any pixel inside the fragment area, including their edges or corners.
+Degenerate lines that evaluate to zero length after rasterization will be
+culled if
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:degenerateLinesRasterized
+is ename:VK_FALSE or will generate fragments if
+pname:degenerateLinesRasterized is ename:VK_TRUE.
+The fragments input values for these degenerate lines take their attribute
+and depth values from the provoking vertex.
+Lines that are zero length before rasterization may: be culled regardless.
+
+For points if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT is
+enabled, and the implementation sets
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
+to ename:VK_TRUE, fragments will be generated if the point square covers any
+portion of any pixel inside the fragment area, including their edges or
+corners.
+
+When underestimate conservative rasterization is enabled, rather than
+evaluating coverage at individual sample locations, a determination is made
+whether all of the pixel (including its edges and corners) is covered by the
+primitive.
+If the entire pixel is covered, then a fragment is generated with all bits
+of its <<primsrast-multisampling-coverage-mask, coverage mask>>
+corresponding to the pixel enabled, otherwise the pixel is not considered
+covered even if some portion of the pixel is covered.
+The fragment is discarded if no pixels inside the fragment area are
+considered covered.
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map attachment and any pixel
+inside the fragment area is not considered covered, then the fragment is
+discarded even if some pixels are considered covered.
+endif::VK_EXT_fragment_density_map[]
+
+For triangles, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
+is enabled, fragments will only be generated if any pixel inside the
+fragment area is fully covered by the generating primitive, including its
+edges and corners.
+
+For lines, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is
+enabled, fragments will be generated if any pixel inside the fragment area,
+including its edges and corners, are entirely covered by the line.
+
+For points, if ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is
+enabled, fragments will only be generated if the point square covers the
+entirety of any pixel square inside the fragment area, including its edges
+or corners.
+
+ifdef::VK_EXT_fragment_density_map[]
+If the render pass has a fragment density map and
+ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT is enabled,
+fragments will only be generated if the entirety of all pixels inside the
+fragment area are covered by the generating primitive, line, or point.
+endif::VK_EXT_fragment_density_map[]
+
+For both overestimate and underestimate conservative rasterization modes a
+fragment has all of its pixel squares fully covered by the generating
+primitive must: set code:FullyCoveredEXT to ename:VK_TRUE if the
+implementation enables the
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:fullyCoveredFragmentShaderInputVariable
+feature.
+
+ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+When
+ifdef::VK_NV_shading_rate_image[]
+the use of a <<primsrast-shading-rate-image, shading rate image>>
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_NV_shading_rate_image+VK_KHR_fragment_shading_rate[or]
+ifdef::VK_KHR_fragment_shading_rate[]
+setting the <<primsrast-fragment-shading-rate, fragment shading rate>>
+endif::VK_KHR_fragment_shading_rate[]
+results in fragments covering multiple pixels, coverage for conservative
+rasterization is still evaluated on a per-pixel basis and may result in
+fragments with partial coverage.
+For fragment shader inputs decorated with code:FullyCoveredEXT, a fragment
+is considered fully covered if and only if all pixels in the fragment are
+fully covered by the generating primitive.
+endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+
+endif::VK_EXT_conservative_rasterization[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/queries.adoc b/codegen/vulkan/vulkan-docs-next/chapters/queries.adoc
new file mode 100644
index 0000000..a1f967a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/queries.adoc
@@ -0,0 +1,2257 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[queries]]
+= Queries
+
+_Queries_ provide a mechanism to return information about the processing of
+a sequence of Vulkan commands.
+Query operations are asynchronous, and as such, their results are not
+returned immediately.
+Instead, their results, and their availability status are stored in a
+<<queries-pools, Query Pool>>.
+The state of these queries can: be read back on the host, or copied to a
+buffer object on the device.
+
+The supported query types are <<queries-occlusion,Occlusion Queries>>,
+<<queries-pipestats,Pipeline Statistics Queries>>,
+ifdef::VK_KHR_video_queue[]
+<<queries-result-status-only, Result Status Queries>>,
+endif::VK_KHR_video_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+<<queries-video-encode-feedback, Video Encode Feedback Queries>>
+endif::VK_KHR_video_encode_queue[]
+and <<queries-timestamps, Timestamp Queries>>.
+ifdef::VK_KHR_performance_query[]
+<<queries-performance, Performance Queries>> are supported if the associated
+extension is available.
+endif::VK_KHR_performance_query[]
+ifdef::VK_EXT_transform_feedback[]
+<<queries-transform-feedback, Transform Feedback Queries>> are supported if
+the associated extension is available.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_INTEL_performance_query[]
+<<queries-performance-intel>> are supported if the associated extension is
+available.
+endif::VK_INTEL_performance_query[]
+ifdef::VK_EXT_mesh_shader[]
+<<queries-mesh-shader, Mesh Shader Queries>> are supported if the associated
+extension is available.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+Several additional queries with specific purposes associated with ray
+tracing are available if the corresponding extensions are supported, as
+described for elink:VkQueryType.
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+
+
+[[queries-pools]]
+== Query Pools
+
+[open,refpage='VkQueryPool',desc='Opaque handle to a query pool object',type='handles']
+--
+Queries are managed using _query pool_ objects.
+Each query pool is a collection of a specific number of queries of a
+particular type.
+
+Query pools are represented by sname:VkQueryPool handles:
+
+include::{generated}/api/handles/VkQueryPool.adoc[]
+--
+
+[open,refpage='vkCreateQueryPool',desc='Create a new query pool object',type='protos']
+--
+:refpage: vkCreateQueryPool
+:objectnameplural: query pools
+:objectnamecamelcase: queryPool
+:objectcount: 1
+
+To create a query pool, call:
+
+include::{generated}/api/protos/vkCreateQueryPool.adoc[]
+
+  * pname:device is the logical device that creates the query pool.
+  * pname:pCreateInfo is a pointer to a slink:VkQueryPoolCreateInfo
+    structure containing the number and type of queries to be managed by the
+    pool.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pQueryPool is a pointer to a slink:VkQueryPool handle in which the
+    resulting query pool object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateQueryPool.adoc[]
+--
+
+[open,refpage='VkQueryPoolCreateInfo',desc='Structure specifying parameters of a newly created query pool',type='structs']
+--
+The sname:VkQueryPoolCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkQueryPoolCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:queryType is a elink:VkQueryType value specifying the type of
+    queries managed by the pool.
+  * pname:queryCount is the number of queries managed by the pool.
+  * pname:pipelineStatistics is a bitmask of
+    elink:VkQueryPipelineStatisticFlagBits specifying which counters will be
+    returned in queries on the new pool, as described below in
+    <<queries-pipestats>>.
+
+pname:pipelineStatistics is ignored if pname:queryType is not
+ename:VK_QUERY_TYPE_PIPELINE_STATISTICS.
+
+.Valid Usage
+****
+  * [[VUID-VkQueryPoolCreateInfo-queryType-00791]]
+    If the <<features-pipelineStatisticsQuery,
+    pname:pipelineStatisticsQuery>> feature is not enabled, pname:queryType
+    must: not be ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-VkQueryPoolCreateInfo-meshShaderQueries-07068]]
+    If the <<features-meshShaderQueries, pname:meshShaderQueries>> feature
+    is not enabled, pname:queryType must: not be
+    ename:VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT
+  * [[VUID-VkQueryPoolCreateInfo-meshShaderQueries-07069]]
+    If the <<features-meshShaderQueries, pname:meshShaderQueries>> feature
+    is not enabled, and pname:queryType is
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS, pname:pipelineStatistics must:
+    not contain
+    ename:VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT or
+    ename:VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT
+endif::VK_EXT_mesh_shader[]
+  * [[VUID-VkQueryPoolCreateInfo-queryType-00792]]
+    If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS,
+    pname:pipelineStatistics must: be a valid combination of
+    elink:VkQueryPipelineStatisticFlagBits values
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-VkQueryPoolCreateInfo-queryType-03222]]
+    If pname:queryType is ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the
+    pname:pNext chain must: include a
+    slink:VkQueryPoolPerformanceCreateInfoKHR structure
+endif::VK_KHR_performance_query[]
+  * [[VUID-VkQueryPoolCreateInfo-queryCount-02763]]
+    pname:queryCount must: be greater than 0
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkQueryPoolCreateInfo-queryType-05046]]
+    If pname:queryType is ename:VK_QUERY_TYPE_OCCLUSION then
+    pname:queryCount must: be less than or equal to the maximum of all
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxOcclusionQueriesPerPool
+    values specified when pname:device was created
+  * [[VUID-VkQueryPoolCreateInfo-queryType-05047]]
+    If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS then
+    pname:queryCount must: be less than or equal to the maximum of all
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxPipelineStatisticsQueriesPerPool
+    values specified when pname:device was created
+  * [[VUID-VkQueryPoolCreateInfo-queryType-05048]]
+    If pname:queryType is ename:VK_QUERY_TYPE_TIMESTAMP then
+    pname:queryCount must: be less than or equal to the maximum of all
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxTimestampQueriesPerPool
+    values specified when pname:device was created
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-VkQueryPoolCreateInfo-queryType-05049]]
+    If pname:queryType is ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR then
+    pname:queryCount must: be less than or equal to the maximum of all
+    slink:VkPerformanceQueryReservationInfoKHR::pname:maxPerformanceQueriesPerPool
+    values specified when pname:device was created
+endif::VK_KHR_performance_query[]
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkQueryPoolCreateInfo-queryType-07133]]
+    If pname:queryType is ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR,
+    then the pname:pNext chain must: include a slink:VkVideoProfileInfoKHR
+    structure with pname:videoCodecOperation specifying an encode operation
+  * [[VUID-VkQueryPoolCreateInfo-queryType-07906]]
+    If pname:queryType is ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR,
+    then the pname:pNext chain must: include a
+    slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR structure
+  * [[VUID-VkQueryPoolCreateInfo-queryType-07907]]
+    If pname:queryType is ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, and
+    the pname:pNext chain includes a slink:VkVideoProfileInfoKHR structure
+    and a slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR structure, then
+    slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR::pname:encodeFeedbackFlags
+    must: not contain any bits that are not set in
+    slink:VkVideoEncodeCapabilitiesKHR::pname:supportedEncodeFeedbackFlags,
+    as returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the
+    <<video-profiles,video profile>> described by
+    slink:VkVideoProfileInfoKHR and its pname:pNext chain
+endif::VK_KHR_video_encode_queue[]
+****
+
+include::{generated}/validity/structs/VkQueryPoolCreateInfo.adoc[]
+--
+
+[open,refpage='VkQueryPoolCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkQueryPoolCreateFlags.adoc[]
+
+tname:VkQueryPoolCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_KHR_performance_query[]
+include::{chapters}/VK_KHR_performance_query/querycreateinfo.adoc[]
+endif::VK_KHR_performance_query[]
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+  * fname:vkDestroyQueryPool <<SCID-4>>
+// end::scremoved[]
+endif::hidden[]
+
+Query pools cannot: be destroyed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, the memory is returned to the system when the device is
+destroyed.
+
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+
+[open,refpage='vkDestroyQueryPool',desc='Destroy a query pool object',type='protos']
+--
+To destroy a query pool, call:
+
+include::{generated}/api/protos/vkDestroyQueryPool.adoc[]
+
+  * pname:device is the logical device that destroys the query pool.
+  * pname:queryPool is the query pool to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyQueryPool-queryPool-00793]]
+    All submitted commands that refer to pname:queryPool must: have
+    completed execution
+  * [[VUID-vkDestroyQueryPool-queryPool-00794]]
+    If sname:VkAllocationCallbacks were provided when pname:queryPool was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyQueryPool-queryPool-00795]]
+    If no sname:VkAllocationCallbacks were provided when pname:queryPool was
+    created, pname:pAllocator must: be `NULL`
+****
+
+[NOTE]
+.Note
+====
+Applications can: verify that pname:queryPool can: be destroyed by checking
+that fname:vkGetQueryPoolResults() without the
+ename:VK_QUERY_RESULT_PARTIAL_BIT flag returns ename:VK_SUCCESS for all
+queries that are used in command buffers submitted for execution.
+====
+
+include::{generated}/validity/protos/vkDestroyQueryPool.adoc[]
+--
+
+endif::VKSC_VERSION_1_0[]
+
+[open,refpage='VkQueryType',desc='Specify the type of queries managed by a query pool',type='enums']
+--
+Possible values of slink:VkQueryPoolCreateInfo::pname:queryType, specifying
+the type of queries managed by the pool, are:
+
+include::{generated}/api/enums/VkQueryType.adoc[]
+
+  * ename:VK_QUERY_TYPE_OCCLUSION specifies an <<queries-occlusion,
+    occlusion query>>.
+  * ename:VK_QUERY_TYPE_PIPELINE_STATISTICS specifies a <<queries-pipestats,
+    pipeline statistics query>>.
+  * ename:VK_QUERY_TYPE_TIMESTAMP specifies a <<queries-timestamps,
+    timestamp query>>.
+ifdef::VK_KHR_performance_query[]
+  * ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR specifies a
+    <<queries-performance, performance query>>.
+endif::VK_KHR_performance_query[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT specifies a
+    <<queries-transform-feedback, transform feedback query>>.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_primitives_generated_query[]
+  * ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT specifies a
+    <<queries-primitives-generated, primitives generated query>>.
+endif::VK_EXT_primitives_generated_query[]
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR specifies
+    a <<acceleration-structure-copying, acceleration structure size query>>
+    for use with flink:vkCmdWriteAccelerationStructuresPropertiesKHR or
+    flink:vkWriteAccelerationStructuresPropertiesKHR.
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+    specifies a <<acceleration-structure-copying, serialization acceleration
+    structure size query>>.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR specifies an
+    <<acceleration-structure-copying, acceleration structure size query>>
+    for use with flink:vkCmdWriteAccelerationStructuresPropertiesKHR or
+    flink:vkWriteAccelerationStructuresPropertiesKHR.
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
+    specifies a <<serialized-as-header, serialization acceleration structure
+    pointer count query>>.
+endif::VK_KHR_ray_tracing_maintenance1[]
+ifdef::VK_NV_ray_tracing[]
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV specifies
+    an <<acceleration-structure-copying, acceleration structure size query>>
+    for use with flink:vkCmdWriteAccelerationStructuresPropertiesNV.
+endif::VK_NV_ray_tracing[]
+ifdef::VK_INTEL_performance_query[]
+  * ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL specifies a
+    <<queries-performance-intel, Intel performance query>>.
+endif::VK_INTEL_performance_query[]
+ifdef::VK_KHR_video_queue[]
+  * ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR specifies a
+    <<queries-result-status-only, result status query>>.
+endif::VK_KHR_video_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR specifies a
+    <<queries-video-encode-feedback, video encode feedback query>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_mesh_shader[]
+  * ename:VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT specifies a
+    <<queries-mesh-shader, generated mesh primitives query>>.
+endif::VK_EXT_mesh_shader[]
+--
+
+
+[[queries-operation]]
+== Query Operation
+
+The operation of queries is controlled by the commands
+flink:vkCmdBeginQuery, flink:vkCmdEndQuery,
+ifdef::VK_EXT_transform_feedback[]
+flink:vkCmdBeginQueryIndexedEXT, flink:vkCmdEndQueryIndexedEXT,
+endif::VK_EXT_transform_feedback[]
+flink:vkCmdResetQueryPool, flink:vkCmdCopyQueryPoolResults,
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkCmdWriteTimestamp2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+and flink:vkCmdWriteTimestamp.
+
+In order for a sname:VkCommandBuffer to record query management commands,
+the queue family for which its sname:VkCommandPool was created must: support
+the appropriate type of operations (graphics, compute) suitable for the
+query type of a given query pool.
+
+Each query in a query pool has a status that is either _unavailable_ or
+_available_, and also has state to store the numerical results of a query
+operation of the type requested when the query pool was created.
+Resetting a query via flink:vkCmdResetQueryPool
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+or flink:vkResetQueryPool
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+sets the status to unavailable and makes the numerical results undefined:.
+A query is made available by the operation of flink:vkCmdEndQuery,
+ifdef::VK_EXT_transform_feedback[]
+flink:vkCmdEndQueryIndexedEXT,
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkCmdWriteTimestamp2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+or flink:vkCmdWriteTimestamp.
+Both the availability status and numerical results can: be retrieved by
+calling either flink:vkGetQueryPoolResults or
+flink:vkCmdCopyQueryPoolResults.
+
+After query pool creation, each query is in an uninitialized state and must:
+be reset before it is used.
+Queries must: also be reset between uses.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+
+If a logical device includes multiple physical devices, then each command
+that writes a query must: execute on a single physical device, and any call
+to flink:vkCmdBeginQuery must: execute the corresponding flink:vkCmdEndQuery
+command on the same physical device.
+
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[open,refpage='vkCmdResetQueryPool',desc='Reset queries in a query pool',type='protos']
+--
+To reset a range of queries in a query pool on a queue, call:
+
+include::{generated}/api/protos/vkCmdResetQueryPool.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the handle of the query pool managing the queries
+    being reset.
+  * pname:firstQuery is the initial query index to reset.
+  * pname:queryCount is the number of queries to reset.
+
+When executed on a queue, this command sets the status of query indices
+[eq]#[pname:firstQuery, pname:firstQuery {plus} pname:queryCount - 1]# to
+unavailable.
+
+This command defines an execution dependency between other query commands
+that reference the same query.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:firstQuery and pname:queryCount that occur earlier in
+<<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:firstQuery and pname:queryCount that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The operation of this command happens after the first scope and happens
+before the second scope.
+
+ifdef::VK_KHR_performance_query[]
+If the pname:queryType used to create pname:queryPool was
+ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command sets the status of
+query indices [eq]#[pname:firstQuery, pname:firstQuery {plus}
+pname:queryCount - 1]# to unavailable for each pass of pname:queryPool, as
+indicated by a call to
+flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
+
+[NOTE]
+.Note
+====
+Because fname:vkCmdResetQueryPool resets all the passes of the indicated
+queries, applications must not record a fname:vkCmdResetQueryPool command
+for a pname:queryPool created with ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR
+in a command buffer that needs to be submitted multiple times as indicated
+by a call to flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
+Otherwise applications will never be able to complete the recorded queries.
+====
+endif::VK_KHR_performance_query[]
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdResetQueryPool-firstQuery-00796]]
+    pname:firstQuery must: be less than the number of queries in
+    pname:queryPool
+  * [[VUID-vkCmdResetQueryPool-firstQuery-00797]]
+    The sum of pname:firstQuery and pname:queryCount must: be less than or
+    equal to the number of queries in pname:queryPool
+  * [[VUID-vkCmdResetQueryPool-None-02841]]
+    All queries used by the command must: not be active
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkCmdResetQueryPool-firstQuery-02862]]
+    If pname:queryPool was created with
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must: not be
+    recorded in a command buffer that, either directly or through secondary
+    command buffers, also contains begin commands for a query from the set
+    of queries [eq]#[pname:firstQuery, pname:firstQuery {plus}
+    pname:queryCount - 1]#
+endif::VK_KHR_performance_query[]
+****
+
+include::{generated}/validity/protos/vkCmdResetQueryPool.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+[open,refpage='vkResetQueryPool',desc='Reset queries in a query pool',type='protos',alias='vkResetQueryPoolEXT']
+--
+To reset a range of queries in a query pool on the host, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkResetQueryPool.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_EXT_host_query_reset[or the equivalent command]
+
+ifdef::VK_EXT_host_query_reset[]
+include::{generated}/api/protos/vkResetQueryPoolEXT.adoc[]
+endif::VK_EXT_host_query_reset[]
+
+  * pname:device is the logical device that owns the query pool.
+  * pname:queryPool is the handle of the query pool managing the queries
+    being reset.
+  * pname:firstQuery is the initial query index to reset.
+  * pname:queryCount is the number of queries to reset.
+
+This command sets the status of query indices [eq]#[pname:firstQuery,
+pname:firstQuery {plus} pname:queryCount - 1]# to unavailable.
+
+ifdef::VK_KHR_performance_query[]
+If pname:queryPool is ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR this command
+sets the status of query indices [eq]#[pname:firstQuery, pname:firstQuery
+{plus} pname:queryCount - 1]# to unavailable for each pass.
+endif::VK_KHR_performance_query[]
+
+.Valid Usage
+****
+  * [[VUID-vkResetQueryPool-None-02665]]
+    The <<features-hostQueryReset, pname:hostQueryReset>> feature must: be
+    enabled
+  * [[VUID-vkResetQueryPool-firstQuery-02666]]
+    pname:firstQuery must: be less than the number of queries in
+    pname:queryPool
+  * [[VUID-vkResetQueryPool-firstQuery-02667]]
+    The sum of pname:firstQuery and pname:queryCount must: be less than or
+    equal to the number of queries in pname:queryPool
+  * [[VUID-vkResetQueryPool-firstQuery-02741]]
+    Submitted commands that refer to the range specified by pname:firstQuery
+    and pname:queryCount in pname:queryPool must: have completed execution
+  * [[VUID-vkResetQueryPool-firstQuery-02742]]
+    The range of queries specified by pname:firstQuery and pname:queryCount
+    in pname:queryPool must: not be in use by calls to
+    flink:vkGetQueryPoolResults or fname:vkResetQueryPool in other threads
+****
+
+include::{generated}/validity/protos/vkResetQueryPool.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+
+Once queries are reset and ready for use, query commands can: be issued to a
+command buffer.
+Occlusion queries and pipeline statistics queries count events - drawn
+samples and pipeline stage invocations, respectively - resulting from
+commands that are recorded between a flink:vkCmdBeginQuery command and a
+flink:vkCmdEndQuery command within a specified command buffer, effectively
+scoping a set of drawing and/or dispatching commands.
+Timestamp queries write timestamps to a query pool.
+ifdef::VK_KHR_performance_query[]
+Performance queries record performance counters to a query pool.
+endif::VK_KHR_performance_query[]
+
+A query must: begin and end in the same command buffer, although if it is a
+primary command buffer, and the <<features-inheritedQueries,
+pname:inheritedQueries>> feature is enabled, it can: execute secondary
+command buffers during the query operation.
+For a secondary command buffer to be executed while a query is active, it
+must: set the pname:occlusionQueryEnable, pname:queryFlags, and/or
+pname:pipelineStatistics members of slink:VkCommandBufferInheritanceInfo to
+conservative values, as described in the <<commandbuffers-recording, Command
+Buffer Recording>> section.
+A query must: either begin and end inside the same subpass of a render pass
+instance, or must: both begin and end outside of a render pass instance
+(i.e. contain entire render pass instances).
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+If queries are used while executing a render pass instance that has
+multiview enabled, the query uses [eq]#N# consecutive query indices in the
+query pool (starting at pname:query) where [eq]#N# is the number of bits set
+in the view mask in the subpass the query is used in.
+How the numerical results of the query are distributed among the queries is
+implementation-dependent.
+For example, some implementations may: write each view's results to a
+distinct query, while other implementations may: write the total result to
+the first query and write zero to the other queries.
+However, the sum of the results in all the queries must: accurately reflect
+the total result of the query summed over all views.
+Applications can: sum the results from all the queries to compute the total
+result.
+
+Queries used with multiview rendering must: not span subpasses, i.e. they
+must: begin and end in the same subpass.
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_KHR_video_queue[]
+A query must: either begin and end inside the same video coding scope, or
+must: both begin and end outside of a video coding scope and must: not
+contain entire video coding scopes.
+endif::VK_KHR_video_queue[]
+
+[open,refpage='vkCmdBeginQuery',desc='Begin a query',type='protos',xrefs='vkCmdEndQuery vkCmdBeginQueryIndexedEXT vkCmdEndQueryIndexedEXT']
+--
+:refpage: vkCmdBeginQuery
+
+To begin a query, call:
+
+include::{generated}/api/protos/vkCmdBeginQuery.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the query pool that will manage the results of the
+    query.
+  * pname:query is the query index within the query pool that will contain
+    the results.
+  * pname:flags is a bitmask of elink:VkQueryControlFlagBits specifying
+    constraints on the types of queries that can: be performed.
+
+If the pname:queryType of the pool is ename:VK_QUERY_TYPE_OCCLUSION and
+pname:flags contains ename:VK_QUERY_CONTROL_PRECISE_BIT, an implementation
+must: return a result that matches the actual number of samples passed.
+This is described in more detail in <<queries-occlusion,Occlusion Queries>>.
+
+ifdef::VK_EXT_transform_feedback[]
+Calling fname:vkCmdBeginQuery is equivalent to calling
+flink:vkCmdBeginQueryIndexedEXT with the pname:index parameter set to zero.
+endif::VK_EXT_transform_feedback[]
+
+[[queries-operation-active]]
+After beginning a query, that query is considered _active_ within the
+command buffer it was called in until that same query is ended.
+Queries active in a primary command buffer when secondary command buffers
+are executed are considered active for those secondary command buffers.
+
+ifdef::VK_KHR_video_queue[]
+Furthermore, if the query is started within a video coding scope, the
+following command buffer states are initialized for the query type:
+
+  * [[queries-operation-active-query-index]] The _active_query_index_ is set
+    to the value specified by pname:query.
+  * [[queries-operation-last-activatable-query-index]] The _last activatable
+    query index_ is also set to the value specified by pname:query.
+
+Each <<video-coding,video coding operation>> stores a result to the query
+corresponding to the current active query index, followed by incrementing
+the active query index.
+If the active query index gets incremented past the last activatable query
+index, issuing any further video coding operations results in undefined:
+behavior.
+
+[NOTE]
+.Note
+====
+In practice, this means that currently no more than a single video coding
+operation must: be issued between a begin and end query pair.
+====
+
+endif::VK_KHR_video_queue[]
+
+This command defines an execution dependency between other query commands
+that reference the same query.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur earlier in
+<<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The operation of this command happens after the first scope and happens
+before the second scope.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/query_begin_common.adoc[]
+  * [[VUID-vkCmdBeginQuery-queryPool-01922]]
+    pname:queryPool must: have been created with a pname:queryType that
+    differs from that of any queries that are
+    <<queries-operation-active,active>> within pname:commandBuffer
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBeginQuery-queryType-07070]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdBeginQuery-queryType-02327]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+  * [[VUID-vkCmdBeginQuery-queryType-02328]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackQueries
+    must: be supported
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_primitives_generated_query[]
+  * [[VUID-vkCmdBeginQuery-queryType-06687]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the sname:VkCommandPool
+    that pname:commandBuffer was allocated from must: support graphics
+    operations
+  * [[VUID-vkCmdBeginQuery-queryType-06688]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT then
+    <<features-primitivesGeneratedQuery, pname:primitivesGeneratedQuery>>
+    must: be enabled
+endif::VK_EXT_primitives_generated_query[]
+include::{chapters}/commonvalidity/performance_query_begin_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginQuery.adoc[]
+--
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='vkCmdBeginQueryIndexedEXT',desc='Begin an indexed query',type='protos',xrefs='vkCmdBeginQuery vkCmdEndQuery vkCmdEndQueryIndexedEXT']
+--
+:refpage: vkCmdBeginQueryIndexedEXT
+
+To begin an indexed query, call:
+
+include::{generated}/api/protos/vkCmdBeginQueryIndexedEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the query pool that will manage the results of the
+    query.
+  * pname:query is the query index within the query pool that will contain
+    the results.
+  * pname:flags is a bitmask of elink:VkQueryControlFlagBits specifying
+    constraints on the types of queries that can: be performed.
+  * pname:index is the query type specific index.
+    When the query type is ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+ifdef::VK_EXT_primitives_generated_query[]
+    or ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
+endif::VK_EXT_primitives_generated_query[]
+    the index represents the vertex stream.
+
+The fname:vkCmdBeginQueryIndexedEXT command operates the same as the
+flink:vkCmdBeginQuery command, except that it also accepts a query type
+specific pname:index parameter.
+
+This command defines an execution dependency between other query commands
+that reference the same query index.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query and pname:index that occur earlier in
+<<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query and pname:index that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The operation of this command happens after the first scope and happens
+before the second scope.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/query_begin_common.adoc[]
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryPool-04753]]
+    If the pname:queryPool was created with the same pname:queryType as that
+    of another <<queries-operation-active,active>> query within
+    pname:commandBuffer, then pname:index must: not match the index used for
+    the active query
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02338]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support graphics operations
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02339]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index
+    parameter must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-06692]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+ifdef::VK_EXT_primitives_generated_query[]
+    and not ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
+endif::VK_EXT_primitives_generated_query[]
+    the pname:index must: be zero
+ifdef::VK_EXT_primitives_generated_query[]
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-06689]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the sname:VkCommandPool
+    that pname:commandBuffer was allocated from must: support graphics
+    operations
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-06690]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the pname:index parameter
+    must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-06691]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT and the
+    <<features-primitivesGeneratedQueryWithNonZeroStreams,
+    pname:primitivesGeneratedQueryWithNonZeroStreams>> feature is not
+    enabled, the pname:index parameter must: be zero
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-06693]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT then
+    <<features-primitivesGeneratedQuery, pname:primitivesGeneratedQuery>>
+    must: be enabled
+endif::VK_EXT_primitives_generated_query[]
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-02341]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackQueries
+    must: be supported
+ifdef::VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBeginQueryIndexedEXT-queryType-07071]]
+    The pname:queryType used to create pname:queryPool must: not be
+    ename:VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT
+endif::VK_EXT_mesh_shader[]
+include::{chapters}/commonvalidity/performance_query_begin_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginQueryIndexedEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+[open,refpage='VkQueryControlFlagBits',desc='Bitmask specifying constraints on a query',type='enums']
+--
+Bits which can: be set in flink:vkCmdBeginQuery::pname:flags, specifying
+constraints on the types of queries that can: be performed, are:
+
+include::{generated}/api/enums/VkQueryControlFlagBits.adoc[]
+
+  * ename:VK_QUERY_CONTROL_PRECISE_BIT specifies the precision of
+    <<queries-occlusion, occlusion queries>>.
+--
+
+[open,refpage='VkQueryControlFlags',desc='Bitmask of VkQueryControlFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkQueryControlFlags.adoc[]
+
+tname:VkQueryControlFlags is a bitmask type for setting a mask of zero or
+more elink:VkQueryControlFlagBits.
+--
+
+[open,refpage='vkCmdEndQuery',desc='Ends a query',type='protos',xrefs='vkCmdBeginQuery vkCmdBeginQueryIndexedEXT vkCmdEndQueryIndexedEXT']
+--
+:refpage: vkCmdEndQuery
+
+To end a query after the set of desired drawing or dispatching commands is
+executed, call:
+
+include::{generated}/api/protos/vkCmdEndQuery.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the query pool that is managing the results of the
+    query.
+  * pname:query is the query index within the query pool where the result is
+    stored.
+
+The command completes the query in pname:queryPool identified by
+pname:query, and marks it as available.
+
+This command defines an execution dependency between other query commands
+that reference the same query.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur earlier in
+<<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the operation of this command.
+
+ifdef::VK_EXT_transform_feedback[]
+Calling fname:vkCmdEndQuery is equivalent to calling
+flink:vkCmdEndQueryIndexedEXT with the pname:index parameter set to zero.
+endif::VK_EXT_transform_feedback[]
+
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndQuery-None-01923]]
+    All queries used by the command must: be
+    <<queries-operation-active,active>>
+  * [[VUID-vkCmdEndQuery-query-00810]]
+    pname:query must: be less than the number of queries in pname:queryPool
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdEndQuery-commandBuffer-01886]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdEndQuery-query-00812]]
+    If fname:vkCmdEndQuery is called within a render pass instance, the sum
+    of pname:query and the number of bits set in the current subpass's view
+    mask must: be less than or equal to the number of queries in
+    pname:queryPool
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkCmdEndQuery-queryPool-03227]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the
+    counters used to create pname:queryPool was
+    ename:VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the
+    flink:vkCmdEndQuery must: be the last recorded command in
+    pname:commandBuffer
+  * [[VUID-vkCmdEndQuery-queryPool-03228]]
+    If pname:queryPool was created with a pname:queryType of
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the
+    counters used to create pname:queryPool was
+    ename:VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the
+    flink:vkCmdEndQuery must: not be recorded within a render pass instance
+endif::VK_KHR_performance_query[]
+include::{chapters}/commonvalidity/query_end_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdEndQuery.adoc[]
+--
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='vkCmdEndQueryIndexedEXT',desc='Ends a query',type='protos',xrefs='vkCmdBeginQuery vkCmdEndQuery vkCmdBeginQueryIndexedEXT']
+--
+:refpage: vkCmdEndQueryIndexedEXT
+
+To end an indexed query after the set of desired drawing or dispatching
+commands is recorded, call:
+
+include::{generated}/api/protos/vkCmdEndQueryIndexedEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the query pool that is managing the results of the
+    query.
+  * pname:query is the query index within the query pool where the result is
+    stored.
+  * pname:index is the query type specific index.
+
+The command completes the query in pname:queryPool identified by pname:query
+and pname:index, and marks it as available.
+
+The fname:vkCmdEndQueryIndexedEXT command operates the same as the
+flink:vkCmdEndQuery command, except that it also accepts a query type
+specific pname:index parameter.
+
+This command defines an execution dependency between other query commands
+that reference the same query index.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur earlier in
+<<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the operation of this command.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndQueryIndexedEXT-None-02342]]
+    All queries used by the command must: be
+    <<queries-operation-active,active>>
+  * [[VUID-vkCmdEndQueryIndexedEXT-query-02343]]
+    pname:query must: be less than the number of queries in pname:queryPool
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdEndQueryIndexedEXT-commandBuffer-02344]]
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdEndQueryIndexedEXT-query-02345]]
+    If fname:vkCmdEndQueryIndexedEXT is called within a render pass
+    instance, the sum of pname:query and the number of bits set in the
+    current subpass's view mask must: be less than or equal to the number of
+    queries in pname:queryPool
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-06694]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+ifdef::VK_EXT_primitives_generated_query[]
+    or ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
+endif::VK_EXT_primitives_generated_query[]
+    the pname:index parameter must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-06695]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+ifdef::VK_EXT_primitives_generated_query[]
+    and not ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
+endif::VK_EXT_primitives_generated_query[]
+    the pname:index must: be zero
+  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-06696]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
+ifdef::VK_EXT_primitives_generated_query[]
+    or ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT,
+endif::VK_EXT_primitives_generated_query[]
+    pname:index must: equal the pname:index used to begin the query
+include::{chapters}/commonvalidity/query_end_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdEndQueryIndexedEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+[[queries-operation-memorylayout]]
+An application can: retrieve results either by requesting they be written
+into application-provided memory, or by requesting they be copied into a
+sname:VkBuffer.
+In either case, the layout in memory is defined as follows:
+
+  * The first query's result is written starting at the first byte requested
+    by the command, and each subsequent query's result begins pname:stride
+    bytes later.
+  * Occlusion queries, pipeline statistics queries,
+ifdef::VK_EXT_transform_feedback[]
+    transform feedback queries,
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_primitives_generated_query[]
+    primitives generated queries,
+endif::VK_EXT_primitives_generated_query[]
+ifdef::VK_EXT_mesh_shader[]
+    mesh shader queries,
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_KHR_video_encode_queue[]
+    video encode feedback queries,
+endif::VK_KHR_video_encode_queue[]
+    and timestamp queries store results in a tightly packed array of
+    unsigned integers, either 32- or 64-bits as requested by the command,
+    storing the numerical results and, if requested, the availability
+    status.
+ifdef::VK_KHR_performance_query[]
+  * Performance queries store results in a tightly packed array whose type
+    is determined by the pname:unit member of the corresponding
+    slink:VkPerformanceCounterKHR.
+endif::VK_KHR_performance_query[]
+  * If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is used, the final
+    element of each query's result is an integer indicating whether the
+    query's result is available, with any non-zero value indicating that it
+    is available.
+ifdef::VK_KHR_video_queue[]
+  * If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is used, the final element
+    of each query's result is an integer value indicating that status of the
+    query result.
+    Positive values indicate success, negative values indicate failure, and
+    0 indicates that the result is not yet available.
+    Specific error codes are encoded in the elink:VkQueryResultStatusKHR
+    enumeration.
+endif::VK_KHR_video_queue[]
+  * Occlusion queries write one integer value - the number of samples
+    passed.
+    Pipeline statistics queries write one integer value for each bit that is
+    enabled in the pname:pipelineStatistics when the pool is created, and
+    the statistics values are written in bit order starting from the least
+    significant bit.
+    Timestamp queries write one integer value.
+ifdef::VK_KHR_performance_query[]
+    Performance queries write one slink:VkPerformanceCounterResultKHR value
+    for each slink:VkPerformanceCounterKHR in the query.
+endif::VK_KHR_performance_query[]
+ifdef::VK_EXT_transform_feedback[]
+    Transform feedback queries write two integers; the first integer is the
+    number of primitives successfully written to the corresponding transform
+    feedback buffer and the second is the number of primitives output to the
+    vertex stream, regardless of whether they were successfully captured or
+    not.
+    In other words, if the transform feedback buffer was sized too small for
+    the number of primitives output by the vertex stream, the first integer
+    represents the number of primitives actually written and the second is
+    the number that would have been written if all the transform feedback
+    buffers associated with that vertex stream were large enough.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_primitives_generated_query[]
+    Primitives generated queries write the number of primitives output to
+    the vertex stream, regardless of whether transform feedback is active or
+    not, or whether they were successfully captured by transform feedback or
+    not.
+    This is identical to the second integer of the transform feedback
+    queries if transform feedback is active.
+endif::VK_EXT_primitives_generated_query[]
+ifdef::VK_EXT_mesh_shader[]
+    Mesh shader queries write a single integer.
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_KHR_video_encode_queue[]
+    Video encode feedback queries write one or more integer values for each
+    bit that is enabled in
+    slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR::pname:encodeFeedbackFlags
+    when the pool is created, and the feedback values are written in bit
+    order starting from the least significant bit, as described
+    <<queries-video-encode-feedback,here>>.
+endif::VK_KHR_video_encode_queue[]
+  * If more than one query is retrieved and pname:stride is not at least as
+    large as the size of the array of values corresponding to a single
+    query, the values written to memory are undefined:.
+
+[open,refpage='vkGetQueryPoolResults',desc='Copy results of queries in a query pool to a host memory region',type='protos']
+--
+:refpage: vkGetQueryPoolResults
+
+To retrieve status and results for a set of queries, call:
+
+include::{generated}/api/protos/vkGetQueryPoolResults.adoc[]
+
+  * pname:device is the logical device that owns the query pool.
+  * pname:queryPool is the query pool managing the queries containing the
+    desired results.
+  * pname:firstQuery is the initial query index.
+  * pname:queryCount is the number of queries to read.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written
+  * pname:stride is the stride in bytes between results for individual
+    queries within pname:pData.
+  * pname:flags is a bitmask of elink:VkQueryResultFlagBits specifying how
+    and when results are returned.
+
+Any results written for a query are written according to
+<<queries-operation-memorylayout,a layout dependent on the query type>>.
+
+If no bits are set in pname:flags, and all requested queries are in the
+available state, results are written as an array of 32-bit unsigned integer
+values.
+Behavior when not all queries are available is described
+<<queries-wait-bit-not-set, below>>.
+
+If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, results for all
+queries in pname:queryPool identified by pname:firstQuery and
+pname:queryCount are copied to pname:pData, along with an extra availability
+ifdef::VK_KHR_video_queue[or status]
+value written directly after the results of each query and interpreted as an
+unsigned integer.
+A value of zero indicates that the results are not yet available, otherwise
+the query is complete and results are available.
+The size of the availability
+ifdef::VK_KHR_video_queue[or status]
+values is 64 bits if ename:VK_QUERY_RESULT_64_BIT is set in pname:flags.
+Otherwise, it is 32 bits.
+
+ifdef::VK_KHR_video_queue[]
+If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set, results for all queries
+in pname:queryPool identified by pname:firstQuery and pname:queryCount are
+copied to pname:pData, along with an extra status value written directly
+after the results of each query and interpreted as a signed integer.
+A value of zero indicates that the results are not yet available.
+Positive values indicate that the operations within the query completed
+successfully, and the query results are valid.
+Negative values indicate that the operations within the query completed
+unsuccessfully.
+
+elink:VkQueryResultStatusKHR defines specific meaning for values returned
+here, though implementations are free to return other values.
+endif::VK_KHR_video_queue[]
+
+[NOTE]
+.Note
+====
+If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+ifdef::VK_KHR_video_queue[or ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR]
+is set, the layout of data in the buffer is a __(result,availability)__
+ifdef::VK_KHR_video_queue[or __(result,status)__]
+pair for each query returned, and pname:stride is the stride between each
+pair.
+====
+
+Results for any available query written by this command are final and
+represent the final result of the query.
+If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, then for any query that is
+unavailable, an intermediate result between zero and the final result value
+is written for that query.
+Otherwise, any result written by this command is undefined:.
+
+If ename:VK_QUERY_RESULT_64_BIT is set, results and, if returned,
+availability
+ifdef::VK_KHR_video_queue[or status]
+values for all queries are written as an array of 64-bit values.
+ifdef::VK_KHR_performance_query[]
+If the pname:queryPool was created with
+ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, results for each query are
+written as an array of the type indicated by
+slink:VkPerformanceCounterKHR::pname:storage for the counter being queried.
+endif::VK_KHR_performance_query[]
+Otherwise, results and availability
+ifdef::VK_KHR_video_queue[or status]
+values are written as an array of 32-bit values.
+If an unsigned integer query's value overflows the result type, the value
+may: either wrap or saturate.
+ifdef::VK_KHR_performance_query[]
+If a signed integer query's value overflows the result type, the value is
+undefined:.
+If a floating point query's value is not representable as the result type,
+the value is undefined:.
+endif::VK_KHR_performance_query[]
+
+If ename:VK_QUERY_RESULT_WAIT_BIT is set, this command defines an execution
+dependency with any earlier commands that writes one of the identified
+queries.
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all instances of flink:vkCmdEndQuery,
+ifdef::VK_EXT_transform_feedback[]
+flink:vkCmdEndQueryIndexedEXT,
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkCmdWriteTimestamp2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+and flink:vkCmdWriteTimestamp that reference any query in pname:queryPool
+indicated by pname:firstQuery and pname:queryCount.
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes the host operations of this command.
+
+[[queries-wait-bit-not-set]]
+If ename:VK_QUERY_RESULT_WAIT_BIT is not set, fname:vkGetQueryPoolResults
+may: return ename:VK_NOT_READY if there are queries in the unavailable
+state.
+
+[NOTE]
+.Note
+====
+Applications must: take care to ensure that use of the
+ename:VK_QUERY_RESULT_WAIT_BIT bit has the desired effect.
+
+For example, if a query has been used previously and a command buffer
+records the commands fname:vkCmdResetQueryPool, fname:vkCmdBeginQuery, and
+fname:vkCmdEndQuery for that query, then the query will remain in the
+available state until
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+fname:vkResetQueryPool is called or
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+the fname:vkCmdResetQueryPool command executes on a queue.
+Applications can: use fences or events to ensure that a query has already
+been reset before checking for its results or availability status.
+Otherwise, a stale value could be returned from a previous use of the query.
+
+The above also applies when ename:VK_QUERY_RESULT_WAIT_BIT is used in
+combination with ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT.
+In this case, the returned availability status may: reflect the result of a
+previous use of the query unless
+ifdef::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+fname:vkResetQueryPool is called or
+endif::VK_VERSION_1_2,VK_EXT_host_query_reset[]
+the fname:vkCmdResetQueryPool command has been executed since the last use
+of the query.
+
+ifdef::VK_KHR_video_queue[]
+A similar situation can arise with the
+ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR flag.
+endif::VK_KHR_video_queue[]
+====
+
+[NOTE]
+.Note
+====
+Applications can: double-buffer query pool usage, with a pool per frame, and
+reset queries at the end of the frame in which they are read.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetQueryPoolResults-None-09401]]
+    All queries used by the command must: not be uninitialized
+  * [[VUID-vkGetQueryPoolResults-firstQuery-00813]]
+    pname:firstQuery must: be less than the number of queries in
+    pname:queryPool
+  * [[VUID-vkGetQueryPoolResults-flags-02828]]
+    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags
+ifdef::VK_KHR_performance_query[]
+    and the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
+endif::VK_KHR_performance_query[]
+    then pname:pData and pname:stride must: be multiples of `4`
+  * [[VUID-vkGetQueryPoolResults-flags-00815]]
+    If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData
+    and pname:stride must: be multiples of `8`
+  * [[VUID-vkGetQueryPoolResults-stride-08993]]
+    If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, pname:stride
+    must: be large enough to contain the unsigned integer representing
+    availability
+ifdef::VK_KHR_video_queue[or status]
+    in addition to the query result.
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkGetQueryPoolResults-queryType-03229]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:pData and
+    pname:stride must: be multiples of the size of
+    slink:VkPerformanceCounterResultKHR
+  * [[VUID-vkGetQueryPoolResults-queryType-04519]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:stride must: be
+    large enough to contain the
+    slink:VkQueryPoolPerformanceCreateInfoKHR::pname:counterIndexCount used
+    to create pname:queryPool times the size of
+    slink:VkPerformanceCounterResultKHR
+endif::VK_KHR_performance_query[]
+  * [[VUID-vkGetQueryPoolResults-firstQuery-00816]]
+    The sum of pname:firstQuery and pname:queryCount must: be less than or
+    equal to the number of queries in pname:queryPool
+  * [[VUID-vkGetQueryPoolResults-dataSize-00817]]
+    pname:dataSize must: be large enough to contain the result of each
+    query, as described <<queries-operation-memorylayout,here>>
+  * [[VUID-vkGetQueryPoolResults-queryType-00818]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
+    ename:VK_QUERY_RESULT_PARTIAL_BIT
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkGetQueryPoolResults-queryType-03230]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, pname:flags must: not contain
+    ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
+ifdef::VK_KHR_video_queue[]
+    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR,
+endif::VK_KHR_video_queue[]
+    ename:VK_QUERY_RESULT_PARTIAL_BIT, or ename:VK_QUERY_RESULT_64_BIT
+  * [[VUID-vkGetQueryPoolResults-queryType-03231]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the pname:queryPool must:
+    have been recorded once for each pass as retrieved via a call to
+    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
+endif::VK_KHR_performance_query[]
+ifdef::VK_KHR_video_queue[]
+  * [[VUID-vkGetQueryPoolResults-queryType-04810]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then pname:flags must:
+    include ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
+  * [[VUID-vkGetQueryPoolResults-flags-04811]]
+    If pname:flags includes ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then
+    it must: not include ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+endif::VK_KHR_video_queue[]
+****
+
+include::{generated}/validity/protos/vkGetQueryPoolResults.adoc[]
+--
+
+[open,refpage='VkQueryResultFlagBits',desc='Bitmask specifying how and when query results are returned',type='enums']
+--
+Bits which can: be set in flink:vkGetQueryPoolResults::pname:flags and
+flink:vkCmdCopyQueryPoolResults::pname:flags, specifying how and when
+results are returned, are:
+
+include::{generated}/api/enums/VkQueryResultFlagBits.adoc[]
+
+  * ename:VK_QUERY_RESULT_64_BIT specifies the results will be written as an
+    array of 64-bit unsigned integer values.
+    If this bit is not set, the results will be written as an array of
+    32-bit unsigned integer values.
+  * ename:VK_QUERY_RESULT_WAIT_BIT specifies that Vulkan will wait for each
+    query's status to become available before retrieving its results.
+  * ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT specifies that the
+    availability status accompanies the results.
+  * ename:VK_QUERY_RESULT_PARTIAL_BIT specifies that returning partial
+    results is acceptable.
+ifdef::VK_KHR_video_queue[]
+  * ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR specifies that the last value
+    returned in the query is a elink:VkQueryResultStatusKHR value.
+    See <<queries-result-status-only, result status query>> for information
+    on how an application can determine whether the use of this flag bit is
+    supported.
+endif::VK_KHR_video_queue[]
+--
+
+[open,refpage='VkQueryResultFlags',desc='Bitmask of VkQueryResultFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkQueryResultFlags.adoc[]
+
+tname:VkQueryResultFlags is a bitmask type for setting a mask of zero or
+more elink:VkQueryResultFlagBits.
+--
+
+ifdef::VK_KHR_video_queue[]
+[open,refpage='VkQueryResultStatusKHR',desc='Specific status codes for operations',type='enums']
+--
+[[query-result-status-codes]]
+Specific status codes that can: be returned from a query are:
+
+include::{generated}/api/enums/VkQueryResultStatusKHR.adoc[]
+
+  * ename:VK_QUERY_RESULT_STATUS_NOT_READY_KHR specifies that the query
+    result is not yet available.
+  * ename:VK_QUERY_RESULT_STATUS_ERROR_KHR specifies that operations did not
+    complete successfully.
+  * ename:VK_QUERY_RESULT_STATUS_COMPLETE_KHR specifies that operations
+    completed successfully and the query result is available.
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR
+    indicates that a video encode operation did not complete successfully
+    due to the destination video bitstream buffer range not being
+    sufficiently large to fit the encoded bitstream data.
+endif::VK_KHR_video_encode_queue[]
+--
+endif::VK_KHR_video_queue[]
+
+[open,refpage='vkCmdCopyQueryPoolResults',desc='Copy the results of queries in a query pool to a buffer object',type='protos']
+--
+To copy query statuses and numerical results directly to buffer memory,
+call:
+
+include::{generated}/api/protos/vkCmdCopyQueryPoolResults.adoc[]
+
+  * pname:commandBuffer is the command buffer into which this command will
+    be recorded.
+  * pname:queryPool is the query pool managing the queries containing the
+    desired results.
+  * pname:firstQuery is the initial query index.
+  * pname:queryCount is the number of queries.
+    pname:firstQuery and pname:queryCount together define a range of
+    queries.
+  * pname:dstBuffer is a slink:VkBuffer object that will receive the results
+    of the copy command.
+  * pname:dstOffset is an offset into pname:dstBuffer.
+  * pname:stride is the stride in bytes between results for individual
+    queries within pname:dstBuffer.
+    The required size of the backing memory for pname:dstBuffer is
+    determined as described above for flink:vkGetQueryPoolResults.
+  * pname:flags is a bitmask of elink:VkQueryResultFlagBits specifying how
+    and when results are returned.
+
+Any results written for a query are written according to
+<<queries-operation-memorylayout,a layout dependent on the query type>>.
+
+Results for any query in pname:queryPool identified by pname:firstQuery and
+pname:queryCount that is available are copied to pname:dstBuffer.
+
+If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, results for all
+queries in pname:queryPool identified by pname:firstQuery and
+pname:queryCount are copied to pname:dstBuffer, along with an extra
+availability value written directly after the results of each query and
+interpreted as an unsigned integer.
+A value of zero indicates that the results are not yet available, otherwise
+the query is complete and results are available.
+
+ifdef::VK_KHR_video_queue[]
+If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set, results for all queries
+in pname:queryPool identified by pname:firstQuery and pname:queryCount are
+copied to pname:dstBuffer, along with an extra status value written directly
+after the results of each query and interpreted as a signed integer.
+A value of zero indicates that the results are not yet available.
+Positive values indicate that the operations within the query completed
+successfully, and the query results are valid.
+Negative values indicate that the operations within the query completed
+unsuccessfully.
+
+elink:VkQueryResultStatusKHR defines specific meaning for values returned
+here, though implementations are free to return other values.
+endif::VK_KHR_video_queue[]
+
+Results for any available query written by this command are final and
+represent the final result of the query.
+If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, then for any query that is
+unavailable, an intermediate result between zero and the final result value
+is written for that query.
+Otherwise, any result written by this command is undefined:.
+
+If ename:VK_QUERY_RESULT_64_BIT is set, results and availability
+ifdef::VK_KHR_video_queue[or status]
+values for all queries are written as an array of 64-bit values.
+ifdef::VK_KHR_performance_query[]
+If the pname:queryPool was created with
+ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, results for each query are
+written as an array of the type indicated by
+slink:VkPerformanceCounterKHR::pname:storage for the counter being queried.
+endif::VK_KHR_performance_query[]
+Otherwise, results and availability
+ifdef::VK_KHR_video_queue[or status]
+values are written as an array of 32-bit values.
+If an unsigned integer query's value overflows the result type, the value
+may: either wrap or saturate.
+ifdef::VK_KHR_performance_query[]
+If a signed integer query's value overflows the result type, the value is
+undefined:.
+If a floating point query's value is not representable as the result type,
+the value is undefined:.
+endif::VK_KHR_performance_query[]
+
+This command defines an execution dependency between other query commands
+that reference the same query.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur earlier in
+<<synchronization-submission-order,submission order>>.
+If pname:flags does not include ename:VK_QUERY_RESULT_WAIT_BIT,
+ifdef::VK_EXT_transform_feedback[]
+flink:vkCmdEndQueryIndexedEXT,
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkCmdWriteTimestamp2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkCmdEndQuery, and flink:vkCmdWriteTimestamp are excluded from this
+scope.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands which reference the queries in pname:queryPool
+indicated by pname:query that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The operation of this command happens after the first scope and happens
+before the second scope.
+
+fname:vkCmdCopyQueryPoolResults is considered to be a transfer operation,
+and its writes to buffer memory must: be synchronized using
+ename:VK_PIPELINE_STAGE_TRANSFER_BIT and ename:VK_ACCESS_TRANSFER_WRITE_BIT
+before using the results.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdCopyQueryPoolResults-None-09402]]
+    All queries used by the command must: not be uninitialized when the
+    command is executed
+  * [[VUID-vkCmdCopyQueryPoolResults-dstOffset-00819]]
+    pname:dstOffset must: be less than the size of pname:dstBuffer
+  * [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00820]]
+    pname:firstQuery must: be less than the number of queries in
+    pname:queryPool
+  * [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00821]]
+    The sum of pname:firstQuery and pname:queryCount must: be less than or
+    equal to the number of queries in pname:queryPool
+  * [[VUID-vkCmdCopyQueryPoolResults-flags-00822]]
+    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
+    pname:dstOffset and pname:stride must: be multiples of `4`
+  * [[VUID-vkCmdCopyQueryPoolResults-flags-00823]]
+    If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then
+    pname:dstOffset and pname:stride must: be multiples of `8`
+  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824]]
+    pname:dstBuffer must: have enough storage, from pname:dstOffset, to
+    contain the result of each query, as described
+    <<queries-operation-memorylayout,here>>
+  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825]]
+    pname:dstBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-00827]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
+    ename:VK_QUERY_RESULT_PARTIAL_BIT
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03232]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
+    slink:VkPhysicalDevicePerformanceQueryPropertiesKHR::pname:allowCommandBufferQueryCopies
+    must: be ename:VK_TRUE
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03233]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, pname:flags must: not contain
+    ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
+ifdef::VK_KHR_video_queue[]
+    ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR,
+endif::VK_KHR_video_queue[]
+    ename:VK_QUERY_RESULT_PARTIAL_BIT, or ename:VK_QUERY_RESULT_64_BIT
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-03234]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the pname:queryPool must:
+    have been submitted once for each pass as retrieved via a call to
+    flink:vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
+endif::VK_KHR_performance_query[]
+ifdef::VK_INTEL_performance_query[]
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-02734]]
+    flink:vkCmdCopyQueryPoolResults must: not be called if the
+    pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL
+endif::VK_INTEL_performance_query[]
+ifdef::VK_KHR_video_queue[]
+  * [[VUID-vkCmdCopyQueryPoolResults-queryType-06901]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then pname:flags must:
+    include ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
+  * [[VUID-vkCmdCopyQueryPoolResults-flags-06902]]
+    If pname:flags includes ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then
+    it must: not include ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+endif::VK_KHR_video_queue[]
+  * [[VUID-vkCmdCopyQueryPoolResults-None-07429]]
+    All queries used by the command must: not be active
+  * [[VUID-vkCmdCopyQueryPoolResults-None-08752]]
+    All queries used by the command must: have been made _available_ by
+    prior executed commands
+****
+
+include::{generated}/validity/protos/vkCmdCopyQueryPoolResults.adoc[]
+--
+
+[[queries-operation-undefined]]
+Rendering operations such as clears, MSAA resolves, attachment load/store
+operations, and blits may: count towards the results of queries.
+This behavior is implementation-dependent and may: vary depending on the
+path used within an implementation.
+For example, some implementations have several types of clears, some of
+which may: include vertices and some not.
+
+
+[[queries-occlusion]]
+== Occlusion Queries
+
+Occlusion queries track the number of samples that pass the per-fragment
+tests for a set of drawing commands.
+As such, occlusion queries are only available on queue families supporting
+graphics operations.
+The application can: then use these results to inform future rendering
+decisions.
+An occlusion query is begun and ended by calling fname:vkCmdBeginQuery and
+fname:vkCmdEndQuery, respectively.
+When an occlusion query begins, the count of passing samples always starts
+at zero.
+For each drawing command, the count is incremented as described in
+<<fragops-samplecount,Sample Counting>>.
+If pname:flags does not contain ename:VK_QUERY_CONTROL_PRECISE_BIT an
+implementation may: generate any non-zero result value for the query if the
+count of passing samples is non-zero.
+
+[NOTE]
+.Note
+====
+Not setting ename:VK_QUERY_CONTROL_PRECISE_BIT mode may: be more efficient
+on some implementations, and should: be used where it is sufficient to know
+a boolean result on whether any samples passed the per-fragment tests.
+In this case, some implementations may: only return zero or one, indifferent
+to the actual number of samples passing the per-fragment tests.
+
+Setting ename:VK_QUERY_CONTROL_PRECISE_BIT does not guarantee that different
+implementations return the same number of samples in an occlusion query.
+Some implementations may kill fragments in the
+<<pipelines-graphics-subsets-pre-rasterization, pre-rasterization shader
+stage>>, and these killed fragments do not contribute to the final result of
+the query.
+It is possible that some implementations generate a zero result value for
+the query, while others generate a non-zero value.
+====
+
+When an occlusion query finishes, the result for that query is marked as
+available.
+The application can: then either copy the result to a buffer (via
+fname:vkCmdCopyQueryPoolResults) or request it be put into host memory (via
+fname:vkGetQueryPoolResults).
+
+[NOTE]
+.Note
+====
+If occluding geometry is not drawn first, samples can: pass the depth test,
+but still not be visible in a final image.
+====
+
+
+[[queries-pipestats]]
+== Pipeline Statistics Queries
+
+Pipeline statistics queries allow the application to sample a specified set
+of sname:VkPipeline counters.
+These counters are accumulated by Vulkan for a set of either drawing or
+dispatching commands while a pipeline statistics query is active.
+As such, pipeline statistics queries are available on queue families
+supporting either graphics or compute operations.
+The availability of pipeline statistics queries is indicated by the
+pname:pipelineStatisticsQuery member of the sname:VkPhysicalDeviceFeatures
+object (see fname:vkGetPhysicalDeviceFeatures and fname:vkCreateDevice for
+detecting and requesting this query type on a sname:VkDevice).
+
+A pipeline statistics query is begun and ended by calling
+fname:vkCmdBeginQuery and fname:vkCmdEndQuery, respectively.
+When a pipeline statistics query begins, all statistics counters are set to
+zero.
+While the query is active, the pipeline type determines which set of
+statistics are available, but these must: be configured on the query pool
+when it is created.
+If a statistic counter is issued on a command buffer that does not support
+the corresponding operation, the value of that counter is undefined: after
+the query has been made available.
+At least one statistic counter relevant to the operations supported on the
+recording command buffer must: be enabled.
+
+[open,refpage='VkQueryPipelineStatisticFlagBits',desc='Bitmask specifying queried pipeline statistics',type='enums']
+--
+Bits which can: be set in
+slink:VkQueryPoolCreateInfo::pname:pipelineStatistics for query pools and in
+slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics for secondary
+command buffers, individually enabling pipeline statistics counters, are:
+
+include::{generated}/api/enums/VkQueryPipelineStatisticFlagBits.adoc[]
+
+  * ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT specifies
+    that queries managed by the pool will count the number of vertices
+    processed by the <<drawing,input assembly>> stage.
+    Vertices corresponding to incomplete primitives may: contribute to the
+    count.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
+    specifies that queries managed by the pool will count the number of
+    primitives processed by the <<drawing,input assembly>> stage.
+    If primitive restart is enabled, restarting the primitive topology has
+    no effect on the count.
+    Incomplete primitives may: be counted.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
+    specifies that queries managed by the pool will count the number of
+    vertex shader invocations.
+    This counter's value is incremented each time a vertex shader is
+    <<shaders-vertex-execution,invoked>>.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
+    specifies that queries managed by the pool will count the number of
+    geometry shader invocations.
+    This counter's value is incremented each time a geometry shader is
+    <<shaders-geometry-execution,invoked>>.
+    In the case of <<geometry-invocations,instanced geometry shaders>>, the
+    geometry shader invocations count is incremented for each separate
+    instanced invocation.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
+    specifies that queries managed by the pool will count the number of
+    primitives generated by geometry shader invocations.
+    The counter's value is incremented each time the geometry shader emits a
+    primitive.
+    Restarting primitive topology using the SPIR-V instructions
+    code:OpEndPrimitive or code:OpEndStreamPrimitive has no effect on the
+    geometry shader output primitives count.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT specifies
+    that queries managed by the pool will count the number of primitives
+    processed by the <<vertexpostproc-clipping,Primitive Clipping>> stage of
+    the pipeline.
+    The counter's value is incremented each time a primitive reaches the
+    primitive clipping stage.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT specifies that
+    queries managed by the pool will count the number of primitives output
+    by the <<vertexpostproc-clipping,Primitive Clipping>> stage of the
+    pipeline.
+    The counter's value is incremented each time a primitive passes the
+    primitive clipping stage.
+    The actual number of primitives output by the primitive clipping stage
+    for a particular input primitive is implementation-dependent but must:
+    satisfy the following conditions:
+  ** If at least one vertex of the input primitive lies inside the clipping
+     volume, the counter is incremented by one or more.
+  ** Otherwise, the counter is incremented by zero or more.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
+    specifies that queries managed by the pool will count the number of
+    fragment shader invocations.
+    The counter's value is incremented each time the fragment shader is
+    <<fragops-shader,invoked>>.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
+    specifies that queries managed by the pool will count the number of
+    patches processed by the tessellation control shader.
+    The counter's value is incremented once for each patch for which a
+    tessellation control shader is
+    <<shaders-tessellation-control-execution,invoked>>.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
+    specifies that queries managed by the pool will count the number of
+    invocations of the tessellation evaluation shader.
+    The counter's value is incremented each time the tessellation evaluation
+    shader is <<shaders-tessellation-evaluation-execution,invoked>>.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
+    specifies that queries managed by the pool will count the number of
+    compute shader invocations.
+    The counter's value is incremented every time the compute shader is
+    invoked.
+    Implementations may: skip the execution of certain compute shader
+    invocations or execute additional compute shader invocations for
+    implementation-dependent reasons as long as the results of rendering
+    otherwise remain unchanged.
+ifdef::VK_EXT_mesh_shader[]
+  * ename:VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT
+    specifies that queries managed by the pool will count the number of task
+    shader invocations.
+    The counter's value is incremented every time the task shader is
+    invoked.
+  * ename:VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT
+    specifies that queries managed by the pool will count the number of mesh
+    shader invocations.
+    The counter's value is incremented every time the mesh shader is
+    invoked.
+endif::VK_EXT_mesh_shader[]
+
+These values are intended to measure relative statistics on one
+implementation.
+Various device architectures will count these values differently.
+Any or all counters may: be affected by the issues described in
+<<queries-operation-undefined,Query Operation>>.
+
+ifdef::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+This counting difference is especially true if the pipeline contains mesh or
+task shaders, which may affect several of the counters in unexpected ways.
+endif::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+
+[NOTE]
+.Note
+====
+For example, tile-based rendering devices may: need to replay the scene
+multiple times, affecting some of the counts.
+====
+
+If a pipeline has pname:rasterizerDiscardEnable enabled, implementations
+may: discard primitives after the final
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
+As a result, if pname:rasterizerDiscardEnable is enabled, the clipping input
+and output primitives counters may: not be incremented.
+
+When a pipeline statistics query finishes, the result for that query is
+marked as available.
+The application can: copy the result to a buffer (via
+fname:vkCmdCopyQueryPoolResults), or request it be put into host memory (via
+fname:vkGetQueryPoolResults).
+--
+
+[open,refpage='VkQueryPipelineStatisticFlags',desc='Bitmask of VkQueryPipelineStatisticFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkQueryPipelineStatisticFlags.adoc[]
+
+tname:VkQueryPipelineStatisticFlags is a bitmask type for setting a mask of
+zero or more elink:VkQueryPipelineStatisticFlagBits.
+--
+
+
+[[queries-timestamps]]
+== Timestamp Queries
+
+_Timestamps_ provide applications with a mechanism for timing the execution
+of commands.
+A timestamp is an integer value generated by the sname:VkPhysicalDevice.
+Unlike other queries, timestamps do not operate over a range, and so do not
+use flink:vkCmdBeginQuery or flink:vkCmdEndQuery.
+The mechanism is built around a set of commands that allow the application
+to tell the sname:VkPhysicalDevice to write timestamp values to a
+<<queries-pools,query pool>> and then either read timestamp values on the
+host (using flink:vkGetQueryPoolResults) or copy timestamp values to a
+sname:VkBuffer (using flink:vkCmdCopyQueryPoolResults).
+The application can: then compute differences between timestamps to
+determine execution time.
+
+The number of valid bits in a timestamp value is determined by the
+sname:VkQueueFamilyProperties::pname:timestampValidBits property of the
+queue on which the timestamp is written.
+Timestamps are supported on any queue which reports a non-zero value for
+pname:timestampValidBits via flink:vkGetPhysicalDeviceQueueFamilyProperties.
+If the <<limits-timestampComputeAndGraphics,
+pname:timestampComputeAndGraphics>> limit is ename:VK_TRUE, timestamps are
+supported by every queue family that supports either graphics or compute
+operations (see slink:VkQueueFamilyProperties).
+
+The number of nanoseconds it takes for a timestamp value to be incremented
+by 1 can: be obtained from
+sname:VkPhysicalDeviceLimits::pname:timestampPeriod after a call to
+fname:vkGetPhysicalDeviceProperties.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdWriteTimestamp2',desc='Write a device timestamp into a query object',type='protos',alias='vkCmdWriteTimestamp2KHR']
+--
+:refpage: vkCmdWriteTimestamp2
+
+To request a timestamp and write the value to memory, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdWriteTimestamp2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkCmdWriteTimestamp2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:stage specifies a stage of the pipeline.
+  * pname:queryPool is the query pool that will manage the timestamp.
+  * pname:query is the query within the query pool that will contain the
+    timestamp.
+
+When fname:vkCmdWriteTimestamp2 is submitted to a queue, it defines an
+execution dependency on commands that were submitted before it, and writes a
+timestamp to a query pool.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+The synchronization scope is limited to operations on the pipeline stage
+specified by pname:stage.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the timestamp write operation.
+
+[NOTE]
+.Note
+====
+Implementations may write the timestamp at any stage that is
+<<synchronization-pipeline-stages-order, logically later>> than pname:stage.
+====
+
+Any timestamp write that <<synchronization-dependencies-execution,
+happens-after>> another timestamp write in the same submission must: not
+have a lower value unless its value overflows the maximum supported integer
+bit width of the query.
+ifdef::VK_EXT_calibrated_timestamps[]
+If `apiext:VK_EXT_calibrated_timestamps` is enabled, this extends to
+timestamp writes across all submissions on the same logical device: any
+timestamp write that <<synchronization-dependencies-execution,
+happens-after>> another must: not have a lower value unless its value
+overflows the maximum supported integer bit width of the query.
+Timestamps written by this command must: be in the
+ename:VK_TIME_DOMAIN_DEVICE_EXT <<VkTimeDomainEXT, time domain>>.
+endif::VK_EXT_calibrated_timestamps[]
+If an overflow occurs, the timestamp value must: wrap back to zero.
+
+[NOTE]
+.Note
+====
+Comparisons between timestamps should be done between timestamps where they
+are guaranteed to not decrease.
+For example, subtracting an older timestamp from a newer one to determine
+the execution time of a sequence of commands is only a reliable measurement
+if the two timestamp writes were performed in the same
+ifdef::VK_EXT_calibrated_timestamps[]
+submission, or if the writes were performed on the same logical device and
+`apiext:VK_EXT_calibrated_timestamps` is enabled.
+endif::VK_EXT_calibrated_timestamps[]
+ifndef::VK_EXT_calibrated_timestamps[]
+submission.
+endif::VK_EXT_calibrated_timestamps[]
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+If fname:vkCmdWriteTimestamp2 is called while executing a render pass
+instance that has multiview enabled, the timestamp uses [eq]#N# consecutive
+query indices in the query pool (starting at pname:query) where [eq]#N# is
+the number of bits set in the view mask of the subpass the command is
+executed in.
+The resulting query values are determined by an implementation-dependent
+choice of one of the following behaviors:
+
+  * The first query is a timestamp value and (if more than one bit is set in
+    the view mask) zero is written to the remaining queries.
+    If two timestamps are written in the same subpass, the sum of the
+    execution time of all views between those commands is the difference
+    between the first query written by each command.
+  * All [eq]#N# queries are timestamp values.
+    If two timestamps are written in the same subpass, the sum of the
+    execution time of all views between those commands is the sum of the
+    difference between corresponding queries written by each command.
+    The difference between corresponding queries may: be the execution time
+    of a single view.
+
+In either case, the application can: sum the differences between all [eq]#N#
+queries to determine the total execution time.
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+.Valid Usage
+****
+:stageMaskName: stage
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+  * [[VUID-vkCmdWriteTimestamp2-synchronization2-03858]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdWriteTimestamp2-stage-03859]]
+    pname:stage must: only include a single pipeline stage
+  * [[VUID-vkCmdWriteTimestamp2-stage-03860]]
+    pname:stage must: only include stages valid for the queue family that
+    was used to create the command pool that pname:commandBuffer was
+    allocated from
+  * [[VUID-vkCmdWriteTimestamp2-queryPool-03861]]
+    pname:queryPool must: have been created with a pname:queryType of
+    ename:VK_QUERY_TYPE_TIMESTAMP
+  * [[VUID-vkCmdWriteTimestamp2-timestampValidBits-03863]]
+    The command pool's queue family must: support a non-zero
+    pname:timestampValidBits
+  * [[VUID-vkCmdWriteTimestamp2-query-04903]]
+    pname:query must: be less than the number of queries in pname:queryPool
+  * [[VUID-vkCmdWriteTimestamp2-None-03864]]
+    All queries used by the command must: be _unavailable_
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdWriteTimestamp2-query-03865]]
+    If fname:vkCmdWriteTimestamp2 is called within a render pass instance,
+    the sum of pname:query and the number of bits set in the current
+    subpass's view mask must: be less than or equal to the number of queries
+    in pname:queryPool
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/protos/vkCmdWriteTimestamp2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdWriteTimestamp',desc='Write a device timestamp into a query object',type='protos']
+--
+:refpage: vkCmdWriteTimestamp
+
+To request a timestamp and write the value to memory, call:
+
+include::{generated}/api/protos/vkCmdWriteTimestamp.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pipelineStage is a elink:VkPipelineStageFlagBits value, specifying
+    a stage of the pipeline.
+  * pname:queryPool is the query pool that will manage the timestamp.
+  * pname:query is the query within the query pool that will contain the
+    timestamp.
+
+When fname:vkCmdWriteTimestamp is submitted to a queue, it defines an
+execution dependency on commands that were submitted before it, and writes a
+timestamp to a query pool.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+The synchronization scope is limited to operations on the pipeline stage
+specified by pname:pipelineStage.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the timestamp write operation.
+
+[NOTE]
+.Note
+====
+Implementations may write the timestamp at any stage that is
+<<synchronization-pipeline-stages-order, logically later>> than pname:stage.
+====
+
+Any timestamp write that <<synchronization-dependencies-execution,
+happens-after>> another timestamp write in the same submission must: not
+have a lower value unless its value overflows the maximum supported integer
+bit width of the query.
+ifdef::VK_EXT_calibrated_timestamps[]
+If `apiext:VK_EXT_calibrated_timestamps` is enabled, this extends to
+timestamp writes across all submissions on the same logical device: any
+timestamp write that <<synchronization-dependencies-execution,
+happens-after>> another must: not have a lower value unless its value
+overflows the maximum supported integer bit width of the query.
+Timestamps written by this command must: be in the
+ename:VK_TIME_DOMAIN_DEVICE_EXT <<VkTimeDomainEXT, time domain>>.
+endif::VK_EXT_calibrated_timestamps[]
+If an overflow occurs, the timestamp value must: wrap back to zero.
+
+[NOTE]
+.Note
+====
+Comparisons between timestamps should be done between timestamps where they
+are guaranteed to not decrease.
+For example, subtracting an older timestamp from a newer one to determine
+the execution time of a sequence of commands is only a reliable measurement
+if the two timestamp writes were performed in the same
+ifdef::VK_EXT_calibrated_timestamps[]
+submission, or if the writes were performed on the same logical device and
+`apiext:VK_EXT_calibrated_timestamps` is enabled.
+endif::VK_EXT_calibrated_timestamps[]
+ifndef::VK_EXT_calibrated_timestamps[]
+submission.
+endif::VK_EXT_calibrated_timestamps[]
+====
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+If fname:vkCmdWriteTimestamp is called while executing a render pass
+instance that has multiview enabled, the timestamp uses [eq]#N# consecutive
+query indices in the query pool (starting at pname:query) where [eq]#N# is
+the number of bits set in the view mask of the subpass the command is
+executed in.
+The resulting query values are determined by an implementation-dependent
+choice of one of the following behaviors:
+
+  * The first query is a timestamp value and (if more than one bit is set in
+    the view mask) zero is written to the remaining queries.
+    If two timestamps are written in the same subpass, the sum of the
+    execution time of all views between those commands is the difference
+    between the first query written by each command.
+  * All [eq]#N# queries are timestamp values.
+    If two timestamps are written in the same subpass, the sum of the
+    execution time of all views between those commands is the sum of the
+    difference between corresponding queries written by each command.
+    The difference between corresponding queries may: be the execution time
+    of a single view.
+
+In either case, the application can: sum the differences between all [eq]#N#
+queries to determine the total execution time.
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/pipeline_stage_common.adoc[]
+  * [[VUID-vkCmdWriteTimestamp-queryPool-01416]]
+    pname:queryPool must: have been created with a pname:queryType of
+    ename:VK_QUERY_TYPE_TIMESTAMP
+  * [[VUID-vkCmdWriteTimestamp-timestampValidBits-00829]]
+    The command pool's queue family must: support a non-zero
+    pname:timestampValidBits
+  * [[VUID-vkCmdWriteTimestamp-query-04904]]
+    pname:query must: be less than the number of queries in pname:queryPool
+  * [[VUID-vkCmdWriteTimestamp-None-00830]]
+    All queries used by the command must: be _unavailable_
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdWriteTimestamp-query-00831]]
+    If fname:vkCmdWriteTimestamp is called within a render pass instance,
+    the sum of pname:query and the number of bits set in the current
+    subpass's view mask must: be less than or equal to the number of queries
+    in pname:queryPool
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/protos/vkCmdWriteTimestamp.adoc[]
+--
+
+ifdef::VK_KHR_performance_query[]
+include::{chapters}/VK_KHR_performance_query/queriesperformance.adoc[]
+endif::VK_KHR_performance_query[]
+
+
+ifdef::VK_EXT_transform_feedback[]
+[[queries-transform-feedback]]
+== Transform Feedback Queries
+
+Transform feedback queries track the number of primitives attempted to be
+written and actually written, by the vertex stream being captured, to a
+transform feedback buffer.
+This query is updated during drawing commands while transform feedback is
+active.
+The number of primitives actually written will be less than the number
+attempted to be written if the bound transform feedback buffer size was too
+small for the number of primitives actually drawn.
+Primitives are not written beyond the bound range of the transform feedback
+buffer.
+A transform feedback query is begun and ended by calling
+fname:vkCmdBeginQuery and fname:vkCmdEndQuery, respectively to query for
+vertex stream zero.
+fname:vkCmdBeginQueryIndexedEXT and fname:vkCmdEndQueryIndexedEXT can: be
+used to begin and end transform feedback queries for any supported vertex
+stream.
+When a transform feedback query begins, the count of primitives written and
+primitives needed starts from zero.
+For each drawing command, the count is incremented as vertex attribute
+outputs are captured to the transform feedback buffers while transform
+feedback is active.
+
+When a transform feedback query finishes, the result for that query is
+marked as available.
+The application can: then either copy the result to a buffer (via
+fname:vkCmdCopyQueryPoolResults) or request it be put into host memory (via
+fname:vkGetQueryPoolResults).
+endif::VK_EXT_transform_feedback[]
+
+
+ifdef::VK_EXT_primitives_generated_query[]
+[[queries-primitives-generated]]
+== Primitives Generated Queries
+
+When a generated primitive query for a vertex stream is active, the
+primitives-generated count is incremented every time a primitive emitted to
+that stream reaches the transform feedback stage, whether or not transform
+feedback is active.
+A primitives generated query is begun and ended by calling
+fname:vkCmdBeginQuery and fname:vkCmdEndQuery, respectively to query for
+vertex stream zero.
+fname:vkCmdBeginQueryIndexedEXT and fname:vkCmdEndQueryIndexedEXT can: be
+used to begin and end primitives generated queries for any supported vertex
+stream.
+When a primitives generated query begins, the count of primitives generated
+starts from zero.
+
+When a primitives generated query finishes, the result for that query is
+marked as available.
+The application can: then either copy the result to a buffer (via
+fname:vkCmdCopyQueryPoolResults) or request it be put into host memory (via
+fname:vkGetQueryPoolResults).
+
+[NOTE]
+.Note
+====
+The result of this query is typically identical to
+ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, but the
+primitives generated query is deterministic, i.e. it must be identical to
+the number of primitives processed.
+ename:VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT may vary for
+implementation-dependent reasons, e.g. the same primitive may be processed
+multiple times for purposes of clipping.
+====
+endif::VK_EXT_primitives_generated_query[]
+
+
+ifdef::VK_EXT_mesh_shader[]
+[[queries-mesh-shader]]
+== Mesh Shader Queries
+
+When a generated mesh primitives query is active, the
+mesh-primitives-generated count is incremented every time a primitive
+emitted from the mesh shader stage reaches the fragment shader stage.
+When a generated mesh primitives query begins, the mesh-primitives-generated
+count starts from zero.
+
+Mesh and task shader pipeline statistics queries function the same way that
+invocation queries work for other shader stages, counting the number of
+times the respective shader stage has been run.
+When the statistics query begins, the invocation counters start from zero.
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_INTEL_performance_query[]
+include::{chapters}/VK_INTEL_performance_query/queries.adoc[]
+endif::VK_INTEL_performance_query[]
+
+
+ifdef::VK_KHR_video_queue[]
+[[queries-result-status-only]]
+== Result Status Queries
+
+Result status queries serve a single purpose: allowing the application to
+determine whether a set of operations have completed successfully or not, as
+indicated by the elink:VkQueryResultStatusKHR value written when retrieving
+the result of a query using the ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
+flag.
+
+Unlike other query types, result status queries do not track or maintain any
+other data beyond the completion status, thus no other data is written when
+retrieving their results.
+
+Support for result status queries is indicated by
+slink:VkQueueFamilyQueryResultStatusPropertiesKHR::pname:queryResultStatusSupport
+, as returned by flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
+queue family in question.
+endif::VK_KHR_video_queue[]
+
+
+ifdef::VK_KHR_video_encode_queue[]
+[[queries-video-encode-feedback]]
+== Video Encode Feedback Queries
+
+Video encode feedback queries allow the application to capture feedback
+values generated by video encode operations.
+As such, video encode feedback queries are available on queue families
+supporting video encode operations.
+The availability of individual video encode feedback values is indicated by
+the bits of
+slink:VkVideoEncodeCapabilitiesKHR::pname:supportedEncodeFeedbackFlags, as
+returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the
+<<video-profiles,video profile>> the queries are intended to be used with.
+
+The set of enabled video encode feedback values must: be configured on the
+query pool when it is created using the pname:encodeFeedbackFlags member of
+the slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR included in the
+pname:pNext chain of slink:VkQueryPoolCreateInfo.
+
+[open,refpage='VkQueryPoolVideoEncodeFeedbackCreateInfoKHR',desc='Structure specifying enabled video encode feedback values',type='structs']
+--
+The sname:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkQueryPoolVideoEncodeFeedbackCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:encodeFeedbackFlags is a bitmask of
+    elink:VkVideoEncodeFeedbackFlagBitsKHR values specifying the set of
+    enabled video encode feedback values captured by queries of the new
+    pool.
+
+include::{generated}/validity/structs/VkQueryPoolVideoEncodeFeedbackCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeFeedbackFlagBitsKHR',desc='Bits specifying queried video encode feedback values',type='enums']
+--
+Bits which can: be set in
+slink:VkQueryPoolVideoEncodeFeedbackCreateInfoKHR::pname:encodeFeedbackFlags
+for video encode feedback query pools are:
+
+include::{generated}/api/enums/VkVideoEncodeFeedbackFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR specifies
+    that queries managed by the pool will capture the byte offset of the
+    bitstream data written by the video encode operation to the bitstream
+    buffer specified in slink:VkVideoEncodeInfoKHR::pname:dstBuffer relative
+    to the offset specified in
+    slink:VkVideoEncodeInfoKHR::pname:dstBufferOffset.
+  * ename:VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR specifies
+    that queries managed by the pool will capture the number of bytes
+    written by the video encode operation to the bitstream buffer specified
+    in slink:VkVideoEncodeInfoKHR::pname:dstBuffer.
+  * ename:VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR specifies
+    that queries managed by the pool will capture a boolean value indicating
+    that the data written to the bitstream buffer specified in
+    slink:VkVideoEncodeInfoKHR::pname:dstBuffer contains overridden
+    parameters.
+
+When retrieving the results of video encode feedback queries, the values
+corresponding to each enabled video encode feedback are written in the order
+of the bits defined above, followed by an optional value indicating
+availability or result status if ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+or ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is specified, respectively.
+--
+
+[open,refpage='VkVideoEncodeFeedbackFlagsKHR',desc='Bitmask of VkVideoEncodeFeedbackFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeFeedbackFlagsKHR.adoc[]
+
+tname:VkVideoEncodeFeedbackFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoEncodeFeedbackFlagBitsKHR.
+--
+endif::VK_KHR_video_encode_queue[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/raytracing.adoc b/codegen/vulkan/vulkan-docs-next/chapters/raytracing.adoc
new file mode 100644
index 0000000..c69ff0a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/raytracing.adoc
@@ -0,0 +1,1001 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[ray-tracing]]
+= Ray Tracing
+
+Ray tracing uses a separate rendering pipeline from both the graphics and
+compute pipelines (see <<pipelines-ray-tracing,Ray Tracing Pipeline>>).
+
+[[fig-raypipe]]
+image::{images}/ray_tracing_execution.svg[align="center",title="Ray tracing pipeline execution",opts="{imageopts}"]
+
+.Caption
+****
+Interaction between the different shader stages in the ray tracing pipeline
+****
+
+Within the ray tracing pipeline, code:OpTraceRayKHR
+ifdef::VK_NV_ray_tracing_motion_blur[]
+or code:OpTraceRayMotionNV
+endif::VK_NV_ray_tracing_motion_blur[]
+can: be called to perform a <<ray-traversal,ray traversal>> that invokes the
+various ray tracing shader stages during its execution.
+The relationship between the ray tracing pipeline object and the geometries
+present in the acceleration structure traversed is passed into the ray
+tracing command in a slink:VkBuffer object known as a _shader binding
+table_.
+code:OpExecuteCallableKHR can also be used in ray tracing pipelines to
+invoke a <<shaders-callable,callable shader>>.
+
+During execution, control alternates between scheduling and other
+operations.
+The scheduling functionality is implementation-specific and is responsible
+for workload execution.
+The shader stages are programmable.
+<<ray-traversal, _Traversal_>>, which refers to the process of traversing
+acceleration structures to find potential intersections of rays with
+geometry, is fixed function.
+
+The programmable portions of the pipeline are exposed in a single-ray
+programming model, with each invocation handling one ray at a time.
+Memory operations can: be synchronized using standard memory barriers.
+The code:Workgroup scope and variables with a storage class of
+code:Workgroup must: not be used in the ray tracing pipeline.
+
+
+[[ray-tracing-shader-call]]
+== Shader Call Instructions
+
+A _shader call_ is an instruction which may: cause execution to continue
+elsewhere by creating one or more invocations that execute a different
+shader stage.
+
+The shader call instructions are:
+
+  * code:OpTraceRayKHR which may: invoke intersection, any-hit, closest hit,
+    or miss shaders,
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * code:OpTraceRayMotionNV which may: invoke intersection, any-hit, closest
+    hit, or miss shaders,
+endif::VK_NV_ray_tracing_motion_blur[]
+  * code:OpReportIntersectionKHR which may: invoke any-hit shaders, and
+  * code:OpExecuteCallableKHR which will invoke a callable shader.
+ifdef::VK_NV_ray_tracing_invocation_reorder[]
+  * code:OpHitObjectTraceRayNV, code:OpHitObjectTraceRayMotionNV, and
+    code:OpHitObjectExecuteShaderNV which may: invoke intersection, any-hit,
+    closest hit, miss, or callable shaders.
+endif::VK_NV_ray_tracing_invocation_reorder[]
+
+ifdef::VK_VERSION_1_1[]
+The invocations created by shader call instructions are grouped into
+subgroups by the implementation.
+Those subgroups may: be unrelated to the subgroup of the parent invocation.
+endif::VK_VERSION_1_1[]
+
+
+[[ray-tracing-recursion-depth]]
+_Pipeline trace ray instructions_ can: be used recursively; invoked shaders
+can: themselves execute pipeline trace ray instructions, to a maximum depth
+defined by the
+ifdef::VK_NV_ray_tracing[]
+<<limits-maxRecursionDepth, pname:maxRecursionDepth>> or
+endif::VK_NV_ray_tracing[]
+<<limits-maxRayRecursionDepth, pname:maxRayRecursionDepth>> limit.
+
+Shaders directly invoked from the API always have a recursion depth of 0;
+each shader executed by a pipeline trace ray instruction has a recursion
+depth one higher than the recursion depth of the shader which invoked it.
+Applications must: not invoke a shader with a recursion depth greater than
+the value of
+ifdef::VK_NV_ray_tracing[]
+pname:maxRecursionDepth or
+endif::VK_NV_ray_tracing[]
+pname:maxPipelineRayRecursionDepth specified in the pipeline.
+
+There is no explicit recursion limit for other shader call instructions
+which may recurse (e.g. code:OpExecuteCallableKHR) but there is an upper
+bound determined by the <<ray-tracing-pipeline-stack, stack size>>.
+
+[[ray-tracing-repack]]
+An _invocation repack instruction_ is a ray tracing shader call instruction
+where the implementation may: change the set of invocations that are
+executing.
+When a repack instruction is encountered, the invocation is suspended and a
+new invocation begins and executes the instruction.
+After executing the repack instruction (which may: result in other ray
+tracing shader stages executing) the new invocation ends and the original
+invocation is resumed, but it may: be resumed in a different subgroup or at
+a different code:SubgroupLocalInvocationId within the same subgroup.
+When a subset of invocations in a subgroup execute the invocation repack
+instruction, those that do not execute it remain in the same subgroup at the
+same code:SubgroupLocalInvocationId.
+
+The code:OpTraceRayKHR,
+ifdef::VK_NV_ray_tracing_motion_blur[]
+code:OpTraceRayMotionNV,
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_NV_ray_tracing_invocation_reorder[]
+code:OpReorderThreadWithHintNV, code:OpReorderThreadWithHitObjectNV,
+endif::VK_NV_ray_tracing_invocation_reorder[]
+code:OpReportIntersectionKHR, and code:OpExecuteCallableKHR instructions are
+invocation repack instructions.
+
+ifdef::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+The invocations that are executing before an invocation repack instruction,
+after the instruction, or are created by the instruction, are
+<<shader-call-related,shader-call-related>>.
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+If the implementation changes the composition of subgroups, the values of
+code:SubgroupSize, code:SubgroupLocalInvocationId,
+ifdef::VK_NV_shader_sm_builtins[]
+code:SMIDNV, code:WarpIDNV,
+endif::VK_NV_shader_sm_builtins[]
+and builtin variables that are derived from them (code:SubgroupEqMask,
+code:SubgroupGeMask, code:SubgroupGtMask, code:SubgroupLeMask,
+code:SubgroupLtMask) must: be changed accordingly by the invocation repack
+instruction.
+The application must: use <<builtin-volatile-semantics,code:Volatile
+semantics>> on these code:BuiltIn variables when used in the ray generation,
+closest hit, miss, intersection, and callable shaders.
+Similarly, the application must: use code:Volatile semantics on any
+code:RayTmaxKHR decorated code:Builtin used in an intersection shader.
+
+[NOTE]
+.Note
+====
+<<shaders-group-operations,Subgroup operations>> are permitted in the
+programmable ray tracing shader stages.
+However, shader call instructions place a bound on where results of subgroup
+instructions or subgroup-scoped instructions that execute the dynamic
+instance of that instruction are potentially valid.
+For example, care must: be taken when using the result of a ballot operation
+that was computed before an invocation repack instruction, after that repack
+instruction.
+The ballot may: be incorrect as the set of invocations could have changed.
+
+ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+While the code:SubgroupSize built-in is required to be declared
+code:Volatile, its value will never change unless
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT is set
+on pipeline creation, as without that bit set, its value is required to
+match that of slink:VkPhysicalDeviceSubgroupProperties::pname:subgroupSize.
+endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
+
+ifdef::VK_KHR_shader_clock[]
+For clock operations, the value of a code:Subgroup scoped
+code:OpReadClockKHR read before the dynamic instance of a repack instruction
+should: not be compared to the result of that clock instruction after the
+repack instruction.
+endif::VK_KHR_shader_clock[]
+====
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+When a ray tracing shader executes a dynamic instance of an invocation
+repack instruction which results in another ray tracing shader being
+invoked, their instructions are related by
+<<shader-call-order,shader-call-order>>.
+
+For ray tracing invocations that are
+<<shader-call-related,shader-call-related>>:
+
+  * <<memory-model-memory-operation,memory operations>> on
+    code:StorageBuffer, code:Image, and code:ShaderRecordBufferKHR storage
+    classes can: be synchronized using the
+ifdef::VK_KHR_ray_tracing_pipeline[code:ShaderCallKHR]
+ifndef::VK_KHR_ray_tracing_pipeline[code:Device or code:QueueFamily]
+    scope.
+
+  * the code:CallableDataKHR, code:IncomingCallableDataKHR,
+    code:RayPayloadKHR, code:HitAttributeKHR, and code:IncomingRayPayloadKHR
+    storage classes are <<memory-model-shader-io,system-synchronized>> and
+    no application availability and visibility operations are required.
+
+  * memory operations within a single invocation before and after the
+    invocation repack instruction are ordered by
+    <<memory-model-program-order,program-order>> and do not require explicit
+    synchronization.
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+
+[[ray-tracing-commands]]
+== Ray Tracing Commands
+
+_Ray tracing commands_ provoke work in the ray tracing pipeline.
+Ray tracing commands are recorded into a command buffer and when executed by
+a queue will produce work that executes according to the currently bound ray
+tracing pipeline.
+A ray tracing pipeline must: be bound to a command buffer before any ray
+tracing commands are recorded in that command buffer.
+
+ifdef::VK_NV_ray_tracing[]
+
+[open,refpage='vkCmdTraceRaysNV',desc='Initialize a ray tracing dispatch',type='protos']
+--
+:refpage: vkCmdTraceRaysNV
+
+To dispatch ray tracing use:
+
+include::{generated}/api/protos/vkCmdTraceRaysNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:raygenShaderBindingTableBuffer is the buffer object that holds the
+    shader binding table data for the ray generation shader stage.
+  * pname:raygenShaderBindingOffset is the offset in bytes (relative to
+    pname:raygenShaderBindingTableBuffer) of the ray generation shader being
+    used for the trace.
+  * pname:missShaderBindingTableBuffer is the buffer object that holds the
+    shader binding table data for the miss shader stage.
+  * pname:missShaderBindingOffset is the offset in bytes (relative to
+    pname:missShaderBindingTableBuffer) of the miss shader being used for
+    the trace.
+  * pname:missShaderBindingStride is the size in bytes of each shader
+    binding table record in pname:missShaderBindingTableBuffer.
+  * pname:hitShaderBindingTableBuffer is the buffer object that holds the
+    shader binding table data for the hit shader stages.
+  * pname:hitShaderBindingOffset is the offset in bytes (relative to
+    pname:hitShaderBindingTableBuffer) of the hit shader group being used
+    for the trace.
+  * pname:hitShaderBindingStride is the size in bytes of each shader binding
+    table record in pname:hitShaderBindingTableBuffer.
+  * pname:callableShaderBindingTableBuffer is the buffer object that holds
+    the shader binding table data for the callable shader stage.
+  * pname:callableShaderBindingOffset is the offset in bytes (relative to
+    pname:callableShaderBindingTableBuffer) of the callable shader being
+    used for the trace.
+  * pname:callableShaderBindingStride is the size in bytes of each shader
+    binding table record in pname:callableShaderBindingTableBuffer.
+  * pname:width is the width of the ray trace query dimensions.
+  * pname:height is height of the ray trace query dimensions.
+  * pname:depth is depth of the ray trace query dimensions.
+
+When the command is executed, a ray generation group of [eq]#pname:width
+{times} pname:height {times} pname:depth# rays is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/trace_rays_common.adoc[]
+  * [[VUID-vkCmdTraceRaysNV-commandBuffer-04624]]
+    pname:commandBuffer must: not be a protected command buffer
+  * [[VUID-vkCmdTraceRaysNV-maxRecursionDepth-03625]]
+    This command must: not cause a pipeline trace ray instruction to be
+    executed from a shader invocation with a <<ray-tracing-recursion-depth,
+    recursion depth>> greater than the value of pname:maxRecursionDepth used
+    to create the bound ray tracing pipeline
+  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-04042]]
+    If pname:raygenShaderBindingTableBuffer is non-sparse then it must: be
+    bound completely and contiguously to a single sname:VkDeviceMemory
+    object
+  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455]]
+    pname:raygenShaderBindingOffset must: be less than the size of
+    pname:raygenShaderBindingTableBuffer
+  * [[VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02456]]
+    pname:raygenShaderBindingOffset must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
+  * [[VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-04043]]
+    If pname:missShaderBindingTableBuffer is non-sparse then it must: be
+    bound completely and contiguously to a single sname:VkDeviceMemory
+    object
+  * [[VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457]]
+    pname:missShaderBindingOffset must: be less than the size of
+    pname:missShaderBindingTableBuffer
+  * [[VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02458]]
+    pname:missShaderBindingOffset must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
+  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-04044]]
+    If pname:hitShaderBindingTableBuffer is non-sparse then it must: be
+    bound completely and contiguously to a single sname:VkDeviceMemory
+    object
+  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459]]
+    pname:hitShaderBindingOffset must: be less than the size of
+    pname:hitShaderBindingTableBuffer
+  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02460]]
+    pname:hitShaderBindingOffset must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
+  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-04045]]
+    If pname:callableShaderBindingTableBuffer is non-sparse then it must: be
+    bound completely and contiguously to a single sname:VkDeviceMemory
+    object
+  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461]]
+    pname:callableShaderBindingOffset must: be less than the size of
+    pname:callableShaderBindingTableBuffer
+  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02462]]
+    pname:callableShaderBindingOffset must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupBaseAlignment
+  * [[VUID-vkCmdTraceRaysNV-missShaderBindingStride-02463]]
+    pname:missShaderBindingStride must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
+  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02464]]
+    pname:hitShaderBindingStride must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
+  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02465]]
+    pname:callableShaderBindingStride must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize
+  * [[VUID-vkCmdTraceRaysNV-missShaderBindingStride-02466]]
+    pname:missShaderBindingStride must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
+  * [[VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02467]]
+    pname:hitShaderBindingStride must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
+  * [[VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02468]]
+    pname:callableShaderBindingStride must: be less than or equal to
+    sname:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxShaderGroupStride
+  * [[VUID-vkCmdTraceRaysNV-width-02469]]
+    pname:width must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+  * [[VUID-vkCmdTraceRaysNV-height-02470]]
+    pname:height must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+  * [[VUID-vkCmdTraceRaysNV-depth-02471]]
+    pname:depth must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysNV.adoc[]
+--
+
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='vkCmdTraceRaysKHR',desc='Initialize a ray tracing dispatch',type='protos']
+--
+:refpage: vkCmdTraceRaysKHR
+
+To dispatch ray tracing use:
+
+include::{generated}/api/protos/vkCmdTraceRaysKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pRaygenShaderBindingTable is a
+    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
+    table data for the ray generation shader stage.
+  * pname:pMissShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
+    that holds the shader binding table data for the miss shader stage.
+  * pname:pHitShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
+    that holds the shader binding table data for the hit shader stage.
+  * pname:pCallableShaderBindingTable is a
+    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
+    table data for the callable shader stage.
+  * pname:width is the width of the ray trace query dimensions.
+  * pname:height is height of the ray trace query dimensions.
+  * pname:depth is depth of the ray trace query dimensions.
+
+When the command is executed, a ray generation group of [eq]#pname:width
+{times} pname:height {times} pname:depth# rays is assembled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/trace_rays_common.adoc[]
+include::{chapters}/commonvalidity/trace_rays_common_khr.adoc[]
+include::{chapters}/commonvalidity/trace_rays_binding_table_raygen_stride.adoc[]
+
+:rayGenShaderBindingTableAddress: pname:pRayGenShaderBindingTable->deviceAddress
+:rayGenShaderBindingTableStride: pname:pRayGenShaderBindingTable->stride
+:missShaderBindingTableAddress: pname:pMissShaderBindingTable->deviceAddress
+:missShaderBindingTableStride: pname:pMissShaderBindingTable->stride
+:hitShaderBindingTableAddress: pname:pHitShaderBindingTable->deviceAddress
+:hitShaderBindingTableStride: pname:pHitShaderBindingTable->stride
+:callableShaderBindingTableAddress: pname:pCallableShaderBindingTable->deviceAddress
+:callableShaderBindingTableStride: pname:pCallableShaderBindingTable->stride
+include::{chapters}/commonvalidity/trace_rays_binding_table.adoc[]
+include::{chapters}/commonvalidity/trace_rays_limits_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysKHR.adoc[]
+--
+
+[open,refpage='VkStridedDeviceAddressRegionKHR',desc='Structure specifying a region of device addresses with a stride',type='structs']
+--
+:refpage: VkStridedDeviceAddressRegionKHR
+
+The sname:VkStridedDeviceAddressRegionKHR structure is defined as:
+
+include::{generated}/api/structs/VkStridedDeviceAddressRegionKHR.adoc[]
+
+  * pname:deviceAddress is the device address (as returned by the
+    flink:vkGetBufferDeviceAddress command) at which the region starts, or
+    zero if the region is unused.
+  * pname:stride is the byte stride between consecutive elements.
+  * pname:size is the size in bytes of the region starting at
+    pname:deviceAddress.
+
+.Valid Usage
+****
+  * [[VUID-VkStridedDeviceAddressRegionKHR-size-04631]]
+    If pname:size is not zero, all addresses between pname:deviceAddress and
+    [eq]#pname:deviceAddress {plus} pname:size - 1# must: be in the buffer
+    device address range of the same buffer
+  * [[VUID-VkStridedDeviceAddressRegionKHR-size-04632]]
+    If pname:size is not zero, pname:stride must: be less than or equal to
+    the size of the buffer from which pname:deviceAddress was queried
+****
+
+include::{generated}/validity/structs/VkStridedDeviceAddressRegionKHR.adoc[]
+--
+
+ifdef::VK_HUAWEI_invocation_mask[]
+[open,refpage='vkCmdBindInvocationMaskHUAWEI',desc='Bind an invocation mask image on a command buffer',type='protos']
+--
+When invocation mask image usage is enabled in the bound ray tracing
+pipeline, the pipeline uses an invocation mask image specified by the
+command:
+
+include::{generated}/api/protos/vkCmdBindInvocationMaskHUAWEI.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded
+  * pname:imageView is an image view handle specifying the invocation mask
+    image pname:imageView may: be set to dlink:VK_NULL_HANDLE, which is
+    equivalent to specifying a view of an image filled with ones value.
+  * pname:imageLayout is the layout that the image subresources accessible
+    from pname:imageView will be in when the invocation mask image is
+    accessed
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-None-04976]]
+    The <<features-invocationMask, pname:invocationMask>> feature must: be
+    enabled
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04977]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: be a valid
+    slink:VkImageView handle of type ename:VK_IMAGE_VIEW_TYPE_2D
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04978]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a format
+    of ename:VK_FORMAT_R8_UINT
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04979]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
+    created with ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI set
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04980]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    be ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-width-04981]]
+    Thread mask image resolution must match the pname:width and pname:height
+    in flink:vkCmdTraceRaysKHR
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-None-04982]]
+    Each element in the invocation mask image must: have the value `0` or
+    `1`.
+    The value 1 means the invocation is active
+  * [[VUID-vkCmdBindInvocationMaskHUAWEI-depth-04983]]
+    pname:depth in flink:vkCmdTraceRaysKHR must: be 1
+****
+
+include::{generated}/validity/protos/vkCmdBindInvocationMaskHUAWEI.adoc[]
+--
+endif::VK_HUAWEI_invocation_mask[]
+
+[open,refpage='vkCmdTraceRaysIndirectKHR',desc='Initialize an indirect ray tracing dispatch',type='protos']
+--
+:refpage: vkCmdTraceRaysIndirectKHR
+
+To dispatch ray tracing, with some parameters sourced on the device, use:
+
+include::{generated}/api/protos/vkCmdTraceRaysIndirectKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pRaygenShaderBindingTable is a
+    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
+    table data for the ray generation shader stage.
+  * pname:pMissShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
+    that holds the shader binding table data for the miss shader stage.
+  * pname:pHitShaderBindingTable is a slink:VkStridedDeviceAddressRegionKHR
+    that holds the shader binding table data for the hit shader stage.
+  * pname:pCallableShaderBindingTable is a
+    slink:VkStridedDeviceAddressRegionKHR that holds the shader binding
+    table data for the callable shader stage.
+  * pname:indirectDeviceAddress is a buffer device address which is a
+    pointer to a slink:VkTraceRaysIndirectCommandKHR structure containing
+    the trace ray parameters.
+
+fname:vkCmdTraceRaysIndirectKHR behaves similarly to flink:vkCmdTraceRaysKHR
+except that the ray trace query dimensions are read by the device from
+pname:indirectDeviceAddress during execution.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/trace_rays_common.adoc[]
+include::{chapters}/commonvalidity/trace_rays_common_khr.adoc[]
+include::{chapters}/commonvalidity/trace_rays_binding_table_raygen_stride.adoc[]
+
+:rayGenShaderBindingTableAddress: pname:pRayGenShaderBindingTable->deviceAddress
+:rayGenShaderBindingTableStride: pname:pRayGenShaderBindingTable->stride
+:missShaderBindingTableAddress: pname:pMissShaderBindingTable->deviceAddress
+:missShaderBindingTableStride: pname:pMissShaderBindingTable->stride
+:hitShaderBindingTableAddress: pname:pHitShaderBindingTable->deviceAddress
+:hitShaderBindingTableStride: pname:pHitShaderBindingTable->stride
+:callableShaderBindingTableAddress: pname:pCallableShaderBindingTable->deviceAddress
+:callableShaderBindingTableStride: pname:pCallableShaderBindingTable->stride
+include::{chapters}/commonvalidity/trace_rays_binding_table.adoc[]
+
+:cmdstruct: VkTraceRaysIndirectCommandKHR
+:feature: rayTracingPipelineTraceRaysIndirect
+include::{chapters}/commonvalidity/trace_rays_indirect_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysIndirectKHR.adoc[]
+--
+
+[open,refpage='VkTraceRaysIndirectCommandKHR',desc='Structure specifying the parameters of an indirect ray tracing command',type='structs']
+--
+:refpage: VkTraceRaysIndirectCommandKHR
+
+The sname:VkTraceRaysIndirectCommandKHR structure is defined as:
+
+include::{generated}/api/structs/VkTraceRaysIndirectCommandKHR.adoc[]
+
+  * pname:width is the width of the ray trace query dimensions.
+  * pname:height is height of the ray trace query dimensions.
+  * pname:depth is depth of the ray trace query dimensions.
+
+The members of sname:VkTraceRaysIndirectCommandKHR have the same meaning as
+the similarly named parameters of flink:vkCmdTraceRaysKHR.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/trace_rays_limits_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkTraceRaysIndirectCommandKHR.adoc[]
+--
+
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+[open,refpage='vkCmdTraceRaysIndirect2KHR',desc='Initialize an indirect ray tracing dispatch with indirect shader binding tables',type='protos']
+--
+:refpage: vkCmdTraceRaysIndirect2KHR
+
+To dispatch ray tracing, with some parameters sourced on the device, use:
+
+include::{generated}/api/protos/vkCmdTraceRaysIndirect2KHR.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:indirectDeviceAddress is a buffer device address which is a
+    pointer to a slink:VkTraceRaysIndirectCommand2KHR structure containing
+    the trace ray parameters.
+
+fname:vkCmdTraceRaysIndirect2KHR behaves similarly to
+flink:vkCmdTraceRaysIndirectKHR except that shader binding table parameters
+as well as dispatch dimensions are read by the device from
+pname:indirectDeviceAddress during execution.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/trace_rays_common.adoc[]
+include::{chapters}/commonvalidity/trace_rays_common_khr.adoc[]
+
+:cmdstruct: VkTraceRaysIndirectCommand2KHR
+:feature: rayTracingPipelineTraceRaysIndirect2
+include::{chapters}/commonvalidity/trace_rays_indirect_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysIndirect2KHR.adoc[]
+--
+
+[open,refpage='VkTraceRaysIndirectCommand2KHR',desc='Structure specifying the parameters of an indirect trace ray command with indirect shader binding tables',type='structs']
+--
+:refpage: VkTraceRaysIndirectCommand2KHR
+
+The sname:VkTraceRaysIndirectCommand2KHR structure is defined as:
+
+include::{generated}/api/structs/VkTraceRaysIndirectCommand2KHR.adoc[]
+
+  * pname:raygenShaderRecordAddress is a basetype:VkDeviceAddress of the ray
+    generation shader binding table record used by this command.
+  * pname:raygenShaderRecordSize is a basetype:VkDeviceSize number of bytes
+    corresponding to the ray generation shader binding table record at base
+    address pname:raygenShaderRecordAddress.
+  * pname:missShaderBindingTableAddress is a basetype:VkDeviceAddress of the
+    first record in the miss shader binding table used by this command.
+  * pname:missShaderBindingTableSize is a basetype:VkDeviceSize number of
+    bytes corresponding to the total size of the miss shader binding table
+    at pname:missShaderBindingTableAddress that may be accessed by this
+    command.
+  * pname:missShaderBindingTableStride is a basetype:VkDeviceSize number of
+    bytes between records of the miss shader binding table.
+  * pname:hitShaderBindingTableAddress is a basetype:VkDeviceAddress of the
+    first record in the hit shader binding table used by this command.
+  * pname:hitShaderBindingTableSize is a basetype:VkDeviceSize number of
+    bytes corresponding to the total size of the hit shader binding table at
+    pname:hitShaderBindingTableAddress that may be accessed by this command.
+  * pname:hitShaderBindingTableStride is a basetype:VkDeviceSize number of
+    bytes between records of the hit shader binding table.
+  * pname:callableShaderBindingTableAddress is a basetype:VkDeviceAddress of
+    the first record in the callable shader binding table used by this
+    command.
+  * pname:callableShaderBindingTableSize is a basetype:VkDeviceSize number
+    of bytes corresponding to the total size of the callable shader binding
+    table at pname:callableShaderBindingTableAddress that may be accessed by
+    this command.
+  * pname:callableShaderBindingTableStride is a basetype:VkDeviceSize number
+    of bytes between records of the callable shader binding table.
+  * pname:width is the width of the ray trace query dimensions.
+  * pname:height is height of the ray trace query dimensions.
+  * pname:depth is depth of the ray trace query dimensions.
+
+The members of sname:VkTraceRaysIndirectCommand2KHR have the same meaning as
+the similarly named parameters of flink:vkCmdTraceRaysKHR.
+
+Indirect shader binding table buffer parameters must satisfy the same memory
+alignment and binding requirements as their counterparts in
+flink:vkCmdTraceRaysIndirectKHR and flink:vkCmdTraceRaysKHR.
+
+.Valid Usage
+****
+:rayGenShaderBindingTableAddress: pname:raygenShaderRecordAddress
+:rayGenShaderBindingTableSize: pname:raygenShaderRecordSize
+:missShaderBindingTableAddress: pname:missShaderBindingTableAddress
+:missShaderBindingTableStride: pname:missShaderBindingTableStride
+:hitShaderBindingTableAddress: pname:hitShaderBindingTableAddress
+:hitShaderBindingTableStride: pname:hitShaderBindingTableStride
+:callableShaderBindingTableAddress: pname:callableShaderBindingTableAddress
+:callableShaderBindingTableStride: pname:callableShaderBindingTableStride
+include::{chapters}/commonvalidity/trace_rays_binding_table.adoc[]
+include::{chapters}/commonvalidity/trace_rays_limits_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkTraceRaysIndirectCommand2KHR.adoc[]
+--
+endif::VK_KHR_ray_tracing_maintenance1[]
+
+endif::VK_KHR_ray_tracing_pipeline[]
+
+
+[[shader-binding-table]]
+== Shader Binding Table
+
+A _shader binding table_ is a resource which establishes the relationship
+between the ray tracing pipeline and the acceleration structures that were
+built for the ray tracing pipeline.
+It indicates the shaders that operate on each geometry in an acceleration
+structure.
+In addition, it contains the resources accessed by each shader, including
+indices of textures, buffer device addresses, and constants.
+The application allocates and manages _shader binding tables_ as
+slink:VkBuffer objects.
+
+Each entry in the shader binding table consists of
+pname:shaderGroupHandleSize bytes of data, either as queried by
+flink:vkGetRayTracingShaderGroupHandlesKHR to refer to those specified
+shaders, or all zeros to refer to a zero shader group.
+A zero shader group behaves as though it is a shader group consisting
+entirely of ename:VK_SHADER_UNUSED_KHR.
+The remainder of the data specified by the stride is application-visible
+data that can be referenced by a code:ShaderRecordBufferKHR block in the
+shader.
+
+The shader binding tables to use in a ray tracing pipeline are passed to the
+ifdef::VK_NV_ray_tracing[]
+flink:vkCmdTraceRaysNV,
+endif::VK_NV_ray_tracing[]
+flink:vkCmdTraceRaysKHR, or flink:vkCmdTraceRaysIndirectKHR commands.
+Shader binding tables are read-only in shaders that are executing on the ray
+tracing pipeline.
+
+Shader variables identified with the code:ShaderRecordBufferKHR storage
+class are used to access the provided shader binding table.
+Such variables must: be:
+
+  * typed as code:OpTypeStruct, or an array of this type,
+  * identified with a code:Block decoration, and
+  * laid out explicitly using the code:Offset, code:ArrayStride, and
+    code:MatrixStride decorations as specified in
+    <<interfaces-resources-layout,Offset and Stride Assignment>>.
+
+The code:Offset decoration for any member of a code:Block-decorated variable
+in the code:ShaderRecordBufferKHR storage class must: not cause the space
+required for that variable to extend outside the range [eq]#[0,
+pname:maxStorageBufferRange)#.
+
+Accesses to the shader binding table from ray tracing pipelines must: be
+<<synchronization-dependencies,synchronized>> with the
+ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+<<synchronization-pipeline-stages, pipeline stage>> and an
+<<synchronization-access-types, access type>> of
+ename:VK_ACCESS_SHADER_READ_BIT.
+
+[NOTE]
+.Note
+====
+Because different shader record buffers can be associated with the same
+shader, a shader variable with code:ShaderRecordBufferKHR storage class will
+not be dynamically uniform if different invocations of the same shader can
+reference different data in the shader record buffer, such as if the same
+shader occurs twice in the shader binding table with a different shader
+record buffer.
+In this case, indexing resources based on values in the
+code:ShaderRecordBufferKHR storage class, the index should be decorated as
+code:NonUniform.
+====
+
+
+[[shader-binding-table-indexing-rules]]
+=== Indexing Rules
+
+In order to execute the correct shaders and access the correct resources
+during a ray tracing dispatch, the implementation must: be able to locate
+shader binding table entries at various stages of execution.
+This is accomplished by defining a set of indexing rules that compute shader
+binding table record positions relative to the buffer's base address in
+memory.
+The application must: organize the contents of the shader binding table's
+memory in a way that application of the indexing rules will lead to correct
+records.
+
+
+==== Ray Generation Shaders
+
+Only one ray generation shader is executed per ray tracing dispatch.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For flink:vkCmdTraceRaysKHR, the location of the ray generation shader is
+specified by the pname:pRaygenShaderBindingTable->deviceAddress parameter
+-- there is no indexing.
+All data accessed must: be less than pname:pRaygenShaderBindingTable->size
+bytes from pname:deviceAddress.
+pname:pRaygenShaderBindingTable->stride is unused, and must: be equal to
+pname:pRaygenShaderBindingTable->size.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+For flink:vkCmdTraceRaysNV, the location of the ray generation shader is
+specified by the pname:raygenShaderBindingTableBuffer and
+pname:raygenShaderBindingOffset parameters -- there is no indexing.
+endif::VK_NV_ray_tracing[]
+
+
+[[shader-binding-table-hit-shader-indexing]]
+==== Hit Shaders
+
+The base for the computation of intersection, any-hit, and closest hit
+shader locations is the code:instanceShaderBindingTableRecordOffset value
+stored with each instance of a top-level acceleration structure
+(slink:VkAccelerationStructureInstanceKHR).
+This value determines the beginning of the shader binding table records for
+a given instance.
+
+In the following rule, code:geometryIndex refers to the
+<<acceleration-structure-geometry-index, geometry index>> of the intersected
+geometry within the instance.
+
+The code:sbtRecordOffset and code:sbtRecordStride values are passed in as
+parameters to
+ifdef::VK_NV_ray_tracing[code:traceNV()]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:traceRayEXT()]
+calls made in the shaders.
+See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
+Specification for more details.
+In SPIR-V, these correspond to the code:SBTOffset and code:SBTStride
+parameters to the
+ifdef::VK_NV_ray_tracing[code:OpTraceRayNV]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
+ifdef::VK_NV_ray_tracing_motion_blur[ or code:OpTraceRayMotionNV]
+instruction.
+
+The result of this computation is then added to
+ifdef::VK_KHR_ray_tracing_pipeline[]
+pname:pHitShaderBindingTable->deviceAddress, a device address passed to
+flink:vkCmdTraceRaysKHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
+ifdef::VK_NV_ray_tracing[]
+pname:hitShaderBindingOffset, a base offset passed to flink:vkCmdTraceRaysNV
+endif::VK_NV_ray_tracing[]
+.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For flink:vkCmdTraceRaysKHR, the complete rule to compute a hit shader
+binding table record address in the pname:pHitShaderBindingTable is:
+
+  {empty}:: [eq]#pname:pHitShaderBindingTable->deviceAddress {plus}
+            pname:pHitShaderBindingTable->stride {times} (
+            code:instanceShaderBindingTableRecordOffset {plus}
+            code:geometryIndex {times} code:sbtRecordStride {plus}
+            code:sbtRecordOffset )#
+
+All data accessed must: be less than pname:pHitShaderBindingTable->size
+bytes from the base address.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+For flink:vkCmdTraceRaysNV, the offset and stride come from direct
+parameters, so the full rule to compute a hit shader binding table record
+address in the pname:hitShaderBindingTableBuffer is:
+
+  {empty}:: [eq]#pname:hitShaderBindingOffset {plus}
+            pname:hitShaderBindingStride {times} (
+            code:instanceShaderBindingTableRecordOffset {plus}
+            code:geometryIndex {times} code:sbtRecordStride {plus}
+            code:sbtRecordOffset )#
+
+endif::VK_NV_ray_tracing[]
+
+
+==== Miss Shaders
+
+A miss shader is executed whenever a ray query fails to find an intersection
+for the given scene geometry.
+Multiple miss shaders may: be executed throughout a ray tracing dispatch.
+
+The base for the computation of miss shader locations is
+ifdef::VK_KHR_ray_tracing_pipeline[]
+pname:pMissShaderBindingTable->deviceAddress, a device address passed into
+flink:vkCmdTraceRaysKHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
+ifdef::VK_NV_ray_tracing[]
+pname:missShaderBindingOffset, a base offset passed into
+flink:vkCmdTraceRaysNV
+endif::VK_NV_ray_tracing[]
+.
+
+The code:missIndex value is passed in as a parameter to
+ifdef::VK_NV_ray_tracing[code:traceNV()]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:traceRayEXT()]
+calls made in the shaders.
+See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
+Specification for more details.
+In SPIR-V, this corresponds to the code:MissIndex parameter to the
+ifdef::VK_NV_ray_tracing[code:OpTraceRayNV]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
+ifdef::VK_NV_ray_tracing_motion_blur[ or code:OpTraceRayMotionNV]
+instruction.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For flink:vkCmdTraceRaysKHR, the complete rule to compute a miss shader
+binding table record address in the pname:pMissShaderBindingTable is:
+
+  {empty}:: [eq]#pname:pMissShaderBindingTable->deviceAddress {plus}
+            pname:pMissShaderBindingTable->stride {times} code:missIndex#
+
+All data accessed must: be less than pname:pMissShaderBindingTable->size
+bytes from the base address.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+For flink:vkCmdTraceRaysNV, the offset and stride come from direct
+parameters, so the full rule to compute a miss shader binding table record
+address in the pname:missShaderBindingTableBuffer is:
+
+  {empty}:: [eq]#pname:missShaderBindingOffset {plus}
+            pname:missShaderBindingStride {times} code:missIndex#
+
+endif::VK_NV_ray_tracing[]
+
+
+==== Callable Shaders
+
+A callable shader is executed when requested by a ray tracing shader.
+Multiple callable shaders may: be executed throughout a ray tracing
+dispatch.
+
+The base for the computation of callable shader locations is
+ifdef::VK_KHR_ray_tracing_pipeline[]
+pname:pCallableShaderBindingTable->deviceAddress, a device address passed
+into flink:vkCmdTraceRaysKHR
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[, or ]
+ifdef::VK_NV_ray_tracing[]
+pname:callableShaderBindingOffset, a base offset passed into
+flink:vkCmdTraceRaysNV
+endif::VK_NV_ray_tracing[]
+.
+
+The code:sbtRecordIndex value is passed in as a parameter to
+ifdef::VK_NV_ray_tracing[code:executeCallableNV()]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:executeCallableEXT()]
+calls made in the shaders.
+See Section 8.19 (Ray Tracing Functions) of the OpenGL Shading Language
+Specification for more details.
+In SPIR-V, this corresponds to the code:SBTIndex parameter to the
+ifdef::VK_NV_ray_tracing[code:OpExecuteCallableNV]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[ or ]
+ifdef::VK_KHR_ray_tracing_pipeline[code:OpExecuteCallableKHR]
+instruction.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For flink:vkCmdTraceRaysKHR, the complete rule to compute a callable shader
+binding table record address in the pname:pCallableShaderBindingTable is:
+
+  {empty}:: [eq]#pname:pCallableShaderBindingTable->deviceAddress {plus}
+            pname:pCallableShaderBindingTable->stride {times}
+            code:sbtRecordIndex#
+
+All data accessed must: be less than pname:pCallableShaderBindingTable->size
+bytes from the base address.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_NV_ray_tracing[]
+For flink:vkCmdTraceRaysNV, the offset and stride come from direct
+parameters, so the full rule to compute a callable shader binding table
+record address in the pname:callableShaderBindingTableBuffer is:
+
+  {empty}:: [eq]#pname:callableShaderBindingOffset {plus}
+            pname:callableShaderBindingStride {times} code:sbtRecordIndex#
+
+endif::VK_NV_ray_tracing[]
+
+
+[[ray-tracing-pipeline-stack]]
+== Ray Tracing Pipeline Stack
+
+Ray tracing pipelines have a potentially large set of shaders which may: be
+invoked in various call chain combinations to perform ray tracing.
+To store parameters for a given shader execution, an implementation may: use
+a stack of data in memory.
+This stack must: be sized to the sum of the stack sizes of all shaders in
+any call chain executed by the application.
+
+If the stack size is not set explicitly, the stack size for a pipeline is:
+
+  {empty}:: [eq]#rayGenStackMax {plus} min(1,
+            pname:maxPipelineRayRecursionDepth) {times}
+            max(closestHitStackMax, missStackMax, intersectionStackMax
+            {plus} anyHitStackMax) {plus} max(0,
+            pname:maxPipelineRayRecursionDepth-1) {times}
+            max(closestHitStackMax, missStackMax) {plus} 2 {times}
+            callableStackMax#
+
+where [eq]#rayGenStackMax#, [eq]#closestHitStackMax#, [eq]#missStackMax#,
+[eq]#anyHitStackMax#, [eq]#intersectionStackMax#, and [eq]#callableStackMax#
+are the maximum stack values queried by the respective shader stages for any
+shaders in any shader groups defined by the pipeline.
+
+This stack size is potentially significant, so an application may: want to
+provide a more accurate stack size after pipeline compilation.
+The value that the application provides is the maximum value of the sum of
+all shaders in a call chain across all possible call chains, taking into
+account any application specific knowledge about the properties of the call
+chains.
+
+[NOTE]
+.Note
+====
+For example, if an application has two types of closest hit and miss shaders
+that it can use but the first level of rays will only use the first kind
+(possibly reflection) and the second level will only use the second kind
+(occlusion or shadow ray, for example) then the application can compute the
+stack size by something similar to:
+
+  {empty}:: [eq]#code:rayGenStack {plus} max(code:closestHit1Stack,
+            code:miss1Stack) {plus} max(code:closestHit2Stack,
+            code:miss2Stack)#
+
+This is guaranteed to be no larger than the default stack size computation
+which assumes that both call levels may be the larger of the two.
+====
+
+
+[[ray-tracing-capture-replay]]
+== Ray Tracing Capture Replay
+
+In a similar way to
+<<features-bufferDeviceAddressCaptureReplay,bufferDeviceAddressCaptureReplay>>,
+the <<features-rayTracingPipelineShaderGroupHandleCaptureReplay,
+pname:rayTracingPipelineShaderGroupHandleCaptureReplay>> feature allows the
+querying of opaque data which can: be used in a future replay.
+
+During the capture phase, capture/replay tools are expected to query opaque
+data for shader group handle replay using
+flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.
+
+Providing the opaque data during replay, using
+slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
+at pipeline creation time, causes the implementation to generate identical
+shader group handles to those in the capture phase, allowing capture/replay
+tools to reuse previously recorded shader binding table buffer contents or
+to obtain the same handles by calling
+flink:vkGetRayTracingCaptureReplayShaderGroupHandlesKHR again.
+
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/raytraversal.adoc b/codegen/vulkan/vulkan-docs-next/chapters/raytraversal.adoc
new file mode 100644
index 0000000..f6426c2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/raytraversal.adoc
@@ -0,0 +1,701 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[ray-traversal]]
+= Ray Traversal
+
+The ray traversal process identifies and handles intersections between a ray
+and geometries in an acceleration structure.
+
+Ray traversal cannot be started by a Vulkan API command directly - a shader
+must execute
+ifdef::VK_KHR_ray_query[code:OpRayQueryProceedKHR]
+ifdef::VK_KHR_ray_query+VK_KHR_ray_tracing_pipeline[or]
+ifdef::VK_KHR_ray_tracing_pipeline[code:OpTraceRayKHR]
+.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+When the <<features-rayTracingPipeline, pname:rayTracingPipeline>> feature
+is enabled, code:OpTraceRayKHR can: be used for <<ray-tracing, ray tracing>>
+in a <<pipelines-ray-tracing, ray tracing pipeline>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_query[]
+When the <<features-rayQuery, pname:rayQuery>> feature is enabled,
+code:OpRayQueryProceedKHR can: be used in any shader stage.
+endif::VK_KHR_ray_query[]
+
+
+[[ray-intersection-candidate-determination]]
+== Ray Intersection Candidate Determination
+
+Once tracing begins, rays are first tested against instances in a top-level
+acceleration structure.
+A ray that intersects an instance will be transformed into the space of the
+instance to continue traversal within that instance; therefore the transform
+matrix stored in the instance must be invertible.
+
+In case multiple instances are intersected by a ray, the ray transformation
+into the space of the instance is invariant under the order in which these
+instances are encountered in the top-level acceleration structure.
+
+[NOTE]
+.Note
+====
+Applying multiple forward and reverse transforms to a ray to transition from
+one instance to another could result in accumulated errors.
+Thus an implementation should behave as if the ray is transformed from the
+origin for each instance independently.
+====
+
+Next, rays are tested against geometries in an bottom-level acceleration
+structure to determine if a hit occurred between them, initially based only
+on their geometric properties (i.e. their vertices).
+The implementation performs similar operations to that of rasterization, but
+with the effective viewport determined by the parameters of the ray, and the
+geometry transformed into a space determined by that viewport.
+
+The vertices of each primitive are transformed from acceleration structure
+space #~as~# to ray space #~r~# according to the ray origin and direction as
+follows:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(
+    \begin{array}{c}
+        x_{r} \\
+        y_{r}\\
+        z_{r}
+    \end{array}
+\right) =
+\left(
+    \begin{matrix}
+        a_x^2(1-c)  + c    & a_xa_y(1-c) - sa_z & a_xa_z(1-c) + sa_y \\
+        a_xa_y(1-c) + sa_z & a_y^2(1-c)  + c    & a_ya_z(1-c) - sa_x \\
+        a_xa_z(1-c) - sa_y & a_ya_z(1-c) + sa_x & a_z^2(1-c)  + c
+    \end{matrix}
+\right)
+\left(
+    \begin{array}{c}
+        x_{as} - o_x \\
+        y_{as} - o_y \\
+        z_{as} - o_z
+    \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+latexmath:[\mathbf{a}] is the axis of rotation from the unnormalized ray
+direction vector latexmath:[\mathbf{d}] to the axis vector
+latexmath:[\mathbf{k}]:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\mathbf{a} = \begin{cases}
+    \frac{\mathbf{d} \times \mathbf{k}}{|| \mathbf{d} \times \mathbf{k} ||} & \mathrm{if}\; || \mathbf{d} \times \mathbf{k} || \ne 0 \\
+    \left(\begin{array}{c}
+    0 \\
+    1 \\
+    0
+    \end{array}
+    \right) & \mathrm{if}\; || \mathbf{d} \times \mathbf{k} || = 0 \\
+  \end{cases}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+latexmath:[\mathit{s}] and latexmath:[\mathit{c}] are the sine and cosine of
+the angle of rotation about latexmath:[\mathbf{a}] from
+latexmath:[\mathbf{d}] to latexmath:[\mathbf{k}]:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\begin{aligned}
+c      &= {{\mathbf{d} \cdot \mathbf{k}}\over{||\mathbf{d}||}} \\
+s      &= \sqrt{1 - c^2}
+\end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+latexmath:[\mathbf{k}] is the unit vector:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\mathbf{k} = \left(
+    \begin{array}{c}
+        0 \\
+        0 \\
+        -1
+    \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+latexmath:[\mathbf{o}] and latexmath:[\mathbf{d}] are the ray origin and
+unnormalized direction, respectively; the vector described by [eq]#x~as~#,
+[eq]#y~as~#, and [eq]#z~as~# is any position in acceleration structure
+space; and the vector described by [eq]#x~r~#, [eq]#y~r~#, and [eq]#z~r~# is
+the same position in ray space.
+
+An _intersection candidate_ is a unique point of intersection between a ray
+and a geometric primitive.
+For any primitive that has within its bounds a position
+latexmath:[\mathbf{xyz_{as}}] such that
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\begin{aligned}
+             x_r &= 0 \\
+             y_r &= 0 \\
+t_\mathit{min} \lt {-{z_r}\over{||\mathbf{d}||}}  &\lt t_\mathit{max}  & \text{if the primitive is a triangle,} \\
+t_\mathit{min} \leq {-{z_r}\over{||\mathbf{d}||}} &\leq t_\mathit{max} & \text{otherwise} \\
+\end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+(where latexmath:[t = {-{z_r}\over{||\mathbf{d}||}}]), an intersection
+candidate exists.
+
+Triangle primitive bounds consist of all points on the plane formed by the
+three vertices and within the bounds of the edges between the vertices,
+subject to the watertightness constraints below.
+AABB primitive bounds consist of all points within an implementation-defined
+bound which includes the specified box.
+
+[NOTE]
+.Note
+====
+The bounds of the AABB including all points internal to the bound implies
+that a ray started within the AABB will hit that AABB.
+====
+
+[[raytraversal-ray-intersection-candidate-diagram]]
+image::{images}/ray_intersection_candidate.svg[align="center",title="Ray intersection candidate",opts="{imageopts}"]
+
+The determination of this condition is performed in an implementation
+specific manner, and may: be performed with floating point operations.
+Due to the complexity and number of operations involved, inaccuracies are
+expected, particularly as the scale of values involved begins to diverge.
+Implementations should: take efforts to maintain as much precision as
+possible.
+
+[NOTE]
+.Note
+====
+One very common case is when geometries are close to each other at some
+distance from the origin in acceleration structure space, where an effect
+similar to "`z-fighting`" is likely to be observed.
+Applications can mitigate this by ensuring their detailed geometries remain
+close to the origin.
+
+Another likely case is when the origin of a ray is set to a position on a
+previously intersected surface, and its [eq]#t~min~# is zero or near zero;
+an intersection may be detected on the emitting surface.
+This case can usually be mitigated by offsetting [eq]#t~min~# slightly.
+====
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+For a motion primitive or a motion instance, the positions for intersection
+are evaluated at the time specified in the code:time parameter to
+code:OpTraceRayMotionNV by interpolating between the two endpoints as
+specified for the given motion type.
+If a motion acceleration structure is traced with code:OpTraceRayKHR, it
+behaves as a code:OpTraceRayMotionNV with code:time of 0.0.
+endif::VK_NV_ray_tracing_motion_blur[]
+
+In the case of AABB geometries, implementations may: increase their size in
+an acceleration structure in order to mitigate precision issues.
+This may: result in false positive intersections being reported to the
+application.
+
+For triangle intersection candidates, the [eq]#b# and [eq]#c#
+<<primsrast-polygon-barycentrics,barycentric coordinates>> on the triangle
+where the above condition is met are made available to future shading.
+ifdef::VK_KHR_ray_tracing_pipeline[]
+If the ray was traced with code:OpTraceRayKHR, these values are available as
+a vector of 2 32-bit floating point values in the code:HitAttributeKHR
+storage class.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+Once an intersection candidate is determined, it proceeds through the
+following operations, in order:
+
+    . <<ray-intersection-culling>>
+    . <<ray-intersection-confirmation>>
+    . <<ray-closest-hit-determination>>
+    . <<ray-result-determination>>
+
+The sections below describe the exact details of these tests.
+There is no ordering guarantee between operations performed on different
+intersection candidates.
+
+
+[[ray-traversal-watertight]]
+=== Watertightness
+
+For a set of triangles with identical transforms, within a single instance:
+
+  * Any set of two or more triangles where all triangles have one vertex
+    with an identical position value, that vertex is a _shared vertex_.
+  * Any set of two triangles with two shared vertices that were specified in
+    the same <<drawing-triangle-lists, winding order>> in each triangle have
+    a _shared edge_ defined by those vertices.
+
+A _closed fan_ is a set of three or more triangles where:
+
+  * All triangles in the set have the same shared vertex as one of their
+    vertices.
+  * All edges that include the above vertex are shared edges.
+  * All above shared edges are shared by exactly two triangles from the set.
+  * No two triangles in the set intersect, except at shared edges.
+  * Every triangle in the set is joined to every other triangle in the set
+    by a series of the above shared edges.
+
+Implementations should: not double-hit or miss when a ray intersects a
+shared edge, or a shared vertex of a closed fan.
+
+
+[[ray-intersection-culling]]
+== Ray Intersection Culling
+
+Candidate intersections go through several phases of culling before
+confirmation as an actual hit.
+There is no particular ordering dependency between the different culling
+operations.
+
+
+[[ray-traversal-culling-primitive]]
+=== Ray Primitive Culling
+
+If the <<features-rayTraversalPrimitiveCulling,
+pname:rayTraversalPrimitiveCulling>> or <<features-rayQuery,
+pname:rayQuery>> features are enabled, the code:SkipTrianglesKHR and
+code:SkipAABBsKHR ray flags can: be specified when tracing a ray.
+code:SkipTrianglesKHR and code:SkipAABBsKHR are mutually exclusive.
+code:SkipTrianglesKHR is also mutually exclusive with
+code:CullBackFacingTrianglesKHR and code:CullFrontFacingTrianglesKHR.
+
+If code:SkipTrianglesKHR was included in the `Ray Flags` operand of the ray
+trace instruction, and the intersection is with a triangle primitive, the
+intersection is dropped, and no further processing of this intersection
+occurs.
+If ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR was included
+in the pipeline, traversal with code:OpTraceRayKHR calls will all behave as
+if code:SkipTrianglesKHR was included in its `Ray Flags` operand.
+
+If code:SkipAABBsKHR was included in the `Ray Flags` operand of the ray
+trace instruction, and the intersection is with an AABB primitive, the
+intersection is dropped, and no further processing of this intersection
+occurs.
+If ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR was included in
+the pipeline, traversal with code:OpTraceRayKHR calls will all behave as if
+code:SkipAABBsKHR was included in its `Ray Flags` operand.
+
+
+=== Ray Mask Culling
+
+Instances can: be made invisible to particular rays based on the value of
+slink:VkAccelerationStructureInstanceKHR::pname:mask used to add that
+instance to a top-level acceleration structure, and the `Cull Mask`
+parameter used to trace the ray.
+
+For the instance which is intersected, if [eq]#pname:mask & `Cull Mask` ==
+0#, the intersection is dropped, and no further processing occurs.
+
+
+[[ray-traversal-culling-face]]
+=== Ray Face Culling
+
+As in <<primsrast-polygons-basic,polygon rasterization>>, one of the stages
+of ray traversal is to determine if a triangle primitive is back- or
+front-facing, and primitives can: be culled based on that facing.
+
+If the intersection candidate is with an AABB primitive, this operation is
+skipped.
+
+.Determination
+
+When a ray intersects a triangle primitive, the order that vertices are
+specified for the polygon affects whether the ray intersects the front or
+back face.
+Front or back facing is determined in the same way as they are for
+<<primsrast-polygons-basic,rasterization>>, based on the sign of the
+polygon's area but using the ray space coordinates instead of framebuffer
+coordinates.
+One way to compute this area is:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = -{1 \over 2}\sum_{i=0}^{n-1}
+      x_r^i y_r^{i \oplus 1} -
+      x_r^{i \oplus 1} y_r^i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where latexmath:[x_r^i] and latexmath:[y_r^i] are the [eq]#x# and [eq]#y#
+<<ray-intersection-candidate-determination,ray space coordinates>> of the
+[eq]##i##th vertex of the [eq]#n#-vertex polygon (vertices are numbered
+starting at zero for the purposes of this computation) and [eq]#i {oplus} 1#
+is [eq]#(i {plus} 1) mod n#.
+
+By default, if [eq]#a# is negative then the intersection is with the front
+face of the triangle, otherwise it is with the back face.
+If ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR is included in
+slink:VkAccelerationStructureInstanceKHR::pname:flags for the instance
+containing the intersected triangle, this determination is reversed.
+Additionally, if [eq]#a# is 0, the intersection candidate is treated as not
+intersecting with any face, irrespective of the sign.
+
+[NOTE]
+.Note
+====
+In a left-handed coordinate system, an intersection will be with the front
+face of a triangle if the vertices of the triangle, as defined in index
+order, appear from the ray's perspective in a clockwise rotation order.
+ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR was previously
+annotated as
+ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR because
+of this.
+====
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+If the ray was traced with code:OpTraceRayKHR, the code:HitKindKHR built-in
+is set to code:HitKindFrontFacingTriangleKHR if the intersection is with
+front-facing geometry, and code:HitKindBackFacingTriangleKHR if the
+intersection is with back-facing geometry, for shader stages considering
+this intersection.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_query[]
+If the ray was traced with code:OpRayQueryProceedKHR,
+code:OpRayQueryGetIntersectionFrontFaceKHR will return true for intersection
+candidates with front faces, or false for back faces.
+endif::VK_KHR_ray_query[]
+
+.Culling
+
+If code:CullBackFacingTrianglesKHR was included in the `Ray Flags` parameter
+of the ray trace instruction, and the intersection is determined as with the
+back face of a triangle primitive, the intersection is dropped, and no
+further processing of this intersection occurs.
+
+If code:CullFrontFacingTrianglesKHR was included in the `Ray Flags`
+parameter of the ray trace instruction, and the intersection is determined
+as with the front face of a triangle primitive, the intersection is dropped,
+and no further processing of this intersection occurs.
+
+This culling is disabled if
+ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR was included
+in slink:VkAccelerationStructureInstanceKHR::pname:flags for the instance
+which the intersected geometry belongs to.
+
+Intersection candidates that have not intersected with any face ([eq]#a ==
+0#) are unconditionally culled, irrespective of ray flags and geometry
+instance flags.
+
+The code:CullBackFacingTrianglesKHR and code:CullFrontFacingTrianglesKHR
+`Ray Flags` are mutually exclusive.
+
+
+=== Ray Opacity Culling
+
+Each geometry in the acceleration structure may: be considered either opaque
+or not.
+Opaque geometries continue through traversal as normal, whereas non-opaque
+geometries need to be either confirmed or discarded by shader code.
+Intersection candidates can: also be culled based on their opacity.
+
+.Determination
+
+Each individual intersection candidate is initially determined as opaque if
+ename:VK_GEOMETRY_OPAQUE_BIT_KHR was included in the
+slink:VkAccelerationStructureGeometryKHR::pname:flags when the geometry it
+intersected with was built, otherwise it is considered non-opaque.
+
+ifdef::VK_EXT_opacity_micromap[]
+If the geometry includes an opacity micromap, the opacity of the
+intersection at this point is instead derived as described in
+<<ray-opacity-micromap,Ray Opacity Micromap>>.
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+If the intersection candidate was generated by an <<shaders-intersection,
+intersection shader>>, the intersection is initially considered to have
+opacity matching the AABB candidate that it was generated from.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+However, this opacity can be overridden when it is built into an instance.
+Setting ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR in
+slink:VkAccelerationStructureInstanceKHR::pname:flags will force all
+geometries in the instance to be considered opaque.
+Similarly, setting ename:VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR will
+force all geometries in the instance to be considered non-opaque.
+
+This can again be overridden by including code:OpaqueKHR or code:NoOpaqueKHR
+in the `Ray Flags` parameter when tracing a ray.
+code:OpaqueKHR forces all geometries to behave as if they are opaque,
+regardless of their build parameters.
+Similarly, code:NoOpaqueKHR forces all geometries to behave as if they are
+non-opaque.
+
+ifdef::VK_KHR_ray_query[]
+If the ray was traced with code:OpRayQueryProceedKHR, to determine the
+opacity of AABB intersection candidates,
+code:OpRayQueryGetIntersectionCandidateAABBOpaqueKHR can: be used.
+This instruction will return code:true for opaque intersection candidates,
+and code:false for non-opaque intersection candidates.
+endif::VK_KHR_ray_query[]
+
+.Culling
+
+If code:CullOpaqueKHR is included in the `Ray Flags` parameter when tracing
+a ray, an intersection with a geometry that is considered opaque is dropped,
+and no further processing occurs.
+
+If code:CullNoOpaqueKHR is included in the `Ray Flags` parameter when
+tracing a ray, an intersection with a geometry that is considered non-opaque
+is dropped, and no further processing occurs.
+
+The code:OpaqueKHR, code:NoOpaqueKHR, code:CullOpaqueKHR, and
+code:CullNoOpaqueKHR `Ray Flags` are mutually exclusive.
+
+ifdef::VK_EXT_opacity_micromap[]
+[[ray-opacity-micromap]]
+=== Ray Opacity Micromap
+
+A ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR geometry in the acceleration
+structure may: have an opacity micromap associated with it to give
+finer-grained opacity information.
+
+If the intersection candidate is with a geometry with an associated opacity
+micromap and ename:VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT is not
+set in its instance then the micromap is used to determine geometry opacity
+instead of the ename:VK_GEOMETRY_OPAQUE_BIT_KHR flag in the geometry.
+
+The opacity information in the micromap object is accessed using the
+candidate intersection [eq]#u# and [eq]#v# coordinates.
+The integer [eq]#u# and [eq]#v# are computed from [eq]#{lfloor}u{rfloor}
+{plus} {lfloor}v{rfloor}#, clamping [eq]#{lfloor}u{rfloor}# as needed to
+keep the sum less than or equal to [eq]#1 << subdivisionlevel#.
+These values are mapped into a linear index with a space filling curve which
+is defined recursively by traversing into the sub-triangle nearest vertex 0,
+then the middle triangle with ordering flipped, then nearest vertex 1 then
+nearest vertex 2.
+
+image::{images}/micromap-subd.svg[align="center",title="Example ordering for micromap data",align="center",opts="{imageopts}"]
+
+[NOTE]
+.Note
+====
+This encoding is spatially coherent, purely hierarchical, and allows a
+bit-parallel conversion between barycentric address and index values.
+
+See the appendix for reference code implementing this mapping.
+====
+
+The result of the opacity micromap lookup and operations is to treat the
+intersection as opaque, non-opaque, or ignored.
+The interpretation of the values depends on
+ename:VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT in the
+instance of the candidate intersection or
+ename:ForceOpacityMicromap2StateEXT ray flags on the ray.
+If either is set, the opacity micromap information is interpreted in 2 state
+override mode.
+If the result of the micromap lookup is to treat the intersection candidate
+as ignored, no further processing of that candidate is done.
+
+If the associated opacity micromap has format
+ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT, each element of the micromap
+is represented by a single bit at the index derived above.
+
+If the associated opacity micromap has format
+ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT, each element is represented by
+a two bit value at the index derived above.
+
+
+[options="header"]
+|====
+| 4 State value | 2 State value | Special index value | 2 State override | Result
+| 0 | 0 | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT         | Y | Ignored
+| 0 | 0 | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT         | N | Ignored
+| 1 | 1 | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT              | Y | Opaque
+| 1 | 1 | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT              | N | Opaque
+| 2 |   | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT | Y | Ignored
+| 2 |   | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT | N | Non-opaque
+| 3 |   | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT      | Y | Opaque
+| 3 |   | ename:VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT      | N | Non-opaque
+|====
+
+
+endif::VK_EXT_opacity_micromap[]
+
+
+[[ray-intersection-confirmation]]
+== Ray Intersection Confirmation
+
+Depending on the opacity of intersected geometry and whether it is a
+triangle or an AABB, candidate intersections are further processed to
+determine the eventual hit result.
+Candidates generated from AABB intersections run through the same
+confirmation process as triangle hits.
+
+
+=== AABB Intersection Candidates
+
+For an intersection candidate with an AABB geometry generated by
+<<ray-intersection-candidate-determination>>, shader code is executed to
+determine whether any hits should be reported to the traversal
+infrastructure; no further processing of this intersection candidate occurs.
+The occurrence of an AABB intersection candidate does not guarantee the ray
+intersects the primitive bounds.
+To avoid propagating false intersections the application should: verify the
+intersection candidate before reporting any hits.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+If the ray was traced with code:OpTraceRayKHR, an <<shaders-intersection,
+intersection shader>> is invoked from the <<shader-binding-table>> according
+to the <<shader-binding-table-indexing-rules, specified indexing>> for the
+intersected geometry.
+If this shader calls code:OpReportIntersectionKHR, a new intersection
+candidate is generated as described
+<<aabb-intersection-candidate-generation, below>>.
+If the intersection shader is ename:VK_SHADER_UNUSED_KHR (which is only
+allowed for a zero shader group) then no further processing of the
+intersection candidate occurs.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+[[aabb-intersection-candidate-generation]]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+Each new candidate generated as a result of this processing is a generated
+intersection candidate that intersects the AABB geometry, with a [eq]#t#
+value equal to the `Hit` parameter of the code:OpReportIntersectionKHR
+instruction.
+The new generated candidate is then independently run through
+<<ray-intersection-confirmation>> as a
+<<ray-triangle-and-generated-intersection-candidates, generated
+intersection>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_query[]
+If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
+the shader which executed code:OpRayQueryProceedKHR, returning code:true.
+The resulting ray query has a candidate intersection type of
+code:RayQueryCandidateIntersectionAABBKHR.
+code:OpRayQueryGenerateIntersectionKHR can: be called to commit a new
+intersection candidate with committed intersection type of
+code:RayQueryCommittedIntersectionGeneratedKHR.
+Further ray query processing can: be continued by executing
+code:OpRayQueryProceedKHR with the same ray query, or intersection can: be
+terminated with code:OpRayQueryTerminateKHR.
+endif::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[]
+Unlike rays traced with code:OpTraceRayKHR, candidates generated in this way
+skip generated intersection candidate confirmation; applications should:
+make this determination before generating the intersection.
+endif::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_query[]
+
+This operation may: be executed multiple times for the same intersection
+candidate.
+
+
+[[ray-triangle-and-generated-intersection-candidates]]
+=== Triangle and Generated Intersection Candidates
+
+For triangle and <<aabb-intersection-candidate-generation, generated
+intersection candidates>>, additional shader code may: be executed based on
+the intersection's opacity.
+
+If the intersection is opaque, the candidate is immediately confirmed as a
+valid hit and passes to the next stage of processing.
+
+For non-opaque intersection candidates, shader code is executed to determine
+whether a hit occurred or not.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+If the ray was traced with code:OpTraceRayKHR, an <<shaders-any-hit, any-hit
+shader>> is invoked from the <<shader-binding-table>> according to the
+specified indexing.
+If this shader calls code:OpIgnoreIntersectionKHR, the candidate is dropped
+and no further processing of the candidate occurs.
+If the <<shaders-any-hit, any-hit shader>> identified is
+ename:VK_SHADER_UNUSED_KHR, the candidate is immediately confirmed as a
+valid hit and passes to the next stage of processing.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_query[]
+If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
+the shader which executed code:OpRayQueryProceedKHR, returning code:true.
+As only triangle candidates participate in this operation with ray queries,
+the resulting candidate intersection type is always
+code:RayQueryCandidateIntersectionTriangleKHR.
+code:OpRayQueryConfirmIntersectionKHR can: be called on the ray query to
+confirm the candidate as a hit with committed intersection type of
+code:RayQueryCommittedIntersectionTriangleKHR.
+Further ray query processing can: be continued by executing
+code:OpRayQueryProceedKHR with the same ray query, or intersection can: be
+terminated with code:OpRayQueryTerminateKHR.
+If code:OpRayQueryConfirmIntersectionKHR has not been executed, the
+candidate is dropped and no further processing of the candidate occurs.
+endif::VK_KHR_ray_query[]
+
+This operation may: be executed multiple times for the same intersection
+candidate unless ename:VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR
+was specified for the intersected geometry.
+
+
+[[ray-closest-hit-determination]]
+== Ray Closest Hit Determination
+
+Unless the ray was traced with the code:TerminateOnFirstHitKHR ray flag, the
+implementation must: track the closest confirmed hit until all geometries
+have been tested and either confirmed or dropped.
+
+After an intersection candidate is confirmed, its [eq]#t# value is compared
+to [eq]#t~max~# to determine which intersection is closer, where [eq]#t# is
+the parametric distance along the ray at which the intersection occurred.
+
+  * If [eq]#t < t~max~#, [eq]#t~max~# is set to [eq]#t# and the candidate is
+    set as the current closest hit.
+  * If [eq]#t > t~max~#, the candidate is dropped and no further processing
+    of that candidate occurs.
+  * If [eq]#t = t~max~#, the candidate may: be set as the current closest
+    hit or dropped.
+
+If code:TerminateOnFirstHitKHR was included in the `Ray Flags` used to trace
+the ray, once the first hit is confirmed, the ray trace is terminated.
+
+
+[[ray-result-determination]]
+== Ray Result Determination
+
+Once all candidates have finished processing the prior stages, or if the ray
+is forcibly terminated, the final result of the ray trace is determined.
+
+If a closest hit result was identified by <<ray-closest-hit-determination>>,
+a closest hit has occurred, otherwise the final result is a miss.
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+For rays traced with code:OpTraceRayKHR, if a closest hit result was
+identified, a <<shaders-closest-hit, closest hit shader>> is invoked from
+the <<shader-binding-table>> according to the
+<<shader-binding-table-indexing-rules, specified indexing>> for the
+intersected geometry.
+Control returns to the shader that executed code:OpTraceRayKHR once this
+shader returns.
+This shader is skipped if either the ray flags included
+code:SkipClosestHitShaderKHR, or if the <<shaders-closest-hit, closest hit
+shader>> identified is ename:VK_SHADER_UNUSED_KHR.
+
+For rays traced with code:OpTraceRayKHR where no hit result was identified,
+the <<shaders-miss, miss shader>> identified by the `Miss Index` parameter
+of code:OpTraceRayKHR is invoked.
+Control returns to the shader that executed code:OpTraceRayKHR once this
+shader returns.
+This shader is skipped if the miss shader identified is
+ename:VK_SHADER_UNUSED_KHR.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_ray_query[]
+If the ray was traced with code:OpRayQueryProceedKHR, control is returned to
+the shader which executed code:OpRayQueryProceedKHR, returning code:false.
+If a closest hit was identified by <<ray-closest-hit-determination>>, the
+ray query will now have a committed intersection type of
+code:RayQueryCommittedIntersectionGeneratedKHR or
+code:RayQueryCommittedIntersectionTriangleKHR.
+If no closest hit was identified, the committed intersection type will be
+code:RayQueryCommittedIntersectionNoneKHR.
+
+No further processing of a ray query occurs after this result is determined.
+endif::VK_KHR_ray_query[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/renderpass.adoc b/codegen/vulkan/vulkan-docs-next/chapters/renderpass.adoc
new file mode 100644
index 0000000..4a71b47
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/renderpass.adoc
@@ -0,0 +1,7073 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[renderpass]]
+= Render Pass
+
+<<drawing, Draw commands>> must: be recorded within a _render pass
+instance_.
+Each render pass instance defines a set of image resources, referred to as
+_attachments_, used during rendering.
+
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+[open,refpage='vkCmdBeginRendering',desc='Begin a dynamic render pass instance',type='protos',alias='vkCmdBeginRenderingKHR']
+--
+To begin a render pass instance, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdBeginRendering.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_dynamic_rendering[or the equivalent command]
+
+ifdef::VK_KHR_dynamic_rendering[]
+include::{generated}/api/protos/vkCmdBeginRenderingKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pRenderingInfo is a pointer to a slink:VkRenderingInfo structure
+    specifying details of the render pass instance to begin.
+
+After beginning a render pass instance, the command buffer is ready to
+record <<drawing,draw commands>>.
+
+If pname:pRenderingInfo->flags includes ename:VK_RENDERING_RESUMING_BIT then
+this render pass is resumed from a render pass instance that has been
+suspended earlier in <<synchronization-submission-order, submission order>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginRendering-dynamicRendering-06446]]
+    The <<features-dynamicRendering, pname:dynamicRendering>> feature must:
+    be enabled
+  * [[VUID-vkCmdBeginRendering-commandBuffer-06068]]
+    If pname:commandBuffer is a secondary command buffer,
+ifdef::VK_EXT_nested_command_buffer[]
+    and the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>
+    feature is not enabled,
+endif::VK_EXT_nested_command_buffer[]
+    pname:pRenderingInfo->flags must: not include
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT
+****
+
+include::{generated}/validity/protos/vkCmdBeginRendering.adoc[]
+--
+
+[open,refpage='VkRenderingInfo',desc='Structure specifying render pass instance begin info',type='structs',alias='VkRenderingInfoKHR']
+--
+The sname:VkRenderingInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderingInfo.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderingInfoKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkRenderingFlagBits.
+  * pname:renderArea is the render area that is affected by the render pass
+    instance.
+  * pname:layerCount is the number of layers rendered to in each attachment
+    when pname:viewMask is `0`.
+  * pname:viewMask is the view mask indicating the indices of attachment
+    layers that will be rendered when it is not `0`.
+  * pname:colorAttachmentCount is the number of elements in
+    pname:pColorAttachments.
+  * pname:pColorAttachments is a pointer to an array of
+    pname:colorAttachmentCount slink:VkRenderingAttachmentInfo structures
+    describing any color attachments used.
+  * pname:pDepthAttachment is a pointer to a slink:VkRenderingAttachmentInfo
+    structure describing a depth attachment.
+  * pname:pStencilAttachment is a pointer to a
+    slink:VkRenderingAttachmentInfo structure describing a stencil
+    attachment.
+
+ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
+If pname:viewMask is not `0`, multiview is enabled.
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+
+ifdef::VK_KHR_device_group,VK_VERSION_1_1[]
+If there is an instance of slink:VkDeviceGroupRenderPassBeginInfo included
+in the pname:pNext chain and its pname:deviceRenderAreaCount member is not
+`0`, then pname:renderArea is ignored, and the render area is defined
+per-device by that structure.
+endif::VK_KHR_device_group,VK_VERSION_1_1[]
+
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+If multiview is enabled, and the <<features-multiview-per-view-render-areas,
+pname:multiviewPerViewRenderAreas>> feature is enabled, and there is an
+instance of slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
+included in the pname:pNext chain with pname:perViewRenderAreaCount not
+equal to `0`, then the elements of
+slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM::pname:pPerViewRenderAreas
+override pname:renderArea and define a render area for each view.
+In this case, pname:renderArea must: be set to an area at least as large as
+the union of all the per-view render areas.
+endif::VK_QCOM_multiview_per_view_render_areas[]
+
+Each element of the pname:pColorAttachments array corresponds to an output
+location in the shader, i.e. if the shader declares an output variable
+decorated with a code:Location value of *X*, then it uses the attachment
+provided in pname:pColorAttachments[*X*].
+If the pname:imageView member of any element of pname:pColorAttachments is
+dlink:VK_NULL_HANDLE,
+ifdef::VK_ANDROID_external_format_resolve[]
+and pname:resolveMode is not
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+endif::VK_ANDROID_external_format_resolve[]
+writes to the corresponding location by a fragment are discarded.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingInfo-viewMask-06069]]
+    If pname:viewMask is `0`, pname:layerCount must: not be `0`
+  * [[VUID-VkRenderingInfo-multisampledRenderToSingleSampled-06857]]
+    If none of the `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature are enabled,
+    pname:imageView members of pname:pDepthAttachment,
+    pname:pStencilAttachment, and elements of pname:pColorAttachments that
+    are not dlink:VK_NULL_HANDLE must: have been created with the same
+    pname:sampleCount
+  * [[VUID-VkRenderingInfo-None-08994]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceRenderAreaCount
+    is 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.extent.width must: be greater than 0
+  * [[VUID-VkRenderingInfo-None-08995]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceRenderAreaCount
+    is 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.extent.height must: be greater than 0
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderingInfo-imageView-06858]]
+    If
+    <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+    is enabled, then all attachments referenced by pname:imageView members
+    of pname:pDepthAttachment, pname:pStencilAttachment, and elements of
+    pname:pColorAttachments that are not dlink:VK_NULL_HANDLE must: have a
+    sample count that is either ename:VK_SAMPLE_COUNT_1_BIT or equal to
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+  * [[VUID-VkRenderingInfo-imageView-06859]]
+    If
+    <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+    is enabled, then all attachments referenced by pname:imageView members
+    of pname:pDepthAttachment, pname:pStencilAttachment, and elements of
+    pname:pColorAttachments that are not dlink:VK_NULL_HANDLE and have a
+    sample count of ename:VK_SAMPLE_COUNT_1_BIT must: have been created with
+    ename:VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT in
+    their slink:VkImageCreateInfo::pname:flags
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderingInfo-pNext-06077]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfo-pNext-06078]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfo-pNext-07815]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the sum of pname:renderArea.extent.width and pname:renderArea.offset.x
+    must: be less than or equal to
+    <<limits-maxFramebufferWidth,pname:maxFramebufferWidth>>
+  * [[VUID-VkRenderingInfo-pNext-07816]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the sum of pname:renderArea.extent.height and pname:renderArea.offset.y
+    must: be less than or equal to
+    <<limits-maxFramebufferWidth,pname:maxFramebufferHeight>>
+  * [[VUID-VkRenderingInfo-pNext-06079]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the width of the pname:imageView member of any element of
+    pname:pColorAttachments, pname:pDepthAttachment, or
+    pname:pStencilAttachment that is not dlink:VK_NULL_HANDLE must: be
+    greater than or equal to [eq]#pname:renderArea.offset.x {plus}
+    pname:renderArea.extent.width#
+  * [[VUID-VkRenderingInfo-pNext-06080]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the height of the pname:imageView member of any element of
+    pname:pColorAttachments, pname:pDepthAttachment, or
+    pname:pStencilAttachment that is not dlink:VK_NULL_HANDLE must: be
+    greater than or equal to [eq]#pname:renderArea.offset.y {plus}
+    pname:renderArea.extent.height#
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-pNext-06083]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the width of the pname:imageView
+    member of any element of pname:pColorAttachments,
+    pname:pDepthAttachment, or pname:pStencilAttachment that is not
+    dlink:VK_NULL_HANDLE must: be greater than or equal to the sum of the
+    pname:offset.x and pname:extent.width members of each element of
+    pname:pDeviceRenderAreas
+  * [[VUID-VkRenderingInfo-pNext-06084]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the height of the
+    pname:imageView member of any element of pname:pColorAttachments,
+    pname:pDepthAttachment, or pname:pStencilAttachment that is not
+    dlink:VK_NULL_HANDLE must: be greater than or equal to the sum of the
+    pname:offset.y and pname:extent.height members of each element of
+    pname:pDeviceRenderAreas
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06085]]
+    If neither pname:pDepthAttachment or pname:pStencilAttachment are `NULL`
+    and the pname:imageView member of either structure is not
+    dlink:VK_NULL_HANDLE, the pname:imageView member of each structure must:
+    be the same
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06086]]
+    If neither pname:pDepthAttachment or pname:pStencilAttachment are
+    `NULL`, and the pname:resolveMode member of each is not
+    ename:VK_RESOLVE_MODE_NONE, the pname:resolveImageView member of each
+    structure must: be the same
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06087]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
+    that pname:imageView must: have been created with
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06547]]
+    If pname:pDepthAttachment is not `NULL` and
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pDepthAttachment->imageView must: have been created with a format
+    that includes a depth component
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06088]]
+    If pname:pDepthAttachment is not `NULL` and
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pDepthAttachment->imageView must: have been created with
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06548]]
+    If pname:pStencilAttachment is not `NULL` and
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pStencilAttachment->imageView must: have been created with a
+    format that includes a stencil aspect
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06089]]
+    If pname:pStencilAttachment is not `NULL` and
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pStencilAttachment->imageView must: have been created with a
+    stencil usage including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06090]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
+    the pname:layout member of that element of pname:pColorAttachments must:
+    not be ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06091]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
+    the pname:resolveMode member of that element of pname:pColorAttachments
+    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
+    must: not be ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06092]]
+    If pname:pDepthAttachment is not `NULL` and
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pDepthAttachment->layout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06093]]
+    If pname:pDepthAttachment is not `NULL`,
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pDepthAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pDepthAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06094]]
+    If pname:pStencilAttachment is not `NULL` and
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pStencilAttachment->layout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06095]]
+    If pname:pStencilAttachment is not `NULL`,
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pStencilAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pStencilAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+ifdef::VK_KHR_maintenance2,VK_VERSION_1_1[]
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06096]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
+    the pname:layout member of that element of pname:pColorAttachments must:
+    not be ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06097]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
+    the pname:resolveMode member of that element of pname:pColorAttachments
+    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
+    must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06098]]
+    If pname:pDepthAttachment is not `NULL`,
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pDepthAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pDepthAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06099]]
+    If pname:pStencilAttachment is not `NULL`,
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pStencilAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pStencilAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_KHR_maintenance2,VK_VERSION_1_1[]
+ifdef::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06100]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE,
+    the pname:layout member of that element of pname:pColorAttachments must:
+    not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06101]]
+    If pname:colorAttachmentCount is not `0` and the pname:imageView member
+    of an element of pname:pColorAttachments is not dlink:VK_NULL_HANDLE, if
+    the pname:resolveMode member of that element of pname:pColorAttachments
+    is not ename:VK_RESOLVE_MODE_NONE, its pname:resolveImageLayout member
+    must: not be ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pDepthAttachment-07732]]
+    If pname:pDepthAttachment is not `NULL` and
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pDepthAttachment->layout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pDepthAttachment-07733]]
+    If pname:pDepthAttachment is not `NULL`,
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pDepthAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pDepthAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pStencilAttachment-07734]]
+    If pname:pStencilAttachment is not `NULL` and
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pStencilAttachment->layout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderingInfo-pStencilAttachment-07735]]
+    If pname:pStencilAttachment is not `NULL`,
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE, and
+    pname:pStencilAttachment->resolveMode is not ename:VK_RESOLVE_MODE_NONE,
+    pname:pStencilAttachment->resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+endif::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06102]]
+    If pname:pDepthAttachment is not `NULL` and
+    pname:pDepthAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pDepthAttachment->resolveMode must: be one of the bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedDepthResolveModes
+  * [[VUID-VkRenderingInfo-pStencilAttachment-06103]]
+    If pname:pStencilAttachment is not `NULL` and
+    pname:pStencilAttachment->imageView is not dlink:VK_NULL_HANDLE,
+    pname:pStencilAttachment->resolveMode must: be one of the bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedStencilResolveModes
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06104]]
+    If pname:pDepthAttachment or pname:pStencilAttachment are both not
+    `NULL`, pname:pDepthAttachment->imageView and
+    pname:pStencilAttachment->imageView are both not dlink:VK_NULL_HANDLE,
+    and
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
+    is ename:VK_FALSE, the pname:resolveMode of both structures must: be the
+    same value
+  * [[VUID-VkRenderingInfo-pDepthAttachment-06105]]
+    If pname:pDepthAttachment or pname:pStencilAttachment are both not
+    `NULL`, pname:pDepthAttachment->imageView and
+    pname:pStencilAttachment->imageView are both not dlink:VK_NULL_HANDLE,
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
+    is ename:VK_FALSE, and the pname:resolveMode of neither structure is
+    ename:VK_RESOLVE_MODE_NONE, the pname:resolveMode of both structures
+    must: be the same value
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-06106]]
+    pname:colorAttachmentCount must: be less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxColorAttachments
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderingInfo-imageView-06107]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and the
+    <<features-fragmentDensityMapNonSubsampledImages,
+    pname:fragmentDensityMapNonSubsampledImages>> feature is not enabled,
+    valid pname:imageView and pname:resolveImageView members of
+    pname:pDepthAttachment, pname:pStencilAttachment, and each element of
+    pname:pColorAttachments must: be a slink:VkImageView created with
+    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderingInfo-imageView-06108]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
+    is not `0`, pname:imageView must: have a pname:layerCount greater than
+    or equal to the index of the most significant bit in pname:viewMask
+  * [[VUID-VkRenderingInfo-imageView-06109]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
+    is `0`, pname:imageView must: have a pname:layerCount equal to `1`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderingInfo-pNext-06112]]
+    If
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0 and
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
+    must: have a width greater than or equal to
+    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkRenderingInfo-pNext-06114]]
+    If
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0 and
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
+    must: have a height greater than or equal to
+    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-pNext-06113]]
+    If the pname:pNext chain contains a
+    slink:VkDeviceGroupRenderPassBeginInfo structure, its
+    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
+    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
+    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
+    pname:imageView must: have a width greater than or equal to
+    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
+    for each element of pname:pDeviceRenderAreas
+  * [[VUID-VkRenderingInfo-pNext-06115]]
+    If the pname:pNext chain contains a
+    slink:VkDeviceGroupRenderPassBeginInfo structure, its
+    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
+    member of a slink:VkRenderingFragmentDensityMapAttachmentInfoEXT
+    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
+    pname:imageView must: have a height greater than or equal to
+    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
+    for each element of pname:pDeviceRenderAreas
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-imageView-06116]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
+    equal to the pname:imageView or pname:resolveImageView member of
+    pname:pDepthAttachment, pname:pStencilAttachment, or any element of
+    pname:pColorAttachments
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderingInfo-pNext-06119]]
+    If
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0 and
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
+    must: have a width greater than or equal to
+    latexmath:[\left\lceil{\frac{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkRenderingInfo-pNext-06121]]
+    If
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0 and
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, pname:imageView
+    must: have a height greater than or equal to
+    latexmath:[\left\lceil{\frac{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-pNext-06120]]
+    If the pname:pNext chain contains a
+    slink:VkDeviceGroupRenderPassBeginInfo structure, its
+    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
+    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
+    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
+    pname:imageView must: have a width greater than or equal to
+    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
+    for each element of pname:pDeviceRenderAreas
+  * [[VUID-VkRenderingInfo-pNext-06122]]
+    If the pname:pNext chain contains a
+    slink:VkDeviceGroupRenderPassBeginInfo structure, its
+    pname:deviceRenderAreaCount member is not 0, and the pname:imageView
+    member of a slink:VkRenderingFragmentShadingRateAttachmentInfoKHR
+    structure included in the pname:pNext chain is not dlink:VK_NULL_HANDLE,
+    pname:imageView must: have a height greater than or equal to
+    latexmath:[\left\lceil{\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
+    for each element of pname:pDeviceRenderAreas
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfo-layerCount-07817]]
+    pname:layerCount must: be less than or equal to
+    <<limits-maxFramebufferLayers, pname:maxFramebufferLayers>>
+  * [[VUID-VkRenderingInfo-imageView-06123]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
+    is `0`, pname:imageView must: have a pname:layerCount that is either
+    equal to `1` or greater than or equal to pname:layerCount
+  * [[VUID-VkRenderingInfo-imageView-06124]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, and pname:viewMask
+    is not `0`, pname:imageView must: have a pname:layerCount that either
+    equal to `1` or greater than or equal to the index of the most
+    significant bit in pname:viewMask
+  * [[VUID-VkRenderingInfo-imageView-06125]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
+    equal to the pname:imageView or pname:resolveImageView member of
+    pname:pDepthAttachment, pname:pStencilAttachment, or any element of
+    pname:pColorAttachments
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderingInfo-imageView-06126]]
+    If the pname:imageView member of a
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR structure included
+    in the pname:pNext chain is not dlink:VK_NULL_HANDLE, it must: not be
+    equal to the pname:imageView member of a
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT structure included
+    in the pname:pNext chain
+endif::VK_EXT_fragment_density_map[]
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderingInfo-multiview-06127]]
+    If the <<features-multiview, pname:multiview>> feature is not enabled,
+    pname:viewMask must: be `0`
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderingInfo-viewMask-06128]]
+    The index of the most significant bit in pname:viewMask must: be less
+    than <<limits-maxMultiviewViewCount, pname:maxMultiviewViewCount>>
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+  * [[VUID-VkRenderingInfo-perViewRenderAreaCount-07857]]
+    If the pname:perViewRenderAreaCount member of a
+    slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure
+    included in the pname:pNext chain is not `0`, then the
+    <<features-multiview-per-view-render-areas,
+    pname:multiviewPerViewRenderAreas>> feature must: be enabled.
+  * [[VUID-VkRenderingInfo-perViewRenderAreaCount-07858]]
+    If the pname:perViewRenderAreaCount member of a
+    slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure
+    included in the pname:pNext chain is not `0`, then pname:renderArea
+    must: specify a render area that includes the union of all per view
+    render areas.
+endif::VK_QCOM_multiview_per_view_render_areas[]
+  * [[VUID-VkRenderingInfo-None-09044]]
+    Valid attachments specified by this structure must: not be bound to
+    memory locations that are bound to any other valid attachments specified
+    by this structure
+ifdef::VK_EXT_nested_command_buffer[]
+  * [[VUID-VkRenderingInfo-flags-09381]]
+    If pname:flags includes ename:VK_RENDERING_CONTENTS_INLINE_BIT_EXT then
+    the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>> feature
+    must: be enabled
+endif::VK_EXT_nested_command_buffer[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkRenderingInfo-pDepthAttachment-09318]]
+    pname:pDepthAttachment->resolveMode must: not be
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
+  * [[VUID-VkRenderingInfo-pStencilAttachment-09319]]
+    pname:pStencilAttachment->resolveMode must: not be
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
+  * [[VUID-VkRenderingInfo-colorAttachmentCount-09320]]
+    If pname:colorAttachmentCount is not `1`, the pname:resolveMode member
+    of any element of pname:pColorAttachments must: not be
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderingInfo-resolveMode-09321]]
+    If the pname:resolveMode of any element of pname:pColorAttachments is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT::pname:imageView
+    must: be dlink:VK_NULL_HANDLE
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderingInfo-resolveMode-09322]]
+    If the pname:resolveMode of any element of pname:pColorAttachments is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR::pname:imageView
+    must: be dlink:VK_NULL_HANDLE
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkRenderingInfo.adoc[]
+--
+
+[open,refpage='VkRenderingFlagBits',desc='Bitmask specifying additional properties of a dynamic render pass instance',type='enums',alias='VkRenderingFlagBitsKHR']
+--
+Bits which can: be set in slink:VkRenderingInfo::pname:flags describing
+additional properties of the render pass are:
+
+include::{generated}/api/enums/VkRenderingFlagBits.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/enums/VkRenderingFlagBitsKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT specifies that
+    draw calls for the render pass instance will be recorded in secondary
+    command buffers.
+ifdef::VK_EXT_nested_command_buffer[]
+    If the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>
+    feature is enabled, the draw calls can: come from both inline and
+    flink:vkCmdExecuteCommands.
+endif::VK_EXT_nested_command_buffer[]
+  * ename:VK_RENDERING_RESUMING_BIT specifies that the render pass instance
+    is resuming an earlier suspended render pass instance.
+  * ename:VK_RENDERING_SUSPENDING_BIT specifies that the render pass
+    instance will be suspended.
+ifdef::VK_EXT_legacy_dithering[]
+  * ename:VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT specifies that
+    <<interfaces-legacy-dithering, Legacy Dithering>> is enabled for the
+    render pass instance.
+endif::VK_EXT_legacy_dithering[]
+ifdef::VK_EXT_nested_command_buffer[]
+  * ename:VK_RENDERING_CONTENTS_INLINE_BIT_EXT specifies that draw calls for
+    the render pass instance can: be recorded inline within the current
+    command buffer.
+    When the <<features-nestedCommandBuffer, pname:nestedCommandBuffer>>
+    feature is enabled this can: be combined with the
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT bit to allow
+    draw calls to be recorded both inline and in secondary command buffers.
+endif::VK_EXT_nested_command_buffer[]
+
+[[renderpass-suspension]]
+The contents of pname:pRenderingInfo must: match between suspended render
+pass instances and the render pass instances that resume them, other than
+the presence or absence of the ename:VK_RENDERING_RESUMING_BIT,
+ename:VK_RENDERING_SUSPENDING_BIT, and
+ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT flags.
+No action or synchronization commands, or other render pass instances, are
+allowed between suspending and resuming render pass instances.
+--
+
+[open,refpage='VkRenderingFlags',desc='Bitmask of VkRenderingFlagBits',type='flags',alias='VkRenderingFlagsKHR']
+--
+include::{generated}/api/flags/VkRenderingFlags.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/flags/VkRenderingFlagsKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+tname:VkRenderingFlags is a bitmask type for setting a mask of zero or more
+elink:VkRenderingFlagBits.
+--
+
+[open,refpage='VkRenderingAttachmentInfo',desc='Structure specifying attachment information',type='structs',alias='VkRenderingAttachmentInfoKHR']
+--
+The sname:VkRenderingAttachmentInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderingAttachmentInfo.adoc[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderingAttachmentInfoKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageView is the image view that will be used for rendering.
+  * pname:imageLayout is the layout that pname:imageView will be in during
+    rendering.
+  * pname:resolveMode is a elink:VkResolveModeFlagBits value defining how
+    data written to pname:imageView will be resolved into
+    pname:resolveImageView.
+  * pname:resolveImageView is an image view used to write resolved data at
+    the end of rendering.
+  * pname:resolveImageLayout is the layout that pname:resolveImageView will
+    be in during rendering.
+  * pname:loadOp is a elink:VkAttachmentLoadOp value defining the
+    <<renderpass-load-operations, load operation>> for the attachment.
+  * pname:storeOp is a elink:VkAttachmentStoreOp value defining the
+    <<renderpass-store-operations, store operation>> for the attachment.
+  * pname:clearValue is a slink:VkClearValue structure defining values used
+    to clear pname:imageView when pname:loadOp is
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
+
+Values in pname:imageView are loaded and stored according to the values of
+pname:loadOp and pname:storeOp, within the render area
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+for each device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+specified in slink:VkRenderingInfo.
+If pname:imageView is dlink:VK_NULL_HANDLE,
+ifdef::VK_ANDROID_external_format_resolve[]
+and pname:resolveMode is not
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+endif::VK_ANDROID_external_format_resolve[]
+other members of this structure are ignored; writes to this attachment will
+be discarded, and no <<renderpass-load-operations, load>>,
+<<renderpass-store-operations, store>>, or <<renderpass-resolve-operations,
+multisample resolve>> operations will be performed.
+
+If pname:resolveMode is ename:VK_RESOLVE_MODE_NONE, then
+pname:resolveImageView is ignored.
+If pname:resolveMode is not ename:VK_RESOLVE_MODE_NONE, and
+pname:resolveImageView is not dlink:VK_NULL_HANDLE, a
+<<renderpass-resolve-operations, render pass multisample resolve operation>>
+is defined for the attachment subresource.
+ifdef::VK_ANDROID_external_format_resolve[]
+If pname:resolveMode is
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, and the
+<<limits-nullColorAttachmentWithExternalFormatResolve,
+pname:nullColorAttachmentWithExternalFormatResolve>> limit is ename:VK_TRUE,
+values are only undefined: once <<renderpass-load-operations, load
+operations>> have completed.
+endif::VK_ANDROID_external_format_resolve[]
+
+[NOTE]
+.Note
+====
+The resolve mode and store operation are independent; it is valid to write
+both resolved and unresolved values, and equally valid to discard the
+unresolved values while writing the resolved ones.
+====
+
+Store and resolve operations are only performed at the end of a render pass
+instance that does not specify the ename:VK_RENDERING_SUSPENDING_BIT_KHR
+flag.
+
+Load operations are only performed at the beginning of a render pass
+instance that does not specify the ename:VK_RENDERING_RESUMING_BIT_KHR flag.
+
+Image contents at the end of a suspended render pass instance remain defined
+for access by a resuming render pass instance.
+
+ifdef::VK_ANDROID_external_format_resolve[]
+If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+pname:nullColorAttachmentWithExternalFormatResolve>> limit is ename:VK_TRUE,
+and pname:resolveMode is
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, values in the
+color attachment will be loaded from the resolve attachment at the start of
+rendering, and may: also be reloaded any time after a resolve occurs or the
+resolve attachment is written to; if this occurs it must: happen-before any
+writes to the color attachment are performed which happen-after the resolve
+that triggers this.
+If any color component in the external format is subsampled, values will be
+read from the nearest sample in the image when they are loaded.
+endif::VK_ANDROID_external_format_resolve[]
+
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06129]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and has a non-integer
+    color format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE or
+    ename:VK_RESOLVE_MODE_AVERAGE_BIT
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06130]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and has an integer color
+    format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE or
+    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06861]]
+    pname:imageView must: not have a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT if all of the following hold:
+  ** pname:imageView is not dlink:VK_NULL_HANDLE
+  ** pname:resolveMode is not ename:VK_RESOLVE_MODE_NONE
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the pname:pNext chain of slink:VkRenderingInfo does not include a
+     slink:VkMultisampledRenderToSingleSampledInfoEXT structure with the
+     pname:multisampledRenderToSingleSampledEnable field equal to
+     ename:VK_TRUE
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06862]]
+    pname:resolveImageView must: not be dlink:VK_NULL_HANDLE if all of the
+    following hold:
+  ** pname:imageView is not dlink:VK_NULL_HANDLE
+  ** pname:resolveMode is not ename:VK_RESOLVE_MODE_NONE
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the pname:pNext chain of slink:VkRenderingInfo does not include a
+     slink:VkMultisampledRenderToSingleSampledInfoEXT structure with the
+     pname:multisampledRenderToSingleSampledEnable field equal to
+     ename:VK_TRUE
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06863]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:resolveMode is not
+    ename:VK_RESOLVE_MODE_NONE, the pname:pNext chain of
+    slink:VkRenderingInfo includes a
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with the
+    pname:multisampledRenderToSingleSampledEnable field equal to
+    ename:VK_TRUE, and pname:imageView has a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT, pname:resolveImageView must: be
+    dlink:VK_NULL_HANDLE
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06864]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:resolveImageView
+    is not dlink:VK_NULL_HANDLE, and pname:resolveMode is not
+    ename:VK_RESOLVE_MODE_NONE, pname:resolveImageView must: have a sample
+    count of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06865]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:resolveImageView
+    is not dlink:VK_NULL_HANDLE, and pname:resolveMode is not
+    ename:VK_RESOLVE_MODE_NONE, pname:imageView and pname:resolveImageView
+    must: have the same elink:VkFormat
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06135]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06136]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+ifdef::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06137]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06138]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    not be ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06139]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06140]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    not be ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06141]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06142]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06143]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    not be
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06144]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_swapchain[]
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06145]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
+    not be ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+  * [[VUID-VkRenderingAttachmentInfo-imageView-06146]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:resolveImageLayout must: not be
+    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+endif::VK_KHR_swapchain[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkRenderingAttachmentInfo-externalFormatResolve-09323]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is not
+    enabled, pname:resolveMode must: not be
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09324]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    pname:resolveImageView must: be a valid image view
+  * [[VUID-VkRenderingAttachmentInfo-nullColorAttachmentWithExternalFormatResolve-09325]]
+    If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> property is
+    ename:VK_TRUE and pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    pname:resolveImageView must: have been created with an image with a
+    pname:samples value of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09326]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    pname:resolveImageView must: have been created with an external format
+    specified by slink:VkExternalFormatANDROID
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09327]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    pname:resolveImageView must: have been created with a
+    pname:subresourceRange.layerCount of `1`
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09328]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID and
+    <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_TRUE,
+    pname:imageView must: be dlink:VK_NULL_HANDLE
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09329]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID and
+    <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_FALSE,
+    pname:imageView must: be a valid slink:VkImageView
+  * [[VUID-VkRenderingAttachmentInfo-resolveMode-09330]]
+    If pname:resolveMode is
+    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID and
+    <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_FALSE,
+    pname:imageView must: have a format equal to the value of
+    slink:VkAndroidHardwareBufferFormatResolvePropertiesANDROID::pname:colorAttachmentFormat
+    as returned by a call to
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
+    hardware buffer that was used to create pname:resolveImageView
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkRenderingAttachmentInfo.adoc[]
+--
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[open,refpage='VkRenderingFragmentShadingRateAttachmentInfoKHR',desc='Structure specifying fragment shading rate attachment information',type='structs']
+--
+The sname:VkRenderingFragmentShadingRateAttachmentInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkRenderingFragmentShadingRateAttachmentInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageView is the image view that will be used as a fragment
+    shading rate attachment.
+  * pname:imageLayout is the layout that pname:imageView will be in during
+    rendering.
+  * pname:shadingRateAttachmentTexelSize specifies the number of pixels
+    corresponding to each texel in pname:imageView.
+
+This structure can be included in the pname:pNext chain of
+slink:VkRenderingInfo to define a
+<<primsrast-fragment-shading-rate-attachment, fragment shading rate
+attachment>>.
+If pname:imageView is dlink:VK_NULL_HANDLE, or if this structure is not
+specified, the implementation behaves as if a valid shading rate attachment
+was specified with all texels specifying a single pixel per fragment.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06147]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: be
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06148]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
+    created with
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06149]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.width must: be a power of two value
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06150]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
+    pname:maxFragmentShadingRateAttachmentTexelSize.width>>
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06151]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.width must: be greater than or
+    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
+    pname:minFragmentShadingRateAttachmentTexelSize.width>>
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06152]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.height must: be a power of two
+    value
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06153]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
+    pname:maxFragmentShadingRateAttachmentTexelSize.height>>
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06154]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE,
+    pname:shadingRateAttachmentTexelSize.height must: be greater than or
+    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
+    pname:minFragmentShadingRateAttachmentTexelSize.height>>
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06155]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, the quotient of
+    pname:shadingRateAttachmentTexelSize.width and
+    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
+  * [[VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06156]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, the quotient of
+    pname:shadingRateAttachmentTexelSize.height and
+    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
+****
+
+include::{generated}/validity/structs/VkRenderingFragmentShadingRateAttachmentInfoKHR.adoc[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[open,refpage='VkRenderingFragmentDensityMapAttachmentInfoEXT',desc='Structure specifying fragment shading rate attachment information',type='structs']
+--
+The sname:VkRenderingFragmentDensityMapAttachmentInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkRenderingFragmentDensityMapAttachmentInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageView is the image view that will be used as a fragment
+    density map attachment.
+  * pname:imageLayout is the layout that pname:imageView will be in during
+    rendering.
+
+This structure can be included in the pname:pNext chain of
+slink:VkRenderingInfo to define a fragment density map.
+If this structure is not included in the pname:pNext chain, pname:imageView
+is treated as dlink:VK_NULL_HANDLE.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06157]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: be
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
+  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06158]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
+    created with ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06159]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: not have been
+    created with ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-apiVersion-07908]]
+    If
+ifndef::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+    apiext:VK_KHR_multiview is not enabled,
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1, and
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+endif::VKSC_VERSION_1_0[]
+    pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a
+    pname:layerCount equal to `1`
+****
+
+include::{generated}/validity/structs/VkRenderingFragmentDensityMapAttachmentInfoEXT.adoc[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='vkGetRenderingAreaGranularityKHR',desc='Returns the granularity for dynamic rendering optimal render area',type='protos']
+--
+To query the render area granularity for a render pass instance, call:
+
+include::{generated}/api/protos/vkGetRenderingAreaGranularityKHR.adoc[]
+
+  * pname:device is the logical device that owns the render pass instance.
+  * pname:pRenderingAreaInfo is a pointer to a slink:VkRenderingAreaInfoKHR
+    structure specifying details of the render pass instance to query the
+    render area granularity for.
+  * pname:pGranularity is a pointer to a slink:VkExtent2D structure in which
+    the granularity is returned.
+
+The conditions leading to an optimal pname:renderArea are:
+
+  * the pname:offset.x member in pname:renderArea is a multiple of the
+    pname:width member of the returned slink:VkExtent2D (the horizontal
+    granularity).
+  * the pname:offset.y member in pname:renderArea is a multiple of the
+    pname:height member of the returned slink:VkExtent2D (the vertical
+    granularity).
+  * either the pname:extent.width member in pname:renderArea is a multiple
+    of the horizontal granularity or pname:offset.x+pname:extent.width is
+    equal to the pname:width of the pname:framebuffer in the
+    slink:VkRenderPassBeginInfo.
+  * either the pname:extent.height member in pname:renderArea is a multiple
+    of the vertical granularity or pname:offset.y+pname:extent.height is
+    equal to the pname:height of the pname:framebuffer in the
+    slink:VkRenderPassBeginInfo.
+
+include::{generated}/validity/protos/vkGetRenderingAreaGranularityKHR.adoc[]
+--
+
+[open,refpage='VkRenderingAreaInfoKHR',desc='Structure describing rendering area granularity query info',type='structs']
+--
+The sname:VkRenderingAreaInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkRenderingAreaInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:viewMask is the viewMask used for rendering.
+  * pname:colorAttachmentCount is the number of entries in
+    pname:pColorAttachmentFormats
+  * pname:pColorAttachmentFormats is a pointer to an array of elink:VkFormat
+    values defining the format of color attachments used in the render pass
+    instance.
+  * pname:depthAttachmentFormat is a elink:VkFormat value defining the
+    format of the depth attachment used in the render pass instance.
+  * pname:stencilAttachmentFormat is a elink:VkFormat value defining the
+    format of the stencil attachment used in the render pass instance.
+
+include::{generated}/validity/structs/VkRenderingAreaInfoKHR.adoc[]
+--
+endif::VK_KHR_maintenance5[]
+
+[open,refpage='vkCmdEndRendering',desc='End a dynamic render pass instance',type='protos',alias='vkCmdEndRenderingKHR']
+--
+To end a render pass instance, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdEndRendering.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_dynamic_rendering[or the equivalent command]
+
+ifdef::VK_KHR_dynamic_rendering[]
+include::{generated}/api/protos/vkCmdEndRenderingKHR.adoc[]
+endif::VK_KHR_dynamic_rendering[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+
+If the value of pname:pRenderingInfo->flags used to begin this render pass
+instance included ename:VK_RENDERING_SUSPENDING_BIT, then this render pass
+is suspended and will be resumed later in
+<<synchronization-submission-order, submission order>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndRendering-None-06161]]
+    The current render pass instance must: have been begun with
+    flink:vkCmdBeginRendering
+  * [[VUID-vkCmdEndRendering-commandBuffer-06162]]
+    The current render pass instance must: have been begun in
+    pname:commandBuffer
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdEndRendering-None-06781]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdEndRendering-None-06999]]
+    If fname:vkCmdBeginQuery* was called within the render pass, the
+    corresponding fname:vkCmdEndQuery* must: have been called subsequently
+    within the same subpass
+****
+
+include::{generated}/validity/protos/vkCmdEndRendering.adoc[]
+--
+
+[NOTE]
+.Note
+====
+For more complex rendering graphs, it is possible to pre-define a static
+_render pass_ object, which as well as allowing draw commands, allows the
+definition of framebuffer-local dependencies between multiple subpasses.
+These objects have a lot of setup cost compared to
+flink:vkCmdBeginRendering, but use of subpass dependencies can confer
+important performance benefits on some devices.
+====
+
+ifdef::VK_QCOM_tile_properties[]
+[open,refpage='VkTilePropertiesQCOM',desc='Structure holding available tile properties',type='structs']
+--
+The sname:VkTilePropertiesQCOM structure is defined as:
+
+include::{generated}/api/structs/VkTilePropertiesQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:tileSize is the dimensions of a tile, with width and height
+    describing the width and height of a tile in pixels, and depth
+    corresponding to the number of slices the tile spans.
+  * pname:apronSize is the dimension of the apron.
+  * pname:origin is the top-left corner of the first tile in attachment
+    space.
+
+All tiles will be tightly packed around the first tile, with edges being
+multiples of tile width and/or height from the origin.
+
+[NOTE]
+.Note
+====
+Reported value for pname:apronSize will be zero and its functionality will
+be described in a future extension.
+====
+
+include::{generated}/validity/structs/VkTilePropertiesQCOM.adoc[]
+--
+
+[open,refpage='vkGetDynamicRenderingTilePropertiesQCOM',desc='Get the properties when using dynamic rendering',type='protos']
+--
+To query the tile properties when using dynamic rendering, call:
+
+include::{generated}/api/protos/vkGetDynamicRenderingTilePropertiesQCOM.adoc[]
+
+  * pname:device is a logical device associated with the render pass.
+  * pname:pRenderingInfo is a pointer to the slink:VkRenderingInfo structure
+    specifying details of the render pass instance in dynamic rendering.
+  * pname:pProperties is a pointer to a slink:VkTilePropertiesQCOM structure
+    in which the properties are returned.
+
+include::{generated}/validity/protos/vkGetDynamicRenderingTilePropertiesQCOM.adoc[]
+--
+endif::VK_QCOM_tile_properties[]
+
+
+== Render Pass Objects
+
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+
+[open,refpage='VkRenderPass',desc='Opaque handle to a render pass object',type='handles']
+--
+A render pass object represents a collection of attachments, subpasses, and
+dependencies between the subpasses, and describes how the attachments are
+used over the course of the subpasses.
+
+Render passes are represented by sname:VkRenderPass handles:
+
+include::{generated}/api/handles/VkRenderPass.adoc[]
+--
+
+An _attachment description_ describes the properties of an attachment
+including its format, sample count, and how its contents are treated at the
+beginning and end of each render pass instance.
+
+[[renderpass-subpass]]
+A _subpass_ represents a phase of rendering that reads and writes a subset
+of the attachments in a render pass.
+Rendering commands are recorded into a particular subpass of a render pass
+instance.
+
+A _subpass description_ describes the subset of attachments that is involved
+in the execution of a subpass.
+Each subpass can: read from some attachments as _input attachments_, write
+to some as _color attachments_ or _depth/stencil attachments_,
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+perform _shader resolve operations_ to _color_attachments_ or
+_depth/stencil_attachments_,
+endif::VK_QCOM_render_pass_shader_resolve[]
+and perform _multisample resolve operations_ to _resolve attachments_.
+A subpass description can: also include a set of _preserve attachments_,
+which are attachments that are not read or written by the subpass but whose
+contents must: be preserved throughout the subpass.
+
+A subpass _uses an attachment_ if the attachment is a color, depth/stencil,
+resolve,
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+depth/stencil resolve,
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+ifdef::VK_KHR_fragment_shading_rate[]
+fragment shading rate,
+endif::VK_KHR_fragment_shading_rate[]
+or input attachment for that subpass (as determined by the
+pname:pColorAttachments, pname:pDepthStencilAttachment,
+pname:pResolveAttachments,
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+slink:VkSubpassDescriptionDepthStencilResolve::pname:pDepthStencilResolveAttachment,
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+ifdef::VK_KHR_fragment_shading_rate[]
+slink:VkFragmentShadingRateAttachmentInfoKHR::pname:pFragmentShadingRateAttachment->attachment,
+endif::VK_KHR_fragment_shading_rate[]
+and pname:pInputAttachments members of slink:VkSubpassDescription,
+respectively).
+A subpass does not use an attachment if that attachment is preserved by the
+subpass.
+The _first use of an attachment_ is in the lowest numbered subpass that uses
+that attachment.
+Similarly, the _last use of an attachment_ is in the highest numbered
+subpass that uses that attachment.
+
+The subpasses in a render pass all render to the same dimensions, and
+fragments for pixel (x,y,layer) in one subpass can: only read attachment
+contents written by previous subpasses at that same (x,y,layer) location.
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate,VK_EXT_fragment_density_map[]
+For multi-pixel fragments, the pixel read from an input attachment is
+selected from the pixels covered by that fragment in an
+implementation-dependent manner.
+However, this selection must: be made consistently for any fragment with the
+same shading rate for the lifetime of the slink:VkDevice.
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate,VK_EXT_fragment_density_map[]
+
+[NOTE]
+.Note
+====
+By describing a complete set of subpasses in advance, render passes provide
+the implementation an opportunity to optimize the storage and transfer of
+attachment data between subpasses.
+
+In practice, this means that subpasses with a simple framebuffer-space
+dependency may: be merged into a single tiled rendering pass, keeping the
+attachment data on-chip for the duration of a render pass instance.
+However, it is also quite common for a render pass to only contain a single
+subpass.
+====
+
+_Subpass dependencies_ describe <<synchronization-dependencies, execution
+and memory dependencies>> between subpasses.
+
+A _subpass dependency chain_ is a sequence of subpass dependencies in a
+render pass, where the source subpass of each subpass dependency (after the
+first) equals the destination subpass of the previous dependency.
+
+Execution of subpasses may: overlap or execute out of order with regards to
+other subpasses, unless otherwise enforced by an execution dependency.
+Each subpass only respects <<synchronization-submission-order, submission
+order>> for commands recorded in the same subpass, and the
+flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands that
+delimit the render pass - commands within other subpasses are not included.
+This affects most other <<synchronization-implicit, implicit ordering
+guarantees>>.
+
+A render pass describes the structure of subpasses and attachments
+independent of any specific image views for the attachments.
+The specific image views that will be used for the attachments, and their
+dimensions, are specified in sname:VkFramebuffer objects.
+Framebuffers are created with respect to a specific render pass that the
+framebuffer is compatible with (see <<renderpass-compatibility,Render Pass
+Compatibility>>).
+Collectively, a render pass and a framebuffer define the complete render
+target state for one or more subpasses as well as the algorithmic
+dependencies between the subpasses.
+
+The various pipeline stages of the drawing commands for a given subpass may:
+execute concurrently and/or out of order, both within and across drawing
+commands, whilst still respecting <<synchronization-pipeline-stages-order,
+pipeline order>>.
+However for a given (x,y,layer,sample) sample location, certain per-sample
+operations are performed in <<primsrast-order,rasterization order>>.
+
+[open,refpage='VK_ATTACHMENT_UNUSED',desc='Unused attachment sentinel',type='consts']
+--
+ename:VK_ATTACHMENT_UNUSED is a constant indicating that a render pass
+attachment is not used.
+
+include::{generated}/api/enums/VK_ATTACHMENT_UNUSED.adoc[]
+--
+
+
+[[renderpass-creation]]
+== Render Pass Creation
+
+[open,refpage='vkCreateRenderPass',desc='Create a new render pass object',type='protos']
+--
+:refpage: vkCreateRenderPass
+:objectnameplural: render passes
+:objectnamecamelcase: renderPass
+:objectcount: 1
+
+To create a render pass, call:
+
+include::{generated}/api/protos/vkCreateRenderPass.adoc[]
+
+  * pname:device is the logical device that creates the render pass.
+  * pname:pCreateInfo is a pointer to a slink:VkRenderPassCreateInfo
+    structure describing the parameters of the render pass.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pRenderPass is a pointer to a slink:VkRenderPass handle in which
+    the resulting render pass object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+
+:uniqifier: subpasses
+:combinedobjectnameplural: subpasses
+:combinedparentobject: VkRenderPass
+:combinedobjectcount: pname:pCreateInfo->subpassCount
+:combinedobjectnamecamelcase: subpassDescription
+include::{chapters}/commonvalidity/memory_reservation_request_count_combined_common.adoc[]
+
+:uniqifier: attachments
+:combinedobjectnameplural: attachments
+:combinedparentobject: VkRenderPass
+:combinedobjectcount: pname:pCreateInfo->attachmentCount
+:combinedobjectnamecamelcase: attachmentDescription
+include::{chapters}/commonvalidity/memory_reservation_request_count_combined_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateRenderPass.adoc[]
+--
+
+[open,refpage='VkRenderPassCreateInfo',desc='Structure specifying parameters of a newly created render pass',type='structs']
+--
+The sname:VkRenderPassCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifndef::VK_QCOM_render_pass_transform[]
+  * pname:flags is reserved for future use.
+endif::VK_QCOM_render_pass_transform[]
+ifdef::VK_QCOM_render_pass_transform[]
+  * pname:flags is a bitmask of elink:VkRenderPassCreateFlagBits
+endif::VK_QCOM_render_pass_transform[]
+  * pname:attachmentCount is the number of attachments used by this render
+    pass.
+  * pname:pAttachments is a pointer to an array of pname:attachmentCount
+    slink:VkAttachmentDescription structures describing the attachments used
+    by the render pass.
+  * pname:subpassCount is the number of subpasses to create.
+  * pname:pSubpasses is a pointer to an array of pname:subpassCount
+    slink:VkSubpassDescription structures describing each subpass.
+  * pname:dependencyCount is the number of memory dependencies between pairs
+    of subpasses.
+  * pname:pDependencies is a pointer to an array of pname:dependencyCount
+    slink:VkSubpassDependency structures describing dependencies between
+    pairs of subpasses.
+
+[NOTE]
+.Note
+====
+Care should be taken to avoid a data race here; if any subpasses access
+attachments with overlapping memory locations, and one of those accesses is
+a write, a subpass dependency needs to be included between them.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassCreateInfo-attachment-00834]]
+    If the pname:attachment member of any element of
+    pname:pInputAttachments, pname:pColorAttachments,
+    pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
+    element of pname:pPreserveAttachments in any element of pname:pSubpasses
+    is not ename:VK_ATTACHMENT_UNUSED, then it must: be less than
+    pname:attachmentCount
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderPassCreateInfo-fragmentDensityMapAttachment-06471]]
+    If the pNext chain includes a
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT structure and the
+    pname:fragmentDensityMapAttachment member is not
+    ename:VK_ATTACHMENT_UNUSED, then pname:attachment must: be less than
+    pname:attachmentCount
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderPassCreateInfo-pAttachments-00836]]
+    For any member of pname:pAttachments with a pname:loadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderPassCreateInfo-pAttachments-02511]]
+    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-VkRenderPassCreateInfo-pAttachments-01566]]
+    For any member of pname:pAttachments with a pname:loadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderPassCreateInfo-pAttachments-01567]]
+    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderPassCreateInfo-pNext-01926]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, the
+    pname:subpass member of each element of its pname:pAspectReferences
+    member must: be less than pname:subpassCount
+  * [[VUID-VkRenderPassCreateInfo-pNext-01927]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, the
+    pname:inputAttachmentIndex member of each element of its
+    pname:pAspectReferences member must: be less than the value of
+    pname:inputAttachmentCount in the element of pname:pSubpasses identified
+    by its pname:subpass member
+  * [[VUID-VkRenderPassCreateInfo-pNext-01963]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassInputAttachmentAspectCreateInfo structure, for any
+    element of the pname:pInputAttachments member of any element of
+    pname:pSubpasses where the pname:attachment member is not
+    ename:VK_ATTACHMENT_UNUSED, the pname:aspectMask member of the
+    corresponding element of
+    slink:VkRenderPassInputAttachmentAspectCreateInfo::pname:pAspectReferences
+    must: only include aspects that are present in images of the format
+    specified by the element of pname:pAttachments at pname:attachment
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderPassCreateInfo-pNext-01928]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, and its
+    pname:subpassCount member is not zero, that member must: be equal to the
+    value of pname:subpassCount
+  * [[VUID-VkRenderPassCreateInfo-pNext-01929]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, if its
+    pname:dependencyCount member is not zero, it must: be equal to
+    pname:dependencyCount
+  * [[VUID-VkRenderPassCreateInfo-pNext-01930]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, for each non-zero
+    element of pname:pViewOffsets, the pname:srcSubpass and pname:dstSubpass
+    members of pname:pDependencies at the same index must: not be equal
+  * [[VUID-VkRenderPassCreateInfo-pNext-02512]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, for any element of
+    pname:pDependencies with a pname:dependencyFlags member that does not
+    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT, the corresponding element of
+    the pname:pViewOffsets member of that
+    slink:VkRenderPassMultiviewCreateInfo instance must: be `0`
+  * [[VUID-VkRenderPassCreateInfo-pNext-02513]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, elements of its
+    pname:pViewMasks member must: either all be `0`, or all not be `0`
+  * [[VUID-VkRenderPassCreateInfo-pNext-02514]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, and each element of its
+    pname:pViewMasks member is `0`, the pname:dependencyFlags member of each
+    element of pname:pDependencies must: not include
+    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+  * [[VUID-VkRenderPassCreateInfo-pNext-02515]]
+    If the pname:pNext chain includes a
+    slink:VkRenderPassMultiviewCreateInfo structure, and each element of its
+    pname:pViewMasks member is `0`, its pname:correlationMaskCount member
+    must: be `0`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderPassCreateInfo-pDependencies-00837]]
+    For any element of pname:pDependencies, if the pname:srcSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
+    pname:srcStageMask member of that dependency must: be a pipeline stage
+    supported by the <<synchronization-pipeline-stages-types, pipeline>>
+    identified by the pname:pipelineBindPoint member of the source subpass
+  * [[VUID-VkRenderPassCreateInfo-pDependencies-00838]]
+    For any element of pname:pDependencies, if the pname:dstSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
+    pname:dstStageMask member of that dependency must: be a pipeline stage
+    supported by the <<synchronization-pipeline-stages-types, pipeline>>
+    identified by the pname:pipelineBindPoint member of the destination
+    subpass
+  * [[VUID-VkRenderPassCreateInfo-pDependencies-06866]]
+    For any element of pname:pDependencies, if its pname:srcSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, it must: be less than pname:subpassCount
+  * [[VUID-VkRenderPassCreateInfo-pDependencies-06867]]
+    For any element of pname:pDependencies, if its pname:dstSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, it must: be less than pname:subpassCount
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkRenderPassCreateInfo-subpassCount-05050]]
+    pname:subpassCount must: be less than or equal to
+    <<limits-maxRenderPassSubpasses,maxRenderPassSubpasses>>
+  * [[VUID-VkRenderPassCreateInfo-dependencyCount-05051]]
+    pname:dependencyCount must: be less than or equal to
+    <<limits-maxRenderPassDependencies,maxRenderPassDependencies>>
+  * [[VUID-VkRenderPassCreateInfo-attachmentCount-05052]]
+    pname:attachmentCount must: be less than or equal to
+    <<limits-maxFramebufferAttachments,maxFramebufferAttachments>>
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/structs/VkRenderPassCreateInfo.adoc[]
+--
+
+[open,refpage='VkRenderPassCreateFlagBits',desc='Bitmask specifying additional properties of a render pass',type='enums']
+--
+Bits which can: be set in slink:VkRenderPassCreateInfo::pname:flags,
+describing additional properties of the render pass, are:
+
+include::{generated}/api/enums/VkRenderPassCreateFlagBits.adoc[]
+
+ifdef::VK_QCOM_render_pass_transform[]
+  * ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM specifies that the
+    created render pass is compatible with
+    <<vertexpostproc-renderpass-transform, render pass transform>>.
+endif::VK_QCOM_render_pass_transform[]
+
+ifndef::VK_QCOM_render_pass_transform[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_QCOM_render_pass_transform[]
+--
+
+[open,refpage='VkRenderPassCreateFlags',desc='Bitmask of VkRenderPassCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkRenderPassCreateFlags.adoc[]
+
+tname:VkRenderPassCreateFlags is a bitmask type for setting a mask of zero
+or more elink:VkRenderPassCreateFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+[[renderpass-multiview]]
+[open,refpage='VkRenderPassMultiviewCreateInfo',desc='Structure containing multiview information for all subpasses',type='structs']
+--
+If the slink:VkRenderPassCreateInfo::pname:pNext chain includes a
+sname:VkRenderPassMultiviewCreateInfo structure, then that structure
+includes an array of view masks, view offsets, and correlation masks for the
+render pass.
+
+The sname:VkRenderPassMultiviewCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassMultiviewCreateInfo.adoc[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassMultiviewCreateInfoKHR.adoc[]
+endif::VK_KHR_multiview[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:subpassCount is zero or the number of subpasses in the render
+    pass.
+  * pname:pViewMasks is a pointer to an array of pname:subpassCount view
+    masks, where each mask is a bitfield of view indices describing which
+    views rendering is broadcast to in each subpass, when multiview is
+    enabled.
+    If pname:subpassCount is zero, each view mask is treated as zero.
+  * pname:dependencyCount is zero or the number of dependencies in the
+    render pass.
+  * pname:pViewOffsets is a pointer to an array of pname:dependencyCount
+    view offsets, one for each dependency.
+    If pname:dependencyCount is zero, each dependency's view offset is
+    treated as zero.
+    Each view offset controls which views in the source subpass the views in
+    the destination subpass depend on.
+  * pname:correlationMaskCount is zero or the number of correlation masks.
+  * pname:pCorrelationMasks is a pointer to an array of
+    pname:correlationMaskCount view masks indicating sets of views that may:
+    be more efficient to render concurrently.
+
+When a subpass uses a non-zero view mask, _multiview_ functionality is
+considered to be enabled.
+Multiview is all-or-nothing for a render pass - that is, either all
+subpasses must: have a non-zero view mask (though some subpasses may: have
+only one view) or all must: be zero.
+Multiview causes all drawing and clear commands in the subpass to behave as
+if they were broadcast to each view, where a view is represented by one
+layer of the framebuffer attachments.
+All draws and clears are broadcast to each _view index_ whose bit is set in
+the view mask.
+The view index is provided in the code:ViewIndex shader input variable, and
+color, depth/stencil, and input attachments all read/write the layer of the
+framebuffer corresponding to the view index.
+
+If the view mask is zero for all subpasses, multiview is considered to be
+disabled and all drawing commands execute normally, without this additional
+broadcasting.
+
+Some implementations may: not support multiview in conjunction with
+ifdef::VK_EXT_mesh_shader[<<features-multiview-mesh, mesh shaders>>,]
+<<features-multiview-gs, geometry shaders>> or <<features-multiview-tess,
+tessellation shaders>>.
+
+[[renderpass-multiview-view-local]]
+When multiview is enabled, the ename:VK_DEPENDENCY_VIEW_LOCAL_BIT bit in a
+dependency can: be used to express a view-local dependency, meaning that
+each view in the destination subpass depends on a single view in the source
+subpass.
+Unlike pipeline barriers, a subpass dependency can: potentially have a
+different view mask in the source subpass and the destination subpass.
+If the dependency is view-local, then each view ([eq]#dstView#) in the
+destination subpass depends on the view [eq]#dstView {plus}
+pname:pViewOffsets[dependency]# in the source subpass.
+If there is not such a view in the source subpass, then this dependency does
+not affect that view in the destination subpass.
+If the dependency is not view-local, then all views in the destination
+subpass depend on all views in the source subpass, and the view offset is
+ignored.
+A non-zero view offset is not allowed in a self-dependency.
+
+The elements of pname:pCorrelationMasks are a set of masks of views
+indicating that views in the same mask may: exhibit spatial coherency
+between the views, making it more efficient to render them concurrently.
+Correlation masks must: not have a functional effect on the results of the
+multiview rendering.
+
+When multiview is enabled, at the beginning of each subpass all non-render
+pass state is undefined:.
+In particular, each time flink:vkCmdBeginRenderPass or
+flink:vkCmdNextSubpass is called the graphics pipeline must: be bound, any
+relevant descriptor sets or vertex/index buffers must: be bound, and any
+relevant dynamic state or push constants must: be set before they are used.
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+
+A multiview subpass can: declare that its shaders will write per-view
+attributes for all views in a single invocation, by setting the
+ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX bit in the subpass
+description.
+The only supported per-view attributes are position and viewport mask, and
+per-view position and viewport masks are written to output array variables
+decorated with code:PositionPerViewNV and code:ViewportMaskPerViewNV,
+respectively.
+If `apiext:VK_NV_viewport_array2` is not supported and enabled,
+code:ViewportMaskPerViewNV must: not be used.
+Values written to elements of code:PositionPerViewNV and
+code:ViewportMaskPerViewNV must: not depend on the code:ViewIndex.
+The shader must: also write to an output variable decorated with
+code:Position, and the value written to code:Position must: equal the value
+written to code:PositionPerViewNV[code:ViewIndex].
+Similarly, if code:ViewportMaskPerViewNV is written to then the shader must:
+also write to an output variable decorated with code:ViewportMaskNV, and the
+value written to code:ViewportMaskNV must: equal the value written to
+code:ViewportMaskPerViewNV[code:ViewIndex].
+Implementations will either use values taken from code:Position and
+code:ViewportMaskNV and invoke the shader once for each view, or will use
+values taken from code:PositionPerViewNV and code:ViewportMaskPerViewNV and
+invoke the shader fewer times.
+The values written to code:Position and code:ViewportMaskNV must: not depend
+on the values written to code:PositionPerViewNV and
+code:ViewportMaskPerViewNV, or vice versa (to allow compilers to eliminate
+the unused outputs).
+All attributes that do not have `*PerViewNV` counterparts must: not depend
+on code:ViewIndex.
+
+Per-view attributes are all-or-nothing for a subpass.
+That is, all pipelines compiled against a subpass that includes the
+ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX bit must: write
+per-view attributes to the `*PerViewNV[]` shader outputs, in addition to the
+non-per-view (e.g. code:Position) outputs.
+Pipelines compiled against a subpass that does not include this bit must:
+not include the `*PerViewNV[]` outputs in their interfaces.
+
+endif::VK_NVX_multiview_per_view_attributes[]
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-00841]]
+    Each view index must: not be set in more than one element of
+    pname:pCorrelationMasks
+  * [[VUID-VkRenderPassMultiviewCreateInfo-multiview-06555]]
+    If the <<features-multiview, pname:multiview>> feature is not enabled,
+    each element of pname:pViewMasks must: be `0`
+  * [[VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-06697]]
+    The index of the most significant bit in each element of
+    pname:pViewMasks must: be less than <<limits-maxMultiviewViewCount,
+    pname:maxMultiviewViewCount>>
+****
+
+include::{generated}/validity/structs/VkRenderPassMultiviewCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+[open,refpage='VkMultiviewPerViewAttributesInfoNVX',desc='Structure specifying the multiview per-attribute properties',type='structs']
+--
+The sname:VkMultiviewPerViewAttributesInfoNVX structure is defined as:
+
+include::{generated}/api/structs/VkMultiviewPerViewAttributesInfoNVX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:perViewAttributes specifies that shaders compiled for this
+    pipeline write the attributes for all views in a single invocation of
+    each vertex processing stage.
+    All pipelines executed within a render pass instance that includes this
+    bit must: write per-view attributes to the `*PerViewNV[]` shader
+    outputs, in addition to the non-per-view (e.g. code:Position) outputs.
+  * pname:perViewAttributesPositionXOnly specifies that shaders compiled for
+    this pipeline use per-view positions which only differ in value in the x
+    component.
+    Per-view viewport mask can: also be used.
+
+When dynamic render pass instances are being used, instead of specifying
+ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX or
+ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX in the subpass
+description flags, the per-attribute properties of the render pass instance
+must: be specified by the sname:VkMultiviewPerViewAttributesInfoNVX
+structure Include the sname:VkMultiviewPerViewAttributesInfoNVX structure in
+the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo when creating a
+graphics pipeline for dynamic rendering, slink:VkRenderingInfo when starting
+a dynamic render pass instance, and slink:VkCommandBufferInheritanceInfo
+when specifying the dynamic render pass instance parameters for secondary
+command buffers.
+
+include::{generated}/validity/structs/VkMultiviewPerViewAttributesInfoNVX.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+endif::VK_NVX_multiview_per_view_attributes[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[[renderpass-fragmentdensitymapattachment]]
+[open,refpage='VkRenderPassFragmentDensityMapCreateInfoEXT',desc='Structure containing fragment density map attachment for render pass',type='structs']
+--
+If the slink:VkRenderPassCreateInfo::pname:pNext chain includes a
+sname:VkRenderPassFragmentDensityMapCreateInfoEXT structure, then that
+structure includes a fragment density map attachment for the render pass.
+
+The sname:VkRenderPassFragmentDensityMapCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkRenderPassFragmentDensityMapCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fragmentDensityMapAttachment is the fragment density map to use
+    for the render pass.
+
+The fragment density map is read at an implementation-dependent time with
+the following constraints determined by the attachment's image view
+pname:flags:
+
+  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
+    specifies that the fragment density map will be read by the device
+    during ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+ifdef::VK_EXT_fragment_density_map2[]
+  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
+    specifies that the fragment density map will be read by the host during
+    flink:vkEndCommandBuffer of the primary command buffer that the render
+    pass is recorded into
+endif::VK_EXT_fragment_density_map2[]
+  * Otherwise the fragment density map will be read by the host during
+    flink:vkCmdBeginRenderPass
+
+The fragment density map may: additionally be read by the device during
+ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT for any mode.
+
+If this structure is not present, it is as if
+pname:fragmentDensityMapAttachment was given as ename:VK_ATTACHMENT_UNUSED.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02548]]
+    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
+    pname:fragmentDensityMapAttachment must: not be an element of
+    sname:VkSubpassDescription::pname:pInputAttachments,
+    sname:VkSubpassDescription::pname:pColorAttachments,
+    sname:VkSubpassDescription::pname:pResolveAttachments,
+    sname:VkSubpassDescription::pname:pDepthStencilAttachment, or
+    sname:VkSubpassDescription::pname:pPreserveAttachments for any subpass
+  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02549]]
+    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
+    pname:layout must: be equal to
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02550]]
+    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
+    pname:fragmentDensityMapAttachment must: reference an attachment with a
+    pname:loadOp equal to ename:VK_ATTACHMENT_LOAD_OP_LOAD or
+    ename:VK_ATTACHMENT_LOAD_OP_DONT_CARE
+  * [[VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02551]]
+    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
+    pname:fragmentDensityMapAttachment must: reference an attachment with a
+    pname:storeOp equal to ename:VK_ATTACHMENT_STORE_OP_DONT_CARE
+****
+
+include::{generated}/validity/structs/VkRenderPassFragmentDensityMapCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+[open,refpage='VkAttachmentDescription',desc='Structure specifying an attachment description',type='structs']
+--
+:refpage: VkAttachmentDescription
+
+The sname:VkAttachmentDescription structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentDescription.adoc[]
+
+  * pname:flags is a bitmask of elink:VkAttachmentDescriptionFlagBits
+    specifying additional properties of the attachment.
+  * pname:format is a elink:VkFormat value specifying the format of the
+    image view that will be used for the attachment.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    number of samples of the image.
+  * pname:loadOp is a elink:VkAttachmentLoadOp value specifying how the
+    contents of color and depth components of the attachment are treated at
+    the beginning of the subpass where it is first used.
+  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
+    contents of color and depth components of the attachment are treated at
+    the end of the subpass where it is last used.
+  * pname:stencilLoadOp is a elink:VkAttachmentLoadOp value specifying how
+    the contents of stencil components of the attachment are treated at the
+    beginning of the subpass where it is first used.
+  * pname:stencilStoreOp is a elink:VkAttachmentStoreOp value specifying how
+    the contents of stencil components of the attachment are treated at the
+    end of the last subpass where it is used.
+  * pname:initialLayout is the layout the attachment image subresource will
+    be in when a render pass instance begins.
+  * pname:finalLayout is the layout the attachment image subresource will be
+    transitioned to when a render pass instance ends.
+
+If the attachment uses a color format, then pname:loadOp and pname:storeOp
+are used, and pname:stencilLoadOp and pname:stencilStoreOp are ignored.
+If the format has depth and/or stencil components, pname:loadOp and
+pname:storeOp apply only to the depth data, while pname:stencilLoadOp and
+pname:stencilStoreOp define how the stencil data is handled.
+pname:loadOp and pname:stencilLoadOp define the
+<<renderpass-load-operations, load operations>> for the attachment.
+pname:storeOp and pname:stencilStoreOp define the
+<<renderpass-store-operations, store operations>> for the attachment.
+If an attachment is not used by any subpass, pname:loadOp, pname:storeOp,
+pname:stencilStoreOp, and pname:stencilLoadOp will be ignored for that
+attachment, and no load or store ops will be performed.
+However, any transition specified by pname:initialLayout and
+pname:finalLayout will still be executed.
+
+[[renderpass-aliasing]]
+If pname:flags includes ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT, then
+the attachment is treated as if it shares physical memory with another
+attachment in the same render pass.
+This information limits the ability of the implementation to reorder certain
+operations (like layout transitions and the pname:loadOp) such that it is
+not improperly reordered against other uses of the same physical memory via
+a different attachment.
+This is described in more detail below.
+
+If a render pass uses multiple attachments that alias the same device
+memory, those attachments must: each include the
+ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT bit in their attachment
+description flags.
+Attachments aliasing the same memory occurs in multiple ways:
+
+  * Multiple attachments being assigned the same image view as part of
+    framebuffer creation.
+  * Attachments using distinct image views that correspond to the same image
+    subresource of an image.
+  * Attachments using views of distinct image subresources which are bound
+    to overlapping memory ranges.
+
+[NOTE]
+.Note
+====
+Render passes must: include subpass dependencies (either directly or via a
+subpass dependency chain) between any two subpasses that operate on the same
+attachment or aliasing attachments and those subpass dependencies must:
+include execution and memory dependencies separating uses of the aliases, if
+at least one of those subpasses writes to one of the aliases.
+These dependencies must: not include the ename:VK_DEPENDENCY_BY_REGION_BIT
+if the aliases are views of distinct image subresources which overlap in
+memory.
+====
+
+Multiple attachments that alias the same memory must: not be used in a
+single subpass.
+A given attachment index must: not be used multiple times in a single
+subpass, with one exception: two subpass attachments can: use the same
+attachment index if at least one use is as an input attachment and neither
+use is as a resolve or preserve attachment.
+In other words, the same view can: be used simultaneously as an input and
+color or depth/stencil attachment, but must: not be used as multiple color
+or depth/stencil attachments nor as resolve or preserve attachments.
+
+If a set of attachments alias each other, then all except the first to be
+used in the render pass must: use an pname:initialLayout of
+ename:VK_IMAGE_LAYOUT_UNDEFINED, since the earlier uses of the other aliases
+make their contents undefined:.
+Once an alias has been used and a different alias has been used after it,
+the first alias must: not be used in any later subpasses.
+However, an application can: assign the same image view to multiple aliasing
+attachment indices, which allows that image view to be used multiple times
+even if other aliases are used in between.
+
+[NOTE]
+.Note
+====
+Once an attachment needs the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
+bit, there should: be no additional cost of introducing additional aliases,
+and using these additional aliases may: allow more efficient clearing of the
+attachments on multiple uses via ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
+====
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/attachment_description_common.adoc[]
+  * [[VUID-VkAttachmentDescription-format-06698]]
+    pname:format must: not be VK_FORMAT_UNDEFINED
+  * [[VUID-VkAttachmentDescription-format-06700]]
+    If pname:format includes a stencil component and pname:stencilLoadOp is
+    ename:VK_ATTACHMENT_LOAD_OP_LOAD, then pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED
+  * [[VUID-VkAttachmentDescription-format-03292]]
+    If pname:format is a depth/stencil format which includes only the
+    stencil component, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-03293]]
+    If pname:format is a depth/stencil format which includes only the
+    stencil component, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-06242]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-06243]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+****
+
+include::{generated}/validity/structs/VkAttachmentDescription.adoc[]
+--
+
+[open,refpage='VkAttachmentDescriptionFlagBits',desc='Bitmask specifying additional properties of an attachment',type='enums']
+--
+Bits which can: be set in slink:VkAttachmentDescription::pname:flags,
+describing additional properties of the attachment, are:
+
+include::{generated}/api/enums/VkAttachmentDescriptionFlagBits.adoc[]
+
+  * ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT specifies that the
+    attachment aliases the same device memory as other attachments.
+--
+
+[open,refpage='VkAttachmentDescriptionFlags',desc='Bitmask of VkAttachmentDescriptionFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkAttachmentDescriptionFlags.adoc[]
+
+tname:VkAttachmentDescriptionFlags is a bitmask type for setting a mask of
+zero or more elink:VkAttachmentDescriptionFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[open,refpage='VkRenderPassInputAttachmentAspectCreateInfo',desc='Structure specifying, for a given subpass/input attachment pair, which aspect can: be read.',type='structs']
+--
+The sname:VkRenderPassInputAttachmentAspectCreateInfo structure is defined
+as:
+
+include::{generated}/api/structs/VkRenderPassInputAttachmentAspectCreateInfo.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassInputAttachmentAspectCreateInfoKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:aspectReferenceCount is the number of elements in the
+    pname:pAspectReferences array.
+  * pname:pAspectReferences is a pointer to an array of
+    pname:aspectReferenceCount slink:VkInputAttachmentAspectReference
+    structures containing a mask describing which aspect(s) can: be accessed
+    for a given input attachment within a given subpass.
+
+To specify which aspects of an input attachment can: be read, add a
+slink:VkRenderPassInputAttachmentAspectCreateInfo structure to the
+pname:pNext chain of the slink:VkRenderPassCreateInfo structure:
+
+An application can: access any aspect of an input attachment that does not
+have a specified aspect mask in the pname:pAspectReferences array.
+Otherwise, an application must: not access aspect(s) of an input attachment
+other than those in its specified aspect mask.
+
+include::{generated}/validity/structs/VkRenderPassInputAttachmentAspectCreateInfo.adoc[]
+--
+
+[open,refpage='VkInputAttachmentAspectReference',desc='Structure specifying a subpass/input attachment pair and an aspect mask that can: be read.',type='structs']
+--
+The sname:VkInputAttachmentAspectReference structure is defined as:
+
+include::{generated}/api/structs/VkInputAttachmentAspectReference.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkInputAttachmentAspectReferenceKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:subpass is an index into the pname:pSubpasses array of the parent
+    sname:VkRenderPassCreateInfo structure.
+  * pname:inputAttachmentIndex is an index into the pname:pInputAttachments
+    of the specified subpass.
+  * pname:aspectMask is a mask of which aspect(s) can: be accessed within
+    the specified subpass.
+
+This structure specifies an aspect mask for a specific input attachment of a
+specific subpass in the render pass.
+
+pname:subpass and pname:inputAttachmentIndex index into the render pass as:
+
+[source,c]
+----
+pCreateInfo->pSubpasses[subpass].pInputAttachments[inputAttachmentIndex]
+----
+
+.Valid Usage
+****
+  * [[VUID-VkInputAttachmentAspectReference-aspectMask-01964]]
+    pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkInputAttachmentAspectReference-aspectMask-02250]]
+    pname:aspectMask must: not include
+    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkInputAttachmentAspectReference.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[open,refpage='VkSubpassDescription',desc='Structure specifying a subpass description',type='structs']
+--
+:refpage: VkSubpassDescription
+
+The sname:VkSubpassDescription structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescription.adoc[]
+
+  * pname:flags is a bitmask of elink:VkSubpassDescriptionFlagBits
+    specifying usage of the subpass.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    the pipeline type supported for this subpass.
+  * pname:inputAttachmentCount is the number of input attachments.
+  * pname:pInputAttachments is a pointer to an array of
+    slink:VkAttachmentReference structures defining the input attachments
+    for this subpass and their layouts.
+  * pname:colorAttachmentCount is the number of color attachments.
+  * pname:pColorAttachments is a pointer to an array of
+    pname:colorAttachmentCount slink:VkAttachmentReference structures
+    defining the color attachments for this subpass and their layouts.
+  * pname:pResolveAttachments is `NULL` or a pointer to an array of
+    pname:colorAttachmentCount slink:VkAttachmentReference structures
+    defining the resolve attachments for this subpass and their layouts.
+  * pname:pDepthStencilAttachment is a pointer to a
+    slink:VkAttachmentReference structure specifying the depth/stencil
+    attachment for this subpass and its layout.
+  * pname:preserveAttachmentCount is the number of preserved attachments.
+  * pname:pPreserveAttachments is a pointer to an array of
+    pname:preserveAttachmentCount render pass attachment indices identifying
+    attachments that are not used by this subpass, but whose contents must:
+    be preserved throughout the subpass.
+
+Each element of the pname:pInputAttachments array corresponds to an input
+attachment index in a fragment shader, i.e. if a shader declares an image
+variable decorated with a code:InputAttachmentIndex value of *X*, then it
+uses the attachment provided in pname:pInputAttachments[*X*].
+Input attachments must: also be bound to the pipeline in a descriptor set.
+If the pname:attachment member of any element of pname:pInputAttachments is
+ename:VK_ATTACHMENT_UNUSED, the application must: not read from the
+corresponding input attachment index.
+Fragment shaders can: use subpass input variables to access the contents of
+an input attachment at the fragment's (x, y, layer) framebuffer coordinates.
+ifdef::VK_QCOM_render_pass_transform[]
+Input attachments must: not be used by any subpasses within a render pass
+that enables <<vertexpostproc-renderpass-transform, render pass transform>>.
+endif::VK_QCOM_render_pass_transform[]
+
+Each element of the pname:pColorAttachments array corresponds to an output
+location in the shader, i.e. if the shader declares an output variable
+decorated with a code:Location value of *X*, then it uses the attachment
+provided in pname:pColorAttachments[*X*].
+If the pname:attachment member of any element of pname:pColorAttachments is
+ename:VK_ATTACHMENT_UNUSED,
+ifdef::VK_EXT_color_write_enable[]
+or if <<framebuffer-color-write-enable,Color Write Enable>> has been
+disabled for the corresponding attachment index,
+endif::VK_EXT_color_write_enable[]
+then writes to the corresponding location by a fragment shader are
+discarded.
+
+If
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+pname:flags does not include
+ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+endif::VK_QCOM_render_pass_shader_resolve[]
+pname:pResolveAttachments is not `NULL`, each of its elements corresponds to
+a color attachment (the element in pname:pColorAttachments at the same
+index), and a <<renderpass-resolve-operations,multisample resolve
+operation>> is defined for each attachment unless the resolve attachment
+index is ename:VK_ATTACHMENT_UNUSED.
+
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+Similarly, if
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+pname:flags does not include
+ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and
+endif::VK_QCOM_render_pass_shader_resolve[]
+slink:VkSubpassDescriptionDepthStencilResolve::pname:pDepthStencilResolveAttachment
+is not `NULL` and does not have the value ename:VK_ATTACHMENT_UNUSED, it
+corresponds to the depth/stencil attachment in
+pname:pDepthStencilAttachment, and
+<<renderpass-resolve-operations,multisample resolve operation>> for depth
+and stencil are defined by
+slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode and
+slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode,
+respectively.
+If slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode is
+ename:VK_RESOLVE_MODE_NONE or the pname:pDepthStencilResolveAttachment does
+not have a depth aspect, no resolve operation is performed for the depth
+attachment.
+If slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode
+is ename:VK_RESOLVE_MODE_NONE or the pname:pDepthStencilResolveAttachment
+does not have a stencil aspect, no resolve operation is performed for the
+stencil attachment.
+
+ifdef::VK_EXT_sample_locations[]
+If the image subresource range referenced by the depth/stencil attachment is
+created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT, then the
+<<renderpass-resolve-operations,multisample resolve operation>> uses the
+sample locations state specified in the pname:sampleLocationsInfo member of
+the element of the
+sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pPostSubpassSampleLocations
+for the subpass.
+endif::VK_EXT_sample_locations[]
+
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+If pname:pDepthStencilAttachment is `NULL`, or if its attachment index is
+ename:VK_ATTACHMENT_UNUSED, it indicates that no depth/stencil attachment
+will be used in the subpass.
+
+[[renderpass-attachment-contents]]
+The contents of an attachment within the render area become undefined: at
+the start of a subpass *S* if all of the following conditions are true:
+
+  * The attachment is used as a color, depth/stencil, or resolve attachment
+    in any subpass in the render pass.
+  * There is a subpass *S~1~* that uses or preserves the attachment, and a
+    subpass dependency from *S~1~* to *S*.
+  * The attachment is not used or preserved in subpass *S*.
+
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+In addition, the contents of an attachment within the render area become
+undefined: at the start of a subpass *S* if all of the following conditions
+are true:
+
+  * ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM is set.
+  * The attachment is used as a color or depth/stencil in the subpass.
+endif::VK_QCOM_render_pass_shader_resolve[]
+
+Once the contents of an attachment become undefined: in subpass *S*, they
+remain undefined: for subpasses in subpass dependency chains starting with
+subpass *S* until they are written again.
+However, they remain valid for subpasses in other subpass dependency chains
+starting with subpass *S~1~* if those subpasses use or preserve the
+attachment.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/subpass_description_common.adoc[]
+  * [[VUID-VkSubpassDescription-pipelineBindPoint-04952]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+ifdef::VK_HUAWEI_subpass_shading[]
+    or ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription-colorAttachmentCount-00845]]
+    pname:colorAttachmentCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxColorAttachments
+  * [[VUID-VkSubpassDescription-loadOp-00846]]
+    If the first use of an attachment in this render pass is as an input
+    attachment, and the attachment is not also used as a color or
+    depth/stencil attachment in the same subpass, then pname:loadOp must:
+    not be ename:VK_ATTACHMENT_LOAD_OP_CLEAR
+  * [[VUID-VkSubpassDescription-pResolveAttachments-00847]]
+    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
+    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
+    attachment must: not be ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription-pResolveAttachments-00848]]
+    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
+    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
+    attachment must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescription-pResolveAttachments-00849]]
+    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
+    is not ename:VK_ATTACHMENT_UNUSED must: have a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescription-pResolveAttachments-00850]]
+    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
+    is not ename:VK_ATTACHMENT_UNUSED must: have the same elink:VkFormat as
+    its corresponding color attachment
+  * [[VUID-VkSubpassDescription-pColorAttachments-06868]]
+    If neither the `apiext:VK_AMD_mixed_attachment_samples` extension nor
+    the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled, all
+    attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have the same sample count
+  * [[VUID-VkSubpassDescription-pInputAttachments-02647]]
+    All attachments in pname:pInputAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> contain at
+    least ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkSubpassDescription-pColorAttachments-02648]]
+    All attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkSubpassDescription-pResolveAttachments-02649]]
+    All attachments in pname:pResolveAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-02650]]
+    If pname:pDepthStencilAttachment is not `NULL` and the attachment is not
+    ename:VK_ATTACHMENT_UNUSED then it must: have an image format whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkSubpassDescription-linearColorAttachment-06496]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in pname:pInputAttachments
+    that are not ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+  * [[VUID-VkSubpassDescription-linearColorAttachment-06497]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in pname:pColorAttachments
+    that are not ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+  * [[VUID-VkSubpassDescription-linearColorAttachment-06498]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in
+    pname:pResolveAttachments that are not ename:VK_ATTACHMENT_UNUSED must:
+    have image formats whose <<potential-format-features, potential format
+    features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_AMD_mixed_attachment_samples[]
+  * [[VUID-VkSubpassDescription-pColorAttachments-01506]]
+    If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    all attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have a sample count that is smaller
+    than or equal to the sample count of pname:pDepthStencilAttachment if it
+    is not ename:VK_ATTACHMENT_UNUSED
+endif::VK_AMD_mixed_attachment_samples[]
+  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-01418]]
+    If neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
+    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, and if
+    pname:pDepthStencilAttachment is not ename:VK_ATTACHMENT_UNUSED and any
+    attachments in pname:pColorAttachments are not
+    ename:VK_ATTACHMENT_UNUSED, they must: have the same sample count
+  * [[VUID-VkSubpassDescription-attachment-00853]]
+    Each element of pname:pPreserveAttachments must: not be
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription-pPreserveAttachments-00854]]
+    Each element of pname:pPreserveAttachments must: not also be an element
+    of any other member of the subpass description
+  * [[VUID-VkSubpassDescription-layout-02519]]
+    If any attachment is used by more than one slink:VkAttachmentReference
+    member, then each use must: use the same pname:layout
+ifdef::VK_NVX_multiview_per_view_attributes[]
+  * [[VUID-VkSubpassDescription-flags-00856]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must:
+    also include ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
+endif::VK_NVX_multiview_per_view_attributes[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+  * [[VUID-VkSubpassDescription-flags-03341]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+    pname:pResolveAttachments is not `NULL`, then each resolve attachment
+    must: be ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription-flags-03343]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
+    must: be the last subpass in a subpass dependency chain
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VK_QCOM_render_pass_transform[]
+  * [[VUID-VkSubpassDescription-pInputAttachments-02868]]
+    If the render pass is created with
+    ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM each of the elements of
+    pname:pInputAttachments must: be ename:VK_ATTACHMENT_UNUSED
+endif::VK_QCOM_render_pass_transform[]
+  * [[VUID-VkSubpassDescription-pDepthStencilAttachment-04438]]
+    pname:pDepthStencilAttachment and pname:pColorAttachments must not
+    contain references to the same attachment
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSubpassDescription-inputAttachmentCount-05053]]
+    pname:inputAttachmentCount must: be less than or equal to
+    <<limits-maxSubpassInputAttachments,maxSubpassInputAttachments>>
+  * [[VUID-VkSubpassDescription-preserveAttachmentCount-05054]]
+    pname:preserveAttachmentCount must: be less than or equal to
+    <<limits-maxSubpassPreserveAttachments,maxSubpassPreserveAttachments>>
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/structs/VkSubpassDescription.adoc[]
+--
+
+[open,refpage='VkSubpassDescriptionFlagBits',desc='Bitmask specifying usage of a subpass',type='enums']
+--
+Bits which can: be set in slink:VkSubpassDescription::pname:flags,
+specifying usage of the subpass, are:
+
+include::{generated}/api/enums/VkSubpassDescriptionFlagBits.adoc[]
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+  * ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX specifies that
+    shaders compiled for this subpass write the attributes for all views in
+    a single invocation of each
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>.
+    All pipelines compiled against a subpass that includes this bit must:
+    write per-view attributes to the `*PerViewNV[]` shader outputs, in
+    addition to the non-per-view (e.g. code:Position) outputs.
+  * ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX specifies
+    that shaders compiled for this subpass use per-view positions which only
+    differ in value in the x component.
+    Per-view viewport mask can: also be used.
+endif::VK_NVX_multiview_per_view_attributes[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+  * ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM specifies that the
+    framebuffer region is the fragment region, that is, the minimum region
+    dependencies are by pixel rather than by sample, such that any fragment
+    shader invocation can: access any sample associated with that fragment
+    shader invocation.
+  * ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM specifies that the
+    subpass performs shader resolve operations.
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT
+    specifies that this subpass supports pipelines created with
+    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT.
+  * ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+    specifies that this subpass supports pipelines created with
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT.
+  * ename:VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+    specifies that this subpass supports pipelines created with
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_legacy_dithering[]
+  * ename:VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT specifies
+    that <<interfaces-legacy-dithering, Legacy Dithering>> is enabled for
+    this subpass.
+endif::VK_EXT_legacy_dithering[]
+
+ifndef::VK_NVX_multiview_per_view_attributes,VK_QCOM_render_pass_shader_resolve[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_NVX_multiview_per_view_attributes,VK_QCOM_render_pass_shader_resolve[]
+
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+[NOTE]
+.Note
+====
+Shader resolve operations allow for custom resolve operations, but
+overdrawing pixels may: have a performance and/or power cost.
+Furthermore, since the content of any depth stencil attachment or color
+attachment is undefined: at the beginning of a shader resolve subpass, any
+depth testing, stencil testing, or blending operation which sources these
+undefined: values also has undefined: result value.
+====
+endif::VK_QCOM_render_pass_shader_resolve[]
+--
+
+[open,refpage='VkSubpassDescriptionFlags',desc='Bitmask of VkSubpassDescriptionFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSubpassDescriptionFlags.adoc[]
+
+tname:VkSubpassDescriptionFlags is a bitmask type for setting a mask of zero
+or more elink:VkSubpassDescriptionFlagBits.
+--
+
+[open,refpage='VkAttachmentReference',desc='Structure specifying an attachment reference',type='structs']
+--
+:refpage: VkAttachmentReference
+
+The sname:VkAttachmentReference structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentReference.adoc[]
+
+  * pname:attachment is either an integer value identifying an attachment at
+    the corresponding index in
+    slink:VkRenderPassCreateInfo::pname:pAttachments, or
+    ename:VK_ATTACHMENT_UNUSED to signify that this attachment is not used.
+  * pname:layout is a elink:VkImageLayout value specifying the layout the
+    attachment uses during the subpass.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/attachment_reference_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkAttachmentReference.adoc[]
+--
+
+[open,refpage='VK_SUBPASS_EXTERNAL',desc='Subpass index sentinel expanding synchronization scope outside a subpass',type='consts']
+--
+ename:VK_SUBPASS_EXTERNAL is a special subpass index value expanding
+synchronization scope outside a subpass.
+It is described in more detail by slink:VkSubpassDependency.
+
+include::{generated}/api/enums/VK_SUBPASS_EXTERNAL.adoc[]
+--
+
+[open,refpage='VkSubpassDependency',desc='Structure specifying a subpass dependency',type='structs']
+--
+:refpage: VkSubpassDependency
+The sname:VkSubpassDependency structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDependency.adoc[]
+
+  * pname:srcSubpass is the subpass index of the first subpass in the
+    dependency, or ename:VK_SUBPASS_EXTERNAL.
+  * pname:dstSubpass is the subpass index of the second subpass in the
+    dependency, or ename:VK_SUBPASS_EXTERNAL.
+  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks, source stage
+    mask>>.
+  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks, destination
+    stage mask>>
+  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, source access mask>>.
+  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, destination access mask>>.
+  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits.
+
+If pname:srcSubpass is equal to pname:dstSubpass then the
+slink:VkSubpassDependency does not directly define a
+<<synchronization-dependencies,dependency>>.
+Instead, it enables pipeline barriers to be used in a render pass instance
+within the identified subpass, where the scopes of one pipeline barrier
+must: be a subset of those described by one subpass dependency.
+Subpass dependencies specified in this way that include
+<<synchronization-framebuffer-regions,framebuffer-space stages>> in the
+pname:srcStageMask must: only include
+<<synchronization-framebuffer-regions,framebuffer-space stages>> in
+pname:dstStageMask, and must: include ename:VK_DEPENDENCY_BY_REGION_BIT.
+ifdef::VK_KHR_multiview,VK_VERSION_1_1[]
+When a subpass dependency is specified in this way for a subpass that has
+more than one view in its view mask, its pname:dependencyFlags must: include
+ename:VK_DEPENDENCY_VIEW_LOCAL_BIT.
+endif::VK_KHR_multiview,VK_VERSION_1_1[]
+
+If pname:srcSubpass and pname:dstSubpass are not equal, when a render pass
+instance which includes a subpass dependency is submitted to a queue, it
+defines a <<synchronization-dependencies,dependency>> between the subpasses
+identified by pname:srcSubpass and pname:dstSubpass.
+
+If pname:srcSubpass is equal to ename:VK_SUBPASS_EXTERNAL, the first
+<<synchronization-dependencies-scopes, synchronization scope>> includes
+commands that occur earlier in <<synchronization-submission-order,submission
+order>> than the flink:vkCmdBeginRenderPass used to begin the render pass
+instance.
+Otherwise, the first set of commands includes all commands submitted as part
+of the subpass instance identified by pname:srcSubpass and any
+<<renderpass-load-operations, load>>, <<renderpass-store-operations,
+store>>, or <<renderpass-resolve-operations, multisample resolve>>
+operations on attachments used in pname:srcSubpass.
+In either case, the first synchronization scope is limited to operations on
+the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, source stage mask>> specified by
+pname:srcStageMask.
+
+If pname:dstSubpass is equal to ename:VK_SUBPASS_EXTERNAL, the second
+<<synchronization-dependencies-scopes, synchronization scope>> includes
+commands that occur later in <<synchronization-submission-order,submission
+order>> than the flink:vkCmdEndRenderPass used to end the render pass
+instance.
+Otherwise, the second set of commands includes all commands submitted as
+part of the subpass instance identified by pname:dstSubpass and any
+<<renderpass-load-operations, load>>, <<renderpass-store-operations,
+store>>, and <<renderpass-resolve-operations, multisample resolve>>
+operations on attachments used in pname:dstSubpass.
+In either case, the second synchronization scope is limited to operations on
+the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by pname:dstStageMask.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, source stage mask>> specified by
+pname:srcStageMask.
+It is also limited to access types in the <<synchronization-access-masks,
+source access mask>> specified by pname:srcAccessMask.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by pname:dstStageMask.
+It is also limited to access types in the <<synchronization-access-masks,
+destination access mask>> specified by pname:dstAccessMask.
+
+The <<synchronization-dependencies-available-and-visible, availability and
+visibility operations>> defined by a subpass dependency affect the execution
+of <<renderpass-layout-transitions, image layout transitions>> within the
+render pass.
+
+[NOTE]
+.Note
+====
+For non-attachment resources, the memory dependency expressed by subpass
+dependency is nearly identical to that of a slink:VkMemoryBarrier (with
+matching pname:srcAccessMask and pname:dstAccessMask parameters) submitted
+as a part of a flink:vkCmdPipelineBarrier (with matching pname:srcStageMask
+and pname:dstStageMask parameters).
+The only difference being that its scopes are limited to the identified
+subpasses rather than potentially affecting everything before and after.
+
+For attachments however, subpass dependencies work more like a
+slink:VkImageMemoryBarrier defined similarly to the slink:VkMemoryBarrier
+above, the queue family indices set to ename:VK_QUEUE_FAMILY_IGNORED, and
+layouts as follows:
+
+  * The equivalent to pname:oldLayout is the attachment's layout according
+    to the subpass description for pname:srcSubpass.
+  * The equivalent to pname:newLayout is the attachment's layout according
+    to the subpass description for pname:dstSubpass.
+====
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+
+:stageMaskName: dstStageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+
+  * [[VUID-VkSubpassDependency-srcSubpass-00864]]
+    pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
+    one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies
+    and ensure a valid execution order
+  * [[VUID-VkSubpassDependency-srcSubpass-00865]]
+    pname:srcSubpass and pname:dstSubpass must: not both be equal to
+    ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency-srcSubpass-06809]]
+    If pname:srcSubpass is equal to pname:dstSubpass and pname:srcStageMask
+    includes a <<synchronization-framebuffer-regions,framebuffer-space
+    stage>>, pname:dstStageMask must: only contain
+    <<synchronization-framebuffer-regions, framebuffer-space stages>>
+  * [[VUID-VkSubpassDependency-srcAccessMask-00868]]
+    Any access flag included in pname:srcAccessMask must: be supported by
+    one of the pipeline stages in pname:srcStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-VkSubpassDependency-dstAccessMask-00869]]
+    Any access flag included in pname:dstAccessMask must: be supported by
+    one of the pipeline stages in pname:dstStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-VkSubpassDependency-srcSubpass-02243]]
+    If pname:srcSubpass equals pname:dstSubpass, and pname:srcStageMask and
+    pname:dstStageMask both include a
+    <<synchronization-framebuffer-regions,framebuffer-space stage>>, then
+    pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkSubpassDependency-dependencyFlags-02520]]
+    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
+    pname:srcSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency-dependencyFlags-02521]]
+    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
+    pname:dstSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency-srcSubpass-00872]]
+    If pname:srcSubpass equals pname:dstSubpass and that subpass has more
+    than one bit set in the view mask, then pname:dependencyFlags must:
+    include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/structs/VkSubpassDependency.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+When multiview is enabled, the execution of the multiple views of one
+subpass may: not occur simultaneously or even back-to-back, and rather may:
+be interleaved with the execution of other subpasses.
+The load and store operations apply to attachments on a per-view basis.
+For example, an attachment using ename:VK_ATTACHMENT_LOAD_OP_CLEAR will have
+each view cleared on first use, but the first use of one view may be
+temporally distant from the first use of another view.
+
+[NOTE]
+.Note
+====
+A good mental model for multiview is to think of a multiview subpass as if
+it were a collection of individual (per-view) subpasses that are logically
+grouped together and described as a single multiview subpass in the API.
+Similarly, a multiview attachment can be thought of like several individual
+attachments that happen to be layers in a single image.
+A view-local dependency between two multiview subpasses acts like a set of
+one-to-one dependencies between corresponding pairs of per-view subpasses.
+A view-global dependency between two multiview subpasses acts like a set of
+[eq]#N {times} M# dependencies between all pairs of per-view subpasses in
+the source and destination.
+Thus, it is a more compact representation which also makes clear the
+commonality and reuse that is present between views in a subpass.
+This interpretation motivates the answers to questions like "`when does the
+load op apply`" - it is on the first use of each view of an attachment, as
+if each view was a separate attachment.
+
+The content of each view follows the description in
+<<renderpass-attachment-contents, attachment content behavior>>.
+In particular, if an attachment is preserved, all views within the
+attachment are preserved.
+====
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_EXT_transform_feedback[]
+If any two subpasses of a render pass activate transform feedback to the
+same bound transform feedback buffers, a subpass dependency must: be
+included (either directly or via some intermediate subpasses) between them.
+endif::VK_EXT_transform_feedback[]
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+The following two alleged implicit dependencies are practically no-ops, as
+the operations they describe are already guaranteed by semaphores and
+submission order (so they are almost entirely no-ops on their own).
+The *only* reason they exist is because it simplifies reasoning about where
+<<renderpass-layout-transitions, automatic layout transitions>> happen.
+Further rewrites of this chapter could potentially remove the need for
+these.
+====
+endif::editing-notes[]
+
+[[renderpass-implicit-dependencies]]
+If there is no subpass dependency from ename:VK_SUBPASS_EXTERNAL to the
+first subpass that uses an attachment, then an implicit subpass dependency
+exists from ename:VK_SUBPASS_EXTERNAL to the first subpass it is used in.
+The implicit subpass dependency only exists if there exists an automatic
+layout transition away from pname:initialLayout.
+The subpass dependency operates as if defined with the following parameters:
+
+[source,c]
+----
+VkSubpassDependency implicitDependency = {
+    .srcSubpass = VK_SUBPASS_EXTERNAL,
+    .dstSubpass = firstSubpass, // First subpass attachment is used in
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .srcStageMask = VK_PIPELINE_STAGE_NONE,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+    .srcAccessMask = 0,
+    .dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
+                     VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+                     VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+    .dependencyFlags = 0
+};
+----
+
+Similarly, if there is no subpass dependency from the last subpass that uses
+an attachment to ename:VK_SUBPASS_EXTERNAL, then an implicit subpass
+dependency exists from the last subpass it is used in to
+ename:VK_SUBPASS_EXTERNAL.
+The implicit subpass dependency only exists if there exists an automatic
+layout transition into pname:finalLayout.
+The subpass dependency operates as if defined with the following parameters:
+
+[source,c]
+----
+VkSubpassDependency implicitDependency = {
+    .srcSubpass = lastSubpass, // Last subpass attachment is used in
+    .dstSubpass = VK_SUBPASS_EXTERNAL,
+    .srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .dstStageMask = VK_PIPELINE_STAGE_NONE,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+                     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+    .dstAccessMask = 0,
+    .dependencyFlags = 0
+};
+----
+
+[[renderpass-layout-transitions]]
+As subpasses may: overlap or execute out of order with regards to other
+subpasses unless a subpass dependency chain describes otherwise, the layout
+transitions required between subpasses cannot: be known to an application.
+Instead, an application provides the layout that each attachment must: be in
+at the start and end of a render pass, and the layout it must: be in during
+each subpass it is used in.
+The implementation then must: execute layout transitions between subpasses
+in order to guarantee that the images are in the layouts required by each
+subpass, and in the final layout at the end of the render pass.
+
+Automatic layout transitions apply to the entire image subresource attached
+to the framebuffer.
+If
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+multiview is not enabled and
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+the attachment is a view of a 1D or 2D image, the automatic layout
+transitions apply to the number of layers specified by
+slink:VkFramebufferCreateInfo::pname:layers.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If multiview is enabled and the attachment is a view of a 1D or 2D image,
+the automatic layout transitions apply to the layers corresponding to views
+which are used by some subpass in the render pass, even if that subpass does
+not reference the given attachment.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+If the attachment view is a 2D or 2D array view of a 3D image, even if the
+attachment view only refers to a subset of the slices of the selected mip
+level of the 3D image, automatic layout transitions apply to the entire
+subresource referenced which is the entire mip level in this case.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+Automatic layout transitions away from the layout used in a subpass
+happen-after the availability operations for all dependencies with that
+subpass as the pname:srcSubpass.
+
+Automatic layout transitions into the layout used in a subpass happen-before
+the visibility operations for all dependencies with that subpass as the
+pname:dstSubpass.
+
+Automatic layout transitions away from pname:initialLayout happen-after the
+availability operations for all dependencies with a pname:srcSubpass equal
+to ename:VK_SUBPASS_EXTERNAL, where pname:dstSubpass uses the attachment
+that will be transitioned.
+For attachments created with ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
+automatic layout transitions away from pname:initialLayout happen-after the
+availability operations for all dependencies with a pname:srcSubpass equal
+to ename:VK_SUBPASS_EXTERNAL, where pname:dstSubpass uses any aliased
+attachment.
+
+Automatic layout transitions into pname:finalLayout happen-before the
+visibility operations for all dependencies with a pname:dstSubpass equal to
+ename:VK_SUBPASS_EXTERNAL, where pname:srcSubpass uses the attachment that
+will be transitioned.
+For attachments created with ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,
+automatic layout transitions into pname:finalLayout happen-before the
+visibility operations for all dependencies with a pname:dstSubpass equal to
+ename:VK_SUBPASS_EXTERNAL, where pname:srcSubpass uses any aliased
+attachment.
+
+ifdef::VK_EXT_sample_locations[]
+
+The image layout of the depth aspect of a depth/stencil attachment referring
+to an image created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is dependent
+on the last sample locations used to render to the attachment, thus
+automatic layout transitions use the sample locations state specified in
+slink:VkRenderPassSampleLocationsBeginInfoEXT.
+
+Automatic layout transitions of an attachment referring to a depth/stencil
+image created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT use the
+sample locations the image subresource range referenced by the attachment
+was last rendered with.
+If the current render pass does not use the attachment as a depth/stencil
+attachment in any subpass that happens-before, the automatic layout
+transition uses the sample locations state specified in the
+pname:sampleLocationsInfo member of the element of the
+sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pAttachmentInitialSampleLocations
+array for which the pname:attachmentIndex member equals the attachment index
+of the attachment, if one is specified.
+Otherwise, the automatic layout transition uses the sample locations state
+specified in the pname:sampleLocationsInfo member of the element of the
+sname:VkRenderPassSampleLocationsBeginInfoEXT::pname:pPostSubpassSampleLocations
+array for which the pname:subpassIndex member equals the index of the
+subpass that last used the attachment as a depth/stencil attachment, if one
+is specified.
+
+If no sample locations state has been specified for an automatic layout
+transition performed on an attachment referring to a depth/stencil image
+created with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+the contents of the depth aspect of the depth/stencil attachment become
+undefined: as if the layout of the attachment was transitioned from the
+ename:VK_IMAGE_LAYOUT_UNDEFINED layout.
+
+endif::VK_EXT_sample_locations[]
+
+If two subpasses use the same attachment, and both subpasses use the
+attachment in a read-only layout, no subpass dependency needs to be
+specified between those subpasses.
+If an implementation treats those layouts separately, it must: insert an
+implicit subpass dependency between those subpasses to separate the uses in
+each layout.
+The subpass dependency operates as if defined with the following parameters:
+
+[source,c]
+----
+// Used for input attachments
+VkPipelineStageFlags inputAttachmentStages = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
+VkAccessFlags inputAttachmentDstAccess = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
+
+// Used for depth/stencil attachments
+VkPipelineStageFlags depthStencilAttachmentStages = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
+VkAccessFlags depthStencilAttachmentDstAccess = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;
+
+VkSubpassDependency implicitDependency = {
+    .srcSubpass = firstSubpass;
+    .dstSubpass = secondSubpass;
+    .srcStageMask = inputAttachmentStages | depthStencilAttachmentStages;
+    .dstStageMask = inputAttachmentStages | depthStencilAttachmentStages;
+    .srcAccessMask = 0;
+    .dstAccessMask = inputAttachmentDstAccess | depthStencilAttachmentDstAccess;
+    .dependencyFlags = 0;
+};
+----
+
+
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+When
+ifdef::VK_EXT_shader_object[drawing using <<shaders-objects, shader objects>>,]
+ifdef::VK_EXT_shader_object[or when]
+the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, the
+application must: specify which types of attachments that are written to
+during a render pass will also be accessed as non-attachments in the render
+pass.
+
+[open,refpage='vkCmdSetAttachmentFeedbackLoopEnableEXT',desc='Specify whether attachment feedback loops are enabled dynamically on a command buffer',type='protos']
+--
+:refpage: vkCmdSetAttachmentFeedbackLoopEnableEXT
+
+To <<pipelines-dynamic-state, dynamically set>> whether a pipeline can:
+access a resource as a non-attachment while it is also used as an attachment
+that is written to, call:
+
+include::{generated}/api/protos/vkCmdSetAttachmentFeedbackLoopEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:aspectMask specifies the types of attachments for which feedback
+    loops will be enabled.
+    Attachment types whose aspects are not included in pname:aspectMask will
+    have feedback loops disabled.
+
+For attachments that are written to in a render pass, only attachments with
+the aspects specified in pname:aspectMask can: be accessed as
+non-attachments by subsequent <<drawing, drawing commands>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-attachmentFeedbackLoopDynamicState-08862]]
+    The <<features-attachmentFeedbackLoopDynamicState,
+    pname:attachmentFeedbackLoopDynamicState>> feature must: be enabled
+  * [[VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-aspectMask-08863]]
+    pname:aspectMask must: only include ename:VK_IMAGE_ASPECT_NONE,
+    ename:VK_IMAGE_ASPECT_COLOR_BIT, ename:VK_IMAGE_ASPECT_DEPTH_BIT, and
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-attachmentFeedbackLoopLayout-08864]]
+    If the <<features-attachmentFeedbackLoopLayout,
+    pname:attachmentFeedbackLoopLayout>> feature is not enabled,
+    pname:aspectMask must: be ename:VK_IMAGE_ASPECT_NONE
+****
+
+include::{generated}/validity/protos/vkCmdSetAttachmentFeedbackLoopEnableEXT.adoc[]
+--
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+A more extensible version of render pass creation is also defined below.
+
+[open,refpage='vkCreateRenderPass2',desc='Create a new render pass object',type='protos',alias='vkCreateRenderPass2KHR']
+--
+
+:refpage: vkCreateRenderPass2
+:objectnameplural: render passes
+:objectnamecamelcase: renderPass
+:objectcount: 1
+
+To create a render pass, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCreateRenderPass2.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
+
+ifdef::VK_KHR_create_renderpass2[]
+include::{generated}/api/protos/vkCreateRenderPass2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:device is the logical device that creates the render pass.
+  * pname:pCreateInfo is a pointer to a slink:VkRenderPassCreateInfo2
+    structure describing the parameters of the render pass.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pRenderPass is a pointer to a slink:VkRenderPass handle in which
+    the resulting render pass object is returned.
+
+This command is functionally identical to flink:vkCreateRenderPass, but
+includes extensible sub-structures that include pname:sType and pname:pNext
+parameters, allowing them to be more easily extended.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+
+:uniqifier: subpasses
+:combinedobjectnameplural: subpasses
+:combinedparentobject: VkRenderPass
+:combinedobjectcount: pname:pCreateInfo->subpassCount
+:combinedobjectnamecamelcase: subpassDescription
+include::{chapters}/commonvalidity/memory_reservation_request_count_combined_common.adoc[]
+
+:uniqifier: attachments
+:combinedobjectnameplural: attachments
+:combinedparentobject: VkRenderPass
+:combinedobjectcount: pname:pCreateInfo->attachmentCount
+:combinedobjectnamecamelcase: attachmentDescription
+include::{chapters}/commonvalidity/memory_reservation_request_count_combined_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateRenderPass2.adoc[]
+--
+
+[open,refpage='VkRenderPassCreateInfo2',desc='Structure specifying parameters of a newly created render pass',type='structs',alias='VkRenderPassCreateInfo2KHR']
+--
+The sname:VkRenderPassCreateInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassCreateInfo2.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassCreateInfo2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:attachmentCount is the number of attachments used by this render
+    pass.
+  * pname:pAttachments is a pointer to an array of pname:attachmentCount
+    slink:VkAttachmentDescription2 structures describing the attachments
+    used by the render pass.
+  * pname:subpassCount is the number of subpasses to create.
+  * pname:pSubpasses is a pointer to an array of pname:subpassCount
+    slink:VkSubpassDescription2 structures describing each subpass.
+  * pname:dependencyCount is the number of dependencies between pairs of
+    subpasses.
+  * pname:pDependencies is a pointer to an array of pname:dependencyCount
+    slink:VkSubpassDependency2 structures describing dependencies between
+    pairs of subpasses.
+  * pname:correlatedViewMaskCount is the number of correlation masks.
+  * pname:pCorrelatedViewMasks is a pointer to an array of view masks
+    indicating sets of views that may: be more efficient to render
+    concurrently.
+
+Parameters defined by this structure with the same name as those in
+slink:VkRenderPassCreateInfo have the identical effect to those parameters;
+the child structures are variants of those used in
+slink:VkRenderPassCreateInfo which add pname:sType and pname:pNext
+parameters, allowing them to be extended.
+
+If the slink:VkSubpassDescription2::pname:viewMask member of any element of
+pname:pSubpasses is not zero, _multiview_ functionality is considered to be
+enabled for this render pass.
+
+pname:correlatedViewMaskCount and pname:pCorrelatedViewMasks have the same
+effect as slink:VkRenderPassMultiviewCreateInfo::pname:correlationMaskCount
+and slink:VkRenderPassMultiviewCreateInfo::pname:pCorrelationMasks,
+respectively.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassCreateInfo2-None-03049]]
+    If any two subpasses operate on attachments with overlapping ranges of
+    the same sname:VkDeviceMemory object, and at least one subpass writes to
+    that area of sname:VkDeviceMemory, a subpass dependency must: be
+    included (either directly or via some intermediate subpasses) between
+    them
+  * [[VUID-VkRenderPassCreateInfo2-attachment-03050]]
+    If the pname:attachment member of any element of
+    pname:pInputAttachments, pname:pColorAttachments,
+    pname:pResolveAttachments or pname:pDepthStencilAttachment, or the
+    attachment indexed by any element of pname:pPreserveAttachments in any
+    element of pname:pSubpasses is bound to a range of a
+    sname:VkDeviceMemory object that overlaps with any other attachment in
+    any subpass (including the same subpass), the
+    sname:VkAttachmentDescription2 structures describing them must: include
+    ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in pname:flags
+  * [[VUID-VkRenderPassCreateInfo2-attachment-03051]]
+    If the pname:attachment member of any element of
+    pname:pInputAttachments, pname:pColorAttachments,
+    pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
+    element of pname:pPreserveAttachments in any element of pname:pSubpasses
+    is not ename:VK_ATTACHMENT_UNUSED, then it must: be less than
+    pname:attachmentCount
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderPassCreateInfo2-fragmentDensityMapAttachment-06472]]
+    If the pNext chain includes a
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT structure and the
+    pname:fragmentDensityMapAttachment member is not
+    ename:VK_ATTACHMENT_UNUSED, then pname:attachment must: be less than
+    pname:attachmentCount
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkRenderPassCreateInfo2-pSubpasses-06473]]
+    If the pname:pSubpasses pNext chain includes a
+    slink:VkSubpassDescriptionDepthStencilResolve structure and the
+    pname:pDepthStencilResolveAttachment member is not `NULL` and does not
+    have the value ename:VK_ATTACHMENT_UNUSED, then pname:attachment must:
+    be less than pname:attachmentCount
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkRenderPassCreateInfo2-pAttachments-02522]]
+    For any member of pname:pAttachments with a pname:loadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-VkRenderPassCreateInfo2-pAttachments-02523]]
+    For any member of pname:pAttachments with a pname:stencilLoadOp equal to
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
+    must: not specify a pname:layout equal to
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03054]]
+    For any element of pname:pDependencies, if the pname:srcSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
+    pname:srcStageMask member of that dependency must: be a pipeline stage
+    supported by the <<synchronization-pipeline-stages-types, pipeline>>
+    identified by the pname:pipelineBindPoint member of the source subpass
+  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03055]]
+    For any element of pname:pDependencies, if the pname:dstSubpass is not
+    ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
+    pname:dstStageMask member of that dependency must: be a pipeline stage
+    supported by the <<synchronization-pipeline-stages-types, pipeline>>
+    identified by the pname:pipelineBindPoint member of the destination
+    subpass
+  * [[VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-03056]]
+    The set of bits included in any element of pname:pCorrelatedViewMasks
+    must: not overlap with the set of bits included in any other element of
+    pname:pCorrelatedViewMasks
+  * [[VUID-VkRenderPassCreateInfo2-viewMask-03057]]
+    If the slink:VkSubpassDescription2::pname:viewMask member of all
+    elements of pname:pSubpasses is `0`, pname:correlatedViewMaskCount must:
+    be `0`
+  * [[VUID-VkRenderPassCreateInfo2-viewMask-03058]]
+    The slink:VkSubpassDescription2::pname:viewMask member of all elements
+    of pname:pSubpasses must: either all be `0`, or all not be `0`
+  * [[VUID-VkRenderPassCreateInfo2-viewMask-03059]]
+    If the slink:VkSubpassDescription2::pname:viewMask member of all
+    elements of pname:pSubpasses is `0`, the pname:dependencyFlags member of
+    any element of pname:pDependencies must: not include
+    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+  * [[VUID-VkRenderPassCreateInfo2-pDependencies-03060]]
+    For any element of pname:pDependencies where its pname:srcSubpass member
+    equals its pname:dstSubpass member, if the pname:viewMask member of the
+    corresponding element of pname:pSubpasses includes more than one bit,
+    its pname:dependencyFlags member must: include
+    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+  * [[VUID-VkRenderPassCreateInfo2-attachment-02525]]
+    If the pname:attachment member of any element of the
+    pname:pInputAttachments member of any element of pname:pSubpasses is not
+    ename:VK_ATTACHMENT_UNUSED, the pname:aspectMask member of that element
+    of pname:pInputAttachments must: only include aspects that are present
+    in images of the format specified by the element of pname:pAttachments
+    specified by pname:attachment
+  * [[VUID-VkRenderPassCreateInfo2-srcSubpass-02526]]
+    The pname:srcSubpass member of each element of pname:pDependencies must:
+    be less than pname:subpassCount
+  * [[VUID-VkRenderPassCreateInfo2-dstSubpass-02527]]
+    The pname:dstSubpass member of each element of pname:pDependencies must:
+    be less than pname:subpassCount
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderPassCreateInfo2-pAttachments-04585]]
+    If any element of pname:pAttachments is used as a fragment shading rate
+    attachment in any subpass, it must: not be used as any other attachment
+    in the render pass
+  * [[VUID-VkRenderPassCreateInfo2-pAttachments-09387]]
+    If any element of pname:pAttachments is used as a fragment shading rate
+    attachment, the pname:loadOp for that attachment must: not be
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR
+ifdef::VK_QCOM_render_pass_transform[]
+  * [[VUID-VkRenderPassCreateInfo2-flags-04521]]
+    If pname:flags includes ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM,
+    an element of pname:pSubpasses includes an instance of
+    slink:VkFragmentShadingRateAttachmentInfoKHR in its pname:pNext chain,
+    and the pname:pFragmentShadingRateAttachment member of that structure is
+    not equal to `NULL`, the pname:attachment member of
+    pname:pFragmentShadingRateAttachment must: be ename:VK_ATTACHMENT_UNUSED
+endif::VK_QCOM_render_pass_transform[]
+  * [[VUID-VkRenderPassCreateInfo2-pAttachments-04586]]
+    If any element of pname:pAttachments is used as a fragment shading rate
+    attachment in any subpass, it must: have an image format whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+  * [[VUID-VkRenderPassCreateInfo2-rasterizationSamples-04905]]
+    If the pipeline is being created with fragment shader state, and the
+    `apiext:VK_QCOM_render_pass_shader_resolve extension` is enabled, and if
+    subpass has any input attachments, and if the subpass description
+    contains ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the
+    sample count of the input attachments must: equal
+    pname:rasterizationSamples
+  * [[VUID-VkRenderPassCreateInfo2-sampleShadingEnable-04906]]
+    If the pipeline is being created with fragment shader state, and the
+    `apiext:VK_QCOM_render_pass_shader_resolve` extension is enabled, and if
+    the subpass description contains
+    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then
+    pname:sampleShadingEnable must: be false
+  * [[VUID-VkRenderPassCreateInfo2-flags-04907]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+    pname:pResolveAttachments is not `NULL`, then each resolve attachment
+    must: be ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkRenderPassCreateInfo2-flags-04908]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+    pname:pDepthStencilResolveAttachment is not `NULL`, then the
+    depth/stencil resolve attachment must: be ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkRenderPassCreateInfo2-flags-04909]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass
+    must: be the last subpass in a subpass dependency chain
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkRenderPassCreateInfo2-subpassCount-05055]]
+    pname:subpassCount must: be less than or equal to
+    <<limits-maxRenderPassSubpasses,maxRenderPassSubpasses>>
+  * [[VUID-VkRenderPassCreateInfo2-dependencyCount-05056]]
+    pname:dependencyCount must: be less than or equal to
+    <<limits-maxRenderPassDependencies,maxRenderPassDependencies>>
+  * [[VUID-VkRenderPassCreateInfo2-attachmentCount-05057]]
+    pname:attachmentCount must: be less than or equal to
+    <<limits-maxFramebufferAttachments,maxFramebufferAttachments>>
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkRenderPassCreateInfo2-attachment-06244]]
+    If the pname:attachment member of the pname:pDepthStencilAttachment
+    member of an element of pname:pSubpasses is not
+    ename:VK_ATTACHMENT_UNUSED, the pname:layout member of that same
+    structure is either ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, and the pname:pNext chain
+    of that structure does not include a
+    slink:VkAttachmentReferenceStencilLayout structure, then the element of
+    pname:pAttachments with an index equal to pname:attachment must: not
+    have a pname:format that includes both depth and stencil components
+  * [[VUID-VkRenderPassCreateInfo2-attachment-06245]]
+    If the pname:attachment member of the pname:pDepthStencilAttachment
+    member of an element of pname:pSubpasses is not
+    ename:VK_ATTACHMENT_UNUSED and the pname:layout member of that same
+    structure is either ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, then the element of
+    pname:pAttachments with an index equal to pname:attachment must: have a
+    pname:format that includes only a stencil component
+  * [[VUID-VkRenderPassCreateInfo2-attachment-06246]]
+    If the pname:attachment member of the pname:pDepthStencilAttachment
+    member of an element of pname:pSubpasses is not
+    ename:VK_ATTACHMENT_UNUSED and the pname:layout member of that same
+    structure is either ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, then the element of
+    pname:pAttachments with an index equal to pname:attachment must: not
+    have a pname:format that includes only a stencil component
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_ANDROID_external_format_resolve[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderPassCreateInfo2-pResolveAttachments-09331]]
+    If any element of pname:pResolveAttachments of any element of
+    pname:pSubpasses references an attachment description with a format of
+    ename:VK_FORMAT_UNDEFINED,
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT::pname:fragmentDensityMapAttachment->attachment
+    must: be ename:VK_ATTACHMENT_UNUSED
+endif::VK_EXT_fragment_density_map[]
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkRenderPassCreateInfo2.adoc[]
+--
+
+[open,refpage='VkAttachmentDescription2',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentDescription2KHR']
+--
+:refpage: VkAttachmentDescription2
+
+The sname:VkAttachmentDescription2 structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentDescription2.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentDescription2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkAttachmentDescriptionFlagBits
+    specifying additional properties of the attachment.
+  * pname:format is a elink:VkFormat value specifying the format of the
+    image that will be used for the attachment.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    number of samples of the image.
+  * pname:loadOp is a elink:VkAttachmentLoadOp value specifying how the
+    contents of color and depth components of the attachment are treated at
+    the beginning of the subpass where it is first used.
+  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
+    contents of color and depth components of the attachment are treated at
+    the end of the subpass where it is last used.
+  * pname:stencilLoadOp is a elink:VkAttachmentLoadOp value specifying how
+    the contents of stencil components of the attachment are treated at the
+    beginning of the subpass where it is first used.
+  * pname:stencilStoreOp is a elink:VkAttachmentStoreOp value specifying how
+    the contents of stencil components of the attachment are treated at the
+    end of the last subpass where it is used.
+  * pname:initialLayout is the layout the attachment image subresource will
+    be in when a render pass instance begins.
+  * pname:finalLayout is the layout the attachment image subresource will be
+    transitioned to when a render pass instance ends.
+
+Parameters defined by this structure with the same name as those in
+slink:VkAttachmentDescription have the identical effect to those parameters.
+
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+If the <<features-separateDepthStencilLayouts,
+pname:separateDepthStencilLayouts>> feature is enabled, and pname:format is
+a depth/stencil format, pname:initialLayout and pname:finalLayout can: be
+set to a layout that only specifies the layout of the depth aspect.
+
+If the pname:pNext chain includes a
+slink:VkAttachmentDescriptionStencilLayout structure, then the
+pname:stencilInitialLayout and pname:stencilFinalLayout members specify the
+initial and final layouts of the stencil aspect of a depth/stencil format,
+and pname:initialLayout and pname:finalLayout only apply to the depth
+aspect.
+For depth-only formats, the slink:VkAttachmentDescriptionStencilLayout
+structure is ignored.
+For stencil-only formats, the initial and final layouts of the stencil
+aspect are taken from the slink:VkAttachmentDescriptionStencilLayout
+structure if present, or pname:initialLayout and pname:finalLayout if not
+present.
+
+If pname:format is a depth/stencil format, and either pname:initialLayout or
+pname:finalLayout does not specify a layout for the stencil aspect, then the
+application must: specify the initial and final layouts of the stencil
+aspect by including a slink:VkAttachmentDescriptionStencilLayout structure
+in the pname:pNext chain.
+
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+ifdef::VK_KHR_fragment_shading_rate[]
+pname:loadOp and pname:storeOp are ignored for fragment shading rate
+attachments.
+No access to the shading rate attachment is performed in pname:loadOp and
+pname:storeOp.
+Instead, access to
+ename:VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR is performed
+as fragments are rasterized.
+endif::VK_KHR_fragment_shading_rate[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/attachment_description_common.adoc[]
+  * [[VUID-VkAttachmentDescription2-pNext-06704]]
+    If
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    the pname:pNext chain does not include a
+    slink:VkAttachmentDescriptionStencilLayout structure,
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    pname:format includes a stencil component, and pname:stencilLoadOp is
+    ename:VK_ATTACHMENT_LOAD_OP_LOAD, then pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkAttachmentDescription2-pNext-06705]]
+    If the pname:pNext chain includes a
+    slink:VkAttachmentDescriptionStencilLayout structure, pname:format
+    includes a stencil component, and pname:stencilLoadOp is
+    ename:VK_ATTACHMENT_LOAD_OP_LOAD, then
+    slink:VkAttachmentDescriptionStencilLayout::pname:stencilInitialLayout
+    must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED
+  * [[VUID-VkAttachmentDescription2-format-06249]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, and pname:initialLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pname:pNext chain
+    must: include a slink:VkAttachmentDescriptionStencilLayout structure
+  * [[VUID-VkAttachmentDescription2-format-06250]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil components, and pname:finalLayout is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pname:pNext chain
+    must: include a slink:VkAttachmentDescriptionStencilLayout structure
+  * [[VUID-VkAttachmentDescription2-format-06247]]
+    If the pname:pNext chain does not include a
+    slink:VkAttachmentDescriptionStencilLayout structure and pname:format
+    only includes a stencil component, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription2-format-06248]]
+    If the pname:pNext chain does not include a
+    slink:VkAttachmentDescriptionStencilLayout structure and pname:format
+    only includes a stencil component, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkAttachmentDescription2-format-09332]]
+ifdef::VK_ANDROID_external_format_resolve[]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is not
+    enabled,
+endif::VK_ANDROID_external_format_resolve[]
+    pname:format must: not be ename:VK_FORMAT_UNDEFINED
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkAttachmentDescription2-format-09334]]
+    If pname:format is ename:VK_FORMAT_UNDEFINED, there must: be a
+    slink:VkExternalFormatANDROID structure in the pname:pNext chain with a
+    pname:externalFormat that is not equal to `0`
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkAttachmentDescription2.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+[open,refpage='VkAttachmentDescriptionStencilLayout',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentDescriptionStencilLayoutKHR']
+--
+The sname:VkAttachmentDescriptionStencilLayout structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentDescriptionStencilLayout.adoc[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentDescriptionStencilLayoutKHR.adoc[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stencilInitialLayout is the layout the stencil aspect of the
+    attachment image subresource will be in when a render pass instance
+    begins.
+  * pname:stencilFinalLayout is the layout the stencil aspect of the
+    attachment image subresource will be transitioned to when a render pass
+    instance ends.
+
+.Valid Usage
+****
+  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-03308]]
+    pname:stencilInitialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03309]]
+    pname:stencilFinalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  * [[VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03310]]
+    pname:stencilFinalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+****
+
+include::{generated}/validity/structs/VkAttachmentDescriptionStencilLayout.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+[open,refpage='VkSubpassDescription2',desc='Structure specifying a subpass description',type='structs',alias='VkSubpassDescription2KHR']
+--
+:refpage: VkSubpassDescription2
+
+The sname:VkSubpassDescription2 structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescription2.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDescription2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSubpassDescriptionFlagBits
+    specifying usage of the subpass.
+  * pname:pipelineBindPoint is a elink:VkPipelineBindPoint value specifying
+    the pipeline type supported for this subpass.
+  * pname:viewMask is a bitfield of view indices describing which views
+    rendering is broadcast to in this subpass, when multiview is enabled.
+  * pname:inputAttachmentCount is the number of input attachments.
+  * pname:pInputAttachments is a pointer to an array of
+    slink:VkAttachmentReference2 structures defining the input attachments
+    for this subpass and their layouts.
+  * pname:colorAttachmentCount is the number of color attachments.
+  * pname:pColorAttachments is a pointer to an array of
+    pname:colorAttachmentCount slink:VkAttachmentReference2 structures
+    defining the color attachments for this subpass and their layouts.
+  * pname:pResolveAttachments is `NULL` or a pointer to an array of
+    pname:colorAttachmentCount slink:VkAttachmentReference2 structures
+    defining the resolve attachments for this subpass and their layouts.
+  * pname:pDepthStencilAttachment is a pointer to a
+    slink:VkAttachmentReference2 structure specifying the depth/stencil
+    attachment for this subpass and its layout.
+  * pname:preserveAttachmentCount is the number of preserved attachments.
+  * pname:pPreserveAttachments is a pointer to an array of
+    pname:preserveAttachmentCount render pass attachment indices identifying
+    attachments that are not used by this subpass, but whose contents must:
+    be preserved throughout the subpass.
+
+Parameters defined by this structure with the same name as those in
+slink:VkSubpassDescription have the identical effect to those parameters.
+
+pname:viewMask has the same effect for the described subpass as
+slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks has on each
+corresponding subpass.
+
+ifdef::VK_KHR_fragment_shading_rate[]
+If a slink:VkFragmentShadingRateAttachmentInfoKHR structure is included in
+the pname:pNext chain, pname:pFragmentShadingRateAttachment is not `NULL`,
+and its pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the
+identified attachment defines a fragment shading rate attachment for that
+subpass.
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_ANDROID_external_format_resolve[]
+If any element of pname:pResolveAttachments is an image specified with an
+slink:VkExternalFormatANDROID, values in the corresponding color attachment
+will be resolved to the resolve attachment in the same manner as specified
+for <<VkResolveModeFlagBits,
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID>>.
+
+If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+pname:nullColorAttachmentWithExternalFormatResolve>> limit is ename:VK_TRUE,
+values in the color attachment will be loaded from the resolve attachment at
+the start of rendering, and may: also be reloaded any time after a resolve
+occurs or the resolve attachment is written to; if this occurs it must:
+happen-before any writes to the color attachment are performed which
+happen-after the resolve that triggers this.
+If any color component in the external format is subsampled, values will be
+read from the nearest sample in the image when they are loaded.
+If the color attachment is also used as an input attachment, the same
+behavior applies.
+
+Setting the color attachment to ename:VK_ATTACHMENT_UNUSED when an external
+resolve attachment is used and the
+<<limits-nullColorAttachmentWithExternalFormatResolve,
+pname:nullColorAttachmentWithExternalFormatResolve>> limit is ename:VK_TRUE
+will not result in color attachment writes to be discarded for that
+attachment.
+
+When <<limits-nullColorAttachmentWithExternalFormatResolve,
+pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_TRUE, the
+color output from the subpass can still be read via an input attachment; but
+the application cannot bind an image view for the color attachment as there
+is no such image view bound.
+Instead to access the data as an input attachment applications can: use the
+resolve attachment in its place - using the resolve attachment image for the
+descriptor, and setting the corresponding element of pname:pInputAttachments
+to the index of the resolve attachment.
+
+Loads or input attachment reads from the resolve attachment are performed as
+if using a slink:VkSamplerYcbcrConversionCreateInfo with the following
+parameters:
+
+[source,c]
+----
+VkSamplerYcbcrConversionCreateInfo createInfo = {
+    .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
+    .pNext = NULL,
+    .format = VK_FORMAT_UNDEFINED,
+    .ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
+    .ycbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_FULL,
+    .components = {
+        .r = VK_COMPONENT_SWIZZLE_B
+        .g = VK_COMPONENT_SWIZZLE_R
+        .b = VK_COMPONENT_SWIZZLE_G
+        .a = VK_COMPONENT_SWIZZLE_IDENTITY},
+    .xChromaOffset = properties.chromaOffsetX,
+    .yChromaOffset = properties.chromaOffsetY,
+    .chromaFilter = ename:VK_FILTER_NEAREST,
+    .forceExplicitReconstruction = ... };
+----
+
+where `properties` is equal to
+slink:VkPhysicalDeviceExternalFormatResolvePropertiesANDROID returned by the
+device and `forceExplicitReconstruction` is effectively ignored as the
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY model is used.
+The applied swizzle is the same effective swizzle that would be applied by
+the ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY model, but no
+range expansion is applied.
+endif::VK_ANDROID_external_format_resolve[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/subpass_description_common.adoc[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkSubpassDescription2-attachment-06251]]
+    If the pname:attachment member of pname:pDepthStencilAttachment is not
+    ename:VK_ATTACHMENT_UNUSED and its pname:pNext chain includes a
+    slink:VkAttachmentReferenceStencilLayout structure, the pname:layout
+    member of pname:pDepthStencilAttachment must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkSubpassDescription2-pipelineBindPoint-04953]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+ifdef::VK_HUAWEI_subpass_shading[]
+    or ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription2-colorAttachmentCount-03063]]
+    pname:colorAttachmentCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxColorAttachments
+  * [[VUID-VkSubpassDescription2-loadOp-03064]]
+    If the first use of an attachment in this render pass is as an input
+    attachment, and the attachment is not also used as a color or
+    depth/stencil attachment in the same subpass, then pname:loadOp must:
+    not be ename:VK_ATTACHMENT_LOAD_OP_CLEAR
+ifndef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-03065]]
+    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
+    that does not have the value ename:VK_ATTACHMENT_UNUSED, the
+    corresponding color attachment must: not have the value
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-03066]]
+    If pname:pResolveAttachments is not `NULL`, for each resolve attachment
+    that is not ename:VK_ATTACHMENT_UNUSED, the corresponding color
+    attachment must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-03068]]
+    Each element of pname:pResolveAttachments must: have the same
+    elink:VkFormat as its corresponding color attachment
+endif::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-03067]]
+    If pname:pResolveAttachments is not `NULL`, each resolve attachment that
+    is not ename:VK_ATTACHMENT_UNUSED must: have a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09335]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is not
+    enabled and pname:pResolveAttachments is not `NULL`, for each resolve
+    attachment that does not have the value ename:VK_ATTACHMENT_UNUSED, the
+    corresponding color attachment must: not have the value
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-nullColorAttachmentWithExternalFormatResolve-09336]]
+    If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> property is
+    ename:VK_FALSE and pname:pResolveAttachments is not `NULL`, for each
+    resolve attachment that has a format of ename:VK_FORMAT_UNDEFINED, the
+    corresponding color attachment must: not have the value
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-nullColorAttachmentWithExternalFormatResolve-09337]]
+    If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> property is
+    ename:VK_TRUE and pname:pResolveAttachments is not `NULL`, for each
+    resolve attachment that has a format of ename:VK_FORMAT_UNDEFINED, the
+    corresponding color attachment must: have the value
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09338]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is not
+    enabled and pname:pResolveAttachments is not `NULL`, for each resolve
+    attachment that is not ename:VK_ATTACHMENT_UNUSED, the corresponding
+    color attachment must: not have a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09339]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is not
+    enabled, each element of pname:pResolveAttachments must: have the same
+    elink:VkFormat as its corresponding color attachment
+endif::VK_ANDROID_external_format_resolve[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkSubpassDescription2-multisampledRenderToSingleSampled-06869]]
+    If none of the `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature are enabled, all
+    attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have the same sample count
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkSubpassDescription2-pInputAttachments-02897]]
+    All attachments in pname:pInputAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED
+ifdef::VK_ANDROID_external_format_resolve[]
+    and any of the following is true:
+  ** the <<features-externalFormatResolve, pname:externalFormatResolve>>
+     feature is not enabled
+  ** the <<limits-nullColorAttachmentWithExternalFormatResolve,
+     pname:nullColorAttachmentWithExternalFormatResolve>> property is
+     ename:VK_FALSE
+  ** does not have a non-zero value of
+     slink:VkExternalFormatANDROID::pname:externalFormat
+endif::VK_ANDROID_external_format_resolve[]
+
++
+must: have image formats whose <<potential-format-features, potential format
+    features>> contain at least ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+    or ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkSubpassDescription2-pColorAttachments-02898]]
+    All attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+ifndef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-02899]]
+    All attachments in pname:pResolveAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+endif::VK_ANDROID_external_format_resolve[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-09343]]
+    All attachments in pname:pResolveAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED and do not have an image format of
+    ename:VK_FORMAT_UNDEFINED must: have image formats whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+endif::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-02900]]
+    If pname:pDepthStencilAttachment is not `NULL` and the attachment is not
+    ename:VK_ATTACHMENT_UNUSED then it must: have an image format whose
+    <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkSubpassDescription2-linearColorAttachment-06499]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in pname:pInputAttachments
+    that are not ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+  * [[VUID-VkSubpassDescription2-linearColorAttachment-06500]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in pname:pColorAttachments
+    that are not ename:VK_ATTACHMENT_UNUSED must: have image formats whose
+    <<potential-format-features, potential format features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+  * [[VUID-VkSubpassDescription2-linearColorAttachment-06501]]
+    If the <<features-linearColorAttachment, pname:linearColorAttachment>>
+    feature is enabled and the image is created with
+    ename:VK_IMAGE_TILING_LINEAR, all attachments in
+    pname:pResolveAttachments that are not ename:VK_ATTACHMENT_UNUSED must:
+    have image formats whose <<potential-format-features, potential format
+    features>> must: contain
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_AMD_mixed_attachment_samples[]
+  * [[VUID-VkSubpassDescription2-pColorAttachments-03070]]
+    If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    all attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have a sample count that is smaller
+    than or equal to the sample count of pname:pDepthStencilAttachment if it
+    is not ename:VK_ATTACHMENT_UNUSED
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkSubpassDescription2-pNext-06870]]
+    If the pname:pNext chain includes a
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
+    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
+    then all attachments in pname:pColorAttachments and
+    pname:pDepthStencilAttachment that are not ename:VK_ATTACHMENT_UNUSED
+    must: have a sample count that is either ename:VK_SAMPLE_COUNT_1_BIT or
+    equal to
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+  * [[VUID-VkSubpassDescription2-pNext-06871]]
+    If the pname:pNext chain includes a
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
+    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
+    and pname:pDepthStencilAttachment is not `NULL`, does not have the value
+    ename:VK_ATTACHMENT_UNUSED, and has a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT, the pname:pNext chain must: also include a
+    slink:VkSubpassDescriptionDepthStencilResolve structure with
+    pname:pDepthStencilResolveAttachment that is either `NULL` or has the
+    value ename:VK_ATTACHMENT_UNUSED
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkSubpassDescription2-multisampledRenderToSingleSampled-06872]]
+    If none of the `apiext:VK_AMD_mixed_attachment_samples` extension, the
+    `apiext:VK_NV_framebuffer_mixed_samples` extension, or the
+    <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature are enabled, all
+    attachments in pname:pDepthStencilAttachment or pname:pColorAttachments
+    that are not ename:VK_ATTACHMENT_UNUSED must: have the same sample count
+  * [[VUID-VkSubpassDescription2-attachment-03073]]
+    Each element of pname:pPreserveAttachments must: not be
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-pPreserveAttachments-03074]]
+    Each element of pname:pPreserveAttachments must: not also be an element
+    of any other member of the subpass description
+  * [[VUID-VkSubpassDescription2-layout-02528]]
+    If any attachment is used by more than one slink:VkAttachmentReference2
+    member, then each use must: use the same pname:layout
+ifdef::VK_NVX_multiview_per_view_attributes[]
+  * [[VUID-VkSubpassDescription2-flags-03076]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must:
+    also include ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
+endif::VK_NVX_multiview_per_view_attributes[]
+  * [[VUID-VkSubpassDescription2-attachment-02799]]
+    If the pname:attachment member of any element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
+    must: be a valid combination of elink:VkImageAspectFlagBits
+  * [[VUID-VkSubpassDescription2-attachment-02800]]
+    If the pname:attachment member of any element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
+    must: not be `0`
+  * [[VUID-VkSubpassDescription2-attachment-02801]]
+    If the pname:attachment member of any element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
+    must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkSubpassDescription2-attachment-04563]]
+    If the pname:attachment member of any element of pname:pInputAttachments
+    is not ename:VK_ATTACHMENT_UNUSED, then the pname:aspectMask member
+    must: not include `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for
+    any index _i_
+endif::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-04440]]
+    An attachment must: not be used in both pname:pDepthStencilAttachment
+    and pname:pColorAttachments
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkSubpassDescription2-inputAttachmentCount-05058]]
+    pname:inputAttachmentCount must: be less than or equal to
+    <<limits-maxSubpassInputAttachments,maxSubpassInputAttachments>>
+  * [[VUID-VkSubpassDescription2-preserveAttachmentCount-05059]]
+    pname:preserveAttachmentCount must: be less than or equal to
+    <<limits-maxSubpassPreserveAttachments,maxSubpassPreserveAttachments>>
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkSubpassDescription2-multiview-06558]]
+    If the <<features-multiview, pname:multiview>> feature is not enabled,
+    pname:viewMask must: be `0`
+  * [[VUID-VkSubpassDescription2-viewMask-06706]]
+    The index of the most significant bit in pname:viewMask must: be less
+    than <<limits-maxMultiviewViewCount, pname:maxMultiviewViewCount>>
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09344]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is
+    enabled, pname:pResolveAttachments is not `NULL`, and
+    pname:colorAttachmentCount is not `1`, any element of
+    pname:pResolveAttachments that is not `VK_ATTACHMENT_UNUSED`, must: not
+    have a format of ename:VK_FORMAT_UNDEFINED
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09345]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is
+    enabled, pname:pResolveAttachments is not `NULL`, any element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED and has a
+    format of ename:VK_FORMAT_UNDEFINED, and the corresponding element of
+    pname:pColorAttachments is not ename:VK_ATTACHMENT_UNUSED, the color
+    attachment must: have a pname:samples value of `1`
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09346]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is
+    enabled, pname:pResolveAttachments is not `NULL`, and any element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED and has a
+    format of ename:VK_FORMAT_UNDEFINED, pname:viewMask must: be `0`
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09347]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is
+    enabled, pname:pResolveAttachments is not `NULL`, and any element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED and has a
+    format of ename:VK_FORMAT_UNDEFINED,
+    slink:VkFragmentShadingRateAttachmentInfoKHR::pname:pFragmentShadingRateAttachment
+    must: either be `NULL` or a slink:VkAttachmentReference2 structure with
+    a pname:attachment value of ename:VK_ATTACHMENT_UNUSED
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkSubpassDescription2-externalFormatResolve-09348]]
+    If <<features-externalFormatResolve,pname:externalFormatResolve>> is
+    enabled, pname:pResolveAttachments is not `NULL`, and any element of
+    pname:pResolveAttachments is not ename:VK_ATTACHMENT_UNUSED and has a
+    format of ename:VK_FORMAT_UNDEFINED, elements of pname:pInputAttachments
+    referencing either a color attachment or resolve attachment used in this
+    subpass must: not include `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT` for any
+    index _i_ in its pname:aspectMask
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkSubpassDescription2.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+[open,refpage='VkSubpassDescriptionDepthStencilResolve',desc='Structure specifying depth/stencil resolve operations for a subpass',type='structs',alias='VkSubpassDescriptionDepthStencilResolveKHR']
+--
+The sname:VkSubpassDescriptionDepthStencilResolve structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolve.adoc[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolveKHR.adoc[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:depthResolveMode is a elink:VkResolveModeFlagBits value describing
+    the depth resolve mode.
+  * pname:stencilResolveMode is a elink:VkResolveModeFlagBits value
+    describing the stencil resolve mode.
+  * pname:pDepthStencilResolveAttachment is `NULL` or a pointer to a
+    slink:VkAttachmentReference2 structure defining the depth/stencil
+    resolve attachment for this subpass and its layout.
+
+If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+sname:VkSubpassDescriptionDepthStencilResolve structure, then that structure
+describes <<renderpass-resolve-operations, multisample resolve operations>>
+for the depth/stencil attachment in a subpass.
+If this structure is not included in the pname:pNext chain of
+slink:VkSubpassDescription2, or if it is and either
+pname:pDepthStencilResolveAttachment is `NULL` or its attachment index is
+ename:VK_ATTACHMENT_UNUSED, it indicates that no depth/stencil resolve
+attachment will be used in the subpass.
+
+.Valid Usage
+****
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03177]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, pname:pDepthStencilAttachment
+    must: not be `NULL` or have the value ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03179]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, pname:pDepthStencilAttachment
+    must: not have a sample count of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03180]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED,
+    pname:pDepthStencilResolveAttachment must: have a sample count of
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-02651]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED then it must: have an image format
+    whose <<potential-format-features, potential format features>> contain
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03181]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED and elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has a depth component, then the
+    elink:VkFormat of pname:pDepthStencilAttachment must: have a depth
+    component with the same number of bits and <<formats-numericformat,
+    numeric format>>
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, and elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has a stencil component, then the
+    elink:VkFormat of pname:pDepthStencilAttachment must: have a stencil
+    component with the same number of bits and <<formats-numericformat,
+    numeric format>>
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03178]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, pname:depthResolveMode and
+    pname:stencilResolveMode must: not both be ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED and the elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has a depth component, then the
+    value of pname:depthResolveMode must: be one of the bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedDepthResolveModes
+    or ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-03184]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED and the elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has a stencil component, then the
+    value of pname:stencilResolveMode must: be one of the bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedStencilResolveModes
+    or ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03185]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, the elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has both depth and stencil
+    components,
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
+    is ename:VK_FALSE, and
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
+    is ename:VK_FALSE, then the values of pname:depthResolveMode and
+    pname:stencilResolveMode must: be identical
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03186]]
+    If pname:pDepthStencilResolveAttachment is not `NULL` and does not have
+    the value ename:VK_ATTACHMENT_UNUSED, the elink:VkFormat of
+    pname:pDepthStencilResolveAttachment has both depth and stencil
+    components,
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
+    is ename:VK_FALSE and
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
+    is ename:VK_TRUE, then the values of pname:depthResolveMode and
+    pname:stencilResolveMode must: be identical or one of them must: be
+    ename:VK_RESOLVE_MODE_NONE
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06873]]
+    If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+    sname:VkMultisampledRenderToSingleSampledInfoEXT structure, the
+    pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE,
+    and pname:pDepthStencilAttachment is not `NULL` and does not have the
+    value ename:VK_ATTACHMENT_UNUSED, pname:depthResolveMode and
+    pname:stencilResolveMode must: not both be ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06874]]
+    If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+    sname:VkMultisampledRenderToSingleSampledInfoEXT structure whose
+    pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE,
+    and pname:pDepthStencilAttachment is not `NULL`, does not have the value
+    ename:VK_ATTACHMENT_UNUSED, and has a elink:VkFormat that has a depth
+    component, then the value of pname:depthResolveMode must: be one of the
+    bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedDepthResolveModes
+    or ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06875]]
+    If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+    sname:VkMultisampledRenderToSingleSampledInfoEXT structure whose
+    pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE,
+    and pname:pDepthStencilAttachment is not `NULL`, does not have the value
+    ename:VK_ATTACHMENT_UNUSED, and has a elink:VkFormat with a stencil
+    component, then the value of pname:stencilResolveMode must: be one of
+    the bits set in
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:supportedStencilResolveModes
+    or ename:VK_RESOLVE_MODE_NONE
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06876]]
+    If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+    sname:VkMultisampledRenderToSingleSampledInfoEXT structure whose
+    pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE,
+    pname:pDepthStencilAttachment is not `NULL`, does not have the value
+    ename:VK_ATTACHMENT_UNUSED, and has a elink:VkFormat with both depth and
+    stencil components, and both
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
+    and
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
+    are ename:VK_FALSE, then the values of pname:depthResolveMode and
+    pname:stencilResolveMode must: be identical
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06877]]
+    If the pname:pNext chain of slink:VkSubpassDescription2 includes a
+    sname:VkMultisampledRenderToSingleSampledInfoEXT structure whose
+    pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE,
+    pname:pDepthStencilAttachment is not `NULL`, does not have the value
+    ename:VK_ATTACHMENT_UNUSED, and has a elink:VkFormat with both depth and
+    stencil components,
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolve
+    is ename:VK_FALSE, and
+    slink:VkPhysicalDeviceDepthStencilResolveProperties::pname:independentResolveNone
+    is ename:VK_TRUE, then the values of pname:depthResolveMode and
+    pname:stencilResolveMode must: be identical or one of them must: be
+    ename:VK_RESOLVE_MODE_NONE
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+****
+
+include::{generated}/validity/structs/VkSubpassDescriptionDepthStencilResolve.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+
+ifdef::VK_KHR_fragment_shading_rate[]
+[open,refpage='VkFragmentShadingRateAttachmentInfoKHR',desc='Structure specifying a fragment shading rate attachment for a subpass',type='structs']
+--
+The sname:VkFragmentShadingRateAttachmentInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkFragmentShadingRateAttachmentInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pFragmentShadingRateAttachment is `NULL` or a pointer to a
+    slink:VkAttachmentReference2 structure defining the fragment shading
+    rate attachment for this subpass.
+  * pname:shadingRateAttachmentTexelSize specifies the size of the portion
+    of the framebuffer corresponding to each texel in
+    pname:pFragmentShadingRateAttachment.
+
+If no shading rate attachment is specified, or if this structure is not
+specified, the implementation behaves as if a valid shading rate attachment
+was specified with all texels specifying a single pixel per fragment.
+
+.Valid Usage
+****
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04524]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, its
+    pname:layout member must: be equal to ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04525]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.width must: be a power of two value
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04526]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
+    pname:maxFragmentShadingRateAttachmentTexelSize.width>>
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04527]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.width must: be greater than or
+    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
+    pname:minFragmentShadingRateAttachmentTexelSize.width>>
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04528]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.height must: be a power of two
+    value
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04529]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSize,
+    pname:maxFragmentShadingRateAttachmentTexelSize.height>>
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04530]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED,
+    pname:shadingRateAttachmentTexelSize.height must: be greater than or
+    equal to <<limits-minFragmentShadingRateAttachmentTexelSize,
+    pname:minFragmentShadingRateAttachmentTexelSize.height>>
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04531]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the quotient
+    of pname:shadingRateAttachmentTexelSize.width and
+    pname:shadingRateAttachmentTexelSize.height must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
+  * [[VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04532]]
+    If pname:pFragmentShadingRateAttachment is not `NULL` and its
+    pname:attachment member is not ename:VK_ATTACHMENT_UNUSED, the quotient
+    of pname:shadingRateAttachmentTexelSize.height and
+    pname:shadingRateAttachmentTexelSize.width must: be less than or equal
+    to <<limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
+    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio>>
+****
+
+include::{generated}/validity/structs/VkFragmentShadingRateAttachmentInfoKHR.adoc[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+[[subpass-multisampledrendertosinglesampled]]
+[open,refpage='VkMultisampledRenderToSingleSampledInfoEXT',desc='Structure containing info for multisampled rendering to single-sampled attachments in a subpass',type='structs']
+--
+If the pname:pNext chain of slink:VkSubpassDescription2
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo]
+includes a sname:VkMultisampledRenderToSingleSampledInfoEXT structure, then
+that structure describes how multisampled rendering is performed on single
+sampled attachments in that subpass.
+
+The sname:VkMultisampledRenderToSingleSampledInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkMultisampledRenderToSingleSampledInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:multisampledRenderToSingleSampledEnable controls whether
+    multisampled rendering to single-sampled attachments is performed as
+    described <<multisampled-render-to-single-sampled, below>>.
+  * pname:rasterizationSamples is a elink:VkSampleCountFlagBits specifying
+    the number of samples used in rasterization.
+
+.Valid Usage
+****
+  * [[VUID-VkMultisampledRenderToSingleSampledInfoEXT-rasterizationSamples-06878]]
+    The value of pname:rasterizationSamples must: not be
+    ename:VK_SAMPLE_COUNT_1_BIT
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkMultisampledRenderToSingleSampledInfoEXT-pNext-06880]]
+    If added to the pname:pNext chain of slink:VkRenderingInfo, each
+    pname:imageView member of any element of
+    slink:VkRenderingInfo::pname:pColorAttachments,
+    slink:VkRenderingInfo::pname:pDepthAttachment, or
+    slink:VkRenderingInfo::pname:pStencilAttachment that is not
+    dlink:VK_NULL_HANDLE must: have a format that supports the sample count
+    specified in pname:rasterizationSamples
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkMultisampledRenderToSingleSampledInfoEXT.adoc[]
+--
+
+[[multisampled-render-to-single-sampled]]
+If the pname:pNext chain of slink:VkSubpassDescription2
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo]
+includes a slink:VkMultisampledRenderToSingleSampledInfoEXT structure whose
+pname:multisampledRenderToSingleSampledEnable field is ename:VK_TRUE, the
+graphics pipelines must: have
+slink:VkGraphicsPipelineCreateInfo::pname:rasterizationSamples equal to
+slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples,
+and the subpass attachments can: have a sample count of
+ename:VK_SAMPLE_COUNT_1_BIT.
+For attachments with a sample count of ename:VK_SAMPLE_COUNT_1_BIT,
+multisampled rendering is performed to an intermediate multisampled image
+with
+slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+samples, implicitly allocated by the implementation for the duration of the
+subpass.
+For such attachments:
+
+  * If pname:loadOp equals to ename:VK_ATTACHMENT_LOAD_OP_LOAD, samples of
+    the implicit image are initialized by replicating the value from the
+    corresponding pixel in the attachment.
+  * If pname:storeOp or pname:stencilStoreOp is equal to
+    ename:VK_ATTACHMENT_STORE_OP_STORE, the implicit image is implicitly
+    resolved prior to storage in the attachment.
+
+Memory constraints due to high primitive counts may: result in an implicit
+split of the subpass.
+This is the equivalent of partial rasterization of geometry in a render pass
+that ends in pname:storeOp and pname:stencilStoreOp equal to
+ename:VK_ATTACHMENT_STORE_OP_STORE, followed by another render pass with
+pname:loadOp and pname:stencilLoadOp equal to
+ename:VK_ATTACHMENT_LOAD_OP_LOAD with appropriate barriers in between.
+When slink:VkMultisampledRenderToSingleSampledInfoEXT is used, the
+implementation is allowed to resolve attachments with a sample count of
+ename:VK_SAMPLE_COUNT_1_BIT and lose multisampled data on such splits.
+The implementation may: similarly split the render pass at subpass
+boundaries even if they use the same value for
+slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples.
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+
+[open,refpage='VkAttachmentReference2',desc='Structure specifying an attachment reference',type='structs',alias='VkAttachmentReference2KHR']
+--
+:refpage: VkAttachmentReference2
+
+The sname:VkAttachmentReference2 structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentReference2.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentReference2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:attachment is either an integer value identifying an attachment at
+    the corresponding index in
+    slink:VkRenderPassCreateInfo2::pname:pAttachments, or
+    ename:VK_ATTACHMENT_UNUSED to signify that this attachment is not used.
+  * pname:layout is a elink:VkImageLayout value specifying the layout the
+    attachment uses during the subpass.
+  * pname:aspectMask is a mask of which aspect(s) can: be accessed within
+    the specified subpass as an input attachment.
+
+Parameters defined by this structure with the same name as those in
+slink:VkAttachmentReference have the identical effect to those parameters.
+
+pname:aspectMask is ignored when this structure is used to describe anything
+other than an input attachment reference.
+
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+If the <<features-separateDepthStencilLayouts,
+pname:separateDepthStencilLayouts>> feature is enabled, and pname:attachment
+has a depth/stencil format, pname:layout can: be set to a layout that only
+specifies the layout of the depth aspect.
+
+If pname:layout only specifies the layout of the depth aspect of the
+attachment, the layout of the stencil aspect is specified by the
+pname:stencilLayout member of a slink:VkAttachmentReferenceStencilLayout
+structure included in the pname:pNext chain.
+Otherwise, pname:layout describes the layout for all relevant image aspects.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/attachment_reference_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkAttachmentReference2.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+[open,refpage='VkAttachmentReferenceStencilLayout',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentReferenceStencilLayoutKHR']
+--
+The sname:VkAttachmentReferenceStencilLayout structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentReferenceStencilLayout.adoc[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentReferenceStencilLayoutKHR.adoc[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stencilLayout is a elink:VkImageLayout value specifying the layout
+    the stencil aspect of the attachment uses during the subpass.
+
+.Valid Usage
+****
+  * [[VUID-VkAttachmentReferenceStencilLayout-stencilLayout-03318]]
+    pname:stencilLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+****
+
+include::{generated}/validity/structs/VkAttachmentReferenceStencilLayout.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+[open,refpage='VkSubpassDependency2',desc='Structure specifying a subpass dependency',type='structs',alias='VkSubpassDependency2KHR']
+--
+:refpage: VkSubpassDependency2
+The sname:VkSubpassDependency2 structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDependency2.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDependency2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcSubpass is the subpass index of the first subpass in the
+    dependency, or ename:VK_SUBPASS_EXTERNAL.
+  * pname:dstSubpass is the subpass index of the second subpass in the
+    dependency, or ename:VK_SUBPASS_EXTERNAL.
+  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks, source stage
+    mask>>.
+  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks, destination
+    stage mask>>
+  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, source access mask>>.
+  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, destination access mask>>.
+  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits.
+  * pname:viewOffset controls which views in the source subpass the views in
+    the destination subpass depend on.
+
+Parameters defined by this structure with the same name as those in
+slink:VkSubpassDependency have the identical effect to those parameters.
+
+pname:viewOffset has the same effect for the described subpass dependency as
+slink:VkRenderPassMultiviewCreateInfo::pname:pViewOffsets has on each
+corresponding subpass dependency.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+If a slink:VkMemoryBarrier2 is included in the pname:pNext chain,
+pname:srcStageMask, pname:dstStageMask, pname:srcAccessMask, and
+pname:dstAccessMask parameters are ignored.
+The synchronization and access scopes instead are defined by the parameters
+of slink:VkMemoryBarrier2.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+
+:stageMaskName: dstStageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+
+  * [[VUID-VkSubpassDependency2-srcSubpass-03084]]
+    pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
+    one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies
+    and ensure a valid execution order
+  * [[VUID-VkSubpassDependency2-srcSubpass-03085]]
+    pname:srcSubpass and pname:dstSubpass must: not both be equal to
+    ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency2-srcSubpass-06810]]
+    If pname:srcSubpass is equal to pname:dstSubpass and pname:srcStageMask
+    includes a <<synchronization-framebuffer-regions,framebuffer-space
+    stage>>, pname:dstStageMask must: only contain
+    <<synchronization-framebuffer-regions, framebuffer-space stages>>
+  * [[VUID-VkSubpassDependency2-srcAccessMask-03088]]
+    Any access flag included in pname:srcAccessMask must: be supported by
+    one of the pipeline stages in pname:srcStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-VkSubpassDependency2-dstAccessMask-03089]]
+    Any access flag included in pname:dstAccessMask must: be supported by
+    one of the pipeline stages in pname:dstStageMask, as specified in the
+    <<synchronization-access-types-supported, table of supported access
+    types>>
+  * [[VUID-VkSubpassDependency2-dependencyFlags-03090]]
+    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
+    pname:srcSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency2-dependencyFlags-03091]]
+    If pname:dependencyFlags includes ename:VK_DEPENDENCY_VIEW_LOCAL_BIT,
+    pname:dstSubpass must: not be equal to ename:VK_SUBPASS_EXTERNAL
+  * [[VUID-VkSubpassDependency2-srcSubpass-02245]]
+    If pname:srcSubpass equals pname:dstSubpass, and pname:srcStageMask and
+    pname:dstStageMask both include a
+    <<synchronization-framebuffer-regions,framebuffer-space stage>>, then
+    pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT
+  * [[VUID-VkSubpassDependency2-viewOffset-02530]]
+    If pname:viewOffset is not equal to `0`, pname:srcSubpass must: not be
+    equal to pname:dstSubpass
+  * [[VUID-VkSubpassDependency2-dependencyFlags-03092]]
+    If pname:dependencyFlags does not include
+    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT, pname:viewOffset must: be `0`
+****
+
+include::{generated}/validity/structs/VkSubpassDependency2.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+[open,refpage='vkDestroyRenderPass',desc='Destroy a render pass object',type='protos']
+--
+To destroy a render pass, call:
+
+include::{generated}/api/protos/vkDestroyRenderPass.adoc[]
+
+  * pname:device is the logical device that destroys the render pass.
+  * pname:renderPass is the handle of the render pass to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyRenderPass-renderPass-00873]]
+    All submitted commands that refer to pname:renderPass must: have
+    completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyRenderPass-renderPass-00874]]
+    If sname:VkAllocationCallbacks were provided when pname:renderPass was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyRenderPass-renderPass-00875]]
+    If no sname:VkAllocationCallbacks were provided when pname:renderPass
+    was created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyRenderPass.adoc[]
+--
+
+
+[[renderpass-compatibility]]
+== Render Pass Compatibility
+
+Framebuffers and graphics pipelines are created based on a specific render
+pass object.
+They must: only be used with that render pass object, or one compatible with
+it.
+
+Two attachment references are compatible if they have matching format and
+sample count, or are both ename:VK_ATTACHMENT_UNUSED or the pointer that
+would contain the reference is `NULL`.
+
+Two arrays of attachment references are compatible if all corresponding
+pairs of attachments are compatible.
+If the arrays are of different lengths, attachment references not present in
+the smaller array are treated as ename:VK_ATTACHMENT_UNUSED.
+
+Two render passes are compatible if their corresponding color, input,
+resolve, and depth/stencil attachment references are compatible and if they
+are otherwise identical except for:
+
+  * Initial and final image layout in attachment descriptions
+  * Load and store operations in attachment descriptions
+  * Image layout in attachment references
+
+As an additional special case, if two render passes have a single subpass,
+the resolve attachment reference
+ifdef::VK_KHR_depth_stencil_resolve[]
+and depth/stencil resolve mode
+endif::VK_KHR_depth_stencil_resolve[]
+compatibility requirements are ignored.
+
+A framebuffer is compatible with a render pass if it was created using the
+same render pass or a compatible render pass.
+
+
+== Framebuffers
+
+[open,refpage='VkFramebuffer',desc='Opaque handle to a framebuffer object',type='handles']
+--
+Render passes operate in conjunction with _framebuffers_.
+Framebuffers represent a collection of specific memory attachments that a
+render pass instance uses.
+
+Framebuffers are represented by sname:VkFramebuffer handles:
+
+include::{generated}/api/handles/VkFramebuffer.adoc[]
+--
+
+[open,refpage='vkCreateFramebuffer',desc='Create a new framebuffer object',type='protos']
+--
+:refpage: vkCreateFramebuffer
+:objectnameplural: framebuffers
+:objectnamecamelcase: framebuffer
+:objectcount: 1
+
+To create a framebuffer, call:
+
+include::{generated}/api/protos/vkCreateFramebuffer.adoc[]
+
+  * pname:device is the logical device that creates the framebuffer.
+  * pname:pCreateInfo is a pointer to a slink:VkFramebufferCreateInfo
+    structure describing additional information about framebuffer creation.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pFramebuffer is a pointer to a slink:VkFramebuffer handle in which
+    the resulting framebuffer object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateFramebuffer-pCreateInfo-02777]]
+    If pname:pCreateInfo->flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:attachmentCount is
+    not `0`, each element of pname:pCreateInfo->pAttachments must: have been
+    created on pname:device
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCreateFramebuffer.adoc[]
+--
+
+[open,refpage='VkFramebufferCreateInfo',desc='Structure specifying parameters of a newly created framebuffer',type='structs']
+--
+The sname:VkFramebufferCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkFramebufferCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkFramebufferCreateFlagBits
+  * pname:renderPass is a render pass defining what render passes the
+    framebuffer will be compatible with.
+    See <<renderpass-compatibility,Render Pass Compatibility>> for details.
+  * pname:attachmentCount is the number of attachments.
+  * pname:pAttachments is a pointer to an array of slink:VkImageView
+    handles, each of which will be used as the corresponding attachment in a
+    render pass instance.
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, this
+    parameter is ignored.
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * pname:width, pname:height and pname:layers define the dimensions of the
+    framebuffer.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+    If the render pass uses multiview, then pname:layers must: be one and
+    each attachment requires a number of layers that is greater than the
+    maximum bit index set in the view mask in the subpasses in which it is
+    used.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+[[renderpass-noattachments]]
+It is legal for a subpass to use no color or depth/stencil attachments,
+either because it has no attachment references or because all of them are
+ename:VK_ATTACHMENT_UNUSED.
+This kind of subpass can: use shader side effects such as image stores and
+atomics to produce an output.
+In this case, the subpass continues to use the pname:width, pname:height,
+and pname:layers of the framebuffer to define the dimensions of the
+rendering area, and the pname:rasterizationSamples from each pipeline's
+slink:VkPipelineMultisampleStateCreateInfo to define the number of samples
+used in rasterization; however, if
+slink:VkPhysicalDeviceFeatures::pname:variableMultisampleRate is
+ename:VK_FALSE, then all pipelines to be bound with the subpass must: have
+the same value for
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
+In all such cases, pname:rasterizationSamples must: be a bit value that is
+set in
+slink:VkPhysicalDeviceLimits::pname:framebufferNoAttachmentsSampleCounts.
+
+.Valid Usage
+****
+  * [[VUID-VkFramebufferCreateInfo-attachmentCount-00876]]
+    pname:attachmentCount must: be equal to the attachment count specified
+    in pname:renderPass
+  * [[VUID-VkFramebufferCreateInfo-flags-02778]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT and pname:attachmentCount is
+    not `0`, pname:pAttachments must: be a valid pointer to an array of
+    pname:attachmentCount valid slink:VkImageView handles
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00877]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as a color attachment or resolve
+    attachment by pname:renderPass must: have been created with a
+    pname:usage value including ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02633]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as a depth/stencil attachment by
+    pname:renderPass must: have been created with a pname:usage value
+    including ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02634]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as a depth/stencil resolve attachment by
+    pname:renderPass must: have been created with a pname:usage value
+    including ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00879]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:flags does not
+    include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as an input attachment by
+    pname:renderPass must: have been created with a pname:usage value
+    including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02552]]
+    Each element of pname:pAttachments that is used as a fragment density
+    map attachment by pname:renderPass must: not have been created with a
+    pname:flags value including ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+  * [[VUID-VkFramebufferCreateInfo-renderPass-02553]]
+    If pname:renderPass has a fragment density map attachment and the
+    <<features-fragmentDensityMapNonSubsampledImages,
+    pname:fragmentDensityMapNonSubsampledImages>> feature is not enabled,
+    each element of pname:pAttachments must: have been created with a
+    pname:flags value including ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+    unless that element is the fragment density map attachment
+ifdef::VK_QCOM_fragment_density_map_offset[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-06502]]
+    If pname:renderPass was created with
+    <<renderpass-fragmentdensitymapoffsets,fragment density map offsets>>
+    other than [eq]#(0,0)#, each element of pname:pAttachments must: have
+    been created with a pname:flags value including
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00880]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments must: have been created with a elink:VkFormat value
+    that matches the elink:VkFormat specified by the corresponding
+    sname:VkAttachmentDescription in pname:renderPass
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00881]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments must: have been created with a pname:samples value
+    that matches the pname:samples value specified by the corresponding
+    sname:VkAttachmentDescription in pname:renderPass
+  * [[VUID-VkFramebufferCreateInfo-flags-04533]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as an input, color, resolve, or
+    depth/stencil attachment by pname:renderPass must: have been created
+    with a slink:VkImageCreateInfo::pname:extent.width greater than or equal
+    to pname:width
+  * [[VUID-VkFramebufferCreateInfo-flags-04534]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as an input, color, resolve, or
+    depth/stencil attachment by pname:renderPass must: have been created
+    with a slink:VkImageCreateInfo::pname:extent.height greater than or
+    equal to pname:height
+  * [[VUID-VkFramebufferCreateInfo-flags-04535]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as an input, color, resolve, or
+    depth/stencil attachment by pname:renderPass must: have been created
+    with a slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount
+    greater than or equal to pname:layers
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-04536]]
+    If pname:renderPass was specified with non-zero view masks, each element
+    of pname:pAttachments that is used as an input, color, resolve, or
+    depth/stencil attachment by pname:renderPass must: have a
+    pname:layerCount greater than the index of the most significant bit set
+    in any of those view masks
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-02746]]
+    Each element of pname:pAttachments that is referenced by
+    pname:fragmentDensityMapAttachment must: have a pname:layerCount equal
+    to `1`
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+    or if pname:renderPass was specified with non-zero view masks, greater
+    than the index of the most significant bit set in any of those view
+    masks
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02555]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
+    pname:pAttachments that is referenced by
+    pname:fragmentDensityMapAttachment must: have a width at least as large
+    as
+    latexmath:[\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02556]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
+    pname:pAttachments that is referenced by
+    pname:fragmentDensityMapAttachment must: have a height at least as large
+    as
+    latexmath:[\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04537]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:renderPass was
+    specified with non-zero view masks, each element of pname:pAttachments
+    that is used as a <<primsrast-fragment-shading-rate-attachment,fragment
+    shading rate attachment>> by pname:renderPass must: have a
+    pname:layerCount that is either `1`, or greater than the index of the
+    most significant bit set in any of those view masks
+  * [[VUID-VkFramebufferCreateInfo-flags-04538]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and pname:renderPass was not
+    specified with non-zero view masks, each element of pname:pAttachments
+    that is used as a <<primsrast-fragment-shading-rate-attachment,fragment
+    shading rate attachment>> by pname:renderPass must: have a
+    pname:layerCount that is either `1`, or greater than pname:layers
+  * [[VUID-VkFramebufferCreateInfo-renderPass-08921]]
+    If pname:renderPass was specified with non-zero view masks, each element
+    of pname:pAttachments that is used as a
+    <<primsrast-fragment-shading-rate-attachment,fragment shading rate
+    attachment>> must: have a pname:layerCount equal to `1` or greater than
+    the index of the most significant bit set in any of those view masks
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04539]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
+    pname:pAttachments that is used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>> must: have a width at least as large as
+    [eq]#{lceil}pname:width / code:texelWidth{rceil}#, where code:texelWidth
+    is the largest value of pname:shadingRateAttachmentTexelSize.width in a
+    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
+    attachment
+  * [[VUID-VkFramebufferCreateInfo-flags-04540]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of
+    pname:pAttachments that is used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>> must: have a height at least as large as
+    [eq]#{lceil}pname:height / code:texelHeight{rceil}#, where
+    code:texelHeight is the largest value of
+    pname:shadingRateAttachmentTexelSize.height in a
+    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
+    attachment
+endif::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00883]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments must: only specify a single mip level
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00884]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments must: have been created with the identity swizzle
+  * [[VUID-VkFramebufferCreateInfo-width-00885]]
+    pname:width must: be greater than `0`
+  * [[VUID-VkFramebufferCreateInfo-width-00886]]
+    pname:width must: be less than or equal to <<limits-maxFramebufferWidth,
+    pname:maxFramebufferWidth>>
+  * [[VUID-VkFramebufferCreateInfo-height-00887]]
+    pname:height must: be greater than `0`
+  * [[VUID-VkFramebufferCreateInfo-height-00888]]
+    pname:height must: be less than or equal to
+    <<limits-maxFramebufferHeight, pname:maxFramebufferHeight>>
+  * [[VUID-VkFramebufferCreateInfo-layers-00889]]
+    pname:layers must: be greater than `0`
+  * [[VUID-VkFramebufferCreateInfo-layers-00890]]
+    pname:layers must: be less than or equal to
+    <<limits-maxFramebufferLayers, pname:maxFramebufferLayers>>
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-02531]]
+    If pname:renderPass was specified with non-zero view masks, pname:layers
+    must: be `1`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00891]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is a 2D or 2D array image view taken from a 3D
+    image must: not be a depth/stencil format
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * [[VUID-VkFramebufferCreateInfo-flags-03189]]
+    If the <<features-imagelessFramebuffer, pname:imagelessFramebuffer>>
+    feature is not enabled, pname:flags must: not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT
+  * [[VUID-VkFramebufferCreateInfo-flags-03190]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:pNext chain must: include a
+    slink:VkFramebufferAttachmentsCreateInfo structure
+  * [[VUID-VkFramebufferCreateInfo-flags-03191]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:attachmentImageInfoCount member of a
+    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
+    chain must: be equal to either zero or pname:attachmentCount
+  * [[VUID-VkFramebufferCreateInfo-flags-04541]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:width member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure in the
+    pname:pNext chain that is used as an input, color, resolve or
+    depth/stencil attachment in pname:renderPass must: be greater than or
+    equal to pname:width
+  * [[VUID-VkFramebufferCreateInfo-flags-04542]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:height member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure in the
+    pname:pNext chain that is used as an input, color, resolve or
+    depth/stencil attachment in pname:renderPass must: be greater than or
+    equal to pname:height
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkFramebufferCreateInfo-flags-03196]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:width member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure in the
+    pname:pNext chain that is referenced by
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT::pname:fragmentDensityMapAttachment
+    in pname:renderPass must: be greater than or equal to
+    latexmath:[\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkFramebufferCreateInfo-flags-03197]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:height member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that is referenced by
+    slink:VkRenderPassFragmentDensityMapCreateInfoEXT::pname:fragmentDensityMapAttachment
+    in pname:renderPass must: be greater than or equal to
+    latexmath:[\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04543]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:width member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure in the
+    pname:pNext chain that is used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>> must: be greater than or equal to [eq]#{lceil}pname:width /
+    code:texelWidth{rceil}#, where code:texelWidth is the largest value of
+    pname:shadingRateAttachmentTexelSize.width in a
+    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
+    attachment
+  * [[VUID-VkFramebufferCreateInfo-flags-04544]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:height member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure in the
+    pname:pNext chain that is used as a
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>> must: be greater than or equal to [eq]#{lceil}pname:height
+    / code:texelHeight{rceil}#, where code:texelHeight is the largest value
+    of pname:shadingRateAttachmentTexelSize.height in a
+    slink:VkFragmentShadingRateAttachmentInfoKHR which references that
+    attachment
+  * [[VUID-VkFramebufferCreateInfo-flags-04545]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:layerCount member of any element of the
+    pname:pAttachmentImageInfos member of a
+    slink:VkFramebufferAttachmentsCreateInfo structure in the pname:pNext
+    chain that is used as a <<primsrast-fragment-shading-rate-attachment,
+    fragment shading rate attachment>> must: be either `1`, or greater than
+    or equal to pname:layers
+  * [[VUID-VkFramebufferCreateInfo-flags-04587]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT and
+    pname:renderPass was specified with non-zero view masks, each element of
+    pname:pAttachments that is used as a
+    <<primsrast-fragment-shading-rate-attachment,fragment shading rate
+    attachment>> by pname:renderPass must: have a pname:layerCount that is
+    either `1`, or greater than the index of the most significant bit set in
+    any of those view masks
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-03198]]
+    If multiview is enabled for pname:renderPass and pname:flags includes
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:layerCount member
+    of any element of the pname:pAttachmentImageInfos member of a
+    slink:VkFramebufferAttachmentsCreateInfo structure included in the
+    pname:pNext chain used as an input, color, resolve, or depth/stencil
+    attachment in pname:renderPass must: be greater than the maximum bit
+    index set in the view mask in the subpasses in which it is used in
+    pname:renderPass
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-04546]]
+    If
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+    multiview is not enabled for pname:renderPass and
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+    pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:layerCount member of any element of the
+    pname:pAttachmentImageInfos member of a
+    slink:VkFramebufferAttachmentsCreateInfo structure included in the
+    pname:pNext chain used as an input, color, resolve, or depth/stencil
+    attachment in pname:renderPass must: be greater than or equal to
+    pname:layers
+  * [[VUID-VkFramebufferCreateInfo-flags-03201]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:usage member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that refers to an attachment used as a color
+    attachment or resolve attachment by pname:renderPass must: include
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkFramebufferCreateInfo-flags-03202]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:usage member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that refers to an attachment used as a
+    depth/stencil attachment by pname:renderPass must: include
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkFramebufferCreateInfo-flags-03203]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:usage member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that refers to an attachment used as a
+    depth/stencil resolve attachment by pname:renderPass must: include
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+endif::VK_KHR_depth_stencil_resolve[]
+  * [[VUID-VkFramebufferCreateInfo-flags-03204]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:usage member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that refers to an attachment used as an input
+    attachment by pname:renderPass must: include
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-VkFramebufferCreateInfo-flags-03205]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, at
+    least one element of the pname:pViewFormats member of any element of the
+    pname:pAttachmentImageInfos member of a
+    slink:VkFramebufferAttachmentsCreateInfo structure included in the
+    pname:pNext chain must: be equal to the corresponding value of
+    slink:VkAttachmentDescription::pname:format used to create
+    pname:renderPass
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04113]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments must: have been created with
+    slink:VkImageViewCreateInfo::pname:viewType not equal to
+    ename:VK_IMAGE_VIEW_TYPE_3D
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04548]]
+    If pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of
+    pname:pAttachments that is used as a fragment shading rate attachment by
+    pname:renderPass must: have been created with a pname:usage value
+    including ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04549]]
+    If pname:flags includes ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the
+    pname:usage member of any element of the pname:pAttachmentImageInfos
+    member of a slink:VkFramebufferAttachmentsCreateInfo structure included
+    in the pname:pNext chain that refers to an attachment used as a fragment
+    shading rate attachment by pname:renderPass must: include
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkFramebufferCreateInfo-attachmentCount-05060]]
+    pname:attachmentCount must: be less than or equal to
+    <<limits-maxFramebufferAttachments,maxFramebufferAttachments>>
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkFramebufferCreateInfo-samples-06881]]
+    If
+    <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+    is enabled for any subpass, all color, depth/stencil and input
+    attachments used in that subpass which have
+    sname:VkAttachmentDescription::pname:samples or
+    sname:VkAttachmentDescription2::pname:samples equal to
+    ename:VK_SAMPLE_COUNT_1_BIT must: have been created with
+    ename:VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT in
+    their slink:VkImageCreateInfo::pname:flags
+  * [[VUID-VkFramebufferCreateInfo-samples-07009]]
+    If
+    <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+    is enabled for any subpass, all color, depth/stencil and input
+    attachments used in that subpass which have
+    sname:VkAttachmentDescription::pname:samples or
+    sname:VkAttachmentDescription2::pname:samples equal to
+    ename:VK_SAMPLE_COUNT_1_BIT must: have a format that supports the sample
+    count specified in
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkFramebufferCreateInfo-nullColorAttachmentWithExternalFormatResolve-09349]]
+    If the <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_FALSE,
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+    and pname:flags does not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT,
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+    the format of the color attachment for each subpass in pname:renderPass
+    that includes an external format image as a resolve attachment must:
+    have a format equal to the value of
+    slink:VkAndroidHardwareBufferFormatResolvePropertiesANDROID::pname:colorAttachmentFormat
+    as returned by a call to
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
+    hardware buffer that was used to create the image view use as its
+    resolve attachment
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-09350]]
+    If
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+    pname:flags does not include ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT,
+    then if
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+    an element of pname:pAttachments has a format of
+    ename:VK_FORMAT_UNDEFINED, it must: have been created with a
+    slink:VkExternalFormatANDROID::pname:externalFormat value identical to
+    that provided in the slink:VkExternalFormatANDROID::pname:externalFormat
+    specified by the corresponding slink:VkAttachmentDescription2 in
+    pname:renderPass
+endif::VK_ANDROID_external_format_resolve[]
+****
+
+include::{generated}/validity/structs/VkFramebufferCreateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+[open,refpage='VkFramebufferAttachmentsCreateInfo',desc='Structure specifying parameters of images that will be used with a framebuffer',type='structs',alias='VkFramebufferAttachmentsCreateInfo']
+--
+The sname:VkFramebufferAttachmentsCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkFramebufferAttachmentsCreateInfo.adoc[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkFramebufferAttachmentsCreateInfoKHR.adoc[]
+endif::VK_KHR_imageless_framebuffer[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:attachmentImageInfoCount is the number of attachments being
+    described.
+  * pname:pAttachmentImageInfos is a pointer to an array of
+    slink:VkFramebufferAttachmentImageInfo structures, each structure
+    describing a number of parameters of the corresponding attachment in a
+    render pass instance.
+
+include::{generated}/validity/structs/VkFramebufferAttachmentsCreateInfo.adoc[]
+--
+
+[open,refpage='VkFramebufferAttachmentImageInfo',desc='Structure specifying parameters of an image that will be used with a framebuffer',type='structs',alias='VkFramebufferAttachmentImageInfoKHR']
+--
+The sname:VkFramebufferAttachmentImageInfo structure is defined as:
+
+include::{generated}/api/structs/VkFramebufferAttachmentImageInfo.adoc[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkFramebufferAttachmentImageInfoKHR.adoc[]
+endif::VK_KHR_imageless_framebuffer[]
+
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkImageCreateFlagBits, matching the
+    value of slink:VkImageCreateInfo::pname:flags used to create an image
+    that will be used with this framebuffer.
+  * pname:usage is a bitmask of elink:VkImageUsageFlagBits, matching the
+    value of slink:VkImageCreateInfo::pname:usage used to create an image
+    used with this framebuffer.
+  * pname:width is the width of the image view used for rendering.
+  * pname:height is the height of the image view used for rendering.
+  * pname:layerCount is the number of array layers of the image view used
+    for rendering.
+  * pname:viewFormatCount is the number of entries in the pname:pViewFormats
+    array, matching the value of
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount used to create
+    an image used with this framebuffer.
+  * pname:pViewFormats is a pointer to an array of elink:VkFormat values
+    specifying all of the formats which can: be used when creating views of
+    the image, matching the value of
+    slink:VkImageFormatListCreateInfo::pname:pViewFormats used to create an
+    image used with this framebuffer.
+
+Images that can: be used with the framebuffer when beginning a render pass,
+as specified by slink:VkRenderPassAttachmentBeginInfo, must: be created with
+parameters that are identical to those specified here.
+
+
+include::{generated}/validity/structs/VkFramebufferAttachmentImageInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+
+
+[open,refpage='VkFramebufferCreateFlagBits',desc='Bitmask specifying framebuffer properties',type='enums']
+--
+Bits which can: be set in slink:VkFramebufferCreateInfo::pname:flags,
+specifying options for framebuffers, are:
+
+include::{generated}/api/enums/VkFramebufferCreateFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT specifies that image views are
+    not specified, and only attachment compatibility information will be
+    provided via a slink:VkFramebufferAttachmentImageInfo structure.
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+
+ifndef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+--
+
+[open,refpage='VkFramebufferCreateFlags',desc='Bitmask of VkFramebufferCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkFramebufferCreateFlags.adoc[]
+
+tname:VkFramebufferCreateFlags is a bitmask type for setting a mask of zero
+or more elink:VkFramebufferCreateFlagBits.
+--
+
+[open,refpage='vkDestroyFramebuffer',desc='Destroy a framebuffer object',type='protos']
+--
+To destroy a framebuffer, call:
+
+include::{generated}/api/protos/vkDestroyFramebuffer.adoc[]
+
+  * pname:device is the logical device that destroys the framebuffer.
+  * pname:framebuffer is the handle of the framebuffer to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyFramebuffer-framebuffer-00892]]
+    All submitted commands that refer to pname:framebuffer must: have
+    completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyFramebuffer-framebuffer-00893]]
+    If sname:VkAllocationCallbacks were provided when pname:framebuffer was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyFramebuffer-framebuffer-00894]]
+    If no sname:VkAllocationCallbacks were provided when pname:framebuffer
+    was created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyFramebuffer.adoc[]
+--
+
+
+[[renderpass-load-operations]]
+== Render Pass Load Operations
+
+Render pass load operations define the initial values of an attachment
+during a render pass instance.
+
+Load operations for attachments with a depth/stencil format execute in the
+ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT pipeline stage.
+Load operations for attachments with a color format execute in the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+The load operation for each sample in an attachment happens-before any
+recorded command which accesses the sample in that render pass instance via
+that attachment or an alias.
+
+[NOTE]
+.Note
+====
+Because load operations always happen first, external synchronization with
+attachment access only needs to synchronize the load operations with
+previous commands; not the operations within the render pass instance.
+ifdef::VK_EXT_load_store_op_none[]
+This does not apply when using ename:VK_ATTACHMENT_LOAD_OP_NONE_EXT.
+endif::VK_EXT_load_store_op_none[]
+====
+
+Load operations only update values within the defined render area for the
+render pass instance.
+However, any writes performed by a load operation (as defined by its access
+masks) to a given attachment may: read and write back any memory locations
+within the image subresource bound for that attachment.
+For depth/stencil images, writes to one aspect may: also result in
+read-modify-write operations for the other aspect.
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+If the subresource is in the
+ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout,
+implementations must: not access pixels outside of the render area.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+[NOTE]
+.Note
+====
+As entire subresources could be accessed by load operations, applications
+cannot safely access values outside of the render area during a render pass
+instance when a load operation that modifies values is used.
+====
+
+[open,refpage='VkAttachmentLoadOp',desc='Specify how contents of an attachment are initialized at the beginning of a subpass',type='enums']
+--
+Load operations that can: be used for a render pass are:
+
+include::{generated}/api/enums/VkAttachmentLoadOp.adoc[]
+
+  * ename:VK_ATTACHMENT_LOAD_OP_LOAD specifies that the previous contents of
+    the image within the render area will be preserved as the initial
+    values.
+    For attachments with a depth/stencil format, this uses the access type
+    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT.
+    For attachments with a color format, this uses the access type
+    ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT.
+  * ename:VK_ATTACHMENT_LOAD_OP_CLEAR specifies that the contents within the
+    render area will be cleared to a uniform value, which is specified when
+    a render pass instance is begun.
+    For attachments with a depth/stencil format, this uses the access type
+    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+    For attachments with a color format, this uses the access type
+    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+  * ename:VK_ATTACHMENT_LOAD_OP_DONT_CARE specifies that the previous
+    contents within the area need not be preserved; the contents of the
+    attachment will be undefined: inside the render area.
+    For attachments with a depth/stencil format, this uses the access type
+    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+    For attachments with a color format, this uses the access type
+    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+ifdef::VK_EXT_load_store_op_none[]
+  * ename:VK_ATTACHMENT_LOAD_OP_NONE_EXT specifies that the previous
+    contents of the image will be undefined: inside the render pass.
+    No access type is used as the image is not accessed.
+endif::VK_EXT_load_store_op_none[]
+--
+
+[[renderpass-precision]]
+During a render pass instance, input and color attachments with color
+formats that have a component size of 8, 16, or 32 bits must: be represented
+in the attachment's format throughout the instance.
+Attachments with other floating- or fixed-point color formats, or with depth
+components may: be represented in a format with a precision higher than the
+attachment format, but must: be represented with the same range.
+When such a component is loaded via the pname:loadOp, it will be converted
+into an implementation-dependent format used by the render pass.
+Such components must: be converted from the render pass format, to the
+format of the attachment, before they are resolved or stored at the end of a
+render pass instance via pname:storeOp.
+Conversions occur as described in <<fundamentals-numerics,Numeric
+Representation and Computation>> and <<fundamentals-fixedconv, Fixed-Point
+Data Conversions>>.
+
+
+[[renderpass-store-operations]]
+== Render Pass Store Operations
+
+Render pass store operations define how values written to an attachment
+during a render pass instance are stored to memory.
+
+Store operations for attachments with a depth/stencil format execute in the
+ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stage.
+Store operations for attachments with a color format execute in the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+The store operation for each sample in an attachment happens-after any
+recorded command which accesses the sample via that attachment or an alias.
+
+[NOTE]
+.Note
+====
+Because store operations always happen after other accesses in a render pass
+instance, external synchronization with attachment access in an earlier
+render pass only needs to synchronize with the store operations; not the
+operations within the render pass instance.
+ifdef::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
+This does not apply when using ename:VK_ATTACHMENT_STORE_OP_NONE.
+endif::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
+====
+
+
+Store operations only update values within the defined render area for the
+render pass instance.
+However, any writes performed by a store operation (as defined by its access
+masks) to a given attachment may: read and write back any memory locations
+within the image subresource bound for that attachment.
+For depth/stencil images writes to one aspect may: also result in
+read-modify-write operations for the other aspect.
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+If the subresource is in the
+ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout,
+implementations must: not access pixels outside of the render area.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+[NOTE]
+.Note
+====
+As entire subresources could be accessed by store operations, applications
+cannot safely access values outside of the render area via aliased resources
+during a render pass instance when a store operation that modifies values is
+used.
+====
+
+[open,refpage='VkAttachmentStoreOp',desc='Specify how contents of an attachment are stored to memory at the end of a subpass',type='enums']
+--
+Possible values of slink:VkAttachmentDescription::pname:storeOp and
+pname:stencilStoreOp, specifying how the contents of the attachment are
+treated, are:
+
+include::{generated}/api/enums/VkAttachmentStoreOp.adoc[]
+
+  * ename:VK_ATTACHMENT_STORE_OP_STORE specifies the contents generated
+    during the render pass and within the render area are written to memory.
+    For attachments with a depth/stencil format, this uses the access type
+    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+    For attachments with a color format, this uses the access type
+    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+  * ename:VK_ATTACHMENT_STORE_OP_DONT_CARE specifies the contents within the
+    render area are not needed after rendering, and may: be discarded; the
+    contents of the attachment will be undefined: inside the render area.
+    For attachments with a depth/stencil format, this uses the access type
+    ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+    For attachments with a color format, this uses the access type
+    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+ifdef::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
+  * ename:VK_ATTACHMENT_STORE_OP_NONE specifies the contents within the
+    render area are not accessed by the store operation as long as no values
+    are written to the attachment during the render pass.
+    If values are written during the render pass, this behaves identically
+    to ename:VK_ATTACHMENT_STORE_OP_DONT_CARE and with matching access
+    semantics.
+endif::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
+
+[NOTE]
+.Note
+====
+ename:VK_ATTACHMENT_STORE_OP_DONT_CARE can: cause contents generated during
+previous render passes to be discarded before reaching memory, even if no
+write to the attachment occurs during the current render pass.
+====
+--
+
+
+[[renderpass-resolve-operations]]
+== Render Pass Multisample Resolve Operations
+
+Render pass multisample resolve operations combine sample values from a
+single pixel in a multisample attachment and store the result to the
+corresponding pixel in a single sample attachment.
+
+Multisample resolve operations for attachments execute in the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+A final resolve operation for all pixels in the render area happens-after
+any recorded command which writes a pixel via the multisample attachment to
+be resolved or an explicit alias of it in the subpass that it is specified.
+Any single sample attachment specified for use in a multisample resolve
+operation may: have its contents modified at any point once rendering begins
+for the render pass instance.
+Reads from the multisample attachment can be synchronized with
+ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT.
+Access to the single sample attachment can be synchronized with
+ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT and
+ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+These pipeline stage and access types are used whether the attachments are
+color or depth/stencil attachments.
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+When using render pass objects, a subpass dependency specified with the
+above pipeline stages and access flags will ensure synchronization with
+multisample resolve operations for any attachments that were last accessed
+by that subpass.
+This allows later subpasses to read resolved values as input attachments.
+
+Resolve operations only update values within the defined render area for the
+render pass instance.
+However, any writes performed by a resolve operation (as defined by its
+access masks) to a given attachment may: read and write back any memory
+locations within the image subresource bound for that attachment.
+For depth/stencil images writes to one aspect may: also result in
+read-modify-write operations for the other aspect.
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+If the subresource is in the
+ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout,
+implementations must: not access pixels outside of the render area.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+[NOTE]
+.Note
+====
+As entire subresources could be accessed by multisample resolve operations,
+applications cannot safely access values outside of the render area via
+aliased resources during a render pass instance when a multisample resolve
+operation is performed.
+====
+
+ifndef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+The average value of samples for a given pixel in the multisample attachment
+is taken and written to the single sample attachment.
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+[open,refpage='VkResolveModeFlagBits',desc='Bitmask indicating supported depth and stencil resolve modes',type='enums',alias='VkResolveModeFlagBitsKHR']
+--
+Multisample values in a multisample attachment are combined according to the
+resolve mode used:
+
+include::{generated}/api/enums/VkResolveModeFlagBits.adoc[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/enums/VkResolveModeFlagBitsKHR.adoc[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+  * ename:VK_RESOLVE_MODE_NONE indicates that no resolve operation is done.
+  * ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT indicates that result of the
+    resolve operation is equal to the value of sample 0.
+  * ename:VK_RESOLVE_MODE_AVERAGE_BIT indicates that result of the resolve
+    operation is the average of the sample values.
+  * ename:VK_RESOLVE_MODE_MIN_BIT indicates that result of the resolve
+    operation is the minimum of the sample values.
+  * ename:VK_RESOLVE_MODE_MAX_BIT indicates that result of the resolve
+    operation is the maximum of the sample values.
+ifdef::VK_ANDROID_external_format_resolve[]
+  * ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID indicates that
+    rather than a multisample resolve, a single sampled color attachment
+    will be downsampled into a {YCbCr} format image specified by an external
+    Android format.
+    Unlike other resolve modes, implementations can resolve multiple times
+    during rendering, or even bypass writing to the color attachment
+    altogether, as long as the final value is resolved to the resolve
+    attachment.
+    Values in the [eq]#G#, [eq]#B#, and [eq]#R# channels of the color
+    attachment will be written to the [eq]#Y#, [eq]#C~B~#, and [eq]#C~R~#
+    channels of the external format image, respectively.
+    Chroma values are calculated as if sampling with a linear filter from
+    the color attachment at full rate, at the location the chroma values sit
+    according to
+    slink:VkPhysicalDeviceExternalFormatResolvePropertiesANDROID::pname:chromaOffsetX,
+    slink:VkPhysicalDeviceExternalFormatResolvePropertiesANDROID::pname:chromaOffsetY,
+    and the chroma sample rate of the resolved image.
+endif::VK_ANDROID_external_format_resolve[]
+
+If no resolve mode is otherwise specified, ename:VK_RESOLVE_MODE_AVERAGE_BIT
+is used.
+
+ifdef::VK_ANDROID_external_format_resolve[]
+[NOTE]
+.Note
+====
+No range compression or {YCbCr} model conversion is performed by
+ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID; applications have
+to do these conversions themselves.
+Value outputs are expected to match those that would be read through a
+<<textures-sampler-YCbCr-conversion-modelconversion, {YCbCr} sampler using
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY>>.
+The color space that the values should be in is defined by the platform and
+is not exposed via Vulkan.
+====
+endif::VK_ANDROID_external_format_resolve[]
+--
+
+[open,refpage='VkResolveModeFlags',desc='Bitmask of VkResolveModeFlagBits',type='flags',alias='VkResolveModeFlagsKHR']
+--
+include::{generated}/api/flags/VkResolveModeFlags.adoc[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/flags/VkResolveModeFlagsKHR.adoc[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+tname:VkResolveModeFlags is a bitmask type for setting a mask of zero or
+more elink:VkResolveModeFlagBits.
+--
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+
+[[renderpass-commands]]
+== Render Pass Commands
+
+An application records the commands for a render pass instance one subpass
+at a time, by beginning a render pass instance, iterating over the subpasses
+to record commands for that subpass, and then ending the render pass
+instance.
+
+[open,refpage='vkCmdBeginRenderPass',desc='Begin a new render pass',type='protos']
+--
+To begin a render pass instance, call:
+
+include::{generated}/api/protos/vkCmdBeginRenderPass.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pRenderPassBegin is a pointer to a slink:VkRenderPassBeginInfo
+    structure specifying the render pass to begin an instance of, and the
+    framebuffer the instance uses.
+  * pname:contents is a elink:VkSubpassContents value specifying how the
+    commands in the first subpass will be provided.
+
+After beginning a render pass instance, the command buffer is ready to
+record the commands for the first subpass of that render pass.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00895]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-01758]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-02842]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
+    attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843]]
+    If any of the pname:stencilInitialLayout or pname:stencilFinalLayout
+    member of the sname:VkAttachmentDescriptionStencilLayout structures or
+    the pname:stencilLayout member of the
+    sname:VkAttachmentReferenceStencilLayout structures specified when
+    creating the render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
+    attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00897]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00898]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00899]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00900]]
+    If the pname:initialLayout member of any of the
+    sname:VkAttachmentDescription structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is not ename:VK_IMAGE_LAYOUT_UNDEFINED, then each
+    such pname:initialLayout must: be equal to the current layout of the
+    corresponding attachment image subresource of the framebuffer specified
+    in the pname:framebuffer member of pname:pRenderPassBegin
+  * [[VUID-vkCmdBeginRenderPass-srcStageMask-06451]]
+    The pname:srcStageMask members of any element of the pname:pDependencies
+    member of slink:VkRenderPassCreateInfo used to create pname:renderPass
+    must: be supported by the capabilities of the queue family identified by
+    the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    used to create the command pool which pname:commandBuffer was allocated
+    from
+  * [[VUID-vkCmdBeginRenderPass-dstStageMask-06452]]
+    The pname:dstStageMask members of any element of the pname:pDependencies
+    member of slink:VkRenderPassCreateInfo used to create pname:renderPass
+    must: be supported by the capabilities of the queue family identified by
+    the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    used to create the command pool which pname:commandBuffer was allocated
+    from
+  * [[VUID-vkCmdBeginRenderPass-framebuffer-02532]]
+    For any attachment in pname:framebuffer that is used by pname:renderPass
+    and is bound to memory locations that are also bound to another
+    attachment used by pname:renderPass, and if at least one of those uses
+    causes either attachment to be written to, both attachments must: have
+    had the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set
+  * [[VUID-vkCmdBeginRenderPass-framebuffer-09045]]
+    If any attachments specified in pname:framebuffer are used by
+    pname:renderPass and are bound to overlapping memory locations, there
+    must: be only one that is used as a color attachment, depth/stencil, or
+    resolve attachment in any subpass
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-07000]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including either the
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT and either the
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bits
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-07001]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value the
+    ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit
+endif::VK_EXT_attachment_feedback_loop_layout[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginRenderPass.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+[open,refpage='vkCmdBeginRenderPass2',desc='Begin a new render pass',type='protos',alias='vkCmdBeginRenderPass2KHR']
+--
+Alternatively to begin a render pass, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCmdBeginRenderPass2.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
+
+ifdef::VK_KHR_create_renderpass2[]
+include::{generated}/api/protos/vkCmdBeginRenderPass2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pRenderPassBegin is a pointer to a slink:VkRenderPassBeginInfo
+    structure specifying the render pass to begin an instance of, and the
+    framebuffer the instance uses.
+  * pname:pSubpassBeginInfo is a pointer to a slink:VkSubpassBeginInfo
+    structure containing information about the subpass which is about to
+    begin rendering.
+
+After beginning a render pass instance, the command buffer is ready to
+record the commands for the first subpass of that render pass.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginRenderPass2-framebuffer-02779]]
+    Both the pname:framebuffer and pname:renderPass members of
+    pname:pRenderPassBegin must: have been created on the same
+    slink:VkDevice that pname:commandBuffer was allocated on
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03094]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03096]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-02844]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
+    attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass2-stencilInitialLayout-02845]]
+    If any of the pname:stencilInitialLayout or pname:stencilFinalLayout
+    member of the sname:VkAttachmentDescriptionStencilLayout structures or
+    the pname:stencilLayout member of the
+    sname:VkAttachmentReferenceStencilLayout structures specified when
+    creating the render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding
+    attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03097]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03098]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03099]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    then the corresponding attachment image view of the framebuffer
+    specified in the pname:framebuffer member of pname:pRenderPassBegin
+    must: have been created with a pname:usage value including
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-03100]]
+    If the pname:initialLayout member of any of the
+    sname:VkAttachmentDescription structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is not ename:VK_IMAGE_LAYOUT_UNDEFINED, then each
+    such pname:initialLayout must: be equal to the current layout of the
+    corresponding attachment image subresource of the framebuffer specified
+    in the pname:framebuffer member of pname:pRenderPassBegin
+  * [[VUID-vkCmdBeginRenderPass2-srcStageMask-06453]]
+    The pname:srcStageMask members of any element of the pname:pDependencies
+    member of slink:VkRenderPassCreateInfo used to create pname:renderPass
+    must: be supported by the capabilities of the queue family identified by
+    the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    used to create the command pool which pname:commandBuffer was allocated
+    from
+  * [[VUID-vkCmdBeginRenderPass2-dstStageMask-06454]]
+    The pname:dstStageMask members of any element of the pname:pDependencies
+    member of slink:VkRenderPassCreateInfo used to create pname:renderPass
+    must: be supported by the capabilities of the queue family identified by
+    the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    used to create the command pool which pname:commandBuffer was allocated
+    from
+  * [[VUID-vkCmdBeginRenderPass2-framebuffer-02533]]
+    For any attachment in pname:framebuffer that is used by pname:renderPass
+    and is bound to memory locations that are also bound to another
+    attachment used by pname:renderPass, and if at least one of those uses
+    causes either attachment to be written to, both attachments must: have
+    had the ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set
+  * [[VUID-vkCmdBeginRenderPass2-framebuffer-09046]]
+    If any attachments specified in pname:framebuffer are used by
+    pname:renderPass and are bound to overlapping memory locations, there
+    must: be only one that is used as a color attachment, depth/stencil, or
+    resolve attachment in any subpass
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-07002]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value including either the
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT and either the
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bits
+  * [[VUID-vkCmdBeginRenderPass2-initialLayout-07003]]
+    If any of the pname:initialLayout or pname:finalLayout member of the
+    sname:VkAttachmentDescription structures or the pname:layout member of
+    the sname:VkAttachmentReference structures specified when creating the
+    render pass specified in the pname:renderPass member of
+    pname:pRenderPassBegin is
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the
+    corresponding attachment image view of the framebuffer specified in the
+    pname:framebuffer member of pname:pRenderPassBegin must: have been
+    created with a pname:usage value the
+    ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit
+endif::VK_EXT_attachment_feedback_loop_layout[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginRenderPass2.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+[open,refpage='VkRenderPassBeginInfo',desc='Structure specifying render pass begin information',type='structs']
+--
+The sname:VkRenderPassBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassBeginInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:renderPass is the render pass to begin an instance of.
+  * pname:framebuffer is the framebuffer containing the attachments that are
+    used with the render pass.
+  * pname:renderArea is the render area that is affected by the render pass
+    instance, and is described in more detail below.
+  * pname:clearValueCount is the number of elements in pname:pClearValues.
+  * pname:pClearValues is a pointer to an array of pname:clearValueCount
+    slink:VkClearValue structures containing clear values for each
+    attachment, if the attachment uses a pname:loadOp value of
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR or if the attachment has a
+    depth/stencil format and uses a pname:stencilLoadOp value of
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR.
+    The array is indexed by attachment number.
+    Only elements corresponding to cleared attachments are used.
+    Other elements of pname:pClearValues are ignored.
+
+pname:renderArea is the render area that is affected by the render pass
+instance.
+The effects of attachment load, store and multisample resolve operations are
+restricted to the pixels whose x and y coordinates fall within the render
+area on all attachments.
+The render area extends to all layers of pname:framebuffer.
+The application must: ensure (using scissor if necessary) that all rendering
+is contained within the render area.
+ifndef::VK_QCOM_render_pass_transform[]
+The render area must: be contained within the framebuffer dimensions.
+endif::VK_QCOM_render_pass_transform[]
+ifdef::VK_QCOM_render_pass_transform[]
+The render area, after any transform specified by
+slink:VkRenderPassTransformBeginInfoQCOM::pname:transform is applied, must:
+be contained within the framebuffer dimensions.
+endif::VK_QCOM_render_pass_transform[]
+
+ifdef::VK_QCOM_render_pass_transform[]
+If <<vertexpostproc-renderpass-transform, render pass transform>> is
+enabled, then pname:renderArea must: equal the framebuffer pre-transformed
+dimensions.
+After pname:renderArea has been transformed by
+slink:VkRenderPassTransformBeginInfoQCOM::pname:transform, the resulting
+render area must: be equal to the framebuffer dimensions.
+endif::VK_QCOM_render_pass_transform[]
+
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+If multiview is enabled in pname:renderPass, and
+<<features-multiview-per-view-render-areas,
+pname:multiviewPerViewRenderAreas>> feature is enabled, and there is an
+instance of slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
+included in the pname:pNext chain with pname:perViewRenderAreaCount not
+equal to `0`, then the elements of
+slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM::pname:pPerViewRenderAreas
+override pname:renderArea and define a render area for each view.
+In this case, pname:renderArea must: be set to an area at least as large as
+the union of all the per-view render areas.
+endif::VK_QCOM_multiview_per_view_render_areas[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+If the <<features-subpassShading, pname:subpassShading>> feature is enabled,
+then pname:renderArea must: equal the framebuffer dimensions.
+endif::VK_HUAWEI_subpass_shading[]
+
+[NOTE]
+.Note
+====
+There may: be a performance cost for using a render area smaller than the
+framebuffer, unless it matches the render area granularity for the render
+pass.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassBeginInfo-clearValueCount-00902]]
+    pname:clearValueCount must: be greater than the largest attachment index
+    in pname:renderPass specifying a pname:loadOp (or pname:stencilLoadOp,
+    if the attachment has a depth/stencil format) of
+    ename:VK_ATTACHMENT_LOAD_OP_CLEAR
+  * [[VUID-VkRenderPassBeginInfo-clearValueCount-04962]]
+    If pname:clearValueCount is not `0`, pname:pClearValues must: be a valid
+    pointer to an array of pname:clearValueCount slink:VkClearValue unions
+  * [[VUID-VkRenderPassBeginInfo-renderPass-00904]]
+    pname:renderPass must: be <<renderpass-compatibility,compatible>> with
+    the pname:renderPass member of the slink:VkFramebufferCreateInfo
+    structure specified when creating pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-None-08996]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceRenderAreaCount
+    is 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.extent.width must: be greater than 0
+  * [[VUID-VkRenderPassBeginInfo-None-08997]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceRenderAreaCount
+    is 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.extent.height must: be greater than 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02850]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02851]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02852]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    [eq]#pname:renderArea.offset.x {plus} pname:renderArea.extent.width#
+    must: be less than or equal to
+    slink:VkFramebufferCreateInfo::pname:width the pname:framebuffer was
+    created with
+  * [[VUID-VkRenderPassBeginInfo-pNext-02853]]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+    [eq]#pname:renderArea.offset.y {plus} pname:renderArea.extent.height#
+    must: be less than or equal to
+    slink:VkFramebufferCreateInfo::pname:height the pname:framebuffer was
+    created with
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderPassBeginInfo-pNext-02856]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, [eq]#pname:offset.x {plus}
+    pname:extent.width# of each element of pname:pDeviceRenderAreas must: be
+    less than or equal to slink:VkFramebufferCreateInfo::pname:width the
+    pname:framebuffer was created with
+  * [[VUID-VkRenderPassBeginInfo-pNext-02857]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, [eq]#pname:offset.y {plus}
+    pname:extent.height# of each element of pname:pDeviceRenderAreas must:
+    be less than or equal to slink:VkFramebufferCreateInfo::pname:height the
+    pname:framebuffer was created with
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03207]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that did not include
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and the pname:pNext chain
+    includes a slink:VkRenderPassAttachmentBeginInfo structure, its
+    pname:attachmentCount must: be zero
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03208]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pname:attachmentCount of
+    a slink:VkRenderPassAttachmentBeginInfo structure included in the
+    pname:pNext chain must: be equal to the value of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:attachmentImageInfoCount
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-02780]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: have been created on
+    the same slink:VkDevice as pname:framebuffer and pname:renderPass
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03209]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of slink:VkImageCreateInfo::pname:flags
+    equal to the pname:flags member of the corresponding element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-04627]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    with <<resources-image-inherited-usage, an inherited usage>> equal to
+    the pname:usage member of the corresponding element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03211]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    with a width equal to the pname:width member of the corresponding
+    element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03212]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    with a height equal to the pname:height member of the corresponding
+    element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03213]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount equal to
+    the pname:layerCount member of the corresponding element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03214]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount equal to the
+    pname:viewFormatCount member of the corresponding element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03215]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a set of elements in
+    slink:VkImageFormatListCreateInfo::pname:pViewFormats equal to the set
+    of elements in the pname:pViewFormats member of the corresponding
+    element of
+    slink:VkFramebufferAttachmentsCreateInfo::pname:pAttachmentImageInfos
+    used to create pname:framebuffer
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03216]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of
+    slink:VkImageViewCreateInfo::pname:format equal to the corresponding
+    value of slink:VkAttachmentDescription::pname:format in pname:renderPass
+ifdef::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-09353]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and the
+    <<limits-nullColorAttachmentWithExternalFormatResolve,
+    pname:nullColorAttachmentWithExternalFormatResolve>> is ename:VK_FALSE,
+    the format of the color attachment for each subpass that includes an
+    external format image as a resolve attachment must: have a format equal
+    to the value of
+    slink:VkAndroidHardwareBufferFormatResolvePropertiesANDROID::pname:colorAttachmentFormat
+    as returned by a call to
+    flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android
+    hardware buffer that was used to create the image view use as its
+    resolve attachment
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-09354]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of
+    slink:VkExternalFormatANDROID::pname:externalFormat equal to
+    slink:VkExternalFormatANDROID::pname:externalFormat in the pname:pNext
+    chain of the corresponding slink:VkAttachmentDescription2 structure used
+    to create pname:renderPass
+endif::VK_ANDROID_external_format_resolve[]
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-09047]]
+    If pname:framebuffer was created with a
+    slink:VkFramebufferCreateInfo::pname:flags value that included
+    ename:VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the
+    pname:pAttachments member of a slink:VkRenderPassAttachmentBeginInfo
+    structure included in the pname:pNext chain must: be a slink:VkImageView
+    of an image created with a value of
+    slink:VkImageCreateInfo::pname:samples equal to the corresponding value
+    of slink:VkAttachmentDescription::pname:samples in pname:renderPass
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+    , or ename:VK_SAMPLE_COUNT_1_BIT if pname:renderPass was created with
+    slink:VkMultisampledRenderToSingleSampledInfoEXT structure in the
+    pname:pNext chain with pname:multisampledRenderToSingleSampledEnable
+    equal to ename:VK_TRUE
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+ifdef::VK_QCOM_render_pass_transform[]
+  * [[VUID-VkRenderPassBeginInfo-pNext-02869]]
+    If the pname:pNext chain includes
+    slink:VkRenderPassTransformBeginInfoQCOM, pname:renderArea.offset must:
+    equal [eq]#(0,0)#
+  * [[VUID-VkRenderPassBeginInfo-pNext-02870]]
+    If the pname:pNext chain includes
+    slink:VkRenderPassTransformBeginInfoQCOM, pname:renderArea.extent
+    transformed by slink:VkRenderPassTransformBeginInfoQCOM::pname:transform
+    must: equal the pname:framebuffer dimensions
+endif::VK_QCOM_render_pass_transform[]
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+  * [[VUID-VkRenderPassBeginInfo-perViewRenderAreaCount-07859]]
+    If the pname:perViewRenderAreaCount member of a
+    slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure
+    included in the pname:pNext chain is not `0`, then the
+    <<features-multiview-per-view-render-areas,
+    pname:multiviewPerViewRenderAreas>> feature must: be enabled.
+  * [[VUID-VkRenderPassBeginInfo-perViewRenderAreaCount-07860]]
+    If the pname:perViewRenderAreaCount member of a
+    slink:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure
+    included in the pname:pNext chain is not `0`, then pname:renderArea
+    must: specify a render area that includes the union of all per view
+    render areas.
+endif::VK_QCOM_multiview_per_view_render_areas[]
+
+****
+
+include::{generated}/validity/structs/VkRenderPassBeginInfo.adoc[]
+--
+
+ifdef::VK_EXT_sample_locations[]
+[open,refpage='VkRenderPassSampleLocationsBeginInfoEXT',desc='Structure specifying sample locations to use for the layout transition of custom sample locations compatible depth/stencil attachments',type='structs']
+--
+The image layout of the depth aspect of a depth/stencil attachment referring
+to an image created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is dependent
+on the last sample locations used to render to the image subresource, thus
+preserving the contents of such depth/stencil attachments across subpass
+boundaries requires the application to specify these sample locations
+whenever a layout transition of the attachment may: occur.
+This information can: be provided by adding a
+sname:VkRenderPassSampleLocationsBeginInfoEXT structure to the pname:pNext
+chain of sname:VkRenderPassBeginInfo.
+
+The sname:VkRenderPassSampleLocationsBeginInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassSampleLocationsBeginInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:attachmentInitialSampleLocationsCount is the number of elements in
+    the pname:pAttachmentInitialSampleLocations array.
+  * pname:pAttachmentInitialSampleLocations is a pointer to an array of
+    pname:attachmentInitialSampleLocationsCount
+    slink:VkAttachmentSampleLocationsEXT structures specifying the
+    attachment indices and their corresponding sample location state.
+    Each element of pname:pAttachmentInitialSampleLocations can: specify the
+    sample location state to use in the automatic layout transition
+    performed to transition a depth/stencil attachment from the initial
+    layout of the attachment to the image layout specified for the
+    attachment in the first subpass using it.
+  * pname:postSubpassSampleLocationsCount is the number of elements in the
+    pname:pPostSubpassSampleLocations array.
+  * pname:pPostSubpassSampleLocations is a pointer to an array of
+    pname:postSubpassSampleLocationsCount slink:VkSubpassSampleLocationsEXT
+    structures specifying the subpass indices and their corresponding sample
+    location state.
+    Each element of pname:pPostSubpassSampleLocations can: specify the
+    sample location state to use in the automatic layout transition
+    performed to transition the depth/stencil attachment used by the
+    specified subpass to the image layout specified in a dependent subpass
+    or to the final layout of the attachment in case the specified subpass
+    is the last subpass using that attachment.
+    In addition, if
+    slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
+    is ename:VK_FALSE, each element of pname:pPostSubpassSampleLocations
+    must: specify the sample location state that matches the sample
+    locations used by all pipelines that will be bound to a command buffer
+    during the specified subpass.
+    If pname:variableSampleLocations is ename:VK_TRUE, the sample locations
+    used for rasterization do not depend on
+    pname:pPostSubpassSampleLocations.
+
+include::{generated}/validity/structs/VkRenderPassSampleLocationsBeginInfoEXT.adoc[]
+--
+
+[open,refpage='VkAttachmentSampleLocationsEXT',desc='Structure specifying the sample locations state to use in the initial layout transition of attachments',type='structs']
+--
+The sname:VkAttachmentSampleLocationsEXT structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentSampleLocationsEXT.adoc[]
+
+  * pname:attachmentIndex is the index of the attachment for which the
+    sample locations state is provided.
+  * pname:sampleLocationsInfo is the sample locations state to use for the
+    layout transition of the given attachment from the initial layout of the
+    attachment to the image layout specified for the attachment in the first
+    subpass using it.
+
+If the image referenced by the framebuffer attachment at index
+pname:attachmentIndex was not created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT then the
+values specified in pname:sampleLocationsInfo are ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531]]
+    pname:attachmentIndex must: be less than the pname:attachmentCount
+    specified in slink:VkRenderPassCreateInfo the render pass specified by
+    slink:VkRenderPassBeginInfo::pname:renderPass was created with
+****
+
+include::{generated}/validity/structs/VkAttachmentSampleLocationsEXT.adoc[]
+--
+
+[open,refpage='VkSubpassSampleLocationsEXT',desc='Structure specifying the sample locations state to use for layout transitions of attachments performed after a given subpass',type='structs']
+--
+The sname:VkSubpassSampleLocationsEXT structure is defined as:
+
+include::{generated}/api/structs/VkSubpassSampleLocationsEXT.adoc[]
+
+  * pname:subpassIndex is the index of the subpass for which the sample
+    locations state is provided.
+  * pname:sampleLocationsInfo is the sample locations state to use for the
+    layout transition of the depth/stencil attachment away from the image
+    layout the attachment is used with in the subpass specified in
+    pname:subpassIndex.
+
+If the image referenced by the depth/stencil attachment used in the subpass
+identified by pname:subpassIndex was not created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT or if the
+subpass does not use a depth/stencil attachment, and
+slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
+is ename:VK_TRUE then the values specified in pname:sampleLocationsInfo are
+ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532]]
+    pname:subpassIndex must: be less than the pname:subpassCount specified
+    in slink:VkRenderPassCreateInfo the render pass specified by
+    slink:VkRenderPassBeginInfo::pname:renderPass was created with
+****
+
+include::{generated}/validity/structs/VkSubpassSampleLocationsEXT.adoc[]
+--
+endif::VK_EXT_sample_locations[]
+
+ifdef::VK_QCOM_render_pass_transform[]
+[open,refpage='VkRenderPassTransformBeginInfoQCOM',desc='Structure describing transform parameters of a render pass instance',type='structs']
+--
+To begin a render pass instance with <<vertexpostproc-renderpass-transform,
+render pass transform>> enabled, add the
+slink:VkRenderPassTransformBeginInfoQCOM to the pname:pNext chain of
+slink:VkRenderPassBeginInfo structure passed to the
+flink:vkCmdBeginRenderPass command specifying the render pass transform.
+
+The sname:VkRenderPassTransformBeginInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassTransformBeginInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:transform is a elink:VkSurfaceTransformFlagBitsKHR value
+    describing the transform to be applied to rasterization.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871]]
+    pname:transform must: be ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
+    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or
+    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+  * [[VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872]]
+    The pname:renderpass must: have been created with
+    slink:VkRenderPassCreateInfo::pname:flags containing
+    ename:VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM
+****
+
+include::{generated}/validity/structs/VkRenderPassTransformBeginInfoQCOM.adoc[]
+--
+endif::VK_QCOM_render_pass_transform[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+[open,refpage='VkSubpassBeginInfo',desc='Structure specifying subpass begin information',type='structs',alias='VkSubpassBeginInfoKHR']
+--
+The sname:VkSubpassBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkSubpassBeginInfo.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassBeginInfoKHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:contents is a elink:VkSubpassContents value specifying how the
+    commands in the next subpass will be provided.
+
+ifdef::VK_EXT_nested_command_buffer[]
+.Valid Usage
+****
+  * [[VUID-VkSubpassBeginInfo-contents-09382]]
+    If pname:contents is
+    ename:VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT, then
+    <<features-nestedCommandBuffer, pname:nestedCommandBuffer>> must: be
+    enabled
+****
+endif::VK_EXT_nested_command_buffer[]
+
+include::{generated}/validity/structs/VkSubpassBeginInfo.adoc[]
+
+--
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+[open,refpage='VkSubpassContents',desc='Specify how commands in the first subpass of a render pass are provided',type='enums']
+--
+Possible values of flink:vkCmdBeginRenderPass::pname:contents, specifying
+how the commands in the first subpass will be provided, are:
+
+include::{generated}/api/enums/VkSubpassContents.adoc[]
+
+  * ename:VK_SUBPASS_CONTENTS_INLINE specifies that the contents of the
+    subpass will be recorded inline in the primary command buffer, and
+    secondary command buffers must: not be executed within the subpass.
+  * ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS specifies that the
+    contents are recorded in secondary command buffers that will be called
+    from the primary command buffer, and flink:vkCmdExecuteCommands is the
+    only valid command in the command buffer until flink:vkCmdNextSubpass or
+    flink:vkCmdEndRenderPass.
+ifdef::VK_EXT_nested_command_buffer[]
+  * ename:VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT
+    specifies that the contents of the subpass can: be recorded both inline
+    and in secondary command buffers executed from this command buffer with
+    flink:vkCmdExecuteCommands.
+endif::VK_EXT_nested_command_buffer[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkDeviceGroupRenderPassBeginInfo',desc='Set the initial device mask and render areas for a render pass instance',type='structs']
+--
+If the pname:pNext chain of slink:VkRenderPassBeginInfo
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo]
+includes a sname:VkDeviceGroupRenderPassBeginInfo structure, then that
+structure includes a device mask and set of render areas for the render pass
+instance.
+
+The sname:VkDeviceGroupRenderPassBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupRenderPassBeginInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupRenderPassBeginInfoKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceMask is the device mask for the render pass instance.
+  * pname:deviceRenderAreaCount is the number of elements in the
+    pname:pDeviceRenderAreas array.
+  * pname:pDeviceRenderAreas is a pointer to an array of slink:VkRect2D
+    structures defining the render area for each physical device.
+
+The pname:deviceMask serves several purposes.
+It is an upper bound on the set of physical devices that can: be used during
+the render pass instance, and the initial device mask when the render pass
+instance begins.
+In addition, commands transitioning to the next subpass in a render pass
+instance and commands ending the render pass instance, and, accordingly
+render pass <<renderpass-load-operations, load>>,
+<<renderpass-store-operations, store>>, and <<renderpass-resolve-operations,
+multisample resolve>> operations and subpass dependencies corresponding to
+the render pass instance, are executed on the physical devices included in
+the device mask provided here.
+
+If pname:deviceRenderAreaCount is not zero, then the elements of
+pname:pDeviceRenderAreas override the value of
+slink:VkRenderPassBeginInfo::pname:renderArea, and provide a render area
+specific to each physical device.
+These render areas serve the same purpose as
+slink:VkRenderPassBeginInfo::pname:renderArea, including controlling the
+region of attachments that are cleared by ename:VK_ATTACHMENT_LOAD_OP_CLEAR
+and that are resolved into resolve attachments.
+
+If this structure is not present, the render pass instance's device mask is
+the value of slink:VkDeviceGroupCommandBufferBeginInfo::pname:deviceMask.
+If this structure is not present or if pname:deviceRenderAreaCount is zero,
+slink:VkRenderPassBeginInfo::pname:renderArea is used for all physical
+devices.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905]]
+    pname:deviceMask must: be a valid device mask value
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906]]
+    pname:deviceMask must: not be zero
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907]]
+    pname:deviceMask must: be a subset of the command buffer's initial
+    device mask
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908]]
+    pname:deviceRenderAreaCount must: either be zero or equal to the number
+    of physical devices in the logical device
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06166]]
+    The pname:offset.x member of any element of pname:pDeviceRenderAreas
+    must: be greater than or equal to 0
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06167]]
+    The pname:offset.y member of any element of pname:pDeviceRenderAreas
+    must: be greater than or equal to 0
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06168]]
+    The sum of the pname:offset.x and pname:extent.width members of any
+    element of pname:pDeviceRenderAreas must: be less than or equal to
+    <<limits-maxFramebufferWidth, pname:maxFramebufferWidth>>
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-offset-06169]]
+    The sum of the pname:offset.y and pname:extent.height members of any
+    element of pname:pDeviceRenderAreas must: be less than or equal to
+    <<limits-maxFramebufferHeight, pname:maxFramebufferHeight>>
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-extent-08998]]
+    The pname:extent.width member of any element of pname:pDeviceRenderAreas
+    must: be greater than 0
+  * [[VUID-VkDeviceGroupRenderPassBeginInfo-extent-08999]]
+    The pname:extent.height member of any element of
+    pname:pDeviceRenderAreas must: be greater than 0
+****
+
+include::{generated}/validity/structs/VkDeviceGroupRenderPassBeginInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+[open,refpage='VkRenderPassAttachmentBeginInfo',desc='Structure specifying images to be used as framebuffer attachments',type='structs',alias='VkRenderPassAttachmentBeginInfoKHR']
+--
+The sname:VkRenderPassAttachmentBeginInfo structure is defined as:
+
+include::{generated}/api/structs/VkRenderPassAttachmentBeginInfo.adoc[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassAttachmentBeginInfoKHR.adoc[]
+endif::VK_KHR_imageless_framebuffer[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:attachmentCount is the number of attachments.
+  * pname:pAttachments is a pointer to an array of sname:VkImageView
+    handles, each of which will be used as the corresponding attachment in
+    the render pass instance.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03218]]
+    Each element of pname:pAttachments must: only specify a single mip level
+  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03219]]
+    Each element of pname:pAttachments must: have been created with the
+    identity swizzle
+  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-04114]]
+    Each element of pname:pAttachments must: have been created with
+    slink:VkImageViewCreateInfo::pname:viewType not equal to
+    ename:VK_IMAGE_VIEW_TYPE_3D
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkRenderPassAttachmentBeginInfo-pAttachments-07010]]
+    If
+    <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>>
+    is enabled for any subpass, all element of pname:pAttachments which have
+    a sample count equal to ename:VK_SAMPLE_COUNT_1_BIT must: have a format
+    that supports the sample count specified in
+    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+****
+
+include::{generated}/validity/structs/VkRenderPassAttachmentBeginInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+
+ifdef::VK_QCOM_multiview_per_view_render_areas[]
+[open,refpage='VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM',desc='Set the multiview per view render areas for a render pass instance',type='structs']
+--
+If a render pass instance enables multiview and if the
+<<features-multiview-per-view-render-areas,pname:multiviewPerViewRenderAreas>>
+feature is enabled, the
+sname:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure can: be
+included in the pname:pNext chain of slink:VkRenderPassBeginInfo
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo]
+
+The sname:VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:perViewRenderAreaCount is the number of elements in the
+    pname:pPerViewRenderAreas array.
+  * pname:pPerViewRenderAreas is a pointer to an array of slink:VkRect2D
+    structures defining the render area for each view.
+
+If pname:perViewRenderAreaCount is not zero, then the elements of
+pname:pPerViewRenderAreas override the value of
+slink:VkRenderPassBeginInfo::pname:renderArea
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo::pname:renderArea]
+and define per-view render areas for the individual views of a multiview
+render pass.
+The render area for the view with _view index_ `i` is specified by
+pname:pPerViewRenderAreas[i].
+
+The per-view render areas define per-view regions of attachments that are
+loaded, stored, and resolved according to the pname:loadOp, pname:storeOp,
+and pname:resolveMode values of the render pass instance.
+When per-view render areas are defined, the value of
+slink:VkRenderPassBeginInfo::pname:renderArea
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo::pname:renderArea]
+must: be set to a render area that includes the union of all per-view render
+areas, may: be used by the implementation for optimizations, but does not
+affect loads, stores, or resolves.
+
+If this structure is present and if pname:perViewRenderAreaCount is not
+zero, then pname:perViewRenderAreaCount must: be at least least one greater
+than the most significant bit set in any any element of
+slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks.
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo::pname:viewMask]
+
+If this structure is not present or if pname:perViewRenderAreaCount is zero,
+slink:VkRenderPassBeginInfo::pname:renderArea
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[or slink:VkRenderingInfo::pname:renderArea]
+is used for all views.
+
+.Valid Usage
+****
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07861]]
+    The pname:offset.x member of any element of pname:pPerViewRenderAreas
+    must: be greater than or equal to 0
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07862]]
+    The pname:offset.y member of any element of pname:pPerViewRenderAreas
+    must: be greater than or equal to 0
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07863]]
+    The sum of the pname:offset.x and pname:extent.width members of any
+    element of pname:pPerViewRenderAreas must: be less than or equal to
+    <<limits-maxFramebufferWidth, pname:maxFramebufferWidth>>
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07864]]
+    The sum of the pname:offset.y and pname:extent.height members of any
+    element of pname:pPerViewRenderAreas must: be less than or equal to
+    <<limits-maxFramebufferHeight, pname:maxFramebufferHeight>>
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-pNext-07865]]
+    If this structure is in the pname:pNext chain of
+    slink:VkRenderPassBeginInfo and if the render pass object included an
+    element in slink:VkRenderPassMultiviewCreateInfo::pname:pViewMasks that
+    set bit `n`, then pname:perViewRenderAreaCount must: be at least equal
+    to `n+1`.
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-pNext-07866]]
+    If this structure is in the pname:pNext chain of slink:VkRenderingInfo
+    and if slink:VkRenderingInfo::pname:viewMask set bit `n`, then
+    pname:perViewRenderAreaCount must: be at least equal to `n+1`.
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM.adoc[]
+--
+endif::VK_QCOM_multiview_per_view_render_areas[]
+
+
+[open,refpage='vkGetRenderAreaGranularity',desc='Returns the granularity for optimal render area',type='protos']
+--
+To query the render area granularity, call:
+
+include::{generated}/api/protos/vkGetRenderAreaGranularity.adoc[]
+
+  * pname:device is the logical device that owns the render pass.
+  * pname:renderPass is a handle to a render pass.
+  * pname:pGranularity is a pointer to a slink:VkExtent2D structure in which
+    the granularity is returned.
+
+The conditions leading to an optimal pname:renderArea are:
+
+  * the pname:offset.x member in pname:renderArea is a multiple of the
+    pname:width member of the returned slink:VkExtent2D (the horizontal
+    granularity).
+  * the pname:offset.y member in pname:renderArea is a multiple of the
+    pname:height member of the returned slink:VkExtent2D (the vertical
+    granularity).
+  * either the pname:extent.width member in pname:renderArea is a multiple
+    of the horizontal granularity or pname:offset.x+pname:extent.width is
+    equal to the pname:width of the pname:framebuffer in the
+    slink:VkRenderPassBeginInfo.
+  * either the pname:extent.height member in pname:renderArea is a multiple
+    of the vertical granularity or pname:offset.y+pname:extent.height is
+    equal to the pname:height of the pname:framebuffer in the
+    slink:VkRenderPassBeginInfo.
+
+Subpass dependencies are not affected by the render area, and apply to the
+entire image subresources attached to the framebuffer as specified in the
+description of <<renderpass-layout-transitions,automatic layout
+transitions>>.
+Similarly, pipeline barriers are valid even if their effect extends outside
+the render area.
+
+include::{generated}/validity/protos/vkGetRenderAreaGranularity.adoc[]
+--
+
+[open,refpage='vkCmdNextSubpass',desc='Transition to the next subpass of a render pass',type='protos']
+--
+To transition to the next subpass in the render pass instance after
+recording the commands for a subpass, call:
+
+include::{generated}/api/protos/vkCmdNextSubpass.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:contents specifies how the commands in the next subpass will be
+    provided, in the same fashion as the corresponding parameter of
+    flink:vkCmdBeginRenderPass.
+
+The subpass index for a render pass begins at zero when
+fname:vkCmdBeginRenderPass is recorded, and increments each time
+fname:vkCmdNextSubpass is recorded.
+
+After transitioning to the next subpass, the application can: record the
+commands for that subpass.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdNextSubpass-None-00909]]
+    The current subpass index must: be less than the number of subpasses in
+    the render pass minus one
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdNextSubpass-None-02349]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+****
+
+include::{generated}/validity/protos/vkCmdNextSubpass.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+[open,refpage='vkCmdNextSubpass2',desc='Transition to the next subpass of a render pass',type='protos',alias='vkCmdNextSubpass2KHR']
+--
+To transition to the next subpass in the render pass instance after
+recording the commands for a subpass, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCmdNextSubpass2.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
+
+ifdef::VK_KHR_create_renderpass2[]
+include::{generated}/api/protos/vkCmdNextSubpass2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pSubpassBeginInfo is a pointer to a slink:VkSubpassBeginInfo
+    structure containing information about the subpass which is about to
+    begin rendering.
+  * pname:pSubpassEndInfo is a pointer to a slink:VkSubpassEndInfo structure
+    containing information about how the previous subpass will be ended.
+
+fname:vkCmdNextSubpass2 is semantically identical to flink:vkCmdNextSubpass,
+except that it is extensible, and that pname:contents is provided as part of
+an extensible structure instead of as a flat parameter.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdNextSubpass2-None-03102]]
+    The current subpass index must: be less than the number of subpasses in
+    the render pass minus one
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdNextSubpass2-None-02350]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+****
+
+include::{generated}/validity/protos/vkCmdNextSubpass2.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+[open,refpage='vkCmdEndRenderPass',desc='End the current render pass',type='protos']
+--
+To record a command to end a render pass instance after recording the
+commands for the last subpass, call:
+
+include::{generated}/api/protos/vkCmdEndRenderPass.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to end the current
+    render pass instance.
+
+Ending a render pass instance performs any multisample resolve operations on
+the final subpass.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndRenderPass-None-00910]]
+    The current subpass index must: be equal to the number of subpasses in
+    the render pass minus one
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdEndRenderPass-None-02351]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass-None-06170]]
+    The current render pass instance must: not have been begun with
+    flink:vkCmdBeginRendering
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass-None-07004]]
+    If fname:vkCmdBeginQuery* was called within a subpass of the render
+    pass, the corresponding fname:vkCmdEndQuery* must: have been called
+    subsequently within the same subpass
+****
+
+include::{generated}/validity/protos/vkCmdEndRenderPass.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+[open,refpage='vkCmdEndRenderPass2',desc='End the current render pass',type='protos',alias='vkCmdEndRenderPass2KHR']
+--
+To record a command to end a render pass instance after recording the
+commands for the last subpass, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCmdEndRenderPass2.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_create_renderpass2[or the equivalent command]
+
+ifdef::VK_KHR_create_renderpass2[]
+include::{generated}/api/protos/vkCmdEndRenderPass2KHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:commandBuffer is the command buffer in which to end the current
+    render pass instance.
+  * pname:pSubpassEndInfo is a pointer to a slink:VkSubpassEndInfo structure
+    containing information about how the last subpass will be ended.
+
+fname:vkCmdEndRenderPass2 is semantically identical to
+flink:vkCmdEndRenderPass, except that it is extensible.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndRenderPass2-None-03103]]
+    The current subpass index must: be equal to the number of subpasses in
+    the render pass minus one
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-vkCmdEndRenderPass2-None-02352]]
+    This command must: not be recorded when transform feedback is active
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass2-None-06171]]
+    The current render pass instance must: not have been begun with
+    flink:vkCmdBeginRendering
+endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass2-None-07005]]
+    If fname:vkCmdBeginQuery* was called within a subpass of the render
+    pass, the corresponding fname:vkCmdEndQuery* must: have been called
+    subsequently within the same subpass
+****
+
+include::{generated}/validity/protos/vkCmdEndRenderPass2.adoc[]
+--
+
+[open,refpage='VkSubpassEndInfo',desc='Structure specifying subpass end information',type='structs',alias='VkSubpassEndInfoKHR']
+--
+The sname:VkSubpassEndInfo structure is defined as:
+
+include::{generated}/api/structs/VkSubpassEndInfo.adoc[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassEndInfoKHR.adoc[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+include::{generated}/validity/structs/VkSubpassEndInfo.adoc[]
+--
+
+ifdef::VK_QCOM_fragment_density_map_offset[]
+[open,refpage='VkSubpassFragmentDensityMapOffsetEndInfoQCOM',desc='Structure specifying fragment density map offset subpass end information',type='structs']
+--
+[[renderpass-fragmentdensitymapoffsets]]
+If the slink:VkSubpassEndInfo::pname:pNext chain includes a
+sname:VkSubpassFragmentDensityMapOffsetEndInfoQCOM structure, then that
+structure includes an array of fragment density map offsets per layer for
+the render pass.
+
+The sname:VkSubpassFragmentDensityMapOffsetEndInfoQCOM structure is defined
+as:
+
+include::{generated}/api/structs/VkSubpassFragmentDensityMapOffsetEndInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fragmentDensityOffsetCount is the number of offsets being
+    specified.
+  * pname:pFragmentDensityOffsets is a pointer to an array of
+    slink:VkOffset2D structs, each of which describes the offset per layer.
+
+The array elements are given per pname:layer as defined by
+<<fragmentdensitymap-fetch-density-value,Fetch Density Value>>, where
+[eq]#index = layer#.
+Each [eq]#(x,y)# offset is in framebuffer pixels and shifts the fetch of the
+fragment density map by that amount.
+Offsets can be positive or negative.
+
+Offset values specified for any subpass that is not the last subpass in the
+render pass are ignored.
+If the slink:VkSubpassEndInfo::pname:pNext chain for the last subpass of a
+render pass does not include
+sname:VkSubpassFragmentDensityMapOffsetEndInfoQCOM, or if
+pname:fragmentDensityOffsetCount is zero, then the offset [eq]#(0,0)# is
+used for <<fragmentdensitymap-fetch-density-value,Fetch Density Value>>.
+
+.Valid Usage
+****
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-fragmentDensityMapOffsets-06503]]
+    If the <<features-fragmentDensityMapOffsets,
+    pname:fragmentDensityMapOffsets>> feature is not enabled or fragment
+    density map is not enabled in the render pass,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-fragmentDensityMapAttachment-06504]]
+    If sname:VkSubpassDescription::pname:fragmentDensityMapAttachment is not
+    is not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-pDepthStencilAttachment-06505]]
+    If sname:VkSubpassDescription::pname:pDepthStencilAttachment is not is
+    not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-pInputAttachments-06506]]
+    If any element of sname:VkSubpassDescription::pname:pInputAttachments is
+    not is not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-pColorAttachments-06507]]
+    If any element of sname:VkSubpassDescription::pname:pColorAttachments is
+    not is not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-pResolveAttachments-06508]]
+    If any element of sname:VkSubpassDescription::pname:pResolveAttachments
+    is not is not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-pPreserveAttachments-06509]]
+    If any element of sname:VkSubpassDescription::pname:pPreserveAttachments
+    is not is not ename:VK_ATTACHMENT_UNUSED and was not created with
+    ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
+    pname:fragmentDensityOffsetCount must: equal `0`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-fragmentDensityOffsetCount-06510]]
+    If pname:fragmentDensityOffsetCount is not `0` and multiview is enabled
+    for the render pass, pname:fragmentDensityOffsetCount must: equal the
+    pname:layerCount that was specified in creating the fragment density map
+    attachment view
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-fragmentDensityOffsetCount-06511]]
+    If pname:fragmentDensityOffsetCount is not `0` and multiview is not
+    enabled for the render pass, pname:fragmentDensityOffsetCount must:
+    equal `1`
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-x-06512]]
+    The pname:x component of each element of pname:pFragmentDensityOffsets
+    must: be an integer multiple of
+    pname:fragmentDensityOffsetGranularity.width
+  * [[VUID-VkSubpassFragmentDensityMapOffsetEndInfoQCOM-y-06513]]
+    The pname:y component of each element of pname:pFragmentDensityOffsets
+    must: be an integer multiple of
+    pname:fragmentDensityOffsetGranularity.height
+****
+
+include::{generated}/validity/structs/VkSubpassFragmentDensityMapOffsetEndInfoQCOM.adoc[]
+--
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+
+ifdef::VK_EXT_subpass_merge_feedback[]
+include::{chapters}/VK_EXT_subpass_merge_feedback/renderpass.adoc[]
+endif::VK_EXT_subpass_merge_feedback[]
+
+
+
+== Common Render Pass Data Races (Informative)
+
+Due to the complexity of how rendering is performed, there are several ways
+an application can accidentally introduce a data race, usually by doing
+something that may seem benign but actually cannot be supported.
+This section indicates a number of the more common cases as guidelines to
+help avoid them.
+
+
+=== Sampling From a Read-only Attachment
+
+Vulkan includes read-only layouts for depth/stencil images, that allow the
+images to be both read during a render pass for the purposes of
+depth/stencil tests, and read as a non-attachment.
+
+However, because ename:VK_ATTACHMENT_STORE_OP_STORE and
+ename:VK_ATTACHMENT_STORE_OP_DONT_CARE may perform write operations, even if
+no recorded command writes to an attachment, reading from an image while
+also using it as an attachment with these store operations can result in a
+data race.
+If the reads from the non-attachment are performed in a fragment shader
+where the accessed samples match those covered by the fragment shader, no
+data race will occur as store operations are guaranteed to operate after
+fragment shader execution for the set of samples the fragment covers.
+Notably, input attachments can also be used for this case.
+Reading other samples or in any other shader stage can result in unexpected
+behavior due to the potential for a data race, and validation errors should
+be generated for doing so.
+In practice, many applications have shipped reading samples outside of the
+covered fragment without any observable issue, but there is no guarantee
+that this will always work, and it is not advisable to rely on this in new
+or re-worked code bases.
+ifdef::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_QCOM_render_pass_store_ops,VK_KHR_dynamic_rendering[]
+As ename:VK_ATTACHMENT_STORE_OP_NONE is guaranteed to perform no writes,
+applications wishing to read an image as both an attachment and a
+non-attachment should make use of this store operation, coupled with a load
+operation that also performs no writes.
+endif::VK_VERSION_1_3,VK_EXT_load_store_op_none,VK_QCOM_render_pass_store_ops,VK_KHR_dynamic_rendering[]
+
+
+=== Non-overlapping Access Between Resources
+
+When relying on non-overlapping accesses between attachments and other
+resources, it is important to note that <<renderpass-load-operations, load>>
+and <<renderpass-store-operations, store>> operations have fairly wide
+alignment requirements - potentially affecting entire subresources and
+adjacent depth/stencil aspects.
+This makes it invalid to access a non-attachment subresource that is
+simultaneously being used as an attachment where either access performs a
+write operation.
+
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+The only exception to this is if a subresource is in the
+ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout, in
+which case the overlap is defined to occur at a per-pixel granularity, and
+applications can read data from pixels outside the render area without
+introducing a data race.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+
+=== Depth/Stencil and Input Attachments
+
+When rendering to only the depth OR stencil aspect of an image, an input
+attachment accessing the other aspect will
+ifndef::VK_KHR_maintenance2[]
+always result in a data race.
+endif::VK_KHR_maintenance2[]
+ifdef::VK_KHR_maintenance2[]
+not cause a data race only under very specific conditions.
+To avoid a data race, the aspect not being written must be in a read-only
+layout, and writes to it must be disabled in the draw state.
+For example, to read from stencil while writing depth, the attachment must
+be in ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL (or
+equivalent), and the stencil write mask must be set to 0.
+Similarly to read from depth while writing stencil, the attachment must be
+in ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL (or
+equivalent), and depth write enable must be set to ename:VK_FALSE.
+endif::VK_KHR_maintenance2[]
+
+
+=== Synchronization Options
+
+There are several synchronization options available to synchronize between
+accesses to resources within a render pass.
+Some of the options are outlined below:
+
+  * A slink:VkSubpassDependency in a render pass object can synchronize
+    attachment writes and <<renderpass-resolve-operations, multisample
+    resolve operations>> from a prior subpass for subsequent input
+    attachment reads.
+  * A flink:vkCmdPipelineBarrier inside a subpass can synchronize prior
+    attachment writes in the subpass with subsequent input attachment reads.
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * A flink:vkCmdPipelineBarrier inside a subpass can synchronize prior
+    attachment writes in the subpass with subsequent non-attachment reads if
+    the attachment is in the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+  * If a subresource is used as a color and input attachment, and the
+    pipeline performing the read was created with
+    ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT
+  * If a subresource is used as a depth and input attachment, and the
+    pipeline performing the read was created with
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT
+  * If a subresource is used as a stencil and input attachment, and the
+    pipeline performing the read was created with
+    ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_EXT_fragment_shader_interlock[]
+  * If a subresource is used as two separate non-attachment resources,
+    writes to a pixel or individual sample in a fragment shader can be
+    synchronized with access to the same pixel or sample in another fragment
+    shader by using one of the <<shaders-scope-fragment-interlock, fragment
+    interlock>> execution modes.
+endif::VK_EXT_fragment_shader_interlock[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/resources.adoc b/codegen/vulkan/vulkan-docs-next/chapters/resources.adoc
new file mode 100644
index 0000000..549692a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/resources.adoc
@@ -0,0 +1,10277 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[resources]]
+= Resource Creation
+
+Vulkan supports two primary resource types: _buffers_ and _images_.
+Resources are views of memory with associated formatting and dimensionality.
+Buffers provide access to raw arrays of bytes, whereas images can: be
+multidimensional and may: have associated metadata.
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+Other resource types, such as <<resources-acceleration-structures,
+acceleration structures>>
+ifdef::VK_EXT_opacity_micromap[]
+and <<resources-micromaps, micromaps>>
+endif::VK_EXT_opacity_micromap[]
+use buffers as the backing store for opaque data structures.
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+
+[[resources-buffers]]
+== Buffers
+
+[open,refpage='VkBuffer',desc='Opaque handle to a buffer object',type='handles']
+--
+Buffers represent linear arrays of data which are used for various purposes
+by binding them to a graphics or compute pipeline via descriptor sets or
+certain commands, or by directly specifying them as parameters to certain
+commands.
+
+Buffers are represented by sname:VkBuffer handles:
+
+include::{generated}/api/handles/VkBuffer.adoc[]
+--
+
+[open,refpage='vkCreateBuffer',desc='Create a new buffer object',type='protos']
+--
+:refpage: vkCreateBuffer
+:objectnameplural: buffers
+:objectnamecamelcase: buffer
+:objectcount: 1
+
+To create buffers, call:
+
+include::{generated}/api/protos/vkCreateBuffer.adoc[]
+
+  * pname:device is the logical device that creates the buffer object.
+  * pname:pCreateInfo is a pointer to a slink:VkBufferCreateInfo structure
+    containing parameters affecting creation of the buffer.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pBuffer is a pointer to a slink:VkBuffer handle in which the
+    resulting buffer object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateBuffer-flags-00911]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+ifdef::VK_NV_extended_sparse_address_space[]
+    and the <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is not enabled,
+endif::VK_NV_extended_sparse_address_space[]
+    creating this sname:VkBuffer must: not cause the total required sparse
+    memory for all currently valid sparse resources on the device to exceed
+    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
+ifdef::VK_NV_extended_sparse_address_space[]
+  * [[VUID-vkCreateBuffer-flags-09383]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT, the
+    <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled, and the
+    pname:usage member of pname:pCreateInfo contains bits not in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseBufferUsageFlags,
+    creating this sname:VkBuffer must: not cause the total required sparse
+    memory for all currently valid sparse resources on the device, excluding
+    sname:VkBuffer created with pname:usage member of pname:pCreateInfo
+    containing bits in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseBufferUsageFlags
+    and sname:VkImage created with pname:usage member of pname:pCreateInfo
+    containing bits in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseImageUsageFlags,
+    to exceed sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
+  * [[VUID-vkCreateBuffer-flags-09384]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT and the
+    <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled, creating this
+    sname:VkBuffer must: not cause the total required sparse memory for all
+    currently valid sparse resources on the device to exceed
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseAddressSpaceSize
+endif::VK_NV_extended_sparse_address_space[]
+endif::VKSC_VERSION_1_0[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-vkCreateBuffer-pNext-06387]]
+    If using the slink:VkBuffer for an import operation from a
+    slink:VkBufferCollectionFUCHSIA where a
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA has been chained to
+    pname:pNext, pname:pCreateInfo must: match the
+    slink:VkBufferConstraintsInfoFUCHSIA::pname:createInfo used when setting
+    the constraints on the buffer collection with
+    flink:vkSetBufferCollectionBufferConstraintsFUCHSIA
+endif::VK_FUCHSIA_buffer_collection[]
+****
+
+include::{generated}/validity/protos/vkCreateBuffer.adoc[]
+--
+
+[open,refpage='VkBufferCreateInfo',desc='Structure specifying the parameters of a newly created buffer object',type='structs']
+--
+The sname:VkBufferCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkBufferCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkBufferCreateFlagBits specifying
+    additional parameters of the buffer.
+  * pname:size is the size in bytes of the buffer to be created.
+  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits specifying
+    allowed usages of the buffer.
+  * pname:sharingMode is a elink:VkSharingMode value specifying the sharing
+    mode of the buffer when it will be accessed by multiple queue families.
+  * pname:queueFamilyIndexCount is the number of entries in the
+    pname:pQueueFamilyIndices array.
+  * pname:pQueueFamilyIndices is a pointer to an array of queue families
+    that will access this buffer.
+    It is ignored if pname:sharingMode is not
+    ename:VK_SHARING_MODE_CONCURRENT.
+
+ifdef::VK_KHR_maintenance5[]
+If a slink:VkBufferUsageFlags2CreateInfoKHR structure is present in the
+pname:pNext chain, slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage from
+that structure is used instead of pname:usage from this structure.
+endif::VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+  * [[VUID-VkBufferCreateInfo-size-00912]]
+    pname:size must: be greater than `0`
+  * [[VUID-VkBufferCreateInfo-sharingMode-00913]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:pQueueFamilyIndices must: be a valid pointer to an array of
+    pname:queueFamilyIndexCount code:uint32_t values
+  * [[VUID-VkBufferCreateInfo-sharingMode-00914]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:queueFamilyIndexCount must: be greater than `1`
+ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkBufferCreateInfo-sharingMode-01391]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
+    of pname:pQueueFamilyIndices must: be unique and must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkBufferCreateInfo-sharingMode-01419]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
+    of pname:pQueueFamilyIndices must: be unique and must: be less than
+    pname:pQueueFamilyPropertyCount returned by either
+    flink:vkGetPhysicalDeviceQueueFamilyProperties or
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBufferCreateInfo-flags-00915]]
+    If the <<features-sparseBinding, pname:sparseBinding>> feature is not
+    enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
+  * [[VUID-VkBufferCreateInfo-flags-00916]]
+    If the <<features-sparseResidencyBuffer, pname:sparseResidencyBuffer>>
+    feature is not enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkBufferCreateInfo-flags-00917]]
+    If the <<features-sparseResidencyAliased, pname:sparseResidencyAliased>>
+    feature is not enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+  * [[VUID-VkBufferCreateInfo-flags-00918]]
+    If pname:flags contains ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must: also contain
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBufferCreateInfo-flags-05061]]
+    pname:flags must: not contain ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferCreateInfo-pNext-00920]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryBufferCreateInfo structure, its pname:handleTypes
+    member must: only contain bits that are also in
+    slink:VkExternalBufferProperties::pname:externalMemoryProperties.compatibleHandleTypes,
+    as returned by flink:vkGetPhysicalDeviceExternalBufferProperties with
+    pname:pExternalBufferInfo->handleType equal to any one of the handle
+    types specified in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkBufferCreateInfo-flags-01887]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_PROTECTED_BIT
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBufferCreateInfo-None-01888]]
+    If any of the bits ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT are set,
+    ename:VK_BUFFER_CREATE_PROTECTED_BIT must: not also be set
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_NV_dedicated_allocation[]
+  * [[VUID-VkBufferCreateInfo-pNext-01571]]
+    If the pname:pNext chain includes a
+    slink:VkDedicatedAllocationBufferCreateInfoNV structure, and the
+    pname:dedicatedAllocation member of the chained structure is
+    ename:VK_TRUE, then pname:flags must: not include
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+endif::VK_NV_dedicated_allocation[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_buffer_device_address[]
+  * [[VUID-VkBufferCreateInfo-deviceAddress-02604]]
+    If slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress is not
+    zero, pname:flags must: include
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+endif::VK_EXT_buffer_device_address[]
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+  * [[VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337]]
+    If
+    slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress
+    is not zero, pname:flags must: include
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_buffer_device_address[]
+  * [[VUID-VkBufferCreateInfo-flags-03338]]
+    If pname:flags includes
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
+    <<features-bufferDeviceAddressCaptureReplay,
+    pname:bufferDeviceAddressCaptureReplay>> or
+    <<features-bufferDeviceAddressCaptureReplayEXT,
+    pname:bufferDeviceAddressCaptureReplayEXT>> feature must: be enabled
+endif::VK_EXT_buffer_device_address[]
+ifndef::VK_EXT_buffer_device_address[]
+  * [[VUID-VkBufferCreateInfo-flags-06549]]
+    If pname:flags includes
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
+    <<features-bufferDeviceAddressCaptureReplay,
+    pname:bufferDeviceAddressCaptureReplay>> feature must: be enabled
+endif::VK_EXT_buffer_device_address[]
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkBufferCreateInfo-usage-04813]]
+    If pname:usage includes ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR
+    or ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoProfileListInfoKHR structure with
+    pname:profileCount greater than `0` and pname:pProfiles including at
+    least one slink:VkVideoProfileInfoKHR structure with a
+    pname:videoCodecOperation member specifying a decode operation
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkBufferCreateInfo-usage-04814]]
+    If pname:usage includes ename:VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+    or ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoProfileListInfoKHR structure with
+    pname:profileCount greater than `0` and pname:pProfiles including at
+    least one slink:VkVideoProfileInfoKHR structure with a
+    pname:videoCodecOperation member specifying an encode operation
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-VkBufferCreateInfo-size-06409]]
+    pname:size must: be less than or equal to
+    slink:VkPhysicalDeviceMaintenance4Properties::pname:maxBufferSize
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkBufferCreateInfo-usage-08097]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, creating this
+    sname:VkBuffer must: not cause the total required space for all
+    currently valid buffers using this flag on the device to exceed
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:samplerDescriptorBufferAddressSpaceSize
+    or
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:descriptorBufferAddressSpaceSize
+  * [[VUID-VkBufferCreateInfo-usage-08098]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, creating this
+    sname:VkBuffer must: not cause the total required space for all
+    currently valid buffers using this flag on the device to exceed
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:resourceDescriptorBufferAddressSpaceSize
+    or
+    slink:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:descriptorBufferAddressSpaceSize
+  * [[VUID-VkBufferCreateInfo-flags-08099]]
+    If pname:flags includes
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the
+    <<features-descriptorBufferCaptureReplay,
+    pname:descriptorBufferCaptureReplay>> feature must: be enabled
+  * [[VUID-VkBufferCreateInfo-pNext-08100]]
+    If the pname:pNext chain includes a
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, pname:flags
+    must: contain
+    ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+  * [[VUID-VkBufferCreateInfo-usage-08101]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, the
+    <<features-descriptorBufferPushDescriptors,
+    pname:descriptorBufferPushDescriptors>> feature must: be enabled
+  * [[VUID-VkBufferCreateInfo-usage-08102]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
+    <<limits-bufferlessPushDescriptors,
+    sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT::pname:bufferlessPushDescriptors>>
+    must: be ename:VK_FALSE
+  * [[VUID-VkBufferCreateInfo-usage-08103]]
+    If pname:usage includes
+    ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT,
+    pname:usage must: contain at least one of
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT or
+    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkBufferCreateInfo-None-09205]]
+    {empty}
+ifdef::VK_KHR_maintenance5[]
+    If the pname:pNext chain does not include a
+    slink:VkBufferUsageFlags2CreateInfoKHR structure,
+endif::VK_KHR_maintenance5[]
+    pname:usage must be a valid combination of elink:VkBufferUsageFlagBits
+    values
+  * [[VUID-VkBufferCreateInfo-None-09206]]
+    {empty}
+ifdef::VK_KHR_maintenance5[]
+    If the pname:pNext chain does not include a
+    slink:VkBufferUsageFlags2CreateInfoKHR structure,
+endif::VK_KHR_maintenance5[]
+    pname:usage must: not be `0`
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkBufferCreateInfo::pname:flags must: not contain any of the
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT flags <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkBufferCreateInfo.adoc[]
+--
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='VkBufferUsageFlags2CreateInfoKHR',desc='Extended buffer usage flags',type='structs']
+--
+The sname:VkBufferUsageFlags2CreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkBufferUsageFlags2CreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:usage is a bitmask of elink:VkBufferUsageFlagBits2KHR specifying
+    allowed usages of the buffer.
+
+If this structure is included in the pname:pNext chain of a buffer creation
+structure, pname:usage is used instead of the corresponding pname:usage
+value passed in that creation structure, allowing additional usage flags to
+be specified.
+If this structure is included in the pname:pNext chain of a buffer query
+structure, the usage flags of the buffer are returned in pname:usage of this
+structure, and the usage flags representable in pname:usage of the buffer
+query structure are also returned in that field.
+
+include::{generated}/validity/structs/VkBufferUsageFlags2CreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkBufferUsageFlagBits2KHR',desc='Bitmask controlling how a pipeline is created',type='enums']
+--
+Bits which can: be set in
+slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage, specifying usage
+behavior of a buffer, are:
+
+include::{generated}/api/enums/VkBufferUsageFlagBits2KHR.adoc[]
+
+// Note - when editing this section, make sure that any relevant changes
+// are mirrored in VkBufferUsageFlagBits2KHR/VkBufferUsageFlagBits
+
+  * ename:VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR specifies that the buffer
+    can: be used as the source of a _transfer command_ (see the definition
+    of <<synchronization-pipeline-stages-transfer,
+    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>>).
+  * ename:VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR specifies that the buffer
+    can: be used as the destination of a transfer command.
+  * ename:VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR specifies that the
+    buffer can: be used to create a sname:VkBufferView suitable for
+    occupying a sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
+  * ename:VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR specifies that the
+    buffer can: be used to create a sname:VkBufferView suitable for
+    occupying a sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
+  * ename:VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR specifies that the buffer
+    can: be used in a sname:VkDescriptorBufferInfo suitable for occupying a
+    sname:VkDescriptorSet slot either of type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
+  * ename:VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR specifies that the buffer
+    can: be used in a sname:VkDescriptorBufferInfo suitable for occupying a
+    sname:VkDescriptorSet slot either of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
+  * ename:VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR specifies that the buffer
+    is suitable for passing as the pname:buffer parameter to
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR and]
+    flink:vkCmdBindIndexBuffer.
+  * ename:VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR specifies that the buffer
+    is suitable for passing as an element of the pname:pBuffers array to
+    flink:vkCmdBindVertexBuffers.
+  * ename:VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR specifies that the
+    buffer is suitable for passing as the pname:buffer parameter to
+    flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectNV,
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    fname:vkCmdDrawMeshTasksIndirectEXT,
+    fname:vkCmdDrawMeshTasksIndirectCountEXT,
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+    flink:vkCmdDrawClusterIndirectHUAWEI,
+endif::VK_HUAWEI_cluster_culling_shader[]
+    or flink:vkCmdDispatchIndirect.
+ifdef::VK_NV_device_generated_commands[]
+    It is also suitable for passing as the pname:buffer member of
+    sname:VkIndirectCommandsStreamNV, or pname:sequencesCountBuffer or
+    pname:sequencesIndexBuffer or pname:preprocessedBuffer member of
+    sname:VkGeneratedCommandsInfoNV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT specifies that the
+    buffer is suitable for passing as the pname:buffer parameter to
+    flink:vkCmdBeginConditionalRenderingEXT.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT specifies that
+    the buffer is suitable for using for binding as a transform feedback
+    buffer with flink:vkCmdBindTransformFeedbackBuffersEXT.
+  * ename:VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
+    specifies that the buffer is suitable for using as a counter buffer with
+    flink:vkCmdBeginTransformFeedbackEXT and
+    flink:vkCmdEndTransformFeedbackEXT.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT specifies that
+    the buffer is suitable to contain sampler and combined image sampler
+    descriptors when bound as a descriptor buffer.
+    Buffers containing combined image sampler descriptors must: also specify
+    ename:VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
+  * ename:VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT specifies
+    that the buffer is suitable to contain resource descriptors when bound
+    as a descriptor buffer.
+  * ename:VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
+    specifies that the buffer, when bound, can: be used by the
+    implementation to support push descriptors when using descriptor
+    buffers.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_NV_ray_tracing[]
+  * ename:VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV specifies that the buffer is
+    suitable for use in flink:vkCmdTraceRaysNV.
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR specifies that the
+    buffer is suitable for use as a <<shader-binding-table,Shader Binding
+    Table>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
+    specifies that the buffer is suitable for use as a read-only input to an
+    <<acceleration-structure-building,acceleration structure build>>.
+  * ename:VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR specifies
+    that the buffer is suitable for storage space for a
+    slink:VkAccelerationStructureKHR.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * ename:VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR specifies that the
+    buffer can: be used to retrieve a buffer device address via
+    flink:vkGetBufferDeviceAddress and use that address to access the
+    buffer's memory from a shader.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR specifies that the
+    buffer can: be used as the source video bitstream buffer in a
+    <<video-decode-operations, video decode operation>>.
+  * ename:VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR is reserved for future
+    use.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR specifies that the
+    buffer can: be used as the destination video bitstream buffer in a
+    <<video-encode-operations, video encode operation>>.
+  * ename:VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR is reserved for future
+    use.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_AMDX_shader_enqueue[]
+  * ename:VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX specifies that
+    the buffer can: be used for as scratch memory for
+    <<executiongraphs,execution graph dispatch>>.
+endif::VK_AMDX_shader_enqueue[]
+--
+
+[open,refpage='VkBufferUsageFlags2KHR',desc='Bitmask of VkBufferUsageFlagBits2KHR',type='flags']
+--
+include::{generated}/api/flags/VkBufferUsageFlags2KHR.adoc[]
+
+tname:VkBufferUsageFlags2KHR is a bitmask type for setting a mask of zero or
+more elink:VkBufferUsageFlagBits2KHR.
+--
+endif::VK_KHR_maintenance5[]
+
+[open,refpage='VkBufferUsageFlagBits',desc='Bitmask specifying allowed usage of a buffer',type='enums']
+--
+Bits which can: be set in slink:VkBufferCreateInfo::pname:usage, specifying
+usage behavior of a buffer, are:
+
+include::{generated}/api/enums/VkBufferUsageFlagBits.adoc[]
+
+// Note - when editing this section, make sure that any relevant changes
+// are mirrored in VkBufferUsageFlagBits2KHR/VkBufferUsageFlagBits
+
+  * ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT specifies that the buffer can: be
+    used as the source of a _transfer command_ (see the definition of
+    <<synchronization-pipeline-stages-transfer,
+    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>>).
+  * ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT specifies that the buffer can: be
+    used as the destination of a transfer command.
+  * ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT specifies that the buffer
+    can: be used to create a sname:VkBufferView suitable for occupying a
+    sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
+  * ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT specifies that the buffer
+    can: be used to create a sname:VkBufferView suitable for occupying a
+    sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
+  * ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT specifies that the buffer can:
+    be used in a sname:VkDescriptorBufferInfo suitable for occupying a
+    sname:VkDescriptorSet slot either of type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
+  * ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT specifies that the buffer can:
+    be used in a sname:VkDescriptorBufferInfo suitable for occupying a
+    sname:VkDescriptorSet slot either of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
+  * ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT specifies that the buffer is
+    suitable for passing as the pname:buffer parameter to
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR and]
+    flink:vkCmdBindIndexBuffer.
+  * ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT specifies that the buffer is
+    suitable for passing as an element of the pname:pBuffers array to
+    flink:vkCmdBindVertexBuffers.
+  * ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT specifies that the buffer is
+    suitable for passing as the pname:buffer parameter to
+    flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
+ifdef::VK_NV_mesh_shader[]
+    flink:vkCmdDrawMeshTasksIndirectNV,
+    flink:vkCmdDrawMeshTasksIndirectCountNV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+    fname:vkCmdDrawMeshTasksIndirectEXT,
+    fname:vkCmdDrawMeshTasksIndirectCountEXT,
+endif::VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+    flink:vkCmdDrawClusterIndirectHUAWEI,
+endif::VK_HUAWEI_cluster_culling_shader[]
+    or flink:vkCmdDispatchIndirect.
+ifdef::VK_NV_device_generated_commands[]
+    It is also suitable for passing as the pname:buffer member of
+    sname:VkIndirectCommandsStreamNV, or pname:sequencesCountBuffer or
+    pname:sequencesIndexBuffer or pname:preprocessedBuffer member of
+    sname:VkGeneratedCommandsInfoNV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT specifies that the
+    buffer is suitable for passing as the pname:buffer parameter to
+    flink:vkCmdBeginConditionalRenderingEXT.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT specifies that
+    the buffer is suitable for using for binding as a transform feedback
+    buffer with flink:vkCmdBindTransformFeedbackBuffersEXT.
+  * ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
+    specifies that the buffer is suitable for using as a counter buffer with
+    flink:vkCmdBeginTransformFeedbackEXT and
+    flink:vkCmdEndTransformFeedbackEXT.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT specifies that
+    the buffer is suitable to contain sampler and combined image sampler
+    descriptors when bound as a descriptor buffer.
+    Buffers containing combined image sampler descriptors must: also specify
+    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
+  * ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT specifies that
+    the buffer is suitable to contain resource descriptors when bound as a
+    descriptor buffer.
+  * ename:VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
+    specifies that the buffer, when bound, can: be used by the
+    implementation to support push descriptors when using descriptor
+    buffers.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_NV_ray_tracing[]
+  * ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV specifies that the buffer is
+    suitable for use in flink:vkCmdTraceRaysNV.
+endif::VK_NV_ray_tracing[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR specifies that the
+    buffer is suitable for use as a <<shader-binding-table,Shader Binding
+    Table>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
+    specifies that the buffer is suitable for use as a read-only input to an
+    <<acceleration-structure-building,acceleration structure build>>.
+  * ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR specifies
+    that the buffer is suitable for storage space for a
+    slink:VkAccelerationStructureKHR.
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT specifies that the
+    buffer can: be used to retrieve a buffer device address via
+    flink:vkGetBufferDeviceAddress and use that address to access the
+    buffer's memory from a shader.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR specifies that the buffer
+    can: be used as the source video bitstream buffer in a
+    <<video-decode-operations, video decode operation>>.
+  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR is reserved for future
+    use.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR specifies that the buffer
+    can: be used as the destination video bitstream buffer in a
+    <<video-encode-operations, video encode operation>>.
+  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR is reserved for future
+    use.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_AMDX_shader_enqueue[]
+  * ename:VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX specifies that
+    the buffer can: be used for as scratch memory for
+    <<executiongraphs,execution graph dispatch>>.
+endif::VK_AMDX_shader_enqueue[]
+--
+
+[open,refpage='VkBufferUsageFlags',desc='Bitmask of VkBufferUsageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkBufferUsageFlags.adoc[]
+
+tname:VkBufferUsageFlags is a bitmask type for setting a mask of zero or
+more elink:VkBufferUsageFlagBits.
+--
+
+[open,refpage='VkBufferCreateFlagBits',desc='Bitmask specifying additional parameters of a buffer',type='enums']
+--
+Bits which can: be set in slink:VkBufferCreateInfo::pname:flags, specifying
+additional parameters of a buffer, are:
+
+include::{generated}/api/enums/VkBufferCreateFlagBits.adoc[]
+
+  * ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT specifies that the buffer will
+    be backed using sparse memory binding.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT specifies that the buffer
+    can: be partially backed using sparse memory binding.
+    Buffers created with this flag must: also be created with the
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT specifies that the buffer will
+    be backed using sparse memory binding with memory ranges that might also
+    simultaneously be backing another buffer (or another portion of the same
+    buffer).
+    Buffers created with this flag must: also be created with the
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_BUFFER_CREATE_PROTECTED_BIT specifies that the buffer is a
+    protected buffer.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+  * ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT specifies that
+    the buffer's address can: be saved and reused on a subsequent run (e.g.
+    for trace capture and replay), see
+    slink:VkBufferOpaqueCaptureAddressCreateInfo for more detail.
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    specifies that the buffer can: be used with descriptor buffers when
+    capturing and replaying (e.g. for trace capture and replay), see
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT for more detail.
+endif::VK_EXT_descriptor_buffer[]
+
+See <<sparsememory-sparseresourcefeatures,Sparse Resource Features>> and
+<<features, Physical Device Features>> for details of the sparse memory
+features supported on a device.
+--
+
+[open,refpage='VkBufferCreateFlags',desc='Bitmask of VkBufferCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkBufferCreateFlags.adoc[]
+
+tname:VkBufferCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkBufferCreateFlagBits.
+--
+
+ifdef::VK_NV_dedicated_allocation[]
+[open,refpage='VkDedicatedAllocationBufferCreateInfoNV',desc='Specify that a buffer is bound to a dedicated memory resource',type='structs']
+--
+If the pname:pNext chain includes a
+sname:VkDedicatedAllocationBufferCreateInfoNV structure, then that structure
+includes an enable controlling whether the buffer will have a dedicated
+memory allocation bound to it.
+
+The sname:VkDedicatedAllocationBufferCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkDedicatedAllocationBufferCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:dedicatedAllocation specifies whether the buffer will have a
+    dedicated allocation bound to it.
+
+include::{generated}/validity/structs/VkDedicatedAllocationBufferCreateInfoNV.adoc[]
+--
+endif::VK_NV_dedicated_allocation[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+[open,refpage='VkExternalMemoryBufferCreateInfo',desc='Specify that a buffer may be backed by external memory',type='structs']
+--
+To define a set of external memory handle types that may: be used as backing
+store for a buffer, add a slink:VkExternalMemoryBufferCreateInfo structure
+to the pname:pNext chain of the slink:VkBufferCreateInfo structure.
+The sname:VkExternalMemoryBufferCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkExternalMemoryBufferCreateInfo.adoc[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryBufferCreateInfoKHR.adoc[]
+endif::VK_KHR_external_memory[]
+
+[NOTE]
+.Note
+====
+A sname:VkExternalMemoryBufferCreateInfo structure with a non-zero
+pname:handleTypes field must be included in the creation parameters for a
+buffer that will be bound to memory that is either exported or imported.
+====
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is zero or a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more external
+    memory handle types.
+
+include::{generated}/validity/structs/VkExternalMemoryBufferCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+[open,refpage='VkBufferOpaqueCaptureAddressCreateInfo',desc='Request a specific address for a buffer',type='structs',alias='VkBufferOpaqueCaptureAddressCreateInfoKHR']
+--
+To request a specific device address for a buffer, add a
+slink:VkBufferOpaqueCaptureAddressCreateInfo structure to the pname:pNext
+chain of the slink:VkBufferCreateInfo structure.
+The sname:VkBufferOpaqueCaptureAddressCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkBufferOpaqueCaptureAddressCreateInfo.adoc[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferOpaqueCaptureAddressCreateInfoKHR.adoc[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:opaqueCaptureAddress is the opaque capture address requested for
+    the buffer.
+
+If pname:opaqueCaptureAddress is zero, no specific address is requested.
+
+If pname:opaqueCaptureAddress is not zero, then it should: be an address
+retrieved from flink:vkGetBufferOpaqueCaptureAddress for an identically
+created buffer on the same implementation.
+
+If this structure is not present, it is as if pname:opaqueCaptureAddress is
+zero.
+
+Apps should: avoid creating buffers with app-provided addresses and
+implementation-provided addresses in the same process, to reduce the
+likelihood of ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS errors.
+
+[NOTE]
+.Note
+====
+The expected usage for this is that a trace capture/replay tool will add the
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag to all buffers
+that use ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, and during capture
+will save the queried opaque device addresses in the trace.
+During replay, the buffers will be created specifying the original address
+so any address values stored in the trace data will remain valid.
+
+Implementations are expected to separate such buffers in the GPU address
+space so normal allocations will avoid using these addresses.
+Apps/tools should avoid mixing app-provided and implementation-provided
+addresses for buffers created with
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address
+space allocation conflicts.
+====
+
+include::{generated}/validity/structs/VkBufferOpaqueCaptureAddressCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+ifdef::VK_EXT_buffer_device_address[]
+[open,refpage='VkBufferDeviceAddressCreateInfoEXT',desc='Request a specific address for a buffer',type='structs']
+--
+ifdef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+Alternatively, to
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+ifndef::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+To
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+request a specific device address for a buffer, add a
+slink:VkBufferDeviceAddressCreateInfoEXT structure to the pname:pNext chain
+of the slink:VkBufferCreateInfo structure.
+The sname:VkBufferDeviceAddressCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkBufferDeviceAddressCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceAddress is the device address requested for the buffer.
+
+If pname:deviceAddress is zero, no specific address is requested.
+
+If pname:deviceAddress is not zero, then it must: be an address retrieved
+from an identically created buffer on the same implementation.
+The buffer must: also be bound to an identically created
+sname:VkDeviceMemory object.
+
+If this structure is not present, it is as if pname:deviceAddress is zero.
+
+Apps should: avoid creating buffers with app-provided addresses and
+implementation-provided addresses in the same process, to reduce the
+likelihood of ename:VK_ERROR_INVALID_DEVICE_ADDRESS_EXT errors.
+
+include::{generated}/validity/structs/VkBufferDeviceAddressCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_buffer_device_address[]
+
+
+ifdef::VK_FUCHSIA_buffer_collection[]
+[open,refpage='VkBufferCollectionBufferCreateInfoFUCHSIA',desc='Create a VkBufferCollectionFUCHSIA-compatible VkBuffer',type='structs']
+--
+The sname:VkBufferCollectionBufferCreateInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferCollectionBufferCreateInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:index is the index of the buffer in the buffer collection from
+    which the memory will be imported
+
+.Valid Usage
+****
+  * [[VUID-VkBufferCollectionBufferCreateInfoFUCHSIA-index-06388]]
+    pname:index must: be less than
+    slink:VkBufferCollectionPropertiesFUCHSIA::pname:bufferCount
+****
+
+include::{generated}/validity/structs/VkBufferCollectionBufferCreateInfoFUCHSIA.adoc[]
+--
+endif::VK_FUCHSIA_buffer_collection[]
+
+[open,refpage='vkDestroyBuffer',desc='Destroy a buffer object',type='protos']
+--
+To destroy a buffer, call:
+
+include::{generated}/api/protos/vkDestroyBuffer.adoc[]
+
+  * pname:device is the logical device that destroys the buffer.
+  * pname:buffer is the buffer to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyBuffer-buffer-00922]]
+    All submitted commands that refer to pname:buffer, either directly or
+    via a sname:VkBufferView, must: have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyBuffer-buffer-00923]]
+    If sname:VkAllocationCallbacks were provided when pname:buffer was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyBuffer-buffer-00924]]
+    If no sname:VkAllocationCallbacks were provided when pname:buffer was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyBuffer.adoc[]
+--
+
+
+[[resources-buffer-views]]
+== Buffer Views
+
+[open,refpage='VkBufferView',desc='Opaque handle to a buffer view object',type='handles']
+--
+A _buffer view_ represents a contiguous range of a buffer and a specific
+format to be used to interpret the data.
+Buffer views are used to enable shaders to access buffer contents using
+<<textures,image operations>>.
+In order to create a valid buffer view, the buffer must: have been created
+with at least one of the following usage flags:
+
+  * ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
+  * ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
+
+Buffer views are represented by sname:VkBufferView handles:
+
+include::{generated}/api/handles/VkBufferView.adoc[]
+--
+
+[open,refpage='vkCreateBufferView',desc='Create a new buffer view object',type='protos']
+--
+:refpage: vkCreateBufferView
+:objectnameplural: buffer views
+:objectnamecamelcase: bufferView
+:objectcount: 1
+
+To create a buffer view, call:
+
+include::{generated}/api/protos/vkCreateBufferView.adoc[]
+
+  * pname:device is the logical device that creates the buffer view.
+  * pname:pCreateInfo is a pointer to a slink:VkBufferViewCreateInfo
+    structure containing parameters to be used to create the buffer view.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pView is a pointer to a slink:VkBufferView handle in which the
+    resulting buffer view object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateBufferView.adoc[]
+--
+
+[open,refpage='VkBufferViewCreateInfo',desc='Structure specifying parameters of a newly created buffer view',type='structs']
+--
+The sname:VkBufferViewCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkBufferViewCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:buffer is a slink:VkBuffer on which the view will be created.
+  * pname:format is a elink:VkFormat describing the format of the data
+    elements in the buffer.
+  * pname:offset is an offset in bytes from the base address of the buffer.
+    Accesses to the buffer view from shaders use addressing that is relative
+    to this starting offset.
+  * pname:range is a size in bytes of the buffer view.
+    If pname:range is equal to ename:VK_WHOLE_SIZE, the range from
+    pname:offset to the end of the buffer is used.
+    If ename:VK_WHOLE_SIZE is used and the remaining size of the buffer is
+    not a multiple of the <<texel-block-size, texel block size>> of
+    pname:format, the nearest smaller multiple is used.
+
+[[resources-buffer-views-usage]]
+The buffer view has a _buffer view usage_ identifying which descriptor types
+can be created from it.
+This usage
+ifdef::VK_KHR_maintenance5[]
+can: be defined by including the slink:VkBufferUsageFlags2CreateInfoKHR
+structure in the pname:pNext chain, and specifying the pname:usage value
+there.
+If this structure is not included, it
+endif::VK_KHR_maintenance5[]
+is equal to the slink:VkBufferCreateInfo::pname:usage value used to create
+pname:buffer.
+
+.Valid Usage
+****
+  * [[VUID-VkBufferViewCreateInfo-offset-00925]]
+    pname:offset must: be less than the size of pname:buffer
+ifndef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+  * [[VUID-VkBufferViewCreateInfo-offset-00926]]
+    pname:offset must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
+endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+  * [[VUID-VkBufferViewCreateInfo-range-00928]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
+    greater than `0`
+  * [[VUID-VkBufferViewCreateInfo-range-00929]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
+    an integer multiple of the texel block size of pname:format
+  * [[VUID-VkBufferViewCreateInfo-range-00930]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, the number of texel
+    buffer elements given by [eq]#({lfloor}pname:range / (texel block
+    size){rfloor} {times} (texels per block))# where texel block size and
+    texels per block are as defined in the <<formats-compatibility,
+    Compatible Formats>> table for pname:format, must: be less than or equal
+    to sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
+  * [[VUID-VkBufferViewCreateInfo-offset-00931]]
+    If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of
+    pname:offset and pname:range must: be less than or equal to the size of
+    pname:buffer
+  * [[VUID-VkBufferViewCreateInfo-range-04059]]
+    If pname:range is equal to ename:VK_WHOLE_SIZE, the number of texel
+    buffer elements given by [eq]#({lfloor}(size - pname:offset) / (texel
+    block size){rfloor} {times} (texels per block))# where size is the size
+    of pname:buffer, and texel block size and texels per block are as
+    defined in the <<formats-compatibility, Compatible Formats>> table for
+    pname:format, must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
+  * [[VUID-VkBufferViewCreateInfo-buffer-00932]]
+    pname:buffer must: have been created with a pname:usage value containing
+    at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
+    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
+  * [[VUID-VkBufferViewCreateInfo-format-08778]]
+    If the <<resources-buffer-views-usage, buffer view usage>> contains
+    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, then
+    <<resources-buffer-view-format-features,format features>> of
+    pname:format must: contain
+    ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+  * [[VUID-VkBufferViewCreateInfo-format-08779]]
+    If the <<resources-buffer-views-usage, buffer view usage>> contains
+    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, then
+    <<resources-buffer-view-format-features,format features>> of
+    pname:format must: contain
+    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+  * [[VUID-VkBufferViewCreateInfo-buffer-00935]]
+    If pname:buffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+  * [[VUID-VkBufferViewCreateInfo-offset-02749]]
+    If the <<features-texelBufferAlignment, pname:texelBufferAlignment>>
+    feature is not enabled, pname:offset must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
+  * [[VUID-VkBufferViewCreateInfo-buffer-02750]]
+    If the <<features-texelBufferAlignment, pname:texelBufferAlignment>>
+    feature is enabled and if pname:buffer was created with pname:usage
+    containing ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:offset
+    must: be a multiple of the lesser of
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties::pname:storageTexelBufferOffsetAlignmentBytes
+    or, if
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties::pname:storageTexelBufferOffsetSingleTexelAlignment
+    is ename:VK_TRUE, the size of a texel of the requested pname:format.
+    If the size of a texel is a multiple of three bytes, then the size of a
+    single component of pname:format is used instead
+  * [[VUID-VkBufferViewCreateInfo-buffer-02751]]
+    If the <<features-texelBufferAlignment, pname:texelBufferAlignment>>
+    feature is enabled and if pname:buffer was created with pname:usage
+    containing ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:offset
+    must: be a multiple of the lesser of
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties::pname:uniformTexelBufferOffsetAlignmentBytes
+    or, if
+    slink:VkPhysicalDeviceTexelBufferAlignmentProperties::pname:uniformTexelBufferOffsetSingleTexelAlignment
+    is ename:VK_TRUE, the size of a texel of the requested pname:format.
+    If the size of a texel is a multiple of three bytes, then the size of a
+    single component of pname:format is used instead
+endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkBufferViewCreateInfo-pNext-06782]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT
+endif::VK_EXT_metal_objects[]
+ifdef::VK_KHR_maintenance5[]
+  * [[VUID-VkBufferViewCreateInfo-pNext-08780]]
+    If the pname:pNext chain includes a
+    slink:VkBufferUsageFlags2CreateInfoKHR, its pname:usage must: not
+    contain any other bit than
+    ename:VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR or
+    ename:VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR
+  * [[VUID-VkBufferViewCreateInfo-pNext-08781]]
+    If the pname:pNext chain includes a
+    slink:VkBufferUsageFlags2CreateInfoKHR, its pname:usage must: be a
+    subset of the slink:VkBufferCreateInfo::pname:usage specified or
+    slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage from
+    slink:VkBufferCreateInfo::pname:pNext when creating pname:buffer
+endif::VK_KHR_maintenance5[]
+****
+
+include::{generated}/validity/structs/VkBufferViewCreateInfo.adoc[]
+--
+
+[open,refpage='VkBufferViewCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkBufferViewCreateFlags.adoc[]
+
+tname:VkBufferViewCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+[open,refpage='vkDestroyBufferView',desc='Destroy a buffer view object',type='protos']
+--
+To destroy a buffer view, call:
+
+include::{generated}/api/protos/vkDestroyBufferView.adoc[]
+
+  * pname:device is the logical device that destroys the buffer view.
+  * pname:bufferView is the buffer view to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyBufferView-bufferView-00936]]
+    All submitted commands that refer to pname:bufferView must: have
+    completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyBufferView-bufferView-00937]]
+    If sname:VkAllocationCallbacks were provided when pname:bufferView was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyBufferView-bufferView-00938]]
+    If no sname:VkAllocationCallbacks were provided when pname:bufferView
+    was created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyBufferView.adoc[]
+--
+
+[[resources-buffer-view-format-features]]
+=== Buffer View Format Features
+
+Valid uses of a slink:VkBufferView may: depend on the buffer view's _format
+features_, defined below.
+Such constraints are documented in the affected valid usage statement.
+
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * The buffer view's set of _format features_ is the value of
+    slink:VkFormatProperties::pname:bufferFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkBufferViewCreateInfo::pname:format.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * If Vulkan 1.3 is supported or the `apiext:VK_KHR_format_feature_flags2`
+    extension is supported, then the buffer view's set of _format features_
+    is the value of slink:VkFormatProperties3::pname:bufferFeatures found by
+    calling flink:vkGetPhysicalDeviceFormatProperties2 on the same
+    pname:format as slink:VkBufferViewCreateInfo::pname:format.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+
+[[resources-images]]
+== Images
+
+[open,refpage='VkImage',desc='Opaque handle to an image object',type='handles']
+--
+Images represent multidimensional - up to 3 - arrays of data which can: be
+used for various purposes (e.g. attachments, textures), by binding them to a
+graphics or compute pipeline via descriptor sets, or by directly specifying
+them as parameters to certain commands.
+
+Images are represented by sname:VkImage handles:
+
+include::{generated}/api/handles/VkImage.adoc[]
+--
+
+[open,refpage='vkCreateImage',desc='Create a new image object',type='protos']
+--
+:refpage: vkCreateImage
+:objectnameplural: images
+:objectnamecamelcase: image
+:objectcount: 1
+
+To create images, call:
+
+include::{generated}/api/protos/vkCreateImage.adoc[]
+
+  * pname:device is the logical device that creates the image.
+  * pname:pCreateInfo is a pointer to a slink:VkImageCreateInfo structure
+    containing parameters to be used to create the image.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pImage is a pointer to a slink:VkImage handle in which the
+    resulting image object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateImage-flags-00939]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+ifdef::VK_NV_extended_sparse_address_space[]
+    and the <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is not enabled,
+endif::VK_NV_extended_sparse_address_space[]
+    creating this sname:VkImage must: not cause the total required sparse
+    memory for all currently valid sparse resources on the device to exceed
+    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
+ifdef::VK_NV_extended_sparse_address_space[]
+  * [[VUID-vkCreateImage-flags-09385]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, the
+    <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled, and the
+    pname:usage member of pname:pCreateInfo contains bits not in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseImageUsageFlags,
+    creating this sname:VkImage must: not cause the total required sparse
+    memory for all currently valid sparse resources on the device, excluding
+    sname:VkBuffer created with pname:usage member of pname:pCreateInfo
+    containing bits in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseBufferUsageFlags
+    and sname:VkImage created with pname:usage member of pname:pCreateInfo
+    containing bits in
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseImageUsageFlags,
+    to exceed sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize
+  * [[VUID-vkCreateImage-flags-09386]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT and the
+    <<features-extendedSparseAddressSpace,
+    pname:extendedSparseAddressSpace>> feature is enabled, creating this
+    sname:VkImage must: not cause the total required sparse memory for all
+    currently valid sparse resources on the device to exceed
+    sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::pname:extendedSparseAddressSpaceSize
+endif::VK_NV_extended_sparse_address_space[]
+endif::VKSC_VERSION_1_0[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-vkCreateImage-pNext-06389]]
+    If a slink:VkBufferCollectionImageCreateInfoFUCHSIA has been chained to
+    pname:pNext, pname:pCreateInfo must: match the
+    <<sysmem-chosen-create-infos,Sysmem chosen sname:VkImageCreateInfo>>
+    excepting members slink:VkImageCreateInfo::pname:extent and
+    slink:VkImageCreateInfo::pname:usage in the match criteria
+endif::VK_FUCHSIA_buffer_collection[]
+****
+
+include::{generated}/validity/protos/vkCreateImage.adoc[]
+--
+
+[open,refpage='VkImageCreateInfo',desc='Structure specifying the parameters of a newly created image object',type='structs']
+--
+The sname:VkImageCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkImageCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkImageCreateFlagBits describing
+    additional parameters of the image.
+  * pname:imageType is a elink:VkImageType value specifying the basic
+    dimensionality of the image.
+    Layers in array textures do not count as a dimension for the purposes of
+    the image type.
+  * pname:format is a elink:VkFormat describing the format and type of the
+    texel blocks that will be contained in the image.
+  * pname:extent is a slink:VkExtent3D describing the number of data
+    elements in each dimension of the base level.
+  * pname:mipLevels describes the number of levels of detail available for
+    minified sampling of the image.
+  * pname:arrayLayers is the number of layers in the image.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    number of <<primsrast-multisampling,samples per texel>>.
+  * pname:tiling is a elink:VkImageTiling value specifying the tiling
+    arrangement of the texel blocks in memory.
+  * pname:usage is a bitmask of elink:VkImageUsageFlagBits describing the
+    intended usage of the image.
+  * pname:sharingMode is a elink:VkSharingMode value specifying the sharing
+    mode of the image when it will be accessed by multiple queue families.
+  * pname:queueFamilyIndexCount is the number of entries in the
+    pname:pQueueFamilyIndices array.
+  * pname:pQueueFamilyIndices is a pointer to an array of queue families
+    that will access this image.
+    It is ignored if pname:sharingMode is not
+    ename:VK_SHARING_MODE_CONCURRENT.
+  * pname:initialLayout is a elink:VkImageLayout value specifying the
+    initial elink:VkImageLayout of all image subresources of the image.
+    See <<resources-image-layouts,Image Layouts>>.
+
+Images created with pname:tiling equal to ename:VK_IMAGE_TILING_LINEAR have
+further restrictions on their limits and capabilities compared to images
+created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL.
+Creation of images with tiling ename:VK_IMAGE_TILING_LINEAR may: not be
+supported unless other parameters meet all of the constraints:
+
+  * pname:imageType is ename:VK_IMAGE_TYPE_2D
+  * pname:format is not a depth/stencil format
+  * pname:mipLevels is 1
+  * pname:arrayLayers is 1
+  * pname:samples is ename:VK_SAMPLE_COUNT_1_BIT
+  * pname:usage only includes ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and/or
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Images created with one of the <<formats-requiring-sampler-ycbcr-conversion,
+formats that require a sampler {YCbCr} conversion>>, have further
+restrictions on their limits and capabilities compared to images created
+with other formats.
+Creation of images with a format requiring
+<<formats-requiring-sampler-ycbcr-conversion, {YCbCr} conversion>> may: not
+be supported unless other parameters meet all of the constraints:
+
+  * pname:imageType is ename:VK_IMAGE_TYPE_2D
+  * pname:mipLevels is 1
+  * pname:arrayLayers is 1, unless
+ifdef::VK_EXT_ycbcr_image_arrays[]
+    the pname:ycbcrImageArrays feature is enabled, or
+endif::VK_EXT_ycbcr_image_arrays[]
+    otherwise indicated by
+    slink:VkImageFormatProperties::pname:maxArrayLayers, as returned by
+    flink:vkGetPhysicalDeviceImageFormatProperties
+  * pname:samples is ename:VK_SAMPLE_COUNT_1_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+Implementations may: support additional limits and capabilities beyond those
+listed above.
+
+To determine the set of valid pname:usage bits for a given format, call
+flink:vkGetPhysicalDeviceFormatProperties.
+
+If the size of the resultant image would exceed pname:maxResourceSize, then
+flink:vkCreateImage must: fail and return
+ename:VK_ERROR_OUT_OF_DEVICE_MEMORY.
+This failure may: occur even when all image creation parameters satisfy
+their valid usage requirements.
+
+ifdef::VK_EXT_host_image_copy[]
+If the implementation reports ename:VK_TRUE in
+slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:identicalMemoryTypeRequirements,
+usage of ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT must: not affect the
+memory type requirements of the image as described in
+ifndef::VKSC_VERSION_1_0[]
+<<sparsememory-memory-requirements,Sparse Resource Memory Requirements>> and
+endif::VKSC_VERSION_1_0[]
+<<resources-association,Resource Memory Association>>.
+endif::VK_EXT_host_image_copy[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[NOTE]
+.Note
+====
+For images created without ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT a
+pname:usage bit is valid if it is supported for the format the image is
+created with.
+
+For images created with ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT a
+pname:usage bit is valid if it is supported for at least one of the formats
+a sname:VkImageView created from the image can: have (see
+<<resources-image-views,Image Views>> for more detail).
+====
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[[resources-image-creation-limits]]
+.Image Creation Limits
+****
+Valid values for some image creation parameters are limited by a numerical
+upper bound or by inclusion in a bitset.
+For example, slink:VkImageCreateInfo::pname:arrayLayers is limited by
+pname:imageCreateMaxArrayLayers, defined below; and
+slink:VkImageCreateInfo::pname:samples is limited by
+pname:imageCreateSampleCounts, also defined below.
+
+Several limiting values are defined below, as well as assisting values from
+which the limiting values are derived.
+The limiting values are referenced by the relevant valid usage statements of
+slink:VkImageCreateInfo.
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * Let `uint64_t imageCreateDrmFormatModifiers[]` be the set of
+    <<glossary-drm-format-modifier,Linux DRM format modifiers>> that the
+    resultant image may: have.
+  ** If pname:tiling is not ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+     then pname:imageCreateDrmFormatModifiers is empty.
+  ** If slink:VkImageCreateInfo::pname:pNext contains
+     slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, then
+     pname:imageCreateDrmFormatModifiers contains exactly one modifier,
+     slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:drmFormatModifier.
+  ** If slink:VkImageCreateInfo::pname:pNext contains
+     slink:VkImageDrmFormatModifierListCreateInfoEXT, then
+     pname:imageCreateDrmFormatModifiers contains the entire array
+     slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
+endif::VK_EXT_image_drm_format_modifier[]
+
+  * Let `VkBool32 imageCreateMaybeLinear` indicate if the resultant image
+    may be <<glossary-linear-resource,linear>>.
+ifndef::VK_EXT_image_drm_format_modifier[]
+    (The definition below is trivial because certain extensions are disabled
+    in this build of the specification).
+endif::VK_EXT_image_drm_format_modifier[]
+  ** If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
+     pname:imageCreateMaybeLinear is ename:VK_TRUE.
+  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, then
+     pname:imageCreateMaybeLinear is ename:VK_FALSE.
+ifdef::VK_EXT_image_drm_format_modifier[]
+  ** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+     pname:imageCreateMaybeLinear is ename:VK_TRUE if and only if
+     pname:imageCreateDrmFormatModifiers contains
+     etext:DRM_FORMAT_MOD_LINEAR.
+endif::VK_EXT_image_drm_format_modifier[]
+
+  * Let `VkFormatFeatureFlags imageCreateFormatFeatures` be the set of valid
+    _format features_ available during image creation.
+  ** If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
+     pname:imageCreateFormatFeatures is the value of
+     slink:VkFormatProperties::pname:linearTilingFeatures found by calling
+     flink:vkGetPhysicalDeviceFormatProperties with parameter pname:format
+     equal to slink:VkImageCreateInfo::pname:format.
+  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+     and if the pname:pNext chain includes no
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+     slink:VkExternalFormatANDROID
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+     or
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+     slink:VkExternalFormatQNX
+endif::VK_QNX_external_memory_screen_buffer[]
+     structure with non-zero pname:externalFormat,
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+     then pname:imageCreateFormatFeatures is the value of
+     slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
+     flink:vkGetPhysicalDeviceFormatProperties with parameter pname:format
+     equal to slink:VkImageCreateInfo::pname:format.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and if the
+     pname:pNext chain includes a slink:VkExternalFormatANDROID structure
+     with non-zero pname:externalFormat, then
+     pname:imageCreateFormatFeatures is the value of
+     slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+     obtained by flink:vkGetAndroidHardwareBufferPropertiesANDROID with a
+     matching pname:externalFormat value.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  ** If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and if the
+     pname:pNext chain includes a slink:VkExternalFormatQNX structure with
+     non-zero pname:externalFormat, then pname:imageCreateFormatFeatures is
+     the value of
+     slink:VkScreenBufferFormatPropertiesQNX::pname:formatFeatures obtained
+     by flink:vkGetScreenBufferPropertiesQNX with a matching
+     pname:externalFormat value.
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  ** If the pname:pNext chain includes a
+     slink:VkBufferCollectionImageCreateInfoFUCHSIA structure, then
+     pname:imageCreateFormatFeatures is the value of
+     slink:VkBufferCollectionPropertiesFUCHSIA::pname:formatFeatures found
+     by calling flink:vkGetBufferCollectionPropertiesFUCHSIA with a
+     parameter pname:collection equal to
+     slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  ** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+     the value of pname:imageCreateFormatFeatures is found by calling
+     flink:vkGetPhysicalDeviceFormatProperties2 with
+     slink:VkImageFormatProperties::pname:format equal to
+     slink:VkImageCreateInfo::pname:format and with
+     slink:VkDrmFormatModifierPropertiesListEXT chained into
+     slink:VkFormatProperties2; by collecting all members of the returned
+     array
+     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
+     whose pname:drmFormatModifier belongs to
+     pname:imageCreateDrmFormatModifiers; and by taking the bitwise
+     intersection, over the collected array members, of
+     pname:drmFormatModifierTilingFeatures.
+     (The resultant pname:imageCreateFormatFeatures may: be empty).
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * Let `VkImageFormatProperties2 imageCreateImageFormatPropertiesList[]` be
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+    defined as follows.
+  ** If slink:VkImageCreateInfo::pname:pNext contains no
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+     slink:VkExternalFormatANDROID
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+     or
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+     slink:VkExternalFormatQNX
+endif::VK_QNX_external_memory_screen_buffer[]
+     structure with non-zero pname:externalFormat, then
+     pname:imageCreateImageFormatPropertiesList is
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+     the list of structures obtained by calling
+     flink:vkGetPhysicalDeviceImageFormatProperties2, possibly multiple
+     times, as follows:
+  *** The parameters slink:VkPhysicalDeviceImageFormatInfo2::pname:format,
+      pname:imageType, pname:tiling, pname:usage, and pname:flags must: be
+      equal to those in slink:VkImageCreateInfo.
+  *** If slink:VkImageCreateInfo::pname:pNext contains a
+      slink:VkExternalMemoryImageCreateInfo structure whose
+      pname:handleTypes is not `0`, then
+      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain a
+      slink:VkPhysicalDeviceExternalImageFormatInfo structure whose
+      pname:handleType is not `0`; and
+      flink:vkGetPhysicalDeviceImageFormatProperties2 must: be called for
+      each handle type in
+      slink:VkExternalMemoryImageCreateInfo::pname:handleTypes, successively
+      setting
+      slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType on
+      each call.
+  *** If slink:VkImageCreateInfo::pname:pNext contains no
+      slink:VkExternalMemoryImageCreateInfo structure, or contains a
+      structure whose pname:handleTypes is `0`, then
+      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: either
+      contain no slink:VkPhysicalDeviceExternalImageFormatInfo structure, or
+      contain a structure whose pname:handleType is `0`.
+ifdef::VK_KHR_video_queue[]
+  *** If slink:VkImageCreateInfo::pname:pNext contains a
+      slink:VkVideoProfileListInfoKHR structure then
+      slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: also contain
+      the same slink:VkVideoProfileListInfoKHR structure on each call.
+endif::VK_KHR_video_queue[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  *** If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+      then:
+  **** slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain a
+       slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure where
+       pname:sharingMode is equal to
+       slink:VkImageCreateInfo::pname:sharingMode;
+  **** if pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then
+       pname:queueFamilyIndexCount and pname:pQueueFamilyIndices must: be
+       equal to those in slink:VkImageCreateInfo;
+  **** if pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
+       then the slink:VkImageFormatListCreateInfo structure included in the
+       pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2 must: be
+       equivalent to the one included in the pname:pNext chain of
+       slink:VkImageCreateInfo;
+ifdef::VK_EXT_image_compression_control[]
+  **** if slink:VkImageCreateInfo::pname:pNext contains a
+       slink:VkImageCompressionControlEXT structure, then the
+       slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain must:
+       contain an equivalent structure;
+endif::VK_EXT_image_compression_control[]
+  **** flink:vkGetPhysicalDeviceImageFormatProperties2 must: be called for
+       each modifier in pname:imageCreateDrmFormatModifiers, successively
+       setting
+       slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT::pname:drmFormatModifier
+       on each call.
+  *** If pname:tiling is not ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+      then slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext must: contain
+      no slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure.
+endif::VK_EXT_image_drm_format_modifier[]
+  *** If any call to flink:vkGetPhysicalDeviceImageFormatProperties2 returns
+      an error, then pname:imageCreateImageFormatPropertiesList is defined
+      to be the empty list.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  ** If slink:VkImageCreateInfo::pname:pNext contains a
+     slink:VkExternalFormatANDROID structure with non-zero
+     pname:externalFormat, then pname:imageCreateImageFormatPropertiesList
+     contains a single element where:
+  *** sname:VkImageFormatProperties::pname:maxMipLevels is
+      [eq]#{lfloor}log~2~(max(pname:extent.width, pname:extent.height,
+      pname:extent.depth)){rfloor} {plus} 1#.
+  *** sname:VkImageFormatProperties::pname:maxArrayLayers is
+      slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers.
+  *** Each component of sname:VkImageFormatProperties::pname:maxExtent is
+      slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D.
+  *** sname:VkImageFormatProperties::pname:sampleCounts contains exactly
+      ename:VK_SAMPLE_COUNT_1_BIT.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+  * Let `uint32_t imageCreateMaxMipLevels` be
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    the value of slink:VkImageFormatProperties::pname:maxMipLevels found by
+    calling flink:vkGetPhysicalDeviceImageFormatProperties with parameters
+    pname:format, pname:imageType, pname:tiling, pname:usage, and
+    pname:flags equal to those in slink:VkImageCreateInfo.
+    If flink:vkGetPhysicalDeviceFormatProperties returns an error, then the
+    value of pname:imageCreateMaxMipLevels is undefined:.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    the minimum value of slink:VkImageFormatProperties::pname:maxMipLevels
+    in pname:imageCreateImageFormatPropertiesList.
+    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
+    empty.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+  * Let `uint32_t imageCreateMaxArrayLayers` be
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    defined analogously to pname:imageCreateMaxMipLevels.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    the minimum value of slink:VkImageFormatProperties::pname:maxArrayLayers
+    in pname:imageCreateImageFormatPropertiesList.
+    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
+    empty.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+  * Let `VkExtent3D imageCreateMaxExtent` be
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    defined analogously to pname:imageCreateMaxMipLevels.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    the component-wise minimum over all
+    slink:VkImageFormatProperties::pname:maxExtent values in
+    pname:imageCreateImageFormatPropertiesList.
+    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
+    empty.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+  * Let `VkSampleCountFlags imageCreateSampleCounts` be
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    defined analogously to pname:imageCreateMaxMipLevels.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    the intersection of each
+    slink:VkImageFormatProperties::pname:sampleCounts in
+    pname:imageCreateImageFormatPropertiesList.
+    The value is undefined: if pname:imageCreateImageFormatPropertiesList is
+    empty.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_KHR_video_queue[]
+  * Let `VkVideoFormatPropertiesKHR videoFormatProperties[]` be defined as
+    follows.
+  ** If slink:VkImageCreateInfo::pname:pNext contains a
+     slink:VkVideoProfileListInfoKHR structure, then `videoFormatProperties`
+     is the list of structures obtained by calling
+     flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR with
+     slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage equal to the
+     pname:usage member of slink:VkImageCreateInfo and
+     slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:pNext containing the
+     same slink:VkVideoProfileListInfoKHR structure chained to
+     slink:VkImageCreateInfo.
+  ** If slink:VkImageCreateInfo::pname:pNext contains no
+     slink:VkVideoProfileListInfoKHR structure, then `videoFormatProperties`
+     is an empty list.
+  * Let `VkBool32 supportedVideoFormat` indicate if the image parameters are
+    supported by the specified video profiles.
+  ** `supportedVideoFormat` is ename:VK_TRUE if there exists an element in
+     the `videoFormatProperties` list for which all of the following
+     conditions are true:
+  *** slink:VkImageCreateInfo::pname:format equals
+      slink:VkVideoFormatPropertiesKHR::pname:format.
+  *** slink:VkImageCreateInfo::pname:flags only contains bits also set in
+      slink:VkVideoFormatPropertiesKHR::pname:imageCreateFlags.
+  *** slink:VkImageCreateInfo::pname:imageType equals
+      slink:VkVideoFormatPropertiesKHR::pname:imageType.
+  *** slink:VkImageCreateInfo::pname:tiling equals
+      slink:VkVideoFormatPropertiesKHR::pname:imageTiling.
+  *** slink:VkImageCreateInfo::pname:usage only contains bits also set in
+      slink:VkVideoFormatPropertiesKHR::pname:imageUsageFlags.
+  ** Otherwise `supportedVideoFormat` is ename:VK_FALSE.
+endif::VK_KHR_video_queue[]
+****
+
+.Valid Usage
+****
+  * [[VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251]]
+    Each of the following values (as described in
+    <<resources-image-creation-limits,Image Creation Limits>>) must: not be
+    undefined: : pname:imageCreateMaxMipLevels,
+    pname:imageCreateMaxArrayLayers, pname:imageCreateMaxExtent, and
+    pname:imageCreateSampleCounts
+  * [[VUID-VkImageCreateInfo-sharingMode-00941]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:pQueueFamilyIndices must: be a valid pointer to an array of
+    pname:queueFamilyIndexCount code:uint32_t values
+  * [[VUID-VkImageCreateInfo-sharingMode-00942]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
+    pname:queueFamilyIndexCount must: be greater than `1`
+ifndef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkImageCreateInfo-sharingMode-01392]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
+    of pname:pQueueFamilyIndices must: be unique and must: be less than
+    pname:pQueueFamilyPropertyCount returned by
+    flink:vkGetPhysicalDeviceQueueFamilyProperties for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+  * [[VUID-VkImageCreateInfo-sharingMode-01420]]
+    If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element
+    of pname:pQueueFamilyIndices must: be unique and must: be less than
+    pname:pQueueFamilyPropertyCount returned by either
+    flink:vkGetPhysicalDeviceQueueFamilyProperties or
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the
+    pname:physicalDevice that was used to create pname:device
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageCreateInfo-format-00943]]
+    pname:format must: not be ename:VK_FORMAT_UNDEFINED
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageCreateInfo-pNext-01974]]
+    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
+    structure, and its pname:externalFormat member is non-zero the
+    pname:format must: be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-VkImageCreateInfo-pNext-01975]]
+    If the pname:pNext chain does not include a
+    slink:VkExternalFormatANDROID structure, or does and its
+    pname:externalFormat member is `0`, the pname:format must: not be
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageCreateInfo-extent-00944]]
+    pname:extent.width must: be greater than `0`
+  * [[VUID-VkImageCreateInfo-extent-00945]]
+    pname:extent.height must: be greater than `0`
+  * [[VUID-VkImageCreateInfo-extent-00946]]
+    pname:extent.depth must: be greater than `0`
+  * [[VUID-VkImageCreateInfo-mipLevels-00947]]
+    pname:mipLevels must: be greater than `0`
+  * [[VUID-VkImageCreateInfo-arrayLayers-00948]]
+    pname:arrayLayers must: be greater than `0`
+  * [[VUID-VkImageCreateInfo-flags-00949]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-flags-08865]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
+    pname:extent.width and pname:extent.height must: be equal
+  * [[VUID-VkImageCreateInfo-flags-08866]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
+    pname:arrayLayers must: be greater than or equal to 6
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageCreateInfo-flags-02557]]
+    If pname:flags contains
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:imageType must:
+    be ename:VK_IMAGE_TYPE_2D
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkImageCreateInfo-flags-00950]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_3D
+  * [[VUID-VkImageCreateInfo-flags-09403]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
+    pname:flags must: not include ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, or
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageCreateInfo-flags-07755]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT, pname:imageType must:
+    be ename:VK_IMAGE_TYPE_3D
+endif::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageCreateInfo-extent-02252]]
+    pname:extent.width must: be less than or equal to
+    pname:imageCreateMaxExtent.width (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-extent-02253]]
+    pname:extent.height must: be less than or equal to
+    pname:imageCreateMaxExtent.height (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-extent-02254]]
+    pname:extent.depth must: be less than or equal to
+    pname:imageCreateMaxExtent.depth (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-imageType-00956]]
+    If pname:imageType is ename:VK_IMAGE_TYPE_1D, both pname:extent.height
+    and pname:extent.depth must: be `1`
+  * [[VUID-VkImageCreateInfo-imageType-00957]]
+    If pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.depth must:
+    be `1`
+  * [[VUID-VkImageCreateInfo-mipLevels-00958]]
+    pname:mipLevels must: be less than or equal to the number of levels in
+    the complete mipmap chain based on [eq]#pname:extent.width#,
+    [eq]#pname:extent.height#, and [eq]#pname:extent.depth#
+  * [[VUID-VkImageCreateInfo-mipLevels-02255]]
+    pname:mipLevels must: be less than or equal to
+    pname:imageCreateMaxMipLevels (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-arrayLayers-02256]]
+    pname:arrayLayers must: be less than or equal to
+    pname:imageCreateMaxArrayLayers (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-imageType-00961]]
+    If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:arrayLayers must: be
+    `1`
+  * [[VUID-VkImageCreateInfo-samples-02257]]
+    If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, then
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D, pname:flags must: not
+    contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:mipLevels must:
+    be equal to `1`, and pname:imageCreateMaybeLinear (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) must: be
+    ename:VK_FALSE,
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageCreateInfo-samples-02558]]
+    If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, pname:usage must:
+    not contain ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageCreateInfo-usage-00963]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
+    then bits other than ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT must: not be set
+  * [[VUID-VkImageCreateInfo-usage-00964]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
+  * [[VUID-VkImageCreateInfo-usage-00965]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
+ifdef::VK_EXT_fragment_density_map[]
+ifndef::VK_QCOM_fragment_density_map_offset[]
+  * [[VUID-VkImageCreateInfo-usage-02559]]
+    If pname:usage includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:extent.width
+    must: be less than or equal to
+    latexmath:[\left\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkImageCreateInfo-usage-02560]]
+    If pname:usage includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, pname:extent.height
+    must: be less than or equal to
+    latexmath:[\left\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\right\rceil]
+endif::VK_QCOM_fragment_density_map_offset[]
+ifdef::VK_QCOM_fragment_density_map_offset[]
+  * [[VUID-VkImageCreateInfo-fragmentDensityMapOffset-06514]]
+    If the <<features-fragmentDensityMapOffsets,
+    pname:fragmentDensityMapOffset>> feature is not enabled and pname:usage
+    includes ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
+    pname:extent.width must: be less than or equal to
+    latexmath:[\left\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkImageCreateInfo-fragmentDensityMapOffset-06515]]
+    If the <<features-fragmentDensityMapOffsets,
+    pname:fragmentDensityMapOffset>> feature is not enabled and pname:usage
+    includes ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
+    pname:extent.height must: be less than or equal to
+    latexmath:[\left\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\right\rceil]
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageCreateInfo-usage-00966]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
+    pname:usage must: also contain at least one of
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * [[VUID-VkImageCreateInfo-samples-02258]]
+    pname:samples must: be a bit value that is set in
+    pname:imageCreateSampleCounts (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>)
+  * [[VUID-VkImageCreateInfo-usage-00968]]
+    If the <<features-shaderStorageImageMultisample,
+    pname:shaderStorageImageMultisample>> feature is not enabled, and
+    pname:usage contains ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples
+    must: be ename:VK_SAMPLE_COUNT_1_BIT
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageCreateInfo-flags-00969]]
+    If the <<features-sparseBinding, pname:sparseBinding>> feature is not
+    enabled, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+  * [[VUID-VkImageCreateInfo-flags-01924]]
+    If the <<features-sparseResidencyAliased, pname:sparseResidencyAliased>>
+    feature is not enabled, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
+  * [[VUID-VkImageCreateInfo-tiling-04121]]
+    If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:flags must: not
+    contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00970]]
+    If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:flags must: not
+    contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00971]]
+    If the <<features-sparseResidencyImage2D, pname:sparseResidencyImage2D>>
+    feature is not enabled, and pname:imageType is ename:VK_IMAGE_TYPE_2D,
+    pname:flags must: not contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00972]]
+    If the <<features-sparseResidencyImage3D, pname:sparseResidencyImage3D>>
+    feature is not enabled, and pname:imageType is ename:VK_IMAGE_TYPE_3D,
+    pname:flags must: not contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00973]]
+    If the <<features-sparseResidency2Samples,
+    pname:sparseResidency2Samples>> feature is not enabled, pname:imageType
+    is ename:VK_IMAGE_TYPE_2D, and pname:samples is
+    ename:VK_SAMPLE_COUNT_2_BIT, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00974]]
+    If the <<features-sparseResidency4Samples,
+    pname:sparseResidency4Samples>> feature is not enabled, pname:imageType
+    is ename:VK_IMAGE_TYPE_2D, and pname:samples is
+    ename:VK_SAMPLE_COUNT_4_BIT, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00975]]
+    If the <<features-sparseResidency8Samples,
+    pname:sparseResidency8Samples>> feature is not enabled, pname:imageType
+    is ename:VK_IMAGE_TYPE_2D, and pname:samples is
+    ename:VK_SAMPLE_COUNT_8_BIT, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-imageType-00976]]
+    If the <<features-sparseResidency16Samples,
+    pname:sparseResidency16Samples>> feature is not enabled, pname:imageType
+    is ename:VK_IMAGE_TYPE_2D, and pname:samples is
+    ename:VK_SAMPLE_COUNT_16_BIT, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkImageCreateInfo-flags-00987]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+  * [[VUID-VkImageCreateInfo-None-01925]]
+    If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set,
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT must: not also be set
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageCreateInfo-flags-05062]]
+    pname:flags must: not contain ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, or
+    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkImageCreateInfo-flags-01890]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_PROTECTED_BIT
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageCreateInfo-None-01891]]
+    If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set,
+    ename:VK_IMAGE_CREATE_PROTECTED_BIT must: not also be set
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_NV_external_memory[]
+  * [[VUID-VkImageCreateInfo-pNext-00988]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfoNV structure, it must: not contain
+    a slink:VkExternalMemoryImageCreateInfo structure
+endif::VK_NV_external_memory[]
+  * [[VUID-VkImageCreateInfo-pNext-00990]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo structure, its pname:handleTypes
+    member must: only contain bits that are also in
+    slink:VkExternalImageFormatProperties::pname:externalMemoryProperties.compatibleHandleTypes,
+    as returned by flink:vkGetPhysicalDeviceImageFormatProperties2 with
+    pname:format, pname:imageType, pname:tiling, pname:usage, and
+    pname:flags equal to those in this structure, and with a
+    slink:VkPhysicalDeviceExternalImageFormatInfo structure included in the
+    pname:pNext chain, with a pname:handleType equal to any one of the
+    handle types specified in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
+  * [[VUID-VkImageCreateInfo-pNext-00991]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfoNV structure, its pname:handleTypes
+    member must: only contain bits that are also in
+    slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryProperties.compatibleHandleTypes,
+    as returned by flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV
+    with pname:format, pname:imageType, pname:tiling, pname:usage, and
+    pname:flags equal to those in this structure, and with
+    pname:externalHandleType equal to any one of the handle types specified
+    in slink:VkExternalMemoryImageCreateInfoNV::pname:handleTypes
+endif::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageCreateInfo-physicalDeviceCount-01421]]
+    If the logical device was created with
+    slink:VkDeviceGroupDeviceCreateInfo::pname:physicalDeviceCount equal to
+    1, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+  * [[VUID-VkImageCreateInfo-flags-02259]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, then
+    pname:mipLevels must: be one, pname:arrayLayers must: be one,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D.
+    and pname:imageCreateMaybeLinear (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) must: be
+    ename:VK_FALSE
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-VkImageCreateInfo-flags-01572]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then pname:format
+    must: be a <<compressed_image_formats,compressed image format>>
+  * [[VUID-VkImageCreateInfo-flags-01573]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then pname:flags
+    must: also contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-VkImageCreateInfo-initialLayout-00993]]
+    pname:initialLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
+  * [[VUID-VkImageCreateInfo-pNext-01443]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo or
+    sname:VkExternalMemoryImageCreateInfoNV structure whose
+    pname:handleTypes member is not `0`, pname:initialLayout must: be
+    ename:VK_IMAGE_LAYOUT_UNDEFINED
+endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageCreateInfo-format-06410]]
+    If the image pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>, pname:mipLevels must: be 1
+  * [[VUID-VkImageCreateInfo-format-06411]]
+    If the image pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>, pname:samples must: be
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkImageCreateInfo-format-06412]]
+    If the image pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>, pname:imageType must: be
+    ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260]]
+    If pname:format is a _multi-planar_ format, and if
+    pname:imageCreateFormatFeatures (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) does not
+    contain ename:VK_FORMAT_FEATURE_DISJOINT_BIT, then pname:flags must: not
+    contain ename:VK_IMAGE_CREATE_DISJOINT_BIT
+  * [[VUID-VkImageCreateInfo-format-01577]]
+    If pname:format is not a _multi-planar_ format, and pname:flags does not
+    include ename:VK_IMAGE_CREATE_ALIAS_BIT, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT
+  * [[VUID-VkImageCreateInfo-format-04712]]
+    If pname:format has a code:_422 or code:_420 suffix, pname:width must:
+    be a multiple of 2
+  * [[VUID-VkImageCreateInfo-format-04713]]
+    If pname:format has a code:_420 suffix, pname:height must: be a multiple
+    of 2
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageCreateInfo-tiling-02261]]
+    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+    the pname:pNext chain must: include exactly one of
+    slink:VkImageDrmFormatModifierListCreateInfoEXT or
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structures
+  * [[VUID-VkImageCreateInfo-pNext-02262]]
+    If the pname:pNext chain includes a
+    slink:VkImageDrmFormatModifierListCreateInfoEXT or
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then
+    pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+  * [[VUID-VkImageCreateInfo-tiling-02353]]
+    If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
+    pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the
+    pname:pNext chain must: include a slink:VkImageFormatListCreateInfo
+    structure with non-zero pname:viewFormatCount
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_EXT_sample_locations[]
+  * [[VUID-VkImageCreateInfo-flags-01533]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+    pname:format must: be a depth or depth/stencil format
+endif::VK_EXT_sample_locations[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageCreateInfo-pNext-02393]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
+    member includes
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-pNext-02394]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
+    member includes
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+    pname:mipLevels must: either be `1` or equal to the number of levels in
+    the complete mipmap chain based on [eq]#pname:extent.width#,
+    [eq]#pname:extent.height#, and [eq]#pname:extent.depth#
+  * [[VUID-VkImageCreateInfo-pNext-02396]]
+    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
+    structure whose pname:externalFormat member is not `0`, pname:flags
+    must: not include ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+  * [[VUID-VkImageCreateInfo-pNext-02397]]
+    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
+    structure whose pname:externalFormat member is not `0`, pname:usage
+    must: not include any usages except ename:VK_IMAGE_USAGE_SAMPLED_BIT
+  * [[VUID-VkImageCreateInfo-pNext-02398]]
+    If the pname:pNext chain includes a slink:VkExternalFormatANDROID
+    structure whose pname:externalFormat member is not `0`, pname:tiling
+    must: be ename:VK_IMAGE_TILING_OPTIMAL
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkImageCreateInfo-pNext-08951]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
+    member includes
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-pNext-08952]]
+    If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfo structure whose pname:handleTypes
+    member includes
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX,
+    pname:mipLevels must: either be `1` or equal to the number of levels in
+    the complete mipmap chain based on [eq]#pname:extent.width#,
+    [eq]#pname:extent.height#, and [eq]#pname:extent.depth#
+  * [[VUID-VkImageCreateInfo-pNext-08953]]
+    If the pname:pNext chain includes a slink:VkExternalFormatQNX structure
+    whose pname:externalFormat member is not `0`, pname:flags must: not
+    include ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+  * [[VUID-VkImageCreateInfo-pNext-08954]]
+    If the pname:pNext chain includes a slink:VkExternalFormatQNX structure
+    whose pname:externalFormat member is not `0`, pname:usage must: not
+    include any usages except ename:VK_IMAGE_USAGE_SAMPLED_BIT
+  * [[VUID-VkImageCreateInfo-pNext-08955]]
+    If the pname:pNext chain includes a slink:VkExternalFormatQNX structure
+    whose pname:externalFormat member is not `0`, pname:tiling must: be
+    ename:VK_IMAGE_TILING_OPTIMAL
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-VkImageCreateInfo-format-02795]]
+    If pname:format is a depth-stencil format, pname:usage includes
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pname:pNext
+    chain includes a slink:VkImageStencilUsageCreateInfo structure, then its
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
+    also include ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkImageCreateInfo-format-02796]]
+    If pname:format is a depth-stencil format, pname:usage does not include
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pname:pNext
+    chain includes a slink:VkImageStencilUsageCreateInfo structure, then its
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
+    also not include ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkImageCreateInfo-format-02797]]
+    If pname:format is a depth-stencil format, pname:usage includes
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pname:pNext chain
+    includes a slink:VkImageStencilUsageCreateInfo structure, then its
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
+    also include ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+  * [[VUID-VkImageCreateInfo-format-02798]]
+    If pname:format is a depth-stencil format, pname:usage does not include
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pname:pNext chain
+    includes a slink:VkImageStencilUsageCreateInfo structure, then its
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage member must:
+    also not include ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+  * [[VUID-VkImageCreateInfo-Format-02536]]
+    If pname:Format is a depth-stencil format and the pname:pNext chain
+    includes a slink:VkImageStencilUsageCreateInfo structure with its
+    pname:stencilUsage member including
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
+  * [[VUID-VkImageCreateInfo-format-02537]]
+    If pname:format is a depth-stencil format and the pname:pNext chain
+    includes a slink:VkImageStencilUsageCreateInfo structure with its
+    pname:stencilUsage member including
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be
+    less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
+  * [[VUID-VkImageCreateInfo-format-02538]]
+    If the <<features-shaderStorageImageMultisample,
+    pname:shaderStorageImageMultisample>> feature is not enabled,
+    pname:format is a depth-stencil format and the pname:pNext chain
+    includes a slink:VkImageStencilUsageCreateInfo structure with its
+    pname:stencilUsage including ename:VK_IMAGE_USAGE_STORAGE_BIT,
+    pname:samples must: be ename:VK_SAMPLE_COUNT_1_BIT
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+ifdef::VK_NV_corner_sampled_image[]
+  * [[VUID-VkImageCreateInfo-flags-02050]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D or
+    ename:VK_IMAGE_TYPE_3D
+  * [[VUID-VkImageCreateInfo-flags-02051]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, it
+    must: not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT and the
+    pname:format must: not be a depth/stencil format
+  * [[VUID-VkImageCreateInfo-flags-02052]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and
+    pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.width and
+    pname:extent.height must: be greater than `1`
+  * [[VUID-VkImageCreateInfo-flags-02053]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and
+    pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width,
+    pname:extent.height, and pname:extent.depth must: be greater than `1`
+endif::VK_NV_corner_sampled_image[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * [[VUID-VkImageCreateInfo-imageType-02082]]
+    If pname:usage includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-samples-02083]]
+    If pname:usage includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+    pname:samples must: be ename:VK_SAMPLE_COUNT_1_BIT
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-VkImageCreateInfo-shadingRateImage-07727]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled and pname:usage includes
+    ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, pname:tiling must: be
+    ename:VK_IMAGE_TILING_OPTIMAL
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageCreateInfo-flags-02565]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
+    pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL
+  * [[VUID-VkImageCreateInfo-flags-02566]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
+    pname:imageType must: be ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageCreateInfo-flags-02567]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
+    pname:flags must: not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
+  * [[VUID-VkImageCreateInfo-flags-02568]]
+    If pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
+    pname:mipLevels must: be `1`
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * [[VUID-VkImageCreateInfo-usage-04992]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI,
+    pname:tiling must: be ename:VK_IMAGE_TILING_LINEAR
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkImageCreateInfo-imageView2DOn3DImage-04459]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageView2DOn3DImage
+    is ename:VK_FALSE, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
+  * [[VUID-VkImageCreateInfo-multisampleArrayImage-04460]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:multisampleArrayImage
+    is ename:VK_FALSE, and pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT,
+    then pname:arrayLayers must: be `1`
+endif::VK_KHR_portability_subset[]
+ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
+  * [[VUID-VkImageCreateInfo-pNext-06722]]
+    If a slink:VkImageFormatListCreateInfo structure was included in the
+    pname:pNext chain and
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero,
+    then each format in
+    slink:VkImageFormatListCreateInfo::pname:pViewFormats must: either be
+    compatible with the pname:format as described in the
+    <<formats-compatibility,compatibility table>> or, if pname:flags
+    contains ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, be an
+    uncompressed format that is size-compatible with pname:format
+  * [[VUID-VkImageCreateInfo-flags-04738]]
+    If pname:flags does not contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+    and the pname:pNext chain includes a slink:VkImageFormatListCreateInfo
+    structure, then slink:VkImageFormatListCreateInfo::pname:viewFormatCount
+    must: be `0` or `1`
+endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkImageCreateInfo-usage-04815]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, or
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoProfileListInfoKHR structure with
+    pname:profileCount greater than `0` and pname:pProfiles including at
+    least one slink:VkVideoProfileInfoKHR structure with a
+    pname:videoCodecOperation member specifying a decode operation
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkImageCreateInfo-usage-04816]]
+    If pname:usage includes ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR, or
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoProfileListInfoKHR structure with
+    pname:profileCount greater than `0` and pname:pProfiles including at
+    least one slink:VkVideoProfileInfoKHR structure with a
+    pname:videoCodecOperation member specifying an encode operation
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_queue[]
+  * [[VUID-VkImageCreateInfo-pNext-06811]]
+    If the pname:pNext chain includes a slink:VkVideoProfileListInfoKHR
+    structure with pname:profileCount greater than `0`, then
+    pname:supportedVideoFormat must: be ename:VK_TRUE
+endif::VK_KHR_video_queue[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-VkImageCreateInfo-pNext-06390]]
+    If the slink:VkImage is to be used to import memory from a
+    slink:VkBufferCollectionFUCHSIA, a
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA structure must: be
+    chained to pname:pNext
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * [[VUID-VkImageCreateInfo-multisampledRenderToSingleSampled-06882]]
+    If the <<features-multisampledRenderToSingleSampled,
+    pname:multisampledRenderToSingleSampled>> feature is not enabled,
+    pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT
+  * [[VUID-VkImageCreateInfo-flags-06883]]
+    If pname:flags contains
+    ename:VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT,
+    pname:samples must: be ename:VK_SAMPLE_COUNT_1_BIT
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+ifdef::VK_EXT_image_compression_control[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageCreateInfo-pNext-06743]]
+    If the pname:pNext chain includes a slink:VkImageCompressionControlEXT
+    structure, pname:format is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format, and
+    slink:VkImageCompressionControlEXT::pname:flags includes
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then
+    slink:VkImageCompressionControlEXT::pname:compressionControlPlaneCount
+    must: be equal to the number of planes in pname:format
+  * [[VUID-VkImageCreateInfo-pNext-06744]]
+    If the pname:pNext chain includes a slink:VkImageCompressionControlEXT
+    structure, pname:format is not a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format, and
+    slink:VkImageCompressionControlEXT::pname:flags includes
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then
+    slink:VkImageCompressionControlEXT::pname:compressionControlPlaneCount
+    must: be 1
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageCreateInfo-pNext-06745]]
+    If the pname:pNext chain includes a slink:VkImageCompressionControlEXT
+    structure, and slink:VkImageCompressionControlEXT::pname:flags includes
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then
+    slink:VkImageCompressionControlEXT::pname:compressionControlPlaneCount
+    must: be 1
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageCreateInfo-pNext-06746]]
+    If the pname:pNext chain includes a slink:VkImageCompressionControlEXT
+    structure, it must: not contain a
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure
+endif::VK_EXT_image_drm_format_modifier[]
+endif::VK_EXT_image_compression_control[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkImageCreateInfo-flags-08104]]
+    If pname:flags includes
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the
+    <<features-descriptorBufferCaptureReplay,
+    pname:descriptorBufferCaptureReplay>> feature must: be enabled
+  * [[VUID-VkImageCreateInfo-pNext-08105]]
+    If the pname:pNext chain includes a
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, pname:flags
+    must: contain
+    ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkImageCreateInfo-pNext-06783]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be either
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT or
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT
+  * [[VUID-VkImageCreateInfo-pNext-06784]]
+    If the pname:pNext chain includes a slink:VkImportMetalTextureInfoEXT
+    structure its pname:plane member must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+  * [[VUID-VkImageCreateInfo-pNext-06785]]
+    If the pname:pNext chain includes a slink:VkImportMetalTextureInfoEXT
+    structure and the image does not have a multi-planar format, then
+    slink:VkImportMetalTextureInfoEXT::pname:plane must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT
+  * [[VUID-VkImageCreateInfo-pNext-06786]]
+    If the pname:pNext chain includes a slink:VkImportMetalTextureInfoEXT
+    structure and the image has a multi-planar format with only two planes,
+    then slink:VkImportMetalTextureInfoEXT::pname:plane must: not be
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_EXT_metal_objects[]
+ifdef::VK_EXT_host_image_copy[]
+  * [[VUID-VkImageCreateInfo-imageCreateFormatFeatures-09048]]
+    If pname:imageCreateFormatFeatures (as defined in
+    <<resources-image-creation-limits,Image Creation Limits>>) does not
+    contain ename:VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT, then
+    pname:usage must: not contain ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT
+endif::VK_EXT_host_image_copy[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkImageCreateInfo::pname:flags must: not contain any of the
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, or
+    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT flags <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkImageCreateInfo.adoc[]
+--
+
+ifdef::VK_FUCHSIA_buffer_collection[]
+[open,refpage='VkBufferCollectionImageCreateInfoFUCHSIA',desc='Create a VkBufferCollectionFUCHSIA-compatible VkImage',type='structs']
+--
+The sname:VkBufferCollectionImageCreateInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferCollectionImageCreateInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:index is the index of the buffer in the buffer collection from
+    which the memory will be imported
+
+.Valid Usage
+****
+  * [[VUID-VkBufferCollectionImageCreateInfoFUCHSIA-index-06391]]
+    pname:index must: be less than
+    slink:VkBufferCollectionPropertiesFUCHSIA::pname:bufferCount
+****
+
+include::{generated}/validity/structs/VkBufferCollectionImageCreateInfoFUCHSIA.adoc[]
+--
+endif::VK_FUCHSIA_buffer_collection[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+[open,refpage='VkImageStencilUsageCreateInfo',desc='Specify separate usage flags for the stencil aspect of a depth-stencil image',type='structs',alias='VkImageStencilUsageCreateInfoEXT']
+--
+The sname:VkImageStencilUsageCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkImageStencilUsageCreateInfo.adoc[]
+
+ifdef::VK_EXT_separate_stencil_usage[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageStencilUsageCreateInfoEXT.adoc[]
+endif::VK_EXT_separate_stencil_usage[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stencilUsage is a bitmask of elink:VkImageUsageFlagBits describing
+    the intended usage of the stencil aspect of the image.
+
+If the pname:pNext chain of slink:VkImageCreateInfo includes a
+sname:VkImageStencilUsageCreateInfo structure, then that structure includes
+the usage flags specific to the stencil aspect of the image for an image
+with a depth-stencil format.
+
+This structure specifies image usages which only apply to the stencil aspect
+of a depth/stencil format image.
+When this structure is included in the pname:pNext chain of
+slink:VkImageCreateInfo, the stencil aspect of the image must: only be used
+as specified by pname:stencilUsage.
+When this structure is not included in the pname:pNext chain of
+slink:VkImageCreateInfo, the stencil aspect of an image must: only be used
+as specified by slink:VkImageCreateInfo::pname:usage.
+Use of other aspects of an image are unaffected by this structure.
+
+This structure can: also be included in the pname:pNext chain of
+slink:VkPhysicalDeviceImageFormatInfo2 to query additional capabilities
+specific to image creation parameter combinations including a separate set
+of usage flags for the stencil aspect of the image using
+flink:vkGetPhysicalDeviceImageFormatProperties2.
+When this structure is not included in the pname:pNext chain of
+sname:VkPhysicalDeviceImageFormatInfo2 then the implicit value of
+pname:stencilUsage matches that of
+sname:VkPhysicalDeviceImageFormatInfo2::pname:usage.
+
+.Valid Usage
+****
+  * [[VUID-VkImageStencilUsageCreateInfo-stencilUsage-02539]]
+    If pname:stencilUsage includes
+    ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, it must: not include bits
+    other than ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+****
+
+include::{generated}/validity/structs/VkImageStencilUsageCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+
+ifdef::VK_NV_dedicated_allocation[]
+[open,refpage='VkDedicatedAllocationImageCreateInfoNV',desc='Specify that an image is bound to a dedicated memory resource',type='structs']
+--
+If the pname:pNext chain includes a
+sname:VkDedicatedAllocationImageCreateInfoNV structure, then that structure
+includes an enable controlling whether the image will have a dedicated
+memory allocation bound to it.
+
+The sname:VkDedicatedAllocationImageCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkDedicatedAllocationImageCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:dedicatedAllocation specifies whether the image will have a
+    dedicated allocation bound to it.
+
+[NOTE]
+.Note
+====
+Using a dedicated allocation for color and depth/stencil attachments or
+other large images may: improve performance on some devices.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994]]
+    If pname:dedicatedAllocation is ename:VK_TRUE,
+    slink:VkImageCreateInfo::pname:flags must: not include
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
+****
+
+include::{generated}/validity/structs/VkDedicatedAllocationImageCreateInfoNV.adoc[]
+--
+endif::VK_NV_dedicated_allocation[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+[open,refpage='VkExternalMemoryImageCreateInfo',desc='Specify that an image may be backed by external memory',type='structs']
+--
+To define a set of external memory handle types that may: be used as backing
+store for an image, add a slink:VkExternalMemoryImageCreateInfo structure to
+the pname:pNext chain of the slink:VkImageCreateInfo structure.
+The sname:VkExternalMemoryImageCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkExternalMemoryImageCreateInfo.adoc[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryImageCreateInfoKHR.adoc[]
+endif::VK_KHR_external_memory[]
+
+[NOTE]
+.Note
+====
+A sname:VkExternalMemoryImageCreateInfo structure with a non-zero
+pname:handleTypes field must be included in the creation parameters for an
+image that will be bound to memory that is either exported or imported.
+====
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is zero or a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBits specifying one or more external
+    memory handle types.
+
+include::{generated}/validity/structs/VkExternalMemoryImageCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_NV_external_memory[]
+[open,refpage='VkExternalMemoryImageCreateInfoNV',desc='Specify that an image may be backed by external memory',type='structs']
+--
+If the pname:pNext chain includes a sname:VkExternalMemoryImageCreateInfoNV
+structure, then that structure defines a set of external memory handle types
+that may: be used as backing store for the image.
+
+The sname:VkExternalMemoryImageCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExternalMemoryImageCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is zero or a bitmask of
+    elink:VkExternalMemoryHandleTypeFlagBitsNV specifying one or more
+    external memory handle types.
+
+include::{generated}/validity/structs/VkExternalMemoryImageCreateInfoNV.adoc[]
+--
+endif::VK_NV_external_memory[]
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+[open,refpage='VkExternalFormatANDROID',desc='Structure containing an Android hardware buffer external format',type='structs']
+--
+sname:VkExternalFormatANDROID is defined as:
+
+include::{generated}/api/structs/VkExternalFormatANDROID.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:externalFormat is an implementation-defined identifier for the
+    external format
+
+When included in the pname:pNext chain of another structure, it indicates
+<<memory-external-android-hardware-buffer-external-formats, additional
+format information>> beyond what is provided by ename:VkFormat values for an
+Android hardware buffer.
+If pname:externalFormat is zero, it indicates that no external format is
+used, and implementations should rely only on other format information.
+If this structure is not present, it is equivalent to setting
+pname:externalFormat to zero.
+
+.Valid Usage
+****
+  * [[VUID-VkExternalFormatANDROID-externalFormat-01894]]
+    pname:externalFormat must: be `0` or a value returned in the
+    pname:externalFormat member of
+    slink:VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call
+    to flink:vkGetAndroidHardwareBufferPropertiesANDROID
+****
+
+include::{generated}/validity/structs/VkExternalFormatANDROID.adoc[]
+--
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+ifdef::VK_QNX_external_memory_screen_buffer[]
+[open,refpage='VkExternalFormatQNX',desc='Structure containing a QNX Screen buffer external format',type='structs']
+--
+To create an image with an
+<<memory-external-screen-buffer-external-formats,QNX Screen external
+format>>, add a sname:VkExternalFormatQNX structure in the pname:pNext chain
+of slink:VkImageCreateInfo.
+sname:VkExternalFormatQNX is defined as:
+
+include::{generated}/api/structs/VkExternalFormatQNX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:externalFormat is an implementation-defined identifier for the
+    external format
+
+If pname:externalFormat is zero, the effect is as if the
+sname:VkExternalFormatQNX structure was not present.
+Otherwise, the pname:image will have the specified external format.
+
+.Valid Usage
+****
+  * [[VUID-VkExternalFormatQNX-externalFormat-08956]]
+    pname:externalFormat must: be `0` or a value returned in the
+    pname:externalFormat member of slink:VkScreenBufferFormatPropertiesQNX
+    by an earlier call to flink:vkGetScreenBufferPropertiesQNX
+****
+
+include::{generated}/validity/structs/VkExternalFormatQNX.adoc[]
+--
+endif::VK_QNX_external_memory_screen_buffer[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_KHR_swapchain[]
+[open,refpage='VkImageSwapchainCreateInfoKHR',desc='Specify that an image will be bound to swapchain memory',type='structs']
+--
+If the pname:pNext chain of slink:VkImageCreateInfo includes a
+sname:VkImageSwapchainCreateInfoKHR structure, then that structure includes
+a swapchain handle indicating that the image will be bound to memory from
+that swapchain.
+
+The sname:VkImageSwapchainCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImageSwapchainCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchain is dlink:VK_NULL_HANDLE or a handle of a swapchain that
+    the image will be bound to.
+
+.Valid Usage
+****
+  * [[VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995]]
+    If pname:swapchain is not dlink:VK_NULL_HANDLE, the fields of
+    slink:VkImageCreateInfo must: match the
+    <<swapchain-wsi-image-create-info, implied image creation parameters>>
+    of the swapchain
+****
+
+include::{generated}/validity/structs/VkImageSwapchainCreateInfoKHR.adoc[]
+--
+endif::VK_KHR_swapchain[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
+[open,refpage='VkImageFormatListCreateInfo',desc='Specify that an image can: be used with a particular set of formats',type='structs',alias='VkImageFormatListCreateInfoKHR']
+--
+If the pname:pNext chain of slink:VkImageCreateInfo includes a
+sname:VkImageFormatListCreateInfo structure, then that structure contains a
+list of all formats that can: be used when creating views of this image.
+
+The sname:VkImageFormatListCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatListCreateInfo.adoc[]
+
+ifdef::VK_KHR_image_format_list[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageFormatListCreateInfoKHR.adoc[]
+endif::VK_KHR_image_format_list[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:viewFormatCount is the number of entries in the pname:pViewFormats
+    array.
+  * pname:pViewFormats is a pointer to an array of elink:VkFormat values
+    specifying all formats which can: be used when creating views of this
+    image.
+
+If pname:viewFormatCount is zero, pname:pViewFormats is ignored and the
+image is created as if the sname:VkImageFormatListCreateInfo structure were
+not included in the pname:pNext chain of slink:VkImageCreateInfo.
+
+include::{generated}/validity/structs/VkImageFormatListCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[open,refpage='VkImageDrmFormatModifierListCreateInfoEXT',desc='Specify that an image must be created with a DRM format modifier from the provided list',type='structs']
+--
+If the pname:pNext chain of slink:VkImageCreateInfo includes a
+slink:VkImageDrmFormatModifierListCreateInfoEXT structure, then the image
+will be created with one of the <<glossary-drm-format-modifier,Linux DRM
+format modifiers>> listed in the structure.
+The choice of modifier is implementation-dependent.
+
+The slink:VkImageDrmFormatModifierListCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageDrmFormatModifierListCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifierCount is the length of the
+    pname:pDrmFormatModifiers array.
+  * pname:pDrmFormatModifiers is a pointer to an array of _Linux DRM format
+    modifiers_.
+
+.Valid Usage
+****
+  * [[VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-02263]]
+    Each _modifier_ in pname:pDrmFormatModifiers must: be compatible with
+    the parameters in slink:VkImageCreateInfo and its pname:pNext chain, as
+    determined by querying slink:VkPhysicalDeviceImageFormatInfo2 extended
+    with slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+****
+
+include::{generated}/validity/structs/VkImageDrmFormatModifierListCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkImageDrmFormatModifierExplicitCreateInfoEXT',desc='Specify that an image be created with the provided DRM format modifier and explicit memory layout',type='structs']
+--
+If the pname:pNext chain of slink:VkImageCreateInfo includes a
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then the
+image will be created with the <<glossary-drm-format-modifier,Linux DRM
+format modifier>> and memory layout defined by the structure.
+
+The slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkImageDrmFormatModifierExplicitCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifier is the _Linux DRM format modifier_ with which
+    the image will be created.
+  * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in
+    the image (as reported by slink:VkDrmFormatModifierPropertiesEXT) as
+    well as the length of the pname:pPlaneLayouts array.
+  * pname:pPlaneLayouts is a pointer to an array of
+    slink:VkSubresourceLayout structures describing the image's _memory
+    planes_.
+
+The etext:i^th^ member of pname:pPlaneLayouts describes the layout of the
+image's etext:i^th^ _memory plane_ (that is,
+`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT`).
+In each element of pname:pPlaneLayouts, the implementation must: ignore
+pname:size.
+The implementation calculates the size of each plane, which the application
+can: query with flink:vkGetImageSubresourceLayout.
+
+When creating an image with
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, it is the application's
+responsibility to satisfy all valid usage requirements.
+However, the implementation must: validate that the provided
+pname:pPlaneLayouts, when combined with the provided pname:drmFormatModifier
+and other creation parameters in slink:VkImageCreateInfo and its pname:pNext
+chain, produce a valid image.
+(This validation is necessarily implementation-dependent and outside the
+scope of Vulkan, and therefore not described by valid usage requirements).
+If this validation fails, then flink:vkCreateImage returns
+ename:VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT.
+
+.Valid Usage
+****
+  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264]]
+    pname:drmFormatModifier must: be compatible with the parameters in
+    slink:VkImageCreateInfo and its pname:pNext chain, as determined by
+    querying slink:VkPhysicalDeviceImageFormatInfo2 extended with
+    slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265]]
+    pname:drmFormatModifierPlaneCount must: be equal to the
+    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+    associated with slink:VkImageCreateInfo::pname:format and
+    pname:drmFormatModifier, as found by querying
+    slink:VkDrmFormatModifierPropertiesListEXT
+  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267]]
+    For each element of pname:pPlaneLayouts, pname:size must: be 0
+  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268]]
+    For each element of pname:pPlaneLayouts, pname:arrayPitch must: be 0 if
+    slink:VkImageCreateInfo::pname:arrayLayers is 1
+  * [[VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269]]
+    For each element of pname:pPlaneLayouts, pname:depthPitch must: be 0 if
+    slink:VkImageCreateInfo::pname:extent.depth is 1
+****
+
+include::{generated}/validity/structs/VkImageDrmFormatModifierExplicitCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_EXT_image_compression_control[]
+[open,refpage='VkImageCompressionControlEXT',desc='Specify image compression properties',type='structs']
+--
+If the pname:pNext list of slink:VkImageCreateInfo includes a
+sname:VkImageCompressionControlEXT structure, then that structure describes
+compression controls for this image.
+
+The sname:VkImageCompressionControlEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageCompressionControlEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkImageCompressionFlagBitsEXT
+    describing compression controls for the image.
+  * pname:compressionControlPlaneCount is the number of entries in the
+    pname:pFixedRateFlags array.
+  * pname:pFixedRateFlags is `NULL` or a pointer to an array of
+    tlink:VkImageCompressionFixedRateFlagsEXT bitfields describing allowed
+    fixed-rate compression rates of each image plane.
+    It is ignored if pname:flags does not include
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT.
+
+If enabled, fixed-rate compression is done in an implementation-defined
+manner and may: be applied at block granularity.
+In that case, a write to an individual texel may: modify the value of other
+texels in the same block.
+
+.Valid Usage
+****
+  * [[VUID-VkImageCompressionControlEXT-flags-06747]]
+    pname:flags must: be one of ename:VK_IMAGE_COMPRESSION_DEFAULT_EXT,
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT,
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, or
+    ename:VK_IMAGE_COMPRESSION_DISABLED_EXT
+  * [[VUID-VkImageCompressionControlEXT-flags-06748]]
+    If pname:flags includes
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT,
+    pname:pFixedRateFlags must: not be `NULL`
+****
+
+include::{generated}/validity/structs/VkImageCompressionControlEXT.adoc[]
+
+[NOTE]
+.Note
+====
+Some combinations of compression properties may not be supported.
+For example, some implementations may not support different fixed-rate
+compression rates per plane of a multi-planar format and will not be able to
+enable fixed-rate compression for any plane if the requested rates differ.
+====
+--
+
+[open,refpage='VkImageCompressionFlagBitsEXT',desc='Bitmask specifying image compression controls',type='enums']
+--
+Possible values of slink:VkImageCompressionControlEXT::pname:flags,
+specifying compression controls for an image, are:
+
+include::{generated}/api/enums/VkImageCompressionFlagBitsEXT.adoc[]
+
+  * ename:VK_IMAGE_COMPRESSION_DEFAULT_EXT specifies that the default image
+    compression setting is used.
+    Implementations must: not apply fixed-rate compression.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT specifies that the
+    implementation may: choose any supported fixed-rate compression setting
+    in an implementation-defined manner based on the properties of the
+    image.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT specifies that
+    fixed-rate compression may: be used and that the allowed compression
+    rates are specified by
+    slink:VkImageCompressionControlEXT::pname:pFixedRateFlags.
+  * ename:VK_IMAGE_COMPRESSION_DISABLED_EXT specifies that all lossless and
+    fixed-rate compression should: be disabled.
+
+If slink:VkImageCompressionControlEXT::pname:flags is
+ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then the etext:i^th^
+member of the pname:pFixedRateFlags array specifies the allowed compression
+rates for the image's etext:i^th^ plane.
+
+[NOTE]
+.Note
+====
+If ename:VK_IMAGE_COMPRESSION_DISABLED_EXT is included in
+slink:VkImageCompressionControlEXT::pname:flags, both lossless and
+fixed-rate compression will be disabled.
+This is likely to have a negative impact on performance and is only intended
+to be used for debugging purposes.
+====
+--
+
+[open,refpage='VkImageCompressionFlagsEXT',desc='Bitmask of VkImageCompressionFlagBitsEXT', type='flags']
+--
+include::{generated}/api/flags/VkImageCompressionFlagsEXT.adoc[]
+
+tname:VkImageCompressionFlagsEXT is a bitmask type for setting a mask of
+zero or more elink:VkImageCompressionFlagBitsEXT.
+--
+
+[open,refpage='VkImageCompressionFixedRateFlagsEXT',desc='Bitmask of VkImageCompressionFixedRateFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkImageCompressionFixedRateFlagsEXT.adoc[]
+
+tname:VkImageCompressionFixedRateFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkImageCompressionFixedRateFlagBitsEXT.
+--
+
+[open,refpage='VkImageCompressionFixedRateFlagBitsEXT',desc='Bitmask specifying fixed rate image compression rates',type='enums']
+--
+Bits which can: be set in
+slink:VkImageCompressionControlEXT::pname:pFixedRateFlags, specifying
+allowed compression rates for an image plane, are:
+
+include::{generated}/api/enums/VkImageCompressionFixedRateFlagBitsEXT.adoc[]
+
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT specifies that fixed-rate
+    compression must: not be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[1,2)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[2,3)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[3,4)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[4,5)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[5,6)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[6,7)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[7,8)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[8,9)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[9,10)# bits per component
+    may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[10,11)# bits per
+    component may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of [eq]#[11,12)# bits per
+    component may: be used.
+  * ename:VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT specifies that
+    fixed-rate compression with a bitrate of at least 12 bits per component
+    may: be used.
+
+If the format has a different bit rate for different components,
+slink:VkImageCompressionControlEXT::pname:pFixedRateFlags describes the rate
+of the component with the largest number of bits assigned to it, scaled pro
+rata.
+For example, to request that a ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32
+format be stored at a rate of 8 bits per pixel, use
+ename:VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT (10 bits for the largest
+component, stored at quarter the original size, 2.5 bits, rounded down).
+
+If pname:flags includes ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT,
+and multiple bits are set in
+slink:VkImageCompressionControlEXT::pname:pFixedRateFlags for a plane,
+implementations should: apply the lowest allowed bitrate that is supported.
+
+[NOTE]
+.Note
+====
+The choice of "`bits per component`" terminology was chosen so that the same
+compression rate describes the same degree of compression applied to formats
+that differ only in the number of components.
+For example, ename:VK_FORMAT_R8G8_UNORM compressed to half its original size
+is a rate of 4 bits per component, 8 bits per pixel.
+ename:VK_FORMAT_R8G8B8A8_UNORM compressed to half _its_ original size is 4
+bits per component, 16 bits per pixel.
+Both of these cases can be requested with
+ename:VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT.
+====
+--
+
+[open,refpage='VkImageCompressionPropertiesEXT',desc='Compression properties of an image',type='structs']
+--
+To query the compression properties of an image, add a
+slink:VkImageCompressionPropertiesEXT structure to the pname:pNext chain of
+the slink:VkSubresourceLayout2EXT structure in a call to
+ifdef::VK_KHR_maintenance5[flink:vkGetImageSubresourceLayout2KHR or]
+flink:vkGetImageSubresourceLayout2EXT.
+
+To determine the compression rates that are supported for a given image
+format, add a slink:VkImageCompressionPropertiesEXT structure to the
+pname:pNext chain of the slink:VkImageFormatProperties2 structure in a call
+to flink:vkGetPhysicalDeviceImageFormatProperties2.
+
+[NOTE]
+.Note
+====
+Since fixed-rate compression is disabled by default, the
+slink:VkImageCompressionPropertiesEXT structure passed to
+flink:vkGetPhysicalDeviceImageFormatProperties2 will not indicate any
+fixed-rate compression support unless a slink:VkImageCompressionControlEXT
+structure is also included in the pname:pNext chain of the
+slink:VkPhysicalDeviceImageFormatInfo2 structure passed to the same command.
+====
+
+The sname:VkImageCompressionPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageCompressionPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageCompressionFlags returns a value describing the compression
+    controls that apply to the image.
+    The value will be either ename:VK_IMAGE_COMPRESSION_DEFAULT_EXT to
+    indicate no fixed-rate compression,
+    ename:VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT to indicate
+    fixed-rate compression, or ename:VK_IMAGE_COMPRESSION_DISABLED_EXT to
+    indicate no compression.
+  * pname:imageCompressionFixedRateFlags returns a
+    tlink:VkImageCompressionFixedRateFlagsEXT value describing the
+    compression rates that apply to the specified aspect of the image.
+
+include::{generated}/validity/structs/VkImageCompressionPropertiesEXT.adoc[]
+--
+endif::VK_EXT_image_compression_control[]
+
+[open,refpage='VkImageUsageFlagBits',desc='Bitmask specifying intended usage of an image',type='enums']
+--
+Bits which can: be set in
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * slink:VkImageViewUsageCreateInfo::pname:usage
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * slink:VkImageCreateInfo::pname:usage
+
+specify intended usage of an image, and are:
+
+include::{generated}/api/enums/VkImageUsageFlagBits.adoc[]
+
+  * ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT specifies that the image can: be
+    used as the source of a transfer command.
+  * ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT specifies that the image can: be
+    used as the destination of a transfer command.
+  * ename:VK_IMAGE_USAGE_SAMPLED_BIT specifies that the image can: be used
+    to create a sname:VkImageView suitable for occupying a
+    sname:VkDescriptorSet slot either of type
+    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and be sampled by a
+    shader.
+  * ename:VK_IMAGE_USAGE_STORAGE_BIT specifies that the image can: be used
+    to create a sname:VkImageView suitable for occupying a
+    sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
+  * ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT specifies that the image can:
+    be used to create a sname:VkImageView suitable for use as a color or
+    resolve attachment in a sname:VkFramebuffer.
+  * ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that the
+    image can: be used to create a sname:VkImageView suitable for use as a
+    depth/stencil
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    or depth/stencil resolve
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    attachment in a sname:VkFramebuffer.
+  * ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT specifies that
+    implementations may: support using <<memory, memory allocations>> with
+    the ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT to back an image with
+    this usage.
+    This bit can: be set for any image that can: be used to create a
+    sname:VkImageView suitable for use as a color, resolve, depth/stencil,
+    or input attachment.
+  * ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT specifies that the image can:
+    be used to create a sname:VkImageView suitable for occupying
+    sname:VkDescriptorSet slot of type
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; be read from a shader as an
+    input attachment; and be used as an input attachment in a framebuffer.
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that the
+    image can: be used to create a sname:VkImageView suitable for use as a
+    <<fragmentdensitymapops, fragment density map image>>.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR specifies
+    that the image can: be used to create a sname:VkImageView suitable for
+    use as a
+ifdef::VK_KHR_fragment_shading_rate[]
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
+ifdef::VK_NV_shading_rate_image[]
+    <<primsrast-shading-rate-image, shading rate image>>
+endif::VK_NV_shading_rate_image[]
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR specifies that the image
+    can: be used as a <<decode-output-picture,decode output picture>> in a
+    <<video-decode-operations,video decode operation>>.
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR is reserved for future
+    use.
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR specifies that the image
+    can: be used as an output <<reconstructed-picture,reconstructed
+    picture>> or an input <<reference-picture,reference picture>> in a
+    <<video-decode-operations,video decode operation>>.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR is reserved for future
+    use.
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR specifies that the image
+    can: be used as an <<encode-input-picture,encode input picture>> in a
+    <<video-encode-operations,video encode operation>>.
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR specifies that the image
+    can: be used as an output <<reconstructed-picture,reconstructed
+    picture>> or an input <<reference-picture,reference picture>> in a
+    <<video-encode-operations,video encode operation>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT specifies that the
+    image can: be transitioned to the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout to be
+    used as a color or depth/stencil attachment in a sname:VkFramebuffer
+    and/or as a read-only input resource in a shader (sampled image,
+    combined image sampler or input attachment) in the same render pass.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+ifdef::VK_EXT_host_image_copy[]
+  * ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT specifies that the image can:
+    be used with host copy commands and host layout transitions.
+endif::VK_EXT_host_image_copy[]
+--
+
+[open,refpage='VkImageUsageFlags',desc='Bitmask of VkImageUsageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkImageUsageFlags.adoc[]
+
+tname:VkImageUsageFlags is a bitmask type for setting a mask of zero or more
+elink:VkImageUsageFlagBits.
+
+[[valid-imageview-imageusage]]
+When creating a sname:VkImageView one of the following
+elink:VkImageUsageFlagBits must: be set:
+
+  * ename:VK_IMAGE_USAGE_SAMPLED_BIT
+  * ename:VK_IMAGE_USAGE_STORAGE_BIT
+  * ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  * ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  * ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+  * ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_QCOM_image_processing[]
+  * ename:VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM
+  * ename:VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM
+endif::VK_QCOM_image_processing[]
+--
+
+[open,refpage='VkImageCreateFlagBits',desc='Bitmask specifying additional parameters of an image',type='enums']
+--
+Bits which can: be set in slink:VkImageCreateInfo::pname:flags, specifying
+additional parameters of an image, are:
+
+include::{generated}/api/enums/VkImageCreateFlagBits.adoc[]
+
+  * ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT specifies that the image will
+    be backed using sparse memory binding.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT specifies that the image can:
+    be partially backed using sparse memory binding.
+    Images created with this flag must: also be created with the
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT specifies that the image will
+    be backed using sparse memory binding with memory ranges that might also
+    simultaneously be backing another image (or another portion of the same
+    image).
+    Images created with this flag must: also be created with the
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+  * ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT specifies that the image can:
+    be used to create a sname:VkImageView with a different format from the
+    image.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    For <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> formats,
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT specifies that a
+    sname:VkImageView can be created of a _plane_ of the image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT specifies that the image can:
+    be used to create a sname:VkImageView of type
+    ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT specifies that the image
+    can: be used to create a sname:VkImageView of type
+    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT specifies that the
+    image can: be used to create a sname:VkImageView of type
+    ename:VK_IMAGE_VIEW_TYPE_2D.
+endif::VK_EXT_image_2d_view_of_3d[]
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_IMAGE_CREATE_PROTECTED_BIT specifies that the image is a
+    protected image.
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT specifies that the
+    image can: be used with a non-zero value of the
+    pname:splitInstanceBindRegionCount member of a
+    slink:VkBindImageMemoryDeviceGroupInfo structure passed into
+    flink:vkBindImageMemory2.
+    This flag also has the effect of making the image use the standard
+    sparse image block dimensions.
+ifdef::VKSC_VERSION_1_0[]
+    This flag is not supported in Vulkan SC <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT specifies that the
+    image having a compressed format can: be used to create a
+    sname:VkImageView with an uncompressed format where each texel in the
+    image view corresponds to a compressed texel block of the image.
+  * ename:VK_IMAGE_CREATE_EXTENDED_USAGE_BIT specifies that the image can:
+    be created with usage flags that are not supported for the format the
+    image is created with but are supported for at least one format a
+    sname:VkImageView created from the image can: have.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_IMAGE_CREATE_DISJOINT_BIT specifies that an image with a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> must:
+    have each plane separately bound to memory, rather than having a single
+    memory binding for the whole image; the presence of this bit
+    distinguishes a _disjoint image_ from an image without this bit set.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+  * ename:VK_IMAGE_CREATE_ALIAS_BIT specifies that two images created with
+    the same creation parameters and aliased to the same memory can:
+    interpret the contents of the memory consistently with each other,
+    subject to the rules described in the <<resources-memory-aliasing,Memory
+    Aliasing>> section.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    This flag further specifies that each plane of a _disjoint_ image can:
+    share an in-memory non-linear representation with single-plane images,
+    and that a single-plane image can: share an in-memory non-linear
+    representation with a plane of a multi-planar disjoint image, according
+    to the rules in <<formats-compatible-planes>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
+    If the pname:pNext chain includes a
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[slink:VkExternalMemoryImageCreateInfo]
+// Jon: logic needs to incorporate VK_VERSION_1_1
+ifdef::VK_KHR_external_memory+VK_NV_external_memory[or]
+ifdef::VK_NV_external_memory[slink:VkExternalMemoryImageCreateInfoNV]
+    structure whose pname:handleTypes member is not `0`, it is as if
+    ename:VK_IMAGE_CREATE_ALIAS_BIT is set.
+endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_NV_external_memory[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+ifdef::VK_EXT_sample_locations[]
+  * ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+    specifies that an image with a depth or depth/stencil format can: be
+    used with custom sample locations when used as a depth/stencil
+    attachment.
+endif::VK_EXT_sample_locations[]
+ifdef::VK_NV_corner_sampled_image[]
+  * ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV specifies that the image is
+    a <<resources-images-corner-sampled,corner-sampled image>>.
+endif::VK_NV_corner_sampled_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT specifies that an image can: be
+    in a subsampled format which may: be more optimal when written as an
+    attachment by a render pass that has a fragment density map attachment.
+    Accessing a subsampled image has additional considerations:
+  ** Image data read as an image sampler will have undefined: values if the
+     sampler was not created with pname:flags containing
+     ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT or was not sampled through
+     the use of a combined image sampler with an immutable sampler in
+     sname:VkDescriptorSetLayoutBinding.
+  ** Image data read with an input attachment will have undefined: values if
+     the contents were not written as an attachment in an earlier subpass of
+     the same render pass.
+ifdef::VK_EXT_fragment_density_map2[]
+  ** Image data read as an image sampler in the fragment shader will be
+     additionally be read by the device during
+     ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT if
+     <<limits-subsampledCoarseReconstructionEarlyAccess,
+     sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:subsampledCoarseReconstructionEarlyAccess>>
+     is ename:VK_TRUE and the sampler was created with pname:flags
+     containing
+     ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT.
+  ** Image data read with load operations are resampled to the fragment
+     density of the render pass if <<limits-subsampledLoads,
+     sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:subsampledLoads>>
+     is ename:VK_TRUE.
+     Otherwise, values of image data are undefined:.
+endif::VK_EXT_fragment_density_map2[]
+ifndef::VK_EXT_fragment_density_map2[]
+  ** Image data read with load operations may: be resampled to the fragment
+     density of the render pass.
+endif::VK_EXT_fragment_density_map2[]
+  ** Image contents outside of the render area take on undefined: values if
+     the image is stored as a render pass attachment.
+ifdef::VK_QCOM_fragment_density_map_offset[]
+  * ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM specifies
+    that an image can: be used in a render pass with non-zero
+    <<renderpass-fragmentdensitymapoffsets,fragment density map offsets>>.
+    In a render pass with non-zero offsets, fragment density map
+    attachments, input attachments, color attachments, depth/stencil
+    attachment, resolve attachments, and preserve attachments must: be
+    created with ename:VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM.
+endif::VK_QCOM_fragment_density_map_offset[]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT specifies
+    that the image can: be used with descriptor buffers when capturing and
+    replaying (e.g. for trace capture and replay), see
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT for more detail.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  * ename:VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT
+    specifies that an image can: be used with
+    <<multisampled-render-to-single-sampled,multisampled rendering as a
+    single-sampled framebuffer attachment>>
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+
+See <<sparsememory-sparseresourcefeatures,Sparse Resource Features>> and
+<<sparsememory-physicalfeatures,Sparse Physical Device Features>> for more
+details.
+--
+
+[open,refpage='VkImageCreateFlags',desc='Bitmask of VkImageCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkImageCreateFlags.adoc[]
+
+tname:VkImageCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkImageCreateFlagBits.
+--
+
+[open,refpage='VkImageType',desc='Specifies the type of an image object',type='enums']
+--
+Possible values of slink:VkImageCreateInfo::pname:imageType, specifying the
+basic dimensionality of an image, are:
+
+include::{generated}/api/enums/VkImageType.adoc[]
+
+  * ename:VK_IMAGE_TYPE_1D specifies a one-dimensional image.
+  * ename:VK_IMAGE_TYPE_2D specifies a two-dimensional image.
+  * ename:VK_IMAGE_TYPE_3D specifies a three-dimensional image.
+--
+
+[open,refpage='VkImageTiling',desc='Specifies the tiling arrangement of data in an image',type='enums']
+--
+Possible values of slink:VkImageCreateInfo::pname:tiling, specifying the
+tiling arrangement of texel blocks in an image, are:
+
+include::{generated}/api/enums/VkImageTiling.adoc[]
+
+  * ename:VK_IMAGE_TILING_OPTIMAL specifies optimal tiling (texels are laid
+    out in an implementation-dependent arrangement, for more efficient
+    memory access).
+  * ename:VK_IMAGE_TILING_LINEAR specifies linear tiling (texels are laid
+    out in memory in row-major order, possibly with some padding on each
+    row).
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT indicates that the image's
+    tiling is defined by a <<glossary-drm-format-modifier,Linux DRM format
+    modifier>>.
+    The modifier is specified at image creation with
+    slink:VkImageDrmFormatModifierListCreateInfoEXT or
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, and can: be queried
+    with flink:vkGetImageDrmFormatModifierPropertiesEXT.
+endif::VK_EXT_image_drm_format_modifier[]
+--
+
+[open,refpage='vkGetImageSubresourceLayout',desc='Retrieve information about an image subresource',type='protos']
+--
+:refpage: vkGetImageSubresourceLayout
+
+To query the memory layout of an image subresource, call:
+
+include::{generated}/api/protos/vkGetImageSubresourceLayout.adoc[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:image is the image whose layout is being queried.
+  * pname:pSubresource is a pointer to a slink:VkImageSubresource structure
+    selecting a specific image subresource from the image.
+  * pname:pLayout is a pointer to a slink:VkSubresourceLayout structure in
+    which the layout is returned.
+
+ifndef::VK_EXT_image_drm_format_modifier[]
+The image must: be <<glossary-linear-resource,linear>>.
+The
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+If the image is <<glossary-linear-resource,linear>>, then the
+endif::VK_EXT_image_drm_format_modifier[]
+returned layout is valid for <<memory-device-hostaccess, host access>>.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If the image's
+ifdef::VK_EXT_image_drm_format_modifier[]
+tiling is ename:VK_IMAGE_TILING_LINEAR and its
+endif::VK_EXT_image_drm_format_modifier[]
+format is a <<formats-requiring-sampler-ycbcr-conversion,multi-planar
+format>>, then fname:vkGetImageSubresourceLayout describes one
+ifdef::VK_EXT_image_drm_format_modifier[_format plane_]
+ifndef::VK_EXT_image_drm_format_modifier[plane]
+of the image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+fname:vkGetImageSubresourceLayout describes one _memory plane_ of the image.
+If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and
+the image is <<glossary-linear-resource,non-linear>>, then the returned
+layout has an implementation-dependent meaning; the vendor of the image's
+<<glossary-drm-format-modifier,DRM format modifier>> may: provide
+documentation that explains how to interpret the returned layout.
+endif::VK_EXT_image_drm_format_modifier[]
+
+fname:vkGetImageSubresourceLayout is invariant for the lifetime of a single
+image.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+However, the subresource layout of images in Android hardware buffer or QNX
+Screen buffer external memory is not known until the image has been bound to
+memory, so applications must: not call flink:vkGetImageSubresourceLayout for
+such an image before it has been bound.
+endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[]
+
+.Valid Usage
+****
+ifndef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-vkGetImageSubresourceLayout-image-07789]]
+    pname:image must: have been created with pname:tiling equal to
+    ename:VK_IMAGE_TILING_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-vkGetImageSubresourceLayout-image-07790]]
+    pname:image must: have been created with pname:tiling equal to
+    ename:VK_IMAGE_TILING_LINEAR or
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+endif::VK_EXT_image_drm_format_modifier[]
+include::{chapters}/commonvalidity/get_image_subresource_layout_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetImageSubresourceLayout.adoc[]
+--
+
+[open,refpage='VkImageSubresource',desc='Structure specifying an image subresource',type='structs']
+--
+The sname:VkImageSubresource structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresource.adoc[]
+
+  * pname:aspectMask is a tlink:VkImageAspectFlags value selecting the image
+    _aspect_.
+  * pname:mipLevel selects the mipmap level.
+  * pname:arrayLayer selects the array layer.
+
+include::{generated}/validity/structs/VkImageSubresource.adoc[]
+--
+
+[open,refpage='VkSubresourceLayout',desc='Structure specifying subresource layout',type='structs']
+--
+Information about the layout of the image subresource is returned in a
+sname:VkSubresourceLayout structure:
+
+include::{generated}/api/structs/VkSubresourceLayout.adoc[]
+
+  * pname:offset is the byte offset from the start of the image
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    or the plane
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    where the image subresource begins.
+  * pname:size is the size in bytes of the image subresource.
+    pname:size includes any extra memory that is required based on
+    pname:rowPitch.
+  * pname:rowPitch describes the number of bytes between each row of texels
+    in an image.
+  * pname:arrayPitch describes the number of bytes between each array layer
+    of an image.
+  * pname:depthPitch describes the number of bytes between each slice of 3D
+    image.
+
+If the image is <<glossary-linear-resource,linear>>, then pname:rowPitch,
+pname:arrayPitch and pname:depthPitch describe the layout of the image
+subresource in linear memory.
+For uncompressed formats, pname:rowPitch is the number of bytes between
+texels with the same x coordinate in adjacent rows (y coordinates differ by
+one).
+pname:arrayPitch is the number of bytes between texels with the same x and y
+coordinate in adjacent array layers of the image (array layer values differ
+by one).
+pname:depthPitch is the number of bytes between texels with the same x and y
+coordinate in adjacent slices of a 3D image (z coordinates differ by one).
+Expressed as an addressing formula, the starting byte of a texel in the
+image subresource has address:
+
+[source,c]
+----
+// (x,y,z,layer) are in texel coordinates
+address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*elementSize + offset
+----
+
+For compressed formats, the pname:rowPitch is the number of bytes between
+compressed texel blocks in adjacent rows.
+pname:arrayPitch is the number of bytes between compressed texel blocks in
+adjacent array layers.
+pname:depthPitch is the number of bytes between compressed texel blocks in
+adjacent slices of a 3D image.
+
+[source,c]
+----
+// (x,y,z,layer) are in compressed texel block coordinates
+address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*compressedTexelBlockByteSize + offset;
+----
+
+The value of pname:arrayPitch is undefined: for images that were not created
+as arrays.
+pname:depthPitch is defined only for 3D images.
+
+If the image has a
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+_single-plane_
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+color format
+ifdef::VK_EXT_image_drm_format_modifier[]
+and its tiling is ename:VK_IMAGE_TILING_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+, then the pname:aspectMask member of sname:VkImageSubresource must: be
+ename:VK_IMAGE_ASPECT_COLOR_BIT.
+
+If the image has a depth/stencil format
+ifdef::VK_EXT_image_drm_format_modifier[]
+and its tiling is ename:VK_IMAGE_TILING_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+, then pname:aspectMask must: be either ename:VK_IMAGE_ASPECT_DEPTH_BIT or
+ename:VK_IMAGE_ASPECT_STENCIL_BIT.
+On implementations that store depth and stencil aspects separately, querying
+each of these image subresource layouts will return a different pname:offset
+and pname:size representing the region of memory used for that aspect.
+On implementations that store depth and stencil aspects interleaved, the
+same pname:offset and pname:size are returned and represent the interleaved
+memory allocation.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If the image has a <<formats-requiring-sampler-ycbcr-conversion,multi-planar
+format>>
+ifdef::VK_EXT_image_drm_format_modifier[]
+and its tiling is ename:VK_IMAGE_TILING_LINEAR
+endif::VK_EXT_image_drm_format_modifier[]
+, then the pname:aspectMask member of sname:VkImageSubresource must: be
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+(for 3-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+Querying each of these image subresource layouts will return a different
+pname:offset and pname:size representing the region of memory used for that
+plane.
+If the image is _disjoint_, then the pname:offset is relative to the base
+address of the plane.
+If the image is _non-disjoint_, then the pname:offset is relative to the
+base address of the image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+If the image's tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then
+the pname:aspectMask member of sname:VkImageSubresource must: be one of
+`VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT`, where the maximum allowed
+plane index _i_ is defined by the
+slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+associated with the image's slink:VkImageCreateInfo::pname:format and
+<<glossary-drm-format-modifier,modifier>>.
+The memory range used by the subresource is described by pname:offset and
+pname:size.
+If the image is _disjoint_, then the pname:offset is relative to the base
+address of the _memory plane_.
+If the image is _non-disjoint_, then the pname:offset is relative to the
+base address of the image.
+If the image is <<glossary-linear-resource,non-linear>>, then
+pname:rowPitch, pname:arrayPitch, and pname:depthPitch have an
+implementation-dependent meaning.
+endif::VK_EXT_image_drm_format_modifier[]
+
+include::{generated}/validity/structs/VkSubresourceLayout.adoc[]
+--
+
+ifdef::VK_KHR_maintenance5,VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+[open,refpage='vkGetImageSubresourceLayout2KHR',desc='Retrieve information about an image subresource',type='protos']
+--
+:refpage: vkGetImageSubresourceLayout2KHR
+
+To query the memory layout of an image subresource, call:
+
+ifdef::VK_KHR_maintenance5[]
+include::{generated}/api/protos/vkGetImageSubresourceLayout2KHR.adoc[]
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_KHR_maintenance5[]
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[or the equivalent command]
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+include::{generated}/api/protos/vkGetImageSubresourceLayout2EXT.adoc[]
+endif::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:image is the image whose layout is being queried.
+  * pname:pSubresource is a pointer to a slink:VkImageSubresource2KHR
+    structure selecting a specific image for the image subresource.
+  * pname:pLayout is a pointer to a slink:VkSubresourceLayout2KHR structure
+    in which the layout is returned.
+
+fname:vkGetImageSubresourceLayout2KHR behaves similarly to
+flink:vkGetImageSubresourceLayout, with the ability to specify extended
+inputs via chained input structures, and to return extended information via
+chained output structures.
+
+It is legal to call fname:vkGetImageSubresourceLayout2KHR with a pname:image
+created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL, but the
+members of slink:VkSubresourceLayout2KHR::pname:subresourceLayout will have
+undefined: values in this case.
+
+[NOTE]
+.Note
+====
+Structures chained from slink:VkImageSubresource2KHR::pname:pNext will also
+be updated when pname:tiling is equal to ename:VK_IMAGE_TILING_OPTIMAL.
+====
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/get_image_subresource_layout_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkGetImageSubresourceLayout2KHR.adoc[]
+--
+
+[open,refpage='VkImageSubresource2KHR',desc='Structure specifying an image subresource',type='structs',alias='VkImageSubresource2EXT']
+--
+The sname:VkImageSubresource2KHR structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresource2KHR.adoc[]
+
+ifdef::VK_KHR_maintenance5[]
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[or the equivalent]
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+include::{generated}/api/structs/VkImageSubresource2EXT.adoc[]
+endif::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageSubresource is a slink:VkImageSubresource structure.
+
+include::{generated}/validity/structs/VkImageSubresource2KHR.adoc[]
+--
+
+[open,refpage='VkSubresourceLayout2KHR',desc='Structure specifying subresource layout',type='structs',alias='VkSubresourceLayout2EXT']
+--
+Information about the layout of the image subresource is returned in a
+sname:VkSubresourceLayout2KHR structure:
+
+ifdef::VK_KHR_maintenance5[]
+include::{generated}/api/structs/VkSubresourceLayout2KHR.adoc[]
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_KHR_maintenance5[]
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[or the equivalent]
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+
+ifndef::VK_KHR_maintenance5[]
+Information about the layout of the image subresource is returned in a
+sname:VkSubresourceLayout2EXT structure:
+endif::VK_KHR_maintenance5[]
+
+include::{generated}/api/structs/VkSubresourceLayout2EXT.adoc[]
+endif::VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:subresourceLayout is a slink:VkSubresourceLayout structure.
+
+include::{generated}/validity/structs/VkSubresourceLayout2KHR.adoc[]
+--
+
+ifdef::VK_EXT_host_image_copy[]
+[open,refpage='VkSubresourceHostMemcpySizeEXT',desc='Memory size needed to copy to or from an image on the host with VK_HOST_IMAGE_COPY_MEMCPY_EXT',type='structs']
+--
+To query the memory size needed to copy to or from an image using
+flink:vkCopyMemoryToImageEXT or flink:vkCopyImageToMemoryEXT when the
+ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT flag is specified, add a
+slink:VkSubresourceHostMemcpySizeEXT structure to the pname:pNext chain of
+the slink:VkSubresourceLayout2EXT structure in a call to
+flink:vkGetImageSubresourceLayout2EXT.
+
+The sname:VkSubresourceHostMemcpySizeEXT structure is defined as:
+
+include::{generated}/api/structs/VkSubresourceHostMemcpySizeEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:size is the size in bytes of the image subresource.
+
+include::{generated}/validity/structs/VkSubresourceHostMemcpySizeEXT.adoc[]
+--
+endif::VK_EXT_host_image_copy[]
+endif::VK_KHR_maintenance5,VK_EXT_image_compression_control,VK_EXT_host_image_copy[]
+
+ifdef::VK_KHR_maintenance5[]
+[open,refpage='vkGetDeviceImageSubresourceLayoutKHR',desc='Retrieve information about an image subresource without an image object',type='protos']
+--
+To query the memory layout of an image subresource, without an image object,
+call:
+
+include::{generated}/api/protos/vkGetDeviceImageSubresourceLayoutKHR.adoc[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:pInfo is a pointer to a slink:VkDeviceImageSubresourceInfoKHR
+    structure containing parameters required for the subresource layout
+    query.
+  * pname:pLayout is a pointer to a slink:VkSubresourceLayout2KHR structure
+    in which the layout is returned.
+
+fname:vkGetDeviceImageSubresourceLayoutKHR behaves similarly to
+flink:vkGetImageSubresourceLayout2KHR, but uses a slink:VkImageCreateInfo
+structure to specify the image rather than a slink:VkImage object.
+
+include::{generated}/validity/protos/vkGetDeviceImageSubresourceLayoutKHR.adoc[]
+--
+
+[open,refpage='VkDeviceImageSubresourceInfoKHR',desc='Image creation information for querying subresource layout',type='structs']
+--
+:refpage: VkDeviceImageSubresourceInfoKHR
+
+The sname:VkDeviceImageSubresourceInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceImageSubresourceInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pCreateInfo is a pointer to a slink:VkImageCreateInfo structure
+    containing parameters affecting creation of the image to query.
+  * pname:pSubresource pSubresource is a pointer to a
+    slink:VkImageSubresource2KHR structure selecting a specific image
+    subresource for the query.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/get_image_subresource_layout_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkDeviceImageSubresourceInfoKHR.adoc[]
+--
+endif::VK_KHR_maintenance5[]
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[open,refpage='vkGetImageDrmFormatModifierPropertiesEXT',desc='Returns an image\'s DRM format modifier',type='protos']
+--
+:refpage: vkGetImageDrmFormatModifierPropertiesEXT
+
+If an image was created with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+then the image has a <<glossary-drm-format-modifier,Linux DRM format
+modifier>>.
+To query the _modifier_, call:
+
+include::{generated}/api/protos/vkGetImageDrmFormatModifierPropertiesEXT.adoc[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:image is the queried image.
+  * pname:pProperties is a pointer to a
+    slink:VkImageDrmFormatModifierPropertiesEXT structure in which
+    properties of the image's _DRM format modifier_ are returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-02272]]
+    pname:image must: have been created with <<VkImageCreateInfo,
+    pname:tiling>> equal to ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+****
+
+include::{generated}/validity/protos/vkGetImageDrmFormatModifierPropertiesEXT.adoc[]
+--
+
+[open,refpage='VkImageDrmFormatModifierPropertiesEXT',desc='Properties of an image\'s Linux DRM format modifier',type='structs']
+--
+The slink:VkImageDrmFormatModifierPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageDrmFormatModifierPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:drmFormatModifier returns the image's
+    <<glossary-drm-format-modifier,Linux DRM format modifier>>.
+
+If the pname:image was created with
+slink:VkImageDrmFormatModifierListCreateInfoEXT, then the returned
+pname:drmFormatModifier must: belong to the list of modifiers provided at
+time of image creation in
+slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pDrmFormatModifiers.
+If the pname:image was created with
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT, then the returned
+pname:drmFormatModifier must: be the modifier provided at time of image
+creation in
+slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:drmFormatModifier.
+
+include::{generated}/validity/structs/VkImageDrmFormatModifierPropertiesEXT.adoc[]
+--
+endif::VK_EXT_image_drm_format_modifier[]
+
+[open,refpage='vkDestroyImage',desc='Destroy an image object',type='protos']
+--
+To destroy an image, call:
+
+include::{generated}/api/protos/vkDestroyImage.adoc[]
+
+  * pname:device is the logical device that destroys the image.
+  * pname:image is the image to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyImage-image-01000]]
+    All submitted commands that refer to pname:image, either directly or via
+    a sname:VkImageView, must: have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyImage-image-01001]]
+    If sname:VkAllocationCallbacks were provided when pname:image was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyImage-image-01002]]
+    If no sname:VkAllocationCallbacks were provided when pname:image was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_swapchain[]
+  * [[VUID-vkDestroyImage-image-04882]]
+    pname:image must: not have been acquired from
+    flink:vkGetSwapchainImagesKHR
+endif::VK_KHR_swapchain[]
+****
+
+include::{generated}/validity/protos/vkDestroyImage.adoc[]
+--
+
+
+[[resources-image-format-features]]
+=== Image Format Features
+
+Valid uses of a slink:VkImage may: depend on the image's _format features_,
+defined below.
+Such constraints are documented in the affected valid usage statement.
+
+  * If the image was created with ename:VK_IMAGE_TILING_LINEAR, then its set
+    of _format features_ is the value of
+    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkImageCreateInfo::pname:format.
+  * If the image was created with ename:VK_IMAGE_TILING_OPTIMAL,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without a
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    or a
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    <<memory-external-screen-buffer-external-formats,QNX Screen Buffer
+    external format>>
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without an
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    or an
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA,
+endif::VK_FUCHSIA_buffer_collection[]
+    then its set of _format features_ is the value of
+    slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkImageCreateInfo::pname:format.
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * If the image was created with an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>, then its set of _format features_ is
+    the value of
+    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+    found by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID on
+    the Android hardware buffer that was imported to the
+    slink:VkDeviceMemory to which the image is bound.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * If the image was created with an
+    <<memory-external-screen-buffer-external-formats,QNX Screen buffer
+    external format>>, then its set of _format features_ is the value of
+    slink:VkScreenBufferFormatPropertiesQNX::pname:formatFeatures found by
+    calling flink:vkGetScreenBufferPropertiesQNX on the QNX Screen buffer
+    that was imported to the slink:VkDeviceMemory to which the image is
+    bound.
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * If the image was created with
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then:
+  ** The image's DRM format modifier is the value of
+     slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier
+     found by calling flink:vkGetImageDrmFormatModifierPropertiesEXT.
+  ** Let
+     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
+     be the array found by calling
+     flink:vkGetPhysicalDeviceFormatProperties2 on the same pname:format as
+     slink:VkImageCreateInfo::pname:format.
+  ** Let `VkDrmFormatModifierPropertiesEXT prop` be the array element whose
+     pname:drmFormatModifier member is the value of the image's DRM format
+     modifier.
+  ** Then the image's set of _format features_ is the value of
+     `prop`::pname:drmFormatModifierTilingFeatures.
+endif::VK_EXT_image_drm_format_modifier[]
+
+
+ifdef::VK_NV_corner_sampled_image[]
+[[resources-images-corner-sampled]]
+=== Corner-Sampled Images
+
+A _corner-sampled image_ is an image where unnormalized texel coordinates
+are centered on integer values rather than half-integer values.
+
+A corner-sampled image has a number of differences compared to conventional
+texture image:
+
+  * Texels are centered on integer coordinates.
+    See <<textures-unnormalized-to-integer, Unnormalized Texel Coordinate
+    Operations>>
+  * Normalized coordinates are scaled using [eq]#coord {times} (dim - 1)#
+    rather than [eq]#coord {times} dim#, where dim is the size of one
+    dimension of the image.
+    See <<textures-normalized-to-unnormalized, normalized texel coordinate
+    transform>>.
+  * Partial derivatives are scaled using [eq]#coord {times} (dim - 1)#
+    rather than [eq]#coord {times} dim#.
+    See <<textures-scale-factor,Scale Factor Operation>>.
+  * Calculation of the next higher LOD size goes according to
+    [eq]#{lceil}dim / 2{rceil}# rather than [eq]#{lfloor}dim / 2{rfloor}#.
+    See <<resources-image-mip-level-sizing,Image Mip Level Sizing>>.
+  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
+    See <<resources-image-mip-level-sizing,Image Mip Level Sizing>>.
+
+Corner-sampling is only supported for 2D and 3D images.
+When sampling a corner-sampled image, the sampler addressing mode must: be
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+Corner-sampled images are not supported as cube maps or depth/stencil
+images.
+endif::VK_NV_corner_sampled_image[]
+
+
+[[resources-image-mip-level-sizing]]
+=== Image Mip Level Sizing
+
+A _complete mipmap chain_ is the full set of mip levels, from the largest
+mip level provided, down to the _minimum mip level size_.
+
+
+==== Conventional Images
+
+For conventional images, the dimensions of each successive mip level,
+[eq]#n+1#, are:
+
+  {empty}:: [eq]#pname:width~n+1~ = max({lfloor}pname:width~n~/2{rfloor},
+            1)#
+  {empty}:: [eq]#pname:height~n+1~ = max({lfloor}pname:height~n~/2{rfloor},
+            1)#
+  {empty}:: [eq]#pname:depth~n+1~ = max({lfloor}pname:depth~n~/2{rfloor},
+            1)#
+
+where [eq]#pname:width~n~#, [eq]#pname:height~n~#, and [eq]#pname:depth~n~#
+are the dimensions of the next larger mip level, [eq]#n#.
+
+The minimum mip level size is:
+
+  * 1 for one-dimensional images,
+  * 1x1 for two-dimensional images, and
+  * 1x1x1 for three-dimensional images.
+
+The number of levels in a complete mipmap chain is:
+
+  {empty}:: [eq]#{lfloor}log~2~(max(pname:width~0~, pname:height~0~,
+            pname:depth~0~)){rfloor} {plus} 1#
+
+where [eq]#pname:width~0~#, [eq]#pname:height~0~#, and [eq]#pname:depth~0~#
+are the dimensions of the largest (most detailed) mip level, `0`.
+
+
+ifdef::VK_NV_corner_sampled_image[]
+==== Corner-Sampled Images
+
+For corner-sampled images, the dimensions of each successive mip level,
+[eq]#n+1#, are:
+
+  {empty}:: [eq]#pname:width~n+1~ = max({lceil}pname:width~n~/2{rceil}, 2)#
+  {empty}:: [eq]#pname:height~n+1~ = max({lceil}pname:height~n~/2{rceil},
+            2)#
+  {empty}:: [eq]#pname:depth~n+1~ = max({lceil}pname:depth~n~/2{rceil}, 2)#
+
+where [eq]#pname:width~n~#, [eq]#pname:height~n~#, and [eq]#pname:depth~n~#
+are the dimensions of the next larger mip level, [eq]#n#.
+
+The minimum mip level size is:
+
+  * 2x2 for two-dimensional images, and
+  * 2x2x2 for three-dimensional images.
+
+The number of levels in a complete mipmap chain is:
+
+  {empty}:: [eq]#{lceil}log~2~(max(pname:width~0~, pname:height~0~,
+            pname:depth~0~)){rceil}#
+
+where [eq]#pname:width~0~#, [eq]#pname:height~0~#, and [eq]#pname:depth~0~#
+are the dimensions of the largest (most detailed) mip level, `0`.
+endif::VK_NV_corner_sampled_image[]
+
+
+[[resources-image-layouts]]
+== Image Layouts
+
+Images are stored in implementation-dependent opaque layouts in memory.
+Each layout has limitations on what kinds of operations are supported for
+image subresources using the layout.
+At any given time, the data representing an image subresource in memory
+exists in a particular layout which is determined by the most recent layout
+transition that was performed on that image subresource.
+Applications have control over which layout each image subresource uses, and
+can: transition an image subresource from one layout to another.
+Transitions can: happen with an image memory barrier, included as part of a
+flink:vkCmdPipelineBarrier or a flink:vkCmdWaitEvents command buffer command
+(see <<synchronization-image-memory-barriers>>), or as part of a subpass
+dependency within a render pass (see sname:VkSubpassDependency).
+
+Image layout is per-image subresource.
+Separate image subresources of the same image can: be in different layouts
+at the same time, with the exception that depth and stencil aspects of a
+given image subresource can: only be in different layouts if the
+<<features-separateDepthStencilLayouts, pname:separateDepthStencilLayouts>>
+feature is enabled.
+
+[NOTE]
+.Note
+====
+Each layout may: offer optimal performance for a specific usage of image
+memory.
+For example, an image with a layout of
+ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL may: provide optimal
+performance for use as a color attachment, but be unsupported for use in
+transfer commands.
+Applications can: transition an image subresource from one layout to another
+in order to achieve optimal performance when the image subresource is used
+for multiple kinds of operations.
+After initialization, applications need not use any layout other than the
+general layout, though this may: produce suboptimal performance on some
+implementations.
+====
+
+Upon creation, all image subresources of an image are initially in the same
+layout, where that layout is selected by the
+sname:VkImageCreateInfo::pname:initialLayout member.
+The pname:initialLayout must: be either ename:VK_IMAGE_LAYOUT_UNDEFINED or
+ename:VK_IMAGE_LAYOUT_PREINITIALIZED.
+If it is ename:VK_IMAGE_LAYOUT_PREINITIALIZED, then the image data can: be
+preinitialized by the host while using this layout, and the transition away
+from this layout will preserve that data.
+If it is ename:VK_IMAGE_LAYOUT_UNDEFINED, then the contents of the data are
+considered to be undefined:, and the transition away from this layout is not
+guaranteed to preserve that data.
+For either of these initial layouts, any image subresources must: be
+transitioned to another layout before they are accessed by the device.
+
+Host access to image memory is only well-defined for
+<<glossary-linear-resource,linear>> images and for image subresources of
+those images which are currently in either the
+ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
+layout.
+Calling flink:vkGetImageSubresourceLayout for a linear image returns a
+subresource layout mapping that is valid for either of those image layouts.
+
+[open,refpage='VkImageLayout',desc='Layout of image and image subresources',type='enums']
+--
+The set of image layouts consists of:
+
+include::{generated}/api/enums/VkImageLayout.adoc[]
+
+The type(s) of device access supported by each layout are:
+
+  * ename:VK_IMAGE_LAYOUT_UNDEFINED specifies that the layout is unknown.
+    Image memory cannot: be transitioned into this layout.
+    This layout can: be used as the pname:initialLayout member of
+    slink:VkImageCreateInfo.
+    This layout can: be used in place of the current image layout in a
+    layout transition, but doing so will cause the contents of the image's
+    memory to be undefined:.
+  * ename:VK_IMAGE_LAYOUT_PREINITIALIZED specifies that an image's memory is
+    in a defined layout and can: be populated by data, but that it has not
+    yet been initialized by the driver.
+    Image memory cannot: be transitioned into this layout.
+    This layout can: be used as the pname:initialLayout member of
+    slink:VkImageCreateInfo.
+    This layout is intended to be used as the initial layout for an image
+    whose contents are written by the host, and hence the data can: be
+    written to memory immediately, without first executing a layout
+    transition.
+    Currently, ename:VK_IMAGE_LAYOUT_PREINITIALIZED is only useful with
+    <<glossary-linear-resource,linear>> images because there is not a
+    standard layout defined for ename:VK_IMAGE_TILING_OPTIMAL images.
+  * ename:VK_IMAGE_LAYOUT_GENERAL supports all types of device access.
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL specifies a layout that must:
+    only be used with attachment accesses in the graphics pipeline.
+  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL specifies a layout allowing read
+    only access as an attachment, or in shaders as a sampled image, combined
+    image/sampler, or input attachment.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL must: only be used as a
+    color or resolve attachment in a sname:VkFramebuffer.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL specifies a
+    layout for both the depth and stencil aspects of a depth/stencil format
+    image allowing read and write access as a depth/stencil attachment.
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL specifies a layout
+    for both the depth and stencil aspects of a depth/stencil format image
+    allowing read only access as a depth/stencil attachment or in shaders as
+    a sampled image, combined image/sampler, or input attachment.
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+    specifies a layout for depth/stencil format images allowing read and
+    write access to the stencil aspect as a stencil attachment, and read
+    only access to the depth aspect as a depth attachment or in shaders as a
+    sampled image, combined image/sampler, or input attachment.
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+    specifies a layout for depth/stencil format images allowing read and
+    write access to the depth aspect as a depth attachment, and read only
+    access to the stencil aspect as a stencil attachment or in shaders as a
+    sampled image, combined image/sampler, or input attachment.
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    It is equivalent to ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL specifies a layout for
+    the depth aspect of a depth/stencil format image allowing read and write
+    access as a depth attachment.
+  * ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL specifies a layout for the
+    depth aspect of a depth/stencil format image allowing read-only access
+    as a depth attachment or in shaders as a sampled image, combined
+    image/sampler, or input attachment.
+  * ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL specifies a layout for
+    the stencil aspect of a depth/stencil format image allowing read and
+    write access as a stencil attachment.
+  * ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL specifies a layout for
+    the stencil aspect of a depth/stencil format image allowing read-only
+    access as a stencil attachment or in shaders as a sampled image,
+    combined image/sampler, or input attachment.
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL specifies a layout
+    allowing read-only access in a shader as a sampled image, combined
+    image/sampler, or input attachment.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_SAMPLED_BIT or
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT usage bits enabled.
+  * ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL must: only be used as a
+    source image of a transfer command (see the definition of
+    <<synchronization-pipeline-stages-transfer,
+    ename:VK_PIPELINE_STAGE_TRANSFER_BIT>>).
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL must: only be used as a
+    destination image of a transfer command.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage bit enabled.
+ifdef::VK_KHR_swapchain[]
+  * ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR must: only be used for presenting
+    a presentable image for display.
+ifdef::VK_KHR_shared_presentable_image[]
+  * ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR is valid only for shared
+    presentable images, and must: be used for any usage the image supports.
+endif::VK_KHR_shared_presentable_image[]
+endif::VK_KHR_swapchain[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR must:
+    only be used as a
+ifdef::VK_KHR_fragment_shading_rate[]
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[or]
+ifdef::VK_NV_shading_rate_image[]
+    <<primsrast-shading-rate-image, shading rate image>>.
+endif::VK_NV_shading_rate_image[]
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR usage
+    bit enabled.
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT must: only be
+    used as a fragment density map attachment in a sname:VkRenderPass.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT usage bit enabled.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR must: only be used as a
+    <<decode-output-picture,decode output picture>> in a
+    <<video-decode-operations,video decode operation>>.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR is reserved for future use.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR must: only be used as an
+    output <<reconstructed-picture,reconstructed picture>> or an input
+    <<reference-picture,reference picture>> in a <<video-decode-operations,
+    video decode operation>>.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR usage bit enabled.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR is reserved for future use.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR must: only be used as an
+    <<encode-input-picture,encode input picture>> in a
+    <<video-encode-operations,video encode operation>>.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR must: only be used as an
+    output <<reconstructed-picture,reconstructed picture>> or an input
+    <<reference-picture,reference picture>> in a <<video-encode-operations,
+    video encode operation>>.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR usage bit enabled.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT must: only be
+    used as either a color attachment or depth/stencil attachment in a
+    sname:VkFramebuffer and/or read-only access in a shader as a sampled
+    image, combined image/sampler, or input attachment.
+    This layout is valid only for image subresources of images created with
+    the ename:VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit
+    enabled and either the ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT and either the
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bits enabled.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+
+The layout of each image subresource is not a state of the image subresource
+itself, but is rather a property of how the data in memory is organized, and
+thus for each mechanism of accessing an image in the API the application
+must: specify a parameter or structure member that indicates which image
+layout the image subresource(s) are considered to be in when the image will
+be accessed.
+For transfer commands, this is a parameter to the command (see <<clears>>
+and <<copies>>).
+For use as a framebuffer attachment, this is a member in the substructures
+of the slink:VkRenderPassCreateInfo (see <<renderpass,Render Pass>>).
+For use in a descriptor set, this is a member in the
+sname:VkDescriptorImageInfo structure (see <<descriptorsets-updates>>).
+--
+
+
+[[resources-image-layouts-matching-rule]]
+=== Image Layout Matching Rules
+
+At the time that any command buffer command accessing an image executes on
+any queue, the layouts of the image subresources that are accessed must: all
+match exactly the layout specified via the API controlling those
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[accesses,]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[accesses.]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+except in case of accesses to an image with a depth/stencil format performed
+through descriptors referring to only a single aspect of the image, where
+the following relaxed matching rules apply:
+
+  * Descriptors referring just to the depth aspect of a depth/stencil image
+    only need to match in the image layout of the depth aspect, thus
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL are
+    considered to match.
+  * Descriptors referring just to the stencil aspect of a depth/stencil
+    image only need to match in the image layout of the stencil aspect, thus
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL are
+    considered to match.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+When performing a layout transition on an image subresource, the old layout
+value must: either equal the current layout of the image subresource (at the
+time the transition executes), or else be ename:VK_IMAGE_LAYOUT_UNDEFINED
+(implying that the contents of the image subresource need not be preserved).
+The new layout used in a transition must: not be
+ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED.
+
+ifdef::VK_EXT_sample_locations[]
+
+The image layout of each image subresource of a depth/stencil image created
+with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is
+dependent on the last sample locations used to render to the image
+subresource as a depth/stencil attachment, thus applications must: provide
+the same sample locations that were last used to render to the given image
+subresource whenever a layout transition of the image subresource happens,
+otherwise the contents of the depth aspect of the image subresource become
+undefined:.
+
+In addition, depth reads from a depth/stencil attachment referring to an
+image subresource range of a depth/stencil image created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT using
+different sample locations than what have been last used to perform depth
+writes to the image subresources of the same image subresource range return
+undefined: values.
+
+Similarly, depth writes to a depth/stencil attachment referring to an image
+subresource range of a depth/stencil image created with
+ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT using
+different sample locations than what have been last used to perform depth
+writes to the image subresources of the same image subresource range make
+the contents of the depth aspect of those image subresources undefined:.
+
+endif::VK_EXT_sample_locations[]
+
+
+[[resources-image-views]]
+== Image Views
+
+[open,refpage='VkImageView',desc='Opaque handle to an image view object',type='handles']
+--
+Image objects are not directly accessed by pipeline shaders for reading or
+writing image data.
+Instead, _image views_ representing contiguous ranges of the image
+subresources and containing additional metadata are used for that purpose.
+Views must: be created on images of compatible types, and must: represent a
+valid subset of image subresources.
+
+Image views are represented by sname:VkImageView handles:
+
+include::{generated}/api/handles/VkImageView.adoc[]
+--
+
+[open,refpage='VK_REMAINING_ARRAY_LAYERS',desc='Sentinel for all remaining array layers',type='consts']
+--
+ename:VK_REMAINING_ARRAY_LAYERS is a special constant value used for image
+views to indicate that all remaining array layers in an image after the base
+layer should be included in the view.
+
+include::{generated}/api/enums/VK_REMAINING_ARRAY_LAYERS.adoc[]
+--
+
+[open,refpage='VK_REMAINING_MIP_LEVELS',desc='Sentinel for all remaining mipmap levels',type='consts']
+--
+ename:VK_REMAINING_MIP_LEVELS is a special constant value used for image
+views to indicate that all remaining mipmap levels in an image after the
+base level should be included in the view.
+
+include::{generated}/api/enums/VK_REMAINING_MIP_LEVELS.adoc[]
+--
+
+[open,refpage='VkImageViewType',desc='Image view types',type='enums']
+--
+The types of image views that can: be created are:
+
+include::{generated}/api/enums/VkImageViewType.adoc[]
+--
+
+[open,refpage='vkCreateImageView',desc='Create an image view from an existing image',type='protos']
+--
+:refpage: vkCreateImageView
+:objectnameplural: image views
+:objectnamecamelcase: imageView
+:objectcount: 1
+
+To create an image view, call:
+
+include::{generated}/api/protos/vkCreateImageView.adoc[]
+
+  * pname:device is the logical device that creates the image view.
+  * pname:pCreateInfo is a pointer to a sname:VkImageViewCreateInfo
+    structure containing parameters to be used to create the image view.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pView is a pointer to a slink:VkImageView handle in which the
+    resulting image view object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateImageView-image-09179]]
+    slink:VkImageViewCreateInfo::pname:image must: have been created from
+    pname:device
+ifdef::VKSC_VERSION_1_0[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+  * [[VUID-vkCreateImageView-subresourceRange-05063]]
+    If slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS and is greater than `1`, or if
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount is
+    ename:VK_REMAINING_ARRAY_LAYERS and the remaining number of layers in
+    slink:VkImageViewCreateInfo::pname:image is greater than `1`, the number
+    of image views with more than one array layer currently allocated from
+    pname:device plus `1` must: be less than or equal to the total number of
+    image views requested via
+    slink:VkDeviceObjectReservationCreateInfo::pname:layeredImageViewRequestCount
+    specified when pname:device was created
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkCreateImageView.adoc[]
+--
+
+[open,refpage='VkImageViewCreateInfo',desc='Structure specifying parameters of a newly created image view',type='structs']
+--
+The sname:VkImageViewCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkImageViewCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkImageViewCreateFlagBits specifying
+    additional parameters of the image view.
+  * pname:image is a slink:VkImage on which the view will be created.
+  * pname:viewType is a elink:VkImageViewType value specifying the type of
+    the image view.
+  * pname:format is a elink:VkFormat specifying the format and type used to
+    interpret texel blocks of the image.
+  * pname:components is a slink:VkComponentMapping structure specifying a
+    remapping of color components (or of depth or stencil components after
+    they have been converted into color components).
+  * pname:subresourceRange is a slink:VkImageSubresourceRange structure
+    selecting the set of mipmap levels and array layers to be accessible to
+    the view.
+
+[[resources-image-inherited-usage]]
+Some of the pname:image creation parameters are inherited by the view.
+In particular, image view creation inherits the implicit parameter
+pname:usage specifying the allowed usages of the image view that, by
+default, takes the value of the corresponding pname:usage parameter
+specified in slink:VkImageCreateInfo at image creation time.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+The implicit pname:usage can: be overridden by adding a
+slink:VkImageViewUsageCreateInfo structure to the pname:pNext chain, but the
+view usage must: be a subset of the image usage.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+If pname:image has a depth-stencil format and was created with a
+slink:VkImageStencilUsageCreateInfo structure included in the pname:pNext
+chain of slink:VkImageCreateInfo, the usage is calculated based on the
+pname:subresource.aspectMask provided:
+
+  * If pname:aspectMask includes only ename:VK_IMAGE_ASPECT_STENCIL_BIT, the
+    implicit pname:usage is equal to
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage.
+  * If pname:aspectMask includes only ename:VK_IMAGE_ASPECT_DEPTH_BIT, the
+    implicit pname:usage is equal to slink:VkImageCreateInfo::pname:usage.
+  * If both aspects are included in pname:aspectMask, the implicit
+    pname:usage is equal to the intersection of
+    slink:VkImageCreateInfo::pname:usage and
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage.
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+
+ifdef::VK_EXT_image_sliced_view_of_3d[]
+If pname:image is a 3D image, its Z range can: be restricted to a subset by
+adding a slink:VkImageViewSlicedCreateInfoEXT to the pname:pNext chain.
+endif::VK_EXT_image_sliced_view_of_3d[]
+
+If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+flag,
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+and if the pname:format of the image is not
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>>,
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+pname:format can: be different from the image's format, but if
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+pname:image was created without the
+ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag and
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+they are not equal they must: be _compatible_.
+Image format compatibility is defined in the
+<<formats-compatibility-classes,Format Compatibility Classes>> section.
+Views of compatible formats will have the same mapping between texel
+coordinates and memory locations irrespective of the pname:format, with only
+the interpretation of the bit pattern changing.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[image-views-plane-promotion]]
+If pname:image was created with a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format, and the
+image view's pname:aspectMask is one of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_BIT, the
+view's aspect mask is considered to be equivalent to
+ename:VK_IMAGE_ASPECT_COLOR_BIT when used as a framebuffer attachment.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+[NOTE]
+.Note
+====
+Values intended to be used with one view format may: not be exactly
+preserved when written or read through a different format.
+For example, an integer value that happens to have the bit pattern of a
+floating point denorm or NaN may: be flushed or canonicalized when written
+or read through a view with a floating point format.
+Similarly, a value written through a signed normalized format that has a bit
+pattern exactly equal to [eq]#-2^b^# may: be changed to [eq]#-2^b^ {plus} 1#
+as described in <<fundamentals-fixedfpconv,Conversion from Normalized
+Fixed-Point to Floating-Point>>.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+If pname:image was created with the
+ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
+must: be _compatible_ with the image's format as described above; or must:
+be an uncompressed format, in which case it must: be
+<<formats-size-compatibility, _size-compatible_>> with the image's format.
+In this case, the resulting image view's texel dimensions equal the
+dimensions of the selected mip level divided by the compressed texel block
+size and rounded up.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+The slink:VkComponentMapping pname:components member describes a remapping
+from components of the image to components of the vector returned by shader
+image instructions.
+This remapping must: be the identity swizzle for storage image descriptors,
+input attachment descriptors,
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+and framebuffer attachments.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+framebuffer attachments, and any sname:VkImageView used with a combined
+image sampler that enables <<samplers-YCbCr-conversion,sampler {YCbCr}
+conversion>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If the image view is to be used with a sampler which supports
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, an _identically
+defined object_ of type slink:VkSamplerYcbcrConversion to that used to
+create the sampler must: be passed to flink:vkCreateImageView in a
+slink:VkSamplerYcbcrConversionInfo included in the pname:pNext chain of
+slink:VkImageViewCreateInfo.
+Conversely, if a slink:VkSamplerYcbcrConversion object is passed to
+flink:vkCreateImageView, an identically defined
+slink:VkSamplerYcbcrConversion object must: be used when sampling the image.
+
+[[image-views-requiring-sampler-ycbcr-conversion]]
+If the image has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format,
+pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT, and
+pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, then the pname:format
+must: be identical to the image pname:format and the sampler to be used with
+the image view must: enable <<samplers-YCbCr-conversion,sampler {YCbCr}
+conversion>>.
+
+ifdef::VK_KHR_video_queue[]
+When such an image is used in a <<video-coding,video coding>> operation, the
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> has no effect.
+endif::VK_KHR_video_queue[]
+
+If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+and the image has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format,
+and if pname:subresourceRange.aspectMask is
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+ename:VK_IMAGE_ASPECT_PLANE_2_BIT, pname:format must: be
+<<formats-compatible-planes,compatible>> with the corresponding plane of the
+image, and the sampler to be used with the image view must: not enable
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
+The pname:width and pname:height of the single-plane image view must: be
+derived from the multi-planar image's dimensions in the manner listed for
+<<formats-compatible-planes,plane compatibility>> for the plane.
+
+Any view of an image plane will have the same mapping between texel
+coordinates and memory locations as used by the components of the color
+aspect, subject to the formulae relating texel coordinates to
+lower-resolution planes as described in <<textures-chroma-reconstruction,
+Chroma Reconstruction>>.
+That is, if an R or B plane has a reduced resolution relative to the G plane
+of the multi-planar image, the image view operates using the (_u~plane~_,
+_v~plane~_) unnormalized coordinates of the reduced-resolution plane, and
+these coordinates access the same memory locations as the (_u~color~_,
+_v~color~_) unnormalized coordinates of the color aspect for which chroma
+reconstruction operations operate on the same (_u~plane~_, _v~plane~_) or
+(_i~plane~_, _j~plane~_) coordinates.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+[[resources-image-views-compatibility]]
+.Image type and image view type compatibility requirements
+[cols="35%,50%",options="header"]
+|====
+| Image View Type | Compatible Image Types
+| ename:VK_IMAGE_VIEW_TYPE_1D         | ename:VK_IMAGE_TYPE_1D
+| ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY   | ename:VK_IMAGE_TYPE_1D
+| ename:VK_IMAGE_VIEW_TYPE_2D         | ename:VK_IMAGE_TYPE_2D
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[, ename:VK_IMAGE_TYPE_3D]
+| ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY   | ename:VK_IMAGE_TYPE_2D
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[, ename:VK_IMAGE_TYPE_3D]
+| ename:VK_IMAGE_VIEW_TYPE_CUBE       | ename:VK_IMAGE_TYPE_2D
+| ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY | ename:VK_IMAGE_TYPE_2D
+| ename:VK_IMAGE_VIEW_TYPE_3D         | ename:VK_IMAGE_TYPE_3D
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewCreateInfo-image-01003]]
+    If pname:image was not created with
+    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT then pname:viewType must: not
+    be ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
+  * [[VUID-VkImageViewCreateInfo-viewType-01004]]
+    If the <<features-imageCubeArray, pname:imageCubeArray>> feature is not
+    enabled, pname:viewType must: not be ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkImageViewCreateInfo-image-06723]]
+    If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set then pname:viewType
+    must: not be ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+ifndef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-06727]]
+    If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set then pname:viewType
+    must: not be ename:VK_IMAGE_VIEW_TYPE_2D
+endif::VK_EXT_image_2d_view_of_3d[]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-06728]]
+    If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or
+    ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, then
+    pname:viewType must: not be ename:VK_IMAGE_VIEW_TYPE_2D
+endif::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-04970]]
+    If pname:image was created with ename:VK_IMAGE_TYPE_3D and
+    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then pname:subresourceRange.levelCount
+    must: be 1
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageViewCreateInfo-image-04971]]
+    If pname:image was created with ename:VK_IMAGE_TYPE_3D and
+    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then
+    slink:VkImageCreateInfo::pname:flags must: not contain any of
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, and
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageViewCreateInfo-image-04972]]
+    If pname:image was created with a pname:samples value not equal to
+    ename:VK_SAMPLE_COUNT_1_BIT then pname:viewType must: be either
+    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkImageViewCreateInfo-image-04441]]
+    pname:image must: have been created with a pname:usage value containing
+    at least one of the usages defined in the <<valid-imageview-imageusage,
+    valid image usage>> list for image views
+  * [[VUID-VkImageViewCreateInfo-None-02273]]
+    The <<resources-image-view-format-features,format features>> of the
+    resultant image view must: contain at least one bit
+  * [[VUID-VkImageViewCreateInfo-usage-02274]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_SAMPLED_BIT, then the
+    <<resources-image-view-format-features,format features>> of the
+    resultant image view must: contain
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+  * [[VUID-VkImageViewCreateInfo-usage-02275]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_STORAGE_BIT, then the image
+    view's <<resources-image-view-format-features,format features>> must:
+    contain ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+ifndef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkImageViewCreateInfo-usage-02276]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then
+    the image view's <<resources-image-view-format-features,format
+    features>> must: contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+endif::VK_NV_linear_color_attachment[]
+ifdef::VK_NV_linear_color_attachment[]
+  * [[VUID-VkImageViewCreateInfo-usage-08931]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then
+    the image view's <<resources-image-view-format-features,format
+    features>> must: contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
+    ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+  * [[VUID-VkImageViewCreateInfo-usage-02277]]
+    If pname:usage contains
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then the image view's
+    <<resources-image-view-format-features,format features>> must: contain
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkImageViewCreateInfo-usage-08932]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,
+ifdef::VK_ANDROID_external_format_resolve[]
+    and any of the following is true:
+  ** the <<features-externalFormatResolve, pname:externalFormatResolve>>
+    feature is not enabled
+  ** the <<limits-nullColorAttachmentWithExternalFormatResolve,
+     pname:nullColorAttachmentWithExternalFormatResolve>> property is
+     ename:VK_FALSE
+  ** pname:image was created with an
+     slink:VkExternalFormatANDROID::pname:externalFormat value of 0
+endif::VK_ANDROID_external_format_resolve[]
+
++
+then the image view's <<resources-image-view-format-features,format
+    features>> must: contain at least one of
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_NV_linear_color_attachment[]
+    or ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
+endif::VK_NV_linear_color_attachment[]
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-01478]]
+    pname:subresourceRange.baseMipLevel must: be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-01718]]
+    If pname:subresourceRange.levelCount is not
+    ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
+    {plus} pname:subresourceRange.levelCount# must: be less than or equal to
+    the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageViewCreateInfo-image-02571]]
+    If pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,
+    pname:subresourceRange.levelCount must: be `1`
+endif::VK_EXT_fragment_density_map[]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-01480]]
+    pname:subresourceRange.baseArrayLayer must: be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-01719]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS,
+    [eq]#pname:subresourceRange.baseArrayLayer {plus}
+    pname:subresourceRange.layerCount# must: be less than or equal to the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifndef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-01482]]
+    If pname:image is not a 3D image created with
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or pname:viewType is
+    not ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+    pname:subresourceRange.baseArrayLayer must: be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-01483]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:image is not a 3D image created
+    with ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or
+    pname:viewType is not ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, pname:subresourceRange.layerCount
+    must: be non-zero and [eq]#pname:subresourceRange.baseArrayLayer {plus}
+    pname:subresourceRange.layerCount# must: be less than or equal to the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+endif::VK_EXT_image_2d_view_of_3d[]
+ifdef::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-06724]]
+    If pname:image is not a 3D image created with
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or
+    ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, or pname:viewType
+    is not ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+    pname:subresourceRange.baseArrayLayer must: be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-06725]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:image is not a 3D image created
+    with ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or
+    ename:VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, or pname:viewType
+    is not ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+    pname:subresourceRange.layerCount must: be non-zero and
+    [eq]#pname:subresourceRange.baseArrayLayer {plus}
+    pname:subresourceRange.layerCount# must: be less than or equal to the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+endif::VK_EXT_image_2d_view_of_3d[]
+  * [[VUID-VkImageViewCreateInfo-image-02724]]
+    If pname:image is a 3D image created with
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and pname:viewType is
+    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+    pname:subresourceRange.baseArrayLayer must: be less than the depth
+    computed from pname:baseMipLevel and pname:extent.depth specified in
+    slink:VkImageCreateInfo when pname:image was created, according to the
+    formula defined in <<resources-image-mip-level-sizing,Image Mip Level
+    Sizing>>
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-02725]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:image is a 3D image created with
+    ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and pname:viewType is
+    ename:VK_IMAGE_VIEW_TYPE_2D or ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+    pname:subresourceRange.layerCount must: be non-zero and
+    [eq]#pname:subresourceRange.baseArrayLayer {plus}
+    pname:subresourceRange.layerCount# must: be less than or equal to the
+    depth computed from pname:baseMipLevel and pname:extent.depth specified
+    in slink:VkImageCreateInfo when pname:image was created, according to
+    the formula defined in <<resources-image-mip-level-sizing,Image Mip
+    Level Sizing>>
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+// The VU below comes in 4 alternate versions
+// both disabled, both enabled, maintenance2 only, ycbcr only
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01018]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
+    compatible with the pname:format used to create pname:image, as defined
+    in <<formats-compatibility-classes,Format Compatibility Classes>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+// The nested ifdefs are there in anticipation of the hoped-for day when the
+// VU extractor and validation layers can handle VU with imbedded
+// conditionals. They are commented out until then.
+//
+// If VK_VERSION_1_1,VK_KHR_maintenance2 and NOT VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01759]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, but without the
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
+    must: be compatible with the pname:format used to create pname:image, as
+    defined in <<formats-compatibility-classes,Format Compatibility
+    Classes>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+// If NOT VK_VERSION_1_1,VK_KHR_maintenance2 and VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01760]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, and if the pname:format
+    of the pname:image is not a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format,
+    pname:format must: be compatible with the pname:format used to create
+    pname:image, as defined in <<formats-compatibility-classes,Format
+    Compatibility Classes>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+// If VK_VERSION_1_1,VK_KHR_maintenance2 and VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01761]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag,
+// ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+    but without the ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+    flag,
+// endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+// ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    and if the pname:format of the pname:image is not a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format,
+// endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    pname:format must: be compatible with the pname:format used to create
+    pname:image, as defined in <<formats-compatibility-classes,Format
+    Compatibility Classes>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-VkImageViewCreateInfo-image-01583]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, pname:format
+    must: be compatible with, or must: be an uncompressed format that is
+    size-compatible with, the pname:format used to create pname:image
+  * [[VUID-VkImageViewCreateInfo-image-07072]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag and
+    pname:format is a non-compressed format, the pname:levelCount and
+    pname:layerCount members of pname:subresourceRange must: both be `1`
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_KHR_image_format_list[]
+  * [[VUID-VkImageViewCreateInfo-pNext-01585]]
+    If a slink:VkImageFormatListCreateInfo structure was included in the
+    pname:pNext chain of the slink:VkImageCreateInfo structure used when
+    creating pname:image and
+    slink:VkImageFormatListCreateInfo::pname:viewFormatCount is not zero
+    then pname:format must: be one of the formats in
+    slink:VkImageFormatListCreateInfo::pname:pViewFormats
+endif::VK_VERSION_1_2,VK_KHR_image_format_list[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01586]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, if the pname:format of
+    the pname:image is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format, and
+    if pname:subresourceRange.aspectMask is one of the
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bits, then
+    pname:format must: be compatible with the elink:VkFormat for the plane
+    of the pname:image pname:format indicated by
+    pname:subresourceRange.aspectMask, as defined in
+    <<formats-compatible-planes>>
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-07818]]
+    pname:subresourceRange.aspectMask must: only have at most 1 valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+// The VU below comes in an alternate version when the extension is
+// enabled.
+  * [[VUID-VkImageViewCreateInfo-image-01019]]
+    If pname:image was not created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
+    identical to the pname:format used to create pname:image
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+// The nested ifdefs are there in anticipation of the hoped-for day when the
+// VU extractor and validation layers can handle VU with imbedded
+// conditionals. They are commented out until then.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01762]]
+    If pname:image was not created with the
+    ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag,
+// ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    or if the pname:format of the pname:image is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> format and
+    if pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT,
+// endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+    pname:format must: be identical to the pname:format used to create
+    pname:image
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-format-06415]]
+    If the image view <<image-views-requiring-sampler-ycbcr-conversion,
+    requires a sampler {YCbCr} conversion>> and pname:usage contains
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, then the pname:pNext chain must:
+    include a slink:VkSamplerYcbcrConversionInfo structure with a conversion
+    value other than dlink:VK_NULL_HANDLE
+  * [[VUID-VkImageViewCreateInfo-format-04714]]
+    If pname:format has a code:_422 or code:_420 suffix then pname:image
+    must: have been created with a width that is a multiple of 2
+  * [[VUID-VkImageViewCreateInfo-format-04715]]
+    If pname:format has a code:_420 suffix then pname:image must: have been
+    created with a height that is a multiple of 2
+  * [[VUID-VkImageViewCreateInfo-pNext-01970]]
+    If the pname:pNext chain includes a slink:VkSamplerYcbcrConversionInfo
+    structure with a pname:conversion value other than dlink:VK_NULL_HANDLE,
+    all members of pname:components must: have the
+    <<resources-image-views-identity-mappings,identity swizzle>>
+  * [[VUID-VkImageViewCreateInfo-pNext-06658]]
+    If the pname:pNext chain includes a slink:VkSamplerYcbcrConversionInfo
+    structure with a pname:conversion value other than dlink:VK_NULL_HANDLE,
+    pname:format must: be the same used in
+    slink:VkSamplerYcbcrConversionCreateInfo::pname:format
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageViewCreateInfo-image-01020]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-VkImageViewCreateInfo-subResourceRange-01021]]
+    pname:viewType must: be compatible with the type of pname:image as shown
+    in the <<resources-image-views-compatibility,view type compatibility
+    table>>
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageViewCreateInfo-image-02399]]
+    If pname:image has an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    external format>>, pname:format must: be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-VkImageViewCreateInfo-image-02400]]
+    If pname:image has an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    external format>>, the pname:pNext chain must: include a
+    slink:VkSamplerYcbcrConversionInfo structure with a pname:conversion
+    object created with the same external format as pname:image
+  * [[VUID-VkImageViewCreateInfo-image-02401]]
+    If pname:image has an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    external format>>, all members of pname:components must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>>
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkImageViewCreateInfo-image-08957]]
+    If pname:image has an
+    <<memory-external-screen-buffer-external-formats,QNX Screen external
+    format>>, pname:format must: be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-VkImageViewCreateInfo-image-08958]]
+    If pname:image has an
+    <<memory-external-screen-buffer-external-formats,QNX Screen external
+    format>>, the pname:pNext chain must: include a
+    slink:VkSamplerYcbcrConversionInfo structure with a pname:conversion
+    object created with the same external format as pname:image
+  * [[VUID-VkImageViewCreateInfo-image-08959]]
+    If pname:image has an
+    <<memory-external-screen-buffer-external-formats,QNX Screen external
+    format>>, all members of pname:components must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>>
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * [[VUID-VkImageViewCreateInfo-image-02086]]
+    If pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+    pname:viewType must: be ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-VkImageViewCreateInfo-image-02087]]
+    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+    enabled, and If pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, pname:format must: be
+    ename:VK_FORMAT_R8_UINT
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkImageViewCreateInfo-usage-04550]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is enabled, and the
+    pname:usage for the image view includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then the
+    image view's <<resources-image-view-format-features,format features>>
+    must: contain
+    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+  * [[VUID-VkImageViewCreateInfo-usage-04551]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is enabled, the
+    pname:usage for the image view includes
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, and
+    <<limits-layeredShadingRateAttachments,
+    pname:layeredShadingRateAttachments>> is ename:VK_FALSE,
+    pname:subresourceRange.layerCount must: be `1`
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkImageViewCreateInfo-flags-02572]]
+    If the <<features-fragmentDensityMapDynamic,
+    pname:fragmentDensityMapDynamic>> feature is not enabled, pname:flags
+    must: not contain
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
+ifdef::VK_EXT_fragment_density_map2[]
+  * [[VUID-VkImageViewCreateInfo-flags-03567]]
+    If the <<features-fragmentDensityMapDeferred,
+    pname:fragmentDensityMapDeferred>> feature is not enabled, pname:flags
+    must: not contain
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
+  * [[VUID-VkImageViewCreateInfo-flags-03568]]
+    If pname:flags contains
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
+    pname:flags must: not contain
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
+  * [[VUID-VkImageViewCreateInfo-image-03569]]
+    If pname:image was created with pname:flags containing
+    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT and pname:usage containing
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, pname:subresourceRange.layerCount
+    must: be less than or equal to <<limits-maxSubsampledArrayLayers,
+    sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::pname:maxSubsampledArrayLayers>>
+endif::VK_EXT_fragment_density_map2[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * [[VUID-VkImageViewCreateInfo-invocationMask-04993]]
+    If the <<features-invocationMask, pname:invocationMask>> feature is
+    enabled, and if pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, pname:format must: be
+    ename:VK_FORMAT_R8_UINT
+endif::VK_HUAWEI_invocation_mask[]
+  * [[VUID-VkImageViewCreateInfo-flags-04116]]
+    If pname:flags does not contain
+    ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT and
+    pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, its pname:flags must:
+    not contain any of ename:VK_IMAGE_CREATE_PROTECTED_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifndef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-VkImageViewCreateInfo-pNext-02661]]
+    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
+    structure, its pname:usage member must: not include any bits that were
+    not set in the pname:usage member of the slink:VkImageCreateInfo
+    structure used to create pname:image
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-VkImageViewCreateInfo-pNext-02662]]
+    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
+    structure, and pname:image was not created with a
+    slink:VkImageStencilUsageCreateInfo structure included in the
+    pname:pNext chain of slink:VkImageCreateInfo, its pname:usage member
+    must: not include any bits that were not set in the pname:usage member
+    of the slink:VkImageCreateInfo structure used to create pname:image
+  * [[VUID-VkImageViewCreateInfo-pNext-02663]]
+    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
+    structure, pname:image was created with a
+    slink:VkImageStencilUsageCreateInfo structure included in the
+    pname:pNext chain of slink:VkImageCreateInfo, and
+    pname:subresourceRange.aspectMask includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, the pname:usage member of the
+    slink:VkImageViewUsageCreateInfo structure must: not include any bits
+    that were not set in the pname:usage member of the
+    slink:VkImageStencilUsageCreateInfo structure used to create pname:image
+  * [[VUID-VkImageViewCreateInfo-pNext-02664]]
+    If the pname:pNext chain includes a slink:VkImageViewUsageCreateInfo
+    structure, pname:image was created with a
+    slink:VkImageStencilUsageCreateInfo structure included in the
+    pname:pNext chain of slink:VkImageCreateInfo, and
+    pname:subresourceRange.aspectMask includes bits other than
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, the pname:usage member of the
+    slink:VkImageViewUsageCreateInfo structure must: not include any bits
+    that were not set in the pname:usage member of the
+    slink:VkImageCreateInfo structure used to create pname:image
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-VkImageViewCreateInfo-imageViewType-04973]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_1D,
+    ename:VK_IMAGE_VIEW_TYPE_2D, or ename:VK_IMAGE_VIEW_TYPE_3D; and
+    pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, then pname:subresourceRange.layerCount
+    must: be 1
+  * [[VUID-VkImageViewCreateInfo-imageViewType-04974]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_1D,
+    ename:VK_IMAGE_VIEW_TYPE_2D, or ename:VK_IMAGE_VIEW_TYPE_3D; and
+    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
+    then the remaining number of layers must: be 1
+  * [[VUID-VkImageViewCreateInfo-viewType-02960]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE and
+    pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:subresourceRange.layerCount must:
+    be `6`
+  * [[VUID-VkImageViewCreateInfo-viewType-02961]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and
+    pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:subresourceRange.layerCount must:
+    be a multiple of `6`
+  * [[VUID-VkImageViewCreateInfo-viewType-02962]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE and
+    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
+    the remaining number of layers must: be `6`
+  * [[VUID-VkImageViewCreateInfo-viewType-02963]]
+    If pname:viewType is ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and
+    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
+    the remaining number of layers must: be a multiple of `6`
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkImageViewCreateInfo-imageViewFormatSwizzle-04465]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageViewFormatSwizzle
+    is ename:VK_FALSE, all elements of pname:components must: have the
+    <<resources-image-views-identity-mappings,identity swizzle>>
+  * [[VUID-VkImageViewCreateInfo-imageViewFormatReinterpretation-04466]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:imageViewFormatReinterpretation
+    is ename:VK_FALSE, the elink:VkFormat in pname:format must: not contain
+    a different number of components, or a different number of bits in each
+    component, than the format of the sname:VkImage in pname:image
+endif::VK_KHR_portability_subset[]
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05064]]
+    If pname:subresourceRange.levelCount is not
+    ename:VK_REMAINING_MIP_LEVELS, pname:subresourceRange.levelCount must:
+    be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxImageViewMipLevels
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05200]]
+    If pname:subresourceRange.levelCount is ename:VK_REMAINING_MIP_LEVELS,
+    the remaining number of mip levels must: be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxImageViewMipLevels
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05065]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS, pname:subresourceRange.layerCount must:
+    be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxImageViewArrayLayers
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05201]]
+    If pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS,
+    the remaining number of layers must: be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxImageViewMipLevels
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05066]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS and is greater than `1`, or if
+    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS and
+    the remaining number of layers is greater than `1`, then if
+    pname:subresourceRange.levelCount is not ename:VK_REMAINING_MIP_LEVELS,
+    pname:subresourceRange.levelCount must: be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxLayeredImageViewMipLevels
+  * [[VUID-VkImageViewCreateInfo-subresourceRange-05202]]
+    If pname:subresourceRange.layerCount is not
+    ename:VK_REMAINING_ARRAY_LAYERS and is greater than `1`, or if
+    pname:subresourceRange.layerCount is ename:VK_REMAINING_ARRAY_LAYERS and
+    the remaining number of layers is greater than `1`, then if
+    pname:subresourceRange.levelCount is ename:VK_REMAINING_MIP_LEVELS, the
+    remaining number of mip levels must: be less than or equal to
+    slink:VkDeviceObjectReservationCreateInfo::pname:maxLayeredImageViewMipLevels
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkImageViewCreateInfo-image-04817]]
+    If pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, or
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the pname:viewType
+    must: be ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkImageViewCreateInfo-image-04818]]
+    If pname:image was created with pname:usage containing
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, or
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the pname:viewType
+    must: be ename:VK_IMAGE_VIEW_TYPE_2D or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkImageViewCreateInfo-flags-08106]]
+    If pname:flags includes
+    ename:VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the
+    <<features-descriptorBufferCaptureReplay,
+    pname:descriptorBufferCaptureReplay>> feature must: be enabled
+  * [[VUID-VkImageViewCreateInfo-pNext-08107]]
+    If the pname:pNext chain includes a
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, pname:flags
+    must: contain
+    ename:VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkImageViewCreateInfo-pNext-06787]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT
+endif::VK_EXT_metal_objects[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-VkImageViewCreateInfo-pNext-06944]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then
+    <<features-textureSampleWeighted, pname:textureSampleWeighted>> feature
+    must: be enabled
+  * [[VUID-VkImageViewCreateInfo-pNext-06945]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then pname:image
+    must: have been created with pname:usage containing
+    ename:VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM
+  * [[VUID-VkImageViewCreateInfo-pNext-06946]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then
+    pname:components must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY for all
+    components
+  * [[VUID-VkImageViewCreateInfo-pNext-06947]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then
+    pname:subresourceRange.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-VkImageViewCreateInfo-pNext-06948]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then
+    pname:subresourceRange.levelCount must: be `1`
+  * [[VUID-VkImageViewCreateInfo-pNext-06949]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure, then
+    pname:viewType must: be ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+  * [[VUID-VkImageViewCreateInfo-pNext-06950]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and if
+    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, then pname:image
+    must: have been created with pname:imageType ename:VK_IMAGE_TYPE_1D
+  * [[VUID-VkImageViewCreateInfo-pNext-06951]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and pname:viewType
+    is ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, then
+    pname:subresourceRange.layerCount must: be equal to `2`
+  * [[VUID-VkImageViewCreateInfo-pNext-06952]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and pname:viewType
+    is ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, then pname:image must: have been
+    created with pname:width equal to or greater than latexmath:[(numPhases
+    \times \mathbin{max}\left(
+    \mathbin{align}\left(filterSize.width,4\right),
+    filterSize.height\right))]
+  * [[VUID-VkImageViewCreateInfo-pNext-06953]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and if
+    pname:viewType is ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, then pname:image
+    must: have been created with pname:imageType ename:VK_IMAGE_TYPE_2D
+  * [[VUID-VkImageViewCreateInfo-pNext-06954]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and pname:viewType
+    is ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, then
+    pname:subresourceRange.layerCount must: be equal or greater than
+    [eq]#numPhases#
+  * [[VUID-VkImageViewCreateInfo-pNext-06955]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and pname:viewType
+    is ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, then pname:image must: have been
+    created with pname:width equal to or greater than pname:filterSize.width
+  * [[VUID-VkImageViewCreateInfo-pNext-06956]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure and pname:viewType
+    is ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY, then pname:image must: have been
+    created with pname:height equal to or greater than
+    pname:filterSize.height
+  * [[VUID-VkImageViewCreateInfo-pNext-06957]]
+    If the pname:pNext chain includes
+    slink:VkImageViewSampleWeightCreateInfoQCOM structure then
+    slink:VkImageViewSampleWeightCreateInfoQCOM::pname:filterSize.height
+    must: be less than or equal to <<limits-weightfilter-maxdimension,
+    sname:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterDimension.height>>
+endif::VK_QCOM_image_processing[]
+
+****
+
+include::{generated}/validity/structs/VkImageViewCreateInfo.adoc[]
+--
+
+[open,refpage='VkImageViewCreateFlagBits',desc='Bitmask specifying additional parameters of an image view',type='enums']
+--
+Bits which can: be set in slink:VkImageViewCreateInfo::pname:flags,
+specifying additional parameters of an image view, are:
+
+include::{generated}/api/enums/VkImageViewCreateFlagBits.adoc[]
+
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT
+    specifies that the fragment density map will be read by device during
+    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+ifdef::VK_EXT_fragment_density_map2[]
+  * ename:VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT
+    specifies that the fragment density map will be read by the host during
+    flink:vkEndCommandBuffer for the primary command buffer that the render
+    pass is recorded into
+endif::VK_EXT_fragment_density_map2[]
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    specifies that the image view can: be used with descriptor buffers when
+    capturing and replaying (e.g. for trace capture and replay), see
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT for more detail.
+endif::VK_EXT_descriptor_buffer[]
+--
+
+[open,refpage='VkImageViewCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageViewCreateFlags.adoc[]
+
+tname:VkImageViewCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkImageViewCreateFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[open,refpage='VkImageViewUsageCreateInfo',desc='Specify the intended usage of an image view',type='structs']
+--
+The set of usages for the created image view can: be restricted compared to
+the parent image's pname:usage flags by adding a
+sname:VkImageViewUsageCreateInfo structure to the pname:pNext chain of
+slink:VkImageViewCreateInfo.
+
+The sname:VkImageViewUsageCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkImageViewUsageCreateInfo.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageViewUsageCreateInfoKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying
+    allowed usages of the image view.
+
+When this structure is chained to slink:VkImageViewCreateInfo the
+pname:usage field overrides the implicit pname:usage parameter inherited
+from image creation time and its value is used instead for the purposes of
+determining the valid usage conditions of slink:VkImageViewCreateInfo.
+
+include::{generated}/validity/structs/VkImageViewUsageCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+ifdef::VK_EXT_image_sliced_view_of_3d[]
+[open,refpage='VkImageViewSlicedCreateInfoEXT',desc='Specify the subset of 3D slices of an image view',type='structs']
+--
+The range of 3D slices for the created image view can: be restricted to a
+subset of the parent image's Z range by adding a
+sname:VkImageViewSlicedCreateInfoEXT structure to the pname:pNext chain of
+slink:VkImageViewCreateInfo.
+
+The sname:VkImageViewSlicedCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageViewSlicedCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:sliceOffset is the Z-offset for the first 3D slice accessible to
+    the image view.
+  * pname:sliceCount is the number of 3D slices accessible to the image
+    view.
+
+When this structure is chained to slink:VkImageViewCreateInfo the
+pname:sliceOffset field is treated as a Z-offset for the sliced view and
+pname:sliceCount specifies the range.
+Shader accesses using a Z coordinate of 0 will access the depth slice
+corresponding to pname:sliceOffset in the image, and in a shader, the
+maximum in-bounds Z coordinate for the view is [eq]#pname:sliceCount - 1#.
+
+A sliced 3D view must: only be used with a single mip level.
+The slice coordinates are integer coordinates within the
+pname:subresourceRange.baseMipLevel used to create the image view.
+
+The effective view depth is equal to pname:extent.depth used to create the
+pname:image for this view adjusted by pname:subresourceRange.baseMipLevel as
+specified in <<resources-image-mip-level-sizing,Image Mip Level Sizing>>.
+
+Shader access to this image view is only affected by
+sname:VkImageViewSlicedCreateInfoEXT if it uses a descriptor of type
+ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
+For access using any other descriptor type, the contents of
+sname:VkImageViewSlicedCreateInfoEXT are ignored; instead, pname:sliceOffset
+is treated as being equal to 0, and pname:sliceCount is treated as being
+equal to ename:VK_REMAINING_3D_SLICES_EXT.
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-sliceOffset-07867]]
+    pname:sliceOffset must: be less than the effective view depth as
+    specified in <<resources-image-mip-level-sizing,Image Mip Level Sizing>>
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-sliceCount-07868]]
+    If pname:sliceCount is not ename:VK_REMAINING_3D_SLICES_EXT, it must: be
+    be non-zero and [eq]#pname:sliceOffset {plus} pname:sliceCount# must: be
+    less than or equal to the effective view depth as specified in
+    <<resources-image-mip-level-sizing,Image Mip Level Sizing>>
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-image-07869]]
+    pname:image must: have been created with pname:imageType equal to
+    ename:VK_IMAGE_TYPE_3D
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-viewType-07909]]
+    pname:viewType must: be ename:VK_IMAGE_VIEW_TYPE_3D
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-None-07870]]
+    The image view must: reference exactly 1 mip level
+  * [[VUID-VkImageViewSlicedCreateInfoEXT-None-07871]]
+    The <<features-imageSlicedViewOf3D,imageSlicedViewOf3D>> feature must:
+    be enabled on the device
+****
+
+include::{generated}/validity/structs/VkImageViewSlicedCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VK_REMAINING_3D_SLICES_EXT',desc='Sentinel for all remaining 3D slices',type='consts']
+--
+ename:VK_REMAINING_3D_SLICES_EXT is a special constant value used for
+slink:VkImageViewSlicedCreateInfoEXT::pname:sliceCount to indicate that all
+remaining 3D slices in an image after the first slice offset specified
+should be included in the view.
+
+include::{generated}/api/enums/VK_REMAINING_3D_SLICES_EXT.adoc[]
+--
+endif::VK_EXT_image_sliced_view_of_3d[]
+
+[open,refpage='VkImageSubresourceRange',desc='Structure specifying an image subresource range',type='structs']
+--
+The sname:VkImageSubresourceRange structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresourceRange.adoc[]
+
+  * pname:aspectMask is a bitmask of elink:VkImageAspectFlagBits specifying
+    which aspect(s) of the image are included in the view.
+  * pname:baseMipLevel is the first mipmap level accessible to the view.
+  * pname:levelCount is the number of mipmap levels (starting from
+    pname:baseMipLevel) accessible to the view.
+  * pname:baseArrayLayer is the first array layer accessible to the view.
+  * pname:layerCount is the number of array layers (starting from
+    pname:baseArrayLayer) accessible to the view.
+
+The number of mipmap levels and array layers must: be a subset of the image
+subresources in the image.
+If an application wants to use all mip levels or layers in an image after
+the pname:baseMipLevel or pname:baseArrayLayer, it can: set pname:levelCount
+and pname:layerCount to the special values ename:VK_REMAINING_MIP_LEVELS and
+ename:VK_REMAINING_ARRAY_LAYERS without knowing the exact number of mip
+levels or layers.
+
+For cube and cube array image views, the layers of the image view starting
+at pname:baseArrayLayer correspond to faces in the order +X, -X, +Y, -Y, +Z,
+-Z.
+For cube arrays, each set of six sequential layers is a single cube, so the
+number of cube maps in a cube map array view is _pname:layerCount / 6_, and
+image array layer [eq]#(pname:baseArrayLayer {plus} i)# is face index
+[eq]#(i mod 6)# of cube _i / 6_.
+If the number of layers in the view, whether set explicitly in
+pname:layerCount or implied by ename:VK_REMAINING_ARRAY_LAYERS, is not a
+multiple of 6, the last cube map in the array must: not be accessed.
+
+pname:aspectMask must: be only ename:VK_IMAGE_ASPECT_COLOR_BIT,
+ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT if
+pname:format is a color, depth-only or stencil-only format,
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+respectively.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+respectively, except if pname:format is a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If using a depth/stencil format with both depth and stencil components,
+pname:aspectMask must: include at least one of
+ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT, and
+can: include both.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+When the sname:VkImageSubresourceRange structure is used to select a subset
+of the slices of a 3D image's mip level in order to create a 2D or 2D array
+image view of a 3D image created with
+ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, pname:baseArrayLayer and
+pname:layerCount specify the first slice index and the number of slices to
+include in the created image view.
+Such an image view can: be used as a framebuffer attachment that refers only
+to the specified range of slices of the selected mip level.
+However, any layout transitions performed on such an attachment view during
+a render pass instance still apply to the entire subresource referenced
+which includes all the slices of the selected mip level.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+When using an image view of a depth/stencil image to populate a descriptor
+set (e.g. for sampling in the shader, or for use as an input attachment),
+the pname:aspectMask must: only include one bit, which selects whether the
+image view is used for depth reads (i.e. using a floating-point sampler or
+input attachment in the shader) or stencil reads (i.e. using an unsigned
+integer sampler or input attachment in the shader).
+When an image view of a depth/stencil image is used as a depth/stencil
+framebuffer attachment, the pname:aspectMask is ignored and both depth and
+stencil image subresources are used.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+When creating a sname:VkImageView, if <<samplers-YCbCr-conversion,sampler
+{YCbCr} conversion>> is enabled in the sampler, the pname:aspectMask of a
+pname:subresourceRange used by the sname:VkImageView must: be
+ename:VK_IMAGE_ASPECT_COLOR_BIT.
+
+When creating a sname:VkImageView, if sampler {YCbCr} conversion is not
+enabled in the sampler and the image pname:format is
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>>, the image must:
+have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the
+pname:aspectMask of the sname:VkImageView's pname:subresourceRange must: be
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT or
+ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+  * [[VUID-VkImageSubresourceRange-levelCount-01720]]
+    If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, it must: be
+    greater than `0`
+  * [[VUID-VkImageSubresourceRange-layerCount-01721]]
+    If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, it must: be
+    greater than `0`
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkImageSubresourceRange-aspectMask-01670]]
+    If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, then it
+    must: not include any of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageSubresourceRange-aspectMask-02278]]
+    pname:aspectMask must: not include
+    `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` for any index _i_
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkImageSubresourceRange.adoc[]
+--
+
+[open,refpage='VkImageAspectFlagBits',desc='Bitmask specifying which aspects of an image are included in a view',type='enums']
+--
+Bits which can: be set in an aspect mask to specify aspects of an image for
+purposes such as identifying a subresource, are:
+
+include::{generated}/api/enums/VkImageAspectFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * ename:VK_IMAGE_ASPECT_NONE specifies no image aspect, or the image
+    aspect is not applicable.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * ename:VK_IMAGE_ASPECT_COLOR_BIT specifies the color aspect.
+  * ename:VK_IMAGE_ASPECT_DEPTH_BIT specifies the depth aspect.
+  * ename:VK_IMAGE_ASPECT_STENCIL_BIT specifies the stencil aspect.
+  * ename:VK_IMAGE_ASPECT_METADATA_BIT specifies the metadata aspect used
+    for <<sparsememory, sparse resource>> operations.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * ename:VK_IMAGE_ASPECT_PLANE_0_BIT specifies plane 0 of a _multi-planar_
+    image format.
+  * ename:VK_IMAGE_ASPECT_PLANE_1_BIT specifies plane 1 of a _multi-planar_
+    image format.
+  * ename:VK_IMAGE_ASPECT_PLANE_2_BIT specifies plane 2 of a _multi-planar_
+    image format.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT specifies _memory plane_ 0.
+  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT specifies _memory plane_ 1.
+  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT specifies _memory plane_ 2.
+  * ename:VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT specifies _memory plane_ 3.
+endif::VK_EXT_image_drm_format_modifier[]
+--
+
+[open,refpage='VkImageAspectFlags',desc='Bitmask of VkImageAspectFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkImageAspectFlags.adoc[]
+
+tname:VkImageAspectFlags is a bitmask type for setting a mask of zero or
+more elink:VkImageAspectFlagBits.
+--
+
+[open,refpage='VkComponentMapping',desc='Structure specifying a color component mapping',type='structs']
+--
+The sname:VkComponentMapping structure is defined as:
+
+include::{generated}/api/structs/VkComponentMapping.adoc[]
+
+  * pname:r is a elink:VkComponentSwizzle specifying the component value
+    placed in the R component of the output vector.
+  * pname:g is a elink:VkComponentSwizzle specifying the component value
+    placed in the G component of the output vector.
+  * pname:b is a elink:VkComponentSwizzle specifying the component value
+    placed in the B component of the output vector.
+  * pname:a is a elink:VkComponentSwizzle specifying the component value
+    placed in the A component of the output vector.
+
+include::{generated}/validity/structs/VkComponentMapping.adoc[]
+--
+
+[open,refpage='VkComponentSwizzle',desc='Specify how a component is swizzled',type='enums']
+--
+Possible values of the members of slink:VkComponentMapping, specifying the
+component values placed in each component of the output vector, are:
+
+include::{generated}/api/enums/VkComponentSwizzle.adoc[]
+
+  * ename:VK_COMPONENT_SWIZZLE_IDENTITY specifies that the component is set
+    to the identity swizzle.
+  * ename:VK_COMPONENT_SWIZZLE_ZERO specifies that the component is set to
+    zero.
+  * ename:VK_COMPONENT_SWIZZLE_ONE specifies that the component is set to
+    either 1 or 1.0, depending on whether the type of the image view format
+    is integer or floating-point respectively, as determined by the
+    <<formats-definition,Format Definition>> section for each
+    elink:VkFormat.
+  * ename:VK_COMPONENT_SWIZZLE_R specifies that the component is set to the
+    value of the R component of the image.
+  * ename:VK_COMPONENT_SWIZZLE_G specifies that the component is set to the
+    value of the G component of the image.
+  * ename:VK_COMPONENT_SWIZZLE_B specifies that the component is set to the
+    value of the B component of the image.
+  * ename:VK_COMPONENT_SWIZZLE_A specifies that the component is set to the
+    value of the A component of the image.
+
+[[resources-image-views-identity-mappings]]
+Setting the identity swizzle on a component is equivalent to setting the
+identity mapping on that component.
+That is:
+
+.Component Mappings Equivalent To ename:VK_COMPONENT_SWIZZLE_IDENTITY
+[options="header"]
+|====
+| Component          | Identity Mapping
+| pname:components.r | ename:VK_COMPONENT_SWIZZLE_R
+| pname:components.g | ename:VK_COMPONENT_SWIZZLE_G
+| pname:components.b | ename:VK_COMPONENT_SWIZZLE_B
+| pname:components.a | ename:VK_COMPONENT_SWIZZLE_A
+|====
+--
+
+ifdef::VK_EXT_astc_decode_mode[]
+[open,refpage='VkImageViewASTCDecodeModeEXT',desc='Structure describing the ASTC decode mode for an image view',type='structs']
+--
+If the pname:pNext chain includes a sname:VkImageViewASTCDecodeModeEXT
+structure, then that structure includes a parameter specifying the decode
+mode for image views using ASTC compressed formats.
+
+The sname:VkImageViewASTCDecodeModeEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageViewASTCDecodeModeEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:decodeMode is the intermediate format used to decode ASTC
+    compressed formats.
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02230]]
+    pname:decodeMode must: be one of ename:VK_FORMAT_R16G16B16A16_SFLOAT,
+    ename:VK_FORMAT_R8G8B8A8_UNORM, or
+    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231]]
+    If the <<features-astc-decodeModeSharedExponent,
+    pname:decodeModeSharedExponent>> feature is not enabled,
+    pname:decodeMode must: not be ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+  * [[VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232]]
+    If pname:decodeMode is ename:VK_FORMAT_R8G8B8A8_UNORM the image view
+    must: not include blocks using any of the ASTC HDR modes
+  * [[VUID-VkImageViewASTCDecodeModeEXT-format-04084]]
+    pname:format of the image view must: be one of the
+    <<appendix-compressedtex-astc, ASTC Compressed Image Formats>>
+****
+
+If pname:format uses sRGB encoding then the pname:decodeMode has no effect.
+
+include::{generated}/validity/structs/VkImageViewASTCDecodeModeEXT.adoc[]
+--
+endif::VK_EXT_astc_decode_mode[]
+
+ifdef::VK_QCOM_image_processing[]
+[open,refpage='VkImageViewSampleWeightCreateInfoQCOM',desc='Structure describing weight sampling parameters for image view',type='structs']
+--
+If the pname:pNext chain includes a
+sname:VkImageViewSampleWeightCreateInfoQCOM structure, then that structure
+includes a parameter specifying the parameters for weight image views used
+in <<textures-weightimage,weight image sampling>>.
+
+The sname:VkImageViewSampleWeightCreateInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkImageViewSampleWeightCreateInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:filterCenter is a slink:VkOffset2D describing the location of the
+    weight filter origin.
+  * pname:filterSize is a slink:VkExtent2D specifying weight filter
+    dimensions.
+  * pname:numPhases is number of sub-pixel filter phases.
+
+
+The pname:filterCenter specifies the origin or center of the filter kernel,
+as described in <<textures-weightimage-filteroperation, Weight Sampling
+Operation>>.
+The pname:numPhases describes the number of sub-pixel filter phases as
+described in <<textures-weightimage-filterphases,Weight Sampling Phases>>.
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-filterSize-06958]]
+    pname:filterSize.width must: be less than or equal to
+    <<limits-weightfilter-maxdimension,
+    sname:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterDimension.width>>
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-filterSize-06959]]
+    pname:filterSize.height must: be less than or equal to
+    <<limits-weightfilter-maxdimension,
+    sname:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterDimension.height>>
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-filterCenter-06960]]
+    pname:filterCenter.x must: be less than or equal to
+    [eq]#(filterSize.width - 1)#
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-filterCenter-06961]]
+    pname:filterCenter.y must: be less than or equal to
+    [eq]#(filterSize.height - 1)#
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-numPhases-06962]]
+    pname:numPhases must: be a power of two squared value (i.e., 1, 4, 16,
+    64, 256, etc.)
+  * [[VUID-VkImageViewSampleWeightCreateInfoQCOM-numPhases-06963]]
+    pname:numPhases must: be less than or equal to
+    <<limits-weightfilter-phases,
+    sname:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterPhases>>
+****
+
+
+include::{generated}/validity/structs/VkImageViewSampleWeightCreateInfoQCOM.adoc[]
+--
+endif::VK_QCOM_image_processing[]
+
+
+[open,refpage='vkDestroyImageView',desc='Destroy an image view object',type='protos']
+--
+To destroy an image view, call:
+
+include::{generated}/api/protos/vkDestroyImageView.adoc[]
+
+  * pname:device is the logical device that destroys the image view.
+  * pname:imageView is the image view to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyImageView-imageView-01026]]
+    All submitted commands that refer to pname:imageView must: have
+    completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyImageView-imageView-01027]]
+    If sname:VkAllocationCallbacks were provided when pname:imageView was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyImageView-imageView-01028]]
+    If no sname:VkAllocationCallbacks were provided when pname:imageView was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyImageView.adoc[]
+--
+
+ifdef::VK_NVX_image_view_handle[]
+[open,refpage='vkGetImageViewHandleNVX',desc='Get the handle for an image view for a specific descriptor type',type='protos']
+--
+To get the handle for an image view, call:
+
+include::{generated}/api/protos/vkGetImageViewHandleNVX.adoc[]
+
+  * pname:device is the logical device that owns the image view.
+  * pname:pInfo describes the image view to query and type of handle.
+
+include::{generated}/validity/protos/vkGetImageViewHandleNVX.adoc[]
+--
+
+[open,refpage='VkImageViewHandleInfoNVX',desc='Structure specifying the image view for handle queries',type='structs']
+--
+The sname:VkImageViewHandleInfoNVX structure is defined as:
+
+include::{generated}/api/structs/VkImageViewHandleInfoNVX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageView is the image view to query.
+  * pname:descriptorType is the type of descriptor for which to query a
+    handle.
+  * pname:sampler is the sampler to combine with the image view when
+    generating the handle.
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewHandleInfoNVX-descriptorType-02654]]
+    pname:descriptorType must: be ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+  * [[VUID-VkImageViewHandleInfoNVX-sampler-02655]]
+    pname:sampler must: be a valid slink:VkSampler if pname:descriptorType
+    is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+  * [[VUID-VkImageViewHandleInfoNVX-imageView-02656]]
+    If descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the image that
+    pname:imageView was created from must: have been created with the
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT usage bit set
+  * [[VUID-VkImageViewHandleInfoNVX-imageView-02657]]
+    If descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the image
+    that pname:imageView was created from must: have been created with the
+    ename:VK_IMAGE_USAGE_STORAGE_BIT usage bit set
+****
+
+include::{generated}/validity/structs/VkImageViewHandleInfoNVX.adoc[]
+--
+
+[open,refpage='vkGetImageViewAddressNVX',desc='Get the device address of an image view',type='protos']
+--
+To get the device address for an image view, call:
+
+include::{generated}/api/protos/vkGetImageViewAddressNVX.adoc[]
+
+  * pname:device is the logical device that owns the image view.
+  * pname:imageView is a handle to the image view.
+  * pname:pProperties contains the device address and size when the call
+    returns.
+
+include::{generated}/validity/protos/vkGetImageViewAddressNVX.adoc[]
+--
+
+[open,refpage='VkImageViewAddressPropertiesNVX',desc='Structure specifying the image view for handle queries',type='structs']
+--
+The sname:VkImageViewAddressPropertiesNVX structure is defined as:
+
+include::{generated}/api/structs/VkImageViewAddressPropertiesNVX.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceAddress is the device address of the image view.
+  * pname:size is the size in bytes of the image view device memory.
+
+
+include::{generated}/validity/structs/VkImageViewAddressPropertiesNVX.adoc[]
+--
+endif::VK_NVX_image_view_handle[]
+
+
+[[resources-image-view-format-features]]
+=== Image View Format Features
+
+Valid uses of a slink:VkImageView may: depend on the image view's _format
+features_, defined below.
+Such constraints are documented in the affected valid usage statement.
+
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with
+    ename:VK_IMAGE_TILING_LINEAR, then the image view's set of _format
+    features_ is the value of
+    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkImageViewCreateInfo::pname:format.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * If Vulkan 1.3 is supported or the `apiext:VK_KHR_format_feature_flags2`
+    extension is supported, and slink:VkImageViewCreateInfo::pname:image was
+    created with ename:VK_IMAGE_TILING_LINEAR, then the image view's set of
+    _format features_ is the value of
+    slink:VkFormatProperties3::pname:linearTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties2 on the same pname:format as
+    slink:VkImageViewCreateInfo::pname:format.
+  * If Vulkan 1.3 is not supported and the
+    `apiext:VK_KHR_format_feature_flags2` extension is not supported, and
+    slink:VkImageViewCreateInfo::pname:image was created with
+    ename:VK_IMAGE_TILING_LINEAR, then the image view's set of _format
+    features_ is the union of the value of
+    slink:VkFormatProperties::pname:linearTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkImageViewCreateInfo::pname:format, with:
+  ** ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT if the
+     format is a depth/stencil format and the image view features also
+     contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT.
+  ** ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT if the format
+     is one of the <<formats-without-shader-storage-format,extended storage
+     formats>> and pname:shaderStorageImageReadWithoutFormat is enabled on
+     the device.
+  ** ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT if the
+     format is one of the <<formats-without-shader-storage-format,extended
+     storage formats>> and pname:shaderStorageImageWriteWithoutFormat is
+     enabled on the device.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with
+    ename:VK_IMAGE_TILING_OPTIMAL,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+    or a <<memory-external-screen-buffer-external-formats,QNX Screen buffer
+    external format>>,
+endif::VK_QNX_external_memory_screen_buffer[]
+    then the image view's set of _format features_ is the value of
+    slink:VkFormatProperties::pname:optimalTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties on the same pname:format as
+    slink:VkImageViewCreateInfo::pname:format.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * If Vulkan 1.3 is supported or the `apiext:VK_KHR_format_feature_flags2`
+    extension is supported, and slink:VkImageViewCreateInfo::pname:image was
+    created with ename:VK_IMAGE_TILING_OPTIMAL,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+    or a <<memory-external-screen-buffer-external-formats,QNX Screen buffer
+    external format>>,
+endif::VK_QNX_external_memory_screen_buffer[]
+    then the image view's set of _format features_ is the value of
+    slink:VkFormatProperties::pname:optimalTilingFeatures or
+    slink:VkFormatProperties3::pname:optimalTilingFeatures found by calling
+    flink:vkGetPhysicalDeviceFormatProperties or
+    flink:vkGetPhysicalDeviceImageFormatProperties2 on the same pname:format
+    as slink:VkImageViewCreateInfo::pname:format.
+  * If Vulkan 1.3 is not supported and the
+    `apiext:VK_KHR_format_feature_flags2` extension is not supported, and
+    slink:VkImageViewCreateInfo::pname:image was created with
+    ename:VK_IMAGE_TILING_OPTIMAL,
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    but without an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+    or a <<memory-external-screen-buffer-external-formats,QNX Screen buffer
+    external format>>,
+endif::VK_QNX_external_memory_screen_buffer[]
+    then the image view's set of _format features_ is the union of the value
+    of slink:VkFormatProperties::pname:optimalTilingFeatures found by
+    calling flink:vkGetPhysicalDeviceFormatProperties on the same
+    pname:format as slink:VkImageViewCreateInfo::pname:format, with:
+  ** ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT if the
+     format is a depth/stencil format and the image view features also
+     contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT.
+  ** ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT if the format
+     is one of the <<formats-without-shader-storage-format,extended storage
+     formats>> and pname:shaderStorageImageReadWithoutFormat is enabled on
+     the device.
+  ** ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT if the
+     format is one of the <<formats-without-shader-storage-format,extended
+     storage formats>> and pname:shaderStorageImageWriteWithoutFormat is
+     enabled on the device.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with an
+    <<memory-external-android-hardware-buffer-external-formats,Android
+    hardware buffer external format>>, then the image views's set of _format
+    features_ is the value of
+    slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+    found by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID on
+    the Android hardware buffer that was imported to the
+    slink:VkDeviceMemory to which the
+    slink:VkImageViewCreateInfo::pname:image is bound.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with a
+    <<memory-external-screen-buffer-external-formats,QNX Screen buffer
+    external format>>, then the image views's set of _format features_ is
+    the value of
+    slink:VkScreenBufferFormatPropertiesQNX::pname:formatFeatures found by
+    calling flink:vkGetScreenBufferPropertiesQNX on the QNX Screen buffer
+    that was imported to the slink:VkDeviceMemory to which the
+    slink:VkImageViewCreateInfo::pname:image is bound.
+endif::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with a chained
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA, then the image view's
+    set of _format features_ is the value of
+    slink:VkBufferCollectionPropertiesFUCHSIA::pname:formatFeatures found by
+    calling flink:vkGetBufferCollectionPropertiesFUCHSIA on the buffer
+    collection passed as
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA::pname:collection when
+    the image was created.
+endif::VK_FUCHSIA_buffer_collection[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * If slink:VkImageViewCreateInfo::pname:image was created with
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then:
+  ** The image's DRM format modifier is the value of
+     slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier
+     found by calling flink:vkGetImageDrmFormatModifierPropertiesEXT.
+  ** Let
+     slink:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties
+     be the array found by calling
+     flink:vkGetPhysicalDeviceFormatProperties2 on the same pname:format as
+     slink:VkImageViewCreateInfo::pname:format.
+  ** Let `VkDrmFormatModifierPropertiesEXT prop` be the array element whose
+     pname:drmFormatModifier member is the value of the image's DRM format
+     modifier.
+  ** Then the image view's set of _format features_ is
+     `prop`::pname:drmFormatModifierTilingFeatures.
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_EXT_image_view_min_lod[]
+[open,refpage='VkImageViewMinLodCreateInfoEXT',desc='Structure describing the minimum LOD of an image view',type='structs']
+--
+The sname:VkImageViewMinLodCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkImageViewMinLodCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:minLod is the value to clamp the minimum LOD accessible by this
+    slink:VkImageView.
+
+If the pname:pNext chain includes a sname:VkImageViewMinLodCreateInfoEXT
+structure, then that structure includes a parameter specifying a value to
+clamp the minimum LOD value during <<textures-image-level-selection,Image
+Level(s) Selection>>, <<textures-gather,Texel Gathering>> and
+<<textures-integer-coordinate-operations,Integer Texel Coordinate
+Operations>>.
+
+If the image view contains sname:VkImageViewMinLodCreateInfoEXT and it is
+used as part of a sampling operation:
+
+[eq]#minLodFloat~imageView~ = pname:minLod#
+
+otherwise:
+
+[eq]#minLodFloat~imageView~ = 0.0#
+
+An integer variant of this parameter is also defined for sampling operations
+which access integer mipmap levels:
+
+[eq]#minLodInteger~imageView~ = {lfloor}minLodFloat~imageView~{rfloor}#
+
+.Valid Usage
+****
+  * [[VUID-VkImageViewMinLodCreateInfoEXT-minLod-06455]]
+    If the <<features-minLod, pname:minLod>> feature is not enabled,
+    pname:minLod must: be `0.0`
+  * [[VUID-VkImageViewMinLodCreateInfoEXT-minLod-06456]]
+    pname:minLod must: be less or equal to the index of the last mipmap
+    level accessible to the view
+****
+
+include::{generated}/validity/structs/VkImageViewMinLodCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_image_view_min_lod[]
+
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+[[resources-acceleration-structures]]
+== Acceleration Structures
+
+[open,refpage='VkAccelerationStructureKHR',desc='Opaque handle to an acceleration structure object',type='handles']
+--
+:refpage: VkAccelerationStructureKHR
+
+Acceleration structures are opaque data structures that are built by the
+implementation to more efficiently perform spatial queries on the provided
+geometric data.
+For this extension, an acceleration structure is either a top-level
+acceleration structure containing a set of bottom-level acceleration
+structures or a bottom-level acceleration structure containing either a set
+of axis-aligned bounding boxes for custom geometry or a set of triangles.
+
+Each instance in the top-level acceleration structure contains a reference
+to a bottom-level acceleration structure as well as an instance transform
+plus information required to index into the shader bindings.
+The top-level acceleration structure is what is bound to the acceleration
+descriptor, for example to trace inside the shader in the ray tracing
+pipeline.
+
+Acceleration structures are represented by sname:VkAccelerationStructureKHR
+handles:
+
+include::{generated}/api/handles/VkAccelerationStructureKHR.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkAccelerationStructureNV',desc='Opaque handle to an acceleration structure object',type='handles']
+--
+:refpage: VkAccelerationStructureNV
+
+Acceleration structures for the `apiext:VK_NV_ray_tracing extension` are
+represented by the similar sname:VkAccelerationStructureNV handles:
+
+include::{generated}/api/handles/VkAccelerationStructureNV.adoc[]
+--
+
+[open,refpage='vkCreateAccelerationStructureNV',desc='Create a new acceleration structure object',type='protos']
+--
+:refpage: vkCreateAccelerationStructureNV
+
+To create acceleration structures, call:
+
+include::{generated}/api/protos/vkCreateAccelerationStructureNV.adoc[]
+
+  * pname:device is the logical device that creates the buffer object.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkAccelerationStructureCreateInfoNV structure containing
+    parameters affecting creation of the acceleration structure.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pAccelerationStructure is a pointer to a
+    slink:VkAccelerationStructureNV handle in which the resulting
+    acceleration structure object is returned.
+
+Similarly to other objects in Vulkan, the acceleration structure creation
+merely creates an object with a specific "`shape`" as specified by the
+information in slink:VkAccelerationStructureInfoNV and pname:compactedSize
+in pname:pCreateInfo.
+
+Once memory has been bound to the acceleration structure using
+flink:vkBindAccelerationStructureMemoryNV, that memory is populated by calls
+to flink:vkCmdBuildAccelerationStructureNV and
+flink:vkCmdCopyAccelerationStructureNV.
+
+Acceleration structure creation uses the count and type information from the
+geometries, but does not use the data references in the structures.
+
+include::{generated}/validity/protos/vkCreateAccelerationStructureNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureCreateInfoNV',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
+--
+:refpage: VkAccelerationStructureCreateInfoNV
+
+The sname:VkAccelerationStructureCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:compactedSize is the size from the result of
+    flink:vkCmdWriteAccelerationStructuresPropertiesNV if this acceleration
+    structure is going to be the target of a compacting copy.
+  * pname:info is the slink:VkAccelerationStructureInfoNV structure
+    specifying further parameters of the created acceleration structure.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421]]
+    If pname:compactedSize is not `0` then both pname:info.geometryCount and
+    pname:info.instanceCount must: be `0`
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureInfoNV',desc='Structure specifying the parameters of acceleration structure object',type='structs']
+--
+:refpage: VkAccelerationStructureInfoNV
+
+The sname:VkAccelerationStructureInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type is a elink:VkAccelerationStructureTypeNV value specifying the
+    type of acceleration structure that will be created.
+  * pname:flags is a bitmask of elink:VkBuildAccelerationStructureFlagBitsNV
+    specifying additional parameters of the acceleration structure.
+  * pname:instanceCount specifies the number of instances that will be in
+    the new acceleration structure.
+  * pname:geometryCount specifies the number of geometries that will be in
+    the new acceleration structure.
+  * pname:pGeometries is a pointer to an array of pname:geometryCount
+    slink:VkGeometryNV structures containing the scene data being passed
+    into the acceleration structure.
+
+sname:VkAccelerationStructureInfoNV contains information that is used both
+for acceleration structure creation with
+flink:vkCreateAccelerationStructureNV and in combination with the actual
+geometric data to build the acceleration structure with
+flink:vkCmdBuildAccelerationStructureNV.
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureInfoNV-geometryCount-02422]]
+    pname:geometryCount must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxGeometryCount
+  * [[VUID-VkAccelerationStructureInfoNV-instanceCount-02423]]
+    pname:instanceCount must: be less than or equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxInstanceCount
+  * [[VUID-VkAccelerationStructureInfoNV-maxTriangleCount-02424]]
+    The total number of triangles in all geometries must: be less than or
+    equal to
+    slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxTriangleCount
+  * [[VUID-VkAccelerationStructureInfoNV-type-02425]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV then
+    pname:geometryCount must: be `0`
+  * [[VUID-VkAccelerationStructureInfoNV-type-02426]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
+    then pname:instanceCount must: be `0`
+  * [[VUID-VkAccelerationStructureInfoNV-type-02786]]
+    If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
+    then the pname:geometryType member of each geometry in pname:pGeometries
+    must: be the same
+ifdef::VK_KHR_acceleration_structure[]
+  * [[VUID-VkAccelerationStructureInfoNV-type-04623]]
+    pname:type must: not be ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
+endif::VK_KHR_acceleration_structure[]
+  * [[VUID-VkAccelerationStructureInfoNV-flags-02592]]
+    If pname:flags has the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV bit set,
+    then it must: not have the
+    ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV bit set
+  * [[VUID-VkAccelerationStructureInfoNV-scratch-02781]]
+    pname:scratch must: have been created with
+    ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag
+  * [[VUID-VkAccelerationStructureInfoNV-instanceData-02782]]
+    If pname:instanceData is not dlink:VK_NULL_HANDLE, pname:instanceData
+    must: have been created with ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV
+    usage flag
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureInfoNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='vkCreateAccelerationStructureKHR',desc='Create a new acceleration structure object',type='protos']
+--
+:refpage: vkCreateAccelerationStructureKHR
+
+To create an acceleration structure, call:
+
+include::{generated}/api/protos/vkCreateAccelerationStructureKHR.adoc[]
+
+  * pname:device is the logical device that creates the acceleration
+    structure object.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkAccelerationStructureCreateInfoKHR structure containing
+    parameters affecting creation of the acceleration structure.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pAccelerationStructure is a pointer to a
+    sname:VkAccelerationStructureKHR handle in which the resulting
+    acceleration structure object is returned.
+
+Similar to other objects in Vulkan, the acceleration structure creation
+merely creates an object with a specific "`shape`".
+The type and quantity of geometry that can be built into an acceleration
+structure is determined by the parameters of
+slink:VkAccelerationStructureCreateInfoKHR.
+
+The acceleration structure data is stored in the object referred to by
+sname:VkAccelerationStructureCreateInfoKHR::pname:buffer.
+Once memory has been bound to that buffer, it must: be populated by
+acceleration structure build or acceleration structure copy commands such as
+flink:vkCmdBuildAccelerationStructuresKHR,
+flink:vkBuildAccelerationStructuresKHR,
+flink:vkCmdCopyAccelerationStructureKHR, and
+flink:vkCopyAccelerationStructureKHR.
+
+[NOTE]
+.Note
+====
+The expected usage for a trace capture/replay tool is that it will serialize
+and later deserialize the acceleration structure data using acceleration
+structure copy commands.
+During capture the tool will use
+flink:vkCopyAccelerationStructureToMemoryKHR or
+flink:vkCmdCopyAccelerationStructureToMemoryKHR with a pname:mode of
+ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, and
+flink:vkCopyMemoryToAccelerationStructureKHR or
+flink:vkCmdCopyMemoryToAccelerationStructureKHR with a pname:mode of
+ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR during replay.
+====
+
+The input buffers passed to acceleration structure build commands will be
+referenced by the implementation for the duration of the command.
+After the command completes, the acceleration structure may: hold a
+reference to any acceleration structure specified by an active instance
+contained therein.
+Apart from this referencing, acceleration structures must: be fully
+self-contained.
+The application can: reuse or free any memory which was used by the command
+as an input or as scratch without affecting the results of ray traversal.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateAccelerationStructureKHR-accelerationStructure-03611]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488]]
+    If slink:VkAccelerationStructureCreateInfoKHR::pname:deviceAddress is
+    not zero, the <<features-accelerationStructureCaptureReplay,
+    pname:accelerationStructureCaptureReplay>> feature must: be enabled
+  * [[VUID-vkCreateAccelerationStructureKHR-device-03489]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateAccelerationStructureKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureCreateInfoKHR',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
+--
+:refpage: VkAccelerationStructureCreateInfoKHR
+
+The sname:VkAccelerationStructureCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:createFlags is a bitmask of
+    elink:VkAccelerationStructureCreateFlagBitsKHR specifying additional
+    creation parameters of the acceleration structure.
+  * pname:buffer is the buffer on which the acceleration structure will be
+    stored.
+  * pname:offset is an offset in bytes from the base address of the buffer
+    at which the acceleration structure will be stored, and must: be a
+    multiple of `256`.
+  * pname:size is the size required for the acceleration structure.
+  * pname:type is a elink:VkAccelerationStructureTypeKHR value specifying
+    the type of acceleration structure that will be created.
+  * pname:deviceAddress is the device address requested for the acceleration
+    structure if the <<features-accelerationStructureCaptureReplay,
+    pname:accelerationStructureCaptureReplay>> feature is being used.
+
+If pname:deviceAddress is zero, no specific address is requested.
+
+If pname:deviceAddress is not zero, pname:deviceAddress must: be an address
+retrieved from an identically created acceleration structure on the same
+implementation.
+The acceleration structure must: also be placed on an identically created
+pname:buffer and at the same pname:offset.
+
+Applications should: avoid creating acceleration structures with
+application-provided addresses and implementation-provided addresses in the
+same process, to reduce the likelihood of
+ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR errors.
+
+[NOTE]
+.Note
+====
+The expected usage for this is that a trace capture/replay tool will add the
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag to all buffers
+that use ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, and will add
+ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT to all buffers used as
+storage for an acceleration structure where pname:deviceAddress is not zero.
+This also means that the tool will need to add
+ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT to memory allocations to allow
+the flag to be set where the application may not have otherwise required it.
+During capture the tool will save the queried opaque device addresses in the
+trace.
+During replay, the buffers will be created specifying the original address
+so any address values stored in the trace data will remain valid.
+
+Implementations are expected to separate such buffers in the GPU address
+space so normal allocations will avoid using these addresses.
+Apps/tools should avoid mixing app-provided and implementation-provided
+addresses for buffers created with
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address
+space allocation conflicts.
+====
+
+
+Applications should: create an acceleration structure with a specific
+elink:VkAccelerationStructureTypeKHR other than
+ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR.
+
+[NOTE]
+.Note
+====
+ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR is intended to be used by
+API translation layers.
+This can be used at acceleration structure creation time in cases where the
+actual acceleration structure type (top or bottom) is not yet known.
+The actual acceleration structure type must be specified as
+ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
+ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR when the build is
+performed.
+====
+
+If the acceleration structure will be the target of a build operation, the
+required size for an acceleration structure can: be queried with
+flink:vkGetAccelerationStructureBuildSizesKHR.
+If the acceleration structure is going to be the target of a compacting
+copy, flink:vkCmdWriteAccelerationStructuresPropertiesKHR or
+flink:vkWriteAccelerationStructuresPropertiesKHR can: be used to obtain the
+compacted size required.
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+If the acceleration structure will be the target of a build operation with
+ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV it must: include
+ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV in pname:createFlags
+and include slink:VkAccelerationStructureMotionInfoNV as an extension
+structure in pname:pNext with the number of instances as metadata for the
+object.
+endif::VK_NV_ray_tracing_motion_blur[]
+
+.Valid Usage
+****
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612]]
+    If pname:deviceAddress is not zero, pname:createFlags must: include
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-createFlags-03613]]
+    If pname:createFlags includes
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR,
+    slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureCaptureReplay
+    must: be ename:VK_TRUE
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-buffer-03614]]
+    pname:buffer must: have been created with a pname:usage value containing
+    ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-buffer-03615]]
+    pname:buffer must: not have been created with
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-offset-03616]]
+    The sum of pname:offset and pname:size must: be less than the size of
+    pname:buffer
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-offset-03734]]
+    pname:offset must: be a multiple of `256` bytes
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-createFlags-04954]]
+    If ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV is set in
+    pname:createFlags and pname:type is
+    ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, one member of the
+    pname:pNext chain must: be a pointer to a valid instance of
+    slink:VkAccelerationStructureMotionInfoNV
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-createFlags-04955]]
+    If any geometry includes
+    sname:VkAccelerationStructureGeometryMotionTrianglesDataNV then
+    pname:createFlags must: contain
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV
+endif::VK_NV_ray_tracing_motion_blur[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-createFlags-08108]]
+    If pname:createFlags includes
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT,
+    the <<features-descriptorBufferCaptureReplay,
+    pname:descriptorBufferCaptureReplay>> feature must: be enabled
+  * [[VUID-VkAccelerationStructureCreateInfoKHR-pNext-08109]]
+    If the pname:pNext chain includes a
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure,
+    pname:createFlags must: contain
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureCreateInfoKHR.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing_motion_blur[]
+[open,refpage='VkAccelerationStructureMotionInfoNV',desc='Structure specifying the parameters of a newly created acceleration structure object',type='structs']
+--
+:refpage: VkAccelerationStructureMotionInfoNV
+
+The sname:VkAccelerationStructureMotionInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureMotionInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxInstances is the maximum number of instances that may: be used
+    in the motion top-level acceleration structure.
+  * pname:flags is 0 and reserved for future use.
+
+include::{generated}/validity/structs/VkAccelerationStructureMotionInfoNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureMotionInfoFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureMotionInfoFlagsNV.adoc[]
+
+tname:VkAccelerationStructureMotionInfoFlagsNV is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+[open,refpage='vkGetAccelerationStructureBuildSizesKHR',desc='Retrieve the required size for an acceleration structure',type='protos']
+--
+:refpage: vkGetAccelerationStructureBuildSizesKHR
+
+To get the build sizes for an acceleration structure, call:
+
+include::{generated}/api/protos/vkGetAccelerationStructureBuildSizesKHR.adoc[]
+
+  * pname:device is the logical device that will be used for creating the
+    acceleration structure.
+  * pname:buildType defines whether host or device operations (or both) are
+    being queried for.
+  * pname:pBuildInfo is a pointer to a
+    slink:VkAccelerationStructureBuildGeometryInfoKHR structure describing
+    parameters of a build operation.
+  * pname:pMaxPrimitiveCounts is a pointer to an array of
+    pname:pBuildInfo->geometryCount code:uint32_t values defining the number
+    of primitives built into each geometry.
+  * pname:pSizeInfo is a pointer to a
+    slink:VkAccelerationStructureBuildSizesInfoKHR structure which returns
+    the size required for an acceleration structure and the sizes required
+    for the scratch buffers, given the build parameters.
+
+The pname:srcAccelerationStructure, pname:dstAccelerationStructure, and
+pname:mode members of pname:pBuildInfo are ignored.
+Any slink:VkDeviceOrHostAddressKHR or slink:VkDeviceOrHostAddressConstKHR
+members of pname:pBuildInfo are ignored by this command, except that the
+pname:hostAddress member of
+slink:VkAccelerationStructureGeometryTrianglesDataKHR::pname:transformData
+will be examined to check if it is `NULL`.
+
+An acceleration structure created with the pname:accelerationStructureSize
+returned by this command supports any build or update with a
+slink:VkAccelerationStructureBuildGeometryInfoKHR structure and array of
+slink:VkAccelerationStructureBuildRangeInfoKHR structures subject to the
+following properties:
+
+  * The build command is a host build command, and pname:buildType is
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
+  * The build command is a device build command, and pname:buildType is
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
+  * For slink:VkAccelerationStructureBuildGeometryInfoKHR:
+  ** Its pname:type, and pname:flags members are equal to
+     pname:pBuildInfo->type and pname:pBuildInfo->flags, respectively.
+  ** pname:geometryCount is less than or equal to
+     pname:pBuildInfo->geometryCount.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, its pname:geometryType member is equal to
+     pname:pBuildInfo->geometryType.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, its pname:flags member is equal to the corresponding
+     member of the same element in pname:pBuildInfo.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, with a pname:geometryType member equal to
+     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the pname:vertexFormat and
+     pname:indexType members of pname:geometry.triangles are equal to the
+     corresponding members of the same element in pname:pBuildInfo.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, with a pname:geometryType member equal to
+     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, the pname:maxVertex member of
+     pname:geometry.triangles is less than or equal to the corresponding
+     member of the same element in pname:pBuildInfo.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, with a pname:geometryType member equal to
+     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the applicable address in the
+     pname:transformData member of pname:geometry.triangles is not `NULL`,
+     the corresponding pname:transformData.hostAddress parameter in
+     pname:pBuildInfo is not `NULL`.
+  * For each slink:VkAccelerationStructureBuildRangeInfoKHR corresponding to
+    the slink:VkAccelerationStructureBuildGeometryInfoKHR:
+  ** Its pname:primitiveCount member is less than or equal to the
+     corresponding element of pname:pMaxPrimitiveCounts.
+ifdef::VK_EXT_opacity_micromap[]
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, with a pname:geometryType member equal to
+     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the pname:pNext chain contains
+     slink:VkAccelerationStructureTrianglesOpacityMicromapEXT the
+     corresponding member of pname:pBuildInfo also contains
+     slink:VkAccelerationStructureTrianglesOpacityMicromapEXT and with an
+     equivalent pname:micromap.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_NV_displacement_micromap[]
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, with a pname:geometryType member equal to
+     ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the pname:pNext chain contains
+     slink:VkAccelerationStructureTrianglesDisplacementMicromapNV the
+     corresponding member of pname:pBuildInfo also contains
+     slink:VkAccelerationStructureTrianglesDisplacementMicromapNV and with
+     an equivalent pname:micromap.
+endif::VK_NV_displacement_micromap[]
+
+Similarly, the pname:updateScratchSize value will support any build command
+specifying the ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
+pname:mode under the above conditions, and the pname:buildScratchSize value
+will support any build command specifying the
+ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR pname:mode under the
+above conditions.
+
+.Valid Usage
+****
+  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-accelerationStructure-08933]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-device-03618]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03619]]
+    If pname:pBuildInfo->geometryCount is not `0`, pname:pMaxPrimitiveCounts
+    must: be a valid pointer to an array of pname:pBuildInfo->geometryCount
+    code:uint32_t values
+  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03785]]
+    If pname:pBuildInfo->pGeometries or pname:pBuildInfo->ppGeometries has a
+    pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
+    pname:pMaxPrimitiveCounts[i] must: be less than or equal to
+    slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxInstanceCount
+****
+
+include::{generated}/validity/protos/vkGetAccelerationStructureBuildSizesKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureBuildSizesInfoKHR',desc='Structure specifying build sizes for an acceleration structure',type='structs']
+--
+:refpage: VkAccelerationStructureBuildSizesInfoKHR
+
+The sname:VkAccelerationStructureBuildSizesInfoKHR structure describes the
+required build sizes for an acceleration structure and scratch buffers and
+is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureBuildSizesInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructureSize is the size in bytes required in a
+    slink:VkAccelerationStructureKHR for a build or update operation.
+  * pname:updateScratchSize is the size in bytes required in a scratch
+    buffer for an update operation.
+  * pname:buildScratchSize is the size in bytes required in a scratch buffer
+    for a build operation.
+
+include::{generated}/validity/structs/VkAccelerationStructureBuildSizesInfoKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkAccelerationStructureTypeKHR',desc='Type of acceleration structure',type='enums',alias='VkAccelerationStructureTypeNV']
+--
+:refpage: VkAccelerationStructureTypeKHR
+
+Values which can: be set in
+ifdef::VK_KHR_acceleration_structure[]
+slink:VkAccelerationStructureCreateInfoKHR::pname:type
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[]
+slink:VkAccelerationStructureInfoNV::pname:type
+endif::VK_NV_ray_tracing[]
+specifying the type of acceleration structure, are:
+
+include::{generated}/api/enums/VkAccelerationStructureTypeKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkAccelerationStructureTypeNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR is a top-level
+    acceleration structure containing instance data referring to
+    bottom-level acceleration structures.
+  * ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR is a bottom-level
+    acceleration structure containing the AABBs or geometry to be
+    intersected.
+  * ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR is an acceleration
+    structure whose type is determined at build time used for special
+    circumstances.
+    In these cases, the acceleration structure type is not known at creation
+    time, but must: be specified at build time as either top or bottom.
+--
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkAccelerationStructureCreateFlagBitsKHR',desc='Bitmask specifying additional creation parameters for acceleration structure',type='enums']
+--
+Bits which can: be set in
+slink:VkAccelerationStructureCreateInfoKHR::pname:createFlags, specifying
+additional creation parameters for acceleration structures, are:
+
+include::{generated}/api/enums/VkAccelerationStructureCreateFlagBitsKHR.adoc[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
+    specifies that the acceleration structure's address can: be saved and
+    reused on a subsequent run.
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    specifies that the acceleration structure can: be used with descriptor
+    buffers when capturing and replaying (e.g. for trace capture and
+    replay), see slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT for more
+    detail.
+endif::VK_EXT_descriptor_buffer[]
+--
+
+[open,refpage='VkAccelerationStructureCreateFlagsKHR',desc='Bitmask of VkAccelerationStructureCreateFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureCreateFlagsKHR.adoc[]
+
+tname:VkAccelerationStructureCreateFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkAccelerationStructureCreateFlagBitsKHR.
+--
+endif::VK_KHR_acceleration_structure[]
+
+[open,refpage='VkBuildAccelerationStructureFlagBitsKHR',desc='Bitmask specifying additional parameters for acceleration structure builds',type='enums',alias='VkBuildAccelerationStructureFlagBitsNV']
+--
+:refpage: VkBuildAccelerationStructureFlagBitsKHR
+
+Bits which can: be set in
+ifdef::VK_KHR_acceleration_structure[]
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:flags
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[]
+slink:VkAccelerationStructureInfoNV::pname:flags
+endif::VK_NV_ray_tracing[]
+specifying additional parameters for acceleration structure builds, are:
+
+include::{generated}/api/enums/VkBuildAccelerationStructureFlagBitsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkBuildAccelerationStructureFlagBitsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR indicates
+    that the specified acceleration structure can: be updated with
+ifdef::VK_KHR_acceleration_structure[]
+    a pname:mode of ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR in
+    slink:VkAccelerationStructureBuildGeometryInfoKHR
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_KHR_acceleration_structure+VK_NV_ray_tracing[or]
+ifdef::VK_NV_ray_tracing[]
+    an pname:update of ename:VK_TRUE in
+    flink:vkCmdBuildAccelerationStructureNV
+endif::VK_NV_ray_tracing[]
+    .
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR indicates
+    that the specified acceleration structure can: act as the source for a
+    copy acceleration structure command with pname:mode of
+    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR to produce a
+    compacted acceleration structure.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
+    indicates that the given acceleration structure build should: prioritize
+    trace performance over build time.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
+    indicates that the given acceleration structure build should: prioritize
+    build time over trace performance.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR indicates that
+    this acceleration structure should: minimize the size of the scratch
+    memory and the final result acceleration structure, potentially at the
+    expense of build time or trace performance.
+ifdef::VK_EXT_opacity_micromap[]
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT
+    indicates that the opacity micromaps associated with the specified
+    acceleration structure may: change with an acceleration structure
+    update.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT
+    indicates that the data of the opacity micromaps associated with the
+    specified acceleration structure may: change with an acceleration
+    structure update.
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT
+    indicates that the specified acceleration structure may: be referenced
+    in an instance with
+    ename:VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT set.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_KHR_ray_tracing_position_fetch[]
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR indicates
+    that the specified acceleration structure can: be used when fetching the
+    vertex positions of a hit triangle.
+endif::VK_KHR_ray_tracing_position_fetch[]
+ifdef::VK_NV_displacement_micromap[]
+  * ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV
+    indicates that the displacement micromaps associated with the specified
+    acceleration structure may: change with an acceleration structure
+    update.
+endif::VK_NV_displacement_micromap[]
+
+[NOTE]
+.Note
+====
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR and
+ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR may: take
+more time and memory than a normal build, and so should: only be used when
+those features are needed.
+====
+--
+
+[open,refpage='VkBuildAccelerationStructureFlagsKHR',desc='Bitmask of VkBuildAccelerationStructureFlagBitsKHR',type='flags',alias='VkBuildAccelerationStructureFlagsNV']
+--
+:refpage: VkBuildAccelerationStructureFlagsKHR
+
+include::{generated}/api/flags/VkBuildAccelerationStructureFlagsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkBuildAccelerationStructureFlagsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+tname:VkBuildAccelerationStructureFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkBuildAccelerationStructureFlagBitsKHR.
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkGeometryNV',desc='Structure specifying a geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkGeometryNV
+
+The sname:VkGeometryNV structure describes geometry in a bottom-level
+acceleration structure and is defined as:
+
+include::{generated}/api/structs/VkGeometryNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:geometryType specifies the elink:VkGeometryTypeKHR which this
+    geometry refers to.
+  * pname:geometry contains the geometry data as described in
+    slink:VkGeometryDataNV.
+  * pname:flags has elink:VkGeometryFlagBitsKHR describing options for this
+    geometry.
+
+.Valid Usage
+****
+  * [[VUID-VkGeometryNV-geometryType-03503]]
+    pname:geometryType must: be ename:VK_GEOMETRY_TYPE_TRIANGLES_NV or
+    ename:VK_GEOMETRY_TYPE_AABBS_NV
+****
+
+include::{generated}/validity/structs/VkGeometryNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+[open,refpage='VkGeometryTypeKHR',desc='Enum specifying which type of geometry is provided',type='enums',alias='VkGeometryTypeNV']
+--
+:refpage: VkGeometryTypeKHR
+
+Geometry types are specified by elink:VkGeometryTypeKHR, which takes values:
+
+include::{generated}/api/enums/VkGeometryTypeKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryTypeNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR specifies a geometry type
+    consisting of triangles.
+  * ename:VK_GEOMETRY_TYPE_AABBS_KHR specifies a geometry type consisting of
+    axis-aligned bounding boxes.
+ifdef::VK_KHR_acceleration_structure[]
+  * ename:VK_GEOMETRY_TYPE_INSTANCES_KHR specifies a geometry type
+    consisting of acceleration structure instances.
+endif::VK_KHR_acceleration_structure[]
+--
+
+[open,refpage='VkGeometryFlagBitsKHR',desc='Bitmask specifying additional parameters for a geometry',type='enums',alias='VkGeometryFlagBitsNV']
+--
+:refpage: VkGeometryFlagBitsKHR
+
+Bits specifying additional parameters for geometries in acceleration
+structure builds, are:
+
+include::{generated}/api/enums/VkGeometryFlagBitsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryFlagBitsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+  * ename:VK_GEOMETRY_OPAQUE_BIT_KHR indicates that this geometry does not
+    invoke the any-hit shaders even if present in a hit group.
+  * ename:VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR indicates that
+    the implementation must: only call the any-hit shader a single time for
+    each primitive in this geometry.
+    If this bit is absent an implementation may: invoke the any-hit shader
+    more than once for this geometry.
+--
+
+[open,refpage='VkGeometryFlagsKHR',desc='Bitmask of VkGeometryFlagBitsKHR',type='flags',alias='VkGeometryFlagsNV']
+--
+:refpage: VkGeometryFlagsKHR
+
+include::{generated}/api/flags/VkGeometryFlagsKHR.adoc[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkGeometryFlagsNV.adoc[]
+endif::VK_NV_ray_tracing[]
+
+tname:VkGeometryFlagsKHR is a bitmask type for setting a mask of zero or
+more elink:VkGeometryFlagBitsKHR.
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='VkGeometryDataNV',desc='Structure specifying geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkGeometryDataNV
+
+The sname:VkGeometryDataNV structure specifies geometry in a bottom-level
+acceleration structure and is defined as:
+
+include::{generated}/api/structs/VkGeometryDataNV.adoc[]
+
+  * pname:triangles contains triangle data if
+    slink:VkGeometryNV::pname:geometryType is
+    ename:VK_GEOMETRY_TYPE_TRIANGLES_NV.
+  * pname:aabbs contains axis-aligned bounding box data if
+    slink:VkGeometryNV::pname:geometryType is
+    ename:VK_GEOMETRY_TYPE_AABBS_NV.
+
+include::{generated}/validity/structs/VkGeometryDataNV.adoc[]
+--
+
+[open,refpage='VkGeometryTrianglesNV',desc='Structure specifying a triangle geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkGeometryTrianglesNV
+
+The sname:VkGeometryTrianglesNV structure specifies triangle geometry in a
+bottom-level acceleration structure and is defined as:
+
+include::{generated}/api/structs/VkGeometryTrianglesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vertexData is the buffer containing vertex data for this geometry.
+  * pname:vertexOffset is the offset in bytes within pname:vertexData
+    containing vertex data for this geometry.
+  * pname:vertexCount is the number of valid vertices.
+  * pname:vertexStride is the stride in bytes between each vertex.
+  * pname:vertexFormat is a elink:VkFormat describing the format of each
+    vertex element.
+  * pname:indexData is the buffer containing index data for this geometry.
+  * pname:indexOffset is the offset in bytes within pname:indexData
+    containing index data for this geometry.
+  * pname:indexCount is the number of indices to include in this geometry.
+  * pname:indexType is a elink:VkIndexType describing the format of each
+    index.
+  * pname:transformData is an optional buffer containing an
+    slink:VkTransformMatrixNV structure defining a transformation to be
+    applied to this geometry.
+  * pname:transformOffset is the offset in bytes in pname:transformData of
+    the transform information described above.
+
+If pname:indexType is ename:VK_INDEX_TYPE_NONE_NV, then this structure
+describes a set of triangles determined by pname:vertexCount.
+Otherwise, this structure describes a set of indexed triangles determined by
+pname:indexCount.
+
+.Valid Usage
+****
+  * [[VUID-VkGeometryTrianglesNV-vertexOffset-02428]]
+    pname:vertexOffset must: be less than the size of pname:vertexData
+  * [[VUID-VkGeometryTrianglesNV-vertexOffset-02429]]
+    pname:vertexOffset must: be a multiple of the component size of
+    pname:vertexFormat
+  * [[VUID-VkGeometryTrianglesNV-vertexFormat-02430]]
+    pname:vertexFormat must: be one of ename:VK_FORMAT_R32G32B32_SFLOAT,
+    ename:VK_FORMAT_R32G32_SFLOAT, ename:VK_FORMAT_R16G16B16_SFLOAT,
+    ename:VK_FORMAT_R16G16_SFLOAT, ename:VK_FORMAT_R16G16_SNORM, or
+    ename:VK_FORMAT_R16G16B16_SNORM
+  * [[VUID-VkGeometryTrianglesNV-vertexStride-03818]]
+    pname:vertexStride must: be less than or equal to [eq]#2^32^-1#
+  * [[VUID-VkGeometryTrianglesNV-indexOffset-02431]]
+    pname:indexOffset must: be less than the size of pname:indexData
+  * [[VUID-VkGeometryTrianglesNV-indexOffset-02432]]
+    pname:indexOffset must: be a multiple of the element size of
+    pname:indexType
+  * [[VUID-VkGeometryTrianglesNV-indexType-02433]]
+    pname:indexType must: be ename:VK_INDEX_TYPE_UINT16,
+    ename:VK_INDEX_TYPE_UINT32, or ename:VK_INDEX_TYPE_NONE_NV
+  * [[VUID-VkGeometryTrianglesNV-indexData-02434]]
+    pname:indexData must: be dlink:VK_NULL_HANDLE if pname:indexType is
+    ename:VK_INDEX_TYPE_NONE_NV
+  * [[VUID-VkGeometryTrianglesNV-indexData-02435]]
+    pname:indexData must: be a valid sname:VkBuffer handle if
+    pname:indexType is not ename:VK_INDEX_TYPE_NONE_NV
+  * [[VUID-VkGeometryTrianglesNV-indexCount-02436]]
+    pname:indexCount must: be `0` if pname:indexType is
+    ename:VK_INDEX_TYPE_NONE_NV
+  * [[VUID-VkGeometryTrianglesNV-transformOffset-02437]]
+    pname:transformOffset must: be less than the size of pname:transformData
+  * [[VUID-VkGeometryTrianglesNV-transformOffset-02438]]
+    pname:transformOffset must: be a multiple of `16`
+****
+
+include::{generated}/validity/structs/VkGeometryTrianglesNV.adoc[]
+--
+
+[open,refpage='VkGeometryAABBNV',desc='Structure specifying axis-aligned bounding box geometry in a bottom-level acceleration structure',type='structs']
+--
+:refpage: VkGeometryAABBNV
+
+The sname:VkGeometryAABBNV structure specifies axis-aligned bounding box
+geometry in a bottom-level acceleration structure, and is defined as:
+
+include::{generated}/api/structs/VkGeometryAABBNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:aabbData is the buffer containing axis-aligned bounding box data.
+  * pname:numAABBs is the number of AABBs in this geometry.
+  * pname:stride is the stride in bytes between AABBs in pname:aabbData.
+  * pname:offset is the offset in bytes of the first AABB in pname:aabbData.
+
+The AABB data in memory is six 32-bit floats consisting of the minimum x, y,
+and z values followed by the maximum x, y, and z values.
+
+.Valid Usage
+****
+  * [[VUID-VkGeometryAABBNV-offset-02439]]
+    pname:offset must: be less than the size of pname:aabbData
+  * [[VUID-VkGeometryAABBNV-offset-02440]]
+    pname:offset must: be a multiple of `8`
+  * [[VUID-VkGeometryAABBNV-stride-02441]]
+    pname:stride must: be a multiple of `8`
+****
+
+include::{generated}/validity/structs/VkGeometryAABBNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+[open,refpage='vkDestroyAccelerationStructureKHR',desc='Destroy an acceleration structure object',type='protos']
+--
+:refpage: vkDestroyAccelerationStructureKHR
+
+To destroy an acceleration structure, call:
+
+ifdef::VK_KHR_acceleration_structure[]
+include::{generated}/api/protos/vkDestroyAccelerationStructureKHR.adoc[]
+endif::VK_KHR_acceleration_structure[]
+
+  * pname:device is the logical device that destroys the acceleration
+    structure.
+  * pname:accelerationStructure is the acceleration structure to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-08934]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442]]
+    All submitted commands that refer to pname:accelerationStructure must:
+    have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:accelerationStructure was created, a compatible set of callbacks
+    must: be provided here
+  * [[VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:accelerationStructure was created, pname:pAllocator must: be
+    `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyAccelerationStructureKHR.adoc[]
+--
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='vkDestroyAccelerationStructureNV',desc='Destroy an acceleration structure object',type='protos']
+--
+:refpage: vkDestroyAccelerationStructureNV
+
+To destroy an acceleration structure, call:
+
+include::{generated}/api/protos/vkDestroyAccelerationStructureNV.adoc[]
+
+  * pname:device is the logical device that destroys the buffer.
+  * pname:accelerationStructure is the acceleration structure to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03752]]
+    All submitted commands that refer to pname:accelerationStructure must:
+    have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03753]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:accelerationStructure was created, a compatible set of callbacks
+    must: be provided here
+  * [[VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03754]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:accelerationStructure was created, pname:pAllocator must: be
+    `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyAccelerationStructureNV.adoc[]
+--
+
+[open,refpage='vkGetAccelerationStructureMemoryRequirementsNV',desc='Get acceleration structure memory requirements',type='protos']
+--
+:refpage: vkGetAccelerationStructureMemoryRequirementsNV
+
+An acceleration structure has memory requirements for the structure object
+itself, scratch space for the build, and scratch space for the update.
+
+Scratch space is allocated as a sname:VkBuffer, so for
+ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
+and
+ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
+the pname:pMemoryRequirements->alignment and
+pname:pMemoryRequirements->memoryTypeBits values returned by this call must:
+be filled with zero, and should: be ignored by the application.
+
+To query the memory requirements, call:
+
+include::{generated}/api/protos/vkGetAccelerationStructureMemoryRequirementsNV.adoc[]
+
+  * pname:device is the logical device on which the acceleration structure
+    was created.
+  * pname:pInfo is a pointer to a
+    slink:VkAccelerationStructureMemoryRequirementsInfoNV structure
+    specifying the acceleration structure to get memory requirements for.
+  * pname:pMemoryRequirements is a pointer to a
+    slink:VkMemoryRequirements2KHR structure in which the requested
+    acceleration structure memory requirements are returned.
+
+include::{generated}/validity/protos/vkGetAccelerationStructureMemoryRequirementsNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureMemoryRequirementsInfoNV',desc='Structure specifying acceleration to query for memory requirements',type='structs']
+--
+:refpage: VkAccelerationStructureMemoryRequirementsInfoNV
+
+The sname:VkAccelerationStructureMemoryRequirementsInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureMemoryRequirementsInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:type selects the type of memory requirement being queried.
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
+    returns the memory requirements for the object itself.
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
+    returns the memory requirements for the scratch memory when doing a
+    build.
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
+    returns the memory requirements for the scratch memory when doing an
+    update.
+  * pname:accelerationStructure is the acceleration structure to be queried
+    for memory requirements.
+
+include::{generated}/validity/structs/VkAccelerationStructureMemoryRequirementsInfoNV.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureMemoryRequirementsTypeNV',desc='Acceleration structure memory requirement type',type='enums']
+--
+:refpage: VkAccelerationStructureMemoryRequirementsTypeNV
+
+Possible values of pname:type in
+sname:VkAccelerationStructureMemoryRequirementsInfoNV are:,
+
+include::{generated}/api/enums/VkAccelerationStructureMemoryRequirementsTypeNV.adoc[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
+    requests the memory requirement for the sname:VkAccelerationStructureNV
+    backing store.
+  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV
+    requests the memory requirement for scratch space during the initial
+    build.
+  * ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV
+    requests the memory requirement for scratch space during an update.
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='VkAccelerationStructureBuildTypeKHR',desc='Acceleration structure build type',type='enums']
+--
+:refpage: VkAccelerationStructureBuildTypeKHR
+
+Possible values of pname:buildType in
+flink:vkGetAccelerationStructureBuildSizesKHR are:
+
+include::{generated}/api/enums/VkAccelerationStructureBuildTypeKHR.adoc[]
+
+  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR requests the memory
+    requirement for operations performed by the host.
+  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR requests the
+    memory requirement for operations performed by the device.
+  * ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR requests
+    the memory requirement for operations performed by either the host, or
+    the device.
+--
+endif::VK_KHR_acceleration_structure[]
+
+ifdef::VK_NV_ray_tracing[]
+[open,refpage='vkBindAccelerationStructureMemoryNV',desc='Bind acceleration structure memory',type='protos']
+--
+:refpage: vkBindAccelerationStructureMemoryNV
+
+To attach memory to one or more acceleration structures at a time, call:
+
+include::{generated}/api/protos/vkBindAccelerationStructureMemoryNV.adoc[]
+
+  * pname:device is the logical device that owns the acceleration structures
+    and memory.
+  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
+  * pname:pBindInfos is a pointer to an array of
+    slink:VkBindAccelerationStructureMemoryInfoNV structures describing
+    acceleration structures and memory to bind.
+
+include::{generated}/validity/protos/vkBindAccelerationStructureMemoryNV.adoc[]
+--
+
+[open,refpage='VkBindAccelerationStructureMemoryInfoNV',desc='Structure specifying acceleration structure memory binding',type='structs']
+--
+:refpage: VkBindAccelerationStructureMemoryInfoNV
+
+The sname:VkBindAccelerationStructureMemoryInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkBindAccelerationStructureMemoryInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructure is the acceleration structure to be attached
+    to memory.
+  * pname:memory is a sname:VkDeviceMemory object describing the device
+    memory to attach.
+  * pname:memoryOffset is the start offset of the region of memory that is
+    to be bound to the acceleration structure.
+    The number of bytes returned in the
+    slink:VkMemoryRequirements::pname:size member in pname:memory, starting
+    from pname:memoryOffset bytes, will be bound to the specified
+    acceleration structure.
+  * pname:deviceIndexCount is the number of elements in
+    pname:pDeviceIndices.
+  * pname:pDeviceIndices is a pointer to an array of device indices.
+
+.Valid Usage
+****
+  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-accelerationStructure-03620]]
+    pname:accelerationStructure must: not already be backed by a memory
+    object
+  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03621]]
+    pname:memoryOffset must: be less than the size of pname:memory
+  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memory-03622]]
+    pname:memory must: have been allocated using one of the memory types
+    allowed in the pname:memoryTypeBits member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetAccelerationStructureMemoryRequirementsNV with
+    pname:accelerationStructure and pname:type of
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
+  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03623]]
+    pname:memoryOffset must: be an integer multiple of the pname:alignment
+    member of the slink:VkMemoryRequirements structure returned from a call
+    to flink:vkGetAccelerationStructureMemoryRequirementsNV with
+    pname:accelerationStructure and pname:type of
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
+  * [[VUID-VkBindAccelerationStructureMemoryInfoNV-size-03624]]
+    The pname:size member of the sname:VkMemoryRequirements structure
+    returned from a call to
+    flink:vkGetAccelerationStructureMemoryRequirementsNV with
+    pname:accelerationStructure and pname:type of
+    ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV must:
+    be less than or equal to the size of pname:memory minus
+    pname:memoryOffset
+****
+
+include::{generated}/validity/structs/VkBindAccelerationStructureMemoryInfoNV.adoc[]
+--
+
+[open,refpage='vkGetAccelerationStructureHandleNV',desc='Get opaque acceleration structure handle',type='protos']
+--
+:refpage: vkGetAccelerationStructureHandleNV
+
+To allow constructing geometry instances with device code if desired, we
+need to be able to query a opaque handle for an acceleration structure.
+This handle is a value of 8 bytes.
+To get this handle, call:
+
+include::{generated}/api/protos/vkGetAccelerationStructureHandleNV.adoc[]
+
+  * pname:device is the logical device that owns the acceleration
+    structures.
+  * pname:accelerationStructure is the acceleration structure.
+  * pname:dataSize is the size in bytes of the buffer pointed to by
+    pname:pData.
+  * pname:pData is a pointer to a user-allocated buffer where the results
+    will be written.
+
+.Valid Usage
+****
+  * [[VUID-vkGetAccelerationStructureHandleNV-dataSize-02240]]
+    pname:dataSize must: be large enough to contain the result of the query,
+    as described above
+  * [[VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-02787]]
+    pname:accelerationStructure must: be bound completely and contiguously
+    to a single sname:VkDeviceMemory object via
+    flink:vkBindAccelerationStructureMemoryNV
+****
+
+include::{generated}/validity/protos/vkGetAccelerationStructureHandleNV.adoc[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='vkGetAccelerationStructureDeviceAddressKHR',desc='Query an address of a acceleration structure',type='protos']
+--
+:refpage: vkGetAccelerationStructureDeviceAddressKHR
+
+To query the 64-bit device address for an acceleration structure, call:
+
+include::{generated}/api/protos/vkGetAccelerationStructureDeviceAddressKHR.adoc[]
+
+  * pname:device is the logical device that the acceleration structure was
+    created on.
+  * pname:pInfo is a pointer to a
+    slink:VkAccelerationStructureDeviceAddressInfoKHR structure specifying
+    the acceleration structure to retrieve an address for.
+
+The 64-bit return value is an address of the acceleration structure, which
+can be used for device and shader operations that involve acceleration
+structures, such as
+ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+ray traversal and
+endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+acceleration structure building.
+
+If the acceleration structure was created with a non-zero value of
+slink:VkAccelerationStructureCreateInfoKHR::pname:deviceAddress, the return
+value will be the same address.
+
+If the acceleration structure was created with a pname:type of
+ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR, the returned address must:
+be consistent with the relative offset to other acceleration structures with
+pname:type ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR allocated with
+the same slink:VkBuffer.
+That is, the difference in returned addresses between the two must: be the
+same as the difference in offsets provided at acceleration structure
+creation.
+
+The returned address must: be aligned to 256 bytes.
+
+[NOTE]
+.Note
+====
+The acceleration structure device address may: be different from the buffer
+device address corresponding to the acceleration structure's start offset in
+its storage buffer for acceleration structure types other than
+ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkGetAccelerationStructureDeviceAddressKHR-accelerationStructure-08935]]
+    The <<features-accelerationStructure,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructure>>
+    feature must: be enabled
+  * [[VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetAccelerationStructureDeviceAddressKHR.adoc[]
+--
+
+[open,refpage='VkAccelerationStructureDeviceAddressInfoKHR',desc='Structure specifying the acceleration structure to query an address for',type='structs']
+--
+:refpage: VkAccelerationStructureDeviceAddressInfoKHR
+
+The sname:VkAccelerationStructureDeviceAddressInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkAccelerationStructureDeviceAddressInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:accelerationStructure specifies the acceleration structure whose
+    address is being queried.
+
+include::{generated}/validity/structs/VkAccelerationStructureDeviceAddressInfoKHR.adoc[]
+--
+endif::VK_KHR_acceleration_structure[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+
+ifdef::VK_EXT_opacity_micromap[]
+[[resources-micromaps]]
+== Micromaps
+
+[open,refpage='VkMicromapEXT',desc='Opaque handle to a micromap object',type='handles']
+--
+:refpage: VkMicromapEXT
+
+Micromaps are opaque data structures that are built by the implementation to
+encode sub-triangle data to be included in an acceleration structure.
+
+Micromaps are represented by sname:VkMicromapEXT handles:
+
+include::{generated}/api/handles/VkMicromapEXT.adoc[]
+--
+
+
+[open,refpage='vkCreateMicromapEXT',desc='Create a new micromap object',type='protos']
+--
+:refpage: vkCreateMicromapEXT
+
+To create a micromap, call:
+
+include::{generated}/api/protos/vkCreateMicromapEXT.adoc[]
+
+  * pname:device is the logical device that creates the acceleration
+    structure object.
+  * pname:pCreateInfo is a pointer to a slink:VkMicromapCreateInfoEXT
+    structure containing parameters affecting creation of the micromap.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pMicromap is a pointer to a sname:VkMicromapEXT handle in which
+    the resulting micromap object is returned.
+
+Similar to other objects in Vulkan, the micromap creation merely creates an
+object with a specific "`shape`".
+The type and quantity of geometry that can be built into a micromap is
+determined by the parameters of slink:VkMicromapCreateInfoEXT.
+
+The micromap data is stored in the object referred to by
+sname:VkMicromapCreateInfoEXT::pname:buffer.
+Once memory has been bound to that buffer, it must: be populated by micromap
+build or micromap copy commands such as flink:vkCmdBuildMicromapsEXT,
+flink:vkBuildMicromapsEXT, flink:vkCmdCopyMicromapEXT, and
+flink:vkCopyMicromapEXT.
+
+[NOTE]
+.Note
+====
+The expected usage for a trace capture/replay tool is that it will serialize
+and later deserialize the micromap data using micromap copy commands.
+During capture the tool will use flink:vkCopyMicromapToMemoryEXT or
+flink:vkCmdCopyMicromapToMemoryEXT with a pname:mode of
+ename:VK_COPY_MICROMAP_MODE_SERIALIZE_EXT, and
+flink:vkCopyMemoryToMicromapEXT or flink:vkCmdCopyMemoryToMicromapEXT with a
+pname:mode of ename:VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT during replay.
+====
+
+The input buffers passed to micromap build commands will be referenced by
+the implementation for the duration of the command.
+Micromaps must: be fully self-contained.
+The application can: reuse or free any memory which was used by the command
+as an input or as scratch without affecting the results of a subsequent
+acceleration structure build using the micromap or traversal of that
+acceleration structure.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateMicromapEXT-micromap-07430]]
+    The <<features-micromap, pname:micromap>> feature must: be enabled
+  * [[VUID-vkCreateMicromapEXT-deviceAddress-07431]]
+    If slink:VkMicromapCreateInfoEXT::pname:deviceAddress is not zero, the
+    <<features-micromapCaptureReplay, pname:micromapCaptureReplay>> feature
+    must: be enabled
+  * [[VUID-vkCreateMicromapEXT-device-07432]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateMicromapEXT.adoc[]
+--
+
+[open,refpage='VkMicromapCreateInfoEXT',desc='Structure specifying the parameters of a newly created micromap object',type='structs']
+--
+:refpage: VkMicromapCreateInfoEXT
+
+The sname:VkMicromapCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkMicromapCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:createFlags is a bitmask of elink:VkMicromapCreateFlagBitsEXT
+    specifying additional creation parameters of the micromap.
+  * pname:buffer is the buffer on which the micromap will be stored.
+  * pname:offset is an offset in bytes from the base address of the buffer
+    at which the micromap will be stored, and must: be a multiple of `256`.
+  * pname:size is the size required for the micromap.
+  * pname:type is a elink:VkMicromapTypeEXT value specifying the type of
+    micromap that will be created.
+  * pname:deviceAddress is the device address requested for the micromap if
+    the <<features-micromapCaptureReplay, pname:micromapCaptureReplay>>
+    feature is being used.
+
+If pname:deviceAddress is zero, no specific address is requested.
+
+If pname:deviceAddress is not zero, pname:deviceAddress must: be an address
+retrieved from an identically created micromap on the same implementation.
+The micromap must: also be placed on an identically created pname:buffer and
+at the same pname:offset.
+
+Applications should: avoid creating micromaps with application-provided
+addresses and implementation-provided addresses in the same process, to
+reduce the likelihood of ename:VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR
+errors.
+
+[NOTE]
+.Note
+====
+The expected usage for this is that a trace capture/replay tool will add the
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag to all buffers
+that use ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, and will add
+ename:VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT to all buffers used as
+storage for a micromap where pname:deviceAddress is not zero.
+This also means that the tool will need to add
+ename:VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT to memory allocations to allow
+the flag to be set where the application may not have otherwise required it.
+During capture the tool will save the queried opaque device addresses in the
+trace.
+During replay, the buffers will be created specifying the original address
+so any address values stored in the trace data will remain valid.
+
+Implementations are expected to separate such buffers in the GPU address
+space so normal allocations will avoid using these addresses.
+Apps/tools should avoid mixing app-provided and implementation-provided
+addresses for buffers created with
+ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, to avoid address
+space allocation conflicts.
+====
+
+
+If the micromap will be the target of a build operation, the required size
+for a micromap can: be queried with flink:vkGetMicromapBuildSizesEXT.
+
+.Valid Usage
+****
+  * [[VUID-VkMicromapCreateInfoEXT-deviceAddress-07433]]
+    If pname:deviceAddress is not zero, pname:createFlags must: include
+    ename:VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT
+  * [[VUID-VkMicromapCreateInfoEXT-createFlags-07434]]
+    If pname:createFlags includes
+    ename:VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT,
+    slink:VkPhysicalDeviceOpacityMicromapFeaturesEXT::pname:micromapCaptureReplay
+    must: be ename:VK_TRUE
+  * [[VUID-VkMicromapCreateInfoEXT-buffer-07435]]
+    pname:buffer must: have been created with a pname:usage value containing
+    ename:VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT
+  * [[VUID-VkMicromapCreateInfoEXT-buffer-07436]]
+    pname:buffer must: not have been created with
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkMicromapCreateInfoEXT-offset-07437]]
+    The sum of pname:offset and pname:size must: be less than the size of
+    pname:buffer
+  * [[VUID-VkMicromapCreateInfoEXT-offset-07438]]
+    pname:offset must: be a multiple of `256` bytes
+****
+
+include::{generated}/validity/structs/VkMicromapCreateInfoEXT.adoc[]
+--
+
+[open,refpage='vkGetMicromapBuildSizesEXT',desc='Retrieve the required size for a micromap',type='protos']
+--
+:refpage: vkGetMicromapBuildSizesEXT
+
+To get the build sizes for a micromap, call:
+
+include::{generated}/api/protos/vkGetMicromapBuildSizesEXT.adoc[]
+
+  * pname:device is the logical device that will be used for creating the
+    micromap.
+  * pname:buildType defines whether host or device operations (or both) are
+    being queried for.
+  * pname:pBuildInfo is a pointer to a slink:VkMicromapBuildInfoEXT
+    structure describing parameters of a build operation.
+  * pname:pSizeInfo is a pointer to a slink:VkMicromapBuildSizesInfoEXT
+    structure which returns the size required for a micromap and the sizes
+    required for the scratch buffers, given the build parameters.
+
+The pname:dstMicromap and pname:mode members of pname:pBuildInfo are
+ignored.
+Any slink:VkDeviceOrHostAddressKHR members of pname:pBuildInfo are ignored
+by this command.
+
+A micromap created with the pname:micromapSize returned by this command
+supports any build with a slink:VkMicromapBuildInfoEXT structure subject to
+the following properties:
+
+  * The build command is a host build command, and pname:buildType is
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
+  * The build command is a device build command, and pname:buildType is
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR or
+    ename:VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
+  * For slink:VkMicromapBuildInfoEXT:
+  ** Its pname:type, and pname:flags members are equal to
+     pname:pBuildInfo->type and pname:pBuildInfo->flags, respectively.
+  ** The sum of usage information in either pname:pUsageCounts or
+     pname:ppUsageCounts is equal to the sum of usage information in either
+     pname:pBuildInfo->pUsageCounts or pname:pBuildInfo->ppUsageCounts.
+
+Similarly, the pname:buildScratchSize value will support any build command
+specifying the ename:VK_BUILD_MICROMAP_MODE_BUILD_EXT pname:mode under the
+above conditions.
+
+.Valid Usage
+****
+  * [[VUID-vkGetMicromapBuildSizesEXT-dstMicromap-09180]]
+    slink:VkMicromapBuildInfoEXT::pname:dstMicromap must: have been created
+    from pname:device
+  * [[VUID-vkGetMicromapBuildSizesEXT-micromap-07439]]
+    The <<features-micromap, pname:micromap>> feature must: be enabled
+  * [[VUID-vkGetMicromapBuildSizesEXT-device-07440]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,
+    pname:bufferDeviceAddressMultiDevice>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetMicromapBuildSizesEXT.adoc[]
+--
+
+[open,refpage='VkMicromapBuildSizesInfoEXT',desc='Structure specifying build sizes for a micromap',type='structs']
+--
+:refpage: VkMicromapBuildSizesInfoEXT
+
+The sname:VkMicromapBuildSizesInfoEXT structure describes the required build
+sizes for a micromap and scratch buffers and is defined as:
+
+include::{generated}/api/structs/VkMicromapBuildSizesInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:micromapSize is the size in bytes required in a
+    slink:VkMicromapEXT for a build or update operation.
+  * pname:buildScratchSize is the size in bytes required in a scratch buffer
+    for a build operation.
+  * pname:discardable indicates whether or not the micromap object may be
+    destroyed after an acceleration structure build or update.
+    A false value means that acceleration structures built with this
+    micromap may: contain references to the data contained therein, and the
+    application must: not destroy the micromap until ray traversal has
+    concluded.
+    A true value means that the information in the micromap will be copied
+    by value into the acceleration structure, and the micromap may: be
+    destroyed after the acceleration structure build concludes.
+
+include::{generated}/validity/structs/VkMicromapBuildSizesInfoEXT.adoc[]
+--
+
+[open,refpage='VkMicromapTypeEXT',desc='Type of micromap',type='enums']
+--
+:refpage: VkMicromapTypeEXT
+
+Values which can: be set in slink:VkMicromapCreateInfoEXT::pname:type
+specifying the type of micromap, are:
+
+include::{generated}/api/enums/VkMicromapTypeEXT.adoc[]
+
+  * ename:VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT is a micromap containing
+    data to control the opacity of a triangle.
+ifdef::VK_NV_displacement_micromap[]
+  * ename:VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV is a micromap containing
+    data to control the displacement of subtriangles within a triangle.
+endif::VK_NV_displacement_micromap[]
+
+--
+
+[open,refpage='VkMicromapCreateFlagBitsEXT',desc='Bitmask specifying additional creation parameters for micromap',type='enums']
+--
+Bits which can: be set in slink:VkMicromapCreateInfoEXT::pname:createFlags,
+specifying additional creation parameters for micromaps, are:
+
+include::{generated}/api/enums/VkMicromapCreateFlagBitsEXT.adoc[]
+
+  * ename:VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT specifies
+    that the micromap's address can: be saved and reused on a subsequent
+    run.
+--
+
+[open,refpage='VkMicromapCreateFlagsEXT',desc='Bitmask of VkMicromapCreateFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkMicromapCreateFlagsEXT.adoc[]
+
+tname:VkMicromapCreateFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkMicromapCreateFlagBitsEXT.
+--
+
+[open,refpage='VkBuildMicromapFlagBitsEXT',desc='Bitmask specifying additional parameters for micromap builds',type='enums',alias='VkBuildMicromapFlagBitsNV']
+--
+:refpage: VkBuildMicromapFlagBitsEXT
+
+Bits which can: be set in slink:VkMicromapBuildInfoEXT::pname:flags
+specifying additional parameters for micromap builds, are:
+
+include::{generated}/api/enums/VkBuildMicromapFlagBitsEXT.adoc[]
+
+  * ename:VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT indicates that the
+    given micromap build should: prioritize trace performance over build
+    time.
+  * ename:VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT indicates that the
+    given micromap build should: prioritize build time over trace
+    performance.
+--
+
+[open,refpage='VkBuildMicromapFlagsEXT',desc='Bitmask of VkBuildMicromapFlagBitsEXT',type='flags',alias='VkBuildMicromapFlagsNV']
+--
+:refpage: VkBuildMicromapFlagsEXT
+
+include::{generated}/api/flags/VkBuildMicromapFlagsEXT.adoc[]
+
+tname:VkBuildMicromapFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkBuildMicromapFlagBitsEXT.
+--
+
+[open,refpage='vkDestroyMicromapEXT',desc='Destroy a micromap object',type='protos']
+--
+:refpage: vkDestroyMicromapEXT
+
+To destroy a micromap, call:
+
+include::{generated}/api/protos/vkDestroyMicromapEXT.adoc[]
+
+  * pname:device is the logical device that destroys the micromap.
+  * pname:micromap is the micromap to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyMicromapEXT-micromap-07441]]
+    All submitted commands that refer to pname:micromap must: have completed
+    execution
+  * [[VUID-vkDestroyMicromapEXT-micromap-07442]]
+    If sname:VkAllocationCallbacks were provided when pname:micromap was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyMicromapEXT-micromap-07443]]
+    If no sname:VkAllocationCallbacks were provided when pname:micromap was
+    created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyMicromapEXT.adoc[]
+--
+
+endif::VK_EXT_opacity_micromap[]
+
+
+[[resources-association]]
+== Resource Memory Association
+
+Resources are initially created as _virtual allocations_ with no backing
+memory.
+Device memory is allocated separately (see <<memory-device>>) and then
+associated with the resource.
+This association is done differently for sparse and non-sparse resources.
+
+Resources created with any of the sparse creation flags are considered
+sparse resources.
+Resources created without these flags are non-sparse.
+The details on resource memory association for sparse resources is described
+in <<sparsememory>>.
+
+Non-sparse resources must: be bound completely and contiguously to a single
+sname:VkDeviceMemory object before the resource is passed as a parameter to
+any of the following operations:
+
+  * creating image or buffer views
+  * updating descriptor sets
+  * recording commands in a command buffer
+
+Once bound, the memory binding is immutable for the lifetime of the
+resource.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+
+In a logical device representing more than one physical device, buffer and
+image resources exist on all physical devices but can: be bound to memory
+differently on each.
+Each such replicated resource is an _instance_ of the resource.
+For sparse resources, each instance can: be bound to memory arbitrarily
+differently.
+For non-sparse resources, each instance can: either be bound to the local or
+a peer instance of the memory, or for images can: be bound to rectangular
+regions from the local and/or peer instances.
+When a resource is used in a descriptor set, each physical device interprets
+the descriptor according to its own instance's binding to memory.
+
+[NOTE]
+.Note
+====
+There are no new copy commands to transfer data between physical devices.
+Instead, an application can: create a resource with a peer mapping and use
+it as the source or destination of a transfer command executed by a single
+physical device to copy the data from one physical device to another.
+====
+
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[open,refpage='vkGetBufferMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+To determine the memory requirements for a buffer resource, call:
+
+include::{generated}/api/protos/vkGetBufferMemoryRequirements.adoc[]
+
+  * pname:device is the logical device that owns the buffer.
+  * pname:buffer is the buffer to query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements
+    structure in which the memory requirements of the buffer object are
+    returned.
+
+include::{generated}/validity/protos/vkGetBufferMemoryRequirements.adoc[]
+--
+
+[open,refpage='vkGetImageMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+To determine the memory requirements for an image resource, call:
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+To determine the memory requirements for an image resource which is not
+created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT flag set, call:
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+include::{generated}/api/protos/vkGetImageMemoryRequirements.adoc[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:image is the image to query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements
+    structure in which the memory requirements of the image object are
+    returned.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkGetImageMemoryRequirements-image-01588]]
+    pname:image must: not have been created with the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag set
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-vkGetImageMemoryRequirements-image-04004]]
+    If pname:image was created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    external memory handle type, then pname:image must: be bound to memory
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-vkGetImageMemoryRequirements-image-08960]]
+    If pname:image was created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX external
+    memory handle type, then pname:image must: be bound to memory
+endif::VK_QNX_external_memory_screen_buffer[]
+****
+
+include::{generated}/validity/protos/vkGetImageMemoryRequirements.adoc[]
+--
+
+[open,refpage='VkMemoryRequirements',desc='Structure specifying memory requirements',type='structs']
+--
+The sname:VkMemoryRequirements structure is defined as:
+
+include::{generated}/api/structs/VkMemoryRequirements.adoc[]
+
+  * pname:size is the size, in bytes, of the memory allocation required: for
+    the resource.
+  * pname:alignment is the alignment, in bytes, of the offset within the
+    allocation required: for the resource.
+  * pname:memoryTypeBits is a bitmask and contains one bit set for every
+    supported memory type for the resource.
+    Bit `i` is set if and only if the memory type `i` in the
+    sname:VkPhysicalDeviceMemoryProperties structure for the physical device
+    is supported for the resource.
+
+include::{generated}/validity/structs/VkMemoryRequirements.adoc[]
+--
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+The precise size of images that will be bound to external Android hardware
+buffer memory is unknown until the memory has been imported or allocated, so
+applications must: not call flink:vkGetImageMemoryRequirements or
+flink:vkGetImageMemoryRequirements2 with such an slink:VkImage before it has
+been bound to memory.
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+For this reason, applications also must: not call
+flink:vkGetDeviceImageMemoryRequirements with a slink:VkImageCreateInfo
+describing an external Android hardware buffer.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+When importing Android hardware buffer memory, the pname:allocationSize can:
+be determined by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID.
+When allocating new memory for a slink:VkImage that can: be exported to an
+Android hardware buffer, the memory's pname:allocationSize must: be zero;
+the actual size will be determined by the dedicated image's parameters.
+After the memory has been allocated, the amount of space allocated from the
+memory's heap can: be obtained by getting the image's memory requirements or
+by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID with the
+Android hardware buffer exported from the memory.
+
+When allocating new memory for a slink:VkBuffer that can: be exported to an
+Android hardware buffer an application may: still call
+flink:vkGetBufferMemoryRequirements or flink:vkGetBufferMemoryRequirements2
+with slink:VkBuffer before it has been bound to memory.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+ifdef::VK_KHR_external_memory_win32[]
+If the resource being queried was created with the
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, or
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT external memory
+handle type, the value of pname:size has no meaning and should: be ignored.
+endif::VK_KHR_external_memory_win32[]
+
+The implementation guarantees certain properties about the memory
+requirements returned by
+ifdef::VK_KHR_get_memory_requirements2[]
+flink:vkGetBufferMemoryRequirements2, flink:vkGetImageMemoryRequirements2,
+endif::VK_KHR_get_memory_requirements2[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+flink:vkGetDeviceBufferMemoryRequirements,
+flink:vkGetDeviceImageMemoryRequirements,
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+flink:vkGetBufferMemoryRequirements and flink:vkGetImageMemoryRequirements:
+
+  * The pname:memoryTypeBits member always contains at least one bit set.
+  * If pname:buffer is a sname:VkBuffer not created with the
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bit set, or if pname:image is
+    <<glossary-linear-resource,linear>> image, then the pname:memoryTypeBits
+    member always contains at least one bit set corresponding to a
+    sname:VkMemoryType with a pname:propertyFlags that has both the
+    ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit and the
+    ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set.
+    In other words, mappable coherent memory can: always be attached to
+    these objects.
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * If pname:buffer was created with
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes set to `0` or
+    pname:image was created with
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes set to `0`, the
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * The
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    pname:memoryTypeBits member always contains at least one bit set
+    corresponding to a sname:VkMemoryType with a pname:propertyFlags that
+    has the ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set.
+  * The pname:memoryTypeBits member is identical for all sname:VkBuffer
+    objects created with the same value for the pname:flags and pname:usage
+    members in the slink:VkBufferCreateInfo structure
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    and the pname:handleTypes member of the
+    slink:VkExternalMemoryBufferCreateInfo structure
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    passed to flink:vkCreateBuffer.
+    Further, if code:usage1 and code:usage2 of type tlink:VkBufferUsageFlags
+    are such that the bits set in code:usage2 are a subset of the bits set
+    in code:usage1, and they have the same
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    pname:flags and
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes,
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    pname:flags,
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    then the bits set in pname:memoryTypeBits returned for code:usage1 must:
+    be a subset of the bits set in pname:memoryTypeBits returned for
+    code:usage2, for all values of pname:flags.
+  * The pname:alignment member is a power of two.
+  * The pname:alignment member is identical for all sname:VkBuffer objects
+    created with the same combination of values for the pname:usage and
+    pname:flags members in the slink:VkBufferCreateInfo structure passed to
+    flink:vkCreateBuffer.
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * If the <<features-maintenance4, pname:maintenance4>> feature is enabled,
+    then the pname:alignment member is identical for all sname:VkImage
+    objects created with the same combination of values for the pname:flags,
+    pname:imageType, pname:format, pname:extent, pname:mipLevels,
+    pname:arrayLayers, pname:samples, pname:tiling and pname:usage members
+    in the slink:VkImageCreateInfo structure passed to flink:vkCreateImage.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * The pname:alignment member satisfies the buffer descriptor offset
+    alignment requirements associated with the sname:VkBuffer's pname:usage:
+  ** If pname:usage included ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
+     or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:alignment
+     must: be an integer multiple of
+     sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
+  ** If pname:usage included ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
+     pname:alignment must: be an integer multiple of
+     sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment.
+  ** If pname:usage included ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
+     pname:alignment must: be an integer multiple of
+     sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment.
+  * For images created with a color format, the pname:memoryTypeBits member
+    is identical for all sname:VkImage objects created with the same
+    combination of values for the pname:tiling member, the
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT bit of the pname:flags member,
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit of the
+    pname:flags member,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_EXT_host_image_copy[]
+    the ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT bit of the pname:usage
+    member if the
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:identicalMemoryTypeRequirements
+    property is ename:VK_FALSE,
+endif::VK_EXT_host_image_copy[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    pname:handleTypes member of slink:VkExternalMemoryImageCreateInfo,
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    and the ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT of the pname:usage
+    member in the slink:VkImageCreateInfo structure passed to
+    flink:vkCreateImage.
+  * For images created with a depth/stencil format, the pname:memoryTypeBits
+    member is identical for all sname:VkImage objects created with the same
+    combination of values for the pname:format member, the pname:tiling
+    member, the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT bit of the
+    pname:flags member,
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    the ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit of the
+    pname:flags member,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_EXT_host_image_copy[]
+    the ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT bit of the pname:usage
+    member if the
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:identicalMemoryTypeRequirements
+    property is ename:VK_FALSE,
+endif::VK_EXT_host_image_copy[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    pname:handleTypes member of slink:VkExternalMemoryImageCreateInfo,
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+    and the ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT of the pname:usage
+    member in the slink:VkImageCreateInfo structure passed to
+    flink:vkCreateImage.
+  * If the memory requirements are for a sname:VkImage, the
+    pname:memoryTypeBits member must: not refer to a sname:VkMemoryType with
+    a pname:propertyFlags that has the
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set if the pname:image
+    did not have ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT bit set in
+    the pname:usage member of the slink:VkImageCreateInfo structure passed
+    to flink:vkCreateImage.
+  * If the memory requirements are for a sname:VkBuffer, the
+    pname:memoryTypeBits member must: not refer to a sname:VkMemoryType with
+    a pname:propertyFlags that has the
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set.
++
+[NOTE]
+.Note
+====
+The implication of this requirement is that lazily allocated memory is
+disallowed for buffers in all cases.
+====
+  * The pname:size member is identical for all sname:VkBuffer objects
+    created with the same combination of creation parameters specified in
+    slink:VkBufferCreateInfo and its pname:pNext chain.
+  * The pname:size member is identical for all sname:VkImage objects created
+    with the same combination of creation parameters specified in
+    slink:VkImageCreateInfo and its pname:pNext chain.
++
+[NOTE]
+.Note
+====
+This, however, does not imply that they interpret the contents of the bound
+memory identically with each other.
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+That additional guarantee, however, can: be explicitly requested using
+ename:VK_IMAGE_CREATE_ALIAS_BIT.
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+====
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * If the <<features-maintenance4, pname:maintenance4>> feature is enabled,
+    these additional guarantees apply:
+  ** For a sname:VkBuffer, the pname:size memory requirement is never
+     greater than that of another sname:VkBuffer created with a greater or
+     equal pname:size specified in slink:VkBufferCreateInfo, all other
+     creation parameters being identical.
+  ** For a sname:VkBuffer, the pname:size memory requirement is never
+     greater than the result of aligning
+     slink:VkBufferCreateInfo::pname:size with the pname:alignment memory
+     requirement.
+  ** For a slink:VkImage, the pname:size memory requirement is never greater
+     than that of another slink:VkImage created with a greater or equal
+     value in each of pname:extent.width, pname:extent.height, and
+     pname:extent.depth; all other creation parameters being identical.
+  ** The memory requirements returned by
+     flink:vkGetDeviceBufferMemoryRequirements are identical to those that
+     would be returned by flink:vkGetBufferMemoryRequirements2 if it were
+     called with a sname:VkBuffer created with the same
+     slink:VkBufferCreateInfo values.
+  ** The memory requirements returned by
+     flink:vkGetDeviceImageMemoryRequirements are identical to those that
+     would be returned by flink:vkGetImageMemoryRequirements2 if it were
+     called with a sname:VkImage created with the same
+     slink:VkImageCreateInfo values.
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
+[open,refpage='vkGetBufferMemoryRequirements2',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+To determine the memory requirements for a buffer resource, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetBufferMemoryRequirements2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+include::{generated}/api/protos/vkGetBufferMemoryRequirements2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:device is the logical device that owns the buffer.
+  * pname:pInfo is a pointer to a slink:VkBufferMemoryRequirementsInfo2
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the memory requirements of the buffer object are
+    returned.
+
+include::{generated}/validity/protos/vkGetBufferMemoryRequirements2.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceBufferMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos',alias='vkGetDeviceBufferMemoryRequirementsKHR']
+--
+To determine the memory requirements for a buffer resource without creating
+an object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkGetDeviceBufferMemoryRequirements.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_maintenance4[or the equivalent command]
+
+ifdef::VK_KHR_maintenance4[]
+include::{generated}/api/protos/vkGetDeviceBufferMemoryRequirementsKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:device is the logical device intended to own the buffer.
+  * pname:pInfo is a pointer to a slink:VkDeviceBufferMemoryRequirements
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the memory requirements of the buffer object are
+    returned.
+
+include::{generated}/validity/protos/vkGetDeviceBufferMemoryRequirements.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+[open,refpage='VkBufferMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkBufferMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2.adoc[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is the buffer to query.
+
+include::{generated}/validity/structs/VkBufferMemoryRequirementsInfo2.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='VkDeviceBufferMemoryRequirements',desc='(None)',type='structs',alias='VkDeviceBufferMemoryRequirementsKHR']
+--
+The sname:VkDeviceBufferMemoryRequirements structure is defined as:
+
+include::{generated}/api/structs/VkDeviceBufferMemoryRequirements.adoc[]
+
+ifdef::VK_KHR_maintenance4[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceBufferMemoryRequirementsKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pCreateInfo is a pointer to a slink:VkBufferCreateInfo structure
+    containing parameters affecting creation of the buffer to query.
+
+include::{generated}/validity/structs/VkDeviceBufferMemoryRequirements.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+[open,refpage='vkGetImageMemoryRequirements2',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+To determine the memory requirements for an image resource, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetImageMemoryRequirements2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+include::{generated}/api/protos/vkGetImageMemoryRequirements2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:pInfo is a pointer to a slink:VkImageMemoryRequirementsInfo2
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the memory requirements of the image object are
+    returned.
+
+include::{generated}/validity/protos/vkGetImageMemoryRequirements2.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceImageMemoryRequirements',desc='Returns the memory requirements for specified Vulkan object',type='protos',alias='vkGetDeviceImageMemoryRequirementsKHR']
+--
+To determine the memory requirements for an image resource without creating
+an object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkGetDeviceImageMemoryRequirements.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_maintenance4[or the equivalent command]
+
+ifdef::VK_KHR_maintenance4[]
+include::{generated}/api/protos/vkGetDeviceImageMemoryRequirementsKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:device is the logical device intended to own the image.
+  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirements
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the memory requirements of the image object are
+    returned.
+
+include::{generated}/validity/protos/vkGetDeviceImageMemoryRequirements.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+[open,refpage='VkImageMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkImageMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkImageMemoryRequirementsInfo2.adoc[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageMemoryRequirementsInfo2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is the image to query.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-01589]]
+    If pname:image was created with a _multi-planar_ format and the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag, there must: be a
+    slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
+    chain of the slink:VkImageMemoryRequirementsInfo2 structure
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-02279]]
+    If pname:image was created with ename:VK_IMAGE_CREATE_DISJOINT_BIT and
+    with ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then there must: be
+    a slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
+    chain of the slink:VkImageMemoryRequirementsInfo2 structure
+endif::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-01590]]
+    If pname:image was not created with the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT flag, there must: not be a
+    slink:VkImagePlaneMemoryRequirementsInfo included in the pname:pNext
+    chain of the slink:VkImageMemoryRequirementsInfo2 structure
+ifndef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-01591]]
+    If pname:image was created with a single-plane format, there must: not
+    be a slink:VkImagePlaneMemoryRequirementsInfo included in the
+    pname:pNext chain of the slink:VkImageMemoryRequirementsInfo2 structure
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-02280]]
+    If pname:image was created with a single-plane format and with any
+    pname:tiling other than ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
+    then there must: not be a slink:VkImagePlaneMemoryRequirementsInfo
+    included in the pname:pNext chain of the
+    slink:VkImageMemoryRequirementsInfo2 structure
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-01897]]
+    If pname:image was created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+    external memory handle type, then pname:image must: be bound to memory
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkImageMemoryRequirementsInfo2-image-08961]]
+    If pname:image was created with the
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX external
+    memory handle type, then pname:image must: be bound to memory
+endif::VK_QNX_external_memory_screen_buffer[]
+****
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+include::{generated}/validity/structs/VkImageMemoryRequirementsInfo2.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='VkDeviceImageMemoryRequirements',desc='(None)',type='structs',alias='VkDeviceImageMemoryRequirementsKHR']
+--
+The sname:VkDeviceImageMemoryRequirements structure is defined as:
+
+include::{generated}/api/structs/VkDeviceImageMemoryRequirements.adoc[]
+
+ifdef::VK_KHR_maintenance4[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceImageMemoryRequirementsKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pCreateInfo is a pointer to a slink:VkImageCreateInfo structure
+    containing parameters affecting creation of the image to query.
+  * pname:planeAspect is a elink:VkImageAspectFlagBits value specifying the
+    aspect corresponding to the image plane to query.
+    This parameter is ignored unless
+ifdef::VK_EXT_image_drm_format_modifier[]
+    pname:pCreateInfo::pname:tiling is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, or
+endif::VK_EXT_image_drm_format_modifier[]
+    pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    set.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06416]]
+    The pname:pCreateInfo::pname:pNext chain must: not contain a
+    slink:VkImageSwapchainCreateInfoKHR structure
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06776]]
+    The pname:pCreateInfo::pname:pNext chain must: not contain a
+    slink:VkImageDrmFormatModifierExplicitCreateInfoEXT structure
+endif::VK_EXT_image_drm_format_modifier[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-VkDeviceImageMemoryRequirements-pNext-06996]]
+    Applications also must: not call
+    flink:vkGetDeviceImageMemoryRequirements with a slink:VkImageCreateInfo
+    whose pname:pNext chain includes a slink:VkExternalFormatANDROID
+    structure with non-zero pname:externalFormat
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_QNX_external_memory_screen_buffer[]
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+  * [[VUID-VkDeviceImageMemoryRequirements-pNext-08962]]
+    Applications also must: not call
+    flink:vkGetDeviceImageMemoryRequirements with a slink:VkImageCreateInfo
+    whose pname:pNext chain includes a slink:VkExternalFormatQNX structure
+    with non-zero pname:externalFormat
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+endif::VK_QNX_external_memory_screen_buffer[]
+  * [[VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06417]]
+    If pname:pCreateInfo::pname:format specifies a _multi-planar_ format and
+    pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    set then pname:planeAspect must: not be ename:VK_IMAGE_ASPECT_NONE_KHR
+  * [[VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06419]]
+    If pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    set and if the pname:pCreateInfo::pname:tiling is
+    ename:VK_IMAGE_TILING_LINEAR or ename:VK_IMAGE_TILING_OPTIMAL, then
+    pname:planeAspect must: be a single valid
+    <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06420]]
+    If pname:pCreateInfo::pname:tiling is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
+    must: be a single valid _memory plane_ for the image (that is,
+    pname:aspectMask must: specify a plane index that is less than the
+    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+    associated with the image's pname:format and
+    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkDeviceImageMemoryRequirements.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[open,refpage='VkImagePlaneMemoryRequirementsInfo',desc='Structure specifying image plane for memory requirements',type='structs']
+--
+To determine the memory requirements for a plane of a disjoint image, add a
+sname:VkImagePlaneMemoryRequirementsInfo structure to the pname:pNext chain
+of the sname:VkImageMemoryRequirementsInfo2 structure.
+
+The sname:VkImagePlaneMemoryRequirementsInfo structure is defined as:
+
+include::{generated}/api/structs/VkImagePlaneMemoryRequirementsInfo.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkImagePlaneMemoryRequirementsInfoKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:planeAspect is a elink:VkImageAspectFlagBits value specifying the
+    aspect corresponding to the image plane to query.
+
+.Valid Usage
+****
+  * [[VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02281]]
+    If the image's pname:tiling is ename:VK_IMAGE_TILING_LINEAR or
+    ename:VK_IMAGE_TILING_OPTIMAL, then pname:planeAspect must: be a single
+    valid <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02282]]
+    If the image's pname:tiling is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
+    must: be a single valid _memory plane_ for the image (that is,
+    pname:aspectMask must: specify a plane index that is less than the
+    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+    associated with the image's pname:format and
+    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkImagePlaneMemoryRequirementsInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+[open,refpage='VkMemoryRequirements2',desc='Structure specifying memory requirements',type='structs']
+--
+The sname:VkMemoryRequirements2 structure is defined as:
+
+include::{generated}/api/structs/VkMemoryRequirements2.adoc[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryRequirements2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryRequirements is a slink:VkMemoryRequirements structure
+    describing the memory requirements of the resource.
+
+include::{generated}/validity/structs/VkMemoryRequirements2.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+[open,refpage='VkMemoryDedicatedRequirements',desc='Structure describing dedicated allocation requirements of buffer and image resources',type='structs']
+--
+The sname:VkMemoryDedicatedRequirements structure is defined as:
+
+include::{generated}/api/structs/VkMemoryDedicatedRequirements.adoc[]
+
+ifdef::VK_KHR_dedicated_allocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryDedicatedRequirementsKHR.adoc[]
+endif::VK_KHR_dedicated_allocation[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:prefersDedicatedAllocation specifies that the implementation would
+    prefer a dedicated allocation for this resource.
+    The application is still free to suballocate the resource but it may:
+    get better performance if a dedicated allocation is used.
+  * pname:requiresDedicatedAllocation specifies that a dedicated allocation
+    is required for this resource.
+
+To determine the dedicated allocation requirements of a buffer or image
+resource, add a slink:VkMemoryDedicatedRequirements structure to the
+pname:pNext chain of the slink:VkMemoryRequirements2 structure passed as the
+pname:pMemoryRequirements parameter of flink:vkGetBufferMemoryRequirements2
+or flink:vkGetImageMemoryRequirements2, respectively.
+
+Constraints on the values returned for buffer resources are:
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * pname:requiresDedicatedAllocation may: be ename:VK_TRUE if the
+    pname:pNext chain of slink:VkBufferCreateInfo for the call to
+    fname:vkCreateBuffer used to create the buffer being queried included a
+    slink:VkExternalMemoryBufferCreateInfo structure, and any of the handle
+    types specified in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes requires
+    dedicated allocation, as reported by
+    flink:vkGetPhysicalDeviceExternalBufferProperties in
+    sname:VkExternalBufferProperties::pname:externalMemoryProperties.externalMemoryFeatures.
+    Otherwise, pname:requiresDedicatedAllocation will be ename:VK_FALSE.
+
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * pname:requiresDedicatedAllocation will be ename:VK_FALSE
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * When the implementation sets pname:requiresDedicatedAllocation to
+    ename:VK_TRUE, it must: also set pname:prefersDedicatedAllocation to
+    ename:VK_TRUE.
+  * If ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT was set in
+    slink:VkBufferCreateInfo::pname:flags when pname:buffer was created,
+    then both pname:prefersDedicatedAllocation and
+    pname:requiresDedicatedAllocation will be ename:VK_FALSE.
+
+Constraints on the values returned for image resources are:
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * pname:requiresDedicatedAllocation may: be ename:VK_TRUE if the
+    pname:pNext chain of slink:VkImageCreateInfo for the call to
+    flink:vkCreateImage used to create the image being queried included a
+    slink:VkExternalMemoryImageCreateInfo structure, and any of the handle
+    types specified in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes requires
+    dedicated allocation, as reported by
+    flink:vkGetPhysicalDeviceImageFormatProperties2 in
+    sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * pname:requiresDedicatedAllocation may: be ename:VK_TRUE if the image's
+    tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
+endif::VK_EXT_image_drm_format_modifier[]
+  * pname:requiresDedicatedAllocation will
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_EXT_image_drm_format_modifier[]
+    otherwise
+endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_EXT_image_drm_format_modifier[]
+    be ename:VK_FALSE
+  * If ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT was set in
+    slink:VkImageCreateInfo::pname:flags when pname:image was created, then
+    both pname:prefersDedicatedAllocation and
+    pname:requiresDedicatedAllocation will be ename:VK_FALSE.
+
+include::{generated}/validity/structs/VkMemoryDedicatedRequirements.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+
+[open,refpage='vkBindBufferMemory',desc='Bind device memory to a buffer object',type='protos']
+--
+:refpage: vkBindBufferMemory
+
+To attach memory to a buffer object, call:
+
+include::{generated}/api/protos/vkBindBufferMemory.adoc[]
+
+  * pname:device is the logical device that owns the buffer and memory.
+  * pname:buffer is the buffer to be attached to memory.
+  * pname:memory is a slink:VkDeviceMemory object describing the device
+    memory to attach.
+  * pname:memoryOffset is the start offset of the region of pname:memory
+    which is to be bound to the buffer.
+    The number of bytes returned in the
+    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
+    from pname:memoryOffset bytes, will be bound to the specified buffer.
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+fname:vkBindBufferMemory is equivalent to passing the same parameters
+through slink:VkBindBufferMemoryInfo to flink:vkBindBufferMemory2.
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+
+ifdef::VK_NV_external_memory_sci_buf[]
+If the pname:memory was obtained by a memory import operation with
+slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes assigned to
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV, the properties of
+pname:buffer and the pname:memoryoffset must: be compatible with the
+attributes used to create stext:NvSciBufObj, otherwise the implementation
+will return ename:VK_ERROR_VALIDATION_FAILED.
+endif::VK_NV_external_memory_sci_buf[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_buffer_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkBindBufferMemory.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+[open,refpage='vkBindBufferMemory2',desc='Bind device memory to buffer objects',type='protos']
+--
+:refpage: vkBindBufferMemory2
+
+To attach memory to buffer objects for one or more buffers at a time, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkBindBufferMemory2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_bind_memory2[or the equivalent command]
+
+ifdef::VK_KHR_bind_memory2[]
+include::{generated}/api/protos/vkBindBufferMemory2KHR.adoc[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:device is the logical device that owns the buffers and memory.
+  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
+  * pname:pBindInfos is a pointer to an array of pname:bindInfoCount
+    slink:VkBindBufferMemoryInfo structures describing buffers and memory to
+    bind.
+
+On some implementations, it may: be more efficient to batch memory bindings
+into a single command.
+
+[NOTE]
+.Note
+====
+If fname:vkBindBufferMemory2 fails, and pname:bindInfoCount was greater than
+one, then the buffers referenced by pname:pBindInfos will be in an
+indeterminate state, and must not be used.
+Applications should destroy these buffers.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkBindBufferMemory2.adoc[]
+--
+
+[open,refpage='VkBindBufferMemoryInfo',desc='Structure specifying how to bind a buffer to memory',type='structs']
+--
+:refpage: VkBindBufferMemoryInfo
+
+sname:VkBindBufferMemoryInfo contains members corresponding to the
+parameters of flink:vkBindBufferMemory.
+
+The sname:VkBindBufferMemoryInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindBufferMemoryInfo.adoc[]
+
+ifdef::VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindBufferMemoryInfoKHR.adoc[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:buffer is the buffer to be attached to memory.
+  * pname:memory is a slink:VkDeviceMemory object describing the device
+    memory to attach.
+  * pname:memoryOffset is the start offset of the region of pname:memory
+    which is to be bound to the buffer.
+    The number of bytes returned in the
+    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
+    from pname:memoryOffset bytes, will be bound to the specified buffer.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_buffer_common.adoc[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkBindBufferMemoryInfo-pNext-01605]]
+    If the pname:pNext chain includes a
+    slink:VkBindBufferMemoryDeviceGroupInfo structure, all instances of
+    pname:memory specified by
+    slink:VkBindBufferMemoryDeviceGroupInfo::pname:pDeviceIndices must: have
+    been allocated
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+****
+
+include::{generated}/validity/structs/VkBindBufferMemoryInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkBindBufferMemoryDeviceGroupInfo',desc='Structure specifying device within a group to bind to',type='structs']
+--
+The sname:VkBindBufferMemoryDeviceGroupInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindBufferMemoryDeviceGroupInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindBufferMemoryDeviceGroupInfoKHR.adoc[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceIndexCount is the number of elements in
+    pname:pDeviceIndices.
+  * pname:pDeviceIndices is a pointer to an array of device indices.
+
+If the pname:pNext chain of slink:VkBindBufferMemoryInfo includes a
+sname:VkBindBufferMemoryDeviceGroupInfo structure, then that structure
+determines how memory is bound to buffers across multiple devices in a
+device group.
+
+If pname:deviceIndexCount is greater than zero, then on device index [eq]#i#
+the buffer is attached to the instance of pname:memory on the physical
+device with device index [eq]#pname:pDeviceIndices[i]#.
+
+If pname:deviceIndexCount is zero and pname:memory comes from a memory heap
+with the ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
+pname:pDeviceIndices contains consecutive indices from zero to the number of
+physical devices in the logical device, minus one.
+In other words, by default each physical device attaches to its own instance
+of pname:memory.
+
+If pname:deviceIndexCount is zero and pname:memory comes from a memory heap
+without the ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as
+if pname:pDeviceIndices contains an array of zeros.
+In other words, by default each physical device attaches to instance zero.
+
+.Valid Usage
+****
+  * [[VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606]]
+    pname:deviceIndexCount must: either be zero or equal to the number of
+    physical devices in the logical device
+  * [[VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607]]
+    All elements of pname:pDeviceIndices must: be valid device indices
+****
+
+include::{generated}/validity/structs/VkBindBufferMemoryDeviceGroupInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+
+[open,refpage='vkBindImageMemory',desc='Bind device memory to an image object',type='protos']
+--
+:refpage: vkBindImageMemory
+
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+To attach memory to an image object, call:
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+To attach memory to a sname:VkImage object created without the
+ename:VK_IMAGE_CREATE_DISJOINT_BIT set, call:
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+include::{generated}/api/protos/vkBindImageMemory.adoc[]
+
+  * pname:device is the logical device that owns the image and memory.
+  * pname:image is the image.
+  * pname:memory is the slink:VkDeviceMemory object describing the device
+    memory to attach.
+  * pname:memoryOffset is the start offset of the region of pname:memory
+    which is to be bound to the image.
+    The number of bytes returned in the
+    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
+    from pname:memoryOffset bytes, will be bound to the specified image.
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+fname:vkBindImageMemory is equivalent to passing the same parameters through
+slink:VkBindImageMemoryInfo to flink:vkBindImageMemory2.
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+
+ifdef::VK_NV_external_memory_sci_buf[]
+If the pname:memory is allocated by a memory import operation with
+slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes assigned to
+ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV, the properties of
+pname:image and the pname:memoryoffset must: be compatible with the
+attributes used to create stext:NvSciBufObj, otherwise the implementation
+will return ename:VK_ERROR_VALIDATION_FAILED.
+endif::VK_NV_external_memory_sci_buf[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_image_common.adoc[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkBindImageMemory-image-01608]]
+    pname:image must: not have been created with the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT set
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkBindImageMemory-memory-01047]]
+    pname:memory must: have been allocated using one of the memory types
+    allowed in the pname:memoryTypeBits member of the
+    sname:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements with pname:image
+  * [[VUID-vkBindImageMemory-memoryOffset-01048]]
+    pname:memoryOffset must: be an integer multiple of the pname:alignment
+    member of the sname:VkMemoryRequirements structure returned from a call
+    to flink:vkGetImageMemoryRequirements with pname:image
+  * [[VUID-vkBindImageMemory-size-01049]]
+    The difference of the size of pname:memory and pname:memoryOffset must:
+    be greater than or equal to the pname:size member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements with the same pname:image
+ifdef::VK_FUCHSIA_buffer_collection[]
+  * [[VUID-vkBindImageMemory-image-06392]]
+    If pname:image was created with
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA chained to
+    slink:VkImageCreateInfo::pname:pNext, pname:memory must: be allocated
+    with a slink:VkImportMemoryBufferCollectionFUCHSIA chained to
+    slink:VkMemoryAllocateInfo::pname:pNext
+endif::VK_FUCHSIA_buffer_collection[]
+****
+
+include::{generated}/validity/protos/vkBindImageMemory.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+[open,refpage='vkBindImageMemory2',desc='Bind device memory to image objects',type='protos']
+--
+:refpage: vkBindImageMemory2
+
+To attach memory to image objects for one or more images at a time, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkBindImageMemory2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_bind_memory2[or the equivalent command]
+
+ifdef::VK_KHR_bind_memory2[]
+include::{generated}/api/protos/vkBindImageMemory2KHR.adoc[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:device is the logical device that owns the images and memory.
+  * pname:bindInfoCount is the number of elements in pname:pBindInfos.
+  * pname:pBindInfos is a pointer to an array of slink:VkBindImageMemoryInfo
+    structures, describing images and memory to bind.
+
+On some implementations, it may: be more efficient to batch memory bindings
+into a single command.
+
+[NOTE]
+.Note
+====
+If fname:vkBindImageMemory2 fails, and pname:bindInfoCount was greater than
+one, then the images referenced by pname:pBindInfos will be in an
+indeterminate state, and must not be used.
+Applications should destroy these images.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkBindImageMemory2-pBindInfos-02858]]
+    If any slink:VkBindImageMemoryInfo::pname:image was created with
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT then all planes of
+    slink:VkBindImageMemoryInfo::pname:image must: be bound individually in
+    separate pname:pBindInfos
+  * [[VUID-vkBindImageMemory2-pBindInfos-04006]]
+    pname:pBindInfos must: not refer to the same image subresource more than
+    once
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+****
+
+include::{generated}/validity/protos/vkBindImageMemory2.adoc[]
+--
+
+[open,refpage='VkBindImageMemoryInfo',desc='Structure specifying how to bind an image to memory',type='structs']
+--
+:refpage: VkBindImageMemoryInfo
+
+sname:VkBindImageMemoryInfo contains members corresponding to the parameters
+of flink:vkBindImageMemory.
+
+The sname:VkBindImageMemoryInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindImageMemoryInfo.adoc[]
+
+ifdef::VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImageMemoryInfoKHR.adoc[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is the image to be attached to memory.
+  * pname:memory is a slink:VkDeviceMemory object describing the device
+    memory to attach.
+  * pname:memoryOffset is the start offset of the region of pname:memory
+    which is to be bound to the image.
+    The number of bytes returned in the
+    sname:VkMemoryRequirements::pname:size member in pname:memory, starting
+    from pname:memoryOffset bytes, will be bound to the specified image.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_image_common.adoc[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkBindImageMemoryInfo-memory-01612]]
+    pname:memory must: have been allocated using one of the memory types
+    allowed in the pname:memoryTypeBits member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements with pname:image
+  * [[VUID-VkBindImageMemoryInfo-memoryOffset-01613]]
+    pname:memoryOffset must: be an integer multiple of the pname:alignment
+    member of the slink:VkMemoryRequirements structure returned from a call
+    to flink:vkGetImageMemoryRequirements with pname:image
+  * [[VUID-VkBindImageMemoryInfo-memory-01614]]
+    The difference of the size of pname:memory and pname:memoryOffset must:
+    be greater than or equal to the pname:size member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements with the same pname:image
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkBindImageMemoryInfo-pNext-01615]]
+    If the pname:pNext chain does not include a
+    slink:VkBindImagePlaneMemoryInfo structure, pname:memory must: have been
+    allocated using one of the memory types allowed in the
+    pname:memoryTypeBits member of the slink:VkMemoryRequirements structure
+    returned from a call to flink:vkGetImageMemoryRequirements2 with
+    pname:image
+  * [[VUID-VkBindImageMemoryInfo-pNext-01616]]
+    If the pname:pNext chain does not include a
+    slink:VkBindImagePlaneMemoryInfo structure, pname:memoryOffset must: be
+    an integer multiple of the pname:alignment member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements2 with pname:image
+  * [[VUID-VkBindImageMemoryInfo-pNext-01617]]
+    If the pname:pNext chain does not include a
+    slink:VkBindImagePlaneMemoryInfo structure, the difference of the size
+    of pname:memory and pname:memoryOffset must: be greater than or equal to
+    the pname:size member of the slink:VkMemoryRequirements structure
+    returned from a call to flink:vkGetImageMemoryRequirements2 with the
+    same pname:image
+  * [[VUID-VkBindImageMemoryInfo-pNext-01618]]
+    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
+    structure, pname:image must: have been created with the
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT bit set
+  * [[VUID-VkBindImageMemoryInfo-image-07736]]
+    If pname:image was created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    bit set, then the pname:pNext chain must: include a
+    slink:VkBindImagePlaneMemoryInfo structure
+  * [[VUID-VkBindImageMemoryInfo-pNext-01619]]
+    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
+    structure, pname:memory must: have been allocated using one of the
+    memory types allowed in the pname:memoryTypeBits member of the
+    slink:VkMemoryRequirements structure returned from a call to
+    flink:vkGetImageMemoryRequirements2 with pname:image and where
+    slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to the
+    slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
+    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
+  * [[VUID-VkBindImageMemoryInfo-pNext-01620]]
+    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
+    structure, pname:memoryOffset must: be an integer multiple of the
+    pname:alignment member of the slink:VkMemoryRequirements structure
+    returned from a call to flink:vkGetImageMemoryRequirements2 with
+    pname:image and where
+    slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to the
+    slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
+    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
+  * [[VUID-VkBindImageMemoryInfo-pNext-01621]]
+    If the pname:pNext chain includes a slink:VkBindImagePlaneMemoryInfo
+    structure, the difference of the size of pname:memory and
+    pname:memoryOffset must: be greater than or equal to the pname:size
+    member of the slink:VkMemoryRequirements structure returned from a call
+    to flink:vkGetImageMemoryRequirements2 with the same pname:image and
+    where slink:VkBindImagePlaneMemoryInfo::pname:planeAspect corresponds to
+    the slink:VkImagePlaneMemoryRequirementsInfo::pname:planeAspect in the
+    slink:VkImageMemoryRequirementsInfo2 structure's pname:pNext chain
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1+VK_KHR_swapchain[]
+ifndef::VK_KHR_device_group+VK_KHR_swapchain[]
+  * [[VUID-VkBindImageMemoryInfo-memory-01625]]
+    pname:memory must: be a valid slink:VkDeviceMemory handle
+endif::VK_KHR_device_group+VK_KHR_swapchain[]
+endif::VK_VERSION_1_1+VK_KHR_swapchain[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkBindImageMemoryInfo-pNext-01626]]
+    If the pname:pNext chain includes a
+    slink:VkBindImageMemoryDeviceGroupInfo structure, all instances of
+    pname:memory specified by
+    slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices must: have
+    been allocated
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBindImageMemoryInfo-pNext-01627]]
+    If the pname:pNext chain includes a
+    slink:VkBindImageMemoryDeviceGroupInfo structure, and
+    slink:VkBindImageMemoryDeviceGroupInfo::pname:splitInstanceBindRegionCount
+    is not zero, then pname:image must: have been created with the
+    ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit set
+  * [[VUID-VkBindImageMemoryInfo-pNext-01628]]
+    If the pname:pNext chain includes a
+    slink:VkBindImageMemoryDeviceGroupInfo structure, all elements of
+    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions
+    must: be valid rectangles contained within the dimensions of pname:image
+  * [[VUID-VkBindImageMemoryInfo-pNext-01629]]
+    If the pname:pNext chain includes a
+    slink:VkBindImageMemoryDeviceGroupInfo structure, the union of the areas
+    of all elements of
+    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions
+    that correspond to the same instance of pname:image must: cover the
+    entire image
+endif::VKSC_VERSION_1_0[]
+ifdef::VK_KHR_swapchain[]
+  * [[VUID-VkBindImageMemoryInfo-image-01630]]
+    If pname:image was created with a valid swapchain handle in
+    slink:VkImageSwapchainCreateInfoKHR::pname:swapchain, then the
+    pname:pNext chain must: include a
+    slink:VkBindImageMemorySwapchainInfoKHR structure containing the same
+    swapchain handle
+  * [[VUID-VkBindImageMemoryInfo-pNext-01631]]
+    If the pname:pNext chain includes a
+    slink:VkBindImageMemorySwapchainInfoKHR structure, pname:memory must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-VkBindImageMemoryInfo-pNext-01632]]
+    If the pname:pNext chain does not include a
+    slink:VkBindImageMemorySwapchainInfoKHR structure, pname:memory must: be
+    a valid slink:VkDeviceMemory handle
+endif::VK_KHR_swapchain[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+****
+
+include::{generated}/validity/structs/VkBindImageMemoryInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkBindImageMemoryDeviceGroupInfo',desc='Structure specifying device within a group to bind to',type='structs']
+--
+The sname:VkBindImageMemoryDeviceGroupInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindImageMemoryDeviceGroupInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImageMemoryDeviceGroupInfoKHR.adoc[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:deviceIndexCount is the number of elements in
+    pname:pDeviceIndices.
+  * pname:pDeviceIndices is a pointer to an array of device indices.
+  * pname:splitInstanceBindRegionCount is the number of elements in
+    pname:pSplitInstanceBindRegions.
+  * pname:pSplitInstanceBindRegions is a pointer to an array of
+    slink:VkRect2D structures describing which regions of the image are
+    attached to each instance of memory.
+
+If the pname:pNext chain of slink:VkBindImageMemoryInfo includes a
+sname:VkBindImageMemoryDeviceGroupInfo structure, then that structure
+determines how memory is bound to images across multiple devices in a device
+group.
+
+If pname:deviceIndexCount is greater than zero, then on device index [eq]#i#
+pname:image is attached to the instance of the memory on the physical device
+with device index [eq]#pname:pDeviceIndices[i]#.
+
+ifndef::VKSC_VERSION_1_0[]
+Let [eq]#N# be the number of physical devices in the logical device.
+If pname:splitInstanceBindRegionCount is greater than zero, then
+pname:pSplitInstanceBindRegions is a pointer to an array of [eq]#N^2^#
+rectangles, where the image region specified by the rectangle at element
+[eq]#i*N+j# in resource instance [eq]#i# is bound to the memory instance
+[eq]#j#.
+The blocks of the memory that are bound to each sparse image block region
+use an offset in memory, relative to pname:memoryOffset, computed as if the
+whole image was being bound to a contiguous range of memory.
+In other words, horizontally adjacent image blocks use consecutive blocks of
+memory, vertically adjacent image blocks are separated by the number of
+bytes per block multiplied by the width in blocks of pname:image, and the
+block at [eq]#(0,0)# corresponds to memory starting at pname:memoryOffset.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+In Vulkan SC, pname:splitInstanceBindRegionCount must: be zero because
+sparse allocations are not supported <<SCID-8>>.
+endif::VKSC_VERSION_1_0[]
+
+If pname:splitInstanceBindRegionCount and pname:deviceIndexCount are zero
+and the memory comes from a memory heap with the
+ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
+pname:pDeviceIndices contains consecutive indices from zero to the number of
+physical devices in the logical device, minus one.
+In other words, by default each physical device attaches to its own instance
+of the memory.
+
+If pname:splitInstanceBindRegionCount and pname:deviceIndexCount are zero
+and the memory comes from a memory heap without the
+ename:VK_MEMORY_HEAP_MULTI_INSTANCE_BIT bit set, then it is as if
+pname:pDeviceIndices contains an array of zeros.
+In other words, by default each physical device attaches to instance zero.
+
+.Valid Usage
+****
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633]]
+    At least one of pname:deviceIndexCount and
+    pname:splitInstanceBindRegionCount must: be zero
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634]]
+    pname:deviceIndexCount must: either be zero or equal to the number of
+    physical devices in the logical device
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635]]
+    All elements of pname:pDeviceIndices must: be valid device indices
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-05067]]
+    pname:splitInstanceBindRegionCount must: be zero
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636]]
+    pname:splitInstanceBindRegionCount must: either be zero or equal to the
+    number of physical devices in the logical device squared
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637]]
+    Elements of pname:pSplitInstanceBindRegions that correspond to the same
+    instance of an image must: not overlap
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638]]
+    The pname:offset.x member of any element of
+    pname:pSplitInstanceBindRegions must: be a multiple of the sparse image
+    block width
+    (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
+    all non-metadata aspects of the image
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639]]
+    The pname:offset.y member of any element of
+    pname:pSplitInstanceBindRegions must: be a multiple of the sparse image
+    block height
+    (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
+    all non-metadata aspects of the image
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640]]
+    The pname:extent.width member of any element of
+    pname:pSplitInstanceBindRegions must: either be a multiple of the sparse
+    image block width of all non-metadata aspects of the image, or else
+    pname:extent.width {plus} pname:offset.x must: equal the width of the
+    image subresource
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641]]
+    The pname:extent.height member of any element of
+    pname:pSplitInstanceBindRegions must: either be a multiple of the sparse
+    image block height of all non-metadata aspects of the image, or else
+    pname:extent.height {plus} pname:offset.y must: equal the height of the
+    image subresource
+endif::VKSC_VERSION_1_0[]
+****
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkBindImageMemoryDeviceGroupInfo::pname:splitInstanceBindRegionCount
+    must: be zero <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/structs/VkBindImageMemoryDeviceGroupInfo.adoc[]
+--
+
+ifdef::VK_KHR_swapchain[]
+[open,refpage='VkBindImageMemorySwapchainInfoKHR',desc='Structure specifying swapchain image memory to bind to',type='structs']
+--
+If the pname:pNext chain of slink:VkBindImageMemoryInfo includes a
+sname:VkBindImageMemorySwapchainInfoKHR structure, then that structure
+includes a swapchain handle and image index indicating that the image will
+be bound to memory from that swapchain.
+
+The sname:VkBindImageMemorySwapchainInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkBindImageMemorySwapchainInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:swapchain is dlink:VK_NULL_HANDLE or a swapchain handle.
+  * pname:imageIndex is an image index within pname:swapchain.
+
+If pname:swapchain is not `NULL`, the pname:swapchain and pname:imageIndex
+are used to determine the memory that the image is bound to, instead of
+pname:memory and pname:memoryOffset.
+
+Memory can: be bound to a swapchain and use the pname:pDeviceIndices or
+pname:pSplitInstanceBindRegions members of
+slink:VkBindImageMemoryDeviceGroupInfo.
+
+.Valid Usage
+****
+  * [[VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644]]
+    pname:imageIndex must: be less than the number of images in
+    pname:swapchain
+ifdef::VK_EXT_swapchain_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-07756]]
+    If the pname:swapchain has been created with
+    ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT,
+    pname:imageIndex must: be one that has previously been returned by
+    flink:vkAcquireNextImageKHR or flink:vkAcquireNextImage2KHR
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-07910]]
+    If the pname:swapchain has been created with
+    ename:VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT,
+    pname:imageIndex must: be one that has previously been returned by
+    flink:vkAcquireNextImageKHR
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+endif::VK_EXT_swapchain_maintenance1[]
+****
+
+include::{generated}/validity/structs/VkBindImageMemorySwapchainInfoKHR.adoc[]
+--
+endif::VK_KHR_swapchain[]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[open,refpage='VkBindImagePlaneMemoryInfo',desc='Structure specifying how to bind an image plane to memory',type='structs']
+--
+In order to bind _planes_ of a _disjoint image_, add a
+sname:VkBindImagePlaneMemoryInfo structure to the pname:pNext chain of
+slink:VkBindImageMemoryInfo.
+
+The sname:VkBindImagePlaneMemoryInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindImagePlaneMemoryInfo.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImagePlaneMemoryInfoKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:planeAspect is a ename:VkImageAspectFlagBits value specifying the
+    aspect of the disjoint image plane to bind.
+
+.Valid Usage
+****
+  * [[VUID-VkBindImagePlaneMemoryInfo-planeAspect-02283]]
+    If the image's pname:tiling is ename:VK_IMAGE_TILING_LINEAR or
+    ename:VK_IMAGE_TILING_OPTIMAL, then pname:planeAspect must: be a single
+    valid <<formats-planes-image-aspect,multi-planar aspect mask>> bit
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkBindImagePlaneMemoryInfo-planeAspect-02284]]
+    If the image's pname:tiling is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then pname:planeAspect
+    must: be a single valid _memory plane_ for the image (that is,
+    pname:aspectMask must: specify a plane index that is less than the
+    slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierPlaneCount
+    associated with the image's pname:format and
+    slink:VkImageDrmFormatModifierPropertiesEXT::pname:drmFormatModifier)
+endif::VK_EXT_image_drm_format_modifier[]
+****
+
+include::{generated}/validity/structs/VkBindImagePlaneMemoryInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+
+
+[[resources-bufferimagegranularity,Buffer-Image Granularity]]
+.Buffer-Image Granularity
+The implementation-dependent limit <<limits-bufferImageGranularity,
+pname:bufferImageGranularity>> specifies a page-like granularity at which
+linear and non-linear resources must: be placed in adjacent memory locations
+to avoid aliasing.
+Two resources which do not satisfy this granularity requirement are said to
+<<resources-memory-aliasing,alias>>.
+pname:bufferImageGranularity is specified in bytes, and must: be a power of
+two.
+Implementations which do not impose a granularity restriction may: report a
+pname:bufferImageGranularity value of one.
+
+[NOTE]
+.Note
+====
+Despite its name, pname:bufferImageGranularity is really a granularity
+between "`linear`" and "`non-linear`" resources.
+====
+
+Given resourceA at the lower memory offset and resourceB at the higher
+memory offset in the same sname:VkDeviceMemory object, where one resource is
+linear and the other is non-linear (as defined in the
+<<glossary-linear-resource,Glossary>>), and the following:
+
+[source,c]
+----
+resourceA.end       = resourceA.memoryOffset + resourceA.size - 1
+resourceA.endPage   = resourceA.end & ~(bufferImageGranularity-1)
+resourceB.start     = resourceB.memoryOffset
+resourceB.startPage = resourceB.start & ~(bufferImageGranularity-1)
+----
+
+The following property must: hold:
+
+[source,c]
+----
+resourceA.endPage < resourceB.startPage
+----
+
+That is, the end of the first resource (A) and the beginning of the second
+resource (B) must: be on separate "`pages`" of size
+pname:bufferImageGranularity.
+pname:bufferImageGranularity may: be different than the physical page size
+of the memory heap.
+This restriction is only needed when a linear resource and a non-linear
+resource are adjacent in memory and will be used simultaneously.
+The memory ranges of adjacent resources can: be closer than
+pname:bufferImageGranularity, provided they meet the pname:alignment
+requirement for the objects in question.
+
+Sparse block size in bytes and sparse image and buffer memory alignments
+must: all be multiples of the pname:bufferImageGranularity.
+Therefore, memory bound to sparse resources naturally satisfies the
+pname:bufferImageGranularity.
+
+
+[[resources-sharing]]
+== Resource Sharing Mode
+
+[open,refpage='VkSharingMode',desc='Buffer and image sharing modes',type='enums']
+--
+Buffer and image objects are created with a _sharing mode_ controlling how
+they can: be accessed from queues.
+The supported sharing modes are:
+
+include::{generated}/api/enums/VkSharingMode.adoc[]
+
+  * ename:VK_SHARING_MODE_EXCLUSIVE specifies that access to any range or
+    image subresource of the object will be exclusive to a single queue
+    family at a time.
+  * ename:VK_SHARING_MODE_CONCURRENT specifies that concurrent access to any
+    range or image subresource of the object from multiple queue families is
+    supported.
+
+[NOTE]
+.Note
+====
+ename:VK_SHARING_MODE_CONCURRENT may: result in lower performance access to
+the buffer or image than ename:VK_SHARING_MODE_EXCLUSIVE.
+====
+
+Ranges of buffers and image subresources of image objects created using
+ename:VK_SHARING_MODE_EXCLUSIVE must: only be accessed by queues in the
+queue family that has _ownership_ of the resource.
+Upon creation, such resources are not owned by any queue family; ownership
+is implicitly acquired upon first use within a queue.
+Once a resource using ename:VK_SHARING_MODE_EXCLUSIVE is owned by some queue
+family, the application must: perform a
+<<synchronization-queue-transfers,queue family ownership transfer>> to make
+the memory contents of a range or image subresource accessible to a
+different queue family.
+
+[NOTE]
+.Note
+====
+Images still require a <<resources-image-layouts, layout transition>> from
+ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+before being used on the first queue.
+====
+
+A queue family can: take ownership of an image subresource or buffer range
+of a resource created with ename:VK_SHARING_MODE_EXCLUSIVE, without an
+ownership transfer, in the same way as for a resource that was just created;
+however, taking ownership in this way has the effect that the contents of
+the image subresource or buffer range are undefined:.
+
+Ranges of buffers and image subresources of image objects created using
+ename:VK_SHARING_MODE_CONCURRENT must: only be accessed by queues from the
+queue families specified through the pname:queueFamilyIndexCount and
+pname:pQueueFamilyIndices members of the corresponding create info
+structures.
+--
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+[[resources-external-sharing]]
+=== External Resource Sharing
+
+Resources should: only be accessed in the Vulkan instance that has exclusive
+ownership of their underlying memory.
+Only one Vulkan instance has exclusive ownership of a resource's underlying
+memory at a given time, regardless of whether the resource was created using
+ename:VK_SHARING_MODE_EXCLUSIVE or ename:VK_SHARING_MODE_CONCURRENT.
+Applications can transfer ownership of a resource's underlying memory only
+if the memory has been imported from or exported to another instance or
+external API using external memory handles.
+The semantics for transferring ownership outside of the instance are similar
+to those used for transferring ownership of ename:VK_SHARING_MODE_EXCLUSIVE
+resources between queues, and is also accomplished using
+slink:VkBufferMemoryBarrier or slink:VkImageMemoryBarrier operations.
+To make the contents of the underlying memory accessible in the destination
+instance or API, applications must:
+
+  . Release exclusive ownership from the source instance or API.
+  . Ensure the release operation has completed using semaphores or fences.
+  . Acquire exclusive ownership in the destination instance or API
+
+Unlike queue ownership transfers, the destination instance or API is not
+specified explicitly when releasing ownership, nor is the source instance or
+API specified when acquiring ownership.
+Instead, the image or memory barrier's pname:dstQueueFamilyIndex or
+pname:srcQueueFamilyIndex parameters are set to the reserved queue family
+index ename:VK_QUEUE_FAMILY_EXTERNAL
+ifdef::VK_EXT_queue_family_foreign[]
+or ename:VK_QUEUE_FAMILY_FOREIGN_EXT
+endif::VK_EXT_queue_family_foreign[]
+to represent the external destination or source respectively.
+
+Binding a resource to a memory object shared between multiple Vulkan
+instances or other APIs does not change the ownership of the underlying
+memory.
+The first entity to access the resource implicitly acquires ownership.
+An entity can: also implicitly take ownership from another entity in the
+same way without an explicit ownership transfer.
+However, taking ownership in this way has the effect that the contents of
+the underlying memory are undefined:.
+
+Accessing a resource backed by memory that is owned by a particular instance
+or API has the same semantics as accessing a ename:VK_SHARING_MODE_EXCLUSIVE
+resource, with one exception: Implementations must: ensure layout
+transitions performed on one member of a set of identical subresources of
+identical images that alias the same range of an underlying memory object
+affect the layout of all the subresources in the set.
+
+As a corollary, writes to any image subresources in such a set must: not
+make the contents of memory used by other subresources in the set
+undefined:.
+An application can: define the content of a subresource of one image by
+performing device writes to an identical subresource of another image
+provided both images are bound to the same region of external memory.
+Applications may: also add resources to such a set after the content of the
+existing set members has been defined without making the content undefined:
+by creating a new image with the initial layout
+ename:VK_IMAGE_LAYOUT_UNDEFINED and binding it to the same region of
+external memory as the existing images.
+
+[NOTE]
+.Note
+====
+Because layout transitions apply to all identical images aliasing the same
+region of external memory, the actual layout of the memory backing a new
+image as well as an existing image with defined content will not be
+undefined:.
+Such an image is not usable until it acquires ownership of its memory from
+the existing owner.
+Therefore, the layout specified as part of this transition will be the true
+initial layout of the image.
+The undefined: layout specified when creating it is a placeholder to
+simplify valid usage requirements.
+====
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+
+[[resources-memory-aliasing]]
+== Memory Aliasing
+
+A range of a sname:VkDeviceMemory allocation is _aliased_ if it is bound to
+multiple resources simultaneously, as described below, via
+flink:vkBindImageMemory, flink:vkBindBufferMemory,
+ifdef::VK_NV_ray_tracing[]
+flink:vkBindAccelerationStructureMemoryNV,
+endif::VK_NV_ray_tracing[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+or via <<sparsememory-resource-binding,sparse memory bindings>>.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifndef::VKSC_VERSION_1_0[via <<sparsememory-resource-binding,sparse memory bindings>>,]
+or by binding the memory to resources in multiple Vulkan instances or
+external APIs using external memory handle export and import mechanisms.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+Consider two resources, resource~A~ and resource~B~, bound respectively to
+memory range~A~ and range~B~.
+Let paddedRange~A~ and paddedRange~B~ be, respectively, range~A~ and
+range~B~ aligned to pname:bufferImageGranularity.
+If the resources are both linear or both non-linear (as defined in the
+<<glossary-linear-resource,Glossary>>), then the resources _alias_ the
+memory in the intersection of range~A~ and range~B~.
+If one resource is linear and the other is non-linear, then the resources
+_alias_ the memory in the intersection of paddedRange~A~ and paddedRange~B~.
+
+Applications can: alias memory, but use of multiple aliases is subject to
+several constraints.
+
+[NOTE]
+.Note
+====
+Memory aliasing can: be useful to reduce the total device memory footprint
+of an application, if some large resources are used for disjoint periods of
+time.
+====
+
+When a <<glossary-linear-resource,non-linear>>,
+non-ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT image is bound to an aliased
+range, all image subresources of the image _overlap_ the range.
+When a linear image is bound to an aliased range, the image subresources
+that (according to the image's advertised layout) include bytes from the
+aliased range overlap the range.
+When a ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT image has sparse image
+blocks bound to an aliased range, only image subresources including those
+sparse image blocks overlap the range, and when the memory bound to the
+image's mip tail overlaps an aliased range all image subresources in the mip
+tail overlap the range.
+
+Buffers, and linear image subresources in either the
+ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL
+layouts, are _host-accessible subresources_.
+That is, the host has a well-defined addressing scheme to interpret the
+contents, and thus the layout of the data in memory can: be consistently
+interpreted across aliases if each of those aliases is a host-accessible
+subresource.
+Non-linear images, and linear image subresources in other layouts, are not
+host-accessible.
+
+If two aliases are both host-accessible, then they interpret the contents of
+the memory in consistent ways, and data written to one alias can: be read by
+the other alias.
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+[[resources-memory-aliasing-consistency]]
+If two aliases are both images that were created with identical creation
+parameters, both were created with the ename:VK_IMAGE_CREATE_ALIAS_BIT flag
+set, and both are bound identically to memory
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+except for slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices and
+slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions,
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+then they interpret the contents of the memory in consistent ways, and data
+written to one alias can: be read by the other alias.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[resources-memory-aliasing-consistency-planes]]
+Additionally, if an individual plane of a multi-planar image and a
+single-plane image alias the same memory, then they also interpret the
+contents of the memory in consistent ways under the same conditions, but
+with the following modifications:
+
+  * Both must: have been created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    flag.
+  * The single-plane image must: have a elink:VkFormat that is
+    <<formats-compatible-planes,equivalent>> to that of the multi-planar
+    image's individual plane.
+  * The single-plane image and the individual plane of the multi-planar
+    image must: be bound identically to memory
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+    except for slink:VkBindImageMemoryDeviceGroupInfo::pname:pDeviceIndices
+    and
+    slink:VkBindImageMemoryDeviceGroupInfo::pname:pSplitInstanceBindRegions.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+  * The pname:width and pname:height of the single-plane image are derived
+    from the multi-planar image's dimensions in the manner listed for
+    <<formats-compatible-planes,plane compatibility>> for the aliased plane.
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * If either image's pname:tiling is
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then both images must: be
+    <<glossary-linear-resource,linear>>.
+endif::VK_EXT_image_drm_format_modifier[]
+  * All other creation parameters must: be identical
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+endif::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+Aliases created by binding the same memory to resources in multiple Vulkan
+instances or external APIs using external memory handle export and import
+mechanisms interpret the contents of the memory in consistent ways, and data
+written to one alias can: be read by the other alias.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+Otherwise, the aliases interpret the contents of the memory differently, and
+writes via one alias make the contents of memory partially or completely
+undefined: to the other alias.
+If the first alias is a host-accessible subresource, then the bytes affected
+are those written by the memory operations according to its addressing
+scheme.
+If the first alias is not host-accessible, then the bytes affected are those
+overlapped by the image subresources that were written.
+If the second alias is a host-accessible subresource, the affected bytes
+become undefined:.
+If the second alias is not host-accessible, all sparse image blocks (for
+sparse partially-resident images) or all image subresources (for non-sparse
+image and fully resident sparse images) that overlap the affected bytes
+become undefined:.
+
+If any image subresources are made undefined: due to writes to an alias,
+then each of those image subresources must: have its layout transitioned
+from ename:VK_IMAGE_LAYOUT_UNDEFINED to a valid layout before it is used, or
+from ename:VK_IMAGE_LAYOUT_PREINITIALIZED if the memory has been written by
+the host.
+If any sparse blocks of a sparse image have been made undefined:, then only
+the image subresources containing them must: be transitioned.
+
+Use of an overlapping range by two aliases must: be separated by a memory
+dependency using the appropriate <<synchronization-access-types, access
+types>> if at least one of those uses performs writes, whether the aliases
+interpret memory consistently or not.
+If buffer or image memory barriers are used, the scope of the barrier must:
+contain the entire range and/or set of image subresources that overlap.
+
+If two aliasing image views are used in the same framebuffer, then the
+render pass must: declare the attachments using the
+<<renderpass-aliasing,ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT>>, and
+follow the other rules listed in that section.
+
+[NOTE]
+.Note
+====
+Memory recycled via an application suballocator (i.e. without freeing and
+reallocating the memory objects) is not substantially different from memory
+aliasing.
+However, a suballocator usually waits on a fence before recycling a region
+of memory, and signaling a fence involves sufficient implicit dependencies
+to satisfy all the above requirements.
+====
+
+[[resources-memory-overlap]]
+=== Resource Memory Overlap
+
+Applications can: safely access a resource concurrently as long as the
+memory locations do not overlap as defined in
+<<memory-model-memory-location,Memory Location>>.
+This includes aliased resources if such aliasing is well-defined.
+It also includes access from different queues and/or queue families if such
+concurrent access is supported by the resource.
+Transfer commands only access memory locations specified by the range of the
+transfer command.
+
+[NOTE]
+.Note
+====
+The intent is that buffers (or linear images) can be accessed concurrently,
+even when they share cache lines, but otherwise do not access the same
+memory range.
+The concept of a device cache line size is not exposed in the memory model.
+====
+
+ifdef::VK_FUCHSIA_buffer_collection[]
+[[resources-buffer-collection-fuchsia]]
+== Buffer Collections
+
+[open,refpage='VkBufferCollectionFUCHSIA',desc='Opaque handle to a buffer collection object',type='handles']
+--
+Fuchsia's FIDL-based Sysmem service interoperates with Vulkan via the
+`apiext:VK_FUCHSIA_buffer_collection` extension.
+
+A buffer collection is a set of one or more buffers which were allocated
+together as a group and which all have the same properties.
+These properties describe the buffers' internal representation, such as its
+dimensions and memory layout.
+This ensures that all of the buffers can be used interchangeably by tasks
+that require swapping among multiple buffers, such as double-buffered
+graphics rendering.
+
+On Fuchsia, the Sysmem service uses buffer collections as a core construct
+in its design.
+
+Buffer collections are represented by sname:VkBufferCollectionFUCHSIA
+handles:
+
+include::{generated}/api/handles/VkBufferCollectionFUCHSIA.adoc[]
+--
+
+
+=== Definitions
+
+  * FIDL - Fuchsia Interface Definition Language.
+    The declarative language used to define FIDL interprocess communication
+    interfaces on Fuchsia.
+    FIDL files use the `fidl` extension.
+    FIDL is also used to refer to the services defined by interfaces
+    declared in the FIDL language
+  * Sysmem - The FIDL service that facilitates optimal buffer sharing and
+    reuse on Fuchsia
+  * client - Any participant of the buffer collection e.g. the Vulkan
+    application
+  * token - A code:zx_handle_t Zircon channel object that allows
+    participation in the buffer collection
+
+
+=== Platform Initialization for Buffer Collections
+To initialize a buffer collection on Fuchsia:
+
+  * Connect to the Sysmem service to initialize a Sysmem allocator
+  * Create an initial buffer collection token using the Sysmem allocator
+  * Duplicate the token for each participant beyond the initiator
+  * See the Sysmem Overview and fuchsia.sysmem FIDL documentation on
+    fuchsia.dev for more detailed information
+
+
+=== Create the Buffer Collection
+
+[open,refpage='vkCreateBufferCollectionFUCHSIA',desc='Create a new buffer collection',type='protos']
+--
+To create an slink:VkBufferCollectionFUCHSIA for Vulkan to participate in
+the buffer collection:
+
+include::{generated}/api/protos/vkCreateBufferCollectionFUCHSIA.adoc[]
+
+  * pname:device is the logical device that creates the
+    sname:VkBufferCollectionFUCHSIA
+  * pname:pCreateInfo is a pointer to a
+    slink:VkBufferCollectionCreateInfoFUCHSIA structure containing
+    parameters affecting creation of the buffer collection
+  * pname:pAllocator is a pointer to a slink:VkAllocationCallbacks structure
+    controlling host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter
+  * pname:pBufferCollection is a pointer to a
+    slink:VkBufferCollectionFUCHSIA handle in which the resulting buffer
+    collection object is returned
+
+include::{generated}/validity/protos/vkCreateBufferCollectionFUCHSIA.adoc[]
+
+.Host Access
+****
+All functions referencing a slink:VkBufferCollectionFUCHSIA must: be
+externally synchronized with the exception of
+fname:vkCreateBufferCollectionFUCHSIA.
+****
+--
+
+
+[open,refpage='VkBufferCollectionCreateInfoFUCHSIA',desc='Structure specifying desired parameters to create the buffer collection',type='structs']
+--
+The sname:VkBufferCollectionCreateInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferCollectionCreateInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:collectionToken is a fname:zx_handle_t containing the Sysmem
+    client's buffer collection token
+
+.Valid Usage
+****
+  * [[VUID-VkBufferCollectionCreateInfoFUCHSIA-collectionToken-06393]]
+    pname:collectionToken must: be a valid code:zx_handle_t to a Zircon
+    channel allocated from Sysmem
+    (code:fuchsia.sysmem.Allocator/AllocateSharedCollection) with
+    code:ZX_DEFAULT_CHANNEL_RIGHTS rights
+****
+
+include::{generated}/validity/structs/VkBufferCollectionCreateInfoFUCHSIA.adoc[]
+--
+
+
+=== Set the Constraints
+Buffer collections can be established for slink:VkImage allocations or
+slink:VkBuffer allocations.
+
+
+==== Set Image-based Buffer Collection Constraints
+
+[open,refpage='vkSetBufferCollectionImageConstraintsFUCHSIA',desc='Set image-based constraints for a buffer collection',type='protos']
+--
+Setting the constraints on the buffer collection initiates the format
+negotiation and allocation of the buffer collection.
+To set the constraints on a slink:VkImage buffer collection, call:
+
+include::{generated}/api/protos/vkSetBufferCollectionImageConstraintsFUCHSIA.adoc[]
+
+  * pname:device is the logical device
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:pImageConstraintsInfo is a pointer to a
+    slink:VkImageConstraintsInfoFUCHSIA structure
+
+fname:vkSetBufferCollectionImageConstraintsFUCHSIA may: fail if
+pname:pImageConstraintsInfo::pname:formatConstraintsCount is larger than the
+implementation-defined limit.
+If that occurs, flink:vkSetBufferCollectionImageConstraintsFUCHSIA will
+return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+fname:vkSetBufferCollectionImageConstraintsFUCHSIA may: fail if the
+implementation does not support any of the formats described by the
+pname:pImageConstraintsInfo structure.
+If that occurs, flink:vkSetBufferCollectionImageConstraintsFUCHSIA will
+return ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
+
+.Valid Usage
+****
+  * [[VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-collection-06394]]
+    fname:vkSetBufferCollectionImageConstraintsFUCHSIA or
+    fname:vkSetBufferCollectionBufferConstraintsFUCHSIA must: not have
+    already been called on pname:collection
+****
+
+include::{generated}/validity/protos/vkSetBufferCollectionImageConstraintsFUCHSIA.adoc[]
+--
+
+[open,refpage='VkImageConstraintsInfoFUCHSIA',desc='Structure of image-based buffer collection constraints',type='structs']
+--
+The sname:VkImageConstraintsInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImageConstraintsInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:formatConstraintsCount is the number of elements in
+    pname:pFormatConstraints.
+  * pname:pFormatConstraints is a pointer to an array of
+    slink:VkImageFormatConstraintsInfoFUCHSIA structures of size
+    pname:formatConstraintsCount that is used to further constrain buffer
+    collection format selection for image-based buffer collections.
+  * pname:bufferCollectionConstraints is a
+    slink:VkBufferCollectionConstraintsInfoFUCHSIA structure used to supply
+    parameters for the negotiation and allocation for buffer-based buffer
+    collections.
+  * pname:flags is a elink:VkImageConstraintsInfoFlagBitsFUCHSIA value
+    specifying hints about the type of memory Sysmem should allocate for the
+    buffer collection.
+
+.Valid Usage
+****
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06395]]
+    All elements of pname:pFormatConstraints must: have at least one bit set
+    in its
+    slink:VkImageFormatConstraintsInfoFUCHSIA::pname:requiredFormatFeatures
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06396]]
+    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_SAMPLED_BIT, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06397]]
+    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_STORAGE_BIT, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
+    ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06398]]
+    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06399]]
+    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06400]]
+    If pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain at
+    least one of ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or
+    ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkImageConstraintsInfoFUCHSIA-attachmentFragmentShadingRate-06401]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is enabled, and
+    pname:pFormatConstraints::pname:imageCreateInfo::pname:usage contains
+    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then
+    pname:pFormatConstraints::pname:requiredFormatFeatures must: contain
+    ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate[]
+****
+
+include::{generated}/validity/structs/VkImageConstraintsInfoFUCHSIA.adoc[]
+--
+
+[open,refpage='VkImageConstraintsInfoFlagsFUCHSIA',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageConstraintsInfoFlagsFUCHSIA.adoc[]
+
+tname:VkImageConstraintsInfoFlagsFUCHSIA is a bitmask type for setting a
+mask of zero or more elink:VkImageConstraintsInfoFlagBitsFUCHSIA bits.
+--
+
+[open,refpage='VkImageConstraintsInfoFlagBitsFUCHSIA',desc='Bitmask specifying image constraints flags',type='enums']
+--
+Bits which can: be set in
+elink:VkImageConstraintsInfoFlagBitsFUCHSIA::pname:flags include:
+
+include::{generated}/api/enums/VkImageConstraintsInfoFlagBitsFUCHSIA.adoc[]
+
+General hints about the type of memory that should be allocated by Sysmem
+based on the expected usage of the images in the buffer collection include:
+
+  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA
+  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA
+  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA
+  * ename:VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA
+
+For protected memory:
+
+  * ename:VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA specifies
+    that protected memory is optional for the buffer collection.
+
+Note that if all participants in the buffer collection (Vulkan or otherwise)
+specify that protected memory is optional, Sysmem will not allocate
+protected memory.
+--
+
+[open,refpage='VkImageFormatConstraintsInfoFUCHSIA',desc='Structure image-based buffer collection constraints',type='structs']
+--
+The sname:VkImageFormatConstraintsInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatConstraintsInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:imageCreateInfo is the slink:VkImageCreateInfo used to create a
+    slink:VkImage that is to use memory from the
+    slink:VkBufferCollectionFUCHSIA
+  * pname:requiredFormatFeatures is a bitmask of
+    ename:VkFormatFeatureFlagBits specifying required features of the
+    buffers in the buffer collection
+  * pname:flags is reserved for future use
+  * pname:sysmemPixelFormat is a code:PixelFormatType value from the
+    `fuchsia.sysmem/image_formats.fidl` FIDL interface
+  * pname:colorSpaceCount the element count of pname:pColorSpaces
+  * pname:pColorSpaces is a pointer to an array of
+    slink:VkSysmemColorSpaceFUCHSIA structs of size pname:colorSpaceCount
+
+include::{generated}/validity/structs/VkImageFormatConstraintsInfoFUCHSIA.adoc[]
+--
+
+[open,refpage='VkImageFormatConstraintsFlagsFUCHSIA',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageFormatConstraintsFlagsFUCHSIA.adoc[]
+
+tname:VkImageFormatConstraintsFlagsFUCHSIA is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[open,refpage='VkBufferCollectionConstraintsInfoFUCHSIA',desc='Structure of general buffer collection constraints',type='structs']
+--
+The sname:VkBufferCollectionConstraintsInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferCollectionConstraintsInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:minBufferCount is the minimum number of buffers available in the
+    collection
+  * pname:maxBufferCount is the maximum number of buffers allowed in the
+    collection
+  * pname:minBufferCountForCamping is the per-participant minimum buffers
+    for camping
+  * pname:minBufferCountForDedicatedSlack is the per-participant minimum
+    buffers for dedicated slack
+  * pname:minBufferCountForSharedSlack is the per-participant minimum
+    buffers for shared slack
+
+Sysmem uses all buffer count parameters in combination to determine the
+number of buffers it will allocate.
+Sysmem defines buffer count constraints in
+`fuchsia.sysmem/constraints.fidl`.
+
+_Camping_ as referred to by pname:minBufferCountForCamping, is the number of
+buffers that should be available for the participant that are not for
+transient use.
+This number of buffers is required for the participant to logically operate.
+
+_Slack_ as referred to by pname:minBufferCountForDedicatedSlack and
+pname:minBufferCountForSharedSlack, refers to the number of buffers desired
+by participants for optimal performance.
+pname:minBufferCountForDedicatedSlack refers to the current participant.
+pname:minBufferCountForSharedSlack refers to buffer slack for all
+participants in the collection.
+
+include::{generated}/validity/structs/VkBufferCollectionConstraintsInfoFUCHSIA.adoc[]
+--
+
+[open,refpage='VkSysmemColorSpaceFUCHSIA',desc='Structure describing the buffer collections color space',type='structs']
+--
+The sname:VkSysmemColorSpaceFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkSysmemColorSpaceFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:colorSpace value of the Sysmem code:ColorSpaceType
+
+.Valid Usage
+****
+  * [[VUID-VkSysmemColorSpaceFUCHSIA-colorSpace-06402]]
+    pname:colorSpace must: be a code:ColorSpaceType as defined in
+    `fuchsia.sysmem/image_formats.fidl`
+****
+
+include::{generated}/validity/structs/VkSysmemColorSpaceFUCHSIA.adoc[]
+--
+
+
+==== Set Buffer-based Buffer Collection Constraints
+
+[open,refpage='vkSetBufferCollectionBufferConstraintsFUCHSIA',desc='Set buffer-based constraints for a buffer collection',type='protos']
+--
+To set the constraints on a slink:VkBuffer buffer collection, call:
+
+include::{generated}/api/protos/vkSetBufferCollectionBufferConstraintsFUCHSIA.adoc[]
+
+  * pname:device is the logical device
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:pBufferConstraintsInfo is a pointer to a
+    slink:VkBufferConstraintsInfoFUCHSIA structure
+
+fname:vkSetBufferCollectionBufferConstraintsFUCHSIA may: fail if the
+implementation does not support the constraints specified in the
+pname:bufferCollectionConstraints structure.
+If that occurs, flink:vkSetBufferCollectionBufferConstraintsFUCHSIA will
+return ename:VK_ERROR_FORMAT_NOT_SUPPORTED.
+
+.Valid Usage
+****
+  * [[VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-collection-06403]]
+    fname:vkSetBufferCollectionImageConstraintsFUCHSIA or
+    fname:vkSetBufferCollectionBufferConstraintsFUCHSIA must: not have
+    already been called on pname:collection
+****
+
+include::{generated}/validity/protos/vkSetBufferCollectionBufferConstraintsFUCHSIA.adoc[]
+--
+
+[open,refpage='VkBufferConstraintsInfoFUCHSIA',desc='Structure buffer-based buffer collection constraints',type='structs']
+--
+The sname:VkBufferConstraintsInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferConstraintsInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:pBufferCreateInfo a pointer to a slink:VkBufferCreateInfo struct
+    describing the buffer attributes for the buffer collection
+  * pname:requiredFormatFeatures bitmask of ename:VkFormatFeatureFlagBits
+    required features of the buffers in the buffer collection
+  * pname:bufferCollectionConstraints is used to supply parameters for the
+    negotiation and allocation of the buffer collection
+
+.Valid Usage
+****
+  * [[VUID-VkBufferConstraintsInfoFUCHSIA-requiredFormatFeatures-06404]]
+    The pname:requiredFormatFeatures bitmask of
+    ename:VkFormatFeatureFlagBits must: be chosen from among the buffer
+    compatible format features listed in
+    <<buffer-compatible-format-features,buffer compatible format features>>
+****
+
+include::{generated}/validity/structs/VkBufferConstraintsInfoFUCHSIA.adoc[]
+--
+
+
+=== Retrieve Buffer Collection Properties
+
+[open,refpage='vkGetBufferCollectionPropertiesFUCHSIA',desc='Retrieve properties from a buffer collection',type='protos']
+--
+After constraints have been set on the buffer collection by calling
+flink:vkSetBufferCollectionImageConstraintsFUCHSIA or
+flink:vkSetBufferCollectionBufferConstraintsFUCHSIA, call
+fname:vkGetBufferCollectionPropertiesFUCHSIA to retrieve the negotiated and
+finalized properties of the buffer collection.
+
+The call to fname:vkGetBufferCollectionPropertiesFUCHSIA is synchronous.
+It waits for the Sysmem format negotiation and buffer collection allocation
+to complete before returning.
+
+include::{generated}/api/protos/vkGetBufferCollectionPropertiesFUCHSIA.adoc[]
+
+  * pname:device is the logical device handle
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:pProperties is a pointer to the retrieved
+    slink:VkBufferCollectionPropertiesFUCHSIA struct
+
+[[sysmem-chosen-create-infos]]
+For image-based buffer collections, upon calling
+fname:vkGetBufferCollectionPropertiesFUCHSIA, Sysmem will choose an element
+of the slink:VkImageConstraintsInfoFUCHSIA::pname:pImageCreateInfos
+established by the preceding call to
+flink:vkSetBufferCollectionImageConstraintsFUCHSIA.
+The index of the element chosen is stored in and can be retrieved from
+slink:VkBufferCollectionPropertiesFUCHSIA::pname:createInfoIndex.
+
+For buffer-based buffer collections, a single slink:VkBufferCreateInfo is
+specified as slink:VkBufferConstraintsInfoFUCHSIA::pname:createInfo.
+slink:VkBufferCollectionPropertiesFUCHSIA::pname:createInfoIndex will
+therefore always be zero.
+
+fname:vkGetBufferCollectionPropertiesFUCHSIA may: fail if Sysmem is unable
+to resolve the constraints of all of the participants in the buffer
+collection.
+If that occurs, fname:vkGetBufferCollectionPropertiesFUCHSIA will return
+ename:VK_ERROR_INITIALIZATION_FAILED.
+
+.Valid Usage
+****
+  * [[VUID-vkGetBufferCollectionPropertiesFUCHSIA-None-06405]]
+    Prior to calling flink:vkGetBufferCollectionPropertiesFUCHSIA, the
+    constraints on the buffer collection must: have been set by either
+    flink:vkSetBufferCollectionImageConstraintsFUCHSIA or
+    flink:vkSetBufferCollectionBufferConstraintsFUCHSIA
+****
+
+include::{generated}/validity/protos/vkGetBufferCollectionPropertiesFUCHSIA.adoc[]
+--
+
+[open,refpage='VkBufferCollectionPropertiesFUCHSIA',desc='Structure specifying the negotiated format chosen by Sysmem',type='structs']
+--
+The sname:VkBufferCollectionPropertiesFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferCollectionPropertiesFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:memoryTypeBits is a bitmask containing one bit set for every
+    memory type which the buffer collection can be imported as buffer
+    collection
+  * pname:bufferCount is the number of buffers in the collection
+  * pname:createInfoIndex as described in <<sysmem-chosen-create-infos,
+    Sysmem chosen create infos>>
+  * pname:sysmemPixelFormat is the Sysmem code:PixelFormatType as defined in
+    `fuchsia.sysmem/image_formats.fidl`
+  * pname:formatFeatures is a bitmask of elink:VkFormatFeatureFlagBits
+    shared by the buffer collection
+  * pname:sysmemColorSpaceIndex is a slink:VkSysmemColorSpaceFUCHSIA struct
+    specifying the color space
+  * pname:samplerYcbcrConversionComponents is a slink:VkComponentMapping
+    struct specifying the component mapping
+  * pname:suggestedYcbcrModel is a elink:VkSamplerYcbcrModelConversion value
+    specifying the suggested {YCbCr} model
+  * pname:suggestedYcbcrRange is a elink:VkSamplerYcbcrRange value
+    specifying the suggested {YCbCr} range
+  * pname:suggestedXChromaOffset is a elink:VkChromaLocation value
+    specifying the suggested X chroma offset
+  * pname:suggestedYChromaOffset is a elink:VkChromaLocation value
+    specifying the suggested Y chroma offset
+
+pname:sysmemColorSpace is only set for image-based buffer collections where
+the constraints were specified using slink:VkImageConstraintsInfoFUCHSIA in
+a call to flink:vkSetBufferCollectionImageConstraintsFUCHSIA.
+
+For image-based buffer collections, pname:createInfoIndex will identify both
+the slink:VkImageConstraintsInfoFUCHSIA::pname:pImageCreateInfos element and
+the slink:VkImageConstraintsInfoFUCHSIA::pname:pFormatConstraints element
+chosen by Sysmem when flink:vkSetBufferCollectionImageConstraintsFUCHSIA was
+called.
+The value of pname:sysmemColorSpaceIndex will be an index to one of the
+color spaces provided in the
+slink:VkImageFormatConstraintsInfoFUCHSIA::pname:pColorSpaces array.
+
+The implementation must have pname:formatFeatures with all bits set that
+were set in
+slink:VkImageFormatConstraintsInfoFUCHSIA::pname:requiredFormatFeatures, by
+the call to flink:vkSetBufferCollectionImageConstraintsFUCHSIA, at
+pname:createInfoIndex (other bits could be set as well).
+
+include::{generated}/validity/structs/VkBufferCollectionPropertiesFUCHSIA.adoc[]
+--
+
+
+=== Memory Allocation
+
+To import memory from a buffer collection into a slink:VkImage or a
+slink:VkBuffer, chain a slink:VkImportMemoryBufferCollectionFUCHSIA
+structure to the pname:pNext member of the slink:VkMemoryAllocateInfo in the
+call to flink:vkAllocateMemory.
+
+[open,refpage='VkImportMemoryBufferCollectionFUCHSIA',desc='Structure to specify the Sysmem buffer to import',type='structs']
+--
+The sname:VkImportMemoryBufferCollectionFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImportMemoryBufferCollectionFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:index the index of the buffer to import from pname:collection
+
+.Valid Usage
+****
+  * [[VUID-VkImportMemoryBufferCollectionFUCHSIA-index-06406]]
+    pname:index must: be less than the value retrieved as
+    slink:VkBufferCollectionPropertiesFUCHSIA:bufferCount
+****
+
+include::{generated}/validity/structs/VkImportMemoryBufferCollectionFUCHSIA.adoc[]
+--
+
+[open,refpage='vkDestroyBufferCollectionFUCHSIA',desc='Destroy a buffer collection',type='protos']
+--
+To release a slink:VkBufferCollectionFUCHSIA:
+
+include::{generated}/api/protos/vkDestroyBufferCollectionFUCHSIA.adoc[]
+
+  * pname:device is the logical device that creates the
+    sname:VkBufferCollectionFUCHSIA
+  * pname:collection is the slink:VkBufferCollectionFUCHSIA handle
+  * pname:pAllocator is a pointer to a slink:VkAllocationCallbacks structure
+    controlling host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyBufferCollectionFUCHSIA-collection-06407]]
+    slink:VkImage and slink:VkBuffer objects that referenced
+    pname:collection upon creation by inclusion of a
+    slink:VkBufferCollectionImageCreateInfoFUCHSIA or
+    slink:VkBufferCollectionBufferCreateInfoFUCHSIA chained to their
+    slink:VkImageCreateInfo or slink:VkBufferCreateInfo structures
+    respectively, may: outlive pname:collection
+****
+
+include::{generated}/validity/protos/vkDestroyBufferCollectionFUCHSIA.adoc[]
+--
+endif::VK_FUCHSIA_buffer_collection[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/samplers.adoc b/codegen/vulkan/vulkan-docs-next/chapters/samplers.adoc
new file mode 100644
index 0000000..1522ff9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/samplers.adoc
@@ -0,0 +1,1333 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[samplers]]
+= Samplers
+
+[open,refpage='VkSampler',desc='Opaque handle to a sampler object',type='handles']
+--
+sname:VkSampler objects represent the state of an image sampler which is
+used by the implementation to read image data and apply filtering and other
+transformations for the shader.
+
+Samplers are represented by sname:VkSampler handles:
+
+include::{generated}/api/handles/VkSampler.adoc[]
+--
+
+[open,refpage='vkCreateSampler',desc='Create a new sampler object',type='protos']
+--
+:refpage: vkCreateSampler
+:objectnameplural: samplers
+:objectnamecamelcase: sampler
+:objectcount: 1
+
+To create a sampler object, call:
+
+include::{generated}/api/protos/vkCreateSampler.adoc[]
+
+  * pname:device is the logical device that creates the sampler.
+  * pname:pCreateInfo is a pointer to a slink:VkSamplerCreateInfo structure
+    specifying the state of the sampler object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pSampler is a pointer to a slink:VkSampler handle in which the
+    resulting sampler object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateSampler-maxSamplerAllocationCount-04110]]
+    There must: be less than
+    slink:VkPhysicalDeviceLimits::pname:maxSamplerAllocationCount
+    slink:VkSampler objects currently created on the device
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCreateSampler.adoc[]
+--
+
+[open,refpage='VkSamplerCreateInfo',desc='Structure specifying parameters of a newly created sampler',type='structs']
+--
+The sname:VkSamplerCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkSamplerCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSamplerCreateFlagBits describing
+    additional parameters of the sampler.
+  * pname:magFilter is a elink:VkFilter value specifying the magnification
+    filter to apply to lookups.
+  * pname:minFilter is a elink:VkFilter value specifying the minification
+    filter to apply to lookups.
+  * pname:mipmapMode is a elink:VkSamplerMipmapMode value specifying the
+    mipmap filter to apply to lookups.
+  * pname:addressModeU is a elink:VkSamplerAddressMode value specifying the
+    addressing mode for U coordinates outside [eq]#[0,1)#.
+  * pname:addressModeV is a elink:VkSamplerAddressMode value specifying the
+    addressing mode for V coordinates outside [eq]#[0,1)#.
+  * pname:addressModeW is a elink:VkSamplerAddressMode value specifying the
+    addressing mode for W coordinates outside [eq]#[0,1)#.
+  * [[samplers-mipLodBias]] pname:mipLodBias is the bias to be added to
+    mipmap LOD calculation and bias provided by image sampling functions in
+    SPIR-V, as described in the <<textures-level-of-detail-operation, LOD
+    Operation>> section.
+  * [[samplers-maxAnisotropy]] pname:anisotropyEnable is ename:VK_TRUE to
+    enable anisotropic filtering, as described in the
+    <<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
+    section, or ename:VK_FALSE otherwise.
+  * pname:maxAnisotropy is the anisotropy value clamp used by the sampler
+    when pname:anisotropyEnable is ename:VK_TRUE.
+    If pname:anisotropyEnable is ename:VK_FALSE, pname:maxAnisotropy is
+    ignored.
+  * pname:compareEnable is ename:VK_TRUE to enable comparison against a
+    reference value during lookups, or ename:VK_FALSE otherwise.
+  ** Note: Some implementations will default to shader state if this member
+     does not match.
+  * pname:compareOp is a elink:VkCompareOp value specifying the comparison
+    operator to apply to fetched data before filtering as described in the
+    <<textures-depth-compare-operation, Depth Compare Operation>> section.
+  * pname:minLod is used to clamp the <<textures-level-of-detail-operation,
+    minimum of the computed LOD value>>.
+  * pname:maxLod is used to clamp the <<textures-level-of-detail-operation,
+    maximum of the computed LOD value>>.
+    To avoid clamping the maximum value, set pname:maxLod to the constant
+    ename:VK_LOD_CLAMP_NONE.
+  * pname:borderColor is a elink:VkBorderColor value specifying the
+    predefined border color to use.
+  * [[samplers-unnormalizedCoordinates]] pname:unnormalizedCoordinates
+    controls whether to use unnormalized or normalized texel coordinates to
+    address texels of the image.
+    When set to ename:VK_TRUE, the range of the image coordinates used to
+    lookup the texel is in the range of zero to the image size in each
+    dimension.
+    When set to ename:VK_FALSE the range of image coordinates is zero to
+    one.
++
+When pname:unnormalizedCoordinates is ename:VK_TRUE, images the sampler is
+used with in the shader have the following requirements:
++
+  ** The pname:viewType must: be either ename:VK_IMAGE_VIEW_TYPE_1D or
+     ename:VK_IMAGE_VIEW_TYPE_2D.
+  ** The image view must: have a single layer and a single mip level.
++
+When pname:unnormalizedCoordinates is ename:VK_TRUE, image built-in
+functions in the shader that use the sampler have the following
+requirements:
++
+  ** The functions must: not use projection.
+  ** The functions must: not use offsets.
+
+[NOTE]
+.Mapping of OpenGL to Vulkan filter modes
+====
+pname:magFilter values of ename:VK_FILTER_NEAREST and ename:VK_FILTER_LINEAR
+directly correspond to code:GL_NEAREST and code:GL_LINEAR magnification
+filters.
+pname:minFilter and pname:mipmapMode combine to correspond to the similarly
+named OpenGL minification filter of code:GL_minFilter_MIPMAP_mipmapMode
+(e.g. pname:minFilter of ename:VK_FILTER_LINEAR and pname:mipmapMode of
+ename:VK_SAMPLER_MIPMAP_MODE_NEAREST correspond to
+code:GL_LINEAR_MIPMAP_NEAREST).
+
+There are no Vulkan filter modes that directly correspond to OpenGL
+minification filters of code:GL_LINEAR or code:GL_NEAREST, but they can: be
+emulated using ename:VK_SAMPLER_MIPMAP_MODE_NEAREST, pname:minLod = 0, and
+pname:maxLod = 0.25, and using pname:minFilter = ename:VK_FILTER_LINEAR or
+pname:minFilter = ename:VK_FILTER_NEAREST, respectively.
+
+Note that using a pname:maxLod of zero would cause
+<<textures-texel-filtering,magnification>> to always be performed, and the
+pname:magFilter to always be used.
+This is valid, just not an exact match for OpenGL behavior.
+Clamping the maximum LOD to 0.25 allows the [eq]#{lambda}# value to be
+non-zero and minification to be performed, while still always rounding down
+to the base level.
+If the pname:minFilter and pname:magFilter are equal, then using a
+pname:maxLod of zero also works.
+====
+
+The maximum number of sampler objects which can: be simultaneously created
+on a device is implementation-dependent and specified by the
+<<limits-maxSamplerAllocationCount, pname:maxSamplerAllocationCount>> member
+of the slink:VkPhysicalDeviceLimits structure.
+
+[NOTE]
+.Note
+====
+For historical reasons, if pname:maxSamplerAllocationCount is exceeded, some
+implementations may return ename:VK_ERROR_TOO_MANY_OBJECTS.
+Exceeding this limit will result in undefined: behavior, and an application
+should not rely on the use of the returned error code in order to identify
+when the limit is reached.
+====
+
+Since slink:VkSampler is a non-dispatchable handle type, implementations
+may: return the same handle for sampler state vectors that are identical.
+In such cases, all such objects would only count once against the
+pname:maxSamplerAllocationCount limit.
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerCreateInfo-mipLodBias-01069]]
+    The absolute value of pname:mipLodBias must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-VkSamplerCreateInfo-samplerMipLodBias-04467]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:samplerMipLodBias
+    is ename:VK_FALSE, pname:mipLodBias must: be zero
+endif::VK_KHR_portability_subset[]
+  * [[VUID-VkSamplerCreateInfo-maxLod-01973]]
+    pname:maxLod must: be greater than or equal to pname:minLod
+  * [[VUID-VkSamplerCreateInfo-anisotropyEnable-01070]]
+    If the <<features-samplerAnisotropy, pname:samplerAnisotropy>> feature
+    is not enabled, pname:anisotropyEnable must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-anisotropyEnable-01071]]
+    If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be
+    between `1.0` and
+    sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkSamplerCreateInfo-minFilter-01645]]
+    If <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled
+    and the <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion do not support
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
+    pname:minFilter and pname:magFilter must: be equal to the sampler
+    {YCbCr} conversion's pname:chromaFilter
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and
+    pname:magFilter must: be equal
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode
+    must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and
+    pname:maxLod must: be zero
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:addressModeU
+    and pname:addressModeV must: each be either
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE,
+    pname:anisotropyEnable must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077]]
+    If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:compareEnable
+    must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-addressModeU-01078]]
+    If any of pname:addressModeU, pname:addressModeV or pname:addressModeW
+    are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor
+    must: be a valid elink:VkBorderColor value
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkSamplerCreateInfo-addressModeU-01646]]
+    If <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled,
+    pname:addressModeU, pname:addressModeV, and pname:addressModeW must: be
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, pname:anisotropyEnable
+    must: be ename:VK_FALSE, and pname:unnormalizedCoordinates must: be
+    ename:VK_FALSE
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+  * [[VUID-VkSamplerCreateInfo-None-01647]]
+    If <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled
+    and the pname:pNext chain includes a
+    slink:VkSamplerReductionModeCreateInfo structure, then the sampler
+    reduction mode must: be set to
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-VkSamplerCreateInfo-pNext-06726]]
+    If <<features-samplerFilterMinmax, pname:samplerFilterMinmax>> is not
+    enabled and the pname:pNext chain includes a
+    slink:VkSamplerReductionModeCreateInfo structure, then the sampler
+    reduction mode must: be set to
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+endif::VK_VERSION_1_2[]
+  * [[VUID-VkSamplerCreateInfo-addressModeU-01079]]
+    If <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>
+    is not enabled, and if the `apiext:VK_KHR_sampler_mirror_clamp_to_edge`
+    extension is not enabled, pname:addressModeU, pname:addressModeV and
+    pname:addressModeW must: not be
+    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
+  * [[VUID-VkSamplerCreateInfo-compareEnable-01080]]
+    If pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a
+    valid elink:VkCompareOp value
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * [[VUID-VkSamplerCreateInfo-magFilter-01081]]
+    If either pname:magFilter or pname:minFilter is
+    ename:VK_FILTER_CUBIC_EXT, pname:anisotropyEnable must: be
+    ename:VK_FALSE
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+ifdef::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
+  * [[VUID-VkSamplerCreateInfo-magFilter-07911]]
+    If
+ifdef::VK_EXT_filter_cubic[]
+    the apiext:VK_EXT_filter_cubic extension is not enabled and
+endif::VK_EXT_filter_cubic[]
+    either pname:magFilter or pname:minFilter is ename:VK_FILTER_CUBIC_EXT,
+    the pname:reductionMode member of slink:VkSamplerReductionModeCreateInfo
+    must: be ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+endif::VK_IMG_filter_cubic+VK_EXT_sampler_filter_minmax[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+  * [[VUID-VkSamplerCreateInfo-compareEnable-01423]]
+    If pname:compareEnable is ename:VK_TRUE, the pname:reductionMode member
+    of slink:VkSamplerReductionModeCreateInfo must: be
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkSamplerCreateInfo-flags-02574]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:minFilter and pname:magFilter must: be equal
+  * [[VUID-VkSamplerCreateInfo-flags-02575]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:mipmapMode must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
+  * [[VUID-VkSamplerCreateInfo-flags-02576]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:minLod and pname:maxLod must: be zero
+  * [[VUID-VkSamplerCreateInfo-flags-02577]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:addressModeU and pname:addressModeV must: each be either
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
+  * [[VUID-VkSamplerCreateInfo-flags-02578]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:anisotropyEnable must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-flags-02579]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:compareEnable must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-flags-02580]]
+    If pname:flags includes ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then
+    pname:unnormalizedCoordinates must: be ename:VK_FALSE
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_non_seamless_cube_map[]
+  * [[VUID-VkSamplerCreateInfo-nonSeamlessCubeMap-06788]]
+    If the <<features-nonSeamlessCubeMap, pname:nonSeamlessCubeMap>> feature
+    is not enabled, pname:flags must: not include
+    ename:VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT
+endif::VK_EXT_non_seamless_cube_map[]
+ifdef::VK_EXT_custom_border_color[]
+  * [[VUID-VkSamplerCreateInfo-borderColor-04011]]
+    If pname:borderColor is one of ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, then a
+    slink:VkSamplerCustomBorderColorCreateInfoEXT must: be included in the
+    pname:pNext chain
+  * [[VUID-VkSamplerCreateInfo-customBorderColors-04085]]
+    If the <<features-customBorderColors, pname:customBorderColors>> feature
+    is not enabled, pname:borderColor must: not be
+    ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT
+  * [[VUID-VkSamplerCreateInfo-borderColor-04442]]
+    If pname:borderColor is one of ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, and
+    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format is not
+    ename:VK_FORMAT_UNDEFINED,
+    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor
+    must: be within the range of values representable in pname:format
+  * [[VUID-VkSamplerCreateInfo-None-04012]]
+    The maximum number of samplers with custom border colors which can: be
+    simultaneously created on a device is implementation-dependent and
+    specified by the <<limits-maxCustomBorderColorSamplers,
+    pname:maxCustomBorderColorSamplers>> member of the
+    slink:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure
+endif::VK_EXT_custom_border_color[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * [[VUID-VkSamplerCreateInfo-flags-08110]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the
+    <<features-descriptorBufferCaptureReplay,
+    pname:descriptorBufferCaptureReplay>> feature must: be enabled
+  * [[VUID-VkSamplerCreateInfo-pNext-08111]]
+    If the pname:pNext chain includes a
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, pname:flags
+    must: contain
+    ename:VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_QCOM_image_processing[]
+  * [[VUID-VkSamplerCreateInfo-flags-06964]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then pname:minFilter
+    and pname:magFilter must: be ename:VK_FILTER_NEAREST
+  * [[VUID-VkSamplerCreateInfo-flags-06965]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then pname:mipmapMode
+    must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
+  * [[VUID-VkSamplerCreateInfo-flags-06966]]
+    [If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then pname:minLod and
+    pname:maxLod must: be zero
+  * [[VUID-VkSamplerCreateInfo-flags-06967]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then
+    pname:addressModeU and pname:addressModeV must: each be either
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
+  * [[VUID-VkSamplerCreateInfo-flags-06968]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, and if
+    pname:addressModeU or pname:addressModeV is
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, then pname:borderColor
+    must: be ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK
+  * [[VUID-VkSamplerCreateInfo-flags-06969]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then
+    pname:anisotropyEnable must: be ename:VK_FALSE
+  * [[VUID-VkSamplerCreateInfo-flags-06970]]
+    If pname:flags includes
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then
+    pname:compareEnable must: be ename:VK_FALSE
+endif::VK_QCOM_image_processing[]
+****
+
+include::{generated}/validity/structs/VkSamplerCreateInfo.adoc[]
+--
+
+[open,refpage='VK_LOD_CLAMP_NONE',desc='Maximum LOD unclamped access sentinel',type='consts']
+--
+ename:VK_LOD_CLAMP_NONE is a special constant value used for
+slink:VkSamplerCreateInfo::pname:maxLod to indicate that maximum LOD
+clamping should not be performed.
+
+include::{generated}/api/enums/VK_LOD_CLAMP_NONE.adoc[]
+--
+
+[open,refpage='VkSamplerCreateFlagBits',desc='Bitmask specifying additional parameters of sampler',type='enums']
+--
+Bits which can: be set in slink:VkSamplerCreateInfo::pname:flags, specifying
+additional parameters of a sampler, are:
+
+include::{generated}/api/enums/VkSamplerCreateFlagBits.adoc[]
+
+ifdef::VK_EXT_fragment_density_map[]
+  * [[samplers-subsamplesampler]] ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT
+    specifies that the sampler will read from an image created with
+    pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
+  * ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT
+    specifies that the implementation may: use approximations when
+    reconstructing a full color value for texture access from a subsampled
+    image.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_non_seamless_cube_map[]
+  * ename:VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT specifies that
+    <<textures-cubemapedge, cube map edge handling>> is not performed.
+endif::VK_EXT_non_seamless_cube_map[]
+ifdef::VK_QCOM_image_processing[]
+  * [[samplers-imageprocessingsampler]]
+    ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM specifies that the
+    sampler will read from images using only code:OpImageWeightedSampleQCOM,
+    code:OpImageBoxFilterQCOM,
+ifdef::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchGatherSSDQCOM,
+    code:OpImageBlockMatchGatherSADQCOM,
+    code:OpImageBlockMatchWindowSSDQCOM,
+    code:OpImageBlockMatchWindowSADQCOM,
+endif::VK_QCOM_image_processing2[]
+    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM.
+endif::VK_QCOM_image_processing[]
+
+ifdef::VK_EXT_fragment_density_map[]
+[NOTE]
+.Note
+====
+The approximations used when
+ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT is
+specified are implementation defined.
+Some implementations may: interpolate between fragment density levels in a
+subsampled image.
+In that case, this bit may: be used to decide whether the interpolation
+factors are calculated per fragment or at a coarser granularity.
+====
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT
+    specifies that the sampler can: be used with descriptor buffers when
+    capturing and replaying (e.g. for trace capture and replay), see
+    slink:VkOpaqueCaptureDescriptorDataCreateInfoEXT for more detail.
+endif::VK_EXT_descriptor_buffer[]
+--
+
+[open,refpage='VkSamplerCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkSamplerCreateFlags.adoc[]
+
+tname:VkSamplerCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkSamplerCreateFlagBits.
+--
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+[open,refpage='VkSamplerReductionModeCreateInfo',desc='Structure specifying sampler reduction mode',type='structs',alias='VkSamplerReductionModeCreateInfoEXT']
+--
+The sname:VkSamplerReductionModeCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkSamplerReductionModeCreateInfo.adoc[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerReductionModeCreateInfoEXT.adoc[]
+endif::VK_EXT_sampler_filter_minmax[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:reductionMode is a elink:VkSamplerReductionMode value controlling
+    how texture filtering combines texel values.
+
+If the pname:pNext chain of slink:VkSamplerCreateInfo includes a
+sname:VkSamplerReductionModeCreateInfo structure, then that structure
+includes a mode controlling how texture filtering combines texel values.
+
+If this structure is not present, pname:reductionMode is considered to be
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE.
+
+include::{generated}/validity/structs/VkSamplerReductionModeCreateInfo.adoc[]
+--
+
+[open,refpage='VkSamplerReductionMode',desc='Specify reduction mode for texture filtering',type='enums',alias='VkSamplerReductionModeEXT']
+--
+Reduction modes are specified by elink:VkSamplerReductionMode, which takes
+values:
+
+include::{generated}/api/enums/VkSamplerReductionMode.adoc[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerReductionModeEXT.adoc[]
+endif::VK_EXT_sampler_filter_minmax[]
+
+  * ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE specifies that texel
+    values are combined by computing a weighted average of values in the
+    footprint, using weights as specified in
+    <<textures-unnormalized-to-integer,the image operations chapter>>.
+  * ename:VK_SAMPLER_REDUCTION_MODE_MIN specifies that texel values are
+    combined by taking the component-wise minimum of values in the footprint
+    with non-zero weights.
+  * ename:VK_SAMPLER_REDUCTION_MODE_MAX specifies that texel values are
+    combined by taking the component-wise maximum of values in the footprint
+    with non-zero weights.
+ifdef::VK_QCOM_filter_cubic_clamp[]
+  * ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
+    specifies values are combined as described by
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, followed by a
+    <<textures-texel-range-clamp,texel range clamp>>.
+endif::VK_QCOM_filter_cubic_clamp[]
+--
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+ifdef::VK_QCOM_filter_cubic_weights[]
+[open,refpage='VkSamplerCubicWeightsCreateInfoQCOM',desc='Structure specifying sampler cubic weights',type='structs']
+--
+The sname:VkSamplerCubicWeightsCreateInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkSamplerCubicWeightsCreateInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:cubicWeights is a elink:VkCubicFilterWeightsQCOM value controlling
+    which cubic weights are used.
+
+If the pname:pNext chain of slink:VkSamplerCreateInfo includes a
+sname:VkSamplerCubicWeightsCreateInfoQCOM structure, then that structure
+specifies which cubic weights are used.
+
+If that structure is not present, pname:cubicWeights is considered to be
+ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM.
+
+include::{generated}/validity/structs/VkSamplerCubicWeightsCreateInfoQCOM.adoc[]
+--
+
+[open,refpage='VkCubicFilterWeightsQCOM',desc='Specify cubic weights for texture filtering',type='enums']
+--
+Possible values of the
+slink:VkSamplerCubicWeightsCreateInfoQCOM::pname:cubicWeights, specifying
+cubic weights used in <<textures-texel-cubic-filtering, Texel Cubic
+Filtering>> are:
+
+include::{generated}/api/enums/VkCubicFilterWeightsQCOM.adoc[]
+
+  * ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM specifies Catmull-Rom
+    weights.
+  * ename:VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM specifies Zero
+    Tangent Cardinal weights.
+  * ename:VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM specifies B-Spline weights.
+  * ename:VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM specifies
+    Mitchell-Netravali weights.
+--
+endif::VK_QCOM_filter_cubic_weights[]
+
+[open,refpage='VkFilter',desc='Specify filters used for texture lookups',type='enums']
+--
+Possible values of the slink:VkSamplerCreateInfo::pname:magFilter and
+pname:minFilter parameters, specifying filters used for texture lookups,
+are:
+
+include::{generated}/api/enums/VkFilter.adoc[]
+
+  * ename:VK_FILTER_NEAREST specifies nearest filtering.
+  * ename:VK_FILTER_LINEAR specifies linear filtering.
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * ename:VK_FILTER_CUBIC_EXT specifies cubic filtering.
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+
+These filters are described in detail in <<textures-texel-filtering, Texel
+Filtering>>.
+--
+
+[open,refpage='VkSamplerMipmapMode',desc='Specify mipmap mode used for texture lookups',type='enums']
+--
+Possible values of the slink:VkSamplerCreateInfo::pname:mipmapMode,
+specifying the mipmap mode used for texture lookups, are:
+
+include::{generated}/api/enums/VkSamplerMipmapMode.adoc[]
+
+  * ename:VK_SAMPLER_MIPMAP_MODE_NEAREST specifies nearest filtering.
+  * ename:VK_SAMPLER_MIPMAP_MODE_LINEAR specifies linear filtering.
+
+These modes are described in detail in <<textures-texel-filtering, Texel
+Filtering>>.
+--
+
+[open,refpage='VkSamplerAddressMode',desc='Specify behavior of sampling with texture coordinates outside an image',type='enums']
+--
+Possible values of the slink:VkSamplerCreateInfo::ptext:addressMode*
+parameters, specifying the behavior of sampling with coordinates outside the
+range [eq]#[0,1]# for the respective [eq]#u#, [eq]#v#, or [eq]#w# coordinate
+as defined in the <<textures-wrapping-operation, Wrapping Operation>>
+section, are:
+
+include::{generated}/api/enums/VkSamplerAddressMode.adoc[]
+
+  * ename:VK_SAMPLER_ADDRESS_MODE_REPEAT specifies that the repeat wrap mode
+    will be used.
+  * ename:VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT specifies that the
+    mirrored repeat wrap mode will be used.
+  * ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE specifies that the clamp to
+    edge wrap mode will be used.
+  * ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER specifies that the clamp
+    to border wrap mode will be used.
+ifdef::VK_VERSION_1_2,VK_KHR_sampler_mirror_clamp_to_edge[]
+  * ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE specifies that the
+    mirror clamp to edge wrap mode will be used.
+    This is only valid if
+ifdef::VK_VERSION_1_2[<<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>> is enabled, or if]
+    the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is enabled.
+endif::VK_VERSION_1_2,VK_KHR_sampler_mirror_clamp_to_edge[]
+--
+
+[open,refpage='VkCompareOp',desc='Comparison operator for depth, stencil, and sampler operations',type='enums']
+--
+_Comparison operators_ compare a _reference_ and a _test_ value, and return
+a true ("`passed`") or false ("`failed`") value depending on the comparison
+operator chosen.
+The supported operators are:
+
+include::{generated}/api/enums/VkCompareOp.adoc[]
+
+  * ename:VK_COMPARE_OP_NEVER specifies that the comparison always evaluates
+    false.
+  * ename:VK_COMPARE_OP_LESS specifies that the comparison evaluates
+    [eq]#_reference_ < _test_#.
+  * ename:VK_COMPARE_OP_EQUAL specifies that the comparison evaluates
+    [eq]#_reference_ = _test_#.
+  * ename:VK_COMPARE_OP_LESS_OR_EQUAL specifies that the comparison
+    evaluates [eq]#_reference_ {leq} _test_#.
+  * ename:VK_COMPARE_OP_GREATER specifies that the comparison evaluates
+    [eq]#_reference_ > _test_#.
+  * ename:VK_COMPARE_OP_NOT_EQUAL specifies that the comparison evaluates
+    [eq]#_reference_ {neq} _test_#.
+  * ename:VK_COMPARE_OP_GREATER_OR_EQUAL specifies that the comparison
+    evaluates [eq]#_reference_ {geq} _test_#.
+  * ename:VK_COMPARE_OP_ALWAYS specifies that the comparison always
+    evaluates true.
+
+Comparison operators are used for:
+
+  * The <<textures-depth-compare-operation, Depth Compare Operation>>
+    operator for a sampler, specified by
+    slink:VkSamplerCreateInfo::pname:compareOp.
+  * The stencil comparison operator for the <<fragops-stencil, stencil
+    test>>, specified by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilOp::pname:compareOp or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+    slink:VkStencilOpState::pname:compareOp.
+  * The <<fragops-depth-comparison, Depth Comparison>> operator for the
+    <<fragops-depth,depth test>>, specified by
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetDepthCompareOp::pname:depthCompareOp or
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+    slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp.
+
+Each such use describes how the _reference_ and _test_ values for that
+comparison are determined.
+--
+
+[open,refpage='VkBorderColor',desc='Specify border color used for texture lookups',type='enums']
+--
+Possible values of slink:VkSamplerCreateInfo::pname:borderColor, specifying
+the border color used for texture lookups, are:
+
+include::{generated}/api/enums/VkBorderColor.adoc[]
+
+  * ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK specifies a transparent,
+    floating-point format, black color.
+  * ename:VK_BORDER_COLOR_INT_TRANSPARENT_BLACK specifies a transparent,
+    integer format, black color.
+  * ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK specifies an opaque,
+    floating-point format, black color.
+  * ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK specifies an opaque, integer
+    format, black color.
+  * ename:VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE specifies an opaque,
+    floating-point format, white color.
+  * ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE specifies an opaque, integer
+    format, white color.
+ifdef::VK_EXT_custom_border_color[]
+  * ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT indicates that a
+    slink:VkSamplerCustomBorderColorCreateInfoEXT structure is included in
+    the slink:VkSamplerCreateInfo::pname:pNext chain containing the color
+    data in floating-point format.
+  * ename:VK_BORDER_COLOR_INT_CUSTOM_EXT indicates that a
+    slink:VkSamplerCustomBorderColorCreateInfoEXT structure is included in
+    the slink:VkSamplerCreateInfo::pname:pNext chain containing the color
+    data in integer format.
+endif::VK_EXT_custom_border_color[]
+
+These colors are described in detail in <<textures-texel-replacement, Texel
+Replacement>>.
+--
+
+[open,refpage='vkDestroySampler',desc='Destroy a sampler object',type='protos']
+--
+To destroy a sampler, call:
+
+include::{generated}/api/protos/vkDestroySampler.adoc[]
+
+  * pname:device is the logical device that destroys the sampler.
+  * pname:sampler is the sampler to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroySampler-sampler-01082]]
+    All submitted commands that refer to pname:sampler must: have completed
+    execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroySampler-sampler-01083]]
+    If sname:VkAllocationCallbacks were provided when pname:sampler was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroySampler-sampler-01084]]
+    If no sname:VkAllocationCallbacks were provided when pname:sampler was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroySampler.adoc[]
+--
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[samplers-YCbCr-conversion]]
+== Sampler {YCbCr} Conversion
+
+[open,refpage='VkSamplerYcbcrConversionInfo',desc='Structure specifying {YCbCr} conversion to a sampler or image view',type='structs']
+--
+To create a sampler with {YCbCr} conversion enabled, add a
+slink:VkSamplerYcbcrConversionInfo structure to the pname:pNext chain of the
+slink:VkSamplerCreateInfo structure.
+To create a sampler {YCbCr} conversion, the
+<<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>> feature
+must: be enabled.
+Conversion must: be fixed at pipeline creation time, through use of a
+combined image sampler with an immutable sampler in
+sname:VkDescriptorSetLayoutBinding.
+
+A slink:VkSamplerYcbcrConversionInfo must: be provided for samplers to be
+used with image views that access ename:VK_IMAGE_ASPECT_COLOR_BIT if the
+format is one of the <<formats-requiring-sampler-ycbcr-conversion, formats
+that require a sampler {YCbCr} conversion>>
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+, or if the image view has an
+<<memory-external-android-hardware-buffer-external-formats,external format>>
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+.
+
+The sname:VkSamplerYcbcrConversionInfo structure is defined as:
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionInfo.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionInfoKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:conversion is a slink:VkSamplerYcbcrConversion handle created with
+    flink:vkCreateSamplerYcbcrConversion.
+
+include::{generated}/validity/structs/VkSamplerYcbcrConversionInfo.adoc[]
+--
+
+[open,refpage='VkSamplerYcbcrConversion',desc='Opaque handle to a device-specific sampler {YCbCr} conversion description',type='handles']
+--
+A sampler {YCbCr} conversion is an opaque representation of a
+device-specific sampler {YCbCr} conversion description, represented as a
+sname:VkSamplerYcbcrConversion handle:
+
+include::{generated}/api/handles/VkSamplerYcbcrConversion.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/handles/VkSamplerYcbcrConversionKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+--
+
+[open,refpage='vkCreateSamplerYcbcrConversion',desc='Create a new {YCbCr} conversion',type='protos']
+--
+:refpage: vkCreateSamplerYcbcrConversion
+:objectnameplural: sampler conversions
+:objectnamecamelcase: samplerYcbcrConversion
+:objectcount: 1
+
+To create a slink:VkSamplerYcbcrConversion, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkCreateSamplerYcbcrConversion.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_sampler_ycbcr_conversion[or the equivalent command]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+include::{generated}/api/protos/vkCreateSamplerYcbcrConversionKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:device is the logical device that creates the sampler {YCbCr}
+    conversion.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkSamplerYcbcrConversionCreateInfo structure specifying the
+    requested sampler {YCbCr} conversion.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pYcbcrConversion is a pointer to a slink:VkSamplerYcbcrConversion
+    handle in which the resulting sampler {YCbCr} conversion is returned.
+
+The interpretation of the configured sampler {YCbCr} conversion is described
+in more detail in <<textures-sampler-YCbCr-conversion,the description of
+sampler {YCbCr} conversion>> in the <<textures,Image Operations>> chapter.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateSamplerYcbcrConversion-None-01648]]
+    The <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>
+    feature must: be enabled
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCreateSamplerYcbcrConversion.adoc[]
+--
+
+[open,refpage='VkSamplerYcbcrConversionCreateInfo',desc='Structure specifying the parameters of the newly created conversion',type='structs']
+--
+The sname:VkSamplerYcbcrConversionCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionCreateInfo.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionCreateInfoKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is the format of the image from which color information
+    will be retrieved.
+  * pname:ycbcrModel describes the color matrix for conversion between color
+    models.
+  * pname:ycbcrRange describes whether the encoded values have headroom and
+    foot room, or whether the encoding uses the full numerical range.
+  * pname:components applies a _swizzle_ based on elink:VkComponentSwizzle
+    enums prior to range expansion and color model conversion.
+  * pname:xChromaOffset describes the
+    <<textures-chroma-reconstruction,sample location>> associated with
+    downsampled chroma components in the x dimension.
+    pname:xChromaOffset has no effect for formats in which chroma components
+    are not downsampled horizontally.
+  * pname:yChromaOffset describes the
+    <<textures-chroma-reconstruction,sample location>> associated with
+    downsampled chroma components in the y dimension.
+    pname:yChromaOffset has no effect for formats in which the chroma
+    components are not downsampled vertically.
+  * pname:chromaFilter is the filter for chroma reconstruction.
+  * pname:forceExplicitReconstruction can: be used to ensure that
+    reconstruction is done explicitly, if supported.
+
+[NOTE]
+.Note
+====
+Setting pname:forceExplicitReconstruction to ename:VK_TRUE may: have a
+performance penalty on implementations where explicit reconstruction is not
+the default mode of operation.
+
+If pname:format supports
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+the pname:forceExplicitReconstruction value behaves as if it was set to
+ename:VK_TRUE.
+====
+
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+If the pname:pNext chain includes a slink:VkExternalFormatANDROID structure
+with non-zero pname:externalFormat member, the sampler {YCbCr} conversion
+object represents an _external format conversion_, and pname:format must: be
+ename:VK_FORMAT_UNDEFINED.
+Such conversions must: only be used to sample image views with a matching
+<<memory-external-android-hardware-buffer-external-formats,external
+format>>.
+When creating an external format conversion, the value of pname:components
+is ignored.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+Sampler {YCbCr} conversion objects do not support _external format
+conversion_ without additional extensions defining _external formats_.
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+.Valid Usage
+****
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-01904]]
+    If an external format conversion is being created, pname:format must: be
+    ename:VK_FORMAT_UNDEFINED
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-04061]]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+    If an external format conversion is not being created,
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+    pname:format must: represent unsigned normalized values (i.e. the format
+    must: be a etext:UNORM format)
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-01650]]
+    The <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion must: support
+    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or
+    ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651]]
+    If the <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion do not support
+    ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, pname:xChromaOffset
+    and pname:yChromaOffset must: not be
+    ename:VK_CHROMA_LOCATION_COSITED_EVEN if the corresponding components
+    are <<textures-chroma-reconstruction, downsampled>>
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652]]
+    If the <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion do not support
+    ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, pname:xChromaOffset
+    and pname:yChromaOffset must: not be ename:VK_CHROMA_LOCATION_MIDPOINT
+    if the corresponding components are <<textures-chroma-reconstruction,
+    downsampled>>
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02581]]
+    If the format has a etext:_422 or etext:_420 suffix, then
+    pname:components.g must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>>
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02582]]
+    If the format has a etext:_422 or etext:_420 suffix, then
+    pname:components.a must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>>,
+    ename:VK_COMPONENT_SWIZZLE_ONE, or ename:VK_COMPONENT_SWIZZLE_ZERO
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02583]]
+    If the format has a etext:_422 or etext:_420 suffix, then
+    pname:components.r must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>> or
+    ename:VK_COMPONENT_SWIZZLE_B
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02584]]
+    If the format has a etext:_422 or etext:_420 suffix, then
+    pname:components.b must: be the
+    <<resources-image-views-identity-mappings,identity swizzle>> or
+    ename:VK_COMPONENT_SWIZZLE_R
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-components-02585]]
+    If the format has a etext:_422 or etext:_420 suffix, and if either
+    pname:components.r or pname:components.b is the
+    <<resources-image-views-identity-mappings,identity swizzle>>, both
+    values must: be the identity swizzle
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655]]
+    If pname:ycbcrModel is not
+    ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, then
+    pname:components.r, pname:components.g, and pname:components.b must:
+    correspond to components of the pname:format; that is,
+    pname:components.r, pname:components.g, and pname:components.b must: not
+    be ename:VK_COMPONENT_SWIZZLE_ZERO or ename:VK_COMPONENT_SWIZZLE_ONE,
+    and must: not correspond to a component containing zero or one as a
+    consequence of <<textures-conversion-to-rgba,conversion to RGBA>>
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-02748]]
+    If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW then the
+    R, G and B components obtained by applying the pname:component swizzle
+    to pname:format must: each have a bit-depth greater than or equal to 8
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656]]
+    If the <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion do not support
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+    pname:forceExplicitReconstruction must: be ename:VK_FALSE
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657]]
+    If the <<potential-format-features, potential format features>> of the
+    sampler {YCbCr} conversion do not support
+    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
+    pname:chromaFilter must: not be ename:VK_FILTER_LINEAR
+ifdef::VK_QCOM_ycbcr_degamma[]
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09207]]
+    If the pname:pNext chain includes a
+    slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure, and
+    if the <<features-ycbcr-degamma,pname:ycbcrDegamma>> feature is not
+    enabled, then
+    slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::pname:enableYDegamma
+    must: be ename:VK_FALSE
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09208]]
+    If the pname:pNext chain includes a
+    slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure, and
+    if the <<features-ycbcr-degamma,pname:ycbcrDegamma>> feature is not
+    enabled, then
+    slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::pname:enableCbCrDegamma
+    must: be ename:VK_FALSE
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09209]]
+    If the pname:pNext chain includes a
+    slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure,
+    pname:format must: be a format with 8-bit R, G, and B components.
+endif::VK_QCOM_ycbcr_degamma[]
+****
+
+include::{generated}/validity/structs/VkSamplerYcbcrConversionCreateInfo.adoc[]
+
+If pname:chromaFilter is ename:VK_FILTER_NEAREST, chroma samples are
+reconstructed to luma component resolution using nearest-neighbour sampling.
+Otherwise, chroma samples are reconstructed using interpolation.
+More details can be found in <<textures-sampler-YCbCr-conversion,the
+description of sampler {YCbCr} conversion>> in the <<textures,Image
+Operations>> chapter.
+--
+
+[open,refpage='VkSamplerYcbcrModelConversion',desc='Color model component of a color space',type='enums']
+--
+elink:VkSamplerYcbcrModelConversion defines the conversion from the source
+color model to the shader color model.
+Possible values are:
+
+include::{generated}/api/enums/VkSamplerYcbcrModelConversion.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerYcbcrModelConversionKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY specifies that the
+    input values to the conversion are unmodified.
+  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY specifies no
+    model conversion but the inputs are range expanded as for {YCbCr}.
+  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 specifies the color
+    model conversion from {YCbCr} to {RGBprime} defined in BT.709 and
+    described in the "`BT.709 {YCbCr} conversion`" section of the
+    <<data-format,Khronos Data Format Specification>>.
+  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 specifies the color
+    model conversion from {YCbCr} to {RGBprime} defined in BT.601 and
+    described in the "`BT.601 {YCbCr} conversion`" section of the
+    <<data-format,Khronos Data Format Specification>>.
+  * ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 specifies the color
+    model conversion from {YCbCr} to {RGBprime} defined in BT.2020 and
+    described in the "`BT.2020 {YCbCr} conversion`" section of the
+    <<data-format,Khronos Data Format Specification>>.
+
+In the etext:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_* color models, for the
+input to the sampler {YCbCr} range expansion and model conversion:
+
+  * the Y (Y{prime} luma) component corresponds to the G component of an RGB
+    image.
+  * the CB (C~B~ or "`U`" blue color difference) component corresponds to
+    the B component of an RGB image.
+  * the CR (C~R~ or "`V`" red color difference) component corresponds to the
+    R component of an RGB image.
+  * the alpha component, if present, is not modified by color model
+    conversion.
+
+These rules reflect the mapping of components after the component swizzle
+operation (controlled by
+slink:VkSamplerYcbcrConversionCreateInfo::pname:components).
+
+[NOTE]
+.Note
+====
+For example, an "`YUVA`" 32-bit format comprising four 8-bit components can
+be implemented as ename:VK_FORMAT_R8G8B8A8_UNORM with a component mapping:
+
+  * pname:components.a = ename:VK_COMPONENT_SWIZZLE_IDENTITY
+  * pname:components.r = ename:VK_COMPONENT_SWIZZLE_B
+  * pname:components.g = ename:VK_COMPONENT_SWIZZLE_R
+  * pname:components.b = ename:VK_COMPONENT_SWIZZLE_G
+====
+--
+
+[open,refpage='VkSamplerYcbcrRange',desc='Range of encoded values in a color space',type='enums']
+--
+The elink:VkSamplerYcbcrRange enum describes whether color components are
+encoded using the full range of numerical values or whether values are
+reserved for headroom and foot room.
+elink:VkSamplerYcbcrRange is defined as:
+
+include::{generated}/api/enums/VkSamplerYcbcrRange.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerYcbcrRangeKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * ename:VK_SAMPLER_YCBCR_RANGE_ITU_FULL specifies that the full range of
+    the encoded values are valid and interpreted according to the ITU "`full
+    range`" quantization rules.
+  * ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW specifies that headroom and foot
+    room are reserved in the numerical range of encoded values, and the
+    remaining values are expanded according to the ITU "`narrow range`"
+    quantization rules.
+
+The formulae for these conversions is described in the
+<<textures-sampler-YCbCr-conversion-rangeexpand,Sampler {YCbCr} Range
+Expansion>> section of the <<textures,Image Operations>> chapter.
+
+No range modification takes place if pname:ycbcrModel is
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY; the pname:ycbcrRange
+field of slink:VkSamplerYcbcrConversionCreateInfo is ignored in this case.
+--
+
+[open,refpage='VkChromaLocation',desc='Position of downsampled chroma samples',type='enums']
+--
+The elink:VkChromaLocation enum defines the location of downsampled chroma
+component samples relative to the luma samples, and is defined as:
+
+include::{generated}/api/enums/VkChromaLocation.adoc[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkChromaLocationKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * ename:VK_CHROMA_LOCATION_COSITED_EVEN specifies that downsampled chroma
+    samples are aligned with luma samples with even coordinates.
+  * ename:VK_CHROMA_LOCATION_MIDPOINT specifies that downsampled chroma
+    samples are located half way between each even luma sample and the
+    nearest higher odd luma sample.
+--
+
+ifdef::VK_QCOM_ycbcr_degamma[]
+[open,refpage='VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM',desc='Structure specifying {YCbCr} degamma parameters',type='structs']
+--
+Applications can: enable sRGB to linear conversion for the R, G, and B
+components of a {YCbCr} image during <<textures-ycbcr-degamma, format
+conversion>> by including
+sname:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure in the
+pname:pNext chain of slink:VkSamplerYcbcrConversionCreateInfo.
+
+The sname:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure is
+defined as:
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:enableYDegamma indicates <<textures-ycbcr-degamma,sRGB to linear>>
+    conversion is enabled for the G component.
+  * pname:enableCbCrDegamma indicates <<textures-ycbcr-degamma,sRGB to
+    linear>> conversion is enabled for the R and B components.
+
+include::{generated}/validity/structs/VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.adoc[]
+--
+endif::VK_QCOM_ycbcr_degamma[]
+
+[open,refpage='vkDestroySamplerYcbcrConversion',desc='Destroy a created {YCbCr} conversion',type='protos']
+--
+To destroy a sampler {YCbCr} conversion, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkDestroySamplerYcbcrConversion.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_sampler_ycbcr_conversion[or the equivalent command]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+include::{generated}/api/protos/vkDestroySamplerYcbcrConversionKHR.adoc[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:device is the logical device that destroys the {YCbCr} conversion.
+  * pname:ycbcrConversion is the conversion to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroySamplerYcbcrConversion.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_EXT_custom_border_color[]
+[open,refpage='VkSamplerCustomBorderColorCreateInfoEXT',desc='Structure specifying custom border color',type='structs']
+--
+In addition to the predefined border color values, applications can: provide
+a custom border color value by including the
+sname:VkSamplerCustomBorderColorCreateInfoEXT structure in the
+slink:VkSamplerCreateInfo::pname:pNext chain.
+
+The sname:VkSamplerCustomBorderColorCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkSamplerCustomBorderColorCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:customBorderColor is a slink:VkClearColorValue representing the
+    desired custom sampler border color.
+  * pname:format is a elink:VkFormat representing the format of the sampled
+    image view(s).
+    This field may be ename:VK_FORMAT_UNDEFINED if the
+    <<features-customBorderColorWithoutFormat,
+    pname:customBorderColorWithoutFormat>> feature is enabled.
+
+[NOTE]
+.Note
+====
+If pname:format is a depth/stencil format, the aspect is determined by the
+value of slink:VkSamplerCreateInfo::pname:borderColor.
+If slink:VkSamplerCreateInfo::pname:borderColor is
+ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, the depth aspect is considered.
+If slink:VkSamplerCreateInfo::pname:borderColor is
+ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, the stencil aspect is considered.
+
+If pname:format is ename:VK_FORMAT_UNDEFINED, the
+slink:VkSamplerCreateInfo::pname:borderColor is
+ename:VK_BORDER_COLOR_INT_CUSTOM_EXT, and the sampler is used with an image
+with a stencil format, then the implementation must: source the custom
+border color from either the first or second components of
+slink:VkSamplerCreateInfo::pname:customBorderColor and should: source it
+from the first component.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-07605]]
+    If pname:format is not ename:VK_FORMAT_UNDEFINED and pname:format is not
+    a depth/stencil format then the
+    slink:VkSamplerCreateInfo::pname:borderColor type must: match the
+    sampled type of the provided pname:format, as shown in the _SPIR-V Type_
+    column of the <<formats-numericformat>> table
+  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014]]
+    If the <<features-customBorderColorWithoutFormat,
+    pname:customBorderColorWithoutFormat>> feature is not enabled then
+    pname:format must: not be ename:VK_FORMAT_UNDEFINED
+  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04015]]
+    If the sampler is used to sample an image view of
+    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16,
+    ename:VK_FORMAT_B5G6R5_UNORM_PACK16,
+ifdef::VK_KHR_maintenance5[]
+    ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR,
+endif::VK_KHR_maintenance5[]
+    or ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 format then pname:format must:
+    not be ename:VK_FORMAT_UNDEFINED
+****
+
+include::{generated}/validity/structs/VkSamplerCustomBorderColorCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_custom_border_color[]
+
+ifdef::VK_EXT_border_color_swizzle[]
+[open,refpage='VkSamplerBorderColorComponentMappingCreateInfoEXT',desc='Structure specifying the component mapping of the border color',type='structs']
+--
+If the sampler is created with ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
+ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK,
+ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, or
+ename:VK_BORDER_COLOR_INT_CUSTOM_EXT pname:borderColor, and that sampler
+will be combined with an image view that does not have an
+<<resources-image-views-identity-mappings,identity swizzle>>, and
+slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
+is not enabled, then it is necessary to specify the component mapping of the
+border color, by including the
+sname:VkSamplerBorderColorComponentMappingCreateInfoEXT structure in the
+slink:VkSamplerCreateInfo::pname:pNext chain, to get defined results.
+
+The sname:VkSamplerBorderColorComponentMappingCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkSamplerBorderColorComponentMappingCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:components is a slink:VkComponentMapping structure specifying a
+    remapping of the border color components.
+  * pname:srgb indicates that the sampler will be combined with an image
+    view that has an image format which is sRGB encoded.
+
+The slink:VkComponentMapping pname:components member describes a remapping
+from components of the border color to components of the vector returned by
+shader image instructions when the border color is used.
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerBorderColorComponentMappingCreateInfoEXT-borderColorSwizzle-06437]]
+    The <<features-borderColorSwizzle, pname:borderColorSwizzle>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/structs/VkSamplerBorderColorComponentMappingCreateInfoEXT.adoc[]
+--
+endif::VK_EXT_border_color_swizzle[]
+
+ifdef::VK_QCOM_image_processing2[]
+[open,refpage='VkSamplerBlockMatchWindowCreateInfoQCOM',desc='Structure specifying the block match window parameters',type='structs']
+--
+
+The sname:VkSamplerBlockMatchWindowCreateInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkSamplerBlockMatchWindowCreateInfoQCOM.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:windowExtent is a slink:VkExtent2D specifying a the width and
+    height of the block match window.
+  * pname:windowCompareMode is a elink:VkBlockMatchWindowCompareModeQCOM
+    specifying the compare mode.
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerBlockMatchWindowCreateInfoQCOM-WindowExtent-09210]]
+    pname:WindowExtent must: not be larger than
+    slink:VkPhysicalDeviceImageProcessing2PropertiesQCOM::pname:maxBlockMatchWindow.
+****
+
+include::{generated}/validity/structs/VkSamplerBlockMatchWindowCreateInfoQCOM.adoc[]
+--
+
+[open,refpage='VkBlockMatchWindowCompareModeQCOM',desc='Block match window compare modes',type='enums']
+--
+The elink:VkBlockMatchWindowCompareModeQCOM enum describes how block match
+values within the window are compared.
+elink:VkBlockMatchWindowCompareModeQCOM is defined as:
+
+include::{generated}/api/enums/VkBlockMatchWindowCompareModeQCOM.adoc[]
+
+  * ename:VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM specifies that
+    windowed block match operations return the minimum error within the
+    window.
+  * ename:VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM specifies that
+    windowed block match operations return the maximum error within the
+    window.
+--
+endif::VK_QCOM_image_processing2[]
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/shaders.adoc b/codegen/vulkan/vulkan-docs-next/chapters/shaders.adoc
new file mode 100644
index 0000000..ef03b53
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/shaders.adoc
@@ -0,0 +1,3613 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[shaders]]
+= Shaders
+
+A shader specifies programmable operations that execute for each vertex,
+control point, tessellated vertex, primitive, fragment, or workgroup in the
+corresponding stage(s) of the graphics and compute pipelines.
+
+Graphics pipelines include vertex shader execution as a result of
+<<drawing,primitive assembly>>, followed, if enabled, by tessellation
+control and evaluation shaders operating on <<drawing-patch-lists,patches>>,
+geometry shaders, if enabled, operating on primitives, and fragment shaders,
+if present, operating on fragments generated by <<primsrast,Rasterization>>.
+In this specification, vertex, tessellation control, tessellation evaluation
+and geometry shaders are collectively referred to as
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>s and occur in the logical pipeline before rasterization.
+The fragment shader occurs logically after rasterization.
+
+Only the compute shader stage is included in a compute pipeline.
+Compute shaders operate on compute invocations in a workgroup.
+
+Shaders can: read from input variables, and read from and write to output
+variables.
+Input and output variables can: be used to transfer data between shader
+stages, or to allow the shader to interact with values that exist in the
+execution environment.
+Similarly, the execution environment provides constants describing
+capabilities.
+
+Shader variables are associated with execution environment-provided inputs
+and outputs using _built-in_ decorations in the shader.
+The available decorations for each stage are documented in the following
+subsections.
+
+
+ifdef::VK_EXT_shader_object[]
+[[shaders-objects]]
+== Shader Objects
+
+Shaders may: be compiled and linked into pipeline objects as described in
+<<pipelines,Pipelines>> chapter, or if the <<features-shaderObject,
+pname:shaderObject>> feature is enabled they may: be compiled into
+individual per-stage _shader objects_ which can: be bound on a command
+buffer independently from one another.
+Unlike pipelines, shader objects are not intrinsically tied to any specific
+set of state.
+Instead, state is specified dynamically in the command buffer.
+
+Each shader object represents a single compiled shader stage, which may:
+optionally: be linked with one or more other stages.
+
+[open,refpage='VkShaderEXT',desc='Opaque handle to a shader object',type='handles']
+--
+Shader objects are represented by sname:VkShaderEXT handles:
+
+include::{generated}/api/handles/VkShaderEXT.adoc[]
+--
+
+[[shaders-objects-creation]]
+=== Shader Object Creation
+
+Shader objects may: be created from shader code provided as SPIR-V, or in an
+opaque, implementation-defined binary format specific to the physical
+device.
+
+[open,refpage='vkCreateShadersEXT',desc='Create one or more new shaders',type='protos']
+--
+To create one or more shader objects, call:
+
+include::{generated}/api/protos/vkCreateShadersEXT.adoc[]
+
+  * pname:device is the logical device that creates the shader objects.
+  * pname:createInfoCount is the length of the pname:pCreateInfos and
+    pname:pShaders arrays.
+  * pname:pCreateInfos is a pointer to an array of
+    slink:VkShaderCreateInfoEXT structures.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pShaders is a pointer to an array of slink:VkShaderEXT handles in
+    which the resulting shader objects are returned.
+
+When this function returns, whether or not it succeeds, it is guaranteed
+that every element of pname:pShaders will have been overwritten by either
+dlink:VK_NULL_HANDLE or a valid sname:VkShaderEXT handle.
+
+This means that whenever shader creation fails, the application can:
+determine which shader the returned error pertains to by locating the first
+dlink:VK_NULL_HANDLE element in pname:pShaders.
+It also means that an application can: reliably clean up from a failed call
+by iterating over the pname:pShaders array and destroying every element that
+is not dlink:VK_NULL_HANDLE.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateShadersEXT-None-08400]]
+    The <<features-shaderObject, pname:shaderObject>> feature must: be
+    enabled
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08401]]
+    If pname:createInfoCount is 1, there must: be no element of
+    pname:pCreateInfos whose pname:flags member includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08402]]
+    If the pname:flags member of any element of pname:pCreateInfos includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the pname:flags member of all
+    other elements of pname:pCreateInfos whose pname:stage is
+    ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, or
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT must: also include
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08403]]
+    If the pname:flags member of any element of pname:pCreateInfos includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the pname:flags member of all
+    other elements of pname:pCreateInfos whose pname:stage is
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
+    must: also include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08404]]
+    If the pname:flags member of any element of pname:pCreateInfos whose
+    pname:stage is ename:VK_SHADER_STAGE_TASK_BIT_EXT or
+    ename:VK_SHADER_STAGE_MESH_BIT_EXT includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, there must: be no member of
+    pname:pCreateInfos whose pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT
+    and whose pname:flags member includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08405]]
+    If there is any element of pname:pCreateInfos whose pname:stage is
+    ename:VK_SHADER_STAGE_MESH_BIT_EXT and whose pname:flags member includes
+    both ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT and
+    ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT, there must: be no element
+    of pname:pCreateInfos whose pname:stage is
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT and whose pname:flags member includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08409]]
+    For each element of pname:pCreateInfos whose pname:flags member includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, if there is any other element
+    of pname:pCreateInfos whose pname:stage is logically later than the
+    pname:stage of the former and whose pname:flags member also includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the pname:nextStage of the
+    former must: be equal to the pname:stage of the element with the
+    logically earliest pname:stage following the pname:stage of the former
+    whose pname:flags member also includes
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08410]]
+    The pname:stage member of each element of pname:pCreateInfos whose
+    pname:flags member includes ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+    must: be unique
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08411]]
+    The pname:codeType member of all elements of pname:pCreateInfos whose
+    pname:flags member includes ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+    must: be the same
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08867]]
+    If pname:pCreateInfos contains elements with both
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
+    pname:flags include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
+    elements' pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage's pname:pCode
+    contains an code:OpExecutionMode instruction specifying the type of
+    subdivision, it must: match the subdivision type specified in the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08868]]
+    If pname:pCreateInfos contains elements with both
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
+    pname:flags include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
+    elements' pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage's pname:pCode
+    contains an code:OpExecutionMode instruction specifying the orientation
+    of triangles, it must: match the triangle orientation specified in the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08869]]
+    If pname:pCreateInfos contains elements with both
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
+    pname:flags include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
+    elements' pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage's pname:pCode
+    contains an code:OpExecutionMode instruction specifying code:PointMode,
+    the ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage must: also
+    contain an code:OpExecutionMode instruction specifying code:PointMode
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08870]]
+    If pname:pCreateInfos contains elements with both
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
+    pname:flags include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
+    elements' pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage's pname:pCode
+    contains an code:OpExecutionMode instruction specifying the spacing of
+    segments on the edges of tessellated primitives, it must: match the
+    segment spacing specified in the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage
+  * [[VUID-vkCreateShadersEXT-pCreateInfos-08871]]
+    If pname:pCreateInfos contains elements with both
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
+    pname:flags include ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
+    elements' pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage's pname:pCode
+    contains an code:OpExecutionMode instruction specifying the output patch
+    size, it must: match the output patch size specified in the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage
+****
+
+include::{generated}/validity/protos/vkCreateShadersEXT.adoc[]
+--
+
+[open,refpage='VkShaderCreateInfoEXT',desc='Structure specifying parameters of a newly created shader',type='structs']
+--
+:refpage: VkShaderCreateInfoEXT
+
+The sname:VkShaderCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkShaderCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkShaderCreateFlagBitsEXT describing
+    additional parameters of the shader.
+  * pname:stage is a elink:VkShaderStageFlagBits value specifying a single
+    shader stage.
+  * pname:nextStage is a bitmask of elink:VkShaderStageFlagBits specifying
+    zero or stages which may: be used as a logically next bound stage when
+    drawing with the shader bound.
+  * pname:codeType is a elink:VkShaderCodeTypeEXT value specifying the type
+    of the shader code pointed to be pname:pCode.
+  * pname:codeSize is the size in bytes of the shader code pointed to be
+    pname:pCode.
+  * pname:pCode is a pointer to the shader code to use to create the shader.
+  * pname:pName is a pointer to a null-terminated UTF-8 string specifying
+    the entry point name of the shader for this stage.
+  * pname:setLayoutCount is the number of descriptor set layouts pointed to
+    by pname:pSetLayouts.
+  * pname:pSetLayouts is a pointer to an array of
+    slink:VkDescriptorSetLayout objects used by the shader stage.
+  * pname:pushConstantRangeCount is the number of push constant ranges
+    pointed to by pname:pPushConstantRanges.
+  * pname:pPushConstantRanges is a pointer to an array of
+    slink:VkPushConstantRange structures used by the shader stage.
+  * pname:pSpecializationInfo is a pointer to a slink:VkSpecializationInfo
+    structure, as described in
+    <<pipelines-specialization-constants,Specialization Constants>>, or
+    `NULL`.
+
+.Valid Usage
+****
+:prefixCondition: If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT,
+include::{chapters}/commonvalidity/shader_create_spv_common.adoc[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08412]]
+    If pname:stage is not ename:VK_SHADER_STAGE_TASK_BIT_EXT,
+    ename:VK_SHADER_STAGE_MESH_BIT_EXT, ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, or
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT, pname:flags must: not include
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08486]]
+    If pname:stage is not ename:VK_SHADER_STAGE_FRAGMENT_BIT, pname:flags
+    must: not include
+    ename:VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT
+  * [[VUID-VkShaderCreateInfoEXT-flags-08487]]
+    If the <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> feature is not enabled,
+    pname:flags must: not include
+    ename:VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08488]]
+    If pname:stage is not ename:VK_SHADER_STAGE_FRAGMENT_BIT, pname:flags
+    must: not include
+    ename:VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+  * [[VUID-VkShaderCreateInfoEXT-flags-08489]]
+    If the <<features-fragmentDensityMap, pname:fragmentDensityMap>> feature
+    is not enabled, pname:flags must: not include
+    ename:VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-09404]]
+    If pname:flags includes
+    ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, the
+    <<features-subgroupSizeControl, pname:subgroupSizeControl>> feature
+    must: be enabled
+  * [[VUID-VkShaderCreateInfoEXT-flags-09405]]
+    If pname:flags includes
+    ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, the
+    <<features-computeFullSubgroups, pname:computeFullSubgroups>> feature
+    must: be enabled
+  * [[VUID-VkShaderCreateInfoEXT-flags-08992]]
+    If pname:flags includes
+    ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, pname:stage must:
+    be
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    one of ename:VK_SHADER_STAGE_MESH_BIT_EXT,
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT, or
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+    ename:VK_SHADER_STAGE_COMPUTE_BIT
+endif::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08485]]
+    If pname:stage is not ename:VK_SHADER_STAGE_COMPUTE_BIT, pname:flags
+    must: not include ename:VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08414]]
+    If pname:stage is not ename:VK_SHADER_STAGE_MESH_BIT_EXT, pname:flags
+    must: not include ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+  * [[VUID-VkShaderCreateInfoEXT-flags-08416]]
+    If pname:flags includes both
+    ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT and
+    ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, the local
+    workgroup size in the X dimension of the shader must: be a multiple of
+    <<limits-maxSubgroupSize,pname:maxSubgroupSize>>
+  * [[VUID-VkShaderCreateInfoEXT-flags-08417]]
+    If pname:flags includes
+    ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT but not
+    ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT and no
+    slink:VkShaderRequiredSubgroupSizeCreateInfoEXT structure is included in
+    the pname:pNext chain, the local workgroup size in the X dimension of
+    the shader must: be a multiple of
+    <<limits-subgroup-size,pname:subgroupSize>>
+endif::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+  * [[VUID-VkShaderCreateInfoEXT-stage-08418]]
+    pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS or
+    ename:VK_SHADER_STAGE_ALL
+  * [[VUID-VkShaderCreateInfoEXT-stage-08419]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:stage must: not be
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  * [[VUID-VkShaderCreateInfoEXT-stage-08420]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-stage-08421]]
+    If the <<features-taskShader, pname:taskShader>> feature is not enabled,
+    pname:stage must: not be ename:VK_SHADER_STAGE_TASK_BIT_EXT
+  * [[VUID-VkShaderCreateInfoEXT-stage-08422]]
+    If the <<features-meshShader, pname:meshShader>> feature is not enabled,
+    pname:stage must: not be ename:VK_SHADER_STAGE_MESH_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkShaderCreateInfoEXT-stage-08425]]
+    pname:stage must: not be
+    ename:VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-stage-08426]]
+    pname:stage must: not be
+    ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI
+endif::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08427]]
+    If pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, pname:nextStage
+    must: not include any bits other than
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, and
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08428]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, pname:nextStage must: not include
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08429]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, pname:nextStage must: not include
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08430]]
+    If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    pname:nextStage must: not include any bits other than
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08431]]
+    If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    pname:nextStage must: not include any bits other than
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT and
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08433]]
+    If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, pname:nextStage
+    must: not include any bits other than ename:VK_SHADER_STAGE_FRAGMENT_BIT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08434]]
+    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT or
+    ename:VK_SHADER_STAGE_COMPUTE_BIT, pname:nextStage must: be 0
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08435]]
+    If pname:stage is ename:VK_SHADER_STAGE_TASK_BIT_EXT, pname:nextStage
+    must: not include any bits other than ename:VK_SHADER_STAGE_MESH_BIT_EXT
+  * [[VUID-VkShaderCreateInfoEXT-nextStage-08436]]
+    If pname:stage is ename:VK_SHADER_STAGE_MESH_BIT_EXT, pname:nextStage
+    must: not include any bits other than ename:VK_SHADER_STAGE_FRAGMENT_BIT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-VkShaderCreateInfoEXT-pName-08440]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, pname:pName
+    must: be the name of an code:OpEntryPoint in pname:pCode with an
+    execution model that matches pname:stage
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08492]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_BINARY_EXT, pname:pCode
+    must: be aligned to `16` bytes
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08493]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, pname:pCode
+    must: be aligned to `4` bytes
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08448]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    identified entry point includes any variable in its interface that is
+    declared with the code:ClipDistance code:BuiltIn decoration, that
+    variable must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxClipDistances
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08449]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    identified entry point includes any variable in its interface that is
+    declared with the code:CullDistance code:BuiltIn decoration, that
+    variable must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxCullDistances
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08450]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    identified entry point includes any variables in its interface that are
+    declared with the code:ClipDistance or code:CullDistance code:BuiltIn
+    decoration, those variables must: not have array sizes which sum to more
+    than sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08451]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and the
+    identified entry point includes any variable in its interface that is
+    declared with the code:SampleMask code:BuiltIn decoration, that variable
+    must: not have an array size greater than
+    sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08452]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, the identified entry
+    point must: not include any input variable in its interface that is
+    decorated with code:CullDistance
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08453]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified
+    entry point has an code:OpExecutionMode instruction specifying a patch
+    size with code:OutputVertices, the patch size must: be greater than `0`
+    and less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08454]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry
+    point must: have an code:OpExecutionMode instruction specifying a
+    maximum output vertex count that is greater than `0` and less than or
+    equal to sname:VkPhysicalDeviceLimits::pname:maxGeometryOutputVertices
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08455]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry
+    point must: have an code:OpExecutionMode instruction specifying an
+    invocation count that is greater than `0` and less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxGeometryShaderInvocations
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08456]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is a
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>, and the identified entry point writes to code:Layer for any
+    primitive, it must: write the same value to code:Layer for all vertices
+    of a given primitive
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08457]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is a
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>, and the identified entry point writes to code:ViewportIndex for
+    any primitive, it must: write the same value to code:ViewportIndex for
+    all vertices of a given primitive
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08458]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, the identified entry
+    point must: not include any output variables in its interface decorated
+    with code:CullDistance
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08459]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
+    entry point writes to code:FragDepth in any execution path, all
+    execution paths that are not exclusive to helper invocations must:
+    either discard the fragment, or write or initialize the value of
+    code:FragDepth
+  * [[VUID-VkShaderCreateInfoEXT-pCode-08460]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, the shader
+    code in pname:pCode must: be valid as described by the
+    <<spirv-spec,Khronos SPIR-V Specification>> after applying the
+    specializations provided in pname:pSpecializationInfo, if any, and then
+    converting all specialization constants into fixed constants
+  * [[VUID-VkShaderCreateInfoEXT-codeType-08872]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    pname:pCode must: contain an code:OpExecutionMode instruction specifying
+    the type of subdivision
+  * [[VUID-VkShaderCreateInfoEXT-codeType-08873]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    pname:pCode must: contain an code:OpExecutionMode instruction specifying
+    the orientation of triangles generated by the tessellator
+  * [[VUID-VkShaderCreateInfoEXT-codeType-08874]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    pname:pCode must: contain an code:OpExecutionMode instruction specifying
+    the spacing of segments on the edges of tessellated primitives
+  * [[VUID-VkShaderCreateInfoEXT-codeType-08875]]
+    If pname:codeType is ename:VK_SHADER_CODE_TYPE_SPIRV_EXT, and
+    pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    pname:pCode must: contain an code:OpExecutionMode instruction specifying
+    the output patch size
+****
+
+include::{generated}/validity/structs/VkShaderCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkShaderCreateFlagsEXT',desc='Bitmask of VkShaderCreateFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkShaderCreateFlagsEXT.adoc[]
+
+tname:VkShaderCreateFlagsEXT is a bitmask type for setting a mask of zero or
+more elink:VkShaderCreateFlagBitsEXT.
+--
+
+[open,refpage='VkShaderCreateFlagBitsEXT',desc='Bitmask controlling how a shader object is created',type='enums']
+--
+Possible values of the pname:flags member of slink:VkShaderCreateInfoEXT
+specifying how a shader object is created, are:
+
+include::{generated}/api/enums/VkShaderCreateFlagBitsEXT.adoc[]
+
+  * ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT specifies that a shader is
+    linked to all other shaders created in the same flink:vkCreateShadersEXT
+    call whose slink:VkShaderCreateInfoEXT structures' pname:flags include
+    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT.
+ifdef::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+  * ename:VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT specifies
+    that the <<interfaces-builtin-variables-sgs, code:SubgroupSize>> may:
+    vary in a
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
+    compute shader.
+  * ename:VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT specifies that the
+    subgroup sizes must: be launched with all invocations active in a
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[task, mesh, or]
+    compute shader.
+endif::VK_VERSION_1_1,VK_EXT_subgroup_size_control[]
+ifdef::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+  * ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT specifies that a mesh
+    shader must: only be used without a task shader.
+    Otherwise, the mesh shader must: only be used with a task shader.
+endif::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * ename:VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT specifies that a compute
+    shader can: be used with flink:vkCmdDispatchBase with a non-zero base
+    workgroup.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT
+    specifies that a fragment shader can: be used with a fragment shading
+    rate attachment.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT specifies
+    that a fragment shader can: be used with a fragment density map
+    attachment.
+endif::VK_EXT_fragment_density_map[]
+--
+
+ifdef::VK_KHR_fragment_shading_rate,VK_EXT_fragment_density_map[]
+[NOTE]
+.Note
+====
+The behavior of
+ifdef::VK_KHR_fragment_shading_rate[]
+ename:VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[and]
+ifdef::VK_EXT_fragment_density_map[]
+ename:VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+differs subtly from the behavior of
+ifdef::VK_KHR_fragment_shading_rate[]
+ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate+VK_EXT_fragment_density_map[and]
+ifdef::VK_EXT_fragment_density_map[]
+ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+in that the shader bit allows, but does not require the shader to be used
+with that type of attachment.
+This means that the application need not create multiple shaders when it
+does not know in advance whether the shader will be used with or without the
+attachment type, or when it needs the same shader to be compatible with
+usage both with and without.
+This may: come at some performance cost on some implementations, so
+applications should: still only set bits that are actually necessary.
+====
+endif::VK_KHR_fragment_shading_rate,VK_EXT_fragment_density_map[]
+
+[open,refpage='VkShaderCodeTypeEXT',desc='Indicate a shader code type',type='enums']
+--
+Shader objects can: be created using different types of shader code.
+Possible values of slink:VkShaderCreateInfoEXT::pname:codeType, are:
+
+include::{generated}/api/enums/VkShaderCodeTypeEXT.adoc[]
+
+  * ename:VK_SHADER_CODE_TYPE_BINARY_EXT specifies shader code in an opaque,
+    implementation-defined binary format specific to the physical device.
+  * ename:VK_SHADER_CODE_TYPE_SPIRV_EXT specifies shader code in SPIR-V
+    format.
+--
+
+[[shaders-objects-binary-code]]
+=== Binary Shader Code
+
+[open,refpage='vkGetShaderBinaryDataEXT',desc='Get the binary shader code from a shader object',type='protos']
+--
+Binary shader code can: be retrieved from a shader object using the command:
+
+include::{generated}/api/protos/vkGetShaderBinaryDataEXT.adoc[]
+
+  * pname:device is the logical device that shader object was created from.
+  * pname:shader is the shader object to retrieve binary shader code from.
+  * pname:pDataSize is a pointer to a code:size_t value related to the size
+    of the binary shader code, as described below.
+  * pname:pData is either `NULL` or a pointer to a buffer.
+
+If pname:pData is `NULL`, then the size of the binary shader code of the
+shader object, in bytes, is returned in pname:pDataSize.
+Otherwise, pname:pDataSize must: point to a variable set by the user to the
+size of the buffer, in bytes, pointed to by pname:pData, and on return the
+variable is overwritten with the amount of data actually written to
+pname:pData.
+If pname:pDataSize is less than the size of the binary shader code, nothing
+is written to pname:pData, and ename:VK_INCOMPLETE will be returned instead
+of ename:VK_SUCCESS.
+
+[NOTE]
+.Note
+====
+The behavior of this command when pname:pDataSize is too small differs from
+how some other getter-type commands work in Vulkan.
+Because shader binary data is only usable in its entirety, it would never be
+useful for the implementation to return partial data.
+Because of this, nothing is written to pname:pData unless pname:pDataSize is
+large enough to fit the data it its entirety.
+====
+
+Binary shader code retrieved using fname:vkGetShaderBinaryDataEXT can: be
+passed to a subsequent call to flink:vkCreateShadersEXT on a compatible
+physical device by specifying ename:VK_SHADER_CODE_TYPE_BINARY_EXT in the
+pname:codeType member of sname:VkShaderCreateInfoEXT.
+
+The shader code returned by repeated calls to this function with the same
+sname:VkShaderEXT is guaranteed to be invariant for the lifetime of the
+sname:VkShaderEXT object.
+
+.Valid Usage
+****
+  * [[VUID-vkGetShaderBinaryDataEXT-None-08461]]
+    The <<features-shaderObject,pname:shaderObject>> feature must: be
+    enabled
+  * [[VUID-vkGetShaderBinaryDataEXT-None-08499]]
+    If pname:pData is not `NULL`, it must: be aligned to `16` bytes
+****
+
+include::{generated}/validity/protos/vkGetShaderBinaryDataEXT.adoc[]
+--
+
+[[shaders-objects-binary-compatibility]]
+=== Binary Shader Compatibility
+
+Binary shader compatibility means that binary shader code returned from a
+call to flink:vkGetShaderBinaryDataEXT can: be passed to a later call to
+flink:vkCreateShadersEXT, potentially on a different logical and/or physical
+device, and that this will result in the successful creation of a shader
+object functionally equivalent to the shader object that the code was
+originally queried from.
+
+Binary shader code queried from flink:vkGetShaderBinaryDataEXT is not
+guaranteed to be compatible across all devices, but implementations are
+required to provide some compatibility guarantees.
+Applications may: determine binary shader compatibility using either (or
+both) of two mechanisms.
+
+Guaranteed compatibility of shader binaries is expressed through a
+combination of the pname:shaderBinaryUUID and pname:shaderBinaryVersion
+members of the slink:VkPhysicalDeviceShaderObjectPropertiesEXT structure
+queried from a physical device.
+Binary shaders retrieved from a physical device with a certain
+pname:shaderBinaryUUID are guaranteed to be compatible with all other
+physical devices reporting the same pname:shaderBinaryUUID and the same or
+higher pname:shaderBinaryVersion.
+
+Whenever a new version of an implementation incorporates any changes that
+affect the output of flink:vkGetShaderBinaryDataEXT, the implementation
+should: either increment pname:shaderBinaryVersion if binary shader code
+retrieved from older versions remains compatible with the new
+implementation, or else replace pname:shaderBinaryUUID with a new value if
+backward compatibility has been broken.
+Binary shader code queried from a device with a matching
+pname:shaderBinaryUUID and lower pname:shaderBinaryVersion relative to the
+device on which flink:vkCreateShadersEXT is being called may: be suboptimal
+for the new device in ways that do not change shader functionality, but it
+is still guaranteed to be usable to successfully create the shader
+object(s).
+
+[NOTE]
+.Note
+====
+Implementations are encouraged to share pname:shaderBinaryUUID between
+devices and driver versions to the maximum extent their hardware naturally
+allows, and are *strongly* discouraged from ever changing the
+pname:shaderBinaryUUID for the same hardware except unless absolutely
+necessary.
+====
+
+In addition to the shader compatibility guarantees described above, it is
+valid for an application to call flink:vkCreateShadersEXT with binary shader
+code created on a device with a different or unknown pname:shaderBinaryUUID
+and/or higher pname:shaderBinaryVersion.
+In this case, the implementation may: use any unspecified means of its
+choosing to determine whether the provided binary shader code is usable.
+If it is, the flink:vkCreateShadersEXT call must: return ename:VK_SUCCESS,
+and the created shader object is guaranteed to be valid.
+Otherwise, in the absence of some other error, the flink:vkCreateShadersEXT
+call must: return ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT to indicate
+that the provided binary shader code is not compatible with the device.
+
+[[shaders-objects-binding]]
+=== Binding Shader Objects
+
+[open,refpage='vkCmdBindShadersEXT',desc='Bind shader objects to a command buffer',type='protos']
+--
+Once shader objects have been created, they can: be bound to the command
+buffer using the command:
+
+include::{generated}/api/protos/vkCmdBindShadersEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer that the shader object will be
+    bound to.
+  * pname:stageCount is the length of the pname:pStages and pname:pShaders
+    arrays.
+  * pname:pStages is a pointer to an array of elink:VkShaderStageFlagBits
+    values specifying one stage per array index that is affected by the
+    corresponding value in the pname:pShaders array.
+  * pname:pShaders is a pointer to an array of sname:VkShaderEXT handles
+    and/or dlink:VK_NULL_HANDLE values describing the shader binding
+    operations to be performed on each stage in pname:pStages.
+
+When binding linked shaders, an application may: bind them in any
+combination of one or more calls to fname:vkCmdBindShadersEXT (i.e., shaders
+that were created linked together do not need to be bound in the same
+fname:vkCmdBindShadersEXT call).
+
+Any shader object bound to a particular stage may: be unbound by setting its
+value in pname:pShaders to dlink:VK_NULL_HANDLE.
+If pname:pShaders is `NULL`, fname:vkCmdBindShadersEXT behaves as if
+pname:pShaders was an array of pname:stageCount dlink:VK_NULL_HANDLE values
+(i.e., any shaders bound to the stages specified in pname:pStages are
+unbound).
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindShadersEXT-None-08462]]
+    The <<features-shaderObject,pname:shaderObject>> feature must: be
+    enabled
+  * [[VUID-vkCmdBindShadersEXT-pStages-08463]]
+    Every element of pname:pStages must: be unique
+  * [[VUID-vkCmdBindShadersEXT-pStages-08464]]
+    pname:pStages must: not contain ename:VK_SHADER_STAGE_ALL_GRAPHICS or
+    ename:VK_SHADER_STAGE_ALL
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * [[VUID-vkCmdBindShadersEXT-pStages-08465]]
+    pname:pStages must: not contain ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR,
+    ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
+    ename:VK_SHADER_STAGE_MISS_BIT_KHR,
+    ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or
+    ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-vkCmdBindShadersEXT-pStages-08467]]
+    pname:pStages must: not contain
+    ename:VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pStages-08468]]
+    pname:pStages must: not contain
+    ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI
+endif::VK_HUAWEI_cluster_culling_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08469]]
+    For each element of pname:pStages, if pname:pShaders is not `NULL`, and
+    the element of the pname:pShaders array with the same index is not
+    dlink:VK_NULL_HANDLE, it must: have been created with a pname:stage
+    equal to the corresponding element of pname:pStages
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08470]]
+    If pname:pStages contains both ename:VK_SHADER_STAGE_TASK_BIT_EXT and
+    ename:VK_SHADER_STAGE_VERTEX_BIT, and pname:pShaders is not `NULL`, and
+    the same index in pname:pShaders as ename:VK_SHADER_STAGE_TASK_BIT_EXT
+    in pname:pStages is not dlink:VK_NULL_HANDLE, the same index in
+    pname:pShaders as ename:VK_SHADER_STAGE_VERTEX_BIT in pname:pStages
+    must: be dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08471]]
+    If pname:pStages contains both ename:VK_SHADER_STAGE_MESH_BIT_EXT and
+    ename:VK_SHADER_STAGE_VERTEX_BIT, and pname:pShaders is not `NULL`, and
+    the same index in pname:pShaders as ename:VK_SHADER_STAGE_MESH_BIT_EXT
+    in pname:pStages is not dlink:VK_NULL_HANDLE, the same index in
+    pname:pShaders as ename:VK_SHADER_STAGE_VERTEX_BIT in pname:pStages
+    must: be dlink:VK_NULL_HANDLE
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08474]]
+    If the <<features-tessellationShader, pname:tessellationShader>> feature
+    is not enabled, and pname:pStages contains
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and pname:pShaders is
+    not `NULL`, the same index or indices in pname:pShaders must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08475]]
+    If the <<features-geometryShader, pname:geometryShader>> feature is not
+    enabled, and pname:pStages contains ename:VK_SHADER_STAGE_GEOMETRY_BIT,
+    and pname:pShaders is not `NULL`, the same index in pname:pShaders must:
+    be dlink:VK_NULL_HANDLE
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08490]]
+    If the <<features-taskShader, pname:taskShader>> feature is not enabled,
+    and pname:pStages contains ename:VK_SHADER_STAGE_TASK_BIT_EXT, and
+    pname:pShaders is not `NULL`, the same index in pname:pShaders must: be
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08491]]
+    If the <<features-meshShader, pname:meshShader>> feature is not enabled,
+    and pname:pStages contains ename:VK_SHADER_STAGE_MESH_BIT_EXT, and
+    pname:pShaders is not `NULL`, the same index in pname:pShaders must: be
+    dlink:VK_NULL_HANDLE
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08476]]
+    If pname:pStages contains ename:VK_SHADER_STAGE_COMPUTE_BIT, the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support compute operations
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08477]]
+    If pname:pStages contains ename:VK_SHADER_STAGE_VERTEX_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT, or
+    ename:VK_SHADER_STAGE_FRAGMENT_BIT, the sname:VkCommandPool that
+    pname:commandBuffer was allocated from must: support graphics operations
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * [[VUID-vkCmdBindShadersEXT-pShaders-08478]]
+    If pname:pStages contains ename:VK_SHADER_STAGE_MESH_BIT_EXT or
+    ename:VK_SHADER_STAGE_TASK_BIT_EXT, the sname:VkCommandPool that
+    pname:commandBuffer was allocated from must: support graphics operations
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+****
+
+include::{generated}/validity/protos/vkCmdBindShadersEXT.adoc[]
+--
+
+[[shaders-objects-state]]
+=== Setting State
+
+Whenever shader objects are used to issue drawing commands, the appropriate
+<<pipelines-dynamic-state, dynamic state>> setting commands must: have been
+called to set the relevant state in the command buffer prior to drawing:
+
+  * flink:vkCmdSetViewportWithCount
+  * flink:vkCmdSetScissorWithCount
+  * flink:vkCmdSetRasterizerDiscardEnable
+
+ifdef::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+If a shader is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage, the
+following commands must: have been called in the command buffer prior to
+drawing:
+endif::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+
+  * flink:vkCmdSetVertexInputEXT
+  * flink:vkCmdSetPrimitiveTopology
+  * flink:vkCmdSetPatchControlPointsEXT, if pname:primitiveTopology is
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+  * flink:vkCmdSetPrimitiveRestartEnable
+
+If a shader is bound to the
+ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage, the following
+command must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetTessellationDomainOriginEXT
+
+If pname:rasterizerDiscardEnable is ename:VK_FALSE, the following commands
+must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetRasterizationSamplesEXT
+  * flink:vkCmdSetSampleMaskEXT
+  * flink:vkCmdSetAlphaToCoverageEnableEXT
+  * flink:vkCmdSetAlphaToOneEnableEXT, if the <<features-alphaToOne,
+    alphaToOne>> feature is enabled on the device
+  * flink:vkCmdSetPolygonModeEXT
+  * flink:vkCmdSetLineWidth, if pname:polygonMode is
+    ename:VK_POLYGON_MODE_LINE, or if
+ifdef::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+    a shader is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage and
+endif::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+    pname:primitiveTopology is a line topology, or if a shader which outputs
+    line primitives is bound to the
+    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage
+  * flink:vkCmdSetCullMode
+  * flink:vkCmdSetFrontFace
+  * flink:vkCmdSetDepthTestEnable
+  * flink:vkCmdSetDepthWriteEnable
+  * flink:vkCmdSetDepthCompareOp, if pname:depthTestEnable is ename:VK_TRUE
+  * flink:vkCmdSetDepthBoundsTestEnable, if the <<features-depthBounds,
+    depthBounds>> feature is enabled on the device
+  * flink:vkCmdSetDepthBounds, if pname:depthBoundsTestEnable is
+    ename:VK_TRUE
+  * flink:vkCmdSetDepthBiasEnable
+ifdef::VK_EXT_depth_bias_control[]
+  * flink:vkCmdSetDepthBias or flink:vkCmdSetDepthBias2EXT,
+endif::VK_EXT_depth_bias_control[]
+ifndef::VK_EXT_depth_bias_control[]
+  * flink:vkCmdSetDepthBias,
+endif::VK_EXT_depth_bias_control[]
+    if pname:depthBiasEnable is ename:VK_TRUE
+  * flink:vkCmdSetDepthClampEnableEXT, if the <<features-depthClamp,
+    depthClamp>> feature is enabled on the device
+  * flink:vkCmdSetStencilTestEnable
+  * flink:vkCmdSetStencilOp, if pname:stencilTestEnable is ename:VK_TRUE
+  * flink:vkCmdSetStencilCompareMask, if pname:stencilTestEnable is
+    ename:VK_TRUE
+  * flink:vkCmdSetStencilWriteMask, if pname:stencilTestEnable is
+    ename:VK_TRUE
+  * flink:vkCmdSetStencilReference, if pname:stencilTestEnable is
+    ename:VK_TRUE
+
+If a shader is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and
+pname:rasterizerDiscardEnable is ename:VK_FALSE, the following commands
+must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetLogicOpEnableEXT, if the <<features-logicOp,
+    pname:logicOp>> feature is enabled on the device
+  * flink:vkCmdSetLogicOpEXT, if pname:logicOpEnable is ename:VK_TRUE
+  * flink:vkCmdSetColorBlendEnableEXT, with values set for every color
+    attachment in the render pass instance active at draw time
+ifdef::VK_EXT_blend_operation_advanced[]
+  * flink:vkCmdSetColorBlendEquationEXT or
+    flink:vkCmdSetColorBlendAdvancedEXT,
+endif::VK_EXT_blend_operation_advanced[]
+ifndef::VK_EXT_blend_operation_advanced[]
+  * flink:vkCmdSetColorBlendEquationEXT,
+endif::VK_EXT_blend_operation_advanced[]
+    for every attachment whose index in pname:pColorBlendEnables is a
+    pointer to a value of ename:VK_TRUE
+  * flink:vkCmdSetBlendConstants, if any index in pname:pColorBlendEnables
+    is ename:VK_TRUE, and the same index in pname:pColorBlendEquations is a
+    sname:VkColorBlendEquationEXT structure with any elink:VkBlendFactor
+    member with a value of ename:VK_BLEND_FACTOR_CONSTANT_COLOR,
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
+    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA, or
+    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+  * flink:vkCmdSetColorWriteMaskEXT
+
+ifdef::VK_KHR_fragment_shading_rate[]
+If the <<features-pipelineFragmentShadingRate,
+pname:pipelineFragmentShadingRate>> feature is enabled on the device, and a
+shader is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and
+pname:rasterizerDiscardEnable is ename:VK_FALSE, the following command must:
+have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetFragmentShadingRateKHR
+endif::VK_KHR_fragment_shading_rate[]
+
+ifdef::VK_EXT_transform_feedback[]
+If the <<features-geometryStreams, pname:geometryStreams>> feature is
+enabled on the device, and a shader is bound to the
+ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, the following command must: have
+been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetRasterizationStreamEXT
+endif::VK_EXT_transform_feedback[]
+
+ifdef::VK_EXT_discard_rectangles[]
+If the `apiext:VK_EXT_discard_rectangles` extension is enabled on the
+device, and pname:rasterizerDiscardEnable is ename:VK_FALSE, the following
+commands must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetDiscardRectangleEnableEXT
+  * flink:vkCmdSetDiscardRectangleModeEXT, if `discardRectangleEnable` is
+    ename:VK_TRUE
+  * flink:vkCmdSetDiscardRectangleEXT, if `discardRectangleEnable` is
+    ename:VK_TRUE
+endif::VK_EXT_discard_rectangles[]
+
+ifdef::VK_EXT_conservative_rasterization[]
+If `apiext:VK_EXT_conservative_rasterization` extension is enabled on the
+device, and pname:rasterizerDiscardEnable is ename:VK_FALSE, the following
+commands must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetConservativeRasterizationModeEXT
+  * flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT, if
+    pname:conservativeRasterizationMode is
+    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
+endif::VK_EXT_conservative_rasterization[]
+
+ifdef::VK_EXT_depth_clip_enable[]
+If the <<features-depthClipEnable, pname:depthClipEnable>> feature is
+enabled on the device, the following command must: have been called in the
+command buffer prior to drawing:
+
+  * flink:vkCmdSetDepthClipEnableEXT
+endif::VK_EXT_depth_clip_enable[]
+
+ifdef::VK_EXT_sample_locations[]
+If the `apiext:VK_EXT_sample_locations` extension is enabled on the device,
+and pname:rasterizerDiscardEnable is ename:VK_FALSE, the following commands
+must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetSampleLocationsEnableEXT
+  * flink:vkCmdSetSampleLocationsEXT, if pname:sampleLocationsEnable is
+    ename:VK_TRUE
+endif::VK_EXT_sample_locations[]
+
+ifdef::VK_EXT_provoking_vertex[]
+If the `apiext:VK_EXT_provoking_vertex` extension is enabled on the device,
+and pname:rasterizerDiscardEnable is ename:VK_FALSE, and a shader is bound
+to the ename:VK_SHADER_STAGE_VERTEX_BIT stage, the following command must:
+have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetProvokingVertexModeEXT
+endif::VK_EXT_provoking_vertex[]
+
+ifdef::VK_EXT_line_rasterization[]
+If the `apiext:VK_EXT_line_rasterization` extension is enabled on the
+device, and pname:rasterizerDiscardEnable is ename:VK_FALSE, and if
+pname:polygonMode is ename:VK_POLYGON_MODE_LINE or a shader is bound to the
+ename:VK_SHADER_STAGE_VERTEX_BIT stage and pname:primitiveTopology is a line
+topology or a shader which outputs line primitives is bound to the
+ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
+ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, the following commands must: have
+been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetLineRasterizationModeEXT
+  * flink:vkCmdSetLineStippleEnableEXT
+  * flink:vkCmdSetLineStippleEXT, if pname:stippledLineEnable is
+    ename:VK_TRUE
+endif::VK_EXT_line_rasterization[]
+
+ifdef::VK_EXT_depth_clip_control[]
+If the <<features-depthClipControl, pname:depthClipControl>> feature is
+enabled on the device, the following command must: have been called in the
+command buffer prior to drawing:
+
+  * flink:vkCmdSetDepthClipNegativeOneToOneEXT
+endif::VK_EXT_depth_clip_control[]
+
+ifdef::VK_EXT_color_write_enable[]
+If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
+enabled on the device, and a shader is bound to the
+ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and pname:rasterizerDiscardEnable
+is ename:VK_FALSE, the following command must: have been called in the
+command buffer prior to drawing:
+
+  * flink:vkCmdSetColorWriteEnableEXT, with values set for every color
+    attachment in the render pass instance active at draw time
+endif::VK_EXT_color_write_enable[]
+
+ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
+If the <<features-attachmentFeedbackLoopDynamicState,
+attachmentFeedbackLoopDynamicState>> feature is enabled on the device, and a
+shader is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and
+pname:rasterizerDiscardEnable is ename:VK_FALSE, the following command must:
+have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetAttachmentFeedbackLoopEnableEXT
+endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
+
+ifdef::VK_NV_clip_space_w_scaling[]
+If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled on the
+device, the following commands must: have been called in the command buffer
+prior to drawing:
+
+  * flink:vkCmdSetViewportWScalingEnableNV
+  * flink:vkCmdSetViewportWScalingNV, if pname:viewportWScalingEnable is
+    ename:VK_TRUE
+endif::VK_NV_clip_space_w_scaling[]
+
+ifdef::VK_NV_viewport_swizzle[]
+If the `apiext:VK_NV_viewport_swizzle` extension is enabled on the device,
+the following command must: have been called in the command buffer prior to
+drawing:
+
+  * flink:vkCmdSetViewportSwizzleNV
+endif::VK_NV_viewport_swizzle[]
+
+ifdef::VK_NV_fragment_coverage_to_color[]
+If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled on the
+device, and a shader is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
+stage, and pname:rasterizerDiscardEnable is ename:VK_FALSE, the following
+commands must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetCoverageToColorEnableNV
+  * flink:vkCmdSetCoverageToColorLocationNV, if pname:coverageToColorEnable
+    is ename:VK_TRUE
+endif::VK_NV_fragment_coverage_to_color[]
+
+ifdef::VK_NV_framebuffer_mixed_samples[]
+If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled on the
+device, and pname:rasterizerDiscardEnable is ename:VK_FALSE, the following
+commands must: have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetCoverageModulationModeNV
+  * flink:vkCmdSetCoverageModulationTableEnableNV, if
+    pname:coverageModulationMode is not
+    ename:VK_COVERAGE_MODULATION_MODE_NONE_NV
+  * flink:vkCmdSetCoverageModulationTableNV, if
+    pname:coverageModulationTableEnable is ename:VK_TRUE
+endif::VK_NV_framebuffer_mixed_samples[]
+
+ifdef::VK_NV_coverage_reduction_mode[]
+If the <<features-coverageReductionMode, pname:coverageReductionMode>>
+feature is enabled on the device, and pname:rasterizerDiscardEnable is
+ename:VK_FALSE, the following command must: have been called in the command
+buffer prior to drawing:
+
+  * flink:vkCmdSetCoverageReductionModeNV
+endif::VK_NV_coverage_reduction_mode[]
+
+ifdef::VK_NV_representative_fragment_test[]
+If the <<features-representativeFragmentTest,
+pname:representativeFragmentTest>> feature is enabled on the device, and
+pname:rasterizerDiscardEnable is ename:VK_FALSE, the following command must:
+have been called in the command buffer prior to drawing:
+
+  * flink:vkCmdSetRepresentativeFragmentTestEnableNV
+endif::VK_NV_representative_fragment_test[]
+
+ifdef::VK_NV_shading_rate_image[]
+If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
+enabled on the device, and pname:rasterizerDiscardEnable is ename:VK_FALSE,
+the following commands must: have been called in the command buffer prior to
+drawing:
+
+  * flink:vkCmdSetCoarseSampleOrderNV
+  * flink:vkCmdSetShadingRateImageEnableNV
+  * flink:vkCmdSetViewportShadingRatePaletteNV, if
+    pname:shadingRateImageEnable is ename:VK_TRUE
+endif::VK_NV_shading_rate_image[]
+
+ifdef::VK_NV_scissor_exclusive[]
+If the <<features-exclusiveScissor, pname:exclusiveScissor>> feature is
+enabled on the device, the following commands must: have been called in the
+command buffer prior to drawing:
+
+  * flink:vkCmdSetExclusiveScissorEnableNV
+  * flink:vkCmdSetExclusiveScissorNV, if any value in
+    pname:pExclusiveScissorEnables is ename:VK_TRUE
+endif::VK_NV_scissor_exclusive[]
+
+State can: be set either at any time before or after shader objects are
+bound, but all required state must: be set prior to issuing drawing
+commands.
+
+[[shaders-objects-pipeline-interaction]]
+=== Interaction With Pipelines
+
+Calling flink:vkCmdBindShadersEXT causes the pipeline bind points
+<<shaders-binding,corresponding to each stage>> in pname:pStages to be
+disturbed, meaning that any <<pipelines, pipelines>> that had previously
+been bound to those pipeline bind points are no longer bound.
+
+If ename:VK_PIPELINE_BIND_POINT_GRAPHICS is disturbed (i.e., if
+pname:pStages contains any graphics stage), any graphics pipeline state that
+the previously bound pipeline did not specify as <<pipelines-dynamic-state,
+dynamic>> becomes undefined:, and must: be set in the command buffer before
+issuing drawing commands using shader objects.
+
+Calls to flink:vkCmdBindPipeline likewise disturb the shader stage(s)
+corresponding to pname:pipelineBindPoint, meaning that any shaders that had
+previously been bound to any of those stages are no longer bound, even if
+the pipeline was created without shaders for some of those stages.
+
+[[shaders-objects-destruction]]
+=== Shader Object Destruction
+
+[open,refpage='vkDestroyShaderEXT',desc='Destroy a shader object',type='protos']
+--
+To destroy a shader object, call:
+
+include::{generated}/api/protos/vkDestroyShaderEXT.adoc[]
+
+  * pname:device is the logical device that destroys the shader object.
+  * pname:shader is the handle of the shader object to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+Destroying a shader object used by one or more command buffers in the
+<<commandbuffers-lifecycle, recording or executable state>> causes those
+command buffers to move into the _invalid state_.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyShaderEXT-None-08481]]
+    The <<features-shaderObject, pname:shaderObject>> feature must: be
+    enabled
+  * [[VUID-vkDestroyShaderEXT-shader-08482]]
+    All submitted commands that refer to pname:shader must: have completed
+    execution
+  * [[VUID-vkDestroyShaderEXT-pAllocator-08483]]
+    If sname:VkAllocationCallbacks were provided when pname:shader was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyShaderEXT-pAllocator-08484]]
+    If no sname:VkAllocationCallbacks were provided when pname:shader was
+    created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyShaderEXT.adoc[]
+--
+
+endif::VK_EXT_shader_object[]
+
+[[shader-modules]]
+== Shader Modules
+
+[open,refpage='VkShaderModule',desc='Opaque handle to a shader module object',type='handles']
+--
+_Shader modules_ contain _shader code_ and one or more entry points.
+Shaders are selected from a shader module by specifying an entry point as
+part of <<pipelines,pipeline>> creation.
+The stages of a pipeline can: use shaders that come from different modules.
+The shader code defining a shader module must: be in the SPIR-V format, as
+described by the <<spirvenv,Vulkan Environment for SPIR-V>> appendix.
+
+Shader modules are represented by sname:VkShaderModule handles:
+
+include::{generated}/api/handles/VkShaderModule.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+Shader modules are not used in Vulkan SC, but the type has been retained for
+compatibility <<SCID-8>>.
+
+In Vulkan SC, the shader modules and pipeline state are supplied to an
+offline compiler which creates a pipeline cache entry which is loaded at
+<<pipelines,pipeline>> creation time.
+
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkStructureType
+  ** ename:VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO <<SCID-8>>
+  * elink:VkObjectType
+  ** ename:VK_OBJECT_TYPE_SHADER_MODULE <<SCID-8>>
+  * fname:vkCreateShaderModule, fname:vkDestroyShaderModule <<SCID-8>>
+  * sname:VkShaderModule, sname:VkShaderModuleCreateInfo <<SCID-8>>
+  * tname:VkShaderModuleCreateFlags <<SCID-8>>
+  * ename:VkShaderModuleCreateFlagBits <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='vkCreateShaderModule',desc='Creates a new shader module object',type='protos']
+--
+To create a shader module, call:
+
+include::{generated}/api/protos/vkCreateShaderModule.adoc[]
+
+  * pname:device is the logical device that creates the shader module.
+  * pname:pCreateInfo is a pointer to a slink:VkShaderModuleCreateInfo
+    structure.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pShaderModule is a pointer to a slink:VkShaderModule handle in
+    which the resulting shader module object is returned.
+
+Once a shader module has been created, any entry points it contains can: be
+used in pipeline shader stages as described in <<pipelines-compute,Compute
+Pipelines>> and <<pipelines-graphics,Graphics Pipelines>>.
+
+ifdef::VK_EXT_graphics_pipeline_libraries,VK_KHR_maintenance5[]
+[NOTE]
+.Note
+====
+If
+ifdef::VK_EXT_graphics_pipeline_libraries[]
+the <<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>
+feature
+endif::VK_EXT_graphics_pipeline_libraries[]
+ifdef::VK_EXT_graphics_pipeline_libraries+VK_KHR_maintenance5[or]
+ifdef::VK_KHR_maintenance5[]
+the <<features-maintenance5,pname:maintenance5>> feature
+endif::VK_KHR_maintenance5[]
+is enabled, shader module creation can be omitted entirely.
+Instead, applications should provide the slink:VkShaderModuleCreateInfo
+structure directly in to pipeline creation by chaining it to
+slink:VkPipelineShaderStageCreateInfo.
+This avoids the overhead of creating and managing an additional object.
+====
+endif::VK_EXT_graphics_pipeline_libraries,VK_KHR_maintenance5[]
+
+.Valid Usage
+****
+  * [[VUID-vkCreateShaderModule-pCreateInfo-06904]]
+    If pname:pCreateInfo is not `NULL`, pname:pCreateInfo->pNext must: be
+    `NULL`
+ifdef::VK_EXT_validation_cache[]
+    or a pointer to a slink:VkShaderModuleValidationCacheCreateInfoEXT
+    structure
+endif::VK_EXT_validation_cache[]
+****
+
+include::{generated}/validity/protos/vkCreateShaderModule.adoc[]
+--
+
+[open,refpage='VkShaderModuleCreateInfo',desc='Structure specifying parameters of a newly created shader module',type='structs']
+--
+:refpage: VkShaderModuleCreateInfo
+
+The sname:VkShaderModuleCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkShaderModuleCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:codeSize is the size, in bytes, of the code pointed to by
+    pname:pCode.
+  * pname:pCode is a pointer to code that is used to create the shader
+    module.
+    The type and format of the code is determined from the content of the
+    memory addressed by pname:pCode.
+
+.Valid Usage
+****
+:prefixCondition:
+ifdef::VK_NV_glsl_shader[]
+:prefixCondition: If pCode is a pointer to SPIR-V code,
+endif::VK_NV_glsl_shader[]
+
+include::{chapters}/commonvalidity/shader_create_spv_common.adoc[]
+
+ifdef::VK_NV_glsl_shader[]
+  * [[VUID-VkShaderModuleCreateInfo-pCode-07912]]
+    If the apiext:VK_NV_glsl_shader extension is not enabled, pname:pCode
+    must: be a pointer to SPIR-V code
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01379]]
+    If pname:pCode is a pointer to GLSL code, it must: be valid GLSL code
+    written to the `GL_KHR_vulkan_glsl` GLSL extension specification
+endif::VK_NV_glsl_shader[]
+  * [[VUID-VkShaderModuleCreateInfo-codeSize-01085]]
+    pname:codeSize must: be greater than 0
+****
+
+include::{generated}/validity/structs/VkShaderModuleCreateInfo.adoc[]
+--
+
+[open,refpage='VkShaderModuleCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkShaderModuleCreateFlags.adoc[]
+
+tname:VkShaderModuleCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_EXT_validation_cache[]
+include::{chapters}/VK_EXT_validation_cache/shader-module-validation-cache.adoc[]
+endif::VK_EXT_validation_cache[]
+
+
+[open,refpage='vkDestroyShaderModule',desc='Destroy a shader module',type='protos']
+--
+To destroy a shader module, call:
+
+include::{generated}/api/protos/vkDestroyShaderModule.adoc[]
+
+  * pname:device is the logical device that destroys the shader module.
+  * pname:shaderModule is the handle of the shader module to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+A shader module can: be destroyed while pipelines created using its shaders
+are still in use.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyShaderModule-shaderModule-01092]]
+    If sname:VkAllocationCallbacks were provided when pname:shaderModule was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyShaderModule-shaderModule-01093]]
+    If no sname:VkAllocationCallbacks were provided when pname:shaderModule
+    was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyShaderModule.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+
+
+
+ifdef::VK_EXT_shader_module_identifier[]
+[[shaders-identifiers]]
+== Shader Module Identifiers
+
+[open,refpage='vkGetShaderModuleIdentifierEXT',desc='Query a unique identifier for a shader module',type='protos']
+--
+Shader modules have unique identifiers associated with them.
+To query an implementation provided identifier, call:
+
+include::{generated}/api/protos/vkGetShaderModuleIdentifierEXT.adoc[]
+
+  * pname:device is the logical device that created the shader module.
+  * pname:shaderModule is the handle of the shader module.
+  * pname:pIdentifier is a pointer to the returned
+    slink:VkShaderModuleIdentifierEXT.
+
+The identifier returned by the implementation must: only depend on
+pname:shaderIdentifierAlgorithmUUID and information provided in the
+slink:VkShaderModuleCreateInfo which created pname:shaderModule.
+The implementation may: return equal identifiers for two different
+slink:VkShaderModuleCreateInfo structures if the difference does not affect
+pipeline compilation.
+Identifiers are only meaningful on different slink:VkDevice objects if the
+device the identifier was queried from had the same
+<<limits-shaderModuleIdentifierAlgorithmUUID,
+pname:shaderModuleIdentifierAlgorithmUUID>> as the device consuming the
+identifier.
+
+.Valid Usage
+****
+  * [[VUID-vkGetShaderModuleIdentifierEXT-shaderModuleIdentifier-06884]]
+    <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetShaderModuleIdentifierEXT.adoc[]
+--
+
+[open,refpage='vkGetShaderModuleCreateInfoIdentifierEXT',desc='Query a unique identifier for a shader module create info',type='protos']
+--
+slink:VkShaderModuleCreateInfo structures have unique identifiers associated
+with them.
+To query an implementation provided identifier, call:
+
+include::{generated}/api/protos/vkGetShaderModuleCreateInfoIdentifierEXT.adoc[]
+
+  * pname:device is the logical device that can: create a
+    slink:VkShaderModule from pname:pCreateInfo.
+  * pname:pCreateInfo is a pointer to a slink:VkShaderModuleCreateInfo
+    structure.
+  * pname:pIdentifier is a pointer to the returned
+    slink:VkShaderModuleIdentifierEXT.
+
+The identifier returned by implementation must: only depend on
+pname:shaderIdentifierAlgorithmUUID and information provided in the
+slink:VkShaderModuleCreateInfo.
+The implementation may: return equal identifiers for two different
+slink:VkShaderModuleCreateInfo structures if the difference does not affect
+pipeline compilation.
+Identifiers are only meaningful on different slink:VkDevice objects if the
+device the identifier was queried from had the same
+<<limits-shaderModuleIdentifierAlgorithmUUID,
+pname:shaderModuleIdentifierAlgorithmUUID>> as the device consuming the
+identifier.
+
+The identifier returned by the implementation in
+flink:vkGetShaderModuleCreateInfoIdentifierEXT must: be equal to the
+identifier returned by flink:vkGetShaderModuleIdentifierEXT given equivalent
+definitions of slink:VkShaderModuleCreateInfo and any chained pname:pNext
+structures.
+
+.Valid Usage
+****
+  * [[VUID-vkGetShaderModuleCreateInfoIdentifierEXT-shaderModuleIdentifier-06885]]
+    <<features-shaderModuleIdentifier, pname:shaderModuleIdentifier>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetShaderModuleCreateInfoIdentifierEXT.adoc[]
+--
+
+[open,refpage='VkShaderModuleIdentifierEXT',desc='A unique identifier for a shader module',type='structs']
+--
+slink:VkShaderModuleIdentifierEXT represents a shader module identifier
+returned by the implementation.
+
+include::{generated}/api/structs/VkShaderModuleIdentifierEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:identifierSize is the size, in bytes, of valid data returned in
+    pname:identifier.
+  * pname:identifier is a buffer of opaque data specifying an identifier.
+
+Any returned values beyond the first pname:identifierSize bytes are
+undefined:.
+Implementations must: return an pname:identifierSize greater than 0, and
+less-or-equal to ename:VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT.
+
+Two identifiers are considered equal if pname:identifierSize is equal and
+the first pname:identifierSize bytes of pname:identifier compare equal.
+
+Implementations may: return a different pname:identifierSize for different
+modules.
+Implementations should: ensure that pname:identifierSize is large enough to
+uniquely define a shader module.
+
+include::{generated}/validity/structs/VkShaderModuleIdentifierEXT.adoc[]
+--
+
+[open,refpage='VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT',desc='Maximum length of a shader module identifier',type='consts']
+--
+ename:VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT is the length in bytes of a
+shader module identifier, as returned in
+slink:VkShaderModuleIdentifierEXT::pname:identifierSize.
+
+include::{generated}/api/enums/VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT.adoc[]
+--
+endif::VK_EXT_shader_module_identifier[]
+
+[[shaders-binding]]
+== Binding Shaders
+
+Before a shader can be used it must: be first bound to the command buffer.
+
+Calling flink:vkCmdBindPipeline binds all stages corresponding to the
+elink:VkPipelineBindPoint.
+ifdef::VK_EXT_shader_object[]
+Calling flink:vkCmdBindShadersEXT binds all stages in pname:pStages
+endif::VK_EXT_shader_object[]
+
+The following table describes the relationship between shader stages and
+pipeline bind points:
+
+[cols="1,1,1"]
+|====
+|Shader stage |Pipeline bind point | behavior controlled
+
+a| * ename:VK_SHADER_STAGE_VERTEX_BIT
+  * ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
+  * ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  * ename:VK_SHADER_STAGE_GEOMETRY_BIT
+  * ename:VK_SHADER_STAGE_FRAGMENT_BIT
+ifdef::VK_EXT_mesh_shader[]
+  * ename:VK_SHADER_STAGE_TASK_BIT_EXT
+  * ename:VK_SHADER_STAGE_MESH_BIT_EXT
+endif::VK_EXT_mesh_shader[]
+ifndef::VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+  * ename:VK_SHADER_STAGE_TASK_BIT_NV
+  * ename:VK_SHADER_STAGE_MESH_BIT_NV
+endif::VK_NV_mesh_shader[]
+endif::VK_EXT_mesh_shader[]
+| ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+| all <<drawing, drawing commands>>
+
+a| * ename:VK_SHADER_STAGE_COMPUTE_BIT
+| ename:VK_PIPELINE_BIND_POINT_COMPUTE
+| all <<dispatch, dispatch commands>>
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+a| * ename:VK_SHADER_STAGE_ANY_HIT_BIT_KHR
+  * ename:VK_SHADER_STAGE_CALLABLE_BIT_KHR
+  * ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+  * ename:VK_SHADER_STAGE_INTERSECTION_BIT_KHR
+  * ename:VK_SHADER_STAGE_MISS_BIT_KHR
+  * ename:VK_SHADER_STAGE_RAYGEN_BIT_KHR
+| ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR
+| flink:vkCmdTraceRaysKHR and flink:vkCmdTraceRaysIndirectKHR
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+a| * ename:VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
+  * ename:VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI
+| ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
+| flink:vkCmdSubpassShadingHUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_AMDX_shader_enqueue[]
+a| * ename:VK_SHADER_STAGE_COMPUTE_BIT
+| ename:VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX
+| all <<executiongraphs, execution graph commands>>
+endif::VK_AMDX_shader_enqueue[]
+|====
+
+[[shaders-execution]]
+== Shader Execution
+
+At each stage of the pipeline, multiple invocations of a shader may: execute
+simultaneously.
+Further, invocations of a single shader produced as the result of different
+commands may: execute simultaneously.
+The relative execution order of invocations of the same shader type is
+undefined:.
+Shader invocations may: complete in a different order than that in which the
+primitives they originated from were drawn or dispatched by the application.
+However, fragment shader outputs are written to attachments in
+<<primsrast-order,rasterization order>>.
+
+The relative execution order of invocations of different shader types is
+largely undefined:.
+However, when invoking a shader whose inputs are generated from a previous
+pipeline stage, the shader invocations from the previous stage are
+guaranteed to have executed far enough to generate input values for all
+required inputs.
+
+
+[[shaders-termination]]
+=== Shader Termination
+
+A shader invocation that is _terminated_ has finished executing
+instructions.
+
+Executing code:OpReturn in the entry point, or executing
+code:OpTerminateInvocation in any function will terminate an invocation.
+Implementations may: also terminate a shader invocation when code:OpKill is
+executed in any function; otherwise it becomes a
+<<shaders-helper-invocations, helper invocation>>.
+
+In addition to the above conditions, <<shaders-helper-invocations,helper
+invocations>> are terminated when all non-helper invocations in the same
+<<shaders-derivative-operations,derivative group>> either terminate or
+become <<shaders-helper-invocations,helper invocations>> via
+ifdef::VK_EXT_shader_demote_to_helper_invocation[]
+code:OpDemoteToHelperInvocationEXT or
+endif::VK_EXT_shader_demote_to_helper_invocation[]
+code:OpKill.
+
+A shader stage for a given command completes execution when all invocations
+for that stage have terminated.
+
+
+[[shaders-execution-memory-ordering]]
+== Shader Memory Access Ordering
+
+The order in which image or buffer memory is read or written by shaders is
+largely undefined:.
+For some shader types (vertex, tessellation evaluation, and in some cases,
+fragment), even the number of shader invocations that may: perform loads and
+stores is undefined:.
+
+In particular, the following rules apply:
+
+  * <<shaders-vertex-execution,Vertex>> and
+    <<shaders-tessellation-evaluation-execution,tessellation evaluation>>
+    shaders will be invoked at least once for each unique vertex, as defined
+    in those sections.
+  * <<fragops-shader,Fragment>> shaders will be invoked zero or more times,
+    as defined in that section.
+  * The relative execution order of invocations of the same shader type is
+    undefined:.
+    A store issued by a shader when working on primitive B might complete
+    prior to a store for primitive A, even if primitive A is specified prior
+    to primitive B. This applies even to fragment shaders; while fragment
+    shader outputs are always written to the framebuffer in
+    <<primsrast-order, rasterization order>>, stores executed by fragment
+    shader invocations are not.
+  * The relative execution order of invocations of different shader types is
+    largely undefined:.
+
+[NOTE]
+.Note
+====
+The above limitations on shader invocation order make some forms of
+synchronization between shader invocations within a single set of primitives
+unimplementable.
+For example, having one invocation poll memory written by another invocation
+assumes that the other invocation has been launched and will complete its
+writes in finite time.
+====
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+The <<memory-model,Memory Model>> appendix defines the terminology and rules
+for how to correctly communicate between shader invocations, such as when a
+write is <<memory-model-visible-to,Visible-To>> a read, and what constitutes
+a <<memory-model-access-data-race,Data Race>>.
+
+Applications must: not cause a data race.
+
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+ifndef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+Stores issued to different memory locations within a single shader
+invocation may: not be visible to other invocations, or may: not become
+visible in the order they were performed.
+
+The code:OpMemoryBarrier instruction can: be used to provide stronger
+ordering of reads and writes performed by a single invocation.
+code:OpMemoryBarrier guarantees that any memory transactions issued by the
+shader invocation prior to the instruction complete prior to the memory
+transactions issued after the instruction.
+Memory barriers are needed for algorithms that require multiple invocations
+to access the same memory and require the operations to be performed in a
+partially-defined relative order.
+For example, if one shader invocation does a series of writes, followed by
+an code:OpMemoryBarrier instruction, followed by another write, then the
+results of the series of writes before the barrier become visible to other
+shader invocations at a time earlier or equal to when the results of the
+final write become visible to those invocations.
+In practice it means that another invocation that sees the results of the
+final write would also see the previous writes.
+Without the memory barrier, the final write may: be visible before the
+previous writes.
+
+Writes that are the result of shader stores through a variable decorated
+with code:Coherent automatically have available writes to the same buffer,
+buffer view, or image view made visible to them, and are themselves
+automatically made available to access by the same buffer, buffer view, or
+image view.
+Reads that are the result of shader loads through a variable decorated with
+code:Coherent automatically have available writes to the same buffer, buffer
+view, or image view made visible to them.
+The order that coherent writes to different locations become available is
+undefined:, unless enforced by a memory barrier instruction or other memory
+dependency.
+
+[NOTE]
+.Note
+====
+Explicit memory dependencies must: still be used to guarantee availability
+and visibility for access via other buffers, buffer views, or image views.
+====
+
+The built-in atomic memory transaction instructions can: be used to read and
+write a given memory address atomically.
+While built-in atomic functions issued by multiple shader invocations are
+executed in undefined: order relative to each other, these functions perform
+both a read and a write of a memory address and guarantee that no other
+memory transaction will write to the underlying memory between the read and
+write.
+Atomic operations ensure automatic availability and visibility for writes
+and reads in the same way as those to code:Coherent variables.
+
+[NOTE]
+.Note
+====
+Memory accesses performed on different resource descriptors with the same
+memory backing may: not be well-defined even with the code:Coherent
+decoration or via atomics, due to things such as image layouts or ownership
+of the resource - as described in the <<synchronization, Synchronization and
+Cache Control>> chapter.
+====
+
+[NOTE]
+.Note
+====
+Atomics allow shaders to use shared global addresses for mutual exclusion or
+as counters, among other uses.
+====
+
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+The SPIR-V *SubgroupMemory*, *CrossWorkgroupMemory*, and
+*AtomicCounterMemory* memory semantics are ignored.
+Sequentially consistent atomics and barriers are not supported and
+*SequentiallyConsistent* is treated as *AcquireRelease*.
+*SequentiallyConsistent* should: not be used.
+
+
+[[shaders-inputs]]
+== Shader Inputs and Outputs
+
+Data is passed into and out of shaders using variables with input or output
+storage class, respectively.
+User-defined inputs and outputs are connected between stages by matching
+their code:Location decorations.
+Additionally, data can: be provided by or communicated to special functions
+provided by the execution environment using code:BuiltIn decorations.
+
+In many cases, the same code:BuiltIn decoration can: be used in multiple
+shader stages with similar meaning.
+The specific behavior of variables decorated as code:BuiltIn is documented
+in the following sections.
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+[[shaders-task]]
+== Task Shaders
+
+Task shaders operate in conjunction with the mesh shaders to produce a
+collection of primitives that will be processed by subsequent stages of the
+graphics pipeline.
+Its primary purpose is to create a variable amount of subsequent mesh shader
+invocations.
+
+Task shaders are invoked via the execution of the
+<<drawing-mesh-shading,programmable mesh shading>> pipeline.
+
+The task shader has no fixed-function inputs other than variables
+identifying the specific workgroup and invocation.
+ifdef::VK_NV_mesh_shader[]
+In the code:TaskNV {ExecutionModel} the number of mesh shader workgroups to
+create is specified via a code:TaskCountNV decorated output variable.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+In the code:TaskEXT {ExecutionModel} the number of mesh shader workgroups to
+create is specified via the code:OpEmitMeshTasksEXT instruction.
+endif::VK_EXT_mesh_shader[]
+
+The task shader can write additional outputs to task memory, which can be
+read by all of the mesh shader workgroups it created.
+
+
+=== Task Shader Execution
+
+Task workloads are formed from groups of work items called workgroups and
+processed by the task shader in the current graphics pipeline.
+A workgroup is a collection of shader invocations that execute the same
+shader, potentially in parallel.
+Task shaders execute in _global workgroups_ which are divided into a number
+of _local workgroups_ with a size that can: be set by assigning a value to
+the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+execution mode or via an object decorated by the code:WorkgroupSize
+decoration.
+An invocation within a local workgroup can: share data with other members of
+the local workgroup through shared variables and issue memory and control
+flow barriers to synchronize with other members of the local workgroup.
+ifdef::VK_EXT_mesh_shader[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, a Task shader using
+code:TaskEXT {ExecutionModel} may: be invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+endif::VK_EXT_mesh_shader[]
+
+
+[[shaders-mesh]]
+== Mesh Shaders
+
+Mesh shaders operate in workgroups to produce a collection of primitives
+that will be processed by subsequent stages of the graphics pipeline.
+Each workgroup emits zero or more output primitives and the group of
+vertices and their associated data required for each output primitive.
+
+Mesh shaders are invoked via the execution of the
+<<drawing-mesh-shading,programmable mesh shading>> pipeline.
+
+The only inputs available to the mesh shader are variables identifying the
+specific workgroup and invocation and, if applicable, any outputs written to
+task memory by the task shader that spawned the mesh shader's workgroup.
+The mesh shader can operate without a task shader as well.
+
+The invocations of the mesh shader workgroup write an output mesh,
+comprising a set of primitives with per-primitive attributes, a set of
+vertices with per-vertex attributes, and an array of indices identifying the
+mesh vertices that belong to each primitive.
+The primitives of this mesh are then processed by subsequent graphics
+pipeline stages, where the outputs of the mesh shader form an interface with
+the fragment shader.
+
+
+=== Mesh Shader Execution
+
+Mesh workloads are formed from groups of work items called workgroups and
+processed by the mesh shader in the current graphics pipeline.
+A workgroup is a collection of shader invocations that execute the same
+shader, potentially in parallel.
+Mesh shaders execute in _global workgroups_ which are divided into a number
+of _local workgroups_ with a size that can: be set by assigning a value to
+the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+execution mode or via an object decorated by the code:WorkgroupSize
+decoration.
+An invocation within a local workgroup can: share data with other members of
+the local workgroup through shared variables and issue memory and control
+flow barriers to synchronize with other members of the local workgroup.
+
+The _global workgroups_ may be generated explicitly via the API, or
+implicitly through the task shader's work creation mechanism.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_EXT_mesh_shader[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, a Mesh shader using
+code:MeshEXT {ExecutionModel} may: be invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+endif::VK_EXT_mesh_shader[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+[[shaders-cluster-culling]]
+
+== Cluster Culling Shaders
+Cluster Culling shaders are invoked via the execution of the
+<<drawing-cluster-culling-shading,Programmable Cluster Culling Shading>>
+pipeline.
+
+The only inputs available to the cluster culling shader are variables
+identifying the specific workgroup and invocation.
+
+Cluster Culling shaders operate in workgroups to perform cluster-based
+culling and produce zero or more cluster drawing command that will be
+processed by subsequent stages of the graphics pipeline.
+
+The Cluster Drawing Command(CDC) is very similar to the MDI command,
+invocations in workgroup can emit zero of more CDC to draw zero or more
+visible cluster.
+
+=== Cluster Culling Shader Execution
+
+Cluster Culling workloads are formed from groups of work items called
+workgroups and processed by the cluster culling shader in the current
+graphics pipeline.
+A workgroup is a collection of shader invocations that execute the same
+shader, potentially in parallel.
+Cluster Culling shaders execute in _global workgroups_ which are divided
+into a number of _local workgroups_ with a size that can: be set by
+assigning a value to the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+execution mode or via an object decorated by the code:WorkgroupSize
+decoration.
+An invocation within a local workgroup can: share data with other members of
+the local workgroup through shared variables and issue memory and control
+flow barriers to synchronize with other members of the local workgroup.
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+[[shaders-vertex]]
+== Vertex Shaders
+
+Each vertex shader invocation operates on one vertex and its associated
+<<fxvertex-attrib,vertex attribute>> data, and outputs one vertex and
+associated data.
+ifndef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Graphics pipelines must: include a vertex shader, and the vertex shader
+stage is always the first shader stage in the graphics pipeline.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+Graphics pipelines using primitive shading must: include a vertex shader,
+and the vertex shader stage is always the first shader stage in the graphics
+pipeline.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+
+[[shaders-vertex-execution]]
+=== Vertex Shader Execution
+
+A vertex shader must: be executed at least once for each vertex specified by
+a drawing command.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, the shader may: be
+invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+During execution, the shader is presented with the index of the vertex and
+instance for which it has been invoked.
+Input variables declared in the vertex shader are filled by the
+implementation with the values of vertex attributes associated with the
+invocation being executed.
+
+If the same vertex is specified multiple times in a drawing command (e.g. by
+including the same index value multiple times in an index buffer) the
+implementation may: reuse the results of vertex shading if it can statically
+determine that the vertex shader invocations will produce identical results.
+
+[NOTE]
+.Note
+====
+It is implementation-dependent when and if results of vertex shading are
+reused, and thus how many times the vertex shader will be executed.
+This is true also if the vertex shader contains stores or atomic operations
+(see <<features-vertexPipelineStoresAndAtomics,
+pname:vertexPipelineStoresAndAtomics>>).
+====
+
+
+[[shaders-tessellation-control]]
+== Tessellation Control Shaders
+
+The tessellation control shader is used to read an input patch provided by
+the application and to produce an output patch.
+Each tessellation control shader invocation operates on an input patch
+(after all control points in the patch are processed by a vertex shader) and
+its associated data, and outputs a single control point of the output patch
+and its associated data, and can: also output additional per-patch data.
+The input patch is sized according to the pname:patchControlPoints member of
+slink:VkPipelineTessellationStateCreateInfo, as part of input assembly.
+
+ifdef::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+The input patch can also be dynamically sized with pname:patchControlPoints
+parameter of flink:vkCmdSetPatchControlPointsEXT.
+
+[open,refpage='vkCmdSetPatchControlPointsEXT',desc='Specify the number of control points per patch dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the number of control points
+per patch, call:
+
+include::{generated}/api/protos/vkCmdSetPatchControlPointsEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:patchControlPoints specifies the number of control points per
+    patch.
+
+This command sets the number of control points per patch for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state2[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state2[]
+Otherwise, this state is specified by the
+slink:VkPipelineTessellationStateCreateInfo::pname:patchControlPoints value
+used to create the currently active pipeline.
+
+:refpage: vkCmdSetPatchControlPointsEXT
+:requiredfeature: extendedDynamicState2PatchControlPoints
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state2_optional_feature_common.adoc[]
+  * [[VUID-vkCmdSetPatchControlPointsEXT-patchControlPoints-04874]]
+    pname:patchControlPoints must: be greater than zero and less than or
+    equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
+****
+
+include::{generated}/validity/protos/vkCmdSetPatchControlPointsEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
+
+The size of the output patch is controlled by the code:OpExecutionMode
+code:OutputVertices specified in the tessellation control or tessellation
+evaluation shaders, which must: be specified in at least one of the shaders.
+The size of the input and output patches must: each be greater than zero and
+less than or equal to
+sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize.
+
+
+[[shaders-tessellation-control-execution]]
+=== Tessellation Control Shader Execution
+
+A tessellation control shader is invoked at least once for each _output_
+vertex in a patch.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, the shader may: be
+invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+Inputs to the tessellation control shader are generated by the vertex
+shader.
+Each invocation of the tessellation control shader can: read the attributes
+of any incoming vertices and their associated data.
+The invocations corresponding to a given patch execute logically in
+parallel, with undefined: relative execution order.
+However, the code:OpControlBarrier instruction can: be used to provide
+limited control of the execution order by synchronizing invocations within a
+patch, effectively dividing tessellation control shader execution into a set
+of phases.
+Tessellation control shaders will read undefined: values if one invocation
+reads a per-vertex or per-patch output written by another invocation at any
+point during the same phase, or if two invocations attempt to write
+different values to the same per-patch output in a single phase.
+
+
+[[shaders-tessellation-evaluation]]
+== Tessellation Evaluation Shaders
+
+The Tessellation Evaluation Shader operates on an input patch of control
+points and their associated data, and a single input barycentric coordinate
+indicating the invocation's relative position within the subdivided patch,
+and outputs a single vertex and its associated data.
+
+
+[[shaders-tessellation-evaluation-execution]]
+=== Tessellation Evaluation Shader Execution
+
+A tessellation evaluation shader is invoked at least once for each unique
+vertex generated by the tessellator.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, the shader may: be
+invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+
+[[shaders-geometry]]
+== Geometry Shaders
+
+The geometry shader operates on a group of vertices and their associated
+data assembled from a single input primitive, and emits zero or more output
+primitives and the group of vertices and their associated data required for
+each output primitive.
+
+
+[[shaders-geometry-execution]]
+=== Geometry Shader Execution
+
+A geometry shader is invoked at least once for each primitive produced by
+the tessellation stages, or at least once for each primitive generated by
+<<drawing,primitive assembly>> when tessellation is not in use.
+A shader can request that the geometry shader runs multiple
+<<geometry-invocations, instances>>.
+A geometry shader is invoked at least once for each instance.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass includes multiple views in its view mask, the shader may: be
+invoked separately for each view.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+
+[[shaders-fragment]]
+== Fragment Shaders
+
+Fragment shaders are invoked as a <<fragops-shader, fragment operation>> in
+a graphics pipeline.
+Each fragment shader invocation operates on a single fragment and its
+associated data.
+With few exceptions, fragment shaders do not have access to any data
+associated with other fragments and are considered to execute in isolation
+of fragment shader invocations associated with other fragments.
+
+
+[[shaders-compute]]
+== Compute Shaders
+
+Compute shaders are invoked via flink:vkCmdDispatch and
+flink:vkCmdDispatchIndirect commands.
+In general, they have access to similar resources as shader stages executing
+as part of a graphics pipeline.
+
+Compute workloads are formed from groups of work items called workgroups and
+processed by the compute shader in the current compute pipeline.
+A workgroup is a collection of shader invocations that execute the same
+shader, potentially in parallel.
+Compute shaders execute in _global workgroups_ which are divided into a
+number of _local workgroups_ with a size that can: be set by assigning a
+value to the code:LocalSize
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
+execution mode or via an object decorated by the code:WorkgroupSize
+decoration.
+An invocation within a local workgroup can: share data with other members of
+the local workgroup through shared variables and issue memory and control
+flow barriers to synchronize with other members of the local workgroup.
+
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+[[shaders-raytracing-shaders]]
+[[shaders-ray-generation]]
+== Ray Generation Shaders
+
+A ray generation shader is similar to a compute shader.
+Its main purpose is to execute ray tracing queries using code:OpTraceRayKHR
+instructions and process the results.
+
+
+[[shaders-ray-generation-execution]]
+=== Ray Generation Shader Execution
+
+One ray generation shader is executed per ray tracing dispatch.
+Its location in the shader binding table (see <<shader-binding-table,Shader
+Binding Table>> for details) is passed directly into
+ifdef::VK_KHR_ray_tracing_pipeline[]
+flink:vkCmdTraceRaysKHR using the pname:pRaygenShaderBindingTable parameter
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_tracing_pipeline+VK_KHR_ray_tracing_pipeline[or]
+ifdef::VK_NV_ray_tracing[]
+flink:vkCmdTraceRaysNV using the pname:raygenShaderBindingTableBuffer and
+pname:raygenShaderBindingOffset parameters
+endif::VK_NV_ray_tracing[]
+.
+
+
+[[shaders-intersection]]
+== Intersection Shaders
+
+Intersection shaders enable the implementation of arbitrary, application
+defined geometric primitives.
+An intersection shader for a primitive is executed whenever its axis-aligned
+bounding box is hit by a ray.
+
+Like other ray tracing shader domains, an intersection shader operates on a
+single ray at a time.
+It also operates on a single primitive at a time.
+It is therefore the purpose of an intersection shader to compute the
+ray-primitive intersections and report them.
+To report an intersection, the shader calls the code:OpReportIntersectionKHR
+instruction.
+
+An intersection shader communicates with any-hit and closest shaders by
+generating attribute values that they can: read.
+Intersection shaders cannot: read or modify the ray payload.
+
+
+[[shaders-intersection-execution]]
+=== Intersection Shader Execution
+The order in which intersections are found along a ray, and therefore the
+order in which intersection shaders are executed, is unspecified.
+
+The intersection shader of the closest AABB which intersects the ray is
+guaranteed to be executed at some point during traversal, unless the ray is
+forcibly terminated.
+
+
+[[shaders-any-hit]]
+== Any-Hit Shaders
+
+The any-hit shader is executed after the intersection shader reports an
+intersection that lies within the current [eq]#[t~min~,t~max~]# of the ray.
+The main use of any-hit shaders is to programmatically decide whether or not
+an intersection will be accepted.
+The intersection will be accepted unless the shader calls the
+code:OpIgnoreIntersectionKHR instruction.
+Any-hit shaders have read-only access to the attributes generated by the
+corresponding intersection shader, and can: read or modify the ray payload.
+
+
+[[shaders-any-hit-execution]]
+=== Any-Hit Shader Execution
+
+The order in which intersections are found along a ray, and therefore the
+order in which any-hit shaders are executed, is unspecified.
+
+The any-hit shader of the closest hit is guaranteed to be executed at some
+point during traversal, unless the ray is forcibly terminated.
+
+
+[[shaders-closest-hit]]
+== Closest Hit Shaders
+
+Closest hit shaders have read-only access to the attributes generated by the
+corresponding intersection shader, and can: read or modify the ray payload.
+They also have access to a number of system-generated values.
+Closest hit shaders can: call code:OpTraceRayKHR to recursively trace rays.
+
+
+[[shaders-closest-hit-execution]]
+=== Closest Hit Shader Execution
+
+Exactly one closest hit shader is executed when traversal is finished and an
+intersection has been found and accepted.
+
+
+[[shaders-miss]]
+== Miss Shaders
+
+Miss shaders can: access the ray payload and can: trace new rays through the
+code:OpTraceRayKHR instruction, but cannot: access attributes since they are
+not associated with an intersection.
+
+
+[[shaders-miss-execution]]
+=== Miss Shader Execution
+
+A miss shader is executed instead of a closest hit shader if no intersection
+was found during traversal.
+
+
+[[shaders-callable]]
+== Callable Shaders
+
+Callable shaders can: access a callable payload that works similarly to ray
+payloads to do subroutine work.
+
+
+[[shaders-callable-execution]]
+=== Callable Shader Execution
+
+A callable shader is executed by calling code:OpExecuteCallableKHR from an
+allowed shader stage.
+
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+
+[[shaders-interpolation-decorations]]
+== Interpolation Decorations
+
+Variables in the code:Input storage class in a fragment shader's interface
+are interpolated from the values specified by the primitive being
+rasterized.
+
+[NOTE]
+.Note
+====
+Interpolation decorations can be present on input and output variables in
+pre-rasterization shaders but have no effect on the interpolation performed.
+ifdef::VK_EXT_graphics_pipeline_libraries[]
+However, when linking graphics pipeline libraries, if the
+<<limits-graphicsPipelineLibraryIndependentInterpolationDecoration,
+pname:graphicsPipelineLibraryIndependentInterpolationDecoration>> limit is
+not supported, interpolation qualifiers do need to match between the
+fragment shader input and the last pre-rasterization shader output.
+endif::VK_EXT_graphics_pipeline_libraries[]
+====
+
+An undecorated input variable will be interpolated with perspective-correct
+interpolation according to the primitive type being rasterized.
+<<line_perspective_interpolation,Lines>> and
+<<triangle_perspective_interpolation,polygons>> are interpolated in the same
+way as the primitive's clip coordinates.
+If the code:NoPerspective decoration is present, linear interpolation is
+instead used for <<line_linear_interpolation,lines>> and
+<<triangle_linear_interpolation,polygons>>.
+For points, as there is only a single vertex, input values are never
+interpolated and instead take the value written for the single vertex.
+
+If the code:Flat decoration is present on an input variable, the value is
+not interpolated, and instead takes its value directly from the
+<<vertexpostproc-flatshading,provoking vertex>>.
+Fragment shader inputs that are signed or unsigned integers, integer
+vectors, or any double-precision floating-point type must: be decorated with
+code:Flat.
+
+Interpolation of input variables is performed at an implementation-defined
+position within the fragment area being shaded.
+The position is further constrained as follows:
+
+  * If the code:Centroid decoration is used, the interpolation position used
+    for the variable must: also fall within the bounds of the primitive
+    being rasterized.
+  * If the code:Sample decoration is used, the interpolation position used
+    for the variable must: be at the position of the sample being shaded by
+    the current fragment shader invocation.
+  * If a sample count of 1 is used, the interpolation position must: be at
+    the center of the fragment area.
+
+[NOTE]
+.Note
+====
+As code:Centroid restricts the possible interpolation position to the
+covered area of the primitive, the position can be forced to vary between
+neighboring fragments when it otherwise would not.
+Derivatives calculated based on these differing locations can produce
+inconsistent results compared to undecorated inputs.
+It is recommended that input variables used in derivative calculations are
+not decorated with code:Centroid.
+====
+
+ifdef::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+[[shaders-interpolation-decorations-pervertexkhr]]
+If the code:PerVertexKHR decoration is present on an input variable, the
+value is not interpolated, and instead values from all input vertices are
+available in an array.
+Each index of the array corresponds to one of the vertices of the primitive
+that produced the fragment.
+endif::VK_NV_fragment_shader_barycentric,VK_KHR_fragment_shader_barycentric[]
+
+ifdef::VK_AMD_shader_explicit_vertex_parameter[]
+If the code:CustomInterpAMD decoration is present on an input variable, the
+value cannot: be accessed directly; instead the extended instruction
+code:InterpolateAtVertexAMD must: be used to obtain values from the input
+vertices.
+endif::VK_AMD_shader_explicit_vertex_parameter[]
+
+
+[[shaders-staticuse]]
+== Static Use
+
+A SPIR-V module declares a global object in memory using the code:OpVariable
+instruction, which results in a pointer code:x to that object.
+A specific entry point in a SPIR-V module is said to _statically use_ that
+object if that entry point's call tree contains a function containing a
+instruction with code:x as an code:id operand.
+A shader entry point also _statically uses_ any variables explicitly
+declared in its interface.
+
+
+[[shaders-scope]]
+== Scope
+
+A _scope_ describes a set of shader invocations, where each such set is a
+_scope instance_.
+Each invocation belongs to one or more scope instances, but belongs to no
+more than one scope instance for each scope.
+
+The operations available between invocations in a given scope instance vary,
+with smaller scopes generally able to perform more operations, and with
+greater efficiency.
+
+
+[[shaders-scope-cross-device]]
+=== Cross Device
+
+All invocations executed in a Vulkan instance fall into a single _cross
+device scope instance_.
+
+Whilst the code:CrossDevice scope is defined in SPIR-V, it is disallowed in
+Vulkan.
+API <<synchronization, synchronization>> commands can: be used to
+communicate between devices.
+
+
+[[shaders-scope-device]]
+=== Device
+
+All invocations executed on a single device form a _device scope instance_.
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+If the <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> and
+<<features-vulkanMemoryModelDeviceScope,
+pname:vulkanMemoryModelDeviceScope>> features are enabled, this scope is
+represented in SPIR-V by the code:Device code:Scope, which can: be used as a
+code:Memory code:Scope for barrier and atomic operations.
+
+ifdef::VK_KHR_shader_clock[]
+If both the <<features-shaderDeviceClock, pname:shaderDeviceClock>> and
+<<features-vulkanMemoryModelDeviceScope,
+pname:vulkanMemoryModelDeviceScope>> features are enabled, using the
+code:Device code:Scope with the code:OpReadClockKHR instruction will read
+from a clock that is consistent across invocations in the same device scope
+instance.
+endif::VK_KHR_shader_clock[]
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+There is no method to synchronize the execution of these invocations within
+SPIR-V, and this can: only be done with API synchronization primitives.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+Invocations executing on different devices in a device group operate in
+separate device scope instances.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifndef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+The scope only extends to the queue family, not the whole device.
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+
+[[shaders-scope-queue-family]]
+=== Queue Family
+
+Invocations executed by queues in a given queue family form a _queue family
+scope instance_.
+
+This scope is identified in SPIR-V as the
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+code:QueueFamily code:Scope if the <<features-vulkanMemoryModel,
+pname:vulkanMemoryModel>> feature is enabled, or if not, the
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+code:Device code:Scope, which can: be used as a code:Memory code:Scope for
+barrier and atomic operations.
+
+ifdef::VK_KHR_shader_clock[]
+If the <<features-shaderDeviceClock, pname:shaderDeviceClock>> feature is
+enabled,
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+but the <<features-vulkanMemoryModelDeviceScope,
+pname:vulkanMemoryModelDeviceScope>> feature is not enabled,
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+using the code:Device code:Scope with the code:OpReadClockKHR instruction
+will read from a clock that is consistent across invocations in the same
+queue family scope instance.
+endif::VK_KHR_shader_clock[]
+
+There is no method to synchronize the execution of these invocations within
+SPIR-V, and this can: only be done with API synchronization primitives.
+
+Each invocation in a queue family scope instance must: be in the same
+<<shaders-scope-device, device scope instance>>.
+
+
+[[shaders-scope-command]]
+=== Command
+
+Any shader invocations executed as the result of a single command such as
+flink:vkCmdDispatch or flink:vkCmdDraw form a _command scope instance_.
+For indirect drawing commands with pname:drawCount greater than one,
+invocations from separate draws are in separate command scope instances.
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+For ray tracing shaders, an invocation group is an implementation-dependent
+subset of the set of shader invocations of a given shader stage which are
+produced by a single trace rays command.
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+
+There is no specific code:Scope for communication across invocations in a
+command scope instance.
+As this has a clear boundary at the API level, coordination here can: be
+performed in the API, rather than in SPIR-V.
+
+Each invocation in a command scope instance must: be in the same
+<<shaders-scope-queue-family, queue-family scope instance>>.
+
+For shaders without defined <<shaders-scope-workgroup, workgroups>>, this
+set of invocations forms an _invocation group_ as defined in the
+<<spirv-spec,SPIR-V specification>>.
+
+
+[[shaders-scope-primitive]]
+=== Primitive
+
+Any fragment shader invocations executed as the result of rasterization of a
+single primitive form a _primitive scope instance_.
+
+There is no specific code:Scope for communication across invocations in a
+primitive scope instance.
+
+Any generated <<shaders-helper-invocations, helper invocations>> are
+included in this scope instance.
+
+Each invocation in a primitive scope instance must: be in the same
+<<shaders-scope-command, command scope instance>>.
+
+Any input variables decorated with code:Flat are uniform within a primitive
+scope instance.
+
+
+// intentionally no VK_NV_ray_tracing here since this scope does not exist there
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[[shaders-scope-shadercall]]
+=== Shader Call
+
+Any <<shader-call-related,shader-call-related>> invocations that are
+executed in one or more ray tracing execution models form a _shader call
+scope instance_.
+
+The code:ShaderCallKHR code:Scope can be used as code:Memory code:Scope for
+barrier and atomic operations.
+
+Each invocation in a shader call scope instance must: be in the same
+<<shaders-scope-queue-family, queue family scope instance>>.
+endif::VK_KHR_ray_tracing_pipeline[]
+
+
+[[shaders-scope-workgroup]]
+=== Workgroup
+
+A _local workgroup_ is a set of invocations that can synchronize and share
+data with each other using memory in the code:Workgroup storage class.
+
+The code:Workgroup code:Scope can be used as both an code:Execution
+code:Scope and code:Memory code:Scope for barrier and atomic operations.
+
+Each invocation in a local workgroup must: be in the same
+<<shaders-scope-command, command scope instance>>.
+
+Only
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+task, mesh, and
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+compute shaders have defined workgroups - other shader types cannot: use
+workgroup functionality.
+For shaders that have defined workgroups, this set of invocations forms an
+_invocation group_ as defined in the <<spirv-spec,SPIR-V specification>>.
+
+[[workgroup-padding]]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+When variables declared with the code:Workgroup storage class are explicitly
+laid out (hence they are also decorated with code:Block), the amount of
+storage consumed is the size of the largest Block variable, not counting any
+padding at the end.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+The amount of storage consumed by the
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+non-Block
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+variables declared with the code:Workgroup storage class is
+implementation-dependent.
+However, the amount of storage consumed may not exceed the largest block
+size that would be obtained if all active
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+non-Block
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+variables declared with code:Workgroup storage class were assigned offsets
+in an arbitrary order by successively taking the smallest valid offset
+according to the <<interfaces-resources-standard-layout,Standard Storage
+Buffer Layout>> rules, and with code:Boolean values considered as 32-bit
+integer values for the purpose of this calculation.
+(This is equivalent to using the GLSL std430 layout rules.)
+
+
+ifdef::VK_VERSION_1_1[]
+[[shaders-scope-subgroup]]
+=== Subgroup
+
+A _subgroup_ (see the subsection "`Control Flow`" of section 2 of the SPIR-V
+1.3 Revision 1 specification) is a set of invocations that can synchronize
+and share data with each other efficiently.
+
+The code:Subgroup code:Scope can be used as both an code:Execution
+code:Scope and code:Memory code:Scope for barrier and atomic operations.
+Other <<VkSubgroupFeatureFlagBits, subgroup features>> allow the use of
+<<shaders-group-operations, group operations>> with subgroup scope.
+
+ifdef::VK_KHR_shader_clock[]
+If the <<features-shaderSubgroupClock, pname:shaderSubgroupClock>> feature
+is enabled, using the code:Subgroup code:Scope with the code:OpReadClockKHR
+instruction will read from a clock that is consistent across invocations in
+the same subgroup.
+endif::VK_KHR_shader_clock[]
+
+For <<shaders-scope-workgroup, shaders that have defined workgroups>>, each
+invocation in a subgroup must: be in the same <<shaders-scope-workgroup,
+local workgroup>>.
+
+In other shader stages, each invocation in a subgroup must: be in the same
+<<shaders-scope-device, device scope instance>>.
+
+Only <<limits-subgroup-supportedStages, shader stages that support subgroup
+operations>> have defined subgroups.
+
+[NOTE]
+.Note
+====
+In shaders, there are two kinds of uniformity that are of primary interest
+to applications: uniform within an invocation group (a.k.a.
+dynamically uniform), and uniform within a subgroup scope.
+
+While one could make the assumption that being uniform in invocation group
+implies being uniform in subgroup scope, it is not necessarily the case for
+shader stages without defined workgroups.
+
+For shader stages with defined workgroups however, the relationship between
+invocation group and subgroup scope is well defined as a subgroup is a
+subset of the workgroup, and the workgroup is the invocation group.
+If a value is uniform in invocation group, it is by definition also uniform
+in subgroup scope.
+This is important if writing code like:
+
+[source,glsl]
+----
+uniform texture2D Textures[];
+uint dynamicallyUniformValue = gl_WorkGroupID.x;
+vec4 value = texelFetch(Textures[dynamicallyUniformValue], coord, 0);
+
+// subgroupUniformValue is guaranteed to be uniform within the subgroup.
+// This value also happens to be dynamically uniform.
+vec4 subgroupUniformValue = subgroupBroadcastFirst(dynamicallyUniformValue);
+----
+
+In shader stages without defined workgroups, this gets complicated.
+Due to scoping rules, there is no guarantee that a subgroup is a subset of
+the invocation group, which in turn defines the scope for dynamically
+uniform.
+In graphics, the invocation group is a single draw command, except for
+multi-draw situations, and indirect draws with drawCount > 1, where there
+are multiple invocation groups, one per code:DrawIndex.
+
+[source,glsl]
+----
+// Assume SubgroupSize = 8, where 3 draws are packed together.
+// Two subgroups were generated.
+uniform texture2D Textures[];
+
+// DrawIndex builtin is dynamically uniform
+uint dynamicallyUniformValue = gl_DrawID;
+//              | gl_DrawID = 0 | gl_DrawID = 1 | }
+// Subgroup 0: { 0, 0, 0, 0,      1, 1, 1, 1 }
+//              | DrawID = 2 | DrawID = 1 | }
+// Subgroup 1: { 2, 2, 2, 2,      1, 1, 1, 1 }
+
+uint notActuallyDynamicallyUniformAnymore =
+    subgroupBroadcastFirst(dynamicallyUniformValue);
+//              | gl_DrawID = 0 | gl_DrawID = 1 | }
+// Subgroup 0: { 0, 0, 0, 0,      0, 0, 0, 0 }
+//              | gl_DrawID = 2 | gl_DrawID = 1 | }
+// Subgroup 1: { 2, 2, 2, 2,      2, 2, 2, 2 }
+
+// Bug. gl_DrawID = 1's invocation group observes both index 0 and 2.
+vec4 value = texelFetch(Textures[notActuallyDynamicallyUniformAnymore],
+                        coord, 0);
+----
+
+Another problematic scenario is when a shader attempts to help the compiler
+notice that a value is uniform in subgroup scope to potentially improve
+performance.
+
+[source,c]
+----
+layout(location = 0) flat in dynamicallyUniformIndex;
+// Vertex shader might have emitted a value that depends only on gl_DrawID,
+// making it dynamically uniform.
+// Give knowledge to compiler that the flat input is dynamically uniform,
+// as this is not a guarantee otherwise.
+
+uint uniformIndex = subgroupBroadcastFirst(dynamicallyUniformIndex);
+// Hazard: If different draw commands are packed into one subgroup, the uniformIndex is wrong.
+
+DrawData d = UBO.perDrawData[uniformIndex];
+----
+
+For implementations where subgroups are packed across draws, the
+implementation must make sure to handle descriptor indexing correctly.
+From the specification's point of view, a dynamically uniform index does not
+require code:NonUniform decoration, and such an implementation will likely
+either promote descriptor indexing into code:NonUniform on its own, or
+handle non-uniformity implicitly.
+====
+endif::VK_VERSION_1_1[]
+
+
+[[shaders-scope-quad]]
+=== Quad
+
+A _quad scope instance_ is formed of four shader invocations.
+
+In a fragment shader, each invocation in a quad scope instance is formed of
+invocations in neighboring framebuffer locations [eq]#(x~i~, y~i~)#, where:
+
+  * [eq]#i# is the index of the invocation within the scope instance.
+  * [eq]#w# and [eq]#h# are the number of pixels the fragment covers in the
+    [eq]#x# and [eq]#y# axes.
+  * [eq]#w# and [eq]#h# are identical for all participating invocations.
+  * [eq]#(x~0~) = (x~1~ - w) = (x~2~) = (x~3~ - w)#
+  * [eq]#(y~0~) = (y~1~) = (y~2~ - h) = (y~3~ - h)#
+  * Each invocation has the same layer and sample indices.
+
+ifdef::VK_NV_compute_shader_derivatives[]
+In a compute shader, if the code:DerivativeGroupQuadsNV execution mode is
+specified, each invocation in a quad scope instance is formed of invocations
+with adjacent local invocation IDs [eq]#(x~i~, y~i~)#, where:
+
+  * [eq]#i# is the index of the invocation within the quad scope instance.
+  * [eq]#(x~0~) = (x~1~ - 1) = (x~2~) = (x~3~ - 1)#
+  * [eq]#(y~0~) = (y~1~) = (y~2~ - 1) = (y~3~ - 1)#
+  * [eq]#x~0~# and [eq]#y~0~# are integer multiples of 2.
+  * Each invocation has the same [eq]#z# coordinate.
+
+In a compute shader, if the code:DerivativeGroupLinearNV execution mode is
+specified, each invocation in a quad scope instance is formed of invocations
+with adjacent local invocation indices [eq]#(l~i~)#, where:
+
+  * [eq]#i# is the index of the invocation within the quad scope instance.
+  * [eq]#(l~0~) = (l~1~ - 1) = (l~2~ - 2) = (l~3~ - 3)#
+  * [eq]#l~0~# is an integer multiple of 4.
+
+endif::VK_NV_compute_shader_derivatives[]
+
+ifdef::VK_VERSION_1_1[]
+In all shaders, each invocation in a quad scope instance is formed of
+invocations in adjacent subgroup invocation indices [eq]#(s~i~)#, where:
+
+  * [eq]#i# is the index of the invocation within the quad scope instance.
+  * [eq]#(s~0~) = (s~1~ - 1) = (s~2~ - 2) = (s~3~ - 3)#
+  * [eq]#s~0~# is an integer multiple of 4.
+
+Each invocation in a quad scope instance must: be in the same
+<<shaders-scope-subgroup, subgroup>>.
+endif::VK_VERSION_1_1[]
+
+ifndef::VK_VERSION_1_1[]
+The specific set of invocations that make up a quad scope instance in other
+shader stages is undefined:.
+endif::VK_VERSION_1_1[]
+
+In a fragment shader, each invocation in a quad scope instance must: be in
+the same <<shaders-scope-primitive, primitive scope instance>>.
+
+ifndef::VK_VERSION_1_1[]
+For <<shaders-scope-workgroup, shaders that have defined workgroups>>, each
+invocation in a quad scope instance must: be in the same
+<<shaders-scope-workgroup, local workgroup>>.
+
+In other shader stages, each invocation in a quad scope instance must: be in
+the same <<shaders-scope-device, device scope instance>>.
+endif::VK_VERSION_1_1[]
+
+Fragment
+ifdef::VK_NV_compute_shader_derivatives,VK_VERSION_1_1[]
+and compute
+endif::VK_NV_compute_shader_derivatives,VK_VERSION_1_1[]
+shaders have defined quad scope instances.
+ifdef::VK_VERSION_1_1[]
+If the <<limits-subgroup-quadOperationsInAllStages,
+pname:quadOperationsInAllStages>> limit is supported, any
+<<limits-subgroup-supportedStages, shader stages that support subgroup
+operations>> also have defined quad scope instances.
+endif::VK_VERSION_1_1[]
+
+
+ifdef::VK_EXT_fragment_shader_interlock[]
+[[shaders-scope-fragment-interlock]]
+=== Fragment Interlock
+
+A _fragment interlock scope instance_ is formed of fragment shader
+invocations based on their framebuffer locations [eq]#(x,y,layer,sample)#,
+executed by commands inside a single <<renderpass,subpass>>.
+
+The specific set of invocations included varies based on the execution mode
+as follows:
+
+  * If the code:SampleInterlockOrderedEXT or
+    code:SampleInterlockUnorderedEXT execution modes are used, only
+    invocations with identical framebuffer locations
+    [eq]#(x,y,layer,sample)# are included.
+  * If the code:PixelInterlockOrderedEXT or code:PixelInterlockUnorderedEXT
+    execution modes are used, fragments with different sample ids are also
+    included.
+ifdef::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+  * If the code:ShadingRateInterlockOrderedEXT or
+    code:ShadingRateInterlockUnorderedEXT execution modes are used,
+    fragments from neighbouring framebuffer locations are also included.
+    The
+ifdef::VK_NV_shading_rate_image[<<primsrast-shading-rate-image, shading rate image>>]
+ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
+ifdef::VK_KHR_fragment_shading_rate[<<primsrast-fragment-shading-rate, fragment shading rate>>]
+    determines these fragments.
+endif::VK_NV_shading_rate_image,VK_KHR_fragment_shading_rate[]
+
+Only fragment shaders with one of the above execution modes have defined
+fragment interlock scope instances.
+
+There is no specific code:Scope value for communication across invocations
+in a fragment interlock scope instance.
+However, this is implicitly used as a memory scope by
+code:OpBeginInvocationInterlockEXT and code:OpEndInvocationInterlockEXT.
+
+Each invocation in a fragment interlock scope instance must: be in the same
+<<shaders-scope-queue-family, queue family scope instance>>.
+endif::VK_EXT_fragment_shader_interlock[]
+
+
+[[shaders-scope-invocation]]
+=== Invocation
+
+The smallest _scope_ is a single invocation; this is represented by the
+code:Invocation code:Scope in SPIR-V.
+
+Fragment shader invocations must: be in a <<shaders-scope-primitive,
+primitive scope instance>>.
+
+ifdef::VK_EXT_fragment_shader_interlock[]
+Invocations in <<shaders-scope-fragment-interlock, fragment shaders that
+have a defined fragment interlock scope>> must: be in a
+<<shaders-scope-fragment-interlock, fragment interlock scope instance>>.
+endif::VK_EXT_fragment_shader_interlock[]
+
+Invocations in <<shaders-scope-workgroup, shaders that have defined
+workgroups>> must: be in a <<shaders-scope-workgroup, local workgroup>>.
+
+ifdef::VK_VERSION_1_1[]
+Invocations in <<shaders-scope-subgroup, shaders that have a defined
+subgroup scope>> must: be in a <<shaders-scope-subgroup, subgroup>>.
+endif::VK_VERSION_1_1[]
+
+Invocations in <<shaders-scope-quad, shaders that have a defined quad
+scope>> must: be in a <<shaders-scope-quad, quad scope instance>>.
+
+All invocations in all stages must: be in a <<shaders-scope-command,command
+scope instance>>.
+
+
+ifdef::VK_VERSION_1_1[]
+[[shaders-group-operations]]
+== Group Operations
+
+_Group operations_ are executed by multiple invocations within a
+<<shaders-scope, scope instance>>; with each invocation involved in
+calculating the result.
+This provides a mechanism for efficient communication between invocations in
+a particular scope instance.
+
+Group operations all take a code:Scope defining the desired
+<<shaders-scope,scope instance>> to operate within.
+Only the code:Subgroup scope can: be used for these operations; the
+<<limits-subgroupSupportedOperations, pname:subgroupSupportedOperations>>
+limit defines which types of operation can: be used.
+
+
+[[shaders-group-operations-basic]]
+=== Basic Group Operations
+
+Basic group operations include the use of code:OpGroupNonUniformElect,
+code:OpControlBarrier, code:OpMemoryBarrier, and atomic operations.
+
+code:OpGroupNonUniformElect can: be used to choose a single invocation to
+perform a task for the whole group.
+Only the invocation with the lowest id in the group will return code:true.
+
+The <<memory-model,Memory Model>> appendix defines the operation of barriers
+and atomics.
+
+
+[[shaders-group-operations-vote]]
+=== Vote Group Operations
+
+The vote group operations allow invocations within a group to compare values
+across a group.
+The types of votes enabled are:
+
+  * Do all active group invocations agree that an expression is true?
+  * Do any active group invocations evaluate an expression to true?
+  * Do all active group invocations have the same value of an expression?
+
+[NOTE]
+.Note
+====
+These operations are useful in combination with control flow in that they
+allow for developers to check whether conditions match across the group and
+choose potentially faster code-paths in these cases.
+====
+
+
+[[shaders-group-operations-arithmetic]]
+=== Arithmetic Group Operations
+
+The arithmetic group operations allow invocations to perform scans and
+reductions across a group.
+The operators supported are add, mul, min, max, and, or, xor.
+
+For reductions, every invocation in a group will obtain the cumulative
+result of these operators applied to all values in the group.
+For exclusive scans, each invocation in a group will obtain the cumulative
+result of these operators applied to all values in invocations with a lower
+index in the group.
+Inclusive scans are identical to exclusive scans, except the cumulative
+result includes the operator applied to the value in the current invocation.
+
+The order in which these operators are applied is implementation-dependent.
+
+
+[[shaders-group-operations-ballot]]
+=== Ballot Group Operations
+
+The ballot group operations allow invocations to perform more complex votes
+across the group.
+The ballot functionality allows all invocations within a group to provide a
+boolean value and get as a result what each invocation provided as their
+boolean value.
+The broadcast functionality allows values to be broadcast from an invocation
+to all other invocations within the group.
+
+
+[[shaders-group-operations-shuffle]]
+=== Shuffle Group Operations
+
+The shuffle group operations allow invocations to read values from other
+invocations within a group.
+
+
+[[shaders-group-operations-shuffle-relative]]
+=== Shuffle Relative Group Operations
+
+The shuffle relative group operations allow invocations to read values from
+other invocations within the group relative to the current invocation in the
+group.
+The relative operations supported allow data to be shifted up and down
+through the invocations within a group.
+
+
+[[shaders-group-operations-clustered]]
+=== Clustered Group Operations
+
+The clustered group operations allow invocations to perform an operation
+among partitions of a group, such that the operation is only performed
+within the group invocations within a partition.
+The partitions for clustered group operations are consecutive power-of-two
+size groups of invocations and the cluster size must: be known at pipeline
+creation time.
+The operations supported are add, mul, min, max, and, or, xor.
+
+
+[[shaders-quad-operations]]
+== Quad Group Operations
+
+Quad group operations (code:OpGroupNonUniformQuad*) are a specialized type
+of <<shaders-group-operations, group operations>> that only operate on
+<<shaders-scope-quad, quad scope instances>>.
+Whilst these instructions do include a code:Scope parameter, this scope is
+always overridden; only the <<shaders-scope-quad, quad scope instance>> is
+included in its execution scope.
+
+Fragment shaders that statically execute quad group operations must: launch
+sufficient invocations to ensure their correct operation; additional
+<<shaders-helper-invocations, helper invocations>> are launched for
+framebuffer locations not covered by rasterized fragments if necessary.
+
+The index used to select participating invocations is [eq]#i#, as described
+for a <<shaders-scope-quad, quad scope instance>>, defined as the _quad
+index_ in the <<spirv-spec,SPIR-V specification>>.
+
+For code:OpGroupNonUniformQuadBroadcast this value is equal to code:Index.
+For code:OpGroupNonUniformQuadSwap, it is equal to the implicit code:Index
+used by each participating invocation.
+endif::VK_VERSION_1_1[]
+
+
+[[shaders-derivative-operations]]
+== Derivative Operations
+
+Derivative operations calculate the partial derivative for an expression
+[eq]#P# as a function of an invocation's [eq]#x# and [eq]#y# coordinates.
+
+Derivative operations operate on a set of invocations known as a _derivative
+group_ as defined in the <<spirv-spec,SPIR-V specification>>.
+A derivative group is equivalent to
+ifdef::VK_NV_compute_shader_derivatives[]
+the <<shaders-scope-quad, quad scope instance>> for a compute shader
+invocation, or
+endif::VK_NV_compute_shader_derivatives[]
+the <<shaders-scope-primitive, primitive scope instance>> for a fragment
+shader invocation.
+
+Derivatives are calculated assuming that [eq]#P# is piecewise linear and
+continuous within the derivative group.
+All dynamic instances of explicit derivative instructions (code:OpDPdx*,
+code:OpDPdy*, and code:OpFwidth*) must: be executed in control flow that is
+uniform within a derivative group.
+For other derivative operations, results are undefined: if a dynamic
+instance is executed in control flow that is not uniform within the
+derivative group.
+
+Fragment shaders that statically execute derivative operations must: launch
+sufficient invocations to ensure their correct operation; additional
+<<shaders-helper-invocations, helper invocations>> are launched for
+framebuffer locations not covered by rasterized fragments if necessary.
+
+ifdef::VK_NV_compute_shader_derivatives[]
+[NOTE]
+.Note
+====
+In a compute shader, it is the application's responsibility to ensure that
+sufficient invocations are launched.
+====
+endif::VK_NV_compute_shader_derivatives[]
+
+Derivative operations calculate their results as the difference between the
+result of [eq]#P# across invocations in the quad.
+For fine derivative operations (code:OpDPdxFine and code:OpDPdyFine), the
+values of [eq]#DPdx(P~i~)# are calculated as
+
+  {empty}:: [eq]#DPdx(P~0~) = DPdx(P~1~) = P~1~ - P~0~#
+  {empty}:: [eq]#DPdx(P~2~) = DPdx(P~3~) = P~3~ - P~2~#
+
+and the values of [eq]#DPdy(P~i~)# are calculated as
+
+  {empty}:: [eq]#DPdy(P~0~) = DPdy(P~2~) = P~2~ - P~0~#
+  {empty}:: [eq]#DPdy(P~1~) = DPdy(P~3~) = P~3~ - P~1~#
+
+where [eq]#i# is the index of each invocation as described in
+<<shaders-scope-quad>>.
+
+Coarse derivative operations (code:OpDPdxCoarse and code:OpDPdyCoarse),
+calculate their results in roughly the same manner, but may: only calculate
+two values instead of four (one for each of [eq]#DPdx# and [eq]#DPdy#),
+reusing the same result no matter the originating invocation.
+If an implementation does this, it should: use the fine derivative
+calculations described for [eq]#P~0~#.
+
+[NOTE]
+.Note
+====
+Derivative values are calculated between fragments rather than pixels.
+If the fragment shader invocations involved in the calculation cover
+multiple pixels, these operations cover a wider area, resulting in larger
+derivative values.
+This in turn will result in a coarser LOD being selected for image sampling
+operations using derivatives.
+
+Applications may want to account for this when using multi-pixel fragments;
+if pixel derivatives are desired, applications should use explicit
+derivative operations and divide the results by the size of the fragment in
+each dimension as follows:
+
+  {empty}:: [eq]#DPdx(P~n~)' = DPdx(P~n~) / w#
+  {empty}:: [eq]#DPdy(P~n~)' = DPdy(P~n~) / h#
+
+where [eq]#w# and [eq]#h# are the size of the fragments in the quad, and
+[eq]#DPdx(P~n~)'# and [eq]#DPdy(P~n~)'# are the pixel derivatives.
+====
+
+The results for code:OpDPdx and code:OpDPdy may: be calculated as either
+fine or coarse derivatives, with implementations favouring the most
+efficient approach.
+Implementations must: choose coarse or fine consistently between the two.
+
+Executing code:OpFwidthFine, code:OpFwidthCoarse, or code:OpFwidth is
+equivalent to executing the corresponding code:OpDPdx* and code:OpDPdy*
+instructions, taking the absolute value of the results, and summing them.
+
+Executing an code:OpImage*Sample*ImplicitLod instruction is equivalent to
+executing code:OpDPdx(code:Coordinate) and code:OpDPdy(code:Coordinate), and
+passing the results as the code:Grad operands code:dx and code:dy.
+
+[NOTE]
+.Note
+====
+It is expected that using the code:ImplicitLod variants of sampling
+functions will be substantially more efficient than using the
+code:ExplicitLod variants with explicitly generated derivatives.
+====
+
+
+[[shaders-helper-invocations]]
+== Helper Invocations
+
+When performing <<shaders-derivative-operations, derivative>>
+ifdef::VK_VERSION_1_1[]
+or <<shaders-quad-operations, quad group>>
+endif::VK_VERSION_1_1[]
+operations in a fragment shader, additional invocations may: be spawned in
+order to ensure correct results.
+These additional invocations are known as _helper invocations_ and can: be
+identified by a non-zero value in the code:HelperInvocation built-in.
+Stores and atomics performed by helper invocations must: not have any effect
+on memory except for the code:Function, code:Private and code:Output storage
+classes, and values returned by atomic instructions in helper invocations
+are undefined:.
+
+[NOTE]
+.Note
+====
+While storage to code:Output storage class has an effect even in helper
+invocations, it does not mean that helper invocations have an effect on the
+framebuffer.
+code:Output variables in fragment shaders can be read from as well, and they
+behave more like code:Private variables for the duration of the shader
+invocation.
+====
+
+For <<shaders-group-operations, group operations>> other than
+<<shaders-derivative-operations, derivative>>
+ifdef::VK_VERSION_1_1[]
+and <<shaders-quad-operations, quad group>>
+endif::VK_VERSION_1_1[]
+operations, helper invocations may: be treated as inactive even if they
+would be considered otherwise active.
+
+ifdef::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+Helper invocations may: become permanently inactive if all invocations in a
+quad scope instance become helper invocations.
+endif::VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation[]
+
+
+ifdef::VK_NV_cooperative_matrix,VK_KHR_cooperative_matrix[]
+== Cooperative Matrices
+
+A _cooperative matrix_ type is a SPIR-V type where the storage for and
+computations performed on the matrix are spread across the invocations in a
+scope instance.
+These types give the implementation freedom in how to optimize matrix
+multiplies.
+
+SPIR-V defines the types and instructions, but does not specify rules about
+what sizes/combinations are valid, and it is expected that different
+implementations may: support different sizes.
+
+ifdef::VK_KHR_cooperative_matrix[]
+[open,refpage='vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR',desc='Returns properties describing what cooperative matrix types are supported',type='protos']
+--
+To enumerate the supported cooperative matrix types and operations, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    cooperative matrix properties available or queried.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkCooperativeMatrixPropertiesKHR structures.
+
+If pname:pProperties is `NULL`, then the number of cooperative matrix
+properties available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of cooperative matrix
+properties available, at most pname:pPropertyCount structures will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available cooperative matrix
+properties were returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
+--
+endif::VK_KHR_cooperative_matrix[]
+
+ifdef::VK_NV_cooperative_matrix[]
+[open,refpage='vkGetPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Returns properties describing what cooperative matrix types are supported',type='protos']
+--
+To enumerate the supported cooperative matrix types and operations, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
+
+  * pname:physicalDevice is the physical device.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    cooperative matrix properties available or queried.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkCooperativeMatrixPropertiesNV structures.
+
+If pname:pProperties is `NULL`, then the number of cooperative matrix
+properties available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of cooperative matrix
+properties available, at most pname:pPropertyCount structures will be
+written, and ename:VK_INCOMPLETE will be returned instead of
+ename:VK_SUCCESS, to indicate that not all the available cooperative matrix
+properties were returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
+--
+endif::VK_NV_cooperative_matrix[]
+
+Each
+ifdef::VK_KHR_cooperative_matrix[slink:VkCooperativeMatrixPropertiesKHR]
+ifdef::VK_KHR_cooperative_matrix+VK_NV_cooperative_matrix[or]
+ifdef::VK_NV_cooperative_matrix[slink:VkCooperativeMatrixPropertiesNV]
+structure describes a single supported combination of types for a matrix
+multiply/add operation (
+ifdef::VK_KHR_cooperative_matrix[code:OpCooperativeMatrixMulAddKHR]
+ifdef::VK_KHR_cooperative_matrix+VK_NV_cooperative_matrix[or]
+ifdef::VK_NV_cooperative_matrix[code:OpCooperativeMatrixMulAddNV]
+).
+The multiply can: be described in terms of the following variables and types
+(in SPIR-V pseudocode):
+
+ifdef::VK_KHR_cooperative_matrix[]
+[source,c]
+----
+    %A is of type OpTypeCooperativeMatrixKHR %AType %scope %MSize %KSize %MatrixAKHR
+    %B is of type OpTypeCooperativeMatrixKHR %BType %scope %KSize %NSize %MatrixBKHR
+    %C is of type OpTypeCooperativeMatrixKHR %CType %scope %MSize %NSize %MatrixAccumulatorKHR
+    %Result is of type OpTypeCooperativeMatrixKHR %ResultType %scope %MSize %NSize %MatrixAccumulatorKHR
+
+    %Result = %A * %B + %C // using OpCooperativeMatrixMulAddKHR
+----
+endif::VK_KHR_cooperative_matrix[]
+
+ifdef::VK_NV_cooperative_matrix[]
+[source,c]
+----
+    %A is of type OpTypeCooperativeMatrixNV %AType %scope %MSize %KSize
+    %B is of type OpTypeCooperativeMatrixNV %BType %scope %KSize %NSize
+    %C is of type OpTypeCooperativeMatrixNV %CType %scope %MSize %NSize
+    %D is of type OpTypeCooperativeMatrixNV %DType %scope %MSize %NSize
+
+    %D = %A * %B + %C // using OpCooperativeMatrixMulAddNV
+----
+endif::VK_NV_cooperative_matrix[]
+
+A matrix multiply with these dimensions is known as an _MxNxK_ matrix
+multiply.
+
+ifdef::VK_KHR_cooperative_matrix[]
+[open,refpage='VkCooperativeMatrixPropertiesKHR',desc='Structure specifying cooperative matrix properties',type='structs']
+--
+The sname:VkCooperativeMatrixPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkCooperativeMatrixPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:MSize is the number of rows in matrices code:A, code:C, and
+    code:Result.
+  * pname:KSize is the number of columns in matrix code:A and rows in matrix
+    code:B.
+  * pname:NSize is the number of columns in matrices code:B, code:C,
+    code:Result.
+  * pname:AType is the component type of matrix code:A, of type
+    elink:VkComponentTypeKHR.
+  * pname:BType is the component type of matrix code:B, of type
+    elink:VkComponentTypeKHR.
+  * pname:CType is the component type of matrix code:C, of type
+    elink:VkComponentTypeKHR.
+  * pname:ResultType is the component type of matrix code:Result, of type
+    elink:VkComponentTypeKHR.
+  * pname:saturatingAccumulation indicates whether the
+    code:SaturatingAccumulation operand to code:OpCooperativeMatrixMulAddKHR
+    must: be present.
+  * pname:scope is the scope of all the matrix types, of type
+    elink:VkScopeKHR.
+
+If some types are preferred over other types (e.g. for performance), they
+should: appear earlier in the list enumerated by
+flink:vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.
+
+At least one entry in the list must: have power of two values for all of
+pname:MSize, pname:KSize, and pname:NSize.
+
+include::{generated}/validity/structs/VkCooperativeMatrixPropertiesKHR.adoc[]
+--
+endif::VK_KHR_cooperative_matrix[]
+
+ifdef::VK_NV_cooperative_matrix[]
+[open,refpage='VkCooperativeMatrixPropertiesNV',desc='Structure specifying cooperative matrix properties',type='structs']
+--
+The sname:VkCooperativeMatrixPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkCooperativeMatrixPropertiesNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:MSize is the number of rows in matrices A, C, and D.
+  * pname:KSize is the number of columns in matrix A and rows in matrix B.
+  * pname:NSize is the number of columns in matrices B, C, D.
+  * pname:AType is the component type of matrix A, of type
+    elink:VkComponentTypeNV.
+  * pname:BType is the component type of matrix B, of type
+    elink:VkComponentTypeNV.
+  * pname:CType is the component type of matrix C, of type
+    elink:VkComponentTypeNV.
+  * pname:DType is the component type of matrix D, of type
+    elink:VkComponentTypeNV.
+  * pname:scope is the scope of all the matrix types, of type
+    elink:VkScopeNV.
+
+If some types are preferred over other types (e.g. for performance), they
+should: appear earlier in the list enumerated by
+flink:vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.
+
+At least one entry in the list must: have power of two values for all of
+pname:MSize, pname:KSize, and pname:NSize.
+
+include::{generated}/validity/structs/VkCooperativeMatrixPropertiesNV.adoc[]
+--
+endif::VK_NV_cooperative_matrix[]
+
+[open,refpage='VkScopeKHR',desc='Specify SPIR-V scope',type='enums']
+--
+Possible values for elink:VkScopeKHR include:
+
+include::{generated}/api/enums/VkScopeKHR.adoc[]
+
+ifdef::VK_NV_cooperative_matrix[]
+or the equivalent
+
+include::{generated}/api/enums/VkScopeNV.adoc[]
+endif::VK_NV_cooperative_matrix[]
+
+  * ename:VK_SCOPE_DEVICE_KHR corresponds to SPIR-V code:Device scope.
+  * ename:VK_SCOPE_WORKGROUP_KHR corresponds to SPIR-V code:Workgroup scope.
+  * ename:VK_SCOPE_SUBGROUP_KHR corresponds to SPIR-V code:Subgroup scope.
+  * ename:VK_SCOPE_QUEUE_FAMILY_KHR corresponds to SPIR-V code:QueueFamily
+    scope.
+
+All enum values match the corresponding SPIR-V value.
+--
+
+[open,refpage='VkComponentTypeKHR',desc='Specify SPIR-V cooperative matrix component type',type='enums']
+--
+Possible values for elink:VkComponentTypeKHR include:
+
+include::{generated}/api/enums/VkComponentTypeKHR.adoc[]
+
+ifdef::VK_NV_cooperative_matrix[]
+or the equivalent
+
+include::{generated}/api/enums/VkComponentTypeNV.adoc[]
+endif::VK_NV_cooperative_matrix[]
+
+  * ename:VK_COMPONENT_TYPE_FLOAT16_KHR corresponds to SPIR-V
+    code:OpTypeFloat 16.
+  * ename:VK_COMPONENT_TYPE_FLOAT32_KHR corresponds to SPIR-V
+    code:OpTypeFloat 32.
+  * ename:VK_COMPONENT_TYPE_FLOAT64_KHR corresponds to SPIR-V
+    code:OpTypeFloat 64.
+  * ename:VK_COMPONENT_TYPE_SINT8_KHR corresponds to SPIR-V code:OpTypeInt 8 1.
+  * ename:VK_COMPONENT_TYPE_SINT16_KHR corresponds to SPIR-V code:OpTypeInt
+    16 1.
+  * ename:VK_COMPONENT_TYPE_SINT32_KHR corresponds to SPIR-V code:OpTypeInt
+    32 1.
+  * ename:VK_COMPONENT_TYPE_SINT64_KHR corresponds to SPIR-V code:OpTypeInt
+    64 1.
+  * ename:VK_COMPONENT_TYPE_UINT8_KHR corresponds to SPIR-V code:OpTypeInt 8 0.
+  * ename:VK_COMPONENT_TYPE_UINT16_KHR corresponds to SPIR-V code:OpTypeInt
+    16 0.
+  * ename:VK_COMPONENT_TYPE_UINT32_KHR corresponds to SPIR-V code:OpTypeInt
+    32 0.
+  * ename:VK_COMPONENT_TYPE_UINT64_KHR corresponds to SPIR-V code:OpTypeInt
+    64 0.
+--
+endif::VK_NV_cooperative_matrix,VK_KHR_cooperative_matrix[]
+
+ifdef::VK_EXT_validation_cache[]
+[[shaders-validation-cache]]
+== Validation Cache
+
+[open,refpage='VkValidationCacheEXT',desc='Opaque handle to a validation cache object',type='handles']
+--
+Validation cache objects allow the result of internal validation to be
+reused, both within a single application run and between multiple runs.
+Reuse within a single run is achieved by passing the same validation cache
+object when creating supported Vulkan objects.
+Reuse across runs of an application is achieved by retrieving validation
+cache contents in one run of an application, saving the contents, and using
+them to preinitialize a validation cache on a subsequent run.
+The contents of the validation cache objects are managed by the validation
+layers.
+Applications can: manage the host memory consumed by a validation cache
+object and control the amount of data retrieved from a validation cache
+object.
+
+Validation cache objects are represented by sname:VkValidationCacheEXT
+handles:
+
+include::{generated}/api/handles/VkValidationCacheEXT.adoc[]
+--
+
+[open,refpage='vkCreateValidationCacheEXT',desc='Creates a new validation cache',type='protos']
+--
+To create validation cache objects, call:
+
+include::{generated}/api/protos/vkCreateValidationCacheEXT.adoc[]
+
+  * pname:device is the logical device that creates the validation cache
+    object.
+  * pname:pCreateInfo is a pointer to a slink:VkValidationCacheCreateInfoEXT
+    structure containing the initial parameters for the validation cache
+    object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pValidationCache is a pointer to a slink:VkValidationCacheEXT
+    handle in which the resulting validation cache object is returned.
+
+[NOTE]
+.Note
+====
+Applications can: track and manage the total host memory size of a
+validation cache object using the pname:pAllocator.
+Applications can: limit the amount of data retrieved from a validation cache
+object in fname:vkGetValidationCacheDataEXT.
+Implementations should: not internally limit the total number of entries
+added to a validation cache object or the total host memory consumed.
+====
+
+Once created, a validation cache can: be passed to the
+fname:vkCreateShaderModule command by adding this object to the
+slink:VkShaderModuleCreateInfo structure's pname:pNext chain.
+If a slink:VkShaderModuleValidationCacheCreateInfoEXT object is included in
+the slink:VkShaderModuleCreateInfo::pname:pNext chain, and its
+pname:validationCache field is not dlink:VK_NULL_HANDLE, the implementation
+will query it for possible reuse opportunities and update it with new
+content.
+The use of the validation cache object in these commands is internally
+synchronized, and the same validation cache object can: be used in multiple
+threads simultaneously.
+
+[NOTE]
+.Note
+====
+Implementations should: make every effort to limit any critical sections to
+the actual accesses to the cache, which is expected to be significantly
+shorter than the duration of the fname:vkCreateShaderModule command.
+====
+
+include::{generated}/validity/protos/vkCreateValidationCacheEXT.adoc[]
+--
+
+[open,refpage='VkValidationCacheCreateInfoEXT',desc='Structure specifying parameters of a newly created validation cache',type='structs']
+--
+The sname:VkValidationCacheCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkValidationCacheCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:initialDataSize is the number of bytes in pname:pInitialData.
+    If pname:initialDataSize is zero, the validation cache will initially be
+    empty.
+  * pname:pInitialData is a pointer to previously retrieved validation cache
+    data.
+    If the validation cache data is incompatible (as defined below) with the
+    device, the validation cache will be initially empty.
+    If pname:initialDataSize is zero, pname:pInitialData is ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534]]
+    If pname:initialDataSize is not `0`, it must: be equal to the size of
+    pname:pInitialData, as returned by fname:vkGetValidationCacheDataEXT
+    when pname:pInitialData was originally retrieved
+  * [[VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535]]
+    If pname:initialDataSize is not `0`, pname:pInitialData must: have been
+    retrieved from a previous call to fname:vkGetValidationCacheDataEXT
+****
+
+include::{generated}/validity/structs/VkValidationCacheCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkValidationCacheCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkValidationCacheCreateFlagsEXT.adoc[]
+
+tname:VkValidationCacheCreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+[open,refpage='vkMergeValidationCachesEXT',desc='Combine the data stores of validation caches',type='protos']
+--
+Validation cache objects can: be merged using the command:
+
+include::{generated}/api/protos/vkMergeValidationCachesEXT.adoc[]
+
+  * pname:device is the logical device that owns the validation cache
+    objects.
+  * pname:dstCache is the handle of the validation cache to merge results
+    into.
+  * pname:srcCacheCount is the length of the pname:pSrcCaches array.
+  * pname:pSrcCaches is a pointer to an array of validation cache handles,
+    which will be merged into pname:dstCache.
+    The previous contents of pname:dstCache are included after the merge.
+
+[NOTE]
+.Note
+====
+The details of the merge operation are implementation-dependent, but
+implementations should: merge the contents of the specified validation
+caches and prune duplicate entries.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkMergeValidationCachesEXT-dstCache-01536]]
+    pname:dstCache must: not appear in the list of source caches
+****
+
+include::{generated}/validity/protos/vkMergeValidationCachesEXT.adoc[]
+--
+
+[open,refpage='vkGetValidationCacheDataEXT',desc='Get the data store from a validation cache',type='protos']
+--
+Data can: be retrieved from a validation cache object using the command:
+
+include::{generated}/api/protos/vkGetValidationCacheDataEXT.adoc[]
+
+  * pname:device is the logical device that owns the validation cache.
+  * pname:validationCache is the validation cache to retrieve data from.
+  * pname:pDataSize is a pointer to a value related to the amount of data in
+    the validation cache, as described below.
+  * pname:pData is either `NULL` or a pointer to a buffer.
+
+If pname:pData is `NULL`, then the maximum size of the data that can: be
+retrieved from the validation cache, in bytes, is returned in
+pname:pDataSize.
+Otherwise, pname:pDataSize must: point to a variable set by the user to the
+size of the buffer, in bytes, pointed to by pname:pData, and on return the
+variable is overwritten with the amount of data actually written to
+pname:pData.
+If pname:pDataSize is less than the maximum size that can: be retrieved by
+the validation cache, at most pname:pDataSize bytes will be written to
+pname:pData, and fname:vkGetValidationCacheDataEXT will return
+ename:VK_INCOMPLETE instead of ename:VK_SUCCESS, to indicate that not all of
+the validation cache was returned.
+
+Any data written to pname:pData is valid and can: be provided as the
+pname:pInitialData member of the slink:VkValidationCacheCreateInfoEXT
+structure passed to fname:vkCreateValidationCacheEXT.
+
+Two calls to fname:vkGetValidationCacheDataEXT with the same parameters
+must: retrieve the same data unless a command that modifies the contents of
+the cache is called between them.
+
+[[validation-cache-header]]
+Applications can: store the data retrieved from the validation cache, and
+use these data, possibly in a future run of the application, to populate new
+validation cache objects.
+The results of validation, however, may: depend on the vendor ID, device ID,
+driver version, and other details of the device.
+To enable applications to detect when previously retrieved data is
+incompatible with the device, the initial bytes written to pname:pData must:
+be a header consisting of the following members:
+
+.Layout for validation cache header version ename:VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
+[width="85%",cols="8%,21%,71%",options="header"]
+|====
+| Offset | Size | Meaning
+| 0 | 4                    | length in bytes of the entire validation cache header
+                             written as a stream of bytes, with the least
+                             significant byte first
+| 4 | 4                    | a elink:VkValidationCacheHeaderVersionEXT value
+                             written as a stream of bytes, with the least
+                             significant byte first
+| 8 | ename:VK_UUID_SIZE   | a layer commit ID expressed as a UUID, which uniquely
+                             identifies the version of the validation layers used
+                             to generate these validation results
+|====
+
+The first four bytes encode the length of the entire validation cache
+header, in bytes.
+This value includes all fields in the header including the validation cache
+version field and the size of the length field.
+
+The next four bytes encode the validation cache version, as described for
+elink:VkValidationCacheHeaderVersionEXT.
+A consumer of the validation cache should: use the cache version to
+interpret the remainder of the cache header.
+
+If pname:pDataSize is less than what is necessary to store this header,
+nothing will be written to pname:pData and zero will be written to
+pname:pDataSize.
+
+include::{generated}/validity/protos/vkGetValidationCacheDataEXT.adoc[]
+--
+
+[open,refpage='VkValidationCacheHeaderVersionEXT',desc='Encode validation cache version',type='enums',xrefs='vkCreateValidationCacheEXT vkGetValidationCacheDataEXT']
+--
+Possible values of the second group of four bytes in the header returned by
+flink:vkGetValidationCacheDataEXT, encoding the validation cache version,
+are:
+
+include::{generated}/api/enums/VkValidationCacheHeaderVersionEXT.adoc[]
+
+  * ename:VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT specifies version one
+    of the validation cache.
+--
+
+[open,refpage='vkDestroyValidationCacheEXT',desc='Destroy a validation cache object',type='protos']
+--
+To destroy a validation cache, call:
+
+include::{generated}/api/protos/vkDestroyValidationCacheEXT.adoc[]
+
+  * pname:device is the logical device that destroys the validation cache
+    object.
+  * pname:validationCache is the handle of the validation cache to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyValidationCacheEXT-validationCache-01537]]
+    If sname:VkAllocationCallbacks were provided when pname:validationCache
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyValidationCacheEXT-validationCache-01538]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:validationCache was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyValidationCacheEXT.adoc[]
+--
+endif::VK_EXT_validation_cache[]
+
+ifdef::VK_NV_cuda_kernel_launch[]
+include::{chapters}/VK_NV_cuda_kernel_launch/module.adoc[]
+endif::VK_NV_cuda_kernel_launch[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/sparsemem.adoc b/codegen/vulkan/vulkan-docs-next/chapters/sparsemem.adoc
new file mode 100644
index 0000000..7ebe0f4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/sparsemem.adoc
@@ -0,0 +1,1932 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[sparsememory]]
+= Sparse Resources
+
+As documented in <<resources-association,Resource Memory Association>>,
+sname:VkBuffer and sname:VkImage resources in Vulkan must: be bound
+completely and contiguously to a single sname:VkDeviceMemory object.
+This binding must: be done before the resource is used, and the binding is
+immutable for the lifetime of the resource.
+
+_Sparse resources_ relax these restrictions and provide these additional
+features:
+
+  * Sparse resources can: be bound non-contiguously to one or more
+    sname:VkDeviceMemory allocations.
+  * Sparse resources can: be re-bound to different memory allocations over
+    the lifetime of the resource.
+  * Sparse resources can: have descriptors generated and used orthogonally
+    with memory binding commands.
+
+ifdef::VKSC_VERSION_1_0[]
+Sparse resources are not supported in Vulkan SC, due to complexity and the
+necessity of being able to update page table mappings at runtime <<SCID-8>>.
+However, the sparse resource features, properties, resource creation flags,
+and definitions have been retained for completeness and compatibility.
+
+All sparse resource <<sparsememory-physicalfeatures,physical device
+features>> must: not be advertised as supported, and the related
+<<sparsememory-physicalprops,physical device sparse properties>> and
+<<limits,physical device limits>> must: be reported accordingly.
+
+ifdef::hidden[]
+// tag::scremoved[]
+  * elink:VkStructureType
+  ** ename:VK_STRUCTURE_TYPE_BIND_SPARSE_INFO <<SCID-8>>
+  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO <<SCID-8>>
+  ** ename:VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+     <<SCID-8>>
+  ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
+     <<SCID-8>>
+  ** ename:VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 <<SCID-8>>
+  ** ename:VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 <<SCID-8>>
+  * sname:VkSparseImageFormatProperties <<SCID-8>>
+  * ename:VkSparseImageFormatFlagBits <<SCID-8>>
+  * tname:VkSparseImageFormatFlags <<SCID-8>>
+  * fname:vkGetPhysicalDeviceSparseImageFormatProperties <<SCID-8>>
+  * fname:vkGetPhysicalDeviceSparseImageFormatProperties2 <<SCID-8>>
+  * sname:VkPhysicalDeviceSparseImageFormatInfo2 <<SCID-8>>
+  * sname:VkSparseImageFormatProperties2 <<SCID-8>>
+  * sname:VkSparseImageMemoryRequirements <<SCID-8>>
+  * fname:vkGetImageSparseMemoryRequirements <<SCID-8>>
+  * fname:vkGetImageSparseMemoryRequirements2 <<SCID-8>>
+  * sname:VkImageSparseMemoryRequirementsInfo2 <<SCID-8>>
+  * sname:VkSparseImageMemoryRequirements2 <<SCID-8>>
+  * sname:VkSparseMemoryBind <<SCID-8>>
+  * ename:VkSparseMemoryBindFlagBits <<SCID-8>>
+  * tname:VkSparseMemoryBindFlags <<SCID-8>>
+  * sname:VkSparseBufferMemoryBindInfo <<SCID-8>>
+  * sname:VkSparseImageOpaqueMemoryBindInfo <<SCID-8>>
+  * sname:VkSparseImageMemoryBindInfo <<SCID-8>>
+  * sname:VkSparseImageMemoryBind <<SCID-8>>
+  * fname:vkQueueBindSparse <<SCID-8>>
+  * sname:VkBindSparseInfo <<SCID-8>>
+  * sname:VkDeviceGroupBindSparseInfo <<SCID-8>>
+// end::scremoved[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+[[sparsememory-sparseresourcefeatures]]
+== Sparse Resource Features
+
+Sparse resources have several features that must: be enabled explicitly at
+resource creation time.
+The features are enabled by including bits in the pname:flags parameter of
+slink:VkImageCreateInfo or slink:VkBufferCreateInfo.
+Each feature also has one or more corresponding feature enables specified in
+slink:VkPhysicalDeviceFeatures.
+
+  * The <<features-sparseBinding, pname:sparseBinding>> feature is the base,
+    and provides the following capabilities:
+
+  ** Resources can: be bound at some defined (sparse block) granularity.
+  ** The entire resource must: be bound to memory before use regardless of
+     regions actually accessed.
+  ** No specific mapping of image region to memory offset is defined, i.e.
+     the location that each texel corresponds to in memory is
+     implementation-dependent.
+  ** Sparse buffers have a well-defined mapping of buffer range to memory
+     range, where an offset into a range of the buffer that is bound to a
+     single contiguous range of memory corresponds to an identical offset
+     within that range of memory.
+  ** Requested via the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT and
+     ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bits.
+  ** A sparse image created using ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+     (but not ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) supports all
+     formats that non-sparse usage supports, and supports both
+     ename:VK_IMAGE_TILING_OPTIMAL and ename:VK_IMAGE_TILING_LINEAR tiling.
+
+  * _Sparse Residency_ builds on (and requires) the pname:sparseBinding
+    feature.
+    It includes the following capabilities:
+
+  ** Resources do not have to be completely bound to memory before use on
+     the device.
+  ** Images have a prescribed sparse image block layout, allowing specific
+     rectangular regions of the image to be bound to specific offsets in
+     memory allocations.
+  ** Consistency of access to unbound regions of the resource is defined by
+     the absence or presence of
+     sname:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict.
+     If this property is present, accesses to unbound regions of the
+     resource are well defined and behave as if the data bound is populated
+     with all zeros; writes are discarded.
+     When this property is absent, accesses are considered safe, but reads
+     will return undefined: values.
+  ** Requested via the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT and
+     ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT bits.
+  ** [[features-sparseResidency]] Sparse residency support is advertised on
+     a finer grain via the following features:
++
+  *** The <<features-sparseResidencyBuffer, pname:sparseResidencyBuffer>>
+      feature provides support for creating sname:VkBuffer objects with the
+      ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidencyImage2D, pname:sparseResidencyImage2D>>
+      feature provides support for creating 2D single-sampled sname:VkImage
+      objects with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidencyImage3D, pname:sparseResidencyImage3D>>
+      feature provides support for creating 3D sname:VkImage objects with
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidency2Samples,
+      pname:sparseResidency2Samples>> feature provides support for creating
+      2D sname:VkImage objects with 2 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidency4Samples,
+      pname:sparseResidency4Samples>> feature provides support for creating
+      2D sname:VkImage objects with 4 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidency8Samples,
+      pname:sparseResidency8Samples>> feature provides support for creating
+      2D sname:VkImage objects with 8 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** The <<features-sparseResidency16Samples,
+      pname:sparseResidency16Samples>> feature provides support for creating
+      2D sname:VkImage objects with 16 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
++
+Implementations supporting pname:sparseResidencyImage2D are only required:
+to support sparse 2D, single-sampled images.
+Support for sparse 3D and MSAA images is optional: and can: be enabled via
+pname:sparseResidencyImage3D, pname:sparseResidency2Samples,
+pname:sparseResidency4Samples, pname:sparseResidency8Samples, and
+pname:sparseResidency16Samples.
+
+  ** A sparse image created using ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+     supports all non-compressed color formats with power-of-two element
+     size that non-sparse usage supports.
+     Additional formats may: also be supported and can: be queried via
+     flink:vkGetPhysicalDeviceSparseImageFormatProperties.
+     ename:VK_IMAGE_TILING_LINEAR tiling is not supported.
+
+  * The <<features-sparseResidencyAliased, pname:sparseResidencyAliased>>
+    feature provides the following capability that can: be enabled per
+    resource:
++
+Allows physical memory ranges to be shared between multiple locations in the
+same sparse resource or between multiple sparse resources, with each binding
+of a memory location observing a consistent interpretation of the memory
+contents.
++
+--
+ifndef::VKSC_VERSION_1_0[]
+See <<sparsememory-sparse-memory-aliasing,Sparse Memory Aliasing>> for more
+information.
+endif::VKSC_VERSION_1_0[]
+--
+
+
+ifndef::VKSC_VERSION_1_0[]
+[[sparsememory-fully-resident]]
+== Sparse Buffers and Fully-Resident Images
+
+Both sname:VkBuffer and sname:VkImage objects created with the
+ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or
+ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bits can: be thought of as a
+linear region of address space.
+In the sname:VkImage case if ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is
+not used, this linear region is entirely opaque, meaning that there is no
+application-visible mapping between texel location and memory offset.
+
+Unless ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
+ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT are also used, the entire
+resource must: be bound to one or more sname:VkDeviceMemory objects before
+use.
+
+
+=== Sparse Buffer and Fully-Resident Image Block Size
+
+The sparse block size in bytes for sparse buffers and fully-resident images
+is reported as sname:VkMemoryRequirements::pname:alignment.
+pname:alignment represents both the memory alignment requirement and the
+binding granularity (in bytes) for sparse resources.
+
+
+[[sparsememory-partially-resident-buffers]]
+== Sparse Partially-Resident Buffers
+
+sname:VkBuffer objects created with the
+ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT bit allow the buffer to be made
+only partially resident.
+Partially resident sname:VkBuffer objects are allocated and bound
+identically to sname:VkBuffer objects using only the
+ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT feature.
+The only difference is the ability for some regions of the buffer to be
+unbound during device use.
+
+
+[[sparsememory-partially-resident-images]]
+== Sparse Partially-Resident Images
+
+sname:VkImage objects created with the
+ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT bit allow specific rectangular
+regions of the image called sparse image blocks to be bound to specific
+ranges of memory.
+This allows the application to manage residency at either image subresource
+or sparse image block granularity.
+Each image subresource (outside of the <<sparsememory-miptail,mip tail>>)
+starts on a sparse block boundary and has dimensions that are integer
+multiples of the corresponding dimensions of the sparse image block.
+
+[NOTE]
+.Note
+====
+Applications can: use these types of images to control LOD based on total
+memory consumption.
+If memory pressure becomes an issue the application can: unbind and disable
+specific mipmap levels of images without having to recreate resources or
+modify texel data of unaffected levels.
+
+The application can: also use this functionality to access subregions of the
+image in a "`megatexture`" fashion.
+The application can: create a large image and only populate the region of
+the image that is currently being used in the scene.
+====
+
+
+[[sparsememory-accessing-unbound]]
+=== Accessing Unbound Regions
+
+The following member of sname:VkPhysicalDeviceSparseProperties affects how
+data in unbound regions of sparse resources are handled by the
+implementation:
+
+  * pname:residencyNonResidentStrict
+
+If this property is not present, reads of unbound regions of the image will
+return undefined: values.
+Both reads and writes are still considered _safe_ and will not affect other
+resources or populated regions of the image.
+
+If this property is present, all reads of unbound regions of the image will
+behave as if the region was bound to memory populated with all zeros; writes
+will be discarded.
+
+<<textures,Image operations>> performed on unbound memory may: still alter
+some component values in the natural way for those accesses, e.g.
+substituting a value of one for alpha in formats that do not have an alpha
+component.
+
+====
+Example: Reading the alpha component of an unbacked ename:VK_FORMAT_R8_UNORM
+image will return a value of [eq]#1.0f#.
+====
+
+See <<devsandqueues-physical-device-enumeration,Physical Device
+Enumeration>> for instructions for retrieving physical device properties.
+
+ifdef::implementation-guide[]
+.Implementor's Note
+****
+For implementations that cannot: natively handle access to unbound regions
+of a resource, the implementation may: allocate and bind memory to the
+unbound regions.
+Reads and writes to unbound regions will access the implementation-managed
+memory instead.
+
+Given that the values resulting from reads of unbound regions are undefined:
+in this scenario, implementations may: use the same physical memory for all
+unbound regions of multiple resources within the same process.
+****
+endif::implementation-guide[]
+
+
+[[sparsememory-miptail]]
+=== Mip Tail Regions
+
+Sparse images created using ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+(without also using ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) have no
+specific mapping of image region or image subresource to memory offset
+defined, so the entire image can: be thought of as a linear opaque address
+region.
+However, images created with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT do
+have a prescribed sparse image block layout, and hence each image
+subresource must: start on a sparse block boundary.
+Within each array layer, the set of mip levels that have a smaller size than
+the sparse block size in bytes are grouped together into a _mip tail
+region_.
+
+If the ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT flag is present in
+the pname:flags member of sname:VkSparseImageFormatProperties, for the
+image's pname:format, then any mip level which has dimensions that are not
+integer multiples of the corresponding dimensions of the sparse image block,
+and all subsequent mip levels, are also included in the mip tail region.
+
+The following member of sname:VkPhysicalDeviceSparseProperties may: affect
+how the implementation places mip levels in the mip tail region:
+
+  * pname:residencyAlignedMipSize
+
+Each mip tail region is bound to memory as an opaque region (i.e. must: be
+bound using a slink:VkSparseImageOpaqueMemoryBindInfo structure) and may: be
+of a size greater than or equal to the sparse block size in bytes.
+This size is guaranteed to be an integer multiple of the sparse block size
+in bytes.
+
+An implementation may: choose to allow each array-layer's mip tail region to
+be bound to memory independently or require that all array-layer's mip tail
+regions be treated as one.
+This is dictated by ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT in
+sname:VkSparseImageMemoryRequirements::pname:flags.
+
+The following diagrams depict how
+ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT alter memory usage and
+requirements.
+
+image::{images}/sparseimage.svg[align="center",title="Sparse Image",opts="{imageopts}"]
+
+In the absence of ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, each array layer contains a
+mip tail region containing texel data for all mip levels smaller than the
+sparse image block in any dimension.
+
+Mip levels that are as large or larger than a sparse image block in all
+dimensions can: be bound individually.
+Right-edges and bottom-edges of each level are allowed to have partially
+used sparse blocks.
+Any bound partially-used-sparse-blocks must: still have their full sparse
+block size in bytes allocated in memory.
+
+image::{images}/sparseimage_singlemiptail.svg[align="center",title="Sparse Image with Single Mip Tail",opts="{imageopts}"]
+
+When ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT is present all array
+layers will share a single mip tail region.
+
+image::{images}/sparseimage_alignedmipsize.svg[align="center",title="Sparse Image with Aligned Mip Size",opts="{imageopts}"]
+
+[NOTE]
+.Note
+====
+The mip tail regions are presented here in 2D arrays simply for figure size
+reasons.
+Each mip tail is logically a single array of sparse blocks with an
+implementation-dependent mapping of texels or compressed texel blocks to
+sparse blocks.
+====
+
+When ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is present the first
+mip level that would contain partially used sparse blocks begins the mip
+tail region.
+This level and all subsequent levels are placed in the mip tail.
+Only the first [eq]#N# mip levels whose dimensions are an exact multiple of
+the sparse image block dimensions can: be bound and unbound on a sparse
+block basis.
+
+image::{images}/sparseimage_alignedmipsize_singlemiptail.svg[align="center",title="Sparse Image with Aligned Mip Size and Single Mip Tail",opts="{imageopts}"]
+
+[NOTE]
+.Note
+====
+The mip tail region is presented here in a 2D array simply for figure size
+reasons.
+It is logically a single array of sparse blocks with an
+implementation-dependent mapping of texels or compressed texel blocks to
+sparse blocks.
+====
+
+When both ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT are present the constraints
+from each of these flags are in effect.
+
+
+[[sparsememory-standard-shapes]]
+=== Standard Sparse Image Block Shapes
+
+Standard sparse image block shapes define a standard set of dimensions for
+sparse image blocks that depend on the format of the image.
+Layout of texels or compressed texel blocks within a sparse image block is
+implementation-dependent.
+All currently defined standard sparse image block shapes are 64 KB in size.
+
+For block-compressed formats (e.g. ename:VK_FORMAT_BC5_UNORM_BLOCK), the
+texel size is the size of the compressed texel block (e.g. 128-bit for
+etext:BC5) thus the dimensions of the standard sparse image block shapes
+apply in terms of compressed texel blocks.
+
+[NOTE]
+.Note
+====
+For block-compressed formats, the dimensions of a sparse image block in
+terms of texels can: be calculated by multiplying the sparse image block
+dimensions by the compressed texel block dimensions.
+====
+
+<<<
+
+[[sparsememory-sparseblockshapessingle]]
+.Standard Sparse Image Block Shapes (Single Sample)
+[options="header"]
+|====
+| TEXEL SIZE (bits) | Block Shape (2D)              | Block Shape (3D)
+| *8-Bit*           | 256 {times} 256 {times} 1     | 64 {times} 32 {times} 32
+| *16-Bit*          | 256 {times} 128 {times} 1     | 32 {times} 32 {times} 32
+| *32-Bit*          | 128 {times} 128 {times} 1     | 32 {times} 32 {times} 16
+| *64-Bit*          | 128 {times} 64 {times} 1      | 32 {times} 16 {times} 16
+| *128-Bit*         | 64 {times} 64 {times} 1       | 16 {times} 16 {times} 16
+|====
+
+[[sparsememory-sparseblockshapesmsaa]]
+.Standard Sparse Image Block Shapes (MSAA)
+[options="header"]
+|====
+| TEXEL SIZE (bits)| Block Shape (2X)            | Block Shape (4X)             | Block Shape (8X)             | Block Shape (16X)
+| *8-Bit*          | 128 {times} 256 {times} 1   | 128 {times} 128 {times} 1    | 64 {times} 128 {times} 1     | 64 {times} 64 {times} 1
+| *16-Bit*         | 128 {times} 128 {times} 1   | 128 {times} 64 {times} 1     | 64 {times} 64 {times} 1      | 64 {times} 32 {times} 1
+| *32-Bit*         | 64 {times} 128 {times} 1    | 64 {times} 64 {times} 1      | 32 {times} 64 {times} 1      | 32 {times} 32 {times} 1
+| *64-Bit*         | 64 {times} 64 {times} 1     | 64 {times} 32 {times} 1      | 32 {times} 32 {times} 1      | 32 {times} 16 {times} 1
+| *128-Bit*        | 32 {times} 64 {times} 1     | 32 {times} 32 {times} 1      | 16 {times} 32 {times} 1      | 16 {times} 16 {times} 1
+|====
+
+
+Implementations that support the standard sparse image block shape for all
+formats listed in the <<sparsememory-sparseblockshapessingle>> and
+<<sparsememory-sparseblockshapesmsaa>> tables may: advertise the following
+sname:VkPhysicalDeviceSparseProperties:
+
+  * pname:residencyStandard2DBlockShape
+  * pname:residencyStandard2DMultisampleBlockShape
+  * pname:residencyStandard3DBlockShape
+
+Reporting each of these features does _not_ imply that all possible image
+types are supported as sparse.
+Instead, this indicates that no supported sparse image of the corresponding
+type will use custom sparse image block dimensions for any formats that have
+a corresponding standard sparse image block shape.
+
+
+[[sparsememory-custom-shapes]]
+=== Custom Sparse Image Block Shapes
+
+An implementation that does not support a standard image block shape for a
+particular sparse partially-resident image may: choose to support a custom
+sparse image block shape for it instead.
+The dimensions of such a custom sparse image block shape are reported in
+sname:VkSparseImageFormatProperties::pname:imageGranularity.
+As with standard sparse image block shapes, the size in bytes of the custom
+sparse image block shape will be reported in
+sname:VkMemoryRequirements::pname:alignment.
+
+Custom sparse image block dimensions are reported through
+fname:vkGetPhysicalDeviceSparseImageFormatProperties and
+fname:vkGetImageSparseMemoryRequirements.
+
+An implementation must: not support both the standard sparse image block
+shape and a custom sparse image block shape for the same image.
+The standard sparse image block shape must: be used if it is supported.
+
+
+[[sparsememory-multiaspect]]
+=== Multiple Aspects
+
+Partially resident images are allowed to report separate sparse properties
+for different aspects of the image.
+One example is for depth/stencil images where the implementation separates
+the depth and stencil data into separate planes.
+Another reason for multiple aspects is to allow the application to manage
+memory allocation for implementation-private _metadata_ associated with the
+image.
+See the figure below:
+
+image::{images}/sparseimage_multiaspect.svg[align="center",title="Multiple Aspect Sparse Image",opts="{imageopts}"]
+
+[NOTE]
+.Note
+====
+The mip tail regions are presented here in 2D arrays simply for figure size
+reasons.
+Each mip tail is logically a single array of sparse blocks with an
+implementation-dependent mapping of texels or compressed texel blocks to
+sparse blocks.
+====
+
+In the figure above the depth, stencil, and metadata aspects all have unique
+sparse properties.
+The per-texel stencil data is [eq]#{onequarter}# the size of the depth data,
+hence the stencil sparse blocks include [eq]#4 {times}# the number of
+texels.
+The sparse block size in bytes for all of the aspects is identical and
+defined by sname:VkMemoryRequirements::pname:alignment.
+
+
+==== Metadata
+
+The metadata aspect of an image has the following constraints:
+
+  * All metadata is reported in the mip tail region of the metadata aspect.
+  * All metadata must: be bound prior to device use of the sparse image.
+
+
+[[sparsememory-sparse-memory-aliasing]]
+== Sparse Memory Aliasing
+
+By default sparse resources have the same aliasing rules as non-sparse
+resources.
+See <<resources-memory-aliasing,Memory Aliasing>> for more information.
+
+sname:VkDevice objects that have the <<features-sparseResidencyAliased,
+pname:sparseResidencyAliased>> feature enabled are able to use the
+ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
+ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flags for resource creation.
+These flags allow resources to access physical memory bound into multiple
+locations within one or more sparse resources in a _data consistent_
+fashion.
+This means that reading physical memory from multiple aliased locations will
+return the same value.
+
+Care must: be taken when performing a write operation to aliased physical
+memory.
+Memory dependencies must: be used to separate writes to one alias from reads
+or writes to another alias.
+Writes to aliased memory that are not properly guarded against accesses to
+different aliases will have undefined: results for all accesses to the
+aliased memory.
+
+Applications that wish to make use of data consistent sparse memory aliasing
+must: abide by the following guidelines:
+
+  * All sparse resources that are bound to aliased physical memory must: be
+    created with the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT /
+    ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flag.
+  * All resources that access aliased physical memory must: interpret the
+    memory in the same way.
+    This implies the following:
+  ** Buffers and images cannot: alias the same physical memory in a data
+     consistent fashion.
+     The physical memory ranges must: be used exclusively by buffers or used
+     exclusively by images for data consistency to be guaranteed.
+  ** Memory in sparse image mip tail regions cannot: access aliased memory
+     in a data consistent fashion.
+  ** Sparse images that alias the same physical memory must: have compatible
+     formats and be using the same sparse image block shape in order to
+     access aliased memory in a data consistent fashion.
+
+Failure to follow any of the above guidelines will require the application
+to abide by the normal, non-sparse resource <<resources-memory-aliasing,
+aliasing rules>>.
+In this case memory cannot: be accessed in a data consistent fashion.
+
+[NOTE]
+.Note
+====
+Enabling sparse resource memory aliasing can: be a way to lower physical
+memory use, but it may: reduce performance on some implementations.
+An application developer can: test on their target HW and balance the memory
+/ performance trade-offs measured.
+====
+
+
+ifdef::implementation-guide[]
+== Sparse Resource Implementation Guidelines (Informative)
+
+****
+This section is Informative.
+It is included to aid in implementors`' understanding of sparse resources.
+
+.Device Virtual Address
+
+The basic pname:sparseBinding feature allows the resource to reserve its own
+device virtual address range at resource creation time rather than relying
+on a bind operation to set this.
+Without any other creation flags, no other constraints are relaxed compared
+to normal resources.
+All pages must: be bound to physical memory before the device accesses the
+resource.
+
+The <<features-sparseResidency, pname:sparseResidency>> features allow
+sparse resources to be used even when not all pages are bound to memory.
+Implementations that support access to unbound pages without causing a fault
+may: support pname:residencyNonResidentStrict.
+
+Not faulting on access to unbound pages is not enough to support
+pname:residencyNonResidentStrict.
+An implementation must: also guarantee that reads after writes to unbound
+regions of the resource always return data for the read as if the memory
+contains zeros.
+Depending on any caching hierarchy of the implementation this may: not
+always be possible.
+
+Any implementation that does not fault, but does not guarantee correct read
+values must: not support pname:residencyNonResidentStrict.
+
+Any implementation that cannot: access unbound pages without causing a fault
+will require the implementation to bind the entire device virtual address
+range to physical memory.
+Any pages that the application does not bind to memory may: be bound to one
+(or more) "`placeholder" physical page(s) allocated by the implementation.
+Given the following properties:
+
+  * A process must: not access memory from another process
+  * Reads return undefined: values
+
+It is sufficient for each host process to allocate these placeholder pages
+and use them for all resources in that process.
+Implementations may: allocate more often (per instance, per device, or per
+resource).
+
+
+.Binding Memory
+
+The byte size reported in sname:VkMemoryRequirements::pname:size must: be
+greater than or equal to the amount of physical memory required: to fully
+populate the resource.
+Some implementations require "`holes`" in the device virtual address range
+that are never accessed.
+These holes may: be included in the pname:size reported for the resource.
+
+Including or not including the device virtual address holes in the resource
+size will alter how the implementation provides support for
+sname:VkSparseImageOpaqueMemoryBindInfo.
+This operation must: be supported for all sparse images, even ones created
+with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+@ntrevett suggested expanding the NOTE tag below to encompass everything
+from "`The cost is...`" in the first bullet point through the current note.
+TBD.
+====
+endif::editing-notes[]
+
+  * If the holes are included in the size, this bind function becomes very
+    easy.
+    In most cases the pname:resourceOffset is simply a device virtual
+    address offset and the implementation can easily determine what device
+    virtual address to bind.
+    The cost is that the application may: allocate more physical memory for
+    the resource than it needs.
+  * If the holes are not included in the size, the application can: allocate
+    less physical memory than otherwise for the resource.
+    However, in this case the implementation must: account for the holes
+    when mapping pname:resourceOffset to the actual device virtual address
+    intended to be mapped.
+
+[NOTE]
+.Note
+====
+If the application always uses sname:VkSparseImageMemoryBindInfo to bind
+memory for the non-tail mip levels, any holes that are present in the
+resource size may: never be bound.
+
+Since sname:VkSparseImageMemoryBindInfo uses texel locations to determine
+which device virtual addresses to bind, it is impossible to bind device
+virtual address holes with this operation.
+====
+
+.Binding Metadata Memory
+
+All metadata for sparse images have their own sparse properties and are
+embedded in the mip tail region for said properties.
+See the <<sparsememory-multiaspect,Multiaspect>> section for details.
+
+Given that metadata is in a mip tail region, and the mip tail region must:
+be reported as contiguous (either globally or per-array-layer), some
+implementations will have to resort to complicated offset -> device virtual
+address mapping for handling sname:VkSparseImageOpaqueMemoryBindInfo.
+
+To make this easier on the implementation, the
+ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT explicitly specifies when metadata
+is bound with sname:VkSparseImageOpaqueMemoryBindInfo.
+When this flag is not present, the pname:resourceOffset may: be treated as a
+strict device virtual address offset.
+
+When ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT is present, the
+pname:resourceOffset must: have been derived explicitly from the
+pname:imageMipTailOffset in the sparse resource properties returned for the
+metadata aspect.
+By manipulating the value returned for pname:imageMipTailOffset, the
+pname:resourceOffset does not have to correlate directly to a device virtual
+address offset, and may: instead be whatever value makes it easiest for the
+implementation to derive the correct device virtual address.
+
+****
+endif::implementation-guide[]
+endif::VKSC_VERSION_1_0[]
+
+[[sparsememory-resourceapi]]
+== Sparse Resource API
+
+The APIs related to sparse resources are grouped into the following
+categories:
+
+  * <<sparsememory-physicalfeatures,Physical Device Features>>
+  * <<sparsememory-physicalprops,Physical Device Sparse Properties>>
+ifndef::VKSC_VERSION_1_0[]
+  * <<sparsememory-format-props,Sparse Image Format Properties>>
+  * <<sparsememory-resource-creation,Sparse Resource Creation>>
+  * <<sparsememory-memory-requirements,Sparse Resource Memory Requirements>>
+  * <<sparsememory-resource-binding,Binding Resource Memory>>
+endif::VKSC_VERSION_1_0[]
+
+
+[[sparsememory-physicalfeatures]]
+=== Physical Device Features
+
+Some sparse-resource related features are reported and enabled in
+sname:VkPhysicalDeviceFeatures.
+These features must: be supported and enabled on the sname:VkDevice object
+before applications can: use them.
+See <<features, Physical Device Features>> for information on how to get and
+set enabled device features, and for more detailed explanations of these
+features.
+
+
+==== Sparse Physical Device Features
+
+  * pname:sparseBinding: Support for creating slink:VkBuffer and
+    sname:VkImage objects with the ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
+    and ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flags, respectively.
+  * pname:sparseResidencyBuffer: Support for creating slink:VkBuffer objects
+    with the ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag.
+  * pname:sparseResidencyImage2D: Support for creating 2D single-sampled
+    sname:VkImage objects with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidencyImage3D: Support for creating 3D slink:VkImage
+    objects with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidency2Samples: Support for creating 2D slink:VkImage
+    objects with 2 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidency4Samples: Support for creating 2D slink:VkImage
+    objects with 4 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidency8Samples: Support for creating 2D slink:VkImage
+    objects with 8 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidency16Samples: Support for creating 2D slink:VkImage
+    objects with 16 samples and ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  * pname:sparseResidencyAliased: Support for creating slink:VkBuffer and
+    sname:VkImage objects with the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+    and ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flags, respectively.
+
+
+[[sparsememory-physicalprops]]
+=== Physical Device Sparse Properties
+
+Some features of the implementation are not possible to disable, and are
+reported to allow applications to alter their sparse resource usage
+accordingly.
+These read-only capabilities are reported in the
+slink:VkPhysicalDeviceProperties::pname:sparseProperties member, which is a
+sname:VkPhysicalDeviceSparseProperties structure.
+
+[open,refpage='VkPhysicalDeviceSparseProperties',desc='Structure specifying physical device sparse memory properties',type='structs']
+--
+The sname:VkPhysicalDeviceSparseProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSparseProperties.adoc[]
+
+  * pname:residencyStandard2DBlockShape
+ifndef::VKSC_VERSION_1_0[]
+    is ename:VK_TRUE if the physical device will access all single-sample 2D
+    sparse resources using the standard sparse image block shapes (based on
+    image format), as described in the
+    <<sparsememory-sparseblockshapessingle, Standard Sparse Image Block
+    Shapes (Single Sample)>> table.
+    If this property is not supported the value returned in the
+    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
+    structure for single-sample 2D images is not required: to match the
+    standard sparse image block dimensions listed in the table.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * pname:residencyStandard2DMultisampleBlockShape
+ifndef::VKSC_VERSION_1_0[]
+    is ename:VK_TRUE if the physical device will access all multisample 2D
+    sparse resources using the standard sparse image block shapes (based on
+    image format), as described in the
+    <<sparsememory-sparseblockshapesmsaa,Standard Sparse Image Block Shapes
+    (MSAA)>> table.
+    If this property is not supported, the value returned in the
+    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
+    structure for multisample 2D images is not required: to match the
+    standard sparse image block dimensions listed in the table.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * pname:residencyStandard3DBlockShape
+ifndef::VKSC_VERSION_1_0[]
+    is ename:VK_TRUE if the physical device will access all 3D sparse
+    resources using the standard sparse image block shapes (based on image
+    format), as described in the
+    <<sparsememory-sparseblockshapessingle,Standard Sparse Image Block
+    Shapes (Single Sample)>> table.
+    If this property is not supported, the value returned in the
+    pname:imageGranularity member of the sname:VkSparseImageFormatProperties
+    structure for 3D images is not required: to match the standard sparse
+    image block dimensions listed in the table.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * pname:residencyAlignedMipSize
+ifndef::VKSC_VERSION_1_0[]
+    is ename:VK_TRUE if images with mip level dimensions that are not
+    integer multiples of the corresponding dimensions of the sparse image
+    block may: be placed in the mip tail.
+    If this property is not reported, only mip levels with dimensions
+    smaller than the pname:imageGranularity member of the
+    sname:VkSparseImageFormatProperties structure will be placed in the mip
+    tail.
+    If this property is reported the implementation is allowed to return
+    ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT in the pname:flags
+    member of sname:VkSparseImageFormatProperties, indicating that mip level
+    dimensions that are not integer multiples of the corresponding
+    dimensions of the sparse image block will be placed in the mip tail.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.]
+  * pname:residencyNonResidentStrict
+ifndef::VKSC_VERSION_1_0[]
+    specifies whether the physical device can: consistently access
+    non-resident regions of a resource.
+    If this property is ename:VK_TRUE, access to non-resident regions of
+    resources will be guaranteed to return values as if the resource was
+    populated with 0; writes to non-resident regions will be discarded.
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+    must: be ename:VK_FALSE in Vulkan SC <<SCID-8>>.
+ifdef::hidden[]
+// tag::scdeviation[]
+  * slink:VkPhysicalDeviceSparseProperties::pname:residencyStandard2DBlockShape
+    must: be reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceSparseProperties::pname:residencyStandard2DMultisampleBlockShape
+    must: be reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceSparseProperties::pname:residencyStandard3DBlockShape
+    must: be reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceSparseProperties::pname:residencyAlignedMipSize
+    must: be reported as ename:VK_FALSE <<SCID-8>>.
+  * slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
+    must: be reported as ename:VK_FALSE <<SCID-8>>.
+// end::scdeviation[]
+endif::hidden[]
+endif::VKSC_VERSION_1_0[]
+
+
+include::{generated}/validity/structs/VkPhysicalDeviceSparseProperties.adoc[]
+--
+
+ifndef::VKSC_VERSION_1_0[]
+
+[[sparsememory-format-props]]
+=== Sparse Image Format Properties
+
+Given that certain aspects of sparse image support, including the sparse
+image block dimensions, may: be implementation-dependent,
+flink:vkGetPhysicalDeviceSparseImageFormatProperties can: be used to query
+for sparse image format properties prior to resource creation.
+This command is used to check whether a given set of sparse image parameters
+is supported and what the sparse image block shape will be.
+
+
+==== Sparse Image Format Properties API
+
+[open,refpage='VkSparseImageFormatProperties',desc='Structure specifying sparse image format properties',type='structs']
+--
+The sname:VkSparseImageFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageFormatProperties.adoc[]
+
+  * pname:aspectMask is a bitmask elink:VkImageAspectFlagBits specifying
+    which aspects of the image the properties apply to.
+  * pname:imageGranularity is the width, height, and depth of the sparse
+    image block in texels or compressed texel blocks.
+  * pname:flags is a bitmask of elink:VkSparseImageFormatFlagBits specifying
+    additional information about the sparse resource.
+
+include::{generated}/validity/structs/VkSparseImageFormatProperties.adoc[]
+--
+
+[open,refpage='VkSparseImageFormatFlagBits',desc='Bitmask specifying additional information about a sparse image resource',type='enums']
+--
+Bits which may: be set in slink:VkSparseImageFormatProperties::pname:flags,
+specifying additional information about the sparse resource, are:
+
+include::{generated}/api/enums/VkSparseImageFormatFlagBits.adoc[]
+
+  * ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT specifies that the image
+    uses a single mip tail region for all array layers.
+  * ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT specifies that the
+    first mip level whose dimensions are not integer multiples of the
+    corresponding dimensions of the sparse image block begins the mip tail
+    region.
+  * ename:VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT specifies that
+    the image uses non-standard sparse image block dimensions, and the
+    pname:imageGranularity values do not match the standard sparse image
+    block dimensions for the given format.
+--
+
+[open,refpage='VkSparseImageFormatFlags',desc='Bitmask of VkSparseImageFormatFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSparseImageFormatFlags.adoc[]
+
+tname:VkSparseImageFormatFlags is a bitmask type for setting a mask of zero
+or more elink:VkSparseImageFormatFlagBits.
+--
+
+[open,refpage='vkGetPhysicalDeviceSparseImageFormatProperties',desc='Retrieve properties of an image format applied to sparse images',type='protos']
+--
+fname:vkGetPhysicalDeviceSparseImageFormatProperties returns an array of
+slink:VkSparseImageFormatProperties.
+Each element will describe properties for one set of image aspects that are
+bound simultaneously in the image.
+This is usually one element for each aspect in the image, but for
+interleaved depth/stencil images there is only one element describing the
+combined aspects.
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    sparse image format properties.
+  * pname:format is the image format.
+  * pname:type is the dimensionality of image.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    number of samples per texel.
+  * pname:usage is a bitmask describing the intended usage of the image.
+  * pname:tiling is the tiling arrangement of the texel blocks in memory.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    sparse format properties available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkSparseImageFormatProperties structures.
+
+If pname:pProperties is `NULL`, then the number of sparse format properties
+available is returned in pname:pPropertyCount.
+Otherwise, pname:pPropertyCount must: point to a variable set by the user to
+the number of elements in the pname:pProperties array, and on return the
+variable is overwritten with the number of structures actually written to
+pname:pProperties.
+If pname:pPropertyCount is less than the number of sparse format properties
+available, at most pname:pPropertyCount structures will be written.
+
+If ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is not supported for the given
+arguments, pname:pPropertyCount will be set to zero upon return, and no data
+will be written to pname:pProperties.
+
+Multiple aspects are returned for depth/stencil images that are implemented
+as separate planes by the implementation.
+The depth and stencil data planes each have unique
+sname:VkSparseImageFormatProperties data.
+
+Depth/stencil images with depth and stencil data interleaved into a single
+plane will return a single sname:VkSparseImageFormatProperties structure
+with the pname:aspectMask set to ename:VK_IMAGE_ASPECT_DEPTH_BIT |
+ename:VK_IMAGE_ASPECT_STENCIL_BIT.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094]]
+    pname:samples must: be a bit value that is set in
+    sname:VkImageFormatProperties::pname:sampleCounts returned by
+    fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
+    pname:type, pname:tiling, and pname:usage equal to those in this command
+    and pname:flags equal to the value that is set in
+    slink:VkImageCreateInfo::pname:flags when the image is created
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+[open,refpage='vkGetPhysicalDeviceSparseImageFormatProperties2',desc='Retrieve properties of an image format applied to sparse images',type='protos']
+--
+fname:vkGetPhysicalDeviceSparseImageFormatProperties2 returns an array of
+slink:VkSparseImageFormatProperties2.
+Each element will describe properties for one set of image aspects that are
+bound simultaneously in the image.
+This is usually one element for each aspect in the image, but for
+interleaved depth/stencil images there is only one element describing the
+combined aspects.
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+include::{generated}/api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    sparse image format properties.
+  * pname:pFormatInfo is a pointer to a
+    slink:VkPhysicalDeviceSparseImageFormatInfo2 structure containing input
+    parameters to the command.
+  * pname:pPropertyCount is a pointer to an integer related to the number of
+    sparse format properties available or queried, as described below.
+  * pname:pProperties is either `NULL` or a pointer to an array of
+    slink:VkSparseImageFormatProperties2 structures.
+
+fname:vkGetPhysicalDeviceSparseImageFormatProperties2 behaves identically to
+flink:vkGetPhysicalDeviceSparseImageFormatProperties, with the ability to
+return extended information by adding extending structures to the
+pname:pNext chain of its pname:pProperties parameter.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties2.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceSparseImageFormatInfo2',desc='Structure specifying sparse image format inputs',type='structs']
+--
+The sname:VkPhysicalDeviceSparseImageFormatInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is the image format.
+  * pname:type is the dimensionality of image.
+  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
+    number of samples per texel.
+  * pname:usage is a bitmask describing the intended usage of the image.
+  * pname:tiling is the tiling arrangement of the texel blocks in memory.
+
+.Valid Usage
+****
+  * [[VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095]]
+    pname:samples must: be a bit value that is set in
+    sname:VkImageFormatProperties::pname:sampleCounts returned by
+    fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
+    pname:type, pname:tiling, and pname:usage equal to those in this command
+    and pname:flags equal to the value that is set in
+    slink:VkImageCreateInfo::pname:flags when the image is created
+****
+
+include::{generated}/validity/structs/VkPhysicalDeviceSparseImageFormatInfo2.adoc[]
+--
+
+[open,refpage='VkSparseImageFormatProperties2',desc='Structure specifying sparse image format properties',type='structs']
+--
+The sname:VkSparseImageFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageFormatProperties2.adoc[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSparseImageFormatProperties2KHR.adoc[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:properties is a slink:VkSparseImageFormatProperties structure
+    which is populated with the same values as in
+    flink:vkGetPhysicalDeviceSparseImageFormatProperties.
+
+include::{generated}/validity/structs/VkSparseImageFormatProperties2.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+
+[[sparsememory-resource-creation]]
+=== Sparse Resource Creation
+
+Sparse resources require that one or more sparse feature flags be specified
+(as part of the sname:VkPhysicalDeviceFeatures structure described
+previously in the <<sparsememory-physicalfeatures,Physical Device Features>>
+section) when calling flink:vkCreateDevice.
+When the appropriate device features are enabled, the
+etext:VK_BUFFER_CREATE_SPARSE_* and etext:VK_IMAGE_CREATE_SPARSE_* flags
+can: be used.
+See flink:vkCreateBuffer and flink:vkCreateImage for details of the resource
+creation APIs.
+
+[NOTE]
+.Note
+====
+Specifying ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
+ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT requires specifying
+ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT or
+ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, respectively, as well.
+This means that resources must: be created with the appropriate
+etext:*_SPARSE_BINDING_BIT to be used with the sparse binding command
+(fname:vkQueueBindSparse).
+====
+
+
+[[sparsememory-memory-requirements]]
+=== Sparse Resource Memory Requirements
+
+Sparse resources have specific memory requirements related to binding sparse
+memory.
+These memory requirements are reported differently for sname:VkBuffer
+objects and sname:VkImage objects.
+
+
+[[sparsememory-memory-buffer-fully-resident]]
+==== Buffer and Fully-Resident Images
+
+Buffers (both fully and partially resident) and fully-resident images can:
+be bound to memory using only the data from sname:VkMemoryRequirements.
+For all sparse resources the sname:VkMemoryRequirements::pname:alignment
+member specifies both the bindable sparse block size in bytes and required:
+alignment of sname:VkDeviceMemory.
+
+
+[[sparsememory-memory-partially-resident]]
+==== Partially Resident Images
+
+Partially resident images have a different method for binding memory.
+As with buffers and fully resident images, the
+sname:VkMemoryRequirements::pname:alignment field specifies the bindable
+sparse block size in bytes for the image.
+
+Requesting sparse memory requirements for sname:VkImage objects using
+fname:vkGetImageSparseMemoryRequirements will return an array of one or more
+sname:VkSparseImageMemoryRequirements structures.
+Each structure describes the sparse memory requirements for a group of
+aspects of the image.
+
+The sparse image must: have been created using the
+ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag to retrieve valid sparse
+image memory requirements.
+
+
+==== Sparse Image Memory Requirements
+
+[open,refpage='VkSparseImageMemoryRequirements',desc='Structure specifying sparse image memory requirements',type='structs']
+--
+The sname:VkSparseImageMemoryRequirements structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageMemoryRequirements.adoc[]
+
+  * pname:formatProperties is a slink:VkSparseImageFormatProperties
+    structure specifying properties of the image format.
+  * pname:imageMipTailFirstLod is the first mip level at which image
+    subresources are included in the mip tail region.
+  * pname:imageMipTailSize is the memory size (in bytes) of the mip tail
+    region.
+    If pname:formatProperties.flags contains
+    ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, this is the size of the
+    whole mip tail, otherwise this is the size of the mip tail of a single
+    array layer.
+    This value is guaranteed to be a multiple of the sparse block size in
+    bytes.
+  * pname:imageMipTailOffset is the opaque memory offset used with
+    slink:VkSparseImageOpaqueMemoryBindInfo to bind the mip tail region(s).
+  * pname:imageMipTailStride is the offset stride between each array-layer's
+    mip tail, if pname:formatProperties.flags does not contain
+    ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT (otherwise the value is
+    undefined:).
+
+include::{generated}/validity/structs/VkSparseImageMemoryRequirements.adoc[]
+--
+
+[open,refpage='vkGetImageSparseMemoryRequirements',desc='Query the memory requirements for a sparse image',type='protos']
+--
+To query sparse memory requirements for an image, call:
+
+include::{generated}/api/protos/vkGetImageSparseMemoryRequirements.adoc[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:image is the slink:VkImage object to get the memory requirements
+    for.
+  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
+    to the number of sparse memory requirements available or queried, as
+    described below.
+  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
+    array of sname:VkSparseImageMemoryRequirements structures.
+
+If pname:pSparseMemoryRequirements is `NULL`, then the number of sparse
+memory requirements available is returned in
+pname:pSparseMemoryRequirementCount.
+Otherwise, pname:pSparseMemoryRequirementCount must: point to a variable set
+by the user to the number of elements in the pname:pSparseMemoryRequirements
+array, and on return the variable is overwritten with the number of
+structures actually written to pname:pSparseMemoryRequirements.
+If pname:pSparseMemoryRequirementCount is less than the number of sparse
+memory requirements available, at most pname:pSparseMemoryRequirementCount
+structures will be written.
+
+If the image was not created with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+then pname:pSparseMemoryRequirementCount will be set to zero and
+pname:pSparseMemoryRequirements will not be written to.
+
+[NOTE]
+.Note
+====
+It is legal for an implementation to report a larger value in
+sname:VkMemoryRequirements::pname:size than would be obtained by adding
+together memory sizes for all sname:VkSparseImageMemoryRequirements returned
+by fname:vkGetImageSparseMemoryRequirements.
+This may: occur when the implementation requires unused padding in the
+address range describing the resource.
+====
+
+include::{generated}/validity/protos/vkGetImageSparseMemoryRequirements.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
+[open,refpage='vkGetImageSparseMemoryRequirements2',desc='Query the memory requirements for a sparse image',type='protos']
+--
+To query sparse memory requirements for an image, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetImageSparseMemoryRequirements2.adoc[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_VERSION_1_1+VK_KHR_get_memory_requirements2[or the equivalent command]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+include::{generated}/api/protos/vkGetImageSparseMemoryRequirements2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:device is the logical device that owns the image.
+  * pname:pInfo is a pointer to a sname:VkImageSparseMemoryRequirementsInfo2
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
+    to the number of sparse memory requirements available or queried, as
+    described below.
+  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
+    array of sname:VkSparseImageMemoryRequirements2 structures.
+
+include::{generated}/validity/protos/vkGetImageSparseMemoryRequirements2.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceImageSparseMemoryRequirements',desc='Query the memory requirements for a sparse image',type='protos',alias='vkGetDeviceImageSparseMemoryRequirementsKHR']
+--
+To determine the sparse memory requirements for an image resource without
+creating an object, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkGetDeviceImageSparseMemoryRequirements.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_maintenance4[or the equivalent command]
+
+ifdef::VK_KHR_maintenance4[]
+include::{generated}/api/protos/vkGetDeviceImageSparseMemoryRequirementsKHR.adoc[]
+endif::VK_KHR_maintenance4[]
+
+  * pname:device is the logical device intended to own the image.
+  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirements
+    structure containing parameters required for the memory requirements
+    query.
+  * pname:pSparseMemoryRequirementCount is a pointer to an integer related
+    to the number of sparse memory requirements available or queried, as
+    described below.
+  * pname:pSparseMemoryRequirements is either `NULL` or a pointer to an
+    array of sname:VkSparseImageMemoryRequirements2 structures.
+
+include::{generated}/validity/protos/vkGetDeviceImageSparseMemoryRequirements.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
+
+[open,refpage='VkImageSparseMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkImageSparseMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2.adoc[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is the image to query.
+
+include::{generated}/validity/structs/VkImageSparseMemoryRequirementsInfo2.adoc[]
+--
+
+[open,refpage='VkSparseImageMemoryRequirements2',desc='(None)',type='structs']
+--
+The sname:VkSparseImageMemoryRequirements2 structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageMemoryRequirements2.adoc[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSparseImageMemoryRequirements2KHR.adoc[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryRequirements is a slink:VkSparseImageMemoryRequirements
+    structure describing the memory requirements of the sparse image.
+
+include::{generated}/validity/structs/VkSparseImageMemoryRequirements2.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[]
+
+
+[[sparsememory-resource-binding]]
+=== Binding Resource Memory
+
+Non-sparse resources are backed by a single physical allocation prior to
+device use (via fname:vkBindImageMemory or fname:vkBindBufferMemory), and
+their backing must: not be changed.
+On the other hand, sparse resources can: be bound to memory non-contiguously
+and these bindings can: be altered during the lifetime of the resource.
+
+ifndef::VKSC_VERSION_1_0[]
+
+[NOTE]
+.Note
+====
+It is important to note that freeing a sname:VkDeviceMemory object with
+fname:vkFreeMemory will not cause resources (or resource regions) bound to
+the memory object to become unbound.
+Applications must: not access resources bound to memory that has been freed.
+====
+
+endif::VKSC_VERSION_1_0[]
+
+Sparse memory bindings execute on a queue that includes the
+ename:VK_QUEUE_SPARSE_BINDING_BIT bit.
+Applications must: use <<synchronization,synchronization primitives>> to
+guarantee that other queues do not access ranges of memory concurrently with
+a binding change.
+Applications can: access other ranges of the same resource while a bind
+operation is executing.
+
+[NOTE]
+.Note
+====
+Implementations must: provide a guarantee that simultaneously binding sparse
+blocks while another queue accesses those same sparse blocks via a sparse
+resource must: not access memory owned by another process or otherwise
+corrupt the system.
+====
+
+While some implementations may: include ename:VK_QUEUE_SPARSE_BINDING_BIT
+support in queue families that also include graphics and compute support,
+other implementations may: only expose a
+ename:VK_QUEUE_SPARSE_BINDING_BIT-only queue family.
+In either case, applications must: use <<synchronization,synchronization
+primitives>> to explicitly request any ordering dependencies between sparse
+memory binding operations and other graphics/compute/transfer operations, as
+sparse binding operations are not automatically ordered against command
+buffer execution, even within a single queue.
+
+When binding memory explicitly for the ename:VK_IMAGE_ASPECT_METADATA_BIT
+the application must: use the ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT in
+the sname:VkSparseMemoryBind::pname:flags field when binding memory.
+Binding memory for metadata is done the same way as binding memory for the
+mip tail, with the addition of the ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT
+flag.
+
+Binding the mip tail for any aspect must: only be performed using
+slink:VkSparseImageOpaqueMemoryBindInfo.
+If pname:formatProperties.flags contains
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, then it can: be bound with
+a single slink:VkSparseMemoryBind structure, with pname:resourceOffset =
+pname:imageMipTailOffset and pname:size = pname:imageMipTailSize.
+
+If pname:formatProperties.flags does not contain
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT then the offset for the mip
+tail in each array layer is given as:
+
+[source,c++]
+----
+arrayMipTailOffset = imageMipTailOffset + arrayLayer * imageMipTailStride;
+----
+
+and the mip tail can: be bound with code:layerCount slink:VkSparseMemoryBind
+structures, each using pname:size = pname:imageMipTailSize and
+pname:resourceOffset = ptext:arrayMipTailOffset as defined above.
+
+Sparse memory binding is handled by the following APIs and related data
+structures.
+
+
+[[sparsemem-memory-binding]]
+==== Sparse Memory Binding Functions
+
+[open,refpage='VkSparseMemoryBind',desc='Structure specifying a sparse memory bind operation',type='structs']
+--
+The sname:VkSparseMemoryBind structure is defined as:
+
+include::{generated}/api/structs/VkSparseMemoryBind.adoc[]
+
+  * pname:resourceOffset is the offset into the resource.
+  * pname:size is the size of the memory region to be bound.
+  * pname:memory is the slink:VkDeviceMemory object that the range of the
+    resource is bound to.
+    If pname:memory is dlink:VK_NULL_HANDLE, the range is unbound.
+  * pname:memoryOffset is the offset into the slink:VkDeviceMemory object to
+    bind the resource range to.
+    If pname:memory is dlink:VK_NULL_HANDLE, this value is ignored.
+  * pname:flags is a bitmask of elink:VkSparseMemoryBindFlagBits specifying
+    usage of the binding operation.
+
+The _binding range_ [eq]#[pname:resourceOffset, pname:resourceOffset {plus}
+pname:size)# has different constraints based on pname:flags.
+If pname:flags contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the
+binding range must: be within the mip tail region of the metadata aspect.
+This metadata region is defined by:
+
+  {empty}:: [eq]#metadataRegion = [base, base {plus}
+            pname:imageMipTailSize)#
+  {empty}:: [eq]#base = pname:imageMipTailOffset {plus}
+            pname:imageMipTailStride {times} n#
+
+and pname:imageMipTailOffset, pname:imageMipTailSize, and
+pname:imageMipTailStride values are from the
+slink:VkSparseImageMemoryRequirements corresponding to the metadata aspect
+of the image, and [eq]#n# is a valid array layer index for the image,
+
+pname:imageMipTailStride is considered to be zero for aspects where
+sname:VkSparseImageMemoryRequirements::pname:formatProperties.flags contains
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT.
+
+If pname:flags does not contain ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT,
+the binding range must: be within the range
+[eq]#[0,slink:VkMemoryRequirements::pname:size)#.
+
+.Valid Usage
+****
+  * [[VUID-VkSparseMemoryBind-memory-01096]]
+    If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory and
+    pname:memoryOffset must: match the memory requirements of the resource,
+    as described in section <<resources-association>>
+  * [[VUID-VkSparseMemoryBind-memory-01097]]
+    If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory must: not have
+    been created with a memory type that reports
+    ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set
+  * [[VUID-VkSparseMemoryBind-size-01098]]
+    pname:size must: be greater than `0`
+  * [[VUID-VkSparseMemoryBind-resourceOffset-01099]]
+    pname:resourceOffset must: be less than the size of the resource
+  * [[VUID-VkSparseMemoryBind-size-01100]]
+    pname:size must: be less than or equal to the size of the resource minus
+    pname:resourceOffset
+  * [[VUID-VkSparseMemoryBind-memoryOffset-01101]]
+    pname:memoryOffset must: be less than the size of pname:memory
+  * [[VUID-VkSparseMemoryBind-size-01102]]
+    pname:size must: be less than or equal to the size of pname:memory minus
+    pname:memoryOffset
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkSparseMemoryBind-memory-02730]]
+    If pname:memory was created with
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes not equal to `0`, at
+    least one handle type it contained must: also have been set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes or
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the
+    resource was created
+  * [[VUID-VkSparseMemoryBind-memory-02731]]
+    If pname:memory was created by a memory import operation, the external
+    handle type of the imported memory must: also have been set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes or
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the
+    resource was created
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+****
+
+include::{generated}/validity/structs/VkSparseMemoryBind.adoc[]
+--
+
+[open,refpage='VkSparseMemoryBindFlagBits',desc='Bitmask specifying usage of a sparse memory binding operation',type='enums']
+--
+Bits which can: be set in slink:VkSparseMemoryBind::pname:flags, specifying
+usage of a sparse memory binding operation, are:
+
+include::{generated}/api/enums/VkSparseMemoryBindFlagBits.adoc[]
+
+  * ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT specifies that the memory being
+    bound is only for the metadata aspect.
+--
+
+[open,refpage='VkSparseMemoryBindFlags',desc='Bitmask of VkSparseMemoryBindFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSparseMemoryBindFlags.adoc[]
+
+tname:VkSparseMemoryBindFlags is a bitmask type for setting a mask of zero
+or more elink:VkSparseMemoryBindFlagBits.
+--
+
+[open,refpage='VkSparseBufferMemoryBindInfo',desc='Structure specifying a sparse buffer memory bind operation',type='structs']
+--
+Memory is bound to sname:VkBuffer objects created with the
+ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT flag using the following
+structure:
+
+include::{generated}/api/structs/VkSparseBufferMemoryBindInfo.adoc[]
+
+  * pname:buffer is the slink:VkBuffer object to be bound.
+  * pname:bindCount is the number of slink:VkSparseMemoryBind structures in
+    the pname:pBinds array.
+  * pname:pBinds is a pointer to an array of slink:VkSparseMemoryBind
+    structures.
+
+include::{generated}/validity/structs/VkSparseBufferMemoryBindInfo.adoc[]
+--
+
+[open,refpage='VkSparseImageOpaqueMemoryBindInfo',desc='Structure specifying sparse image opaque memory bind information',type='structs']
+--
+Memory is bound to opaque regions of sname:VkImage objects created with the
+ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT flag using the following structure:
+
+include::{generated}/api/structs/VkSparseImageOpaqueMemoryBindInfo.adoc[]
+
+  * pname:image is the slink:VkImage object to be bound.
+  * pname:bindCount is the number of slink:VkSparseMemoryBind structures in
+    the pname:pBinds array.
+  * pname:pBinds is a pointer to an array of slink:VkSparseMemoryBind
+    structures.
+
+.Valid Usage
+****
+  * [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]]
+    If the pname:flags member of any element of pname:pBinds contains
+    ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range defined
+    must: be within the mip tail region of the metadata aspect of
+    pname:image
+****
+
+include::{generated}/validity/structs/VkSparseImageOpaqueMemoryBindInfo.adoc[]
+--
+
+[NOTE]
+.Note
+====
+This operation is normally used to bind memory to fully-resident sparse
+images or for mip tail regions of partially resident images.
+However, it can: also be used to bind memory for the entire binding range of
+partially resident images.
+
+In case pname:flags does not contain
+ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the pname:resourceOffset is in the
+range [eq]#[0, slink:VkMemoryRequirements::pname:size)#, This range includes
+data from all aspects of the image, including metadata.
+For most implementations this will probably mean that the
+pname:resourceOffset is a simple device address offset within the resource.
+It is possible for an application to bind a range of memory that includes
+both resource data and metadata.
+However, the application would not know what part of the image the memory is
+used for, or if any range is being used for metadata.
+
+When pname:flags contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the
+binding range specified must: be within the mip tail region of the metadata
+aspect.
+In this case the pname:resourceOffset is not required: to be a simple device
+address offset within the resource.
+However, it _is_ defined to be within [eq]#[pname:imageMipTailOffset,
+pname:imageMipTailOffset {plus} pname:imageMipTailSize)# for the metadata
+aspect.
+See slink:VkSparseMemoryBind for the full constraints on binding region with
+this flag present.
+====
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Jon) The preceding NOTE refers to pname:flags, which is presumably a
+reference to slink:VkSparseMemoryBind above, even though that is not
+contextually clear.
+====
+endif::editing-notes[]
+
+[open,refpage='VkSparseImageMemoryBindInfo',desc='Structure specifying sparse image memory bind information',type='structs']
+--
+Memory can: be bound to sparse image blocks of sname:VkImage objects created
+with the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag using the following
+structure:
+
+include::{generated}/api/structs/VkSparseImageMemoryBindInfo.adoc[]
+
+  * pname:image is the slink:VkImage object to be bound
+  * pname:bindCount is the number of slink:VkSparseImageMemoryBind
+    structures in pname:pBinds array
+  * pname:pBinds is a pointer to an array of slink:VkSparseImageMemoryBind
+    structures
+
+.Valid Usage
+****
+  * [[VUID-VkSparseImageMemoryBindInfo-subresource-01722]]
+    The pname:subresource.mipLevel member of each element of pname:pBinds
+    must: be less than the pname:mipLevels specified in
+    slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-VkSparseImageMemoryBindInfo-subresource-01723]]
+    The pname:subresource.arrayLayer member of each element of pname:pBinds
+    must: be less than the pname:arrayLayers specified in
+    slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-VkSparseImageMemoryBindInfo-image-02901]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set
+****
+
+include::{generated}/validity/structs/VkSparseImageMemoryBindInfo.adoc[]
+--
+
+[open,refpage='VkSparseImageMemoryBind',desc='Structure specifying sparse image memory bind',type='structs']
+--
+The sname:VkSparseImageMemoryBind structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageMemoryBind.adoc[]
+
+  * pname:subresource is the image _aspect_ and region of interest in the
+    image.
+  * pname:offset are the coordinates of the first texel within the image
+    subresource to bind.
+  * pname:extent is the size in texels of the region within the image
+    subresource to bind.
+    The extent must: be a multiple of the sparse image block dimensions,
+    except when binding sparse image blocks along the edge of an image
+    subresource it can: instead be such that any coordinate of
+    [eq]#pname:offset {plus} pname:extent# equals the corresponding
+    dimensions of the image subresource.
+  * pname:memory is the slink:VkDeviceMemory object that the sparse image
+    blocks of the image are bound to.
+    If pname:memory is dlink:VK_NULL_HANDLE, the sparse image blocks are
+    unbound.
+  * pname:memoryOffset is an offset into slink:VkDeviceMemory object.
+    If pname:memory is dlink:VK_NULL_HANDLE, this value is ignored.
+  * pname:flags are sparse memory binding flags.
+
+.Valid Usage
+****
+  * [[VUID-VkSparseImageMemoryBind-memory-01104]]
+    If the <<features-sparseResidencyAliased, pname:sparseResidencyAliased>>
+    feature is not enabled, and if any other resources are bound to ranges
+    of pname:memory, the range of pname:memory being bound must: not overlap
+    with those bound ranges
+  * [[VUID-VkSparseImageMemoryBind-memory-01105]]
+    pname:memory and pname:memoryOffset must: match the memory requirements
+    of the calling command's pname:image, as described in section
+    <<resources-association>>
+  * [[VUID-VkSparseImageMemoryBind-subresource-01106]]
+    pname:subresource must: be a valid image subresource for pname:image
+    (see <<resources-image-views>>)
+  * [[VUID-VkSparseImageMemoryBind-offset-01107]]
+    pname:offset.x must: be a multiple of the sparse image block width
+    (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
+    the image
+  * [[VUID-VkSparseImageMemoryBind-extent-09388]]
+    pname:extent.width must: be greater than `0`
+  * [[VUID-VkSparseImageMemoryBind-extent-01108]]
+    pname:extent.width must: either be a multiple of the sparse image block
+    width of the image, or else [eq]#(pname:extent.width {plus}
+    pname:offset.x)# must: equal the width of the image subresource
+  * [[VUID-VkSparseImageMemoryBind-offset-01109]]
+    pname:offset.y must: be a multiple of the sparse image block height
+    (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
+    the image
+  * [[VUID-VkSparseImageMemoryBind-extent-09389]]
+    pname:extent.height must: be greater than `0`
+  * [[VUID-VkSparseImageMemoryBind-extent-01110]]
+    pname:extent.height must: either be a multiple of the sparse image block
+    height of the image, or else [eq]#(pname:extent.height {plus}
+    pname:offset.y)# must: equal the height of the image subresource
+  * [[VUID-VkSparseImageMemoryBind-offset-01111]]
+    pname:offset.z must: be a multiple of the sparse image block depth
+    (sname:VkSparseImageFormatProperties::pname:imageGranularity.depth) of
+    the image
+  * [[VUID-VkSparseImageMemoryBind-extent-09390]]
+    pname:extent.depth must: be greater than `0`
+  * [[VUID-VkSparseImageMemoryBind-extent-01112]]
+    pname:extent.depth must: either be a multiple of the sparse image block
+    depth of the image, or else [eq]#(pname:extent.depth {plus}
+    pname:offset.z)# must: equal the depth of the image subresource
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkSparseImageMemoryBind-memory-02732]]
+    If pname:memory was created with
+    slink:VkExportMemoryAllocateInfo::pname:handleTypes not equal to `0`, at
+    least one handle type it contained must: also have been set in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when the image
+    was created
+  * [[VUID-VkSparseImageMemoryBind-memory-02733]]
+    If pname:memory was created by a memory import operation, the external
+    handle type of the imported memory must: also have been set in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
+    pname:image was created
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+****
+
+include::{generated}/validity/structs/VkSparseImageMemoryBind.adoc[]
+--
+
+[open,refpage='vkQueueBindSparse',desc='Bind device memory to a sparse resource object',type='protos']
+--
+To submit sparse binding operations to a queue, call:
+
+include::{generated}/api/protos/vkQueueBindSparse.adoc[]
+
+  * pname:queue is the queue that the sparse binding operations will be
+    submitted to.
+  * pname:bindInfoCount is the number of elements in the pname:pBindInfo
+    array.
+  * pname:pBindInfo is a pointer to an array of slink:VkBindSparseInfo
+    structures, each specifying a sparse binding submission batch.
+  * pname:fence is an optional: handle to a fence to be signaled.
+    If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
+    <<synchronization-fences-signaling, fence signal operation>>.
+
+fname:vkQueueBindSparse is a <<devsandqueues-submission,queue submission
+command>>, with each batch defined by an element of pname:pBindInfo as a
+slink:VkBindSparseInfo structure.
+Batches begin execution in the order they appear in pname:pBindInfo, but
+may: complete out of order.
+
+Within a batch, a given range of a resource must: not be bound more than
+once.
+Across batches, if a range is to be bound to one allocation and offset and
+then to another allocation and offset, then the application must: guarantee
+(usually using semaphores) that the binding operations are executed in the
+correct order, as well as to order binding operations against the execution
+of command buffer submissions.
+
+As no operation to flink:vkQueueBindSparse causes any pipeline stage to
+access memory, synchronization primitives used in this command effectively
+only define execution dependencies.
+
+Additional information about fence and semaphore operation is described in
+<<synchronization, the synchronization chapter>>.
+
+.Valid Usage
+****
+  * [[VUID-vkQueueBindSparse-fence-01113]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
+    unsignaled
+  * [[VUID-vkQueueBindSparse-fence-01114]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
+    associated with any other queue command that has not yet completed
+    execution on that queue
+  * [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]]
+    Each element of the pname:pSignalSemaphores member of each element of
+    pname:pBindInfo must: be unsignaled when the semaphore signal operation
+    it defines is executed on the device
+  * [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]]
+    When a semaphore wait operation referring to a binary semaphore defined
+    by any element of the pname:pWaitSemaphores member of any element of
+    pname:pBindInfo executes on pname:queue, there must: be no other queues
+    waiting on the same semaphore
+ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueBindSparse-pWaitSemaphores-01117]]
+    All elements of the pname:pWaitSemaphores member of all elements of the
+    pname:pBindInfo parameter referring to a binary semaphore must: be
+    semaphores that are signaled, or have
+    <<synchronization-semaphores-signaling, semaphore signal operations>>
+    previously submitted for execution
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueBindSparse-pWaitSemaphores-03245]]
+    All elements of the pname:pWaitSemaphores member of all elements of
+    pname:pBindInfo created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_BINARY must: reference a semaphore signal
+    operation that has been submitted for execution and any
+    <<synchronization-semaphores-signaling, semaphore signal operations>> on
+    which it depends (if any) must: have also been submitted for execution
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/protos/vkQueueBindSparse.adoc[]
+--
+
+[open,refpage='VkBindSparseInfo',desc='Structure specifying a sparse binding operation',type='structs']
+--
+The sname:VkBindSparseInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindSparseInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:waitSemaphoreCount is the number of semaphores upon which to wait
+    before executing the sparse binding operations for the batch.
+  * pname:pWaitSemaphores is a pointer to an array of semaphores upon which
+    to wait on before the sparse binding operations for this batch begin
+    execution.
+    If semaphores to wait on are provided, they define a
+    <<synchronization-semaphores-waiting, semaphore wait operation>>.
+  * pname:bufferBindCount is the number of sparse buffer bindings to perform
+    in the batch.
+  * pname:pBufferBinds is a pointer to an array of
+    slink:VkSparseBufferMemoryBindInfo structures.
+  * pname:imageOpaqueBindCount is the number of opaque sparse image bindings
+    to perform.
+  * pname:pImageOpaqueBinds is a pointer to an array of
+    slink:VkSparseImageOpaqueMemoryBindInfo structures, indicating opaque
+    sparse image bindings to perform.
+  * pname:imageBindCount is the number of sparse image bindings to perform.
+  * pname:pImageBinds is a pointer to an array of
+    slink:VkSparseImageMemoryBindInfo structures, indicating sparse image
+    bindings to perform.
+  * pname:signalSemaphoreCount is the number of semaphores to be signaled
+    once the sparse binding operations specified by the structure have
+    completed execution.
+  * pname:pSignalSemaphores is a pointer to an array of semaphores which
+    will be signaled when the sparse binding operations for this batch have
+    completed execution.
+    If semaphores to be signaled are provided, they define a
+    <<synchronization-semaphores-signaling, semaphore signal operation>>.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+.Valid Usage
+****
+  * [[VUID-VkBindSparseInfo-pWaitSemaphores-03246]]
+    If any element of pname:pWaitSemaphores or pname:pSignalSemaphores was
+    created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE
+    then the pname:pNext chain must: include a
+    slink:VkTimelineSemaphoreSubmitInfo structure
+  * [[VUID-VkBindSparseInfo-pNext-03247]]
+    If the pname:pNext chain of this structure includes a
+    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
+    pname:pWaitSemaphores was created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE then its pname:waitSemaphoreValueCount
+    member must: equal pname:waitSemaphoreCount
+  * [[VUID-VkBindSparseInfo-pNext-03248]]
+    If the pname:pNext chain of this structure includes a
+    slink:VkTimelineSemaphoreSubmitInfo structure and any element of
+    pname:pSignalSemaphores was created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE then its
+    pname:signalSemaphoreValueCount member must: equal
+    pname:signalSemaphoreCount
+  * [[VUID-VkBindSparseInfo-pSignalSemaphores-03249]]
+    For each element of pname:pSignalSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
+    have a value greater than the current value of the semaphore when the
+    <<synchronization-semaphores-signaling,semaphore signal operation>> is
+    executed
+  * [[VUID-VkBindSparseInfo-pWaitSemaphores-03250]]
+    For each element of pname:pWaitSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pWaitSemaphoreValues must:
+    have a value which does not differ from the current value of the
+    semaphore or from the value of any outstanding semaphore wait or signal
+    operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+  * [[VUID-VkBindSparseInfo-pSignalSemaphores-03251]]
+    For each element of pname:pSignalSemaphores created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE the
+    corresponding element of
+    slink:VkTimelineSemaphoreSubmitInfo::pname:pSignalSemaphoreValues must:
+    have a value which does not differ from the current value of the
+    semaphore or from the value of any outstanding semaphore wait or signal
+    operation on that semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+****
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+include::{generated}/validity/structs/VkBindSparseInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+To specify the values to use when waiting for and signaling semaphores
+created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE,
+add a slink:VkTimelineSemaphoreSubmitInfo structure to the pname:pNext chain
+of the slink:VkBindSparseInfo structure.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[open,refpage='VkDeviceGroupBindSparseInfo',desc='Structure indicating which instances are bound',type='structs']
+--
+If the pname:pNext chain of slink:VkBindSparseInfo includes a
+sname:VkDeviceGroupBindSparseInfo structure, then that structure includes
+device indices specifying which instance of the resources and memory are
+bound.
+
+The sname:VkDeviceGroupBindSparseInfo structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupBindSparseInfo.adoc[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupBindSparseInfoKHR.adoc[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:resourceDeviceIndex is a device index indicating which instance of
+    the resource is bound.
+  * pname:memoryDeviceIndex is a device index indicating which instance of
+    the memory the resource instance is bound to.
+
+These device indices apply to all buffer and image memory binds included in
+the batch pointing to this structure.
+The semaphore waits and signals for the batch are executed only by the
+physical device specified by the pname:resourceDeviceIndex.
+
+If this structure is not present, pname:resourceDeviceIndex and
+pname:memoryDeviceIndex are assumed to be zero.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118]]
+    pname:resourceDeviceIndex and pname:memoryDeviceIndex must: both be
+    valid device indices
+  * [[VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119]]
+    Each memory allocation bound in this batch must: have allocated an
+    instance for pname:memoryDeviceIndex
+****
+
+include::{generated}/validity/structs/VkDeviceGroupBindSparseInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/synchronization.adoc b/codegen/vulkan/vulkan-docs-next/chapters/synchronization.adoc
new file mode 100644
index 0000000..3496ee1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/synchronization.adoc
@@ -0,0 +1,7763 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[synchronization]]
+= Synchronization and Cache Control
+
+Synchronization of access to resources is primarily the responsibility of
+the application in Vulkan.
+The order of execution of commands with respect to the host and other
+commands on the device has few implicit guarantees, and needs to be
+explicitly specified.
+Memory caches and other optimizations are also explicitly managed, requiring
+that the flow of data through the system is largely under application
+control.
+
+Whilst some implicit guarantees exist between commands, five explicit
+synchronization mechanisms are exposed by Vulkan:
+
+<<synchronization-fences,Fences>>::
+    Fences can: be used to communicate to the host that execution of some
+    task on the device has completed, controlling resource access between
+    host and device.
+
+<<synchronization-semaphores,Semaphores>>::
+    Semaphores can: be used to control resource access across multiple
+    queues.
+
+<<synchronization-events,Events>>::
+    Events provide a fine-grained synchronization primitive which can: be
+    signaled either within a command buffer or by the host, and can: be
+    waited upon within a command buffer or queried on the host.
+    Events can: be used to control resource access within a single queue.
+
+<<synchronization-pipeline-barriers,Pipeline Barriers>>::
+    Pipeline barriers also provide synchronization control within a command
+    buffer, but at a single point, rather than with separate signal and wait
+    operations.
+    Pipeline barriers can: be used to control resource access within a
+    single queue.
+
+<<renderpass,Render Passes>>::
+    Render passes provide a useful synchronization framework for most
+    rendering tasks, built upon the concepts in this chapter.
+    Many cases that would otherwise need an application to use other
+    synchronization primitives can: be expressed more efficiently as part of
+    a render pass.
+    Render pass objects can: be used to control resource access within a
+    single queue.
+
+
+[[synchronization-dependencies]]
+== Execution and Memory Dependencies
+
+An _operation_ is an arbitrary amount of work to be executed on the host, a
+device, or an external entity such as a presentation engine.
+Synchronization commands introduce explicit _execution dependencies_, and
+_memory dependencies_ between two sets of operations defined by the
+command's two _synchronization scopes_.
+
+[[synchronization-dependencies-scopes]]
+The synchronization scopes define which other operations a synchronization
+command is able to create execution dependencies with.
+Any type of operation that is not in a synchronization command's
+synchronization scopes will not be included in the resulting dependency.
+For example, for many synchronization commands, the synchronization scopes
+can: be limited to just operations executing in specific
+<<synchronization-pipeline-stages,pipeline stages>>, which allows other
+pipeline stages to be excluded from a dependency.
+Other scoping options are possible, depending on the particular command.
+
+[[synchronization-dependencies-execution]]
+An _execution dependency_ is a guarantee that for two sets of operations,
+the first set must: _happen-before_ the second set.
+If an operation happens-before another operation, then the first operation
+must: complete before the second operation is initiated.
+More precisely:
+
+  * Let *Ops~1~* and *Ops~2~* be separate sets of operations.
+  * Let *Sync* be a synchronization command.
+  * Let *Scope~1st~* and *Scope~2nd~* be the synchronization scopes of
+    *Sync*.
+  * Let *ScopedOps~1~* be the intersection of sets *Ops~1~* and
+    *Scope~1st~*.
+  * Let *ScopedOps~2~* be the intersection of sets *Ops~2~* and
+    *Scope~2nd~*.
+  * Submitting *Ops~1~*, *Sync* and *Ops~2~* for execution, in that order,
+    will result in execution dependency *ExeDep* between *ScopedOps~1~* and
+    *ScopedOps~2~*.
+  * Execution dependency *ExeDep* guarantees that *ScopedOps~1~*
+    happen-before *ScopedOps~2~*.
+
+[[synchronization-dependencies-chains]]
+An _execution dependency chain_ is a sequence of execution dependencies that
+form a happens-before relation between the first dependency's *ScopedOps~1~*
+and the final dependency's *ScopedOps~2~*.
+For each consecutive pair of execution dependencies, a chain exists if the
+intersection of *Scope~2nd~* in the first dependency and *Scope~1st~* in the
+second dependency is not an empty set.
+The formation of a single execution dependency from an execution dependency
+chain can be described by substituting the following in the description of
+execution dependencies:
+
+  * Let *Sync* be a set of synchronization commands that generate an
+    execution dependency chain.
+  * Let *Scope~1st~* be the first synchronization scope of the first command
+    in *Sync*.
+  * Let *Scope~2nd~* be the second synchronization scope of the last command
+    in *Sync*.
+
+Execution dependencies alone are not sufficient to guarantee that values
+resulting from writes in one set of operations can: be read from another set
+of operations.
+
+[[synchronization-dependencies-available-and-visible]]
+Three additional types of operations are used to control memory access.
+_Availability operations_ cause the values generated by specified memory
+write accesses to become _available_ to a memory domain for future access.
+Any available value remains available until a subsequent write to the same
+memory location occurs (whether it is made available or not) or the memory
+is freed.
+_Memory domain operations_ cause writes that are available to a source
+memory domain to become available to a destination memory domain (an example
+of this is making writes available to the host domain available to the
+device domain).
+_Visibility operations_ cause values available to a memory domain to become
+_visible_ to specified memory accesses.
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+Availability, visibility, memory domains, and memory domain operations are
+formally defined in the <<memory-model-availability-visibility,Availability
+and Visibility>> section of the <<memory-model,Memory Model>> chapter.
+Which API operations perform each of these operations is defined in
+<<memory-model-vulkan-availability-visibility,Availability, Visibility, and
+Domain Operations>>.
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+[[synchronization-dependencies-memory]]
+A _memory dependency_ is an execution dependency which includes availability
+and visibility operations such that:
+
+  * The first set of operations happens-before the availability operation.
+  * The availability operation happens-before the visibility operation.
+  * The visibility operation happens-before the second set of operations.
+
+Once written values are made visible to a particular type of memory access,
+they can: be read or written by that type of memory access.
+Most synchronization commands in Vulkan define a memory dependency.
+
+[[synchronization-dependencies-access-scopes]]
+The specific memory accesses that are made available and visible are defined
+by the _access scopes_ of a memory dependency.
+Any type of access that is in a memory dependency's first access scope and
+occurs in *ScopedOps~1~* is made available.
+Any type of access that is in a memory dependency's second access scope and
+occurs in *ScopedOps~2~* has any available writes made visible to it.
+Any type of operation that is not in a synchronization command's access
+scopes will not be included in the resulting dependency.
+
+A memory dependency enforces availability and visibility of memory accesses
+and execution order between two sets of operations.
+Adding to the description of <<synchronization-dependencies-chains,
+execution dependency chains>>:
+
+  * Let *MemOps~1~* be the set of memory accesses performed by
+    *ScopedOps~1~*.
+  * Let *MemOps~2~* be the set of memory accesses performed by
+    *ScopedOps~2~*.
+  * Let *AccessScope~1st~* be the first access scope of the first command in
+    the *Sync* chain.
+  * Let *AccessScope~2nd~* be the second access scope of the last command in
+    the *Sync* chain.
+  * Let *ScopedMemOps~1~* be the intersection of sets *MemOps~1~* and
+    *AccessScope~1st~*.
+  * Let *ScopedMemOps~2~* be the intersection of sets *MemOps~2~* and
+    *AccessScope~2nd~*.
+  * Submitting *Ops~1~*, *Sync*, and *Ops~2~* for execution, in that order,
+    will result in a memory dependency *MemDep* between *ScopedOps~1~* and
+    *ScopedOps~2~*.
+  * Memory dependency *MemDep* guarantees that:
+  ** Memory writes in *ScopedMemOps~1~* are made available.
+  ** Available memory writes, including those from *ScopedMemOps~1~*, are
+     made visible to *ScopedMemOps~2~*.
+
+[NOTE]
+.Note
+====
+Execution and memory dependencies are used to solve data hazards, i.e. to
+ensure that read and write operations occur in a well-defined order.
+Write-after-read hazards can be solved with just an execution dependency,
+but read-after-write and write-after-write hazards need appropriate memory
+dependencies to be included between them.
+If an application does not include dependencies to solve these hazards, the
+results and execution orders of memory accesses are undefined:.
+====
+
+
+[[synchronization-image-layout-transitions]]
+=== Image Layout Transitions
+
+Image subresources can: be transitioned from one <<resources-image-layouts,
+layout>> to another as part of a <<synchronization-dependencies-memory,
+memory dependency>> (e.g. by using an
+<<synchronization-image-memory-barriers,image memory barrier>>).
+When a layout transition is specified in a memory dependency, it
+happens-after the availability operations in the memory dependency, and
+happens-before the visibility operations.
+Image layout transitions may: perform read and write accesses on all memory
+bound to the image subresource range, so applications must: ensure that all
+memory writes have been made
+<<synchronization-dependencies-available-and-visible, available>> before a
+layout transition is executed.
+Available memory is automatically made visible to a layout transition, and
+writes performed by a layout transition are automatically made available.
+
+Layout transitions always apply to a particular image subresource range, and
+specify both an old layout and new layout.
+The old layout must: either be ename:VK_IMAGE_LAYOUT_UNDEFINED, or match the
+current layout of the image subresource range.
+If the old layout matches the current layout of the image subresource range,
+the transition preserves the contents of that range.
+If the old layout is ename:VK_IMAGE_LAYOUT_UNDEFINED, the contents of that
+range may: be discarded.
+
+[NOTE]
+.Note
+====
+Image layout transitions with ename:VK_IMAGE_LAYOUT_UNDEFINED allow the
+implementation to discard the image subresource range, which can provide
+performance or power benefits.
+Tile-based architectures may be able to avoid flushing tile data to memory,
+and immediate style renderers may be able to achieve fast metadata clears to
+reinitialize frame buffer compression state, or similar.
+
+If the contents of an attachment are not needed after a render pass
+completes, then applications should: use
+ename:VK_ATTACHMENT_STORE_OP_DONT_CARE.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+As image layout transitions may: perform read and write accesses on the
+memory bound to the image, if the image subresource affected by the layout
+transition is bound to peer memory for any device in the current device mask
+then the memory heap the bound memory comes from must: support the
+ename:VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT and
+ename:VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT capabilities as returned by
+flink:vkGetDeviceGroupPeerMemoryFeatures.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[NOTE]
+.Note
+====
+Applications must: ensure that layout transitions happen-after all
+operations accessing the image with the old layout, and happen-before any
+operations that will access the image with the new layout.
+Layout transitions are potentially read/write operations, so not defining
+appropriate memory dependencies to guarantee this will result in a data
+race.
+====
+
+Image layout transitions interact with <<resources-memory-aliasing,memory
+aliasing>>.
+
+
+[[synchronization-image-barrier-layout-transition-order]]
+Layout transitions that are performed via image memory barriers execute in
+their entirety in <<synchronization-submission-order, submission order>>,
+relative to other image layout transitions submitted to the same queue,
+including those performed by <<renderpass, render passes>>.
+In effect there is an implicit execution dependency from each such layout
+transition to all layout transitions previously submitted to the same queue.
+
+ifdef::VK_EXT_sample_locations[]
+
+The image layout of each image subresource of a depth/stencil image created
+with ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT is
+dependent on the last sample locations used to render to the image
+subresource as a depth/stencil attachment, thus when the pname:image member
+of an <<synchronization-image-memory-barriers, image memory barrier>> is an
+image created with this flag the application can: chain a
+slink:VkSampleLocationsInfoEXT structure to the pname:pNext chain of
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+slink:VkImageMemoryBarrier2 or
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+slink:VkImageMemoryBarrier to specify the sample locations to use during any
+image layout transition.
+
+If the sname:VkSampleLocationsInfoEXT structure does not match the sample
+location state last used to render to the image subresource range specified
+by pname:subresourceRange, or if no sname:VkSampleLocationsInfoEXT structure
+is present, then the contents of the given image subresource range becomes
+undefined: as if pname:oldLayout would equal
+ename:VK_IMAGE_LAYOUT_UNDEFINED.
+
+endif::VK_EXT_sample_locations[]
+
+
+[[synchronization-pipeline-stages]]
+=== Pipeline Stages
+
+The work performed by an <<fundamentals-queueoperation-command-types, action
+command>> consists of multiple operations, which are performed as a sequence
+of logically independent steps known as _pipeline stages_.
+The exact pipeline stages executed depend on the particular command that is
+used, and current command buffer state when the command was recorded.
+
+[NOTE]
+.Note
+====
+Operations performed by synchronization commands (e.g.
+<<synchronization-dependencies-available-and-visible, availability and
+visibility operations>>) are not executed by a defined pipeline stage.
+However other commands can still synchronize with them by using the
+<<synchronization-dependencies-scopes, synchronization scopes>> to create a
+<<synchronization-dependencies-chains, dependency chain>>.
+====
+
+Execution of operations across pipeline stages must: adhere to
+<<synchronization-implicit, implicit ordering guarantees>>, particularly
+including <<synchronization-pipeline-stages-order, pipeline stage order>>.
+Otherwise, execution across pipeline stages may: overlap or execute out of
+order with regards to other stages, unless otherwise enforced by an
+execution dependency.
+
+Several of the synchronization commands include pipeline stage parameters,
+restricting the <<synchronization-dependencies-scopes, synchronization
+scopes>> for that command to just those stages.
+This allows fine grained control over the exact execution dependencies and
+accesses performed by action commands.
+Implementations should: use these pipeline stages to avoid unnecessary
+stalls or cache flushing.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkPipelineStageFlagBits2',desc='Pipeline stage flags for VkPipelineStageFlags2',type='enums',alias='VkPipelineStageFlagBits2KHR']
+--
+Bits which can: be set in a tlink:VkPipelineStageFlags2 mask, specifying
+stages of execution, are:
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+The many places pipeline stage flags are used are not currently listed here.
+====
+endif::editing-notes[]
+
+include::{generated}/api/enums/VkPipelineStageFlagBits2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/enums/VkPipelineStageFlagBits2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * ename:VK_PIPELINE_STAGE_2_NONE specifies no stages of execution.
+  * ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT specifies the stage of the
+    pipeline where indirect command parameters are consumed.
+ifdef::VK_NV_device_generated_commands[]
+    This stage also includes reading commands written by
+    flink:vkCmdPreprocessGeneratedCommandsNV.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT specifies the task shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT specifies the mesh shader
+    stage.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT specifies the stage of the
+    pipeline where index buffers are consumed.
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT specifies the stage
+    of the pipeline where vertex buffers are consumed.
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT is equivalent to the logical
+    OR of:
+include::{generated}/sync/flagDefinitions/VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT.adoc[]
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT specifies the vertex shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT specifies the
+    tessellation control shader stage.
+  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT specifies
+    the tessellation evaluation shader stage.
+  * ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT specifies the geometry
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT is equivalent to
+    specifying all supported
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>>:
+include::{generated}/sync/flagDefinitions/VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT.adoc[]
+  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT specifies the fragment
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT specifies the stage
+    of the pipeline where early fragment tests (depth and stencil tests
+    before fragment shading) are performed.
+    This stage also includes <<renderpass-load-operations, render pass load
+    operations>> for framebuffer attachments with a depth/stencil format.
+  * ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT specifies the stage of
+    the pipeline where late fragment tests (depth and stencil tests after
+    fragment shading) are performed.
+    This stage also includes <<renderpass-store-operations, render pass
+    store operations>> for framebuffer attachments with a depth/stencil
+    format.
+  * ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT specifies the
+    stage of the pipeline where final color values are output from the
+    pipeline.
+    This stage includes <<framebuffer-blending, blending>>,
+    <<framebuffer-logicop, logic operations>>, render pass
+    <<renderpass-load-operations, load>> and <<renderpass-store-operations,
+    store>> operations for color attachments,
+    <<renderpass-resolve-operations, render pass multisample resolve
+    operations>>, and flink:vkCmdClearAttachments.
+  * ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT specifies the compute
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_HOST_BIT specifies a pseudo-stage indicating
+    execution on the host of reads/writes of device memory.
+    This stage is not invoked by any commands recorded in a command buffer.
+  * ename:VK_PIPELINE_STAGE_2_COPY_BIT specifies the execution of all
+    <<copies,copy commands>>, including flink:vkCmdCopyQueryPoolResults.
+  * ename:VK_PIPELINE_STAGE_2_BLIT_BIT specifies the execution of
+    flink:vkCmdBlitImage.
+  * ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT specifies the execution of
+    flink:vkCmdResolveImage.
+  * ename:VK_PIPELINE_STAGE_2_CLEAR_BIT specifies the execution of
+    <<clears,clear commands>>, with the exception of
+    flink:vkCmdClearAttachments.
+  * ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT is equivalent to specifying
+    all of:
+include::{generated}/sync/flagDefinitions/VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT.adoc[]
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR specifies the
+    execution of the ray tracing shader stages.
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR specifies
+    the execution of <<acceleration-structure, acceleration structure
+    commands>> or <<acceleration-structure-copying, acceleration structure
+    copy commands>>.
+ifdef::VK_KHR_ray_tracing_maintenance1[]
+  * ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR specifies
+    the execution of <<acceleration-structure-copying, acceleration
+    structure copy commands>>.
+endif::VK_KHR_ray_tracing_maintenance1[]
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT specifies the execution of
+    all graphics pipeline stages, and is equivalent to the logical OR of:
+include::{generated}/sync/flagDefinitions/VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT.adoc[]
+  * ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT specifies all operations
+    performed by all commands supported on the queue it is used with.
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT specifies the
+    stage of the pipeline where the predicate of conditional rendering is
+    consumed.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT specifies the stage
+    of the pipeline where vertex attribute output values are written to the
+    transform feedback buffers.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV specifies the stage
+    of the pipeline where device-side generation of commands via
+    flink:vkCmdPreprocessGeneratedCommandsNV is handled.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies the stage of the pipeline where the
+ifdef::VK_KHR_fragment_shading_rate[]
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
+ifdef::VK_NV_shading_rate_image[]
+    <<primsrast-shading-rate-image, shading rate image>>
+endif::VK_NV_shading_rate_image[]
+    is read to determine the fragment shading rate for portions of a
+    rasterized primitive.
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT specifies the
+    stage of the pipeline where the fragment density map is read to
+    <<fragmentdensitymapops,generate the fragment areas>>.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI specifies the stage
+    of the pipeline where the invocation mask image is read by the
+    implementation to optimize the ray dispatch.
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR specifies the execution
+    of <<video-decode-operations, video decode operations>>.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR specifies the execution
+    of <<video-encode-operations, video encode operations>>.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_NV_optical_flow[]
+  * ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV specifies the stage of the
+    pipeline where <<opticalflow-operations, optical flow operation>> are
+    performed.
+endif::VK_NV_optical_flow[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI specifies the
+    subpass shading shader stage.
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_EXT_opacity_micromap[]
+  * ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT specifies the execution
+    of <<micromap, micromap commands>>.
+endif::VK_EXT_opacity_micromap[]
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+  * ename:VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI specifies
+    the cluster culling shader stage.
+endif::VK_HUAWEI_cluster_culling_shader[]
+  * ename:VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT is equivalent to
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT with tlink:VkAccessFlags2 set
+    to `0` when specified in the second synchronization scope, but
+    equivalent to ename:VK_PIPELINE_STAGE_2_NONE in the first scope.
+  * ename:VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT is equivalent to
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT with tlink:VkAccessFlags2 set
+    to `0` when specified in the first synchronization scope, but equivalent
+    to ename:VK_PIPELINE_STAGE_2_NONE in the second scope.
+
+[NOTE]
+.Note
+====
+The etext:TOP and etext:BOTTOM pipeline stages are deprecated, and
+applications should prefer ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT and
+ename:VK_PIPELINE_STAGE_2_NONE.
+====
+
+[NOTE]
+.Note
+====
+The tname:VkPipelineStageFlags2 bitmask goes beyond the 31 individual bit
+flags allowable within a C99 enum, which is how
+elink:VkPipelineStageFlagBits is defined.
+The first 31 values are common to both, and are interchangeable.
+====
+--
+
+[open,refpage='VkPipelineStageFlags2',desc='64-bit mask of pipeline stage flags',type='flags',alias='VkPipelineStageFlags2KHR']
+--
+tname:VkPipelineStageFlags2 is a bitmask type for setting a mask of zero or
+more elink:VkPipelineStageFlagBits2 flags:
+
+include::{generated}/api/flags/VkPipelineStageFlags2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/flags/VkPipelineStageFlags2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkPipelineStageFlagBits',desc='Bitmask specifying pipeline stages',type='enums']
+--
+Bits which can: be set in a tlink:VkPipelineStageFlags mask, specifying
+stages of execution, are:
+
+include::{generated}/api/enums/VkPipelineStageFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+These values all have the same meaning as the equivalently named values for
+tlink:VkPipelineStageFlags2.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_PIPELINE_STAGE_NONE specifies no stages of execution.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT specifies the stage of the
+    pipeline where stext:VkDrawIndirect* / stext:VkDispatchIndirect* /
+    stext:VkTraceRaysIndirect* data structures are consumed.
+ifdef::VK_NV_device_generated_commands[]
+    This stage also includes reading commands written by
+    flink:vkCmdExecuteGeneratedCommandsNV.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT specifies the task shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT specifies the mesh shader
+    stage.
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT specifies the stage of the
+    pipeline where vertex and index buffers are consumed.
+  * ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT specifies the vertex shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT specifies the
+    tessellation control shader stage.
+  * ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT specifies the
+    tessellation evaluation shader stage.
+  * ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT specifies the geometry
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT specifies the fragment
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT specifies the stage of
+    the pipeline where early fragment tests (depth and stencil tests before
+    fragment shading) are performed.
+    This stage also includes <<renderpass-load-operations, render pass load
+    operations>> for framebuffer attachments with a depth/stencil format.
+  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT specifies the stage of
+    the pipeline where late fragment tests (depth and stencil tests after
+    fragment shading) are performed.
+    This stage also includes <<renderpass-store-operations, render pass
+    store operations>> for framebuffer attachments with a depth/stencil
+    format.
+  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT specifies the stage
+    of the pipeline after blending where the final color values are output
+    from the pipeline.
+    This stage includes <<framebuffer-blending, blending>>,
+    <<framebuffer-logicop, logic operations>>, render pass
+    <<renderpass-load-operations, load>> and <<renderpass-store-operations,
+    store>> operations for color attachments,
+    <<renderpass-resolve-operations, render pass multisample resolve
+    operations>>, and flink:vkCmdClearAttachments.
+  * ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT specifies the execution of a
+    compute shader.
+  * [[synchronization-pipeline-stages-transfer]]
+    ename:VK_PIPELINE_STAGE_TRANSFER_BIT specifies the following commands:
+  ** All <<copies,copy commands>>, including flink:vkCmdCopyQueryPoolResults
+ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+  ** flink:vkCmdBlitImage
+  ** flink:vkCmdResolveImage
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+  ** flink:vkCmdBlitImage2 and flink:vkCmdBlitImage
+  ** flink:vkCmdResolveImage2 and flink:vkCmdResolveImage
+endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
+  ** All <<clears,clear commands>>, with the exception of
+     flink:vkCmdClearAttachments
+  * ename:VK_PIPELINE_STAGE_HOST_BIT specifies a pseudo-stage indicating
+    execution on the host of reads/writes of device memory.
+    This stage is not invoked by any commands recorded in a command buffer.
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+  * ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR specifies
+    the execution of
+ifdef::VK_NV_ray_tracing[]
+    flink:vkCmdBuildAccelerationStructureNV,
+    flink:vkCmdCopyAccelerationStructureNV,
+    flink:vkCmdWriteAccelerationStructuresPropertiesNV
+endif::VK_NV_ray_tracing[]
+ifdef::VK_NV_ray_tracing+VK_KHR_acceleration_structure[,]
+ifdef::VK_KHR_acceleration_structure[]
+    flink:vkCmdBuildAccelerationStructuresKHR,
+    flink:vkCmdBuildAccelerationStructuresIndirectKHR,
+    flink:vkCmdCopyAccelerationStructureKHR,
+    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
+    flink:vkCmdCopyMemoryToAccelerationStructureKHR, and
+    flink:vkCmdWriteAccelerationStructuresPropertiesKHR.
+endif::VK_KHR_acceleration_structure[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR specifies the
+    execution of the ray tracing shader stages, via
+ifdef::VK_NV_ray_tracing[flink:vkCmdTraceRaysNV]
+ifdef::VK_NV_ray_tracing+VK_KHR_ray_tracing_pipeline[,]
+ifdef::VK_KHR_ray_tracing_pipeline[flink:vkCmdTraceRaysKHR, or flink:vkCmdTraceRaysIndirectKHR]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT specifies the execution of all
+    graphics pipeline stages, and is equivalent to the logical OR of:
+  ** ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  ** ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT
+  ** ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+  ** ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+  ** ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
+  ** ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
+  ** ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  ** ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  ** ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+  ** ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+  ** ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+  ** ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+ifdef::VK_EXT_conditional_rendering[]
+  ** ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  ** ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  ** ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  ** ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT specifies all operations
+    performed by all commands supported on the queue it is used with.
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT specifies the
+    stage of the pipeline where the predicate of conditional rendering is
+    consumed.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT specifies the stage
+    of the pipeline where vertex attribute output values are written to the
+    transform feedback buffers.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV specifies the stage of
+    the pipeline where device-side preprocessing for generated commands via
+    flink:vkCmdPreprocessGeneratedCommandsNV is handled.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    specifies the stage of the pipeline where the
+ifdef::VK_KHR_fragment_shading_rate[]
+    <<primsrast-fragment-shading-rate-attachment, fragment shading rate
+    attachment>>
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_KHR_fragment_shading_rate+VK_NV_shading_rate_image[or]
+ifdef::VK_NV_shading_rate_image[]
+    <<primsrast-shading-rate-image, shading rate image>>
+endif::VK_NV_shading_rate_image[]
+    is read to determine the fragment shading rate for portions of a
+    rasterized primitive.
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT specifies the
+    stage of the pipeline where the fragment density map is read to
+    <<fragmentdensitymapops,generate the fragment areas>>.
+endif::VK_EXT_fragment_density_map[]
+  * ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT is equivalent to
+    ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT with tlink:VkAccessFlags set to
+    `0` when specified in the second synchronization scope, but specifies no
+    stage of execution when specified in the first scope.
+  * ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT is equivalent to
+    ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT with tlink:VkAccessFlags set to
+    `0` when specified in the first synchronization scope, but specifies no
+    stage of execution when specified in the second scope.
+--
+
+[open,refpage='VkPipelineStageFlags',desc='Bitmask of VkPipelineStageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineStageFlags.adoc[]
+
+tname:VkPipelineStageFlags is a bitmask type for setting a mask of zero or
+more elink:VkPipelineStageFlagBits.
+--
+
+[[synchronization-pipeline-stages-masks]]
+If a synchronization command includes a source stage mask, its first
+<<synchronization-dependencies-scopes, synchronization scope>> only includes
+execution of the pipeline stages specified in that mask and any
+<<synchronization-pipeline-stages-order, logically earlier>> stages.
+Its first <<synchronization-dependencies-access-scopes, access scope>> only
+includes memory accesses performed by pipeline stages explicitly specified
+in the source stage mask.
+
+If a synchronization command includes a destination stage mask, its second
+<<synchronization-dependencies-scopes, synchronization scope>> only includes
+execution of the pipeline stages specified in that mask and any
+<<synchronization-pipeline-stages-order, logically later>> stages.
+Its second <<synchronization-dependencies-access-scopes, access scope>> only
+includes memory accesses performed by pipeline stages explicitly specified
+in the destination stage mask.
+
+[NOTE]
+.Note
+====
+Note that <<synchronization-dependencies-access-scopes, access scopes>> do
+not interact with the logically earlier or later stages for either scope -
+only the stages the app specifies are considered part of each access scope.
+====
+
+Certain pipeline stages are only available on queues that support a
+particular set of operations.
+The following table lists, for each pipeline stage flag, which queue
+capability flag must: be supported by the queue.
+When multiple flags are enumerated in the second column of the table, it
+means that the pipeline stage is supported on the queue if it supports any
+of the listed capability flags.
+For further details on queue capabilities see
+<<devsandqueues-physical-device-enumeration,Physical Device Enumeration>>
+and <<devsandqueues-queues,Queues>>.
+
+[[synchronization-pipeline-stages-supported]]
+.Supported pipeline stage flags
+[cols="70%,30%",options="header"]
+|====
+|Pipeline stage flag                                          | Required queue capability flag
+include::{generated}/sync/supportedPipelineStages.adoc[]
+|====
+
+[[synchronization-pipeline-stages-order]]
+Pipeline stages that execute as a result of a command logically complete
+execution in a specific order, such that completion of a logically later
+pipeline stage must: not happen-before completion of a logically earlier
+stage.
+This means that including any stage in the source stage mask for a
+particular synchronization command also implies that any logically earlier
+stages are included in *Scope~1st~* for that command.
+
+Similarly, initiation of a logically earlier pipeline stage must: not
+happen-after initiation of a logically later pipeline stage.
+Including any given stage in the destination stage mask for a particular
+synchronization command also implies that any logically later stages are
+included in *Scope~2nd~* for that command.
+
+[NOTE]
+.Note
+====
+Implementations may: not support synchronization at every pipeline stage for
+every synchronization operation.
+If a pipeline stage that an implementation does not support synchronization
+for appears in a source stage mask, it may: substitute any logically later
+stage in its place for the first synchronization scope.
+If a pipeline stage that an implementation does not support synchronization
+for appears in a destination stage mask, it may: substitute any logically
+earlier stage in its place for the second synchronization scope.
+
+For example, if an implementation is unable to signal an event immediately
+after vertex shader execution is complete, it may: instead signal the event
+after color attachment output has completed.
+
+If an implementation makes such a substitution, it must: not affect the
+semantics of execution or memory dependencies or image and buffer memory
+barriers.
+====
+
+[[synchronization-pipeline-stages-types]][[synchronization-pipeline-graphics]]
+<<pipelines-graphics, Graphics pipelines>> are executable on queues
+supporting ename:VK_QUEUE_GRAPHICS_BIT.
+Stages executed by graphics pipelines can: only be specified in commands
+recorded for queues supporting ename:VK_QUEUE_GRAPHICS_BIT.
+
+The graphics
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+primitive
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+pipeline executes the following stages, with the logical ordering of the
+stages matching the order specified here:
+
+include::{generated}/sync/pipelineOrders/graphics_primitive.adoc[]
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+The graphics mesh pipeline executes the following stages, with the logical
+ordering of the stages matching the order specified here:
+
+include::{generated}/sync/pipelineOrders/graphics_mesh.adoc[]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+For the compute pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/compute.adoc[]
+
+ifdef::VK_HUAWEI_subpass_shading[]
+For the subpass shading pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/subpass_shading.adoc[]
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_EXT_fragment_density_map[]
+For graphics pipeline commands executing in a render pass with a fragment
+density map attachment, the following pipeline stage where the fragment
+density map read happens has no particular order relative to the other
+stages, except that it is logically earlier than
+ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT:
+
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+endif::VK_EXT_fragment_density_map[]
+
+ifdef::VK_EXT_conditional_rendering[]
+The conditional rendering stage is formally part of both the graphics, and
+the compute pipeline.
+The pipeline stage where the predicate read happens has unspecified order
+relative to other stages of these pipelines:
+
+  * ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+
+For the transfer pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/transfer.adoc[]
+
+For host operations, only one pipeline stage occurs, so no order is
+guaranteed:
+
+include::{generated}/sync/pipelineOrders/host.adoc[]
+
+ifdef::VK_NV_device_generated_commands[]
+For the command preprocessing pipeline, the following stages occur in this
+order:
+
+include::{generated}/sync/pipelineOrders/command_preprocessing.adoc[]
+endif::VK_NV_device_generated_commands[]
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+For acceleration structure build operations, only one pipeline stage occurs,
+so no order is guaranteed:
+
+include::{generated}/sync/pipelineOrders/acceleration_structure_build.adoc[]
+
+For acceleration structure copy operations, only one pipeline stage occurs,
+so no order is guaranteed:
+
+include::{generated}/sync/pipelineOrders/acceleration_structure_copy.adoc[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+ifdef::VK_EXT_opacity_micromap[]
+For opacity micromap build operations, only one pipeline stage occurs, so no
+order is guaranteed:
+
+include::{generated}/sync/pipelineOrders/opacity_micromap.adoc[]
+endif::VK_EXT_opacity_micromap[]
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+For the ray tracing pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/ray_tracing.adoc[]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+ifdef::VK_KHR_video_decode_queue[]
+For the video decode pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/video_decode.adoc[]
+endif::VK_KHR_video_decode_queue[]
+
+ifdef::VK_KHR_video_encode_queue[]
+For the video encode pipeline, the following stages occur in this order:
+
+include::{generated}/sync/pipelineOrders/video_encode.adoc[]
+endif::VK_KHR_video_encode_queue[]
+
+[[synchronization-access-types]]
+=== Access Types
+
+Memory in Vulkan can: be accessed from within shader invocations and via
+some fixed-function stages of the pipeline.
+The _access type_ is a function of the <<descriptorsets, descriptor type>>
+used, or how a fixed-function stage accesses memory.
+
+[[synchronization-access-masks]]
+Some synchronization commands take sets of access types as parameters to
+define the <<synchronization-dependencies-access-scopes, access scopes>> of
+a memory dependency.
+If a synchronization command includes a _source access mask_, its first
+<<synchronization-dependencies-access-scopes, access scope>> only includes
+accesses via the access types specified in that mask.
+Similarly, if a synchronization command includes a _destination access
+mask_, its second <<synchronization-dependencies-access-scopes, access
+scope>> only includes accesses via the access types specified in that mask.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkAccessFlagBits2',desc='Access flags for VkAccessFlags2',type='enums',alias='VkAccessFlagBits2KHR']
+--
+Bits which can: be set in the pname:srcAccessMask and pname:dstAccessMask
+members of slink:VkMemoryBarrier2KHR, slink:VkImageMemoryBarrier2KHR, and
+slink:VkBufferMemoryBarrier2KHR, specifying access behavior, are:
+
+include::{generated}/api/enums/VkAccessFlagBits2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/enums/VkAccessFlagBits2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * ename:VK_ACCESS_2_NONE specifies no accesses.
+  * ename:VK_ACCESS_2_MEMORY_READ_BIT specifies all read accesses.
+    It is always valid in any access mask, and is treated as equivalent to
+    setting all etext:READ access flags that are valid where it is used.
+  * ename:VK_ACCESS_2_MEMORY_WRITE_BIT specifies all write accesses.
+    It is always valid in any access mask, and is treated as equivalent to
+    setting all etext:WRITE access flags that are valid where it is used.
+  * ename:VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT specifies read access to
+    command data read from indirect buffers as part of an indirect
+ifdef::VK_KHR_acceleration_structure[build,]
+ifdef::VK_KHR_ray_tracing_pipeline[trace,]
+    drawing or dispatch command.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT
+    pipeline stage.
+  * ename:VK_ACCESS_2_INDEX_READ_BIT specifies read access to an index
+    buffer as part of an indexed drawing command, bound by
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR and]
+    flink:vkCmdBindIndexBuffer.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT
+    pipeline stage.
+  * ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT specifies read access to a
+    vertex buffer as part of a drawing command, bound by
+    flink:vkCmdBindVertexBuffers.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT pipeline stage.
+  * ename:VK_ACCESS_2_UNIFORM_READ_BIT specifies read access to a
+    <<descriptorsets-uniformbuffer, uniform buffer>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT specifies read access to an
+    <<renderpass, input attachment>> within a render pass during
+ifdef::VK_HUAWEI_subpass_shading[]
+    subpass shading or
+endif::VK_HUAWEI_subpass_shading[]
+    fragment shading.
+    Such access occurs in the
+ifdef::VK_HUAWEI_subpass_shading[]
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI or
+endif::VK_HUAWEI_subpass_shading[]
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT pipeline stage.
+  * ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT specifies read access to a
+    <<descriptorsets-uniformtexelbuffer, uniform texel buffer>> or
+    <<descriptorsets-sampledimage, sampled image>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT specifies read access to a
+    <<descriptorsets-storagebuffer, storage buffer>>,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
+    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
+    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
+    <<descriptorsets-storageimage, storage image>> in any shader pipeline
+    stage.
+ifdef::VK_KHR_ray_tracing_maintenance1+VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR specifies read
+    access to a <<shader-binding-table, shader binding table>> in any shader
+    pipeline stage.
+endif::VK_KHR_ray_tracing_maintenance1+VK_KHR_ray_tracing_pipeline[]
+  * ename:VK_ACCESS_2_SHADER_READ_BIT
+ifndef::VK_KHR_ray_tracing_maintenance1[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+    specifies read access to a <<shader-binding-table, shader binding
+    table>> in any shader pipeline.
+    In addition, it
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+endif::VK_KHR_ray_tracing_maintenance1[]
+    is equivalent to the logical OR of:
+include::{generated}/sync/flagDefinitions/VK_ACCESS_2_SHADER_READ_BIT.adoc[]
+  * ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT specifies write access to a
+    <<descriptorsets-storagebuffer, storage buffer>>,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
+    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_buffer_device_address[]
+    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
+    <<descriptorsets-storageimage, storage image>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_2_SHADER_WRITE_BIT is equivalent to
+    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT.
+  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT specifies read access to a
+    <<renderpass, color attachment>>, such as via
+ifndef::VK_EXT_blend_operation_advanced[<<framebuffer-blending, blending>>,]
+ifdef::VK_EXT_blend_operation_advanced[]
+    <<framebuffer-blending, blending>> (other than
+    <<framebuffer-blend-advanced, advanced blend operations>>),
+endif::VK_EXT_blend_operation_advanced[]
+    <<framebuffer-logicop, logic operations>> or certain
+ifndef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>> in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage or
+    via <<fragops-shader-tileimage-reads, fragment shader tile image reads>>
+    in the ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT specifies write access to a
+    <<renderpass, color attachment>> during a <<renderpass, render pass>> or
+    via certain render pass <<renderpass-load-operations, load>>,
+    <<renderpass-store-operations, store>>, and
+    <<renderpass-resolve-operations, multisample resolve>> operations.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT specifies read
+    access to a <<renderpass, depth/stencil attachment>>, via
+    <<fragops-ds-state, depth or stencil operations>> or certain
+ifndef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT pipeline stages.
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>> in the
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT pipeline stages or via
+    <<fragops-shader-tileimage-reads, fragment shader tile image reads>> in
+    the ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT specifies write
+    access to a <<renderpass, depth/stencil attachment>>, via
+    <<fragops-ds-state, depth or stencil operations>> or certain render pass
+    <<renderpass-load-operations, load>> and <<renderpass-store-operations,
+    store>> operations.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT pipeline stages.
+  * ename:VK_ACCESS_2_TRANSFER_READ_BIT specifies read access to an image or
+    buffer in a <<copies, copy>> operation.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_COPY_BIT,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT, or
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT pipeline stages.
+  * ename:VK_ACCESS_2_TRANSFER_WRITE_BIT specifies write access to an image
+    or buffer in a <<clears, clear>> or <<copies, copy>> operation.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_COPY_BIT,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT, ename:VK_PIPELINE_STAGE_2_CLEAR_BIT,
+    or ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT pipeline stages.
+  * ename:VK_ACCESS_2_HOST_READ_BIT specifies read access by a host
+    operation.
+    Accesses of this type are not performed through a resource, but directly
+    on memory.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_HOST_BIT pipeline
+    stage.
+  * ename:VK_ACCESS_2_HOST_WRITE_BIT specifies write access by a host
+    operation.
+    Accesses of this type are not performed through a resource, but directly
+    on memory.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_HOST_BIT pipeline
+    stage.
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT specifies read
+    access to a predicate as part of conditional rendering.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT pipeline stage.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT specifies write
+    access to a transform feedback buffer made when transform feedback is
+    active.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT specifies read
+    access to a transform feedback counter buffer which is read when
+    flink:vkCmdBeginTransformFeedbackEXT executes.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+  * ename:VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT specifies
+    write access to a transform feedback counter buffer which is written
+    when flink:vkCmdEndTransformFeedbackEXT executes.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from
+    buffer inputs to flink:vkCmdPreprocessGeneratedCommandsNV.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+  * ename:VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to
+    the target command buffer preprocess outputs.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT specifies
+    read access to <<renderpass, color attachments>>, including
+    <<framebuffer-blend-advanced,advanced blend operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI specifies read access
+    to a invocation mask image in the
+    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI pipeline stage.
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR specifies read
+    access to an acceleration structure as part of a trace, build, or copy
+    command, or to an <<acceleration-structure-scratch, acceleration
+    structure scratch buffer>> as part of a build command.
+    Such access occurs in the
+ifdef::VK_KHR_ray_tracing_pipeline[]
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR pipeline stage or
+endif::VK_KHR_ray_tracing_pipeline[]
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stage.
+  * ename:VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR specifies write
+    access to an acceleration structure or <<acceleration-structure-scratch,
+    acceleration structure scratch buffer>> as part of a build or copy
+    command.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stage.
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT specifies read
+    access to a <<renderpass-fragmentdensitymapattachment, fragment density
+    map attachment>> during dynamic <<fragmentdensitymapops, fragment
+    density map operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT pipeline
+    stage.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR
+    specifies read access to a fragment shading rate attachment during
+    rasterization.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    pipeline stage.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_shading_rate_image[]
+  * ename:VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV specifies read access
+    to a shading rate image during rasterization.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV pipeline stage.
+ifdef::VK_KHR_fragment_shading_rate[]
+    It is equivalent to
+    ename:VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR.
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR specifies read access to an
+    image or buffer resource in a <<video-decode-operations, video decode
+    operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
+    pipeline stage.
+  * ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR specifies write access to
+    an image or buffer resource in a <<video-decode-operations, video decode
+    operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR
+    pipeline stage.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR specifies read access to an
+    image or buffer resource in a <<video-encode-operations, video encode
+    operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
+    pipeline stage.
+  * ename:VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR specifies write access to
+    an image or buffer resource in a <<video-encode-operations, video encode
+    operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR
+    pipeline stage.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_descriptor_buffer[]
+  * ename:VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT specifies read access
+    to a <<descriptorbuffers, descriptor buffer>> in any shader pipeline
+    stage.
+endif::VK_EXT_descriptor_buffer[]
+ifdef::VK_NV_optical_flow[]
+  * ename:VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV specifies read access to an
+    image or buffer resource as part of a <<opticalflow-operations, optical
+    flow operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
+    pipeline stage.
+  * ename:VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV specifies write access to an
+    image or buffer resource as part of a <<opticalflow-operations, optical
+    flow operation>>.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV
+    pipeline stage.
+endif::VK_NV_optical_flow[]
+ifdef::VK_EXT_opacity_micromap[]
+  * ename:VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT specifies write access to a
+    micromap object.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT pipeline stage.
+  * ename:VK_ACCESS_2_MICROMAP_READ_BIT_EXT specifies read access to a
+    micromap object.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT and
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stages.
+endif::VK_EXT_opacity_micromap[]
+
+[NOTE]
+.Note
+====
+In situations where an application wishes to select all access types for a
+given set of pipeline stages, ename:VK_ACCESS_2_MEMORY_READ_BIT or
+ename:VK_ACCESS_2_MEMORY_WRITE_BIT can be used.
+This is particularly useful when specifying stages that only have a single
+access type.
+====
+
+[NOTE]
+.Note
+====
+The tname:VkAccessFlags2 bitmask goes beyond the 31 individual bit flags
+allowable within a C99 enum, which is how elink:VkAccessFlagBits is defined.
+The first 31 values are common to both, and are interchangeable.
+====
+--
+
+[open,refpage='VkAccessFlags2',desc='64-bit mask of access flags',type='flags',alias='VkAccessFlags2KHR']
+--
+tname:VkAccessFlags2 is a bitmask type for setting a mask of zero or more
+elink:VkAccessFlagBits2:
+
+include::{generated}/api/flags/VkAccessFlags2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/flags/VkAccessFlags2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkAccessFlagBits',desc='Bitmask specifying memory access types that will participate in a memory dependency',type='enums']
+--
+Bits which can: be set in the pname:srcAccessMask and pname:dstAccessMask
+members of slink:VkSubpassDependency,
+ifdef::VK_KHR_synchronization2[slink:VkSubpassDependency2,]
+slink:VkMemoryBarrier, slink:VkBufferMemoryBarrier, and
+slink:VkImageMemoryBarrier, specifying access behavior, are:
+
+include::{generated}/api/enums/VkAccessFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+These values all have the same meaning as the equivalently named values for
+tlink:VkAccessFlags2.
+
+  * ename:VK_ACCESS_NONE specifies no accesses.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_ACCESS_MEMORY_READ_BIT specifies all read accesses.
+    It is always valid in any access mask, and is treated as equivalent to
+    setting all etext:READ access flags that are valid where it is used.
+  * ename:VK_ACCESS_MEMORY_WRITE_BIT specifies all write accesses.
+    It is always valid in any access mask, and is treated as equivalent to
+    setting all etext:WRITE access flags that are valid where it is used.
+  * ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT specifies read access to
+    indirect command data read as part of an indirect
+ifdef::VK_KHR_acceleration_structure[build,]
+ifdef::VK_KHR_ray_tracing_pipeline[trace,]
+    drawing or dispatching command.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+    pipeline stage.
+  * ename:VK_ACCESS_INDEX_READ_BIT specifies read access to an index buffer
+    as part of an indexed drawing command, bound by
+ifdef::VK_KHR_maintenance5[flink:vkCmdBindIndexBuffer2KHR and]
+    flink:vkCmdBindIndexBuffer.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+    pipeline stage.
+  * ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT specifies read access to a
+    vertex buffer as part of a drawing command, bound by
+    flink:vkCmdBindVertexBuffers.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+    pipeline stage.
+  * ename:VK_ACCESS_UNIFORM_READ_BIT specifies read access to a
+    <<descriptorsets-uniformbuffer, uniform buffer>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_INPUT_ATTACHMENT_READ_BIT specifies read access to an
+    <<renderpass, input attachment>> within a render pass during
+ifdef::VK_HUAWEI_subpass_shading[]
+    subpass shading or
+endif::VK_HUAWEI_subpass_shading[]
+    fragment shading.
+    Such access occurs in the
+ifdef::VK_HUAWEI_subpass_shading[]
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI or
+endif::VK_HUAWEI_subpass_shading[]
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT pipeline stage.
+  * ename:VK_ACCESS_SHADER_READ_BIT specifies read access to a
+    <<descriptorsets-uniformtexelbuffer, uniform texel buffer>>,
+    <<descriptorsets-sampledimage, sampled image>>,
+    <<descriptorsets-storagebuffer, storage buffer>>,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+    <<shader-binding-table, shader binding table>>,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
+    <<descriptorsets-storageimage, storage image>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_SHADER_WRITE_BIT specifies write access to a
+    <<descriptorsets-storagebuffer, storage buffer>>,
+ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    <<descriptorsets-physical-storage-buffer, physical storage buffer>>,
+endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
+    <<descriptorsets-storagetexelbuffer, storage texel buffer>>, or
+    <<descriptorsets-storageimage, storage image>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT specifies read access to a
+    <<renderpass, color attachment>>, such as via
+ifndef::VK_EXT_blend_operation_advanced[<<framebuffer-blending, blending>>,]
+ifdef::VK_EXT_blend_operation_advanced[]
+    <<framebuffer-blending, blending>> (other than
+    <<framebuffer-blend-advanced, advanced blend operations>>),
+endif::VK_EXT_blend_operation_advanced[]
+    <<framebuffer-logicop, logic operations>> or certain
+ifndef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>> in the
+    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage or
+    via <<fragops-shader-tileimage-reads, fragment shader tile image reads>>
+    in the ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+  * ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT specifies write access to a
+ifndef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    <<renderpass, color or resolve attachment>>
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    <<renderpass, color, resolve, or depth/stencil resolve attachment>>
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    during a <<renderpass, render pass>> or via certain render pass
+    <<renderpass-load-operations, load>> and <<renderpass-store-operations,
+    store>> operations.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+  * ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT specifies read access
+    to a <<renderpass, depth/stencil attachment>>, via <<fragops-ds-state,
+    depth or stencil operations>> or certain
+ifndef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages.
+endif::VK_EXT_shader_tile_image[]
+ifdef::VK_EXT_shader_tile_image[]
+    <<renderpass-load-operations, render pass load operations>> in the
+    ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages or via
+    <<fragops-shader-tileimage-reads, fragment shader tile image reads>> in
+    the ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT pipeline stage.
+endif::VK_EXT_shader_tile_image[]
+  * ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT specifies write
+    access to a <<renderpass, depth/stencil attachment>>, via
+    <<fragops-ds-state, depth or stencil operations>> or certain render pass
+    <<renderpass-load-operations, load>> and <<renderpass-store-operations,
+    store>> operations.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT or
+    ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT pipeline stages.
+  * ename:VK_ACCESS_TRANSFER_READ_BIT specifies read access to an image or
+    buffer in a <<copies, copy>> operation.
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT
+    pipeline stage.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_ACCESS_TRANSFER_WRITE_BIT specifies write access to an image or
+    buffer in a <<clears, clear>> or <<copies, copy>> operation.
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT
+    pipeline stage.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_ACCESS_HOST_READ_BIT specifies read access by a host operation.
+    Accesses of this type are not performed through a resource, but directly
+    on memory.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_HOST_BIT pipeline
+    stage.
+  * ename:VK_ACCESS_HOST_WRITE_BIT specifies write access by a host
+    operation.
+    Accesses of this type are not performed through a resource, but directly
+    on memory.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_HOST_BIT pipeline
+    stage.
+ifdef::VK_EXT_conditional_rendering[]
+  * ename:VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT specifies read access
+    to a predicate as part of conditional rendering.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT pipeline stage.
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT specifies write access
+    to a transform feedback buffer made when transform feedback is active.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT specifies read
+    access to a transform feedback counter buffer which is read when
+    fname:vkCmdBeginTransformFeedbackEXT executes.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+  * ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT specifies write
+    access to a transform feedback counter buffer which is written when
+    fname:vkCmdEndTransformFeedbackEXT executes.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT pipeline stage.
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_device_generated_commands[]
+  * ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from
+    buffer inputs to flink:vkCmdPreprocessGeneratedCommandsNV.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+  * ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to the
+    target command buffer preprocess outputs in
+    flink:vkCmdPreprocessGeneratedCommandsNV.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_blend_operation_advanced[]
+  * ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT specifies read
+    access to <<renderpass, color attachments>>, including
+    <<framebuffer-blend-advanced,advanced blend operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage.
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI specifies read access
+    to a invocation mask image in the
+    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI pipeline stage.
+endif::VK_HUAWEI_invocation_mask[]
+  * ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR specifies read
+    access to an acceleration structure as part of a trace, build, or copy
+    command, or to an <<acceleration-structure-scratch, acceleration
+    structure scratch buffer>> as part of a build command.
+    Such access occurs in the
+ifdef::VK_KHR_ray_tracing_pipeline[]
+    ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR pipeline stage or
+endif::VK_KHR_ray_tracing_pipeline[]
+    ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stage.
+  * ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR specifies write
+    access to an acceleration structure or <<acceleration-structure-scratch,
+    acceleration structure scratch buffer>> as part of a build or copy
+    command.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline
+    stage.
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+ifdef::VK_EXT_fragment_density_map[]
+  * ename:VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT specifies read access
+    to a <<renderpass-fragmentdensitymapattachment, fragment density map
+    attachment>> during dynamic <<fragmentdensitymapops, fragment density
+    map operations>> Such access occurs in the
+    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT pipeline stage.
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR specifies
+    read access to a fragment shading rate attachment during rasterization.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+    pipeline stage.
+endif::VK_KHR_fragment_shading_rate[]
+ifdef::VK_NV_shading_rate_image[]
+  * ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV specifies read access to
+    a shading rate image during rasterization.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV pipeline stage.
+ifdef::VK_KHR_fragment_shading_rate[]
+    It is equivalent to
+    ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR.
+endif::VK_KHR_fragment_shading_rate[]
+endif::VK_NV_shading_rate_image[]
+
+Certain access types are only performed by a subset of pipeline stages.
+Any synchronization command that takes both stage masks and access masks
+uses both to define the <<synchronization-dependencies-access-scopes, access
+scopes>> - only the specified access types performed by the specified stages
+are included in the access scope.
+An application must: not specify an access flag in a synchronization command
+if it does not include a pipeline stage in the corresponding stage mask that
+is able to perform accesses of that type.
+The following table lists, for each access flag, which pipeline stages can:
+perform that type of access.
+
+[[synchronization-access-types-supported]]
+.Supported access types
+[cols="50,50",options="header"]
+|====
+|Access flag                                                  | Supported pipeline stages
+include::{generated}/sync/supportedAccessTypes.adoc[]
+|====
+--
+
+[open,refpage='VkAccessFlags',desc='Bitmask of VkAccessFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkAccessFlags.adoc[]
+
+tname:VkAccessFlags is a bitmask type for setting a mask of zero or more
+elink:VkAccessFlagBits.
+--
+
+
+[[synchronization-host-access-types]]
+If a memory object does not have the
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT property, then
+flink:vkFlushMappedMemoryRanges must: be called in order to guarantee that
+writes to the memory object from the host are made available to the host
+domain, where they can: be further made available to the device domain via a
+domain operation.
+Similarly, flink:vkInvalidateMappedMemoryRanges must: be called to guarantee
+that writes which are available to the host domain are made visible to host
+operations.
+
+If the memory object does have the
+ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT property flag, writes to the
+memory object from the host are automatically made available to the host
+domain.
+Similarly, writes made available to the host domain are automatically made
+visible to the host.
+
+[NOTE]
+.Note
+====
+<<devsandqueues-submission, Queue submission commands>> automatically
+perform a <<synchronization-submission-host-writes,domain operation from
+host to device>> for all writes performed before the command executes, so in
+most cases an explicit memory barrier is not needed for this case.
+In the few circumstances where a submit does not occur between the host
+write and the device read access, writes can: be made available by using an
+explicit memory barrier.
+====
+
+
+[[synchronization-framebuffer-regions]]
+=== Framebuffer Region Dependencies
+
+<<synchronization-pipeline-stages, Pipeline stages>> that operate on, or
+with respect to, the framebuffer are collectively the _framebuffer-space_
+pipeline stages.
+These stages are:
+
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+
+For these pipeline stages, an execution or memory dependency from the first
+set of operations to the second set can: either be a single
+_framebuffer-global_ dependency, or split into multiple _framebuffer-local_
+dependencies.
+A dependency with non-framebuffer-space pipeline stages is neither
+framebuffer-global nor framebuffer-local.
+
+ifndef::VK_QCOM_render_pass_shader_resolve,VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+A _framebuffer region_ is a set of sample (x, y, layer, sample) coordinates
+that is a subset of the entire framebuffer.
+endif::VK_QCOM_render_pass_shader_resolve,VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+ifdef::VK_QCOM_render_pass_shader_resolve,VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+A _framebuffer region_ is a subset of the entire framebuffer, and can:
+either be:
+
+  * A _sample region_, which is set of sample (x, y, layer, sample)
+    coordinates that is a subset of the entire framebuffer, or
+  * A _fragment region_, which is a set of fragment (x, y, layer)
+    coordinates that is a subset of the entire framebuffer.
+endif::VK_QCOM_render_pass_shader_resolve,VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+
+Both <<synchronization-dependencies-scopes, synchronization scopes>> of a
+framebuffer-local dependency include only the operations performed within
+corresponding framebuffer regions (as defined below).
+No ordering guarantees are made between different framebuffer regions for a
+framebuffer-local dependency.
+
+Both <<synchronization-dependencies-scopes, synchronization scopes>> of a
+framebuffer-global dependency include operations on all framebuffer-regions.
+
+If the first synchronization scope includes operations on pixels/fragments
+with N samples and the second synchronization scope includes operations on
+pixels/fragments with M samples, where N does not equal M, then a
+framebuffer region containing all samples at a given (x, y, layer)
+coordinate in the first synchronization scope corresponds to a region
+containing all samples at the same coordinate in the second synchronization
+scope.
+ifndef::VK_QCOM_render_pass_shader_resolve[]
+In other words, it is a pixel granularity dependency.
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+In other words, the framebuffer region is a fragment region and it is a
+pixel granularity dependency.
+endif::VK_QCOM_render_pass_shader_resolve[]
+If N equals M,
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+and if the sname:VkSubpassDescription::pname:flags does not specify the
+ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM flag,
+endif::VK_QCOM_render_pass_shader_resolve[]
+then a framebuffer region containing a single (x, y, layer, sample)
+coordinate in the first synchronization scope corresponds to a region
+containing the same sample at the same coordinate in the second
+synchronization scope.
+ifndef::VK_QCOM_render_pass_shader_resolve[]
+In other words, it is a sample granularity dependency.
+endif::VK_QCOM_render_pass_shader_resolve[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+In other words, the framebuffer region is a sample region and it is a sample
+granularity dependency.
+endif::VK_QCOM_render_pass_shader_resolve[]
+
+ifdef::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+If the pipeline performing the operation was created with
+ename:VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT,
+ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT,
+or
+ename:VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT,
+the framebuffer region is a fragment region and it is a pixel granularity
+dependency.
+endif::VK_EXT_rasterization_order_attachment_access,VK_ARM_rasterization_order_attachment_access[]
+
+[NOTE]
+.Note
+====
+Since fragment shader invocations are not specified to run in any particular
+groupings, the size of a framebuffer region is implementation-dependent, not
+known to the application, and must: be assumed to be no larger than
+specified above.
+====
+
+[NOTE]
+.Note
+====
+Practically, the pixel vs. sample granularity dependency means that if an
+input attachment has a different number of samples than the pipeline's
+pname:rasterizationSamples, then a fragment can: access any sample in the
+input attachment's pixel even if it only uses framebuffer-local
+dependencies.
+If the input attachment has the same number of samples, then the fragment
+can: only access the covered samples in its input code:SampleMask (i.e. the
+fragment operations happen-after a framebuffer-local dependency for each
+sample the fragment covers).
+To access samples that are not covered,
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+either the sname:VkSubpassDescription::pname:flags
+ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM flag is required, or
+endif::VK_QCOM_render_pass_shader_resolve[]
+a framebuffer-global dependency is required.
+====
+
+If a synchronization command includes a pname:dependencyFlags parameter, and
+specifies the ename:VK_DEPENDENCY_BY_REGION_BIT flag, then it defines
+framebuffer-local dependencies for the framebuffer-space pipeline stages in
+that synchronization command, for all framebuffer regions.
+If no pname:dependencyFlags parameter is included, or the
+ename:VK_DEPENDENCY_BY_REGION_BIT flag is not specified, then a
+framebuffer-global dependency is specified for those stages.
+The ename:VK_DEPENDENCY_BY_REGION_BIT flag does not affect the dependencies
+between non-framebuffer-space pipeline stages, nor does it affect the
+dependencies between framebuffer-space and non-framebuffer-space pipeline
+stages.
+
+[NOTE]
+.Note
+====
+Framebuffer-local dependencies are more efficient for most architectures;
+particularly tile-based architectures - which can keep framebuffer-regions
+entirely in on-chip registers and thus avoid external bandwidth across such
+a dependency.
+Including a framebuffer-global dependency in your rendering will usually
+force all implementations to flush data to memory, or to a higher level
+cache, breaking any potential locality optimizations.
+====
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+[[synchronization-view-local-dependencies]]
+=== View-Local Dependencies
+
+In a render pass instance that has <<renderpass-multiview,multiview>>
+enabled, dependencies can: be either view-local or view-global.
+
+A view-local dependency only includes operations from a single
+<<renderpass-multiview-view-local,source view>> from the source subpass in
+the first synchronization scope, and only includes operations from a single
+<<renderpass-multiview-view-local,destination view>> from the destination
+subpass in the second synchronization scope.
+A view-global dependency includes all views in the view mask of the source
+and destination subpasses in the corresponding synchronization scopes.
+
+If a synchronization command includes a pname:dependencyFlags parameter and
+specifies the ename:VK_DEPENDENCY_VIEW_LOCAL_BIT flag, then it defines
+view-local dependencies for that synchronization command, for all views.
+If no pname:dependencyFlags parameter is included or the
+ename:VK_DEPENDENCY_VIEW_LOCAL_BIT flag is not specified, then a view-global
+dependency is specified.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[[synchronization-device-local-dependencies]]
+=== Device-Local Dependencies
+
+Dependencies can: be either device-local or non-device-local.
+A device-local dependency acts as multiple separate dependencies, one for
+each physical device that executes the synchronization command, where each
+dependency only includes operations from that physical device in both
+synchronization scopes.
+A non-device-local dependency is a single dependency where both
+synchronization scopes include operations from all physical devices that
+participate in the synchronization command.
+For subpass dependencies, all physical devices in the
+slink:VkDeviceGroupRenderPassBeginInfo::pname:deviceMask participate in the
+dependency, and for pipeline barriers all physical devices that are set in
+the command buffer's current device mask participate in the dependency.
+
+If a synchronization command includes a pname:dependencyFlags parameter and
+specifies the ename:VK_DEPENDENCY_DEVICE_GROUP_BIT flag, then it defines a
+non-device-local dependency for that synchronization command.
+If no pname:dependencyFlags parameter is included or the
+ename:VK_DEPENDENCY_DEVICE_GROUP_BIT flag is not specified, then it defines
+device-local dependencies for that synchronization command, for all
+participating physical devices.
+
+Semaphore and event dependencies are device-local and only execute on the
+one physical device that performs the dependency.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+
+[[synchronization-implicit]]
+== Implicit Synchronization Guarantees
+
+A small number of implicit ordering guarantees are provided by Vulkan,
+ensuring that the order in which commands are submitted is meaningful, and
+avoiding unnecessary complexity in common operations.
+
+[[synchronization-submission-order]]
+_Submission order_ is a fundamental ordering in Vulkan, giving meaning to
+the order in which <<fundamentals-queueoperation-command-types, action and
+synchronization commands>> are recorded and submitted to a single queue.
+Explicit and implicit ordering guarantees between commands in Vulkan all
+work on the premise that this ordering is meaningful.
+This order does not itself define any execution or memory dependencies;
+synchronization commands and other orderings within the API use this
+ordering to define their scopes.
+
+Submission order for any given set of commands is based on the order in
+which they were recorded to command buffers and then submitted.
+This order is determined as follows:
+
+  . The initial order is determined by the order in which
+    flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    and flink:vkQueueSubmit2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    commands are executed on the host, for a single queue, from first to
+    last.
+  . The order in which slink:VkSubmitInfo structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit,
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    or in which slink:VkSubmitInfo2 structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    from lowest index to highest.
+  . The order in which command buffers are specified in the
+    pname:pCommandBuffers member of slink:VkSubmitInfo
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    or slink:VkSubmitInfo2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    from lowest index to highest.
+  . The order in which commands were recorded to a command buffer on the
+    host, from first to last:
+  ** For commands recorded outside a render pass, this includes all other
+     commands recorded outside a render pass, including
+     flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands; it
+     does not directly include commands inside a render pass.
+  ** For commands recorded inside a render pass, this includes all other
+     commands recorded inside the same subpass, including the
+     flink:vkCmdBeginRenderPass and flink:vkCmdEndRenderPass commands that
+     delimit the same render pass instance; it does not include commands
+     recorded to other subpasses.
+<<fundamentals-queueoperation-command-types, State commands>> do not execute
+any operations on the device, instead they set the state of the command
+buffer when they execute on the host, in the order that they are recorded.
+<<fundamentals-queueoperation-command-types, Action commands>> consume the
+current state of the command buffer when they are recorded, and will execute
+state changes on the device as required to match the recorded state.
+
+<<drawing-primitive-order, The order of primitives passing through the
+graphics pipeline>> and
+<<synchronization-image-barrier-layout-transition-order, image layout
+transitions as part of an image memory barrier>> provide additional
+guarantees based on submission order.
+
+Execution of <<synchronization-pipeline-stages-order, pipeline stages>>
+within a given command also has a loose ordering, dependent only on a single
+command.
+
+[[synchronization-signal-operation-order]]
+_Signal operation order_ is a fundamental ordering in Vulkan, giving meaning
+to the order in which semaphore and fence signal operations occur when
+submitted to a single queue.
+The signal operation order for queue operations is determined as follows:
+
+  . The initial order is determined by the order in which
+    flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    and flink:vkQueueSubmit2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    commands are executed on the host, for a single queue, from first to
+    last.
+  . The order in which slink:VkSubmitInfo structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit,
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    or in which slink:VkSubmitInfo2 structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit2,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    from lowest index to highest.
+  . The fence signal operation defined by the pname:fence parameter of a
+    flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[or flink:vkQueueSubmit2]
+ifndef::VKSC_VERSION_1_0[or flink:vkQueueBindSparse]
+    command is ordered after all semaphore signal operations defined by that
+    command.
+
+Semaphore signal operations defined by a single slink:VkSubmitInfo
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[or slink:VkSubmitInfo2]
+ifndef::VKSC_VERSION_1_0[or slink:VkBindSparseInfo]
+structure are unordered with respect to other semaphore signal operations
+defined within the same structure.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+The flink:vkSignalSemaphore command does not execute on a queue but instead
+performs the signal operation from the host.
+The semaphore signal operation defined by executing a
+flink:vkSignalSemaphore command happens-after the flink:vkSignalSemaphore
+command is invoked and happens-before the command returns.
+
+[NOTE]
+.Note
+====
+When signaling timeline semaphores, it is the responsibility of the
+application to ensure that they are ordered such that the semaphore value is
+strictly increasing.
+Because the first synchronization scope for a semaphore signal operation
+contains all semaphore signal operations which occur earlier in submission
+order, all semaphore signal operations contained in any given batch are
+guaranteed to happen-after all semaphore signal operations contained in any
+previous batches.
+However, no ordering guarantee is provided between the semaphore signal
+operations defined within a single batch.
+This, combined with the requirement that timeline semaphore values strictly
+increase, means that it is invalid to signal the same timeline semaphore
+twice within a single batch.
+
+If an application wishes to ensure that some semaphore signal operation
+happens-after some other semaphore signal operation, it can submit a
+separate batch containing only semaphore signal operations, which will
+happen-after the semaphore signal operations in any earlier batches.
+
+When signaling a semaphore from the host, the only ordering guarantee is
+that the signal operation happens-after when flink:vkSignalSemaphore is
+called and happens-before it returns.
+Therefore, it is invalid to call fname:vkSignalSemaphore while there are any
+outstanding signal operations on that semaphore from any queue submissions
+unless those queue submissions have some dependency which ensures that they
+happen-after the host signal operation.
+One example of this would be if the pending signal operation is, itself,
+waiting on the same semaphore at a lower value and the call to
+fname:vkSignalSemaphore signals that lower value.
+Furthermore, if there are two or more processes or threads signaling the
+same timeline semaphore from the host, the application must ensure that the
+fname:vkSignalSemaphore with the lower semaphore value returns before
+fname:vkSignalSemaphore is called with the higher value.
+====
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+
+[[synchronization-fences]]
+== Fences
+
+[open,refpage='VkFence',desc='Opaque handle to a fence object',type='handles']
+--
+Fences are a synchronization primitive that can: be used to insert a
+dependency from a queue to the host.
+Fences have two states - signaled and unsignaled.
+A fence can: be signaled as part of the execution of a
+<<devsandqueues-submission, queue submission>> command.
+Fences can: be unsignaled on the host with flink:vkResetFences.
+Fences can: be waited on by the host with the flink:vkWaitForFences command,
+and the current state can: be queried with flink:vkGetFenceStatus.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
+[[synchronization-fences-payloads]]
+The internal data of a fence may: include a reference to any resources and
+pending work associated with signal or unsignal operations performed on that
+fence object, collectively referred to as the fence's _payload_.
+Mechanisms to import and export that internal data to and from fences are
+provided <<VkExportFenceCreateInfo, below>>.
+These mechanisms indirectly enable applications to share fence state between
+two or more fences and other synchronization primitives across process and
+API boundaries.
+
+endif::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+Fences are represented by sname:VkFence handles:
+
+include::{generated}/api/handles/VkFence.adoc[]
+--
+
+[open,refpage='vkCreateFence',desc='Create a new fence object',type='protos']
+--
+:refpage: vkCreateFence
+:objectnameplural: fences
+:objectnamecamelcase: fence
+:objectcount: 1
+
+To create a fence, call:
+
+include::{generated}/api/protos/vkCreateFence.adoc[]
+
+  * pname:device is the logical device that creates the fence.
+  * pname:pCreateInfo is a pointer to a slink:VkFenceCreateInfo structure
+    containing information about how the fence is to be created.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pFence is a pointer to a handle in which the resulting fence
+    object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0,VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * [[VUID-vkCreateFence-pNext-05106]]
+    If the pname:pNext chain of slink:VkFenceCreateInfo includes
+    slink:VkExportFenceSciSyncInfoNV, then
+    slink:VkFenceCreateInfo::pname:flags must: not include
+    ename:VK_FENCE_CREATE_SIGNALED_BIT
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+****
+endif::VKSC_VERSION_1_0,VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+include::{generated}/validity/protos/vkCreateFence.adoc[]
+--
+
+[open,refpage='VkFenceCreateInfo',desc='Structure specifying parameters of a newly created fence',type='structs']
+--
+The sname:VkFenceCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkFenceCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkFenceCreateFlagBits specifying the
+    initial state and behavior of the fence.
+
+include::{generated}/validity/structs/VkFenceCreateInfo.adoc[]
+--
+
+[open,refpage='VkFenceCreateFlagBits',desc='Bitmask specifying initial state and behavior of a fence',type='enums']
+--
+include::{generated}/api/enums/VkFenceCreateFlagBits.adoc[]
+
+  * ename:VK_FENCE_CREATE_SIGNALED_BIT specifies that the fence object is
+    created in the signaled state.
+    Otherwise, it is created in the unsignaled state.
+--
+
+[open,refpage='VkFenceCreateFlags',desc='Bitmask of VkFenceCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkFenceCreateFlags.adoc[]
+
+tname:VkFenceCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkFenceCreateFlagBits.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
+[open,refpage='VkExportFenceCreateInfo',desc='Structure specifying handle types that can be exported from a fence',type='structs']
+--
+To create a fence whose payload can: be exported to external handles, add a
+slink:VkExportFenceCreateInfo structure to the pname:pNext chain of the
+slink:VkFenceCreateInfo structure.
+The sname:VkExportFenceCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkExportFenceCreateInfo.adoc[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportFenceCreateInfoKHR.adoc[]
+endif::VK_KHR_external_fence[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is a bitmask of
+    elink:VkExternalFenceHandleTypeFlagBits specifying one or more fence
+    handle types the application can: export from the resulting fence.
+    The application can: request multiple handle types for the same fence.
+
+.Valid Usage
+****
+  * [[VUID-VkExportFenceCreateInfo-handleTypes-01446]]
+    The bits in pname:handleTypes must: be supported and compatible, as
+    reported by slink:VkExternalFenceProperties
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * [[VUID-VkExportFenceCreateInfo-pNext-05107]]
+    If the pname:pNext chain includes a slink:VkExportFenceSciSyncInfoNV
+    structure,
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence and
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncExport, or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence and
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncExport
+    must: be enabled
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+****
+
+include::{generated}/validity/structs/VkExportFenceCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+ifdef::VK_KHR_external_fence_win32[]
+[open,refpage='VkExportFenceWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a fence',type='structs']
+--
+To specify additional attributes of NT handles exported from a fence, add a
+slink:VkExportFenceWin32HandleInfoKHR structure to the pname:pNext chain of
+the slink:VkFenceCreateInfo structure.
+The sname:VkExportFenceWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkExportFenceWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
+    structure specifying security attributes of the handle.
+  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
+  * pname:name is a null-terminated UTF-16 string to associate with the
+    underlying synchronization primitive referenced by NT handles exported
+    from the created fence.
+
+If slink:VkExportFenceCreateInfo is not included in the same pname:pNext
+chain, this structure is ignored.
+
+If slink:VkExportFenceCreateInfo is included in the pname:pNext chain of
+slink:VkFenceCreateInfo with a Windows pname:handleType, but either
+sname:VkExportFenceWin32HandleInfoKHR is not included in the pname:pNext
+chain, or it is included but pname:pAttributes is set to `NULL`, default
+security descriptor values will be used, and child processes created by the
+application will not inherit the handle, as described in the MSDN
+documentation for "`Synchronization Object Security and Access Rights`"^1^.
+Further, if the structure is not present, the access rights will be
+
+code:DXGI_SHARED_RESOURCE_READ | code:DXGI_SHARED_RESOURCE_WRITE
+
+for handles of the following types:
+
+ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+1::
+    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
+
+.Valid Usage
+****
+  * [[VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447]]
+    If slink:VkExportFenceCreateInfo::pname:handleTypes does not include
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, a
+    sname:VkExportFenceWin32HandleInfoKHR structure must: not be included in
+    the pname:pNext chain of slink:VkFenceCreateInfo
+****
+
+include::{generated}/validity/structs/VkExportFenceWin32HandleInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetFenceWin32HandleKHR',desc='Get a Windows HANDLE for a fence',type='protos']
+--
+To export a Windows handle representing the state of a fence, call:
+
+include::{generated}/api/protos/vkGetFenceWin32HandleKHR.adoc[]
+
+  * pname:device is the logical device that created the fence being
+    exported.
+  * pname:pGetWin32HandleInfo is a pointer to a
+    slink:VkFenceGetWin32HandleInfoKHR structure containing parameters of
+    the export operation.
+  * pname:pHandle will return the Windows handle representing the fence
+    state.
+
+For handle types defined as NT handles, the handles returned by
+fname:vkGetFenceWin32HandleKHR are owned by the application.
+To avoid leaking resources, the application must: release ownership of them
+using the code:CloseHandle system call when they are no longer needed.
+
+Exporting a Windows handle from a fence may: have side effects depending on
+the transference of the specified handle type, as described in
+<<synchronization-fences-importing,Importing Fence Payloads>>.
+
+include::{generated}/validity/protos/vkGetFenceWin32HandleKHR.adoc[]
+--
+
+[open,refpage='VkFenceGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle fence export operation',type='structs']
+--
+The sname:VkFenceGetWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkFenceGetWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence from which state will be exported.
+  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the handle returned depend on the value of
+pname:handleType.
+See elink:VkExternalFenceHandleTypeFlagBits for a description of the
+properties of the defined external fence handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448]]
+    pname:handleType must: have been included in
+    slink:VkExportFenceCreateInfo::pname:handleTypes when the pname:fence's
+    current payload was created
+  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449]]
+    If pname:handleType is defined as an NT handle,
+    flink:vkGetFenceWin32HandleKHR must: be called no more than once for
+    each valid unique combination of pname:fence and pname:handleType
+  * [[VUID-VkFenceGetWin32HandleInfoKHR-fence-01450]]
+    pname:fence must: not currently have its payload replaced by an imported
+    payload as described below in
+    <<synchronization-fences-importing,Importing Fence Payloads>> unless
+    that imported payload's handle type was included in
+    slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes for
+    pname:handleType
+  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:fence must: be signaled, or have an
+    associated <<synchronization-fences-signaling,fence signal operation>>
+    pending execution
+  * [[VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452]]
+    pname:handleType must: be defined as an NT handle or a global share
+    handle
+****
+
+include::{generated}/validity/structs/VkFenceGetWin32HandleInfoKHR.adoc[]
+--
+endif::VK_KHR_external_fence_win32[]
+
+ifdef::VK_KHR_external_fence_fd[]
+[open,refpage='vkGetFenceFdKHR',desc='Get a POSIX file descriptor handle for a fence',type='protos']
+--
+:refpage: vkGetFenceFdKHR
+
+To export a POSIX file descriptor representing the payload of a fence, call:
+
+include::{generated}/api/protos/vkGetFenceFdKHR.adoc[]
+
+  * pname:device is the logical device that created the fence being
+    exported.
+  * pname:pGetFdInfo is a pointer to a slink:VkFenceGetFdInfoKHR structure
+    containing parameters of the export operation.
+  * pname:pFd will return the file descriptor representing the fence
+    payload.
+
+Each call to fname:vkGetFenceFdKHR must: create a new file descriptor and
+transfer ownership of it to the application.
+To avoid leaking resources, the application must: release ownership of the
+file descriptor when it is no longer needed.
+
+[NOTE]
+.Note
+====
+Ownership can be released in many ways.
+For example, the application can call code:close() on the file descriptor,
+or transfer ownership back to Vulkan by using the file descriptor to import
+a fence payload.
+====
+
+If pname:pGetFdInfo->handleType is
+ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT and the fence is signaled at
+the time fname:vkGetFenceFdKHR is called, pname:pFd may: return the value
+`-1` instead of a valid file descriptor.
+
+Where supported by the operating system, the implementation must: set the
+file descriptor to be closed automatically when an code:execve system call
+is made.
+
+Exporting a file descriptor from a fence may: have side effects depending on
+the transference of the specified handle type, as described in
+<<synchronization-fences-importing,Importing Fence State>>.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetFenceFdKHR.adoc[]
+--
+
+[open,refpage='VkFenceGetFdInfoKHR',desc='Structure describing a POSIX FD fence export operation',type='structs']
+--
+The sname:VkFenceGetFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkFenceGetFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence from which state will be exported.
+  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the file descriptor returned depend on the value of
+pname:handleType.
+See elink:VkExternalFenceHandleTypeFlagBits for a description of the
+properties of the defined external fence handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkFenceGetFdInfoKHR-handleType-01453]]
+    pname:handleType must: have been included in
+    slink:VkExportFenceCreateInfo::pname:handleTypes when pname:fence's
+    current payload was created
+  * [[VUID-VkFenceGetFdInfoKHR-handleType-01454]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:fence must: be signaled, or have an
+    associated <<synchronization-fences-signaling,fence signal operation>>
+    pending execution
+  * [[VUID-VkFenceGetFdInfoKHR-fence-01455]]
+    pname:fence must: not currently have its payload replaced by an imported
+    payload as described below in
+    <<synchronization-fences-importing,Importing Fence Payloads>> unless
+    that imported payload's handle type was included in
+    slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes for
+    pname:handleType
+  * [[VUID-VkFenceGetFdInfoKHR-handleType-01456]]
+    pname:handleType must: be defined as a POSIX file descriptor handle
+****
+
+include::{generated}/validity/structs/VkFenceGetFdInfoKHR.adoc[]
+--
+endif::VK_KHR_external_fence_fd[]
+
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+[open,refpage='VkExportFenceSciSyncInfoNV',desc='Structure specifying additional attributes SciSync handles exported from a fence',type='structs']
+--
+To specify additional attributes of stext:NvSciSync handles exported from a
+fence, add a slink:VkExportFenceSciSyncInfoNV structure to the pname:pNext
+chain of the slink:VkFenceCreateInfo structure.
+The sname:VkExportFenceSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExportFenceSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is an opaque sname:NvSciSyncAttrList describing the
+    attributes of the NvSciSync object that will be exported.
+
+If slink:VkExportFenceCreateInfo is not present in the same pname:pNext
+chain, this structure is ignored.
+If the pname:pNext chain of slink:VkFenceCreateInfo includes a
+slink:VkExportFenceCreateInfo structure with a NvSciSync pname:handleType,
+but either slink:VkExportFenceSciSyncInfoNV is not included in the
+pname:pNext chain, or it is included but pname:pAttributes is set to `NULL`,
+flink:vkCreateFence will return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+The pname:pAttributes must: be a reconciled sname:NvSciSyncAttrList.
+Before exporting the NvSciSync handles, applications must: use the
+flink:vkGetPhysicalDeviceSciSyncAttributesNV command to get the unreconciled
+sname:NvSciSyncAttrList and then use the NvSciSync API to reconcile it.
+
+.Valid Usage
+****
+  * [[VUID-VkExportFenceSciSyncInfoNV-pAttributes-05108]]
+    pname:pAttributes must: be a reconciled stext:NvSciSyncAttrList
+****
+
+include::{generated}/validity/structs/VkExportFenceSciSyncInfoNV.adoc[]
+--
+
+[open,refpage='vkGetPhysicalDeviceSciSyncAttributesNV',desc='Get the implementation-specific NvSciSync attributes',type='protos']
+--
+
+To obtain the implementation-specific NvSciSync attributes in an
+unreconciled sname:NvSciSyncAttrList, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSciSyncAttributesNV.adoc[]
+
+  * pname:physicalDevice is the handle to the physical device that will be
+    used to determine the attributes.
+  * pname:pSciSyncAttributesInfo is a pointer to a
+    slink:VkSciSyncAttributesInfoNV structure containing information about
+    how the attributes are to be filled.
+  * pname:pAttributes is an opaque stext:NvSciSyncAttrList in which the
+    implementation will set the requested attributes.
+
+On success, pname:pAttributes will contain an unreconciled
+stext:NvSciSyncAttrList whose private attributes and some public attributes
+are filled in by the implementation.
+If the attributes of pname:physicalDevice could not be obtained,
+ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceSciSyncAttributesNV-pSciSyncAttributesInfo-05109]]
+    If pname:pSciSyncAttributesInfo->primitiveType is
+    ename:VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV then
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence
+    must: be enabled
+  * [[VUID-vkGetPhysicalDeviceSciSyncAttributesNV-pSciSyncAttributesInfo-05110]]
+    If pname:pSciSyncAttributesInfo->primitiveType is
+    ename:VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV then
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncSemaphore
+    or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncSemaphore2
+    must: be enabled
+  * [[VUID-vkGetPhysicalDeviceSciSyncAttributesNV-pAttributes-05111]]
+    pname:pAttributes must: be a valid stext:NvSciSyncAttrList and must: not
+    be `NULL`
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSciSyncAttributesNV.adoc[]
+--
+
+[open,refpage='VkSciSyncAttributesInfoNV',desc='Structure describing SciSync attribute information',type='structs']
+--
+The sname:VkSciSyncAttributesInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSciSyncAttributesInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:clientType is the permission type of client.
+  * pname:primitiveType is the synchronization primitive type.
+
+NvSciSync disallows multi-signalers, therefore clients must: specify their
+permission types as one of signaler, waiter or signaler_waiter.
+In addition, NvSciSync requires clients to specify which primitive type is
+to be used in synchronization, hence clients also need to provide the
+primitive type (slink:VkFence or slink:VkSemaphore) that will be used.
+
+include::{generated}/validity/structs/VkSciSyncAttributesInfoNV.adoc[]
+--
+
+[open,refpage='VkSciSyncClientTypeNV',desc='Enums specifying client permission types',type='enums']
+--
+The ename:VkSciSyncClientTypeNV enum is defined as:
+
+include::{generated}/api/enums/VkSciSyncClientTypeNV.adoc[]
+
+  * ename:VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_NV specifies the permission of
+    the client as signaler.
+    It indicates that the client can only signal the created fence or
+    semaphore and disallows waiting on it.
+  * ename:VK_SCI_SYNC_CLIENT_TYPE_WAITER_NV specifies the permission of the
+    client as waiter.
+    It indicates that the client can only wait on the imported fence or
+    semaphore and disallows signalling it.
+    This type of permission is only used when the client imports NvSciSync
+    handles, and export is not allowed.
+  * ename:VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_WAITER_NV specifies the
+    permission of client as both signaler and waiter.
+    It indicates that the client can: signal and wait on the created fence
+    or semaphore.
+--
+
+[open,refpage='VkSciSyncPrimitiveTypeNV',desc='Enums specifying the primitive types',type='enums']
+--
+The ename:VkSciSyncPrimitiveTypeNV enum is defined as:
+
+include::{generated}/api/enums/VkSciSyncPrimitiveTypeNV.adoc[]
+
+  * ename:VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV specifies that the
+    synchronization primitive type the client will create is a
+    slink:VkFence.
+  * ename:VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV specifies that the
+    synchronization primitive type the client will create is a
+    slink:VkSemaphore.
+--
+
+[open,refpage='vkGetFenceSciSyncFenceNV',desc='Get a stext:NvSciSyncFence handle for a fence',type='protos']
+--
+To export a stext:NvSciSyncFence handle representing the payload of a fence,
+call:
+
+include::{generated}/api/protos/vkGetFenceSciSyncFenceNV.adoc[]
+
+  * pname:device is the logical device that created the fence being
+    exported.
+  * pname:pGetSciSyncHandleInfo is a pointer to a
+    slink:VkFenceGetSciSyncInfoNV structure containing parameters of the
+    export operation.
+  * pname:pHandle is a pointer to a stext:NvSciSyncFence which will contain
+    the fence payload on return.
+
+Each call to fname:vkGetFenceSciSyncFenceNV will duplicate the underlying
+stext:NvSciSyncFence handle and transfer the ownership of the
+stext:NvSciSyncFence handle to the application.
+To avoid leaking resources, the application must: release of the ownership
+of the stext:NvSciSyncFence handle when it is no longer needed.
+
+.Valid Usage
+****
+  * [[VUID-vkGetFenceSciSyncFenceNV-pGetSciSyncHandleInfo-05112]]
+    pname:pGetSciSyncHandleInfo->handleType must: be
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV
+  * [[VUID-vkGetFenceSciSyncFenceNV-sciSyncFence-05113]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetFenceSciSyncFenceNV.adoc[]
+--
+
+[open,refpage='vkGetFenceSciSyncObjNV',desc='Get a stext:NvSciSyncObj handle for a fence',type='protos']
+--
+To export a stext:NvSciSyncObj handle representing the payload of a fence,
+call:
+
+include::{generated}/api/protos/vkGetFenceSciSyncObjNV.adoc[]
+
+  * pname:device is the logical device that created the fence being
+    exported.
+  * pname:pGetSciSyncHandleInfo is a pointer to a
+    slink:VkFenceGetSciSyncInfoNV structure containing parameters of the
+    export operation.
+  * pname:pHandle will return the stext:NvSciSyncObj handle representing the
+    fence payload.
+
+Each call to fname:vkGetFenceSciSyncObjNV will duplicate the underlying
+stext:NvSciSyncObj handle and transfer the ownership of the
+stext:NvSciSyncObj handle to the application.
+To avoid leaking resources, the application must: release of the ownership
+of the stext:NvSciSyncObj handle when it is no longer needed.
+
+.Valid Usage
+****
+  * [[VUID-vkGetFenceSciSyncObjNV-pGetSciSyncHandleInfo-05114]]
+    pname:pGetSciSyncHandleInfo->handleType must: be
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV
+  * [[VUID-vkGetFenceSciSyncObjNV-sciSyncFence-05115]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetFenceSciSyncObjNV.adoc[]
+--
+
+[open,refpage='VkFenceGetSciSyncInfoNV',desc='Structure describing a slink:VkFence export operation to NvSciSync',type='structs']
+--
+The sname:VkFenceGetSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkFenceGetSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence from which state will be exported.
+  * pname:handleType is the type of NvSciSync handle (stext:NvSciSyncObj or
+    stext:NvSciSyncFence) representing the fence payload that will be
+    exported.
+
+If pname:handleType is
+ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV, a
+stext:NvSciSyncObj will be exported.
+If pname:handleType is
+ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV, a
+stext:NvSciSyncFence will be exported.
+
+include::{generated}/validity/structs/VkFenceGetSciSyncInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+[open,refpage='vkDestroyFence',desc='Destroy a fence object',type='protos']
+--
+To destroy a fence, call:
+
+include::{generated}/api/protos/vkDestroyFence.adoc[]
+
+  * pname:device is the logical device that destroys the fence.
+  * pname:fence is the handle of the fence to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyFence-fence-01120]]
+    All <<devsandqueues-submission, queue submission>> commands that refer
+    to pname:fence must: have completed execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyFence-fence-01121]]
+    If sname:VkAllocationCallbacks were provided when pname:fence was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyFence-fence-01122]]
+    If no sname:VkAllocationCallbacks were provided when pname:fence was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyFence.adoc[]
+--
+
+[open,refpage='vkGetFenceStatus',desc='Return the status of a fence',type='protos']
+--
+:refpage: vkGetFenceStatus
+
+To query the status of a fence from the host, call:
+
+include::{generated}/api/protos/vkGetFenceStatus.adoc[]
+
+  * pname:device is the logical device that owns the fence.
+  * pname:fence is the handle of the fence to query.
+
+Upon success, fname:vkGetFenceStatus returns the status of the fence object,
+with the following return codes:
+
+.Fence Object Status Codes
+[width="80%",options="header"]
+|====
+| Status | Meaning
+| ename:VK_SUCCESS | The fence specified by pname:fence is signaled.
+| ename:VK_NOT_READY | The fence specified by pname:fence is unsignaled.
+| ename:VK_ERROR_DEVICE_LOST | The device has been lost.  See <<devsandqueues-lost-device,Lost Device>>.
+|====
+
+If a <<devsandqueues-submission, queue submission>> command is pending
+execution, then the value returned by this command may: immediately be out
+of date.
+
+If the device has been lost (see <<devsandqueues-lost-device,Lost Device>>),
+fname:vkGetFenceStatus may: return any of the above status codes.
+If the device has been lost and fname:vkGetFenceStatus is called repeatedly,
+it will eventually return either ename:VK_SUCCESS or
+ename:VK_ERROR_DEVICE_LOST.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetFenceStatus.adoc[]
+--
+
+[[synchronization-fences-unsignaling]]
+[open,refpage='vkResetFences',desc='Resets one or more fence objects',type='protos']
+--
+To set the state of fences to unsignaled from the host, call:
+
+include::{generated}/api/protos/vkResetFences.adoc[]
+
+  * pname:device is the logical device that owns the fences.
+  * pname:fenceCount is the number of fences to reset.
+  * pname:pFences is a pointer to an array of fence handles to reset.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+If any member of pname:pFences currently has its
+<<synchronization-fences-importing, payload imported>> with temporary
+permanence, that fence's prior permanent payload is first restored.
+The remaining operations described therefore operate on the restored
+payload.
+
+endif::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+When flink:vkResetFences is executed on the host, it defines a _fence
+unsignal operation_ for each fence, which resets the fence to the unsignaled
+state.
+
+If any member of pname:pFences is already in the unsignaled state when
+flink:vkResetFences is executed, then flink:vkResetFences has no effect on
+that fence.
+
+.Valid Usage
+****
+  * [[VUID-vkResetFences-pFences-01123]]
+    Each element of pname:pFences must: not be currently associated with any
+    queue command that has not yet completed execution on that queue
+****
+
+include::{generated}/validity/protos/vkResetFences.adoc[]
+--
+
+[[synchronization-fences-signaling]]
+When a fence is submitted to a queue as part of a
+<<devsandqueues-submission, queue submission>> command, it defines a memory
+dependency on the batches that were submitted as part of that command, and
+defines a _fence signal operation_ which sets the fence to the signaled
+state.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes every batch submitted in the same <<devsandqueues-submission, queue
+submission>> command.
+Fence signal operations that are defined by flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[or flink:vkQueueSubmit2]
+additionally include in the first synchronization scope all commands that
+occur earlier in <<synchronization-submission-order,submission order>>.
+Fence signal operations that are defined by flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[or flink:vkQueueSubmit2]
+ifndef::VKSC_VERSION_1_0[or flink:vkQueueBindSparse]
+additionally include in the first synchronization scope any semaphore and
+fence signal operations that occur earlier in
+<<synchronization-signal-operation-order,signal operation order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+only includes the fence signal operation.
+
+The first <<synchronization-dependencies-access-scopes, access scope>>
+includes all memory access performed by the device.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+empty.
+
+[open,refpage='vkWaitForFences',desc='Wait for one or more fences to become signaled',type='protos']
+--
+:refpage: vkWaitForFences
+
+To wait for one or more fences to enter the signaled state on the host,
+call:
+
+include::{generated}/api/protos/vkWaitForFences.adoc[]
+
+  * pname:device is the logical device that owns the fences.
+  * pname:fenceCount is the number of fences to wait on.
+  * pname:pFences is a pointer to an array of pname:fenceCount fence
+    handles.
+  * pname:waitAll is the condition that must: be satisfied to successfully
+    unblock the wait.
+    If pname:waitAll is ename:VK_TRUE, then the condition is that all fences
+    in pname:pFences are signaled.
+    Otherwise, the condition is that at least one fence in pname:pFences is
+    signaled.
+  * pname:timeout is the timeout period in units of nanoseconds.
+    pname:timeout is adjusted to the closest value allowed by the
+    implementation-dependent timeout accuracy, which may: be substantially
+    longer than one nanosecond, and may: be longer than the requested
+    period.
+
+If the condition is satisfied when fname:vkWaitForFences is called, then
+fname:vkWaitForFences returns immediately.
+If the condition is not satisfied at the time fname:vkWaitForFences is
+called, then fname:vkWaitForFences will block and wait until the condition
+is satisfied or the pname:timeout has expired, whichever is sooner.
+
+If pname:timeout is zero, then fname:vkWaitForFences does not wait, but
+simply returns the current state of the fences.
+ename:VK_TIMEOUT will be returned in this case if the condition is not
+satisfied, even though no actual wait was performed.
+
+If the condition is satisfied before the pname:timeout has expired,
+fname:vkWaitForFences returns ename:VK_SUCCESS.
+Otherwise, fname:vkWaitForFences returns ename:VK_TIMEOUT after the
+pname:timeout has expired.
+
+If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
+the timeout has expired, fname:vkWaitForFences must: return in finite time
+with either ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
+
+[NOTE]
+.Note
+====
+While we guarantee that fname:vkWaitForFences must: return in finite time,
+no guarantees are made that it returns immediately upon device loss.
+However, the client can reasonably expect that the delay will be on the
+order of seconds and that calling fname:vkWaitForFences will not result in a
+permanently (or seemingly permanently) dead process.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkWaitForFences.adoc[]
+--
+
+[[synchronization-fences-waiting]]
+An execution dependency is defined by waiting for a fence to become
+signaled, either via flink:vkWaitForFences or by polling on
+flink:vkGetFenceStatus.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the fence signal operation.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes the host operations of flink:vkWaitForFences or
+flink:vkGetFenceStatus indicating that the fence has become signaled.
+
+[NOTE]
+.Note
+====
+Signaling a fence and waiting on the host does not guarantee that the
+results of memory accesses will be visible to the host, as the access scope
+of a memory dependency defined by a fence only includes device access.
+A <<synchronization-memory-barriers, memory barrier>> or other memory
+dependency must: be used to guarantee this.
+See the description of <<synchronization-host-access-types, host access
+types>> for more information.
+====
+
+ifdef::VK_EXT_display_control[]
+include::{chapters}/VK_EXT_display_control/fence_events.adoc[]
+endif::VK_EXT_display_control[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
+[[synchronization-fences-importing]]
+=== Importing Fence Payloads
+
+Applications can: import a fence payload into an existing fence using an
+external fence handle.
+The effects of the import operation will be either temporary or permanent,
+as specified by the application.
+If the import is temporary, the fence will be _restored_ to its permanent
+state the next time that fence is passed to flink:vkResetFences.
+
+[NOTE]
+.Note
+====
+Restoring a fence to its prior permanent payload is a distinct operation
+from resetting a fence payload.
+See flink:vkResetFences for more detail.
+====
+
+Performing a subsequent temporary import on a fence before resetting it has
+no effect on this requirement; the next unsignal of the fence must: still
+restore its last permanent state.
+A permanent payload import behaves as if the target fence was destroyed, and
+a new fence was created with the same handle but the imported payload.
+Because importing a fence payload temporarily or permanently detaches the
+existing payload from a fence, similar usage restrictions to those applied
+to fname:vkDestroyFence are applied to any command that imports a fence
+payload.
+Which of these import types is used is referred to as the import operation's
+_permanence_.
+Each handle type supports either one or both types of permanence.
+
+The implementation must: perform the import operation by either referencing
+or copying the payload referred to by the specified external fence handle,
+depending on the handle's type.
+The import method used is referred to as the handle type's _transference_.
+When using handle types with reference transference, importing a payload to
+a fence adds the fence to the set of all fences sharing that payload.
+This set includes the fence from which the payload was exported.
+Fence signaling, waiting, and resetting operations performed on any fence in
+the set must: behave as if the set were a single fence.
+Importing a payload using handle types with copy transference creates a
+duplicate copy of the payload at the time of import, but makes no further
+reference to it.
+Fence signaling, waiting, and resetting operations performed on the target
+of copy imports must: not affect any other fence or payload.
+
+Export operations have the same transference as the specified handle type's
+import operations.
+Additionally, exporting a fence payload to a handle with copy transference
+has the same side effects on the source fence's payload as executing a fence
+reset operation.
+If the fence was using a temporarily imported payload, the fence's prior
+permanent payload will be restored.
+
+ifdef::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
+[NOTE]
+.Note
+====
+The
+ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[tables]
+ifndef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[table]
+ifdef::VK_KHR_external_fence_win32[]
+<<synchronization-fence-handletypes-win32,Handle Types Supported by
+sname:VkImportFenceWin32HandleInfoKHR>>
+endif::VK_KHR_external_fence_win32[]
+ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[and]
+ifdef::VK_KHR_external_fence_fd[]
+<<synchronization-fence-handletypes-fd,Handle Types Supported by
+sname:VkImportFenceFdInfoKHR>>
+endif::VK_KHR_external_fence_fd[]
+ifdef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[define]
+ifndef::VK_KHR_external_fence_win32+VK_KHR_external_fence_fd[defines]
+the permanence and transference of each handle type.
+====
+endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
+
+<<fundamentals-threadingbehavior,External synchronization>> allows
+implementations to modify an object's internal state, i.e. payload, without
+internal synchronization.
+However, for fences sharing a payload across processes, satisfying the
+external synchronization requirements of sname:VkFence parameters as if all
+fences in the set were the same object is sometimes infeasible.
+Satisfying valid usage constraints on the state of a fence would similarly
+require impractical coordination or levels of trust between processes.
+Therefore, these constraints only apply to a specific fence handle, not to
+its payload.
+For distinct fence objects which share a payload:
+
+  * If multiple commands which queue a signal operation, or which unsignal a
+    fence, are called concurrently, behavior will be as if the commands were
+    called in an arbitrary sequential order.
+  * If a queue submission command is called with a fence that is sharing a
+    payload, and the payload is already associated with another queue
+    command that has not yet completed execution, either one or both of the
+    commands will cause the fence to become signaled when they complete
+    execution.
+  * If a fence payload is reset while it is associated with a queue command
+    that has not yet completed execution, the payload will become
+    unsignaled, but may: become signaled again when the command completes
+    execution.
+  * In the preceding cases, any of the devices associated with the fences
+    sharing the payload may: be lost, or any of the queue submission or
+    fence reset commands may: return ename:VK_ERROR_INITIALIZATION_FAILED.
+
+Other than these non-deterministic results, behavior is well defined.
+In particular:
+
+  * The implementation must: not crash or enter an internally inconsistent
+    state where future valid Vulkan commands might cause undefined: results,
+  * Timeouts on future wait commands on fences sharing the payload must: be
+    effective.
+
+[NOTE]
+.Note
+====
+These rules allow processes to synchronize access to shared memory without
+trusting each other.
+However, such processes must still be cautious not to use the shared fence
+for more than synchronizing access to the shared memory.
+For example, a process should not use a fence with shared payload to tell
+when commands it submitted to a queue have completed and objects used by
+those commands may be destroyed, since the other process can accidentally or
+maliciously cause the fence to signal before the commands actually complete.
+====
+
+When a fence is using an imported payload, its
+slink:VkExportFenceCreateInfo::pname:handleTypes value is specified when
+creating the fence from which the payload was exported, rather than
+specified when creating the fence.
+Additionally,
+slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes
+restricts which handle types can: be exported from such a fence based on the
+specific handle type used to import the current payload.
+ifdef::VK_KHR_swapchain[]
+Passing a fence to flink:vkAcquireNextImageKHR is equivalent to temporarily
+importing a fence payload to that fence.
+
+[NOTE]
+.Note
+====
+Because the exportable handle types of an imported fence correspond to its
+current imported payload, and flink:vkAcquireNextImageKHR behaves the same
+as a temporary import operation for which the source fence is opaque to the
+application, applications have no way of determining whether any external
+handle types can: be exported from a fence in this state.
+Therefore, applications must: not attempt to export handles from fences
+using a temporarily imported payload from flink:vkAcquireNextImageKHR.
+====
+endif::VK_KHR_swapchain[]
+
+When importing a fence payload, it is the responsibility of the application
+to ensure the external handles meet all valid usage requirements.
+However, implementations must: perform sufficient validation of external
+handles to ensure that the operation results in a valid fence which will not
+cause program termination, device loss, queue stalls, host thread stalls, or
+corruption of other resources when used as allowed according to its import
+parameters.
+If the external handle provided does not meet these requirements, the
+implementation must: fail the fence payload import operation with the error
+code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
+endif::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+ifdef::VK_KHR_external_fence_win32[]
+[open,refpage='vkImportFenceWin32HandleKHR',desc='Import a fence from a Windows HANDLE',type='protos']
+--
+To import a fence payload from a Windows handle, call:
+
+include::{generated}/api/protos/vkImportFenceWin32HandleKHR.adoc[]
+
+  * pname:device is the logical device that created the fence.
+  * pname:pImportFenceWin32HandleInfo is a pointer to a
+    slink:VkImportFenceWin32HandleInfoKHR structure specifying the fence and
+    import parameters.
+
+Importing a fence payload from Windows handles does not transfer ownership
+of the handle to the Vulkan implementation.
+For handle types defined as NT handles, the application must: release
+ownership using the code:CloseHandle system call when the handle is no
+longer needed.
+
+Applications can: import the same fence payload into multiple instances of
+Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+
+.Valid Usage
+****
+  * [[VUID-vkImportFenceWin32HandleKHR-fence-04448]]
+    pname:fence must: not be associated with any queue command that has not
+    yet completed execution on that queue
+****
+
+include::{generated}/validity/protos/vkImportFenceWin32HandleKHR.adoc[]
+--
+
+[open,refpage='VkImportFenceWin32HandleInfoKHR',desc='(None)',type='structs']
+--
+The sname:VkImportFenceWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportFenceWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence into which the state will be imported.
+  * pname:flags is a bitmask of elink:VkFenceImportFlagBits specifying
+    additional parameters for the fence payload import operation.
+  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
+    specifying the type of pname:handle.
+  * pname:handle is `NULL` or the external handle to import.
+  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
+    underlying synchronization primitive to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-fence-handletypes-win32]]
+.Handle Types Supported by sname:VkImportFenceWin32HandleInfoKHR
+[width="80%",options="header"]
+|====
+| Handle Type                                                  | Transference | Permanence Supported
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT     | Reference    | Temporary,Permanent
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Reference    | Temporary,Permanent
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457]]
+    pname:handleType must: be a value included in the
+    <<synchronization-fence-handletypes-win32, Handle Types Supported by
+    sname:VkImportFenceWin32HandleInfoKHR>> table
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459]]
+    If pname:handleType is not
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, pname:name must:
+    be `NULL`
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460]]
+    If pname:handle is `NULL`, pname:name must: name a valid synchronization
+    primitive of the type specified by pname:handleType
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461]]
+    If pname:name is `NULL`, pname:handle must: be a valid handle of the
+    type specified by pname:handleType
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handle-01462]]
+    If pname:handle is not `NULL`, pname:name must: be `NULL`
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-handle-01539]]
+    If pname:handle is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in <<external-fence-handle-types-compatibility,external
+    fence handle types compatibility>>
+  * [[VUID-VkImportFenceWin32HandleInfoKHR-name-01540]]
+    If pname:name is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in <<external-fence-handle-types-compatibility,external
+    fence handle types compatibility>>
+****
+
+include::{generated}/validity/structs/VkImportFenceWin32HandleInfoKHR.adoc[]
+--
+endif::VK_KHR_external_fence_win32[]
+
+ifdef::VK_KHR_external_fence_fd[]
+[open,refpage='vkImportFenceFdKHR',desc='Import a fence from a POSIX file descriptor',type='protos']
+--
+:refpage: vkImportFenceFdKHR
+
+To import a fence payload from a POSIX file descriptor, call:
+
+include::{generated}/api/protos/vkImportFenceFdKHR.adoc[]
+
+  * pname:device is the logical device that created the fence.
+  * pname:pImportFenceFdInfo is a pointer to a slink:VkImportFenceFdInfoKHR
+    structure specifying the fence and import parameters.
+
+Importing a fence payload from a file descriptor transfers ownership of the
+file descriptor from the application to the Vulkan implementation.
+The application must: not perform any operations on the file descriptor
+after a successful import.
+
+Applications can: import the same fence payload into multiple instances of
+Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkImportFenceFdKHR-fence-01463]]
+    pname:fence must: not be associated with any queue command that has not
+    yet completed execution on that queue
+****
+
+include::{generated}/validity/protos/vkImportFenceFdKHR.adoc[]
+--
+
+[open,refpage='VkImportFenceFdInfoKHR',desc='(None)',type='structs']
+--
+The sname:VkImportFenceFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportFenceFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence into which the payload will be imported.
+  * pname:flags is a bitmask of elink:VkFenceImportFlagBits specifying
+    additional parameters for the fence payload import operation.
+  * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value
+    specifying the type of pname:fd.
+  * pname:fd is the external handle to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-fence-handletypes-fd]]
+.Handle Types Supported by sname:VkImportFenceFdInfoKHR
+[width="80%",options="header"]
+|====
+| Handle Type                                           | Transference | Permanence Supported
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Reference    | Temporary,Permanent
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT   | Copy         | Temporary
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportFenceFdInfoKHR-handleType-01464]]
+    pname:handleType must: be a value included in the
+    <<synchronization-fence-handletypes-fd, Handle Types Supported by
+    sname:VkImportFenceFdInfoKHR>> table
+  * [[VUID-VkImportFenceFdInfoKHR-fd-01541]]
+    pname:fd must: obey any requirements listed for pname:handleType in
+    <<external-fence-handle-types-compatibility,external fence handle types
+    compatibility>>
+  * [[VUID-VkImportFenceFdInfoKHR-handleType-07306]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:flags must: contain
+    ename:VK_FENCE_IMPORT_TEMPORARY_BIT
+****
+
+If pname:handleType is ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, the
+special value `-1` for pname:fd is treated like a valid sync file descriptor
+referring to an object that has already signaled.
+The import operation will succeed and the sname:VkFence will have a
+temporarily imported payload as if a valid file descriptor had been
+provided.
+
+[NOTE]
+.Note
+====
+This special behavior for importing an invalid sync file descriptor allows
+easier interoperability with other system APIs which use the convention that
+an invalid sync file descriptor represents work that has already completed
+and does not need to be waited for.
+It is consistent with the option for implementations to return a `-1` file
+descriptor when exporting a ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+from a sname:VkFence which is signaled.
+====
+
+include::{generated}/validity/structs/VkImportFenceFdInfoKHR.adoc[]
+--
+endif::VK_KHR_external_fence_fd[]
+
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+[open,refpage='vkImportFenceSciSyncFenceNV',desc='Import a fence from a stext:NvSciSyncFence handle',type='protos']
+--
+To import a fence payload from a stext:NvSciSyncFence handle, call:
+
+include::{generated}/api/protos/vkImportFenceSciSyncFenceNV.adoc[]
+
+  * pname:device is the logical device that created the fence.
+  * pname:pImportFenceSciSyncInfo is a pointer to a
+    slink:VkImportFenceSciSyncInfoNV structure containing parameters of the
+    import operation
+
+Importing a fence payload from stext:NvSciSyncFence does not transfer
+ownership of the handle to the Vulkan implementation.
+Vulkan will make a copy of stext:NvSciSyncFence when importing it.
+The application must: release ownership using the NvSciSync API when the
+handle is no longer needed.
+
+.Valid Usage
+****
+  * [[VUID-vkImportFenceSciSyncFenceNV-sciSyncImport-05140]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncImport and
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence, or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncImport
+    and slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence
+    must: be enabled
+  * [[VUID-vkImportFenceSciSyncFenceNV-fence-05141]]
+    pname:fence must: not be associated with any queue command that has not
+    yet completed execution on that queue
+  * [[VUID-vkImportFenceSciSyncFenceNV-pImportFenceSciSyncInfo-05142]]
+    pname:pImportFenceSciSyncInfo->handleType must: be
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV
+****
+
+include::{generated}/validity/protos/vkImportFenceSciSyncFenceNV.adoc[]
+--
+
+[open,refpage='vkImportFenceSciSyncObjNV',desc='Import a fence from a stext:NvSciSyncObj handle',type='protos']
+--
+To import a fence payload from a stext:NvSciSyncObj handle, call:
+
+include::{generated}/api/protos/vkImportFenceSciSyncObjNV.adoc[]
+
+  * pname:device is the logical device that created the fence.
+  * pname:pImportFenceSciSyncInfo is a pointer to a
+    slink:VkImportFenceSciSyncInfoNV structure containing parameters of the
+    import operation
+
+Importing a fence payload from a stext:NvSciSyncObj does not transfer
+ownership of the handle to the Vulkan implementation.
+Vulkan will make a new reference to the stext:NvSciSyncObj object when
+importing it.
+The application must: release ownership using the NvSciSync API when the
+handle is no longer needed.
+
+The application must: not import the same stext:NvSciSyncObj with signaler
+access permissions into multiple instances of slink:VkFence, and must: not
+import into the same instance from which it was exported.
+
+.Valid Usage
+****
+  * [[VUID-vkImportFenceSciSyncObjNV-sciSyncImport-05143]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncImport and
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncFence, or
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncImport
+    and slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncFence
+    must: be enabled
+  * [[VUID-vkImportFenceSciSyncObjNV-fence-05144]]
+    pname:fence must: not be associated with any queue command that has not
+    yet completed execution on that queue
+  * [[VUID-vkImportFenceSciSyncObjNV-pImportFenceSciSyncInfo-05145]]
+    pname:pImportFenceSciSyncInfo->handleType must: be
+    ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV
+****
+
+include::{generated}/validity/protos/vkImportFenceSciSyncObjNV.adoc[]
+--
+
+
+[open,refpage='VkImportFenceSciSyncInfoNV',desc='Structure specifying attributes for importing a SciSync handle as a fence',type='structs']
+--
+The sname:VkImportFenceSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkImportFenceSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:fence is the fence into which the state will be imported.
+  * pname:handleType specifies the type of stext:handle.
+  * pname:handle is the external handle to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-fence-handletypes-sci-sync]]
+.Handle Types Supported by sname:VkImportFenceSciSyncInfoNV
+[width="80%",options="header"]
+|====
+| Handle Type                                           | Transference | Permanence Supported
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV   | Reference | Permanent
+| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV | Copy      | Temporary
+|====
+
+include::{generated}/validity/structs/VkImportFenceSciSyncInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_fence[]
+ifdef::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
+[open,refpage='VkFenceImportFlagBits',desc='Bitmask specifying additional parameters of fence payload import',type='enums']
+--
+Bits which can: be set in
+
+ifdef::VK_KHR_external_fence_win32[]
+  * slink:VkImportFenceWin32HandleInfoKHR::pname:flags
+endif::VK_KHR_external_fence_win32[]
+ifdef::VK_KHR_external_fence_fd[]
+  * slink:VkImportFenceFdInfoKHR::pname:flags
+endif::VK_KHR_external_fence_fd[]
+
+specifying additional parameters of a fence import operation are:
+
+include::{generated}/api/enums/VkFenceImportFlagBits.adoc[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/enums/VkFenceImportFlagBitsKHR.adoc[]
+endif::VK_KHR_external_fence[]
+
+  * ename:VK_FENCE_IMPORT_TEMPORARY_BIT specifies that the fence payload
+    will be imported only temporarily, as described in
+    <<synchronization-fences-importing,Importing Fence Payloads>>,
+    regardless of the permanence of pname:handleType.
+--
+
+[open,refpage='VkFenceImportFlags',desc='Bitmask of VkFenceImportFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkFenceImportFlags.adoc[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/flags/VkFenceImportFlagsKHR.adoc[]
+endif::VK_KHR_external_fence[]
+
+tname:VkFenceImportFlags is a bitmask type for setting a mask of zero or
+more elink:VkFenceImportFlagBits.
+--
+endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
+endif::VK_VERSION_1_1,VK_KHR_external_fence[]
+
+
+[[synchronization-semaphores]]
+== Semaphores
+
+[open,refpage='VkSemaphore',desc='Opaque handle to a semaphore object',type='handles']
+--
+Semaphores are a synchronization primitive that can: be used to insert a
+dependency
+ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+between queue operations.
+Semaphores have two states - signaled and unsignaled.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+between queue operations or between a queue operation and the host.
+<<glossary, Binary semaphores>> have two states - signaled and unsignaled.
+<<glossary, Timeline semaphores>> have a strictly increasing 64-bit unsigned
+integer payload and are signaled with respect to a particular reference
+value.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+A semaphore can: be signaled after execution of a queue operation is
+completed, and a queue operation can: wait for a semaphore to become
+signaled before it begins execution.
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+A timeline semaphore can: additionally be signaled from the host with the
+flink:vkSignalSemaphore command and waited on from the host with the
+flink:vkWaitSemaphores command.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+[[synchronization-semaphores-payloads]]
+The internal data of a semaphore may: include a reference to any resources
+and pending work associated with signal or unsignal operations performed on
+that semaphore object, collectively referred to as the semaphore's
+_payload_.
+Mechanisms to import and export that internal data to and from semaphores
+are provided <<VkExportSemaphoreCreateInfo, below>>.
+These mechanisms indirectly enable applications to share semaphore state
+between two or more semaphores and other synchronization primitives across
+process and API boundaries.
+
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+Semaphores are represented by sname:VkSemaphore handles:
+
+include::{generated}/api/handles/VkSemaphore.adoc[]
+--
+
+[open,refpage='vkCreateSemaphore',desc='Create a new queue semaphore object',type='protos']
+--
+:refpage: vkCreateSemaphore
+:objectnameplural: semaphores
+:objectnamecamelcase: semaphore
+:objectcount: 1
+
+To create a semaphore, call:
+
+include::{generated}/api/protos/vkCreateSemaphore.adoc[]
+
+  * pname:device is the logical device that creates the semaphore.
+  * pname:pCreateInfo is a pointer to a slink:VkSemaphoreCreateInfo
+    structure containing information about how the semaphore is to be
+    created.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pSemaphore is a pointer to a handle in which the resulting
+    semaphore object is returned.
+
+ifndef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+This command creates a _binary semaphore_ that has a boolean payload
+indicating whether the semaphore is currently signaled or unsignaled.
+When created, the semaphore is in the unsignaled state.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+endif::VKSC_VERSION_1_0[]
+
+include::{generated}/validity/protos/vkCreateSemaphore.adoc[]
+--
+
+[open,refpage='VkSemaphoreCreateInfo',desc='Structure specifying parameters of a newly created semaphore',type='structs']
+--
+The sname:VkSemaphoreCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+
+ifdef::VK_EXT_metal_objects,VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+.Valid Usage
+****
+ifdef::VK_EXT_metal_objects[]
+  * [[VUID-VkSemaphoreCreateInfo-pNext-06789]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT
+endif::VK_EXT_metal_objects[]
+ifdef::VK_NV_external_sci_sync[]
+  * [[VUID-VkSemaphoreCreateInfo-pNext-05118]]
+    If the pname:pNext chain includes slink:VkExportSemaphoreSciSyncInfoNV,
+    it must: also include slink:VkSemaphoreTypeCreateInfo with a
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+endif::VK_NV_external_sci_sync[]
+ifdef::VK_NV_external_sci_sync2[]
+  * [[VUID-VkSemaphoreCreateInfo-pNext-05146]]
+    If the pname:pNext chain includes slink:VkSemaphoreSciSyncCreateInfoNV,
+    it must: also include slink:VkSemaphoreTypeCreateInfo with a
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+endif::VK_NV_external_sci_sync2[]
+****
+endif::VK_EXT_metal_objects,VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+
+include::{generated}/validity/structs/VkSemaphoreCreateInfo.adoc[]
+--
+
+[open,refpage='VkSemaphoreCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkSemaphoreCreateFlags.adoc[]
+
+tname:VkSemaphoreCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[open,refpage='VkSemaphoreTypeCreateInfo',desc='Structure specifying the type of a newly created semaphore',type='structs',alias='VkSemaphoreTypeCreateInfoKHR']
+--
+The sname:VkSemaphoreTypeCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreTypeCreateInfo.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreTypeCreateInfoKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphoreType is a elink:VkSemaphoreType value specifying the type
+    of the semaphore.
+  * pname:initialValue is the initial payload value if pname:semaphoreType
+    is ename:VK_SEMAPHORE_TYPE_TIMELINE.
+
+To create a semaphore of a specific type, add a
+sname:VkSemaphoreTypeCreateInfo structure to the
+slink:VkSemaphoreCreateInfo::pname:pNext chain.
+
+If no sname:VkSemaphoreTypeCreateInfo structure is included in the
+pname:pNext chain of slink:VkSemaphoreCreateInfo, then the created semaphore
+will have a default elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY.
+
+ifdef::VK_NV_external_sci_sync2[]
+If slink:VkSemaphoreSciSyncCreateInfoNV structure is included in the
+pname:pNext chain of sname:VkSemaphoreTypeCreateInfo, pname:initialValue is
+ignored.
+endif::VK_NV_external_sci_sync2[]
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252]]
+    If the <<features-timelineSemaphore, pname:timelineSemaphore>> feature
+    is not enabled, pname:semaphoreType must: not equal
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+  * [[VUID-VkSemaphoreTypeCreateInfo-semaphoreType-03279]]
+    If pname:semaphoreType is ename:VK_SEMAPHORE_TYPE_BINARY,
+    pname:initialValue must: be zero
+ifdef::VK_NV_external_sci_sync[]
+  * [[VUID-VkSemaphoreTypeCreateInfo-pNext-05119]]
+    If the pname:pNext chain includes slink:VkExportSemaphoreSciSyncInfoNV,
+    pname:initialValue must: be zero.
+endif::VK_NV_external_sci_sync[]
+****
+
+include::{generated}/validity/structs/VkSemaphoreTypeCreateInfo.adoc[]
+--
+
+[open,refpage='VkSemaphoreType',desc='Specifies the type of a semaphore object',type='enums',alias='VkSemaphoreTypeKHR']
+--
+Possible values of slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType,
+specifying the type of a semaphore, are:
+
+include::{generated}/api/enums/VkSemaphoreType.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreTypeKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * ename:VK_SEMAPHORE_TYPE_BINARY specifies a _binary semaphore_ type that
+    has a boolean payload indicating whether the semaphore is currently
+    signaled or unsignaled.
+    When created, the semaphore is in the unsignaled state.
+  * ename:VK_SEMAPHORE_TYPE_TIMELINE specifies a _timeline semaphore_ type
+    that has a strictly increasing 64-bit unsigned integer payload
+    indicating whether the semaphore is signaled with respect to a
+    particular reference value.
+    When created, the semaphore payload has the value given by the
+    pname:initialValue field of slink:VkSemaphoreTypeCreateInfo.
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+[open,refpage='VkExportSemaphoreCreateInfo',desc='Structure specifying handle types that can be exported from a semaphore',type='structs']
+--
+To create a semaphore whose payload can: be exported to external handles,
+add a slink:VkExportSemaphoreCreateInfo structure to the pname:pNext chain
+of the slink:VkSemaphoreCreateInfo structure.
+The sname:VkExportSemaphoreCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkExportSemaphoreCreateInfo.adoc[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportSemaphoreCreateInfoKHR.adoc[]
+endif::VK_KHR_external_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is a bitmask of
+    elink:VkExternalSemaphoreHandleTypeFlagBits specifying one or more
+    semaphore handle types the application can: export from the resulting
+    semaphore.
+    The application can: request multiple handle types for the same
+    semaphore.
+
+.Valid Usage
+****
+  * [[VUID-VkExportSemaphoreCreateInfo-handleTypes-01124]]
+    The bits in pname:handleTypes must: be supported and compatible, as
+    reported by slink:VkExternalSemaphoreProperties
+ifdef::VK_NV_external_sci_sync[]
+  * [[VUID-VkExportSemaphoreCreateInfo-pNext-05120]]
+    If the pname:pNext chain includes a sname:VkExportSemaphoreSciSyncInfoNV
+    structure,
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncSemapore
+    and slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncExport
+    must: be enabled
+endif::VK_NV_external_sci_sync[]
+****
+
+include::{generated}/validity/structs/VkExportSemaphoreCreateInfo.adoc[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+ifdef::VK_KHR_external_semaphore_win32[]
+[open,refpage='VkExportSemaphoreWin32HandleInfoKHR',desc='Structure specifying additional attributes of Windows handles exported from a semaphore',type='structs']
+--
+To specify additional attributes of NT handles exported from a semaphore,
+add a sname:VkExportSemaphoreWin32HandleInfoKHR structure to the pname:pNext
+chain of the slink:VkSemaphoreCreateInfo structure.
+The sname:VkExportSemaphoreWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkExportSemaphoreWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is a pointer to a Windows code:SECURITY_ATTRIBUTES
+    structure specifying security attributes of the handle.
+  * pname:dwAccess is a code:DWORD specifying access rights of the handle.
+  * pname:name is a null-terminated UTF-16 string to associate with the
+    underlying synchronization primitive referenced by NT handles exported
+    from the created semaphore.
+
+If slink:VkExportSemaphoreCreateInfo is not included in the same pname:pNext
+chain, this structure is ignored.
+
+If slink:VkExportSemaphoreCreateInfo is included in the pname:pNext chain of
+slink:VkSemaphoreCreateInfo with a Windows pname:handleType, but either
+sname:VkExportSemaphoreWin32HandleInfoKHR is not included in the pname:pNext
+chain, or it is included but pname:pAttributes is set to `NULL`, default
+security descriptor values will be used, and child processes created by the
+application will not inherit the handle, as described in the MSDN
+documentation for "`Synchronization Object Security and Access Rights`"^1^.
+Further, if the structure is not present, the access rights used depend on
+the handle type.
+
+For handles of the following types:
+
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+
+The implementation must: ensure the access rights allow both signal and wait
+operations on the semaphore.
+
+For handles of the following types:
+
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+
+The access rights must: be:
+
+code:GENERIC_ALL
+
+1::
+    https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-object-security-and-access-rights
+
+.Valid Usage
+****
+  * [[VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125]]
+    If slink:VkExportSemaphoreCreateInfo::pname:handleTypes does not include
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
+    sname:VkExportSemaphoreWin32HandleInfoKHR must: not be included in the
+    pname:pNext chain of slink:VkSemaphoreCreateInfo
+****
+
+include::{generated}/validity/structs/VkExportSemaphoreWin32HandleInfoKHR.adoc[]
+--
+
+[open,refpage='vkGetSemaphoreWin32HandleKHR',desc='Get a Windows HANDLE for a semaphore',type='protos']
+--
+To export a Windows handle representing the payload of a semaphore, call:
+
+include::{generated}/api/protos/vkGetSemaphoreWin32HandleKHR.adoc[]
+
+  * pname:device is the logical device that created the semaphore being
+    exported.
+  * pname:pGetWin32HandleInfo is a pointer to a
+    slink:VkSemaphoreGetWin32HandleInfoKHR structure containing parameters
+    of the export operation.
+  * pname:pHandle will return the Windows handle representing the semaphore
+    state.
+
+For handle types defined as NT handles, the handles returned by
+fname:vkGetSemaphoreWin32HandleKHR are owned by the application.
+To avoid leaking resources, the application must: release ownership of them
+using the code:CloseHandle system call when they are no longer needed.
+
+Exporting a Windows handle from a semaphore may: have side effects depending
+on the transference of the specified handle type, as described in
+<<synchronization-semaphores-importing,Importing Semaphore Payloads>>.
+
+include::{generated}/validity/protos/vkGetSemaphoreWin32HandleKHR.adoc[]
+--
+
+[open,refpage='VkSemaphoreGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle semaphore export operation',type='structs']
+--
+The sname:VkSemaphoreGetWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreGetWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore from which state will be exported.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the handle returned depend on the value of
+pname:handleType.
+See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
+properties of the defined external semaphore handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126]]
+    pname:handleType must: have been included in
+    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when the
+    pname:semaphore's current payload was created
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127]]
+    If pname:handleType is defined as an NT handle,
+    flink:vkGetSemaphoreWin32HandleKHR must: be called no more than once for
+    each valid unique combination of pname:semaphore and pname:handleType
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128]]
+    pname:semaphore must: not currently have its payload replaced by an
+    imported payload as described below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
+    unless that imported payload's handle type was included in
+    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
+    for pname:handleType
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, as defined below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
+    there must: be no queue waiting on pname:semaphore
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:semaphore must: be signaled, or have an
+    associated <<synchronization-semaphores-signaling,semaphore signal
+    operation>> pending execution
+  * [[VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131]]
+    pname:handleType must: be defined as an NT handle or a global share
+    handle
+****
+
+include::{generated}/validity/structs/VkSemaphoreGetWin32HandleInfoKHR.adoc[]
+--
+endif::VK_KHR_external_semaphore_win32[]
+
+
+ifdef::VK_NV_low_latency[]
+[open,refpage='VkQueryLowLatencySupportNV',desc='Structure used for NVIDIA Reflex Support',type='structs']
+--
+The sname:VkQueryLowLatencySupportNV structure is defined as:
+
+include::{generated}/api/structs/VkQueryLowLatencySupportNV.adoc[]
+
+This structure describes the following feature:
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pQueriedLowLatencyData is used for NVIDIA Reflex Support.
+
+include::{generated}/validity/structs/VkQueryLowLatencySupportNV.adoc[]
+--
+endif::VK_NV_low_latency[]
+
+ifdef::VK_KHR_external_semaphore_fd[]
+[open,refpage='vkGetSemaphoreFdKHR',desc='Get a POSIX file descriptor handle for a semaphore',type='protos']
+--
+:refpage: vkGetSemaphoreFdKHR
+
+To export a POSIX file descriptor representing the payload of a semaphore,
+call:
+
+include::{generated}/api/protos/vkGetSemaphoreFdKHR.adoc[]
+
+  * pname:device is the logical device that created the semaphore being
+    exported.
+  * pname:pGetFdInfo is a pointer to a slink:VkSemaphoreGetFdInfoKHR
+    structure containing parameters of the export operation.
+  * pname:pFd will return the file descriptor representing the semaphore
+    payload.
+
+Each call to fname:vkGetSemaphoreFdKHR must: create a new file descriptor
+and transfer ownership of it to the application.
+To avoid leaking resources, the application must: release ownership of the
+file descriptor when it is no longer needed.
+
+[NOTE]
+.Note
+====
+Ownership can be released in many ways.
+For example, the application can call code:close() on the file descriptor,
+or transfer ownership back to Vulkan by using the file descriptor to import
+a semaphore payload.
+====
+Where supported by the operating system, the implementation must: set the
+file descriptor to be closed automatically when an code:execve system call
+is made.
+
+Exporting a file descriptor from a semaphore may: have side effects
+depending on the transference of the specified handle type, as described in
+<<synchronization-semaphores-importing,Importing Semaphore State>>.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetSemaphoreFdKHR.adoc[]
+--
+
+[open,refpage='VkSemaphoreGetFdInfoKHR',desc='Structure describing a POSIX FD semaphore export operation',type='structs']
+--
+The sname:VkSemaphoreGetFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreGetFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore from which state will be exported.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the file descriptor returned depend on the value of
+pname:handleType.
+See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
+properties of the defined external semaphore handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01132]]
+    pname:handleType must: have been included in
+    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when
+    pname:semaphore's current payload was created
+  * [[VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133]]
+    pname:semaphore must: not currently have its payload replaced by an
+    imported payload as described below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
+    unless that imported payload's handle type was included in
+    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
+    for pname:handleType
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01134]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, as defined below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
+    there must: be no queue waiting on pname:semaphore
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01135]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:semaphore must: be signaled, or have an
+    associated <<synchronization-semaphores-signaling,semaphore signal
+    operation>> pending execution
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-01136]]
+    pname:handleType must: be defined as a POSIX file descriptor handle
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-03253]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:semaphore must: have been created with a
+    elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
+  * [[VUID-VkSemaphoreGetFdInfoKHR-handleType-03254]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:semaphore must: have an associated
+    semaphore signal operation that has been submitted for execution and any
+    semaphore signal operations on which it depends (if any) must: have also
+    been submitted for execution
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/structs/VkSemaphoreGetFdInfoKHR.adoc[]
+--
+endif::VK_KHR_external_semaphore_fd[]
+
+ifdef::VK_FUCHSIA_external_semaphore[]
+[open,refpage='vkGetSemaphoreZirconHandleFUCHSIA',desc='Get a Zircon event handle for a semaphore',type='protos']
+--
+To export a Zircon event handle representing the payload of a semaphore,
+call:
+
+include::{generated}/api/protos/vkGetSemaphoreZirconHandleFUCHSIA.adoc[]
+
+  * pname:device is the logical device that created the semaphore being
+    exported.
+  * pname:pGetZirconHandleInfo is a pointer to a
+    slink:VkSemaphoreGetZirconHandleInfoFUCHSIA structure containing
+    parameters of the export operation.
+  * pname:pZirconHandle will return the Zircon event handle representing the
+    semaphore payload.
+
+Each call to fname:vkGetSemaphoreZirconHandleFUCHSIA must: create a Zircon
+event handle and transfer ownership of it to the application.
+To avoid leaking resources, the application must: release ownership of the
+Zircon event handle when it is no longer needed.
+
+[NOTE]
+.Note
+====
+Ownership can be released in many ways.
+For example, the application can call zx_handle_close() on the file
+descriptor, or transfer ownership back to Vulkan by using the file
+descriptor to import a semaphore payload.
+====
+
+Exporting a Zircon event handle from a semaphore may: have side effects
+depending on the transference of the specified handle type, as described in
+<<synchronization-semaphores-importing,Importing Semaphore State>>.
+
+include::{generated}/validity/protos/vkGetSemaphoreZirconHandleFUCHSIA.adoc[]
+--
+
+[open,refpage='VkSemaphoreGetZirconHandleInfoFUCHSIA',desc='Structure describing a Zircon event handle semaphore export operation',type='structs']
+--
+The sname:VkSemaphoreGetZirconHandleInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreGetZirconHandleInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore from which state will be exported.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of handle requested.
+
+The properties of the Zircon event handle returned depend on the value of
+pname:handleType.
+See elink:VkExternalSemaphoreHandleTypeFlagBits for a description of the
+properties of the defined external semaphore handle types.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04758]]
+    pname:handleType must: have been included in
+    slink:VkExportSemaphoreCreateInfo::pname:handleTypes when
+    pname:semaphore's current payload was created
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04759]]
+    pname:semaphore must: not currently have its payload replaced by an
+    imported payload as described below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>
+    unless that imported payload's handle type was included in
+    slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
+    for pname:handleType
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04760]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, as defined below in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
+    there must: be no queue waiting on pname:semaphore
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04761]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:semaphore must: be signaled, or have an
+    associated <<synchronization-semaphores-signaling,semaphore signal
+    operation>> pending execution
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04762]]
+    pname:handleType must: be defined as a Zircon event handle
+  * [[VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04763]]
+    pname:semaphore must: have been created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_BINARY
+****
+
+include::{generated}/validity/structs/VkSemaphoreGetZirconHandleInfoFUCHSIA.adoc[]
+--
+endif::VK_FUCHSIA_external_semaphore[]
+
+ifdef::VK_NV_external_sci_sync[]
+[open,refpage='VkExportSemaphoreSciSyncInfoNV',desc='Structure specifying additional attributes of NvSciSync handles exported from a semaphore',type='structs']
+--
+To specify additional attributes of NvSciSync handles exported from a
+semaphore, add a sname:VkExportSemaphoreSciSyncInfoNV structure to the
+pname:pNext chain of the slink:VkSemaphoreCreateInfo structure.
+The sname:VkExportSemaphoreSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkExportSemaphoreSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pAttributes is an opaque sname:NvSciSyncAttrList describing the
+    attributes of the NvSciSync object that will be exported.
+
+If slink:VkExportSemaphoreCreateInfo is not present in the same pname:pNext
+chain, this structure is ignored.
+If the pname:pNext chain of slink:VkSemaphoreCreateInfo includes a
+slink:VkExportSemaphoreCreateInfo structure with a NvSciSync
+pname:handleType, but either slink:VkExportSemaphoreSciSyncInfoNV is not
+included in the pname:pNext chain, or it is included but pname:pAttributes
+is set to `NULL`, flink:vkCreateSemaphore will return
+ename:VK_ERROR_INITIALIZATION_FAILED.
+
+The pname:pAttributes must: be a reconciled sname:NvSciSyncAttrList.
+Before exporting a NvSciSync handle, the application must: use the
+flink:vkGetPhysicalDeviceSciSyncAttributesNV command to obtain the
+unreconciled sname:NvSciSyncAttrList and then use the NvSciSync API to
+reconcile it.
+
+.Valid Usage
+****
+  * [[VUID-VkExportSemaphoreSciSyncInfoNV-pAttributes-05121]]
+    pname:pAttributes must: be a reconciled stext:NvSciSyncAttrList
+****
+
+include::{generated}/validity/structs/VkExportSemaphoreSciSyncInfoNV.adoc[]
+--
+
+[open,refpage='vkGetSemaphoreSciSyncObjNV',desc='Get a stext:NvSciSyncObj handle for a semaphore',type='protos']
+--
+
+To export a stext:NvSciSyncObj handle representing the payload of a
+semaphore, call:
+
+include::{generated}/api/protos/vkGetSemaphoreSciSyncObjNV.adoc[]
+
+  * pname:device is the logical device that created the semaphore being
+    exported.
+  * pname:pGetSciSyncInfo is a pointer to a
+    slink:VkSemaphoreGetSciSyncInfoNV structure containing parameters of the
+    export operation.
+  * pname:pHandle will return the stext:NvSciSyncObj representing the
+    semaphore payload.
+
+Each call to fname:vkGetSemaphoreSciSyncObjNV will duplicate the underlying
+stext:NvSciSyncObj and transfer the ownership of the stext:NvSciSyncObj
+handle to the application.
+To avoid leaking resources, the application must: release ownership of the
+stext:NvSciSyncObj when it is no longer needed.
+
+.Valid Usage
+****
+  * [[VUID-vkGetSemaphoreSciSyncObjNV-sciSyncSemaphore-05147]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncSemaphore
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetSemaphoreSciSyncObjNV.adoc[]
+--
+
+[open,refpage='VkSemaphoreGetSciSyncInfoNV',desc='Structure describing a slink:VkSemaphore export operation to NvSciSync',type='structs']
+--
+
+The sname:VkSemaphoreGetSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreGetSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore from which state will be exported.
+  * pname:handleType is the type of NvSciSync handle (stext:NvSciSyncObj)
+    representing the semaphore that will be exported.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreGetSciSyncInfoNV-handleType-05122]]
+    pname:handleType must: be
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV
+  * [[VUID-VkSemaphoreGetSciSyncInfoNV-semaphore-05123]]
+    pname:semaphore must: have been created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+  * [[VUID-VkSemaphoreGetSciSyncInfoNV-semaphore-05129]]
+    pname:semaphore must: have been created with
+    slink:VkExportSemaphoreSciSyncInfoNV included pname:pNext chain of
+    slink:VkSemaphoreCreateInfo, or previously imported by
+    flink:vkImportSemaphoreSciSyncObjNV
+****
+
+include::{generated}/validity/structs/VkSemaphoreGetSciSyncInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync[]
+
+ifdef::VK_NV_external_sci_sync2[]
+[open,refpage='VkSemaphoreSciSyncCreateInfoNV',desc='Structure to create a semaphore from a semaphore SciSync pool',type='structs']
+--
+The sname:VkSemaphoreSciSyncCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreSciSyncCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphorePool is a slink:VkSemaphoreSciSyncPoolNV handle.
+  * pname:pFence is a pointer to a stext:NvSciSyncFence.
+
+When slink:VkSemaphoreSciSyncCreateInfoNV is included in
+slink:VkSemaphoreCreateInfo::pname:pNext chain, the semaphore is created
+from the slink:VkSemaphoreSciSyncPoolNV handle that represents a
+stext:NvSciSyncObj with one or more primitives.
+The slink:VkSemaphoreSciSyncCreateInfoNV::pname:pFence parameter provides
+the information to select the corresponding primitive represented by this
+semaphore.
+When a stext:NvSciSyncObj with signaler permissions is imported to
+slink:VkSemaphoreSciSyncPoolNV, it only supports one primitive and
+slink:VkSemaphoreSciSyncCreateInfoNV::pname:pFence must: be in the cleared
+state.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreSciSyncCreateInfoNV-sciSyncSemaphore2-05148]]
+    The <<features-sciSyncSemaphore2,
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncSemaphore2>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/structs/VkSemaphoreSciSyncCreateInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync2[]
+
+
+[open,refpage='vkDestroySemaphore',desc='Destroy a semaphore object',type='protos']
+--
+To destroy a semaphore, call:
+
+include::{generated}/api/protos/vkDestroySemaphore.adoc[]
+
+  * pname:device is the logical device that destroys the semaphore.
+  * pname:semaphore is the handle of the semaphore to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+ifdef::VK_NV_external_sci_sync2[]
+If pname:semaphore was created with slink:VkSemaphoreSciSyncCreateInfoNV
+present in the slink:VkSemaphoreCreateInfo::pname:pNext chain,
+pname:semaphore can: be destroyed immediately after all batches that refer
+to it are submitted.
+Otherwise, all submitted batches that refer to pname:semaphore must: have
+completed execution before it can be destroyed.
+endif::VK_NV_external_sci_sync2[]
+
+.Valid Usage
+****
+ifndef::VK_NV_external_sci_sync2[]
+  * [[VUID-vkDestroySemaphore-semaphore-01137]]
+    All submitted batches that refer to pname:semaphore must: have completed
+    execution
+endif::VK_NV_external_sci_sync2[]
+ifdef::VK_NV_external_sci_sync2[]
+  * [[VUID-vkDestroySemaphore-semaphore-05149]]
+    If pname:semaphore was not created with
+    slink:VkSemaphoreSciSyncCreateInfoNV present in the
+    slink:VkSemaphoreCreateInfo::pname:pNext chain when it was created, all
+    submitted batches that refer to pname:semaphore must: have completed
+    execution
+endif::VK_NV_external_sci_sync2[]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroySemaphore-semaphore-01138]]
+    If sname:VkAllocationCallbacks were provided when pname:semaphore was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroySemaphore-semaphore-01139]]
+    If no sname:VkAllocationCallbacks were provided when pname:semaphore was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroySemaphore.adoc[]
+--
+
+ifdef::VK_NV_external_sci_sync2[]
+=== Semaphore SciSync Pools
+
+A semaphore SciSync pool is used to represent a stext:NvSciSyncObj with one
+or more primitives.
+
+[open,refpage='VkSemaphoreSciSyncPoolNV',desc='Opaque handle to a semaphore SciSync pool',type='handles']
+--
+Semaphore SciSync pools are represented by sname:VkSemaphoreSciSyncPoolNV
+handles:
+
+include::{generated}/api/handles/VkSemaphoreSciSyncPoolNV.adoc[]
+--
+
+To import a stext:NvSciSyncObj with multiple primitives, use
+flink:vkCreateSemaphoreSciSyncPoolNV to reserve a semaphore pool to map the
+multiple semaphores allocated by stext:NvSciSyncObj.
+Then create a slink:VkSemaphore from the semaphore pool using the index
+provided by the stext:NvSciSyncFence when chaining the
+slink:VkSemaphoreSciSyncCreateInfoNV structure to
+slink:VkSemaphoreCreateInfo.
+
+[open,refpage='vkCreateSemaphoreSciSyncPoolNV',desc='Create a slink:VkSemaphoreSciSyncPoolNV object',type='protos']
+--
+:refpage: vkCreateSemaphoreSciSyncPoolNV
+
+To create a sname:VkSemaphoreSciSyncPoolNV, call:
+
+include::{generated}/api/protos/vkCreateSemaphoreSciSyncPoolNV.adoc[]
+
+  * pname:device is the logical device that creates the semaphore pool.
+  * pname:pCreateInfo is a pointer to a
+    slink:VkSemaphoreSciSyncPoolCreateInfoNV structure containing
+    information about the semaphore SciSync pool being created.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pSemaphorePool is a pointer to a handle in which the resulting
+    semaphore pool object is returned.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifdef::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateSemaphoreSciSyncPoolNV-device-05150]]
+    The number of semaphore pools currently allocated from pname:device plus
+    1 must: be less than or equal to the total number of semaphore pools
+    requested via
+    slink:VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV::pname:semaphoreSciSyncPoolRequestCount
+    specified when pname:device was created
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-vkCreateSemaphoreSciSyncPoolNV-sciSyncSemaphore2-05151]]
+    The <<features-sciSyncSemaphore2,
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncSemaphore2>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateSemaphoreSciSyncPoolNV.adoc[]
+--
+
+[open,refpage='VkSemaphoreSciSyncPoolCreateInfoNV',desc='Structure describing the creation parameters for a SciSync pool',type='structs']
+--
+The sname:VkSemaphoreSciSyncPoolCreateInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreSciSyncPoolCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handle is an external stext:NvSciSyncObj to import.
+
+During flink:vkCreateSemaphoreSciSyncPoolNV, the external stext:NvSciSyncObj
+is imported to sname:VkSemaphoreSciSyncPoolNV.
+The import does not transfer the ownership of the stext:NvSciSyncObj to the
+implementation, but will increment the reference count of that object.
+ifndef::VKSC_VERSION_1_0[]
+flink:vkDestroySemaphoreSciSyncPoolNV will decrement the reference count of
+that object.
+endif::VKSC_VERSION_1_0[]
+The application must: delete other references of the original
+stext:NvSciSyncObj using <<NvSciSync2-extension-page, NvSciSync APIs>> when
+it is no longer needed.
+
+Applications must: not import the same stext:NvSciSyncObj with signaler
+access permissions to multiple instances of sname:VkSemaphoreSciSyncPoolNV.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreSciSyncPoolCreateInfoNV-handle-05152]]
+    pname:handle must: be a valid stext:NvSciSyncObj
+****
+
+include::{generated}/validity/structs/VkSemaphoreSciSyncPoolCreateInfoNV.adoc[]
+--
+
+ifdef::VKSC_VERSION_1_0[]
+ifdef::hidden[]
+// tag::scremoved[]
+ifdef::VK_NV_external_sci_sync2[]
+  * fname:vkDestroySemaphoreSciSyncPoolNV <<SCID-4>>
+endif::VK_NV_external_sci_sync2[]
+// end::scremoved[]
+endif::hidden[]
+
+Semaphore SciSync pools cannot: be freed <<SCID-4>>.
+If
+slink:VkPhysicalDeviceVulkanSC10Properties::<<limits-deviceDestroyFreesMemory,pname:deviceDestroyFreesMemory>>
+is ename:VK_TRUE, the memory is returned to the system and the reference to
+the stext:NvSciSyncObj that was imported is releasd when the device is
+destroyed.
+endif::VKSC_VERSION_1_0[]
+
+ifndef::VKSC_VERSION_1_0[]
+[open,refpage='vkDestroySemaphoreSciSyncPoolNV',desc='Destroy a slink:VkSemaphoreSciSyncPoolNV object',type='protos']
+--
+To destroy a slink:VkSemaphoreSciSyncPoolNV, call:
+
+include::{generated}/api/protos/vkDestroySemaphoreSciSyncPoolNV.adoc[]
+
+  * pname:device is the logical device that destroys the semaphore SciSync
+    pool.
+  * pname:semaphorePool is the handle of the semaphore SciSync pool to
+    destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroySemaphoreSciSyncPoolNV-semaphorePool-05153]]
+    All submitted batches that refer to a semaphore created from
+    pname:semaphorePool must: have completed execution
+  * [[VUID-vkDestroySemaphoreSciSyncPoolNV-sciSyncSemaphore2-05154]]
+    The <<features-sciSyncSemaphore2,
+    slink:VkPhysicalDeviceExternalSciSync2FeaturesNV::pname:sciSyncSemaphore2>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkDestroySemaphoreSciSyncPoolNV.adoc[]
+--
+endif::VKSC_VERSION_1_0[]
+endif::VK_NV_external_sci_sync2[]
+
+
+[[synchronization-semaphores-signaling]]
+=== Semaphore Signaling
+
+When a batch is submitted to a queue via a <<devsandqueues-submission, queue
+submission>>, and it includes semaphores to be signaled, it defines a memory
+dependency on the batch, and defines _semaphore signal operations_ which set
+the semaphores to the signaled state.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+In case of semaphores created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE the semaphore is considered signaled with
+respect to the counter value set to be signaled as specified in
+slink:VkTimelineSemaphoreSubmitInfo or slink:VkSemaphoreSignalInfo.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes every command submitted in the same batch.
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+In the case of flink:vkQueueSubmit2, the first synchronization scope is
+limited to the pipeline stage specified by
+slink:VkSemaphoreSubmitInfo::pname:stageMask.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+Semaphore signal operations that are defined by flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+or flink:vkQueueSubmit2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+additionally include all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+Semaphore signal operations that are defined by flink:vkQueueSubmit
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[or flink:vkQueueSubmit2]
+ifndef::VKSC_VERSION_1_0[or flink:vkQueueBindSparse]
+additionally include in the first synchronization scope any semaphore and
+fence signal operations that occur earlier in
+<<synchronization-signal-operation-order,signal operation order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the semaphore signal operation.
+
+The first <<synchronization-dependencies-access-scopes, access scope>>
+includes all memory access performed by the device.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+empty.
+
+
+[[synchronization-semaphores-waiting]]
+=== Semaphore Waiting
+
+When a batch is submitted to a queue via a <<devsandqueues-submission, queue
+submission>>, and it includes semaphores to be waited on, it defines a
+memory dependency between prior semaphore signal operations and the batch,
+and defines _semaphore wait operations_.
+
+Such semaphore wait operations set the semaphores
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+created with a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+to the unsignaled state.
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+In case of semaphores created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE a prior semaphore signal operation defines
+a memory dependency with a semaphore wait operation if the value the
+semaphore is signaled with is greater than or equal to the value the
+semaphore is waited with, thus the semaphore will continue to be considered
+signaled with respect to the counter value waited on as specified in
+slink:VkTimelineSemaphoreSubmitInfo.
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+The first synchronization scope includes all semaphore signal operations
+that operate on semaphores waited on in the same batch, and that
+happen-before the wait completes.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes every command submitted in the same batch.
+In the case of flink:vkQueueSubmit, the second synchronization scope is
+limited to operations on the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by the corresponding element of pname:pWaitDstStageMask.
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+In the case of flink:vkQueueSubmit2, the second synchronization scope is
+limited to the pipeline stage specified by
+slink:VkSemaphoreSubmitInfo::pname:stageMask.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+Also, in the case of
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+either flink:vkQueueSubmit2 or
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+flink:vkQueueSubmit, the second synchronization scope additionally includes
+all commands that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+empty.
+
+The second <<synchronization-dependencies-access-scopes, access scope>>
+includes all memory access performed by the device.
+
+The semaphore wait operation happens-after the first set of operations in
+the execution dependency, and happens-before the second set of operations in
+the execution dependency.
+
+[NOTE]
+.Note
+====
+Unlike
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+timeline semaphores,
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+fences or events, the act of waiting for a binary semaphore also unsignals
+that semaphore.
+Applications must: ensure that between two such wait operations, the
+semaphore is signaled again, with execution dependencies used to ensure
+these occur in order.
+Binary semaphore waits and signals should thus occur in discrete 1:1 pairs.
+====
+
+ifdef::VK_KHR_swapchain[]
+[NOTE]
+.Note
+====
+A common scenario for using pname:pWaitDstStageMask with values other than
+ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT is when synchronizing a window
+system presentation operation against subsequent command buffers which
+render the next frame.
+In this case, a presentation image must: not be overwritten until the
+presentation operation completes, but other pipeline stages can: execute
+without waiting.
+A mask of ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT prevents
+subsequent color attachment writes from executing until the semaphore
+signals.
+Some implementations may: be able to execute transfer operations and/or
+pre-rasterization work before the semaphore is signaled.
+
+If an image layout transition needs to be performed on a presentable image
+before it is used in a framebuffer, that can: be performed as the first
+operation submitted to the queue after acquiring the image, and should: not
+prevent other work from overlapping with the presentation operation.
+For example, a sname:VkImageMemoryBarrier could use:
+
+  * pname:srcStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+  * pname:srcAccessMask = 0
+  * pname:dstStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+  * pname:dstAccessMask = ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+    ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+  * pname:oldLayout = ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+  * pname:newLayout = ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+
+Alternatively, pname:oldLayout can: be ename:VK_IMAGE_LAYOUT_UNDEFINED, if
+the image's contents need not be preserved.
+
+This barrier accomplishes a dependency chain between previous presentation
+operations and subsequent color attachment output operations, with the
+layout transition performed in between, and does not introduce a dependency
+between previous work and any
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>s.
+More precisely, the semaphore signals after the presentation operation
+completes, the semaphore wait stalls the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage, and there is a
+dependency from that same stage to itself with the layout transition
+performed in between.
+====
+endif::VK_KHR_swapchain[]
+
+
+[[synchronization-semaphores-waiting-state]]
+=== Semaphore State Requirements for Wait Operations
+
+Before waiting on a semaphore, the application must: ensure the semaphore is
+in a valid state for a wait operation.
+Specifically, when a <<synchronization-semaphores-waiting,semaphore wait
+operation>> is submitted to a queue:
+
+  * A binary semaphore must: be signaled, or have an associated
+    <<synchronization-semaphores-signaling,semaphore signal operation>> that
+    is pending execution.
+  * Any <<synchronization-semaphores-signaling,semaphore signal operations>>
+    on which the pending binary semaphore signal operation depends must:
+    also be completed or pending execution.
+  * There must: be no other queue waiting on the same binary semaphore when
+    the operation executes.
+
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+[[synchronization-semaphores-hostops]]
+=== Host Operations on Semaphores
+
+In addition to <<synchronization-semaphores-signaling,semaphore signal
+operations>> and <<synchronization-semaphores-waiting,semaphore wait
+operations>> submitted to device queues, timeline semaphores support the
+following host operations:
+
+  * Query the current counter value of the semaphore using the
+    flink:vkGetSemaphoreCounterValue command.
+  * Wait for a set of semaphores to reach particular counter values using
+    the flink:vkWaitSemaphores command.
+  * Signal the semaphore with a particular counter value from the host using
+    the flink:vkSignalSemaphore command.
+
+[open,refpage='vkGetSemaphoreCounterValue',desc='Query the current state of a timeline semaphore',type='protos',alias='vkGetSemaphoreCounterValueKHR']
+--
+:refpage: vkGetSemaphoreCounterValue
+
+To query the current counter value of a semaphore created with a
+elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_TIMELINE from the host,
+call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkGetSemaphoreCounterValue.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
+
+ifdef::VK_KHR_timeline_semaphore[]
+include::{generated}/api/protos/vkGetSemaphoreCounterValueKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:device is the logical device that owns the semaphore.
+  * pname:semaphore is the handle of the semaphore to query.
+  * pname:pValue is a pointer to a 64-bit integer value in which the current
+    counter value of the semaphore is returned.
+
+[NOTE]
+.Note
+====
+If a <<devsandqueues-submission, queue submission>> command is pending
+execution, then the value returned by this command may: immediately be out
+of date.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetSemaphoreCounterValue-semaphore-03255]]
+    pname:semaphore must: have been created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+****
+
+include::{generated}/validity/protos/vkGetSemaphoreCounterValue.adoc[]
+--
+
+[open,refpage='vkWaitSemaphores',desc='Wait for timeline semaphores on the host',type='protos',alias='vkWaitSemaphoresKHR']
+--
+:refpage: vkWaitSemaphores
+
+To wait for a set of semaphores created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE to reach particular counter values on the
+host, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkWaitSemaphores.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
+
+ifdef::VK_KHR_timeline_semaphore[]
+include::{generated}/api/protos/vkWaitSemaphoresKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:device is the logical device that owns the semaphores.
+  * pname:pWaitInfo is a pointer to a slink:VkSemaphoreWaitInfo structure
+    containing information about the wait condition.
+  * pname:timeout is the timeout period in units of nanoseconds.
+    pname:timeout is adjusted to the closest value allowed by the
+    implementation-dependent timeout accuracy, which may: be substantially
+    longer than one nanosecond, and may: be longer than the requested
+    period.
+
+If the condition is satisfied when fname:vkWaitSemaphores is called, then
+fname:vkWaitSemaphores returns immediately.
+If the condition is not satisfied at the time fname:vkWaitSemaphores is
+called, then fname:vkWaitSemaphores will block and wait until the condition
+is satisfied or the pname:timeout has expired, whichever is sooner.
+
+If pname:timeout is zero, then fname:vkWaitSemaphores does not wait, but
+simply returns information about the current state of the semaphores.
+ename:VK_TIMEOUT will be returned in this case if the condition is not
+satisfied, even though no actual wait was performed.
+
+If the condition is satisfied before the pname:timeout has expired,
+fname:vkWaitSemaphores returns ename:VK_SUCCESS.
+Otherwise, fname:vkWaitSemaphores returns ename:VK_TIMEOUT after the
+pname:timeout has expired.
+
+If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
+the timeout has expired, fname:vkWaitSemaphores must: return in finite time
+with either ename:VK_SUCCESS or ename:VK_ERROR_DEVICE_LOST.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkWaitSemaphores.adoc[]
+--
+
+[open,refpage='VkSemaphoreWaitInfo',desc='Structure containing information about the semaphore wait condition',type='structs',alias='VkSemaphoreWaitInfoKHR']
+--
+The sname:VkSemaphoreWaitInfo structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreWaitInfo.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreWaitInfoKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSemaphoreWaitFlagBits specifying
+    additional parameters for the semaphore wait operation.
+  * pname:semaphoreCount is the number of semaphores to wait on.
+  * pname:pSemaphores is a pointer to an array of pname:semaphoreCount
+    semaphore handles to wait on.
+  * pname:pValues is a pointer to an array of pname:semaphoreCount timeline
+    semaphore values.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreWaitInfo-pSemaphores-03256]]
+    All of the elements of pname:pSemaphores must: reference a semaphore
+    that was created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * [[VUID-VkSemaphoreWaitInfo-pSemaphores-05124]]
+    If any of the semaphores in pname:pSemaphores have stext:NvSciSyncObj as
+    payload, application must: calculate the corresponding timeline
+    semaphore values in pname:pValues by calling
+    <<NvSciSync2-extension-page, NvSciSync APIs>>.
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+****
+
+include::{generated}/validity/structs/VkSemaphoreWaitInfo.adoc[]
+--
+
+[open,refpage='VkSemaphoreWaitFlagBits',desc='Bitmask specifying additional parameters of a semaphore wait operation',type='enums',alias='VkSemaphoreWaitFlagBitsKHR']
+--
+Bits which can: be set in slink:VkSemaphoreWaitInfo::pname:flags, specifying
+additional parameters of a semaphore wait operation, are:
+
+include::{generated}/api/enums/VkSemaphoreWaitFlagBits.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreWaitFlagBitsKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * ename:VK_SEMAPHORE_WAIT_ANY_BIT specifies that the semaphore wait
+    condition is that at least one of the semaphores in
+    sname:VkSemaphoreWaitInfo::pname:pSemaphores has reached the value
+    specified by the corresponding element of
+    sname:VkSemaphoreWaitInfo::pname:pValues.
+    If ename:VK_SEMAPHORE_WAIT_ANY_BIT is not set, the semaphore wait
+    condition is that all of the semaphores in
+    sname:VkSemaphoreWaitInfo::pname:pSemaphores have reached the value
+    specified by the corresponding element of
+    sname:VkSemaphoreWaitInfo::pname:pValues.
+--
+
+[open,refpage='VkSemaphoreWaitFlags',desc='Bitmask of VkSemaphoreWaitFlagBits',type='flags',alias='VkSemaphoreWaitFlagsKHR']
+--
+include::{generated}/api/flags/VkSemaphoreWaitFlags.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/flags/VkSemaphoreWaitFlagsKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+tname:VkSemaphoreWaitFlags is a bitmask type for setting a mask of zero or
+more elink:VkSemaphoreWaitFlagBits.
+--
+
+[open,refpage='vkSignalSemaphore',desc='Signal a timeline semaphore on the host',type='protos',alias='vkSignalSemaphoreKHR']
+--
+:refpage: vkSignalSemaphore
+
+To signal a semaphore created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE with a particular counter value, on the
+host, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkSignalSemaphore.adoc[]
+endif::VK_VERSION_1_2[]
+
+ifdef::VK_VERSION_1_2+VK_KHR_timeline_semaphore[or the equivalent command]
+
+ifdef::VK_KHR_timeline_semaphore[]
+include::{generated}/api/protos/vkSignalSemaphoreKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:device is the logical device that owns the semaphore.
+  * pname:pSignalInfo is a pointer to a slink:VkSemaphoreSignalInfo
+    structure containing information about the signal operation.
+
+When fname:vkSignalSemaphore is executed on the host, it defines and
+immediately executes a <<synchronization-semaphores-signaling,_semaphore
+signal operation_>> which sets the timeline semaphore to the given value.
+
+The first synchronization scope is defined by the host execution model, but
+includes execution of fname:vkSignalSemaphore on the host and anything that
+happened-before it.
+
+The second synchronization scope is empty.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkSignalSemaphore.adoc[]
+--
+
+[open,refpage='VkSemaphoreSignalInfo',desc='Structure containing information about a semaphore signal operation',type='structs',alias='VkSemaphoreSignalInfoKHR']
+--
+The sname:VkSemaphoreSignalInfo structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreSignalInfo.adoc[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreSignalInfoKHR.adoc[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the handle of the semaphore to signal.
+  * pname:value is the value to signal.
+
+.Valid Usage
+****
+  * [[VUID-VkSemaphoreSignalInfo-semaphore-03257]]
+    pname:semaphore must: have been created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+  * [[VUID-VkSemaphoreSignalInfo-value-03258]]
+    pname:value must: have a value greater than the current value of the
+    semaphore
+  * [[VUID-VkSemaphoreSignalInfo-value-03259]]
+    pname:value must: be less than the value of any pending semaphore signal
+    operations
+  * [[VUID-VkSemaphoreSignalInfo-value-03260]]
+    pname:value must: have a value which does not differ from the current
+    value of the semaphore or the value of any outstanding semaphore wait or
+    signal operation on pname:semaphore by more than
+    <<limits-maxTimelineSemaphoreValueDifference,
+    pname:maxTimelineSemaphoreValueDifference>>
+ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+  * [[VUID-VkSemaphoreSignalInfo-semaphores-05125]]
+    If pname:semaphores has stext:NvSciSyncObj as payload, application must:
+    calculate the corresponding timeline semaphore value in pname:value by
+    calling <<NvSciSync2-extension-page, NvSciSync APIs>>.
+endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[]
+****
+
+include::{generated}/validity/structs/VkSemaphoreSignalInfo.adoc[]
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+[[synchronization-semaphores-importing]]
+=== Importing Semaphore Payloads
+
+Applications can: import a semaphore payload into an existing semaphore
+using an external semaphore handle.
+The effects of the import operation will be either temporary or permanent,
+as specified by the application.
+If the import is temporary, the implementation must: restore the semaphore
+to its prior permanent state after submitting the next semaphore wait
+operation.
+Performing a subsequent temporary import on a semaphore before performing a
+semaphore wait has no effect on this requirement; the next wait submitted on
+the semaphore must: still restore its last permanent state.
+A permanent payload import behaves as if the target semaphore was destroyed,
+and a new semaphore was created with the same handle but the imported
+payload.
+Because importing a semaphore payload temporarily or permanently detaches
+the existing payload from a semaphore, similar usage restrictions to those
+applied to fname:vkDestroySemaphore are applied to any command that imports
+a semaphore payload.
+Which of these import types is used is referred to as the import operation's
+_permanence_.
+Each handle type supports either one or both types of permanence.
+
+The implementation must: perform the import operation by either referencing
+or copying the payload referred to by the specified external semaphore
+handle, depending on the handle's type.
+The import method used is referred to as the handle type's _transference_.
+When using handle types with reference transference, importing a payload to
+a semaphore adds the semaphore to the set of all semaphores sharing that
+payload.
+This set includes the semaphore from which the payload was exported.
+Semaphore signaling and waiting operations performed on any semaphore in the
+set must: behave as if the set were a single semaphore.
+Importing a payload using handle types with copy transference creates a
+duplicate copy of the payload at the time of import, but makes no further
+reference to it.
+Semaphore signaling and waiting operations performed on the target of copy
+imports must: not affect any other semaphore or payload.
+
+Export operations have the same transference as the specified handle type's
+import operations.
+Additionally, exporting a semaphore payload to a handle with copy
+transference has the same side effects on the source semaphore's payload as
+executing a semaphore wait operation.
+If the semaphore was using a temporarily imported payload, the semaphore's
+prior permanent payload will be restored.
+
+ifdef::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
+[NOTE]
+.Note
+====
+The permanence and transference of handle types can be found in:
+
+ifdef::VK_KHR_external_semaphore_win32[]
+  * <<synchronization-semaphore-handletypes-win32,Handle Types Supported by
+    sname:VkImportSemaphoreWin32HandleInfoKHR>>
+endif::VK_KHR_external_semaphore_win32[]
+ifdef::VK_KHR_external_semaphore_fd[]
+  * <<synchronization-semaphore-handletypes-fd,Handle Types Supported by
+    sname:VkImportSemaphoreFdInfoKHR>>
+endif::VK_KHR_external_semaphore_fd[]
+ifdef::VK_FUCHSIA_external_semaphore[]
+  * <<synchronization-semaphore-handletypes-fuchsia,Handle Types Supported
+    by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA>>
+endif::VK_FUCHSIA_external_semaphore[]
+====
+endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
+
+<<fundamentals-threadingbehavior,External synchronization>> allows
+implementations to modify an object's internal state, i.e. payload, without
+internal synchronization.
+However, for semaphores sharing a payload across processes, satisfying the
+external synchronization requirements of sname:VkSemaphore parameters as if
+all semaphores in the set were the same object is sometimes infeasible.
+Satisfying the <<synchronization-semaphores-waiting-state,wait operation
+state requirements>> would similarly require impractical coordination or
+levels of trust between processes.
+Therefore, these constraints only apply to a specific semaphore handle, not
+to its payload.
+For distinct semaphore objects which share a payload, if the semaphores are
+passed to separate queue submission commands concurrently, behavior will be
+as if the commands were called in an arbitrary sequential order.
+If the <<synchronization-semaphores-waiting-state,wait operation state
+requirements>> are violated for the shared payload by a queue submission
+command, or if a signal operation is queued for a shared payload that is
+already signaled or has a pending signal operation, effects must: be limited
+to one or more of the following:
+
+  * Returning ename:VK_ERROR_INITIALIZATION_FAILED from the command which
+    resulted in the violation.
+  * Losing the logical device on which the violation occurred immediately or
+    at a future time, resulting in a ename:VK_ERROR_DEVICE_LOST error from
+    subsequent commands, including the one causing the violation.
+  * Continuing execution of the violating command or operation as if the
+    semaphore wait completed successfully after an implementation-dependent
+    timeout.
+    In this case, the state of the payload becomes undefined:, and future
+    operations on semaphores sharing the payload will be subject to these
+    same rules.
+    The semaphore must: be destroyed or have its payload replaced by an
+    import operation to again have a well-defined state.
+
+[NOTE]
+.Note
+====
+These rules allow processes to synchronize access to shared memory without
+trusting each other.
+However, such processes must still be cautious not to use the shared
+semaphore for more than synchronizing access to the shared memory.
+For example, a process should not use a shared semaphore as part of an
+execution dependency chain that, when complete, leads to objects being
+destroyed, if it does not trust other processes sharing the semaphore
+payload.
+====
+
+When a semaphore is using an imported payload, its
+slink:VkExportSemaphoreCreateInfo::pname:handleTypes value is specified when
+creating the semaphore from which the payload was exported, rather than
+specified when creating the semaphore.
+Additionally,
+slink:VkExternalSemaphoreProperties::pname:exportFromImportedHandleTypes
+restricts which handle types can: be exported from such a semaphore based on
+the specific handle type used to import the current payload.
+ifdef::VK_KHR_swapchain[]
+Passing a semaphore to flink:vkAcquireNextImageKHR is equivalent to
+temporarily importing a semaphore payload to that semaphore.
+
+[NOTE]
+.Note
+====
+Because the exportable handle types of an imported semaphore correspond to
+its current imported payload, and flink:vkAcquireNextImageKHR behaves the
+same as a temporary import operation for which the source semaphore is
+opaque to the application, applications have no way of determining whether
+any external handle types can: be exported from a semaphore in this state.
+Therefore, applications must: not attempt to export external handles from
+semaphores using a temporarily imported payload from
+flink:vkAcquireNextImageKHR.
+====
+endif::VK_KHR_swapchain[]
+
+When importing a semaphore payload, it is the responsibility of the
+application to ensure the external handles meet all valid usage
+requirements.
+However, implementations must: perform sufficient validation of external
+handles to ensure that the operation results in a valid semaphore which will
+not cause program termination, device loss, queue stalls, or corruption of
+other resources when used as allowed according to its import parameters, and
+excepting those side effects allowed for violations of the
+<<synchronization-semaphores-waiting-state,valid semaphore state for wait
+operations>> rules.
+If the external handle provided does not meet these requirements, the
+implementation must: fail the semaphore payload import operation with the
+error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
+
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+In addition, when importing a semaphore payload that is not compatible with
+the payload type corresponding to the elink:VkSemaphoreType the semaphore
+was created with, the implementation may: fail the semaphore payload import
+operation with the error code ename:VK_ERROR_INVALID_EXTERNAL_HANDLE.
+
+[NOTE]
+.Note
+====
+As the introduction of the external semaphore handle type
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT predates that of
+timeline semaphores, support for importing semaphore payloads from external
+handles of that type into semaphores created (implicitly or explicitly) with
+a elink:VkSemaphoreType of ename:VK_SEMAPHORE_TYPE_BINARY is preserved for
+backwards compatibility.
+However, applications should: prefer importing such handle types into
+semaphores created with a elink:VkSemaphoreType of
+ename:VK_SEMAPHORE_TYPE_TIMELINE.
+====
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+ifdef::VK_KHR_external_semaphore_win32[]
+[open,refpage='vkImportSemaphoreWin32HandleKHR',desc='Import a semaphore from a Windows HANDLE',type='protos']
+--
+To import a semaphore payload from a Windows handle, call:
+
+include::{generated}/api/protos/vkImportSemaphoreWin32HandleKHR.adoc[]
+
+  * pname:device is the logical device that created the semaphore.
+  * pname:pImportSemaphoreWin32HandleInfo is a pointer to a
+    slink:VkImportSemaphoreWin32HandleInfoKHR structure specifying the
+    semaphore and import parameters.
+
+Importing a semaphore payload from Windows handles does not transfer
+ownership of the handle to the Vulkan implementation.
+For handle types defined as NT handles, the application must: release
+ownership using the code:CloseHandle system call when the handle is no
+longer needed.
+
+Applications can: import the same semaphore payload into multiple instances
+of Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+
+include::{generated}/validity/protos/vkImportSemaphoreWin32HandleKHR.adoc[]
+--
+
+[open,refpage='VkImportSemaphoreWin32HandleInfoKHR',desc='Structure specifying Windows handle to import to a semaphore',type='structs']
+--
+The sname:VkImportSemaphoreWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportSemaphoreWin32HandleInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore into which the payload will be
+    imported.
+  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
+    additional parameters for the semaphore payload import operation.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of pname:handle.
+  * pname:handle is `NULL` or the external handle to import.
+  * pname:name is `NULL` or a null-terminated UTF-16 string naming the
+    underlying synchronization primitive to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-semaphore-handletypes-win32]]
+.Handle Types Supported by sname:VkImportSemaphoreWin32HandleInfoKHR
+[width="80%",options="header"]
+|====
+| Handle Type                                                      | Transference | Permanence Supported
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT     | Reference    | Temporary,Permanent
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Reference    | Temporary,Permanent
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT      | Reference    | Temporary,Permanent
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140]]
+    pname:handleType must: be a value included in the
+    <<synchronization-semaphore-handletypes-win32,Handle Types Supported by
+    sname:VkImportSemaphoreWin32HandleInfoKHR>> table
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466]]
+    If pname:handleType is not
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, pname:name
+    must: be `NULL`
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467]]
+    If pname:handle is `NULL`, pname:name must: name a valid synchronization
+    primitive of the type specified by pname:handleType
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468]]
+    If pname:name is `NULL`, pname:handle must: be a valid handle of the
+    type specified by pname:handleType
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469]]
+    If pname:handle is not `NULL`, pname:name must: be `NULL`
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542]]
+    If pname:handle is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in
+    <<external-semaphore-handle-types-compatibility,external semaphore
+    handle types compatibility>>
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543]]
+    If pname:name is not `NULL`, it must: obey any requirements listed for
+    pname:handleType in
+    <<external-semaphore-handle-types-compatibility,external semaphore
+    handle types compatibility>>
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03261]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the
+    slink:VkSemaphoreCreateInfo::pname:flags field must: match that of the
+    semaphore from which pname:handle or pname:name was exported
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03262]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: match
+    that of the semaphore from which pname:handle or pname:name was exported
+  * [[VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-03322]]
+    If pname:flags contains ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field of the
+    semaphore from which pname:handle or pname:name was exported must: not
+    be ename:VK_SEMAPHORE_TYPE_TIMELINE
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/structs/VkImportSemaphoreWin32HandleInfoKHR.adoc[]
+--
+endif::VK_KHR_external_semaphore_win32[]
+
+ifdef::VK_KHR_external_semaphore_fd[]
+[open,refpage='vkImportSemaphoreFdKHR',desc='Import a semaphore from a POSIX file descriptor',type='protos']
+--
+:refpage: vkImportSemaphoreFdKHR
+
+To import a semaphore payload from a POSIX file descriptor, call:
+
+include::{generated}/api/protos/vkImportSemaphoreFdKHR.adoc[]
+
+  * pname:device is the logical device that created the semaphore.
+  * pname:pImportSemaphoreFdInfo is a pointer to a
+    slink:VkImportSemaphoreFdInfoKHR structure specifying the semaphore and
+    import parameters.
+
+Importing a semaphore payload from a file descriptor transfers ownership of
+the file descriptor from the application to the Vulkan implementation.
+The application must: not perform any operations on the file descriptor
+after a successful import.
+
+Applications can: import the same semaphore payload into multiple instances
+of Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkImportSemaphoreFdKHR-semaphore-01142]]
+    pname:semaphore must: not be associated with any queue command that has
+    not yet completed execution on that queue
+****
+
+include::{generated}/validity/protos/vkImportSemaphoreFdKHR.adoc[]
+--
+
+[open,refpage='VkImportSemaphoreFdInfoKHR',desc='Structure specifying POSIX file descriptor to import to a semaphore',type='structs']
+--
+The sname:VkImportSemaphoreFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportSemaphoreFdInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore into which the payload will be
+    imported.
+  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
+    additional parameters for the semaphore payload import operation.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of pname:fd.
+  * pname:fd is the external handle to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-semaphore-handletypes-fd]]
+.Handle Types Supported by sname:VkImportSemaphoreFdInfoKHR
+[width="80%",options="header"]
+|====
+| Handle Type                                               | Transference | Permanence Supported
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Reference    | Temporary,Permanent
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT   | Copy         | Temporary
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-01143]]
+    pname:handleType must: be a value included in the
+    <<synchronization-semaphore-handletypes-fd,Handle Types Supported by
+    sname:VkImportSemaphoreFdInfoKHR>> table
+  * [[VUID-VkImportSemaphoreFdInfoKHR-fd-01544]]
+    pname:fd must: obey any requirements listed for pname:handleType in
+    <<external-semaphore-handle-types-compatibility,external semaphore
+    handle types compatibility>>
+  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-03263]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the
+    slink:VkSemaphoreCreateInfo::pname:flags field must: match that of the
+    semaphore from which pname:fd was exported
+  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-07307]]
+    If pname:handleType refers to a handle type with copy payload
+    transference semantics, pname:flags must: contain
+    ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-03264]]
+    If pname:handleType is
+    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: match
+    that of the semaphore from which pname:fd was exported
+  * [[VUID-VkImportSemaphoreFdInfoKHR-flags-03323]]
+    If pname:flags contains ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the
+    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field of the
+    semaphore from which pname:fd was exported must: not be
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+If pname:handleType is ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
+the special value `-1` for pname:fd is treated like a valid sync file
+descriptor referring to an object that has already signaled.
+The import operation will succeed and the sname:VkSemaphore will have a
+temporarily imported payload as if a valid file descriptor had been
+provided.
+
+[NOTE]
+.Note
+====
+This special behavior for importing an invalid sync file descriptor allows
+easier interoperability with other system APIs which use the convention that
+an invalid sync file descriptor represents work that has already completed
+and does not need to be waited for.
+It is consistent with the option for implementations to return a `-1` file
+descriptor when exporting a
+ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT from a sname:VkSemaphore
+which is signaled.
+====
+
+include::{generated}/validity/structs/VkImportSemaphoreFdInfoKHR.adoc[]
+--
+endif::VK_KHR_external_semaphore_fd[]
+
+ifdef::VK_FUCHSIA_external_semaphore[]
+[open,refpage='vkImportSemaphoreZirconHandleFUCHSIA',desc='Import a semaphore from a Zircon event handle',type='protos']
+--
+To import a semaphore payload from a Zircon event handle, call:
+
+include::{generated}/api/protos/vkImportSemaphoreZirconHandleFUCHSIA.adoc[]
+
+  * pname:device is the logical device that created the semaphore.
+  * pname:pImportSemaphoreZirconHandleInfo is a pointer to a
+    slink:VkImportSemaphoreZirconHandleInfoFUCHSIA structure specifying the
+    semaphore and import parameters.
+
+Importing a semaphore payload from a Zircon event handle transfers ownership
+of the handle from the application to the Vulkan implementation.
+The application must: not perform any operations on the handle after a
+successful import.
+
+Applications can: import the same semaphore payload into multiple instances
+of Vulkan, into the same instance from which it was exported, and multiple
+times into a given Vulkan instance.
+
+.Valid Usage
+****
+  * [[VUID-vkImportSemaphoreZirconHandleFUCHSIA-semaphore-04764]]
+    pname:semaphore must: not be associated with any queue command that has
+    not yet completed execution on that queue
+****
+
+include::{generated}/validity/protos/vkImportSemaphoreZirconHandleFUCHSIA.adoc[]
+--
+
+[open,refpage='VkImportSemaphoreZirconHandleInfoFUCHSIA',desc='Structure specifying Zircon event handle to import to a semaphore',type='structs']
+--
+The sname:VkImportSemaphoreZirconHandleInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkImportSemaphoreZirconHandleInfoFUCHSIA.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore into which the payload will be
+    imported.
+  * pname:flags is a bitmask of elink:VkSemaphoreImportFlagBits specifying
+    additional parameters for the semaphore payload import operation.
+  * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value
+    specifying the type of pname:zirconHandle.
+  * pname:zirconHandle is the external handle to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-semaphore-handletypes-fuchsia]]
+.Handle Types Supported by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA
+[width="80%",options="header"]
+|====
+| Handle Type                                               | Transference | Permanence Supported
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA   | Reference         | Temporary,Permanent
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-handleType-04765]]
+    pname:handleType must: be a value included in the
+    <<synchronization-semaphore-handletypes-fuchsia,Handle Types Supported
+    by sname:VkImportSemaphoreZirconHandleInfoFUCHSIA>> table
+  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04766]]
+    pname:zirconHandle must: obey any requirements listed for
+    pname:handleType in
+    <<external-semaphore-handle-types-compatibility,external semaphore
+    handle types compatibility>>
+  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04767]]
+    pname:zirconHandle must: have code:ZX_RIGHTS_BASIC and
+    code:ZX_RIGHTS_SIGNAL rights
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-semaphoreType-04768]]
+    The slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: not
+    be ename:VK_SEMAPHORE_TYPE_TIMELINE
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+****
+
+include::{generated}/validity/structs/VkImportSemaphoreZirconHandleInfoFUCHSIA.adoc[]
+--
+endif::VK_FUCHSIA_external_semaphore[]
+
+ifdef::VK_NV_external_sci_sync[]
+[open,refpage='vkImportSemaphoreSciSyncObjNV',desc='Import a semaphore from a SciSync handle',type='protos']
+--
+To import a semaphore payload from a stext:NvSciSyncObj, call:
+
+include::{generated}/api/protos/vkImportSemaphoreSciSyncObjNV.adoc[]
+
+  * pname:device is the logical device that created the semaphore.
+  * pname:pImportSemaphoreSciSyncInfo is a pointer to a
+    slink:VkImportSemaphoreSciSyncInfoNV structure containing parameters of
+    the import operation
+
+Importing a semaphore payload from stext:NvSciSyncObj does not transfer
+ownership of the handle to the Vulkan implementation.
+When importing stext:NvSciSyncObj, Vulkan will make a new reference to that
+object, the application must: release its ownership using
+<<NvSciSync-extension-page, NvSciSync APIs>> when that ownership is no
+longer needed.
+
+Application must: not import the same stext:NvSciSyncObj with signaler
+access permissions into multiple instances of VkSemaphore, and must: not
+import into the same instance from which it was exported.
+
+.Valid Usage
+****
+  * [[VUID-vkImportSemaphoreSciSyncObjNV-sciSyncImport-05155]]
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncImport and
+    slink:VkPhysicalDeviceExternalSciSyncFeaturesNV::pname:sciSyncSemaphore
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkImportSemaphoreSciSyncObjNV.adoc[]
+--
+
+[open,refpage='VkImportSemaphoreSciSyncInfoNV',desc='Structure specifying SciSync handle to import to a semaphore',type='structs']
+--
+The sname:VkImportSemaphoreSciSyncInfoNV structure is defined as:
+
+include::{generated}/api/structs/VkImportSemaphoreSciSyncInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:semaphore is the semaphore into which the payload will be
+    imported.
+  * pname:handleType specifies the type of stext:handle.
+  * pname:handle is the external handle to import.
+
+The handle types supported by pname:handleType are:
+
+[[synchronization-semaphore-handletypes-sci-sync]]
+.Handle Types Supported by sname:VkImportSemaphoreSciSyncInfoNV
+[width="80%",options="header"]
+|====
+| Handle Type                                           | Transference | Permanence Supported
+| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV   | Reference | Permanent
+|====
+
+.Valid Usage
+****
+  * [[VUID-VkImportSemaphoreSciSyncInfoNV-handleType-05126]]
+    pname:handleType must: be a value included in the
+    <<synchronization-semaphore-handletypes-sci-sync, Handle Types Supported
+    by sname:VkImportSemaphoreSciSyncInfoNV>> table
+  * [[VUID-VkImportSemaphoreSciSyncInfoNV-semaphore-05127]]
+    pname:semaphore must: have been created with a elink:VkSemaphoreType of
+    ename:VK_SEMAPHORE_TYPE_TIMELINE
+  * [[VUID-VkImportSemaphoreSciSyncInfoNV-semaphore-05128]]
+    pname:semaphore must: not be associated with any queue command that has
+    not yet completed execution on that queue
+****
+
+include::{generated}/validity/structs/VkImportSemaphoreSciSyncInfoNV.adoc[]
+--
+endif::VK_NV_external_sci_sync[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+ifdef::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
+[open,refpage='VkSemaphoreImportFlagBits',desc='Bitmask specifying additional parameters of semaphore payload import',type='enums']
+--
+Bits which can: be set in
+
+ifdef::VK_KHR_external_semaphore_win32[]
+  * slink:VkImportSemaphoreWin32HandleInfoKHR::pname:flags
+endif::VK_KHR_external_semaphore_win32[]
+ifdef::VK_KHR_external_semaphore_fd[]
+  * slink:VkImportSemaphoreFdInfoKHR::pname:flags
+endif::VK_KHR_external_semaphore_fd[]
+ifdef::VK_FUCHSIA_external_semaphore[]
+  * slink:VkImportSemaphoreZirconHandleInfoFUCHSIA::pname:flags
+endif::VK_FUCHSIA_external_semaphore[]
+
+specifying additional parameters of a semaphore import operation are:
+
+include::{generated}/api/enums/VkSemaphoreImportFlagBits.adoc[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreImportFlagBitsKHR.adoc[]
+endif::VK_KHR_external_semaphore[]
+
+These bits have the following meanings:
+
+  * ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT specifies that the semaphore
+    payload will be imported only temporarily, as described in
+    <<synchronization-semaphores-importing,Importing Semaphore Payloads>>,
+    regardless of the permanence of pname:handleType.
+--
+
+[open,refpage='VkSemaphoreImportFlags',desc='Bitmask of VkSemaphoreImportFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkSemaphoreImportFlags.adoc[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/flags/VkSemaphoreImportFlagsKHR.adoc[]
+endif::VK_KHR_external_semaphore[]
+
+tname:VkSemaphoreImportFlags is a bitmask type for setting a mask of zero or
+more elink:VkSemaphoreImportFlagBits.
+--
+endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd,VK_FUCHSIA_external_semaphore[]
+endif::VK_VERSION_1_1,VK_KHR_external_semaphore[]
+
+
+[[synchronization-events]]
+== Events
+
+[open,refpage='VkEvent',desc='Opaque handle to an event object',type='handles']
+--
+Events are a synchronization primitive that can: be used to insert a
+fine-grained dependency between commands submitted to the same queue, or
+between the host and a queue.
+Events must: not be used to insert a dependency between commands submitted
+to different queues.
+Events have two states - signaled and unsignaled.
+An application can: signal or unsignal an event either on the host or on the
+device.
+A device can: be made to wait for an event to become signaled before
+executing further operations.
+No command exists to wait for an event to become signaled on the host, but
+the current state of an event can: be queried.
+
+Events are represented by sname:VkEvent handles:
+
+include::{generated}/api/handles/VkEvent.adoc[]
+--
+
+[open,refpage='vkCreateEvent',desc='Create a new event object',type='protos']
+--
+:refpage: vkCreateEvent
+:objectnameplural: events
+:objectnamecamelcase: event
+:objectcount: 1
+
+To create an event, call:
+
+include::{generated}/api/protos/vkCreateEvent.adoc[]
+
+  * pname:device is the logical device that creates the event.
+  * pname:pCreateInfo is a pointer to a slink:VkEventCreateInfo structure
+    containing information about how the event is to be created.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pEvent is a pointer to a handle in which the resulting event
+    object is returned.
+
+When created, the event object is in the unsignaled state.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_KHR_portability_subset[]
+  * [[VUID-vkCreateEvent-events-04468]]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:events is
+    ename:VK_FALSE, then the implementation does not support
+    <<synchronization-events, events>>, and flink:vkCreateEvent must: not be
+    used
+endif::VK_KHR_portability_subset[]
+include::{chapters}/commonvalidity/memory_reservation_request_count_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCreateEvent.adoc[]
+--
+
+[open,refpage='VkEventCreateInfo',desc='Structure specifying parameters of a newly created event',type='structs']
+--
+The sname:VkEventCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkEventCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkEventCreateFlagBits defining
+    additional creation parameters.
+
+ifdef::VK_EXT_metal_objects[]
+.Valid Usage
+****
+  * [[VUID-VkEventCreateInfo-pNext-06790]]
+    If the pname:pNext chain includes a
+    slink:VkExportMetalObjectCreateInfoEXT structure, its
+    pname:exportObjectType member must: be
+    ename:VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT
+****
+endif::VK_EXT_metal_objects[]
+
+include::{generated}/validity/structs/VkEventCreateInfo.adoc[]
+--
+
+[open,refpage='VkEventCreateFlagBits',desc='Event creation flag bits',type='enums']
+--
+include::{generated}/api/enums/VkEventCreateFlagBits.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT specifies that host event commands
+    will not be used with this event.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+--
+
+[open,refpage='VkEventCreateFlags',desc='Bitmask of event creation flag bits',type='flags']
+--
+include::{generated}/api/flags/VkEventCreateFlags.adoc[]
+
+tname:VkEventCreateFlags is a bitmask type for setting a mask of
+elink:VkEventCreateFlagBits.
+--
+
+[open,refpage='vkDestroyEvent',desc='Destroy an event object',type='protos']
+--
+To destroy an event, call:
+
+include::{generated}/api/protos/vkDestroyEvent.adoc[]
+
+  * pname:device is the logical device that destroys the event.
+  * pname:event is the handle of the event to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyEvent-event-01145]]
+    All submitted commands that refer to pname:event must: have completed
+    execution
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-vkDestroyEvent-event-01146]]
+    If sname:VkAllocationCallbacks were provided when pname:event was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyEvent-event-01147]]
+    If no sname:VkAllocationCallbacks were provided when pname:event was
+    created, pname:pAllocator must: be `NULL`
+endif::VKSC_VERSION_1_0[]
+****
+
+include::{generated}/validity/protos/vkDestroyEvent.adoc[]
+--
+
+[open,refpage='vkGetEventStatus',desc='Retrieve the status of an event object',type='protos']
+--
+:refpage: vkGetEventStatus
+
+To query the state of an event from the host, call:
+
+include::{generated}/api/protos/vkGetEventStatus.adoc[]
+
+  * pname:device is the logical device that owns the event.
+  * pname:event is the handle of the event to query.
+
+Upon success, fname:vkGetEventStatus returns the state of the event object
+with the following return codes:
+
+.Event Object Status Codes
+[width="80%",options="header"]
+|====
+| Status | Meaning
+| ename:VK_EVENT_SET | The event specified by pname:event is signaled.
+| ename:VK_EVENT_RESET | The event specified by pname:event is unsignaled.
+|====
+
+If a fname:vkCmdSetEvent or fname:vkCmdResetEvent command is in a command
+buffer that is in the <<commandbuffers-lifecycle, pending state>>, then the
+value returned by this command may: immediately be out of date.
+
+The state of an event can: be updated by the host.
+The state of the event is immediately changed, and subsequent calls to
+fname:vkGetEventStatus will return the new state.
+If an event is already in the requested state, then updating it to the same
+state has no effect.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+.Valid Usage
+****
+  * [[VUID-vkGetEventStatus-event-03940]]
+    pname:event must: not have been created with
+    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT
+****
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+include::{generated}/validity/protos/vkGetEventStatus.adoc[]
+--
+
+[[synchronization-events-signaling-host]]
+[open,refpage='vkSetEvent',desc='Set an event to signaled state',type='protos']
+--
+:refpage: vkSetEvent
+
+To set the state of an event to signaled from the host, call:
+
+include::{generated}/api/protos/vkSetEvent.adoc[]
+
+  * pname:device is the logical device that owns the event.
+  * pname:event is the event to set.
+
+When flink:vkSetEvent is executed on the host, it defines an _event signal
+operation_ which sets the event to the signaled state.
+
+If pname:event is already in the signaled state when flink:vkSetEvent is
+executed, then flink:vkSetEvent has no effect, and no event signal operation
+occurs.
+
+[NOTE]
+.Note
+====
+If a command buffer is waiting for an event to be signaled from the host,
+the application must signal the event before submitting the command buffer,
+as described in the <<commandbuffers-submission-progress, queue forward
+progress>> section.
+====
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+.Valid Usage
+****
+  * [[VUID-vkSetEvent-event-03941]]
+    pname:event must: not have been created with
+    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT
+****
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+include::{generated}/validity/protos/vkSetEvent.adoc[]
+--
+
+[[synchronization-events-unsignaling-host]]
+[open,refpage='vkResetEvent',desc='Reset an event to non-signaled state',type='protos']
+--
+To set the state of an event to unsignaled from the host, call:
+
+include::{generated}/api/protos/vkResetEvent.adoc[]
+
+  * pname:device is the logical device that owns the event.
+  * pname:event is the event to reset.
+
+When flink:vkResetEvent is executed on the host, it defines an _event
+unsignal operation_ which resets the event to the unsignaled state.
+
+If pname:event is already in the unsignaled state when flink:vkResetEvent is
+executed, then flink:vkResetEvent has no effect, and no event unsignal
+operation occurs.
+
+.Valid Usage
+****
+  * [[VUID-vkResetEvent-event-03821]]
+    There must: be an execution dependency between fname:vkResetEvent and
+    the execution of any flink:vkCmdWaitEvents that includes pname:event in
+    its pname:pEvents parameter
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-vkResetEvent-event-03822]]
+    There must: be an execution dependency between fname:vkResetEvent and
+    the execution of any flink:vkCmdWaitEvents2 that includes pname:event in
+    its pname:pEvents parameter
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-vkResetEvent-event-03823]]
+    pname:event must: not have been created with
+    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/protos/vkResetEvent.adoc[]
+--
+
+The state of an event can: also be updated on the device by commands
+inserted in command buffers.
+
+[[synchronization-events-signaling-device]]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdSetEvent2',desc='Set an event object to signaled state',type='protos',alias='vkCmdSetEvent2KHR']
+--
+To signal an event from a device, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetEvent2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkCmdSetEvent2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:event is the event that will be signaled.
+  * pname:pDependencyInfo is a pointer to a slink:VkDependencyInfo structure
+    defining the first scopes of this operation.
+
+When flink:vkCmdSetEvent2 is submitted to a queue, it defines the first half
+of memory dependencies defined by pname:pDependencyInfo, as well as an event
+signal operation which sets the event to the signaled state.
+A memory dependency is defined between the event signal operation and
+commands that occur earlier in submission order.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> are defined by
+the union of all the memory dependencies defined by pname:pDependencyInfo,
+and are applied to all operations that occur earlier in
+<<synchronization-submission-order,submission order>>.
+<<synchronization-queue-transfers, Queue family ownership transfers>> and
+<<synchronization-image-layout-transitions, image layout transitions>>
+defined by pname:pDependencyInfo are also included in the first scopes.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the event signal operation, and any
+<<synchronization-queue-transfers, queue family ownership transfers>> and
+<<synchronization-image-layout-transitions, image layout transitions>>
+defined by pname:pDependencyInfo.
+
+The second <<synchronization-dependencies-access-scopes, access scope>>
+includes only <<synchronization-queue-transfers, queue family ownership
+transfers>> and <<synchronization-image-layout-transitions, image layout
+transitions>>.
+
+Future flink:vkCmdWaitEvents2 commands rely on all values of each element in
+pname:pDependencyInfo matching exactly with those used to signal the
+corresponding event.
+flink:vkCmdWaitEvents must: not be used to wait on the result of a signal
+operation defined by fname:vkCmdSetEvent2.
+
+[NOTE]
+.Note
+====
+The extra information provided by flink:vkCmdSetEvent2 compared to
+flink:vkCmdSetEvent allows implementations to more efficiently schedule the
+operations required to satisfy the requested dependencies.
+With flink:vkCmdSetEvent, the full dependency information is not known until
+flink:vkCmdWaitEvents is recorded, forcing implementations to insert the
+required operations at that point and not before.
+====
+
+If pname:event is already in the signaled state when flink:vkCmdSetEvent2 is
+executed on the device, then flink:vkCmdSetEvent2 has no effect, no event
+signal operation occurs, and no dependency is generated.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetEvent2-synchronization2-03824]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetEvent2-dependencyFlags-03825]]
+    The pname:dependencyFlags member of pname:pDependencyInfo must: be `0`
+  * [[VUID-vkCmdSetEvent2-srcStageMask-09391]]
+    The pname:srcStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: not
+    include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+  * [[VUID-vkCmdSetEvent2-dstStageMask-09392]]
+    The pname:dstStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: not
+    include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdSetEvent2-commandBuffer-03826]]
+    The current device mask of pname:commandBuffer must: include exactly one
+    physical device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdSetEvent2-srcStageMask-03827]]
+    The pname:srcStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
+    include pipeline stages valid for the queue family that was used to
+    create the command pool that pname:commandBuffer was allocated from
+  * [[VUID-vkCmdSetEvent2-dstStageMask-03828]]
+    The pname:dstStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
+    include pipeline stages valid for the queue family that was used to
+    create the command pool that pname:commandBuffer was allocated from
+****
+
+include::{generated}/validity/protos/vkCmdSetEvent2.adoc[]
+--
+
+[open,refpage='VkDependencyInfo',desc='Structure specifying dependency information for a synchronization command',type='structs',alias='VkDependencyInfoKHR']
+--
+The sname:VkDependencyInfo structure is defined as:
+
+include::{generated}/api/structs/VkDependencyInfo.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkDependencyInfoKHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits
+    specifying how execution and memory dependencies are formed.
+  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
+    array.
+  * pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier2
+    structures defining memory dependencies between any memory accesses.
+  * pname:bufferMemoryBarrierCount is the length of the
+    pname:pBufferMemoryBarriers array.
+  * pname:pBufferMemoryBarriers is a pointer to an array of
+    slink:VkBufferMemoryBarrier2 structures defining memory dependencies
+    between buffer ranges.
+  * pname:imageMemoryBarrierCount is the length of the
+    pname:pImageMemoryBarriers array.
+  * pname:pImageMemoryBarriers is a pointer to an array of
+    slink:VkImageMemoryBarrier2 structures defining memory dependencies
+    between image subresources.
+
+This structure defines a set of <<synchronization-dependencies-memory,
+memory dependencies>>, as well as <<synchronization-queue-transfers, queue
+family transfer operations>> and <<synchronization-image-layout-transitions,
+image layout transitions>>.
+
+Each member of pname:pMemoryBarriers, pname:pBufferMemoryBarriers, and
+pname:pImageMemoryBarriers defines a separate
+<<synchronization-dependencies-memory, memory dependency>>.
+
+include::{generated}/validity/structs/VkDependencyInfo.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdSetEvent',desc='Set an event object to signaled state',type='protos']
+--
+:refpage: vkCmdSetEvent
+
+To set the state of an event to signaled from a device, call:
+
+include::{generated}/api/protos/vkCmdSetEvent.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:event is the event that will be signaled.
+  * pname:stageMask specifies the <<synchronization-pipeline-stages,source
+    stage mask>> used to determine the first
+    <<synchronization-dependencies-scopes, synchronization scope>>.
+
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+fname:vkCmdSetEvent behaves identically to flink:vkCmdSetEvent2, except that
+it does not define an access scope, and must: only be used with
+flink:vkCmdWaitEvents, not flink:vkCmdWaitEvents2.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+When flink:vkCmdSetEvent is submitted to a queue, it defines an execution
+dependency on commands that were submitted before it, and defines an event
+signal operation which sets the event to the signaled state.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+The synchronization scope is limited to operations on the pipeline stages
+determined by the <<synchronization-pipeline-stages-masks, source stage
+mask>> specified by pname:stageMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the event signal operation.
+
+If pname:event is already in the signaled state when flink:vkCmdSetEvent is
+executed on the device, then flink:vkCmdSetEvent has no effect, no event
+signal operation occurs, and no execution dependency is generated.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+  * [[VUID-vkCmdSetEvent-stageMask-06457]]
+    Any pipeline stage included in pname:stageMask must: be supported by the
+    capabilities of the queue family specified by the pname:queueFamilyIndex
+    member of the slink:VkCommandPoolCreateInfo structure that was used to
+    create the sname:VkCommandPool that pname:commandBuffer was allocated
+    from, as specified in the <<synchronization-pipeline-stages-supported,
+    table of supported pipeline stages>>
+  * [[VUID-vkCmdSetEvent-stageMask-01149]]
+    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdSetEvent-commandBuffer-01152]]
+    The current device mask of pname:commandBuffer must: include exactly one
+    physical device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+****
+
+include::{generated}/validity/protos/vkCmdSetEvent.adoc[]
+--
+
+[[synchronization-events-unsignaling-device]]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdResetEvent2',desc='Reset an event object to non-signaled state',type='protos',alias='vkCmdResetEvent2KHR']
+--
+:refpage: vkCmdResetEvent2
+
+To unsignal the event from a device, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdResetEvent2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkCmdResetEvent2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:event is the event that will be unsignaled.
+  * pname:stageMask is a tlink:VkPipelineStageFlags2 mask of pipeline stages
+    used to determine the first <<synchronization-dependencies-scopes,
+    synchronization scope>>.
+
+When flink:vkCmdResetEvent2 is submitted to a queue, it defines an execution
+dependency on commands that were submitted before it, and defines an event
+unsignal operation which resets the event to the unsignaled state.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+The synchronization scope is limited to operations by pname:stageMask or
+stages that are <<synchronization-pipeline-stages-order,logically earlier>>
+than pname:stageMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the event unsignal operation.
+
+If pname:event is already in the unsignaled state when
+flink:vkCmdResetEvent2 is executed on the device, then this command has no
+effect, no event unsignal operation occurs, and no execution dependency is
+generated.
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+  * [[VUID-vkCmdResetEvent2-synchronization2-03829]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdResetEvent2-stageMask-03830]]
+    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+  * [[VUID-vkCmdResetEvent2-event-03831]]
+    There must: be an execution dependency between fname:vkCmdResetEvent2
+    and the execution of any flink:vkCmdWaitEvents that includes pname:event
+    in its pname:pEvents parameter
+  * [[VUID-vkCmdResetEvent2-event-03832]]
+    There must: be an execution dependency between fname:vkCmdResetEvent2
+    and the execution of any flink:vkCmdWaitEvents2 that includes
+    pname:event in its pname:pEvents parameter
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdResetEvent2-commandBuffer-03833]]
+    pname:commandBuffer's current device mask must: include exactly one
+    physical device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+****
+
+include::{generated}/validity/protos/vkCmdResetEvent2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdResetEvent',desc='Reset an event object to non-signaled state',type='protos']
+--
+:refpage: vkCmdResetEvent
+
+To set the state of an event to unsignaled from a device, call:
+
+include::{generated}/api/protos/vkCmdResetEvent.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:event is the event that will be unsignaled.
+  * pname:stageMask is a bitmask of elink:VkPipelineStageFlagBits specifying
+    the <<synchronization-pipeline-stages, source stage mask>> used to
+    determine when the pname:event is unsignaled.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+fname:vkCmdResetEvent behaves identically to flink:vkCmdResetEvent2.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+When flink:vkCmdResetEvent is submitted to a queue, it defines an execution
+dependency on commands that were submitted before it, and defines an event
+unsignal operation which resets the event to the unsignaled state.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+The synchronization scope is limited to operations on the pipeline stages
+determined by the <<synchronization-pipeline-stages-masks, source stage
+mask>> specified by pname:stageMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes only the event unsignal operation.
+
+If pname:event is already in the unsignaled state when flink:vkCmdResetEvent
+is executed on the device, then flink:vkCmdResetEvent has no effect, no
+event unsignal operation occurs, and no execution dependency is generated.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+  * [[VUID-vkCmdResetEvent-stageMask-06458]]
+    Any pipeline stage included in pname:stageMask must: be supported by the
+    capabilities of the queue family specified by the pname:queueFamilyIndex
+    member of the slink:VkCommandPoolCreateInfo structure that was used to
+    create the sname:VkCommandPool that pname:commandBuffer was allocated
+    from, as specified in the <<synchronization-pipeline-stages-supported,
+    table of supported pipeline stages>>
+  * [[VUID-vkCmdResetEvent-stageMask-01153]]
+    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
+  * [[VUID-vkCmdResetEvent-event-03834]]
+    There must: be an execution dependency between fname:vkCmdResetEvent and
+    the execution of any flink:vkCmdWaitEvents that includes pname:event in
+    its pname:pEvents parameter
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-vkCmdResetEvent-event-03835]]
+    There must: be an execution dependency between fname:vkCmdResetEvent and
+    the execution of any flink:vkCmdWaitEvents2 that includes pname:event in
+    its pname:pEvents parameter
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdResetEvent-commandBuffer-01157]]
+    pname:commandBuffer's current device mask must: include exactly one
+    physical device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+****
+
+include::{generated}/validity/protos/vkCmdResetEvent.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdWaitEvents2',desc='Wait for one or more events',type='protos',alias='vkCmdWaitEvents2KHR']
+--
+To wait for one or more events to enter the signaled state on a device,
+call:
+
+[[synchronization-events-waiting-device]]
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdWaitEvents2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkCmdWaitEvents2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:eventCount is the length of the pname:pEvents array.
+  * pname:pEvents is a pointer to an array of pname:eventCount events to
+    wait on.
+  * pname:pDependencyInfos is a pointer to an array of pname:eventCount
+    slink:VkDependencyInfo structures, defining the second
+    <<synchronization-dependencies-scopes, synchronization scope>>.
+
+When fname:vkCmdWaitEvents2 is submitted to a queue, it inserts memory
+dependencies according to the elements of pname:pDependencyInfos and each
+corresponding element of pname:pEvents.
+fname:vkCmdWaitEvents2 must: not be used to wait on event signal operations
+occurring on other queues, or signal operations executed by
+flink:vkCmdSetEvent.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> of each memory
+dependency defined by any element [eq]#i# of pname:pDependencyInfos are
+applied to operations that occurred earlier in
+<<synchronization-submission-order,submission order>> than the last event
+signal operation on element [eq]#i# of pname:pEvents.
+
+Signal operations for an event at index [eq]#i# are only included if:
+
+  * The event was signaled by a flink:vkCmdSetEvent2 command that occurred
+    earlier in <<synchronization-submission-order,submission order>> with a
+    pname:dependencyInfo parameter exactly equal to the element of
+    pname:pDependencyInfos at index [eq]#i# ; or
+  * The event was created without ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT, and
+    the first <<synchronization-dependencies-scopes, synchronization scope>>
+    defined by the element of pname:pDependencyInfos at index [eq]#i# only
+    includes host operations (ename:VK_PIPELINE_STAGE_2_HOST_BIT).
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+and <<synchronization-dependencies-access-scopes, access scope>> of each
+memory dependency defined by any element [eq]#i# of pname:pDependencyInfos
+are applied to operations that occurred later in
+<<synchronization-submission-order,submission order>> than
+fname:vkCmdWaitEvents2.
+
+[NOTE]
+.Note
+====
+flink:vkCmdWaitEvents2 is used with flink:vkCmdSetEvent2 to define a memory
+dependency between two sets of action commands, roughly in the same way as
+pipeline barriers, but split into two commands such that work between the
+two may: execute unhindered.
+====
+
+[NOTE]
+.Note
+====
+Applications should be careful to avoid race conditions when using events.
+There is no direct ordering guarantee between fname:vkCmdSetEvent2 and
+flink:vkCmdResetEvent2, flink:vkCmdResetEvent, or flink:vkCmdSetEvent.
+Another execution dependency (e.g. a pipeline barrier or semaphore with
+ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT) is needed to prevent such a race
+condition.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdWaitEvents2-synchronization2-03836]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdWaitEvents2-pEvents-03837]]
+    Members of pname:pEvents must: not have been signaled by
+    flink:vkCmdSetEvent
+  * [[VUID-vkCmdWaitEvents2-pEvents-03838]]
+    For any element [eq]#i# of pname:pEvents, if that event is signaled by
+    flink:vkCmdSetEvent2, that command's pname:dependencyInfo parameter
+    must: be exactly equal to the [eq]##i##th element of
+    pname:pDependencyInfos
+  * [[VUID-vkCmdWaitEvents2-pEvents-03839]]
+    For any element [eq]#i# of pname:pEvents, if that event is signaled by
+    flink:vkSetEvent, barriers in the [eq]##i##th element of
+    pname:pDependencyInfos must: include only host operations in their first
+    <<synchronization-dependencies-scopes, synchronization scope>>
+  * [[VUID-vkCmdWaitEvents2-pEvents-03840]]
+    For any element [eq]#i# of pname:pEvents, if barriers in the [eq]##i##th
+    element of pname:pDependencyInfos include only host operations, the
+    [eq]##i##th element of pname:pEvents must: be signaled before
+    flink:vkCmdWaitEvents2 is executed
+  * [[VUID-vkCmdWaitEvents2-pEvents-03841]]
+    For any element [eq]#i# of pname:pEvents, if barriers in the [eq]##i##th
+    element of pname:pDependencyInfos do not include host operations, the
+    [eq]##i##th element of pname:pEvents must: be signaled by a
+    corresponding flink:vkCmdSetEvent2 that occurred earlier in
+    <<synchronization-submission-order,submission order>>
+  * [[VUID-vkCmdWaitEvents2-srcStageMask-03842]]
+    The pname:srcStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfos must:
+    either include only pipeline stages valid for the queue family that was
+    used to create the command pool that pname:commandBuffer was allocated
+    from, or include only ename:VK_PIPELINE_STAGE_2_HOST_BIT
+  * [[VUID-vkCmdWaitEvents2-dstStageMask-03843]]
+    The pname:dstStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfos must: only
+    include pipeline stages valid for the queue family that was used to
+    create the command pool that pname:commandBuffer was allocated from
+  * [[VUID-vkCmdWaitEvents2-dependencyFlags-03844]]
+    If fname:vkCmdWaitEvents2 is being called inside a render pass instance,
+    the pname:srcStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfos must: not
+    include ename:VK_PIPELINE_STAGE_2_HOST_BIT
+  * [[VUID-vkCmdWaitEvents2-commandBuffer-03846]]
+    pname:commandBuffer's current device mask must: include exactly one
+    physical device
+****
+
+include::{generated}/validity/protos/vkCmdWaitEvents2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdWaitEvents',desc='Wait for one or more events and insert a set of memory',type='protos']
+--
+:refpage: vkCmdWaitEvents
+
+To wait for one or more events to enter the signaled state on a device,
+call:
+
+[[synchronization-events-waiting-device]]
+include::{generated}/api/protos/vkCmdWaitEvents.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:eventCount is the length of the pname:pEvents array.
+  * pname:pEvents is a pointer to an array of event object handles to wait
+    on.
+  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages, source stage mask>>.
+  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages, destination stage
+    mask>>.
+  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
+    array.
+  * pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier
+    structures.
+  * pname:bufferMemoryBarrierCount is the length of the
+    pname:pBufferMemoryBarriers array.
+  * pname:pBufferMemoryBarriers is a pointer to an array of
+    slink:VkBufferMemoryBarrier structures.
+  * pname:imageMemoryBarrierCount is the length of the
+    pname:pImageMemoryBarriers array.
+  * pname:pImageMemoryBarriers is a pointer to an array of
+    slink:VkImageMemoryBarrier structures.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+fname:vkCmdWaitEvents is largely similar to flink:vkCmdWaitEvents2, but can:
+only wait on signal operations defined by flink:vkCmdSetEvent.
+As flink:vkCmdSetEvent does not define any access scopes,
+fname:vkCmdWaitEvents defines the first access scope for each event signal
+operation in addition to its own access scopes.
+
+[NOTE]
+.Note
+====
+Since flink:vkCmdSetEvent does not have any dependency information beyond a
+stage mask, implementations do not have the same opportunity to perform
+<<synchronization-dependencies-available-and-visible, availability and
+visibility operations>> or <<synchronization-image-layout-transitions, image
+layout transitions>> in advance as they do with flink:vkCmdSetEvent2 and
+flink:vkCmdWaitEvents2.
+====
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+When fname:vkCmdWaitEvents is submitted to a queue, it defines a memory
+dependency between prior event signal operations on the same queue or the
+host, and subsequent commands.
+fname:vkCmdWaitEvents must: not be used to wait on event signal operations
+occurring on other queues.
+
+The first synchronization scope only includes event signal operations that
+operate on members of pname:pEvents, and the operations that happened-before
+the event signal operations.
+Event signal operations performed by flink:vkCmdSetEvent that occur earlier
+in <<synchronization-submission-order,submission order>> are included in the
+first synchronization scope, if the <<synchronization-pipeline-stages-order,
+logically latest>> pipeline stage in their pname:stageMask parameter is
+<<synchronization-pipeline-stages-order, logically earlier>> than or equal
+to the <<synchronization-pipeline-stages-order, logically latest>> pipeline
+stage in pname:srcStageMask.
+Event signal operations performed by flink:vkSetEvent are only included in
+the first synchronization scope if ename:VK_PIPELINE_STAGE_HOST_BIT is
+included in pname:srcStageMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur later in
+<<synchronization-submission-order,submission order>>.
+The second synchronization scope is limited to operations on the pipeline
+stages determined by the <<synchronization-pipeline-stages-masks,
+destination stage mask>> specified by pname:dstStageMask.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, source stage mask>> specified by
+pname:srcStageMask.
+Within that, the first access scope only includes the first access scopes
+defined by elements of the pname:pMemoryBarriers,
+pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
+each define a set of <<synchronization-memory-barriers, memory barriers>>.
+If no memory barriers are specified, then the first access scope includes no
+accesses.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by pname:dstStageMask.
+Within that, the second access scope only includes the second access scopes
+defined by elements of the pname:pMemoryBarriers,
+pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
+each define a set of <<synchronization-memory-barriers, memory barriers>>.
+If no memory barriers are specified, then the second access scope includes
+no accesses.
+
+ifndef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[NOTE]
+.Note
+====
+flink:vkCmdWaitEvents is used with flink:vkCmdSetEvent to define a memory
+dependency between two sets of action commands, roughly in the same way as
+pipeline barriers, but split into two commands such that work between the
+two may: execute unhindered.
+
+Unlike flink:vkCmdPipelineBarrier, a <<synchronization-queue-transfers,
+queue family ownership transfer>> cannot: be performed using
+flink:vkCmdWaitEvents.
+====
+
+[NOTE]
+.Note
+====
+Applications should be careful to avoid race conditions when using events.
+There is no direct ordering guarantee between flink:vkCmdWaitEvents and
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[flink:vkCmdResetEvent2,]
+flink:vkCmdResetEvent, or flink:vkCmdSetEvent.
+Another execution dependency (e.g. a pipeline barrier or semaphore with
+ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT) is needed to prevent such a race
+condition.
+====
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+:accessMaskName: srcAccessMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_common.adoc[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_common.adoc[]
+include::{chapters}/commonvalidity/fine_sync_commands_common.adoc[]
+  * [[VUID-vkCmdWaitEvents-srcStageMask-06459]]
+    Any pipeline stage included in pname:srcStageMask must: be supported by
+    the capabilities of the queue family specified by the
+    pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    structure that was used to create the sname:VkCommandPool that
+    pname:commandBuffer was allocated from, as specified in the
+    <<synchronization-pipeline-stages-supported, table of supported pipeline
+    stages>>
+  * [[VUID-vkCmdWaitEvents-dstStageMask-06460]]
+    Any pipeline stage included in pname:dstStageMask must: be supported by
+    the capabilities of the queue family specified by the
+    pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    structure that was used to create the sname:VkCommandPool that
+    pname:commandBuffer was allocated from, as specified in the
+    <<synchronization-pipeline-stages-supported, table of supported pipeline
+    stages>>
+  * [[VUID-vkCmdWaitEvents-srcStageMask-01158]]
+    pname:srcStageMask must: be the bitwise OR of the pname:stageMask
+    parameter used in previous calls to fname:vkCmdSetEvent with any of the
+    elements of pname:pEvents and ename:VK_PIPELINE_STAGE_HOST_BIT if any of
+    the elements of pname:pEvents was set using fname:vkSetEvent
+  * [[VUID-vkCmdWaitEvents-srcStageMask-07308]]
+    If fname:vkCmdWaitEvents is being called inside a render pass instance,
+    pname:srcStageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
+  * [[VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803]]
+    The pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members of
+    any element of pname:pBufferMemoryBarriers or pname:pImageMemoryBarriers
+    must: be equal
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdWaitEvents-commandBuffer-01167]]
+    pname:commandBuffer's current device mask must: include exactly one
+    physical device
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+  * [[VUID-vkCmdWaitEvents-pEvents-03847]]
+    Elements of pname:pEvents must: not have been signaled by
+    flink:vkCmdSetEvent2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/protos/vkCmdWaitEvents.adoc[]
+--
+
+
+[[synchronization-pipeline-barriers]]
+== Pipeline Barriers
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='vkCmdPipelineBarrier2',desc='Insert a memory dependency',type='protos',alias='vkCmdPipelineBarrier2KHR']
+--
+:refpage: vkCmdPipelineBarrier2
+
+To record a pipeline barrier, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdPipelineBarrier2.adoc[]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_VERSION_1_3+VK_KHR_synchronization2[or the equivalent command]
+
+ifdef::VK_KHR_synchronization2[]
+include::{generated}/api/protos/vkCmdPipelineBarrier2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pDependencyInfo is a pointer to a slink:VkDependencyInfo structure
+    defining the scopes of this operation.
+
+When flink:vkCmdPipelineBarrier2 is submitted to a queue, it defines memory
+dependencies between commands that were submitted to the same queue before
+it, and those submitted to the same queue after it.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> of each memory
+dependency defined by pname:pDependencyInfo are applied to operations that
+occurred earlier in <<synchronization-submission-order,submission order>>.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+and <<synchronization-dependencies-access-scopes, access scope>> of each
+memory dependency defined by pname:pDependencyInfo are applied to operations
+that occurred later in <<synchronization-submission-order,submission
+order>>.
+
+If fname:vkCmdPipelineBarrier2 is recorded within a render pass instance,
+the synchronization scopes are limited to operations within the same subpass
+ifdef::VK_EXT_shader_tile_image[]
+, or must: follow the restrictions for
+<<synchronization-pipeline-barriers-explicit-renderpass-tileimage, Tile
+Image Access Synchronization>> if the render pass instance was started with
+flink:vkCmdBeginRendering
+endif::VK_EXT_shader_tile_image[]
+.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/pipeline_barrier_common.adoc[]
+  * [[VUID-vkCmdPipelineBarrier2-synchronization2-03848]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdPipelineBarrier2-srcStageMask-03849]]
+    The pname:srcStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
+    include pipeline stages valid for the queue family that was used to
+    create the command pool that pname:commandBuffer was allocated from
+  * [[VUID-vkCmdPipelineBarrier2-dstStageMask-03850]]
+    The pname:dstStageMask member of any element of the
+    pname:pMemoryBarriers, pname:pBufferMemoryBarriers, or
+    pname:pImageMemoryBarriers members of pname:pDependencyInfo must: only
+    include pipeline stages valid for the queue family that was used to
+    create the command pool that pname:commandBuffer was allocated from
+****
+
+include::{generated}/validity/protos/vkCmdPipelineBarrier2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdPipelineBarrier',desc='Insert a memory dependency',type='protos']
+--
+:refpage: vkCmdPipelineBarrier
+
+To record a pipeline barrier, call:
+
+include::{generated}/api/protos/vkCmdPipelineBarrier.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:srcStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks,source stages>>.
+  * pname:dstStageMask is a bitmask of elink:VkPipelineStageFlagBits
+    specifying the <<synchronization-pipeline-stages-masks,destination
+    stages>>.
+  * pname:dependencyFlags is a bitmask of elink:VkDependencyFlagBits
+    specifying how execution and memory dependencies are formed.
+  * pname:memoryBarrierCount is the length of the pname:pMemoryBarriers
+    array.
+  * pname:pMemoryBarriers is a pointer to an array of slink:VkMemoryBarrier
+    structures.
+  * pname:bufferMemoryBarrierCount is the length of the
+    pname:pBufferMemoryBarriers array.
+  * pname:pBufferMemoryBarriers is a pointer to an array of
+    slink:VkBufferMemoryBarrier structures.
+  * pname:imageMemoryBarrierCount is the length of the
+    pname:pImageMemoryBarriers array.
+  * pname:pImageMemoryBarriers is a pointer to an array of
+    slink:VkImageMemoryBarrier structures.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+fname:vkCmdPipelineBarrier operates almost identically to
+flink:vkCmdPipelineBarrier2, except that the scopes and barriers are defined
+as direct parameters rather than being defined by an slink:VkDependencyInfo.
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+When flink:vkCmdPipelineBarrier is submitted to a queue, it defines a memory
+dependency between commands that were submitted to the same queue before it,
+and those submitted to the same queue after it.
+
+If flink:vkCmdPipelineBarrier was recorded outside a render pass instance,
+the first <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur earlier in
+<<synchronization-submission-order,submission order>>.
+If flink:vkCmdPipelineBarrier was recorded inside a render pass instance,
+the first synchronization scope includes only commands that occur earlier in
+<<synchronization-submission-order,submission order>> within the same
+subpass.
+In either case, the first synchronization scope is limited to operations on
+the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, source stage mask>> specified by
+pname:srcStageMask.
+
+If flink:vkCmdPipelineBarrier was recorded outside a render pass instance,
+the second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands that occur later in
+<<synchronization-submission-order,submission order>>.
+If flink:vkCmdPipelineBarrier was recorded inside a render pass instance,
+the second synchronization scope includes only commands that occur later in
+<<synchronization-submission-order,submission order>> within the same
+subpass.
+In either case, the second synchronization scope is limited to operations on
+the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by pname:dstStageMask.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, source stage mask>> specified by
+pname:srcStageMask.
+Within that, the first access scope only includes the first access scopes
+defined by elements of the pname:pMemoryBarriers,
+pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
+each define a set of <<synchronization-memory-barriers, memory barriers>>.
+If no memory barriers are specified, then the first access scope includes no
+accesses.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to accesses in the pipeline stages determined by the
+<<synchronization-pipeline-stages-masks, destination stage mask>> specified
+by pname:dstStageMask.
+Within that, the second access scope only includes the second access scopes
+defined by elements of the pname:pMemoryBarriers,
+pname:pBufferMemoryBarriers and pname:pImageMemoryBarriers arrays, which
+each define a set of <<synchronization-memory-barriers, memory barriers>>.
+If no memory barriers are specified, then the second access scope includes
+no accesses.
+
+If pname:dependencyFlags includes ename:VK_DEPENDENCY_BY_REGION_BIT, then
+any dependency between <<synchronization-framebuffer-regions,
+framebuffer-space>> pipeline stages is
+<<synchronization-framebuffer-regions, framebuffer-local>> - otherwise it is
+<<synchronization-framebuffer-regions, framebuffer-global>>.
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+:accessMaskName: srcAccessMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_common.adoc[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_common.adoc[]
+include::{chapters}/commonvalidity/fine_sync_commands_common.adoc[]
+include::{chapters}/commonvalidity/pipeline_barrier_common.adoc[]
+  * [[VUID-vkCmdPipelineBarrier-srcStageMask-06461]]
+    Any pipeline stage included in pname:srcStageMask must: be supported by
+    the capabilities of the queue family specified by the
+    pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    structure that was used to create the sname:VkCommandPool that
+    pname:commandBuffer was allocated from, as specified in the
+    <<synchronization-pipeline-stages-supported, table of supported pipeline
+    stages>>
+  * [[VUID-vkCmdPipelineBarrier-dstStageMask-06462]]
+    Any pipeline stage included in pname:dstStageMask must: be supported by
+    the capabilities of the queue family specified by the
+    pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
+    structure that was used to create the sname:VkCommandPool that
+    pname:commandBuffer was allocated from, as specified in the
+    <<synchronization-pipeline-stages-supported, table of supported pipeline
+    stages>>
+****
+
+include::{generated}/validity/protos/vkCmdPipelineBarrier.adoc[]
+--
+
+[open,refpage='VkDependencyFlagBits',desc='Bitmask specifying how execution and memory dependencies are formed',type='enums']
+--
+Bits which can: be set in fname:vkCmdPipelineBarrier::pname:dependencyFlags,
+specifying how execution and memory dependencies are formed, are:
+
+include::{generated}/api/enums/VkDependencyFlagBits.adoc[]
+
+  * ename:VK_DEPENDENCY_BY_REGION_BIT specifies that dependencies will be
+    <<synchronization-framebuffer-regions, framebuffer-local>>.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * ename:VK_DEPENDENCY_VIEW_LOCAL_BIT specifies that dependencies will be
+    <<synchronization-view-local-dependencies, view-local>>.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * ename:VK_DEPENDENCY_DEVICE_GROUP_BIT specifies that dependencies are
+    <<synchronization-device-local-dependencies, non-device-local>>.
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_EXT_attachment_feedback_loop_layout[]
+  * ename:VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT specifies that the render pass
+    will write to and read from the same image using the
+    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout.
+endif::VK_EXT_attachment_feedback_loop_layout[]
+--
+
+[open,refpage='VkDependencyFlags',desc='Bitmask of VkDependencyFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDependencyFlags.adoc[]
+
+tname:VkDependencyFlags is a bitmask type for setting a mask of zero or more
+elink:VkDependencyFlagBits.
+--
+
+
+ifdef::VK_EXT_shader_tile_image[]
+[[synchronization-pipeline-barriers-explicit-renderpass-tileimage]]
+=== Explicit Render Pass Tile Image Access Synchronization
+
+A fragment shader can: declare code:NonCoherentColorAttachmentReadEXT,
+code:NonCoherentDepthAttachmentReadEXT, or
+code:NonCoherentStencilAttachmentReadEXT execution modes to enable
+non-coherent tile image reads for color, depth, or stencil, respectively.
+When non-coherent tile image reads are enabled, writes via color, depth and
+stencil attachments are not automatically made visible to the corresponding
+attachment reads via tile images.
+For the writes to be made visible, an explicit memory dependency must: be
+inserted between when the attachment is written to and when it is read from
+by later fragments.
+Such memory dependencies must: be inserted every time a fragment will read
+values at a particular sample (x, y, layer, sample) coordinate, if those
+values have been written since the most recent pipeline barrier; or since
+the start of the render pass instance, if there have been no pipeline
+barriers since the start of the render pass instance.
+When such memory dependencies are used the values at all sample locations
+inside the fragment area are made visible, regardless of coverage.
+
+To insert a memory dependency for explicit render pass tile image
+synchronization, call flink:vkCmdPipelineBarrier2 inside a render pass
+instance started with flink:vkCmdBeginRendering.
+The following restrictions apply for such pipeline barriers:
+
+  * pname:dependencyFlags must: include ename:VK_DEPENDENCY_BY_REGION_BIT.
+  * The pipeline barriers can: only include memory barriers.
+    That is, buffer memory barriers and image memory barriers must: not be
+    used.
+  * The stages in slink:VkMemoryBarrier2::pname:srcStageMask and
+    slink:VkMemoryBarrier2::pname:dstStageMask are restricted to framebuffer
+    space stages.
+  * The access types in slink:VkMemoryBarrier2::pname:srcAccessMask and
+    slink:VkMemoryBarrier2::pname:dstAccessMask are restricted to the
+    following types: ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT,
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT,
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, and
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
+endif::VK_EXT_shader_tile_image[]
+
+[[synchronization-memory-barriers]]
+== Memory Barriers
+
+_Memory barriers_ are used to explicitly control access to buffer and image
+subresource ranges.
+Memory barriers are used to <<synchronization-queue-transfers, transfer
+ownership between queue families>>,
+<<synchronization-image-layout-transitions, change image layouts>>, and
+define <<synchronization-dependencies-available-and-visible, availability
+and visibility operations>>.
+They explicitly define the <<synchronization-access-types, access types>>
+and buffer and image subresource ranges that are included in the
+<<synchronization-dependencies-access-scopes, access scopes>> of a memory
+dependency that is created by a synchronization command that includes them.
+
+
+[[synchronization-global-memory-barriers]]
+=== Global Memory Barriers
+
+Global memory barriers apply to memory accesses involving all memory objects
+that exist at the time of its execution.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkMemoryBarrier2',desc='Structure specifying a global memory barrier',type='structs',alias='VkMemoryBarrier2KHR']
+--
+:refpage: VkMemoryBarrier2
+
+The sname:VkMemoryBarrier2 structure is defined as:
+
+include::{generated}/api/structs/VkMemoryBarrier2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryBarrier2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, second
+    access scope>>.
+
+This structure defines a <<synchronization-dependencies-memory, memory
+dependency>> affecting all device memory.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> described by
+this structure include only operations and memory accesses specified by
+pname:srcStageMask and pname:srcAccessMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+and <<synchronization-dependencies-access-scopes, access scope>> described
+by this structure include only operations and memory accesses specified by
+pname:dstStageMask and pname:dstAccessMask.
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+:accessMaskName: srcAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+****
+
+include::{generated}/validity/structs/VkMemoryBarrier2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkMemoryBarrier',desc='Structure specifying a global memory barrier',type='structs']
+--
+The sname:VkMemoryBarrier structure is defined as:
+
+include::{generated}/api/structs/VkMemoryBarrier.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, source access mask>>.
+  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, destination access mask>>.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access types in the <<synchronization-access-masks, source access
+mask>> specified by pname:srcAccessMask.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access types in the <<synchronization-access-masks, destination
+access mask>> specified by pname:dstAccessMask.
+
+include::{generated}/validity/structs/VkMemoryBarrier.adoc[]
+--
+
+
+[[synchronization-buffer-memory-barriers]]
+=== Buffer Memory Barriers
+
+Buffer memory barriers only apply to memory accesses involving a specific
+buffer range.
+That is, a memory dependency formed from a buffer memory barrier is
+<<synchronization-dependencies-access-scopes, scoped>> to access via the
+specified buffer range.
+Buffer memory barriers can: also be used to define a
+<<synchronization-queue-transfers, queue family ownership transfer>> for the
+specified buffer range.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkBufferMemoryBarrier2',desc='Structure specifying a buffer memory barrier',type='structs',alias='VkBufferMemoryBarrier2KHR']
+--
+:refpage: VkBufferMemoryBarrier2
+
+The sname:VkBufferMemoryBarrier2 structure is defined as:
+
+include::{generated}/api/structs/VkBufferMemoryBarrier2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferMemoryBarrier2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, second
+    access scope>>.
+  * pname:srcQueueFamilyIndex is the source queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:dstQueueFamilyIndex is the destination queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:buffer is a handle to the buffer whose backing memory is affected
+    by the barrier.
+  * pname:offset is an offset in bytes into the backing memory for
+    pname:buffer; this is relative to the base offset as bound to the buffer
+    (see flink:vkBindBufferMemory).
+  * pname:size is a size in bytes of the affected area of backing memory for
+    pname:buffer, or ename:VK_WHOLE_SIZE to use the range from pname:offset
+    to the end of the buffer.
+
+This structure defines a <<synchronization-dependencies-memory, memory
+dependency>> limited to a range of a buffer, and can: define a
+<<synchronization-queue-transfers, queue family transfer operation>> for
+that range.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> described by
+this structure include only operations and memory accesses specified by
+pname:srcStageMask and pname:srcAccessMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+and <<synchronization-dependencies-access-scopes, access scope>> described
+by this structure include only operations and memory accesses specified by
+pname:dstStageMask and pname:dstAccessMask.
+
+Both <<synchronization-dependencies-access-scopes, access scopes>> are
+limited to only memory accesses to pname:buffer in the range defined by
+pname:offset and pname:size.
+
+If pname:buffer was created with ename:VK_SHARING_MODE_EXCLUSIVE, and
+pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, this
+memory barrier defines a <<synchronization-queue-transfers, queue family
+transfer operation>>.
+When executed on a queue in the family identified by
+pname:srcQueueFamilyIndex, this barrier defines a
+<<synchronization-queue-transfers-release, queue family release operation>>
+for the specified buffer range, and the second synchronization and access
+scopes do not synchronize operations on that queue.
+When executed on a queue in the family identified by
+pname:dstQueueFamilyIndex, this barrier defines a
+<<synchronization-queue-transfers-acquire, queue family acquire operation>>
+for the specified buffer range, and the first synchronization and access
+scopes do not synchronize operations on that queue.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+A <<synchronization-queue-transfers, queue family transfer operation>> is
+also defined if the values are not equal, and either is one of the special
+queue family values reserved for external memory ownership transfers, as
+described in <<synchronization-queue-transfers>>.
+A <<synchronization-queue-transfers-release, queue family release
+operation>> is defined when pname:dstQueueFamilyIndex is one of those
+values, and a <<synchronization-queue-transfers-acquire, queue family
+acquire operation>> is defined when pname:srcQueueFamilyIndex is one of
+those values.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+
+.Valid Usage
+****
+
+:stageMaskName: srcStageMask
+:accessMaskName: srcAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/buffer_memory_barrier_common.adoc[]
+  * [[VUID-VkBufferMemoryBarrier2-srcStageMask-03851]]
+    If either pname:srcStageMask or pname:dstStageMask includes
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: be equal
+****
+
+include::{generated}/validity/structs/VkBufferMemoryBarrier2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkBufferMemoryBarrier',desc='Structure specifying a buffer memory barrier',type='structs']
+--
+:refpage: VkBufferMemoryBarrier
+
+The sname:VkBufferMemoryBarrier structure is defined as:
+
+include::{generated}/api/structs/VkBufferMemoryBarrier.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, source access mask>>.
+  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, destination access mask>>.
+  * pname:srcQueueFamilyIndex is the source queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:dstQueueFamilyIndex is the destination queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:buffer is a handle to the buffer whose backing memory is affected
+    by the barrier.
+  * pname:offset is an offset in bytes into the backing memory for
+    pname:buffer; this is relative to the base offset as bound to the buffer
+    (see flink:vkBindBufferMemory).
+  * pname:size is a size in bytes of the affected area of backing memory for
+    pname:buffer, or ename:VK_WHOLE_SIZE to use the range from pname:offset
+    to the end of the buffer.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access to memory through the specified buffer range, via access
+types in the <<synchronization-access-masks, source access mask>> specified
+by pname:srcAccessMask.
+If pname:srcAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT, a
+<<synchronization-dependencies-available-and-visible, memory domain
+operation>> is performed where available memory in the host domain is also
+made available to the device domain.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access to memory through the specified buffer range, via access
+types in the <<synchronization-access-masks, destination access mask>>
+specified by pname:dstAccessMask.
+If pname:dstAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT or
+ename:VK_ACCESS_HOST_READ_BIT, a
+<<synchronization-dependencies-available-and-visible, memory domain
+operation>> is performed where available memory in the device domain is also
+made available to the host domain.
+
+[NOTE]
+.Note
+====
+When ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT is used, available memory in
+host domain is automatically made visible to host domain, and any host write
+is automatically made available to host domain.
+====
+
+If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, and
+pname:srcQueueFamilyIndex is equal to the current queue family, then the
+memory barrier defines a <<synchronization-queue-transfers-release, queue
+family release operation>> for the specified buffer range, and the second
+access scope includes no access, as if pname:dstAccessMask was `0`.
+
+If pname:dstQueueFamilyIndex is not equal to pname:srcQueueFamilyIndex, and
+pname:dstQueueFamilyIndex is equal to the current queue family, then the
+memory barrier defines a <<synchronization-queue-transfers-acquire, queue
+family acquire operation>> for the specified buffer range, and the first
+access scope includes no access, as if pname:srcAccessMask was `0`.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_memory_barrier_common.adoc[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferMemoryBarrier-None-09049]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, at least one of
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferMemoryBarrier-None-09050]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    or ename:VK_QUEUE_FAMILY_EXTERNAL
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferMemoryBarrier-None-09051]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:dstQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    or ename:VK_QUEUE_FAMILY_EXTERNAL
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+****
+
+include::{generated}/validity/structs/VkBufferMemoryBarrier.adoc[]
+--
+
+[open,refpage='VK_WHOLE_SIZE',desc='Sentinel value to use entire remaining array length',type='consts']
+--
+ename:VK_WHOLE_SIZE is a special value indicating that the entire remaining
+length of a buffer following a given pname:offset should be used.
+It can: be specified for slink:VkBufferMemoryBarrier::pname:size and other
+structures.
+
+include::{generated}/api/enums/VK_WHOLE_SIZE.adoc[]
+--
+
+
+[[synchronization-image-memory-barriers]]
+=== Image Memory Barriers
+
+Image memory barriers only apply to memory accesses involving a specific
+image subresource range.
+That is, a memory dependency formed from an image memory barrier is
+<<synchronization-dependencies-access-scopes, scoped>> to access via the
+specified image subresource range.
+Image memory barriers can: also be used to define
+<<synchronization-image-layout-transitions, image layout transitions>> or a
+<<synchronization-queue-transfers, queue family ownership transfer>> for the
+specified image subresource range.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[open,refpage='VkImageMemoryBarrier2',desc='Structure specifying an image memory barrier',type='structs',alias='VkImageMemoryBarrier2KHR']
+--
+:refpage: VkImageMemoryBarrier2
+
+The sname:VkImageMemoryBarrier2 structure is defined as:
+
+include::{generated}/api/structs/VkImageMemoryBarrier2.adoc[]
+
+ifdef::VK_KHR_synchronization2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageMemoryBarrier2KHR.adoc[]
+endif::VK_KHR_synchronization2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2 mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2 mask of access flags to be
+    included in the <<synchronization-dependencies-access-scopes, second
+    access scope>>.
+  * pname:oldLayout is the old layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:newLayout is the new layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:srcQueueFamilyIndex is the source queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:dstQueueFamilyIndex is the destination queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:image is a handle to the image affected by this barrier.
+  * pname:subresourceRange describes the <<resources-image-views, image
+    subresource range>> within pname:image that is affected by this barrier.
+
+This structure defines a <<synchronization-dependencies-memory, memory
+dependency>> limited to an image subresource range, and can: define a
+<<synchronization-queue-transfers, queue family transfer operation>> and
+<<synchronization-image-layout-transitions, image layout transition>> for
+that subresource range.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>> and
+<<synchronization-dependencies-access-scopes, access scope>> described by
+this structure include only operations and memory accesses specified by
+pname:srcStageMask and pname:srcAccessMask.
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+and <<synchronization-dependencies-access-scopes, access scope>> described
+by this structure include only operations and memory accesses specified by
+pname:dstStageMask and pname:dstAccessMask.
+
+Both <<synchronization-dependencies-access-scopes, access scopes>> are
+limited to only memory accesses to pname:image in the subresource range
+defined by pname:subresourceRange.
+
+If pname:image was created with ename:VK_SHARING_MODE_EXCLUSIVE, and
+pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, this
+memory barrier defines a <<synchronization-queue-transfers, queue family
+transfer operation>>.
+When executed on a queue in the family identified by
+pname:srcQueueFamilyIndex, this barrier defines a
+<<synchronization-queue-transfers-release, queue family release operation>>
+for the specified image subresource range, and the second synchronization
+and access scopes do not synchronize operations on that queue.
+When executed on a queue in the family identified by
+pname:dstQueueFamilyIndex, this barrier defines a
+<<synchronization-queue-transfers-acquire, queue family acquire operation>>
+for the specified image subresource range, and the first synchronization and
+access scopes do not synchronize operations on that queue.
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+A <<synchronization-queue-transfers, queue family transfer operation>> is
+also defined if the values are not equal, and either is one of the special
+queue family values reserved for external memory ownership transfers, as
+described in <<synchronization-queue-transfers>>.
+A <<synchronization-queue-transfers-release, queue family release
+operation>> is defined when pname:dstQueueFamilyIndex is one of those
+values, and a <<synchronization-queue-transfers-acquire, queue family
+acquire operation>> is defined when pname:srcQueueFamilyIndex is one of
+those values.
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+If pname:oldLayout is not equal to pname:newLayout, then the memory barrier
+defines an <<synchronization-image-layout-transitions, image layout
+transition>> for the specified image subresource range.
+If this memory barrier defines a <<synchronization-queue-transfers, queue
+family transfer operation>>, the layout transition is only executed once
+between the queues.
+
+[NOTE]
+.Note
+====
+When the old and new layout are equal, the layout values are ignored - data
+is preserved no matter what values are specified, or what layout the image
+is currently in.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+If pname:image has a multi-planar format and the image is _disjoint_, then
+including ename:VK_IMAGE_ASPECT_COLOR_BIT in the pname:aspectMask member of
+pname:subresourceRange is equivalent to including
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
+(for three-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+
+:stageMaskName: srcStageMask
+:accessMaskName: srcAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/access_mask_2_common.adoc[]
+include::{chapters}/commonvalidity/image_memory_barrier_common.adoc[]
+include::{chapters}/commonvalidity/image_layout_transition_common.adoc[]
+  * [[VUID-VkImageMemoryBarrier2-srcStageMask-03854]]
+    If either pname:srcStageMask or pname:dstStageMask includes
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: be equal
+  * [[VUID-VkImageMemoryBarrier2-srcStageMask-03855]]
+    If pname:srcStageMask includes ename:VK_PIPELINE_STAGE_2_HOST_BIT, and
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex define a
+    <<synchronization-queue-transfers, queue family ownership transfer>> or
+    pname:oldLayout and pname:newLayout define an
+    <<synchronization-image-layout-transitions, image layout transition>>,
+    pname:oldLayout must: be one of ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
+    ename:VK_IMAGE_LAYOUT_UNDEFINED, or ename:VK_IMAGE_LAYOUT_GENERAL
+****
+
+include::{generated}/validity/structs/VkImageMemoryBarrier2.adoc[]
+--
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+[open,refpage='VkImageMemoryBarrier',desc='Structure specifying the parameters of an image memory barrier',type='structs']
+--
+:refpage: VkImageMemoryBarrier
+
+The sname:VkImageMemoryBarrier structure is defined as:
+
+include::{generated}/api/structs/VkImageMemoryBarrier.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, source access mask>>.
+  * pname:dstAccessMask is a bitmask of elink:VkAccessFlagBits specifying a
+    <<synchronization-access-masks, destination access mask>>.
+  * pname:oldLayout is the old layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:newLayout is the new layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:srcQueueFamilyIndex is the source queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:dstQueueFamilyIndex is the destination queue family for a
+    <<synchronization-queue-transfers, queue family ownership transfer>>.
+  * pname:image is a handle to the image affected by this barrier.
+  * pname:subresourceRange describes the <<resources-image-views, image
+    subresource range>> within pname:image that is affected by this barrier.
+
+The first <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access to memory through the specified image subresource range,
+via access types in the <<synchronization-access-masks, source access mask>>
+specified by pname:srcAccessMask.
+If pname:srcAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT, memory
+writes performed by that access type are also made visible, as that access
+type is not performed through a resource.
+
+The second <<synchronization-dependencies-access-scopes, access scope>> is
+limited to access to memory through the specified image subresource range,
+via access types in the <<synchronization-access-masks, destination access
+mask>> specified by pname:dstAccessMask.
+If pname:dstAccessMask includes ename:VK_ACCESS_HOST_WRITE_BIT or
+ename:VK_ACCESS_HOST_READ_BIT, available memory writes are also made visible
+to accesses of those types, as those access types are not performed through
+a resource.
+
+If pname:srcQueueFamilyIndex is not equal to pname:dstQueueFamilyIndex, and
+pname:srcQueueFamilyIndex is equal to the current queue family, then the
+memory barrier defines a <<synchronization-queue-transfers-release, queue
+family release operation>> for the specified image subresource range, and
+the second access scope includes no access, as if pname:dstAccessMask was
+`0`.
+
+If pname:dstQueueFamilyIndex is not equal to pname:srcQueueFamilyIndex, and
+pname:dstQueueFamilyIndex is equal to the current queue family, then the
+memory barrier defines a <<synchronization-queue-transfers-acquire, queue
+family acquire operation>> for the specified image subresource range, and
+the first access scope includes no access, as if pname:srcAccessMask was
+`0`.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+If the <<features-synchronization2, pname:synchronization2>> feature is not
+enabled or pname:oldLayout is not equal to pname:newLayout,
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+pname:oldLayout and pname:newLayout define an
+<<synchronization-image-layout-transitions, image layout transition>> for
+the specified image subresource range.
+
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+[NOTE]
+.Note
+====
+If the <<features-synchronization2, pname:synchronization2>> feature is
+enabled, when the old and new layout are equal, the layout values are
+ignored - data is preserved no matter what values are specified, or what
+layout the image is currently in.
+====
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+If pname:image has a multi-planar format and the image is _disjoint_, then
+including ename:VK_IMAGE_ASPECT_COLOR_BIT in the pname:aspectMask member of
+pname:subresourceRange is equivalent to including
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
+(for three-plane formats only) ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_memory_barrier_common.adoc[]
+include::{chapters}/commonvalidity/image_layout_transition_common.adoc[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkImageMemoryBarrier-None-09052]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, at least one of
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkImageMemoryBarrier-None-09053]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    or ename:VK_QUEUE_FAMILY_EXTERNAL
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkImageMemoryBarrier-None-09054]]
+    If
+ifdef::VK_KHR_synchronization2[]
+    the <<features-synchronization2, pname:synchronization2>> feature is not
+    enabled, and
+endif::VK_KHR_synchronization2[]
+    pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:dstQueueFamilyIndex must: be
+    ename:VK_QUEUE_FAMILY_IGNORED
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+    or ename:VK_QUEUE_FAMILY_EXTERNAL
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+****
+
+include::{generated}/validity/structs/VkImageMemoryBarrier.adoc[]
+--
+
+ifdef::VK_EXT_host_image_copy[]
+To facilitate usage of images whose memory is initialized on the host,
+Vulkan allows image layout transitions to be performed by the host as well,
+albeit supporting limited layouts.
+
+[open,refpage='vkTransitionImageLayoutEXT',desc='Perform an image layout transition on the host',type='protos']
+--
+To perform an image layout transition on the host, call:
+
+include::{generated}/api/protos/vkTransitionImageLayoutEXT.adoc[]
+
+  * pname:device is the device which owns pname:pTransitions[i].pname:image.
+  * pname:transitionCount is the number of image layout transitions to
+    perform.
+  * pname:pTransitions is a pointer to an array of
+    slink:VkHostImageLayoutTransitionInfoEXT structures specifying the image
+    and <<resources-image-views, subresource ranges>> within them to
+    transition.
+
+include::{generated}/validity/protos/vkTransitionImageLayoutEXT.adoc[]
+--
+
+[open,refpage='VkHostImageLayoutTransitionInfoEXT',desc='Structure specifying the parameters of a host-side image layout transition',type='structs']
+--
+:refpage: VkHostImageLayoutTransitionInfoEXT
+
+The sname:VkHostImageLayoutTransitionInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkHostImageLayoutTransitionInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:image is a handle to the image affected by this layout transition.
+  * pname:oldLayout is the old layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:newLayout is the new layout in an
+    <<synchronization-image-layout-transitions, image layout transition>>.
+  * pname:subresourceRange describes the <<resources-image-views, image
+    subresource range>> within pname:image that is affected by this layout
+    transition.
+
+fname:vkTransitionImageLayoutEXT does not check whether the device memory
+associated with an image is currently in use before performing the layout
+transition.
+The application must: guarantee that any previously submitted command that
+reads from or writes to this subresource has completed before the host
+performs the layout transition.
+
+[NOTE]
+.Note
+====
+Image layout transitions performed on the host do not require queue family
+ownership transfers as the physical layout of the image will not vary
+between queue families for the layouts supported by this function.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkHostImageLayoutTransitionInfoEXT-image-09055]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT
+include::{chapters}/commonvalidity/image_layout_transition_common.adoc[]
+  * [[VUID-VkHostImageLayoutTransitionInfoEXT-oldLayout-09229]]
+    pname:oldLayout must: be either ename:VK_IMAGE_LAYOUT_UNDEFINED or the
+    current layout of the image subresources as specified in
+    pname:subresourceRange
+  * [[VUID-VkHostImageLayoutTransitionInfoEXT-oldLayout-09230]]
+    If pname:oldLayout is not ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED, it must: be one of the layouts in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopySrcLayouts
+  * [[VUID-VkHostImageLayoutTransitionInfoEXT-newLayout-09057]]
+    pname:newLayout must: be one of the layouts in
+    slink:VkPhysicalDeviceHostImageCopyPropertiesEXT::pname:pCopyDstLayouts
+****
+
+include::{generated}/validity/structs/VkHostImageLayoutTransitionInfoEXT.adoc[]
+--
+endif::VK_EXT_host_image_copy[]
+
+[[synchronization-queue-transfers]]
+=== Queue Family Ownership Transfer
+
+Resources created with a elink:VkSharingMode of
+ename:VK_SHARING_MODE_EXCLUSIVE must: have their ownership explicitly
+transferred from one queue family to another in order to access their
+content in a well-defined manner on a queue in a different queue family.
+
+[open,refpage='VK_QUEUE_FAMILY_IGNORED',desc='Ignored queue family index sentinel',type='consts']
+--
+The special queue family index ename:VK_QUEUE_FAMILY_IGNORED indicates that
+a queue family parameter or member is ignored.
+
+include::{generated}/api/enums/VK_QUEUE_FAMILY_IGNORED.adoc[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+Resources shared with external APIs or instances using external memory must:
+also explicitly manage ownership transfers between local and external queues
+(or equivalent constructs in external APIs) regardless of the
+elink:VkSharingMode specified when creating them.
+
+[open,refpage='VK_QUEUE_FAMILY_EXTERNAL',desc='External queue family index sentinel',type='consts',alias='VK_QUEUE_FAMILY_EXTERNAL_KHR']
+--
+The special queue family index ename:VK_QUEUE_FAMILY_EXTERNAL represents any
+queue external to the resource's current Vulkan instance, as long as the
+queue uses the same underlying
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[device group or]
+physical device, and the same driver version as the resource's
+slink:VkDevice, as indicated by
+slink:VkPhysicalDeviceIDProperties::pname:deviceUUID and
+slink:VkPhysicalDeviceIDProperties::pname:driverUUID.
+
+include::{generated}/api/enums/VK_QUEUE_FAMILY_EXTERNAL.adoc[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/enums/VK_QUEUE_FAMILY_EXTERNAL_KHR.adoc[]
+endif::VK_KHR_external_memory[]
+--
+
+ifdef::VK_EXT_queue_family_foreign[]
+[open,refpage='VK_QUEUE_FAMILY_FOREIGN_EXT',desc='Foreign queue family index sentinel',type='consts']
+--
+The special queue family index ename:VK_QUEUE_FAMILY_FOREIGN_EXT represents
+any queue external to the resource's current Vulkan instance, regardless of
+the queue's underlying physical device or driver version.
+This includes, for example, queues for fixed-function image processing
+devices, media codec devices, and display devices, as well as all queues
+that use the same underlying
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[device group or]
+physical device, and the same driver version as the resource's
+slink:VkDevice.
+
+include::{generated}/api/enums/VK_QUEUE_FAMILY_FOREIGN_EXT.adoc[]
+--
+endif::VK_EXT_queue_family_foreign[]
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+If memory dependencies are correctly expressed between uses of such a
+resource between two queues in different families, but no ownership transfer
+is defined, the contents of that resource are undefined: for any read
+accesses performed by the second queue family.
+
+[NOTE]
+.Note
+====
+If an application does not need the contents of a resource to remain valid
+when transferring from one queue family to another, then the ownership
+transfer should: be skipped.
+====
+
+ifdef::VK_EXT_queue_family_foreign[]
+[NOTE]
+.Note
+====
+Applications should expect transfers to/from
+ename:VK_QUEUE_FAMILY_FOREIGN_EXT to be more expensive than transfers
+to/from ename:VK_QUEUE_FAMILY_EXTERNAL_KHR.
+====
+endif::VK_EXT_queue_family_foreign[]
+
+A queue family ownership transfer consists of two distinct parts:
+
+  . Release exclusive ownership from the source queue family
+  . Acquire exclusive ownership for the destination queue family
+
+An application must: ensure that these operations occur in the correct order
+by defining an execution dependency between them, e.g. using a semaphore.
+
+[[synchronization-queue-transfers-release]] A _release operation_ is used to
+release exclusive ownership of a range of a buffer or image subresource
+range.
+A release operation is defined by executing a
+<<synchronization-buffer-memory-barriers, buffer memory barrier>> (for a
+buffer range) or an <<synchronization-image-memory-barriers, image memory
+barrier>> (for an image subresource range) using a pipeline barrier command,
+on a queue from the source queue family.
+The pname:srcQueueFamilyIndex parameter of the barrier must: be set to the
+source queue family index, and the pname:dstQueueFamilyIndex parameter to
+the destination queue family index.
+pname:dstAccessMask is ignored for such a barrier, such that no visibility
+operation is executed - the value of this mask does not affect the validity
+of the barrier.
+The release operation happens-after the availability operation, and
+happens-before operations specified in the second synchronization scope of
+the calling command.
+
+[[synchronization-queue-transfers-acquire]] An _acquire operation_ is used
+to acquire exclusive ownership of a range of a buffer or image subresource
+range.
+An acquire operation is defined by executing a
+<<synchronization-buffer-memory-barriers, buffer memory barrier>> (for a
+buffer range) or an <<synchronization-image-memory-barriers, image memory
+barrier>> (for an image subresource range) using a pipeline barrier command,
+on a queue from the destination queue family.
+The buffer range or image subresource range specified in an acquire
+operation must: match exactly that of a previous release operation.
+The pname:srcQueueFamilyIndex parameter of the barrier must: be set to the
+source queue family index, and the pname:dstQueueFamilyIndex parameter to
+the destination queue family index.
+pname:srcAccessMask is ignored for such a barrier, such that no availability
+operation is executed - the value of this mask does not affect the validity
+of the barrier.
+The acquire operation happens-after operations in the first synchronization
+scope of the calling command, and happens-before the visibility operation.
+
+[NOTE]
+.Note
+====
+Whilst it is not invalid to provide destination or source access masks for
+memory barriers used for release or acquire operations, respectively, they
+have no practical effect.
+Access after a release operation has undefined: results, and so visibility
+for those accesses has no practical effect.
+Similarly, write access before an acquire operation will produce undefined:
+results for future access, so availability of those writes has no practical
+use.
+In an earlier version of the specification, these were required to match on
+both sides - but this was subsequently relaxed.
+These masks should: be set to 0.
+====
+
+If the transfer is via an image memory barrier, and an
+<<synchronization-image-layout-transitions, image layout transition>> is
+desired, then the values of pname:oldLayout and pname:newLayout in the
+_release operation_'s memory barrier must: be equal to values of
+pname:oldLayout and pname:newLayout in the _acquire operation_'s memory
+barrier.
+Although the image layout transition is submitted twice, it will only be
+executed once.
+A layout transition specified in this way happens-after the _release
+operation_ and happens-before the _acquire operation_.
+
+If the values of pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are
+equal, no ownership transfer is performed, and the barrier operates as if
+they were both set to ename:VK_QUEUE_FAMILY_IGNORED.
+
+Queue family ownership transfers may: perform read and write accesses on all
+memory bound to the image subresource or buffer range, so applications must:
+ensure that all memory writes have been made
+<<synchronization-dependencies-available-and-visible, available>> before a
+queue family ownership transfer is executed.
+Available memory is automatically made visible to queue family release and
+acquire operations, and writes performed by those operations are
+automatically made available.
+
+Once a queue family has acquired ownership of a buffer range or image
+subresource range of a ename:VK_SHARING_MODE_EXCLUSIVE resource, its
+contents are undefined: to other queue families unless ownership is
+transferred.
+The contents of any portion of another resource which aliases memory that is
+bound to the transferred buffer or image subresource range are undefined:
+after a release or acquire operation.
+
+[NOTE]
+.Note
+====
+Because <<synchronization-events, events>> cannot: be used directly for
+inter-queue synchronization, and because flink:vkCmdSetEvent does not have
+the queue family index or memory barrier parameters needed by a _release
+operation_, the release and acquire operations of a queue family ownership
+transfer can: only be performed using flink:vkCmdPipelineBarrier.
+====
+
+ifdef::VK_EXT_external_memory_acquire_unmodified[]
+[open,refpage='VkExternalMemoryAcquireUnmodifiedEXT',desc='Structure specifying that external memory has remained unmodified since releasing ownership',type='structs']
+--
+An _acquire operation_ may: have a performance penalty when acquiring
+ownership of a subresource range from one of the special queue families
+reserved for external memory ownership transfers described above.
+The application can: reduce the performance penalty in some cases by adding
+a slink:VkExternalMemoryAcquireUnmodifiedEXT structure to the pname:pNext
+chain of the _acquire operation_'s memory barrier structure.
+
+The sname:VkExternalMemoryAcquireUnmodifiedEXT structure is defined as:
+
+include::{generated}/api/structs/VkExternalMemoryAcquireUnmodifiedEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:acquireUnmodifiedMemory specifies, if ename:VK_TRUE, that no range
+    of slink:VkDeviceMemory bound to the resource of the memory barrier's
+    subresource range was modified at any time since the resource's most
+    recent release of ownership to the queue family specified by the memory
+    barrier's pname:srcQueueFamilyIndex.
+    If ename:VK_FALSE, it specifies nothing.
+
+If the application releases ownership of the subresource range to one of the
+special queue families reserved for external memory ownership transfers with
+a memory barrier structure, and later re-acquires ownership from the same
+queue family with a memory barrier structure, and if no range of
+slink:VkDeviceMemory bound to the resource was modified at any time between
+the _release operation_ and the _acquire operation_, then the application
+should: add a slink:VkExternalMemoryAcquireUnmodifiedEXT structure to the
+pname:pNext chain of the _acquire operation_'s memory barrier structure
+because this may: reduce the performance penalty.
+
+This struct is ignored if pname:acquireUnmodifiedMemory is ename:VK_FALSE.
+In particular, ename:VK_FALSE does _not_ specify that memory was modified.
+
+This struct is ignored if the memory barrier's pname:srcQueueFamilyIndex is
+not a special queue family reserved for external memory ownership transfers.
+
+[NOTE]
+.Note
+====
+The method by which the application determines whether memory was modified
+between the _release operation_ and _acquire operation_ is outside the scope
+of Vulkan.
+
+For any Vulkan operation that accesses a resource, the application must: not
+assume the implementation accesses the resource's memory as read-only, even
+for _apparently_ read-only operations such as transfer commands and shader
+reads.
+
+The validity of
+slink:VkExternalMemoryAcquireUnmodifiedEXT::pname:acquireUnmodifiedMemory is
+independent of memory ranges outside the ranges of slink:VkDeviceMemory
+bound to the resource.
+In particular, it is independent of any implementation-private memory
+associated with the resource.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkExternalMemoryAcquireUnmodifiedEXT-acquireUnmodifiedMemory-08922]]
+    If pname:acquireUnmodifiedMemory is ename:VK_TRUE, and the memory
+    barrier's pname:srcQueueFamilyIndex is a special queue family reserved
+    for external memory ownership transfers (as described in
+    <<synchronization-queue-transfers>>), then each range of
+    slink:VkDeviceMemory bound to the resource must: have remained
+    unmodified during all time since the resource's most recent release of
+    ownership to the queue family.
+****
+
+include::{generated}/validity/structs/VkExternalMemoryAcquireUnmodifiedEXT.adoc[]
+--
+endif::VK_EXT_external_memory_acquire_unmodified[]
+
+[[synchronization-wait-idle]]
+== Wait Idle Operations
+
+[open,refpage='vkQueueWaitIdle',desc='Wait for a queue to become idle',type='protos']
+--
+:refpage: vkQueueWaitIdle
+
+To wait on the host for the completion of outstanding queue operations for a
+given queue, call:
+
+include::{generated}/api/protos/vkQueueWaitIdle.adoc[]
+
+  * pname:queue is the queue on which to wait.
+
+fname:vkQueueWaitIdle is equivalent to having submitted a valid fence to
+every previously executed <<devsandqueues-submission,queue submission
+command>> that accepts a fence, then waiting for all of those fences to
+signal using flink:vkWaitForFences with an infinite timeout and
+pname:waitAll set to ename:VK_TRUE.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkQueueWaitIdle.adoc[]
+--
+
+[open,refpage='vkDeviceWaitIdle',desc='Wait for a device to become idle',type='protos']
+--
+:refpage: vkDeviceWaitIdle
+
+To wait on the host for the completion of outstanding queue operations for
+all queues on a given logical device, call:
+
+include::{generated}/api/protos/vkDeviceWaitIdle.adoc[]
+
+  * pname:device is the logical device to idle.
+
+fname:vkDeviceWaitIdle is equivalent to calling fname:vkQueueWaitIdle for
+all queues owned by pname:device.
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkDeviceWaitIdle.adoc[]
+--
+
+
+[[synchronization-submission-host-writes]]
+== Host Write Ordering Guarantees
+
+When batches of command buffers are submitted to a queue via a
+<<devsandqueues-submission, queue submission command>>, it defines a memory
+dependency with prior host operations, and execution of command buffers
+submitted to the queue.
+
+The first <<synchronization-dependencies-scopes, synchronization scope>>
+includes execution of flink:vkQueueSubmit on the host and anything that
+happened-before it, as defined by the host memory model.
+
+[NOTE]
+.Note
+====
+Some systems allow writes that do not directly integrate with the host
+memory model; these have to be synchronized by the application manually.
+One example of this is non-temporal store instructions on x86; to ensure
+these happen-before submission, applications should call `_mm_sfence()`.
+====
+
+The second <<synchronization-dependencies-scopes, synchronization scope>>
+includes all commands submitted in the same <<devsandqueues-submission,
+queue submission>>, and all commands that occur later in
+<<synchronization-submission-order,submission order>>.
+
+The first <<synchronization-dependencies-access-scopes, access scope>>
+includes all host writes to mappable device memory that are available to the
+host memory domain.
+
+The second <<synchronization-dependencies-access-scopes, access scope>>
+includes all memory access performed by the device.
+
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+[[synchronization-device-group]]
+== Synchronization and Multiple Physical Devices
+
+If a logical device includes more than one physical device, then fences,
+semaphores, and events all still have a single instance of the signaled
+state.
+
+A fence becomes signaled when all physical devices complete the necessary
+queue operations.
+
+Semaphore wait and signal operations all include a device index that is the
+sole physical device that performs the operation.
+These indices are provided in the slink:VkDeviceGroupSubmitInfo
+ifndef::VKSC_VERSION_1_0[and slink:VkDeviceGroupBindSparseInfo]
+structures.
+Semaphores are not exclusively owned by any physical device.
+For example, a semaphore can be signaled by one physical device and then
+waited on by a different physical device.
+
+An event can: only be waited on by the same physical device that signaled it
+(or the host).
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+
+ifdef::VK_EXT_calibrated_timestamps[]
+[[calibrated-timestamps]]
+== Calibrated Timestamps
+
+[open,refpage='vkGetCalibratedTimestampsEXT',desc='Query calibrated timestamps',type='protos']
+--
+:refpage: vkGetCalibratedTimestampsEXT
+
+In order to be able to correlate the time a particular operation took place
+at on timelines of different time domains (e.g. a device operation vs. a
+host operation), Vulkan allows querying calibrated timestamps from multiple
+time domains.
+
+To query calibrated timestamps from a set of time domains, call:
+
+include::{generated}/api/protos/vkGetCalibratedTimestampsEXT.adoc[]
+
+  * pname:device is the logical device used to perform the query.
+  * pname:timestampCount is the number of timestamps to query.
+  * pname:pTimestampInfos is a pointer to an array of pname:timestampCount
+    slink:VkCalibratedTimestampInfoEXT structures, describing the time
+    domains the calibrated timestamps should be captured from.
+  * pname:pTimestamps is a pointer to an array of pname:timestampCount
+    64-bit unsigned integer values in which the requested calibrated
+    timestamp values are returned.
+  * pname:pMaxDeviation is a pointer to a 64-bit unsigned integer value in
+    which the strictly positive maximum deviation, in nanoseconds, of the
+    calibrated timestamp values is returned.
+
+[NOTE]
+.Note
+====
+The maximum deviation may: vary between calls to
+fname:vkGetCalibratedTimestampsEXT even for the same set of time domains due
+to implementation and platform specific reasons.
+It is the application's responsibility to assess whether the returned
+maximum deviation makes the timestamp values suitable for any particular
+purpose and can: choose to re-issue the timestamp calibration call pursuing
+a lower deviation value.
+====
+
+Calibrated timestamp values can: be extrapolated to estimate future
+coinciding timestamp values, however, depending on the nature of the time
+domains and other properties of the platform extrapolating values over a
+sufficiently long period of time may: no longer be accurate enough to fit
+any particular purpose, so applications are expected to re-calibrate the
+timestamps on a regular basis.
+
+.Valid Usage
+****
+  * [[VUID-vkGetCalibratedTimestampsEXT-timeDomain-09246]]
+    The pname:timeDomain value of each slink:VkCalibratedTimestampInfoEXT in
+    pname:pTimestampInfos must: be unique
+****
+
+include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[]
+
+include::{generated}/validity/protos/vkGetCalibratedTimestampsEXT.adoc[]
+--
+
+[open,refpage='VkCalibratedTimestampInfoEXT',desc='Structure specifying the input parameters of a calibrated timestamp query',type='structs']
+--
+The sname:VkCalibratedTimestampInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkCalibratedTimestampInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:timeDomain is a elink:VkTimeDomainEXT value specifying the time
+    domain from which the calibrated timestamp value should be returned.
+
+.Valid Usage
+****
+  * [[VUID-VkCalibratedTimestampInfoEXT-timeDomain-02354]]
+    pname:timeDomain must: be one of the elink:VkTimeDomainEXT values
+    returned by flink:vkGetPhysicalDeviceCalibrateableTimeDomainsEXT
+****
+include::{generated}/validity/structs/VkCalibratedTimestampInfoEXT.adoc[]
+--
+
+[open,refpage='VkTimeDomainEXT',desc='Supported time domains',type='enums']
+--
+The set of supported time domains consists of:
+
+include::{generated}/api/enums/VkTimeDomainEXT.adoc[]
+
+  * ename:VK_TIME_DOMAIN_DEVICE_EXT specifies the device time domain.
+    Timestamp values in this time domain use the same units and are
+    comparable with device timestamp values captured using
+    flink:vkCmdWriteTimestamp
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    or flink:vkCmdWriteTimestamp2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+    and are defined to be incrementing according to the
+    <<limits-timestampPeriod, pname:timestampPeriod>> of the device.
+
+  * ename:VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT specifies the CLOCK_MONOTONIC
+    time domain available on POSIX platforms.
+    Timestamp values in this time domain are in units of nanoseconds and are
+    comparable with platform timestamp values captured using the POSIX
+    clock_gettime API as computed by this example:
+
+[NOTE]
+.Note
+====
+An implementation supporting `apiext:VK_EXT_calibrated_timestamps` will use
+the same time domain for all its slink:VkQueue so that timestamp values
+reported for ename:VK_TIME_DOMAIN_DEVICE_EXT can be matched to any timestamp
+captured through flink:vkCmdWriteTimestamp
+ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
+or flink:vkCmdWriteTimestamp2
+endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
+.
+====
+
+[source,c]
+----
+struct timespec tv;
+clock_gettime(CLOCK_MONOTONIC, &tv);
+return tv.tv_nsec + tv.tv_sec*1000000000ull;
+----
+
+  * ename:VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT specifies the
+    CLOCK_MONOTONIC_RAW time domain available on POSIX platforms.
+    Timestamp values in this time domain are in units of nanoseconds and are
+    comparable with platform timestamp values captured using the POSIX
+    clock_gettime API as computed by this example:
+
+[source,c]
+----
+struct timespec tv;
+clock_gettime(CLOCK_MONOTONIC_RAW, &tv);
+return tv.tv_nsec + tv.tv_sec*1000000000ull;
+----
+
+  * ename:VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT specifies the
+    performance counter (QPC) time domain available on Windows.
+    Timestamp values in this time domain are in the same units as those
+    provided by the Windows QueryPerformanceCounter API and are comparable
+    with platform timestamp values captured using that API as computed by
+    this example:
+
+[source,c]
+----
+LARGE_INTEGER counter;
+QueryPerformanceCounter(&counter);
+return counter.QuadPart;
+----
+--
+endif::VK_EXT_calibrated_timestamps[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/tessellation.adoc b/codegen/vulkan/vulkan-docs-next/chapters/tessellation.adoc
new file mode 100644
index 0000000..6fee8de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/tessellation.adoc
@@ -0,0 +1,719 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[tessellation]]
+= Tessellation
+
+Tessellation involves three pipeline stages.
+First, a <<shaders-tessellation-control,tessellation control shader>>
+transforms control points of a patch and can: produce per-patch data.
+Second, a fixed-function tessellator generates multiple primitives
+corresponding to a tessellation of the patch in (u,v) or (u,v,w) parameter
+space.
+Third, a <<shaders-tessellation-evaluation,tessellation evaluation shader>>
+transforms the vertices of the tessellated patch, for example to compute
+their positions and attributes as part of the tessellated surface.
+The tessellator is enabled when the pipeline contains both a tessellation
+control shader and a tessellation evaluation shader.
+
+
+== Tessellator
+
+If a pipeline includes both tessellation shaders (control and evaluation),
+the tessellator consumes each input patch (after vertex shading) and
+produces a new set of independent primitives (points, lines, or triangles).
+These primitives are logically produced by subdividing a geometric primitive
+(rectangle or triangle) according to the per-patch outer and inner
+tessellation levels written by the tessellation control shader.
+These levels are specified using the <<interfaces-builtin-variables,built-in
+variables>> code:TessLevelOuter and code:TessLevelInner, respectively.
+This subdivision is performed in an implementation-dependent manner.
+If no tessellation shaders are present in the pipeline, the tessellator is
+disabled and incoming primitives are passed through without modification.
+
+The type of subdivision performed by the tessellator is specified by an
+code:OpExecutionMode instruction using one of the code:Triangles,
+code:Quads, or code:IsoLines execution modes.
+ifdef::VK_EXT_shader_object[]
+When using <<shaders-objects, shader objects>>, this instruction must: be
+specified in the tessellation evaluation shader, and may: also be specified
+in the tessellation control shader.
+When using pipelines, this
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[This]
+instruction may: be specified in either the tessellation evaluation or
+tessellation control shader.
+ifdef::VK_EXT_shader_object[]
+When using shader objects, tessellation-related modes that are required:
+must: be specified in the tessellation evaluation shader, and may: also be
+specified in the tessellation control shader.
+Other tessellation-related modes may: be specified in the tessellation
+evaluation shader.
+When using pipelines, other
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[Other]
+tessellation-related execution modes can: also be specified in either the
+tessellation control or tessellation evaluation shaders.
+
+Any tessellation-related modes specified in both the tessellation control
+and tessellation evaluation shaders must: be the same.
+
+Tessellation execution modes include:
+
+  * code:Triangles, code:Quads, and code:IsoLines.
+    These control the type of subdivision and topology of the output
+    primitives.
+ifdef::VK_EXT_shader_object[]
+    When using <<shaders-objects, shader objects>>, one mode must: be set in
+    at least the tessellation evaluation stage.
+    When using pipelines, one
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[One]
+    mode must: be set in at least one of the tessellation shader stages.
+ifdef::VK_KHR_portability_subset[]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
+    is ename:VK_FALSE, then isoline tessellation is not supported by the
+    implementation, and code:IsoLines must: not be used in either
+    tessellation shader stage.
+endif::VK_KHR_portability_subset[]
+  * code:VertexOrderCw and code:VertexOrderCcw.
+    These control the orientation of triangles generated by the tessellator.
+ifdef::VK_EXT_shader_object[]
+    When using <<shaders-objects, shader objects>>, one mode must: be set in
+    at least the tessellation evaluation stage.
+    When using pipelines, one
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[One]
+    mode must: be set in at least one of the tessellation shader stages.
+  * code:PointMode.
+    Controls generation of points rather than triangles or lines.
+    This functionality defaults to disabled, and is enabled if either shader
+    stage includes the execution mode.
+ifdef::VK_EXT_shader_object[]
+    When using <<shaders-objects, shader objects>>, if code:PointMode is set
+    in the tessellation control stage, it must: be identically set in the
+    tessellation evaluation stage.
+endif::VK_EXT_shader_object[]
+ifdef::VK_KHR_portability_subset[]
+    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
+    is ename:VK_FALSE, then point mode tessellation is not supported by the
+    implementation, and code:PointMode must: not be used in either
+    tessellation shader stage.
+endif::VK_KHR_portability_subset[]
+  * code:SpacingEqual, code:SpacingFractionalEven, and
+    code:SpacingFractionalOdd.
+    Controls the spacing of segments on the edges of tessellated primitives.
+ifdef::VK_EXT_shader_object[]
+    When using <<shaders-objects, shader objects>>, one mode must: be set in
+    at least the tessellation evaluation stage.
+    When using pipelines, one
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[One]
+    mode must: be set in at least one of the tessellation shader stages.
+  * code:OutputVertices.
+    Controls the size of the output patch of the tessellation control
+    shader.
+ifdef::VK_EXT_shader_object[]
+    When using <<shaders-objects, shader objects>>, one value must: be set
+    in at least the tessellation control stage.
+    When using pipelines, one
+endif::VK_EXT_shader_object[]
+ifndef::VK_EXT_shader_object[One]
+    value must: be set in at least one of the tessellation shader stages.
+
+For triangles, the tessellator subdivides a triangle primitive into smaller
+triangles.
+For quads, the tessellator subdivides a rectangle primitive into smaller
+triangles.
+For isolines, the tessellator subdivides a rectangle primitive into a
+collection of line segments arranged in strips stretching across the
+rectangle in the [eq]#u# dimension (i.e. the coordinates in code:TessCoord
+are of the form [eq]#(0,x)# through [eq]#(1,x)# for all tessellation
+evaluation shader invocations that share a line).
+
+Each vertex produced by the tessellator has an associated (u,v,w) or (u,v)
+position in a normalized parameter space, with parameter values in the range
+[eq]#[0,1]#, as illustrated
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+in figures <<img-tessellation-topology-ul>> and
+<<img-tessellation-topology-ll>>.
+The domain space can: have either an upper-left or lower-left origin,
+selected by the pname:domainOrigin member of
+slink:VkPipelineTessellationDomainOriginStateCreateInfo.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+in figure <<img-tessellation-topology-ul>>.
+The domain space has an upper-left origin.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[[img-tessellation-topology-ul]]
+image::{images}/tessparamUL.svg[align="center",title="Domain parameterization for tessellation primitive modes (upper-left origin)",opts="{imageopts}"]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[[img-tessellation-topology-ll]]
+image::{images}/tessparam.svg[align="center",title="Domain parameterization for tessellation primitive modes (lower-left origin)",opts="{imageopts}"]
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+.Caption
+****
+In the domain parameterization diagrams, the coordinates illustrate the
+value of code:TessCoord at the corners of the domain.
+The labels on the edges indicate the inner (IL0 and IL1) and outer (OL0
+through OL3) tessellation level values used to control the number of
+subdivisions along each edge of the domain.
+****
+
+For triangles, the vertex's position is a barycentric coordinate
+[eq]#(u,v,w)#, where [eq]#u {plus} v {plus} w = 1.0#, and indicates the
+relative influence of the three vertices of the triangle on the position of
+the vertex.
+For quads and isolines, the position is a [eq]#(u,v)# coordinate indicating
+the relative horizontal and vertical position of the vertex relative to the
+subdivided rectangle.
+The subdivision process is explained in more detail in subsequent sections.
+
+
+== Tessellator Patch Discard
+
+A patch is discarded by the tessellator if any relevant outer tessellation
+level is less than or equal to zero.
+
+Patches will also be discarded if any relevant outer tessellation level
+corresponds to a floating-point [eq]#NaN# (not a number) in implementations
+supporting [eq]#NaN#.
+
+No new primitives are generated and the tessellation evaluation shader is
+not executed for patches that are discarded.
+For code:Quads, all four outer levels are relevant.
+For code:Triangles and code:IsoLines, only the first three or two outer
+levels, respectively, are relevant.
+Negative inner levels will not cause a patch to be discarded; they will be
+clamped as described below.
+
+
+[[tessellation-tessellator-spacing]]
+== Tessellator Spacing
+
+Each of the tessellation levels is used to determine the number and spacing
+of segments used to subdivide a corresponding edge.
+The method used to derive the number and spacing of segments is specified by
+an code:OpExecutionMode in the tessellation control or tessellation
+evaluation shader using one of the identifiers code:SpacingEqual,
+code:SpacingFractionalEven, or code:SpacingFractionalOdd.
+
+If code:SpacingEqual is used, the floating-point tessellation level is first
+clamped to [eq]#[1, pname:maxLevel]#, where [eq]#pname:maxLevel# is the
+implementation-dependent maximum tessellation level
+(sname:VkPhysicalDeviceLimits::pname:maxTessellationGenerationLevel).
+The result is rounded up to the nearest integer [eq]#n#, and the
+corresponding edge is divided into [eq]#n# segments of equal length in (u,v)
+space.
+
+If code:SpacingFractionalEven is used, the tessellation level is first
+clamped to [eq]#[2, pname:maxLevel]# and then rounded up to the nearest even
+integer [eq]#n#.
+If code:SpacingFractionalOdd is used, the tessellation level is clamped to
+[eq]#[1, pname:maxLevel - 1]# and then rounded up to the nearest odd integer
+[eq]#n#.
+If [eq]#n# is one, the edge will not be subdivided.
+Otherwise, the corresponding edge will be divided into [eq]#n - 2# segments
+of equal length, and two additional segments of equal length that are
+typically shorter than the other segments.
+The length of the two additional segments relative to the others will
+decrease monotonically with [eq]#n - f#, where [eq]#f# is the clamped
+floating-point tessellation level.
+When [eq]#n - f# is zero, the additional segments will have equal length to
+the other segments.
+As [eq]#n - f# approaches 2.0, the relative length of the additional
+segments approaches zero.
+The two additional segments must: be placed symmetrically on opposite sides
+of the subdivided edge.
+The relative location of these two segments is implementation-dependent, but
+must: be identical for any pair of subdivided edges with identical values of
+[eq]#f#.
+
+When tessellating triangles or quads using <<tessellation-point-mode, point
+mode>> with fractional odd spacing, the tessellator may: produce _interior
+vertices_ that are positioned on the edge of the patch if an inner
+tessellation level is less than or equal to one.
+Such vertices are considered distinct from vertices produced by subdividing
+the outer edge of the patch, even if there are pairs of vertices with
+identical coordinates.
+
+
+[[tessellation-primitive-order]]
+== Tessellation Primitive Ordering
+
+Few guarantees are provided for the relative ordering of primitives produced
+by tessellation, as they pertain to <<drawing-primitive-order, primitive
+order>>.
+
+  * The output primitives generated from each input primitive are passed to
+    subsequent pipeline stages in an implementation-dependent order.
+  * All output primitives generated from a given input primitive are passed
+    to subsequent pipeline stages before any output primitives generated
+    from subsequent input primitives.
+
+
+[[tessellation-vertex-winding-order]]
+== Tessellator Vertex Winding Order
+
+When the tessellator produces triangles (in the code:Triangles or code:Quads
+modes), the orientation of all triangles is specified with an
+code:OpExecutionMode of code:VertexOrderCw or code:VertexOrderCcw in the
+tessellation control or tessellation evaluation shaders.
+If the order is code:VertexOrderCw, the vertices of all generated triangles
+will have clockwise ordering in (u,v) or (u,v,w) space.
+If the order is code:VertexOrderCcw, the vertices will have
+counter-clockwise ordering in that space.
+
+If the tessellation domain has an upper-left origin, the vertices of a
+triangle have counter-clockwise ordering if
+
+  {empty}:: [eq]#a = u~0~ v~1~ - u~1~ v~0~ {plus} u~1~ v~2~ - u~2~ v~1~
+            {plus} u~2~ v~0~ - u~0~ v~2~#
+
+is negative, and clockwise ordering if [eq]#a# is positive.
+[eq]#u~i~# and [eq]#v~i~# are the [eq]#u# and [eq]#v# coordinates in
+normalized parameter space of the [eq]##i##th vertex of the triangle.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+If the tessellation domain has a lower-left origin, the vertices of a
+triangle have counter-clockwise ordering if [eq]#a# is positive, and
+clockwise ordering if [eq]#a# is negative.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[NOTE]
+.Note
+====
+The value [eq]#a# is proportional (with a positive factor) to the signed
+area of the triangle.
+
+In code:Triangles mode, even though the vertex coordinates have a [eq]#w#
+value, it does not participate directly in the computation of [eq]#a#, being
+an affine combination of [eq]#u# and [eq]#v#.
+====
+
+
+[[tessellation-triangle-tessellation]]
+== Triangle Tessellation
+
+If the tessellation primitive mode is code:Triangles, an equilateral
+triangle is subdivided into a collection of triangles covering the area of
+the original triangle.
+First, the original triangle is subdivided into a collection of concentric
+equilateral triangles.
+The edges of each of these triangles are subdivided, and the area between
+each triangle pair is filled by triangles produced by joining the vertices
+on the subdivided edges.
+The number of concentric triangles and the number of subdivisions along each
+triangle except the outermost is derived from the first inner tessellation
+level.
+The edges of the outermost triangle are subdivided independently, using the
+first, second, and third outer tessellation levels to control the number of
+subdivisions of the [eq]#u = 0# (left), [eq]#v = 0# (bottom), and [eq]#w =
+0# (right) edges, respectively.
+The second inner tessellation level and the fourth outer tessellation level
+have no effect in this mode.
+
+If the first inner tessellation level and all three outer tessellation
+levels are exactly one after clamping and rounding, only a single triangle
+with [eq]#(u,v,w)# coordinates of [eq]#(0,0,1)#, [eq]#(1,0,0)#, and
+[eq]#(0,1,0)# is generated.
+If the inner tessellation level is one and any of the outer tessellation
+levels is greater than one, the inner tessellation level is treated as
+though it were originally specified as [eq]#1 {plus} {epsilon}# and will
+result in a two- or three-segment subdivision depending on the tessellation
+spacing.
+When used with fractional odd spacing, the three-segment subdivision may:
+produce _inner vertices_ positioned on the edge of the triangle.
+
+If any tessellation level is greater than one, tessellation begins by
+producing a set of concentric inner triangles and subdividing their edges.
+First, the three outer edges are temporarily subdivided using the clamped
+and rounded first inner tessellation level and the specified tessellation
+spacing, generating [eq]#n# segments.
+For the outermost inner triangle, the inner triangle is degenerate -- a
+single point at the center of the triangle -- if [eq]#n# is two.
+Otherwise, for each corner of the outer triangle, an inner triangle corner
+is produced at the intersection of two lines extended perpendicular to the
+corner's two adjacent edges running through the vertex of the subdivided
+outer edge nearest that corner.
+If [eq]#n# is three, the edges of the inner triangle are not subdivided and
+it is the final triangle in the set of concentric triangles.
+Otherwise, each edge of the inner triangle is divided into [eq]#n - 2#
+segments, with the [eq]#n - 1# vertices of this subdivision produced by
+intersecting the inner edge with lines perpendicular to the edge running
+through the [eq]#n - 1# innermost vertices of the subdivision of the outer
+edge.
+Once the outermost inner triangle is subdivided, the previous subdivision
+process repeats itself, using the generated triangle as an outer triangle.
+This subdivision process is illustrated in <<img-innertri,Inner Triangle
+Tessellation>>.
+
+[[img-innertri]]
+image::{images}/innertri.svg[align="center",title="Inner Triangle Tessellation",opts="{imageopts}"]
+
+.Caption
+****
+In the <<img-innertri,Inner Triangle Tessellation>> diagram, inner
+tessellation levels of (a) four and (b) five are shown (not to scale).
+Solid black circles depict vertices along the edges of the concentric
+triangles.
+The edges of inner triangles are subdivided by intersecting the edge with
+segments perpendicular to the edge passing through each inner vertex of the
+subdivided outer edge.
+Dotted lines depict edges connecting corresponding vertices on the inner and
+outer triangle edges.
+****
+
+Once all the concentric triangles are produced and their edges are
+subdivided, the area between each pair of adjacent inner triangles is filled
+completely with a set of non-overlapping triangles.
+In this subdivision, two of the three vertices of each triangle are taken
+from adjacent vertices on a subdivided edge of one triangle; the third is
+one of the vertices on the corresponding edge of the other triangle.
+If the innermost triangle is degenerate (i.e., a point), the triangle
+containing it is subdivided into six triangles by connecting each of the six
+vertices on that triangle with the center point.
+If the innermost triangle is not degenerate, that triangle is added to the
+set of generated triangles as-is.
+
+After the area corresponding to any inner triangles is filled, the
+tessellator generates triangles to cover the area between the outermost
+triangle and the outermost inner triangle.
+To do this, the temporary subdivision of the outer triangle edge above is
+discarded.
+Instead, the [eq]#u = 0#, [eq]#v = 0#, and [eq]#w = 0# edges are subdivided
+according to the first, second, and third outer tessellation levels,
+respectively, and the tessellation spacing.
+The original subdivision of the first inner triangle is retained.
+The area between the outer and first inner triangles is completely filled by
+non-overlapping triangles as described above.
+If the first (and only) inner triangle is degenerate, a set of triangles is
+produced by connecting each vertex on the outer triangle edges with the
+center point.
+
+After all triangles are generated, each vertex in the subdivided triangle is
+assigned a barycentric (u,v,w) coordinate based on its location relative to
+the three vertices of the outer triangle.
+
+The algorithm used to subdivide the triangular domain in (u,v,w) space into
+individual triangles is implementation-dependent.
+However, the set of triangles produced will completely cover the domain, and
+no portion of the domain will be covered by multiple triangles.
+
+Output triangles are generated with a topology similar to
+<<drawing-triangle-lists, triangle lists>>, except that the order in which
+each triangle is generated, and the order in which the vertices are
+generated for each triangle, are implementation-dependent.
+However, the order of vertices in each triangle is consistent across the
+domain as described in <<tessellation-vertex-winding-order>>.
+
+
+[[tessellation-quad-tessellation]]
+== Quad Tessellation
+
+If the tessellation primitive mode is code:Quads, a rectangle is subdivided
+into a collection of triangles covering the area of the original rectangle.
+First, the original rectangle is subdivided into a regular mesh of
+rectangles, where the number of rectangles along the [eq]#u = 0# and [eq]#u
+= 1# (vertical) and [eq]#v = 0# and [eq]#v = 1# (horizontal) edges are
+derived from the first and second inner tessellation levels, respectively.
+All rectangles, except those adjacent to one of the outer rectangle edges,
+are decomposed into triangle pairs.
+The outermost rectangle edges are subdivided independently, using the first,
+second, third, and fourth outer tessellation levels to control the number of
+subdivisions of the [eq]#u = 0# (left), [eq]#v = 0# (bottom), [eq]#u = 1#
+(right), and [eq]#v = 1# (top) edges, respectively.
+The area between the inner rectangles of the mesh and the outer rectangle
+edges are filled by triangles produced by joining the vertices on the
+subdivided outer edges to the vertices on the edge of the inner rectangle
+mesh.
+
+If both clamped inner tessellation levels and all four clamped outer
+tessellation levels are exactly one, only a single triangle pair covering
+the outer rectangle is generated.
+Otherwise, if either clamped inner tessellation level is one, that
+tessellation level is treated as though it was originally specified as
+[eq]#1 {plus} {epsilon}# and will result in a two- or three-segment
+subdivision depending on the tessellation spacing.
+When used with fractional odd spacing, the three-segment subdivision may:
+produce _inner vertices_ positioned on the edge of the rectangle.
+
+If any tessellation level is greater than one, tessellation begins by
+subdividing the [eq]#u = 0# and [eq]#u = 1# edges of the outer rectangle
+into [eq]#m# segments using the clamped and rounded first inner tessellation
+level and the tessellation spacing.
+The [eq]#v = 0# and [eq]#v = 1# edges are subdivided into [eq]#n# segments
+using the second inner tessellation level.
+Each vertex on the [eq]#u = 0# and [eq]#v = 0# edges are joined with the
+corresponding vertex on the [eq]#u = 1# and [eq]#v = 1# edges to produce a
+set of vertical and horizontal lines that divide the rectangle into a grid
+of smaller rectangles.
+The primitive generator emits a pair of non-overlapping triangles covering
+each such rectangle not adjacent to an edge of the outer rectangle.
+The boundary of the region covered by these triangles forms an inner
+rectangle, the edges of which are subdivided by the grid vertices that lie
+on the edge.
+If either [eq]#m# or [eq]#n# is two, the inner rectangle is degenerate, and
+one or both of the rectangle's _edges_ consist of a single point.
+This subdivision is illustrated in Figure <<img-innerquad,Inner Quad
+Tessellation>>.
+
+[[img-innerquad]]
+image::{images}/innerquad.svg[align="center",title="Inner Quad Tessellation",opts="{imageopts}"]
+
+.Caption
+****
+In the <<img-innerquad,Inner Quad Tessellation>> diagram, inner quad
+tessellation levels of (a) [eq]#(4,2)# and (b) [eq]#(7,4)# are shown.
+The regions highlighted in red in figure (b) depict the 10 inner rectangles,
+each of which will be subdivided into two triangles.
+Solid black circles depict vertices on the boundary of the outer and inner
+rectangles, where the inner rectangle of figure (a) is degenerate (a single
+line segment).
+Dotted lines depict the horizontal and vertical edges connecting
+corresponding vertices on the inner and outer rectangle edges.
+****
+
+After the area corresponding to the inner rectangle is filled, the
+tessellator must: produce triangles to cover the area between the inner and
+outer rectangles.
+To do this, the subdivision of the outer rectangle edge above is discarded.
+Instead, the [eq]#u = 0#, [eq]#v = 0#, [eq]#u = 1#, and [eq]#v = 1# edges
+are subdivided according to the first, second, third, and fourth outer
+tessellation levels, respectively, and the tessellation spacing.
+The original subdivision of the inner rectangle is retained.
+The area between the outer and inner rectangles is completely filled by
+non-overlapping triangles.
+Two of the three vertices of each triangle are adjacent vertices on a
+subdivided edge of one rectangle; the third is one of the vertices on the
+corresponding edge of the other rectangle.
+If either edge of the innermost rectangle is degenerate, the area near the
+corresponding outer edges is filled by connecting each vertex on the outer
+edge with the single vertex making up the _inner edge_.
+
+The algorithm used to subdivide the rectangular domain in (u,v) space into
+individual triangles is implementation-dependent.
+However, the set of triangles produced will completely cover the domain, and
+no portion of the domain will be covered by multiple triangles.
+
+Output triangles are generated with a topology similar to
+<<drawing-triangle-lists, triangle lists>>, except that the order in which
+each triangle is generated, and the order in which the vertices are
+generated for each triangle, are implementation-dependent.
+However, the order of vertices in each triangle is consistent across the
+domain as described in <<tessellation-vertex-winding-order>>.
+
+
+[[tessellation-isoline-tessellation]]
+== Isoline Tessellation
+
+If the tessellation primitive mode is code:IsoLines, a set of independent
+horizontal line segments is drawn.
+The segments are arranged into connected strips called _isolines_, where the
+vertices of each isoline have a constant v coordinate and u coordinates
+covering the full range [eq]#[0,1]#.
+The number of isolines generated is derived from the first outer
+tessellation level; the number of segments in each isoline is derived from
+the second outer tessellation level.
+Both inner tessellation levels and the third and fourth outer tessellation
+levels have no effect in this mode.
+
+As with quad tessellation above, isoline tessellation begins with a
+rectangle.
+The [eq]#u = 0# and [eq]#u = 1# edges of the rectangle are subdivided
+according to the first outer tessellation level.
+For the purposes of this subdivision, the tessellation spacing mode is
+ignored and treated as equal_spacing.
+An isoline is drawn connecting each vertex on the [eq]#u = 0# rectangle edge
+to the corresponding vertex on the [eq]#u = 1# rectangle edge, except that
+no line is drawn between [eq]#(0,1)# and [eq]#(1,1)#.
+If the number of isolines on the subdivided [eq]#u = 0# and [eq]#u = 1#
+edges is [eq]#n#, this process will result in [eq]#n# equally spaced lines
+with constant v coordinates of 0, latexmath:[\frac{1}{n}, \frac{2}{n},
+\ldots, \frac{n-1}{n}].
+
+Each of the [eq]#n# isolines is then subdivided according to the second
+outer tessellation level and the tessellation spacing, resulting in [eq]#m#
+line segments.
+Each segment of each line is emitted by the tessellator.
+These line segments are generated with a topology similar to
+<<drawing-line-lists, line lists>>, except that the order in which each line
+is generated, and the order in which the vertices are generated for each
+line segment, are implementation-dependent.
+
+ifdef::VK_KHR_portability_subset[]
+[NOTE]
+.Note
+====
+If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
+is ename:VK_FALSE, then isoline tessellation is not supported by the
+implementation.
+====
+endif::VK_KHR_portability_subset[]
+
+
+[[tessellation-point-mode]]
+== Tessellation Point Mode
+
+For all primitive modes, the tessellator is capable of generating points
+instead of lines or triangles.
+If the tessellation control or tessellation evaluation shader specifies the
+code:OpExecutionMode code:PointMode, the primitive generator will generate
+one point for each distinct vertex produced by tessellation, rather than
+emitting triangles or lines.
+Otherwise, the tessellator will produce a collection of line segments or
+triangles according to the primitive mode.
+These points are generated with a topology similar to <<drawing-point-lists,
+point lists>>, except the order in which the points are generated for each
+input primitive is undefined:.
+
+ifdef::VK_KHR_portability_subset[]
+[NOTE]
+.Note
+====
+If the `apiext:VK_KHR_portability_subset` extension is enabled, and
+slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
+is ename:VK_FALSE, then tessellation point mode is not supported by the
+implementation.
+====
+endif::VK_KHR_portability_subset[]
+
+
+== Tessellation Pipeline State
+
+The pname:pTessellationState member of slink:VkGraphicsPipelineCreateInfo is
+a pointer to a sname:VkPipelineTessellationStateCreateInfo structure.
+
+[open,refpage='VkPipelineTessellationStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline tessellation state',type='structs']
+--
+The sname:VkPipelineTessellationStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineTessellationStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:patchControlPoints is the number of control points per patch.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214]]
+    pname:patchControlPoints must: be greater than zero and less than or
+    equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
+****
+
+include::{generated}/validity/structs/VkPipelineTessellationStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkPipelineTessellationStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineTessellationStateCreateFlags.adoc[]
+
+tname:VkPipelineTessellationStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[open,refpage='VkPipelineTessellationDomainOriginStateCreateInfo',desc='Structure specifying the orientation of the tessellation domain',type='structs']
+--
+The sname:VkPipelineTessellationDomainOriginStateCreateInfo structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineTessellationDomainOriginStateCreateInfo.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineTessellationDomainOriginStateCreateInfoKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:domainOrigin is a elink:VkTessellationDomainOrigin value
+    controlling the origin of the tessellation domain space.
+
+If the sname:VkPipelineTessellationDomainOriginStateCreateInfo structure is
+included in the pname:pNext chain of
+slink:VkPipelineTessellationStateCreateInfo, it controls the origin of the
+tessellation domain.
+If this structure is not present, it is as if pname:domainOrigin was
+ename:VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT.
+
+include::{generated}/validity/structs/VkPipelineTessellationDomainOriginStateCreateInfo.adoc[]
+--
+
+[open,refpage='VkTessellationDomainOrigin',desc='Enum describing tessellation domain origin',type='enums']
+--
+The possible tessellation domain origins are specified by the
+elink:VkTessellationDomainOrigin enumeration:
+
+include::{generated}/api/enums/VkTessellationDomainOrigin.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/enums/VkTessellationDomainOriginKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * ename:VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT specifies that the origin
+    of the domain space is in the upper left corner, as shown in figure
+    <<img-tessellation-topology-ul>>.
+  * ename:VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT specifies that the origin
+    of the domain space is in the lower left corner, as shown in figure
+    <<img-tessellation-topology-ll>>.
+
+This enum affects how the code:VertexOrderCw and code:VertexOrderCcw
+tessellation execution modes are interpreted, since the winding is defined
+relative to the orientation of the domain.
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetTessellationDomainOriginEXT',desc='Specify the origin of the tessellation domain space dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the origin of the
+tessellation domain space, call:
+
+include::{generated}/api/protos/vkCmdSetTessellationDomainOriginEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:domainOrigin specifies the origin of the tessellation domain
+    space.
+
+This command sets the origin of the tessellation domain space for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineTessellationDomainOriginStateCreateInfo::pname:domainOrigin
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetTessellationDomainOriginEXT
+:requiredfeature: extendedDynamicState3TessellationDomainOrigin
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetTessellationDomainOriginEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/textures.adoc b/codegen/vulkan/vulkan-docs-next/chapters/textures.adoc
new file mode 100644
index 0000000..777f8a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/textures.adoc
@@ -0,0 +1,4112 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[textures]]
+= Image Operations
+
+
+== Image Operations Overview
+
+Vulkan Image Operations are operations performed by those SPIR-V Image
+Instructions which take an code:OpTypeImage (representing a
+sname:VkImageView) or code:OpTypeSampledImage (representing a
+(sname:VkImageView, sname:VkSampler) pair).
+Read, write, and atomic operations also take texel coordinates as operands,
+and return a value based on a neighborhood of texture elements (_texels_)
+within the image.
+Query operations return properties of the bound image or of the lookup
+itself.
+The "`Depth`" operand of code:OpTypeImage is ignored.
+
+[NOTE]
+.Note
+====
+Texel is a term which is a combination of the words texture and element.
+Early interactive computer graphics supported texture operations on
+textures, a small subset of the image operations on images described here.
+The discrete samples remain essentially equivalent, however, so we retain
+the historical term texel to refer to them.
+====
+
+Image Operations include the functionality of the following SPIR-V Image
+Instructions:
+
+  * code:OpImageSample* and code:OpImageSparseSample* read one or more
+    neighboring texels of the image, and <<textures-texel-filtering,filter>>
+    the texel values based on the state of the sampler.
+  ** Instructions with code:ImplicitLod in the name
+     <<textures-level-of-detail-operation,determine>> the LOD used in the
+     sampling operation based on the coordinates used in neighboring
+     fragments.
+  ** Instructions with code:ExplicitLod in the name
+     <<textures-level-of-detail-operation,determine>> the LOD used in the
+     sampling operation based on additional coordinates.
+  ** Instructions with code:Proj in the name apply homogeneous
+     <<textures-projection,projection>> to the coordinates.
+  * code:OpImageFetch and code:OpImageSparseFetch return a single texel of
+    the image.
+    No sampler is used.
+  * code:OpImage*Gather and code:OpImageSparse*Gather read neighboring
+    texels and <<textures-gather,return a single component>> of each.
+  * code:OpImageRead (and code:OpImageSparseRead) and code:OpImageWrite read
+    and write, respectively, a texel in the image.
+    No sampler is used.
+ifdef::VK_NV_shader_image_footprint[]
+  * code:OpImageSampleFootprintNV identifies and returns information about
+    the set of texels in the image that would be accessed by an equivalent
+    code:OpImageSample* instruction.
+endif::VK_NV_shader_image_footprint[]
+  * code:OpImage*Dref* instructions apply
+    <<textures-depth-compare-operation,depth comparison>> on the texel
+    values.
+  * code:OpImageSparse* instructions additionally return a
+    <<textures-sparse-residency,sparse residency>> code.
+  * code:OpImageQuerySize, code:OpImageQuerySizeLod,
+    code:OpImageQueryLevels, and code:OpImageQuerySamples return properties
+    of the image descriptor that would be accessed.
+    The image itself is not accessed.
+  * code:OpImageQueryLod returns the LOD parameters that would be used in a
+    sample operation.
+    The actual operation is not performed.
+ifdef::VK_QCOM_image_processing[]
+  * code:OpImageWeightedSampleQCOM reads a 2D neighborhood of texels and
+    computes a weighted average using weight values from a separate weight
+    texture.
+  * code:opImageBlockMatchSADQCOM and code:opTextureBlockMatchSSD compare 2D
+    neighborhoods of texels from two textures.
+  * code:OpImageBoxFilterQCOM reads a 2D neighborhood of texels and computes
+    a weighted average of the texels.
+endif::VK_QCOM_image_processing[]
+ifdef::VK_QCOM_image_processing2[]
+  * code:opImageBlockMatchWindowSADQCOM and
+    code:opImageBlockMatchWindowSSDQCOM compare 2D neighborhoods of texels
+    from two textures with the comparison repeated across a window region in
+    the target texture.
+  * code:opImageBlockMatchGatherSADQCOM and
+    code:opImageBlockMatchWindowSSDQCOM compares four 2D neighborhoods of
+    texels from a target texture with a single 2D neighborhood in the
+    reference texture.
+    The R component of each comparison is gathered and returned in the
+    output.
+endif::VK_QCOM_image_processing2[]
+
+
+[[textures-texel-coordinate-systems]]
+=== Texel Coordinate Systems
+
+Images are addressed by _texel coordinates_.
+There are three _texel coordinate systems_:
+
+  * normalized texel coordinates [eq]#[0.0, 1.0]#
+  * unnormalized texel coordinates [eq]#[0.0, width / height / depth)#
+  * integer texel coordinates [eq]#[0, width / height / depth)#
+
+SPIR-V code:OpImageFetch, code:OpImageSparseFetch, code:OpImageRead,
+code:OpImageSparseRead,
+ifdef::VK_QCOM_image_processing[]
+code:opImageBlockMatchSADQCOM, code:opImageBlockMatchSSDQCOM,
+endif::VK_QCOM_image_processing[]
+ifdef::VK_QCOM_image_processing2[]
+code:opImageBlockMatchWindowSADQCOM, code:opImageBlockMatchWindowSSDQCOM,
+endif::VK_QCOM_image_processing2[]
+and code:OpImageWrite instructions use integer texel coordinates.
+
+Other image instructions can: use either normalized or unnormalized texel
+coordinates (selected by the pname:unnormalizedCoordinates state of the
+sampler used in the instruction), but there are
+<<samplers-unnormalizedCoordinates,limitations>> on what operations, image
+state, and sampler state is supported.
+Normalized coordinates are logically
+<<textures-normalized-to-unnormalized,converted>> to unnormalized as part of
+image operations, and <<textures-normalized-operations,certain steps>> are
+only performed on normalized coordinates.
+The array layer coordinate is always treated as unnormalized even when other
+coordinates are normalized.
+
+Normalized texel coordinates are referred to as [eq]#(s,t,r,q,a)#, with the
+coordinates having the following meanings:
+
+  * [eq]#s#: Coordinate in the first dimension of an image.
+  * [eq]#t#: Coordinate in the second dimension of an image.
+  * [eq]#r#: Coordinate in the third dimension of an image.
+  ** [eq]#(s,t,r)# are interpreted as a direction vector for Cube images.
+  * [eq]#q#: Fourth coordinate, for homogeneous (projective) coordinates.
+  * [eq]#a#: Coordinate for array layer.
+
+The coordinates are extracted from the SPIR-V operand based on the
+dimensionality of the image variable and type of instruction.
+For code:Proj instructions, the components are in order [eq]#(s, [t,] [r,]
+q)#, with [eq]#t# and [eq]#r# being conditionally present based on the
+code:Dim of the image.
+For non-code:Proj instructions, the coordinates are [eq]#(s [,t] [,r]
+[,a])#, with [eq]#t# and [eq]#r# being conditionally present based on the
+code:Dim of the image and [eq]#a# being conditionally present based on the
+code:Arrayed property of the image.
+Projective image instructions are not supported on code:Arrayed images.
+
+Unnormalized texel coordinates are referred to as [eq]#(u,v,w,a)#, with the
+coordinates having the following meanings:
+
+  * [eq]#u#: Coordinate in the first dimension of an image.
+  * [eq]#v#: Coordinate in the second dimension of an image.
+  * [eq]#w#: Coordinate in the third dimension of an image.
+  * [eq]#a#: Coordinate for array layer.
+
+Only the [eq]#u# and [eq]#v# coordinates are directly extracted from the
+SPIR-V operand, because only 1D and 2D (non-code:Arrayed) dimensionalities
+support unnormalized coordinates.
+The components are in order [eq]#(u [,v])#, with [eq]#v# being conditionally
+present when the dimensionality is 2D.
+When normalized coordinates are converted to unnormalized coordinates, all
+four coordinates are used.
+
+Integer texel coordinates are referred to as [eq]#(i,j,k,l,n)#, with the
+coordinates having the following meanings:
+
+  * [eq]#i#: Coordinate in the first dimension of an image.
+  * [eq]#j#: Coordinate in the second dimension of an image.
+  * [eq]#k#: Coordinate in the third dimension of an image.
+  * [eq]#l#: Coordinate for array layer.
+  * [eq]#n#: Index of the sample within the texel.
+
+They are extracted from the SPIR-V operand in order [eq]#(i [,j] [,k] [,l]
+[,n])#, with [eq]#j# and [eq]#k# conditionally present based on the code:Dim
+of the image, and [eq]#l# conditionally present based on the code:Arrayed
+property of the image.
+[eq]#n# is conditionally present and is taken from the code:Sample image
+operand.
+
+ifdef::VK_EXT_image_sliced_view_of_3d[]
+If an accessed image was created from a view using
+slink:VkImageViewSlicedCreateInfoEXT and accessed through a
+ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE descriptor, then the value of [eq]#k#
+is incremented by slink:VkImageViewSlicedCreateInfoEXT::pname:sliceOffset,
+giving [eq]#k <- sliceOffset {plus} k#.
+The image's accessible range in the third dimension is [eq]#k < sliceOffset
++ sliceCount#.
+If slink:VkImageViewSlicedCreateInfoEXT::pname:sliceCount is
+ename:VK_REMAINING_3D_SLICES_EXT, the range is inherited from the image's
+depth extent as specified by <<resources-image-mip-level-sizing, Image Mip
+Level Sizing>>.
+endif::VK_EXT_image_sliced_view_of_3d[]
+
+For all coordinate types, unused coordinates are assigned a value of zero.
+
+[[textures-texel-coordinate-systems-diagrams]]
+image::{images}/vulkantexture0-ll.svg[align="center",title="Texel Coordinate Systems, Linear Filtering",opts="{imageopts}"]
+The Texel Coordinate Systems - For the example shown of an 8{times}4 texel
+two dimensional image.
+
+  * Normalized texel coordinates:
+  ** The [eq]#s# coordinate goes from 0.0 to 1.0.
+  ** The [eq]#t# coordinate goes from 0.0 to 1.0.
+  * Unnormalized texel coordinates:
+  ** The [eq]#u# coordinate within the range 0.0 to 8.0 is within the image,
+     otherwise it is outside the image.
+  ** The [eq]#v# coordinate within the range 0.0 to 4.0 is within the image,
+     otherwise it is outside the image.
+  * Integer texel coordinates:
+  ** The [eq]#i# coordinate within the range 0 to 7 addresses texels within
+     the image, otherwise it is outside the image.
+  ** The [eq]#j# coordinate within the range 0 to 3 addresses texels within
+     the image, otherwise it is outside the image.
+  * Also shown for linear filtering:
+  ** Given the unnormalized coordinates [eq]#(u,v)#, the four texels
+     selected are [eq]#i~0~j~0~#, [eq]#i~1~j~0~#, [eq]#i~0~j~1~#, and
+     [eq]#i~1~j~1~#.
+  ** The fractions [eq]#{alpha}# and [eq]#{beta}#.
+  ** Given the offset [eq]#{DeltaUpper}~i~# and [eq]#{DeltaUpper}~j~#, the
+     four texels selected by the offset are [eq]#i~0~j'~0~#,
+     [eq]#i~1~j'~0~#, [eq]#i~0~j'~1~#, and [eq]#i~1~j'~1~#.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[NOTE]
+.Note
+====
+For formats with reduced-resolution components, [eq]#{DeltaUpper}~i~# and
+[eq]#{DeltaUpper}~j~# are relative to the resolution of the
+highest-resolution component, and therefore may be divided by two relative
+to the unnormalized coordinate space of the lower-resolution components.
+====
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+image::{images}/vulkantexture1-ll.svg[align="center",title="Texel Coordinate Systems, Nearest Filtering",opts="{imageopts}"]
+
+The Texel Coordinate Systems - For the example shown of an 8{times}4 texel
+two dimensional image.
+
+  * Texel coordinates as above.
+    Also shown for nearest filtering:
+  ** Given the unnormalized coordinates [eq]#(u,v)#, the texel selected is
+     [eq]#ij#.
+  ** Given the offset [eq]#{DeltaUpper}~i~# and [eq]#{DeltaUpper}~j~#, the
+     texel selected by the offset is [eq]#ij'#.
+
+ifdef::VK_NV_corner_sampled_image[]
+For corner-sampled images, the texel samples are located at the grid
+intersections instead of the texel centers.
+
+image::{images}/vulkantexture0-corner-alternative-a-ll.svg[align="center",title="Texel Coordinate Systems, Corner Sampling",opts="{imageopts}"]
+
+endif::VK_NV_corner_sampled_image[]
+
+
+== Conversion Formulas
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Bill) These Conversion Formulas will likely move to Section 2.7 Fixed-Point
+Data Conversions (RGB to sRGB and sRGB to RGB) and section 2.6 Numeric
+Representation and Computation (RGB to Shared Exponent and Shared Exponent
+to RGB)
+====
+endif::editing-notes[]
+
+
+[[textures-RGB-sexp]]
+=== RGB to Shared Exponent Conversion
+
+An RGB color [eq]#(red, green, blue)# is transformed to a shared exponent
+color [eq]#(red~shared~, green~shared~, blue~shared~, exp~shared~)# as
+follows:
+
+First, the components [eq]#(red, green, blue)# are clamped to
+[eq]#(red~clamped~, green~clamped~, blue~clamped~)# as:
+
+  {empty}:: [eq]#red~clamped~ = max(0, min(sharedexp~max~, red))#
+  {empty}:: [eq]#green~clamped~ = max(0, min(sharedexp~max~, green))#
+  {empty}:: [eq]#blue~clamped~ = max(0, min(sharedexp~max~, blue))#
+
+where:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+N               & = 9  & \text{number of mantissa bits per component} \\
+B               & = 15 & \text{exponent bias} \\
+E_{max}         & = 31 & \text{maximum possible biased exponent value} \\
+sharedexp_{max} & = \frac{(2^N-1)}{2^N} \times 2^{(E_{max}-B)}
+\end{aligned}
++++++++++++++++++++
+
+[NOTE]
+.Note
+====
+// The trailing + is to avoid the asciidoc parser treating the custom role
+// as a block attribute in some cases.
+[eq]#NaN#, if supported, is handled as in +
+<<ieee-754,IEEE 754-2008>> `minNum()` and `maxNum()`.
+This results in any [eq]#NaN# being mapped to zero.
+====
+
+The largest clamped component, [eq]#max~clamped~# is determined:
+
+  {empty}:: [eq]#max~clamped~ = max(red~clamped~, green~clamped~,
+            blue~clamped~)#
+
+A preliminary shared exponent [eq]#exp'# is computed:
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+exp' =
+  \begin{cases}
+    \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1)
+      & \text{for}\  max_{clamped} > 2^{-(B+1)} \\
+    0
+      & \text{for}\  max_{clamped} \leq 2^{-(B+1)}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+The shared exponent [eq]#exp~shared~# is computed:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+max_{shared} =
+    \left \lfloor
+        { \frac{max_{clamped}}{2^{(exp'-B-N)}} + \frac{1}{2} }
+    \right \rfloor
+\end{aligned}
++++++++++++++++++++
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+exp_{shared} =
+  \begin{cases}
+    exp'   & \text{for}\  0 \leq max_{shared} < 2^N \\
+    exp'+1 & \text{for}\  max_{shared} = 2^N
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+Finally, three integer values in the range [eq]#0# to [eq]#2^N^# are
+computed:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+red_{shared} & =
+    \left \lfloor
+        { \frac{red_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
+    \right \rfloor \\
+green_{shared} & =
+    \left \lfloor
+        { \frac{green_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
+    \right \rfloor \\
+blue_{shared} & =
+    \left \lfloor
+        { \frac{blue_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2} }
+    \right \rfloor
+\end{aligned}
++++++++++++++++++++
+
+
+[[textures-sexp-RGB]]
+=== Shared Exponent to RGB
+
+A shared exponent color [eq]#(red~shared~, green~shared~, blue~shared~,
+exp~shared~)# is transformed to an RGB color [eq]#(red, green, blue)# as
+follows:
+
+  {empty}:: latexmath:[red = red_{shared} \times {2^{(exp_{shared}-B-N)}}]
+  {empty}:: latexmath:[green = green_{shared} \times
+            {2^{(exp_{shared}-B-N)}}]
+  {empty}:: latexmath:[blue = blue_{shared} \times {2^{(exp_{shared}-B-N)}}]
+
+where:
+
+  {empty}:: [eq]#N = 9# (number of mantissa bits per component)
+  {empty}:: [eq]#B = 15# (exponent bias)
+
+
+== Texel Input Operations
+
+_Texel input instructions_ are SPIR-V image instructions that read from an
+image.
+_Texel input operations_ are a set of steps that are performed on state,
+coordinates, and texel values while processing a texel input instruction,
+and which are common to some or all texel input instructions.
+They include the following steps, which are performed in the listed order:
+
+  * <<textures-input-validation,Validation operations>>
+  ** <<textures-operation-validation,Instruction/Sampler/Image validation>>
+  ** <<textures-integer-coordinate-validation,Coordinate validation>>
+  ** <<textures-sparse-validation,Sparse validation>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** <<textures-layout-validation,Layout validation>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * <<textures-format-conversion,Format conversion>>
+  * <<textures-texel-replacement,Texel replacement>>
+  * <<textures-depth-compare-operation,Depth comparison>>
+  * <<textures-conversion-to-rgba,Conversion to RGBA>>
+  * <<textures-component-swizzle,Component swizzle>>
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * <<textures-chroma-reconstruction,Chroma reconstruction>>
+  * <<textures-sampler-YCbCr-conversion,{YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+For texel input instructions involving multiple texels (for sampling or
+gathering), these steps are applied for each texel that is used in the
+instruction.
+Depending on the type of image instruction, other steps are conditionally
+performed between these steps or involving multiple coordinate or texel
+values.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If <<textures-chroma-reconstruction,Chroma Reconstruction>> is implicit,
+<<textures-texel-filtering, Texel Filtering>> instead takes place during
+chroma reconstruction, before <<textures-sampler-YCbCr-conversion,sampler
+{YCbCr} conversion>> occurs.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_QCOM_image_processing[]
+The operations described in <<textures-blockmatch,block matching>> and
+<<textures-weightimage,weight image sampling>> are performed before
+<<textures-conversion-to-rgba,Conversion to RGBA>> and
+<<textures-component-swizzle,Component swizzle>>.
+endif::VK_QCOM_image_processing[]
+
+
+[[textures-input-validation]]
+=== Texel Input Validation Operations
+
+_Texel input validation operations_ inspect instruction/image/sampler state
+or coordinates, and in certain circumstances cause the texel value to be
+replaced or become undefined:.
+There are a series of validations that the texel undergoes.
+
+
+[[textures-operation-validation]]
+==== Instruction/Sampler/Image View Validation
+
+There are a number of cases where a SPIR-V instruction can: mismatch with
+the sampler, the image view, or both, and a number of further cases where
+the sampler can: mismatch with the image view.
+In such cases the value of the texel returned is undefined:.
+
+These cases include:
+
+  * The sampler pname:borderColor is an integer type and the image view
+    pname:format is not one of the elink:VkFormat integer types or a stencil
+    component of a depth/stencil format.
+  * The sampler pname:borderColor is a float type and the image view
+    pname:format is not one of the elink:VkFormat float types or a depth
+    component of a depth/stencil format.
+ifndef::VK_EXT_border_color_swizzle[]
+  * The sampler pname:borderColor is one of the opaque black colors
+    (ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK or
+    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image view
+    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
+    components is not the <<resources-image-views-identity-mappings,identity
+    swizzle>>.
+endif::VK_EXT_border_color_swizzle[]
+ifdef::VK_EXT_border_color_swizzle[]
+  * The sampler pname:borderColor is one of the opaque black colors
+    (ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK or
+    ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image view
+    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
+    components is not the <<resources-image-views-identity-mappings,identity
+    swizzle>>, and
+    slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
+    feature is not enabled, and
+    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT is not
+    specified.
+  * slink:VkSamplerBorderColorComponentMappingCreateInfoEXT::pname:components,
+    if specified, has a component swizzle that does not match the component
+    swizzle of the image view, and either component swizzle is not a form of
+    identity swizzle.
+  * slink:VkSamplerBorderColorComponentMappingCreateInfoEXT::pname:srgb, if
+    specified, does not match the sRGB encoding of the image view.
+endif::VK_EXT_border_color_swizzle[]
+ifdef::VK_EXT_custom_border_color[]
+  * The sampler pname:borderColor is a custom color
+    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the supplied
+    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor
+    is outside the bounds of the values representable in the image view's
+    pname:format.
+ifndef::VK_EXT_border_color_swizzle[]
+  * The sampler pname:borderColor is a custom color
+    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the image view
+    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
+    components is not the <<resources-image-views-identity-mappings,identity
+    swizzle>>.
+endif::VK_EXT_border_color_swizzle[]
+ifdef::VK_EXT_border_color_swizzle[]
+  * The sampler pname:borderColor is a custom color
+    (ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or
+    ename:VK_BORDER_COLOR_INT_CUSTOM_EXT) and the image view
+    elink:VkComponentSwizzle for any of the slink:VkComponentMapping
+    components is not the <<resources-image-views-identity-mappings,identity
+    swizzle>>, and
+    slink:VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::pname:borderColorSwizzleFromImage
+    feature is not enabled, and
+    slink:VkSamplerBorderColorComponentMappingCreateInfoEXT is not
+    specified.
+endif::VK_EXT_border_color_swizzle[]
+endif::VK_EXT_custom_border_color[]
+  * The elink:VkImageLayout of any subresource in the image view does not
+    match the slink:VkDescriptorImageInfo::pname:imageLayout used to write
+    the image descriptor.
+  * The SPIR-V Image Format is not <<spirvenv-image-formats,compatible>>
+    with the image view's pname:format.
+  * The sampler pname:unnormalizedCoordinates is ename:VK_TRUE and any of
+    the <<samplers-unnormalizedCoordinates,limitations of unnormalized
+    coordinates>> are violated.
+ifdef::VK_EXT_fragment_density_map[]
+  * The sampler was created with pname:flags containing
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and the image was not created
+    with pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
+  * The sampler was not created with pname:flags containing
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and the image was created
+    with pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT.
+  * The sampler was created with pname:flags containing
+    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT and is used with a function
+    that is not code:OpImageSampleImplicitLod or
+    code:OpImageSampleExplicitLod, or is used with operands code:Offset or
+    code:ConstOffsets.
+endif::VK_EXT_fragment_density_map[]
+  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions and
+    the sampler pname:compareEnable is ename:VK_FALSE
+  * The SPIR-V instruction is not one of the code:OpImage*Dref* instructions
+    and the sampler pname:compareEnable is ename:VK_TRUE
+ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions and
+    the image view pname:format is not one of the depth/stencil formats with
+    a depth component, or the image view aspect is not
+    ename:VK_IMAGE_ASPECT_DEPTH_BIT.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * The SPIR-V instruction is one of the code:OpImage*Dref* instructions,
+    the image view pname:format is one of the depth/stencil formats, and the
+    image view aspect is not ename:VK_IMAGE_ASPECT_DEPTH_BIT.
+endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
+  * The SPIR-V instruction's image variable's properties are not compatible
+    with the image view:
+  ** Rules for pname:viewType:
+  *** ename:VK_IMAGE_VIEW_TYPE_1D must: have code:Dim = 1D, code:Arrayed =
+      0, code:MS = 0.
+  *** ename:VK_IMAGE_VIEW_TYPE_2D must: have code:Dim = 2D, code:Arrayed = 0.
+  *** ename:VK_IMAGE_VIEW_TYPE_3D must: have code:Dim = 3D, code:Arrayed =
+      0, code:MS = 0.
+  *** ename:VK_IMAGE_VIEW_TYPE_CUBE must: have code:Dim = Cube, code:Arrayed
+      = 0, code:MS = 0.
+  *** ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY must: have code:Dim = 1D,
+      code:Arrayed = 1, code:MS = 0.
+  *** ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY must: have code:Dim = 2D,
+      code:Arrayed = 1.
+  *** ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY must: have code:Dim = Cube,
+      code:Arrayed = 1, code:MS = 0.
+  ** If the image was created with slink:VkImageCreateInfo::pname:samples
+     equal to ename:VK_SAMPLE_COUNT_1_BIT, the instruction must: have
+     code:MS = 0.
+  ** If the image was created with slink:VkImageCreateInfo::pname:samples
+     not equal to ename:VK_SAMPLE_COUNT_1_BIT, the instruction must: have
+     code:MS = 1.
+  ** If the code:Sampled code:Type of the code:OpTypeImage does not match
+     the <<spirv-type,SPIR-V Type>>.
+  ** If the <<spirvenv-image-signedness,signedness of any read or sample
+     operation>> does not match the signedness of the image's format.
+ifdef::VK_NV_corner_sampled_image[]
+  * If the image was created with slink:VkImageCreateInfo::pname:flags
+    containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, the sampler
+    addressing modes must: only use a elink:VkSamplerAddressMode of
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+endif::VK_NV_corner_sampled_image[]
+ifdef::VK_NV_shader_image_footprint[]
+  * The SPIR-V instruction is code:OpImageSampleFootprintNV with code:Dim =
+    2D and pname:addressModeU or pname:addressModeV in the sampler is not
+    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+  * The SPIR-V instruction is code:OpImageSampleFootprintNV with code:Dim =
+    3D and pname:addressModeU, pname:addressModeV, or pname:addressModeW in
+    the sampler is not ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+endif::VK_NV_shader_image_footprint[]
+ifdef::VK_EXT_custom_border_color[]
+  * The sampler was created with a specified
+    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format which does
+    not match the elink:VkFormat of the image view(s) it is sampling.
+  * The sampler is sampling an image view of
+    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16,
+    ename:VK_FORMAT_B5G6R5_UNORM_PACK16, or
+    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 format without a specified
+    slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format.
+endif::VK_EXT_custom_border_color[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Only code:OpImageSample* and code:OpImageSparseSample* can: be used with a
+sampler or image view that enables <<samplers-YCbCr-conversion,sampler
+{YCbCr} conversion>>.
+
+code:OpImageFetch, code:OpImageSparseFetch, code:OpImage*Gather, and
+code:OpImageSparse*Gather must: not be used with a sampler or image view
+that enables <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
+
+The code:ConstOffset and code:Offset operands must: not be used with a
+sampler or image view that enables <<samplers-YCbCr-conversion,sampler
+{YCbCr} conversion>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+[[textures-integer-coordinate-validation]]
+==== Integer Texel Coordinate Validation
+
+Integer texel coordinates are validated against the size of the image level,
+and the number of layers and number of samples in the image.
+For SPIR-V instructions that use integer texel coordinates, this is
+performed directly on the integer coordinates.
+For instructions that use normalized or unnormalized texel coordinates, this
+is performed on the coordinates that result after
+<<textures-unnormalized-to-integer,conversion>> to integer texel
+coordinates.
+
+If the integer texel coordinates do not satisfy all of the conditions
+
+  {empty}:: [eq]#0 {leq} i < w~s~#
+  {empty}:: [eq]#0 {leq} j < h~s~#
+  {empty}:: [eq]#0 {leq} k < d~s~#
+  {empty}:: [eq]#0 {leq} l < layers#
+  {empty}:: [eq]#0 {leq} n < samples#
+
+where:
+
+  {empty}:: [eq]#w~s~ =# width of the image level
+  {empty}:: [eq]#h~s~ =# height of the image level
+  {empty}:: [eq]#d~s~ =# depth of the image level
+  {empty}:: [eq]#layers =# number of layers in the image
+  {empty}:: [eq]#samples =# number of samples per texel in the image
+
+then the texel fails integer texel coordinate validation.
+
+There are four cases to consider:
+
+  . Valid Texel Coordinates
++
+  * If the texel coordinates pass validation (that is, the coordinates lie
+    within the image),
++
+then the texel value comes from the value in image memory.
+
+  . Border Texel
++
+  * If the texel coordinates fail validation, and
+  * If the read is the result of an image sample instruction or image gather
+    instruction, and
+  * If the image is not a cube image,
+ifdef::VK_EXT_non_seamless_cube_map[]
+    or if a sampler created with
+    ename:VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT is used,
+endif::VK_EXT_non_seamless_cube_map[]
+
++
+then the texel is a border texel and <<textures-texel-replacement,texel
+replacement>> is performed.
+
+  . Invalid Texel
++
+  * If the texel coordinates fail validation, and
+  * If the read is the result of an image fetch instruction, image read
+    instruction, or atomic instruction,
++
+then the texel is an invalid texel and <<textures-texel-replacement,texel
+replacement>> is performed.
+
+  . Cube Map Edge or Corner
++
+Otherwise the texel coordinates lie beyond the edges or corners of the
+selected cube map face, and <<textures-cubemapedge, Cube map edge handling>>
+is performed.
+
+
+[[textures-cubemapedge]]
+==== Cube Map Edge Handling
+
+If the texel coordinates lie beyond the edges or corners of the selected
+cube map face (as described in the prior section), the following steps are
+performed.
+Note that this does not occur when using ename:VK_FILTER_NEAREST filtering
+within a mip level, since ename:VK_FILTER_NEAREST is treated as using
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+
+  * Cube Map Edge Texel
++
+  ** If the texel lies beyond the selected cube map face in either only
+     [eq]#i# or only [eq]#j#, then the coordinates [eq]#(i,j)# and the array
+     layer [eq]#l# are transformed to select the adjacent texel from the
+     appropriate neighboring face.
+
+  * Cube Map Corner Texel
++
+  ** If the texel lies beyond the selected cube map face in both [eq]#i# and
+     [eq]#j#, then there is no unique neighboring face from which to read
+     that texel.
+     The texel should: be replaced by the average of the three values of the
+     adjacent texels in each incident face.
+     However, implementations may: replace the cube map corner texel by
+     other methods.
+ifndef::VK_EXT_filter_cubic[]
+The methods are subject to the constraint that if the three available texels
+have the same value, the resulting filtered texel must: have that value.
+endif::VK_EXT_filter_cubic[]
+ifdef::VK_EXT_filter_cubic[]
+The methods are subject to the constraint that for linear filtering if the
+three available texels have the same value, the resulting filtered texel
+must: have that value, and for cubic filtering if the twelve available
+samples have the same value, the resulting filtered texel must: have that
+value.
+endif::VK_EXT_filter_cubic[]
+
+
+[[textures-sparse-validation]]
+==== Sparse Validation
+
+If the texel reads from an unbound region of a sparse image, the texel is a
+_sparse unbound texel_, and processing continues with
+<<textures-texel-replacement,texel replacement>>.
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[textures-layout-validation]]
+==== Layout Validation
+
+If all planes of a _disjoint_ _multi-planar_ image are not in the same
+<<resources-image-layouts,image layout>>, the image must: not be sampled
+with <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> enabled.
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+[[textures-format-conversion]]
+=== Format Conversion
+
+Texels undergo a format conversion from the elink:VkFormat of the image view
+to a vector of either floating point or signed or unsigned integer
+components, with the number of components based on the number of components
+present in the format.
+
+  * Color formats have one, two, three, or four components, according to the
+    format.
+  * Depth/stencil formats are one component.
+    The depth or stencil component is selected by the pname:aspectMask of
+    the image view.
+
+Each component is converted based on its type and size (as defined in the
+<<formats-definition,Format Definition>> section for each elink:VkFormat),
+using the appropriate equations in <<fundamentals-fp16,16-Bit Floating-Point
+Numbers>>, <<fundamentals-fp11,Unsigned 11-Bit Floating-Point Numbers>>,
+<<fundamentals-fp10,Unsigned 10-Bit Floating-Point Numbers>>,
+<<fundamentals-fixedconv,Fixed-Point Data Conversion>>, and
+<<textures-sexp-RGB,Shared Exponent to RGB>>.
+Signed integer components smaller than 32 bits are sign-extended.
+
+If the image view format is sRGB, the color components are first converted
+as if they are UNORM, and then sRGB to linear conversion is applied to the
+R, G, and B components as described in the "`sRGB EOTF`" section of the
+<<data-format,Khronos Data Format Specification>>.
+The A component, if present, is unchanged.
+
+ifdef::VK_QCOM_ycbcr_degamma[]
+[[textures-ycbcr-degamma]]
+If
+slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::pname:enableYDegamma
+is equal to ename:VK_TRUE, then sRGB to linear conversion is applied to the
+G component as described in the "`sRGB EOTF`" section of the
+<<data-format,Khronos Data Format Specification>>.
+If
+slink:VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::pname:enableCbCrDegamma
+is equal to ename:VK_TRUE, then sRGB to linear conversion is applied to the
+R and B components as described in the "`sRGB EOTF`" section of the
+<<data-format,Khronos Data Format Specification>>.
+The A component, if present, is unchanged.
+endif::VK_QCOM_ycbcr_degamma[]
+
+If the image view format is block-compressed, then the texel value is first
+decoded, then converted based on the type and number of components defined
+by the compressed format.
+
+
+[[textures-texel-replacement]]
+=== Texel Replacement
+
+A texel is replaced if it is one (and only one) of:
+
+  * a border texel,
+  * an invalid texel, or
+  * a sparse unbound texel.
+
+Border texels are replaced with a value based on the image format and the
+pname:borderColor of the sampler.
+The border color is:
+
+[[textures-border-replacement-color]]
+ifdef::VK_EXT_custom_border_color[]
+.Border Color [eq]#B#, Custom Border Color slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:customBorderColor [eq]#U#
+endif::VK_EXT_custom_border_color[]
+ifndef::VK_EXT_custom_border_color[]
+.Border Color [eq]#B#
+endif::VK_EXT_custom_border_color[]
+[options="header",cols="60%,40%"]
+|====
+| Sampler pname:borderColor                     | Corresponding Border Color
+| ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0.0, 0.0, 0.0, 0.0]#
+| ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK      | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0.0, 0.0, 0.0, 1.0]#
+| ename:VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE      | [eq]#[B~r~, B~g~, B~b~, B~a~] = [1.0, 1.0, 1.0, 1.0]#
+| ename:VK_BORDER_COLOR_INT_TRANSPARENT_BLACK   | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0, 0, 0, 0]#
+| ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [0, 0, 0, 1]#
+| ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [1, 1, 1, 1]#
+ifdef::VK_EXT_custom_border_color[]
+| ename:VK_BORDER_COLOR_FLOAT_CUSTOM_EXT        | [eq]#[B~r~, B~g~, B~b~, B~a~] = [U~r~, U~g~, U~b~, U~a~]#
+| ename:VK_BORDER_COLOR_INT_CUSTOM_EXT          | [eq]#[B~r~, B~g~, B~b~, B~a~] = [U~r~, U~g~, U~b~, U~a~]#
+endif::VK_EXT_custom_border_color[]
+|====
+
+ifdef::VK_EXT_custom_border_color[]
+The custom border color ([eq]#U#) may: be rounded by implementations prior
+to texel replacement, but the error introduced by such a rounding must: not
+exceed one ULP of the image's pname:format.
+endif::VK_EXT_custom_border_color[]
+
+[NOTE]
+.Note
+====
+The names etext:VK_BORDER_COLOR_*\_TRANSPARENT_BLACK,
+etext:VK_BORDER_COLOR_*\_OPAQUE_BLACK, and
+etext:VK_BORDER_COLOR_*_OPAQUE_WHITE are meant to describe which components
+are zeros and ones in the vocabulary of compositing, and are not meant to
+imply that the numerical value of ename:VK_BORDER_COLOR_INT_OPAQUE_WHITE is
+a saturating value for integers.
+====
+
+This is substituted for the texel value by replacing the number of
+components in the image format
+
+[[textures-border-replacement-table]]
+.Border Texel Components After Replacement
+[width="100%",options="header"]
+|====
+| Texel Aspect or Format      | Component Assignment
+| Depth aspect                | [eq]#D                                     = B~r~#
+ifdef::VK_EXT_custom_border_color[]
+| Stencil aspect              | [eq]#S                                     = B~r~#{sym2}
+endif::VK_EXT_custom_border_color[]
+ifndef::VK_EXT_custom_border_color[]
+| Stencil aspect              | [eq]#S                                     = B~r~#
+endif::VK_EXT_custom_border_color[]
+| One component color format  | [eq]#Color~r~                              = B~r~#
+| Two component color format  | [eq]#[Color~r~,Color~g~]                   = [B~r~,B~g~]#
+| Three component color format| [eq]#[Color~r~,Color~g~,Color~b~]          = [B~r~,B~g~,B~b~]#
+| Four component color format | [eq]#[Color~r~,Color~g~,Color~b~,Color~a~] = [B~r~,B~g~,B~b~,B~a~]#
+ifdef::VK_KHR_maintenance5[]
+| Single component alpha format | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [0,0,0,B~a~]#
+endif::VK_KHR_maintenance5[]
+|====
+ifdef::VK_EXT_custom_border_color[]
+{sym2} [eq]#S = B~g~# may: be substituted as the replacement method by the
+implementation when slink:VkSamplerCreateInfo::pname:borderColor is
+ename:VK_BORDER_COLOR_INT_CUSTOM_EXT and
+slink:VkSamplerCustomBorderColorCreateInfoEXT::pname:format is
+ename:VK_FORMAT_UNDEFINED.
+Implementations should: use [eq]#S = B~r~# as the replacement method.
+endif::VK_EXT_custom_border_color[]
+
+The value returned by a read of an invalid texel is undefined:, unless that
+read operation is from a buffer resource and the pname:robustBufferAccess
+feature is enabled.
+In that case, an invalid texel is replaced as described by the
+<<features-robustBufferAccess, pname:robustBufferAccess>> feature.
+ifdef::VK_VERSION_1_3,VK_EXT_image_robustness,VK_EXT_robustness2[]
+If the access is to an image resource and the x, y, z, or layer coordinate
+validation fails and
+ifdef::VK_VERSION_1_3,VK_EXT_image_robustness[]
+the <<features-robustImageAccess, pname:robustImageAccess>> feature is
+enabled, then zero must: be returned for the R, G, and B components, if
+present.
+Either zero or one must: be returned for the A component, if present.
+ifdef::VK_EXT_robustness2[If]
+endif::VK_VERSION_1_3,VK_EXT_image_robustness[]
+ifdef::VK_EXT_robustness2[]
+If the <<features-robustImageAccess2, pname:robustImageAccess2>> feature is
+enabled, zero values must: be returned.
+endif::VK_EXT_robustness2[]
+If only the sample index was invalid, the values returned are undefined:.
+endif::VK_VERSION_1_3,VK_EXT_image_robustness,VK_EXT_robustness2[]
+
+ifdef::VK_VERSION_1_3,VK_EXT_image_robustness[]
+Additionally, if the <<features-robustImageAccess, pname:robustImageAccess>>
+feature is enabled,
+ifdef::VK_EXT_robustness2[]
+but the <<features-robustImageAccess2, pname:robustImageAccess2>> feature is
+not,
+endif::VK_EXT_robustness2[]
+any invalid texels may: be expanded to four components prior to texel
+replacement.
+This means that components not present in the image format may be replaced
+with 0 or may undergo <<textures-conversion-to-rgba,conversion to RGBA>> as
+normal.
+endif::VK_VERSION_1_3,VK_EXT_image_robustness[]
+
+ifdef::VK_EXT_robustness2[]
+Loads from a null descriptor return a four component color value of all
+zeros.
+However, for storage images and storage texel buffers using an explicit
+SPIR-V Image Format, loads from a null descriptor may: return an alpha value
+of 1 (float or integer, depending on format) if the format does not include
+alpha.
+endif::VK_EXT_robustness2[]
+
+If the
+slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
+property is ename:VK_TRUE, a sparse unbound texel is replaced with 0 or 0.0
+values for integer and floating-point components of the image format,
+respectively.
+
+If pname:residencyNonResidentStrict is ename:VK_FALSE, the value of the
+sparse unbound texel is undefined:.
+
+
+[[textures-depth-compare-operation]]
+=== Depth Compare Operation
+
+If the image view has a depth/stencil format, the depth component is
+selected by the pname:aspectMask, and the operation is an code:OpImage*Dref*
+instruction, a depth comparison is performed.
+The result is [eq]#1.0# if the comparison evaluates to [eq]#true#, and
+[eq]#0.0# otherwise.
+This value replaces the depth component [eq]#D#.
+
+The compare operation is selected by the elink:VkCompareOp value set by
+slink:VkSamplerCreateInfo::pname:compareOp.
+The reference value from the SPIR-V operand [eq]#D~ref~# and the texel depth
+value [eq]#D~tex~# are used as the _reference_ and _test_ values,
+respectively, in that operation.
+
+If the image being sampled has an unsigned normalized fixed-point format,
+then [eq]#D~ref~# is clamped to [eq]#[0,1]# before the compare operation.
+
+
+[[textures-conversion-to-rgba]]
+=== Conversion to RGBA
+
+The texel is expanded from one, two, or three components to four components
+based on the image base color:
+
+[[textures-texel-color-rgba-conversion-table]]
+.Texel Color After Conversion To RGBA
+[width="100%", options="header", cols="<4,<6"]
+|====
+| Texel Aspect or Format      | RGBA Color
+| Depth aspect                | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [D,0,0,one]#
+| Stencil aspect              | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [S,0,0,one]#
+| One component color format  | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,0,0,one]#
+| Two component color format  | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,0,one]#
+| Three component color format| [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,Color~b~,one]#
+| Four component color format | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [Color~r~,Color~g~,Color~b~,Color~a~]#
+ifdef::VK_KHR_maintenance5[]
+| One alpha component color format | [eq]#[Color~r~,Color~g~,Color~b~, Color~a~] = [0,0,0,Color~a~]#
+endif::VK_KHR_maintenance5[]
+|====
+
+where [eq]#one = 1.0f# for floating-point formats and depth aspects, and
+[eq]#one = 1# for integer formats and stencil aspects.
+
+
+[[textures-component-swizzle]]
+=== Component Swizzle
+
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+All texel input instructions apply a _swizzle_ based on the
+elink:VkComponentSwizzle enums in the pname:components member of the
+slink:VkImageViewCreateInfo structure for the image being read.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+All texel input instructions apply a _swizzle_ based on:
+
+  * the elink:VkComponentSwizzle enums in the pname:components member of the
+    slink:VkImageViewCreateInfo structure for the image being read if
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is not enabled,
+    and
+  * the elink:VkComponentSwizzle enums in the pname:components member of the
+    slink:VkSamplerYcbcrConversionCreateInfo structure for the
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> if sampler
+    {YCbCr} conversion is enabled.
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+The swizzle can: rearrange the components of the texel, or substitute zero
+or one for any components.
+It is defined as follows for each color [eq]#component#:
+
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+Color'_{component} & =
+\begin{cases}
+Color_r          & \text{for RED swizzle}   \\
+Color_g          & \text{for GREEN swizzle} \\
+Color_b          & \text{for BLUE swizzle}  \\
+Color_a          & \text{for ALPHA swizzle} \\
+0                & \text{for ZERO swizzle}  \\
+one              & \text{for ONE swizzle} \\
+identity         & \text{for IDENTITY swizzle}
+\end{cases}
+\end{aligned}
++++++++++++++++++++
+
+where:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+one & =
+\begin{cases}
+& 1.0\text{f}  & \text{for floating point components} \\
+& 1            & \text{for integer components} \\
+\end{cases}
+\\
+identity & =
+\begin{cases}
+& Color_r          & \text{for}\ component = r \\
+& Color_g          & \text{for}\ component = g \\
+& Color_b          & \text{for}\ component = b \\
+& Color_a          & \text{for}\ component = a \\
+\end{cases}
+\end{aligned}
++++++++++++++++++++
+
+If the border color is one of the etext:VK_BORDER_COLOR_*_OPAQUE_BLACK enums
+and the elink:VkComponentSwizzle is not the
+<<resources-image-views-identity-mappings,identity swizzle>> for all
+components, the value of the texel after swizzle is undefined:.
+
+ifndef::VK_KHR_maintenance5[]
+If the image view has a depth/stencil format and the
+elink:VkComponentSwizzle is ename:VK_COMPONENT_SWIZZLE_ONE, the value of the
+texel after swizzle is undefined:.
+endif::VK_KHR_maintenance5[]
+ifdef::VK_KHR_maintenance5[]
+If the image view has a depth/stencil format and the
+elink:VkComponentSwizzle is ename:VK_COMPONENT_SWIZZLE_ONE, and
+sname:VkPhysicalDeviceMaintenance5PropertiesKHR::pname:depthStencilSwizzleOneSupport
+is not set to ename:VK_TRUE, the value of the texel after swizzle is
+undefined:.
+endif::VK_KHR_maintenance5[]
+
+
+[[textures-sparse-residency]]
+=== Sparse Residency
+
+code:OpImageSparse* instructions return a structure which includes a
+_residency code_ indicating whether any texels accessed by the instruction
+are sparse unbound texels.
+This code can: be interpreted by the code:OpImageSparseTexelsResident
+instruction which converts the residency code to a boolean value.
+
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+[[textures-chroma-reconstruction]]
+=== Chroma Reconstruction
+
+In some color models, the color representation is defined in terms of
+monochromatic light intensity (often called "`luma`") and color differences
+relative to this intensity, often called "`chroma`".
+It is common for color models other than RGB to represent the chroma
+components at lower spatial resolution than the luma component.
+This approach is used to take advantage of the eye's lower spatial
+sensitivity to color compared with its sensitivity to brightness.
+Less commonly, the same approach is used with additive color, since the
+green component dominates the eye's sensitivity to light intensity and the
+spatial sensitivity to color introduced by red and blue is lower.
+
+Lower-resolution components are "`downsampled`" by resizing them to a lower
+spatial resolution than the component representing luminance.
+This process is also commonly known as "`chroma subsampling`".
+There is one luminance sample in each texture texel, but each chrominance
+sample may be shared among several texels in one or both texture dimensions.
+
+  * "`etext:_444`" formats do not spatially downsample chroma values
+    compared with luma: there are unique chroma samples for each texel.
+  * "`etext:_422`" formats have downsampling in the x dimension
+    (corresponding to _u_ or _s_ coordinates): they are sampled at half the
+    resolution of luma in that dimension.
+  * "`etext:_420`" formats have downsampling in the x dimension
+    (corresponding to _u_ or _s_ coordinates) and the y dimension
+    (corresponding to _v_ or _t_ coordinates): they are sampled at half the
+    resolution of luma in both dimensions.
+
+The process of reconstructing a full color value for texture access involves
+accessing both chroma and luma values at the same location.
+To generate the color accurately, the values of the lower-resolution
+components at the location of the luma samples must be reconstructed from
+the lower-resolution sample locations, an operation known here as "`chroma
+reconstruction`" irrespective of the actual color model.
+
+The location of the chroma samples relative to the luma coordinates is
+determined by the pname:xChromaOffset and pname:yChromaOffset members of the
+slink:VkSamplerYcbcrConversionCreateInfo structure used to create the
+sampler {YCbCr} conversion.
+
+The following diagrams show the relationship between unnormalized (_u_,_v_)
+coordinates and (_i_,_j_) integer texel positions in the luma component
+(shown in black, with circles showing integer sample positions) and the
+texel coordinates of reduced-resolution chroma components, shown as crosses
+in red.
+
+[NOTE]
+.Note
+====
+If the chroma values are reconstructed at the locations of the luma samples
+by means of interpolation, chroma samples from outside the image bounds are
+needed; these are determined according to <<textures-wrapping-operation>>.
+These diagrams represent this by showing the bounds of the "`chroma texel`"
+extending beyond the image bounds, and including additional chroma sample
+positions where required for interpolation.
+The limits of a sample for etext:NEAREST sampling is shown as a grid.
+====
+
+image::{images}/chromasamples_422_cosited.svg[align="center",title="422 downsampling, xChromaOffset=COSITED_EVEN",opts="{imageopts}"]
+
+image::{images}/chromasamples_422_midpoint.svg[align="center",title="422 downsampling, xChromaOffset=MIDPOINT",opts="{imageopts}"]
+
+image::{images}/chromasamples_420_xcosited_ycosited.svg[align="center",title="420 downsampling, xChromaOffset=COSITED_EVEN, yChromaOffset=COSITED_EVEN",opts="{imageopts}"]
+
+image::{images}/chromasamples_420_xmidpoint_ycosited.svg[align="center",title="420 downsampling, xChromaOffset=MIDPOINT, yChromaOffset=COSITED_EVEN",opts="{imageopts}"]
+
+image::{images}/chromasamples_420_xcosited_ymidpoint.svg[align="center",title="420 downsampling, xChromaOffset=COSITED_EVEN, yChromaOffset=MIDPOINT",opts="{imageopts}"]
+
+image::{images}/chromasamples_420_xmidpoint_ymidpoint.svg[align="center",title="420 downsampling, xChromaOffset=MIDPOINT, yChromaOffset=MIDPOINT",opts="{imageopts}"]
+
+Reconstruction is implemented in one of two ways:
+
+If the format of the image that is to be sampled sets
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
+or the slink:VkSamplerYcbcrConversionCreateInfo's
+pname:forceExplicitReconstruction is set to ename:VK_TRUE, reconstruction is
+performed as an explicit step independent of filtering, described in the
+<<textures-explicit-reconstruction>> section.
+
+If the format of the image that is to be sampled does not set
+ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+and if the slink:VkSamplerYcbcrConversionCreateInfo's
+pname:forceExplicitReconstruction is set to ename:VK_FALSE, reconstruction
+is performed as an implicit part of filtering prior to color model
+conversion, with no separate post-conversion texel filtering step, as
+described in the <<textures-implict-reconstruction,Implicit Reconstruction>>
+section.
+
+
+[[textures-explicit-reconstruction]]
+==== Explicit Reconstruction
+
+  * If the pname:chromaFilter member of the
+    slink:VkSamplerYcbcrConversionCreateInfo structure is
+    ename:VK_FILTER_NEAREST:
+  ** If the format's R and B components are reduced in resolution in just
+     width by a factor of two relative to the G component (i.e. this is a
+     "`etext:_422`" format), the latexmath:[\tau_{ijk}[level\]] values
+     accessed by <<textures-texel-filtering,texel filtering>> are
+     reconstructed as follows:
++
+[latexmath]
+++++++++++++++
+\begin{aligned}
+\tau_R'(i, j) & = \tau_R(\left\lfloor{i\times 0.5}\right\rfloor, j)[level] \\
+\tau_B'(i, j) & = \tau_B(\left\lfloor{i\times 0.5}\right\rfloor, j)[level]
+\end{aligned}
+++++++++++++++
+
+  ** If the format's R and B components are reduced in resolution in width
+     and height by a factor of two relative to the G component (i.e. this is
+     a "`etext:_420`" format), the latexmath:[\tau_{ijk}[level\]] values
+     accessed by <<textures-texel-filtering,texel filtering>> are
+     reconstructed as follows:
++
+[latexmath]
+++++++++++++++
+\begin{aligned}
+\tau_R'(i, j) & = \tau_R(\left\lfloor{i\times 0.5}\right\rfloor, \left\lfloor{j\times 0.5}\right\rfloor)[level] \\
+\tau_B'(i, j) & = \tau_B(\left\lfloor{i\times 0.5}\right\rfloor, \left\lfloor{j\times 0.5}\right\rfloor)[level]
+\end{aligned}
+++++++++++++++
++
+[NOTE]
+.Note
+====
+pname:xChromaOffset and pname:yChromaOffset have no effect if
+pname:chromaFilter is ename:VK_FILTER_NEAREST for explicit reconstruction.
+====
+
+  * If the pname:chromaFilter member of the
+    slink:VkSamplerYcbcrConversionCreateInfo structure is
+    ename:VK_FILTER_LINEAR:
+  ** If the format's R and B components are reduced in resolution in just
+     width by a factor of two relative to the G component (i.e. this is a
+     "`etext:_422`" format):
+  *** If pname:xChromaOffset is ename:VK_CHROMA_LOCATION_COSITED_EVEN:
++
+[latexmath]
++++++
+\tau_{RB}'(i,j) = \begin{cases}
+\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level], & 0.5 \times i = \left\lfloor{0.5 \times i}\right\rfloor\\
+0.5\times\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level] + \\
+0.5\times\tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor + 1,j)[level], & 0.5 \times i \neq \left\lfloor{0.5 \times i}\right\rfloor
+\end{cases}
++++++
++
+  *** If pname:xChromaOffset is ename:VK_CHROMA_LOCATION_MIDPOINT:
++
+[latexmath]
++++++
+\tau_{RB}'(i,j) = \begin{cases}
+0.25 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor - 1,j)[level] + \\
+0.75 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level], & 0.5 \times i = \left\lfloor{0.5 \times i}\right\rfloor\\
+0.75 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor,j)[level] + \\
+0.25 \times \tau_{RB}(\left\lfloor{i\times 0.5}\right\rfloor + 1,j)[level], & 0.5 \times i \neq \left\lfloor{0.5 \times i}\right\rfloor
+\end{cases}
++++++
+
+  ** If the format's R and B components are reduced in resolution in width
+     and height by a factor of two relative to the G component (i.e. this is
+     a "`etext:_420`" format), a similar relationship applies.
+     Due to the number of options, these formulae are expressed more
+     concisely as follows:
++
+[latexmath]
++++++
+\begin{aligned}
+  i_{RB} & =
+    \begin{cases}
+      0.5 \times (i) & \textrm{xChromaOffset = COSITED}\_\textrm{EVEN} \\
+      0.5 \times (i - 0.5) & \textrm{xChromaOffset = MIDPOINT}
+    \end{cases}\\
+  j_{RB} & =
+    \begin{cases}
+      0.5 \times (j) & \textrm{yChromaOffset = COSITED}\_\textrm{EVEN} \\
+      0.5 \times (j - 0.5) & \textrm{yChromaOffset = MIDPOINT}
+    \end{cases}\\
+  \\
+  i_{floor} & = \left\lfloor i_{RB} \right\rfloor \\
+  j_{floor} & = \left\lfloor j_{RB} \right\rfloor \\
+  \\
+  i_{frac} & = i_{RB} - i_{floor} \\
+  j_{frac} & = j_{RB} - j_{floor}
+\end{aligned}
++++++
++
+[latexmath]
++++++
+\begin{aligned}
+\tau_{RB}'(i,j) =
+    & \tau_{RB}(     i_{floor},     j_{floor})[level]
+        & \times & ( 1 - i_{frac} ) &
+        & \times & ( 1 - j_{frac} ) & + \\
+    & \tau_{RB}( 1 + i_{floor},     j_{floor})[level]
+        & \times & (     i_{frac} ) &
+        & \times & ( 1 - j_{frac} ) & + \\
+    & \tau_{RB}(     i_{floor}, 1 + j_{floor})[level]
+        & \times & ( 1 - i_{frac} ) &
+        & \times & (     j_{frac} ) & + \\
+    & \tau_{RB}( 1 + i_{floor}, 1 + j_{floor})[level]
+        & \times & (     i_{frac} ) &
+        & \times & (     j_{frac} ) &
+\end{aligned}
++++++
+
+[NOTE]
+.Note
+====
+In the case where the texture itself is bilinearly interpolated as described
+in <<textures-texel-filtering,Texel Filtering>>, thus requiring four
+full-color samples for the filtering operation, and where the reconstruction
+of these samples uses bilinear interpolation in the chroma components due to
+pname:chromaFilter=ename:VK_FILTER_LINEAR, up to nine chroma samples may be
+required, depending on the sample location.
+====
+
+
+[[textures-implict-reconstruction]]
+==== Implicit Reconstruction
+
+Implicit reconstruction takes place by the samples being interpolated, as
+required by the filter settings of the sampler, except that
+pname:chromaFilter takes precedence for the chroma samples.
+
+If pname:chromaFilter is ename:VK_FILTER_NEAREST, an implementation may:
+behave as if pname:xChromaOffset and pname:yChromaOffset were both
+ename:VK_CHROMA_LOCATION_MIDPOINT, irrespective of the values set.
+
+[NOTE]
+.Note
+====
+This will not have any visible effect if the locations of the luma samples
+coincide with the location of the samples used for rasterization.
+====
+
+The sample coordinates are adjusted by the downsample factor of the
+component (such that, for example, the sample coordinates are divided by two
+if the component has a downsample factor of two relative to the luma
+component):
+
+[latexmath]
+++++++
+\begin{aligned}
+u_{RB}' (422/420) &=
+  \begin{cases}
+     0.5\times (u + 0.5), & \textrm{xChromaOffset = COSITED}\_\textrm{EVEN} \\
+     0.5\times u, & \textrm{xChromaOffset = MIDPOINT}
+  \end{cases} \\
+v_{RB}' (420) &=
+  \begin{cases}
+     0.5\times (v + 0.5), & \textrm{yChromaOffset = COSITED}\_\textrm{EVEN} \\
+     0.5\times v, & \textrm{yChromaOffset = MIDPOINT}
+  \end{cases}
+\end{aligned}
+++++++
+
+
+[[textures-sampler-YCbCr-conversion]]
+=== Sampler {YCbCr} Conversion
+
+Sampler {YCbCr} conversion performs the following operations, which an
+implementation may: combine into a single mathematical operation:
+
+  * <<textures-sampler-YCbCr-conversion-rangeexpand,Sampler {YCbCr} Range
+    Expansion>>
+  * <<textures-sampler-YCbCr-conversion-modelconversion,Sampler {YCbCr}
+    Model Conversion>>
+
+
+[[textures-sampler-YCbCr-conversion-rangeexpand]]
+==== Sampler {YCbCr} Range Expansion
+
+Sampler {YCbCr} range expansion is applied to color component values after
+all texel input operations which are not specific to sampler {YCbCr}
+conversion.
+For example, the input values to this stage have been converted using the
+normal <<textures-format-conversion,format conversion>> rules.
+
+ifdef::VK_QCOM_ycbcr_degamma[]
+The input values to this stage may have been converted using sRGB to linear
+conversion if <<features-ycbcr-degamma,pname:ycbcrDegamma>> is enabled.
+endif::VK_QCOM_ycbcr_degamma[]
+
+Sampler {YCbCr} range expansion is not applied if pname:ycbcrModel is
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY.
+That is, the shader receives the vector C'~rgba~ as output by the Component
+Swizzle stage without further modification.
+
+For other values of pname:ycbcrModel, range expansion is applied to the
+texel component values output by the <<textures-component-swizzle,Component
+Swizzle>> defined by the pname:components member of
+slink:VkSamplerYcbcrConversionCreateInfo.
+Range expansion applies independently to each component of the image.
+For the purposes of range expansion and {YCbCr} model conversion, the R and
+B components contain color difference (chroma) values and the G component
+contains luma.
+The A component is not modified by sampler {YCbCr} range expansion.
+
+The range expansion to be applied is defined by the pname:ycbcrRange member
+of the slink:VkSamplerYcbcrConversionCreateInfo structure:
+
+  * If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_FULL, the
+    following transformations are applied:
++
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+Y' &= C'_{rgba}[G] \\
+C_B &= C'_{rgba}[B] - {{2^{(n-1)}}\over{(2^n) - 1}} \\
+C_R &= C'_{rgba}[R] - {{2^{(n-1)}}\over{(2^n) - 1}}
+\end{aligned}
++++++++++++++++++++
++
+[NOTE]
+.Note
+====
+These formulae correspond to the "`full range`" encoding in the
+"`Quantization schemes`" chapter of the <<data-format,Khronos Data Format
+Specification>>.
+
+Should any future amendments be made to the ITU specifications from which
+these equations are derived, the formulae used by Vulkan may: also be
+updated to maintain parity.
+====
+  * If pname:ycbcrRange is ename:VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, the
+    following transformations are applied:
++
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+Y' &= {{C'_{rgba}[G] \times (2^n-1) - 16\times 2^{n-8}}\over{219\times 2^{n-8}}} \\
+C_B &= {{C'_{rgba}[B] \times \left(2^n-1\right) - 128\times 2^{n-8}}\over{224\times 2^{n-8}}} \\
+C_R &= {{C'_{rgba}[R] \times \left(2^n-1\right) - 128\times 2^{n-8}}\over{224\times 2^{n-8}}}
+\end{aligned}
++++++++++++++++++++
++
+[NOTE]
+.Note
+====
+These formulae correspond to the "`narrow range`" encoding in the
+"`Quantization schemes`" chapter of the <<data-format,Khronos Data Format
+Specification>>.
+====
+  * _n_ is the bit-depth of the components in the format.
+
+The precision of the operations performed during range expansion must: be at
+least that of the source format.
+
+An implementation may: clamp the results of these range expansion operations
+such that Y{prime} falls in the range [0,1], and/or such that C~B~ and C~R~
+fall in the range [-0.5,0.5].
+
+
+[[textures-sampler-YCbCr-conversion-modelconversion]]
+==== Sampler {YCbCr} Model Conversion
+
+The range-expanded values are converted between color models, according to
+the color model conversion specified in the pname:ycbcrModel member:
+
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY::
+    The color components are not modified by the color model conversion
+    since they are assumed already to represent the desired color model in
+    which the shader is operating; {YCbCr} range expansion is also ignored.
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY::
+    The color components are not modified by the color model conversion and
+    are assumed to be treated as though in {YCbCr} form both in memory and
+    in the shader; {YCbCr} range expansion is applied to the components as
+    for other {YCbCr} models, with the vector (C~R~,Y{prime},C~B~,A)
+    provided to the shader.
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709::
+    The color components are transformed from a {YCbCr} representation to an
+    {RGBprime} representation as described in the "`BT.709 {YCbCr}
+    conversion`" section of the <<data-format,Khronos Data Format
+    Specification>>.
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601::
+    The color components are transformed from a {YCbCr} representation to an
+    {RGBprime} representation as described in the "`BT.601 {YCbCr}
+    conversion`" section of the <<data-format,Khronos Data Format
+    Specification>>.
+ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020::
+    The color components are transformed from a {YCbCr} representation to an
+    {RGBprime} representation as described in the "`BT.2020 {YCbCr}
+    conversion`" section of the <<data-format,Khronos Data Format
+    Specification>>.
+
+In this operation, each output component is dependent on each input
+component.
+
+An implementation may: clamp the {RGBprime} results of these conversions to
+the range [0,1].
+
+The precision of the operations performed during model conversion must: be
+at least that of the source format.
+
+The alpha component is not modified by these model conversions.
+
+[NOTE]
+.Note
+====
+Sampling operations in a non-linear color space can introduce color and
+intensity shifts at sharp transition boundaries.
+To avoid this issue, the technically precise color correction sequence
+described in the "`Introduction to Color Conversions`" chapter of the
+<<data-format,Khronos Data Format Specification>> may be performed as
+follows:
+
+  * Calculate the <<textures-normalized-to-unnormalized,unnormalized texel
+    coordinates>> corresponding to the desired sample position.
+  * For a pname:minFilter or pname:magFilter of ename:VK_FILTER_NEAREST:
+    . Calculate (_i_,_j_) for the sample location as described under the
+      "`nearest filtering`" formulae in <<textures-unnormalized-to-integer>>
+    . Calculate the normalized texel coordinates corresponding to these
+      integer coordinates.
+    . Sample using <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>
+      at this location.
+  * For a pname:minFilter or pname:magFilter of ename:VK_FILTER_LINEAR:
+    . Calculate (_i~[0,1]~_,_j~[0,1]~_) for the sample location as described
+      under the "`linear filtering`" formulae in
+      <<textures-unnormalized-to-integer>>
+    . Calculate the normalized texel coordinates corresponding to these
+      integer coordinates.
+    . Sample using <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>
+      at each of these locations.
+    . Convert the non-linear A{prime}{RGBprime} outputs of the {YCbCr}
+      conversions to linear ARGB values as described in the "`Transfer
+      Functions`" chapter of the <<data-format,Khronos Data Format
+      Specification>>.
+    . Interpolate the linear ARGB values using the [eq]#{alpha}# and
+      [eq]#{beta}# values described in the "`linear filtering`" section of
+      <<textures-unnormalized-to-integer>> and the equations in
+      <<textures-texel-filtering>>.
+
+The additional calculations and, especially, additional number of sampling
+operations in the ename:VK_FILTER_LINEAR case can be expected to have a
+performance impact compared with using the outputs directly.
+Since the variations from "`correct`" results are subtle for most content,
+the application author should determine whether a more costly implementation
+is strictly necessary.
+
+If pname:chromaFilter, and pname:minFilter or pname:magFilter are both
+ename:VK_FILTER_NEAREST, these operations are redundant and sampling using
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> at the desired
+sample coordinates will produce the "`correct`" results without further
+processing.
+====
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+== Texel Output Operations
+
+_Texel output instructions_ are SPIR-V image instructions that write to an
+image.
+_Texel output operations_ are a set of steps that are performed on state,
+coordinates, and texel values while processing a texel output instruction,
+and which are common to some or all texel output instructions.
+They include the following steps, which are performed in the listed order:
+
+  * <<textures-output-validation,Validation operations>>
+  ** <<textures-format-validation,Format validation>>
+  ** <<textures-type-validation,Type validation>>
+  ** <<textures-output-coordinate-validation,Coordinate validation>>
+  ** <<textures-output-sparse-validation,Sparse validation>>
+  * <<textures-output-format-conversion,Texel output format conversion>>
+
+
+[[textures-output-validation]]
+=== Texel Output Validation Operations
+
+_Texel output validation operations_ inspect instruction/image state or
+coordinates, and in certain circumstances cause the write to have no effect.
+There are a series of validations that the texel undergoes.
+
+
+[[textures-format-validation]]
+==== Texel Format Validation
+
+If the image format of the code:OpTypeImage is not
+<<spirvenv-image-formats,compatible>> with the sname:VkImageView's
+pname:format, the write causes the contents of the image's memory to become
+undefined:.
+
+
+[[textures-type-validation]]
+==== Texel Type Validation
+
+If the code:Sampled code:Type of the code:OpTypeImage does not match the
+<<spirv-type,SPIR-V Type>>, the write causes the value of the texel to
+become undefined:.
+For integer types, if the <<spirvenv-image-signedness,signedness of the
+access>> does not match the signedness of the accessed resource, the write
+causes the value of the texel to become undefined:.
+
+
+[[textures-output-coordinate-validation]]
+=== Integer Texel Coordinate Validation
+
+The integer texel coordinates are validated according to the same rules as
+for texel input <<textures-integer-coordinate-validation,coordinate
+validation>>.
+
+If the texel fails integer texel coordinate validation, then the write has
+no effect.
+
+
+[[textures-output-sparse-validation]]
+=== Sparse Texel Operation
+
+If the texel attempts to write to an unbound region of a sparse image, the
+texel is a sparse unbound texel.
+In such a case, if the
+slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
+property is ename:VK_TRUE, the sparse unbound texel write has no effect.
+If pname:residencyNonResidentStrict is ename:VK_FALSE, the write may: have a
+side effect that becomes visible to other accesses to unbound texels in any
+resource, but will not be visible to any device memory allocated by the
+application.
+
+
+[[textures-output-format-conversion]]
+=== Texel Output Format Conversion
+
+If the image format is sRGB, a linear to sRGB conversion is applied to the
+R, G, and B components as described in the "`sRGB EOTF`" section of the
+<<data-format,Khronos Data Format Specification>>.
+The A component, if present, is unchanged.
+
+Texels then undergo a format conversion from the floating point, signed, or
+unsigned integer type of the texel data to the elink:VkFormat of the image
+view.
+If the number of components in the texel data is larger than the number of
+components in the format, additional components are discarded.
+
+Each component is converted based on its type and size (as defined in the
+<<formats-definition,Format Definition>> section for each elink:VkFormat).
+Floating-point outputs are converted as described in
+<<fundamentals-fp-conversion,Floating-Point Format Conversions>> and
+<<fundamentals-fixedconv,Fixed-Point Data Conversion>>.
+Integer outputs are converted such that their value is preserved.
+The converted value of any integer that cannot be represented in the target
+format is undefined:.
+
+
+[[textures-normalized-operations]]
+== Normalized Texel Coordinate Operations
+
+If the image sampler instruction provides normalized texel coordinates, some
+of the following operations are performed.
+
+
+[[textures-projection]]
+=== Projection Operation
+
+For code:Proj image operations, the normalized texel coordinates
+[eq]#(s,t,r,q,a)# and (if present) the [eq]#D~ref~# coordinate are
+transformed as follows:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+s       & = \frac{s}{q},       & \text{for 1D, 2D, or 3D image} \\
+\\
+t       & = \frac{t}{q},       & \text{for 2D or 3D image} \\
+\\
+r       & = \frac{r}{q},       & \text{for 3D image} \\
+\\
+D_{\textit{ref}} & = \frac{D_{\textit{ref}}}{q}, & \text{if provided}
+\end{aligned}
++++++++++++++++++++
+
+
+[[textures-derivative-image-operations]]
+=== Derivative Image Operations
+
+Derivatives are used for LOD selection.
+These derivatives are either implicit (in an code:ImplicitLod image
+instruction in a fragment shader) or explicit (provided explicitly by shader
+to the image instruction in any shader).
+
+For implicit derivatives image instructions, the derivatives of texel
+coordinates are calculated in the same manner as
+<<shaders-derivative-operations, derivative operations>>.
+That is:
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+\partial{s}/\partial{x} & = dPdx(s), & \partial{s}/\partial{y} & = dPdy(s), & \text{for 1D, 2D, Cube, or 3D image} \\
+\partial{t}/\partial{x} & = dPdx(t), & \partial{t}/\partial{y} & = dPdy(t), & \text{for 2D, Cube, or 3D image} \\
+\partial{r}/\partial{x} & = dPdx(r), & \partial{r}/\partial{y} & = dPdy(r), & \text{for Cube or 3D image}
+\end{aligned}
++++++++++++++++++++
+
+Partial derivatives not defined above for certain image dimensionalities are
+set to zero.
+
+For explicit LOD image instructions, if the optional: SPIR-V operand
+code:Grad is provided, then the operand values are used for the derivatives.
+The number of components present in each derivative for a given image
+dimensionality matches the number of partial derivatives computed above.
+
+If the optional: SPIR-V operand code:Lod is provided, then derivatives are
+set to zero, the cube map derivative transformation is skipped, and the
+scale factor operation is skipped.
+Instead, the floating point scalar coordinate is directly assigned to
+[eq]#{lambda}~base~# as described in <<textures-level-of-detail-operation,
+LOD Operation>>.
+
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+If the image or sampler object used by an implicit derivative image
+instruction is not uniform across the quad and
+<<limits-quadDivergentImplicitLod, pname:quadDivergentImplicitLod>> is not
+supported, then the derivative and LOD values are undefined:.
+Implicit derivatives are well-defined when the image and sampler and control
+flow are uniform across the quad, even if they diverge between different
+quads.
+
+If <<limits-quadDivergentImplicitLod, pname:quadDivergentImplicitLod>> is
+supported, then derivatives and implicit LOD values are well-defined even if
+the image or sampler object are not uniform within a quad.
+The derivatives are computed as specified above, and the implicit LOD
+calculation proceeds for each shader invocation using its respective image
+and sampler object.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+
+=== Cube Map Face Selection and Transformations
+
+For cube map image instructions, the [eq]#(s,t,r)# coordinates are treated
+as a direction vector [eq]#(r~x~,r~y~,r~z~)#.
+The direction vector is used to select a cube map face.
+The direction vector is transformed to a per-face texel coordinate system
+[eq]#(s~face~,t~face~)#, The direction vector is also used to transform the
+derivatives to per-face derivatives.
+
+
+=== Cube Map Face Selection
+
+The direction vector selects one of the cube map's faces based on the
+largest magnitude coordinate direction (the major axis direction).
+Since two or more coordinates can: have identical magnitude, the
+implementation must: have rules to disambiguate this situation.
+
+The rules should: have as the first rule that [eq]#r~z~# wins over
+[eq]#r~y~# and [eq]#r~x~#, and the second rule that [eq]#r~y~# wins over
+[eq]#r~x~#.
+An implementation may: choose other rules, but the rules must: be
+deterministic and depend only on [eq]#(r~x~,r~y~,r~z~)#.
+
+The layer number (corresponding to a cube map face), the coordinate
+selections for [eq]#s~c~#, [eq]#t~c~#, [eq]#r~c~#, and the selection of
+derivatives, are determined by the major axis direction as specified in the
+following two tables.
+
+.Cube map face and coordinate selection
+[width="75%",frame="all",options="header"]
+|====
+| Major Axis Direction | Layer Number | Cube Map Face | [eq]#s~c~#  | [eq]#t~c~#  | [eq]#r~c~#
+| [eq]#+r~x~#          | [eq]#0#      | Positive X    | [eq]#-r~z~# | [eq]#-r~y~# | [eq]#r~x~#
+| [eq]#-r~x~#          | [eq]#1#      | Negative X    | [eq]#+r~z~# | [eq]#-r~y~# | [eq]#r~x~#
+| [eq]#+r~y~#          | [eq]#2#      | Positive Y    | [eq]#+r~x~# | [eq]#+r~z~# | [eq]#r~y~#
+| [eq]#-r~y~#          | [eq]#3#      | Negative Y    | [eq]#+r~x~# | [eq]#-r~z~# | [eq]#r~y~#
+| [eq]#+r~z~#          | [eq]#4#      | Positive Z    | [eq]#+r~x~# | [eq]#-r~y~# | [eq]#r~z~#
+| [eq]#-r~z~#          | [eq]#5#      | Negative Z    | [eq]#-r~x~# | [eq]#-r~y~# | [eq]#r~z~#
+|====
+
+
+.Cube map derivative selection
+[width="75%",frame="all",options="header"]
+|====
+| Major Axis Direction | [eq]#{partial}s~c~ / {partial}x# | [eq]#{partial}s~c~ / {partial}y# | [eq]#{partial}t~c~ / {partial}x# | [eq]#{partial}t~c~ / {partial}y# | [eq]#{partial}r~c~ / {partial}x# | [eq]#{partial}r~c~ / {partial}y#
+
+| [eq]#+r~x~#
+| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
+| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
+| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
+
+| [eq]#-r~x~#
+| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
+| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
+| [eq]#-{partial}r~x~ / {partial}x# | [eq]#-{partial}r~x~ / {partial}y#
+
+| [eq]#+r~y~#
+| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
+| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
+| [eq]#+{partial}r~y~ / {partial}x# | [eq]#+{partial}r~y~ / {partial}y#
+
+| [eq]#-r~y~#
+| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
+| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
+| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
+
+| [eq]#+r~z~#
+| [eq]#+{partial}r~x~ / {partial}x# | [eq]#+{partial}r~x~ / {partial}y#
+| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
+| [eq]#+{partial}r~z~ / {partial}x# | [eq]#+{partial}r~z~ / {partial}y#
+
+| [eq]#-r~z~#
+| [eq]#-{partial}r~x~ / {partial}x# | [eq]#-{partial}r~x~ / {partial}y#
+| [eq]#-{partial}r~y~ / {partial}x# | [eq]#-{partial}r~y~ / {partial}y#
+| [eq]#-{partial}r~z~ / {partial}x# | [eq]#-{partial}r~z~ / {partial}y#
+|====
+
+
+=== Cube Map Coordinate Transformation
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+s_{\textit{face}} & =
+    \frac{1}{2} \times \frac{s_c}{|r_c|} + \frac{1}{2} \\
+t_{\textit{face}} & =
+    \frac{1}{2} \times \frac{t_c}{|r_c|} + \frac{1}{2} \\
+\end{aligned}
+++++++++++++++++++++++++
+
+
+=== Cube Map Derivative Transformation
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
+    \frac{\partial}{\partial{x}} \left ( \frac{1}{2} \times \frac{s_{c}}{|r_{c}|}
+    + \frac{1}{2}\right ) \\
+\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
+    \frac{1}{2} \times \frac{\partial}{\partial{x}}
+    \left ( \frac{s_{c}}{|r_{c}|}  \right ) \\
+\frac{\partial{s_{\textit{face}}}}{\partial{x}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{s_c}/\partial{x}
+      -s_c \times {\partial{r_{c}}}/{\partial{x}}}
+    {\left ( r_{c} \right )^2}
+    \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\frac{\partial{s_{\textit{face}}}}{\partial{y}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{s_c}/\partial{y}
+      -s_c \times {\partial{r_{c}}}/{\partial{y}}}
+    {\left ( r_{c} \right )^2}
+    \right )\\
+\frac{\partial{t_{\textit{face}}}}{\partial{x}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{t_c}/\partial{x}
+      -t_c \times {\partial{r_{c}}}/{\partial{x}}}
+    {\left ( r_{c} \right )^2}
+    \right ) \\
+\frac{\partial{t_{\textit{face}}}}{\partial{y}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+       |r_{c}| \times \partial{t_c}/\partial{y}
+      -t_c \times {\partial{r_{c}}}/{\partial{y}}}
+    {\left ( r_{c} \right )^2}
+    \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Bill) Note that we never revisited ARB_texture_cubemap after we introduced
+dependent texture fetches (ARB_fragment_program and ARB_fragment_shader).
+
+The derivatives of [eq]#s~face~# and [eq]#t~face~# are only valid for
+non-dependent texture fetches (pre OpenGL 2.0).
+====
+endif::editing-notes[]
+
+
+[[textures-lod-and-scale-factor]]
+=== Scale Factor Operation, LOD Operation and Image Level(s) Selection
+
+LOD selection can: be either explicit (provided explicitly by the image
+instruction) or implicit (determined from a scale factor calculated from the
+derivatives).
+The LOD must: be computed with pname:mipmapPrecisionBits of accuracy.
+
+
+[[textures-scale-factor]]
+==== Scale Factor Operation
+
+The magnitude of the derivatives are calculated by:
+
+  {empty}:: [eq]#m~ux~ = {vert}{partial}s/{partial}x{vert} {times} w~base~#
+  {empty}:: [eq]#m~vx~ = {vert}{partial}t/{partial}x{vert} {times} h~base~#
+  {empty}:: [eq]#m~wx~ = {vert}{partial}r/{partial}x{vert} {times} d~base~#
+
+  {empty}:: [eq]#m~uy~ = {vert}{partial}s/{partial}y{vert} {times} w~base~#
+  {empty}:: [eq]#m~vy~ = {vert}{partial}t/{partial}y{vert} {times} h~base~#
+  {empty}:: [eq]#m~wy~ = {vert}{partial}r/{partial}y{vert} {times} d~base~#
+
+
+where:
+
+  {empty}:: [eq]#{partial}t/{partial}x = {partial}t/{partial}y = 0# (for 1D
+            images)
+  {empty}:: [eq]#{partial}r/{partial}x = {partial}r/{partial}y = 0# (for 1D,
+            2D or Cube images)
+
+and:
+
+  {empty}:: [eq]#w~base~ = image.w#
+  {empty}:: [eq]#h~base~ = image.h#
+  {empty}:: [eq]#d~base~ = image.d#
+
+(for the pname:baseMipLevel, from the image descriptor).
+
+ifdef::VK_NV_corner_sampled_image[]
+
+For corner-sampled images, the [eq]#w~base~#, [eq]#h~base~#, and
+[eq]#d~base~# are instead:
+
+  {empty}:: [eq]#w~base~ = image.w - 1#
+  {empty}:: [eq]#h~base~ = image.h - 1#
+  {empty}:: [eq]#d~base~ = image.d - 1#
+
+endif::VK_NV_corner_sampled_image[]
+
+A point sampled in screen space has an elliptical footprint in texture
+space.
+The minimum and maximum scale factors [eq]#({rho}~min~, {rho}~max~)# should:
+be the minor and major axes of this ellipse.
+
+The _scale factors_ [eq]#{rho}~x~# and [eq]#{rho}~y~#, calculated from the
+magnitude of the derivatives in x and y, are used to compute the minimum and
+maximum scale factors.
+
+[eq]#{rho}~x~# and [eq]#{rho}~y~# may: be approximated with functions
+[eq]#f~x~# and [eq]#f~y~#, subject to the following constraints:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+& f_x \text{\ is\ continuous\ and\ monotonically\ increasing\ in\ each\ of\ }
+    m_{ux},
+    m_{vx}, \text{\ and\ }
+    m_{wx} \\
+& f_y \text{\ is\ continuous\ and\ monotonically\ increasing\ in\ each\ of\ }
+    m_{uy},
+    m_{vy}, \text{\ and\ }
+    m_{wy}
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\max(|m_{ux}|, |m_{vx}|, |m_{wx}|) \leq f_{x}
+\leq \sqrt{2} (|m_{ux}| + |m_{vx}| + |m_{wx}|) \\
+\max(|m_{uy}|, |m_{vy}|, |m_{wy}|) \leq f_{y}
+\leq \sqrt{2} (|m_{uy}| + |m_{vy}| + |m_{wy}|)
+\end{aligned}
+++++++++++++++++++++++++
+
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+(Bill) For reviewers only - anticipating questions.
+
+We only support implicit derivatives for normalized texel coordinates.
+
+So we are documenting the derivatives in s,t,r (normalized texel
+coordinates) rather than u,v,w (unnormalized texel coordinates) as in OpenGL
+and OpenGL ES specifications.
+(I know, u,v,w is the way it has been documented since OpenGL V1.0.)
+
+Also there is no reason to have conditional application of [eq]#w~base~,
+h~base~, d~base~# for rectangle textures either, since they do not support
+implicit derivatives.
+====
+endif::editing-notes[]
+
+
+The minimum and maximum scale factors [eq]#({rho}~min~,{rho}~max~)# are
+determined by:
+
+  {empty}:: [eq]#{rho}~max~ = max({rho}~x~, {rho}~y~)#
+  {empty}:: [eq]#{rho}~min~ = min({rho}~x~, {rho}~y~)#
+
+The ratio of anisotropy is determined by:
+
+  {empty}:: [eq]#{eta} = min({rho}~max~/{rho}~min~, max~Aniso~)#
+
+where:
+
+  {empty}:: [eq]#sampler.max~Aniso~ = pname:maxAnisotropy# (from sampler
+            descriptor)
+  {empty}:: [eq]#limits.max~Aniso~ = pname:maxSamplerAnisotropy# (from
+            physical device limits)
+  {empty}:: [eq]#max~Aniso~ = min(sampler.max~Aniso~, limits.max~Aniso~)#
+
+If [eq]#{rho}~max~ = {rho}~min~ = 0#, then all the partial derivatives are
+zero, the fragment's footprint in texel space is a point, and [eq]#{eta}#
+should: be treated as 1.
+If [eq]#{rho}~max~ {neq} 0# and [eq]#{rho}~min~ = 0# then all partial
+derivatives along one axis are zero, the fragment's footprint in texel space
+is a line segment, and [eq]#{eta}# should: be treated as [eq]#max~Aniso~#.
+However, anytime the footprint is small in texel space the implementation
+may: use a smaller value of [eq]#{eta}#, even when [eq]#{rho}~min~# is zero
+or close to zero.
+If either slink:VkPhysicalDeviceFeatures::pname:samplerAnisotropy or
+slink:VkSamplerCreateInfo::pname:anisotropyEnable are ename:VK_FALSE,
+[eq]#max~Aniso~# is set to 1.
+
+If [eq]#{eta} = 1#, sampling is isotropic.
+If [eq]#{eta} > 1#, sampling is anisotropic.
+
+The sampling rate ([eq]#N#) is derived as:
+
+  {empty}:: [eq]#N = {lceil}{eta}{rceil}#
+
+An implementation may: round [eq]#N# up to the nearest supported sampling
+rate.
+An implementation may: use the value of [eq]#N# as an approximation of
+[eq]#{eta}#.
+
+
+[[textures-level-of-detail-operation]]
+==== LOD Operation
+
+The LOD parameter [eq]#{lambda}# is computed as follows:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\lambda_{base}(x,y) & =
+  \begin{cases}
+    shaderOp.Lod                                    & \text{(from optional SPIR-V operand)} \\
+    \log_2 \left ( \frac{\rho_{max}}{\eta} \right ) & \text{otherwise}
+  \end{cases} \\
+\lambda'(x,y)       & = \lambda_{base} + \mathbin{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\
+\lambda             & =
+  \begin{cases}
+    lod_{max}, & \lambda' > lod_{max} \\
+    \lambda',  & lod_{min} \leq \lambda' \leq lod_{max} \\
+    lod_{min}, & \lambda' < lod_{min} \\
+    \textit{undefined}, & lod_{min} > lod_{max}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+sampler.bias       & = mipLodBias & \text{(from sampler descriptor)} \\
+shaderOp.bias      & =
+  \begin{cases}
+    Bias & \text{(from optional SPIR-V operand)} \\
+    0    & \text{otherwise}
+  \end{cases} \\
+sampler.lod_{min}  & = minLod & \text{(from sampler descriptor)} \\
+shaderOp.lod_{min} & =
+  \begin{cases}
+    MinLod & \text{(from optional SPIR-V operand)} \\
+    0      & \text{otherwise}
+  \end{cases} \\
+\\
+lod_{min}          & = \max(sampler.lod_{min}, shaderOp.lod_{min}) \\
+lod_{max}          & = maxLod & \text{(from sampler descriptor)}
+\end{aligned}
+++++++++++++++++++++++++
+
+and [eq]#maxSamplerLodBias# is the value of the slink:VkPhysicalDeviceLimits
+feature <<limits-maxSamplerLodBias, pname:maxSamplerLodBias>>.
+
+
+[[textures-image-level-selection]]
+==== Image Level(s) Selection
+
+The image level(s) [eq]#d#, [eq]#d~hi~#, and [eq]#d~lo~# which texels are
+read from are determined by an image-level parameter [eq]#d~l~#, which is
+computed based on the LOD parameter, as follows:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+d_{l} =
+  \begin{cases}
+    nearest(d'),  & \text{mipmapMode is VK\_SAMPLER\_MIPMAP\_MODE\_NEAREST} \\
+    d',           & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+ifdef::VK_EXT_image_view_min_lod[]
+d' = max(level_{base} + \text{clamp}(\lambda, 0, q), minLod_{imageView})
+endif::VK_EXT_image_view_min_lod[]
+ifndef::VK_EXT_image_view_min_lod[]
+d' = level_{base} + \text{clamp}(\lambda, 0, q)
+endif::VK_EXT_image_view_min_lod[]
+
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+nearest(d') & =
+  \begin{cases}
+    \left \lceil d' + 0.5\right \rceil - 1, &
+        \text{preferred} \\
+    \left \lfloor d' + 0.5\right \rfloor,   &
+        \text{alternative}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+and:
+
+ifdef::VK_EXT_image_view_min_lod[]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+minLod_{imageView} & =
+  \begin{cases}
+    minLodFloat_{imageView}, & \text{preferred} \\
+    minLodInteger_{imageView}, & \text{alternative}
+  \end{cases} \\
+level_{base}       & = baseMipLevel \\
+q                  & = levelCount - 1
+\end{aligned}
+++++++++++++++++++++++++
+endif::VK_EXT_image_view_min_lod[]
+ifndef::VK_EXT_image_view_min_lod[]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+level_{base}       & = baseMipLevel \\
+q                  & = levelCount - 1
+\end{aligned}
+++++++++++++++++++++++++
+endif::VK_EXT_image_view_min_lod[]
+
+pname:baseMipLevel and pname:levelCount are taken from the
+pname:subresourceRange of the image view.
+
+ifdef::VK_EXT_image_view_min_lod[]
+[eq]#minLod~imageView~# must: be less or equal to [eq]#level~base~ + q#.
+endif::VK_EXT_image_view_min_lod[]
+
+If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_NEAREST,
+then the level selected is [eq]#d = d~l~#.
+
+If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_LINEAR,
+two neighboring levels are selected:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+d_{hi} & = \left\lfloor d_{l} \right\rfloor \\
+d_{lo} & = min( d_{hi} + 1, level_{base} + q ) \\
+\delta & = d_{l} - d_{hi}
+\end{aligned}
+++++++++++++++++++++++++
+
+[eq]#{delta}# is the fractional value, quantized to the number of
+<<limits-mipmapPrecisionBits, mipmap precision bits>>, used for
+<<textures-texel-filtering, linear filtering>> between levels.
+
+
+[[textures-normalized-to-unnormalized]]
+=== (s,t,r,q,a) to (u,v,w,a) Transformation
+
+The normalized texel coordinates are scaled by the image level dimensions
+and the array layer is selected.
+
+This transformation is performed once for each level used in
+<<textures-texel-filtering,filtering>> (either [eq]#d#, or [eq]#d~hi~# and
+[eq]#d~lo~#).
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+u(x,y) & = s(x,y) \times width_{scale} + \Delta_i\\
+v(x,y) & =
+  \begin{cases}
+    0                         & \text{for 1D images} \\
+    t(x,y) \times height_{scale} + \Delta_j & \text{otherwise}
+  \end{cases} \\
+w(x,y) & =
+  \begin{cases}
+    0                         & \text{for 2D or Cube images} \\
+    r(x,y) \times depth_{scale}  + \Delta_k & \text{otherwise}
+  \end{cases} \\
+\\
+a(x,y) & =
+  \begin{cases}
+    a(x,y)                    & \text{for array images} \\
+    0                         & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+  {empty}:: [eq]#width~scale~ = width~level~#
+  {empty}:: [eq]#height~scale~ = height~level~#
+  {empty}:: [eq]#depth~scale~ = depth~level~#
+
+ifdef::VK_NV_corner_sampled_image[]
+for conventional images, and:
+
+  {empty}:: [eq]#width~scale~ = width~level~ - 1#
+  {empty}:: [eq]#height~scale~ = height~level~ - 1#
+  {empty}:: [eq]#depth~scale~ = depth~level~ - 1#
+
+for corner-sampled images.
+endif::VK_NV_corner_sampled_image[]
+
+and where [eq]#({DeltaUpper}~i~, {DeltaUpper}~j~, {DeltaUpper}~k~)# are
+taken from the image instruction if it includes a code:ConstOffset or
+code:Offset operand, otherwise they are taken to be zero.
+
+
+Operations then proceed to Unnormalized Texel Coordinate Operations.
+
+
+== Unnormalized Texel Coordinate Operations
+
+
+[[textures-unnormalized-to-integer]]
+=== (u,v,w,a) to (i,j,k,l,n) Transformation and Array Layer Selection
+
+The unnormalized texel coordinates are transformed to integer texel
+coordinates relative to the selected mipmap level.
+
+The layer index [eq]#l# is computed as:
+
+  {empty}:: [eq]#l = clamp(RNE(a), 0, pname:layerCount - 1) {plus}
+            pname:baseArrayLayer#
+
+where pname:layerCount is the number of layers in the image subresource
+range of the image view, pname:baseArrayLayer is the first layer from the
+subresource range, and where:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\mathbin{RNE}(a) & =
+  \begin{cases}
+    \mathbin{roundTiesToEven}(a)                  & \text{preferred, from IEEE Std 754-2008 Floating-Point Arithmetic} \\
+    \left \lfloor a + 0.5 \right \rfloor & \text{alternative}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+The sample index [eq]#n# is assigned the value 0.
+
+Nearest filtering (ename:VK_FILTER_NEAREST) computes the integer texel
+coordinates that the unnormalized coordinates lie within:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i &= \left\lfloor u + shift \right\rfloor \\
+j &= \left\lfloor v + shift \right\rfloor \\
+k &= \left\lfloor w + shift \right\rfloor
+\end{aligned}
+++++++++++++++++++++++++
+where:
+
+  {empty}:: [eq]#shift = 0.0#
+
+ifdef::VK_NV_corner_sampled_image[]
+for conventional images, and:
+
+  {empty}:: [eq]#shift = 0.5#
+
+for corner-sampled images.
+endif::VK_NV_corner_sampled_image[]
+
+Linear filtering (ename:VK_FILTER_LINEAR) computes a set of neighboring
+coordinates which bound the unnormalized coordinates.
+The integer texel coordinates are combinations of [eq]#i~0~# or [eq]#i~1~#,
+[eq]#j~0~# or [eq]#j~1~#, [eq]#k~0~# or [eq]#k~1~#, as well as weights
+[eq]#{alpha}, {beta}#, and [eq]#{gamma}#.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_0 &= \left\lfloor u - shift \right\rfloor \\
+i_1 &= i_0 + 1 \\
+j_0 &= \left\lfloor v - shift \right\rfloor \\
+j_1 &= j_0 + 1 \\
+k_0 &= \left\lfloor w - shift \right\rfloor \\
+k_1 &= k_0 + 1
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\alpha &= \mathbin{frac}\left(u - shift\right)  \\[1em]
+\beta &= \mathbin{frac}\left(v - shift\right)  \\[1em]
+\gamma &= \mathbin{frac}\left(w - shift\right)
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+  {empty}:: [eq]#shift = 0.5#
+
+ifdef::VK_NV_corner_sampled_image[]
+for conventional images, and:
+
+  {empty}:: [eq]#shift = 0.0#
+
+for corner-sampled images,
+endif::VK_NV_corner_sampled_image[]
+and where:
+
+[latexmath]
+++++++++++++++++++++++++
+\mathbin{frac}(x) = x -  \left\lfloor x \right\rfloor
+++++++++++++++++++++++++
+where the number of fraction bits retained is specified by
+sname:VkPhysicalDeviceLimits::pname:subTexelPrecisionBits.
+
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+Cubic filtering (ename:VK_FILTER_CUBIC_EXT) computes a set of neighboring
+coordinates which bound the unnormalized coordinates.
+The integer texel coordinates are combinations of [eq]#i~0~#, [eq]#i~1~#,
+[eq]#i~2~# or [eq]#i~3~#, [eq]#j~0~#, [eq]#j~1~#, [eq]#j~2~# or [eq]#j~3~#,
+ifndef::VK_EXT_filter_cubic[]
+as well as weights [eq]#{alpha}# and [eq]#{beta}#.
+endif::VK_EXT_filter_cubic[]
+ifdef::VK_EXT_filter_cubic[]
+[eq]#k~0~#, [eq]#k~1~#, [eq]#k~2~# or [eq]#k~3~#, as well as weights
+[eq]#{alpha}#, [eq]#{beta}#, and [eq]#{gamma}#.
+endif::VK_EXT_filter_cubic[]
+
+ifndef::VK_EXT_filter_cubic[]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0}  & = {\left \lfloor {u - \frac{3}{2}} \right \rfloor} & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
+j_{0}  & = {\left \lfloor {v - \frac{3}{2}} \right \rfloor} & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+alpha &= \mathbin{frac}\left(u - \frac{1}{2}\right)  \\[1em]
+\beta &= \mathbin{frac}\left(v - \frac{1}{2}\right)
+\end{aligned}
+++++++++++++++++++++++++
+
+endif::VK_EXT_filter_cubic[]
+
+ifdef::VK_EXT_filter_cubic[]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0}  & = {\left \lfloor {u - \frac{3}{2}} \right \rfloor} & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
+j_{0}  & = {\left \lfloor {v - \frac{3}{2}} \right \rfloor} & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\[1em]
+k_{0}  & = {\left \lfloor {w - \frac{3}{2}} \right \rfloor} & k_{1} & = k_{0} + 1 & k_{2} & = k_{1} + 1 & k_{3} & = k_{2} + 1
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\alpha &= \mathbin{frac}\left(u - \frac{1}{2}\right)  \\[1em]
+\beta &= \mathbin{frac}\left(v - \frac{1}{2}\right)  \\[1em]
+\gamma &= \mathbin{frac}\left(w - \frac{1}{2}\right)
+\end{aligned}
+++++++++++++++++++++++++
+
+endif::VK_EXT_filter_cubic[]
+
+where:
+
+[latexmath]
+++++++++++++++++++++++++
+\mathbin{frac}(x) = x -  \left\lfloor x \right\rfloor
+++++++++++++++++++++++++
+
+where the number of fraction bits retained is specified by
+sname:VkPhysicalDeviceLimits::pname:subTexelPrecisionBits.
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+
+
+[[textures-integer-coordinate-operations]]
+== Integer Texel Coordinate Operations
+
+ifdef::VK_AMD_shader_image_load_store_lod[]
+Integer texel coordinate operations may: supply a LOD which texels are to be
+read from or written to using the optional SPIR-V operand code:Lod.
+endif::VK_AMD_shader_image_load_store_lod[]
+ifndef::VK_AMD_shader_image_load_store_lod[]
+The code:OpImageFetch and code:OpImageFetchSparse SPIR-V instructions may:
+supply a LOD from which texels are to be fetched using the optional SPIR-V
+operand code:Lod.
+Other integer-coordinate operations must: not.
+endif::VK_AMD_shader_image_load_store_lod[]
+If the code:Lod is provided then it must: be an integer.
+
+The image level selected is:
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+d & = level_{base} +
+  \begin{cases}
+    Lod & \text{(from optional SPIR-V operand)} \\
+    0   & \text{otherwise}
+  \end{cases} \\
+\end{aligned}
+++++++++++++++++++++++++
+
+If [eq]#d# does not lie in the range [eq]#[pname:baseMipLevel,
+pname:baseMipLevel {plus} pname:levelCount)#
+ifdef::VK_EXT_image_view_min_lod[]
+or [eq]#d# is less than minLodInteger~imageView~,
+endif::VK_EXT_image_view_min_lod[]
+then any values fetched are
+ifdef::VK_EXT_robustness2[]
+zero if the <<features-robustImageAccess2, pname:robustImageAccess2>>
+feature is enabled, otherwise are
+endif::VK_EXT_robustness2[]
+undefined:, and any writes (if supported) are discarded.
+
+
+[[textures-sample-operations]]
+== Image Sample Operations
+
+
+[[textures-wrapping-operation]]
+=== Wrapping Operation
+
+ifdef::VK_EXT_non_seamless_cube_map[]
+If the used sampler was created without
+ename:VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT,
+endif::VK_EXT_non_seamless_cube_map[]
+code:Cube images ignore the wrap modes specified in the sampler.
+Instead, if ename:VK_FILTER_NEAREST is used within a mip level then
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE is used, and if
+ename:VK_FILTER_LINEAR is used within a mip level then sampling at the edges
+is performed as described earlier in the <<textures-cubemapedge,Cube map
+edge handling>> section.
+
+The first integer texel coordinate i is transformed based on the
+pname:addressModeU parameter of the sampler.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i &=
+  \begin{cases}
+    i \bmod size                                & \text{for repeat} \\
+    (size - 1) - \mathbin{mirror}
+        ((i \bmod (2 \times size)) - size)      & \text{for mirrored repeat} \\
+    \mathbin{clamp}(i,0,size-1)                  & \text{for clamp to edge} \\
+    \mathbin{clamp}(i,-1,size)                   & \text{for clamp to border} \\
+    \mathbin{clamp}(\mathbin{mirror}(i),0,size-1) & \text{for mirror clamp to edge}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+& \mathbin{mirror}(n) =
+  \begin{cases}
+    n      & \text{for}\  n \geq 0 \\
+    -(1+n) & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+[eq]#j# (for 2D and Cube image) and [eq]#k# (for 3D image) are similarly
+transformed based on the pname:addressModeV and pname:addressModeW
+parameters of the sampler, respectively.
+
+
+[[textures-gather]]
+=== Texel Gathering
+
+SPIR-V instructions with code:Gather in the name return a vector derived
+from 4 texels in the base level of the image view.
+The rules for the ename:VK_FILTER_LINEAR minification filter are applied to
+identify the four selected texels.
+Each texel is then converted to an RGBA value according to
+<<textures-conversion-to-rgba,conversion to RGBA>> and then
+<<textures-component-swizzle,swizzled>>.
+A four-component vector is then assembled by taking the component indicated
+by the code:Component value in the instruction from the swizzled color value
+of the four texels.
+If the operation does not use the code:ConstOffsets image operand then the
+four texels form the 2 {times} 2 rectangle used for texture filtering:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[R] &= \tau_{i0j1}[level_{base}][comp] \\
+\tau[G] &= \tau_{i1j1}[level_{base}][comp] \\
+\tau[B] &= \tau_{i1j0}[level_{base}][comp] \\
+\tau[A] &= \tau_{i0j0}[level_{base}][comp]
+\end{aligned}
+++++++++++++++++++++++++
+
+If the operation does use the code:ConstOffsets image operand then the
+offsets allow a custom filter to be defined:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[R] &= \tau_{i0j0 + \Delta_0}[level_{base}][comp] \\
+\tau[G] &= \tau_{i0j0 + \Delta_1}[level_{base}][comp] \\
+\tau[B] &= \tau_{i0j0 + \Delta_2}[level_{base}][comp] \\
+\tau[A] &= \tau_{i0j0 + \Delta_3}[level_{base}][comp]
+\end{aligned}
+++++++++++++++++++++++++
+
+where:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level_{base}][comp] &=
+  \begin{cases}
+    \tau[level_{base}][R], & \text{for}\  comp = 0 \\
+    \tau[level_{base}][G], & \text{for}\  comp = 1 \\
+    \tau[level_{base}][B], & \text{for}\  comp = 2 \\
+    \tau[level_{base}][A], & \text{for}\  comp = 3
+  \end{cases}\\
+comp & \,\text{from SPIR-V operand Component}
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+code:OpImage*Gather must: not be used on a sampled image with
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> enabled.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_EXT_image_view_min_lod[]
+If [eq]#level~base~ < minLodInteger~imageView~#, then any values fetched are
+ifdef::VK_EXT_robustness2[]
+zero if <<features-robustImageAccess2, pname:robustImageAccess2>> is
+enabled.
+Otherwise values are
+endif::VK_EXT_robustness2[]
+undefined:.
+endif::VK_EXT_image_view_min_lod[]
+
+
+[[textures-texel-filtering]]
+=== Texel Filtering
+
+Texel filtering is first performed for each level (either [eq]#d# or
+[eq]#d~hi~# and [eq]#d~lo~#).
+
+If [eq]#{lambda}# is less than or equal to zero, the texture is said to be
+_magnified_, and the filter mode within a mip level is selected by the
+pname:magFilter in the sampler.
+If [eq]#{lambda}# is greater than zero, the texture is said to be
+_minified_, and the filter mode within a mip level is selected by the
+pname:minFilter in the sampler.
+
+
+[[textures-texel-nearest-filtering]]
+==== Texel Nearest Filtering
+
+Within a mip level, ename:VK_FILTER_NEAREST filtering selects a single value
+using the [eq]#(i, j, k)# texel coordinates, with all texels taken from
+layer l.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level] &=
+  \begin{cases}
+     \tau_{ijk}[level], & \text{for 3D image} \\
+     \tau_{ij}[level],  & \text{for 2D or Cube image} \\
+     \tau_{i}[level],   & \text{for 1D image}
+   \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+
+[[textures-texel-linear-filtering]]
+==== Texel Linear Filtering
+
+Within a mip level, ename:VK_FILTER_LINEAR filtering combines 8 (for 3D), 4
+(for 2D or Cube), or 2 (for 1D) texel values, together with their linear
+weights.
+The linear weights are derived from the fractions computed earlier:
+
+[latexmath]
+
+++++++++++++++++++++++++
+\begin{aligned}
+w_{i_0} &= (1-\alpha) \\
+w_{i_1} &= (\alpha)   \\
+w_{j_0} &= (1-\beta)  \\
+w_{j_1} &= (\beta)    \\
+w_{k_0} &= (1-\gamma) \\
+w_{k_1} &= (\gamma)
+\end{aligned}
+++++++++++++++++++++++++
+
+ifndef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+The values of multiple texels, together with their weights, are combined
+using a weighted average to produce a filtered value:
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+The values of multiple texels, together with their weights, are combined to
+produce a filtered value.
+
+The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
+the process by which multiple texels, together with their weights, are
+combined to produce a filtered texture value.
+
+When the pname:reductionMode is set (explicitly or implicitly) to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, a weighted average is
+computed:
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{3D} &= \sum_{k=k_0}^{k_1}\sum_{j=j_0}^{j_1}\sum_{i=i_0}^{i_1}(w_{i})(w_{j})(w_{k})\tau_{ijk} \\
+\tau_{2D} &= \sum_{j=j_0}^{j_1}\sum_{i=i_0}^{i_1}(w_{i})(w_{j})\tau_{ij} \\
+\tau_{1D} &= \sum_{i=i_0}^{i_1}(w_{i})\tau_{i}
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above set
+of multiple texels, together with their weights, computing a component-wise
+minimum or maximum, respectively, of the components of the set of texels
+with non-zero weights.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+[[textures-texel-cubic-filtering]]
+==== Texel Cubic Filtering
+
+Within a mip level, ename:VK_FILTER_CUBIC_EXT, filtering computes a weighted
+average of
+ifdef::VK_EXT_filter_cubic[]
+64 (for 3D),
+endif::VK_EXT_filter_cubic[]
+16 (for 2D), or 4 (for 1D) texel values, together with their
+ifndef::VK_QCOM_filter_cubic_weights[]
+Catmull-Rom weights.
+endif::VK_QCOM_filter_cubic_weights[]
+ifdef::VK_QCOM_filter_cubic_weights[]
+Catmull-Rom, Zero Tangent Cardinal, B-Spline, or Mitchell-Netravali weights
+as specified by slink:VkSamplerCubicWeightsCreateInfoQCOM.
+endif::VK_QCOM_filter_cubic_weights[]
+
+
+Catmull-Rom weights
+ifdef::VK_QCOM_filter_cubic_weights[]
+specified by ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
+endif::VK_QCOM_filter_cubic_weights[]
+are derived from the fractions computed earlier.
+
+ifndef::VK_EXT_filter_cubic[]
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\begin{bmatrix}
+w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \alpha & \alpha^2 & \alpha^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
+\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \beta & \beta^2 & \beta^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
+\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+The values of multiple texels, together with their weights, are combined
+using a weighted average to produce a filtered value:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{2D} &= \sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})\tau_{ij} \\
+\tau_{1D} &= \sum_{i=i_0}^{i_3}(w_{i})\tau_{i}
+\end{aligned}
+++++++++++++++++++++++++
+endif::VK_EXT_filter_cubic[]
+
+ifdef::VK_EXT_filter_cubic[]
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\begin{bmatrix}
+w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \alpha & \alpha^2 & \alpha^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
+\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \beta & \beta^2 & \beta^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
+\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{k_0}\phantom{,} w_{k_1}\phantom{,} w_{k_2}\phantom{,} w_{k_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \gamma & \gamma^2 & \gamma^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-1 &  \phantom{-}0 &  \phantom{-}1 &  \phantom{-}0 \\
+\phantom{-}2 & -5 &  \phantom{-}4 &  -1 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_QCOM_filter_cubic_weights[]
+Zero Tangent Cardinal weights specified by
+ename:VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM are derived from
+the fractions computed earlier.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\begin{bmatrix}
+w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \alpha & \alpha^2 & \alpha^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-2 &  \phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 \\
+\phantom{-}4 & -4 &  \phantom{-}2 &  -2 \\
+-2 &  \phantom{-}2 & -2 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \beta & \beta^2 & \beta^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-2 &  \phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 \\
+\phantom{-}4 & -4 &  \phantom{-}2 &  -2 \\
+-2 &  \phantom{-}2 & -2 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{k_0}\phantom{,} w_{k_1}\phantom{,} w_{k_2}\phantom{,} w_{k_3}
+\end{bmatrix}
+= \frac{1}{2}
+\begin{bmatrix}
+1 & \gamma & \gamma^2 & \gamma^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 &  \phantom{-}0 \\
+-2 &  \phantom{-}0 &  \phantom{-}2 &  \phantom{-}0 \\
+\phantom{-}4 & -4 &  \phantom{-}2 &  -2 \\
+-2 &  \phantom{-}2 & -2 &  \phantom{-}1
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+B-Spline weights specified by ename:VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM
+are derived from the fractions computed earlier.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\begin{bmatrix}
+w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
+\end{bmatrix}
+= \frac{1}{6}
+\begin{bmatrix}
+1 & \alpha & \alpha^2 & \alpha^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}4 &  \phantom{-}1 &  \phantom{-}0 \\
+-3 &  \phantom{-}0 &  \phantom{-}3 &  \phantom{-}0 \\
+\phantom{-}3 & -6 &  \phantom{-}3 &  \phantom{-}0 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
+\end{bmatrix}
+= \frac{1}{6}
+\begin{bmatrix}
+1 & \beta & \beta^2 & \beta^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}4 &  \phantom{-}1 &  \phantom{-}0 \\
+-3 &  \phantom{-}0 &  \phantom{-}3 &  \phantom{-}0 \\
+\phantom{-}3 & -6 &  \phantom{-}3 &  \phantom{-}0 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{k_0}\phantom{,} w_{k_1}\phantom{,} w_{k_2}\phantom{,} w_{k_3}
+\end{bmatrix}
+= \frac{1}{6}
+\begin{bmatrix}
+1 & \gamma & \gamma^2 & \gamma^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}4 &  \phantom{-}1 &  \phantom{-}0 \\
+-3 &  \phantom{-}0 &  \phantom{-}3 &  \phantom{-}0 \\
+\phantom{-}3 & -6 &  \phantom{-}3 &  \phantom{-}0 \\
+-1 &  \phantom{-}3 & -3 &  \phantom{-}1
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+Mitchell-Netravali weights specified by
+ename:VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM are derived from the
+fractions computed earlier.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\begin{bmatrix}
+w_{i_0}\phantom{,} w_{i_1}\phantom{,} w_{i_2}\phantom{,} w_{i_3}
+\end{bmatrix}
+= \frac{1}{18}
+\begin{bmatrix}
+1 & \alpha & \alpha^2 & \alpha^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}16 &  \phantom{-}1 &  \phantom{-}0 \\
+-9 &  \phantom{-}0 &  \phantom{-}9 &  \phantom{-}0 \\
+\phantom{-}15 & -36 &  \phantom{-}27 &  -6 \\
+-7 &  \phantom{-}21 & -21 &  \phantom{-}7
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{j_0}\phantom{,} w_{j_1}\phantom{,} w_{j_2}\phantom{,} w_{j_3}
+\end{bmatrix}
+= \frac{1}{18}
+\begin{bmatrix}
+1 & \beta & \beta^2 & \beta^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}16 &  \phantom{-}1 &  \phantom{-}0 \\
+-9 &  \phantom{-}0 &  \phantom{-}9 &  \phantom{-}0 \\
+\phantom{-}15 & -36 &  \phantom{-}27 &  -6 \\
+-7 &  \phantom{-}21 & -21 &  \phantom{-}7
+\end{bmatrix}
+\\
+\begin{bmatrix}
+w_{k_0}\phantom{,} w_{k_1}\phantom{,} w_{k_2}\phantom{,} w_{k_3}
+\end{bmatrix}
+= \frac{1}{18}
+\begin{bmatrix}
+1 & \gamma & \gamma^2 & \gamma^3
+\end{bmatrix}
+\begin{bmatrix}
+\phantom{-}1 &  \phantom{-}16 &  \phantom{-}1 &  \phantom{-}0 \\
+-9 &  \phantom{-}0 &  \phantom{-}9 &  \phantom{-}0 \\
+\phantom{-}15 & -36 &  \phantom{-}27 &  -6 \\
+-7 &  \phantom{-}21 & -21 &  \phantom{-}7
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+endif::VK_QCOM_filter_cubic_weights[]
+
+
+The values of multiple texels, together with their weights, are combined to
+produce a filtered value.
+
+The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
+the process by which multiple texels, together with their weights, are
+combined to produce a filtered texture value.
+
+When the pname:reductionMode is set (explicitly or implicitly) to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE
+ifdef::VK_QCOM_filter_cubic_clamp[]
+or ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
+endif::VK_QCOM_filter_cubic_clamp[]
+, a weighted average is computed:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{3D} &= \sum_{k=j_0}^{k_3}\sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})(w_{k})\tau_{ijk} \\
+\tau_{2D} &= \sum_{j=j_0}^{j_3}\sum_{i=i_0}^{i_3}(w_{i})(w_{j})\tau_{ij} \\
+\tau_{1D} &= \sum_{i=i_0}^{i_3}(w_{i})\tau_{i}
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above set
+of multiple texels, together with their weights, computing a component-wise
+minimum or maximum, respectively, of the components of the set of texels
+with non-zero weights.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+
+ifdef::VK_QCOM_filter_cubic_clamp[]
+[[textures-texel-range-clamp]]
+==== Texel Range Clamp
+When the pname:reductionMode is set to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM, the
+weighted average is clamped to be within the component-wise minimum and
+maximum of the set of texels with non-zero weights.
+endif::VK_QCOM_filter_cubic_clamp[]
+
+endif::VK_EXT_filter_cubic[]
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+
+
+[[textures-texel-mipmap-filtering]]
+==== Texel Mipmap Filtering
+
+ename:VK_SAMPLER_MIPMAP_MODE_NEAREST filtering returns the value of a single
+mipmap level,
+
+[eq]#{tau} = {tau}[d]#.
+
+ename:VK_SAMPLER_MIPMAP_MODE_LINEAR filtering combines the values of
+multiple mipmap levels ({tau}[hi] and {tau}[lo]), together with their linear
+weights.
+
+The linear weights are derived from the fraction computed earlier:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+w_{hi} &= (1-\delta) \\
+w_{lo} &= (\delta)   \\
+\end{aligned}
+++++++++++++++++++++++++
+
+ifndef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+The values of multiple mipmap levels together with their linear weights, are
+combined using a weighted average to produce a final filtered value:
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+The values of multiple mipmap levels, together with their weights, are
+combined to produce a final filtered value.
+
+The slink:VkSamplerReductionModeCreateInfo::pname:reductionMode can: control
+the process by which multiple texels, together with their weights, are
+combined to produce a filtered texture value.
+
+When the pname:reductionMode is set (explicitly or implicitly) to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, a weighted average is
+computed:
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau &= (w_{hi})\tau[hi]+(w_{lo})\tau[lo]
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
+values, together with their weights, computing a component-wise minimum or
+maximum, respectively, of the components of the values with non-zero
+weights.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+
+[[textures-texel-anisotropic-filtering]]
+==== Texel Anisotropic Filtering
+
+Anisotropic filtering is enabled by the pname:anisotropyEnable in the
+sampler.
+When enabled, the image filtering scheme accounts for a degree of
+anisotropy.
+
+The particular scheme for anisotropic texture filtering is
+implementation-dependent.
+Implementations should: consider the pname:magFilter, pname:minFilter and
+pname:mipmapMode of the sampler to control the specifics of the anisotropic
+filtering scheme used.
+In addition, implementations should: consider pname:minLod and pname:maxLod
+of the sampler.
+
+[NOTE]
+.Note
+====
+For historical reasons, vendor implementations of anisotropic filtering
+interpret these sampler parameters in different ways, particularly in corner
+cases such as pname:magFilter, pname:minFilter of ename:NEAREST or
+pname:maxAnisotropy equal to 1.0.
+Applications should not expect consistent behavior in such cases, and should
+use anisotropic filtering only with parameters which are expected to give a
+quality improvement relative to etext:LINEAR filtering.
+
+The following describes one particular approach to implementing anisotropic
+filtering for the 2D Image case; implementations may: choose other methods:
+
+Given a pname:magFilter, pname:minFilter of ename:VK_FILTER_LINEAR and a
+pname:mipmapMode of ename:VK_SAMPLER_MIPMAP_MODE_NEAREST:
+
+Instead of a single isotropic sample, N isotropic samples are sampled within
+the image footprint of the image level [eq]#d# to approximate an anisotropic
+filter.
+The sum [eq]#{tau}~2Daniso~# is defined using the single isotropic
+[eq]#{tau}~2D~(u,v)# at level [eq]#d#.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{2Daniso} & =
+     \frac{1}{N}\sum_{i=1}^{N}
+     {\tau_{2D}\left (
+       u \left ( x - \frac{1}{2} + \frac{i}{N+1} , y \right ),
+       v \left (x-\frac{1}{2}+\frac{i}{N+1}, y \right )
+     \right )},
+     & \text{when}\  \rho_{x} > \rho_{y} \\
+\tau_{2Daniso} &=
+     \frac{1}{N}\sum_{i=1}^{N}
+     {\tau_{2D}\left (
+        u \left ( x, y - \frac{1}{2} + \frac{i}{N+1} \right ),
+        v \left (x,y-\frac{1}{2}+\frac{i}{N+1} \right )
+     \right )},
+     & \text{when}\  \rho_{y} \geq \rho_{x}
+\end{aligned}
+++++++++++++++++++++++++
+
+ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+When slink:VkSamplerReductionModeCreateInfo::pname:reductionMode is set to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, the above summation is
+used.
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
+values, together with their weights, computing a component-wise minimum or
+maximum, respectively, of the components of the values with non-zero
+weights.
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+====
+
+
+ifdef::VK_NV_shader_image_footprint[]
+[[textures-footprint]]
+== Texel Footprint Evaluation
+
+The SPIR-V instruction code:OpImageSampleFootprintNV evaluates the set of
+texels from a single mip level that would be accessed during a
+<<textures-texel-filtering, texel filtering>> operation.
+In addition to the inputs that would be accepted by an equivalent
+code:OpImageSample* instruction, code:OpImageSampleFootprintNV accepts two
+additional inputs.
+The code:Granularity input is an integer identifying the size of texel
+groups used to evaluate the footprint.
+Each bit in the returned footprint mask corresponds to an aligned block of
+texels whose size is given by the following table:
+
+.Texel footprint granularity values
+[width="50%",options="header"]
+|====
+| code:Granularity  | code:Dim = 2D |  code:Dim = 3D
+|         0         |  unsupported  |  unsupported
+|         1         |      2x2      |     2x2x2
+|         2         |      4x2      |  unsupported
+|         3         |      4x4      |     4x4x2
+|         4         |      8x4      |  unsupported
+|         5         |      8x8      |  unsupported
+|         6         |     16x8      |  unsupported
+|         7         |     16x16     |  unsupported
+|         8         |  unsupported  |  unsupported
+|         9         |  unsupported  |  unsupported
+|         10        |  unsupported  |    16x16x16
+|         11        |     64x64     |    32x16x16
+|         12        |    128x64     |    32x32x16
+|         13        |    128x128    |    32x32x32
+|         14        |    256x128    |    64x32x32
+|         15        |    256x256    |  unsupported
+|====
+
+The code:Coarse input is used to select between the two mip levels that may:
+be accessed during texel filtering when using a pname:mipmapMode of
+ename:VK_SAMPLER_MIPMAP_MODE_LINEAR.
+When filtering between two mip levels, a code:Coarse value of code:true
+requests the footprint in the lower-resolution mip level (higher level
+number), while code:false requests the footprint in the higher-resolution
+mip level.
+If texel filtering would access only a single mip level, the footprint in
+that level would be returned when code:Coarse is set to code:false; an empty
+footprint would be returned when code:Coarse is set to code:true.
+
+The footprint for code:OpImageSampleFootprintNV is returned in a structure
+with six members:
+
+  * The first member is a boolean value that is true if the texel filtering
+    operation would access only a single mip level.
+  * The second member is a two- or three-component integer vector holding
+    the footprint anchor location.
+    For two-dimensional images, the returned components are in units of
+    eight texel groups.
+    For three-dimensional images, the returned components are in units of
+    four texel groups.
+  * The third member is a two- or three-component integer vector holding a
+    footprint offset relative to the anchor.
+    All returned components are in units of texel groups.
+  * The fourth member is a two-component integer vector mask, which holds a
+    bitfield identifying the set of texel groups in an 8x8 or 4x4x4
+    neighborhood relative to the anchor and offset.
+  * The fifth member is an integer identifying the mip level containing the
+    footprint identified by the anchor, offset, and mask.
+  * The sixth member is an integer identifying the granularity of the
+    returned footprint.
+
+For footprints in two-dimensional images (code:Dim2D), the mask returned by
+code:OpImageSampleFootprintNV indicates whether each texel group in a 8x8
+local neighborhood of texel groups would have one or more texels accessed
+during texel filtering.
+In the mask, the texel group with local group coordinates
+latexmath:[(lgx,lgy)] is considered covered if and only if
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+0 \neq ((mask.x + (mask.y << 32)) \text{ \& } (1 << (lgy \times 8 + lgx)))
+\end{aligned}
++++++++++++++++++++
+
+where:
+
+  * latexmath:[0 \leq lgx < 8] and latexmath:[0 \leq lgy < 8]; and
+  * latexmath:[mask] is the returned two-component mask.
+
+The local group with coordinates latexmath:[(lgx,lgy)] in the mask is
+considered covered if and only if the texel filtering operation would access
+one or more texels latexmath:[\tau_{ij}] in the returned mip level where:
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+i0 & =
+  \begin{cases}
+    gran.x \times (8 \times anchor.x + lgx), & \text{if } lgx + offset.x < 8 \\
+    gran.x \times (8 \times (anchor.x - 1) + lgx), & \text{otherwise}
+  \end{cases} \\
+i1 & = i0 + gran.x - 1 \\
+j0 & =
+  \begin{cases}
+    gran.y \times (8 \times anchor.y + lgy), & \text{if } lgy + offset.y < 8 \\
+    gran.y \times (8 \times (anchor.y - 1) + lgy), & otherwise
+  \end{cases} \\
+j1 & = j0 + gran.y - 1
+\end{aligned}
++++++++++++++++++++
+and
+
+  * latexmath:[i0 \leq i \leq i1] and latexmath:[j0 \leq j \leq j1];
+  * latexmath:[gran] is a two-component vector holding the width and height
+    of the texel group identified by the granularity;
+  * latexmath:[anchor] is the returned two-component anchor vector; and
+  * latexmath:[offset] is the returned two-component offset vector.
+
+For footprints in three-dimensional images (code:Dim3D), the mask returned
+by code:OpImageSampleFootprintNV indicates whether each texel group in a
+4x4x4 local neighborhood of texel groups would have one or more texels
+accessed during texel filtering.
+In the mask, the texel group with local group coordinates
+latexmath:[(lgx,lgy,lgz)], is considered covered if and only if:
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+0 \neq ((mask.x + (mask.y << 32)) \text{ \& } (1 << (lgz \times 16 + lgy \times 4 + lgx)))
+\end{aligned}
++++++++++++++++++++
+where:
+
+  * latexmath:[0 \leq lgx < 4], latexmath:[0 \leq lgy < 4], and latexmath:[0
+    \leq lgz < 4]; and
+  * latexmath:[mask] is the returned two-component mask.
+
+The local group with coordinates latexmath:[(lgx,lgy,lgz)] in the mask is
+considered covered if and only if the texel filtering operation would access
+one or more texels latexmath:[\tau_{ijk}] in the returned mip level where:
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+i0 & =
+  \begin{cases}
+    gran.x \times (4 \times anchor.x + lgx), & \text{if } lgx + offset.x < 4 \\
+    gran.x \times (4 \times (anchor.x - 1) + lgx), & \text{otherwise}
+  \end{cases} \\
+i1 & = i0 + gran.x - 1 \\
+j0 & =
+  \begin{cases}
+    gran.y \times (4 \times anchor.y + lgy), & \text{if } lgy + offset.y < 4 \\
+    gran.y \times (4 \times (anchor.y - 1) + lgy), & otherwise
+  \end{cases} \\
+j1 & = j0 + gran.y - 1 \\
+k0 & =
+  \begin{cases}
+    gran.z \times (4 \times anchor.z + lgz), & \text{if } lgz + offset.z < 4 \\
+    gran.z \times (4 \times (anchor.z - 1) + lgz), & otherwise
+  \end{cases} \\
+k1 & = k0 + gran.z - 1
+\end{aligned}
++++++++++++++++++++
+and
+
+  * latexmath:[i0 \leq i \leq i1], latexmath:[j0 \leq j \leq j1],
+    latexmath:[k0 \leq k \leq k1];
+  * latexmath:[gran] is a three-component vector holding the width, height,
+    and depth of the texel group identified by the granularity;
+  * latexmath:[anchor] is the returned three-component anchor vector; and
+  * latexmath:[offset] is the returned three-component offset vector.
+
+If the sampler used by code:OpImageSampleFootprintNV enables anisotropic
+texel filtering via pname:anisotropyEnable, it is possible that the set of
+texel groups accessed in a mip level may be too large to be expressed using
+an 8x8 or 4x4x4 mask using the granularity requested in the instruction.
+In this case, the implementation uses a texel group larger than the
+requested granularity.
+When a larger texel group size is used, code:OpImageSampleFootprintNV
+returns an integer granularity value that can: be interpreted in the same
+manner as the granularity value provided to the instruction to determine the
+texel group size used.
+If anisotropic texel filtering is disabled in the sampler, or if an
+anisotropic footprint can be represented as an 8x8 or 4x4x4 mask with the
+requested granularity, code:OpImageSampleFootprintNV will use the requested
+granularity as-is and return a granularity value of zero.
+
+code:OpImageSampleFootprintNV supports only two- and three-dimensional image
+accesses (code:Dim2D and code:Dim3D), and the footprint returned is
+undefined: if a sampler uses an addressing mode other than
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
+
+endif::VK_NV_shader_image_footprint[]
+
+
+ifdef::VK_QCOM_image_processing[]
+[[textures-weightimage]]
+== Weight Image Sampling
+
+The SPIR-V instruction code:OpImageWeightedSampleQCOM specifies a texture
+sampling operation involving two images: the _sampled image_ and the _weight
+image_.
+It is similar to bilinear filtering except more than 2x2 texels may
+participate in the filter and the filter weights are user-specified rather
+than computed by fixed-function hardware.
+The weight image view defines a 2D kernel weights used during sampling.
+
+The code:OpImageWeightedSampleQCOM support normalized or unnormalized texel
+coordinates.
+In addition to the inputs that would be accepted by an equivalent
+code:OpImageSample* instruction, code:OpImageWeightedSampleQCOM accepts a
+code:weight input that specifies the view of a sample weight image
+
+The input code:weight must: be a view of a 2D or 1D image with
+code:miplevels equal to `1`, code:samples equal to
+ename:VK_SAMPLE_COUNT_1_BIT, created with an identity swizzle, and created
+with code:usage that includes ename:VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM.
+The slink:VkImageViewSampleWeightCreateInfoQCOM specifies additional
+parameters of the view: pname:filterCenter, pname:filterSize, and
+pname:numPhases.
+described in more detail below.
+
+The code:weight input must: be bound using a
+<<descriptorsets-weightimage,sample weight image>> descriptor type.
+The code:weight view defines a filtering kernel that is a region of view's
+subresource range.
+The kernel spans a region from integer texel coordinate [eq]#(0,0)# to
+[eq]#(pname:filterSize.x-1, pname:filterSize.y-1)#.
+It is valid for the view's subresource to have dimensions larger than the
+kernel but the texels with integer coordinates greater than
+[eq]#(pname:filterSize.width-1, pname:filterSize.height-1)# are ignored by
+weight sampling.
+The value returned by queries code:OpImageQuerySize,
+code:OpImageQuerySizeLod, code:OpImageQueryLevels, and
+code:OpImageQuerySamples return for a weight image is undefined:.
+
+pname:filterCenter designates an integer texel coordinate within the filter
+kernel as being the 'center' of the kernel.
+The center must: be in the range [eq]#(0,0)# to [eq]#(pname:filterSize.x-1,
+pname:filterSize.y-1)#.
+pname:numPhases describes the number of filter phases used to provide
+sub-pixel filtering.
+Both are described in more detail below.
+
+
+[[textures-weightimage-layout]]
+=== Weight Image Layout
+
+The weight image specifies filtering kernel weight values.
+A 2D image view can be used to specify a 2D matrix of filter weights.
+For separable filers, a 1D image view can be used to specity the horizontal
+and vertical weights.
+
+
+==== 2D Non-Separable Weight Filters
+
+A 2D image view defined with slink:VkImageViewSampleWeightCreateInfoQCOM
+describes a 2D matrix [eq]#(pname:filterSize.width {times}
+pname:filterSize.height)# of weight elements with filter's center point at
+pname:filterCenter.
+Note that pname:filterSize can be smaller than the view's subresource, but
+the filter will always be located starting at integer texel coordinate
+[eq]#(0,0)#.
+
+The following figure illustrates a 2D convolution filter having
+pname:filterSize of [eq]#(4,3)# and pname:filterCenter at [eq]#(1, 1)#.
+
+image::{images}/weight_filter_2d.svg[align="center",title="2D Convolution Filter",opts="{imageopts}"]
+
+For a 2D weight filter, the phases are stored as layers of a 2D array image.
+The width and height of the view's subresource range must: be less than or
+equal to
+slink:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterDimension.
+The layers are stored in horizontal phase major order.
+Expressed as a formula, the layer index for a each filter phase is computed
+as:
+
+[source,c]
+----
+layerIndex(horizPhase,vertPhase,horizPhaseCount) = (vertPhase * horizPhaseCount) + horizPhase
+----
+
+
+==== 1D Separable Weight Filters
+
+A separable weight filter is a 2D filter that can be specified by two 1D
+filters in the [eq]#x# and [eq]#y# directions such that their product yields
+the 2D filter.
+The following example shows a 2D filter and its associated separable 1D
+horizontal and vertical filters.
+
+image::{images}/weight_filter_1d_separable.svg[align="center",title="Separable 2D Convolution Filter",opts="{imageopts}"]
+
+A 1D array image view defined with
+slink:VkImageViewSampleWeightCreateInfoQCOM and with pname:layerCount equal
+to '2' describes a separable weight filter.
+The horizontal weights are specified in slice '0' and the vertical weights
+in slice '1'.
+The pname:filterSize and pname:filterCenter specify the size and origin of
+the of the horizontal and vertical filters.
+For many use cases, 1D separable filters can offer a performance advantage
+over 2D filters.
+
+For a 1D separable weight filter, the phases are arranged into a 1D array
+image with two layers.
+The horizontal weights are stored in layer 0 and the vertical weights in
+layer 1.
+Within each layer of the 1D array image, the weights are arranged into
+groups of 4, and then arranged by phase.
+Expressed as a formula, the 1D texel offset for each weight within each
+layer is computed as:
+
+[source,c]
+----
+// Let horizontal weights have a weightIndex of [0, filterSize.width - 1]
+// Let vertical weights have a weightIndex of [0, filterSize.height - 1]
+// Let phaseCount be the number of phases in either the vertical or horizontal direction.
+
+texelOffset(phaseIndex,weightIndex,phaseCount) = (phaseCount * 4 * (weightIndex / 4)) + (phaseIndex * 4) + (weightIndex % 4)
+----
+
+
+[[textures-weightimage-filterphases]]
+=== Weight Sampling Phases
+
+When using weight image sampling, the texture coordinates may not align with
+a texel center in the sampled image.
+In this case, the filter weights can be adjusted based on the subpixel
+location.
+This is termed "`subpixel filtering`" to indicate that the origin of the
+filter lies at a subpixel location other than the texel center.
+Conceptually, this means that the weight filter is positioned such that
+filter taps do not align with sampled texels exactly.
+In such a case, modified filter weights may be needed to adjust for the
+off-center filter taps.
+Unlike bilinear filtering where the subpixel weights are computed by the
+implementation, subpixel weight image sampling requires that the per-phase
+filter weights are pre-computed by the application and stored in an array
+where each slice of the array is a "`filter phase`".
+The array is indexed by the implementation based on subpixel positioning.
+Rather than a single 2D kernel of filter weights, the application provides
+an array of kernels, one set of filter weights per phase.
+
+The number of phases are restricted by following requirements, which apply
+to both separable and non-separable filters:
+
+  * The number of phases in the vertical direction, [eq]#phaseCount~vert~#,
+    must: be a power of two (i.e., 1, 2, 4, etc.).
+  * The number of phases in the horizontal direction
+    [eq]#phaseCount~horiz~#, must: equal [eq]#phaseCount~vert~#.
+  * The total number of phases, [eq]#phaseCount~vert~ {times}
+    phaseCount~horiz~#, must: be less than or equal to
+    slink:VkPhysicalDeviceImageProcessingPropertiesQCOM::pname:maxWeightFilterPhases.
+
+
+[[textures-weightimage-sampler]]
+=== Weight Sampler Parameters
+
+Weight sampling requires sname:VkSamplerCreateInfo pname:addressModeU and
+pname:addressModeV must: be set to
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER.
+If ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER is used, then the border
+color must: be set to transparent black.
+
+
+[[textures-weightimage-filteroperation]]
+=== Weight Sampling Operation
+
+The 2D unnormalized texel coordinates latexmath:[(u,v)] are transformed by
+latexmath:[filterCenter] to specify coordinates latexmath:[i_{0}, j_{0}].
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0} &= \left\lfloor u - filterCenter_{x} \right\rfloor \\[1em]
+j_{0} &= \left\lfloor v - filterCenter_{y} \right\rfloor
+\end{aligned}
+++++++++++++++++++++++++
+where latexmath:[filterCenter] is specified by
+slink:VkImageViewSampleWeightCreateInfoQCOM::pname:filterCenter.
+
+
+Two sets of neighboring integer 2D texel coordinates are generated.
+The first set is used for selecting texels from the sampled image
+latexmath:[\tau] and the second set used for selecting texels from the
+weight image latexmath:[w].
+The first set of neighboring coordinates are combinations of
+latexmath:[i_{0}] to latexmath:[i_{filterWidth-1}] and latexmath:[j_{0}] to
+latexmath:[j_{filterHeight-1}].
+The second set of neighboring coordinates are combinations of
+latexmath:[k_{0}] to latexmath:[k_{filterWidth-1}] and latexmath:[l_{0}] to
+latexmath:[l_{filterHeight-1}].
+The first and second sets each contain latexmath:[(filterWidth \times
+filterHeight)] of pairs of latexmath:[(i,j)] and latexmath:[(k,l)]
+coordinates respectively.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\{i_q\}_{q=0}^{q=filterWidth-1} \quad &= i_{0} + q  \\[1em]
+\{j_q\}_{q=0}^{q=filterHeight-1} \quad &= j_{0} + q \\[1em]
+\{k_q\}_{q=0}^{q=filterWidth-1} \quad &= q  \\[1em]
+\{l_q\}_{q=0}^{q=filterHeight-1} \quad &= q
+\end{aligned}
+++++++++++++++++++++++++
+
+where latexmath:[filterWidth] and latexmath:[filterHeight] are specified by
+slink:VkImageViewSampleWeightCreateInfoQCOM::pname:filterSize.
+
+Each of the generated integer coordinates latexmath:[({i_q}, {j_q})] is
+transformed by <<textures-wrapping-operation, texture wrapping operation>>,
+followed by <<textures-integer-coordinate-validation,integer texel
+coordinate validation>>, If any coordinate fails coordinate validation, it
+is a Border Texel and <<textures-texel-replacement,texel replacement>> is
+performed.
+
+
+The phase index latexmath:[\psi] is computed from the fraction bits of the
+unnormalized 2D texel coordinates:
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+phaseCount_{h} = phaseCount_{v} &= \sqrt{numPhases}  \\[1em]
+hPhase &= \left\lfloor\mathbin{frac}\left( u \right) \times phaseCount_{h} \right\rfloor  \\[1em]
+vPhase &= \left\lfloor\mathbin{frac}\left( v \right) \times phaseCount_{v} \right\rfloor  \\[1em]
+\psi &= \left(vPhase \times phaseCount_{h}\right) + hPhase
+\end{aligned}
+++++++++++++++++++++++++
+
+where the number of fraction bits retained is
+latexmath:[\mathbin{log2}\left( numPhases \right)] specified by
+slink:VkImageViewSampleWeightCreateInfoQCOM::pname:numPhases
+
+Each pair of texel coordinates latexmath:[(i,j)] in the first set selects a
+single texel value latexmath:[\tau_{ij}] from the sampled image.
+Each pair of texel coordinates latexmath:[(k,l)] in the second set, combined
+with phaseIndex latexmath:[\psi], selects a single weight from the weight
+image latexmath:[w(k,l,\psi)] .
+
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+w(k,l,\psi) &=
+  \begin{cases}
+    w_{kl}[\psi]\quad\text{(}\psi\text{ as layer index)}   & \text{for 2D array view (non-separable filter) } \\
+    weight_{h} \times weight_{v}                           & \text{for 1D array view (separable filter) } \\
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+If latexmath:[w] is a 2D array view, then non-separable filtering is
+specified, and integer coordinates latexmath:[(k,l)] are used to select
+texels from layer latexmath:[\psi] of latexmath:[(w)].
+If latexmath:[w] is a 1D array view, then separable filtering is specified
+and integer coordinates latexmath:[(k,l)] are transformed to
+latexmath:[(k_{packed},l_{packed})], and used to select horizontal weight
+latexmath:[(weight_{h})] and vertical weight latexmath:[(weight_{v})] texels
+from layer 0 and layer 1 of latexmath:[(w)] respectively.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+k_{packed} &= \left(phaseCount_{h} \times 4 \times \left\lfloor k / 4 \right\rfloor\right) + \left(hPhase \times 4\right) + \left(k \mathbin{\%} 4\right)  \\[1em]
+l_{packed}& = \left(phaseCount_{v} \times 4 \times \left\lfloor l / 4 \right\rfloor\right) + \left(vPhase  \times 4\right) + \left(l \mathbin{\%} 4\right) \\[1em]
+weight_{h} &= w_{k_{packed}}[0]  & \text{(horizontal weights packed in layer 0)}  \\[1em]
+weight_{v}  &= w_{l_{packed}}[1]  & \text{(vertical weights packed in layer 1)}
+
+\end{aligned}
+++++++++++++++++++++++++
+
+Where latexmath:[\mathbin{\%}] refers to the integer modulo operator.
+
+The values of multiple texels, together with their weights, are combined to
+produce a filtered value.
+
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{weightSampling} &= \sum_{{j=j_0} \atop {l=l_0}}^{j_{blockHeight-1} \atop {l_{blockHeight-1}}}\quad \sum_{{i=i_0}\atop {k=k_0}}^{i_{blockWidth-1} \atop {k_{blockWidth-1}}}w(k,l,\psi)\tau_{ij} \\
+\end{aligned}
+++++++++++++++++++++++++
+
+When slink:VkSamplerReductionModeCreateInfo::pname:reductionMode is set to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, the above summation is
+used.
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
+values, computing a component-wise minimum or maximum of the texels with
+non-zero weights.
+If the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, each latexmath:[w(k,l,\psi)] weight
+must: be equal to 0.0 or 1.0, otherwise the undefined: values are returned.
+
+Finally, the operations described in
+<<textures-conversion-to-rgba,Conversion to RGBA>> and
+<<textures-component-swizzle,Component swizzle>> are performed and the final
+result is returned to the shader.
+
+
+[[textures-blockmatch]]
+== Block Matching
+
+The SPIR-V instruction code:opImageBlockMatchSAD and
+code:opImageBlockMatchSSD specify texture block matching operations where a
+block or region of texels within a _target image_ is compared with a
+same-sized region a _reference image_.
+The instructions make use of two image views: the _target view_ and the
+_reference view_.
+The target view and reference view can be the same view, allowing block
+matching of two blocks within a single image.
+
+Similar to an equivalent code:OpImageFetch instruction,
+code:opImageBlockMatchSAD and code:opImageBlockMatchSAD specify a code:image
+and an integer texel code:coordinate which which describes the bottom-left
+texel of the target block.
+There are three additional inputs.
+The code:reference and code:refCoodinate specifies bottom-left texel of the
+reference block.
+The code:blockSize specifies the integer width and height of the target and
+reference blocks to be compared, and must: not be greater than
+slink:VkPhysicalDeviceImageProcessingPropertiesQCOM.code:maxBlockMatchRegion.
+
+ifdef::VK_QCOM_image_processing2[]
+code:opImageBlockMatchWindowSAD and code:opImageBlockMatchWindowSAD take the
+same input parameters as the corresponding non-window instructions.
+The block matching comparison is performed for all pixel values within a 2D
+window whose dimensions are specified in the sampler.
+endif::VK_QCOM_image_processing2[]
+
+
+[[textures-blockmatch-sampler]]
+=== Block Matching Sampler Parameters
+
+For code:opImageBlockMatchSAD and code:opImageBlockMatchSSD, the input
+code:sampler must: be created with code:addressModeU and code:addressModeV,
+equal to ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, or
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER with
+ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK.
+The input code:sampler must: be created with code:unnormalizedCoordinates
+equal to ename:VK_TRUE.
+The input code:sampler must: be created with pname:components equal to
+ename:VK_COMPONENT_SWIZZLE_IDENTITY.
+
+
+ifdef::VK_QCOM_image_processing2[]
+For code:opImageBlockMatchWindowSAD and code:opImageBlockMatchWindowSSD
+instructions, the code:target sampler must: have been created with
+slink:VkSamplerBlockMatchWindowCreateInfoQCOM in the code:pNext chain.
+
+For code:opImageBlockMatchWindowSAD, code:opImageBlockMatchWindowSSD,
+code:opImageBlockMatchGatherSAD, or
+code:opImageBlockMatchGatherSSDinstructions, the input code:sampler must: be
+created with code:addressModeU and code:addressModeV, equal to
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER with
+ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK.
+endif::VK_QCOM_image_processing2[]
+
+Other sampler states are ignored.
+
+
+[[textures-blockmatch-filteroperation]]
+=== Block Matching Operation
+
+Block matching SPIR-V instructions code:opImageBlockMatchSAD and
+code:opImageBlockMatchSSD specify two sets of 2D integer texel coordinates:
+target coordinates latexmath:[(u,v)] and reference coordinates
+latexmath:[(s,t)].
+
+The coordinates define the bottom-left texel of the target block
+latexmath:[(i_{0}, j_{0})] and the reference block latexmath:[(k_{0},
+l_{0})].
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0} &= u  \\[1em]
+j_{0} &= v  \\[1em]
+k_{0} &= s  \\[1em]
+l_{0} &= t
+\end{aligned}
+++++++++++++++++++++++++
+
+For the target block, a set of neighboring integer texel coordinates are
+generated.
+The neighboring coordinates are combinations of latexmath:[i_{0}] to
+latexmath:[i_{blockWidth-1}] and latexmath:[j_{0}] to
+latexmath:[j_{blockHeight-1}].
+The set is of size latexmath:[blockWidth \times blockHeight].
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\{i_q\}_{q=0}^{q=blockWidth-1} \quad &= i_{0} + q  \\[1em]
+\{j_q\}_{q=0}^{q=blockHeight-1} \quad &= j_{0} + q
+\end{aligned}
+++++++++++++++++++++++++
+
+where latexmath:[blockWidth] and latexmath:[blockHeight] is specified by the
+code:blockSize operand.
+
+If any target integer texel coordinate latexmath:[(i,j)] in the set fails
+<<textures-integer-coordinate-validation,integer texel coordinate
+validation>>, then the texel is an invalid texel and
+<<textures-texel-replacement,texel replacement>> is performed.
+
+Similarly for the reference block, a set of neighboring integer texel
+coordinates are generated.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\{k_q\}_{q=0}^{q=blockWidth-1} \quad &= k_{0} + q  \\[1em]
+\{l_q\}_{q=0}^{q=blockHeight-1} \quad &= l_{0} + q
+\end{aligned}
+++++++++++++++++++++++++
+
+Each reference texel coordinate latexmath:[(k,l)] in the set must: not fail
+<<textures-integer-coordinate-validation,integer texel coordinate
+validation>>.
+To avoid undefined: behavior, application shader should guarantee that the
+reference block is fully within the bounds of the reference image.
+
+Each pair of texel coordinates latexmath:[(i,j)] in the set selects a single
+texel value from the target image latexmath:[\tau_{ij}].
+Each pair of texel coordinates latexmath:[(k,l)] in the set selects a single
+texel value from the reference image latexmath:[\upsilon_{kl}].
+
+The difference between target and reference texel values is summed to
+compute a difference metric.
+The code:opTextureBlockMatchSAD computes the sum of absolute differences.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{SAD} &= \sum_{{j=j_0} \atop {l=l_0}}^{{j_{blockHeight-1}} \atop {l_{blockHeight-1}}} \quad\sum_{{i=i_0} \atop {k=k_0}}^{{i_{blockWidth-1}} \atop {k_{blockWidth-1}}}|\upsilon_{kl}-\tau_{ij}| \\
+\end{aligned}
+++++++++++++++++++++++++
+
+The code:opImageBlockMatchSSD computes the sum of the squared differences.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{SSD} &= \sum_{{j=j_0} \atop {l=l_0}}^{{j_{blockHeight-1}} \atop {l_{blockHeight-1}}} \quad\sum_{{i=i_0} \atop {k=k_0}}^{{i_{blockWidth-1}} \atop {k_{blockWidth-1}}}|\upsilon_{kl}-\tau_{ij}|^2 \\
+\end{aligned}
+++++++++++++++++++++++++
+
+When slink:VkSamplerReductionModeCreateInfo::pname:reductionMode is set to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, the above summation is
+used.
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
+values, computing a component-wise minimum or maximum of
+latexmath:[|\upsilon_{kl}-\tau_{ij}|], respectively.
+For latexmath:[\tau_{SAD}], the minimum or maximum difference is computed
+and for latexmath:[\tau_{SSD}], the square of the minimum or maximum is
+computed.
+
+Finally, the operations described in
+<<textures-conversion-to-rgba,Conversion to RGBA>> and
+<<textures-component-swizzle,Component swizzle>> are performed and the final
+result is returned to the shader.
+The component swizzle is specified by the _target image_ descriptor; any
+swizzle specified by the _reference image_ descriptor is ignored.
+
+
+ifdef::VK_QCOM_image_processing2[]
+[[textures-blockmatchwindow-filteroperation]]
+==== Block Matching Window Operation
+
+Window block matching SPIR-V instructions code:opImageBlockMatchWindowSAD
+and code:opImageBlockMatchWindowSSD specify two sets of 2D integer texel
+coordinates: target coordinates latexmath:[(u,v)] and reference coordinates
+latexmath:[(s,t)].
+The <<textures-blockmatch-filteroperation,block matching operation>> is
+performed repeatedly, for multiple sets of target integer coordinates within
+the specified window.
+These instructions effectively search a region or "`window`" within the
+target texture and identify the window coordinates where the minimum or
+maximum error metric is found.
+These instructions only support single component image formats.
+
+The target coordinates are combinations of coordinates from
+latexmath:[(u,v)] to latexmath:[(u + windowWidth - 1, v + windowHeight - 1)]
+where latexmath:[windowHeight] and latexmath:[windowWidth] are specified by
+slink:VkSamplerBlockMatchWindowCreateInfoQCOM::pname:windowExtent.
+At each each target coordinate, a
+<<textures-blockmatch-filteroperation,block matching operation>> is
+performed, resulting in a difference metric.
+The the reference coordinate latexmath:[(s,t)] is fixed.
+The block matching operation is repeated latexmath:[windowWidth \times
+windowHeight] times.
+
+The resulting minimum or maximum error is returned in the R component of the
+output.
+The integer window coordinates latexmath:[(x,y)] are returned in the G and B
+components of the output.
+The A component is 0.
+The minimum or maximum behavior is selected by
+slink:VkSamplerBlockMatchWindowCreateInfoQCOM::pname:windowCompareMode.
+
+The following psuedocode describes the operation
+code:opImageBlockMatchWindowSAD.
+The pseudocode for code:opImageBlockMatchWindowSSD follows an identical
+pattern.
+
+[source,c]
+----
+vec4 opImageBlockMatchGatherSAD( sampler2D target,
+                                 uvec2 targetCoord,
+                                 samler2D reference,
+                                 uvec2 refCoord,
+                                 uvec2 blocksize) {
+    // Two parameters are sourced from the VkSampler associated with
+    // `target`:
+    //    compareMode  (which can be either `MIN` or `MAX`)
+    //    uvec2 window (which defines the search window)
+
+    minSAD = INF;
+    maxSAD = -INF;
+    uvec2 minCoord;
+    uvec2 maxCoord;
+
+    for (uint x=0, x<window.width; x++) {
+        for (uint y=0; y<window.height; y++) {
+            float SAD = textureBlockMatchSAD(target,
+                                             targetCoord + uvec2(x, y),
+                                             reference,
+                                             refCoord,
+                                             blocksize).x;
+            if (SAD < minSAD) {
+                minSAD = SAD;
+                minCoord = uvec2(x,y);
+            }
+            if (SAD > maxSAD) {
+                maxSAD = SAD;
+                maxCoord = uvec2(x,y);
+            }
+        }
+    }
+    if (compareMode==MIN) {
+        return vec4(minSAD, minCoord.x, minCoord.y, 0.0);
+    } else {
+        return vec4(maxSAD, maxCoord.x, maxCoord.y, 0.0);
+    }
+}
+----
+
+
+[[textures-blockmatchgather-filteroperation]]
+==== Block Matching Gather Operation
+
+Block matching Gather SPIR-V instructions code:opImageBlockMatchGatherSAD
+and code:opImageBlockMatchGatherSSD specify two sets of 2D integer texel
+coordinates: target coordinates latexmath:[(u,v)] and reference coordinates
+latexmath:[(s,t)].
+
+These instructions perform the <<textures-blockmatch-filteroperation,block
+matching operation>> 4 times, using integer target coordinates
+latexmath:[(u,v)], latexmath:[(u+1,v)], latexmath:[(u+2,v)], and
+latexmath:[(u+3,v)].
+The R component from each of those 4 operations is gathered and returned in
+the R, G, B, and A components of the output respectively.
+For each block match operation, the reference coordinate is
+latexmath:[(s,t)].
+For each block match operation, only the R component of the target and
+reference images are compared.
+The following psuedocode describes the operation opImageBlockMatchGatherSAD.
+The pseudocode for opImageBlockMatchGatherSSD follows an identical pattern.
+
+[source,c]
+----
+vec4 opImageBlockMatchGatherSAD(sampler2D target,
+                                uvec2 targetCoord,
+                                samler2D reference,
+                                uvec2 refCoord,
+                                uvec2 blocksize) {
+    vec4 out;
+    for (uint x=0, x<4; x++) {
+            float SAD = textureBlockMatchSAD(target,
+                                             targetCoord + uvec2(x, 0),
+                                             reference,
+                                             refCoord,
+                                             blocksize).x;
+            if (x == 0) {
+                out.x = SAD;
+            }
+            if (x == 1) {
+                out.y = SAD;
+            }
+            if (x == 2) {
+                out.z = SAD;
+            }
+            if (x == 3) {
+                out.w = SAD;
+            }
+    }
+    return out;
+}
+----
+endif::VK_QCOM_image_processing2[]
+
+
+[[textures-boxfilter]]
+== Box Filter Sampling
+
+The SPIR-V instruction code:OpImageBoxFilterQCOM specifies texture box
+filtering operation where a weighted average of a region of texels is
+computed, with the weights proportional to the coverage of each of the
+texels.
+
+In addition to the inputs that would be accepted by an equivalent
+code:OpImageSample* instruction, code:OpImageBoxFilterQCOM accepts one
+additional input, code:boxSize which specifies the width and height in
+texels of the region to be averaged.
+
+The figure below shows an example of using code:OpImageBoxFilterQCOM to
+sample from a [eq]#8 {times} 4# texel two-dimensional image, with
+unnormalized texture coordinates [eq]#(4.125, 2.625)# and code:boxSize of
+[eq]#(2.75, 2.25)#.
+The filter will read 12 texel values and compute a weights based portion of
+of each texel covered by the box.
+
+[[textures-box-filter-diagrams]]
+image::{images}/vulkantexture_boxFilter.svg[align="center",title="Box Filter Sampling Example",opts="{imageopts}"]
+
+If code:boxSize has height and width both equal to 1.0, then this
+instruction will behave as traditional bilinear filtering.
+The code:boxSize parameter must: be greater than or equal to 1.0 and must:
+not be greater than
+slink:VkPhysicalDeviceImageProcessingPropertiesQCOM.code:maxBoxFilterBlockSize.
+
+
+[[textures-boxfilter-sampler]]
+=== Box Filter Sampler Parameters
+
+The input code:sampler must: be created with code:addressModeU and
+code:addressModeV, equal to ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, or
+ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER with
+ename:VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK.
+
+
+[[textures-boxfilter-filteroperation]]
+=== Box Filter Operation
+
+The 2D unnormalized texel coordinates latexmath:[(u,v)] are transformed by
+latexmath:[boxSize] to specify integer texel coordinates latexmath:[(i_{0},
+j_{0})] of the bottom left texel for the filter.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0} &= \left\lfloor u - \frac{boxWidth}{2} \right\rfloor \\[1em]
+j_{0} &= \left\lfloor v - \frac{boxHeight}{2} \right\rfloor
+\end{aligned}
+++++++++++++++++++++++++
+
+where latexmath:[boxWidth] and latexmath:[boxHeight] are specified by the
+code:(x,y) components of the code:boxSize operand.
+
+The filter dimensions latexmath:[(filterWidth \times filterHeight)] are
+computed from the fractional portion of the latexmath:[(u,v)] coordinates
+and the latexmath:[boxSize].
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+startFracU &= \mathbin{frac}\left(u - \frac{boxWidth}{2} \right) \\[1em]
+startFracV &= \mathbin{frac}\left(v - \frac{boxHeight}{2} \right) \\[1em]
+endFracU &= \mathbin{frac}\left( startFracU + boxWidth \right) \\[1em]
+endFracV &= \mathbin{frac}\left( startFracV + boxHeight \right) \\[1em]
+filterWidth &= \left\lceil startFracU + boxWidth \right\rceil  \\[1em]
+filterHeight &= \left\lceil startFracV + boxHeight \right\rceil
+\end{aligned}
+++++++++++++++++++++++++
+
+where the number of fraction bits retained by latexmath:[frac()] is
+specified by sname:VkPhysicalDeviceLimits::pname:subTexelPrecisionBits.
+
+A set of neighboring integer texel coordinates are generated.
+The neighboring coordinates are combinations of latexmath:[i_{0}] to
+latexmath:[i_{filterWidth-1}] and latexmath:[j_{0}] to
+latexmath:[j_{filterHeight-1}], with latexmath:[i_{0}, j_{0}] being the
+top-left coordinate of this set.
+The set is of size latexmath:[(filterWidth \times filterHeight)].
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\{i_q\}_{q=0}^{q=filterWidth-1} \quad &= i_{0} + q  \\[1em]
+\{j_q\}_{q=0}^{q=filterHeight-1} \quad &= j_{0} + q
+\end{aligned}
+++++++++++++++++++++++++
+
+Each of the generated integer coordinates latexmath:[({i_q}, {j_q})] is
+transformed by <<textures-wrapping-operation, texture wrapping operation>>,
+followed by <<textures-integer-coordinate-validation,integer texel
+coordinate validation>>, If any coordinate fails coordinate validation, it
+is a Border Texel and <<textures-texel-replacement,texel replacement>> is
+performed.
+
+Horizontal weights latexmath:[horizWeight_{0}] to
+latexmath:[horizWeight_{boxWidth-1}] and vertical weights
+latexmath:[vertWeight_{0}] to latexmath:[vertWeight_{boxHeight-1}] are
+computed.
+Texels that are fully covered by the box will have a horizontal and vertical
+weight of 1.
+Texels partially covered by the box will have will have a reduced weights
+proportional to the coverage.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+horizWeight_{i} &=
+  \begin{cases}
+    \left(1-startFracU \right),         & \text{for }  (i == 0) \\
+    \left(endFracU \right),             & \text{for }  (i == filterWidth-1) \text{ and } (endFracU != 0) \\
+    \left(1\right),                     & \text{otherwise} \\
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+vertWeight_{j} &=
+  \begin{cases}
+    \left(1-startFracV \right),         & \text{for } (j == 0)            \\
+    \left(endFracV \right),             & \text{for } (j == filterHeight-1) \text{ and } (endFracV !=0)   \\
+     \left(1\right),                    & \text{otherwise}  \\
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+
+The values of multiple texels, together with their horizontal and vertical
+weights, are combined to produce a box filtered value.
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{boxFilter} &= \frac{1}{boxHeight \times boxWidth} \sum_{j=j_0}^{j_{filterHeight-1}}\quad\sum_{i=i_0}^{i_{filterWidth-1}}(horizWeight_i)(vertWeight_j)\tau_{ij} \\
+\end{aligned}
+++++++++++++++++++++++++
+
+When slink:VkSamplerReductionModeCreateInfo::pname:reductionMode is set to
+ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, the above summation is
+used.
+However, if the reduction mode is ename:VK_SAMPLER_REDUCTION_MODE_MIN or
+ename:VK_SAMPLER_REDUCTION_MODE_MAX, the process operates on the above
+values, computing a component-wise minimum or maximum of the texels.
+
+endif::VK_QCOM_image_processing[]
+
+
+[[textures-instructions]]
+== Image Operation Steps
+
+Each step described in this chapter is performed by a subset of the image
+instructions:
+
+  * Texel Input Validation Operations, Format Conversion, Texel Replacement,
+    Conversion to RGBA, and Component Swizzle: Performed by all instructions
+    except code:OpImageWrite.
+  * Depth Comparison: Performed by code:OpImage*Dref instructions.
+  * All Texel output operations: Performed by code:OpImageWrite.
+  * Projection: Performed by all code:OpImage*Proj instructions.
+  * Derivative Image Operations, Cube Map Operations, Scale Factor
+    Operation, LOD Operation and Image Level(s) Selection, and Texel
+    Anisotropic Filtering: Performed by all code:OpImageSample* and
+    code:OpImageSparseSample* instructions.
+  * (s,t,r,q,a) to (u,v,w,a) Transformation, Wrapping, and (u,v,w,a) to
+    (i,j,k,l,n) Transformation And Array Layer Selection: Performed by all
+    code:OpImageSample, code:OpImageSparseSample, and code:OpImage*Gather
+    instructions.
+  * Texel Gathering: Performed by code:OpImage*Gather instructions.
+ifdef::VK_NV_shader_image_footprint[]
+  * Texel Footprint Evaluation: Performed by code:OpImageSampleFootprint
+    instructions.
+endif::VK_NV_shader_image_footprint[]
+  * Texel Filtering: Performed by all code:OpImageSample* and
+    code:OpImageSparseSample* instructions.
+  * Sparse Residency: Performed by all code:OpImageSparse* instructions.
+ifdef::VK_QCOM_image_processing[]
+  * (s,t,r,q,a) to (u,v,w,a) Transformation, Wrapping, and Weight Image
+    Sampling: Performed by code:OpImageWeightedSample* instructions.
+  * (s,t,r,q,a) to (u,v,w,a) Transformation, Wrapping, and Block Matching:
+    Performed by code:opImageBlockMatch* instructions.
+  * (s,t,r,q,a) to (u,v,w,a) Transformation, Wrapping, and Box Filter
+    Sampling: Performed by code:OpImageBoxFilter* instructions.
+endif::VK_QCOM_image_processing[]
+
+
+[[textures-queries]]
+== Image Query Instructions
+
+
+=== Image Property Queries
+
+code:OpImageQuerySize, code:OpImageQuerySizeLod, code:OpImageQueryLevels,
+and code:OpImageQuerySamples query properties of the image descriptor that
+would be accessed by a shader image operation.
+ifdef::VK_EXT_robustness2[]
+They return 0 if the bound descriptor is a null descriptor.
+endif::VK_EXT_robustness2[]
+
+code:OpImageQuerySizeLod returns the size of the image level identified by
+the code:Level code:of code:Detail operand.
+If that level does not exist in the image,
+ifdef::VK_EXT_robustness2[and the descriptor is not null,]
+then the value returned is undefined:.
+
+
+=== Lod Query
+
+code:OpImageQueryLod returns the Lod parameters that would be used in an
+image operation with the given image and coordinates.
+ifdef::VK_EXT_robustness2[]
+If the descriptor that would be accessed is a null descriptor then
+[eq]#(0,0)# is returned.
+endif::VK_EXT_robustness2[]
+ifdef::VK_EXT_robustness2[Otherwise, the]
+ifndef::VK_EXT_robustness2[The]
+steps described in this chapter are performed as if for
+code:OpImageSampleImplicitLod, up to <<textures-lod-and-scale-factor>>.
+The return value is the vector [eq]#({lambda}', d~l~)#.
+These values may: be subject to implementation-specific maxima and minima
+for very large, out-of-range values.
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/vertexpostproc.adoc b/codegen/vulkan/vulkan-docs-next/chapters/vertexpostproc.adoc
new file mode 100644
index 0000000..4e22f79
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/vertexpostproc.adoc
@@ -0,0 +1,1765 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[vertexpostproc]]
+= Fixed-Function Vertex Post-Processing
+
+After <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stages>>, the following fixed-function operations are applied to
+vertices of the resulting primitives:
+
+ifdef::VK_EXT_transform_feedback[]
+  * Transform feedback (see <<vertexpostproc-transform-feedback,Transform
+    Feedback>>)
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_viewport_swizzle[]
+  * Viewport swizzle (see <<vertexpostproc-viewport-swizzle,Viewport
+    Swizzle>>)
+endif::VK_NV_viewport_swizzle[]
+  * Flat shading (see <<vertexpostproc-flatshading>>).
+  * Primitive clipping, including client-defined half-spaces (see
+    <<vertexpostproc-clipping,Primitive Clipping>>).
+  * Shader output attribute clipping (see
+    <<vertexpostproc-clipping-shader-outputs,Clipping Shader Outputs>>).
+ifdef::VK_NV_clip_space_w_scaling[]
+  * Clip space W scaling (see <<vertexpostproc-viewportwscaling,Controlling
+    Viewport W Scaling>>).
+endif::VK_NV_clip_space_w_scaling[]
+  * Perspective division on clip coordinates (see
+    <<vertexpostproc-coord-transform,Coordinate Transformations>>).
+  * Viewport mapping, including depth range scaling (see
+    <<vertexpostproc-viewport,Controlling the Viewport>>).
+  * Front face determination for polygon primitives (see
+    <<primsrast-polygons-basic,Basic Polygon Rasterization>>).
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+TODO:Odd that this one link to a different chapter is in this list.
+====
+endif::editing-notes[]
+
+Next, rasterization is performed on primitives as described in chapter
+<<primsrast,Rasterization>>.
+
+
+ifdef::VK_EXT_transform_feedback[]
+[[vertexpostproc-transform-feedback]]
+== Transform Feedback
+
+Before any other fixed-function vertex post-processing, vertex outputs from
+the last shader in the
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> can: be written out to one or more transform feedback buffers bound
+to the command buffer.
+To capture vertex outputs the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader must: be declared with the code:Xfb execution mode.
+Outputs decorated with code:XfbBuffer will be written out to the
+corresponding transform feedback buffers bound to the command buffer when
+transform feedback is active.
+Transform feedback buffers are bound to the command buffer by using
+flink:vkCmdBindTransformFeedbackBuffersEXT.
+Transform feedback is made active by calling
+flink:vkCmdBeginTransformFeedbackEXT and made inactive by calling
+flink:vkCmdEndTransformFeedbackEXT.
+After vertex data is written it is possible to use
+flink:vkCmdDrawIndirectByteCountEXT to start a new draw where the
+pname:vertexCount is derived from the number of bytes written by a previous
+transform feedback.
+
+When an individual point, line, or triangle primitive reaches the transform
+feedback stage while transform feedback is active, the values of the
+specified output variables are assembled into primitives and appended to the
+bound transform feedback buffers.
+After activating transform feedback, the values of the first assembled
+primitive are written at the starting offsets of the bound transform
+feedback buffers, and subsequent primitives are appended to the buffer.
+If the optional pname:pCounterBuffers and pname:pCounterBufferOffsets
+parameters are specified, the starting points within the transform feedback
+buffers are adjusted so data is appended to the previously written values
+indicated by the value stored by the implementation in the counter buffer.
+
+For multi-vertex primitives, all values for a given vertex are written
+before writing values for any other vertex.
+ifdef::VK_EXT_provoking_vertex[]
+When <<features-transformFeedbackPreservesProvokingVertex,
+pname:transformFeedbackPreservesProvokingVertex>> is not enabled,
+implementations
+endif::VK_EXT_provoking_vertex[]
+ifndef::VK_EXT_provoking_vertex[]
+Implementations
+endif::VK_EXT_provoking_vertex[]
+may: write out any vertex within the primitive first, but all subsequent
+vertices for that primitive must: be written out in a consistent winding
+order defined as follows:
+
+  * If neither <<geometry,geometry>> or <<tessellation,tessellation
+    shading>> is active, vertices within a primitive are appended according
+    to the winding order described by the <<drawing-primitive-topologies,
+    primitive topology>> defined by the
+    slink:VkPipelineInputAssemblyStateCreateInfo:pname:topology used to
+    execute the <<drawing,drawing command>>.
+  * If <<geometry,geometry shading>> is active, vertices within a primitive
+    are appended according to the winding order described by the
+    <<drawing-primitive-topologies, primitive topology>> defined by the
+    <<drawing-point-lists, code:OutputPoints>>, <<drawing-line-strips,
+    code:OutputLineStrips>>, or <<drawing-triangle-strips,
+    code:OutputTriangleStrips>> execution mode.
+  * If <<tessellation,tessellation shading>> is active but
+    <<geometry,geometry shading>> is not, vertices within a primitive are
+    appended according to the winding order defined by
+    <<tessellation-triangle-tessellation, triangle tessellation>>,
+    <<tessellation-quad-tessellation, quad tessellation>>, and
+    <<tessellation-isoline-tessellation, isoline tessellation>>.
+
+ifdef::VK_EXT_provoking_vertex[]
+When <<features-transformFeedbackPreservesProvokingVertex,
+pname:transformFeedbackPreservesProvokingVertex>> is enabled, then in
+addition to writing vertices with a consistent winding order, the vertex
+order must: preserve the <<vertexpostproc-flatshading, provoking vertex>> of
+each primitive:
+
+  * When the
+    <<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT,pipeline's
+    provoking vertex mode>> is
+    ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, the primitive's
+    provoking vertex must be the first vertex written.
+  * When the
+    <<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT,pipeline's
+    provoking vertex mode>> is
+    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, the primitive's
+    provoking vertex must be the last vertex written.
+
+If <<limits-transformFeedbackPreservesTriangleFanProvokingVertex,
+pname:transformFeedbackPreservesTriangleFanProvokingVertex>> is
+ename:VK_FALSE, neither <<geometry, geometry>> nor <<tessellation,
+tessellation>> shading is active, and the <<drawing-primitive-topologies,
+primitive topology>> is ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, then the
+first vertex written from each primitive is implementation-defined even when
+<<features-transformFeedbackPreservesProvokingVertex,
+pname:transformFeedbackPreservesProvokingVertex>> is enabled.
+
+endif::VK_EXT_provoking_vertex[]
+
+When capturing vertices, the stride associated with each transform feedback
+buffer, as indicated by the code:XfbStride decoration, indicates the number
+of bytes of storage reserved for each vertex in the transform feedback
+buffer.
+For every vertex captured, each output attribute with a code:Offset
+decoration will be written to the storage reserved for the vertex at the
+associated transform feedback buffer.
+When writing output variables that are arrays or structures, individual
+array elements or structure members are written tightly packed in order.
+For vector types, individual components are written in order.
+For matrix types, outputs are written as an array of column vectors.
+
+If any component of an output with an assigned transform feedback offset was
+not written to by its shader, the value recorded for that component is
+undefined:.
+All components of an output variable must: be written at an offset aligned
+to the size of the component.
+The size of each component of an output variable must: be at least 32-bits.
+When capturing a vertex, any portion of the reserved storage not associated
+with an output variable with an assigned transform feedback offset will be
+unmodified.
+
+When transform feedback is inactive, no vertices are recorded.
+If there is a valid counter buffer handle and counter buffer offset in the
+pname:pCounterBuffers and pname:pCounterBufferOffsets arrays, writes to the
+corresponding transform feedback buffer will start at the byte offset
+represented by the value stored in the counter buffer location.
+
+Individual lines or triangles of a strip or fan primitive will be extracted
+and recorded separately.
+Incomplete primitives are not recorded.
+
+When using a geometry shader that emits vertices to multiple vertex streams,
+a primitive will be assembled and output for each stream when there are
+enough vertices emitted for the output primitive type.
+All outputs assigned to a given transform feedback buffer are required to
+come from a single vertex stream.
+
+The sizes of the transform feedback buffers are defined by the
+flink:vkCmdBindTransformFeedbackBuffersEXT pname:pSizes parameter for each
+of the bound buffers, or the size of the bound buffer, whichever is the
+lesser.
+If there is less space remaining in any of the transform feedback buffers
+than the size of all of the vertex data for that primitive based on the
+code:XfbStride for that code:XfbBuffer then no vertex data of that primitive
+is recorded in any transform feedback buffer, and the value for the number
+of primitives written in the corresponding
+ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query for all transform
+feedback buffers is no longer incremented.
+
+Any outputs made to a code:XfbBuffer that is not bound to a transform
+feedback buffer is ignored.
+
+[open,refpage='vkCmdBindTransformFeedbackBuffersEXT',desc='Bind transform feedback buffers to a command buffer',type='protos']
+--
+To bind transform feedback buffers to a command buffer for use in subsequent
+drawing commands, call:
+
+include::{generated}/api/protos/vkCmdBindTransformFeedbackBuffersEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:firstBinding is the index of the first transform feedback binding
+    whose state is updated by the command.
+  * pname:bindingCount is the number of transform feedback bindings whose
+    state is updated by the command.
+  * pname:pBuffers is a pointer to an array of buffer handles.
+  * pname:pOffsets is a pointer to an array of buffer offsets.
+  * pname:pSizes is `NULL` or a pointer to an array of basetype:VkDeviceSize
+    buffer sizes, specifying the maximum number of bytes to capture to the
+    corresponding transform feedback buffer.
+    If pname:pSizes is `NULL`, or the value of the pname:pSizes array
+    element is ename:VK_WHOLE_SIZE, then the maximum number of bytes
+    captured will be the size of the corresponding buffer minus the buffer
+    offset.
+
+The values taken from elements [eq]#i# of pname:pBuffers, pname:pOffsets and
+pname:pSizes replace the current state for the transform feedback binding
+[eq]#pname:firstBinding {plus} i#, for [eq]#i# in [eq]#[0,
+pname:bindingCount)#.
+The transform feedback binding is updated to start at the offset indicated
+by pname:pOffsets[i] from the start of the buffer pname:pBuffers[i].
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-transformFeedback-02355]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
+    must: be enabled
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02356]]
+    pname:firstBinding must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02357]]
+    The sum of pname:firstBinding and pname:bindingCount must: be less than
+    or equal to
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02358]]
+    All elements of pname:pOffsets must: be less than the size of the
+    corresponding element in pname:pBuffers
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02359]]
+    All elements of pname:pOffsets must: be a multiple of 4
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02360]]
+    All elements of pname:pBuffers must: have been created with the
+    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT flag
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pSize-02361]]
+    If the optional pname:pSize array is specified, each element of
+    pname:pSizes must: either be ename:VK_WHOLE_SIZE, or be less than or
+    equal to
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferSize
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pSizes-02362]]
+    All elements of pname:pSizes must: be either ename:VK_WHOLE_SIZE, or
+    less than or equal to the size of the corresponding buffer in
+    pname:pBuffers
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02363]]
+    All elements of pname:pOffsets plus pname:pSizes, where the
+    pname:pSizes, element is not ename:VK_WHOLE_SIZE, must: be less than or
+    equal to the size of the corresponding buffer in pname:pBuffers
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02364]]
+    Each element of pname:pBuffers that is non-sparse must: be bound
+    completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdBindTransformFeedbackBuffersEXT-None-02365]]
+    Transform feedback must: not be active when the
+    fname:vkCmdBindTransformFeedbackBuffersEXT command is recorded
+****
+
+include::{generated}/validity/protos/vkCmdBindTransformFeedbackBuffersEXT.adoc[]
+--
+
+[open,refpage='vkCmdBeginTransformFeedbackEXT',desc='Make transform feedback active in the command buffer',type='protos']
+--
+Transform feedback for specific transform feedback buffers is made active by
+calling:
+
+include::{generated}/api/protos/vkCmdBeginTransformFeedbackEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:firstCounterBuffer is the index of the first transform feedback
+    buffer corresponding to pname:pCounterBuffers[0] and
+    pname:pCounterBufferOffsets[0].
+  * pname:counterBufferCount is the size of the pname:pCounterBuffers and
+    pname:pCounterBufferOffsets arrays.
+  * pname:pCounterBuffers is `NULL` or a pointer to an array of
+    slink:VkBuffer handles to counter buffers.
+    Each buffer contains a 4 byte integer value representing the byte offset
+    from the start of the corresponding transform feedback buffer from where
+    to start capturing vertex data.
+    If the byte offset stored to the counter buffer location was done using
+    flink:vkCmdEndTransformFeedbackEXT it can be used to resume transform
+    feedback from the previous location.
+    If pname:pCounterBuffers is `NULL`, then transform feedback will start
+    capturing vertex data to byte offset zero in all bound transform
+    feedback buffers.
+    For each element of pname:pCounterBuffers that is dlink:VK_NULL_HANDLE,
+    transform feedback will start capturing vertex data to byte zero in the
+    corresponding bound transform feedback buffer.
+  * pname:pCounterBufferOffsets is `NULL` or a pointer to an array of
+    basetype:VkDeviceSize values specifying offsets within each of the
+    pname:pCounterBuffers where the counter values were previously written.
+    The location in each counter buffer at these offsets must: be large
+    enough to contain 4 bytes of data.
+    This data is the number of bytes captured by the previous transform
+    feedback to this buffer.
+    If pname:pCounterBufferOffsets is `NULL`, then it is assumed the offsets
+    are zero.
+
+The active transform feedback buffers will capture primitives emitted from
+the corresponding code:XfbBuffer in the bound graphics pipeline.
+Any code:XfbBuffer emitted that does not output to an active transform
+feedback buffer will not be captured.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-transformFeedback-02366]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
+    must: be enabled
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-02367]]
+    Transform feedback must: not be active
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02368]]
+    pname:firstCounterBuffer must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02369]]
+    The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
+    be less than or equal to
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607]]
+    If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
+    `NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
+    pname:counterBufferCount sname:VkBuffer handles that are either valid or
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370]]
+    For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
+    it must: reference a buffer large enough to hold 4 bytes at the
+    corresponding offset from the pname:pCounterBufferOffsets array
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffer-02371]]
+    If pname:pCounterBuffer is `NULL`, then pname:pCounterBufferOffsets
+    must: also be `NULL`
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffers-02372]]
+    For each buffer handle in the pname:pCounterBuffers array that is not
+    dlink:VK_NULL_HANDLE it must: have been created with a pname:usage value
+    containing
+    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-06233]]
+    A valid graphics pipeline must: be bound to
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-04128]]
+    The last
+    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>> of the bound graphics pipeline must: have been declared with the
+    code:Xfb execution mode
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdBeginTransformFeedbackEXT-None-02373]]
+    Transform feedback must: not be made active in a render pass instance
+    with multiview enabled
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginTransformFeedbackEXT.adoc[]
+--
+
+[open,refpage='vkCmdEndTransformFeedbackEXT',desc='Make transform feedback inactive in the command buffer',type='protos']
+--
+Transform feedback for specific transform feedback buffers is made inactive
+by calling:
+
+include::{generated}/api/protos/vkCmdEndTransformFeedbackEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:firstCounterBuffer is the index of the first transform feedback
+    buffer corresponding to pname:pCounterBuffers[0] and
+    pname:pCounterBufferOffsets[0].
+  * pname:counterBufferCount is the size of the pname:pCounterBuffers and
+    pname:pCounterBufferOffsets arrays.
+  * pname:pCounterBuffers is `NULL` or a pointer to an array of
+    slink:VkBuffer handles to counter buffers.
+    The counter buffers are used to record the current byte positions of
+    each transform feedback buffer where the next vertex output data would
+    be captured.
+    This can: be used by a subsequent flink:vkCmdBeginTransformFeedbackEXT
+    call to resume transform feedback capture from this position.
+    It can also be used by flink:vkCmdDrawIndirectByteCountEXT to determine
+    the vertex count of the draw call.
+  * pname:pCounterBufferOffsets is `NULL` or a pointer to an array of
+    basetype:VkDeviceSize values specifying offsets within each of the
+    pname:pCounterBuffers where the counter values can be written.
+    The location in each counter buffer at these offsets must: be large
+    enough to contain 4 bytes of data.
+    The data stored at this location is the byte offset from the start of
+    the transform feedback buffer binding where the next vertex data would
+    be written.
+    If pname:pCounterBufferOffsets is `NULL`, then it is assumed the offsets
+    are zero.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndTransformFeedbackEXT-transformFeedback-02374]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
+    must: be enabled
+  * [[VUID-vkCmdEndTransformFeedbackEXT-None-02375]]
+    Transform feedback must: be active
+  * [[VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02376]]
+    pname:firstCounterBuffer must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02377]]
+    The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
+    be less than or equal to
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
+  * [[VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608]]
+    If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
+    `NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
+    pname:counterBufferCount sname:VkBuffer handles that are either valid or
+    dlink:VK_NULL_HANDLE
+  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378]]
+    For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
+    it must: reference a buffer large enough to hold 4 bytes at the
+    corresponding offset from the pname:pCounterBufferOffsets array
+  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffer-02379]]
+    If pname:pCounterBuffer is `NULL`, then pname:pCounterBufferOffsets
+    must: also be `NULL`
+  * [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffers-02380]]
+    For each buffer handle in the pname:pCounterBuffers array that is not
+    dlink:VK_NULL_HANDLE it must: have been created with a pname:usage value
+    containing
+    ename:VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
+****
+
+include::{generated}/validity/protos/vkCmdEndTransformFeedbackEXT.adoc[]
+--
+endif::VK_EXT_transform_feedback[]
+
+
+ifdef::VK_NV_viewport_swizzle[]
+[[vertexpostproc-viewport-swizzle]]
+== Viewport Swizzle
+
+[open,refpage='VkPipelineViewportSwizzleStateCreateInfoNV',desc='Structure specifying swizzle applied to primitive clip coordinates',type='structs']
+--
+Each primitive sent to a given viewport has a swizzle and optional: negation
+applied to its clip coordinates.
+The swizzle that is applied depends on the viewport index, and is controlled
+by the sname:VkPipelineViewportSwizzleStateCreateInfoNV pipeline state:
+
+include::{generated}/api/structs/VkPipelineViewportSwizzleStateCreateInfoNV.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:viewportCount is the number of viewport swizzles used by the
+    pipeline.
+  * pname:pViewportSwizzles is a pointer to an array of
+    slink:VkViewportSwizzleNV structures, defining the viewport swizzles.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215]]
+    pname:viewportCount must: be greater than or equal to the
+    pname:viewportCount set in sname:VkPipelineViewportStateCreateInfo
+****
+
+include::{generated}/validity/structs/VkPipelineViewportSwizzleStateCreateInfoNV.adoc[]
+--
+
+[open,refpage='VkPipelineViewportSwizzleStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineViewportSwizzleStateCreateFlagsNV.adoc[]
+
+tname:VkPipelineViewportSwizzleStateCreateFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+The sname:VkPipelineViewportSwizzleStateCreateInfoNV state is set by adding
+this structure to the pname:pNext chain of a
+sname:VkPipelineViewportStateCreateInfo structure and setting the graphics
+pipeline state with flink:vkCreateGraphicsPipelines.
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetViewportSwizzleNV',desc='Specify the viewport swizzle state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the viewport swizzle state,
+call:
+
+include::{generated}/api/protos/vkCmdSetViewportSwizzleNV.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstViewport is the index of the first viewport whose parameters
+    are updated by the command.
+  * pname:viewportCount is the number of viewports whose parameters are
+    updated by the command.
+  * pname:pViewportSwizzles is a pointer to an array of
+    slink:VkViewportSwizzleNV structures specifying viewport swizzles.
+
+This command sets the viewport swizzle state for subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount, and
+slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:pViewportSwizzles
+values used to create the currently active pipeline.
+
+:refpage: vkCmdSetViewportSwizzleNV
+:requiredfeature: extendedDynamicState3ViewportSwizzle
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportSwizzleNV.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+Each viewport specified from 0 to pname:viewportCount - 1 has its x,y,z,w
+swizzle state set to the corresponding pname:x, pname:y, pname:z and pname:w
+in the slink:VkViewportSwizzleNV structure.
+Each component is of type elink:VkViewportCoordinateSwizzleNV, which
+determines the type of swizzle for that component.
+The value of pname:x computes the new x component of the position as:
+
+[source,c]
+----
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV) x' = x;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV) x' = -x;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV) x' = y;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV) x' = -y;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV) x' = z;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV) x' = -z;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV) x' = w;
+if (x == VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV) x' = -w;
+----
+
+Similar selections are performed for the pname:y, pname:z, and pname:w
+coordinates.
+This swizzling is applied before clipping and perspective divide.
+If the swizzle for an active viewport index is not specified, the swizzle
+for pname:x is ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, pname:y
+is ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, pname:z is
+ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV and pname:w is
+ename:VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV.
+
+Viewport swizzle parameters are specified by setting the pname:pNext pointer
+of sname:VkGraphicsPipelineCreateInfo to point to a
+sname:VkPipelineViewportSwizzleStateCreateInfoNV structure.
+slink:VkPipelineViewportSwizzleStateCreateInfoNV uses
+sname:VkViewportSwizzleNV to set the viewport swizzle parameters.
+
+[open,refpage='VkViewportSwizzleNV',desc='Structure specifying a viewport swizzle',type='structs']
+--
+The sname:VkViewportSwizzleNV structure is defined as:
+
+include::{generated}/api/structs/VkViewportSwizzleNV.adoc[]
+
+  * pname:x is a elink:VkViewportCoordinateSwizzleNV value specifying the
+    swizzle operation to apply to the x component of the primitive
+  * pname:y is a elink:VkViewportCoordinateSwizzleNV value specifying the
+    swizzle operation to apply to the y component of the primitive
+  * pname:z is a elink:VkViewportCoordinateSwizzleNV value specifying the
+    swizzle operation to apply to the z component of the primitive
+  * pname:w is a elink:VkViewportCoordinateSwizzleNV value specifying the
+    swizzle operation to apply to the w component of the primitive
+
+include::{generated}/validity/structs/VkViewportSwizzleNV.adoc[]
+--
+
+[open,refpage='VkViewportCoordinateSwizzleNV',desc='Specify how a viewport coordinate is swizzled',type='enums']
+--
+Possible values of the slink:VkViewportSwizzleNV::pname:x, pname:y, pname:z,
+and pname:w members, specifying swizzling of the corresponding components of
+primitives, are:
+
+include::{generated}/api/enums/VkViewportCoordinateSwizzleNV.adoc[]
+
+These values are described in detail in <<vertexpostproc-viewport-swizzle,
+Viewport Swizzle>>.
+--
+endif::VK_NV_viewport_swizzle[]
+
+
+[[vertexpostproc-flatshading]]
+== Flat Shading
+
+_Flat shading_ a vertex output attribute means to assign all vertices of the
+primitive the same value for that output.
+The output values assigned are those of the _provoking vertex_ of the
+primitive.
+Flat shading is applied to those vertex attributes that
+<<interfaces-iointerfaces-matching,match>> fragment input attributes which
+are decorated as code:Flat.
+
+If neither
+ifdef::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+<<mesh, mesh>>,
+endif::VK_EXT_mesh_shader,VK_NV_mesh_shader[]
+<<geometry,geometry>> nor <<tessellation,tessellation shading>> is active,
+the provoking vertex is determined by the <<drawing-primitive-topologies,
+primitive topology>> defined by
+slink:VkPipelineInputAssemblyStateCreateInfo:pname:topology used to execute
+the <<drawing,drawing command>>.
+
+ifdef::VK_NV_mesh_shader[]
+If a shader using code:MeshNV {ExecutionModel} is active, the provoking
+vertex is determined by the <<drawing-primitive-topologies, primitive
+topology>> defined by the <<drawing-point-lists, code:OutputPoints>>,
+<<drawing-line-lists, code:OutputLinesNV>>, or <<drawing-triangle-lists,
+code:OutputTrianglesNV>> execution mode.
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_EXT_mesh_shader[]
+If a shader using code:MeshEXT {ExecutionModel} is active, the provoking
+vertex is determined by the <<drawing-primitive-topologies, primitive
+topology>> defined by the <<drawing-point-lists, code:OutputPoints>>,
+<<drawing-line-lists, code:OutputLinesEXT>>, or <<drawing-triangle-lists,
+code:OutputTrianglesEXT>> execution mode.
+endif::VK_EXT_mesh_shader[]
+
+If <<geometry,geometry shading>> is active, the provoking vertex is
+determined by the <<drawing-primitive-topologies, primitive topology>>
+defined by the <<drawing-point-lists, code:OutputPoints>>,
+<<drawing-line-strips, code:OutputLineStrips>>, or
+<<drawing-triangle-strips, code:OutputTriangleStrips>> execution mode.
+
+If <<tessellation,tessellation shading>> is active but <<geometry,geometry
+shading>> is not, the provoking vertex may: be any of the vertices in each
+primitive.
+
+ifdef::VK_EXT_provoking_vertex[]
+[open,refpage='VkPipelineRasterizationProvokingVertexStateCreateInfoEXT',desc='Structure specifying provoking vertex mode used by a graphics pipeline',type='structs']
+--
+For a given primitive topology, the pipeline's provoking vertex mode
+determines which vertex is the provoking vertex.
+To specify the provoking vertex mode, include a
+sname:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT structure in
+the slink:VkPipelineRasterizationStateCreateInfo::pname:pNext chain when
+creating the pipeline.
+
+The sname:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:provokingVertexMode is a elink:VkProvokingVertexModeEXT value
+    selecting the provoking vertex mode.
+
+If this struct is not provided when creating the pipeline, the pipeline will
+use the ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT mode.
+
+If the <<limits-provokingVertexModePerPipeline,
+pname:provokingVertexModePerPipeline>> limit is ename:VK_FALSE, then all
+pipelines bound within a render pass instance must: have the same
+pname:provokingVertexMode.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRasterizationProvokingVertexStateCreateInfoEXT-provokingVertexMode-04883]]
+    If pname:provokingVertexMode is
+    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, then the
+    <<features-provokingVertexLast, pname:provokingVertexLast>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkProvokingVertexModeEXT',desc='Specify which vertex in a primitive is the provoking vertex',type='enums']
+--
+Possible values of
+slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
+are:
+
+include::{generated}/api/enums/VkProvokingVertexModeEXT.adoc[]
+
+  * ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT specifies that the
+    provoking vertex is the first non-adjacency vertex in the list of
+    vertices used by a primitive.
+  * ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT specifies that the
+    provoking vertex is the last non-adjacency vertex in the list of
+    vertices used by a primitive.
+
+These modes are described more precisely in
+<<drawing-primitive-topologies,Primitive Topologies>>.
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetProvokingVertexModeEXT',desc='Specify the provoking vertex mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the
+pname:provokingVertexMode state, call:
+
+include::{generated}/api/protos/vkCmdSetProvokingVertexModeEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:provokingVertexMode specifies the pname:provokingVertexMode state.
+
+This command sets the pname:provokingVertexMode state for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::pname:provokingVertexMode
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetProvokingVertexModeEXT
+:requiredfeature: extendedDynamicState3ProvokingVertexMode
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetProvokingVertexModeEXT-provokingVertexMode-07447]]
+    If pname:provokingVertexMode is
+    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, then the
+    <<features-provokingVertexLast, pname:provokingVertexLast>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetProvokingVertexModeEXT.adoc[]
+--
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+endif::VK_EXT_provoking_vertex[]
+
+
+[[vertexpostproc-clipping]]
+== Primitive Clipping
+
+Primitives are culled against the _cull volume_ and then clipped to the
+_clip volume_.
+In clip coordinates, the _view volume_ is defined by:
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\begin{array}{c}
+-w_c \leq x_c \leq w_c \\
+-w_c \leq y_c \leq w_c \\
+z_m \leq z_c \leq w_c
+\end{array}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where
+ifdef::VK_EXT_depth_clip_control[]
+if
+slink:VkPipelineViewportDepthClipControlCreateInfoEXT::pname:negativeOneToOne
+is ename:VK_TRUE [eq]#z~m~# is equal to [eq]#-w~c~# otherwise
+endif::VK_EXT_depth_clip_control[]
+[eq]#z~m~# is equal to zero.
+
+This view volume can: be further restricted by as many as
+sname:VkPhysicalDeviceLimits::pname:maxClipDistances client-defined
+half-spaces.
+
+The cull volume is the intersection of up to
+sname:VkPhysicalDeviceLimits::pname:maxCullDistances client-defined
+half-spaces (if no client-defined cull half-spaces are enabled, culling
+against the cull volume is skipped).
+
+A shader must: write a single cull distance for each enabled cull half-space
+to elements of the code:CullDistance array.
+If the cull distance for any enabled cull half-space is negative for all of
+the vertices of the primitive under consideration, the primitive is
+discarded.
+Otherwise the primitive is clipped against the clip volume as defined below.
+
+The clip volume is the intersection of up to
+sname:VkPhysicalDeviceLimits::pname:maxClipDistances client-defined
+half-spaces with the view volume (if no client-defined clip half-spaces are
+enabled, the clip volume is the view volume).
+
+A shader must: write a single clip distance for each enabled clip half-space
+to elements of the code:ClipDistance array.
+Clip half-space [eq]#i# is then given by the set of points satisfying the
+inequality
+
+  {empty}:: [eq]#c~i~(**P**) {geq} 0#
+
+where [eq]#c~i~(**P**)# is the clip distance [eq]#i# at point [eq]#**P**#.
+For point primitives, [eq]#c~i~(**P**)# is simply the clip distance for the
+vertex in question.
+For line and triangle primitives, per-vertex clip distances are interpolated
+using a weighted mean, with weights derived according to the algorithms
+described in sections <<primsrast-lines-basic,Basic Line Segment
+Rasterization>> and <<primsrast-polygons-basic,Basic Polygon
+Rasterization>>, using the perspective interpolation equations.
+
+The number of client-defined clip and cull half-spaces that are enabled is
+determined by the explicit size of the built-in arrays code:ClipDistance and
+code:CullDistance, respectively, declared as an output in the interface of
+the entry point of the final shader stage before clipping.
+
+ifdef::VK_EXT_depth_clip_enable[]
+If slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT is present in
+the graphics pipeline state then depth clipping is disabled if
+slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT::pname:depthClipEnable
+is ename:VK_FALSE.
+Otherwise, if slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT is
+not present, depth clipping is disabled when
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is
+ename:VK_TRUE.
+endif::VK_EXT_depth_clip_enable[]
+ifndef::VK_EXT_depth_clip_enable[]
+Depth clamping is enabled or disabled via the pname:depthClampEnable enable
+of the slink:VkPipelineRasterizationStateCreateInfo structure.
+Depth clipping is disabled when pname:depthClampEnable is ename:VK_TRUE.
+endif::VK_EXT_depth_clip_enable[]
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+[open,refpage='vkCmdSetDepthClampEnableEXT',desc='Specify dynamically whether depth clamping is enabled in the command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> enable or disable depth
+clamping, call:
+
+include::{generated}/api/protos/vkCmdSetDepthClampEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthClampEnable specifies whether depth clamping is enabled.
+
+This command sets whether depth clamping is enabled or disabled for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable value
+used to create the currently active pipeline.
+
+If the depth clamping state is changed dynamically, and the pipeline was not
+created with ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT enabled, then
+depth clipping is enabled when depth clamping is disabled and vice versa.
+
+:refpage: vkCmdSetDepthClampEnableEXT
+:requiredfeature: extendedDynamicState3DepthClampEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetDepthClampEnableEXT-depthClamp-07449]]
+    If the <<features-depthClamp, pname:depthClamp>> feature is not enabled,
+    pname:depthClampEnable must be ename:VK_FALSE
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthClampEnableEXT.adoc[]
+--
+
+ifdef::VK_EXT_depth_clip_enable[]
+[open,refpage='vkCmdSetDepthClipEnableEXT',desc='Specify dynamically whether depth clipping is enabled in the command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> enable or disable depth
+clipping, call:
+
+include::{generated}/api/protos/vkCmdSetDepthClipEnableEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthClipEnable specifies whether depth clipping is enabled.
+
+This command sets whether depth clipping is enabled or disabled for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationDepthClipStateCreateInfoEXT::pname:depthClipEnable
+value used to create the currently active pipeline, or is set to the inverse
+of slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable if
+sname:VkPipelineRasterizationDepthClipStateCreateInfoEXT is not specified.
+
+:refpage: vkCmdSetDepthClipEnableEXT
+:requiredfeature: extendedDynamicState3DepthClipEnable
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetDepthClipEnableEXT-depthClipEnable-07451]]
+    The <<features-depthClipEnable, pname:depthClipEnable>> feature must: be
+    enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthClipEnableEXT.adoc[]
+--
+endif::VK_EXT_depth_clip_enable[]
+
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+
+When depth clipping is disabled, the plane equation
+
+  {empty}:: [eq]#z~m~ {leq} z~c~ {leq} w~c~#
+
+(see the clip volume definition above) is ignored by view volume clipping
+(effectively, there is no near or far plane clipping).
+
+If the primitive under consideration is a point or line segment, then
+clipping passes it unchanged if its vertices lie entirely within the clip
+volume.
+
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+If a point's vertex lies outside of the clip volume, the entire primitive
+may: be discarded.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+[open,refpage='VkPointClippingBehavior',desc='Enum specifying the point clipping behavior',type='enums']
+--
+Possible values of
+slink:VkPhysicalDevicePointClippingProperties::pname:pointClippingBehavior,
+specifying clipping behavior of a point primitive whose vertex lies outside
+the clip volume, are:
+
+include::{generated}/api/enums/VkPointClippingBehavior.adoc[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/enums/VkPointClippingBehaviorKHR.adoc[]
+endif::VK_KHR_maintenance2[]
+
+  * ename:VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES specifies that the
+    primitive is discarded if the vertex lies outside any clip plane,
+    including the planes bounding the view volume.
+  * ename:VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY specifies that
+    the primitive is discarded only if the vertex lies outside any user clip
+    plane.
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+If either of a line segment's vertices lie outside of the clip volume, the
+line segment may: be clipped, with new vertex coordinates computed for each
+vertex that lies outside the clip volume.
+A clipped line segment endpoint lies on both the original line segment and
+the boundary of the clip volume.
+
+This clipping produces a value, [eq]#0 {leq} t {leq} 1#, for each clipped
+vertex.
+If the coordinates of a clipped vertex are [eq]#**P**# and the unclipped
+line segment's vertex coordinates are [eq]#**P**~1~# and [eq]#**P**~2~#,
+then [eq]#t# satisfies the following equation
+
+  {empty}:: [eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#.
+
+[eq]#t# is used to clip vertex output attributes as described in
+<<vertexpostproc-clipping-shader-outputs,Clipping Shader Outputs>>.
+
+If the primitive is a polygon, it passes unchanged if every one of its edges
+lies entirely inside the clip volume, and is either clipped or discarded
+otherwise.
+If the edges of the polygon intersect the boundary of the clip volume, the
+intersecting edges are reconnected by new edges that lie along the boundary
+of the clip volume - in some cases requiring the introduction of new
+vertices into a polygon.
+
+If a polygon intersects an edge of the clip volume's boundary, the clipped
+polygon must: include a point on this boundary edge.
+
+Primitives rendered with user-defined half-spaces must: satisfy a
+complementarity criterion.
+Suppose a series of primitives is drawn where each vertex [eq]#i# has a
+single specified clip distance [eq]#d~i~# (or a number of similarly
+specified clip distances, if multiple half-spaces are enabled).
+Next, suppose that the same series of primitives are drawn again with each
+such clip distance replaced by [eq]#-d~i~# (and the graphics pipeline is
+otherwise the same).
+In this case, primitives must: not be missing any pixels, and pixels must:
+not be drawn twice in regions where those primitives are cut by the clip
+planes.
+
+ifdef::VK_EXT_depth_clip_control[]
+[open,refpage='VkPipelineViewportDepthClipControlCreateInfoEXT',desc='Structure specifying parameters of a newly created pipeline depth clip control state',type='structs']
+--
+The sname:VkPipelineViewportDepthClipControlCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportDepthClipControlCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:negativeOneToOne sets the [eq]#z~m~# in the _view volume_ to
+    [eq]#-w~c~#
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportDepthClipControlCreateInfoEXT-negativeOneToOne-06470]]
+    If <<features-depthClipControl, pname:depthClipControl>> is not enabled,
+    pname:negativeOneToOne must: be ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkPipelineViewportDepthClipControlCreateInfoEXT.adoc[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetDepthClipNegativeOneToOneEXT',desc='Specify the negative one to one depth clip mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> pname:negativeOneToOne,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthClipNegativeOneToOneEXT.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:negativeOneToOne specifies the pname:negativeOneToOne state.
+
+This command sets the pname:negativeOneToOne state for subsequent drawing
+commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_EXT_extended_dynamic_state3[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_EXT_extended_dynamic_state3[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_EXT_extended_dynamic_state3[]
+Otherwise, this state is specified by the
+slink:VkPipelineViewportDepthClipControlCreateInfoEXT::pname:negativeOneToOne
+value used to create the currently active pipeline.
+
+:refpage: vkCmdSetDepthClipNegativeOneToOneEXT
+:requiredfeature: extendedDynamicState3DepthClipNegativeOneToOne
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state3_feature_common.adoc[]
+  * [[VUID-vkCmdSetDepthClipNegativeOneToOneEXT-depthClipControl-07453]]
+    The <<features-depthClipControl, pname:depthClipControl>> feature must:
+    be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthClipNegativeOneToOneEXT.adoc[]
+--
+endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
+endif::VK_EXT_depth_clip_control[]
+
+
+[[vertexpostproc-clipping-shader-outputs]]
+== Clipping Shader Outputs
+
+Next, vertex output attributes are clipped.
+The output values associated with a vertex that lies within the clip volume
+are unaffected by clipping.
+If a primitive is clipped, however, the output values assigned to vertices
+produced by clipping are clipped.
+
+Let the output values assigned to the two vertices [eq]#**P**~1~# and
+[eq]#**P**~2~# of an unclipped edge be [eq]#**c**~1~# and [eq]#**c**~2~#.
+The value of [eq]#t# (see <<vertexpostproc-clipping,Primitive Clipping>>)
+for a clipped point [eq]#**P**# is used to obtain the output value
+associated with [eq]#**P**# as
+
+  {empty}:: [eq]#**c** = t **c**~1~ {plus} (1-t) **c**~2~#.
+
+(Multiplying an output value by a scalar means multiplying each of _x_, _y_,
+_z_, and _w_ by the scalar.)
+
+Since this computation is performed in clip space before division by
+[eq]#w~c~#, clipped output values are perspective-correct.
+
+Polygon clipping creates a clipped vertex along an edge of the clip volume's
+boundary.
+This situation is handled by noting that polygon clipping proceeds by
+clipping against one half-space at a time.
+Output value clipping is done in the same way, so that clipped points always
+occur at the intersection of polygon edges (possibly already clipped) with
+the clip volume's boundary.
+
+For vertex output attributes whose matching fragment input attributes are
+decorated with code:NoPerspective, the value of [eq]#t# used to obtain the
+output value associated with [eq]#**P**# will be adjusted to produce results
+that vary linearly in framebuffer space.
+
+Output attributes of integer or unsigned integer type must: always be flat
+shaded.
+Flat shaded attributes are constant over the primitive being rasterized (see
+<<primsrast-lines-basic,Basic Line Segment Rasterization>> and
+<<primsrast-polygons-basic,Basic Polygon Rasterization>>), and no
+interpolation is performed.
+The output value [eq]#**c**# is taken from either [eq]#**c**~1~# or
+[eq]#**c**~2~#, since flat shading has already occurred and the two values
+are identical.
+
+ifdef::VK_NV_clip_space_w_scaling[]
+include::{chapters}/VK_NV_clip_space_w_scaling/vertexpostproc.adoc[]
+endif::VK_NV_clip_space_w_scaling[]
+
+
+[[vertexpostproc-coord-transform]]
+== Coordinate Transformations
+
+_Clip coordinates_ for a vertex result from shader execution, which yields a
+vertex coordinate code:Position.
+
+Perspective division on clip coordinates yields _normalized device
+coordinates_, followed by a _viewport_ transformation (see
+<<vertexpostproc-viewport,Controlling the Viewport>>) to convert these
+coordinates into _framebuffer coordinates_.
+
+If a vertex in clip coordinates has a position given by
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(\begin{array}{c}
+x_c \\
+y_c \\
+z_c \\
+w_c
+\end{array}\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+then the vertex's normalized device coordinates are
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(
+        \begin{array}{c}
+                x_d \\
+                y_d \\
+                z_d
+        \end{array}
+\right) =
+\left(
+        \begin{array}{c}
+                \frac{x_c}{w_c} \\
+                \frac{y_c}{w_c} \\
+                \frac{z_c}{w_c}
+        \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+ifdef::VK_QCOM_render_pass_transform[]
+[[vertexpostproc-renderpass-transform]]
+== Render Pass Transform
+
+A _render pass transform_ can: be enabled for render pass instances.
+The clip coordinates [eq]#(x~c~, y~c~)# that result from vertex shader
+execution are transformed by a rotation of 0, 90, 180, or 270 degrees in the
+XY plane, centered at the origin.
+
+When _Render pass transform_ is enabled, the transform applies to all
+primitives for all subpasses of the render pass.
+The transformed vertex in clip coordinates has a position given by
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(
+        \begin{array}{c}
+                x_{c_{trans}} \\
+                y_{c_{trans}} \\
+                z_{c_{trans}}
+        \end{array}
+\right) =
+\left(
+        \begin{array}{c}
+                x_{c} \cos \theta - y_{c} \sin \theta \\
+                x_{c} \sin \theta + y_{c} \cos \theta \\
+                z_c
+        \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+where
+
+  * _[eq]#{theta}#_ is 0 degrees for
+    ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
+  * _[eq]#{theta}#_ is 90 degrees for
+    ename:VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
+  * _[eq]#{theta}#_ is 180 degrees for
+    ename:VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
+  * _[eq]#{theta}#_ is 270 degrees for
+    ename:VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+
+
+The transformed vertex's normalized device coordinates are
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(
+        \begin{array}{c}
+                x_d \\
+                y_d \\
+                z_d
+        \end{array}
+\right) =
+\left(
+        \begin{array}{c}
+                \frac{x_{c_{trans}}}{w_c} \\
+                \frac{y_{c_{trans}}}{w_c} \\
+                \frac{z_{c_{trans}}}{w_c}
+        \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+When render pass transform is enabled for a render pass instance, the
+following additional features are enabled:
+
+  * Each slink:VkViewport specified by either
+    slink:VkPipelineViewportStateCreateInfo::pname:pViewports or
+    flink:vkCmdSetViewport will have its width/height [eq]#(p~x~, p~y~)# and
+    its center [eq]#(o~x~, o~y~)# similarly transformed by the
+    implementation.
+  * Each scissor specified by
+    slink:VkPipelineViewportStateCreateInfo::pname:pScissors or
+    flink:vkCmdSetScissor will have its [eq]#(offset~x~, offset~y~)# and
+    [eq]#(extent~x~, extent~y~)# similarly transformed by the
+    implementation.
+  * The pname:renderArea specified in
+    slink:VkCommandBufferInheritanceRenderPassTransformInfoQCOM and
+    slink:VkRenderPassBeginInfo will be similarly transformed by the
+    implementation.
+  * The [eq]#(x, y)# components of shader variables with built-in
+    decorations code:FragCoord, code:SamplePosition, or code:PointCoord will
+    be similarly transformed by the implementation.
+  * The [eq]#(x,y)# components of the code:offset operand of the
+    code:InterpolateAtOffset extended instruction will be similarly
+    transformed by the implementation.
+  * The values returned by SPIR-V <<shaders-derivative-operations,
+    derivative instructions>> code:OpDPdx, code:OpDPdy, code:OpDPdxCourse,
+    code:OpDPdyCourse, code:OpDPdxFine, code:OpDPdyFine will be similarly
+    transformed by the implementation.
+
+
+The net result of the above, is that applications can: act as if rendering
+to a framebuffer oriented with the
+slink:VkSurfaceCapabilitiesKHR::pname:currentTransform.
+In other words, applications can: act as if the presentation engine will be
+performing the transformation of the swapchain image after rendering and
+prior to presentation to the user.
+In fact, the transformation of the various items cited above are being
+handled by the implementation as the rendering takes place.
+
+endif::VK_QCOM_render_pass_transform[]
+
+
+[[vertexpostproc-viewport]]
+== Controlling the Viewport
+
+The viewport transformation is determined by the selected viewport's width
+and height in pixels, [eq]#p~x~# and [eq]#p~y~#, respectively, and its
+center [eq]#(o~x~, o~y~)# (also in pixels), as well as its depth range min
+and max determining a depth range scale value [eq]#p~z~# and a depth range
+bias value [eq]#o~z~# (defined below).
+The vertex's framebuffer coordinates [eq]#(x~f~, y~f~, z~f~)# are given by
+
+  {empty}:: [eq]#x~f~ = (p~x~ / 2) x~d~ {plus} o~x~#
+  {empty}:: [eq]#y~f~ = (p~y~ / 2) y~d~ {plus} o~y~#
+  {empty}:: [eq]#z~f~ = p~z~ {times} z~d~ {plus} o~z~#
+
+Multiple viewports are available, numbered zero up to
+sname:VkPhysicalDeviceLimits::pname:maxViewports minus one.
+The number of viewports used by a pipeline is controlled by the
+pname:viewportCount member of the sname:VkPipelineViewportStateCreateInfo
+structure used in pipeline creation.
+
+[eq]#x~f~# and [eq]#y~f~# have limited precision, where the number of
+fractional bits retained is specified by
+sname:VkPhysicalDeviceLimits::pname:subPixelPrecisionBits.
+ifdef::VK_EXT_line_rasterization[]
+When rasterizing <<primsrast-lines,line segments>>, the number of fractional
+bits is specified by
+sname:VkPhysicalDeviceLineRasterizationPropertiesEXT::pname:lineSubPixelPrecisionBits.
+endif::VK_EXT_line_rasterization[]
+
+[open,refpage='VkPipelineViewportStateCreateInfo',desc='Structure specifying parameters of a newly created pipeline viewport state',type='structs']
+--
+The sname:VkPipelineViewportStateCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkPipelineViewportStateCreateInfo.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:viewportCount is the number of viewports used by the pipeline.
+  * pname:pViewports is a pointer to an array of slink:VkViewport
+    structures, defining the viewport transforms.
+    If the viewport state is dynamic, this member is ignored.
+  * pname:scissorCount is the number of <<fragops-scissor,scissors>> and
+    must: match the number of viewports.
+  * pname:pScissors is a pointer to an array of slink:VkRect2D structures
+    defining the rectangular bounds of the scissor for the corresponding
+    viewport.
+    If the scissor state is dynamic, this member is ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:viewportCount must: not be greater than `1`
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:scissorCount must: not be greater than `1`
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218]]
+    pname:viewportCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewports
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219]]
+    pname:scissorCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewports
+  * [[VUID-VkPipelineViewportStateCreateInfo-x-02821]]
+    The pname:x and pname:y members of pname:offset member of any element of
+    pname:pScissors must: be greater than or equal to `0`
+  * [[VUID-VkPipelineViewportStateCreateInfo-offset-02822]]
+    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
+    cause a signed integer addition overflow for any element of
+    pname:pScissors
+  * [[VUID-VkPipelineViewportStateCreateInfo-offset-02823]]
+    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
+    not cause a signed integer addition overflow for any element of
+    pname:pScissors
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134]]
+    If pname:scissorCount and pname:viewportCount are both not dynamic, then
+    pname:scissorCount and pname:viewportCount must: be identical
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-arraylength]]
+    pname:viewportCount must: be greater than `0`
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-arraylength]]
+    pname:scissorCount must: be greater than `0`
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135]]
+    If the graphics pipeline is being created with
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT set then pname:viewportCount
+    must: be `0`, otherwise it must: be greater than `0`
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136]]
+    If the graphics pipeline is being created with
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT set then pname:scissorCount
+    must: be `0`, otherwise it must: be greater than `0`
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+ifdef::VK_NV_clip_space_w_scaling[]
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726]]
+    If the pname:viewportWScalingEnable member of a
+    slink:VkPipelineViewportWScalingStateCreateInfoNV structure included in
+    the pname:pNext chain is ename:VK_TRUE, the pname:viewportCount member
+    of the slink:VkPipelineViewportWScalingStateCreateInfoNV structure must:
+    be greater than or equal to
+    slink:VkPipelineViewportStateCreateInfo::pname:viewportCount
+endif::VK_NV_clip_space_w_scaling[]
+****
+
+include::{generated}/validity/structs/VkPipelineViewportStateCreateInfo.adoc[]
+--
+
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+[open,refpage='vkCmdSetViewportWithCount',desc='Set the viewport count and viewports dynamically for a command buffer',type='protos',alias='vkCmdSetViewportWithCountEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the viewport count and
+viewports, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetViewportWithCount.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetViewportWithCountEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:viewportCount specifies the viewport count.
+  * pname:pViewports specifies the viewports to use for drawing.
+
+This command sets the viewport count and viewports state for subsequent
+drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the corresponding
+slink:VkPipelineViewportStateCreateInfo::pname:viewportCount and
+pname:pViewports values used to create the currently active pipeline.
+
+:refpage: vkCmdSetViewportWithCount
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+  * [[VUID-vkCmdSetViewportWithCount-viewportCount-03394]]
+    pname:viewportCount must: be between `1` and
+    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetViewportWithCount-viewportCount-03395]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:viewportCount must: be `1`
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetViewportWithCount-commandBuffer-04819]]
+    pname:commandBuffer must: not have
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportWithCount.adoc[]
+--
+
+[open,refpage='vkCmdSetScissorWithCount',desc='Set the scissor count and scissor rectangular bounds dynamically for a command buffer',type='protos',alias='vkCmdSetScissorWithCountEXT']
+--
+To <<pipelines-dynamic-state, dynamically set>> the scissor count and
+scissor rectangular bounds, call:
+
+ifdef::VK_VERSION_1_3[]
+include::{generated}/api/protos/vkCmdSetScissorWithCount.adoc[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[or the equivalent command]
+endif::VK_VERSION_1_3[]
+
+ifdef::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+include::{generated}/api/protos/vkCmdSetScissorWithCountEXT.adoc[]
+endif::VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:scissorCount specifies the scissor count.
+  * pname:pScissors specifies the scissors to use for drawing.
+
+This command sets the scissor count and scissor rectangular bounds state for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>, or]
+ifndef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[when drawing using <<shaders-objects, shader objects>>.]
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
+Otherwise, this state is specified by the corresponding
+slink:VkPipelineViewportStateCreateInfo::pname:scissorCount and
+pname:pScissors values used to create the currently active pipeline.
+
+:refpage: vkCmdSetScissorWithCount
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/dynamic_state_feature_common.adoc[]
+  * [[VUID-vkCmdSetScissorWithCount-scissorCount-03397]]
+    pname:scissorCount must: be between `1` and
+    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetScissorWithCount-scissorCount-03398]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:scissorCount must: be `1`
+  * [[VUID-vkCmdSetScissorWithCount-x-03399]]
+    The pname:x and pname:y members of pname:offset member of any element of
+    pname:pScissors must: be greater than or equal to `0`
+  * [[VUID-vkCmdSetScissorWithCount-offset-03400]]
+    Evaluation of [eq]#(pname:offset.x {plus} pname:extent.width)# must: not
+    cause a signed integer addition overflow for any element of
+    pname:pScissors
+  * [[VUID-vkCmdSetScissorWithCount-offset-03401]]
+    Evaluation of [eq]#(pname:offset.y {plus} pname:extent.height)# must:
+    not cause a signed integer addition overflow for any element of
+    pname:pScissors
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetScissorWithCount-commandBuffer-04820]]
+    pname:commandBuffer must: not have
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetScissorWithCount.adoc[]
+--
+endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state,VK_EXT_shader_object[]
+
+[open,refpage='VkPipelineViewportStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineViewportStateCreateFlags.adoc[]
+
+tname:VkPipelineViewportStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+ifndef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+If a geometry shader is active and has an output variable decorated with
+code:ViewportIndex, the viewport transformation uses the viewport
+corresponding to the value assigned to code:ViewportIndex taken from an
+implementation-dependent vertex of each primitive.
+If code:ViewportIndex is outside the range zero to pname:viewportCount minus
+one for a primitive, or if the geometry shader did not assign a value to
+code:ViewportIndex for all vertices of a primitive due to flow control, the
+values resulting from the viewport transformation of the vertices of such
+primitives are undefined:.
+If no geometry shader is active, or if the geometry shader does not have an
+output decorated with code:ViewportIndex, the viewport numbered zero is used
+by the viewport transformation.
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+
+ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+ifdef::VK_NV_viewport_array2[]
+A _<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>_ can: direct each primitive to zero or more viewports.
+The destination viewports for a primitive are selected by the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> that has an output variable decorated with code:ViewportIndex
+(selecting a single viewport) or code:ViewportMaskNV (selecting multiple
+viewports).
+The viewport transform uses the viewport corresponding to either the value
+assigned to code:ViewportIndex or one of the bits set in
+code:ViewportMaskNV, and taken from an implementation-dependent vertex of
+each primitive.
+If code:ViewportIndex or any of the bits in code:ViewportMaskNV are outside
+the range zero to pname:viewportCount minus one for a primitive, or if the
+last active <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>> did not assign a value to either code:ViewportIndex or
+code:ViewportMaskNV for all vertices of a primitive due to flow control, the
+values resulting from the viewport transformation of the vertices of such
+primitives are undefined:.
+If the last <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>> does not have an output decorated with code:ViewportIndex or
+code:ViewportMaskNV, the viewport numbered zero is used by the viewport
+transformation.
+endif::VK_NV_viewport_array2[]
+ifndef::VK_NV_viewport_array2[]
+A _<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>_ can: direct each primitive to one of several viewports.
+The destination viewport for a primitive is selected by the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> that has an output variable decorated with code:ViewportIndex.
+The viewport transform uses the viewport corresponding to the value assigned
+to code:ViewportIndex, and taken from an implementation-dependent vertex of
+each primitive.
+If code:ViewportIndex is outside the range zero to pname:viewportCount minus
+one for a primitive, or if the last active
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> did not assign a value to code:ViewportIndex for all vertices of a
+primitive due to flow control, the values resulting from the viewport
+transformation of the vertices of such primitives are undefined:.
+If the last <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization
+shader stage>> does not have an output decorated with code:ViewportIndex,
+the viewport numbered zero is used by the viewport transformation.
+endif::VK_NV_viewport_array2[]
+endif::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer,VK_NV_viewport_array2[]
+
+A single vertex can: be used in more than one individual primitive, in
+primitives such as ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP.
+In this case, the viewport transformation is applied separately for each
+primitive.
+
+[open,refpage='vkCmdSetViewport',desc='Set the viewport dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the viewport transformation
+parameters, call:
+
+include::{generated}/api/protos/vkCmdSetViewport.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:firstViewport is the index of the first viewport whose parameters
+    are updated by the command.
+  * pname:viewportCount is the number of viewports whose parameters are
+    updated by the command.
+  * pname:pViewports is a pointer to an array of slink:VkViewport structures
+    specifying viewport parameters.
+
+This command sets the viewport transformation parameters state for
+subsequent drawing commands
+ifdef::VK_EXT_shader_object[when drawing using <<shaders-objects, shader objects>>, or]
+when the graphics pipeline is created with ename:VK_DYNAMIC_STATE_VIEWPORT
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+sname:VkPipelineViewportStateCreateInfo::pname:pViewports values used to
+create the currently active pipeline.
+
+The viewport parameters taken from element [eq]#i# of pname:pViewports
+replace the current state for the viewport index [eq]#pname:firstViewport
+{plus} i#, for [eq]#i# in [eq]#[0, pname:viewportCount)#.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetViewport-firstViewport-01223]]
+    The sum of pname:firstViewport and pname:viewportCount must: be between
+    `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetViewport-firstViewport-01224]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:firstViewport must: be `0`
+  * [[VUID-vkCmdSetViewport-viewportCount-01225]]
+    If the <<features-multiViewport, pname:multiViewport>> feature is not
+    enabled, pname:viewportCount must: be `1`
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetViewport-commandBuffer-04821]]
+    pname:commandBuffer must: not have
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetViewport.adoc[]
+--
+
+Both slink:VkPipelineViewportStateCreateInfo and flink:vkCmdSetViewport use
+sname:VkViewport to set the viewport transformation parameters.
+
+[open,refpage='VkViewport',desc='Structure specifying a viewport',type='structs']
+--
+The sname:VkViewport structure is defined as:
+
+include::{generated}/api/structs/VkViewport.adoc[]
+
+  * pname:x and pname:y are the viewport's upper left corner [eq]#(x,y)#.
+  * pname:width and pname:height are the viewport's width and height,
+    respectively.
+  * pname:minDepth and pname:maxDepth are the depth range for the viewport.
+
+[NOTE]
+.Note
+====
+Despite their names, pname:minDepth can: be less than, equal to, or greater
+than pname:maxDepth.
+====
+
+The framebuffer depth coordinate [eq]#pname:z~f~# may: be represented using
+either a fixed-point or floating-point representation.
+However, a floating-point representation must: be used if the depth/stencil
+attachment has a floating-point depth component.
+If an [eq]#m#-bit fixed-point representation is used, we assume that it
+represents each value latexmath:[\frac{k}{2^m - 1}], where [eq]#k {elem} {
+0, 1, ..., 2^m^-1 }#, as [eq]#k# (e.g. 1.0 is represented in binary as a
+string of all ones).
+
+The viewport parameters shown in the above equations are found from these
+values as
+
+  {empty}:: [eq]#o~x~ = pname:x {plus} pname:width / 2#
+  {empty}:: [eq]#o~y~ = pname:y {plus} pname:height / 2#
+  {empty}:: [eq]#o~z~ = pname:minDepth#
+ifdef::VK_EXT_depth_clip_control[]
+            (or [eq]#(pname:maxDepth + pname:minDepth) / 2# if
+            slink:VkPipelineViewportDepthClipControlCreateInfoEXT::pname:negativeOneToOne
+            is ename:VK_TRUE)
+endif::VK_EXT_depth_clip_control[]
+  {empty}:: [eq]#p~x~ = pname:width#
+  {empty}:: [eq]#p~y~ = pname:height#
+  {empty}:: [eq]#p~z~ = pname:maxDepth - pname:minDepth#
+ifdef::VK_EXT_depth_clip_control[]
+            (or [eq]#(pname:maxDepth - pname:minDepth) / 2# if
+            slink:VkPipelineViewportDepthClipControlCreateInfoEXT::pname:negativeOneToOne
+            is ename:VK_TRUE)
+endif::VK_EXT_depth_clip_control[]
+
+ifdef::VK_QCOM_render_pass_transform[]
+If a render pass transform is enabled, the values [eq]#(p~x~,p~y~)# and
+[eq]#(o~x~, o~y~)# defining the viewport are transformed as described in
+<<vertexpostproc-renderpass-transform, render pass transform>> before
+participating in the viewport transform.
+endif::VK_QCOM_render_pass_transform[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+The application can: specify a negative term for pname:height, which has the
+effect of negating the y coordinate in clip space before performing the
+transform.
+When using a negative pname:height, the application should: also adjust the
+pname:y value to point to the lower left corner of the viewport instead of
+the upper left corner.
+Using the negative pname:height allows the application to avoid having to
+negate the y component of the code:Position output from the last
+<<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+The width and height of the <<limits-maxViewportDimensions,
+implementation-dependent maximum viewport dimensions>> must: be greater than
+or equal to the width and height of the largest image which can: be created
+and attached to a framebuffer.
+
+The floating-point viewport bounds are represented with an
+<<limits-viewportSubPixelBits, implementation-dependent precision>>.
+
+.Valid Usage
+****
+  * [[VUID-VkViewport-width-01770]]
+    pname:width must: be greater than `0.0`
+  * [[VUID-VkViewport-width-01771]]
+    pname:width must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[0]
+ifndef::VKSC_VERSION_1_0[]
+  * [[VUID-VkViewport-apiVersion-07917]]
+    If the apiext:VK_KHR_maintenance1 extension is not enabled, the
+    apiext:VK_AMD_negative_viewport_height extension is not enabled, and
+    slink:VkPhysicalDeviceProperties::pname:apiVersion is less than Vulkan
+    1.1, pname:height must: be greater than `0.0`
+endif::VKSC_VERSION_1_0[]
+  * [[VUID-VkViewport-height-01773]]
+    The absolute value of pname:height must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1]
+  * [[VUID-VkViewport-x-01774]]
+    pname:x must: be greater than or equal to pname:viewportBoundsRange[0]
+  * [[VUID-VkViewport-x-01232]]
+    [eq]#(pname:x {plus} pname:width)# must: be less than or equal to
+    pname:viewportBoundsRange[1]
+  * [[VUID-VkViewport-y-01775]]
+    pname:y must: be greater than or equal to pname:viewportBoundsRange[0]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
+  * [[VUID-VkViewport-y-01776]]
+    pname:y must: be less than or equal to pname:viewportBoundsRange[1]
+  * [[VUID-VkViewport-y-01777]]
+    [eq]#(pname:y {plus} pname:height)# must: be greater than or equal to
+    pname:viewportBoundsRange[0]
+endif::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
+  * [[VUID-VkViewport-y-01233]]
+    [eq]#(pname:y {plus} pname:height)# must: be less than or equal to
+    pname:viewportBoundsRange[1]
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkViewport-minDepth-01234]]
+    If the `apiext:VK_EXT_depth_range_unrestricted` extension is not
+    enabled, pname:minDepth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkViewport-minDepth-02540]]
+    pname:minDepth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkViewport-maxDepth-01235]]
+    If the `apiext:VK_EXT_depth_range_unrestricted` extension is not
+    enabled, pname:maxDepth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkViewport-maxDepth-02541]]
+    pname:maxDepth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+****
+
+include::{generated}/validity/structs/VkViewport.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_decode_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_extensions.adoc
new file mode 100644
index 0000000..ff8e47b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_extensions.adoc
@@ -0,0 +1,798 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[video-decode-operations]]
+== Video Decode Operations
+
+[[decode-output-picture]]
+Video decode operations consume compressed video data from a video bitstream
+buffer and zero or more reference pictures, and produce a _decode output
+picture_ and an optional <<reconstructed-picture,reconstructed picture>>.
+
+[NOTE]
+.Note:
+====
+Such decode output pictures can be shared with the <<dpb,Decoded Picture
+Buffer>>, and can also be used
+ifdef::VK_KHR_video_encode_queue[]
+as the <<encode-input-picture,input>> of video encode operations,
+endif::VK_KHR_video_encode_queue[]
+with graphics or compute operations,
+ifdef::VK_KHR_surface[]
+or with <<wsi,Window System Integration>> APIs,
+endif::VK_KHR_surface[]
+depending on the capabilities of the implementation.
+====
+
+Video decode operations may: access the following resources in the
+ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR stage:
+
+  * The source video bitstream buffer range and the image subregions
+    corresponding to the list of <<decode-active-reference-picture-info,
+    active reference pictures>> with access
+    ename:VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR.
+  * The image subregions corresponding to the target
+    <<decode-output-picture-info,decode output picture>> and
+    <<decode-reconstructed-picture-info,reconstructed picture>> with access
+    ename:VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR.
+
+The image subresource of each <<video-picture-resources,video picture
+resource>> accessed by the video coding operation is specified using a
+corresponding slink:VkVideoPictureResourceInfoKHR structure.
+Each such image subresource must: be in the appropriate image layout as
+follows:
+
+  * If the image subresource is used in the video decode operation only as
+    <<decode-output-picture,decode output picture>>, then it must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR layout.
+  * If the image subresource is used in the video decode operation both as
+    <<decode-output-picture,decode output picture>> and
+    <<reconstructed-picture,reconstructed picture>>, then it must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout.
+  * If the image subresource is used in the video decode operation only as
+    <<reconstructed-picture,reconstructed picture>>, then it must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout.
+  * If the image subresource is used in the video decode operation as a
+    <<reference-picture,reference picture>>, then it must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout.
+
+[[decode-unsuccessful]]
+A video decode operation may: complete unsuccessfully.
+In this case the <<decode-output-picture,decode output picture>> will have
+undefined: contents.
+Similarly, if a <<reconstructed-picture,reconstructed picture>> is
+specified, it will also have undefined: contents, and the activated DPB slot
+will have an <<dpb-slot-states,invalid picture reference>>.
+
+
+[[decode-codec-specific-semantics]]
+=== Codec-Specific Semantics
+
+The following aspects of video decode operations are codec-specific:
+
+  * The interpretation of the contents of the source video bitstream buffer
+    range.
+  * The construction and interpretation of the list of
+    <<decode-active-reference-picture-info,active reference pictures>> and
+    the interpretation of the picture data referred to by the corresponding
+    image subregions.
+  * The construction and interpretation of information related to the
+    <<decode-output-picture-info,decode output picture>> and the generation
+    of picture data to the corresponding image subregion.
+  * The construction and interpretation of information related to the
+    optional <<decode-reconstructed-picture-info,reconstructed picture>> and
+    the generation of picture data to the corresponding image subregion.
+
+These codec-specific behaviors are defined for each video codec operation
+separately.
+
+ifdef::VK_KHR_video_decode_h264[]
+  * If the used video codec operation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the
+    codec-specific aspects of the video decoding process are performed as
+    defined in the <<decode-h264,H.264 Decode Operations>> section.
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * If the used video codec operation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the
+    codec-specific aspects of the video decoding process are performed as
+    defined in the <<decode-h265,H.265 Decode Operations>> section.
+endif::VK_KHR_video_decode_h265[]
+
+
+[[decode-operation-steps]]
+=== Video Decode Operation Steps
+
+Each video decode operation performs the following steps in the
+ename:VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR stage:
+
+  1. Reads the encoded video data from the source video bitstream buffer
+     range.
+  2. Performs picture reconstruction of the encoded video data according to
+     the <<decode-codec-specific-semantics,codec-specific semantics>>,
+     applying any prediction data read from the <<active-reference-pictures,
+     active reference pictures>> in the process;
+  3. Writes the decoded picture data to the <<decode-output-picture,decode
+     output picture>>, and to the <<reconstructed-picture,reconstructed
+     picture>>, if one is specified and is different from the decode output
+     picture, according to the <<decode-codec-specific-semantics,
+     codec-specific semantics>>;
+  4. When <<decode-reconstructed-picture-info,reconstructed picture
+     information>> is provided, the requested <<dpb-slot,DPB slot>> is
+     <<dpb-slot-states,activated>> with the specified picture and the DPB
+     slot index is associated with the corresponding
+     <<bound-reference-picture-resources,bound reference picture resource>>.
+
+
+=== Capabilities
+
+[open,refpage='VkVideoDecodeCapabilitiesKHR',desc='Structure describing general video decode capabilities for a video profile',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
+pname:pVideoProfile->videoCodecOperation specifying a decode operation, the
+sname:VkVideoDecodeCapabilitiesKHR structure must: be included in the
+pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve
+capabilities specific to video decoding.
+
+The sname:VkVideoDecodeCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoDecodeCapabilityFlagBitsKHR
+    describing the supported video decoding capabilities.
+
+include::{generated}/validity/structs/VkVideoDecodeCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeCapabilityFlagBitsKHR',desc='Video decode capability flags',type='enums']
+--
+Bits which may: be set in slink:VkVideoDecodeCapabilitiesKHR::pname:flags,
+indicating the decoding capabilities supported, are:
+
+include::{generated}/api/enums/VkVideoDecodeCapabilityFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR
+    indicates support for using the same video picture resource as the
+    <<reconstructed-picture,reconstructed picture>> and
+    <<decode-output-picture,decode output picture>> in a video decode
+    operation.
+  * ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR
+    indicates support for using distinct video picture resources as the
+    <<reconstructed-picture,reconstructed picture>> and
+    <<decode-output-picture,decode output picture>> in a video decode
+    operation.
+
+Implementations are only required: to support one of
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR and
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR.
+Accordingly, applications should: handle both cases to maximize portability.
+
+[NOTE]
+.Note:
+====
+If both ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR and
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR are
+supported, an application can choose to create separate images for decode
+DPB and decode output.
+E.g. in cases when linear tiling is preferred (and supported) for the decode
+output picture and the DPB requires optimal tiling, this avoids the need for
+a separate copy at the expense of additional memory bandwidth requirements
+during decoding.
+====
+--
+
+[open,refpage='VkVideoDecodeCapabilityFlagsKHR',desc='Bitmask of VkVideoDecodeCapabilityFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeCapabilityFlagsKHR.adoc[]
+
+tname:VkVideoDecodeCapabilityFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoDecodeCapabilityFlagBitsKHR.
+--
+
+
+=== Video Decode Commands
+
+[open,refpage='vkCmdDecodeVideoKHR',desc='Launch a video decode operation',type='protos']
+--
+To launch video decode operations, call:
+
+include::{generated}/api/protos/vkCmdDecodeVideoKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pDecodeInfo is a pointer to a slink:VkVideoDecodeInfoKHR structure
+    specifying the parameters of the video decode operations.
+
+Each call issues one or more video decode operations.
+The implicit parameter pname:opCount corresponds to the number of video
+decode operations issued by the command.
+After calling this command, the
+<<queries-operation-active-query-index,active query index>> of each
+<<queries-operation-active,active>> query is incremented by pname:opCount.
+
+Currently each call to this command results in the issue of a single video
+decode operation.
+
+[[decode-active-reference-picture-info]]
+Active Reference Picture Information::
+
+The list of <<active-reference-pictures,active reference pictures>> used by
+a video decode operation is a list of image subregions used as the source of
+<<reference-picture,reference picture>> data and related parameters, and is
+derived from the slink:VkVideoReferenceSlotInfoKHR structures provided as
+the elements of the pname:pDecodeInfo->pReferenceSlots array.
+For each element of pname:pDecodeInfo->pReferenceSlots, one or more elements
+are added to the active reference picture list, as defined by the
+<<decode-codec-specific-semantics,codec-specific semantics>>.
+Each element of this list contains the following information:
+
+  * The image subregion within the image subresource
+    <<video-image-subresource-reference,referred>> to by the
+    <<video-picture-resources,video picture resource>> used as the reference
+    picture.
+  * The <<dpb-slot,DPB slot>> index the reference picture is associated
+    with.
+  * The codec-specific reference information related to the reference
+    picture.
+
+[[decode-reconstructed-picture-info]]
+Reconstructed Picture Information::
+
+Information related to the optional <<reconstructed-picture,reconstructed
+picture>> used by a video decode operation is derived from the
+slink:VkVideoReferenceSlotInfoKHR structure pointed to by
+pname:pDecodeInfo->pSetupReferenceSlot, if not `NULL`, as defined by the
+<<decode-codec-specific-semantics,codec-specific semantics>>, and consists
+of the following:
+
+  * The image subregion within the image subresource
+    <<video-image-subresource-reference,referred>> to by the
+    <<video-picture-resources,video picture resource>> used as the
+    reconstructed picture.
+  * The <<dpb-slot,DPB slot>> index to <<dpb-slot-states,activate>> with the
+    reconstructed picture.
+  * The codec-specific reference information related to the reconstructed
+    picture.
+
+[[decode-output-picture-info]]
+Decode Output Picture Information::
+
+Information related to the <<decode-output-picture,decode output picture>>
+used by a video decode operation is derived from
+pname:pDecodeInfo->dstPictureResource and any codec-specific parameters
+provided in the pname:pDecodeInfo->pNext chain, as defined by the
+<<decode-codec-specific-semantics,codec-specific semantics>>, and consists
+of the following:
+
+  * The image subregion within the image subresource
+    <<video-image-subresource-reference,referred>> to by the
+    <<video-picture-resources,video picture resource>> used as the decode
+    output picture.
+  * The codec-specific picture information related to the decode output
+    picture.
+
+Several limiting values are defined below that are referenced by the
+relevant valid usage statements of this command.
+
+  * Let `uint32_t activeReferencePictureCount` be the size of the list of
+    active reference pictures used by the video decode operation.
+    Unless otherwise defined, pname:activeReferencePictureCount is set to
+    the value of pname:pDecodeInfo->referenceSlotCount.
+ifdef::VK_KHR_video_decode_h264[]
+  ** If the bound video session was created with an <<decode-h264-profile,
+     H.264 decode profile>>, then let pname:activeReferencePictureCount be
+     the value of pname:pDecodeInfo->referenceSlotCount plus the number of
+     elements of the pname:pDecodeInfo->pReferenceSlots array that have a
+     slink:VkVideoDecodeH264DpbSlotInfoKHR structure included in their
+     pname:pNext chain with both
+     pname:pStdReferenceInfo->flags.top_field_flag and
+     pname:pStdReferenceInfo->flags.bottom_field_flag set.
++
+[NOTE]
+.Note
+====
+This means that the elements of pname:pDecodeInfo->pReferenceSlots that
+include both a top and bottom field reference are counted as two separate
+active reference pictures, as described in the
+<<decode-h264-active-reference-picture-info,active reference picture list
+construction rules for H.264 decode operations>>.
+====
+endif::VK_KHR_video_decode_h264[]
+  * Let `VkOffset2D codedOffsetGranularity` be the minimum alignment
+    requirement for the coded offset of video picture resources.
+    Unless otherwise defined, the value of the pname:x and pname:y members
+    of pname:codedOffsetGranularity are `0`.
+ifdef::VK_KHR_video_decode_h264[]
+  ** If the bound video session was created with an <<decode-h264-profile,
+     H.264 decode profile>> with a
+     slink:VkVideoDecodeH264ProfileInfoKHR::pname:pictureLayout of
+     ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR,
+     then pname:codedOffsetGranularity is equal to
+     slink:VkVideoDecodeH264CapabilitiesKHR::pname:fieldOffsetGranularity,
+     as returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for that
+     video profile.
+endif::VK_KHR_video_decode_h264[]
+  * Let `uint32_t dpbFrameUseCount[]` be an array of size pname:maxDpbSlots,
+    where pname:maxDpbSlots is the
+    slink:VkVideoSessionCreateInfoKHR::pname:maxDpbSlots the bound video
+    session was created with, with each element indicating the number of
+    times a frame associated with the corresponding DPB slot index is
+    referred to by the video coding operation.
+    Let the initial value of each element of the array be `0`.
+  ** If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then
+     `dpbFrameUseCount[i]` is incremented by one, where pname:i equals
+     pname:pDecodeInfo->pSetupReferenceSlot->slotIndex.
+ifdef::VK_KHR_video_decode_h264[]
+     If the bound video session object was created with an
+     <<decode-h264-profile,H.264 decode profile>>, then
+     `dpbFrameUseCount[i]` is decremented by one if either
+     pname:pStdReferenceInfo->flags.top_field_flag or
+     pname:pStdReferenceInfo->flags.bottom_field_flag is set in the
+     slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the
+     pname:pDecodeInfo->pSetupReferenceSlot->pNext chain.
+endif::VK_KHR_video_decode_h264[]
+  ** For each element of pname:pDecodeInfo->pReferenceSlots,
+     `dpbFrameUseCount[i]` is incremented by one, where pname:i equals the
+     pname:slotIndex member of the corresponding element.
+ifdef::VK_KHR_video_decode_h264[]
+     If the bound video session object was created with an
+     <<decode-h264-profile,H.264 decode profile>>, then
+     `dpbFrameUseCount[i]` is decremented by one if either
+     pname:pStdReferenceInfo->flags.top_field_flag or
+     pname:pStdReferenceInfo->flags.bottom_field_flag is set in the
+     slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the pname:pNext
+     chain of the corresponding element of
+     pname:pDecodeInfo->pReferenceSlots.
+  * Let `uint32_t dpbTopFieldUseCount[]` and `uint32_t
+    dpbBottomFieldUseCount[]` be arrays of size pname:maxDpbSlots, where
+    pname:maxDpbSlots is the
+    slink:VkVideoSessionCreateInfoKHR::pname:maxDpbSlots the bound video
+    session was created with, with each element indicating the number of
+    times the top field or the bottom field, respectively, associated with
+    the corresponding DPB slot index is referred to by the video coding
+    operation.
+    Let the initial value of each element of the arrays be `0`.
+  ** If the bound video session object was created with an
+     <<decode-h264-profile,H.264 decode profile>> and
+     pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then perform the
+     following:
+  *** If pname:pStdReferenceInfo->flags.top_field_flag is set in the
+      slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the
+      pname:pDecodeInfo->pSetupReferenceSlot->pNext chain, then
+      `dpbTopFieldUseCount[i]` is incremented by one, where pname:i equals
+      pname:pDecodeInfo->pSetupReferenceSlot->slotIndex.
+  *** If pname:pStdReferenceInfo->flags.bottom_field_flag is set in the
+      slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the
+      pname:pDecodeInfo->pSetupReferenceSlot->pNext chain, then
+      `dpbBottomFieldUseCount[i]` is incremented by one, where pname:i
+      equals pname:pDecodeInfo->pSetupReferenceSlot->slotIndex.
+  ** If the bound video session object was created with an
+     <<decode-h264-profile,H.264 decode profile>>, then perform the
+     following for each element of pname:pDecodeInfo->pReferenceSlots:
+  *** If pname:pStdReferenceInfo->flags.top_field_flag is set in the
+      slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the pname:pNext
+      chain of the element, then `dpbTopFieldUseCount[i]` is incremented by
+      one, where pname:i equals the pname:slotIndex member of the element.
+  *** If pname:pStdReferenceInfo->flags.bottom_field_flag is set in the
+      slink:VkVideoDecodeH264DpbSlotInfoKHR structure in the pname:pNext
+      chain of the element, then `dpbBottomFieldUseCount[i]` is incremented
+      by one, where pname:i equals the pname:slotIndex member of the
+      element.
+endif::VK_KHR_video_decode_h264[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdDecodeVideoKHR-None-07011]]
+    The bound video session must: not be in <<video-session-uninitialized,
+    uninitialized>> state at the time the command is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-opCount-07134]]
+    For each <<queries-operation-active,active>> query, the
+    <<queries-operation-active-query-index,active query index>>
+    corresponding to the query type of that query plus pname:opCount must:
+    be less than or equal to the
+    <<queries-operation-last-activatable-query-index,last activatable query
+    index>> corresponding to the query type of that query plus one
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07135]]
+    pname:pDecodeInfo->srcBuffer must: be <<video-profile-compatibility,
+    compatible>> with the video profile the bound video session was created
+    with
+  * [[VUID-vkCmdDecodeVideoKHR-commandBuffer-07136]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pDecodeInfo->srcBuffer must: not be a protected buffer
+  * [[VUID-vkCmdDecodeVideoKHR-commandBuffer-07137]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pDecodeInfo->srcBuffer must: be a protected buffer
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07138]]
+    pname:pDecodeInfo->srcBufferOffset must: be an integer multiple of
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferOffsetAlignment,
+    as returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the
+    video profile the bound video session was created with
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07139]]
+    pname:pDecodeInfo->srcBufferRange must: be an integer multiple of
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferSizeAlignment, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile the bound video session was created with
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07140]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL` and
+    slink:VkVideoDecodeCapabilitiesKHR::pname:flags does not include
+    ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile the bound video session was created with, then the video picture
+    resources specified by pname:pDecodeInfo->dstPictureResource and
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must: not
+    <<video-picture-resource-matching,match>>
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07141]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL` and
+    slink:VkVideoDecodeCapabilitiesKHR::pname:flags does not include
+    ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile the bound video session was created with, then the video picture
+    resources specified by pname:pDecodeInfo->dstPictureResource and
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must:
+    <<video-picture-resource-matching,match>>
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07142]]
+    pname:pDecodeInfo->dstPictureResource.imageViewBinding must: be
+    <<video-profile-compatibility,compatible>> with the video profile the
+    bound video session was created with
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07143]]
+    The format of pname:pDecodeInfo->dstPictureResource.imageViewBinding
+    must: match the slink:VkVideoSessionCreateInfoKHR::pname:pictureFormat
+    the bound video session was created with
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07144]]
+    pname:pDecodeInfo->dstPictureResource.codedOffset must: be an integer
+    multiple of pname:codedOffsetGranularity
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07145]]
+    pname:pDecodeInfo->dstPictureResource.codedExtent must: be between
+    pname:minCodedExtent and pname:maxCodedExtent, inclusive, the bound
+    video session was created with
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07146]]
+    pname:pDecodeInfo->dstPictureResource.imageViewBinding must: have been
+    created with ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+  * [[VUID-vkCmdDecodeVideoKHR-commandBuffer-07147]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pDecodeInfo->dstPictureResource.imageViewBinding must: not
+    have been created from a protected image
+  * [[VUID-vkCmdDecodeVideoKHR-commandBuffer-07148]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pDecodeInfo->dstPictureResource.imageViewBinding must: have
+    been created from a protected image
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07170]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then
+    pname:pDecodeInfo->pSetupReferenceSlot->slotIndex must: be less than the
+    slink:VkVideoSessionCreateInfoKHR::pname:maxDpbSlots specified when the
+    bound video session was created
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07173]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource->codedOffset
+    must: be an integer multiple of pname:codedOffsetGranularity
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07149]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must:
+    <<video-picture-resource-matching,match>> one of the
+    <<bound-reference-picture-resources,bound reference picture resource>>
+  * [[VUID-vkCmdDecodeVideoKHR-activeReferencePictureCount-07150]]
+    pname:activeReferencePictureCount must: be less than or equal to the
+    slink:VkVideoSessionCreateInfoKHR::pname:maxActiveReferencePictures
+    specified when the bound video session was created
+  * [[VUID-vkCmdDecodeVideoKHR-slotIndex-07256]]
+    The pname:slotIndex member of each element of
+    pname:pDecodeInfo->pReferenceSlots must: be less than the
+    slink:VkVideoSessionCreateInfoKHR::pname:maxDpbSlots specified when the
+    bound video session was created
+  * [[VUID-vkCmdDecodeVideoKHR-codedOffset-07257]]
+    The pname:codedOffset member of the slink:VkVideoPictureResourceInfoKHR
+    structure pointed to by the pname:pPictureResource member of each
+    element of pname:pDecodeInfo->pReferenceSlots must: be an integer
+    multiple of pname:codedOffsetGranularity
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07151]]
+    The pname:pPictureResource member of each element of
+    pname:pDecodeInfo->pReferenceSlots must:
+    <<video-picture-resource-matching,match>> one of the
+    <<bound-reference-picture-resources,bound reference picture resource>>
+    associated with the DPB slot index specified in the pname:slotIndex
+    member of that element
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07264]]
+    Each video picture resource corresponding to the pname:pPictureResource
+    member specified in the elements of pname:pDecodeInfo->pReferenceSlots
+    must: be <<video-picture-resource-uniqueness,unique>> within
+    pname:pDecodeInfo->pReferenceSlots
+  * [[VUID-vkCmdDecodeVideoKHR-dpbFrameUseCount-07176]]
+    All elements of pname:dpbFrameUseCount must: be less than or equal to
+    `1`
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-vkCmdDecodeVideoKHR-dpbTopFieldUseCount-07177]]
+    All elements of pname:dpbTopFieldUseCount must: be less than or equal to
+    `1`
+  * [[VUID-vkCmdDecodeVideoKHR-dpbBottomFieldUseCount-07178]]
+    All elements of pname:dpbBottomFieldUseCount must: be less than or equal
+    to `1`
+endif::VK_KHR_video_decode_h264[]
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07252]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is `NULL` or
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource does not
+    <<video-image-subresource-reference,refer>> to the same image
+    subresource as pname:pDecodeInfo->dstPictureResource, then the image
+    subresource <<video-image-subresource-reference,referred>> to by
+    pname:pDecodeInfo->dstPictureResource must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR layout at the time the video
+    decode operation is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07253]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL` and
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource
+    <<video-image-subresource-reference,refers>> to the same image
+    subresource as pname:pDecodeInfo->dstPictureResource, then the image
+    subresource <<video-image-subresource-reference,referred>> to by
+    pname:pDecodeInfo->dstPictureResource must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video
+    decode operation is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07254]]
+    If pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then the image
+    subresource <<video-image-subresource-reference,referred>> to by
+    pname:pDecodeInfo->pSetupReferenceSlot->pPictureResource must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video
+    decode operation is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-pPictureResource-07255]]
+    The image subresource <<video-image-subresource-reference,referred>> to
+    by the pname:pPictureResource member of each element of
+    pname:pDecodeInfo->pReferenceSlots must: be in the
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video
+    decode operation is executed on the device
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-vkCmdDecodeVideoKHR-pNext-07152]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pname:pNext
+    chain of pname:pDecodeInfo must: include a
+    slink:VkVideoDecodeH264PictureInfoKHR structure
+  * [[VUID-vkCmdDecodeVideoKHR-None-07258]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created
+    with <<decode-h264-interlaced-support,interlaced frame support>>, then
+    the <<decode-h264-output-picture-info,decode output picture>> must:
+    represent a frame
+  * [[VUID-vkCmdDecodeVideoKHR-pSliceOffsets-07153]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then all elements of
+    the pname:pSliceOffsets member of the
+    slink:VkVideoDecodeH264PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo must: be less than
+    pname:pDecodeInfo->srcBufferRange
+  * [[VUID-vkCmdDecodeVideoKHR-StdVideoH264SequenceParameterSet-07154]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the bound video
+    session parameters object must: contain a
+    code:StdVideoH264SequenceParameterSet entry with
+    pname:seq_parameter_set_id matching
+    code:StdVideoDecodeH264PictureInfo::pname:seq_parameter_set_id that is
+    provided in the pname:pStdPictureInfo member of the
+    slink:VkVideoDecodeH264PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo
+  * [[VUID-vkCmdDecodeVideoKHR-StdVideoH264PictureParameterSet-07155]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the bound video
+    session parameters object must: contain a
+    code:StdVideoH264PictureParameterSet entry with
+    pname:seq_parameter_set_id and pname:pic_parameter_set_id matching
+    code:StdVideoDecodeH264PictureInfo::pname:seq_parameter_set_id and
+    code:StdVideoDecodeH264PictureInfo::pname:pic_parameter_set_id,
+    respectively, that are provided in the pname:pStdPictureInfo member of
+    the slink:VkVideoDecodeH264PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07156]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then the
+    pname:pNext chain of pname:pDecodeInfo->pSetupReferenceSlot must:
+    include a slink:VkVideoDecodeH264DpbSlotInfoKHR structure
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07259]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created
+    with <<decode-h264-interlaced-support,interlaced frame support>>, and
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then the
+    <<decode-h264-reconstructed-picture-info,reconstructed picture>> must:
+    represent a frame
+  * [[VUID-vkCmdDecodeVideoKHR-pNext-07157]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pname:pNext
+    chain of each element of pname:pDecodeInfo->pReferenceSlots must:
+    include a slink:VkVideoDecodeH264DpbSlotInfoKHR structure
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07260]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created
+    with <<decode-h264-interlaced-support,interlaced frame support>>, then
+    each <<decode-h264-active-reference-picture-info,active reference
+    picture>> corresponding to the elements of
+    pname:pDecodeInfo->pReferenceSlots must: represent a frame
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07261]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, and the
+    <<decode-h264-output-picture-info,decode output picture>> represents a
+    frame, then the <<decode-h264-reconstructed-picture-info,reconstructed
+    picture>> must: also represent a frame
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07262]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, and the
+    <<decode-h264-output-picture-info,decode output picture>> represents a
+    top field, then the
+    <<decode-h264-reconstructed-picture-info,reconstructed picture>> must:
+    also represent a top field
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07263]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, and the
+    <<decode-h264-output-picture-info,decode output picture>> represents a
+    bottom field, then the <<decode-h264-reconstructed-picture-info,
+    reconstructed picture>> must: also represent a bottom field
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07266]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an
+    <<decode-h264-active-reference-picture-info,active reference picture>>
+    corresponding to any element of pname:pDecodeInfo->pReferenceSlots
+    represents a frame, then the DPB slot index of the bound video session
+    specified by the pname:slotIndex member of that element must: be
+    currently associated with a frame picture
+    <<video-picture-resource-matching, matching>> the video picture resource
+    specified by the pname:pPictureResource member of the same element at
+    the time the command is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07267]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an
+    <<decode-h264-active-reference-picture-info,active reference picture>>
+    corresponding to any element of pname:pDecodeInfo->pReferenceSlots
+    represents a top field, then the DPB slot index of the bound video
+    session specified by the pname:slotIndex member of that element must: be
+    currently associated with a top field picture
+    <<video-picture-resource-matching, matching>> the video picture resource
+    specified by the pname:pPictureResource member of the same element at
+    the time the command is executed on the device
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07268]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an
+    <<decode-h264-active-reference-picture-info,active reference picture>>
+    corresponding to any element of pname:pDecodeInfo->pReferenceSlots
+    represents a bottom field, then the DPB slot index of the bound video
+    session specified by the pname:slotIndex member of that element must: be
+    currently associated with a bottom field picture
+    <<video-picture-resource-matching,matching>> the video picture resource
+    specified by the pname:pPictureResource member of the same element at
+    the time the command is executed on the device
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-vkCmdDecodeVideoKHR-pNext-07158]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
+    chain of pname:pDecodeInfo must: include a
+    slink:VkVideoDecodeH265PictureInfoKHR structure
+  * [[VUID-vkCmdDecodeVideoKHR-pSliceSegmentOffsets-07159]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then all elements of
+    the pname:pSliceSegmentOffsets member of the
+    slink:VkVideoDecodeH265PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo must: be less than
+    pname:pDecodeInfo->srcBufferRange
+  * [[VUID-vkCmdDecodeVideoKHR-StdVideoH265VideoParameterSet-07160]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video
+    session parameters object must: contain a
+    code:StdVideoH265VideoParameterSet entry with
+    pname:vps_video_parameter_set_id matching
+    code:StdVideoDecodeH265PictureInfo::pname:sps_video_parameter_set_id
+    that is provided in the pname:pStdPictureInfo member of the
+    slink:VkVideoDecodeH265PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo
+  * [[VUID-vkCmdDecodeVideoKHR-StdVideoH265SequenceParameterSet-07161]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video
+    session parameters object must: contain a
+    code:StdVideoH265SequenceParameterSet entry with
+    pname:sps_video_parameter_set_id and pname:sps_seq_parameter_set_id
+    matching
+    code:StdVideoDecodeH265PictureInfo::pname:sps_video_parameter_set_id and
+    code:StdVideoDecodeH265PictureInfo::pname:pps_seq_parameter_set_id,
+    respectively, that are provided in the pname:pStdPictureInfo member of
+    the slink:VkVideoDecodeH265PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo
+  * [[VUID-vkCmdDecodeVideoKHR-StdVideoH265PictureParameterSet-07162]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video
+    session parameters object must: contain a
+    code:StdVideoH265PictureParameterSet entry with
+    pname:sps_video_parameter_set_id, pname:pps_seq_parameter_set_id, and
+    pname:pps_pic_parameter_set_id matching
+    code:StdVideoDecodeH265PictureInfo::pname:sps_video_parameter_set_id,
+    code:StdVideoDecodeH265PictureInfo::pname:pps_seq_parameter_set_id, and
+    code:StdVideoDecodeH265PictureInfo::pname:pps_pic_parameter_set_id,
+    respectively, that are provided in the pname:pStdPictureInfo member of
+    the slink:VkVideoDecodeH265PictureInfoKHR structure included in the
+    pname:pNext chain of pname:pDecodeInfo
+  * [[VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07163]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and
+    pname:pDecodeInfo->pSetupReferenceSlot is not `NULL`, then the
+    pname:pNext chain of pname:pDecodeInfo->pSetupReferenceSlot must:
+    include a slink:VkVideoDecodeH265DpbSlotInfoKHR structure
+  * [[VUID-vkCmdDecodeVideoKHR-pNext-07164]]
+    If the bound video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
+    chain of each element of pname:pDecodeInfo->pReferenceSlots must:
+    include a slink:VkVideoDecodeH265DpbSlotInfoKHR structure
+endif::VK_KHR_video_decode_h265[]
+****
+
+include::{generated}/validity/protos/vkCmdDecodeVideoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeInfoKHR',desc='Structure specifying video decode parameters',type='structs']
+--
+The sname:VkVideoDecodeInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:srcBuffer is the source video bitstream buffer to read the encoded
+    bitstream from.
+  * pname:srcBufferOffset is the starting offset in bytes from the start of
+    pname:srcBuffer to read the encoded bitstream from.
+  * pname:srcBufferRange is the size in bytes of the encoded bitstream to
+    decode from pname:srcBuffer, starting from pname:srcBufferOffset.
+  * pname:dstPictureResource is the video picture resource to use as the
+    <<decode-output-picture,decode output picture>>.
+  * pname:pSetupReferenceSlot is `NULL` or a pointer to a
+    slink:VkVideoReferenceSlotInfoKHR structure describing the DPB slot to
+    <<dpb-slot-states,activate>> and the video picture resource to use as
+    the <<reconstructed-picture,reconstructed picture>> to activate the DPB
+    slot with.
+  * pname:referenceSlotCount is the number of elements in the
+    pname:pReferenceSlots array.
+  * pname:pReferenceSlots is `NULL` or a pointer to an array of
+    slink:VkVideoReferenceSlotInfoKHR structures describing the DPB slots
+    and corresponding <<reference-picture,reference picture>> resources to
+    use in this video decode operation (the set of
+    <<active-reference-pictures, active reference pictures>>).
+
+.Valid Usage
+****
+  * [[VUID-VkVideoDecodeInfoKHR-srcBuffer-07165]]
+    pname:srcBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR set
+  * [[VUID-VkVideoDecodeInfoKHR-srcBufferOffset-07166]]
+    pname:srcBufferOffset must: be less than the size of pname:srcBuffer
+  * [[VUID-VkVideoDecodeInfoKHR-srcBufferRange-07167]]
+    pname:srcBufferRange must: be less than or equal to the size of
+    pname:srcBuffer minus pname:srcBufferOffset
+  * [[VUID-VkVideoDecodeInfoKHR-pSetupReferenceSlot-07168]]
+    If pname:pSetupReferenceSlot is not `NULL`, then its pname:slotIndex
+    member must: not be negative
+  * [[VUID-VkVideoDecodeInfoKHR-pSetupReferenceSlot-07169]]
+    If pname:pSetupReferenceSlot is not `NULL`, then its
+    pname:pPictureResource must: not be `NULL`
+  * [[VUID-VkVideoDecodeInfoKHR-slotIndex-07171]]
+    The pname:slotIndex member of each element of pname:pReferenceSlots
+    must: not be negative
+  * [[VUID-VkVideoDecodeInfoKHR-pPictureResource-07172]]
+    The pname:pPictureResource member of each element of
+    pname:pReferenceSlots must: not be `NULL`
+****
+
+include::{generated}/validity/structs/VkVideoDecodeInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeFlagsKHR.adoc[]
+
+tname:VkVideoDecodeFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h264_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h264_extensions.adoc
new file mode 100644
index 0000000..b80b1ce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h264_extensions.adoc
@@ -0,0 +1,659 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[decode-h264]]
+== H.264 Decode Operations
+
+Video decode operations using an <<decode-h264-profile,H.264 decode
+profile>> can: be used to decode elementary video stream sequences compliant
+to the <<itu-t-h264,ITU-T H.264 Specification>>.
+
+[NOTE]
+.Note
+====
+Refer to the <<preamble,Preamble>> for information on how the Khronos
+Intellectual Property Rights Policy relates to normative references to
+external materials not created by Khronos.
+====
+
+This process is performed according to the <<decode-operation-steps,video
+decode operation steps>> with the codec-specific semantics defined in
+section 8 of the <<itu-t-h264,ITU-T H.264 Specification>> as follows:
+
+  * Syntax elements, derived values, and other parameters are applied from
+    the following structures:
+  ** The code:StdVideoH264SequenceParameterSet structure corresponding to
+     the <<decode-h264-active-sps,active SPS>> specifying the
+     <<decode-h264-sps, H.264 sequence parameter set>>.
+  ** The code:StdVideoH264PictureParameterSet structure corresponding to the
+     <<decode-h264-active-pps,active PPS>> specifying the <<decode-h264-pps,
+     H.264 picture parameter set>>.
+  ** The code:StdVideoDecodeH264PictureInfo structure specifying the
+     <<decode-h264-picture-info,H.264 picture information>>.
+  ** The code:StdVideoDecodeH264ReferenceInfo structures specifying the
+     <<decode-h264-reference-info,H.264 reference information>>
+     corresponding to the optional <<reconstructed-picture,reconstructed
+     picture>> and any <<active-reference-pictures,active reference
+     pictures>>.
+  * The contents of the provided video bitstream buffer range are
+    interpreted as defined in the <<decode-h264-bitstream-data-access,H.264
+    Decode Bitstream Data Access>> section.
+  * Picture data in the <<video-picture-resources,video picture resources>>
+    corresponding to the used <<decode-h264-active-reference-picture-info,
+    active reference pictures>>, <<decode-h264-output-picture-info,decode
+    output picture>>, and optional <<decode-h264-reconstructed-picture-info,
+    reconstructed picture>> is accessed as defined in the
+    <<decode-h264-picture-data-access,H.264 Decode Picture Data Access>>
+    section.
+
+If the parameters and the bitstream adhere to the syntactic and semantic
+requirements defined in the corresponding sections of the <<itu-t-h264,ITU-T
+H.264 Specification>>, as described above, and the <<dpb-slot,DPB slots>>
+associated with the <<active-reference-pictures,active reference pictures>>
+all refer to <<dpb-slot-states,valid picture references>>, then the video
+decode operation will complete successfully.
+Otherwise, the video decode operation may: complete
+<<decode-unsuccessful,unsuccessfully>>.
+
+
+[[decode-h264-bitstream-data-access]]
+=== H.264 Decode Bitstream Data Access
+
+If the target <<decode-h264-output-picture-info,decode output picture>> is a
+frame, then the video bitstream buffer range should: contain a VCL NAL unit
+comprised of the slice headers and data of a picture representing an entire
+frame, as defined in sections 7.3.3 and 7.3.4, and this data is interpreted
+as defined in sections 7.4.3 and 7.4.4 of the <<itu-t-h264,ITU-T H.264
+Specification>>, respectively.
+
+If the target <<decode-h264-output-picture-info,decode output picture>> is a
+field, then the video bitstream buffer range should contain a VCL NAL unit
+comprised of the slice headers and data of a picture representing a field,
+as defined in sections 7.3.3 and 7.3.4, and this data is interpreted as
+defined in sections 7.4.3 and 7.4.4 of the <<itu-t-h264,ITU-T H.264
+Specification>>, respectively.
+
+The offsets provided in
+slink:VkVideoDecodeH264PictureInfoKHR::pname:pSliceOffsets should: specify
+the starting offsets corresponding to each slice header within the video
+bitstream buffer range.
+
+
+[[decode-h264-picture-data-access]]
+=== H.264 Decode Picture Data Access
+
+The effective pname:imageOffset and pname:imageExtent corresponding to a
+<<decode-output-picture,decode output picture>>,
+<<reference-picture,reference picture>>, or
+<<reconstructed-picture,reconstructed picture>> used in video decode
+operations with an <<decode-h264-profile,H.264 decode profile>> are defined
+as follows:
+
+  * pname:imageOffset is [eq]#(pname:codedOffset.x,pname:codedOffset.y)# and
+    pname:imageExtent is [eq]#(pname:codedExtent.width,
+    pname:codedExtent.height)#, if the picture represents a frame.
+  * pname:imageOffset is [eq]#(pname:codedOffset.x,pname:codedOffset.y)# and
+    pname:imageExtent is [eq]#(pname:codedExtent.width,
+    pname:codedExtent.height)#, if the picture represents a field and the
+    picture layout of the used <<decode-h264-profile,H.264 decode profile>>
+    is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR.
+  * pname:imageOffset is [eq]#(pname:codedOffset.x,pname:codedOffset.y)# and
+    pname:imageExtent is [eq]#(pname:codedExtent.width,
+    pname:codedExtent.height / 2)#, if the picture represents a field and
+    the picture layout of the used <<decode-h264-profile,H.264 decode
+    profile>> is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR.
+
+Where pname:codedOffset and pname:codedExtent are the members of the
+slink:VkVideoPictureResourceInfoKHR structure corresponding to the picture.
+
+However, accesses to image data within a video picture resource happen at
+the granularity indicated by
+slink:VkVideoCapabilitiesKHR::pname:pictureAccessGranularity, as returned by
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the used <<video-profiles,
+video profile>>.
+This means that the complete image subregion accessed by video coding
+operations using an <<decode-h264-profile,H.264 decode profile>> for the
+video picture resource is defined as the set of texels within the coordinate
+range:
+
+  {empty}:: [eq]#([pname:startX,pname:endX),[pname:startY,pname:endY))#
+
+Where:
+
+  * [eq]#pname:startX# equals pname:imageOffset.x rounded down to the
+    nearest integer multiple of pname:pictureAccessGranularity.width;
+  * [eq]#pname:endX# equals [eq]#pname:imageOffset.x {plus}
+    pname:imageExtent.width# rounded up to the nearest integer multiple of
+    pname:pictureAccessGranularity.width and clamped to the width of the
+    image subresource <<video-image-subresource-reference,referred>> to by
+    the corresponding slink:VkVideoPictureResourceInfoKHR structure;
+  * [eq]#startY# equals pname:imageOffset.y rounded down to the nearest
+    integer multiple of pname:pictureAccessGranularity.height;
+  * [eq]#endY# equals [eq]#pname:imageOffset.y {plus}
+    pname:imageExtent.height# rounded up to the nearest integer multiple of
+    pname:pictureAccessGranularity.height and clamped to the height of the
+    image subresource <<video-image-subresource-reference,referred>> to by
+    the corresponding slink:VkVideoPictureResourceInfoKHR structure.
+
+In case of video decode operations using an <<decode-h264-profile,H.264
+decode profile>>, any access to a picture at the coordinates
+[eq]#(pname:x,pname:y)#, as defined by the <<itu-t-h264,ITU-T H.264
+Specification>>, is an access to the image subresource
+<<video-image-subresource-reference,referred>> to by the corresponding
+slink:VkVideoPictureResourceInfoKHR structure at the texel coordinates
+specified below:
+
+  * [eq]#(pname:x,pname:y)#, if the accessed picture represents a frame.
+  * [eq]#(pname:x,pname:y {times} 2)#, if the accessed picture represents a
+    top field and the picture layout of the used <<decode-h264-profile,H.264
+    decode profile>> is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR.
+  * [eq]#(pname:x,pname:y {times} 2 {plus} 1)#, if the accessed picture
+    represents a bottom field and the picture layout of the used
+    <<decode-h264-profile,H.264 decode profile>> is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR.
+  * [eq]#(pname:x,pname:y)#, if the accessed picture represents a top field
+    and the picture layout of the used <<decode-h264-profile,H.264 decode
+    profile>> is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR.
+  * [eq]#(pname:codedOffset.x {plus} pname:x,pname:codedOffset.y {plus}
+    pname:y)#, if the accessed picture represents a bottom field and the
+    picture layout of the used <<decode-h264-profile,H.264 decode profile>>
+    is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR.
+
+Where pname:codedOffset is the member of the corresponding
+slink:VkVideoPictureResourceInfoKHR structure.
+
+
+[[decode-h264-profile]]
+=== H.264 Decode Profile
+
+[open,refpage='VkVideoDecodeH264ProfileInfoKHR',desc='Structure specifying H.264 decode-specific video profile parameters',type='structs']
+--
+A video profile supporting H.264 video decode operations is specified by
+setting slink:VkVideoProfileInfoKHR::pname:videoCodecOperation to
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and adding a
+sname:VkVideoDecodeH264ProfileInfoKHR structure to the
+slink:VkVideoProfileInfoKHR::pname:pNext chain.
+
+The sname:VkVideoDecodeH264ProfileInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264ProfileInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdProfileIdc is a code:StdVideoH264ProfileIdc value specifying
+    the H.264 codec profile IDC, as defined in section A.2 of the
+    <<itu-t-h264,ITU-T H.264 Specification>>.
+  * pname:pictureLayout is a elink:VkVideoDecodeH264PictureLayoutFlagBitsKHR
+    value specifying the picture layout used by the H.264 video sequence to
+    be decoded.
+
+include::{generated}/validity/structs/VkVideoDecodeH264ProfileInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeH264PictureLayoutFlagBitsKHR',desc='H.264 video decode picture layout flags',type='enums']
+--
+The H.264 video decode picture layout flags are defined as follows:
+
+include::{generated}/api/enums/VkVideoDecodeH264PictureLayoutFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR specifies
+    support for progressive content.
+    This flag has the value `0`.
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR
+    specifies support for or use of a picture layout for interlaced content
+    where all lines belonging to the top field are decoded to the
+    even-numbered lines within the picture resource, and all lines belonging
+    to the bottom field are decoded to the odd-numbered lines within the
+    picture resource.
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR
+    specifies support for or use of a picture layout for interlaced content
+    where all lines belonging to a field are grouped together in a single
+    image subregion, and the two fields comprising the frame can: be stored
+    in separate image subregions of the same image subresource or in
+    separate image subresources.
+--
+
+[open,refpage='VkVideoDecodeH264PictureLayoutFlagsKHR',desc='Bitmask of VkVideoDecodeH264PictureLayoutFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeH264PictureLayoutFlagsKHR.adoc[]
+
+tname:VkVideoDecodeH264PictureLayoutFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkVideoDecodeH264PictureLayoutFlagBitsKHR.
+--
+
+
+=== H.264 Decode Capabilities
+
+[open,refpage='VkVideoDecodeH264CapabilitiesKHR',desc='Structure describing H.264 decode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for an <<decode-h264-profile,H.264 decode profile>>, the
+slink:VkVideoCapabilitiesKHR::pname:pNext chain must: include a
+sname:VkVideoDecodeH264CapabilitiesKHR structure that will be filled with
+the profile-specific capabilities.
+
+The sname:VkVideoDecodeH264CapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264CapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxLevelIdc is a code:StdVideoH264LevelIdc value specifying the
+    maximum H.264 level supported by the profile, where enum constant
+    `STD_VIDEO_H264_LEVEL_IDC_<major>_<minor>` identifies H.264 level
+    `<major>.<minor>` as defined in section A.3 of the <<itu-t-h264,ITU-T
+    H.264 Specification>>.
+  * pname:fieldOffsetGranularity is the minimum alignment for
+    slink:VkVideoPictureResourceInfoKHR::pname:codedOffset specified for a
+    <<video-picture-resources,video picture resource>> when using the
+    picture layout
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR.
+
+include::{generated}/validity/structs/VkVideoDecodeH264CapabilitiesKHR.adoc[]
+--
+
+
+[[decode-h264-parameter-sets]]
+=== H.264 Decode Parameter Sets
+
+<<video-session-parameters,Video session parameters>> objects created with
+the video codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR
+can: contain the following types of parameters:
+
+[[decode-h264-sps]]
+H.264 Sequence Parameter Sets (SPS)::
+
+Represented by code:StdVideoH264SequenceParameterSet structures and
+interpreted as follows:
+
+  * code:reserved1 and code:reserved2 are used only for padding purposes and
+    are otherwise ignored;
+  * code:seq_parameter_set_id is used as the key of the SPS entry;
+  * code:level_idc is one of the enum constants
+    `STD_VIDEO_H264_LEVEL_IDC_<major>_<minor>` identifying the H.264 level
+    `<major>.<minor>` as defined in section A.3 of the <<itu-t-h264,ITU-T
+    H.264 Specification>>;
+  * if code:flags.seq_scaling_matrix_present_flag is set, then the
+    code:StdVideoH264ScalingLists structure pointed to by code:pScalingLists
+    is interpreted as follows:
+  ** code:scaling_list_present_mask is a bitmask where bit index [eq]#i#
+     corresponds to `seq_scaling_list_present_flag[i]` as defined in section
+     7.4.2.1 of the <<itu-t-h264,ITU-T H.264 Specification>>;
+  ** code:use_default_scaling_matrix_mask is a bitmask where bit index
+     [eq]#i# corresponds to `UseDefaultScalingMatrix4x4Flag[i]`, when [eq]#i
+     < 6#, or corresponds to `UseDefaultScalingMatrix8x8Flag[i-6]`,
+     otherwise, as defined in section 7.3.2.1 of the <<itu-t-h264,ITU-T
+     H.264 Specification>>;
+  ** code:ScalingList4x4 and code:ScalingList8x8 correspond to the
+     identically named syntax elements defined in section 7.3.2.1 of the
+     <<itu-t-h264,ITU-T H.264 Specification>>;
+  * if code:flags.vui_parameters_present_flag is set, then
+    code:pSequenceParameterSetVui is a pointer to a
+    code:StdVideoH264SequenceParameterSetVui structure that is interpreted
+    as follows:
+  ** code:reserved1 is used only for padding purposes and is otherwise
+     ignored;
+  ** if code:flags.nal_hrd_parameters_present_flag or
+     code:flags.vcl_hrd_parameters_present_flag is set, then the
+     code:StdVideoH264HrdParameters structure pointed to by
+     code:pHrdParameters is interpreted as follows:
+  *** code:reserved1 is used only for padding purposes and is otherwise
+      ignored;
+  *** all other members of code:StdVideoH264HrdParameters are interpreted as
+      defined in section E.2.2 of the <<itu-t-h264,ITU-T H.264
+      Specification>>;
+  ** all other members of code:StdVideoH264SequenceParameterSetVui are
+     interpreted as defined in section E.2.1 of the <<itu-t-h264,ITU-T H.264
+     Specification>>;
+  * all other members of code:StdVideoH264SequenceParameterSet are
+    interpreted as defined in section 7.4.2.1 of the <<itu-t-h264,ITU-T
+    H.264 Specification>>.
+
+[[decode-h264-pps]]
+H.264 Picture Parameter Sets (PPS)::
+
+Represented by code:StdVideoH264PictureParameterSet structures and
+interpreted as follows:
+
+  * the pair constructed from code:seq_parameter_set_id and
+    code:pic_parameter_set_id is used as the key of the PPS entry;
+  * if code:flags.pic_scaling_matrix_present_flag is set, then the
+    code:StdVideoH264ScalingLists structure pointed to by code:pScalingLists
+    is interpreted as follows:
+  ** code:scaling_list_present_mask is a bitmask where bit index [eq]#i#
+     corresponds to `pic_scaling_list_present_flag[i]` as defined in section
+     7.4.2.2 of the <<itu-t-h264,ITU-T H.264 Specification>>;
+  ** code:use_default_scaling_matrix_mask is a bitmask where bit index
+     [eq]#i# corresponds to `UseDefaultScalingMatrix4x4Flag[i]`, when [eq]#i
+     < 6#, or corresponds to `UseDefaultScalingMatrix8x8Flag[i-6]`,
+     otherwise, as defined in section 7.3.2.2 of the <<itu-t-h264,ITU-T
+     H.264 Specification>>;
+  ** code:ScalingList4x4 and code:ScalingList8x8 correspond to the
+     identically named syntax elements defined in section 7.3.2.2 of the
+     <<itu-t-h264,ITU-T H.264 Specification>>;
+  * all other members of code:StdVideoH264PictureParameterSet are
+    interpreted as defined in section 7.4.2.2 of the <<itu-t-h264,ITU-T
+    H.264 Specification>>.
+
+[open,refpage='VkVideoDecodeH264SessionParametersCreateInfoKHR',desc='Structure specifies H.264 decoder parameter set information',type='structs']
+--
+When a <<video-session-parameters,video session parameters>> object is
+created with the codec operation
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, the
+slink:VkVideoSessionParametersCreateInfoKHR::pname:pNext chain must: include
+a sname:VkVideoDecodeH264SessionParametersCreateInfoKHR structure specifying
+the capacity and initial contents of the object.
+
+The sname:VkVideoDecodeH264SessionParametersCreateInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264SessionParametersCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxStdSPSCount is the maximum number of <<decode-h264-sps,H.264
+    SPS>> entries the created sname:VkVideoSessionParametersKHR can:
+    contain.
+  * pname:maxStdPPSCount is the maximum number of <<decode-h264-pps,H.264
+    PPS>> entries the created sname:VkVideoSessionParametersKHR can:
+    contain.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure specifying
+    H.264 parameters to add upon object creation.
+
+include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeH264SessionParametersAddInfoKHR',desc='Structure specifies H.264 decoder parameter set information',type='structs']
+--
+The sname:VkVideoDecodeH264SessionParametersAddInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoDecodeH264SessionParametersAddInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdSPSCount is the number of elements in the pname:pStdSPSs array.
+  * pname:pStdSPSs is a pointer to an array of
+    code:StdVideoH264SequenceParameterSet structures describing the
+    <<decode-h264-sps,H.264 SPS>> entries to add.
+  * pname:stdPPSCount is the number of elements in the pname:pStdPPSs array.
+  * pname:pStdPPSs is a pointer to an array of
+    code:StdVideoH264PictureParameterSet structures describing the
+    <<decode-h264-pps,H.264 PPS>> entries to add.
+
+This structure can: be specified in the following places:
+
+  * In the pname:pParametersAddInfo member of the
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+    specified in the pname:pNext chain of
+    slink:VkVideoSessionParametersCreateInfoKHR used to create a
+    <<video-session-parameters,video session parameters>> object.
+    In this case, if the video codec operation the video session parameters
+    object is created with is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then it defines the
+    set of initial parameters to add to the created object (see
+    <<creating-video-session-parameters,Creating Video Session
+    Parameters>>).
+  * In the pname:pNext chain of slink:VkVideoSessionParametersUpdateInfoKHR.
+    In this case, if the video codec operation the
+    <<video-session-parameters,video session parameters>> object to be
+    updated was created with is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then it defines the
+    set of parameters to add to it (see
+    <<video-session-parameters-update,Updating Video Session Parameters>>).
+
+.Valid Usage
+****
+  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-None-04825]]
+    The pname:seq_parameter_set_id member of each
+    code:StdVideoH264SequenceParameterSet structure specified in the
+    elements of pname:pStdSPSs must: be unique within pname:pStdSPSs
+  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-None-04826]]
+    The pair constructed from the pname:seq_parameter_set_id and
+    pname:pic_parameter_set_id members of each
+    code:StdVideoH264PictureParameterSet structure specified in the elements
+    of pname:pStdPPSs must: be unique within pname:pStdPPSs
+****
+
+include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersAddInfoKHR.adoc[]
+--
+
+
+=== H.264 Decoding Parameters
+
+[open,refpage='VkVideoDecodeH264PictureInfoKHR',desc='Structure specifies H.264 decode picture parameters when decoding a picture',type='structs']
+--
+The sname:VkVideoDecodeH264PictureInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264PictureInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdPictureInfo is a pointer to a
+    code:StdVideoDecodeH264PictureInfo structure specifying
+    <<decode-h264-picture-info,H.264 picture information>>.
+  * pname:sliceCount is the number of elements in pname:pSliceOffsets.
+  * pname:pSliceOffsets is a pointer to an array of pname:sliceCount offsets
+    specifying the start offset of the slices of the picture within the
+    video bitstream buffer range specified in slink:VkVideoDecodeInfoKHR.
+
+This structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR to
+specify the codec-specific picture information for an <<decode-h264,H.264
+decode operation>>.
+
+[[decode-h264-output-picture-info]]
+Decode Output Picture Information::
+
+When this structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR,
+the information related to the <<decode-output-picture-info,decode output
+picture>> is defined as follows:
+
+  * If pname:pStdPictureInfo->flags.field_pic_flag is not set, then the
+    picture represents a frame.
+  * If pname:pStdPictureInfo->flags.field_pic_flag is set, then the picture
+    represents a field.
+    Specifically:
+  ** If pname:pStdPictureInfo->flags.bottom_field_flag is not set, then the
+     picture represents the top field of the frame.
+  ** If pname:pStdPictureInfo->flags.bottom_field_flag is set, then the
+     picture represents the bottom field of the frame.
+  * The image subregion used is determined according to the
+    <<decode-h264-picture-data-access,H.264 Decode Picture Data Access>>
+    section.
+  * The decode output picture is associated with the
+    <<decode-h264-picture-info,H.264 picture information>> provided in
+    pname:pStdPictureInfo.
+
+[[decode-h264-picture-info]]
+Std Picture Information::
+
+The members of the code:StdVideoDecodeH264PictureInfo structure pointed to
+by pname:pStdPictureInfo are interpreted as follows:
+
+  * code:reserved1 and code:reserved2 are used only for padding purposes and
+    are otherwise ignored;
+  * code:flags.is_intra as defined in section 3.73 of the <<itu-t-h264,ITU-T
+    H.264 Specification>>;
+  * code:flags.is_reference as defined in section 3.136 of the <<itu-t-h264,
+    ITU-T H.264 Specification>>;
+  * code:flags.complementary_field_pair as defined in section 3.35 of the
+    <<itu-t-h264,ITU-T H.264 Specification>>;
+  * code:seq_parameter_set_id and code:pic_parameter_set_id are used to
+    identify the active parameter sets, as described below;
+  * all other members are interpreted as defined in section 7.4.3 of the
+    <<itu-t-h264,ITU-T H.264 Specification>>.
+
+Active Parameter Sets::
+
+The members of the code:StdVideoDecodeH264PictureInfo structure pointed to
+by pname:pStdPictureInfo are used to select the active parameter sets to use
+from the bound video session parameters object, as follows:
+
+  * [[decode-h264-active-sps]] The _active SPS_ is the
+    <<decode-h264-sps,SPS>> identified by the key specified in
+    code:StdVideoDecodeH264PictureInfo::code:seq_parameter_set_id.
+  * [[decode-h264-active-pps]] The _active PPS_ is the
+    <<decode-h264-pps,PPS>> identified by the key specified by the pair
+    constructed from
+    code:StdVideoDecodeH264PictureInfo::code:seq_parameter_set_id and
+    code:StdVideoDecodeH264PictureInfo::code:pic_parameter_set_id.
+
+include::{generated}/validity/structs/VkVideoDecodeH264PictureInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeH264DpbSlotInfoKHR',desc='Structure specifies H.264 decode DPB picture information',type='structs']
+--
+The sname:VkVideoDecodeH264DpbSlotInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264DpbSlotInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdReferenceInfo is a pointer to a
+    code:StdVideoDecodeH264ReferenceInfo structure specifying
+    <<decode-h264-reference-info,H.264 reference information>>.
+
+This structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, if not `NULL`, and
+the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots to specify the
+codec-specific reference picture information for an <<decode-h264,H.264
+decode operation>>.
+
+[[decode-h264-active-reference-picture-info]]
+Active Reference Picture Information::
+
+When this structure is specified in the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots, one or two elements are
+added to the list of <<decode-active-reference-picture-info,active reference
+pictures>> used by the video decode operation for each element of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots as follows:
+
+  * If neither pname:pStdReferenceInfo->flags.top_field_flag nor
+    pname:pStdReferenceInfo->flags.bottom_field_flag is set, then the
+    picture is added as a frame reference to the list of active reference
+    pictures.
+  * If pname:pStdReferenceInfo->flags.top_field_flag is set, then the
+    picture is added as a top field reference to the list of active
+    reference pictures.
+  * If pname:pStdReferenceInfo->flags.bottom_field_flag is set, then the
+    picture is added as a bottom field reference to the list of active
+    reference pictures.
+  * For each added reference picture, the corresponding image subregion used
+    is determined according to the <<decode-h264-picture-data-access,H.264
+    Decode Picture Data Access>> section.
+  * Each added reference picture is associated with the <<dpb-slot,DPB
+    slot>> index specified in the pname:slotIndex member of the
+    corresponding element of
+    slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots.
+  * Each added reference picture is associated with the
+    <<decode-h264-reference-info,H.264 reference information>> provided in
+    pname:pStdReferenceInfo.
+
+[NOTE]
+.Note
+====
+When both the top and bottom field of an interlaced frame currently
+associated with a DPB slot is intended to be used as an active reference
+picture and both fields are stored in the same image subregion (which is the
+case when using
+ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR
+which stores the two fields at even and odd scanlines of the same image
+subregion), both references have to be provided through a single
+slink:VkVideoReferenceSlotInfoKHR structure that has both
+code:flags.top_field_flag and code:flags.bottom_field_flag set in the
+code:StdVideoDecodeH264ReferenceInfo structure pointed to by the
+pname:pStdReferenceInfo member of the slink:VkVideoDecodeH264DpbSlotInfoKHR
+structure included in the corresponding slink:VkVideoReferenceSlotInfoKHR
+structure's pname:pNext chain.
+However, this approach can only be used when both fields are stored in the
+same image subregion.
+If that is not the case (e.g. when using
+ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR
+which requires separate pname:codedOffset values for the two fields and also
+allows storing the two fields of a frame in separate image layers or
+entirely separate images), then a separate slink:VkVideoReferenceSlotInfoKHR
+structure needs to be provided for referencing the two fields, each only
+setting one of code:flags.top_field_flag or code:flags.bottom_field_flag,
+and providing the appropriate video picture resource information in
+slink:VkVideoReferenceSlotInfoKHR::pname:pPictureResource.
+====
+
+[[decode-h264-reconstructed-picture-info]]
+Reconstructed Picture Information::
+
+When this structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, the information
+related to the <<decode-reconstructed-picture-info,reconstructed picture>>
+is defined as follows:
+
+  * If neither pname:pStdReferenceInfo->flags.top_field_flag nor
+    pname:pStdReferenceInfo->flags.bottom_field_flag is set, then the
+    picture represents a frame.
+  * If pname:pStdReferenceInfo->flags.top_field_flag is set, then the
+    picture represents a field, specifically, the top field of the frame.
+  * If pname:pStdReferenceInfo->flags.bottom_field_flag is set, then the
+    picture represents a field, specifically, the bottom field of the frame.
+  * The image subregion used is determined according to the
+    <<decode-h264-picture-data-access,H.264 Decode Picture Data Access>>
+    section.
+  * The reconstructed picture is used to <<dpb-slot-states,activate>> the
+    <<dpb-slot,DPB slot>> with the index specified in
+    slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex.
+  * The reconstructed picture is associated with the
+    <<decode-h264-reference-info,H.264 reference information>> provided in
+    pname:pStdReferenceInfo.
+
+[[decode-h264-reference-info]]
+Std Reference Information::
+
+The members of the code:StdVideoDecodeH264ReferenceInfo structure pointed to
+by pname:pStdReferenceInfo are interpreted as follows:
+
+  * code:flags.top_field_flag is used to indicate whether the reference is
+    used as top field reference;
+  * code:flags.bottom_field_flag is used to indicate whether the reference
+    is used as bottom field reference;
+  * code:flags.used_for_long_term_reference is used to indicate whether the
+    picture is marked as "`used for long-term reference`" as defined in
+    section 8.2.5.1 of the <<itu-t-h264,ITU-T H.264 Specification>>;
+  * code:flags.is_non_existing is used to indicate whether the picture is
+    marked as "`non-existing`" as defined in section 8.2.5.2 of the
+    <<itu-t-h264,ITU-T H.264 Specification>>;
+  * all other members are interpreted as defined in section 8.2 of the
+    <<itu-t-h264,ITU-T H.264 Specification>>.
+
+include::{generated}/validity/structs/VkVideoDecodeH264DpbSlotInfoKHR.adoc[]
+--
+
+
+[[decode-h264-requirements]]
+=== H.264 Decode Requirements
+
+This section describes the required: H.264 decoding capabilities for
+physical devices that have at least one queue family that supports the video
+codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, as
+returned by flink:vkGetPhysicalDeviceQueueFamilyProperties2 in
+slink:VkQueueFamilyVideoPropertiesKHR::pname:videoCodecOperations.
+
+.Required <<video-std-header-version,Video Std Header Versions>>
+[options="header"]
+|====
+| Video Std Header Name | Version
+| `vulkan_video_codec_h264std_decode` | 1.0.0
+|====
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h265_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h265_extensions.adoc
new file mode 100644
index 0000000..1eb4ffb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_decode_h265_extensions.adoc
@@ -0,0 +1,698 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[decode-h265]]
+== H.265 Decode Operations
+
+Video decode operations using an <<decode-h265-profile,H.265 decode
+profile>> can: be used to decode elementary video stream sequences compliant
+to the <<itu-t-h265,ITU-T H.265 Specification>>.
+
+[NOTE]
+.Note
+====
+Refer to the <<preamble,Preamble>> for information on how the Khronos
+Intellectual Property Rights Policy relates to normative references to
+external materials not created by Khronos.
+====
+
+This process is performed according to the <<decode-operation-steps,video
+decode operation steps>> with the codec-specific semantics defined in
+section 8 of <<itu-t-h265,ITU-T H.265 Specification>>:
+
+  * Syntax elements, derived values, and other parameters are applied from
+    the following structures:
+  ** The code:StdVideoH265VideoParameterSet structure corresponding to the
+     <<decode-h265-active-vps,active VPS>> specifying the <<decode-h265-vps,
+     H.265 video parameter set>>.
+  ** The code:StdVideoH265SequenceParameterSet structure corresponding to
+     the <<decode-h265-active-sps,active SPS>> specifying the
+     <<decode-h265-sps, H.265 sequence parameter set>>.
+  ** The code:StdVideoH265PictureParameterSet structure corresponding to the
+     <<decode-h265-active-pps,active PPS>> specifying the <<decode-h265-pps,
+     H.265 picture parameter set>>.
+  ** The code:StdVideoDecodeH265PictureInfo structure specifying the
+     <<decode-h265-picture-info,H.265 picture information>>.
+  ** The code:StdVideoDecodeH265ReferenceInfo structures specifying the
+     <<decode-h265-reference-info,H.265 reference information>>
+     corresponding to the optional <<reconstructed-picture,reconstructed
+     picture>> and any <<active-reference-pictures,active reference
+     pictures>>.
+  * The contents of the provided video bitstream buffer range are
+    interpreted as defined in the <<decode-h265-bitstream-data-access,H.265
+    Decode Bitstream Data Access>> section.
+  * Picture data in the <<video-picture-resources,video picture resources>>
+    corresponding to the used <<decode-h265-active-reference-picture-info,
+    active reference pictures>>, <<decode-h265-output-picture-info,decode
+    output picture>>, and optional <<decode-h265-reconstructed-picture-info,
+    reconstructed picture>> is accessed as defined in the
+    <<decode-h265-picture-data-access,H.265 Decode Picture Data Access>>
+    section.
+
+If the parameters and the bitstream adhere to the syntactic and semantic
+requirements defined in the corresponding sections of the <<itu-t-h265,ITU-T
+H.265 Specification>>, as described above, and the <<dpb-slot,DPB slots>>
+associated with the <<active-reference-pictures,active reference pictures>>
+all refer to <<dpb-slot-states,valid picture references>>, then the video
+decode operation will complete successfully.
+Otherwise, the video decode operation may: complete
+<<decode-unsuccessful,unsuccessfully>>.
+
+
+[[decode-h265-bitstream-data-access]]
+=== H.265 Decode Bitstream Data Access
+
+The video bitstream buffer range should: contain a VCL NAL unit comprised of
+the slice segment headers and data of a picture representing a frame, as
+defined in sections 7.3.6 and 7.3.8, and this data is interpreted as defined
+in sections 7.4.7 and 7.4.9 of the <<itu-t-h265, ITU-T H.265
+Specification>>, respectively.
+
+The offsets provided in
+slink:VkVideoDecodeH265PictureInfoKHR::pname:pSliceSegmentOffsets should:
+specify the starting offsets corresponding to each slice segment header
+within the video bitstream buffer range.
+
+
+[[decode-h265-picture-data-access]]
+=== H.265 Decode Picture Data Access
+
+Accesses to image data within a video picture resource happen at the
+granularity indicated by
+slink:VkVideoCapabilitiesKHR::pname:pictureAccessGranularity, as returned by
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the used <<video-profiles,
+video profile>>.
+Accordingly, the complete image subregion of a
+<<decode-output-picture,decode output picture>>,
+<<reference-picture,reference picture>>, or
+<<reconstructed-picture,reconstructed picture>> accessed by video coding
+operations using an <<decode-h265-profile,H.265 decode profile>> is defined
+as the set of texels within the coordinate range:
+
+  {empty}:: [eq]#([0,pname:endX),[0,pname:endY))#
+
+Where:
+
+  * [eq]#pname:endX# equals [eq]#pname:codedExtent.width# rounded up to the
+    nearest integer multiple of pname:pictureAccessGranularity.width and
+    clamped to the width of the image subresource
+    <<video-image-subresource-reference,referred>> to by the corresponding
+    slink:VkVideoPictureResourceInfoKHR structure;
+  * [eq]#endY# equals [eq]#pname:codedExtent.height# rounded up to the
+    nearest integer multiple of pname:pictureAccessGranularity.height and
+    clamped to the height of the image subresource
+    <<video-image-subresource-reference, referred>> to by the corresponding
+    slink:VkVideoPictureResourceInfoKHR structure;
+
+Where pname:codedExtent is the member of the
+slink:VkVideoPictureResourceInfoKHR structure corresponding to the picture.
+
+In case of video decode operations using an <<decode-h265-profile,H.265
+decode profile>>, any access to a picture at the coordinates
+[eq]#(pname:x,pname:y)#, as defined by the <<itu-t-h265,ITU-T H.265
+Specification>>, is an access to the image subresource
+<<video-image-subresource-reference,referred>> to by the corresponding
+slink:VkVideoPictureResourceInfoKHR structure at the texel coordinates
+[eq]#(pname:x,pname:y)#.
+
+
+[[decode-h265-profile]]
+=== H.265 Decode Profile
+
+[open,refpage='VkVideoDecodeH265ProfileInfoKHR',desc='Structure specifying H.265 decode profile',type='structs']
+--
+A video profile supporting H.265 video decode operations is specified by
+setting slink:VkVideoProfileInfoKHR::pname:videoCodecOperation to
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and adding a
+sname:VkVideoDecodeH265ProfileInfoKHR structure to the
+slink:VkVideoProfileInfoKHR::pname:pNext chain.
+
+The sname:VkVideoDecodeH265ProfileInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265ProfileInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying
+    the H.265 codec profile IDC, as defined in section A3 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>.
+
+include::{generated}/validity/structs/VkVideoDecodeH265ProfileInfoKHR.adoc[]
+--
+
+
+=== H.265 Decode Capabilities
+
+[open,refpage='VkVideoDecodeH265CapabilitiesKHR',desc='Structure describing H.265 decode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for an <<decode-h265-profile,H.265 decode profile>>, the
+slink:VkVideoCapabilitiesKHR::pname:pNext chain must: include a
+sname:VkVideoDecodeH265CapabilitiesKHR structure that will be filled with
+the profile-specific capabilities.
+
+The sname:VkVideoDecodeH265CapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265CapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxLevelIdc is a code:StdVideoH265LevelIdc value specifying the
+    maximum H.265 level supported by the profile, where enum constant
+    `STD_VIDEO_H265_LEVEL_IDC_<major>_<minor>` identifies H.265 level
+    `<major>.<minor>` as defined in section A.4 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>.
+
+include::{generated}/validity/structs/VkVideoDecodeH265CapabilitiesKHR.adoc[]
+--
+
+
+[[decode-h265-parameter-sets]]
+=== H.265 Decode Parameter Sets
+
+<<video-session-parameters,Video session parameters>> objects created with
+the video codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR
+can: contain the following types of parameters:
+
+[[decode-h265-vps]]
+H.265 Video Parameter Sets (VPS)::
+
+Represented by code:StdVideoH265VideoParameterSet structures and interpreted
+as follows:
+
+  * code:reserved1, code:reserved2, and code:reserved3 are used only for
+    padding purposes and are otherwise ignored;
+  * code:vps_video_parameter_set_id is used as the key of the VPS entry;
+  * the code:max_latency_increase_plus1, code:max_dec_pic_buffering_minus1,
+    and code:max_num_reorder_pics members of the
+    code:StdVideoH265DecPicBufMgr structure pointed to by code:pDecPicBufMgr
+    correspond to `vps_max_latency_increase_plus1`,
+    `vps_max_dec_pic_buffering_minus1`, and `vps_max_num_reorder_pics`,
+    respectively, as defined in section 7.4.3.1 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>;
+  * the code:StdVideoH265HrdParameters structure pointed to by
+    code:pHrdParameters is interpreted as follows:
+  ** code:reserved is used only for padding purposes and is otherwise
+     ignored;
+  ** code:flags.fixed_pic_rate_general_flag is a bitmask where bit index
+     [eq]#i# corresponds to `fixed_pic_rate_general_flag[i]` as defined in
+     section E.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:flags.fixed_pic_rate_within_cvs_flag is a bitmask where bit index
+     [eq]#i# corresponds to `fixed_pic_rate_within_cvs_flag[i]` as defined
+     in section E.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:flags.low_delay_hrd_flag is a bitmask where bit index [eq]#i#
+     corresponds to `low_delay_hrd_flag[i]` as defined in section E.3.2 of
+     the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** if code:flags.nal_hrd_parameters_present_flag is set, then
+     code:pSubLayerHrdParametersNal is a pointer to an array of
+     [eq]#code:vps_max_sub_layers_minus1 + 1# number of
+     code:StdVideoH265SubLayerHrdParameters structures where
+     code:vps_max_sub_layers_minus1 is the corresponding member of the
+     encompassing code:StdVideoH265VideoParameterSet structure and each
+     element is interpreted as follows:
+  *** code:cbr_flag is a bitmask where bit index [eq]#i# corresponds to
+      `cbr_flag[i]` as defined in section E.3.3 of the <<itu-t-h265,ITU-T
+      H.265 Specification>>;
+  *** all other members of the code:StdVideoH265SubLayerHrdParameters
+      structure are interpreted as defined in section E.3.3 of the
+      <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** if code:flags.vcl_hrd_parameters_present_flag is set, then
+     code:pSubLayerHrdParametersVcl is a pointer to an array of
+     [eq]#code:vps_max_sub_layers_minus1 + 1# number of
+     code:StdVideoH265SubLayerHrdParameters structures where
+     code:vps_max_sub_layers_minus1 is the corresponding member of the
+     encompassing code:StdVideoH265VideoParameterSet structure and each
+     element is interpreted as follows:
+  *** code:cbr_flag is a bitmask where bit index [eq]#i# corresponds to
+      `cbr_flag[i]` as defined in section E.3.3 of the <<itu-t-h265,ITU-T
+      H.265 Specification>>;
+  *** all other members of the code:StdVideoH265SubLayerHrdParameters
+      structure are interpreted as defined in section E.3.3 of the
+      <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** all other members of code:StdVideoH265HrdParameters are interpreted as
+     defined in section E.3.2 of the <<itu-t-h265,ITU-T H.265
+     Specification>>;
+  * the code:StdVideoH265ProfileTierLevel structure pointed to by
+    code:pProfileTierLevel are interpreted as follows:
+  ** code:general_level_idc is one of the enum constants
+     `STD_VIDEO_H265_LEVEL_IDC_<major>_<minor>` identifying the H.265 level
+     `<major>.<minor>` as defined in section A.4 of the <<itu-t-h265,ITU-T
+     H.265 Specification>>;
+  ** all other members of code:StdVideoH265ProfileTierLevel are interpreted
+     as defined in section 7.4.4 of the <<itu-t-h265,ITU-T H.265
+     Specification>>;
+  * all other members of code:StdVideoH265VideoParameterSet are interpreted
+    as defined in section 7.4.3.1 of the <<itu-t-h265,ITU-T H.265
+    Specification>>.
+
+[[decode-h265-sps]]
+H.265 Sequence Parameter Sets (SPS)::
+
+Represented by code:StdVideoH265SequenceParameterSet structures and
+interpreted as follows:
+
+  * code:reserved1 and code:reserved2 are used only for padding purposes and
+    are otherwise ignored;
+  * the pair constructed from code:sps_video_parameter_set_id and
+    code:sps_seq_parameter_set_id is used as the key of the SPS entry;
+  * the code:StdVideoH265ProfileTierLevel structure pointed to by
+    code:pProfileTierLevel are interpreted as follows:
+  ** code:general_level_idc is one of the enum constants
+     `STD_VIDEO_H265_LEVEL_IDC_<major>_<minor>` identifying the H.265 level
+     `<major>.<minor>` as defined in section A.4 of the <<itu-t-h265,ITU-T
+     H.265 Specification>>;
+  ** all other members of code:StdVideoH265ProfileTierLevel are interpreted
+     as defined in section 7.4.4 of the <<itu-t-h265,ITU-T H.265
+     Specification>>;
+  * the code:max_latency_increase_plus1, code:max_dec_pic_buffering_minus1,
+    and code:max_num_reorder_pics members of the
+    code:StdVideoH265DecPicBufMgr structure pointed to by code:pDecPicBufMgr
+    correspond to `sps_max_latency_increase_plus1`,
+    `sps_max_dec_pic_buffering_minus1`, and `sps_max_num_reorder_pics`,
+    respectively, as defined in section 7.4.3.2 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>;
+  * if code:flags.sps_scaling_list_data_present_flag is set, then the
+    code:StdVideoH265ScalingLists structure pointed to by code:pScalingLists
+    is interpreted as follows:
+  ** code:ScalingList4x4, code:ScalingList8x8, code:ScalingList16x16, and
+     code:ScalingList32x32 correspond to `ScalingList[0]`, `ScalingList[1]`,
+     `ScalingList[2]`, and `ScalingList[3]`, respectively, as defined in
+     section 7.3.4 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:ScalingListDCCoef16x16 and code:ScalingListDCCoef32x32 correspond
+     to `scaling_list_dc_coef_minus8[0]` and
+     `scaling_list_dc_coef_minus8[1]`, respectively, as defined in section
+     7.3.4 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  * code:pShortTermRefPicSet is a pointer to an array of
+    code:num_short_term_ref_pic_sets number of
+    code:StdVideoH265ShortTermRefPicSet structures where each element is
+    interpreted as follows:
+  ** code:reserved1, code:reserved2, and code:reserved3 are used only for
+     padding purposes and are otherwise ignored;
+  ** code:used_by_curr_pic_flag is a bitmask where bit index [eq]#i#
+     corresponds to `used_by_curr_pic_flag[i]` as defined in section 7.4.8
+     of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:use_delta_flag is a bitmask where bit index [eq]#i# corresponds to
+     `use_delta_flag[i]` as defined in section 7.4.8 of the <<itu-t-h265,
+     ITU-T H.265 Specification>>;
+  ** code:used_by_curr_pic_s0_flag is a bitmask where bit index [eq]#i#
+     corresponds to `used_by_curr_pic_s0_flag[i]` as defined in section
+     7.4.8 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:used_by_curr_pic_s1_flag is a bitmask where bit index [eq]#i#
+     corresponds to `used_by_curr_pic_s1_flag[i]` as defined in section
+     7.4.8 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** all other members of code:StdVideoH265ShortTermRefPicSet are
+     interpreted as defined in section 7.4.8 of the <<itu-t-h265,ITU-T H.265
+     Specification>>;
+  * if code:flags.long_term_ref_pics_present_flag is set then the
+    code:StdVideoH265LongTermRefPicsSps structure pointed to by
+    code:pLongTermRefPicsSps is interpreted as follows:
+  ** code:used_by_curr_pic_lt_sps_flag is a bitmask where bit index [eq]#i#
+     corresponds to `used_by_curr_pic_lt_sps_flag[i]` as defined in section
+     7.4.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** all other members of code:StdVideoH265LongTermRefPicsSps are
+     interpreted as defined in section 7.4.3.2 of the <<itu-t-h265,ITU-T
+     H.265 Specification>>;
+  * if code:flags.vui_parameters_present_flag is set, then the
+    code:StdVideoH265SequenceParameterSetVui structure pointed to by
+    code:pSequenceParameterSetVui is interpreted as follows:
+  ** code:reserved1, code:reserved2, and code:reserved3 are used only for
+     padding purposes and are otherwise ignored;
+  ** the code:StdVideoH265HrdParameters structure pointed to by
+     code:pHrdParameters is interpreted as follows:
+  *** code:flags.fixed_pic_rate_general_flag is a bitmask where bit index
+      [eq]#i# corresponds to `fixed_pic_rate_general_flag[i]` as defined in
+      section E.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  *** code:flags.fixed_pic_rate_within_cvs_flag is a bitmask where bit index
+      [eq]#i# corresponds to `fixed_pic_rate_within_cvs_flag[i]` as defined
+      in section E.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  *** code:flags.low_delay_hrd_flag is a bitmask where bit index [eq]#i#
+      corresponds to `low_delay_hrd_flag[i]` as defined in section E.3.2 of
+      the <<itu-t-h265,ITU-T H.265 Specification>>;
+  *** if code:flags.nal_hrd_parameters_present_flag is set, then
+      code:pSubLayerHrdParametersNal is a pointer to an array of
+      [eq]#code:sps_max_sub_layers_minus1 + 1# number of
+      code:StdVideoH265SubLayerHrdParameters structures where
+      code:sps_max_sub_layers_minus1 is the corresponding member of the
+      encompassing code:StdVideoH265SequenceParameterSet structure and each
+      element is interpreted as follows:
+  **** code:cbr_flag is a bitmask where bit index [eq]#i# corresponds to
+       `cbr_flag[i]` as defined in section E.3.3 of the <<itu-t-h265,ITU-T
+       H.265 Specification>>;
+  **** all other members of the code:StdVideoH265SubLayerHrdParameters
+       structure are interpreted as defined in section E.3.3 of the
+       <<itu-t-h265,ITU-T H.265 Specification>>;
+  *** if code:flags.vcl_hrd_parameters_present_flag is set, then
+      code:pSubLayerHrdParametersVcl is a pointer to an array of
+      [eq]#code:sps_max_sub_layers_minus1 + 1# number of
+      code:StdVideoH265SubLayerHrdParameters structures where
+      code:sps_max_sub_layers_minus1 is the corresponding member of the
+      encompassing code:StdVideoH265SequenceParameterSet structure and each
+      element is interpreted as follows:
+  **** code:cbr_flag is a bitmask where bit index [eq]#i# corresponds to
+       `cbr_flag[i]` as defined in section E.3.3 of the <<itu-t-h265,ITU-T
+       H.265 Specification>>;
+  **** all other members of the code:StdVideoH265SubLayerHrdParameters
+       structure are interpreted as defined in section E.3.3 of the
+       <<itu-t-h265,ITU-T H.265 Specification>>;
+  *** all other members of code:StdVideoH265HrdParameters are interpreted as
+      defined in section E.3.2 of the <<itu-t-h265,ITU-T H.265
+      Specification>>;
+  ** all other members of code:pSequenceParameterSetVui are interpreted as
+     defined in section E.3.1 of the <<itu-t-h265,ITU-T H.265
+     Specification>>;
+  * if code:flags.sps_palette_predictor_initializer_present_flag is set,
+    then the code:PredictorPaletteEntries member of the
+    code:StdVideoH265PredictorPaletteEntries structure pointed to by
+    code:pPredictorPaletteEntries is interpreted as defined in section
+    7.4.9.13 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  * all other members of code:StdVideoH265SequenceParameterSet are
+    interpreted as defined in section 7.4.3.1 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>.
+
+[[decode-h265-pps]]
+H.265 Picture Parameter Sets (PPS)::
+
+Represented by code:StdVideoH265PictureParameterSet structures and
+interpreted as follows:
+
+  * code:reserved1, code:reserved2, and code:reserved3 are used only for
+    padding purposes and are otherwise ignored;
+  * the triplet constructed from code:sps_video_parameter_set_id,
+    code:pps_seq_parameter_set_id, and code:pps_pic_parameter_set_id is used
+    as the key of the PPS entry;
+  * if code:flags.pps_scaling_list_data_present_flag is set, then the
+    code:StdVideoH265ScalingLists structure pointed to by code:pScalingLists
+    is interpreted as follows:
+  ** code:ScalingList4x4, code:ScalingList8x8, code:ScalingList16x16, and
+     code:ScalingList32x32 correspond to `ScalingList[0]`, `ScalingList[1]`,
+     `ScalingList[2]`, and `ScalingList[3]`, respectively, as defined in
+     section 7.3.4 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  ** code:ScalingListDCCoef16x16 and code:ScalingListDCCoef32x32 correspond
+     to `scaling_list_dc_coef_minus8[0]` and
+     `scaling_list_dc_coef_minus8[1]`, respectively, as defined in section
+     7.3.4 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  * if code:flags.pps_palette_predictor_initializer_present_flag is set,
+    then the code:PredictorPaletteEntries member of the
+    code:StdVideoH265PredictorPaletteEntries structure pointed to by
+    code:pPredictorPaletteEntries is interpreted as defined in section
+    7.4.9.13 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  * all other members of code:StdVideoH265PictureParameterSet are
+    interpreted as defined in section 7.4.3.3 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>.
+
+[open,refpage='VkVideoDecodeH265SessionParametersCreateInfoKHR',desc='Structure specifies H.265 decoder parameter set information',type='structs']
+--
+When a <<video-session-parameters,video session parameters>> object is
+created with the codec operation
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, the
+slink:VkVideoSessionParametersCreateInfoKHR::pname:pNext chain must: include
+a sname:VkVideoDecodeH265SessionParametersCreateInfoKHR structure specifying
+the capacity and initial contents of the object.
+
+The sname:VkVideoDecodeH265SessionParametersCreateInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265SessionParametersCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxStdVPSCount is the maximum number of <<decode-h265-vps,H.265
+    VPS>> entries the created sname:VkVideoSessionParametersKHR can:
+    contain.
+  * pname:maxStdSPSCount is the maximum number of <<decode-h265-sps,H.265
+    SPS>> entries the created sname:VkVideoSessionParametersKHR can:
+    contain.
+  * pname:maxStdPPSCount is the maximum number of <<decode-h265-pps,H.265
+    PPS>> entries the created sname:VkVideoSessionParametersKHR can:
+    contain.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure specifying
+    H.265 parameters to add upon object creation.
+
+include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeH265SessionParametersAddInfoKHR',desc='Structure specifies H.265 decoder parameter set information',type='structs']
+--
+The sname:VkVideoDecodeH265SessionParametersAddInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoDecodeH265SessionParametersAddInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdVPSCount is the number of elements in the pname:pStdVPSs array.
+  * pname:pStdVPSs is a pointer to an array of
+    code:StdVideoH265VideoParameterSet structures describing the
+    <<decode-h265-vps,H.265 VPS>> entries to add.
+  * pname:stdSPSCount is the number of elements in the pname:pStdSPSs array.
+  * pname:pStdSPSs is a pointer to an array of
+    code:StdVideoH265SequenceParameterSet structures describing the
+    <<decode-h265-sps,H.265 SPS>> entries to add.
+  * pname:stdPPSCount is the number of elements in the pname:pStdPPSs array.
+  * pname:pStdPPSs is a pointer to an array of
+    code:StdVideoH265PictureParameterSet structures describing the
+    <<decode-h265-pps,H.265 PPS>> entries to add.
+
+This structure can: be specified in the following places:
+
+  * In the pname:pParametersAddInfo member of the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+    specified in the pname:pNext chain of
+    slink:VkVideoSessionParametersCreateInfoKHR used to create a
+    <<video-session-parameters,video session parameters>> object.
+    In this case, if the video codec operation the video session parameters
+    object is created with is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then it defines the
+    set of initial parameters to add to the created object (see
+    <<creating-video-session-parameters,Creating Video Session
+    Parameters>>).
+  * In the pname:pNext chain of slink:VkVideoSessionParametersUpdateInfoKHR.
+    In this case, if the video codec operation the
+    <<video-session-parameters,video session parameters>> object to be
+    updated was created with is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then it defines the
+    set of parameters to add to it (see
+    <<video-session-parameters-update,Updating Video Session Parameters>>).
+
+.Valid Usage
+****
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04833]]
+    The pname:vps_video_parameter_set_id member of each
+    code:StdVideoH265VideoParameterSet structure specified in the elements
+    of pname:pStdVPSs must: be unique within pname:pStdVPSs
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04834]]
+    The pair constructed from the pname:sps_video_parameter_set_id and
+    pname:sps_seq_parameter_set_id members of each
+    code:StdVideoH265SequenceParameterSet structure specified in the
+    elements of pname:pStdSPSs must: be unique within pname:pStdSPSs
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04835]]
+    The triplet constructed from the pname:sps_video_parameter_set_id,
+    pname:pps_seq_parameter_set_id, and pname:pps_pic_parameter_set_id
+    members of each code:StdVideoH265PictureParameterSet structure specified
+    in the elements of pname:pStdPPSs must: be unique within pname:pStdPPSs
+****
+
+include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersAddInfoKHR.adoc[]
+--
+
+
+=== H.265 Decoding Parameters
+
+[open,refpage='VkVideoDecodeH265PictureInfoKHR',desc='Structure specifies H.265 picture information when decoding a frame',type='structs']
+--
+The sname:VkVideoDecodeH265PictureInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265PictureInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdPictureInfo is a pointer to a
+    code:StdVideoDecodeH265PictureInfo structure specifying
+    <<decode-h265-picture-info,H.265 picture information>>.
+  * pname:sliceSegmentCount is the number of elements in
+    pname:pSliceSegmentOffsets.
+  * pname:pSliceSegmentOffsets is a pointer to an array of
+    pname:sliceSegmentCount offsets specifying the start offset of the slice
+    segments of the picture within the video bitstream buffer range
+    specified in slink:VkVideoDecodeInfoKHR.
+
+This structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR to
+specify the codec-specific picture information for an <<decode-h265,H.265
+decode operation>>.
+
+[[decode-h265-output-picture-info]]
+Decode Output Picture Information::
+
+When this structure is specified in the pname:pNext chain of the
+slink:VkVideoDecodeInfoKHR structure passed to flink:vkCmdDecodeVideoKHR,
+the information related to the <<decode-output-picture-info,decode output
+picture>> is defined as follows:
+
+  * The image subregion used is determined according to the
+    <<decode-h265-picture-data-access,H.265 Decode Picture Data Access>>
+    section.
+  * The decode output picture is associated with the
+    <<decode-h265-picture-info,H.265 picture information>> provided in
+    pname:pStdPictureInfo.
+
+[[decode-h265-picture-info]]
+Std Picture Information::
+
+The members of the code:StdVideoDecodeH265PictureInfo structure pointed to
+by pname:pStdPictureInfo are interpreted as follows:
+
+  * code:reserved is used only for padding purposes and is otherwise
+    ignored;
+  * code:flags.IrapPicFlag as defined in section 3.73 of the <<itu-t-h265,
+    ITU-T H.265 Specification>>;
+  * code:flags.IdrPicFlag as defined in section 3.67 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>;
+  * code:flags.IsReference as defined in section 3.132 of the <<itu-t-h265,
+    ITU-T H.265 Specification>>;
+  * code:sps_video_parameter_set_id, code:pps_seq_parameter_set_id, and
+    code:pps_pic_parameter_set_id are used to identify the active parameter
+    sets, as described below;
+  * code:PicOrderCntVal as defined in section 8.3.1 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>;
+  * code:NumBitsForSTRefPicSetInSlice is the number of bits used in
+    `st_ref_pic_set` when `short_term_ref_pic_set_sps_flag` is `0`, or `0`
+    otherwise, as defined in sections 7.4.7 and 7.4.8 of the <<itu-t-h265,
+    ITU-T H.265 Specification>>;
+  * code:NumDeltaPocsOfRefRpsIdx is the value of `NumDeltaPocs[RefRpsIdx]`
+    when `short_term_ref_pic_set_sps_flag` is `1`, or `0` otherwise, as
+    defined in sections 7.4.7 and 7.4.8 of the <<itu-t-h265,ITU-T H.265
+    Specification>>;
+  * code:RefPicSetStCurrBefore, code:RefPicSetStCurrAfter, and
+    code:RefPicSetLtCurr are interpreted as defined in section 8.3.2 of the
+    <<itu-t-h265,ITU-T H.265 Specification>> where each element of these
+    arrays either identifies an
+    <<decode-active-reference-picture-info,active reference picture>> using
+    its <<dpb-slot,DPB slot>> index or contains the value 0xFF to indicate
+    "no reference picture";
+  * all other members are interpreted as defined in section 8.3.2 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>.
+
+Active Parameter Sets::
+
+The members of the code:StdVideoDecodeH265PictureInfo structure pointed to
+by pname:pStdPictureInfo are used to select the active parameter sets to use
+from the bound video session parameters object, as follows:
+
+  * [[decode-h265-active-vps]] The _active VPS_ is the
+    <<decode-h265-vps,VPS>> identified by the key specified in
+    code:StdVideoDecodeH265PictureInfo::code:sps_video_parameter_set_id.
+  * [[decode-h265-active-sps]] The _active SPS_ is the
+    <<decode-h265-sps,SPS>> identified by the key specified by the pair
+    constructed from
+    code:StdVideoDecodeH265PictureInfo::code:sps_video_parameter_set_id and
+    code:StdVideoDecodeH265PictureInfo::code:pps_seq_parameter_set_id.
+  * [[decode-h265-active-pps]] The _active PPS_ is the
+    <<decode-h265-pps,PPS>> identified by the key specified by the triplet
+    constructed from
+    code:StdVideoDecodeH265PictureInfo::code:sps_video_parameter_set_id,
+    code:StdVideoDecodeH265PictureInfo::code:pps_seq_parameter_set_id, and
+    code:StdVideoDecodeH265PictureInfo::code:pps_pic_parameter_set_id.
+
+include::{generated}/validity/structs/VkVideoDecodeH265PictureInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeH265DpbSlotInfoKHR',desc='Structure specifies H.265 DPB information when decoding a frame',type='structs']
+--
+The sname:VkVideoDecodeH265DpbSlotInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265DpbSlotInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdReferenceInfo is a pointer to a
+    code:StdVideoDecodeH265ReferenceInfo structure specifying reference
+    picture information described in section 8.3 of the <<itu-t-h265,ITU-T
+    H.265 Specification>>.
+
+This structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, if not `NULL`, and
+the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots to specify the
+codec-specific reference picture information for an <<decode-h265,H.265
+decode operation>>.
+
+[[decode-h265-active-reference-picture-info]]
+Active Reference Picture Information::
+
+When this structure is specified in the pname:pNext chain of the elements of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots, one element is added to
+the list of <<decode-active-reference-picture-info,active reference
+pictures>> used by the video decode operation for each element of
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots as follows:
+
+  * The image subregion used is determined according to the
+    <<decode-h265-picture-data-access,H.265 Decode Picture Data Access>>
+    section.
+  * The reference picture is associated with the <<dpb-slot,DPB slot>> index
+    specified in the pname:slotIndex member of the corresponding element of
+    slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots.
+  * The reference picture is associated with the
+    <<decode-h265-reference-info,H.265 reference information>> provided in
+    pname:pStdReferenceInfo.
+
+[[decode-h265-reconstructed-picture-info]]
+Reconstructed Picture Information::
+
+When this structure is specified in the pname:pNext chain of
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot, the information
+related to the <<decode-reconstructed-picture-info,reconstructed picture>>
+is defined as follows:
+
+  * The image subregion used is determined according to the
+    <<decode-h265-picture-data-access,H.265 Decode Picture Data Access>>
+    section.
+  * The reconstructed picture is used to <<dpb-slot-states,activate>> the
+    <<dpb-slot,DPB slot>> with the index specified in
+    slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex.
+  * The reconstructed picture is associated with the
+    <<decode-h265-reference-info,H.265 reference information>> provided in
+    pname:pStdReferenceInfo.
+
+[[decode-h265-reference-info]]
+Std Reference Information::
+
+The members of the code:StdVideoDecodeH265ReferenceInfo structure pointed to
+by pname:pStdReferenceInfo are interpreted as follows:
+
+  * code:flags.used_for_long_term_reference is used to indicate whether the
+    picture is marked as "`used for long-term reference`" as defined in
+    section 8.3.2 of the <<itu-t-h265,ITU-T H.265 Specification>>;
+  * code:flags.unused_for_reference is used to indicate whether the picture
+    is marked as "`unused for reference`" as defined in section 8.3.2 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>;
+  * all other members are interpreted as defined in section 8.3 of the
+    <<itu-t-h265,ITU-T H.265 Specification>>.
+
+include::{generated}/validity/structs/VkVideoDecodeH265DpbSlotInfoKHR.adoc[]
+--
+
+
+[[decode-h265-requirements]]
+=== H.265 Decode Requirements
+
+This section describes the required: H.265 decoding capabilities for
+physical devices that have at least one queue family that supports the video
+codec operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, as
+returned by flink:vkGetPhysicalDeviceQueueFamilyProperties2 in
+slink:VkQueueFamilyVideoPropertiesKHR::pname:videoCodecOperations.
+
+.Required <<video-std-header-version,Video Std Header Versions>>
+[options="header"]
+|====
+| Video Std Header Name | Version
+| `vulkan_video_codec_h265std_decode` | 1.0.0
+|====
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_encode_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_extensions.adoc
new file mode 100644
index 0000000..77c8f03
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_extensions.adoc
@@ -0,0 +1,738 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[video-encode-operations]]
+== Video Encode Operations
+
+Before the application can start recording Vulkan command buffers for the
+Video Encode Operations, it must: do the following, beforehand:
+
+  . Ensure that the implementation can encode the Video Content by querying
+    the supported codec operations and profiles using
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2.
+  . By using flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR and providing
+    one or more video profiles, choose the Vulkan formats supported by the
+    implementation.
+    The formats for <<encode-input-picture,input>> and
+    <<reference-picture,reference>> pictures must: be queried and chosen
+    separately.
+    Refer to the section on <<video-format-capabilities,Video Format
+    Capabilities>>.
+  . Before creating an image to be used as a video picture resource, obtain
+    the supported image creation parameters by querying with
+    flink:vkGetPhysicalDeviceFormatProperties2 and
+    flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the
+    reported formats and adding slink:VkVideoProfileListInfoKHR to the
+    pname:pNext chain of slink:VkFormatProperties2.
+    When querying the parameters with
+    flink:vkGetPhysicalDeviceImageFormatProperties2 for images targeting
+    <<encode-input-picture,input>> and <<reference-picture,reference (DPB)>>
+    pictures, the slink:VkPhysicalDeviceImageFormatInfo2::pname:usage field
+    should contain ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR and
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, respectively.
+  . Create none, some, or all of the required <<VkImage,images>> for the
+    <<encode-input-picture,input>> and <<reference-picture,reference>>
+    pictures.
+    More Video Picture Resources can: be created at some later point if
+    needed while processing the content to be encoded.
+    Also, if the size of the picture to be encoded is expected to change,
+    the images can: be created based on the maximum expected content size.
+  . Create the <<video-session,video session>> to be used for video encode
+    operations.
+    Before creating the Encode Video Session, the encode capabilities
+    should: be queried with flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to
+    obtain the limits of the parameters allowed by the implementation for a
+    particular codec profile.
+  . Bind memory resources with the encode video session by calling
+    flink:vkBindVideoSessionMemoryKHR.
+    The video session cannot: be used until memory resources are allocated
+    and bound to it.
+    In order to determine the required memory sizes and heap types of the
+    device memory allocations, flink:vkGetVideoSessionMemoryRequirementsKHR
+    should: be called.
+  . Create one or more <<video-session-parameters,Video Session Parameter
+    objects>> for use across command buffer recording operations, if
+    required by the codec extension in use.
+    These objects must: be created against a <<video-session,video session>>
+    with the parameters required by the codec.
+    Each <<video-session-parameters,Video Session Parameter object>> created
+    is a child object of the associated <<video-session, Session object>>
+    and cannot: be bound in the command buffer with any other
+    <<video-session,Session Object>>.
+
+
+The recording of Video Encode Commands against a Vulkan Command Buffer
+consists of the following sequence:
+
+  . flink:vkCmdBeginVideoCodingKHR starts the recording of one or more Video
+    Encode operations in the command buffer.
+    For each Video Encode Command operation, a Video Session must: be bound
+    to the command buffer within this command.
+    This command establishes a Vulkan Video Encode Context that consists of
+    the bound Video Session Object, Session Parameters Object, and the
+    required Video Picture Resources.
+    The established Video Encode Context is in effect until the
+    flink:vkCmdEndVideoCodingKHR command is recorded.
+    If more Video Encode operations are to be required after the
+    flink:vkCmdEndVideoCodingKHR command, another Video Encode Context can:
+    be started with the flink:vkCmdBeginVideoCodingKHR command.
+  . flink:vkCmdEncodeVideoKHR specifies one or more frames to be encoded.
+    The slink:VkVideoEncodeInfoKHR parameters, and the codec extension
+    structures chained to this, specify the details of the encode operation.
+  . flink:vkCmdControlVideoCodingKHR records operations against the encoded
+    data, encoding device, or the Video Session state.
+  . flink:vkCmdEndVideoCodingKHR signals the end of the recording of the
+    Vulkan Video Encode Context, as established by
+    flink:vkCmdBeginVideoCodingKHR.
+
+In addition to the above, the following commands can: be recorded between
+flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR:
+
+  * Query operations
+  * Global Memory Barriers
+  * Buffer Memory Barriers
+  * Image Memory Barriers (these must: be used to transition the Video
+    Picture Resources to the proper
+    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR and
+    ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR layouts).
+  * Pipeline Barriers
+  * Events
+  * Timestamps
+  * Device Groups (device mask)
+
+The following Video Encode related commands must: be recorded *outside* the
+Vulkan Video Encode Context established with the
+flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR commands:
+
+  * Sparse Memory Binding
+  * Copy Commands
+  * Clear Commands
+
+
+[[encode-input-picture]]
+=== Encode Input Picture
+
+The primary source of input pixels for the video encoding process is the
+_Encode Input Picture_, represented by a slink:VkImageView.
+It may: also be a direct target of
+ifdef::VK_KHR_video_decode_queue[]
+video decode,
+endif::VK_KHR_video_decode_queue[]
+graphics, or compute operations
+ifdef::VK_KHR_surface[]
+, or with <<wsi, Window System Integration>> APIs
+endif::VK_KHR_surface[]
+.
+
+
+=== Capabilities
+
+[open,refpage='VkVideoEncodeCapabilitiesKHR',desc='Structure specifying encode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
+pname:pVideoProfile->videoCodecOperation specified as one of the encode
+operation bits, the slink:VkVideoEncodeCapabilitiesKHR structure must: be
+included in the pname:pNext chain of the slink:VkVideoCapabilitiesKHR
+structure to retrieve capabilities specific to video encoding.
+
+The sname:VkVideoEncodeCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoEncodeCapabilityFlagBitsKHR
+    describing supported encoding features.
+  * pname:rateControlModes is a bitmask of
+    elink:VkVideoEncodeRateControlModeFlagBitsKHR indicating supported rate
+    control modes.
+  * pname:maxRateControlLayers indicates the maximum number of rate control
+    layers supported.
+  * pname:maxBitrate indicates the maximum supported bitrate.
+  * pname:maxQualityLevels indicates the number of discrete video encode
+    quality levels supported.
+    Implementations must: report at least 1.
+  * pname:encodeInputPictureGranularity indicates the granularity at which
+    <<encode-input-picture,encode input picture>> data is encoded.
+  * pname:supportedEncodeFeedbackFlags is a bitmask of
+    elink:VkVideoEncodeFeedbackFlagBitsKHR values specifying the supported
+    flags for <<queries-video-encode-feedback,video encode feedback
+    queries>>.
+
+Implementations must: include support for at least
+ename:VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR and
+ename:VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR in
+pname:supportedEncodeFeedbackFlags.
+
+The input content and encode resolution (specified in
+slink:VkVideoEncodeInfoKHR::pname:codedExtent) may not be aligned with the
+codec-specific coding block size.
+For example, the input content may be 1920x1080 and the coding block size
+may be 16x16 pixel blocks.
+In this example, the content is horizontally aligned with the coding block
+size, but not vertically aligned with the coding block size.
+Encoding of the last row of blocks may be impacted by contents of the input
+image in pixel rows 1081 to 1088 (the next vertical alignment with the
+coding block size).
+In general, to ensure efficient encoding for the last row/column of blocks,
+and/or to ensure consistent encoding results between repeated encoding of
+the same input content, these extra pixel rows/columns should be filled to
+known values up to the coding block size alignment before encoding
+operations are performed.
+Some implementations support performing auto-fill of unaligned pixels beyond
+a specific alignment for the purposes of encoding, which is reported in
+pname:encodeInputPictureGranularity.
+For example, if an implementation reports 1x1 in
+pname:encodeInputPictureGranularity, then the implementation will perform
+auto-fill for any unaligned pixels beyond the encode resolution up to the
+next coding block size.
+For a coding block size of 16x16, if the implementation reports 16x16 in
+pname:encodeInputPictureGranularity, then it is the application's
+responsibility to fill any unaligned pixels, if desired.
+When the application does not fill these unaligned pixels, there may: be an
+impact on the encoding efficiency but there will be no effect on the
+validity of the generated bitstream.
+If the implementation reports 8x8 in pname:encodeInputPictureGranularity,
+then for the 1920x1080 example, since the content is aligned to 8 pixels
+vertically, the implementation will auto-fill pixel rows 1081 to 1088 (up to
+the 16x16 coding block size in the example).
+The auto-fill value(s) are implementation-specific.
+The auto-fill value(s) are not written to the input image memory, but are
+used as part of the encoding operation on the input image.
+
+include::{generated}/validity/structs/VkVideoEncodeCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeCapabilityFlagsKHR',desc='Bitmask of VkVideoEncodeCapabilityFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeCapabilityFlagsKHR.adoc[]
+
+tname:VkVideoEncodeCapabilityFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoEncodeCapabilityFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeCapabilityFlagBitsKHR',desc='Video encode capability flags',type='enums']
+--
+Bits which may: be set in slink:VkVideoEncodeCapabilitiesKHR::pname:flags,
+indicating the encoding tools supported, are:
+
+include::{generated}/api/enums/VkVideoEncodeCapabilityFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR
+    indicates that the implementation supports the use of
+    slink:VkVideoEncodeInfoKHR::pname:precedingExternallyEncodedBytes.
+  * ename:VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR
+    indicates that the implementation is able to detect and report when the
+    destination video bitstream buffer range provided by the application is
+    not sufficiently large to fit the encoded bitstream data produced by a
+    video encode operation by reporting the
+    ename:VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR
+    <<query-result-status-codes,query result status code>>.
++
+[NOTE]
+.Note
+====
+Some implementations may: not be able to reliably detect insufficient
+bitstream buffer range conditions in all situations.
+Such implementations will not report support for the
+ename:VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR
+encode capability flag for the video profile, but may: still report the
+ename:VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR query
+result status code in certain cases.
+Applications should: always check for the specific query result status code
+ename:VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR even
+when this encode capability flag is not supported by the implementation for
+the video profile in question.
+However, applications must: not assume that a different negative query
+result status code indicating an unsuccessful completion of a video encode
+operation is not the result of an insufficient bitstream buffer condition
+unless this encode capability flag is supported.
+====
+--
+
+
+=== Video Encode Quality Levels
+
+[open,refpage='vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR',desc='Query video encode quality level properties',type='protos']
+--
+To query properties for a specific video encode quality level supported by a
+video encode profile, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device to query the video encode
+    quality level properties for.
+  * pname:pQualityLevelInfo is a pointer to a
+    slink:VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR structure
+    specifying the video encode profile and quality level to query
+    properties for.
+  * pname:pQualityLevelProperties is a pointer to a
+    slink:VkVideoEncodeQualityLevelPropertiesKHR structure in which the
+    properties are returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.adoc[]
+--
+
+
+[open,refpage='VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR',desc='Structure describing the video encode profile and quality level to query properties for',type='structs']
+--
+The sname:VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileInfoKHR
+    structure specifying the video profile to query the video encode quality
+    level properties for.
+  * pname:qualityLevel is the video encode quality level to query properties
+    for.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR.adoc[]
+--
+
+
+[open,refpage='VkVideoEncodeQualityLevelPropertiesKHR',desc='Structure describing the video encode quality level properties',type='structs']
+--
+The sname:VkVideoEncodeQualityLevelPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeQualityLevelPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:preferredRateControlMode is a
+    elink:VkVideoEncodeRateControlModeFlagBitsKHR value indicating the
+    preferred rate control mode to use with the video encode quality level.
+  * pname:preferredRateControlLayerCount indicates the preferred number of
+    rate control layers to use with the quality level.
+
+include::{generated}/validity/structs/VkVideoEncodeQualityLevelPropertiesKHR.adoc[]
+--
+
+
+[open,refpage='VkVideoEncodeQualityLevelInfoKHR',desc='Structure specifying used video encode quality level',type='structs']
+--
+The sname:VkVideoEncodeQualityLevelInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeQualityLevelInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:qualityLevel is the used video encode quality level.
+
+This structure can: be specified in the following places:
+
+  * In the pname:pNext chain of slink:VkVideoSessionParametersCreateInfoKHR
+    to specify the video encode quality level to use for a video session
+    parameters object created for a video encode session.
+    If no instance of this structure is included in the pname:pNext chain of
+    slink:VkVideoSessionParametersCreateInfoKHR, then the video session
+    parameters object is created with a video encode quality level of zero.
+  * In the pname:pNext chain of slink:VkVideoCodingControlInfoKHR to change
+    the video encode quality level state of the bound video session.
+
+include::{generated}/validity/structs/VkVideoEncodeQualityLevelInfoKHR.adoc[]
+--
+
+
+=== Retrieving Encoded Session Parameters
+
+Any codec-specific parameters stored in video session parameters objects
+may: need to be separately encoded and included in the final video bitstream
+data, depending on the used video compression standard.
+In such cases the application must: call the
+flink:vkGetEncodedVideoSessionParametersKHR command to retrieve the encoded
+parameter data from the used video session parameters object in order to be
+able to produce a compliant video bitstream.
+
+[open,refpage='vkGetEncodedVideoSessionParametersKHR',desc='Get encoded parameter sets from a video session parameters object',type='protos']
+--
+Encoded parameter data can: be retrieved from a video session parameters
+object created with a video encode operation using the command:
+
+include::{generated}/api/protos/vkGetEncodedVideoSessionParametersKHR.adoc[]
+
+  * pname:device is the logical device that owns the video session
+    parameters object.
+  * pname:pVideoSessionParametersInfo is a pointer to a
+    slink:VkVideoEncodeSessionParametersGetInfoKHR structure specifying the
+    parameters of the encoded parameter data to retrieve.
+  * pname:pFeedbackInfo is either `NULL` or a pointer to a
+    slink:VkVideoEncodeSessionParametersFeedbackInfoKHR structure in which
+    feedback about the requested parameter data is returned.
+  * pname:pDataSize is a pointer to a code:size_t value related to the
+    amount of encode parameter data returned, as described below.
+  * pname:pData is either `NULL` or a pointer to a buffer to write the
+    encoded parameter data to.
+
+If pname:pData is `NULL`, then the size of the encoded parameter data, in
+bytes, that can: be retrieved is returned in pname:pDataSize.
+Otherwise, pname:pDataSize must: point to a variable set by the application
+to the size of the buffer, in bytes, pointed to by pname:pData, and on
+return the variable is overwritten with the number of bytes actually written
+to pname:pData.
+If pname:pDataSize is less than the size of the encoded parameter data that
+can: be retrieved, then no data will be written to pname:pData, zero will be
+written to pname:pDataSize, and ename:VK_INCOMPLETE will be returned instead
+of ename:VK_SUCCESS, to indicate that no encoded parameter data was
+returned.
+
+If pname:pFeedbackInfo is not `NULL` then the members of the
+slink:VkVideoEncodeSessionParametersFeedbackInfoKHR structure and any
+additional structures included in its pname:pNext chain that are applicable
+to the video session parameters object specified in
+pname:pVideoSessionParametersInfo::pname:videoSessionParameters will be
+filled with feedback about the requested parameter data on all successful
+calls to this command.
+
+[NOTE]
+.Note:
+====
+This includes the cases when pname:pData is `NULL` or when
+ename:VK_INCOMPLETE is returned by the command, and enables the application
+to determine whether the implementation overrode any of the requested video
+session parameters without actually needing to retrieve the encoded
+parameter data itself.
+====
+
+include::{generated}/validity/protos/vkGetEncodedVideoSessionParametersKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeSessionParametersGetInfoKHR',desc='Structure specifying parameters for retrieving encoded video session parameter data',type='structs']
+--
+The sname:VkVideoEncodeSessionParametersGetInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeSessionParametersGetInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoSessionParameters is the slink:VkVideoSessionParametersKHR
+    object to retrieve encoded parameter data from.
+
+Depending on the used video encode operation, additional codec-specific
+structures may: need to be included in the pname:pNext chain of this
+structure to identify the specific video session parameters to retrieve
+encoded parameter data for, as described in the corresponding sections.
+
+include::{generated}/validity/structs/VkVideoEncodeSessionParametersGetInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeSessionParametersFeedbackInfoKHR',desc='Structure providing feedback about the requested video session parameters',type='structs']
+--
+The sname:VkVideoEncodeSessionParametersFeedbackInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeSessionParametersFeedbackInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:hasOverrides indicates whether any of the requested parameter data
+    were overridden by the implementation.
+
+Depending on the used video encode operation, additional codec-specific
+structures may: need to be included in the pname:pNext chain of this
+structure to capture feedback information about the requested parameter
+data, as described in the corresponding sections.
+
+include::{generated}/validity/structs/VkVideoEncodeSessionParametersFeedbackInfoKHR.adoc[]
+--
+
+
+=== Video Encode Commands
+
+[open,refpage='vkCmdEncodeVideoKHR',desc='Encode operation for bitstream generation',type='protos']
+--
+To launch video encode operations, call:
+
+include::{generated}/api/protos/vkCmdEncodeVideoKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer to be filled with this
+    function for encoding to generate a bitstream.
+  * pname:pEncodeInfo is a pointer to a slink:VkVideoEncodeInfoKHR
+    structure.
+
+Each call issues one or more video encode operations.
+The implicit parameter pname:opCount corresponds to the number of video
+encode operations issued by the command.
+After calling this command, the
+<<queries-operation-active-query-index,active query index>> of each
+<<queries-operation-active,active>> query is incremented by pname:opCount.
+
+Currently each call to this command results in the issue of a single video
+encode operation.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEncodeVideoKHR-opCount-07174]]
+    For each <<queries-operation-active,active>> query, the
+    <<queries-operation-active-query-index,active query index>>
+    corresponding to the query type of that query plus pname:opCount must:
+    be less than or equal to the
+    <<queries-operation-last-activatable-query-index,last activatable query
+    index>> corresponding to the query type of that query plus one
+****
+
+include::{generated}/validity/protos/vkCmdEncodeVideoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeInfoKHR',desc='Structure to chain codec-specific structures to',type='structs']
+--
+The sname:VkVideoEncodeInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is a pointer to a structure extending this structure.
+    A codec-specific extension structure must: be chained to specify what
+    bitstream unit to generate with this encode operation.
+  * pname:flags is reserved for future use.
+  * pname:dstBuffer is the destination video bitstream buffer to write the
+    encoded bitstream to.
+  * pname:dstBufferOffset is the starting offset in bytes from the start of
+    pname:dstBuffer to write the encoded bitstream to.
+    pname:dstBufferOffset's value must: be aligned to
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferOffsetAlignment,
+    as reported by the implementation.
+  * pname:dstBufferRange is the maximum size in bytes of the encoded
+    bitstream written to pname:dstBuffer, starting from
+    pname:dstBufferOffset.
+    pname:dstBufferRange's value must: be aligned to
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferSizeAlignment, as
+    reported by the implementation.
+  * pname:srcPictureResource is the Picture Resource of the
+    <<encode-input-picture,Input Picture>> to be encoded by the operation.
+  * pname:pSetupReferenceSlot is a pointer to a
+    slink:VkVideoReferenceSlotInfoKHR structure used for generating a
+    reconstructed reference slot and Picture Resource.
+    pname:pSetupReferenceSlot->slotIndex specifies the slot index number to
+    use as a target for producing the Reconstructed (DPB) data.
+    pname:pSetupReferenceSlot must: be one of the entries provided in
+    slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within the
+    flink:vkCmdBeginVideoCodingKHR command that established the Vulkan Video
+    Encode Context for this command.
+  * pname:referenceSlotCount is the number of Reconstructed Reference
+    Pictures that will be used when this encoding operation is executing.
+  * pname:pReferenceSlots is `NULL` or a pointer to an array of
+    slink:VkVideoReferenceSlotInfoKHR structures that will be used when this
+    encoding operation is executing.
+    Each entry in pname:pReferenceSlots must: be one of the entries provided
+    in slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within
+    the flink:vkCmdBeginVideoCodingKHR command that established the Vulkan
+    Video Encode Context for this command.
+  * pname:precedingExternallyEncodedBytes is the number of bytes externally
+    encoded for insertion in the active video encode session overall
+    bitstream prior to the bitstream that will be generated by the
+    implementation for this instance of sname:VkVideoEncodeInfoKHR.
+    The value provided is used to update the implementation's rate control
+    algorithm for the rate control layer this instance of
+    sname:VkVideoEncodeInfoKHR belongs to, by accounting for the bitrate
+    budget consumed by these externally encoded bytes.
+    See slink:VkVideoEncodeRateControlInfoKHR for additional information
+    about encode rate control.
+
+The coded size of the encode operation is specified in pname:codedExtent of
+pname:srcPictureResource.
+
+Multiple flink:vkCmdEncodeVideoKHR commands may: be recorded within a Vulkan
+Video Encode Context.
+The execution of each flink:vkCmdEncodeVideoKHR command will result in
+generating codec-specific bitstream units.
+These bitstream units are generated consecutively into the bitstream buffer
+specified in pname:dstBuffer of a sname:VkVideoEncodeInfoKHR structure
+within the flink:vkCmdBeginVideoCodingKHR command.
+The produced bitstream is the sum of all these bitstream units, including
+any padding between the bitstream units.
+Any bitstream padding must: be filled with data compliant to the codec
+standard so as not to cause any syntax errors during decoding of the
+bitstream units with the padding included.
+The range of the bitstream buffer written can: be queried via
+<<queries-video-encode-feedback, video encode feedback queries>>.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoEncodeInfoKHR-None-07012]]
+    The bound video session must: not be in <<video-session-uninitialized,
+    uninitialized>> state at the time the command is executed on the device
+****
+
+include::{generated}/validity/structs/VkVideoEncodeInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeFlagsKHR.adoc[]
+
+tlink:VkVideoEncodeFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+[open,refpage='VkVideoEncodeRateControlInfoKHR',desc='Structure to set encode stream rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeRateControlInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeRateControlInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:rateControlMode is a elink:VkVideoEncodeRateControlModeFlagBitsKHR
+    value specifying the encode stream rate control mode.
+  * pname:layerCount specifies the number of rate control layers in the
+    video encode stream.
+  * pname:pLayers is a pointer to an array of
+    slink:VkVideoEncodeRateControlLayerInfoKHR structures specifying the
+    rate control configurations of pname:layerCount rate control layers.
+  * pname:virtualBufferSizeInMs is the leaky bucket model virtual buffer
+    size in milliseconds, with respect to peak bitrate.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+    For example, virtual buffer size is (pname:virtualBufferSizeInMs {times}
+    pname:maxBitrate / 1000).
+  * pname:initialVirtualBufferSizeInMs is the initial occupancy in
+    milliseconds of the virtual buffer in the leaky bucket model.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+
+Including this structure in the pname:pNext chain of
+slink:VkVideoCodingControlInfoKHR and including
+ename:VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR in
+slink:VkVideoCodingControlInfoKHR::pname:flags will define stream rate
+control settings for video encoding.
+
+Additional structures providing codec-specific rate control parameters may:
+need to be included in the pname:pNext chain of
+sname:VkVideoCodingControlInfoKHR depending on the codec profile the bound
+video session was created with and the parameters specified in
+sname:VkVideoEncodeRateControlInfoKHR (see <<video-coding-control,Video
+Coding Control>>).
+
+To ensure that the video session is properly initialized with stream-level
+rate control settings, the application must: call
+flink:vkCmdControlVideoCodingKHR with stream-level rate control settings at
+least once in execution order before the first flink:vkCmdEncodeVideoKHR
+command that is executed after video session reset.
+If not provided, default implementation-specific stream rate control
+settings will be used.
+
+Stream rate control settings can: also be re-initialized during an active
+video encoding session.
+The re-initialization takes effect whenever the
+sname:VkVideoEncodeRateControlInfoKHR structure is included in the
+pname:pNext chain of the slink:VkVideoCodingControlInfoKHR structure in the
+call to flink:vkCmdControlVideoCodingKHR, and only impacts
+flink:vkCmdEncodeVideoKHR operations that follow in execution order.
+
+include::{generated}/validity/structs/VkVideoEncodeRateControlInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeRateControlFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeRateControlFlagsKHR.adoc[]
+
+tname:VkVideoEncodeRateControlFlagsKHR is a bitmask type for setting a mask,
+but currently reserved for future use.
+--
+
+[open,refpage='VkVideoEncodeRateControlModeFlagBitsKHR',desc='Video encode rate control modes',type='enums']
+--
+The rate control modes are defined with the following enums:
+
+include::{generated}/api/enums/VkVideoEncodeRateControlModeFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR specifies the use of
+    implementation-specific rate control.
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR specifies that
+    rate control is disabled and any quality control parameters for the
+    encoding are provided on a per-picture basis.
+    In this mode implementations will encode pictures independently of the
+    output bitrate of prior video encode operations.
+ifdef::VK_EXT_video_encode_h264[]
+    When using an H.264 encode profile, implementations will use the QP
+    values specified in the slink:VkVideoEncodeH264RateControlInfoEXT
+    structure for the encoded picture.
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+    When using an H.265 encode profile, implementations will use the QP
+    values specified in the slink:VkVideoEncodeH265RateControlInfoEXT
+    structure for the encoded picture.
+endif::VK_EXT_video_encode_h265[]
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR specifies the use of
+    constant bitrate rate control mode.
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR specifies the use of
+    variable bitrate rate control mode.
+--
+
+[open,refpage='VkVideoEncodeRateControlModeFlagsKHR',desc='Bitmask of VkVideoEncodeRateControlModeFlagBitsKHR', type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeRateControlModeFlagsKHR.adoc[]
+
+tname:VkVideoEncodeRateControlModeFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeRateControlModeFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeRateControlLayerInfoKHR',desc='Structure to set encode per-layer rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeRateControlLayerInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeRateControlLayerInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is a pointer to a structure extending this structure.
+  * pname:averageBitrate is the average bitrate in bits/second.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+  * pname:maxBitrate is the peak bitrate in bits/second.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+  * pname:frameRateNumerator is the numerator of the frame rate.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+  * pname:frameRateDenominator is the denominator of the frame rate.
+    Valid when rate control mode is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+
+A codec-specific structure specifying additional per-layer rate control
+settings must: be chained to sname:VkVideoEncodeRateControlLayerInfoKHR.
+If multiple rate control layers are enabled
+(slink:VkVideoEncodeRateControlInfoKHR::pname:layerCount is greater than 1),
+then the chained codec-specific extension structure also identifies the
+specific video coding layer its parent
+sname:VkVideoEncodeRateControlLayerInfoKHR applies to.
+If multiple rate control layers are enabled, the number of rate control
+layers must: match the number of video coding layers.
+The specification for an encode codec-specific extension would describe how
+multiple video coding layers are enabled for the corresponding codec.
+
+Per-layer rate control settings for all enabled rate control layers must: be
+initialized or re-initialized whenever stream rate control settings are
+provided via slink:VkVideoEncodeRateControlInfoKHR.
+This is done by specifying settings for all enabled rate control layers in
+slink:VkVideoEncodeRateControlInfoKHR::pname:pLayers.
+
+It is possible for an application to enable multiple video coding layers
+(via codec-specific extensions to encoding operations) while only enabling a
+single layer of rate control for the entire video stream.
+To achieve this, pname:layerCount in slink:VkVideoEncodeRateControlInfoKHR
+must: be set to 1, and the single sname:VkVideoEncodeRateControlLayerInfoKHR
+provided in pname:pLayers would apply to all encoded segments of the video
+stream, regardless of which codec-defined video coding layer they belong to.
+In this case, the implementation decides bitrate distribution across video
+coding layers (if applicable to the specified stream rate control mode).
+
+include::{generated}/validity/structs/VkVideoEncodeRateControlLayerInfoKHR.adoc[]
+--
+
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h264_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h264_extensions.adoc
new file mode 100644
index 0000000..eb81e97
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h264_extensions.adoc
@@ -0,0 +1,755 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[encode-h264]]
+== Encode H.264
+
+The `apiext:VK_EXT_video_encode_h264` extension adds H.264 codec specific
+structures/types needed to support H.264 encoding.
+Unless otherwise noted, all references to the H.264 specification are to the
+2010 edition published by the ITU-T, dated March 2010.
+This specification is available at https://www.itu.int/rec/T-REC-H.264.
+
+[NOTE]
+.Note
+====
+Refer to the <<preamble, Preamble>> for information on how the Khronos
+Intellectual Property Rights Policy relates to normative references to
+external materials not created by Khronos.
+====
+
+
+=== H.264 Encode Profile
+
+[open,refpage='VkVideoEncodeH264ProfileInfoEXT',desc='Structure specifying H.264 encode profile',type='structs']
+--
+The sname:VkVideoEncodeH264ProfileInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264ProfileInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdProfileIdc is a code:StdVideoH264ProfileIdc value specifying
+    the H.264 codec profile IDC.
+
+An H.264 encode profile is specified by including a
+sname:VkVideoEncodeH264ProfileInfoEXT structure in the pname:pNext chain of
+the slink:VkVideoProfileInfoKHR structure when
+slink:VkVideoProfileInfoKHR::pname:videoCodecOperation is
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT.
+
+include::{generated}/validity/structs/VkVideoEncodeH264ProfileInfoEXT.adoc[]
+--
+
+
+=== Capabilities
+
+[open,refpage='VkVideoEncodeH264CapabilitiesEXT',desc='Structure specifying H.264 encode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
+pname:pVideoProfile->videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, the
+slink:VkVideoEncodeH264CapabilitiesEXT structure must: be included in the
+pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve
+more capabilities specific to H.264 video encoding.
+
+The slink:VkVideoEncodeH264CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264CapabilitiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoEncodeH264CapabilityFlagBitsEXT
+    indicating supported H.264 encoding capabilities.
+  * pname:maxLevelIdc is a code:StdVideoH264LevelIdc value indicating the
+    maximum H.264 level supported.
+  * pname:maxSliceCount indicates the maximum number of slices that can: be
+    encoded for a single picture.
+    Further restrictions may: apply to the number of slices that can: be
+    encoded for a single picture depending on other capabilities and
+    codec-specific rules.
+  * pname:maxPPictureL0ReferenceCount indicates the maximum number of
+    reference pictures the implementation supports in the reference list L0
+    for P pictures.
+  * pname:maxBPictureL0ReferenceCount indicates the maximum number of
+    reference pictures the implementation supports in the reference list L0
+    for B pictures.
+    The reported value is `0` if encoding of B pictures is not supported.
+  * pname:maxL1ReferenceCount reports the maximum number of reference
+    pictures the implementation supports in the reference list L1 if
+    encoding of B pictures is supported.
+    The reported value is `0` if encoding of B pictures is not supported.
+  * pname:maxTemporalLayerCount indicates the maximum number of H.264
+    temporal layers supported by the implementation.
+  * pname:expectDyadicTemporalLayerPattern indicates that the
+    implementation's rate control algorithms expect the application to use a
+    dyadic temporal layer pattern when encoding multiple temporal layers.
+  * pname:minQp indicates the minimum QP value supported.
+  * pname:maxQp indicates the maximum QP value supported.
+  * pname:prefersGopRemainingFrames indicates that the implementation's rate
+    control algorithm prefers the application to specify the number of
+    frames of each type remaining in the current group of pictures.
+  * pname:requiresGopRemainingFrames indicates that the implementation's
+    rate control algorithm requires the application to specify the number of
+    frames of each type remaining in the current group of pictures.
+  * pname:stdSyntaxFlags is a bitmask of
+    elink:VkVideoEncodeH264StdFlagBitsEXT indicating capabilities related to
+    H.264 syntax elements.
+
+When flink:vkGetPhysicalDeviceVideoCapabilitiesKHR is called to query the
+capabilities with parameter pname:videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, a
+sname:VkVideoEncodeH264CapabilitiesEXT structure can: be chained to
+slink:VkVideoCapabilitiesKHR to retrieve H.264 extension specific
+capabilities.
+
+include::{generated}/validity/structs/VkVideoEncodeH264CapabilitiesEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264CapabilityFlagBitsEXT',desc='Video encode H.264 capability flags',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH264CapabilitiesEXT::pname:flags, indicating the
+supported H.264 encoding capabilities, are:
+
+include::{generated}/api/enums/VkVideoEncodeH264CapabilityFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT indicates
+    if the implementation guarantees generating a HRD compliant bitstream if
+    code:nal_hrd_parameters_present_flag or
+    code:vcl_hrd_parameters_present_flag are enabled in
+    code:StdVideoH264SpsVuiFlags.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT
+    indicates that when code:weighted_pred_flag is enabled or
+    code:STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT from
+    code:StdVideoH264WeightedBipredIdc is used, the implementation is able
+    to internally decide syntax for code:pred_weight_table.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT
+    indicates that each slice in a frame with multiple slices may begin or
+    finish at any offset in a macroblock row.
+    If not supported, all slices in the frame must: begin at the start of a
+    macroblock row (and hence each slice must: finish at the end of a
+    macroblock row).
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT
+    indicates that when a frame is encoded with multiple slices, the
+    implementation allows encoding each slice with a different
+    code:StdVideoEncodeH264SliceHeader::code:slice_type.
+    If not supported, all slices of the frame must: be encoded with the same
+    code:slice_type which corresponds to the picture type of the frame.
+    For example, all slices of a P-frame would be encoded as P-slices.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT
+    indicates support for using a B frame as L0 reference.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT
+    indicates support for using a B frame as L1 reference.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT
+    indicates support for specifying different QP values in the members of
+    slink:VkVideoEncodeH264QpEXT.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_EXT
+    indicates support for specifying different constant QP values for each
+    slice.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT
+    indicates support for generating prefix NALUs by setting
+    slink:VkVideoEncodeH264PictureInfoEXT::pname:generatePrefixNalu to
+    ename:VK_TRUE.
+--
+
+[open,refpage='VkVideoEncodeH264CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH264CapabilityFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264CapabilityFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH264CapabilityFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH264CapabilityFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH264StdFlagBitsEXT',desc='Video encode H.264 syntax capability flags',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH264CapabilitiesEXT::pname:stdSyntaxFlags, indicating the
+capabilities related to the H.264 syntax elements, are:
+
+include::{generated}/api/enums/VkVideoEncodeH264StdFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT
+    indicates if enabling code:separate_colour_plane_flag in
+    code:StdVideoH264SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_EXT
+    indicates if enabling code:qpprime_y_zero_transform_bypass_flag in
+    code:StdVideoH264SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_EXT
+    indicates if enabling code:seq_scaling_matrix_present_flag in
+    code:StdVideoH264SpsFlags or code:pic_scaling_matrix_present_flag in
+    code:StdVideoH264PpsFlags are supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_EXT indicates
+    if setting non-zero code:chroma_qp_index_offset in
+    code:StdVideoH264PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_EXT
+    indicates if setting non-zero code:second_chroma_qp_index_offset in
+    code:StdVideoH264PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_EXT indicates if
+    setting non-zero code:pic_init_qp_minus26 in
+    code:StdVideoH264PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT indicates
+    if enabling code:weighted_pred_flag in code:StdVideoH264PpsFlags is
+    supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_EXT
+    indicates if using code:STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT from
+    code:StdVideoH264WeightedBipredIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_EXT
+    indicates if using code:STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT from
+    code:StdVideoH264WeightedBipredIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_EXT
+    indicates if enabling code:transform_8x8_mode_flag in
+    code:StdVideoH264PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_EXT
+    indicates if disabling
+    code:StdVideoEncodeH264SliceHeaderFlags::code:direct_spatial_mv_pred_flag
+    is supported when it is present in the slice header.
+  * ename:VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_EXT
+    indicates if CAVLC entropy coding is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_EXT
+    indicates if CABAC entropy coding is supported.
+    An implementation must: support at least one entropy coding mode.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_EXT
+    indicates if disabling code:direct_8x8_inference_flag in
+    code:StdVideoH264SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT
+    indicates if enabling code:constrained_intra_pred_flag in
+    code:StdVideoH264PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_EXT
+    indicates if using
+    code:STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED from
+    StdVideoH264DisableDeblockingFilterIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_EXT
+    indicates if using
+    code:STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED from
+    StdVideoH264DisableDeblockingFilterIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_EXT
+    indicates if using
+    code:STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL from
+    StdVideoH264DisableDeblockingFilterIdc is supported.
+    An implementation must: support at least one deblocking filter mode.
+  * ename:VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_EXT indicates whether
+    the implementation supports using the application-provided value for
+    code:StdVideoEncodeH264SliceHeader::code:slice_qp_delta when that value
+    is identical across the slices of the encoded frame.
+  * ename:VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT
+    indicates whether the implementation supports using the
+    application-provided value for
+    code:StdVideoEncodeH264SliceHeader::code:slice_qp_delta when that value
+    is different across the slices of the encoded frame.
+--
+
+[open,refpage='VkVideoEncodeH264StdFlagsEXT',desc='Bitmask of VkVideoEncodeH264StdFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264StdFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH264StdFlagsEXT is a bitmask type for setting a mask of
+zero or more elink:VkVideoEncodeH264StdFlagBitsEXT.
+--
+
+
+=== H.264 Encode Quality Level Properties
+
+[open,refpage='VkVideoEncodeH264QualityLevelPropertiesEXT',desc='Structure describing the H.264 encode quality level properties',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR
+with pname:pVideoProfile->videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, the
+slink:VkVideoEncodeH264QualityLevelPropertiesEXT structure can: be included
+in the pname:pNext chain of the slink:VkVideoEncodeQualityLevelPropertiesKHR
+structure to retrieve additional video encode quality level properties
+specific to H.264 encoding.
+
+The slink:VkVideoEncodeH264QualityLevelPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH264QualityLevelPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:preferredRateControlFlags is a bitmask of
+    elink:VkVideoEncodeH264RateControlFlagBitsEXT values indicating the
+    preferred flags to use for
+    slink:VkVideoEncodeH264RateControlInfoEXT::pname:flags.
+  * pname:preferredGopFrameCount indicates the preferred value to use for
+    slink:VkVideoEncodeH264RateControlInfoEXT::pname:gopFrameCount.
+  * pname:preferredIdrPeriod indicates the preferred value to use for
+    slink:VkVideoEncodeH264RateControlInfoEXT::pname:idrPeriod.
+  * pname:preferredConsecutiveBFrameCount indicates the preferred value to
+    use for
+    slink:VkVideoEncodeH264RateControlInfoEXT::pname:consecutiveBFrameCount.
+  * pname:preferredTemporalLayerCount indicates the preferred value to use
+    for slink:VkVideoEncodeH264RateControlInfoEXT::pname:temporalLayerCount.
+  * pname:preferredConstantQp indicates the preferred values to use for
+    slink:VkVideoEncodeH264NaluSliceInfoEXT::pname:constantQp for each
+    picture type when using rate control mode
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR.
+  * pname:preferredMaxL0ReferenceCount indicates the preferred maximum
+    number of reference pictures to use in the reference list L0.
+  * pname:preferredMaxL1ReferenceCount indicates the preferred maximum
+    number of reference pictures to use in the reference list L1.
+  * pname:preferredStdEntropyCodingModeFlag indicates the preferred value to
+    use for code:entropy_coding_mode_flag in code:StdVideoH264PpsFlags.
+
+include::{generated}/validity/structs/VkVideoEncodeH264QualityLevelPropertiesEXT.adoc[]
+--
+
+
+=== H.264 Encode Session
+
+Additional parameters can be specified when creating a video session with an
+H.264 encode profile by including an instance of the
+slink:VkVideoEncodeH264SessionCreateInfoEXT structure in the pname:pNext
+chain of slink:VkVideoSessionCreateInfoKHR.
+
+[open,refpage='VkVideoEncodeH264SessionCreateInfoEXT',desc='Structure specifies H.264 encode session parameters',type='structs']
+--
+The sname:VkVideoEncodeH264SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useMaxLevelIdc indicates whether the value of pname:maxLevelIdc
+    should be used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the value
+    of pname:maxLevelIdc and uses the value of
+    slink:VkVideoEncodeH264CapabilitiesEXT::pname:maxLevelIdc, as reported
+    by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile.
+  * pname:maxLevelIdc provides the upper bound on the H.264 level for the
+    video bitstreams produced by the created video session.
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionCreateInfoEXT.adoc[]
+--
+
+
+=== Encoder Parameter Sets
+
+To reduce parameter traffic during encoding, the encoder parameter set
+object supports storing H.264 SPS/PPS parameter sets that may: be later
+referenced during encoding.
+
+[open,refpage='VkVideoEncodeH264SessionParametersCreateInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs']
+--
+The slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxStdSPSCount is the maximum number of SPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:maxStdPPSCount is the maximum number of PPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    sname:VkVideoEncodeH264SessionParametersAddInfoEXT structure specifying
+    H.264 parameters to add upon object creation.
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs']
+--
+The sname:VkVideoEncodeH264SessionParametersAddInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdSPSCount is the number of SPS elements in the pname:pStdSPSs.
+    Its value must: be less than or equal to the value of
+    pname:maxStdSPSCount.
+  * pname:pStdSPSs is a pointer to an array of
+    code:StdVideoH264SequenceParameterSet structures representing H.264
+    sequence parameter sets.
+    Each element of the array must: have a unique H.264 SPS ID.
+  * pname:stdPPSCount is the number of PPS provided in pname:pStdPPSs.
+    Its value must: be less than or equal to the value of
+    pname:maxStdPPSCount.
+  * pname:pStdPPSs is a pointer to an array of
+    code:StdVideoH264PictureParameterSet structures representing H.264
+    picture parameter sets.
+    Each element of the array must: have a unique H.264 SPS-PPS ID pair.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-stdSPSCount-04837]]
+    The values of pname:stdSPSCount and pname:stdPPSCount must: be less than
+    or equal to the values of pname:maxStdSPSCount and pname:maxStdPPSCount,
+    respectively
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxStdSPSCount-04838]]
+    When the pname:maxStdSPSCount number of parameters of type
+    StdVideoH264SequenceParameterSet in the Video Session Parameters object
+    is reached, no additional parameters of that type can be added to the
+    object.
+    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
+    to add additional data to this object at this point
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxStdPPSCount-04839]]
+    When the pname:maxStdPPSCount number of parameters of type
+    StdVideoH264PictureParameterSet in the Video Session Parameters object
+    is reached, no additional parameters of that type can be added to the
+    object.
+    ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
+    to add additional data to this object at this point
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04840]]
+    Each entry to be added must: have a unique, to the rest of the parameter
+    array entries and the existing parameters in the Video Session
+    Parameters Object that is being updated, SPS-PPS IDs
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04841]]
+    Parameter entries that already exist in Video Session Parameters object
+    with a particular SPS-PPS IDs cannot: be replaced nor updated
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04842]]
+    When creating a new object using a Video Session Parameters as a
+    template, the array's parameters with the same SPS-PPS IDs as the ones
+    from the template take precedence
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04843]]
+    SPS/PPS parameters must: comply with the limits specified in
+    slink:VkVideoSessionCreateInfoKHR during Video Session creation
+****
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264SessionParametersGetInfoEXT',desc='Structure specifying parameters for retrieving encoded H.264 parameter set data',type='structs']
+--
+The sname:VkVideoEncodeH264SessionParametersGetInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersGetInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:writeStdSPS indicates whether the encoded H.264 sequence parameter
+    set identified by pname:stdSPSId is requested to be retrieved.
+  * pname:writeStdPPS indicates whether the encoded H.264 picture parameter
+    set identified by the pair constructed from pname:stdSPSId and
+    pname:stdPPSId is requested to be retrieved.
+  * pname:stdSPSId specifies the H.264 sequence parameter set ID used to
+    identify the retrieved H.264 sequence and/or picture parameter set(s).
+  * pname:stdPPSId specifies the H.264 picture parameter set ID used to
+    identify the retrieved H.264 picture parameter set when
+    pname:writeStdPPS is set to ename:VK_TRUE.
+
+When this structure is specified in the pname:pNext chain of the
+slink:VkVideoEncodeSessionParametersGetInfoKHR structure passed to
+flink:vkGetEncodedVideoSessionParametersKHR, the command will write encoded
+parameter data to the output buffer in the following order:
+
+  . The H.264 sequence parameter set identified by pname:stdSPSId, if
+    pname:writeStdSPS is set to ename:VK_TRUE.
+  . The H.264 picture parameter set identified by the pair constructed from
+    pname:stdSPSId and pname:stdPPSId, if pname:writeStdPPS is set to
+    ename:VK_TRUE.
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersGetInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264SessionParametersFeedbackInfoEXT',desc='Structure providing feedback about the requested H.264 video session parameters',type='structs']
+--
+The sname:VkVideoEncodeH264SessionParametersFeedbackInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersFeedbackInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:hasStdSPSOverrides indicates whether any of the parameters of the
+    requested H.264 sequence parameter set, if one was requested via
+    slink:VkVideoEncodeH264SessionParametersGetInfoEXT::pname:writeStdSPS,
+    were overridden by the implementation.
+  * pname:hasStdPPSOverrides indicates whether any of the parameters of the
+    requested H.264 picture parameter set, if one was requested via
+    slink:VkVideoEncodeH264SessionParametersGetInfoEXT::pname:writeStdPPS,
+    were overridden by the implementation.
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersFeedbackInfoEXT.adoc[]
+--
+
+
+=== Frame Encoding
+
+In order to encode a frame, add a slink:VkVideoEncodeH264PictureInfoEXT
+structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
+structure passed to the flink:vkCmdEncodeVideoKHR command.
+
+[open,refpage='VkVideoEncodeH264PictureInfoEXT',desc='Structure specifies H.264 encode frame parameters',type='structs']
+--
+The slink:VkVideoEncodeH264PictureInfoEXT structure representing a frame
+encode operation is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264PictureInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:naluSliceEntryCount is the number of slice NALUs in the frame.
+  * pname:pNaluSliceEntries is a pointer to an array of
+    pname:naluSliceEntryCount slink:VkVideoEncodeH264NaluSliceInfoEXT
+    structures specifying the division of the current picture into slices
+    and the properties of these slices.
+    This is an ordered sequence; the NALUs are generated consecutively in
+    slink:VkVideoEncodeInfoKHR::pname:dstBuffer in the same order as in this
+    array.
+  * pname:pStdPictureInfo is a pointer to a
+    code:StdVideoEncodeH264PictureInfo structure specifying the syntax and
+    other codec-specific information from the H.264 specification associated
+    with this picture.
+    The information provided must: reflect the decoded picture marking
+    operations that are applicable to this frame.
+  * pname:generatePrefixNalu controls whether prefix NALUs are generated
+    before slice NALUs into the target bitstream.
+
+include::{generated}/validity/structs/VkVideoEncodeH264PictureInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264NaluSliceInfoEXT',desc='Structure specifies H.264 encode slice NALU parameters',type='structs']
+--
+The slink:VkVideoEncodeH264NaluSliceInfoEXT structure representing a slice
+is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264NaluSliceInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:constantQp is the QP to use for the slice if the current rate
+    control mode configured for the video session is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR.
+  * pname:pStdSliceHeader is a pointer to a
+    code:StdVideoEncodeH264SliceHeader structure specifying the slice header
+    for the current slice.
+
+include::{generated}/validity/structs/VkVideoEncodeH264NaluSliceInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 encode DPB picture information',type='structs']
+--
+The slink:VkVideoEncodeH264DpbSlotInfoEXT structure, representing a
+reconstructed picture that is being used as a reference picture, is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH264DpbSlotInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdReferenceInfo is a pointer to a
+    code:StdVideoEncodeH264ReferenceInfo structure specifying the syntax and
+    other codec-specific information from the H.264 specification associated
+    with this reference picture.
+
+include::{generated}/validity/structs/VkVideoEncodeH264DpbSlotInfoEXT.adoc[]
+--
+
+
+=== Rate Control
+
+[open,refpage='VkVideoEncodeH264RateControlInfoEXT',desc='Structure describing H.264 stream rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeH264RateControlInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264RateControlInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of
+    elink:VkVideoEncodeH264RateControlFlagBitsEXT specifying H.264 rate
+    control flags.
+  * pname:gopFrameCount is the number of frames contained within the group
+    of pictures (GOP), starting from an intra frame and until the next intra
+    frame.
+    If it is set to 0, the implementation chooses a suitable value.
+    If it is set to code:UINT32_MAX, the GOP length is treated as infinite.
+  * pname:idrPeriod is the interval, in terms of number of frames, between
+    two IDR frames.
+    If it is set to 0, the implementation chooses a suitable value.
+    If it is set to code:UINT32_MAX, the IDR period is treated as infinite.
+  * pname:consecutiveBFrameCount is the number of consecutive B-frames
+    between I- and/or P-frames within the GOP.
+  * pname:temporalLayerCount specifies the number of temporal layers enabled
+    in the stream.
+
+In order to provide H.264-specific stream rate control parameters, add a
+sname:VkVideoEncodeH264RateControlInfoEXT structure to the pname:pNext chain
+of the slink:VkVideoEncodeRateControlInfoKHR structure in the pname:pNext
+chain of the slink:VkVideoCodingControlInfoKHR structure passed to the
+flink:vkCmdControlVideoCodingKHR command.
+
+The parameters from this structure act as a guidance for implementations to
+apply various rate control heuristics.
+
+It is possible to infer the picture type to be used when encoding a frame,
+on the basis of the values provided for pname:consecutiveBFrameCount,
+pname:idrPeriod, and pname:gopFrameCount, but this inferred picture type
+will not be used by implementations to override the picture type provided in
+flink:vkCmdEncodeVideoKHR.
+Additionally, it is not required for the video session to be reset if the
+inferred picture type does not match the actual picture type.
+
+include::{generated}/validity/structs/VkVideoEncodeH264RateControlInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264RateControlFlagBitsEXT',desc='H.264 encode rate control bits',type='enums']
+--
+Bits which can: be set in
+slink:VkVideoEncodeH264RateControlInfoEXT::pname:flags, specifying H.264
+rate control flags, are:
+
+include::{generated}/api/enums/VkVideoEncodeH264RateControlFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT
+    specifies that rate control should: attempt to produce an HRD compliant
+    bitstream.
+  * ename:VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_EXT specifies
+    that the application intends to use a regular GOP structure according to
+    the parameters specified in the pname:gopFrameCount, pname:idrPeriod,
+    and pname:consecutiveBFrameCount members of the
+    slink:VkVideoEncodeH264RateControlInfoEXT structure.
+  * ename:VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT
+    specifies that the application intends to follow a flat reference
+    pattern.
+  * ename:VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT
+    specifies that the application intends to follow a dyadic reference
+    pattern.
+  * ename:VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_EXT
+    specifies that the application intends to follow a dyadic temporal layer
+    pattern.
+--
+
+
+[open,refpage='VkVideoEncodeH264RateControlFlagsEXT',desc='Bitmask specifying H.264 encode rate control flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264RateControlFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH264RateControlFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH264RateControlFlagBitsEXT.
+--
+
+
+[open,refpage='VkVideoEncodeH264RateControlLayerInfoEXT',desc='Structure describing H.264 per-layer rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeH264RateControlLayerInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264RateControlLayerInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useMinQp indicates whether the values within pname:minQp should be
+    used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the values
+    in pname:minQp and chooses suitable values.
+  * pname:minQp provides the lower bound on the QP values for each picture
+    type, to be used in rate control calculations.
+  * pname:useMaxQp indicates whether the values within pname:maxQp should be
+    used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the values
+    in pname:maxQp and chooses suitable values.
+  * pname:maxQp provides the upper bound on the QP values for each picture
+    type, to be used in rate control calculations.
+  * pname:useMaxFrameSize indicates whether the values within
+    pname:maxFrameSize should be used by the implementation.
+  * pname:maxFrameSize provides the upper bound on the encoded frame size
+    for each picture type.
+    The implementation does not guarantee the encoded frame sizes will be
+    within the specified limits, however these limits may: be used as a
+    guide in rate control calculations.
+    If enabled and not set properly, the pname:maxQp limit may prevent the
+    implementation from respecting the pname:maxFrameSize limit.
+
+H.264-specific per-layer rate control parameters must: be specified by
+adding a sname:VkVideoEncodeH264RateControlLayerInfoEXT structure to the
+pname:pNext chain of each slink:VkVideoEncodeRateControlLayerInfoKHR
+structure in a call to flink:vkCmdControlVideoCodingKHR command, when the
+command buffer context has an active video encode H.264 session.
+
+include::{generated}/validity/structs/VkVideoEncodeH264RateControlLayerInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264QpEXT',desc='Structure describing H.264 QP values per picture type',type='structs']
+--
+The sname:VkVideoEncodeH264QpEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264QpEXT.adoc[]
+
+  * pname:qpI is the QP to be used for I-frames.
+  * pname:qpP is the QP to be used for P-frames.
+  * pname:qpB is the QP to be used for B-frames.
+
+include::{generated}/validity/structs/VkVideoEncodeH264QpEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264FrameSizeEXT',desc='Structure describing frame size values per H.264 picture type',type='structs']
+--
+The sname:VkVideoEncodeH264FrameSizeEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264FrameSizeEXT.adoc[]
+
+  * pname:frameISize is the size in bytes to be used for I-frames.
+  * pname:framePSize is the size in bytes to be used for P-frames.
+  * pname:frameBSize is the size in bytes to be used for B-frames.
+
+include::{generated}/validity/structs/VkVideoEncodeH264FrameSizeEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH264GopRemainingFrameInfoEXT',desc='Structure specifying H.264 encode rate control GOP remaining frame counts',type='structs']
+--
+The sname:VkVideoEncodeH264GopRemainingFrameInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264GopRemainingFrameInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useGopRemainingFrames indicates whether the implementation's rate
+    control algorithm should: use the values specified in
+    pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB.
+    If pname:useGopRemainingFrames is ename:VK_FALSE, then the values of
+    pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB are
+    ignored.
+  * pname:gopRemainingI specifies the number of I-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+  * pname:gopRemainingP specifies the number of P-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+  * pname:gopRemainingB specifies the number of B-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+
+Setting pname:useGopRemainingFrames to ename:VK_TRUE and including this
+structure in the pname:pNext chain of slink:VkVideoEncodeInfoKHR is only
+mandatory if the
+slink:VkVideoEncodeH264CapabilitiesEXT::pname:requiresGopRemainingFrames
+reported for the used <<video-profiles,video profile>> is ename:VK_TRUE.
+However, implementations may: use these remaining frame counts, when
+specified, even when it is not required.
+In particular, when the application does not use a regular GOP structure,
+these values may: provide additional guidance for the implementation's rate
+control algorithm.
+
+The slink:VkVideoEncodeH264CapabilitiesEXT::pname:prefersGopRemainingFrames
+capability is also used to indicate that the implementation's rate control
+algorithm may: operate more accurately if the application specifies the
+remaining frame counts using this structure.
+
+As with other rate control guidance values, if the effective order and
+number of frames encoded by the application are not in line with the
+remaining frame counts specified in this structure at any given point, then
+the behavior of the implementation's rate control algorithm may: deviate
+from the one expected by the application.
+
+include::{generated}/validity/structs/VkVideoEncodeH264GopRemainingFrameInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h265_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h265_extensions.adoc
new file mode 100644
index 0000000..1802994
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_encode_h265_extensions.adoc
@@ -0,0 +1,857 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[encode-h265]]
+== Encode H.265
+
+The `apiext:VK_EXT_video_encode_h265` extension adds H.265 codec-specific
+structures/types needed to support H.265 video encoding.
+Unless otherwise noted, all references to the H.265 specification are to the
+2013 edition published by the ITU-T, dated April 2013.
+This specification is available at https://www.itu.int/rec/T-REC-H.265.
+
+[NOTE]
+.Note
+====
+Refer to the <<preamble, Preamble>> for information on how the Khronos
+Intellectual Property Rights Policy relates to normative references to
+external materials not created by Khronos.
+====
+
+
+=== H.265 Encode Profile
+
+An H.265 encode profile is specified by including the
+slink:VkVideoEncodeH265ProfileInfoEXT structure in the pname:pNext chain of
+the slink:VkVideoProfileInfoKHR structure when
+slink:VkVideoProfileInfoKHR::pname:videoCodecOperation is
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT.
+
+[open,refpage='VkVideoEncodeH265ProfileInfoEXT',desc='Structure specifying H.265 encode profile',type='structs']
+--
+The sname:VkVideoEncodeH265ProfileInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265ProfileInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying
+    the H.265 codec profile IDC.
+
+include::{generated}/validity/structs/VkVideoEncodeH265ProfileInfoEXT.adoc[]
+--
+
+
+=== Capabilities
+
+[open,refpage='VkVideoEncodeH265CapabilitiesEXT',desc='Structure specifying H.265 encode capabilities',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
+pname:pVideoProfile->videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the
+slink:VkVideoEncodeH265CapabilitiesEXT structure must: be included in the
+pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve
+more capabilities specific to H.265 video encoding.
+
+The sname:VkVideoEncodeH265CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265CapabilitiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoEncodeH265CapabilityFlagBitsEXT
+    indicating supported H.265 encoding capabilities.
+  * pname:maxLevelIdc is a code:StdVideoH265LevelIdc value indicating the
+    maximum H.265 level supported.
+  * pname:maxSliceSegmentCount indicates the maximum number of slice
+    segments that can: be encoded for a single picture.
+    Further restrictions may: apply to the number of slice segments that
+    can: be encoded for a single picture depending on other capabilities and
+    codec-specific rules.
+  * pname:maxTiles indicates the maximum number of H.265 tile columns and
+    rows that can: be encoded for a single picture.
+    Further restrictions may: apply to the number of H.265 tiles that can:
+    be encoded for a single picture depending on other capabilities and
+    codec-specific rules.
+  * pname:ctbSizes is a bitmask of elink:VkVideoEncodeH265CtbSizeFlagBitsEXT
+    describing the supported CTB sizes.
+  * pname:transformBlockSizes is a bitmask of
+    elink:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT describing the
+    supported transform block sizes.
+  * pname:maxPPictureL0ReferenceCount indicates the maximum number of
+    reference pictures the implementation supports in the reference list L0
+    for P pictures.
+  * pname:maxBPictureL0ReferenceCount indicates the maximum number of
+    reference pictures the implementation supports in the reference list L0
+    for B pictures.
+    The reported value is `0` if encoding of B pictures is not supported.
+  * pname:maxL1ReferenceCount indicates the maximum number of reference
+    pictures the implementation supports in the reference list L1 if
+    encoding of B pictures is supported.
+    The reported value is `0` if encoding of B pictures is not supported.
+  * pname:maxSubLayerCount indicates the maximum number of H.265 sub-layers
+    supported by the implementation.
+  * pname:expectDyadicTemporalSubLayerPattern indicates that the
+    implementation's rate control algorithms expect the application to use a
+    dyadic temporal sub-layer pattern when encoding multiple temporal
+    sub-layers.
+  * pname:minQp indicates the minimum QP value supported.
+  * pname:maxQp indicates the maximum QP value supported.
+  * pname:prefersGopRemainingFrames indicates that the implementation's rate
+    control algorithm prefers the application to specify the number of
+    frames of each type remaining in the current group of pictures.
+  * pname:requiresGopRemainingFrames indicates that the implementation's
+    rate control algorithm requires the application to specify the number of
+    frames of each type remaining in the current group of pictures.
+  * pname:stdSyntaxFlags is a bitmask of
+    elink:VkVideoEncodeH265StdFlagBitsEXT indicating capabilities related to
+    H.265 syntax elements.
+
+include::{generated}/validity/structs/VkVideoEncodeH265CapabilitiesEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265CapabilityFlagBitsEXT',desc='Video encode H.265 capability flags',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:flags indicating the supported
+H.265 encoding capabilities, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265CapabilityFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT indicates
+    if the implementation guarantees generating a HRD compliant bitstream if
+    code:nal_hrd_parameters_present_flag,
+    code:vcl_hrd_parameters_present_flag, or
+    code:sub_pic_hrd_params_present_flag are enabled in
+    code:StdVideoH265HrdFlags, or code:vui_hrd_parameters_present_flag is
+    enabled in code:StdVideoH265SpsVuiFlags.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT
+    indicates that when code:weighted_pred_flag or code:weighted_bipred_flag
+    in code:StdVideoH265PpsFlags are enabled, the implementation is able to
+    internally decide syntax for code:pred_weight_table.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT
+    indicates that each slice segment in a frame with a single or multiple
+    tiles per slice may begin or finish at any offset in a CTB row.
+    If not supported, all slice segments in such a frame must: begin at the
+    start of a CTB row (and hence each slice segment must: finish at the end
+    of a CTB row).
+    Also indicates that each slice segment in a frame with multiple slices
+    per tile may begin or finish at any offset within the enclosing tile's
+    CTB row.
+    If not supported, slice segments in such a frame must: begin at the
+    start of the enclosing tile's CTB row (and hence each slice segment
+    must: finish at the end of the enclosing tile's CTB row).
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_EXT
+    indicates that when a frame is encoded with multiple slice segments, the
+    implementation allows encoding each slice segment with a different
+    code:StdVideoEncodeH265SliceSegmentHeader::code:slice_type.
+    If not supported, all slice segments of the frame must: be encoded with
+    the same code:slice_type which corresponds to the picture type of the
+    frame.
+    For example, all slice segments of a P-frame would be encoded as
+    P-slices.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT
+    indicates support for using a B frame as L0 reference.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT
+    indicates support for using a B frame as L1 reference.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT
+    indicates support for specifying different QP values in the members of
+    slink:VkVideoEncodeH265QpEXT.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_EXT
+    indicates support for specifying different constant QP values for each
+    slice segment.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_EXT
+    indicates if encoding multiple tiles per slice segment is supported.
+    If not set, the implementation is only able to encode a single tile for
+    each slice segment.
+  * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_EXT
+    indicates if encoding multiple slice segments per tile is supported.
+    If not set, the implementation is only able to encode a single slice
+    segment for each tile.
+--
+
+[open,refpage='VkVideoEncodeH265CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH265CapabilityFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265CapabilityFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH265CapabilityFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH265CapabilityFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265StdFlagBitsEXT',desc='Video encode H.265 syntax capability flags',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:stdSyntaxFlags, indicating the
+capabilities related to the H.265 syntax elements, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265StdFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT
+    indicates if enabling code:separate_colour_plane_flag in
+    code:StdVideoH265SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:sample_adaptive_offset_enabled_flag in
+    code:StdVideoH265SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_EXT
+    indicates if enabling code:scaling_list_enabled_flag and
+    code:sps_scaling_list_data_present_flag in code:StdVideoH265SpsFlags, or
+    enabling code:pps_scaling_list_data_present_flag in
+    code:StdVideoH265PpsFlags are supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_EXT indicates if
+    enabling code:pcm_enable_flag in code:StdVideoH265SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:sps_temporal_mvp_enabled_flag in
+    code:StdVideoH265SpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_EXT indicates if
+    setting non-zero code:init_qp_minus26 in
+    code:StdVideoH265PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT indicates
+    if enabling code:weighted_pred_flag in code:StdVideoH265PpsFlags is
+    supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_EXT
+    indicates if enabling code:weighted_bipred_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT
+    indicates if setting non-zero value for
+    code:log2_parallel_merge_level_minus2 in
+    code:StdVideoH265PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:sign_data_hiding_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:transform_skip_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT
+    indicates if disabling code:transform_skip_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+    Implementations must: report at least one of
+    ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT
+    and
+    ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT
+    as supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_EXT
+    indicates if enabling code:pps_slice_chroma_qp_offsets_present_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:transquant_bypass_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT
+    indicates if enabling code:constrained_intra_pred_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:entropy_coding_sync_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:deblocking_filter_override_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_EXT
+    indicates if enabling code:dependent_slice_segments_enabled_flag in
+    code:StdVideoH265PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_EXT
+    indicates if enabling code:dependent_slice_segment_flag in
+    code:StdVideoEncodeH265SliceHeaderFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_EXT indicates whether
+    the implementation supports using the application-provided value for
+    code:StdVideoEncodeH265SliceSegmentHeader::code:slice_qp_delta when that
+    value is identical across the slice segments of the encoded frame.
+  * ename:VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT
+    indicates whether the implementation supports using the
+    application-provided value for
+    code:StdVideoEncodeH265SliceSegmentHeader::code:slice_qp_delta when that
+    value is different across the slice segments of the encoded frame.
+--
+
+[open,refpage='VkVideoEncodeH265StdFlagsEXT',desc='Bitmask of VkVideoEncodeH265StdFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265StdFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH265StdFlagsEXT is a bitmask type for setting a mask of
+zero or more elink:VkVideoEncodeH265StdFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265CtbSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265CtbSizeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265CtbSizeFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH265CtbSizeFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkVideoEncodeH265CtbSizeFlagBitsEXT.
+Implementations must: set at least one of
+ename:VkVideoEncodeH265CtbSizeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265CtbSizeFlagBitsEXT',desc='Supported CTB sizes for H.265 video encode',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:ctbSizes, indicating the CTB
+sizes supported by the implementation, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265CtbSizeFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT specifies that a CTB size
+    of 16x16 is supported.
+  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT specifies that a CTB size
+    of 32x32 is supported.
+  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT specifies that a CTB size
+    of 64x64 is supported.
+--
+
+[open,refpage='VkVideoEncodeH265TransformBlockSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265TransformBlockSizeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265TransformBlockSizeFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH265TransformBlockSizeFlagsEXT is a bitmask type for
+setting a mask of zero or more
+elink:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT.
+Implementations must: set at least one of
+ename:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265TransformBlockSizeFlagBitsEXT',desc='Supported transform block sizes for H.265 video encode',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:transformBlockSizes,
+indicating the transform block sizes supported by the implementation, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265TransformBlockSizeFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT specifies that
+    a transform block size of 4x4 is supported.
+  * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT specifies that
+    a transform block size of 8x8 is supported.
+  * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT specifies
+    that a transform block size of 16x16 is supported.
+  * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT specifies
+    that a transform block size of 32x32 is supported.
+--
+
+
+=== H.265 Encode Quality Level Properties
+
+[open,refpage='VkVideoEncodeH265QualityLevelPropertiesEXT',desc='Structure describing the H.265 encode quality level properties',type='structs']
+--
+When calling flink:vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR
+with pname:pVideoProfile->videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the
+slink:VkVideoEncodeH265QualityLevelPropertiesEXT structure can: be included
+in the pname:pNext chain of the slink:VkVideoEncodeQualityLevelPropertiesKHR
+structure to retrieve additional video encode quality level properties
+specific to H.265 encoding.
+
+The slink:VkVideoEncodeH265QualityLevelPropertiesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH265QualityLevelPropertiesEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:preferredRateControlFlags is a bitmask of
+    elink:VkVideoEncodeH265RateControlFlagBitsEXT values indicating the
+    preferred flags to use for
+    slink:VkVideoEncodeH265RateControlInfoEXT::pname:flags.
+  * pname:preferredGopFrameCount indicates the preferred value to use for
+    slink:VkVideoEncodeH265RateControlInfoEXT::pname:gopFrameCount.
+  * pname:preferredIdrPeriod indicates the preferred value to use for
+    slink:VkVideoEncodeH265RateControlInfoEXT::pname:idrPeriod.
+  * pname:preferredConsecutiveBFrameCount indicates the preferred value to
+    use for
+    slink:VkVideoEncodeH265RateControlInfoEXT::pname:consecutiveBFrameCount.
+  * pname:preferredSubLayerCount indicates the preferred value to use for
+    slink:VkVideoEncodeH265RateControlInfoEXT::pname:subLayerCount.
+  * pname:preferredConstantQp indicates the preferred values to use for
+    slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT::pname:constantQp for
+    each picture type when using rate control mode
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR.
+  * pname:preferredMaxL0ReferenceCount indicates the preferred maximum
+    number of reference pictures to use in the reference list L0.
+  * pname:preferredMaxL1ReferenceCount indicates the preferred maximum
+    number of reference pictures to use in the reference list L1.
+
+include::{generated}/validity/structs/VkVideoEncodeH265QualityLevelPropertiesEXT.adoc[]
+--
+
+
+=== H.265 Encode Session
+
+Additional parameters can be specified when creating a video session with an
+H.265 encode profile by including an instance of the
+slink:VkVideoEncodeH265SessionCreateInfoEXT structure in the pname:pNext
+chain of slink:VkVideoSessionCreateInfoKHR.
+
+[open,refpage='VkVideoEncodeH265SessionCreateInfoEXT',desc='Structure specifies H.265 encode session parameters',type='structs']
+--
+The sname:VkVideoEncodeH265SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useMaxLevelIdc indicates whether the value of pname:maxLevelIdc
+    should be used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the value
+    of pname:maxLevelIdc and uses the value of
+    slink:VkVideoEncodeH265CapabilitiesEXT::pname:maxLevelIdc, as reported
+    by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile.
+  * pname:maxLevelIdc provides the upper bound on the H.265 level for the
+    video bitstreams produced by the created video session.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionCreateInfoEXT.adoc[]
+--
+
+
+=== Encoder H.265 Video Session Parameters Object
+
+When creating a Video Session Parameters object, add a
+slink:VkVideoEncodeH265SessionParametersCreateInfoEXT structure to the
+pname:pNext chain of the slink:VkVideoSessionParametersCreateInfoKHR
+structure passed to flink:vkCreateVideoSessionParametersKHR in order to
+specify the H.265-specific video encoder session parameters.
+
+[open,refpage='VkVideoEncodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
+--
+The sname:VkVideoEncodeH265SessionParametersCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxStdVPSCount is the maximum number of entries of type
+    code:StdVideoH265VideoParameterSet within
+    sname:VkVideoSessionParametersKHR.
+  * pname:maxStdSPSCount is the maximum number of entries of type
+    code:StdVideoH265SequenceParameterSet within
+    sname:VkVideoSessionParametersKHR.
+  * pname:maxStdPPSCount is the maximum number of entries of type
+    code:StdVideoH265PictureParameterSet within
+    sname:VkVideoSessionParametersKHR.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure specifying
+    the video session parameters to add upon creation of this object.
+
+When a slink:VkVideoSessionParametersKHR object contains
+pname:maxStdVPSCount code:StdVideoH265VideoParameterSet entries, no
+additional code:StdVideoH265VideoParameterSet entries can be added to it,
+and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
+to add these entries.
+When a slink:VkVideoSessionParametersKHR object contains
+pname:maxStdSPSCount code:StdVideoH265SequenceParameterSet entries, no
+additional code:StdVideoH265SequenceParameterSet entries can be added to it,
+and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
+to add these entries.
+When a slink:VkVideoSessionParametersKHR object contains
+pname:maxStdPPSCount code:StdVideoH265PictureParameterSet entries, no
+additional code:StdVideoH265PictureParameterSet entries can be added to it,
+and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
+to add these entries.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
+--
+The sname:VkVideoEncodeH265SessionParametersAddInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:stdVPSCount is the number of VPS elements in pname:pStdVPSs.
+  * pname:pStdVPSs is a pointer to an array of pname:stdVPSCount
+    code:StdVideoH265VideoParameterSet structures representing H.265 video
+    parameter sets.
+  * pname:stdSPSCount is the number of SPS elements in pname:pStdSPSs.
+  * pname:pStdSPSs is a pointer to an array of pname:stdSPSCount
+    code:StdVideoH265SequenceParameterSet structures representing H.265
+    sequence parameter sets.
+  * pname:stdPPSCount is the number of PPS elements in pname:pStdPPSs.
+  * pname:pStdPPSs is a pointer to an array of pname:stdPPSCount
+    code:StdVideoH265PictureParameterSet structures representing H.265
+    picture parameter sets.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-stdVPSCount-06438]]
+    The values of pname:stdVPSCount, pname:stdSPSCount and pname:stdPPSCount
+    must: be less than or equal to the values of
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT::pname:maxStdVPSCount,
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxStdSPSCount,
+    and
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxStdPPSCount,
+    respectively
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdVPSs-06439]]
+    Each code:StdVideoH265VideoParameterSet entry in pname:pStdVPSs must:
+    have a unique H.265 VPS ID
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdSPSs-06440]]
+    Each code:StdVideoH265SequenceParameterSet entry in pname:pStdSPSs must:
+    have a unique H.265 VPS-SPS ID pair
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdPPSs-06441]]
+    Each code:StdVideoH265PictureParameterSet entry in pname:pStdPPSs must:
+    have a unique H.265 VPS-SPS-PPS ID tuple
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06442]]
+    Each entry to be added must: have a unique, to the rest of the parameter
+    array entries and the existing parameters in the Video Session
+    Parameters Object that is being updated, VPS-SPS-PPS IDs
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06443]]
+    Parameter entries that already exist in Video Session Parameters object
+    with a particular VPS-SPS-PPS IDs must: not be replaced nor updated
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06444]]
+    When creating a new object using a Video Session Parameters as a
+    template, the array's parameters with the same VPS-SPS-PPS IDs as the
+    ones from the template take precedence
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06445]]
+    VPS/SPS/PPS parameters must: comply with the limits specified in
+    slink:VkVideoSessionCreateInfoKHR during Video Session creation
+****
+--
+
+[open,refpage='VkVideoEncodeH265SessionParametersGetInfoEXT',desc='Structure specifying parameters for retrieving encoded H.265 parameter set data',type='structs']
+--
+The sname:VkVideoEncodeH265SessionParametersGetInfoEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionParametersGetInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:writeStdVPS indicates whether the encoded H.265 video parameter
+    set identified by pname:stdVPSId is requested to be retrieved.
+  * pname:writeStdSPS indicates whether the encoded H.265 sequence parameter
+    set identified by the pair constructed from pname:stdVPSId and
+    pname:stdSPSId is requested to be retrieved.
+  * pname:writeStdPPS indicates whether the encoded H.265 picture parameter
+    set identified by the triplet constructed from pname:stdVPSId,
+    pname:stdSPSId, and pname:stdPPSId is requested to be retrieved.
+  * pname:stdVPSId specifies the H.265 video parameter set ID used to
+    identify the retrieved H.265 video, sequence, and/or picture parameter
+    set(s).
+  * pname:stdSPSId specifies the H.265 sequence parameter set ID used to
+    identify the retrieved H.265 sequence and/or picture parameter set(s)
+    when pname:writeStdSPS and/or pname:writeStdPPS is set to ename:VK_TRUE.
+  * pname:stdPPSId specifies the H.265 picture parameter set ID used to
+    identify the retrieved H.265 picture parameter set when
+    pname:writeStdPPS is set to ename:VK_TRUE.
+
+When this structure is specified in the pname:pNext chain of the
+slink:VkVideoEncodeSessionParametersGetInfoKHR structure passed to
+flink:vkGetEncodedVideoSessionParametersKHR, the command will write encoded
+parameter data to the output buffer in the following order:
+
+  . The H.265 video parameter set identified by pname:stdVPSId, if
+    pname:writeStdVPS is set to ename:VK_TRUE.
+  . The H.265 sequence parameter set identified by the pair constructed from
+    pname:stdVPSId and pname:stdSPSId, if pname:writeStdSPS is set to
+    ename:VK_TRUE.
+  . The H.265 picture parameter set identified by the triplet constructed
+    from pname:stdVPSId, pname:stdSPSId, and pname:stdPPSId, if
+    pname:writeStdPPS is set to ename:VK_TRUE.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersGetInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265SessionParametersFeedbackInfoEXT',desc='Structure providing feedback about the requested H.265 video session parameters',type='structs']
+--
+The sname:VkVideoEncodeH265SessionParametersFeedbackInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionParametersFeedbackInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:hasStdVPSOverrides indicates whether any of the parameters of the
+    requested H.265 video parameter set, if one was requested via
+    slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdVPS,
+    were overridden by the implementation.
+  * pname:hasStdSPSOverrides indicates whether any of the parameters of the
+    requested H.265 sequence parameter set, if one was requested via
+    slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdSPS,
+    were overridden by the implementation.
+  * pname:hasStdPPSOverrides indicates whether any of the parameters of the
+    requested H.265 picture parameter set, if one was requested via
+    slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdPPS,
+    were overridden by the implementation.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersFeedbackInfoEXT.adoc[]
+--
+
+
+=== Frame Encoding
+
+In order to encode a frame, add a slink:VkVideoEncodeH265PictureInfoEXT
+structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
+structure passed to the flink:vkCmdEncodeVideoKHR command.
+
+[open,refpage='VkVideoEncodeH265PictureInfoEXT',desc='Structure specifies H.265 encode frame parameters',type='structs']
+--
+The slink:VkVideoEncodeH265PictureInfoEXT structure representing a frame
+encode operation is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265PictureInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:naluSliceSegmentEntryCount is the number of slice segment NALUs in
+    the frame.
+  * pname:pNaluSliceSegmentEntries is a pointer to an array of
+    slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT structures specifying the
+    division of the current picture into slice segments and the properties
+    of these slice segments.
+  * pname:pStdPictureInfo is a pointer to a
+    code:StdVideoEncodeH265PictureInfo structure specifying the syntax and
+    other codec-specific information from the H.265 specification,
+    associated with this picture.
+
+include::{generated}/validity/structs/VkVideoEncodeH265PictureInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265NaluSliceSegmentInfoEXT',desc='Structure specifies H.265 encode slice segment NALU parameters',type='structs']
+--
+The slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT structure representing a
+slice segment is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265NaluSliceSegmentInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:constantQp is the QP to use for the slice segment if the current
+    rate control mode configured for the video session is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR.
+  * pname:pStdSliceSegmentHeader is a pointer to a
+    code:StdVideoEncodeH265SliceSegmentHeader structure specifying the slice
+    segment header for the current slice segment.
+
+include::{generated}/validity/structs/VkVideoEncodeH265NaluSliceSegmentInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 encode decoded pic info',type='structs']
+--
+The slink:VkVideoEncodeH265DpbSlotInfoEXT structure, representing a
+reconstructed picture that is being used as a reference picture, is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH265DpbSlotInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdReferenceInfo is a pointer to a
+    code:StdVideoEncodeH265ReferenceInfo structure specifying the syntax and
+    other codec-specific information from the H.265 specification,
+    associated with this reference picture.
+
+include::{generated}/validity/structs/VkVideoEncodeH265DpbSlotInfoEXT.adoc[]
+--
+
+
+=== Rate Control
+
+[open,refpage='VkVideoEncodeH265RateControlInfoEXT',desc='Structure describing H.265 stream rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeH265RateControlInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265RateControlInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of
+    elink:VkVideoEncodeH265RateControlFlagBitsEXT specifying H.265 rate
+    control flags.
+  * pname:gopFrameCount is the number of frames contained within the group
+    of pictures (GOP), starting from an intra frame and until the next intra
+    frame.
+    If it is set to 0, the implementation chooses a suitable value.
+    If it is set to code:UINT32_MAX, the GOP length is treated as infinite.
+  * pname:idrPeriod is the interval, in terms of number of frames, between
+    two IDR frames.
+    If it is set to 0, the implementation chooses a suitable value.
+    If it is set to code:UINT32_MAX, the IDR period is treated as infinite.
+  * pname:consecutiveBFrameCount is the number of consecutive B-frames
+    between I- and/or P-frames within the GOP.
+  * pname:subLayerCount specifies the number of sub layers enabled in the
+    stream.
+
+In order to provide H.265-specific stream rate control parameters, add a
+sname:VkVideoEncodeH265RateControlInfoEXT structure to the pname:pNext chain
+of the slink:VkVideoEncodeRateControlInfoKHR structure in the pname:pNext
+chain of the slink:VkVideoCodingControlInfoKHR structure passed to the
+flink:vkCmdControlVideoCodingKHR command.
+
+The parameters from this structure act as a guidance for implementations to
+apply various rate control heuristics.
+
+It is possible to infer the picture type to be used when encoding a frame,
+on the basis of the values provided for pname:consecutiveBFrameCount,
+pname:idrPeriod, and pname:gopFrameCount, but this inferred picture type
+will not be used by implementations to override the picture type provided in
+flink:vkCmdEncodeVideoKHR.
+Additionally, it is not required for the video session to be reset if the
+inferred picture type does not match the actual picture type.
+
+include::{generated}/validity/structs/VkVideoEncodeH265RateControlInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265RateControlFlagBitsEXT',desc='H.265 encode rate control bits',type='enums']
+--
+Bits which can: be set in
+slink:VkVideoEncodeH265RateControlInfoEXT::pname:flags, specifying H.265
+rate control flags, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265RateControlFlagBitsEXT.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT
+    specifies that rate control should: attempt to produce an HRD compliant
+    bitstream.
+  * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_EXT specifies
+    that the application intends to use a regular GOP structure according to
+    the parameters specified in the pname:gopFrameCount, pname:idrPeriod,
+    and pname:consecutiveBFrameCount members of the
+    slink:VkVideoEncodeH265RateControlInfoEXT structure.
+  * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT
+    specifies that the application intends to follow a flat reference
+    pattern.
+  * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT
+    specifies that the application intends to follow a dyadic reference
+    pattern.
+  * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_EXT
+    specifies that the application intends to follow a dyadic temporal
+    sub-layer pattern.
+--
+
+
+[open,refpage='VkVideoEncodeH265RateControlFlagsEXT',desc='Bitmask specifying H.265 encode rate control flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265RateControlFlagsEXT.adoc[]
+
+tname:VkVideoEncodeH265RateControlFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH265RateControlFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265RateControlLayerInfoEXT',desc='Structure describing H.265 per-layer rate control parameters',type='structs']
+--
+The sname:VkVideoEncodeH265RateControlLayerInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265RateControlLayerInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useMinQp indicates whether the values within pname:minQp should be
+    used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the values
+    in pname:minQp and chooses suitable values.
+  * pname:minQp provides the lower bound on the QP values for each picture
+    type, to be used in rate control calculations.
+  * pname:useMaxQp indicates whether the values within pname:maxQp should be
+    used by the implementation.
+    When it is set to ename:VK_FALSE, the implementation ignores the values
+    in pname:maxQp and chooses suitable values.
+  * pname:maxQp provides the upper bound on the QP values for each picture
+    type, to be used in rate control calculations.
+  * pname:useMaxFrameSize indicates whether the values within
+    pname:maxFrameSize should be used by the implementation.
+  * pname:maxFrameSize provides the upper bound on the encoded frame size
+    for each picture type.
+    The implementation does not guarantee the encoded frame sizes will be
+    within the specified limits, however these limits may: be used as a
+    guide in rate control calculations.
+    If enabled and not set properly, the pname:maxQp limit may prevent the
+    implementation from respecting the pname:maxFrameSize limit.
+
+H.265-specific per-layer rate control parameters must: be specified by
+adding a sname:VkVideoEncodeH265RateControlLayerInfoEXT structure to the
+pname:pNext chain of each slink:VkVideoEncodeRateControlLayerInfoKHR
+structure in a call to flink:vkCmdControlVideoCodingKHR command, when the
+command buffer context has an active video encode H.265 session.
+
+include::{generated}/validity/structs/VkVideoEncodeH265RateControlLayerInfoEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265QpEXT',desc='Structure describing H.265 QP values per picture type',type='structs']
+--
+The sname:VkVideoEncodeH265QpEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265QpEXT.adoc[]
+
+  * pname:qpI is the QP to be used for I-frames.
+  * pname:qpP is the QP to be used for P-frames.
+  * pname:qpB is the QP to be used for B-frames.
+
+include::{generated}/validity/structs/VkVideoEncodeH265QpEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265FrameSizeEXT',desc='Structure describing frame size values per H.265 picture type',type='structs']
+--
+The sname:VkVideoEncodeH265FrameSizeEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265FrameSizeEXT.adoc[]
+
+  * pname:frameISize is the size in bytes to be used for I-frames.
+  * pname:framePSize is the size in bytes to be used for P-frames.
+  * pname:frameBSize is the size in bytes to be used for B-frames.
+
+include::{generated}/validity/structs/VkVideoEncodeH265FrameSizeEXT.adoc[]
+--
+
+[open,refpage='VkVideoEncodeH265GopRemainingFrameInfoEXT',desc='Structure specifying H.265 encode rate control GOP remaining frame counts',type='structs']
+--
+The sname:VkVideoEncodeH265GopRemainingFrameInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265GopRemainingFrameInfoEXT.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:useGopRemainingFrames indicates whether the implementation's rate
+    control algorithm should: use the values specified in
+    pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB.
+    If pname:useGopRemainingFrames is ename:VK_FALSE, then the values of
+    pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB are
+    ignored.
+  * pname:gopRemainingI specifies the number of I-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+  * pname:gopRemainingP specifies the number of P-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+  * pname:gopRemainingB specifies the number of B-frames the
+    implementation's rate control algorithm should: assume to be remaining
+    in the GOP prior to executing the video encode operation.
+
+Setting pname:useGopRemainingFrames to ename:VK_TRUE and including this
+structure in the pname:pNext chain of slink:VkVideoEncodeInfoKHR is only
+mandatory if the
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:requiresGopRemainingFrames
+reported for the used <<video-profiles,video profile>> is ename:VK_TRUE.
+However, implementations may: use these remaining frame counts, when
+specified, even when it is not required.
+In particular, when the application does not use a regular GOP structure,
+these values may: provide additional guidance for the implementation's rate
+control algorithm.
+
+The slink:VkVideoEncodeH265CapabilitiesEXT::pname:prefersGopRemainingFrames
+capability is also used to indicate that the implementation's rate control
+algorithm may: operate more accurately if the application specifies the
+remaining frame counts using this structure.
+
+As with other rate control guidance values, if the effective order and
+number of frames encoded by the application are not in line with the
+remaining frame counts specified in this structure at any given point, then
+the behavior of the implementation's rate control algorithm may: deviate
+from the one expected by the application.
+
+include::{generated}/validity/structs/VkVideoEncodeH265GopRemainingFrameInfoEXT.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/chapters/video_extensions.adoc b/codegen/vulkan/vulkan-docs-next/chapters/video_extensions.adoc
new file mode 100644
index 0000000..9739c1d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/chapters/video_extensions.adoc
@@ -0,0 +1,2830 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[video-coding]]
+= Video Coding
+
+Vulkan implementations may: expose one or more queue families supporting
+video coding operations.
+These operations are performed by recording them into a command buffer
+within a <<video-coding-scope,video coding scope>>, and submitting them to
+queues with compatible video coding capabilities.
+
+The Vulkan video functionalities are designed to be made available through a
+set of APIs built on top of each other, consisting of:
+
+  * A core API providing common video coding functionalities,
+  * APIs providing codec-independent video decode and video encode related
+    functionalities, respectively,
+  * Additional codec-specific APIs built on top of those.
+
+This chapter details the fundamental components and operations of these.
+
+
+[[video-picture-resources]]
+== Video Picture Resources
+
+In the context of video coding, multidimensional arrays of image data that
+can: be used as the source or target of video coding operations are referred
+to as _video picture resources_.
+They may: store additional metadata that includes implementation-private
+information used during the execution of video coding operations, as
+discussed later.
+
+Video picture resources are backed by slink:VkImage objects.
+Individual subregions of slink:VkImageView objects created from such
+resources can: be used as
+ifdef::VK_KHR_video_decode_queue[]
+<<decode-output-picture,decode output pictures>>,
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+<<encode-input-picture,encode input pictures>>,
+endif::VK_KHR_video_encode_queue[]
+<<reconstructed-picture,reconstructed pictures>>, and/or
+<<reference-picture, reference pictures>>.
+
+The parameters of a video picture resource are specified using a
+sname:VkVideoPictureResourceInfoKHR structure.
+
+[open,refpage='VkVideoPictureResourceInfoKHR',desc='Structure specifying the parameters of a video picture resource',type='structs']
+--
+The sname:VkVideoPictureResourceInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoPictureResourceInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:codedOffset is the offset in texels of the image subregion to use.
+  * pname:codedExtent is the size in pixels of the coded image data.
+  * pname:baseArrayLayer is the array layer of the image view specified in
+    pname:imageViewBinding to use as the video picture resource.
+  * pname:imageViewBinding is an image view representing the video picture
+    resource.
+
+[[video-image-subresource-reference]]
+The image subresource referred to by such a structure is defined as the
+image array layer index specified in pname:baseArrayLayer relative to the
+image subresource range the image view specified in pname:imageViewBinding
+was created with.
+
+The meaning of the pname:codedOffset and pname:codedExtent depends on the
+command and context the video picture resource is used in, as well as on the
+used <<video-profiles,video profile>> and corresponding codec-specific
+semantics, as described later.
+
+[[video-picture-resource-uniqueness]]
+A video picture resource is uniquely defined by the image subresource
+referred to by an instance of this structure, together with the
+pname:codedOffset and pname:codedExtent members that identify the image
+subregion within the image subresource referenced corresponding to the video
+picture resource according to the particular codec-specific semantics.
+
+Accesses to image data within a video picture resource happen at the
+granularity indicated by
+slink:VkVideoCapabilitiesKHR::pname:pictureAccessGranularity, as returned by
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the used <<video-profiles,
+video profile>>.
+As a result, given an effective image subregion corresponding to a video
+picture resource, the actual image subregion accessed may: be larger than
+that as it may: include additional padding texels due to the picture access
+granularity.
+Any writes performed by video coding operations to such padding texels will
+result in undefined: texel values.
+
+[[video-picture-resource-matching]]
+Two video picture resources match if they refer to the same image
+subresource and they specify identical pname:codedOffset and
+pname:codedExtent values.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoPictureResourceInfoKHR-baseArrayLayer-07175]]
+    pname:baseArrayLayer must: be less than the
+    slink:VkImageViewCreateInfo::pname:subresourceRange.layerCount specified
+    when the image view pname:imageViewBinding was created
+****
+
+include::{generated}/validity/structs/VkVideoPictureResourceInfoKHR.adoc[]
+--
+
+
+[[dpb]]
+== Decoded Picture Buffer
+
+[[reconstructed-picture]]
+An integral part of video coding pipelines is the reconstruction of pictures
+from a compressed video bitstream.
+A _reconstructed picture_ is a <<video-picture-resources,video picture
+resource>> resulting from this process.
+
+[[reference-picture]]
+Such reconstructed pictures can: be used as _reference pictures_ in
+subsequent video coding operations to provide predictions of the values of
+samples of subsequently decoded or encoded pictures.
+The correct use of such reconstructed pictures as reference pictures is
+driven by the video compression standard, the implementation, and the
+application-specific use cases.
+
+[[active-reference-pictures]]
+The list of reference pictures used to provide such predictions within a
+single video coding operation is referred to as the list of _active
+reference pictures_.
+
+The _decoded picture buffer (DPB)_ is an indexed data structure that
+maintains the set of reference pictures available to be used in video coding
+operations.
+[[dpb-slot]] Individual indexed entries of the DPB are referred to as the
+_decoded picture buffer (DPB) slots_.
+[[dpb-capacity]] The range of valid DPB slot indices is between zero and
+`N-1`, where `N` is the capacity of the DPB.
+Each DPB slot can: refer to a reference picture containing a _video frame_
+ifdef::VK_KHR_video_decode_h264[]
+or can: refer to up to two reference pictures containing the top and/or
+bottom _fields_ that, when both present, together represent a full _video
+frame_
+endif::VK_KHR_video_decode_h264[]
+.
+
+[[dpb-state-and-backing-store]]
+In Vulkan, the state and the backing store of the DPB is separated as
+follows:
+
+  * The state of individual DPB slots is maintained by <<video-session,video
+    session>> objects.
+  * The backing store of DPB slots is provided by subregions of
+    slink:VkImage objects used as <<video-picture-resources,video picture
+    resources>>.
+
+In addition, the implementation may: also maintain opaque metadata
+associated with DPB slots, including:
+
+  * [[reference-metadata]] _Reference picture metadata_ corresponding to the
+    video picture resource associated with the DPB slot.
+
+Such metadata may: be stored by the implementation as part of the DPB slot
+state maintained by the video session, or as part of the video picture
+resource backing the DPB slot.
+
+Any metadata stored in the video picture resources backing DPB slots are
+independent of the video session used to store it, hence such video picture
+resources can: be shared with other video sessions.
+Correspondingly, any metadata that is dependent on the video session will
+always be stored as part of the DPB slot state maintained by that video
+session.
+
+The responsibility of managing the DPB is split between the application and
+the implementation as follows:
+
+  * The application maintains the association between <<dpb-slot,DPB slot>>
+    indices and corresponding <<video-picture-resources,video picture
+    resources>>.
+  * The implementation maintains global and per-slot opaque
+    <<reference-metadata,reference picture metadata>>.
+
+In addition, the application is also responsible for managing the mapping
+between the codec-specific picture IDs and DPB slots, and any other
+codec-specific states unless otherwise specified.
+
+[[dpb-slot-states]]
+=== DPB Slot States
+
+At a given time, each DPB slot is either in _active_ or _inactive_ state.
+Initially, all DPB slots managed by a <<video-session,video session>> are in
+_inactive_ state.
+
+A DPB slot can: be _activated_ by using it as the target of picture
+reconstruction within a video coding operation, changing its state to
+_active_.
+
+As part of the picture reconstruction, the implementation may: also generate
+<<reference-metadata,reference picture metadata>>.
+
+If such a video coding operation completes successfully, the activated DPB
+slot will have a _valid picture reference_ and the <<reconstructed-picture,
+reconstructed picture>> is associated with the DPB slot.
+ifdef::VK_KHR_video_decode_h264[]
+This is true even if the DPB slot is used as the target of a picture
+reconstruction that only sets up a top field or bottom field reference
+picture and thus does not yet refer to a complete frame.
+endif::VK_KHR_video_decode_h264[]
+However, if any data provided as input to such a video coding operation is
+not compliant to the video compression standard used, that video coding
+operation may: complete unsuccessfully, in which case the activated DPB slot
+will have an _invalid picture reference_.
+ifdef::VK_KHR_video_decode_h264[]
+This is true even if the DPB slot previously had a valid picture reference
+to a top field or bottom field reference picture, but the reconstruction of
+the other field corresponding to the DPB slot failed.
+endif::VK_KHR_video_decode_h264[]
+
+The application can: use <<queries,queries>> to get feedback about the
+outcome of video coding operations and use the resulting
+elink:VkQueryResultStatusKHR value to determine whether the video coding
+operation completed successfully (result status is positive) or
+unsuccessfully (result status is negative).
+
+Using a <<reference-picture,reference picture>> associated with a DPB slot
+that has an _invalid picture reference_ as an <<active-reference-pictures,
+active reference picture>> in subsequent video coding operations is legal,
+however, the contents of the outputs of such operations are undefined:, and
+any DPB slots activated by such video coding operations will also have an
+_invalid picture reference_.
+This is true even if such video coding operations may: otherwise complete
+successfully.
+
+A DPB slot can: also be _deactivated_ by the application, changing its state
+to _inactive_ and invalidating any picture references and
+<<reference-metadata,reference picture metadata>> associated with the DPB
+slot.
+
+A DPB slot can: be activated with a new frame even if it is already active.
+In this case all previous associations of the DPB slots with
+<<reference-picture,reference pictures>> are replaced with an association
+with the <<reconstructed-picture,reconstructed picture>> used to activate
+it.
+ifdef::VK_KHR_video_decode_h264[]
+If an already active DPB slot is activated with a reconstructed field
+picture, then the behavior is as follows:
+
+  * If the DPB slot is currently associated with a frame, then that
+    association is replaced with an association with the reconstructed field
+    picture used to activate it.
+  * If the DPB slot is not currently associated with a top field picture and
+    the DPB slot is activated with a top field picture, or if the DPB slot
+    is not currently associated with a bottom field picture and the DPB slot
+    is activated with a bottom field picture, then the DPB slot is
+    associated with the reconstructed field picture used to activate it,
+    without disturbing the other field picture association, if any.
+  * If the DPB slot is currently associated with a top field picture and the
+    DPB slot is activated with a new top field picture, or if the DPB slot
+    is currently associated with a bottom field picture and the DPB slot is
+    activated with a new bottom field picture, then that association is
+    replaced with an association with the reconstructed field picture used
+    to activate it, without disturbing the other field picture association,
+    if any.
+endif::VK_KHR_video_decode_h264[]
+
+
+[[video-profiles]]
+== Video Profiles
+
+[open,refpage='VkVideoProfileInfoKHR',desc='Structure specifying a video profile',type='structs']
+--
+The sname:VkVideoProfileInfoKHR structure is defined as follows:
+
+include::{generated}/api/structs/VkVideoProfileInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoCodecOperation is a elink:VkVideoCodecOperationFlagBitsKHR
+    value specifying a video codec operation.
+  * pname:chromaSubsampling is a bitmask of
+    elink:VkVideoChromaSubsamplingFlagBitsKHR specifying video chroma
+    subsampling information.
+  * pname:lumaBitDepth is a bitmask of
+    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video luma bit
+    depth information.
+  * pname:chromaBitDepth is a bitmask of
+    elink:VkVideoComponentBitDepthFlagBitsKHR specifying video chroma bit
+    depth information.
+
+Video profiles are provided as input to video capability queries such as
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR or
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR, as well as when creating
+resources to be used by video coding operations such as images, buffers,
+query pools, and video sessions.
+
+The full description of a video profile is specified by an instance of this
+structure, and the codec-specific and auxiliary structures provided in its
+pname:pNext chain.
+
+[[video-profile-error-codes]]
+When this structure is specified as an input parameter to
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR, or through the
+pname:pProfiles member of an slink:VkVideoProfileListInfoKHR structure in
+the pname:pNext chain of the input parameter of a query command such as
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR or
+flink:vkGetPhysicalDeviceImageFormatProperties2, the following error codes
+indicate specific causes of the failure of the query operation:
+
+  * ename:VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR indicates that the
+    requested video picture layout
+ifdef::VK_KHR_video_decode_h264[]
+    (e.g. through the pname:pictureLayout member of a
+    slink:VkVideoDecodeH264ProfileInfoKHR structure included in the
+    pname:pNext chain of sname:VkVideoProfileInfoKHR)
+endif::VK_KHR_video_decode_h264[]
+    is not supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR indicates that
+    a video profile operation specified by pname:videoCodecOperation is not
+    supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR indicates that
+    video format parameters specified by pname:chromaSubsampling,
+    pname:lumaBitDepth, or pname:chromaBitDepth are not supported.
+  * ename:VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR indicates that the
+    codec-specific parameters corresponding to the video codec operation are
+    not supported.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoProfileInfoKHR-chromaSubsampling-07013]]
+    pname:chromaSubsampling must: have a single bit set
+  * [[VUID-VkVideoProfileInfoKHR-lumaBitDepth-07014]]
+    pname:lumaBitDepth must: have a single bit set
+  * [[VUID-VkVideoProfileInfoKHR-chromaSubsampling-07015]]
+    If pname:chromaSubsampling is not
+    ename:VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR, then
+    pname:chromaBitDepth must: have a single bit set
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-07179]]
+    If pname:videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoDecodeH264ProfileInfoKHR structure
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-07180]]
+    If pname:videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
+    chain must: include a slink:VkVideoDecodeH265ProfileInfoKHR structure
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-07181]]
+    If pname:videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, then the pname:pNext
+    chain must: include a slink:VkVideoEncodeH264ProfileInfoEXT structure
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-VkVideoProfileInfoKHR-videoCodecOperation-07182]]
+    If pname:videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, then the pname:pNext
+    chain must: include a slink:VkVideoEncodeH265ProfileInfoEXT structure
+endif::VK_EXT_video_encode_h265[]
+****
+
+include::{generated}/validity/structs/VkVideoProfileInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoCodecOperationFlagBitsKHR',desc='Video codec operation bits',type='enums']
+--
+Possible values of slink:VkVideoProfileInfoKHR::pname:videoCodecOperation,
+specifying the type of video coding operation and video compression standard
+used by a video profile, are:
+
+include::{generated}/api/enums/VkVideoCodecOperationFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_CODEC_OPERATION_NONE_KHR indicates no support for any
+    video codec operations.
+ifdef::VK_KHR_video_decode_h264[]
+  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR specifies support for
+    H.264 video decode operations.
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR specifies support for
+    H.265 video decode operations.
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_EXT_video_encode_h264[]
+  * ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT specifies support for
+    H.264 video encode operations.
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT specifies support for
+    H.265 video encode operations.
+endif::VK_EXT_video_encode_h265[]
+--
+
+[open,refpage='VkVideoCodecOperationFlagsKHR',desc='Bitmask of VkVideoCodecOperationFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoCodecOperationFlagsKHR.adoc[]
+
+tname:VkVideoCodecOperationFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoCodecOperationFlagBitsKHR.
+--
+
+[open,refpage='VkVideoChromaSubsamplingFlagBitsKHR',desc='Video format chroma subsampling bits',type='enums']
+--
+The video format chroma subsampling is defined with the following enums:
+
+include::{generated}/api/enums/VkVideoChromaSubsamplingFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR specifies that the
+    format is monochrome.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR specified that the format
+    is 4:2:0 chroma subsampled, i.e. the two chroma components are sampled
+    horizontally and vertically at half the sample rate of the luma
+    component.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR - the format is 4:2:2
+    chroma subsampled, i.e. the two chroma components are sampled
+    horizontally at half the sample rate of luma component.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR - the format is 4:4:4
+    chroma sampled, i.e. all three components of the {YCbCr} format are
+    sampled at the same rate, thus there is no chroma subsampling.
+--
+
+Chroma subsampling is described in more detail in the
+<<textures-chroma-reconstruction,Chroma Reconstruction>> section.
+
+[open,refpage='VkVideoChromaSubsamplingFlagsKHR',desc='Bitmask of VkVideoChromaSubsamplingFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoChromaSubsamplingFlagsKHR.adoc[]
+
+tname:VkVideoChromaSubsamplingFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoChromaSubsamplingFlagBitsKHR.
+--
+
+[open,refpage='VkVideoComponentBitDepthFlagBitsKHR',desc='Video format component bit depth',type='enums']
+--
+Possible values for the video format component bit depth are:
+
+include::{generated}/api/enums/VkVideoComponentBitDepthFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR specifies a component bit
+    depth of 8 bits.
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR specifies a component bit
+    depth of 10 bits.
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR specifies a component bit
+    depth of 12 bits.
+--
+
+[open,refpage='VkVideoComponentBitDepthFlagsKHR',desc='Bitmask of VkVideoComponentBitDepthFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoComponentBitDepthFlagsKHR.adoc[]
+
+tname:VkVideoComponentBitDepthFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoComponentBitDepthFlagBitsKHR.
+--
+
+ifdef::VK_KHR_video_decode_queue[]
+[open,refpage='VkVideoDecodeUsageInfoKHR',desc='Structure specifying video decode usage information',type='structs']
+--
+Additional information about the video decode use case can: be provided by
+adding a sname:VkVideoDecodeUsageInfoKHR structure to the pname:pNext chain
+of slink:VkVideoProfileInfoKHR.
+
+The sname:VkVideoDecodeUsageInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeUsageInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoUsageHints is a bitmask of
+    elink:VkVideoDecodeUsageFlagBitsKHR specifying hints about the intended
+    use of the video decode profile.
+
+include::{generated}/validity/structs/VkVideoDecodeUsageInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoDecodeUsageFlagBitsKHR',desc='Video decode usage flags',type='enums']
+--
+The following bits can: be specified in
+slink:VkVideoDecodeUsageInfoKHR::pname:videoUsageHints as a hint about the
+video decode use case:
+
+include::{generated}/api/enums/VkVideoDecodeUsageFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR specifies that video
+    decoding is intended to be used in conjunction with video encoding to
+    transcode a video bitstream with the same and/or different codecs.
+  * ename:VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR specifies that video
+    decoding is intended to be used to consume a local video bitstream.
+  * ename:VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR specifies that video
+    decoding is intended to be used to consume a video bitstream received as
+    a continuous flow over network.
+
+[NOTE]
+.Note
+====
+There are no restrictions on the combination of bits that can: be specified
+by the application.
+However, applications should: use reasonable combinations in order for the
+implementation to be able to select the most appropriate mode of operation
+for the particular use case.
+====
+--
+
+[open,refpage='VkVideoDecodeUsageFlagsKHR',desc='Bitmask specifying the video decode usage flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeUsageFlagsKHR.adoc[]
+
+tname:VkVideoDecodeUsageFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoDecodeUsageFlagBitsKHR.
+--
+endif::VK_KHR_video_decode_queue[]
+
+ifdef::VK_KHR_video_encode_queue[]
+[open,refpage='VkVideoEncodeUsageInfoKHR',desc='Structure specifying video encode usage information',type='structs']
+--
+Additional information about the video encode use case can: be provided by
+adding a sname:VkVideoEncodeUsageInfoKHR structure to the pname:pNext chain
+of slink:VkVideoProfileInfoKHR.
+
+The sname:VkVideoEncodeUsageInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeUsageInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoUsageHints is a bitmask of
+    elink:VkVideoEncodeUsageFlagBitsKHR specifying hints about the intended
+    use of the video encode profile.
+  * pname:videoContentHints is a bitmask of
+    elink:VkVideoEncodeContentFlagBitsKHR specifying hints about the content
+    to be encoded using the video encode profile.
+  * pname:tuningMode is a elink:VkVideoEncodeTuningModeKHR value specifying
+    the tuning mode to use when encoding with the video profile.
+
+include::{generated}/validity/structs/VkVideoEncodeUsageInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEncodeUsageFlagBitsKHR',desc='Video encode usage flags',type='enums']
+--
+The following bits can: be specified in
+slink:VkVideoEncodeUsageInfoKHR::pname:videoUsageHints as a hint about the
+video encode use case:
+
+include::{generated}/api/enums/VkVideoEncodeUsageFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR specifies that video
+    encoding is intended to be used in conjunction with video decoding to
+    transcode a video bitstream with the same and/or different codecs.
+  * ename:VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR specifies that video
+    encoding is intended to be used to produce a video bitstream that is
+    expected to be sent as a continuous flow over network.
+  * ename:VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR specifies that video
+    encoding is intended to be used for real-time recording for offline
+    consumption.
+  * ename:VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR specifies that video
+    encoding is intended to be used in a video conferencing scenario.
+
+[NOTE]
+.Note
+====
+There are no restrictions on the combination of bits that can: be specified
+by the application.
+However, applications should: use reasonable combinations in order for the
+implementation to be able to select the most appropriate mode of operation
+for the particular use case.
+====
+--
+
+[open,refpage='VkVideoEncodeUsageFlagsKHR',desc='Bitmask specifying the video encode usage flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeUsageFlagsKHR.adoc[]
+
+tname:VkVideoEncodeUsageFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoEncodeUsageFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeContentFlagBitsKHR',desc='Video encode content flags',type='enums']
+--
+The following bits can: be specified in
+slink:VkVideoEncodeUsageInfoKHR::pname:videoContentHints as a hint about the
+encoded video content:
+
+include::{generated}/api/enums/VkVideoEncodeContentFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR specifies that video
+    encoding is intended to be used to encode camera content.
+  * ename:VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR specifies that video
+    encoding is intended to be used to encode desktop content.
+  * ename:VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR specified that video
+    encoding is intended to be used to encode rendered (e.g. game) content.
+
+[NOTE]
+.Note
+====
+There are no restrictions on the combination of bits that can: be specified
+by the application.
+However, applications should: use reasonable combinations in order for the
+implementation to be able to select the most appropriate mode of operation
+for the particular content type.
+====
+--
+
+[open,refpage='VkVideoEncodeContentFlagsKHR',desc='Bitmask specifying the video encode content flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeContentFlagsKHR.adoc[]
+
+tname:VkVideoEncodeContentFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoEncodeContentFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeTuningModeKHR',desc='Video encode tuning mode',type='enums']
+--
+Possible video encode tuning mode values are as follows:
+
+include::{generated}/api/enums/VkVideoEncodeTuningModeKHR.adoc[]
+
+  * ename:VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR specifies the default
+    tuning mode.
+  * ename:VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR specifies that video
+    encoding is tuned for high quality.
+    When using this tuning mode, the implementation may: compromise the
+    latency of video encoding operations to improve quality.
+  * ename:VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR specifies that video
+    encoding is tuned for low latency.
+    When using this tuning mode, the implementation may: compromise quality
+    to increase the performance and lower the latency of video encode
+    operations.
+  * ename:VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR specifies that
+    video encoding is tuned for ultra-low latency.
+    When using this tuning mode, the implementation may: compromise quality
+    to maximize the performance and minimize the latency of video encoding
+    operations.
+  * ename:VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR specifies that video
+    encoding is tuned for lossless encoding.
+    When using this tuning mode, video encode operations produce lossless
+    output.
+
+--
+endif::VK_KHR_video_encode_queue[]
+
+[open,refpage='VkVideoProfileListInfoKHR',desc='Structure specifying one or more video profiles used in conjunction',type='structs']
+--
+The sname:VkVideoProfileListInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoProfileListInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:profileCount is the number of elements in the pname:pProfiles
+    array.
+  * pname:pProfiles is a pointer to an array of slink:VkVideoProfileInfoKHR
+    structures.
+
+[NOTE]
+.Note:
+====
+Video transcoding is an example of a use case that necessitates the
+specification of multiple profiles in various contexts.
+====
+
+When the application provides a video decode profile and one or more video
+encode profiles in the profile list, the implementation ensures that any
+capabilitities returned or resources created are suitable for the video
+transcoding use cases without the need for manual data transformations.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoProfileListInfoKHR-pProfiles-06813]]
+    pname:pProfiles must: not contain more than one element whose
+    pname:videoCodecOperation member specifies a decode operation
+****
+
+include::{generated}/validity/structs/VkVideoProfileListInfoKHR.adoc[]
+--
+
+
+[[video-capabilities]]
+== Video Capabilities
+
+
+[[video-coding-capabilities]]
+=== Video Coding Capabilities
+
+[open,refpage='vkGetPhysicalDeviceVideoCapabilitiesKHR',desc='Query video coding capabilities',type='protos']
+--
+To query video coding capabilities for a specific video profile, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    video decode or encode capabilities.
+  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileInfoKHR
+    structure.
+  * pname:pCapabilities is a pointer to a slink:VkVideoCapabilitiesKHR
+    structure in which the capabilities are returned.
+
+[[video-profile-support]]
+If the <<video-profiles,video profile>> described by pname:pVideoProfile is
+supported by the implementation, then this command returns ename:VK_SUCCESS
+and pname:pCapabilities is filled with the capabilities supported with the
+specified video profile.
+Otherwise, one of the <<video-profile-error-codes, video-profile-specific
+error codes>> are returned.
+
+.Valid Usage
+****
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07183]]
+    If pname:pVideoProfile->videoCodecOperation specifies a decode
+    operation, then the pname:pNext chain of pname:pCapabilities must:
+    include a slink:VkVideoDecodeCapabilitiesKHR structure
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07184]]
+    If pname:pVideoProfile->videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pname:pNext
+    chain of pname:pCapabilities must: include a
+    slink:VkVideoDecodeH264CapabilitiesKHR structure
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07185]]
+    If pname:pVideoProfile->videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
+    chain of pname:pCapabilities must: include a
+    slink:VkVideoDecodeH265CapabilitiesKHR structure
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07186]]
+    If pname:pVideoProfile->videoCodecOperation specifies an encode
+    operation, then the pname:pNext chain of pname:pCapabilities must:
+    include a slink:VkVideoEncodeCapabilitiesKHR structure
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07187]]
+    If pname:pVideoProfile->videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, then the pname:pNext
+    chain of pname:pCapabilities must: include a
+    slink:VkVideoEncodeH264CapabilitiesEXT structure
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07188]]
+    If pname:pVideoProfile->videoCodecOperation is
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, then the pname:pNext
+    chain of pname:pCapabilities must: include a
+    slink:VkVideoEncodeH265CapabilitiesEXT structure
+endif::VK_EXT_video_encode_h265[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.adoc[]
+--
+
+
+[open,refpage='VkVideoCapabilitiesKHR',desc='Structure describing general video capabilities for a video profile',type='structs']
+--
+The sname:VkVideoCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoCapabilitiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoCapabilityFlagBitsKHR
+    specifying capability flags.
+  * pname:minBitstreamBufferOffsetAlignment is the minimum alignment for
+    bitstream buffer offsets.
+  * pname:minBitstreamBufferSizeAlignment is the minimum alignment for
+    bitstream buffer range sizes.
+  * pname:pictureAccessGranularity is the granularity at which image access
+    to video picture resources happen.
+  * pname:minCodedExtent is the minimum width and height of the coded
+    frames.
+  * pname:maxCodedExtent is the maximum width and height of the coded
+    frames.
+  * pname:maxDpbSlots is the maximum number of <<dpb-slot,DPB slots>>
+    supported by a single video session.
+  * pname:maxActiveReferencePictures is the maximum number of
+    <<active-reference-pictures,active reference pictures>> a single video
+    coding operation can: use.
+  * [[video-std-header-version]] pname:stdHeaderVersion is a
+    slink:VkExtensionProperties structure reporting the Video Std header
+    name and version supported for the video profile.
+
+ifdef::VK_KHR_video_decode_queue[]
+[NOTE]
+.Note:
+====
+It is common for video compression standards to allow using all reference
+pictures associated with active DPB slots as active reference pictures,
+hence for video decode profiles the values returned in pname:maxDpbSlots and
+pname:maxActiveReferencePictures are often equal.
+ifdef::VK_KHR_video_decode_h264[]
+Similarly, in case of video decode profiles supporting field pictures the
+value of pname:maxActiveReferencePictures often equals
+[eq]#pname:maxDpbSlots {times} 2#.
+endif::VK_KHR_video_decode_h264[]
+====
+endif::VK_KHR_video_decode_queue[]
+
+include::{generated}/validity/structs/VkVideoCapabilitiesKHR.adoc[]
+--
+
+[open,refpage='VkVideoCapabilityFlagBitsKHR',desc='Video decode and encode capability bits',type='enums']
+--
+Bits which can: be set in slink:VkVideoCapabilitiesKHR::pname:flags are:
+
+include::{generated}/api/enums/VkVideoCapabilityFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR specifies that video
+    sessions support producing and consuming protected content.
+  * [[separate-reference-images]]
+    ename:VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR specifies
+    that the <<video-picture-resources,video picture resources>> associated
+    with the <<dpb-slot,DPB slots>> of a video session can: be backed by
+    separate sname:VkImage objects.
+    If this capability flag is not present, then all DPB slots of a video
+    session must: be associated with video picture resources backed by the
+    same sname:VkImage object (e.g. using different layers of the same
+    image).
+--
+
+[open,refpage='VkVideoCapabilityFlagsKHR',desc='Bitmask of VkVideoCapabilitiesFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoCapabilityFlagsKHR.adoc[]
+
+tname:VkVideoCapabilityFlagsKHR is a bitmask type for setting a mask of zero
+or more elink:VkVideoCapabilityFlagBitsKHR.
+--
+
+
+[[video-format-capabilities]]
+=== Video Format Capabilities
+
+[open,refpage='vkGetPhysicalDeviceVideoFormatPropertiesKHR',desc='Query supported video decode and encode image formats and capabilities',type='protos']
+--
+To enumerate the supported output, input and DPB image formats and
+corresponding capabilities for a specific video profile, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.adoc[]
+
+  * pname:physicalDevice is the physical device from which to query the
+    video format properties.
+  * pname:pVideoFormatInfo is a pointer to a
+    slink:VkPhysicalDeviceVideoFormatInfoKHR structure specifying the usage
+    and video profiles for which supported image formats and capabilities
+    are returned.
+  * pname:pVideoFormatPropertyCount is a pointer to an integer related to
+    the number of video format properties available or queried, as described
+    below.
+  * pname:pVideoFormatProperties is a pointer to an array of
+    slink:VkVideoFormatPropertiesKHR structures in which supported image
+    formats and capabilities are returned.
+
+If pname:pVideoFormatProperties is `NULL`, then the number of video format
+properties supported for the given pname:physicalDevice is returned in
+pname:pVideoFormatPropertyCount.
+Otherwise, pname:pVideoFormatPropertyCount must: point to a variable set by
+the user to the number of elements in the pname:pVideoFormatProperties
+array, and on return the variable is overwritten with the number of values
+actually written to pname:pVideoFormatProperties.
+If the value of pname:pVideoFormatPropertyCount is less than the number of
+video format properties supported, at most pname:pVideoFormatPropertyCount
+values will be written to pname:pVideoFormatProperties, and
+ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to
+indicate that not all the available values were returned.
+
+Video format properties are always queried with respect to a specific set of
+video profiles.
+These are specified by chaining the slink:VkVideoProfileListInfoKHR
+structure to pname:pVideoFormatInfo.
+
+For most use cases, the images are used by a single video session and a
+single video profile is provided.
+For a use case such as video transcoding, where a decode session output
+image can: be used as encode input in one or more encode sessions, multiple
+video profiles corresponding to the video sessions that will share the image
+must: be provided.
+
+If any of the <<video-profiles,video profiles>> specified via
+slink:VkVideoProfileListInfoKHR::pname:pProfiles are not supported, then
+this command returns one of the <<video-profile-error-codes,
+video-profile-specific error codes>>.
+Furthermore, if slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage
+includes any image usage flags not supported by the specified video
+profiles, then this command returns
+ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR.
+
+ifdef::VK_KHR_video_decode_queue[]
+This command also returns ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR if
+slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage does not include
+the appropriate flags as dictated by the decode capability flags returned in
+slink:VkVideoDecodeCapabilitiesKHR::pname:flags for any of the profiles
+specified in the slink:VkVideoProfileListInfoKHR structure provided in the
+pname:pNext chain of pname:pVideoFormatInfo.
+
+If the decode capability flags include
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR but not
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR, then in
+order to query video format properties for decode DPB and output usage,
+slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage must: include
+both ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR and
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR.
+Otherwise, the call will fail with
+ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR.
+
+If the decode capability flags include
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR but not
+ename:VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR, then in
+order to query video format properties for decode DPB usage,
+slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage must: include
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, but not
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR.
+Otherwise, the call will fail with
+ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR.
+Similarly, to query video format properties for decode output usage,
+slink:VkPhysicalDeviceVideoFormatInfoKHR::pname:imageUsage must: include
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, but not
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR.
+Otherwise, the call will fail with
+ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR.
+endif::VK_KHR_video_decode_queue[]
+
+The pname:imageUsage member of the slink:VkPhysicalDeviceVideoFormatInfoKHR
+structure specifies the expected video usage flags that the returned video
+formats must: support.
+Correspondingly, the pname:imageUsageFlags member of each
+slink:VkVideoFormatPropertiesKHR structure returned will contain at least
+the same set of image usage flags.
+
+If the implementation supports using video input, output, or DPB images of a
+particular format in operations other than video decode/encode then the
+pname:imageUsageFlags member of the corresponding
+slink:VkVideoFormatPropertiesKHR structure returned will include additional
+image usage flags indicating that.
+
+[NOTE]
+.Note:
+====
+For most use cases, only decode or encode related usage flags are going to
+be specified.
+For a use case such as transcode, if the image were to be shared between
+decode and encode session(s), then both decode and encode related usage
+flags can: be set.
+====
+
+Multiple sname:VkVideoFormatPropertiesKHR entries may: be returned with the
+same pname:format member with different pname:componentMapping,
+pname:imageType, or pname:imageTiling values, as described later.
+
+In addition, a different set of sname:VkVideoFormatPropertiesKHR entries
+may: be returned depending on the pname:imageUsage member of the
+sname:VkPhysicalDeviceVideoFormatInfoKHR structure, even for the same set of
+video profiles, for example, based on whether encode input, encode DPB,
+decode output, and/or decode DPB usage is requested.
+
+The application can: select the parameters returned in the
+sname:VkVideoFormatPropertiesKHR entries and use compatible parameters when
+creating the input, output, and DPB images.
+The implementation will report all image creation and usage flags that are
+valid for images used with the requested video profiles but applications
+should: create images only with those that are necessary for the particular
+use case.
+
+Before creating an image, the application can: obtain the complete set of
+supported image format features by calling
+flink:vkGetPhysicalDeviceImageFormatProperties2 using parameters derived
+from the members of one of the reported sname:VkVideoFormatPropertiesKHR
+entries and adding the same slink:VkVideoProfileListInfoKHR structure to the
+pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2.
+
+The following applies to all sname:VkVideoFormatPropertiesKHR entries
+returned by fname:vkGetPhysicalDeviceVideoFormatPropertiesKHR:
+
+  * flink:vkGetPhysicalDeviceFormatProperties2 must: succeed when called
+    with sname:VkVideoFormatPropertiesKHR::pname:format
+  * If sname:VkVideoFormatPropertiesKHR::pname:imageTiling is
+    ename:VK_IMAGE_TILING_OPTIMAL, then the pname:optimalTilingFeatures
+    returned by flink:vkGetPhysicalDeviceFormatProperties2 must: include all
+    format features required by the image usage flags reported in
+    sname:VkVideoFormatPropertiesKHR::pname:imageUsageFlags for the format,
+    as indicated in the <<format-feature-dependent-usage-flags,Format
+    Feature Dependent Usage Flags>> section.
+  * If sname:VkVideoFormatPropertiesKHR::pname:imageTiling is
+    ename:VK_IMAGE_TILING_LINEAR, then the pname:linearTilingFeatures
+    returned by flink:vkGetPhysicalDeviceFormatProperties2 must: include all
+    format features required by the image usage flags reported in
+    sname:VkVideoFormatPropertiesKHR::pname:imageUsageFlags for the format,
+    as indicated in the <<format-feature-dependent-usage-flags,Format
+    Feature Dependent Usage Flags>> section.
+  * flink:vkGetPhysicalDeviceImageFormatProperties2 must: succeed when
+    called with a slink:VkPhysicalDeviceImageFormatInfo2 structure
+    containing the following information:
+  ** The pname:pNext chain including the same
+     slink:VkVideoProfileListInfoKHR structure used to call
+     fname:vkGetPhysicalDeviceVideoFormatPropertiesKHR.
+  ** pname:format set to the value of
+     sname:VkVideoFormatPropertiesKHR::pname:format.
+  ** pname:type set to the value of
+     sname:VkVideoFormatPropertiesKHR::pname:imageType.
+  ** pname:tiling set to the value of
+     sname:VkVideoFormatPropertiesKHR::pname:imageTiling.
+  ** pname:usage set to the value of
+     sname:VkVideoFormatPropertiesKHR::pname:imageUsageFlags.
+  ** pname:flags set to the value of
+     sname:VkVideoFormatPropertiesKHR::pname:imageCreateFlags.
+
+The pname:componentMapping member of sname:VkVideoFormatPropertiesKHR
+defines the ordering of the {YCbCr} color channels from the perspective of
+the video codec operations specified in slink:VkVideoProfileListInfoKHR.
+For example, if the implementation produces video decode output with the
+format ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM where the blue and red
+chrominance channels are swapped then the pname:componentMapping member of
+the corresponding sname:VkVideoFormatPropertiesKHR structure will have the
+following member values:
+
+[source,c++]
+----
+components.r = VK_COMPONENT_SWIZZLE_B;        // Cb component
+components.g = VK_COMPONENT_SWIZZLE_IDENTITY; // Y component
+components.b = VK_COMPONENT_SWIZZLE_R;        // Cr component
+components.a = VK_COMPONENT_SWIZZLE_IDENTITY; // unused, defaults to 1.0
+----
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-pNext-06812]]
+    The pname:pNext chain of pname:pVideoFormatInfo must: include a
+    slink:VkVideoProfileListInfoKHR structure with pname:profileCount
+    greater than `0`
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.adoc[]
+--
+
+[open,refpage='VkPhysicalDeviceVideoFormatInfoKHR',desc='Structure specifying the codec video format',type='structs']
+--
+The sname:VkPhysicalDeviceVideoFormatInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVideoFormatInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits specifying
+    the intended usage of the video images.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVideoFormatInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoFormatPropertiesKHR',desc='Structure enumerating the video image formats',type='structs']
+--
+The sname:VkVideoFormatPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoFormatPropertiesKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is a elink:VkFormat that specifies the format that can: be
+    used with the specified video profiles and image usages.
+  * pname:componentMapping defines the color channel order used for the
+    format.
+    pname:format along with pname:componentMapping describe how the color
+    channels are ordered when producing video decoder output or are expected
+    to be ordered in video encoder input, when applicable.
+    If the pname:format reported does not require component swizzling then
+    all members of pname:componentMapping will be set to
+    ename:VK_COMPONENT_SWIZZLE_IDENTITY.
+  * pname:imageCreateFlags is a bitmask of elink:VkImageCreateFlagBits
+    specifying the supported image creation flags for the format.
+  * pname:imageType is a elink:VkImageType that specifies the image type the
+    format can: be used with.
+  * pname:imageTiling is a elink:VkImageTiling that specifies the image
+    tiling the format can: be used with.
+  * pname:imageUsageFlags is a bitmask of elink:VkImageUsageFlagBits
+    specifying the supported image usage flags for the format.
+
+include::{generated}/validity/structs/VkVideoFormatPropertiesKHR.adoc[]
+--
+
+[[video-session]]
+== Video Sessions
+
+[open,refpage='VkVideoSessionKHR',desc='Opaque handle to a video session object',type='handles']
+--
+Video sessions are objects that represent and maintain the state needed to
+perform video decode or encode operations using a specific video profile.
+
+Video sessions are represented by sname:VkVideoSessionKHR handles:
+
+include::{generated}/api/handles/VkVideoSessionKHR.adoc[]
+--
+
+
+[[video-session-creation]]
+=== Creating a Video Session
+
+[open,refpage='vkCreateVideoSessionKHR',desc='Creates a video session object',type='protos']
+--
+To create a video session object, call:
+
+include::{generated}/api/protos/vkCreateVideoSessionKHR.adoc[]
+
+  * pname:device is the logical device that creates the video session.
+  * pname:pCreateInfo is a pointer to a slink:VkVideoSessionCreateInfoKHR
+    structure containing parameters to be used to create the video session.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pVideoSession is a pointer to a slink:VkVideoSessionKHR handle in
+    which the resulting video session object is returned.
+
+The resulting video session object is said to be created with the video
+codec operation specified in
+pname:pCreateInfo->pVideoProfile->videoCodecOperation.
+
+The name and version of the codec-specific Video Std header to be used with
+the video session is specified by the slink:VkExtensionProperties structure
+pointed to by pname:pCreateInfo->pStdHeaderVersion.
+If a non-existent or unsupported Video Std header version is specified in
+pname:pCreateInfo->pStdHeaderVersion->specVersion, then this command returns
+ename:VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR.
+
+[[video-session-uninitialized]]
+Video session objects are created in _uninitialized_ state.
+In order to transition the video session into _initial_ state, the
+application must: issue a flink:vkCmdControlVideoCodingKHR command with
+slink:VkVideoCodingControlInfoKHR::pname:flags including
+ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR.
+
+Video session objects also maintain the
+<<dpb-state-and-backing-store,state>> of the DPB.
+The number of DPB slots usable with the created video session is specified
+in pname:pCreateInfo->maxDpbSlots, and each slot is initially in the
+<<dpb-slot-states,inactive state>>.
+
+Each <<dpb-slot,DPB slot>> maintained by the created video session can:
+refer to a <<reference-picture,reference picture>> representing a video
+frame.
+
+ifdef::VK_KHR_video_decode_h264[]
+[[decode-h264-interlaced-support]]
+In addition, if the pname:videoCodecOperation member of the
+slink:VkVideoProfileInfoKHR structure pointed to by
+pname:pCreateInfo->pVideoProfile is
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the
+pname:pictureLayout member of the slink:VkVideoDecodeH264ProfileInfoKHR
+structure provided in the slink:VkVideoProfileInfoKHR::pname:pNext chain is
+not ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR, then the
+created video session supports _interlaced_ frames and each <<dpb-slot,DPB
+slot>> maintained by the created video session can: instead refer to
+separate top field and bottom field <<reference-picture,reference pictures>>
+that together can: represent a full video frame.
+In this case, it is up to the application, driven by the video content,
+whether it associates any individual DPB slot with separate top and/or
+bottom field pictures or a single picture representing a full frame.
+endif::VK_KHR_video_decode_h264[]
+
+The created video session can: be used to perform video coding operations
+using video frames up to the maximum size specified in
+pname:pCreateInfo->maxCodedExtent.
+The minimum frame size allowed is implicitly derived from
+slink:VkVideoCapabilitiesKHR::pname:minCodedExtent, as returned by
+flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile
+specified by pname:pCreateInfo->pVideoProfile.
+Accordingly, the created video session is said to be created with a
+pname:minCodedExtent equal to that.
+
+ifdef::VK_KHR_video_encode_queue[]
+In case of video session objects created with a video encode operation,
+implementations may: return the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error if any of the
+specified Video Std parameters do not adhere to the syntactic or semantic
+requirements of the used video compression standard, or if values derived
+from parameters according to the rules defined by the used video compression
+standard do not adhere to the capabilities of the video compression standard
+or the implementation.
+
+[NOTE]
+.Note
+====
+Applications should: not rely on the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error being returned by any
+command as a means to verify Video Std parameters, as implementations are
+not required to report the error in any specific set of cases.
+====
+endif::VK_KHR_video_encode_queue[]
+
+include::{generated}/validity/protos/vkCreateVideoSessionKHR.adoc[]
+--
+
+[open,refpage='VkVideoSessionCreateInfoKHR',desc='Structure specifying parameters of a newly created video session',type='structs']
+--
+The slink:VkVideoSessionCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queueFamilyIndex is the index of the queue family the created
+    video session will be used with.
+  * pname:flags is a bitmask of elink:VkVideoSessionCreateFlagBitsKHR
+    specifying creation flags.
+  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileInfoKHR
+    structure specifying the video profile the created video session will be
+    used with.
+  * pname:pictureFormat is the image format the created video session will
+    be used with.
+ifdef::VK_KHR_video_decode_queue[]
+    If pname:pVideoProfile->videoCodecOperation specifies a decode
+    operation, then pname:pictureFormat is the image format of
+    <<decode-output-picture, decode output pictures>> usable with the
+    created video session.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+    If pname:pVideoProfile->videoCodecOperation specifies an encode
+    operation, then pname:pictureFormat is the image format of
+    <<encode-input-picture, encode input pictures>> usable with the created
+    video session.
+endif::VK_KHR_video_encode_queue[]
+  * pname:maxCodedExtent is the maximum width and height of the coded frames
+    the created video session will be used with.
+  * pname:referencePictureFormat is the image format of
+    <<reference-picture,reference pictures>> stored in the <<dpb,DPB>> the
+    created video session will be used with.
+  * pname:maxDpbSlots is the maximum number of <<dpb-slot,DPB Slots>> that
+    can: be used with the created video session.
+  * pname:maxActiveReferencePictures is the maximum number of
+    <<active-reference-pictures,active reference pictures>> that can: be
+    used in a single video coding operation using the created video session.
+  * pname:pStdHeaderVersion is a pointer to a slink:VkExtensionProperties
+    structure requesting the Video Std header version to use for the
+    pname:videoCodecOperation specified in pname:pVideoProfile.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoSessionCreateInfoKHR-protectedMemory-07189]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled or if slink:VkVideoCapabilitiesKHR::pname:flags does not
+    include ename:VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR, as returned
+    by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile
+    specified by pname:pVideoProfile, then pname:flags must: not include
+    ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR
+  * [[VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-04845]]
+    pname:pVideoProfile must: be a <<video-profile-support, supported video
+    profile>>
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxDpbSlots-04847]]
+    pname:maxDpbSlots must: be less than or equal to
+    slink:VkVideoCapabilitiesKHR::pname:maxDpbSlots, as returned by
+    flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile
+    specified by pname:pVideoProfile
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxActiveReferencePictures-04849]]
+    pname:maxActiveReferencePictures must: be less than or equal to
+    slink:VkVideoCapabilitiesKHR::pname:maxActiveReferencePictures, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile specified by pname:pVideoProfile
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxDpbSlots-04850]]
+    If either pname:maxDpbSlots or pname:maxActiveReferencePictures is `0`,
+    then both must: be `0`
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxCodedExtent-04851]]
+    pname:maxCodedExtent must: be between
+    slink:VkVideoCapabilitiesKHR::pname:minCodedExtent and
+    slink:VkVideoCapabilitiesKHR::pname:maxCodedExtent, inclusive, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile specified by pname:pVideoProfile
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkVideoSessionCreateInfoKHR-referencePictureFormat-04852]]
+    If pname:pVideoProfile->videoCodecOperation specifies a decode operation
+    and pname:maxActiveReferencePictures is greater than `0`, then
+    pname:referencePictureFormat must: be one of the supported decode DPB
+    formats, as returned by
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR in
+    slink:VkVideoFormatPropertiesKHR::pname:format when called with the
+    pname:imageUsage member of its pname:pVideoFormatInfo parameter
+    containing ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, and with a
+    slink:VkVideoProfileListInfoKHR structure specified in the pname:pNext
+    chain of its pname:pVideoFormatInfo parameter whose pname:pProfiles
+    member contains an element matching pname:pVideoProfile
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkVideoSessionCreateInfoKHR-referencePictureFormat-06814]]
+    If pname:pVideoProfile->videoCodecOperation specifies an encode
+    operation and pname:maxActiveReferencePictures is greater than `0`, then
+    pname:referencePictureFormat must: be one of the supported decode DPB
+    formats, as returned by then pname:referencePictureFormat must: be one
+    of the supported encode DPB formats, as returned by
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR in
+    slink:VkVideoFormatPropertiesKHR::pname:format when called with the
+    pname:imageUsage member of its pname:pVideoFormatInfo parameter
+    containing ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, and with a
+    slink:VkVideoProfileListInfoKHR structure specified in the pname:pNext
+    chain of its pname:pVideoFormatInfo parameter whose pname:pProfiles
+    member contains an element matching pname:pVideoProfile
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04853]]
+    If pname:pVideoProfile->videoCodecOperation specifies a decode
+    operation, then pname:pictureFormat must: be one of the supported decode
+    output formats, as returned by
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR in
+    slink:VkVideoFormatPropertiesKHR::pname:format when called with the
+    pname:imageUsage member of its pname:pVideoFormatInfo parameter
+    containing ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, and with a
+    slink:VkVideoProfileListInfoKHR structure specified in the pname:pNext
+    chain of its pname:pVideoFormatInfo parameter whose pname:pProfiles
+    member contains an element matching pname:pVideoProfile
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04854]]
+    If pname:pVideoProfile->videoCodecOperation specifies an encode
+    operation, then pname:pictureFormat must: be one of the supported encode
+    input formats, as returned by
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR in
+    slink:VkVideoFormatPropertiesKHR::pname:format when called with the
+    pname:imageUsage member of its pname:pVideoFormatInfo parameter
+    containing ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and with a
+    slink:VkVideoProfileListInfoKHR structure specified in the pname:pNext
+    chain of its pname:pVideoFormatInfo parameter whose pname:pProfiles
+    member contains an element matching pname:pVideoProfile
+endif::VK_KHR_video_encode_queue[]
+  * [[VUID-VkVideoSessionCreateInfoKHR-pStdHeaderVersion-07190]]
+    pname:pStdHeaderVersion->extensionName must: match
+    slink:VkVideoCapabilitiesKHR::pname:stdHeaderVersion.extensionName, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile specified by pname:pVideoProfile
+  * [[VUID-VkVideoSessionCreateInfoKHR-pStdHeaderVersion-07191]]
+    pname:pStdHeaderVersion->specVersion must: be less than or equal to
+    slink:VkVideoCapabilitiesKHR::pname:stdHeaderVersion.specVersion, as
+    returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video
+    profile specified by pname:pVideoProfile
+****
+
+include::{generated}/validity/structs/VkVideoSessionCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoSessionCreateFlagBitsKHR',desc='Video session creation flags',type='enums']
+--
+Bits which can: be set in slink:VkVideoSessionCreateInfoKHR::pname:flags
+are:
+
+include::{generated}/api/enums/VkVideoSessionCreateFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR specifies that
+    the video session uses protected video content.
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR
+    specifies that the implementation is allowed to override video session
+    parameters and other codec-specific encoding parameters to optimize
+    video encode operations based on the specific use case defined by the
+    <<video-profiles,video profile>> and the used video encode quality
+    level.
+endif::VK_KHR_video_encode_queue[]
+--
+
+[open,refpage='VkVideoSessionCreateFlagsKHR',desc='Bitmask of VkVideoSessionCreateFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoSessionCreateFlagsKHR.adoc[]
+
+tname:VkVideoSessionCreateFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoSessionCreateFlagBitsKHR.
+--
+
+
+[[video-session-destruction]]
+=== Destroying a Video Session
+
+[open,refpage='vkDestroyVideoSessionKHR',desc='Destroy video session object',type='protos']
+--
+To destroy a video session, call:
+
+include::{generated}/api/protos/vkDestroyVideoSessionKHR.adoc[]
+
+  * pname:device is the logical device that destroys the video session.
+  * pname:videoSession is the video session to destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyVideoSessionKHR-videoSession-07192]]
+    All submitted commands that refer to pname:videoSession must: have
+    completed execution
+  * [[VUID-vkDestroyVideoSessionKHR-videoSession-07193]]
+    If sname:VkAllocationCallbacks were provided when pname:videoSession was
+    created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyVideoSessionKHR-videoSession-07194]]
+    If no sname:VkAllocationCallbacks were provided when pname:videoSession
+    was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyVideoSessionKHR.adoc[]
+--
+
+
+[[video-session-memory-association]]
+=== Video Session Memory Association
+
+After creating a video session object, and before the object can: be used to
+record video coding operations into command buffers using it, the
+application must: allocate and bind device memory to the video session.
+Device memory is allocated separately (see <<memory-device>>) and then
+associated with the video session.
+
+Video sessions may: have multiple memory bindings identified by unique
+unsigned integer values.
+Appropriate device memory must: be bound to each such memory binding before
+using the video session to record command buffer commands with it.
+
+[open,refpage='vkGetVideoSessionMemoryRequirementsKHR',desc='Get the memory requirements for a video session',type='protos']
+--
+To determine the memory requirements for a video session object, call:
+
+include::{generated}/api/protos/vkGetVideoSessionMemoryRequirementsKHR.adoc[]
+
+  * pname:device is the logical device that owns the video session.
+  * pname:videoSession is the video session to query.
+  * pname:pMemoryRequirementsCount is a pointer to an integer related to the
+    number of memory binding requirements available or queried, as described
+    below.
+  * pname:pMemoryRequirements is `NULL` or a pointer to an array of
+    slink:VkVideoSessionMemoryRequirementsKHR structures in which the memory
+    binding requirements of the video session are returned.
+
+If pname:pMemoryRequirements is `NULL`, then the number of memory bindings
+required for the video session is returned in
+pname:pMemoryRequirementsCount.
+Otherwise, pname:pMemoryRequirementsCount must: point to a variable set by
+the user with the number of elements in the pname:pMemoryRequirements array,
+and on return the variable is overwritten with the number of memory binding
+requirements actually written to pname:pMemoryRequirements.
+If pname:pMemoryRequirementsCount is less than the number of memory bindings
+required for the video session, then at most pname:pMemoryRequirementsCount
+elements will be written to pname:pMemoryRequirements, and
+ename:VK_INCOMPLETE will be returned, instead of ename:VK_SUCCESS, to
+indicate that not all required memory binding requirements were returned.
+
+include::{generated}/validity/protos/vkGetVideoSessionMemoryRequirementsKHR.adoc[]
+--
+
+
+[open,refpage='VkVideoSessionMemoryRequirementsKHR',desc='Structure describing video session memory requirements',type='structs']
+--
+The sname:VkVideoSessionMemoryRequirementsKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionMemoryRequirementsKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryBindIndex is the index of the memory binding.
+  * pname:memoryRequirements is a slink:VkMemoryRequirements structure in
+    which the requested memory binding requirements for the binding index
+    specified by pname:memoryBindIndex are returned.
+
+include::{generated}/validity/structs/VkVideoSessionMemoryRequirementsKHR.adoc[]
+--
+
+
+[open,refpage='vkBindVideoSessionMemoryKHR',desc='Bind Video Memory',type='protos']
+--
+To attach memory to a video session object, call:
+
+include::{generated}/api/protos/vkBindVideoSessionMemoryKHR.adoc[]
+
+  * pname:device is the logical device that owns the video session.
+  * pname:videoSession is the video session to be bound with device memory.
+  * pname:bindSessionMemoryInfoCount is the number of elements in
+    pname:pBindSessionMemoryInfos.
+  * pname:pBindSessionMemoryInfos is a pointer to an array of
+    pname:bindSessionMemoryInfoCount slink:VkBindVideoSessionMemoryInfoKHR
+    structures specifying memory regions to be bound to specific memory
+    bindings of the video session.
+
+The valid usage statements below refer to the slink:VkMemoryRequirements
+structure corresponding to a specific element of
+pname:pBindSessionMemoryInfos, which is defined as follows:
+
+  * If the pname:memoryBindIndex member of the element of
+    pname:pBindSessionMemoryInfos in question matches the
+    pname:memoryBindIndex member of one of the elements returned in
+    pname:pMemoryRequirements when
+    flink:vkGetVideoSessionMemoryRequirementsKHR is called with the same
+    pname:videoSession and with pname:pMemoryRequirementsCount equal to
+    pname:bindSessionMemoryInfoCount, then the pname:memoryRequirements
+    member of that element of pname:pMemoryRequirements is the
+    slink:VkMemoryRequirements structure corresponding to the element of
+    pname:pBindSessionMemoryInfos in question.
+  * Otherwise the element of pname:pBindSessionMemoryInfos in question is
+    said to not have a corresponding slink:VkMemoryRequirements structure.
+
+.Valid Usage
+****
+  * [[VUID-vkBindVideoSessionMemoryKHR-videoSession-07195]]
+    The memory binding of pname:videoSession identified by the
+    pname:memoryBindIndex member of any element of
+    pname:pBindSessionMemoryInfos must: not already be backed by a memory
+    object
+  * [[VUID-vkBindVideoSessionMemoryKHR-memoryBindIndex-07196]]
+    The pname:memoryBindIndex member of each element of
+    pname:pBindSessionMemoryInfos must: be unique within
+    pname:pBindSessionMemoryInfos
+  * [[VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07197]]
+    Each element of pname:pBindSessionMemoryInfos must: have a corresponding
+    slink:VkMemoryRequirements structure
+  * [[VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07198]]
+    If an element of pname:pBindSessionMemoryInfos has a corresponding
+    slink:VkMemoryRequirements structure, then the pname:memory member of
+    that element of pname:pBindSessionMemoryInfos must: have been allocated
+    using one of the memory types allowed in the pname:memoryTypeBits member
+    of the corresponding slink:VkMemoryRequirements structure
+  * [[VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07199]]
+    If an element of pname:pBindSessionMemoryInfos has a corresponding
+    slink:VkMemoryRequirements structure, then the pname:memoryOffset member
+    of that element of pname:pBindSessionMemoryInfos must: be an integer
+    multiple of the pname:alignment member of the corresponding
+    slink:VkMemoryRequirements structure
+  * [[VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07200]]
+    If an element of pname:pBindSessionMemoryInfos has a corresponding
+    slink:VkMemoryRequirements structure, then the pname:memorySize member
+    of that element of pname:pBindSessionMemoryInfos must: equal the
+    pname:size member of the corresponding slink:VkMemoryRequirements
+    structure
+****
+
+include::{generated}/validity/protos/vkBindVideoSessionMemoryKHR.adoc[]
+--
+
+[open,refpage='VkBindVideoSessionMemoryInfoKHR',desc='Structure specifying memory bindings for a video session object',type='structs']
+--
+The sname:VkBindVideoSessionMemoryInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkBindVideoSessionMemoryInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryBindIndex is the memory binding index to bind memory to.
+  * pname:memory is the allocated device memory to be bound to the video
+    session's memory binding with index pname:memoryBindIndex.
+  * pname:memoryOffset is the start offset of the region of pname:memory
+    which is to be bound.
+  * pname:memorySize is the size in bytes of the region of pname:memory,
+    starting from pname:memoryOffset bytes, to be bound.
+
+.Valid Usage
+****
+  * [[VUID-VkBindVideoSessionMemoryInfoKHR-memoryOffset-07201]]
+    pname:memoryOffset must: be less than the size of pname:memory
+  * [[VUID-VkBindVideoSessionMemoryInfoKHR-memorySize-07202]]
+    pname:memorySize must: be less than or equal to the size of pname:memory
+    minus pname:memoryOffset
+****
+
+include::{generated}/validity/structs/VkBindVideoSessionMemoryInfoKHR.adoc[]
+--
+
+
+[[video-profile-compatibility]]
+== Video Profile Compatibility
+
+Resources and query pools used with a particular video session must: be
+compatible with the <<video-profiles,video profile>> the video session was
+created with.
+
+A slink:VkBuffer is compatible with a video profile if it was created with
+the slink:VkBufferCreateInfo::pname:pNext chain including a
+slink:VkVideoProfileListInfoKHR structure with its pname:pProfiles member
+containing an element matching the slink:VkVideoProfileInfoKHR structure
+chain describing the video profile, and
+slink:VkBufferCreateInfo::pname:usage including at least one bit specific to
+video coding usage.
+
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR
+  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+
+A slink:VkImage is compatible with a video profile if it was created with
+the slink:VkImageCreateInfo::pname:pNext chain including a
+slink:VkVideoProfileListInfoKHR structure with its pname:pProfiles member
+containing an element matching the slink:VkVideoProfileInfoKHR structure
+chain describing the video profile, and slink:VkImageCreateInfo::pname:usage
+including at least one bit specific to video coding usage.
+
+ifdef::VK_KHR_video_decode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+
+A slink:VkImageView is compatible with a video profile if the slink:VkImage
+it was created from is also compatible with that video profile.
+
+A slink:VkQueryPool is compatible with a video profile if it was created
+with the slink:VkQueryPoolCreateInfo::pname:pNext chain including a
+slink:VkVideoProfileInfoKHR structure chain describing the same video
+profile, and slink:VkQueryPoolCreateInfo::pname:queryType having one of the
+following values:
+
+  * ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR
+endif::VK_KHR_video_encode_queue[]
+
+
+[[video-session-parameters]]
+== Video Session Parameters
+
+Video session parameters objects can: store preprocessed codec-specific
+parameters used with a compatible video session, and enable reducing the
+number of parameters needed to be provided and processed by the
+implementation while recording video coding operations into command buffers.
+
+Parameters stored in such objects are _immutable_ to facilitate the
+concurrent use of the stored parameters in multiple threads.
+At the same time, new parameters can: be added to existing objects using the
+flink:vkUpdateVideoSessionParametersKHR command.
+
+In order to support concurrent use of the stored immutable parameters while
+also allowing the video session parameters object to be extended with new
+parameters, each video session parameters object maintains an _update
+sequence counter_ that is set to `0` at object creation time and must: be
+incremented by each subsequent update operation.
+
+Certain video sequences that adhere to particular video compression
+standards permit updating previously supplied parameters.
+If a parameter update is necessary, the application has the following
+options:
+
+  * Cache the set of parameters on the application side and create a new
+    video session parameters object adding all the parameters with
+    appropriate changes, as necessary; or
+  * Create a new video session parameters object providing only the updated
+    parameters and the previously used object as the template, which ensures
+    that parameters not specified at creation time will be copied unmodified
+    from the template object.
+
+The actual types of parameters that can: be stored and the capacity for
+individual parameter types, and the methods of initializing, updating, and
+referring to individual parameters are specific to the video codec operation
+the video session parameters object was created with.
+
+ifdef::VK_KHR_video_decode_h264[]
+  * For ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR these are defined
+    in the <<decode-h264-parameter-sets,H.264 Decode Parameter Sets>>
+    section.
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * For ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR these are defined
+    in the <<decode-h265-parameter-sets,H.265 Decode Parameter Sets>>
+    section.
+endif::VK_KHR_video_decode_h265[]
+
+
+[open,refpage='VkVideoSessionParametersKHR',desc='Opaque handle to a video session parameters object',type='handles']
+--
+Video session parameters are represented by
+sname:VkVideoSessionParametersKHR handles:
+
+include::{generated}/api/handles/VkVideoSessionParametersKHR.adoc[]
+--
+
+
+[[creating-video-session-parameters]]
+=== Creating Video Session Parameters
+
+[open,refpage='vkCreateVideoSessionParametersKHR',desc='Creates video session parameters object',type='protos']
+--
+To create a video session parameters object, call:
+
+include::{generated}/api/protos/vkCreateVideoSessionParametersKHR.adoc[]
+
+  * pname:device is the logical device that creates the video session
+    parameters object.
+  * pname:pCreateInfo is a pointer to
+    slink:VkVideoSessionParametersCreateInfoKHR structure containing
+    parameters to be used to create the video session parameters object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pVideoSessionParameters is a pointer to a
+    slink:VkVideoSessionParametersKHR handle in which the resulting video
+    session parameters object is returned.
+
+The resulting video session parameters object is said to be created with the
+video codec operation pname:pCreateInfo->videoSession was created with.
+
+If pname:pCreateInfo->videoSessionParametersTemplate is not
+dname:VK_NULL_HANDLE, then it will be used as a template for constructing
+the new video session parameters object.
+This happens by first adding any parameters according to the additional
+creation parameters provided in the pname:pCreateInfo->pNext chain, followed
+by adding any parameters from the template object that have a key that does
+not match the key of any of the already added parameters.
+
+ifdef::VK_KHR_video_decode_h264[]
+If pname:pCreateInfo->videoSession was created with the video codec
+operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the
+created video session parameters object will initially contain the following
+sets of parameter entries:
+
+  * code:StdVideoH264SequenceParameterSet structures representing
+    <<decode-h264-sps,H.264 SPS>> entries, as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+     provided in the pname:pCreateInfo->pNext chain is not `NULL`, then the
+     set of code:StdVideoH264SequenceParameterSet entries specified in
+     pname:pParametersAddInfo->pStdSPSs are added first;
+  ** If pname:pCreateInfo->videoSessionParametersTemplate is not
+     dname:VK_NULL_HANDLE, then each code:StdVideoH264SequenceParameterSet
+     entry stored in it is copied to the created video session parameters
+     object if the created object does not already contain such an entry
+     with the same pname:seq_parameter_set_id.
+  * code:StdVideoH264PictureParameterSet structures representing
+    <<decode-h264-pps,H.264 PPS>> entries, as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+     provided in the pname:pCreateInfo->pNext chain is not `NULL`, then the
+     set of code:StdVideoH264PictureParameterSet entries specified in
+     pname:pParametersAddInfo->pStdPPSs are added first;
+  ** If pname:pCreateInfo->videoSessionParametersTemplate is not
+     dname:VK_NULL_HANDLE, then each code:StdVideoH264PictureParameterSet
+     entry stored in it is copied to the created video session parameters
+     object if the created object does not already contain such an entry
+     with the same pname:seq_parameter_set_id and
+     pname:pic_parameter_set_id.
+endif::VK_KHR_video_decode_h264[]
+
+ifdef::VK_KHR_video_decode_h265[]
+If pname:pCreateInfo->videoSession was created with the video codec
+operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the
+created video session parameters object will initially contain the following
+sets of parameter entries:
+
+  * code:StdVideoH265VideoParameterSet structures representing
+    <<decode-h265-vps,H.265 VPS>> entries, as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pCreateInfo->pNext chain is not `NULL`, then the
+     set of code:StdVideoH265VideoParameterSet entries specified in
+     pname:pParametersAddInfo->pStdVPSs are added first;
+  ** If pname:pCreateInfo->videoSessionParametersTemplate is not
+     dname:VK_NULL_HANDLE, then each code:StdVideoH265VideoParameterSet
+     entry stored in it is copied to the created video session parameters
+     object if the created object does not already contain such an entry
+     with the same pname:vps_video_parameter_set_id.
+  * code:StdVideoH265SequenceParameterSet structures representing
+    <<decode-h265-sps,H.265 SPS>> entries, as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pCreateInfo->pNext chain is not `NULL`, then the
+     set of code:StdVideoH265SequenceParameterSet entries specified in
+     pname:pParametersAddInfo->pStdSPSs are added first;
+  ** If pname:pCreateInfo->videoSessionParametersTemplate is not
+     dname:VK_NULL_HANDLE, then each code:StdVideoH265SequenceParameterSet
+     entry stored in it is copied to the created video session parameters
+     object if the created object does not already contain such an entry
+     with the same pname:sps_video_parameter_set_id and
+     pname:sps_seq_parameter_set_id.
+  * code:StdVideoH265PictureParameterSet structures representing
+    <<decode-h265-pps,H.265 PPS>> entries, as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pCreateInfo->pNext chain is not `NULL`, then the
+     set of code:StdVideoH265PictureParameterSet entries specified in
+     pname:pParametersAddInfo->pStdPPSs are added first;
+  ** If pname:pCreateInfo->videoSessionParametersTemplate is not
+     dname:VK_NULL_HANDLE, then each code:StdVideoH265PictureParameterSet
+     entry stored in it is copied to the created video session parameters
+     object if the created object does not already contain such an entry
+     with the same pname:sps_video_parameter_set_id,
+     pname:pps_seq_parameter_set_id, and pname:pps_pic_parameter_set_id.
+endif::VK_KHR_video_decode_h265[]
+
+ifdef::VK_KHR_video_encode_queue[]
+In case of video session parameters objects created with a video encode
+operation, implementations may: return the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error if any of the
+specified Video Std parameters do not adhere to the syntactic or semantic
+requirements of the used video compression standard, or if values derived
+from parameters according to the rules defined by the used video compression
+standard do not adhere to the capabilities of the video compression standard
+or the implementation.
+
+[NOTE]
+.Note
+====
+Applications should: not rely on the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error being returned by any
+command as a means to verify Video Std parameters, as implementations are
+not required to report the error in any specific set of cases.
+====
+endif::VK_KHR_video_encode_queue[]
+
+include::{generated}/validity/protos/vkCreateVideoSessionParametersKHR.adoc[]
+--
+
+[open,refpage='VkVideoSessionParametersCreateInfoKHR',desc='Structure specifying parameters of a newly created video session parameters object',type='structs']
+--
+The sname:VkVideoSessionParametersCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionParametersCreateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:videoSessionParametersTemplate is dname:VK_NULL_HANDLE or a valid
+    handle to a slink:VkVideoSessionParametersKHR object used as a template
+    for constructing the new video session parameters object.
+  * pname:videoSession is the video session object against which the video
+    session parameters object is going to be created.
+
+Limiting values are defined below that are referenced by the relevant valid
+usage statements of this structure.
+
+ifdef::VK_KHR_video_decode_h264[]
+  * If pname:videoSession was created with the codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then let
+    `StdVideoH264SequenceParameterSet spsAddList[]` be the list of
+    <<decode-h264-sps,H.264 SPS>> entries to add to the created video
+    session parameters object, defined as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+     provided in the pname:pNext chain is not `NULL`, then the set of
+     code:StdVideoH264SequenceParameterSet entries specified in
+     pname:pParametersAddInfo->pStdSPSs are added to pname:spsAddList;
+  ** If pname:videoSessionParametersTemplate is not dname:VK_NULL_HANDLE,
+     then each code:StdVideoH264SequenceParameterSet entry stored in it with
+     pname:seq_parameter_set_id not matching any of the entries already in
+     pname:spsAddList is added to pname:spsAddList.
+  * If pname:videoSession was created with the codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then let
+    `StdVideoH264PictureParameterSet ppsAddList[]` be the list of
+    <<decode-h264-pps,H.264 PPS>> entries to add to the created video
+    session parameters object, defined as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+     provided in the pname:pNext chain is not `NULL`, then the set of
+     code:StdVideoH264PictureParameterSet entries specified in
+     pname:pParametersAddInfo->pStdPPSs are added to pname:ppsAddList;
+  ** If pname:videoSessionParametersTemplate is not dname:VK_NULL_HANDLE,
+     then each code:StdVideoH264PictureParameterSet entry stored in it with
+     pname:seq_parameter_set_id or pname:pic_parameter_set_id not matching
+     any of the entries already in pname:ppsAddList is added to
+     pname:ppsAddList.
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * If pname:videoSession was created with the codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then let
+    `StdVideoH265VideoParameterSet vpsAddList[]` be the list of
+    <<decode-h265-vps,H.265 VPS>> entries to add to the created video
+    session parameters object, defined as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pNext chain is not `NULL`, then the set of
+     code:StdVideoH265VideoParameterSet entries specified in
+     pname:pParametersAddInfo->pStdVPSs are added to pname:vpsAddList;
+  ** If pname:videoSessionParametersTemplate is not dname:VK_NULL_HANDLE,
+     then each code:StdVideoH265VideoParameterSet entry stored in it with
+     pname:vps_video_parameter_set_id not matching any of the entries
+     already in pname:vpsAddList is added to pname:vpsAddList.
+  * If pname:videoSession was created with the codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then let
+    `StdVideoH265SequenceParameterSet spsAddList[]` be the list of
+    <<decode-h265-sps,H.265 SPS>> entries to add to the created video
+    session parameters object, defined as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pNext chain is not `NULL`, then the set of
+     code:StdVideoH265SequenceParameterSet entries specified in
+     pname:pParametersAddInfo->pStdSPSs are added to pname:spsAddList;
+  ** If pname:videoSessionParametersTemplate is not dname:VK_NULL_HANDLE,
+     then each code:StdVideoH265SequenceParameterSet entry stored in it with
+     pname:sps_video_parameter_set_id or pname:sps_seq_parameter_set_id not
+     matching any of the entries already in pname:spsAddList is added to
+     pname:spsAddList.
+  * If pname:videoSession was created with the codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then let
+    `StdVideoH265PictureParameterSet ppsAddList[]` be the list of
+    <<decode-h265-pps,H.265 PPS>> entries to add to the created video
+    session parameters object, defined as follows:
+  ** If the pname:pParametersAddInfo member of the
+     slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+     provided in the pname:pNext chain is not `NULL`, then the set of
+     code:StdVideoH265PictureParameterSet entries specified in
+     pname:pParametersAddInfo->pStdPPSs are added to pname:ppsAddList;
+  ** If pname:videoSessionParametersTemplate is not dname:VK_NULL_HANDLE,
+     then each code:StdVideoH265PictureParameterSet entry stored in it with
+     pname:sps_video_parameter_set_id, pname:pps_seq_parameter_set_id, or
+     pname:pps_pic_parameter_set_id not matching any of the entries already
+     in pname:ppsAddList is added to pname:ppsAddList.
+endif::VK_KHR_video_decode_h265[]
+
+.Valid Usage
+****
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-04855]]
+    If pname:videoSessionParametersTemplate represents a valid handle, it
+    must: have been created against pname:videoSession
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07203]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pname:pNext
+    chain must: include a
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07204]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of
+    elements of pname:spsAddList must: be less than or equal to the
+    pname:maxStdSPSCount specified in the
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure included
+    in the pname:pNext chain
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07205]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of
+    elements of pname:ppsAddList must: be less than or equal to the
+    pname:maxStdPPSCount specified in the
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR structure included
+    in the pname:pNext chain
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07206]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pname:pNext
+    chain must: include a
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07207]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of
+    elements of pname:vpsAddList must: be less than or equal to the
+    pname:maxStdVPSCount specified in the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure included
+    in the pname:pNext chain
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07208]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of
+    elements of pname:spsAddList must: be less than or equal to the
+    pname:maxStdSPSCount specified in the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure included
+    in the pname:pNext chain
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07209]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of
+    elements of pname:ppsAddList must: be less than or equal to the
+    pname:maxStdPPSCount specified in the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR structure included
+    in the pname:pNext chain
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07210]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, then the pname:pNext
+    chain must: include a
+    slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07211]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, then the pname:pNext
+    chain must: include a
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT structure
+endif::VK_EXT_video_encode_h265[]
+****
+
+include::{generated}/validity/structs/VkVideoSessionParametersCreateInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoSessionParametersCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoSessionParametersCreateFlagsKHR.adoc[]
+
+tname:VkVideoSessionParametersCreateFlagsKHR is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+
+[[destroying-video-session-parameters]]
+=== Destroying Video Session Parameters
+
+[open,refpage='vkDestroyVideoSessionParametersKHR',desc='Destroy video session parameters object',type='protos']
+--
+To destroy a video session parameters object, call:
+
+include::{generated}/api/protos/vkDestroyVideoSessionParametersKHR.adoc[]
+
+  * pname:device is the logical device that destroys the video session
+    parameters object.
+  * pname:videoSessionParameters is the video session parameters object to
+    destroy.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07212]]
+    All submitted commands that refer to pname:videoSessionParameters must:
+    have completed execution
+  * [[VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07213]]
+    If sname:VkAllocationCallbacks were provided when
+    pname:videoSessionParameters was created, a compatible set of callbacks
+    must: be provided here
+  * [[VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07214]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:videoSessionParameters was created, pname:pAllocator must: be
+    `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyVideoSessionParametersKHR.adoc[]
+--
+
+
+[[video-session-parameters-update]]
+=== Updating Video Session Parameters
+
+[open,refpage='vkUpdateVideoSessionParametersKHR',desc='Update video session parameters object',type='protos']
+--
+To update video session parameters object with new parameters, call:
+
+include::{generated}/api/protos/vkUpdateVideoSessionParametersKHR.adoc[]
+
+  * pname:device is the logical device that updates the video session
+    parameters.
+  * pname:videoSessionParameters is the video session parameters object to
+    update.
+  * pname:pUpdateInfo is a pointer to a
+    slink:VkVideoSessionParametersUpdateInfoKHR structure specifying the
+    parameter update information.
+
+After a successful call to this command, the
+<<video-session-parameters,update sequence counter>> of
+pname:videoSessionParameters is changed to the value specified in
+pname:pUpdateInfo->updateSequenceCount.
+
+[NOTE]
+.Note:
+====
+As each update issued to a video session parameters object needs to specify
+the next available update sequence count value, concurrent updates of the
+same video session parameters object are inherently disallowed.
+However, recording video coding operations to command buffers referring to
+parameters previously added to the video session parameters object is
+allowed, even if there is a concurrent update in progress adding some new
+entries to the object.
+====
+
+ifdef::VK_KHR_video_decode_h264[]
+If pname:videoSessionParameters was created with the video codec operation
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the
+pname:pUpdateInfo->pNext chain includes a
+slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure, then this
+command adds the following parameter entries to
+pname:videoSessionParameters:
+
+  * The <<decode-h264-sps,H.264 SPS>> entries specified in
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR::pname:pStdSPSs.
+  * The <<decode-h264-pps,H.264 PPS>> entries specified in
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR::pname:pStdPPSs.
+endif::VK_KHR_video_decode_h264[]
+
+ifdef::VK_KHR_video_decode_h265[]
+If pname:videoSessionParameters was created with the video codec operation
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the
+pname:pUpdateInfo->pNext chain includes a
+slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure, then this
+command adds the following parameter entries to
+pname:videoSessionParameters:
+
+  * The <<decode-h265-vps,H.265 VPS>> entries specified in
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdVPSs.
+  * The <<decode-h265-sps,H.265 SPS>> entries specified in
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdSPSs.
+  * The <<decode-h265-pps,H.265 PPS>> entries specified in
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdPPSs.
+endif::VK_KHR_video_decode_h265[]
+
+ifdef::VK_KHR_video_encode_queue[]
+In case of video session parameters objects created with a video encode
+operation, implementations may: return the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error if any of the
+specified Video Std parameters do not adhere to the syntactic or semantic
+requirements of the used video compression standard, or if values derived
+from parameters according to the rules defined by the used video compression
+standard do not adhere to the capabilities of the video compression standard
+or the implementation.
+
+[NOTE]
+.Note
+====
+Applications should: not rely on the
+ename:VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR error being returned by any
+command as a means to verify Video Std parameters, as implementations are
+not required to report the error in any specific set of cases.
+====
+endif::VK_KHR_video_encode_queue[]
+
+.Valid Usage
+****
+  * [[VUID-vkUpdateVideoSessionParametersKHR-pUpdateInfo-07215]]
+    pname:pUpdateInfo->updateSequenceCount must: equal the current
+    <<video-session-parameters,update sequence counter>> of
+    pname:videoSessionParameters plus one
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07216]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH264SequenceParameterSet entry with
+    pname:seq_parameter_set_id matching any of the elements of
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR::pname:pStdSPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07217]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the
+    number of code:StdVideoH264SequenceParameterSet entries already stored
+    in it plus the value of the pname:stdSPSCount member of the
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure included in
+    the pname:pUpdateInfo->pNext chain must: be less than or equal to the
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR::pname:maxStdSPSCount
+    pname:videoSessionParameters was created with
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07218]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH264PictureParameterSet entry with both
+    pname:seq_parameter_set_id and pname:pic_parameter_set_id matching any
+    of the elements of
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR::pname:pStdPPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07219]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the
+    number of code:StdVideoH264PictureParameterSet entries already stored in
+    it plus the value of the pname:stdPPSCount member of the
+    slink:VkVideoDecodeH264SessionParametersAddInfoKHR structure included in
+    the pname:pUpdateInfo->pNext chain must: be less than or equal to the
+    slink:VkVideoDecodeH264SessionParametersCreateInfoKHR::pname:maxStdPPSCount
+    pname:videoSessionParameters was created with
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07220]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265VideoParameterSet entry with
+    pname:vps_video_parameter_set_id matching any of the elements of
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdVPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07221]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the
+    number of code:StdVideoH265VideoParameterSet entries already stored in
+    it plus the value of the pname:stdVPSCount member of the
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure included in
+    the pname:pUpdateInfo->pNext chain must: be less than or equal to the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR::pname:maxStdVPSCount
+    pname:videoSessionParameters was created with
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07222]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265SequenceParameterSet entry with both
+    pname:sps_video_parameter_set_id and pname:sps_seq_parameter_set_id
+    matching any of the elements of
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdSPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07223]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the
+    number of code:StdVideoH265SequenceParameterSet entries already stored
+    in it plus the value of the pname:stdSPSCount member of the
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure included in
+    the pname:pUpdateInfo->pNext chain must: be less than or equal to the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR::pname:maxStdSPSCount
+    pname:videoSessionParameters was created with
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07224]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265PictureParameterSet entry with
+    pname:sps_video_parameter_set_id, pname:pps_seq_parameter_set_id, and
+    pname:pps_pic_parameter_set_id all matching any of the elements of
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR::pname:pStdPPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07225]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the
+    number of code:StdVideoH265PictureParameterSet entries already stored in
+    it plus the value of the pname:stdPPSCount member of the
+    slink:VkVideoDecodeH265SessionParametersAddInfoKHR structure included in
+    the pname:pUpdateInfo->pNext chain must: be less than or equal to the
+    slink:VkVideoDecodeH265SessionParametersCreateInfoKHR::pname:maxStdPPSCount
+    pname:videoSessionParameters was created with
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07226]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoEncodeH264SessionParametersAddInfoEXT structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH264SequenceParameterSet entry with
+    pname:seq_parameter_set_id matching any of the elements of
+    slink:VkVideoEncodeH264SessionParametersAddInfoEXT::pname:pStdSPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07227]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoEncodeH264SessionParametersAddInfoEXT structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH264PictureParameterSet entry with both
+    pname:seq_parameter_set_id and pname:pic_parameter_set_id matching any
+    of the elements of
+    slink:VkVideoEncodeH264SessionParametersAddInfoEXT::pname:pStdPPSs
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07228]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265VideoParameterSet entry with
+    pname:vps_video_parameter_set_id matching any of the elements of
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT::pname:pStdVPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07229]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265SequenceParameterSet entry with both
+    pname:sps_video_parameter_set_id and pname:sps_seq_parameter_set_id
+    matching any of the elements of
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT::pname:pStdSPSs
+  * [[VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07230]]
+    If pname:videoSessionParameters was created with the video codec
+    operation ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT and the
+    pname:pNext chain of pname:pUpdateInfo includes a
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure, then
+    pname:videoSessionParameters must: not already contain a
+    code:StdVideoH265PictureParameterSet entry with
+    pname:sps_video_parameter_set_id, pname:pps_seq_parameter_set_id, and
+    pname:pps_pic_parameter_set_id all matching any of the elements of
+    slink:VkVideoEncodeH265SessionParametersAddInfoEXT::pname:pStdPPSs
+endif::VK_EXT_video_encode_h265[]
+****
+
+include::{generated}/validity/protos/vkUpdateVideoSessionParametersKHR.adoc[]
+--
+
+[open,refpage='VkVideoSessionParametersUpdateInfoKHR',desc='Structure specifying video session parameters update information',type='structs']
+--
+The sname:VkVideoSessionParametersUpdateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionParametersUpdateInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:updateSequenceCount is the new <<video-session-parameters,update
+    sequence count>> to set for the video session parameters object.
+
+include::{generated}/validity/structs/VkVideoSessionParametersUpdateInfoKHR.adoc[]
+--
+
+
+[[video-coding-scope]]
+== Video Coding Scope
+
+Applications can: record video coding commands for a video session only
+within a video coding scope.
+
+[open,refpage='vkCmdBeginVideoCodingKHR',desc='Begin video coding scope',type='protos']
+--
+To begin a video coding scope, call:
+
+include::{generated}/api/protos/vkCmdBeginVideoCodingKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pBeginInfo is a pointer to a slink:VkVideoBeginCodingInfoKHR
+    structure specifying the parameters of the video coding scope, including
+    the video session and video session parameters object to use.
+
+After beginning a video coding scope, the video session object specified in
+pname:pBeginInfo->videoSession is _bound_ to the command buffer, and the
+command buffer is ready to record video coding operations.
+Similarly, if pname:pBeginInfo->videoSessionParameters is not
+dname:VK_NULL_HANDLE, it is also _bound_ to the command buffer, and video
+coding operations can: refer to the codec-specific parameters stored in it.
+
+[[bound-reference-picture-resources]]
+This command also establishes the set of _bound reference picture resources_
+that can: be used as <<reconstructed-picture,reconstructed pictures>> or
+<<reference-picture,reference pictures>> within the video coding scope.
+Each element of this set consists of a <<video-picture-resources,video
+picture resource>> and the <<dpb-slot,DPB slot>> index associated with it,
+if there is one.
+
+The set of bound reference picture resources is immutable within a video
+coding scope, however, the DPB slot index associated with any of the bound
+reference picture resources can: change during the video coding scope in
+response to video coding operations.
+
+The slink:VkVideoReferenceSlotInfoKHR structures provided as the elements of
+pname:pBeginInfo->pReferenceSlots are interpreted by this command as
+follows:
+
+  * If pname:slotIndex is non-negative and pname:pPictureResource is not
+    `NULL`, then the <<video-picture-resources,video picture resource>>
+    defined by the slink:VkVideoPictureResourceInfoKHR structure pointed to
+    by pname:pPictureResource is added to the set of bound reference picture
+    resources and is associated with the DPB slot index specified in
+    pname:slotIndex.
+  * If pname:slotIndex is non-negative and pname:pPictureResource is `NULL`,
+    then the DPB slot with index pname:slotIndex is <<dpb-slot-states,
+    deactivated>> by this command.
+  * If pname:slotIndex is negative and pname:pPictureResource is not `NULL`,
+    then the <<video-picture-resources,video picture resource>> defined by
+    the slink:VkVideoPictureResourceInfoKHR structure pointed to by
+    pname:pPictureResource is added to the set of bound reference picture
+    resources without an associated DPB slot.
+    Such a picture resource can: be subsequently used as a
+    <<reconstructed-picture,reconstructed picture>> to associate it with a
+    DPB slot.
+  * If pname:slotIndex is negative and pname:pPictureResource is `NULL`,
+    then the element is ignored.
+
+ifdef::VK_KHR_video_decode_h264[]
+[NOTE]
+.Note:
+====
+It is possible for multiple bound reference picture resources to be
+associated with the same DPB slot index, or for a single bound reference
+picture to refer to multiple separate reference pictures.
+For example, in case of an <<decode-h264-profile,H.264 decode profile>> with
+<<decode-h264-interlaced-support,interlaced frame support>> a single DPB
+slot can refer to two separate pictures for the top and bottom fields.
+Depending on the picture layout used by the <<decode-h264-profile,H.264
+decode profile>>, the following special cases may: arise:
+
+  * If the picture layout is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR,
+    then the top and bottom field pictures are physically co-located in the
+    same video picture resource with even scanlines corresponding to the top
+    field and odd scanlines corresponding to the bottom field, respectively.
+  * If the picture layout is
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR,
+    then the top and bottom field pictures are stored in separate video
+    picture resources (in separate subregions of the same image layer, in
+    separate layers of the same image, or in entirely separate images),
+    hence two elements of
+    slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots can: contain the
+    same pname:slotIndex but specify different video picture resources in
+    their pname:pPictureResource members.
+
+====
+endif::VK_KHR_video_decode_h264[]
+
+All non-negative pname:slotIndex values specified in the elements of
+pname:pBeginInfo->pReferenceSlots must: identify DPB slots of the video
+session that are in the <<dpb-slot-states,active state>> at the time this
+command is executed on the device.
+
+[NOTE]
+.Note:
+====
+The application does not have to specify an entry in
+pname:pBeginInfo->pReferenceSlots corresponding to all active DPB slots of
+the video session, but only for those which are intended to be used in the
+video coding scope.
+This way the application can avoid any potential runtime cost associated
+with binding the corresponding picture resources to the command buffer.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07231]]
+    The sname:VkCommandPool that pname:commandBuffer was allocated from
+    must: support the video codec operation pname:pBeginInfo->videoSession
+    was created with, as returned by
+    flink:vkGetPhysicalDeviceQueueFamilyProperties2 in
+    slink:VkQueueFamilyVideoPropertiesKHR::pname:videoCodecOperations
+  * [[VUID-vkCmdBeginVideoCodingKHR-None-07232]]
+    There must: be no <<queries-operation-active,active>> queries
+  * [[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07233]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pBeginInfo->videoSession must: not have been created with
+    ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR
+  * [[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07234]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    then pname:pBeginInfo->videoSession must: have been created with
+    ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR
+  * [[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07235]]
+    If pname:commandBuffer is an unprotected command buffer,
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    and the pname:pPictureResource member of any element of
+    pname:pBeginInfo->pReferenceSlots is not `NULL`, then
+    pname:pPictureResource->imageViewBinding for that element must: not
+    specify an image view created from a protected image
+  * [[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07236]]
+    If pname:commandBuffer is a protected command buffer
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    and the pname:pPictureResource member of any element of
+    pname:pBeginInfo->pReferenceSlots is not `NULL`, then
+    pname:pPictureResource->imageViewBinding for that element must: specify
+    an image view created from a protected image
+  * [[VUID-vkCmdBeginVideoCodingKHR-slotIndex-07239]]
+    If the pname:slotIndex member of any element of
+    pname:pBeginInfo->pReferenceSlots is not negative, then it must: specify
+    the index of a DPB slot that is in the <<dpb-slot-states,active state>>
+    in pname:pBeginInfo->videoSession at the time the command is executed on
+    the device
+  * [[VUID-vkCmdBeginVideoCodingKHR-pPictureResource-07265]]
+    Each video picture resource specified by any non-`NULL`
+    pname:pPictureResource member specified in the elements of
+    pname:pBeginInfo->pReferenceSlots for which pname:slotIndex is not
+    negative must: <<video-picture-resource-matching,match>> one of the
+    video picture resources currently associated with the DPB slot index of
+    pname:pBeginInfo->videoSession specified by pname:slotIndex at the time
+    the command is executed on the device
+****
+
+include::{generated}/validity/protos/vkCmdBeginVideoCodingKHR.adoc[]
+--
+
+[open,refpage='VkVideoBeginCodingInfoKHR',desc='Structure specifying video coding scope begin information',type='structs']
+--
+The slink:VkVideoBeginCodingInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoBeginCodingInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:videoSession is the video session object to be bound for the
+    processing of the video commands.
+  * pname:videoSessionParameters is dname:VK_NULL_HANDLE or a handle of a
+    slink:VkVideoSessionParametersKHR object to be used for the processing
+    of the video commands.
+    If dname:VK_NULL_HANDLE, then no video session parameters object is
+    bound for the duration of the video coding scope.
+  * pname:referenceSlotCount is the number of elements in the
+    pname:pReferenceSlots array.
+  * pname:pReferenceSlots is a pointer to an array of
+    slink:VkVideoReferenceSlotInfoKHR structures specifying the information
+    used to determine the set of <<bound-reference-picture-resources,bound
+    reference picture resources>> for the video coding scope and their
+    initial association with <<dpb-slot,DPB slot>> indices.
+
+Limiting values are defined below that are referenced by the relevant valid
+usage statements of this structure.
+
+  * Let `VkOffset2D codedOffsetGranularity` be the minimum alignment
+    requirement for the coded offset of video picture resources.
+    Unless otherwise defined, the value of the pname:x and pname:y members
+    of pname:codedOffsetGranularity are `0`.
+ifdef::VK_KHR_video_decode_h264[]
+  ** If pname:videoSession was created with an <<decode-h264-profile,H.264
+     decode profile>> with a
+     slink:VkVideoDecodeH264ProfileInfoKHR::pname:pictureLayout of
+     ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR,
+     then pname:codedOffsetGranularity is equal to
+     slink:VkVideoDecodeH264CapabilitiesKHR::pname:fieldOffsetGranularity,
+     as returned by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for that
+     video profile.
+endif::VK_KHR_video_decode_h264[]
+
+.Valid Usage
+****
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07237]]
+    pname:videoSession must: have memory bound to all of its memory bindings
+    returned by flink:vkGetVideoSessionMemoryRequirementsKHR for
+    pname:videoSession
+  * [[VUID-VkVideoBeginCodingInfoKHR-slotIndex-04856]]
+    Each non-negative slink:VkVideoReferenceSlotInfoKHR::pname:slotIndex
+    specified in the elements of pname:pReferenceSlots must: be less than
+    the slink:VkVideoSessionCreateInfoKHR::pname:maxDpbSlots specified when
+    pname:videoSession was created
+  * [[VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07238]]
+    Each video picture resource corresponding to any non-`NULL`
+    pname:pPictureResource member specified in the elements of
+    pname:pReferenceSlots must: be <<video-picture-resource-uniqueness,
+    unique>> within pname:pReferenceSlots
+  * [[VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07240]]
+    If the pname:pPictureResource member of any element of
+    pname:pReferenceSlots is not `NULL`, then the image view specified in
+    pname:pPictureResource->imageViewBinding for that element must: be
+    <<video-profile-compatibility,compatible>> with the video profile
+    pname:videoSession was created with
+  * [[VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07241]]
+    If the pname:pPictureResource member of any element of
+    pname:pReferenceSlots is not `NULL`, then the format of the image view
+    specified in pname:pPictureResource->imageViewBinding for that element
+    must: match the
+    slink:VkVideoSessionCreateInfoKHR::pname:referencePictureFormat
+    pname:videoSession was created with
+  * [[VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07242]]
+    If the pname:pPictureResource member of any element of
+    pname:pReferenceSlots is not `NULL`, then its pname:codedOffset member
+    must: be an integer multiple of pname:codedOffsetGranularity
+  * [[VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07243]]
+    If the pname:pPictureResource member of any element of
+    pname:pReferenceSlots is not `NULL`, then its pname:codedExtent member
+    must: be between pname:minCodedExtent and pname:maxCodedExtent,
+    inclusive, pname:videoSession was created with
+  * [[VUID-VkVideoBeginCodingInfoKHR-flags-07244]]
+    If slink:VkVideoCapabilitiesKHR::pname:flags does not include
+    ename:VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR, as returned
+    by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile
+    pname:videoSession was created with, then
+    pname:pPictureResource->imageViewBinding of all elements of
+    pname:pReferenceSlots with a non-`NULL` pname:pPictureResource member
+    must: specify image views created from the same image
+ifdef::VK_KHR_video_decode_queue[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-slotIndex-07245]]
+    If pname:videoSession was created with a decode operation and the
+    pname:slotIndex member of any element of pname:pReferenceSlots is not
+    negative, then the image view specified in
+    pname:pPictureResource->imageViewBinding for that element must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-slotIndex-07246]]
+    If pname:videoSession was created with an encode operation and the
+    pname:slotIndex member of any element of pname:pReferenceSlots is not
+    negative, then the image view specified in
+    pname:pPictureResource->imageViewBinding for that element must: have
+    been created with ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_video_decode_h264[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07247]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then
+    pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
+endif::VK_KHR_video_decode_h264[]
+ifdef::VK_KHR_video_decode_h265[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07248]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then
+    pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
+endif::VK_KHR_video_decode_h265[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07249]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, then
+    pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSession-07250]]
+    If pname:videoSession was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, then
+    pname:videoSessionParameters must: not be dname:VK_NULL_HANDLE
+endif::VK_EXT_video_encode_h265[]
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-04857]]
+    If pname:videoSessionParameters is not dname:VK_NULL_HANDLE, it must:
+    have been created with pname:videoSession specified in
+    slink:VkVideoSessionParametersCreateInfoKHR::pname:videoSession
+****
+
+include::{generated}/validity/structs/VkVideoBeginCodingInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoBeginCodingFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoBeginCodingFlagsKHR.adoc[]
+
+tname:VkVideoBeginCodingFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+[open,refpage='VkVideoReferenceSlotInfoKHR',desc='Structure specifying information about a reference picture slot',type='structs']
+--
+The sname:VkVideoReferenceSlotInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoReferenceSlotInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:slotIndex is the index of the <<dpb-slot, DPB slot>> or a negative
+    integer value.
+  * pname:pPictureResource is `NULL` or a pointer to a
+    slink:VkVideoPictureResourceInfoKHR structure describing the
+    <<video-picture-resources,video picture resource>> associated with the
+    DPB slot index specified by pname:slotIndex.
+
+include::{generated}/validity/structs/VkVideoReferenceSlotInfoKHR.adoc[]
+--
+
+[open,refpage='vkCmdEndVideoCodingKHR',desc='End video coding scope',type='protos']
+--
+To end a video coding scope, call:
+
+include::{generated}/api/protos/vkCmdEndVideoCodingKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pEndCodingInfo is a pointer to a slink:VkVideoEndCodingInfoKHR
+    structure specifying the parameters for ending the video coding scope.
+
+After ending a video coding scope, the video session object, the optional
+video session parameters object, and all
+<<bound-reference-picture-resources, reference picture resources>>
+previously bound by the corresponding flink:vkCmdBeginVideoCodingKHR command
+are _unbound_.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndVideoCodingKHR-None-07251]]
+    There must: be no <<queries-operation-active,active>> queries
+****
+
+include::{generated}/validity/protos/vkCmdEndVideoCodingKHR.adoc[]
+--
+
+[open,refpage='VkVideoEndCodingInfoKHR',desc='Structure specifying video coding scope end information',type='structs']
+--
+The sname:VkVideoEndCodingInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEndCodingInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+
+include::{generated}/validity/structs/VkVideoEndCodingInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoEndCodingFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEndCodingFlagsKHR.adoc[]
+
+tname:VkVideoEndCodingFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+
+[[video-coding-control]]
+== Video Coding Control
+
+[open,refpage='vkCmdControlVideoCodingKHR',desc='Control video coding parameters',type='protos']
+--
+To apply dynamic controls to the currently bound video session object, call:
+
+include::{generated}/api/protos/vkCmdControlVideoCodingKHR.adoc[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pCodingControlInfo is a pointer to a
+    slink:VkVideoCodingControlInfoKHR structure specifying the control
+    parameters.
+
+The control parameters provided in this call are applied to the video
+session at the time the command executes on the device and are in effect
+until a subsequent call to this command with the same video session bound
+changes the corresponding control parameters.
+
+A newly created video session must: be reset before performing video coding
+operations using it by including ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR
+in pname:pCodingControlInfo->flags.
+The reset operation also returns all DPB slots of the video session to the
+<<dpb-slot-states,inactive state>>.
+Correspondingly, any DPB slot index associated with the
+<<bound-reference-picture-resources,bound reference picture resources>> is
+removed.
+
+ifdef::VK_KHR_video_encode_queue[]
+For encode sessions, the reset operation returns rate control configuration
+to implementation default settings and sets the video encode quality level
+to zero.
+endif::VK_KHR_video_encode_queue[]
+
+After video coding operations are performed using a video session, the reset
+operation can: be used to return the video session to the same _initial_
+state as after the reset of a newly created video session.
+This can: be used, for example, when different video sequences are needed to
+be processed with the same video session object.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdControlVideoCodingKHR-flags-07017]]
+    If pname:pCodingControlInfo->flags does not include
+    ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR, then the bound video
+    session must: not be in <<video-session-uninitialized,uninitialized>>
+    state at the time the command is executed on the device
+****
+
+include::{generated}/validity/protos/vkCmdControlVideoCodingKHR.adoc[]
+--
+
+[open,refpage='VkVideoCodingControlInfoKHR',desc='Structure specifying video coding control parameters',type='structs']
+--
+The sname:VkVideoCodingControlInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoCodingControlInfoKHR.adoc[]
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of tlink:VkVideoCodingControlFlagsKHR
+    specifying control flags.
+
+.Valid Usage
+****
+ifdef::VK_KHR_video_encode_queue[]
+  * [[VUID-VkVideoCodingControlInfoKHR-flags-07018]]
+    If pname:flags includes
+    ename:VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR, then the
+    pname:pNext chain must: include a slink:VkVideoEncodeRateControlInfoKHR
+    structure
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_EXT_video_encode_h264[]
+  * [[VUID-VkVideoCodingControlInfoKHR-flags-07021]]
+    If pname:flags includes
+    ename:VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR, the
+    pname:rateControlMode member of slink:VkVideoEncodeRateControlInfoKHR
+    included in the pname:pNext chain is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, and the bound
+    video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, then the pname:pNext
+    chain must: include a slink:VkVideoEncodeH264RateControlInfoEXT
+    structure
+  * [[VUID-VkVideoCodingControlInfoKHR-pNext-07022]]
+    If the pname:pNext chain includes a
+    slink:VkVideoEncodeRateControlInfoKHR, and
+    slink:VkVideoEncodeRateControlInfoKHR::pname:layerCount is greater than
+    `1`, then
+    slink:VkVideoEncodeH264RateControlInfoEXT::pname:temporalLayerCount
+    must: be equal to pname:layerCount
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_encode_h265[]
+  * [[VUID-VkVideoCodingControlInfoKHR-flags-07024]]
+    If pname:flags includes
+    ename:VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR, the
+    pname:rateControlMode member of slink:VkVideoEncodeRateControlInfoKHR
+    included in the pname:pNext chain is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, and the bound
+    video session was created with the video codec operation
+    ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, then the pname:pNext
+    chain must: include a slink:VkVideoEncodeH265RateControlInfoEXT
+    structure
+  * [[VUID-VkVideoCodingControlInfoKHR-pNext-07025]]
+    If the pname:pNext chain includes a
+    slink:VkVideoEncodeRateControlInfoKHR, and
+    slink:VkVideoEncodeRateControlInfoKHR::pname:layerCount is greater than
+    `1`, then slink:VkVideoEncodeH265RateControlInfoEXT::pname:subLayerCount
+    must: be equal to pname:layerCount
+endif::VK_EXT_video_encode_h265[]
+****
+
+include::{generated}/validity/structs/VkVideoCodingControlInfoKHR.adoc[]
+--
+
+[open,refpage='VkVideoCodingControlFlagBitsKHR',desc='Video coding control flags',type='enums']
+--
+Bits which can: be set in slink:VkVideoCodingControlInfoKHR::pname:flags,
+specifying the video coding control parameters to be modified, are:
+
+include::{generated}/api/enums/VkVideoCodingControlFlagBitsKHR.adoc[]
+
+  * ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR indicates a request for the
+    bound video session to be reset before other coding control parameters
+    are applied.
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR indicates that
+    the coding control parameters include video encode rate control
+    parameters (see slink:VkVideoEncodeRateControlInfoKHR).
+  * ename:VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR indicates
+    that the coding control parameters include video encode quality level
+    parameters (see slink:VkVideoEncodeQualityLevelInfoKHR).
+endif::VK_KHR_video_encode_queue[]
+--
+
+[open,refpage='VkVideoCodingControlFlagsKHR',desc='Bitmask of VkVideoCodingControlFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkVideoCodingControlFlagsKHR.adoc[]
+
+tname:VkVideoCodingControlFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoCodingControlFlagBitsKHR.
+--
+
+
+ifdef::VK_KHR_video_decode_queue[]
+include::{chapters}/video_decode_extensions.adoc[]
+endif::VK_KHR_video_decode_queue[]
+
+ifdef::VK_KHR_video_decode_h264[]
+include::{chapters}/video_decode_h264_extensions.adoc[]
+endif::VK_KHR_video_decode_h264[]
+
+ifdef::VK_KHR_video_decode_h265[]
+include::{chapters}/video_decode_h265_extensions.adoc[]
+endif::VK_KHR_video_decode_h265[]
+
+ifdef::VK_KHR_video_encode_queue[]
+include::{chapters}/video_encode_extensions.adoc[]
+endif::VK_KHR_video_encode_queue[]
+
+ifdef::VK_EXT_video_encode_h264[]
+include::{chapters}/video_encode_h264_extensions.adoc[]
+endif::VK_EXT_video_encode_h264[]
+
+ifdef::VK_EXT_video_encode_h265[]
+include::{chapters}/video_encode_h265_extensions.adoc[]
+endif::VK_EXT_video_encode_h265[]
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/codespell-allowed b/codegen/vulkan/vulkan-docs-next/config/CI/codespell-allowed
new file mode 100644
index 0000000..1d06984
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/codespell-allowed
@@ -0,0 +1,26 @@
+# Copyright 2022-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: CC-BY-4.0
+# Spec words
+imbed
+imbedded
+imbedding
+inout
+lod
+pevent
+pevents
+pixelx
+uscaled
+# Markup/script/style guide words
+captable
+crate
+rouge
+shouldnot
+tesselation
+# Proper names
+calle
+ser
+# proposals/ words
+esponding
+pares
+# vk.xml words
+halfs
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/codespellrc b/codegen/vulkan/vulkan-docs-next/config/CI/codespellrc
new file mode 100644
index 0000000..dba7acc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/codespellrc
@@ -0,0 +1,5 @@
+# Copyright 2022-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: CC-BY-4.0
+[codespell]
+skip=#*,katex,.git,.github,LICENSES,NOTES*,./style/markup.adoc,asciidoctor-chunker.js,lunr.js,rouge-extend-css.rb,sample_count*.svg,./node_modules/*,./gen/*,./old/*,./oldGen/*,./new/*,./scripts/reflow-tests/*,./build_tests/*.adoc,./build_tests/*
+ignore-words=config/CI/codespell-allowed
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/contractions b/codegen/vulkan/vulkan-docs-next/config/CI/contractions
new file mode 100644
index 0000000..b331cc0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/contractions
@@ -0,0 +1,71 @@
+'twas
+I'd
+I'll
+I'm
+I've
+aren't
+can't
+could've
+couldn't
+didn't
+doesn't
+don't
+hadn't
+hasn't
+haven't
+he'd
+he'll
+he's
+isn't
+it'd
+it'll
+it's
+let's
+ma'am
+might've
+mightn't
+must've
+mustn't
+ne'er
+needn't
+o'er
+oughtn't
+shan't
+she'd
+she'll
+she's
+should've
+shouldn't
+that'd
+that's
+there'd
+there'll
+there's
+they'd
+they'll
+they're
+they've
+wasn't
+we'd
+we'll
+we're
+we've
+weren't
+what'll
+what're
+what's
+what've
+where'd
+where's
+who'd
+who'll
+who's
+who've
+why'd
+won't
+would've
+wouldn't
+you'd
+you'll
+you're
+you've
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/contractions-allowed b/codegen/vulkan/vulkan-docs-next/config/CI/contractions-allowed
new file mode 100644
index 0000000..031d929
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/contractions-allowed
@@ -0,0 +1,18 @@
+^katex/
+^LICENSES/Apache-2\.0\.txt
+^scripts/asciidoctor-chunker/asciidoctor-chunker\.js:
+^config/chunkindex/lunr\.js:
+^ChangeLog\.adoc
+^style/markup\.adoc
+^config/khronos\.css
+^config/optimize-pdf
+^scripts/htmldiff/htmldiff\.pl
+^config/CI/contractions
+^scripts/comment_convert\.py
+^scripts/spec_tools/[A-Za-z_]*\.py
+^scripts/test_check_spec_links\.py
+^scripts/test_check_spec_links_api_specific\.py
+^scripts/json_c_generator\.py
+^scripts/json_generator\.py
+^scripts/json_parser\.py
+^build_tests/expectations/.*\.html
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/txt-files-allowed b/codegen/vulkan/vulkan-docs-next/config/CI/txt-files-allowed
new file mode 100644
index 0000000..e458842
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/txt-files-allowed
@@ -0,0 +1,3 @@
+^\./LICENSES/
+^\./node_modules/
+^\./git/
diff --git a/codegen/vulkan/vulkan-docs-next/config/CI/writing b/codegen/vulkan/vulkan-docs-next/config/CI/writing
new file mode 100644
index 0000000..181f534
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/CI/writing
@@ -0,0 +1,10 @@
+(^|[^[:alnum:]])[Aa]n ename:[Vv]
+pname:sType is the type of this structure.
+pname:pNext extension chain
+pname:pNext-chain
+pname:pNext is `NULL` or a pointer to an extension-specific structure.
+pname:p[A-Z][[:alnum:]]+ is an array of
+present in.*the pname:pNext chain
+(^|[^-_.&:<>\[[:alnum:]])(Github|[Aa]ny given element|[Bb]itplane|[Cc]olorspace|[Cc]olour|[Cc]ompile-time|[Cc]ubemap|[Dd]oublebuffer)[^-_.\[[:alnum:]]
+(^|[^-_.&:<>\[[:alnum:]])([Ee]ntry-point|[Ee]ntrypoint|[Ff]latshading|[Gg]eneral purpose|[Ii]mplementation dependent|is an optional pointer|[Ll]evel [Oo]f [Dd]etail|[Ll]evel-of-[Dd]etail|lod)[^-_.\[[:alnum:]]
+(^|[^-_.&:<>\[[:alnum:]])([Mm]iplayer|[Mm]iplevel|[Mm]ipsize|[Mm]iptail|points to|[Rr]enderpass|[Rr]e-use|[Ss]ide-effect|[Ss]ignalled|[Ss]wap chain|[Tt]esselation|[Uu]se-case)[^-_.\[[:alnum:]]
diff --git a/codegen/vulkan/vulkan-docs-next/config/README.adoc b/codegen/vulkan/vulkan-docs-next/config/README.adoc
new file mode 100644
index 0000000..7e0a2f3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/README.adoc
@@ -0,0 +1,63 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan Asciidoc Configuration Files
+
+== Macros
+
+The macros in `spec-macros.rb` and `spec-macros/extension.rb` are described
+in the "`Vulkan Documentation and Extensions: Procedures and Conventions`"
+document (see the link:../styleguide.adoc[style guide].
+
+== Support for Math
+
+Asciidoctor is customized to insert KaTeX `<script>` tags from
+`math.js` for HTML5, and properly pass through math which has
+`\begin{}\/end{}` delimiters instead of $$\[\]\(\).
+
+For PDF builds, asciidoctor-mathematical is used to generate
+images.
+
+== Stylesheets
+
+`khronos.css` is the stylesheet used for HTML output.
+It is a slightly tweaked version of the Asciidoctor 'Colony' theme.
+
+== Chunked Spec Index
+
+`chunkindex` contains scripts for building and using a search index for the
+Vulkan chunked HTML specification.
+
+== Title Page Images
+
+Asciidoctor requires use of `docinfo` files to get logos onto the title
+page, and has very restrictive naming conventions forcing the
+subdirectories:
+
+* `vulkan/docinfo-header.html` - Vulkan logo in docinfo HTML form
+* `vulkansc/docinfo-header.html` - Vulkan SC logo in docinfo HTML form
+* `makedocinfologo` - script to convert SVG file to docinfo HTML file
+
+== Asciidoctor Extensions
+
+We use a number of Asciidoctor customizations written in Ruby, described
+briefly below.
+
+* `asciidoctor-mathematical-ext.rb` - make latexmath: blocks work in table cells
+* `extension-highlighter.rb` - one way of constructing a diff HTML document
+* `katex_replace.rb` - substitute KaTeX for MathJax in output HTML
+* `loadable_html.rb` - add some status messages for slow-loading documents
+* `rouge-extend-css.rb` - override parts of the 'rouge' highlighter CSS
+* `spec-macros.rb` - custom asciidoctor macros used in spec markup
+* `open_listing_block.rb` - allow '----' as a nested open block delimiter when tagged by '[open]'
+* `vuid-expander.rb` - add anchors to valid usage ID tags
+* `vu-to-json.rb` - extract valid usage statements to JSON as part of a dummy spec build
+
+== CI support files
+
+These files are auxiliary data supplied to CI scripts
+
+* CI/contractions - disallowed contractions
+* CI/contractions-allowed - regular expressions matching filenames allowed
+  to have contractions
diff --git a/codegen/vulkan/vulkan-docs-next/config/asciidoctor-mathematical-ext.rb b/codegen/vulkan/vulkan-docs-next/config/asciidoctor-mathematical-ext.rb
new file mode 100644
index 0000000..158ad5d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/asciidoctor-mathematical-ext.rb
@@ -0,0 +1,23 @@
+# Copyright 2018-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions'
+
+# This script makes [latexmath] blocks work within table cells.
+# See https://github.com/asciidoctor/asciidoctor-pdf/issues/740
+
+Asciidoctor::Extensions.register do
+  treeprocessor do
+    process do |doc|
+      mathematicalProcessor = MathematicalTreeprocessor.new
+      (table_blocks = doc.find_by context: :table).each do |table|
+        (table.rows[:body] + table.rows[:foot]).each do |row|
+          row.each do |cell|
+            mathematicalProcessor.process cell.inner_document if cell.style == :asciidoc
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/attribs.adoc b/codegen/vulkan/vulkan-docs-next/config/attribs.adoc
new file mode 100644
index 0000000..2b7342f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/attribs.adoc
@@ -0,0 +1,126 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Various special / math symbols, matching LaTeX names.
+// The pass:[+ ] notation avoids asciidoctor EOL treatment of the attribute.
+
+// Macro just to avoid typing the messy expression many times.
+// \' does not work in title, captions, link text, etc.
+:YCbCr: pass:q[Y′C~B~C~R~]
+:RGBprime: pass:q[R′G′B′]
+:prime: ′
+
+// Used when an italicized 'i' is wanted in the middle of an enum name,
+// such as `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
+:ibit: _i_
+
+// Special symbols - not used in [eq] spans
+:sym1: ✓
+:sym2: †
+:sym3: ‡
+:reg: ®
+:trade: ™
+:harr: ↔
+
+// Math operators and logic symbols
+:times: ×
+:cdot: ⋅
+:plus: pass:[+ ]
+:minus: pass:[- ]
+:geq: ≥
+:leq: ≤
+:neq: ≠
+:leftarrow: ←
+:uparrow: ↑
+:rightarrow: →
+:downarrow: ↓
+:elem: ∈
+:lnot: ¬
+:land: ∧
+:lor: ∨
+:oplus: ⊕
+:lceil: ⌈
+:rceil: ⌉
+:lfloor: ⌊
+:rfloor: ⌋
+:vert: |
+:partial: ∂
+:onehalf: ½
+:onequarter: ¼
+:ldots: …
+:forall: ∀
+:sqrt: √
+:inf: ∞
+:plusmn: ±
+
+// Greek letters
+:alpha: α
+:beta: β
+:gamma: γ
+:DeltaUpper: Δ
+:delta: δ
+:epsilon: ε
+:eta: η
+:theta: θ
+:lambda: λ
+:pi: π
+:rho: ρ
+:sigma: σ
+:tau: τ
+:phi: ϕ
+
+// Word break opportunity tag for HTML
+ifdef::backend-html5[]
+:wbro: pass:[<wbr>]
+endif::backend-html5[]
+ifndef::backend-html5[]
+:wbro:
+endif::backend-html5[]
+
+// header names
+ifndef::VKSC_VERSION_1_0[]
+:core_header: vulkan_core.h
+:full_header: vulkan.h
+endif::VKSC_VERSION_1_0[]
+ifdef::VKSC_VERSION_1_0[]
+:core_header: vulkan_sc_core.h
+:core_header_hpp: vulkan_sc_core.hpp
+:full_header: vulkan_sc.h
+endif::VKSC_VERSION_1_0[]
+
+// Placeholders for host synchronization block text
+:externsynctitle: Host Synchronization
+:externsyncprefix: Host access to
+
+// SPIR-V terms
+// macros are not case-sensitive but are defined as such for readability
+:ExecutionModel: code:Execution code:Model
+:ExecutionMode: code:Execution code:Mode
+:StorageClass: code:Storage code:Class
+
+// Human-readable names for XML 'specialuse' attributes, used in
+// chapters/extensions.adoc for the <<extendingvulkan-specialuse-table>> table
+// as well as in some extension appendices.
+:cadsupport: CAD support
+:d3demulation: D3D support
+:devtools: Developer tools
+:debugging: Debugging tools
+:glemulation: OpenGL / ES support
+
+
+// URL prefix for the github repository containing the public specification,
+// used to generate links to separate extension proposal documents in
+// generated extension metadata.
+:specRepositoryURL: https://github.com/KhronosGroup/Vulkan-Docs/tree/main
+
+// URL prefix for the GLSL extensions registry
+:GLSLregistry: https://github.com/KhronosGroup/GLSL/blob/master/extensions
+// URL prefix for the OpenGL extensions registry
+:GLregistry: https://registry.khronos.org/OpenGL/extensions
+// URL prefix for the SPIR-V extensions registry
+:spirv: https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions
+
+// Prefix for anchors that are encountered twice by the validusagei
+// extractor. Set on the command line for VU extraction.
+ifndef::vuprefix[:vuprefix:]
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/README.adoc b/codegen/vulkan/vulkan-docs-next/config/chunkindex/README.adoc
new file mode 100644
index 0000000..89bb9f5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/README.adoc
@@ -0,0 +1,36 @@
+// Copyright 2018-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Index Building For Vulkan Chunked HTML Output
+
+This directory contains scripts which help a search index, and add a
+searchbox using this index into each page of the Vulkan chunked HTML
+specification output. These files include:
+
+[options="compact"]
+  * README.adoc - this file
+  * build-index.js - build a JSON search index from generate-index.rb output
+  * chunked.css - CSS for the searchbox
+  * chunked.js - Script to load and execute the searchbox
+  * custom.patch - Patch to generated HTML to include chunked.js / chunked.css
+  * generate-index.rb - generate an index of the HTML documents
+  * lunr.js - utility functions taken from the lunr package
+
+= Credits and Licenses
+
+The indexing tools and toolchain was created by Baldur Karlsson in
+    https://github.com/baldurk/vkdocs-chunked-builder
+Files created in that project are under the Apache 2.0 license.
+
+Portions of the chunked.js script are taken from
+    https://github.com/filamentgroup/loadJS/blob/master/loadJS.js
+These portions are copyright Scott Jehl, Filament Group, Inc., under an MIT
+license.
+
+The lunr.js script is taken from the 'lunr' npm package, version 2.3.8. It
+is copyright Oliver Nightingale, under an MIT license.
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.jsmarker b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.jsmarker
new file mode 100644
index 0000000..387d7a8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.jsmarker
@@ -0,0 +1,3 @@
+<link href="chunked.css?4" rel="stylesheet">
+<script>var searchindexurl = 'search.index.js?4' + (document.title.replace(/[^0-9.]/g, ''));</script>
+<script src="chunked.js?4"></script>
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.searchboxmarker b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.searchboxmarker
new file mode 100644
index 0000000..7d8bfb0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscript.searchboxmarker
@@ -0,0 +1 @@
+<div class="searchbox"><label for="searchbox">Search: </label><input id="searchbox" type="text" disabled="disabled" value="Loading Search Data" /><div id="resultsdiv"><ol id="results"></ol></div></div>
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscripts.sh b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscripts.sh
new file mode 100755
index 0000000..20098c4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/addscripts.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Replace marker comments in asciidoctor-generated HTML with JavaScript
+# and HTML supporting the searchbox.
+#
+# The marker comments are inserted by config/loadable_html/extension.rb,
+# and are a stable place to add these comments, unlike the previous
+# method of using 'patch'. That could fail when moving to new
+# asciidoctor versions and style files. This can still fail, but should
+# be more robust.
+#
+# Usage: addscripts.sh input-file output-file
+
+# Find path to the script, which is also the patch to the replacements
+path=`dirname $0`
+
+input=$1
+output=$2
+test -f $input || (echo "No input file $1" ; exit 1)
+
+# Replace the first marker comment with text in addscript.jsmarker
+# Replace the second marker comment with text in addscript.searchboxmarker
+
+cp $input $output
+sed -i -e '/<\!--ChunkedSearchJSMarker-->/r '"$path/addscript.jsmarker" \
+       -e '/<\!--ChunkedSearchboxMarker-->/r '"$path/addscript.searchboxmarker" \
+       $output
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/build-index.js b/codegen/vulkan/vulkan-docs-next/config/chunkindex/build-index.js
new file mode 100644
index 0000000..99d7550
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/build-index.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2019 Baldur Karlsson
+//
+// SPDX-License-Identifier: Apache-2.0
+
+var lunr = require('lunr'),
+    stdin = process.stdin,
+    stdout = process.stdout,
+    buffer = []
+
+stdin.resume()
+stdin.setEncoding('utf8')
+
+stdin.on('data', function (data) {
+  buffer.push(data)
+})
+
+stdin.on('end', function () {
+  var documents = JSON.parse(buffer.join(''))
+
+  var idx = lunr(function () {
+    this.ref('id')
+    this.field('title')
+    this.field('body')
+
+    documents.forEach(function (doc) {
+      this.add(doc)
+    }, this)
+  })
+
+  stdout.write("var searchindex = " + JSON.stringify(idx) + ";\n")
+
+  var searchlookup = {};
+
+  for(var i=0; i < documents.length; i++) {
+    searchlookup[documents[i].id] = documents[i].title;
+  }
+
+  stdout.write("var searchlookup = " + JSON.stringify(searchlookup) + ";\n")
+})
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.css b/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.css
new file mode 100644
index 0000000..6bedffa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.css
@@ -0,0 +1,81 @@
+/* Copyright (c) 2019 Baldur Karlsson
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+a.headerlink { display: none; text-decoration: none; }
+
+h2:hover a.headerlink { display: inline; }
+h3:hover a.headerlink { display: inline; }
+h4:hover a.headerlink { display: inline; }
+h5:hover a.headerlink { display: inline; }
+h6:hover a.headerlink { display: inline; }
+*/
+
+div.searchbox {
+  background-color: white;
+  margin-top: 20px;
+}
+
+@media only screen and (min-width: 768px) {
+  div#toc {
+    padding-top: 6em !important;
+  }
+
+  div.searchbox {
+    display: block;
+    position: fixed;
+    left: 0px;
+    max-width: 13.5em;
+    padding-left: 20px;
+    padding-top: 20px;
+    margin-top: 0px;
+    top: 0px;
+    /* border-bottom: 1px solid black; */
+    /* box-shadow: 0px 10px 20px -10px #444444; */
+    z-index: 1000;
+  }
+}
+
+@media only screen and (min-width: 1280px) {
+  div.searchbox {
+    max-width: 18em;
+  }
+
+  div.searchbox input {
+    width: 17em;
+  }
+}
+
+div.searchbox div.results {
+  border: 1px solid black;
+}
+
+div.searchbox label {
+  display: block;
+  width: 160px;
+}
+
+div.searchbox input {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+ol#results li a {
+  text-overflow: ellipsis;
+  overflow: hidden;
+  display: block;
+}
+
+.link {
+  position: absolute;
+  z-index: 1000;
+  right: 4em;
+  margin-top: 0.5em;
+  display: none;
+}
+
+.listingblock:hover .link {
+  display: block;
+}
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.js b/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.js
new file mode 100644
index 0000000..8bc5c08
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/chunked.js
@@ -0,0 +1,170 @@
+/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on https://goo.gl/REQGQ by Paul Irish). Licensed MIT */
+(function( w ){
+        var loadJS = function( src, cb, ordered ){
+                "use strict";
+                var tmp;
+                var ref = w.document.getElementsByTagName( "script" )[ 0 ];
+                var script = w.document.createElement( "script" );
+
+                if (typeof(cb) === 'boolean') {
+                        tmp = ordered;
+                        ordered = cb;
+                        cb = tmp;
+                }
+
+                script.src = src;
+                script.async = !ordered;
+                ref.parentNode.insertBefore( script, ref );
+
+                if (cb && typeof(cb) === "function") {
+                        script.onload = cb;
+                }
+                return script;
+        };
+        // commonjs
+        if( typeof module !== "undefined" ){
+                module.exports = loadJS;
+        }
+        else {
+                w.loadJS = loadJS;
+        }
+}( typeof global !== "undefined" ? global : this ));
+/*! end loadJS */
+
+// Remaining portions of this file are
+//
+// Copyright (c) 2019 Baldur Karlsson
+//
+// SPDX-License-Identifier: Apache-2.0
+
+var searchengine = undefined;
+
+// scroll to the first <a> linking to a chapter
+function scrollChapter(element, chapter) {
+  for(var i=0; i < element.children.length; i++) {
+    if(element.children[i].nodeName == "A" && element.children[i].href.indexOf(chapter) >= 0) {
+      element.children[i].scrollIntoView(true);
+      return true;
+    }
+
+    if(scrollChapter(element.children[i], chapter))
+      return true;
+  }
+
+  return false;
+}
+
+var results = undefined;
+var searchbox = undefined;
+var searchTimeout = undefined;
+
+function clearSearch() {
+  while(results.children.length > 0) {
+    results.removeChild(results.children[0]);
+  }
+
+  document.getElementById("resultsdiv").classList.remove("results");
+}
+
+function doSearch() {
+  clearSearch();
+
+  var searchtext = searchbox.value;
+
+  if(searchtext == '')
+    return;
+
+  if(searchtext.indexOf(' ') == -1 && searchtext.indexOf('\t') == -1 && searchtext.indexOf('"') == -1)
+    searchtext = searchtext + ' ' + searchtext + '*';
+
+  searchtext = searchtext.replace(/"/g, '')
+
+  var searchresults = searchengine.search(searchtext);
+
+  if(searchresults.length == 0) {
+    var r = document.createElement('LI');
+    r.innerHTML = 'No results';
+
+    results.appendChild(r);
+  }
+
+  document.getElementById("resultsdiv").classList.add("results");
+
+  for(var i=0; i < 10 && i < searchresults.length; i++) {
+    var a = document.createElement('A');
+    a.setAttribute('href', searchresults[i].ref);
+    a.innerHTML = searchlookup[searchresults[i].ref];
+
+    var r = document.createElement('LI');
+    r.appendChild(a);
+
+    results.appendChild(r);
+  }
+}
+
+function searchInput(e) {
+  if(searchTimeout !== undefined)
+    clearTimeout(searchTimeout);
+
+  searchTimeout = setTimeout(doSearch, 50);
+}
+
+function searchKeyDown(e) {
+  if(e.keyCode == 27) {
+    // escape
+    if(searchTimeout !== undefined)
+      clearTimeout(searchTimeout);
+
+    searchbox.value = '';
+
+    clearSearch();
+  } else if(e.keyCode == 10 || e.keyCode == 13) {
+    // enter/return
+    doSearch();
+  } else if(e.keyCode == 8) {
+    clearSearch();
+
+    searchInput(e);
+  }
+}
+
+document.addEventListener("DOMContentLoaded", function(event) {
+  // get the chapter name from the current URL
+  var chap = window.location.pathname.replace(/.*\//, '');
+
+  var toc = document.getElementById("toc");
+
+  // Scroll the sidebar to the appropriate chapter
+  if(chap != "") {
+    scrollChapter(toc, chap);
+    toc.scrollTop -= 96;
+  }
+
+  // add anchor links to code blocks
+  var blocks = document.getElementsByClassName("listingblock")
+
+  for(var i=0; i < blocks.length; i++) {
+    if(blocks[i].id.length > 0) {
+      var a = document.createElement("A");
+      a.innerHTML = '\u00B6';
+      a.setAttribute('class', 'link');
+      a.setAttribute('href', '#' + blocks[i].id);
+
+      blocks[i].insertBefore(a, blocks[i].childNodes[0]);
+    }
+  }
+
+  results = document.getElementById('results');
+  searchbox = document.getElementById('searchbox');
+
+  loadJS("lunr.js", function() {
+    loadJS(searchindexurl, function() {
+      searchengine = lunr.Index.load(searchindex);
+
+      searchbox.value = '';
+      searchbox.disabled = false;
+      searchbox.addEventListener('keydown', searchKeyDown, false);
+      searchbox.addEventListener('input', searchInput, false);
+    }, true);
+  }, true);
+});
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/custom.patch b/codegen/vulkan/vulkan-docs-next/config/chunkindex/custom.patch
new file mode 100644
index 0000000..bc2b7ce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/custom.patch
@@ -0,0 +1,22 @@
+diff --git a/vkspec.html b/vkspec.html
+index fbe650a..d665755 100644
+--- a/vkspec.html
++++ b/vkspec.html
+@@ -757,6 +757,9 @@ li > p > a[id^="VUID-"].link:hover { color: black; }
+ <link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+ <link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+ <link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin=""><link rel="stylesheet" href="../katex/katex.min.css">
++<link href="chunked.css?4" rel="stylesheet">
++<script>var searchindexurl = 'search.index.js?4' + (document.title.replace(/[^0-9.]/g, ''));</script>
++<script src="chunked.js?4"></script>
+ <style>
+     #loading_msg {
+         width: 100%;
+@@ -1318,6 +1322,7 @@ li > p > a[id^="VUID-"].link:hover { color: black; }
+ </div>
+ </div>
+ <div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>
++<div class="searchbox"><label for="searchbox">Search: </label><input id="searchbox" type="text" disabled="disabled" value="Loading Search Data" /><div id="resultsdiv"><ol id="results"></ol></div></div>
+ <div id="content" class="loadable" ><script>hideLoadableContent();</script>
+ <div id="preamble">
+ <div class="sectionbody">
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/generate-index.rb b/codegen/vulkan/vulkan-docs-next/config/chunkindex/generate-index.rb
new file mode 100644
index 0000000..bc59bc9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/generate-index.rb
@@ -0,0 +1,60 @@
+#!/usr/bin/env ruby
+#
+# Copyright (c) 2019 Baldur Karlsson
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'pp'
+require 'json'
+
+data = []
+
+ARGV.each do |file|
+
+  curdata = nil
+  extappendix = false
+  curext = ""
+
+  File.readlines(file).each do |line|
+
+    text = line.gsub(/<\/?[^>]*>/, "")
+
+    # Special case - set up high quality results for given structs
+    if line =~ /div id="([vV][kK][^"]*)"/ then
+      id = $1
+
+      data << { :id => File.basename(file) + "#" + id, :title => id, :body => id }
+    end
+
+    if line =~ /h[0-9]\s*id="([^"]*)"/ then
+
+      id = $1
+
+      if curdata != nil then
+        data << curdata
+      end
+
+      if text =~ /Appendix.*Extensions/ then
+        extappendix = true
+      end
+
+      if extappendix and text =~ /^VK_.*/ then
+        curext = text
+      elsif curext != "" then
+        text = "#{curext.strip} - #{text}"
+      end
+
+      curdata = { :id => File.basename(file) + "#" + id, :title => text, :body => "" }
+    elsif curdata != nil then
+      curdata[:body] += " " + text
+    end
+
+  end
+
+  if curdata != nil then
+    data << curdata
+  end
+
+end
+
+puts JSON.generate(data)
diff --git a/codegen/vulkan/vulkan-docs-next/config/chunkindex/lunr.js b/codegen/vulkan/vulkan-docs-next/config/chunkindex/lunr.js
new file mode 100644
index 0000000..c353765
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/chunkindex/lunr.js
@@ -0,0 +1,3475 @@
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8
+ * Copyright (C) 2019 Oliver Nightingale
+ * @license MIT
+ */
+
+;(function(){
+
+/**
+ * A convenience function for configuring and constructing
+ * a new lunr Index.
+ *
+ * A lunr.Builder instance is created and the pipeline setup
+ * with a trimmer, stop word filter and stemmer.
+ *
+ * This builder object is yielded to the configuration function
+ * that is passed as a parameter, allowing the list of fields
+ * and other builder parameters to be customised.
+ *
+ * All documents _must_ be added within the passed config function.
+ *
+ * @example
+ * var idx = lunr(function () {
+ *   this.field('title')
+ *   this.field('body')
+ *   this.ref('id')
+ *
+ *   documents.forEach(function (doc) {
+ *     this.add(doc)
+ *   }, this)
+ * })
+ *
+ * @see {@link lunr.Builder}
+ * @see {@link lunr.Pipeline}
+ * @see {@link lunr.trimmer}
+ * @see {@link lunr.stopWordFilter}
+ * @see {@link lunr.stemmer}
+ * @namespace {function} lunr
+ */
+var lunr = function (config) {
+  var builder = new lunr.Builder
+
+  builder.pipeline.add(
+    lunr.trimmer,
+    lunr.stopWordFilter,
+    lunr.stemmer
+  )
+
+  builder.searchPipeline.add(
+    lunr.stemmer
+  )
+
+  config.call(builder, builder)
+  return builder.build()
+}
+
+lunr.version = "2.3.8"
+/*!
+ * lunr.utils
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * A namespace containing utils for the rest of the lunr library
+ * @namespace lunr.utils
+ */
+lunr.utils = {}
+
+/**
+ * Print a warning message to the console.
+ *
+ * @param {String} message The message to be printed.
+ * @memberOf lunr.utils
+ * @function
+ */
+lunr.utils.warn = (function (global) {
+  /* eslint-disable no-console */
+  return function (message) {
+    if (global.console && console.warn) {
+      console.warn(message)
+    }
+  }
+  /* eslint-enable no-console */
+})(this)
+
+/**
+ * Convert an object to a string.
+ *
+ * In the case of `null` and `undefined` the function returns
+ * the empty string, in all other cases the result of calling
+ * `toString` on the passed object is returned.
+ *
+ * @param {Any} obj The object to convert to a string.
+ * @return {String} string representation of the passed object.
+ * @memberOf lunr.utils
+ */
+lunr.utils.asString = function (obj) {
+  if (obj === void 0 || obj === null) {
+    return ""
+  } else {
+    return obj.toString()
+  }
+}
+
+/**
+ * Clones an object.
+ *
+ * Will create a copy of an existing object such that any mutations
+ * on the copy cannot affect the original.
+ *
+ * Only shallow objects are supported, passing a nested object to this
+ * function will cause a TypeError.
+ *
+ * Objects with primitives, and arrays of primitives are supported.
+ *
+ * @param {Object} obj The object to clone.
+ * @return {Object} a clone of the passed object.
+ * @throws {TypeError} when a nested object is passed.
+ * @memberOf Utils
+ */
+lunr.utils.clone = function (obj) {
+  if (obj === null || obj === undefined) {
+    return obj
+  }
+
+  var clone = Object.create(null),
+      keys = Object.keys(obj)
+
+  for (var i = 0; i < keys.length; i++) {
+    var key = keys[i],
+        val = obj[key]
+
+    if (Array.isArray(val)) {
+      clone[key] = val.slice()
+      continue
+    }
+
+    if (typeof val === 'string' ||
+        typeof val === 'number' ||
+        typeof val === 'boolean') {
+      clone[key] = val
+      continue
+    }
+
+    throw new TypeError("clone is not deep and does not support nested objects")
+  }
+
+  return clone
+}
+lunr.FieldRef = function (docRef, fieldName, stringValue) {
+  this.docRef = docRef
+  this.fieldName = fieldName
+  this._stringValue = stringValue
+}
+
+lunr.FieldRef.joiner = "/"
+
+lunr.FieldRef.fromString = function (s) {
+  var n = s.indexOf(lunr.FieldRef.joiner)
+
+  if (n === -1) {
+    throw "malformed field ref string"
+  }
+
+  var fieldRef = s.slice(0, n),
+      docRef = s.slice(n + 1)
+
+  return new lunr.FieldRef (docRef, fieldRef, s)
+}
+
+lunr.FieldRef.prototype.toString = function () {
+  if (this._stringValue == undefined) {
+    this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef
+  }
+
+  return this._stringValue
+}
+/*!
+ * lunr.Set
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * A lunr set.
+ *
+ * @constructor
+ */
+lunr.Set = function (elements) {
+  this.elements = Object.create(null)
+
+  if (elements) {
+    this.length = elements.length
+
+    for (var i = 0; i < this.length; i++) {
+      this.elements[elements[i]] = true
+    }
+  } else {
+    this.length = 0
+  }
+}
+
+/**
+ * A complete set that contains all elements.
+ *
+ * @static
+ * @readonly
+ * @type {lunr.Set}
+ */
+lunr.Set.complete = {
+  intersect: function (other) {
+    return other
+  },
+
+  union: function (other) {
+    return other
+  },
+
+  contains: function () {
+    return true
+  }
+}
+
+/**
+ * An empty set that contains no elements.
+ *
+ * @static
+ * @readonly
+ * @type {lunr.Set}
+ */
+lunr.Set.empty = {
+  intersect: function () {
+    return this
+  },
+
+  union: function (other) {
+    return other
+  },
+
+  contains: function () {
+    return false
+  }
+}
+
+/**
+ * Returns true if this set contains the specified object.
+ *
+ * @param {object} object - Object whose presence in this set is to be tested.
+ * @returns {boolean} - True if this set contains the specified object.
+ */
+lunr.Set.prototype.contains = function (object) {
+  return !!this.elements[object]
+}
+
+/**
+ * Returns a new set containing only the elements that are present in both
+ * this set and the specified set.
+ *
+ * @param {lunr.Set} other - set to intersect with this set.
+ * @returns {lunr.Set} a new set that is the intersection of this and the specified set.
+ */
+
+lunr.Set.prototype.intersect = function (other) {
+  var a, b, elements, intersection = []
+
+  if (other === lunr.Set.complete) {
+    return this
+  }
+
+  if (other === lunr.Set.empty) {
+    return other
+  }
+
+  if (this.length < other.length) {
+    a = this
+    b = other
+  } else {
+    a = other
+    b = this
+  }
+
+  elements = Object.keys(a.elements)
+
+  for (var i = 0; i < elements.length; i++) {
+    var element = elements[i]
+    if (element in b.elements) {
+      intersection.push(element)
+    }
+  }
+
+  return new lunr.Set (intersection)
+}
+
+/**
+ * Returns a new set combining the elements of this and the specified set.
+ *
+ * @param {lunr.Set} other - set to union with this set.
+ * @return {lunr.Set} a new set that is the union of this and the specified set.
+ */
+
+lunr.Set.prototype.union = function (other) {
+  if (other === lunr.Set.complete) {
+    return lunr.Set.complete
+  }
+
+  if (other === lunr.Set.empty) {
+    return this
+  }
+
+  return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))
+}
+/**
+ * A function to calculate the inverse document frequency for
+ * a posting. This is shared between the builder and the index
+ *
+ * @private
+ * @param {object} posting - The posting for a given term
+ * @param {number} documentCount - The total number of documents.
+ */
+lunr.idf = function (posting, documentCount) {
+  var documentsWithTerm = 0
+
+  for (var fieldName in posting) {
+    if (fieldName == '_index') continue // Ignore the term index, its not a field
+    documentsWithTerm += Object.keys(posting[fieldName]).length
+  }
+
+  var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)
+
+  return Math.log(1 + Math.abs(x))
+}
+
+/**
+ * A token wraps a string representation of a token
+ * as it is passed through the text processing pipeline.
+ *
+ * @constructor
+ * @param {string} [str=''] - The string token being wrapped.
+ * @param {object} [metadata={}] - Metadata associated with this token.
+ */
+lunr.Token = function (str, metadata) {
+  this.str = str || ""
+  this.metadata = metadata || {}
+}
+
+/**
+ * Returns the token string that is being wrapped by this object.
+ *
+ * @returns {string}
+ */
+lunr.Token.prototype.toString = function () {
+  return this.str
+}
+
+/**
+ * A token update function is used when updating or optionally
+ * when cloning a token.
+ *
+ * @callback lunr.Token~updateFunction
+ * @param {string} str - The string representation of the token.
+ * @param {Object} metadata - All metadata associated with this token.
+ */
+
+/**
+ * Applies the given function to the wrapped string token.
+ *
+ * @example
+ * token.update(function (str, metadata) {
+ *   return str.toUpperCase()
+ * })
+ *
+ * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.
+ * @returns {lunr.Token}
+ */
+lunr.Token.prototype.update = function (fn) {
+  this.str = fn(this.str, this.metadata)
+  return this
+}
+
+/**
+ * Creates a clone of this token. Optionally a function can be
+ * applied to the cloned token.
+ *
+ * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.
+ * @returns {lunr.Token}
+ */
+lunr.Token.prototype.clone = function (fn) {
+  fn = fn || function (s) { return s }
+  return new lunr.Token (fn(this.str, this.metadata), this.metadata)
+}
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * A function for splitting a string into tokens ready to be inserted into
+ * the search index. Uses `lunr.tokenizer.separator` to split strings, change
+ * the value of this property to change how strings are split into tokens.
+ *
+ * This tokenizer will convert its parameter to a string by calling `toString` and
+ * then will split this string on the character in `lunr.tokenizer.separator`.
+ * Arrays will have their elements converted to strings and wrapped in a lunr.Token.
+ *
+ * Optional metadata can be passed to the tokenizer, this metadata will be cloned and
+ * added as metadata to every token that is created from the object to be tokenized.
+ *
+ * @static
+ * @param {?(string|object|object[])} obj - The object to convert into tokens
+ * @param {?object} metadata - Optional metadata to associate with every token
+ * @returns {lunr.Token[]}
+ * @see {@link lunr.Pipeline}
+ */
+lunr.tokenizer = function (obj, metadata) {
+  if (obj == null || obj == undefined) {
+    return []
+  }
+
+  if (Array.isArray(obj)) {
+    return obj.map(function (t) {
+      return new lunr.Token(
+        lunr.utils.asString(t).toLowerCase(),
+        lunr.utils.clone(metadata)
+      )
+    })
+  }
+
+  var str = obj.toString().toLowerCase(),
+      len = str.length,
+      tokens = []
+
+  for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {
+    var char = str.charAt(sliceEnd),
+        sliceLength = sliceEnd - sliceStart
+
+    if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {
+
+      if (sliceLength > 0) {
+        var tokenMetadata = lunr.utils.clone(metadata) || {}
+        tokenMetadata["position"] = [sliceStart, sliceLength]
+        tokenMetadata["index"] = tokens.length
+
+        tokens.push(
+          new lunr.Token (
+            str.slice(sliceStart, sliceEnd),
+            tokenMetadata
+          )
+        )
+      }
+
+      sliceStart = sliceEnd + 1
+    }
+
+  }
+
+  return tokens
+}
+
+/**
+ * The separator used to split a string into tokens. Override this property to change the behaviour of
+ * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.
+ *
+ * @static
+ * @see lunr.tokenizer
+ */
+lunr.tokenizer.separator = /[\s\-]+/
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * lunr.Pipelines maintain an ordered list of functions to be applied to all
+ * tokens in documents entering the search index and queries being ran against
+ * the index.
+ *
+ * An instance of lunr.Index created with the lunr shortcut will contain a
+ * pipeline with a stop word filter and an English language stemmer. Extra
+ * functions can be added before or after either of these functions or these
+ * default functions can be removed.
+ *
+ * When run the pipeline will call each function in turn, passing a token, the
+ * index of that token in the original list of all tokens and finally a list of
+ * all the original tokens.
+ *
+ * The output of functions in the pipeline will be passed to the next function
+ * in the pipeline. To exclude a token from entering the index the function
+ * should return undefined, the rest of the pipeline will not be called with
+ * this token.
+ *
+ * For serialisation of pipelines to work, all functions used in an instance of
+ * a pipeline should be registered with lunr.Pipeline. Registered functions can
+ * then be loaded. If trying to load a serialised pipeline that uses functions
+ * that are not registered an error will be thrown.
+ *
+ * If not planning on serialising the pipeline then registering pipeline functions
+ * is not necessary.
+ *
+ * @constructor
+ */
+lunr.Pipeline = function () {
+  this._stack = []
+}
+
+lunr.Pipeline.registeredFunctions = Object.create(null)
+
+/**
+ * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token
+ * string as well as all known metadata. A pipeline function can mutate the token string
+ * or mutate (or add) metadata for a given token.
+ *
+ * A pipeline function can indicate that the passed token should be discarded by returning
+ * null, undefined or an empty string. This token will not be passed to any downstream pipeline
+ * functions and will not be added to the index.
+ *
+ * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
+ * to any downstream pipeline functions and all will returned tokens will be added to the index.
+ *
+ * Any number of pipeline functions may be chained together using a lunr.Pipeline.
+ *
+ * @interface lunr.PipelineFunction
+ * @param {lunr.Token} token - A token from the document being processed.
+ * @param {number} i - The index of this token in the complete list of tokens for this document/field.
+ * @param {lunr.Token[]} tokens - All tokens for this document/field.
+ * @returns {(?lunr.Token|lunr.Token[])}
+ */
+
+/**
+ * Register a function with the pipeline.
+ *
+ * Functions that are used in the pipeline should be registered if the pipeline
+ * needs to be serialised, or a serialised pipeline needs to be loaded.
+ *
+ * Registering a function does not add it to a pipeline, functions must still be
+ * added to instances of the pipeline for them to be used when running a pipeline.
+ *
+ * @param {lunr.PipelineFunction} fn - The function to check for.
+ * @param {String} label - The label to register this function with
+ */
+lunr.Pipeline.registerFunction = function (fn, label) {
+  if (label in this.registeredFunctions) {
+    lunr.utils.warn('Overwriting existing registered function: ' + label)
+  }
+
+  fn.label = label
+  lunr.Pipeline.registeredFunctions[fn.label] = fn
+}
+
+/**
+ * Warns if the function is not registered as a Pipeline function.
+ *
+ * @param {lunr.PipelineFunction} fn - The function to check for.
+ * @private
+ */
+lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {
+  var isRegistered = fn.label && (fn.label in this.registeredFunctions)
+
+  if (!isRegistered) {
+    lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn)
+  }
+}
+
+/**
+ * Loads a previously serialised pipeline.
+ *
+ * All functions to be loaded must already be registered with lunr.Pipeline.
+ * If any function from the serialised data has not been registered then an
+ * error will be thrown.
+ *
+ * @param {Object} serialised - The serialised pipeline to load.
+ * @returns {lunr.Pipeline}
+ */
+lunr.Pipeline.load = function (serialised) {
+  var pipeline = new lunr.Pipeline
+
+  serialised.forEach(function (fnName) {
+    var fn = lunr.Pipeline.registeredFunctions[fnName]
+
+    if (fn) {
+      pipeline.add(fn)
+    } else {
+      throw new Error('Cannot load unregistered function: ' + fnName)
+    }
+  })
+
+  return pipeline
+}
+
+/**
+ * Adds new functions to the end of the pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.
+ */
+lunr.Pipeline.prototype.add = function () {
+  var fns = Array.prototype.slice.call(arguments)
+
+  fns.forEach(function (fn) {
+    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
+    this._stack.push(fn)
+  }, this)
+}
+
+/**
+ * Adds a single function after a function that already exists in the
+ * pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
+ * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
+ */
+lunr.Pipeline.prototype.after = function (existingFn, newFn) {
+  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
+
+  var pos = this._stack.indexOf(existingFn)
+  if (pos == -1) {
+    throw new Error('Cannot find existingFn')
+  }
+
+  pos = pos + 1
+  this._stack.splice(pos, 0, newFn)
+}
+
+/**
+ * Adds a single function before a function that already exists in the
+ * pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
+ * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
+ */
+lunr.Pipeline.prototype.before = function (existingFn, newFn) {
+  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
+
+  var pos = this._stack.indexOf(existingFn)
+  if (pos == -1) {
+    throw new Error('Cannot find existingFn')
+  }
+
+  this._stack.splice(pos, 0, newFn)
+}
+
+/**
+ * Removes a function from the pipeline.
+ *
+ * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.
+ */
+lunr.Pipeline.prototype.remove = function (fn) {
+  var pos = this._stack.indexOf(fn)
+  if (pos == -1) {
+    return
+  }
+
+  this._stack.splice(pos, 1)
+}
+
+/**
+ * Runs the current list of functions that make up the pipeline against the
+ * passed tokens.
+ *
+ * @param {Array} tokens The tokens to run through the pipeline.
+ * @returns {Array}
+ */
+lunr.Pipeline.prototype.run = function (tokens) {
+  var stackLength = this._stack.length
+
+  for (var i = 0; i < stackLength; i++) {
+    var fn = this._stack[i]
+    var memo = []
+
+    for (var j = 0; j < tokens.length; j++) {
+      var result = fn(tokens[j], j, tokens)
+
+      if (result === null || result === void 0 || result === '') continue
+
+      if (Array.isArray(result)) {
+        for (var k = 0; k < result.length; k++) {
+          memo.push(result[k])
+        }
+      } else {
+        memo.push(result)
+      }
+    }
+
+    tokens = memo
+  }
+
+  return tokens
+}
+
+/**
+ * Convenience method for passing a string through a pipeline and getting
+ * strings out. This method takes care of wrapping the passed string in a
+ * token and mapping the resulting tokens back to strings.
+ *
+ * @param {string} str - The string to pass through the pipeline.
+ * @param {?object} metadata - Optional metadata to associate with the token
+ * passed to the pipeline.
+ * @returns {string[]}
+ */
+lunr.Pipeline.prototype.runString = function (str, metadata) {
+  var token = new lunr.Token (str, metadata)
+
+  return this.run([token]).map(function (t) {
+    return t.toString()
+  })
+}
+
+/**
+ * Resets the pipeline by removing any existing processors.
+ *
+ */
+lunr.Pipeline.prototype.reset = function () {
+  this._stack = []
+}
+
+/**
+ * Returns a representation of the pipeline ready for serialisation.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @returns {Array}
+ */
+lunr.Pipeline.prototype.toJSON = function () {
+  return this._stack.map(function (fn) {
+    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
+
+    return fn.label
+  })
+}
+/*!
+ * lunr.Vector
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * A vector is used to construct the vector space of documents and queries. These
+ * vectors support operations to determine the similarity between two documents or
+ * a document and a query.
+ *
+ * Normally no parameters are required for initializing a vector, but in the case of
+ * loading a previously dumped vector the raw elements can be provided to the constructor.
+ *
+ * For performance reasons vectors are implemented with a flat array, where an elements
+ * index is immediately followed by its value. E.g. [index, value, index, value]. This
+ * allows the underlying array to be as sparse as possible and still offer decent
+ * performance when being used for vector calculations.
+ *
+ * @constructor
+ * @param {Number[]} [elements] - The flat list of element index and element value pairs.
+ */
+lunr.Vector = function (elements) {
+  this._magnitude = 0
+  this.elements = elements || []
+}
+
+
+/**
+ * Calculates the position within the vector to insert a given index.
+ *
+ * This is used internally by insert and upsert. If there are duplicate indexes then
+ * the position is returned as if the value for that index were to be updated, but it
+ * is the callers responsibility to check whether there is a duplicate at that index
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.positionForIndex = function (index) {
+  // For an empty vector the tuple can be inserted at the beginning
+  if (this.elements.length == 0) {
+    return 0
+  }
+
+  var start = 0,
+      end = this.elements.length / 2,
+      sliceLength = end - start,
+      pivotPoint = Math.floor(sliceLength / 2),
+      pivotIndex = this.elements[pivotPoint * 2]
+
+  while (sliceLength > 1) {
+    if (pivotIndex < index) {
+      start = pivotPoint
+    }
+
+    if (pivotIndex > index) {
+      end = pivotPoint
+    }
+
+    if (pivotIndex == index) {
+      break
+    }
+
+    sliceLength = end - start
+    pivotPoint = start + Math.floor(sliceLength / 2)
+    pivotIndex = this.elements[pivotPoint * 2]
+  }
+
+  if (pivotIndex == index) {
+    return pivotPoint * 2
+  }
+
+  if (pivotIndex > index) {
+    return pivotPoint * 2
+  }
+
+  if (pivotIndex < index) {
+    return (pivotPoint + 1) * 2
+  }
+}
+
+/**
+ * Inserts an element at an index within the vector.
+ *
+ * Does not allow duplicates, will throw an error if there is already an entry
+ * for this index.
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @param {Number} val - The value to be inserted into the vector.
+ */
+lunr.Vector.prototype.insert = function (insertIdx, val) {
+  this.upsert(insertIdx, val, function () {
+    throw "duplicate index"
+  })
+}
+
+/**
+ * Inserts or updates an existing index within the vector.
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @param {Number} val - The value to be inserted into the vector.
+ * @param {function} fn - A function that is called for updates, the existing value and the
+ * requested value are passed as arguments
+ */
+lunr.Vector.prototype.upsert = function (insertIdx, val, fn) {
+  this._magnitude = 0
+  var position = this.positionForIndex(insertIdx)
+
+  if (this.elements[position] == insertIdx) {
+    this.elements[position + 1] = fn(this.elements[position + 1], val)
+  } else {
+    this.elements.splice(position, 0, insertIdx, val)
+  }
+}
+
+/**
+ * Calculates the magnitude of this vector.
+ *
+ * @returns {Number}
+ */
+lunr.Vector.prototype.magnitude = function () {
+  if (this._magnitude) return this._magnitude
+
+  var sumOfSquares = 0,
+      elementsLength = this.elements.length
+
+  for (var i = 1; i < elementsLength; i += 2) {
+    var val = this.elements[i]
+    sumOfSquares += val * val
+  }
+
+  return this._magnitude = Math.sqrt(sumOfSquares)
+}
+
+/**
+ * Calculates the dot product of this vector and another vector.
+ *
+ * @param {lunr.Vector} otherVector - The vector to compute the dot product with.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.dot = function (otherVector) {
+  var dotProduct = 0,
+      a = this.elements, b = otherVector.elements,
+      aLen = a.length, bLen = b.length,
+      aVal = 0, bVal = 0,
+      i = 0, j = 0
+
+  while (i < aLen && j < bLen) {
+    aVal = a[i], bVal = b[j]
+    if (aVal < bVal) {
+      i += 2
+    } else if (aVal > bVal) {
+      j += 2
+    } else if (aVal == bVal) {
+      dotProduct += a[i + 1] * b[j + 1]
+      i += 2
+      j += 2
+    }
+  }
+
+  return dotProduct
+}
+
+/**
+ * Calculates the similarity between this vector and another vector.
+ *
+ * @param {lunr.Vector} otherVector - The other vector to calculate the
+ * similarity with.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.similarity = function (otherVector) {
+  return this.dot(otherVector) / this.magnitude() || 0
+}
+
+/**
+ * Converts the vector to an array of the elements within the vector.
+ *
+ * @returns {Number[]}
+ */
+lunr.Vector.prototype.toArray = function () {
+  var output = new Array (this.elements.length / 2)
+
+  for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {
+    output[j] = this.elements[i]
+  }
+
+  return output
+}
+
+/**
+ * A JSON serializable representation of the vector.
+ *
+ * @returns {Number[]}
+ */
+lunr.Vector.prototype.toJSON = function () {
+  return this.elements
+}
+/* eslint-disable */
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2019 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */
+
+/**
+ * lunr.stemmer is an english language stemmer, this is a JavaScript
+ * implementation of the PorterStemmer taken from http://tartarus.org/~martin
+ *
+ * @static
+ * @implements {lunr.PipelineFunction}
+ * @param {lunr.Token} token - The string to stem
+ * @returns {lunr.Token}
+ * @see {@link lunr.Pipeline}
+ * @function
+ */
+lunr.stemmer = (function(){
+  var step2list = {
+      "ational" : "ate",
+      "tional" : "tion",
+      "enci" : "ence",
+      "anci" : "ance",
+      "izer" : "ize",
+      "bli" : "ble",
+      "alli" : "al",
+      "entli" : "ent",
+      "eli" : "e",
+      "ousli" : "ous",
+      "ization" : "ize",
+      "ation" : "ate",
+      "ator" : "ate",
+      "alism" : "al",
+      "iveness" : "ive",
+      "fulness" : "ful",
+      "ousness" : "ous",
+      "aliti" : "al",
+      "iviti" : "ive",
+      "biliti" : "ble",
+      "logi" : "log"
+    },
+
+    step3list = {
+      "icate" : "ic",
+      "ative" : "",
+      "alize" : "al",
+      "iciti" : "ic",
+      "ical" : "ic",
+      "ful" : "",
+      "ness" : ""
+    },
+
+    c = "[^aeiou]",          // consonant
+    v = "[aeiouy]",          // vowel
+    C = c + "[^aeiouy]*",    // consonant sequence
+    V = v + "[aeiou]*",      // vowel sequence
+
+    mgr0 = "^(" + C + ")?" + V + C,               // [C]VC... is m>0
+    meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$",  // [C]VC[V] is m=1
+    mgr1 = "^(" + C + ")?" + V + C + V + C,       // [C]VCVC... is m>1
+    s_v = "^(" + C + ")?" + v;                   // vowel in stem
+
+  var re_mgr0 = new RegExp(mgr0);
+  var re_mgr1 = new RegExp(mgr1);
+  var re_meq1 = new RegExp(meq1);
+  var re_s_v = new RegExp(s_v);
+
+  var re_1a = /^(.+?)(ss|i)es$/;
+  var re2_1a = /^(.+?)([^s])s$/;
+  var re_1b = /^(.+?)eed$/;
+  var re2_1b = /^(.+?)(ed|ing)$/;
+  var re_1b_2 = /.$/;
+  var re2_1b_2 = /(at|bl|iz)$/;
+  var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$");
+  var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+
+  var re_1c = /^(.+?[^aeiou])y$/;
+  var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+
+  var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+
+  var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+  var re2_4 = /^(.+?)(s|t)(ion)$/;
+
+  var re_5 = /^(.+?)e$/;
+  var re_5_1 = /ll$/;
+  var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+
+  var porterStemmer = function porterStemmer(w) {
+    var stem,
+      suffix,
+      firstch,
+      re,
+      re2,
+      re3,
+      re4;
+
+    if (w.length < 3) { return w; }
+
+    firstch = w.substr(0,1);
+    if (firstch == "y") {
+      w = firstch.toUpperCase() + w.substr(1);
+    }
+
+    // Step 1a
+    re = re_1a
+    re2 = re2_1a;
+
+    if (re.test(w)) { w = w.replace(re,"$1$2"); }
+    else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
+
+    // Step 1b
+    re = re_1b;
+    re2 = re2_1b;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = re_mgr0;
+      if (re.test(fp[1])) {
+        re = re_1b_2;
+        w = w.replace(re,"");
+      }
+    } else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = re_s_v;
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = re2_1b_2;
+        re3 = re3_1b_2;
+        re4 = re4_1b_2;
+        if (re2.test(w)) { w = w + "e"; }
+        else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); }
+        else if (re4.test(w)) { w = w + "e"; }
+      }
+    }
+
+    // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)
+    re = re_1c;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      w = stem + "i";
+    }
+
+    // Step 2
+    re = re_2;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = re_mgr0;
+      if (re.test(stem)) {
+        w = stem + step2list[suffix];
+      }
+    }
+
+    // Step 3
+    re = re_3;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = re_mgr0;
+      if (re.test(stem)) {
+        w = stem + step3list[suffix];
+      }
+    }
+
+    // Step 4
+    re = re_4;
+    re2 = re2_4;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = re_mgr1;
+      if (re.test(stem)) {
+        w = stem;
+      }
+    } else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = re_mgr1;
+      if (re2.test(stem)) {
+        w = stem;
+      }
+    }
+
+    // Step 5
+    re = re_5;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = re_mgr1;
+      re2 = re_meq1;
+      re3 = re3_5;
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
+        w = stem;
+      }
+    }
+
+    re = re_5_1;
+    re2 = re_mgr1;
+    if (re.test(w) && re2.test(w)) {
+      re = re_1b_2;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+
+    if (firstch == "y") {
+      w = firstch.toLowerCase() + w.substr(1);
+    }
+
+    return w;
+  };
+
+  return function (token) {
+    return token.update(porterStemmer);
+  }
+})();
+
+lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * lunr.generateStopWordFilter builds a stopWordFilter function from the provided
+ * list of stop words.
+ *
+ * The built in lunr.stopWordFilter is built using this generator and can be used
+ * to generate custom stopWordFilters for applications or non English languages.
+ *
+ * @function
+ * @param {Array} token The token to pass through the filter
+ * @returns {lunr.PipelineFunction}
+ * @see lunr.Pipeline
+ * @see lunr.stopWordFilter
+ */
+lunr.generateStopWordFilter = function (stopWords) {
+  var words = stopWords.reduce(function (memo, stopWord) {
+    memo[stopWord] = stopWord
+    return memo
+  }, {})
+
+  return function (token) {
+    if (token && words[token.toString()] !== token.toString()) return token
+  }
+}
+
+/**
+ * lunr.stopWordFilter is an English language stop word list filter, any words
+ * contained in the list will not be passed through the filter.
+ *
+ * This is intended to be used in the Pipeline. If the token does not pass the
+ * filter then undefined will be returned.
+ *
+ * @function
+ * @implements {lunr.PipelineFunction}
+ * @params {lunr.Token} token - A token to check for being a stop word.
+ * @returns {lunr.Token}
+ * @see {@link lunr.Pipeline}
+ */
+lunr.stopWordFilter = lunr.generateStopWordFilter([
+  'a',
+  'able',
+  'about',
+  'across',
+  'after',
+  'all',
+  'almost',
+  'also',
+  'am',
+  'among',
+  'an',
+  'and',
+  'any',
+  'are',
+  'as',
+  'at',
+  'be',
+  'because',
+  'been',
+  'but',
+  'by',
+  'can',
+  'cannot',
+  'could',
+  'dear',
+  'did',
+  'do',
+  'does',
+  'either',
+  'else',
+  'ever',
+  'every',
+  'for',
+  'from',
+  'get',
+  'got',
+  'had',
+  'has',
+  'have',
+  'he',
+  'her',
+  'hers',
+  'him',
+  'his',
+  'how',
+  'however',
+  'i',
+  'if',
+  'in',
+  'into',
+  'is',
+  'it',
+  'its',
+  'just',
+  'least',
+  'let',
+  'like',
+  'likely',
+  'may',
+  'me',
+  'might',
+  'most',
+  'must',
+  'my',
+  'neither',
+  'no',
+  'nor',
+  'not',
+  'of',
+  'off',
+  'often',
+  'on',
+  'only',
+  'or',
+  'other',
+  'our',
+  'own',
+  'rather',
+  'said',
+  'say',
+  'says',
+  'she',
+  'should',
+  'since',
+  'so',
+  'some',
+  'than',
+  'that',
+  'the',
+  'their',
+  'them',
+  'then',
+  'there',
+  'these',
+  'they',
+  'this',
+  'tis',
+  'to',
+  'too',
+  'twas',
+  'us',
+  'wants',
+  'was',
+  'we',
+  'were',
+  'what',
+  'when',
+  'where',
+  'which',
+  'while',
+  'who',
+  'whom',
+  'why',
+  'will',
+  'with',
+  'would',
+  'yet',
+  'you',
+  'your'
+])
+
+lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * lunr.trimmer is a pipeline function for trimming non word
+ * characters from the beginning and end of tokens before they
+ * enter the index.
+ *
+ * This implementation may not work correctly for non latin
+ * characters and should either be removed or adapted for use
+ * with languages with non-latin characters.
+ *
+ * @static
+ * @implements {lunr.PipelineFunction}
+ * @param {lunr.Token} token The token to pass through the filter
+ * @returns {lunr.Token}
+ * @see lunr.Pipeline
+ */
+lunr.trimmer = function (token) {
+  return token.update(function (s) {
+    return s.replace(/^\W+/, '').replace(/\W+$/, '')
+  })
+}
+
+lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * A token set is used to store the unique list of all tokens
+ * within an index. Token sets are also used to represent an
+ * incoming query to the index, this query token set and index
+ * token set are then intersected to find which tokens to look
+ * up in the inverted index.
+ *
+ * A token set can hold multiple tokens, as in the case of the
+ * index token set, or it can hold a single token as in the
+ * case of a simple query token set.
+ *
+ * Additionally token sets are used to perform wildcard matching.
+ * Leading, contained and trailing wildcards are supported, and
+ * from this edit distance matching can also be provided.
+ *
+ * Token sets are implemented as a minimal finite state automata,
+ * where both common prefixes and suffixes are shared between tokens.
+ * This helps to reduce the space used for storing the token set.
+ *
+ * @constructor
+ */
+lunr.TokenSet = function () {
+  this.final = false
+  this.edges = {}
+  this.id = lunr.TokenSet._nextId
+  lunr.TokenSet._nextId += 1
+}
+
+/**
+ * Keeps track of the next, auto increment, identifier to assign
+ * to a new tokenSet.
+ *
+ * TokenSets require a unique identifier to be correctly minimised.
+ *
+ * @private
+ */
+lunr.TokenSet._nextId = 1
+
+/**
+ * Creates a TokenSet instance from the given sorted array of words.
+ *
+ * @param {String[]} arr - A sorted array of strings to create the set from.
+ * @returns {lunr.TokenSet}
+ * @throws Will throw an error if the input array is not sorted.
+ */
+lunr.TokenSet.fromArray = function (arr) {
+  var builder = new lunr.TokenSet.Builder
+
+  for (var i = 0, len = arr.length; i < len; i++) {
+    builder.insert(arr[i])
+  }
+
+  builder.finish()
+  return builder.root
+}
+
+/**
+ * Creates a token set from a query clause.
+ *
+ * @private
+ * @param {Object} clause - A single clause from lunr.Query.
+ * @param {string} clause.term - The query clause term.
+ * @param {number} [clause.editDistance] - The optional edit distance for the term.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.fromClause = function (clause) {
+  if ('editDistance' in clause) {
+    return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)
+  } else {
+    return lunr.TokenSet.fromString(clause.term)
+  }
+}
+
+/**
+ * Creates a token set representing a single string with a specified
+ * edit distance.
+ *
+ * Insertions, deletions, substitutions and transpositions are each
+ * treated as an edit distance of 1.
+ *
+ * Increasing the allowed edit distance will have a dramatic impact
+ * on the performance of both creating and intersecting these TokenSets.
+ * It is advised to keep the edit distance less than 3.
+ *
+ * @param {string} str - The string to create the token set from.
+ * @param {number} editDistance - The allowed edit distance to match.
+ * @returns {lunr.Vector}
+ */
+lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
+  var root = new lunr.TokenSet
+
+  var stack = [{
+    node: root,
+    editsRemaining: editDistance,
+    str: str
+  }]
+
+  while (stack.length) {
+    var frame = stack.pop()
+
+    // no edit
+    if (frame.str.length > 0) {
+      var char = frame.str.charAt(0),
+          noEditNode
+
+      if (char in frame.node.edges) {
+        noEditNode = frame.node.edges[char]
+      } else {
+        noEditNode = new lunr.TokenSet
+        frame.node.edges[char] = noEditNode
+      }
+
+      if (frame.str.length == 1) {
+        noEditNode.final = true
+      }
+
+      stack.push({
+        node: noEditNode,
+        editsRemaining: frame.editsRemaining,
+        str: frame.str.slice(1)
+      })
+    }
+
+    if (frame.editsRemaining == 0) {
+      continue
+    }
+
+    // insertion
+    if ("*" in frame.node.edges) {
+      var insertionNode = frame.node.edges["*"]
+    } else {
+      var insertionNode = new lunr.TokenSet
+      frame.node.edges["*"] = insertionNode
+    }
+
+    if (frame.str.length == 0) {
+      insertionNode.final = true
+    }
+
+    stack.push({
+      node: insertionNode,
+      editsRemaining: frame.editsRemaining - 1,
+      str: frame.str
+    })
+
+    // deletion
+    // can only do a deletion if we have enough edits remaining
+    // and if there are characters left to delete in the string
+    if (frame.str.length > 1) {
+      stack.push({
+        node: frame.node,
+        editsRemaining: frame.editsRemaining - 1,
+        str: frame.str.slice(1)
+      })
+    }
+
+    // deletion
+    // just removing the last character from the str
+    if (frame.str.length == 1) {
+      frame.node.final = true
+    }
+
+    // substitution
+    // can only do a substitution if we have enough edits remaining
+    // and if there are characters left to substitute
+    if (frame.str.length >= 1) {
+      if ("*" in frame.node.edges) {
+        var substitutionNode = frame.node.edges["*"]
+      } else {
+        var substitutionNode = new lunr.TokenSet
+        frame.node.edges["*"] = substitutionNode
+      }
+
+      if (frame.str.length == 1) {
+        substitutionNode.final = true
+      }
+
+      stack.push({
+        node: substitutionNode,
+        editsRemaining: frame.editsRemaining - 1,
+        str: frame.str.slice(1)
+      })
+    }
+
+    // transposition
+    // can only do a transposition if there are edits remaining
+    // and there are enough characters to transpose
+    if (frame.str.length > 1) {
+      var charA = frame.str.charAt(0),
+          charB = frame.str.charAt(1),
+          transposeNode
+
+      if (charB in frame.node.edges) {
+        transposeNode = frame.node.edges[charB]
+      } else {
+        transposeNode = new lunr.TokenSet
+        frame.node.edges[charB] = transposeNode
+      }
+
+      if (frame.str.length == 1) {
+        transposeNode.final = true
+      }
+
+      stack.push({
+        node: transposeNode,
+        editsRemaining: frame.editsRemaining - 1,
+        str: charA + frame.str.slice(2)
+      })
+    }
+  }
+
+  return root
+}
+
+/**
+ * Creates a TokenSet from a string.
+ *
+ * The string may contain one or more wildcard characters (*)
+ * that will allow wildcard matching when intersecting with
+ * another TokenSet.
+ *
+ * @param {string} str - The string to create a TokenSet from.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.fromString = function (str) {
+  var node = new lunr.TokenSet,
+      root = node
+
+  /*
+   * Iterates through all characters within the passed string
+   * appending a node for each character.
+   *
+   * When a wildcard character is found then a self
+   * referencing edge is introduced to continually match
+   * any number of any characters.
+   */
+  for (var i = 0, len = str.length; i < len; i++) {
+    var char = str[i],
+        final = (i == len - 1)
+
+    if (char == "*") {
+      node.edges[char] = node
+      node.final = final
+
+    } else {
+      var next = new lunr.TokenSet
+      next.final = final
+
+      node.edges[char] = next
+      node = next
+    }
+  }
+
+  return root
+}
+
+/**
+ * Converts this TokenSet into an array of strings
+ * contained within the TokenSet.
+ *
+ * This is not intended to be used on a TokenSet that
+ * contains wildcards, in these cases the results are
+ * undefined and are likely to cause an infinite loop.
+ *
+ * @returns {string[]}
+ */
+lunr.TokenSet.prototype.toArray = function () {
+  var words = []
+
+  var stack = [{
+    prefix: "",
+    node: this
+  }]
+
+  while (stack.length) {
+    var frame = stack.pop(),
+        edges = Object.keys(frame.node.edges),
+        len = edges.length
+
+    if (frame.node.final) {
+      /* In Safari, at this point the prefix is sometimes corrupted, see:
+       * https://github.com/olivernn/lunr.js/issues/279 Calling any
+       * String.prototype method forces Safari to "cast" this string to what
+       * it's supposed to be, fixing the bug. */
+      frame.prefix.charAt(0)
+      words.push(frame.prefix)
+    }
+
+    for (var i = 0; i < len; i++) {
+      var edge = edges[i]
+
+      stack.push({
+        prefix: frame.prefix.concat(edge),
+        node: frame.node.edges[edge]
+      })
+    }
+  }
+
+  return words
+}
+
+/**
+ * Generates a string representation of a TokenSet.
+ *
+ * This is intended to allow TokenSets to be used as keys
+ * in objects, largely to aid the construction and minimisation
+ * of a TokenSet. As such it is not designed to be a human
+ * friendly representation of the TokenSet.
+ *
+ * @returns {string}
+ */
+lunr.TokenSet.prototype.toString = function () {
+  // NOTE: Using Object.keys here as this.edges is very likely
+  // to enter 'hash-mode' with many keys being added
+  //
+  // avoiding a for-in loop here as it leads to the function
+  // being de-optimised (at least in V8). From some simple
+  // benchmarks the performance is comparable, but allowing
+  // V8 to optimize may mean easy performance wins in the future.
+
+  if (this._str) {
+    return this._str
+  }
+
+  var str = this.final ? '1' : '0',
+      labels = Object.keys(this.edges).sort(),
+      len = labels.length
+
+  for (var i = 0; i < len; i++) {
+    var label = labels[i],
+        node = this.edges[label]
+
+    str = str + label + node.id
+  }
+
+  return str
+}
+
+/**
+ * Returns a new TokenSet that is the intersection of
+ * this TokenSet and the passed TokenSet.
+ *
+ * This intersection will take into account any wildcards
+ * contained within the TokenSet.
+ *
+ * @param {lunr.TokenSet} b - An other TokenSet to intersect with.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.prototype.intersect = function (b) {
+  var output = new lunr.TokenSet,
+      frame = undefined
+
+  var stack = [{
+    qNode: b,
+    output: output,
+    node: this
+  }]
+
+  while (stack.length) {
+    frame = stack.pop()
+
+    // NOTE: As with the #toString method, we are using
+    // Object.keys and a for loop instead of a for-in loop
+    // as both of these objects enter 'hash' mode, causing
+    // the function to be de-optimised in V8
+    var qEdges = Object.keys(frame.qNode.edges),
+        qLen = qEdges.length,
+        nEdges = Object.keys(frame.node.edges),
+        nLen = nEdges.length
+
+    for (var q = 0; q < qLen; q++) {
+      var qEdge = qEdges[q]
+
+      for (var n = 0; n < nLen; n++) {
+        var nEdge = nEdges[n]
+
+        if (nEdge == qEdge || qEdge == '*') {
+          var node = frame.node.edges[nEdge],
+              qNode = frame.qNode.edges[qEdge],
+              final = node.final && qNode.final,
+              next = undefined
+
+          if (nEdge in frame.output.edges) {
+            // an edge already exists for this character
+            // no need to create a new node, just set the finality
+            // bit unless this node is already final
+            next = frame.output.edges[nEdge]
+            next.final = next.final || final
+
+          } else {
+            // no edge exists yet, must create one
+            // set the finality bit and insert it
+            // into the output
+            next = new lunr.TokenSet
+            next.final = final
+            frame.output.edges[nEdge] = next
+          }
+
+          stack.push({
+            qNode: qNode,
+            output: next,
+            node: node
+          })
+        }
+      }
+    }
+  }
+
+  return output
+}
+lunr.TokenSet.Builder = function () {
+  this.previousWord = ""
+  this.root = new lunr.TokenSet
+  this.uncheckedNodes = []
+  this.minimizedNodes = {}
+}
+
+lunr.TokenSet.Builder.prototype.insert = function (word) {
+  var node,
+      commonPrefix = 0
+
+  if (word < this.previousWord) {
+    throw new Error ("Out of order word insertion")
+  }
+
+  for (var i = 0; i < word.length && i < this.previousWord.length; i++) {
+    if (word[i] != this.previousWord[i]) break
+    commonPrefix++
+  }
+
+  this.minimize(commonPrefix)
+
+  if (this.uncheckedNodes.length == 0) {
+    node = this.root
+  } else {
+    node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child
+  }
+
+  for (var i = commonPrefix; i < word.length; i++) {
+    var nextNode = new lunr.TokenSet,
+        char = word[i]
+
+    node.edges[char] = nextNode
+
+    this.uncheckedNodes.push({
+      parent: node,
+      char: char,
+      child: nextNode
+    })
+
+    node = nextNode
+  }
+
+  node.final = true
+  this.previousWord = word
+}
+
+lunr.TokenSet.Builder.prototype.finish = function () {
+  this.minimize(0)
+}
+
+lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
+  for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {
+    var node = this.uncheckedNodes[i],
+        childKey = node.child.toString()
+
+    if (childKey in this.minimizedNodes) {
+      node.parent.edges[node.char] = this.minimizedNodes[childKey]
+    } else {
+      // Cache the key for this node since
+      // we know it can't change anymore
+      node.child._str = childKey
+
+      this.minimizedNodes[childKey] = node.child
+    }
+
+    this.uncheckedNodes.pop()
+  }
+}
+/*!
+ * lunr.Index
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * An index contains the built index of all documents and provides a query interface
+ * to the index.
+ *
+ * Usually instances of lunr.Index will not be created using this constructor, instead
+ * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be
+ * used to load previously built and serialized indexes.
+ *
+ * @constructor
+ * @param {Object} attrs - The attributes of the built search index.
+ * @param {Object} attrs.invertedIndex - An index of term/field to document reference.
+ * @param {Object<string, lunr.Vector>} attrs.fieldVectors - Field vectors
+ * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.
+ * @param {string[]} attrs.fields - The names of indexed document fields.
+ * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.
+ */
+lunr.Index = function (attrs) {
+  this.invertedIndex = attrs.invertedIndex
+  this.fieldVectors = attrs.fieldVectors
+  this.tokenSet = attrs.tokenSet
+  this.fields = attrs.fields
+  this.pipeline = attrs.pipeline
+}
+
+/**
+ * A result contains details of a document matching a search query.
+ * @typedef {Object} lunr.Index~Result
+ * @property {string} ref - The reference of the document this result represents.
+ * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.
+ * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.
+ */
+
+/**
+ * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple
+ * query language which itself is parsed into an instance of lunr.Query.
+ *
+ * For programmatically building queries it is advised to directly use lunr.Query, the query language
+ * is best used for human entered text rather than program generated text.
+ *
+ * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported
+ * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'
+ * or 'world', though those that contain both will rank higher in the results.
+ *
+ * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can
+ * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding
+ * wildcards will increase the number of documents that will be found but can also have a negative
+ * impact on query performance, especially with wildcards at the beginning of a term.
+ *
+ * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term
+ * hello in the title field will match this query. Using a field not present in the index will lead
+ * to an error being thrown.
+ *
+ * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term
+ * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported
+ * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.
+ * Avoid large values for edit distance to improve query performance.
+ *
+ * Each term also supports a presence modifier. By default a term's presence in document is optional, however
+ * this can be changed to either required or prohibited. For a term's presence to be required in a document the
+ * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and
+ * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not
+ * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.
+ *
+ * To escape special characters the backslash character '\' can be used, this allows searches to include
+ * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead
+ * of attempting to apply a boost of 2 to the search term "foo".
+ *
+ * @typedef {string} lunr.Index~QueryString
+ * @example <caption>Simple single term query</caption>
+ * hello
+ * @example <caption>Multiple term query</caption>
+ * hello world
+ * @example <caption>term scoped to a field</caption>
+ * title:hello
+ * @example <caption>term with a boost of 10</caption>
+ * hello^10
+ * @example <caption>term with an edit distance of 2</caption>
+ * hello~2
+ * @example <caption>terms with presence modifiers</caption>
+ * -foo +bar baz
+ */
+
+/**
+ * Performs a search against the index using lunr query syntax.
+ *
+ * Results will be returned sorted by their score, the most relevant results
+ * will be returned first.  For details on how the score is calculated, please see
+ * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.
+ *
+ * For more programmatic querying use lunr.Index#query.
+ *
+ * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.
+ * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.
+ * @returns {lunr.Index~Result[]}
+ */
+lunr.Index.prototype.search = function (queryString) {
+  return this.query(function (query) {
+    var parser = new lunr.QueryParser(queryString, query)
+    parser.parse()
+  })
+}
+
+/**
+ * A query builder callback provides a query object to be used to express
+ * the query to perform on the index.
+ *
+ * @callback lunr.Index~queryBuilder
+ * @param {lunr.Query} query - The query object to build up.
+ * @this lunr.Query
+ */
+
+/**
+ * Performs a query against the index using the yielded lunr.Query object.
+ *
+ * If performing programmatic queries against the index, this method is preferred
+ * over lunr.Index#search so as to avoid the additional query parsing overhead.
+ *
+ * A query object is yielded to the supplied function which should be used to
+ * express the query to be run against the index.
+ *
+ * Note that although this function takes a callback parameter it is _not_ an
+ * asynchronous operation, the callback is just yielded a query object to be
+ * customized.
+ *
+ * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.
+ * @returns {lunr.Index~Result[]}
+ */
+lunr.Index.prototype.query = function (fn) {
+  // for each query clause
+  // * process terms
+  // * expand terms from token set
+  // * find matching documents and metadata
+  // * get document vectors
+  // * score documents
+
+  var query = new lunr.Query(this.fields),
+      matchingFields = Object.create(null),
+      queryVectors = Object.create(null),
+      termFieldCache = Object.create(null),
+      requiredMatches = Object.create(null),
+      prohibitedMatches = Object.create(null)
+
+  /*
+   * To support field level boosts a query vector is created per
+   * field. An empty vector is eagerly created to support negated
+   * queries.
+   */
+  for (var i = 0; i < this.fields.length; i++) {
+    queryVectors[this.fields[i]] = new lunr.Vector
+  }
+
+  fn.call(query, query)
+
+  for (var i = 0; i < query.clauses.length; i++) {
+    /*
+     * Unless the pipeline has been disabled for this term, which is
+     * the case for terms with wildcards, we need to pass the clause
+     * term through the search pipeline. A pipeline returns an array
+     * of processed terms. Pipeline functions may expand the passed
+     * term, which means we may end up performing multiple index lookups
+     * for a single query term.
+     */
+    var clause = query.clauses[i],
+        terms = null,
+        clauseMatches = lunr.Set.complete
+
+    if (clause.usePipeline) {
+      terms = this.pipeline.runString(clause.term, {
+        fields: clause.fields
+      })
+    } else {
+      terms = [clause.term]
+    }
+
+    for (var m = 0; m < terms.length; m++) {
+      var term = terms[m]
+
+      /*
+       * Each term returned from the pipeline needs to use the same query
+       * clause object, e.g. the same boost and or edit distance. The
+       * simplest way to do this is to re-use the clause object but mutate
+       * its term property.
+       */
+      clause.term = term
+
+      /*
+       * From the term in the clause we create a token set which will then
+       * be used to intersect the indexes token set to get a list of terms
+       * to lookup in the inverted index
+       */
+      var termTokenSet = lunr.TokenSet.fromClause(clause),
+          expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()
+
+      /*
+       * If a term marked as required does not exist in the tokenSet it is
+       * impossible for the search to return any matches. We set all the field
+       * scoped required matches set to empty and stop examining any further
+       * clauses.
+       */
+      if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {
+        for (var k = 0; k < clause.fields.length; k++) {
+          var field = clause.fields[k]
+          requiredMatches[field] = lunr.Set.empty
+        }
+
+        break
+      }
+
+      for (var j = 0; j < expandedTerms.length; j++) {
+        /*
+         * For each term get the posting and termIndex, this is required for
+         * building the query vector.
+         */
+        var expandedTerm = expandedTerms[j],
+            posting = this.invertedIndex[expandedTerm],
+            termIndex = posting._index
+
+        for (var k = 0; k < clause.fields.length; k++) {
+          /*
+           * For each field that this query term is scoped by (by default
+           * all fields are in scope) we need to get all the document refs
+           * that have this term in that field.
+           *
+           * The posting is the entry in the invertedIndex for the matching
+           * term from above.
+           */
+          var field = clause.fields[k],
+              fieldPosting = posting[field],
+              matchingDocumentRefs = Object.keys(fieldPosting),
+              termField = expandedTerm + "/" + field,
+              matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)
+
+          /*
+           * if the presence of this term is required ensure that the matching
+           * documents are added to the set of required matches for this clause.
+           *
+           */
+          if (clause.presence == lunr.Query.presence.REQUIRED) {
+            clauseMatches = clauseMatches.union(matchingDocumentsSet)
+
+            if (requiredMatches[field] === undefined) {
+              requiredMatches[field] = lunr.Set.complete
+            }
+          }
+
+          /*
+           * if the presence of this term is prohibited ensure that the matching
+           * documents are added to the set of prohibited matches for this field,
+           * creating that set if it does not yet exist.
+           */
+          if (clause.presence == lunr.Query.presence.PROHIBITED) {
+            if (prohibitedMatches[field] === undefined) {
+              prohibitedMatches[field] = lunr.Set.empty
+            }
+
+            prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)
+
+            /*
+             * Prohibited matches should not be part of the query vector used for
+             * similarity scoring and no metadata should be extracted so we continue
+             * to the next field
+             */
+            continue
+          }
+
+          /*
+           * The query field vector is populated using the termIndex found for
+           * the term and a unit value with the appropriate boost applied.
+           * Using upsert because there could already be an entry in the vector
+           * for the term we are working with. In that case we just add the scores
+           * together.
+           */
+          queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })
+
+          /**
+           * If we've already seen this term, field combo then we've already collected
+           * the matching documents and metadata, no need to go through all that again
+           */
+          if (termFieldCache[termField]) {
+            continue
+          }
+
+          for (var l = 0; l < matchingDocumentRefs.length; l++) {
+            /*
+             * All metadata for this term/field/document triple
+             * are then extracted and collected into an instance
+             * of lunr.MatchData ready to be returned in the query
+             * results
+             */
+            var matchingDocumentRef = matchingDocumentRefs[l],
+                matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),
+                metadata = fieldPosting[matchingDocumentRef],
+                fieldMatch
+
+            if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {
+              matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)
+            } else {
+              fieldMatch.add(expandedTerm, field, metadata)
+            }
+
+          }
+
+          termFieldCache[termField] = true
+        }
+      }
+    }
+
+    /**
+     * If the presence was required we need to update the requiredMatches field sets.
+     * We do this after all fields for the term have collected their matches because
+     * the clause terms presence is required in _any_ of the fields not _all_ of the
+     * fields.
+     */
+    if (clause.presence === lunr.Query.presence.REQUIRED) {
+      for (var k = 0; k < clause.fields.length; k++) {
+        var field = clause.fields[k]
+        requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)
+      }
+    }
+  }
+
+  /**
+   * Need to combine the field scoped required and prohibited
+   * matching documents into a global set of required and prohibited
+   * matches
+   */
+  var allRequiredMatches = lunr.Set.complete,
+      allProhibitedMatches = lunr.Set.empty
+
+  for (var i = 0; i < this.fields.length; i++) {
+    var field = this.fields[i]
+
+    if (requiredMatches[field]) {
+      allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])
+    }
+
+    if (prohibitedMatches[field]) {
+      allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])
+    }
+  }
+
+  var matchingFieldRefs = Object.keys(matchingFields),
+      results = [],
+      matches = Object.create(null)
+
+  /*
+   * If the query is negated (contains only prohibited terms)
+   * we need to get _all_ fieldRefs currently existing in the
+   * index. This is only done when we know that the query is
+   * entirely prohibited terms to avoid any cost of getting all
+   * fieldRefs unnecessarily.
+   *
+   * Additionally, blank MatchData must be created to correctly
+   * populate the results.
+   */
+  if (query.isNegated()) {
+    matchingFieldRefs = Object.keys(this.fieldVectors)
+
+    for (var i = 0; i < matchingFieldRefs.length; i++) {
+      var matchingFieldRef = matchingFieldRefs[i]
+      var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)
+      matchingFields[matchingFieldRef] = new lunr.MatchData
+    }
+  }
+
+  for (var i = 0; i < matchingFieldRefs.length; i++) {
+    /*
+     * Currently we have document fields that match the query, but we
+     * need to return documents. The matchData and scores are combined
+     * from multiple fields belonging to the same document.
+     *
+     * Scores are calculated by field, using the query vectors created
+     * above, and combined into a final document score using addition.
+     */
+    var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),
+        docRef = fieldRef.docRef
+
+    if (!allRequiredMatches.contains(docRef)) {
+      continue
+    }
+
+    if (allProhibitedMatches.contains(docRef)) {
+      continue
+    }
+
+    var fieldVector = this.fieldVectors[fieldRef],
+        score = queryVectors[fieldRef.fieldName].similarity(fieldVector),
+        docMatch
+
+    if ((docMatch = matches[docRef]) !== undefined) {
+      docMatch.score += score
+      docMatch.matchData.combine(matchingFields[fieldRef])
+    } else {
+      var match = {
+        ref: docRef,
+        score: score,
+        matchData: matchingFields[fieldRef]
+      }
+      matches[docRef] = match
+      results.push(match)
+    }
+  }
+
+  /*
+   * Sort the results objects by score, highest first.
+   */
+  return results.sort(function (a, b) {
+    return b.score - a.score
+  })
+}
+
+/**
+ * Prepares the index for JSON serialization.
+ *
+ * The schema for this JSON blob will be described in a
+ * separate JSON schema file.
+ *
+ * @returns {Object}
+ */
+lunr.Index.prototype.toJSON = function () {
+  var invertedIndex = Object.keys(this.invertedIndex)
+    .sort()
+    .map(function (term) {
+      return [term, this.invertedIndex[term]]
+    }, this)
+
+  var fieldVectors = Object.keys(this.fieldVectors)
+    .map(function (ref) {
+      return [ref, this.fieldVectors[ref].toJSON()]
+    }, this)
+
+  return {
+    version: lunr.version,
+    fields: this.fields,
+    fieldVectors: fieldVectors,
+    invertedIndex: invertedIndex,
+    pipeline: this.pipeline.toJSON()
+  }
+}
+
+/**
+ * Loads a previously serialized lunr.Index
+ *
+ * @param {Object} serializedIndex - A previously serialized lunr.Index
+ * @returns {lunr.Index}
+ */
+lunr.Index.load = function (serializedIndex) {
+  var attrs = {},
+      fieldVectors = {},
+      serializedVectors = serializedIndex.fieldVectors,
+      invertedIndex = Object.create(null),
+      serializedInvertedIndex = serializedIndex.invertedIndex,
+      tokenSetBuilder = new lunr.TokenSet.Builder,
+      pipeline = lunr.Pipeline.load(serializedIndex.pipeline)
+
+  if (serializedIndex.version != lunr.version) {
+    lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'")
+  }
+
+  for (var i = 0; i < serializedVectors.length; i++) {
+    var tuple = serializedVectors[i],
+        ref = tuple[0],
+        elements = tuple[1]
+
+    fieldVectors[ref] = new lunr.Vector(elements)
+  }
+
+  for (var i = 0; i < serializedInvertedIndex.length; i++) {
+    var tuple = serializedInvertedIndex[i],
+        term = tuple[0],
+        posting = tuple[1]
+
+    tokenSetBuilder.insert(term)
+    invertedIndex[term] = posting
+  }
+
+  tokenSetBuilder.finish()
+
+  attrs.fields = serializedIndex.fields
+
+  attrs.fieldVectors = fieldVectors
+  attrs.invertedIndex = invertedIndex
+  attrs.tokenSet = tokenSetBuilder.root
+  attrs.pipeline = pipeline
+
+  return new lunr.Index(attrs)
+}
+/*!
+ * lunr.Builder
+ * Copyright (C) 2019 Oliver Nightingale
+ */
+
+/**
+ * lunr.Builder performs indexing on a set of documents and
+ * returns instances of lunr.Index ready for querying.
+ *
+ * All configuration of the index is done via the builder, the
+ * fields to index, the document reference, the text processing
+ * pipeline and document scoring parameters are all set on the
+ * builder before indexing.
+ *
+ * @constructor
+ * @property {string} _ref - Internal reference to the document reference field.
+ * @property {string[]} _fields - Internal reference to the document fields to index.
+ * @property {object} invertedIndex - The inverted index maps terms to document fields.
+ * @property {object} documentTermFrequencies - Keeps track of document term frequencies.
+ * @property {object} documentLengths - Keeps track of the length of documents added to the index.
+ * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.
+ * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.
+ * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.
+ * @property {number} documentCount - Keeps track of the total number of documents indexed.
+ * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.
+ * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.
+ * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.
+ * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.
+ */
+lunr.Builder = function () {
+  this._ref = "id"
+  this._fields = Object.create(null)
+  this._documents = Object.create(null)
+  this.invertedIndex = Object.create(null)
+  this.fieldTermFrequencies = {}
+  this.fieldLengths = {}
+  this.tokenizer = lunr.tokenizer
+  this.pipeline = new lunr.Pipeline
+  this.searchPipeline = new lunr.Pipeline
+  this.documentCount = 0
+  this._b = 0.75
+  this._k1 = 1.2
+  this.termIndex = 0
+  this.metadataWhitelist = []
+}
+
+/**
+ * Sets the document field used as the document reference. Every document must have this field.
+ * The type of this field in the document should be a string, if it is not a string it will be
+ * coerced into a string by calling toString.
+ *
+ * The default ref is 'id'.
+ *
+ * The ref should _not_ be changed during indexing, it should be set before any documents are
+ * added to the index. Changing it during indexing can lead to inconsistent results.
+ *
+ * @param {string} ref - The name of the reference field in the document.
+ */
+lunr.Builder.prototype.ref = function (ref) {
+  this._ref = ref
+}
+
+/**
+ * A function that is used to extract a field from a document.
+ *
+ * Lunr expects a field to be at the top level of a document, if however the field
+ * is deeply nested within a document an extractor function can be used to extract
+ * the right field for indexing.
+ *
+ * @callback fieldExtractor
+ * @param {object} doc - The document being added to the index.
+ * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.
+ * @example <caption>Extracting a nested field</caption>
+ * function (doc) { return doc.nested.field }
+ */
+
+/**
+ * Adds a field to the list of document fields that will be indexed. Every document being
+ * indexed should have this field. Null values for this field in indexed documents will
+ * not cause errors but will limit the chance of that document being retrieved by searches.
+ *
+ * All fields should be added before adding documents to the index. Adding fields after
+ * a document has been indexed will have no effect on already indexed documents.
+ *
+ * Fields can be boosted at build time. This allows terms within that field to have more
+ * importance when ranking search results. Use a field boost to specify that matches within
+ * one field are more important than other fields.
+ *
+ * @param {string} fieldName - The name of a field to index in all documents.
+ * @param {object} attributes - Optional attributes associated with this field.
+ * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.
+ * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.
+ * @throws {RangeError} fieldName cannot contain unsupported characters '/'
+ */
+lunr.Builder.prototype.field = function (fieldName, attributes) {
+  if (/\//.test(fieldName)) {
+    throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'")
+  }
+
+  this._fields[fieldName] = attributes || {}
+}
+
+/**
+ * A parameter to tune the amount of field length normalisation that is applied when
+ * calculating relevance scores. A value of 0 will completely disable any normalisation
+ * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b
+ * will be clamped to the range 0 - 1.
+ *
+ * @param {number} number - The value to set for this tuning parameter.
+ */
+lunr.Builder.prototype.b = function (number) {
+  if (number < 0) {
+    this._b = 0
+  } else if (number > 1) {
+    this._b = 1
+  } else {
+    this._b = number
+  }
+}
+
+/**
+ * A parameter that controls the speed at which a rise in term frequency results in term
+ * frequency saturation. The default value is 1.2. Setting this to a higher value will give
+ * slower saturation levels, a lower value will result in quicker saturation.
+ *
+ * @param {number} number - The value to set for this tuning parameter.
+ */
+lunr.Builder.prototype.k1 = function (number) {
+  this._k1 = number
+}
+
+/**
+ * Adds a document to the index.
+ *
+ * Before adding fields to the index the index should have been fully setup, with the document
+ * ref and all fields to index already having been specified.
+ *
+ * The document must have a field name as specified by the ref (by default this is 'id') and
+ * it should have all fields defined for indexing, though null or undefined values will not
+ * cause errors.
+ *
+ * Entire documents can be boosted at build time. Applying a boost to a document indicates that
+ * this document should rank higher in search results than other documents.
+ *
+ * @param {object} doc - The document to add to the index.
+ * @param {object} attributes - Optional attributes associated with this document.
+ * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.
+ */
+lunr.Builder.prototype.add = function (doc, attributes) {
+  var docRef = doc[this._ref],
+      fields = Object.keys(this._fields)
+
+  this._documents[docRef] = attributes || {}
+  this.documentCount += 1
+
+  for (var i = 0; i < fields.length; i++) {
+    var fieldName = fields[i],
+        extractor = this._fields[fieldName].extractor,
+        field = extractor ? extractor(doc) : doc[fieldName],
+        tokens = this.tokenizer(field, {
+          fields: [fieldName]
+        }),
+        terms = this.pipeline.run(tokens),
+        fieldRef = new lunr.FieldRef (docRef, fieldName),
+        fieldTerms = Object.create(null)
+
+    this.fieldTermFrequencies[fieldRef] = fieldTerms
+    this.fieldLengths[fieldRef] = 0
+
+    // store the length of this field for this document
+    this.fieldLengths[fieldRef] += terms.length
+
+    // calculate term frequencies for this field
+    for (var j = 0; j < terms.length; j++) {
+      var term = terms[j]
+
+      if (fieldTerms[term] == undefined) {
+        fieldTerms[term] = 0
+      }
+
+      fieldTerms[term] += 1
+
+      // add to inverted index
+      // create an initial posting if one doesn't exist
+      if (this.invertedIndex[term] == undefined) {
+        var posting = Object.create(null)
+        posting["_index"] = this.termIndex
+        this.termIndex += 1
+
+        for (var k = 0; k < fields.length; k++) {
+          posting[fields[k]] = Object.create(null)
+        }
+
+        this.invertedIndex[term] = posting
+      }
+
+      // add an entry for this term/fieldName/docRef to the invertedIndex
+      if (this.invertedIndex[term][fieldName][docRef] == undefined) {
+        this.invertedIndex[term][fieldName][docRef] = Object.create(null)
+      }
+
+      // store all whitelisted metadata about this token in the
+      // inverted index
+      for (var l = 0; l < this.metadataWhitelist.length; l++) {
+        var metadataKey = this.metadataWhitelist[l],
+            metadata = term.metadata[metadataKey]
+
+        if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {
+          this.invertedIndex[term][fieldName][docRef][metadataKey] = []
+        }
+
+        this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)
+      }
+    }
+
+  }
+}
+
+/**
+ * Calculates the average document length for this index
+ *
+ * @private
+ */
+lunr.Builder.prototype.calculateAverageFieldLengths = function () {
+
+  var fieldRefs = Object.keys(this.fieldLengths),
+      numberOfFields = fieldRefs.length,
+      accumulator = {},
+      documentsWithField = {}
+
+  for (var i = 0; i < numberOfFields; i++) {
+    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
+        field = fieldRef.fieldName
+
+    documentsWithField[field] || (documentsWithField[field] = 0)
+    documentsWithField[field] += 1
+
+    accumulator[field] || (accumulator[field] = 0)
+    accumulator[field] += this.fieldLengths[fieldRef]
+  }
+
+  var fields = Object.keys(this._fields)
+
+  for (var i = 0; i < fields.length; i++) {
+    var fieldName = fields[i]
+    accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]
+  }
+
+  this.averageFieldLength = accumulator
+}
+
+/**
+ * Builds a vector space model of every document using lunr.Vector
+ *
+ * @private
+ */
+lunr.Builder.prototype.createFieldVectors = function () {
+  var fieldVectors = {},
+      fieldRefs = Object.keys(this.fieldTermFrequencies),
+      fieldRefsLength = fieldRefs.length,
+      termIdfCache = Object.create(null)
+
+  for (var i = 0; i < fieldRefsLength; i++) {
+    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
+        fieldName = fieldRef.fieldName,
+        fieldLength = this.fieldLengths[fieldRef],
+        fieldVector = new lunr.Vector,
+        termFrequencies = this.fieldTermFrequencies[fieldRef],
+        terms = Object.keys(termFrequencies),
+        termsLength = terms.length
+
+
+    var fieldBoost = this._fields[fieldName].boost || 1,
+        docBoost = this._documents[fieldRef.docRef].boost || 1
+
+    for (var j = 0; j < termsLength; j++) {
+      var term = terms[j],
+          tf = termFrequencies[term],
+          termIndex = this.invertedIndex[term]._index,
+          idf, score, scoreWithPrecision
+
+      if (termIdfCache[term] === undefined) {
+        idf = lunr.idf(this.invertedIndex[term], this.documentCount)
+        termIdfCache[term] = idf
+      } else {
+        idf = termIdfCache[term]
+      }
+
+      score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)
+      score *= fieldBoost
+      score *= docBoost
+      scoreWithPrecision = Math.round(score * 1000) / 1000
+      // Converts 1.23456789 to 1.234.
+      // Reducing the precision so that the vectors take up less
+      // space when serialised. Doing it now so that they behave
+      // the same before and after serialisation. Also, this is
+      // the fastest approach to reducing a number's precision in
+      // JavaScript.
+
+      fieldVector.insert(termIndex, scoreWithPrecision)
+    }
+
+    fieldVectors[fieldRef] = fieldVector
+  }
+
+  this.fieldVectors = fieldVectors
+}
+
+/**
+ * Creates a token set of all tokens in the index using lunr.TokenSet
+ *
+ * @private
+ */
+lunr.Builder.prototype.createTokenSet = function () {
+  this.tokenSet = lunr.TokenSet.fromArray(
+    Object.keys(this.invertedIndex).sort()
+  )
+}
+
+/**
+ * Builds the index, creating an instance of lunr.Index.
+ *
+ * This completes the indexing process and should only be called
+ * once all documents have been added to the index.
+ *
+ * @returns {lunr.Index}
+ */
+lunr.Builder.prototype.build = function () {
+  this.calculateAverageFieldLengths()
+  this.createFieldVectors()
+  this.createTokenSet()
+
+  return new lunr.Index({
+    invertedIndex: this.invertedIndex,
+    fieldVectors: this.fieldVectors,
+    tokenSet: this.tokenSet,
+    fields: Object.keys(this._fields),
+    pipeline: this.searchPipeline
+  })
+}
+
+/**
+ * Applies a plugin to the index builder.
+ *
+ * A plugin is a function that is called with the index builder as its context.
+ * Plugins can be used to customise or extend the behaviour of the index
+ * in some way. A plugin is just a function, that encapsulated the custom
+ * behaviour that should be applied when building the index.
+ *
+ * The plugin function will be called with the index builder as its argument, additional
+ * arguments can also be passed when calling use. The function will be called
+ * with the index builder as its context.
+ *
+ * @param {Function} plugin The plugin to apply.
+ */
+lunr.Builder.prototype.use = function (fn) {
+  var args = Array.prototype.slice.call(arguments, 1)
+  args.unshift(this)
+  fn.apply(this, args)
+}
+/**
+ * Contains and collects metadata about a matching document.
+ * A single instance of lunr.MatchData is returned as part of every
+ * lunr.Index~Result.
+ *
+ * @constructor
+ * @param {string} term - The term this match data is associated with
+ * @param {string} field - The field in which the term was found
+ * @param {object} metadata - The metadata recorded about this term in this field
+ * @property {object} metadata - A cloned collection of metadata associated with this document.
+ * @see {@link lunr.Index~Result}
+ */
+lunr.MatchData = function (term, field, metadata) {
+  var clonedMetadata = Object.create(null),
+      metadataKeys = Object.keys(metadata || {})
+
+  // Cloning the metadata to prevent the original
+  // being mutated during match data combination.
+  // Metadata is kept in an array within the inverted
+  // index so cloning the data can be done with
+  // Array#slice
+  for (var i = 0; i < metadataKeys.length; i++) {
+    var key = metadataKeys[i]
+    clonedMetadata[key] = metadata[key].slice()
+  }
+
+  this.metadata = Object.create(null)
+
+  if (term !== undefined) {
+    this.metadata[term] = Object.create(null)
+    this.metadata[term][field] = clonedMetadata
+  }
+}
+
+/**
+ * An instance of lunr.MatchData will be created for every term that matches a
+ * document. However only one instance is required in a lunr.Index~Result. This
+ * method combines metadata from another instance of lunr.MatchData with this
+ * objects metadata.
+ *
+ * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.
+ * @see {@link lunr.Index~Result}
+ */
+lunr.MatchData.prototype.combine = function (otherMatchData) {
+  var terms = Object.keys(otherMatchData.metadata)
+
+  for (var i = 0; i < terms.length; i++) {
+    var term = terms[i],
+        fields = Object.keys(otherMatchData.metadata[term])
+
+    if (this.metadata[term] == undefined) {
+      this.metadata[term] = Object.create(null)
+    }
+
+    for (var j = 0; j < fields.length; j++) {
+      var field = fields[j],
+          keys = Object.keys(otherMatchData.metadata[term][field])
+
+      if (this.metadata[term][field] == undefined) {
+        this.metadata[term][field] = Object.create(null)
+      }
+
+      for (var k = 0; k < keys.length; k++) {
+        var key = keys[k]
+
+        if (this.metadata[term][field][key] == undefined) {
+          this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]
+        } else {
+          this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])
+        }
+
+      }
+    }
+  }
+}
+
+/**
+ * Add metadata for a term/field pair to this instance of match data.
+ *
+ * @param {string} term - The term this match data is associated with
+ * @param {string} field - The field in which the term was found
+ * @param {object} metadata - The metadata recorded about this term in this field
+ */
+lunr.MatchData.prototype.add = function (term, field, metadata) {
+  if (!(term in this.metadata)) {
+    this.metadata[term] = Object.create(null)
+    this.metadata[term][field] = metadata
+    return
+  }
+
+  if (!(field in this.metadata[term])) {
+    this.metadata[term][field] = metadata
+    return
+  }
+
+  var metadataKeys = Object.keys(metadata)
+
+  for (var i = 0; i < metadataKeys.length; i++) {
+    var key = metadataKeys[i]
+
+    if (key in this.metadata[term][field]) {
+      this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])
+    } else {
+      this.metadata[term][field][key] = metadata[key]
+    }
+  }
+}
+/**
+ * A lunr.Query provides a programmatic way of defining queries to be performed
+ * against a {@link lunr.Index}.
+ *
+ * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method
+ * so the query object is pre-initialized with the right index fields.
+ *
+ * @constructor
+ * @property {lunr.Query~Clause[]} clauses - An array of query clauses.
+ * @property {string[]} allFields - An array of all available fields in a lunr.Index.
+ */
+lunr.Query = function (allFields) {
+  this.clauses = []
+  this.allFields = allFields
+}
+
+/**
+ * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.
+ *
+ * This allows wildcards to be added to the beginning and end of a term without having to manually do any string
+ * concatenation.
+ *
+ * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.
+ *
+ * @constant
+ * @default
+ * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour
+ * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists
+ * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists
+ * @see lunr.Query~Clause
+ * @see lunr.Query#clause
+ * @see lunr.Query#term
+ * @example <caption>query term with trailing wildcard</caption>
+ * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })
+ * @example <caption>query term with leading and trailing wildcard</caption>
+ * query.term('foo', {
+ *   wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING
+ * })
+ */
+
+lunr.Query.wildcard = new String ("*")
+lunr.Query.wildcard.NONE = 0
+lunr.Query.wildcard.LEADING = 1
+lunr.Query.wildcard.TRAILING = 2
+
+/**
+ * Constants for indicating what kind of presence a term must have in matching documents.
+ *
+ * @constant
+ * @enum {number}
+ * @see lunr.Query~Clause
+ * @see lunr.Query#clause
+ * @see lunr.Query#term
+ * @example <caption>query term with required presence</caption>
+ * query.term('foo', { presence: lunr.Query.presence.REQUIRED })
+ */
+lunr.Query.presence = {
+  /**
+   * Term's presence in a document is optional, this is the default value.
+   */
+  OPTIONAL: 1,
+
+  /**
+   * Term's presence in a document is required, documents that do not contain
+   * this term will not be returned.
+   */
+  REQUIRED: 2,
+
+  /**
+   * Term's presence in a document is prohibited, documents that do contain
+   * this term will not be returned.
+   */
+  PROHIBITED: 3
+}
+
+/**
+ * A single clause in a {@link lunr.Query} contains a term and details on how to
+ * match that term against a {@link lunr.Index}.
+ *
+ * @typedef {Object} lunr.Query~Clause
+ * @property {string[]} fields - The fields in an index this clause should be matched against.
+ * @property {number} [boost=1] - Any boost that should be applied when matching this clause.
+ * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.
+ * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.
+ * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.
+ * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.
+ */
+
+/**
+ * Adds a {@link lunr.Query~Clause} to this query.
+ *
+ * Unless the clause contains the fields to be matched all fields will be matched. In addition
+ * a default boost of 1 is applied to the clause.
+ *
+ * @param {lunr.Query~Clause} clause - The clause to add to this query.
+ * @see lunr.Query~Clause
+ * @returns {lunr.Query}
+ */
+lunr.Query.prototype.clause = function (clause) {
+  if (!('fields' in clause)) {
+    clause.fields = this.allFields
+  }
+
+  if (!('boost' in clause)) {
+    clause.boost = 1
+  }
+
+  if (!('usePipeline' in clause)) {
+    clause.usePipeline = true
+  }
+
+  if (!('wildcard' in clause)) {
+    clause.wildcard = lunr.Query.wildcard.NONE
+  }
+
+  if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {
+    clause.term = "*" + clause.term
+  }
+
+  if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {
+    clause.term = "" + clause.term + "*"
+  }
+
+  if (!('presence' in clause)) {
+    clause.presence = lunr.Query.presence.OPTIONAL
+  }
+
+  this.clauses.push(clause)
+
+  return this
+}
+
+/**
+ * A negated query is one in which every clause has a presence of
+ * prohibited. These queries require some special processing to return
+ * the expected results.
+ *
+ * @returns boolean
+ */
+lunr.Query.prototype.isNegated = function () {
+  for (var i = 0; i < this.clauses.length; i++) {
+    if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {
+      return false
+    }
+  }
+
+  return true
+}
+
+/**
+ * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}
+ * to the list of clauses that make up this query.
+ *
+ * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion
+ * to a token or token-like string should be done before calling this method.
+ *
+ * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an
+ * array, each term in the array will share the same options.
+ *
+ * @param {object|object[]} term - The term(s) to add to the query.
+ * @param {object} [options] - Any additional properties to add to the query clause.
+ * @returns {lunr.Query}
+ * @see lunr.Query#clause
+ * @see lunr.Query~Clause
+ * @example <caption>adding a single term to a query</caption>
+ * query.term("foo")
+ * @example <caption>adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard</caption>
+ * query.term("foo", {
+ *   fields: ["title"],
+ *   boost: 10,
+ *   wildcard: lunr.Query.wildcard.TRAILING
+ * })
+ * @example <caption>using lunr.tokenizer to convert a string to tokens before using them as terms</caption>
+ * query.term(lunr.tokenizer("foo bar"))
+ */
+lunr.Query.prototype.term = function (term, options) {
+  if (Array.isArray(term)) {
+    term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)
+    return this
+  }
+
+  var clause = options || {}
+  clause.term = term.toString()
+
+  this.clause(clause)
+
+  return this
+}
+lunr.QueryParseError = function (message, start, end) {
+  this.name = "QueryParseError"
+  this.message = message
+  this.start = start
+  this.end = end
+}
+
+lunr.QueryParseError.prototype = new Error
+lunr.QueryLexer = function (str) {
+  this.lexemes = []
+  this.str = str
+  this.length = str.length
+  this.pos = 0
+  this.start = 0
+  this.escapeCharPositions = []
+}
+
+lunr.QueryLexer.prototype.run = function () {
+  var state = lunr.QueryLexer.lexText
+
+  while (state) {
+    state = state(this)
+  }
+}
+
+lunr.QueryLexer.prototype.sliceString = function () {
+  var subSlices = [],
+      sliceStart = this.start,
+      sliceEnd = this.pos
+
+  for (var i = 0; i < this.escapeCharPositions.length; i++) {
+    sliceEnd = this.escapeCharPositions[i]
+    subSlices.push(this.str.slice(sliceStart, sliceEnd))
+    sliceStart = sliceEnd + 1
+  }
+
+  subSlices.push(this.str.slice(sliceStart, this.pos))
+  this.escapeCharPositions.length = 0
+
+  return subSlices.join('')
+}
+
+lunr.QueryLexer.prototype.emit = function (type) {
+  this.lexemes.push({
+    type: type,
+    str: this.sliceString(),
+    start: this.start,
+    end: this.pos
+  })
+
+  this.start = this.pos
+}
+
+lunr.QueryLexer.prototype.escapeCharacter = function () {
+  this.escapeCharPositions.push(this.pos - 1)
+  this.pos += 1
+}
+
+lunr.QueryLexer.prototype.next = function () {
+  if (this.pos >= this.length) {
+    return lunr.QueryLexer.EOS
+  }
+
+  var char = this.str.charAt(this.pos)
+  this.pos += 1
+  return char
+}
+
+lunr.QueryLexer.prototype.width = function () {
+  return this.pos - this.start
+}
+
+lunr.QueryLexer.prototype.ignore = function () {
+  if (this.start == this.pos) {
+    this.pos += 1
+  }
+
+  this.start = this.pos
+}
+
+lunr.QueryLexer.prototype.backup = function () {
+  this.pos -= 1
+}
+
+lunr.QueryLexer.prototype.acceptDigitRun = function () {
+  var char, charCode
+
+  do {
+    char = this.next()
+    charCode = char.charCodeAt(0)
+  } while (charCode > 47 && charCode < 58)
+
+  if (char != lunr.QueryLexer.EOS) {
+    this.backup()
+  }
+}
+
+lunr.QueryLexer.prototype.more = function () {
+  return this.pos < this.length
+}
+
+lunr.QueryLexer.EOS = 'EOS'
+lunr.QueryLexer.FIELD = 'FIELD'
+lunr.QueryLexer.TERM = 'TERM'
+lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'
+lunr.QueryLexer.BOOST = 'BOOST'
+lunr.QueryLexer.PRESENCE = 'PRESENCE'
+
+lunr.QueryLexer.lexField = function (lexer) {
+  lexer.backup()
+  lexer.emit(lunr.QueryLexer.FIELD)
+  lexer.ignore()
+  return lunr.QueryLexer.lexText
+}
+
+lunr.QueryLexer.lexTerm = function (lexer) {
+  if (lexer.width() > 1) {
+    lexer.backup()
+    lexer.emit(lunr.QueryLexer.TERM)
+  }
+
+  lexer.ignore()
+
+  if (lexer.more()) {
+    return lunr.QueryLexer.lexText
+  }
+}
+
+lunr.QueryLexer.lexEditDistance = function (lexer) {
+  lexer.ignore()
+  lexer.acceptDigitRun()
+  lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)
+  return lunr.QueryLexer.lexText
+}
+
+lunr.QueryLexer.lexBoost = function (lexer) {
+  lexer.ignore()
+  lexer.acceptDigitRun()
+  lexer.emit(lunr.QueryLexer.BOOST)
+  return lunr.QueryLexer.lexText
+}
+
+lunr.QueryLexer.lexEOS = function (lexer) {
+  if (lexer.width() > 0) {
+    lexer.emit(lunr.QueryLexer.TERM)
+  }
+}
+
+// This matches the separator used when tokenising fields
+// within a document. These should match otherwise it is
+// not possible to search for some tokens within a document.
+//
+// It is possible for the user to change the separator on the
+// tokenizer so it _might_ clash with any other of the special
+// characters already used within the search string, e.g. :.
+//
+// This means that it is possible to change the separator in
+// such a way that makes some words unsearchable using a search
+// string.
+lunr.QueryLexer.termSeparator = lunr.tokenizer.separator
+
+lunr.QueryLexer.lexText = function (lexer) {
+  while (true) {
+    var char = lexer.next()
+
+    if (char == lunr.QueryLexer.EOS) {
+      return lunr.QueryLexer.lexEOS
+    }
+
+    // Escape character is '\'
+    if (char.charCodeAt(0) == 92) {
+      lexer.escapeCharacter()
+      continue
+    }
+
+    if (char == ":") {
+      return lunr.QueryLexer.lexField
+    }
+
+    if (char == "~") {
+      lexer.backup()
+      if (lexer.width() > 0) {
+        lexer.emit(lunr.QueryLexer.TERM)
+      }
+      return lunr.QueryLexer.lexEditDistance
+    }
+
+    if (char == "^") {
+      lexer.backup()
+      if (lexer.width() > 0) {
+        lexer.emit(lunr.QueryLexer.TERM)
+      }
+      return lunr.QueryLexer.lexBoost
+    }
+
+    // "+" indicates term presence is required
+    // checking for length to ensure that only
+    // leading "+" are considered
+    if (char == "+" && lexer.width() === 1) {
+      lexer.emit(lunr.QueryLexer.PRESENCE)
+      return lunr.QueryLexer.lexText
+    }
+
+    // "-" indicates term presence is prohibited
+    // checking for length to ensure that only
+    // leading "-" are considered
+    if (char == "-" && lexer.width() === 1) {
+      lexer.emit(lunr.QueryLexer.PRESENCE)
+      return lunr.QueryLexer.lexText
+    }
+
+    if (char.match(lunr.QueryLexer.termSeparator)) {
+      return lunr.QueryLexer.lexTerm
+    }
+  }
+}
+
+lunr.QueryParser = function (str, query) {
+  this.lexer = new lunr.QueryLexer (str)
+  this.query = query
+  this.currentClause = {}
+  this.lexemeIdx = 0
+}
+
+lunr.QueryParser.prototype.parse = function () {
+  this.lexer.run()
+  this.lexemes = this.lexer.lexemes
+
+  var state = lunr.QueryParser.parseClause
+
+  while (state) {
+    state = state(this)
+  }
+
+  return this.query
+}
+
+lunr.QueryParser.prototype.peekLexeme = function () {
+  return this.lexemes[this.lexemeIdx]
+}
+
+lunr.QueryParser.prototype.consumeLexeme = function () {
+  var lexeme = this.peekLexeme()
+  this.lexemeIdx += 1
+  return lexeme
+}
+
+lunr.QueryParser.prototype.nextClause = function () {
+  var completedClause = this.currentClause
+  this.query.clause(completedClause)
+  this.currentClause = {}
+}
+
+lunr.QueryParser.parseClause = function (parser) {
+  var lexeme = parser.peekLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  switch (lexeme.type) {
+    case lunr.QueryLexer.PRESENCE:
+      return lunr.QueryParser.parsePresence
+    case lunr.QueryLexer.FIELD:
+      return lunr.QueryParser.parseField
+    case lunr.QueryLexer.TERM:
+      return lunr.QueryParser.parseTerm
+    default:
+      var errorMessage = "expected either a field or a term, found " + lexeme.type
+
+      if (lexeme.str.length >= 1) {
+        errorMessage += " with value '" + lexeme.str + "'"
+      }
+
+      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+}
+
+lunr.QueryParser.parsePresence = function (parser) {
+  var lexeme = parser.consumeLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  switch (lexeme.str) {
+    case "-":
+      parser.currentClause.presence = lunr.Query.presence.PROHIBITED
+      break
+    case "+":
+      parser.currentClause.presence = lunr.Query.presence.REQUIRED
+      break
+    default:
+      var errorMessage = "unrecognised presence operator'" + lexeme.str + "'"
+      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  var nextLexeme = parser.peekLexeme()
+
+  if (nextLexeme == undefined) {
+    var errorMessage = "expecting term or field, found nothing"
+    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  switch (nextLexeme.type) {
+    case lunr.QueryLexer.FIELD:
+      return lunr.QueryParser.parseField
+    case lunr.QueryLexer.TERM:
+      return lunr.QueryParser.parseTerm
+    default:
+      var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'"
+      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
+  }
+}
+
+lunr.QueryParser.parseField = function (parser) {
+  var lexeme = parser.consumeLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  if (parser.query.allFields.indexOf(lexeme.str) == -1) {
+    var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '),
+        errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields
+
+    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  parser.currentClause.fields = [lexeme.str]
+
+  var nextLexeme = parser.peekLexeme()
+
+  if (nextLexeme == undefined) {
+    var errorMessage = "expecting term, found nothing"
+    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  switch (nextLexeme.type) {
+    case lunr.QueryLexer.TERM:
+      return lunr.QueryParser.parseTerm
+    default:
+      var errorMessage = "expecting term, found '" + nextLexeme.type + "'"
+      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
+  }
+}
+
+lunr.QueryParser.parseTerm = function (parser) {
+  var lexeme = parser.consumeLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  parser.currentClause.term = lexeme.str.toLowerCase()
+
+  if (lexeme.str.indexOf("*") != -1) {
+    parser.currentClause.usePipeline = false
+  }
+
+  var nextLexeme = parser.peekLexeme()
+
+  if (nextLexeme == undefined) {
+    parser.nextClause()
+    return
+  }
+
+  switch (nextLexeme.type) {
+    case lunr.QueryLexer.TERM:
+      parser.nextClause()
+      return lunr.QueryParser.parseTerm
+    case lunr.QueryLexer.FIELD:
+      parser.nextClause()
+      return lunr.QueryParser.parseField
+    case lunr.QueryLexer.EDIT_DISTANCE:
+      return lunr.QueryParser.parseEditDistance
+    case lunr.QueryLexer.BOOST:
+      return lunr.QueryParser.parseBoost
+    case lunr.QueryLexer.PRESENCE:
+      parser.nextClause()
+      return lunr.QueryParser.parsePresence
+    default:
+      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
+      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
+  }
+}
+
+lunr.QueryParser.parseEditDistance = function (parser) {
+  var lexeme = parser.consumeLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  var editDistance = parseInt(lexeme.str, 10)
+
+  if (isNaN(editDistance)) {
+    var errorMessage = "edit distance must be numeric"
+    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  parser.currentClause.editDistance = editDistance
+
+  var nextLexeme = parser.peekLexeme()
+
+  if (nextLexeme == undefined) {
+    parser.nextClause()
+    return
+  }
+
+  switch (nextLexeme.type) {
+    case lunr.QueryLexer.TERM:
+      parser.nextClause()
+      return lunr.QueryParser.parseTerm
+    case lunr.QueryLexer.FIELD:
+      parser.nextClause()
+      return lunr.QueryParser.parseField
+    case lunr.QueryLexer.EDIT_DISTANCE:
+      return lunr.QueryParser.parseEditDistance
+    case lunr.QueryLexer.BOOST:
+      return lunr.QueryParser.parseBoost
+    case lunr.QueryLexer.PRESENCE:
+      parser.nextClause()
+      return lunr.QueryParser.parsePresence
+    default:
+      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
+      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
+  }
+}
+
+lunr.QueryParser.parseBoost = function (parser) {
+  var lexeme = parser.consumeLexeme()
+
+  if (lexeme == undefined) {
+    return
+  }
+
+  var boost = parseInt(lexeme.str, 10)
+
+  if (isNaN(boost)) {
+    var errorMessage = "boost must be numeric"
+    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
+  }
+
+  parser.currentClause.boost = boost
+
+  var nextLexeme = parser.peekLexeme()
+
+  if (nextLexeme == undefined) {
+    parser.nextClause()
+    return
+  }
+
+  switch (nextLexeme.type) {
+    case lunr.QueryLexer.TERM:
+      parser.nextClause()
+      return lunr.QueryParser.parseTerm
+    case lunr.QueryLexer.FIELD:
+      parser.nextClause()
+      return lunr.QueryParser.parseField
+    case lunr.QueryLexer.EDIT_DISTANCE:
+      return lunr.QueryParser.parseEditDistance
+    case lunr.QueryLexer.BOOST:
+      return lunr.QueryParser.parseBoost
+    case lunr.QueryLexer.PRESENCE:
+      parser.nextClause()
+      return lunr.QueryParser.parsePresence
+    default:
+      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
+      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
+  }
+}
+
+  /**
+   * export the module via AMD, CommonJS or as a browser global
+   * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
+   */
+  ;(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+      // AMD. Register as an anonymous module.
+      define(factory)
+    } else if (typeof exports === 'object') {
+      /**
+       * Node. Does not work with strict CommonJS, but
+       * only CommonJS-like enviroments that support module.exports,
+       * like Node.
+       */
+      module.exports = factory()
+    } else {
+      // Browser globals (root is window)
+      root.lunr = factory()
+    }
+  }(this, function () {
+    /**
+     * Just return a value to define the module export.
+     * This example returns an object, but the module
+     * can return a function as the exported value.
+     */
+    return lunr
+  }))
+})();
diff --git a/codegen/vulkan/vulkan-docs-next/config/copyright-ccby.adoc b/codegen/vulkan/vulkan-docs-next/config/copyright-ccby.adoc
new file mode 100644
index 0000000..38ddf68
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/copyright-ccby.adoc
@@ -0,0 +1,3 @@
+Copyright 2014-2023 The Khronos Group Inc.
+
+SPDX-License-Identifier: CC-BY-4.0
diff --git a/codegen/vulkan/vulkan-docs-next/config/copyright-spec.adoc b/codegen/vulkan/vulkan-docs-next/config/copyright-spec.adoc
new file mode 100644
index 0000000..d0e24a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/copyright-spec.adoc
@@ -0,0 +1,136 @@
+Copyright 2014-2023 The Khronos Group Inc.
+
+This Specification is protected by copyright laws and contains material
+proprietary to Khronos. Except as described by these terms, it or any
+components may not be reproduced, republished, distributed, transmitted,
+displayed, broadcast or otherwise exploited in any manner without the
+express prior written permission of Khronos.
+
+Khronos grants a conditional copyright license to use and reproduce the
+unmodified Specification for any purpose, without fee or royalty, EXCEPT no
+licenses to any patent, trademark or other intellectual property rights are
+granted under these terms.
+
+Khronos makes no, and expressly disclaims any, representations or
+warranties, express or implied, regarding this Specification, including,
+without limitation: merchantability, fitness for a particular purpose,
+non-infringement of any intellectual property, correctness, accuracy,
+completeness, timeliness, and reliability. Under no circumstances will
+Khronos, or any of its Promoters, Contributors or Members, or their
+respective partners, officers, directors, employees, agents or
+representatives be liable for any damages, whether direct, indirect, special
+or consequential damages for lost revenues, lost profits, or otherwise,
+arising from or in connection with these materials.
+
+// "Ratified Specifications" sections
+
+// Specifications that contain no non-ratified extensions
+ifdef::ratified_core_spec[]
+This Specification has been created under the Khronos Intellectual Property
+Rights Policy, which is Attachment A of the Khronos Group Membership
+Agreement available at https://www.khronos.org/files/member_agreement.pdf.
+Parties desiring to implement the Specification and make use of Khronos
+trademarks in relation to that implementation, and receive reciprocal patent
+license protection under the Khronos Intellectual Property Rights Policy
+must become Adopters and confirm the implementation as conformant under the
+process defined by Khronos for this Specification; see
+https://www.khronos.org/adopters.
+endif::ratified_core_spec[]
+
+// Specifications that include non-ratified extensions
+ifndef::ratified_core_spec[]
+
+ifndef::VKSC_VERSION_1_0[]
+:apinameCR: Vulkan
+:apiUrlCore: https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html
+:apiUrlKHR: https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/html/vkspec.html
+endif::VKSC_VERSION_1_0[]
+
+ifdef::VKSC_VERSION_1_0[]
+:apinameCR: Vulkan SC
+:apiUrlCore: https://registry.khronos.org/vulkansc/specs/1.0/html/vkspec.html
+:apiUrlKHR: https://registry.khronos.org/vulkansc/specs/1.0-khr-extensions/html/vkspec.html
+endif::VKSC_VERSION_1_0[]
+
+This document contains extensions which are not ratified by Khronos, and as
+such is not a ratified Specification, though it contains text from (and is a
+superset of) the ratified {apinameCR} Specification. The ratified versions
+of the {apinameCR} Specification can be found at {apiUrlCore} (core only)
+ifndef::VKSC_VERSION_1_0[]
+and {apiUrlKHR} (core with all ratified extensions)
+endif::VKSC_VERSION_1_0[]
+.
+endif::ratified_core_spec[]
+
+// "Successor Specification" section
+
+This Specification contains substantially unmodified functionality from, and
+is a successor to, Khronos specifications including
+ifdef::VKSC_VERSION_1_0[Vulkan, OpenGL SC]
+OpenGL, OpenGL ES and OpenCL.
+
+// "Normative Wording" section
+
+The Khronos Intellectual Property Rights Policy defines the terms 'Scope',
+'Compliant Portion', and 'Necessary Patent Claims'.
+
+Some parts of this Specification are purely informative and so are EXCLUDED
+the Scope of this Specification. The <<introduction-conventions>> section of
+the <<introduction>> defines how these parts of the Specification are
+identified.
+
+Where this Specification uses <<introduction-technical-terminology,
+technical terminology>>, defined in the <<glossary, Glossary>> or otherwise,
+that refer to enabling technologies that are not expressly set forth in this
+Specification, those enabling technologies are EXCLUDED from the Scope of
+this Specification. For clarity, enabling technologies not disclosed with
+particularity in this Specification (e.g. semiconductor manufacturing
+technology, hardware architecture, processor architecture or
+microarchitecture, memory architecture, compiler technology, object oriented
+technology, basic operating system technology, compression technology,
+algorithms, and so on) are NOT to be considered expressly set forth; only
+those application program interfaces and data structures disclosed with
+particularity are included in the Scope of this Specification.
+
+For purposes of the Khronos Intellectual Property Rights Policy as it
+relates to the definition of Necessary Patent Claims, all recommended or
+optional features, behaviors and functionality set forth in this
+Specification, if implemented, are considered to be included as Compliant
+Portions.
+
+// "Normative References" section
+
+Where this Specification identifies specific sections of external
+references, only those specifically identified sections define
+<<introduction-normative-references, normative>>
+functionality. The Khronos Intellectual Property Rights Policy excludes
+external references to materials and associated enabling technology not
+created by Khronos from the Scope of this Specification, and any licenses
+that may be required to implement such referenced materials and associated
+technologies must be obtained separately and may involve royalty payments.
+
+Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of
+The Khronos Group Inc. OpenCL is a trademark of Apple Inc., used under
+license by Khronos. OpenGL is a registered trademark and the OpenGL ES logo
+is a trademark of Hewlett Packard Enterprise, used under license by Khronos.
+ASTC is a trademark of ARM Holdings PLC. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.
+
+// This is version V10_Feb23 of the Khronos Specification Copyright License
+// Header, adapted for asciidoc markup and for the specific requirements of
+// the Vulkan Specification:
+//
+// - The "Ratified Specifications" language is surrounding by mutually
+//   exclusive conditional directives, allowing either form to be included
+//   in the output Specifications depending on which extension(s) they are
+//   built with. The non-ratified section includes links to the ratified
+//   Vulkan 1.3 Specifications in the Vulkan Registry.
+// - The "Successor Specification" section cites OpenGL, OpenGL ES, and
+//   OpenCL.
+// - The "Normative Wording" section links to the Vulkan Specification
+//   introduction instead of the "[Document Conventions]" placeholder, and
+//   links to sections describing technical terminology and the glossary.
+// - The "Normative References" section links to the "Normative References"
+//   section of the Specification.
+// - The trademarks section cites only those trademarks relevant to Vulkan.
diff --git a/codegen/vulkan/vulkan-docs-next/config/extension-highlighter.rb b/codegen/vulkan/vulkan-docs-next/config/extension-highlighter.rb
new file mode 100644
index 0000000..521ffbc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/extension-highlighter.rb
@@ -0,0 +1,10 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+RUBY_ENGINE == 'opal' ? (require 'extension-highlighter/extension') : (require_relative 'extension-highlighter/extension')
+
+Extensions.register do
+  preprocessor ExtensionHighlighterPreprocessor
+  postprocessor AddHighlighterCSS
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/extension-highlighter/extension.rb b/codegen/vulkan/vulkan-docs-next/config/extension-highlighter/extension.rb
new file mode 100644
index 0000000..f3ebd93
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/extension-highlighter/extension.rb
@@ -0,0 +1,303 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+module Asciidoctor
+
+# Duplicate of "AnyListRx" defined by asciidoctor
+# Detects the start of any list item.
+#
+# NOTE we only have to check as far as the blank character because we know it means non-whitespace follows.
+HighlighterAnyListRx = /^(?:#{CG_BLANK}*(?:-|([*.\u2022])\1{0,4}|\d+\.|[a-zA-Z]\.|[IVXivx]+\))#{CG_BLANK}|#{CG_BLANK}*.*?(?::{2,4}|;;)(?:$|#{CG_BLANK})|<?\d+>#{CG_BLANK})/
+
+class ExtensionHighlighterPreprocessorReader < PreprocessorReader
+  def initialize document, diff_extensions, data = nil, cursor = nil
+    super(document, data, cursor)
+    @status_stack = []
+    @diff_extensions = diff_extensions
+    @tracking_target = nil
+  end
+
+  # This overrides the default preprocessor reader conditional logic such
+  # that any extensions which need highlighting and are enabled have their
+  # ifdefs left intact.
+  def preprocess_conditional_directive directive, target, delimiter, text
+    # If we are tracking a target for highlighting already, we do not need to do
+    # additional processing unless we hit the end of that conditional
+    # section
+    # NOTE: This will break if for some absurd reason someone nests the same
+    # conditional inside itself.
+    if @tracking_target != nil && directive == 'endif' && @tracking_target == target.downcase
+      @tracking_target = nil
+    elsif @tracking_target
+      return super(directive, target, delimiter, text)
+    end
+
+    # If it is an ifdef or ifndef, push the directive onto a stack
+    # If it is an endif, pop the last one off.
+    # This is done to apply the next bit of logic to both the start and end
+    # of an conditional block correctly
+    status = directive
+    if directive == 'endif'
+      status = @status_stack.pop
+    else
+      @status_stack.push status
+    end
+
+    # If the status is negative, we need to still include the conditional
+    # text for the highlighter, so we replace the requirement for the
+    # extension attribute in question to be not defined with an
+    # always-undefined attribute, so that it evaluates to true when it needs
+    # to.
+    # Undefined attribute is currently just the extension with "_undefined"
+    # appended to it.
+    modified_target = target.downcase
+    if status == 'ifndef'
+      @diff_extensions.each do | extension |
+        modified_target.gsub!(extension, extension + '_undefined')
+      end
+    end
+
+    # Call the original preprocessor
+    result = super(directive, modified_target, delimiter, text)
+
+    # If any of the extensions are in the target, and the conditional text
+    # is not flagged to be skipped, return false to prevent the preprocessor
+    # from removing the line from the processed source.
+    unless @skipping
+      @diff_extensions.each do | extension |
+        if target.downcase.include?(extension)
+          if directive != 'endif'
+            @tracking_target = target.downcase
+          end
+          return false
+        end
+      end
+    end
+    return result
+  end
+
+  # Identical to preprocess_conditional_directive, but older versions of
+  # Asciidoctor used a different name, so this is there to override the same
+  # method in older versions.
+  # This is a pure c+p job for awkward inheritance reasons (see use of
+  # the super() keyword :|)
+  # At some point, will rewrite to avoid this mess, but this fixes things
+  # for now without breaking things for anyone.
+  def preprocess_conditional_inclusion directive, target, delimiter, text
+    # If we are tracking a target for highlighting already, do not need to do
+    # additional processing unless we hit the end of that conditional
+    # section
+    # NOTE: This will break if for some absurd reason someone nests the same
+    # conditional inside itself.
+    if @tracking_target != nil && directive == 'endif' && @tracking_target == target.downcase
+      @tracking_target = nil
+    elsif @tracking_target
+      return super(directive, target, delimiter, text)
+    end
+
+    # If it is an ifdef or ifndef, push the directive onto a stack
+    # If it is an endif, pop the last one off.
+    # This is done to apply the next bit of logic to both the start and end
+    # of an conditional block correctly
+    status = directive
+    if directive == 'endif'
+      status = @status_stack.pop
+    else
+      @status_stack.push status
+    end
+
+    # If the status is negative, we need to still include the conditional
+    # text for the highlighter, so we replace the requirement for the
+    # extension attribute in question to be not defined with an
+    # always-undefined attribute, so that it evaluates to true when it needs
+    # to.
+    # Undefined attribute is currently just the extension with "_undefined"
+    # appended to it.
+    modified_target = target.downcase
+    if status == 'ifndef'
+      @diff_extensions.each do | extension |
+        modified_target.gsub!(extension, extension + '_undefined')
+      end
+    end
+
+    # Call the original preprocessor
+    result = super(directive, modified_target, delimiter, text)
+
+    # If any of the extensions are in the target, and the conditional text
+    # is not flagged to be skipped, return false to prevent the preprocessor
+    # from removing the line from the processed source.
+    unless @skipping
+      @diff_extensions.each do | extension |
+        if target.downcase.include?(extension)
+          if directive != 'endif'
+            @tracking_target = target.downcase
+          end
+          return false
+        end
+      end
+    end
+    return result
+  end
+end
+
+class Highlighter
+  def initialize
+    @delimiter_stack = []
+    @current_anchor = 1
+  end
+
+  def highlight_marks line, previous_line, next_line
+    if !(line.start_with? 'endif')
+      # Any intact "ifdefs" are sections added by an extension, and
+      # "ifndefs" are sections removed.
+      # Currently do not track *which* extension(s) is/are responsible for
+      # the addition or removal - though it would be possible to add it.
+      if line.start_with? 'ifdef'
+        role = 'added'
+      else # if line.start_with? 'ifndef'
+        role = 'removed'
+      end
+
+      # Create an anchor with the current anchor number
+      anchor = '[[difference' + @current_anchor.to_s + ']]'
+
+      # Figure out which markup to use based on the surrounding text
+      # This is robust enough as far as I can tell, though we may want to do
+      # something more generic later since currently it relies on the fact
+      # that if you start inside a list or paragraph, you will end in the same
+      # list or paragraph and not cross to other blocks.
+      # In practice it *might just work* but it also might not.
+      # May need to consider what to do about this in future - maybe just
+      # use open blocks for everything?
+      highlight_delimiter = :inline
+      if (HighlighterAnyListRx.match(next_line) != nil)
+        # NOTE: There is a corner case here that should never be hit (famous last words)
+        # If a line in the middle of a paragraph begins with an asterisk and
+        # then whitespace, this will think it is a list item and use the
+        # wrong delimiter.
+        # That should not be a problem in practice though, it just might look
+        # a little weird.
+        highlight_delimiter = :list
+      elsif previous_line.strip.empty?
+        highlight_delimiter = :block
+      end
+
+      # Add the delimiter to the stack for the matching 'endif' to consume
+      @delimiter_stack.push highlight_delimiter
+
+      # Add an appropriate method of delimiting the highlighted areas based
+      # on the surrounding text determined above.
+      if highlight_delimiter == :block
+        return ['', anchor, ":role: #{role}", '']
+      elsif highlight_delimiter == :list
+        return ['', anchor, "[.#{role}]", '~~~~~~~~~~~~~~~~~~~~', '']
+      else #if highlight_delimiter == :inline
+        return [anchor + ' [.' + role + ']##']
+      end
+    else  # if !(line.start_with? 'endif')
+      # Increment the anchor when we see a matching endif, and generate a
+      # link to the next diff section
+      @current_anchor = @current_anchor + 1
+      anchor_link = '<<difference' + @current_anchor.to_s + ', =>>>'
+
+      # Close the delimited area according to the previously determined
+      # delimiter
+      highlight_delimiter = @delimiter_stack.pop
+      if highlight_delimiter == :block
+        return [anchor_link, '', ':role:', '']
+      elsif highlight_delimiter == :list
+        return [anchor_link, '~~~~~~~~~~~~~~~~~~~~', '']
+      else #if highlight_delimiter == :inline
+        return [anchor_link + '##']
+      end
+    end
+  end
+end
+
+# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
+class ExtensionHighlighterPreprocessor < Extensions::Preprocessor
+  def process document, reader
+
+    # Only attempt to highlight extensions that are also enabled - if one
+    # is not, warn about it and skip highlighting that extension.
+    diff_extensions = document.attributes['diff_extensions'].downcase.split(' ')
+    actual_diff_extensions = []
+    diff_extensions.each do | extension |
+      if document.attributes.has_key?(extension)
+        actual_diff_extensions << extension
+      else
+        puts 'The ' + extension + ' extension is not enabled - changes will not be highlighted.'
+      end
+    end
+
+    # Create a new reader to return, which leaves extension ifdefs that need highlighting intact beyond the preprocess step.
+    extension_preprocessor_reader = ExtensionHighlighterPreprocessorReader.new(document, actual_diff_extensions, reader.lines)
+
+    highlighter = Highlighter.new
+    new_lines = []
+
+    # Store the old lines so we can reference them in a non-trivial fashion
+    old_lines = extension_preprocessor_reader.read_lines()
+    old_lines.each_index do | index |
+
+      # Grab the previously processed line
+      # This is used by the highlighter to figure out if the highlight will
+      # be inline, or part of a block.
+      if index > 0
+        previous_line = old_lines[index - 1]
+      else
+        previous_line = ''
+      end
+
+      # Current line to process
+      line = old_lines[index]
+
+      # Grab the next line to process
+      # This is used by the highlighter to figure out if the highlight is
+      # between list elements or not - which need special handling.
+      if index < (old_lines.length - 1)
+        next_line = old_lines[index + 1]
+      else
+        next_line = ''
+      end
+
+      # Highlight any preprocessor directives that were left intact by the
+      # custom preprocessor reader.
+      if line.start_with?( 'ifdef::', 'ifndef::', 'endif::')
+        new_lines += highlighter.highlight_marks(line, previous_line, next_line)
+      else
+        new_lines << line
+      end
+    end
+
+    # Return a new reader after preprocessing - this takes care of creating
+    # the AST from the new source.
+    Reader.new(new_lines)
+  end
+end
+
+class AddHighlighterCSS < Extensions::Postprocessor
+  HighlighterStyleCSS = [
+    '.added {',
+    '    background-color: lime;',
+    '    border-color: green;',
+    '    padding:1px;',
+    '}',
+    '.removed {',
+    '    background-color: pink;',
+    '    border-color: red;',
+    '    padding:1px;',
+    '}',
+    '</style>']
+
+  def process document, output
+    output.sub! '</style>', HighlighterStyleCSS.join("\n")
+  end
+end
+
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/fonts/mplus1p-regular-fallback.ttf b/codegen/vulkan/vulkan-docs-next/config/fonts/mplus1p-regular-fallback.ttf
new file mode 100644
index 0000000..d9d2e3d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/fonts/mplus1p-regular-fallback.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/config/genanchorlinks.rb b/codegen/vulkan/vulkan-docs-next/config/genanchorlinks.rb
new file mode 100644
index 0000000..f9874e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/genanchorlinks.rb
@@ -0,0 +1,23 @@
+# Copyright 2023 The Khronos Group, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# Rewrite VUID anchors with 'href' attributes so they can be selected in a
+# browser.
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+class AnchorLinkPostprocessor < Asciidoctor::Extensions::Postprocessor
+  def process document, output
+    content = (document.attr 'copyright') || 'Copyright Acme, Inc.'
+    if document.basebackend? 'html'
+      output = output.gsub(/<a id="(VUID\-[\w\-:]+)">/, '<a id="\1" href="#\1">')
+    end
+    output
+  end
+end
+
+Asciidoctor::Extensions.register do
+  postprocessor AnchorLinkPostprocessor
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch.rb b/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch.rb
new file mode 100644
index 0000000..09a7b1e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch.rb
@@ -0,0 +1,9 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+RUBY_ENGINE == 'opal' ? (require 'ifdef-mismatch/extension') : (require_relative 'ifdef-mismatch/extension')
+
+Extensions.register do
+  preprocessor IfDefMismatchPreprocessor
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch/extension.rb b/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch/extension.rb
new file mode 100644
index 0000000..a09c24d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/ifdef-mismatch/extension.rb
@@ -0,0 +1,129 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+module Asciidoctor
+
+class IfDefMismatchPreprocessorReader < PreprocessorReader
+  attr_reader :found_conditionals
+  attr_reader :warned
+  
+  class CursorWithAttributes
+    attr_reader :cursor
+    attr_reader :attributes
+    attr_reader :line
+    
+    def initialize cursor, attributes, line
+      @cursor, @attributes, @line = cursor, attributes, line
+    end
+  end
+
+  def initialize document, lines
+    @found_conditionals = Array.new
+    super(document,lines)
+  end
+
+  def is_adoc_begin_conditional line
+    line.start_with?( 'ifdef::', 'ifndef::' ) && line.end_with?('[]')
+  end
+
+  def is_adoc_begin_conditional_eval line
+    line.start_with?( 'ifeval::[' ) && line.end_with?(']')
+  end
+
+  def is_adoc_end_conditional line
+    line.start_with?( 'endif::' ) && line.end_with?('[]')
+  end
+
+  def conditional_attributes line
+    line.delete_prefix('ifdef::').delete_prefix('ifndef::').delete_prefix('endif::').delete_suffix('[]')
+  end
+
+  def process_line line
+    new_line = line
+    if is_adoc_begin_conditional(line)
+      # Standard conditionals, add the conditional to a stack to be unwound as endifs are found
+      @found_conditionals.push CursorWithAttributes.new cursor, conditional_attributes(line), line
+    elsif is_adoc_begin_conditional_eval(line)
+      # ifeval conditionals do not have attributes, so store those slightly differently
+      @found_conditionals.push CursorWithAttributes.new cursor, '', line
+    elsif is_adoc_end_conditional(line)
+      # Try to match each endif to a previously defined conditional, logging errors as it goes
+      match_found = false
+      pop_count = 0
+      error_stack = Array.new
+      @found_conditionals.reverse_each do |conditional|
+        # Try the whole stack to find a match in case there is an extra ifdef in the way
+        pop_count += 1
+        if conditional.attributes == conditional_attributes(line)
+          match_found = true
+          break
+        end
+      end
+      
+      if match_found
+        # First pop any non-matching conditionals and fire a mismatch error
+        (pop_count - 1).times do
+          # Warn about fixing preprocessor directives before any other issue, as these often cause a domino effect
+          if not @warned
+            logger.warn "Preprocessor conditional mismatch detected - these should be addressed before attempting to fix any other errors."
+            @warned = true
+          end
+          
+          # Log an error 
+          conditional = @found_conditionals.pop
+          logger.error message_with_context %(unmatched conditional "#{conditional.line}" with no endif), source_location: conditional.cursor
+          
+          # Insert an endif statement so asciidoctor's default reader does not throw extraneous mismatch errors.
+          # This can mess with the way blocks are terminated, but errors will only be thrown if they would have been thrown without this checker; they will just be different.
+          #
+          # e.g.:
+          # [source,c]
+          # ----
+          # ifdef::undefined_attribute[]
+          # Some text
+          # ifdef::undefined_attribute[] // should be an endif
+          # ----                         // left unparsed because the ifdef is open
+          #                              // Script adds 2 'endif::undefined_attribute[]' lines here
+          # endif::another_attribute[]   // Irrelevant whether this is defined or not
+          #
+          # Ideally these errors would be suppressed too, but that requires a lot more complexity; e.g. rewinding the reader back to the ifdef and removing it
+          extra_line = %(endif::#{conditional.attributes}[])
+          unshift(extra_line)
+          super(extra_line)
+        end
+        
+        # Pop the matching conditional
+        @found_conditionals.pop
+      else
+        # Warn about fixing preprocessor directives before any other issue, as these often cause a domino effect
+        if not @warned
+          logger.warn "Preprocessor conditional mismatch detected - these should be addressed before attempting to fix any other errors."
+          @warned = true
+        end
+        
+        # If no match was found, then this is an orphaned endif
+        logger.error message_with_context %(unmatched endif - found "#{line}" with no matching conditional begin), source_location: cursor
+        
+        # Hide the endif so that asciidoctor's default reader does not try to match it anyway 
+        new_line = ''
+      end
+    end
+    
+    super(new_line)
+  end
+end
+
+# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
+class IfDefMismatchPreprocessor < Extensions::Preprocessor
+  def process document, reader
+    # Create a new reader to return which raises errors for mismatched conditionals
+    reader = IfDefMismatchPreprocessorReader.new(document, reader.lines)
+  end
+end
+
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/katex_replace.rb b/codegen/vulkan/vulkan-docs-next/config/katex_replace.rb
new file mode 100644
index 0000000..ef6f0fb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/katex_replace.rb
@@ -0,0 +1,11 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+RUBY_ENGINE == 'opal' ? (require 'katex_replace/extension') : (require_relative 'katex_replace/extension')
+
+# All the inline macros we need
+Asciidoctor::Extensions.register do
+    postprocessor ReplaceMathjaxWithKatex
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/katex_replace/extension.rb b/codegen/vulkan/vulkan-docs-next/config/katex_replace/extension.rb
new file mode 100644
index 0000000..206e4e6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/katex_replace/extension.rb
@@ -0,0 +1,44 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+class ReplaceMathjaxWithKatex < Extensions::Postprocessor
+
+  MathJaXScript = /<script type="text\/x-mathjax-config">((?!<\/script>).)+<\/script>/m
+  MathJaXCDN = /<script src="https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mathjax\/[0-9].[0-9].[0-9]\/MathJax.js\?config=[-_A-Za-z]+"><\/script>/m
+
+  def process document, output
+
+    if document.attr? 'stem'
+      katexpath = document.attr 'katexpath'
+
+      katexScript = '
+<!-- dragged in by font-awesome css included by asciidoctor, but preloaded in this extension for convenience -->
+<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="">
+
+<!-- Note: Chrome needs crossorigin="" even for same-origin fonts -->
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Bold.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Main-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Math-Italic.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size1-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size2-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size3-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Size4-Regular.woff2" as="font" type="font/woff2" crossorigin="">
+<link rel="preload" href="../katex/fonts/KaTeX_Typewriter-Regular.woff2" as="font" type="font/woff2" crossorigin="">'
+
+      # Load KaTeX stylesheet, but we no longer run a script to convert math
+      # using KaTeX, since that is now done at spec generation time.
+      katexScript += '<link rel="stylesheet" href="' + katexpath + '/katex.min.css">'
+
+      output.sub! MathJaXScript, ''
+      output.sub! MathJaXCDN, ''
+      output.sub! /(?=<\/head>)/, katexScript
+    end
+    output
+  end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/khronos.css b/codegen/vulkan/vulkan-docs-next/config/khronos.css
new file mode 100644
index 0000000..2530f3d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/khronos.css
@@ -0,0 +1,732 @@
+/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
+/* ========================================================================== HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined in IE 8/9. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+/** Correct `inline-block` display not defined in IE 8/9. */
+audio, canvas, video { display: inline-block; }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+script { display: none !important; }
+
+/* ========================================================================== Base ========================================================================== */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* ========================================================================== Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background: transparent; }
+
+/** Address `outline` inconsistency between Chrome and other browsers. */
+a:focus { outline: thin dotted; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* ========================================================================== Typography ========================================================================== */
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari 5 and Chrome. */
+dfn { font-style: italic; }
+
+/** Address differences between Firefox and other browsers. */
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Correct font family set oddly in Safari 5 and Chrome. */
+code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
+
+/** Improve readability of pre-formatted text in all browsers. */
+pre { white-space: pre-wrap; }
+
+/** Set consistent quote types. */
+q { quotes: "\201C" "\201D" "\2018" "\2019"; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* ========================================================================== Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9. */
+img { border: 0; }
+
+/** Correct overflow displayed oddly in IE 9. */
+svg:not(:root) { overflow: hidden; }
+
+/* ========================================================================== Figures ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari 5. */
+figure { margin: 0; }
+
+/* ========================================================================== Forms ========================================================================== */
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
+button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+button, input { line-height: normal; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
+textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
+
+/* ========================================================================== Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
+
+meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
+
+meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html, body { font-size: 100%; }
+
+body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
+
+a:hover { cursor: pointer; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+object, embed { height: 100%; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
+
+.left { float: left !important; }
+
+.right { float: right !important; }
+
+.text-left { text-align: left !important; }
+
+.text-right { text-align: right !important; }
+
+.text-center { text-align: center !important; }
+
+.text-justify { text-align: justify !important; }
+
+.hide { display: none; }
+
+.antialiased { -webkit-font-smoothing: antialiased; }
+
+img { display: inline-block; vertical-align: middle; }
+
+textarea { height: auto; min-height: 50px; }
+
+select { width: 100%; }
+
+object, svg { display: inline-block; vertical-align: middle; }
+
+.center { margin-left: auto; margin-right: auto; }
+
+.spread { width: 100%; }
+
+p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
+
+.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
+
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
+
+/* Default Link Styles */
+a { color: #0068b0; text-decoration: none; line-height: inherit; }
+a:hover, a:focus { color: #333; }
+a img { border: none; }
+
+/* Default paragraph styles */
+p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
+p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
+h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
+
+h1 { font-size: 2.125em; }
+
+h2 { font-size: 1.6875em; }
+
+h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
+
+h4 { font-size: 1.125em; }
+
+h5 { font-size: 1.125em; }
+
+h6 { font-size: 1em; }
+
+hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
+
+/* Helpful Typography Defaults */
+em, i { font-style: italic; line-height: inherit; }
+
+strong, b { font-weight: bold; line-height: inherit; }
+
+small { font-size: 60%; line-height: inherit; }
+
+code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
+
+/* Lists */
+ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
+
+ul, ol { margin-left: 1.5em; }
+ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
+
+/* Unordered Lists */
+ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
+ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
+ul.square { list-style-type: square; }
+ul.circle { list-style-type: circle; }
+ul.disc { list-style-type: disc; }
+ul.no-bullet { list-style: none; }
+
+/* Ordered Lists */
+ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
+
+/* Definition Lists */
+dl dt { margin-bottom: 0.3em; font-weight: bold; }
+dl dd { margin-bottom: 0.75em; }
+
+/* Abbreviations */
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
+
+abbr { text-transform: none; }
+
+/* Blockquotes */
+blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
+blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a, blockquote cite a:visited { color: #365E7A; }
+
+blockquote, blockquote p { line-height: 1.6; color: #333; }
+
+/* Microformats */
+.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
+.vcard li { margin: 0; display: block; }
+.vcard .fn { font-weight: bold; font-size: 0.9375em; }
+
+.vevent .summary { font-weight: bold; }
+.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
+
+@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+  h1 { font-size: 2.75em; }
+  h2 { font-size: 2.3125em; }
+  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
+  h4 { font-size: 1.4375em; } }
+/* Tables */
+table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
+table thead, table tfoot { background: #eee; font-weight: bold; }
+table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
+table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
+table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
+table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
+
+body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
+
+a:hover, a:focus { text-decoration: underline; }
+
+.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
+.clearfix:after, .float-group:after { clear: both; }
+
+*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
+*:not(pre) > code.nobreak { word-wrap: normal; }
+*:not(pre) > code.nowrap { white-space: nowrap; }
+
+pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
+
+em em { font-style: normal; }
+
+strong strong { font-weight: normal; }
+
+.keyseq { color: #333333; }
+
+kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
+
+.keyseq kbd:first-child { margin-left: 0; }
+
+.keyseq kbd:last-child { margin-right: 0; }
+
+.menuseq, .menuref { color: #000; }
+
+.menuseq b:not(.caret), .menuref { font-weight: inherit; }
+
+.menuseq { word-spacing: -0.02em; }
+.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
+.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
+
+b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
+
+b.button:before { content: "["; padding: 0 3px 0 2px; }
+
+b.button:after { content: "]"; padding: 0 2px 0 3px; }
+
+#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
+#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
+#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
+
+#content { margin-top: 1.25em; }
+
+#content:before { content: none; }
+
+#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
+#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
+#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
+#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
+#header .details span:first-child { margin-left: -0.125em; }
+#header .details span.email a { color: #333; }
+#header .details br { display: none; }
+#header .details br + span:before { content: "\00a0\2013\00a0"; }
+#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
+#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
+#header #revnumber { text-transform: capitalize; }
+#header #revnumber:after { content: "\00a0"; }
+
+#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
+
+#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
+#toc > ul { margin-left: 0.125em; }
+#toc ul.sectlevel0 > li > a { font-style: italic; }
+#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
+#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
+#toc li { line-height: 1.3334; margin-top: 0.3334em; }
+#toc a { text-decoration: none; }
+#toc a:active { text-decoration: underline; }
+
+#toctitle { color: black; font-size: 1.2em; }
+
+@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
+  body.toc2 { padding-left: 15em; padding-right: 0; }
+  #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
+  #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
+  #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
+  #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
+  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
+  body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
+@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
+  #toc.toc2 { width: 20em; }
+  #toc.toc2 #toctitle { font-size: 1.375em; }
+  #toc.toc2 > ul { font-size: 0.95em; }
+  #toc.toc2 ul ul { padding-left: 1.25em; }
+  body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
+#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+#content #toc > :first-child { margin-top: 0; }
+#content #toc > :last-child { margin-bottom: 0; }
+
+#footer { max-width: 100%; background-color: none; padding: 1.25em; }
+
+#footer-text { color: black; line-height: 1.44; }
+
+#content { margin-bottom: 0.625em; }
+
+.sect1 { padding-bottom: 0.625em; }
+
+@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
+  .sect1 { padding-bottom: 1.25em; } }
+.sect1:last-child { padding-bottom: 0; }
+
+.sect1 + .sect1 { border-top: 0 solid #ddd; }
+
+#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
+#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
+#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
+#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
+#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
+
+.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
+
+.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
+
+table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
+
+.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
+
+table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
+
+.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
+.admonitionblock > table td.icon { text-align: center; width: 80px; }
+.admonitionblock > table td.icon img { max-width: initial; }
+.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
+.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
+.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
+
+.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.exampleblock > .content > :first-child { margin-top: 0; }
+.exampleblock > .content > :last-child { margin-bottom: 0; }
+
+.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
+.sidebarblock > :first-child { margin-top: 0; }
+.sidebarblock > :last-child { margin-bottom: 0; }
+.sidebarblock > .content > .title { color: black; margin-top: 0; }
+
+.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
+
+.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
+.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
+
+.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
+.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
+@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
+@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
+
+.literalblock.output pre { color: #eee; background-color: #264357; }
+
+.listingblock pre.highlightjs { padding: 0; }
+.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
+
+.listingblock > .content { position: relative; }
+
+.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
+
+.listingblock:hover code[data-lang]:before { display: block; }
+
+.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
+
+.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
+
+table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
+
+table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
+
+table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
+
+pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
+
+pre.pygments .lineno { display: inline-block; margin-right: .25em; }
+
+table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
+
+.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
+.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
+.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
+.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
+.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
+.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
+.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
+.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
+.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
+.quoteblock .quoteblock blockquote:before { display: none; }
+
+.verseblock { margin: 0 1em 0.75em 1em; }
+.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
+.verseblock pre strong { font-weight: 400; }
+.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
+
+.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
+.quoteblock .attribution br, .verseblock .attribution br { display: none; }
+.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
+
+.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
+.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
+.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
+
+table.tableblock { max-width: 100%; border-collapse: separate; }
+table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
+
+table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
+
+table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
+
+table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
+
+table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
+
+table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
+
+table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
+
+table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
+
+table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
+
+table.frame-all { border-width: 1px; }
+
+table.frame-sides { border-width: 0 1px; }
+
+table.frame-topbot { border-width: 1px 0; }
+
+th.halign-left, td.halign-left { text-align: left; }
+
+th.halign-right, td.halign-right { text-align: right; }
+
+th.halign-center, td.halign-center { text-align: center; }
+
+th.valign-top, td.valign-top { vertical-align: top; }
+
+th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
+
+th.valign-middle, td.valign-middle { vertical-align: middle; }
+
+table thead th, table tfoot th { font-weight: bold; }
+
+tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
+
+tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
+
+p.tableblock > code:only-child { background: none; padding: 0; }
+
+p.tableblock { font-size: 1em; }
+
+td > div.verse { white-space: pre; }
+
+ol { margin-left: 1.75em; }
+
+ul li ol { margin-left: 1.5em; }
+
+dl dd { margin-left: 1.125em; }
+
+dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
+
+ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
+
+ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
+
+ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
+
+ul.unstyled, ol.unstyled { margin-left: 0; }
+
+ul.checklist { margin-left: 0.625em; }
+
+ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
+
+ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
+
+ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
+
+ul.inline > li { margin-left: 0.75em; }
+
+.unstyled dl dt { font-weight: normal; font-style: normal; }
+
+ol.arabic { list-style-type: decimal; }
+
+ol.decimal { list-style-type: decimal-leading-zero; }
+
+ol.loweralpha { list-style-type: lower-alpha; }
+
+ol.upperalpha { list-style-type: upper-alpha; }
+
+ol.lowerroman { list-style-type: lower-roman; }
+
+ol.upperroman { list-style-type: upper-roman; }
+
+ol.lowergreek { list-style-type: lower-greek; }
+
+.hdlist > table, .colist > table { border: 0; background: none; }
+.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
+
+td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
+
+td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
+
+.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
+
+.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
+.colist > table tr > td:first-of-type img { max-width: initial; }
+.colist > table tr > td:last-of-type { padding: 0.25em 0; }
+
+.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
+
+.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
+.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
+.imageblock > .title { margin-bottom: 0; }
+.imageblock.thumb, .imageblock.th { border-width: 6px; }
+.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
+
+.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
+.image.left { margin-right: 0.625em; }
+.image.right { margin-left: 0.625em; }
+
+a.image { text-decoration: none; display: inline-block; }
+a.image object { pointer-events: none; }
+
+sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
+sup.footnote a, sup.footnoteref a { text-decoration: none; }
+sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
+
+#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
+#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
+#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
+#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
+#footnotes .footnote:last-of-type { margin-bottom: 0; }
+#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
+
+.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
+.gist .file-data > table td.line-data { width: 99%; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+.big { font-size: larger; }
+
+.small { font-size: smaller; }
+
+.underline { text-decoration: underline; }
+
+.overline { text-decoration: overline; }
+
+.line-through { text-decoration: line-through; }
+
+.aqua { color: #00bfbf; }
+
+.aqua-background { background-color: #00fafa; }
+
+.black { color: black; }
+
+.black-background { background-color: black; }
+
+.blue { color: #0000bf; }
+
+.blue-background { background-color: #0000fa; }
+
+.fuchsia { color: #bf00bf; }
+
+.fuchsia-background { background-color: #fa00fa; }
+
+.gray { color: #606060; }
+
+.gray-background { background-color: #7d7d7d; }
+
+.green { color: #006000; }
+
+.green-background { background-color: #007d00; }
+
+.lime { color: #00bf00; }
+
+.lime-background { background-color: #00fa00; }
+
+.maroon { color: #600000; }
+
+.maroon-background { background-color: #7d0000; }
+
+.navy { color: #000060; }
+
+.navy-background { background-color: #00007d; }
+
+.olive { color: #606000; }
+
+.olive-background { background-color: #7d7d00; }
+
+.purple { color: #600060; }
+
+.purple-background { background-color: #7d007d; }
+
+.red { color: #bf0000; }
+
+.red-background { background-color: #fa0000; }
+
+.silver { color: #909090; }
+
+.silver-background { background-color: #bcbcbc; }
+
+.teal { color: #006060; }
+
+.teal-background { background-color: #007d7d; }
+
+.white { color: #bfbfbf; }
+
+.white-background { background-color: #fafafa; }
+
+.yellow { color: #bfbf00; }
+
+.yellow-background { background-color: #fafa00; }
+
+span.icon > .fa { cursor: default; }
+a span.icon > .fa { cursor: inherit; }
+
+.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
+.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
+.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
+.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
+.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
+.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
+
+.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
+.conum[data-value] * { color: #fff !important; }
+.conum[data-value] + b { display: none; }
+.conum[data-value]:after { content: attr(data-value); }
+pre .conum[data-value] { position: relative; top: -0.125em; }
+
+b.conum * { color: inherit !important; }
+
+.conum:not([data-value]):empty { display: none; }
+
+h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
+
+.sect1 { padding-bottom: 0; }
+
+#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
+
+.sidebarblock { border-color: #aaa; }
+
+code { -webkit-border-radius: 4px; border-radius: 4px; }
+
+p.tableblock.header { color: #6d6e71; }
+
+.literalblock pre, .listingblock pre { background: #eee; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
+a code { color: inherit; }
+
+/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
+/* Make VUID anchor handles*/
+li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
+
+li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
+
+li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
+
+li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
+
+/* TODO: not quite sure what these two do */
+li > p > a[id^="VUID-"].link:hover { color: black; }
+
+.vuid { color: #4d4d4d; font-family: monospace; }
diff --git a/codegen/vulkan/vulkan-docs-next/config/loadable_html.rb b/codegen/vulkan/vulkan-docs-next/config/loadable_html.rb
new file mode 100644
index 0000000..23b8f28
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/loadable_html.rb
@@ -0,0 +1,11 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+RUBY_ENGINE == 'opal' ? (require 'loadable_html/extension') : (require_relative 'loadable_html/extension')
+
+# All the inline macros we need
+Asciidoctor::Extensions.register do
+    postprocessor MakeHtmlLoadable
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/loadable_html/extension.rb b/codegen/vulkan/vulkan-docs-next/config/loadable_html/extension.rb
new file mode 100644
index 0000000..ce99c51
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/loadable_html/extension.rb
@@ -0,0 +1,72 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# This script adds CSS and markup to indicate the document is (perhaps
+# slowly) loading. It also inserts HTML comments marking where JavaScript
+# and HTML specific to the chunked HTML output target should be inserted.
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+class MakeHtmlLoadable < Extensions::Postprocessor
+
+  def process document, output
+
+    if document.attr? 'stem'
+
+      loading_msg = '<div id="loading_msg" class="hidden" hidden><p>Loading&hellip; please wait.</p></div>'
+      loadable_class = 'class="loadable"'
+
+      loaded_script = '
+<!--ChunkedSearchJSMarker-->
+<style>
+    #loading_msg {
+        width: 100%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 1ex;
+        margin-bottom: 1ex;
+        max-width: 62.5em;
+        position: relative;
+        padding-left: 1.5em;
+        padding-right: 1.5em;
+    }
+    .hidden {display: none;}
+</style>
+<script>
+    function hideElement(e){
+        e.setAttribute("hidden", "");
+        e.classList.add("hidden");
+    }
+
+    function unhideElement(e){
+        e.classList.remove("hidden");
+        e.removeAttribute("hidden");
+    }
+
+    function hideLoadableContent(){
+        unhideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) hideElement(loadable);
+    }
+
+    function unhideLoadableContent(){
+        hideElement( document.getElementById("loading_msg") );
+        for( var loadable of document.getElementsByClassName("loadable") ) unhideElement(loadable);
+    }
+
+    window.addEventListener("load", unhideLoadableContent);
+</script>
+'
+
+      hide_script = '<script>hideLoadableContent();</script>'
+
+      output.sub! /(?=<\/head>)/, loaded_script
+      output.sub! /(<div id="content")/, '\1' + " " + loadable_class + " "
+      output.sub! /(<div id="content".*?>)/, '\1' + hide_script
+      output.sub! /(?=<div id="content")/, loading_msg + "\n" + "<!--ChunkedSearchboxMarker-->\n"
+    end
+    output
+  end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/makeSubmit.py b/codegen/vulkan/vulkan-docs-next/config/makeSubmit.py
new file mode 100755
index 0000000..54273a0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/makeSubmit.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Build Promoter submission package for a specified extension or extensions.
+# This consists of one spec with the extension(s) and all dependencies,
+# one with just the dependencies, and an htmldiff of them.
+#
+# This script lives in config/, but is executed from the parent directory.
+#
+# Usage: makeSubmit extension targets
+
+import argparse, copy, io, os, pdb, re, string, subprocess, sys
+
+# Make a single submission target. Several are needed per document.
+#
+# outDir - where to generate intermediate and final documents
+# extensions - list of extensions to include
+# submitName - base name of final HTML file
+# title - document title
+# target - default 'html'
+def makeTarget(outDir, extensions, submitName, title, target):
+    ws = ' '
+
+    print('make clean_generated')
+    print('make',
+          f'OUTDIR="{outDir}"',
+          'IMAGEOPTS=',
+          f'EXTENSIONS="{ws.join(sorted(extensions))}"',
+          f'APITITLE="{title}"',
+          target)
+    # Rename into submission directory
+    outFile = f'{outDir}/html/{submitName}.html'.replace(' ', '_')
+    print('mv', f'"{outDir}/html/vkspec.html"', f'"{outFile}"')
+
+    return outFile
+
+# Make submission for a list of required extension names
+def makeSubmit(outDir, submitName, required, apideps, target='html'):
+    """outDir - path to output directory for generated specs.
+       submitName - the base document title, usually the name of the
+            extension being submitted unless there is more than one of them.
+       required - a list of one or more extension names comprising the
+            submission.
+       apideps - extension dependencies from which to determine other
+            extensions which must be included."""
+
+    # Convert required list to a set
+    required = set(required)
+
+    extraexts = set()
+    for name in required:
+        for depname in apideps.children(name):
+            if depname not in required:
+                #print(f'Adding {depname} to extraexts')
+                extraexts.add(depname)
+
+    print('echo Required extensions:', ' '.join(sorted(required)))
+    print('echo Dependent extensions:', ' '.join(sorted(extraexts)))
+    print('')
+
+    # Generate shell commands to build the specs
+    print('mkdir -p', outDir)
+
+    # Generate spec with required extensions + dependencies
+    newSpec = makeTarget(outDir, required.union(extraexts), submitName,
+                         submitName, target)
+
+    # Generate base spec with just dependencies
+    baseSpec = makeTarget(outDir, extraexts, 'deps-' + submitName,
+                          '(with only dependencies of ' + submitName + ')',
+                          target)
+
+    # # Reorganize and rename them, and generate the diff spec
+    print('')
+    print('cd scripts/htmldiff')
+    print('./htmldiff',
+          f'"{baseSpec}"',
+          f'"{newSpec}"',
+          '>',
+          f'"{outDir}/html/diff-{submitName}.html"')
+    print('cd ../../')
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-extension', action='append',
+                        default=[],
+                        help='Specify a required extension or extensions to add to targets')
+    parser.add_argument('-title', action='store',
+                        default='vkspec-tmp',
+                        help='Set the document title')
+    parser.add_argument('-outdir', action='store',
+                        default='submit',
+                        help='Path to generated specs')
+    parser.add_argument('-registry', action='store',
+                        default=None,
+                        help='Path to API XML registry file specifying version and extension dependencies')
+    parser.add_argument('-apiname', action='store',
+                        default=None,
+                        help='API name to generate')
+
+    results = parser.parse_args()
+
+    # Look for scripts/extdependency.py
+    # This requires makeSpec to be invoked from the repository root, but we
+    # could derive that path.
+    sys.path.insert(0, 'scripts')
+    from extdependency import ApiDependencies
+
+    apideps = ApiDependencies(results.registry, results.apiname)
+
+    results.outdir = os.path.abspath(results.outdir)
+    makeSubmit(results.outdir, results.title, results.extension, apideps)
diff --git a/codegen/vulkan/vulkan-docs-next/config/makedocinfologo b/codegen/vulkan/vulkan-docs-next/config/makedocinfologo
new file mode 100755
index 0000000..dbf07db
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/makedocinfologo
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Copyright 2014-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# makedocinfologo - generate HTML docinfo file from an SVG image.
+# Usage: makedocinfologo file.svg alt-text > docinfo-header.html
+# Example: makedocinfologo ../images/vulkansc-unscaled.svg "Vulkan SC Logo" > vulkansc/docinfo-header.html
+
+file=$1
+if test ! -r "$file" ; then
+    echo "Cannot read SVG file: $file" > /dev/stderr
+    exit 1
+fi
+#echo "file: $file" > /dev/stderr
+alt=${2-$file}
+#echo "alt: $alt" > /dev/stderr
+
+echo '<div style="text-align: center;">'
+echo -n '    <span class="image"><img src="data:image/svg+xml;base64,'
+base64 $1 | tr -d '\n'
+echo '" alt="'$2'" width="50%">'
+echo '    </span>'
+echo '</div>'
diff --git a/codegen/vulkan/vulkan-docs-next/config/mathtest.adoc b/codegen/vulkan/vulkan-docs-next/config/mathtest.adoc
new file mode 100644
index 0000000..f550b0b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/mathtest.adoc
@@ -0,0 +1,953 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+= Math Test
+
+This file (vkmath.adoc) contains all the latexmath blocks and inlines in the
+Vulkan spec and style guide, so we can see how they are rendered with
+different methods and output formats.
+
+== File chapters/fundamentals.adoc
+
+=== latexmath block 1
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = { c \over { 2^b - 1 } }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 2
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+== File chapters/interfaces.adoc
+
+=== latexmath inline 1
+
+latexmath:[(x,y,z,\frac{1}{w})]
+
+=== latexmath inline 2
+
+latexmath:[\frac{1}{w}]
+
+== File chapters/primsrast.adoc
+
+=== latexmath block 3
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 4
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
+    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 5
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
+    {(1-t) / w_a + t / w_b }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 6
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = -{1 \over 2}\sum_{i=0}^{n-1}
+      x_f^i y_f^{i \oplus 1} -
+      x_f^{i \oplus 1} y_f^i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath inline 3
+
+latexmath:[x_f^i] and latexmath:[y_f^i]
+
+=== latexmath block 7
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 8
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = { a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
+    { {a / w_a} + {b / w_b} + {c / w_c} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+== File chapters/fundamentals.adoc
+
+=== latexmath block 9
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = { c \over { 2^b - 1 } }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 10
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = \max\left( {c \over {2^{b-1} - 1}}, -1.0 \right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+== File chapters/interfaces.adoc
+
+=== latexmath inline 4
+
+latexmath:[(x,y,z,\frac{1}{w})]
+
+=== latexmath inline 5
+
+latexmath:[\frac{1}{w}].
+
+== File chapters/primsrast.adoc
+
+=== latexmath block 11
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+s = {1 \over 2} + { \left( x_p - x_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {1 \over 2} + { \left( y_p - y_f \right) \over \text{size} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 12
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+t = {{( \mathbf{p}_r - \mathbf{p}_a ) \cdot ( \mathbf{p}_b - \mathbf{p}_a )}
+    \over {\| \mathbf{p}_b - \mathbf{p}_a \|^2 }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 13
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = {{ (1-t) {f_a / w_a} + t { f_b / w_b} } \over
+    {(1-t) / w_a + t / w_b }}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 14
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = -{1 \over 2}\sum_{i=0}^{n-1}
+      x_f^i y_f^{i \oplus 1} -
+      x_f^{i \oplus 1} y_f^i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath inline 6
+
+latexmath:[x_f^i] and latexmath:[y_f^i]
+
+=== latexmath block 15
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+a = {{\mathrm{A}(p p_b p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+b = {{\mathrm{A}(p p_a p_c)} \over {\mathrm{A}(p_a p_b p_c)}}, \quad
+c = {{\mathrm{A}(p p_a p_b)} \over {\mathrm{A}(p_a p_b p_c)}},
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 16
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = { a {f_a / w_a} + b {f_b / w_b} + c {f_c / w_c} } \over
+    { {a / w_a} + {b / w_b} + {c / w_c} }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 17
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+f = \sum_{i=1}^{n} a_i f_i
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath inline 7
+
+latexmath:[\sum_{i=1}^{n}a_i = 1].
+
+=== latexmath block 18
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2
+        +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 19
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+m = \max\left( \left| {{\partial z_f} \over {\partial x_f}} \right|,
+               \left| {{\partial z_f} \over {\partial y_f}} \right| \right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 20
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+o =
+\begin{cases}
+    m \times depthBiasSlopeFactor +
+         r \times depthBiasConstantFactor  & depthBiasClamp = 0\ or\ NaN \\
+    \min(m \times depthBiasSlopeFactor +
+         r \times depthBiasConstantFactor,
+         depthBiasClamp)                   & depthBiasClamp > 0  \\
+    \max(m \times depthBiasSlopeFactor +
+         r \times depthBiasConstantFactor,
+         depthBiasClamp)                   & depthBiasClamp < 0  \\
+\end{cases}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+== File chapters/tessellation.adoc
+
+=== latexmath inline 8
+
+latexmath:[\frac{1}{n}, \frac{2}{n}, \ldots, \frac{n-1}{n}]
+
+== File chapters/textures.adoc
+
+=== latexmath block 21
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+N               & = 9  & \text{number of mantissa bits per component} \\
+B               & = 15 & \text{exponent bias} \\
+E_{max}         & = 31 & \text{maximum possible biased exponent value} \\
+sharedexp_{max} & = \frac{(2^N-1)}{2^N} \times 2^{(E_{max}-B)}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 22
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+exp' =
+  \begin{cases}
+    \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1)
+      & \text{for}\  max_{clamped} > 2^{-(B+1)} \\
+    0
+      & \text{for}\  max_{clamped} \leq 2^{-(B+1)}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 23
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+max_{shared} =
+\left \lfloor
+\frac{max_{clamped}}{2^{(exp'-B-N)}}+\frac{1}{2}
+\right \rfloor
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 24
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+exp_{shared} =
+  \begin{cases}
+    exp'   & \text{for}\  0 \leq max_{shared} < 2^N \\
+    exp'+1 & \text{for}\  max_{shared} = 2^N
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 25
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+red_{shared} & =
+    \left \lfloor
+    \frac{red_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
+    \right \rfloor \\
+green_{shared} & =
+    \left \lfloor
+    \frac{green_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
+    \right \rfloor \\
+blue_{shared} & =
+    \left \lfloor
+    \frac{blue_{clamped}}{2^{(exp_{shared}-B-N)}}+ \frac{1}{2}
+    \right \rfloor
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 26
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+D & = 1.0 &
+  \begin{cases}
+    D_{ref} \leq D & \text{for LEQUAL}   \\
+    D_{ref} \geq D & \text{for GEQUAL}   \\
+    D_{ref} < D    & \text{for LESS}     \\
+    D_{ref} > D    & \text{for GREATER}  \\
+    D_{ref} = D    & \text{for EQUAL}    \\
+    D_{ref} \neq D & \text{for NOTEQUAL} \\
+    true           & \text{for ALWAYS}   \\
+    false          & \text{for NEVER}
+  \end{cases} \\
+D & = 0.0 & \text{otherwise}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 27
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+C'_{rgba}[R] & =
+  \begin{cases}
+    C_{rgba}[R] & \text{for RED swizzle}   \\
+    C_{rgba}[G] & \text{for GREEN swizzle} \\
+    C_{rgba}[B] & \text{for BLUE swizzle}  \\
+    C_{rgba}[A] & \text{for ALPHA swizzle} \\
+    0           & \text{for ZERO swizzle}  \\
+    one         & \text{for ONE swizzle} \\
+    C_{rgba}[R] & \text{for IDENTITY swizzle}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 28
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+C_{rgba}[R] & \text{is the RED component} \\
+C_{rgba}[G] & \text{is the GREEN component} \\
+C_{rgba}[B] & \text{is the BLUE component} \\
+C_{rgba}[A] & \text{is the ALPHA component} \\
+one         & = 1.0\text{f}  & \text{for floating point components} \\
+one         & = 1              & \text{for integer components}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 29
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+dPdx_{i_1,j_0} & = dPdx_{i_0,j_0} & = P_{i_1,j_0} - P_{i_0,j_0}  \\
+dPdx_{i_1,j_1} & = dPdx_{i_0,j_1} & = P_{i_1,j_1} - P_{i_0,j_1}  \\
+\\
+dPdy_{i_0,j_1} & = dPdy_{i_0,j_0} & = P_{i_0,j_1} - P_{i_0,j_0}  \\
+dPdy_{i_1,j_1} & = dPdy_{i_1,j_0} & = P_{i_1,j_1} - P_{i_1,j_0}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 30
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+dPdx & =
+  \begin{cases}
+    dPdx_{i_0,j_0} & \text{preferred}\\
+    dPdx_{i_0,j_1}
+  \end{cases} \\
+dPdy & =
+  \begin{cases}
+    dPdy_{i_0,j_0} & \text{preferred}\\
+    dPdy_{i_1,j_0}
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 31
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+s       & = \frac{s}{q},       & \text{for 1D, 2D, or 3D image} \\
+\\
+t       & = \frac{t}{q},       & \text{for 2D or 3D image} \\
+\\
+r       & = \frac{r}{q},       & \text{for 3D image} \\
+\\
+D_{ref} & = \frac{D_{ref}}{q}, & \text{if provided}
+\end{aligned}
++++++++++++++++++++
+
+
+=== latexmath block 32
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+\partial{s}/\partial{x} & = dPdx(s), & \partial{s}/\partial{y} & = dPdy(s), & \text{for 1D, 2D, Cube, or 3D image} \\
+\partial{t}/\partial{x} & = dPdx(t), & \partial{t}/\partial{y} & = dPdy(t), & \text{for 2D, Cube, or 3D image} \\
+\partial{u}/\partial{x} & = dPdx(u), & \partial{u}/\partial{y} & = dPdy(u), & \text{for Cube or 3D image}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 33
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+s_{face} & =
+    \frac{1}{2} \times \frac{s_c}{|r_c|} + \frac{1}{2} \\
+t_{face} & =
+    \frac{1}{2} \times \frac{t_c}{|r_c|} + \frac{1}{2} \\
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 34
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\frac{\partial{s_{face}}}{\partial{x}} &=
+    \frac{\partial}{\partial{x}} \left ( \frac{1}{2} \times \frac{s_{c}}{|r_{c}|}
+    + \frac{1}{2}\right ) \\
+\frac{\partial{s_{face}}}{\partial{x}} &=
+    \frac{1}{2} \times \frac{\partial}{\partial{x}}
+    \left ( \frac{s_{c}}{|r_{c}|}  \right ) \\
+\frac{\partial{s_{face}}}{\partial{x}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{s_c}/\partial{x}
+      -s_c \times {\partial{r_{c}}}/{\partial{x}}}
+    {\left ( r_{c} \right )^2}
+    \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 35
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\frac{\partial{s_{face}}}{\partial{y}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{s_c}/\partial{y}
+      -s_c \times {\partial{r_{c}}}/{\partial{y}}}
+    {\left ( r_{c} \right )^2}
+    \right )\\
+\frac{\partial{t_{face}}}{\partial{x}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+      |r_{c}| \times \partial{t_c}/\partial{x}
+      -t_c \times {\partial{r_{c}}}/{\partial{x}}}
+    {\left ( r_{c} \right )^2}
+    \right ) \\
+\frac{\partial{t_{face}}}{\partial{y}} &=
+    \frac{1}{2} \times
+    \left (
+    \frac{
+       |r_{c}| \times \partial{t_c}/\partial{y}
+      -t_c \times {\partial{r_{c}}}/{\partial{y}}}
+    {\left ( r_{c} \right )^2}
+    \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 36
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\rho_{x} & = \sqrt{ m_{ux} ^{2} + m_{vx} ^{2} + m_{wx} ^{2} } \\
+\rho_{y} & = \sqrt{ m_{uy} ^{2} + m_{vy} ^{2} + m_{wy} ^{2} }
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 37
+
+  {empty}:: [eq]#f~x~# is continuous and monotonically increasing in each of
+     [eq]#m~ux~#, [eq]#m~vx~#, and [eq]#m~wx~#
+  {empty}:: [eq]#f~y~# is continuous and monotonically increasing in each of
+     [eq]#m~uy~#, [eq]#m~vy~#, and [eq]#m~wy~#
+  {empty}:: [eq]#max({vert}m~ux~{vert}, {vert}m~vx~{vert},
+     {vert}m~wx~{vert}) {leq} f~x~ {leq} {vert}m~ux~{vert} {plus}
+     {vert}m~vx~{vert} {plus} {vert}m~wx~{vert}#
+  {empty}:: [eq]#max({vert}m~uy~{vert}, {vert}m~vy~{vert},
+     {vert}m~wy~{vert}) {leq} f~y~ {leq} {vert}m~uy~{vert} {plus}
+     {vert}m~vy~{vert} {plus} {vert}m~wy~{vert}#
+
+=== latexmath block 38
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+N & = \min \left (\left \lceil \frac{\rho_{max}}{\rho_{min}}  \right \rceil ,max_{Aniso} \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 39
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\lambda_{base}(x,y) & =
+  \begin{cases}
+    shaderOp.Lod                                 & \text{(from optional SPIR-V operand)} \\
+    \log_2 \left ( \frac{\rho_{max}}{N} \right ) & \text{otherwise}
+  \end{cases} \\
+\lambda'(x,y)       & = \lambda_{base} + \mathbin{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\
+\lambda             & =
+  \begin{cases}
+    lod_{max}, & \lambda' > lod_{max} \\
+    \lambda',  & lod_{min} \leq \lambda' \leq lod_{max} \\
+    lod_{min}, & \lambda' < lod_{min} \\
+    undefined, & lod_{min} > lod_{max} \\
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 40
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+sampler.bias       & = mipLodBias & \text{(from sampler descriptor)} \\
+shaderOp.bias      & =
+  \begin{cases}
+    Bias & \text{(from optional SPIR-V operand)} \\
+    0    & \text{otherwise}
+  \end{cases} \\
+sampler.lod_{min}  & = minLod & \text{(from sampler descriptor)} \\
+shaderOp.lod_{min} & =
+  \begin{cases}
+    MinLod & \text{(from optional SPIR-V operand)} \\
+    0      & \text{otherwise}
+  \end{cases} \\
+\\
+lod_{min}          & = \max(sampler.lod_{min}, shaderOp.lod_{min}) \\
+lod_{max}          & = maxLod & \text{(from sampler descriptor)}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 41
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+d =
+  \begin{cases}
+    level_{base},     & \lambda \leq \frac{1}{2} \\[.5em]
+    nearest(\lambda), & \lambda > \frac{1}{2},
+                        level_{base} + \lambda \leq
+                        q + \frac{1}{2} \\[.5em]
+    q,                & \lambda > \frac{1}{2},
+                        level_{base} + \lambda > q + \frac{1}{2}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 42
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+nearest(\lambda) & =
+  \begin{cases}
+    \left \lceil level_{base}+\lambda + \frac{1}{2}\right \rceil - 1, &
+        \text{preferred} \\
+    \left \lfloor level_{base}+\lambda + \frac{1}{2}\right \rfloor,   &
+        \text{alternative}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 43
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+d_{hi} & =
+  \begin{cases}
+    q,                                                 & level_{base} + \lambda \geq q \\
+    \left \lfloor level_{base}+\lambda \right \rfloor, & \text{otherwise}
+  \end{cases} \\
+d_{lo} & =
+  \begin{cases}
+    q,        & level_{base} + \lambda \geq q \\
+    d_{hi}+1, & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 44
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+u(x,y) & = s(x,y) \times width_{level} \\
+v(x,y) & =
+  \begin{cases}
+    0                         & \text{for 1D images} \\
+    t(x,y) \times height_{level} & \text{otherwise}
+  \end{cases} \\
+w(x,y) & =
+  \begin{cases}
+    0                         & \text{for 2D or Cube images} \\
+    r(x,y) \times depth_{level}  & \text{otherwise}
+  \end{cases} \\
+\\
+a(x,y) & =
+  \begin{cases}
+    a(x,y)                    & \text{for array images} \\
+    0                         & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 45
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\mathbin{RNE}(a) & =
+  \begin{cases}
+    \mathbin{roundTiesToEven}(a)                  & \text{preferred, from IEEE Std 754-2008 Floating-Point Arithmetic} \\
+    \left \lfloor a + \frac{1}{2} \right \rfloor & \text{alternative}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 46
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i &=
+  \begin{cases}
+    i \bmod size                                & \text{for repeat} \\
+    (size-1) - \mathbin{mirror}
+        ((i \bmod (2 \times size)) - size)      & \text{for mirrored repeat} \\
+    \mathbin{clamp}(i,0,size-1)                  & \text{for clamp to edge} \\
+    \mathbin{clamp}(i,-1,size)                   & \text{for clamp to border} \\
+    \mathbin{clamp}(\mathbin{mirror}(i),0,size-1) & \text{for mirror clamp to edge}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+
+=== latexmath block 47
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+& \mathbin{mirror}(n) =
+  \begin{cases}
+    n      & \text{for}\  n \geq 0 \\
+    -(1+n) & \text{otherwise}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 48
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[R] &= \tau_{i0j1}[level_{base}][comp] \\
+\tau[G] &= \tau_{i1j1}[level_{base}][comp] \\
+\tau[B] &= \tau_{i1j0}[level_{base}][comp] \\
+\tau[A] &= \tau_{i0j0}[level_{base}][comp]
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 49
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level_{base}][comp] &=
+  \begin{cases}
+    \tau[level_{base}][R], & \text{for}\  comp = 0 \\
+    \tau[level_{base}][G], & \text{for}\  comp = 1 \\
+    \tau[level_{base}][B], & \text{for}\  comp = 2 \\
+    \tau[level_{base}][A], & \text{for}\  comp = 3
+  \end{cases}\\
+comp & \,\text{from SPIR-V operand Component}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 50
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level] &=
+  \begin{cases}
+     \tau_{ijk}[level], & \text{for 3D image} \\
+     \tau_{ij}[level],  & \text{for 2D or Cube image} \\
+     \tau_{i}[level],   & \text{for 1D image}
+   \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 51
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{3D}[level] & = (1-\alpha)(1-\beta)(1-\gamma)\tau_{i0j0k0}[level] \\
+          & \, + (\alpha)(1-\beta)(1-\gamma)\tau_{i1j0k0}[level] \\
+          & \, + (1-\alpha)(\beta)(1-\gamma)\tau_{i0j1k0}[level] \\
+          & \, + (\alpha)(\beta)(1-\gamma)\tau_{i1j1k0}[level]   \\
+          & \, + (1-\alpha)(1-\beta)(\gamma)\tau_{i0j0k1}[level] \\
+          & \, + (\alpha)(1-\beta)(\gamma)\tau_{i1j0k1}[level]   \\
+          & \, + (1-\alpha)(\beta)(\gamma)\tau_{i0j1k1}[level]   \\
+          & \, + (\alpha)(\beta)(\gamma)\tau_{i1j1k1}[level]
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 52
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{2D}[level] & = (1-\alpha)(1-\beta)\tau_{i0j0}[level] \\
+          & \, + (\alpha)(1-\beta)\tau_{i1j0}[level] \\
+          & \, + (1-\alpha)(\beta)\tau_{i0j1}[level] \\
+          & \, + (\alpha)(\beta)\tau_{i1j1}[level]
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 53
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{1D}[level] & = (1-\alpha)\tau_{i0}[level] \\
+          & \, + (\alpha)\tau_{i1}[level]
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 54
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level] &=
+  \begin{cases}
+     \tau_{3D}[level], & \text{for 3D image} \\
+     \tau_{2D}[level], & \text{for 2D or Cube image} \\
+     \tau_{1D}[level], & \text{for 1D image}
+   \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 55
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau &=
+  \begin{cases}
+    \tau[d], & \text{for mip mode BASE or NEAREST} \\
+    (1-\delta)\tau[d_{hi}]+\delta\tau[d_{lo}], & \text{for mip mode LINEAR}
+  \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 56
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau_{2Daniso} & =
+     \frac{1}{N}\sum_{i=1}^{N}
+     {\tau_{2D}\left (
+       u \left ( x - \frac{1}{2} + \frac{i}{N+1} , y \right ),
+         \left ( v \left (x-\frac{1}{2}+\frac{i}{N+1} \right ), y
+\right )
+     \right )},
+     & \text{when}\  \rho_{x} > \rho_{y} \\
+\tau_{2Daniso} &=
+     \frac{1}{N}\sum_{i=1}^{N}
+     {\tau_{2D}\left (
+        u \left  ( x, y - \frac{1}{2} + \frac{i}{N+1} \right ),
+          \left ( v \left (x,y-\frac{1}{2}+\frac{i}{N+1} \right )
+\right )
+     \right )},
+     & \text{when}\  \rho_{y} \geq \rho_{x}
+\end{aligned}
+++++++++++++++++++++++++
+
+== File chapters/vertexpostproc.adoc
+
+=== latexmath block 57
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\begin{array}{c}
+-w_c \leq x_c \leq w_c \\
+-w_c \leq y_c \leq w_c \\
+0 \leq z_c \leq w_c
+\end{array}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 58
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(\begin{array}{c}
+x_c \\
+y_c \\
+z_c \\
+w_c
+\end{array}\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath block 59
+
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+\left(
+        \begin{array}{c}
+                x_d \\
+                y_d \\
+                z_d
+        \end{array}
+\right) =
+\left(
+        \begin{array}{c}
+                \frac{x_c}{w_c} \\
+                \frac{y_c}{w_c} \\
+                \frac{z_c}{w_c}
+        \end{array}
+\right)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+=== latexmath inline 12
+
+latexmath:[\frac{k}{2^m - 1}]
+
+== File chapters/VK_IMG_filter_cubic/filter_cubic_texel_filtering.adoc
+
+=== latexmath block 60
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+cinterp(\tau_0, \tau_1, \tau_2, \tau_3, \omega) =
+\frac{1}{2}
+\begin{bmatrix}1 & \omega & \omega^2 & \omega^3 \end{bmatrix}
+\times
+\begin{bmatrix}
+ 0 &  2 &  0 &  0 \\
+-1 &  0 &  1 &  0 \\
+ 2 & -5 &  4 &  1 \\
+-1 &  3 & -3 &  1
+\end{bmatrix}
+\times
+\begin{bmatrix}
+\tau_0 \\
+\tau_1 \\
+\tau_2 \\
+\tau_3
+\end{bmatrix}
+\end{aligned}
+++++++++++++++++++++++++
+
+=== latexmath block 61
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+\tau[level] &=
+  \begin{cases}
+     \tau_{2D}[level], & \text{for 2D image} \\
+     \tau_{1D}[level], & \text{for 1D image}
+   \end{cases}
+\end{aligned}
+++++++++++++++++++++++++
+
+== File chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.adoc
+
+=== latexmath block 62
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+i_{0}  & = \left \lfloor u - \frac{3}{2} \right \rfloor & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
+j_{0}  & = \left \lfloor u - \frac{3}{2} \right \rfloor & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\
+\\
+\alpha & = \mathbin{frac} \left ( u - \frac{1}{2} \right ) \\[1em]
+\beta  & = \mathbin{frac} \left ( v - \frac{1}{2} \right )
+\end{aligned}
+++++++++++++++++++++++++
+
+== File style/writing.adoc
+
+=== latexmath inline 13
+
+latexmath:[[0,1\]]
+
+=== latexmath inline 14
+
+latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
+
+=== latexmath inline 15
+
+latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2.]
+
+=== latexmath block 63
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+c_{RGB} & =
+  \begin{cases}
+    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
+    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+=== latexmath block 64
+
+[latexmath]
++++++++++++++++++++
+V =
+  \begin{cases}
+    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
+    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
+                                            & E = 0,  M \neq 0 \\
+    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
+                                            & 0 < E < 31       \\
+    (-1)^S \times Inf,             & E = 31, M = 0             \\
+    NaN,                           & E = 31, M \neq 0
+  \end{cases}
++++++++++++++++++++
diff --git a/codegen/vulkan/vulkan-docs-next/config/open_listing_block.rb b/codegen/vulkan/vulkan-docs-next/config/open_listing_block.rb
new file mode 100644
index 0000000..1df0efa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/open_listing_block.rb
@@ -0,0 +1,28 @@
+# Copyright 2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# open_listing_block - allows a listing block to masquerade as an open
+# block:
+#
+# [open]
+# ----
+# (block content)
+# ----
+#
+# This allows nesting arbitrary open blocks inside 'refpage' open blocks.
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+Asciidoctor::Extensions.register do
+    block do
+        named :open
+        on_context :listing
+        process do |parent, reader, attrs|
+            wrapper = create_open_block parent, [], {}
+            parse_content wrapper, reader
+            wrapper
+        end
+    end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/optimize-pdf b/codegen/vulkan/vulkan-docs-next/config/optimize-pdf
new file mode 100755
index 0000000..2eb2c02
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/optimize-pdf
@@ -0,0 +1,99 @@
+#!/bin/bash
+
+# Copyright (C) 2014-2016 OpenDevise Inc. and the Asciidoctor Project
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Optimizes and compresses the specified PDF using Ghostscript (gs).
+#
+# [NOTE]
+# You need at least Ghostscript 9.10 in order for page labels defined in the
+# PDF to be preserved (e.g., front matter pages numbered using roman numerals).
+
+if [ -z $1 ]; then
+   echo "Please supply a PDF file to optimize"
+   exit 1
+fi
+
+if [ -z $GS ]; then
+  GS=gs
+fi
+
+FILE=$1
+FILE_BASENAME=${FILE%.pdf}
+FILE_OPTIMIZED=$FILE_BASENAME-optimized.pdf
+FILE_PDFMARK=
+if [ -f "$FILE_BASENAME.pdfmark" ]; then
+  FILE_PDFMARK="$FILE_BASENAME.pdfmark"
+fi
+DOWNSAMPLE_IMAGES=true
+if [ -z $IMAGE_DPI ]; then
+  #IMAGE_DPI=150
+  IMAGE_DPI=300
+fi
+
+# /prepress defaults (see http://ghostscript.com/doc/current/Ps2pdf.htm)
+# -d{Color,Gray,Mono}ImageDownsampleType=/Bicubic
+# -dAutoFilter{Color,Gray}Images=true
+# -dOptimize=true
+# -dEmbedAllFonts=true
+# -dSubsetFonts=true
+# -dColorConversionStrategy=/LeaveColorUnchanged
+# -dUCRandBGInfo=/Preserve
+# -dCompressPages=true
+#
+# other unused settings
+# -r72
+#
+# for info about pdfmarks, see http://milan.kupcevic.net/ghostscript-ps-pdf
+#
+# to convert to grayscale, add the following (though doesn't always work)
+#
+# -dProcessColorModel=/DeviceGray \
+# -dColorConversionStrategy=/Gray \
+
+ERRFILE=$FILE_BASENAME-ERRS.optimize
+"$GS" -q -dNOPAUSE -dBATCH -dSAFER -dNOOUTERSAVE \
+  -sDEVICE=pdfwrite \
+  -dPDFSETTINGS=/prepress \
+  -dPrinted=false \
+  -dCannotEmbedFontPolicy=/Warning \
+  -dDownsampleColorImages=$DOWNSAMPLE_IMAGES \
+  -dColorImageResolution=$IMAGE_DPI \
+  -dDownsampleGrayImages=$DOWNSAMPLE_IMAGES \
+  -dGrayImageResolution=$IMAGE_DPI \
+  -dDownsampleMonoImages=$DOWNSAMPLE_IMAGES \
+  -dMonoImageResolution=$IMAGE_DPI \
+  -sOutputFile="$FILE_OPTIMIZED" \
+  "$FILE" $FILE_PDFMARK 2> $ERRFILE
+
+status=$?
+if test $status -ne 0 ; then
+    echo "$0: $GS return status = $status, aborting"
+elif grep -q Error $ERRFILE ; then
+    echo "$0: $GS succeeded but found Error in $ERRFILE (follows), aborting"
+    echo '---------- Errors from $GS ----------'
+    grep Error $ERRFILE
+    echo '-------------------------------------'
+    status=1
+else
+    rm -f $ERRFILE
+fi
+
+exit $status
diff --git a/codegen/vulkan/vulkan-docs-next/config/quiet-include-failure.rb b/codegen/vulkan/vulkan-docs-next/config/quiet-include-failure.rb
new file mode 100644
index 0000000..cd238ed
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/quiet-include-failure.rb
@@ -0,0 +1,30 @@
+# Copyright 2021-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include Asciidoctor
+
+class ExistsIncludeProcessor < Extensions::IncludeProcessor
+  def handles? target
+    # Only handle files which do not exist
+    # This relies on the full absolute path to every include file being
+    # given, since relative directory information exists only in the
+    # process method.
+
+    not File.exist? target
+  end
+
+  def process doc, reader, target, attributes
+    # If we reach this point, we have been asked to include a file which
+    # does not exist. Do nothing, instead of raising an error.
+
+    reader
+  end
+end
+
+Extensions.register do
+  include_processor ExistsIncludeProcessor
+end
+
diff --git a/codegen/vulkan/vulkan-docs-next/config/rouge-extend-css.rb b/codegen/vulkan/vulkan-docs-next/config/rouge-extend-css.rb
new file mode 100644
index 0000000..21c9970
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/rouge-extend-css.rb
@@ -0,0 +1,60 @@
+# Copyright 2021-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Khronos overrides for Rouge 'github' theme CSS for accessibility.
+# See (note that this code is evolving, works as of asciidoctor 2.0.12):
+# https://github.com/asciidoctor/asciidoctor/blob/master/lib/asciidoctor/syntax_highlighter/rouge.rb
+
+include ::Asciidoctor
+
+class ExtendedRougeSyntaxHighlighter < (Asciidoctor::SyntaxHighlighter.for 'rouge')
+  register_for 'rouge'
+
+  # Insert rouge stylesheet from super
+  # Then replace many 'github' theme colors for accessibility compliance
+  # It would be better to use rouge's stylesheet factory, if it has one
+  def docinfo location, doc, opts
+    overrides = %(<style>
+/* Khronos overrides for Rouge 'github' theme for accessibility */
+/* Basically everything is overridden, but it is unclear how to add a new Rouge theme */
+/* Codelike overrides */
+pre.rouge .cm, pre.rouge .cp, pre.rouge .c1, pre.rouge .cs,
+pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf,
+pre.rouge .gh, pre.rouge .bp {
+  color: #5f5f5f;
+}
+/* Numberlike overrides */
+pre.rouge .mf, pre.rouge .mh, pre.rouge .il, pre.rouge .mi,
+pre.rouge .mo, pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
+  color: #007f7f;
+}
+/* Namelike overrides */
+pre.rouge .ne, pre.rouge .nf, pre.rouge .fm, pre.rouge .nl {
+  color: #5f0000;
+}
+/* Other things ANDI warns about - unsure of their purposes */
+pre.rouge .go, pre.rouge .gu {
+  color: #727272;
+}
+pre.rouge .sr {
+  color: #008512;
+}
+pre.rouge .na, pre.rouge .nb {
+  color: #007f7f;
+}
+pre.rouge .no, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi,
+pre.rouge .nv, pre.rouge .vm {
+  color: #007f7f;
+}
+pre.rouge .w {
+  color: #727272;
+}
+</style>)
+
+    # super can return either <style> or <link> markup, both work
+    %(#{super}
+#{overrides})
+  end
+end
+
diff --git a/codegen/vulkan/vulkan-docs-next/config/spec-macros.rb b/codegen/vulkan/vulkan-docs-next/config/spec-macros.rb
new file mode 100644
index 0000000..2aee417
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/spec-macros.rb
@@ -0,0 +1,40 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+RUBY_ENGINE == 'opal' ? (require 'spec-macros/extension') : (require_relative 'spec-macros/extension')
+
+# All the inline macros we need
+Asciidoctor::Extensions.register do
+    inline_macro CanInlineMacro
+    inline_macro CannotInlineMacro
+    inline_macro MayInlineMacro
+    inline_macro MustInlineMacro
+    inline_macro OptionalInlineMacro
+    inline_macro OptionallyInlineMacro
+    inline_macro RequiredInlineMacro
+    inline_macro ShouldInlineMacro
+    inline_macro ReflinkInlineMacro
+    inline_macro ApiextInlineMacro
+    inline_macro FlinkInlineMacro
+    inline_macro FnameInlineMacro
+    inline_macro FtextInlineMacro
+    inline_macro SnameInlineMacro
+    inline_macro SlinkInlineMacro
+    inline_macro StextInlineMacro
+    inline_macro EnameInlineMacro
+    inline_macro ElinkInlineMacro
+    inline_macro EtextInlineMacro
+    inline_macro PnameInlineMacro
+    inline_macro PtextInlineMacro
+    inline_macro DnameInlineMacro
+    inline_macro DlinkInlineMacro
+    inline_macro TnameInlineMacro
+    inline_macro TlinkInlineMacro
+    inline_macro BasetypeInlineMacro
+    inline_macro CodeInlineMacro
+    inline_macro AttrInlineMacro
+    inline_macro TagInlineMacro
+    inline_macro UndefinedInlineMacro
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/spec-macros/extension.rb b/codegen/vulkan/vulkan-docs-next/config/spec-macros/extension.rb
new file mode 100644
index 0000000..07fdec3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/spec-macros/extension.rb
@@ -0,0 +1,317 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+# This is the generated map of API interfaces in this spec build
+require 'apimap.rb'
+$apiNames = APInames.new
+
+class SpecInlineMacroBase < Extensions::InlineMacroProcessor
+    use_dsl
+    using_format :short
+end
+
+class NormativeInlineMacroBase < SpecInlineMacroBase
+    def text
+        'normative'
+    end
+
+    def process parent, target, attributes
+        create_inline parent, :quoted, '<strong class="purple">' + text + '</strong>'
+    end
+end
+
+class LinkInlineMacroBase < SpecInlineMacroBase
+    # Check if a link macro target exists - overridden by specific macros
+    # Default assumption is that it does exist
+    def exists? target
+      return true
+    end
+
+    def process parent, target, attributes
+      if not exists? target
+        # If the macro target is not in this build, but has an alias,
+        # substitute that alias as the argument.
+        # Otherwise, turn the (attempted) link into text, and complain.
+        if $apiNames.nonexistent.has_key? target
+          oldtarget = target
+          target = $apiNames.nonexistent[oldtarget]
+          msg = 'Rewriting nonexistent link macro target: ' + @name.to_s + ':' + oldtarget + ' to ' + target
+          Asciidoctor::LoggerManager.logger.info msg
+          # Fall through
+        else
+          # Suppress warnings for apiext: macros as this is such a common case
+          if @name.to_s != 'apiext'
+            msg = 'Textifying unknown link macro target: ' + @name.to_s + ':' + target
+            Asciidoctor::LoggerManager.logger.warn msg
+          end
+          return create_inline parent, :quoted, '<code>' + target + '</code>'
+        end
+      end
+
+      if parent.document.attributes['cross-file-links']
+        return Inline.new(parent, :anchor, target, :type => :link, :target => (target + '.html'))
+      else
+        return Inline.new(parent, :anchor, target, :type => :xref, :target => ('#' + target), :attributes => {'fragment' => target, 'refid' => target})
+      end
+    end
+end
+
+class CodeInlineMacroBase < SpecInlineMacroBase
+    def process parent, target, attributes
+      if $apiNames.nonexistent.has_key? target
+        oldtarget = target
+        target = $apiNames.nonexistent[oldtarget]
+        msg = 'Rewriting nonexistent name macro target: ' + @name.to_s + ':' + oldtarget + ' to ' + target
+        Asciidoctor::LoggerManager.logger.info msg
+      end
+      create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
+    end
+end
+
+class StrongInlineMacroBase < SpecInlineMacroBase
+    def process parent, target, attributes
+        create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
+    end
+end
+
+class ParamInlineMacroBase < SpecInlineMacroBase
+    def process parent, target, attributes
+         create_inline parent, :quoted, '<code>' + target.gsub('&#8594;', '-&gt;') + '</code>'
+    end
+end
+
+class CanInlineMacro < NormativeInlineMacroBase
+    named :can
+    match /can:(\w*)/
+
+    def text
+        'can'
+    end
+end
+
+class CannotInlineMacro < NormativeInlineMacroBase
+    named :cannot
+    match /cannot:(\w*)/
+
+    def text
+        'cannot'
+    end
+end
+
+class MayInlineMacro < NormativeInlineMacroBase
+    named :may
+    match /may:(\w*)/
+
+    def text
+        'may'
+    end
+end
+
+class MustInlineMacro < NormativeInlineMacroBase
+    named :must
+    match /must:(\w*)/
+
+    def text
+        'must'
+    end
+end
+
+class OptionalInlineMacro < NormativeInlineMacroBase
+    named :optional
+    match /optional:(\w*)/
+
+    def text
+        'optional'
+    end
+end
+
+class OptionallyInlineMacro < NormativeInlineMacroBase
+    named :optionally
+    match /optionally:(\w*)/
+
+    def text
+        'optionally'
+    end
+end
+
+class RequiredInlineMacro < NormativeInlineMacroBase
+    named :required
+    match /required:(\w*)/
+
+    def text
+        'required'
+    end
+end
+
+class ShouldInlineMacro < NormativeInlineMacroBase
+    named :should
+    match /should:(\w*)/
+
+    def text
+        'should'
+    end
+end
+
+# Generic reference page link to any entity with an anchor/refpage
+class ReflinkInlineMacro < LinkInlineMacroBase
+    named :reflink
+    match /reflink:([-\w]+)/
+end
+
+# Link to an extension appendix/refpage
+class ApiextInlineMacro < LinkInlineMacroBase
+    named :apiext
+    match /apiext:(\w+)/
+
+    def exists? target
+        $apiNames.features.has_key? target
+    end
+end
+
+class FlinkInlineMacro < LinkInlineMacroBase
+    named :flink
+    match /flink:(\w+)/
+
+    def exists? target
+        $apiNames.protos.has_key? target
+    end
+end
+
+class FnameInlineMacro < CodeInlineMacroBase
+    named :fname
+    match /fname:(\w+)/
+end
+
+class FtextInlineMacro < CodeInlineMacroBase
+    named :ftext
+    match /ftext:([\w\*]+)/
+end
+
+class SnameInlineMacro < CodeInlineMacroBase
+    named :sname
+    match /sname:(\w+)/
+end
+
+class SlinkInlineMacro < LinkInlineMacroBase
+    named :slink
+    match /slink:(\w+)/
+
+    def exists? target
+        $apiNames.structs.has_key? target or $apiNames.handles.has_key? target
+    end
+end
+
+class StextInlineMacro < CodeInlineMacroBase
+    named :stext
+    match /stext:([\w\*]+)/
+end
+
+class EnameInlineMacro < CodeInlineMacroBase
+    named :ename
+    match /ename:(\w+)/
+
+    def exists? target
+        $apiNames.consts.has_key? target
+    end
+end
+
+class ElinkInlineMacro < LinkInlineMacroBase
+    named :elink
+    match /elink:(\w+)/
+
+    def exists? target
+        $apiNames.enums.has_key? target
+    end
+end
+
+class EtextInlineMacro < CodeInlineMacroBase
+    named :etext
+    match /etext:([\w\*]+)/
+end
+
+# this does not handle any [] at the moment
+
+class PnameInlineMacro < ParamInlineMacroBase
+    named :pname
+    match /pname:(\w+((\.|&#8594;)\w+)*)/
+end
+
+class PtextInlineMacro < ParamInlineMacroBase
+    named :ptext
+    match /ptext:([\w\*]+((\.|&#8594;)[\w\*]+)*)/
+end
+
+class DnameInlineMacro < CodeInlineMacroBase
+    named :dname
+    match /dname:(\w+)/
+end
+
+class DlinkInlineMacro < LinkInlineMacroBase
+    named :dlink
+    match /dlink:(\w+)/
+
+    def exists? target
+        $apiNames.defines.has_key? target
+    end
+end
+
+class TnameInlineMacro < CodeInlineMacroBase
+    named :tname
+    match /tname:(\w+)/
+end
+
+class TlinkInlineMacro < LinkInlineMacroBase
+    named :tlink
+    match /tlink:(\w+)/
+
+    def exists? target
+        $apiNames.flags.has_key? target or
+            $apiNames.funcpointers.has_key? target or
+            $apiNames.defines.has_key? target
+    end
+end
+
+class BasetypeInlineMacro < LinkInlineMacroBase
+    named :basetype
+    match /basetype:(\w+)/
+
+    def exists? target
+        $apiNames.basetypes.has_key? target
+    end
+end
+
+# This does not include the full range of code: use
+# It allows imbedded periods (field separators) and wildcards if followed by
+# another word, and an ending wildcard.
+
+class CodeInlineMacro < CodeInlineMacroBase
+    named :code
+    match /code:(\w+([.*]\w+)*\**)/
+end
+
+# The tag: and attr: macros are only used in registry.adoc
+
+class TagInlineMacro < StrongInlineMacroBase
+    named :tag
+    match /tag:(\w+)/
+end
+
+class AttrInlineMacro < StrongInlineMacroBase
+    named :attr
+    match /attr:(\w+)/
+end
+
+# Does nothing - just markup that we have considered the use case
+class UndefinedInlineMacro < SpecInlineMacroBase
+    named :undefined
+    match /undefined:/
+
+    def process parent, target, attributes
+        create_inline parent, :quoted, 'undefined'
+    end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/themes/pdf-theme.yml b/codegen/vulkan/vulkan-docs-next/config/themes/pdf-theme.yml
new file mode 100644
index 0000000..5d805d1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/themes/pdf-theme.yml
@@ -0,0 +1,35 @@
+# Copyright 2020-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: MIT
+
+# Vulkan spec PDF stylesheet
+
+extends: default
+
+# The font handling is equivalent to the bundled default-with-fallback-font-theme.yml,
+# but uses a local copy of the M+ 1p Fallback font until asciidoctor-pdf
+# updates theirs. The local copy includes a few more special characters used
+# in the spec.
+font:
+  catalog:
+    merge: true
+    # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols
+    # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font
+    M+ 1p Fallback: mplus1p-regular-fallback.ttf
+    Noto Emoji: GEM_FONTS_DIR/notoemoji-subset.ttf
+  fallbacks: [M+ 1p Fallback, Noto Emoji]
+
+# Add chapter names to the page footer
+footer:
+  recto:
+    right:
+      content: '{chapter-title} | {page-number}'
+  verso:
+    left:
+      content: '{page-number} | {chapter-title}'
+
+# Add a role for VUID tags
+role:
+  vuid:
+    font_family: $literal_font_family
+    font_size: round($base_font_size * 0.85)
+    font_color: 808080
diff --git a/codegen/vulkan/vulkan-docs-next/config/vu-to-json.rb b/codegen/vulkan/vulkan-docs-next/config/vu-to-json.rb
new file mode 100644
index 0000000..86b5ca5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vu-to-json.rb
@@ -0,0 +1,9 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+RUBY_ENGINE == 'opal' ? (require 'vu-to-json/extension') : (require_relative 'vu-to-json/extension')
+
+Extensions.register do
+  treeprocessor ValidUsageToJsonTreeprocessor
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/vu-to-json/extension.rb b/codegen/vulkan/vulkan-docs-next/config/vu-to-json/extension.rb
new file mode 100644
index 0000000..e6b5235
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vu-to-json/extension.rb
@@ -0,0 +1,151 @@
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+module Asciidoctor
+
+require 'json'
+class ValidUsageToJsonTreeprocessor < Extensions::Treeprocessor
+  def process document
+    map = {}
+
+    map['version info'] = {
+      'schema version' => 2,
+      'api version' => document.attr('revnumber'),
+      'comment' => document.attr('revremark'),
+      'date' => document.attr('revdate')
+    }
+
+    map['validation'] = {}
+    
+    parent = ''
+    error_found = false
+
+
+      
+    # Iterate through all blocks and process valid usage blocks
+    # Use find_by so that sub-blocks that this script processes can be skipped
+    document.find_by do |block|
+    
+      # Keep track of all attributes defined throughout the document, as Asciidoctor will not do this automatically.
+      # See https://discuss.asciidoctor.org/asciidoctorj-and-document-attributes-tp5960p6525.html
+      document.playback_attributes(block.attributes)
+      
+      # Track the parent block for each subsequent valid usage block
+      if block.context == :open and block.attributes['refpage']
+        parent = block.attributes['refpage']
+      end
+      
+      # Filter out anything that is not a refpage
+      if block.context == :sidebar && (block.title == "Valid Usage" || block.title == "Valid Usage (Implicit)")
+      
+        # Iterate through all the VU lists in each block
+        block.blocks.each do |list|
+        
+          # Play back list attributes
+          document.playback_attributes(list.attributes)
+          
+          # Iterate through all the items in the block, tracking which extensions are enabled/disabled.
+          list.blocks.each do |item|
+          
+            # Attribute definitions split lists, so no need to play back attributes between list items
+          
+            # Look for converted anchors 
+            match = /<a id=\"(VUID-[^"]+)\"[^>]*><\/a>(.*)/m.match(item.text)
+            
+            if (match != nil)
+              vuid     = match[1]
+              text     = match[2]
+
+              # Remove newlines present in the asciidoctor source
+              text.gsub!("\n", ' ')
+
+              # Append text for all the subbullets
+              text += item.content
+
+              # Strip any excess leading/trailing whitespace
+              text.strip!
+
+              # Generate the table entry
+              entry = {'vuid' => vuid, 'text' => text, 'page' => 'vkspec' }
+
+              # Initialize the database if necessary
+              if map['validation'][parent] == nil
+                map['validation'][parent] = {}
+              end
+
+              # For legacy schema reasons, put everything in "core" entry section
+              entry_section = 'core'
+
+              # Initialize the entry section if necessary
+              if map['validation'][parent][entry_section] == nil
+                map['validation'][parent][entry_section] = []
+              end
+
+              # Check for duplicate entries
+              if map['validation'][parent][entry_section].include? entry
+                error_found = true
+                puts "VU Extraction Treeprocessor: ERROR - Valid Usage statement '#{entry}' is duplicated in the specification with VUID '#{vuid}'."
+              end
+
+              # Add the entry
+              map['validation'][parent][entry_section] << entry
+            else
+              puts "VU Extraction Treeprocessor: WARNING - Valid Usage statement without a VUID found: "
+              puts item.text
+            end
+          end
+        end
+        # This block's sub blocks have been handled through iteration, so return true to avoid the main loop re-processing them
+        true
+      else
+        # This block was not what we were looking for, so let asciidoctor continue iterating through its sub blocks
+        false
+      end
+    end
+
+
+    # Generate the json
+    json = JSON.pretty_generate(map)
+    outfile = document.attr('json_output')
+
+    # Verify the json against the schema, if the required gem is installed
+    begin
+      require 'json-schema'
+
+      # Read the schema in and validate against it
+      schema = IO.read(File.join(File.dirname(__FILE__), 'vu_schema.json'))
+      errors = JSON::Validator.fully_validate(schema, json, :errors_as_objects => true)
+
+      # Output errors if there were any
+      if errors != []
+        error_found = true
+        puts 'VU Extraction JSON Validator: ERROR - Validation of the json schema failed'
+        puts
+        puts 'It is likely that there is an invalid or malformed entry in the specification text,'
+        puts 'see below error messages for details, and use their VUIDs and text to correlate them to their location in the specification.'
+        puts
+
+        errors.each do |error|
+          puts error.to_s
+        end
+      end
+    rescue LoadError
+      puts 'VU Extraction JSON Validator: WARNING - "json-schema" gem missing - skipping verification of json output'
+      # error handling code here
+    end
+
+    # Write the file and exit - no further processing required.
+    IO.write(outfile, json)
+
+    if (error_found)
+      exit! 1
+    end
+    exit! 0
+  end
+end
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/vu-to-json/vu_schema.json b/codegen/vulkan/vulkan-docs-next/config/vu-to-json/vu_schema.json
new file mode 100644
index 0000000..9b97da2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vu-to-json/vu_schema.json
@@ -0,0 +1,69 @@
+{
+        "$schema": "http://json-schema.org/draft-04/schema#",
+        "title": "Command and Structure Validation in Vulkan",
+        "description": "A database of validatable commands and structures in the Vulkan API",
+        "type": "object",
+        "additionalProperties": false,
+        "properties": {
+                "version info": {
+                        "additionalProperties": false,
+                        "properties": { 
+                                "schema version": {"type": "integer", "const": 3},
+                                "api version": {"type": "string"},
+                                "comment": {"type": "string"},
+                                "date": {"type": "string"}
+                        },
+                        "required": [
+                                "schema version",
+                                "api version",
+                                "comment",
+                                "date"
+                        ]
+                },
+                "validation": {
+                        "patternProperties": {
+                                "^[vV]k[A-Z][A-Za-z0-9]+$": {
+                                        "title": "Vulkan Command or Structure",
+                                        "description": "Validation information for a structure or command in the Vulkan API",
+                                        "patternProperties": {
+                                                "^[\\w+!|]+$": {
+                                                        "type": "array",
+                                                        "uniqueItems": true,
+                                                        "minItems": 1,
+                                                        "items":
+                                                        {
+                                                                "title": "Valid Usage Statement",
+                                                                "description": "A valid usage statement",
+                                                                "type": "object",
+                                                                "additionalProperties": false,
+                                                                "properties": {
+                                                                        "vuid": {
+                                                                                "title": "Valid Usage ID",
+                                                                                "description": "String identifier for a valid usage statement, corresponding to an anchor in the spec for that statement",
+                                                                                "type": "string",
+                                                                                "pattern": "VUID-[vV]k[A-Z][A-Za-z0-9]+-[A-Za-z0-9-]*[A-Za-z0-9]"
+                                                                        },
+                                                                        "text": {
+                                                                                "title": "Valid Usage Text",
+                                                                                "description": "HTML formatted string of the valid usage statement text",
+                                                                                "type": "string"
+                                                                        },
+                                                                        "page": {
+                                                                                "title": "Chapter or document name containing VUID",
+                                                                                "description": "String containing a page name in which this VUID lies. Currently unused.",
+                                                                                "type": "string"
+                                                                        }
+                                                                },
+                                                                "required": [
+                                                                        "vuid",
+                                                                        "text",
+                                                                        "page"
+                                                                ]
+                                                        }
+                                                }
+                                        }
+                                }
+                        }
+                }
+        }
+}
diff --git a/codegen/vulkan/vulkan-docs-next/config/vuid-expander.rb b/codegen/vulkan/vulkan-docs-next/config/vuid-expander.rb
new file mode 100644
index 0000000..5e06a71
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vuid-expander.rb
@@ -0,0 +1,29 @@
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+class VUIDExpanderTreeprocessor < Extensions::Treeprocessor
+  def process document
+    # Find all list items inside Valid Usage sidebar blocks
+    document.find_by(context: :sidebar).each do |sidebar|
+      # Get sidebar title from instance variable to avoid side-effects from substitutions
+      if sidebar.title? and sidebar.instance_variable_get(:@title).start_with? "Valid Usage"
+        sidebar.find_by(context: :list_item) do |item|
+            # Get item text directly from instance variable to avoid inline substitutions
+            original_text = item.instance_variable_get(:@text)
+            # Find VUID anchor and append with matching VUID-styled text and line break
+            item.text = original_text.gsub(/(\[\[(VUID-[^\]]*)\]\])/, "\\1 [vuid]#\\2# +\n")
+        end
+      end
+    end
+    nil
+  end
+end
+
+Extensions.register do
+  treeprocessor VUIDExpanderTreeprocessor
+end
diff --git a/codegen/vulkan/vulkan-docs-next/config/vulkan/docinfo-header.html b/codegen/vulkan/vulkan-docs-next/config/vulkan/docinfo-header.html
new file mode 100644
index 0000000..f75277c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vulkan/docinfo-header.html
@@ -0,0 +1,4 @@
+<div style="text-align: center;">
+    <span class="image"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgdmlld0JveD0iMCAwIDExNTAgMzI2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MS40MTQyMTsiPgogICAgPGcgaWQ9IkFydGJvYXJkMSIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NTUxNSwwLDAsMC44ODgyODMsLTQwLjExNjMsLTMwLjIwMTYpIj4KICAgICAgICA8cmVjdCB4PSI0MiIgeT0iMzQiIHdpZHRoPSIxMjA0IiBoZWlnaHQ9IjM2NyIgc3R5bGU9ImZpbGw6bm9uZTsiLz4KICAgICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjA0Njk2LDAsMCwxLjEyNTc3LC00Ni45OTEzLC01MC40MzI1KSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik03MjQuMSwzODUuMDZMNjgzLjUzLDM4NS4wNkM2ODMuNTMsMzg1LjA2IDY4My41MywyODYuMDkgNjgzLjUzLDI1NS40QzY5Ni40OSwyNjIuNjIgNzEzLjYyLDI3NS45NCA3MjQuMSwyODguNzJMNzI0LjEsMzg1LjA2WiIgc3R5bGU9ImZpbGw6cmdiKDE3MiwyMiw0NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTM4MS43NSwzODUuMDZMMzMxLjE3LDM4NS4wNkwyNjUuMTYsMTgxLjAzTDMxMS4xNywxODEuMDNMMzU2LjYxLDMyNC40OEwzNTcuMTgsMzI0LjQ4TDQwMy4xOCwxODEuMDNMNDQ5LjQ3LDE4MS4wM0wzODEuNzUsMzg1LjA2WiIgc3R5bGU9ImZpbGw6cmdiKDE3MiwyMiw0NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNTg1LjUxLDM4NS4wNkw1NDYuOTMsMzg1LjA2TDU0Ni45MywzNjQuNDlMNTQ2LjA4LDM2NC40OUM1NDAuOTMsMzczLjA3IDUzNC4yNywzNzkuMjYgNTI2LjA3LDM4My4wN0M1MTcuODgsMzg2Ljg4IDUwOS41LDM4OC43OCA1MDAuOTIsMzg4Ljc4QzQ5MC4wNiwzODguNzggNDgxLjE2LDM4Ny4zNSA0NzQuMiwzODQuNUM0NjcuMjUsMzgxLjY1IDQ2MS43NywzNzcuNTkgNDU3Ljc3LDM3Mi4zNkM0NTMuNzYsMzY3LjEyIDQ1MC45NSwzNjAuNzQgNDQ5LjMzLDM1My4yMUM0NDcuNzIsMzQ1LjY5IDQ0Ni45MSwzMzcuMzUgNDQ2LjkxLDMyOC4yMUw0NDYuOTEsMjM3LjMzTDQ4Ny40OSwyMzcuMzNMNDg3LjQ5LDMyMC43N0M0ODcuNDksMzMyLjk2IDQ4OS40LDM0Mi4wNiA0OTMuMjEsMzQ4LjA2QzQ5Ny4wMiwzNTQuMDcgNTAzLjc4LDM1Ny4wNiA1MTMuNSwzNTcuMDZDNTI0LjU1LDM1Ny4wNiA1MzIuNTUsMzUzLjc4IDUzNy41LDM0Ny4yQzU0Mi40NiwzNDAuNjIgNTQ0LjkzLDMyOS44MSA1NDQuOTMsMzE0Ljc2TDU0NC45MywyMzcuMzJMNTg1LjUyLDIzNy4zMkw1ODUuNTIsMzg1LjA2TDU4NS41MSwzODUuMDZaIiBzdHlsZT0iZmlsbDpyZ2IoMTcyLDIyLDQ0KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8cGF0aCBkPSJNNzMwLjg0LDI5Ni4xOUw3MzAuNzQsMjkwLjQ3TDc4MS44OSwyMzcuMzNMODI5LjkxLDIzNy4zM0w3NzQuMTgsMjkxLjYyTDgzNi4xOSwzODUuMDZMNzg3LjA0LDM4NS4wNkw3MzAuODQsMjk2LjE5WiIgc3R5bGU9ImZpbGw6cmdiKDE3MiwyMiw0NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik04NDMuNjIsMjgyLjc2Qzg0NC4xOSwyNzMuMjQgODQ2LjU4LDI2NS4zMyA4NTAuNzcsMjU5LjA0Qzg1NC45NiwyNTIuNzUgODYwLjI5LDI0Ny43MSA4NjYuNzcsMjQzLjlDODczLjI1LDI0MC4wOSA4ODAuNTQsMjM3LjM3IDg4OC42NCwyMzUuNzZDODk2LjczLDIzNC4xNCA5MDQuODgsMjMzLjMzIDkxMy4wNywyMzMuMzNDOTIwLjUsMjMzLjMzIDkyOC4wMiwyMzMuODUgOTM1LjY0LDIzNC45Qzk0My4yNywyMzUuOTUgOTUwLjIxLDIzOCA5NTYuNSwyNDEuMDVDOTYyLjc4LDI0NC4xIDk2Ny45MywyNDguMzQgOTcxLjk0LDI1My43NkM5NzUuOTQsMjU5LjE5IDk3Ny45NCwyNjYuMzggOTc3Ljk0LDI3NS4zNEw5NzcuOTQsMzUyLjIxQzk3Ny45NCwzNTguODggOTc4LjMyLDM2NS4yNyA5NzkuMDgsMzcxLjM2Qzk3OS44NCwzNzcuNDYgOTgxLjE4LDM4Mi4wMyA5ODMuMDksMzg1LjA4TDk0MS45NCwzODUuMDhDOTQxLjE4LDM4Mi44IDk0MC41NiwzODAuNDYgOTQwLjA4LDM3OC4wOEM5MzkuNjEsMzc1LjcgOTM5LjI3LDM3My4yOCA5MzkuMDgsMzcwLjc5QzkzMi42LDM3Ny40NyA5MjQuOTcsMzgyLjEzIDkxNi4yMSwzODQuOEM5MDcuNDUsMzg3LjQ2IDg5OC40OSwzODguOCA4ODkuMzUsMzg4LjhDODgyLjMsMzg4LjggODc1LjcyLDM4Ny45NCA4NjkuNjQsMzg2LjIzQzg2My41NCwzODQuNTIgODU4LjIsMzgxLjg1IDg1My42NCwzNzguMjNDODQ5LjA2LDM3NC42MSA4NDUuNDgsMzcwLjA0IDg0Mi45MiwzNjQuNTFDODQwLjM1LDM1OC45OSA4MzkuMDYsMzUyLjQyIDgzOS4wNiwzNDQuOEM4MzkuMDYsMzM2LjQyIDg0MC41NCwzMjkuNTEgODQzLjQ5LDMyNC4wOEM4NDYuNDUsMzE4LjY1IDg1MC4yNSwzMTQuMzIgODU0LjkzLDMxMS4wOEM4NTkuNiwzMDcuODQgODY0LjkzLDMwNS40MSA4NzAuOTMsMzAzLjc5Qzg3Ni45MywzMDIuMTcgODgyLjk4LDMwMC44OCA4ODkuMDcsMjk5LjkzQzg5NS4xNywyOTguOTkgOTAxLjE3LDI5OC4yMiA5MDcuMDgsMjk3LjY1QzkxMi45OSwyOTcuMDggOTE4LjIyLDI5Ni4yMiA5MjIuNzksMjk1LjA4QzkyNy4zNywyOTMuOTMgOTMwLjk4LDI5Mi4yNyA5MzMuNjUsMjkwLjA3QzkzNi4zMiwyODcuODggOTM3LjU2LDI4NC42OSA5MzcuMzcsMjgwLjVDOTM3LjM3LDI3Ni4xMiA5MzYuNjUsMjcyLjY0IDkzNS4yMiwyNzAuMDdDOTMzLjc5LDI2Ny41IDkzMS44OSwyNjUuNSA5MjkuNTEsMjY0LjA3QzkyNy4xMywyNjIuNjQgOTI0LjM3LDI2MS42OSA5MjEuMjIsMjYxLjIxQzkxOC4wNywyNjAuNzMgOTE0LjcsMjYwLjQ5IDkxMS4wOCwyNjAuNDlDOTAzLjA4LDI2MC40OSA4OTYuNzksMjYyLjIgODkyLjIyLDI2NS42NEM4ODcuNjUsMjY5LjA3IDg4NC45OCwyNzQuNzggODg0LjIyLDI4Mi43OUw4NDMuNjIsMjgyLjc5TDg0My42MiwyODIuNzZaTTkzNy4zNSwzMTIuNzdDOTM1LjYzLDMxNC4zIDkzMy40OSwzMTUuNDggOTMwLjkyLDMxNi4zNEM5MjguMzUsMzE3LjIxIDkyNS41OSwzMTcuOTIgOTIyLjYzLDMxOC40OUM5MTkuNjgsMzE5LjA2IDkxNi41OCwzMTkuNTQgOTEzLjM1LDMxOS45MkM5MTAuMTEsMzIwLjMgOTA2Ljg3LDMyMC43NyA5MDMuNjMsMzIxLjM1QzkwMC41OCwzMjEuOTIgODk3LjU4LDMyMi42OSA4OTQuNjMsMzIzLjYzQzg5MS42OCwzMjQuNTkgODg5LjEsMzI1Ljg3IDg4Ni45MSwzMjcuNDlDODg0LjcyLDMyOS4xMSA4ODIuOTYsMzMxLjE2IDg4MS42MiwzMzMuNjNDODgwLjI5LDMzNi4xMSA4NzkuNjIsMzM5LjI1IDg3OS42MiwzNDMuMDZDODc5LjYyLDM0Ni42OCA4ODAuMjksMzQ5LjczIDg4MS42MiwzNTIuMkM4ODIuOTYsMzU0LjY4IDg4NC43NywzNTYuNjMgODg3LjA1LDM1OC4wNkM4ODkuMzQsMzU5LjQ5IDg5MiwzNjAuNDkgODk1LjA1LDM2MS4wNkM4OTguMSwzNjEuNjMgOTAxLjI0LDM2MS45MSA5MDQuNDgsMzYxLjkxQzkxMi40OCwzNjEuOTEgOTE4LjY4LDM2MC41OCA5MjMuMDYsMzU3LjkyQzkyNy40NCwzNTUuMjUgOTMwLjY5LDM1Mi4wNiA5MzIuNzcsMzQ4LjM0QzkzNC44NiwzNDQuNjMgOTM2LjE2LDM0MC44NyA5MzYuNjIsMzM3LjA2QzkzNy4xLDMzMy4yNSA5MzcuMzMsMzMwLjIgOTM3LjM0LDMyNy45Mkw5MzcuMzQsMzEyLjc3TDkzNy4zNSwzMTIuNzdaIiBzdHlsZT0iZmlsbDpyZ2IoMTcyLDIyLDQ0KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgPHBhdGggZD0iTTEwMDQuMjEsMjM3LjMzTDEwNDIuOCwyMzcuMzNMMTA0Mi44LDI1Ny45TDEwNDMuNjUsMjU3LjlDMTA0OC43OSwyNDkuMzMgMTA1NS40NiwyNDMuMDkgMTA2My42NSwyMzkuMTlDMTA3MS44NCwyMzUuMjggMTA4MC4yMywyMzMuMzMgMTA4OC43OSwyMzMuMzNDMTA5OS42NiwyMzMuMzMgMTEwOC41NiwyMzQuODEgMTExNS41MiwyMzcuNzZDMTEyMi40NywyNDAuNzIgMTEyNy45NCwyNDQuODEgMTEzMS45NSwyNTAuMDVDMTEzNS45NSwyNTUuMjkgMTEzOC43NiwyNjEuNjcgMTE0MC4zOCwyNjkuMTlDMTE0MiwyNzYuNzIgMTE0Mi44MSwyODUuMDUgMTE0Mi44MSwyOTQuMkwxMTQyLjgxLDM4NS4wN0wxMTAyLjI0LDM4NS4wN0wxMTAyLjI0LDMwMS42M0MxMTAyLjI0LDI4OS40MyAxMTAwLjMzLDI4MC4zNCAxMDk2LjUzLDI3NC4zNEMxMDkyLjcxLDI2OC4zNCAxMDg1Ljk1LDI2NS4zNCAxMDc2LjIzLDI2NS4zNEMxMDY1LjE4LDI2NS4zNCAxMDU3LjE5LDI2OC42MyAxMDUyLjIzLDI3NS4yQzEwNDcuMjcsMjgxLjc2IDEwNDQuOCwyOTIuNTggMTA0NC44LDMwNy42M0wxMDQ0LjgsMzg1LjA3TDEwMDQuMjIsMzg1LjA3TDEwMDQuMjIsMjM3LjMzTDEwMDQuMjEsMjM3LjMzWiIgc3R5bGU9ImZpbGw6cmdiKDE3MiwyMiw0NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik02MTIuMzcsMjExLjg0TDYxMi4zNywzODUuMDdMNjUyLjk1LDM4NS4wN0w2NTIuOTUsMjM0LjIxQzYzOS45MywyMjYuMjMgNjI2LjM2LDIxOC43NCA2MTIuMzcsMjExLjg0WiIgc3R5bGU9ImZpbGw6cmdiKDE3MiwyMiw0NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOTguNDMsMjE5LjIxQzIyMS45NSwxNTAuMzIgMzYyLjU4LDEyNS4wNSA1MTIuNTgsMTYyLjc4QzYwMi41NSwxODUuNCA2NzYuMDcsMjI5LjI4IDcyNC4wOSwyNzIuNjdDNzAyLjMsMjE1LjEyIDU5Ni42NSwxMzMuMDggNDUxLjE4LDEwNC45NkMyODYuNyw3My4xNiAxMjQuNDcsMTAxLjExIDEwNC4zOSwxNzQuMUM4OS44OSwyMjYuODMgMTUzLjU3LDI4OC42IDI1Mi4wNSwzMzAuODRDMjA3LjgxLDI5NS4wMiAxODYuMjksMjU0Ljc4IDE5OC40MywyMTkuMjFaIiBzdHlsZT0iZmlsbDpyZ2IoMTcyLDIyLDQ0KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgPHBhdGggZD0iTTcyNC4xNiwyNDcuNjJMNzI0LjE2LDE4MS4wM0w2ODMuNTcsMTgxLjAzTDY4My41NywyMDEuMjVDNzAwLjg4LDIxNi43MSA3MTQuNjEsMjMyLjQ1IDcyNC4xNiwyNDcuNjJaIiBzdHlsZT0iZmlsbDpyZ2IoMTcyLDIyLDQ0KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNDY5NiwwLDAsMS4xMjU3NywtNDYuOTkxMywtNTAuNDMyNSkiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTIxNC45OCwzNjMuNDNDMTIxNC45OCwzNzUuNjkgMTIwNS4zNSwzODUuMzIgMTE5Mi44MywzODUuMzJDMTE4MC40MywzODUuMzIgMTE3MC41NCwzNzUuNjkgMTE3MC41NCwzNjMuNDNDMTE3MC41NCwzNTEuNDMgMTE4MC40MywzNDEuOCAxMTkyLjgzLDM0MS44QzEyMDUuMzUsMzQxLjggMTIxNC45OCwzNTEuNDMgMTIxNC45OCwzNjMuNDNaTTExNzYuMDgsMzYzLjQzQzExNzYuMDgsMzczLjA2IDExODMuMiwzODAuNyAxMTkyLjk2LDM4MC43QzEyMDIuNDUsMzgwLjcgMTIwOS40NCwzNzMuMDUgMTIwOS40NCwzNjMuNTZDMTIwOS40NCwzNTMuOTMgMTIwMi40NSwzNDYuMTUgMTE5Mi44MiwzNDYuMTVDMTE4My4yLDM0Ni4xNiAxMTc2LjA4LDM1My45NCAxMTc2LjA4LDM2My40M1pNMTE4OS4zOSwzNzQuNzdMMTE4NC4zOCwzNzQuNzdMMTE4NC4zOCwzNTMuMTRDMTE4Ni4zNiwzNTIuNzQgMTE4OS4xMywzNTIuNDggMTE5Mi42OSwzNTIuNDhDMTE5Ni43OCwzNTIuNDggMTE5OC42MiwzNTMuMTQgMTIwMC4yMSwzNTQuMDZDMTIwMS40LDM1NC45OCAxMjAyLjMyLDM1Ni43IDEyMDIuMzIsMzU4LjgxQzEyMDIuMzIsMzYxLjE4IDEyMDAuNDcsMzYzLjAzIDExOTcuODQsMzYzLjgyTDExOTcuODQsMzY0LjA4QzExOTkuOTUsMzY0Ljg3IDEyMDEuMTQsMzY2LjQ1IDEyMDEuOCwzNjkuMzVDMTIwMi40NiwzNzIuNjUgMTIwMi44NSwzNzMuOTcgMTIwMy4zOCwzNzQuNzZMMTE5Ny45NywzNzQuNzZDMTE5Ny4zMSwzNzMuOTcgMTE5Ni45MiwzNzEuOTkgMTE5Ni4yNiwzNjkuNDlDMTE5NS44NiwzNjcuMTIgMTE5NC41NSwzNjYuMDYgMTE5MS43OCwzNjYuMDZMMTE4OS40MSwzNjYuMDZMMTE4OS40MSwzNzQuNzdMMTE4OS4zOSwzNzQuNzdaTTExODkuNTMsMzYyLjUxTDExOTEuOSwzNjIuNTFDMTE5NC42NywzNjIuNTEgMTE5Ni45MSwzNjEuNTkgMTE5Ni45MSwzNTkuMzRDMTE5Ni45MSwzNTcuMzYgMTE5NS40NiwzNTYuMDQgMTE5Mi4yOSwzNTYuMDRDMTE5MC45NywzNTYuMDQgMTE5MC4wNSwzNTYuMTcgMTE4OS41MiwzNTYuM0wxMTg5LjUyLDM2Mi41MUwxMTg5LjUzLDM2Mi41MVoiIHN0eWxlPSJmaWxsOnJnYigxNzIsMjIsNDQpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==" alt="Vulkan Logo" width="50%">
+    </span>
+</div>
diff --git a/codegen/vulkan/vulkan-docs-next/config/vulkansc/docinfo-header.html b/codegen/vulkan/vulkan-docs-next/config/vulkansc/docinfo-header.html
new file mode 100644
index 0000000..b100b1c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/config/vulkansc/docinfo-header.html
@@ -0,0 +1,4 @@
+<div style="text-align: center;">
+    <span class="image"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIyLjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZ1bGthbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDE3MTUgNTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNzE1IDUwMCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZmlsbD0iI0E0MUUyMiIgZD0iTTcyNC4xLDM4NS4xaC00MC42YzAsMCwwLTk5LDAtMTI5LjdjMTMsNy4yLDMwLjEsMjAuNSw0MC42LDMzLjNWMzg1LjF6Ii8+Cgk8Zz4KCQk8cGF0aCBmaWxsPSIjQTQxRTIyIiBkPSJNMzgxLjgsMzg1LjFoLTUwLjZsLTY2LTIwNGg0Nmw0NS40LDE0My41aDAuNmw0Ni0xNDMuNWg0Ni4zTDM4MS44LDM4NS4xeiIvPgoJCTxwYXRoIGZpbGw9IiNBNDFFMjIiIGQ9Ik01ODUuNSwzODUuMWgtMzguNnYtMjAuNmgtMC45Yy01LjEsOC42LTExLjgsMTQuOC0yMCwxOC42Yy04LjIsMy44LTE2LjYsNS43LTI1LjEsNS43CgkJCWMtMTAuOSwwLTE5LjgtMS40LTI2LjctNC4zYy03LTIuOS0xMi40LTYuOS0xNi40LTEyLjFjLTQtNS4yLTYuOC0xMS42LTguNC0xOS4xYy0xLjYtNy41LTIuNC0xNS45LTIuNC0yNXYtOTAuOWg0MC42djgzLjQKCQkJYzAsMTIuMiwxLjksMjEuMyw1LjcsMjcuM2MzLjgsNiwxMC42LDksMjAuMyw5YzExLDAsMTkuMS0zLjMsMjQtOS45YzUtNi42LDcuNC0xNy40LDcuNC0zMi40di03Ny40aDQwLjZWMzg1LjF6Ii8+Cgk8L2c+Cgk8cG9seWdvbiBmaWxsPSIjQTQxRTIyIiBwb2ludHM9IjczMC44LDI5Ni4yIDczMC43LDI5MC41IDc4MS45LDIzNy4zIDgyOS45LDIzNy4zIDc3NC4yLDI5MS42IDgzNi4yLDM4NS4xIDc4NywzODUuMSAJIi8+Cgk8cGF0aCBmaWxsPSIjQTQxRTIyIiBkPSJNODQzLjYsMjgyLjhjMC42LTkuNSwzLTE3LjQsNy4yLTIzLjdjNC4yLTYuMyw5LjUtMTEuMywxNi0xNS4xYzYuNS0zLjgsMTMuOC02LjUsMjEuOS04LjEKCQljOC4xLTEuNiwxNi4yLTIuNCwyNC40LTIuNGM3LjQsMCwxNSwwLjUsMjIuNiwxLjZjNy42LDEuMSwxNC42LDMuMSwyMC45LDYuMWM2LjMsMy4xLDExLjQsNy4zLDE1LjQsMTIuN2M0LDUuNCw2LDEyLjYsNiwyMS42djc2LjkKCQljMCw2LjcsMC40LDEzLjEsMS4xLDE5LjFjMC44LDYuMSwyLjEsMTAuNyw0LDEzLjdoLTQxLjJjLTAuOC0yLjMtMS40LTQuNi0xLjktN2MtMC41LTIuNC0wLjgtNC44LTEtNy4zCgkJYy02LjUsNi43LTE0LjEsMTEuMy0yMi45LDE0Yy04LjgsMi43LTE3LjcsNC0yNi45LDRjLTcsMC0xMy42LTAuOS0xOS43LTIuNmMtNi4xLTEuNy0xMS40LTQuNC0xNi04Yy00LjYtMy42LTguMi04LjItMTAuNy0xMy43CgkJYy0yLjYtNS41LTMuOS0xMi4xLTMuOS0xOS43YzAtOC40LDEuNS0xNS4zLDQuNC0yMC43YzMtNS40LDYuOC05LjgsMTEuNC0xM2M0LjctMy4yLDEwLTUuNywxNi03LjNjNi0xLjYsMTItMi45LDE4LjEtMy45CgkJYzYuMS0wLjksMTIuMS0xLjcsMTgtMi4zYzUuOS0wLjYsMTEuMS0xLjQsMTUuNy0yLjZjNC42LTEuMSw4LjItMi44LDEwLjktNWMyLjctMi4yLDMuOS01LjQsMy43LTkuNmMwLTQuNC0wLjctNy45LTIuMi0xMC40CgkJYy0xLjQtMi42LTMuMy00LjYtNS43LTZjLTIuNC0xLjQtNS4xLTIuNC04LjMtMi45Yy0zLjEtMC41LTYuNS0wLjctMTAuMS0wLjdjLTgsMC0xNC4zLDEuNy0xOC45LDUuMWMtNC42LDMuNC03LjIsOS4xLTgsMTcuMQoJCUg4NDMuNnogTTkzNy40LDMxMi44Yy0xLjcsMS41LTMuOSwyLjctNi40LDMuNmMtMi42LDAuOS01LjMsMS42LTguMywyLjJjLTMsMC42LTYsMS05LjMsMS40Yy0zLjIsMC40LTYuNSwwLjktOS43LDEuNAoJCWMtMywwLjYtNiwxLjMtOSwyLjNjLTMsMS01LjUsMi4yLTcuNywzLjljLTIuMiwxLjYtNCwzLjctNS4zLDYuMWMtMS4zLDIuNS0yLDUuNi0yLDkuNGMwLDMuNiwwLjcsNi43LDIsOS4xCgkJYzEuMywyLjUsMy4xLDQuNCw1LjQsNS45YzIuMywxLjQsNSwyLjQsOCwzYzMuMSwwLjYsNi4yLDAuOSw5LjQsMC45YzgsMCwxNC4yLTEuMywxOC42LTRjNC40LTIuNyw3LjYtNS45LDkuNy05LjYKCQljMi4xLTMuNywzLjQtNy41LDMuOS0xMS4zYzAuNS0zLjgsMC43LTYuOSwwLjctOS4xVjMxMi44eiIvPgoJPHBhdGggZmlsbD0iI0E0MUUyMiIgZD0iTTEwMDQuMiwyMzcuM2gzOC42djIwLjZoMC45YzUuMS04LjYsMTEuOC0xNC44LDIwLTE4LjdjOC4yLTMuOSwxNi42LTUuOSwyNS4xLTUuOQoJCWMxMC45LDAsMTkuOCwxLjUsMjYuNyw0LjRjNywzLDEyLjQsNy4xLDE2LjQsMTIuM2M0LDUuMiw2LjgsMTEuNiw4LjQsMTkuMWMxLjYsNy41LDIuNCwxNS45LDIuNCwyNXY5MC45aC00MC42di04My40CgkJYzAtMTIuMi0xLjktMjEuMy01LjctMjcuM2MtMy44LTYtMTAuNi05LTIwLjMtOWMtMTEsMC0xOSwzLjMtMjQsOS45Yy01LDYuNi03LjQsMTcuNC03LjQsMzIuNHY3Ny40aC00MC42VjIzNy4zeiIvPgoJPGc+CgkJPHBhdGggZmlsbD0iI0E0MUUyMiIgZD0iTTYxMi40LDIxMS44djE3My4yaDQwLjZWMjM0LjJDNjM5LjksMjI2LjIsNjI2LjQsMjE4LjcsNjEyLjQsMjExLjh6Ii8+Cgk8L2c+Cgk8cGF0aCBmaWxsPSIjQTQxRTIyIiBkPSJNMTk4LjQsMjE5LjJjMjMuNS02OC45LDE2NC4yLTk0LjIsMzE0LjEtNTYuNGM5MCwyMi42LDE2My41LDY2LjUsMjExLjUsMTA5LjkKCQlDNzAyLjMsMjE1LjEsNTk2LjcsMTMzLjEsNDUxLjIsMTA1Yy0xNjQuNS0zMS44LTMyNi43LTMuOS0zNDYuOCw2OS4xYy0xNC41LDUyLjcsNDkuMiwxMTQuNSwxNDcuNywxNTYuNwoJCUMyMDcuOCwyOTUsMTg2LjMsMjU0LjgsMTk4LjQsMjE5LjJ6Ii8+Cgk8Zz4KCQk8cGF0aCBmaWxsPSIjQTQxRTIyIiBkPSJNNzI0LjIsMjQ3LjZWMTgxaC00MC42djIwLjJDNzAwLjksMjE2LjcsNzE0LjYsMjMyLjQsNzI0LjIsMjQ3LjZ6Ii8+Cgk8L2c+CjwvZz4KPHBhdGggZmlsbD0iI0E0MUUyMiIgZD0iTTExODYuMSwxNzcuN2MtMy41LDAtNi40LDIuOS02LjQsNi40djE5OC43YzAsMy41LDIuOSw2LjQsNi40LDYuNGMzLjUsMCw2LjQtMi45LDYuNC02LjRWMTg0LjIKCUMxMTkyLjUsMTgwLjYsMTE4OS43LDE3Ny43LDExODYuMSwxNzcuN3oiLz4KPHBhdGggZmlsbD0iI0E0MUUyMiIgZD0iTTE1MzIuOCwxODEuMWgtMjg3LjVjLTcuOSwwLTE0LjQsNi40LTE0LjQsMTQuNHYxMTUuNGMwLDI1LjgsMTUuNyw0OC44LDM5LjUsNTguNGMzMC4zLDEyLjMsODIsMjgsMTA0LDM0LjUKCWM2LjgsMiwxNC4xLDIsMjEsMC4xYzIzLjEtNi42LDc4LjUtMjIuOCwxMTEuMS0zNS4yYzI0LjUtOS4zLDQwLjYtMzIuNyw0MC42LTU4LjloMC4xVjE5NS41CglDMTU0Ny4zLDE4Ny42LDE1NDAuOSwxODEuMSwxNTMyLjgsMTgxLjF6IE0xMzczLjIsMzIzLjFjLTMuMSw1LjMtNy4yLDkuNi0xMi4zLDEyLjhjLTUsMy4yLTEwLjksNS42LTE3LjQsNi45CgljLTYuNSwxLjQtMTMuMiwyLjEtMjAuMSwyLjFjLTcuMywwLTE0LjEtMC45LTIwLjUtMi41Yy02LjUtMS42LTEyLjItNC4zLTE3LjItNy45Yy01LTMuNi05LTguMi0xMi0xMy44Yy0zLTUuNi00LjUtMTIuNC00LjUtMjAuNAoJaDMyLjZ2MC4yYzAuMyw3LjQsMi43LDEyLjQsNi44LDE1LjJjNC4yLDIuOCw5LjgsNC4yLDE2LjgsNC4yYzIuNSwwLDQuOS0wLjIsNy4zLTAuN2MyLjQtMC40LDQuNS0xLjIsNi40LTIuMWMxLjgtMSwzLjQtMi40LDQuNi00CgljMS4yLTEuNiwxLjctMy42LDEuNy02YzAtMi44LTEuMS01LTMuMS02LjhjLTItMS43LTQuNy0zLjMtOC4xLTQuNmMtMy40LTEuMy03LjItMi41LTExLjQtMy40Yy00LjMtMS04LjctMi4xLTEzLjItMy40CgljLTQuNC0xLjMtOC45LTIuOC0xMy4yLTQuNmMtNC40LTEuNy04LjItNC0xMS44LTYuN2MtMy40LTIuOC02LjItNi4xLTguNC0xMC4yYy0yLjEtNC4xLTMuMi04LjktMy4yLTE0LjZjMC02LjcsMS41LTEyLjYsNC42LTE3LjQKCWMzLjEtNC44LDcuMS04LjgsMTItMTEuOHMxMC40LTUuMiwxNi41LTYuNmM2LjEtMS40LDEyLTIuMSwxNy44LTIuMWM2LjIsMCwxMi4zLDAuNywxOC4zLDIuNGM2LDEuNiwxMS4zLDQsMTYsNy4zCgljNC43LDMuMyw4LjQsNy41LDExLjMsMTIuNWMyLjksNSw0LjQsMTEuMSw0LjQsMTguMWgtMzIuNWMwLjEtMi44LTAuNC01LjEtMS42LTcuMWMtMS4yLTEuOS0yLjctMy40LTQuNi00LjYKCWMtMS45LTEuMi00LjEtMi02LjUtMi42Yy0yLjUtMC41LTQuOS0wLjctNy40LTAuN2MtMS43LDAtMy41LDAuMi01LjQsMC41Yy0xLjgsMC4zLTMuNSwxLTUsMS43Yy0xLjUsMC45LTIuOCwxLjktMy43LDMuMgoJYy0xLDEuNC0xLjUsMy4xLTEuNSw1LjFjMCwyLjUsMS4xLDQuNCwzLjEsNmMyLDEuNSw0LjgsMi45LDguMiw0LjFjMy40LDEuMiw3LjMsMi4yLDExLjYsMy4xYzQuMywxLDguOCwyLDEzLjIsMy4zCgljNC42LDEuMyw5LDIuOCwxMy4yLDQuNmM0LjMsMS44LDguMSw0LjEsMTEuNSw2LjhjMy40LDIuOCw2LjEsNi4xLDguMiwxMC4yYzIuMSw0LjEsMy4xLDguOSwzLjEsMTQuNAoJQzEzNzcuOCwzMTEsMTM3Ni4zLDMxNy42LDEzNzMuMiwzMjMuMXogTTE0NjcuOCwyNDhjLTQuNS0zLjMtMTAuMi00LjktMTcuMS00LjljLTUuMiwwLTkuNywxLjEtMTMuNCwzLjFjLTMuNiwyLjEtNi42LDQuOS05LDguNAoJYy0yLjQsMy41LTQuMSw3LjUtNSwxMS45Yy0xLjEsNC40LTEuNiw5LTEuNiwxMy43YzAsNC43LDAuNSw5LjIsMS42LDEzLjdjMS4xLDQuNCwyLjgsOC40LDUsMTEuOWMyLjQsMy41LDUuMyw2LjMsOSw4LjQKCWMzLjYsMi4xLDguMSwzLjEsMTMuNCwzLjFjNy43LDAsMTMuNy0yLDE4LTYuMWM0LjMtNC4xLDYuNi05LjcsNy4zLTE3aDMyLjVjLTAuNCw4LTIuMiwxNS4zLTUuMiwyMS42Yy0zLDYuMy03LjEsMTEuOC0xMi4xLDE2LjEKCWMtNSw0LjQtMTAuOSw3LjctMTcuNiw5LjljLTYuNywyLjItMTQuMSwzLjQtMjIsMy40Yy05LjQsMC0xOC4xLTEuNy0yNS44LTVjLTcuNy0zLjQtMTQuMi04LTE5LjctMTMuOWMtNS40LTUuOS05LjYtMTIuNy0xMi41LTIwLjYKCWMtMi45LTcuOS00LjQtMTYuMy00LjQtMjUuNHMxLjUtMTcuNSw0LjQtMjUuNGMyLjktNy45LDcuMS0xNC43LDEyLjUtMjAuNmM1LjQtNS45LDEyLTEwLjUsMTkuNy0xMy45YzcuNy0zLjQsMTYuMi01LDI1LjgtNQoJYzYuNywwLDEzLjUsMS4xLDIwLjIsMy4xYzYuNywyLjEsMTIuNyw1LjEsMTguMSw5LjJjNS4zLDQuMSw5LjcsOSwxMy4yLDE0LjljMy40LDUuOSw1LjIsMTIuNiw1LjYsMjBoLTMyLjZ2LTAuMQoJQzE0NzQuOSwyNTYuMSwxNDcyLjMsMjUxLjMsMTQ2Ny44LDI0OHoiLz4KPGcgaWQ9IlRNXzJfIj4KCTxwYXRoIGZpbGw9IiNBNDFFMjIiIGQ9Ik0xNTg2LjIsMTg2LjhoLTcuNXYxOS42aC02LjZ2LTE5LjZoLTcuNXYtNS42aDIxLjZMMTU4Ni4yLDE4Ni44TDE1ODYuMiwxODYuOHoiLz4KCTxwYXRoIGZpbGw9IiNBNDFFMjIiIGQ9Ik0xNTg5LjEsMTgxLjJoOS43bDQuMywxNi44aDAuMWw0LjMtMTYuOGg5Ljd2MjUuMmgtNi4xdi0xOS4yaC0wLjFsLTUuMywxOS4yaC01bC01LjMtMTkuMmgtMC4xdjE5LjJoLTYuMQoJCVYxODEuMkwxNTg5LjEsMTgxLjJ6Ii8+CjwvZz4KPGc+Cgk8cGF0aCBmaWxsPSIjQTQxRTIyIiBkPSJNMTE1OSwxOTguNWMwLDMuMS0wLjgsNi4xLTIuNCw4LjhzLTMuNyw0LjktNi40LDYuNGMtMi43LDEuNi01LjYsMi4zLTguOCwyLjNjLTMuMSwwLTYtMC44LTguOC0yLjMKCQljLTIuNy0xLjYtNC45LTMuNy02LjQtNi40Yy0xLjYtMi43LTIuNC01LjYtMi40LTguOGMwLTMuMSwwLjgtNiwyLjQtOC44YzEuNi0yLjcsMy43LTQuOSw2LjQtNi40YzIuNy0xLjYsNS42LTIuMyw4LjgtMi4zCgkJYzMuMSwwLDYuMSwwLjgsOC44LDIuM2MyLjcsMS42LDQuOSwzLjcsNi40LDYuNEMxMTU4LjIsMTkyLjQsMTE1OSwxOTUuMywxMTU5LDE5OC41eiBNMTE1NS42LDE5OC41YzAtMy45LTEuNC03LjItNC4xLTEwCgkJYy0yLjgtMi44LTYuMS00LjEtMTAtNC4xYy0zLjksMC03LjIsMS40LTEwLDQuMWMtMi44LDIuOC00LjEsNi4xLTQuMSwxMHMxLjQsNy4yLDQuMSwxMGMyLjgsMi44LDYuMSw0LjEsMTAsNC4xCgkJYzMuOSwwLDcuMi0xLjQsMTAtNC4xQzExNTQuMiwyMDUuNywxMTU1LjYsMjAyLjQsMTE1NS42LDE5OC41eiBNMTEzMy41LDE4OS4xaDguNGMyLjQsMCw0LjEsMC41LDUuMiwxLjRjMS4xLDEsMS42LDIuMiwxLjYsMy45CgkJYzAsMS4zLTAuNCwyLjMtMS4yLDMuM2MtMC44LDAuOS0yLjEsMS42LTMuOCwyYzAuNywwLjMsMS4yLDAuNiwxLjYsMC45YzAuNSwwLjQsMSwxLjEsMS41LDEuOWMwLDAuMSwxLDEuOSwzLDUuNGgtNS41CgkJYy0xLjgtMy42LTMtNS43LTMuNi02LjRjLTAuNi0wLjctMS4yLTEtMS44LTFjLTAuMSwwLTAuMywwLTAuNiwwLjF2Ny40aC00LjdMMTEzMy41LDE4OS4xTDExMzMuNSwxODkuMXogTTExMzguMSwxOTdoMgoJCWMxLjMsMCwyLjMtMC4yLDIuOS0wLjdjMC42LTAuNCwwLjgtMSwwLjgtMS43YzAtMC43LTAuMy0xLjMtMC44LTEuN2MtMC41LTAuNC0xLjQtMC43LTIuNy0wLjdoLTIuMkwxMTM4LjEsMTk3TDExMzguMSwxOTd6Ii8+CjwvZz4KPC9zdmc+Cg==" alt="Vulkan SC Logo" width="50%">
+    </span>
+</div>
diff --git a/codegen/vulkan/vulkan-docs-next/gen-script-docs.sh b/codegen/vulkan/vulkan-docs-next/gen-script-docs.sh
new file mode 100755
index 0000000..37a504e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/gen-script-docs.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+# Copyright 2019-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Generate documentation for the python scripts in this repo, using pdoc3:
+# https://pdoc3.github.io/pdoc/
+#
+# Output is under $(OUTDIR)/python-docs
+
+set -e
+
+# Pipe in some paths. We will convert them to module names and document them.
+pathsToDocs() {
+    grep -v "test_" | \
+    grep -v "__init__.py" | \
+    sed -e 's/[.]py//' -e 's:/:.:g' | \
+    xargs --verbose pdoc3 --html --force --output-dir $1
+}
+
+# Main body of script
+(
+    cd $(dirname $0)
+    # Needed to complete the build - cannot import genRef.py without it.
+    make pyapi
+
+    SPECDIR=$(pwd)
+    OUTDIR=$(pwd)/gen/out/python-docs
+    INDEX=$OUTDIR/index.html
+    mkdir -p $OUTDIR
+    cp scripts/__init__.py.docs scripts/__init__.py
+    export PYTHONPATH=${SPECDIR}/scripts
+    (
+        # # scripts under specification
+        cd $SPECDIR/scripts
+        ls *.py
+
+        # Generate the index files
+        # echo "scripts"
+        echo "scripts.spec_tools"
+
+    ) | pathsToDocs $OUTDIR
+
+    # Generate a simple index file, since generating one with pdoc3 chokes on the Retired directory.
+    echo "<html><body><h1>Python modules</h2><ul>" > $INDEX
+    (
+        cd $SPECDIR/scripts
+        ls *.py
+    ) | while read -r fn; do
+        MODNAME=$(echo $fn | sed -r  's/([a-zA-Z_]+)([.]py)?/\1/')
+        if [ -f $OUTDIR/$MODNAME.html ]; then
+            # Only make non-dead links
+            echo "<li><a href=$MODNAME.html>$MODNAME</a></li>" >> $INDEX
+        fi
+    done
+    echo "<li><a href=spec_tools/index.html>spec_tools</a></li>" >> $INDEX
+    echo "</ul></body></html>" >> $INDEX
+
+    # Move index files to a more useful place
+    rm -rf $OUTDIR/spec_tools
+    mv $OUTDIR/scripts/spec_tools $OUTDIR/spec_tools
+    # delete duplicate generated files
+    rm -rf $OUTDIR/scripts
+
+    rm -f scripts/__init__.py
+)
diff --git a/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg b/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg
new file mode 100644
index 0000000..f58a57d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg
@@ -0,0 +1,696 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   id="svg2"
+   xml:space="preserve"
+   width="690"
+   height="400"
+   viewBox="32 80 690 400"><metadata
+     id="metadata8"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs6"><linearGradient
+       id="linearGradient14225"><stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop14227" /><stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop14229" /></linearGradient><marker
+       style="overflow:visible"
+       id="marker10521"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path10523" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10431"
+       style="overflow:visible"><path
+         id="path10433"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="marker9980"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9982" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9848"
+       style="overflow:visible"><path
+         id="path9850"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="marker9520"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9522" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9422"
+       style="overflow:visible"><path
+         id="path9424"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9412"
+       style="overflow:visible"><path
+         id="path9414"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="Arrow1Send"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path8951" /></marker><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath404"><path
+         d="M 1.4305e-5,0 960.00001,0 l 0,540 L 1.4305e-5,540 Z"
+         id="path402"
+         style="clip-rule:evenodd" /></clipPath><linearGradient
+       xlink:href="#linearGradient14225"
+       id="linearGradient14233"
+       x1="532"
+       y1="350"
+       x2="592"
+       y2="350"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-50,-70.000014)" /><marker
+       style="overflow:visible"
+       id="marker9980-1"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9982-1" /></marker></defs><rect
+     y="199.99998"
+     x="42"
+     height="160"
+     width="520"
+     id="rect10661"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="100.1"
+     x="572"
+     height="79.900002"
+     width="140"
+     id="rect10415"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="332"
+     height="110"
+     width="30"
+     id="rect8500-7"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 342,145 0,75 -5,0 10,10 10,-10 -5,0 0,-75 210,0 0,5 10,-10 -10,-10 0,5 -250,0 0,10 z"
+     id="path14627" /><rect
+     y="90"
+     x="192"
+     height="100"
+     width="120"
+     id="rect9622"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+     id="path9624"
+     d="m 312,140 -50,-50 0,30 -70,0 0,40 70,0 0,30 50,-50"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 72,230 0,-60 110,0 0,-5 10,10 -10,10 0,-5 -10,0 0,50 -10,0 0,-50 -50,0 0,50 -10,0 0,-50 -20,0 0,50 -10,0"
+     id="path14625" /><rect
+     y="229.99998"
+     x="62"
+     height="110"
+     width="30"
+     id="rect8498"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="92"
+     height="110"
+     width="30"
+     id="rect8500"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="122"
+     height="110"
+     width="30"
+     id="rect8502"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="152"
+     height="110"
+     width="30"
+     id="rect8504"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="182"
+     height="110"
+     width="30"
+     id="rect8506"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="212"
+     height="110"
+     width="30"
+     id="rect8508"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="242"
+     height="110"
+     width="30"
+     id="rect8510"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="272"
+     height="110"
+     width="30"
+     id="rect8512"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="302"
+     height="110"
+     width="30"
+     id="rect8498-2"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     ry="0"
+     y="229.99998"
+     x="362"
+     height="110"
+     width="30"
+     id="rect8502-0"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="392"
+     height="110"
+     width="30"
+     id="rect8504-9"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="422"
+     height="110"
+     width="30"
+     id="rect8506-3"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="229.99998"
+     x="452"
+     height="110"
+     width="30"
+     id="rect8508-6"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient14233);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     d="m 480,227.99999 0,2 0,112 30,0 4,0 30,0 0,-114 -30,0 -4,0 -30,0 z m 4,4 26,0 0,106 -26,0 0,-106 z m 30,0 26,0 0,106 -26,0 0,-106 z"
+     id="rect8510-0" /><text
+     id="text8569"
+     y="329.9996"
+     x="77.007317"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="76.907318"
+       id="tspan8571">0</tspan></text>
+<text
+     id="text8577"
+     y="329.9996"
+     x="106.87183"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="106.77182"
+       id="tspan8579">1</tspan></text>
+<text
+     id="text8581"
+     y="329.9996"
+     x="137.20508"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="137.10507"
+       id="tspan8583">2</tspan></text>
+<text
+     id="text8585"
+     y="329.9996"
+     x="167.03296"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="166.93295"
+       id="tspan8587">3</tspan></text>
+<text
+     id="text8589"
+     y="329.9996"
+     x="197.05859"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="196.95859"
+       id="tspan8591">4</tspan></text>
+<text
+     id="text8593"
+     y="329.9996"
+     x="227.08057"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="226.98056"
+       id="tspan8595">5</tspan></text>
+<text
+     id="text8597"
+     y="329.9996"
+     x="256.95239"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="256.85239"
+       id="tspan8599">6</tspan></text>
+<text
+     id="text8601"
+     y="329.9996"
+     x="287.0293"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="286.92929"
+       id="tspan8603">7</tspan></text>
+<text
+     id="text8605"
+     y="329.9996"
+     x="317.00732"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="316.90732"
+       id="tspan8607">8</tspan></text>
+<text
+     id="text8609"
+     y="329.9996"
+     x="347.05859"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="346.95859"
+       id="tspan8611">9</tspan></text>
+<text
+     id="text8613"
+     y="329.9996"
+     x="376.67773"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="376.57773"
+       id="tspan8615">.</tspan></text>
+<text
+     id="text8617"
+     y="329.9996"
+     x="406.87183"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="329.9996"
+       x="406.77182"
+       id="tspan8619">.</tspan></text>
+<text
+     id="text8621"
+     y="329.9996"
+     x="436.93042"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="329.9996"
+       x="436.83041"
+       id="tspan8623">.</tspan></text>
+<text
+     id="text8625"
+     y="329.9996"
+     x="466.78027"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="329.9996"
+       x="466.6803"
+       id="tspan8627">.</tspan></text>
+<text
+     id="text8629"
+     y="329.9996"
+     x="496.60083"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="329.9996"
+       x="496.50085"
+       id="tspan8631">.</tspan></text>
+<text
+     id="text8633"
+     y="329.9996"
+     x="526.83521"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="329.9996"
+       x="526.73523"
+       id="tspan8635">.</tspan></text>
+<text
+     id="text8871"
+     y="219.99998"
+     x="247.57275"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="219.99998"
+       x="247.47275"
+       id="tspan8873">Dpb slots</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
+     x="167.56763"
+     y="270"
+     id="text14174-3"><tspan
+       id="tspan14176-4"
+       x="167.46762"
+       y="270"
+       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;">Valid picture</tspan><tspan
+       x="167.46762"
+       y="301.25"
+       id="tspan14178-0"
+       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;">references</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="167.56763"
+     y="270"
+     id="text14174"><tspan
+       id="tspan14176"
+       x="167.46762"
+       y="270"
+       style="text-align:center;text-anchor:middle">Valid picture</tspan><tspan
+       x="167.46762"
+       y="301.25"
+       id="tspan14178"
+       style="text-align:center;text-anchor:middle">references</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
+     x="406.57883"
+     y="269.7695"
+     id="text14180-3"><tspan
+       id="tspan14182-9"
+       x="406.47882"
+       y="269.7695">Unused picture</tspan><tspan
+       x="406.47882"
+       y="301.0195"
+       id="tspan14184-1">references</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="406.57886"
+     y="269.7695"
+     id="text14180"><tspan
+       id="tspan14182"
+       x="406.47885"
+       y="269.7695">Unused picture</tspan><tspan
+       x="406.47885"
+       y="301.0195"
+       id="tspan14184">references</tspan></text>
+<g
+     transform="matrix(1.3333333,0,0,-1.3333333,-212.33581,674.35391)"
+     id="g398"><g
+       clip-path="url(#clipPath404)"
+       id="g400" /></g><text
+     id="text8573"
+     y="460"
+     x="142"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="460"
+       x="142"
+       id="tspan8575" /></text>
+<rect
+     y="380"
+     x="62"
+     height="30"
+     width="30"
+     id="rect8920"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="380"
+     x="92"
+     height="30"
+     width="30"
+     id="rect8922"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+     id="path8926"
+     d="m 77,379.99999 0,-32"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9422)" /><path
+     id="path8928"
+     d="m 107,379.99999 0,-32"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)" /><path
+     id="path8930"
+     d="m 137,379.99999 0,-10 30,0 0,-22"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9412)" /><rect
+     y="380"
+     x="122"
+     height="30"
+     width="30"
+     id="rect8924"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     y="380"
+     x="532.00012"
+     height="30"
+     width="30"
+     id="rect9510"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+     id="path9512"
+     d="m 547,379.99999 0,-10 -200,0 0,-22"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9520)" /><text
+     id="text9614"
+     y="401.5242"
+     x="295.31128"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="401.5242"
+       x="295.31128"
+       id="tspan9616">VkVideoReferenceSlotsKHRs</tspan></text>
+<text
+     id="text9626"
+     y="149.32007"
+     x="247.53848"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="149.32007"
+       x="247.43848"
+       id="tspan9628">Decode</tspan></text>
+<text
+     id="text9964"
+     y="388"
+     x="486.00012"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="388"
+       x="485.90012"
+       id="tspan9966">slotIndex</tspan></text>
+<text
+     id="text9968"
+     y="260"
+     x="222"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="260"
+       x="222"
+       id="tspan9970" /></text>
+<path
+     id="path9972"
+     d="m 192,434.99998 -115,0 0,-16"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980)" /><text
+     id="text10056"
+     y="452.80588"
+     x="117.51691"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     xml:space="preserve"><tspan
+       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       y="452.80588"
+       x="117.4169"
+       id="tspan10058">pReferenceSlots</tspan></text>
+<text
+     id="text10411"
+     y="710.146"
+     x="-323.39304"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     transform="matrix(0,-1,1,0,0,0)"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="710.146"
+       x="-323.49304"
+       id="tspan10413">dstPictureResource</tspan></text>
+<text
+     id="text10417"
+     y="131.32198"
+     x="642.00842"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="letter-spacing:0px"
+       y="131.32198"
+       x="641.90845"
+       id="tspan10419">Decoded</tspan><tspan
+       style="letter-spacing:0px"
+       id="tspan10421"
+       y="162.57198"
+       x="641.90845">image</tspan></text>
+<path
+     id="path10513"
+     d="m 562,395 30,0 0,-206"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker10521)" /><text
+     id="text10657"
+     y="583.05688"
+     x="-289.40112"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     transform="matrix(0,-1,1,0,0,0)"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="583.05688"
+       x="-289.5011"
+       id="tspan10659">pPictureResource</tspan></text>
+<text
+     id="text10706"
+     y="245.99998"
+     x="606"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       y="245.99998"
+       x="606"
+       id="tspan10708">Only if</tspan><tspan
+       id="tspan10756"
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       y="264.75"
+       x="606">the same</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10710"
+       y="283.5"
+       x="606">picture</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10712"
+       y="302.25"
+       x="606">resource</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10714"
+       y="321"
+       x="606">is used</tspan><tspan
+       id="tspan10762"
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       y="339.75"
+       x="606">for the</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10716"
+       y="358.5"
+       x="606">decode</tspan><tspan
+       id="tspan10760"
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       y="377.25"
+       x="606">Dpb and</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10718"
+       y="396"
+       x="606">output</tspan><tspan
+       style="font-style:italic;font-size:15px;letter-spacing:0px"
+       id="tspan10720"
+       y="414.75"
+       x="606">image</tspan></text>
+<path
+     id="path10722"
+     d="m 592,210 20,19.99999"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:0" /><rect
+     ry="0"
+     y="229.99998"
+     x="602"
+     height="192"
+     width="79"
+     id="rect10758"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect14235"
+     width="240"
+     height="30"
+     x="192"
+     y="420" /><text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="312.18799"
+     y="441.52405"
+     id="text14237"><tspan
+       id="tspan14239"
+       x="312.08798"
+       y="441.52405"
+       style="font-size:17.5px;text-align:center;text-anchor:middle">VkVideoDecodeInfoKHR</tspan></text>
+<text
+     id="text10056-1"
+     y="452.80588"
+     x="527.51691"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-size:17.5px;letter-spacing:0px"
+       y="452.80588"
+       x="527.41687"
+       id="tspan10058-3">pSetupReferenceSlot</tspan></text>
+<path
+     id="path9972-0"
+     d="m 432,434.99998 115,0 0,-16"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980-1)" /><path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker10521)"
+     d="m 312,450 0,20 380,0 0,-282"
+     id="path14623" /><path
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 182,100 0,-5 10,10 -10,10 0,-5 -20,0 0,-10 z"
+     id="path14629" /><g
+     transform="translate(-1.3165542,0)"
+     id="g10096"><path
+       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z"
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="path392" /><path
+       d="m 163.44609,94.146902 c 0,5.919998 -27.69334,10.719988 -61.84,10.719988 -34.153338,0 -61.839998,-4.79999 -61.839998,-10.719988"
+       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
+       id="path394" /><path
+       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z"
+       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
+       id="path396" /><text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="101.2219"
+       y="130.51297"
+       id="text10060"><tspan
+         style="letter-spacing:0px"
+         id="tspan10062"
+         x="101.1219"
+         y="130.51297">Bitstream</tspan></text>
+</g></svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg b/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg
new file mode 100644
index 0000000..f2b7d22
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg
@@ -0,0 +1,593 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   viewBox="32 80 690 400"
+   height="400"
+   width="690"
+   xml:space="preserve"
+   id="svg2"
+   version="1.1"><metadata
+     id="metadata8"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs6"><linearGradient
+       id="linearGradient14225"><stop
+         id="stop14227"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" /><stop
+         id="stop14229"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" /></linearGradient><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10521"
+       style="overflow:visible"><path
+         id="path10523"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="marker10431"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path10433" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9980"
+       style="overflow:visible"><path
+         id="path9982"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="marker9848"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9850" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9520"
+       style="overflow:visible"><path
+         id="path9522"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><marker
+       style="overflow:visible"
+       id="marker9422"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9424" /></marker><marker
+       style="overflow:visible"
+       id="marker9412"
+       refX="0"
+       refY="0"
+       orient="auto"><path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         id="path9414" /></marker><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Send"
+       style="overflow:visible"><path
+         id="path8951"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker><clipPath
+       id="clipPath404"
+       clipPathUnits="userSpaceOnUse"><path
+         style="clip-rule:evenodd"
+         id="path402"
+         d="M 1.4305e-5,0 960.00001,0 l 0,540 L 1.4305e-5,540 Z" /></clipPath><linearGradient
+       gradientTransform="translate(-50,-70.000014)"
+       gradientUnits="userSpaceOnUse"
+       y2="350"
+       x2="592"
+       y1="350"
+       x1="532"
+       id="linearGradient14233"
+       xlink:href="#linearGradient14225" /><marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9980-1"
+       style="overflow:visible"><path
+         id="path9982-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)" /></marker></defs><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect10661"
+     width="520"
+     height="160"
+     x="42"
+     y="199.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect10415"
+     width="140"
+     height="79.900002"
+     x="572"
+     y="100.1" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8500-7"
+     width="30"
+     height="110"
+     x="332"
+     y="229.99998" /><path
+     id="path14627"
+     d="m 562,145 0,5 10,-10 -10,-10 0,5 -250,0 0,10 z"
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect9622"
+     width="120"
+     height="100"
+     x="192"
+     y="90" /><path
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 312,140 -50,-50 0,30 -70,0 0,40 70,0 0,30 50,-50"
+     id="path9624" /><path
+     id="path14625"
+     d="m 72,230 0,-60 110,0 0,-5 10,10 -10,10 0,-5 -10,0 0,50 -10,0 0,-50 -50,0 0,50 -10,0 0,-50 -20,0 0,50 -10,0"
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8498"
+     width="30"
+     height="110"
+     x="62"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8500"
+     width="30"
+     height="110"
+     x="92"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8502"
+     width="30"
+     height="110"
+     x="122"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8504"
+     width="30"
+     height="110"
+     x="152"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8506"
+     width="30"
+     height="110"
+     x="182"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8508"
+     width="30"
+     height="110"
+     x="212"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8510"
+     width="30"
+     height="110"
+     x="242"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8512"
+     width="30"
+     height="110"
+     x="272"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8498-2"
+     width="30"
+     height="110"
+     x="302"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8502-0"
+     width="30"
+     height="110"
+     x="362"
+     y="229.99998"
+     ry="0" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8504-9"
+     width="30"
+     height="110"
+     x="392"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8506-3"
+     width="30"
+     height="110"
+     x="422"
+     y="229.99998" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8508-6"
+     width="30"
+     height="110"
+     x="452"
+     y="229.99998" /><path
+     id="rect8510-0"
+     d="m 480,227.99999 0,2 0,112 30,0 4,0 30,0 0,-114 -30,0 -4,0 -30,0 z m 4,4 26,0 0,106 -26,0 0,-106 z m 30,0 26,0 0,106 -26,0 0,-106 z"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient14233);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="77.007317"
+     y="329.9996"
+     id="text8569"><tspan
+       id="tspan8571"
+       x="76.907318"
+       y="329.9996">0</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="106.87183"
+     y="329.9996"
+     id="text8577"><tspan
+       id="tspan8579"
+       x="106.77182"
+       y="329.9996">1</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="137.20508"
+     y="329.9996"
+     id="text8581"><tspan
+       id="tspan8583"
+       x="137.10507"
+       y="329.9996">2</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="167.03296"
+     y="329.9996"
+     id="text8585"><tspan
+       id="tspan8587"
+       x="166.93295"
+       y="329.9996">3</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="197.05859"
+     y="329.9996"
+     id="text8589"><tspan
+       id="tspan8591"
+       x="196.95859"
+       y="329.9996">4</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="227.08057"
+     y="329.9996"
+     id="text8593"><tspan
+       id="tspan8595"
+       x="226.98056"
+       y="329.9996">5</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="256.95239"
+     y="329.9996"
+     id="text8597"><tspan
+       id="tspan8599"
+       x="256.85239"
+       y="329.9996">6</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="287.0293"
+     y="329.9996"
+     id="text8601"><tspan
+       id="tspan8603"
+       x="286.92929"
+       y="329.9996">7</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="317.00732"
+     y="329.9996"
+     id="text8605"><tspan
+       id="tspan8607"
+       x="316.90732"
+       y="329.9996">8</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="347.05859"
+     y="329.9996"
+     id="text8609"><tspan
+       id="tspan8611"
+       x="346.95859"
+       y="329.9996">9</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="376.67773"
+     y="329.9996"
+     id="text8613"><tspan
+       id="tspan8615"
+       x="376.57773"
+       y="329.9996">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="406.87183"
+     y="329.9996"
+     id="text8617"><tspan
+       id="tspan8619"
+       x="406.77182"
+       y="329.9996">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="436.93042"
+     y="329.9996"
+     id="text8621"><tspan
+       id="tspan8623"
+       x="436.83041"
+       y="329.9996"
+       style="letter-spacing:0px">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="466.78027"
+     y="329.9996"
+     id="text8625"><tspan
+       id="tspan8627"
+       x="466.6803"
+       y="329.9996"
+       style="letter-spacing:0px">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="496.60083"
+     y="329.9996"
+     id="text8629"><tspan
+       id="tspan8631"
+       x="496.50085"
+       y="329.9996"
+       style="letter-spacing:0px">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="526.83521"
+     y="329.9996"
+     id="text8633"><tspan
+       id="tspan8635"
+       x="526.73523"
+       y="329.9996"
+       style="letter-spacing:0px">.</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="247.57275"
+     y="219.99998"
+     id="text8871"><tspan
+       id="tspan8873"
+       x="247.47275"
+       y="219.99998"
+       style="font-size:17.5px;letter-spacing:0px">Dpb slots</tspan></text>
+<text
+     id="text14174-3"
+     y="270"
+     x="167.56763"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#b3b3b3;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
+     xml:space="preserve"><tspan
+       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;"
+       y="270"
+       x="167.46762"
+       id="tspan14176-4">Valid picture</tspan><tspan
+       style="text-align:center;text-anchor:middle;stroke:#b3b3b3;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:round;"
+       id="tspan14178-0"
+       y="301.25"
+       x="167.46762">references</tspan></text>
+<text
+     id="text14174"
+     y="270"
+     x="167.56763"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:-0.2px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="text-align:center;text-anchor:middle"
+       y="270"
+       x="167.46762"
+       id="tspan14176">Valid picture</tspan><tspan
+       style="text-align:center;text-anchor:middle"
+       id="tspan14178"
+       y="301.25"
+       x="167.46762">references</tspan></text>
+<text
+     id="text14180-3"
+     y="269.7695"
+     x="406.57883"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
+     xml:space="preserve"><tspan
+       y="269.7695"
+       x="406.47882"
+       id="tspan14182-9">Unused picture</tspan><tspan
+       id="tspan14184-1"
+       y="301.0195"
+       x="406.47882">references</tspan></text>
+<text
+     id="text14180"
+     y="269.7695"
+     x="406.57886"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="269.7695"
+       x="406.47885"
+       id="tspan14182">Unused picture</tspan><tspan
+       id="tspan14184"
+       y="301.0195"
+       x="406.47885">references</tspan></text>
+<g
+     id="g398"
+     transform="matrix(1.3333333,0,0,-1.3333333,-212.33581,674.35391)"><g
+       id="g400"
+       clip-path="url(#clipPath404)" /></g><text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="142"
+     y="460"
+     id="text8573"><tspan
+       id="tspan8575"
+       x="142"
+       y="460" /></text>
+<rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8920"
+     width="30"
+     height="30"
+     x="62"
+     y="380" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8922"
+     width="30"
+     height="30"
+     x="92"
+     y="380" /><path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9422)"
+     d="m 77,379.99999 0,-32"
+     id="path8926" /><path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
+     d="m 107,379.99999 0,-32"
+     id="path8928" /><path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9412)"
+     d="m 137,379.99999 0,-10 30,0 0,-22"
+     id="path8930" /><rect
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     id="rect8924"
+     width="30"
+     height="30"
+     x="122"
+     y="380" /><text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="295.31128"
+     y="401.5242"
+     id="text9614"><tspan
+       id="tspan9616"
+       x="295.31128"
+       y="401.5242"
+       style="font-size:17.5px;letter-spacing:0px">VkVideoReferenceSlotsKHRs</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="247.53848"
+     y="149.32007"
+     id="text9626"><tspan
+       id="tspan9628"
+       x="247.43848"
+       y="149.32007"
+       style="letter-spacing:0px">Decode</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="222"
+     y="260"
+     id="text9968"><tspan
+       id="tspan9970"
+       x="222"
+       y="260" /></text>
+<path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9980)"
+     d="m 192,434.99998 -115,0 0,-16"
+     id="path9972" /><text
+     xml:space="preserve"
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+     x="117.51691"
+     y="452.32742"
+     id="text10056"><tspan
+       id="tspan10058"
+       x="117.4169"
+       y="452.32742"
+       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:middle;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate">pReferenceSlots</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="519.72882"
+     y="452.32742"
+     id="text10411"><tspan
+       id="tspan10413"
+       x="519.62885"
+       y="452.32742"
+       style="font-size:17.5px;letter-spacing:0px">dstPictureResource</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="642.00842"
+     y="131.32198"
+     id="text10417"><tspan
+       id="tspan10419"
+       x="641.90845"
+       y="131.32198"
+       style="letter-spacing:0px">Decoded</tspan><tspan
+       x="641.90845"
+       y="162.57198"
+       id="tspan10421"
+       style="letter-spacing:0px">image</tspan></text>
+<rect
+     y="420"
+     x="192"
+     height="30"
+     width="240"
+     id="rect14235"
+     style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><text
+     id="text14237"
+     y="441.52405"
+     x="312.18799"
+     style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       style="font-size:17.5px;text-align:center;text-anchor:middle"
+       y="441.52405"
+       x="312.08798"
+       id="tspan14239">VkVideoDecodeInfoKHR</tspan></text>
+<path
+     id="path14623"
+     d="m 432,435 210,0 0,-247"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker10521)" /><path
+     id="path14629"
+     d="m 182,100 0,-5 10,10 -10,10 0,-5 -20,0 0,-10 z"
+     style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><g
+     id="g10096"
+     transform="translate(-1.3165542,0)"><path
+       id="path392"
+       style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z" /><path
+       id="path394"
+       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
+       d="m 163.44609,94.146902 c 0,5.919998 -27.69334,10.719988 -61.84,10.719988 -34.153338,0 -61.839998,-4.79999 -61.839998,-10.719988" /><path
+       id="path396"
+       style="fill:none;stroke:#000000;stroke-width:1.27999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
+       d="m 39.766092,94.146902 c 0,-5.92 27.68666,-10.72 61.839998,-10.72 34.14666,0 61.84,4.8 61.84,10.72 l 0,42.879988 c 0,5.92 -27.69334,10.72 -61.84,10.72 -34.153338,0 -61.839998,-4.8 -61.839998,-10.72 z" /><text
+       id="text10060"
+       y="130.51297"
+       x="101.2219"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="130.51297"
+         x="101.1219"
+         id="tspan10062"
+         style="letter-spacing:0px">Bitstream</tspan></text>
+</g></svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/README.adoc b/codegen/vulkan/vulkan-docs-next/images/README.adoc
new file mode 100644
index 0000000..481403e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/README.adoc
@@ -0,0 +1,46 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Diagrams
+
+Diagrams in this folder have been created with Inkscape, using a restricted
+color palette (white, black, 50% gray and pure red), one choice of dotted
+vs. solid lines, and only two text sizes (10 and 12) using the generic
+"sans serif" font family.
+
+Size 10 fonts should only be used for incidental text for labelling in the
+middle of the diagram as an identifying mark (e.g. an example sample point);
+prefer size 12 fonts wherever possible.
+Smaller sizes are unreadable at default zoom, and larger sizes stick out and
+are jarring within the context of the specification.
+
+All diagrams are sized 1:1 so that no additional rescaling is required in
+the Specification, which would affect the font sizes.
+
+If adding any new diagrams, please try to maintain consistency with the rest
+of these diagrams in order to aid consistency and readability of the Vulkan
+specification.
+Inkscape does not need to be used, but is recommended as a powerful free
+tool for generating vector diagrams, and is known to generate diagrams
+compatible with the rest of the Vulkan toolchain.
+If using other tools, please ensure that the diagram renders correctly in
+popular browsers and in the PDF generation path for the specification.
+
+
+
+== UTF-8 Characters
+
+At the moment, the PDF conversion path only supports the Windows-1252
+character set, as we are currently using the standard fonts built into every
+PDF viewer - such that we do not have to embed a different font.
+Unfortunately these only support Windows-1252, which is a highly limited
+character set.
+
+As such, characters not in that set will not display properly when present
+in an SVG, and will fire a warning when building the PDF.
+Luckily, Inkscape has an "Object to path" function built in, which will
+convert text to a raw path, allowing these characters to be supported.
+
+Please ensure that you build the PDF before submitting any new images,
+particularly with non-standard characters, in order to catch such errors.
diff --git a/codegen/vulkan/vulkan-docs-next/images/VideoDecodeSessionDpbStates.svg b/codegen/vulkan/vulkan-docs-next/images/VideoDecodeSessionDpbStates.svg
new file mode 100644
index 0000000..a9899c1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/VideoDecodeSessionDpbStates.svg
@@ -0,0 +1,431 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   width="1280"
+   height="720"
+   viewBox="0 0 1280 720.00001"
+   id="svg6344"
+   version="1.1">
+  <defs
+     id="defs6346">
+    <marker
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker5602"
+       style="overflow:visible;">
+      <path
+         id="path5604"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="marker12421"
+       refX="0.0"
+       refY="0.0"
+       orient="auto">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path12423" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="marker11667"
+       refX="0.0"
+       refY="0.0"
+       orient="auto">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path11669" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="marker11475"
+       refX="0.0"
+       refY="0.0"
+       orient="auto">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path11477" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path8523"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-7"
+       style="overflow:visible">
+      <path
+         id="path8523-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-02"
+       style="overflow:visible">
+      <path
+         id="path8523-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-02-5"
+       style="overflow:visible">
+      <path
+         id="path8523-3-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata6349">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     transform="translate(0,-332.36216)">
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.45706"
+       y="399.25888"
+       id="text6896"><tspan
+         x="499.35706"
+         y="399.25888"
+         id="tspan7012">New decode session Dpb</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.57913"
+       y="539.25891"
+       id="text6904"><tspan
+         x="499.47913"
+         y="539.25891"
+         id="tspan7014">Unused picture reference</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.43875"
+       y="679.25891"
+       id="text6904-2"><tspan
+         x="499.33875"
+         y="679.25891"
+         id="tspan7016">Invalid picture reference</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.57913"
+       y="819.25891"
+       id="text6904-0"><tspan
+         x="499.47913"
+         y="819.25891"
+         id="tspan7018">Updating picture reference</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="500.5679"
+       y="999.25891"
+       id="text6904-3"><tspan
+         x="500.4679"
+         y="999.25891"
+         id="tspan7020">Valid picture reference</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect7084"
+       width="360"
+       height="40"
+       x="320.00027"
+       y="372.36191" />
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect7086"
+       width="360"
+       height="40"
+       x="320.00027"
+       y="512.36194" />
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect7088"
+       width="360"
+       height="40"
+       x="320.00027"
+       y="652.36194" />
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect7090"
+       width="360"
+       height="40"
+       x="320.00027"
+       y="792.36194" />
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect7092"
+       width="360"
+       height="40"
+       x="320.00027"
+       y="972.36194" />
+    <path
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 500,412.36188 0,92"
+       id="path8508" />
+    <path
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-7);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 500,552.36188 0,92"
+       id="path8508-2" />
+    <path
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-02);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 500,692.36188 0,92"
+       id="path8508-7" />
+    <path
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-02-5);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 500,832.36188 0,131.99995"
+       id="path8508-7-2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11475)"
+       d="m 680,992.36189 340,0 0,-320 -332,0"
+       id="path11431" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 680,812.36189 340,0"
+       id="path11851" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11667)"
+       d="m 320,992.36189 -300,0 0,-459.99999 292,0"
+       id="path11853" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 320,672.36189 -300,0"
+       id="path11855" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="499.14578"
+       y="469.25885"
+       id="text6990"><tspan
+         x="499.04578"
+         y="469.25885"
+         id="tspan7022">Bind memory</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="500.20779"
+       y="609.25891"
+       id="text6994"><tspan
+         id="tspan6996"
+         x="500.10779"
+         y="609.25891">Activate reference Dpb slot</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="499.07864"
+       y="749.25891"
+       id="text6998"><tspan
+         id="tspan7000"
+         x="498.97864"
+         y="749.25891">Decode to a reference Dpb slot</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="500.46414"
+       y="893.63391"
+       id="text7048"><tspan
+         id="tspan7050"
+         x="500.36414"
+         y="893.63391">On successful decode operation completion,</tspan><tspan
+         x="500.36414"
+         y="924.88391"
+         id="tspan7052">set the slot as a reference picture with valid metadata</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.14578"
+       y="469.25885"
+       id="text6990-3"><tspan
+         x="499.04578"
+         y="469.25885"
+         id="tspan7022-1">Bind memory</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="500.20779"
+       y="609.25891"
+       id="text6994-9"><tspan
+         id="tspan6996-4"
+         x="500.10779"
+         y="609.25891">Activate reference Dpb slot</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="499.07864"
+       y="749.25891"
+       id="text6998-7"><tspan
+         id="tspan7000-8"
+         x="498.97864"
+         y="749.25891">Decode to a reference Dpb slot</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="500.46414"
+       y="893.63391"
+       id="text7048-4"><tspan
+         id="tspan7050-5"
+         x="500.36414"
+         y="893.63391">On successful decode operation completion,</tspan><tspan
+         x="500.36414"
+         y="924.88391"
+         id="tspan7052-0">set the slot as a reference picture with valid metadata</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="167.46216"
+       y="523.63391"
+       id="text7054-3"><tspan
+         id="tspan7056-6"
+         x="167.36215"
+         y="523.63391">Deactivate</tspan><tspan
+         x="167.36215"
+         y="554.88391"
+         id="tspan7070-1">reference Dpb slot</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="863.51117"
+       y="803.63391"
+       id="text7058-0"><tspan
+         id="tspan7060-6"
+         x="863.41119"
+         y="803.63391">Unsuccessful video</tspan><tspan
+         x="863.41119"
+         y="834.88391"
+         id="tspan7074-3">decode operation</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="863.09003"
+       y="983.63397"
+       id="text7062-2"><tspan
+         id="tspan7064-0"
+         x="862.99005"
+         y="983.63397">Invalidate</tspan><tspan
+         x="862.99005"
+         y="1014.884"
+         id="tspan7068-6">reference Dpb slot</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 12;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 2,572.36216 1268,0"
+       id="path5364" />
+    <g
+       id="g5966"
+       transform="translate(9.9999974,-20.000007)">
+      <path
+         id="path5366"
+         d="m 849.99971,592.36217 0,60"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5602)" />
+      <path
+         id="path5368"
+         d="m 849.99971,592.36217 0,-60"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker12421)" />
+    </g>
+    <g
+       id="g6010"
+       transform="translate(0,-13.103047)">
+      <text
+         id="text5810"
+         y="552.36218"
+         x="1074"
+         style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         xml:space="preserve"><tspan
+           id="tspan5814"
+           y="552.36218"
+           x="1073.9">Deactivated reference Dpb slot</tspan></text>
+      <text
+         id="text5816"
+         y="632.36218"
+         x="1074"
+         style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         xml:space="preserve"><tspan
+           y="632.36218"
+           x="1073.9"
+           id="tspan5818">Activated reference Dpb slot</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;letter-spacing:-0.2px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="1174"
+       y="747.93225"
+       id="text6016"><tspan
+         id="tspan6018"
+         x="1173.9"
+         y="747.93225">The picture</tspan><tspan
+         x="1173.9"
+         y="779.18225"
+         id="tspan6020">resource's</tspan><tspan
+         x="1173.9"
+         y="810.43225"
+         id="tspan6024">memory must</tspan><tspan
+         x="1173.9"
+         y="841.68225"
+         id="tspan6028">be resident</tspan><tspan
+         x="1173.9"
+         y="872.93225"
+         id="tspan6030">within these</tspan><tspan
+         x="1173.9"
+         y="904.18225"
+         id="tspan6032">states of</tspan><tspan
+         x="1173.9"
+         y="935.43225"
+         id="tspan6034">the slot</tspan></text>
+    <g
+       id="g6062"
+       transform="translate(0,-20.000007)">
+      <path
+         id="path6040"
+         d="m 1040,692.36216 c 40,0 0,160 40,160"
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+      <path
+         id="path6040-6"
+         d="m 1040,1012.3622 c 40,0 0,-160.00004 40,-160.00004"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/accelstruct.svg b/codegen/vulkan/vulkan-docs-next/images/accelstruct.svg
new file mode 100644
index 0000000..175ff40
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/accelstruct.svg
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="122.6349mm"
+   height="111.36717mm"
+   viewBox="0 0 122.6349 111.36717"
+   version="1.1"
+   id="svg4035"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="accelstruct.svg">
+  <defs
+     id="defs4029">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5699"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5697"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path4902"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4902-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4902-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4902-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="205.45633"
+     inkscape:cy="48.906685"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="2560"
+     inkscape:window-height="1538"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata4032">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-36.531136,-66.301968)">
+    <rect
+       id="rect4037"
+       width="117.55059"
+       height="33.639881"
+       x="39.498512"
+       y="66.434525"
+       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       id="rect4037-1"
+       width="34.855381"
+       height="33.760372"
+       x="54.720116"
+       y="143.83646"
+       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.14462024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       id="rect4037-1-1"
+       width="34.855381"
+       height="33.760372"
+       x="120.36967"
+       y="143.83646"
+       style="fill:#cecece;fill-opacity:1;stroke:#000000;stroke-width:0.14462024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4874"
+       width="34.206844"
+       height="21.355652"
+       x="36.663692"
+       y="109.68093"
+       ry="6.6145835" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4874-5"
+       width="34.206844"
+       height="21.355654"
+       x="82.682297"
+       y="109.68093"
+       ry="6.6145835" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26511249;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4874-4"
+       width="34.206844"
+       height="21.355654"
+       x="124.82664"
+       y="109.68093"
+       ry="6.6145835" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 53.861607,100.45238 v 9.07143"
+       id="path4897"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-2)"
+       d="m 100.35268,100.00656 v 9.07143"
+       id="path4897-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-1)"
+       d="m 141.17411,100.38454 v 9.07144"
+       id="path4897-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.30833337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
+       d="m 137.20536,131.26903 v 12.31946"
+       id="path4897-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5699)"
+       d="m 52.727677,131.25744 v 7.18155 h 18.898811 v 5.29166"
+       id="path5689"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.2711173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 100.35268,130.50149 v 7.9375 H 71.626488"
+       id="path5743"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="46.680061"
+       y="85.333328"
+       id="text5747"><tspan
+         sodipodi:role="line"
+         x="46.680061"
+         y="85.333328"
+         style="font-size:6.3499999px;stroke-width:0.26458332"
+         id="tspan5749">Top-Level Acceleration Structure</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.75;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="55.942436"
+       y="153.21938"
+       id="text5747-1"><tspan
+         sodipodi:role="line"
+         x="55.942436"
+         y="153.21938"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5749-5">Bottom-Level</tspan><tspan
+         sodipodi:role="line"
+         x="55.942436"
+         y="161.15688"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5773">Acceleration</tspan><tspan
+         sodipodi:role="line"
+         x="55.942436"
+         y="169.09438"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5777">Structure</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.75;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="120.77655"
+       y="153.21938"
+       id="text5747-1-2"><tspan
+         sodipodi:role="line"
+         x="120.77655"
+         y="153.21938"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5749-5-0">Bottom-Level</tspan><tspan
+         sodipodi:role="line"
+         x="120.77655"
+         y="161.15688"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5773-3">Acceleration</tspan><tspan
+         sodipodi:role="line"
+         x="120.77655"
+         y="169.09438"
+         style="font-size:4.93888903px;line-height:0px;stroke-width:0.26458332"
+         id="tspan5777-3">Structure</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="41.388393"
+       y="117.02173"
+       id="text5810"><tspan
+         sodipodi:role="line"
+         id="tspan5808"
+         x="41.388393"
+         y="117.02173"
+         style="stroke-width:0.26458332">Transform</tspan><tspan
+         sodipodi:role="line"
+         x="41.388393"
+         y="122.31339"
+         style="stroke-width:0.26458332"
+         id="tspan5812">and shading</tspan><tspan
+         sodipodi:role="line"
+         x="41.388393"
+         y="127.60506"
+         style="stroke-width:0.26458332"
+         id="tspan5814">information</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="87.024742"
+       y="117.02173"
+       id="text5810-7"><tspan
+         sodipodi:role="line"
+         id="tspan5808-6"
+         x="87.024742"
+         y="117.02173"
+         style="stroke-width:0.26458332">Transform</tspan><tspan
+         sodipodi:role="line"
+         x="87.024742"
+         y="122.31339"
+         style="stroke-width:0.26458332"
+         id="tspan5812-7">and shading</tspan><tspan
+         sodipodi:role="line"
+         x="87.024742"
+         y="127.60506"
+         style="stroke-width:0.26458332"
+         id="tspan5814-8">information</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="129.92503"
+       y="117.02173"
+       id="text5810-73"><tspan
+         sodipodi:role="line"
+         id="tspan5808-5"
+         x="129.92503"
+         y="117.02173"
+         style="stroke-width:0.26458332">Transform</tspan><tspan
+         sodipodi:role="line"
+         x="129.92503"
+         y="122.31339"
+         style="stroke-width:0.26458332"
+         id="tspan5812-1">and shading</tspan><tspan
+         sodipodi:role="line"
+         x="129.92503"
+         y="127.60506"
+         style="stroke-width:0.26458332"
+         id="tspan5814-80">information</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/base_image_sample_grid.svg b/codegen/vulkan/vulkan-docs-next/images/base_image_sample_grid.svg
new file mode 100644
index 0000000..17d0832
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/base_image_sample_grid.svg
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="base_image_sample_grid.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.48"
+     inkscape:cx="212.25143"
+     inkscape:cy="203.48463"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <g
+       id="g1953"
+       transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         id="text121"
+         y="-32.729179"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-32.729179"
+           x="34.208187"
+           id="tspan119"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-3"
+         y="-14.208342"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-14.208342"
+           x="34.208187"
+           id="tspan119-1"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-0"
+         y="4.3124924"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="4.3124924"
+           x="34.208187"
+           id="tspan119-4"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-33"
+         y="22.833326"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="22.833326"
+           x="34.208187"
+           id="tspan119-6"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-6"
+         y="36.062492"
+         x="47.437355"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="47.437355"
+           id="tspan119-11"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-30"
+         y="36.062492"
+         x="65.958191"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="65.958191"
+           id="tspan119-47"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-1"
+         y="36.062492"
+         x="84.479027"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="84.479027"
+           id="tspan119-9"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-8"
+         y="36.062492"
+         x="102.99986"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="102.99986"
+           id="tspan119-7"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-4"
+         y="36.062492"
+         x="121.52069"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="121.52069"
+           id="tspan119-0"
+           sodipodi:role="line">4</tspan></text>
+      <text
+         id="text121-7"
+         y="36.062492"
+         x="140.04152"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="140.04152"
+           id="tspan119-8"
+           sodipodi:role="line">5</tspan></text>
+      <text
+         id="text121-79"
+         y="36.062492"
+         x="158.56236"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="158.56236"
+           id="tspan119-16"
+           sodipodi:role="line">6</tspan></text>
+      <text
+         id="text121-31"
+         y="36.062492"
+         x="177.08319"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="177.08319"
+           id="tspan119-09"
+           sodipodi:role="line">7</tspan></text>
+      <text
+         id="text121-3-7"
+         y="-5.1587644"
+         x="34.4366"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="-5.1587644"
+           x="34.4366"
+           id="tspan119-1-8"
+           sodipodi:role="line">j</tspan></text>
+      <text
+         id="text121-3-7-3"
+         y="37.611752"
+         x="113.4819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="37.611752"
+           x="113.4819"
+           id="tspan119-1-8-7"
+           sodipodi:role="line">i</tspan></text>
+      <g
+         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
+         id="g1463">
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517"
+           cx="42.333332"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7"
+           cx="52.916668"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78"
+           cx="63.5"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9"
+           cx="74.083336"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0"
+           cx="84.666664"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0"
+           cx="95.25"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1"
+           cx="105.83334"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7"
+           cx="116.41666"
+           cy="21.833345"
+           r="0.52778977" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
+           id="path1171"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-6"
+           cx="42.333332"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-3"
+           cx="52.916668"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-9"
+           cx="63.5"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-1"
+           cx="74.083336"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-6"
+           cx="84.666664"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-8"
+           cx="95.25"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-5"
+           cx="105.83334"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-5"
+           cx="116.41665"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-4"
+           cx="42.333332"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-2"
+           cx="52.916668"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-3"
+           cx="63.5"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-0"
+           cx="74.083336"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-9"
+           cx="84.666664"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-1"
+           cx="95.25"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-9"
+           cx="105.83334"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-7"
+           cx="116.41665"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-14"
+           cx="42.333332"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-4"
+           cx="52.916668"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-7"
+           cx="63.5"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-8"
+           cx="74.083336"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-7"
+           cx="84.666664"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-9"
+           cx="95.25"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-4"
+           cx="105.83334"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-52"
+           cx="116.41665"
+           cy="53.583344"
+           r="0.52778977" />
+      </g>
+      <g
+         transform="translate(-23.812502,2.2e-6)"
+         id="g1370">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812505,7.9375005)"
+         id="g1471">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-1"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5-4"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0-9"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972-8"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812501,2.6458339)"
+         id="g1597">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="44.034977"
+           y="-47.066288"
+           id="text121-09"><tspan
+             sodipodi:role="line"
+             id="tspan119-67"
+             x="44.034977"
+             y="-47.066288"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="43.972965"
+           y="32.308716"
+           id="text121-09-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-1"
+             x="43.972965"
+             y="32.308716"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path1473"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="46.93816"
+           y="-7.8045983"
+           id="text121-3-7-8"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-3"
+             x="46.93816"
+             y="-7.8045983"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
+      </g>
+      <g
+         id="g1613-5"
+         transform="translate(-34.395835,2.6458339)">
+        <g
+           id="g1802">
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="44.034977"
+             y="-47.066288"
+             id="text1601-4"><tspan
+               sodipodi:role="line"
+               id="tspan1599-1"
+               x="44.034977"
+               y="-47.066288"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="43.972965"
+             y="32.308716"
+             id="text1605-6"><tspan
+               sodipodi:role="line"
+               id="tspan1603-7"
+               x="43.972965"
+               y="32.308716"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path1607-6"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+          <text
+             xml:space="preserve"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="46.93816"
+             y="-7.8045983"
+             id="text1611-4"><tspan
+               sodipodi:role="line"
+               id="tspan1609-3"
+               x="46.93816"
+               y="-7.8045983"
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/bresenham.svg b/codegen/vulkan/vulkan-docs-next/images/bresenham.svg
new file mode 100644
index 0000000..ca05bcb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/bresenham.svg
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="391.00003"
+   height="321.00003"
+   viewBox="0 0 103.4521 84.931256"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="bresenham.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2950"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2320"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2639"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2637"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.48"
+     inkscape:cx="208.25234"
+     inkscape:cy="168.34984"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="935"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="20"
+     fit-margin-right="20"
+     fit-margin-bottom="20"
+     fit-margin-left="20"
+     units="px"
+     inkscape:snap-center="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="-23.680211"
+       originy="-47.4927"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-31.430062,48.736474)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 101.67694,-43.312516 36.85402,21.510402"
+       id="path2597"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g1463"
+       transform="matrix(1.7500001,0,0,1.7500001,-27.968899,-72.260452)"
+       style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none">
+      <circle
+         r="0.52778977"
+         cy="21.833345"
+         cx="42.333332"
+         id="path4517"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="21.833345"
+         cx="52.916668"
+         id="path4517-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="21.833345"
+         cx="63.5"
+         id="path4517-78"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="21.833345"
+         cx="74.083336"
+         id="path4517-7-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="21.833345"
+         cx="84.666664"
+         id="path4517-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccc"
+         inkscape:connector-curvature="0"
+         id="path1171"
+         d="m 37.041666,16.541677 h 52.916665 v 42.333331 l -52.91666,4e-6 -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m -5e-6,-10.583337 H 37.041666 m 10e-7,-10.58333 52.916664,-2e-6 m 0,-10.583333 -52.916664,3e-6"
+         style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="32.416679"
+         cx="42.333332"
+         id="path4517-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="32.416679"
+         cx="52.916668"
+         id="path4517-7-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="32.416679"
+         cx="63.5"
+         id="path4517-78-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="32.416679"
+         cx="74.083336"
+         id="path4517-7-9-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="32.416679"
+         cx="84.666664"
+         id="path4517-0-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="43.000011"
+         cx="42.333332"
+         id="path4517-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="43.000011"
+         cx="52.916668"
+         id="path4517-7-2"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="43.000011"
+         cx="63.5"
+         id="path4517-78-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="43.000011"
+         cx="74.083336"
+         id="path4517-7-9-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="43.000011"
+         cx="84.666664"
+         id="path4517-0-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="53.583344"
+         cx="42.333332"
+         id="path4517-14"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="53.583344"
+         cx="52.916668"
+         id="path4517-7-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="53.583344"
+         cx="63.5"
+         id="path4517-78-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="53.583344"
+         cx="74.083336"
+         id="path4517-7-9-8"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="53.583344"
+         cx="84.666664"
+         id="path4517-0-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 120.19778,-43.312516 46.114437,30.770819"
+       id="path2597-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 83.156105,-43.312516 36.85402,2.9895682"
+       id="path2597-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 64.635271,-43.312516 36.85402,-15.531266"
+       id="path2597-1-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 46.114437,-43.312516 -9.260417,9.260417"
+       id="path2597-1-9-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 129.45819,-34.052099 64.635271,30.770819"
+       id="path2597-1-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 129.45819,-15.531266 83.156105,30.770819"
+       id="path2597-1-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 129.45819,2.9895688 101.67694,30.770819"
+       id="path2597-1-9-68"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 129.45819,21.510402 -9.26042,9.260417"
+       id="path2597-1-9-68-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 64.635271,-43.312516 36.85402,-15.531265"
+       id="path2597-1-9-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 36.85402,-34.052099 64.82292,64.822918"
+       id="path2597-1-9-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 36.85402,-15.531266 83.156105,30.770819"
+       id="path2597-1-9-2-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 36.85402,2.9895681 64.635271,30.770819"
+       id="path2597-1-9-2-0-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 36.85402,21.510402 9.260417,9.260417"
+       id="path2597-1-9-2-0-7-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 36.85402,-34.052099 64.82292,64.822918"
+       id="path2597-1-9-2-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 46.114437,-43.312516 120.19777,30.770819"
+       id="path2597-1-9-2-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 64.635271,-43.312516 129.45819,21.510402"
+       id="path2597-1-9-2-8-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 83.156105,-43.312516 129.45819,2.9895681"
+       id="path2597-1-9-2-8-2-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 101.67694,-43.312516 27.78125,27.78125"
+       id="path2597-1-9-2-8-2-4-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.3321186;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99635576, 0.99635576;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 120.19777,-43.312516 9.26042,9.260417"
+       id="path2597-1-9-2-8-2-4-0-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.52999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="M 42.145687,20.187485 118.87486,-39.343766"
+       id="path819"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g3490"
+       transform="translate(11.90625,10.583333)"
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3"
+         d="m 32.88527,9.6041515 2.645834,2.6458335"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-2"
+         d="M 35.531104,9.6041515 32.88527,12.249985"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g3490-6"
+       transform="translate(30.427084,-7.9375001)"
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-1"
+         d="m 32.88527,9.6041515 2.645834,2.6458335"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-2-0"
+         d="M 35.531104,9.6041515 32.88527,12.249985"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g3490-6-5"
+       transform="translate(48.947918,-26.458334)"
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-1-3"
+         d="m 32.88527,9.6041515 2.645834,2.6458335"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-2-0-8"
+         d="M 35.531104,9.6041515 32.88527,12.249985"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g3490-6-5-0"
+       transform="translate(67.468751,-44.979168)"
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-1-3-9"
+         d="m 32.88527,9.6041515 2.645834,2.6458335"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path2597-1-9-2-0-7-9-3-2-0-8-0"
+         d="M 35.531104,9.6041515 32.88527,12.249985"
+         style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.33205208;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ycosited.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ycosited.svg
new file mode 100644
index 0000000..586ca58
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ycosited.svg
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+              d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text             
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(1 -1)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ymidpoint.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ymidpoint.svg
new file mode 100644
index 0000000..1c6b316
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xcosited_ymidpoint.svg
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <g transform="translate(0 -0.5)">
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        </g>
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text             
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(1 -10.26041625)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ycosited.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ycosited.svg
new file mode 100644
index 0000000..b73f668
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ycosited.svg
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <g transform="translate(0.5 0.0)">
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        </g>
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text             
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(10.26041625 -1)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ymidpoint.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ymidpoint.svg
new file mode 100644
index 0000000..31e9b68
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_420_xmidpoint_ymidpoint.svg
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <g transform="translate(0.5 -0.5)">
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+                d="M-0.5,0.5 h8 m-8,2 h8 m-8,2 h8m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        </g>
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text             
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(10.26041625 -10.26041625)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_cosited.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_cosited.svg
new file mode 100644
index 0000000..ea34dc1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_cosited.svg
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+              d="M-0.5,0 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+              d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text             
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(1 -1)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,2</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="46.114433"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="46.114433"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="83.15609"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="83.15609"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="120.19776"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="120.19776"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="157.23944"><tspan               
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,3</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_midpoint.svg b/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_midpoint.svg
new file mode 100644
index 0000000..c82a4e5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/chromasamples_422_midpoint.svg
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 186.82375 101.62997"
+   height="384.11328"
+   width="706.10547">
+  <defs>
+    <marker
+       id="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"       
+       style="overflow:visible">
+      <path         
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       id="marker1483"
+       style="overflow:visible"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z" />
+    </marker>
+    <marker
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"       
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <g transform="translate(-6.9498988,47.8249)">
+    <g transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-32.729179"><tspan
+           x="34.208187"
+           y="-32.729179"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="-14.208342"><tspan
+           x="34.208187"
+           y="-14.208342"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="4.3124924"><tspan
+           x="34.208187"
+           y="4.3124924"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.208187"
+         y="22.833326"><tspan
+           x="34.208187"
+           y="22.833326"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="47.437355"
+         y="36.062492"><tspan
+           x="47.437355"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="65.958191"
+         y="36.062492"><tspan
+           x="65.958191"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="84.479027"
+         y="36.062492"><tspan
+           x="84.479027"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">2</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="102.99986"
+         y="36.062492"><tspan
+           x="102.99986"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">3</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="121.52069"
+         y="36.062492"><tspan
+           x="121.52069"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="140.04152"
+         y="36.062492"><tspan
+           x="140.04152"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">5</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="158.56236"
+         y="36.062492"><tspan
+           x="158.56236"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">6</tspan></text>
+      <text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="177.08319"
+         y="36.062492"><tspan
+           x="177.08319"
+           y="36.062492"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">7</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="34.4366"
+         y="-5.1587644"><tspan
+           x="34.4366"
+           y="-5.1587644"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">j</tspan></text>
+      <text
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         x="113.4819"
+         y="37.611752"><tspan
+           x="113.4819"
+           y="37.611752"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">i</tspan></text>
+      <g
+          transform="translate(-25.323064 -72.260449) scale(1.75 1.75) translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)">
+        <path style="fill:none;stroke:black;stroke-width:0.01;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="0.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="1.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="2.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="0.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="1.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="2.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="3.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="4.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="5.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="6.5" cy="3.5" r="0.05" />
+        <circle style="fill:black;stroke:none" cx="7.5" cy="3.5" r="0.05" />
+        <g transform="translate(0.5 0.0)">
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square;stroke-dasharray:0.1,0.1;stroke-dashoffset:0.05"
+                d="M-0.5,0 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,1 h8 m-8,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4 m2,-4 v4" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,0.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,1.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,2.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 0.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 2.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 4.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+          <path style="fill:none;stroke:red;stroke-width:0.02;stroke-linecap:square"
+                d="M 6.5,3.5 m-0.08,-0.08 l0.16,0.16 m-0.16,0 l0.16,-0.16 m-0.08,0.08" />
+        </g>
+      </g>
+      <g transform="translate(-23.812502,2.2e-6)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">8.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">u</tspan></text>
+      </g>
+      <g transform="translate(-23.812505,7.9375005)">
+        <text
+           y="45.537884"
+           x="54.556301"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.537884"
+             x="54.556301">0.0</tspan></text>
+        <text
+           y="45.538918"
+           x="213.32181"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="45.538918"
+             x="213.32181">1.0</tspan></text>
+        <path
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           y="45.122406"
+           x="137.32748"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="45.122406"
+             x="137.32748">s</tspan></text>
+      </g>
+      <g transform="translate(-23.812501,2.6458339)">
+        <text
+           y="-47.066288"
+           x="44.034977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="-47.066288"
+             x="44.034977">4.0</tspan></text>
+        <text
+           y="32.308716"
+           x="43.972965"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+             y="32.308716"
+             x="43.972965">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+        <text
+           y="-7.8045983"
+           x="46.93816"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+             y="-7.8045983"
+             x="46.93816">v</tspan></text>
+      </g>
+      <g transform="translate(-34.395835,2.6458339)">
+        <g>
+          <text
+             y="-47.066288"
+             x="44.034977"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="-47.066288"
+               x="44.034977">1.0</tspan></text>
+          <text
+             y="32.308716"
+             x="43.972965"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+               y="32.308716"
+               x="43.972965">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835" />
+          <text
+             y="-7.8045983"
+             x="46.93816"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+               y="-7.8045983"
+               x="46.93816">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-7.6312708e-7,-3.9209711e-6)">
+      <g transform="translate(10.26041625 -1)">
+        <text
+           y="-16.854183"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,2</tspan></tspan></text>
+        <text
+           y="-16.854183"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-16.854183"
+             x="157.23944"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,2</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="46.114433"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="46.114433"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="83.15609"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="83.15609"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="120.19776"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="120.19776"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,1</tspan></tspan></text>
+        <text
+           y="1.6666511"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="1.6666511"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,1</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="83.156097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="83.156097"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,0</tspan></tspan></text>
+        <text
+           y="20.187485"
+           x="157.23943"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="20.187485"
+             x="157.23943"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,0</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="46.114437"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="46.114437"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 0,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="83.156105"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="83.156105"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 1,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="120.19777"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="120.19777"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 2,3</tspan></tspan></text>
+        <text
+           y="-35.375011"
+           x="157.23944"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332"
+             y="-35.375011"
+             x="157.23944"><tspan               
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;stroke-width:0.26458332"> 3,3</tspan></tspan></text>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/commandbuffer_lifecycle.svg b/codegen/vulkan/vulkan-docs-next/images/commandbuffer_lifecycle.svg
new file mode 100644
index 0000000..be6623f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/commandbuffer_lifecycle.svg
@@ -0,0 +1,501 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="224.63503mm"
+   height="92.592918mm"
+   viewBox="0 0 224.63503 92.592918"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="commandbuffer_lifecycle.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5741"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5739"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5571"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5569"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3457"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3455"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3373"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path3371"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1404"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1402"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path968"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1320"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1318"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1274"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1272"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1246"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1244"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path971"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1274-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1272-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="405.79858"
+     inkscape:cy="139.11401"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:measure-start="245,915"
+     inkscape:measure-end="570,915"
+     showguides="false"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid907"
+       originx="3.8383438"
+       originy="-212.72305" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(3.8383438,8.3159637)">
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-68-2-5"
+       width="63.499996"
+       height="7.9375005"
+       x="76.729164"
+       y="7.8066287" />
+    <text
+       id="text823-4-2-9-4-7-9-2"
+       y="13.361835"
+       x="108.38303"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         y="13.361835"
+         x="108.38303"
+         sodipodi:role="line">Initial</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-68-2-5-2"
+       width="63.499996"
+       height="7.9375005"
+       x="156.10417"
+       y="37.57225" />
+    <text
+       id="text823-4-2-9-4-7-9-2-0"
+       y="43.12746"
+       x="187.75806"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         y="43.12746"
+         x="187.75806"
+         sodipodi:role="line">Recording</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-68-2-5-7"
+       width="63.499996"
+       height="7.9375005"
+       x="23.151045"
+       y="73.291" />
+    <text
+       id="text823-4-2-9-4-7-9-2-7"
+       y="78.846207"
+       x="54.804928"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4-0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         y="78.846207"
+         x="54.804928"
+         sodipodi:role="line">Pending</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-68-2-5-1"
+       width="63.499996"
+       height="7.9375005"
+       x="130.3073"
+       y="73.291" />
+    <text
+       id="text823-4-2-9-4-7-9-2-9"
+       y="78.846207"
+       x="161.96117"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         y="78.846207"
+         x="161.96117"
+         sodipodi:role="line">Executable</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.38502529;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-68-2-5-9"
+       width="63.499996"
+       height="7.9375005"
+       x="-2.6458311"
+       y="37.57225" />
+    <text
+       id="text823-4-2-9-4-7-9-2-6"
+       y="43.12746"
+       x="29.008045"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4-93"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         y="43.12746"
+         x="29.008045"
+         sodipodi:role="line">Invalid</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="108.47915"
+       y="-4.0996227"
+       id="text905"><tspan
+         sodipodi:role="line"
+         id="tspan903"
+         x="108.47915"
+         y="-4.0996227"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Allocate</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39749998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 140.22916,11.775377 c 17.40186,4.563534 31.44429,11.931433 37.70313,25.796877"
+       id="path911"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker1404)"
+       d="M 76.72917,11.775375 C 59.32731,16.338909 45.28488,23.706809 39.02604,37.572252"
+       id="path911-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1246)"
+       d="m 177.93228,45.509753 c -2.5839,12.275404 -13.84985,21.278544 -31.74999,27.781249"
+       id="path928"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart)"
+       d="m 39.02604,45.509753 c 2.5839,12.275404 13.849846,21.278544 31.749991,27.781249"
+       id="path928-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.42705935px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1274)"
+       d="m 130.30729,77.259753 c -14.77333,2.532909 -29.48724,2.761692 -43.65625,0"
+       id="path945"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.42705935px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1274-3)"
+       d="m 86.651035,75.275378 c 14.773335,-2.532915 29.487245,-2.761695 43.656255,0"
+       id="path945-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1320)"
+       d="m 156.10417,39.556628 c -33.57471,-4.289783 -37.71018,-13.456659 -47.625,-23.8125"
+       id="path3349"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58749987,1.58749987;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3373)"
+       d="M 144.19792,73.291002 C 129.70275,39.163626 116.89927,24.895373 108.47917,15.744128"
+       id="path3363"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3457)"
+       d="M 108.47917,-2.1152472 V 7.8066273"
+       id="path3447"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="164.04166"
+       y="19.712879"
+       id="text905-5"><tspan
+         sodipodi:role="line"
+         id="tspan903-4"
+         x="164.04166"
+         y="19.712879"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">Begin</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="171.97917"
+       y="63.369129"
+       id="text905-5-4"><tspan
+         sodipodi:role="line"
+         id="tspan903-4-1"
+         x="171.97917"
+         y="63.369129"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">End</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="108.47915"
+       y="83.212875"
+       id="text905-5-4-3"><tspan
+         sodipodi:role="line"
+         id="tspan903-4-1-1"
+         x="108.47915"
+         y="83.212875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Submission</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="107.73502"
+       y="71.306633"
+       id="text905-5-4-3-1"><tspan
+         sodipodi:role="line"
+         id="tspan903-4-1-1-9"
+         x="108.47916"
+         y="71.306633"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Completion </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+       x="44.979168"
+       y="61.38475"
+       id="text4726"><tspan
+         sodipodi:role="line"
+         x="44.979168"
+         y="61.38475"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732">Completion with</tspan><tspan
+         sodipodi:role="line"
+         x="44.979168"
+         y="66.676414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan11757">One Time Submit</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="52.916664"
+       y="19.712879"
+       id="text905-6"><tspan
+         sodipodi:role="line"
+         x="52.916664"
+         y="19.712879"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.39687496"
+         id="tspan3709">Reset</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="116.41668"
+       y="21.697252"
+       id="text905-6-3"><tspan
+         sodipodi:role="line"
+         x="116.41668"
+         y="21.697252"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496"
+         id="tspan3709-2">Reset</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5571)"
+       d="M 156.10416,41.541003 H 60.854164"
+       id="path5557"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875, 1.5875;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5741)"
+       d="M 140.22916,73.291002 C 126.33855,47.494128 119.0625,41.677088 60.854164,41.541003"
+       id="path5559"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="74.744797"
+       y="47.494129"
+       id="text905-6-3-4"><tspan
+         sodipodi:role="line"
+         x="74.744797"
+         y="47.494129"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496"
+         id="tspan3709-2-2">Invalidate</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/fragment_mask.svg b/codegen/vulkan/vulkan-docs-next/images/fragment_mask.svg
new file mode 100644
index 0000000..3141035
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/fragment_mask.svg
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="113.50448mm"
+   height="43.381195mm"
+   viewBox="0 0 113.50448 43.381195"
+   version="1.1"
+   id="svg2745"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="fragment_mask.svg">
+  <defs
+     id="defs2739" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.979899"
+     inkscape:cx="268.47568"
+     inkscape:cy="27.580632"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:measure-start="465,840"
+     inkscape:measure-end="525,730"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3290"
+       originx="-75.481983"
+       originy="-197.30522" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2742">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-75.481984,-56.313591)">
+    <rect
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4980"
+       width="15.875"
+       height="6.614583"
+       x="171.97917"
+       y="72.104164" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4982"
+       width="15.875"
+       height="6.614583"
+       x="171.97917"
+       y="78.71875" />
+    <path
+       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 108.47917,66.8125 C 87.312504,98.562495 87.312504,98.562495 87.312504,98.562495 h 42.333336 z"
+       id="path4959"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 97.895833,57.552083 C 76.729173,89.302078 76.729173,89.302078 76.729173,89.302078 H 119.06251 Z"
+       id="path4959-2"
+       inkscape:connector-curvature="0" />
+    <g
+       transform="translate(-68.791667,6.6145833)"
+       id="g4020-9"
+       style="stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none">
+      <circle
+         r="0.52778977"
+         cy="70.78125"
+         cx="178.59375"
+         id="path4517-78-7-8-8-9-0-5"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="76.072914"
+         cx="189.17708"
+         id="path4517-78-7-8-8-9-0-3-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="81.364586"
+         cx="173.30208"
+         id="path4517-78-7-8-8-9-0-4-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.65625"
+         cx="183.88542"
+         id="path4517-78-7-8-8-9-0-7-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4722"
+       width="21.148586"
+       height="40.992329"
+       x="134.9375"
+       y="57.552082"
+       ry="1.2710052e-006" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="145.52083"
+       y="62.84375"
+       id="text4726"><tspan
+         sodipodi:role="line"
+         x="145.52083"
+         y="62.84375"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4728">Color</tspan><tspan
+         sodipodi:role="line"
+         x="145.52083"
+         y="68.135414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732">Samples</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 134.9375,72.104167 h 21.16666"
+       id="path4734"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 145.52083,72.104167 V 98.5625"
+       id="path4736"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="140.22917"
+       y="77.395836"
+       id="text4726-8"><tspan
+         sodipodi:role="line"
+         x="140.22917"
+         y="77.395836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2">0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 134.9375,78.71875 h 21.16666"
+       id="path4801"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 134.9375,85.333333 h 21.16666"
+       id="path4803"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 134.9375,91.947917 h 21.16666"
+       id="path4805"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="150.8125"
+       y="97.239586"
+       id="text4726-8-3"><tspan
+         sodipodi:role="line"
+         x="150.8125"
+         y="97.239586"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-5">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="140.22917"
+       y="84.010414"
+       id="text4726-8-2"><tspan
+         sodipodi:role="line"
+         x="140.22917"
+         y="84.010414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="150.8125"
+       y="77.395836"
+       id="text4726-8-2-1"><tspan
+         sodipodi:role="line"
+         x="150.8125"
+         y="77.395836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-2">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="150.8125"
+       y="90.625"
+       id="text4726-8-2-9"><tspan
+         sodipodi:role="line"
+         x="150.8125"
+         y="90.625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-3">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="140.22917"
+       y="90.625"
+       id="text4726-8-2-0"><tspan
+         sodipodi:role="line"
+         x="140.22917"
+         y="90.625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-0">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="150.8125"
+       y="84.010414"
+       id="text4726-8-2-0-2"><tspan
+         sodipodi:role="line"
+         x="150.8125"
+         y="84.010414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-0-7">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="140.22917"
+       y="97.239586"
+       id="text4726-8-2-0-0"><tspan
+         sodipodi:role="line"
+         x="140.22917"
+         y="97.239586"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-0-6">3</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4722-1"
+       width="26.458307"
+       height="40.992329"
+       x="161.39584"
+       y="57.552086"
+       ry="1.2710052e-006" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="174.625"
+       y="62.84375"
+       id="text4726-6"><tspan
+         sodipodi:role="line"
+         x="174.625"
+         y="62.84375"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4728-4">Color</tspan><tspan
+         sodipodi:role="line"
+         x="174.625"
+         y="68.135414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-0">Fragments</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 161.39584,72.104167 h 26.45833"
+       id="path4734-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 171.97917,72.104167 V 98.5625"
+       id="path4736-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="166.68752"
+       y="77.395836"
+       id="text4726-8-0"><tspan
+         sodipodi:role="line"
+         x="166.68752"
+         y="77.395836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-0">0</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 161.39584,78.71875 h 26.45833"
+       id="path4801-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 161.39584,85.333333 h 26.45833"
+       id="path4803-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 161.39584,91.947916 h 26.45833"
+       id="path4805-4"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="166.68752"
+       y="84.010414"
+       id="text4726-8-2-4"><tspan
+         sodipodi:role="line"
+         x="166.68752"
+         y="84.010414"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-9">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="166.68752"
+       y="90.625"
+       id="text4726-8-2-0-4"><tspan
+         sodipodi:role="line"
+         x="166.68752"
+         y="90.625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-0-3">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+       x="166.68752"
+       y="97.239594"
+       id="text4726-8-2-0-0-7"><tspan
+         sodipodi:role="line"
+         x="166.68752"
+         y="97.239594"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-3-0-6-4">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="179.91667"
+       y="90.625008"
+       id="text4986"><tspan
+         sodipodi:role="line"
+         id="tspan4984"
+         x="179.91667"
+         y="90.625008"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Unused</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="179.91667"
+       y="97.239586"
+       id="text4986-3"><tspan
+         sodipodi:role="line"
+         id="tspan4984-2"
+         x="179.91667"
+         y="97.239586"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Unused</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+       x="101.86459"
+       y="87.979172"
+       id="text4726-8-7"><tspan
+         sodipodi:role="line"
+         x="101.86459"
+         y="87.979172"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-7">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+       x="123.03125"
+       y="82.687508"
+       id="text4726-8-7-5"><tspan
+         sodipodi:role="line"
+         x="123.03125"
+         y="82.687508"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-7-8">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+       x="107.15625"
+       y="77.395836"
+       id="text4726-8-7-1"><tspan
+         sodipodi:role="line"
+         x="107.15625"
+         y="77.395836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-7-1">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+       x="117.73959"
+       y="93.270836"
+       id="text4726-8-7-4"><tspan
+         sodipodi:role="line"
+         x="117.73959"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4732-2-7-7">3</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/innerquad.svg b/codegen/vulkan/vulkan-docs-next/images/innerquad.svg
new file mode 100644
index 0000000..04a6a19
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/innerquad.svg
@@ -0,0 +1,700 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="213.40439mm"
+   height="82.336044mm"
+   viewBox="0 0 213.40439 82.336044"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="innerquad.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="417.43978"
+     inkscape:cy="37.024591"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="85.351053"
+       originy="-193.77742" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(85.351047,-20.886535)">
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 42.333339,42.999989 c 0,31.75 0,31.75 0,31.75"
+       id="path2102"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 58.20834,42.999989 c 0,31.75 0,31.75 0,31.75"
+       id="path2104"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 74.083339,42.999989 c 0,31.75 0,31.75 0,31.75"
+       id="path2106"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 89.958339,42.999989 c 0,31.75 0,31.75 0,31.75"
+       id="path2108"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 26.458339,58.874988 c 79.375001,0 79.375001,0 79.375001,0"
+       id="path2110"
+       inkscape:connector-curvature="0" />
+    <rect
+       id="rect3703-2"
+       width="111.125"
+       height="63.499981"
+       x="10.583337"
+       y="27.124992"
+       style="opacity:0.88500001;fill:none;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 26.458336,27.124995 V 42.99998"
+       id="path9655"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 42.333337,27.124994 V 42.99998"
+       id="path9655-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 58.208337,27.124994 V 42.99998"
+       id="path9655-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 105.83334,42.99998 h 15.87499"
+       id="path9693"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 10.583337,42.999995 H 26.458335"
+       id="path9693-1"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="5.5028787"
+       y="25.213295"
+       id="text5070-2-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3"
+         x="5.5028787"
+         y="25.213295"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="116.35319"
+       y="25.102877"
+       id="text5070-2-2-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-4"
+         x="116.35319"
+         y="25.102877"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="5.313765"
+       y="94.580177"
+       id="text5070-2-2-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3"
+         x="5.313765"
+         y="94.580177"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="116.56095"
+       y="94.66819"
+       id="text5070-2-2-6-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-4-0"
+         x="116.56095"
+         y="94.66819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0)</tspan></text>
+    <g
+       id="g2002"
+       transform="matrix(1.5,0,0,1.5,-46.79366,-77.20566)">
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="38.289722"
+         id="path4517"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="48.873055"
+         id="path4517-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="59.456387"
+         id="path4517-78"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="70.039726"
+         id="path4517-7-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="80.623055"
+         id="path4517-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="38.289722"
+         id="path4517-5"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="48.873055"
+         id="path4517-7-8"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="59.456387"
+         id="path4517-78-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="70.039726"
+         id="path4517-7-9-2"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="80.623055"
+         id="path4517-0-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="90.74894"
+         cx="38.289722"
+         id="path4517-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="90.74894"
+         cx="48.873055"
+         id="path4517-7-87"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="91.20639"
+         id="path4517-78-70"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="101.78973"
+         id="path4517-7-9-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="69.582268"
+         cx="112.37305"
+         id="path4517-0-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="91.20639"
+         id="path4517-78-7-5"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="101.78973"
+         id="path4517-7-9-2-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="80.165604"
+         cx="112.37305"
+         id="path4517-0-0-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="90.74894"
+         cx="101.78973"
+         id="path4517-7-9-4-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="90.74894"
+         cx="112.37306"
+         id="path4517-0-6-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="38.256454"
+         id="path4517-56"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="48.83979"
+         id="path4517-7-2"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="59.423122"
+         id="path4517-78-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="70.006462"
+         id="path4517-7-9-8"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="80.58979"
+         id="path4517-0-70"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="38.256454"
+         id="path4517-5-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="48.83979"
+         id="path4517-7-8-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="59.423122"
+         id="path4517-78-7-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="70.006462"
+         id="path4517-7-9-2-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="80.58979"
+         id="path4517-0-0-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-90.751633"
+         cx="38.256454"
+         id="path4517-9-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-90.751633"
+         cx="48.83979"
+         id="path4517-7-87-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="91.173119"
+         id="path4517-78-70-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="101.75645"
+         id="path4517-7-9-7-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-111.9183"
+         cx="112.33977"
+         id="path4517-0-7-0"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="91.173119"
+         id="path4517-78-7-5-9"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="101.75645"
+         id="path4517-7-9-2-4-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-101.33495"
+         cx="112.33977"
+         id="path4517-0-0-0-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-90.751633"
+         cx="101.75645"
+         id="path4517-7-9-4-3-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+      <circle
+         transform="scale(1,-1)"
+         r="0.52778977"
+         cy="-90.751633"
+         cx="112.33979"
+         id="path4517-0-6-7-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555797;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 74.083339,27.124989 V 42.999975"
+       id="path9655-2-8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 89.95834,27.124989 V 42.999975"
+       id="path9655-2-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 105.83334,27.124989 V 42.999975"
+       id="path9655-2-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 26.458339,74.749989 V 90.624975"
+       id="path9655-2-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 42.33334,74.749989 V 90.624975"
+       id="path9655-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 58.20834,74.749989 V 90.624975"
+       id="path9655-2-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 74.083339,74.749989 V 90.624975"
+       id="path9655-2-88"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 89.95834,74.749989 V 90.624975"
+       id="path9655-2-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 105.83334,74.749989 V 90.624975"
+       id="path9655-2-23"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 105.83334,58.874988 h 15.87499"
+       id="path9693-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 105.83334,74.749989 h 15.87501"
+       id="path9693-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 10.58334,74.749989 H 26.458333"
+       id="path9693-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 10.58334,58.874988 H 26.458333"
+       id="path9693-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 26.458339,42.999989 c 79.375001,0 79.375001,0 79.375001,0 v 31.75 H 26.458339 v -31.75"
+       id="path2100"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g9727"
+       transform="matrix(1.5,0,0,1.5,-136.08449,-54.396465)">
+      <circle
+         r="0.52778977"
+         cy="64.922615"
+         cx="37.797619"
+         id="path4517-564"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="64.922615"
+         cx="48.380951"
+         id="path4517-7-24"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="64.922615"
+         cx="58.964283"
+         id="path4517-78-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="64.922615"
+         cx="69.547615"
+         id="path4517-7-9-77"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="64.922615"
+         cx="80.130943"
+         id="path4517-0-5"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="75.505951"
+         cx="37.797619"
+         id="path4517-5-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="75.505951"
+         cx="48.380951"
+         id="path4517-7-8-7"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="75.505951"
+         cx="58.964283"
+         id="path4517-78-7-8"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="75.505951"
+         cx="69.547615"
+         id="path4517-7-9-2-8"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="75.505951"
+         cx="80.130943"
+         id="path4517-0-0-1"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.089287"
+         cx="37.797619"
+         id="path4517-9-5"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.089287"
+         cx="48.380951"
+         id="path4517-7-87-3"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.089287"
+         cx="58.964283"
+         id="path4517-78-0-2"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.089287"
+         cx="69.547615"
+         id="path4517-7-9-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+      <circle
+         r="0.52778977"
+         cy="86.089287"
+         cx="80.130951"
+         id="path4517-0-6"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10555796;stroke-opacity:1" />
+    </g>
+    <rect
+       id="rect3703-2-4"
+       width="63.499992"
+       height="31.75"
+       x="-79.375"
+       y="42.999996"
+       style="opacity:0.88500001;fill:none;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -63.500001,42.999996 v 31.75"
+       id="path9655-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M -47.625,42.999995 V 74.749994"
+       id="path9655-4-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="M -31.749997,42.999995 V 74.749994"
+       id="path9655-2-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -31.749997,58.874995 h 15.874998"
+       id="path9693-62"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -63.500001,58.874995 h 31.749999"
+       id="path9695"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -79.375,58.874995 h 15.874999"
+       id="path9693-1-9"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="-84.45546"
+       y="41.088295"
+       id="text5070-2-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36"
+         x="-84.45546"
+         y="41.088295"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="-21.031706"
+       y="41.176315"
+       id="text5070-2-2-6-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-4-6"
+         x="-21.031706"
+         y="41.176315"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="-84.644569"
+       y="78.903603"
+       id="text5070-2-2-5-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4"
+         x="-84.644569"
+         y="78.903603"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="-21.220816"
+       y="78.991623"
+       id="text5070-2-2-6-0-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-4-0-3"
+         x="-21.220816"
+         y="78.991623"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="-52.295326"
+       y="85.413338"
+       id="text2799"><tspan
+         sodipodi:role="line"
+         id="tspan2797"
+         x="-52.295326"
+         y="85.413338"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">(a)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="61.65501"
+       y="101.37095"
+       id="text2799-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0"
+         x="61.65501"
+         y="101.37095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687496">(b)</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/innertri.svg b/codegen/vulkan/vulkan-docs-next/images/innertri.svg
new file mode 100644
index 0000000..0868a3f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/innertri.svg
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="180.51871mm"
+   height="75.629333mm"
+   viewBox="0 0 180.5187 75.629333"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="innertri.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="243.40083"
+     inkscape:cy="90.033505"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="66.42264"
+       originy="-193.13802" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(66.422641,-28.232645)">
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m -26.458331,61.520827 -15.875,23.812499 h 31.750001 z"
+       id="path5083"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="-33.922741"
+       y="44.355228"
+       id="text5070-2-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36"
+         x="-33.922741"
+         y="44.355228"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="-29.592077"
+       y="102.01035"
+       id="text2799"><tspan
+         sodipodi:role="line"
+         id="tspan2797"
+         x="-29.592077"
+         y="102.01035"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499">(a)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="65.757034"
+       y="99.802383"
+       id="text2799-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0"
+         x="65.757034"
+         y="99.802383"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499">(b)</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8"
+       cx="-26.461729"
+       cy="45.642532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6"
+       cx="-34.399227"
+       cy="57.548782"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-9"
+       cx="-42.336727"
+       cy="69.455032"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-99"
+       cx="-50.274231"
+       cy="81.361282"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7"
+       cx="58.204929"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-5"
+       cx="18.517424"
+       cy="57.548782"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-9-6"
+       cx="10.579925"
+       cy="69.45504"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-99-1"
+       cx="2.6424396"
+       cy="81.361282"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-4"
+       cx="5.2882776"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-44"
+       cx="42.329926"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-9"
+       cx="26.454931"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-7"
+       cx="10.579925"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M -26.458331,45.645828 C -58.20833,93.270825 -58.20833,93.270825 -58.20833,93.270825 H 5.2916687 Z"
+       id="path4959"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1"
+       cx="-26.461729"
+       cy="61.517532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4"
+       cx="-18.524229"
+       cy="73.423782"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9"
+       cx="-34.399231"
+       cy="-73.430374"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-1"
+       cx="-42.336735"
+       cy="-85.336624"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-4"
+       cx="10.57994"
+       cy="-85.336624"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-44-8"
+       cx="26.454931"
+       cy="-85.336624"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -18.520831,57.552077 -7.9375,3.96875"
+       id="path5087"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -10.58333,69.458327 -7.937501,3.96875"
+       id="path5089"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -2.6458313,81.364576 c -7.9374987,3.96875 -7.9374987,3.96875 -7.9374987,3.96875"
+       id="path5091"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -10.58333,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
+       id="path5093"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -26.458331,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
+       id="path5095"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -42.333331,93.270825 c 0,-7.937499 0,-7.937499 0,-7.937499"
+       id="path5097"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -50.27083,81.364576 c 7.937499,3.96875 7.937499,3.96875 7.937499,3.96875"
+       id="path5099"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -42.333331,69.458327 c 7.937501,3.96875 7.937501,3.96875 7.937501,3.96875"
+       id="path5101"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m -34.39583,57.552077 c 7.937499,3.96875 7.937499,3.96875 7.937499,3.96875"
+       id="path5103"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="-2.1713245"
+       y="97.675507"
+       id="text5070-2-2-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-1"
+         x="-2.1713245"
+         y="97.675507"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(1,0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="-65.716164"
+       y="97.612831"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="-65.716164"
+         y="97.612831"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="58.681427"
+       y="32.448986"
+       id="text5070-2-2-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-3"
+         x="58.681427"
+         y="32.448986"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,1,0)</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-1"
+       cx="66.142441"
+       cy="33.736286"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-3"
+       cx="58.204941"
+       cy="45.642536"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-9-2"
+       cx="50.267445"
+       cy="57.548786"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-99-3"
+       cx="42.329937"
+       cy="69.455032"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-99"
+       cx="-34.399239"
+       cy="-81.367874"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-5-5"
+       cx="-74.086746"
+       cy="45.642536"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-9-6-3"
+       cx="-82.024246"
+       cy="57.54879"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-99-1-9"
+       cx="-89.961716"
+       cy="69.455032"
+       r="0.79168469"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-7-4-3"
+       cx="97.892448"
+       cy="-81.367874"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-7"
+       cx="66.142441"
+       cy="49.611282"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2"
+       cx="74.079941"
+       cy="61.517532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9"
+       cx="58.204941"
+       cy="-61.524132"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-1-9"
+       cx="50.267433"
+       cy="-73.430374"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-4-8"
+       cx="-82.024231"
+       cy="-73.430374"
+       r="0.79168469"
+       transform="scale(-1)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 66.145837,61.520831 54.239585,79.380206 h 23.8125 z"
+       id="path5083-8-8"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-7-4"
+       cx="66.142441"
+       cy="61.517532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-2"
+       cx="54.236198"
+       cy="-79.395912"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-2-3"
+       cx="78.061111"
+       cy="-79.395912"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-7-7"
+       cx="50.267433"
+       cy="73.423782"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2-4"
+       cx="58.204929"
+       cy="85.33004"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-5"
+       cx="42.329937"
+       cy="-85.336632"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-7-45"
+       cx="82.017433"
+       cy="73.423782"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2-6"
+       cx="89.954933"
+       cy="85.330025"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-4"
+       cx="74.079948"
+       cy="-85.336632"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2-60"
+       cx="105.82993"
+       cy="93.267532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-45"
+       cx="89.954941"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2-7"
+       cx="42.329937"
+       cy="93.267525"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-1"
+       cx="26.454943"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-4-2-1"
+       cx="58.204937"
+       cy="93.267532"
+       r="0.79168469" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15833695;stroke-opacity:1"
+       id="path4517-78-7-8-8-6-1-9-9-20"
+       cx="74.079941"
+       cy="-93.274124"
+       r="0.79168469"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.39687499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 66.145834,49.614578 42.333335,85.333328 H 89.958334 Z"
+       id="path6079"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687499px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 66.145834,33.739578 26.458336,93.270827 h 79.374994 z"
+       id="path6081"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 74.083334,45.645828 -7.9375,3.96875 -7.937499,-3.96875 v 0"
+       id="path6083"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 50.270834,57.552078 7.937501,3.96875 h 7.937499 7.9375 l 7.937501,-3.96875"
+       id="path6085"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 89.958334,69.458328 -7.937499,3.96875 -3.968751,5.953125 -3.96875,5.953125 v 7.937499"
+       id="path6087"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 42.333335,69.458328 7.937499,3.96875 3.96875,5.953125 3.968751,5.953125 v 7.937499"
+       id="path6089"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 34.395835,81.364578 7.9375,3.96875 v 7.937499"
+       id="path6091"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5875,1.5875;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 97.895834,81.364578 -7.9375,3.96875 v 7.937499"
+       id="path6093"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="98.370346"
+       y="97.675514"
+       id="text5070-2-2-9-3-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-1-2"
+         x="98.370346"
+         y="97.675514"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(1,0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+       x="19.148937"
+       y="97.811272"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="19.148937"
+         y="97.811272"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39687499">(0,0,1)</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/micromap-subd.svg b/codegen/vulkan/vulkan-docs-next/images/micromap-subd.svg
new file mode 100644
index 0000000..6e2f54d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/micromap-subd.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg viewBox="73.923 107.251 327.192 209.593" width="327.192" height="209.593" xmlns="http://www.w3.org/2000/svg" xmlns:bx="https://boxy-svg.com">
+  <path d="M 148.794 172.547 L 213.338 301.635 L 84.25 301.635 L 148.794 172.547 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" bx:shape="triangle 84.25 172.547 129.088 129.088 0.5 0 1@2f5ba8d9"/>
+  <path d="M 148.654 -301.635 L 180.926 -237.952 L 116.382 -237.952 L 148.654 -301.635 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" transform="matrix(1, 0, 0, -1, 0, 0)" bx:shape="triangle 116.382 -301.635 64.544 63.683 0.5 0 1@2be11a3d"/>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="73.923" y="314.066">v0</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="209.465" y="312.775">v1</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="142.769" y="162.172">v2</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="110.497" y="284.376">0</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="145.642" y="261.279">1</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="180.205" y="284.376">2</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="145.2" y="220.262">3</text>
+  <path d="M 327.763 171.485 L 392.307 300.573 L 263.219 300.573 L 327.763 171.485 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" bx:shape="triangle 263.219 171.485 129.088 129.088 0.5 0 1@8ef7d94b"/>
+  <path d="M 327.623 -300.573 L 359.895 -236.89 L 295.351 -236.89 L 327.623 -300.573 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" transform="matrix(1, 0, 0, -1, 0, 0)" bx:shape="triangle 295.351 -300.573 64.544 63.683 0.5 0 1@9020b4f4"/>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="252.892" y="313.004">v0</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="388.434" y="311.713">v1</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 12px;" x="321.738" y="161.11">v2</text>
+  <path d="M 295.684 -300.573 L 312.107 -268.164 L 279.26 -268.164 L 295.684 -300.573 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" transform="matrix(1, 0, 0, -1, 0, 0)" bx:shape="triangle 279.26 -300.573 32.847 32.409 0.5 0 1@0507e9e0"/>
+  <path d="M 359.792 -300.416 L 376.215 -268.007 L 343.368 -268.007 L 359.792 -300.416 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" transform="matrix(1, 0, 0, -1, 0, 0)" bx:shape="triangle 343.368 -300.416 32.847 32.409 0.5 0 1@92a3e3ee"/>
+  <path d="M 327.879 -236.442 L 344.302 -204.033 L 311.455 -204.033 L 327.879 -236.442 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" transform="matrix(1, 0, 0, -1, 0, 0)" bx:shape="triangle 311.455 -236.442 32.847 32.409 0.5 0 1@fe99ef55"/>
+  <path d="M 327.799 235.644 L 344.223 268.053 L 311.376 268.053 L 327.799 235.644 Z" style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" bx:shape="triangle 311.376 235.644 32.847 32.409 0.5 0 1@30302937"/>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 309.186122, 249.271405)">4</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 325.397365, 259.078793)">5</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 341.893001, 248.702587)">6</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 325.112941, 281.40002)">7</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 276.19479, 291.656917)">0</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 292.415188, 280.702755)">1</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 310.030178, 292.923)">2</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 292.121639, 258.225582)">3</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 340.755366, 293.198238)">8</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 356.682215, 280.546779)">9</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 372.893458, 292.785366)">10</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 356.251033, 259.363186)">11</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 339.333308, 228.22543)">12</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 322.268855, 217.427197)">13</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 305.488796, 228.638287)">14</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.312849, 0, 0, 0.312846, 323.2597, 195.80325)">15</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.611032, 0, 0, 0.611027, 121.846228, 124.47064)">Level 1</text>
+  <text style="white-space: pre; fill: rgb(51, 51, 51); font-family: Arial, sans-serif; font-size: 28px;" transform="matrix(0.611032, 0, 0, 0.611027, 299.707607, 122.804205)">Level 2<tspan x="0" dy="1em">​</tspan></text>
+</svg>
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/images/non_strict_lines.svg b/codegen/vulkan/vulkan-docs-next/images/non_strict_lines.svg
new file mode 100644
index 0000000..0474685
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/non_strict_lines.svg
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="152.70503mm"
+   height="83.873383mm"
+   viewBox="0 0 152.70503 83.873383"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="non_strict_lines.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2639"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2637"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2320"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path2323"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="88.14801"
+     inkscape:cy="136.35995"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid815"
+       originx="-7.219306"
+       originy="-184.92629" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.2193063,-28.200331)">
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.52916664px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 32.980582,89.448147 133.52226,31.239815 V 52.406479 L 32.980582,110.61481 Z"
+       id="path817"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.52999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="M 32.980582,100.03148 133.52226,41.823147"
+       id="path819"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="76.729164"
+       y="61.520836"
+       id="text2799"><tspan
+         sodipodi:role="line"
+         id="tspan2797"
+         x="76.729164"
+         y="61.520836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">Edge 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="89.958336"
+       y="82.687508"
+       id="text2799-6"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0"
+         x="89.958336"
+         y="82.687508"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="134.9375"
+       y="32.416672"
+       id="text2799-4"><tspan
+         sodipodi:role="line"
+         id="tspan2797-02"
+         x="134.9375"
+         y="32.416672"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="31.75"
+       y="109.14584"
+       id="text2799-38"><tspan
+         sodipodi:role="line"
+         id="tspan2797-4"
+         x="31.75"
+         y="109.14584"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">Edge 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="27.599689"
+       y="101.60439"
+       id="text2799-67"
+       transform="rotate(-30.47281)"><tspan
+         sodipodi:role="line"
+         id="tspan2797-1"
+         x="27.599689"
+         y="101.60439"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Original</tspan><tspan
+         sodipodi:role="line"
+         x="27.599689"
+         y="106.89606"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664"
+         id="tspan1613">Line</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.21111594;stroke-opacity:1"
+       id="path4517-78-7-8-8-9"
+       cx="133.52223"
+       cy="41.823147"
+       r="1.0555795" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.21111594;stroke-opacity:1"
+       id="path4517-78-7-8-8-9-0"
+       cx="32.980579"
+       cy="100.03149"
+       r="1.0555795" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="136.16811"
+       y="41.823147"
+       id="text2799-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9"
+         x="136.16811"
+         y="41.823147"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">(Xb,Yb,Zb)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="30.334751"
+       y="100.03149"
+       id="text2799-3-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-1"
+         x="30.334751"
+         y="100.03149"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end;stroke-width:0.52916664">(Xa,Ya,Za)</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.52899997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58699992,1.58699992;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#marker2639)"
+       d="M 115.00141,41.823147 V 62.989813"
+       id="path2597"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.52916664"
+       x="104.41809"
+       y="33.885647"
+       id="text2799-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-7"
+         x="104.41809"
+         y="33.885647"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Line</tspan><tspan
+         sodipodi:role="line"
+         x="104.41809"
+         y="39.177315"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664"
+         id="tspan2695">Width</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pipeline.svg b/codegen/vulkan/vulkan-docs-next/images/pipeline.svg
new file mode 100644
index 0000000..185b58a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pipeline.svg
@@ -0,0 +1,1493 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="pipeline.svg"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 774.4707 418"
+   height="418"
+   width="774.4707">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2114"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2112"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1864"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1862"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18097"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path18095"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17835"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path17833"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17291"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path17289"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker16647"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path16645"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker16189"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path16187"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker15937"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path15935" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker12928"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path12926" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11520"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11518"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11322"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11320" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11128"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11126"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10596"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10594"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9866"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9864" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9512"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9510" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8090"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8088"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker7360"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path7358" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7066"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path7064"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5106"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5104" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7066-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path7064-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7208-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path7206-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8-44" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Mstart-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1382-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5200-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5198-1" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01-3-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8-44-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-2" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-0-51"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-2-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9512-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9510-3" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     height="7.5in"
+     inkscape:object-nodes="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="true"
+     units="in"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     showguides="false"
+     inkscape:window-maximized="1"
+     inkscape:window-y="-6"
+     inkscape:window-x="1913"
+     inkscape:window-height="1018"
+     inkscape:window-width="1920"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-center="true"
+     showgrid="false"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="203.20933"
+     inkscape:cx="417.84294"
+     inkscape:zoom="1.4142136"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       originy="-783.5"
+       originx="152.97068"
+       id="grid817"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(37.965418,2.1124474)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       y="269.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="159.38759"
+       x="-24.994741"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="129.38759"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="99.387589"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="59.387589"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="-0.6124118"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="29.387552"
+       x="-24.994738"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.9011"
+       y="74.351746"
+       id="text823"><tspan
+         sodipodi:role="line"
+         x="84.9011"
+         y="74.351746"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825">Vertex Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.634171"
+       y="14.133646"
+       id="text823-4"><tspan
+         sodipodi:role="line"
+         x="84.634171"
+         y="14.133646"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6">Draw</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.539764"
+       y="43.111511"
+       id="text823-4-2"><tspan
+         sodipodi:role="line"
+         x="84.539764"
+         y="43.111511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0">Input Assembler</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.985733"
+       y="114.35175"
+       id="text823-7"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="114.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4">Tessellation Control Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.985733"
+       y="144.35175"
+       id="text823-4-2-6-3"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="144.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-1-5">Tessellation Primitive Generator</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.985733"
+       y="174.35175"
+       id="text823-7-0"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="174.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-7">Tessellation Evaluation Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.930397"
+       y="284.1662"
+       id="text823-4-2-8"><tspan
+         sodipodi:role="line"
+         x="84.930397"
+         y="284.1662"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-9">Rasterization</tspan></text>
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path4474"
+       d="m 85.005262,89.387553 -119.999999,-10e-7 V 229.38755 h 120"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5106)" />
+    <rect
+       y="-0.61244744"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.53976"
+       y="14.384297"
+       id="text823-4-2-9-4-7"><tspan
+         sodipodi:role="line"
+         x="354.53976"
+         y="14.384297"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6">Indirect Buffer</tspan></text>
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path7350"
+       d="m 235.00526,309.38755 v 60 h -40"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7360)" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path8837"
+       d="m 245.00526,344.38755 h -5 v -5 h -10 v 5 h -35"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8090)" />
+    <rect
+       y="99.38755"
+       x="245.00526"
+       height="146.36409"
+       width="220"
+       id="rect8983"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.941836;stroke-miterlimit:4;stroke-dasharray:3.76734, 3.76734;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.63092"
+       y="112.9813"
+       id="text823-4-2-9-4-7-9-85"><tspan
+         sodipodi:role="line"
+         x="354.63092"
+         y="112.9813"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-7">Descriptor Sets</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path7056-3"
+       d="m 245.00526,399.38755 h -50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066-0);marker-end:url(#marker7208-7)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9502"
+       d="m 245.00526,9.3875524 h -50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9856"
+       d="m 245.00526,44.387553 h -50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9866)" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path10568"
+       d="m 245.00526,309.38755 h -20 v -5 h -10 v 5 h -20"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066);marker-end:url(#marker10596)" />
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path11116"
+       d="m 245.00526,64.387553 h -25 v -20"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11118"
+       d="m 220.00526,109.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11128)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11312"
+       d="m 220.00526,169.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11322)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11510"
+       d="m 220.00526,209.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11520)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path15909"
+       d="m 195.00526,334.38755 h 25 V 69.387553 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker12928);marker-end:url(#marker15937)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16167"
+       d="m 250.00526,129.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16169"
+       d="m 250.00526,149.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16171"
+       d="m 250.00526,169.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16173"
+       d="m 250.00526,189.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1864)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16175"
+       d="m 220.00526,209.38755 h 30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16647)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16177"
+       d="m 220.00526,229.38755 h 30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16189)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16179"
+       d="m 220.00526,268.58504 h 30"
+       style="fill:none;stroke:#000000;stroke-width:1.07702;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033)"
+       d="M 625.00526,19.387552 V 169.38755"
+       id="path17023"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17291)"
+       d="m 490.00526,179.38755 h 25"
+       id="path17281"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:1.07702;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 460.00526,129.38755 h 30 v 139.19749 h -30"
+       id="path17547"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 460.00526,149.38755 h 30"
+       id="path17817"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 460.00526,169.38755 h 30"
+       id="path17819"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2114)"
+       d="m 460.00526,189.38755 h 30"
+       id="path17821"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker18097)"
+       d="m 460.00526,209.38755 h 30"
+       id="path17823"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17835)"
+       d="m 460.00526,229.38755 h 30"
+       id="path17825"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="299.38754"
+       x="515.00525"
+       height="115.00001"
+       width="220.00002"
+       id="rect8983-1"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="624.95642"
+       y="318.07571"
+       id="text823-4-2-9-4-7-9-85-3"><tspan
+         sodipodi:role="line"
+         x="624.95642"
+         y="318.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3)"
+       d="m 85.005263,19.387552 v 9.728741"
+       id="path17023-1"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01)"
+       d="m 85.005263,79.387552 v 20"
+       id="path17023-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37)"
+       d="m 85.005263,49.387552 v 9.728741"
+       id="path17023-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7)"
+       d="m 85.005263,119.38755 v 9.72874"
+       id="path17023-1-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8)"
+       d="m 85.005263,149.52318 v 9.72874"
+       id="path17023-1-4-0-9"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="199.38759"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8-4"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.611382"
+       y="213.11151"
+       id="text823-7-9-09"><tspan
+         sodipodi:role="line"
+         x="84.611382"
+         y="213.11151"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-0-5">Geometry Shader</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3)"
+       d="m 85.005265,179.38755 v 20"
+       id="path17023-1-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4476-0"
+       d="m 85.005263,189.38755 h -120"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)" />
+    <rect
+       y="239.38759"
+       x="-24.994741"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="85.522842"
+       y="252.89015"
+       id="text823-4-8-5"><tspan
+         sodipodi:role="line"
+         x="85.522842"
+         y="252.89015"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-9-2">Vertex Post-Processing</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3-1)"
+       d="m 85.005263,219.38755 v 20"
+       id="path17023-1-3-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7)"
+       d="m 85.005265,259.52318 v 9.72874"
+       id="path17023-1-4-0-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7)"
+       d="m 85.005265,289.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="299.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="329.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8-4-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-5)"
+       d="m 85.005265,319.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0)"
+       d="m 85.005265,349.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-3"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.63092"
+       y="313.07571"
+       id="text823-4-5-3"><tspan
+         sodipodi:role="line"
+         x="84.63092"
+         y="313.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-7-4">Early Per-Fragment Tests</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.334686"
+       y="343.07571"
+       id="text823-7-9-0-6"><tspan
+         sodipodi:role="line"
+         x="84.334686"
+         y="343.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-0-0-3">Fragment Shader</tspan></text>
+    <rect
+       y="359.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.63092"
+       y="372.8576"
+       id="text823-4-5-5-7"><tspan
+         sodipodi:role="line"
+         x="84.63092"
+         y="372.8576"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-7-7-9">Late Per-Fragment Tests</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0-51)"
+       d="m 85.005265,379.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-3-2"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="389.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1-2-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.956436"
+       y="403.07571"
+       id="text823-4-2-9-4-3"><tspan
+         sodipodi:role="line"
+         x="84.956436"
+         y="403.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-4">Blending</tspan></text>
+    <rect
+       y="59.387554"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-0"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="39.387554"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.53976"
+       y="54.384296"
+       id="text823-4-2-9-4-7-1"><tspan
+         sodipodi:role="line"
+         x="354.53976"
+         y="54.384296"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-2">Index Buffer</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="355.19733"
+       y="74.3843"
+       id="text823-4-2-9-4-7-3"><tspan
+         sodipodi:role="line"
+         x="355.19733"
+         y="74.3843"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-9">Vertex Buffers</tspan></text>
+    <rect
+       y="258.88147"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="118.88145"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-2"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="138.88144"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-3"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="158.88144"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-1"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="178.88147"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-34"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="198.88147"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-7"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="218.88147"
+       x="250.00526"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-5"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.63092"
+       y="273.84564"
+       id="text823-4-2-9-4-7-9-65"><tspan
+         sodipodi:role="line"
+         x="354.63092"
+         y="273.84564"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-92">Push Constants</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.70255"
+       y="133.87819"
+       id="text823-4-2-9-4-7-9-3-0"><tspan
+         sodipodi:role="line"
+         x="354.70255"
+         y="133.87819"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-9-7">Uniform Buffers</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.70255"
+       y="153.87819"
+       id="text823-4-2-9-4-7-9-2-2"><tspan
+         sodipodi:role="line"
+         x="354.70255"
+         y="153.87819"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-4-3">Uniform Texel Buffers</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84579"
+       y="172.5696"
+       id="text823-4-2-9-4-7-9-8-2"><tspan
+         sodipodi:role="line"
+         x="354.84579"
+         y="172.5696"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-1">Sampled Images</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84579"
+       y="192.60216"
+       id="text823-4-2-9-4-7-9-8-0-8"><tspan
+         sodipodi:role="line"
+         x="354.84579"
+         y="192.60216"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-4-5">Storage Buffers</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84579"
+       y="212.60216"
+       id="text823-4-2-9-4-7-9-8-8-1"><tspan
+         sodipodi:role="line"
+         x="354.84579"
+         y="212.60216"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-5-5">Storage Texel Buffers</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84579"
+       y="232.43939"
+       id="text823-4-2-9-4-7-9-8-05-4"><tspan
+         sodipodi:role="line"
+         x="354.84579"
+         y="232.43939"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6">Storage Images</tspan></text>
+    <rect
+       y="169.38756"
+       x="515.00525"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="624.90112"
+       y="184.35172"
+       id="text823-0"><tspan
+         sodipodi:role="line"
+         x="624.90112"
+         y="184.35172"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-8">Compute Shader</tspan></text>
+    <rect
+       y="-0.61240721"
+       x="515.00525"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-6"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="624.93042"
+       y="13.11151"
+       id="text823-4-0"><tspan
+         sodipodi:role="line"
+         x="624.93042"
+         y="13.11151"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-2">Dispatch</tspan></text>
+    <rect
+       y="299.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="312.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="312.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4">Depth/Stencil Attachments</tspan></text>
+    <rect
+       y="329.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6-4"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="342.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5-3"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="342.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-0">Input Attachments</tspan></text>
+    <rect
+       y="389.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6-2"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="402.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5-6"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="402.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-6">Color Attachments</tspan></text>
+    <rect
+       y="329.38754"
+       x="520.00525"
+       height="20.00001"
+       width="210.00002"
+       id="rect815-1-26"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="624.63416"
+       y="344.13358"
+       id="text823-4-8"><tspan
+         sodipodi:role="line"
+         x="624.63416"
+         y="344.13358"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-1">Fixed Function Stage</tspan></text>
+    <rect
+       y="359.38754"
+       x="520.00525"
+       height="20.00001"
+       width="210.00002"
+       id="rect815-1-2-3-0-5"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.895741;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="624.61139"
+       y="373.11151"
+       id="text823-0-2"><tspan
+         sodipodi:role="line"
+         x="624.61139"
+         y="373.11151"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-8-5">Shader Stage</tspan></text>
+    <rect
+       y="389.38757"
+       x="520.00525"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-5-0"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="624.84583"
+       y="402.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-9"><tspan
+         sodipodi:role="line"
+         x="624.84583"
+         y="402.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-42">Resource</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9502-7"
+       d="m 465.00526,9.3875526 h 50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2)" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pipelinemesh.svg b/codegen/vulkan/vulkan-docs-next/images/pipelinemesh.svg
new file mode 100644
index 0000000..5de7c80
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pipelinemesh.svg
@@ -0,0 +1,1778 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="pipelinemesh.svg"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 874.4707 448"
+   height="448"
+   width="874.4707">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2213"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2211"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1903"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1901"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker19523"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path19521"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker15681"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path15679"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker15357"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path15355"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker15027"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path15025"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11209"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11207"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10921"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10919"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker10639"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path10637"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10363"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10361"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9769"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path9767"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9511"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9509"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18097"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path18095"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17835"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path17833"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17291"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path17289"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker16647"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path16645"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker16189"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path16187"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker15937"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path15935" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker12928"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path12926" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11520"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11518"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11322"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11320" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11128"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11126"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10596"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10594"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9866"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9864" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9512"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9510" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8090"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8088"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker7360"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path7358" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7066"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path7064"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5106"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5104" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7066-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path7064-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7208-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path7206-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8-44" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Mstart-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1382-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5200-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5198-1" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-01-3-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-8-44-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-2" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17033-3-37-7-8-7-7-0-51"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path17031-7-0-9-7-8-5-2-5" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9512-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path9510-3" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     height="7.5in"
+     inkscape:object-nodes="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="true"
+     units="in"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     showguides="false"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="1920"
+     inkscape:window-height="1045"
+     inkscape:window-width="1920"
+     inkscape:snap-text-baseline="false"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-center="true"
+     showgrid="false"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="137.7283"
+     inkscape:cx="495.11654"
+     inkscape:zoom="2"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       originy="-753.5"
+       originx="152.97068"
+       id="grid817"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(37.965418,2.1124474)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       y="299.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="179.38759"
+       x="-24.994741"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="149.38759"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="119.38759"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="79.387589"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="-0.6124118"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="49.38755"
+       x="-24.994738"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.9011"
+       y="94.351753"
+       id="text823"><tspan
+         sodipodi:role="line"
+         x="84.9011"
+         y="94.351753"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825">Vertex Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.634171"
+       y="14.133646"
+       id="text823-4"><tspan
+         sodipodi:role="line"
+         x="84.634171"
+         y="14.133646"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6">Draw</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.539764"
+       y="63.111511"
+       id="text823-4-2"><tspan
+         sodipodi:role="line"
+         x="84.539764"
+         y="63.111511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0">Input Assembler</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.985733"
+       y="134.35175"
+       id="text823-7"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="134.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4">Tessellation Control Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.985733"
+       y="164.35175"
+       id="text823-4-2-6-3"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="164.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-1-5">Tessellation Primitive Generator</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.985733"
+       y="194.35175"
+       id="text823-7-0"><tspan
+         sodipodi:role="line"
+         x="84.985733"
+         y="194.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-7">Tessellation Evaluation Shader</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.930397"
+       y="314.1662"
+       id="text823-4-2-8"><tspan
+         sodipodi:role="line"
+         x="84.930397"
+         y="314.1662"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-9">Rasterization</tspan></text>
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path4474"
+       d="M 85.005262,109.38755 H -34.994737 v 140 h 120"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5106)" />
+    <rect
+       y="-0.61244744"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.53976"
+       y="14.384297"
+       id="text823-4-2-9-4-7"><tspan
+         sodipodi:role="line"
+         x="354.53976"
+         y="14.384297"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6">Indirect Buffer</tspan></text>
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path7350"
+       d="m 235.00526,339.38755 v 60 h -40"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7360)" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path8837"
+       d="m 245.00526,374.38755 h -5 v -5 h -10 v 5 h -35"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8090)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path7056-3"
+       d="m 245.00526,429.38755 h -50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066-0);marker-end:url(#marker7208-7)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9502"
+       d="m 245.00526,9.3875524 h -50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9856"
+       d="m 220.00526,59.387553 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9866)" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path10568"
+       d="m 245.00526,339.38755 h -20 v -5 h -10 v 5 h -20"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7066);marker-end:url(#marker10596)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path11116"
+       d="m 245.00526,49.387553 h -25 v 20 h 25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11118"
+       d="m 220.00526,129.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11128)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11312"
+       d="m 220.00526,189.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11322)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path11510"
+       d="m 220.00526,229.38755 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11520)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path15909"
+       d="m 195.00526,364.38755 h 25 V 89.387553 h -25"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker12928);marker-end:url(#marker15937)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16167"
+       d="m 250.00526,129.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16169"
+       d="m 250.00526,149.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16171"
+       d="m 250.00526,169.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16173"
+       d="m 250.00526,189.38755 h -30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker2213)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16175"
+       d="m 220.00526,209.38755 h 30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16647)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16177"
+       d="m 220.00526,229.38755 h 30"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker16189)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path16179"
+       d="m 220.04201,264.11534 h 29.99185"
+       style="fill:none;stroke:#000000;stroke-width:1.059;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:" />
+    <path
+       sodipodi:nodetypes="ccccccc"
+       style="fill:none;stroke:#000000;stroke-width:1.02551627;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17291)"
+       d="M 490.00526,129.38755 V 59.387553 h 90 v -5 h 10 v 5 h 105"
+       id="path17281"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:1.05936;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:"
+       d="m 459.97679,129.40988 h 29.99185 v 134.70546 h -29.99185"
+       id="path17547"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 460.00526,149.38755 h 30"
+       id="path17817"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 460.00526,169.38755 h 30"
+       id="path17819"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1903)"
+       d="m 460.00526,189.38755 h 30"
+       id="path17821"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker18097)"
+       d="m 460.00526,209.38755 h 30"
+       id="path17823"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17835)"
+       d="m 460.00526,229.38755 h 30"
+       id="path17825"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="329.38754"
+       x="615.00525"
+       height="115.00001"
+       width="220.00002"
+       id="rect8983-1"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="724.95642"
+       y="348.07571"
+       id="text823-4-2-9-4-7-9-85-3"><tspan
+         sodipodi:role="line"
+         x="724.95642"
+         y="348.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3)"
+       d="m 85.005262,19.387553 10e-7,29.72874"
+       id="path17023-1"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01)"
+       d="m 85.005263,99.38755 v 20"
+       id="path17023-1-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37)"
+       d="m 85.005263,69.387552 v 9.728741"
+       id="path17023-1-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7)"
+       d="m 85.005263,139.38755 v 9.72874"
+       id="path17023-1-4-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8)"
+       d="m 85.005263,169.52318 v 9.72874"
+       id="path17023-1-4-0-9"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="219.38759"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8-4"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.611382"
+       y="233.11151"
+       id="text823-7-9-09"><tspan
+         sodipodi:role="line"
+         x="84.611382"
+         y="233.11151"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-0-5">Geometry Shader</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3)"
+       d="m 85.005265,199.38755 v 20"
+       id="path17023-1-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4476-0"
+       d="m 85.005263,209.38755 h -120"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)" />
+    <rect
+       y="269.38757"
+       x="-24.994741"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="85.522842"
+       y="282.89014"
+       id="text823-4-8-5"><tspan
+         sodipodi:role="line"
+         x="85.522842"
+         y="282.89014"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-9-2">Vertex Post-Processing</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-01-3-1)"
+       d="m 85.005263,239.38755 v 20"
+       id="path17023-1-3-2-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7)"
+       d="m 85.005265,289.52318 v 9.72874"
+       id="path17023-1-4-0-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7)"
+       d="m 85.005265,319.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="329.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="359.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-3-9-8-4-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-5)"
+       d="m 85.005265,349.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0)"
+       d="m 85.005265,379.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-3"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.63092"
+       y="343.07571"
+       id="text823-4-5-3"><tspan
+         sodipodi:role="line"
+         x="84.63092"
+         y="343.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-7-4">Early Per-Fragment Tests</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="84.334686"
+       y="373.07571"
+       id="text823-7-9-0-6"><tspan
+         sodipodi:role="line"
+         x="84.334686"
+         y="373.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-4-0-0-3">Fragment Shader</tspan></text>
+    <rect
+       y="389.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.63092"
+       y="402.8576"
+       id="text823-4-5-5-7"><tspan
+         sodipodi:role="line"
+         x="84.63092"
+         y="402.8576"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-7-7-9">Late Per-Fragment Tests</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87524033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker17033-3-37-7-8-7-7-0-51)"
+       d="m 85.005265,409.52318 v 9.72874"
+       id="path17023-1-4-0-9-1-8-3-2"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="419.3876"
+       x="-24.994745"
+       height="19.999928"
+       width="220.00002"
+       id="rect815-1-2-1-2-4-1-2-2"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="84.956436"
+       y="433.07571"
+       id="text823-4-2-9-4-3"><tspan
+         sodipodi:role="line"
+         x="84.956436"
+         y="433.07571"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-4">Blending</tspan></text>
+    <rect
+       y="59.387554"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-0"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="39.387554"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.53976"
+       y="54.384296"
+       id="text823-4-2-9-4-7-1"><tspan
+         sodipodi:role="line"
+         x="354.53976"
+         y="54.384296"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-2">Index Buffer</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="355.19733"
+       y="74.3843"
+       id="text823-4-2-9-4-7-3"><tspan
+         sodipodi:role="line"
+         x="355.19733"
+         y="74.3843"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-9">Vertex Buffers</tspan></text>
+    <rect
+       y="119.38759"
+       x="515.00525"
+       height="19.999928"
+       width="140.00005"
+       id="rect815-1-2-3-0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="584.98572"
+       y="134.35175"
+       id="text823-0"><tspan
+         sodipodi:role="line"
+         x="584.98572"
+         y="134.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-8">Task Shader</tspan></text>
+    <rect
+       y="-0.61240721"
+       x="515.00525"
+       height="19.999928"
+       width="140.00005"
+       id="rect815-1-6"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="584.93042"
+       y="13.111511"
+       id="text823-4-0"><tspan
+         sodipodi:role="line"
+         x="584.93042"
+         y="13.111511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-2">DrawMeshTasks</tspan></text>
+    <rect
+       y="329.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="342.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="342.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4">Depth/Stencil Attachments</tspan></text>
+    <rect
+       y="359.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6-4"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="372.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5-3"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="372.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-0">Input Attachments</tspan></text>
+    <rect
+       y="419.38754"
+       x="245.00526"
+       height="20"
+       width="220"
+       id="rect815-1-4-3-6-1-6-6-2"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="354.84576"
+       y="432.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-5-6"><tspan
+         sodipodi:role="line"
+         x="354.84576"
+         y="432.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-6">Color Attachments</tspan></text>
+    <rect
+       y="359.38754"
+       x="620.00525"
+       height="20.00001"
+       width="210.00002"
+       id="rect815-1-26"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="724.63416"
+       y="374.13358"
+       id="text823-4-8"><tspan
+         sodipodi:role="line"
+         x="724.63416"
+         y="374.13358"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-1">Fixed Function Stage</tspan></text>
+    <rect
+       y="389.38754"
+       x="620.00525"
+       height="20.00001"
+       width="210.00002"
+       id="rect815-1-2-3-0-5"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="724.61139"
+       y="403.11151"
+       id="text823-0-2"><tspan
+         sodipodi:role="line"
+         x="724.61139"
+         y="403.11151"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-8-5">Shader Stage</tspan></text>
+    <rect
+       y="419.38757"
+       x="620.00525"
+       height="19.999994"
+       width="210.00002"
+       id="rect815-1-4-3-6-1-6-7-5-0"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="724.84583"
+       y="432.9455"
+       id="text823-4-2-9-4-7-9-8-05-4-9"><tspan
+         sodipodi:role="line"
+         x="724.84583"
+         y="432.9455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-2-5-6-26-5-3-6-42"> Resource</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9502-7"
+       d="m 465.00526,9.3875526 h 50"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2)" />
+    <rect
+       y="49.387558"
+       x="695.00519"
+       height="19.999928"
+       width="140.00005"
+       id="rect815-1-2-3-0-0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+       x="764.61139"
+       y="63.111511"
+       id="text823-0-5"><tspan
+         sodipodi:role="line"
+         x="764.61139"
+         y="63.111511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke:none;stroke-width:1.27;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan825-8-6">Compute Shader</tspan></text>
+    <rect
+       y="-0.61240697"
+       x="695.00519"
+       height="19.999928"
+       width="140.00005"
+       id="rect815-1-6-0"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="764.93036"
+       y="13.111515"
+       id="text823-4-0-3"><tspan
+         sodipodi:role="line"
+         x="764.93036"
+         y="13.111515"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-2-2">Dispatch</tspan></text>
+    <rect
+       y="219.38757"
+       x="514.35425"
+       height="19.999928"
+       width="140.00005"
+       id="rect815-1-2-3-0-8"
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <rect
+       y="89.387589"
+       x="515.00525"
+       height="19.999928"
+       width="140.00002"
+       id="rect815-1-2-9"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="584.98572"
+       y="104.35175"
+       id="text823-4-2-83"><tspan
+         sodipodi:role="line"
+         x="584.98572"
+         y="104.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-4">Task Assembler</tspan></text>
+    <rect
+       y="189.38757"
+       x="514.35425"
+       height="19.999928"
+       width="140.00002"
+       id="rect815-1-2-9-1"
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="584.33472"
+       y="204.35175"
+       id="text823-4-2-83-4"><tspan
+         sodipodi:role="line"
+         x="584.33472"
+         y="204.35175"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-4-8">Mesh Assembler</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       x="583.68372"
+       y="234.35173"
+       id="text823-4-2-83-4-8"><tspan
+         sodipodi:role="line"
+         x="583.68372"
+         y="234.35173"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         id="tspan825-6-0-4-8-9">Mesh Shader</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path9501"
+       d="m 585.00526,19.387553 v 70"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9511)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path9759"
+       d="m 585.00526,109.38755 v 10"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9769)" />
+    <path
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0"
+       id="path10353"
+       d="m 585.00526,79.387553 h 80 v 69.999997 h -80"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10363)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path10629"
+       d="m 585.00526,139.38755 v 50"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10639)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path10911"
+       d="m 584.3542,209.38753 v 10"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10921)" />
+    <path
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0"
+       id="path11199"
+       d="m 585.00526,239.38755 v 40 h -360 v -5 h -10 v 5 h -20"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker11209)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path15017"
+       d="M 490.00526,9.3875526 V 29.387553 h 90 v -5 h 10 v 5 h 85 V 9.3875526 h 20"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15027)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path15347"
+       d="m 490.00526,129.38755 23.98327,-0.0793"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15357)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path15671"
+       d="m 489.3542,229.38753 24.69038,0.0769"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15681)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path21617"
+       d="m 760.00526,19.387553 0,30"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker19523)" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.941836;stroke-miterlimit:4;stroke-dasharray:3.76734, 3.76734;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect8983"
+       width="220"
+       height="146.36409"
+       x="245.00526"
+       y="99.893654" />
+    <text
+       id="text823-4-2-9-4-7-9-85"
+       y="113.4874"
+       x="354.63092"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-7"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="113.4874"
+         x="354.63092"
+         sodipodi:role="line">Descriptor Sets</tspan></text>
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="253.38757" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-2"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="119.38755" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-3"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="139.38754" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-1"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="159.38754" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-34"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="179.38756" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-7"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="199.38757" />
+    <rect
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-4-3-6-1-6-7-5"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="219.38757" />
+    <text
+       id="text823-4-2-9-4-7-9-65"
+       y="268.35175"
+       x="354.63092"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-92"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="268.35175"
+         x="354.63092"
+         sodipodi:role="line">Push Constants</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-3-0"
+       y="134.38431"
+       x="354.70255"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-9-7"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="134.38431"
+         x="354.70255"
+         sodipodi:role="line">Uniform Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-2-2"
+       y="154.38429"
+       x="354.70255"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-4-3"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="154.38429"
+         x="354.70255"
+         sodipodi:role="line">Uniform Texel Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-2"
+       y="173.0757"
+       x="354.84579"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-1"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="173.0757"
+         x="354.84579"
+         sodipodi:role="line">Sampled Images</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-0-8"
+       y="193.10826"
+       x="354.84579"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-4-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="193.10826"
+         x="354.84579"
+         sodipodi:role="line">Storage Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-8-1"
+       y="213.10826"
+       x="354.84579"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-5-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="213.10826"
+         x="354.84579"
+         sodipodi:role="line">Storage Texel Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4"
+       y="232.94551"
+       x="354.84579"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.27"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:1.27"
+         y="232.94551"
+         x="354.84579"
+         sodipodi:role="line">Storage Images</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x1.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x1.svg
new file mode 100644
index 0000000..badc184
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x1.svg
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_1x1.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 27.77969 26.901191"
+   height="101.67381"
+   width="104.99409">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1018"
+     inkscape:window-width="960"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="13.121973"
+     inkscape:cx="4.4991286"
+     inkscape:zoom="2.0930361"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-89.436898"
+       originx="-20.366723"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,-11.729621)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.854018,12.251027 18.520828,1.8e-5 v 18.520833 l -18.520817,-0.001 -1.1e-5,-18.519799"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(-22.751249,-5.5676023)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 6.614579,10e-4 m 5.291666,0 6.614583,-9.1e-5"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       transform="translate(0.83905268,0.28766514)"
+       id="g545">
+      <g
+         transform="translate(-3.7341421,26.933758)"
+         id="g277">
+        <text
+           id="text121-3-7-8"
+           y="-4.0993972"
+           x="35.296494"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
+             y="-4.0993972"
+             x="35.296494"
+             id="tspan119-1-8-3"
+             sodipodi:role="line">y</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="33.31522"
+           y="-4.6513033"
+           id="text121-3-7-8-9"><tspan
+             sodipodi:role="line"
+             id="tspan239"
+             x="33.31522"
+             y="-4.6513033">f</tspan></text>
+      </g>
+    </g>
+    <text
+       transform="scale(0.98828059,1.0118584)"
+       style="stroke-width:0.00380337"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.779236"
+       x="45.329342">0</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x2.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x2.svg
new file mode 100644
index 0000000..5ae23af
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x2.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_1x2.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 27.779696 45.528409"
+   height="172.07588"
+   width="104.99412">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     showguides="false"
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="954"
+     inkscape:window-height="1010"
+     inkscape:window-width="958"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="-15.114603"
+     inkscape:cx="29.873733"
+     inkscape:zoom="1.48"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-70.809709"
+       originx="-20.366718"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,6.8975958)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.854017,-6.2698068 h 18.520834 l 10e-7,37.0416328 -18.520823,-0.001 -1.2e-5,-37.0406328 m 18.520835,18.5208318 -18.520823,-10e-4"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(-22.751244,-5.5676207)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 6.614584,10e-4 m 5.291667,0 6.614583,-6.3e-5"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="m 31.562353,30.77186 -3e-6,-15.875 m 0,-5.2916663 4e-6,-15.8750005"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g277"
+       transform="translate(-2.8950905,17.961006)">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="35.296494"
+         y="-4.0993972"
+         id="text121-3-7-8"><tspan
+           sodipodi:role="line"
+           id="tspan119-1-8-3"
+           x="35.296494"
+           y="-4.0993972"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
+      <text
+         id="text121-3-7-8-9"
+         y="-4.6513033"
+         x="33.31522"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="-4.6513033"
+           x="33.31522"
+           id="tspan239"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.674101"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4754329"
+       x="45.329346">1</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x4.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x4.svg
new file mode 100644
index 0000000..87e8f78
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_1x4.svg
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_1x4.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 27.779696 82.720522"
+   height="312.6445"
+   width="104.99412">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="954"
+     inkscape:window-height="1010"
+     inkscape:window-width="958"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="285.32692"
+     inkscape:cx="152.58531"
+     inkscape:zoom="1.48"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-33.617598"
+       originx="-20.366717"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,44.089711)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.85402,-43.312509 18.520832,10e-4 v 74.083335 l -18.520823,-0.001 -9e-6,-74.083337 m 18.520832,55.563536 -18.520823,-10e-4 m -7e-6,-18.5208395 18.52083,0.00101 m 0,-18.5208335 -18.52083,-9.73e-4"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(-22.751244,-5.5676207)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 6.614584,10e-4 m 5.291667,0 6.614583,-6.3e-5"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g277"
+       transform="translate(-2.9074896,-0.27595285)">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="35.296494"
+         y="-4.0993972"
+         id="text121-3-7-8"><tspan
+           sodipodi:role="line"
+           id="tspan119-1-8-3"
+           x="35.296494"
+           y="-4.0993972"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
+      <text
+         id="text121-3-7-8-9"
+         y="-4.6513033"
+         x="33.31522"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="-4.6513033"
+           x="33.31522"
+           id="tspan239"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.525417"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.3267488"
+       x="45.329346">1</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-13.977032"
+       x="45.32935">2</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.385925"
+       x="45.329346">3</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x1.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x1.svg
new file mode 100644
index 0000000..6a9ee26
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x1.svg
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_2x1.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 46.406909 26.901191"
+   height="101.67381"
+   width="175.39618">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1018"
+     inkscape:window-width="960"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="-37.066166"
+     inkscape:cx="161.67627"
+     inkscape:zoom="1.48"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-89.436907"
+       originx="-20.366719"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,-11.729621)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.854018,12.251027 37.041663,9e-6 v 18.520833 l -37.041652,-10e-4 -1.1e-5,-18.519799 m 18.520834,0 1.1e-5,18.519799"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(-13.49083,-5.5676114)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 15.874997,10e-4 m 5.291667,0 15.874999,-4.1e-5"
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       transform="translate(0.83905268,0.28766514)"
+       id="g545">
+      <g
+         transform="translate(-3.7341421,26.933758)"
+         id="g277">
+        <text
+           id="text121-3-7-8"
+           y="-4.0993972"
+           x="35.296494"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
+             y="-4.0993972"
+             x="35.296494"
+             id="tspan119-1-8-3"
+             sodipodi:role="line">y</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="33.31522"
+           y="-4.6513033"
+           id="text121-3-7-8-9"><tspan
+             sodipodi:role="line"
+             id="tspan239"
+             x="33.31522"
+             y="-4.6513033">f</tspan></text>
+      </g>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.779236"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.884348"
+       x="64.069801">1</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x2.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x2.svg
new file mode 100644
index 0000000..67474cf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x2.svg
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="175.39619"
+   height="172.07588"
+   viewBox="0 0 46.406913 45.528409"
+   version="1.1"
+   id="svg8"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="pixel_index_2x2.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.48"
+     inkscape:cx="169.6136"
+     inkscape:cy="69.828393"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1018"
+     inkscape:window-x="-1926"
+     inkscape:window-y="-6"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="true"
+     inkscape:document-rotation="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="-20.366717"
+       originy="-70.809709"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-28.116567,6.8975975)">
+    <path
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 36.854018,-6.2698085 h 37.041668 l 10e-7,37.0416345 -37.041658,-0.001 -1.1e-5,-37.0406345 m 18.520834,0 1.1e-5,37.0406345 m 18.520824,-18.519802 -37.041658,-10e-4"
+       id="path1171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <g
+       transform="translate(-13.490826,-5.5676219)"
+       id="g271">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="69.692329"
+         y="43.525604"
+         id="text121-3-7-8-0"><tspan
+           y="43.525604"
+           x="69.692329"
+           sodipodi:role="line"
+           id="tspan265">x</tspan></text>
+      <text
+         id="text121-3-7-8-9-1"
+         y="42.973698"
+         x="67.711052"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="42.973698"
+           x="67.711052"
+           id="tspan239-0"
+           sodipodi:role="line"
+           style="stroke-width:0.264583">f</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 36.854018,36.062494 15.875002,10e-4 m 5.291666,0 15.875001,-3.1e-5"
+       id="path972"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path1473"
+       d="m 31.562353,30.77186 -1e-6,-15.875001 m 0,-5.2916671 2e-6,-15.8750004"
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+    <g
+       transform="translate(-2.8950893,17.961004)"
+       id="g277">
+      <text
+         id="text121-3-7-8"
+         y="-4.0993972"
+         x="35.296494"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
+           y="-4.0993972"
+           x="35.296494"
+           id="tspan119-1-8-3"
+           sodipodi:role="line">y</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="33.31522"
+         y="-4.6513033"
+         id="text121-3-7-8-9"><tspan
+           sodipodi:role="line"
+           id="tspan239"
+           x="33.31522"
+           y="-4.6513033">f</tspan></text>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.674099"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.779211"
+       x="64.069809">1</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4754314"
+       x="45.32935">2</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.3703194"
+       x="64.069809">3</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x4.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x4.svg
new file mode 100644
index 0000000..2fb6e49
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_2x4.svg
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_2x4.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 46.406913 82.720522"
+   height="312.6445"
+   width="175.39619">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="1"
+     inkscape:window-y="-6"
+     inkscape:window-x="-1926"
+     inkscape:window-height="1018"
+     inkscape:window-width="1920"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="208.74124"
+     inkscape:cx="196.91567"
+     inkscape:zoom="1.48"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-33.617599"
+       originx="-20.366716"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,44.089711)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.85402,-43.312509 37.041667,10e-4 v 74.083335 l -37.041658,-0.001 -9e-6,-74.083337 m 18.520836,0 7e-6,74.083337 m 18.520824,-18.519802 -37.041658,-10e-4 m -7e-6,-18.5208395 37.041665,0.00101 m 0,-18.5208335 -37.041665,-9.76e-4"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(-13.490826,-5.5676219)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 15.875002,10e-4 m 5.291666,0 15.875001,-3.1e-5"
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g277"
+       transform="translate(-2.9074896,-0.27595285)">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="35.296494"
+         y="-4.0993972"
+         id="text121-3-7-8"><tspan
+           sodipodi:role="line"
+           id="tspan119-1-8-3"
+           x="35.296494"
+           y="-4.0993972"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
+      <text
+         id="text121-3-7-8-9"
+         y="-4.6513033"
+         x="33.31522"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="-4.6513033"
+           x="33.31522"
+           id="tspan239"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.525415"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.630529"
+       x="64.069809">1</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.3267484"
+       x="45.32935">2</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.2216382"
+       x="64.069809">3</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-1"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-14.082145"
+       x="64.069801">5</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-11"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-14.082145"
+       x="45.329342">4</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-27"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.385925"
+       x="64.069809">7</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-77"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.385925"
+       x="45.329342">6</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x1.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x1.svg
new file mode 100644
index 0000000..cd94695
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x1.svg
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_4x1.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 83.599029 26.901193"
+   height="101.67381"
+   width="315.96481">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1018"
+     inkscape:window-width="960"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="-24.670431"
+     inkscape:cx="169.31763"
+     inkscape:zoom="2.0930361"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-89.436916"
+       originx="-20.366717"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,-11.729621)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.854018,12.251027 h 74.083332 l 1e-5,18.520799 -74.083331,-0.001 -1.1e-5,-18.519799 m 18.520834,0 1.1e-5,18.519799 m 18.520832,0 -1e-5,-18.519799 m 18.520834,0 1.5e-5,18.519799"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(5.0424113,-5.8514966)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:0.132291px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="m 31.562353,30.77186 -2e-6,-6.614583 m 0,-5.291666 3e-6,-6.614582"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       transform="translate(0.83905268,0.28766514)"
+       id="g545">
+      <g
+         transform="translate(-3.7341421,26.933758)"
+         id="g277">
+        <text
+           id="text121-3-7-8"
+           y="-4.0993972"
+           x="35.296494"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
+             y="-4.0993972"
+             x="35.296494"
+             id="tspan119-1-8-3"
+             sodipodi:role="line">y</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+           x="33.31522"
+           y="-4.6513033"
+           id="text121-3-7-8-9"><tspan
+             sodipodi:role="line"
+             id="tspan239"
+             x="33.31522"
+             y="-4.6513033">f</tspan></text>
+      </g>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.779238"
+       x="45.329342">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.88435"
+       x="64.069809">1</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.88435"
+       x="82.810272">2</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.779238"
+       x="101.55073">3</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x2.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x2.svg
new file mode 100644
index 0000000..9ae27fe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x2.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="pixel_index_4x2.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 83.599029 45.528413"
+   height="172.0759"
+   width="315.96481">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1483"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path1481"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:collect="always"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path977" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:document-rotation="0"
+     inkscape:snap-center="true"
+     units="px"
+     fit-margin-left="1"
+     fit-margin-bottom="1"
+     fit-margin-right="1"
+     fit-margin-top="1"
+     inkscape:window-maximized="0"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1018"
+     inkscape:window-width="960"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     showgrid="true"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="106.05324"
+     inkscape:cx="172.63552"
+     inkscape:zoom="1.7437838"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base">
+    <inkscape:grid
+       dotted="false"
+       originy="-70.809709"
+       originx="-20.366716"
+       id="grid12"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-28.116567,6.8975986)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <path
+       sodipodi:nodetypes="ccccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path1171"
+       d="m 36.854019,-6.2698096 h 74.083331 l 1e-5,37.0416356 -74.083331,-0.001 -10e-6,-37.0406356 m 18.520834,0 10e-6,37.0406356 m 18.520832,0 -8e-6,-37.0406356 m 18.520833,0 1.4e-5,37.0406356 m 18.520826,-18.519802 -74.083331,-10e-4"
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g271"
+       transform="translate(5.0424113,-5.8514966)">
+      <text
+         id="text121-3-7-8-0"
+         y="43.525604"
+         x="69.692329"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           id="tspan265"
+           sodipodi:role="line"
+           x="69.692329"
+           y="43.525604">x</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="67.711052"
+         y="42.973698"
+         id="text121-3-7-8-9-1"><tspan
+           style="stroke-width:0.264583"
+           sodipodi:role="line"
+           id="tspan239-0"
+           x="67.711052"
+           y="42.973698">f</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path972"
+       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cccc"
+       style="fill:none;stroke:#000000;stroke-width:0.187088px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+       d="m 31.562353,30.77186 -1e-6,-15.875002 m 0,-5.2916673 2e-6,-15.8750003"
+       id="path1473"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g277"
+       transform="translate(-2.9074907,18.244879)">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="35.296494"
+         y="-4.0993972"
+         id="text121-3-7-8"><tspan
+           sodipodi:role="line"
+           id="tspan119-1-8-3"
+           x="35.296494"
+           y="-4.0993972"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583">y</tspan></text>
+      <text
+         id="text121-3-7-8-9"
+         y="-4.6513033"
+         x="33.31522"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="-4.6513033"
+           x="33.31522"
+           id="tspan239"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <text
+       x="45.329342"
+       y="22.674097"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">0</text>
+    <text
+       x="64.069809"
+       y="22.779209"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-7"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">1</text>
+    <text
+       x="82.810272"
+       y="22.779209"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-2"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">2</text>
+    <text
+       x="101.55073"
+       y="22.674097"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-8"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">3</text>
+    <text
+       x="101.55073"
+       y="4.370317"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-27"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">7</text>
+    <text
+       x="82.810265"
+       y="4.370317"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-77"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">6</text>
+    <text
+       x="64.069801"
+       y="4.370317"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-1"
+       style="stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">5</text>
+    <text
+       x="45.329342"
+       y="4.370317"
+       fill="#ff0000"
+       font-size="4.18372px"
+       id="text23-11"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       transform="scale(0.98828058,1.0118584)">4</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x4.svg b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x4.svg
new file mode 100644
index 0000000..73c0738
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/pixel_index_4x4.svg
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="315.96481"
+   height="312.6445"
+   viewBox="0 0 83.599029 82.720522"
+   version="1.1"
+   id="svg8"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="pixel_index_4x4.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.0930361"
+     inkscape:cx="170.48768"
+     inkscape:cy="152.56606"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="960"
+     inkscape:window-height="1018"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="true"
+     inkscape:document-rotation="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="-20.366714"
+       originy="-33.617597"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-28.116566,44.089714)">
+    <path
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 36.85402,-43.312509 74.08334,10e-4 v 74.083335 l -74.083331,-0.001 -9e-6,-74.083337 m 18.520836,0 7e-6,74.083337 m 18.520832,0 -7e-6,-74.083337 m 18.520832,0 1.4e-5,74.083337 m 18.520826,-18.519802 -74.083331,-10e-4 m -7e-6,-18.5208395 74.083338,0.00103 m 0,-18.5208335 -74.083338,-0.001"
+       id="path1171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccc" />
+    <g
+       transform="translate(5.0424113,-5.8514966)"
+       id="g271">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="69.692329"
+         y="43.525604"
+         id="text121-3-7-8-0"><tspan
+           y="43.525604"
+           x="69.692329"
+           sodipodi:role="line"
+           id="tspan265">x</tspan></text>
+      <text
+         id="text121-3-7-8-9-1"
+         y="42.973698"
+         x="67.711052"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           y="42.973698"
+           x="67.711052"
+           id="tspan239-0"
+           sodipodi:role="line"
+           style="stroke-width:0.264583">f</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 36.854018,36.062494 34.395836,10e-4 m 5.291669,0 h 34.395837"
+       id="path972"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path1473"
+       d="M 31.562353,30.77186 V -3.6239751 m 10e-7,-5.2916661 V -43.311476"
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+    <g
+       transform="translate(-2.9074896,-0.27595285)"
+       id="g277">
+      <text
+         id="text121-3-7-8"
+         y="-4.0993972"
+         x="35.296494"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.264583"
+           y="-4.0993972"
+           x="35.296494"
+           id="tspan119-1-8-3"
+           sodipodi:role="line">y</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="33.31522"
+         y="-4.6513033"
+         id="text121-3-7-8-9"><tspan
+           sodipodi:role="line"
+           id="tspan239"
+           x="33.31522"
+           y="-4.6513033">f</tspan></text>
+    </g>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.777164"
+       x="45.30484">0</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.882277"
+       x="64.045311">1</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.882277"
+       x="82.785767">2</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="22.777164"
+       x="101.52623">3</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-27"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4733834"
+       x="101.52623">7</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-77"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4733834"
+       x="82.785759">6</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="stroke-width:0.00380336"
+       id="text23-1"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4733834"
+       x="64.045296">5</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-11"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="4.4733834"
+       x="45.30484">4</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-86"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-13.858997"
+       x="45.288502">8</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-7-0"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-13.753885"
+       x="64.028969">9</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-2-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-13.828354"
+       x="81.334328">10</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-8-8"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-13.822226"
+       x="100.15957">11</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-27-2"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.157669"
+       x="100.08501">15</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-77-7"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.126007"
+       x="81.297562">14</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-1-9"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.131111"
+       x="62.613274">13</text>
+    <text
+       transform="scale(0.98828058,1.0118584)"
+       style="letter-spacing:0px;stroke-width:0.00380336"
+       id="text23-11-4"
+       font-size="4.18372px"
+       fill="#ff0000"
+       y="-32.099449"
+       x="43.851364">12</text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_adjacency_edge.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_adjacency_edge.svg
new file mode 100644
index 0000000..0ab1a88
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_adjacency_edge.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="82"
+   height="3"
+   viewBox="0 0 82.000001 3.0000001"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_adjacency_edge.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="-161.7899"
+     inkscape:cy="-70.775023"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="2233"
+     inkscape:window-height="1343"
+     inkscape:window-x="392"
+     inkscape:window-y="296"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-309"
+       originy="-623.50003" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-321.53439,204.53503)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 322.53439,-203.03503 h 80"
+       id="path2033"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_edge.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_edge.svg
new file mode 100644
index 0000000..d954122
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_edge.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="82"
+   height="3"
+   viewBox="0 0 82.000001 3.0000001"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_edge.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="-155.7795"
+     inkscape:cy="-4.5582473"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="2262"
+     inkscape:window-height="1507"
+     inkscape:window-x="482"
+     inkscape:window-y="385"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-309"
+       originy="-648.50003" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-321.53439,229.53503)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 322.53439,-228.03503 h 80"
+       id="path2033-1"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_provoking_vertex.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_provoking_vertex.svg
new file mode 100644
index 0000000..bfeca33
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_provoking_vertex.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="15.714849"
+   height="10.938762"
+   viewBox="0 0 15.714849 10.938762"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_provoking_vertex.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="-138.70844"
+     inkscape:cy="-55.865628"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="2595"
+     inkscape:window-height="1495"
+     inkscape:window-x="481"
+     inkscape:window-y="191"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-90.509107"
+       originy="-595.50917" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-103.0435,184.48292)">
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-8"
+       cx="107.53439"
+       cy="-178.03505"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#fa0000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 107.53439,-178.035 10,-5"
+       id="path4672"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex.svg
new file mode 100644
index 0000000..9f71fcb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="8.9817867"
+   height="8.9817867"
+   viewBox="0 0 8.9817868 8.981787"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_vertex.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="100.2616"
+     inkscape:cy="-104.45147"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-90.50911"
+       originy="-645.50922" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-103.0435,232.526)">
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-3"
+       cx="107.53439"
+       cy="-228.03511"
+       r="3.4908931" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex_number.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex_number.svg
new file mode 100644
index 0000000..35b432f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_vertex_number.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="9.578125"
+   height="13.875"
+   viewBox="0 0 9.5781251 13.875"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_vertex_number.svg">
+  <defs
+     id="defs8647" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="78.58644"
+     inkscape:cy="-69.568388"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-90.367191"
+       originy="-618.75784" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-102.90158,210.66786)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="107.53439"
+       y="-198.03505"
+       id="text5070-2-2-9-9-41-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-5"
+         x="107.53439"
+         y="-198.03505"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_winding_order.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_winding_order.svg
new file mode 100644
index 0000000..139675d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_key_winding_order.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="55.063816"
+   height="46.178829"
+   viewBox="0 0 55.063817 46.17883"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_key_winding_order.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-80"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="-140.55056"
+     inkscape:cy="-8.4326646"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-307.02933"
+       originy="-566.46097" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-319.56371,190.6748)">
+    <g
+       id="g4389-89"
+       transform="translate(255,-44.999995)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-79"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-3"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-6)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-9"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-80)" />
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list.svg
new file mode 100644
index 0000000..ff4710d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list.svg
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="89.898438"
+   height="107.35807"
+   viewBox="0 0 89.898439 107.35807"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_list.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5891"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path5889" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect5887"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect5583"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect5395"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect5371"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.9402749"
+     inkscape:cx="44.90625"
+     inkscape:cy="53.682942"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-74.976564"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-87.510956,180.90228)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="92.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-88.035103"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="172.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-88.035103"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="172.53439"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-4"
+       cx="172.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-158.0351 H 172.53439"
+       id="path2033"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-78.035103 H 172.53439"
+       id="path2033-5"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="92.534393"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-8"
+       cx="92.534393"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 92.534392,-158.0351 c 3.334534,-1.66727 6.667865,-3.33393 9.999998,-5"
+       id="path5369"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect5371"
+       inkscape:original-d="m 92.534392,-158.0351 c 3.334333,-1.66767 6.667667,-3.33433 9.999998,-5" />
+    <path
+       inkscape:original-d="m 92.534392,-78.0351 c 3.334333,-1.66767 6.667667,-3.33433 9.999998,-5"
+       inkscape:path-effect="#path-effect5395"
+       inkscape:connector-curvature="0"
+       id="path5393"
+       d="m 92.534392,-78.0351 c 3.334534,-1.667267 6.667865,-3.333933 9.999998,-5"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 107.53439,-163.0351 c 16.66767,0 33.33433,0 50,0"
+       id="path5581"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect5583"
+       inkscape:original-d="m 107.53439,-163.0351 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 107.53439,-83.0351 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect5887"
+       inkscape:connector-curvature="0"
+       id="path5885"
+       d="m 107.53439,-83.0351 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5891)" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_last.svg
new file mode 100644
index 0000000..f1afd4b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_last.svg
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="89.898438"
+   height="107.35807"
+   viewBox="0 0 89.898439 107.35807"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_list_last.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker5891"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path5889" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect5887"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect5583"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect5395"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect5371"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.9402749"
+     inkscape:cx="24.772641"
+     inkscape:cy="53.682942"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-74.976564"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-87.510956,180.90228)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="92.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-88.035103"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="172.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-88.035103"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="172.53439"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-158.0351 H 172.53439"
+       id="path2033"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-78.035103 H 172.53439"
+       id="path2033-5"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-4"
+       cx="172.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="92.534393"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-8"
+       cx="92.534393"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.53439,-158.0351 c -3.33453,-1.66727 -6.66787,-3.33393 -10,-5"
+       id="path5369"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect5371"
+       inkscape:original-d="m 172.53439,-158.0351 c -3.33433,-1.66767 -6.66767,-3.33433 -10,-5" />
+    <path
+       inkscape:original-d="m 172.53439,-78.0351 c -3.33433,-1.66767 -6.66767,-3.33433 -10,-5"
+       inkscape:path-effect="#path-effect5395"
+       inkscape:connector-curvature="0"
+       id="path5393"
+       d="m 172.53439,-78.0351 c -3.33453,-1.667266 -6.66787,-3.333934 -10,-5"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 107.53439,-163.0351 c 16.66767,0 33.33433,0 50,0"
+       id="path5581"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect5583"
+       inkscape:original-d="m 107.53439,-163.0351 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 107.53439,-83.0351 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect5887"
+       inkscape:connector-curvature="0"
+       id="path5885"
+       d="m 107.53439,-83.0351 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5891)" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency.svg
new file mode 100644
index 0000000..2976295
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency.svg
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="250.5625"
+   height="107.36588"
+   viewBox="0 0 250.5625 107.36588"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_list_with_adjacency.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker9663"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path9661" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect9659"
+       effect="bspline" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect9655"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect9645"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect9609"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.7069807"
+     inkscape:cx="125.23828"
+     inkscape:cy="53.682935"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="5.4921875"
+       originy="-495.5091" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.0422058,180.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="12.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="172.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="92.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="252.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0"
+       cx="252.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-88.035088"
+       id="text5070-2-2-9-9-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="12.534393"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-88.035088"
+       id="text5070-2-2-9-9-7-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-8"
+         x="172.53439"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-88.035088"
+       id="text5070-2-2-9-9-6-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-1"
+         x="92.534393"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-88.035088"
+       id="text5070-2-2-9-9-77-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-3"
+         x="252.53439"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-7"
+       cx="12.534393"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-4"
+       cx="172.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-2"
+       cx="252.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.0351 h 80 m 79.999997,0 h 80"
+       id="path2031"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-158.0351 H 172.53439"
+       id="path2033"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-78.035103 h 80 m 79.999997,0 h 80"
+       id="path2031-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-78.035103 H 172.53439"
+       id="path2033-5"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="92.534393"
+       cy="-78.035118"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 107.5344,-83.035117 c 16.66766,0 33.33433,0 50,0"
+       id="path9607"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect9609"
+       inkscape:original-d="m 107.5344,-83.035117 c 16.66766,-0.001 33.33433,-0.001 50,0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 92.534393,-78.03512 c 3.334531,-1.667265 6.667866,-3.333932 9.999997,-4.999997"
+       id="path9643"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect9645"
+       inkscape:original-d="m 92.534393,-78.03512 c 3.334334,-1.66766 6.667667,-3.33433 9.999997,-4.999997" />
+    <path
+       inkscape:original-d="m 107.5344,-163.03511 c 16.66766,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect9655"
+       inkscape:connector-curvature="0"
+       id="path9653"
+       d="m 107.5344,-163.03511 c 16.66766,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9663)" />
+    <path
+       inkscape:original-d="m 92.534393,-158.03512 c 3.334334,-1.66766 6.667667,-3.33433 9.999997,-4.99999"
+       inkscape:path-effect="#path-effect9659"
+       inkscape:connector-curvature="0"
+       id="path9657"
+       d="m 92.534393,-158.03512 c 3.334532,-1.66726 6.667868,-3.33393 9.999997,-4.99999"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency_last.svg
new file mode 100644
index 0000000..938b50b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_list_with_adjacency_last.svg
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="250.5625"
+   height="107.36588"
+   viewBox="0 0 250.5625 107.36588"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_list_with_adjacency_last.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker9663"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path9661" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect9659"
+       effect="bspline" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect9655"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect9645"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect9609"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.7069807"
+     inkscape:cx="125.23828"
+     inkscape:cy="53.682935"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="5.4921875"
+       originy="-495.5091" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.0422058,180.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="12.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="172.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="92.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="252.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0"
+       cx="252.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-88.035088"
+       id="text5070-2-2-9-9-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="12.534393"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-88.035088"
+       id="text5070-2-2-9-9-7-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-8"
+         x="172.53439"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-88.035088"
+       id="text5070-2-2-9-9-6-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-1"
+         x="92.534393"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-88.035088"
+       id="text5070-2-2-9-9-77-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-3"
+         x="252.53439"
+         y="-88.035088"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-7"
+       cx="12.534393"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-2"
+       cx="252.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.0351 h 80 m 79.999997,0 h 80"
+       id="path2031"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-158.0351 H 172.53439"
+       id="path2033"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-78.035103 h 80 m 79.999997,0 h 80"
+       id="path2031-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 92.534393,-78.035103 H 172.53439"
+       id="path2033-5"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-4"
+       cx="172.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="92.534393"
+       cy="-78.035118"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 107.5344,-83.035117 c 16.66766,0 33.33433,0 50,0"
+       id="path9607"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect9609"
+       inkscape:original-d="m 107.5344,-83.035117 c 16.66766,-0.001 33.33433,-0.001 50,0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.53439,-78.035117 c -3.33453,-1.667265 -6.66786,-3.333931 -9.99999,-4.999997"
+       id="path9643"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect9645"
+       inkscape:original-d="m 172.53439,-78.035117 c -3.33433,-1.66766 -6.66766,-3.33433 -9.99999,-4.999997" />
+    <path
+       inkscape:original-d="m 107.5344,-163.03511 c 16.66766,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect9655"
+       inkscape:connector-curvature="0"
+       id="path9653"
+       d="m 107.5344,-163.03511 c 16.66766,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9663)" />
+    <path
+       inkscape:original-d="m 172.53439,-158.03512 c -3.33433,-1.66766 -6.66766,-3.33433 -9.99999,-4.99999"
+       inkscape:path-effect="#path-effect9659"
+       inkscape:connector-curvature="0"
+       id="path9657"
+       d="m 172.53439,-158.03512 c -3.33453,-1.66726 -6.66786,-3.33393 -9.99999,-4.99999"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip.svg
new file mode 100644
index 0000000..a54fabb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip.svg
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="249.89841"
+   height="27.365885"
+   viewBox="0 0 249.89841 27.365885"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_strip.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker17322"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path17320"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect17318"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker16960"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path16958" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect16956"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path879"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16309"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16305"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16301"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect16297"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16293"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.7213473"
+     inkscape:cx="124.90623"
+     inkscape:cy="13.682937"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-314.97657"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-327.51096,100.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-9"
+         x="332.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-7-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6"
+         x="492.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-8"
+         x="412.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="-88.035095"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1"
+         x="572.53436"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-7"
+       cx="572.53436"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 332.53439,-78.0351 240,-5e-6"
+       id="path2085"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="332.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="412.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1"
+       cx="492.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 332.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
+       id="path16291"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16293"
+       inkscape:original-d="m 332.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
+    <path
+       inkscape:original-d="m 412.53439,-78.035105 c 3.33433,-1.66766 6.66767,-3.33433 10,-5"
+       inkscape:path-effect="#path-effect16297"
+       inkscape:connector-curvature="0"
+       id="path16295"
+       d="m 412.53439,-78.035105 c 3.33453,-1.667264 6.66787,-3.333934 10,-5"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-78.035105 c 3.33453,-1.667264 6.66787,-3.333934 10,-5"
+       id="path16299"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16301"
+       inkscape:original-d="m 492.53439,-78.035105 c 3.33433,-1.66766 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 347.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path16307"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16309"
+       inkscape:original-d="m 347.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect16956"
+       inkscape:connector-curvature="0"
+       id="path16954"
+       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker16960)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17322)"
+       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path17316"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect17318"
+       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_last.svg
new file mode 100644
index 0000000..3675568
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_last.svg
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="249.89841"
+   height="27.365885"
+   viewBox="0 0 249.89841 27.365885"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_strip_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect16289"
+       effect="bspline" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect16285"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16277"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker15787"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path15785"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15783"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker15347"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path15345" />
+    </marker>
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect15343"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15333"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect15318"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15314"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path879"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path873"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15228"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15118"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect15114"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15071"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.7213473"
+     inkscape:cx="124.90623"
+     inkscape:cy="13.682936"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-314.97657"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-327.51096,100.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-9"
+         x="332.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-7-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6"
+         x="492.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-8"
+         x="412.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="-88.035095"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1"
+         x="572.53436"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-7"
+       cx="332.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 332.53439,-78.0351 240,-5e-6"
+       id="path2085"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="-412.53439"
+       cy="-78.035103"
+       r="3.4908931"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="-492.53439"
+       cy="-78.035103"
+       r="3.4908931"
+       transform="scale(-1,1)" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1"
+       cx="-572.53436"
+       cy="-78.03511"
+       r="3.4908931"
+       transform="scale(-1,1)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 347.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path15226"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect15228"
+       inkscape:original-d="m 347.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect15343"
+       inkscape:connector-curvature="0"
+       id="path15341"
+       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15347)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15787)"
+       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path15781"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect15783"
+       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
+       id="path16275"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16277"
+       inkscape:original-d="m 412.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5" />
+    <path
+       inkscape:original-d="m 492.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5"
+       inkscape:path-effect="#path-effect16285"
+       inkscape:connector-curvature="0"
+       id="path16283"
+       d="m 492.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
+       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:original-d="m 572.53439,-78.035105 c -3.33233,-1.667667 -6.66567,-3.334334 -10,-5"
+       inkscape:path-effect="#path-effect16289"
+       inkscape:connector-curvature="0"
+       id="path16287"
+       d="m 572.53439,-78.035105 c -3.33293,-1.666465 -6.66627,-3.333135 -10,-5"
+       style="fill:none;stroke:#fa0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency.svg
new file mode 100644
index 0000000..aeecd76
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency.svg
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="409.96866"
+   height="27.365885"
+   viewBox="0 0 409.96867 27.365885"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_strip_with_adjacency.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11628"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11624"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect11620"
+       effect="bspline" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect11616"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11574"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11552"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.4729165"
+     inkscape:cx="204.84761"
+     inkscape:cy="13.682936"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-314.97657"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-327.51096,100.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-9"
+         x="332.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-7-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6"
+         x="492.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-8"
+         x="412.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="-88.035095"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1"
+         x="572.53436"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-8"
+       cx="332.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="652.53436"
+       y="-88.035103"
+       id="text5070-2-2-9-9-7-7-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6-9"
+         x="652.53436"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="732.5343"
+       y="-88.035103"
+       id="text5070-2-2-9-9-77-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1-5"
+         x="732.5343"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-2-2"
+       cx="652.53436"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-7-1"
+       cx="732.5343"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,-78.035103 h 80 m 240,0 h 80"
+       id="path2083"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-78.035103 h 240"
+       id="path2085"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="412.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="492.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-6"
+       cx="572.53442"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
+       id="path11550"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11552"
+       inkscape:original-d="m 412.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path11572"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11574"
+       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 492.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5"
+       inkscape:path-effect="#path-effect11616"
+       inkscape:connector-curvature="0"
+       id="path11614"
+       d="m 492.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect11620"
+       inkscape:connector-curvature="0"
+       id="path11618"
+       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    <path
+       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 572.53439,-78.035105 c 3.33453,-1.667265 6.66787,-3.333935 10,-5"
+       id="path11622"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11624"
+       inkscape:original-d="m 572.53439,-78.035105 c 3.33433,-1.667667 6.66767,-3.334334 10,-5" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 587.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path11626"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11628"
+       inkscape:original-d="m 587.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency_last.svg
new file mode 100644
index 0000000..986b1b4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_line_strip_with_adjacency_last.svg
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="409.96866"
+   height="27.365885"
+   viewBox="0 0 409.96867 27.365885"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_line_strip_with_adjacency_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11628"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11624"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect11620"
+       effect="bspline" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect11616"
+       effect="bspline" />
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path5594"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11574"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect11552"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.4729165"
+     inkscape:cx="204.84761"
+     inkscape:cy="13.682937"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-314.97657"
+       originy="-495.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-327.51096,100.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-9"
+         x="332.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-7-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6"
+         x="492.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-88.035095"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-8"
+         x="412.53439"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="-88.035095"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1"
+         x="572.53436"
+         y="-88.035095"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-8"
+       cx="332.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="652.53436"
+       y="-88.035103"
+       id="text5070-2-2-9-9-7-7-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-6-9"
+         x="652.53436"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="732.5343"
+       y="-88.035103"
+       id="text5070-2-2-9-9-77-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-1-5"
+         x="732.5343"
+         y="-88.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-0-7-1"
+       cx="732.5343"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,-78.035103 h 80 m 240,0 h 80"
+       id="path2083"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-78.035103 h 240"
+       id="path2085"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-2-2"
+       cx="652.53436"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="412.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-9"
+       cx="492.53439"
+       cy="-78.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-6"
+       cx="572.53442"
+       cy="-78.035103"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
+       id="path11550"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11552"
+       inkscape:original-d="m 492.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 427.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path11572"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11574"
+       inkscape:original-d="m 427.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+    <path
+       inkscape:original-d="m 572.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5"
+       inkscape:path-effect="#path-effect11616"
+       inkscape:connector-curvature="0"
+       id="path11614"
+       d="m 572.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       inkscape:original-d="m 507.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0"
+       inkscape:path-effect="#path-effect11620"
+       inkscape:connector-curvature="0"
+       id="path11618"
+       d="m 507.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 652.53439,-78.035105 c -3.33453,-1.667265 -6.66787,-3.333935 -10,-5"
+       id="path11622"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11624"
+       inkscape:original-d="m 652.53439,-78.035105 c -3.33433,-1.667667 -6.66767,-3.334334 -10,-5" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 587.53439,-83.035105 c 16.66767,0 33.33433,0 50,0"
+       id="path11626"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect11628"
+       inkscape:original-d="m 587.53439,-83.035105 c 16.66767,-0.001 33.33433,-0.001 50,0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_point_list.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_point_list.svg
new file mode 100644
index 0000000..44c1371
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_point_list.svg
@@ -0,0 +1,877 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="200.14062"
+   height="147.16275"
+   viewBox="0 0 200.14063 147.16275"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="primitive_topology_point_list.svg">
+  <defs
+     id="defs8647">
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2335"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2333"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Torso"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Torso"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1107"
+         transform="scale(0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path1093"
+           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1095"
+           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1097"
+           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <rect
+           id="rect1099"
+           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
+           y="-1.7408575"
+           x="-10.391706"
+           height="2.7608147"
+           width="2.6366582"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <rect
+           id="rect1101"
+           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
+           y="-7.9629307"
+           x="4.9587269"
+           height="2.8614161"
+           width="2.7327356"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <path
+           id="path1103"
+           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1105"
+           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Tail"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g929"
+         transform="scale(-1.2)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path917"
+           d="M -3.8048674,-3.9585227 0.54352094,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path919"
+           d="M -1.2866832,-3.9585227 3.0617053,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path921"
+           d="M 1.3053582,-3.9585227 5.6537466,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path923"
+           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path925"
+           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path927"
+           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Legs"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Legs"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1090"
+         transform="scale(-0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <g
+           id="g1084"
+           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+          <path
+             id="path1080"
+             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1082"
+             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+        </g>
+        <path
+           id="path1086"
+           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1088"
+           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Scissors"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Scissors"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="schere"
+         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1020"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path966"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Send"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path914"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path908"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInM"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1017"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path884"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-4" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-88"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7-1" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284272"
+     inkscape:cx="118.95274"
+     inkscape:cy="44.306863"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="64.835941"
+       originy="-455.50911" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(52.301544,180.70697)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534395"
+       y="-108.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="12.534395"
+         y="-108.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="142.53439"
+       y="-118.03511"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="142.53439"
+         y="-118.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="-47.465607"
+       y="-148.03511"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="-47.465607"
+         y="-148.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="52.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-48.03511"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="92.534393"
+         y="-48.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="142.53439"
+       cy="-108.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91"
+       cx="52.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="92.534393"
+       cy="-38.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25"
+       cx="-47.465607"
+       cy="-138.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5"
+       cx="12.534393"
+       cy="-98.03511"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-131.5419" /></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan.svg
new file mode 100644
index 0000000..79315f8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan.svg
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="169.79558"
+   height="104.11718"
+   viewBox="0 0 169.79558 104.11718"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_fan.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect17027"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect17023"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16947"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-9-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-92"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-7-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-9-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.4447374"
+     inkscape:cx="84.839197"
+     inkscape:cy="52.066398"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-235.50911"
+       originy="-498.75781" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-248.0435,180.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-75"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68"
+         x="332.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-6"
+         x="412.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="292.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-7-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-3"
+         x="292.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-4"
+         x="252.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2"
+         x="372.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-0"
+       cx="412.53439"
+       cy="-98.035095"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 252.53439,-98.0351 40,-59.99999 h 80 l 40,59.99999 z m 40,-59.99999 40,59.99999 40,-59.99999"
+       id="path875-4"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g4389-3"
+       transform="translate(200,6.6621094e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7)" />
+    </g>
+    <g
+       transform="translate(279.66144,0.68117665)"
+       id="g4389-5-5">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-6-6"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1-9)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4-3"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75-9)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0-9"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9-0)" />
+    </g>
+    <g
+       id="g7055"
+       transform="translate(30,-9.9999914)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="292.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9"
+       cx="252.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9-7"
+       cx="332.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9-6"
+       cx="372.53439"
+       cy="158.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 252.53439,-98.03511 c 3.21845,-1.609226 6.66787,-3.33393 10,-5"
+       id="path16945"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16947"
+       inkscape:original-d="m 252.53439,-98.03511 c 3.20124,-1.643652 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 292.53439,-158.03511 c 3.33373,1.66687 6.66707,3.33353 10,5"
+       id="path17025"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect17027"
+       inkscape:original-d="m 292.53439,-158.03511 c 3.33433,1.66567 6.66767,3.33233 10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,-158.03511 v 12"
+       id="path17029"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan_last.svg
new file mode 100644
index 0000000..7fcf9cb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_fan_last.svg
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="169.79558"
+   height="104.11718"
+   viewBox="0 0 169.79558 104.11718"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_fan_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect17027"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect17023"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect16947"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-9-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-92"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-7-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-9-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.4447374"
+     inkscape:cx="84.839197"
+     inkscape:cy="52.066398"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-235.50911"
+       originy="-498.75781" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-248.0435,180.9101)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-75"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68"
+         x="332.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-6"
+         x="412.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="292.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-7-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-3"
+         x="292.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-6-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-4"
+         x="252.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2"
+         x="372.53439"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 252.53439,-98.0351 40,-59.99999 h 80 l 40,59.99999 z m 40,-59.99999 40,59.99999 40,-59.99999"
+       id="path875-4"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-0"
+       cx="412.53439"
+       cy="-98.035095"
+       r="3.4908931" />
+    <g
+       id="g4389-3"
+       transform="translate(200,6.6621094e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7)" />
+    </g>
+    <g
+       transform="translate(279.66144,0.68117665)"
+       id="g4389-5-5">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-6-6"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1-9)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4-3"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75-9)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0-9"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9-0)" />
+    </g>
+    <g
+       id="g7055"
+       transform="translate(30,-9.9999914)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="292.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9"
+       cx="252.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9-7"
+       cx="332.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9-6"
+       cx="372.53439"
+       cy="158.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-98.03511 c -3.21845,-1.609226 -6.66787,-3.33393 -10,-5"
+       id="path16945"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect16947"
+       inkscape:original-d="m 412.53439,-98.03511 c -3.20124,-1.643652 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,-158.03511 c -3.33373,1.66687 -6.66707,3.33353 -10,5"
+       id="path17025"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect17027"
+       inkscape:original-d="m 372.53439,-158.03511 c -3.33433,1.66567 -6.66767,3.33233 -10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 292.53439,-158.03511 v 12"
+       id="path17029"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list.svg
new file mode 100644
index 0000000..86fbe83
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list.svg
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210.32816"
+   height="104.11718"
+   viewBox="0 0 210.32816 104.11718"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_list.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect18703"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect18651"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-7-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-92-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462-51"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742-54"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.8002841"
+     inkscape:cx="105.09767"
+     inkscape:cy="52.066398"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-474.97657"
+       originy="-498.75782" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-487.51096,180.9101)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 612.53439,-158.0351 40,59.999997 40,-59.999997 z"
+       id="path11344"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53442"
+       y="-78.035103"
+       id="text5070-2-2-9-9-75-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68-4"
+         x="572.53442"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="-168.03508"
+       id="text5070-2-2-9-9-7-4-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-3-1"
+         x="532.53436"
+         y="-168.03508"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-6-2-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-4-0"
+         x="492.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-9-3"
+       cx="532.53436"
+       cy="-158.03508"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-0-0"
+       cx="572.53442"
+       cy="-98.035103"
+       r="3.4908931" />
+    <g
+       id="g4389-3-6"
+       transform="translate(440,2.147998e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1-8"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2-4)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2-7"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7-3)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="612.53442"
+       y="-168.0351"
+       id="text5070-2-2-9-9-75-8-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68-4-4"
+         x="612.53442"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="652.53442"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1-4-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-6-1"
+         x="652.53442"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="692.53442"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77-2-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-0"
+         x="692.53442"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-0-3"
+       cx="652.53442"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-0-0-6"
+       cx="692.53442"
+       cy="-158.0351"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-98.035095 40,-59.999995 40,59.999995 z"
+       id="path11342"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g7055"
+       transform="translate(350.00001,-10)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-5)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-4)" />
+    </g>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="492.53439"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="612.53442"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-98.0351 c 3.33453,-1.667265 6.66787,-3.33393 10,-5"
+       id="path18649"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect18651"
+       inkscape:original-d="m 492.53439,-98.0351 c 3.33433,-1.667667 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 612.53439,-158.0351 c 3.29595,1.64798 6.66707,3.33353 10,5"
+       id="path18701"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect18703"
+       inkscape:original-d="m 612.53439,-158.0351 c 3.32464,1.5906 6.66767,3.33233 10,5" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_last.svg
new file mode 100644
index 0000000..c9b7b58
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_last.svg
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210.32816"
+   height="104.11718"
+   viewBox="0 0 210.32816 104.11718"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_list_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect19538"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect19486"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect18703"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect18651"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-7-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-92-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462-51"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742-54"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.8002841"
+     inkscape:cx="105.09767"
+     inkscape:cy="52.066398"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false"
+     inkscape:snap-nodes="true"
+     inkscape:snap-global="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="-474.97657"
+       originy="-498.75782" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-487.51096,180.9101)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 612.53439,-158.0351 40,59.999997 40,-59.999997 z"
+       id="path11344"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53442"
+       y="-78.035103"
+       id="text5070-2-2-9-9-75-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68-4"
+         x="572.53442"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="-168.03508"
+       id="text5070-2-2-9-9-7-4-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-3-1"
+         x="532.53436"
+         y="-168.03508"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-6-2-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-4-0"
+         x="492.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-9-3"
+       cx="532.53436"
+       cy="-158.03508"
+       r="3.4908931" />
+    <g
+       id="g4389-3-6"
+       transform="translate(440,2.147998e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1-8"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2-4)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2-7"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-5-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-7-3)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="612.53442"
+       y="-168.0351"
+       id="text5070-2-2-9-9-75-8-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-68-4-4"
+         x="612.53442"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="652.53442"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1-4-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-6-1"
+         x="652.53442"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="692.53442"
+       y="-168.0351"
+       id="text5070-2-2-9-9-77-2-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-0"
+         x="692.53442"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-0-3"
+       cx="652.53442"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-0-0-6"
+       cx="692.53442"
+       cy="-158.0351"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-98.035095 40,-59.999995 40,59.999995 z"
+       id="path11342"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-0-0"
+       cx="572.53442"
+       cy="-98.035103"
+       r="3.4908931" />
+    <g
+       id="g7055"
+       transform="translate(350.00001,-10)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-5)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-4)" />
+    </g>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="492.53439"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="612.53442"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 572.53439,-98.0351 c -3.33453,-1.667265 -6.66787,-3.33393 -10,-5"
+       id="path18649"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect18651"
+       inkscape:original-d="m 572.53439,-98.0351 c -3.33433,-1.667667 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 652.53439,-98.0351 c 0,-3.94922 0,-7.89745 0,-11.84467"
+       id="path19536"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect19538"
+       inkscape:original-d="m 652.53439,-98.0351 c 10e-4,-3.94922 10e-4,-7.89745 0,-11.84467" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency.svg
new file mode 100644
index 0000000..fc240d4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency.svg
@@ -0,0 +1,502 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="409.51437"
+   height="165.99219"
+   viewBox="0 0 409.51438 165.99219"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_list_with_adjacency.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect20425"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect20373"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.4752572"
+     inkscape:cx="204.72593"
+     inkscape:cy="83.003907"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="4.4908931"
+       originy="-436.88283" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.0435002,180.91011)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="52.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="132.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="12.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-18.03511"
+       id="text5070-2-2-9-9-41"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="92.534393"
+         y="-18.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="172.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25"
+       cx="132.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80"
+       cx="92.534393"
+       cy="-38.035107"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
+       id="path1690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
+       id="path1700"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="292.53439"
+       y="-106.41011"
+       id="text5070-2-2-9-9-54"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-0"
+         x="292.53439"
+         y="-106.41011"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53442"
+       y="-106.4023"
+       id="text5070-2-2-9-9-1-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-0"
+         x="372.53442"
+         y="-106.4023"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53442"
+       y="-16.16011"
+       id="text5070-2-2-9-9-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-2"
+         x="332.53442"
+         y="-16.16011"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-16.363235"
+       id="text5070-2-2-9-9-6-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-1"
+         x="252.53439"
+         y="-16.363235"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53442"
+       y="-166.64449"
+       id="text5070-2-2-9-9-41-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-7"
+         x="332.53442"
+         y="-166.64449"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53442"
+       y="-16.402298"
+       id="text5070-2-2-9-9-77-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-8"
+         x="412.53442"
+         y="-16.402298"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-7"
+       cx="252.53439"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-3"
+       cx="332.53442"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-2"
+       cx="412.53442"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-6"
+       cx="372.53442"
+       cy="98.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-2"
+       cx="332.53442"
+       cy="158.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 252.53439,-38.03511 80,-120 80,120 z"
+       id="path1690-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 292.53439,-98.03511 40,60 40,-60 z"
+       id="path1700-3"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g4389"
+       transform="translate(2.0000015e-7,-2.5e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       transform="translate(30.000003,49.999997)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="292.53439"
+       cy="-98.035088"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="52.534393"
+       cy="-98.035095"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.035092 c 3.334533,-1.667266 6.667869,-3.333938 10,-4.999998"
+       id="path20371"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect20373"
+       inkscape:original-d="m 52.534393,-98.035092 c 3.334333,-1.667667 6.667667,-3.334338 10,-4.999998" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 292.53439,-98.035092 c 3.33374,1.666869 6.66707,3.333535 10,5"
+       id="path20423"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect20425"
+       inkscape:original-d="m 292.53439,-98.035092 c 3.33434,1.665666 6.66767,3.332333 10,5" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency_last.svg
new file mode 100644
index 0000000..236238b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_list_with_adjacency_last.svg
@@ -0,0 +1,513 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="409.51437"
+   height="165.99219"
+   viewBox="0 0 409.51438 165.99219"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_list_with_adjacency_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect21296"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect20425"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect20373"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.4752572"
+     inkscape:cx="204.72593"
+     inkscape:cy="83.003907"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false"
+     inkscape:snap-global="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="4.4908931"
+       originy="-436.88283" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.0435002,180.91011)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="52.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="132.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="12.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-18.03511"
+       id="text5070-2-2-9-9-41"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="92.534393"
+         y="-18.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="172.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80"
+       cx="92.534393"
+       cy="-38.035107"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
+       id="path1690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
+       id="path1700"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25"
+       cx="132.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="292.53439"
+       y="-106.41011"
+       id="text5070-2-2-9-9-54"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-0"
+         x="292.53439"
+         y="-106.41011"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53442"
+       y="-106.4023"
+       id="text5070-2-2-9-9-1-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-0"
+         x="372.53442"
+         y="-106.4023"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53442"
+       y="-16.16011"
+       id="text5070-2-2-9-9-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-2"
+         x="332.53442"
+         y="-16.16011"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="-16.363235"
+       id="text5070-2-2-9-9-6-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-1"
+         x="252.53439"
+         y="-16.363235"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53442"
+       y="-166.64449"
+       id="text5070-2-2-9-9-41-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-7"
+         x="332.53442"
+         y="-166.64449"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53442"
+       y="-16.402298"
+       id="text5070-2-2-9-9-77-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-8"
+         x="412.53442"
+         y="-16.402298"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-7"
+       cx="252.53439"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-2"
+       cx="412.53442"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-6"
+       cx="372.53442"
+       cy="98.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-2"
+       cx="332.53442"
+       cy="158.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 252.53439,-38.03511 80,-120 80,120 z"
+       id="path1690-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 292.53439,-98.03511 40,60 40,-60 z"
+       id="path1700-3"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-3"
+       cx="332.53442"
+       cy="38.03511"
+       r="3.4908931"
+       transform="scale(1,-1)" />
+    <g
+       id="g4389"
+       transform="translate(2.0000015e-7,-2.5e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       transform="translate(30.000003,49.999997)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="292.53439"
+       cy="-98.035088"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="52.534393"
+       cy="-98.035095"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 132.53439,-98.035092 c -3.33453,-1.667265 -6.66786,-3.333928 -10,-4.999998"
+       id="path20371"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect20373"
+       inkscape:original-d="m 132.53439,-98.035092 c -3.33433,-1.667667 -6.66766,-3.334338 -10,-4.999998" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 332.53439,-38.03509 c 0,-4.18888 0,-8.37676 0,-12.56364"
+       id="path21294"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect21296"
+       inkscape:original-d="m 332.53439,-38.03509 c 0.001,-4.18888 0.001,-8.37676 0,-12.56364" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip.svg
new file mode 100644
index 0000000..964174d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip.svg
@@ -0,0 +1,1092 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="170.32812"
+   height="104.11719"
+   viewBox="0 0 170.32813 104.11719"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_strip.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect15046"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15034"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect14676"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2335"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2333"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Torso"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Torso"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1107"
+         transform="scale(0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path1093"
+           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1095"
+           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1097"
+           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <rect
+           id="rect1099"
+           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
+           y="-1.7408575"
+           x="-10.391706"
+           height="2.7608147"
+           width="2.6366582"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <rect
+           id="rect1101"
+           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
+           y="-7.9629307"
+           x="4.9587269"
+           height="2.8614161"
+           width="2.7327356"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <path
+           id="path1103"
+           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1105"
+           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Tail"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g929"
+         transform="scale(-1.2)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path917"
+           d="M -3.8048674,-3.9585227 0.54352094,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path919"
+           d="M -1.2866832,-3.9585227 3.0617053,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path921"
+           d="M 1.3053582,-3.9585227 5.6537466,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path923"
+           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path925"
+           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path927"
+           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Legs"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Legs"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1090"
+         transform="scale(-0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <g
+           id="g1084"
+           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+          <path
+             id="path1080"
+             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1082"
+             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+        </g>
+        <path
+           id="path1086"
+           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1088"
+           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Scissors"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Scissors"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="schere"
+         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1020"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path966"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Send"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path914"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path908"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInM"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1017"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path884"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-4" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-88"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.4291088"
+     inkscape:cx="84.97902"
+     inkscape:cy="52.066407"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="5.0234376"
+       originy="-498.75782" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.5109558,180.91011)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="12.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="172.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-78.035103"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="52.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="132.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="172.53439"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="132.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 12.534393,-98.035106 40,-59.999994 h 79.999997 l 40,59.999994 z m 40,-59.999994 39.999997,59.999994 40,-59.999994"
+       id="path875"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g4389"
+       transform="translate(-40,-2.5e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       transform="translate(39.661444,0.68117295)"
+       id="g4389-5">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-6"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
+    </g>
+    <g
+       transform="translate(-210,-10.000003)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="12.872943"
+       cy="-98.716286"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-3"
+       cx="92.534393"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="52.534393"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 12.534393,-98.035103 c 3.334534,-1.667266 6.667869,-3.333937 10.000001,-4.999997"
+       id="path14674"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect14676"
+       inkscape:original-d="m 12.534393,-98.035103 c 3.334334,-1.667666 6.667667,-3.334337 10.000001,-4.999997" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534394,-158.0351 c 3.33373,1.66687 6.667065,3.33353 10,5"
+       id="path15032"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect15034"
+       inkscape:original-d="m 52.534394,-158.0351 c 3.334333,1.66566 6.667666,3.33233 10,5" />
+    <path
+       inkscape:original-d="m 92.534393,-98.035103 c 3.334334,-1.667666 6.667667,-3.334337 9.999997,-4.999997"
+       inkscape:path-effect="#path-effect15046"
+       inkscape:connector-curvature="0"
+       id="path15044"
+       d="m 92.534393,-98.035103 c 3.334534,-1.667266 6.667869,-3.333937 9.999997,-4.999997"
+       style="fill:none;stroke:#f50000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_last.svg
new file mode 100644
index 0000000..cde5f46
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_last.svg
@@ -0,0 +1,1092 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="170.32812"
+   height="104.11719"
+   viewBox="0 0 170.32813 104.11719"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_strip_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       only_selected="false"
+       apply_with_weight="true"
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect15046"
+       effect="bspline" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect15034"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect14676"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6742"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2335"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2333"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Torso"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Torso"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1107"
+         transform="scale(0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path1093"
+           d="m -4.7792281,-3.239542 c 2.350374,0.3659393 5.30026732,1.9375477 5.03715532,3.62748546 C -0.00518779,2.0778819 -2.2126741,2.6176539 -4.5630471,2.2517169 -6.9134221,1.8857769 -8.521035,0.75201414 -8.257922,-0.93792336 -7.994809,-2.6278615 -7.1296041,-3.6054813 -4.7792281,-3.239542 Z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1095"
+           d="M 4.4598789,0.08866574 C -2.5564571,-4.378332 5.2248769,-3.9061806 -0.84829578,-8.7197331"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1097"
+           d="M 4.9298719,0.05752074 C -1.3872731,1.7494689 1.8027579,5.4782079 -4.9448731,7.5462725"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <rect
+           id="rect1099"
+           transform="matrix(0.527536,-0.849533,0.887668,0.460484,0,0)"
+           y="-1.7408575"
+           x="-10.391706"
+           height="2.7608147"
+           width="2.6366582"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <rect
+           id="rect1101"
+           transform="matrix(0.671205,-0.741272,0.790802,0.612072,0,0)"
+           y="-7.9629307"
+           x="4.9587269"
+           height="2.8614161"
+           width="2.7327356"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" />
+        <path
+           id="path1103"
+           transform="matrix(0,-1.109517,1.109517,0,25.96648,19.71619)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1105"
+           transform="matrix(0,-1.109517,1.109517,0,26.8245,16.99126)"
+           d="m 16.779951,-28.685045 a 0.60731727,0.60731727 0 1 0 -1.214634,0 0.60731727,0.60731727 0 1 0 1.214634,0 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Tail"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g929"
+         transform="scale(-1.2)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <path
+           id="path917"
+           d="M -3.8048674,-3.9585227 0.54352094,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path919"
+           d="M -1.2866832,-3.9585227 3.0617053,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path921"
+           d="M 1.3053582,-3.9585227 5.6537466,0"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path923"
+           d="M -3.8048674,4.1775838 0.54352094,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path925"
+           d="M -1.2866832,4.1775838 3.0617053,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path927"
+           d="M 1.3053582,4.1775838 5.6537466,0.21974226"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Legs"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Legs"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <g
+         id="g1090"
+         transform="scale(-0.7)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <g
+           id="g1084"
+           transform="matrix(0,-1,-1,0,20.70862,21.31391)"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+          <path
+             id="path1080"
+             d="m 21.22125,20.67536 c -6.910151,4.721157 -2.454525,6.606844 -5.841071,13.443235"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path1082"
+             d="m 21.39811,20.54812 c -1.360509,8.347524 3.536072,8.76994 4.505041,13.824958"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+             inkscape:connector-curvature="0" />
+        </g>
+        <path
+           id="path1086"
+           d="m -14.09007,-6.7318716 -0.922168,4.043383 3.962751,-1.22307 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path1088"
+           d="m -15.215679,4.5567534 1.874127,3.699613 2.266874,-3.472855 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Scissors"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Scissors"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="schere"
+         d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1020"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondS"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path966"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Send"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path914"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path908"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleInM"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1017"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(-0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path884"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-4" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path890-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-0-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-88"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-53-9" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-5-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-6-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-1-9-3-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-99-5-6-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-75-9-2-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3-1-7-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.4172201"
+     inkscape:cx="85.097656"
+     inkscape:cy="52.066407"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="5.0234376"
+       originy="-498.75782" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.5109558,180.91011)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="12.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-78.035103"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="172.53439"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-78.035103"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-78.035103"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-168.0351"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="52.534393"
+         y="-168.0351"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="132.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 12.534393,-98.035106 40,-59.999994 h 79.999997 l 40,59.999994 z m 40,-59.999994 39.999997,59.999994 40,-59.999994"
+       id="path875"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="132.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="172.53439"
+       cy="-98.035103"
+       r="3.4908931" />
+    <g
+       id="g4389"
+       transform="translate(-40,-2.5e-6)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       transform="translate(39.661444,0.68117295)"
+       id="g4389-5">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-6"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-75)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
+    </g>
+    <g
+       transform="translate(-210,-10.000003)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="572.53442"
+       y="-168.03511"
+       id="text11340"><tspan
+         sodipodi:role="line"
+         id="tspan11338"
+         x="572.53442"
+         y="-132.64449" /></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97"
+       cx="12.872943"
+       cy="-98.716286"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-3"
+       cx="92.534393"
+       cy="-98.035103"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3"
+       cx="52.534393"
+       cy="-158.0351"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 92.534393,-98.035103 c -3.334534,-1.667266 -6.667869,-3.333937 -10.000001,-4.999997"
+       id="path14674"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect14676"
+       inkscape:original-d="m 92.534393,-98.035103 c -3.334334,-1.667666 -6.667667,-3.334337 -10.000001,-4.999997" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 133.53439,-158.0351 c -3.33373,1.66686 -6.66706,3.33353 -10,5"
+       id="path15032"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect15034"
+       inkscape:original-d="m 133.53439,-158.0351 c -3.33433,1.66566 -6.66766,3.33233 -10,5" />
+    <path
+       inkscape:original-d="m 172.53439,-98.035103 c -3.33433,-1.667666 -6.66766,-3.334337 -9.99999,-4.999997"
+       inkscape:path-effect="#path-effect15046"
+       inkscape:connector-curvature="0"
+       id="path15044"
+       d="m 172.53439,-98.035103 c -3.33453,-1.667266 -6.66786,-3.333937 -9.99999,-4.999997"
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency.svg
new file mode 100644
index 0000000..5defb88
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency.svg
@@ -0,0 +1,1846 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="613.95959"
+   height="463.875"
+   viewBox="0 0 613.9596 463.875"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_strip_with_adjacency.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24990"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24986"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24982"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24978"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24974"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24970"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24966"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24962"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24958"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24666"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-7" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-07"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-5" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-9" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-8"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-5"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-2"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-55"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-6"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-11"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-7"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-71"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-70"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-71"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-79"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fe0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-74"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-29"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-15"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-41"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-69"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-27"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-88"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.5916511"
+     inkscape:cx="415.89334"
+     inkscape:cy="107.69634"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="4.490893"
+       originy="-198.75781" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.0435002,240.66792)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="52.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="132.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="12.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-41"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="172.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-18.035109"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="92.534393"
+         y="-18.035109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7"
+         x="412.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-41-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4"
+         x="492.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53439"
+       y="-228.03511"
+       id="text5070-2-2-9-9-6-1-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4"
+         x="452.53439"
+         y="-228.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="-78.03511"
+       id="text5070-2-2-9-9-6-1-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7"
+         x="532.53436"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="221.96489"
+       id="text5070-2-2-9-9-6-1-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1"
+         x="172.53439"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="212.53439"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-4"
+         x="212.53439"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7"
+         x="252.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="221.96489"
+       id="text5070-2-2-9-9-6-1-7-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-5"
+         x="492.53439"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-3-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-4-6"
+         x="532.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6"
+         x="572.53436"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-7-9-8-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6-5"
+         x="532.53436"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="612.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8-9-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6-6"
+         x="612.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25"
+       cx="132.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80"
+       cx="92.534393"
+       cy="-38.035107"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2"
+       cx="332.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9"
+       cx="492.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1"
+       cx="452.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9"
+       cx="412.53439"
+       cy="-38.035107"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5"
+       cx="452.53439"
+       cy="-218.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1"
+       cx="532.53442"
+       cy="-98.035118"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2-7"
+       cx="12.534395"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9-8"
+       cx="92.534393"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9"
+       cx="132.53439"
+       cy="21.964891"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1-0"
+       cx="212.53442"
+       cy="141.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-8"
+       cx="172.53439"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-6"
+       cx="252.53439"
+       cy="81.964874"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2-7-9"
+       cx="332.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9-8-2"
+       cx="412.53439"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0"
+       cx="452.53442"
+       cy="21.964899"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1-0-9"
+       cx="532.53442"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-8-1"
+       cx="492.53442"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-6-1"
+       cx="572.53436"
+       cy="81.964867"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0-9"
+       cx="532.53442"
+       cy="21.964895"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0-3"
+       cx="612.53442"
+       cy="141.96489"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
+       id="path1690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,-158.03511 80,120.000002 40,-60 h 80 l -80,-120.000002 -40,60 z"
+       id="path1694"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,81.964892 80,119.999998 39.999997,-60 40,60 80,-119.999998 h -80 l -40,-60 -39.999997,60 z"
+       id="path1696"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,81.964892 h 80 l 40,-60 40,60 40,-60 80,119.999998 h -80 l -40,60 -40,-60 -40,60 z"
+       id="path1698"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
+       id="path1700"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,-98.035108 40,-60.000002 h 80 l -40,60.000002 z m 40,-60.000002 40,60.000002"
+       id="path1702"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,141.96489 40,-59.999998 h 79.999997 l 40,59.999998 h -80 z m 40,-59.999998 39.999997,59.999998 40,-59.999998"
+       id="path1706"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,141.96489 40,-59.999998 h 160 l -40,59.999998 z m 40,-59.999998 40,59.999998 40,-59.999998 40,59.999998"
+       id="path1712"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20"
+         x="372.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9"
+         x="452.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2"
+         x="332.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-18.035109"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2"
+         x="412.53439"
+         y="-18.035109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="71.96489"
+       id="text5070-2-2-9-9-7-8-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7-8"
+         x="92.534393"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-41-2-93"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4-4"
+         x="172.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53438"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-2-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4-4"
+         x="132.53438"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="161.96489"
+       id="text5070-2-2-9-9-5-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20-4"
+         x="52.534393"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53438"
+       y="161.96489"
+       id="text5070-2-2-9-9-1-9-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9-9"
+         x="132.53438"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2-8"
+         x="12.534393"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="221.96489"
+       id="text5070-2-2-9-9-77-5-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-6"
+         x="92.534393"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-7-8-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7-9"
+         x="412.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-41-2-97"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4-81"
+         x="492.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53436"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4-7"
+         x="452.53436"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="161.96489"
+       id="text5070-2-2-9-9-5-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20-0"
+         x="372.53439"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-1-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9-8"
+         x="452.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-5-07"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2-1"
+         x="332.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="221.96487"
+       id="text5070-2-2-9-9-77-5-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-1"
+         x="412.53439"
+         y="221.96487"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <g
+       transform="translate(150,-10.00001)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <g
+       transform="translate(-170,229.99999)"
+       id="g7055-4-8">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-0)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-7"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-8"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-7)" />
+    </g>
+    <g
+       transform="translate(150,229.99999)"
+       id="g7055-4-7">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-9"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-07)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-8"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-4)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-9"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-4)" />
+    </g>
+    <g
+       transform="translate(230,229.99999)"
+       id="g7055-4-9">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-36"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-75"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-0)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-5"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-5)" />
+    </g>
+    <g
+       id="g4389"
+       transform="translate(1.000012e-7,-1e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       id="g4389-8"
+       transform="translate(320,-1e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-7"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-2)" />
+    </g>
+    <g
+       id="g4389-0"
+       transform="translate(1.0000121e-7,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-9"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-6)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-8"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-6"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-6)" />
+    </g>
+    <g
+       id="g4389-9"
+       transform="translate(80,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-4"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-5"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-11)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-8)" />
+    </g>
+    <g
+       id="g4389-3"
+       transform="translate(320,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-3)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-28"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
+    </g>
+    <g
+       id="g4389-1"
+       transform="translate(400,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-3"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-0"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-71)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-0)" />
+    </g>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0"
+       cx="412.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-3"
+       cx="372.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5"
+       cx="52.534393"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-2"
+       cx="52.534393"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-6"
+       cx="132.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-0"
+       cx="372.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-26"
+       cx="452.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1-1"
+       cx="92.534393"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1"
+       cx="412.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1-2"
+       cx="492.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       r="3.4908931"
+       cy="81.96489"
+       cx="172.53439"
+       id="circle9368"
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.03511 c 3.334534,-1.667267 6.667866,-3.33393 10,-5"
+       id="path24664"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24666"
+       inkscape:original-d="m 52.534393,-98.03511 c 3.334333,-1.66767 6.667667,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,-98.03511 c 3.53989,-1.769946 6.66787,-3.33393 10,-5"
+       id="path24956"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24958"
+       inkscape:original-d="m 372.53439,-98.03511 c 3.53813,-1.77347 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,-158.03511 c 3.33374,1.66687 6.66707,3.33353 10,5"
+       id="path24960"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24962"
+       inkscape:original-d="m 412.53439,-158.03511 c 3.33434,1.66567 6.66767,3.33233 10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,141.96489 c 3.334534,-1.66727 6.667866,-3.33393 10,-5"
+       id="path24964"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24966"
+       inkscape:original-d="m 52.534393,141.96489 c 3.334333,-1.66767 6.667667,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 92.534393,81.96489 c 3.333734,1.666868 6.667065,3.333534 9.999997,5"
+       id="path24968"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24970"
+       inkscape:original-d="m 92.534393,81.96489 c 3.334333,1.66567 6.667667,3.33233 9.999997,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 132.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
+       id="path24972"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24974"
+       inkscape:original-d="m 132.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
+       id="path24976"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24978"
+       inkscape:original-d="m 372.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 412.53439,81.96489 c 3.33374,1.66687 6.66707,3.333534 10,5"
+       id="path24980"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24982"
+       inkscape:original-d="m 412.53439,81.96489 c 3.33434,1.66567 6.66767,3.33233 10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 452.53439,141.96489 c 3.33454,-1.66727 6.66787,-3.33393 10,-5"
+       id="path24984"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24986"
+       inkscape:original-d="m 452.53439,141.96489 c 3.33434,-1.66767 6.66767,-3.33433 10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,81.96489 c 3.33374,1.66687 6.66707,3.333534 10,5"
+       id="path24988"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24990"
+       inkscape:original-d="m 492.53439,81.96489 c 3.33434,1.66567 6.66767,3.33233 10,5" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency_last.svg b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency_last.svg
new file mode 100644
index 0000000..e23948a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/primitive_topology_triangle_strip_with_adjacency_last.svg
@@ -0,0 +1,1846 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="613.95959"
+   height="463.875"
+   viewBox="0 0 613.9596 463.875"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+   sodipodi:docname="primitive_topology_triangle_strip_with_adjacency_last.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24990"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24986"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24982"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24978"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24974"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24970"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24966"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24962"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24958"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect24666"
+       is_visible="true"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-7" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-07"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-5" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2471-7-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2469-6-9" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-8"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-5"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-2"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-55"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-6"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-11"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-3"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-7"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-7"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-71"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker3039-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3037-70"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker2891-71"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path2889-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path890-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-79"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#fe0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-74"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-1"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-29"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-15"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-41"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6464-8-13-5-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6462-2-3-3-69"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6744-8-2-5-27"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6742-9-67-0-88"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#fb0000;fill-opacity:1;fill-rule:evenodd;stroke:#fb0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.366358"
+     inkscape:cx="118.66396"
+     inkscape:cy="99.021623"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1155"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:snap-object-midpoints="true"
+     units="px"
+     borderlayer="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="4.490893"
+       originy="-198.75781" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.0435002,240.66792)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="-78.03511"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="52.534393"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3"
+         x="132.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6"
+         x="92.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4"
+         x="12.534393"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-41"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1"
+         x="172.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="-18.035109"
+       id="text5070-2-2-9-9-77"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5"
+         x="92.534393"
+         y="-18.035109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-7-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7"
+         x="412.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-41-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4"
+         x="492.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53439"
+       y="-228.03511"
+       id="text5070-2-2-9-9-6-1-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4"
+         x="452.53439"
+         y="-228.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="-78.03511"
+       id="text5070-2-2-9-9-6-1-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7"
+         x="532.53436"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="221.96489"
+       id="text5070-2-2-9-9-6-1-7-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1"
+         x="172.53439"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="212.53439"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-4"
+         x="212.53439"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="252.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7"
+         x="252.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="221.96489"
+       id="text5070-2-2-9-9-6-1-7-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-5"
+         x="492.53439"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">7</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-3-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-4-6"
+         x="532.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="572.53436"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6"
+         x="572.53436"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="532.53436"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-7-9-8-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6-5"
+         x="532.53436"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">9</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="612.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-6-1-7-9-8-9-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-7-1-7-6-6"
+         x="612.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">11</tspan></text>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8"
+       cx="12.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91"
+       cx="92.534393"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2"
+       cx="172.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80"
+       cx="92.534393"
+       cy="-38.035107"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2"
+       cx="332.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9"
+       cx="412.53439"
+       cy="-38.035107"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5"
+       cx="452.53439"
+       cy="-218.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1"
+       cx="532.53442"
+       cy="-98.035118"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2-7"
+       cx="12.534395"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9-8"
+       cx="92.534393"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9"
+       cx="132.53439"
+       cy="21.964891"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-8"
+       cx="172.53439"
+       cy="201.96487"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,81.964892 80,119.999998 39.999997,-60 40,60 80,-119.999998 h -80 l -40,-60 -39.999997,60 z"
+       id="path1696"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-6"
+       cx="252.53439"
+       cy="81.964874"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-8-2-7-9"
+       cx="332.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-80-9-8-2"
+       cx="412.53439"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0"
+       cx="452.53442"
+       cy="21.964899"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-8-1"
+       cx="492.53442"
+       cy="201.96487"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0-9"
+       cx="532.53442"
+       cy="21.964895"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-5-9-0-3"
+       cx="612.53442"
+       cy="141.96489"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 12.534393,-158.03511 80,120.000002 79.999997,-120.000002 z"
+       id="path1690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,-158.03511 80,120.000002 40,-60 h 80 l -80,-120.000002 -40,60 z"
+       id="path1694"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 332.53439,81.964892 h 80 l 40,-60 40,60 40,-60 80,119.999998 h -80 l -40,60 -40,-60 -40,60 z"
+       id="path1698"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,-98.035108 40,-60.000002 39.999997,60.000002 z"
+       id="path1700"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25"
+       cx="132.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,-98.035108 40,-60.000002 h 80 l -40,60.000002 z m 40,-60.000002 40,60.000002"
+       id="path1702"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-2-9"
+       cx="492.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1"
+       cx="452.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 52.534393,141.96489 40,-59.999998 h 79.999997 l 40,59.999998 h -80 z m 40,-59.999998 39.999997,59.999998 40,-59.999998"
+       id="path1706"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1-0"
+       cx="212.53442"
+       cy="141.96487"
+       r="3.4908931" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 372.53439,141.96489 40,-59.999998 h 160 l -40,59.999998 z m 40,-59.999998 40,59.999998 40,-59.999998 40,59.999998"
+       id="path1712"
+       inkscape:connector-curvature="0" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-25-1-0-6-1"
+       cx="572.53436"
+       cy="81.964867"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-1-0-9"
+       cx="532.53442"
+       cy="141.96489"
+       r="3.4908931" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20"
+         x="372.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53439"
+       y="-78.03511"
+       id="text5070-2-2-9-9-1-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9"
+         x="452.53439"
+         y="-78.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="-168.03511"
+       id="text5070-2-2-9-9-6-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2"
+         x="332.53439"
+         y="-168.03511"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="-18.035109"
+       id="text5070-2-2-9-9-77-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2"
+         x="412.53439"
+         y="-18.035109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="71.96489"
+       id="text5070-2-2-9-9-7-8-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7-8"
+         x="92.534393"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="172.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-41-2-93"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4-4"
+         x="172.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53438"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-2-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4-4"
+         x="132.53438"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="52.534393"
+       y="161.96489"
+       id="text5070-2-2-9-9-5-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20-4"
+         x="52.534393"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="132.53438"
+       y="161.96489"
+       id="text5070-2-2-9-9-1-9-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9-9"
+         x="132.53438"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="12.534393"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2-8"
+         x="12.534393"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="92.534393"
+       y="221.96489"
+       id="text5070-2-2-9-9-77-5-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-6"
+         x="92.534393"
+         y="221.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-7-8-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-6-7-9"
+         x="412.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="492.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-41-2-97"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-1-4-81"
+         x="492.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53436"
+       y="11.964892"
+       id="text5070-2-2-9-9-6-1-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-3-4-7"
+         x="452.53436"
+         y="11.964892"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">5</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="372.53439"
+       y="161.96489"
+       id="text5070-2-2-9-9-5-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-20-0"
+         x="372.53439"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="452.53436"
+       y="161.96489"
+       id="text5070-2-2-9-9-1-9-6"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-3-9-8"
+         x="452.53436"
+         y="161.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="332.53439"
+       y="71.96489"
+       id="text5070-2-2-9-9-6-5-07"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-4-2-1"
+         x="332.53439"
+         y="71.96489"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.16427398"
+       x="412.53439"
+       y="221.96487"
+       id="text5070-2-2-9-9-77-5-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9-5-2-1"
+         x="412.53439"
+         y="221.96487"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:1.16427398">3</tspan></text>
+    <g
+       transform="translate(150,-10.00001)"
+       id="g7055-4">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8)" />
+    </g>
+    <g
+       transform="translate(-170,229.99999)"
+       id="g7055-4-8">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-3"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-0)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-7"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-8"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-7)" />
+    </g>
+    <g
+       transform="translate(150,229.99999)"
+       id="g7055-4-7">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-9"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-07)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-8"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-4)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-9"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-4)" />
+    </g>
+    <g
+       transform="translate(230,229.99999)"
+       id="g7055-4-9">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-08-3-3-36"
+         d="m 277.53439,-133.0351 20,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6464-8-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-9-9-3-75"
+         d="m 307.53439,-103.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2471-7-0)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2-3-1-5"
+         d="m 327.53439,-143.0351 h -50"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6744-8-5)" />
+    </g>
+    <g
+       id="g4389"
+       transform="translate(1.000012e-7,-1e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    </g>
+    <g
+       id="g4389-8"
+       transform="translate(320,-1e-5)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-7"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-4"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-8)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-2"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-2)" />
+    </g>
+    <g
+       id="g4389-0"
+       transform="translate(1.0000121e-7,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-9"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-6)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-8"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-1)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-6"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-6)" />
+    </g>
+    <g
+       id="g4389-9"
+       transform="translate(80,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-4"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-2)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-5"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-11)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-0"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-8)" />
+    </g>
+    <g
+       id="g4389-3"
+       transform="translate(320,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-1"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-3)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-2"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-28"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)" />
+    </g>
+    <g
+       id="g4389-1"
+       transform="translate(400,239.99999)">
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1868-3"
+         d="m 67.534393,-113.0351 20,-30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3039-7)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1870-0"
+         d="m 97.534393,-143.0351 19.999997,30"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2891-71)" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path1872-1"
+         d="M 117.53439,-103.0351 H 67.534393"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend-0)" />
+    </g>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0"
+       cx="412.53439"
+       cy="-158.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5-3"
+       cx="372.53439"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-5"
+       cx="52.534393"
+       cy="-98.03511"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-2"
+       cx="52.534393"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-6"
+       cx="132.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-0"
+       cx="372.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-97-26"
+       cx="452.53439"
+       cy="141.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1-1"
+       cx="92.534393"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1"
+       cx="412.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5-91-0-3-1-2"
+       cx="492.53439"
+       cy="81.96489"
+       r="3.4908931" />
+    <circle
+       r="3.4908931"
+       cy="81.96489"
+       cx="172.53439"
+       id="circle9368"
+       style="fill:#f20000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 132.53439,-98.03511 c -3.33453,-1.667266 -6.66786,-3.33393 -10,-5"
+       id="path24664"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24666"
+       inkscape:original-d="m 132.53439,-98.03511 c -3.33433,-1.66767 -6.66766,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 452.53439,-98.03511 c -3.53989,-1.769946 -6.66787,-3.33393 -10,-5"
+       id="path24956"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24958"
+       inkscape:original-d="m 452.53439,-98.03511 c -3.53813,-1.77347 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,-158.03511 c -3.33374,1.66687 -6.66707,3.33353 -10,5"
+       id="path24960"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24962"
+       inkscape:original-d="m 492.53439,-158.03511 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 132.53439,141.96489 c -3.33453,-1.66727 -6.66786,-3.33393 -10,-5"
+       id="path24964"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24966"
+       inkscape:original-d="m 132.53439,141.96489 c -3.33433,-1.66767 -6.66766,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 172.53439,81.96489 c -3.33373,1.666867 -6.66706,3.333533 -9.99999,5"
+       id="path24968"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24970"
+       inkscape:original-d="m 172.53439,81.96489 c -3.33433,1.66567 -6.66766,3.33233 -9.99999,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 212.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
+       id="path24972"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24974"
+       inkscape:original-d="m 212.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 452.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
+       id="path24976"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24978"
+       inkscape:original-d="m 452.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.53439,81.96489 c -3.33374,1.66687 -6.66707,3.333534 -10,5"
+       id="path24980"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24982"
+       inkscape:original-d="m 492.53439,81.96489 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 532.53439,141.96489 c -3.33454,-1.66727 -6.66787,-3.33393 -10,-5"
+       id="path24984"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24986"
+       inkscape:original-d="m 532.53439,141.96489 c -3.33434,-1.66767 -6.66767,-3.33433 -10,-5" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 572.53439,81.96489 c -3.33374,1.66687 -6.66707,3.333534 -10,5"
+       id="path24988"
+       inkscape:connector-curvature="0"
+       inkscape:path-effect="#path-effect24990"
+       inkscape:original-d="m 572.53439,81.96489 c -3.33434,1.66567 -6.66767,3.33233 -10,5" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/ray_intersection_candidate.svg b/codegen/vulkan/vulkan-docs-next/images/ray_intersection_candidate.svg
new file mode 100644
index 0000000..c2c4fe5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/ray_intersection_candidate.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="-125 20 450 100">
+  <defs>
+    <marker id="lineend" viewBox="0 0 1 3" refX="1" refY="1.5" markerWidth="1" markerHeight="3" orient="auto">
+      <rect width="1" height="3" x="0" y="0" fill="black" />
+    </marker>
+    <!-- The VKSpec SVG to PDF does not like auto-start-reverse -->
+    <marker id="linestart" viewBox="0 0 1 3" refX="0" refY="1.5" markerWidth="1" markerHeight="3" orient="auto">
+      <rect width="1" height="3" x="0" y="0" fill="black" />
+    </marker>
+    <marker id="arrow" viewBox="0 0 2 3" refX="1" refY="1.5" markerWidth="3" markerHeight="4" orient="auto">
+      <path d="M 0 0.5 l 0.5 -0.5 l 1.5 1.5 l -1.5 1.5 l -0.5 -0.5 l 1 -1 z" style="fill:black;" stroke-linecap="butt" />
+    </marker>
+  </defs>
+
+  <line x1="200" y1="50" x2="250" y2="37.5" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
+  <circle fill="#008000" r="3" cx="200" cy="50" />
+  <line x1="150" y1="62.5" x2="200" y2="50" style="stroke:black;stroke-width:2;" />
+  <path d="M 150 100 L 100 50 L 200 25 z" fill="#FF8080" opacity="0.75" stroke="none" />
+  <circle fill="#FF0000" r="3" cx="150" cy="62.5" />
+  <line x1="100" y1="75" x2="150" y2="62.5" style="stroke:black;stroke-width:2;" />
+  <circle fill="#0000FF" r="3" cx="100" cy="75" />
+  <line x1="50" y1="87.5" x2="100" y2="75" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
+  <path d="M 0 100 l 25 -6.125 l 25 -6.125" style="stroke:black;stroke-width:2;" marker-end="url(#lineend)" marker-mid="url(#arrow)" marker-start="url(#linestart)"/>
+  <line x1="-50" y1="112.5" x2="0" y2="100" style="stroke:black;stroke-width:2;" stroke-dasharray="3,3" />
+  <text x="-3.75" y="93" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
+  <text x="20" y="86.875" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
+  <text x="82.5" y="90" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
+  <text x="90" y="91" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
+  <text x="100" y="90" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
+  <text x="104" y="92" style="font-style:italic;font-weight:normal;font-size:6px;font-family:serif;">min</text>
+  <text x="115" y="90" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
+  <text x="134.5" y="55" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
+  <text x="141" y="56" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
+  <text x="150" y="55" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
+  <text x="155" y="55" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
+  <text x="182.5" y="65" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">o</text>
+  <text x="190" y="66" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">+</text>
+  <text x="200" y="65" style="font-style:italic;font-weight:normal;font-size:11px;font-family:serif;">t</text>
+  <text x="204" y="67" style="font-style:italic;font-weight:normal;font-size:6px;font-family:serif;">max</text>
+  <text x="216" y="65" style="font-style:normal;font-weight:bold;font-size:11px;font-family:serif;">d</text>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/ray_tracing_execution.svg b/codegen/vulkan/vulkan-docs-next/images/ray_tracing_execution.svg
new file mode 100644
index 0000000..079f41c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/ray_tracing_execution.svg
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="454.53473"
+   height="183.80112"
+   viewBox="0 0 454.53472 183.80112"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="ray_tracing_execution.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-4-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-81-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-4-7-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-81-1-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-8-1-7-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-8-2-1-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-8-1-7-05"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-8-2-1-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-8-1-7-05-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-8-2-1-3-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-4-7-13"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-81-1-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2-2-4-7-1-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-2-3-81-1-2-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.0000001"
+     inkscape:cx="263.45186"
+     inkscape:cy="204.85377"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:snap-center="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="0"
+     showguides="false"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="in"
+     inkscape:snap-others="true"
+     inkscape:snap-nodes="true"
+     inkscape:object-nodes="true"
+     height="7.5in">
+    <inkscape:grid
+       type="xygrid"
+       id="grid817"
+       originx="79.262856"
+       originy="-1225.558" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-35.742392,209.97146)">
+    <g
+       id="g1684"
+       transform="translate(76.761047,177.11848)">
+      <rect
+         y="-385.62808"
+         x="196.64136"
+         height="47.54937"
+         width="98.349922"
+         id="rect815-1-6-5-1-3-2-0"
+         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         x="246.41849"
+         y="-357.55588"
+         id="text823-0-2-6-1-7-2-1"><tspan
+           y="-357.55588"
+           x="246.41849"
+           id="tspan981"
+           sodipodi:role="line">Any-Hit</tspan></text>
+    </g>
+    <g
+       transform="translate(-36.358826,-133.79857)"
+       id="g988-3">
+      <g
+         id="g4763">
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect815-1-6-5-1-3-2-0-7"
+           width="98.349922"
+           height="47.54937"
+           x="191.76122"
+           y="-74.711029" />
+        <text
+           id="text823-0-2-6-1-7-2-1-1"
+           y="-46.1577"
+           x="241.06639"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+           xml:space="preserve"><tspan
+             sodipodi:role="line"
+             id="tspan8376"
+             x="241.06639"
+             y="-46.1577">Intersection</tspan></text>
+      </g>
+    </g>
+    <text
+       id="text823-0-2-6-1-7-2-1-9-1"
+       y="-113.86218"
+       x="438.78833"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan6495"
+         x="438.78833"
+         y="-113.86218">Hit?</tspan></text>
+    <g
+       id="g7686"
+       transform="translate(-211.72239,-23.523486)">
+      <rect
+         y="-184.80975"
+         x="600.11108"
+         height="47.54937"
+         width="98.349922"
+         id="rect815-1-6-5-1-3-0-9"
+         style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         x="649.0517"
+         y="-156.07088"
+         id="text823-0-2-6-1-7-4-9"><tspan
+           y="-156.07088"
+           x="649.0517"
+           id="tspan6645"
+           sodipodi:role="line">Closest Hit</tspan></text>
+    </g>
+    <g
+       transform="translate(196.84052,-0.4705565)"
+       id="g988-3-6">
+      <g
+         id="g4763-9">
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect815-1-6-5-1-3-2-0-7-3"
+           width="98.349922"
+           height="47.54937"
+           x="191.76122"
+           y="-74.711029" />
+        <text
+           id="text823-0-2-6-1-7-2-1-1-5"
+           y="-46.144676"
+           x="240.56183"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+           xml:space="preserve"><tspan
+             sodipodi:role="line"
+             id="tspan6647"
+             x="240.56183"
+             y="-46.144676">Miss</tspan></text>
+      </g>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7)"
+       d="m 439.07803,-95.453012 v 17.927004"
+       id="path9502-8-53-6-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:1.44848073;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect3643-7-6"
+       width="54.151859"
+       height="54.151859"
+       x="354.16718"
+       y="78.002197"
+       transform="matrix(0.90285598,-0.42994311,0.90285598,0.42994311,0,0)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-1)"
+       d="m 439.07803,-142.01745 v -16.38351"
+       id="path9502-8-53-6-5-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       id="text823-0-2-6-1-7-2-1-5-2-2"
+       y="-145.3622"
+       x="431.07803"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan9812-5-3"
+         x="431.07803"
+         y="-145.3622">Y</tspan></text>
+    <text
+       id="text823-0-2-6-1-7-2-1-5-1-3"
+       y="-82.515198"
+       x="431.065"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan10386-33"
+         x="431.065"
+         y="-82.515198">N</tspan></text>
+    <g
+       id="g988-0"
+       transform="translate(-277.43985,-72.408014)">
+      <g
+         id="g1576">
+        <rect
+           style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect815-1-6-5-1-3-2-0-6"
+           width="98.349922"
+           height="47.54937"
+           x="314.6441"
+           y="-70.14447" />
+        <text
+           id="text823-0-2-6-1-7-2-1-8"
+           y="-50.072266"
+           x="364.42123"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+           xml:space="preserve"><tspan
+             y="-50.072266"
+             x="364.42123"
+             id="tspan1568"
+             sodipodi:role="line">Ray</tspan><tspan
+             y="-33.405598"
+             x="364.42123"
+             id="tspan1570"
+             sodipodi:role="line">Generation</tspan></text>
+      </g>
+    </g>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.92372322;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-6-3"
+       width="215.34993"
+       height="47.54937"
+       x="155.40239"
+       y="-142.5096" />
+    <text
+       id="text823-0-2-6"
+       y="-130.43739"
+       x="263.56888"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+       xml:space="preserve"><tspan
+         y="-130.43739"
+         x="263.56888"
+         id="tspan947-5"
+         sodipodi:role="line">Acceleration</tspan><tspan
+         id="tspan1116"
+         y="-113.77073"
+         x="263.56888"
+         sodipodi:role="line">Structure</tspan><tspan
+         id="tspan1118"
+         y="-97.104057"
+         x="263.56888"
+         sodipodi:role="line">Traversal</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-0)"
+       d="m 135.82735,-118.73491 h 17.927"
+       id="path9502-8-53-7-5-7-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-05)"
+       d="M 370.25969,-118.73523 H 388.1867"
+       id="path9502-8-53-7-5-7-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-8-1-7-05-1)"
+       d="m 254.12852,-184.73491 h 17.92701"
+       id="path9502-8-53-7-5-7-0-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-13)"
+       d="m 323.17953,-161.4009 v 17.927"
+       id="path9502-8-53-6-5-25"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker9512-2-2-4-7-1-3)"
+       d="m 204.70756,-142.77917 v -16.38351"
+       id="path9502-8-53-6-5-2-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       inkscape:transform-center-x="-208"
+       inkscape:transform-center-y="18.485341" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sample_count_1.svg b/codegen/vulkan/vulkan-docs-next/images/sample_count_1.svg
new file mode 100644
index 0000000..3ccc71b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sample_count_1.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
+	<desc>VK_SAMPLE_COUNT_1_BIT</desc>
+	<defs>
+		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
+			<path d="M 0 0 L 10 5 L 0 10 z" />
+		</marker>
+	</defs>
+	<g>
+		<!-- Axes -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<!-- Helper-lines -->
+		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines horizontal -->
+		<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines vertical -->
+		<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Dots -->
+		<circle cx="05000" cy="05000" r="00200" fill="black" /><text x="05000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
+	</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sample_count_16.svg b/codegen/vulkan/vulkan-docs-next/images/sample_count_16.svg
new file mode 100644
index 0000000..86767c4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sample_count_16.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
+	<desc>VK_SAMPLE_COUNT_16_BIT</desc>
+	<defs>
+		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
+			<path d="M 0 0 L 10 5 L 0 10 z" />
+		</marker>
+	</defs>
+	<g>
+		<!-- Axes -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<!-- Helper-lines -->
+		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines horizontal -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines vertical -->
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Dots -->
+		<circle cx="05625" cy="05625" r="00200" fill="black" /><text x="05625" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
+		<circle cx="04375" cy="03125" r="00200" fill="black" /><text x="04375" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
+		<circle cx="03125" cy="06250" r="00200" fill="black" /><text x="03125" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
+		<circle cx="07500" cy="04375" r="00200" fill="black" /><text x="07500" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
+		<circle cx="01875" cy="03750" r="00200" fill="black" /><text x="01875" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
+		<circle cx="06250" cy="08125" r="00200" fill="black" /><text x="06250" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
+		<circle cx="08125" cy="06875" r="00200" fill="black" /><text x="08125" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
+		<circle cx="06875" cy="01875" r="00200" fill="black" /><text x="06875" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">7</text>
+		<circle cx="03750" cy="08750" r="00200" fill="black" /><text x="03750" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">8</text>
+		<circle cx="05000" cy="00625" r="00200" fill="black" /><text x="05000" y="00625" fill="red" font-size="01100" transform="translate(00400  00400)">9</text>
+		<circle cx="02500" cy="01250" r="00200" fill="black" /><text x="02500" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">10</text>
+		<circle cx="01250" cy="07500" r="00200" fill="black" /><text x="01250" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">11</text>
+		<circle cx="00000" cy="05000" r="00200" fill="black" /><text x="00000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">12</text>
+		<circle cx="09375" cy="02500" r="00200" fill="black" /><text x="09375" y="02500" fill="red" font-size="01100" transform="translate(00000 -00400)">13</text>
+		<circle cx="08750" cy="09375" r="00200" fill="black" /><text x="08750" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">14</text>
+		<circle cx="00625" cy="00000" r="00200" fill="black" /><text x="00625" y="00000" fill="red" font-size="01100" transform="translate(00200  00800)">15</text>
+	</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sample_count_2.svg b/codegen/vulkan/vulkan-docs-next/images/sample_count_2.svg
new file mode 100644
index 0000000..a43e5ac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sample_count_2.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
+	<desc>VK_SAMPLE_COUNT_2_BIT</desc>
+	<defs>
+		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
+			<path d="M 0 0 L 10 5 L 0 10 z" />
+		</marker>
+	</defs>
+	<g>
+		<!-- Axes -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<!-- Helper-lines -->
+		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines horizontal -->
+		<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines vertical -->
+		<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Dots -->
+		<circle cx="07500" cy="07500" r="00200" fill="black" /><text x="07500" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
+		<circle cx="02500" cy="02500" r="00200" fill="black" /><text x="02500" y="02500" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
+	</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sample_count_4.svg b/codegen/vulkan/vulkan-docs-next/images/sample_count_4.svg
new file mode 100644
index 0000000..e457dc5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sample_count_4.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
+	<desc>VK_SAMPLE_COUNT_4_BIT</desc>
+	<defs>
+		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
+			<path d="M 0 0 L 10 5 L 0 10 z" />
+		</marker>
+	</defs>
+	<g>
+		<!-- Axes -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<!-- Helper-lines -->
+		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines horizontal -->
+		<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines vertical -->
+		<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Dots -->
+		<circle cx="03750" cy="01250" r="00200" fill="black" /><text x="03750" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
+		<circle cx="08750" cy="03750" r="00200" fill="black" /><text x="08750" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
+		<circle cx="01250" cy="06250" r="00200" fill="black" /><text x="01250" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
+		<circle cx="06250" cy="08750" r="00200" fill="black" /><text x="06250" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
+	</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sample_count_8.svg b/codegen/vulkan/vulkan-docs-next/images/sample_count_8.svg
new file mode 100644
index 0000000..be7bcb9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sample_count_8.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
+	<desc>VK_SAMPLE_COUNT_8_BIT</desc>
+	<defs>
+		<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
+			<path d="M 0 0 L 10 5 L 0 10 z" />
+		</marker>
+	</defs>
+	<g>
+		<!-- Axes -->
+		<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
+		<!-- Helper-lines -->
+		<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines horizontal -->
+		<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Helper-lines vertical -->
+		<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
+		<!-- Dots -->
+		<circle cx="05625" cy="03125" r="00200" fill="black" /><text x="05625" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
+		<circle cx="04375" cy="06875" r="00200" fill="black" /><text x="04375" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
+		<circle cx="08125" cy="05625" r="00200" fill="black" /><text x="08125" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
+		<circle cx="03125" cy="01875" r="00200" fill="black" /><text x="03125" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
+		<circle cx="01875" cy="08125" r="00200" fill="black" /><text x="01875" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
+		<circle cx="00625" cy="04375" r="00200" fill="black" /><text x="00625" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
+		<circle cx="06875" cy="09375" r="00200" fill="black" /><text x="06875" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
+		<circle cx="09375" cy="00625" r="00200" fill="black" /><text x="09375" y="00625" fill="red" font-size="01100" transform="translate(00200  00700)">7</text>
+	</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sparseimage.svg b/codegen/vulkan/vulkan-docs-next/images/sparseimage.svg
new file mode 100644
index 0000000..1cf04ea
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sparseimage.svg
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="213.37727mm"
+   height="140.93106mm"
+   viewBox="0 0 213.37728 140.93106"
+   version="1.1"
+   id="svg5072"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="sparseimage.svg">
+  <defs
+     id="defs5066" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="312.27341"
+     inkscape:cy="211.10847"
+     inkscape:document-units="mm"
+     inkscape:current-layer="g1301"
+     showgrid="true"
+     inkscape:measure-start="50,1040"
+     inkscape:measure-end="50,900"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5617"
+       originx="5.8699871"
+       originy="-141.02337" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5069">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(5.8699864,-15.045569)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="39.6875"
+       y="19.1875"
+       id="text7094"><tspan
+         sodipodi:role="line"
+         id="tspan7092"
+         x="39.6875"
+         y="19.1875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="97.895836"
+       y="19.187496"
+       id="text7094-5"><tspan
+         sodipodi:role="line"
+         id="tspan7092-3"
+         x="97.895836"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="156.10417"
+       y="19.187496"
+       id="text7094-6"><tspan
+         sodipodi:role="line"
+         id="tspan7092-0"
+         x="156.10417"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="48.291668"
+       id="text7094-67"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="48.291668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="53.583336"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156">Level 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="93.270836"
+       id="text7094-67-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-2">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="98.5625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-6">Level 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="138.25"
+       id="text7094-67-2"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="138.25"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="143.54167"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0">Level 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="119.72918"
+       id="text7094-67-2-8"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="119.72918"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4-0">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="125.02084"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-1">Level 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="154.125"
+       id="text7094-67-2-1"><tspan
+         sodipodi:role="line"
+         x="2.6458333"
+         y="154.125"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4">Mip Tail</tspan></text>
+    <g
+       id="g1301"
+       transform="translate(1.3229072,-3.1985317e-5)">
+      <rect
+         y="147.51044"
+         x="150.8125"
+         height="5.2916665"
+         width="5.2916665"
+         id="rect6319-7-9-4"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="139.57294"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-4-1-6-6-0-6-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="131.63542"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-6-8-6-5-2"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="125.02087"
+         x="149.48959"
+         height="29.104164"
+         width="55.5625"
+         id="rect8983-1"
+         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="177.27084"
+         y="128.98961"
+         id="text823-4-2-9-4-7-9-85-3"><tspan
+           sodipodi:role="line"
+           x="177.27084"
+           y="128.98961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="135.6042"
+         id="text823-4-2-9-4-7-9-85-3-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="135.6042"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="143.5417"
+         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="143.5417"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="151.4792"
+         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="151.4792"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 11.90626,21.833365 H 64.822927 V 74.750031 H 11.90626 Z m 5.291667,0 V 74.750031 M 27.78126,21.833365 v 52.916666 m -5.291667,0 V 21.833365 m 10.583334,0 v 52.916666 m 5.291666,0 V 21.833365 m 5.291667,0 v 52.916666 m 5.291667,0 V 21.833365 m 5.291666,0 v 52.916666 m 5.291667,0 V 21.833365 m 5.291667,5.291666 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291667 H 11.90626 m 0,5.291666 h 52.916667 m 0,5.291667 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291666 H 11.90626 m 0,5.291667 h 52.916667 m 0,5.291667 H 11.90626"
+         id="path1236"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 70.114593,21.833366 H 123.03125 V 74.750031 H 70.114593 Z m 5.29167,0 V 74.750031 M 85.989596,21.833366 v 52.916665 m -5.291669,0 V 21.833366 m 10.583336,0 v 52.916665 m 5.291661,0 V 21.833366 m 5.291666,0 v 52.916665 m 5.29167,0 V 21.833366 m 5.29166,0 v 52.916665 m 5.29167,0 V 21.833366 m 5.29166,5.291666 H 70.114593 m 0,5.291666 h 52.916657 m 0,5.291667 H 70.114593 m 0,5.291666 h 52.916657 m 0,5.291667 H 70.114593 m 0,5.291667 h 52.916657 m 0,5.291666 H 70.114593 m 0,5.291667 h 52.916657 m 0,5.291667 H 70.114593"
+         id="path1236-3"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 128.32292,21.833365 h 52.91667 v 52.916666 h -52.91667 z m 5.29167,0 v 52.916666 m 10.58333,-52.916666 v 52.916666 m -5.29166,0 V 21.833365 m 10.58333,0 v 52.916666 m 5.29167,0 V 21.833365 m 5.29166,0 v 52.916666 m 5.29167,0 V 21.833365 m 5.29167,0 v 52.916666 m 5.29166,0 V 21.833365 m 5.29167,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
+         id="path1236-1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path1299"
+         d="M 11.90626,80.041698 H 38.364398 V 106.49984 H 11.90626 Z m 5.291628,0 V 106.49984 M 22.489515,80.041698 V 106.49984 M 27.781142,80.041698 V 106.49984 M 33.07277,80.041698 v 26.458142 m -21.16651,-5.29163 h 26.458138 m 0,-5.291628 H 11.90626 m 0,-5.291627 h 26.458138 m 0,-5.29163 H 11.90626"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path1299-5"
+         d="M 70.114593,80.041698 H 96.572734 V 106.49984 H 70.114593 Z m 5.29163,0 V 106.49984 M 80.69785,80.041698 v 26.458142 m 5.291627,-26.458142 v 26.458142 m 5.291627,-26.458142 v 26.458142 m -21.166511,-5.29163 h 26.458141 m 0,-5.291628 H 70.114593 m 0,-5.291627 h 26.458141 m 0,-5.29163 H 70.114593"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path1299-7"
+         d="m 128.32292,80.041698 h 26.45814 v 26.458142 h -26.45814 z m 5.29163,0 v 26.458142 m 5.29163,-26.458142 v 26.458142 m 5.29162,-26.458142 v 26.458142 m 5.29163,-26.458142 v 26.458142 m -21.16651,-5.29163 h 26.45814 m 0,-5.291628 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 11.90626,148.83337 h 10.583332 v 5.29167 H 11.90626 Z m 5.291667,0 v 5.29167"
+         id="path1160"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833334, 1.05833334;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 18.52084,143.54172 h 3.96875 V 132.95838 H 11.90626 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
+         id="path1094-0"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 17.19792,143.54172 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+         id="path1111-1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 11.90626,114.43753 v 13.22916 H 25.13542 V 114.43753 H 11.90626 m 5.291659,0 v 13.22916 m 5.291671,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
+         id="path1124-3"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 25.13543,127.66669 h 2.645831 V 111.7917 H 11.90626 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.291671,2.64583 H 25.13543 m 2.645831,5.29166 H 25.13543"
+         id="path1141-9"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 70.114594,148.83338 h 10.583332 v 5.29167 H 70.114594 Z m 5.291666,0 v 5.29167"
+         id="path1160-3"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 76.729174,143.54171 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
+         id="path1094-0-5"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 75.406254,143.54171 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+         id="path1111-1-6"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 70.114594,114.43754 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.291659,0 v 13.22916 m 5.291671,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
+         id="path1124-3-4"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 83.343764,127.6667 h 2.645831 V 111.79171 H 70.114594 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.291671,2.64583 h -2.645831 m 2.645831,5.29166 h -2.645831"
+         id="path1141-9-1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 128.32293,148.83338 h 10.58333 v 5.29167 h -10.58333 z m 5.29167,0 v 5.29167"
+         id="path1160-0"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 134.93751,143.54171 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
+         id="path1094-0-9"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 133.61459,143.54171 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+         id="path1111-1-1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 128.32293,114.43754 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.29166,0 v 13.22916 m 5.29167,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
+         id="path1124-3-5"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
+         d="m 141.5521,127.6667 h 2.64583 v -15.87499 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
+         id="path1141-9-5"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize.svg b/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize.svg
new file mode 100644
index 0000000..db50839
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize.svg
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="213.37727mm"
+   height="126.98255mm"
+   viewBox="0 0 213.37728 126.98255"
+   version="1.1"
+   id="svg5072"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="sparseimage_alignedmipsize.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="320.51149"
+     inkscape:cy="359.79403"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:measure-start="50,1040"
+     inkscape:measure-end="50,900"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5617"
+       originx="5.8699868"
+       originy="-154.97188" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5069">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(5.8699862,-15.045569)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="39.6875"
+       y="19.1875"
+       id="text7094"><tspan
+         sodipodi:role="line"
+         id="tspan7092"
+         x="39.6875"
+         y="19.1875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="97.895836"
+       y="19.187496"
+       id="text7094-5"><tspan
+         sodipodi:role="line"
+         id="tspan7092-3"
+         x="97.895836"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="156.10417"
+       y="19.187496"
+       id="text7094-6"><tspan
+         sodipodi:role="line"
+         id="tspan7092-0"
+         x="156.10417"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="48.291668"
+       id="text7094-67"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="48.291668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="53.583336"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156">Level 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="93.270836"
+       id="text7094-67-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-2">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="98.5625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-6">Level 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458337"
+       y="127.66666"
+       id="text7094-67-2-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="127.66666"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4">Mip Tail</tspan></text>
+    <g
+       transform="translate(1.3229068,-13.229199)"
+       id="g1301">
+      <rect
+         y="147.51044"
+         x="150.8125"
+         height="5.2916665"
+         width="5.2916665"
+         id="rect6319-7-9-4"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="139.57294"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-4-1-6-6-0-6-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="131.63542"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-6-8-6-5-2"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="125.02087"
+         x="149.48959"
+         height="29.104164"
+         width="55.5625"
+         id="rect8983-1"
+         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:1.06,1.06;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="177.27084"
+         y="128.98961"
+         id="text823-4-2-9-4-7-9-85-3"><tspan
+           sodipodi:role="line"
+           x="177.27084"
+           y="128.98961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="135.6042"
+         id="text823-4-2-9-4-7-9-85-3-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="135.6042"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="143.5417"
+         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="143.5417"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="151.4792"
+         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="151.4792"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
+    </g>
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 13.229167,21.833334 H 66.145833 V 74.75 H 13.229167 Z m 5.291667,0 V 74.75 M 29.104167,21.833334 V 74.75 m -5.291667,0 V 21.833334 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833334 m 5.291666,0 V 74.75 m 5.291667,0 V 21.833334 m 5.291667,0 V 74.75 m 5.291666,0 V 21.833334 M 66.145833,27.125 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
+       id="path1236"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 71.437501,21.833335 H 124.35416 V 74.75 H 71.437501 Z m 5.291667,0 V 74.75 M 87.312501,21.833335 V 74.75 m -5.291667,0 V 21.833335 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833335 m 5.291666,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,5.291666 H 71.437501 m 0,5.291666 h 52.916659 m 0,5.291667 H 71.437501 m 0,5.291666 h 52.916659 m 0,5.291667 H 71.437501 m 0,5.291667 h 52.916659 m 0,5.291666 H 71.437501 m 0,5.291667 h 52.916659 m 0,5.291667 H 71.437501"
+       id="path1236-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 129.64583,21.833334 H 182.5625 V 74.75 h -52.91667 z m 5.29167,0 V 74.75 M 145.52083,21.833334 V 74.75 m -5.29166,0 V 21.833334 m 10.58333,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29167,0 V 74.75 m 5.29166,0 V 21.833334 M 182.5625,27.125 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
+       id="path1236-1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299"
+       d="M 13.229167,80.041667 H 39.687305 V 106.49981 H 13.229167 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458138 m 0,-5.291631 H 13.229167 m 0,-5.291627 h 26.458138 m 0,-5.291628 H 13.229167"
+       style="fill:#808080;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-5"
+       d="M 71.437501,80.041667 H 97.895639 V 106.49981 H 71.437501 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458138 m 0,-5.291631 H 71.437501 m 0,-5.291627 h 26.458138 m 0,-5.291628 H 71.437501"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-7"
+       d="m 129.64583,80.041667 h 26.45814 v 26.458143 h -26.45814 z m 5.29163,0 v 26.458143 m 5.29163,-26.458143 v 26.458143 m 5.29162,-26.458143 v 26.458143 m 5.29163,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.45814 m 0,-5.291631 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.291628 h -26.45814"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-6"
+       d="m 13.229167,111.79167 15.875001,-3e-5 v 26.45815 l -15.875001,3e-5 z m 5.291629,0 v 26.45815 m 5.291627,-26.45815 v 26.45815 m -10.583256,-5.29163 15.875001,-3e-5 m 0,-5.29164 -15.875001,3e-5 m 0,-5.29162 15.875001,-3e-5 m 0,-5.29163 -15.875001,3e-5"
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccc" />
+    <path
+       id="path1299-6-4"
+       d="m 71.437501,111.79167 15.875001,-3e-5 v 26.45815 l -15.875001,3e-5 z m 5.291628,0 v 26.45815 m 5.291628,-26.45815 v 26.45815 m -10.583256,-5.29163 15.875001,-3e-5 m 0,-5.29164 -15.875001,3e-5 m 0,-5.29162 15.875001,-3e-5 m 0,-5.29163 -15.875001,3e-5"
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccc" />
+    <path
+       id="path1299-6-8"
+       d="m 129.64583,111.79167 15.875,-3e-5 v 26.45815 l -15.875,3e-5 z m 5.29163,0 v 26.45815 m 5.29162,-26.45815 v 26.45815 m -10.58325,-5.29163 15.875,-3e-5 m 0,-5.29164 -15.875,3e-5 m 0,-5.29162 15.875,-3e-5 m 0,-5.29163 -15.875,3e-5"
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccc" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize_singlemiptail.svg b/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize_singlemiptail.svg
new file mode 100644
index 0000000..74707a3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sparseimage_alignedmipsize_singlemiptail.svg
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="213.37727mm"
+   height="126.98255mm"
+   viewBox="0 0 213.37728 126.98255"
+   version="1.1"
+   id="svg5072"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="sparseimage_alignedmipsize_singlemiptail.svg">
+  <defs
+     id="defs5066" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="386.2212"
+     inkscape:cy="333.12919"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:measure-start="50,1040"
+     inkscape:measure-end="50,900"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5617"
+       originx="5.8699868"
+       originy="-154.97188" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5069">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(5.8699862,-15.045569)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="39.6875"
+       y="19.1875"
+       id="text7094"><tspan
+         sodipodi:role="line"
+         id="tspan7092"
+         x="39.6875"
+         y="19.1875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="97.895836"
+       y="19.187496"
+       id="text7094-5"><tspan
+         sodipodi:role="line"
+         id="tspan7092-3"
+         x="97.895836"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="156.10417"
+       y="19.187496"
+       id="text7094-6"><tspan
+         sodipodi:role="line"
+         id="tspan7092-0"
+         x="156.10417"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="48.291668"
+       id="text7094-67"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="48.291668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="53.583336"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156">Level 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="93.270836"
+       id="text7094-67-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-2">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="98.5625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-6">Level 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458337"
+       y="127.66666"
+       id="text7094-67-2-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="127.66666"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4">Mip Tail</tspan></text>
+    <g
+       transform="translate(1.3229068,-13.229199)"
+       id="g1301">
+      <rect
+         y="147.51044"
+         x="150.8125"
+         height="5.2916665"
+         width="5.2916665"
+         id="rect6319-7-9-4"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="139.57294"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-4-1-6-6-0-6-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="131.63542"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-6-8-6-5-2"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="125.02087"
+         x="149.48959"
+         height="29.104164"
+         width="55.5625"
+         id="rect8983-1"
+         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="177.27084"
+         y="128.98961"
+         id="text823-4-2-9-4-7-9-85-3"><tspan
+           sodipodi:role="line"
+           x="177.27084"
+           y="128.98961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="135.6042"
+         id="text823-4-2-9-4-7-9-85-3-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="135.6042"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="143.5417"
+         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="143.5417"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="151.4792"
+         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="151.4792"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
+    </g>
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 13.229167,21.833334 H 66.145833 V 74.75 H 13.229167 Z m 5.291667,0 V 74.75 M 29.104167,21.833334 V 74.75 m -5.291667,0 V 21.833334 m 10.583334,0 V 74.75 m 5.291666,0 V 21.833334 m 5.291666,0 V 74.75 m 5.291667,0 V 21.833334 m 5.291667,0 V 74.75 m 5.291666,0 V 21.833334 M 66.145833,27.125 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291668 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
+       id="path1236"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 71.4375,21.833335 h 52.91666 V 74.75 H 71.4375 Z m 5.291669,0 V 74.75 M 87.312502,21.833335 V 74.75 m -5.291669,0 V 21.833335 m 10.583336,0 V 74.75 m 5.291664,0 V 21.833335 m 5.291667,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833335 m 5.29166,5.291666 H 71.4375 m 0,5.291665 h 52.91666 m 0,5.291667 H 71.4375 m 0,5.291666 h 52.91666 m 0,5.291667 H 71.4375 m 0,5.291668 h 52.91666 m 0,5.291666 H 71.4375 m 0,5.291667 h 52.91666 m 0,5.291667 H 71.4375"
+       id="path1236-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 129.64583,21.833334 H 182.5625 V 74.75 h -52.91667 z m 5.29167,0 V 74.75 M 145.52083,21.833334 V 74.75 m -5.29166,0 V 21.833334 m 10.58333,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29166,0 V 74.75 m 5.29167,0 V 21.833334 m 5.29167,0 V 74.75 m 5.29166,0 V 21.833334 M 182.5625,27.125 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291668 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
+       id="path1236-1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299"
+       d="M 13.229167,80.041667 H 39.687304 V 106.49981 H 13.229167 Z m 5.291628,0 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291627,-26.458143 v 26.458143 m 5.291628,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.458137 m 0,-5.291629 H 13.229167 m 0,-5.291627 h 26.458137 m 0,-5.29163 H 13.229167"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-5"
+       d="M 71.4375,80.041667 H 97.895643 V 106.49981 H 71.4375 Z m 5.291629,0 V 106.49981 M 82.020756,80.041667 V 106.49981 M 87.312383,80.041667 V 106.49981 M 92.60401,80.041667 V 106.49981 M 71.4375,101.20818 h 26.458143 m 0,-5.291629 H 71.4375 m 0,-5.291627 h 26.458143 m 0,-5.29163 H 71.4375"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-7"
+       d="m 129.64583,80.041667 h 26.45814 v 26.458143 h -26.45814 z m 5.29163,0 v 26.458143 m 5.29163,-26.458143 v 26.458143 m 5.29162,-26.458143 v 26.458143 m 5.29163,-26.458143 v 26.458143 m -21.16651,-5.29163 h 26.45814 m 0,-5.291629 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 13.229167,111.79167 h 47.625 V 138.25 h -47.625 z m 5.291667,0 V 138.25 M 29.104167,111.79167 V 138.25 m -5.291667,0 v -26.45833 m 10.583334,0 V 138.25 m 5.291666,0 v -26.45833 m 5.291666,0 V 138.25 m 5.291667,0 v -26.45833 m 5.291667,0 V 138.25 m 5.291667,-21.16666 h -47.625 m 0,5.29166 h 47.625 m 0,5.29167 h -47.625 m 0,5.29167 h 47.625"
+       id="path1236-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccc" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sparseimage_multiaspect.svg b/codegen/vulkan/vulkan-docs-next/images/sparseimage_multiaspect.svg
new file mode 100644
index 0000000..810fbf6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sparseimage_multiaspect.svg
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="163.10645mm"
+   height="156.29341mm"
+   viewBox="0 0 163.10645 156.29341"
+   version="1.1"
+   id="svg5072"
+   sodipodi:docname="sparseimage_multiaspect.svg"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
+  <defs
+     id="defs5066" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="287.95243"
+     inkscape:cy="224.95974"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:measure-start="50,1040"
+     inkscape:measure-end="50,900"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     showguides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5617"
+       originx="5.8699862"
+       originy="-125.73543" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5069">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(5.8699859,-14.971155)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="39.6875"
+       y="19.1875"
+       id="text7094"><tspan
+         sodipodi:role="line"
+         id="tspan7092"
+         x="39.6875"
+         y="19.1875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Depth</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="97.895836"
+       y="19.187496"
+       id="text7094-5"><tspan
+         sodipodi:role="line"
+         id="tspan7092-3"
+         x="97.895836"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Stencil</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="48.291668"
+       id="text7094-67"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="48.291668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="53.583336"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156">Level 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="93.270836"
+       id="text7094-67-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-2">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="98.5625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-6">Level 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.645834"
+       y="148.83334"
+       id="text7094-67-2"><tspan
+         sodipodi:role="line"
+         x="2.645834"
+         y="148.83334"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458342"
+         y="154.12502"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0">Level 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458337"
+       y="125.02084"
+       id="text7094-67-2-8"><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="125.02084"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4-0">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.645834"
+         y="130.31252"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-1">Level 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.645834"
+       y="170"
+       id="text7094-67-2-1"><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="170"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4">Mip Tail</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="142.875"
+       y="78.71875"
+       id="text7094-67-2-1-1"><tspan
+         sodipodi:role="line"
+         x="142.875"
+         y="78.71875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4-5">Mip Tail</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="142.875"
+       y="19.187498"
+       id="text7094-4"><tspan
+         sodipodi:role="line"
+         id="tspan7092-8"
+         x="142.875"
+         y="19.187498"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Metadata</tspan></text>
+    <g
+       transform="translate(-48.947927,15.874963)"
+       id="g1301">
+      <rect
+         y="147.51044"
+         x="150.8125"
+         height="5.2916665"
+         width="5.2916665"
+         id="rect6319-7-9-4"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="139.57294"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-4-1-6-6-0-6-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="131.63542"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-6-8-6-5-2"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="125.02087"
+         x="149.48959"
+         height="29.104164"
+         width="55.5625"
+         id="rect8983-1"
+         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="177.27084"
+         y="128.98961"
+         id="text823-4-2-9-4-7-9-85-3"><tspan
+           sodipodi:role="line"
+           x="177.27084"
+           y="128.98961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="135.6042"
+         id="text823-4-2-9-4-7-9-85-3-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="135.6042"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="143.5417"
+         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="143.5417"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="151.4792"
+         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="151.4792"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05999995, 1.05999995;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 84.666666,138.25 h 7.9375 V 117.08333 H 71.437499 v 7.9375 m 10.583336,0 v -7.9375 m 2.645833,10.58334 h 7.9375"
+       id="path1094"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 82.020834,138.25 v -13.22917 m 2.645833,2.64584 H 71.4375 M 84.666665,138.25 H 71.437498 V 125.02083 H 84.666667 V 138.25"
+       id="path1111"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 71.437498,85.333322 V 111.79166 H 97.895831 V 85.333322 H 71.437498 m 10.583336,0 v 26.458338 m 10.583333,0 V 85.333322 M 71.4375,90.624992 H 97.895834 M 71.4375,101.20833 h 26.458334"
+       id="path1124"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833328, 1.05833328;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 97.89584,111.79166 h 5.29166 V 80.041662 H 71.437502 v 5.29167 m 10.583336,-5.29167 v 5.29167 m 10.583334,-5.29167 v 5.29167 m 10.583328,5.29166 h -5.29166 m 5.29166,10.583338 h -5.29166"
+       id="path1141"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 71.437498,159.41666 h 21.166667 v 10.58333 H 71.437498 Z m 10.583336,0 0,10.58334"
+       id="path1158"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 13.229167,164.70833 h 10.583332 v 5.29166 H 13.229167 Z m 5.291667,0 0,5.29167"
+       id="path1160"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833333, 1.05833333;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 19.843747,154.125 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
+       id="path1094-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 18.520827,154.125 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+       id="path1111-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 13.229167,119.72916 v 13.22917 H 26.458326 V 119.72916 H 13.229167 m 5.291659,0 v 13.22917 m 5.291671,0 v -13.22917 m -10.58333,2.64584 h 13.229159 m -13.229159,5.29167 h 13.229159"
+       id="path1124-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833334, 1.05833334;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 26.458337,132.95833 h 2.64583 v -15.875 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29167 h -2.64583"
+       id="path1141-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 13.229167,80.041662 H 39.6875 V 106.5 H 13.229167 V 80.041662 m 5.291667,0 V 106.5 M 23.8125,80.041662 V 106.5 M 29.104167,80.041662 V 106.5 M 34.395834,80.041662 V 106.5 M 13.229167,101.20833 H 39.6875 m 0,-5.291668 H 13.229167 m 0,-5.291667 H 39.6875 m 0,-5.291666 H 13.229167"
+       id="path1204"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;stroke:#000000;stroke-width:0.26458333;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 71.4375,21.83333 h 52.91667 V 74.750015 H 71.4375 V 21.83333 m 10.583334,0 V 74.750015 M 92.604166,21.83333 V 74.750015 M 103.1875,21.83333 V 74.750015 M 113.77084,21.83333 V 74.750015 M 71.4375,64.166665 h 52.91667 m 0,-10.583335 H 71.4375 m 0,-10.583334 h 52.91667 m 0,-10.583332 H 71.4375"
+       id="path1204-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+       d="M 13.229167,21.83333 H 66.145833 V 74.749996 H 13.229167 Z m 5.291667,0 V 74.749996 M 29.104167,21.83333 v 52.916666 m -5.291667,0 V 21.83333 m 10.583334,0 v 52.916666 m 5.291666,0 V 21.83333 m 5.291667,0 v 52.916666 m 5.291666,0 V 21.83333 m 5.291667,0 v 52.916666 m 5.291667,0 V 21.83333 m 5.291666,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916666 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916666 m 0,5.291667 H 13.229167"
+       id="path1236"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,21.83333 h 26.45834 v 52.916664 h -26.45834 z m 5.29167,0 V 74.749994 M 145.52083,21.83333 v 52.916664 m -5.29167,0 V 21.83333 m 10.58334,0 v 52.916664 m 5.29167,-47.624998 h -26.45834 m 0,5.291667 h 26.45834 m 0,5.291667 h -26.45834 m 0,5.291666 h 26.45834 m 0,5.291668 h -26.45834 m 0,5.29167 h 26.45834 m 0,5.29166 h -26.45834 m 0,5.29167 h 26.45834 m 0,5.29167 h -26.45834"
+       id="path1236-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/sparseimage_singlemiptail.svg b/codegen/vulkan/vulkan-docs-next/images/sparseimage_singlemiptail.svg
new file mode 100644
index 0000000..70533e0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/sparseimage_singlemiptail.svg
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="213.37727mm"
+   height="140.93106mm"
+   viewBox="0 0 213.37728 140.93106"
+   version="1.1"
+   id="svg5072"
+   sodipodi:docname="sparseimage_singlemiptail.svg"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
+  <defs
+     id="defs5066" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="395.52786"
+     inkscape:cy="210.32605"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:measure-start="50,1040"
+     inkscape:measure-end="50,900"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-text-baseline="true"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5617"
+       originx="5.869987"
+       originy="-141.02337" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5069">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(5.8699864,-15.045569)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="39.6875"
+       y="19.1875"
+       id="text7094"><tspan
+         sodipodi:role="line"
+         id="tspan7092"
+         x="39.6875"
+         y="19.1875"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="97.895836"
+       y="19.187496"
+       id="text7094-5"><tspan
+         sodipodi:role="line"
+         id="tspan7092-3"
+         x="97.895836"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="156.10417"
+       y="19.187496"
+       id="text7094-6"><tspan
+         sodipodi:role="line"
+         id="tspan7092-0"
+         x="156.10417"
+         y="19.187496"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">Array Layer 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="48.291668"
+       id="text7094-67"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="48.291668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="53.583336"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156">Level 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="93.270836"
+       id="text7094-67-1"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="93.270836"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-2">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="98.5625"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-6">Level 1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="138.25"
+       id="text7094-67-2"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="138.25"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="143.54167"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0">Level 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="119.72918"
+       id="text7094-67-2-8"><tspan
+         sodipodi:role="line"
+         x="2.6458335"
+         y="119.72918"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7152-4-0">Mip</tspan><tspan
+         sodipodi:role="line"
+         x="2.6458337"
+         y="125.02084"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-1">Level 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="2.6458335"
+       y="154.125"
+       id="text7094-67-2-1"><tspan
+         sodipodi:role="line"
+         x="2.6458333"
+         y="154.125"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+         id="tspan7156-0-4">Mip Tail</tspan></text>
+    <g
+       transform="translate(1.3229071,-3.1985317e-5)"
+       id="g1301">
+      <rect
+         y="147.51044"
+         x="150.8125"
+         height="5.2916665"
+         width="5.2916665"
+         id="rect6319-7-9-4"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="139.57294"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-4-1-6-6-0-6-8"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-miterlimit:4;stroke-dasharray:1.05999995,1.05999995;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="131.63542"
+         x="150.8125"
+         height="5.2916675"
+         width="5.2916675"
+         id="rect5619-6-8-6-5-2"
+         style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="125.02087"
+         x="149.48959"
+         height="29.104164"
+         width="55.5625"
+         id="rect8983-1"
+         style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-miterlimit:4;stroke-dasharray:1.05833327,1.05833327;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="177.27084"
+         y="128.98961"
+         id="text823-4-2-9-4-7-9-85-3"><tspan
+           sodipodi:role="line"
+           x="177.27084"
+           y="128.98961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3">Legend</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="135.6042"
+         id="text823-4-2-9-4-7-9-85-3-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="135.6042"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4">Image Pixel Data</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="143.5417"
+         id="text823-4-2-9-4-7-9-85-3-6-5"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="143.5417"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-2">Sparse Memory Block</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687499"
+         x="157.42709"
+         y="151.4792"
+         id="text823-4-2-9-4-7-9-85-3-6-6"><tspan
+           sodipodi:role="line"
+           x="157.42709"
+           y="151.4792"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.39687499"
+           id="tspan825-6-0-2-5-6-26-7-3-4-1">Mip Tail Data</tspan></text>
+    </g>
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 13.229167,21.833333 H 66.145834 V 74.749999 H 13.229167 Z m 5.291667,0 V 74.749999 M 29.104168,21.833333 v 52.916666 m -5.291668,0 V 21.833333 m 10.583334,0 v 52.916666 m 5.291667,0 V 21.833333 m 5.291666,0 v 52.916666 m 5.291667,0 V 21.833333 m 5.291667,0 v 52.916666 m 5.291666,0 V 21.833333 m 5.291667,5.291666 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291667 H 13.229167 m 0,5.291666 h 52.916667 m 0,5.291667 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291666 H 13.229167 m 0,5.291667 h 52.916667 m 0,5.291667 H 13.229167"
+       id="path1236"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 71.437501,21.833334 H 124.35417 V 74.749999 H 71.437501 Z m 5.291669,0 V 74.749999 M 87.312503,21.833334 v 52.916665 m -5.291669,0 V 21.833334 m 10.583336,0 v 52.916665 m 5.291657,0 V 21.833334 m 5.291673,0 v 52.916665 m 5.29167,0 V 21.833334 m 5.29166,0 v 52.916665 m 5.29168,0 V 21.833334 M 124.35417,27.125 H 71.437501 m 0,5.291666 h 52.916669 m 0,5.291667 H 71.437501 m 0,5.291666 h 52.916669 m 0,5.291667 H 71.437501 m 0,5.291667 h 52.916669 m 0,5.291666 H 71.437501 m 0,5.291667 h 52.916669 m 0,5.291667 H 71.437501"
+       id="path1236-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64584,21.833333 h 52.91667 v 52.916666 h -52.91667 z m 5.29167,0 v 52.916666 m 10.58333,-52.916666 v 52.916666 m -5.29166,0 V 21.833333 m 10.58333,0 v 52.916666 m 5.29167,0 V 21.833333 m 5.29166,0 v 52.916666 m 5.29167,0 V 21.833333 m 5.29167,0 v 52.916666 m 5.29166,0 V 21.833333 m 5.29167,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291666 h 52.91667 m 0,5.291667 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291666 h -52.91667 m 0,5.291667 h 52.91667 m 0,5.291667 h -52.91667"
+       id="path1236-1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299"
+       d="M 13.229167,80.041666 H 39.687305 V 106.49981 H 13.229167 Z m 5.291628,0 V 106.49981 M 23.812422,80.041666 V 106.49981 M 29.10405,80.041666 v 26.458144 m 5.291628,-26.458144 v 26.458144 m -21.166511,-5.29163 h 26.458138 m 0,-5.29163 H 13.229167 m 0,-5.291627 h 26.458138 m 0,-5.29163 H 13.229167"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-5"
+       d="M 71.437501,80.041666 H 97.895647 V 106.49981 H 71.437501 Z m 5.291629,0 v 26.458144 m 5.291627,-26.458144 v 26.458144 m 5.291627,-26.458144 v 26.458144 m 5.291627,-26.458144 v 26.458144 m -21.16651,-5.29163 h 26.458146 m 0,-5.29163 H 71.437501 m 0,-5.291627 h 26.458146 m 0,-5.29163 H 71.437501"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path1299-7"
+       d="m 129.64584,80.041666 h 26.45814 v 26.458144 h -26.45814 z m 5.29163,0 v 26.458144 m 5.29163,-26.458144 v 26.458144 m 5.29162,-26.458144 v 26.458144 m 5.29163,-26.458144 v 26.458144 m -21.16651,-5.29163 h 26.45814 m 0,-5.29163 h -26.45814 m 0,-5.291627 h 26.45814 m 0,-5.29163 h -26.45814"
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.25399813px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833335, 1.05833335;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 19.843748,143.5417 h 3.96875 V 132.95836 H 13.229167 v 3.96875 m 5.29166,0 v -3.96875 m 1.322921,5.29167 h 3.96875"
+       id="path1094-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 18.520827,143.5417 v -6.61459 m 1.322921,1.32292 h -6.614581 m 6.614581,5.29167 h -6.614581 v -6.61459 h 6.614581 v 6.61459"
+       id="path1111-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 13.229167,114.43752 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.291659,0 v 13.22916 m 5.291672,0 v -13.22916 m -10.583331,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
+       id="path1124-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 26.458338,127.66668 h 2.64583 V 111.79169 H 13.229167 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.291661,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
+       id="path1141-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 78.052081,143.54169 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.291661,0 v -3.96875 m 1.322919,5.29167 h 3.96875"
+       id="path1094-0-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 76.729162,143.54169 v -6.61459 m 1.322919,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+       id="path1111-1-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 71.437501,114.43751 v 13.22916 H 84.666662 V 114.43751 H 71.437501 m 5.291661,0 v 13.22916 m 5.291669,0 v -13.22916 m -10.58333,2.64584 h 13.229161 m -13.229161,5.29166 h 13.229161"
+       id="path1124-3-4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833337, 1.05833337;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 84.666673,127.66667 h 2.64583 V 111.79168 H 71.437501 v 2.64584 m 5.291672,-2.64584 v 2.64584 m 5.291658,-2.64584 v 2.64584 m 5.291672,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
+       id="path1141-9-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833336, 1.05833336;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 136.26043,143.54169 h 3.96875 v -10.58334 h -10.58333 v 3.96875 m 5.29166,0 v -3.96875 m 1.32292,5.29167 h 3.96875"
+       id="path1094-0-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 134.93751,143.54169 v -6.61459 m 1.32292,1.32292 h -6.61458 m 6.61458,5.29167 h -6.61458 v -6.61459 h 6.61458 v 6.61459"
+       id="path1111-1-1"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 129.64585,114.43751 v 13.22916 h 13.22916 v -13.22916 h -13.22916 m 5.29166,0 v 13.22916 m 5.29167,0 v -13.22916 m -10.58333,2.64584 h 13.22916 m -13.22916,5.29166 h 13.22916"
+       id="path1124-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833337, 1.05833337;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 142.87502,127.66667 h 2.64583 v -15.87499 h -15.875 v 2.64584 m 5.29167,-2.64584 v 2.64584 m 5.29166,-2.64584 v 2.64584 m 5.29167,2.64583 h -2.64583 m 2.64583,5.29166 h -2.64583"
+       id="path1141-9-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 13.229168,148.83333 h 31.75 l 10e-7,5.29167 H 13.229168 Z m 5.291667,0 v 5.29167 m 10.583333,-5.29167 v 5.29167 m -5.291667,0 v -5.29167 m 10.583333,0 v 5.29167 m 5.291667,0 v -5.29167"
+       id="path1236-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccc" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/tessparam.svg b/codegen/vulkan/vulkan-docs-next/images/tessparam.svg
new file mode 100644
index 0000000..42279f0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/tessparam.svg
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="158.03326mm"
+   height="140.22618mm"
+   viewBox="0 0 158.03326 140.22618"
+   version="1.1"
+   id="svg3252"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="tessparam.svg">
+  <defs
+     id="defs3246">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1632"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1629"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="227.37134"
+     inkscape:cy="188.15798"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3797"
+       originx="-70.89992"
+       originy="-158.47658" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3249">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-70.899921,1.7027598)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 188.9636,20.372957 -15.87499,23.812497 h 31.75 z"
+       id="path5083"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 188.9636,4.497957 c -31.74999,47.624997 -31.74999,47.624997 -31.74999,47.624997 h 63.5 z"
+       id="path4959"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect5129"
+       width="31.750002"
+       height="31.750002"
+       x="89.744835"
+       y="12.435457" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect5129-4"
+       width="47.624992"
+       height="47.624992"
+       x="81.80735"
+       y="4.4979587" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,127.5292 h 47.625"
+       id="path5163"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,119.59171 h 47.625"
+       id="path5165"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,111.6542 h 47.625"
+       id="path5167"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,103.7167 h 47.625"
+       id="path5169"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,95.779205 h 47.625"
+       id="path5171"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.43237,87.841704 h 47.625"
+       id="path5173"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:15.875px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="139.35422"
+       y="64.029213"
+       id="text5179"><tspan
+         sodipodi:role="line"
+         id="tspan5177"
+         x="139.35422"
+         y="78.512459"
+         style="stroke-width:0.39687496" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.24486"
+       y="81.888588"
+       id="text2799"><tspan
+         sodipodi:role="line"
+         id="tspan2797"
+         x="153.24486"
+         y="81.888588"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(no edge)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="77.91983"
+       id="text2799-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9"
+         x="129.43236"
+         y="77.91983"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="177.05736"
+       y="77.91983"
+       id="text2799-3-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7"
+         x="177.05736"
+         y="77.91983"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="131.49797"
+       id="text2799-3-1-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-2"
+         x="129.43236"
+         y="131.49797"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="177.05736"
+       y="131.49796"
+       id="text2799-3-1-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-0"
+         x="177.05736"
+         y="131.49796"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="2.5135815"
+       id="text5070-2-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36"
+         x="188.96361"
+         y="2.5135815"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="220.71503"
+       y="55.833858"
+       id="text5070-2-2-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-1"
+         x="220.71503"
+         y="55.833858"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="157.17018"
+       y="55.771183"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="157.17018"
+         y="55.771183"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="81.807327"
+       y="2.5135815"
+       id="text2799-3-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-70"
+         x="81.807327"
+         y="2.5135815"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="2.5135815"
+       id="text2799-3-1-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-3"
+         x="129.43236"
+         y="2.5135815"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="81.807327"
+       y="56.091732"
+       id="text2799-3-1-8-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-2-0"
+         x="81.807327"
+         y="56.091732"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="56.091721"
+       id="text2799-3-1-7-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-0-2"
+         x="129.43236"
+         y="56.091721"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="113.55736"
+       y="105.70109"
+       id="text2799-38"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6"
+         x="113.55736"
+         y="105.70109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.24486"
+       y="131.49796"
+       id="text2799-38-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4"
+         x="153.24486"
+         y="131.49796"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.58800024,1.58800024;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#Arrow1Mend)"
+       d="M 119.51048,79.904208 V 127.52921"
+       id="path8332"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="75.854202"
+       y="28.310455"
+       id="text2799-38-88"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-9"
+         x="75.854202"
+         y="28.310455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="56.091705"
+       id="text2799-38-8-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0"
+         x="105.61983"
+         y="56.091705"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="2.5135815"
+       id="text2799-38-8-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-5"
+         x="105.61983"
+         y="2.5135815"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="135.38548"
+       y="28.310455"
+       id="text2799-38-8-5-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-6"
+         x="135.38548"
+         y="28.310455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="16.404205"
+       id="text2799-38-8-5-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-9"
+         x="105.61983"
+         y="16.404205"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="95.697983"
+       y="28.310455"
+       id="text2799-38-8-5-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-0"
+         x="95.697983"
+         y="28.310455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="167.13547"
+       y="28.310455"
+       id="text2799-38-88-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-9-9"
+         x="167.13547"
+         y="28.310455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="210.79172"
+       y="28.310455"
+       id="text2799-38-8-5-1-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-6-8"
+         x="210.79172"
+         y="28.310455"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="56.091709"
+       id="text2799-38-8-5-2"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-56"
+         x="188.96361"
+         y="56.091709"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="36.247959"
+       id="text2799-38-8-5-3-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-9-0"
+         x="188.96361"
+         y="36.247959"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="62.04483"
+       id="text2799-30"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0"
+         x="105.61983"
+         y="62.04483"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Quads</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="62.04483"
+       id="text2799-30-4"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0-8"
+         x="188.96361"
+         y="62.04483"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Triangles</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.24486"
+       y="137.45108"
+       id="text2799-30-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0-80"
+         x="153.24486"
+         y="137.45108"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Isolines</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/tessparamUL.svg b/codegen/vulkan/vulkan-docs-next/images/tessparamUL.svg
new file mode 100644
index 0000000..779e538
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/tessparamUL.svg
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="158.03326mm"
+   height="140.2262mm"
+   viewBox="0 0 158.03326 140.2262"
+   version="1.1"
+   id="svg3252"
+   sodipodi:docname="tessparamUL.svg"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
+  <defs
+     id="defs3246">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1632"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1629"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="62.03704"
+     inkscape:cy="267.41508"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-left="1"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3797"
+       originx="-70.89992"
+       originy="-158.47658" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3249">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-70.899921,1.7027646)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 188.9636,35.609765 173.08861,11.797268 h 31.75 z"
+       id="path5083"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 188.9636,51.484765 C 157.21361,3.859768 157.21361,3.859768 157.21361,3.859768 h 63.5 z"
+       id="path4959"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect5129"
+       width="31.750002"
+       height="31.750002"
+       x="89.744835"
+       y="12.435458" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.39687496;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect5129-4"
+       width="47.624992"
+       height="47.624992"
+       x="81.80735"
+       y="4.4979596" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,80.041678 h 47.625"
+       id="path5163"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,119.72918 h 47.625"
+       id="path5165"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,111.79168 h 47.625"
+       id="path5167"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,103.85418 h 47.625"
+       id="path5169"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,95.916678 h 47.625"
+       id="path5171"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.64583,87.979178 h 47.625"
+       id="path5173"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:15.875px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="139.35422"
+       y="64.029213"
+       id="text5179"><tspan
+         sodipodi:role="line"
+         id="tspan5177"
+         x="139.35422"
+         y="78.512459"
+         style="stroke-width:0.39687496" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.45833"
+       y="127.66668"
+       id="text2799"><tspan
+         sodipodi:role="line"
+         id="tspan2797"
+         x="153.45833"
+         y="127.66668"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(no edge)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="131.49797"
+       id="text2799-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9"
+         x="129.43236"
+         y="131.49797"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="177.05736"
+       y="131.49797"
+       id="text2799-3-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7"
+         x="177.05736"
+         y="131.49797"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="77.91983"
+       id="text2799-3-1-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-2"
+         x="129.43236"
+         y="77.91983"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="177.05736"
+       y="77.919846"
+       id="text2799-3-1-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-0"
+         x="177.05736"
+         y="77.919846"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="55.833851"
+       id="text5070-2-2-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36"
+         x="188.96361"
+         y="55.833851"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="220.71503"
+       y="2.5135767"
+       id="text5070-2-2-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-1"
+         x="220.71503"
+         y="2.5135767"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(1,0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="157.17018"
+       y="2.5762503"
+       id="text5070-2-2-9-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-36-9"
+         x="157.17018"
+         y="2.5762503"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.39687496">(0,0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="81.807327"
+       y="56.091728"
+       id="text2799-3-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-70"
+         x="81.807327"
+         y="56.091728"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="56.091728"
+       id="text2799-3-1-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-3"
+         x="129.43236"
+         y="56.091728"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="81.807327"
+       y="2.5135767"
+       id="text2799-3-1-8-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-2-0"
+         x="81.807327"
+         y="2.5135767"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(0,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="129.43236"
+       y="2.5135882"
+       id="text2799-3-1-7-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-9-7-0-2"
+         x="129.43236"
+         y="2.5135882"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="113.55736"
+       y="105.70109"
+       id="text2799-38"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6"
+         x="113.55736"
+         y="105.70109"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.24486"
+       y="131.49796"
+       id="text2799-38-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4"
+         x="153.24486"
+         y="131.49796"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.397;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.588,1.588;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#Arrow1Mend)"
+       d="M 119.51048,79.904209 V 127.52921"
+       id="path8332"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="75.854202"
+       y="28.310457"
+       id="text2799-38-88"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-9"
+         x="75.854202"
+         y="28.310457"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="56.091705"
+       id="text2799-38-8-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0"
+         x="105.61983"
+         y="56.091705"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="2.5135825"
+       id="text2799-38-8-5-0"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-5"
+         x="105.61983"
+         y="2.5135825"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="135.38548"
+       y="28.310457"
+       id="text2799-38-8-5-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-6"
+         x="135.38548"
+         y="28.310457"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="16.404207"
+       id="text2799-38-8-5-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-9"
+         x="105.61983"
+         y="16.404207"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="95.697983"
+       y="28.310457"
+       id="text2799-38-8-5-7"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-0"
+         x="95.697983"
+         y="28.310457"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="167.13547"
+       y="28.310457"
+       id="text2799-38-88-3"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-9-9"
+         x="167.13547"
+         y="28.310457"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="210.79172"
+       y="28.310457"
+       id="text2799-38-8-5-1-8"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-6-8"
+         x="210.79172"
+         y="28.310457"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="2.5135882"
+       id="text2799-38-8-5-2"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-56"
+         x="188.96361"
+         y="2.5135882"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="22.357338"
+       id="text2799-38-8-5-3-1"><tspan
+         sodipodi:role="line"
+         id="tspan2797-6-4-0-9-0"
+         x="188.96361"
+         y="22.357338"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">IL0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="105.61983"
+       y="62.04483"
+       id="text2799-30"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0"
+         x="105.61983"
+         y="62.04483"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Quads</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="188.96361"
+       y="62.04483"
+       id="text2799-30-4"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0-8"
+         x="188.96361"
+         y="62.04483"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Triangles</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
+       x="153.24486"
+       y="137.45108"
+       id="text2799-30-5"><tspan
+         sodipodi:role="line"
+         id="tspan2797-0-80"
+         x="153.24486"
+         y="137.45108"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">Isolines</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/tile_image.svg b/codegen/vulkan/vulkan-docs-next/images/tile_image.svg
new file mode 100644
index 0000000..9ae9fc0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/tile_image.svg
@@ -0,0 +1,11051 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="102.00694mm"
+   height="54.831276mm"
+   viewBox="0 0 102.00694 54.831276"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.2.2 (b0a8486, 2022-12-01)"
+   sodipodi:docname="tileimage.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     showgrid="false"
+     inkscape:zoom="0.50244108"
+     inkscape:cx="328.39672"
+     inkscape:cy="214.95058"
+     inkscape:window-width="1392"
+     inkscape:window-height="784"
+     inkscape:window-x="48"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid36868"
+       originx="-17.696075"
+       originy="-91.47683" />
+  </sodipodi:namedview>
+  <defs
+     id="defs2" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline"
+     transform="translate(-17.696075,-91.476828)">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.0400809;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="use10638-0"
+       width="1.4559753"
+       height="1.414376"
+       x="17.716116"
+       y="91.513268" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       id="use24258"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,1.4544169)"
+       id="use24260"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,2.9088338)"
+       id="use24262"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,4.3632507)"
+       id="use24264"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,5.8176676)"
+       id="use24266"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,7.2720845)"
+       id="use24268"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,8.7265014)"
+       id="use24270"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,10.180918)"
+       id="use24272"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,11.635335)"
+       id="use24274"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,13.089752)"
+       id="use24276"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,14.544169)"
+       id="use24278"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,15.998586)"
+       id="use24280"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,17.453003)"
+       id="use24282"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,18.90742)"
+       id="use24284"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,20.361837)"
+       id="use24286"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,21.816254)"
+       id="use24288"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,23.27067)"
+       id="use24290"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,24.725087)"
+       id="use24292"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,26.179504)"
+       id="use24294"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,27.633921)"
+       id="use24296"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,29.088338)"
+       id="use24298"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,30.542755)"
+       id="use24300"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,31.997172)"
+       id="use24302"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,33.451589)"
+       id="use24304"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,34.906006)"
+       id="use24306"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,36.360422)"
+       id="use24308"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,37.814839)"
+       id="use24310"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,39.269256)"
+       id="use24312"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,40.723673)"
+       id="use24314"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,42.17809)"
+       id="use24316"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,43.632507)"
+       id="use24318"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(0,45.086924)"
+       id="use24320"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162)"
+       id="use24322"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,1.4544169)"
+       id="use24324"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,2.9088338)"
+       id="use24326"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,4.3632507)"
+       id="use24328"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,5.8176676)"
+       id="use24330"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,7.2720845)"
+       id="use24332"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,8.7265014)"
+       id="use24334"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,10.180918)"
+       id="use24336"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,11.635335)"
+       id="use24338"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,13.089752)"
+       id="use24340"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,14.544169)"
+       id="use24342"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,15.998586)"
+       id="use24344"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,17.453003)"
+       id="use24346"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,18.90742)"
+       id="use24348"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,20.361837)"
+       id="use24350"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,21.816254)"
+       id="use24352"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,23.27067)"
+       id="use24354"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,24.725087)"
+       id="use24356"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,26.179504)"
+       id="use24358"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,27.633921)"
+       id="use24360"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,29.088338)"
+       id="use24362"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,30.542755)"
+       id="use24364"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,31.997172)"
+       id="use24366"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,33.451589)"
+       id="use24368"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,34.906006)"
+       id="use24370"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,36.360422)"
+       id="use24372"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,37.814839)"
+       id="use24374"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,39.269256)"
+       id="use24376"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,40.723673)"
+       id="use24378"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,42.17809)"
+       id="use24380"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,43.632507)"
+       id="use24382"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(1.4960162,45.086924)"
+       id="use24384"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324)"
+       id="use24386"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,1.4544169)"
+       id="use24388"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,2.9088338)"
+       id="use24390"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,4.3632507)"
+       id="use24392"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,5.8176676)"
+       id="use24394"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,7.2720845)"
+       id="use24396"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,8.7265014)"
+       id="use24398"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,10.180918)"
+       id="use24400"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,11.635335)"
+       id="use24402"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,13.089752)"
+       id="use24404"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,14.544169)"
+       id="use24406"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,15.998586)"
+       id="use24408"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,17.453003)"
+       id="use24410"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,18.90742)"
+       id="use24412"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,20.361837)"
+       id="use24414"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,21.816254)"
+       id="use24416"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,23.27067)"
+       id="use24418"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,24.725087)"
+       id="use24420"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,26.179504)"
+       id="use24422"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,27.633921)"
+       id="use24424"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,29.088338)"
+       id="use24426"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,30.542755)"
+       id="use24428"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,31.997172)"
+       id="use24430"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,33.451589)"
+       id="use24432"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,34.906006)"
+       id="use24434"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,36.360422)"
+       id="use24436"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,37.814839)"
+       id="use24438"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,39.269256)"
+       id="use24440"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,40.723673)"
+       id="use24442"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,42.17809)"
+       id="use24444"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,43.632507)"
+       id="use24446"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(2.9920324,45.086924)"
+       id="use24448"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486)"
+       id="use24450"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,1.4544169)"
+       id="use24452"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,2.9088338)"
+       id="use24454"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,4.3632507)"
+       id="use24456"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,5.8176676)"
+       id="use24458"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,7.2720845)"
+       id="use24460"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,8.7265014)"
+       id="use24462"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,10.180918)"
+       id="use24464"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,11.635335)"
+       id="use24466"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,13.089752)"
+       id="use24468"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,14.544169)"
+       id="use24470"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,15.998586)"
+       id="use24472"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,17.453003)"
+       id="use24474"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,18.90742)"
+       id="use24476"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,20.361837)"
+       id="use24478"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,21.816254)"
+       id="use24480"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,23.27067)"
+       id="use24482"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,24.725087)"
+       id="use24484"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,26.179504)"
+       id="use24486"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,27.633921)"
+       id="use24488"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,29.088338)"
+       id="use24490"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,30.542755)"
+       id="use24492"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,31.997172)"
+       id="use24494"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,33.451589)"
+       id="use24496"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,34.906006)"
+       id="use24498"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,36.360422)"
+       id="use24500"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,37.814839)"
+       id="use24502"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,39.269256)"
+       id="use24504"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,40.723673)"
+       id="use24506"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,42.17809)"
+       id="use24508"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,43.632507)"
+       id="use24510"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(4.4880486,45.086924)"
+       id="use24512"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648)"
+       id="use24514"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,1.4544169)"
+       id="use24516"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,2.9088338)"
+       id="use24518"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,4.3632507)"
+       id="use24520"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,5.8176676)"
+       id="use24522"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,7.2720845)"
+       id="use24524"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,8.7265014)"
+       id="use24526"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,10.180918)"
+       id="use24528"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,11.635335)"
+       id="use24530"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,13.089752)"
+       id="use24532"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,14.544169)"
+       id="use24534"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,15.998586)"
+       id="use24536"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,17.453003)"
+       id="use24538"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,18.90742)"
+       id="use24540"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,20.361837)"
+       id="use24542"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,21.816254)"
+       id="use24544"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,23.27067)"
+       id="use24546"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,24.725087)"
+       id="use24548"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,26.179504)"
+       id="use24550"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,27.633921)"
+       id="use24552"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,29.088338)"
+       id="use24554"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,30.542755)"
+       id="use24556"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,31.997172)"
+       id="use24558"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,33.451589)"
+       id="use24560"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,34.906006)"
+       id="use24562"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,36.360422)"
+       id="use24564"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,37.814839)"
+       id="use24566"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,39.269256)"
+       id="use24568"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,40.723673)"
+       id="use24570"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,42.17809)"
+       id="use24572"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,43.632507)"
+       id="use24574"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(5.9840648,45.086924)"
+       id="use24576"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081)"
+       id="use24578"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,1.4544169)"
+       id="use24580"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,2.9088338)"
+       id="use24582"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,4.3632507)"
+       id="use24584"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,5.8176676)"
+       id="use24586"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,7.2720845)"
+       id="use24588"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,8.7265014)"
+       id="use24590"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,10.180918)"
+       id="use24592"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,11.635335)"
+       id="use24594"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,13.089752)"
+       id="use24596"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,14.544169)"
+       id="use24598"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,15.998586)"
+       id="use24600"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,17.453003)"
+       id="use24602"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,18.90742)"
+       id="use24604"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,20.361837)"
+       id="use24606"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,21.816254)"
+       id="use24608"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,23.27067)"
+       id="use24610"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,24.725087)"
+       id="use24612"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,26.179504)"
+       id="use24614"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,27.633921)"
+       id="use24616"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,29.088338)"
+       id="use24618"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,30.542755)"
+       id="use24620"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,31.997172)"
+       id="use24622"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,33.451589)"
+       id="use24624"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,34.906006)"
+       id="use24626"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,36.360422)"
+       id="use24628"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,37.814839)"
+       id="use24630"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,39.269256)"
+       id="use24632"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,40.723673)"
+       id="use24634"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,42.17809)"
+       id="use24636"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,43.632507)"
+       id="use24638"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(7.480081,45.086924)"
+       id="use24640"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972)"
+       id="use24642"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,1.4544169)"
+       id="use24644"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,2.9088338)"
+       id="use24646"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,4.3632507)"
+       id="use24648"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,5.8176676)"
+       id="use24650"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,7.2720845)"
+       id="use24652"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,8.7265014)"
+       id="use24654"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,10.180918)"
+       id="use24656"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,11.635335)"
+       id="use24658"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,13.089752)"
+       id="use24660"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,14.544169)"
+       id="use24662"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,15.998586)"
+       id="use24664"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,17.453003)"
+       id="use24666"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,18.90742)"
+       id="use24668"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,20.361837)"
+       id="use24670"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,21.816254)"
+       id="use24672"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,23.27067)"
+       id="use24674"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,24.725087)"
+       id="use24676"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,26.179504)"
+       id="use24678"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,27.633921)"
+       id="use24680"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,29.088338)"
+       id="use24682"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,30.542755)"
+       id="use24684"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,31.997172)"
+       id="use24686"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,33.451589)"
+       id="use24688"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,34.906006)"
+       id="use24690"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,36.360422)"
+       id="use24692"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,37.814839)"
+       id="use24694"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,39.269256)"
+       id="use24696"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,40.723673)"
+       id="use24698"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,42.17809)"
+       id="use24700"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,43.632507)"
+       id="use24702"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(8.9760972,45.086924)"
+       id="use24704"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113)"
+       id="use24706"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,1.4544169)"
+       id="use24708"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,2.9088338)"
+       id="use24710"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,4.3632507)"
+       id="use24712"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,5.8176676)"
+       id="use24714"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,7.2720845)"
+       id="use24716"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,8.7265014)"
+       id="use24718"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,10.180918)"
+       id="use24720"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,11.635335)"
+       id="use24722"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,13.089752)"
+       id="use24724"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,14.544169)"
+       id="use24726"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,15.998586)"
+       id="use24728"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,17.453003)"
+       id="use24730"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,18.90742)"
+       id="use24732"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,20.361837)"
+       id="use24734"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,21.816254)"
+       id="use24736"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,23.27067)"
+       id="use24738"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,24.725087)"
+       id="use24740"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,26.179504)"
+       id="use24742"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,27.633921)"
+       id="use24744"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,29.088338)"
+       id="use24746"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,30.542755)"
+       id="use24748"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,31.997172)"
+       id="use24750"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,33.451589)"
+       id="use24752"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,34.906006)"
+       id="use24754"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,36.360422)"
+       id="use24756"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,37.814839)"
+       id="use24758"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,39.269256)"
+       id="use24760"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,40.723673)"
+       id="use24762"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,42.17809)"
+       id="use24764"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,43.632507)"
+       id="use24766"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(10.472113,45.086924)"
+       id="use24768"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813)"
+       id="use24770"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,1.4544169)"
+       id="use24772"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,2.9088338)"
+       id="use24774"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,4.3632507)"
+       id="use24776"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,5.8176676)"
+       id="use24778"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,7.2720845)"
+       id="use24780"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,8.7265014)"
+       id="use24782"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,10.180918)"
+       id="use24784"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,11.635335)"
+       id="use24786"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,13.089752)"
+       id="use24788"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,14.544169)"
+       id="use24790"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,15.998586)"
+       id="use24792"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,17.453003)"
+       id="use24794"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,18.90742)"
+       id="use24796"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,20.361837)"
+       id="use24798"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,21.816254)"
+       id="use24800"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,23.27067)"
+       id="use24802"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,24.725087)"
+       id="use24804"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,26.179504)"
+       id="use24806"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,27.633921)"
+       id="use24808"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,29.088338)"
+       id="use24810"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,30.542755)"
+       id="use24812"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,31.997172)"
+       id="use24814"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,33.451589)"
+       id="use24816"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,34.906006)"
+       id="use24818"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,36.360422)"
+       id="use24820"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,37.814839)"
+       id="use24822"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,39.269256)"
+       id="use24824"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,40.723673)"
+       id="use24826"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,42.17809)"
+       id="use24828"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,43.632507)"
+       id="use24830"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(11.96813,45.086924)"
+       id="use24832"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146)"
+       id="use24834"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,1.4544169)"
+       id="use24836"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,2.9088338)"
+       id="use24838"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,4.3632507)"
+       id="use24840"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,5.8176676)"
+       id="use24842"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,7.2720845)"
+       id="use24844"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,8.7265014)"
+       id="use24846"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,10.180918)"
+       id="use24848"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,11.635335)"
+       id="use24850"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,13.089752)"
+       id="use24852"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,14.544169)"
+       id="use24854"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,15.998586)"
+       id="use24856"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,17.453003)"
+       id="use24858"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,18.90742)"
+       id="use24860"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,20.361837)"
+       id="use24862"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,21.816254)"
+       id="use24864"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,23.27067)"
+       id="use24866"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,24.725087)"
+       id="use24868"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,26.179504)"
+       id="use24870"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,27.633921)"
+       id="use24872"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,29.088338)"
+       id="use24874"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,30.542755)"
+       id="use24876"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,31.997172)"
+       id="use24878"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,33.451589)"
+       id="use24880"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,34.906006)"
+       id="use24882"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,36.360422)"
+       id="use24884"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,37.814839)"
+       id="use24886"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,39.269256)"
+       id="use24888"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,40.723673)"
+       id="use24890"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,42.17809)"
+       id="use24892"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,43.632507)"
+       id="use24894"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(13.464146,45.086924)"
+       id="use24896"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162)"
+       id="use24898"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,1.4544169)"
+       id="use24900"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,2.9088338)"
+       id="use24902"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,4.3632507)"
+       id="use24904"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,5.8176676)"
+       id="use24906"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,7.2720845)"
+       id="use24908"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,8.7265014)"
+       id="use24910"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,10.180918)"
+       id="use24912"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,11.635335)"
+       id="use24914"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,13.089752)"
+       id="use24916"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,14.544169)"
+       id="use24918"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,15.998586)"
+       id="use24920"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,17.453003)"
+       id="use24922"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,18.90742)"
+       id="use24924"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,20.361837)"
+       id="use24926"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,21.816254)"
+       id="use24928"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,23.27067)"
+       id="use24930"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,24.725087)"
+       id="use24932"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,26.179504)"
+       id="use24934"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,27.633921)"
+       id="use24936"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,29.088338)"
+       id="use24938"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,30.542755)"
+       id="use24940"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,31.997172)"
+       id="use24942"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,33.451589)"
+       id="use24944"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,34.906006)"
+       id="use24946"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,36.360422)"
+       id="use24948"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,37.814839)"
+       id="use24950"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,39.269256)"
+       id="use24952"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,40.723673)"
+       id="use24954"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,42.17809)"
+       id="use24956"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,43.632507)"
+       id="use24958"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(14.960162,45.086924)"
+       id="use24960"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178)"
+       id="use24962"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,1.4544169)"
+       id="use24964"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,2.9088338)"
+       id="use24966"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,4.3632507)"
+       id="use24968"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,5.8176676)"
+       id="use24970"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,7.2720845)"
+       id="use24972"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,8.7265014)"
+       id="use24974"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,10.180918)"
+       id="use24976"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,11.635335)"
+       id="use24978"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,13.089752)"
+       id="use24980"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,14.544169)"
+       id="use24982"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,15.998586)"
+       id="use24984"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,17.453003)"
+       id="use24986"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,18.90742)"
+       id="use24988"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,20.361837)"
+       id="use24990"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,21.816254)"
+       id="use24992"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,23.27067)"
+       id="use24994"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,24.725087)"
+       id="use24996"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,26.179504)"
+       id="use24998"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,27.633921)"
+       id="use25000"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,29.088338)"
+       id="use25002"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,30.542755)"
+       id="use25004"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,31.997172)"
+       id="use25006"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,33.451589)"
+       id="use25008"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,34.906006)"
+       id="use25010"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,36.360422)"
+       id="use25012"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,37.814839)"
+       id="use25014"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,39.269256)"
+       id="use25016"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,40.723673)"
+       id="use25018"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,42.17809)"
+       id="use25020"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,43.632507)"
+       id="use25022"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(16.456178,45.086924)"
+       id="use25024"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194)"
+       id="use25026"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,1.4544169)"
+       id="use25028"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,2.9088338)"
+       id="use25030"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,4.3632507)"
+       id="use25032"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,5.8176676)"
+       id="use25034"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,7.2720845)"
+       id="use25036"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,8.7265014)"
+       id="use25038"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,10.180918)"
+       id="use25040"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,11.635335)"
+       id="use25042"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,13.089752)"
+       id="use25044"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,14.544169)"
+       id="use25046"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,15.998586)"
+       id="use25048"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,17.453003)"
+       id="use25050"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,18.90742)"
+       id="use25052"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,20.361837)"
+       id="use25054"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,21.816254)"
+       id="use25056"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,23.27067)"
+       id="use25058"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,24.725087)"
+       id="use25060"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,26.179504)"
+       id="use25062"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,27.633921)"
+       id="use25064"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,29.088338)"
+       id="use25066"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,30.542755)"
+       id="use25068"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,31.997172)"
+       id="use25070"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,33.451589)"
+       id="use25072"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,34.906006)"
+       id="use25074"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,36.360422)"
+       id="use25076"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,37.814839)"
+       id="use25078"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,39.269256)"
+       id="use25080"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,40.723673)"
+       id="use25082"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,42.17809)"
+       id="use25084"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,43.632507)"
+       id="use25086"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(17.952194,45.086924)"
+       id="use25088"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211)"
+       id="use25090"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,1.4544169)"
+       id="use25092"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,2.9088338)"
+       id="use25094"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,4.3632507)"
+       id="use25096"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,5.8176676)"
+       id="use25098"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,7.2720845)"
+       id="use25100"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,8.7265014)"
+       id="use25102"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,10.180918)"
+       id="use25104"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,11.635335)"
+       id="use25106"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,13.089752)"
+       id="use25108"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,14.544169)"
+       id="use25110"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,15.998586)"
+       id="use25112"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,17.453003)"
+       id="use25114"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,18.90742)"
+       id="use25116"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,20.361837)"
+       id="use25118"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,21.816254)"
+       id="use25120"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,23.27067)"
+       id="use25122"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,24.725087)"
+       id="use25124"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,26.179504)"
+       id="use25126"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,27.633921)"
+       id="use25128"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,29.088338)"
+       id="use25130"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,30.542755)"
+       id="use25132"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,31.997172)"
+       id="use25134"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,33.451589)"
+       id="use25136"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,34.906006)"
+       id="use25138"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,36.360422)"
+       id="use25140"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,37.814839)"
+       id="use25142"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,39.269256)"
+       id="use25144"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,40.723673)"
+       id="use25146"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,42.17809)"
+       id="use25148"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,43.632507)"
+       id="use25150"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(19.448211,45.086924)"
+       id="use25152"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227)"
+       id="use25154"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,1.4544169)"
+       id="use25156"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,2.9088338)"
+       id="use25158"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,4.3632507)"
+       id="use25160"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,5.8176676)"
+       id="use25162"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,7.2720845)"
+       id="use25164"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,8.7265014)"
+       id="use25166"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,10.180918)"
+       id="use25168"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,11.635335)"
+       id="use25170"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,13.089752)"
+       id="use25172"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,14.544169)"
+       id="use25174"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,15.998586)"
+       id="use25176"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,17.453003)"
+       id="use25178"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,18.90742)"
+       id="use25180"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,20.361837)"
+       id="use25182"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,21.816254)"
+       id="use25184"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,23.27067)"
+       id="use25186"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,24.725087)"
+       id="use25188"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,26.179504)"
+       id="use25190"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,27.633921)"
+       id="use25192"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,29.088338)"
+       id="use25194"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,30.542755)"
+       id="use25196"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,31.997172)"
+       id="use25198"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,33.451589)"
+       id="use25200"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,34.906006)"
+       id="use25202"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,36.360422)"
+       id="use25204"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,37.814839)"
+       id="use25206"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,39.269256)"
+       id="use25208"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,40.723673)"
+       id="use25210"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,42.17809)"
+       id="use25212"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,43.632507)"
+       id="use25214"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(20.944227,45.086924)"
+       id="use25216"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243)"
+       id="use25218"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,1.4544169)"
+       id="use25220"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,2.9088338)"
+       id="use25222"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,4.3632507)"
+       id="use25224"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,5.8176676)"
+       id="use25226"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,7.2720845)"
+       id="use25228"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,8.7265014)"
+       id="use25230"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,10.180918)"
+       id="use25232"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,11.635335)"
+       id="use25234"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,13.089752)"
+       id="use25236"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,14.544169)"
+       id="use25238"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,15.998586)"
+       id="use25240"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,17.453003)"
+       id="use25242"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,18.90742)"
+       id="use25244"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,20.361837)"
+       id="use25246"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,21.816254)"
+       id="use25248"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,23.27067)"
+       id="use25250"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,24.725087)"
+       id="use25252"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,26.179504)"
+       id="use25254"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,27.633921)"
+       id="use25256"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,29.088338)"
+       id="use25258"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,30.542755)"
+       id="use25260"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,31.997172)"
+       id="use25262"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,33.451589)"
+       id="use25264"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,34.906006)"
+       id="use25266"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,36.360422)"
+       id="use25268"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,37.814839)"
+       id="use25270"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,39.269256)"
+       id="use25272"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,40.723673)"
+       id="use25274"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,42.17809)"
+       id="use25276"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,43.632507)"
+       id="use25278"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(22.440243,45.086924)"
+       id="use25280"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259)"
+       id="use25282"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,1.4544169)"
+       id="use25284"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,2.9088338)"
+       id="use25286"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,4.3632507)"
+       id="use25288"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,5.8176676)"
+       id="use25290"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,7.2720845)"
+       id="use25292"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,8.7265014)"
+       id="use25294"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,10.180918)"
+       id="use25296"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,11.635335)"
+       id="use25298"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,13.089752)"
+       id="use25300"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,14.544169)"
+       id="use25302"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,15.998586)"
+       id="use25304"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,17.453003)"
+       id="use25306"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,18.90742)"
+       id="use25308"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,20.361837)"
+       id="use25310"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,21.816254)"
+       id="use25312"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,23.27067)"
+       id="use25314"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,24.725087)"
+       id="use25316"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,26.179504)"
+       id="use25318"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,27.633921)"
+       id="use25320"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,29.088338)"
+       id="use25322"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,30.542755)"
+       id="use25324"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,31.997172)"
+       id="use25326"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,33.451589)"
+       id="use25328"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,34.906006)"
+       id="use25330"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,36.360422)"
+       id="use25332"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,37.814839)"
+       id="use25334"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,39.269256)"
+       id="use25336"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,40.723673)"
+       id="use25338"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,42.17809)"
+       id="use25340"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,43.632507)"
+       id="use25342"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(23.936259,45.086924)"
+       id="use25344"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275)"
+       id="use25346"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,1.4544169)"
+       id="use25348"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,2.9088338)"
+       id="use25350"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,4.3632507)"
+       id="use25352"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,5.8176676)"
+       id="use25354"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,7.2720845)"
+       id="use25356"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,8.7265014)"
+       id="use25358"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,10.180918)"
+       id="use25360"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,11.635335)"
+       id="use25362"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,13.089752)"
+       id="use25364"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,14.544169)"
+       id="use25366"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,15.998586)"
+       id="use25368"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,17.453003)"
+       id="use25370"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,18.90742)"
+       id="use25372"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,20.361837)"
+       id="use25374"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,21.816254)"
+       id="use25376"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,23.27067)"
+       id="use25378"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,24.725087)"
+       id="use25380"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,26.179504)"
+       id="use25382"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,27.633921)"
+       id="use25384"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,29.088338)"
+       id="use25386"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,30.542755)"
+       id="use25388"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,31.997172)"
+       id="use25390"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,33.451589)"
+       id="use25392"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,34.906006)"
+       id="use25394"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,36.360422)"
+       id="use25396"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,37.814839)"
+       id="use25398"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,39.269256)"
+       id="use25400"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,40.723673)"
+       id="use25402"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,42.17809)"
+       id="use25404"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,43.632507)"
+       id="use25406"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(25.432275,45.086924)"
+       id="use25408"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292)"
+       id="use25410"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,1.4544169)"
+       id="use25412"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,2.9088338)"
+       id="use25414"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,4.3632507)"
+       id="use25416"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,5.8176676)"
+       id="use25418"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,7.2720845)"
+       id="use25420"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,8.7265014)"
+       id="use25422"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,10.180918)"
+       id="use25424"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,11.635335)"
+       id="use25426"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,13.089752)"
+       id="use25428"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,14.544169)"
+       id="use25430"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,15.998586)"
+       id="use25432"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,17.453003)"
+       id="use25434"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,18.90742)"
+       id="use25436"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,20.361837)"
+       id="use25438"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,21.816254)"
+       id="use25440"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,23.27067)"
+       id="use25442"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,24.725087)"
+       id="use25444"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,26.179504)"
+       id="use25446"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,27.633921)"
+       id="use25448"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,29.088338)"
+       id="use25450"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,30.542755)"
+       id="use25452"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,31.997172)"
+       id="use25454"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,33.451589)"
+       id="use25456"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,34.906006)"
+       id="use25458"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,36.360422)"
+       id="use25460"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,37.814839)"
+       id="use25462"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,39.269256)"
+       id="use25464"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,40.723673)"
+       id="use25466"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,42.17809)"
+       id="use25468"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,43.632507)"
+       id="use25470"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(26.928292,45.086924)"
+       id="use25472"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308)"
+       id="use25474"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,1.4544169)"
+       id="use25476"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,2.9088338)"
+       id="use25478"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,4.3632507)"
+       id="use25480"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,5.8176676)"
+       id="use25482"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,7.2720845)"
+       id="use25484"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,8.7265014)"
+       id="use25486"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,10.180918)"
+       id="use25488"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,11.635335)"
+       id="use25490"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,13.089752)"
+       id="use25492"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,14.544169)"
+       id="use25494"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,15.998586)"
+       id="use25496"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,17.453003)"
+       id="use25498"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,18.90742)"
+       id="use25500"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,20.361837)"
+       id="use25502"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,21.816254)"
+       id="use25504"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,23.27067)"
+       id="use25506"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,24.725087)"
+       id="use25508"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,26.179504)"
+       id="use25510"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,27.633921)"
+       id="use25512"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,29.088338)"
+       id="use25514"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,30.542755)"
+       id="use25516"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,31.997172)"
+       id="use25518"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,33.451589)"
+       id="use25520"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,34.906006)"
+       id="use25522"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,36.360422)"
+       id="use25524"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,37.814839)"
+       id="use25526"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,39.269256)"
+       id="use25528"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,40.723673)"
+       id="use25530"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,42.17809)"
+       id="use25532"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,43.632507)"
+       id="use25534"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(28.424308,45.086924)"
+       id="use25536"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324)"
+       id="use25538"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,1.4544169)"
+       id="use25540"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,2.9088338)"
+       id="use25542"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,4.3632507)"
+       id="use25544"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,5.8176676)"
+       id="use25546"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,7.2720845)"
+       id="use25548"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,8.7265014)"
+       id="use25550"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,10.180918)"
+       id="use25552"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,11.635335)"
+       id="use25554"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,13.089752)"
+       id="use25556"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,14.544169)"
+       id="use25558"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,15.998586)"
+       id="use25560"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,17.453003)"
+       id="use25562"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,18.90742)"
+       id="use25564"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,20.361837)"
+       id="use25566"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,21.816254)"
+       id="use25568"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,23.27067)"
+       id="use25570"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,24.725087)"
+       id="use25572"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,26.179504)"
+       id="use25574"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,27.633921)"
+       id="use25576"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,29.088338)"
+       id="use25578"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,30.542755)"
+       id="use25580"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,31.997172)"
+       id="use25582"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,33.451589)"
+       id="use25584"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,34.906006)"
+       id="use25586"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,36.360422)"
+       id="use25588"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,37.814839)"
+       id="use25590"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,39.269256)"
+       id="use25592"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,40.723673)"
+       id="use25594"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,42.17809)"
+       id="use25596"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,43.632507)"
+       id="use25598"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(29.920324,45.086924)"
+       id="use25600"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634)"
+       id="use25602"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,1.4544169)"
+       id="use25604"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,2.9088338)"
+       id="use25606"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,4.3632507)"
+       id="use25608"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,5.8176676)"
+       id="use25610"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,7.2720845)"
+       id="use25612"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,8.7265014)"
+       id="use25614"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,10.180918)"
+       id="use25616"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,11.635335)"
+       id="use25618"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,13.089752)"
+       id="use25620"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,14.544169)"
+       id="use25622"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,15.998586)"
+       id="use25624"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,17.453003)"
+       id="use25626"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,18.90742)"
+       id="use25628"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,20.361837)"
+       id="use25630"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,21.816254)"
+       id="use25632"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,23.27067)"
+       id="use25634"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,24.725087)"
+       id="use25636"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,26.179504)"
+       id="use25638"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,27.633921)"
+       id="use25640"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,29.088338)"
+       id="use25642"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,30.542755)"
+       id="use25644"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,31.997172)"
+       id="use25646"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,33.451589)"
+       id="use25648"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,34.906006)"
+       id="use25650"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,36.360422)"
+       id="use25652"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,37.814839)"
+       id="use25654"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,39.269256)"
+       id="use25656"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,40.723673)"
+       id="use25658"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,42.17809)"
+       id="use25660"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,43.632507)"
+       id="use25662"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(31.41634,45.086924)"
+       id="use25664"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356)"
+       id="use25666"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,1.4544169)"
+       id="use25668"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,2.9088338)"
+       id="use25670"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,4.3632507)"
+       id="use25672"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,5.8176676)"
+       id="use25674"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,7.2720845)"
+       id="use25676"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,8.7265014)"
+       id="use25678"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,10.180918)"
+       id="use25680"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,11.635335)"
+       id="use25682"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,13.089752)"
+       id="use25684"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,14.544169)"
+       id="use25686"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,15.998586)"
+       id="use25688"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,17.453003)"
+       id="use25690"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,18.90742)"
+       id="use25692"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,20.361837)"
+       id="use25694"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,21.816254)"
+       id="use25696"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,23.27067)"
+       id="use25698"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,24.725087)"
+       id="use25700"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,26.179504)"
+       id="use25702"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,27.633921)"
+       id="use25704"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,29.088338)"
+       id="use25706"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,30.542755)"
+       id="use25708"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,31.997172)"
+       id="use25710"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,33.451589)"
+       id="use25712"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,34.906006)"
+       id="use25714"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,36.360422)"
+       id="use25716"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,37.814839)"
+       id="use25718"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,39.269256)"
+       id="use25720"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,40.723673)"
+       id="use25722"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,42.17809)"
+       id="use25724"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,43.632507)"
+       id="use25726"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(32.912356,45.086924)"
+       id="use25728"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373)"
+       id="use25730"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,1.4544169)"
+       id="use25732"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,2.9088338)"
+       id="use25734"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,4.3632507)"
+       id="use25736"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,5.8176676)"
+       id="use25738"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,7.2720845)"
+       id="use25740"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,8.7265014)"
+       id="use25742"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,10.180918)"
+       id="use25744"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,11.635335)"
+       id="use25746"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,13.089752)"
+       id="use25748"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,14.544169)"
+       id="use25750"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,15.998586)"
+       id="use25752"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,17.453003)"
+       id="use25754"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,18.90742)"
+       id="use25756"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,20.361837)"
+       id="use25758"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,21.816254)"
+       id="use25760"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,23.27067)"
+       id="use25762"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,24.725087)"
+       id="use25764"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,26.179504)"
+       id="use25766"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,27.633921)"
+       id="use25768"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,29.088338)"
+       id="use25770"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,30.542755)"
+       id="use25772"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,31.997172)"
+       id="use25774"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,33.451589)"
+       id="use25776"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,34.906006)"
+       id="use25778"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,36.360422)"
+       id="use25780"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,37.814839)"
+       id="use25782"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,39.269256)"
+       id="use25784"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,40.723673)"
+       id="use25786"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,42.17809)"
+       id="use25788"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,43.632507)"
+       id="use25790"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(34.408373,45.086924)"
+       id="use25792"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389)"
+       id="use25794"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,1.4544169)"
+       id="use25796"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,2.9088338)"
+       id="use25798"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,4.3632507)"
+       id="use25800"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,5.8176676)"
+       id="use25802"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,7.2720845)"
+       id="use25804"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,8.7265014)"
+       id="use25806"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,10.180918)"
+       id="use25808"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,11.635335)"
+       id="use25810"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,13.089752)"
+       id="use25812"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,14.544169)"
+       id="use25814"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,15.998586)"
+       id="use25816"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,17.453003)"
+       id="use25818"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,18.90742)"
+       id="use25820"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,20.361837)"
+       id="use25822"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,21.816254)"
+       id="use25824"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,23.27067)"
+       id="use25826"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,24.725087)"
+       id="use25828"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,26.179504)"
+       id="use25830"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,27.633921)"
+       id="use25832"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,29.088338)"
+       id="use25834"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,30.542755)"
+       id="use25836"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,31.997172)"
+       id="use25838"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,33.451589)"
+       id="use25840"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,34.906006)"
+       id="use25842"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,36.360422)"
+       id="use25844"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,37.814839)"
+       id="use25846"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,39.269256)"
+       id="use25848"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,40.723673)"
+       id="use25850"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,42.17809)"
+       id="use25852"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,43.632507)"
+       id="use25854"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(35.904389,45.086924)"
+       id="use25856"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405)"
+       id="use25858"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,1.4544169)"
+       id="use25860"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,2.9088338)"
+       id="use25862"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,4.3632507)"
+       id="use25864"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,5.8176676)"
+       id="use25866"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,7.2720845)"
+       id="use25868"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,8.7265014)"
+       id="use25870"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,10.180918)"
+       id="use25872"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,11.635335)"
+       id="use25874"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,13.089752)"
+       id="use25876"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,14.544169)"
+       id="use25878"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,15.998586)"
+       id="use25880"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,17.453003)"
+       id="use25882"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,18.90742)"
+       id="use25884"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,20.361837)"
+       id="use25886"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,21.816254)"
+       id="use25888"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,23.27067)"
+       id="use25890"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,24.725087)"
+       id="use25892"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,26.179504)"
+       id="use25894"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,27.633921)"
+       id="use25896"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,29.088338)"
+       id="use25898"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,30.542755)"
+       id="use25900"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,31.997172)"
+       id="use25902"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,33.451589)"
+       id="use25904"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,34.906006)"
+       id="use25906"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,36.360422)"
+       id="use25908"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,37.814839)"
+       id="use25910"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,39.269256)"
+       id="use25912"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,40.723673)"
+       id="use25914"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,42.17809)"
+       id="use25916"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,43.632507)"
+       id="use25918"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(37.400405,45.086924)"
+       id="use25920"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421)"
+       id="use25922"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,1.4544169)"
+       id="use25924"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,2.9088338)"
+       id="use25926"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,4.3632507)"
+       id="use25928"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,5.8176676)"
+       id="use25930"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,7.2720845)"
+       id="use25932"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,8.7265014)"
+       id="use25934"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,10.180918)"
+       id="use25936"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,11.635335)"
+       id="use25938"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,13.089752)"
+       id="use25940"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,14.544169)"
+       id="use25942"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,15.998586)"
+       id="use25944"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,17.453003)"
+       id="use25946"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,18.90742)"
+       id="use25948"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,20.361837)"
+       id="use25950"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,21.816254)"
+       id="use25952"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,23.27067)"
+       id="use25954"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,24.725087)"
+       id="use25956"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,26.179504)"
+       id="use25958"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,27.633921)"
+       id="use25960"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,29.088338)"
+       id="use25962"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,30.542755)"
+       id="use25964"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,31.997172)"
+       id="use25966"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,33.451589)"
+       id="use25968"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,34.906006)"
+       id="use25970"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,36.360422)"
+       id="use25972"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,37.814839)"
+       id="use25974"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,39.269256)"
+       id="use25976"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,40.723673)"
+       id="use25978"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,42.17809)"
+       id="use25980"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,43.632507)"
+       id="use25982"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(38.896421,45.086924)"
+       id="use25984"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437)"
+       id="use25986"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,1.4544169)"
+       id="use25988"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,2.9088338)"
+       id="use25990"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,4.3632507)"
+       id="use25992"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,5.8176676)"
+       id="use25994"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,7.2720845)"
+       id="use25996"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,8.7265014)"
+       id="use25998"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,10.180918)"
+       id="use26000"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,11.635335)"
+       id="use26002"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,13.089752)"
+       id="use26004"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,14.544169)"
+       id="use26006"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,15.998586)"
+       id="use26008"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,17.453003)"
+       id="use26010"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,18.90742)"
+       id="use26012"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,20.361837)"
+       id="use26014"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,21.816254)"
+       id="use26016"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,23.27067)"
+       id="use26018"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,24.725087)"
+       id="use26020"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,26.179504)"
+       id="use26022"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,27.633921)"
+       id="use26024"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,29.088338)"
+       id="use26026"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,30.542755)"
+       id="use26028"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,31.997172)"
+       id="use26030"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,33.451589)"
+       id="use26032"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,34.906006)"
+       id="use26034"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,36.360422)"
+       id="use26036"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,37.814839)"
+       id="use26038"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,39.269256)"
+       id="use26040"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,40.723673)"
+       id="use26042"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,42.17809)"
+       id="use26044"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,43.632507)"
+       id="use26046"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(40.392437,45.086924)"
+       id="use26048"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454)"
+       id="use26050"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,1.4544169)"
+       id="use26052"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,2.9088338)"
+       id="use26054"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,4.3632507)"
+       id="use26056"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,5.8176676)"
+       id="use26058"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,7.2720845)"
+       id="use26060"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,8.7265014)"
+       id="use26062"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,10.180918)"
+       id="use26064"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,11.635335)"
+       id="use26066"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,13.089752)"
+       id="use26068"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,14.544169)"
+       id="use26070"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,15.998586)"
+       id="use26072"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,17.453003)"
+       id="use26074"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,18.90742)"
+       id="use26076"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,20.361837)"
+       id="use26078"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,21.816254)"
+       id="use26080"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,23.27067)"
+       id="use26082"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,24.725087)"
+       id="use26084"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,26.179504)"
+       id="use26086"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,27.633921)"
+       id="use26088"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,29.088338)"
+       id="use26090"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,30.542755)"
+       id="use26092"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,31.997172)"
+       id="use26094"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,33.451589)"
+       id="use26096"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,34.906006)"
+       id="use26098"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,36.360422)"
+       id="use26100"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,37.814839)"
+       id="use26102"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,39.269256)"
+       id="use26104"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,40.723673)"
+       id="use26106"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,42.17809)"
+       id="use26108"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,43.632507)"
+       id="use26110"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(41.888454,45.086924)"
+       id="use26112"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447)"
+       id="use26114"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,1.4544169)"
+       id="use26116"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,2.9088338)"
+       id="use26118"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,4.3632507)"
+       id="use26120"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,5.8176676)"
+       id="use26122"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,7.2720845)"
+       id="use26124"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,8.7265014)"
+       id="use26126"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,10.180918)"
+       id="use26128"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,11.635335)"
+       id="use26130"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,13.089752)"
+       id="use26132"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,14.544169)"
+       id="use26134"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,15.998586)"
+       id="use26136"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,17.453003)"
+       id="use26138"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,18.90742)"
+       id="use26140"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,20.361837)"
+       id="use26142"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,21.816254)"
+       id="use26144"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,23.27067)"
+       id="use26146"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,24.725087)"
+       id="use26148"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,26.179504)"
+       id="use26150"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,27.633921)"
+       id="use26152"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,29.088338)"
+       id="use26154"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,30.542755)"
+       id="use26156"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,31.997172)"
+       id="use26158"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,33.451589)"
+       id="use26160"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,34.906006)"
+       id="use26162"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,36.360422)"
+       id="use26164"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,37.814839)"
+       id="use26166"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,39.269256)"
+       id="use26168"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,40.723673)"
+       id="use26170"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,42.17809)"
+       id="use26172"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,43.632507)"
+       id="use26174"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(43.38447,45.086924)"
+       id="use26176"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486)"
+       id="use26178"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,1.4544169)"
+       id="use26180"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,2.9088338)"
+       id="use26182"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,4.3632507)"
+       id="use26184"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,5.8176676)"
+       id="use26186"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,7.2720845)"
+       id="use26188"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,8.7265014)"
+       id="use26190"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,10.180918)"
+       id="use26192"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,11.635335)"
+       id="use26194"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,13.089752)"
+       id="use26196"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,14.544169)"
+       id="use26198"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,15.998586)"
+       id="use26200"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,17.453003)"
+       id="use26202"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,18.90742)"
+       id="use26204"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,20.361837)"
+       id="use26206"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,21.816254)"
+       id="use26208"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,23.27067)"
+       id="use26210"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,24.725087)"
+       id="use26212"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,26.179504)"
+       id="use26214"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,27.633921)"
+       id="use26216"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,29.088338)"
+       id="use26218"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,30.542755)"
+       id="use26220"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,31.997172)"
+       id="use26222"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,33.451589)"
+       id="use26224"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,34.906006)"
+       id="use26226"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,36.360422)"
+       id="use26228"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,37.814839)"
+       id="use26230"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,39.269256)"
+       id="use26232"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,40.723673)"
+       id="use26234"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,42.17809)"
+       id="use26236"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,43.632507)"
+       id="use26238"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(44.880486,45.086924)"
+       id="use26240"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502)"
+       id="use26242"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,1.4544169)"
+       id="use26244"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,2.9088338)"
+       id="use26246"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,4.3632507)"
+       id="use26248"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,5.8176676)"
+       id="use26250"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,7.2720845)"
+       id="use26252"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,8.7265014)"
+       id="use26254"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,10.180918)"
+       id="use26256"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,11.635335)"
+       id="use26258"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,13.089752)"
+       id="use26260"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,14.544169)"
+       id="use26262"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,15.998586)"
+       id="use26264"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,17.453003)"
+       id="use26266"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,18.90742)"
+       id="use26268"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,20.361837)"
+       id="use26270"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,21.816254)"
+       id="use26272"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,23.27067)"
+       id="use26274"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,24.725087)"
+       id="use26276"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,26.179504)"
+       id="use26278"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,27.633921)"
+       id="use26280"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,29.088338)"
+       id="use26282"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,30.542755)"
+       id="use26284"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,31.997172)"
+       id="use26286"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,33.451589)"
+       id="use26288"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,34.906006)"
+       id="use26290"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,36.360422)"
+       id="use26292"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,37.814839)"
+       id="use26294"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,39.269256)"
+       id="use26296"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,40.723673)"
+       id="use26298"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,42.17809)"
+       id="use26300"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,43.632507)"
+       id="use26302"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(46.376502,45.086924)"
+       id="use26304"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518)"
+       id="use26306"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,1.4544169)"
+       id="use26308"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,2.9088338)"
+       id="use26310"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,4.3632507)"
+       id="use26312"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,5.8176676)"
+       id="use26314"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,7.2720845)"
+       id="use26316"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,8.7265014)"
+       id="use26318"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,10.180918)"
+       id="use26320"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,11.635335)"
+       id="use26322"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,13.089752)"
+       id="use26324"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,14.544169)"
+       id="use26326"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,15.998586)"
+       id="use26328"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,17.453003)"
+       id="use26330"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,18.90742)"
+       id="use26332"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,20.361837)"
+       id="use26334"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,21.816254)"
+       id="use26336"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,23.27067)"
+       id="use26338"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,24.725087)"
+       id="use26340"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,26.179504)"
+       id="use26342"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,27.633921)"
+       id="use26344"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,29.088338)"
+       id="use26346"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,30.542755)"
+       id="use26348"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,31.997172)"
+       id="use26350"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,33.451589)"
+       id="use26352"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,34.906006)"
+       id="use26354"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,36.360422)"
+       id="use26356"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,37.814839)"
+       id="use26358"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,39.269256)"
+       id="use26360"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,40.723673)"
+       id="use26362"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,42.17809)"
+       id="use26364"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,43.632507)"
+       id="use26366"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(47.872518,45.086924)"
+       id="use26368"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535)"
+       id="use26370"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,1.4544169)"
+       id="use26372"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,2.9088338)"
+       id="use26374"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,4.3632507)"
+       id="use26376"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,5.8176676)"
+       id="use26378"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,7.2720845)"
+       id="use26380"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,8.7265014)"
+       id="use26382"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,10.180918)"
+       id="use26384"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,11.635335)"
+       id="use26386"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,13.089752)"
+       id="use26388"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,14.544169)"
+       id="use26390"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,15.998586)"
+       id="use26392"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,17.453003)"
+       id="use26394"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,18.90742)"
+       id="use26396"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,20.361837)"
+       id="use26398"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,21.816254)"
+       id="use26400"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,23.27067)"
+       id="use26402"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,24.725087)"
+       id="use26404"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,26.179504)"
+       id="use26406"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,27.633921)"
+       id="use26408"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,29.088338)"
+       id="use26410"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,30.542755)"
+       id="use26412"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,31.997172)"
+       id="use26414"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,33.451589)"
+       id="use26416"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,34.906006)"
+       id="use26418"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,36.360422)"
+       id="use26420"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,37.814839)"
+       id="use26422"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,39.269256)"
+       id="use26424"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,40.723673)"
+       id="use26426"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,42.17809)"
+       id="use26428"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,43.632507)"
+       id="use26430"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(49.368535,45.086924)"
+       id="use26432"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551)"
+       id="use26434"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,1.4544169)"
+       id="use26436"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,2.9088338)"
+       id="use26438"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,4.3632507)"
+       id="use26440"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,5.8176676)"
+       id="use26442"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,7.2720845)"
+       id="use26444"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,8.7265014)"
+       id="use26446"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,10.180918)"
+       id="use26448"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,11.635335)"
+       id="use26450"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,13.089752)"
+       id="use26452"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,14.544169)"
+       id="use26454"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,15.998586)"
+       id="use26456"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,17.453003)"
+       id="use26458"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,18.90742)"
+       id="use26460"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,20.361837)"
+       id="use26462"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,21.816254)"
+       id="use26464"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,23.27067)"
+       id="use26466"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,24.725087)"
+       id="use26468"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,26.179504)"
+       id="use26470"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,27.633921)"
+       id="use26472"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,29.088338)"
+       id="use26474"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,30.542755)"
+       id="use26476"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,31.997172)"
+       id="use26478"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,33.451589)"
+       id="use26480"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,34.906006)"
+       id="use26482"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,36.360422)"
+       id="use26484"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,37.814839)"
+       id="use26486"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,39.269256)"
+       id="use26488"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,40.723673)"
+       id="use26490"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,42.17809)"
+       id="use26492"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,43.632507)"
+       id="use26494"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(50.864551,45.086924)"
+       id="use26496"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567)"
+       id="use26498"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,1.4544169)"
+       id="use26500"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,2.9088338)"
+       id="use26502"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,4.3632507)"
+       id="use26504"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,5.8176676)"
+       id="use26506"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,7.2720845)"
+       id="use26508"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,8.7265014)"
+       id="use26510"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,10.180918)"
+       id="use26512"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,11.635335)"
+       id="use26514"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,13.089752)"
+       id="use26516"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,14.544169)"
+       id="use26518"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,15.998586)"
+       id="use26520"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,17.453003)"
+       id="use26522"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,18.90742)"
+       id="use26524"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,20.361837)"
+       id="use26526"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,21.816254)"
+       id="use26528"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,23.27067)"
+       id="use26530"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,24.725087)"
+       id="use26532"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,26.179504)"
+       id="use26534"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,27.633921)"
+       id="use26536"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,29.088338)"
+       id="use26538"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,30.542755)"
+       id="use26540"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,31.997172)"
+       id="use26542"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,33.451589)"
+       id="use26544"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,34.906006)"
+       id="use26546"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,36.360422)"
+       id="use26548"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,37.814839)"
+       id="use26550"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,39.269256)"
+       id="use26552"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,40.723673)"
+       id="use26554"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,42.17809)"
+       id="use26556"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,43.632507)"
+       id="use26558"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(52.360567,45.086924)"
+       id="use26560"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583)"
+       id="use26562"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,1.4544169)"
+       id="use26564"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,2.9088338)"
+       id="use26566"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,4.3632507)"
+       id="use26568"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,5.8176676)"
+       id="use26570"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,7.2720845)"
+       id="use26572"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,8.7265014)"
+       id="use26574"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,10.180918)"
+       id="use26576"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,11.635335)"
+       id="use26578"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,13.089752)"
+       id="use26580"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,14.544169)"
+       id="use26582"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,15.998586)"
+       id="use26584"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,17.453003)"
+       id="use26586"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,18.90742)"
+       id="use26588"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,20.361837)"
+       id="use26590"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,21.816254)"
+       id="use26592"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,23.27067)"
+       id="use26594"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,24.725087)"
+       id="use26596"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,26.179504)"
+       id="use26598"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,27.633921)"
+       id="use26600"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,29.088338)"
+       id="use26602"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,30.542755)"
+       id="use26604"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,31.997172)"
+       id="use26606"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,33.451589)"
+       id="use26608"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,34.906006)"
+       id="use26610"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,36.360422)"
+       id="use26612"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,37.814839)"
+       id="use26614"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,39.269256)"
+       id="use26616"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,40.723673)"
+       id="use26618"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,42.17809)"
+       id="use26620"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,43.632507)"
+       id="use26622"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(53.856583,45.086924)"
+       id="use26624"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599)"
+       id="use26626"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,1.4544169)"
+       id="use26628"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,2.9088338)"
+       id="use26630"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,4.3632507)"
+       id="use26632"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,5.8176676)"
+       id="use26634"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,7.2720845)"
+       id="use26636"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,8.7265014)"
+       id="use26638"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,10.180918)"
+       id="use26640"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,11.635335)"
+       id="use26642"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,13.089752)"
+       id="use26644"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,14.544169)"
+       id="use26646"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,15.998586)"
+       id="use26648"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,17.453003)"
+       id="use26650"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,18.90742)"
+       id="use26652"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,20.361837)"
+       id="use26654"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,21.816254)"
+       id="use26656"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,23.27067)"
+       id="use26658"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,24.725087)"
+       id="use26660"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,26.179504)"
+       id="use26662"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,27.633921)"
+       id="use26664"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,29.088338)"
+       id="use26666"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,30.542755)"
+       id="use26668"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,31.997172)"
+       id="use26670"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,33.451589)"
+       id="use26672"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,34.906006)"
+       id="use26674"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,36.360422)"
+       id="use26676"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,37.814839)"
+       id="use26678"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,39.269256)"
+       id="use26680"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,40.723673)"
+       id="use26682"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,42.17809)"
+       id="use26684"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,43.632507)"
+       id="use26686"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(55.352599,45.086924)"
+       id="use26688"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616)"
+       id="use26690"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,1.4544169)"
+       id="use26692"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,2.9088338)"
+       id="use26694"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,4.3632507)"
+       id="use26696"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,5.8176676)"
+       id="use26698"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,7.2720845)"
+       id="use26700"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,8.7265014)"
+       id="use26702"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,10.180918)"
+       id="use26704"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,11.635335)"
+       id="use26706"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,13.089752)"
+       id="use26708"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,14.544169)"
+       id="use26710"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,15.998586)"
+       id="use26712"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,17.453003)"
+       id="use26714"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,18.90742)"
+       id="use26716"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,20.361837)"
+       id="use26718"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,21.816254)"
+       id="use26720"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,23.27067)"
+       id="use26722"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,24.725087)"
+       id="use26724"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,26.179504)"
+       id="use26726"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,27.633921)"
+       id="use26728"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,29.088338)"
+       id="use26730"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,30.542755)"
+       id="use26732"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,31.997172)"
+       id="use26734"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,33.451589)"
+       id="use26736"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,34.906006)"
+       id="use26738"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,36.360422)"
+       id="use26740"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,37.814839)"
+       id="use26742"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,39.269256)"
+       id="use26744"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,40.723673)"
+       id="use26746"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,42.17809)"
+       id="use26748"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,43.632507)"
+       id="use26750"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(56.848616,45.086924)"
+       id="use26752"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632)"
+       id="use26754"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,1.4544169)"
+       id="use26756"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,2.9088338)"
+       id="use26758"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,4.3632507)"
+       id="use26760"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,5.8176676)"
+       id="use26762"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,7.2720845)"
+       id="use26764"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,8.7265014)"
+       id="use26766"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,10.180918)"
+       id="use26768"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,11.635335)"
+       id="use26770"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,13.089752)"
+       id="use26772"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,14.544169)"
+       id="use26774"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,15.998586)"
+       id="use26776"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,17.453003)"
+       id="use26778"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,18.90742)"
+       id="use26780"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,20.361837)"
+       id="use26782"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,21.816254)"
+       id="use26784"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,23.27067)"
+       id="use26786"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,24.725087)"
+       id="use26788"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,26.179504)"
+       id="use26790"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,27.633921)"
+       id="use26792"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,29.088338)"
+       id="use26794"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,30.542755)"
+       id="use26796"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,31.997172)"
+       id="use26798"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,33.451589)"
+       id="use26800"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,34.906006)"
+       id="use26802"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,36.360422)"
+       id="use26804"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,37.814839)"
+       id="use26806"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,39.269256)"
+       id="use26808"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,40.723673)"
+       id="use26810"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,42.17809)"
+       id="use26812"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,43.632507)"
+       id="use26814"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(58.344632,45.086924)"
+       id="use26816"
+       style="fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use10638-0"
+       xlink:href="#use10638-0"
+       transform="translate(70.250891,34.784767)"
+       id="use26816-7"
+       style="display:inline;fill:none;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       inkscape:tile-cx="109.2298"
+       inkscape:tile-cy="136.20825"
+       inkscape:tile-w="1.4960162"
+       inkscape:tile-h="1.4544169"
+       inkscape:tile-x0="108.48179"
+       inkscape:tile-y0="135.48104" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       id="use31778"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,1.4544169)"
+       id="use31780"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,2.9088337)"
+       id="use31782"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,4.3632507)"
+       id="use31784"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,5.8176677)"
+       id="use31786"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,7.2720847)"
+       id="use31788"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,8.7265017)"
+       id="use31790"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(3.049125e-7,10.180918)"
+       id="use31792"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163)"
+       id="use31794"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,1.4544169)"
+       id="use31796"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,2.9088337)"
+       id="use31798"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,4.3632507)"
+       id="use31800"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,5.8176677)"
+       id="use31802"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,7.2720847)"
+       id="use31804"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,8.7265017)"
+       id="use31806"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(1.4960163,10.180918)"
+       id="use31808"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323)"
+       id="use31810"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,1.4544169)"
+       id="use31812"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,2.9088337)"
+       id="use31814"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,4.3632507)"
+       id="use31816"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,5.8176677)"
+       id="use31818"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,7.2720847)"
+       id="use31820"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,8.7265017)"
+       id="use31822"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(2.9920323,10.180918)"
+       id="use31824"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483)"
+       id="use31826"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,1.4544169)"
+       id="use31828"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,2.9088337)"
+       id="use31830"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,4.3632507)"
+       id="use31832"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,5.8176677)"
+       id="use31834"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,7.2720847)"
+       id="use31836"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,8.7265017)"
+       id="use31838"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(4.4880483,10.180918)"
+       id="use31840"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643)"
+       id="use31842"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,1.4544169)"
+       id="use31844"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,2.9088337)"
+       id="use31846"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,4.3632507)"
+       id="use31848"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,5.8176677)"
+       id="use31850"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,7.2720847)"
+       id="use31852"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,8.7265017)"
+       id="use31854"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(5.9840643,10.180918)"
+       id="use31856"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803)"
+       id="use31858"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,1.4544169)"
+       id="use31860"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,2.9088337)"
+       id="use31862"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,4.3632507)"
+       id="use31864"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,5.8176677)"
+       id="use31866"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,7.2720847)"
+       id="use31868"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,8.7265017)"
+       id="use31870"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(27.457088,9.7843608)"
+       id="use31870-3"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(7.4800803,10.180918)"
+       id="use31872"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973)"
+       id="use31874"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,1.4544169)"
+       id="use31876"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,2.9088337)"
+       id="use31878"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,4.3632507)"
+       id="use31880"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,5.8176677)"
+       id="use31882"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,7.2720847)"
+       id="use31884"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,8.7265017)"
+       id="use31886"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(8.9760973,10.180918)"
+       id="use31888"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113)"
+       id="use31890"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,1.4544169)"
+       id="use31892"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,2.9088337)"
+       id="use31894"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,4.3632507)"
+       id="use31896"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,5.8176677)"
+       id="use31898"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,7.2720847)"
+       id="use31900"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,8.7265017)"
+       id="use31902"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#use26816-7"
+       xlink:href="#use26816-7"
+       transform="translate(10.472113,10.180918)"
+       id="use31904"
+       style="display:inline;stroke:#000000;stroke-width:1.001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-size:3.175px;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       x="37.041668"
+       y="145.52081"
+       id="text32456"><tspan
+         sodipodi:role="line"
+         id="tspan32454"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none"
+         x="37.041668"
+         y="145.52081">Framebuffer</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:3.175px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       x="85.615189"
+       y="145.65233"
+       id="text32456-2"><tspan
+         sodipodi:role="line"
+         id="tspan32454-2"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none"
+         x="85.615189"
+         y="145.65233">Tile Image</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:3.175px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       x="112.60268"
+       y="145.65233"
+       id="text32456-9"><tspan
+         sodipodi:role="line"
+         id="tspan32454-4"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.294;stroke-dasharray:none"
+         x="112.60268"
+         y="145.65233">Pixel</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 2"
+     style="display:inline"
+     transform="translate(-17.696075,-91.476828)">
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.318729;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect29812"
+       width="11.647802"
+       height="11.315008"
+       x="17.887276"
+       y="91.636192"
+       inkscape:tile-cx="128.57651"
+       inkscape:tile-cy="109.61182"
+       inkscape:tile-w="11.968129"
+       inkscape:tile-h="11.635335"
+       inkscape:tile-x0="122.59244"
+       inkscape:tile-y0="103.79416" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       id="use30177"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(5.6333334e-7,11.635335)"
+       id="use30179"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(5.6333334e-7,23.27067)"
+       id="use30181"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(5.6333334e-7,34.906005)"
+       id="use30183"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(11.968129)"
+       id="use30185"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(11.968129,11.635335)"
+       id="use30187"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(11.968129,23.27067)"
+       id="use30189"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(11.968129,34.906005)"
+       id="use30191"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(23.936258)"
+       id="use30193"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(23.936258,11.635335)"
+       id="use30195"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(23.936258,23.27067)"
+       id="use30197"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(23.936258,34.906005)"
+       id="use30199"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(35.904387)"
+       id="use30201"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(35.904387,11.635335)"
+       id="use30203"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(35.904387,23.27067)"
+       id="use30205"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(35.904387,34.906005)"
+       id="use30207"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(47.872516)"
+       id="use30209"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(70.196159,34.810905)"
+       id="use30209-6"
+       style="display:inline;stroke:#ff0000;stroke-width:0.995;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(47.872516,11.635335)"
+       id="use30211"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(47.872516,23.27067)"
+       id="use30213"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       x="0"
+       y="0"
+       inkscape:tiled-clone-of="#rect29812"
+       xlink:href="#rect29812"
+       transform="translate(47.872516,34.906005)"
+       id="use30215"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99501;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkan2-unscaled.svg b/codegen/vulkan/vulkan-docs-next/images/vulkan2-unscaled.svg
new file mode 100644
index 0000000..ef89029
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkan2-unscaled.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 1150 326" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+    <g id="Artboard1" transform="matrix(0.95515,0,0,0.888283,-40.1163,-30.2016)">
+        <rect x="42" y="34" width="1204" height="367" style="fill:none;"/>
+        <g transform="matrix(1.04696,0,0,1.12577,-46.9913,-50.4325)">
+            <path d="M724.1,385.06L683.53,385.06C683.53,385.06 683.53,286.09 683.53,255.4C696.49,262.62 713.62,275.94 724.1,288.72L724.1,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <g>
+                <path d="M381.75,385.06L331.17,385.06L265.16,181.03L311.17,181.03L356.61,324.48L357.18,324.48L403.18,181.03L449.47,181.03L381.75,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+                <path d="M585.51,385.06L546.93,385.06L546.93,364.49L546.08,364.49C540.93,373.07 534.27,379.26 526.07,383.07C517.88,386.88 509.5,388.78 500.92,388.78C490.06,388.78 481.16,387.35 474.2,384.5C467.25,381.65 461.77,377.59 457.77,372.36C453.76,367.12 450.95,360.74 449.33,353.21C447.72,345.69 446.91,337.35 446.91,328.21L446.91,237.33L487.49,237.33L487.49,320.77C487.49,332.96 489.4,342.06 493.21,348.06C497.02,354.07 503.78,357.06 513.5,357.06C524.55,357.06 532.55,353.78 537.5,347.2C542.46,340.62 544.93,329.81 544.93,314.76L544.93,237.32L585.52,237.32L585.52,385.06L585.51,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            </g>
+            <path d="M730.84,296.19L730.74,290.47L781.89,237.33L829.91,237.33L774.18,291.62L836.19,385.06L787.04,385.06L730.84,296.19Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M843.62,282.76C844.19,273.24 846.58,265.33 850.77,259.04C854.96,252.75 860.29,247.71 866.77,243.9C873.25,240.09 880.54,237.37 888.64,235.76C896.73,234.14 904.88,233.33 913.07,233.33C920.5,233.33 928.02,233.85 935.64,234.9C943.27,235.95 950.21,238 956.5,241.05C962.78,244.1 967.93,248.34 971.94,253.76C975.94,259.19 977.94,266.38 977.94,275.34L977.94,352.21C977.94,358.88 978.32,365.27 979.08,371.36C979.84,377.46 981.18,382.03 983.09,385.08L941.94,385.08C941.18,382.8 940.56,380.46 940.08,378.08C939.61,375.7 939.27,373.28 939.08,370.79C932.6,377.47 924.97,382.13 916.21,384.8C907.45,387.46 898.49,388.8 889.35,388.8C882.3,388.8 875.72,387.94 869.64,386.23C863.54,384.52 858.2,381.85 853.64,378.23C849.06,374.61 845.48,370.04 842.92,364.51C840.35,358.99 839.06,352.42 839.06,344.8C839.06,336.42 840.54,329.51 843.49,324.08C846.45,318.65 850.25,314.32 854.93,311.08C859.6,307.84 864.93,305.41 870.93,303.79C876.93,302.17 882.98,300.88 889.07,299.93C895.17,298.99 901.17,298.22 907.08,297.65C912.99,297.08 918.22,296.22 922.79,295.08C927.37,293.93 930.98,292.27 933.65,290.07C936.32,287.88 937.56,284.69 937.37,280.5C937.37,276.12 936.65,272.64 935.22,270.07C933.79,267.5 931.89,265.5 929.51,264.07C927.13,262.64 924.37,261.69 921.22,261.21C918.07,260.73 914.7,260.49 911.08,260.49C903.08,260.49 896.79,262.2 892.22,265.64C887.65,269.07 884.98,274.78 884.22,282.79L843.62,282.79L843.62,282.76ZM937.35,312.77C935.63,314.3 933.49,315.48 930.92,316.34C928.35,317.21 925.59,317.92 922.63,318.49C919.68,319.06 916.58,319.54 913.35,319.92C910.11,320.3 906.87,320.77 903.63,321.35C900.58,321.92 897.58,322.69 894.63,323.63C891.68,324.59 889.1,325.87 886.91,327.49C884.72,329.11 882.96,331.16 881.62,333.63C880.29,336.11 879.62,339.25 879.62,343.06C879.62,346.68 880.29,349.73 881.62,352.2C882.96,354.68 884.77,356.63 887.05,358.06C889.34,359.49 892,360.49 895.05,361.06C898.1,361.63 901.24,361.91 904.48,361.91C912.48,361.91 918.68,360.58 923.06,357.92C927.44,355.25 930.69,352.06 932.77,348.34C934.86,344.63 936.16,340.87 936.62,337.06C937.1,333.25 937.33,330.2 937.34,327.92L937.34,312.77L937.35,312.77Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M1004.21,237.33L1042.8,237.33L1042.8,257.9L1043.65,257.9C1048.79,249.33 1055.46,243.09 1063.65,239.19C1071.84,235.28 1080.23,233.33 1088.79,233.33C1099.66,233.33 1108.56,234.81 1115.52,237.76C1122.47,240.72 1127.94,244.81 1131.95,250.05C1135.95,255.29 1138.76,261.67 1140.38,269.19C1142,276.72 1142.81,285.05 1142.81,294.2L1142.81,385.07L1102.24,385.07L1102.24,301.63C1102.24,289.43 1100.33,280.34 1096.53,274.34C1092.71,268.34 1085.95,265.34 1076.23,265.34C1065.18,265.34 1057.19,268.63 1052.23,275.2C1047.27,281.76 1044.8,292.58 1044.8,307.63L1044.8,385.07L1004.22,385.07L1004.22,237.33L1004.21,237.33Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M612.37,211.84L612.37,385.07L652.95,385.07L652.95,234.21C639.93,226.23 626.36,218.74 612.37,211.84Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M198.43,219.21C221.95,150.32 362.58,125.05 512.58,162.78C602.55,185.4 676.07,229.28 724.09,272.67C702.3,215.12 596.65,133.08 451.18,104.96C286.7,73.16 124.47,101.11 104.39,174.1C89.89,226.83 153.57,288.6 252.05,330.84C207.81,295.02 186.29,254.78 198.43,219.21Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M724.16,247.62L724.16,181.03L683.57,181.03L683.57,201.25C700.88,216.71 714.61,232.45 724.16,247.62Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+        </g>
+        <g transform="matrix(1.04696,0,0,1.12577,-46.9913,-50.4325)">
+            <path d="M1214.98,363.43C1214.98,375.69 1205.35,385.32 1192.83,385.32C1180.43,385.32 1170.54,375.69 1170.54,363.43C1170.54,351.43 1180.43,341.8 1192.83,341.8C1205.35,341.8 1214.98,351.43 1214.98,363.43ZM1176.08,363.43C1176.08,373.06 1183.2,380.7 1192.96,380.7C1202.45,380.7 1209.44,373.05 1209.44,363.56C1209.44,353.93 1202.45,346.15 1192.82,346.15C1183.2,346.16 1176.08,353.94 1176.08,363.43ZM1189.39,374.77L1184.38,374.77L1184.38,353.14C1186.36,352.74 1189.13,352.48 1192.69,352.48C1196.78,352.48 1198.62,353.14 1200.21,354.06C1201.4,354.98 1202.32,356.7 1202.32,358.81C1202.32,361.18 1200.47,363.03 1197.84,363.82L1197.84,364.08C1199.95,364.87 1201.14,366.45 1201.8,369.35C1202.46,372.65 1202.85,373.97 1203.38,374.76L1197.97,374.76C1197.31,373.97 1196.92,371.99 1196.26,369.49C1195.86,367.12 1194.55,366.06 1191.78,366.06L1189.41,366.06L1189.41,374.77L1189.39,374.77ZM1189.53,362.51L1191.9,362.51C1194.67,362.51 1196.91,361.59 1196.91,359.34C1196.91,357.36 1195.46,356.04 1192.29,356.04C1190.97,356.04 1190.05,356.17 1189.52,356.3L1189.52,362.51L1189.53,362.51Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+        </g>
+    </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkan2.svg b/codegen/vulkan/vulkan-docs-next/images/vulkan2.svg
new file mode 100644
index 0000000..1ae75e6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkan2.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 1150 326" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
+    <g id="Artboard1" transform="matrix(0.95515,0,0,0.888283,-40.1163,-30.2016)">
+        <rect x="42" y="34" width="1204" height="367" style="fill:none;"/>
+        <g transform="matrix(1.04696,0,0,1.12577,-46.9913,-50.4325)">
+            <path d="M724.1,385.06L683.53,385.06C683.53,385.06 683.53,286.09 683.53,255.4C696.49,262.62 713.62,275.94 724.1,288.72L724.1,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <g>
+                <path d="M381.75,385.06L331.17,385.06L265.16,181.03L311.17,181.03L356.61,324.48L357.18,324.48L403.18,181.03L449.47,181.03L381.75,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+                <path d="M585.51,385.06L546.93,385.06L546.93,364.49L546.08,364.49C540.93,373.07 534.27,379.26 526.07,383.07C517.88,386.88 509.5,388.78 500.92,388.78C490.06,388.78 481.16,387.35 474.2,384.5C467.25,381.65 461.77,377.59 457.77,372.36C453.76,367.12 450.95,360.74 449.33,353.21C447.72,345.69 446.91,337.35 446.91,328.21L446.91,237.33L487.49,237.33L487.49,320.77C487.49,332.96 489.4,342.06 493.21,348.06C497.02,354.07 503.78,357.06 513.5,357.06C524.55,357.06 532.55,353.78 537.5,347.2C542.46,340.62 544.93,329.81 544.93,314.76L544.93,237.32L585.52,237.32L585.52,385.06L585.51,385.06Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            </g>
+            <path d="M730.84,296.19L730.74,290.47L781.89,237.33L829.91,237.33L774.18,291.62L836.19,385.06L787.04,385.06L730.84,296.19Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M843.62,282.76C844.19,273.24 846.58,265.33 850.77,259.04C854.96,252.75 860.29,247.71 866.77,243.9C873.25,240.09 880.54,237.37 888.64,235.76C896.73,234.14 904.88,233.33 913.07,233.33C920.5,233.33 928.02,233.85 935.64,234.9C943.27,235.95 950.21,238 956.5,241.05C962.78,244.1 967.93,248.34 971.94,253.76C975.94,259.19 977.94,266.38 977.94,275.34L977.94,352.21C977.94,358.88 978.32,365.27 979.08,371.36C979.84,377.46 981.18,382.03 983.09,385.08L941.94,385.08C941.18,382.8 940.56,380.46 940.08,378.08C939.61,375.7 939.27,373.28 939.08,370.79C932.6,377.47 924.97,382.13 916.21,384.8C907.45,387.46 898.49,388.8 889.35,388.8C882.3,388.8 875.72,387.94 869.64,386.23C863.54,384.52 858.2,381.85 853.64,378.23C849.06,374.61 845.48,370.04 842.92,364.51C840.35,358.99 839.06,352.42 839.06,344.8C839.06,336.42 840.54,329.51 843.49,324.08C846.45,318.65 850.25,314.32 854.93,311.08C859.6,307.84 864.93,305.41 870.93,303.79C876.93,302.17 882.98,300.88 889.07,299.93C895.17,298.99 901.17,298.22 907.08,297.65C912.99,297.08 918.22,296.22 922.79,295.08C927.37,293.93 930.98,292.27 933.65,290.07C936.32,287.88 937.56,284.69 937.37,280.5C937.37,276.12 936.65,272.64 935.22,270.07C933.79,267.5 931.89,265.5 929.51,264.07C927.13,262.64 924.37,261.69 921.22,261.21C918.07,260.73 914.7,260.49 911.08,260.49C903.08,260.49 896.79,262.2 892.22,265.64C887.65,269.07 884.98,274.78 884.22,282.79L843.62,282.79L843.62,282.76ZM937.35,312.77C935.63,314.3 933.49,315.48 930.92,316.34C928.35,317.21 925.59,317.92 922.63,318.49C919.68,319.06 916.58,319.54 913.35,319.92C910.11,320.3 906.87,320.77 903.63,321.35C900.58,321.92 897.58,322.69 894.63,323.63C891.68,324.59 889.1,325.87 886.91,327.49C884.72,329.11 882.96,331.16 881.62,333.63C880.29,336.11 879.62,339.25 879.62,343.06C879.62,346.68 880.29,349.73 881.62,352.2C882.96,354.68 884.77,356.63 887.05,358.06C889.34,359.49 892,360.49 895.05,361.06C898.1,361.63 901.24,361.91 904.48,361.91C912.48,361.91 918.68,360.58 923.06,357.92C927.44,355.25 930.69,352.06 932.77,348.34C934.86,344.63 936.16,340.87 936.62,337.06C937.1,333.25 937.33,330.2 937.34,327.92L937.34,312.77L937.35,312.77Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M1004.21,237.33L1042.8,237.33L1042.8,257.9L1043.65,257.9C1048.79,249.33 1055.46,243.09 1063.65,239.19C1071.84,235.28 1080.23,233.33 1088.79,233.33C1099.66,233.33 1108.56,234.81 1115.52,237.76C1122.47,240.72 1127.94,244.81 1131.95,250.05C1135.95,255.29 1138.76,261.67 1140.38,269.19C1142,276.72 1142.81,285.05 1142.81,294.2L1142.81,385.07L1102.24,385.07L1102.24,301.63C1102.24,289.43 1100.33,280.34 1096.53,274.34C1092.71,268.34 1085.95,265.34 1076.23,265.34C1065.18,265.34 1057.19,268.63 1052.23,275.2C1047.27,281.76 1044.8,292.58 1044.8,307.63L1044.8,385.07L1004.22,385.07L1004.22,237.33L1004.21,237.33Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M612.37,211.84L612.37,385.07L652.95,385.07L652.95,234.21C639.93,226.23 626.36,218.74 612.37,211.84Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M198.43,219.21C221.95,150.32 362.58,125.05 512.58,162.78C602.55,185.4 676.07,229.28 724.09,272.67C702.3,215.12 596.65,133.08 451.18,104.96C286.7,73.16 124.47,101.11 104.39,174.1C89.89,226.83 153.57,288.6 252.05,330.84C207.81,295.02 186.29,254.78 198.43,219.21Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+            <path d="M724.16,247.62L724.16,181.03L683.57,181.03L683.57,201.25C700.88,216.71 714.61,232.45 724.16,247.62Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+        </g>
+        <g transform="matrix(1.04696,0,0,1.12577,-46.9913,-50.4325)">
+            <path d="M1214.98,363.43C1214.98,375.69 1205.35,385.32 1192.83,385.32C1180.43,385.32 1170.54,375.69 1170.54,363.43C1170.54,351.43 1180.43,341.8 1192.83,341.8C1205.35,341.8 1214.98,351.43 1214.98,363.43ZM1176.08,363.43C1176.08,373.06 1183.2,380.7 1192.96,380.7C1202.45,380.7 1209.44,373.05 1209.44,363.56C1209.44,353.93 1202.45,346.15 1192.82,346.15C1183.2,346.16 1176.08,353.94 1176.08,363.43ZM1189.39,374.77L1184.38,374.77L1184.38,353.14C1186.36,352.74 1189.13,352.48 1192.69,352.48C1196.78,352.48 1198.62,353.14 1200.21,354.06C1201.4,354.98 1202.32,356.7 1202.32,358.81C1202.32,361.18 1200.47,363.03 1197.84,363.82L1197.84,364.08C1199.95,364.87 1201.14,366.45 1201.8,369.35C1202.46,372.65 1202.85,373.97 1203.38,374.76L1197.97,374.76C1197.31,373.97 1196.92,371.99 1196.26,369.49C1195.86,367.12 1194.55,366.06 1191.78,366.06L1189.41,366.06L1189.41,374.77L1189.39,374.77ZM1189.53,362.51L1191.9,362.51C1194.67,362.51 1196.91,361.59 1196.91,359.34C1196.91,357.36 1195.46,356.04 1192.29,356.04C1190.97,356.04 1190.05,356.17 1189.52,356.3L1189.52,362.51L1189.53,362.51Z" style="fill:rgb(172,22,44);fill-rule:nonzero;"/>
+        </g>
+    </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkansc-unscaled.svg b/codegen/vulkan/vulkan-docs-next/images/vulkansc-unscaled.svg
new file mode 100644
index 0000000..fb3313a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkansc-unscaled.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Vulkan" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 1715 500" enable-background="new 0 0 1715 500" xml:space="preserve">
+<g>
+	<path fill="#A41E22" d="M724.1,385.1h-40.6c0,0,0-99,0-129.7c13,7.2,30.1,20.5,40.6,33.3V385.1z"/>
+	<g>
+		<path fill="#A41E22" d="M381.8,385.1h-50.6l-66-204h46l45.4,143.5h0.6l46-143.5h46.3L381.8,385.1z"/>
+		<path fill="#A41E22" d="M585.5,385.1h-38.6v-20.6h-0.9c-5.1,8.6-11.8,14.8-20,18.6c-8.2,3.8-16.6,5.7-25.1,5.7
+			c-10.9,0-19.8-1.4-26.7-4.3c-7-2.9-12.4-6.9-16.4-12.1c-4-5.2-6.8-11.6-8.4-19.1c-1.6-7.5-2.4-15.9-2.4-25v-90.9h40.6v83.4
+			c0,12.2,1.9,21.3,5.7,27.3c3.8,6,10.6,9,20.3,9c11,0,19.1-3.3,24-9.9c5-6.6,7.4-17.4,7.4-32.4v-77.4h40.6V385.1z"/>
+	</g>
+	<polygon fill="#A41E22" points="730.8,296.2 730.7,290.5 781.9,237.3 829.9,237.3 774.2,291.6 836.2,385.1 787,385.1 	"/>
+	<path fill="#A41E22" d="M843.6,282.8c0.6-9.5,3-17.4,7.2-23.7c4.2-6.3,9.5-11.3,16-15.1c6.5-3.8,13.8-6.5,21.9-8.1
+		c8.1-1.6,16.2-2.4,24.4-2.4c7.4,0,15,0.5,22.6,1.6c7.6,1.1,14.6,3.1,20.9,6.1c6.3,3.1,11.4,7.3,15.4,12.7c4,5.4,6,12.6,6,21.6v76.9
+		c0,6.7,0.4,13.1,1.1,19.1c0.8,6.1,2.1,10.7,4,13.7h-41.2c-0.8-2.3-1.4-4.6-1.9-7c-0.5-2.4-0.8-4.8-1-7.3
+		c-6.5,6.7-14.1,11.3-22.9,14c-8.8,2.7-17.7,4-26.9,4c-7,0-13.6-0.9-19.7-2.6c-6.1-1.7-11.4-4.4-16-8c-4.6-3.6-8.2-8.2-10.7-13.7
+		c-2.6-5.5-3.9-12.1-3.9-19.7c0-8.4,1.5-15.3,4.4-20.7c3-5.4,6.8-9.8,11.4-13c4.7-3.2,10-5.7,16-7.3c6-1.6,12-2.9,18.1-3.9
+		c6.1-0.9,12.1-1.7,18-2.3c5.9-0.6,11.1-1.4,15.7-2.6c4.6-1.1,8.2-2.8,10.9-5c2.7-2.2,3.9-5.4,3.7-9.6c0-4.4-0.7-7.9-2.2-10.4
+		c-1.4-2.6-3.3-4.6-5.7-6c-2.4-1.4-5.1-2.4-8.3-2.9c-3.1-0.5-6.5-0.7-10.1-0.7c-8,0-14.3,1.7-18.9,5.1c-4.6,3.4-7.2,9.1-8,17.1
+		H843.6z M937.4,312.8c-1.7,1.5-3.9,2.7-6.4,3.6c-2.6,0.9-5.3,1.6-8.3,2.2c-3,0.6-6,1-9.3,1.4c-3.2,0.4-6.5,0.9-9.7,1.4
+		c-3,0.6-6,1.3-9,2.3c-3,1-5.5,2.2-7.7,3.9c-2.2,1.6-4,3.7-5.3,6.1c-1.3,2.5-2,5.6-2,9.4c0,3.6,0.7,6.7,2,9.1
+		c1.3,2.5,3.1,4.4,5.4,5.9c2.3,1.4,5,2.4,8,3c3.1,0.6,6.2,0.9,9.4,0.9c8,0,14.2-1.3,18.6-4c4.4-2.7,7.6-5.9,9.7-9.6
+		c2.1-3.7,3.4-7.5,3.9-11.3c0.5-3.8,0.7-6.9,0.7-9.1V312.8z"/>
+	<path fill="#A41E22" d="M1004.2,237.3h38.6v20.6h0.9c5.1-8.6,11.8-14.8,20-18.7c8.2-3.9,16.6-5.9,25.1-5.9
+		c10.9,0,19.8,1.5,26.7,4.4c7,3,12.4,7.1,16.4,12.3c4,5.2,6.8,11.6,8.4,19.1c1.6,7.5,2.4,15.9,2.4,25v90.9h-40.6v-83.4
+		c0-12.2-1.9-21.3-5.7-27.3c-3.8-6-10.6-9-20.3-9c-11,0-19,3.3-24,9.9c-5,6.6-7.4,17.4-7.4,32.4v77.4h-40.6V237.3z"/>
+	<g>
+		<path fill="#A41E22" d="M612.4,211.8v173.2h40.6V234.2C639.9,226.2,626.4,218.7,612.4,211.8z"/>
+	</g>
+	<path fill="#A41E22" d="M198.4,219.2c23.5-68.9,164.2-94.2,314.1-56.4c90,22.6,163.5,66.5,211.5,109.9
+		C702.3,215.1,596.7,133.1,451.2,105c-164.5-31.8-326.7-3.9-346.8,69.1c-14.5,52.7,49.2,114.5,147.7,156.7
+		C207.8,295,186.3,254.8,198.4,219.2z"/>
+	<g>
+		<path fill="#A41E22" d="M724.2,247.6V181h-40.6v20.2C700.9,216.7,714.6,232.4,724.2,247.6z"/>
+	</g>
+</g>
+<path fill="#A41E22" d="M1186.1,177.7c-3.5,0-6.4,2.9-6.4,6.4v198.7c0,3.5,2.9,6.4,6.4,6.4c3.5,0,6.4-2.9,6.4-6.4V184.2
+	C1192.5,180.6,1189.7,177.7,1186.1,177.7z"/>
+<path fill="#A41E22" d="M1532.8,181.1h-287.5c-7.9,0-14.4,6.4-14.4,14.4v115.4c0,25.8,15.7,48.8,39.5,58.4c30.3,12.3,82,28,104,34.5
+	c6.8,2,14.1,2,21,0.1c23.1-6.6,78.5-22.8,111.1-35.2c24.5-9.3,40.6-32.7,40.6-58.9h0.1V195.5
+	C1547.3,187.6,1540.9,181.1,1532.8,181.1z M1373.2,323.1c-3.1,5.3-7.2,9.6-12.3,12.8c-5,3.2-10.9,5.6-17.4,6.9
+	c-6.5,1.4-13.2,2.1-20.1,2.1c-7.3,0-14.1-0.9-20.5-2.5c-6.5-1.6-12.2-4.3-17.2-7.9c-5-3.6-9-8.2-12-13.8c-3-5.6-4.5-12.4-4.5-20.4
+	h32.6v0.2c0.3,7.4,2.7,12.4,6.8,15.2c4.2,2.8,9.8,4.2,16.8,4.2c2.5,0,4.9-0.2,7.3-0.7c2.4-0.4,4.5-1.2,6.4-2.1c1.8-1,3.4-2.4,4.6-4
+	c1.2-1.6,1.7-3.6,1.7-6c0-2.8-1.1-5-3.1-6.8c-2-1.7-4.7-3.3-8.1-4.6c-3.4-1.3-7.2-2.5-11.4-3.4c-4.3-1-8.7-2.1-13.2-3.4
+	c-4.4-1.3-8.9-2.8-13.2-4.6c-4.4-1.7-8.2-4-11.8-6.7c-3.4-2.8-6.2-6.1-8.4-10.2c-2.1-4.1-3.2-8.9-3.2-14.6c0-6.7,1.5-12.6,4.6-17.4
+	c3.1-4.8,7.1-8.8,12-11.8s10.4-5.2,16.5-6.6c6.1-1.4,12-2.1,17.8-2.1c6.2,0,12.3,0.7,18.3,2.4c6,1.6,11.3,4,16,7.3
+	c4.7,3.3,8.4,7.5,11.3,12.5c2.9,5,4.4,11.1,4.4,18.1h-32.5c0.1-2.8-0.4-5.1-1.6-7.1c-1.2-1.9-2.7-3.4-4.6-4.6
+	c-1.9-1.2-4.1-2-6.5-2.6c-2.5-0.5-4.9-0.7-7.4-0.7c-1.7,0-3.5,0.2-5.4,0.5c-1.8,0.3-3.5,1-5,1.7c-1.5,0.9-2.8,1.9-3.7,3.2
+	c-1,1.4-1.5,3.1-1.5,5.1c0,2.5,1.1,4.4,3.1,6c2,1.5,4.8,2.9,8.2,4.1c3.4,1.2,7.3,2.2,11.6,3.1c4.3,1,8.8,2,13.2,3.3
+	c4.6,1.3,9,2.8,13.2,4.6c4.3,1.8,8.1,4.1,11.5,6.8c3.4,2.8,6.1,6.1,8.2,10.2c2.1,4.1,3.1,8.9,3.1,14.4
+	C1377.8,311,1376.3,317.6,1373.2,323.1z M1467.8,248c-4.5-3.3-10.2-4.9-17.1-4.9c-5.2,0-9.7,1.1-13.4,3.1c-3.6,2.1-6.6,4.9-9,8.4
+	c-2.4,3.5-4.1,7.5-5,11.9c-1.1,4.4-1.6,9-1.6,13.7c0,4.7,0.5,9.2,1.6,13.7c1.1,4.4,2.8,8.4,5,11.9c2.4,3.5,5.3,6.3,9,8.4
+	c3.6,2.1,8.1,3.1,13.4,3.1c7.7,0,13.7-2,18-6.1c4.3-4.1,6.6-9.7,7.3-17h32.5c-0.4,8-2.2,15.3-5.2,21.6c-3,6.3-7.1,11.8-12.1,16.1
+	c-5,4.4-10.9,7.7-17.6,9.9c-6.7,2.2-14.1,3.4-22,3.4c-9.4,0-18.1-1.7-25.8-5c-7.7-3.4-14.2-8-19.7-13.9c-5.4-5.9-9.6-12.7-12.5-20.6
+	c-2.9-7.9-4.4-16.3-4.4-25.4s1.5-17.5,4.4-25.4c2.9-7.9,7.1-14.7,12.5-20.6c5.4-5.9,12-10.5,19.7-13.9c7.7-3.4,16.2-5,25.8-5
+	c6.7,0,13.5,1.1,20.2,3.1c6.7,2.1,12.7,5.1,18.1,9.2c5.3,4.1,9.7,9,13.2,14.9c3.4,5.9,5.2,12.6,5.6,20h-32.6v-0.1
+	C1474.9,256.1,1472.3,251.3,1467.8,248z"/>
+<g id="TM_2_">
+	<path fill="#A41E22" d="M1586.2,186.8h-7.5v19.6h-6.6v-19.6h-7.5v-5.6h21.6L1586.2,186.8L1586.2,186.8z"/>
+	<path fill="#A41E22" d="M1589.1,181.2h9.7l4.3,16.8h0.1l4.3-16.8h9.7v25.2h-6.1v-19.2h-0.1l-5.3,19.2h-5l-5.3-19.2h-0.1v19.2h-6.1
+		V181.2L1589.1,181.2z"/>
+</g>
+<g>
+	<path fill="#A41E22" d="M1159,198.5c0,3.1-0.8,6.1-2.4,8.8s-3.7,4.9-6.4,6.4c-2.7,1.6-5.6,2.3-8.8,2.3c-3.1,0-6-0.8-8.8-2.3
+		c-2.7-1.6-4.9-3.7-6.4-6.4c-1.6-2.7-2.4-5.6-2.4-8.8c0-3.1,0.8-6,2.4-8.8c1.6-2.7,3.7-4.9,6.4-6.4c2.7-1.6,5.6-2.3,8.8-2.3
+		c3.1,0,6.1,0.8,8.8,2.3c2.7,1.6,4.9,3.7,6.4,6.4C1158.2,192.4,1159,195.3,1159,198.5z M1155.6,198.5c0-3.9-1.4-7.2-4.1-10
+		c-2.8-2.8-6.1-4.1-10-4.1c-3.9,0-7.2,1.4-10,4.1c-2.8,2.8-4.1,6.1-4.1,10s1.4,7.2,4.1,10c2.8,2.8,6.1,4.1,10,4.1
+		c3.9,0,7.2-1.4,10-4.1C1154.2,205.7,1155.6,202.4,1155.6,198.5z M1133.5,189.1h8.4c2.4,0,4.1,0.5,5.2,1.4c1.1,1,1.6,2.2,1.6,3.9
+		c0,1.3-0.4,2.3-1.2,3.3c-0.8,0.9-2.1,1.6-3.8,2c0.7,0.3,1.2,0.6,1.6,0.9c0.5,0.4,1,1.1,1.5,1.9c0,0.1,1,1.9,3,5.4h-5.5
+		c-1.8-3.6-3-5.7-3.6-6.4c-0.6-0.7-1.2-1-1.8-1c-0.1,0-0.3,0-0.6,0.1v7.4h-4.7L1133.5,189.1L1133.5,189.1z M1138.1,197h2
+		c1.3,0,2.3-0.2,2.9-0.7c0.6-0.4,0.8-1,0.8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.4-0.7-2.7-0.7h-2.2L1138.1,197L1138.1,197z"/>
+</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkansc.svg b/codegen/vulkan/vulkan-docs-next/images/vulkansc.svg
new file mode 100644
index 0000000..ca2b9fc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkansc.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Vulkan" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="1715px" height="500px" viewBox="0 0 1715 500" enable-background="new 0 0 1715 500" xml:space="preserve">
+<g>
+	<path fill="#A41E22" d="M724.1,385.1h-40.6c0,0,0-99,0-129.7c13,7.2,30.1,20.5,40.6,33.3V385.1z"/>
+	<g>
+		<path fill="#A41E22" d="M381.8,385.1h-50.6l-66-204h46l45.4,143.5h0.6l46-143.5h46.3L381.8,385.1z"/>
+		<path fill="#A41E22" d="M585.5,385.1h-38.6v-20.6h-0.9c-5.1,8.6-11.8,14.8-20,18.6c-8.2,3.8-16.6,5.7-25.1,5.7
+			c-10.9,0-19.8-1.4-26.7-4.3c-7-2.9-12.4-6.9-16.4-12.1c-4-5.2-6.8-11.6-8.4-19.1c-1.6-7.5-2.4-15.9-2.4-25v-90.9h40.6v83.4
+			c0,12.2,1.9,21.3,5.7,27.3c3.8,6,10.6,9,20.3,9c11,0,19.1-3.3,24-9.9c5-6.6,7.4-17.4,7.4-32.4v-77.4h40.6V385.1z"/>
+	</g>
+	<polygon fill="#A41E22" points="730.8,296.2 730.7,290.5 781.9,237.3 829.9,237.3 774.2,291.6 836.2,385.1 787,385.1 	"/>
+	<path fill="#A41E22" d="M843.6,282.8c0.6-9.5,3-17.4,7.2-23.7c4.2-6.3,9.5-11.3,16-15.1c6.5-3.8,13.8-6.5,21.9-8.1
+		c8.1-1.6,16.2-2.4,24.4-2.4c7.4,0,15,0.5,22.6,1.6c7.6,1.1,14.6,3.1,20.9,6.1c6.3,3.1,11.4,7.3,15.4,12.7c4,5.4,6,12.6,6,21.6v76.9
+		c0,6.7,0.4,13.1,1.1,19.1c0.8,6.1,2.1,10.7,4,13.7h-41.2c-0.8-2.3-1.4-4.6-1.9-7c-0.5-2.4-0.8-4.8-1-7.3
+		c-6.5,6.7-14.1,11.3-22.9,14c-8.8,2.7-17.7,4-26.9,4c-7,0-13.6-0.9-19.7-2.6c-6.1-1.7-11.4-4.4-16-8c-4.6-3.6-8.2-8.2-10.7-13.7
+		c-2.6-5.5-3.9-12.1-3.9-19.7c0-8.4,1.5-15.3,4.4-20.7c3-5.4,6.8-9.8,11.4-13c4.7-3.2,10-5.7,16-7.3c6-1.6,12-2.9,18.1-3.9
+		c6.1-0.9,12.1-1.7,18-2.3c5.9-0.6,11.1-1.4,15.7-2.6c4.6-1.1,8.2-2.8,10.9-5c2.7-2.2,3.9-5.4,3.7-9.6c0-4.4-0.7-7.9-2.2-10.4
+		c-1.4-2.6-3.3-4.6-5.7-6c-2.4-1.4-5.1-2.4-8.3-2.9c-3.1-0.5-6.5-0.7-10.1-0.7c-8,0-14.3,1.7-18.9,5.1c-4.6,3.4-7.2,9.1-8,17.1
+		H843.6z M937.4,312.8c-1.7,1.5-3.9,2.7-6.4,3.6c-2.6,0.9-5.3,1.6-8.3,2.2c-3,0.6-6,1-9.3,1.4c-3.2,0.4-6.5,0.9-9.7,1.4
+		c-3,0.6-6,1.3-9,2.3c-3,1-5.5,2.2-7.7,3.9c-2.2,1.6-4,3.7-5.3,6.1c-1.3,2.5-2,5.6-2,9.4c0,3.6,0.7,6.7,2,9.1
+		c1.3,2.5,3.1,4.4,5.4,5.9c2.3,1.4,5,2.4,8,3c3.1,0.6,6.2,0.9,9.4,0.9c8,0,14.2-1.3,18.6-4c4.4-2.7,7.6-5.9,9.7-9.6
+		c2.1-3.7,3.4-7.5,3.9-11.3c0.5-3.8,0.7-6.9,0.7-9.1V312.8z"/>
+	<path fill="#A41E22" d="M1004.2,237.3h38.6v20.6h0.9c5.1-8.6,11.8-14.8,20-18.7c8.2-3.9,16.6-5.9,25.1-5.9
+		c10.9,0,19.8,1.5,26.7,4.4c7,3,12.4,7.1,16.4,12.3c4,5.2,6.8,11.6,8.4,19.1c1.6,7.5,2.4,15.9,2.4,25v90.9h-40.6v-83.4
+		c0-12.2-1.9-21.3-5.7-27.3c-3.8-6-10.6-9-20.3-9c-11,0-19,3.3-24,9.9c-5,6.6-7.4,17.4-7.4,32.4v77.4h-40.6V237.3z"/>
+	<g>
+		<path fill="#A41E22" d="M612.4,211.8v173.2h40.6V234.2C639.9,226.2,626.4,218.7,612.4,211.8z"/>
+	</g>
+	<path fill="#A41E22" d="M198.4,219.2c23.5-68.9,164.2-94.2,314.1-56.4c90,22.6,163.5,66.5,211.5,109.9
+		C702.3,215.1,596.7,133.1,451.2,105c-164.5-31.8-326.7-3.9-346.8,69.1c-14.5,52.7,49.2,114.5,147.7,156.7
+		C207.8,295,186.3,254.8,198.4,219.2z"/>
+	<g>
+		<path fill="#A41E22" d="M724.2,247.6V181h-40.6v20.2C700.9,216.7,714.6,232.4,724.2,247.6z"/>
+	</g>
+</g>
+<path fill="#A41E22" d="M1186.1,177.7c-3.5,0-6.4,2.9-6.4,6.4v198.7c0,3.5,2.9,6.4,6.4,6.4c3.5,0,6.4-2.9,6.4-6.4V184.2
+	C1192.5,180.6,1189.7,177.7,1186.1,177.7z"/>
+<path fill="#A41E22" d="M1532.8,181.1h-287.5c-7.9,0-14.4,6.4-14.4,14.4v115.4c0,25.8,15.7,48.8,39.5,58.4c30.3,12.3,82,28,104,34.5
+	c6.8,2,14.1,2,21,0.1c23.1-6.6,78.5-22.8,111.1-35.2c24.5-9.3,40.6-32.7,40.6-58.9h0.1V195.5
+	C1547.3,187.6,1540.9,181.1,1532.8,181.1z M1373.2,323.1c-3.1,5.3-7.2,9.6-12.3,12.8c-5,3.2-10.9,5.6-17.4,6.9
+	c-6.5,1.4-13.2,2.1-20.1,2.1c-7.3,0-14.1-0.9-20.5-2.5c-6.5-1.6-12.2-4.3-17.2-7.9c-5-3.6-9-8.2-12-13.8c-3-5.6-4.5-12.4-4.5-20.4
+	h32.6v0.2c0.3,7.4,2.7,12.4,6.8,15.2c4.2,2.8,9.8,4.2,16.8,4.2c2.5,0,4.9-0.2,7.3-0.7c2.4-0.4,4.5-1.2,6.4-2.1c1.8-1,3.4-2.4,4.6-4
+	c1.2-1.6,1.7-3.6,1.7-6c0-2.8-1.1-5-3.1-6.8c-2-1.7-4.7-3.3-8.1-4.6c-3.4-1.3-7.2-2.5-11.4-3.4c-4.3-1-8.7-2.1-13.2-3.4
+	c-4.4-1.3-8.9-2.8-13.2-4.6c-4.4-1.7-8.2-4-11.8-6.7c-3.4-2.8-6.2-6.1-8.4-10.2c-2.1-4.1-3.2-8.9-3.2-14.6c0-6.7,1.5-12.6,4.6-17.4
+	c3.1-4.8,7.1-8.8,12-11.8s10.4-5.2,16.5-6.6c6.1-1.4,12-2.1,17.8-2.1c6.2,0,12.3,0.7,18.3,2.4c6,1.6,11.3,4,16,7.3
+	c4.7,3.3,8.4,7.5,11.3,12.5c2.9,5,4.4,11.1,4.4,18.1h-32.5c0.1-2.8-0.4-5.1-1.6-7.1c-1.2-1.9-2.7-3.4-4.6-4.6
+	c-1.9-1.2-4.1-2-6.5-2.6c-2.5-0.5-4.9-0.7-7.4-0.7c-1.7,0-3.5,0.2-5.4,0.5c-1.8,0.3-3.5,1-5,1.7c-1.5,0.9-2.8,1.9-3.7,3.2
+	c-1,1.4-1.5,3.1-1.5,5.1c0,2.5,1.1,4.4,3.1,6c2,1.5,4.8,2.9,8.2,4.1c3.4,1.2,7.3,2.2,11.6,3.1c4.3,1,8.8,2,13.2,3.3
+	c4.6,1.3,9,2.8,13.2,4.6c4.3,1.8,8.1,4.1,11.5,6.8c3.4,2.8,6.1,6.1,8.2,10.2c2.1,4.1,3.1,8.9,3.1,14.4
+	C1377.8,311,1376.3,317.6,1373.2,323.1z M1467.8,248c-4.5-3.3-10.2-4.9-17.1-4.9c-5.2,0-9.7,1.1-13.4,3.1c-3.6,2.1-6.6,4.9-9,8.4
+	c-2.4,3.5-4.1,7.5-5,11.9c-1.1,4.4-1.6,9-1.6,13.7c0,4.7,0.5,9.2,1.6,13.7c1.1,4.4,2.8,8.4,5,11.9c2.4,3.5,5.3,6.3,9,8.4
+	c3.6,2.1,8.1,3.1,13.4,3.1c7.7,0,13.7-2,18-6.1c4.3-4.1,6.6-9.7,7.3-17h32.5c-0.4,8-2.2,15.3-5.2,21.6c-3,6.3-7.1,11.8-12.1,16.1
+	c-5,4.4-10.9,7.7-17.6,9.9c-6.7,2.2-14.1,3.4-22,3.4c-9.4,0-18.1-1.7-25.8-5c-7.7-3.4-14.2-8-19.7-13.9c-5.4-5.9-9.6-12.7-12.5-20.6
+	c-2.9-7.9-4.4-16.3-4.4-25.4s1.5-17.5,4.4-25.4c2.9-7.9,7.1-14.7,12.5-20.6c5.4-5.9,12-10.5,19.7-13.9c7.7-3.4,16.2-5,25.8-5
+	c6.7,0,13.5,1.1,20.2,3.1c6.7,2.1,12.7,5.1,18.1,9.2c5.3,4.1,9.7,9,13.2,14.9c3.4,5.9,5.2,12.6,5.6,20h-32.6v-0.1
+	C1474.9,256.1,1472.3,251.3,1467.8,248z"/>
+<g id="TM_2_">
+	<path fill="#A41E22" d="M1586.2,186.8h-7.5v19.6h-6.6v-19.6h-7.5v-5.6h21.6L1586.2,186.8L1586.2,186.8z"/>
+	<path fill="#A41E22" d="M1589.1,181.2h9.7l4.3,16.8h0.1l4.3-16.8h9.7v25.2h-6.1v-19.2h-0.1l-5.3,19.2h-5l-5.3-19.2h-0.1v19.2h-6.1
+		V181.2L1589.1,181.2z"/>
+</g>
+<g>
+	<path fill="#A41E22" d="M1159,198.5c0,3.1-0.8,6.1-2.4,8.8s-3.7,4.9-6.4,6.4c-2.7,1.6-5.6,2.3-8.8,2.3c-3.1,0-6-0.8-8.8-2.3
+		c-2.7-1.6-4.9-3.7-6.4-6.4c-1.6-2.7-2.4-5.6-2.4-8.8c0-3.1,0.8-6,2.4-8.8c1.6-2.7,3.7-4.9,6.4-6.4c2.7-1.6,5.6-2.3,8.8-2.3
+		c3.1,0,6.1,0.8,8.8,2.3c2.7,1.6,4.9,3.7,6.4,6.4C1158.2,192.4,1159,195.3,1159,198.5z M1155.6,198.5c0-3.9-1.4-7.2-4.1-10
+		c-2.8-2.8-6.1-4.1-10-4.1c-3.9,0-7.2,1.4-10,4.1c-2.8,2.8-4.1,6.1-4.1,10s1.4,7.2,4.1,10c2.8,2.8,6.1,4.1,10,4.1
+		c3.9,0,7.2-1.4,10-4.1C1154.2,205.7,1155.6,202.4,1155.6,198.5z M1133.5,189.1h8.4c2.4,0,4.1,0.5,5.2,1.4c1.1,1,1.6,2.2,1.6,3.9
+		c0,1.3-0.4,2.3-1.2,3.3c-0.8,0.9-2.1,1.6-3.8,2c0.7,0.3,1.2,0.6,1.6,0.9c0.5,0.4,1,1.1,1.5,1.9c0,0.1,1,1.9,3,5.4h-5.5
+		c-1.8-3.6-3-5.7-3.6-6.4c-0.6-0.7-1.2-1-1.8-1c-0.1,0-0.3,0-0.6,0.1v7.4h-4.7L1133.5,189.1L1133.5,189.1z M1138.1,197h2
+		c1.3,0,2.3-0.2,2.9-0.7c0.6-0.4,0.8-1,0.8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.4-0.7-2.7-0.7h-2.2L1138.1,197L1138.1,197z"/>
+</g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-corner-alternative-a-ll.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-corner-alternative-a-ll.svg
new file mode 100644
index 0000000..e25a550
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-corner-alternative-a-ll.svg
@@ -0,0 +1,1174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vulkantexture0-corner-alternative-a-ll.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1517"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1515" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 z"
+         id="path1481-0-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.13"
+     inkscape:cx="363.68234"
+     inkscape:cy="168.13361"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3888"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="2252"
+     inkscape:window-height="1477"
+     inkscape:window-x="586"
+     inkscape:window-y="360"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false"
+     inkscape:snap-global="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <g
+       id="g3888">
+      <text
+         id="text121-6"
+         y="36.062489"
+         x="44.791519"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="44.791519"
+           id="tspan119-11"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-30"
+         y="36.062489"
+         x="63.312355"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="63.312355"
+           id="tspan119-47"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-1"
+         y="36.062489"
+         x="81.833191"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="81.833191"
+           id="tspan119-9"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-8"
+         y="36.062489"
+         x="100.35403"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="100.35403"
+           id="tspan119-7"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-4"
+         y="36.062489"
+         x="118.87486"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="118.87486"
+           id="tspan119-0"
+           sodipodi:role="line">4</tspan></text>
+      <text
+         id="text121-7"
+         y="36.062489"
+         x="137.39569"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="137.39569"
+           id="tspan119-8"
+           sodipodi:role="line">5</tspan></text>
+      <text
+         id="text121-79"
+         y="36.062489"
+         x="155.91653"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="155.91653"
+           id="tspan119-16"
+           sodipodi:role="line">6</tspan></text>
+      <text
+         id="text121-31"
+         y="36.062489"
+         x="174.43736"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="36.062489"
+           x="174.43736"
+           id="tspan119-09"
+           sodipodi:role="line">7</tspan></text>
+      <text
+         id="text121-3-7-3"
+         y="37.611748"
+         x="110.83607"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+           y="37.611748"
+           x="110.83607"
+           id="tspan119-1-8-7"
+           sodipodi:role="line">i</tspan></text>
+      <text
+         id="text121-09-74"
+         y="45.537884"
+         x="28.097963"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="45.537884"
+           x="28.097963"
+           id="tspan119-67-18"
+           sodipodi:role="line">0.0</tspan></text>
+      <text
+         id="text121-09-74-5"
+         y="45.538918"
+         x="178.39691"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="45.538918"
+           x="178.39691"
+           id="tspan119-67-18-0"
+           sodipodi:role="line">7.0</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path972"
+         d="m 46.370385,43.993174 h 62.452355 m 4.6261,2e-6 h 62.45235"
+         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483-7)" />
+      <text
+         id="text121-3-7-3-3"
+         y="45.122406"
+         x="110.86915"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+           y="45.122406"
+           x="110.86915"
+           id="tspan119-1-8-7-2"
+           sodipodi:role="line">u</tspan></text>
+      <text
+         id="text121-09-74-7"
+         y="53.47538"
+         x="28.097961"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="53.47538"
+           x="28.097961"
+           id="tspan119-67-18-1"
+           sodipodi:role="line">0.0</tspan></text>
+      <text
+         id="text121-09-74-5-4"
+         y="53.476414"
+         x="178.39691"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="53.476414"
+           x="178.39691"
+           id="tspan119-67-18-0-9"
+           sodipodi:role="line">1.0</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path972-8"
+         d="m 46.370382,51.944306 h 62.452358 m 4.6261,2e-6 h 62.45235"
+         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend-0)" />
+      <text
+         id="text121-3-7-3-3-5"
+         y="53.059902"
+         x="110.86914"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+           y="53.059902"
+           x="110.86914"
+           id="tspan119-1-8-7-2-2"
+           sodipodi:role="line">s</tspan></text>
+      <g
+         id="g3616">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="31.562353"
+           y="-32.729183"
+           id="text121"><tspan
+             sodipodi:role="line"
+             id="tspan119"
+             x="31.562353"
+             y="-32.729183"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">3</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="31.562353"
+           y="-14.208344"
+           id="text121-3"><tspan
+             sodipodi:role="line"
+             id="tspan119-1"
+             x="31.562353"
+             y="-14.208344"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">2</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="31.562353"
+           y="4.3124895"
+           id="text121-0"><tspan
+             sodipodi:role="line"
+             id="tspan119-4"
+             x="31.562353"
+             y="4.3124895"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="31.562353"
+           y="22.833323"
+           id="text121-33"><tspan
+             sodipodi:role="line"
+             id="tspan119-6"
+             x="31.562353"
+             y="22.833323"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           x="31.790766"
+           y="-5.1587672"
+           id="text121-3-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8"
+             x="31.790766"
+             y="-5.1587672"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">j</tspan></text>
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415-4)"
+         d="m 138.95715,21.362502 11.90625,0"
+         id="path2429-6"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 149.99415,19.474237 h -0.38861 v -0.241846 q -0.16743,0.144694 -0.34933,0.22531 -0.1819,0.08062 -0.39481,0.08062 -0.41341,0 -0.65732,-0.318327 -0.24185,-0.318327 -0.24185,-0.882633 0,-0.293522 0.0827,-0.522966 0.0847,-0.229443 0.22738,-0.390674 0.14056,-0.157096 0.3266,-0.239778 0.1881,-0.08268 0.3886,-0.08268 0.1819,0 0.32246,0.04548 0.14056,0.04547 0.29559,0.12609 v -0.107487 h 0.38861 z m -0.38861,-0.568441 v -1.314648 q -0.15709,-0.07028 -0.28112,-0.101286 -0.12402,-0.03307 -0.27078,-0.03307 -0.3266,0 -0.5085,0.227377 -0.1819,0.227376 -0.1819,0.644921 0,0.411345 0.14056,0.626319 0.14056,0.212907 0.45062,0.212907 0.16537,0 0.33486,-0.07235 0.1695,-0.07441 0.31626,-0.19017 z"
+         style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
+         id="path1089"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="translate(0,-0.5291654)"
+         id="g3789">
+        <path
+           style="fill:none;stroke:#ff0000;stroke-width:0.30418205px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
+           d="M 138.6988,21.49061 65.777117,3.8028339"
+           id="path1842"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <g
+           id="g3589"
+           transform="matrix(1,0,0,-1,3.1750002,24.485338)">
+          <path
+             d="m 100.72287,12.249991 h -0.34236 q -0.14534,0.235774 -0.239,0.510305 -0.0937,0.274531 -0.0937,0.573286 0,0.306828 0.0743,0.591048 0.0743,0.285836 0.21801,0.561981 0.13726,0.261613 0.32782,0.495772 0.19217,0.234158 0.4231,0.445708 h 0.36496 v -0.01616 q -0.18409,-0.135656 -0.38434,-0.34397 -0.19863,-0.208322 -0.3585,-0.460244 -0.16311,-0.256767 -0.26646,-0.566827 -0.10174,-0.308444 -0.10174,-0.6508 0,-0.350429 0.10174,-0.637879 0.10173,-0.289066 0.27614,-0.486082 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1095"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 103.46979,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1097"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 104.70195,15.336043 -0.0727,-0.314903 h -0.34236 l 0.0727,0.314903 z m -0.16148,-0.616888 -0.41665,-1.80383 h -0.30359 l 0.41664,1.80383 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1099"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 105.47872,13.375569 -0.70087,-1.057753 h -0.23577 l 0.52322,1.057753 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1101"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 107.98502,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1103"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 109.38352,15.02114 h -0.34559 l 0.0727,0.314903 h 0.34559 z m -0.51677,-2.149416 q -0.0727,-0.313289 -0.25838,-0.476392 -0.1841,-0.163105 -0.45863,-0.163105 -0.0646,0 -0.16956,0.01297 -0.10497,0.01297 -0.17279,0.0323 l 0.063,0.276146 h 0.0161 q 0.0468,-0.021 0.11142,-0.04038 0.063,-0.02098 0.14696,-0.02098 0.11304,0 0.18894,0.03553 0.0775,0.03391 0.12596,0.10336 0.0468,0.06783 0.0775,0.169562 0.0307,0.100125 0.0549,0.209936 l 0.33751,1.464705 h -0.37627 l 0.0565,0.243847 h 0.6831 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1105"
+             inkscape:connector-curvature="0" />
+          <path
+             d="m 110.65766,14.344502 q 0,-0.305214 -0.0759,-0.597509 -0.0759,-0.29068 -0.2164,-0.555522 -0.1405,-0.264841 -0.33267,-0.500614 -0.19217,-0.237389 -0.41825,-0.440866 h -0.36497 v 0.01616 q 0.18572,0.138875 0.38273,0.342357 0.19863,0.201861 0.36012,0.461857 0.1841,0.297139 0.27615,0.595894 0.092,0.298755 0.092,0.621731 0,0.343972 -0.10173,0.633038 -0.10012,0.29068 -0.27614,0.490925 v 0.01616 h 0.34235 q 0.14372,-0.234158 0.23739,-0.508689 0.0953,-0.272916 0.0953,-0.5749 z"
+             style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+             id="path1107"
+             inkscape:connector-curvature="0" />
+        </g>
+      </g>
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="42.333332"
+         d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="42.333332"
+         id="path4517"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="52.916668"
+         d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="52.916668"
+         id="path4517-7"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="63.5"
+         d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="63.5"
+         id="path4517-78"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="74.083336"
+         d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="74.083336"
+         id="path4517-7-9"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="84.666664"
+         d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="84.666664"
+         id="path4517-0"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="95.25"
+         d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="95.25"
+         id="path4517-7-0"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="105.83334"
+         d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="105.83334"
+         id="path4517-1"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="116.41666"
+         d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="21.833345"
+         cx="116.41666"
+         id="path4517-7-7"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4001"
+         d="M 46.354042,21.403099 H 175.91759 l 2e-5,-55.744758 H 46.35405 l -8e-6,55.744758"
+         style="fill:none;stroke:#808080;stroke-width:0.21462008;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3999"
+         d="m 64.882195,21.263491 7e-6,-55.597833"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3997"
+         d="m 83.4101,-34.334342 -7e-6,55.597833"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3995"
+         d="m 101.938,21.263491 2e-5,-55.597833"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3993"
+         d="m 120.46594,-34.334342 -1e-5,55.597833"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3991"
+         d="M 138.99384,21.263491 V -34.334342"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3989"
+         d="m 157.52174,-34.334342 -1e-5,55.597833"
+         style="fill:none;stroke:#808080;stroke-width:0.22925246;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3985"
+         d="M 175.63671,-15.804515 H 46.370365"
+         style="fill:none;stroke:#808080;stroke-width:0.24724816;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3983"
+         d="M 46.370358,2.733655 H 175.63669"
+         style="fill:none;stroke:#808080;stroke-width:0.24724816;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="42.333332"
+         d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="42.333332"
+         id="path4517-6"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="52.916668"
+         d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="52.916668"
+         id="path4517-7-3"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="63.5"
+         d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="63.5"
+         id="path4517-78-9"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="74.083336"
+         d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="74.083336"
+         id="path4517-7-9-1"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="84.666664"
+         d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="84.666664"
+         id="path4517-0-6"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="95.25"
+         d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="95.25"
+         id="path4517-7-0-8"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="105.83334"
+         d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="105.83334"
+         id="path4517-1-5"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="116.41665"
+         d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="32.416679"
+         cx="116.41665"
+         id="path4517-7-7-5"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="42.333332"
+         d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="42.333332"
+         id="path4517-4"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="52.916668"
+         d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="52.916668"
+         id="path4517-7-2"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="63.5"
+         d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="63.5"
+         id="path4517-78-3"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="74.083336"
+         d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="74.083336"
+         id="path4517-7-9-0"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="84.666664"
+         d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="84.666664"
+         id="path4517-0-9"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="95.25"
+         d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="95.25"
+         id="path4517-7-0-1"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="105.83334"
+         d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="105.83334"
+         id="path4517-1-9"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="116.41665"
+         d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+         r="0.52778977"
+         cy="43.000011"
+         cx="116.41665"
+         id="path4517-7-7-7"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="42.333332"
+         d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="42.333332"
+         id="path4517-14"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="52.916668"
+         d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="52.916668"
+         id="path4517-7-4"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="63.5"
+         d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="63.5"
+         id="path4517-78-7"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="74.083336"
+         d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="74.083336"
+         id="path4517-7-9-8"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="84.666664"
+         d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="84.666664"
+         id="path4517-0-7"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="95.25"
+         d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="95.25"
+         id="path4517-7-0-9"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="105.83334"
+         d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="105.83334"
+         id="path4517-1-4"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <circle
+         transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)"
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="116.41665"
+         d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+         r="0.52778977"
+         cy="53.583344"
+         cx="116.41665"
+         id="path4517-7-7-52"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path3054-3"
+         d="M 150.88949,7.2579058 V 21.607707"
+         style="fill:none;stroke:#808080;stroke-width:0.16467975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3054"
+         d="m 138.98324,9.3395719 h 14.55208"
+         style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="scale(1,-1)"
+         y="-9.6041584"
+         x="58.020679"
+         height="37.041668"
+         width="37.041668"
+         id="rect1609"
+         style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0" />
+      <rect
+         transform="scale(1,-1)"
+         y="-28.124992"
+         x="132.10402"
+         height="37.041668"
+         width="37.041668"
+         id="rect1609-6"
+         style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0" />
+      <path
+         d="m 142.6419,12.250012 q 0,0.417545 -0.27906,0.690397 -0.27698,0.272852 -0.70073,0.272852 -0.1633,0 -0.3452,-0.04547 -0.1819,-0.04547 -0.31212,-0.132291 v 0.983919 h -0.38861 v -3.079917 q 0,-0.463021 0.26045,-0.725537 0.26252,-0.2625172 0.72347,-0.2625172 0.18603,0 0.339,0.04548 0.15503,0.04341 0.27698,0.1384922 0.11783,0.08888 0.1881,0.231511 0.0703,0.142627 0.0703,0.330729 0,0.262516 -0.14469,0.458887 -0.14262,0.194303 -0.40514,0.270784 v 0.03514 q 0.32866,0.05374 0.52296,0.26045 0.19431,0.204639 0.19431,0.5271 z m -0.40101,-0.01034 q 0,-0.183969 -0.0724,-0.297657 -0.0703,-0.115755 -0.19017,-0.179834 -0.12196,-0.06615 -0.27285,-0.08888 -0.1509,-0.02274 -0.30179,-0.02274 h -0.0744 v -0.33073 h 0.0744 q 0.13642,0 0.27078,-0.02894 0.13436,-0.03101 0.21497,-0.09302 0.0951,-0.07028 0.14056,-0.171566 0.0475,-0.101286 0.0475,-0.276986 0,-0.23151 -0.14262,-0.351399 -0.14263,-0.11989 -0.36794,-0.11989 -0.1509,0 -0.25838,0.05581 -0.10749,0.05374 -0.1757,0.144694 -0.0661,0.09095 -0.0971,0.212907 -0.031,0.119889 -0.031,0.248047 v 1.781804 q 0.13642,0.07855 0.29145,0.111621 0.15503,0.03101 0.30386,0.03101 0.30799,0 0.47336,-0.161231 0.16743,-0.163297 0.16743,-0.46302 z"
+         style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
+         id="path1092"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cc"
+         style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415)"
+         d="m 138.98319,21.245824 0,-11.9062496"
+         id="path2429"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g3740">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="138.71861"
+           y="6.2589712"
+           id="text5070-2-1"><tspan
+             sodipodi:role="line"
+             id="tspan5068-0-6"
+             x="138.71861"
+             y="6.2589712"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+               id="tspan7821"> i0j1</tspan></tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="157.23944"
+           y="6.2589712"
+           id="text5070-2-1-7"><tspan
+             y="6.2589712"
+             x="157.23944"
+             id="tspan4060"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0"> i1j1</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="138.71861"
+           y="24.779802"
+           id="text5070-2-1-0"><tspan
+             y="24.779802"
+             x="138.71861"
+             id="tspan4064"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0"> i0j0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="157.23944"
+           y="24.779802"
+           id="text5070-2-1-2"><tspan
+             y="24.779802"
+             x="157.23944"
+             id="tspan4054"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0"> i1j0</tspan><tspan
+             y="26.980595"
+             x="157.23944"
+             id="tspan4056"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0"> </tspan></text>
+      </g>
+      <g
+         id="g3768">
+        <circle
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path4517-0-8"
+           cx="150.62486"
+           cy="-22.145849"
+           r="0.92363214"
+           d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
+           sodipodi:cx="150.62486"
+           sodipodi:cy="-22.145849"
+           sodipodi:rx="0.92363214"
+           sodipodi:ry="0.92363214"
+           transform="matrix(1,0,0,-1,0,-12.541691)" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="152.21477"
+           y="10.830611"
+           id="text5070-2"><tspan
+             sodipodi:role="line"
+             id="tspan5068-0"
+             x="152.21477"
+             y="10.830611"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
+      </g>
+      <g
+         id="g3754">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="64.635269"
+           y="-16.495201"
+           id="text5070-2-1-06"><tspan
+             y="-16.495201"
+             x="64.635269"
+             id="tspan4046"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0.34999999"> i0j1'</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="83.156105"
+           y="-16.495201"
+           id="text5070-2-1-25"><tspan
+             y="-16.495201"
+             x="83.156105"
+             id="tspan4048"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0.34999999"> i1j1'</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="64.635269"
+           y="2.0256376"
+           id="text5070-2-1-75"><tspan
+             y="2.0256376"
+             x="64.635269"
+             id="tspan4044"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0.34999999"> i0j0'</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="83.156105"
+           y="2.0256376"
+           id="text5070-2-1-3"><tspan
+             y="2.0256376"
+             x="83.156105"
+             id="tspan4050"
+             sodipodi:role="line"
+             style="font-size:3.52777696px;line-height:0.34999999"> i1j0'</tspan></text>
+      </g>
+      <text
+         id="text121-09"
+         y="-35.953781"
+         x="17.576641"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="-35.953781"
+           x="17.576641"
+           id="tspan119-67"
+           sodipodi:role="line">3.0</tspan></text>
+      <text
+         id="text121-09-7"
+         y="25.429537"
+         x="17.514629"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           y="25.429537"
+           x="17.514629"
+           id="tspan119-67-1"
+           sodipodi:role="line">0.0</tspan></text>
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483)"
+         d="M 20.993481,21.52766 V -4.4080825 m 1e-6,-3.990115 V -34.333941"
+         id="path1473"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text121-3-7-8"
+         y="-5.1587696"
+         x="20.479824"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+           y="-5.1587696"
+           x="20.479824"
+           id="tspan119-1-8-3"
+           sodipodi:role="line">v</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         x="6.9933071"
+         y="-35.953781"
+         id="text1601-4"><tspan
+           sodipodi:role="line"
+           id="tspan1599-1"
+           x="6.9933071"
+           y="-35.953781"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1.0</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+         x="6.9312954"
+         y="25.429537"
+         id="text1605-6"><tspan
+           sodipodi:role="line"
+           id="tspan1603-7"
+           x="6.9312954"
+           y="25.429537"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0.0</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path1607-6"
+         d="M 10.381221,21.52766 V -4.4080825 m 10e-7,-3.990115 V -34.333941"
+         style="fill:none;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker1483-7)" />
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+         x="9.8964901"
+         y="-5.1587696"
+         id="text1611-4"><tspan
+           sodipodi:role="line"
+           id="tspan1609-3"
+           x="9.8964901"
+           y="-5.1587696"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">t</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-ll.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-ll.svg
new file mode 100644
index 0000000..765293d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0-ll.svg
@@ -0,0 +1,1215 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vulkantexture0-ll.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1517"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1515" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1132"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="409.64232"
+     inkscape:cy="185.01098"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3740"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1057"
+     inkscape:window-x="1928"
+     inkscape:window-y="31"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false"
+     inkscape:snap-global="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <g
+       id="g3888">
+      <g
+         id="g3699">
+        <g
+           id="g3675">
+          <text
+             id="text121-6"
+             y="36.062489"
+             x="44.791519"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="44.791519"
+               id="tspan119-11"
+               sodipodi:role="line">0</tspan></text>
+          <text
+             id="text121-30"
+             y="36.062489"
+             x="63.312355"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="63.312355"
+               id="tspan119-47"
+               sodipodi:role="line">1</tspan></text>
+          <text
+             id="text121-1"
+             y="36.062489"
+             x="81.833191"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="81.833191"
+               id="tspan119-9"
+               sodipodi:role="line">2</tspan></text>
+          <text
+             id="text121-8"
+             y="36.062489"
+             x="100.35403"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="100.35403"
+               id="tspan119-7"
+               sodipodi:role="line">3</tspan></text>
+          <text
+             id="text121-4"
+             y="36.062489"
+             x="118.87486"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="118.87486"
+               id="tspan119-0"
+               sodipodi:role="line">4</tspan></text>
+          <text
+             id="text121-7"
+             y="36.062489"
+             x="137.39569"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="137.39569"
+               id="tspan119-8"
+               sodipodi:role="line">5</tspan></text>
+          <text
+             id="text121-79"
+             y="36.062489"
+             x="155.91653"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="155.91653"
+               id="tspan119-16"
+               sodipodi:role="line">6</tspan></text>
+          <text
+             id="text121-31"
+             y="36.062489"
+             x="174.43736"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="36.062489"
+               x="174.43736"
+               id="tspan119-09"
+               sodipodi:role="line">7</tspan></text>
+          <text
+             id="text121-3-7-3"
+             y="37.611748"
+             x="110.83607"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+               y="37.611748"
+               x="110.83607"
+               id="tspan119-1-8-7"
+               sodipodi:role="line">i</tspan></text>
+        </g>
+        <g
+           id="g3666">
+          <text
+             id="text121-09-74"
+             y="45.537884"
+             x="28.097963"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="45.537884"
+               x="28.097963"
+               id="tspan119-67-18"
+               sodipodi:role="line">0.0</tspan></text>
+          <text
+             id="text121-09-74-5"
+             y="45.538918"
+             x="186.86346"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="45.538918"
+               x="186.86346"
+               id="tspan119-67-18-0"
+               sodipodi:role="line">8.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path972"
+             d="m 36.854018,43.999991 h 71.437502 m 5.29167,2e-6 h 71.4375"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+          <text
+             id="text121-3-7-3-3"
+             y="45.122406"
+             x="110.86915"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+               y="45.122406"
+               x="110.86915"
+               id="tspan119-1-8-7-2"
+               sodipodi:role="line">u</tspan></text>
+        </g>
+        <g
+           id="g3657">
+          <text
+             id="text121-09-74-7"
+             y="53.47538"
+             x="28.097961"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="53.47538"
+               x="28.097961"
+               id="tspan119-67-18-1"
+               sodipodi:role="line">0.0</tspan></text>
+          <text
+             id="text121-09-74-5-4"
+             y="53.476414"
+             x="186.86346"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="53.476414"
+               x="186.86346"
+               id="tspan119-67-18-0-9"
+               sodipodi:role="line">1.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path972-8"
+             d="m 36.854015,51.937489 h 71.437505 m 5.29167,2e-6 h 71.4375"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+          <text
+             id="text121-3-7-3-3-5"
+             y="53.059902"
+             x="110.86914"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+               y="53.059902"
+               x="110.86914"
+               id="tspan119-1-8-7-2-2"
+               sodipodi:role="line">s</tspan></text>
+        </g>
+      </g>
+      <g
+         id="g3628">
+        <g
+           id="g3616">
+          <text
+             id="text121"
+             y="-32.729183"
+             x="31.562353"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="-32.729183"
+               x="31.562353"
+               id="tspan119"
+               sodipodi:role="line">3</tspan></text>
+          <text
+             id="text121-3"
+             y="-14.208344"
+             x="31.562353"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="-14.208344"
+               x="31.562353"
+               id="tspan119-1"
+               sodipodi:role="line">2</tspan></text>
+          <text
+             id="text121-0"
+             y="4.3124895"
+             x="31.562353"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="4.3124895"
+               x="31.562353"
+               id="tspan119-4"
+               sodipodi:role="line">1</tspan></text>
+          <text
+             id="text121-33"
+             y="22.833323"
+             x="31.562353"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="22.833323"
+               x="31.562353"
+               id="tspan119-6"
+               sodipodi:role="line">0</tspan></text>
+          <text
+             id="text121-3-7"
+             y="-5.1587672"
+             x="31.790766"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+               y="-5.1587672"
+               x="31.790766"
+               id="tspan119-1-8"
+               sodipodi:role="line">j</tspan></text>
+        </g>
+        <g
+           id="g3607">
+          <text
+             id="text121-09"
+             y="-44.420456"
+             x="17.576641"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="-44.420456"
+               x="17.576641"
+               id="tspan119-67"
+               sodipodi:role="line">4.0</tspan></text>
+          <text
+             id="text121-09-7"
+             y="34.954548"
+             x="17.514629"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+               y="34.954548"
+               x="17.514629"
+               id="tspan119-67-1"
+               sodipodi:role="line">0.0</tspan></text>
+          <path
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+             d="M 20.979018,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
+             id="path1473"
+             inkscape:connector-curvature="0" />
+          <text
+             id="text121-3-7-8"
+             y="-5.1587677"
+             x="20.479824"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+               y="-5.1587677"
+               x="20.479824"
+               id="tspan119-1-8-3"
+               sodipodi:role="line">v</tspan></text>
+        </g>
+        <g
+           id="g3598">
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             x="6.9933071"
+             y="-44.420456"
+             id="text1601-4"><tspan
+               sodipodi:role="line"
+               id="tspan1599-1"
+               x="6.9933071"
+               y="-44.420456"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1.0</tspan></text>
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             x="6.9312954"
+             y="34.954548"
+             id="text1605-6"><tspan
+               sodipodi:role="line"
+               id="tspan1603-7"
+               x="6.9312954"
+               y="34.954548"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path1607-6"
+             d="M 10.395684,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+          <text
+             xml:space="preserve"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+             x="9.8964901"
+             y="-5.1587677"
+             id="text1611-4"><tspan
+               sodipodi:role="line"
+               id="tspan1609-3"
+               x="9.8964901"
+               y="-5.1587677"
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">t</tspan></text>
+        </g>
+      </g>
+      <g
+         id="g3695">
+        <path
+           inkscape:connector-curvature="0"
+           id="path2429-6"
+           d="m 129.43215,30.887503 11.90625,0"
+           style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415-4)"
+           sodipodi:nodetypes="cc" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path1089"
+           style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
+           d="m 145.23168,32.17424 h -0.38861 v -0.241846 q -0.16743,0.144694 -0.34933,0.22531 -0.1819,0.08062 -0.39481,0.08062 -0.41341,0 -0.65732,-0.318327 -0.24185,-0.318327 -0.24185,-0.882633 0,-0.293522 0.0827,-0.522966 0.0847,-0.229443 0.22738,-0.390674 0.14056,-0.157096 0.3266,-0.239778 0.1881,-0.08268 0.3886,-0.08268 0.1819,0 0.32246,0.04548 0.14056,0.04547 0.29559,0.12609 v -0.107487 h 0.38861 z m -0.38861,-0.568441 v -1.314648 q -0.15709,-0.07028 -0.28112,-0.101286 -0.12402,-0.03307 -0.27078,-0.03307 -0.3266,0 -0.5085,0.227377 -0.1819,0.227376 -0.1819,0.644921 0,0.411345 0.14056,0.626319 0.14056,0.212907 0.45062,0.212907 0.16537,0 0.33486,-0.07235 0.1695,-0.07441 0.31626,-0.19017 z" />
+      </g>
+      <g
+         id="g3800">
+        <g
+           id="g3789">
+          <path
+             sodipodi:nodetypes="cc"
+             inkscape:connector-curvature="0"
+             id="path1842"
+             d="M 138.6988,21.49061 65.777117,3.8028339"
+             style="fill:none;stroke:#ff0000;stroke-width:0.30418205px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)" />
+          <g
+             transform="matrix(1,0,0,-1,3.1750002,24.485338)"
+             id="g3589">
+            <path
+               inkscape:connector-curvature="0"
+               id="path1095"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 100.72287,12.249991 h -0.34236 q -0.14534,0.235774 -0.239,0.510305 -0.0937,0.274531 -0.0937,0.573286 0,0.306828 0.0743,0.591048 0.0743,0.285836 0.21801,0.561981 0.13726,0.261613 0.32782,0.495772 0.19217,0.234158 0.4231,0.445708 h 0.36496 v -0.01616 q -0.18409,-0.135656 -0.38434,-0.34397 -0.19863,-0.208322 -0.3585,-0.460244 -0.16311,-0.256767 -0.26646,-0.566827 -0.10174,-0.308444 -0.10174,-0.6508 0,-0.350429 0.10174,-0.637879 0.10173,-0.289066 0.27614,-0.486082 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1097"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 103.46979,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1099"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 104.70195,15.336043 -0.0727,-0.314903 h -0.34236 l 0.0727,0.314903 z m -0.16148,-0.616888 -0.41665,-1.80383 h -0.30359 l 0.41664,1.80383 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1101"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 105.47872,13.375569 -0.70087,-1.057753 h -0.23577 l 0.52322,1.057753 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1103"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 107.98502,12.915325 h -2.24146 l 1.46309,2.404569 h 0.42633 z m -0.35366,0.259997 -0.2713,1.863582 -1.13042,-1.863582 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1105"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 109.38352,15.02114 h -0.34559 l 0.0727,0.314903 h 0.34559 z m -0.51677,-2.149416 q -0.0727,-0.313289 -0.25838,-0.476392 -0.1841,-0.163105 -0.45863,-0.163105 -0.0646,0 -0.16956,0.01297 -0.10497,0.01297 -0.17279,0.0323 l 0.063,0.276146 h 0.0161 q 0.0468,-0.021 0.11142,-0.04038 0.063,-0.02098 0.14696,-0.02098 0.11304,0 0.18894,0.03553 0.0775,0.03391 0.12596,0.10336 0.0468,0.06783 0.0775,0.169562 0.0307,0.100125 0.0549,0.209936 l 0.33751,1.464705 h -0.37627 l 0.0565,0.243847 h 0.6831 z" />
+            <path
+               inkscape:connector-curvature="0"
+               id="path1107"
+               style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+               d="m 110.65766,14.344502 q 0,-0.305214 -0.0759,-0.597509 -0.0759,-0.29068 -0.2164,-0.555522 -0.1405,-0.264841 -0.33267,-0.500614 -0.19217,-0.237389 -0.41825,-0.440866 h -0.36497 v 0.01616 q 0.18572,0.138875 0.38273,0.342357 0.19863,0.201861 0.36012,0.461857 0.1841,0.297139 0.27615,0.595894 0.092,0.298755 0.092,0.621731 0,0.343972 -0.10173,0.633038 -0.10012,0.29068 -0.27614,0.490925 v 0.01616 h 0.34235 q 0.14372,-0.234158 0.23739,-0.508689 0.0953,-0.272916 0.0953,-0.5749 z" />
+          </g>
+        </g>
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517"
+           cx="42.333332"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="42.333332"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7"
+           cx="52.916668"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="52.916668"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-78"
+           cx="63.5"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="63.5"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-9"
+           cx="74.083336"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="74.083336"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-0"
+           cx="84.666664"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="84.666664"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-0"
+           cx="95.25"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="95.25"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-1"
+           cx="105.83334"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="105.83334"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-7"
+           cx="116.41666"
+           cy="21.833345"
+           r="0.52778977"
+           d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="116.41666"
+           sodipodi:cy="21.833345"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.26458335;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 36.85402,30.770821 h 148.16667 l 2e-5,-74.083337 H 36.854029 l -9e-6,74.083337 m 18.520836,0 7e-6,-74.083337 m 18.520832,0 -7e-6,74.083337 m 18.520832,0 1.4e-5,-74.083337 m 18.520836,0 -1e-5,74.083337 m 18.52084,0 v -74.083337 m 18.52083,0 -1e-5,74.083337 m 18.52082,0 2e-5,-74.083337 m 18.52085,18.52083 H 36.854029 m -7e-6,18.5208395 H 185.02069 m 0,18.5208325 H 36.854022"
+           id="path1171"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-6"
+           cx="42.333332"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="42.333332"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-3"
+           cx="52.916668"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="52.916668"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-78-9"
+           cx="63.5"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="63.5"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-9-1"
+           cx="74.083336"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="74.083336"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-0-6"
+           cx="84.666664"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="84.666664"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-0-8"
+           cx="95.25"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="95.25"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-1-5"
+           cx="105.83334"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="105.83334"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-7-5"
+           cx="116.41665"
+           cy="32.416679"
+           r="0.52778977"
+           d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="116.41665"
+           sodipodi:cy="32.416679"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-4"
+           cx="42.333332"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="42.333332"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-2"
+           cx="52.916668"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="52.916668"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-78-3"
+           cx="63.5"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="63.5"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-9-0"
+           cx="74.083336"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="74.083336"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-0-9"
+           cx="84.666664"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="84.666664"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-0-1"
+           cx="95.25"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="95.25"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-1-9"
+           cx="105.83334"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="105.83334"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-7-7"
+           cx="116.41665"
+           cy="43.000011"
+           r="0.52778977"
+           d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z"
+           sodipodi:cx="116.41665"
+           sodipodi:cy="43.000011"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-14"
+           cx="42.333332"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="42.333332"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-4"
+           cx="52.916668"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="52.916668"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-78-7"
+           cx="63.5"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="63.5"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-9-8"
+           cx="74.083336"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="74.083336"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-0-7"
+           cx="84.666664"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="84.666664"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-0-9"
+           cx="95.25"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="95.25"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-1-4"
+           cx="105.83334"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="105.83334"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="path4517-7-7-52"
+           cx="116.41665"
+           cy="53.583344"
+           r="0.52778977"
+           d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z"
+           sodipodi:cx="116.41665"
+           sodipodi:cy="53.583344"
+           sodipodi:rx="0.52778977"
+           sodipodi:ry="0.52778977"
+           transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718761)" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.16467975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 141.36444,16.782908 V 31.13271"
+           id="path3054-3"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 129.45819,18.864575 h 14.55208"
+           id="path3054"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
+           id="rect1609"
+           width="37.041668"
+           height="37.041668"
+           x="58.020679"
+           y="-9.6041584"
+           transform="scale(1,-1)" />
+        <rect
+           style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
+           id="rect1609-6"
+           width="37.041668"
+           height="37.041668"
+           x="132.10402"
+           y="-28.124992"
+           transform="scale(1,-1)" />
+        <g
+           id="g3736">
+          <path
+             d="m 130.47105,15.425011 q 0,0.417545 -0.27906,0.690397 -0.27698,0.272851 -0.70073,0.272851 -0.1633,0 -0.3452,-0.04547 -0.1819,-0.04547 -0.31212,-0.132291 v 0.983919 h -0.38861 v -3.079915 q 0,-0.463021 0.26045,-0.725537 0.26252,-0.262517 0.72347,-0.262517 0.18603,0 0.339,0.04548 0.15503,0.04341 0.27698,0.138492 0.11783,0.08888 0.1881,0.231511 0.0703,0.142627 0.0703,0.330729 0,0.262516 -0.14469,0.458887 -0.14262,0.194303 -0.40514,0.270784 v 0.03514 q 0.32866,0.05374 0.52296,0.260449 0.19431,0.204639 0.19431,0.5271 z m -0.40101,-0.01034 q 0,-0.183969 -0.0724,-0.297657 -0.0703,-0.115755 -0.19017,-0.179834 -0.12196,-0.06615 -0.27285,-0.08888 -0.1509,-0.02274 -0.30179,-0.02274 h -0.0744 v -0.330729 h 0.0744 q 0.13642,0 0.27078,-0.02894 0.13436,-0.03101 0.21497,-0.09302 0.0951,-0.07028 0.14056,-0.171566 0.0475,-0.101286 0.0475,-0.276986 0,-0.23151 -0.14262,-0.351399 -0.14263,-0.11989 -0.36794,-0.11989 -0.1509,0 -0.25838,0.05581 -0.10749,0.05374 -0.1757,0.144694 -0.0661,0.09095 -0.0971,0.212907 -0.031,0.119889 -0.031,0.248047 v 1.781803 q 0.13642,0.07855 0.29145,0.111621 0.15503,0.03101 0.30386,0.03101 0.30799,0 0.47336,-0.161231 0.16743,-0.163297 0.16743,-0.46302 z"
+             style="font-size:4.23333311px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:1.25;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal'"
+             id="path1092"
+             inkscape:connector-curvature="0" />
+          <path
+             sodipodi:nodetypes="cc"
+             style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker2415)"
+             d="m 129.45819,30.770825 0,-11.90625"
+             id="path2429"
+             inkscape:connector-curvature="0" />
+        </g>
+        <g
+           id="g3740">
+          <text
+             id="text5070-2-1"
+             y="6.2589712"
+             x="138.71861"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"
+               y="6.2589712"
+               x="138.71861"
+               id="tspan5068-0-6"
+               sodipodi:role="line"><tspan
+                 id="tspan7821"
+                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"> i0j1</tspan></tspan></text>
+          <text
+             id="text5070-2-1-7"
+             y="6.2589712"
+             x="157.23944"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4060"
+               x="157.23944"
+               y="6.2589712"
+               style="font-size:3.52777696px;line-height:1.25"> i1j1</tspan></text>
+          <text
+             id="text5070-2-1-0"
+             y="24.779802"
+             x="138.71861"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4064"
+               x="138.71861"
+               y="24.779802"
+               style="font-size:3.52777696px;line-height:1.25"> i0j0</tspan></text>
+          <text
+             id="text5070-2-1-2"
+             y="24.779802"
+             x="157.23944"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4054"
+               x="157.23944"
+               y="24.779802"
+               style="font-size:3.52777696px;line-height:1.25"> i1j0</tspan><tspan
+               sodipodi:role="line"
+               id="tspan4056"
+               x="157.23944"
+               y="29.189524"
+               style="font-size:3.52777696px;line-height:1.25"> </tspan></text>
+        </g>
+        <g
+           id="g3778">
+          <path
+             sodipodi:nodetypes="cc"
+             inkscape:connector-curvature="0"
+             id="path1063"
+             d="m 150.36028,9.868741 -8.20209,8.202084"
+             style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+          <g
+             id="g3773">
+            <circle
+               style="fill:#ff0000;fill-opacity:1;stroke:none"
+               id="path4517-0-8-5"
+               cx="141.36444"
+               cy="-31.406267"
+               r="0.92363214"
+               d="m 142.28807,-31.406267 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
+               sodipodi:cx="141.36444"
+               sodipodi:cy="-31.406267"
+               sodipodi:rx="0.92363214"
+               sodipodi:ry="0.92363214"
+               transform="matrix(1,0,0,-1,0,-12.541691)" />
+            <text
+               xml:space="preserve"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+               x="143.54691"
+               y="20.09103"
+               id="text5070"><tspan
+                 sodipodi:role="line"
+                 id="tspan5068"
+                 x="143.54691"
+                 y="20.09103"
+                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u-0.5,v-0.5)</tspan></text>
+          </g>
+          <g
+             id="g3768">
+            <circle
+               style="fill:#ff0000;fill-opacity:1;stroke:none"
+               id="path4517-0-8"
+               cx="150.62486"
+               cy="-22.145849"
+               r="0.92363214"
+               d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
+               sodipodi:cx="150.62486"
+               sodipodi:cy="-22.145849"
+               sodipodi:rx="0.92363214"
+               sodipodi:ry="0.92363214"
+               transform="matrix(1,0,0,-1,0,-12.541691)" />
+            <text
+               xml:space="preserve"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+               x="152.21477"
+               y="10.830611"
+               id="text5070-2"><tspan
+                 sodipodi:role="line"
+                 id="tspan5068-0"
+                 x="152.21477"
+                 y="10.830611"
+                 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
+          </g>
+        </g>
+        <g
+           id="g3754">
+          <text
+             id="text5070-2-1-06"
+             y="-16.495201"
+             x="64.635269"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4046"
+               x="64.635269"
+               y="-16.495201"
+               style="font-size:3.52777696px;line-height:0.34999999"> i0j1'</tspan></text>
+          <text
+             id="text5070-2-1-25"
+             y="-16.495201"
+             x="83.156105"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4048"
+               x="83.156105"
+               y="-16.495201"
+               style="font-size:3.52777696px;line-height:0.34999999"> i1j1'</tspan></text>
+          <text
+             id="text5070-2-1-75"
+             y="2.0256376"
+             x="64.635269"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4044"
+               x="64.635269"
+               y="2.0256376"
+               style="font-size:3.52777696px;line-height:0.34999999"> i0j0'</tspan></text>
+          <text
+             id="text5070-2-1-3"
+             y="2.0256376"
+             x="83.156105"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+             xml:space="preserve"><tspan
+               sodipodi:role="line"
+               id="tspan4050"
+               x="83.156105"
+               y="2.0256376"
+               style="font-size:3.52777696px;line-height:0.34999999"> i1j0'</tspan></text>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture0.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0.svg
new file mode 100644
index 0000000..b3c1d6c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture0.svg
@@ -0,0 +1,1005 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="vulkantexture0.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1517"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1515" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1132"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="409.64232"
+     inkscape:cy="244.46273"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <path
+       style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 141.36444,-24.791682 v -9.260417"
+       id="path3054-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:0.13229167;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 129.45819,-31.406266 h 14.55208"
+       id="path3054"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g1953"
+       transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         id="text121"
+         y="-32.729179"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-32.729179"
+           x="34.208187"
+           id="tspan119"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-3"
+         y="-14.208342"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-14.208342"
+           x="34.208187"
+           id="tspan119-1"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-0"
+         y="4.3124924"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="4.3124924"
+           x="34.208187"
+           id="tspan119-4"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-33"
+         y="22.833326"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="22.833326"
+           x="34.208187"
+           id="tspan119-6"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-6"
+         y="36.062492"
+         x="47.437355"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="47.437355"
+           id="tspan119-11"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-30"
+         y="36.062492"
+         x="65.958191"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="65.958191"
+           id="tspan119-47"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-1"
+         y="36.062492"
+         x="84.479027"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="84.479027"
+           id="tspan119-9"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-8"
+         y="36.062492"
+         x="102.99986"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="102.99986"
+           id="tspan119-7"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-4"
+         y="36.062492"
+         x="121.52069"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="121.52069"
+           id="tspan119-0"
+           sodipodi:role="line">4</tspan></text>
+      <text
+         id="text121-7"
+         y="36.062492"
+         x="140.04152"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="140.04152"
+           id="tspan119-8"
+           sodipodi:role="line">5</tspan></text>
+      <text
+         id="text121-79"
+         y="36.062492"
+         x="158.56236"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="158.56236"
+           id="tspan119-16"
+           sodipodi:role="line">6</tspan></text>
+      <text
+         id="text121-31"
+         y="36.062492"
+         x="177.08319"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="177.08319"
+           id="tspan119-09"
+           sodipodi:role="line">7</tspan></text>
+      <text
+         id="text121-3-7"
+         y="-5.1587644"
+         x="34.4366"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="-5.1587644"
+           x="34.4366"
+           id="tspan119-1-8"
+           sodipodi:role="line">j</tspan></text>
+      <text
+         id="text121-3-7-3"
+         y="37.611752"
+         x="113.4819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="37.611752"
+           x="113.4819"
+           id="tspan119-1-8-7"
+           sodipodi:role="line">i</tspan></text>
+      <g
+         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
+         id="g1463">
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517"
+           cx="42.333332"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7"
+           cx="52.916668"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78"
+           cx="63.5"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9"
+           cx="74.083336"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0"
+           cx="84.666664"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0"
+           cx="95.25"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1"
+           cx="105.83334"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7"
+           cx="116.41666"
+           cy="21.833345"
+           r="0.52778977" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
+           id="path1171"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-6"
+           cx="42.333332"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-3"
+           cx="52.916668"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-9"
+           cx="63.5"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-1"
+           cx="74.083336"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-6"
+           cx="84.666664"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-8"
+           cx="95.25"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-5"
+           cx="105.83334"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-5"
+           cx="116.41665"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-4"
+           cx="42.333332"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-2"
+           cx="52.916668"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-3"
+           cx="63.5"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-0"
+           cx="74.083336"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-9"
+           cx="84.666664"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-1"
+           cx="95.25"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-9"
+           cx="105.83334"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-7"
+           cx="116.41665"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-14"
+           cx="42.333332"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-4"
+           cx="52.916668"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-7"
+           cx="63.5"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-8"
+           cx="74.083336"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-7"
+           cx="84.666664"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-9"
+           cx="95.25"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-4"
+           cx="105.83334"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-52"
+           cx="116.41665"
+           cy="53.583344"
+           r="0.52778977" />
+      </g>
+      <g
+         transform="translate(-23.812502,2.2e-6)"
+         id="g1370">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812505,7.9375005)"
+         id="g1471">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-1"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5-4"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0-9"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972-8"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812501,2.6458339)"
+         id="g1597">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="44.034977"
+           y="-47.066288"
+           id="text121-09"><tspan
+             sodipodi:role="line"
+             id="tspan119-67"
+             x="44.034977"
+             y="-47.066288"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="43.972965"
+           y="32.308716"
+           id="text121-09-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-1"
+             x="43.972965"
+             y="32.308716"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path1473"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="46.93816"
+           y="-7.8045983"
+           id="text121-3-7-8"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-3"
+             x="46.93816"
+             y="-7.8045983"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
+      </g>
+      <g
+         id="g1613-5"
+         transform="translate(-34.395835,2.6458339)">
+        <g
+           id="g1802">
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="44.034977"
+             y="-47.066288"
+             id="text1601-4"><tspan
+               sodipodi:role="line"
+               id="tspan1599-1"
+               x="44.034977"
+               y="-47.066288"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="43.972965"
+             y="32.308716"
+             id="text1605-6"><tspan
+               sodipodi:role="line"
+               id="tspan1603-7"
+               x="43.972965"
+               y="32.308716"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path1607-6"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+          <text
+             xml:space="preserve"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="46.93816"
+             y="-7.8045983"
+             id="text1611-4"><tspan
+               sodipodi:role="line"
+               id="tspan1609-3"
+               x="46.93816"
+               y="-7.8045983"
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.52916668;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671,2.11666671;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1609"
+       width="37.041668"
+       height="37.041668"
+       x="58.020679"
+       y="-22.145849" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.52916668;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671,2.11666671;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1609-6"
+       width="37.041668"
+       height="37.041668"
+       x="132.10402"
+       y="-40.666683" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
+       d="M 138.7186,-34.0521 84.479021,-16.060432"
+       id="path1842"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8"
+       cx="150.62486"
+       cy="-22.145849"
+       r="0.92363214" />
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4517-0-8-5"
+       cx="141.36444"
+       cy="-31.406267"
+       r="0.92363214" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 150.36028,-22.410432 -8.20209,-8.202084"
+       id="path1063"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path2429"
+       d="m 129.45819,-43.312516 0,11.90625"
+       style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2415)"
+       sodipodi:nodetypes="cc" />
+    <g
+       aria-label="β"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text4435-7"
+       transform="translate(39.406026,-59.711681)">
+      <path
+         d="m 91.06502,15.340827 q 0,0.417545 -0.279053,0.690397 -0.276985,0.272851 -0.700732,0.272851 -0.163298,0 -0.345199,-0.04547 -0.181901,-0.04547 -0.312125,-0.132291 v 0.983919 h -0.388607 v -3.079915 q 0,-0.463021 0.260449,-0.725537 0.262517,-0.262517 0.72347,-0.262517 0.186035,0 0.338998,0.04548 0.155029,0.04341 0.276985,0.138492 0.117823,0.08888 0.188103,0.231511 0.07028,0.142627 0.07028,0.330729 0,0.262516 -0.144694,0.458887 -0.142626,0.194303 -0.405143,0.270784 v 0.03514 q 0.328662,0.05374 0.522966,0.260449 0.194303,0.204639 0.194303,0.5271 z m -0.401009,-0.01034 q 0,-0.183969 -0.07235,-0.297657 -0.07028,-0.115755 -0.190169,-0.179834 -0.121957,-0.06615 -0.272852,-0.08888 -0.150895,-0.02274 -0.30179,-0.02274 h -0.07441 v -0.330729 h 0.07441 q 0.136426,0 0.270784,-0.02894 0.134359,-0.03101 0.214974,-0.09302 0.09508,-0.07028 0.14056,-0.171566 0.04754,-0.101286 0.04754,-0.276986 0,-0.23151 -0.142627,-0.351399 -0.142627,-0.11989 -0.367937,-0.11989 -0.150895,0 -0.258382,0.05581 -0.107487,0.05374 -0.1757,0.144694 -0.06614,0.09095 -0.09715,0.212907 -0.03101,0.119889 -0.03101,0.248047 v 1.781803 q 0.136426,0.07855 0.291455,0.111621 0.155029,0.03101 0.303857,0.03101 0.307992,0 0.473356,-0.161231 0.167432,-0.163297 0.167432,-0.46302 z"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+         id="path1092"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       inkscape:connector-curvature="0"
+       id="path2429-6"
+       d="m 129.45819,-24.791682 11.90625,0"
+       style="fill:#000000;stroke:#000000;stroke-width:0.26458335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2415-4)"
+       sodipodi:nodetypes="cc" />
+    <g
+       aria-label="α"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text4435"
+       transform="translate(39.583579,-51.952863)">
+      <path
+         d="M 89.567652,28.315626 H 89.179045 V 28.07378 q -0.167432,0.144694 -0.349333,0.22531 -0.181901,0.08062 -0.394808,0.08062 -0.413411,0 -0.657324,-0.318327 -0.241845,-0.318327 -0.241845,-0.882633 0,-0.293522 0.08268,-0.522966 0.08475,-0.229443 0.227376,-0.390674 0.14056,-0.157096 0.326595,-0.239778 0.188102,-0.08268 0.388607,-0.08268 0.181901,0 0.322461,0.04548 0.14056,0.04547 0.295589,0.12609 v -0.107487 h 0.388607 z m -0.388607,-0.568441 v -1.314648 q -0.157096,-0.07028 -0.28112,-0.101286 -0.124023,-0.03307 -0.270784,-0.03307 -0.326595,0 -0.508496,0.227377 -0.181901,0.227376 -0.181901,0.644921 0,0.411345 0.14056,0.626319 0.140559,0.212907 0.450618,0.212907 0.165365,0 0.334863,-0.07235 0.169499,-0.07441 0.31626,-0.19017 z"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+         id="path1089"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="138.71861"
+       y="-35.375015"
+       id="text5070-2-1"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6"
+         x="138.71861"
+         y="-35.375015"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821"> i0j0</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="157.23944"
+       y="-35.375015"
+       id="text5070-2-1-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-0"
+         x="157.23944"
+         y="-35.375015"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-1"> i1j0</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="138.71861"
+       y="-16.854183"
+       id="text5070-2-1-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-9"
+         x="138.71861"
+         y="-16.854183"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-8"> i0j1</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="157.23944"
+       y="-16.854183"
+       id="text5070-2-1-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-6"
+         x="157.23944"
+         y="-16.854183"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-9"> i1j1</tspan></tspan></text>
+    <g
+       aria-label="(Δi,Δj)"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text5070-2-2"
+       transform="matrix(1.5625,0,0,1.5625,-11.182435,-64.739243)">
+      <path
+         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1095"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1097"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1099"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1101"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1103"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1105"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1107"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="143.54691"
+       y="-30.420969"
+       id="text5070"><tspan
+         sodipodi:role="line"
+         id="tspan5068"
+         x="143.54691"
+         y="-30.420969"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332">(u-0.5, v-0.5)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="152.21477"
+       y="-21.160551"
+       id="text5070-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0"
+         x="152.21477"
+         y="-21.160551"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332">(u, v)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="64.635269"
+       y="-16.854183"
+       id="text5070-2-1-06"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-3"
+         x="64.635269"
+         y="-16.854183"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-86"> i0j0'</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="83.156105"
+       y="-16.854183"
+       id="text5070-2-1-25"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-7"
+         x="83.156105"
+         y="-16.854183"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-7"> i1j0'</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="64.635269"
+       y="1.6666514"
+       id="text5070-2-1-75"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-2"
+         x="64.635269"
+         y="1.6666514"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-3"> i0j1'</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="83.156105"
+       y="1.6666514"
+       id="text5070-2-1-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-8"
+         x="83.156105"
+         y="1.6666514"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-4"> i1j1'</tspan></tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture1-ll.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture1-ll.svg
new file mode 100644
index 0000000..e5dc411
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture1-ll.svg
@@ -0,0 +1,1008 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vulkantexture1-ll.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1517"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1515" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="423.62557"
+     inkscape:cy="183.39269"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="2199"
+     inkscape:window-height="1151"
+     inkscape:window-x="356"
+     inkscape:window-y="398"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
+       d="M 157.23948,2.9895792 102.99988,-15.002089"
+       id="path1842"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g1953"
+       transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         id="text121"
+         y="-32.729179"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-32.729179"
+           x="34.208187"
+           id="tspan119"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-3"
+         y="-14.208342"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-14.208342"
+           x="34.208187"
+           id="tspan119-1"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-0"
+         y="4.3124924"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="4.3124924"
+           x="34.208187"
+           id="tspan119-4"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-33"
+         y="22.833326"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="22.833326"
+           x="34.208187"
+           id="tspan119-6"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-6"
+         y="36.062492"
+         x="47.437355"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="47.437355"
+           id="tspan119-11"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-30"
+         y="36.062492"
+         x="65.958191"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="65.958191"
+           id="tspan119-47"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-1"
+         y="36.062492"
+         x="84.479027"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="84.479027"
+           id="tspan119-9"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-8"
+         y="36.062492"
+         x="102.99986"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="102.99986"
+           id="tspan119-7"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-4"
+         y="36.062492"
+         x="121.52069"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="121.52069"
+           id="tspan119-0"
+           sodipodi:role="line">4</tspan></text>
+      <text
+         id="text121-7"
+         y="36.062492"
+         x="140.04152"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="140.04152"
+           id="tspan119-8"
+           sodipodi:role="line">5</tspan></text>
+      <text
+         id="text121-79"
+         y="36.062492"
+         x="158.56236"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="158.56236"
+           id="tspan119-16"
+           sodipodi:role="line">6</tspan></text>
+      <text
+         id="text121-31"
+         y="36.062492"
+         x="177.08319"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="177.08319"
+           id="tspan119-09"
+           sodipodi:role="line">7</tspan></text>
+      <text
+         id="text121-3-7"
+         y="-5.1587644"
+         x="34.4366"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="-5.1587644"
+           x="34.4366"
+           id="tspan119-1-8"
+           sodipodi:role="line">j</tspan></text>
+      <text
+         id="text121-3-7-3"
+         y="37.611752"
+         x="113.4819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="37.611752"
+           x="113.4819"
+           id="tspan119-1-8-7"
+           sodipodi:role="line">i</tspan></text>
+      <g
+         transform="translate(-23.812502,2.2e-6)"
+         id="g1370">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812505,7.9375005)"
+         id="g1471">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-1"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5-4"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0-9"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972-8"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812501,2.6458339)"
+         id="g1597">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="44.034977"
+           y="-47.066288"
+           id="text121-09"><tspan
+             sodipodi:role="line"
+             id="tspan119-67"
+             x="44.034977"
+             y="-47.066288"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="43.972965"
+           y="32.308716"
+           id="text121-09-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-1"
+             x="43.972965"
+             y="32.308716"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path1473"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="46.93816"
+           y="-7.8045983"
+           id="text121-3-7-8"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-3"
+             x="46.93816"
+             y="-7.8045983"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
+      </g>
+      <g
+         id="g1613-5"
+         transform="translate(-34.395835,2.6458339)">
+        <g
+           id="g1802">
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="44.034977"
+             y="-47.066288"
+             id="text1601-4"><tspan
+               sodipodi:role="line"
+               id="tspan1599-1"
+               x="44.034977"
+               y="-47.066288"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="43.972965"
+             y="32.308716"
+             id="text1605-6"><tspan
+               sodipodi:role="line"
+               id="tspan1603-7"
+               x="43.972965"
+               y="32.308716"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path1607-6"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+          <text
+             xml:space="preserve"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="46.93816"
+             y="-7.8045983"
+             id="text1611-4"><tspan
+               sodipodi:role="line"
+               id="tspan1609-3"
+               x="46.93816"
+               y="-7.8045983"
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <g
+       style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
+       transform="matrix(1.7500001,0,0,-1.7500001,-27.968899,59.718765)"
+       id="g1463">
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="42.333332"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517"
+         cx="42.333332"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 42.861122,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="52.916668"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7"
+         cx="52.916668"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 53.444458,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="63.5"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-78"
+         cx="63.5"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 64.02779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="74.083336"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-9"
+         cx="74.083336"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 74.611126,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="84.666664"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-0"
+         cx="84.666664"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 85.194454,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="95.25"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-0"
+         cx="95.25"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 95.77779,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="105.83334"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-1"
+         cx="105.83334"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 106.36113,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="21.833345"
+         sodipodi:cx="116.41666"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-7"
+         cx="116.41666"
+         cy="21.833345"
+         r="0.52778977"
+         d="m 116.94445,21.833345 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+        <path transform="translate(37.041666 16.541679) scale(0.25 0.25) scale(42.333333 42.333333)" style="fill:none;stroke:#808080;stroke-width:0.015;stroke-linecap:square"
+              d="M0,0 H8 M0,1 H8 M0,2 H8 M0,3 H8 M0,4 H8 M0,0 V4 M1,0 V4 M2,0 V4 M3,0 V4 M4,0 V4 M5,0 V4 M6,0 V4 M7,0 V4 M8,0 V4" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="42.333332"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-6"
+         cx="42.333332"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 42.861122,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="52.916668"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-3"
+         cx="52.916668"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 53.444458,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="63.5"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-78-9"
+         cx="63.5"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 64.02779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="74.083336"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-9-1"
+         cx="74.083336"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 74.611126,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="84.666664"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-0-6"
+         cx="84.666664"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 85.194454,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="95.25"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-0-8"
+         cx="95.25"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 95.77779,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="105.83334"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-1-5"
+         cx="105.83334"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 106.36113,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="32.416679"
+         sodipodi:cx="116.41665"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-7-5"
+         cx="116.41665"
+         cy="32.416679"
+         r="0.52778977"
+         d="m 116.94444,32.416679 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="42.333332"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-4"
+         cx="42.333332"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 42.861122,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="52.916668"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-2"
+         cx="52.916668"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 53.444458,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="63.5"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-78-3"
+         cx="63.5"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 64.02779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="74.083336"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-9-0"
+         cx="74.083336"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 74.611126,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="84.666664"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-0-9"
+         cx="84.666664"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 85.194454,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="95.25"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-0-1"
+         cx="95.25"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 95.77779,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="105.83334"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-1-9"
+         cx="105.83334"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 106.36113,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="43.000011"
+         sodipodi:cx="116.41665"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-7-7"
+         cx="116.41665"
+         cy="43.000011"
+         r="0.52778977"
+         d="m 116.94444,43.000011 c 0,0.291491 -0.2363,0.52779 -0.52779,0.52779 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.52779 0,-0.29149 0.2363,-0.527789 0.52779,-0.527789 0.29149,0 0.52779,0.236299 0.52779,0.527789 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="42.333332"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-14"
+         cx="42.333332"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 42.861122,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="52.916668"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-4"
+         cx="52.916668"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 53.444458,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="63.5"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-78-7"
+         cx="63.5"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 64.02779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="74.083336"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-9-8"
+         cx="74.083336"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 74.611126,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="84.666664"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-0-7"
+         cx="84.666664"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 85.194454,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="95.25"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-0-9"
+         cx="95.25"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 95.77779,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="105.83334"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-1-4"
+         cx="105.83334"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 106.36113,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+      <circle
+         sodipodi:ry="0.52778977"
+         sodipodi:rx="0.52778977"
+         sodipodi:cy="53.583344"
+         sodipodi:cx="116.41665"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path4517-7-7-52"
+         cx="116.41665"
+         cy="53.583344"
+         r="0.52778977"
+         d="m 116.94444,53.583344 c 0,0.29149 -0.2363,0.527789 -0.52779,0.527789 -0.29149,0 -0.52779,-0.236299 -0.52779,-0.527789 0,-0.291491 0.2363,-0.52779 0.52779,-0.52779 0.29149,0 0.52779,0.236299 0.52779,0.52779 z" />
+    </g>
+    <rect
+       style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
+       id="rect1609"
+       width="18.520826"
+       height="18.520876"
+       x="86.066528"
+       y="-0.079162598"
+       transform="scale(1,-1)" />
+    <rect
+       style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0"
+       id="rect1609-6"
+       width="18.520836"
+       height="18.520834"
+       x="141.62901"
+       y="-18.600004"
+       transform="scale(1,-1)" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       x="155.65187"
+       y="7.3173094"
+       id="text5070-2-1-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-9"
+         x="155.65187"
+         y="7.3173094"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+           id="tspan7821-8"> ij</tspan></tspan></text>
+    <g
+       aria-label="(Δi,Δj)"
+       style="font-size:10.58333302px;font-style:normal;font-weight:normal;line-height:1.25;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans-serif"
+       id="text5070-2-2"
+       transform="matrix(1.5625,0,0,1.5625,-1.1282694,-44.645549)">
+      <path
+         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1095"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1097"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1099"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1101"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1103"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1105"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
+         style="font-size:2.11666656px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic'"
+         id="path1107"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       x="99.560272"
+       y="-10.14519"
+       id="text5070-2-1-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-8"
+         x="99.560272"
+         y="-10.14519"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+           id="tspan7821-4"> ij'</tspan></tspan></text>
+    <circle
+       style="fill:#ff0000;fill-opacity:1;stroke:none"
+       id="path4517-0-8"
+       cx="150.62486"
+       cy="-22.145849"
+       r="0.92363214"
+       d="m 151.54849,-22.145849 c 0,0.510108 -0.41352,0.923632 -0.92363,0.923632 -0.51011,0 -0.92363,-0.413524 -0.92363,-0.923632 0,-0.510108 0.41352,-0.923632 0.92363,-0.923632 0.51011,0 0.92363,0.413524 0.92363,0.923632 z"
+       sodipodi:cx="150.62486"
+       sodipodi:cy="-22.145849"
+       sodipodi:rx="0.92363214"
+       sodipodi:ry="0.92363214"
+       transform="matrix(1,0,0,-1,0,-12.541691)" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       x="151.68561"
+       y="10.830611"
+       id="text5070-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0"
+         x="151.68561"
+         y="10.830611"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1">(u,v)</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture1.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture1.svg
new file mode 100644
index 0000000..fc5a04a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture1.svg
@@ -0,0 +1,827 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="vulkantexture1.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1517"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1515" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="423.62557"
+     inkscape:cy="223.39269"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="987"
+     inkscape:window-x="1672"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <g
+       id="g1953"
+       transform="translate(-2.6458349,-3.056108e-6)">
+      <text
+         id="text121"
+         y="-32.729179"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-32.729179"
+           x="34.208187"
+           id="tspan119"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-3"
+         y="-14.208342"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="-14.208342"
+           x="34.208187"
+           id="tspan119-1"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-0"
+         y="4.3124924"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="4.3124924"
+           x="34.208187"
+           id="tspan119-4"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-33"
+         y="22.833326"
+         x="34.208187"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="22.833326"
+           x="34.208187"
+           id="tspan119-6"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-6"
+         y="36.062492"
+         x="47.437355"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="47.437355"
+           id="tspan119-11"
+           sodipodi:role="line">0</tspan></text>
+      <text
+         id="text121-30"
+         y="36.062492"
+         x="65.958191"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="65.958191"
+           id="tspan119-47"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         id="text121-1"
+         y="36.062492"
+         x="84.479027"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="84.479027"
+           id="tspan119-9"
+           sodipodi:role="line">2</tspan></text>
+      <text
+         id="text121-8"
+         y="36.062492"
+         x="102.99986"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="102.99986"
+           id="tspan119-7"
+           sodipodi:role="line">3</tspan></text>
+      <text
+         id="text121-4"
+         y="36.062492"
+         x="121.52069"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="121.52069"
+           id="tspan119-0"
+           sodipodi:role="line">4</tspan></text>
+      <text
+         id="text121-7"
+         y="36.062492"
+         x="140.04152"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="140.04152"
+           id="tspan119-8"
+           sodipodi:role="line">5</tspan></text>
+      <text
+         id="text121-79"
+         y="36.062492"
+         x="158.56236"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="158.56236"
+           id="tspan119-16"
+           sodipodi:role="line">6</tspan></text>
+      <text
+         id="text121-31"
+         y="36.062492"
+         x="177.08319"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332"
+           y="36.062492"
+           x="177.08319"
+           id="tspan119-09"
+           sodipodi:role="line">7</tspan></text>
+      <text
+         id="text121-3-7"
+         y="-5.1587644"
+         x="34.4366"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="-5.1587644"
+           x="34.4366"
+           id="tspan119-1-8"
+           sodipodi:role="line">j</tspan></text>
+      <text
+         id="text121-3-7-3"
+         y="37.611752"
+         x="113.4819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+         xml:space="preserve"><tspan
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+           y="37.611752"
+           x="113.4819"
+           id="tspan119-1-8-7"
+           sodipodi:role="line">i</tspan></text>
+      <g
+         style="stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(1.7500001,0,0,1.7500001,-25.323064,-72.260449)"
+         id="g1463">
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517"
+           cx="42.333332"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7"
+           cx="52.916668"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78"
+           cx="63.5"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9"
+           cx="74.083336"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0"
+           cx="84.666664"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0"
+           cx="95.25"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1"
+           cx="105.83334"
+           cy="21.833345"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7"
+           cx="116.41666"
+           cy="21.833345"
+           r="0.52778977" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:0.15119047;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 37.041666,16.541679 h 84.666664 l 1e-5,42.333333 H 37.041671 l -5e-6,-42.333333 m 10.583334,0 4e-6,42.333333 m 10.583332,0 -4e-6,-42.333333 m 10.583332,0 8e-6,42.333333 m 10.583336,0 -8e-6,-42.333333 m 10.583336,0 v 42.333333 m 10.583334,0 -1e-5,-42.333333 m 10.58333,0 1e-5,42.333333 M 121.70834,48.291681 H 37.041671 m -4e-6,-10.583336 h 84.666663 m 0,-10.583332 H 37.041667"
+           id="path1171"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-6"
+           cx="42.333332"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-3"
+           cx="52.916668"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-9"
+           cx="63.5"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-1"
+           cx="74.083336"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-6"
+           cx="84.666664"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-8"
+           cx="95.25"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-5"
+           cx="105.83334"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-5"
+           cx="116.41665"
+           cy="32.416679"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-4"
+           cx="42.333332"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-2"
+           cx="52.916668"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-3"
+           cx="63.5"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-0"
+           cx="74.083336"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-9"
+           cx="84.666664"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-1"
+           cx="95.25"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-9"
+           cx="105.83334"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-7"
+           cx="116.41665"
+           cy="43.000011"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-14"
+           cx="42.333332"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-4"
+           cx="52.916668"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-78-7"
+           cx="63.5"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-9-8"
+           cx="74.083336"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-0-7"
+           cx="84.666664"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-0-9"
+           cx="95.25"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-1-4"
+           cx="105.83334"
+           cy="53.583344"
+           r="0.52778977" />
+        <circle
+           style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15119047;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4517-7-7-52"
+           cx="116.41665"
+           cy="53.583344"
+           r="0.52778977" />
+      </g>
+      <g
+         transform="translate(-23.812502,2.2e-6)"
+         id="g1370">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">8.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">u</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812505,7.9375005)"
+         id="g1471">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="54.556301"
+           y="45.537884"
+           id="text121-09-74-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-1"
+             x="54.556301"
+             y="45.537884"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="213.32181"
+           y="45.538918"
+           id="text121-09-74-5-4"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-18-0-9"
+             x="213.32181"
+             y="45.538918"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)"
+           d="m 63.312355,43.999992 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           id="path972-8"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="137.32748"
+           y="45.122406"
+           id="text121-3-7-3-3-5"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-7-2-2"
+             x="137.32748"
+             y="45.122406"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">s</tspan></text>
+      </g>
+      <g
+         transform="translate(-23.812501,2.6458339)"
+         id="g1597">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="44.034977"
+           y="-47.066288"
+           id="text121-09"><tspan
+             sodipodi:role="line"
+             id="tspan119-67"
+             x="44.034977"
+             y="-47.066288"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">4.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="43.972965"
+           y="32.308716"
+           id="text121-09-7"><tspan
+             sodipodi:role="line"
+             id="tspan119-67-1"
+             x="43.972965"
+             y="32.308716"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path1473"
+           d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+           style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+           x="46.93816"
+           y="-7.8045983"
+           id="text121-3-7-8"><tspan
+             sodipodi:role="line"
+             id="tspan119-1-8-3"
+             x="46.93816"
+             y="-7.8045983"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">v</tspan></text>
+      </g>
+      <g
+         id="g1613-5"
+         transform="translate(-34.395835,2.6458339)">
+        <g
+           id="g1802">
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="44.034977"
+             y="-47.066288"
+             id="text1601-4"><tspan
+               sodipodi:role="line"
+               id="tspan1599-1"
+               x="44.034977"
+               y="-47.066288"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">1.0</tspan></text>
+          <text
+             xml:space="preserve"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="43.972965"
+             y="32.308716"
+             id="text1605-6"><tspan
+               sodipodi:role="line"
+               id="tspan1603-7"
+               x="43.972965"
+               y="32.308716"
+               style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">0.0</tspan></text>
+          <path
+             inkscape:connector-curvature="0"
+             id="path1607-6"
+             d="M 47.437354,28.124992 V -6.2708429 m 10e-7,-5.2916661 v -34.395835"
+             style="fill:none;stroke:#000000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+          <text
+             xml:space="preserve"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+             x="46.93816"
+             y="-7.8045983"
+             id="text1611-4"><tspan
+               sodipodi:role="line"
+               id="tspan1609-3"
+               x="46.93816"
+               y="-7.8045983"
+               style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">t</tspan></text>
+        </g>
+      </g>
+    </g>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1609"
+       width="18.520826"
+       height="18.520876"
+       x="76.541519"
+       y="-3.6250155" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.11666671, 2.11666671;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1609-6"
+       width="18.520836"
+       height="18.520834"
+       x="132.10402"
+       y="-22.145849" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1517)"
+       d="M 138.71861,-15.531266 84.479023,2.4604027"
+       id="path1842"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="138.71861"
+       y="-16.854183"
+       id="text5070-2-1-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-9"
+         x="138.71861"
+         y="-16.854183"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-8"> ij</tspan></tspan></text>
+    <g
+       aria-label="(Δi,Δj)"
+       style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       id="text5070-2-2"
+       transform="matrix(1.5625,0,0,1.5625,-11.182435,-46.21841)">
+      <path
+         d="m 71.619395,25.566439 h -0.219108 q -0.09302,-0.150895 -0.152962,-0.326595 -0.05994,-0.1757 -0.05994,-0.366903 0,-0.19637 0.04754,-0.378271 0.04754,-0.182935 0.139527,-0.359668 0.08785,-0.167432 0.209806,-0.317294 0.12299,-0.149861 0.270784,-0.285253 h 0.233578 v 0.01034 q -0.117822,0.08682 -0.24598,0.220141 -0.127124,0.133326 -0.229443,0.294556 -0.104387,0.164331 -0.170532,0.362769 -0.06511,0.197404 -0.06511,0.416512 0,0.224275 0.06511,0.408243 0.06511,0.185002 0.176733,0.311092 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1095"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 73.377427,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173633,-1.192692 -0.72347,1.192692 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1097"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.166009,23.591366 -0.04651,0.201538 H 73.90039 l 0.04651,-0.201538 z m -0.103353,0.394808 -0.26665,1.154451 h -0.194303 l 0.26665,-1.154451 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1099"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 74.663137,24.846069 -0.448552,0.676962 H 74.06369 l 0.334863,-0.676962 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1101"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 76.267173,25.140625 h -1.434538 l 0.936377,-1.538924 h 0.272852 z m -0.226343,-0.166398 -0.173632,-1.192692 -0.723471,1.192692 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1103"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.162209,23.792904 h -0.221175 l 0.04651,-0.201538 h 0.221175 z M 76.83148,25.16853 q -0.04651,0.200505 -0.165365,0.304891 -0.117822,0.104387 -0.293522,0.104387 -0.04134,0 -0.10852,-0.0083 -0.06718,-0.0083 -0.110588,-0.02067 l 0.04031,-0.176734 h 0.01033 q 0.02997,0.01344 0.07131,0.02584 0.04031,0.01343 0.09405,0.01343 0.07235,0 0.120922,-0.02274 0.04961,-0.0217 0.08062,-0.06615 0.02997,-0.04341 0.04961,-0.10852 0.01964,-0.06408 0.03514,-0.134359 l 0.216007,-0.937411 h -0.240812 l 0.03617,-0.156062 h 0.437182 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1105"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 77.977663,24.225952 q 0,0.195337 -0.04858,0.382406 -0.04858,0.186035 -0.138493,0.355534 -0.08992,0.169498 -0.212907,0.320393 -0.12299,0.151929 -0.267684,0.282154 h -0.233577 v -0.01034 q 0.118856,-0.08888 0.244946,-0.219108 0.127124,-0.129191 0.230477,-0.295589 0.117822,-0.190169 0.176733,-0.381372 0.05891,-0.191203 0.05891,-0.397908 0,-0.220142 -0.06511,-0.405144 -0.06408,-0.186035 -0.176733,-0.314192 v -0.01034 h 0.219108 q 0.09198,0.149861 0.151929,0.325561 0.06098,0.174666 0.06098,0.367936 z"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"
+         id="path1107"
+         inkscape:connector-curvature="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       x="83.156105"
+       y="1.6666514"
+       id="text5070-2-1-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-6-8"
+         x="83.156105"
+         y="1.6666514"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.26458332"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777743px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.26458332"
+           id="tspan7821-4"> ij'</tspan></tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/vulkantexture_boxFilter.svg b/codegen/vulkan/vulkan-docs-next/images/vulkantexture_boxFilter.svg
new file mode 100644
index 0000000..7e18bf7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/vulkantexture_boxFilter.svg
@@ -0,0 +1,987 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="706.10547"
+   height="384.11328"
+   viewBox="0 0 186.82375 101.62997"
+   version="1.1"
+   id="svg8"
+   inkscape:version="1.1.2 (b8e25be833, 2022-02-05)"
+   sodipodi:docname="vulkantexture_boxFilter.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <defs
+     id="defs2">
+    <linearGradient
+       id="linearGradient61071"
+       inkscape:swatch="solid">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:1;"
+         offset="0"
+         id="stop61069" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="marker2415"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path2413"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path1144"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend"
+       inkscape:collect="always">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path977"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path977-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1483-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1481-0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2415-4"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2413-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker1073-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path1071-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="416.5"
+     inkscape:cy="142.25"
+     inkscape:document-units="px"
+     inkscape:current-layer="g23720"
+     showgrid="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="true"
+     inkscape:window-width="2969"
+     inkscape:window-height="1552"
+     inkscape:window-x="488"
+     inkscape:window-y="37"
+     inkscape:window-maximized="0"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     fit-margin-left="1"
+     units="px"
+     inkscape:snap-center="false"
+     inkscape:snap-global="false"
+     inkscape:pagecheckerboard="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid12"
+       originx="0.79995428"
+       originy="-29.882412"
+       dotted="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-6.9498988,47.8249)">
+    <g
+       id="g3699">
+      <g
+         id="g3675">
+        <text
+           id="text121-6"
+           y="36.062489"
+           x="44.791519"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="44.791519"
+             id="tspan119-11"
+             sodipodi:role="line">0</tspan></text>
+        <text
+           id="text121-30"
+           y="36.062489"
+           x="63.312355"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="63.312355"
+             id="tspan119-47"
+             sodipodi:role="line">1</tspan></text>
+        <text
+           id="text121-1"
+           y="36.062489"
+           x="81.833191"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="81.833191"
+             id="tspan119-9"
+             sodipodi:role="line">2</tspan></text>
+        <text
+           id="text121-8"
+           y="36.062489"
+           x="100.35403"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="100.35403"
+             id="tspan119-7"
+             sodipodi:role="line">3</tspan></text>
+        <text
+           id="text121-4"
+           y="36.062489"
+           x="118.87486"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="118.87486"
+             id="tspan119-0"
+             sodipodi:role="line">4</tspan></text>
+        <text
+           id="text121-7"
+           y="36.062489"
+           x="137.39569"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="137.39569"
+             id="tspan119-8"
+             sodipodi:role="line">5</tspan></text>
+        <text
+           id="text121-79"
+           y="36.062489"
+           x="155.91653"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="155.91653"
+             id="tspan119-16"
+             sodipodi:role="line">6</tspan></text>
+        <text
+           id="text121-31"
+           y="36.062489"
+           x="174.43736"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="36.062489"
+             x="174.43736"
+             id="tspan119-09"
+             sodipodi:role="line">7</tspan></text>
+        <text
+           id="text121-3-7-3"
+           y="37.611748"
+           x="110.83607"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+             y="37.611748"
+             x="110.83607"
+             id="tspan119-1-8-7"
+             sodipodi:role="line">i</tspan></text>
+      </g>
+      <g
+         id="g3666">
+        <text
+           id="text121-09-74"
+           y="45.537884"
+           x="28.097963"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="45.537884"
+             x="28.097963"
+             id="tspan119-67-18"
+             sodipodi:role="line">0.0</tspan></text>
+        <text
+           id="text121-09-74-5"
+           y="45.538918"
+           x="186.86346"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="45.538918"
+             x="186.86346"
+             id="tspan119-67-18-0"
+             sodipodi:role="line">8.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path972"
+           d="m 36.854018,43.999991 h 71.437502 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+        <text
+           id="text121-3-7-3-3"
+           y="45.122406"
+           x="110.86915"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+             y="45.122406"
+             x="110.86915"
+             id="tspan119-1-8-7-2"
+             sodipodi:role="line">u</tspan></text>
+      </g>
+      <g
+         id="g3657">
+        <text
+           id="text121-09-74-7"
+           y="53.47538"
+           x="28.097961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="53.47538"
+             x="28.097961"
+             id="tspan119-67-18-1"
+             sodipodi:role="line">0.0</tspan></text>
+        <text
+           id="text121-09-74-5-4"
+           y="53.476414"
+           x="186.86346"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="53.476414"
+             x="186.86346"
+             id="tspan119-67-18-0-9"
+             sodipodi:role="line">1.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path972-8"
+           d="m 36.854015,51.937489 h 71.437505 m 5.29167,2e-6 h 71.4375"
+           style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-0)" />
+        <text
+           id="text121-3-7-3-3-5"
+           y="53.059902"
+           x="110.86914"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+             y="53.059902"
+             x="110.86914"
+             id="tspan119-1-8-7-2-2"
+             sodipodi:role="line">s</tspan></text>
+      </g>
+    </g>
+    <g
+       id="g3628">
+      <g
+         id="g3616">
+        <text
+           id="text121"
+           y="-32.729183"
+           x="31.562353"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="-32.729183"
+             x="31.562353"
+             id="tspan119"
+             sodipodi:role="line">3</tspan></text>
+        <text
+           id="text121-3"
+           y="-14.208344"
+           x="31.562353"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="-14.208344"
+             x="31.562353"
+             id="tspan119-1"
+             sodipodi:role="line">2</tspan></text>
+        <text
+           id="text121-0"
+           y="4.3124895"
+           x="31.562353"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="4.3124895"
+             x="31.562353"
+             id="tspan119-4"
+             sodipodi:role="line">1</tspan></text>
+        <text
+           id="text121-33"
+           y="22.833323"
+           x="31.562353"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="22.833323"
+             x="31.562353"
+             id="tspan119-6"
+             sodipodi:role="line">0</tspan></text>
+        <text
+           id="text121-3-7"
+           y="-5.1587672"
+           x="31.790766"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+             y="-5.1587672"
+             x="31.790766"
+             id="tspan119-1-8"
+             sodipodi:role="line">j</tspan></text>
+      </g>
+      <g
+         id="g3607">
+        <text
+           id="text121-09"
+           y="-44.420456"
+           x="17.576641"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="-44.420456"
+             x="17.576641"
+             id="tspan119-67"
+             sodipodi:role="line">4.0</tspan></text>
+        <text
+           id="text121-09-7"
+           y="34.954548"
+           x="17.514629"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+             y="34.954548"
+             x="17.514629"
+             id="tspan119-67-1"
+             sodipodi:role="line">0.0</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483)"
+           d="M 20.979018,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
+           id="path1473"
+           inkscape:connector-curvature="0" />
+        <text
+           id="text121-3-7-8"
+           y="-5.1587677"
+           x="20.479824"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           xml:space="preserve"><tspan
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+             y="-5.1587677"
+             x="20.479824"
+             id="tspan119-1-8-3"
+             sodipodi:role="line">v</tspan></text>
+      </g>
+      <g
+         id="g3598">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="6.9933071"
+           y="-44.420456"
+           id="text1601-4"><tspan
+             sodipodi:role="line"
+             id="tspan1599-1"
+             x="6.9933071"
+             y="-44.420456"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">1.0</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           x="6.9312954"
+           y="34.954548"
+           id="text1605-6"><tspan
+             sodipodi:role="line"
+             id="tspan1603-7"
+             x="6.9312954"
+             y="34.954548"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">0.0</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path1607-6"
+           d="M 10.395684,30.770823 V -3.6250121 m 1e-6,-5.2916661 V -43.312513"
+           style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1483-7)" />
+        <text
+           xml:space="preserve"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+           x="9.8964901"
+           y="-5.1587677"
+           id="text1611-4"><tspan
+             sodipodi:role="line"
+             id="tspan1609-3"
+             x="9.8964901"
+             y="-5.1587677"
+             style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';text-align:center;writing-mode:lr-tb;text-anchor:middle">t</tspan></text>
+      </g>
+    </g>
+    <g
+       id="g1945">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:0.180099px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m -0.30510344,-21.486181 c -6.16678156,0.123536 -0.50081971,5.999055 -4.69339256,6.917891 3.812794,0.937157 -1.8166696,6.6715943 4.77720328,6.8211368"
+         id="path1539"
+         sodipodi:nodetypes="ccc" />
+    </g>
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517"
+       cx="46.114437"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7"
+       cx="64.635277"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-78"
+       cx="83.156105"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-9"
+       cx="101.67695"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-0"
+       cx="120.19777"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-0"
+       cx="138.71861"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-1"
+       cx="157.23946"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-7"
+       cx="175.76025"
+       cy="-21.510405"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 36.85402,30.770821 h 148.16667 l 2e-5,-74.083337 H 36.854029 l -9e-6,74.083337 m 18.520836,0 7e-6,-74.083337 m 18.520832,0 -7e-6,74.083337 m 18.520832,0 1.4e-5,-74.083337 m 18.520836,0 -1e-5,74.083337 m 18.52084,0 v -74.083337 m 18.52083,0 -1e-5,74.083337 m 18.52082,0 2e-5,-74.083337 m 18.52085,18.52083 H 36.854029 m -7e-6,18.5208395 H 185.02069 m 0,18.5208325 H 36.854022"
+       id="path1171"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-6"
+       cx="46.114437"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-3"
+       cx="64.635277"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-78-9"
+       cx="83.156105"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-9-1"
+       cx="101.67695"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-0-6"
+       cx="120.19777"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-0-8"
+       cx="138.71861"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-1-5"
+       cx="157.23946"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-7-5"
+       cx="175.76025"
+       cy="-2.9895689"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-4"
+       cx="46.114437"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-2"
+       cx="64.635277"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-78-3"
+       cx="83.156105"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-9-0"
+       cx="101.67695"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-0-9"
+       cx="120.19777"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-0-1"
+       cx="138.71861"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-1-9"
+       cx="157.23946"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-7-7"
+       cx="175.76025"
+       cy="15.531263"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-14"
+       cx="46.114437"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-4"
+       cx="64.635277"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-78-7"
+       cx="83.156105"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-9-8"
+       cx="101.67695"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-0-7"
+       cx="120.19777"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-0-9"
+       cx="138.71861"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-1-4"
+       cx="157.23946"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.75"
+       id="path4517-7-7-52"
+       cx="175.76025"
+       cy="34.052097"
+       r="0.92363214"
+       transform="scale(1,-1)" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.901535;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:3.60617, 3.60617;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect1609-6"
+       width="73.151604"
+       height="54.442726"
+       x="74.433044"
+       y="-11.802407"
+       transform="scale(1,-1)" />
+    <text
+       id="text5070-2-1"
+       y="6.3912625"
+       x="74.689445"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1"
+         y="6.3912625"
+         x="74.689445"
+         id="tspan5068-0-6"
+         sodipodi:role="line"><tspan
+           id="tspan7821"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52778px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"> i0j0</tspan></tspan></text>
+    <text
+       id="text5070-2-1-7"
+       y="-31.047279"
+       x="129.85507"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4060"
+         x="129.85507"
+         y="-31.047279"
+         style="font-size:3.52778px;line-height:1.25"> i3j2</tspan></text>
+    <text
+       id="text5070-2-1-0"
+       y="24.779802"
+       x="138.71861"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4064"
+         x="138.71861"
+         y="24.779802"
+         style="font-size:3.52778px;line-height:1.25"> i0j0</tspan></text>
+    <text
+       id="text5070-2-1-2"
+       y="24.779802"
+       x="157.23944"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4054"
+         x="157.23944"
+         y="24.779802"
+         style="font-size:3.52778px;line-height:1.25"> i1j0</tspan><tspan
+         sodipodi:role="line"
+         id="tspan4056"
+         x="157.23944"
+         y="29.418991"
+         style="font-size:3.52778px;line-height:1.25"> </tspan></text>
+    <text
+       id="text5070-2-1-2-9"
+       y="-7.5618467"
+       x="37.125515"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4054-6"
+         x="37.125515"
+         y="-7.5618467"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> <tspan
+   style="font-style:italic;fill:#ff0000;fill-opacity:1"
+   id="tspan5421">startFracU = 0.75</tspan></tspan><tspan
+         sodipodi:role="line"
+         id="tspan4056-5"
+         x="37.125515"
+         y="-2.9226587"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> </tspan></text>
+    <text
+       id="text5070-2-1-2-9-2"
+       y="20.454296"
+       x="98.832947"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4056-5-5"
+         x="98.832947"
+         y="20.454296"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> <tspan
+   style="font-style:italic;fill:#ff0000;fill-opacity:1"
+   id="tspan5421-47">filterWidth = 4</tspan> </tspan></text>
+    <text
+       id="text5070-2-1-2-9-0"
+       y="-9.0823278"
+       x="150.99789"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4054-6-6"
+         x="150.99789"
+         y="-9.0823278"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> <tspan
+   style="font-style:italic;fill:#ff0000;fill-opacity:1"
+   id="tspan5421-4">endFracU = 0.5</tspan></tspan><tspan
+         sodipodi:role="line"
+         id="tspan4056-5-9"
+         x="150.99789"
+         y="-4.44314"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> </tspan></text>
+    <path
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.235519;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 87.78419,-38.583774 h 51.12208"
+       id="path3054"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.280941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 138.74543,-38.649966 V 3.1130929"
+       id="path3054-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g23720"
+       transform="matrix(1.0000089,0,0,0.9065254,-0.00100423,-3.6152144)">
+      <g
+         id="g23712">
+        <path
+           style="fill:none;stroke:#ff0000;stroke-width:0.295077;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 88.006071,-38.678205 V 7.3935552"
+           id="path3054-3-8"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.235412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 87.816003,7.3766299 H 138.89132"
+           id="path3054-7"
+           inkscape:connector-curvature="0" />
+      </g>
+      <ellipse
+         style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.949843"
+         id="path4517-0-8"
+         cx="113.32626"
+         cy="15.688036"
+         transform="scale(1,-1)"
+         rx="0.92363214"
+         ry="0.8333019" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.3981px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.949843"
+         x="143.31346"
+         y="-26.958637"
+         id="text5070-2"
+         transform="scale(1.0528059,0.9498427)"><tspan
+           sodipodi:role="line"
+           id="tspan5068-0"
+           x="143.31346"
+           y="-26.958637"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.35084px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f40000;fill-opacity:1;stroke-width:0.949843">(u,v) = (4.125, 2.625)</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.197073px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 75.299336,-0.21999701 C 75.141832,-3.7540929 77.14317,-1.0298194 81.48979,-3.1561641 c 3.774722,2.20700908 6.043903,-0.5430836 6.031725,2.93616709"
+       id="path1999"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.16525px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 129.72542,-0.36000733 c -0.10982,-3.56399737 1.28555,-0.81667377 4.3161,-2.96100937 2.6318,2.225682 4.21393,-0.5476789 4.20543,2.96100937"
+       id="path1999-5"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.587897px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 74.12415,12.81168 c -0.946799,5.232153 35.42487,0.835121 37.21071,4.34693 2.3168,-3.532011 36.32986,0.804026 36.25656,-4.34693"
+       id="path1999-5-4"
+       sodipodi:nodetypes="ccc" />
+    <text
+       id="text5070-2-1-2-9-2-8"
+       y="10.563014"
+       x="100.32487"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         sodipodi:role="line"
+         id="tspan4056-5-5-0"
+         x="100.32487"
+         y="10.563014"
+         style="font-size:3.52778px;line-height:1.25;fill:#ff0000;fill-opacity:1"> <tspan
+   style="font-style:italic;fill:#ff0000;fill-opacity:1"
+   id="tspan5421-47-8">boxWidth=2.75</tspan> </tspan></text>
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.413242px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 88.157013,4.3591029 c -0.649116,3.7706832 23.746397,1.0293989 25.511337,3.1327244 1.96994,-2.162968 24.90742,0.5794424 24.85717,-3.1327244"
+       id="path1999-5-4-6"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-width:0.214965;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1073)"
+       d="m 70.023631,-7.5147049 10.235431,3.6958673"
+       id="path60539" />
+    <path
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:0.26458334;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#marker1073)"
+       d="m 151.85008,-9.7523549 -17.07184,5.7529758"
+       id="path61511" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1073)"
+       d="m 150.85513,-27.261196 -35.92102,8.980256"
+       id="path69584" />
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/weight_filter_1d_separable.svg b/codegen/vulkan/vulkan-docs-next/images/weight_filter_1d_separable.svg
new file mode 100644
index 0000000..1ad341f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/weight_filter_1d_separable.svg
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="12cm"
+   height="8cm"
+   viewBox="0 0 120 80"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+   sodipodi:docname="weight_filter_2d.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect4090"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect4066"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <rect
+       x="-81.401044"
+       y="43.890672"
+       width="100"
+       height="70"
+       id="rect4021" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3211"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3199"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3187"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3175"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3152"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3135"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3123"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3100"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3084"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient976"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop972" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop974" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="266.43635"
+     inkscape:cy="191.11989"
+     inkscape:document-units="cm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="2336"
+     inkscape:window-height="1792"
+     inkscape:window-x="1275"
+     inkscape:window-y="229"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-grids="true"
+     inkscape:document-rotation="0"
+     width="100mm"
+     showborder="true"
+     inkscape:showpageshadow="true"
+     inkscape:pagecheckerboard="false"
+     units="cm">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="0"
+       originy="0"
+       units="mm"
+       spacingx="2"
+       spacingy="2"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(85.401044,-21.890672)">
+    <rect
+       id="rect3703-2"
+       width="40.000004"
+       height="40"
+       x="-85.401047"
+       y="41.890671"
+       style="opacity:0.885;fill:none;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -85.401038,61.890676 c 13.333466,0 26.666798,0 39.999999,0"
+       id="path3098"
+       inkscape:path-effect="#path-effect3100"
+       inkscape:original-d="m -85.401038,61.890676 c 13.333466,2.64e-4 26.666798,2.64e-4 39.999999,0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -65.401039,41.890676 c 0,12.889065 0,25.777955 0,32.444625 0,6.66667 0,7.11111 0,7.55538"
+       id="path3150"
+       inkscape:path-effect="#path-effect3152"
+       inkscape:original-d="m -65.401039,41.890676 c 2.65e-4,12.889065 2.65e-4,25.777955 0,38.666665 2.65e-4,0.44463 2.65e-4,0.88907 0,1.33334" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-85.42585"
+       y="87.507011"
+       id="text5070-2-2-5-5-5-6-4-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4"
+         x="-85.42585"
+         y="87.507011"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">Separable 2D Filter</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-76.444992"
+       y="53.507599"
+       id="text5070-2-2-5-5-5-6-4-0-8"
+       transform="scale(0.999533,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8"
+         x="-76.444992"
+         y="53.507599"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-76.444992"
+       y="53.507599"
+       id="text5070-2-2-5-5-5-6-4-0-8-8"
+       transform="scale(0.999533,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-9"
+         x="-76.444992"
+         y="53.507599"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-56.435658"
+       y="53.507599"
+       id="text5070-2-2-5-5-5-6-4-0-8-7"
+       transform="scale(0.999533,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-7"
+         x="-56.435658"
+         y="53.507599"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">6</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-56.435658"
+       y="73.498253"
+       id="text5070-2-2-5-5-5-6-4-0-8-6"
+       transform="scale(0.999533,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-4"
+         x="-56.435658"
+         y="73.498253"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-76.445"
+       y="73.498253"
+       id="text5070-2-2-5-5-5-6-4-0-8-3"
+       transform="scale(0.999533,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-0"
+         x="-76.445"
+         y="73.498253"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">4</tspan></text>
+    <rect
+       id="rect3703-2-3"
+       width="40.000004"
+       height="20.000002"
+       x="-35.401039"
+       y="41.890671"
+       style="opacity:0.885;fill:none;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       id="text4019"
+       style="fill:#000000;stroke:#000000;stroke-opacity:1;stroke-width:0;stroke-linejoin:miter;stroke-linecap:butt;font-size:1.99999998px;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';text-decoration:none;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;stop-color:#000000;white-space:pre;shape-inside:url(#rect4021);" />
+    <rect
+       id="rect3703-2-3-0"
+       width="20"
+       height="40.000004"
+       x="14.598952"
+       y="41.890671"
+       style="opacity:0.885;fill:none;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -15.592371,41.890674 c 0,6.444533 0,12.888978 0,16.222314 0,3.333335 0,3.555553 0,3.777686"
+       id="path3150-9"
+       inkscape:path-effect="#path-effect4066"
+       inkscape:original-d="m -15.592371,41.890674 c -2.65e-4,6.444533 -2.65e-4,12.888978 0,19.333334 -2.65e-4,0.222315 -2.65e-4,0.444533 0,0.666666" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 14.598953,61.94527 c 6.666732,0 13.333399,0 19.999999,0"
+       id="path3098-2"
+       inkscape:path-effect="#path-effect4090"
+       inkscape:original-d="m 14.598953,61.94527 c 6.666732,-2.64e-4 13.333399,-2.64e-4 19.999999,0" />
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-26.421644"
+       y="53.507595"
+       id="text5070-2-2-5-5-5-6-4-0-8-8-5"
+       transform="scale(0.99953301,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-9-4"
+         x="-26.421644"
+         y="53.507595"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="-6.4122996"
+       y="53.507595"
+       id="text5070-2-2-5-5-5-6-4-0-8-8-5-0"
+       transform="scale(0.99953301,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-9-4-5"
+         x="-6.4122996"
+         y="53.507595"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="23.601717"
+       y="53.507595"
+       id="text5070-2-2-5-5-5-6-4-0-8-8-5-0-9"
+       transform="scale(0.99953301,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-9-4-5-4"
+         x="23.601717"
+         y="53.507595"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39669"
+       x="23.601717"
+       y="73.498253"
+       id="text5070-2-2-5-5-5-6-4-0-8-8-5-0-6"
+       transform="scale(0.99953301,1.0004672)"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-8-9-4-5-9"
+         x="23.601717"
+         y="73.498253"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23135px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.39669">4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.2333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396873"
+       x="-30.175737"
+       y="87.506989"
+       id="text5070-2-2-5-5-5-6-4-0-2"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4-2"
+         x="-30.175737"
+         y="87.506989"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.2333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396873">Associated 1D Horizontal</tspan><tspan
+         sodipodi:role="line"
+         x="-30.175737"
+         y="92.798615"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.2333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396873"
+         id="tspan4201">and 1D Vertical Filters</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/images/weight_filter_2d.svg b/codegen/vulkan/vulkan-docs-next/images/weight_filter_2d.svg
new file mode 100644
index 0000000..40e510a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/images/weight_filter_2d.svg
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="12cm"
+   height="8cm"
+   viewBox="0 0 120 80"
+   version="1.1"
+   id="svg8653"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+   sodipodi:docname="weight_filter_2d.svg">
+  <defs
+     id="defs8647">
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3211"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3199"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3187"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3175"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3152"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3135"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3123"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3100"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <inkscape:path-effect
+       effect="bspline"
+       id="path-effect3084"
+       is_visible="true"
+       lpeversion="1"
+       weight="33.333333"
+       steps="2"
+       helper_size="0"
+       apply_no_weight="true"
+       apply_with_weight="true"
+       only_selected="false" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient976"
+       osb:paint="gradient">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop972" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop974" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="209.98132"
+     inkscape:cy="153.97566"
+     inkscape:document-units="cm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="2336"
+     inkscape:window-height="1792"
+     inkscape:window-x="1275"
+     inkscape:window-y="229"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-grids="true"
+     inkscape:document-rotation="0"
+     width="100mm"
+     showborder="true"
+     inkscape:showpageshadow="true"
+     inkscape:pagecheckerboard="false"
+     units="cm">
+    <inkscape:grid
+       type="xygrid"
+       id="grid9626"
+       originx="0"
+       originy="0"
+       units="mm"
+       spacingx="2"
+       spacingy="2"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata8650">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(85.401044,-21.890672)">
+    <rect
+       id="rect3703-2"
+       width="80"
+       height="60"
+       x="-75.401047"
+       y="31.890673"
+       style="opacity:0.885;fill:none;stroke:#000000;stroke-width:0.49999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.49999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m -75.401044,71.890672 c 26.666932,0 53.333597,0 79.9999988,0"
+       id="path3098"
+       inkscape:path-effect="#path-effect3100"
+       inkscape:original-d="m -75.401044,71.890672 c 26.666932,2.64e-4 53.333597,2.64e-4 79.9999988,0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -75.401044,51.890672 c 26.666932,0 53.333597,0 79.9999993,0"
+       id="path3098-4"
+       inkscape:path-effect="#path-effect3123"
+       inkscape:original-d="m -75.401044,51.890672 c 26.666932,2.64e-4 53.333597,2.64e-4 79.9999993,0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.49999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m -55.401044,31.890672 c 0,19.333597 0,38.666932 0,48.666938 0,10.000007 0,10.66666 0,11.333062"
+       id="path3150"
+       inkscape:path-effect="#path-effect3152"
+       inkscape:original-d="m -55.401044,31.890672 c 2.65e-4,19.333597 2.65e-4,38.666932 0,58.000001 2.65e-4,0.666944 2.65e-4,1.333597 0,1.999999" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -35.401044,31.890672 c 0,19.333597 0,38.666932 0,48.666938 0,10.000007 0,10.66666 0,11.333062"
+       id="path3150-1"
+       inkscape:path-effect="#path-effect3199"
+       inkscape:original-d="m -35.401044,31.890672 c 2.65e-4,19.333597 2.65e-4,38.666932 0,58.000001 2.65e-4,0.666944 2.65e-4,1.333597 0,1.999999" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m -15.668701,31.890672 c 0,19.333598 0,38.666933 0,48.666939 0,10.000006 0,10.666659 0,11.333061"
+       id="path3150-7"
+       inkscape:path-effect="#path-effect3211"
+       inkscape:original-d="m -15.668701,31.890672 c 2.65e-4,19.333598 2.65e-4,38.666933 0,58.000002 2.65e-4,0.666943 2.65e-4,1.333596 0,1.999998"
+       inkscape:transform-center-x="-0.12572825"
+       inkscape:transform-center-y="0.092510916" />
+    <g
+       id="g3755">
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+         x="-70.447197"
+         y="42.452316"
+         id="text5070-2-2-5-5"><tspan
+           sodipodi:role="line"
+           id="tspan5068-0-3-3-4"
+           x="-70.447197"
+           y="42.452316"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(0,0)</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+         x="-70.557274"
+         y="82.431892"
+         id="text5070-2-2-5-5-5"><tspan
+           sodipodi:role="line"
+           id="tspan5068-0-3-3-4-9"
+           x="-70.557274"
+           y="82.431892"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(0,2)</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+         x="-70.49511"
+         y="62.452343"
+         id="text5070-2-2-5-5-5-6"><tspan
+           sodipodi:role="line"
+           id="tspan5068-0-3-3-4-9-2"
+           x="-70.49511"
+           y="62.452343"
+           style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(0,1)</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-50.366604"
+       y="42.425819"
+       id="text5070-2-2-5-5-7"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-8"
+         x="-50.366604"
+         y="42.425819"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(1,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-50.476681"
+       y="82.405396"
+       id="text5070-2-2-5-5-5-5"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-7"
+         x="-50.476681"
+         y="82.405396"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(1,2)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-51.52557"
+       y="62.444405"
+       id="text5070-2-2-5-5-5-6-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1"
+         x="-51.52557"
+         y="62.444405"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">origin</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-30.472422"
+       y="42.368778"
+       id="text5070-2-2-5-5-59"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-7"
+         x="-30.472422"
+         y="42.368778"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(2,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-30.582499"
+       y="82.348351"
+       id="text5070-2-2-5-5-5-53"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-8"
+         x="-30.582499"
+         y="82.348351"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(2,2)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-30.520334"
+       y="62.368805"
+       id="text5070-2-2-5-5-5-6-8"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-3"
+         x="-30.520334"
+         y="62.368805"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(2,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-10.514821"
+       y="42.429115"
+       id="text5070-2-2-5-5-9"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-6"
+         x="-10.514821"
+         y="42.429115"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(3,0)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-10.624898"
+       y="82.408691"
+       id="text5070-2-2-5-5-5-4"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-3"
+         x="-10.624898"
+         y="82.408691"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(3,2)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-10.562734"
+       y="62.429142"
+       id="text5070-2-2-5-5-5-6-3"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-38"
+         x="-10.562734"
+         y="62.429142"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">(3,1)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.396875"
+       x="-58.095604"
+       y="97.459541"
+       id="text5070-2-2-5-5-5-6-4-0"><tspan
+         sodipodi:role="line"
+         id="tspan5068-0-3-3-4-9-2-1-4"
+         x="-58.095604"
+         y="97.459541"
+         style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke-width:0.396875">2D Convolution Filter</tspan></text>
+  </g>
+</svg>
diff --git a/codegen/vulkan/vulkan-docs-next/include/vulkan/vk_platform.h b/codegen/vulkan/vulkan-docs-next/include/vulkan/vk_platform.h
new file mode 100644
index 0000000..ed67a60
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/include/vulkan/vk_platform.h
@@ -0,0 +1,84 @@
+//
+// File: vk_platform.h
+//
+/*
+** Copyright 2014-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+
+#ifndef VK_PLATFORM_H_
+#define VK_PLATFORM_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+*   Platform-specific directives and type declarations
+***************************************************************************************************
+*/
+
+/* Platform-specific calling convention macros.
+ *
+ * Platforms should define these so that Vulkan clients call Vulkan commands
+ * with the same calling conventions that the Vulkan implementation expects.
+ *
+ * VKAPI_ATTR - Placed before the return type in function declarations.
+ *              Useful for C++11 and GCC/Clang-style function attribute syntax.
+ * VKAPI_CALL - Placed after the return type in function declarations.
+ *              Useful for MSVC-style calling convention syntax.
+ * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
+ *
+ * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
+ * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
+ */
+#if defined(_WIN32)
+    // On Windows, Vulkan commands use the stdcall convention
+    #define VKAPI_ATTR
+    #define VKAPI_CALL __stdcall
+    #define VKAPI_PTR  VKAPI_CALL
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
+    #error "Vulkan is not supported for the 'armeabi' NDK ABI"
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
+    // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
+    // calling convention, i.e. float parameters are passed in registers. This
+    // is true even if the rest of the application passes floats on the stack,
+    // as it does by default when compiling for the armeabi-v7a NDK ABI.
+    #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
+    #define VKAPI_CALL
+    #define VKAPI_PTR  VKAPI_ATTR
+#else
+    // On other platforms, use the default calling convention
+    #define VKAPI_ATTR
+    #define VKAPI_CALL
+    #define VKAPI_PTR
+#endif
+
+#if !defined(VK_NO_STDDEF_H)
+    #include <stddef.h>
+#endif // !defined(VK_NO_STDDEF_H)
+
+#if !defined(VK_NO_STDINT_H)
+    #if defined(_MSC_VER) && (_MSC_VER < 1600)
+        typedef signed   __int8  int8_t;
+        typedef unsigned __int8  uint8_t;
+        typedef signed   __int16 int16_t;
+        typedef unsigned __int16 uint16_t;
+        typedef signed   __int32 int32_t;
+        typedef unsigned __int32 uint32_t;
+        typedef signed   __int64 int64_t;
+        typedef unsigned __int64 uint64_t;
+    #else
+        #include <stdint.h>
+    #endif
+#endif // !defined(VK_NO_STDINT_H)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif
diff --git a/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan.h b/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan.h
new file mode 100644
index 0000000..426cff5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan.h
@@ -0,0 +1,99 @@
+#ifndef VULKAN_H_
+#define VULKAN_H_ 1
+
+/*
+** Copyright 2015-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#include "vk_platform.h"
+#include "vulkan_core.h"
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+#include "vulkan_android.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+#include <zircon/types.h>
+#include "vulkan_fuchsia.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+#include "vulkan_ios.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+#include "vulkan_macos.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+#include "vulkan_metal.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_VI_NN
+#include "vulkan_vi.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+#include "vulkan_wayland.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#include <windows.h>
+#include "vulkan_win32.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+#include <xcb/xcb.h>
+#include "vulkan_xcb.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#include <X11/Xlib.h>
+#include "vulkan_xlib.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+#include <directfb.h>
+#include "vulkan_directfb.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
+#include <X11/Xlib.h>
+#include <X11/extensions/Xrandr.h>
+#include "vulkan_xlib_xrandr.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_GGP
+#include <ggp_c/vulkan_types.h>
+#include "vulkan_ggp.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+#include <screen/screen.h>
+#include "vulkan_screen.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_SCI
+#include <nvscisync.h>
+#include <nvscibuf.h>
+#include "vulkan_sci.h"
+#endif
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+#include "vulkan_beta.h"
+#endif
+
+#endif // VULKAN_H_
diff --git a/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan_sc.h b/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan_sc.h
new file mode 100644
index 0000000..9e0765b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/include/vulkan/vulkan_sc.h
@@ -0,0 +1,99 @@
+#ifndef VULKAN_SC_H_
+#define VULKAN_SC_H_ 1
+
+/*
+** Copyright 2015-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#include "vk_platform.h"
+#include "vulkan_sc_core.h"
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+#include "vulkan_android.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+#include <zircon/types.h>
+#include "vulkan_fuchsia.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+#include "vulkan_ios.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+#include "vulkan_macos.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+#include "vulkan_metal.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_VI_NN
+#include "vulkan_vi.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+#include <wayland-client.h>
+#include "vulkan_wayland.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#include <windows.h>
+#include "vulkan_win32.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+#include <xcb/xcb.h>
+#include "vulkan_xcb.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#include <X11/Xlib.h>
+#include "vulkan_xlib.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+#include <directfb.h>
+#include "vulkan_directfb.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
+#include <X11/Xlib.h>
+#include <X11/extensions/Xrandr.h>
+#include "vulkan_xlib_xrandr.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_GGP
+#include <ggp_c/vulkan_types.h>
+#include "vulkan_ggp.h"
+#endif
+
+
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+#include <screen/screen.h>
+#include "vulkan_screen.h"
+#endif
+
+#ifdef VK_USE_PLATFORM_SCI
+#include <nvscisync.h>
+#include <nvscibuf.h>
+#include "vulkan_sci.h"
+#endif
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+#include "vulkan_beta.h"
+#endif
+
+#endif // VULKAN_SC_H_
diff --git a/codegen/vulkan/vulkan-docs-next/installRelease b/codegen/vulkan/vulkan-docs-next/installRelease
new file mode 100755
index 0000000..180d859
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/installRelease
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Install release build with buildRelease into /promoters
+#
+# Essentially replaced by genRelease
+
+# Root of the Vulkan git repo
+root=/home/tree/git/vulkan
+
+# Directory with generated specs (core and core+WSI)
+genspec=$root/out
+
+# Promoter Vulkan directory in SVN
+svnroot=/home/tree/khronos
+promo=$svnroot/promoters/specs/candidates/vulkan
+
+# Directory name for this release
+date=`date +%Y%m%d`
+
+install=$promo/$date
+if test -d $install ; then
+    echo "Target directory $install already exists, may overwrite! Continuing..."
+else
+    echo "Creating target directory $install"
+    mkdir $install
+fi
+
+# Copy various files
+cp $genspec/promoter.html $install/index.html
+mkdir $install/core $install/wsi
+cp -rp $genspec/core $genspec/wsi $genspec/df $install
+
+echo "**** Specs are copied to $install"
+echo "**** Please ensure that:"
+echo "**** * The right files are all there"
+echo "**** * The Data Format spec is also there"
+echo "**** * Everything is added to SVN and committed to the server"
+echo "You can get there by:"
+echo "cd $promo"
+echo "svn add $date"
diff --git a/codegen/vulkan/vulkan-docs-next/json/vkjson_data_default.h b/codegen/vulkan/vulkan-docs-next/json/vkjson_data_default.h
new file mode 100644
index 0000000..88720b0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/json/vkjson_data_default.h
@@ -0,0 +1,29 @@
+/*
+** Copyright 2020-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#pragma once
+#include "vkDefs.hpp"
+using namespace vk;
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-function"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif // __GNUC__
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpointer-bool-conversion"
+#endif
+
+#include "vulkan_json_data.hpp"
+
+#ifdef __GNUC__
+	#pragma GCC diagnostic pop
+#endif // __GNUC__
+#ifdef __clang__
+	#pragma clang diagnostic pop
+#endif
diff --git a/codegen/vulkan/vulkan-docs-next/json/vkjson_parser_default.h b/codegen/vulkan/vulkan-docs-next/json/vkjson_parser_default.h
new file mode 100644
index 0000000..caad5fa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/json/vkjson_parser_default.h
@@ -0,0 +1,29 @@
+/*
+** Copyright 2020-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#pragma once
+#include "vkDefs.hpp"
+using namespace vk;
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-function"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif // __GNUC__
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpointer-bool-conversion"
+#endif
+
+#include "vulkan_json_parser.hpp"
+
+#ifdef __GNUC__
+	#pragma GCC diagnostic pop
+#endif // __GNUC__
+#ifdef __clang__
+	#pragma clang diagnostic pop
+#endif
diff --git a/codegen/vulkan/vulkan-docs-next/json/vkpcc.json b/codegen/vulkan/vulkan-docs-next/json/vkpcc.json
new file mode 100644
index 0000000..3e4c8b5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/json/vkpcc.json
@@ -0,0 +1,60 @@
+{
+"$schema": "http://json-schema.org/draft-04/schema#",
+"id": "https://schema.khronos.org/vulkan/vkpcc.json#",
+"title": "JSON schema for Vulkan pipeline state",
+"description": "Schema for representing Vulkan pipeline state for use with the offline Pipeline Cache Compiler.",
+"type": "object",
+"additionalProperties": true,
+
+"definitions": {
+    "ShaderInfo" : {
+        "stage" : {"type": "string", "format": "uri"},
+        "filename" : {"type": "string", "format": "uri"}
+    },
+
+    "GraphicsPipelineState": {
+        "type": "object",
+        "additionalProperties": false,
+        "properties": {
+            "Renderpass": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkRenderPassCreateInfo"},
+            "Renderpass2": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkRenderPassCreateInfo2"},
+            "YcbcrSamplers": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkSamplerYcbcrConversionCreateInfo"}}}},
+            "ImmutableSamplers": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkSamplerCreateInfo"}}}},
+            "DescriptorSetLayouts": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkDescriptorSetLayoutCreateInfo"}}}},
+            "PipelineLayout": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkPipelineLayoutCreateInfo"},
+            "GraphicsPipeline": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkGraphicsPipelineCreateInfo"},
+            "ShaderFileNames": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"$ref": "#/definitions/ShaderInfo"}},
+            "PhysicalDeviceFeatures": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkPhysicalDeviceFeatures2"}
+        },
+        "oneOf" : [{"required" : ["Renderpass"]}, {"required" : ["Renderpass2"]}],
+        "required" : ["PipelineLayout", "GraphicsPipeline", "ShaderFileNames"]
+    },
+
+    "ComputePipelineState": {
+        "type": "object",
+        "additionalProperties": false,
+        "properties": {
+            "YcbcrSamplers": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkSamplerYcbcrConversionCreateInfo"}}}},
+            "ImmutableSamplers": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkSamplerCreateInfo"}}}},
+            "DescriptorSetLayouts": {"type": "array", "minItems": 0, "maxItems": 255, "items": {"type": "object", "patternProperties": {"^\\w+$": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkDescriptorSetLayoutCreateInfo"}}}},
+            "PipelineLayout": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkPipelineLayoutCreateInfo"},
+            "ComputePipeline": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkComputePipelineCreateInfo"},
+            "ShaderFileNames": {"$ref": "#/definitions/ShaderInfo"},
+            "PhysicalDeviceFeatures": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/VkPhysicalDeviceFeatures2"}
+        },
+        "required" : ["PipelineLayout", "ComputePipeline", "ShaderFileNames"]
+    }
+},
+
+"properties": {
+    "GraphicsPipelineState"  : {"$ref": "#/definitions/GraphicsPipelineState"},
+    "ComputePipelineState"   : {"$ref": "#/definitions/ComputePipelineState"},
+    "PipelineUUID"           : {"type": "array", "minItems": 16, "maxItems": 16, "items": {"$ref": "https://schema.khronos.org/vulkan/vk.json#/definitions/uint8_t"}},
+    "DeviceExtensions"       : {"type": "array", "items": {"type": "string", "format": "uri"}}
+},
+
+"anyOf": [
+    {"required": ["GraphicsPipelineState"]},
+    {"required": ["ComputePipelineState"]}
+]
+}
diff --git a/codegen/vulkan/vulkan-docs-next/katex/README.md b/codegen/vulkan/vulkan-docs-next/katex/README.md
new file mode 100644
index 0000000..5868416
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/README.md
@@ -0,0 +1,91 @@
+# [<img src="https://katex.org/img/katex-logo-black.svg" width="130" alt="KaTeX">](https://katex.org/)
+[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex)
+[![CircleCI](https://circleci.com/gh/KaTeX/KaTeX.svg?style=shield)](https://circleci.com/gh/KaTeX/KaTeX)
+[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX)
+[![Join the chat at https://gitter.im/KaTeX/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/KaTeX/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=KaTeX/KaTeX)](https://dependabot.com)
+[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex)
+![](https://img.badgesize.io/KaTeX/KaTeX/v0.11.1/dist/katex.min.js?compression=gzip)
+
+KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
+
+ * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://www.intmath.com/cg5/katex-mathjax-comparison.php).
+ * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting.
+ * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
+ * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
+
+KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 9–11.
+
+KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html).
+
+Try out KaTeX [on the demo page](https://katex.org/#demo)!
+
+## Getting started
+
+### Starter template
+
+```html
+<!DOCTYPE html>
+<!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly -->
+<html>
+  <head>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
+
+    <!-- The loading of KaTeX is deferred to speed up page rendering -->
+    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
+
+    <!-- To automatically render math in text elements, include the auto-render extension: -->
+    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"
+        onload="renderMathInElement(document.body);"></script>
+  </head>
+  ...
+</html>
+```
+
+You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself.
+
+For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html).
+
+### API
+
+Call `katex.render` to render a TeX expression directly into a DOM element.
+For example:
+
+```js
+katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, {
+    throwOnError: false
+});
+```
+
+Call `katex.renderToString` to generate an HTML string of the rendered math,
+e.g., for server-side rendering.  For example:
+
+```js
+var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", {
+    throwOnError: false
+});
+// '<span class="katex">...</span>'
+```
+
+Make sure to include the CSS and font files in both cases.
+If you are doing all rendering on the server, there is no need to include the
+JavaScript on the client.
+
+The examples above use the `throwOnError: false` option, which renders invalid
+inputs as the TeX source code in red (by default), with the error message as
+hover text.  For other available options, see the
+[API documentation](https://katex.org/docs/api.html),
+[options documentation](https://katex.org/docs/options.html), and
+[handling errors documentation](https://katex.org/docs/error.html).
+
+## Demo and Documentation
+
+Learn more about using KaTeX [on the website](https://katex.org)!
+
+## Contributing
+
+See [CONTRIBUTING.md](CONTRIBUTING.md)
+
+## License
+
+KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT).
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.js
new file mode 100644
index 0000000..d31cc7c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.js
@@ -0,0 +1,339 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory(require("katex"));
+	else if(typeof define === 'function' && define.amd)
+		define(["katex"], factory);
+	else if(typeof exports === 'object')
+		exports["renderMathInElement"] = factory(require("katex"));
+	else
+		root["renderMathInElement"] = factory(root["katex"]);
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+
+// EXTERNAL MODULE: external "katex"
+var external_katex_ = __webpack_require__(0);
+var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_);
+
+// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
+/* eslint no-constant-condition:0 */
+var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
+  // Adapted from
+  // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
+  var index = startIndex;
+  var braceLevel = 0;
+  var delimLength = delimiter.length;
+
+  while (index < text.length) {
+    var character = text[index];
+
+    if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
+      return index;
+    } else if (character === "\\") {
+      index++;
+    } else if (character === "{") {
+      braceLevel++;
+    } else if (character === "}") {
+      braceLevel--;
+    }
+
+    index++;
+  }
+
+  return -1;
+};
+
+var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
+  var finalData = [];
+
+  for (var i = 0; i < startData.length; i++) {
+    if (startData[i].type === "text") {
+      var text = startData[i].data;
+      var lookingForLeft = true;
+      var currIndex = 0;
+      var nextIndex = void 0;
+      nextIndex = text.indexOf(leftDelim);
+
+      if (nextIndex !== -1) {
+        currIndex = nextIndex;
+        finalData.push({
+          type: "text",
+          data: text.slice(0, currIndex)
+        });
+        lookingForLeft = false;
+      }
+
+      while (true) {
+        if (lookingForLeft) {
+          nextIndex = text.indexOf(leftDelim, currIndex);
+
+          if (nextIndex === -1) {
+            break;
+          }
+
+          finalData.push({
+            type: "text",
+            data: text.slice(currIndex, nextIndex)
+          });
+          currIndex = nextIndex;
+        } else {
+          nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
+
+          if (nextIndex === -1) {
+            break;
+          }
+
+          finalData.push({
+            type: "math",
+            data: text.slice(currIndex + leftDelim.length, nextIndex),
+            rawData: text.slice(currIndex, nextIndex + rightDelim.length),
+            display: display
+          });
+          currIndex = nextIndex + rightDelim.length;
+        }
+
+        lookingForLeft = !lookingForLeft;
+      }
+
+      finalData.push({
+        type: "text",
+        data: text.slice(currIndex)
+      });
+    } else {
+      finalData.push(startData[i]);
+    }
+  }
+
+  return finalData;
+};
+
+/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters);
+// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
+/* eslint no-console:0 */
+
+
+
+var auto_render_splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
+  var data = [{
+    type: "text",
+    data: text
+  }];
+
+  for (var i = 0; i < delimiters.length; i++) {
+    var delimiter = delimiters[i];
+    data = auto_render_splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
+  }
+
+  return data;
+};
+/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
+ * API, we should copy it before mutating.
+ */
+
+
+var auto_render_renderMathInText = function renderMathInText(text, optionsCopy) {
+  var data = auto_render_splitWithDelimiters(text, optionsCopy.delimiters);
+  var fragment = document.createDocumentFragment();
+
+  for (var i = 0; i < data.length; i++) {
+    if (data[i].type === "text") {
+      fragment.appendChild(document.createTextNode(data[i].data));
+    } else {
+      var span = document.createElement("span");
+      var math = data[i].data; // Override any display mode defined in the settings with that
+      // defined by the text itself
+
+      optionsCopy.displayMode = data[i].display;
+
+      try {
+        if (optionsCopy.preProcess) {
+          math = optionsCopy.preProcess(math);
+        }
+
+        external_katex_default.a.render(math, span, optionsCopy);
+      } catch (e) {
+        if (!(e instanceof external_katex_default.a.ParseError)) {
+          throw e;
+        }
+
+        optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
+        fragment.appendChild(document.createTextNode(data[i].rawData));
+        continue;
+      }
+
+      fragment.appendChild(span);
+    }
+  }
+
+  return fragment;
+};
+
+var renderElem = function renderElem(elem, optionsCopy) {
+  for (var i = 0; i < elem.childNodes.length; i++) {
+    var childNode = elem.childNodes[i];
+
+    if (childNode.nodeType === 3) {
+      // Text node
+      var frag = auto_render_renderMathInText(childNode.textContent, optionsCopy);
+      i += frag.childNodes.length - 1;
+      elem.replaceChild(frag, childNode);
+    } else if (childNode.nodeType === 1) {
+      (function () {
+        // Element node
+        var className = ' ' + childNode.className + ' ';
+        var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) {
+          return className.indexOf(' ' + x + ' ') === -1;
+        });
+
+        if (shouldRender) {
+          renderElem(childNode, optionsCopy);
+        }
+      })();
+    } // Otherwise, it's something else, and ignore it.
+
+  }
+};
+
+var renderMathInElement = function renderMathInElement(elem, options) {
+  if (!elem) {
+    throw new Error("No element provided to render");
+  }
+
+  var optionsCopy = {}; // Object.assign(optionsCopy, option)
+
+  for (var option in options) {
+    if (options.hasOwnProperty(option)) {
+      optionsCopy[option] = options[option];
+    }
+  } // default options
+
+
+  optionsCopy.delimiters = optionsCopy.delimiters || [{
+    left: "$$",
+    right: "$$",
+    display: true
+  }, {
+    left: "\\(",
+    right: "\\)",
+    display: false
+  }, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
+  // {left: "$", right: "$", display: false},
+  //  \[…\] must come last in this array. Otherwise, renderMathInElement
+  //  will search for \[ before it searches for $$ or  \(
+  // That makes it susceptible to finding a \\[0.3em] row delimiter and
+  // treating it as if it were the start of a KaTeX math zone.
+  {
+    left: "\\[",
+    right: "\\]",
+    display: true
+  }];
+  optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
+  optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
+  optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
+  // math elements within a single call to `renderMathInElement`.
+
+  optionsCopy.macros = optionsCopy.macros || {};
+  renderElem(elem, optionsCopy);
+};
+
+/* harmony default export */ var auto_render = __webpack_exports__["default"] = (renderMathInElement);
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.min.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.min.js
new file mode 100644
index 0000000..3a6d663
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=function(e,t,r){for(var n=r,o=0,a=e.length;n<t.length;){var i=t[n];if(o<=0&&t.slice(n,n+a)===e)return n;"\\"===i?n++:"{"===i?o++:"}"===i&&o--,n++}return-1},i=function(e,t,r,n){for(var o=[],i=0;i<e.length;i++)if("text"===e[i].type){var l=e[i].data,d=!0,s=0,f=void 0;for(-1!==(f=l.indexOf(t))&&(s=f,o.push({type:"text",data:l.slice(0,s)}),d=!1);;){if(d){if(-1===(f=l.indexOf(t,s)))break;o.push({type:"text",data:l.slice(s,f)}),s=f}else{if(-1===(f=a(r,l,s+t.length)))break;o.push({type:"math",data:l.slice(s+t.length,f),rawData:l.slice(s,f+r.length),display:n}),s=f+r.length}d=!d}o.push({type:"text",data:l.slice(s)})}else o.push(e[i]);return o},l=function(e,t){for(var r=function(e,t){for(var r=[{type:"text",data:e}],n=0;n<t.length;n++){var o=t[n];r=i(r,o.left,o.right,o.display||!1)}return r}(e,t.delimiters),n=document.createDocumentFragment(),a=0;a<r.length;a++)if("text"===r[a].type)n.appendChild(document.createTextNode(r[a].data));else{var l=document.createElement("span"),d=r[a].data;t.displayMode=r[a].display;try{t.preProcess&&(d=t.preProcess(d)),o.a.render(d,l,t)}catch(e){if(!(e instanceof o.a.ParseError))throw e;t.errorCallback("KaTeX auto-render: Failed to parse `"+r[a].data+"` with ",e),n.appendChild(document.createTextNode(r[a].rawData));continue}n.appendChild(l)}return n};t.default=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},function e(t,r){for(var n=0;n<t.childNodes.length;n++){var o=t.childNodes[n];if(3===o.nodeType){var a=l(o.textContent,r);n+=a.childNodes.length-1,t.replaceChild(a,o)}else 1===o.nodeType&&function(){var t=" "+o.className+" ";-1===r.ignoredTags.indexOf(o.nodeName.toLowerCase())&&r.ignoredClasses.every(function(e){return-1===t.indexOf(" "+e+" ")})&&e(o,r)}()}}(e,r)}}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.mjs b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.mjs
new file mode 100644
index 0000000..58de8b6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/auto-render.mjs
@@ -0,0 +1,215 @@
+import katex from '../katex.mjs';
+
+/* eslint no-constant-condition:0 */
+const findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
+  // Adapted from
+  // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
+  let index = startIndex;
+  let braceLevel = 0;
+  const delimLength = delimiter.length;
+
+  while (index < text.length) {
+    const character = text[index];
+
+    if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
+      return index;
+    } else if (character === "\\") {
+      index++;
+    } else if (character === "{") {
+      braceLevel++;
+    } else if (character === "}") {
+      braceLevel--;
+    }
+
+    index++;
+  }
+
+  return -1;
+};
+
+const splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
+  const finalData = [];
+
+  for (let i = 0; i < startData.length; i++) {
+    if (startData[i].type === "text") {
+      const text = startData[i].data;
+      let lookingForLeft = true;
+      let currIndex = 0;
+      let nextIndex;
+      nextIndex = text.indexOf(leftDelim);
+
+      if (nextIndex !== -1) {
+        currIndex = nextIndex;
+        finalData.push({
+          type: "text",
+          data: text.slice(0, currIndex)
+        });
+        lookingForLeft = false;
+      }
+
+      while (true) {
+        if (lookingForLeft) {
+          nextIndex = text.indexOf(leftDelim, currIndex);
+
+          if (nextIndex === -1) {
+            break;
+          }
+
+          finalData.push({
+            type: "text",
+            data: text.slice(currIndex, nextIndex)
+          });
+          currIndex = nextIndex;
+        } else {
+          nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
+
+          if (nextIndex === -1) {
+            break;
+          }
+
+          finalData.push({
+            type: "math",
+            data: text.slice(currIndex + leftDelim.length, nextIndex),
+            rawData: text.slice(currIndex, nextIndex + rightDelim.length),
+            display: display
+          });
+          currIndex = nextIndex + rightDelim.length;
+        }
+
+        lookingForLeft = !lookingForLeft;
+      }
+
+      finalData.push({
+        type: "text",
+        data: text.slice(currIndex)
+      });
+    } else {
+      finalData.push(startData[i]);
+    }
+  }
+
+  return finalData;
+};
+
+/* eslint no-console:0 */
+
+const splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
+  let data = [{
+    type: "text",
+    data: text
+  }];
+
+  for (let i = 0; i < delimiters.length; i++) {
+    const delimiter = delimiters[i];
+    data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
+  }
+
+  return data;
+};
+/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
+ * API, we should copy it before mutating.
+ */
+
+
+const renderMathInText = function renderMathInText(text, optionsCopy) {
+  const data = splitWithDelimiters(text, optionsCopy.delimiters);
+  const fragment = document.createDocumentFragment();
+
+  for (let i = 0; i < data.length; i++) {
+    if (data[i].type === "text") {
+      fragment.appendChild(document.createTextNode(data[i].data));
+    } else {
+      const span = document.createElement("span");
+      let math = data[i].data; // Override any display mode defined in the settings with that
+      // defined by the text itself
+
+      optionsCopy.displayMode = data[i].display;
+
+      try {
+        if (optionsCopy.preProcess) {
+          math = optionsCopy.preProcess(math);
+        }
+
+        katex.render(math, span, optionsCopy);
+      } catch (e) {
+        if (!(e instanceof katex.ParseError)) {
+          throw e;
+        }
+
+        optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
+        fragment.appendChild(document.createTextNode(data[i].rawData));
+        continue;
+      }
+
+      fragment.appendChild(span);
+    }
+  }
+
+  return fragment;
+};
+
+const renderElem = function renderElem(elem, optionsCopy) {
+  for (let i = 0; i < elem.childNodes.length; i++) {
+    const childNode = elem.childNodes[i];
+
+    if (childNode.nodeType === 3) {
+      // Text node
+      const frag = renderMathInText(childNode.textContent, optionsCopy);
+      i += frag.childNodes.length - 1;
+      elem.replaceChild(frag, childNode);
+    } else if (childNode.nodeType === 1) {
+      // Element node
+      const className = ' ' + childNode.className + ' ';
+      const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1);
+
+      if (shouldRender) {
+        renderElem(childNode, optionsCopy);
+      }
+    } // Otherwise, it's something else, and ignore it.
+
+  }
+};
+
+const renderMathInElement = function renderMathInElement(elem, options) {
+  if (!elem) {
+    throw new Error("No element provided to render");
+  }
+
+  const optionsCopy = {}; // Object.assign(optionsCopy, option)
+
+  for (const option in options) {
+    if (options.hasOwnProperty(option)) {
+      optionsCopy[option] = options[option];
+    }
+  } // default options
+
+
+  optionsCopy.delimiters = optionsCopy.delimiters || [{
+    left: "$$",
+    right: "$$",
+    display: true
+  }, {
+    left: "\\(",
+    right: "\\)",
+    display: false
+  }, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
+  // {left: "$", right: "$", display: false},
+  //  \[…\] must come last in this array. Otherwise, renderMathInElement
+  //  will search for \[ before it searches for $$ or  \(
+  // That makes it susceptible to finding a \\[0.3em] row delimiter and
+  // treating it as if it were the start of a KaTeX math zone.
+  {
+    left: "\\[",
+    right: "\\]",
+    display: true
+  }];
+  optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
+  optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
+  optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
+  // math elements within a single call to `renderMathInElement`.
+
+  optionsCopy.macros = optionsCopy.macros || {};
+  renderElem(elem, optionsCopy);
+};
+
+export default renderMathInElement;
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.css b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.css
new file mode 100644
index 0000000..90801d8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.css
@@ -0,0 +1,14 @@
+/* Force selection of entire .katex/.katex-display blocks, so that we can
+ * copy/paste the entire source code.  If you omit this CSS, partial
+ * selections of a formula will work, but will copy the ugly HTML
+ * representation instead of the LaTeX source code.  (Full selections will
+ * still produce the LaTeX source code.)
+ */
+.katex,
+.katex-display {
+    user-select: all;
+    -moz-user-select: all;
+    -webkit-user-select: all;
+    -ms-user-select: all;
+}
+
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.js
new file mode 100644
index 0000000..4649f8f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.js
@@ -0,0 +1,213 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else {
+		var a = factory();
+		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
+	}
+})((typeof self !== 'undefined' ? self : this), function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// extracted by mini-css-extract-plugin
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+
+// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
+var copy_tex = __webpack_require__(0);
+
+// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
+// Set these to how you want inline and display math to be delimited.
+var defaultCopyDelimiters = {
+  inline: ['$', '$'],
+  // alternative: ['\(', '\)']
+  display: ['$$', '$$'] // alternative: ['\[', '\]']
+
+}; // Replace .katex elements with their TeX source (<annotation> element).
+// Modifies fragment in-place.  Useful for writing your own 'copy' handler,
+// as in copy-tex.js.
+
+var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
+  if (copyDelimiters === void 0) {
+    copyDelimiters = defaultCopyDelimiters;
+  }
+
+  // Remove .katex-html blocks that are preceded by .katex-mathml blocks
+  // (which will get replaced below).
+  var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
+
+  for (var i = 0; i < katexHtml.length; i++) {
+    var element = katexHtml[i];
+
+    if (element.remove) {
+      element.remove(null);
+    } else {
+      element.parentNode.removeChild(element);
+    }
+  } // Replace .katex-mathml elements with their annotation (TeX source)
+  // descendant, with inline delimiters.
+
+
+  var katexMathml = fragment.querySelectorAll('.katex-mathml');
+
+  for (var _i = 0; _i < katexMathml.length; _i++) {
+    var _element = katexMathml[_i];
+
+    var texSource = _element.querySelector('annotation');
+
+    if (texSource) {
+      if (_element.replaceWith) {
+        _element.replaceWith(texSource);
+      } else {
+        _element.parentNode.replaceChild(texSource, _element);
+      }
+
+      texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
+    }
+  } // Switch display math to display delimiters.
+
+
+  var displays = fragment.querySelectorAll('.katex-display annotation');
+
+  for (var _i2 = 0; _i2 < displays.length; _i2++) {
+    var _element2 = displays[_i2];
+    _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
+  }
+
+  return fragment;
+};
+/* harmony default export */ var katex2tex = (katexReplaceWithTex);
+// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
+ // Global copy handler to modify behavior on .katex elements.
+
+document.addEventListener('copy', function (event) {
+  var selection = window.getSelection();
+
+  if (selection.isCollapsed) {
+    return; // default action OK if selection is empty
+  }
+
+  var fragment = selection.getRangeAt(0).cloneContents();
+
+  if (!fragment.querySelector('.katex-mathml')) {
+    return; // default action OK if no .katex-mathml elements
+  } // Preserve usual HTML copy/paste behavior.
+
+
+  var html = [];
+
+  for (var i = 0; i < fragment.childNodes.length; i++) {
+    html.push(fragment.childNodes[i].outerHTML);
+  }
+
+  event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
+
+  event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling.
+
+  event.preventDefault();
+});
+// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js
+/**
+ * This is the webpack entry point for KaTeX. As ECMAScript doesn't support
+ * CSS modules natively, a separate entry point is used.
+ */
+
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.css b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.css
new file mode 100644
index 0000000..555ed11
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.css
@@ -0,0 +1 @@
+.katex,.katex-display{user-select:all;-moz-user-select:all;-webkit-user-select:all;-ms-user-select:all}
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.js
new file mode 100644
index 0000000..e0354d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.min.js
@@ -0,0 +1 @@
+!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){},function(e,t,n){"use strict";n.r(t);n(0);var r={inline:["$","$"],display:["$$","$$"]},o=function(e,t){void 0===t&&(t=r);for(var n=e.querySelectorAll(".katex-mathml + .katex-html"),o=0;o<n.length;o++){var l=n[o];l.remove?l.remove(null):l.parentNode.removeChild(l)}for(var i=e.querySelectorAll(".katex-mathml"),a=0;a<i.length;a++){var u=i[a],f=u.querySelector("annotation");f&&(u.replaceWith?u.replaceWith(f):u.parentNode.replaceChild(f,u),f.innerHTML=t.inline[0]+f.innerHTML+t.inline[1])}for(var c=e.querySelectorAll(".katex-display annotation"),d=0;d<c.length;d++){var p=c[d];p.innerHTML=t.display[0]+p.innerHTML.substr(t.inline[0].length,p.innerHTML.length-t.inline[0].length-t.inline[1].length)+t.display[1]}return e};document.addEventListener("copy",function(e){var t=window.getSelection();if(!t.isCollapsed){var n=t.getRangeAt(0).cloneContents();if(n.querySelector(".katex-mathml")){for(var r=[],l=0;l<n.childNodes.length;l++)r.push(n.childNodes[l].outerHTML);e.clipboardData.setData("text/html",r.join("")),e.clipboardData.setData("text/plain",o(n).textContent),e.preventDefault()}}})}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.mjs b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.mjs
new file mode 100644
index 0000000..b6ed1ee
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/copy-tex.mjs
@@ -0,0 +1,85 @@
+// Set these to how you want inline and display math to be delimited.
+const defaultCopyDelimiters = {
+  inline: ['$', '$'],
+  // alternative: ['\(', '\)']
+  display: ['$$', '$$'] // alternative: ['\[', '\]']
+
+}; // Replace .katex elements with their TeX source (<annotation> element).
+// Modifies fragment in-place.  Useful for writing your own 'copy' handler,
+// as in copy-tex.js.
+
+const katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
+  if (copyDelimiters === void 0) {
+    copyDelimiters = defaultCopyDelimiters;
+  }
+
+  // Remove .katex-html blocks that are preceded by .katex-mathml blocks
+  // (which will get replaced below).
+  const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
+
+  for (let i = 0; i < katexHtml.length; i++) {
+    const element = katexHtml[i];
+
+    if (element.remove) {
+      element.remove(null);
+    } else {
+      element.parentNode.removeChild(element);
+    }
+  } // Replace .katex-mathml elements with their annotation (TeX source)
+  // descendant, with inline delimiters.
+
+
+  const katexMathml = fragment.querySelectorAll('.katex-mathml');
+
+  for (let i = 0; i < katexMathml.length; i++) {
+    const element = katexMathml[i];
+    const texSource = element.querySelector('annotation');
+
+    if (texSource) {
+      if (element.replaceWith) {
+        element.replaceWith(texSource);
+      } else {
+        element.parentNode.replaceChild(texSource, element);
+      }
+
+      texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
+    }
+  } // Switch display math to display delimiters.
+
+
+  const displays = fragment.querySelectorAll('.katex-display annotation');
+
+  for (let i = 0; i < displays.length; i++) {
+    const element = displays[i];
+    element.innerHTML = copyDelimiters.display[0] + element.innerHTML.substr(copyDelimiters.inline[0].length, element.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
+  }
+
+  return fragment;
+};
+
+document.addEventListener('copy', function (event) {
+  const selection = window.getSelection();
+
+  if (selection.isCollapsed) {
+    return; // default action OK if selection is empty
+  }
+
+  const fragment = selection.getRangeAt(0).cloneContents();
+
+  if (!fragment.querySelector('.katex-mathml')) {
+    return; // default action OK if no .katex-mathml elements
+  } // Preserve usual HTML copy/paste behavior.
+
+
+  const html = [];
+
+  for (let i = 0; i < fragment.childNodes.length; i++) {
+    html.push(fragment.childNodes[i].outerHTML);
+  }
+
+  event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
+
+  event.clipboardData.setData('text/plain', katexReplaceWithTex(fragment).textContent); // Prevent normal copy handling.
+
+  event.preventDefault();
+});
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.js
new file mode 100644
index 0000000..daa01a6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.js
@@ -0,0 +1,137 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory(require("katex"));
+	else if(typeof define === 'function' && define.amd)
+		define(["katex"], factory);
+	else {
+		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
+		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
+	}
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
+
+var scripts = document.body.getElementsByTagName("script");
+scripts = Array.prototype.slice.call(scripts);
+scripts.forEach(function (script) {
+  if (!script.type || !script.type.match(/math\/tex/i)) {
+    return -1;
+  }
+
+  var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
+  var katexElement = document.createElement(display ? "div" : "span");
+  katexElement.setAttribute("class", display ? "equation" : "inline-equation");
+
+  try {
+    katex__WEBPACK_IMPORTED_MODULE_0___default.a.render(script.text, katexElement, {
+      displayMode: display
+    });
+  } catch (err) {
+    //console.error(err); linter doesn't like this
+    katexElement.textContent = script.text;
+  }
+
+  script.parentNode.replaceChild(katexElement, script);
+});
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.min.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.min.js
new file mode 100644
index 0000000..ae9f528
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.min.js
@@ -0,0 +1 @@
+!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),u=document.body.getElementsByTagName("script");(u=Array.prototype.slice.call(u)).forEach(function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{o.a.render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.mjs b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.mjs
new file mode 100644
index 0000000..7cfb90e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mathtex-script-type.mjs
@@ -0,0 +1,24 @@
+import katex from '../katex.mjs';
+
+let scripts = document.body.getElementsByTagName("script");
+scripts = Array.prototype.slice.call(scripts);
+scripts.forEach(function (script) {
+  if (!script.type || !script.type.match(/math\/tex/i)) {
+    return -1;
+  }
+
+  const display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
+  const katexElement = document.createElement(display ? "div" : "span");
+  katexElement.setAttribute("class", display ? "equation" : "inline-equation");
+
+  try {
+    katex.render(script.text, katexElement, {
+      displayMode: display
+    });
+  } catch (err) {
+    //console.error(err); linter doesn't like this
+    katexElement.textContent = script.text;
+  }
+
+  script.parentNode.replaceChild(katexElement, script);
+});
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.js
new file mode 100644
index 0000000..f84566e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.js
@@ -0,0 +1,3241 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory(require("katex"));
+	else if(typeof define === 'function' && define.amd)
+		define(["katex"], factory);
+	else {
+		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
+		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
+	}
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
+/* eslint-disable */
+
+/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
+
+/* vim: set ts=2 et sw=2 tw=80: */
+
+/*************************************************************
+ *
+ *  KaTeX mhchem.js
+ *
+ *  This file implements a KaTeX version of mhchem version 3.3.0.
+ *  It is adapted from MathJax/extensions/TeX/mhchem.js
+ *  It differs from the MathJax version as follows:
+ *    1. The interface is changed so that it can be called from KaTeX, not MathJax.
+ *    2. \rlap and \llap are replaced with \mathrlap and \mathllap.
+ *    3. Four lines of code are edited in order to use \raisebox instead of \raise.
+ *    4. The reaction arrow code is simplified. All reaction arrows are rendered
+ *       using KaTeX extensible arrows instead of building non-extensible arrows.
+ *    5. \tripledash vertical alignment is slightly adjusted.
+ *
+ *    This code, as other KaTeX code, is released under the MIT license.
+ * 
+ * /*************************************************************
+ *
+ *  MathJax/extensions/TeX/mhchem.js
+ *
+ *  Implements the \ce command for handling chemical formulas
+ *  from the mhchem LaTeX package.
+ *
+ *  ---------------------------------------------------------------------
+ *
+ *  Copyright (c) 2011-2015 The MathJax Consortium
+ *  Copyright (c) 2015-2018 Martin Hensel
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+//
+// Coding Style
+//   - use '' for identifiers that can by minified/uglified
+//   - use "" for strings that need to stay untouched
+// version: "3.3.0" for MathJax and KaTeX
+// Add \ce, \pu, and \tripledash to the KaTeX macros.
+katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\ce", function (context) {
+  return chemParse(context.consumeArgs(1)[0], "ce");
+});
+
+katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\pu", function (context) {
+  return chemParse(context.consumeArgs(1)[0], "pu");
+}); //  Needed for \bond for the ~ forms
+//  Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not 
+//  a mathematical minus, U+2212. So we need that extra 0.56.
+
+
+katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
+
+ //
+//  This is the main function for handing the \ce and \pu commands.
+//  It takes the argument to \ce or \pu and returns the corresponding TeX string.
+//
+
+var chemParse = function chemParse(tokens, stateMachine) {
+  // Recreate the argument string from KaTeX's array of tokens.
+  var str = "";
+  var expectedLoc = tokens[tokens.length - 1].loc.start;
+
+  for (var i = tokens.length - 1; i >= 0; i--) {
+    if (tokens[i].loc.start > expectedLoc) {
+      // context.consumeArgs has eaten a space.
+      str += " ";
+      expectedLoc = tokens[i].loc.start;
+    }
+
+    str += tokens[i].text;
+    expectedLoc += tokens[i].text.length;
+  }
+
+  var tex = texify.go(mhchemParser.go(str, stateMachine));
+  return tex;
+}; //
+// Core parser for mhchem syntax  (recursive)
+//
+
+/** @type {MhchemParser} */
+
+
+var mhchemParser = {
+  //
+  // Parses mchem \ce syntax
+  //
+  // Call like
+  //   go("H2O");
+  //
+  go: function go(input, stateMachine) {
+    if (!input) {
+      return [];
+    }
+
+    if (stateMachine === undefined) {
+      stateMachine = 'ce';
+    }
+
+    var state = '0'; //
+    // String buffers for parsing:
+    //
+    // buffer.a == amount
+    // buffer.o == element
+    // buffer.b == left-side superscript
+    // buffer.p == left-side subscript
+    // buffer.q == right-side subscript
+    // buffer.d == right-side superscript
+    //
+    // buffer.r == arrow
+    // buffer.rdt == arrow, script above, type
+    // buffer.rd == arrow, script above, content
+    // buffer.rqt == arrow, script below, type
+    // buffer.rq == arrow, script below, content
+    //
+    // buffer.text_
+    // buffer.rm
+    // etc.
+    //
+    // buffer.parenthesisLevel == int, starting at 0
+    // buffer.sb == bool, space before
+    // buffer.beginsWithBond == bool
+    //
+    // These letters are also used as state names.
+    //
+    // Other states:
+    // 0 == begin of main part (arrow/operator unlikely)
+    // 1 == next entity
+    // 2 == next entity (arrow/operator unlikely)
+    // 3 == next atom
+    // c == macro
+    //
+
+    /** @type {Buffer} */
+
+    var buffer = {};
+    buffer['parenthesisLevel'] = 0;
+    input = input.replace(/\n/g, " ");
+    input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-");
+    input = input.replace(/[\u2026]/g, "..."); //
+    // Looks through mhchemParser.transitions, to execute a matching action
+    // (recursive)
+    //
+
+    var lastInput;
+    var watchdog = 10;
+    /** @type {ParserOutput[]} */
+
+    var output = [];
+
+    while (true) {
+      if (lastInput !== input) {
+        watchdog = 10;
+        lastInput = input;
+      } else {
+        watchdog--;
+      } //
+      // Find actions in transition table
+      //
+
+
+      var machine = mhchemParser.stateMachines[stateMachine];
+      var t = machine.transitions[state] || machine.transitions['*'];
+
+      iterateTransitions: for (var i = 0; i < t.length; i++) {
+        var matches = mhchemParser.patterns.match_(t[i].pattern, input);
+
+        if (matches) {
+          //
+          // Execute actions
+          //
+          var task = t[i].task;
+
+          for (var iA = 0; iA < task.action_.length; iA++) {
+            var o; //
+            // Find and execute action
+            //
+
+            if (machine.actions[task.action_[iA].type_]) {
+              o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
+            } else if (mhchemParser.actions[task.action_[iA].type_]) {
+              o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
+            } else {
+              throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action
+            } //
+            // Add output
+            //
+
+
+            mhchemParser.concatArray(output, o);
+          } //
+          // Set next state,
+          // Shorten input,
+          // Continue with next character
+          //   (= apply only one transition per position)
+          //
+
+
+          state = task.nextState || state;
+
+          if (input.length > 0) {
+            if (!task.revisit) {
+              input = matches.remainder;
+            }
+
+            if (!task.toContinue) {
+              break iterateTransitions;
+            }
+          } else {
+            return output;
+          }
+        }
+      } //
+      // Prevent infinite loop
+      //
+
+
+      if (watchdog <= 0) {
+        throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character
+      }
+    }
+  },
+  concatArray: function concatArray(a, b) {
+    if (b) {
+      if (Array.isArray(b)) {
+        for (var iB = 0; iB < b.length; iB++) {
+          a.push(b[iB]);
+        }
+      } else {
+        a.push(b);
+      }
+    }
+  },
+  patterns: {
+    //
+    // Matching patterns
+    // either regexps or function that return null or {match_:"a", remainder:"bc"}
+    //
+    patterns: {
+      // property names must not look like integers ("2") for correct property traversal order, later on
+      'empty': /^$/,
+      'else': /^./,
+      'else2': /^./,
+      'space': /^\s/,
+      'space A': /^\s(?=[A-Z\\$])/,
+      'space$': /^\s$/,
+      'a-z': /^[a-z]/,
+      'x': /^x/,
+      'x$': /^x$/,
+      'i$': /^i$/,
+      'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,
+      '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,
+      'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,
+      '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,
+      'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,
+      'digits': /^[0-9]+/,
+      '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,
+      '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/,
+      '(-)(9.,9)(e)(99)': function e99(input) {
+        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);
+
+        if (m && m[0]) {
+          return {
+            match_: m.splice(1),
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      '(-)(9)^(-9)': function _(input) {
+        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);
+
+        if (m && m[0]) {
+          return {
+            match_: m.splice(1),
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      'state of aggregation $': function stateOfAggregation$(input) {
+        // ... or crystal system
+        var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat)
+
+        if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) {
+          return a;
+        } //  AND end of 'phrase'
+
+
+        var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$)
+
+        if (m) {
+          return {
+            match_: m[0],
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/,
+      '{[(': /^(?:\\\{|\[|\()/,
+      ')]}': /^(?:\)|\]|\\\})/,
+      ', ': /^[,;]\s*/,
+      ',': /^[,;]/,
+      '.': /^[.]/,
+      '. ': /^([.\u22C5\u00B7\u2022])\s*/,
+      '...': /^\.\.\.(?=$|[^.])/,
+      '* ': /^([*])\s*/,
+      '^{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}");
+      },
+      '^($...$)': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", "");
+      },
+      '^a': /^\^([0-9]+|[^\\_])/,
+      '^\\x{}{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '^\\x{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '^\\x': /^\^(\\[a-zA-Z]+)\s*/,
+      '^(-1)': /^\^(-?\d+)/,
+      '\'': /^'/,
+      '_{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}");
+      },
+      '_($...$)': function _$$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", "");
+      },
+      '_9': /^_([+\-]?[0-9]+|[^\\])/,
+      '_\\x{}{}': function _X(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '_\\x{}': function _X(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '_\\x': /^_(\\[a-zA-Z]+)\s*/,
+      '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,
+      '{}': /^\{\}/,
+      '{...}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", "");
+      },
+      '{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}");
+      },
+      '$...$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
+      },
+      '${(...)}$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$");
+      },
+      '$(...)$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$");
+      },
+      '=<>': /^[=<>]/,
+      '#': /^[#\u2261]/,
+      '+': /^\+/,
+      '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/,
+      // -space -, -; -] -/ -$ -state-of-aggregation
+      '-9': /^-(?=[0-9])/,
+      '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,
+      '-': /^-/,
+      'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,
+      'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,
+      'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,
+      '\\bond{(...)}': function bond(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}");
+      },
+      '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,
+      'CMT': /^[CMT](?=\[)/,
+      '[(...)]': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]");
+      },
+      '1st-level escape': /^(&|\\\\|\\hline)\s*/,
+      '\\,': /^(?:\\[,\ ;:])/,
+      // \\x - but output no space before
+      '\\x{}{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '\\x{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/,
+      '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,
+      'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,
+      // only those with numbers in front, because the others will be formatted correctly anyway
+      'others': /^[\/~|]/,
+      '\\frac{(...)}': function frac(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}");
+      },
+      '\\overset{(...)}': function overset(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}");
+      },
+      "\\underset{(...)}": function underset(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}");
+      },
+      "\\underbrace{(...)}": function underbrace(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}");
+      },
+      '\\color{(...)}0': function color0(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}");
+      },
+      '\\color{(...)}{(...)}1': function color1(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}");
+      },
+      '\\color(...){(...)}2': function color2(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}");
+      },
+      '\\ce{(...)}': function ce(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}");
+      },
+      'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
+      'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
+      // 0 could be oxidation or charge
+      'roman numeral': /^[IVX]+/,
+      '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,
+      'amount': function amount(input) {
+        var match; // e.g. 2, 0.5, 1/2, -2, n/2, +;  $a$ could be added later in parsing
+
+        match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/);
+
+        if (match) {
+          return {
+            match_: match[0],
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
+
+        if (a) {
+          // e.g. $2n-1$, $-$
+          match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/);
+
+          if (match) {
+            return {
+              match_: match[0],
+              remainder: input.substr(match[0].length)
+            };
+          }
+        }
+
+        return null;
+      },
+      'amount2': function amount2(input) {
+        return this['amount'](input);
+      },
+      '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,
+      'formula$': function formula$(input) {
+        if (input.match(/^\([a-z]+\)$/)) {
+          return null;
+        } // state of aggregation = no formula
+
+
+        var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);
+
+        if (match) {
+          return {
+            match_: match[0],
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        return null;
+      },
+      'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,
+      '/': /^\s*(\/)\s*/,
+      '//': /^\s*(\/\/)\s*/,
+      '*': /^\s*[*.]\s*/
+    },
+    findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {
+      /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */
+      var _match = function _match(input, pattern) {
+        if (typeof pattern === "string") {
+          if (input.indexOf(pattern) !== 0) {
+            return null;
+          }
+
+          return pattern;
+        } else {
+          var match = input.match(pattern);
+
+          if (!match) {
+            return null;
+          }
+
+          return match[0];
+        }
+      };
+      /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */
+
+
+      var _findObserveGroups = function _findObserveGroups(input, i, endChars) {
+        var braces = 0;
+
+        while (i < input.length) {
+          var a = input.charAt(i);
+
+          var match = _match(input.substr(i), endChars);
+
+          if (match !== null && braces === 0) {
+            return {
+              endMatchBegin: i,
+              endMatchEnd: i + match.length
+            };
+          } else if (a === "{") {
+            braces++;
+          } else if (a === "}") {
+            if (braces === 0) {
+              throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"];
+            } else {
+              braces--;
+            }
+          }
+
+          i++;
+        }
+
+        if (braces > 0) {
+          return null;
+        }
+
+        return null;
+      };
+
+      var match = _match(input, begExcl);
+
+      if (match === null) {
+        return null;
+      }
+
+      input = input.substr(match.length);
+      match = _match(input, begIncl);
+
+      if (match === null) {
+        return null;
+      }
+
+      var e = _findObserveGroups(input, match.length, endIncl || endExcl);
+
+      if (e === null) {
+        return null;
+      }
+
+      var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin);
+
+      if (!(beg2Excl || beg2Incl)) {
+        return {
+          match_: match1,
+          remainder: input.substr(e.endMatchEnd)
+        };
+      } else {
+        var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);
+
+        if (group2 === null) {
+          return null;
+        }
+        /** @type {string[]} */
+
+
+        var matchRet = [match1, group2.match_];
+        return {
+          match_: combine ? matchRet.join("") : matchRet,
+          remainder: group2.remainder
+        };
+      }
+    },
+    //
+    // Matching function
+    // e.g. match("a", input) will look for the regexp called "a" and see if it matches
+    // returns null or {match_:"a", remainder:"bc"}
+    //
+    match_: function match_(m, input) {
+      var pattern = mhchemParser.patterns.patterns[m];
+
+      if (pattern === undefined) {
+        throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern
+      } else if (typeof pattern === "function") {
+        return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser
+      } else {
+        // RegExp
+        var match = input.match(pattern);
+
+        if (match) {
+          var mm;
+
+          if (match[2]) {
+            mm = [match[1], match[2]];
+          } else if (match[1]) {
+            mm = match[1];
+          } else {
+            mm = match[0];
+          }
+
+          return {
+            match_: mm,
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        return null;
+      }
+    }
+  },
+  //
+  // Generic state machine actions
+  //
+  actions: {
+    'a=': function a(buffer, m) {
+      buffer.a = (buffer.a || "") + m;
+    },
+    'b=': function b(buffer, m) {
+      buffer.b = (buffer.b || "") + m;
+    },
+    'p=': function p(buffer, m) {
+      buffer.p = (buffer.p || "") + m;
+    },
+    'o=': function o(buffer, m) {
+      buffer.o = (buffer.o || "") + m;
+    },
+    'q=': function q(buffer, m) {
+      buffer.q = (buffer.q || "") + m;
+    },
+    'd=': function d(buffer, m) {
+      buffer.d = (buffer.d || "") + m;
+    },
+    'rm=': function rm(buffer, m) {
+      buffer.rm = (buffer.rm || "") + m;
+    },
+    'text=': function text(buffer, m) {
+      buffer.text_ = (buffer.text_ || "") + m;
+    },
+    'insert': function insert(buffer, m, a) {
+      return {
+        type_: a
+      };
+    },
+    'insert+p1': function insertP1(buffer, m, a) {
+      return {
+        type_: a,
+        p1: m
+      };
+    },
+    'insert+p1+p2': function insertP1P2(buffer, m, a) {
+      return {
+        type_: a,
+        p1: m[0],
+        p2: m[1]
+      };
+    },
+    'copy': function copy(buffer, m) {
+      return m;
+    },
+    'rm': function rm(buffer, m) {
+      return {
+        type_: 'rm',
+        p1: m || ""
+      };
+    },
+    'text': function text(buffer, m) {
+      return mhchemParser.go(m, 'text');
+    },
+    '{text}': function text(buffer, m) {
+      var ret = ["{"];
+      mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));
+      ret.push("}");
+      return ret;
+    },
+    'tex-math': function texMath(buffer, m) {
+      return mhchemParser.go(m, 'tex-math');
+    },
+    'tex-math tight': function texMathTight(buffer, m) {
+      return mhchemParser.go(m, 'tex-math tight');
+    },
+    'bond': function bond(buffer, m, k) {
+      return {
+        type_: 'bond',
+        kind_: k || m
+      };
+    },
+    'color0-output': function color0Output(buffer, m) {
+      return {
+        type_: 'color0',
+        color: m[0]
+      };
+    },
+    'ce': function ce(buffer, m) {
+      return mhchemParser.go(m);
+    },
+    '1/2': function _(buffer, m) {
+      /** @type {ParserOutput[]} */
+      var ret = [];
+
+      if (m.match(/^[+\-]/)) {
+        ret.push(m.substr(0, 1));
+        m = m.substr(1);
+      }
+
+      var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);
+      n[1] = n[1].replace(/\$/g, "");
+      ret.push({
+        type_: 'frac',
+        p1: n[1],
+        p2: n[2]
+      });
+
+      if (n[3]) {
+        n[3] = n[3].replace(/\$/g, "");
+        ret.push({
+          type_: 'tex-math',
+          p1: n[3]
+        });
+      }
+
+      return ret;
+    },
+    '9,9': function _(buffer, m) {
+      return mhchemParser.go(m, '9,9');
+    }
+  },
+  //
+  // createTransitions
+  // convert  { 'letter': { 'state': { action_: 'output' } } }  to  { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }
+  // with expansion of 'a|b' to 'a' and 'b' (at 2 places)
+  //
+  createTransitions: function createTransitions(o) {
+    var pattern, state;
+    /** @type {string[]} */
+
+    var stateArray;
+    var i; //
+    // 1. Collect all states
+    //
+
+    /** @type {Transitions} */
+
+    var transitions = {};
+
+    for (pattern in o) {
+      for (state in o[pattern]) {
+        stateArray = state.split("|");
+        o[pattern][state].stateArray = stateArray;
+
+        for (i = 0; i < stateArray.length; i++) {
+          transitions[stateArray[i]] = [];
+        }
+      }
+    } //
+    // 2. Fill states
+    //
+
+
+    for (pattern in o) {
+      for (state in o[pattern]) {
+        stateArray = o[pattern][state].stateArray || [];
+
+        for (i = 0; i < stateArray.length; i++) {
+          //
+          // 2a. Normalize actions into array:  'text=' ==> [{type_:'text='}]
+          // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)
+          //
+
+          /** @type {any} */
+          var p = o[pattern][state];
+
+          if (p.action_) {
+            p.action_ = [].concat(p.action_);
+
+            for (var k = 0; k < p.action_.length; k++) {
+              if (typeof p.action_[k] === "string") {
+                p.action_[k] = {
+                  type_: p.action_[k]
+                };
+              }
+            }
+          } else {
+            p.action_ = [];
+          } //
+          // 2.b Multi-insert
+          //
+
+
+          var patternArray = pattern.split("|");
+
+          for (var j = 0; j < patternArray.length; j++) {
+            if (stateArray[i] === '*') {
+              // insert into all
+              for (var t in transitions) {
+                transitions[t].push({
+                  pattern: patternArray[j],
+                  task: p
+                });
+              }
+            } else {
+              transitions[stateArray[i]].push({
+                pattern: patternArray[j],
+                task: p
+              });
+            }
+          }
+        }
+      }
+    }
+
+    return transitions;
+  },
+  stateMachines: {}
+}; //
+// Definition of state machines
+//
+
+mhchemParser.stateMachines = {
+  //
+  // \ce state machines
+  //
+  //#region ce
+  'ce': {
+    // main parser
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      'else': {
+        '0|1|2': {
+          action_: 'beginsWithBond=false',
+          revisit: true,
+          toContinue: true
+        }
+      },
+      'oxidation$': {
+        '0': {
+          action_: 'oxidation-output'
+        }
+      },
+      'CMT': {
+        'r': {
+          action_: 'rdt=',
+          nextState: 'rt'
+        },
+        'rd': {
+          action_: 'rqt=',
+          nextState: 'rdt'
+        }
+      },
+      'arrowUpDown': {
+        '0|1|2|as': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '1'
+        }
+      },
+      'uprightEntities': {
+        '0|1|2': {
+          action_: ['o=', 'output'],
+          nextState: '1'
+        }
+      },
+      'orbital': {
+        '0|1|2|3': {
+          action_: 'o=',
+          nextState: 'o'
+        }
+      },
+      '->': {
+        '0|1|2|3': {
+          action_: 'r=',
+          nextState: 'r'
+        },
+        'a|as': {
+          action_: ['output', 'r='],
+          nextState: 'r'
+        },
+        '*': {
+          action_: ['output', 'r='],
+          nextState: 'r'
+        }
+      },
+      '+': {
+        'o': {
+          action_: 'd= kv',
+          nextState: 'd'
+        },
+        'd|D': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qd|qD': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'dq': {
+          action_: ['output', 'd='],
+          nextState: 'd'
+        },
+        '3': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '0'
+        }
+      },
+      'amount': {
+        '0|2': {
+          action_: 'a=',
+          nextState: 'a'
+        }
+      },
+      'pm-operator': {
+        '0|1|2|a|as': {
+          action_: ['sb=false', 'output', {
+            type_: 'operator',
+            option: '\\pm'
+          }],
+          nextState: '0'
+        }
+      },
+      'operator': {
+        '0|1|2|a|as': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '0'
+        }
+      },
+      '-$': {
+        'o|q': {
+          action_: ['charge or bond', 'output'],
+          nextState: 'qd'
+        },
+        'd': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'D': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qd': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qD|dq': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        }
+      },
+      '-9': {
+        '3|o': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '3'
+        }
+      },
+      '- orbital overlap': {
+        'o': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        },
+        'd': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        }
+      },
+      '-': {
+        '0|1|2': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'beginsWithBond=true', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        '3': {
+          action_: {
+            type_: 'bond',
+            option: "-"
+          }
+        },
+        'a': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        },
+        'as': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        'b': {
+          action_: 'b='
+        },
+        'o': {
+          action_: {
+            type_: '- after o/d',
+            option: false
+          },
+          nextState: '2'
+        },
+        'q': {
+          action_: {
+            type_: '- after o/d',
+            option: false
+          },
+          nextState: '2'
+        },
+        'd|qd|dq': {
+          action_: {
+            type_: '- after o/d',
+            option: true
+          },
+          nextState: '2'
+        },
+        'D|qD|p': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        }
+      },
+      'amount2': {
+        '1|3': {
+          action_: 'a=',
+          nextState: 'a'
+        }
+      },
+      'letters': {
+        '0|1|2|3|a|as|b|p|bp|o': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        'q|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        },
+        'd|D|qd|qD': {
+          action_: 'o after d',
+          nextState: 'o'
+        }
+      },
+      'digits': {
+        'o': {
+          action_: 'q=',
+          nextState: 'q'
+        },
+        'd|D': {
+          action_: 'q=',
+          nextState: 'dq'
+        },
+        'q': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        },
+        'a': {
+          action_: 'o=',
+          nextState: 'o'
+        }
+      },
+      'space A': {
+        'b|p|bp': {}
+      },
+      'space': {
+        'a': {
+          nextState: 'as'
+        },
+        '0': {
+          action_: 'sb=false'
+        },
+        '1|2': {
+          action_: 'sb=true'
+        },
+        'r|rt|rd|rdt|rdq': {
+          action_: 'output',
+          nextState: '0'
+        },
+        '*': {
+          action_: ['output', 'sb=true'],
+          nextState: '1'
+        }
+      },
+      '1st-level escape': {
+        '1|2': {
+          action_: ['output', {
+            type_: 'insert+p1',
+            option: '1st-level escape'
+          }]
+        },
+        '*': {
+          action_: ['output', {
+            type_: 'insert+p1',
+            option: '1st-level escape'
+          }],
+          nextState: '0'
+        }
+      },
+      '[(...)]': {
+        'r|rt': {
+          action_: 'rd=',
+          nextState: 'rd'
+        },
+        'rd|rdt': {
+          action_: 'rq=',
+          nextState: 'rdq'
+        }
+      },
+      '...': {
+        'o|d|D|dq|qd|qD': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "..."
+          }],
+          nextState: '3'
+        },
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, {
+            type_: 'insert',
+            option: 'ellipsis'
+          }],
+          nextState: '1'
+        }
+      },
+      '. |* ': {
+        '*': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'addition compound'
+          }],
+          nextState: '1'
+        }
+      },
+      'state of aggregation $': {
+        '*': {
+          action_: ['output', 'state of aggregation'],
+          nextState: '1'
+        }
+      },
+      '{[(': {
+        'a|as|o': {
+          action_: ['o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        },
+        '0|1|2|3': {
+          action_: ['o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        },
+        '*': {
+          action_: ['output', 'o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        }
+      },
+      ')]}': {
+        '0|1|2|3|b|p|bp|o': {
+          action_: ['o=', 'parenthesisLevel--'],
+          nextState: 'o'
+        },
+        'a|as|d|D|q|qd|qD|dq': {
+          action_: ['output', 'o=', 'parenthesisLevel--'],
+          nextState: 'o'
+        }
+      },
+      ', ': {
+        '*': {
+          action_: ['output', 'comma'],
+          nextState: '0'
+        }
+      },
+      '^_': {
+        // ^ and _ without a sensible argument
+        '*': {}
+      },
+      '^{(...)}|^($...$)': {
+        '0|1|2|as': {
+          action_: 'b=',
+          nextState: 'b'
+        },
+        'p': {
+          action_: 'b=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'd= kv',
+          nextState: 'D'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qD'
+        },
+        'd|D|qd|qD|dq': {
+          action_: ['output', 'd='],
+          nextState: 'D'
+        }
+      },
+      '^a|^\\x{}{}|^\\x{}|^\\x|\'': {
+        '0|1|2|as': {
+          action_: 'b=',
+          nextState: 'b'
+        },
+        'p': {
+          action_: 'b=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'd= kv',
+          nextState: 'd'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'd|qd|D|qD': {
+          action_: 'd='
+        },
+        'dq': {
+          action_: ['output', 'd='],
+          nextState: 'd'
+        }
+      },
+      '_{(state of aggregation)}$': {
+        'd|D|q|qd|qD|dq': {
+          action_: ['output', 'q='],
+          nextState: 'q'
+        }
+      },
+      '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': {
+        '0|1|2|as': {
+          action_: 'p=',
+          nextState: 'p'
+        },
+        'b': {
+          action_: 'p=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'q=',
+          nextState: 'q'
+        },
+        'd|D': {
+          action_: 'q=',
+          nextState: 'dq'
+        },
+        'q|qd|qD|dq': {
+          action_: ['output', 'q='],
+          nextState: 'q'
+        }
+      },
+      '=<>': {
+        '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'bond'],
+          nextState: '3'
+        }
+      },
+      '#': {
+        '0|1|2|3|a|as|o': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, {
+            type_: 'bond',
+            option: "#"
+          }],
+          nextState: '3'
+        }
+      },
+      '{}': {
+        '*': {
+          action_: {
+            type_: 'output',
+            option: 1
+          },
+          nextState: '1'
+        }
+      },
+      '{...}': {
+        '0|1|2|3|a|as|b|p|bp': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        'o|d|D|q|qd|qD|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        }
+      },
+      '$...$': {
+        'a': {
+          action_: 'a='
+        },
+        // 2$n$
+        '0|1|2|3|as|b|p|bp|o': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        // not 'amount'
+        'as|o': {
+          action_: 'o='
+        },
+        'q|d|D|qd|qD|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        }
+      },
+      '\\bond{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'bond'],
+          nextState: "3"
+        }
+      },
+      '\\frac{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'frac-output'],
+          nextState: '3'
+        }
+      },
+      '\\overset{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'overset-output'],
+          nextState: '3'
+        }
+      },
+      "\\underset{(...)}": {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'underset-output'],
+          nextState: '3'
+        }
+      },
+      "\\underbrace{(...)}": {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'underbrace-output'],
+          nextState: '3'
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'color-output'],
+          nextState: '3'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'color0-output']
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'ce'],
+          nextState: '3'
+        }
+      },
+      '\\,': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'copy'],
+          nextState: '1'
+        }
+      },
+      '\\x{}{}|\\x{}|\\x': {
+        '0|1|2|3|a|as|b|p|bp|o|c0': {
+          action_: ['o=', 'output'],
+          nextState: '3'
+        },
+        '*': {
+          action_: ['output', 'o=', 'output'],
+          nextState: '3'
+        }
+      },
+      'others': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'copy'],
+          nextState: '3'
+        }
+      },
+      'else2': {
+        'a': {
+          action_: 'a to o',
+          nextState: 'o',
+          revisit: true
+        },
+        'as': {
+          action_: ['output', 'sb=true'],
+          nextState: '1',
+          revisit: true
+        },
+        'r|rt|rd|rdt|rdq': {
+          action_: ['output'],
+          nextState: '0',
+          revisit: true
+        },
+        '*': {
+          action_: ['output', 'copy'],
+          nextState: '3'
+        }
+      }
+    }),
+    actions: {
+      'o after d': function oAfterD(buffer, m) {
+        var ret;
+
+        if ((buffer.d || "").match(/^[0-9]+$/)) {
+          var tmp = buffer.d;
+          buffer.d = undefined;
+          ret = this['output'](buffer);
+          buffer.b = tmp;
+        } else {
+          ret = this['output'](buffer);
+        }
+
+        mhchemParser.actions['o='](buffer, m);
+        return ret;
+      },
+      'd= kv': function dKv(buffer, m) {
+        buffer.d = m;
+        buffer.dType = 'kv';
+      },
+      'charge or bond': function chargeOrBond(buffer, m) {
+        if (buffer['beginsWithBond']) {
+          /** @type {ParserOutput[]} */
+          var ret = [];
+          mhchemParser.concatArray(ret, this['output'](buffer));
+          mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
+          return ret;
+        } else {
+          buffer.d = m;
+        }
+      },
+      '- after o/d': function afterOD(buffer, m, isAfterD) {
+        var c1 = mhchemParser.patterns.match_('orbital', buffer.o || "");
+        var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || "");
+        var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || "");
+        var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || "");
+        var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4);
+
+        if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {
+          buffer.o = '$' + buffer.o + '$';
+        }
+        /** @type {ParserOutput[]} */
+
+
+        var ret = [];
+
+        if (hyphenFollows) {
+          mhchemParser.concatArray(ret, this['output'](buffer));
+          ret.push({
+            type_: 'hyphen'
+          });
+        } else {
+          c1 = mhchemParser.patterns.match_('digits', buffer.d || "");
+
+          if (isAfterD && c1 && c1.remainder === '') {
+            mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));
+            mhchemParser.concatArray(ret, this['output'](buffer));
+          } else {
+            mhchemParser.concatArray(ret, this['output'](buffer));
+            mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
+          }
+        }
+
+        return ret;
+      },
+      'a to o': function aToO(buffer) {
+        buffer.o = buffer.a;
+        buffer.a = undefined;
+      },
+      'sb=true': function sbTrue(buffer) {
+        buffer.sb = true;
+      },
+      'sb=false': function sbFalse(buffer) {
+        buffer.sb = false;
+      },
+      'beginsWithBond=true': function beginsWithBondTrue(buffer) {
+        buffer['beginsWithBond'] = true;
+      },
+      'beginsWithBond=false': function beginsWithBondFalse(buffer) {
+        buffer['beginsWithBond'] = false;
+      },
+      'parenthesisLevel++': function parenthesisLevel(buffer) {
+        buffer['parenthesisLevel']++;
+      },
+      'parenthesisLevel--': function parenthesisLevel(buffer) {
+        buffer['parenthesisLevel']--;
+      },
+      'state of aggregation': function stateOfAggregation(buffer, m) {
+        return {
+          type_: 'state of aggregation',
+          p1: mhchemParser.go(m, 'o')
+        };
+      },
+      'comma': function comma(buffer, m) {
+        var a = m.replace(/\s*$/, '');
+        var withSpace = a !== m;
+
+        if (withSpace && buffer['parenthesisLevel'] === 0) {
+          return {
+            type_: 'comma enumeration L',
+            p1: a
+          };
+        } else {
+          return {
+            type_: 'comma enumeration M',
+            p1: a
+          };
+        }
+      },
+      'output': function output(buffer, m, entityFollows) {
+        // entityFollows:
+        //   undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)
+        //   1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)
+        //   2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as)
+
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret;
+
+        if (!buffer.r) {
+          ret = [];
+
+          if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {//ret = [];
+          } else {
+            if (buffer.sb) {
+              ret.push({
+                type_: 'entitySkip'
+              });
+            }
+
+            if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) {
+              buffer.o = buffer.a;
+              buffer.a = undefined;
+            } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {
+              buffer.o = buffer.a;
+              buffer.d = buffer.b;
+              buffer.q = buffer.p;
+              buffer.a = buffer.b = buffer.p = undefined;
+            } else {
+              if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) {
+                buffer.dType = 'oxidation';
+              } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) {
+                buffer.dType = undefined;
+              }
+            }
+
+            ret.push({
+              type_: 'chemfive',
+              a: mhchemParser.go(buffer.a, 'a'),
+              b: mhchemParser.go(buffer.b, 'bd'),
+              p: mhchemParser.go(buffer.p, 'pq'),
+              o: mhchemParser.go(buffer.o, 'o'),
+              q: mhchemParser.go(buffer.q, 'pq'),
+              d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'),
+              dType: buffer.dType
+            });
+          }
+        } else {
+          // r
+
+          /** @type {ParserOutput[]} */
+          var rd;
+
+          if (buffer.rdt === 'M') {
+            rd = mhchemParser.go(buffer.rd, 'tex-math');
+          } else if (buffer.rdt === 'T') {
+            rd = [{
+              type_: 'text',
+              p1: buffer.rd || ""
+            }];
+          } else {
+            rd = mhchemParser.go(buffer.rd);
+          }
+          /** @type {ParserOutput[]} */
+
+
+          var rq;
+
+          if (buffer.rqt === 'M') {
+            rq = mhchemParser.go(buffer.rq, 'tex-math');
+          } else if (buffer.rqt === 'T') {
+            rq = [{
+              type_: 'text',
+              p1: buffer.rq || ""
+            }];
+          } else {
+            rq = mhchemParser.go(buffer.rq);
+          }
+
+          ret = {
+            type_: 'arrow',
+            r: buffer.r,
+            rd: rd,
+            rq: rq
+          };
+        }
+
+        for (var p in buffer) {
+          if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {
+            delete buffer[p];
+          }
+        }
+
+        return ret;
+      },
+      'oxidation-output': function oxidationOutput(buffer, m) {
+        var ret = ["{"];
+        mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));
+        ret.push("}");
+        return ret;
+      },
+      'frac-output': function fracOutput(buffer, m) {
+        return {
+          type_: 'frac-ce',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'overset-output': function oversetOutput(buffer, m) {
+        return {
+          type_: 'overset',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'underset-output': function undersetOutput(buffer, m) {
+        return {
+          type_: 'underset',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'underbrace-output': function underbraceOutput(buffer, m) {
+        return {
+          type_: 'underbrace',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1])
+        };
+      },
+      'r=': function r(buffer, m) {
+        buffer.r = m;
+      },
+      'rdt=': function rdt(buffer, m) {
+        buffer.rdt = m;
+      },
+      'rd=': function rd(buffer, m) {
+        buffer.rd = m;
+      },
+      'rqt=': function rqt(buffer, m) {
+        buffer.rqt = m;
+      },
+      'rq=': function rq(buffer, m) {
+        buffer.rq = m;
+      },
+      'operator': function operator(buffer, m, p1) {
+        return {
+          type_: 'operator',
+          kind_: p1 || m
+        };
+      }
+    }
+  },
+  'a': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '1',
+          revisit: true
+        }
+      },
+      '$(...)$': {
+        '*': {
+          action_: 'tex-math tight',
+          nextState: '1'
+        }
+      },
+      ',': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'commaDecimal'
+          }
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {}
+  },
+  'o': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '1',
+          revisit: true
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '\\ca': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'circa'
+          }
+        }
+      },
+      '\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: '{text}'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {}
+  },
+  'text': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '{...}': {
+        '*': {
+          action_: 'text='
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '\\greek': {
+        '*': {
+          action_: ['output', 'rm']
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: ['output', 'copy']
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'text='
+        }
+      }
+    }),
+    actions: {
+      'output': function output(buffer) {
+        if (buffer.text_) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'text',
+            p1: buffer.text_
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  'pq': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'state of aggregation $': {
+        '*': {
+          action_: 'state of aggregation'
+        }
+      },
+      'i$': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '(KV letters),': {
+        '0': {
+          action_: 'rm',
+          nextState: '0'
+        }
+      },
+      'formula$': {
+        '0': {
+          nextState: 'f',
+          revisit: true
+        }
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: 'text'
+        }
+      },
+      'a-z': {
+        'f': {
+          action_: 'tex-math'
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '-9.,9': {
+        '*': {
+          action_: '9,9'
+        }
+      },
+      ',': {
+        '*': {
+          action_: {
+            type_: 'insert+p1',
+            option: 'comma enumeration S'
+          }
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: 'color-output'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: 'color0-output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: 'ce'
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'state of aggregation': function stateOfAggregation(buffer, m) {
+        return {
+          type_: 'state of aggregation subscript',
+          p1: mhchemParser.go(m, 'o')
+        };
+      },
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1], 'pq')
+        };
+      }
+    }
+  },
+  'bd': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'x$': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      'formula$': {
+        '0': {
+          nextState: 'f',
+          revisit: true
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '-9.,9 no missing 0': {
+        '*': {
+          action_: '9,9'
+        }
+      },
+      '.': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'electron dot'
+          }
+        }
+      },
+      'a-z': {
+        'f': {
+          action_: 'tex-math'
+        }
+      },
+      'x': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'KV x'
+          }
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '\'': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'prime'
+          }
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: 'text'
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: 'color-output'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: 'color0-output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: 'ce'
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1], 'bd')
+        };
+      }
+    }
+  },
+  'oxidation': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'roman numeral': {
+        '*': {
+          action_: 'roman-numeral'
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'roman-numeral': function romanNumeral(buffer, m) {
+        return {
+          type_: 'roman numeral',
+          p1: m || ""
+        };
+      }
+    }
+  },
+  'tex-math': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: ['output', 'ce']
+        }
+      },
+      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'o='
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'o='
+        }
+      }
+    }),
+    actions: {
+      'output': function output(buffer) {
+        if (buffer.o) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'tex-math',
+            p1: buffer.o
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  'tex-math tight': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: ['output', 'ce']
+        }
+      },
+      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'o='
+        }
+      },
+      '-|+': {
+        '*': {
+          action_: 'tight operator'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'o='
+        }
+      }
+    }),
+    actions: {
+      'tight operator': function tightOperator(buffer, m) {
+        buffer.o = (buffer.o || "") + "{" + m + "}";
+      },
+      'output': function output(buffer) {
+        if (buffer.o) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'tex-math',
+            p1: buffer.o
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  '9,9': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      ',': {
+        '*': {
+          action_: 'comma'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'comma': function comma() {
+        return {
+          type_: 'commaDecimal'
+        };
+      }
+    }
+  },
+  //#endregion
+  //
+  // \pu state machines
+  //
+  //#region pu
+  'pu': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      'space$': {
+        '*': {
+          action_: ['output', 'space']
+        }
+      },
+      '{[(|)]}': {
+        '0|a': {
+          action_: 'copy'
+        }
+      },
+      '(-)(9)^(-9)': {
+        '0': {
+          action_: 'number^',
+          nextState: 'a'
+        }
+      },
+      '(-)(9.,9)(e)(99)': {
+        '0': {
+          action_: 'enumber',
+          nextState: 'a'
+        }
+      },
+      'space': {
+        '0|a': {}
+      },
+      'pm-operator': {
+        '0|a': {
+          action_: {
+            type_: 'operator',
+            option: '\\pm'
+          },
+          nextState: '0'
+        }
+      },
+      'operator': {
+        '0|a': {
+          action_: 'copy',
+          nextState: '0'
+        }
+      },
+      '//': {
+        'd': {
+          action_: 'o=',
+          nextState: '/'
+        }
+      },
+      '/': {
+        'd': {
+          action_: 'o=',
+          nextState: '/'
+        }
+      },
+      '{...}|else': {
+        '0|d': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'a': {
+          action_: ['space', 'd='],
+          nextState: 'd'
+        },
+        '/|q': {
+          action_: 'q=',
+          nextState: 'q'
+        }
+      }
+    }),
+    actions: {
+      'enumber': function enumber(buffer, m) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+
+        if (m[0] === "+-" || m[0] === "+/-") {
+          ret.push("\\pm ");
+        } else if (m[0]) {
+          ret.push(m[0]);
+        }
+
+        if (m[1]) {
+          mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
+
+          if (m[2]) {
+            if (m[2].match(/[,.]/)) {
+              mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));
+            } else {
+              ret.push(m[2]);
+            }
+          }
+
+          m[3] = m[4] || m[3];
+
+          if (m[3]) {
+            m[3] = m[3].trim();
+
+            if (m[3] === "e" || m[3].substr(0, 1) === "*") {
+              ret.push({
+                type_: 'cdot'
+              });
+            } else {
+              ret.push({
+                type_: 'times'
+              });
+            }
+          }
+        }
+
+        if (m[3]) {
+          ret.push("10^{" + m[5] + "}");
+        }
+
+        return ret;
+      },
+      'number^': function number(buffer, m) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+
+        if (m[0] === "+-" || m[0] === "+/-") {
+          ret.push("\\pm ");
+        } else if (m[0]) {
+          ret.push(m[0]);
+        }
+
+        mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
+        ret.push("^{" + m[2] + "}");
+        return ret;
+      },
+      'operator': function operator(buffer, m, p1) {
+        return {
+          type_: 'operator',
+          kind_: p1 || m
+        };
+      },
+      'space': function space() {
+        return {
+          type_: 'pu-space-1'
+        };
+      },
+      'output': function output(buffer) {
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret;
+        var md = mhchemParser.patterns.match_('{(...)}', buffer.d || "");
+
+        if (md && md.remainder === '') {
+          buffer.d = md.match_;
+        }
+
+        var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || "");
+
+        if (mq && mq.remainder === '') {
+          buffer.q = mq.match_;
+        }
+
+        if (buffer.d) {
+          buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
+          buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
+        }
+
+        if (buffer.q) {
+          // fraction
+          buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
+          buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
+          var b5 = {
+            d: mhchemParser.go(buffer.d, 'pu'),
+            q: mhchemParser.go(buffer.q, 'pu')
+          };
+
+          if (buffer.o === '//') {
+            ret = {
+              type_: 'pu-frac',
+              p1: b5.d,
+              p2: b5.q
+            };
+          } else {
+            ret = b5.d;
+
+            if (b5.d.length > 1 || b5.q.length > 1) {
+              ret.push({
+                type_: ' / '
+              });
+            } else {
+              ret.push({
+                type_: '/'
+              });
+            }
+
+            mhchemParser.concatArray(ret, b5.q);
+          }
+        } else {
+          // no fraction
+          ret = mhchemParser.go(buffer.d, 'pu-2');
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    }
+  },
+  'pu-2': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '*': {
+        '*': {
+          action_: ['output', 'cdot'],
+          nextState: '0'
+        }
+      },
+      '\\x': {
+        '*': {
+          action_: 'rm='
+        }
+      },
+      'space': {
+        '*': {
+          action_: ['output', 'space'],
+          nextState: '0'
+        }
+      },
+      '^{(...)}|^(-1)': {
+        '1': {
+          action_: '^(-1)'
+        }
+      },
+      '-9.,9': {
+        '0': {
+          action_: 'rm=',
+          nextState: '0'
+        },
+        '1': {
+          action_: '^(-1)',
+          nextState: '0'
+        }
+      },
+      '{...}|else': {
+        '*': {
+          action_: 'rm=',
+          nextState: '1'
+        }
+      }
+    }),
+    actions: {
+      'cdot': function cdot() {
+        return {
+          type_: 'tight cdot'
+        };
+      },
+      '^(-1)': function _(buffer, m) {
+        buffer.rm += "^{" + m + "}";
+      },
+      'space': function space() {
+        return {
+          type_: 'pu-space-2'
+        };
+      },
+      'output': function output(buffer) {
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret = [];
+
+        if (buffer.rm) {
+          var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || "");
+
+          if (mrm && mrm.remainder === '') {
+            ret = mhchemParser.go(mrm.match_, 'pu');
+          } else {
+            ret = {
+              type_: 'rm',
+              p1: buffer.rm
+            };
+          }
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    }
+  },
+  'pu-9,9': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '0': {
+          action_: 'output-0'
+        },
+        'o': {
+          action_: 'output-o'
+        }
+      },
+      ',': {
+        '0': {
+          action_: ['output-0', 'comma'],
+          nextState: 'o'
+        }
+      },
+      '.': {
+        '0': {
+          action_: ['output-0', 'copy'],
+          nextState: 'o'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'text='
+        }
+      }
+    }),
+    actions: {
+      'comma': function comma() {
+        return {
+          type_: 'commaDecimal'
+        };
+      },
+      'output-0': function output0(buffer) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+        buffer.text_ = buffer.text_ || "";
+
+        if (buffer.text_.length > 4) {
+          var a = buffer.text_.length % 3;
+
+          if (a === 0) {
+            a = 3;
+          }
+
+          for (var i = buffer.text_.length - 3; i > 0; i -= 3) {
+            ret.push(buffer.text_.substr(i, 3));
+            ret.push({
+              type_: '1000 separator'
+            });
+          }
+
+          ret.push(buffer.text_.substr(0, a));
+          ret.reverse();
+        } else {
+          ret.push(buffer.text_);
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      },
+      'output-o': function outputO(buffer) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+        buffer.text_ = buffer.text_ || "";
+
+        if (buffer.text_.length > 4) {
+          var a = buffer.text_.length - 3;
+
+          for (var i = 0; i < a; i += 3) {
+            ret.push(buffer.text_.substr(i, 3));
+            ret.push({
+              type_: '1000 separator'
+            });
+          }
+
+          ret.push(buffer.text_.substr(i));
+        } else {
+          ret.push(buffer.text_);
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    } //#endregion
+
+  }
+}; //
+// texify: Take MhchemParser output and convert it to TeX
+//
+
+/** @type {Texify} */
+
+var texify = {
+  go: function go(input, isInner) {
+    // (recursive, max 4 levels)
+    if (!input) {
+      return "";
+    }
+
+    var res = "";
+    var cee = false;
+
+    for (var i = 0; i < input.length; i++) {
+      var inputi = input[i];
+
+      if (typeof inputi === "string") {
+        res += inputi;
+      } else {
+        res += texify._go2(inputi);
+
+        if (inputi.type_ === '1st-level escape') {
+          cee = true;
+        }
+      }
+    }
+
+    if (!isInner && !cee && res) {
+      res = "{" + res + "}";
+    }
+
+    return res;
+  },
+  _goInner: function _goInner(input) {
+    if (!input) {
+      return input;
+    }
+
+    return texify.go(input, true);
+  },
+  _go2: function _go2(buf) {
+    /** @type {undefined | string} */
+    var res;
+
+    switch (buf.type_) {
+      case 'chemfive':
+        res = "";
+        var b5 = {
+          a: texify._goInner(buf.a),
+          b: texify._goInner(buf.b),
+          p: texify._goInner(buf.p),
+          o: texify._goInner(buf.o),
+          q: texify._goInner(buf.q),
+          d: texify._goInner(buf.d)
+        }; //
+        // a
+        //
+
+        if (b5.a) {
+          if (b5.a.match(/^[+\-]/)) {
+            b5.a = "{" + b5.a + "}";
+          }
+
+          res += b5.a + "\\,";
+        } //
+        // b and p
+        //
+
+
+        if (b5.b || b5.p) {
+          res += "{\\vphantom{X}}";
+          res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}";
+          res += "{\\vphantom{X}}";
+          res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}";
+          res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}";
+        } //
+        // o
+        //
+
+
+        if (b5.o) {
+          if (b5.o.match(/^[+\-]/)) {
+            b5.o = "{" + b5.o + "}";
+          }
+
+          res += b5.o;
+        } //
+        // q and d
+        //
+
+
+        if (buf.dType === 'kv') {
+          if (b5.d || b5.q) {
+            res += "{\\vphantom{X}}";
+          }
+
+          if (b5.d) {
+            res += "^{" + b5.d + "}";
+          }
+
+          if (b5.q) {
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+        } else if (buf.dType === 'oxidation') {
+          if (b5.d) {
+            res += "{\\vphantom{X}}";
+            res += "^{" + b5.d + "}";
+          }
+
+          if (b5.q) {
+            res += "{\\vphantom{X}}";
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+        } else {
+          if (b5.q) {
+            res += "{\\vphantom{X}}";
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+
+          if (b5.d) {
+            res += "{\\vphantom{X}}";
+            res += "^{" + b5.d + "}";
+          }
+        }
+
+        break;
+
+      case 'rm':
+        res = "\\mathrm{" + buf.p1 + "}";
+        break;
+
+      case 'text':
+        if (buf.p1.match(/[\^_]/)) {
+          buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}");
+          res = "\\mathrm{" + buf.p1 + "}";
+        } else {
+          res = "\\text{" + buf.p1 + "}";
+        }
+
+        break;
+
+      case 'roman numeral':
+        res = "\\mathrm{" + buf.p1 + "}";
+        break;
+
+      case 'state of aggregation':
+        res = "\\mskip2mu " + texify._goInner(buf.p1);
+        break;
+
+      case 'state of aggregation subscript':
+        res = "\\mskip1mu " + texify._goInner(buf.p1);
+        break;
+
+      case 'bond':
+        res = texify._getBond(buf.kind_);
+
+        if (!res) {
+          throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"];
+        }
+
+        break;
+
+      case 'frac':
+        var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}";
+        res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}";
+        break;
+
+      case 'pu-frac':
+        var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}";
+        break;
+
+      case 'tex-math':
+        res = buf.p1 + " ";
+        break;
+
+      case 'frac-ce':
+        res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'overset':
+        res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'underset':
+        res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'underbrace':
+        res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'color':
+        res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}";
+        break;
+
+      case 'color0':
+        res = "\\color{" + buf.color + "}";
+        break;
+
+      case 'arrow':
+        var b6 = {
+          rd: texify._goInner(buf.rd),
+          rq: texify._goInner(buf.rq)
+        };
+
+        var arrow = "\\x" + texify._getArrow(buf.r);
+
+        if (b6.rq) {
+          arrow += "[{" + b6.rq + "}]";
+        }
+
+        if (b6.rd) {
+          arrow += "{" + b6.rd + "}";
+        } else {
+          arrow += "{}";
+        }
+
+        res = arrow;
+        break;
+
+      case 'operator':
+        res = texify._getOperator(buf.kind_);
+        break;
+
+      case '1st-level escape':
+        res = buf.p1 + " "; // &, \\\\, \\hlin
+
+        break;
+
+      case 'space':
+        res = " ";
+        break;
+
+      case 'entitySkip':
+        res = "~";
+        break;
+
+      case 'pu-space-1':
+        res = "~";
+        break;
+
+      case 'pu-space-2':
+        res = "\\mkern3mu ";
+        break;
+
+      case '1000 separator':
+        res = "\\mkern2mu ";
+        break;
+
+      case 'commaDecimal':
+        res = "{,}";
+        break;
+
+      case 'comma enumeration L':
+        res = "{" + buf.p1 + "}\\mkern6mu ";
+        break;
+
+      case 'comma enumeration M':
+        res = "{" + buf.p1 + "}\\mkern3mu ";
+        break;
+
+      case 'comma enumeration S':
+        res = "{" + buf.p1 + "}\\mkern1mu ";
+        break;
+
+      case 'hyphen':
+        res = "\\text{-}";
+        break;
+
+      case 'addition compound':
+        res = "\\,{\\cdot}\\,";
+        break;
+
+      case 'electron dot':
+        res = "\\mkern1mu \\bullet\\mkern1mu ";
+        break;
+
+      case 'KV x':
+        res = "{\\times}";
+        break;
+
+      case 'prime':
+        res = "\\prime ";
+        break;
+
+      case 'cdot':
+        res = "\\cdot ";
+        break;
+
+      case 'tight cdot':
+        res = "\\mkern1mu{\\cdot}\\mkern1mu ";
+        break;
+
+      case 'times':
+        res = "\\times ";
+        break;
+
+      case 'circa':
+        res = "{\\sim}";
+        break;
+
+      case '^':
+        res = "uparrow";
+        break;
+
+      case 'v':
+        res = "downarrow";
+        break;
+
+      case 'ellipsis':
+        res = "\\ldots ";
+        break;
+
+      case '/':
+        res = "/";
+        break;
+
+      case ' / ':
+        res = "\\,/\\,";
+        break;
+
+      default:
+        assertNever(buf);
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+      // Missing texify rule or unknown MhchemParser output
+    }
+
+    assertString(res);
+    return res;
+  },
+  _getArrow: function _getArrow(a) {
+    switch (a) {
+      case "->":
+        return "rightarrow";
+
+      case "\u2192":
+        return "rightarrow";
+
+      case "\u27F6":
+        return "rightarrow";
+
+      case "<-":
+        return "leftarrow";
+
+      case "<->":
+        return "leftrightarrow";
+
+      case "<-->":
+        return "rightleftarrows";
+
+      case "<=>":
+        return "rightleftharpoons";
+
+      case "\u21CC":
+        return "rightleftharpoons";
+
+      case "<=>>":
+        return "rightequilibrium";
+
+      case "<<=>":
+        return "leftequilibrium";
+
+      default:
+        assertNever(a);
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  },
+  _getBond: function _getBond(a) {
+    switch (a) {
+      case "-":
+        return "{-}";
+
+      case "1":
+        return "{-}";
+
+      case "=":
+        return "{=}";
+
+      case "2":
+        return "{=}";
+
+      case "#":
+        return "{\\equiv}";
+
+      case "3":
+        return "{\\equiv}";
+
+      case "~":
+        return "{\\tripledash}";
+
+      case "~-":
+        return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
+
+      case "~=":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
+
+      case "~--":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
+
+      case "-~-":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
+
+      case "...":
+        return "{{\\cdot}{\\cdot}{\\cdot}}";
+
+      case "....":
+        return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";
+
+      case "->":
+        return "{\\rightarrow}";
+
+      case "<-":
+        return "{\\leftarrow}";
+
+      case "<":
+        return "{<}";
+
+      case ">":
+        return "{>}";
+
+      default:
+        assertNever(a);
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  },
+  _getOperator: function _getOperator(a) {
+    switch (a) {
+      case "+":
+        return " {}+{} ";
+
+      case "-":
+        return " {}-{} ";
+
+      case "=":
+        return " {}={} ";
+
+      case "<":
+        return " {}<{} ";
+
+      case ">":
+        return " {}>{} ";
+
+      case "<<":
+        return " {}\\ll{} ";
+
+      case ">>":
+        return " {}\\gg{} ";
+
+      case "\\pm":
+        return " {}\\pm{} ";
+
+      case "\\approx":
+        return " {}\\approx{} ";
+
+      case "$\\approx$":
+        return " {}\\approx{} ";
+
+      case "v":
+        return " \\downarrow{} ";
+
+      case "(v)":
+        return " \\downarrow{} ";
+
+      case "^":
+        return " \\uparrow{} ";
+
+      case "(^)":
+        return " \\uparrow{} ";
+
+      default:
+        assertNever(a);
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  }
+}; //
+// Helpers for code anaylsis
+// Will show type error at calling position
+//
+
+/** @param {number} a */
+
+function assertNever(a) {}
+/** @param {string} a */
+
+
+function assertString(a) {}
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.min.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.min.js
new file mode 100644
index 0000000..8fd9cca
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.min.js
@@ -0,0 +1 @@
+!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],e);else{var n="object"==typeof exports?e(require("katex")):e(t.katex);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}("undefined"!=typeof self?self:this,function(t){return function(t){var e={};function n(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return t[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(o,a,function(e){return t[e]}.bind(null,a));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(e,n){e.exports=t},function(t,e,n){"use strict";n.r(e);var o=n(0),a=n.n(o);a.a.__defineMacro("\\ce",function(t){return r(t.consumeArgs(1)[0],"ce")}),a.a.__defineMacro("\\pu",function(t){return r(t.consumeArgs(1)[0],"pu")}),a.a.__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");var r=function(t,e){for(var n="",o=t[t.length-1].loc.start,a=t.length-1;a>=0;a--)t[a].loc.start>o&&(n+=" ",o=t[a].loc.start),n+=t[a].text,o+=t[a].text.length;return c.go(i.go(n,e))},i={go:function(t,e){if(!t)return[];void 0===e&&(e="ce");var n,o="0",a={};a.parenthesisLevel=0,t=(t=(t=t.replace(/\n/g," ")).replace(/[\u2212\u2013\u2014\u2010]/g,"-")).replace(/[\u2026]/g,"...");for(var r=10,c=[];;){n!==t?(r=10,n=t):r--;var u=i.stateMachines[e],p=u.transitions[o]||u.transitions["*"];t:for(var s=0;s<p.length;s++){var _=i.patterns.match_(p[s].pattern,t);if(_){for(var d=p[s].task,m=0;m<d.action_.length;m++){var l;if(u.actions[d.action_[m].type_])l=u.actions[d.action_[m].type_](a,_.match_,d.action_[m].option);else{if(!i.actions[d.action_[m].type_])throw["MhchemBugA","mhchem bug A. Please report. ("+d.action_[m].type_+")"];l=i.actions[d.action_[m].type_](a,_.match_,d.action_[m].option)}i.concatArray(c,l)}if(o=d.nextState||o,!(t.length>0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(r<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n=0;n<e.length;n++)t.push(e[n]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\s/,"space A":/^\s(?=[A-Z\\$])/,space$:/^\s$/,"a-z":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,"\\greek":/^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,"one lowercase latin letter $":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,"$one lowercase latin letter$ $":/^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,"one lowercase greek letter $":/^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,"-9.,9":/^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,"-9.,9 no missing 0":/^[+\-]?[0-9]+(?:[.,][0-9]+)?/,"(-)(9.,9)(e)(99)":function(t){var e=t.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},"(-)(9)^(-9)":function(t){var e=t.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},"state of aggregation $":function(t){var e=i.patterns.findObserveGroups(t,"",/^\([a-z]{1,3}(?=[\),])/,")","");if(e&&e.remainder.match(/^($|[\s,;\)\]\}])/))return e;var n=t.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/);return n?{match_:n[0],remainder:t.substr(n[0].length)}:null},"_{(state of aggregation)}$":/^_\{(\([a-z]{1,3}\))\}/,"{[(":/^(?:\\\{|\[|\()/,")]}":/^(?:\)|\]|\\\})/,", ":/^[,;]\s*/,",":/^[,;]/,".":/^[.]/,". ":/^([.\u22C5\u00B7\u2022])\s*/,"...":/^\.\.\.(?=$|[^.])/,"* ":/^([*])\s*/,"^{(...)}":function(t){return i.patterns.findObserveGroups(t,"^{","","","}")},"^($...$)":function(t){return i.patterns.findObserveGroups(t,"^","$","$","")},"^a":/^\^([0-9]+|[^\\_])/,"^\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"^",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"^\\x{}":function(t){return i.patterns.findObserveGroups(t,"^",/^\\[a-zA-Z]+\{/,"}","")},"^\\x":/^\^(\\[a-zA-Z]+)\s*/,"^(-1)":/^\^(-?\d+)/,"'":/^'/,"_{(...)}":function(t){return i.patterns.findObserveGroups(t,"_{","","","}")},"_($...$)":function(t){return i.patterns.findObserveGroups(t,"_","$","$","")},_9:/^_([+\-]?[0-9]+|[^\\])/,"_\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"_",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"_\\x{}":function(t){return i.patterns.findObserveGroups(t,"_",/^\\[a-zA-Z]+\{/,"}","")},"_\\x":/^_(\\[a-zA-Z]+)\s*/,"^_":/^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,"{}":/^\{\}/,"{...}":function(t){return i.patterns.findObserveGroups(t,"","{","}","")},"{(...)}":function(t){return i.patterns.findObserveGroups(t,"{","","","}")},"$...$":function(t){return i.patterns.findObserveGroups(t,"","$","$","")},"${(...)}$":function(t){return i.patterns.findObserveGroups(t,"${","","","}$")},"$(...)$":function(t){return i.patterns.findObserveGroups(t,"$","","","$")},"=<>":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]\/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return i.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return i.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var n=i.patterns.findObserveGroups(t,"","$","$","");return n&&(e=n.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var s=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var n=t.match(e);return n?n[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,n)))return null;var d=function(t,e,n){for(var o=0;e<t.length;){var a=t.charAt(e),r=s(t.substr(e),n);if(null!==r&&0===o)return{endMatchBegin:e,endMatchEnd:e+r.length};if("{"===a)o++;else if("}"===a){if(0===o)throw["ExtraCloseMissingOpen","Extra close brace or missing open brace"];o--}e++}return null}(t,_.length,o||a);if(null===d)return null;var m=t.substring(0,o?d.endMatchEnd:d.endMatchBegin);if(r||i){var l=this.findObserveGroups(t.substr(d.endMatchEnd),r,i,c,u);if(null===l)return null;var f=[m,l.match_];return{match_:p?f.join(""):f,remainder:l.remainder}}return{match_:m,remainder:t.substr(d.endMatchEnd)}},match_:function(t,e){var n=i.patterns.patterns[t];if(void 0===n)throw["MhchemBugP","mhchem bug P. Please report. ("+t+")"];if("function"==typeof n)return i.patterns.patterns[t](e);var o=e.match(n);return o?{match_:o[2]?[o[1],o[2]]:o[1]?o[1]:o[0],remainder:e.substr(o[0].length)}:null}},actions:{"a=":function(t,e){t.a=(t.a||"")+e},"b=":function(t,e){t.b=(t.b||"")+e},"p=":function(t,e){t.p=(t.p||"")+e},"o=":function(t,e){t.o=(t.o||"")+e},"q=":function(t,e){t.q=(t.q||"")+e},"d=":function(t,e){t.d=(t.d||"")+e},"rm=":function(t,e){t.rm=(t.rm||"")+e},"text=":function(t,e){t.text_=(t.text_||"")+e},insert:function(t,e,n){return{type_:n}},"insert+p1":function(t,e,n){return{type_:n,p1:e}},"insert+p1+p2":function(t,e,n){return{type_:n,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:"rm",p1:e||""}},text:function(t,e){return i.go(e,"text")},"{text}":function(t,e){var n=["{"];return i.concatArray(n,i.go(e,"text")),n.push("}"),n},"tex-math":function(t,e){return i.go(e,"tex-math")},"tex-math tight":function(t,e){return i.go(e,"tex-math tight")},bond:function(t,e,n){return{type_:"bond",kind_:n||e}},"color0-output":function(t,e){return{type_:"color0",color:e[0]}},ce:function(t,e){return i.go(e)},"1/2":function(t,e){var n=[];e.match(/^[+\-]/)&&(n.push(e.substr(0,1)),e=e.substr(1));var o=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return o[1]=o[1].replace(/\$/g,""),n.push({type_:"frac",p1:o[1],p2:o[2]}),o[3]&&(o[3]=o[3].replace(/\$/g,""),n.push({type_:"tex-math",p1:o[3]})),n},"9,9":function(t,e){return i.go(e,"9,9")}},createTransitions:function(t){var e,n,o,a,r={};for(e in t)for(n in t[e])for(o=n.split("|"),t[e][n].stateArray=o,a=0;a<o.length;a++)r[o[a]]=[];for(e in t)for(n in t[e])for(o=t[e][n].stateArray||[],a=0;a<o.length;a++){var i=t[e][n];if(i.action_){i.action_=[].concat(i.action_);for(var c=0;c<i.action_.length;c++)"string"==typeof i.action_[c]&&(i.action_[c]={type_:i.action_[c]})}else i.action_=[];for(var u=e.split("|"),p=0;p<u.length;p++)if("*"===o[a])for(var s in r)r[s].push({pattern:u[p],task:i});else r[o[a]].push({pattern:u[p],task:i})}return r},stateMachines:{}};i.stateMachines={ce:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},else:{"0|1|2":{action_:"beginsWithBond=false",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:"oxidation-output"}},CMT:{r:{action_:"rdt=",nextState:"rt"},rd:{action_:"rqt=",nextState:"rdt"}},arrowUpDown:{"0|1|2|as":{action_:["sb=false","output","operator"],nextState:"1"}},uprightEntities:{"0|1|2":{action_:["o=","output"],nextState:"1"}},orbital:{"0|1|2|3":{action_:"o=",nextState:"o"}},"->":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var n;if((t.d||"").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,n=this.output(t),t.b=o}else n=this.output(t);return i.actions["o="](t,e),n},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var n=[];return i.concatArray(n,this.output(t)),i.concatArray(n,i.actions.bond(t,e,"-")),n}t.d=e},"- after o/d":function(t,e,n){var o=i.patterns.match_("orbital",t.o||""),a=i.patterns.match_("one lowercase greek letter $",t.o||""),r=i.patterns.match_("one lowercase latin letter $",t.o||""),c=i.patterns.match_("$one lowercase latin letter$ $",t.o||""),u="-"===e&&(o&&""===o.remainder||a||r||c);!u||t.a||t.b||t.p||t.d||t.q||o||!r||(t.o="$"+t.o+"$");var p=[];return u?(i.concatArray(p,this.output(t)),p.push({type_:"hyphen"})):(o=i.patterns.match_("digits",t.d||""),n&&o&&""===o.remainder?(i.concatArray(p,i.actions["d="](t,e)),i.concatArray(p,this.output(t))):(i.concatArray(p,this.output(t)),i.concatArray(p,i.actions.bond(t,e,"-")))),p},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:i.go(e,"o")}},comma:function(t,e){var n=e.replace(/\s*$/,"");return n!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:n}:{type_:"comma enumeration M",p1:n}},output:function(t,e,n){var o,a,r;t.r?(a="M"===t.rdt?i.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:i.go(t.rd),r="M"===t.rqt?i.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:i.go(t.rq),o={type_:"arrow",r:t.r,rd:a,rq:r}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&i.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:"chemfive",a:i.go(t.a,"a"),b:i.go(t.b,"bd"),p:i.go(t.p,"pq"),o:i.go(t.o,"o"),q:i.go(t.q,"pq"),d:i.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType})));for(var c in t)"parenthesisLevel"!==c&&"beginsWithBond"!==c&&delete t[c];return o},"oxidation-output":function(t,e){var n=["{"];return i.concatArray(n,i.go(e,"oxidation")),n.push("}"),n},"frac-output":function(t,e){return{type_:"frac-ce",p1:i.go(e[0]),p2:i.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:i.go(e[0]),p2:i.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:i.go(e[0]),p2:i.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:i.go(e[0]),p2:i.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,n){return{type_:"operator",kind_:n||e}}}},a:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var n in t)delete t[n];return e}}}},pq:{transitions:i.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:i.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"pq")}}}},bd:{transitions:i.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"bd")}}}},oxidation:{transitions:i.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"tex-math tight":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"9,9":{transitions:i.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),e[1]&&(i.concatArray(n,i.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?i.concatArray(n,i.go(e[2],"pu-9,9")):n.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),"e"===e[3]||"*"===e[3].substr(0,1)?n.push({type_:"cdot"}):n.push({type_:"times"}))),e[3]&&n.push("10^{"+e[5]+"}"),n},"number^":function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),i.concatArray(n,i.go(e[1],"pu-9,9")),n.push("^{"+e[2]+"}"),n},operator:function(t,e,n){return{type_:"operator",kind_:n||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,n=i.patterns.match_("{(...)}",t.d||"");n&&""===n.remainder&&(t.d=n.match_);var o=i.patterns.match_("{(...)}",t.q||"");if(o&&""===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var a={d:i.go(t.d,"pu"),q:i.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:a.d,p2:a.q}:(e=a.d,a.d.length>1||a.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),i.concatArray(e,a.q))}else e=i.go(t.d,"pu-2");for(var r in t)delete t[r];return e}}},"pu-2":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var n=i.patterns.match_("{(...)}",t.rm||"");e=n&&""===n.remainder?i.go(n.match_,"pu"):{type_:"rm",p1:t.rm}}for(var o in t)delete t[o];return e}}},"pu-9,9":{transitions:i.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var n=t.text_.length%3;0===n&&(n=3);for(var o=t.text_.length-3;o>0;o-=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var n=t.text_.length-3,o=0;o<n;o+=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(o))}else e.push(t.text_);for(var a in t)delete t[a];return e}}}};var c={go:function(t,e){if(!t)return"";for(var n="",o=!1,a=0;a<t.length;a++){var r=t[a];"string"==typeof r?n+=r:(n+=c._go2(r),"1st-level escape"===r.type_&&(o=!0))}return e||o||!n||(n="{"+n+"}"),n},_goInner:function(t){return t?c.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case"chemfive":e="";var n={a:c._goInner(t.a),b:c._goInner(t.b),p:c._goInner(t.p),o:c._goInner(t.o),q:c._goInner(t.q),d:c._goInner(t.d)};n.a&&(n.a.match(/^[+\-]/)&&(n.a="{"+n.a+"}"),e+=n.a+"\\,"),(n.b||n.p)&&(e+="{\\vphantom{X}}",e+="^{\\hphantom{"+(n.b||"")+"}}_{\\hphantom{"+(n.p||"")+"}}",e+="{\\vphantom{X}}",e+="^{\\smash[t]{\\vphantom{2}}\\mathllap{"+(n.b||"")+"}}",e+="_{\\vphantom{2}\\mathllap{\\smash[t]{"+(n.p||"")+"}}}"),n.o&&(n.o.match(/^[+\-]/)&&(n.o="{"+n.o+"}"),e+=n.o),"kv"===t.dType?((n.d||n.q)&&(e+="{\\vphantom{X}}"),n.d&&(e+="^{"+n.d+"}"),n.q&&(e+="_{\\smash[t]{"+n.q+"}}")):"oxidation"===t.dType?(n.d&&(e+="{\\vphantom{X}}",e+="^{"+n.d+"}"),n.q&&(e+="{\\vphantom{X}}",e+="_{\\smash[t]{"+n.q+"}}")):(n.q&&(e+="{\\vphantom{X}}",e+="_{\\smash[t]{"+n.q+"}}"),n.d&&(e+="{\\vphantom{X}}",e+="^{"+n.d+"}"));break;case"rm":e="\\mathrm{"+t.p1+"}";break;case"text":t.p1.match(/[\^_]/)?(t.p1=t.p1.replace(" ","~").replace("-","\\text{-}"),e="\\mathrm{"+t.p1+"}"):e="\\text{"+t.p1+"}";break;case"roman numeral":e="\\mathrm{"+t.p1+"}";break;case"state of aggregation":e="\\mskip2mu "+c._goInner(t.p1);break;case"state of aggregation subscript":e="\\mskip1mu "+c._goInner(t.p1);break;case"bond":if(!(e=c._getBond(t.kind_)))throw["MhchemErrorBond","mhchem Error. Unknown bond type ("+t.kind_+")"];break;case"frac":var o="\\frac{"+t.p1+"}{"+t.p2+"}";e="\\mathchoice{\\textstyle"+o+"}{"+o+"}{"+o+"}{"+o+"}";break;case"pu-frac":var a="\\frac{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";e="\\mathchoice{\\textstyle"+a+"}{"+a+"}{"+a+"}{"+a+"}";break;case"tex-math":e=t.p1+" ";break;case"frac-ce":e="\\frac{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"overset":e="\\overset{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"underset":e="\\underset{"+c._goInner(t.p1)+"}{"+c._goInner(t.p2)+"}";break;case"underbrace":e="\\underbrace{"+c._goInner(t.p1)+"}_{"+c._goInner(t.p2)+"}";break;case"color":e="{\\color{"+t.color1+"}{"+c._goInner(t.color2)+"}}";break;case"color0":e="\\color{"+t.color+"}";break;case"arrow":var r={rd:c._goInner(t.rd),rq:c._goInner(t.rq)},i="\\x"+c._getArrow(t.r);r.rq&&(i+="[{"+r.rq+"}]"),e=i+=r.rd?"{"+r.rd+"}":"{}";break;case"operator":e=c._getOperator(t.kind_);break;case"1st-level escape":e=t.p1+" ";break;case"space":e=" ";break;case"entitySkip":case"pu-space-1":e="~";break;case"pu-space-2":e="\\mkern3mu ";break;case"1000 separator":e="\\mkern2mu ";break;case"commaDecimal":e="{,}";break;case"comma enumeration L":e="{"+t.p1+"}\\mkern6mu ";break;case"comma enumeration M":e="{"+t.p1+"}\\mkern3mu ";break;case"comma enumeration S":e="{"+t.p1+"}\\mkern1mu ";break;case"hyphen":e="\\text{-}";break;case"addition compound":e="\\,{\\cdot}\\,";break;case"electron dot":e="\\mkern1mu \\bullet\\mkern1mu ";break;case"KV x":e="{\\times}";break;case"prime":e="\\prime ";break;case"cdot":e="\\cdot ";break;case"tight cdot":e="\\mkern1mu{\\cdot}\\mkern1mu ";break;case"times":e="\\times ";break;case"circa":e="{\\sim}";break;case"^":e="uparrow";break;case"v":e="downarrow";break;case"ellipsis":e="\\ldots ";break;case"/":e="/";break;case" / ":e="\\,/\\,";break;default:throw["MhchemBugT","mhchem bug T. Please report."]}return e},_getArrow:function(t){switch(t){case"->":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"rightleftarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.mjs b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.mjs
new file mode 100644
index 0000000..46241b5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/mhchem.mjs
@@ -0,0 +1,3109 @@
+import katex from '../katex.mjs';
+
+/* eslint-disable */
+
+/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
+
+/* vim: set ts=2 et sw=2 tw=80: */
+
+/*************************************************************
+ *
+ *  KaTeX mhchem.js
+ *
+ *  This file implements a KaTeX version of mhchem version 3.3.0.
+ *  It is adapted from MathJax/extensions/TeX/mhchem.js
+ *  It differs from the MathJax version as follows:
+ *    1. The interface is changed so that it can be called from KaTeX, not MathJax.
+ *    2. \rlap and \llap are replaced with \mathrlap and \mathllap.
+ *    3. Four lines of code are edited in order to use \raisebox instead of \raise.
+ *    4. The reaction arrow code is simplified. All reaction arrows are rendered
+ *       using KaTeX extensible arrows instead of building non-extensible arrows.
+ *    5. \tripledash vertical alignment is slightly adjusted.
+ *
+ *    This code, as other KaTeX code, is released under the MIT license.
+ * 
+ * /*************************************************************
+ *
+ *  MathJax/extensions/TeX/mhchem.js
+ *
+ *  Implements the \ce command for handling chemical formulas
+ *  from the mhchem LaTeX package.
+ *
+ *  ---------------------------------------------------------------------
+ *
+ *  Copyright (c) 2011-2015 The MathJax Consortium
+ *  Copyright (c) 2015-2018 Martin Hensel
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+//
+// Coding Style
+//   - use '' for identifiers that can by minified/uglified
+//   - use "" for strings that need to stay untouched
+// version: "3.3.0" for MathJax and KaTeX
+// Add \ce, \pu, and \tripledash to the KaTeX macros.
+katex.__defineMacro("\\ce", function (context) {
+  return chemParse(context.consumeArgs(1)[0], "ce");
+});
+
+katex.__defineMacro("\\pu", function (context) {
+  return chemParse(context.consumeArgs(1)[0], "pu");
+}); //  Needed for \bond for the ~ forms
+//  Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not 
+//  a mathematical minus, U+2212. So we need that extra 0.56.
+
+
+katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
+//  This is the main function for handing the \ce and \pu commands.
+//  It takes the argument to \ce or \pu and returns the corresponding TeX string.
+//
+
+var chemParse = function chemParse(tokens, stateMachine) {
+  // Recreate the argument string from KaTeX's array of tokens.
+  var str = "";
+  var expectedLoc = tokens[tokens.length - 1].loc.start;
+
+  for (var i = tokens.length - 1; i >= 0; i--) {
+    if (tokens[i].loc.start > expectedLoc) {
+      // context.consumeArgs has eaten a space.
+      str += " ";
+      expectedLoc = tokens[i].loc.start;
+    }
+
+    str += tokens[i].text;
+    expectedLoc += tokens[i].text.length;
+  }
+
+  var tex = texify.go(mhchemParser.go(str, stateMachine));
+  return tex;
+}; //
+// Core parser for mhchem syntax  (recursive)
+//
+
+/** @type {MhchemParser} */
+
+
+var mhchemParser = {
+  //
+  // Parses mchem \ce syntax
+  //
+  // Call like
+  //   go("H2O");
+  //
+  go: function go(input, stateMachine) {
+    if (!input) {
+      return [];
+    }
+
+    if (stateMachine === undefined) {
+      stateMachine = 'ce';
+    }
+
+    var state = '0'; //
+    // String buffers for parsing:
+    //
+    // buffer.a == amount
+    // buffer.o == element
+    // buffer.b == left-side superscript
+    // buffer.p == left-side subscript
+    // buffer.q == right-side subscript
+    // buffer.d == right-side superscript
+    //
+    // buffer.r == arrow
+    // buffer.rdt == arrow, script above, type
+    // buffer.rd == arrow, script above, content
+    // buffer.rqt == arrow, script below, type
+    // buffer.rq == arrow, script below, content
+    //
+    // buffer.text_
+    // buffer.rm
+    // etc.
+    //
+    // buffer.parenthesisLevel == int, starting at 0
+    // buffer.sb == bool, space before
+    // buffer.beginsWithBond == bool
+    //
+    // These letters are also used as state names.
+    //
+    // Other states:
+    // 0 == begin of main part (arrow/operator unlikely)
+    // 1 == next entity
+    // 2 == next entity (arrow/operator unlikely)
+    // 3 == next atom
+    // c == macro
+    //
+
+    /** @type {Buffer} */
+
+    var buffer = {};
+    buffer['parenthesisLevel'] = 0;
+    input = input.replace(/\n/g, " ");
+    input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-");
+    input = input.replace(/[\u2026]/g, "..."); //
+    // Looks through mhchemParser.transitions, to execute a matching action
+    // (recursive)
+    //
+
+    var lastInput;
+    var watchdog = 10;
+    /** @type {ParserOutput[]} */
+
+    var output = [];
+
+    while (true) {
+      if (lastInput !== input) {
+        watchdog = 10;
+        lastInput = input;
+      } else {
+        watchdog--;
+      } //
+      // Find actions in transition table
+      //
+
+
+      var machine = mhchemParser.stateMachines[stateMachine];
+      var t = machine.transitions[state] || machine.transitions['*'];
+
+      iterateTransitions: for (var i = 0; i < t.length; i++) {
+        var matches = mhchemParser.patterns.match_(t[i].pattern, input);
+
+        if (matches) {
+          //
+          // Execute actions
+          //
+          var task = t[i].task;
+
+          for (var iA = 0; iA < task.action_.length; iA++) {
+            var o; //
+            // Find and execute action
+            //
+
+            if (machine.actions[task.action_[iA].type_]) {
+              o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
+            } else if (mhchemParser.actions[task.action_[iA].type_]) {
+              o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
+            } else {
+              throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action
+            } //
+            // Add output
+            //
+
+
+            mhchemParser.concatArray(output, o);
+          } //
+          // Set next state,
+          // Shorten input,
+          // Continue with next character
+          //   (= apply only one transition per position)
+          //
+
+
+          state = task.nextState || state;
+
+          if (input.length > 0) {
+            if (!task.revisit) {
+              input = matches.remainder;
+            }
+
+            if (!task.toContinue) {
+              break iterateTransitions;
+            }
+          } else {
+            return output;
+          }
+        }
+      } //
+      // Prevent infinite loop
+      //
+
+
+      if (watchdog <= 0) {
+        throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character
+      }
+    }
+  },
+  concatArray: function concatArray(a, b) {
+    if (b) {
+      if (Array.isArray(b)) {
+        for (var iB = 0; iB < b.length; iB++) {
+          a.push(b[iB]);
+        }
+      } else {
+        a.push(b);
+      }
+    }
+  },
+  patterns: {
+    //
+    // Matching patterns
+    // either regexps or function that return null or {match_:"a", remainder:"bc"}
+    //
+    patterns: {
+      // property names must not look like integers ("2") for correct property traversal order, later on
+      'empty': /^$/,
+      'else': /^./,
+      'else2': /^./,
+      'space': /^\s/,
+      'space A': /^\s(?=[A-Z\\$])/,
+      'space$': /^\s$/,
+      'a-z': /^[a-z]/,
+      'x': /^x/,
+      'x$': /^x$/,
+      'i$': /^i$/,
+      'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,
+      '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,
+      'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,
+      '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,
+      'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,
+      'digits': /^[0-9]+/,
+      '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,
+      '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/,
+      '(-)(9.,9)(e)(99)': function e99(input) {
+        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);
+
+        if (m && m[0]) {
+          return {
+            match_: m.splice(1),
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      '(-)(9)^(-9)': function _(input) {
+        var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);
+
+        if (m && m[0]) {
+          return {
+            match_: m.splice(1),
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      'state of aggregation $': function stateOfAggregation$(input) {
+        // ... or crystal system
+        var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat)
+
+        if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) {
+          return a;
+        } //  AND end of 'phrase'
+
+
+        var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$)
+
+        if (m) {
+          return {
+            match_: m[0],
+            remainder: input.substr(m[0].length)
+          };
+        }
+
+        return null;
+      },
+      '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/,
+      '{[(': /^(?:\\\{|\[|\()/,
+      ')]}': /^(?:\)|\]|\\\})/,
+      ', ': /^[,;]\s*/,
+      ',': /^[,;]/,
+      '.': /^[.]/,
+      '. ': /^([.\u22C5\u00B7\u2022])\s*/,
+      '...': /^\.\.\.(?=$|[^.])/,
+      '* ': /^([*])\s*/,
+      '^{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}");
+      },
+      '^($...$)': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", "");
+      },
+      '^a': /^\^([0-9]+|[^\\_])/,
+      '^\\x{}{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '^\\x{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '^\\x': /^\^(\\[a-zA-Z]+)\s*/,
+      '^(-1)': /^\^(-?\d+)/,
+      '\'': /^'/,
+      '_{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}");
+      },
+      '_($...$)': function _$$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", "");
+      },
+      '_9': /^_([+\-]?[0-9]+|[^\\])/,
+      '_\\x{}{}': function _X(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '_\\x{}': function _X(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '_\\x': /^_(\\[a-zA-Z]+)\s*/,
+      '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,
+      '{}': /^\{\}/,
+      '{...}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", "");
+      },
+      '{(...)}': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}");
+      },
+      '$...$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
+      },
+      '${(...)}$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$");
+      },
+      '$(...)$': function $$(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$");
+      },
+      '=<>': /^[=<>]/,
+      '#': /^[#\u2261]/,
+      '+': /^\+/,
+      '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/,
+      // -space -, -; -] -/ -$ -state-of-aggregation
+      '-9': /^-(?=[0-9])/,
+      '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,
+      '-': /^-/,
+      'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,
+      'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,
+      'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,
+      '\\bond{(...)}': function bond(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}");
+      },
+      '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,
+      'CMT': /^[CMT](?=\[)/,
+      '[(...)]': function _(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]");
+      },
+      '1st-level escape': /^(&|\\\\|\\hline)\s*/,
+      '\\,': /^(?:\\[,\ ;:])/,
+      // \\x - but output no space before
+      '\\x{}{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true);
+      },
+      '\\x{}': function x(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "");
+      },
+      '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/,
+      '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,
+      'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,
+      // only those with numbers in front, because the others will be formatted correctly anyway
+      'others': /^[\/~|]/,
+      '\\frac{(...)}': function frac(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}");
+      },
+      '\\overset{(...)}': function overset(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}");
+      },
+      '\\underset{(...)}': function underset(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}");
+      },
+      '\\underbrace{(...)}': function underbrace(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}");
+      },
+      '\\color{(...)}0': function color0(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}");
+      },
+      '\\color{(...)}{(...)}1': function color1(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}");
+      },
+      '\\color(...){(...)}2': function color2(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}");
+      },
+      '\\ce{(...)}': function ce(input) {
+        return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}");
+      },
+      'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
+      'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,
+      // 0 could be oxidation or charge
+      'roman numeral': /^[IVX]+/,
+      '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,
+      'amount': function amount(input) {
+        var match; // e.g. 2, 0.5, 1/2, -2, n/2, +;  $a$ could be added later in parsing
+
+        match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/);
+
+        if (match) {
+          return {
+            match_: match[0],
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
+
+        if (a) {
+          // e.g. $2n-1$, $-$
+          match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/);
+
+          if (match) {
+            return {
+              match_: match[0],
+              remainder: input.substr(match[0].length)
+            };
+          }
+        }
+
+        return null;
+      },
+      'amount2': function amount2(input) {
+        return this['amount'](input);
+      },
+      '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,
+      'formula$': function formula$(input) {
+        if (input.match(/^\([a-z]+\)$/)) {
+          return null;
+        } // state of aggregation = no formula
+
+
+        var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);
+
+        if (match) {
+          return {
+            match_: match[0],
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        return null;
+      },
+      'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,
+      '/': /^\s*(\/)\s*/,
+      '//': /^\s*(\/\/)\s*/,
+      '*': /^\s*[*.]\s*/
+    },
+    findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {
+      /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */
+      var _match = function _match(input, pattern) {
+        if (typeof pattern === "string") {
+          if (input.indexOf(pattern) !== 0) {
+            return null;
+          }
+
+          return pattern;
+        } else {
+          var match = input.match(pattern);
+
+          if (!match) {
+            return null;
+          }
+
+          return match[0];
+        }
+      };
+      /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */
+
+
+      var _findObserveGroups = function _findObserveGroups(input, i, endChars) {
+        var braces = 0;
+
+        while (i < input.length) {
+          var a = input.charAt(i);
+
+          var match = _match(input.substr(i), endChars);
+
+          if (match !== null && braces === 0) {
+            return {
+              endMatchBegin: i,
+              endMatchEnd: i + match.length
+            };
+          } else if (a === "{") {
+            braces++;
+          } else if (a === "}") {
+            if (braces === 0) {
+              throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"];
+            } else {
+              braces--;
+            }
+          }
+
+          i++;
+        }
+
+        if (braces > 0) {
+          return null;
+        }
+
+        return null;
+      };
+
+      var match = _match(input, begExcl);
+
+      if (match === null) {
+        return null;
+      }
+
+      input = input.substr(match.length);
+      match = _match(input, begIncl);
+
+      if (match === null) {
+        return null;
+      }
+
+      var e = _findObserveGroups(input, match.length, endIncl || endExcl);
+
+      if (e === null) {
+        return null;
+      }
+
+      var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin);
+
+      if (!(beg2Excl || beg2Incl)) {
+        return {
+          match_: match1,
+          remainder: input.substr(e.endMatchEnd)
+        };
+      } else {
+        var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);
+
+        if (group2 === null) {
+          return null;
+        }
+        /** @type {string[]} */
+
+
+        var matchRet = [match1, group2.match_];
+        return {
+          match_: combine ? matchRet.join("") : matchRet,
+          remainder: group2.remainder
+        };
+      }
+    },
+    //
+    // Matching function
+    // e.g. match("a", input) will look for the regexp called "a" and see if it matches
+    // returns null or {match_:"a", remainder:"bc"}
+    //
+    match_: function match_(m, input) {
+      var pattern = mhchemParser.patterns.patterns[m];
+
+      if (pattern === undefined) {
+        throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern
+      } else if (typeof pattern === "function") {
+        return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser
+      } else {
+        // RegExp
+        var match = input.match(pattern);
+
+        if (match) {
+          var mm;
+
+          if (match[2]) {
+            mm = [match[1], match[2]];
+          } else if (match[1]) {
+            mm = match[1];
+          } else {
+            mm = match[0];
+          }
+
+          return {
+            match_: mm,
+            remainder: input.substr(match[0].length)
+          };
+        }
+
+        return null;
+      }
+    }
+  },
+  //
+  // Generic state machine actions
+  //
+  actions: {
+    'a=': function a(buffer, m) {
+      buffer.a = (buffer.a || "") + m;
+    },
+    'b=': function b(buffer, m) {
+      buffer.b = (buffer.b || "") + m;
+    },
+    'p=': function p(buffer, m) {
+      buffer.p = (buffer.p || "") + m;
+    },
+    'o=': function o(buffer, m) {
+      buffer.o = (buffer.o || "") + m;
+    },
+    'q=': function q(buffer, m) {
+      buffer.q = (buffer.q || "") + m;
+    },
+    'd=': function d(buffer, m) {
+      buffer.d = (buffer.d || "") + m;
+    },
+    'rm=': function rm(buffer, m) {
+      buffer.rm = (buffer.rm || "") + m;
+    },
+    'text=': function text(buffer, m) {
+      buffer.text_ = (buffer.text_ || "") + m;
+    },
+    'insert': function insert(buffer, m, a) {
+      return {
+        type_: a
+      };
+    },
+    'insert+p1': function insertP1(buffer, m, a) {
+      return {
+        type_: a,
+        p1: m
+      };
+    },
+    'insert+p1+p2': function insertP1P2(buffer, m, a) {
+      return {
+        type_: a,
+        p1: m[0],
+        p2: m[1]
+      };
+    },
+    'copy': function copy(buffer, m) {
+      return m;
+    },
+    'rm': function rm(buffer, m) {
+      return {
+        type_: 'rm',
+        p1: m || ""
+      };
+    },
+    'text': function text(buffer, m) {
+      return mhchemParser.go(m, 'text');
+    },
+    '{text}': function text(buffer, m) {
+      var ret = ["{"];
+      mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));
+      ret.push("}");
+      return ret;
+    },
+    'tex-math': function texMath(buffer, m) {
+      return mhchemParser.go(m, 'tex-math');
+    },
+    'tex-math tight': function texMathTight(buffer, m) {
+      return mhchemParser.go(m, 'tex-math tight');
+    },
+    'bond': function bond(buffer, m, k) {
+      return {
+        type_: 'bond',
+        kind_: k || m
+      };
+    },
+    'color0-output': function color0Output(buffer, m) {
+      return {
+        type_: 'color0',
+        color: m[0]
+      };
+    },
+    'ce': function ce(buffer, m) {
+      return mhchemParser.go(m);
+    },
+    '1/2': function _(buffer, m) {
+      /** @type {ParserOutput[]} */
+      var ret = [];
+
+      if (m.match(/^[+\-]/)) {
+        ret.push(m.substr(0, 1));
+        m = m.substr(1);
+      }
+
+      var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);
+      n[1] = n[1].replace(/\$/g, "");
+      ret.push({
+        type_: 'frac',
+        p1: n[1],
+        p2: n[2]
+      });
+
+      if (n[3]) {
+        n[3] = n[3].replace(/\$/g, "");
+        ret.push({
+          type_: 'tex-math',
+          p1: n[3]
+        });
+      }
+
+      return ret;
+    },
+    '9,9': function _(buffer, m) {
+      return mhchemParser.go(m, '9,9');
+    }
+  },
+  //
+  // createTransitions
+  // convert  { 'letter': { 'state': { action_: 'output' } } }  to  { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }
+  // with expansion of 'a|b' to 'a' and 'b' (at 2 places)
+  //
+  createTransitions: function createTransitions(o) {
+    var pattern, state;
+    /** @type {string[]} */
+
+    var stateArray;
+    var i; //
+    // 1. Collect all states
+    //
+
+    /** @type {Transitions} */
+
+    var transitions = {};
+
+    for (pattern in o) {
+      for (state in o[pattern]) {
+        stateArray = state.split("|");
+        o[pattern][state].stateArray = stateArray;
+
+        for (i = 0; i < stateArray.length; i++) {
+          transitions[stateArray[i]] = [];
+        }
+      }
+    } //
+    // 2. Fill states
+    //
+
+
+    for (pattern in o) {
+      for (state in o[pattern]) {
+        stateArray = o[pattern][state].stateArray || [];
+
+        for (i = 0; i < stateArray.length; i++) {
+          //
+          // 2a. Normalize actions into array:  'text=' ==> [{type_:'text='}]
+          // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)
+          //
+
+          /** @type {any} */
+          var p = o[pattern][state];
+
+          if (p.action_) {
+            p.action_ = [].concat(p.action_);
+
+            for (var k = 0; k < p.action_.length; k++) {
+              if (typeof p.action_[k] === "string") {
+                p.action_[k] = {
+                  type_: p.action_[k]
+                };
+              }
+            }
+          } else {
+            p.action_ = [];
+          } //
+          // 2.b Multi-insert
+          //
+
+
+          var patternArray = pattern.split("|");
+
+          for (var j = 0; j < patternArray.length; j++) {
+            if (stateArray[i] === '*') {
+              // insert into all
+              for (var t in transitions) {
+                transitions[t].push({
+                  pattern: patternArray[j],
+                  task: p
+                });
+              }
+            } else {
+              transitions[stateArray[i]].push({
+                pattern: patternArray[j],
+                task: p
+              });
+            }
+          }
+        }
+      }
+    }
+
+    return transitions;
+  },
+  stateMachines: {}
+}; //
+// Definition of state machines
+//
+
+mhchemParser.stateMachines = {
+  //
+  // \ce state machines
+  //
+  //#region ce
+  'ce': {
+    // main parser
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      'else': {
+        '0|1|2': {
+          action_: 'beginsWithBond=false',
+          revisit: true,
+          toContinue: true
+        }
+      },
+      'oxidation$': {
+        '0': {
+          action_: 'oxidation-output'
+        }
+      },
+      'CMT': {
+        'r': {
+          action_: 'rdt=',
+          nextState: 'rt'
+        },
+        'rd': {
+          action_: 'rqt=',
+          nextState: 'rdt'
+        }
+      },
+      'arrowUpDown': {
+        '0|1|2|as': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '1'
+        }
+      },
+      'uprightEntities': {
+        '0|1|2': {
+          action_: ['o=', 'output'],
+          nextState: '1'
+        }
+      },
+      'orbital': {
+        '0|1|2|3': {
+          action_: 'o=',
+          nextState: 'o'
+        }
+      },
+      '->': {
+        '0|1|2|3': {
+          action_: 'r=',
+          nextState: 'r'
+        },
+        'a|as': {
+          action_: ['output', 'r='],
+          nextState: 'r'
+        },
+        '*': {
+          action_: ['output', 'r='],
+          nextState: 'r'
+        }
+      },
+      '+': {
+        'o': {
+          action_: 'd= kv',
+          nextState: 'd'
+        },
+        'd|D': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qd|qD': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'dq': {
+          action_: ['output', 'd='],
+          nextState: 'd'
+        },
+        '3': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '0'
+        }
+      },
+      'amount': {
+        '0|2': {
+          action_: 'a=',
+          nextState: 'a'
+        }
+      },
+      'pm-operator': {
+        '0|1|2|a|as': {
+          action_: ['sb=false', 'output', {
+            type_: 'operator',
+            option: '\\pm'
+          }],
+          nextState: '0'
+        }
+      },
+      'operator': {
+        '0|1|2|a|as': {
+          action_: ['sb=false', 'output', 'operator'],
+          nextState: '0'
+        }
+      },
+      '-$': {
+        'o|q': {
+          action_: ['charge or bond', 'output'],
+          nextState: 'qd'
+        },
+        'd': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'D': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qd': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'qD|dq': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        }
+      },
+      '-9': {
+        '3|o': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '3'
+        }
+      },
+      '- orbital overlap': {
+        'o': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        },
+        'd': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        }
+      },
+      '-': {
+        '0|1|2': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'beginsWithBond=true', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        '3': {
+          action_: {
+            type_: 'bond',
+            option: "-"
+          }
+        },
+        'a': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'hyphen'
+          }],
+          nextState: '2'
+        },
+        'as': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        },
+        'b': {
+          action_: 'b='
+        },
+        'o': {
+          action_: {
+            type_: '- after o/d',
+            option: false
+          },
+          nextState: '2'
+        },
+        'q': {
+          action_: {
+            type_: '- after o/d',
+            option: false
+          },
+          nextState: '2'
+        },
+        'd|qd|dq': {
+          action_: {
+            type_: '- after o/d',
+            option: true
+          },
+          nextState: '2'
+        },
+        'D|qD|p': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "-"
+          }],
+          nextState: '3'
+        }
+      },
+      'amount2': {
+        '1|3': {
+          action_: 'a=',
+          nextState: 'a'
+        }
+      },
+      'letters': {
+        '0|1|2|3|a|as|b|p|bp|o': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        'q|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        },
+        'd|D|qd|qD': {
+          action_: 'o after d',
+          nextState: 'o'
+        }
+      },
+      'digits': {
+        'o': {
+          action_: 'q=',
+          nextState: 'q'
+        },
+        'd|D': {
+          action_: 'q=',
+          nextState: 'dq'
+        },
+        'q': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        },
+        'a': {
+          action_: 'o=',
+          nextState: 'o'
+        }
+      },
+      'space A': {
+        'b|p|bp': {}
+      },
+      'space': {
+        'a': {
+          nextState: 'as'
+        },
+        '0': {
+          action_: 'sb=false'
+        },
+        '1|2': {
+          action_: 'sb=true'
+        },
+        'r|rt|rd|rdt|rdq': {
+          action_: 'output',
+          nextState: '0'
+        },
+        '*': {
+          action_: ['output', 'sb=true'],
+          nextState: '1'
+        }
+      },
+      '1st-level escape': {
+        '1|2': {
+          action_: ['output', {
+            type_: 'insert+p1',
+            option: '1st-level escape'
+          }]
+        },
+        '*': {
+          action_: ['output', {
+            type_: 'insert+p1',
+            option: '1st-level escape'
+          }],
+          nextState: '0'
+        }
+      },
+      '[(...)]': {
+        'r|rt': {
+          action_: 'rd=',
+          nextState: 'rd'
+        },
+        'rd|rdt': {
+          action_: 'rq=',
+          nextState: 'rdq'
+        }
+      },
+      '...': {
+        'o|d|D|dq|qd|qD': {
+          action_: ['output', {
+            type_: 'bond',
+            option: "..."
+          }],
+          nextState: '3'
+        },
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, {
+            type_: 'insert',
+            option: 'ellipsis'
+          }],
+          nextState: '1'
+        }
+      },
+      '. |* ': {
+        '*': {
+          action_: ['output', {
+            type_: 'insert',
+            option: 'addition compound'
+          }],
+          nextState: '1'
+        }
+      },
+      'state of aggregation $': {
+        '*': {
+          action_: ['output', 'state of aggregation'],
+          nextState: '1'
+        }
+      },
+      '{[(': {
+        'a|as|o': {
+          action_: ['o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        },
+        '0|1|2|3': {
+          action_: ['o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        },
+        '*': {
+          action_: ['output', 'o=', 'output', 'parenthesisLevel++'],
+          nextState: '2'
+        }
+      },
+      ')]}': {
+        '0|1|2|3|b|p|bp|o': {
+          action_: ['o=', 'parenthesisLevel--'],
+          nextState: 'o'
+        },
+        'a|as|d|D|q|qd|qD|dq': {
+          action_: ['output', 'o=', 'parenthesisLevel--'],
+          nextState: 'o'
+        }
+      },
+      ', ': {
+        '*': {
+          action_: ['output', 'comma'],
+          nextState: '0'
+        }
+      },
+      '^_': {
+        // ^ and _ without a sensible argument
+        '*': {}
+      },
+      '^{(...)}|^($...$)': {
+        '0|1|2|as': {
+          action_: 'b=',
+          nextState: 'b'
+        },
+        'p': {
+          action_: 'b=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'd= kv',
+          nextState: 'D'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qD'
+        },
+        'd|D|qd|qD|dq': {
+          action_: ['output', 'd='],
+          nextState: 'D'
+        }
+      },
+      '^a|^\\x{}{}|^\\x{}|^\\x|\'': {
+        '0|1|2|as': {
+          action_: 'b=',
+          nextState: 'b'
+        },
+        'p': {
+          action_: 'b=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'd= kv',
+          nextState: 'd'
+        },
+        'q': {
+          action_: 'd=',
+          nextState: 'qd'
+        },
+        'd|qd|D|qD': {
+          action_: 'd='
+        },
+        'dq': {
+          action_: ['output', 'd='],
+          nextState: 'd'
+        }
+      },
+      '_{(state of aggregation)}$': {
+        'd|D|q|qd|qD|dq': {
+          action_: ['output', 'q='],
+          nextState: 'q'
+        }
+      },
+      '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': {
+        '0|1|2|as': {
+          action_: 'p=',
+          nextState: 'p'
+        },
+        'b': {
+          action_: 'p=',
+          nextState: 'bp'
+        },
+        '3|o': {
+          action_: 'q=',
+          nextState: 'q'
+        },
+        'd|D': {
+          action_: 'q=',
+          nextState: 'dq'
+        },
+        'q|qd|qD|dq': {
+          action_: ['output', 'q='],
+          nextState: 'q'
+        }
+      },
+      '=<>': {
+        '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'bond'],
+          nextState: '3'
+        }
+      },
+      '#': {
+        '0|1|2|3|a|as|o': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, {
+            type_: 'bond',
+            option: "#"
+          }],
+          nextState: '3'
+        }
+      },
+      '{}': {
+        '*': {
+          action_: {
+            type_: 'output',
+            option: 1
+          },
+          nextState: '1'
+        }
+      },
+      '{...}': {
+        '0|1|2|3|a|as|b|p|bp': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        'o|d|D|q|qd|qD|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        }
+      },
+      '$...$': {
+        'a': {
+          action_: 'a='
+        },
+        // 2$n$
+        '0|1|2|3|as|b|p|bp|o': {
+          action_: 'o=',
+          nextState: 'o'
+        },
+        // not 'amount'
+        'as|o': {
+          action_: 'o='
+        },
+        'q|d|D|qd|qD|dq': {
+          action_: ['output', 'o='],
+          nextState: 'o'
+        }
+      },
+      '\\bond{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'bond'],
+          nextState: "3"
+        }
+      },
+      '\\frac{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'frac-output'],
+          nextState: '3'
+        }
+      },
+      '\\overset{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'overset-output'],
+          nextState: '3'
+        }
+      },
+      '\\underset{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'underset-output'],
+          nextState: '3'
+        }
+      },
+      '\\underbrace{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'underbrace-output'],
+          nextState: '3'
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'color-output'],
+          nextState: '3'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'color0-output']
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 2
+          }, 'ce'],
+          nextState: '3'
+        }
+      },
+      '\\,': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'copy'],
+          nextState: '1'
+        }
+      },
+      '\\x{}{}|\\x{}|\\x': {
+        '0|1|2|3|a|as|b|p|bp|o|c0': {
+          action_: ['o=', 'output'],
+          nextState: '3'
+        },
+        '*': {
+          action_: ['output', 'o=', 'output'],
+          nextState: '3'
+        }
+      },
+      'others': {
+        '*': {
+          action_: [{
+            type_: 'output',
+            option: 1
+          }, 'copy'],
+          nextState: '3'
+        }
+      },
+      'else2': {
+        'a': {
+          action_: 'a to o',
+          nextState: 'o',
+          revisit: true
+        },
+        'as': {
+          action_: ['output', 'sb=true'],
+          nextState: '1',
+          revisit: true
+        },
+        'r|rt|rd|rdt|rdq': {
+          action_: ['output'],
+          nextState: '0',
+          revisit: true
+        },
+        '*': {
+          action_: ['output', 'copy'],
+          nextState: '3'
+        }
+      }
+    }),
+    actions: {
+      'o after d': function oAfterD(buffer, m) {
+        var ret;
+
+        if ((buffer.d || "").match(/^[0-9]+$/)) {
+          var tmp = buffer.d;
+          buffer.d = undefined;
+          ret = this['output'](buffer);
+          buffer.b = tmp;
+        } else {
+          ret = this['output'](buffer);
+        }
+
+        mhchemParser.actions['o='](buffer, m);
+        return ret;
+      },
+      'd= kv': function dKv(buffer, m) {
+        buffer.d = m;
+        buffer.dType = 'kv';
+      },
+      'charge or bond': function chargeOrBond(buffer, m) {
+        if (buffer['beginsWithBond']) {
+          /** @type {ParserOutput[]} */
+          var ret = [];
+          mhchemParser.concatArray(ret, this['output'](buffer));
+          mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
+          return ret;
+        } else {
+          buffer.d = m;
+        }
+      },
+      '- after o/d': function afterOD(buffer, m, isAfterD) {
+        var c1 = mhchemParser.patterns.match_('orbital', buffer.o || "");
+        var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || "");
+        var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || "");
+        var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || "");
+        var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4);
+
+        if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {
+          buffer.o = '$' + buffer.o + '$';
+        }
+        /** @type {ParserOutput[]} */
+
+
+        var ret = [];
+
+        if (hyphenFollows) {
+          mhchemParser.concatArray(ret, this['output'](buffer));
+          ret.push({
+            type_: 'hyphen'
+          });
+        } else {
+          c1 = mhchemParser.patterns.match_('digits', buffer.d || "");
+
+          if (isAfterD && c1 && c1.remainder === '') {
+            mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));
+            mhchemParser.concatArray(ret, this['output'](buffer));
+          } else {
+            mhchemParser.concatArray(ret, this['output'](buffer));
+            mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
+          }
+        }
+
+        return ret;
+      },
+      'a to o': function aToO(buffer) {
+        buffer.o = buffer.a;
+        buffer.a = undefined;
+      },
+      'sb=true': function sbTrue(buffer) {
+        buffer.sb = true;
+      },
+      'sb=false': function sbFalse(buffer) {
+        buffer.sb = false;
+      },
+      'beginsWithBond=true': function beginsWithBondTrue(buffer) {
+        buffer['beginsWithBond'] = true;
+      },
+      'beginsWithBond=false': function beginsWithBondFalse(buffer) {
+        buffer['beginsWithBond'] = false;
+      },
+      'parenthesisLevel++': function parenthesisLevel(buffer) {
+        buffer['parenthesisLevel']++;
+      },
+      'parenthesisLevel--': function parenthesisLevel(buffer) {
+        buffer['parenthesisLevel']--;
+      },
+      'state of aggregation': function stateOfAggregation(buffer, m) {
+        return {
+          type_: 'state of aggregation',
+          p1: mhchemParser.go(m, 'o')
+        };
+      },
+      'comma': function comma(buffer, m) {
+        var a = m.replace(/\s*$/, '');
+        var withSpace = a !== m;
+
+        if (withSpace && buffer['parenthesisLevel'] === 0) {
+          return {
+            type_: 'comma enumeration L',
+            p1: a
+          };
+        } else {
+          return {
+            type_: 'comma enumeration M',
+            p1: a
+          };
+        }
+      },
+      'output': function output(buffer, m, entityFollows) {
+        // entityFollows:
+        //   undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)
+        //   1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)
+        //   2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as)
+
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret;
+
+        if (!buffer.r) {
+          ret = [];
+
+          if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else {
+            if (buffer.sb) {
+              ret.push({
+                type_: 'entitySkip'
+              });
+            }
+
+            if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) {
+              buffer.o = buffer.a;
+              buffer.a = undefined;
+            } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {
+              buffer.o = buffer.a;
+              buffer.d = buffer.b;
+              buffer.q = buffer.p;
+              buffer.a = buffer.b = buffer.p = undefined;
+            } else {
+              if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) {
+                buffer.dType = 'oxidation';
+              } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) {
+                buffer.dType = undefined;
+              }
+            }
+
+            ret.push({
+              type_: 'chemfive',
+              a: mhchemParser.go(buffer.a, 'a'),
+              b: mhchemParser.go(buffer.b, 'bd'),
+              p: mhchemParser.go(buffer.p, 'pq'),
+              o: mhchemParser.go(buffer.o, 'o'),
+              q: mhchemParser.go(buffer.q, 'pq'),
+              d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'),
+              dType: buffer.dType
+            });
+          }
+        } else {
+          // r
+
+          /** @type {ParserOutput[]} */
+          var rd;
+
+          if (buffer.rdt === 'M') {
+            rd = mhchemParser.go(buffer.rd, 'tex-math');
+          } else if (buffer.rdt === 'T') {
+            rd = [{
+              type_: 'text',
+              p1: buffer.rd || ""
+            }];
+          } else {
+            rd = mhchemParser.go(buffer.rd);
+          }
+          /** @type {ParserOutput[]} */
+
+
+          var rq;
+
+          if (buffer.rqt === 'M') {
+            rq = mhchemParser.go(buffer.rq, 'tex-math');
+          } else if (buffer.rqt === 'T') {
+            rq = [{
+              type_: 'text',
+              p1: buffer.rq || ""
+            }];
+          } else {
+            rq = mhchemParser.go(buffer.rq);
+          }
+
+          ret = {
+            type_: 'arrow',
+            r: buffer.r,
+            rd: rd,
+            rq: rq
+          };
+        }
+
+        for (var p in buffer) {
+          if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {
+            delete buffer[p];
+          }
+        }
+
+        return ret;
+      },
+      'oxidation-output': function oxidationOutput(buffer, m) {
+        var ret = ["{"];
+        mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));
+        ret.push("}");
+        return ret;
+      },
+      'frac-output': function fracOutput(buffer, m) {
+        return {
+          type_: 'frac-ce',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'overset-output': function oversetOutput(buffer, m) {
+        return {
+          type_: 'overset',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'underset-output': function undersetOutput(buffer, m) {
+        return {
+          type_: 'underset',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'underbrace-output': function underbraceOutput(buffer, m) {
+        return {
+          type_: 'underbrace',
+          p1: mhchemParser.go(m[0]),
+          p2: mhchemParser.go(m[1])
+        };
+      },
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1])
+        };
+      },
+      'r=': function r(buffer, m) {
+        buffer.r = m;
+      },
+      'rdt=': function rdt(buffer, m) {
+        buffer.rdt = m;
+      },
+      'rd=': function rd(buffer, m) {
+        buffer.rd = m;
+      },
+      'rqt=': function rqt(buffer, m) {
+        buffer.rqt = m;
+      },
+      'rq=': function rq(buffer, m) {
+        buffer.rq = m;
+      },
+      'operator': function operator(buffer, m, p1) {
+        return {
+          type_: 'operator',
+          kind_: p1 || m
+        };
+      }
+    }
+  },
+  'a': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '1',
+          revisit: true
+        }
+      },
+      '$(...)$': {
+        '*': {
+          action_: 'tex-math tight',
+          nextState: '1'
+        }
+      },
+      ',': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'commaDecimal'
+          }
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {}
+  },
+  'o': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '1',
+          revisit: true
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '\\ca': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'circa'
+          }
+        }
+      },
+      '\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: '{text}'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {}
+  },
+  'text': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '{...}': {
+        '*': {
+          action_: 'text='
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '\\greek': {
+        '*': {
+          action_: ['output', 'rm']
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: ['output', 'copy']
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'text='
+        }
+      }
+    }),
+    actions: {
+      'output': function output(buffer) {
+        if (buffer.text_) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'text',
+            p1: buffer.text_
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  'pq': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'state of aggregation $': {
+        '*': {
+          action_: 'state of aggregation'
+        }
+      },
+      'i$': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '(KV letters),': {
+        '0': {
+          action_: 'rm',
+          nextState: '0'
+        }
+      },
+      'formula$': {
+        '0': {
+          nextState: 'f',
+          revisit: true
+        }
+      },
+      '1/2$': {
+        '0': {
+          action_: '1/2'
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: 'text'
+        }
+      },
+      'a-z': {
+        'f': {
+          action_: 'tex-math'
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '-9.,9': {
+        '*': {
+          action_: '9,9'
+        }
+      },
+      ',': {
+        '*': {
+          action_: {
+            type_: 'insert+p1',
+            option: 'comma enumeration S'
+          }
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: 'color-output'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: 'color0-output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: 'ce'
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'state of aggregation': function stateOfAggregation(buffer, m) {
+        return {
+          type_: 'state of aggregation subscript',
+          p1: mhchemParser.go(m, 'o')
+        };
+      },
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1], 'pq')
+        };
+      }
+    }
+  },
+  'bd': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'x$': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      'formula$': {
+        '0': {
+          nextState: 'f',
+          revisit: true
+        }
+      },
+      'else': {
+        '0': {
+          nextState: '!f',
+          revisit: true
+        }
+      },
+      '-9.,9 no missing 0': {
+        '*': {
+          action_: '9,9'
+        }
+      },
+      '.': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'electron dot'
+          }
+        }
+      },
+      'a-z': {
+        'f': {
+          action_: 'tex-math'
+        }
+      },
+      'x': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'KV x'
+          }
+        }
+      },
+      'letters': {
+        '*': {
+          action_: 'rm'
+        }
+      },
+      '\'': {
+        '*': {
+          action_: {
+            type_: 'insert',
+            option: 'prime'
+          }
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      '{(...)}': {
+        '*': {
+          action_: 'text'
+        }
+      },
+      '\\color{(...)}{(...)}1|\\color(...){(...)}2': {
+        '*': {
+          action_: 'color-output'
+        }
+      },
+      '\\color{(...)}0': {
+        '*': {
+          action_: 'color0-output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: 'ce'
+        }
+      },
+      '\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'copy'
+        }
+      },
+      'else2': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'color-output': function colorOutput(buffer, m) {
+        return {
+          type_: 'color',
+          color1: m[0],
+          color2: mhchemParser.go(m[1], 'bd')
+        };
+      }
+    }
+  },
+  'oxidation': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      'roman numeral': {
+        '*': {
+          action_: 'roman-numeral'
+        }
+      },
+      '${(...)}$|$(...)$': {
+        '*': {
+          action_: 'tex-math'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'roman-numeral': function romanNumeral(buffer, m) {
+        return {
+          type_: 'roman numeral',
+          p1: m || ""
+        };
+      }
+    }
+  },
+  'tex-math': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: ['output', 'ce']
+        }
+      },
+      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'o='
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'o='
+        }
+      }
+    }),
+    actions: {
+      'output': function output(buffer) {
+        if (buffer.o) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'tex-math',
+            p1: buffer.o
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  'tex-math tight': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '\\ce{(...)}': {
+        '*': {
+          action_: ['output', 'ce']
+        }
+      },
+      '{...}|\\,|\\x{}{}|\\x{}|\\x': {
+        '*': {
+          action_: 'o='
+        }
+      },
+      '-|+': {
+        '*': {
+          action_: 'tight operator'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'o='
+        }
+      }
+    }),
+    actions: {
+      'tight operator': function tightOperator(buffer, m) {
+        buffer.o = (buffer.o || "") + "{" + m + "}";
+      },
+      'output': function output(buffer) {
+        if (buffer.o) {
+          /** @type {ParserOutput} */
+          var ret = {
+            type_: 'tex-math',
+            p1: buffer.o
+          };
+
+          for (var p in buffer) {
+            delete buffer[p];
+          }
+
+          return ret;
+        }
+      }
+    }
+  },
+  '9,9': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {}
+      },
+      ',': {
+        '*': {
+          action_: 'comma'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'copy'
+        }
+      }
+    }),
+    actions: {
+      'comma': function comma() {
+        return {
+          type_: 'commaDecimal'
+        };
+      }
+    }
+  },
+  //#endregion
+  //
+  // \pu state machines
+  //
+  //#region pu
+  'pu': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      'space$': {
+        '*': {
+          action_: ['output', 'space']
+        }
+      },
+      '{[(|)]}': {
+        '0|a': {
+          action_: 'copy'
+        }
+      },
+      '(-)(9)^(-9)': {
+        '0': {
+          action_: 'number^',
+          nextState: 'a'
+        }
+      },
+      '(-)(9.,9)(e)(99)': {
+        '0': {
+          action_: 'enumber',
+          nextState: 'a'
+        }
+      },
+      'space': {
+        '0|a': {}
+      },
+      'pm-operator': {
+        '0|a': {
+          action_: {
+            type_: 'operator',
+            option: '\\pm'
+          },
+          nextState: '0'
+        }
+      },
+      'operator': {
+        '0|a': {
+          action_: 'copy',
+          nextState: '0'
+        }
+      },
+      '//': {
+        'd': {
+          action_: 'o=',
+          nextState: '/'
+        }
+      },
+      '/': {
+        'd': {
+          action_: 'o=',
+          nextState: '/'
+        }
+      },
+      '{...}|else': {
+        '0|d': {
+          action_: 'd=',
+          nextState: 'd'
+        },
+        'a': {
+          action_: ['space', 'd='],
+          nextState: 'd'
+        },
+        '/|q': {
+          action_: 'q=',
+          nextState: 'q'
+        }
+      }
+    }),
+    actions: {
+      'enumber': function enumber(buffer, m) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+
+        if (m[0] === "+-" || m[0] === "+/-") {
+          ret.push("\\pm ");
+        } else if (m[0]) {
+          ret.push(m[0]);
+        }
+
+        if (m[1]) {
+          mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
+
+          if (m[2]) {
+            if (m[2].match(/[,.]/)) {
+              mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));
+            } else {
+              ret.push(m[2]);
+            }
+          }
+
+          m[3] = m[4] || m[3];
+
+          if (m[3]) {
+            m[3] = m[3].trim();
+
+            if (m[3] === "e" || m[3].substr(0, 1) === "*") {
+              ret.push({
+                type_: 'cdot'
+              });
+            } else {
+              ret.push({
+                type_: 'times'
+              });
+            }
+          }
+        }
+
+        if (m[3]) {
+          ret.push("10^{" + m[5] + "}");
+        }
+
+        return ret;
+      },
+      'number^': function number(buffer, m) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+
+        if (m[0] === "+-" || m[0] === "+/-") {
+          ret.push("\\pm ");
+        } else if (m[0]) {
+          ret.push(m[0]);
+        }
+
+        mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
+        ret.push("^{" + m[2] + "}");
+        return ret;
+      },
+      'operator': function operator(buffer, m, p1) {
+        return {
+          type_: 'operator',
+          kind_: p1 || m
+        };
+      },
+      'space': function space() {
+        return {
+          type_: 'pu-space-1'
+        };
+      },
+      'output': function output(buffer) {
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret;
+        var md = mhchemParser.patterns.match_('{(...)}', buffer.d || "");
+
+        if (md && md.remainder === '') {
+          buffer.d = md.match_;
+        }
+
+        var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || "");
+
+        if (mq && mq.remainder === '') {
+          buffer.q = mq.match_;
+        }
+
+        if (buffer.d) {
+          buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
+          buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
+        }
+
+        if (buffer.q) {
+          // fraction
+          buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
+          buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
+          var b5 = {
+            d: mhchemParser.go(buffer.d, 'pu'),
+            q: mhchemParser.go(buffer.q, 'pu')
+          };
+
+          if (buffer.o === '//') {
+            ret = {
+              type_: 'pu-frac',
+              p1: b5.d,
+              p2: b5.q
+            };
+          } else {
+            ret = b5.d;
+
+            if (b5.d.length > 1 || b5.q.length > 1) {
+              ret.push({
+                type_: ' / '
+              });
+            } else {
+              ret.push({
+                type_: '/'
+              });
+            }
+
+            mhchemParser.concatArray(ret, b5.q);
+          }
+        } else {
+          // no fraction
+          ret = mhchemParser.go(buffer.d, 'pu-2');
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    }
+  },
+  'pu-2': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '*': {
+          action_: 'output'
+        }
+      },
+      '*': {
+        '*': {
+          action_: ['output', 'cdot'],
+          nextState: '0'
+        }
+      },
+      '\\x': {
+        '*': {
+          action_: 'rm='
+        }
+      },
+      'space': {
+        '*': {
+          action_: ['output', 'space'],
+          nextState: '0'
+        }
+      },
+      '^{(...)}|^(-1)': {
+        '1': {
+          action_: '^(-1)'
+        }
+      },
+      '-9.,9': {
+        '0': {
+          action_: 'rm=',
+          nextState: '0'
+        },
+        '1': {
+          action_: '^(-1)',
+          nextState: '0'
+        }
+      },
+      '{...}|else': {
+        '*': {
+          action_: 'rm=',
+          nextState: '1'
+        }
+      }
+    }),
+    actions: {
+      'cdot': function cdot() {
+        return {
+          type_: 'tight cdot'
+        };
+      },
+      '^(-1)': function _(buffer, m) {
+        buffer.rm += "^{" + m + "}";
+      },
+      'space': function space() {
+        return {
+          type_: 'pu-space-2'
+        };
+      },
+      'output': function output(buffer) {
+        /** @type {ParserOutput | ParserOutput[]} */
+        var ret = [];
+
+        if (buffer.rm) {
+          var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || "");
+
+          if (mrm && mrm.remainder === '') {
+            ret = mhchemParser.go(mrm.match_, 'pu');
+          } else {
+            ret = {
+              type_: 'rm',
+              p1: buffer.rm
+            };
+          }
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    }
+  },
+  'pu-9,9': {
+    transitions: mhchemParser.createTransitions({
+      'empty': {
+        '0': {
+          action_: 'output-0'
+        },
+        'o': {
+          action_: 'output-o'
+        }
+      },
+      ',': {
+        '0': {
+          action_: ['output-0', 'comma'],
+          nextState: 'o'
+        }
+      },
+      '.': {
+        '0': {
+          action_: ['output-0', 'copy'],
+          nextState: 'o'
+        }
+      },
+      'else': {
+        '*': {
+          action_: 'text='
+        }
+      }
+    }),
+    actions: {
+      'comma': function comma() {
+        return {
+          type_: 'commaDecimal'
+        };
+      },
+      'output-0': function output0(buffer) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+        buffer.text_ = buffer.text_ || "";
+
+        if (buffer.text_.length > 4) {
+          var a = buffer.text_.length % 3;
+
+          if (a === 0) {
+            a = 3;
+          }
+
+          for (var i = buffer.text_.length - 3; i > 0; i -= 3) {
+            ret.push(buffer.text_.substr(i, 3));
+            ret.push({
+              type_: '1000 separator'
+            });
+          }
+
+          ret.push(buffer.text_.substr(0, a));
+          ret.reverse();
+        } else {
+          ret.push(buffer.text_);
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      },
+      'output-o': function outputO(buffer) {
+        /** @type {ParserOutput[]} */
+        var ret = [];
+        buffer.text_ = buffer.text_ || "";
+
+        if (buffer.text_.length > 4) {
+          var a = buffer.text_.length - 3;
+
+          for (var i = 0; i < a; i += 3) {
+            ret.push(buffer.text_.substr(i, 3));
+            ret.push({
+              type_: '1000 separator'
+            });
+          }
+
+          ret.push(buffer.text_.substr(i));
+        } else {
+          ret.push(buffer.text_);
+        }
+
+        for (var p in buffer) {
+          delete buffer[p];
+        }
+
+        return ret;
+      }
+    } //#endregion
+
+  }
+}; //
+// texify: Take MhchemParser output and convert it to TeX
+//
+
+/** @type {Texify} */
+
+var texify = {
+  go: function go(input, isInner) {
+    // (recursive, max 4 levels)
+    if (!input) {
+      return "";
+    }
+
+    var res = "";
+    var cee = false;
+
+    for (var i = 0; i < input.length; i++) {
+      var inputi = input[i];
+
+      if (typeof inputi === "string") {
+        res += inputi;
+      } else {
+        res += texify._go2(inputi);
+
+        if (inputi.type_ === '1st-level escape') {
+          cee = true;
+        }
+      }
+    }
+
+    if (!isInner && !cee && res) {
+      res = "{" + res + "}";
+    }
+
+    return res;
+  },
+  _goInner: function _goInner(input) {
+    if (!input) {
+      return input;
+    }
+
+    return texify.go(input, true);
+  },
+  _go2: function _go2(buf) {
+    /** @type {undefined | string} */
+    var res;
+
+    switch (buf.type_) {
+      case 'chemfive':
+        res = "";
+        var b5 = {
+          a: texify._goInner(buf.a),
+          b: texify._goInner(buf.b),
+          p: texify._goInner(buf.p),
+          o: texify._goInner(buf.o),
+          q: texify._goInner(buf.q),
+          d: texify._goInner(buf.d)
+        }; //
+        // a
+        //
+
+        if (b5.a) {
+          if (b5.a.match(/^[+\-]/)) {
+            b5.a = "{" + b5.a + "}";
+          }
+
+          res += b5.a + "\\,";
+        } //
+        // b and p
+        //
+
+
+        if (b5.b || b5.p) {
+          res += "{\\vphantom{X}}";
+          res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}";
+          res += "{\\vphantom{X}}";
+          res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}";
+          res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}";
+        } //
+        // o
+        //
+
+
+        if (b5.o) {
+          if (b5.o.match(/^[+\-]/)) {
+            b5.o = "{" + b5.o + "}";
+          }
+
+          res += b5.o;
+        } //
+        // q and d
+        //
+
+
+        if (buf.dType === 'kv') {
+          if (b5.d || b5.q) {
+            res += "{\\vphantom{X}}";
+          }
+
+          if (b5.d) {
+            res += "^{" + b5.d + "}";
+          }
+
+          if (b5.q) {
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+        } else if (buf.dType === 'oxidation') {
+          if (b5.d) {
+            res += "{\\vphantom{X}}";
+            res += "^{" + b5.d + "}";
+          }
+
+          if (b5.q) {
+            res += "{\\vphantom{X}}";
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+        } else {
+          if (b5.q) {
+            res += "{\\vphantom{X}}";
+            res += "_{\\smash[t]{" + b5.q + "}}";
+          }
+
+          if (b5.d) {
+            res += "{\\vphantom{X}}";
+            res += "^{" + b5.d + "}";
+          }
+        }
+
+        break;
+
+      case 'rm':
+        res = "\\mathrm{" + buf.p1 + "}";
+        break;
+
+      case 'text':
+        if (buf.p1.match(/[\^_]/)) {
+          buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}");
+          res = "\\mathrm{" + buf.p1 + "}";
+        } else {
+          res = "\\text{" + buf.p1 + "}";
+        }
+
+        break;
+
+      case 'roman numeral':
+        res = "\\mathrm{" + buf.p1 + "}";
+        break;
+
+      case 'state of aggregation':
+        res = "\\mskip2mu " + texify._goInner(buf.p1);
+        break;
+
+      case 'state of aggregation subscript':
+        res = "\\mskip1mu " + texify._goInner(buf.p1);
+        break;
+
+      case 'bond':
+        res = texify._getBond(buf.kind_);
+
+        if (!res) {
+          throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"];
+        }
+
+        break;
+
+      case 'frac':
+        var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}";
+        res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}";
+        break;
+
+      case 'pu-frac':
+        var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}";
+        break;
+
+      case 'tex-math':
+        res = buf.p1 + " ";
+        break;
+
+      case 'frac-ce':
+        res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'overset':
+        res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'underset':
+        res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'underbrace':
+        res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}";
+        break;
+
+      case 'color':
+        res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}";
+        break;
+
+      case 'color0':
+        res = "\\color{" + buf.color + "}";
+        break;
+
+      case 'arrow':
+        var b6 = {
+          rd: texify._goInner(buf.rd),
+          rq: texify._goInner(buf.rq)
+        };
+
+        var arrow = "\\x" + texify._getArrow(buf.r);
+
+        if (b6.rq) {
+          arrow += "[{" + b6.rq + "}]";
+        }
+
+        if (b6.rd) {
+          arrow += "{" + b6.rd + "}";
+        } else {
+          arrow += "{}";
+        }
+
+        res = arrow;
+        break;
+
+      case 'operator':
+        res = texify._getOperator(buf.kind_);
+        break;
+
+      case '1st-level escape':
+        res = buf.p1 + " "; // &, \\\\, \\hlin
+
+        break;
+
+      case 'space':
+        res = " ";
+        break;
+
+      case 'entitySkip':
+        res = "~";
+        break;
+
+      case 'pu-space-1':
+        res = "~";
+        break;
+
+      case 'pu-space-2':
+        res = "\\mkern3mu ";
+        break;
+
+      case '1000 separator':
+        res = "\\mkern2mu ";
+        break;
+
+      case 'commaDecimal':
+        res = "{,}";
+        break;
+
+      case 'comma enumeration L':
+        res = "{" + buf.p1 + "}\\mkern6mu ";
+        break;
+
+      case 'comma enumeration M':
+        res = "{" + buf.p1 + "}\\mkern3mu ";
+        break;
+
+      case 'comma enumeration S':
+        res = "{" + buf.p1 + "}\\mkern1mu ";
+        break;
+
+      case 'hyphen':
+        res = "\\text{-}";
+        break;
+
+      case 'addition compound':
+        res = "\\,{\\cdot}\\,";
+        break;
+
+      case 'electron dot':
+        res = "\\mkern1mu \\bullet\\mkern1mu ";
+        break;
+
+      case 'KV x':
+        res = "{\\times}";
+        break;
+
+      case 'prime':
+        res = "\\prime ";
+        break;
+
+      case 'cdot':
+        res = "\\cdot ";
+        break;
+
+      case 'tight cdot':
+        res = "\\mkern1mu{\\cdot}\\mkern1mu ";
+        break;
+
+      case 'times':
+        res = "\\times ";
+        break;
+
+      case 'circa':
+        res = "{\\sim}";
+        break;
+
+      case '^':
+        res = "uparrow";
+        break;
+
+      case 'v':
+        res = "downarrow";
+        break;
+
+      case 'ellipsis':
+        res = "\\ldots ";
+        break;
+
+      case '/':
+        res = "/";
+        break;
+
+      case ' / ':
+        res = "\\,/\\,";
+        break;
+
+      default:
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+      // Missing texify rule or unknown MhchemParser output
+    }
+    return res;
+  },
+  _getArrow: function _getArrow(a) {
+    switch (a) {
+      case "->":
+        return "rightarrow";
+
+      case "\u2192":
+        return "rightarrow";
+
+      case "\u27F6":
+        return "rightarrow";
+
+      case "<-":
+        return "leftarrow";
+
+      case "<->":
+        return "leftrightarrow";
+
+      case "<-->":
+        return "rightleftarrows";
+
+      case "<=>":
+        return "rightleftharpoons";
+
+      case "\u21CC":
+        return "rightleftharpoons";
+
+      case "<=>>":
+        return "rightequilibrium";
+
+      case "<<=>":
+        return "leftequilibrium";
+
+      default:
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  },
+  _getBond: function _getBond(a) {
+    switch (a) {
+      case "-":
+        return "{-}";
+
+      case "1":
+        return "{-}";
+
+      case "=":
+        return "{=}";
+
+      case "2":
+        return "{=}";
+
+      case "#":
+        return "{\\equiv}";
+
+      case "3":
+        return "{\\equiv}";
+
+      case "~":
+        return "{\\tripledash}";
+
+      case "~-":
+        return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
+
+      case "~=":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
+
+      case "~--":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
+
+      case "-~-":
+        return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
+
+      case "...":
+        return "{{\\cdot}{\\cdot}{\\cdot}}";
+
+      case "....":
+        return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";
+
+      case "->":
+        return "{\\rightarrow}";
+
+      case "<-":
+        return "{\\leftarrow}";
+
+      case "<":
+        return "{<}";
+
+      case ">":
+        return "{>}";
+
+      default:
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  },
+  _getOperator: function _getOperator(a) {
+    switch (a) {
+      case "+":
+        return " {}+{} ";
+
+      case "-":
+        return " {}-{} ";
+
+      case "=":
+        return " {}={} ";
+
+      case "<":
+        return " {}<{} ";
+
+      case ">":
+        return " {}>{} ";
+
+      case "<<":
+        return " {}\\ll{} ";
+
+      case ">>":
+        return " {}\\gg{} ";
+
+      case "\\pm":
+        return " {}\\pm{} ";
+
+      case "\\approx":
+        return " {}\\approx{} ";
+
+      case "$\\approx$":
+        return " {}\\approx{} ";
+
+      case "v":
+        return " \\downarrow{} ";
+
+      case "(v)":
+        return " \\downarrow{} ";
+
+      case "^":
+        return " \\uparrow{} ";
+
+      case "(^)":
+        return " \\uparrow{} ";
+
+      default:
+        throw ["MhchemBugT", "mhchem bug T. Please report."];
+    }
+  }
+}; //
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.js
new file mode 100644
index 0000000..34643ec
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.js
@@ -0,0 +1,858 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory(require("katex"));
+	else if(typeof define === 'function' && define.amd)
+		define(["katex"], factory);
+	else {
+		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
+		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
+	}
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
+/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
+/**
+ * renderA11yString returns a readable string.
+ *
+ * In some cases the string will have the proper semantic math
+ * meaning,:
+ *   renderA11yString("\\frac{1}{2}"")
+ *   -> "start fraction, 1, divided by, 2, end fraction"
+ *
+ * However, other cases do not:
+ *   renderA11yString("f(x) = x^2")
+ *   -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
+ *
+ * The commas in the string aim to increase ease of understanding
+ * when read by a screenreader.
+ */
+// NOTE: since we're importing types here these files won't actually be
+// included in the build.
+// $FlowIgnore: we import the types directly anyways
+
+var stringMap = {
+  "(": "left parenthesis",
+  ")": "right parenthesis",
+  "[": "open bracket",
+  "]": "close bracket",
+  "\\{": "left brace",
+  "\\}": "right brace",
+  "\\lvert": "open vertical bar",
+  "\\rvert": "close vertical bar",
+  "|": "vertical bar",
+  "\\uparrow": "up arrow",
+  "\\Uparrow": "up arrow",
+  "\\downarrow": "down arrow",
+  "\\Downarrow": "down arrow",
+  "\\updownarrow": "up down arrow",
+  "\\leftarrow": "left arrow",
+  "\\Leftarrow": "left arrow",
+  "\\rightarrow": "right arrow",
+  "\\Rightarrow": "right arrow",
+  "\\langle": "open angle",
+  "\\rangle": "close angle",
+  "\\lfloor": "open floor",
+  "\\rfloor": "close floor",
+  "\\int": "integral",
+  "\\intop": "integral",
+  "\\lim": "limit",
+  "\\ln": "natural log",
+  "\\log": "log",
+  "\\sin": "sine",
+  "\\cos": "cosine",
+  "\\tan": "tangent",
+  "\\cot": "cotangent",
+  "\\sum": "sum",
+  "/": "slash",
+  ",": "comma",
+  ".": "point",
+  "-": "negative",
+  "+": "plus",
+  "~": "tilde",
+  ":": "colon",
+  "?": "question mark",
+  "'": "apostrophe",
+  "\\%": "percent",
+  " ": "space",
+  "\\ ": "space",
+  "\\$": "dollar sign",
+  "\\angle": "angle",
+  "\\degree": "degree",
+  "\\circ": "circle",
+  "\\vec": "vector",
+  "\\triangle": "triangle",
+  "\\pi": "pi",
+  "\\prime": "prime",
+  "\\infty": "infinity",
+  "\\alpha": "alpha",
+  "\\beta": "beta",
+  "\\gamma": "gamma",
+  "\\omega": "omega",
+  "\\theta": "theta",
+  "\\sigma": "sigma",
+  "\\lambda": "lambda",
+  "\\tau": "tau",
+  "\\Delta": "delta",
+  "\\delta": "delta",
+  "\\mu": "mu",
+  "\\rho": "rho",
+  "\\nabla": "del",
+  "\\ell": "ell",
+  "\\ldots": "dots",
+  // TODO: add entries for all accents
+  "\\hat": "hat",
+  "\\acute": "acute"
+};
+var powerMap = {
+  "prime": "prime",
+  "degree": "degrees",
+  "circle": "degrees",
+  "2": "squared",
+  "3": "cubed"
+};
+var openMap = {
+  "|": "open vertical bar",
+  ".": ""
+};
+var closeMap = {
+  "|": "close vertical bar",
+  ".": ""
+};
+var binMap = {
+  "+": "plus",
+  "-": "minus",
+  "\\pm": "plus minus",
+  "\\cdot": "dot",
+  "*": "times",
+  "/": "divided by",
+  "\\times": "times",
+  "\\div": "divided by",
+  "\\circ": "circle",
+  "\\bullet": "bullet"
+};
+var relMap = {
+  "=": "equals",
+  "\\approx": "approximately equals",
+  "≠": "does not equal",
+  "\\geq": "is greater than or equal to",
+  "\\ge": "is greater than or equal to",
+  "\\leq": "is less than or equal to",
+  "\\le": "is less than or equal to",
+  ">": "is greater than",
+  "<": "is less than",
+  "\\leftarrow": "left arrow",
+  "\\Leftarrow": "left arrow",
+  "\\rightarrow": "right arrow",
+  "\\Rightarrow": "right arrow",
+  ":": "colon"
+};
+var accentUnderMap = {
+  "\\underleftarrow": "left arrow",
+  "\\underrightarrow": "right arrow",
+  "\\underleftrightarrow": "left-right arrow",
+  "\\undergroup": "group",
+  "\\underlinesegment": "line segment",
+  "\\utilde": "tilde"
+};
+
+var buildString = function buildString(str, type, a11yStrings) {
+  if (!str) {
+    return;
+  }
+
+  var ret;
+
+  if (type === "open") {
+    ret = str in openMap ? openMap[str] : stringMap[str] || str;
+  } else if (type === "close") {
+    ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
+  } else if (type === "bin") {
+    ret = binMap[str] || str;
+  } else if (type === "rel") {
+    ret = relMap[str] || str;
+  } else {
+    ret = stringMap[str] || str;
+  } // If the text to add is a number and there is already a string
+  // in the list and the last string is a number then we should
+  // combine them into a single number
+
+
+  if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
+  // I think we might be able to drop the nested arrays, which would make
+  // this easier to type - $FlowFixMe
+  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
+    a11yStrings[a11yStrings.length - 1] += ret;
+  } else if (ret) {
+    a11yStrings.push(ret);
+  }
+};
+
+var buildRegion = function buildRegion(a11yStrings, callback) {
+  var regionStrings = [];
+  a11yStrings.push(regionStrings);
+  callback(regionStrings);
+};
+
+var handleObject = function handleObject(tree, a11yStrings, atomType) {
+  // Everything else is assumed to be an object...
+  switch (tree.type) {
+    case "accent":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          buildA11yStrings(tree.base, a11yStrings, atomType);
+          a11yStrings.push("with");
+          buildString(tree.label, "normal", a11yStrings);
+          a11yStrings.push("on top");
+        });
+        break;
+      }
+
+    case "accentUnder":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          buildA11yStrings(tree.base, a11yStrings, atomType);
+          a11yStrings.push("with");
+          buildString(accentUnderMap[tree.label], "normal", a11yStrings);
+          a11yStrings.push("underneath");
+        });
+        break;
+      }
+
+    case "accent-token":
+      {
+        // Used internally by accent symbols.
+        break;
+      }
+
+    case "atom":
+      {
+        var text = tree.text;
+
+        switch (tree.family) {
+          case "bin":
+            {
+              buildString(text, "bin", a11yStrings);
+              break;
+            }
+
+          case "close":
+            {
+              buildString(text, "close", a11yStrings);
+              break;
+            }
+          // TODO(kevinb): figure out what should be done for inner
+
+          case "inner":
+            {
+              buildString(tree.text, "inner", a11yStrings);
+              break;
+            }
+
+          case "open":
+            {
+              buildString(text, "open", a11yStrings);
+              break;
+            }
+
+          case "punct":
+            {
+              buildString(text, "punct", a11yStrings);
+              break;
+            }
+
+          case "rel":
+            {
+              buildString(text, "rel", a11yStrings);
+              break;
+            }
+
+          default:
+            {
+              tree.family;
+              throw new Error("\"" + tree.family + "\" is not a valid atom type");
+            }
+        }
+
+        break;
+      }
+
+    case "color":
+      {
+        var color = tree.color.replace(/katex-/, "");
+        buildRegion(a11yStrings, function (regionStrings) {
+          regionStrings.push("start color " + color);
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          regionStrings.push("end color " + color);
+        });
+        break;
+      }
+
+    case "color-token":
+      {
+        // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
+        // It's a leaf node and has no children so just break.
+        break;
+      }
+
+    case "delimsizing":
+      {
+        if (tree.delim && tree.delim !== ".") {
+          buildString(tree.delim, "normal", a11yStrings);
+        }
+
+        break;
+      }
+
+    case "genfrac":
+      {
+        buildRegion(a11yStrings, function (regionStrings) {
+          // genfrac can have unbalanced delimiters
+          var leftDelim = tree.leftDelim,
+              rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
+          // hasBarLine true -> fraction, false -> binomial
+
+          if (tree.hasBarLine) {
+            regionStrings.push("start fraction");
+            leftDelim && buildString(leftDelim, "open", regionStrings);
+            buildA11yStrings(tree.numer, regionStrings, atomType);
+            regionStrings.push("divided by");
+            buildA11yStrings(tree.denom, regionStrings, atomType);
+            rightDelim && buildString(rightDelim, "close", regionStrings);
+            regionStrings.push("end fraction");
+          } else {
+            regionStrings.push("start binomial");
+            leftDelim && buildString(leftDelim, "open", regionStrings);
+            buildA11yStrings(tree.numer, regionStrings, atomType);
+            regionStrings.push("over");
+            buildA11yStrings(tree.denom, regionStrings, atomType);
+            rightDelim && buildString(rightDelim, "close", regionStrings);
+            regionStrings.push("end binomial");
+          }
+        });
+        break;
+      }
+
+    case "kern":
+      {
+        // No op: we don't attempt to present kerning information
+        // to the screen reader.
+        break;
+      }
+
+    case "leftright":
+      {
+        buildRegion(a11yStrings, function (regionStrings) {
+          buildString(tree.left, "open", regionStrings);
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          buildString(tree.right, "close", regionStrings);
+        });
+        break;
+      }
+
+    case "leftright-right":
+      {
+        // TODO: double check that this is a no-op
+        break;
+      }
+
+    case "lap":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "mathord":
+      {
+        buildString(tree.text, "normal", a11yStrings);
+        break;
+      }
+
+    case "op":
+      {
+        var body = tree.body,
+            name = tree.name;
+
+        if (body) {
+          buildA11yStrings(body, a11yStrings, atomType);
+        } else if (name) {
+          buildString(name, "normal", a11yStrings);
+        }
+
+        break;
+      }
+
+    case "op-token":
+      {
+        // Used internally by operator symbols.
+        buildString(tree.text, atomType, a11yStrings);
+        break;
+      }
+
+    case "ordgroup":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "overline":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          a11yStrings.push("start overline");
+          buildA11yStrings(tree.body, a11yStrings, atomType);
+          a11yStrings.push("end overline");
+        });
+        break;
+      }
+
+    case "phantom":
+      {
+        a11yStrings.push("empty space");
+        break;
+      }
+
+    case "raisebox":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "rule":
+      {
+        a11yStrings.push("rectangle");
+        break;
+      }
+
+    case "sizing":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "spacing":
+      {
+        a11yStrings.push("space");
+        break;
+      }
+
+    case "styling":
+      {
+        // We ignore the styling and just pass through the contents
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "sqrt":
+      {
+        buildRegion(a11yStrings, function (regionStrings) {
+          var body = tree.body,
+              index = tree.index;
+
+          if (index) {
+            var indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
+
+            if (indexString === "3") {
+              regionStrings.push("cube root of");
+              buildA11yStrings(body, regionStrings, atomType);
+              regionStrings.push("end cube root");
+              return;
+            }
+
+            regionStrings.push("root");
+            regionStrings.push("start index");
+            buildA11yStrings(index, regionStrings, atomType);
+            regionStrings.push("end index");
+            return;
+          }
+
+          regionStrings.push("square root of");
+          buildA11yStrings(body, regionStrings, atomType);
+          regionStrings.push("end square root");
+        });
+        break;
+      }
+
+    case "supsub":
+      {
+        var base = tree.base,
+            sub = tree.sub,
+            sup = tree.sup;
+        var isLog = false;
+
+        if (base) {
+          buildA11yStrings(base, a11yStrings, atomType);
+          isLog = base.type === "op" && base.name === "\\log";
+        }
+
+        if (sub) {
+          var regionName = isLog ? "base" : "subscript";
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start " + regionName);
+            buildA11yStrings(sub, regionStrings, atomType);
+            regionStrings.push("end " + regionName);
+          });
+        }
+
+        if (sup) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            var supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
+
+            if (supString in powerMap) {
+              regionStrings.push(powerMap[supString]);
+              return;
+            }
+
+            regionStrings.push("start superscript");
+            buildA11yStrings(sup, regionStrings, atomType);
+            regionStrings.push("end superscript");
+          });
+        }
+
+        break;
+      }
+
+    case "text":
+      {
+        // TODO: handle other fonts
+        if (tree.font === "\\textbf") {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start bold text");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end bold text");
+          });
+          break;
+        }
+
+        buildRegion(a11yStrings, function (regionStrings) {
+          regionStrings.push("start text");
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          regionStrings.push("end text");
+        });
+        break;
+      }
+
+    case "textord":
+      {
+        buildString(tree.text, atomType, a11yStrings);
+        break;
+      }
+
+    case "smash":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "enclose":
+      {
+        // TODO: create a map for these.
+        // TODO: differentiate between a body with a single atom, e.g.
+        // "cancel a" instead of "start cancel, a, end cancel"
+        if (/cancel/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start cancel");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end cancel");
+          });
+          break;
+        } else if (/box/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start box");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end box");
+          });
+          break;
+        } else if (/sout/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start strikeout");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end strikeout");
+          });
+          break;
+        }
+
+        throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet");
+      }
+
+    case "vphantom":
+      {
+        throw new Error("KaTeX-a11y: vphantom not implemented yet");
+      }
+
+    case "hphantom":
+      {
+        throw new Error("KaTeX-a11y: hphantom not implemented yet");
+      }
+
+    case "operatorname":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "array":
+      {
+        throw new Error("KaTeX-a11y: array not implemented yet");
+      }
+
+    case "raw":
+      {
+        throw new Error("KaTeX-a11y: raw not implemented yet");
+      }
+
+    case "size":
+      {
+        // Although there are nodes of type "size" in the parse tree, they have
+        // no semantic meaning and should be ignored.
+        break;
+      }
+
+    case "url":
+      {
+        throw new Error("KaTeX-a11y: url not implemented yet");
+      }
+
+    case "tag":
+      {
+        throw new Error("KaTeX-a11y: tag not implemented yet");
+      }
+
+    case "verb":
+      {
+        buildString("start verbatim", "normal", a11yStrings);
+        buildString(tree.body, "normal", a11yStrings);
+        buildString("end verbatim", "normal", a11yStrings);
+        break;
+      }
+
+    case "environment":
+      {
+        throw new Error("KaTeX-a11y: environment not implemented yet");
+      }
+
+    case "horizBrace":
+      {
+        buildString("start " + tree.label.slice(1), "normal", a11yStrings);
+        buildA11yStrings(tree.base, a11yStrings, atomType);
+        buildString("end " + tree.label.slice(1), "normal", a11yStrings);
+        break;
+      }
+
+    case "infix":
+      {
+        // All infix nodes are replace with other nodes.
+        break;
+      }
+
+    case "includegraphics":
+      {
+        throw new Error("KaTeX-a11y: includegraphics not implemented yet");
+      }
+
+    case "font":
+      {
+        // TODO: callout the start/end of specific fonts
+        // TODO: map \BBb{N} to "the naturals" or something like that
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "href":
+      {
+        throw new Error("KaTeX-a11y: href not implemented yet");
+      }
+
+    case "cr":
+      {
+        // This is used by environments.
+        throw new Error("KaTeX-a11y: cr not implemented yet");
+      }
+
+    case "underline":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          a11yStrings.push("start underline");
+          buildA11yStrings(tree.body, a11yStrings, atomType);
+          a11yStrings.push("end underline");
+        });
+        break;
+      }
+
+    case "xArrow":
+      {
+        throw new Error("KaTeX-a11y: xArrow not implemented yet");
+      }
+
+    case "mclass":
+      {
+        // \neq and \ne are macros so we let "htmlmathml" render the mathmal
+        // side of things and extract the text from that.
+        var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
+
+
+        buildA11yStrings(tree.body, a11yStrings, _atomType);
+        break;
+      }
+
+    case "mathchoice":
+      {
+        // TODO: track which which style we're using, e.g. dispaly, text, etc.
+        // default to text style if even that may not be the correct style
+        buildA11yStrings(tree.text, a11yStrings, atomType);
+        break;
+      }
+
+    case "htmlmathml":
+      {
+        buildA11yStrings(tree.mathml, a11yStrings, atomType);
+        break;
+      }
+
+    case "middle":
+      {
+        buildString(tree.delim, atomType, a11yStrings);
+        break;
+      }
+
+    default:
+      tree.type;
+      throw new Error("KaTeX a11y un-recognized type: " + tree.type);
+  }
+};
+
+var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
+  if (a11yStrings === void 0) {
+    a11yStrings = [];
+  }
+
+  if (tree instanceof Array) {
+    for (var i = 0; i < tree.length; i++) {
+      buildA11yStrings(tree[i], a11yStrings, atomType);
+    }
+  } else {
+    handleObject(tree, a11yStrings, atomType);
+  }
+
+  return a11yStrings;
+};
+
+var flatten = function flatten(array) {
+  var result = [];
+  array.forEach(function (item) {
+    if (item instanceof Array) {
+      result = result.concat(flatten(item));
+    } else {
+      result.push(item);
+    }
+  });
+  return result;
+};
+
+var renderA11yString = function renderA11yString(text, settings) {
+  var tree = katex__WEBPACK_IMPORTED_MODULE_0___default.a.__parse(text, settings);
+
+  var a11yStrings = buildA11yStrings(tree, [], "normal");
+  return flatten(a11yStrings).join(", ");
+};
+
+/* harmony default export */ __webpack_exports__["default"] = (renderA11yString);
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.min.js b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.min.js
new file mode 100644
index 0000000..0dcac27
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.min.js
@@ -0,0 +1 @@
+!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],r);else{var t="object"==typeof exports?r(require("katex")):r(e.katex);for(var a in t)("object"==typeof exports?exports:e)[a]=t[a]}}("undefined"!=typeof self?self:this,function(e){return function(e){var r={};function t(a){if(r[a])return r[a].exports;var o=r[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(a,o,function(r){return e[r]}.bind(null,o));return a},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=1)}([function(r,t){r.exports=e},function(e,r,t){"use strict";t.r(r);var a=t(0),o=t.n(a),n={"(":"left parenthesis",")":"right parenthesis","[":"open bracket","]":"close bracket","\\{":"left brace","\\}":"right brace","\\lvert":"open vertical bar","\\rvert":"close vertical bar","|":"vertical bar","\\uparrow":"up arrow","\\Uparrow":"up arrow","\\downarrow":"down arrow","\\Downarrow":"down arrow","\\updownarrow":"up down arrow","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow","\\langle":"open angle","\\rangle":"close angle","\\lfloor":"open floor","\\rfloor":"close floor","\\int":"integral","\\intop":"integral","\\lim":"limit","\\ln":"natural log","\\log":"log","\\sin":"sine","\\cos":"cosine","\\tan":"tangent","\\cot":"cotangent","\\sum":"sum","/":"slash",",":"comma",".":"point","-":"negative","+":"plus","~":"tilde",":":"colon","?":"question mark","'":"apostrophe","\\%":"percent"," ":"space","\\ ":"space","\\$":"dollar sign","\\angle":"angle","\\degree":"degree","\\circ":"circle","\\vec":"vector","\\triangle":"triangle","\\pi":"pi","\\prime":"prime","\\infty":"infinity","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\omega":"omega","\\theta":"theta","\\sigma":"sigma","\\lambda":"lambda","\\tau":"tau","\\Delta":"delta","\\delta":"delta","\\mu":"mu","\\rho":"rho","\\nabla":"del","\\ell":"ell","\\ldots":"dots","\\hat":"hat","\\acute":"acute"},s={prime:"prime",degree:"degrees",circle:"degrees",2:"squared",3:"cubed"},i={"|":"open vertical bar",".":""},l={"|":"close vertical bar",".":""},c={"+":"plus","-":"minus","\\pm":"plus minus","\\cdot":"dot","*":"times","/":"divided by","\\times":"times","\\div":"divided by","\\circ":"circle","\\bullet":"bullet"},u={"=":"equals","\\approx":"approximately equals","\u2260":"does not equal","\\geq":"is greater than or equal to","\\ge":"is greater than or equal to","\\leq":"is less than or equal to","\\le":"is less than or equal to",">":"is greater than","<":"is less than","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow",":":"colon"},p={"\\underleftarrow":"left arrow","\\underrightarrow":"right arrow","\\underleftrightarrow":"left-right arrow","\\undergroup":"group","\\underlinesegment":"line segment","\\utilde":"tilde"},d=function(e,r,t){var a;e&&(/^\d+$/.test(a="open"===r?e in i?i[e]:n[e]||e:"close"===r?e in l?l[e]:n[e]||e:"bin"===r?c[e]||e:"rel"===r?u[e]||e:n[e]||e)&&t.length>0&&/^\d+$/.test(t[t.length-1])?t[t.length-1]+=a:a&&t.push(a))},b=function(e,r){var t=[];e.push(t),r(t)},h=function(e,r,t){switch(e.type){case"accent":b(r,function(r){f(e.base,r,t),r.push("with"),d(e.label,"normal",r),r.push("on top")});break;case"accentUnder":b(r,function(r){f(e.base,r,t),r.push("with"),d(p[e.label],"normal",r),r.push("underneath")});break;case"accent-token":break;case"atom":var a=e.text;switch(e.family){case"bin":d(a,"bin",r);break;case"close":d(a,"close",r);break;case"inner":d(e.text,"inner",r);break;case"open":d(a,"open",r);break;case"punct":d(a,"punct",r);break;case"rel":d(a,"rel",r);break;default:throw e.family,new Error('"'+e.family+'" is not a valid atom type')}break;case"color":var o=e.color.replace(/katex-/,"");b(r,function(r){r.push("start color "+o),f(e.body,r,t),r.push("end color "+o)});break;case"color-token":break;case"delimsizing":e.delim&&"."!==e.delim&&d(e.delim,"normal",r);break;case"genfrac":b(r,function(r){var a=e.leftDelim,o=e.rightDelim;e.hasBarLine?(r.push("start fraction"),a&&d(a,"open",r),f(e.numer,r,t),r.push("divided by"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end fraction")):(r.push("start binomial"),a&&d(a,"open",r),f(e.numer,r,t),r.push("over"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end binomial"))});break;case"kern":break;case"leftright":b(r,function(r){d(e.left,"open",r),f(e.body,r,t),d(e.right,"close",r)});break;case"leftright-right":break;case"lap":f(e.body,r,t);break;case"mathord":d(e.text,"normal",r);break;case"op":var n=e.body,i=e.name;n?f(n,r,t):i&&d(i,"normal",r);break;case"op-token":d(e.text,t,r);break;case"ordgroup":f(e.body,r,t);break;case"overline":b(r,function(r){r.push("start overline"),f(e.body,r,t),r.push("end overline")});break;case"phantom":r.push("empty space");break;case"raisebox":f(e.body,r,t);break;case"rule":r.push("rectangle");break;case"sizing":f(e.body,r,t);break;case"spacing":r.push("space");break;case"styling":f(e.body,r,t);break;case"sqrt":b(r,function(r){var a=e.body,o=e.index;if(o)return"3"===m(f(o,[],t)).join(",")?(r.push("cube root of"),f(a,r,t),void r.push("end cube root")):(r.push("root"),r.push("start index"),f(o,r,t),void r.push("end index"));r.push("square root of"),f(a,r,t),r.push("end square root")});break;case"supsub":var l=e.base,c=e.sub,u=e.sup,h=!1;if(l&&(f(l,r,t),h="op"===l.type&&"\\log"===l.name),c){var y=h?"base":"subscript";b(r,function(e){e.push("start "+y),f(c,e,t),e.push("end "+y)})}u&&b(r,function(e){var r=m(f(u,[],t)).join(",");r in s?e.push(s[r]):(e.push("start superscript"),f(u,e,t),e.push("end superscript"))});break;case"text":if("\\textbf"===e.font){b(r,function(r){r.push("start bold text"),f(e.body,r,t),r.push("end bold text")});break}b(r,function(r){r.push("start text"),f(e.body,r,t),r.push("end text")});break;case"textord":d(e.text,t,r);break;case"smash":f(e.body,r,t);break;case"enclose":if(/cancel/.test(e.label)){b(r,function(r){r.push("start cancel"),f(e.body,r,t),r.push("end cancel")});break}if(/box/.test(e.label)){b(r,function(r){r.push("start box"),f(e.body,r,t),r.push("end box")});break}if(/sout/.test(e.label)){b(r,function(r){r.push("start strikeout"),f(e.body,r,t),r.push("end strikeout")});break}throw new Error("KaTeX-a11y: enclose node with "+e.label+" not supported yet");case"vphantom":throw new Error("KaTeX-a11y: vphantom not implemented yet");case"hphantom":throw new Error("KaTeX-a11y: hphantom not implemented yet");case"operatorname":f(e.body,r,t);break;case"array":throw new Error("KaTeX-a11y: array not implemented yet");case"raw":throw new Error("KaTeX-a11y: raw not implemented yet");case"size":break;case"url":throw new Error("KaTeX-a11y: url not implemented yet");case"tag":throw new Error("KaTeX-a11y: tag not implemented yet");case"verb":d("start verbatim","normal",r),d(e.body,"normal",r),d("end verbatim","normal",r);break;case"environment":throw new Error("KaTeX-a11y: environment not implemented yet");case"horizBrace":d("start "+e.label.slice(1),"normal",r),f(e.base,r,t),d("end "+e.label.slice(1),"normal",r);break;case"infix":break;case"includegraphics":throw new Error("KaTeX-a11y: includegraphics not implemented yet");case"font":f(e.body,r,t);break;case"href":throw new Error("KaTeX-a11y: href not implemented yet");case"cr":throw new Error("KaTeX-a11y: cr not implemented yet");case"underline":b(r,function(r){r.push("start underline"),f(e.body,r,t),r.push("end underline")});break;case"xArrow":throw new Error("KaTeX-a11y: xArrow not implemented yet");case"mclass":var g=e.mclass.slice(1);f(e.body,r,g);break;case"mathchoice":f(e.text,r,t);break;case"htmlmathml":f(e.mathml,r,t);break;case"middle":d(e.delim,t,r);break;default:throw e.type,new Error("KaTeX a11y un-recognized type: "+e.type)}},f=function e(r,t,a){if(void 0===t&&(t=[]),r instanceof Array)for(var o=0;o<r.length;o++)e(r[o],t,a);else h(r,t,a);return t},m=function e(r){var t=[];return r.forEach(function(r){r instanceof Array?t=t.concat(e(r)):t.push(r)}),t};r.default=function(e,r){var t=o.a.__parse(e,r),a=f(t,[],"normal");return m(a).join(", ")}}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.mjs b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.mjs
new file mode 100644
index 0000000..fc63bfc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/contrib/render-a11y-string.mjs
@@ -0,0 +1,741 @@
+import katex from '../katex.mjs';
+
+/**
+ * renderA11yString returns a readable string.
+ *
+ * In some cases the string will have the proper semantic math
+ * meaning,:
+ *   renderA11yString("\\frac{1}{2}"")
+ *   -> "start fraction, 1, divided by, 2, end fraction"
+ *
+ * However, other cases do not:
+ *   renderA11yString("f(x) = x^2")
+ *   -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
+ *
+ * The commas in the string aim to increase ease of understanding
+ * when read by a screenreader.
+ */
+const stringMap = {
+  "(": "left parenthesis",
+  ")": "right parenthesis",
+  "[": "open bracket",
+  "]": "close bracket",
+  "\\{": "left brace",
+  "\\}": "right brace",
+  "\\lvert": "open vertical bar",
+  "\\rvert": "close vertical bar",
+  "|": "vertical bar",
+  "\\uparrow": "up arrow",
+  "\\Uparrow": "up arrow",
+  "\\downarrow": "down arrow",
+  "\\Downarrow": "down arrow",
+  "\\updownarrow": "up down arrow",
+  "\\leftarrow": "left arrow",
+  "\\Leftarrow": "left arrow",
+  "\\rightarrow": "right arrow",
+  "\\Rightarrow": "right arrow",
+  "\\langle": "open angle",
+  "\\rangle": "close angle",
+  "\\lfloor": "open floor",
+  "\\rfloor": "close floor",
+  "\\int": "integral",
+  "\\intop": "integral",
+  "\\lim": "limit",
+  "\\ln": "natural log",
+  "\\log": "log",
+  "\\sin": "sine",
+  "\\cos": "cosine",
+  "\\tan": "tangent",
+  "\\cot": "cotangent",
+  "\\sum": "sum",
+  "/": "slash",
+  ",": "comma",
+  ".": "point",
+  "-": "negative",
+  "+": "plus",
+  "~": "tilde",
+  ":": "colon",
+  "?": "question mark",
+  "'": "apostrophe",
+  "\\%": "percent",
+  " ": "space",
+  "\\ ": "space",
+  "\\$": "dollar sign",
+  "\\angle": "angle",
+  "\\degree": "degree",
+  "\\circ": "circle",
+  "\\vec": "vector",
+  "\\triangle": "triangle",
+  "\\pi": "pi",
+  "\\prime": "prime",
+  "\\infty": "infinity",
+  "\\alpha": "alpha",
+  "\\beta": "beta",
+  "\\gamma": "gamma",
+  "\\omega": "omega",
+  "\\theta": "theta",
+  "\\sigma": "sigma",
+  "\\lambda": "lambda",
+  "\\tau": "tau",
+  "\\Delta": "delta",
+  "\\delta": "delta",
+  "\\mu": "mu",
+  "\\rho": "rho",
+  "\\nabla": "del",
+  "\\ell": "ell",
+  "\\ldots": "dots",
+  // TODO: add entries for all accents
+  "\\hat": "hat",
+  "\\acute": "acute"
+};
+const powerMap = {
+  "prime": "prime",
+  "degree": "degrees",
+  "circle": "degrees",
+  "2": "squared",
+  "3": "cubed"
+};
+const openMap = {
+  "|": "open vertical bar",
+  ".": ""
+};
+const closeMap = {
+  "|": "close vertical bar",
+  ".": ""
+};
+const binMap = {
+  "+": "plus",
+  "-": "minus",
+  "\\pm": "plus minus",
+  "\\cdot": "dot",
+  "*": "times",
+  "/": "divided by",
+  "\\times": "times",
+  "\\div": "divided by",
+  "\\circ": "circle",
+  "\\bullet": "bullet"
+};
+const relMap = {
+  "=": "equals",
+  "\\approx": "approximately equals",
+  "≠": "does not equal",
+  "\\geq": "is greater than or equal to",
+  "\\ge": "is greater than or equal to",
+  "\\leq": "is less than or equal to",
+  "\\le": "is less than or equal to",
+  ">": "is greater than",
+  "<": "is less than",
+  "\\leftarrow": "left arrow",
+  "\\Leftarrow": "left arrow",
+  "\\rightarrow": "right arrow",
+  "\\Rightarrow": "right arrow",
+  ":": "colon"
+};
+const accentUnderMap = {
+  "\\underleftarrow": "left arrow",
+  "\\underrightarrow": "right arrow",
+  "\\underleftrightarrow": "left-right arrow",
+  "\\undergroup": "group",
+  "\\underlinesegment": "line segment",
+  "\\utilde": "tilde"
+};
+
+const buildString = (str, type, a11yStrings) => {
+  if (!str) {
+    return;
+  }
+
+  let ret;
+
+  if (type === "open") {
+    ret = str in openMap ? openMap[str] : stringMap[str] || str;
+  } else if (type === "close") {
+    ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
+  } else if (type === "bin") {
+    ret = binMap[str] || str;
+  } else if (type === "rel") {
+    ret = relMap[str] || str;
+  } else {
+    ret = stringMap[str] || str;
+  } // If the text to add is a number and there is already a string
+  // in the list and the last string is a number then we should
+  // combine them into a single number
+
+
+  if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
+  // I think we might be able to drop the nested arrays, which would make
+  // this easier to type - $FlowFixMe
+  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
+    a11yStrings[a11yStrings.length - 1] += ret;
+  } else if (ret) {
+    a11yStrings.push(ret);
+  }
+};
+
+const buildRegion = (a11yStrings, callback) => {
+  const regionStrings = [];
+  a11yStrings.push(regionStrings);
+  callback(regionStrings);
+};
+
+const handleObject = (tree, a11yStrings, atomType) => {
+  // Everything else is assumed to be an object...
+  switch (tree.type) {
+    case "accent":
+      {
+        buildRegion(a11yStrings, a11yStrings => {
+          buildA11yStrings(tree.base, a11yStrings, atomType);
+          a11yStrings.push("with");
+          buildString(tree.label, "normal", a11yStrings);
+          a11yStrings.push("on top");
+        });
+        break;
+      }
+
+    case "accentUnder":
+      {
+        buildRegion(a11yStrings, a11yStrings => {
+          buildA11yStrings(tree.base, a11yStrings, atomType);
+          a11yStrings.push("with");
+          buildString(accentUnderMap[tree.label], "normal", a11yStrings);
+          a11yStrings.push("underneath");
+        });
+        break;
+      }
+
+    case "accent-token":
+      {
+        // Used internally by accent symbols.
+        break;
+      }
+
+    case "atom":
+      {
+        const text = tree.text;
+
+        switch (tree.family) {
+          case "bin":
+            {
+              buildString(text, "bin", a11yStrings);
+              break;
+            }
+
+          case "close":
+            {
+              buildString(text, "close", a11yStrings);
+              break;
+            }
+          // TODO(kevinb): figure out what should be done for inner
+
+          case "inner":
+            {
+              buildString(tree.text, "inner", a11yStrings);
+              break;
+            }
+
+          case "open":
+            {
+              buildString(text, "open", a11yStrings);
+              break;
+            }
+
+          case "punct":
+            {
+              buildString(text, "punct", a11yStrings);
+              break;
+            }
+
+          case "rel":
+            {
+              buildString(text, "rel", a11yStrings);
+              break;
+            }
+
+          default:
+            {
+              tree.family;
+              throw new Error(`"${tree.family}" is not a valid atom type`);
+            }
+        }
+
+        break;
+      }
+
+    case "color":
+      {
+        const color = tree.color.replace(/katex-/, "");
+        buildRegion(a11yStrings, regionStrings => {
+          regionStrings.push("start color " + color);
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          regionStrings.push("end color " + color);
+        });
+        break;
+      }
+
+    case "color-token":
+      {
+        // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
+        // It's a leaf node and has no children so just break.
+        break;
+      }
+
+    case "delimsizing":
+      {
+        if (tree.delim && tree.delim !== ".") {
+          buildString(tree.delim, "normal", a11yStrings);
+        }
+
+        break;
+      }
+
+    case "genfrac":
+      {
+        buildRegion(a11yStrings, regionStrings => {
+          // genfrac can have unbalanced delimiters
+          const leftDelim = tree.leftDelim,
+                rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
+          // hasBarLine true -> fraction, false -> binomial
+
+          if (tree.hasBarLine) {
+            regionStrings.push("start fraction");
+            leftDelim && buildString(leftDelim, "open", regionStrings);
+            buildA11yStrings(tree.numer, regionStrings, atomType);
+            regionStrings.push("divided by");
+            buildA11yStrings(tree.denom, regionStrings, atomType);
+            rightDelim && buildString(rightDelim, "close", regionStrings);
+            regionStrings.push("end fraction");
+          } else {
+            regionStrings.push("start binomial");
+            leftDelim && buildString(leftDelim, "open", regionStrings);
+            buildA11yStrings(tree.numer, regionStrings, atomType);
+            regionStrings.push("over");
+            buildA11yStrings(tree.denom, regionStrings, atomType);
+            rightDelim && buildString(rightDelim, "close", regionStrings);
+            regionStrings.push("end binomial");
+          }
+        });
+        break;
+      }
+
+    case "kern":
+      {
+        // No op: we don't attempt to present kerning information
+        // to the screen reader.
+        break;
+      }
+
+    case "leftright":
+      {
+        buildRegion(a11yStrings, regionStrings => {
+          buildString(tree.left, "open", regionStrings);
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          buildString(tree.right, "close", regionStrings);
+        });
+        break;
+      }
+
+    case "leftright-right":
+      {
+        // TODO: double check that this is a no-op
+        break;
+      }
+
+    case "lap":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "mathord":
+      {
+        buildString(tree.text, "normal", a11yStrings);
+        break;
+      }
+
+    case "op":
+      {
+        const body = tree.body,
+              name = tree.name;
+
+        if (body) {
+          buildA11yStrings(body, a11yStrings, atomType);
+        } else if (name) {
+          buildString(name, "normal", a11yStrings);
+        }
+
+        break;
+      }
+
+    case "op-token":
+      {
+        // Used internally by operator symbols.
+        buildString(tree.text, atomType, a11yStrings);
+        break;
+      }
+
+    case "ordgroup":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "overline":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          a11yStrings.push("start overline");
+          buildA11yStrings(tree.body, a11yStrings, atomType);
+          a11yStrings.push("end overline");
+        });
+        break;
+      }
+
+    case "phantom":
+      {
+        a11yStrings.push("empty space");
+        break;
+      }
+
+    case "raisebox":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "rule":
+      {
+        a11yStrings.push("rectangle");
+        break;
+      }
+
+    case "sizing":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "spacing":
+      {
+        a11yStrings.push("space");
+        break;
+      }
+
+    case "styling":
+      {
+        // We ignore the styling and just pass through the contents
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "sqrt":
+      {
+        buildRegion(a11yStrings, regionStrings => {
+          const body = tree.body,
+                index = tree.index;
+
+          if (index) {
+            const indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
+
+            if (indexString === "3") {
+              regionStrings.push("cube root of");
+              buildA11yStrings(body, regionStrings, atomType);
+              regionStrings.push("end cube root");
+              return;
+            }
+
+            regionStrings.push("root");
+            regionStrings.push("start index");
+            buildA11yStrings(index, regionStrings, atomType);
+            regionStrings.push("end index");
+            return;
+          }
+
+          regionStrings.push("square root of");
+          buildA11yStrings(body, regionStrings, atomType);
+          regionStrings.push("end square root");
+        });
+        break;
+      }
+
+    case "supsub":
+      {
+        const base = tree.base,
+              sub = tree.sub,
+              sup = tree.sup;
+        let isLog = false;
+
+        if (base) {
+          buildA11yStrings(base, a11yStrings, atomType);
+          isLog = base.type === "op" && base.name === "\\log";
+        }
+
+        if (sub) {
+          const regionName = isLog ? "base" : "subscript";
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push(`start ${regionName}`);
+            buildA11yStrings(sub, regionStrings, atomType);
+            regionStrings.push(`end ${regionName}`);
+          });
+        }
+
+        if (sup) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            const supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
+
+            if (supString in powerMap) {
+              regionStrings.push(powerMap[supString]);
+              return;
+            }
+
+            regionStrings.push("start superscript");
+            buildA11yStrings(sup, regionStrings, atomType);
+            regionStrings.push("end superscript");
+          });
+        }
+
+        break;
+      }
+
+    case "text":
+      {
+        // TODO: handle other fonts
+        if (tree.font === "\\textbf") {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start bold text");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end bold text");
+          });
+          break;
+        }
+
+        buildRegion(a11yStrings, function (regionStrings) {
+          regionStrings.push("start text");
+          buildA11yStrings(tree.body, regionStrings, atomType);
+          regionStrings.push("end text");
+        });
+        break;
+      }
+
+    case "textord":
+      {
+        buildString(tree.text, atomType, a11yStrings);
+        break;
+      }
+
+    case "smash":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "enclose":
+      {
+        // TODO: create a map for these.
+        // TODO: differentiate between a body with a single atom, e.g.
+        // "cancel a" instead of "start cancel, a, end cancel"
+        if (/cancel/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start cancel");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end cancel");
+          });
+          break;
+        } else if (/box/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start box");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end box");
+          });
+          break;
+        } else if (/sout/.test(tree.label)) {
+          buildRegion(a11yStrings, function (regionStrings) {
+            regionStrings.push("start strikeout");
+            buildA11yStrings(tree.body, regionStrings, atomType);
+            regionStrings.push("end strikeout");
+          });
+          break;
+        }
+
+        throw new Error(`KaTeX-a11y: enclose node with ${tree.label} not supported yet`);
+      }
+
+    case "vphantom":
+      {
+        throw new Error("KaTeX-a11y: vphantom not implemented yet");
+      }
+
+    case "hphantom":
+      {
+        throw new Error("KaTeX-a11y: hphantom not implemented yet");
+      }
+
+    case "operatorname":
+      {
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "array":
+      {
+        throw new Error("KaTeX-a11y: array not implemented yet");
+      }
+
+    case "raw":
+      {
+        throw new Error("KaTeX-a11y: raw not implemented yet");
+      }
+
+    case "size":
+      {
+        // Although there are nodes of type "size" in the parse tree, they have
+        // no semantic meaning and should be ignored.
+        break;
+      }
+
+    case "url":
+      {
+        throw new Error("KaTeX-a11y: url not implemented yet");
+      }
+
+    case "tag":
+      {
+        throw new Error("KaTeX-a11y: tag not implemented yet");
+      }
+
+    case "verb":
+      {
+        buildString(`start verbatim`, "normal", a11yStrings);
+        buildString(tree.body, "normal", a11yStrings);
+        buildString(`end verbatim`, "normal", a11yStrings);
+        break;
+      }
+
+    case "environment":
+      {
+        throw new Error("KaTeX-a11y: environment not implemented yet");
+      }
+
+    case "horizBrace":
+      {
+        buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings);
+        buildA11yStrings(tree.base, a11yStrings, atomType);
+        buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings);
+        break;
+      }
+
+    case "infix":
+      {
+        // All infix nodes are replace with other nodes.
+        break;
+      }
+
+    case "includegraphics":
+      {
+        throw new Error("KaTeX-a11y: includegraphics not implemented yet");
+      }
+
+    case "font":
+      {
+        // TODO: callout the start/end of specific fonts
+        // TODO: map \BBb{N} to "the naturals" or something like that
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "href":
+      {
+        throw new Error("KaTeX-a11y: href not implemented yet");
+      }
+
+    case "cr":
+      {
+        // This is used by environments.
+        throw new Error("KaTeX-a11y: cr not implemented yet");
+      }
+
+    case "underline":
+      {
+        buildRegion(a11yStrings, function (a11yStrings) {
+          a11yStrings.push("start underline");
+          buildA11yStrings(tree.body, a11yStrings, atomType);
+          a11yStrings.push("end underline");
+        });
+        break;
+      }
+
+    case "xArrow":
+      {
+        throw new Error("KaTeX-a11y: xArrow not implemented yet");
+      }
+
+    case "mclass":
+      {
+        // \neq and \ne are macros so we let "htmlmathml" render the mathmal
+        // side of things and extract the text from that.
+        const atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
+
+        buildA11yStrings(tree.body, a11yStrings, atomType);
+        break;
+      }
+
+    case "mathchoice":
+      {
+        // TODO: track which which style we're using, e.g. dispaly, text, etc.
+        // default to text style if even that may not be the correct style
+        buildA11yStrings(tree.text, a11yStrings, atomType);
+        break;
+      }
+
+    case "htmlmathml":
+      {
+        buildA11yStrings(tree.mathml, a11yStrings, atomType);
+        break;
+      }
+
+    case "middle":
+      {
+        buildString(tree.delim, atomType, a11yStrings);
+        break;
+      }
+
+    default:
+      tree.type;
+      throw new Error("KaTeX a11y un-recognized type: " + tree.type);
+  }
+};
+
+const buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
+  if (a11yStrings === void 0) {
+    a11yStrings = [];
+  }
+
+  if (tree instanceof Array) {
+    for (let i = 0; i < tree.length; i++) {
+      buildA11yStrings(tree[i], a11yStrings, atomType);
+    }
+  } else {
+    handleObject(tree, a11yStrings, atomType);
+  }
+
+  return a11yStrings;
+};
+
+const flatten = function flatten(array) {
+  let result = [];
+  array.forEach(function (item) {
+    if (item instanceof Array) {
+      result = result.concat(flatten(item));
+    } else {
+      result.push(item);
+    }
+  });
+  return result;
+};
+
+const renderA11yString = function renderA11yString(text, settings) {
+  const tree = katex.__parse(text, settings);
+
+  const a11yStrings = buildA11yStrings(tree, [], "normal");
+  return flatten(a11yStrings).join(", ");
+};
+
+export default renderA11yString;
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.ttf
new file mode 100644
index 0000000..afcd2eb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff
new file mode 100644
index 0000000..4f57515
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff2
new file mode 100644
index 0000000..b982d6e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_AMS-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.ttf
new file mode 100644
index 0000000..f84148d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff
new file mode 100644
index 0000000..ab56ab7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff2
new file mode 100644
index 0000000..710c261
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Bold.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.ttf
new file mode 100644
index 0000000..97814db
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff
new file mode 100644
index 0000000..aec8a33
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff2
new file mode 100644
index 0000000..ee5193d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Caligraphic-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.ttf
new file mode 100644
index 0000000..483a7cd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff
new file mode 100644
index 0000000..189fea5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff2
new file mode 100644
index 0000000..dc3bd4c0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Bold.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.ttf
new file mode 100644
index 0000000..9aa5f67
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff
new file mode 100644
index 0000000..d01450e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff2
new file mode 100644
index 0000000..7eeba37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Fraktur-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.ttf
new file mode 100644
index 0000000..dc0185a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff
new file mode 100644
index 0000000..acf48e6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff2
new file mode 100644
index 0000000..cf5abab
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Bold.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.ttf
new file mode 100644
index 0000000..4346f17
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff
new file mode 100644
index 0000000..d2cfe4e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff2
new file mode 100644
index 0000000..d0178f4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-BoldItalic.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.ttf
new file mode 100644
index 0000000..f2c3eba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff
new file mode 100644
index 0000000..1184295
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff2
new file mode 100644
index 0000000..aa05e14
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Italic.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.ttf
new file mode 100644
index 0000000..8acb365
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff
new file mode 100644
index 0000000..9f8228f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 0000000..e3f71eb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Main-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.ttf
new file mode 100644
index 0000000..a645df6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff
new file mode 100644
index 0000000..87d4f22
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff2
new file mode 100644
index 0000000..83b4996
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-BoldItalic.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.ttf
new file mode 100644
index 0000000..9c38359
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff
new file mode 100644
index 0000000..959746e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 0000000..e3ea522
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Math-Italic.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.ttf
new file mode 100644
index 0000000..ff10851
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff
new file mode 100644
index 0000000..f0d6ea7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff2
new file mode 100644
index 0000000..4cf8f14
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Bold.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.ttf
new file mode 100644
index 0000000..3dd7671
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff
new file mode 100644
index 0000000..9da0dfe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff2
new file mode 100644
index 0000000..ce19ae0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Italic.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.ttf
new file mode 100644
index 0000000..f117cd6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff
new file mode 100644
index 0000000..6ed9878
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff2
new file mode 100644
index 0000000..2761149
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_SansSerif-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.ttf
new file mode 100644
index 0000000..e6f3454
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff
new file mode 100644
index 0000000..4a48e65
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff2
new file mode 100644
index 0000000..b0aed19
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Script-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.ttf
new file mode 100644
index 0000000..37faa0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff
new file mode 100644
index 0000000..0832f7a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff2
new file mode 100644
index 0000000..483e7b6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size1-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.ttf
new file mode 100644
index 0000000..cf32623
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff
new file mode 100644
index 0000000..14f6485
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff2
new file mode 100644
index 0000000..5ff7060
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size2-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.ttf
new file mode 100644
index 0000000..ff7e2b9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff
new file mode 100644
index 0000000..d3626ce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff2
new file mode 100644
index 0000000..e45ca49
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size3-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.ttf
new file mode 100644
index 0000000..3034091
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff
new file mode 100644
index 0000000..93c57a6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff2
new file mode 100644
index 0000000..53b65af
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Size4-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.ttf b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.ttf
new file mode 100644
index 0000000..2fd8529
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.ttf
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff
new file mode 100644
index 0000000..e90fa2b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff2
new file mode 100644
index 0000000..e40ab15
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/fonts/KaTeX_Typewriter-Regular.woff2
Binary files differ
diff --git a/codegen/vulkan/vulkan-docs-next/katex/katex.css b/codegen/vulkan/vulkan-docs-next/katex/katex.css
new file mode 100644
index 0000000..7c97e92
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/katex.css
@@ -0,0 +1,1012 @@
+/* stylelint-disable font-family-no-missing-generic-family-keyword */
+@font-face {
+  font-family: 'KaTeX_AMS';
+  src: url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'), url(fonts/KaTeX_AMS-Regular.woff) format('woff'), url(fonts/KaTeX_AMS-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Caligraphic';
+  src: url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype');
+  font-weight: bold;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Caligraphic';
+  src: url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Fraktur';
+  src: url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'), url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype');
+  font-weight: bold;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Fraktur';
+  src: url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'), url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Main';
+  src: url(fonts/KaTeX_Main-Bold.woff2) format('woff2'), url(fonts/KaTeX_Main-Bold.woff) format('woff'), url(fonts/KaTeX_Main-Bold.ttf) format('truetype');
+  font-weight: bold;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Main';
+  src: url(fonts/KaTeX_Main-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Main-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Main-BoldItalic.ttf) format('truetype');
+  font-weight: bold;
+  font-style: italic;
+}
+@font-face {
+  font-family: 'KaTeX_Main';
+  src: url(fonts/KaTeX_Main-Italic.woff2) format('woff2'), url(fonts/KaTeX_Main-Italic.woff) format('woff'), url(fonts/KaTeX_Main-Italic.ttf) format('truetype');
+  font-weight: normal;
+  font-style: italic;
+}
+@font-face {
+  font-family: 'KaTeX_Main';
+  src: url(fonts/KaTeX_Main-Regular.woff2) format('woff2'), url(fonts/KaTeX_Main-Regular.woff) format('woff'), url(fonts/KaTeX_Main-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Math';
+  src: url(fonts/KaTeX_Math-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Math-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Math-BoldItalic.ttf) format('truetype');
+  font-weight: bold;
+  font-style: italic;
+}
+@font-face {
+  font-family: 'KaTeX_Math';
+  src: url(fonts/KaTeX_Math-Italic.woff2) format('woff2'), url(fonts/KaTeX_Math-Italic.woff) format('woff'), url(fonts/KaTeX_Math-Italic.ttf) format('truetype');
+  font-weight: normal;
+  font-style: italic;
+}
+@font-face {
+  font-family: 'KaTeX_SansSerif';
+  src: url(fonts/KaTeX_SansSerif-Bold.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Bold.woff) format('woff'), url(fonts/KaTeX_SansSerif-Bold.ttf) format('truetype');
+  font-weight: bold;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_SansSerif';
+  src: url(fonts/KaTeX_SansSerif-Italic.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Italic.woff) format('woff'), url(fonts/KaTeX_SansSerif-Italic.ttf) format('truetype');
+  font-weight: normal;
+  font-style: italic;
+}
+@font-face {
+  font-family: 'KaTeX_SansSerif';
+  src: url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'), url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Script';
+  src: url(fonts/KaTeX_Script-Regular.woff2) format('woff2'), url(fonts/KaTeX_Script-Regular.woff) format('woff'), url(fonts/KaTeX_Script-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Size1';
+  src: url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size1-Regular.woff) format('woff'), url(fonts/KaTeX_Size1-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Size2';
+  src: url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size2-Regular.woff) format('woff'), url(fonts/KaTeX_Size2-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Size3';
+  src: url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size3-Regular.woff) format('woff'), url(fonts/KaTeX_Size3-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Size4';
+  src: url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size4-Regular.woff) format('woff'), url(fonts/KaTeX_Size4-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'KaTeX_Typewriter';
+  src: url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'), url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'), url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype');
+  font-weight: normal;
+  font-style: normal;
+}
+.katex {
+  font: normal 1.21em KaTeX_Main, Times New Roman, serif;
+  line-height: 1.2;
+  text-indent: 0;
+  text-rendering: auto;
+}
+.katex * {
+  -ms-high-contrast-adjust: none !important;
+}
+.katex .katex-version::after {
+  content: "0.11.1";
+}
+.katex .katex-mathml {
+  position: absolute;
+  clip: rect(1px, 1px, 1px, 1px);
+  padding: 0;
+  border: 0;
+  height: 1px;
+  width: 1px;
+  overflow: hidden;
+}
+.katex .katex-html {
+  /* \newline is an empty block at top level, between .base elements */
+}
+.katex .katex-html > .newline {
+  display: block;
+}
+.katex .base {
+  position: relative;
+  display: inline-block;
+  white-space: nowrap;
+  width: min-content;
+}
+.katex .strut {
+  display: inline-block;
+}
+.katex .textbf {
+  font-weight: bold;
+}
+.katex .textit {
+  font-style: italic;
+}
+.katex .textrm {
+  font-family: KaTeX_Main;
+}
+.katex .textsf {
+  font-family: KaTeX_SansSerif;
+}
+.katex .texttt {
+  font-family: KaTeX_Typewriter;
+}
+.katex .mathdefault {
+  font-family: KaTeX_Math;
+  font-style: italic;
+}
+.katex .mathit {
+  font-family: KaTeX_Main;
+  font-style: italic;
+}
+.katex .mathrm {
+  font-style: normal;
+}
+.katex .mathbf {
+  font-family: KaTeX_Main;
+  font-weight: bold;
+}
+.katex .boldsymbol {
+  font-family: KaTeX_Math;
+  font-weight: bold;
+  font-style: italic;
+}
+.katex .amsrm {
+  font-family: KaTeX_AMS;
+}
+.katex .mathbb,
+.katex .textbb {
+  font-family: KaTeX_AMS;
+}
+.katex .mathcal {
+  font-family: KaTeX_Caligraphic;
+}
+.katex .mathfrak,
+.katex .textfrak {
+  font-family: KaTeX_Fraktur;
+}
+.katex .mathtt {
+  font-family: KaTeX_Typewriter;
+}
+.katex .mathscr,
+.katex .textscr {
+  font-family: KaTeX_Script;
+}
+.katex .mathsf,
+.katex .textsf {
+  font-family: KaTeX_SansSerif;
+}
+.katex .mathboldsf,
+.katex .textboldsf {
+  font-family: KaTeX_SansSerif;
+  font-weight: bold;
+}
+.katex .mathitsf,
+.katex .textitsf {
+  font-family: KaTeX_SansSerif;
+  font-style: italic;
+}
+.katex .mainrm {
+  font-family: KaTeX_Main;
+  font-style: normal;
+}
+.katex .vlist-t {
+  display: inline-table;
+  table-layout: fixed;
+}
+.katex .vlist-r {
+  display: table-row;
+}
+.katex .vlist {
+  display: table-cell;
+  vertical-align: bottom;
+  position: relative;
+}
+.katex .vlist > span {
+  display: block;
+  height: 0;
+  position: relative;
+}
+.katex .vlist > span > span {
+  display: inline-block;
+}
+.katex .vlist > span > .pstrut {
+  overflow: hidden;
+  width: 0;
+}
+.katex .vlist-t2 {
+  margin-right: -2px;
+}
+.katex .vlist-s {
+  display: table-cell;
+  vertical-align: bottom;
+  font-size: 1px;
+  width: 2px;
+  min-width: 2px;
+}
+.katex .msupsub {
+  text-align: left;
+}
+.katex .mfrac > span > span {
+  text-align: center;
+}
+.katex .mfrac .frac-line {
+  display: inline-block;
+  width: 100%;
+  border-bottom-style: solid;
+}
+.katex .mfrac .frac-line,
+.katex .overline .overline-line,
+.katex .underline .underline-line,
+.katex .hline,
+.katex .hdashline,
+.katex .rule {
+  min-height: 1px;
+}
+.katex .mspace {
+  display: inline-block;
+}
+.katex .llap,
+.katex .rlap,
+.katex .clap {
+  width: 0;
+  position: relative;
+}
+.katex .llap > .inner,
+.katex .rlap > .inner,
+.katex .clap > .inner {
+  position: absolute;
+}
+.katex .llap > .fix,
+.katex .rlap > .fix,
+.katex .clap > .fix {
+  display: inline-block;
+}
+.katex .llap > .inner {
+  right: 0;
+}
+.katex .rlap > .inner,
+.katex .clap > .inner {
+  left: 0;
+}
+.katex .clap > .inner > span {
+  margin-left: -50%;
+  margin-right: 50%;
+}
+.katex .rule {
+  display: inline-block;
+  border: solid 0;
+  position: relative;
+}
+.katex .overline .overline-line,
+.katex .underline .underline-line,
+.katex .hline {
+  display: inline-block;
+  width: 100%;
+  border-bottom-style: solid;
+}
+.katex .hdashline {
+  display: inline-block;
+  width: 100%;
+  border-bottom-style: dashed;
+}
+.katex .sqrt > .root {
+  margin-left: 0.27777778em;
+  margin-right: -0.55555556em;
+}
+.katex .sizing.reset-size1.size1,
+.katex .fontsize-ensurer.reset-size1.size1 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size1.size2,
+.katex .fontsize-ensurer.reset-size1.size2 {
+  font-size: 1.2em;
+}
+.katex .sizing.reset-size1.size3,
+.katex .fontsize-ensurer.reset-size1.size3 {
+  font-size: 1.4em;
+}
+.katex .sizing.reset-size1.size4,
+.katex .fontsize-ensurer.reset-size1.size4 {
+  font-size: 1.6em;
+}
+.katex .sizing.reset-size1.size5,
+.katex .fontsize-ensurer.reset-size1.size5 {
+  font-size: 1.8em;
+}
+.katex .sizing.reset-size1.size6,
+.katex .fontsize-ensurer.reset-size1.size6 {
+  font-size: 2em;
+}
+.katex .sizing.reset-size1.size7,
+.katex .fontsize-ensurer.reset-size1.size7 {
+  font-size: 2.4em;
+}
+.katex .sizing.reset-size1.size8,
+.katex .fontsize-ensurer.reset-size1.size8 {
+  font-size: 2.88em;
+}
+.katex .sizing.reset-size1.size9,
+.katex .fontsize-ensurer.reset-size1.size9 {
+  font-size: 3.456em;
+}
+.katex .sizing.reset-size1.size10,
+.katex .fontsize-ensurer.reset-size1.size10 {
+  font-size: 4.148em;
+}
+.katex .sizing.reset-size1.size11,
+.katex .fontsize-ensurer.reset-size1.size11 {
+  font-size: 4.976em;
+}
+.katex .sizing.reset-size2.size1,
+.katex .fontsize-ensurer.reset-size2.size1 {
+  font-size: 0.83333333em;
+}
+.katex .sizing.reset-size2.size2,
+.katex .fontsize-ensurer.reset-size2.size2 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size2.size3,
+.katex .fontsize-ensurer.reset-size2.size3 {
+  font-size: 1.16666667em;
+}
+.katex .sizing.reset-size2.size4,
+.katex .fontsize-ensurer.reset-size2.size4 {
+  font-size: 1.33333333em;
+}
+.katex .sizing.reset-size2.size5,
+.katex .fontsize-ensurer.reset-size2.size5 {
+  font-size: 1.5em;
+}
+.katex .sizing.reset-size2.size6,
+.katex .fontsize-ensurer.reset-size2.size6 {
+  font-size: 1.66666667em;
+}
+.katex .sizing.reset-size2.size7,
+.katex .fontsize-ensurer.reset-size2.size7 {
+  font-size: 2em;
+}
+.katex .sizing.reset-size2.size8,
+.katex .fontsize-ensurer.reset-size2.size8 {
+  font-size: 2.4em;
+}
+.katex .sizing.reset-size2.size9,
+.katex .fontsize-ensurer.reset-size2.size9 {
+  font-size: 2.88em;
+}
+.katex .sizing.reset-size2.size10,
+.katex .fontsize-ensurer.reset-size2.size10 {
+  font-size: 3.45666667em;
+}
+.katex .sizing.reset-size2.size11,
+.katex .fontsize-ensurer.reset-size2.size11 {
+  font-size: 4.14666667em;
+}
+.katex .sizing.reset-size3.size1,
+.katex .fontsize-ensurer.reset-size3.size1 {
+  font-size: 0.71428571em;
+}
+.katex .sizing.reset-size3.size2,
+.katex .fontsize-ensurer.reset-size3.size2 {
+  font-size: 0.85714286em;
+}
+.katex .sizing.reset-size3.size3,
+.katex .fontsize-ensurer.reset-size3.size3 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size3.size4,
+.katex .fontsize-ensurer.reset-size3.size4 {
+  font-size: 1.14285714em;
+}
+.katex .sizing.reset-size3.size5,
+.katex .fontsize-ensurer.reset-size3.size5 {
+  font-size: 1.28571429em;
+}
+.katex .sizing.reset-size3.size6,
+.katex .fontsize-ensurer.reset-size3.size6 {
+  font-size: 1.42857143em;
+}
+.katex .sizing.reset-size3.size7,
+.katex .fontsize-ensurer.reset-size3.size7 {
+  font-size: 1.71428571em;
+}
+.katex .sizing.reset-size3.size8,
+.katex .fontsize-ensurer.reset-size3.size8 {
+  font-size: 2.05714286em;
+}
+.katex .sizing.reset-size3.size9,
+.katex .fontsize-ensurer.reset-size3.size9 {
+  font-size: 2.46857143em;
+}
+.katex .sizing.reset-size3.size10,
+.katex .fontsize-ensurer.reset-size3.size10 {
+  font-size: 2.96285714em;
+}
+.katex .sizing.reset-size3.size11,
+.katex .fontsize-ensurer.reset-size3.size11 {
+  font-size: 3.55428571em;
+}
+.katex .sizing.reset-size4.size1,
+.katex .fontsize-ensurer.reset-size4.size1 {
+  font-size: 0.625em;
+}
+.katex .sizing.reset-size4.size2,
+.katex .fontsize-ensurer.reset-size4.size2 {
+  font-size: 0.75em;
+}
+.katex .sizing.reset-size4.size3,
+.katex .fontsize-ensurer.reset-size4.size3 {
+  font-size: 0.875em;
+}
+.katex .sizing.reset-size4.size4,
+.katex .fontsize-ensurer.reset-size4.size4 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size4.size5,
+.katex .fontsize-ensurer.reset-size4.size5 {
+  font-size: 1.125em;
+}
+.katex .sizing.reset-size4.size6,
+.katex .fontsize-ensurer.reset-size4.size6 {
+  font-size: 1.25em;
+}
+.katex .sizing.reset-size4.size7,
+.katex .fontsize-ensurer.reset-size4.size7 {
+  font-size: 1.5em;
+}
+.katex .sizing.reset-size4.size8,
+.katex .fontsize-ensurer.reset-size4.size8 {
+  font-size: 1.8em;
+}
+.katex .sizing.reset-size4.size9,
+.katex .fontsize-ensurer.reset-size4.size9 {
+  font-size: 2.16em;
+}
+.katex .sizing.reset-size4.size10,
+.katex .fontsize-ensurer.reset-size4.size10 {
+  font-size: 2.5925em;
+}
+.katex .sizing.reset-size4.size11,
+.katex .fontsize-ensurer.reset-size4.size11 {
+  font-size: 3.11em;
+}
+.katex .sizing.reset-size5.size1,
+.katex .fontsize-ensurer.reset-size5.size1 {
+  font-size: 0.55555556em;
+}
+.katex .sizing.reset-size5.size2,
+.katex .fontsize-ensurer.reset-size5.size2 {
+  font-size: 0.66666667em;
+}
+.katex .sizing.reset-size5.size3,
+.katex .fontsize-ensurer.reset-size5.size3 {
+  font-size: 0.77777778em;
+}
+.katex .sizing.reset-size5.size4,
+.katex .fontsize-ensurer.reset-size5.size4 {
+  font-size: 0.88888889em;
+}
+.katex .sizing.reset-size5.size5,
+.katex .fontsize-ensurer.reset-size5.size5 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size5.size6,
+.katex .fontsize-ensurer.reset-size5.size6 {
+  font-size: 1.11111111em;
+}
+.katex .sizing.reset-size5.size7,
+.katex .fontsize-ensurer.reset-size5.size7 {
+  font-size: 1.33333333em;
+}
+.katex .sizing.reset-size5.size8,
+.katex .fontsize-ensurer.reset-size5.size8 {
+  font-size: 1.6em;
+}
+.katex .sizing.reset-size5.size9,
+.katex .fontsize-ensurer.reset-size5.size9 {
+  font-size: 1.92em;
+}
+.katex .sizing.reset-size5.size10,
+.katex .fontsize-ensurer.reset-size5.size10 {
+  font-size: 2.30444444em;
+}
+.katex .sizing.reset-size5.size11,
+.katex .fontsize-ensurer.reset-size5.size11 {
+  font-size: 2.76444444em;
+}
+.katex .sizing.reset-size6.size1,
+.katex .fontsize-ensurer.reset-size6.size1 {
+  font-size: 0.5em;
+}
+.katex .sizing.reset-size6.size2,
+.katex .fontsize-ensurer.reset-size6.size2 {
+  font-size: 0.6em;
+}
+.katex .sizing.reset-size6.size3,
+.katex .fontsize-ensurer.reset-size6.size3 {
+  font-size: 0.7em;
+}
+.katex .sizing.reset-size6.size4,
+.katex .fontsize-ensurer.reset-size6.size4 {
+  font-size: 0.8em;
+}
+.katex .sizing.reset-size6.size5,
+.katex .fontsize-ensurer.reset-size6.size5 {
+  font-size: 0.9em;
+}
+.katex .sizing.reset-size6.size6,
+.katex .fontsize-ensurer.reset-size6.size6 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size6.size7,
+.katex .fontsize-ensurer.reset-size6.size7 {
+  font-size: 1.2em;
+}
+.katex .sizing.reset-size6.size8,
+.katex .fontsize-ensurer.reset-size6.size8 {
+  font-size: 1.44em;
+}
+.katex .sizing.reset-size6.size9,
+.katex .fontsize-ensurer.reset-size6.size9 {
+  font-size: 1.728em;
+}
+.katex .sizing.reset-size6.size10,
+.katex .fontsize-ensurer.reset-size6.size10 {
+  font-size: 2.074em;
+}
+.katex .sizing.reset-size6.size11,
+.katex .fontsize-ensurer.reset-size6.size11 {
+  font-size: 2.488em;
+}
+.katex .sizing.reset-size7.size1,
+.katex .fontsize-ensurer.reset-size7.size1 {
+  font-size: 0.41666667em;
+}
+.katex .sizing.reset-size7.size2,
+.katex .fontsize-ensurer.reset-size7.size2 {
+  font-size: 0.5em;
+}
+.katex .sizing.reset-size7.size3,
+.katex .fontsize-ensurer.reset-size7.size3 {
+  font-size: 0.58333333em;
+}
+.katex .sizing.reset-size7.size4,
+.katex .fontsize-ensurer.reset-size7.size4 {
+  font-size: 0.66666667em;
+}
+.katex .sizing.reset-size7.size5,
+.katex .fontsize-ensurer.reset-size7.size5 {
+  font-size: 0.75em;
+}
+.katex .sizing.reset-size7.size6,
+.katex .fontsize-ensurer.reset-size7.size6 {
+  font-size: 0.83333333em;
+}
+.katex .sizing.reset-size7.size7,
+.katex .fontsize-ensurer.reset-size7.size7 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size7.size8,
+.katex .fontsize-ensurer.reset-size7.size8 {
+  font-size: 1.2em;
+}
+.katex .sizing.reset-size7.size9,
+.katex .fontsize-ensurer.reset-size7.size9 {
+  font-size: 1.44em;
+}
+.katex .sizing.reset-size7.size10,
+.katex .fontsize-ensurer.reset-size7.size10 {
+  font-size: 1.72833333em;
+}
+.katex .sizing.reset-size7.size11,
+.katex .fontsize-ensurer.reset-size7.size11 {
+  font-size: 2.07333333em;
+}
+.katex .sizing.reset-size8.size1,
+.katex .fontsize-ensurer.reset-size8.size1 {
+  font-size: 0.34722222em;
+}
+.katex .sizing.reset-size8.size2,
+.katex .fontsize-ensurer.reset-size8.size2 {
+  font-size: 0.41666667em;
+}
+.katex .sizing.reset-size8.size3,
+.katex .fontsize-ensurer.reset-size8.size3 {
+  font-size: 0.48611111em;
+}
+.katex .sizing.reset-size8.size4,
+.katex .fontsize-ensurer.reset-size8.size4 {
+  font-size: 0.55555556em;
+}
+.katex .sizing.reset-size8.size5,
+.katex .fontsize-ensurer.reset-size8.size5 {
+  font-size: 0.625em;
+}
+.katex .sizing.reset-size8.size6,
+.katex .fontsize-ensurer.reset-size8.size6 {
+  font-size: 0.69444444em;
+}
+.katex .sizing.reset-size8.size7,
+.katex .fontsize-ensurer.reset-size8.size7 {
+  font-size: 0.83333333em;
+}
+.katex .sizing.reset-size8.size8,
+.katex .fontsize-ensurer.reset-size8.size8 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size8.size9,
+.katex .fontsize-ensurer.reset-size8.size9 {
+  font-size: 1.2em;
+}
+.katex .sizing.reset-size8.size10,
+.katex .fontsize-ensurer.reset-size8.size10 {
+  font-size: 1.44027778em;
+}
+.katex .sizing.reset-size8.size11,
+.katex .fontsize-ensurer.reset-size8.size11 {
+  font-size: 1.72777778em;
+}
+.katex .sizing.reset-size9.size1,
+.katex .fontsize-ensurer.reset-size9.size1 {
+  font-size: 0.28935185em;
+}
+.katex .sizing.reset-size9.size2,
+.katex .fontsize-ensurer.reset-size9.size2 {
+  font-size: 0.34722222em;
+}
+.katex .sizing.reset-size9.size3,
+.katex .fontsize-ensurer.reset-size9.size3 {
+  font-size: 0.40509259em;
+}
+.katex .sizing.reset-size9.size4,
+.katex .fontsize-ensurer.reset-size9.size4 {
+  font-size: 0.46296296em;
+}
+.katex .sizing.reset-size9.size5,
+.katex .fontsize-ensurer.reset-size9.size5 {
+  font-size: 0.52083333em;
+}
+.katex .sizing.reset-size9.size6,
+.katex .fontsize-ensurer.reset-size9.size6 {
+  font-size: 0.5787037em;
+}
+.katex .sizing.reset-size9.size7,
+.katex .fontsize-ensurer.reset-size9.size7 {
+  font-size: 0.69444444em;
+}
+.katex .sizing.reset-size9.size8,
+.katex .fontsize-ensurer.reset-size9.size8 {
+  font-size: 0.83333333em;
+}
+.katex .sizing.reset-size9.size9,
+.katex .fontsize-ensurer.reset-size9.size9 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size9.size10,
+.katex .fontsize-ensurer.reset-size9.size10 {
+  font-size: 1.20023148em;
+}
+.katex .sizing.reset-size9.size11,
+.katex .fontsize-ensurer.reset-size9.size11 {
+  font-size: 1.43981481em;
+}
+.katex .sizing.reset-size10.size1,
+.katex .fontsize-ensurer.reset-size10.size1 {
+  font-size: 0.24108004em;
+}
+.katex .sizing.reset-size10.size2,
+.katex .fontsize-ensurer.reset-size10.size2 {
+  font-size: 0.28929605em;
+}
+.katex .sizing.reset-size10.size3,
+.katex .fontsize-ensurer.reset-size10.size3 {
+  font-size: 0.33751205em;
+}
+.katex .sizing.reset-size10.size4,
+.katex .fontsize-ensurer.reset-size10.size4 {
+  font-size: 0.38572806em;
+}
+.katex .sizing.reset-size10.size5,
+.katex .fontsize-ensurer.reset-size10.size5 {
+  font-size: 0.43394407em;
+}
+.katex .sizing.reset-size10.size6,
+.katex .fontsize-ensurer.reset-size10.size6 {
+  font-size: 0.48216008em;
+}
+.katex .sizing.reset-size10.size7,
+.katex .fontsize-ensurer.reset-size10.size7 {
+  font-size: 0.57859209em;
+}
+.katex .sizing.reset-size10.size8,
+.katex .fontsize-ensurer.reset-size10.size8 {
+  font-size: 0.69431051em;
+}
+.katex .sizing.reset-size10.size9,
+.katex .fontsize-ensurer.reset-size10.size9 {
+  font-size: 0.83317261em;
+}
+.katex .sizing.reset-size10.size10,
+.katex .fontsize-ensurer.reset-size10.size10 {
+  font-size: 1em;
+}
+.katex .sizing.reset-size10.size11,
+.katex .fontsize-ensurer.reset-size10.size11 {
+  font-size: 1.19961427em;
+}
+.katex .sizing.reset-size11.size1,
+.katex .fontsize-ensurer.reset-size11.size1 {
+  font-size: 0.20096463em;
+}
+.katex .sizing.reset-size11.size2,
+.katex .fontsize-ensurer.reset-size11.size2 {
+  font-size: 0.24115756em;
+}
+.katex .sizing.reset-size11.size3,
+.katex .fontsize-ensurer.reset-size11.size3 {
+  font-size: 0.28135048em;
+}
+.katex .sizing.reset-size11.size4,
+.katex .fontsize-ensurer.reset-size11.size4 {
+  font-size: 0.32154341em;
+}
+.katex .sizing.reset-size11.size5,
+.katex .fontsize-ensurer.reset-size11.size5 {
+  font-size: 0.36173633em;
+}
+.katex .sizing.reset-size11.size6,
+.katex .fontsize-ensurer.reset-size11.size6 {
+  font-size: 0.40192926em;
+}
+.katex .sizing.reset-size11.size7,
+.katex .fontsize-ensurer.reset-size11.size7 {
+  font-size: 0.48231511em;
+}
+.katex .sizing.reset-size11.size8,
+.katex .fontsize-ensurer.reset-size11.size8 {
+  font-size: 0.57877814em;
+}
+.katex .sizing.reset-size11.size9,
+.katex .fontsize-ensurer.reset-size11.size9 {
+  font-size: 0.69453376em;
+}
+.katex .sizing.reset-size11.size10,
+.katex .fontsize-ensurer.reset-size11.size10 {
+  font-size: 0.83360129em;
+}
+.katex .sizing.reset-size11.size11,
+.katex .fontsize-ensurer.reset-size11.size11 {
+  font-size: 1em;
+}
+.katex .delimsizing.size1 {
+  font-family: KaTeX_Size1;
+}
+.katex .delimsizing.size2 {
+  font-family: KaTeX_Size2;
+}
+.katex .delimsizing.size3 {
+  font-family: KaTeX_Size3;
+}
+.katex .delimsizing.size4 {
+  font-family: KaTeX_Size4;
+}
+.katex .delimsizing.mult .delim-size1 > span {
+  font-family: KaTeX_Size1;
+}
+.katex .delimsizing.mult .delim-size4 > span {
+  font-family: KaTeX_Size4;
+}
+.katex .nulldelimiter {
+  display: inline-block;
+  width: 0.12em;
+}
+.katex .delimcenter {
+  position: relative;
+}
+.katex .op-symbol {
+  position: relative;
+}
+.katex .op-symbol.small-op {
+  font-family: KaTeX_Size1;
+}
+.katex .op-symbol.large-op {
+  font-family: KaTeX_Size2;
+}
+.katex .op-limits > .vlist-t {
+  text-align: center;
+}
+.katex .accent > .vlist-t {
+  text-align: center;
+}
+.katex .accent .accent-body {
+  position: relative;
+}
+.katex .accent .accent-body:not(.accent-full) {
+  width: 0;
+}
+.katex .overlay {
+  display: block;
+}
+.katex .mtable .vertical-separator {
+  display: inline-block;
+  min-width: 1px;
+}
+.katex .mtable .arraycolsep {
+  display: inline-block;
+}
+.katex .mtable .col-align-c > .vlist-t {
+  text-align: center;
+}
+.katex .mtable .col-align-l > .vlist-t {
+  text-align: left;
+}
+.katex .mtable .col-align-r > .vlist-t {
+  text-align: right;
+}
+.katex .svg-align {
+  text-align: left;
+}
+.katex svg {
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: inherit;
+  fill: currentColor;
+  stroke: currentColor;
+  fill-rule: nonzero;
+  fill-opacity: 1;
+  stroke-width: 1;
+  stroke-linecap: butt;
+  stroke-linejoin: miter;
+  stroke-miterlimit: 4;
+  stroke-dasharray: none;
+  stroke-dashoffset: 0;
+  stroke-opacity: 1;
+}
+.katex svg path {
+  stroke: none;
+}
+.katex img {
+  border-style: none;
+  min-width: 0;
+  min-height: 0;
+  max-width: none;
+  max-height: none;
+}
+.katex .stretchy {
+  width: 100%;
+  display: block;
+  position: relative;
+  overflow: hidden;
+}
+.katex .stretchy::before,
+.katex .stretchy::after {
+  content: "";
+}
+.katex .hide-tail {
+  width: 100%;
+  position: relative;
+  overflow: hidden;
+}
+.katex .halfarrow-left {
+  position: absolute;
+  left: 0;
+  width: 50.2%;
+  overflow: hidden;
+}
+.katex .halfarrow-right {
+  position: absolute;
+  right: 0;
+  width: 50.2%;
+  overflow: hidden;
+}
+.katex .brace-left {
+  position: absolute;
+  left: 0;
+  width: 25.1%;
+  overflow: hidden;
+}
+.katex .brace-center {
+  position: absolute;
+  left: 25%;
+  width: 50%;
+  overflow: hidden;
+}
+.katex .brace-right {
+  position: absolute;
+  right: 0;
+  width: 25.1%;
+  overflow: hidden;
+}
+.katex .x-arrow-pad {
+  padding: 0 0.5em;
+}
+.katex .x-arrow,
+.katex .mover,
+.katex .munder {
+  text-align: center;
+}
+.katex .boxpad {
+  padding: 0 0.3em 0 0.3em;
+}
+.katex .fbox,
+.katex .fcolorbox {
+  box-sizing: border-box;
+  border: 0.04em solid;
+}
+.katex .cancel-pad {
+  padding: 0 0.2em 0 0.2em;
+}
+.katex .cancel-lap {
+  margin-left: -0.2em;
+  margin-right: -0.2em;
+}
+.katex .sout {
+  border-bottom-style: solid;
+  border-bottom-width: 0.08em;
+}
+.katex-display {
+  display: block;
+  margin: 1em 0;
+  text-align: center;
+}
+.katex-display > .katex {
+  display: block;
+  text-align: center;
+  white-space: nowrap;
+}
+.katex-display > .katex > .katex-html {
+  display: block;
+  position: relative;
+}
+.katex-display > .katex > .katex-html > .tag {
+  position: absolute;
+  right: 0;
+}
+.katex-display.leqno > .katex > .katex-html > .tag {
+  left: 0;
+  right: auto;
+}
+.katex-display.fleqn > .katex {
+  text-align: left;
+}
+
diff --git a/codegen/vulkan/vulkan-docs-next/katex/katex.js b/codegen/vulkan/vulkan-docs-next/katex/katex.js
new file mode 100644
index 0000000..2aa2c91
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/katex.js
@@ -0,0 +1,17425 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["katex"] = factory();
+	else
+		root["katex"] = factory();
+})((typeof self !== 'undefined' ? self : this), function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// extracted by mini-css-extract-plugin
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+
+// EXTERNAL MODULE: ./src/katex.less
+var katex = __webpack_require__(0);
+
+// CONCATENATED MODULE: ./src/SourceLocation.js
+/**
+ * Lexing or parsing positional information for error reporting.
+ * This object is immutable.
+ */
+var SourceLocation =
+/*#__PURE__*/
+function () {
+  // The + prefix indicates that these fields aren't writeable
+  // Lexer holding the input string.
+  // Start offset, zero-based inclusive.
+  // End offset, zero-based exclusive.
+  function SourceLocation(lexer, start, end) {
+    this.lexer = void 0;
+    this.start = void 0;
+    this.end = void 0;
+    this.lexer = lexer;
+    this.start = start;
+    this.end = end;
+  }
+  /**
+   * Merges two `SourceLocation`s from location providers, given they are
+   * provided in order of appearance.
+   * - Returns the first one's location if only the first is provided.
+   * - Returns a merged range of the first and the last if both are provided
+   *   and their lexers match.
+   * - Otherwise, returns null.
+   */
+
+
+  SourceLocation.range = function range(first, second) {
+    if (!second) {
+      return first && first.loc;
+    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {
+      return null;
+    } else {
+      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);
+    }
+  };
+
+  return SourceLocation;
+}();
+
+
+// CONCATENATED MODULE: ./src/Token.js
+
+/**
+ * Interface required to break circular dependency between Token, Lexer, and
+ * ParseError.
+ */
+
+/**
+ * The resulting token returned from `lex`.
+ *
+ * It consists of the token text plus some position information.
+ * The position information is essentially a range in an input string,
+ * but instead of referencing the bare input string, we refer to the lexer.
+ * That way it is possible to attach extra metadata to the input string,
+ * like for example a file name or similar.
+ *
+ * The position information is optional, so it is OK to construct synthetic
+ * tokens if appropriate. Not providing available position information may
+ * lead to degraded error reporting, though.
+ */
+var Token_Token =
+/*#__PURE__*/
+function () {
+  function Token(text, // the text of this token
+  loc) {
+    this.text = void 0;
+    this.loc = void 0;
+    this.text = text;
+    this.loc = loc;
+  }
+  /**
+   * Given a pair of tokens (this and endToken), compute a `Token` encompassing
+   * the whole input range enclosed by these two.
+   */
+
+
+  var _proto = Token.prototype;
+
+  _proto.range = function range(endToken, // last token of the range, inclusive
+  text) // the text of the newly constructed token
+  {
+    return new Token(text, SourceLocation.range(this, endToken));
+  };
+
+  return Token;
+}();
+// CONCATENATED MODULE: ./src/ParseError.js
+
+
+/**
+ * This is the ParseError class, which is the main error thrown by KaTeX
+ * functions when something has gone wrong. This is used to distinguish internal
+ * errors from errors in the expression that the user provided.
+ *
+ * If possible, a caller should provide a Token or ParseNode with information
+ * about where in the source string the problem occurred.
+ */
+var ParseError = // Error position based on passed-in Token or ParseNode.
+function ParseError(message, // The error message
+token) // An object providing position information
+{
+  this.position = void 0;
+  var error = "KaTeX parse error: " + message;
+  var start;
+  var loc = token && token.loc;
+
+  if (loc && loc.start <= loc.end) {
+    // If we have the input and a position, make the error a bit fancier
+    // Get the input
+    var input = loc.lexer.input; // Prepend some information
+
+    start = loc.start;
+    var end = loc.end;
+
+    if (start === input.length) {
+      error += " at end of input: ";
+    } else {
+      error += " at position " + (start + 1) + ": ";
+    } // Underline token in question using combining underscores
+
+
+    var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error
+
+    var left;
+
+    if (start > 15) {
+      left = "…" + input.slice(start - 15, start);
+    } else {
+      left = input.slice(0, start);
+    }
+
+    var right;
+
+    if (end + 15 < input.length) {
+      right = input.slice(end, end + 15) + "…";
+    } else {
+      right = input.slice(end);
+    }
+
+    error += left + underlined + right;
+  } // Some hackery to make ParseError a prototype of Error
+  // See http://stackoverflow.com/a/8460753
+
+
+  var self = new Error(error);
+  self.name = "ParseError"; // $FlowFixMe
+
+  self.__proto__ = ParseError.prototype; // $FlowFixMe
+
+  self.position = start;
+  return self;
+}; // $FlowFixMe More hackery
+
+
+ParseError.prototype.__proto__ = Error.prototype;
+/* harmony default export */ var src_ParseError = (ParseError);
+// CONCATENATED MODULE: ./src/utils.js
+/**
+ * This file contains a list of utility functions which are useful in other
+ * files.
+ */
+
+/**
+ * Return whether an element is contained in a list
+ */
+var contains = function contains(list, elem) {
+  return list.indexOf(elem) !== -1;
+};
+/**
+ * Provide a default value if a setting is undefined
+ * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.
+ */
+
+
+var deflt = function deflt(setting, defaultIfUndefined) {
+  return setting === undefined ? defaultIfUndefined : setting;
+}; // hyphenate and escape adapted from Facebook's React under Apache 2 license
+
+
+var uppercase = /([A-Z])/g;
+
+var hyphenate = function hyphenate(str) {
+  return str.replace(uppercase, "-$1").toLowerCase();
+};
+
+var ESCAPE_LOOKUP = {
+  "&": "&amp;",
+  ">": "&gt;",
+  "<": "&lt;",
+  "\"": "&quot;",
+  "'": "&#x27;"
+};
+var ESCAPE_REGEX = /[&><"']/g;
+/**
+ * Escapes text to prevent scripting attacks.
+ */
+
+function utils_escape(text) {
+  return String(text).replace(ESCAPE_REGEX, function (match) {
+    return ESCAPE_LOOKUP[match];
+  });
+}
+/**
+ * Sometimes we want to pull out the innermost element of a group. In most
+ * cases, this will just be the group itself, but when ordgroups and colors have
+ * a single element, we want to pull that out.
+ */
+
+
+var getBaseElem = function getBaseElem(group) {
+  if (group.type === "ordgroup") {
+    if (group.body.length === 1) {
+      return getBaseElem(group.body[0]);
+    } else {
+      return group;
+    }
+  } else if (group.type === "color") {
+    if (group.body.length === 1) {
+      return getBaseElem(group.body[0]);
+    } else {
+      return group;
+    }
+  } else if (group.type === "font") {
+    return getBaseElem(group.body);
+  } else {
+    return group;
+  }
+};
+/**
+ * TeXbook algorithms often reference "character boxes", which are simply groups
+ * with a single character in them. To decide if something is a character box,
+ * we find its innermost group, and see if it is a single character.
+ */
+
+
+var utils_isCharacterBox = function isCharacterBox(group) {
+  var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters
+
+  return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
+};
+
+var assert = function assert(value) {
+  if (!value) {
+    throw new Error('Expected non-null, but got ' + String(value));
+  }
+
+  return value;
+};
+/**
+ * Return the protocol of a URL, or "_relative" if the URL does not specify a
+ * protocol (and thus is relative).
+ */
+
+var protocolFromUrl = function protocolFromUrl(url) {
+  var protocol = /^\s*([^\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(url);
+  return protocol != null ? protocol[1] : "_relative";
+};
+/* harmony default export */ var utils = ({
+  contains: contains,
+  deflt: deflt,
+  escape: utils_escape,
+  hyphenate: hyphenate,
+  getBaseElem: getBaseElem,
+  isCharacterBox: utils_isCharacterBox,
+  protocolFromUrl: protocolFromUrl
+});
+// CONCATENATED MODULE: ./src/Settings.js
+/* eslint no-console:0 */
+
+/**
+ * This is a module for storing settings passed into KaTeX. It correctly handles
+ * default settings.
+ */
+
+
+
+
+/**
+ * The main Settings object
+ *
+ * The current options stored are:
+ *  - displayMode: Whether the expression should be typeset as inline math
+ *                 (false, the default), meaning that the math starts in
+ *                 \textstyle and is placed in an inline-block); or as display
+ *                 math (true), meaning that the math starts in \displaystyle
+ *                 and is placed in a block with vertical margin.
+ */
+var Settings_Settings =
+/*#__PURE__*/
+function () {
+  function Settings(options) {
+    this.displayMode = void 0;
+    this.output = void 0;
+    this.leqno = void 0;
+    this.fleqn = void 0;
+    this.throwOnError = void 0;
+    this.errorColor = void 0;
+    this.macros = void 0;
+    this.minRuleThickness = void 0;
+    this.colorIsTextColor = void 0;
+    this.strict = void 0;
+    this.trust = void 0;
+    this.maxSize = void 0;
+    this.maxExpand = void 0;
+    // allow null options
+    options = options || {};
+    this.displayMode = utils.deflt(options.displayMode, false);
+    this.output = utils.deflt(options.output, "htmlAndMathml");
+    this.leqno = utils.deflt(options.leqno, false);
+    this.fleqn = utils.deflt(options.fleqn, false);
+    this.throwOnError = utils.deflt(options.throwOnError, true);
+    this.errorColor = utils.deflt(options.errorColor, "#cc0000");
+    this.macros = options.macros || {};
+    this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
+    this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
+    this.strict = utils.deflt(options.strict, "warn");
+    this.trust = utils.deflt(options.trust, false);
+    this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
+    this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
+  }
+  /**
+   * Report nonstrict (non-LaTeX-compatible) input.
+   * Can safely not be called if `this.strict` is false in JavaScript.
+   */
+
+
+  var _proto = Settings.prototype;
+
+  _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) {
+    var strict = this.strict;
+
+    if (typeof strict === "function") {
+      // Allow return value of strict function to be boolean or string
+      // (or null/undefined, meaning no further processing).
+      strict = strict(errorCode, errorMsg, token);
+    }
+
+    if (!strict || strict === "ignore") {
+      return;
+    } else if (strict === true || strict === "error") {
+      throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token);
+    } else if (strict === "warn") {
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
+    } else {
+      // won't happen in type-safe code
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
+    }
+  }
+  /**
+   * Check whether to apply strict (LaTeX-adhering) behavior for unusual
+   * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
+   * instead, "error" translates to a return value of `true`, while "ignore"
+   * translates to a return value of `false`.  May still print a warning:
+   * "warn" prints a warning and returns `false`.
+   * This is for the second category of `errorCode`s listed in the README.
+   */
+  ;
+
+  _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) {
+    var strict = this.strict;
+
+    if (typeof strict === "function") {
+      // Allow return value of strict function to be boolean or string
+      // (or null/undefined, meaning no further processing).
+      // But catch any exceptions thrown by function, treating them
+      // like "error".
+      try {
+        strict = strict(errorCode, errorMsg, token);
+      } catch (error) {
+        strict = "error";
+      }
+    }
+
+    if (!strict || strict === "ignore") {
+      return false;
+    } else if (strict === true || strict === "error") {
+      return true;
+    } else if (strict === "warn") {
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
+      return false;
+    } else {
+      // won't happen in type-safe code
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
+      return false;
+    }
+  }
+  /**
+   * Check whether to test potentially dangerous input, and return
+   * `true` (trusted) or `false` (untrusted).  The sole argument `context`
+   * should be an object with `command` field specifying the relevant LaTeX
+   * command (as a string starting with `\`), and any other arguments, etc.
+   * If `context` has a `url` field, a `protocol` field will automatically
+   * get added by this function (changing the specified object).
+   */
+  ;
+
+  _proto.isTrusted = function isTrusted(context) {
+    if (context.url && !context.protocol) {
+      context.protocol = utils.protocolFromUrl(context.url);
+    }
+
+    var trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
+    return Boolean(trust);
+  };
+
+  return Settings;
+}();
+
+
+// CONCATENATED MODULE: ./src/Style.js
+/**
+ * This file contains information and classes for the various kinds of styles
+ * used in TeX. It provides a generic `Style` class, which holds information
+ * about a specific style. It then provides instances of all the different kinds
+ * of styles possible, and provides functions to move between them and get
+ * information about them.
+ */
+
+/**
+ * The main style class. Contains a unique id for the style, a size (which is
+ * the same for cramped and uncramped version of a style), and a cramped flag.
+ */
+var Style =
+/*#__PURE__*/
+function () {
+  function Style(id, size, cramped) {
+    this.id = void 0;
+    this.size = void 0;
+    this.cramped = void 0;
+    this.id = id;
+    this.size = size;
+    this.cramped = cramped;
+  }
+  /**
+   * Get the style of a superscript given a base in the current style.
+   */
+
+
+  var _proto = Style.prototype;
+
+  _proto.sup = function sup() {
+    return Style_styles[_sup[this.id]];
+  }
+  /**
+   * Get the style of a subscript given a base in the current style.
+   */
+  ;
+
+  _proto.sub = function sub() {
+    return Style_styles[_sub[this.id]];
+  }
+  /**
+   * Get the style of a fraction numerator given the fraction in the current
+   * style.
+   */
+  ;
+
+  _proto.fracNum = function fracNum() {
+    return Style_styles[_fracNum[this.id]];
+  }
+  /**
+   * Get the style of a fraction denominator given the fraction in the current
+   * style.
+   */
+  ;
+
+  _proto.fracDen = function fracDen() {
+    return Style_styles[_fracDen[this.id]];
+  }
+  /**
+   * Get the cramped version of a style (in particular, cramping a cramped style
+   * doesn't change the style).
+   */
+  ;
+
+  _proto.cramp = function cramp() {
+    return Style_styles[_cramp[this.id]];
+  }
+  /**
+   * Get a text or display version of this style.
+   */
+  ;
+
+  _proto.text = function text() {
+    return Style_styles[_text[this.id]];
+  }
+  /**
+   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
+   */
+  ;
+
+  _proto.isTight = function isTight() {
+    return this.size >= 2;
+  };
+
+  return Style;
+}(); // Export an interface for type checking, but don't expose the implementation.
+// This way, no more styles can be generated.
+
+
+// IDs of the different styles
+var D = 0;
+var Dc = 1;
+var T = 2;
+var Tc = 3;
+var S = 4;
+var Sc = 5;
+var SS = 6;
+var SSc = 7; // Instances of the different styles
+
+var Style_styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another
+
+var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
+var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
+var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
+var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
+var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
+var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.
+
+/* harmony default export */ var src_Style = ({
+  DISPLAY: Style_styles[D],
+  TEXT: Style_styles[T],
+  SCRIPT: Style_styles[S],
+  SCRIPTSCRIPT: Style_styles[SS]
+});
+// CONCATENATED MODULE: ./src/unicodeScripts.js
+/*
+ * This file defines the Unicode scripts and script families that we
+ * support. To add new scripts or families, just add a new entry to the
+ * scriptData array below. Adding scripts to the scriptData array allows
+ * characters from that script to appear in \text{} environments.
+ */
+
+/**
+ * Each script or script family has a name and an array of blocks.
+ * Each block is an array of two numbers which specify the start and
+ * end points (inclusive) of a block of Unicode codepoints.
+ */
+
+/**
+ * Unicode block data for the families of scripts we support in \text{}.
+ * Scripts only need to appear here if they do not have font metrics.
+ */
+var scriptData = [{
+  // Latin characters beyond the Latin-1 characters we have metrics for.
+  // Needed for Czech, Hungarian and Turkish text, for example.
+  name: 'latin',
+  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
+  [0x0300, 0x036f]]
+}, {
+  // The Cyrillic script used by Russian and related languages.
+  // A Cyrillic subset used to be supported as explicitly defined
+  // symbols in symbols.js
+  name: 'cyrillic',
+  blocks: [[0x0400, 0x04ff]]
+}, {
+  // The Brahmic scripts of South and Southeast Asia
+  // Devanagari (0900–097F)
+  // Bengali (0980–09FF)
+  // Gurmukhi (0A00–0A7F)
+  // Gujarati (0A80–0AFF)
+  // Oriya (0B00–0B7F)
+  // Tamil (0B80–0BFF)
+  // Telugu (0C00–0C7F)
+  // Kannada (0C80–0CFF)
+  // Malayalam (0D00–0D7F)
+  // Sinhala (0D80–0DFF)
+  // Thai (0E00–0E7F)
+  // Lao (0E80–0EFF)
+  // Tibetan (0F00–0FFF)
+  // Myanmar (1000–109F)
+  name: 'brahmic',
+  blocks: [[0x0900, 0x109F]]
+}, {
+  name: 'georgian',
+  blocks: [[0x10A0, 0x10ff]]
+}, {
+  // Chinese and Japanese.
+  // The "k" in cjk is for Korean, but we've separated Korean out
+  name: "cjk",
+  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana
+  [0x4E00, 0x9FAF], // CJK ideograms
+  [0xFF00, 0xFF60]]
+}, {
+  // Korean
+  name: 'hangul',
+  blocks: [[0xAC00, 0xD7AF]]
+}];
+/**
+ * Given a codepoint, return the name of the script or script family
+ * it is from, or null if it is not part of a known block
+ */
+
+function scriptFromCodepoint(codepoint) {
+  for (var i = 0; i < scriptData.length; i++) {
+    var script = scriptData[i];
+
+    for (var _i = 0; _i < script.blocks.length; _i++) {
+      var block = script.blocks[_i];
+
+      if (codepoint >= block[0] && codepoint <= block[1]) {
+        return script.name;
+      }
+    }
+  }
+
+  return null;
+}
+/**
+ * A flattened version of all the supported blocks in a single array.
+ * This is an optimization to make supportedCodepoint() fast.
+ */
+
+var allBlocks = [];
+scriptData.forEach(function (s) {
+  return s.blocks.forEach(function (b) {
+    return allBlocks.push.apply(allBlocks, b);
+  });
+});
+/**
+ * Given a codepoint, return true if it falls within one of the
+ * scripts or script families defined above and false otherwise.
+ *
+ * Micro benchmarks shows that this is faster than
+ * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
+ * in Firefox, Chrome and Node.
+ */
+
+function supportedCodepoint(codepoint) {
+  for (var i = 0; i < allBlocks.length; i += 2) {
+    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
+      return true;
+    }
+  }
+
+  return false;
+}
+// CONCATENATED MODULE: ./src/svgGeometry.js
+/**
+ * This file provides support to domTree.js and delimiter.js.
+ * It's a storehouse of path geometry for SVG images.
+ */
+// In all paths below, the viewBox-to-em scale is 1000:1.
+var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
+// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
+// Think of variable extraViniculum as two detours in the SVG path.
+// The detour begins at the lower left of the area labeled extraViniculum below.
+// The detour proceeds one extraViniculum distance up and slightly to the right,
+// displacing the radiused corner between surd and viniculum. The radius is
+// traversed as usual, then the detour resumes. It goes right, to the end of
+// the very long viniculumn, then down one extraViniculum distance,
+// after which it resumes regular path geometry for the radical.
+
+/*                                                  viniculum
+                                                   /
+         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
+        / █████████████████████←0.04em (40 unit) std viniculum thickness
+       / /
+      / /
+     / /\
+    / / surd
+*/
+
+var sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
+  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main
+  return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
+  // size1 is from glyph U221A in the font KaTeX_Size1-Regular
+  return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
+  // size2 is from glyph U221A in the font KaTeX_Size2-Regular
+  return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
+  // size3 is from glyph U221A in the font KaTeX_Size3-Regular
+  return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
+  // size4 is from glyph U221A in the font KaTeX_Size4-Regular
+  return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z";
+};
+
+var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
+  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
+  // One path edge has a variable length. It runs vertically from the viniculumn
+  // to a point near (14 units) the bottom of the surd. The viniculum
+  // is normally 40 units thick. So the length of the line in question is:
+  var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
+  return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z";
+};
+
+var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
+  extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
+
+  var path = "";
+
+  switch (size) {
+    case "sqrtMain":
+      path = sqrtMain(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize1":
+      path = sqrtSize1(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize2":
+      path = sqrtSize2(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize3":
+      path = sqrtSize3(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize4":
+      path = sqrtSize4(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtTall":
+      path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
+  }
+
+  return path;
+};
+var svgGeometry_path = {
+  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
+  doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
+  // doublerightarrow is from glyph U+21D2 in font KaTeX Main
+  doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",
+  // leftarrow is from glyph U+2190 in font KaTeX Main
+  leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",
+  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+  leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",
+  leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",
+  // overgroup is from the MnSymbol package (public domain)
+  leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",
+  leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",
+  // Harpoons are from glyph U+21BD in font KaTeX Main
+  leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",
+  leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",
+  leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",
+  leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",
+  // hook is from glyph U+21A9 in font KaTeX Main
+  lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",
+  leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",
+  leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",
+  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
+  leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",
+  longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",
+  midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",
+  midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",
+  oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",
+  oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",
+  oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",
+  oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",
+  rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",
+  rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",
+  rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",
+  rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",
+  rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",
+  rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",
+  rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",
+  rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",
+  rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",
+  righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",
+  rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",
+  rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",
+  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
+  twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",
+  twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",
+  // tilde1 is a modified version of a glyph from the MnSymbol package
+  tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",
+  // ditto tilde2, tilde3, & tilde4
+  tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",
+  tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",
+  tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",
+  // vec is from glyph U+20D7 in font KaTeX Main
+  vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",
+  // widehat1 is a modified version of a glyph from the MnSymbol package
+  widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",
+  // ditto widehat2, widehat3, & widehat4
+  widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+  widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+  widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+  // widecheck paths are all inverted versions of widehat
+  widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",
+  widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+  widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+  widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+  // The next ten paths support reaction arrows from the mhchem package.
+  // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
+  // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main
+  baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",
+  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
+  rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",
+  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
+  // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
+  baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",
+  rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",
+  shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",
+  shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"
+};
+// CONCATENATED MODULE: ./src/tree.js
+
+
+/**
+ * This node represents a document fragment, which contains elements, but when
+ * placed into the DOM doesn't have any representation itself. It only contains
+ * children and doesn't have any DOM node properties.
+ */
+var tree_DocumentFragment =
+/*#__PURE__*/
+function () {
+  // HtmlDomNode
+  // Never used; needed for satisfying interface.
+  function DocumentFragment(children) {
+    this.children = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    this.children = children;
+    this.classes = [];
+    this.height = 0;
+    this.depth = 0;
+    this.maxFontSize = 0;
+    this.style = {};
+  }
+
+  var _proto = DocumentFragment.prototype;
+
+  _proto.hasClass = function hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+  /** Convert the fragment into a node. */
+  ;
+
+  _proto.toNode = function toNode() {
+    var frag = document.createDocumentFragment();
+
+    for (var i = 0; i < this.children.length; i++) {
+      frag.appendChild(this.children[i].toNode());
+    }
+
+    return frag;
+  }
+  /** Convert the fragment into HTML markup. */
+  ;
+
+  _proto.toMarkup = function toMarkup() {
+    var markup = ""; // Simply concatenate the markup for the children together.
+
+    for (var i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    return markup;
+  }
+  /**
+   * Converts the math node into a string, similar to innerText. Applies to
+   * MathDomNode's only.
+   */
+  ;
+
+  _proto.toText = function toText() {
+    // To avoid this, we would subclass documentFragment separately for
+    // MathML, but polyfills for subclassing is expensive per PR 1469.
+    // $FlowFixMe: Only works for ChildType = MathDomNode.
+    var toText = function toText(child) {
+      return child.toText();
+    };
+
+    return this.children.map(toText).join("");
+  };
+
+  return DocumentFragment;
+}();
+// CONCATENATED MODULE: ./src/domTree.js
+/**
+ * These objects store the data about the DOM nodes we create, as well as some
+ * extra data. They can then be transformed into real DOM nodes with the
+ * `toNode` function or HTML markup using `toMarkup`. They are useful for both
+ * storing extra properties on the nodes, as well as providing a way to easily
+ * work with the DOM.
+ *
+ * Similar functions for working with MathML nodes exist in mathMLTree.js.
+ *
+ * TODO: refactor `span` and `anchor` into common superclass when
+ * target environments support class inheritance
+ */
+
+
+
+
+
+/**
+ * Create an HTML className based on a list of classes. In addition to joining
+ * with spaces, we also remove empty classes.
+ */
+var createClass = function createClass(classes) {
+  return classes.filter(function (cls) {
+    return cls;
+  }).join(" ");
+};
+
+var initNode = function initNode(classes, options, style) {
+  this.classes = classes || [];
+  this.attributes = {};
+  this.height = 0;
+  this.depth = 0;
+  this.maxFontSize = 0;
+  this.style = style || {};
+
+  if (options) {
+    if (options.style.isTight()) {
+      this.classes.push("mtight");
+    }
+
+    var color = options.getColor();
+
+    if (color) {
+      this.style.color = color;
+    }
+  }
+};
+/**
+ * Convert into an HTML node
+ */
+
+
+var _toNode = function toNode(tagName) {
+  var node = document.createElement(tagName); // Apply the class
+
+  node.className = createClass(this.classes); // Apply inline styles
+
+  for (var style in this.style) {
+    if (this.style.hasOwnProperty(style)) {
+      // $FlowFixMe Flow doesn't seem to understand span.style's type.
+      node.style[style] = this.style[style];
+    }
+  } // Apply attributes
+
+
+  for (var attr in this.attributes) {
+    if (this.attributes.hasOwnProperty(attr)) {
+      node.setAttribute(attr, this.attributes[attr]);
+    }
+  } // Append the children, also as HTML nodes
+
+
+  for (var i = 0; i < this.children.length; i++) {
+    node.appendChild(this.children[i].toNode());
+  }
+
+  return node;
+};
+/**
+ * Convert into an HTML markup string
+ */
+
+
+var _toMarkup = function toMarkup(tagName) {
+  var markup = "<" + tagName; // Add the class
+
+  if (this.classes.length) {
+    markup += " class=\"" + utils.escape(createClass(this.classes)) + "\"";
+  }
+
+  var styles = ""; // Add the styles, after hyphenation
+
+  for (var style in this.style) {
+    if (this.style.hasOwnProperty(style)) {
+      styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+    }
+  }
+
+  if (styles) {
+    markup += " style=\"" + utils.escape(styles) + "\"";
+  } // Add the attributes
+
+
+  for (var attr in this.attributes) {
+    if (this.attributes.hasOwnProperty(attr)) {
+      markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\"";
+    }
+  }
+
+  markup += ">"; // Add the markup of the children, also as markup
+
+  for (var i = 0; i < this.children.length; i++) {
+    markup += this.children[i].toMarkup();
+  }
+
+  markup += "</" + tagName + ">";
+  return markup;
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+// This type does not include all CSS properties. Additional properties should
+// be added as needed.
+
+
+/**
+ * This node represents a span node, with a className, a list of children, and
+ * an inline style. It also contains information about its height, depth, and
+ * maxFontSize.
+ *
+ * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan
+ * otherwise. This typesafety is important when HTML builders access a span's
+ * children.
+ */
+var domTree_Span =
+/*#__PURE__*/
+function () {
+  function Span(classes, children, options, style) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.width = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    initNode.call(this, classes, options, style);
+    this.children = children || [];
+  }
+  /**
+   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
+   * all browsers support attributes the same, and having too many custom
+   * attributes is probably bad.
+   */
+
+
+  var _proto = Span.prototype;
+
+  _proto.setAttribute = function setAttribute(attribute, value) {
+    this.attributes[attribute] = value;
+  };
+
+  _proto.hasClass = function hasClass(className) {
+    return utils.contains(this.classes, className);
+  };
+
+  _proto.toNode = function toNode() {
+    return _toNode.call(this, "span");
+  };
+
+  _proto.toMarkup = function toMarkup() {
+    return _toMarkup.call(this, "span");
+  };
+
+  return Span;
+}();
+/**
+ * This node represents an anchor (<a>) element with a hyperlink.  See `span`
+ * for further details.
+ */
+
+var domTree_Anchor =
+/*#__PURE__*/
+function () {
+  function Anchor(href, classes, children, options) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    initNode.call(this, classes, options);
+    this.children = children || [];
+    this.setAttribute('href', href);
+  }
+
+  var _proto2 = Anchor.prototype;
+
+  _proto2.setAttribute = function setAttribute(attribute, value) {
+    this.attributes[attribute] = value;
+  };
+
+  _proto2.hasClass = function hasClass(className) {
+    return utils.contains(this.classes, className);
+  };
+
+  _proto2.toNode = function toNode() {
+    return _toNode.call(this, "a");
+  };
+
+  _proto2.toMarkup = function toMarkup() {
+    return _toMarkup.call(this, "a");
+  };
+
+  return Anchor;
+}();
+/**
+ * This node represents an image embed (<img>) element.
+ */
+
+var domTree_Img =
+/*#__PURE__*/
+function () {
+  function Img(src, alt, style) {
+    this.src = void 0;
+    this.alt = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    this.alt = alt;
+    this.src = src;
+    this.classes = ["mord"];
+    this.style = style;
+  }
+
+  var _proto3 = Img.prototype;
+
+  _proto3.hasClass = function hasClass(className) {
+    return utils.contains(this.classes, className);
+  };
+
+  _proto3.toNode = function toNode() {
+    var node = document.createElement("img");
+    node.src = this.src;
+    node.alt = this.alt;
+    node.className = "mord"; // Apply inline styles
+
+    for (var style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        // $FlowFixMe
+        node.style[style] = this.style[style];
+      }
+    }
+
+    return node;
+  };
+
+  _proto3.toMarkup = function toMarkup() {
+    var markup = "<img  src='" + this.src + " 'alt='" + this.alt + "' "; // Add the styles, after hyphenation
+
+    var styles = "";
+
+    for (var style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+      }
+    }
+
+    if (styles) {
+      markup += " style=\"" + utils.escape(styles) + "\"";
+    }
+
+    markup += "'/>";
+    return markup;
+  };
+
+  return Img;
+}();
+var iCombinations = {
+  'î': "\u0131\u0302",
+  'ï': "\u0131\u0308",
+  'í': "\u0131\u0301",
+  // 'ī': '\u0131\u0304', // enable when we add Extended Latin
+  'ì': "\u0131\u0300"
+};
+/**
+ * A symbol node contains information about a single symbol. It either renders
+ * to a single text node, or a span with a single text node in it, depending on
+ * whether it has CSS classes, styles, or needs italic correction.
+ */
+
+var domTree_SymbolNode =
+/*#__PURE__*/
+function () {
+  function SymbolNode(text, height, depth, italic, skew, width, classes, style) {
+    this.text = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.italic = void 0;
+    this.skew = void 0;
+    this.width = void 0;
+    this.maxFontSize = void 0;
+    this.classes = void 0;
+    this.style = void 0;
+    this.text = text;
+    this.height = height || 0;
+    this.depth = depth || 0;
+    this.italic = italic || 0;
+    this.skew = skew || 0;
+    this.width = width || 0;
+    this.classes = classes || [];
+    this.style = style || {};
+    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we
+    // can specify which fonts to use.  This allows us to render these
+    // characters with a serif font in situations where the browser would
+    // either default to a sans serif or render a placeholder character.
+    // We use CSS class names like cjk_fallback, hangul_fallback and
+    // brahmic_fallback. See ./unicodeScripts.js for the set of possible
+    // script names
+
+    var script = scriptFromCodepoint(this.text.charCodeAt(0));
+
+    if (script) {
+      this.classes.push(script + "_fallback");
+    }
+
+    if (/[îïíì]/.test(this.text)) {
+      // add ī when we add Extended Latin
+      this.text = iCombinations[this.text];
+    }
+  }
+
+  var _proto4 = SymbolNode.prototype;
+
+  _proto4.hasClass = function hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+  /**
+   * Creates a text node or span from a symbol node. Note that a span is only
+   * created if it is needed.
+   */
+  ;
+
+  _proto4.toNode = function toNode() {
+    var node = document.createTextNode(this.text);
+    var span = null;
+
+    if (this.italic > 0) {
+      span = document.createElement("span");
+      span.style.marginRight = this.italic + "em";
+    }
+
+    if (this.classes.length > 0) {
+      span = span || document.createElement("span");
+      span.className = createClass(this.classes);
+    }
+
+    for (var style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type.
+
+        span.style[style] = this.style[style];
+      }
+    }
+
+    if (span) {
+      span.appendChild(node);
+      return span;
+    } else {
+      return node;
+    }
+  }
+  /**
+   * Creates markup for a symbol node.
+   */
+  ;
+
+  _proto4.toMarkup = function toMarkup() {
+    // TODO(alpert): More duplication than I'd like from
+    // span.prototype.toMarkup and symbolNode.prototype.toNode...
+    var needsSpan = false;
+    var markup = "<span";
+
+    if (this.classes.length) {
+      needsSpan = true;
+      markup += " class=\"";
+      markup += utils.escape(createClass(this.classes));
+      markup += "\"";
+    }
+
+    var styles = "";
+
+    if (this.italic > 0) {
+      styles += "margin-right:" + this.italic + "em;";
+    }
+
+    for (var style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+      }
+    }
+
+    if (styles) {
+      needsSpan = true;
+      markup += " style=\"" + utils.escape(styles) + "\"";
+    }
+
+    var escaped = utils.escape(this.text);
+
+    if (needsSpan) {
+      markup += ">";
+      markup += escaped;
+      markup += "</span>";
+      return markup;
+    } else {
+      return escaped;
+    }
+  };
+
+  return SymbolNode;
+}();
+/**
+ * SVG nodes are used to render stretchy wide elements.
+ */
+
+var SvgNode =
+/*#__PURE__*/
+function () {
+  function SvgNode(children, attributes) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.children = children || [];
+    this.attributes = attributes || {};
+  }
+
+  var _proto5 = SvgNode.prototype;
+
+  _proto5.toNode = function toNode() {
+    var svgNS = "http://www.w3.org/2000/svg";
+    var node = document.createElementNS(svgNS, "svg"); // Apply attributes
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    for (var i = 0; i < this.children.length; i++) {
+      node.appendChild(this.children[i].toNode());
+    }
+
+    return node;
+  };
+
+  _proto5.toMarkup = function toMarkup() {
+    var markup = "<svg"; // Apply attributes
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += " " + attr + "='" + this.attributes[attr] + "'";
+      }
+    }
+
+    markup += ">";
+
+    for (var i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    markup += "</svg>";
+    return markup;
+  };
+
+  return SvgNode;
+}();
+var domTree_PathNode =
+/*#__PURE__*/
+function () {
+  function PathNode(pathName, alternate) {
+    this.pathName = void 0;
+    this.alternate = void 0;
+    this.pathName = pathName;
+    this.alternate = alternate; // Used only for \sqrt
+  }
+
+  var _proto6 = PathNode.prototype;
+
+  _proto6.toNode = function toNode() {
+    var svgNS = "http://www.w3.org/2000/svg";
+    var node = document.createElementNS(svgNS, "path");
+
+    if (this.alternate) {
+      node.setAttribute("d", this.alternate);
+    } else {
+      node.setAttribute("d", svgGeometry_path[this.pathName]);
+    }
+
+    return node;
+  };
+
+  _proto6.toMarkup = function toMarkup() {
+    if (this.alternate) {
+      return "<path d='" + this.alternate + "'/>";
+    } else {
+      return "<path d='" + svgGeometry_path[this.pathName] + "'/>";
+    }
+  };
+
+  return PathNode;
+}();
+var LineNode =
+/*#__PURE__*/
+function () {
+  function LineNode(attributes) {
+    this.attributes = void 0;
+    this.attributes = attributes || {};
+  }
+
+  var _proto7 = LineNode.prototype;
+
+  _proto7.toNode = function toNode() {
+    var svgNS = "http://www.w3.org/2000/svg";
+    var node = document.createElementNS(svgNS, "line"); // Apply attributes
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    return node;
+  };
+
+  _proto7.toMarkup = function toMarkup() {
+    var markup = "<line";
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += " " + attr + "='" + this.attributes[attr] + "'";
+      }
+    }
+
+    markup += "/>";
+    return markup;
+  };
+
+  return LineNode;
+}();
+function assertSymbolDomNode(group) {
+  if (group instanceof domTree_SymbolNode) {
+    return group;
+  } else {
+    throw new Error("Expected symbolNode but got " + String(group) + ".");
+  }
+}
+function assertSpan(group) {
+  if (group instanceof domTree_Span) {
+    return group;
+  } else {
+    throw new Error("Expected span<HtmlDomNode> but got " + String(group) + ".");
+  }
+}
+// CONCATENATED MODULE: ./submodules/katex-fonts/fontMetricsData.js
+// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.
+/* harmony default export */ var fontMetricsData = ({
+  "AMS-Regular": {
+    "65": [0, 0.68889, 0, 0, 0.72222],
+    "66": [0, 0.68889, 0, 0, 0.66667],
+    "67": [0, 0.68889, 0, 0, 0.72222],
+    "68": [0, 0.68889, 0, 0, 0.72222],
+    "69": [0, 0.68889, 0, 0, 0.66667],
+    "70": [0, 0.68889, 0, 0, 0.61111],
+    "71": [0, 0.68889, 0, 0, 0.77778],
+    "72": [0, 0.68889, 0, 0, 0.77778],
+    "73": [0, 0.68889, 0, 0, 0.38889],
+    "74": [0.16667, 0.68889, 0, 0, 0.5],
+    "75": [0, 0.68889, 0, 0, 0.77778],
+    "76": [0, 0.68889, 0, 0, 0.66667],
+    "77": [0, 0.68889, 0, 0, 0.94445],
+    "78": [0, 0.68889, 0, 0, 0.72222],
+    "79": [0.16667, 0.68889, 0, 0, 0.77778],
+    "80": [0, 0.68889, 0, 0, 0.61111],
+    "81": [0.16667, 0.68889, 0, 0, 0.77778],
+    "82": [0, 0.68889, 0, 0, 0.72222],
+    "83": [0, 0.68889, 0, 0, 0.55556],
+    "84": [0, 0.68889, 0, 0, 0.66667],
+    "85": [0, 0.68889, 0, 0, 0.72222],
+    "86": [0, 0.68889, 0, 0, 0.72222],
+    "87": [0, 0.68889, 0, 0, 1.0],
+    "88": [0, 0.68889, 0, 0, 0.72222],
+    "89": [0, 0.68889, 0, 0, 0.72222],
+    "90": [0, 0.68889, 0, 0, 0.66667],
+    "107": [0, 0.68889, 0, 0, 0.55556],
+    "165": [0, 0.675, 0.025, 0, 0.75],
+    "174": [0.15559, 0.69224, 0, 0, 0.94666],
+    "240": [0, 0.68889, 0, 0, 0.55556],
+    "295": [0, 0.68889, 0, 0, 0.54028],
+    "710": [0, 0.825, 0, 0, 2.33334],
+    "732": [0, 0.9, 0, 0, 2.33334],
+    "770": [0, 0.825, 0, 0, 2.33334],
+    "771": [0, 0.9, 0, 0, 2.33334],
+    "989": [0.08167, 0.58167, 0, 0, 0.77778],
+    "1008": [0, 0.43056, 0.04028, 0, 0.66667],
+    "8245": [0, 0.54986, 0, 0, 0.275],
+    "8463": [0, 0.68889, 0, 0, 0.54028],
+    "8487": [0, 0.68889, 0, 0, 0.72222],
+    "8498": [0, 0.68889, 0, 0, 0.55556],
+    "8502": [0, 0.68889, 0, 0, 0.66667],
+    "8503": [0, 0.68889, 0, 0, 0.44445],
+    "8504": [0, 0.68889, 0, 0, 0.66667],
+    "8513": [0, 0.68889, 0, 0, 0.63889],
+    "8592": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8594": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8602": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8603": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8606": [0.01354, 0.52239, 0, 0, 1.0],
+    "8608": [0.01354, 0.52239, 0, 0, 1.0],
+    "8610": [0.01354, 0.52239, 0, 0, 1.11111],
+    "8611": [0.01354, 0.52239, 0, 0, 1.11111],
+    "8619": [0, 0.54986, 0, 0, 1.0],
+    "8620": [0, 0.54986, 0, 0, 1.0],
+    "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
+    "8622": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8624": [0, 0.69224, 0, 0, 0.5],
+    "8625": [0, 0.69224, 0, 0, 0.5],
+    "8630": [0, 0.43056, 0, 0, 1.0],
+    "8631": [0, 0.43056, 0, 0, 1.0],
+    "8634": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8635": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8638": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8639": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8642": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8643": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8644": [0.1808, 0.675, 0, 0, 1.0],
+    "8646": [0.1808, 0.675, 0, 0, 1.0],
+    "8647": [0.1808, 0.675, 0, 0, 1.0],
+    "8648": [0.19444, 0.69224, 0, 0, 0.83334],
+    "8649": [0.1808, 0.675, 0, 0, 1.0],
+    "8650": [0.19444, 0.69224, 0, 0, 0.83334],
+    "8651": [0.01354, 0.52239, 0, 0, 1.0],
+    "8652": [0.01354, 0.52239, 0, 0, 1.0],
+    "8653": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8654": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8655": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8666": [0.13667, 0.63667, 0, 0, 1.0],
+    "8667": [0.13667, 0.63667, 0, 0, 1.0],
+    "8669": [-0.13313, 0.37788, 0, 0, 1.0],
+    "8672": [-0.064, 0.437, 0, 0, 1.334],
+    "8674": [-0.064, 0.437, 0, 0, 1.334],
+    "8705": [0, 0.825, 0, 0, 0.5],
+    "8708": [0, 0.68889, 0, 0, 0.55556],
+    "8709": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8717": [0, 0.43056, 0, 0, 0.42917],
+    "8722": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8724": [0.08198, 0.69224, 0, 0, 0.77778],
+    "8726": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8733": [0, 0.69224, 0, 0, 0.77778],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8737": [0, 0.69224, 0, 0, 0.72222],
+    "8738": [0.03517, 0.52239, 0, 0, 0.72222],
+    "8739": [0.08167, 0.58167, 0, 0, 0.22222],
+    "8740": [0.25142, 0.74111, 0, 0, 0.27778],
+    "8741": [0.08167, 0.58167, 0, 0, 0.38889],
+    "8742": [0.25142, 0.74111, 0, 0, 0.5],
+    "8756": [0, 0.69224, 0, 0, 0.66667],
+    "8757": [0, 0.69224, 0, 0, 0.66667],
+    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
+    "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8774": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+    "8778": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8782": [0.06062, 0.54986, 0, 0, 0.77778],
+    "8783": [0.06062, 0.54986, 0, 0, 0.77778],
+    "8785": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8786": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8787": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8790": [0, 0.69224, 0, 0, 0.77778],
+    "8791": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8796": [0.08198, 0.91667, 0, 0, 0.77778],
+    "8806": [0.25583, 0.75583, 0, 0, 0.77778],
+    "8807": [0.25583, 0.75583, 0, 0, 0.77778],
+    "8808": [0.25142, 0.75726, 0, 0, 0.77778],
+    "8809": [0.25142, 0.75726, 0, 0, 0.77778],
+    "8812": [0.25583, 0.75583, 0, 0, 0.5],
+    "8814": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8815": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8816": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8817": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8818": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8819": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8822": [0.1808, 0.675, 0, 0, 0.77778],
+    "8823": [0.1808, 0.675, 0, 0, 0.77778],
+    "8828": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8829": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8830": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8831": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8832": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8833": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8840": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8841": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8842": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8843": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8847": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8848": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8858": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8859": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8861": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8862": [0, 0.675, 0, 0, 0.77778],
+    "8863": [0, 0.675, 0, 0, 0.77778],
+    "8864": [0, 0.675, 0, 0, 0.77778],
+    "8865": [0, 0.675, 0, 0, 0.77778],
+    "8872": [0, 0.69224, 0, 0, 0.61111],
+    "8873": [0, 0.69224, 0, 0, 0.72222],
+    "8874": [0, 0.69224, 0, 0, 0.88889],
+    "8876": [0, 0.68889, 0, 0, 0.61111],
+    "8877": [0, 0.68889, 0, 0, 0.61111],
+    "8878": [0, 0.68889, 0, 0, 0.72222],
+    "8879": [0, 0.68889, 0, 0, 0.72222],
+    "8882": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8883": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8884": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8885": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8888": [0, 0.54986, 0, 0, 1.11111],
+    "8890": [0.19444, 0.43056, 0, 0, 0.55556],
+    "8891": [0.19444, 0.69224, 0, 0, 0.61111],
+    "8892": [0.19444, 0.69224, 0, 0, 0.61111],
+    "8901": [0, 0.54986, 0, 0, 0.27778],
+    "8903": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8905": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8906": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8907": [0, 0.69224, 0, 0, 0.77778],
+    "8908": [0, 0.69224, 0, 0, 0.77778],
+    "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
+    "8910": [0, 0.54986, 0, 0, 0.76042],
+    "8911": [0, 0.54986, 0, 0, 0.76042],
+    "8912": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8913": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8914": [0, 0.54986, 0, 0, 0.66667],
+    "8915": [0, 0.54986, 0, 0, 0.66667],
+    "8916": [0, 0.69224, 0, 0, 0.66667],
+    "8918": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8919": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8920": [0.03517, 0.54986, 0, 0, 1.33334],
+    "8921": [0.03517, 0.54986, 0, 0, 1.33334],
+    "8922": [0.38569, 0.88569, 0, 0, 0.77778],
+    "8923": [0.38569, 0.88569, 0, 0, 0.77778],
+    "8926": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8927": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8928": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8929": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8934": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8935": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8936": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8937": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8938": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8939": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8940": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8941": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8994": [0.19444, 0.69224, 0, 0, 0.77778],
+    "8995": [0.19444, 0.69224, 0, 0, 0.77778],
+    "9416": [0.15559, 0.69224, 0, 0, 0.90222],
+    "9484": [0, 0.69224, 0, 0, 0.5],
+    "9488": [0, 0.69224, 0, 0, 0.5],
+    "9492": [0, 0.37788, 0, 0, 0.5],
+    "9496": [0, 0.37788, 0, 0, 0.5],
+    "9585": [0.19444, 0.68889, 0, 0, 0.88889],
+    "9586": [0.19444, 0.74111, 0, 0, 0.88889],
+    "9632": [0, 0.675, 0, 0, 0.77778],
+    "9633": [0, 0.675, 0, 0, 0.77778],
+    "9650": [0, 0.54986, 0, 0, 0.72222],
+    "9651": [0, 0.54986, 0, 0, 0.72222],
+    "9654": [0.03517, 0.54986, 0, 0, 0.77778],
+    "9660": [0, 0.54986, 0, 0, 0.72222],
+    "9661": [0, 0.54986, 0, 0, 0.72222],
+    "9664": [0.03517, 0.54986, 0, 0, 0.77778],
+    "9674": [0.11111, 0.69224, 0, 0, 0.66667],
+    "9733": [0.19444, 0.69224, 0, 0, 0.94445],
+    "10003": [0, 0.69224, 0, 0, 0.83334],
+    "10016": [0, 0.69224, 0, 0, 0.83334],
+    "10731": [0.11111, 0.69224, 0, 0, 0.66667],
+    "10846": [0.19444, 0.75583, 0, 0, 0.61111],
+    "10877": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10878": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10885": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10886": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10887": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10888": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10889": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10890": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10891": [0.48256, 0.98256, 0, 0, 0.77778],
+    "10892": [0.48256, 0.98256, 0, 0, 0.77778],
+    "10901": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10902": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10933": [0.25142, 0.75726, 0, 0, 0.77778],
+    "10934": [0.25142, 0.75726, 0, 0, 0.77778],
+    "10935": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10936": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10937": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10938": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10949": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10950": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10955": [0.28481, 0.79383, 0, 0, 0.77778],
+    "10956": [0.28481, 0.79383, 0, 0, 0.77778],
+    "57350": [0.08167, 0.58167, 0, 0, 0.22222],
+    "57351": [0.08167, 0.58167, 0, 0, 0.38889],
+    "57352": [0.08167, 0.58167, 0, 0, 0.77778],
+    "57353": [0, 0.43056, 0.04028, 0, 0.66667],
+    "57356": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57357": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57358": [0.41951, 0.91951, 0, 0, 0.77778],
+    "57359": [0.30274, 0.79383, 0, 0, 0.77778],
+    "57360": [0.30274, 0.79383, 0, 0, 0.77778],
+    "57361": [0.41951, 0.91951, 0, 0, 0.77778],
+    "57366": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57367": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57368": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57369": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57370": [0.13597, 0.63597, 0, 0, 0.77778],
+    "57371": [0.13597, 0.63597, 0, 0, 0.77778]
+  },
+  "Caligraphic-Regular": {
+    "48": [0, 0.43056, 0, 0, 0.5],
+    "49": [0, 0.43056, 0, 0, 0.5],
+    "50": [0, 0.43056, 0, 0, 0.5],
+    "51": [0.19444, 0.43056, 0, 0, 0.5],
+    "52": [0.19444, 0.43056, 0, 0, 0.5],
+    "53": [0.19444, 0.43056, 0, 0, 0.5],
+    "54": [0, 0.64444, 0, 0, 0.5],
+    "55": [0.19444, 0.43056, 0, 0, 0.5],
+    "56": [0, 0.64444, 0, 0, 0.5],
+    "57": [0.19444, 0.43056, 0, 0, 0.5],
+    "65": [0, 0.68333, 0, 0.19445, 0.79847],
+    "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
+    "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
+    "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
+    "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
+    "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
+    "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
+    "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],
+    "73": [0, 0.68333, 0.07382, 0, 0.54452],
+    "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
+    "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
+    "76": [0, 0.68333, 0, 0.13889, 0.68972],
+    "77": [0, 0.68333, 0, 0.13889, 1.2009],
+    "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
+    "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
+    "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
+    "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
+    "82": [0, 0.68333, 0, 0.08334, 0.8475],
+    "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
+    "84": [0, 0.68333, 0.25417, 0, 0.54464],
+    "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
+    "86": [0, 0.68333, 0.08222, 0, 0.61278],
+    "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
+    "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
+    "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
+    "90": [0, 0.68333, 0.07944, 0.13889, 0.72473]
+  },
+  "Fraktur-Regular": {
+    "33": [0, 0.69141, 0, 0, 0.29574],
+    "34": [0, 0.69141, 0, 0, 0.21471],
+    "38": [0, 0.69141, 0, 0, 0.73786],
+    "39": [0, 0.69141, 0, 0, 0.21201],
+    "40": [0.24982, 0.74947, 0, 0, 0.38865],
+    "41": [0.24982, 0.74947, 0, 0, 0.38865],
+    "42": [0, 0.62119, 0, 0, 0.27764],
+    "43": [0.08319, 0.58283, 0, 0, 0.75623],
+    "44": [0, 0.10803, 0, 0, 0.27764],
+    "45": [0.08319, 0.58283, 0, 0, 0.75623],
+    "46": [0, 0.10803, 0, 0, 0.27764],
+    "47": [0.24982, 0.74947, 0, 0, 0.50181],
+    "48": [0, 0.47534, 0, 0, 0.50181],
+    "49": [0, 0.47534, 0, 0, 0.50181],
+    "50": [0, 0.47534, 0, 0, 0.50181],
+    "51": [0.18906, 0.47534, 0, 0, 0.50181],
+    "52": [0.18906, 0.47534, 0, 0, 0.50181],
+    "53": [0.18906, 0.47534, 0, 0, 0.50181],
+    "54": [0, 0.69141, 0, 0, 0.50181],
+    "55": [0.18906, 0.47534, 0, 0, 0.50181],
+    "56": [0, 0.69141, 0, 0, 0.50181],
+    "57": [0.18906, 0.47534, 0, 0, 0.50181],
+    "58": [0, 0.47534, 0, 0, 0.21606],
+    "59": [0.12604, 0.47534, 0, 0, 0.21606],
+    "61": [-0.13099, 0.36866, 0, 0, 0.75623],
+    "63": [0, 0.69141, 0, 0, 0.36245],
+    "65": [0, 0.69141, 0, 0, 0.7176],
+    "66": [0, 0.69141, 0, 0, 0.88397],
+    "67": [0, 0.69141, 0, 0, 0.61254],
+    "68": [0, 0.69141, 0, 0, 0.83158],
+    "69": [0, 0.69141, 0, 0, 0.66278],
+    "70": [0.12604, 0.69141, 0, 0, 0.61119],
+    "71": [0, 0.69141, 0, 0, 0.78539],
+    "72": [0.06302, 0.69141, 0, 0, 0.7203],
+    "73": [0, 0.69141, 0, 0, 0.55448],
+    "74": [0.12604, 0.69141, 0, 0, 0.55231],
+    "75": [0, 0.69141, 0, 0, 0.66845],
+    "76": [0, 0.69141, 0, 0, 0.66602],
+    "77": [0, 0.69141, 0, 0, 1.04953],
+    "78": [0, 0.69141, 0, 0, 0.83212],
+    "79": [0, 0.69141, 0, 0, 0.82699],
+    "80": [0.18906, 0.69141, 0, 0, 0.82753],
+    "81": [0.03781, 0.69141, 0, 0, 0.82699],
+    "82": [0, 0.69141, 0, 0, 0.82807],
+    "83": [0, 0.69141, 0, 0, 0.82861],
+    "84": [0, 0.69141, 0, 0, 0.66899],
+    "85": [0, 0.69141, 0, 0, 0.64576],
+    "86": [0, 0.69141, 0, 0, 0.83131],
+    "87": [0, 0.69141, 0, 0, 1.04602],
+    "88": [0, 0.69141, 0, 0, 0.71922],
+    "89": [0.18906, 0.69141, 0, 0, 0.83293],
+    "90": [0.12604, 0.69141, 0, 0, 0.60201],
+    "91": [0.24982, 0.74947, 0, 0, 0.27764],
+    "93": [0.24982, 0.74947, 0, 0, 0.27764],
+    "94": [0, 0.69141, 0, 0, 0.49965],
+    "97": [0, 0.47534, 0, 0, 0.50046],
+    "98": [0, 0.69141, 0, 0, 0.51315],
+    "99": [0, 0.47534, 0, 0, 0.38946],
+    "100": [0, 0.62119, 0, 0, 0.49857],
+    "101": [0, 0.47534, 0, 0, 0.40053],
+    "102": [0.18906, 0.69141, 0, 0, 0.32626],
+    "103": [0.18906, 0.47534, 0, 0, 0.5037],
+    "104": [0.18906, 0.69141, 0, 0, 0.52126],
+    "105": [0, 0.69141, 0, 0, 0.27899],
+    "106": [0, 0.69141, 0, 0, 0.28088],
+    "107": [0, 0.69141, 0, 0, 0.38946],
+    "108": [0, 0.69141, 0, 0, 0.27953],
+    "109": [0, 0.47534, 0, 0, 0.76676],
+    "110": [0, 0.47534, 0, 0, 0.52666],
+    "111": [0, 0.47534, 0, 0, 0.48885],
+    "112": [0.18906, 0.52396, 0, 0, 0.50046],
+    "113": [0.18906, 0.47534, 0, 0, 0.48912],
+    "114": [0, 0.47534, 0, 0, 0.38919],
+    "115": [0, 0.47534, 0, 0, 0.44266],
+    "116": [0, 0.62119, 0, 0, 0.33301],
+    "117": [0, 0.47534, 0, 0, 0.5172],
+    "118": [0, 0.52396, 0, 0, 0.5118],
+    "119": [0, 0.52396, 0, 0, 0.77351],
+    "120": [0.18906, 0.47534, 0, 0, 0.38865],
+    "121": [0.18906, 0.47534, 0, 0, 0.49884],
+    "122": [0.18906, 0.47534, 0, 0, 0.39054],
+    "8216": [0, 0.69141, 0, 0, 0.21471],
+    "8217": [0, 0.69141, 0, 0, 0.21471],
+    "58112": [0, 0.62119, 0, 0, 0.49749],
+    "58113": [0, 0.62119, 0, 0, 0.4983],
+    "58114": [0.18906, 0.69141, 0, 0, 0.33328],
+    "58115": [0.18906, 0.69141, 0, 0, 0.32923],
+    "58116": [0.18906, 0.47534, 0, 0, 0.50343],
+    "58117": [0, 0.69141, 0, 0, 0.33301],
+    "58118": [0, 0.62119, 0, 0, 0.33409],
+    "58119": [0, 0.47534, 0, 0, 0.50073]
+  },
+  "Main-Bold": {
+    "33": [0, 0.69444, 0, 0, 0.35],
+    "34": [0, 0.69444, 0, 0, 0.60278],
+    "35": [0.19444, 0.69444, 0, 0, 0.95833],
+    "36": [0.05556, 0.75, 0, 0, 0.575],
+    "37": [0.05556, 0.75, 0, 0, 0.95833],
+    "38": [0, 0.69444, 0, 0, 0.89444],
+    "39": [0, 0.69444, 0, 0, 0.31944],
+    "40": [0.25, 0.75, 0, 0, 0.44722],
+    "41": [0.25, 0.75, 0, 0, 0.44722],
+    "42": [0, 0.75, 0, 0, 0.575],
+    "43": [0.13333, 0.63333, 0, 0, 0.89444],
+    "44": [0.19444, 0.15556, 0, 0, 0.31944],
+    "45": [0, 0.44444, 0, 0, 0.38333],
+    "46": [0, 0.15556, 0, 0, 0.31944],
+    "47": [0.25, 0.75, 0, 0, 0.575],
+    "48": [0, 0.64444, 0, 0, 0.575],
+    "49": [0, 0.64444, 0, 0, 0.575],
+    "50": [0, 0.64444, 0, 0, 0.575],
+    "51": [0, 0.64444, 0, 0, 0.575],
+    "52": [0, 0.64444, 0, 0, 0.575],
+    "53": [0, 0.64444, 0, 0, 0.575],
+    "54": [0, 0.64444, 0, 0, 0.575],
+    "55": [0, 0.64444, 0, 0, 0.575],
+    "56": [0, 0.64444, 0, 0, 0.575],
+    "57": [0, 0.64444, 0, 0, 0.575],
+    "58": [0, 0.44444, 0, 0, 0.31944],
+    "59": [0.19444, 0.44444, 0, 0, 0.31944],
+    "60": [0.08556, 0.58556, 0, 0, 0.89444],
+    "61": [-0.10889, 0.39111, 0, 0, 0.89444],
+    "62": [0.08556, 0.58556, 0, 0, 0.89444],
+    "63": [0, 0.69444, 0, 0, 0.54305],
+    "64": [0, 0.69444, 0, 0, 0.89444],
+    "65": [0, 0.68611, 0, 0, 0.86944],
+    "66": [0, 0.68611, 0, 0, 0.81805],
+    "67": [0, 0.68611, 0, 0, 0.83055],
+    "68": [0, 0.68611, 0, 0, 0.88194],
+    "69": [0, 0.68611, 0, 0, 0.75555],
+    "70": [0, 0.68611, 0, 0, 0.72361],
+    "71": [0, 0.68611, 0, 0, 0.90416],
+    "72": [0, 0.68611, 0, 0, 0.9],
+    "73": [0, 0.68611, 0, 0, 0.43611],
+    "74": [0, 0.68611, 0, 0, 0.59444],
+    "75": [0, 0.68611, 0, 0, 0.90138],
+    "76": [0, 0.68611, 0, 0, 0.69166],
+    "77": [0, 0.68611, 0, 0, 1.09166],
+    "78": [0, 0.68611, 0, 0, 0.9],
+    "79": [0, 0.68611, 0, 0, 0.86388],
+    "80": [0, 0.68611, 0, 0, 0.78611],
+    "81": [0.19444, 0.68611, 0, 0, 0.86388],
+    "82": [0, 0.68611, 0, 0, 0.8625],
+    "83": [0, 0.68611, 0, 0, 0.63889],
+    "84": [0, 0.68611, 0, 0, 0.8],
+    "85": [0, 0.68611, 0, 0, 0.88472],
+    "86": [0, 0.68611, 0.01597, 0, 0.86944],
+    "87": [0, 0.68611, 0.01597, 0, 1.18888],
+    "88": [0, 0.68611, 0, 0, 0.86944],
+    "89": [0, 0.68611, 0.02875, 0, 0.86944],
+    "90": [0, 0.68611, 0, 0, 0.70277],
+    "91": [0.25, 0.75, 0, 0, 0.31944],
+    "92": [0.25, 0.75, 0, 0, 0.575],
+    "93": [0.25, 0.75, 0, 0, 0.31944],
+    "94": [0, 0.69444, 0, 0, 0.575],
+    "95": [0.31, 0.13444, 0.03194, 0, 0.575],
+    "97": [0, 0.44444, 0, 0, 0.55902],
+    "98": [0, 0.69444, 0, 0, 0.63889],
+    "99": [0, 0.44444, 0, 0, 0.51111],
+    "100": [0, 0.69444, 0, 0, 0.63889],
+    "101": [0, 0.44444, 0, 0, 0.52708],
+    "102": [0, 0.69444, 0.10903, 0, 0.35139],
+    "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
+    "104": [0, 0.69444, 0, 0, 0.63889],
+    "105": [0, 0.69444, 0, 0, 0.31944],
+    "106": [0.19444, 0.69444, 0, 0, 0.35139],
+    "107": [0, 0.69444, 0, 0, 0.60694],
+    "108": [0, 0.69444, 0, 0, 0.31944],
+    "109": [0, 0.44444, 0, 0, 0.95833],
+    "110": [0, 0.44444, 0, 0, 0.63889],
+    "111": [0, 0.44444, 0, 0, 0.575],
+    "112": [0.19444, 0.44444, 0, 0, 0.63889],
+    "113": [0.19444, 0.44444, 0, 0, 0.60694],
+    "114": [0, 0.44444, 0, 0, 0.47361],
+    "115": [0, 0.44444, 0, 0, 0.45361],
+    "116": [0, 0.63492, 0, 0, 0.44722],
+    "117": [0, 0.44444, 0, 0, 0.63889],
+    "118": [0, 0.44444, 0.01597, 0, 0.60694],
+    "119": [0, 0.44444, 0.01597, 0, 0.83055],
+    "120": [0, 0.44444, 0, 0, 0.60694],
+    "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
+    "122": [0, 0.44444, 0, 0, 0.51111],
+    "123": [0.25, 0.75, 0, 0, 0.575],
+    "124": [0.25, 0.75, 0, 0, 0.31944],
+    "125": [0.25, 0.75, 0, 0, 0.575],
+    "126": [0.35, 0.34444, 0, 0, 0.575],
+    "168": [0, 0.69444, 0, 0, 0.575],
+    "172": [0, 0.44444, 0, 0, 0.76666],
+    "176": [0, 0.69444, 0, 0, 0.86944],
+    "177": [0.13333, 0.63333, 0, 0, 0.89444],
+    "184": [0.17014, 0, 0, 0, 0.51111],
+    "198": [0, 0.68611, 0, 0, 1.04166],
+    "215": [0.13333, 0.63333, 0, 0, 0.89444],
+    "216": [0.04861, 0.73472, 0, 0, 0.89444],
+    "223": [0, 0.69444, 0, 0, 0.59722],
+    "230": [0, 0.44444, 0, 0, 0.83055],
+    "247": [0.13333, 0.63333, 0, 0, 0.89444],
+    "248": [0.09722, 0.54167, 0, 0, 0.575],
+    "305": [0, 0.44444, 0, 0, 0.31944],
+    "338": [0, 0.68611, 0, 0, 1.16944],
+    "339": [0, 0.44444, 0, 0, 0.89444],
+    "567": [0.19444, 0.44444, 0, 0, 0.35139],
+    "710": [0, 0.69444, 0, 0, 0.575],
+    "711": [0, 0.63194, 0, 0, 0.575],
+    "713": [0, 0.59611, 0, 0, 0.575],
+    "714": [0, 0.69444, 0, 0, 0.575],
+    "715": [0, 0.69444, 0, 0, 0.575],
+    "728": [0, 0.69444, 0, 0, 0.575],
+    "729": [0, 0.69444, 0, 0, 0.31944],
+    "730": [0, 0.69444, 0, 0, 0.86944],
+    "732": [0, 0.69444, 0, 0, 0.575],
+    "733": [0, 0.69444, 0, 0, 0.575],
+    "915": [0, 0.68611, 0, 0, 0.69166],
+    "916": [0, 0.68611, 0, 0, 0.95833],
+    "920": [0, 0.68611, 0, 0, 0.89444],
+    "923": [0, 0.68611, 0, 0, 0.80555],
+    "926": [0, 0.68611, 0, 0, 0.76666],
+    "928": [0, 0.68611, 0, 0, 0.9],
+    "931": [0, 0.68611, 0, 0, 0.83055],
+    "933": [0, 0.68611, 0, 0, 0.89444],
+    "934": [0, 0.68611, 0, 0, 0.83055],
+    "936": [0, 0.68611, 0, 0, 0.89444],
+    "937": [0, 0.68611, 0, 0, 0.83055],
+    "8211": [0, 0.44444, 0.03194, 0, 0.575],
+    "8212": [0, 0.44444, 0.03194, 0, 1.14999],
+    "8216": [0, 0.69444, 0, 0, 0.31944],
+    "8217": [0, 0.69444, 0, 0, 0.31944],
+    "8220": [0, 0.69444, 0, 0, 0.60278],
+    "8221": [0, 0.69444, 0, 0, 0.60278],
+    "8224": [0.19444, 0.69444, 0, 0, 0.51111],
+    "8225": [0.19444, 0.69444, 0, 0, 0.51111],
+    "8242": [0, 0.55556, 0, 0, 0.34444],
+    "8407": [0, 0.72444, 0.15486, 0, 0.575],
+    "8463": [0, 0.69444, 0, 0, 0.66759],
+    "8465": [0, 0.69444, 0, 0, 0.83055],
+    "8467": [0, 0.69444, 0, 0, 0.47361],
+    "8472": [0.19444, 0.44444, 0, 0, 0.74027],
+    "8476": [0, 0.69444, 0, 0, 0.83055],
+    "8501": [0, 0.69444, 0, 0, 0.70277],
+    "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8593": [0.19444, 0.69444, 0, 0, 0.575],
+    "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8595": [0.19444, 0.69444, 0, 0, 0.575],
+    "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8597": [0.25, 0.75, 0, 0, 0.575],
+    "8598": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8599": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8600": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8601": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8657": [0.19444, 0.69444, 0, 0, 0.70277],
+    "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8659": [0.19444, 0.69444, 0, 0, 0.70277],
+    "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8661": [0.25, 0.75, 0, 0, 0.70277],
+    "8704": [0, 0.69444, 0, 0, 0.63889],
+    "8706": [0, 0.69444, 0.06389, 0, 0.62847],
+    "8707": [0, 0.69444, 0, 0, 0.63889],
+    "8709": [0.05556, 0.75, 0, 0, 0.575],
+    "8711": [0, 0.68611, 0, 0, 0.95833],
+    "8712": [0.08556, 0.58556, 0, 0, 0.76666],
+    "8715": [0.08556, 0.58556, 0, 0, 0.76666],
+    "8722": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8723": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8725": [0.25, 0.75, 0, 0, 0.575],
+    "8726": [0.25, 0.75, 0, 0, 0.575],
+    "8727": [-0.02778, 0.47222, 0, 0, 0.575],
+    "8728": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8729": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8730": [0.18, 0.82, 0, 0, 0.95833],
+    "8733": [0, 0.44444, 0, 0, 0.89444],
+    "8734": [0, 0.44444, 0, 0, 1.14999],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8739": [0.25, 0.75, 0, 0, 0.31944],
+    "8741": [0.25, 0.75, 0, 0, 0.575],
+    "8743": [0, 0.55556, 0, 0, 0.76666],
+    "8744": [0, 0.55556, 0, 0, 0.76666],
+    "8745": [0, 0.55556, 0, 0, 0.76666],
+    "8746": [0, 0.55556, 0, 0, 0.76666],
+    "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
+    "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
+    "8768": [0.19444, 0.69444, 0, 0, 0.31944],
+    "8771": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8776": [0.02444, 0.52444, 0, 0, 0.89444],
+    "8781": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8801": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8804": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8805": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8810": [0.08556, 0.58556, 0, 0, 1.14999],
+    "8811": [0.08556, 0.58556, 0, 0, 1.14999],
+    "8826": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8827": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8834": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8835": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8838": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8839": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8846": [0, 0.55556, 0, 0, 0.76666],
+    "8849": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8850": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8851": [0, 0.55556, 0, 0, 0.76666],
+    "8852": [0, 0.55556, 0, 0, 0.76666],
+    "8853": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8854": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8855": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8856": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8857": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8866": [0, 0.69444, 0, 0, 0.70277],
+    "8867": [0, 0.69444, 0, 0, 0.70277],
+    "8868": [0, 0.69444, 0, 0, 0.89444],
+    "8869": [0, 0.69444, 0, 0, 0.89444],
+    "8900": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
+    "8902": [-0.02778, 0.47222, 0, 0, 0.575],
+    "8968": [0.25, 0.75, 0, 0, 0.51111],
+    "8969": [0.25, 0.75, 0, 0, 0.51111],
+    "8970": [0.25, 0.75, 0, 0, 0.51111],
+    "8971": [0.25, 0.75, 0, 0, 0.51111],
+    "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
+    "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
+    "9651": [0.19444, 0.69444, 0, 0, 1.02222],
+    "9657": [-0.02778, 0.47222, 0, 0, 0.575],
+    "9661": [0.19444, 0.69444, 0, 0, 1.02222],
+    "9667": [-0.02778, 0.47222, 0, 0, 0.575],
+    "9711": [0.19444, 0.69444, 0, 0, 1.14999],
+    "9824": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9825": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9826": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9827": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9837": [0, 0.75, 0, 0, 0.44722],
+    "9838": [0.19444, 0.69444, 0, 0, 0.44722],
+    "9839": [0.19444, 0.69444, 0, 0, 0.44722],
+    "10216": [0.25, 0.75, 0, 0, 0.44722],
+    "10217": [0.25, 0.75, 0, 0, 0.44722],
+    "10815": [0, 0.68611, 0, 0, 0.9],
+    "10927": [0.19667, 0.69667, 0, 0, 0.89444],
+    "10928": [0.19667, 0.69667, 0, 0, 0.89444],
+    "57376": [0.19444, 0.69444, 0, 0, 0]
+  },
+  "Main-BoldItalic": {
+    "33": [0, 0.69444, 0.11417, 0, 0.38611],
+    "34": [0, 0.69444, 0.07939, 0, 0.62055],
+    "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
+    "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
+    "38": [0, 0.69444, 0.08528, 0, 0.88555],
+    "39": [0, 0.69444, 0.12945, 0, 0.35555],
+    "40": [0.25, 0.75, 0.15806, 0, 0.47333],
+    "41": [0.25, 0.75, 0.03306, 0, 0.47333],
+    "42": [0, 0.75, 0.14333, 0, 0.59111],
+    "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
+    "44": [0.19444, 0.14722, 0, 0, 0.35555],
+    "45": [0, 0.44444, 0.02611, 0, 0.41444],
+    "46": [0, 0.14722, 0, 0, 0.35555],
+    "47": [0.25, 0.75, 0.15806, 0, 0.59111],
+    "48": [0, 0.64444, 0.13167, 0, 0.59111],
+    "49": [0, 0.64444, 0.13167, 0, 0.59111],
+    "50": [0, 0.64444, 0.13167, 0, 0.59111],
+    "51": [0, 0.64444, 0.13167, 0, 0.59111],
+    "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+    "53": [0, 0.64444, 0.13167, 0, 0.59111],
+    "54": [0, 0.64444, 0.13167, 0, 0.59111],
+    "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+    "56": [0, 0.64444, 0.13167, 0, 0.59111],
+    "57": [0, 0.64444, 0.13167, 0, 0.59111],
+    "58": [0, 0.44444, 0.06695, 0, 0.35555],
+    "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
+    "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
+    "63": [0, 0.69444, 0.11472, 0, 0.59111],
+    "64": [0, 0.69444, 0.09208, 0, 0.88555],
+    "65": [0, 0.68611, 0, 0, 0.86555],
+    "66": [0, 0.68611, 0.0992, 0, 0.81666],
+    "67": [0, 0.68611, 0.14208, 0, 0.82666],
+    "68": [0, 0.68611, 0.09062, 0, 0.87555],
+    "69": [0, 0.68611, 0.11431, 0, 0.75666],
+    "70": [0, 0.68611, 0.12903, 0, 0.72722],
+    "71": [0, 0.68611, 0.07347, 0, 0.89527],
+    "72": [0, 0.68611, 0.17208, 0, 0.8961],
+    "73": [0, 0.68611, 0.15681, 0, 0.47166],
+    "74": [0, 0.68611, 0.145, 0, 0.61055],
+    "75": [0, 0.68611, 0.14208, 0, 0.89499],
+    "76": [0, 0.68611, 0, 0, 0.69777],
+    "77": [0, 0.68611, 0.17208, 0, 1.07277],
+    "78": [0, 0.68611, 0.17208, 0, 0.8961],
+    "79": [0, 0.68611, 0.09062, 0, 0.85499],
+    "80": [0, 0.68611, 0.0992, 0, 0.78721],
+    "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
+    "82": [0, 0.68611, 0.02559, 0, 0.85944],
+    "83": [0, 0.68611, 0.11264, 0, 0.64999],
+    "84": [0, 0.68611, 0.12903, 0, 0.7961],
+    "85": [0, 0.68611, 0.17208, 0, 0.88083],
+    "86": [0, 0.68611, 0.18625, 0, 0.86555],
+    "87": [0, 0.68611, 0.18625, 0, 1.15999],
+    "88": [0, 0.68611, 0.15681, 0, 0.86555],
+    "89": [0, 0.68611, 0.19803, 0, 0.86555],
+    "90": [0, 0.68611, 0.14208, 0, 0.70888],
+    "91": [0.25, 0.75, 0.1875, 0, 0.35611],
+    "93": [0.25, 0.75, 0.09972, 0, 0.35611],
+    "94": [0, 0.69444, 0.06709, 0, 0.59111],
+    "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
+    "97": [0, 0.44444, 0.09426, 0, 0.59111],
+    "98": [0, 0.69444, 0.07861, 0, 0.53222],
+    "99": [0, 0.44444, 0.05222, 0, 0.53222],
+    "100": [0, 0.69444, 0.10861, 0, 0.59111],
+    "101": [0, 0.44444, 0.085, 0, 0.53222],
+    "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
+    "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
+    "104": [0, 0.69444, 0.09426, 0, 0.59111],
+    "105": [0, 0.69326, 0.11387, 0, 0.35555],
+    "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
+    "107": [0, 0.69444, 0.11111, 0, 0.53222],
+    "108": [0, 0.69444, 0.10861, 0, 0.29666],
+    "109": [0, 0.44444, 0.09426, 0, 0.94444],
+    "110": [0, 0.44444, 0.09426, 0, 0.64999],
+    "111": [0, 0.44444, 0.07861, 0, 0.59111],
+    "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
+    "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
+    "114": [0, 0.44444, 0.11111, 0, 0.50167],
+    "115": [0, 0.44444, 0.08167, 0, 0.48694],
+    "116": [0, 0.63492, 0.09639, 0, 0.385],
+    "117": [0, 0.44444, 0.09426, 0, 0.62055],
+    "118": [0, 0.44444, 0.11111, 0, 0.53222],
+    "119": [0, 0.44444, 0.11111, 0, 0.76777],
+    "120": [0, 0.44444, 0.12583, 0, 0.56055],
+    "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
+    "122": [0, 0.44444, 0.13889, 0, 0.49055],
+    "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
+    "163": [0, 0.69444, 0, 0, 0.86853],
+    "168": [0, 0.69444, 0.11473, 0, 0.59111],
+    "176": [0, 0.69444, 0, 0, 0.94888],
+    "184": [0.17014, 0, 0, 0, 0.53222],
+    "198": [0, 0.68611, 0.11431, 0, 1.02277],
+    "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
+    "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
+    "230": [0, 0.44444, 0.085, 0, 0.82666],
+    "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
+    "305": [0, 0.44444, 0.09426, 0, 0.35555],
+    "338": [0, 0.68611, 0.11431, 0, 1.14054],
+    "339": [0, 0.44444, 0.085, 0, 0.82666],
+    "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
+    "710": [0, 0.69444, 0.06709, 0, 0.59111],
+    "711": [0, 0.63194, 0.08271, 0, 0.59111],
+    "713": [0, 0.59444, 0.10444, 0, 0.59111],
+    "714": [0, 0.69444, 0.08528, 0, 0.59111],
+    "715": [0, 0.69444, 0, 0, 0.59111],
+    "728": [0, 0.69444, 0.10333, 0, 0.59111],
+    "729": [0, 0.69444, 0.12945, 0, 0.35555],
+    "730": [0, 0.69444, 0, 0, 0.94888],
+    "732": [0, 0.69444, 0.11472, 0, 0.59111],
+    "733": [0, 0.69444, 0.11472, 0, 0.59111],
+    "915": [0, 0.68611, 0.12903, 0, 0.69777],
+    "916": [0, 0.68611, 0, 0, 0.94444],
+    "920": [0, 0.68611, 0.09062, 0, 0.88555],
+    "923": [0, 0.68611, 0, 0, 0.80666],
+    "926": [0, 0.68611, 0.15092, 0, 0.76777],
+    "928": [0, 0.68611, 0.17208, 0, 0.8961],
+    "931": [0, 0.68611, 0.11431, 0, 0.82666],
+    "933": [0, 0.68611, 0.10778, 0, 0.88555],
+    "934": [0, 0.68611, 0.05632, 0, 0.82666],
+    "936": [0, 0.68611, 0.10778, 0, 0.88555],
+    "937": [0, 0.68611, 0.0992, 0, 0.82666],
+    "8211": [0, 0.44444, 0.09811, 0, 0.59111],
+    "8212": [0, 0.44444, 0.09811, 0, 1.18221],
+    "8216": [0, 0.69444, 0.12945, 0, 0.35555],
+    "8217": [0, 0.69444, 0.12945, 0, 0.35555],
+    "8220": [0, 0.69444, 0.16772, 0, 0.62055],
+    "8221": [0, 0.69444, 0.07939, 0, 0.62055]
+  },
+  "Main-Italic": {
+    "33": [0, 0.69444, 0.12417, 0, 0.30667],
+    "34": [0, 0.69444, 0.06961, 0, 0.51444],
+    "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
+    "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
+    "38": [0, 0.69444, 0.09694, 0, 0.76666],
+    "39": [0, 0.69444, 0.12417, 0, 0.30667],
+    "40": [0.25, 0.75, 0.16194, 0, 0.40889],
+    "41": [0.25, 0.75, 0.03694, 0, 0.40889],
+    "42": [0, 0.75, 0.14917, 0, 0.51111],
+    "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
+    "44": [0.19444, 0.10556, 0, 0, 0.30667],
+    "45": [0, 0.43056, 0.02826, 0, 0.35778],
+    "46": [0, 0.10556, 0, 0, 0.30667],
+    "47": [0.25, 0.75, 0.16194, 0, 0.51111],
+    "48": [0, 0.64444, 0.13556, 0, 0.51111],
+    "49": [0, 0.64444, 0.13556, 0, 0.51111],
+    "50": [0, 0.64444, 0.13556, 0, 0.51111],
+    "51": [0, 0.64444, 0.13556, 0, 0.51111],
+    "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+    "53": [0, 0.64444, 0.13556, 0, 0.51111],
+    "54": [0, 0.64444, 0.13556, 0, 0.51111],
+    "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+    "56": [0, 0.64444, 0.13556, 0, 0.51111],
+    "57": [0, 0.64444, 0.13556, 0, 0.51111],
+    "58": [0, 0.43056, 0.0582, 0, 0.30667],
+    "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
+    "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
+    "63": [0, 0.69444, 0.1225, 0, 0.51111],
+    "64": [0, 0.69444, 0.09597, 0, 0.76666],
+    "65": [0, 0.68333, 0, 0, 0.74333],
+    "66": [0, 0.68333, 0.10257, 0, 0.70389],
+    "67": [0, 0.68333, 0.14528, 0, 0.71555],
+    "68": [0, 0.68333, 0.09403, 0, 0.755],
+    "69": [0, 0.68333, 0.12028, 0, 0.67833],
+    "70": [0, 0.68333, 0.13305, 0, 0.65277],
+    "71": [0, 0.68333, 0.08722, 0, 0.77361],
+    "72": [0, 0.68333, 0.16389, 0, 0.74333],
+    "73": [0, 0.68333, 0.15806, 0, 0.38555],
+    "74": [0, 0.68333, 0.14028, 0, 0.525],
+    "75": [0, 0.68333, 0.14528, 0, 0.76888],
+    "76": [0, 0.68333, 0, 0, 0.62722],
+    "77": [0, 0.68333, 0.16389, 0, 0.89666],
+    "78": [0, 0.68333, 0.16389, 0, 0.74333],
+    "79": [0, 0.68333, 0.09403, 0, 0.76666],
+    "80": [0, 0.68333, 0.10257, 0, 0.67833],
+    "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
+    "82": [0, 0.68333, 0.03868, 0, 0.72944],
+    "83": [0, 0.68333, 0.11972, 0, 0.56222],
+    "84": [0, 0.68333, 0.13305, 0, 0.71555],
+    "85": [0, 0.68333, 0.16389, 0, 0.74333],
+    "86": [0, 0.68333, 0.18361, 0, 0.74333],
+    "87": [0, 0.68333, 0.18361, 0, 0.99888],
+    "88": [0, 0.68333, 0.15806, 0, 0.74333],
+    "89": [0, 0.68333, 0.19383, 0, 0.74333],
+    "90": [0, 0.68333, 0.14528, 0, 0.61333],
+    "91": [0.25, 0.75, 0.1875, 0, 0.30667],
+    "93": [0.25, 0.75, 0.10528, 0, 0.30667],
+    "94": [0, 0.69444, 0.06646, 0, 0.51111],
+    "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
+    "97": [0, 0.43056, 0.07671, 0, 0.51111],
+    "98": [0, 0.69444, 0.06312, 0, 0.46],
+    "99": [0, 0.43056, 0.05653, 0, 0.46],
+    "100": [0, 0.69444, 0.10333, 0, 0.51111],
+    "101": [0, 0.43056, 0.07514, 0, 0.46],
+    "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
+    "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
+    "104": [0, 0.69444, 0.07671, 0, 0.51111],
+    "105": [0, 0.65536, 0.1019, 0, 0.30667],
+    "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
+    "107": [0, 0.69444, 0.10764, 0, 0.46],
+    "108": [0, 0.69444, 0.10333, 0, 0.25555],
+    "109": [0, 0.43056, 0.07671, 0, 0.81777],
+    "110": [0, 0.43056, 0.07671, 0, 0.56222],
+    "111": [0, 0.43056, 0.06312, 0, 0.51111],
+    "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
+    "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
+    "114": [0, 0.43056, 0.10764, 0, 0.42166],
+    "115": [0, 0.43056, 0.08208, 0, 0.40889],
+    "116": [0, 0.61508, 0.09486, 0, 0.33222],
+    "117": [0, 0.43056, 0.07671, 0, 0.53666],
+    "118": [0, 0.43056, 0.10764, 0, 0.46],
+    "119": [0, 0.43056, 0.10764, 0, 0.66444],
+    "120": [0, 0.43056, 0.12042, 0, 0.46389],
+    "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
+    "122": [0, 0.43056, 0.12292, 0, 0.40889],
+    "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
+    "163": [0, 0.69444, 0, 0, 0.76909],
+    "168": [0, 0.66786, 0.10474, 0, 0.51111],
+    "176": [0, 0.69444, 0, 0, 0.83129],
+    "184": [0.17014, 0, 0, 0, 0.46],
+    "198": [0, 0.68333, 0.12028, 0, 0.88277],
+    "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
+    "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
+    "230": [0, 0.43056, 0.07514, 0, 0.71555],
+    "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
+    "305": [0, 0.43056, 0, 0.02778, 0.32246],
+    "338": [0, 0.68333, 0.12028, 0, 0.98499],
+    "339": [0, 0.43056, 0.07514, 0, 0.71555],
+    "567": [0.19444, 0.43056, 0, 0.08334, 0.38403],
+    "710": [0, 0.69444, 0.06646, 0, 0.51111],
+    "711": [0, 0.62847, 0.08295, 0, 0.51111],
+    "713": [0, 0.56167, 0.10333, 0, 0.51111],
+    "714": [0, 0.69444, 0.09694, 0, 0.51111],
+    "715": [0, 0.69444, 0, 0, 0.51111],
+    "728": [0, 0.69444, 0.10806, 0, 0.51111],
+    "729": [0, 0.66786, 0.11752, 0, 0.30667],
+    "730": [0, 0.69444, 0, 0, 0.83129],
+    "732": [0, 0.66786, 0.11585, 0, 0.51111],
+    "733": [0, 0.69444, 0.1225, 0, 0.51111],
+    "915": [0, 0.68333, 0.13305, 0, 0.62722],
+    "916": [0, 0.68333, 0, 0, 0.81777],
+    "920": [0, 0.68333, 0.09403, 0, 0.76666],
+    "923": [0, 0.68333, 0, 0, 0.69222],
+    "926": [0, 0.68333, 0.15294, 0, 0.66444],
+    "928": [0, 0.68333, 0.16389, 0, 0.74333],
+    "931": [0, 0.68333, 0.12028, 0, 0.71555],
+    "933": [0, 0.68333, 0.11111, 0, 0.76666],
+    "934": [0, 0.68333, 0.05986, 0, 0.71555],
+    "936": [0, 0.68333, 0.11111, 0, 0.76666],
+    "937": [0, 0.68333, 0.10257, 0, 0.71555],
+    "8211": [0, 0.43056, 0.09208, 0, 0.51111],
+    "8212": [0, 0.43056, 0.09208, 0, 1.02222],
+    "8216": [0, 0.69444, 0.12417, 0, 0.30667],
+    "8217": [0, 0.69444, 0.12417, 0, 0.30667],
+    "8220": [0, 0.69444, 0.1685, 0, 0.51444],
+    "8221": [0, 0.69444, 0.06961, 0, 0.51444],
+    "8463": [0, 0.68889, 0, 0, 0.54028]
+  },
+  "Main-Regular": {
+    "32": [0, 0, 0, 0, 0.25],
+    "33": [0, 0.69444, 0, 0, 0.27778],
+    "34": [0, 0.69444, 0, 0, 0.5],
+    "35": [0.19444, 0.69444, 0, 0, 0.83334],
+    "36": [0.05556, 0.75, 0, 0, 0.5],
+    "37": [0.05556, 0.75, 0, 0, 0.83334],
+    "38": [0, 0.69444, 0, 0, 0.77778],
+    "39": [0, 0.69444, 0, 0, 0.27778],
+    "40": [0.25, 0.75, 0, 0, 0.38889],
+    "41": [0.25, 0.75, 0, 0, 0.38889],
+    "42": [0, 0.75, 0, 0, 0.5],
+    "43": [0.08333, 0.58333, 0, 0, 0.77778],
+    "44": [0.19444, 0.10556, 0, 0, 0.27778],
+    "45": [0, 0.43056, 0, 0, 0.33333],
+    "46": [0, 0.10556, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0, 0, 0.5],
+    "48": [0, 0.64444, 0, 0, 0.5],
+    "49": [0, 0.64444, 0, 0, 0.5],
+    "50": [0, 0.64444, 0, 0, 0.5],
+    "51": [0, 0.64444, 0, 0, 0.5],
+    "52": [0, 0.64444, 0, 0, 0.5],
+    "53": [0, 0.64444, 0, 0, 0.5],
+    "54": [0, 0.64444, 0, 0, 0.5],
+    "55": [0, 0.64444, 0, 0, 0.5],
+    "56": [0, 0.64444, 0, 0, 0.5],
+    "57": [0, 0.64444, 0, 0, 0.5],
+    "58": [0, 0.43056, 0, 0, 0.27778],
+    "59": [0.19444, 0.43056, 0, 0, 0.27778],
+    "60": [0.0391, 0.5391, 0, 0, 0.77778],
+    "61": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "62": [0.0391, 0.5391, 0, 0, 0.77778],
+    "63": [0, 0.69444, 0, 0, 0.47222],
+    "64": [0, 0.69444, 0, 0, 0.77778],
+    "65": [0, 0.68333, 0, 0, 0.75],
+    "66": [0, 0.68333, 0, 0, 0.70834],
+    "67": [0, 0.68333, 0, 0, 0.72222],
+    "68": [0, 0.68333, 0, 0, 0.76389],
+    "69": [0, 0.68333, 0, 0, 0.68056],
+    "70": [0, 0.68333, 0, 0, 0.65278],
+    "71": [0, 0.68333, 0, 0, 0.78472],
+    "72": [0, 0.68333, 0, 0, 0.75],
+    "73": [0, 0.68333, 0, 0, 0.36111],
+    "74": [0, 0.68333, 0, 0, 0.51389],
+    "75": [0, 0.68333, 0, 0, 0.77778],
+    "76": [0, 0.68333, 0, 0, 0.625],
+    "77": [0, 0.68333, 0, 0, 0.91667],
+    "78": [0, 0.68333, 0, 0, 0.75],
+    "79": [0, 0.68333, 0, 0, 0.77778],
+    "80": [0, 0.68333, 0, 0, 0.68056],
+    "81": [0.19444, 0.68333, 0, 0, 0.77778],
+    "82": [0, 0.68333, 0, 0, 0.73611],
+    "83": [0, 0.68333, 0, 0, 0.55556],
+    "84": [0, 0.68333, 0, 0, 0.72222],
+    "85": [0, 0.68333, 0, 0, 0.75],
+    "86": [0, 0.68333, 0.01389, 0, 0.75],
+    "87": [0, 0.68333, 0.01389, 0, 1.02778],
+    "88": [0, 0.68333, 0, 0, 0.75],
+    "89": [0, 0.68333, 0.025, 0, 0.75],
+    "90": [0, 0.68333, 0, 0, 0.61111],
+    "91": [0.25, 0.75, 0, 0, 0.27778],
+    "92": [0.25, 0.75, 0, 0, 0.5],
+    "93": [0.25, 0.75, 0, 0, 0.27778],
+    "94": [0, 0.69444, 0, 0, 0.5],
+    "95": [0.31, 0.12056, 0.02778, 0, 0.5],
+    "97": [0, 0.43056, 0, 0, 0.5],
+    "98": [0, 0.69444, 0, 0, 0.55556],
+    "99": [0, 0.43056, 0, 0, 0.44445],
+    "100": [0, 0.69444, 0, 0, 0.55556],
+    "101": [0, 0.43056, 0, 0, 0.44445],
+    "102": [0, 0.69444, 0.07778, 0, 0.30556],
+    "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
+    "104": [0, 0.69444, 0, 0, 0.55556],
+    "105": [0, 0.66786, 0, 0, 0.27778],
+    "106": [0.19444, 0.66786, 0, 0, 0.30556],
+    "107": [0, 0.69444, 0, 0, 0.52778],
+    "108": [0, 0.69444, 0, 0, 0.27778],
+    "109": [0, 0.43056, 0, 0, 0.83334],
+    "110": [0, 0.43056, 0, 0, 0.55556],
+    "111": [0, 0.43056, 0, 0, 0.5],
+    "112": [0.19444, 0.43056, 0, 0, 0.55556],
+    "113": [0.19444, 0.43056, 0, 0, 0.52778],
+    "114": [0, 0.43056, 0, 0, 0.39167],
+    "115": [0, 0.43056, 0, 0, 0.39445],
+    "116": [0, 0.61508, 0, 0, 0.38889],
+    "117": [0, 0.43056, 0, 0, 0.55556],
+    "118": [0, 0.43056, 0.01389, 0, 0.52778],
+    "119": [0, 0.43056, 0.01389, 0, 0.72222],
+    "120": [0, 0.43056, 0, 0, 0.52778],
+    "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
+    "122": [0, 0.43056, 0, 0, 0.44445],
+    "123": [0.25, 0.75, 0, 0, 0.5],
+    "124": [0.25, 0.75, 0, 0, 0.27778],
+    "125": [0.25, 0.75, 0, 0, 0.5],
+    "126": [0.35, 0.31786, 0, 0, 0.5],
+    "160": [0, 0, 0, 0, 0.25],
+    "167": [0.19444, 0.69444, 0, 0, 0.44445],
+    "168": [0, 0.66786, 0, 0, 0.5],
+    "172": [0, 0.43056, 0, 0, 0.66667],
+    "176": [0, 0.69444, 0, 0, 0.75],
+    "177": [0.08333, 0.58333, 0, 0, 0.77778],
+    "182": [0.19444, 0.69444, 0, 0, 0.61111],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "198": [0, 0.68333, 0, 0, 0.90278],
+    "215": [0.08333, 0.58333, 0, 0, 0.77778],
+    "216": [0.04861, 0.73194, 0, 0, 0.77778],
+    "223": [0, 0.69444, 0, 0, 0.5],
+    "230": [0, 0.43056, 0, 0, 0.72222],
+    "247": [0.08333, 0.58333, 0, 0, 0.77778],
+    "248": [0.09722, 0.52778, 0, 0, 0.5],
+    "305": [0, 0.43056, 0, 0, 0.27778],
+    "338": [0, 0.68333, 0, 0, 1.01389],
+    "339": [0, 0.43056, 0, 0, 0.77778],
+    "567": [0.19444, 0.43056, 0, 0, 0.30556],
+    "710": [0, 0.69444, 0, 0, 0.5],
+    "711": [0, 0.62847, 0, 0, 0.5],
+    "713": [0, 0.56778, 0, 0, 0.5],
+    "714": [0, 0.69444, 0, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0, 0, 0.5],
+    "729": [0, 0.66786, 0, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.75],
+    "732": [0, 0.66786, 0, 0, 0.5],
+    "733": [0, 0.69444, 0, 0, 0.5],
+    "915": [0, 0.68333, 0, 0, 0.625],
+    "916": [0, 0.68333, 0, 0, 0.83334],
+    "920": [0, 0.68333, 0, 0, 0.77778],
+    "923": [0, 0.68333, 0, 0, 0.69445],
+    "926": [0, 0.68333, 0, 0, 0.66667],
+    "928": [0, 0.68333, 0, 0, 0.75],
+    "931": [0, 0.68333, 0, 0, 0.72222],
+    "933": [0, 0.68333, 0, 0, 0.77778],
+    "934": [0, 0.68333, 0, 0, 0.72222],
+    "936": [0, 0.68333, 0, 0, 0.77778],
+    "937": [0, 0.68333, 0, 0, 0.72222],
+    "8211": [0, 0.43056, 0.02778, 0, 0.5],
+    "8212": [0, 0.43056, 0.02778, 0, 1.0],
+    "8216": [0, 0.69444, 0, 0, 0.27778],
+    "8217": [0, 0.69444, 0, 0, 0.27778],
+    "8220": [0, 0.69444, 0, 0, 0.5],
+    "8221": [0, 0.69444, 0, 0, 0.5],
+    "8224": [0.19444, 0.69444, 0, 0, 0.44445],
+    "8225": [0.19444, 0.69444, 0, 0, 0.44445],
+    "8230": [0, 0.12, 0, 0, 1.172],
+    "8242": [0, 0.55556, 0, 0, 0.275],
+    "8407": [0, 0.71444, 0.15382, 0, 0.5],
+    "8463": [0, 0.68889, 0, 0, 0.54028],
+    "8465": [0, 0.69444, 0, 0, 0.72222],
+    "8467": [0, 0.69444, 0, 0.11111, 0.41667],
+    "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
+    "8476": [0, 0.69444, 0, 0, 0.72222],
+    "8501": [0, 0.69444, 0, 0, 0.61111],
+    "8592": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8593": [0.19444, 0.69444, 0, 0, 0.5],
+    "8594": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8595": [0.19444, 0.69444, 0, 0, 0.5],
+    "8596": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8597": [0.25, 0.75, 0, 0, 0.5],
+    "8598": [0.19444, 0.69444, 0, 0, 1.0],
+    "8599": [0.19444, 0.69444, 0, 0, 1.0],
+    "8600": [0.19444, 0.69444, 0, 0, 1.0],
+    "8601": [0.19444, 0.69444, 0, 0, 1.0],
+    "8614": [0.011, 0.511, 0, 0, 1.0],
+    "8617": [0.011, 0.511, 0, 0, 1.126],
+    "8618": [0.011, 0.511, 0, 0, 1.126],
+    "8636": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8637": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8640": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8641": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8652": [0.011, 0.671, 0, 0, 1.0],
+    "8656": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8657": [0.19444, 0.69444, 0, 0, 0.61111],
+    "8658": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8659": [0.19444, 0.69444, 0, 0, 0.61111],
+    "8660": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8661": [0.25, 0.75, 0, 0, 0.61111],
+    "8704": [0, 0.69444, 0, 0, 0.55556],
+    "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
+    "8707": [0, 0.69444, 0, 0, 0.55556],
+    "8709": [0.05556, 0.75, 0, 0, 0.5],
+    "8711": [0, 0.68333, 0, 0, 0.83334],
+    "8712": [0.0391, 0.5391, 0, 0, 0.66667],
+    "8715": [0.0391, 0.5391, 0, 0, 0.66667],
+    "8722": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8723": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8725": [0.25, 0.75, 0, 0, 0.5],
+    "8726": [0.25, 0.75, 0, 0, 0.5],
+    "8727": [-0.03472, 0.46528, 0, 0, 0.5],
+    "8728": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8729": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8730": [0.2, 0.8, 0, 0, 0.83334],
+    "8733": [0, 0.43056, 0, 0, 0.77778],
+    "8734": [0, 0.43056, 0, 0, 1.0],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8739": [0.25, 0.75, 0, 0, 0.27778],
+    "8741": [0.25, 0.75, 0, 0, 0.5],
+    "8743": [0, 0.55556, 0, 0, 0.66667],
+    "8744": [0, 0.55556, 0, 0, 0.66667],
+    "8745": [0, 0.55556, 0, 0, 0.66667],
+    "8746": [0, 0.55556, 0, 0, 0.66667],
+    "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
+    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8768": [0.19444, 0.69444, 0, 0, 0.27778],
+    "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8773": [-0.022, 0.589, 0, 0, 1.0],
+    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+    "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8784": [-0.133, 0.67, 0, 0, 0.778],
+    "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8804": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8805": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8810": [0.0391, 0.5391, 0, 0, 1.0],
+    "8811": [0.0391, 0.5391, 0, 0, 1.0],
+    "8826": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8827": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8834": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8835": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8838": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8839": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8846": [0, 0.55556, 0, 0, 0.66667],
+    "8849": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8850": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8851": [0, 0.55556, 0, 0, 0.66667],
+    "8852": [0, 0.55556, 0, 0, 0.66667],
+    "8853": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8854": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8855": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8856": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8857": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8866": [0, 0.69444, 0, 0, 0.61111],
+    "8867": [0, 0.69444, 0, 0, 0.61111],
+    "8868": [0, 0.69444, 0, 0, 0.77778],
+    "8869": [0, 0.69444, 0, 0, 0.77778],
+    "8872": [0.249, 0.75, 0, 0, 0.867],
+    "8900": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
+    "8902": [-0.03472, 0.46528, 0, 0, 0.5],
+    "8904": [0.005, 0.505, 0, 0, 0.9],
+    "8942": [0.03, 0.9, 0, 0, 0.278],
+    "8943": [-0.19, 0.31, 0, 0, 1.172],
+    "8945": [-0.1, 0.82, 0, 0, 1.282],
+    "8968": [0.25, 0.75, 0, 0, 0.44445],
+    "8969": [0.25, 0.75, 0, 0, 0.44445],
+    "8970": [0.25, 0.75, 0, 0, 0.44445],
+    "8971": [0.25, 0.75, 0, 0, 0.44445],
+    "8994": [-0.14236, 0.35764, 0, 0, 1.0],
+    "8995": [-0.14236, 0.35764, 0, 0, 1.0],
+    "9136": [0.244, 0.744, 0, 0, 0.412],
+    "9137": [0.244, 0.744, 0, 0, 0.412],
+    "9651": [0.19444, 0.69444, 0, 0, 0.88889],
+    "9657": [-0.03472, 0.46528, 0, 0, 0.5],
+    "9661": [0.19444, 0.69444, 0, 0, 0.88889],
+    "9667": [-0.03472, 0.46528, 0, 0, 0.5],
+    "9711": [0.19444, 0.69444, 0, 0, 1.0],
+    "9824": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9825": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9826": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9827": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9837": [0, 0.75, 0, 0, 0.38889],
+    "9838": [0.19444, 0.69444, 0, 0, 0.38889],
+    "9839": [0.19444, 0.69444, 0, 0, 0.38889],
+    "10216": [0.25, 0.75, 0, 0, 0.38889],
+    "10217": [0.25, 0.75, 0, 0, 0.38889],
+    "10222": [0.244, 0.744, 0, 0, 0.412],
+    "10223": [0.244, 0.744, 0, 0, 0.412],
+    "10229": [0.011, 0.511, 0, 0, 1.609],
+    "10230": [0.011, 0.511, 0, 0, 1.638],
+    "10231": [0.011, 0.511, 0, 0, 1.859],
+    "10232": [0.024, 0.525, 0, 0, 1.609],
+    "10233": [0.024, 0.525, 0, 0, 1.638],
+    "10234": [0.024, 0.525, 0, 0, 1.858],
+    "10236": [0.011, 0.511, 0, 0, 1.638],
+    "10815": [0, 0.68333, 0, 0, 0.75],
+    "10927": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10928": [0.13597, 0.63597, 0, 0, 0.77778],
+    "57376": [0.19444, 0.69444, 0, 0, 0]
+  },
+  "Math-BoldItalic": {
+    "65": [0, 0.68611, 0, 0, 0.86944],
+    "66": [0, 0.68611, 0.04835, 0, 0.8664],
+    "67": [0, 0.68611, 0.06979, 0, 0.81694],
+    "68": [0, 0.68611, 0.03194, 0, 0.93812],
+    "69": [0, 0.68611, 0.05451, 0, 0.81007],
+    "70": [0, 0.68611, 0.15972, 0, 0.68889],
+    "71": [0, 0.68611, 0, 0, 0.88673],
+    "72": [0, 0.68611, 0.08229, 0, 0.98229],
+    "73": [0, 0.68611, 0.07778, 0, 0.51111],
+    "74": [0, 0.68611, 0.10069, 0, 0.63125],
+    "75": [0, 0.68611, 0.06979, 0, 0.97118],
+    "76": [0, 0.68611, 0, 0, 0.75555],
+    "77": [0, 0.68611, 0.11424, 0, 1.14201],
+    "78": [0, 0.68611, 0.11424, 0, 0.95034],
+    "79": [0, 0.68611, 0.03194, 0, 0.83666],
+    "80": [0, 0.68611, 0.15972, 0, 0.72309],
+    "81": [0.19444, 0.68611, 0, 0, 0.86861],
+    "82": [0, 0.68611, 0.00421, 0, 0.87235],
+    "83": [0, 0.68611, 0.05382, 0, 0.69271],
+    "84": [0, 0.68611, 0.15972, 0, 0.63663],
+    "85": [0, 0.68611, 0.11424, 0, 0.80027],
+    "86": [0, 0.68611, 0.25555, 0, 0.67778],
+    "87": [0, 0.68611, 0.15972, 0, 1.09305],
+    "88": [0, 0.68611, 0.07778, 0, 0.94722],
+    "89": [0, 0.68611, 0.25555, 0, 0.67458],
+    "90": [0, 0.68611, 0.06979, 0, 0.77257],
+    "97": [0, 0.44444, 0, 0, 0.63287],
+    "98": [0, 0.69444, 0, 0, 0.52083],
+    "99": [0, 0.44444, 0, 0, 0.51342],
+    "100": [0, 0.69444, 0, 0, 0.60972],
+    "101": [0, 0.44444, 0, 0, 0.55361],
+    "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
+    "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
+    "104": [0, 0.69444, 0, 0, 0.66759],
+    "105": [0, 0.69326, 0, 0, 0.4048],
+    "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
+    "107": [0, 0.69444, 0.01852, 0, 0.6037],
+    "108": [0, 0.69444, 0.0088, 0, 0.34815],
+    "109": [0, 0.44444, 0, 0, 1.0324],
+    "110": [0, 0.44444, 0, 0, 0.71296],
+    "111": [0, 0.44444, 0, 0, 0.58472],
+    "112": [0.19444, 0.44444, 0, 0, 0.60092],
+    "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
+    "114": [0, 0.44444, 0.03194, 0, 0.5287],
+    "115": [0, 0.44444, 0, 0, 0.53125],
+    "116": [0, 0.63492, 0, 0, 0.41528],
+    "117": [0, 0.44444, 0, 0, 0.68102],
+    "118": [0, 0.44444, 0.03704, 0, 0.56666],
+    "119": [0, 0.44444, 0.02778, 0, 0.83148],
+    "120": [0, 0.44444, 0, 0, 0.65903],
+    "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
+    "122": [0, 0.44444, 0.04213, 0, 0.55509],
+    "915": [0, 0.68611, 0.15972, 0, 0.65694],
+    "916": [0, 0.68611, 0, 0, 0.95833],
+    "920": [0, 0.68611, 0.03194, 0, 0.86722],
+    "923": [0, 0.68611, 0, 0, 0.80555],
+    "926": [0, 0.68611, 0.07458, 0, 0.84125],
+    "928": [0, 0.68611, 0.08229, 0, 0.98229],
+    "931": [0, 0.68611, 0.05451, 0, 0.88507],
+    "933": [0, 0.68611, 0.15972, 0, 0.67083],
+    "934": [0, 0.68611, 0, 0, 0.76666],
+    "936": [0, 0.68611, 0.11653, 0, 0.71402],
+    "937": [0, 0.68611, 0.04835, 0, 0.8789],
+    "945": [0, 0.44444, 0, 0, 0.76064],
+    "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
+    "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
+    "948": [0, 0.69444, 0.03819, 0, 0.52222],
+    "949": [0, 0.44444, 0, 0, 0.52882],
+    "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
+    "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
+    "952": [0, 0.69444, 0.03194, 0, 0.5618],
+    "953": [0, 0.44444, 0, 0, 0.41204],
+    "954": [0, 0.44444, 0, 0, 0.66759],
+    "955": [0, 0.69444, 0, 0, 0.67083],
+    "956": [0.19444, 0.44444, 0, 0, 0.70787],
+    "957": [0, 0.44444, 0.06898, 0, 0.57685],
+    "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
+    "959": [0, 0.44444, 0, 0, 0.58472],
+    "960": [0, 0.44444, 0.03704, 0, 0.68241],
+    "961": [0.19444, 0.44444, 0, 0, 0.6118],
+    "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
+    "963": [0, 0.44444, 0.03704, 0, 0.68588],
+    "964": [0, 0.44444, 0.13472, 0, 0.52083],
+    "965": [0, 0.44444, 0.03704, 0, 0.63055],
+    "966": [0.19444, 0.44444, 0, 0, 0.74722],
+    "967": [0.19444, 0.44444, 0, 0, 0.71805],
+    "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
+    "969": [0, 0.44444, 0.03704, 0, 0.71782],
+    "977": [0, 0.69444, 0, 0, 0.69155],
+    "981": [0.19444, 0.69444, 0, 0, 0.7125],
+    "982": [0, 0.44444, 0.03194, 0, 0.975],
+    "1009": [0.19444, 0.44444, 0, 0, 0.6118],
+    "1013": [0, 0.44444, 0, 0, 0.48333]
+  },
+  "Math-Italic": {
+    "65": [0, 0.68333, 0, 0.13889, 0.75],
+    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
+    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
+    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
+    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
+    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
+    "71": [0, 0.68333, 0, 0.08334, 0.78625],
+    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
+    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
+    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
+    "76": [0, 0.68333, 0, 0.02778, 0.68056],
+    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
+    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
+    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
+    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
+    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
+    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
+    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
+    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
+    "86": [0, 0.68333, 0.22222, 0, 0.58333],
+    "87": [0, 0.68333, 0.13889, 0, 0.94445],
+    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
+    "89": [0, 0.68333, 0.22222, 0, 0.58056],
+    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
+    "97": [0, 0.43056, 0, 0, 0.52859],
+    "98": [0, 0.69444, 0, 0, 0.42917],
+    "99": [0, 0.43056, 0, 0.05556, 0.43276],
+    "100": [0, 0.69444, 0, 0.16667, 0.52049],
+    "101": [0, 0.43056, 0, 0.05556, 0.46563],
+    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+    "104": [0, 0.69444, 0, 0, 0.57616],
+    "105": [0, 0.65952, 0, 0, 0.34451],
+    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
+    "107": [0, 0.69444, 0.03148, 0, 0.5206],
+    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
+    "109": [0, 0.43056, 0, 0, 0.87801],
+    "110": [0, 0.43056, 0, 0, 0.60023],
+    "111": [0, 0.43056, 0, 0.05556, 0.48472],
+    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
+    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
+    "115": [0, 0.43056, 0, 0.05556, 0.46875],
+    "116": [0, 0.61508, 0, 0.08334, 0.36111],
+    "117": [0, 0.43056, 0, 0.02778, 0.57246],
+    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
+    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
+    "120": [0, 0.43056, 0, 0.02778, 0.57153],
+    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
+    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
+    "916": [0, 0.68333, 0, 0.16667, 0.83334],
+    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "923": [0, 0.68333, 0, 0.16667, 0.69445],
+    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
+    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
+    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
+    "934": [0, 0.68333, 0, 0.08334, 0.66667],
+    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
+    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
+    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
+    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
+    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
+    "949": [0, 0.43056, 0, 0.08334, 0.46632],
+    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
+    "953": [0, 0.43056, 0, 0.05556, 0.35394],
+    "954": [0, 0.43056, 0, 0, 0.57616],
+    "955": [0, 0.69444, 0, 0, 0.58334],
+    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
+    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
+    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+    "959": [0, 0.43056, 0, 0.05556, 0.48472],
+    "960": [0, 0.43056, 0.03588, 0, 0.57003],
+    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+    "963": [0, 0.43056, 0.03588, 0, 0.57141],
+    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
+    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
+    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
+    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
+    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+    "969": [0, 0.43056, 0.03588, 0, 0.62245],
+    "977": [0, 0.69444, 0, 0.08334, 0.59144],
+    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
+    "982": [0, 0.43056, 0.02778, 0, 0.82813],
+    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
+  },
+  "Math-Regular": {
+    "65": [0, 0.68333, 0, 0.13889, 0.75],
+    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
+    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
+    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
+    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
+    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
+    "71": [0, 0.68333, 0, 0.08334, 0.78625],
+    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
+    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
+    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
+    "76": [0, 0.68333, 0, 0.02778, 0.68056],
+    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
+    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
+    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
+    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
+    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
+    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
+    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
+    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
+    "86": [0, 0.68333, 0.22222, 0, 0.58333],
+    "87": [0, 0.68333, 0.13889, 0, 0.94445],
+    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
+    "89": [0, 0.68333, 0.22222, 0, 0.58056],
+    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
+    "97": [0, 0.43056, 0, 0, 0.52859],
+    "98": [0, 0.69444, 0, 0, 0.42917],
+    "99": [0, 0.43056, 0, 0.05556, 0.43276],
+    "100": [0, 0.69444, 0, 0.16667, 0.52049],
+    "101": [0, 0.43056, 0, 0.05556, 0.46563],
+    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+    "104": [0, 0.69444, 0, 0, 0.57616],
+    "105": [0, 0.65952, 0, 0, 0.34451],
+    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
+    "107": [0, 0.69444, 0.03148, 0, 0.5206],
+    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
+    "109": [0, 0.43056, 0, 0, 0.87801],
+    "110": [0, 0.43056, 0, 0, 0.60023],
+    "111": [0, 0.43056, 0, 0.05556, 0.48472],
+    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
+    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
+    "115": [0, 0.43056, 0, 0.05556, 0.46875],
+    "116": [0, 0.61508, 0, 0.08334, 0.36111],
+    "117": [0, 0.43056, 0, 0.02778, 0.57246],
+    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
+    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
+    "120": [0, 0.43056, 0, 0.02778, 0.57153],
+    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
+    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
+    "916": [0, 0.68333, 0, 0.16667, 0.83334],
+    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "923": [0, 0.68333, 0, 0.16667, 0.69445],
+    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
+    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
+    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
+    "934": [0, 0.68333, 0, 0.08334, 0.66667],
+    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
+    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
+    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
+    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
+    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
+    "949": [0, 0.43056, 0, 0.08334, 0.46632],
+    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
+    "953": [0, 0.43056, 0, 0.05556, 0.35394],
+    "954": [0, 0.43056, 0, 0, 0.57616],
+    "955": [0, 0.69444, 0, 0, 0.58334],
+    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
+    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
+    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+    "959": [0, 0.43056, 0, 0.05556, 0.48472],
+    "960": [0, 0.43056, 0.03588, 0, 0.57003],
+    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+    "963": [0, 0.43056, 0.03588, 0, 0.57141],
+    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
+    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
+    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
+    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
+    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+    "969": [0, 0.43056, 0.03588, 0, 0.62245],
+    "977": [0, 0.69444, 0, 0.08334, 0.59144],
+    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
+    "982": [0, 0.43056, 0.02778, 0, 0.82813],
+    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
+  },
+  "SansSerif-Bold": {
+    "33": [0, 0.69444, 0, 0, 0.36667],
+    "34": [0, 0.69444, 0, 0, 0.55834],
+    "35": [0.19444, 0.69444, 0, 0, 0.91667],
+    "36": [0.05556, 0.75, 0, 0, 0.55],
+    "37": [0.05556, 0.75, 0, 0, 1.02912],
+    "38": [0, 0.69444, 0, 0, 0.83056],
+    "39": [0, 0.69444, 0, 0, 0.30556],
+    "40": [0.25, 0.75, 0, 0, 0.42778],
+    "41": [0.25, 0.75, 0, 0, 0.42778],
+    "42": [0, 0.75, 0, 0, 0.55],
+    "43": [0.11667, 0.61667, 0, 0, 0.85556],
+    "44": [0.10556, 0.13056, 0, 0, 0.30556],
+    "45": [0, 0.45833, 0, 0, 0.36667],
+    "46": [0, 0.13056, 0, 0, 0.30556],
+    "47": [0.25, 0.75, 0, 0, 0.55],
+    "48": [0, 0.69444, 0, 0, 0.55],
+    "49": [0, 0.69444, 0, 0, 0.55],
+    "50": [0, 0.69444, 0, 0, 0.55],
+    "51": [0, 0.69444, 0, 0, 0.55],
+    "52": [0, 0.69444, 0, 0, 0.55],
+    "53": [0, 0.69444, 0, 0, 0.55],
+    "54": [0, 0.69444, 0, 0, 0.55],
+    "55": [0, 0.69444, 0, 0, 0.55],
+    "56": [0, 0.69444, 0, 0, 0.55],
+    "57": [0, 0.69444, 0, 0, 0.55],
+    "58": [0, 0.45833, 0, 0, 0.30556],
+    "59": [0.10556, 0.45833, 0, 0, 0.30556],
+    "61": [-0.09375, 0.40625, 0, 0, 0.85556],
+    "63": [0, 0.69444, 0, 0, 0.51945],
+    "64": [0, 0.69444, 0, 0, 0.73334],
+    "65": [0, 0.69444, 0, 0, 0.73334],
+    "66": [0, 0.69444, 0, 0, 0.73334],
+    "67": [0, 0.69444, 0, 0, 0.70278],
+    "68": [0, 0.69444, 0, 0, 0.79445],
+    "69": [0, 0.69444, 0, 0, 0.64167],
+    "70": [0, 0.69444, 0, 0, 0.61111],
+    "71": [0, 0.69444, 0, 0, 0.73334],
+    "72": [0, 0.69444, 0, 0, 0.79445],
+    "73": [0, 0.69444, 0, 0, 0.33056],
+    "74": [0, 0.69444, 0, 0, 0.51945],
+    "75": [0, 0.69444, 0, 0, 0.76389],
+    "76": [0, 0.69444, 0, 0, 0.58056],
+    "77": [0, 0.69444, 0, 0, 0.97778],
+    "78": [0, 0.69444, 0, 0, 0.79445],
+    "79": [0, 0.69444, 0, 0, 0.79445],
+    "80": [0, 0.69444, 0, 0, 0.70278],
+    "81": [0.10556, 0.69444, 0, 0, 0.79445],
+    "82": [0, 0.69444, 0, 0, 0.70278],
+    "83": [0, 0.69444, 0, 0, 0.61111],
+    "84": [0, 0.69444, 0, 0, 0.73334],
+    "85": [0, 0.69444, 0, 0, 0.76389],
+    "86": [0, 0.69444, 0.01528, 0, 0.73334],
+    "87": [0, 0.69444, 0.01528, 0, 1.03889],
+    "88": [0, 0.69444, 0, 0, 0.73334],
+    "89": [0, 0.69444, 0.0275, 0, 0.73334],
+    "90": [0, 0.69444, 0, 0, 0.67223],
+    "91": [0.25, 0.75, 0, 0, 0.34306],
+    "93": [0.25, 0.75, 0, 0, 0.34306],
+    "94": [0, 0.69444, 0, 0, 0.55],
+    "95": [0.35, 0.10833, 0.03056, 0, 0.55],
+    "97": [0, 0.45833, 0, 0, 0.525],
+    "98": [0, 0.69444, 0, 0, 0.56111],
+    "99": [0, 0.45833, 0, 0, 0.48889],
+    "100": [0, 0.69444, 0, 0, 0.56111],
+    "101": [0, 0.45833, 0, 0, 0.51111],
+    "102": [0, 0.69444, 0.07639, 0, 0.33611],
+    "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
+    "104": [0, 0.69444, 0, 0, 0.56111],
+    "105": [0, 0.69444, 0, 0, 0.25556],
+    "106": [0.19444, 0.69444, 0, 0, 0.28611],
+    "107": [0, 0.69444, 0, 0, 0.53056],
+    "108": [0, 0.69444, 0, 0, 0.25556],
+    "109": [0, 0.45833, 0, 0, 0.86667],
+    "110": [0, 0.45833, 0, 0, 0.56111],
+    "111": [0, 0.45833, 0, 0, 0.55],
+    "112": [0.19444, 0.45833, 0, 0, 0.56111],
+    "113": [0.19444, 0.45833, 0, 0, 0.56111],
+    "114": [0, 0.45833, 0.01528, 0, 0.37222],
+    "115": [0, 0.45833, 0, 0, 0.42167],
+    "116": [0, 0.58929, 0, 0, 0.40417],
+    "117": [0, 0.45833, 0, 0, 0.56111],
+    "118": [0, 0.45833, 0.01528, 0, 0.5],
+    "119": [0, 0.45833, 0.01528, 0, 0.74445],
+    "120": [0, 0.45833, 0, 0, 0.5],
+    "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
+    "122": [0, 0.45833, 0, 0, 0.47639],
+    "126": [0.35, 0.34444, 0, 0, 0.55],
+    "168": [0, 0.69444, 0, 0, 0.55],
+    "176": [0, 0.69444, 0, 0, 0.73334],
+    "180": [0, 0.69444, 0, 0, 0.55],
+    "184": [0.17014, 0, 0, 0, 0.48889],
+    "305": [0, 0.45833, 0, 0, 0.25556],
+    "567": [0.19444, 0.45833, 0, 0, 0.28611],
+    "710": [0, 0.69444, 0, 0, 0.55],
+    "711": [0, 0.63542, 0, 0, 0.55],
+    "713": [0, 0.63778, 0, 0, 0.55],
+    "728": [0, 0.69444, 0, 0, 0.55],
+    "729": [0, 0.69444, 0, 0, 0.30556],
+    "730": [0, 0.69444, 0, 0, 0.73334],
+    "732": [0, 0.69444, 0, 0, 0.55],
+    "733": [0, 0.69444, 0, 0, 0.55],
+    "915": [0, 0.69444, 0, 0, 0.58056],
+    "916": [0, 0.69444, 0, 0, 0.91667],
+    "920": [0, 0.69444, 0, 0, 0.85556],
+    "923": [0, 0.69444, 0, 0, 0.67223],
+    "926": [0, 0.69444, 0, 0, 0.73334],
+    "928": [0, 0.69444, 0, 0, 0.79445],
+    "931": [0, 0.69444, 0, 0, 0.79445],
+    "933": [0, 0.69444, 0, 0, 0.85556],
+    "934": [0, 0.69444, 0, 0, 0.79445],
+    "936": [0, 0.69444, 0, 0, 0.85556],
+    "937": [0, 0.69444, 0, 0, 0.79445],
+    "8211": [0, 0.45833, 0.03056, 0, 0.55],
+    "8212": [0, 0.45833, 0.03056, 0, 1.10001],
+    "8216": [0, 0.69444, 0, 0, 0.30556],
+    "8217": [0, 0.69444, 0, 0, 0.30556],
+    "8220": [0, 0.69444, 0, 0, 0.55834],
+    "8221": [0, 0.69444, 0, 0, 0.55834]
+  },
+  "SansSerif-Italic": {
+    "33": [0, 0.69444, 0.05733, 0, 0.31945],
+    "34": [0, 0.69444, 0.00316, 0, 0.5],
+    "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
+    "36": [0.05556, 0.75, 0.11156, 0, 0.5],
+    "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
+    "38": [0, 0.69444, 0.03058, 0, 0.75834],
+    "39": [0, 0.69444, 0.07816, 0, 0.27778],
+    "40": [0.25, 0.75, 0.13164, 0, 0.38889],
+    "41": [0.25, 0.75, 0.02536, 0, 0.38889],
+    "42": [0, 0.75, 0.11775, 0, 0.5],
+    "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
+    "44": [0.125, 0.08333, 0, 0, 0.27778],
+    "45": [0, 0.44444, 0.01946, 0, 0.33333],
+    "46": [0, 0.08333, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0.13164, 0, 0.5],
+    "48": [0, 0.65556, 0.11156, 0, 0.5],
+    "49": [0, 0.65556, 0.11156, 0, 0.5],
+    "50": [0, 0.65556, 0.11156, 0, 0.5],
+    "51": [0, 0.65556, 0.11156, 0, 0.5],
+    "52": [0, 0.65556, 0.11156, 0, 0.5],
+    "53": [0, 0.65556, 0.11156, 0, 0.5],
+    "54": [0, 0.65556, 0.11156, 0, 0.5],
+    "55": [0, 0.65556, 0.11156, 0, 0.5],
+    "56": [0, 0.65556, 0.11156, 0, 0.5],
+    "57": [0, 0.65556, 0.11156, 0, 0.5],
+    "58": [0, 0.44444, 0.02502, 0, 0.27778],
+    "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
+    "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
+    "63": [0, 0.69444, 0.11809, 0, 0.47222],
+    "64": [0, 0.69444, 0.07555, 0, 0.66667],
+    "65": [0, 0.69444, 0, 0, 0.66667],
+    "66": [0, 0.69444, 0.08293, 0, 0.66667],
+    "67": [0, 0.69444, 0.11983, 0, 0.63889],
+    "68": [0, 0.69444, 0.07555, 0, 0.72223],
+    "69": [0, 0.69444, 0.11983, 0, 0.59722],
+    "70": [0, 0.69444, 0.13372, 0, 0.56945],
+    "71": [0, 0.69444, 0.11983, 0, 0.66667],
+    "72": [0, 0.69444, 0.08094, 0, 0.70834],
+    "73": [0, 0.69444, 0.13372, 0, 0.27778],
+    "74": [0, 0.69444, 0.08094, 0, 0.47222],
+    "75": [0, 0.69444, 0.11983, 0, 0.69445],
+    "76": [0, 0.69444, 0, 0, 0.54167],
+    "77": [0, 0.69444, 0.08094, 0, 0.875],
+    "78": [0, 0.69444, 0.08094, 0, 0.70834],
+    "79": [0, 0.69444, 0.07555, 0, 0.73611],
+    "80": [0, 0.69444, 0.08293, 0, 0.63889],
+    "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
+    "82": [0, 0.69444, 0.08293, 0, 0.64584],
+    "83": [0, 0.69444, 0.09205, 0, 0.55556],
+    "84": [0, 0.69444, 0.13372, 0, 0.68056],
+    "85": [0, 0.69444, 0.08094, 0, 0.6875],
+    "86": [0, 0.69444, 0.1615, 0, 0.66667],
+    "87": [0, 0.69444, 0.1615, 0, 0.94445],
+    "88": [0, 0.69444, 0.13372, 0, 0.66667],
+    "89": [0, 0.69444, 0.17261, 0, 0.66667],
+    "90": [0, 0.69444, 0.11983, 0, 0.61111],
+    "91": [0.25, 0.75, 0.15942, 0, 0.28889],
+    "93": [0.25, 0.75, 0.08719, 0, 0.28889],
+    "94": [0, 0.69444, 0.0799, 0, 0.5],
+    "95": [0.35, 0.09444, 0.08616, 0, 0.5],
+    "97": [0, 0.44444, 0.00981, 0, 0.48056],
+    "98": [0, 0.69444, 0.03057, 0, 0.51667],
+    "99": [0, 0.44444, 0.08336, 0, 0.44445],
+    "100": [0, 0.69444, 0.09483, 0, 0.51667],
+    "101": [0, 0.44444, 0.06778, 0, 0.44445],
+    "102": [0, 0.69444, 0.21705, 0, 0.30556],
+    "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
+    "104": [0, 0.69444, 0.01778, 0, 0.51667],
+    "105": [0, 0.67937, 0.09718, 0, 0.23889],
+    "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
+    "107": [0, 0.69444, 0.08336, 0, 0.48889],
+    "108": [0, 0.69444, 0.09483, 0, 0.23889],
+    "109": [0, 0.44444, 0.01778, 0, 0.79445],
+    "110": [0, 0.44444, 0.01778, 0, 0.51667],
+    "111": [0, 0.44444, 0.06613, 0, 0.5],
+    "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
+    "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
+    "114": [0, 0.44444, 0.10836, 0, 0.34167],
+    "115": [0, 0.44444, 0.0778, 0, 0.38333],
+    "116": [0, 0.57143, 0.07225, 0, 0.36111],
+    "117": [0, 0.44444, 0.04169, 0, 0.51667],
+    "118": [0, 0.44444, 0.10836, 0, 0.46111],
+    "119": [0, 0.44444, 0.10836, 0, 0.68334],
+    "120": [0, 0.44444, 0.09169, 0, 0.46111],
+    "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
+    "122": [0, 0.44444, 0.08752, 0, 0.43472],
+    "126": [0.35, 0.32659, 0.08826, 0, 0.5],
+    "168": [0, 0.67937, 0.06385, 0, 0.5],
+    "176": [0, 0.69444, 0, 0, 0.73752],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "305": [0, 0.44444, 0.04169, 0, 0.23889],
+    "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
+    "710": [0, 0.69444, 0.0799, 0, 0.5],
+    "711": [0, 0.63194, 0.08432, 0, 0.5],
+    "713": [0, 0.60889, 0.08776, 0, 0.5],
+    "714": [0, 0.69444, 0.09205, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0.09483, 0, 0.5],
+    "729": [0, 0.67937, 0.07774, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.73752],
+    "732": [0, 0.67659, 0.08826, 0, 0.5],
+    "733": [0, 0.69444, 0.09205, 0, 0.5],
+    "915": [0, 0.69444, 0.13372, 0, 0.54167],
+    "916": [0, 0.69444, 0, 0, 0.83334],
+    "920": [0, 0.69444, 0.07555, 0, 0.77778],
+    "923": [0, 0.69444, 0, 0, 0.61111],
+    "926": [0, 0.69444, 0.12816, 0, 0.66667],
+    "928": [0, 0.69444, 0.08094, 0, 0.70834],
+    "931": [0, 0.69444, 0.11983, 0, 0.72222],
+    "933": [0, 0.69444, 0.09031, 0, 0.77778],
+    "934": [0, 0.69444, 0.04603, 0, 0.72222],
+    "936": [0, 0.69444, 0.09031, 0, 0.77778],
+    "937": [0, 0.69444, 0.08293, 0, 0.72222],
+    "8211": [0, 0.44444, 0.08616, 0, 0.5],
+    "8212": [0, 0.44444, 0.08616, 0, 1.0],
+    "8216": [0, 0.69444, 0.07816, 0, 0.27778],
+    "8217": [0, 0.69444, 0.07816, 0, 0.27778],
+    "8220": [0, 0.69444, 0.14205, 0, 0.5],
+    "8221": [0, 0.69444, 0.00316, 0, 0.5]
+  },
+  "SansSerif-Regular": {
+    "33": [0, 0.69444, 0, 0, 0.31945],
+    "34": [0, 0.69444, 0, 0, 0.5],
+    "35": [0.19444, 0.69444, 0, 0, 0.83334],
+    "36": [0.05556, 0.75, 0, 0, 0.5],
+    "37": [0.05556, 0.75, 0, 0, 0.83334],
+    "38": [0, 0.69444, 0, 0, 0.75834],
+    "39": [0, 0.69444, 0, 0, 0.27778],
+    "40": [0.25, 0.75, 0, 0, 0.38889],
+    "41": [0.25, 0.75, 0, 0, 0.38889],
+    "42": [0, 0.75, 0, 0, 0.5],
+    "43": [0.08333, 0.58333, 0, 0, 0.77778],
+    "44": [0.125, 0.08333, 0, 0, 0.27778],
+    "45": [0, 0.44444, 0, 0, 0.33333],
+    "46": [0, 0.08333, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0, 0, 0.5],
+    "48": [0, 0.65556, 0, 0, 0.5],
+    "49": [0, 0.65556, 0, 0, 0.5],
+    "50": [0, 0.65556, 0, 0, 0.5],
+    "51": [0, 0.65556, 0, 0, 0.5],
+    "52": [0, 0.65556, 0, 0, 0.5],
+    "53": [0, 0.65556, 0, 0, 0.5],
+    "54": [0, 0.65556, 0, 0, 0.5],
+    "55": [0, 0.65556, 0, 0, 0.5],
+    "56": [0, 0.65556, 0, 0, 0.5],
+    "57": [0, 0.65556, 0, 0, 0.5],
+    "58": [0, 0.44444, 0, 0, 0.27778],
+    "59": [0.125, 0.44444, 0, 0, 0.27778],
+    "61": [-0.13, 0.37, 0, 0, 0.77778],
+    "63": [0, 0.69444, 0, 0, 0.47222],
+    "64": [0, 0.69444, 0, 0, 0.66667],
+    "65": [0, 0.69444, 0, 0, 0.66667],
+    "66": [0, 0.69444, 0, 0, 0.66667],
+    "67": [0, 0.69444, 0, 0, 0.63889],
+    "68": [0, 0.69444, 0, 0, 0.72223],
+    "69": [0, 0.69444, 0, 0, 0.59722],
+    "70": [0, 0.69444, 0, 0, 0.56945],
+    "71": [0, 0.69444, 0, 0, 0.66667],
+    "72": [0, 0.69444, 0, 0, 0.70834],
+    "73": [0, 0.69444, 0, 0, 0.27778],
+    "74": [0, 0.69444, 0, 0, 0.47222],
+    "75": [0, 0.69444, 0, 0, 0.69445],
+    "76": [0, 0.69444, 0, 0, 0.54167],
+    "77": [0, 0.69444, 0, 0, 0.875],
+    "78": [0, 0.69444, 0, 0, 0.70834],
+    "79": [0, 0.69444, 0, 0, 0.73611],
+    "80": [0, 0.69444, 0, 0, 0.63889],
+    "81": [0.125, 0.69444, 0, 0, 0.73611],
+    "82": [0, 0.69444, 0, 0, 0.64584],
+    "83": [0, 0.69444, 0, 0, 0.55556],
+    "84": [0, 0.69444, 0, 0, 0.68056],
+    "85": [0, 0.69444, 0, 0, 0.6875],
+    "86": [0, 0.69444, 0.01389, 0, 0.66667],
+    "87": [0, 0.69444, 0.01389, 0, 0.94445],
+    "88": [0, 0.69444, 0, 0, 0.66667],
+    "89": [0, 0.69444, 0.025, 0, 0.66667],
+    "90": [0, 0.69444, 0, 0, 0.61111],
+    "91": [0.25, 0.75, 0, 0, 0.28889],
+    "93": [0.25, 0.75, 0, 0, 0.28889],
+    "94": [0, 0.69444, 0, 0, 0.5],
+    "95": [0.35, 0.09444, 0.02778, 0, 0.5],
+    "97": [0, 0.44444, 0, 0, 0.48056],
+    "98": [0, 0.69444, 0, 0, 0.51667],
+    "99": [0, 0.44444, 0, 0, 0.44445],
+    "100": [0, 0.69444, 0, 0, 0.51667],
+    "101": [0, 0.44444, 0, 0, 0.44445],
+    "102": [0, 0.69444, 0.06944, 0, 0.30556],
+    "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
+    "104": [0, 0.69444, 0, 0, 0.51667],
+    "105": [0, 0.67937, 0, 0, 0.23889],
+    "106": [0.19444, 0.67937, 0, 0, 0.26667],
+    "107": [0, 0.69444, 0, 0, 0.48889],
+    "108": [0, 0.69444, 0, 0, 0.23889],
+    "109": [0, 0.44444, 0, 0, 0.79445],
+    "110": [0, 0.44444, 0, 0, 0.51667],
+    "111": [0, 0.44444, 0, 0, 0.5],
+    "112": [0.19444, 0.44444, 0, 0, 0.51667],
+    "113": [0.19444, 0.44444, 0, 0, 0.51667],
+    "114": [0, 0.44444, 0.01389, 0, 0.34167],
+    "115": [0, 0.44444, 0, 0, 0.38333],
+    "116": [0, 0.57143, 0, 0, 0.36111],
+    "117": [0, 0.44444, 0, 0, 0.51667],
+    "118": [0, 0.44444, 0.01389, 0, 0.46111],
+    "119": [0, 0.44444, 0.01389, 0, 0.68334],
+    "120": [0, 0.44444, 0, 0, 0.46111],
+    "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
+    "122": [0, 0.44444, 0, 0, 0.43472],
+    "126": [0.35, 0.32659, 0, 0, 0.5],
+    "168": [0, 0.67937, 0, 0, 0.5],
+    "176": [0, 0.69444, 0, 0, 0.66667],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "305": [0, 0.44444, 0, 0, 0.23889],
+    "567": [0.19444, 0.44444, 0, 0, 0.26667],
+    "710": [0, 0.69444, 0, 0, 0.5],
+    "711": [0, 0.63194, 0, 0, 0.5],
+    "713": [0, 0.60889, 0, 0, 0.5],
+    "714": [0, 0.69444, 0, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0, 0, 0.5],
+    "729": [0, 0.67937, 0, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.66667],
+    "732": [0, 0.67659, 0, 0, 0.5],
+    "733": [0, 0.69444, 0, 0, 0.5],
+    "915": [0, 0.69444, 0, 0, 0.54167],
+    "916": [0, 0.69444, 0, 0, 0.83334],
+    "920": [0, 0.69444, 0, 0, 0.77778],
+    "923": [0, 0.69444, 0, 0, 0.61111],
+    "926": [0, 0.69444, 0, 0, 0.66667],
+    "928": [0, 0.69444, 0, 0, 0.70834],
+    "931": [0, 0.69444, 0, 0, 0.72222],
+    "933": [0, 0.69444, 0, 0, 0.77778],
+    "934": [0, 0.69444, 0, 0, 0.72222],
+    "936": [0, 0.69444, 0, 0, 0.77778],
+    "937": [0, 0.69444, 0, 0, 0.72222],
+    "8211": [0, 0.44444, 0.02778, 0, 0.5],
+    "8212": [0, 0.44444, 0.02778, 0, 1.0],
+    "8216": [0, 0.69444, 0, 0, 0.27778],
+    "8217": [0, 0.69444, 0, 0, 0.27778],
+    "8220": [0, 0.69444, 0, 0, 0.5],
+    "8221": [0, 0.69444, 0, 0, 0.5]
+  },
+  "Script-Regular": {
+    "65": [0, 0.7, 0.22925, 0, 0.80253],
+    "66": [0, 0.7, 0.04087, 0, 0.90757],
+    "67": [0, 0.7, 0.1689, 0, 0.66619],
+    "68": [0, 0.7, 0.09371, 0, 0.77443],
+    "69": [0, 0.7, 0.18583, 0, 0.56162],
+    "70": [0, 0.7, 0.13634, 0, 0.89544],
+    "71": [0, 0.7, 0.17322, 0, 0.60961],
+    "72": [0, 0.7, 0.29694, 0, 0.96919],
+    "73": [0, 0.7, 0.19189, 0, 0.80907],
+    "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
+    "75": [0, 0.7, 0.31259, 0, 0.91364],
+    "76": [0, 0.7, 0.19189, 0, 0.87373],
+    "77": [0, 0.7, 0.15981, 0, 1.08031],
+    "78": [0, 0.7, 0.3525, 0, 0.9015],
+    "79": [0, 0.7, 0.08078, 0, 0.73787],
+    "80": [0, 0.7, 0.08078, 0, 1.01262],
+    "81": [0, 0.7, 0.03305, 0, 0.88282],
+    "82": [0, 0.7, 0.06259, 0, 0.85],
+    "83": [0, 0.7, 0.19189, 0, 0.86767],
+    "84": [0, 0.7, 0.29087, 0, 0.74697],
+    "85": [0, 0.7, 0.25815, 0, 0.79996],
+    "86": [0, 0.7, 0.27523, 0, 0.62204],
+    "87": [0, 0.7, 0.27523, 0, 0.80532],
+    "88": [0, 0.7, 0.26006, 0, 0.94445],
+    "89": [0, 0.7, 0.2939, 0, 0.70961],
+    "90": [0, 0.7, 0.24037, 0, 0.8212]
+  },
+  "Size1-Regular": {
+    "40": [0.35001, 0.85, 0, 0, 0.45834],
+    "41": [0.35001, 0.85, 0, 0, 0.45834],
+    "47": [0.35001, 0.85, 0, 0, 0.57778],
+    "91": [0.35001, 0.85, 0, 0, 0.41667],
+    "92": [0.35001, 0.85, 0, 0, 0.57778],
+    "93": [0.35001, 0.85, 0, 0, 0.41667],
+    "123": [0.35001, 0.85, 0, 0, 0.58334],
+    "125": [0.35001, 0.85, 0, 0, 0.58334],
+    "710": [0, 0.72222, 0, 0, 0.55556],
+    "732": [0, 0.72222, 0, 0, 0.55556],
+    "770": [0, 0.72222, 0, 0, 0.55556],
+    "771": [0, 0.72222, 0, 0, 0.55556],
+    "8214": [-0.00099, 0.601, 0, 0, 0.77778],
+    "8593": [1e-05, 0.6, 0, 0, 0.66667],
+    "8595": [1e-05, 0.6, 0, 0, 0.66667],
+    "8657": [1e-05, 0.6, 0, 0, 0.77778],
+    "8659": [1e-05, 0.6, 0, 0, 0.77778],
+    "8719": [0.25001, 0.75, 0, 0, 0.94445],
+    "8720": [0.25001, 0.75, 0, 0, 0.94445],
+    "8721": [0.25001, 0.75, 0, 0, 1.05556],
+    "8730": [0.35001, 0.85, 0, 0, 1.0],
+    "8739": [-0.00599, 0.606, 0, 0, 0.33333],
+    "8741": [-0.00599, 0.606, 0, 0, 0.55556],
+    "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
+    "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
+    "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
+    "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
+    "8896": [0.25001, 0.75, 0, 0, 0.83334],
+    "8897": [0.25001, 0.75, 0, 0, 0.83334],
+    "8898": [0.25001, 0.75, 0, 0, 0.83334],
+    "8899": [0.25001, 0.75, 0, 0, 0.83334],
+    "8968": [0.35001, 0.85, 0, 0, 0.47222],
+    "8969": [0.35001, 0.85, 0, 0, 0.47222],
+    "8970": [0.35001, 0.85, 0, 0, 0.47222],
+    "8971": [0.35001, 0.85, 0, 0, 0.47222],
+    "9168": [-0.00099, 0.601, 0, 0, 0.66667],
+    "10216": [0.35001, 0.85, 0, 0, 0.47222],
+    "10217": [0.35001, 0.85, 0, 0, 0.47222],
+    "10752": [0.25001, 0.75, 0, 0, 1.11111],
+    "10753": [0.25001, 0.75, 0, 0, 1.11111],
+    "10754": [0.25001, 0.75, 0, 0, 1.11111],
+    "10756": [0.25001, 0.75, 0, 0, 0.83334],
+    "10758": [0.25001, 0.75, 0, 0, 0.83334]
+  },
+  "Size2-Regular": {
+    "40": [0.65002, 1.15, 0, 0, 0.59722],
+    "41": [0.65002, 1.15, 0, 0, 0.59722],
+    "47": [0.65002, 1.15, 0, 0, 0.81111],
+    "91": [0.65002, 1.15, 0, 0, 0.47222],
+    "92": [0.65002, 1.15, 0, 0, 0.81111],
+    "93": [0.65002, 1.15, 0, 0, 0.47222],
+    "123": [0.65002, 1.15, 0, 0, 0.66667],
+    "125": [0.65002, 1.15, 0, 0, 0.66667],
+    "710": [0, 0.75, 0, 0, 1.0],
+    "732": [0, 0.75, 0, 0, 1.0],
+    "770": [0, 0.75, 0, 0, 1.0],
+    "771": [0, 0.75, 0, 0, 1.0],
+    "8719": [0.55001, 1.05, 0, 0, 1.27778],
+    "8720": [0.55001, 1.05, 0, 0, 1.27778],
+    "8721": [0.55001, 1.05, 0, 0, 1.44445],
+    "8730": [0.65002, 1.15, 0, 0, 1.0],
+    "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
+    "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
+    "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
+    "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
+    "8896": [0.55001, 1.05, 0, 0, 1.11111],
+    "8897": [0.55001, 1.05, 0, 0, 1.11111],
+    "8898": [0.55001, 1.05, 0, 0, 1.11111],
+    "8899": [0.55001, 1.05, 0, 0, 1.11111],
+    "8968": [0.65002, 1.15, 0, 0, 0.52778],
+    "8969": [0.65002, 1.15, 0, 0, 0.52778],
+    "8970": [0.65002, 1.15, 0, 0, 0.52778],
+    "8971": [0.65002, 1.15, 0, 0, 0.52778],
+    "10216": [0.65002, 1.15, 0, 0, 0.61111],
+    "10217": [0.65002, 1.15, 0, 0, 0.61111],
+    "10752": [0.55001, 1.05, 0, 0, 1.51112],
+    "10753": [0.55001, 1.05, 0, 0, 1.51112],
+    "10754": [0.55001, 1.05, 0, 0, 1.51112],
+    "10756": [0.55001, 1.05, 0, 0, 1.11111],
+    "10758": [0.55001, 1.05, 0, 0, 1.11111]
+  },
+  "Size3-Regular": {
+    "40": [0.95003, 1.45, 0, 0, 0.73611],
+    "41": [0.95003, 1.45, 0, 0, 0.73611],
+    "47": [0.95003, 1.45, 0, 0, 1.04445],
+    "91": [0.95003, 1.45, 0, 0, 0.52778],
+    "92": [0.95003, 1.45, 0, 0, 1.04445],
+    "93": [0.95003, 1.45, 0, 0, 0.52778],
+    "123": [0.95003, 1.45, 0, 0, 0.75],
+    "125": [0.95003, 1.45, 0, 0, 0.75],
+    "710": [0, 0.75, 0, 0, 1.44445],
+    "732": [0, 0.75, 0, 0, 1.44445],
+    "770": [0, 0.75, 0, 0, 1.44445],
+    "771": [0, 0.75, 0, 0, 1.44445],
+    "8730": [0.95003, 1.45, 0, 0, 1.0],
+    "8968": [0.95003, 1.45, 0, 0, 0.58334],
+    "8969": [0.95003, 1.45, 0, 0, 0.58334],
+    "8970": [0.95003, 1.45, 0, 0, 0.58334],
+    "8971": [0.95003, 1.45, 0, 0, 0.58334],
+    "10216": [0.95003, 1.45, 0, 0, 0.75],
+    "10217": [0.95003, 1.45, 0, 0, 0.75]
+  },
+  "Size4-Regular": {
+    "40": [1.25003, 1.75, 0, 0, 0.79167],
+    "41": [1.25003, 1.75, 0, 0, 0.79167],
+    "47": [1.25003, 1.75, 0, 0, 1.27778],
+    "91": [1.25003, 1.75, 0, 0, 0.58334],
+    "92": [1.25003, 1.75, 0, 0, 1.27778],
+    "93": [1.25003, 1.75, 0, 0, 0.58334],
+    "123": [1.25003, 1.75, 0, 0, 0.80556],
+    "125": [1.25003, 1.75, 0, 0, 0.80556],
+    "710": [0, 0.825, 0, 0, 1.8889],
+    "732": [0, 0.825, 0, 0, 1.8889],
+    "770": [0, 0.825, 0, 0, 1.8889],
+    "771": [0, 0.825, 0, 0, 1.8889],
+    "8730": [1.25003, 1.75, 0, 0, 1.0],
+    "8968": [1.25003, 1.75, 0, 0, 0.63889],
+    "8969": [1.25003, 1.75, 0, 0, 0.63889],
+    "8970": [1.25003, 1.75, 0, 0, 0.63889],
+    "8971": [1.25003, 1.75, 0, 0, 0.63889],
+    "9115": [0.64502, 1.155, 0, 0, 0.875],
+    "9116": [1e-05, 0.6, 0, 0, 0.875],
+    "9117": [0.64502, 1.155, 0, 0, 0.875],
+    "9118": [0.64502, 1.155, 0, 0, 0.875],
+    "9119": [1e-05, 0.6, 0, 0, 0.875],
+    "9120": [0.64502, 1.155, 0, 0, 0.875],
+    "9121": [0.64502, 1.155, 0, 0, 0.66667],
+    "9122": [-0.00099, 0.601, 0, 0, 0.66667],
+    "9123": [0.64502, 1.155, 0, 0, 0.66667],
+    "9124": [0.64502, 1.155, 0, 0, 0.66667],
+    "9125": [-0.00099, 0.601, 0, 0, 0.66667],
+    "9126": [0.64502, 1.155, 0, 0, 0.66667],
+    "9127": [1e-05, 0.9, 0, 0, 0.88889],
+    "9128": [0.65002, 1.15, 0, 0, 0.88889],
+    "9129": [0.90001, 0, 0, 0, 0.88889],
+    "9130": [0, 0.3, 0, 0, 0.88889],
+    "9131": [1e-05, 0.9, 0, 0, 0.88889],
+    "9132": [0.65002, 1.15, 0, 0, 0.88889],
+    "9133": [0.90001, 0, 0, 0, 0.88889],
+    "9143": [0.88502, 0.915, 0, 0, 1.05556],
+    "10216": [1.25003, 1.75, 0, 0, 0.80556],
+    "10217": [1.25003, 1.75, 0, 0, 0.80556],
+    "57344": [-0.00499, 0.605, 0, 0, 1.05556],
+    "57345": [-0.00499, 0.605, 0, 0, 1.05556],
+    "57680": [0, 0.12, 0, 0, 0.45],
+    "57681": [0, 0.12, 0, 0, 0.45],
+    "57682": [0, 0.12, 0, 0, 0.45],
+    "57683": [0, 0.12, 0, 0, 0.45]
+  },
+  "Typewriter-Regular": {
+    "32": [0, 0, 0, 0, 0.525],
+    "33": [0, 0.61111, 0, 0, 0.525],
+    "34": [0, 0.61111, 0, 0, 0.525],
+    "35": [0, 0.61111, 0, 0, 0.525],
+    "36": [0.08333, 0.69444, 0, 0, 0.525],
+    "37": [0.08333, 0.69444, 0, 0, 0.525],
+    "38": [0, 0.61111, 0, 0, 0.525],
+    "39": [0, 0.61111, 0, 0, 0.525],
+    "40": [0.08333, 0.69444, 0, 0, 0.525],
+    "41": [0.08333, 0.69444, 0, 0, 0.525],
+    "42": [0, 0.52083, 0, 0, 0.525],
+    "43": [-0.08056, 0.53055, 0, 0, 0.525],
+    "44": [0.13889, 0.125, 0, 0, 0.525],
+    "45": [-0.08056, 0.53055, 0, 0, 0.525],
+    "46": [0, 0.125, 0, 0, 0.525],
+    "47": [0.08333, 0.69444, 0, 0, 0.525],
+    "48": [0, 0.61111, 0, 0, 0.525],
+    "49": [0, 0.61111, 0, 0, 0.525],
+    "50": [0, 0.61111, 0, 0, 0.525],
+    "51": [0, 0.61111, 0, 0, 0.525],
+    "52": [0, 0.61111, 0, 0, 0.525],
+    "53": [0, 0.61111, 0, 0, 0.525],
+    "54": [0, 0.61111, 0, 0, 0.525],
+    "55": [0, 0.61111, 0, 0, 0.525],
+    "56": [0, 0.61111, 0, 0, 0.525],
+    "57": [0, 0.61111, 0, 0, 0.525],
+    "58": [0, 0.43056, 0, 0, 0.525],
+    "59": [0.13889, 0.43056, 0, 0, 0.525],
+    "60": [-0.05556, 0.55556, 0, 0, 0.525],
+    "61": [-0.19549, 0.41562, 0, 0, 0.525],
+    "62": [-0.05556, 0.55556, 0, 0, 0.525],
+    "63": [0, 0.61111, 0, 0, 0.525],
+    "64": [0, 0.61111, 0, 0, 0.525],
+    "65": [0, 0.61111, 0, 0, 0.525],
+    "66": [0, 0.61111, 0, 0, 0.525],
+    "67": [0, 0.61111, 0, 0, 0.525],
+    "68": [0, 0.61111, 0, 0, 0.525],
+    "69": [0, 0.61111, 0, 0, 0.525],
+    "70": [0, 0.61111, 0, 0, 0.525],
+    "71": [0, 0.61111, 0, 0, 0.525],
+    "72": [0, 0.61111, 0, 0, 0.525],
+    "73": [0, 0.61111, 0, 0, 0.525],
+    "74": [0, 0.61111, 0, 0, 0.525],
+    "75": [0, 0.61111, 0, 0, 0.525],
+    "76": [0, 0.61111, 0, 0, 0.525],
+    "77": [0, 0.61111, 0, 0, 0.525],
+    "78": [0, 0.61111, 0, 0, 0.525],
+    "79": [0, 0.61111, 0, 0, 0.525],
+    "80": [0, 0.61111, 0, 0, 0.525],
+    "81": [0.13889, 0.61111, 0, 0, 0.525],
+    "82": [0, 0.61111, 0, 0, 0.525],
+    "83": [0, 0.61111, 0, 0, 0.525],
+    "84": [0, 0.61111, 0, 0, 0.525],
+    "85": [0, 0.61111, 0, 0, 0.525],
+    "86": [0, 0.61111, 0, 0, 0.525],
+    "87": [0, 0.61111, 0, 0, 0.525],
+    "88": [0, 0.61111, 0, 0, 0.525],
+    "89": [0, 0.61111, 0, 0, 0.525],
+    "90": [0, 0.61111, 0, 0, 0.525],
+    "91": [0.08333, 0.69444, 0, 0, 0.525],
+    "92": [0.08333, 0.69444, 0, 0, 0.525],
+    "93": [0.08333, 0.69444, 0, 0, 0.525],
+    "94": [0, 0.61111, 0, 0, 0.525],
+    "95": [0.09514, 0, 0, 0, 0.525],
+    "96": [0, 0.61111, 0, 0, 0.525],
+    "97": [0, 0.43056, 0, 0, 0.525],
+    "98": [0, 0.61111, 0, 0, 0.525],
+    "99": [0, 0.43056, 0, 0, 0.525],
+    "100": [0, 0.61111, 0, 0, 0.525],
+    "101": [0, 0.43056, 0, 0, 0.525],
+    "102": [0, 0.61111, 0, 0, 0.525],
+    "103": [0.22222, 0.43056, 0, 0, 0.525],
+    "104": [0, 0.61111, 0, 0, 0.525],
+    "105": [0, 0.61111, 0, 0, 0.525],
+    "106": [0.22222, 0.61111, 0, 0, 0.525],
+    "107": [0, 0.61111, 0, 0, 0.525],
+    "108": [0, 0.61111, 0, 0, 0.525],
+    "109": [0, 0.43056, 0, 0, 0.525],
+    "110": [0, 0.43056, 0, 0, 0.525],
+    "111": [0, 0.43056, 0, 0, 0.525],
+    "112": [0.22222, 0.43056, 0, 0, 0.525],
+    "113": [0.22222, 0.43056, 0, 0, 0.525],
+    "114": [0, 0.43056, 0, 0, 0.525],
+    "115": [0, 0.43056, 0, 0, 0.525],
+    "116": [0, 0.55358, 0, 0, 0.525],
+    "117": [0, 0.43056, 0, 0, 0.525],
+    "118": [0, 0.43056, 0, 0, 0.525],
+    "119": [0, 0.43056, 0, 0, 0.525],
+    "120": [0, 0.43056, 0, 0, 0.525],
+    "121": [0.22222, 0.43056, 0, 0, 0.525],
+    "122": [0, 0.43056, 0, 0, 0.525],
+    "123": [0.08333, 0.69444, 0, 0, 0.525],
+    "124": [0.08333, 0.69444, 0, 0, 0.525],
+    "125": [0.08333, 0.69444, 0, 0, 0.525],
+    "126": [0, 0.61111, 0, 0, 0.525],
+    "127": [0, 0.61111, 0, 0, 0.525],
+    "160": [0, 0, 0, 0, 0.525],
+    "176": [0, 0.61111, 0, 0, 0.525],
+    "184": [0.19445, 0, 0, 0, 0.525],
+    "305": [0, 0.43056, 0, 0, 0.525],
+    "567": [0.22222, 0.43056, 0, 0, 0.525],
+    "711": [0, 0.56597, 0, 0, 0.525],
+    "713": [0, 0.56555, 0, 0, 0.525],
+    "714": [0, 0.61111, 0, 0, 0.525],
+    "715": [0, 0.61111, 0, 0, 0.525],
+    "728": [0, 0.61111, 0, 0, 0.525],
+    "730": [0, 0.61111, 0, 0, 0.525],
+    "770": [0, 0.61111, 0, 0, 0.525],
+    "771": [0, 0.61111, 0, 0, 0.525],
+    "776": [0, 0.61111, 0, 0, 0.525],
+    "915": [0, 0.61111, 0, 0, 0.525],
+    "916": [0, 0.61111, 0, 0, 0.525],
+    "920": [0, 0.61111, 0, 0, 0.525],
+    "923": [0, 0.61111, 0, 0, 0.525],
+    "926": [0, 0.61111, 0, 0, 0.525],
+    "928": [0, 0.61111, 0, 0, 0.525],
+    "931": [0, 0.61111, 0, 0, 0.525],
+    "933": [0, 0.61111, 0, 0, 0.525],
+    "934": [0, 0.61111, 0, 0, 0.525],
+    "936": [0, 0.61111, 0, 0, 0.525],
+    "937": [0, 0.61111, 0, 0, 0.525],
+    "8216": [0, 0.61111, 0, 0, 0.525],
+    "8217": [0, 0.61111, 0, 0, 0.525],
+    "8242": [0, 0.61111, 0, 0, 0.525],
+    "9251": [0.11111, 0.21944, 0, 0, 0.525]
+  }
+});
+// CONCATENATED MODULE: ./src/fontMetrics.js
+
+
+/**
+ * This file contains metrics regarding fonts and individual symbols. The sigma
+ * and xi variables, as well as the metricMap map contain data extracted from
+ * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
+ * `metrics` variable and the getCharacterMetrics function.
+ */
+// In TeX, there are actually three sets of dimensions, one for each of
+// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
+// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are
+// provided in the the arrays below, in that order.
+//
+// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
+// This was determined by running the following script:
+//
+//     latex -interaction=nonstopmode \
+//     '\documentclass{article}\usepackage{amsmath}\begin{document}' \
+//     '$a$ \expandafter\show\the\textfont2' \
+//     '\expandafter\show\the\scriptfont2' \
+//     '\expandafter\show\the\scriptscriptfont2' \
+//     '\stop'
+//
+// The metrics themselves were retreived using the following commands:
+//
+//     tftopl cmsy10
+//     tftopl cmsy7
+//     tftopl cmsy5
+//
+// The output of each of these commands is quite lengthy.  The only part we
+// care about is the FONTDIMEN section. Each value is measured in EMs.
+var sigmasAndXis = {
+  slant: [0.250, 0.250, 0.250],
+  // sigma1
+  space: [0.000, 0.000, 0.000],
+  // sigma2
+  stretch: [0.000, 0.000, 0.000],
+  // sigma3
+  shrink: [0.000, 0.000, 0.000],
+  // sigma4
+  xHeight: [0.431, 0.431, 0.431],
+  // sigma5
+  quad: [1.000, 1.171, 1.472],
+  // sigma6
+  extraSpace: [0.000, 0.000, 0.000],
+  // sigma7
+  num1: [0.677, 0.732, 0.925],
+  // sigma8
+  num2: [0.394, 0.384, 0.387],
+  // sigma9
+  num3: [0.444, 0.471, 0.504],
+  // sigma10
+  denom1: [0.686, 0.752, 1.025],
+  // sigma11
+  denom2: [0.345, 0.344, 0.532],
+  // sigma12
+  sup1: [0.413, 0.503, 0.504],
+  // sigma13
+  sup2: [0.363, 0.431, 0.404],
+  // sigma14
+  sup3: [0.289, 0.286, 0.294],
+  // sigma15
+  sub1: [0.150, 0.143, 0.200],
+  // sigma16
+  sub2: [0.247, 0.286, 0.400],
+  // sigma17
+  supDrop: [0.386, 0.353, 0.494],
+  // sigma18
+  subDrop: [0.050, 0.071, 0.100],
+  // sigma19
+  delim1: [2.390, 1.700, 1.980],
+  // sigma20
+  delim2: [1.010, 1.157, 1.420],
+  // sigma21
+  axisHeight: [0.250, 0.250, 0.250],
+  // sigma22
+  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
+  // they correspond to the font parameters of the extension fonts (family 3).
+  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
+  // match cmex7, we'd use cmex7.tfm values for script and scriptscript
+  // values.
+  defaultRuleThickness: [0.04, 0.049, 0.049],
+  // xi8; cmex7: 0.049
+  bigOpSpacing1: [0.111, 0.111, 0.111],
+  // xi9
+  bigOpSpacing2: [0.166, 0.166, 0.166],
+  // xi10
+  bigOpSpacing3: [0.2, 0.2, 0.2],
+  // xi11
+  bigOpSpacing4: [0.6, 0.611, 0.611],
+  // xi12; cmex7: 0.611
+  bigOpSpacing5: [0.1, 0.143, 0.143],
+  // xi13; cmex7: 0.143
+  // The \sqrt rule width is taken from the height of the surd character.
+  // Since we use the same font at all sizes, this thickness doesn't scale.
+  sqrtRuleThickness: [0.04, 0.04, 0.04],
+  // This value determines how large a pt is, for metrics which are defined
+  // in terms of pts.
+  // This value is also used in katex.less; if you change it make sure the
+  // values match.
+  ptPerEm: [10.0, 10.0, 10.0],
+  // The space between adjacent `|` columns in an array definition. From
+  // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
+  doubleRuleSep: [0.2, 0.2, 0.2],
+  // The width of separator lines in {array} environments. From
+  // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
+  arrayRuleWidth: [0.04, 0.04, 0.04],
+  // Two values from LaTeX source2e:
+  fboxsep: [0.3, 0.3, 0.3],
+  //        3 pt / ptPerEm
+  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
+
+}; // This map contains a mapping from font name and character code to character
+// metrics, including height, depth, italic correction, and skew (kern from the
+// character to the corresponding \skewchar)
+// This map is generated via `make metrics`. It should not be changed manually.
+
+ // These are very rough approximations.  We default to Times New Roman which
+// should have Latin-1 and Cyrillic characters, but may not depending on the
+// operating system.  The metrics do not account for extra height from the
+// accents.  In the case of Cyrillic characters which have both ascenders and
+// descenders we prefer approximations with ascenders, primarily to prevent
+// the fraction bar or root line from intersecting the glyph.
+// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
+
+var extraCharacterMap = {
+  // Latin-1
+  'Å': 'A',
+  'Ç': 'C',
+  'Ð': 'D',
+  'Þ': 'o',
+  'å': 'a',
+  'ç': 'c',
+  'ð': 'd',
+  'þ': 'o',
+  // Cyrillic
+  'А': 'A',
+  'Б': 'B',
+  'В': 'B',
+  'Г': 'F',
+  'Д': 'A',
+  'Е': 'E',
+  'Ж': 'K',
+  'З': '3',
+  'И': 'N',
+  'Й': 'N',
+  'К': 'K',
+  'Л': 'N',
+  'М': 'M',
+  'Н': 'H',
+  'О': 'O',
+  'П': 'N',
+  'Р': 'P',
+  'С': 'C',
+  'Т': 'T',
+  'У': 'y',
+  'Ф': 'O',
+  'Х': 'X',
+  'Ц': 'U',
+  'Ч': 'h',
+  'Ш': 'W',
+  'Щ': 'W',
+  'Ъ': 'B',
+  'Ы': 'X',
+  'Ь': 'B',
+  'Э': '3',
+  'Ю': 'X',
+  'Я': 'R',
+  'а': 'a',
+  'б': 'b',
+  'в': 'a',
+  'г': 'r',
+  'д': 'y',
+  'е': 'e',
+  'ж': 'm',
+  'з': 'e',
+  'и': 'n',
+  'й': 'n',
+  'к': 'n',
+  'л': 'n',
+  'м': 'm',
+  'н': 'n',
+  'о': 'o',
+  'п': 'n',
+  'р': 'p',
+  'с': 'c',
+  'т': 'o',
+  'у': 'y',
+  'ф': 'b',
+  'х': 'x',
+  'ц': 'n',
+  'ч': 'n',
+  'ш': 'w',
+  'щ': 'w',
+  'ъ': 'a',
+  'ы': 'm',
+  'ь': 'a',
+  'э': 'e',
+  'ю': 'm',
+  'я': 'r'
+};
+
+/**
+ * This function adds new font metrics to default metricMap
+ * It can also override existing metrics
+ */
+function setFontMetrics(fontName, metrics) {
+  fontMetricsData[fontName] = metrics;
+}
+/**
+ * This function is a convenience function for looking up information in the
+ * metricMap table. It takes a character as a string, and a font.
+ *
+ * Note: the `width` property may be undefined if fontMetricsData.js wasn't
+ * built using `Make extended_metrics`.
+ */
+
+function getCharacterMetrics(character, font, mode) {
+  if (!fontMetricsData[font]) {
+    throw new Error("Font metrics not found for font: " + font + ".");
+  }
+
+  var ch = character.charCodeAt(0);
+  var metrics = fontMetricsData[font][ch];
+
+  if (!metrics && character[0] in extraCharacterMap) {
+    ch = extraCharacterMap[character[0]].charCodeAt(0);
+    metrics = fontMetricsData[font][ch];
+  }
+
+  if (!metrics && mode === 'text') {
+    // We don't typically have font metrics for Asian scripts.
+    // But since we support them in text mode, we need to return
+    // some sort of metrics.
+    // So if the character is in a script we support but we
+    // don't have metrics for it, just use the metrics for
+    // the Latin capital letter M. This is close enough because
+    // we (currently) only care about the height of the glpyh
+    // not its width.
+    if (supportedCodepoint(ch)) {
+      metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'
+    }
+  }
+
+  if (metrics) {
+    return {
+      depth: metrics[0],
+      height: metrics[1],
+      italic: metrics[2],
+      skew: metrics[3],
+      width: metrics[4]
+    };
+  }
+}
+var fontMetricsBySizeIndex = {};
+/**
+ * Get the font metrics for a given size.
+ */
+
+function getGlobalMetrics(size) {
+  var sizeIndex;
+
+  if (size >= 5) {
+    sizeIndex = 0;
+  } else if (size >= 3) {
+    sizeIndex = 1;
+  } else {
+    sizeIndex = 2;
+  }
+
+  if (!fontMetricsBySizeIndex[sizeIndex]) {
+    var metrics = fontMetricsBySizeIndex[sizeIndex] = {
+      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
+    };
+
+    for (var key in sigmasAndXis) {
+      if (sigmasAndXis.hasOwnProperty(key)) {
+        metrics[key] = sigmasAndXis[key][sizeIndex];
+      }
+    }
+  }
+
+  return fontMetricsBySizeIndex[sizeIndex];
+}
+// CONCATENATED MODULE: ./src/symbols.js
+/**
+ * This file holds a list of all no-argument functions and single-character
+ * symbols (like 'a' or ';').
+ *
+ * For each of the symbols, there are three properties they can have:
+ * - font (required): the font to be used for this symbol. Either "main" (the
+     normal font), or "ams" (the ams fonts).
+ * - group (required): the ParseNode group type the symbol should have (i.e.
+     "textord", "mathord", etc).
+     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types
+ * - replace: the character that this symbol or function should be
+ *   replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
+ *   character in the main font).
+ *
+ * The outermost map in the table indicates what mode the symbols should be
+ * accepted in (e.g. "math" or "text").
+ */
+// Some of these have a "-token" suffix since these are also used as `ParseNode`
+// types for raw text tokens, and we want to avoid conflicts with higher-level
+// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by
+// looking up the `symbols` map.
+var ATOMS = {
+  "bin": 1,
+  "close": 1,
+  "inner": 1,
+  "open": 1,
+  "punct": 1,
+  "rel": 1
+};
+var NON_ATOMS = {
+  "accent-token": 1,
+  "mathord": 1,
+  "op-token": 1,
+  "spacing": 1,
+  "textord": 1
+};
+var symbols = {
+  "math": {},
+  "text": {}
+};
+/* harmony default export */ var src_symbols = (symbols);
+/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */
+
+function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
+  symbols[mode][name] = {
+    font: font,
+    group: group,
+    replace: replace
+  };
+
+  if (acceptUnicodeChar && replace) {
+    symbols[mode][replace] = symbols[mode][name];
+  }
+} // Some abbreviations for commonly used strings.
+// This helps minify the code, and also spotting typos using jshint.
+// modes:
+
+var symbols_math = "math";
+var symbols_text = "text"; // fonts:
+
+var main = "main";
+var ams = "ams"; // groups:
+
+var symbols_accent = "accent-token";
+var bin = "bin";
+var symbols_close = "close";
+var symbols_inner = "inner";
+var mathord = "mathord";
+var op = "op-token";
+var symbols_open = "open";
+var punct = "punct";
+var rel = "rel";
+var symbols_spacing = "spacing";
+var symbols_textord = "textord"; // Now comes the symbol table
+// Relation Symbols
+
+defineSymbol(symbols_math, main, rel, "\u2261", "\\equiv", true);
+defineSymbol(symbols_math, main, rel, "\u227A", "\\prec", true);
+defineSymbol(symbols_math, main, rel, "\u227B", "\\succ", true);
+defineSymbol(symbols_math, main, rel, "\u223C", "\\sim", true);
+defineSymbol(symbols_math, main, rel, "\u22A5", "\\perp");
+defineSymbol(symbols_math, main, rel, "\u2AAF", "\\preceq", true);
+defineSymbol(symbols_math, main, rel, "\u2AB0", "\\succeq", true);
+defineSymbol(symbols_math, main, rel, "\u2243", "\\simeq", true);
+defineSymbol(symbols_math, main, rel, "\u2223", "\\mid", true);
+defineSymbol(symbols_math, main, rel, "\u226A", "\\ll", true);
+defineSymbol(symbols_math, main, rel, "\u226B", "\\gg", true);
+defineSymbol(symbols_math, main, rel, "\u224D", "\\asymp", true);
+defineSymbol(symbols_math, main, rel, "\u2225", "\\parallel");
+defineSymbol(symbols_math, main, rel, "\u22C8", "\\bowtie", true);
+defineSymbol(symbols_math, main, rel, "\u2323", "\\smile", true);
+defineSymbol(symbols_math, main, rel, "\u2291", "\\sqsubseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2292", "\\sqsupseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2250", "\\doteq", true);
+defineSymbol(symbols_math, main, rel, "\u2322", "\\frown", true);
+defineSymbol(symbols_math, main, rel, "\u220B", "\\ni", true);
+defineSymbol(symbols_math, main, rel, "\u221D", "\\propto", true);
+defineSymbol(symbols_math, main, rel, "\u22A2", "\\vdash", true);
+defineSymbol(symbols_math, main, rel, "\u22A3", "\\dashv", true);
+defineSymbol(symbols_math, main, rel, "\u220B", "\\owns"); // Punctuation
+
+defineSymbol(symbols_math, main, punct, ".", "\\ldotp");
+defineSymbol(symbols_math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols
+
+defineSymbol(symbols_math, main, symbols_textord, "#", "\\#");
+defineSymbol(symbols_text, main, symbols_textord, "#", "\\#");
+defineSymbol(symbols_math, main, symbols_textord, "&", "\\&");
+defineSymbol(symbols_text, main, symbols_textord, "&", "\\&");
+defineSymbol(symbols_math, main, symbols_textord, "\u2135", "\\aleph", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2200", "\\forall", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u210F", "\\hbar", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2203", "\\exists", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2207", "\\nabla", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266D", "\\flat", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2113", "\\ell", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266E", "\\natural", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2663", "\\clubsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2118", "\\wp", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266F", "\\sharp", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2662", "\\diamondsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u211C", "\\Re", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2661", "\\heartsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2111", "\\Im", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2660", "\\spadesuit", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xA7", "\\S", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xB6", "\\P", true); // Math and Text
+
+defineSymbol(symbols_math, main, symbols_textord, "\u2020", "\\dag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\dag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\textdagger");
+defineSymbol(symbols_math, main, symbols_textord, "\u2021", "\\ddag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\ddag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters
+
+defineSymbol(symbols_math, main, symbols_close, "\u23B1", "\\rmoustache", true);
+defineSymbol(symbols_math, main, symbols_open, "\u23B0", "\\lmoustache", true);
+defineSymbol(symbols_math, main, symbols_close, "\u27EF", "\\rgroup", true);
+defineSymbol(symbols_math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators
+
+defineSymbol(symbols_math, main, bin, "\u2213", "\\mp", true);
+defineSymbol(symbols_math, main, bin, "\u2296", "\\ominus", true);
+defineSymbol(symbols_math, main, bin, "\u228E", "\\uplus", true);
+defineSymbol(symbols_math, main, bin, "\u2293", "\\sqcap", true);
+defineSymbol(symbols_math, main, bin, "\u2217", "\\ast");
+defineSymbol(symbols_math, main, bin, "\u2294", "\\sqcup", true);
+defineSymbol(symbols_math, main, bin, "\u25EF", "\\bigcirc");
+defineSymbol(symbols_math, main, bin, "\u2219", "\\bullet");
+defineSymbol(symbols_math, main, bin, "\u2021", "\\ddagger");
+defineSymbol(symbols_math, main, bin, "\u2240", "\\wr", true);
+defineSymbol(symbols_math, main, bin, "\u2A3F", "\\amalg");
+defineSymbol(symbols_math, main, bin, "&", "\\And"); // from amsmath
+// Arrow Symbols
+
+defineSymbol(symbols_math, main, rel, "\u27F5", "\\longleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D0", "\\Leftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F8", "\\Longleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F6", "\\longrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D2", "\\Rightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F9", "\\Longrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2194", "\\leftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F7", "\\longleftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D4", "\\Leftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27FA", "\\Longleftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21A6", "\\mapsto", true);
+defineSymbol(symbols_math, main, rel, "\u27FC", "\\longmapsto", true);
+defineSymbol(symbols_math, main, rel, "\u2197", "\\nearrow", true);
+defineSymbol(symbols_math, main, rel, "\u21A9", "\\hookleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21AA", "\\hookrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2198", "\\searrow", true);
+defineSymbol(symbols_math, main, rel, "\u21BC", "\\leftharpoonup", true);
+defineSymbol(symbols_math, main, rel, "\u21C0", "\\rightharpoonup", true);
+defineSymbol(symbols_math, main, rel, "\u2199", "\\swarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21BD", "\\leftharpoondown", true);
+defineSymbol(symbols_math, main, rel, "\u21C1", "\\rightharpoondown", true);
+defineSymbol(symbols_math, main, rel, "\u2196", "\\nwarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations
+
+defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
+
+defineSymbol(symbols_math, ams, rel, "\uE010", "\\@nleqslant");
+defineSymbol(symbols_math, ams, rel, "\uE011", "\\@nleqq");
+defineSymbol(symbols_math, ams, rel, "\u2A87", "\\lneq", true);
+defineSymbol(symbols_math, ams, rel, "\u2268", "\\lneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE00C", "\\@lvertneqq");
+defineSymbol(symbols_math, ams, rel, "\u22E6", "\\lnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A89", "\\lnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u22E0", "\\npreceq", true);
+defineSymbol(symbols_math, ams, rel, "\u22E8", "\\precnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB9", "\\precnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2241", "\\nsim", true);
+defineSymbol(symbols_math, ams, rel, "\uE006", "\\@nshortmid");
+defineSymbol(symbols_math, ams, rel, "\u2224", "\\nmid", true);
+defineSymbol(symbols_math, ams, rel, "\u22AC", "\\nvdash", true);
+defineSymbol(symbols_math, ams, rel, "\u22AD", "\\nvDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22EA", "\\ntriangleleft");
+defineSymbol(symbols_math, ams, rel, "\u22EC", "\\ntrianglelefteq", true);
+defineSymbol(symbols_math, ams, rel, "\u228A", "\\subsetneq", true);
+defineSymbol(symbols_math, ams, rel, "\uE01A", "\\@varsubsetneq");
+defineSymbol(symbols_math, ams, rel, "\u2ACB", "\\subsetneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE017", "\\@varsubsetneqq");
+defineSymbol(symbols_math, ams, rel, "\u226F", "\\ngtr", true);
+defineSymbol(symbols_math, ams, rel, "\uE00F", "\\@ngeqslant");
+defineSymbol(symbols_math, ams, rel, "\uE00E", "\\@ngeqq");
+defineSymbol(symbols_math, ams, rel, "\u2A88", "\\gneq", true);
+defineSymbol(symbols_math, ams, rel, "\u2269", "\\gneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE00D", "\\@gvertneqq");
+defineSymbol(symbols_math, ams, rel, "\u22E7", "\\gnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8A", "\\gnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u22E1", "\\nsucceq", true);
+defineSymbol(symbols_math, ams, rel, "\u22E9", "\\succnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u2246", "\\ncong", true);
+defineSymbol(symbols_math, ams, rel, "\uE007", "\\@nshortparallel");
+defineSymbol(symbols_math, ams, rel, "\u2226", "\\nparallel", true);
+defineSymbol(symbols_math, ams, rel, "\u22AF", "\\nVDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22EB", "\\ntriangleright");
+defineSymbol(symbols_math, ams, rel, "\u22ED", "\\ntrianglerighteq", true);
+defineSymbol(symbols_math, ams, rel, "\uE018", "\\@nsupseteqq");
+defineSymbol(symbols_math, ams, rel, "\u228B", "\\supsetneq", true);
+defineSymbol(symbols_math, ams, rel, "\uE01B", "\\@varsupsetneq");
+defineSymbol(symbols_math, ams, rel, "\u2ACC", "\\supsetneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE019", "\\@varsupsetneqq");
+defineSymbol(symbols_math, ams, rel, "\u22AE", "\\nVdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB5", "\\precneqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB6", "\\succneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE016", "\\@nsubseteqq");
+defineSymbol(symbols_math, ams, bin, "\u22B4", "\\unlhd");
+defineSymbol(symbols_math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows
+
+defineSymbol(symbols_math, ams, rel, "\u219A", "\\nleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u219B", "\\nrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CD", "\\nLeftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CF", "\\nRightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21AE", "\\nleftrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc
+
+defineSymbol(symbols_math, ams, rel, "\u25B3", "\\vartriangle");
+defineSymbol(symbols_math, ams, symbols_textord, "\u210F", "\\hslash");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25BD", "\\triangledown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\lozenge");
+defineSymbol(symbols_math, ams, symbols_textord, "\u24C8", "\\circledS");
+defineSymbol(symbols_math, ams, symbols_textord, "\xAE", "\\circledR");
+defineSymbol(symbols_text, ams, symbols_textord, "\xAE", "\\circledR");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2221", "\\measuredangle", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2204", "\\nexists");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2127", "\\mho");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2132", "\\Finv", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2141", "\\Game", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2035", "\\backprime");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25B2", "\\blacktriangle");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25BC", "\\blacktriangledown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A0", "\\blacksquare");
+defineSymbol(symbols_math, ams, symbols_textord, "\u29EB", "\\blacklozenge");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2605", "\\bigstar");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2222", "\\sphericalangle", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth
+
+defineSymbol(symbols_math, ams, symbols_textord, "\xF0", "\\eth", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2571", "\\diagup");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2572", "\\diagdown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\square");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\Box");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen
+
+defineSymbol(symbols_math, ams, symbols_textord, "\xA5", "\\yen", true);
+defineSymbol(symbols_text, ams, symbols_textord, "\xA5", "\\yen", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2713", "\\checkmark", true);
+defineSymbol(symbols_text, ams, symbols_textord, "\u2713", "\\checkmark"); // AMS Hebrew
+
+defineSymbol(symbols_math, ams, symbols_textord, "\u2136", "\\beth", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2138", "\\daleth", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2137", "\\gimel", true); // AMS Greek
+
+defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u03F0", "\\varkappa"); // AMS Delimiters
+
+defineSymbol(symbols_math, ams, symbols_open, "\u250C", "\\ulcorner", true);
+defineSymbol(symbols_math, ams, symbols_close, "\u2510", "\\urcorner", true);
+defineSymbol(symbols_math, ams, symbols_open, "\u2514", "\\llcorner", true);
+defineSymbol(symbols_math, ams, symbols_close, "\u2518", "\\lrcorner", true); // AMS Binary Relations
+
+defineSymbol(symbols_math, ams, rel, "\u2266", "\\leqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2A7D", "\\leqslant", true);
+defineSymbol(symbols_math, ams, rel, "\u2A95", "\\eqslantless", true);
+defineSymbol(symbols_math, ams, rel, "\u2272", "\\lesssim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A85", "\\lessapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u224A", "\\approxeq", true);
+defineSymbol(symbols_math, ams, bin, "\u22D6", "\\lessdot");
+defineSymbol(symbols_math, ams, rel, "\u22D8", "\\lll", true);
+defineSymbol(symbols_math, ams, rel, "\u2276", "\\lessgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u22DA", "\\lesseqgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8B", "\\lesseqqgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2251", "\\doteqdot");
+defineSymbol(symbols_math, ams, rel, "\u2253", "\\risingdotseq", true);
+defineSymbol(symbols_math, ams, rel, "\u2252", "\\fallingdotseq", true);
+defineSymbol(symbols_math, ams, rel, "\u223D", "\\backsim", true);
+defineSymbol(symbols_math, ams, rel, "\u22CD", "\\backsimeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2AC5", "\\subseteqq", true);
+defineSymbol(symbols_math, ams, rel, "\u22D0", "\\Subset", true);
+defineSymbol(symbols_math, ams, rel, "\u228F", "\\sqsubset", true);
+defineSymbol(symbols_math, ams, rel, "\u227C", "\\preccurlyeq", true);
+defineSymbol(symbols_math, ams, rel, "\u22DE", "\\curlyeqprec", true);
+defineSymbol(symbols_math, ams, rel, "\u227E", "\\precsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB7", "\\precapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u22B2", "\\vartriangleleft");
+defineSymbol(symbols_math, ams, rel, "\u22B4", "\\trianglelefteq");
+defineSymbol(symbols_math, ams, rel, "\u22A8", "\\vDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22AA", "\\Vvdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2323", "\\smallsmile");
+defineSymbol(symbols_math, ams, rel, "\u2322", "\\smallfrown");
+defineSymbol(symbols_math, ams, rel, "\u224F", "\\bumpeq", true);
+defineSymbol(symbols_math, ams, rel, "\u224E", "\\Bumpeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2267", "\\geqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2A7E", "\\geqslant", true);
+defineSymbol(symbols_math, ams, rel, "\u2A96", "\\eqslantgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2273", "\\gtrsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A86", "\\gtrapprox", true);
+defineSymbol(symbols_math, ams, bin, "\u22D7", "\\gtrdot");
+defineSymbol(symbols_math, ams, rel, "\u22D9", "\\ggg", true);
+defineSymbol(symbols_math, ams, rel, "\u2277", "\\gtrless", true);
+defineSymbol(symbols_math, ams, rel, "\u22DB", "\\gtreqless", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8C", "\\gtreqqless", true);
+defineSymbol(symbols_math, ams, rel, "\u2256", "\\eqcirc", true);
+defineSymbol(symbols_math, ams, rel, "\u2257", "\\circeq", true);
+defineSymbol(symbols_math, ams, rel, "\u225C", "\\triangleq", true);
+defineSymbol(symbols_math, ams, rel, "\u223C", "\\thicksim");
+defineSymbol(symbols_math, ams, rel, "\u2248", "\\thickapprox");
+defineSymbol(symbols_math, ams, rel, "\u2AC6", "\\supseteqq", true);
+defineSymbol(symbols_math, ams, rel, "\u22D1", "\\Supset", true);
+defineSymbol(symbols_math, ams, rel, "\u2290", "\\sqsupset", true);
+defineSymbol(symbols_math, ams, rel, "\u227D", "\\succcurlyeq", true);
+defineSymbol(symbols_math, ams, rel, "\u22DF", "\\curlyeqsucc", true);
+defineSymbol(symbols_math, ams, rel, "\u227F", "\\succsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB8", "\\succapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u22B3", "\\vartriangleright");
+defineSymbol(symbols_math, ams, rel, "\u22B5", "\\trianglerighteq");
+defineSymbol(symbols_math, ams, rel, "\u22A9", "\\Vdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2223", "\\shortmid");
+defineSymbol(symbols_math, ams, rel, "\u2225", "\\shortparallel");
+defineSymbol(symbols_math, ams, rel, "\u226C", "\\between", true);
+defineSymbol(symbols_math, ams, rel, "\u22D4", "\\pitchfork", true);
+defineSymbol(symbols_math, ams, rel, "\u221D", "\\varpropto");
+defineSymbol(symbols_math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(symbols_math, ams, rel, "\u2234", "\\therefore", true);
+defineSymbol(symbols_math, ams, rel, "\u220D", "\\backepsilon");
+defineSymbol(symbols_math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(symbols_math, ams, rel, "\u2235", "\\because", true);
+defineSymbol(symbols_math, ams, rel, "\u22D8", "\\llless");
+defineSymbol(symbols_math, ams, rel, "\u22D9", "\\gggtr");
+defineSymbol(symbols_math, ams, bin, "\u22B2", "\\lhd");
+defineSymbol(symbols_math, ams, bin, "\u22B3", "\\rhd");
+defineSymbol(symbols_math, ams, rel, "\u2242", "\\eqsim", true);
+defineSymbol(symbols_math, main, rel, "\u22C8", "\\Join");
+defineSymbol(symbols_math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators
+
+defineSymbol(symbols_math, ams, bin, "\u2214", "\\dotplus", true);
+defineSymbol(symbols_math, ams, bin, "\u2216", "\\smallsetminus");
+defineSymbol(symbols_math, ams, bin, "\u22D2", "\\Cap", true);
+defineSymbol(symbols_math, ams, bin, "\u22D3", "\\Cup", true);
+defineSymbol(symbols_math, ams, bin, "\u2A5E", "\\doublebarwedge", true);
+defineSymbol(symbols_math, ams, bin, "\u229F", "\\boxminus", true);
+defineSymbol(symbols_math, ams, bin, "\u229E", "\\boxplus", true);
+defineSymbol(symbols_math, ams, bin, "\u22C7", "\\divideontimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22C9", "\\ltimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CA", "\\rtimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CB", "\\leftthreetimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CC", "\\rightthreetimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CF", "\\curlywedge", true);
+defineSymbol(symbols_math, ams, bin, "\u22CE", "\\curlyvee", true);
+defineSymbol(symbols_math, ams, bin, "\u229D", "\\circleddash", true);
+defineSymbol(symbols_math, ams, bin, "\u229B", "\\circledast", true);
+defineSymbol(symbols_math, ams, bin, "\u22C5", "\\centerdot");
+defineSymbol(symbols_math, ams, bin, "\u22BA", "\\intercal", true);
+defineSymbol(symbols_math, ams, bin, "\u22D2", "\\doublecap");
+defineSymbol(symbols_math, ams, bin, "\u22D3", "\\doublecup");
+defineSymbol(symbols_math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows
+// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
+// We'll map it to AMS function \dashrightarrow. It produces the same atom.
+
+defineSymbol(symbols_math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21E0", "\\dashleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21C7", "\\leftleftarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21C6", "\\leftrightarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21DA", "\\Lleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u219E", "\\twoheadleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21A2", "\\leftarrowtail", true);
+defineSymbol(symbols_math, ams, rel, "\u21AB", "\\looparrowleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21CB", "\\leftrightharpoons", true);
+defineSymbol(symbols_math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21BA", "\\circlearrowleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21B0", "\\Lsh", true);
+defineSymbol(symbols_math, ams, rel, "\u21C8", "\\upuparrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21BF", "\\upharpoonleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21C3", "\\downharpoonleft", true);
+defineSymbol(symbols_math, ams, rel, "\u22B8", "\\multimap", true);
+defineSymbol(symbols_math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21C9", "\\rightrightarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21C4", "\\rightleftarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21A0", "\\twoheadrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21A3", "\\rightarrowtail", true);
+defineSymbol(symbols_math, ams, rel, "\u21AC", "\\looparrowright", true);
+defineSymbol(symbols_math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21BB", "\\circlearrowright", true);
+defineSymbol(symbols_math, ams, rel, "\u21B1", "\\Rsh", true);
+defineSymbol(symbols_math, ams, rel, "\u21CA", "\\downdownarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21BE", "\\upharpoonright", true);
+defineSymbol(symbols_math, ams, rel, "\u21C2", "\\downharpoonright", true);
+defineSymbol(symbols_math, ams, rel, "\u21DD", "\\rightsquigarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21DD", "\\leadsto");
+defineSymbol(symbols_math, ams, rel, "\u21DB", "\\Rrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21BE", "\\restriction");
+defineSymbol(symbols_math, main, symbols_textord, "\u2018", "`");
+defineSymbol(symbols_math, main, symbols_textord, "$", "\\$");
+defineSymbol(symbols_text, main, symbols_textord, "$", "\\$");
+defineSymbol(symbols_text, main, symbols_textord, "$", "\\textdollar");
+defineSymbol(symbols_math, main, symbols_textord, "%", "\\%");
+defineSymbol(symbols_text, main, symbols_textord, "%", "\\%");
+defineSymbol(symbols_math, main, symbols_textord, "_", "\\_");
+defineSymbol(symbols_text, main, symbols_textord, "_", "\\_");
+defineSymbol(symbols_text, main, symbols_textord, "_", "\\textunderscore");
+defineSymbol(symbols_math, main, symbols_textord, "\u2220", "\\angle", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u221E", "\\infty", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2032", "\\prime");
+defineSymbol(symbols_math, main, symbols_textord, "\u25B3", "\\triangle");
+defineSymbol(symbols_math, main, symbols_textord, "\u0393", "\\Gamma", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u0394", "\\Delta", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u0398", "\\Theta", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u039B", "\\Lambda", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u039E", "\\Xi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A0", "\\Pi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A3", "\\Sigma", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A5", "\\Upsilon", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A6", "\\Phi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A8", "\\Psi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A9", "\\Omega", true);
+defineSymbol(symbols_math, main, symbols_textord, "A", "\u0391");
+defineSymbol(symbols_math, main, symbols_textord, "B", "\u0392");
+defineSymbol(symbols_math, main, symbols_textord, "E", "\u0395");
+defineSymbol(symbols_math, main, symbols_textord, "Z", "\u0396");
+defineSymbol(symbols_math, main, symbols_textord, "H", "\u0397");
+defineSymbol(symbols_math, main, symbols_textord, "I", "\u0399");
+defineSymbol(symbols_math, main, symbols_textord, "K", "\u039A");
+defineSymbol(symbols_math, main, symbols_textord, "M", "\u039C");
+defineSymbol(symbols_math, main, symbols_textord, "N", "\u039D");
+defineSymbol(symbols_math, main, symbols_textord, "O", "\u039F");
+defineSymbol(symbols_math, main, symbols_textord, "P", "\u03A1");
+defineSymbol(symbols_math, main, symbols_textord, "T", "\u03A4");
+defineSymbol(symbols_math, main, symbols_textord, "X", "\u03A7");
+defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\neg", true);
+defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\lnot");
+defineSymbol(symbols_math, main, symbols_textord, "\u22A4", "\\top");
+defineSymbol(symbols_math, main, symbols_textord, "\u22A5", "\\bot");
+defineSymbol(symbols_math, main, symbols_textord, "\u2205", "\\emptyset");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2205", "\\varnothing");
+defineSymbol(symbols_math, main, mathord, "\u03B1", "\\alpha", true);
+defineSymbol(symbols_math, main, mathord, "\u03B2", "\\beta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B3", "\\gamma", true);
+defineSymbol(symbols_math, main, mathord, "\u03B4", "\\delta", true);
+defineSymbol(symbols_math, main, mathord, "\u03F5", "\\epsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03B6", "\\zeta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B7", "\\eta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B8", "\\theta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B9", "\\iota", true);
+defineSymbol(symbols_math, main, mathord, "\u03BA", "\\kappa", true);
+defineSymbol(symbols_math, main, mathord, "\u03BB", "\\lambda", true);
+defineSymbol(symbols_math, main, mathord, "\u03BC", "\\mu", true);
+defineSymbol(symbols_math, main, mathord, "\u03BD", "\\nu", true);
+defineSymbol(symbols_math, main, mathord, "\u03BE", "\\xi", true);
+defineSymbol(symbols_math, main, mathord, "\u03BF", "\\omicron", true);
+defineSymbol(symbols_math, main, mathord, "\u03C0", "\\pi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C1", "\\rho", true);
+defineSymbol(symbols_math, main, mathord, "\u03C3", "\\sigma", true);
+defineSymbol(symbols_math, main, mathord, "\u03C4", "\\tau", true);
+defineSymbol(symbols_math, main, mathord, "\u03C5", "\\upsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03D5", "\\phi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C7", "\\chi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C8", "\\psi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C9", "\\omega", true);
+defineSymbol(symbols_math, main, mathord, "\u03B5", "\\varepsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03D1", "\\vartheta", true);
+defineSymbol(symbols_math, main, mathord, "\u03D6", "\\varpi", true);
+defineSymbol(symbols_math, main, mathord, "\u03F1", "\\varrho", true);
+defineSymbol(symbols_math, main, mathord, "\u03C2", "\\varsigma", true);
+defineSymbol(symbols_math, main, mathord, "\u03C6", "\\varphi", true);
+defineSymbol(symbols_math, main, bin, "\u2217", "*");
+defineSymbol(symbols_math, main, bin, "+", "+");
+defineSymbol(symbols_math, main, bin, "\u2212", "-");
+defineSymbol(symbols_math, main, bin, "\u22C5", "\\cdot", true);
+defineSymbol(symbols_math, main, bin, "\u2218", "\\circ");
+defineSymbol(symbols_math, main, bin, "\xF7", "\\div", true);
+defineSymbol(symbols_math, main, bin, "\xB1", "\\pm", true);
+defineSymbol(symbols_math, main, bin, "\xD7", "\\times", true);
+defineSymbol(symbols_math, main, bin, "\u2229", "\\cap", true);
+defineSymbol(symbols_math, main, bin, "\u222A", "\\cup", true);
+defineSymbol(symbols_math, main, bin, "\u2216", "\\setminus");
+defineSymbol(symbols_math, main, bin, "\u2227", "\\land");
+defineSymbol(symbols_math, main, bin, "\u2228", "\\lor");
+defineSymbol(symbols_math, main, bin, "\u2227", "\\wedge", true);
+defineSymbol(symbols_math, main, bin, "\u2228", "\\vee", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u221A", "\\surd");
+defineSymbol(symbols_math, main, symbols_open, "(", "(");
+defineSymbol(symbols_math, main, symbols_open, "[", "[");
+defineSymbol(symbols_math, main, symbols_open, "\u27E8", "\\langle", true);
+defineSymbol(symbols_math, main, symbols_open, "\u2223", "\\lvert");
+defineSymbol(symbols_math, main, symbols_open, "\u2225", "\\lVert");
+defineSymbol(symbols_math, main, symbols_close, ")", ")");
+defineSymbol(symbols_math, main, symbols_close, "]", "]");
+defineSymbol(symbols_math, main, symbols_close, "?", "?");
+defineSymbol(symbols_math, main, symbols_close, "!", "!");
+defineSymbol(symbols_math, main, symbols_close, "\u27E9", "\\rangle", true);
+defineSymbol(symbols_math, main, symbols_close, "\u2223", "\\rvert");
+defineSymbol(symbols_math, main, symbols_close, "\u2225", "\\rVert");
+defineSymbol(symbols_math, main, rel, "=", "=");
+defineSymbol(symbols_math, main, rel, "<", "<");
+defineSymbol(symbols_math, main, rel, ">", ">");
+defineSymbol(symbols_math, main, rel, ":", ":");
+defineSymbol(symbols_math, main, rel, "\u2248", "\\approx", true);
+defineSymbol(symbols_math, main, rel, "\u2245", "\\cong", true);
+defineSymbol(symbols_math, main, rel, "\u2265", "\\ge");
+defineSymbol(symbols_math, main, rel, "\u2265", "\\geq", true);
+defineSymbol(symbols_math, main, rel, "\u2190", "\\gets");
+defineSymbol(symbols_math, main, rel, ">", "\\gt");
+defineSymbol(symbols_math, main, rel, "\u2208", "\\in", true);
+defineSymbol(symbols_math, main, rel, "\uE020", "\\@not");
+defineSymbol(symbols_math, main, rel, "\u2282", "\\subset", true);
+defineSymbol(symbols_math, main, rel, "\u2283", "\\supset", true);
+defineSymbol(symbols_math, main, rel, "\u2286", "\\subseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2287", "\\supseteq", true);
+defineSymbol(symbols_math, ams, rel, "\u2288", "\\nsubseteq", true);
+defineSymbol(symbols_math, ams, rel, "\u2289", "\\nsupseteq", true);
+defineSymbol(symbols_math, main, rel, "\u22A8", "\\models");
+defineSymbol(symbols_math, main, rel, "\u2190", "\\leftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2264", "\\le");
+defineSymbol(symbols_math, main, rel, "\u2264", "\\leq", true);
+defineSymbol(symbols_math, main, rel, "<", "\\lt");
+defineSymbol(symbols_math, main, rel, "\u2192", "\\rightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2192", "\\to");
+defineSymbol(symbols_math, ams, rel, "\u2271", "\\ngeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2270", "\\nleq", true);
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\ ");
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "~");
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
+
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\nobreakspace");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\space");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\nobreakspace");
+defineSymbol(symbols_math, main, symbols_spacing, null, "\\nobreak");
+defineSymbol(symbols_math, main, symbols_spacing, null, "\\allowbreak");
+defineSymbol(symbols_math, main, punct, ",", ",");
+defineSymbol(symbols_math, main, punct, ";", ";");
+defineSymbol(symbols_math, ams, bin, "\u22BC", "\\barwedge", true);
+defineSymbol(symbols_math, ams, bin, "\u22BB", "\\veebar", true);
+defineSymbol(symbols_math, main, bin, "\u2299", "\\odot", true);
+defineSymbol(symbols_math, main, bin, "\u2295", "\\oplus", true);
+defineSymbol(symbols_math, main, bin, "\u2297", "\\otimes", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2202", "\\partial", true);
+defineSymbol(symbols_math, main, bin, "\u2298", "\\oslash", true);
+defineSymbol(symbols_math, ams, bin, "\u229A", "\\circledcirc", true);
+defineSymbol(symbols_math, ams, bin, "\u22A1", "\\boxdot", true);
+defineSymbol(symbols_math, main, bin, "\u25B3", "\\bigtriangleup");
+defineSymbol(symbols_math, main, bin, "\u25BD", "\\bigtriangledown");
+defineSymbol(symbols_math, main, bin, "\u2020", "\\dagger");
+defineSymbol(symbols_math, main, bin, "\u22C4", "\\diamond");
+defineSymbol(symbols_math, main, bin, "\u22C6", "\\star");
+defineSymbol(symbols_math, main, bin, "\u25C3", "\\triangleleft");
+defineSymbol(symbols_math, main, bin, "\u25B9", "\\triangleright");
+defineSymbol(symbols_math, main, symbols_open, "{", "\\{");
+defineSymbol(symbols_text, main, symbols_textord, "{", "\\{");
+defineSymbol(symbols_text, main, symbols_textord, "{", "\\textbraceleft");
+defineSymbol(symbols_math, main, symbols_close, "}", "\\}");
+defineSymbol(symbols_text, main, symbols_textord, "}", "\\}");
+defineSymbol(symbols_text, main, symbols_textord, "}", "\\textbraceright");
+defineSymbol(symbols_math, main, symbols_open, "{", "\\lbrace");
+defineSymbol(symbols_math, main, symbols_close, "}", "\\rbrace");
+defineSymbol(symbols_math, main, symbols_open, "[", "\\lbrack");
+defineSymbol(symbols_text, main, symbols_textord, "[", "\\lbrack");
+defineSymbol(symbols_math, main, symbols_close, "]", "\\rbrack");
+defineSymbol(symbols_text, main, symbols_textord, "]", "\\rbrack");
+defineSymbol(symbols_math, main, symbols_open, "(", "\\lparen");
+defineSymbol(symbols_math, main, symbols_close, ")", "\\rparen");
+defineSymbol(symbols_text, main, symbols_textord, "<", "\\textless"); // in T1 fontenc
+
+defineSymbol(symbols_text, main, symbols_textord, ">", "\\textgreater"); // in T1 fontenc
+
+defineSymbol(symbols_math, main, symbols_open, "\u230A", "\\lfloor", true);
+defineSymbol(symbols_math, main, symbols_close, "\u230B", "\\rfloor", true);
+defineSymbol(symbols_math, main, symbols_open, "\u2308", "\\lceil", true);
+defineSymbol(symbols_math, main, symbols_close, "\u2309", "\\rceil", true);
+defineSymbol(symbols_math, main, symbols_textord, "\\", "\\backslash");
+defineSymbol(symbols_math, main, symbols_textord, "\u2223", "|");
+defineSymbol(symbols_math, main, symbols_textord, "\u2223", "\\vert");
+defineSymbol(symbols_text, main, symbols_textord, "|", "\\textbar"); // in T1 fontenc
+
+defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\|");
+defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\Vert");
+defineSymbol(symbols_text, main, symbols_textord, "\u2225", "\\textbardbl");
+defineSymbol(symbols_text, main, symbols_textord, "~", "\\textasciitilde");
+defineSymbol(symbols_text, main, symbols_textord, "\\", "\\textbackslash");
+defineSymbol(symbols_text, main, symbols_textord, "^", "\\textasciicircum");
+defineSymbol(symbols_math, main, rel, "\u2191", "\\uparrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D1", "\\Uparrow", true);
+defineSymbol(symbols_math, main, rel, "\u2193", "\\downarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D3", "\\Downarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2195", "\\updownarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D5", "\\Updownarrow", true);
+defineSymbol(symbols_math, main, op, "\u2210", "\\coprod");
+defineSymbol(symbols_math, main, op, "\u22C1", "\\bigvee");
+defineSymbol(symbols_math, main, op, "\u22C0", "\\bigwedge");
+defineSymbol(symbols_math, main, op, "\u2A04", "\\biguplus");
+defineSymbol(symbols_math, main, op, "\u22C2", "\\bigcap");
+defineSymbol(symbols_math, main, op, "\u22C3", "\\bigcup");
+defineSymbol(symbols_math, main, op, "\u222B", "\\int");
+defineSymbol(symbols_math, main, op, "\u222B", "\\intop");
+defineSymbol(symbols_math, main, op, "\u222C", "\\iint");
+defineSymbol(symbols_math, main, op, "\u222D", "\\iiint");
+defineSymbol(symbols_math, main, op, "\u220F", "\\prod");
+defineSymbol(symbols_math, main, op, "\u2211", "\\sum");
+defineSymbol(symbols_math, main, op, "\u2A02", "\\bigotimes");
+defineSymbol(symbols_math, main, op, "\u2A01", "\\bigoplus");
+defineSymbol(symbols_math, main, op, "\u2A00", "\\bigodot");
+defineSymbol(symbols_math, main, op, "\u222E", "\\oint");
+defineSymbol(symbols_math, main, op, "\u222F", "\\oiint");
+defineSymbol(symbols_math, main, op, "\u2230", "\\oiiint");
+defineSymbol(symbols_math, main, op, "\u2A06", "\\bigsqcup");
+defineSymbol(symbols_math, main, op, "\u222B", "\\smallint");
+defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\textellipsis");
+defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\mathellipsis");
+defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\ldots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\ldots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u22EF", "\\@cdots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u22F1", "\\ddots", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u22EE", "\\varvdots"); // \vdots is a macro
+
+defineSymbol(symbols_math, main, symbols_accent, "\u02CA", "\\acute");
+defineSymbol(symbols_math, main, symbols_accent, "\u02CB", "\\grave");
+defineSymbol(symbols_math, main, symbols_accent, "\xA8", "\\ddot");
+defineSymbol(symbols_math, main, symbols_accent, "~", "\\tilde");
+defineSymbol(symbols_math, main, symbols_accent, "\u02C9", "\\bar");
+defineSymbol(symbols_math, main, symbols_accent, "\u02D8", "\\breve");
+defineSymbol(symbols_math, main, symbols_accent, "\u02C7", "\\check");
+defineSymbol(symbols_math, main, symbols_accent, "^", "\\hat");
+defineSymbol(symbols_math, main, symbols_accent, "\u20D7", "\\vec");
+defineSymbol(symbols_math, main, symbols_accent, "\u02D9", "\\dot");
+defineSymbol(symbols_math, main, symbols_accent, "\u02DA", "\\mathring");
+defineSymbol(symbols_math, main, mathord, "\u0131", "\\imath", true);
+defineSymbol(symbols_math, main, mathord, "\u0237", "\\jmath", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0131", "\\i", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0237", "\\j", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xDF", "\\ss", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0153", "\\oe", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xF8", "\\o", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xC6", "\\AE", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0152", "\\OE", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xD8", "\\O", true);
+defineSymbol(symbols_text, main, symbols_accent, "\u02CA", "\\'"); // acute
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02CB", "\\`"); // grave
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C6", "\\^"); // circumflex
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DC", "\\~"); // tilde
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C9", "\\="); // macron
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02D8", "\\u"); // breve
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02D9", "\\."); // dot above
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DA", "\\r"); // ring above
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C7", "\\v"); // caron
+
+defineSymbol(symbols_text, main, symbols_accent, "\xA8", '\\"'); // diaresis
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DD", "\\H"); // double acute
+
+defineSymbol(symbols_text, main, symbols_accent, "\u25EF", "\\textcircled"); // \bigcirc glyph
+// These ligatures are detected and created in Parser.js's `formLigatures`.
+
+var ligatures = {
+  "--": true,
+  "---": true,
+  "``": true,
+  "''": true
+};
+defineSymbol(symbols_text, main, symbols_textord, "\u2013", "--");
+defineSymbol(symbols_text, main, symbols_textord, "\u2013", "\\textendash");
+defineSymbol(symbols_text, main, symbols_textord, "\u2014", "---");
+defineSymbol(symbols_text, main, symbols_textord, "\u2014", "\\textemdash");
+defineSymbol(symbols_text, main, symbols_textord, "\u2018", "`");
+defineSymbol(symbols_text, main, symbols_textord, "\u2018", "\\textquoteleft");
+defineSymbol(symbols_text, main, symbols_textord, "\u2019", "'");
+defineSymbol(symbols_text, main, symbols_textord, "\u2019", "\\textquoteright");
+defineSymbol(symbols_text, main, symbols_textord, "\u201C", "``");
+defineSymbol(symbols_text, main, symbols_textord, "\u201C", "\\textquotedblleft");
+defineSymbol(symbols_text, main, symbols_textord, "\u201D", "''");
+defineSymbol(symbols_text, main, symbols_textord, "\u201D", "\\textquotedblright"); //  \degree from gensymb package
+
+defineSymbol(symbols_math, main, symbols_textord, "\xB0", "\\degree", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\degree"); // \textdegree from inputenc package
+
+defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math
+// mode, but among our fonts, only Main-Italic defines this character "163".
+
+defineSymbol(symbols_math, main, mathord, "\xA3", "\\pounds");
+defineSymbol(symbols_math, main, mathord, "\xA3", "\\mathsterling", true);
+defineSymbol(symbols_text, main, mathord, "\xA3", "\\pounds");
+defineSymbol(symbols_text, main, mathord, "\xA3", "\\textsterling", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2720", "\\maltese");
+defineSymbol(symbols_text, ams, symbols_textord, "\u2720", "\\maltese");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", " ");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~"); // There are lots of symbols which are the same, so we add them in afterwards.
+// All of these are textords in math mode
+
+var mathTextSymbols = "0123456789/@.\"";
+
+for (var symbols_i = 0; symbols_i < mathTextSymbols.length; symbols_i++) {
+  var symbols_ch = mathTextSymbols.charAt(symbols_i);
+  defineSymbol(symbols_math, main, symbols_textord, symbols_ch, symbols_ch);
+} // All of these are textords in text mode
+
+
+var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,";
+
+for (var src_symbols_i = 0; src_symbols_i < textSymbols.length; src_symbols_i++) {
+  var _ch = textSymbols.charAt(src_symbols_i);
+
+  defineSymbol(symbols_text, main, symbols_textord, _ch, _ch);
+} // All of these are textords in text mode, and mathords in math mode
+
+
+var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+for (var symbols_i2 = 0; symbols_i2 < letters.length; symbols_i2++) {
+  var _ch2 = letters.charAt(symbols_i2);
+
+  defineSymbol(symbols_math, main, mathord, _ch2, _ch2);
+  defineSymbol(symbols_text, main, symbols_textord, _ch2, _ch2);
+} // Blackboard bold and script letters in Unicode range
+
+
+defineSymbol(symbols_math, ams, symbols_textord, "C", "\u2102"); // blackboard bold
+
+defineSymbol(symbols_text, ams, symbols_textord, "C", "\u2102");
+defineSymbol(symbols_math, ams, symbols_textord, "H", "\u210D");
+defineSymbol(symbols_text, ams, symbols_textord, "H", "\u210D");
+defineSymbol(symbols_math, ams, symbols_textord, "N", "\u2115");
+defineSymbol(symbols_text, ams, symbols_textord, "N", "\u2115");
+defineSymbol(symbols_math, ams, symbols_textord, "P", "\u2119");
+defineSymbol(symbols_text, ams, symbols_textord, "P", "\u2119");
+defineSymbol(symbols_math, ams, symbols_textord, "Q", "\u211A");
+defineSymbol(symbols_text, ams, symbols_textord, "Q", "\u211A");
+defineSymbol(symbols_math, ams, symbols_textord, "R", "\u211D");
+defineSymbol(symbols_text, ams, symbols_textord, "R", "\u211D");
+defineSymbol(symbols_math, ams, symbols_textord, "Z", "\u2124");
+defineSymbol(symbols_text, ams, symbols_textord, "Z", "\u2124");
+defineSymbol(symbols_math, main, mathord, "h", "\u210E"); // italic h, Planck constant
+
+defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters.
+// We support some letters in the Unicode range U+1D400 to U+1D7FF,
+// Mathematical Alphanumeric Symbols.
+// Some editors do not deal well with wide characters. So don't write the
+// string into this file. Instead, create the string from the surrogate pair.
+
+var symbols_wideChar = "";
+
+for (var symbols_i3 = 0; symbols_i3 < letters.length; symbols_i3++) {
+  var _ch3 = letters.charAt(symbols_i3); // The hex numbers in the next line are a surrogate pair.
+  // 0xD835 is the high surrogate for all letters in the range we support.
+  // 0xDC00 is the low surrogate for bold A.
+
+
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 + symbols_i3); // A-Z a-z bold
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 + symbols_i3); // A-Z a-z italic
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 + symbols_i3); // A-Z a-z bold italic
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 + symbols_i3); // A-Z a-z Fractur
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 + symbols_i3); // A-Z a-z sans-serif
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 + symbols_i3); // A-Z a-z sans bold
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 + symbols_i3); // A-Z a-z sans italic
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 + symbols_i3); // A-Z a-z monospace
+
+  defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+
+  if (symbols_i3 < 26) {
+    // KaTeX fonts have only capital letters for blackboard bold and script.
+    // See exception for k below.
+    symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 + symbols_i3); // A-Z double struck
+
+    defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+    defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+    symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C + symbols_i3); // A-Z script
+
+    defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+    defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+  } // TODO: Add bold script when it is supported by a KaTeX font.
+
+} // "k" is the only double struck lower case letter in the KaTeX fonts.
+
+
+symbols_wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
+
+defineSymbol(symbols_math, main, mathord, "k", symbols_wideChar);
+defineSymbol(symbols_text, main, symbols_textord, "k", symbols_wideChar); // Next, some wide character numerals
+
+for (var symbols_i4 = 0; symbols_i4 < 10; symbols_i4++) {
+  var _ch4 = symbols_i4.toString();
+
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE + symbols_i4); // 0-9 bold
+
+  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 + symbols_i4); // 0-9 sans serif
+
+  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC + symbols_i4); // 0-9 bold sans
+
+  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+  symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 + symbols_i4); // 0-9 monospace
+
+  defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+  defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+} // We add these Latin-1 letters as symbols for backwards-compatibility,
+// but they are not actually in the font, nor are they supported by the
+// Unicode accent mechanism, so they fall back to Times font and look ugly.
+// TODO(edemaine): Fix this.
+
+
+var extraLatin = "ÇÐÞçþ";
+
+for (var _i5 = 0; _i5 < extraLatin.length; _i5++) {
+  var _ch5 = extraLatin.charAt(_i5);
+
+  defineSymbol(symbols_math, main, mathord, _ch5, _ch5);
+  defineSymbol(symbols_text, main, symbols_textord, _ch5, _ch5);
+}
+
+defineSymbol(symbols_text, main, symbols_textord, "ð", "ð"); // Unicode versions of existing characters
+
+defineSymbol(symbols_text, main, symbols_textord, "\u2013", "–");
+defineSymbol(symbols_text, main, symbols_textord, "\u2014", "—");
+defineSymbol(symbols_text, main, symbols_textord, "\u2018", "‘");
+defineSymbol(symbols_text, main, symbols_textord, "\u2019", "’");
+defineSymbol(symbols_text, main, symbols_textord, "\u201C", "“");
+defineSymbol(symbols_text, main, symbols_textord, "\u201D", "”");
+// CONCATENATED MODULE: ./src/wide-character.js
+/**
+ * This file provides support for Unicode range U+1D400 to U+1D7FF,
+ * Mathematical Alphanumeric Symbols.
+ *
+ * Function wideCharacterFont takes a wide character as input and returns
+ * the font information necessary to render it properly.
+ */
+
+/**
+ * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf
+ * That document sorts characters into groups by font type, say bold or italic.
+ *
+ * In the arrays below, each subarray consists three elements:
+ *      * The CSS class of that group when in math mode.
+ *      * The CSS class of that group when in text mode.
+ *      * The font name, so that KaTeX can get font metrics.
+ */
+
+var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright
+["mathbf", "textbf", "Main-Bold"], // a-z bold upright
+["mathdefault", "textit", "Math-Italic"], // A-Z italic
+["mathdefault", "textit", "Math-Italic"], // a-z italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic
+// Map fancy A-Z letters to script, not calligraphic.
+// This aligns with unicode-math and math fonts (except Cambria Math).
+["mathscr", "textscr", "Script-Regular"], // A-Z script
+["", "", ""], // a-z script.  No font
+["", "", ""], // A-Z bold script. No font
+["", "", ""], // a-z bold script. No font
+["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur
+["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur
+["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck
+["mathbb", "textbb", "AMS-Regular"], // k double-struck
+["", "", ""], // A-Z bold Fraktur No font metrics
+["", "", ""], // a-z bold Fraktur.   No font.
+["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif
+["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif
+["", "", ""], // A-Z bold italic sans. No font
+["", "", ""], // a-z bold italic sans. No font
+["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace
+["mathtt", "texttt", "Typewriter-Regular"]];
+var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold
+["", "", ""], // 0-9 double-struck. No KaTeX font.
+["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif
+["mathtt", "texttt", "Typewriter-Regular"]];
+var wide_character_wideCharacterFont = function wideCharacterFont(wideChar, mode) {
+  // IE doesn't support codePointAt(). So work with the surrogate pair.
+  var H = wideChar.charCodeAt(0); // high surrogate
+
+  var L = wideChar.charCodeAt(1); // low surrogate
+
+  var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
+  var j = mode === "math" ? 0 : 1; // column index for CSS class.
+
+  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {
+    // wideLatinLetterData contains exactly 26 chars on each row.
+    // So we can calculate the relevant row. No traverse necessary.
+    var i = Math.floor((codePoint - 0x1D400) / 26);
+    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];
+  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {
+    // Numerals, ten per row.
+    var _i = Math.floor((codePoint - 0x1D7CE) / 10);
+
+    return [wideNumeralData[_i][2], wideNumeralData[_i][j]];
+  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {
+    // dotless i or j
+    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];
+  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {
+    // Greek letters. Not supported, yet.
+    return ["", ""];
+  } else {
+    // We don't support any wide characters outside 1D400–1D7FF.
+    throw new src_ParseError("Unsupported character: " + wideChar);
+  }
+};
+// CONCATENATED MODULE: ./src/Options.js
+/**
+ * This file contains information about the options that the Parser carries
+ * around with it while parsing. Data is held in an `Options` object, and when
+ * recursing, a new `Options` object can be created with the `.with*` and
+ * `.reset` functions.
+ */
+
+var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].
+// The size mappings are taken from TeX with \normalsize=10pt.
+[1, 1, 1], // size1: [5, 5, 5]              \tiny
+[2, 1, 1], // size2: [6, 5, 5]
+[3, 1, 1], // size3: [7, 5, 5]              \scriptsize
+[4, 2, 1], // size4: [8, 6, 5]              \footnotesize
+[5, 2, 1], // size5: [9, 6, 5]              \small
+[6, 3, 1], // size6: [10, 7, 5]             \normalsize
+[7, 4, 2], // size7: [12, 8, 6]             \large
+[8, 6, 3], // size8: [14.4, 10, 7]          \Large
+[9, 7, 6], // size9: [17.28, 12, 10]        \LARGE
+[10, 8, 7], // size10: [20.74, 14.4, 12]     \huge
+[11, 10, 9]];
+var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if
+// you change size indexes, change that function.
+0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];
+
+var sizeAtStyle = function sizeAtStyle(size, style) {
+  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
+}; // In these types, "" (empty string) means "no change".
+
+
+/**
+ * This is the main options class. It contains the current style, size, color,
+ * and font.
+ *
+ * Options objects should not be modified. To create a new Options with
+ * different properties, call a `.having*` method.
+ */
+var Options_Options =
+/*#__PURE__*/
+function () {
+  // A font family applies to a group of fonts (i.e. SansSerif), while a font
+  // represents a specific font (i.e. SansSerif Bold).
+  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
+
+  /**
+   * The base size index.
+   */
+  function Options(data) {
+    this.style = void 0;
+    this.color = void 0;
+    this.size = void 0;
+    this.textSize = void 0;
+    this.phantom = void 0;
+    this.font = void 0;
+    this.fontFamily = void 0;
+    this.fontWeight = void 0;
+    this.fontShape = void 0;
+    this.sizeMultiplier = void 0;
+    this.maxSize = void 0;
+    this.minRuleThickness = void 0;
+    this._fontMetrics = void 0;
+    this.style = data.style;
+    this.color = data.color;
+    this.size = data.size || Options.BASESIZE;
+    this.textSize = data.textSize || this.size;
+    this.phantom = !!data.phantom;
+    this.font = data.font || "";
+    this.fontFamily = data.fontFamily || "";
+    this.fontWeight = data.fontWeight || '';
+    this.fontShape = data.fontShape || '';
+    this.sizeMultiplier = sizeMultipliers[this.size - 1];
+    this.maxSize = data.maxSize;
+    this.minRuleThickness = data.minRuleThickness;
+    this._fontMetrics = undefined;
+  }
+  /**
+   * Returns a new options object with the same properties as "this".  Properties
+   * from "extension" will be copied to the new options object.
+   */
+
+
+  var _proto = Options.prototype;
+
+  _proto.extend = function extend(extension) {
+    var data = {
+      style: this.style,
+      size: this.size,
+      textSize: this.textSize,
+      color: this.color,
+      phantom: this.phantom,
+      font: this.font,
+      fontFamily: this.fontFamily,
+      fontWeight: this.fontWeight,
+      fontShape: this.fontShape,
+      maxSize: this.maxSize,
+      minRuleThickness: this.minRuleThickness
+    };
+
+    for (var key in extension) {
+      if (extension.hasOwnProperty(key)) {
+        data[key] = extension[key];
+      }
+    }
+
+    return new Options(data);
+  }
+  /**
+   * Return an options object with the given style. If `this.style === style`,
+   * returns `this`.
+   */
+  ;
+
+  _proto.havingStyle = function havingStyle(style) {
+    if (this.style === style) {
+      return this;
+    } else {
+      return this.extend({
+        style: style,
+        size: sizeAtStyle(this.textSize, style)
+      });
+    }
+  }
+  /**
+   * Return an options object with a cramped version of the current style. If
+   * the current style is cramped, returns `this`.
+   */
+  ;
+
+  _proto.havingCrampedStyle = function havingCrampedStyle() {
+    return this.havingStyle(this.style.cramp());
+  }
+  /**
+   * Return an options object with the given size and in at least `\textstyle`.
+   * Returns `this` if appropriate.
+   */
+  ;
+
+  _proto.havingSize = function havingSize(size) {
+    if (this.size === size && this.textSize === size) {
+      return this;
+    } else {
+      return this.extend({
+        style: this.style.text(),
+        size: size,
+        textSize: size,
+        sizeMultiplier: sizeMultipliers[size - 1]
+      });
+    }
+  }
+  /**
+   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
+   * changes to at least `\textstyle`.
+   */
+  ;
+
+  _proto.havingBaseStyle = function havingBaseStyle(style) {
+    style = style || this.style.text();
+    var wantSize = sizeAtStyle(Options.BASESIZE, style);
+
+    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {
+      return this;
+    } else {
+      return this.extend({
+        style: style,
+        size: wantSize
+      });
+    }
+  }
+  /**
+   * Remove the effect of sizing changes such as \Huge.
+   * Keep the effect of the current style, such as \scriptstyle.
+   */
+  ;
+
+  _proto.havingBaseSizing = function havingBaseSizing() {
+    var size;
+
+    switch (this.style.id) {
+      case 4:
+      case 5:
+        size = 3; // normalsize in scriptstyle
+
+        break;
+
+      case 6:
+      case 7:
+        size = 1; // normalsize in scriptscriptstyle
+
+        break;
+
+      default:
+        size = 6;
+      // normalsize in textstyle or displaystyle
+    }
+
+    return this.extend({
+      style: this.style.text(),
+      size: size
+    });
+  }
+  /**
+   * Create a new options object with the given color.
+   */
+  ;
+
+  _proto.withColor = function withColor(color) {
+    return this.extend({
+      color: color
+    });
+  }
+  /**
+   * Create a new options object with "phantom" set to true.
+   */
+  ;
+
+  _proto.withPhantom = function withPhantom() {
+    return this.extend({
+      phantom: true
+    });
+  }
+  /**
+   * Creates a new options object with the given math font or old text font.
+   * @type {[type]}
+   */
+  ;
+
+  _proto.withFont = function withFont(font) {
+    return this.extend({
+      font: font
+    });
+  }
+  /**
+   * Create a new options objects with the given fontFamily.
+   */
+  ;
+
+  _proto.withTextFontFamily = function withTextFontFamily(fontFamily) {
+    return this.extend({
+      fontFamily: fontFamily,
+      font: ""
+    });
+  }
+  /**
+   * Creates a new options object with the given font weight
+   */
+  ;
+
+  _proto.withTextFontWeight = function withTextFontWeight(fontWeight) {
+    return this.extend({
+      fontWeight: fontWeight,
+      font: ""
+    });
+  }
+  /**
+   * Creates a new options object with the given font weight
+   */
+  ;
+
+  _proto.withTextFontShape = function withTextFontShape(fontShape) {
+    return this.extend({
+      fontShape: fontShape,
+      font: ""
+    });
+  }
+  /**
+   * Return the CSS sizing classes required to switch from enclosing options
+   * `oldOptions` to `this`. Returns an array of classes.
+   */
+  ;
+
+  _proto.sizingClasses = function sizingClasses(oldOptions) {
+    if (oldOptions.size !== this.size) {
+      return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
+    } else {
+      return [];
+    }
+  }
+  /**
+   * Return the CSS sizing classes required to switch to the base size. Like
+   * `this.havingSize(BASESIZE).sizingClasses(this)`.
+   */
+  ;
+
+  _proto.baseSizingClasses = function baseSizingClasses() {
+    if (this.size !== Options.BASESIZE) {
+      return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];
+    } else {
+      return [];
+    }
+  }
+  /**
+   * Return the font metrics for this size.
+   */
+  ;
+
+  _proto.fontMetrics = function fontMetrics() {
+    if (!this._fontMetrics) {
+      this._fontMetrics = getGlobalMetrics(this.size);
+    }
+
+    return this._fontMetrics;
+  }
+  /**
+   * Gets the CSS color of the current options object
+   */
+  ;
+
+  _proto.getColor = function getColor() {
+    if (this.phantom) {
+      return "transparent";
+    } else {
+      return this.color;
+    }
+  };
+
+  return Options;
+}();
+
+Options_Options.BASESIZE = 6;
+/* harmony default export */ var src_Options = (Options_Options);
+// CONCATENATED MODULE: ./src/units.js
+/**
+ * This file does conversion between units.  In particular, it provides
+ * calculateSize to convert other units into ems.
+ */
+
+ // This table gives the number of TeX pts in one of each *absolute* TeX unit.
+// Thus, multiplying a length by this number converts the length from units
+// into pts.  Dividing the result by ptPerEm gives the number of ems
+// *assuming* a font size of ptPerEm (normal size, normal style).
+
+var ptPerUnit = {
+  // https://en.wikibooks.org/wiki/LaTeX/Lengths and
+  // https://tex.stackexchange.com/a/8263
+  "pt": 1,
+  // TeX point
+  "mm": 7227 / 2540,
+  // millimeter
+  "cm": 7227 / 254,
+  // centimeter
+  "in": 72.27,
+  // inch
+  "bp": 803 / 800,
+  // big (PostScript) points
+  "pc": 12,
+  // pica
+  "dd": 1238 / 1157,
+  // didot
+  "cc": 14856 / 1157,
+  // cicero (12 didot)
+  "nd": 685 / 642,
+  // new didot
+  "nc": 1370 / 107,
+  // new cicero (12 new didot)
+  "sp": 1 / 65536,
+  // scaled point (TeX's internal smallest unit)
+  // https://tex.stackexchange.com/a/41371
+  "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
+
+}; // Dictionary of relative units, for fast validity testing.
+
+var relativeUnit = {
+  "ex": true,
+  "em": true,
+  "mu": true
+};
+
+/**
+ * Determine whether the specified unit (either a string defining the unit
+ * or a "size" parse node containing a unit field) is valid.
+ */
+var validUnit = function validUnit(unit) {
+  if (typeof unit !== "string") {
+    unit = unit.unit;
+  }
+
+  return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
+};
+/*
+ * Convert a "size" parse node (with numeric "number" and string "unit" fields,
+ * as parsed by functions.js argType "size") into a CSS em value for the
+ * current style/scale.  `options` gives the current options.
+ */
+
+var units_calculateSize = function calculateSize(sizeValue, options) {
+  var scale;
+
+  if (sizeValue.unit in ptPerUnit) {
+    // Absolute units
+    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt
+    / options.fontMetrics().ptPerEm // Convert pt to CSS em
+    / options.sizeMultiplier; // Unscale to make absolute units
+  } else if (sizeValue.unit === "mu") {
+    // `mu` units scale with scriptstyle/scriptscriptstyle.
+    scale = options.fontMetrics().cssEmPerMu;
+  } else {
+    // Other relative units always refer to the *textstyle* font
+    // in the current size.
+    var unitOptions;
+
+    if (options.style.isTight()) {
+      // isTight() means current style is script/scriptscript.
+      unitOptions = options.havingStyle(options.style.text());
+    } else {
+      unitOptions = options;
+    } // TODO: In TeX these units are relative to the quad of the current
+    // *text* font, e.g. cmr10. KaTeX instead uses values from the
+    // comparably-sized *Computer Modern symbol* font. At 10pt, these
+    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
+    // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
+    // TeX \showlists shows a kern of 1.13889 * fontsize;
+    // KaTeX shows a kern of 1.171 * fontsize.
+
+
+    if (sizeValue.unit === "ex") {
+      scale = unitOptions.fontMetrics().xHeight;
+    } else if (sizeValue.unit === "em") {
+      scale = unitOptions.fontMetrics().quad;
+    } else {
+      throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'");
+    }
+
+    if (unitOptions !== options) {
+      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
+    }
+  }
+
+  return Math.min(sizeValue.number * scale, options.maxSize);
+};
+// CONCATENATED MODULE: ./src/buildCommon.js
+/* eslint no-console:0 */
+
+/**
+ * This module contains general functions that can be used for building
+ * different kinds of domTree nodes in a consistent manner.
+ */
+
+
+
+
+
+
+
+// The following have to be loaded from Main-Italic font, using class mathit
+var mathitLetters = ["\\imath", "ı", // dotless i
+"\\jmath", "ȷ", // dotless j
+"\\pounds", "\\mathsterling", "\\textsterling", "£"];
+/**
+ * Looks up the given symbol in fontMetrics, after applying any symbol
+ * replacements defined in symbol.js
+ */
+
+var buildCommon_lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.
+fontName, mode) {
+  // Replace the value with its replaced value from symbol.js
+  if (src_symbols[mode][value] && src_symbols[mode][value].replace) {
+    value = src_symbols[mode][value].replace;
+  }
+
+  return {
+    value: value,
+    metrics: getCharacterMetrics(value, fontName, mode)
+  };
+};
+/**
+ * Makes a symbolNode after translation via the list of symbols in symbols.js.
+ * Correctly pulls out metrics for the character, and optionally takes a list of
+ * classes to be attached to the node.
+ *
+ * TODO: make argument order closer to makeSpan
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ * TODO(#953): Make `options` mandatory and always pass it in.
+ */
+
+
+var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {
+  var lookup = buildCommon_lookupSymbol(value, fontName, mode);
+  var metrics = lookup.metrics;
+  value = lookup.value;
+  var symbolNode;
+
+  if (metrics) {
+    var italic = metrics.italic;
+
+    if (mode === "text" || options && options.font === "mathit") {
+      italic = 0;
+    }
+
+    symbolNode = new domTree_SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
+  } else {
+    // TODO(emily): Figure out a good way to only print this in development
+    typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'"));
+    symbolNode = new domTree_SymbolNode(value, 0, 0, 0, 0, 0, classes);
+  }
+
+  if (options) {
+    symbolNode.maxFontSize = options.sizeMultiplier;
+
+    if (options.style.isTight()) {
+      symbolNode.classes.push("mtight");
+    }
+
+    var color = options.getColor();
+
+    if (color) {
+      symbolNode.style.color = color;
+    }
+  }
+
+  return symbolNode;
+};
+/**
+ * Makes a symbol in Main-Regular or AMS-Regular.
+ * Used for rel, bin, open, close, inner, and punct.
+ */
+
+
+var buildCommon_mathsym = function mathsym(value, mode, options, classes) {
+  if (classes === void 0) {
+    classes = [];
+  }
+
+  // Decide what font to render the symbol in by its entry in the symbols
+  // table.
+  // Have a special case for when the value = \ because the \ is used as a
+  // textord in unsupported command errors but cannot be parsed as a regular
+  // text ordinal and is therefore not present as a symbol in the symbols
+  // table for text, as well as a special case for boldsymbol because it
+  // can be used for bold + and -
+  if (options.font === "boldsymbol" && buildCommon_lookupSymbol(value, "Main-Bold", mode).metrics) {
+    return buildCommon_makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
+  } else if (value === "\\" || src_symbols[mode][value].font === "main") {
+    return buildCommon_makeSymbol(value, "Main-Regular", mode, options, classes);
+  } else {
+    return buildCommon_makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
+  }
+};
+/**
+ * Determines which of the two font names (Main-Italic and Math-Italic) and
+ * corresponding style tags (maindefault or mathit) to use for default math font,
+ * depending on the symbol.
+ */
+
+
+var buildCommon_mathdefault = function mathdefault(value, mode, options, classes) {
+  if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we
+  // need to use Main-Italic instead
+  utils.contains(mathitLetters, value)) {
+    return {
+      fontName: "Main-Italic",
+      fontClass: "mathit"
+    };
+  } else {
+    return {
+      fontName: "Math-Italic",
+      fontClass: "mathdefault"
+    };
+  }
+};
+/**
+ * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic)
+ * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font
+ * "mathnormal", depending on the symbol.  Use this function instead of fontMap for
+ * font "mathnormal".
+ */
+
+
+var buildCommon_mathnormal = function mathnormal(value, mode, options, classes) {
+  if (utils.contains(mathitLetters, value)) {
+    return {
+      fontName: "Main-Italic",
+      fontClass: "mathit"
+    };
+  } else if (/[0-9]/.test(value.charAt(0))) {
+    return {
+      fontName: "Caligraphic-Regular",
+      fontClass: "mathcal"
+    };
+  } else {
+    return {
+      fontName: "Math-Italic",
+      fontClass: "mathdefault"
+    };
+  }
+};
+/**
+ * Determines which of the two font names (Main-Bold and Math-BoldItalic) and
+ * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",
+ * depending on the symbol.  Use this function instead of fontMap for font
+ * "boldsymbol".
+ */
+
+
+var boldsymbol = function boldsymbol(value, mode, options, classes) {
+  if (buildCommon_lookupSymbol(value, "Math-BoldItalic", mode).metrics) {
+    return {
+      fontName: "Math-BoldItalic",
+      fontClass: "boldsymbol"
+    };
+  } else {
+    // Some glyphs do not exist in Math-BoldItalic so we need to use
+    // Main-Bold instead.
+    return {
+      fontName: "Main-Bold",
+      fontClass: "mathbf"
+    };
+  }
+};
+/**
+ * Makes either a mathord or textord in the correct font and color.
+ */
+
+
+var buildCommon_makeOrd = function makeOrd(group, options, type) {
+  var mode = group.mode;
+  var text = group.text;
+  var classes = ["mord"]; // Math mode or Old font (i.e. \rm)
+
+  var isFont = mode === "math" || mode === "text" && options.font;
+  var fontOrFamily = isFont ? options.font : options.fontFamily;
+
+  if (text.charCodeAt(0) === 0xD835) {
+    // surrogate pairs get special treatment
+    var _wideCharacterFont = wide_character_wideCharacterFont(text, mode),
+        wideFontName = _wideCharacterFont[0],
+        wideFontClass = _wideCharacterFont[1];
+
+    return buildCommon_makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));
+  } else if (fontOrFamily) {
+    var fontName;
+    var fontClasses;
+
+    if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") {
+      var fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : buildCommon_mathnormal(text, mode, options, classes);
+      fontName = fontData.fontName;
+      fontClasses = [fontData.fontClass];
+    } else if (utils.contains(mathitLetters, text)) {
+      fontName = "Main-Italic";
+      fontClasses = ["mathit"];
+    } else if (isFont) {
+      fontName = fontMap[fontOrFamily].fontName;
+      fontClasses = [fontOrFamily];
+    } else {
+      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);
+      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];
+    }
+
+    if (buildCommon_lookupSymbol(text, fontName, mode).metrics) {
+      return buildCommon_makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));
+    } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") {
+      // Deconstruct ligatures in monospace fonts (\texttt, \tt).
+      var parts = [];
+
+      for (var i = 0; i < text.length; i++) {
+        parts.push(buildCommon_makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));
+      }
+
+      return buildCommon_makeFragment(parts);
+    }
+  } // Makes a symbol in the default font for mathords and textords.
+
+
+  if (type === "mathord") {
+    var fontLookup = buildCommon_mathdefault(text, mode, options, classes);
+    return buildCommon_makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
+  } else if (type === "textord") {
+    var font = src_symbols[mode][text] && src_symbols[mode][text].font;
+
+    if (font === "ams") {
+      var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);
+
+      return buildCommon_makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));
+    } else if (font === "main" || !font) {
+      var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);
+
+      return buildCommon_makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));
+    } else {
+      // fonts added by plugins
+      var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class
+
+
+      return buildCommon_makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));
+    }
+  } else {
+    throw new Error("unexpected type: " + type + " in makeOrd");
+  }
+};
+/**
+ * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,
+ * and styles.
+ */
+
+
+var buildCommon_canCombine = function canCombine(prev, next) {
+  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {
+    return false;
+  }
+
+  for (var style in prev.style) {
+    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
+      return false;
+    }
+  }
+
+  for (var _style in next.style) {
+    if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {
+      return false;
+    }
+  }
+
+  return true;
+};
+/**
+ * Combine consequetive domTree.symbolNodes into a single symbolNode.
+ * Note: this function mutates the argument.
+ */
+
+
+var buildCommon_tryCombineChars = function tryCombineChars(chars) {
+  for (var i = 0; i < chars.length - 1; i++) {
+    var prev = chars[i];
+    var next = chars[i + 1];
+
+    if (prev instanceof domTree_SymbolNode && next instanceof domTree_SymbolNode && buildCommon_canCombine(prev, next)) {
+      prev.text += next.text;
+      prev.height = Math.max(prev.height, next.height);
+      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use
+      // it to add padding to the right of the span created from
+      // the combined characters.
+
+      prev.italic = next.italic;
+      chars.splice(i + 1, 1);
+      i--;
+    }
+  }
+
+  return chars;
+};
+/**
+ * Calculate the height, depth, and maxFontSize of an element based on its
+ * children.
+ */
+
+
+var sizeElementFromChildren = function sizeElementFromChildren(elem) {
+  var height = 0;
+  var depth = 0;
+  var maxFontSize = 0;
+
+  for (var i = 0; i < elem.children.length; i++) {
+    var child = elem.children[i];
+
+    if (child.height > height) {
+      height = child.height;
+    }
+
+    if (child.depth > depth) {
+      depth = child.depth;
+    }
+
+    if (child.maxFontSize > maxFontSize) {
+      maxFontSize = child.maxFontSize;
+    }
+  }
+
+  elem.height = height;
+  elem.depth = depth;
+  elem.maxFontSize = maxFontSize;
+};
+/**
+ * Makes a span with the given list of classes, list of children, and options.
+ *
+ * TODO(#953): Ensure that `options` is always provided (currently some call
+ * sites don't pass it) and make the type below mandatory.
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ */
+
+
+var buildCommon_makeSpan = function makeSpan(classes, children, options, style) {
+  var span = new domTree_Span(classes, children, options, style);
+  sizeElementFromChildren(span);
+  return span;
+}; // SVG one is simpler -- doesn't require height, depth, max-font setting.
+// This is also a separate method for typesafety.
+
+
+var buildCommon_makeSvgSpan = function makeSvgSpan(classes, children, options, style) {
+  return new domTree_Span(classes, children, options, style);
+};
+
+var makeLineSpan = function makeLineSpan(className, options, thickness) {
+  var line = buildCommon_makeSpan([className], [], options);
+  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
+  line.style.borderBottomWidth = line.height + "em";
+  line.maxFontSize = 1.0;
+  return line;
+};
+/**
+ * Makes an anchor with the given href, list of classes, list of children,
+ * and options.
+ */
+
+
+var buildCommon_makeAnchor = function makeAnchor(href, classes, children, options) {
+  var anchor = new domTree_Anchor(href, classes, children, options);
+  sizeElementFromChildren(anchor);
+  return anchor;
+};
+/**
+ * Makes a document fragment with the given list of children.
+ */
+
+
+var buildCommon_makeFragment = function makeFragment(children) {
+  var fragment = new tree_DocumentFragment(children);
+  sizeElementFromChildren(fragment);
+  return fragment;
+};
+/**
+ * Wraps group in a span if it's a document fragment, allowing to apply classes
+ * and styles
+ */
+
+
+var buildCommon_wrapFragment = function wrapFragment(group, options) {
+  if (group instanceof tree_DocumentFragment) {
+    return buildCommon_makeSpan([], [group], options);
+  }
+
+  return group;
+}; // These are exact object types to catch typos in the names of the optional fields.
+
+
+// Computes the updated `children` list and the overall depth.
+//
+// This helper function for makeVList makes it easier to enforce type safety by
+// allowing early exits (returns) in the logic.
+var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {
+  if (params.positionType === "individualShift") {
+    var oldChildren = params.children;
+    var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be
+    // shifted to the correct specified shift
+
+    var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
+
+    var currPos = _depth;
+
+    for (var i = 1; i < oldChildren.length; i++) {
+      var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
+      var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
+      currPos = currPos + diff;
+      children.push({
+        type: "kern",
+        size: size
+      });
+      children.push(oldChildren[i]);
+    }
+
+    return {
+      children: children,
+      depth: _depth
+    };
+  }
+
+  var depth;
+
+  if (params.positionType === "top") {
+    // We always start at the bottom, so calculate the bottom by adding up
+    // all the sizes
+    var bottom = params.positionData;
+
+    for (var _i = 0; _i < params.children.length; _i++) {
+      var child = params.children[_i];
+      bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
+    }
+
+    depth = bottom;
+  } else if (params.positionType === "bottom") {
+    depth = -params.positionData;
+  } else {
+    var firstChild = params.children[0];
+
+    if (firstChild.type !== "elem") {
+      throw new Error('First child must have type "elem".');
+    }
+
+    if (params.positionType === "shift") {
+      depth = -firstChild.elem.depth - params.positionData;
+    } else if (params.positionType === "firstBaseline") {
+      depth = -firstChild.elem.depth;
+    } else {
+      throw new Error("Invalid positionType " + params.positionType + ".");
+    }
+  }
+
+  return {
+    children: params.children,
+    depth: depth
+  };
+};
+/**
+ * Makes a vertical list by stacking elements and kerns on top of each other.
+ * Allows for many different ways of specifying the positioning method.
+ *
+ * See VListParam documentation above.
+ */
+
+
+var buildCommon_makeVList = function makeVList(params, options) {
+  var _getVListChildrenAndD = getVListChildrenAndDepth(params),
+      children = _getVListChildrenAndD.children,
+      depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to
+  // each item, where it will determine the item's baseline. Since it has
+  // `overflow:hidden`, the strut's top edge will sit on the item's line box's
+  // top edge and the strut's bottom edge will sit on the item's baseline,
+  // with no additional line-height spacing. This allows the item baseline to
+  // be positioned precisely without worrying about font ascent and
+  // line-height.
+
+
+  var pstrutSize = 0;
+
+  for (var i = 0; i < children.length; i++) {
+    var child = children[i];
+
+    if (child.type === "elem") {
+      var elem = child.elem;
+      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
+    }
+  }
+
+  pstrutSize += 2;
+  var pstrut = buildCommon_makeSpan(["pstrut"], []);
+  pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets
+
+  var realChildren = [];
+  var minPos = depth;
+  var maxPos = depth;
+  var currPos = depth;
+
+  for (var _i2 = 0; _i2 < children.length; _i2++) {
+    var _child = children[_i2];
+
+    if (_child.type === "kern") {
+      currPos += _child.size;
+    } else {
+      var _elem = _child.elem;
+      var classes = _child.wrapperClasses || [];
+      var style = _child.wrapperStyle || {};
+      var childWrap = buildCommon_makeSpan(classes, [pstrut, _elem], undefined, style);
+      childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em";
+
+      if (_child.marginLeft) {
+        childWrap.style.marginLeft = _child.marginLeft;
+      }
+
+      if (_child.marginRight) {
+        childWrap.style.marginRight = _child.marginRight;
+      }
+
+      realChildren.push(childWrap);
+      currPos += _elem.height + _elem.depth;
+    }
+
+    minPos = Math.min(minPos, currPos);
+    maxPos = Math.max(maxPos, currPos);
+  } // The vlist contents go in a table-cell with `vertical-align:bottom`.
+  // This cell's bottom edge will determine the containing table's baseline
+  // without overly expanding the containing line-box.
+
+
+  var vlist = buildCommon_makeSpan(["vlist"], realChildren);
+  vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth.
+
+  var rows;
+
+  if (minPos < 0) {
+    // We will define depth in an empty span with display: table-cell.
+    // It should render with the height that we define. But Chrome, in
+    // contenteditable mode only, treats that span as if it contains some
+    // text content. And that min-height over-rides our desired height.
+    // So we put another empty span inside the depth strut span.
+    var emptySpan = buildCommon_makeSpan([], []);
+    var depthStrut = buildCommon_makeSpan(["vlist"], [emptySpan]);
+    depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it
+    // puts the bottom of the *second* row on the baseline.
+
+    var topStrut = buildCommon_makeSpan(["vlist-s"], [new domTree_SymbolNode("\u200B")]);
+    rows = [buildCommon_makeSpan(["vlist-r"], [vlist, topStrut]), buildCommon_makeSpan(["vlist-r"], [depthStrut])];
+  } else {
+    rows = [buildCommon_makeSpan(["vlist-r"], [vlist])];
+  }
+
+  var vtable = buildCommon_makeSpan(["vlist-t"], rows);
+
+  if (rows.length === 2) {
+    vtable.classes.push("vlist-t2");
+  }
+
+  vtable.height = maxPos;
+  vtable.depth = -minPos;
+  return vtable;
+}; // Glue is a concept from TeX which is a flexible space between elements in
+// either a vertical or horizontal list. In KaTeX, at least for now, it's
+// static space between elements in a horizontal layout.
+
+
+var buildCommon_makeGlue = function makeGlue(measurement, options) {
+  // Make an empty span for the space
+  var rule = buildCommon_makeSpan(["mspace"], [], options);
+  var size = units_calculateSize(measurement, options);
+  rule.style.marginRight = size + "em";
+  return rule;
+}; // Takes font options, and returns the appropriate fontLookup name
+
+
+var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {
+  var baseFontName = "";
+
+  switch (fontFamily) {
+    case "amsrm":
+      baseFontName = "AMS";
+      break;
+
+    case "textrm":
+      baseFontName = "Main";
+      break;
+
+    case "textsf":
+      baseFontName = "SansSerif";
+      break;
+
+    case "texttt":
+      baseFontName = "Typewriter";
+      break;
+
+    default:
+      baseFontName = fontFamily;
+    // use fonts added by a plugin
+  }
+
+  var fontStylesName;
+
+  if (fontWeight === "textbf" && fontShape === "textit") {
+    fontStylesName = "BoldItalic";
+  } else if (fontWeight === "textbf") {
+    fontStylesName = "Bold";
+  } else if (fontWeight === "textit") {
+    fontStylesName = "Italic";
+  } else {
+    fontStylesName = "Regular";
+  }
+
+  return baseFontName + "-" + fontStylesName;
+};
+/**
+ * Maps TeX font commands to objects containing:
+ * - variant: string used for "mathvariant" attribute in buildMathML.js
+ * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
+ */
+// A map between tex font commands an MathML mathvariant attribute values
+
+
+var fontMap = {
+  // styles
+  "mathbf": {
+    variant: "bold",
+    fontName: "Main-Bold"
+  },
+  "mathrm": {
+    variant: "normal",
+    fontName: "Main-Regular"
+  },
+  "textit": {
+    variant: "italic",
+    fontName: "Main-Italic"
+  },
+  "mathit": {
+    variant: "italic",
+    fontName: "Main-Italic"
+  },
+  // Default math font, "mathnormal" and "boldsymbol" are missing because they
+  // require the use of several fonts: Main-Italic and Math-Italic for default
+  // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and
+  // Math-BoldItalic and Main-Bold for "boldsymbol".  This is handled by a
+  // special case in makeOrd which ends up calling mathdefault, mathnormal,
+  // and boldsymbol.
+  // families
+  "mathbb": {
+    variant: "double-struck",
+    fontName: "AMS-Regular"
+  },
+  "mathcal": {
+    variant: "script",
+    fontName: "Caligraphic-Regular"
+  },
+  "mathfrak": {
+    variant: "fraktur",
+    fontName: "Fraktur-Regular"
+  },
+  "mathscr": {
+    variant: "script",
+    fontName: "Script-Regular"
+  },
+  "mathsf": {
+    variant: "sans-serif",
+    fontName: "SansSerif-Regular"
+  },
+  "mathtt": {
+    variant: "monospace",
+    fontName: "Typewriter-Regular"
+  }
+};
+var svgData = {
+  //   path, width, height
+  vec: ["vec", 0.471, 0.714],
+  // values from the font glyph
+  oiintSize1: ["oiintSize1", 0.957, 0.499],
+  // oval to overlay the integrand
+  oiintSize2: ["oiintSize2", 1.472, 0.659],
+  oiiintSize1: ["oiiintSize1", 1.304, 0.499],
+  oiiintSize2: ["oiiintSize2", 1.98, 0.659]
+};
+
+var buildCommon_staticSvg = function staticSvg(value, options) {
+  // Create a span with inline SVG for the element.
+  var _svgData$value = svgData[value],
+      pathName = _svgData$value[0],
+      width = _svgData$value[1],
+      height = _svgData$value[2];
+  var path = new domTree_PathNode(pathName);
+  var svgNode = new SvgNode([path], {
+    "width": width + "em",
+    "height": height + "em",
+    // Override CSS rule `.katex svg { width: 100% }`
+    "style": "width:" + width + "em",
+    "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,
+    "preserveAspectRatio": "xMinYMin"
+  });
+  var span = buildCommon_makeSvgSpan(["overlay"], [svgNode], options);
+  span.height = height;
+  span.style.height = height + "em";
+  span.style.width = width + "em";
+  return span;
+};
+
+/* harmony default export */ var buildCommon = ({
+  fontMap: fontMap,
+  makeSymbol: buildCommon_makeSymbol,
+  mathsym: buildCommon_mathsym,
+  makeSpan: buildCommon_makeSpan,
+  makeSvgSpan: buildCommon_makeSvgSpan,
+  makeLineSpan: makeLineSpan,
+  makeAnchor: buildCommon_makeAnchor,
+  makeFragment: buildCommon_makeFragment,
+  wrapFragment: buildCommon_wrapFragment,
+  makeVList: buildCommon_makeVList,
+  makeOrd: buildCommon_makeOrd,
+  makeGlue: buildCommon_makeGlue,
+  staticSvg: buildCommon_staticSvg,
+  svgData: svgData,
+  tryCombineChars: buildCommon_tryCombineChars
+});
+// CONCATENATED MODULE: ./src/parseNode.js
+
+
+/**
+ * Asserts that the node is of the given type and returns it with stricter
+ * typing. Throws if the node's type does not match.
+ */
+function assertNodeType(node, type) {
+  var typedNode = checkNodeType(node, type);
+
+  if (!typedNode) {
+    throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node)));
+  } // $FlowFixMe: Unsure why.
+
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkNodeType(node, type) {
+  if (node && node.type === type) {
+    // The definition of ParseNode<TYPE> doesn't communicate to flow that
+    // `type: TYPE` (as that's not explicitly mentioned anywhere), though that
+    // happens to be true for all our value types.
+    // $FlowFixMe
+    return node;
+  }
+
+  return null;
+}
+/**
+ * Asserts that the node is of the given type and returns it with stricter
+ * typing. Throws if the node's type does not match.
+ */
+
+function assertAtomFamily(node, family) {
+  var typedNode = checkAtomFamily(node, family);
+
+  if (!typedNode) {
+    throw new Error("Expected node of type \"atom\" and family \"" + family + "\", but got " + (node ? node.type === "atom" ? "atom of family " + node.family : "node of type " + node.type : String(node)));
+  }
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkAtomFamily(node, family) {
+  return node && node.type === "atom" && node.family === family ? node : null;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function assertSymbolNodeType(node) {
+  var typedNode = checkSymbolNodeType(node);
+
+  if (!typedNode) {
+    throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node)));
+  }
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkSymbolNodeType(node) {
+  if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) {
+    // $FlowFixMe
+    return node;
+  }
+
+  return null;
+}
+// CONCATENATED MODULE: ./src/spacingData.js
+/**
+ * Describes spaces between different classes of atoms.
+ */
+var thinspace = {
+  number: 3,
+  unit: "mu"
+};
+var mediumspace = {
+  number: 4,
+  unit: "mu"
+};
+var thickspace = {
+  number: 5,
+  unit: "mu"
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+
+// Spacing relationships for display and text styles
+var spacings = {
+  mord: {
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mop: {
+    mord: thinspace,
+    mop: thinspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mbin: {
+    mord: mediumspace,
+    mop: mediumspace,
+    mopen: mediumspace,
+    minner: mediumspace
+  },
+  mrel: {
+    mord: thickspace,
+    mop: thickspace,
+    mopen: thickspace,
+    minner: thickspace
+  },
+  mopen: {},
+  mclose: {
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mpunct: {
+    mord: thinspace,
+    mop: thinspace,
+    mrel: thickspace,
+    mopen: thinspace,
+    mclose: thinspace,
+    mpunct: thinspace,
+    minner: thinspace
+  },
+  minner: {
+    mord: thinspace,
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    mopen: thinspace,
+    mpunct: thinspace,
+    minner: thinspace
+  }
+}; // Spacing relationships for script and scriptscript styles
+
+var tightSpacings = {
+  mord: {
+    mop: thinspace
+  },
+  mop: {
+    mord: thinspace,
+    mop: thinspace
+  },
+  mbin: {},
+  mrel: {},
+  mopen: {},
+  mclose: {
+    mop: thinspace
+  },
+  mpunct: {},
+  minner: {
+    mop: thinspace
+  }
+};
+// CONCATENATED MODULE: ./src/defineFunction.js
+
+
+/**
+ * All registered functions.
+ * `functions.js` just exports this same dictionary again and makes it public.
+ * `Parser.js` requires this dictionary.
+ */
+var _functions = {};
+/**
+ * All HTML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+var _htmlGroupBuilders = {};
+/**
+ * All MathML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+var _mathmlGroupBuilders = {};
+function defineFunction(_ref) {
+  var type = _ref.type,
+      names = _ref.names,
+      props = _ref.props,
+      handler = _ref.handler,
+      htmlBuilder = _ref.htmlBuilder,
+      mathmlBuilder = _ref.mathmlBuilder;
+  // Set default values of functions
+  var data = {
+    type: type,
+    numArgs: props.numArgs,
+    argTypes: props.argTypes,
+    greediness: props.greediness === undefined ? 1 : props.greediness,
+    allowedInText: !!props.allowedInText,
+    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
+    numOptionalArgs: props.numOptionalArgs || 0,
+    infix: !!props.infix,
+    handler: handler
+  };
+
+  for (var i = 0; i < names.length; ++i) {
+    _functions[names[i]] = data;
+  }
+
+  if (type) {
+    if (htmlBuilder) {
+      _htmlGroupBuilders[type] = htmlBuilder;
+    }
+
+    if (mathmlBuilder) {
+      _mathmlGroupBuilders[type] = mathmlBuilder;
+    }
+  }
+}
+/**
+ * Use this to register only the HTML and MathML builders for a function (e.g.
+ * if the function's ParseNode is generated in Parser.js rather than via a
+ * stand-alone handler provided to `defineFunction`).
+ */
+
+function defineFunctionBuilders(_ref2) {
+  var type = _ref2.type,
+      htmlBuilder = _ref2.htmlBuilder,
+      mathmlBuilder = _ref2.mathmlBuilder;
+  defineFunction({
+    type: type,
+    names: [],
+    props: {
+      numArgs: 0
+    },
+    handler: function handler() {
+      throw new Error('Should never be called.');
+    },
+    htmlBuilder: htmlBuilder,
+    mathmlBuilder: mathmlBuilder
+  });
+} // Since the corresponding buildHTML/buildMathML function expects a
+// list of elements, we normalize for different kinds of arguments
+
+var defineFunction_ordargument = function ordargument(arg) {
+  var node = checkNodeType(arg, "ordgroup");
+  return node ? node.body : [arg];
+};
+// CONCATENATED MODULE: ./src/buildHTML.js
+/**
+ * This file does the main work of building a domTree structure from a parse
+ * tree. The entry point is the `buildHTML` function, which takes a parse tree.
+ * Then, the buildExpression, buildGroup, and various groupBuilders functions
+ * are called, to produce a final HTML tree.
+ */
+
+
+
+
+
+
+
+
+
+var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
+// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
+// and the text before Rule 19.
+
+var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
+var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
+var styleMap = {
+  "display": src_Style.DISPLAY,
+  "text": src_Style.TEXT,
+  "script": src_Style.SCRIPT,
+  "scriptscript": src_Style.SCRIPTSCRIPT
+};
+var DomEnum = {
+  mord: "mord",
+  mop: "mop",
+  mbin: "mbin",
+  mrel: "mrel",
+  mopen: "mopen",
+  mclose: "mclose",
+  mpunct: "mpunct",
+  minner: "minner"
+};
+
+/**
+ * Take a list of nodes, build them in order, and return a list of the built
+ * nodes. documentFragments are flattened into their contents, so the
+ * returned list contains no fragments. `isRealGroup` is true if `expression`
+ * is a real group (no atoms will be added on either side), as opposed to
+ * a partial group (e.g. one created by \color). `surrounding` is an array
+ * consisting type of nodes that will be added to the left and right.
+ */
+var buildHTML_buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) {
+  if (surrounding === void 0) {
+    surrounding = [null, null];
+  }
+
+  // Parse expressions into `groups`.
+  var groups = [];
+
+  for (var i = 0; i < expression.length; i++) {
+    var output = buildHTML_buildGroup(expression[i], options);
+
+    if (output instanceof tree_DocumentFragment) {
+      var children = output.children;
+      groups.push.apply(groups, children);
+    } else {
+      groups.push(output);
+    }
+  } // If `expression` is a partial group, let the parent handle spacings
+  // to avoid processing groups multiple times.
+
+
+  if (!isRealGroup) {
+    return groups;
+  }
+
+  var glueOptions = options;
+
+  if (expression.length === 1) {
+    var node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling");
+
+    if (!node) {// No match.
+    } else if (node.type === "sizing") {
+      glueOptions = options.havingSize(node.size);
+    } else if (node.type === "styling") {
+      glueOptions = options.havingStyle(styleMap[node.style]);
+    }
+  } // Dummy spans for determining spacings between surrounding atoms.
+  // If `expression` has no atoms on the left or right, class "leftmost"
+  // or "rightmost", respectively, is used to indicate it.
+
+
+  var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options);
+  var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element
+  // of its `classes` array. A later cleanup should ensure this, for
+  // instance by changing the signature of `makeSpan`.
+  // Before determining what spaces to insert, perform bin cancellation.
+  // Binary operators change to ordinary symbols in some contexts.
+
+  traverseNonSpaceNodes(groups, function (node, prev) {
+    var prevType = prev.classes[0];
+    var type = node.classes[0];
+
+    if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {
+      prev.classes[0] = "mord";
+    } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {
+      node.classes[0] = "mord";
+    }
+  }, {
+    node: dummyPrev
+  }, dummyNext);
+  traverseNonSpaceNodes(groups, function (node, prev) {
+    var prevType = getTypeOfDomTree(prev);
+    var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.
+
+    var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;
+
+    if (space) {
+      // Insert glue (spacing) after the `prev`.
+      return buildCommon.makeGlue(space, glueOptions);
+    }
+  }, {
+    node: dummyPrev
+  }, dummyNext);
+  return groups;
+}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and
+// previous node as arguments, optionally returning a node to insert after the
+// previous node. `prev` is an object with the previous node and `insertAfter`
+// function to insert after it. `next` is a node that will be added to the right.
+// Used for bin cancellation and inserting spacings.
+
+var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) {
+  if (next) {
+    // temporarily append the right node, if exists
+    nodes.push(next);
+  }
+
+  var i = 0;
+
+  for (; i < nodes.length; i++) {
+    var node = nodes[i];
+    var partialGroup = buildHTML_checkPartialGroup(node);
+
+    if (partialGroup) {
+      // Recursive DFS
+      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
+      traverseNonSpaceNodes(partialGroup.children, callback, prev);
+      continue;
+    } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
+    // spacing should go between atoms of different classes
+
+
+    if (node.classes[0] === "mspace") {
+      continue;
+    }
+
+    var result = callback(node, prev.node);
+
+    if (result) {
+      if (prev.insertAfter) {
+        prev.insertAfter(result);
+      } else {
+        // insert at front
+        nodes.unshift(result);
+        i++;
+      }
+    }
+
+    prev.node = node;
+
+    prev.insertAfter = function (index) {
+      return function (n) {
+        nodes.splice(index + 1, 0, n);
+        i++;
+      };
+    }(i);
+  }
+
+  if (next) {
+    nodes.pop();
+  }
+}; // Check if given node is a partial group, i.e., does not affect spacing around.
+
+
+var buildHTML_checkPartialGroup = function checkPartialGroup(node) {
+  if (node instanceof tree_DocumentFragment || node instanceof domTree_Anchor) {
+    return node;
+  }
+
+  return null;
+}; // Return the outermost node of a domTree.
+
+
+var getOutermostNode = function getOutermostNode(node, side) {
+  var partialGroup = buildHTML_checkPartialGroup(node);
+
+  if (partialGroup) {
+    var children = partialGroup.children;
+
+    if (children.length) {
+      if (side === "right") {
+        return getOutermostNode(children[children.length - 1], "right");
+      } else if (side === "left") {
+        return getOutermostNode(children[0], "left");
+      }
+    }
+  }
+
+  return node;
+}; // Return math atom class (mclass) of a domTree.
+// If `side` is given, it will get the type of the outermost node at given side.
+
+
+var getTypeOfDomTree = function getTypeOfDomTree(node, side) {
+  if (!node) {
+    return null;
+  }
+
+  if (side) {
+    node = getOutermostNode(node, side);
+  } // This makes a lot of assumptions as to where the type of atom
+  // appears.  We should do a better job of enforcing this.
+
+
+  return DomEnum[node.classes[0]] || null;
+};
+var makeNullDelimiter = function makeNullDelimiter(options, classes) {
+  var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
+  return buildHTML_makeSpan(classes.concat(moreClasses));
+};
+/**
+ * buildGroup is the function that takes a group and calls the correct groupType
+ * function for it. It also handles the interaction of size and style changes
+ * between parents and children.
+ */
+
+var buildHTML_buildGroup = function buildGroup(group, options, baseOptions) {
+  if (!group) {
+    return buildHTML_makeSpan();
+  }
+
+  if (_htmlGroupBuilders[group.type]) {
+    // Call the groupBuilders function
+    var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account
+    // for that size difference.
+
+    if (baseOptions && options.size !== baseOptions.size) {
+      groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options);
+      var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
+      groupNode.height *= multiplier;
+      groupNode.depth *= multiplier;
+    }
+
+    return groupNode;
+  } else {
+    throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
+  }
+};
+/**
+ * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)
+ * into an unbreakable HTML node of class .base, with proper struts to
+ * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to
+ * make up the entire expression as a sequence of unbreakable units.
+ */
+
+function buildHTMLUnbreakable(children, options) {
+  // Compute height and depth of this chunk.
+  var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at
+  // the height of the expression, and the bottom of the HTML element
+  // falls at the depth of the expression.
+  // We used to have separate top and bottom struts, where the bottom strut
+  // would like to use `vertical-align: top`, but in IE 9 this lowers the
+  // baseline of the box to the bottom of this strut (instead of staying in
+  // the normal place) so we use an absolute value for vertical-align instead.
+
+  var strut = buildHTML_makeSpan(["strut"]);
+  strut.style.height = body.height + body.depth + "em";
+  strut.style.verticalAlign = -body.depth + "em";
+  body.children.unshift(strut);
+  return body;
+}
+/**
+ * Take an entire parse tree, and build it into an appropriate set of HTML
+ * nodes.
+ */
+
+
+function buildHTML(tree, options) {
+  // Strip off outer tag wrapper for processing below.
+  var tag = null;
+
+  if (tree.length === 1 && tree[0].type === "tag") {
+    tag = tree[0].tag;
+    tree = tree[0].body;
+  } // Build the expression contained in the tree
+
+
+  var expression = buildHTML_buildExpression(tree, options, true);
+  var children = []; // Create one base node for each chunk between potential line breaks.
+  // The TeXBook [p.173] says "A formula will be broken only after a
+  // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary
+  // operation symbol like $+$ or $-$ or $\times$, where the relation or
+  // binary operation is on the ``outer level'' of the formula (i.e., not
+  // enclosed in {...} and not part of an \over construction)."
+
+  var parts = [];
+
+  for (var i = 0; i < expression.length; i++) {
+    parts.push(expression[i]);
+
+    if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {
+      // Put any post-operator glue on same line as operator.
+      // Watch for \nobreak along the way, and stop at \newline.
+      var nobreak = false;
+
+      while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {
+        i++;
+        parts.push(expression[i]);
+
+        if (expression[i].hasClass("nobreak")) {
+          nobreak = true;
+        }
+      } // Don't allow break if \nobreak among the post-operator glue.
+
+
+      if (!nobreak) {
+        children.push(buildHTMLUnbreakable(parts, options));
+        parts = [];
+      }
+    } else if (expression[i].hasClass("newline")) {
+      // Write the line except the newline
+      parts.pop();
+
+      if (parts.length > 0) {
+        children.push(buildHTMLUnbreakable(parts, options));
+        parts = [];
+      } // Put the newline at the top level
+
+
+      children.push(expression[i]);
+    }
+  }
+
+  if (parts.length > 0) {
+    children.push(buildHTMLUnbreakable(parts, options));
+  } // Now, if there was a tag, build it too and append it as a final child.
+
+
+  var tagChild;
+
+  if (tag) {
+    tagChild = buildHTMLUnbreakable(buildHTML_buildExpression(tag, options, true));
+    tagChild.classes = ["tag"];
+    children.push(tagChild);
+  }
+
+  var htmlNode = buildHTML_makeSpan(["katex-html"], children);
+  htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children
+  // (the height of the enclosing htmlNode) for proper vertical alignment.
+
+  if (tagChild) {
+    var strut = tagChild.children[0];
+    strut.style.height = htmlNode.height + htmlNode.depth + "em";
+    strut.style.verticalAlign = -htmlNode.depth + "em";
+  }
+
+  return htmlNode;
+}
+// CONCATENATED MODULE: ./src/mathMLTree.js
+/**
+ * These objects store data about MathML nodes. This is the MathML equivalent
+ * of the types in domTree.js. Since MathML handles its own rendering, and
+ * since we're mainly using MathML to improve accessibility, we don't manage
+ * any of the styling state that the plain DOM nodes do.
+ *
+ * The `toNode` and `toMarkup` functions work simlarly to how they do in
+ * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
+ */
+
+
+function newDocumentFragment(children) {
+  return new tree_DocumentFragment(children);
+}
+/**
+ * This node represents a general purpose MathML node of any type. The
+ * constructor requires the type of node to create (for example, `"mo"` or
+ * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags).
+ */
+
+var mathMLTree_MathNode =
+/*#__PURE__*/
+function () {
+  function MathNode(type, children) {
+    this.type = void 0;
+    this.attributes = void 0;
+    this.children = void 0;
+    this.type = type;
+    this.attributes = {};
+    this.children = children || [];
+  }
+  /**
+   * Sets an attribute on a MathML node. MathML depends on attributes to convey a
+   * semantic content, so this is used heavily.
+   */
+
+
+  var _proto = MathNode.prototype;
+
+  _proto.setAttribute = function setAttribute(name, value) {
+    this.attributes[name] = value;
+  }
+  /**
+   * Gets an attribute on a MathML node.
+   */
+  ;
+
+  _proto.getAttribute = function getAttribute(name) {
+    return this.attributes[name];
+  }
+  /**
+   * Converts the math node into a MathML-namespaced DOM element.
+   */
+  ;
+
+  _proto.toNode = function toNode() {
+    var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    for (var i = 0; i < this.children.length; i++) {
+      node.appendChild(this.children[i].toNode());
+    }
+
+    return node;
+  }
+  /**
+   * Converts the math node into an HTML markup string.
+   */
+  ;
+
+  _proto.toMarkup = function toMarkup() {
+    var markup = "<" + this.type; // Add the attributes
+
+    for (var attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += " " + attr + "=\"";
+        markup += utils.escape(this.attributes[attr]);
+        markup += "\"";
+      }
+    }
+
+    markup += ">";
+
+    for (var i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    markup += "</" + this.type + ">";
+    return markup;
+  }
+  /**
+   * Converts the math node into a string, similar to innerText, but escaped.
+   */
+  ;
+
+  _proto.toText = function toText() {
+    return this.children.map(function (child) {
+      return child.toText();
+    }).join("");
+  };
+
+  return MathNode;
+}();
+/**
+ * This node represents a piece of text.
+ */
+
+var mathMLTree_TextNode =
+/*#__PURE__*/
+function () {
+  function TextNode(text) {
+    this.text = void 0;
+    this.text = text;
+  }
+  /**
+   * Converts the text node into a DOM text node.
+   */
+
+
+  var _proto2 = TextNode.prototype;
+
+  _proto2.toNode = function toNode() {
+    return document.createTextNode(this.text);
+  }
+  /**
+   * Converts the text node into escaped HTML markup
+   * (representing the text itself).
+   */
+  ;
+
+  _proto2.toMarkup = function toMarkup() {
+    return utils.escape(this.toText());
+  }
+  /**
+   * Converts the text node into a string
+   * (representing the text iteself).
+   */
+  ;
+
+  _proto2.toText = function toText() {
+    return this.text;
+  };
+
+  return TextNode;
+}();
+/**
+ * This node represents a space, but may render as <mspace.../> or as text,
+ * depending on the width.
+ */
+
+var SpaceNode =
+/*#__PURE__*/
+function () {
+  /**
+   * Create a Space node with width given in CSS ems.
+   */
+  function SpaceNode(width) {
+    this.width = void 0;
+    this.character = void 0;
+    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html
+    // for a table of space-like characters.  We use Unicode
+    // representations instead of &LongNames; as it's not clear how to
+    // make the latter via document.createTextNode.
+
+    if (width >= 0.05555 && width <= 0.05556) {
+      this.character = "\u200A"; // &VeryThinSpace;
+    } else if (width >= 0.1666 && width <= 0.1667) {
+      this.character = "\u2009"; // &ThinSpace;
+    } else if (width >= 0.2222 && width <= 0.2223) {
+      this.character = "\u2005"; // &MediumSpace;
+    } else if (width >= 0.2777 && width <= 0.2778) {
+      this.character = "\u2005\u200A"; // &ThickSpace;
+    } else if (width >= -0.05556 && width <= -0.05555) {
+      this.character = "\u200A\u2063"; // &NegativeVeryThinSpace;
+    } else if (width >= -0.1667 && width <= -0.1666) {
+      this.character = "\u2009\u2063"; // &NegativeThinSpace;
+    } else if (width >= -0.2223 && width <= -0.2222) {
+      this.character = "\u205F\u2063"; // &NegativeMediumSpace;
+    } else if (width >= -0.2778 && width <= -0.2777) {
+      this.character = "\u2005\u2063"; // &NegativeThickSpace;
+    } else {
+      this.character = null;
+    }
+  }
+  /**
+   * Converts the math node into a MathML-namespaced DOM element.
+   */
+
+
+  var _proto3 = SpaceNode.prototype;
+
+  _proto3.toNode = function toNode() {
+    if (this.character) {
+      return document.createTextNode(this.character);
+    } else {
+      var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
+      node.setAttribute("width", this.width + "em");
+      return node;
+    }
+  }
+  /**
+   * Converts the math node into an HTML markup string.
+   */
+  ;
+
+  _proto3.toMarkup = function toMarkup() {
+    if (this.character) {
+      return "<mtext>" + this.character + "</mtext>";
+    } else {
+      return "<mspace width=\"" + this.width + "em\"/>";
+    }
+  }
+  /**
+   * Converts the math node into a string, similar to innerText.
+   */
+  ;
+
+  _proto3.toText = function toText() {
+    if (this.character) {
+      return this.character;
+    } else {
+      return " ";
+    }
+  };
+
+  return SpaceNode;
+}();
+
+/* harmony default export */ var mathMLTree = ({
+  MathNode: mathMLTree_MathNode,
+  TextNode: mathMLTree_TextNode,
+  SpaceNode: SpaceNode,
+  newDocumentFragment: newDocumentFragment
+});
+// CONCATENATED MODULE: ./src/buildMathML.js
+/**
+ * This file converts a parse tree into a cooresponding MathML tree. The main
+ * entry point is the `buildMathML` function, which takes a parse tree from the
+ * parser.
+ */
+
+
+
+
+
+
+
+
+
+/**
+ * Takes a symbol and converts it into a MathML text node after performing
+ * optional replacement from symbols.js.
+ */
+var buildMathML_makeText = function makeText(text, mode, options) {
+  if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) {
+    text = src_symbols[mode][text].replace;
+  }
+
+  return new mathMLTree.TextNode(text);
+};
+/**
+ * Wrap the given array of nodes in an <mrow> node if needed, i.e.,
+ * unless the array has length 1.  Always returns a single node.
+ */
+
+var buildMathML_makeRow = function makeRow(body) {
+  if (body.length === 1) {
+    return body[0];
+  } else {
+    return new mathMLTree.MathNode("mrow", body);
+  }
+};
+/**
+ * Returns the math variant as a string or null if none is required.
+ */
+
+var buildMathML_getVariant = function getVariant(group, options) {
+  // Handle \text... font specifiers as best we can.
+  // MathML has a limited list of allowable mathvariant specifiers; see
+  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt
+  if (options.fontFamily === "texttt") {
+    return "monospace";
+  } else if (options.fontFamily === "textsf") {
+    if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+      return "sans-serif-bold-italic";
+    } else if (options.fontShape === "textit") {
+      return "sans-serif-italic";
+    } else if (options.fontWeight === "textbf") {
+      return "bold-sans-serif";
+    } else {
+      return "sans-serif";
+    }
+  } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+    return "bold-italic";
+  } else if (options.fontShape === "textit") {
+    return "italic";
+  } else if (options.fontWeight === "textbf") {
+    return "bold";
+  }
+
+  var font = options.font;
+
+  if (!font || font === "mathnormal") {
+    return null;
+  }
+
+  var mode = group.mode;
+
+  if (font === "mathit") {
+    return "italic";
+  } else if (font === "boldsymbol") {
+    return "bold-italic";
+  } else if (font === "mathbf") {
+    return "bold";
+  } else if (font === "mathbb") {
+    return "double-struck";
+  } else if (font === "mathfrak") {
+    return "fraktur";
+  } else if (font === "mathscr" || font === "mathcal") {
+    // MathML makes no distinction between script and caligrahpic
+    return "script";
+  } else if (font === "mathsf") {
+    return "sans-serif";
+  } else if (font === "mathtt") {
+    return "monospace";
+  }
+
+  var text = group.text;
+
+  if (utils.contains(["\\imath", "\\jmath"], text)) {
+    return null;
+  }
+
+  if (src_symbols[mode][text] && src_symbols[mode][text].replace) {
+    text = src_symbols[mode][text].replace;
+  }
+
+  var fontName = buildCommon.fontMap[font].fontName;
+
+  if (getCharacterMetrics(text, fontName, mode)) {
+    return buildCommon.fontMap[font].variant;
+  }
+
+  return null;
+};
+/**
+ * Takes a list of nodes, builds them, and returns a list of the generated
+ * MathML nodes.  Also combine consecutive <mtext> outputs into a single
+ * <mtext> tag.
+ */
+
+var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) {
+  if (expression.length === 1) {
+    var group = buildMathML_buildGroup(expression[0], options);
+
+    if (isOrdgroup && group instanceof mathMLTree_MathNode && group.type === "mo") {
+      // When TeX writers want to suppress spacing on an operator,
+      // they often put the operator by itself inside braces.
+      group.setAttribute("lspace", "0em");
+      group.setAttribute("rspace", "0em");
+    }
+
+    return [group];
+  }
+
+  var groups = [];
+  var lastGroup;
+
+  for (var i = 0; i < expression.length; i++) {
+    var _group = buildMathML_buildGroup(expression[i], options);
+
+    if (_group instanceof mathMLTree_MathNode && lastGroup instanceof mathMLTree_MathNode) {
+      // Concatenate adjacent <mtext>s
+      if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
+        var _lastGroup$children;
+
+        (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children);
+
+        continue; // Concatenate adjacent <mn>s
+      } else if (_group.type === 'mn' && lastGroup.type === 'mn') {
+        var _lastGroup$children2;
+
+        (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children);
+
+        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>
+      } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') {
+        var child = _group.children[0];
+
+        if (child instanceof mathMLTree_TextNode && child.text === '.') {
+          var _lastGroup$children3;
+
+          (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children);
+
+          continue;
+        }
+      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
+        var lastChild = lastGroup.children[0];
+
+        if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {
+          var _child = _group.children[0];
+
+          if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) {
+            // Overlay with combining character long solidus
+            _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1);
+            groups.pop();
+          }
+        }
+      }
+    }
+
+    groups.push(_group);
+    lastGroup = _group;
+  }
+
+  return groups;
+};
+/**
+ * Equivalent to buildExpression, but wraps the elements in an <mrow>
+ * if there's more than one.  Returns a single node instead of an array.
+ */
+
+var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
+  return buildMathML_makeRow(buildMathML_buildExpression(expression, options, isOrdgroup));
+};
+/**
+ * Takes a group from the parser and calls the appropriate groupBuilders function
+ * on it to produce a MathML node.
+ */
+
+var buildMathML_buildGroup = function buildGroup(group, options) {
+  if (!group) {
+    return new mathMLTree.MathNode("mrow");
+  }
+
+  if (_mathmlGroupBuilders[group.type]) {
+    // Call the groupBuilders function
+    var result = _mathmlGroupBuilders[group.type](group, options);
+    return result;
+  } else {
+    throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
+  }
+};
+/**
+ * Takes a full parse tree and settings and builds a MathML representation of
+ * it. In particular, we put the elements from building the parse tree into a
+ * <semantics> tag so we can also include that TeX source as an annotation.
+ *
+ * Note that we actually return a domTree element with a `<math>` inside it so
+ * we can do appropriate styling.
+ */
+
+function buildMathML(tree, texExpression, options, forMathmlOnly) {
+  var expression = buildMathML_buildExpression(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics
+  // tag correctly, unless it's a single <mrow> or <mtable>.
+
+  var wrapper;
+
+  if (expression.length === 1 && expression[0] instanceof mathMLTree_MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {
+    wrapper = expression[0];
+  } else {
+    wrapper = new mathMLTree.MathNode("mrow", expression);
+  } // Build a TeX annotation of the source
+
+
+  var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
+  annotation.setAttribute("encoding", "application/x-tex");
+  var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
+  var math = new mathMLTree.MathNode("math", [semantics]);
+  math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style <math> nodes, so we wrap the node in a span.
+  // NOTE: The span class is not typed to have <math> nodes as children, and
+  // we don't want to make the children type more generic since the children
+  // of span are expected to have more fields in `buildHtml` contexts.
+
+  var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe
+
+  return buildCommon.makeSpan([wrapperClass], [math]);
+}
+// CONCATENATED MODULE: ./src/buildTree.js
+
+
+
+
+
+
+
+var buildTree_optionsFromSettings = function optionsFromSettings(settings) {
+  return new src_Options({
+    style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT,
+    maxSize: settings.maxSize,
+    minRuleThickness: settings.minRuleThickness
+  });
+};
+
+var buildTree_displayWrap = function displayWrap(node, settings) {
+  if (settings.displayMode) {
+    var classes = ["katex-display"];
+
+    if (settings.leqno) {
+      classes.push("leqno");
+    }
+
+    if (settings.fleqn) {
+      classes.push("fleqn");
+    }
+
+    node = buildCommon.makeSpan(classes, [node]);
+  }
+
+  return node;
+};
+
+var buildTree_buildTree = function buildTree(tree, expression, settings) {
+  var options = buildTree_optionsFromSettings(settings);
+  var katexNode;
+
+  if (settings.output === "mathml") {
+    return buildMathML(tree, expression, options, true);
+  } else if (settings.output === "html") {
+    var htmlNode = buildHTML(tree, options);
+    katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
+  } else {
+    var mathMLNode = buildMathML(tree, expression, options, false);
+
+    var _htmlNode = buildHTML(tree, options);
+
+    katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]);
+  }
+
+  return buildTree_displayWrap(katexNode, settings);
+};
+var buildTree_buildHTMLTree = function buildHTMLTree(tree, expression, settings) {
+  var options = buildTree_optionsFromSettings(settings);
+  var htmlNode = buildHTML(tree, options);
+  var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
+  return buildTree_displayWrap(katexNode, settings);
+};
+/* harmony default export */ var src_buildTree = (buildTree_buildTree);
+// CONCATENATED MODULE: ./src/stretchy.js
+/**
+ * This file provides support to buildMathML.js and buildHTML.js
+ * for stretchy wide elements rendered from SVG files
+ * and other CSS trickery.
+ */
+
+
+
+
+var stretchyCodePoint = {
+  widehat: "^",
+  widecheck: "ˇ",
+  widetilde: "~",
+  utilde: "~",
+  overleftarrow: "\u2190",
+  underleftarrow: "\u2190",
+  xleftarrow: "\u2190",
+  overrightarrow: "\u2192",
+  underrightarrow: "\u2192",
+  xrightarrow: "\u2192",
+  underbrace: "\u23DF",
+  overbrace: "\u23DE",
+  overgroup: "\u23E0",
+  undergroup: "\u23E1",
+  overleftrightarrow: "\u2194",
+  underleftrightarrow: "\u2194",
+  xleftrightarrow: "\u2194",
+  Overrightarrow: "\u21D2",
+  xRightarrow: "\u21D2",
+  overleftharpoon: "\u21BC",
+  xleftharpoonup: "\u21BC",
+  overrightharpoon: "\u21C0",
+  xrightharpoonup: "\u21C0",
+  xLeftarrow: "\u21D0",
+  xLeftrightarrow: "\u21D4",
+  xhookleftarrow: "\u21A9",
+  xhookrightarrow: "\u21AA",
+  xmapsto: "\u21A6",
+  xrightharpoondown: "\u21C1",
+  xleftharpoondown: "\u21BD",
+  xrightleftharpoons: "\u21CC",
+  xleftrightharpoons: "\u21CB",
+  xtwoheadleftarrow: "\u219E",
+  xtwoheadrightarrow: "\u21A0",
+  xlongequal: "=",
+  xtofrom: "\u21C4",
+  xrightleftarrows: "\u21C4",
+  xrightequilibrium: "\u21CC",
+  // Not a perfect match.
+  xleftequilibrium: "\u21CB" // None better available.
+
+};
+
+var stretchy_mathMLnode = function mathMLnode(label) {
+  var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
+  node.setAttribute("stretchy", "true");
+  return node;
+}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
+// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)
+// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)
+// Licensed under the SIL Open Font License, Version 1.1.
+// See \nhttp://scripts.sil.org/OFL
+// Very Long SVGs
+//    Many of the KaTeX stretchy wide elements use a long SVG image and an
+//    overflow: hidden tactic to achieve a stretchy image while avoiding
+//    distortion of arrowheads or brace corners.
+//    The SVG typically contains a very long (400 em) arrow.
+//    The SVG is in a container span that has overflow: hidden, so the span
+//    acts like a window that exposes only part of the  SVG.
+//    The SVG always has a longer, thinner aspect ratio than the container span.
+//    After the SVG fills 100% of the height of the container span,
+//    there is a long arrow shaft left over. That left-over shaft is not shown.
+//    Instead, it is sliced off because the span's CSS has overflow: hidden.
+//    Thus, the reader sees an arrow that matches the subject matter width
+//    without distortion.
+//    Some functions, such as \cancel, need to vary their aspect ratio. These
+//    functions do not get the overflow SVG treatment.
+// Second Brush Stroke
+//    Low resolution monitors struggle to display images in fine detail.
+//    So browsers apply anti-aliasing. A long straight arrow shaft therefore
+//    will sometimes appear as if it has a blurred edge.
+//    To mitigate this, these SVG files contain a second "brush-stroke" on the
+//    arrow shafts. That is, a second long thin rectangular SVG path has been
+//    written directly on top of each arrow shaft. This reinforcement causes
+//    some of the screen pixels to display as black instead of the anti-aliased
+//    gray pixel that a  single path would generate. So we get arrow shafts
+//    whose edges appear to be sharper.
+// In the katexImagesData object just below, the dimensions all
+// correspond to path geometry inside the relevant SVG.
+// For example, \overrightarrow uses the same arrowhead as glyph U+2192
+// from the KaTeX Main font. The scaling factor is 1000.
+// That is, inside the font, that arrowhead is 522 units tall, which
+// corresponds to 0.522 em inside the document.
+
+
+var katexImagesData = {
+  //   path(s), minWidth, height, align
+  overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+  overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+  underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+  underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+  xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
+  xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
+  Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
+  xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
+  xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
+  overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+  xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+  xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
+  overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+  xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+  xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
+  xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
+  xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
+  xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
+  overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+  overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
+  underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
+  underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+  xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
+  xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
+  xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
+  xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
+  xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
+  xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
+  overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+  underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+  overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
+  undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
+  xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
+  xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
+  // The next three arrows are from the mhchem package.
+  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
+  // document as \xrightarrow or \xrightleftharpoons. Those have
+  // min-length = 1.75em, so we set min-length on these next three to match.
+  xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
+  xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
+  xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
+};
+
+var groupLength = function groupLength(arg) {
+  if (arg.type === "ordgroup") {
+    return arg.body.length;
+  } else {
+    return 1;
+  }
+};
+
+var stretchy_svgSpan = function svgSpan(group, options) {
+  // Create a span with inline SVG for the element.
+  function buildSvgSpan_() {
+    var viewBoxWidth = 400000; // default
+
+    var label = group.label.substr(1);
+
+    if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {
+      // Each type in the `if` statement corresponds to one of the ParseNode
+      // types below. This narrowing is required to access `grp.base`.
+      var grp = group; // There are four SVG images available for each function.
+      // Choose a taller image when there are more characters.
+
+      var numChars = groupLength(grp.base);
+      var viewBoxHeight;
+      var pathName;
+
+      var _height;
+
+      if (numChars > 5) {
+        if (label === "widehat" || label === "widecheck") {
+          viewBoxHeight = 420;
+          viewBoxWidth = 2364;
+          _height = 0.42;
+          pathName = label + "4";
+        } else {
+          viewBoxHeight = 312;
+          viewBoxWidth = 2340;
+          _height = 0.34;
+          pathName = "tilde4";
+        }
+      } else {
+        var imgIndex = [1, 1, 2, 2, 3, 3][numChars];
+
+        if (label === "widehat" || label === "widecheck") {
+          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];
+          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];
+          _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];
+          pathName = label + imgIndex;
+        } else {
+          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];
+          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];
+          _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];
+          pathName = "tilde" + imgIndex;
+        }
+      }
+
+      var path = new domTree_PathNode(pathName);
+      var svgNode = new SvgNode([path], {
+        "width": "100%",
+        "height": _height + "em",
+        "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,
+        "preserveAspectRatio": "none"
+      });
+      return {
+        span: buildCommon.makeSvgSpan([], [svgNode], options),
+        minWidth: 0,
+        height: _height
+      };
+    } else {
+      var spans = [];
+      var data = katexImagesData[label];
+      var paths = data[0],
+          _minWidth = data[1],
+          _viewBoxHeight = data[2];
+
+      var _height2 = _viewBoxHeight / 1000;
+
+      var numSvgChildren = paths.length;
+      var widthClasses;
+      var aligns;
+
+      if (numSvgChildren === 1) {
+        // $FlowFixMe: All these cases must be of the 4-tuple type.
+        var align1 = data[3];
+        widthClasses = ["hide-tail"];
+        aligns = [align1];
+      } else if (numSvgChildren === 2) {
+        widthClasses = ["halfarrow-left", "halfarrow-right"];
+        aligns = ["xMinYMin", "xMaxYMin"];
+      } else if (numSvgChildren === 3) {
+        widthClasses = ["brace-left", "brace-center", "brace-right"];
+        aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];
+      } else {
+        throw new Error("Correct katexImagesData or update code here to support\n                    " + numSvgChildren + " children.");
+      }
+
+      for (var i = 0; i < numSvgChildren; i++) {
+        var _path = new domTree_PathNode(paths[i]);
+
+        var _svgNode = new SvgNode([_path], {
+          "width": "400em",
+          "height": _height2 + "em",
+          "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight,
+          "preserveAspectRatio": aligns[i] + " slice"
+        });
+
+        var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);
+
+        if (numSvgChildren === 1) {
+          return {
+            span: _span,
+            minWidth: _minWidth,
+            height: _height2
+          };
+        } else {
+          _span.style.height = _height2 + "em";
+          spans.push(_span);
+        }
+      }
+
+      return {
+        span: buildCommon.makeSpan(["stretchy"], spans, options),
+        minWidth: _minWidth,
+        height: _height2
+      };
+    }
+  } // buildSvgSpan_()
+
+
+  var _buildSvgSpan_ = buildSvgSpan_(),
+      span = _buildSvgSpan_.span,
+      minWidth = _buildSvgSpan_.minWidth,
+      height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0.
+  // Any adjustments relative to the baseline must be done in buildHTML.
+
+
+  span.height = height;
+  span.style.height = height + "em";
+
+  if (minWidth > 0) {
+    span.style.minWidth = minWidth + "em";
+  }
+
+  return span;
+};
+
+var stretchy_encloseSpan = function encloseSpan(inner, label, pad, options) {
+  // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
+  var img;
+  var totalHeight = inner.height + inner.depth + 2 * pad;
+
+  if (/fbox|color/.test(label)) {
+    img = buildCommon.makeSpan(["stretchy", label], [], options);
+
+    if (label === "fbox") {
+      var color = options.color && options.getColor();
+
+      if (color) {
+        img.style.borderColor = color;
+      }
+    }
+  } else {
+    // \cancel, \bcancel, or \xcancel
+    // Since \cancel's SVG is inline and it omits the viewBox attribute,
+    // its stroke-width will not vary with span area.
+    var lines = [];
+
+    if (/^[bx]cancel$/.test(label)) {
+      lines.push(new LineNode({
+        "x1": "0",
+        "y1": "0",
+        "x2": "100%",
+        "y2": "100%",
+        "stroke-width": "0.046em"
+      }));
+    }
+
+    if (/^x?cancel$/.test(label)) {
+      lines.push(new LineNode({
+        "x1": "0",
+        "y1": "100%",
+        "x2": "100%",
+        "y2": "0",
+        "stroke-width": "0.046em"
+      }));
+    }
+
+    var svgNode = new SvgNode(lines, {
+      "width": "100%",
+      "height": totalHeight + "em"
+    });
+    img = buildCommon.makeSvgSpan([], [svgNode], options);
+  }
+
+  img.height = totalHeight;
+  img.style.height = totalHeight + "em";
+  return img;
+};
+
+/* harmony default export */ var stretchy = ({
+  encloseSpan: stretchy_encloseSpan,
+  mathMLnode: stretchy_mathMLnode,
+  svgSpan: stretchy_svgSpan
+});
+// CONCATENATED MODULE: ./src/functions/accent.js
+
+
+
+
+
+
+
+
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but
+var accent_htmlBuilder = function htmlBuilder(grp, options) {
+  // Accents are handled in the TeXbook pg. 443, rule 12.
+  var base;
+  var group;
+  var supSub = checkNodeType(grp, "supsub");
+  var supSubGroup;
+
+  if (supSub) {
+    // If our base is a character box, and we have superscripts and
+    // subscripts, the supsub will defer to us. In particular, we want
+    // to attach the superscripts and subscripts to the inner body (so
+    // that the position of the superscripts and subscripts won't be
+    // affected by the height of the accent). We accomplish this by
+    // sticking the base of the accent into the base of the supsub, and
+    // rendering that, while keeping track of where the accent is.
+    // The real accent group is the base of the supsub group
+    group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group
+
+    base = group.base; // Stick the character box into the base of the supsub group
+
+    supSub.base = base; // Rerender the supsub group with its new base, and store that
+    // result.
+
+    supSubGroup = assertSpan(buildHTML_buildGroup(supSub, options)); // reset original base
+
+    supSub.base = group;
+  } else {
+    group = assertNodeType(grp, "accent");
+    base = group.base;
+  } // Build the base group
+
+
+  var body = buildHTML_buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?
+
+  var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the
+  // nucleus is not a single character, let s = 0; otherwise set s to the
+  // kern amount for the nucleus followed by the \skewchar of its font."
+  // Note that our skew metrics are just the kern between each character
+  // and the skewchar.
+
+  var skew = 0;
+
+  if (mustShift) {
+    // If the base is a character box, then we want the skew of the
+    // innermost character. To do that, we find the innermost character:
+    var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it
+
+    var baseGroup = buildHTML_buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.
+
+    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we
+    // removed with getBaseElem might contain things like \color which
+    // we can't get rid of.
+    // TODO(emily): Find a better way to get the skew
+  } // calculate the amount of space between the body and the accent
+
+
+  var clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent
+
+  var accentBody;
+
+  if (!group.isStretchy) {
+    var accent;
+    var width;
+
+    if (group.label === "\\vec") {
+      // Before version 0.9, \vec used the combining font glyph U+20D7.
+      // But browsers, especially Safari, are not consistent in how they
+      // render combining characters when not preceded by a character.
+      // So now we use an SVG.
+      // If Safari reforms, we should consider reverting to the glyph.
+      accent = buildCommon.staticSvg("vec", options);
+      width = buildCommon.svgData.vec[1];
+    } else {
+      accent = buildCommon.makeOrd({
+        mode: group.mode,
+        text: group.label
+      }, options, "textord");
+      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to
+      // shift the accent over to a place we don't want.
+
+      accent.italic = 0;
+      width = accent.width;
+    }
+
+    accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be
+    // at least the width of the accent, and overlap directly onto the
+    // character without any vertical offset.
+
+    var accentFull = group.label === "\\textcircled";
+
+    if (accentFull) {
+      accentBody.classes.push('accent-full');
+      clearance = body.height;
+    } // Shift the accent over by the skew.
+
+
+    var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`
+    // so that the accent doesn't contribute to the bounding box.
+    // We need to shift the character by its width (effectively half
+    // its width) to compensate.
+
+    if (!accentFull) {
+      left -= width / 2;
+    }
+
+    accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some
+    // vertical adjustment to match LaTeX.
+
+    if (group.label === "\\textcircled") {
+      accentBody.style.top = ".2em";
+    }
+
+    accentBody = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "kern",
+        size: -clearance
+      }, {
+        type: "elem",
+        elem: accentBody
+      }]
+    }, options);
+  } else {
+    accentBody = stretchy.svgSpan(group, options);
+    accentBody = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "elem",
+        elem: accentBody,
+        wrapperClasses: ["svg-align"],
+        wrapperStyle: skew > 0 ? {
+          width: "calc(100% - " + 2 * skew + "em)",
+          marginLeft: 2 * skew + "em"
+        } : undefined
+      }]
+    }, options);
+  }
+
+  var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options);
+
+  if (supSubGroup) {
+    // Here, we replace the "base" child of the supsub with our newly
+    // generated accent.
+    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the
+    // accent, we manually recalculate height.
+
+    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.
+
+    supSubGroup.classes[0] = "mord";
+    return supSubGroup;
+  } else {
+    return accentWrap;
+  }
+};
+
+var accent_mathmlBuilder = function mathmlBuilder(group, options) {
+  var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [buildMathML_makeText(group.label, group.mode)]);
+  var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]);
+  node.setAttribute("accent", "true");
+  return node;
+};
+
+var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(function (accent) {
+  return "\\" + accent;
+}).join("|")); // Accents
+
+defineFunction({
+  type: "accent",
+  names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    var base = args[0];
+    var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
+    var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck";
+    return {
+      type: "accent",
+      mode: context.parser.mode,
+      label: context.funcName,
+      isStretchy: isStretchy,
+      isShifty: isShifty,
+      base: base
+    };
+  },
+  htmlBuilder: accent_htmlBuilder,
+  mathmlBuilder: accent_mathmlBuilder
+}); // Text-mode accents
+
+defineFunction({
+  type: "accent",
+  names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"],
+  props: {
+    numArgs: 1,
+    allowedInText: true,
+    allowedInMath: false
+  },
+  handler: function handler(context, args) {
+    var base = args[0];
+    return {
+      type: "accent",
+      mode: context.parser.mode,
+      label: context.funcName,
+      isStretchy: false,
+      isShifty: true,
+      base: base
+    };
+  },
+  htmlBuilder: accent_htmlBuilder,
+  mathmlBuilder: accent_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/accentunder.js
+// Horizontal overlap functions
+
+
+
+
+
+
+defineFunction({
+  type: "accentUnder",
+  names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var base = args[0];
+    return {
+      type: "accentUnder",
+      mode: parser.mode,
+      label: funcName,
+      base: base
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Treat under accents much like underlines.
+    var innerGroup = buildHTML_buildGroup(group.base, options);
+    var accentBody = stretchy.svgSpan(group, options);
+    var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns
+
+    var vlist = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: accentBody.height + kern,
+      children: [{
+        type: "elem",
+        elem: accentBody,
+        wrapperClasses: ["svg-align"]
+      }, {
+        type: "kern",
+        size: kern
+      }, {
+        type: "elem",
+        elem: innerGroup
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var accentNode = stretchy.mathMLnode(group.label);
+    var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]);
+    node.setAttribute("accentunder", "true");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/arrow.js
+
+
+
+
+
+
+
+// Helper function
+var arrow_paddedNode = function paddedNode(group) {
+  var node = new mathMLTree.MathNode("mpadded", group ? [group] : []);
+  node.setAttribute("width", "+0.6em");
+  node.setAttribute("lspace", "0.3em");
+  return node;
+}; // Stretchy arrows with an optional argument
+
+
+defineFunction({
+  type: "xArrow",
+  names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension.
+  // Direct use of these functions is discouraged and may break someday.
+  "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    return {
+      type: "xArrow",
+      mode: parser.mode,
+      label: funcName,
+      body: args[0],
+      below: optArgs[0]
+    };
+  },
+  // Flow is unable to correctly infer the type of `group`, even though it's
+  // unamibiguously determined from the passed-in `type` above.
+  htmlBuilder: function htmlBuilder(group, options) {
+    var style = options.style; // Build the argument groups in the appropriate style.
+    // Ref: amsmath.dtx:   \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
+    // Some groups can return document fragments.  Handle those by wrapping
+    // them in a span.
+
+    var newOptions = options.havingStyle(style.sup());
+    var upperGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, newOptions, options), options);
+    upperGroup.classes.push("x-arrow-pad");
+    var lowerGroup;
+
+    if (group.below) {
+      // Build the lower group
+      newOptions = options.havingStyle(style.sub());
+      lowerGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.below, newOptions, options), options);
+      lowerGroup.classes.push("x-arrow-pad");
+    }
+
+    var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.
+    // The point we want on the math axis is at 0.5 * arrowBody.height.
+
+    var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
+
+    var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu
+
+    if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") {
+      upperShift -= upperGroup.depth; // shift up if depth encroaches
+    } // Generate the vlist
+
+
+    var vlist;
+
+    if (lowerGroup) {
+      var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
+      vlist = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: upperGroup,
+          shift: upperShift
+        }, {
+          type: "elem",
+          elem: arrowBody,
+          shift: arrowShift
+        }, {
+          type: "elem",
+          elem: lowerGroup,
+          shift: lowerShift
+        }]
+      }, options);
+    } else {
+      vlist = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: upperGroup,
+          shift: upperShift
+        }, {
+          type: "elem",
+          elem: arrowBody,
+          shift: arrowShift
+        }]
+      }, options);
+    } // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+
+    vlist.children[0].children[0].children[1].classes.push("svg-align");
+    return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var arrowNode = stretchy.mathMLnode(group.label);
+    var node;
+
+    if (group.body) {
+      var upperNode = arrow_paddedNode(buildMathML_buildGroup(group.body, options));
+
+      if (group.below) {
+        var lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
+        node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
+      } else {
+        node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
+      }
+    } else if (group.below) {
+      var _lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
+
+      node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]);
+    } else {
+      // This should never happen.
+      // Parser.js throws an error if there is no argument.
+      node = arrow_paddedNode();
+      node = new mathMLTree.MathNode("mover", [arrowNode, node]);
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/char.js
+
+
+ // \@char is an internal function that takes a grouped decimal argument like
+// {123} and converts into symbol with code 123.  It is used by the *macro*
+// \char defined in macros.js.
+
+defineFunction({
+  type: "textord",
+  names: ["\\@char"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var arg = assertNodeType(args[0], "ordgroup");
+    var group = arg.body;
+    var number = "";
+
+    for (var i = 0; i < group.length; i++) {
+      var node = assertNodeType(group[i], "textord");
+      number += node.text;
+    }
+
+    var code = parseInt(number);
+
+    if (isNaN(code)) {
+      throw new src_ParseError("\\@char has non-numeric argument " + number);
+    }
+
+    return {
+      type: "textord",
+      mode: parser.mode,
+      text: String.fromCharCode(code)
+    };
+  }
+});
+// CONCATENATED MODULE: ./src/functions/color.js
+
+
+
+
+
+
+
+var color_htmlBuilder = function htmlBuilder(group, options) {
+  var elements = buildHTML_buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains.
+  // To accomplish this, we wrap the results in a fragment, so the inner
+  // elements will be able to directly interact with their neighbors. For
+  // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
+
+  return buildCommon.makeFragment(elements);
+};
+
+var color_mathmlBuilder = function mathmlBuilder(group, options) {
+  var inner = buildMathML_buildExpression(group.body, options.withColor(group.color));
+  var node = new mathMLTree.MathNode("mstyle", inner);
+  node.setAttribute("mathcolor", group.color);
+  return node;
+};
+
+defineFunction({
+  type: "color",
+  names: ["\\textcolor"],
+  props: {
+    numArgs: 2,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "original"]
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var color = assertNodeType(args[0], "color-token").color;
+    var body = args[1];
+    return {
+      type: "color",
+      mode: parser.mode,
+      color: color,
+      body: defineFunction_ordargument(body)
+    };
+  },
+  htmlBuilder: color_htmlBuilder,
+  mathmlBuilder: color_mathmlBuilder
+});
+defineFunction({
+  type: "color",
+  names: ["\\color"],
+  props: {
+    numArgs: 1,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color"]
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser,
+        breakOnTokenText = _ref2.breakOnTokenText;
+    var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current
+    // color, mimicking the behavior of color.sty.
+    // This is currently used just to correctly color a \right
+    // that follows a \color command.
+
+    parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored.
+
+    var body = parser.parseExpression(true, breakOnTokenText);
+    return {
+      type: "color",
+      mode: parser.mode,
+      color: color,
+      body: body
+    };
+  },
+  htmlBuilder: color_htmlBuilder,
+  mathmlBuilder: color_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/cr.js
+// Row breaks within tabular environments, and line breaks at top level
+
+
+
+
+
+ // \\ is a macro mapping to either \cr or \newline.  Because they have the
+// same signature, we implement them as one megafunction, with newRow
+// indicating whether we're in the \cr case, and newLine indicating whether
+// to break the line in the \newline case.
+
+defineFunction({
+  type: "cr",
+  names: ["\\cr", "\\newline"],
+  props: {
+    numArgs: 0,
+    numOptionalArgs: 1,
+    argTypes: ["size"],
+    allowedInText: true
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var size = optArgs[0];
+    var newRow = funcName === "\\cr";
+    var newLine = false;
+
+    if (!newRow) {
+      if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) {
+        newLine = false;
+      } else {
+        newLine = true;
+      }
+    }
+
+    return {
+      type: "cr",
+      mode: parser.mode,
+      newLine: newLine,
+      newRow: newRow,
+      size: size && assertNodeType(size, "size").value
+    };
+  },
+  // The following builders are called only at the top level,
+  // not within tabular/array environments.
+  htmlBuilder: function htmlBuilder(group, options) {
+    if (group.newRow) {
+      throw new src_ParseError("\\cr valid only within a tabular/array environment");
+    }
+
+    var span = buildCommon.makeSpan(["mspace"], [], options);
+
+    if (group.newLine) {
+      span.classes.push("newline");
+
+      if (group.size) {
+        span.style.marginTop = units_calculateSize(group.size, options) + "em";
+      }
+    }
+
+    return span;
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mspace");
+
+    if (group.newLine) {
+      node.setAttribute("linebreak", "newline");
+
+      if (group.size) {
+        node.setAttribute("height", units_calculateSize(group.size, options) + "em");
+      }
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/delimiter.js
+/**
+ * This file deals with creating delimiters of various sizes. The TeXbook
+ * discusses these routines on page 441-442, in the "Another subroutine sets box
+ * x to a specified variable delimiter" paragraph.
+ *
+ * There are three main routines here. `makeSmallDelim` makes a delimiter in the
+ * normal font, but in either text, script, or scriptscript style.
+ * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
+ * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
+ * smaller pieces that are stacked on top of one another.
+ *
+ * The functions take a parameter `center`, which determines if the delimiter
+ * should be centered around the axis.
+ *
+ * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
+ * one of the given sizes. This is used for things like `\bigl`.
+ * `customSizedDelim` makes a delimiter with a given total height+depth. It is
+ * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
+ * delimiter which surrounds an expression of a given height an depth. It is
+ * used in `\left` and `\right`.
+ */
+
+
+
+
+
+
+
+
+
+/**
+ * Get the metrics for a given symbol and font, after transformation (i.e.
+ * after following replacement from symbols.js)
+ */
+var delimiter_getMetrics = function getMetrics(symbol, font, mode) {
+  var replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace;
+  var metrics = getCharacterMetrics(replace || symbol, font, mode);
+
+  if (!metrics) {
+    throw new Error("Unsupported symbol " + symbol + " and font size " + font + ".");
+  }
+
+  return metrics;
+};
+/**
+ * Puts a delimiter span in a given style, and adds appropriate height, depth,
+ * and maxFontSizes.
+ */
+
+
+var delimiter_styleWrap = function styleWrap(delim, toStyle, options, classes) {
+  var newOptions = options.havingBaseStyle(toStyle);
+  var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);
+  var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
+  span.height *= delimSizeMultiplier;
+  span.depth *= delimSizeMultiplier;
+  span.maxFontSize = newOptions.sizeMultiplier;
+  return span;
+};
+
+var centerSpan = function centerSpan(span, options, style) {
+  var newOptions = options.havingBaseStyle(style);
+  var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
+  span.classes.push("delimcenter");
+  span.style.top = shift + "em";
+  span.height -= shift;
+  span.depth += shift;
+};
+/**
+ * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
+ * font, but is restyled to either be in textstyle, scriptstyle, or
+ * scriptscriptstyle.
+ */
+
+
+var delimiter_makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
+  var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
+  var span = delimiter_styleWrap(text, style, options, classes);
+
+  if (center) {
+    centerSpan(span, options, style);
+  }
+
+  return span;
+};
+/**
+ * Builds a symbol in the given font size (note size is an integer)
+ */
+
+
+var delimiter_mathrmSize = function mathrmSize(value, size, mode, options) {
+  return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options);
+};
+/**
+ * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
+ * Size3, or Size4 fonts. It is always rendered in textstyle.
+ */
+
+
+var delimiter_makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
+  var inner = delimiter_mathrmSize(delim, size, mode, options);
+  var span = delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes);
+
+  if (center) {
+    centerSpan(span, options, src_Style.TEXT);
+  }
+
+  return span;
+};
+/**
+ * Make an inner span with the given offset and in the given font. This is used
+ * in `makeStackedDelim` to make the stacking pieces for the delimiter.
+ */
+
+
+var delimiter_makeInner = function makeInner(symbol, font, mode) {
+  var sizeClass; // Apply the correct CSS class to choose the right font.
+
+  if (font === "Size1-Regular") {
+    sizeClass = "delim-size1";
+  } else
+    /* if (font === "Size4-Regular") */
+    {
+      sizeClass = "delim-size4";
+    }
+
+  var inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element
+  // in the appropriate tag that VList uses.
+
+  return {
+    type: "elem",
+    elem: inner
+  };
+}; // Helper for makeStackedDelim
+
+
+var lap = {
+  type: "kern",
+  size: -0.005
+};
+/**
+ * Make a stacked delimiter out of a given delimiter, with the total height at
+ * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
+ */
+
+var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
+  // There are four parts, the top, an optional middle, a repeated part, and a
+  // bottom.
+  var top;
+  var middle;
+  var repeat;
+  var bottom;
+  top = repeat = bottom = delim;
+  middle = null; // Also keep track of what font the delimiters are in
+
+  var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use
+  // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
+  // repeats of the arrows
+
+  if (delim === "\\uparrow") {
+    repeat = bottom = "\u23D0";
+  } else if (delim === "\\Uparrow") {
+    repeat = bottom = "\u2016";
+  } else if (delim === "\\downarrow") {
+    top = repeat = "\u23D0";
+  } else if (delim === "\\Downarrow") {
+    top = repeat = "\u2016";
+  } else if (delim === "\\updownarrow") {
+    top = "\\uparrow";
+    repeat = "\u23D0";
+    bottom = "\\downarrow";
+  } else if (delim === "\\Updownarrow") {
+    top = "\\Uparrow";
+    repeat = "\u2016";
+    bottom = "\\Downarrow";
+  } else if (delim === "[" || delim === "\\lbrack") {
+    top = "\u23A1";
+    repeat = "\u23A2";
+    bottom = "\u23A3";
+    font = "Size4-Regular";
+  } else if (delim === "]" || delim === "\\rbrack") {
+    top = "\u23A4";
+    repeat = "\u23A5";
+    bottom = "\u23A6";
+    font = "Size4-Regular";
+  } else if (delim === "\\lfloor" || delim === "\u230A") {
+    repeat = top = "\u23A2";
+    bottom = "\u23A3";
+    font = "Size4-Regular";
+  } else if (delim === "\\lceil" || delim === "\u2308") {
+    top = "\u23A1";
+    repeat = bottom = "\u23A2";
+    font = "Size4-Regular";
+  } else if (delim === "\\rfloor" || delim === "\u230B") {
+    repeat = top = "\u23A5";
+    bottom = "\u23A6";
+    font = "Size4-Regular";
+  } else if (delim === "\\rceil" || delim === "\u2309") {
+    top = "\u23A4";
+    repeat = bottom = "\u23A5";
+    font = "Size4-Regular";
+  } else if (delim === "(" || delim === "\\lparen") {
+    top = "\u239B";
+    repeat = "\u239C";
+    bottom = "\u239D";
+    font = "Size4-Regular";
+  } else if (delim === ")" || delim === "\\rparen") {
+    top = "\u239E";
+    repeat = "\u239F";
+    bottom = "\u23A0";
+    font = "Size4-Regular";
+  } else if (delim === "\\{" || delim === "\\lbrace") {
+    top = "\u23A7";
+    middle = "\u23A8";
+    bottom = "\u23A9";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } else if (delim === "\\}" || delim === "\\rbrace") {
+    top = "\u23AB";
+    middle = "\u23AC";
+    bottom = "\u23AD";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } else if (delim === "\\lgroup" || delim === "\u27EE") {
+    top = "\u23A7";
+    bottom = "\u23A9";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } else if (delim === "\\rgroup" || delim === "\u27EF") {
+    top = "\u23AB";
+    bottom = "\u23AD";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } else if (delim === "\\lmoustache" || delim === "\u23B0") {
+    top = "\u23A7";
+    bottom = "\u23AD";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } else if (delim === "\\rmoustache" || delim === "\u23B1") {
+    top = "\u23AB";
+    bottom = "\u23A9";
+    repeat = "\u23AA";
+    font = "Size4-Regular";
+  } // Get the metrics of the four sections
+
+
+  var topMetrics = delimiter_getMetrics(top, font, mode);
+  var topHeightTotal = topMetrics.height + topMetrics.depth;
+  var repeatMetrics = delimiter_getMetrics(repeat, font, mode);
+  var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
+  var bottomMetrics = delimiter_getMetrics(bottom, font, mode);
+  var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
+  var middleHeightTotal = 0;
+  var middleFactor = 1;
+
+  if (middle !== null) {
+    var middleMetrics = delimiter_getMetrics(middle, font, mode);
+    middleHeightTotal = middleMetrics.height + middleMetrics.depth;
+    middleFactor = 2; // repeat symmetrically above and below middle
+  } // Calcuate the minimal height that the delimiter can have.
+  // It is at least the size of the top, bottom, and optional middle combined.
+
+
+  var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need
+
+  var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols
+
+  var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note
+  // that in this context, "center" means that the delimiter should be
+  // centered around the axis in the current style, while normally it is
+  // centered around the axis in textstyle.
+
+  var axisHeight = options.fontMetrics().axisHeight;
+
+  if (center) {
+    axisHeight *= options.sizeMultiplier;
+  } // Calculate the depth
+
+
+  var depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way.
+  // We shift each repeat element downwards by 0.005em, to prevent a gap
+  // due to browser floating point rounding error.
+  // Then, at the last element-to element joint, we add one extra repeat
+  // element to cover the gap created by the shifts.
+  // Find the shift needed to align the upper end of the extra element at a point
+  // 0.005em above the lower end of the top element.
+
+  var shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist
+  // Keep a list of the inner pieces
+
+  var inners = []; // Add the bottom symbol
+
+  inners.push(delimiter_makeInner(bottom, font, mode));
+
+  if (middle === null) {
+    // Add that many symbols
+    for (var i = 0; i < repeatCount; i++) {
+      inners.push(lap); // overlap
+
+      inners.push(delimiter_makeInner(repeat, font, mode));
+    }
+  } else {
+    // When there is a middle bit, we need the middle part and two repeated
+    // sections
+    for (var _i = 0; _i < repeatCount; _i++) {
+      inners.push(lap);
+      inners.push(delimiter_makeInner(repeat, font, mode));
+    } // Insert one extra repeat element.
+
+
+    inners.push({
+      type: "kern",
+      size: shiftOfExtraElement
+    });
+    inners.push(delimiter_makeInner(repeat, font, mode));
+    inners.push(lap); // Now insert the middle of the brace.
+
+    inners.push(delimiter_makeInner(middle, font, mode));
+
+    for (var _i2 = 0; _i2 < repeatCount; _i2++) {
+      inners.push(lap);
+      inners.push(delimiter_makeInner(repeat, font, mode));
+    }
+  } // To cover the gap create by the overlaps, insert one more repeat element,
+  // at a position that juts 0.005 above the bottom of the top element.
+
+
+  inners.push({
+    type: "kern",
+    size: shiftOfExtraElement
+  });
+  inners.push(delimiter_makeInner(repeat, font, mode));
+  inners.push(lap); // Add the top symbol
+
+  inners.push(delimiter_makeInner(top, font, mode)); // Finally, build the vlist
+
+  var newOptions = options.havingBaseStyle(src_Style.TEXT);
+  var inner = buildCommon.makeVList({
+    positionType: "bottom",
+    positionData: depth,
+    children: inners
+  }, newOptions);
+  return delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes);
+}; // All surds have 0.08em padding above the viniculum inside the SVG.
+// That keeps browser span height rounding error from pinching the line.
+
+
+var vbPad = 80; // padding above the surd, measured inside the viewBox.
+
+var emPad = 0.08; // padding, in ems, measured in the document.
+
+var delimiter_sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) {
+  var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight);
+  var pathNode = new domTree_PathNode(sqrtName, path);
+  var svg = new SvgNode([pathNode], {
+    // Note: 1000:1 ratio of viewBox to document em width.
+    "width": "400em",
+    "height": height + "em",
+    "viewBox": "0 0 400000 " + viewBoxHeight,
+    "preserveAspectRatio": "xMinYMin slice"
+  });
+  return buildCommon.makeSvgSpan(["hide-tail"], [svg], options);
+};
+/**
+ * Make a sqrt image of the given height,
+ */
+
+
+var makeSqrtImage = function makeSqrtImage(height, options) {
+  // Define a newOptions that removes the effect of size changes such as \Huge.
+  // We don't pick different a height surd for \Huge. For it, we scale up.
+  var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.
+
+  var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
+  var sizeMultiplier = newOptions.sizeMultiplier; // default
+  // The standard sqrt SVGs each have a 0.04em thick viniculum.
+  // If Settings.minRuleThickness is larger than that, we add extraViniculum.
+
+  var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.
+
+  var span;
+  var spanHeight = 0;
+  var texHeight = 0;
+  var viewBoxHeight = 0;
+  var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd.
+  // Then browser rounding error on the parent span height will not
+  // encroach on the ink of the viniculum. But that padding is not
+  // included in the TeX-like `height` used for calculation of
+  // vertical alignment. So texHeight = span.height < span.style.height.
+
+  if (delim.type === "small") {
+    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
+    // 1000 unit normal glyph height.
+    viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad;
+
+    if (height < 1.0) {
+      sizeMultiplier = 1.0; // mimic a \textfont radical
+    } else if (height < 1.4) {
+      sizeMultiplier = 0.7; // mimic a \scriptfont radical
+    }
+
+    spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier;
+    texHeight = (1.00 + extraViniculum) / sizeMultiplier;
+    span = delimiter_sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "0.853em";
+    advanceWidth = 0.833 / sizeMultiplier; // from the font.
+  } else if (delim.type === "large") {
+    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
+    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];
+    texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier;
+    spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier;
+    span = delimiter_sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "1.02em";
+    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.
+  } else {
+    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
+    // We'll use a single SVG to accomplish the same thing.
+    spanHeight = height + extraViniculum + emPad;
+    texHeight = height + extraViniculum;
+    viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad;
+    span = delimiter_sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "0.742em";
+    advanceWidth = 1.056;
+  }
+
+  span.height = texHeight;
+  span.style.height = spanHeight + "em";
+  return {
+    span: span,
+    advanceWidth: advanceWidth,
+    // Calculate the actual line width.
+    // This actually should depend on the chosen font -- e.g. \boldmath
+    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
+    // have thicker rules.
+    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier
+  };
+}; // There are three kinds of delimiters, delimiters that stack when they become
+// too large
+
+
+var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack
+
+var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]; // and delimiters that never stack
+
+var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of
+// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$
+// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.
+
+var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
+/**
+ * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
+ */
+
+var delimiter_makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {
+  // < and > turn into \langle and \rangle in delimiters
+  if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
+    delim = "\\langle";
+  } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
+    delim = "\\rangle";
+  } // Sized delimiters are never centered.
+
+
+  if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {
+    return delimiter_makeLargeDelim(delim, size, false, options, mode, classes);
+  } else if (utils.contains(stackAlwaysDelimiters, delim)) {
+    return delimiter_makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
+  } else {
+    throw new src_ParseError("Illegal delimiter: '" + delim + "'");
+  }
+};
+/**
+ * There are three different sequences of delimiter sizes that the delimiters
+ * follow depending on the kind of delimiter. This is used when creating custom
+ * sized delimiters to decide whether to create a small, large, or stacked
+ * delimiter.
+ *
+ * In real TeX, these sequences aren't explicitly defined, but are instead
+ * defined inside the font metrics. Since there are only three sequences that
+ * are possible for the delimiters that TeX defines, it is easier to just encode
+ * them explicitly here.
+ */
+
+
+// Delimiters that never stack try small delimiters and large delimiters only
+var stackNeverDelimiterSequence = [{
+  type: "small",
+  style: src_Style.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: src_Style.SCRIPT
+}, {
+  type: "small",
+  style: src_Style.TEXT
+}, {
+  type: "large",
+  size: 1
+}, {
+  type: "large",
+  size: 2
+}, {
+  type: "large",
+  size: 3
+}, {
+  type: "large",
+  size: 4
+}]; // Delimiters that always stack try the small delimiters first, then stack
+
+var stackAlwaysDelimiterSequence = [{
+  type: "small",
+  style: src_Style.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: src_Style.SCRIPT
+}, {
+  type: "small",
+  style: src_Style.TEXT
+}, {
+  type: "stack"
+}]; // Delimiters that stack when large try the small and then large delimiters, and
+// stack afterwards
+
+var stackLargeDelimiterSequence = [{
+  type: "small",
+  style: src_Style.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: src_Style.SCRIPT
+}, {
+  type: "small",
+  style: src_Style.TEXT
+}, {
+  type: "large",
+  size: 1
+}, {
+  type: "large",
+  size: 2
+}, {
+  type: "large",
+  size: 3
+}, {
+  type: "large",
+  size: 4
+}, {
+  type: "stack"
+}];
+/**
+ * Get the font used in a delimiter based on what kind of delimiter it is.
+ * TODO(#963) Use more specific font family return type once that is introduced.
+ */
+
+var delimTypeToFont = function delimTypeToFont(type) {
+  if (type.type === "small") {
+    return "Main-Regular";
+  } else if (type.type === "large") {
+    return "Size" + type.size + "-Regular";
+  } else if (type.type === "stack") {
+    return "Size4-Regular";
+  } else {
+    throw new Error("Add support for delim type '" + type.type + "' here.");
+  }
+};
+/**
+ * Traverse a sequence of types of delimiters to decide what kind of delimiter
+ * should be used to create a delimiter of the given height+depth.
+ */
+
+
+var traverseSequence = function traverseSequence(delim, height, sequence, options) {
+  // Here, we choose the index we should start at in the sequences. In smaller
+  // sizes (which correspond to larger numbers in style.size) we start earlier
+  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
+  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
+  var start = Math.min(2, 3 - options.style.size);
+
+  for (var i = start; i < sequence.length; i++) {
+    if (sequence[i].type === "stack") {
+      // This is always the last delimiter, so we just break the loop now.
+      break;
+    }
+
+    var metrics = delimiter_getMetrics(delim, delimTypeToFont(sequence[i]), "math");
+    var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we
+    // account for the style change size.
+
+    if (sequence[i].type === "small") {
+      var newOptions = options.havingBaseStyle(sequence[i].style);
+      heightDepth *= newOptions.sizeMultiplier;
+    } // Check if the delimiter at this size works for the given height.
+
+
+    if (heightDepth > height) {
+      return sequence[i];
+    }
+  } // If we reached the end of the sequence, return the last sequence element.
+
+
+  return sequence[sequence.length - 1];
+};
+/**
+ * Make a delimiter of a given height+depth, with optional centering. Here, we
+ * traverse the sequences, and create a delimiter that the sequence tells us to.
+ */
+
+
+var delimiter_makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
+  if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
+    delim = "\\langle";
+  } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
+    delim = "\\rangle";
+  } // Decide what sequence to use
+
+
+  var sequence;
+
+  if (utils.contains(stackNeverDelimiters, delim)) {
+    sequence = stackNeverDelimiterSequence;
+  } else if (utils.contains(stackLargeDelimiters, delim)) {
+    sequence = stackLargeDelimiterSequence;
+  } else {
+    sequence = stackAlwaysDelimiterSequence;
+  } // Look through the sequence
+
+
+  var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.
+  // Depending on the sequence element we decided on, call the
+  // appropriate function.
+
+  if (delimType.type === "small") {
+    return delimiter_makeSmallDelim(delim, delimType.style, center, options, mode, classes);
+  } else if (delimType.type === "large") {
+    return delimiter_makeLargeDelim(delim, delimType.size, center, options, mode, classes);
+  } else
+    /* if (delimType.type === "stack") */
+    {
+      return delimiter_makeStackedDelim(delim, height, center, options, mode, classes);
+    }
+};
+/**
+ * Make a delimiter for use with `\left` and `\right`, given a height and depth
+ * of an expression that the delimiters surround.
+ */
+
+
+var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
+  // We always center \left/\right delimiters, so the axis is always shifted
+  var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right
+
+  var delimiterFactor = 901;
+  var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
+  var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
+  var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are
+  // 65536 per pt, or 655360 per em. So, the division here truncates in
+  // TeX but doesn't here, producing different results. If we wanted to
+  // exactly match TeX's calculation, we could do
+  //   Math.floor(655360 * maxDistFromAxis / 500) *
+  //    delimiterFactor / 655360
+  // (To see the difference, compare
+  //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
+  // in TeX and KaTeX)
+  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total
+  // height
+
+  return delimiter_makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
+};
+
+/* harmony default export */ var delimiter = ({
+  sqrtImage: makeSqrtImage,
+  sizedDelim: delimiter_makeSizedDelim,
+  customSizedDelim: delimiter_makeCustomSizedDelim,
+  leftRightDelim: makeLeftRightDelim
+});
+// CONCATENATED MODULE: ./src/functions/delimsizing.js
+
+
+
+
+
+
+
+
+
+// Extra data needed for the delimiter handler down below
+var delimiterSizes = {
+  "\\bigl": {
+    mclass: "mopen",
+    size: 1
+  },
+  "\\Bigl": {
+    mclass: "mopen",
+    size: 2
+  },
+  "\\biggl": {
+    mclass: "mopen",
+    size: 3
+  },
+  "\\Biggl": {
+    mclass: "mopen",
+    size: 4
+  },
+  "\\bigr": {
+    mclass: "mclose",
+    size: 1
+  },
+  "\\Bigr": {
+    mclass: "mclose",
+    size: 2
+  },
+  "\\biggr": {
+    mclass: "mclose",
+    size: 3
+  },
+  "\\Biggr": {
+    mclass: "mclose",
+    size: 4
+  },
+  "\\bigm": {
+    mclass: "mrel",
+    size: 1
+  },
+  "\\Bigm": {
+    mclass: "mrel",
+    size: 2
+  },
+  "\\biggm": {
+    mclass: "mrel",
+    size: 3
+  },
+  "\\Biggm": {
+    mclass: "mrel",
+    size: 4
+  },
+  "\\big": {
+    mclass: "mord",
+    size: 1
+  },
+  "\\Big": {
+    mclass: "mord",
+    size: 2
+  },
+  "\\bigg": {
+    mclass: "mord",
+    size: 3
+  },
+  "\\Bigg": {
+    mclass: "mord",
+    size: 4
+  }
+};
+var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."];
+
+// Delimiter functions
+function checkDelimiter(delim, context) {
+  var symDelim = checkSymbolNodeType(delim);
+
+  if (symDelim && utils.contains(delimiters, symDelim.text)) {
+    return symDelim;
+  } else {
+    throw new src_ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim);
+  }
+}
+
+defineFunction({
+  type: "delimsizing",
+  names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    var delim = checkDelimiter(args[0], context);
+    return {
+      type: "delimsizing",
+      mode: context.parser.mode,
+      size: delimiterSizes[context.funcName].size,
+      mclass: delimiterSizes[context.funcName].mclass,
+      delim: delim.text
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    if (group.delim === ".") {
+      // Empty delimiters still count as elements, even though they don't
+      // show anything.
+      return buildCommon.makeSpan([group.mclass]);
+    } // Use delimiter.sizedDelim to generate the delimiter.
+
+
+    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);
+  },
+  mathmlBuilder: function mathmlBuilder(group) {
+    var children = [];
+
+    if (group.delim !== ".") {
+      children.push(buildMathML_makeText(group.delim, group.mode));
+    }
+
+    var node = new mathMLTree.MathNode("mo", children);
+
+    if (group.mclass === "mopen" || group.mclass === "mclose") {
+      // Only some of the delimsizing functions act as fences, and they
+      // return "mopen" or "mclose" mclass.
+      node.setAttribute("fence", "true");
+    } else {
+      // Explicitly disable fencing if it's not a fence, to override the
+      // defaults.
+      node.setAttribute("fence", "false");
+    }
+
+    return node;
+  }
+});
+
+function assertParsed(group) {
+  if (!group.body) {
+    throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
+  }
+}
+
+defineFunction({
+  type: "leftright-right",
+  names: ["\\right"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    // \left case below triggers parsing of \right in
+    //   `const right = parser.parseFunction();`
+    // uses this return value.
+    var color = context.parser.gullet.macros.get("\\current@color");
+
+    if (color && typeof color !== "string") {
+      throw new src_ParseError("\\current@color set to non-string in \\right");
+    }
+
+    return {
+      type: "leftright-right",
+      mode: context.parser.mode,
+      delim: checkDelimiter(args[0], context).text,
+      color: color // undefined if not set via \color
+
+    };
+  }
+});
+defineFunction({
+  type: "leftright",
+  names: ["\\left"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    var delim = checkDelimiter(args[0], context);
+    var parser = context.parser; // Parse out the implicit body
+
+    ++parser.leftrightDepth; // parseExpression stops before '\\right'
+
+    var body = parser.parseExpression(false);
+    --parser.leftrightDepth; // Check the next token
+
+    parser.expect("\\right", false);
+    var right = assertNodeType(parser.parseFunction(), "leftright-right");
+    return {
+      type: "leftright",
+      mode: parser.mode,
+      body: body,
+      left: delim.text,
+      right: right.delim,
+      rightColor: right.color
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    assertParsed(group); // Build the inner expression
+
+    var inner = buildHTML_buildExpression(group.body, options, true, ["mopen", "mclose"]);
+    var innerHeight = 0;
+    var innerDepth = 0;
+    var hadMiddle = false; // Calculate its height and depth
+
+    for (var i = 0; i < inner.length; i++) {
+      // Property `isMiddle` not defined on `span`. See comment in
+      // "middle"'s htmlBuilder.
+      // $FlowFixMe
+      if (inner[i].isMiddle) {
+        hadMiddle = true;
+      } else {
+        innerHeight = Math.max(inner[i].height, innerHeight);
+        innerDepth = Math.max(inner[i].depth, innerDepth);
+      }
+    } // The size of delimiters is the same, regardless of what style we are
+    // in. Thus, to correctly calculate the size of delimiter we need around
+    // a group, we scale down the inner size based on the size.
+
+
+    innerHeight *= options.sizeMultiplier;
+    innerDepth *= options.sizeMultiplier;
+    var leftDelim;
+
+    if (group.left === ".") {
+      // Empty delimiters in \left and \right make null delimiter spaces.
+      leftDelim = makeNullDelimiter(options, ["mopen"]);
+    } else {
+      // Otherwise, use leftRightDelim to generate the correct sized
+      // delimiter.
+      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
+    } // Add it to the beginning of the expression
+
+
+    inner.unshift(leftDelim); // Handle middle delimiters
+
+    if (hadMiddle) {
+      for (var _i = 1; _i < inner.length; _i++) {
+        var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in
+        // "middle"'s htmlBuilder.
+        // $FlowFixMe
+
+        var isMiddle = middleDelim.isMiddle;
+
+        if (isMiddle) {
+          // Apply the options that were active when \middle was called
+          inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);
+        }
+      }
+    }
+
+    var rightDelim; // Same for the right delimiter, but using color specified by \color
+
+    if (group.right === ".") {
+      rightDelim = makeNullDelimiter(options, ["mclose"]);
+    } else {
+      var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;
+      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);
+    } // Add it to the end of the expression.
+
+
+    inner.push(rightDelim);
+    return buildCommon.makeSpan(["minner"], inner, options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    assertParsed(group);
+    var inner = buildMathML_buildExpression(group.body, options);
+
+    if (group.left !== ".") {
+      var leftNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.left, group.mode)]);
+      leftNode.setAttribute("fence", "true");
+      inner.unshift(leftNode);
+    }
+
+    if (group.right !== ".") {
+      var rightNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.right, group.mode)]);
+      rightNode.setAttribute("fence", "true");
+
+      if (group.rightColor) {
+        rightNode.setAttribute("mathcolor", group.rightColor);
+      }
+
+      inner.push(rightNode);
+    }
+
+    return buildMathML_makeRow(inner);
+  }
+});
+defineFunction({
+  type: "middle",
+  names: ["\\middle"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    var delim = checkDelimiter(args[0], context);
+
+    if (!context.parser.leftrightDepth) {
+      throw new src_ParseError("\\middle without preceding \\left", delim);
+    }
+
+    return {
+      type: "middle",
+      mode: context.parser.mode,
+      delim: delim.text
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var middleDelim;
+
+    if (group.delim === ".") {
+      middleDelim = makeNullDelimiter(options, []);
+    } else {
+      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);
+      var isMiddle = {
+        delim: group.delim,
+        options: options
+      }; // Property `isMiddle` not defined on `span`. It is only used in
+      // this file above.
+      // TODO: Fix this violation of the `span` type and possibly rename
+      // things since `isMiddle` sounds like a boolean, but is a struct.
+      // $FlowFixMe
+
+      middleDelim.isMiddle = isMiddle;
+    }
+
+    return middleDelim;
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    // A Firefox \middle will strech a character vertically only if it
+    // is in the fence part of the operator dictionary at:
+    // https://www.w3.org/TR/MathML3/appendixc.html.
+    // So we need to avoid U+2223 and use plain "|" instead.
+    var textNode = group.delim === "\\vert" || group.delim === "|" ? buildMathML_makeText("|", "text") : buildMathML_makeText(group.delim, group.mode);
+    var middleNode = new mathMLTree.MathNode("mo", [textNode]);
+    middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each <mo> element.
+    // \middle should get delimiter spacing instead.
+
+    middleNode.setAttribute("lspace", "0.05em");
+    middleNode.setAttribute("rspace", "0.05em");
+    return middleNode;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/enclose.js
+
+
+
+
+
+
+
+
+
+var enclose_htmlBuilder = function htmlBuilder(group, options) {
+  // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox
+  // Some groups can return document fragments.  Handle those by wrapping
+  // them in a span.
+  var inner = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, options), options);
+  var label = group.label.substr(1);
+  var scale = options.sizeMultiplier;
+  var img;
+  var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different
+  // depending on whether the subject is wider than it is tall, or vice versa.
+  // We don't know the width of a group, so as a proxy, we test if
+  // the subject is a single character. This captures most of the
+  // subjects that should get the "tall" treatment.
+
+  var isSingleChar = utils.isCharacterBox(group.body);
+
+  if (label === "sout") {
+    img = buildCommon.makeSpan(["stretchy", "sout"]);
+    img.height = options.fontMetrics().defaultRuleThickness / scale;
+    imgShift = -0.5 * options.fontMetrics().xHeight;
+  } else {
+    // Add horizontal padding
+    if (/cancel/.test(label)) {
+      if (!isSingleChar) {
+        inner.classes.push("cancel-pad");
+      }
+    } else {
+      inner.classes.push("boxpad");
+    } // Add vertical padding
+
+
+    var vertPad = 0;
+    var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2"
+
+    if (/box/.test(label)) {
+      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default
+      options.minRuleThickness // User override.
+      );
+      vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
+    } else {
+      vertPad = isSingleChar ? 0.2 : 0;
+    }
+
+    img = stretchy.encloseSpan(inner, label, vertPad, options);
+
+    if (/fbox|boxed|fcolorbox/.test(label)) {
+      img.style.borderStyle = "solid";
+      img.style.borderWidth = ruleThickness + "em";
+    }
+
+    imgShift = inner.depth + vertPad;
+
+    if (group.backgroundColor) {
+      img.style.backgroundColor = group.backgroundColor;
+
+      if (group.borderColor) {
+        img.style.borderColor = group.borderColor;
+      }
+    }
+  }
+
+  var vlist;
+
+  if (group.backgroundColor) {
+    vlist = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [// Put the color background behind inner;
+      {
+        type: "elem",
+        elem: img,
+        shift: imgShift
+      }, {
+        type: "elem",
+        elem: inner,
+        shift: 0
+      }]
+    }, options);
+  } else {
+    vlist = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [// Write the \cancel stroke on top of inner.
+      {
+        type: "elem",
+        elem: inner,
+        shift: 0
+      }, {
+        type: "elem",
+        elem: img,
+        shift: imgShift,
+        wrapperClasses: /cancel/.test(label) ? ["svg-align"] : []
+      }]
+    }, options);
+  }
+
+  if (/cancel/.test(label)) {
+    // The cancel package documentation says that cancel lines add their height
+    // to the expression, but tests show that isn't how it actually works.
+    vlist.height = inner.height;
+    vlist.depth = inner.depth;
+  }
+
+  if (/cancel/.test(label) && !isSingleChar) {
+    // cancel does not create horiz space for its line extension.
+    return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options);
+  } else {
+    return buildCommon.makeSpan(["mord"], [vlist], options);
+  }
+};
+
+var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
+  var fboxsep = 0;
+  var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]);
+
+  switch (group.label) {
+    case "\\cancel":
+      node.setAttribute("notation", "updiagonalstrike");
+      break;
+
+    case "\\bcancel":
+      node.setAttribute("notation", "downdiagonalstrike");
+      break;
+
+    case "\\sout":
+      node.setAttribute("notation", "horizontalstrike");
+      break;
+
+    case "\\fbox":
+      node.setAttribute("notation", "box");
+      break;
+
+    case "\\fcolorbox":
+    case "\\colorbox":
+      // <menclose> doesn't have a good notation option. So use <mpadded>
+      // instead. Set some attributes that come included with <menclose>.
+      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;
+      node.setAttribute("width", "+" + 2 * fboxsep + "pt");
+      node.setAttribute("height", "+" + 2 * fboxsep + "pt");
+      node.setAttribute("lspace", fboxsep + "pt"); //
+
+      node.setAttribute("voffset", fboxsep + "pt");
+
+      if (group.label === "\\fcolorbox") {
+        var thk = Math.max(options.fontMetrics().fboxrule, // default
+        options.minRuleThickness // user override
+        );
+        node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
+      }
+
+      break;
+
+    case "\\xcancel":
+      node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
+      break;
+  }
+
+  if (group.backgroundColor) {
+    node.setAttribute("mathbackground", group.backgroundColor);
+  }
+
+  return node;
+};
+
+defineFunction({
+  type: "enclose",
+  names: ["\\colorbox"],
+  props: {
+    numArgs: 2,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "text"]
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var color = assertNodeType(args[0], "color-token").color;
+    var body = args[1];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      backgroundColor: color,
+      body: body
+    };
+  },
+  htmlBuilder: enclose_htmlBuilder,
+  mathmlBuilder: enclose_mathmlBuilder
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\fcolorbox"],
+  props: {
+    numArgs: 3,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "color", "text"]
+  },
+  handler: function handler(_ref2, args, optArgs) {
+    var parser = _ref2.parser,
+        funcName = _ref2.funcName;
+    var borderColor = assertNodeType(args[0], "color-token").color;
+    var backgroundColor = assertNodeType(args[1], "color-token").color;
+    var body = args[2];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      backgroundColor: backgroundColor,
+      borderColor: borderColor,
+      body: body
+    };
+  },
+  htmlBuilder: enclose_htmlBuilder,
+  mathmlBuilder: enclose_mathmlBuilder
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\fbox"],
+  props: {
+    numArgs: 1,
+    argTypes: ["hbox"],
+    allowedInText: true
+  },
+  handler: function handler(_ref3, args) {
+    var parser = _ref3.parser;
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: "\\fbox",
+      body: args[0]
+    };
+  }
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref4, args, optArgs) {
+    var parser = _ref4.parser,
+        funcName = _ref4.funcName;
+    var body = args[0];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      body: body
+    };
+  },
+  htmlBuilder: enclose_htmlBuilder,
+  mathmlBuilder: enclose_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/defineEnvironment.js
+
+
+/**
+ * All registered environments.
+ * `environments.js` exports this same dictionary again and makes it public.
+ * `Parser.js` requires this dictionary via `environments.js`.
+ */
+var _environments = {};
+function defineEnvironment(_ref) {
+  var type = _ref.type,
+      names = _ref.names,
+      props = _ref.props,
+      handler = _ref.handler,
+      htmlBuilder = _ref.htmlBuilder,
+      mathmlBuilder = _ref.mathmlBuilder;
+  // Set default values of environments.
+  var data = {
+    type: type,
+    numArgs: props.numArgs || 0,
+    greediness: 1,
+    allowedInText: false,
+    numOptionalArgs: 0,
+    handler: handler
+  };
+
+  for (var i = 0; i < names.length; ++i) {
+    // TODO: The value type of _environments should be a type union of all
+    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is
+    // an existential type.
+    // $FlowFixMe
+    _environments[names[i]] = data;
+  }
+
+  if (htmlBuilder) {
+    _htmlGroupBuilders[type] = htmlBuilder;
+  }
+
+  if (mathmlBuilder) {
+    _mathmlGroupBuilders[type] = mathmlBuilder;
+  }
+}
+// CONCATENATED MODULE: ./src/environments/array.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+function getHLines(parser) {
+  // Return an array. The array length = number of hlines.
+  // Each element in the array tells if the line is dashed.
+  var hlineInfo = [];
+  parser.consumeSpaces();
+  var nxt = parser.fetch().text;
+
+  while (nxt === "\\hline" || nxt === "\\hdashline") {
+    parser.consume();
+    hlineInfo.push(nxt === "\\hdashline");
+    parser.consumeSpaces();
+    nxt = parser.fetch().text;
+  }
+
+  return hlineInfo;
+}
+/**
+ * Parse the body of the environment, with rows delimited by \\ and
+ * columns delimited by &, and create a nested list in row-major order
+ * with one group per cell.  If given an optional argument style
+ * ("text", "display", etc.), then each cell is cast into that style.
+ */
+
+
+function parseArray(parser, _ref, style) {
+  var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter,
+      addJot = _ref.addJot,
+      cols = _ref.cols,
+      arraystretch = _ref.arraystretch,
+      colSeparationType = _ref.colSeparationType;
+  // Parse body of array with \\ temporarily mapped to \cr
+  parser.gullet.beginGroup();
+  parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment
+
+  if (!arraystretch) {
+    var stretch = parser.gullet.expandMacroAsText("\\arraystretch");
+
+    if (stretch == null) {
+      // Default \arraystretch from lttab.dtx
+      arraystretch = 1;
+    } else {
+      arraystretch = parseFloat(stretch);
+
+      if (!arraystretch || arraystretch < 0) {
+        throw new src_ParseError("Invalid \\arraystretch: " + stretch);
+      }
+    }
+  } // Start group for first cell
+
+
+  parser.gullet.beginGroup();
+  var row = [];
+  var body = [row];
+  var rowGaps = [];
+  var hLinesBeforeRow = []; // Test for \hline at the top of the array.
+
+  hLinesBeforeRow.push(getHLines(parser));
+
+  while (true) {
+    // eslint-disable-line no-constant-condition
+    // Parse each cell in its own group (namespace)
+    var cell = parser.parseExpression(false, "\\cr");
+    parser.gullet.endGroup();
+    parser.gullet.beginGroup();
+    cell = {
+      type: "ordgroup",
+      mode: parser.mode,
+      body: cell
+    };
+
+    if (style) {
+      cell = {
+        type: "styling",
+        mode: parser.mode,
+        style: style,
+        body: [cell]
+      };
+    }
+
+    row.push(cell);
+    var next = parser.fetch().text;
+
+    if (next === "&") {
+      parser.consume();
+    } else if (next === "\\end") {
+      // Arrays terminate newlines with `\crcr` which consumes a `\cr` if
+      // the last line is empty.
+      // NOTE: Currently, `cell` is the last item added into `row`.
+      if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) {
+        body.pop();
+      }
+
+      if (hLinesBeforeRow.length < body.length + 1) {
+        hLinesBeforeRow.push([]);
+      }
+
+      break;
+    } else if (next === "\\cr") {
+      var cr = assertNodeType(parser.parseFunction(), "cr");
+      rowGaps.push(cr.size); // check for \hline(s) following the row separator
+
+      hLinesBeforeRow.push(getHLines(parser));
+      row = [];
+      body.push(row);
+    } else {
+      throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken);
+    }
+  } // End cell group
+
+
+  parser.gullet.endGroup(); // End array group defining \\
+
+  parser.gullet.endGroup();
+  return {
+    type: "array",
+    mode: parser.mode,
+    addJot: addJot,
+    arraystretch: arraystretch,
+    body: body,
+    cols: cols,
+    rowGaps: rowGaps,
+    hskipBeforeAndAfter: hskipBeforeAndAfter,
+    hLinesBeforeRow: hLinesBeforeRow,
+    colSeparationType: colSeparationType
+  };
+} // Decides on a style for cells in an array according to whether the given
+// environment name starts with the letter 'd'.
+
+
+function dCellStyle(envName) {
+  if (envName.substr(0, 1) === "d") {
+    return "display";
+  } else {
+    return "text";
+  }
+}
+
+var array_htmlBuilder = function htmlBuilder(group, options) {
+  var r;
+  var c;
+  var nr = group.body.length;
+  var hLinesBeforeRow = group.hLinesBeforeRow;
+  var nc = 0;
+  var body = new Array(nr);
+  var hlines = [];
+  var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
+  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.
+  ); // Horizontal spacing
+
+  var pt = 1 / options.fontMetrics().ptPerEm;
+  var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls
+
+  if (group.colSeparationType && group.colSeparationType === "small") {
+    // We're in a {smallmatrix}. Default column space is \thickspace,
+    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.
+    // But that needs adjustment because LaTeX applies \scriptstyle to the
+    // entire array, including the colspace, but this function applies
+    // \scriptstyle only inside each element.
+    var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier;
+    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);
+  } // Vertical spacing
+
+
+  var baselineskip = 12 * pt; // see size10.clo
+  // Default \jot from ltmath.dtx
+  // TODO(edemaine): allow overriding \jot via \setlength (#687)
+
+  var jot = 3 * pt;
+  var arrayskip = group.arraystretch * baselineskip;
+  var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
+
+  var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
+
+  var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any.
+
+  function setHLinePos(hlinesInGap) {
+    for (var i = 0; i < hlinesInGap.length; ++i) {
+      if (i > 0) {
+        totalHeight += 0.25;
+      }
+
+      hlines.push({
+        pos: totalHeight,
+        isDashed: hlinesInGap[i]
+      });
+    }
+  }
+
+  setHLinePos(hLinesBeforeRow[0]);
+
+  for (r = 0; r < group.body.length; ++r) {
+    var inrow = group.body[r];
+    var height = arstrutHeight; // \@array adds an \@arstrut
+
+    var depth = arstrutDepth; // to each tow (via the template)
+
+    if (nc < inrow.length) {
+      nc = inrow.length;
+    }
+
+    var outrow = new Array(inrow.length);
+
+    for (c = 0; c < inrow.length; ++c) {
+      var elt = buildHTML_buildGroup(inrow[c], options);
+
+      if (depth < elt.depth) {
+        depth = elt.depth;
+      }
+
+      if (height < elt.height) {
+        height = elt.height;
+      }
+
+      outrow[c] = elt;
+    }
+
+    var rowGap = group.rowGaps[r];
+    var gap = 0;
+
+    if (rowGap) {
+      gap = units_calculateSize(rowGap, options);
+
+      if (gap > 0) {
+        // \@argarraycr
+        gap += arstrutDepth;
+
+        if (depth < gap) {
+          depth = gap; // \@xargarraycr
+        }
+
+        gap = 0;
+      }
+    } // In AMS multiline environments such as aligned and gathered, rows
+    // correspond to lines that have additional \jot added to the
+    // \baselineskip via \openup.
+
+
+    if (group.addJot) {
+      depth += jot;
+    }
+
+    outrow.height = height;
+    outrow.depth = depth;
+    totalHeight += height;
+    outrow.pos = totalHeight;
+    totalHeight += depth + gap; // \@yargarraycr
+
+    body[r] = outrow; // Set a position for \hline(s), if any.
+
+    setHLinePos(hLinesBeforeRow[r + 1]);
+  }
+
+  var offset = totalHeight / 2 + options.fontMetrics().axisHeight;
+  var colDescriptions = group.cols || [];
+  var cols = [];
+  var colSep;
+  var colDescrNum;
+
+  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column
+  // descriptions, so trailing separators don't get lost.
+  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {
+    var colDescr = colDescriptions[colDescrNum] || {};
+    var firstSeparator = true;
+
+    while (colDescr.type === "separator") {
+      // If there is more than one separator in a row, add a space
+      // between them.
+      if (!firstSeparator) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
+        cols.push(colSep);
+      }
+
+      if (colDescr.separator === "|" || colDescr.separator === ":") {
+        var lineType = colDescr.separator === "|" ? "solid" : "dashed";
+        var separator = buildCommon.makeSpan(["vertical-separator"], [], options);
+        separator.style.height = totalHeight + "em";
+        separator.style.borderRightWidth = ruleThickness + "em";
+        separator.style.borderRightStyle = lineType;
+        separator.style.margin = "0 -" + ruleThickness / 2 + "em";
+        separator.style.verticalAlign = -(totalHeight - offset) + "em";
+        cols.push(separator);
+      } else {
+        throw new src_ParseError("Invalid separator type: " + colDescr.separator);
+      }
+
+      colDescrNum++;
+      colDescr = colDescriptions[colDescrNum] || {};
+      firstSeparator = false;
+    }
+
+    if (c >= nc) {
+      continue;
+    }
+
+    var sepwidth = void 0;
+
+    if (c > 0 || group.hskipBeforeAndAfter) {
+      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
+
+      if (sepwidth !== 0) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = sepwidth + "em";
+        cols.push(colSep);
+      }
+    }
+
+    var col = [];
+
+    for (r = 0; r < nr; ++r) {
+      var row = body[r];
+      var elem = row[c];
+
+      if (!elem) {
+        continue;
+      }
+
+      var shift = row.pos - offset;
+      elem.depth = row.depth;
+      elem.height = row.height;
+      col.push({
+        type: "elem",
+        elem: elem,
+        shift: shift
+      });
+    }
+
+    col = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: col
+    }, options);
+    col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);
+    cols.push(col);
+
+    if (c < nc - 1 || group.hskipBeforeAndAfter) {
+      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
+
+      if (sepwidth !== 0) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = sepwidth + "em";
+        cols.push(colSep);
+      }
+    }
+  }
+
+  body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any.
+
+  if (hlines.length > 0) {
+    var line = buildCommon.makeLineSpan("hline", options, ruleThickness);
+    var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);
+    var vListElems = [{
+      type: "elem",
+      elem: body,
+      shift: 0
+    }];
+
+    while (hlines.length > 0) {
+      var hline = hlines.pop();
+      var lineShift = hline.pos - offset;
+
+      if (hline.isDashed) {
+        vListElems.push({
+          type: "elem",
+          elem: dashes,
+          shift: lineShift
+        });
+      } else {
+        vListElems.push({
+          type: "elem",
+          elem: line,
+          shift: lineShift
+        });
+      }
+    }
+
+    body = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: vListElems
+    }, options);
+  }
+
+  return buildCommon.makeSpan(["mord"], [body], options);
+};
+
+var alignMap = {
+  c: "center ",
+  l: "left ",
+  r: "right "
+};
+
+var array_mathmlBuilder = function mathmlBuilder(group, options) {
+  var table = new mathMLTree.MathNode("mtable", group.body.map(function (row) {
+    return new mathMLTree.MathNode("mtr", row.map(function (cell) {
+      return new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(cell, options)]);
+    }));
+  })); // Set column alignment, row spacing, column spacing, and
+  // array lines by setting attributes on the table element.
+  // Set the row spacing. In MathML, we specify a gap distance.
+  // We do not use rowGap[] because MathML automatically increases
+  // cell height with the height/depth of the element content.
+  // LaTeX \arraystretch multiplies the row baseline-to-baseline distance.
+  // We simulate this by adding (arraystretch - 1)em to the gap. This
+  // does a reasonable job of adjusting arrays containing 1 em tall content.
+  // The 0.16 and 0.09 values are found emprically. They produce an array
+  // similar to LaTeX and in which content does not interfere with \hines.
+
+  var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}
+  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
+  table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
+  // To place a line on an edge we'll use <menclose>, if necessary.
+
+  var menclose = "";
+  var align = "";
+
+  if (group.cols) {
+    // Find column alignment, column spacing, and  vertical lines.
+    var cols = group.cols;
+    var columnLines = "";
+    var prevTypeWasAlign = false;
+    var iStart = 0;
+    var iEnd = cols.length;
+
+    if (cols[0].type === "separator") {
+      menclose += "top ";
+      iStart = 1;
+    }
+
+    if (cols[cols.length - 1].type === "separator") {
+      menclose += "bottom ";
+      iEnd -= 1;
+    }
+
+    for (var i = iStart; i < iEnd; i++) {
+      if (cols[i].type === "align") {
+        align += alignMap[cols[i].align];
+
+        if (prevTypeWasAlign) {
+          columnLines += "none ";
+        }
+
+        prevTypeWasAlign = true;
+      } else if (cols[i].type === "separator") {
+        // MathML accepts only single lines between cells.
+        // So we read only the first of consecutive separators.
+        if (prevTypeWasAlign) {
+          columnLines += cols[i].separator === "|" ? "solid " : "dashed ";
+          prevTypeWasAlign = false;
+        }
+      }
+    }
+
+    table.setAttribute("columnalign", align.trim());
+
+    if (/[sd]/.test(columnLines)) {
+      table.setAttribute("columnlines", columnLines.trim());
+    }
+  } // Set column spacing.
+
+
+  if (group.colSeparationType === "align") {
+    var _cols = group.cols || [];
+
+    var spacing = "";
+
+    for (var _i = 1; _i < _cols.length; _i++) {
+      spacing += _i % 2 ? "0em " : "1em ";
+    }
+
+    table.setAttribute("columnspacing", spacing.trim());
+  } else if (group.colSeparationType === "alignat") {
+    table.setAttribute("columnspacing", "0em");
+  } else if (group.colSeparationType === "small") {
+    table.setAttribute("columnspacing", "0.2778em");
+  } else {
+    table.setAttribute("columnspacing", "1em");
+  } // Address \hline and \hdashline
+
+
+  var rowLines = "";
+  var hlines = group.hLinesBeforeRow;
+  menclose += hlines[0].length > 0 ? "left " : "";
+  menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
+
+  for (var _i2 = 1; _i2 < hlines.length - 1; _i2++) {
+    rowLines += hlines[_i2].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.
+    : hlines[_i2][0] ? "dashed " : "solid ";
+  }
+
+  if (/[sd]/.test(rowLines)) {
+    table.setAttribute("rowlines", rowLines.trim());
+  }
+
+  if (menclose !== "") {
+    table = new mathMLTree.MathNode("menclose", [table]);
+    table.setAttribute("notation", menclose.trim());
+  }
+
+  if (group.arraystretch && group.arraystretch < 1) {
+    // A small array. Wrap in scriptstyle so row gap is not too large.
+    table = new mathMLTree.MathNode("mstyle", [table]);
+    table.setAttribute("scriptlevel", "1");
+  }
+
+  return table;
+}; // Convenience function for aligned and alignedat environments.
+
+
+var array_alignedHandler = function alignedHandler(context, args) {
+  var cols = [];
+  var res = parseArray(context.parser, {
+    cols: cols,
+    addJot: true
+  }, "display"); // Determining number of columns.
+  // 1. If the first argument is given, we use it as a number of columns,
+  //    and makes sure that each row doesn't exceed that number.
+  // 2. Otherwise, just count number of columns = maximum number
+  //    of cells in each row ("aligned" mode -- isAligned will be true).
+  //
+  // At the same time, prepend empty group {} at beginning of every second
+  // cell in each row (starting with second cell) so that operators become
+  // binary.  This behavior is implemented in amsmath's \start@aligned.
+
+  var numMaths;
+  var numCols = 0;
+  var emptyGroup = {
+    type: "ordgroup",
+    mode: context.mode,
+    body: []
+  };
+  var ordgroup = checkNodeType(args[0], "ordgroup");
+
+  if (ordgroup) {
+    var arg0 = "";
+
+    for (var i = 0; i < ordgroup.body.length; i++) {
+      var textord = assertNodeType(ordgroup.body[i], "textord");
+      arg0 += textord.text;
+    }
+
+    numMaths = Number(arg0);
+    numCols = numMaths * 2;
+  }
+
+  var isAligned = !numCols;
+  res.body.forEach(function (row) {
+    for (var _i3 = 1; _i3 < row.length; _i3 += 2) {
+      // Modify ordgroup node within styling node
+      var styling = assertNodeType(row[_i3], "styling");
+
+      var _ordgroup = assertNodeType(styling.body[0], "ordgroup");
+
+      _ordgroup.body.unshift(emptyGroup);
+    }
+
+    if (!isAligned) {
+      // Case 1
+      var curMaths = row.length / 2;
+
+      if (numMaths < curMaths) {
+        throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]);
+      }
+    } else if (numCols < row.length) {
+      // Case 2
+      numCols = row.length;
+    }
+  }); // Adjusting alignment.
+  // In aligned mode, we add one \qquad between columns;
+  // otherwise we add nothing.
+
+  for (var _i4 = 0; _i4 < numCols; ++_i4) {
+    var align = "r";
+    var pregap = 0;
+
+    if (_i4 % 2 === 1) {
+      align = "l";
+    } else if (_i4 > 0 && isAligned) {
+      // "aligned" mode.
+      pregap = 1; // add one \quad
+    }
+
+    cols[_i4] = {
+      type: "align",
+      align: align,
+      pregap: pregap,
+      postgap: 0
+    };
+  }
+
+  res.colSeparationType = isAligned ? "align" : "alignat";
+  return res;
+}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
+// is part of the source2e.pdf file of LaTeX2e source documentation.
+// {darray} is an {array} environment where cells are set in \displaystyle,
+// as defined in nccmath.sty.
+
+
+defineEnvironment({
+  type: "array",
+  names: ["array", "darray"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    // Since no types are specified above, the two possibilities are
+    // - The argument is wrapped in {} or [], in which case Parser's
+    //   parseGroup() returns an "ordgroup" wrapping some symbol node.
+    // - The argument is a bare symbol node.
+    var symNode = checkSymbolNodeType(args[0]);
+    var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
+    var cols = colalign.map(function (nde) {
+      var node = assertSymbolNodeType(nde);
+      var ca = node.text;
+
+      if ("lcr".indexOf(ca) !== -1) {
+        return {
+          type: "align",
+          align: ca
+        };
+      } else if (ca === "|") {
+        return {
+          type: "separator",
+          separator: "|"
+        };
+      } else if (ca === ":") {
+        return {
+          type: "separator",
+          separator: ":"
+        };
+      }
+
+      throw new src_ParseError("Unknown column alignment: " + ca, nde);
+    });
+    var res = {
+      cols: cols,
+      hskipBeforeAndAfter: true // \@preamble in lttab.dtx
+
+    };
+    return parseArray(context.parser, res, dCellStyle(context.envName));
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // The matrix environments of amsmath builds on the array environment
+// of LaTeX, which is discussed above.
+
+defineEnvironment({
+  type: "array",
+  names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(context) {
+    var delimiters = {
+      "matrix": null,
+      "pmatrix": ["(", ")"],
+      "bmatrix": ["[", "]"],
+      "Bmatrix": ["\\{", "\\}"],
+      "vmatrix": ["|", "|"],
+      "Vmatrix": ["\\Vert", "\\Vert"]
+    }[context.envName]; // \hskip -\arraycolsep in amsmath
+
+    var payload = {
+      hskipBeforeAndAfter: false
+    };
+    var res = parseArray(context.parser, payload, dCellStyle(context.envName));
+    return delimiters ? {
+      type: "leftright",
+      mode: context.mode,
+      body: [res],
+      left: delimiters[0],
+      right: delimiters[1],
+      rightColor: undefined // \right uninfluenced by \color in array
+
+    } : res;
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+});
+defineEnvironment({
+  type: "array",
+  names: ["smallmatrix"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(context) {
+    var payload = {
+      arraystretch: 0.5
+    };
+    var res = parseArray(context.parser, payload, "script");
+    res.colSeparationType = "small";
+    return res;
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+});
+defineEnvironment({
+  type: "array",
+  names: ["subarray"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(context, args) {
+    // Parsing of {subarray} is similar to {array}
+    var symNode = checkSymbolNodeType(args[0]);
+    var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
+    var cols = colalign.map(function (nde) {
+      var node = assertSymbolNodeType(nde);
+      var ca = node.text; // {subarray} only recognizes "l" & "c"
+
+      if ("lc".indexOf(ca) !== -1) {
+        return {
+          type: "align",
+          align: ca
+        };
+      }
+
+      throw new src_ParseError("Unknown column alignment: " + ca, nde);
+    });
+
+    if (cols.length > 1) {
+      throw new src_ParseError("{subarray} can contain only one column");
+    }
+
+    var res = {
+      cols: cols,
+      hskipBeforeAndAfter: false,
+      arraystretch: 0.5
+    };
+    res = parseArray(context.parser, res, "script");
+
+    if (res.body[0].length > 1) {
+      throw new src_ParseError("{subarray} can contain only one column");
+    }
+
+    return res;
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // A cases environment (in amsmath.sty) is almost equivalent to
+// \def\arraystretch{1.2}%
+// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
+// {dcases} is a {cases} environment where cells are set in \displaystyle,
+// as defined in mathtools.sty.
+
+defineEnvironment({
+  type: "array",
+  names: ["cases", "dcases"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(context) {
+    var payload = {
+      arraystretch: 1.2,
+      cols: [{
+        type: "align",
+        align: "l",
+        pregap: 0,
+        // TODO(kevinb) get the current style.
+        // For now we use the metrics for TEXT style which is what we were
+        // doing before.  Before attempting to get the current style we
+        // should look at TeX's behavior especially for \over and matrices.
+        postgap: 1.0
+        /* 1em quad */
+
+      }, {
+        type: "align",
+        align: "l",
+        pregap: 0,
+        postgap: 0
+      }]
+    };
+    var res = parseArray(context.parser, payload, dCellStyle(context.envName));
+    return {
+      type: "leftright",
+      mode: context.mode,
+      body: [res],
+      left: "\\{",
+      right: ".",
+      rightColor: undefined
+    };
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // An aligned environment is like the align* environment
+// except it operates within math mode.
+// Note that we assume \nomallineskiplimit to be zero,
+// so that \strut@ is the same as \strut.
+
+defineEnvironment({
+  type: "array",
+  names: ["aligned"],
+  props: {
+    numArgs: 0
+  },
+  handler: array_alignedHandler,
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // A gathered environment is like an array environment with one centered
+// column, but where rows are considered lines so get \jot line spacing
+// and contents are set in \displaystyle.
+
+defineEnvironment({
+  type: "array",
+  names: ["gathered"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(context) {
+    var res = {
+      cols: [{
+        type: "align",
+        align: "c"
+      }],
+      addJot: true
+    };
+    return parseArray(context.parser, res, "display");
+  },
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // alignat environment is like an align environment, but one must explicitly
+// specify maximum number of columns in each row, and can adjust spacing between
+// each columns.
+
+defineEnvironment({
+  type: "array",
+  names: ["alignedat"],
+  // One for numbered and for unnumbered;
+  // but, KaTeX doesn't supports math numbering yet,
+  // they make no difference for now.
+  props: {
+    numArgs: 1
+  },
+  handler: array_alignedHandler,
+  htmlBuilder: array_htmlBuilder,
+  mathmlBuilder: array_mathmlBuilder
+}); // Catch \hline outside array environment
+
+defineFunction({
+  type: "text",
+  // Doesn't matter what this is.
+  names: ["\\hline", "\\hdashline"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: true
+  },
+  handler: function handler(context, args) {
+    throw new src_ParseError(context.funcName + " valid only within array environment");
+  }
+});
+// CONCATENATED MODULE: ./src/environments.js
+
+var environments = _environments;
+/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below
+
+
+// CONCATENATED MODULE: ./src/functions/environment.js
+
+
+
+ // Environment delimiters. HTML/MathML rendering is defined in the corresponding
+// defineEnvironment definitions.
+// $FlowFixMe, "environment" handler returns an environment ParseNode
+
+defineFunction({
+  type: "environment",
+  names: ["\\begin", "\\end"],
+  props: {
+    numArgs: 1,
+    argTypes: ["text"]
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var nameGroup = args[0];
+
+    if (nameGroup.type !== "ordgroup") {
+      throw new src_ParseError("Invalid environment name", nameGroup);
+    }
+
+    var envName = "";
+
+    for (var i = 0; i < nameGroup.body.length; ++i) {
+      envName += assertNodeType(nameGroup.body[i], "textord").text;
+    }
+
+    if (funcName === "\\begin") {
+      // begin...end is similar to left...right
+      if (!src_environments.hasOwnProperty(envName)) {
+        throw new src_ParseError("No such environment: " + envName, nameGroup);
+      } // Build the environment object. Arguments and other information will
+      // be made available to the begin and end methods using properties.
+
+
+      var env = src_environments[envName];
+
+      var _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env),
+          _args = _parser$parseArgument.args,
+          optArgs = _parser$parseArgument.optArgs;
+
+      var context = {
+        mode: parser.mode,
+        envName: envName,
+        parser: parser
+      };
+      var result = env.handler(context, _args, optArgs);
+      parser.expect("\\end", false);
+      var endNameToken = parser.nextToken;
+      var end = assertNodeType(parser.parseFunction(), "environment");
+
+      if (end.name !== envName) {
+        throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken);
+      }
+
+      return result;
+    }
+
+    return {
+      type: "environment",
+      mode: parser.mode,
+      name: envName,
+      nameGroup: nameGroup
+    };
+  }
+});
+// CONCATENATED MODULE: ./src/functions/mclass.js
+
+
+
+
+
+
+var mclass_makeSpan = buildCommon.makeSpan;
+
+function mclass_htmlBuilder(group, options) {
+  var elements = buildHTML_buildExpression(group.body, options, true);
+  return mclass_makeSpan([group.mclass], elements, options);
+}
+
+function mclass_mathmlBuilder(group, options) {
+  var node;
+  var inner = buildMathML_buildExpression(group.body, options);
+
+  if (group.mclass === "minner") {
+    return mathMLTree.newDocumentFragment(inner);
+  } else if (group.mclass === "mord") {
+    if (group.isCharacterBox) {
+      node = inner[0];
+      node.type = "mi";
+    } else {
+      node = new mathMLTree.MathNode("mi", inner);
+    }
+  } else {
+    if (group.isCharacterBox) {
+      node = inner[0];
+      node.type = "mo";
+    } else {
+      node = new mathMLTree.MathNode("mo", inner);
+    } // Set spacing based on what is the most likely adjacent atom type.
+    // See TeXbook p170.
+
+
+    if (group.mclass === "mbin") {
+      node.attributes.lspace = "0.22em"; // medium space
+
+      node.attributes.rspace = "0.22em";
+    } else if (group.mclass === "mpunct") {
+      node.attributes.lspace = "0em";
+      node.attributes.rspace = "0.17em"; // thinspace
+    } else if (group.mclass === "mopen" || group.mclass === "mclose") {
+      node.attributes.lspace = "0em";
+      node.attributes.rspace = "0em";
+    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.
+    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo
+
+  }
+
+  return node;
+} // Math class commands except \mathop
+
+
+defineFunction({
+  type: "mclass",
+  names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var body = args[0];
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: "m" + funcName.substr(5),
+      // TODO(kevinb): don't prefix with 'm'
+      body: defineFunction_ordargument(body),
+      isCharacterBox: utils.isCharacterBox(body)
+    };
+  },
+  htmlBuilder: mclass_htmlBuilder,
+  mathmlBuilder: mclass_mathmlBuilder
+});
+var binrelClass = function binrelClass(arg) {
+  // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.
+  // (by rendering separately and with {}s before and after, and measuring
+  // the change in spacing).  We'll do roughly the same by detecting the
+  // atom type directly.
+  var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;
+
+  if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) {
+    return "m" + atom.family;
+  } else {
+    return "mord";
+  }
+}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.
+// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX.
+
+defineFunction({
+  type: "mclass",
+  names: ["\\@binrel"],
+  props: {
+    numArgs: 2
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser;
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: binrelClass(args[0]),
+      body: [args[1]],
+      isCharacterBox: utils.isCharacterBox(args[1])
+    };
+  }
+}); // Build a relation or stacked op by placing one symbol on top of another
+
+defineFunction({
+  type: "mclass",
+  names: ["\\stackrel", "\\overset", "\\underset"],
+  props: {
+    numArgs: 2
+  },
+  handler: function handler(_ref3, args) {
+    var parser = _ref3.parser,
+        funcName = _ref3.funcName;
+    var baseArg = args[1];
+    var shiftedArg = args[0];
+    var mclass;
+
+    if (funcName !== "\\stackrel") {
+      // LaTeX applies \binrel spacing to \overset and \underset.
+      mclass = binrelClass(baseArg);
+    } else {
+      mclass = "mrel"; // for \stackrel
+    }
+
+    var baseOp = {
+      type: "op",
+      mode: baseArg.mode,
+      limits: true,
+      alwaysHandleSupSub: true,
+      parentIsSupSub: false,
+      symbol: false,
+      suppressBaseShift: funcName !== "\\stackrel",
+      body: defineFunction_ordargument(baseArg)
+    };
+    var supsub = {
+      type: "supsub",
+      mode: shiftedArg.mode,
+      base: baseOp,
+      sup: funcName === "\\underset" ? null : shiftedArg,
+      sub: funcName === "\\underset" ? shiftedArg : null
+    };
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: mclass,
+      body: [supsub],
+      isCharacterBox: utils.isCharacterBox(supsub)
+    };
+  },
+  htmlBuilder: mclass_htmlBuilder,
+  mathmlBuilder: mclass_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/font.js
+// TODO(kevinb): implement \\sl and \\sc
+
+
+
+
+
+
+var font_htmlBuilder = function htmlBuilder(group, options) {
+  var font = group.font;
+  var newOptions = options.withFont(font);
+  return buildHTML_buildGroup(group.body, newOptions);
+};
+
+var font_mathmlBuilder = function mathmlBuilder(group, options) {
+  var font = group.font;
+  var newOptions = options.withFont(font);
+  return buildMathML_buildGroup(group.body, newOptions);
+};
+
+var fontAliases = {
+  "\\Bbb": "\\mathbb",
+  "\\bold": "\\mathbf",
+  "\\frak": "\\mathfrak",
+  "\\bm": "\\boldsymbol"
+};
+defineFunction({
+  type: "font",
+  names: [// styles, except \boldsymbol defined below
+  "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families
+  "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below
+  "\\Bbb", "\\bold", "\\frak"],
+  props: {
+    numArgs: 1,
+    greediness: 2
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var body = args[0];
+    var func = funcName;
+
+    if (func in fontAliases) {
+      func = fontAliases[func];
+    }
+
+    return {
+      type: "font",
+      mode: parser.mode,
+      font: func.slice(1),
+      body: body
+    };
+  },
+  htmlBuilder: font_htmlBuilder,
+  mathmlBuilder: font_mathmlBuilder
+});
+defineFunction({
+  type: "mclass",
+  names: ["\\boldsymbol", "\\bm"],
+  props: {
+    numArgs: 1,
+    greediness: 2
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser;
+    var body = args[0];
+    var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the
+    // argument's bin|rel|ord status
+
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: binrelClass(body),
+      body: [{
+        type: "font",
+        mode: parser.mode,
+        font: "boldsymbol",
+        body: body
+      }],
+      isCharacterBox: isCharacterBox
+    };
+  }
+}); // Old font changing functions
+
+defineFunction({
+  type: "font",
+  names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: function handler(_ref3, args) {
+    var parser = _ref3.parser,
+        funcName = _ref3.funcName,
+        breakOnTokenText = _ref3.breakOnTokenText;
+    var mode = parser.mode;
+    var body = parser.parseExpression(true, breakOnTokenText);
+    var style = "math" + funcName.slice(1);
+    return {
+      type: "font",
+      mode: mode,
+      font: style,
+      body: {
+        type: "ordgroup",
+        mode: parser.mode,
+        body: body
+      }
+    };
+  },
+  htmlBuilder: font_htmlBuilder,
+  mathmlBuilder: font_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/genfrac.js
+
+
+
+
+
+
+
+
+
+
+
+var genfrac_adjustStyle = function adjustStyle(size, originalStyle) {
+  // Figure out what style this fraction should be in based on the
+  // function used
+  var style = originalStyle;
+
+  if (size === "display") {
+    // Get display style as a default.
+    // If incoming style is sub/sup, use style.text() to get correct size.
+    style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY;
+  } else if (size === "text" && style.size === src_Style.DISPLAY.size) {
+    // We're in a \tfrac but incoming style is displaystyle, so:
+    style = src_Style.TEXT;
+  } else if (size === "script") {
+    style = src_Style.SCRIPT;
+  } else if (size === "scriptscript") {
+    style = src_Style.SCRIPTSCRIPT;
+  }
+
+  return style;
+};
+
+var genfrac_htmlBuilder = function htmlBuilder(group, options) {
+  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
+  var style = genfrac_adjustStyle(group.size, options.style);
+  var nstyle = style.fracNum();
+  var dstyle = style.fracDen();
+  var newOptions;
+  newOptions = options.havingStyle(nstyle);
+  var numerm = buildHTML_buildGroup(group.numer, newOptions, options);
+
+  if (group.continued) {
+    // \cfrac inserts a \strut into the numerator.
+    // Get \strut dimensions from TeXbook page 353.
+    var hStrut = 8.5 / options.fontMetrics().ptPerEm;
+    var dStrut = 3.5 / options.fontMetrics().ptPerEm;
+    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
+    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
+  }
+
+  newOptions = options.havingStyle(dstyle);
+  var denomm = buildHTML_buildGroup(group.denom, newOptions, options);
+  var rule;
+  var ruleWidth;
+  var ruleSpacing;
+
+  if (group.hasBarLine) {
+    if (group.barSize) {
+      ruleWidth = units_calculateSize(group.barSize, options);
+      rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth);
+    } else {
+      rule = buildCommon.makeLineSpan("frac-line", options);
+    }
+
+    ruleWidth = rule.height;
+    ruleSpacing = rule.height;
+  } else {
+    rule = null;
+    ruleWidth = 0;
+    ruleSpacing = options.fontMetrics().defaultRuleThickness;
+  } // Rule 15b
+
+
+  var numShift;
+  var clearance;
+  var denomShift;
+
+  if (style.size === src_Style.DISPLAY.size || group.size === "display") {
+    numShift = options.fontMetrics().num1;
+
+    if (ruleWidth > 0) {
+      clearance = 3 * ruleSpacing;
+    } else {
+      clearance = 7 * ruleSpacing;
+    }
+
+    denomShift = options.fontMetrics().denom1;
+  } else {
+    if (ruleWidth > 0) {
+      numShift = options.fontMetrics().num2;
+      clearance = ruleSpacing;
+    } else {
+      numShift = options.fontMetrics().num3;
+      clearance = 3 * ruleSpacing;
+    }
+
+    denomShift = options.fontMetrics().denom2;
+  }
+
+  var frac;
+
+  if (!rule) {
+    // Rule 15c
+    var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
+
+    if (candidateClearance < clearance) {
+      numShift += 0.5 * (clearance - candidateClearance);
+      denomShift += 0.5 * (clearance - candidateClearance);
+    }
+
+    frac = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [{
+        type: "elem",
+        elem: denomm,
+        shift: denomShift
+      }, {
+        type: "elem",
+        elem: numerm,
+        shift: -numShift
+      }]
+    }, options);
+  } else {
+    // Rule 15d
+    var axisHeight = options.fontMetrics().axisHeight;
+
+    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
+      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
+    }
+
+    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
+      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
+    }
+
+    var midShift = -(axisHeight - 0.5 * ruleWidth);
+    frac = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [{
+        type: "elem",
+        elem: denomm,
+        shift: denomShift
+      }, {
+        type: "elem",
+        elem: rule,
+        shift: midShift
+      }, {
+        type: "elem",
+        elem: numerm,
+        shift: -numShift
+      }]
+    }, options);
+  } // Since we manually change the style sometimes (with \dfrac or \tfrac),
+  // account for the possible size change here.
+
+
+  newOptions = options.havingStyle(style);
+  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
+  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e
+
+  var delimSize;
+
+  if (style.size === src_Style.DISPLAY.size) {
+    delimSize = options.fontMetrics().delim1;
+  } else {
+    delimSize = options.fontMetrics().delim2;
+  }
+
+  var leftDelim;
+  var rightDelim;
+
+  if (group.leftDelim == null) {
+    leftDelim = makeNullDelimiter(options, ["mopen"]);
+  } else {
+    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]);
+  }
+
+  if (group.continued) {
+    rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac
+  } else if (group.rightDelim == null) {
+    rightDelim = makeNullDelimiter(options, ["mclose"]);
+  } else {
+    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]);
+  }
+
+  return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options);
+};
+
+var genfrac_mathmlBuilder = function mathmlBuilder(group, options) {
+  var node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]);
+
+  if (!group.hasBarLine) {
+    node.setAttribute("linethickness", "0px");
+  } else if (group.barSize) {
+    var ruleWidth = units_calculateSize(group.barSize, options);
+    node.setAttribute("linethickness", ruleWidth + "em");
+  }
+
+  var style = genfrac_adjustStyle(group.size, options.style);
+
+  if (style.size !== options.style.size) {
+    node = new mathMLTree.MathNode("mstyle", [node]);
+    var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false";
+    node.setAttribute("displaystyle", isDisplay);
+    node.setAttribute("scriptlevel", "0");
+  }
+
+  if (group.leftDelim != null || group.rightDelim != null) {
+    var withDelims = [];
+
+    if (group.leftDelim != null) {
+      var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]);
+      leftOp.setAttribute("fence", "true");
+      withDelims.push(leftOp);
+    }
+
+    withDelims.push(node);
+
+    if (group.rightDelim != null) {
+      var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]);
+      rightOp.setAttribute("fence", "true");
+      withDelims.push(rightOp);
+    }
+
+    return buildMathML_makeRow(withDelims);
+  }
+
+  return node;
+};
+
+defineFunction({
+  type: "genfrac",
+  names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly
+  "\\\\bracefrac", "\\\\brackfrac"],
+  props: {
+    numArgs: 2,
+    greediness: 2
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var numer = args[0];
+    var denom = args[1];
+    var hasBarLine;
+    var leftDelim = null;
+    var rightDelim = null;
+    var size = "auto";
+
+    switch (funcName) {
+      case "\\cfrac":
+      case "\\dfrac":
+      case "\\frac":
+      case "\\tfrac":
+        hasBarLine = true;
+        break;
+
+      case "\\\\atopfrac":
+        hasBarLine = false;
+        break;
+
+      case "\\dbinom":
+      case "\\binom":
+      case "\\tbinom":
+        hasBarLine = false;
+        leftDelim = "(";
+        rightDelim = ")";
+        break;
+
+      case "\\\\bracefrac":
+        hasBarLine = false;
+        leftDelim = "\\{";
+        rightDelim = "\\}";
+        break;
+
+      case "\\\\brackfrac":
+        hasBarLine = false;
+        leftDelim = "[";
+        rightDelim = "]";
+        break;
+
+      default:
+        throw new Error("Unrecognized genfrac command");
+    }
+
+    switch (funcName) {
+      case "\\cfrac":
+      case "\\dfrac":
+      case "\\dbinom":
+        size = "display";
+        break;
+
+      case "\\tfrac":
+      case "\\tbinom":
+        size = "text";
+        break;
+    }
+
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      continued: funcName === "\\cfrac",
+      numer: numer,
+      denom: denom,
+      hasBarLine: hasBarLine,
+      leftDelim: leftDelim,
+      rightDelim: rightDelim,
+      size: size,
+      barSize: null
+    };
+  },
+  htmlBuilder: genfrac_htmlBuilder,
+  mathmlBuilder: genfrac_mathmlBuilder
+}); // Infix generalized fractions -- these are not rendered directly, but replaced
+// immediately by one of the variants above.
+
+defineFunction({
+  type: "infix",
+  names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
+  props: {
+    numArgs: 0,
+    infix: true
+  },
+  handler: function handler(_ref2) {
+    var parser = _ref2.parser,
+        funcName = _ref2.funcName,
+        token = _ref2.token;
+    var replaceWith;
+
+    switch (funcName) {
+      case "\\over":
+        replaceWith = "\\frac";
+        break;
+
+      case "\\choose":
+        replaceWith = "\\binom";
+        break;
+
+      case "\\atop":
+        replaceWith = "\\\\atopfrac";
+        break;
+
+      case "\\brace":
+        replaceWith = "\\\\bracefrac";
+        break;
+
+      case "\\brack":
+        replaceWith = "\\\\brackfrac";
+        break;
+
+      default:
+        throw new Error("Unrecognized infix genfrac command");
+    }
+
+    return {
+      type: "infix",
+      mode: parser.mode,
+      replaceWith: replaceWith,
+      token: token
+    };
+  }
+});
+var stylArray = ["display", "text", "script", "scriptscript"];
+
+var delimFromValue = function delimFromValue(delimString) {
+  var delim = null;
+
+  if (delimString.length > 0) {
+    delim = delimString;
+    delim = delim === "." ? null : delim;
+  }
+
+  return delim;
+};
+
+defineFunction({
+  type: "genfrac",
+  names: ["\\genfrac"],
+  props: {
+    numArgs: 6,
+    greediness: 6,
+    argTypes: ["math", "math", "size", "text", "math", "math"]
+  },
+  handler: function handler(_ref3, args) {
+    var parser = _ref3.parser;
+    var numer = args[4];
+    var denom = args[5]; // Look into the parse nodes to get the desired delimiters.
+
+    var leftNode = checkNodeType(args[0], "atom");
+
+    if (leftNode) {
+      leftNode = assertAtomFamily(args[0], "open");
+    }
+
+    var leftDelim = leftNode ? delimFromValue(leftNode.text) : null;
+    var rightNode = checkNodeType(args[1], "atom");
+
+    if (rightNode) {
+      rightNode = assertAtomFamily(args[1], "close");
+    }
+
+    var rightDelim = rightNode ? delimFromValue(rightNode.text) : null;
+    var barNode = assertNodeType(args[2], "size");
+    var hasBarLine;
+    var barSize = null;
+
+    if (barNode.isBlank) {
+      // \genfrac acts differently than \above.
+      // \genfrac treats an empty size group as a signal to use a
+      // standard bar size. \above would see size = 0 and omit the bar.
+      hasBarLine = true;
+    } else {
+      barSize = barNode.value;
+      hasBarLine = barSize.number > 0;
+    } // Find out if we want displaystyle, textstyle, etc.
+
+
+    var size = "auto";
+    var styl = checkNodeType(args[3], "ordgroup");
+
+    if (styl) {
+      if (styl.body.length > 0) {
+        var textOrd = assertNodeType(styl.body[0], "textord");
+        size = stylArray[Number(textOrd.text)];
+      }
+    } else {
+      styl = assertNodeType(args[3], "textord");
+      size = stylArray[Number(styl.text)];
+    }
+
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      numer: numer,
+      denom: denom,
+      continued: false,
+      hasBarLine: hasBarLine,
+      barSize: barSize,
+      leftDelim: leftDelim,
+      rightDelim: rightDelim,
+      size: size
+    };
+  },
+  htmlBuilder: genfrac_htmlBuilder,
+  mathmlBuilder: genfrac_mathmlBuilder
+}); // \above is an infix fraction that also defines a fraction bar size.
+
+defineFunction({
+  type: "infix",
+  names: ["\\above"],
+  props: {
+    numArgs: 1,
+    argTypes: ["size"],
+    infix: true
+  },
+  handler: function handler(_ref4, args) {
+    var parser = _ref4.parser,
+        funcName = _ref4.funcName,
+        token = _ref4.token;
+    return {
+      type: "infix",
+      mode: parser.mode,
+      replaceWith: "\\\\abovefrac",
+      size: assertNodeType(args[0], "size").value,
+      token: token
+    };
+  }
+});
+defineFunction({
+  type: "genfrac",
+  names: ["\\\\abovefrac"],
+  props: {
+    numArgs: 3,
+    argTypes: ["math", "size", "math"]
+  },
+  handler: function handler(_ref5, args) {
+    var parser = _ref5.parser,
+        funcName = _ref5.funcName;
+    var numer = args[0];
+    var barSize = assert(assertNodeType(args[1], "infix").size);
+    var denom = args[2];
+    var hasBarLine = barSize.number > 0;
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      numer: numer,
+      denom: denom,
+      continued: false,
+      hasBarLine: hasBarLine,
+      barSize: barSize,
+      leftDelim: null,
+      rightDelim: null,
+      size: "auto"
+    };
+  },
+  htmlBuilder: genfrac_htmlBuilder,
+  mathmlBuilder: genfrac_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/horizBrace.js
+
+
+
+
+
+
+
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but
+var horizBrace_htmlBuilder = function htmlBuilder(grp, options) {
+  var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node.
+
+  var supSubGroup;
+  var group;
+  var supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // Ref: LaTeX source2e: }}}}\limits}
+    // i.e. LaTeX treats the brace similar to an op and passes it
+    // with \limits, so we need to assign supsub style.
+    supSubGroup = supSub.sup ? buildHTML_buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildHTML_buildGroup(supSub.sub, options.havingStyle(style.sub()), options);
+    group = assertNodeType(supSub.base, "horizBrace");
+  } else {
+    group = assertNodeType(grp, "horizBrace");
+  } // Build the base group
+
+
+  var body = buildHTML_buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element
+
+  var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓
+  // This first vlist contains the content and the brace:   equation
+
+  var vlist;
+
+  if (group.isOver) {
+    vlist = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "kern",
+        size: 0.1
+      }, {
+        type: "elem",
+        elem: braceBody
+      }]
+    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+    vlist.children[0].children[0].children[1].classes.push("svg-align");
+  } else {
+    vlist = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: body.depth + 0.1 + braceBody.height,
+      children: [{
+        type: "elem",
+        elem: braceBody
+      }, {
+        type: "kern",
+        size: 0.1
+      }, {
+        type: "elem",
+        elem: body
+      }]
+    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+    vlist.children[0].children[0].children[0].classes.push("svg-align");
+  }
+
+  if (supSubGroup) {
+    // To write the supsub, wrap the first vlist in another vlist:
+    // They can't all go in the same vlist, because the note might be
+    // wider than the equation. We want the equation to control the
+    // brace width.
+    //      note          long note           long note
+    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓
+    //    equation           eqn                 eqn
+    var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
+
+    if (group.isOver) {
+      vlist = buildCommon.makeVList({
+        positionType: "firstBaseline",
+        children: [{
+          type: "elem",
+          elem: vSpan
+        }, {
+          type: "kern",
+          size: 0.2
+        }, {
+          type: "elem",
+          elem: supSubGroup
+        }]
+      }, options);
+    } else {
+      vlist = buildCommon.makeVList({
+        positionType: "bottom",
+        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,
+        children: [{
+          type: "elem",
+          elem: supSubGroup
+        }, {
+          type: "kern",
+          size: 0.2
+        }, {
+          type: "elem",
+          elem: vSpan
+        }]
+      }, options);
+    }
+  }
+
+  return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
+};
+
+var horizBrace_mathmlBuilder = function mathmlBuilder(group, options) {
+  var accentNode = stretchy.mathMLnode(group.label);
+  return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]);
+}; // Horizontal stretchy braces
+
+
+defineFunction({
+  type: "horizBrace",
+  names: ["\\overbrace", "\\underbrace"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    return {
+      type: "horizBrace",
+      mode: parser.mode,
+      label: funcName,
+      isOver: /^\\over/.test(funcName),
+      base: args[0]
+    };
+  },
+  htmlBuilder: horizBrace_htmlBuilder,
+  mathmlBuilder: horizBrace_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/href.js
+
+
+
+
+
+
+defineFunction({
+  type: "href",
+  names: ["\\href"],
+  props: {
+    numArgs: 2,
+    argTypes: ["url", "original"],
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var body = args[1];
+    var href = assertNodeType(args[0], "url").url;
+
+    if (!parser.settings.isTrusted({
+      command: "\\href",
+      url: href
+    })) {
+      return parser.formatUnsupportedCmd("\\href");
+    }
+
+    return {
+      type: "href",
+      mode: parser.mode,
+      href: href,
+      body: defineFunction_ordargument(body)
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var elements = buildHTML_buildExpression(group.body, options, false);
+    return buildCommon.makeAnchor(group.href, [], elements, options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var math = buildExpressionRow(group.body, options);
+
+    if (!(math instanceof mathMLTree_MathNode)) {
+      math = new mathMLTree_MathNode("mrow", [math]);
+    }
+
+    math.setAttribute("href", group.href);
+    return math;
+  }
+});
+defineFunction({
+  type: "href",
+  names: ["\\url"],
+  props: {
+    numArgs: 1,
+    argTypes: ["url"],
+    allowedInText: true
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser;
+    var href = assertNodeType(args[0], "url").url;
+
+    if (!parser.settings.isTrusted({
+      command: "\\url",
+      url: href
+    })) {
+      return parser.formatUnsupportedCmd("\\url");
+    }
+
+    var chars = [];
+
+    for (var i = 0; i < href.length; i++) {
+      var c = href[i];
+
+      if (c === "~") {
+        c = "\\textasciitilde";
+      }
+
+      chars.push({
+        type: "textord",
+        mode: "text",
+        text: c
+      });
+    }
+
+    var body = {
+      type: "text",
+      mode: parser.mode,
+      font: "\\texttt",
+      body: chars
+    };
+    return {
+      type: "href",
+      mode: parser.mode,
+      href: href,
+      body: defineFunction_ordargument(body)
+    };
+  }
+});
+// CONCATENATED MODULE: ./src/functions/htmlmathml.js
+
+
+
+
+defineFunction({
+  type: "htmlmathml",
+  names: ["\\html@mathml"],
+  props: {
+    numArgs: 2,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    return {
+      type: "htmlmathml",
+      mode: parser.mode,
+      html: defineFunction_ordargument(args[0]),
+      mathml: defineFunction_ordargument(args[1])
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var elements = buildHTML_buildExpression(group.html, options, false);
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    return buildExpressionRow(group.mathml, options);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/includegraphics.js
+
+
+
+
+
+
+
+var includegraphics_sizeData = function sizeData(str) {
+  if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) {
+    // str is a number with no unit specified.
+    // default unit is bp, per graphix package.
+    return {
+      number: +str,
+      unit: "bp"
+    };
+  } else {
+    var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str);
+
+    if (!match) {
+      throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics");
+    }
+
+    var data = {
+      number: +(match[1] + match[2]),
+      // sign + magnitude, cast to number
+      unit: match[3]
+    };
+
+    if (!validUnit(data)) {
+      throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics.");
+    }
+
+    return data;
+  }
+};
+
+defineFunction({
+  type: "includegraphics",
+  names: ["\\includegraphics"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1,
+    argTypes: ["raw", "url"],
+    allowedInText: false
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser;
+    var width = {
+      number: 0,
+      unit: "em"
+    };
+    var height = {
+      number: 0.9,
+      unit: "em"
+    }; // sorta character sized.
+
+    var totalheight = {
+      number: 0,
+      unit: "em"
+    };
+    var alt = "";
+
+    if (optArgs[0]) {
+      var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.
+
+      var attributes = attributeStr.split(",");
+
+      for (var i = 0; i < attributes.length; i++) {
+        var keyVal = attributes[i].split("=");
+
+        if (keyVal.length === 2) {
+          var str = keyVal[1].trim();
+
+          switch (keyVal[0].trim()) {
+            case "alt":
+              alt = str;
+              break;
+
+            case "width":
+              width = includegraphics_sizeData(str);
+              break;
+
+            case "height":
+              height = includegraphics_sizeData(str);
+              break;
+
+            case "totalheight":
+              totalheight = includegraphics_sizeData(str);
+              break;
+
+            default:
+              throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
+          }
+        }
+      }
+    }
+
+    var src = assertNodeType(args[0], "url").url;
+
+    if (alt === "") {
+      // No alt given. Use the file name. Strip away the path.
+      alt = src;
+      alt = alt.replace(/^.*[\\/]/, '');
+      alt = alt.substring(0, alt.lastIndexOf('.'));
+    }
+
+    if (!parser.settings.isTrusted({
+      command: "\\includegraphics",
+      url: src
+    })) {
+      return parser.formatUnsupportedCmd("\\includegraphics");
+    }
+
+    return {
+      type: "includegraphics",
+      mode: parser.mode,
+      alt: alt,
+      width: width,
+      height: height,
+      totalheight: totalheight,
+      src: src
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var height = units_calculateSize(group.height, options);
+    var depth = 0;
+
+    if (group.totalheight.number > 0) {
+      depth = units_calculateSize(group.totalheight, options) - height;
+      depth = Number(depth.toFixed(2));
+    }
+
+    var width = 0;
+
+    if (group.width.number > 0) {
+      width = units_calculateSize(group.width, options);
+    }
+
+    var style = {
+      height: height + depth + "em"
+    };
+
+    if (width > 0) {
+      style.width = width + "em";
+    }
+
+    if (depth > 0) {
+      style.verticalAlign = -depth + "em";
+    }
+
+    var node = new domTree_Img(group.src, group.alt, style);
+    node.height = height;
+    node.depth = depth;
+    return node;
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mglyph", []);
+    node.setAttribute("alt", group.alt);
+    var height = units_calculateSize(group.height, options);
+    var depth = 0;
+
+    if (group.totalheight.number > 0) {
+      depth = units_calculateSize(group.totalheight, options) - height;
+      depth = depth.toFixed(2);
+      node.setAttribute("valign", "-" + depth + "em");
+    }
+
+    node.setAttribute("height", height + depth + "em");
+
+    if (group.width.number > 0) {
+      var width = units_calculateSize(group.width, options);
+      node.setAttribute("width", width + "em");
+    }
+
+    node.setAttribute("src", group.src);
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/kern.js
+// Horizontal spacing commands
+
+
+
+
+ // TODO: \hskip and \mskip should support plus and minus in lengths
+
+defineFunction({
+  type: "kern",
+  names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
+  props: {
+    numArgs: 1,
+    argTypes: ["size"],
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var size = assertNodeType(args[0], "size");
+
+    if (parser.settings.strict) {
+      var mathFunction = funcName[1] === 'm'; // \mkern, \mskip
+
+      var muUnit = size.value.unit === 'mu';
+
+      if (mathFunction) {
+        if (!muUnit) {
+          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"));
+        }
+
+        if (parser.mode !== "math") {
+          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode");
+        }
+      } else {
+        // !mathFunction
+        if (muUnit) {
+          parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units");
+        }
+      }
+    }
+
+    return {
+      type: "kern",
+      mode: parser.mode,
+      dimension: size.value
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    return buildCommon.makeGlue(group.dimension, options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var dimension = units_calculateSize(group.dimension, options);
+    return new mathMLTree.SpaceNode(dimension);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/lap.js
+// Horizontal overlap functions
+
+
+
+
+
+defineFunction({
+  type: "lap",
+  names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var body = args[0];
+    return {
+      type: "lap",
+      mode: parser.mode,
+      alignment: funcName.slice(5),
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // mathllap, mathrlap, mathclap
+    var inner;
+
+    if (group.alignment === "clap") {
+      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/
+      inner = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span
+
+      inner = buildCommon.makeSpan(["inner"], [inner], options);
+    } else {
+      inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options)]);
+    }
+
+    var fix = buildCommon.makeSpan(["fix"], []);
+    var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the
+    // two items involved in the lap.
+    // Next, use a strut to set the height of the HTML bounding box.
+    // Otherwise, a tall argument may be misplaced.
+
+    var strut = buildCommon.makeSpan(["strut"]);
+    strut.style.height = node.height + node.depth + "em";
+    strut.style.verticalAlign = -node.depth + "em";
+    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.
+
+    node = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // Get the horizontal spacing correct relative to adjacent items.
+
+    return buildCommon.makeSpan(["mord"], [node], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    // mathllap, mathrlap, mathclap
+    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
+
+    if (group.alignment !== "rlap") {
+      var offset = group.alignment === "llap" ? "-1" : "-0.5";
+      node.setAttribute("lspace", offset + "width");
+    }
+
+    node.setAttribute("width", "0px");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/math.js
+
+ // Switching from text mode back to math mode
+
+defineFunction({
+  type: "styling",
+  names: ["\\(", "$"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: false
+  },
+  handler: function handler(_ref, args) {
+    var funcName = _ref.funcName,
+        parser = _ref.parser;
+    var outerMode = parser.mode;
+    parser.switchMode("math");
+    var close = funcName === "\\(" ? "\\)" : "$";
+    var body = parser.parseExpression(false, close);
+    parser.expect(close);
+    parser.switchMode(outerMode);
+    return {
+      type: "styling",
+      mode: parser.mode,
+      style: "text",
+      body: body
+    };
+  }
+}); // Check for extra closing math delimiters
+
+defineFunction({
+  type: "text",
+  // Doesn't matter what this is.
+  names: ["\\)", "\\]"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: false
+  },
+  handler: function handler(context, args) {
+    throw new src_ParseError("Mismatched " + context.funcName);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/mathchoice.js
+
+
+
+
+
+
+var mathchoice_chooseMathStyle = function chooseMathStyle(group, options) {
+  switch (options.style.size) {
+    case src_Style.DISPLAY.size:
+      return group.display;
+
+    case src_Style.TEXT.size:
+      return group.text;
+
+    case src_Style.SCRIPT.size:
+      return group.script;
+
+    case src_Style.SCRIPTSCRIPT.size:
+      return group.scriptscript;
+
+    default:
+      return group.text;
+  }
+};
+
+defineFunction({
+  type: "mathchoice",
+  names: ["\\mathchoice"],
+  props: {
+    numArgs: 4
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    return {
+      type: "mathchoice",
+      mode: parser.mode,
+      display: defineFunction_ordargument(args[0]),
+      text: defineFunction_ordargument(args[1]),
+      script: defineFunction_ordargument(args[2]),
+      scriptscript: defineFunction_ordargument(args[3])
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var body = mathchoice_chooseMathStyle(group, options);
+    var elements = buildHTML_buildExpression(body, options, false);
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var body = mathchoice_chooseMathStyle(group, options);
+    return buildExpressionRow(body, options);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js
+
+
+// For an operator with limits, assemble the base, sup, and sub into a span.
+var assembleSupSub_assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) {
+  // IE 8 clips \int if it is in a display: inline-block. We wrap it
+  // in a new span so it is an inline, and works.
+  base = buildCommon.makeSpan([], [base]);
+  var sub;
+  var sup; // We manually have to handle the superscripts and subscripts. This,
+  // aside from the kern calculations, is copied from supsub.
+
+  if (supGroup) {
+    var elem = buildHTML_buildGroup(supGroup, options.havingStyle(style.sup()), options);
+    sup = {
+      elem: elem,
+      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
+    };
+  }
+
+  if (subGroup) {
+    var _elem = buildHTML_buildGroup(subGroup, options.havingStyle(style.sub()), options);
+
+    sub = {
+      elem: _elem,
+      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)
+    };
+  } // Build the final group as a vlist of the possible subscript, base,
+  // and possible superscript.
+
+
+  var finalGroup;
+
+  if (sup && sub) {
+    var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
+    finalGroup = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: bottom,
+      children: [{
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }, {
+        type: "elem",
+        elem: sub.elem,
+        marginLeft: -slant + "em"
+      }, {
+        type: "kern",
+        size: sub.kern
+      }, {
+        type: "elem",
+        elem: base
+      }, {
+        type: "kern",
+        size: sup.kern
+      }, {
+        type: "elem",
+        elem: sup.elem,
+        marginLeft: slant + "em"
+      }, {
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }]
+    }, options);
+  } else if (sub) {
+    var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
+    // that we are supposed to shift the limits by 1/2 of the slant,
+    // but since we are centering the limits adding a full slant of
+    // margin will shift by 1/2 that.
+
+    finalGroup = buildCommon.makeVList({
+      positionType: "top",
+      positionData: top,
+      children: [{
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }, {
+        type: "elem",
+        elem: sub.elem,
+        marginLeft: -slant + "em"
+      }, {
+        type: "kern",
+        size: sub.kern
+      }, {
+        type: "elem",
+        elem: base
+      }]
+    }, options);
+  } else if (sup) {
+    var _bottom = base.depth + baseShift;
+
+    finalGroup = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: _bottom,
+      children: [{
+        type: "elem",
+        elem: base
+      }, {
+        type: "kern",
+        size: sup.kern
+      }, {
+        type: "elem",
+        elem: sup.elem,
+        marginLeft: slant + "em"
+      }, {
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }]
+    }, options);
+  } else {
+    // This case probably shouldn't occur (this would mean the
+    // supsub was sending us a group with no superscript or
+    // subscript) but be safe.
+    return base;
+  }
+
+  return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
+};
+// CONCATENATED MODULE: ./src/functions/op.js
+// Limits, symbols
+
+
+
+
+
+
+
+
+
+
+// Most operators have a large successor symbol, but these don't.
+var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
+// "supsub" since some of them (like \int) can affect super/subscripting.
+
+var op_htmlBuilder = function htmlBuilder(grp, options) {
+  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
+  var supGroup;
+  var subGroup;
+  var hasLimits = false;
+  var group;
+  var supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // If we have limits, supsub will pass us its group to handle. Pull
+    // out the superscript and subscript and set the group to the op in
+    // its base.
+    supGroup = supSub.sup;
+    subGroup = supSub.sub;
+    group = assertNodeType(supSub.base, "op");
+    hasLimits = true;
+  } else {
+    group = assertNodeType(grp, "op");
+  }
+
+  var style = options.style;
+  var large = false;
+
+  if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {
+    // Most symbol operators get larger in displaystyle (rule 13)
+    large = true;
+  }
+
+  var base;
+
+  if (group.symbol) {
+    // If this is a symbol, create the symbol.
+    var fontName = large ? "Size2-Regular" : "Size1-Regular";
+    var stash = "";
+
+    if (group.name === "\\oiint" || group.name === "\\oiiint") {
+      // No font glyphs yet, so use a glyph w/o the oval.
+      // TODO: When font glyphs are available, delete this code.
+      stash = group.name.substr(1); // $FlowFixMe
+
+      group.name = stash === "oiint" ? "\\iint" : "\\iiint";
+    }
+
+    base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
+
+    if (stash.length > 0) {
+      // We're in \oiint or \oiiint. Overlay the oval.
+      // TODO: When font glyphs are available, delete this code.
+      var italic = base.italic;
+      var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options);
+      base = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: base,
+          shift: 0
+        }, {
+          type: "elem",
+          elem: oval,
+          shift: large ? 0.08 : 0
+        }]
+      }, options); // $FlowFixMe
+
+      group.name = "\\" + stash;
+      base.classes.unshift("mop"); // $FlowFixMe
+
+      base.italic = italic;
+    }
+  } else if (group.body) {
+    // If this is a list, compose that list.
+    var inner = buildHTML_buildExpression(group.body, options, true);
+
+    if (inner.length === 1 && inner[0] instanceof domTree_SymbolNode) {
+      base = inner[0];
+      base.classes[0] = "mop"; // replace old mclass
+    } else {
+      base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options);
+    }
+  } else {
+    // Otherwise, this is a text operator. Build the text from the
+    // operator's name.
+    // TODO(emily): Add a space in the middle of some of these
+    // operators, like \limsup
+    var output = [];
+
+    for (var i = 1; i < group.name.length; i++) {
+      output.push(buildCommon.mathsym(group.name[i], group.mode, options));
+    }
+
+    base = buildCommon.makeSpan(["mop"], output, options);
+  } // If content of op is a single symbol, shift it vertically.
+
+
+  var baseShift = 0;
+  var slant = 0;
+
+  if ((base instanceof domTree_SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) {
+    // We suppress the shift of the base of \overset and \underset. Otherwise,
+    // shift the symbol so its center lies on the axis (rule 13). It
+    // appears that our fonts have the centers of the symbols already
+    // almost on the axis, so these numbers are very small. Note we
+    // don't actually apply this here, but instead it is used either in
+    // the vlist creation or separately when there are no limits.
+    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.
+    // $FlowFixMe
+
+    slant = base.italic;
+  }
+
+  if (hasLimits) {
+    return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);
+  } else {
+    if (baseShift) {
+      base.style.position = "relative";
+      base.style.top = baseShift + "em";
+    }
+
+    return base;
+  }
+};
+
+var op_mathmlBuilder = function mathmlBuilder(group, options) {
+  var node;
+
+  if (group.symbol) {
+    // This is a symbol. Just add the symbol.
+    node = new mathMLTree_MathNode("mo", [buildMathML_makeText(group.name, group.mode)]);
+
+    if (utils.contains(noSuccessor, group.name)) {
+      node.setAttribute("largeop", "false");
+    }
+  } else if (group.body) {
+    // This is an operator with children. Add them.
+    node = new mathMLTree_MathNode("mo", buildMathML_buildExpression(group.body, options));
+  } else {
+    // This is a text operator. Add all of the characters from the
+    // operator's name.
+    node = new mathMLTree_MathNode("mi", [new mathMLTree_TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.
+    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
+
+    var operator = new mathMLTree_MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
+
+    if (group.parentIsSupSub) {
+      node = new mathMLTree_MathNode("mo", [node, operator]);
+    } else {
+      node = newDocumentFragment([node, operator]);
+    }
+  }
+
+  return node;
+};
+
+var singleCharBigOps = {
+  "\u220F": "\\prod",
+  "\u2210": "\\coprod",
+  "\u2211": "\\sum",
+  "\u22C0": "\\bigwedge",
+  "\u22C1": "\\bigvee",
+  "\u22C2": "\\bigcap",
+  "\u22C3": "\\bigcup",
+  "\u2A00": "\\bigodot",
+  "\u2A01": "\\bigoplus",
+  "\u2A02": "\\bigotimes",
+  "\u2A04": "\\biguplus",
+  "\u2A06": "\\bigsqcup"
+};
+defineFunction({
+  type: "op",
+  names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var fName = funcName;
+
+    if (fName.length === 1) {
+      fName = singleCharBigOps[fName];
+    }
+
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: true,
+      parentIsSupSub: false,
+      symbol: true,
+      name: fName
+    };
+  },
+  htmlBuilder: op_htmlBuilder,
+  mathmlBuilder: op_mathmlBuilder
+}); // Note: calling defineFunction with a type that's already been defined only
+// works because the same htmlBuilder and mathmlBuilder are being used.
+
+defineFunction({
+  type: "op",
+  names: ["\\mathop"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser;
+    var body = args[0];
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: false,
+      body: defineFunction_ordargument(body)
+    };
+  },
+  htmlBuilder: op_htmlBuilder,
+  mathmlBuilder: op_mathmlBuilder
+}); // There are 2 flags for operators; whether they produce limits in
+// displaystyle, and whether they are symbols and should grow in
+// displaystyle. These four groups cover the four possible choices.
+
+var singleCharIntegrals = {
+  "\u222B": "\\int",
+  "\u222C": "\\iint",
+  "\u222D": "\\iiint",
+  "\u222E": "\\oint",
+  "\u222F": "\\oiint",
+  "\u2230": "\\oiiint"
+}; // No limits, not symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(_ref3) {
+    var parser = _ref3.parser,
+        funcName = _ref3.funcName;
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: false,
+      name: funcName
+    };
+  },
+  htmlBuilder: op_htmlBuilder,
+  mathmlBuilder: op_mathmlBuilder
+}); // Limits, not symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(_ref4) {
+    var parser = _ref4.parser,
+        funcName = _ref4.funcName;
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: true,
+      parentIsSupSub: false,
+      symbol: false,
+      name: funcName
+    };
+  },
+  htmlBuilder: op_htmlBuilder,
+  mathmlBuilder: op_mathmlBuilder
+}); // No limits, symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"],
+  props: {
+    numArgs: 0
+  },
+  handler: function handler(_ref5) {
+    var parser = _ref5.parser,
+        funcName = _ref5.funcName;
+    var fName = funcName;
+
+    if (fName.length === 1) {
+      fName = singleCharIntegrals[fName];
+    }
+
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: true,
+      name: fName
+    };
+  },
+  htmlBuilder: op_htmlBuilder,
+  mathmlBuilder: op_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/operatorname.js
+
+
+
+
+
+
+
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only
+// "operatorname", but also  "supsub" since \operatorname* can
+var operatorname_htmlBuilder = function htmlBuilder(grp, options) {
+  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
+  var supGroup;
+  var subGroup;
+  var hasLimits = false;
+  var group;
+  var supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // If we have limits, supsub will pass us its group to handle. Pull
+    // out the superscript and subscript and set the group to the op in
+    // its base.
+    supGroup = supSub.sup;
+    subGroup = supSub.sub;
+    group = assertNodeType(supSub.base, "operatorname");
+    hasLimits = true;
+  } else {
+    group = assertNodeType(grp, "operatorname");
+  }
+
+  var base;
+
+  if (group.body.length > 0) {
+    var body = group.body.map(function (child) {
+      // $FlowFixMe: Check if the node has a string `text` property.
+      var childText = child.text;
+
+      if (typeof childText === "string") {
+        return {
+          type: "textord",
+          mode: child.mode,
+          text: childText
+        };
+      } else {
+        return child;
+      }
+    }); // Consolidate function names into symbol characters.
+
+    var expression = buildHTML_buildExpression(body, options.withFont("mathrm"), true);
+
+    for (var i = 0; i < expression.length; i++) {
+      var child = expression[i];
+
+      if (child instanceof domTree_SymbolNode) {
+        // Per amsopn package,
+        // change minus to hyphen and \ast to asterisk
+        child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
+      }
+    }
+
+    base = buildCommon.makeSpan(["mop"], expression, options);
+  } else {
+    base = buildCommon.makeSpan(["mop"], [], options);
+  }
+
+  if (hasLimits) {
+    return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);
+  } else {
+    return base;
+  }
+};
+
+var operatorname_mathmlBuilder = function mathmlBuilder(group, options) {
+  // The steps taken here are similar to the html version.
+  var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
+
+  var isAllString = true; // default
+
+  for (var i = 0; i < expression.length; i++) {
+    var node = expression[i];
+
+    if (node instanceof mathMLTree.SpaceNode) {// Do nothing
+    } else if (node instanceof mathMLTree.MathNode) {
+      switch (node.type) {
+        case "mi":
+        case "mn":
+        case "ms":
+        case "mspace":
+        case "mtext":
+          break;
+        // Do nothing yet.
+
+        case "mo":
+          {
+            var child = node.children[0];
+
+            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {
+              child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
+            } else {
+              isAllString = false;
+            }
+
+            break;
+          }
+
+        default:
+          isAllString = false;
+      }
+    } else {
+      isAllString = false;
+    }
+  }
+
+  if (isAllString) {
+    // Write a single TextNode instead of multiple nested tags.
+    var word = expression.map(function (node) {
+      return node.toText();
+    }).join("");
+    expression = [new mathMLTree.TextNode(word)];
+  }
+
+  var identifier = new mathMLTree.MathNode("mi", expression);
+  identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as &ApplyFunction;
+  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
+
+  var operator = new mathMLTree.MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
+
+  if (group.parentIsSupSub) {
+    return new mathMLTree.MathNode("mo", [identifier, operator]);
+  } else {
+    return mathMLTree.newDocumentFragment([identifier, operator]);
+  }
+}; // \operatorname
+// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
+
+
+defineFunction({
+  type: "operatorname",
+  names: ["\\operatorname", "\\operatorname*"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var body = args[0];
+    return {
+      type: "operatorname",
+      mode: parser.mode,
+      body: defineFunction_ordargument(body),
+      alwaysHandleSupSub: funcName === "\\operatorname*",
+      limits: false,
+      parentIsSupSub: false
+    };
+  },
+  htmlBuilder: operatorname_htmlBuilder,
+  mathmlBuilder: operatorname_mathmlBuilder
+});
+// CONCATENATED MODULE: ./src/functions/ordgroup.js
+
+
+
+
+defineFunctionBuilders({
+  type: "ordgroup",
+  htmlBuilder: function htmlBuilder(group, options) {
+    if (group.semisimple) {
+      return buildCommon.makeFragment(buildHTML_buildExpression(group.body, options, false));
+    }
+
+    return buildCommon.makeSpan(["mord"], buildHTML_buildExpression(group.body, options, true), options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    return buildExpressionRow(group.body, options, true);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/overline.js
+
+
+
+
+
+defineFunction({
+  type: "overline",
+  names: ["\\overline"],
+  props: {
+    numArgs: 1
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var body = args[0];
+    return {
+      type: "overline",
+      mode: parser.mode,
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Overlines are handled in the TeXbook pg 443, Rule 9.
+    // Build the inner group in the cramped style.
+    var innerGroup = buildHTML_buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body
+
+    var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns
+
+    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
+    var vlist = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: innerGroup
+      }, {
+        type: "kern",
+        size: 3 * defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: line
+      }, {
+        type: "kern",
+        size: defaultRuleThickness
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "overline"], [vlist], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
+    operator.setAttribute("stretchy", "true");
+    var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]);
+    node.setAttribute("accent", "true");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/phantom.js
+
+
+
+
+
+defineFunction({
+  type: "phantom",
+  names: ["\\phantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var body = args[0];
+    return {
+      type: "phantom",
+      mode: parser.mode,
+      body: defineFunction_ordargument(body)
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var elements = buildHTML_buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains.
+    // See "color" for more details.
+
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var inner = buildMathML_buildExpression(group.body, options);
+    return new mathMLTree.MathNode("mphantom", inner);
+  }
+});
+defineFunction({
+  type: "hphantom",
+  names: ["\\hphantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref2, args) {
+    var parser = _ref2.parser;
+    var body = args[0];
+    return {
+      type: "hphantom",
+      mode: parser.mode,
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options.withPhantom())]);
+    node.height = 0;
+    node.depth = 0;
+
+    if (node.children) {
+      for (var i = 0; i < node.children.length; i++) {
+        node.children[i].height = 0;
+        node.children[i].depth = 0;
+      }
+    } // See smash for comment re: use of makeVList
+
+
+    node = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord).
+
+    return buildCommon.makeSpan(["mord"], [node], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
+    var phantom = new mathMLTree.MathNode("mphantom", inner);
+    var node = new mathMLTree.MathNode("mpadded", [phantom]);
+    node.setAttribute("height", "0px");
+    node.setAttribute("depth", "0px");
+    return node;
+  }
+});
+defineFunction({
+  type: "vphantom",
+  names: ["\\vphantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref3, args) {
+    var parser = _ref3.parser;
+    var body = args[0];
+    return {
+      type: "vphantom",
+      mode: parser.mode,
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options.withPhantom())]);
+    var fix = buildCommon.makeSpan(["fix"], []);
+    return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
+    var phantom = new mathMLTree.MathNode("mphantom", inner);
+    var node = new mathMLTree.MathNode("mpadded", [phantom]);
+    node.setAttribute("width", "0px");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/raisebox.js
+
+
+
+
+
+
+ // Box manipulation
+
+defineFunction({
+  type: "raisebox",
+  names: ["\\raisebox"],
+  props: {
+    numArgs: 2,
+    argTypes: ["size", "hbox"],
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    var amount = assertNodeType(args[0], "size").value;
+    var body = args[1];
+    return {
+      type: "raisebox",
+      mode: parser.mode,
+      dy: amount,
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var body = buildHTML_buildGroup(group.body, options);
+    var dy = units_calculateSize(group.dy, options);
+    return buildCommon.makeVList({
+      positionType: "shift",
+      positionData: -dy,
+      children: [{
+        type: "elem",
+        elem: body
+      }]
+    }, options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
+    var dy = group.dy.number + group.dy.unit;
+    node.setAttribute("voffset", dy);
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/rule.js
+
+
+
+
+
+defineFunction({
+  type: "rule",
+  names: ["\\rule"],
+  props: {
+    numArgs: 2,
+    numOptionalArgs: 1,
+    argTypes: ["size", "size", "size"]
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser;
+    var shift = optArgs[0];
+    var width = assertNodeType(args[0], "size");
+    var height = assertNodeType(args[1], "size");
+    return {
+      type: "rule",
+      mode: parser.mode,
+      shift: shift && assertNodeType(shift, "size").value,
+      width: width.value,
+      height: height.value
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Make an empty span for the rule
+    var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units
+
+    var width = units_calculateSize(group.width, options);
+    var height = units_calculateSize(group.height, options);
+    var shift = group.shift ? units_calculateSize(group.shift, options) : 0; // Style the rule to the right size
+
+    rule.style.borderRightWidth = width + "em";
+    rule.style.borderTopWidth = height + "em";
+    rule.style.bottom = shift + "em"; // Record the height and width
+
+    rule.width = width;
+    rule.height = height + shift;
+    rule.depth = -shift; // Font size is the number large enough that the browser will
+    // reserve at least `absHeight` space above the baseline.
+    // The 1.125 factor was empirically determined
+
+    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
+    return rule;
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var width = units_calculateSize(group.width, options);
+    var height = units_calculateSize(group.height, options);
+    var shift = group.shift ? units_calculateSize(group.shift, options) : 0;
+    var color = options.color && options.getColor() || "black";
+    var rule = new mathMLTree.MathNode("mspace");
+    rule.setAttribute("mathbackground", color);
+    rule.setAttribute("width", width + "em");
+    rule.setAttribute("height", height + "em");
+    var wrapper = new mathMLTree.MathNode("mpadded", [rule]);
+
+    if (shift >= 0) {
+      wrapper.setAttribute("height", "+" + shift + "em");
+    } else {
+      wrapper.setAttribute("height", shift + "em");
+      wrapper.setAttribute("depth", "+" + -shift + "em");
+    }
+
+    wrapper.setAttribute("voffset", shift + "em");
+    return wrapper;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/sizing.js
+
+
+
+
+
+function sizingGroup(value, options, baseOptions) {
+  var inner = buildHTML_buildExpression(value, options, false);
+  var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
+  // manually. Handle nested size changes.
+
+  for (var i = 0; i < inner.length; i++) {
+    var pos = inner[i].classes.indexOf("sizing");
+
+    if (pos < 0) {
+      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
+    } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
+      // This is a nested size change: e.g., inner[i] is the "b" in
+      // `\Huge a \small b`. Override the old size (the `reset-` class)
+      // but not the new size.
+      inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
+    }
+
+    inner[i].height *= multiplier;
+    inner[i].depth *= multiplier;
+  }
+
+  return buildCommon.makeFragment(inner);
+}
+var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
+var sizing_htmlBuilder = function htmlBuilder(group, options) {
+  // Handle sizing operators like \Huge. Real TeX doesn't actually allow
+  // these functions inside of math expressions, so we do some special
+  // handling.
+  var newOptions = options.havingSize(group.size);
+  return sizingGroup(group.body, newOptions, options);
+};
+defineFunction({
+  type: "sizing",
+  names: sizeFuncs,
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var breakOnTokenText = _ref.breakOnTokenText,
+        funcName = _ref.funcName,
+        parser = _ref.parser;
+    var body = parser.parseExpression(false, breakOnTokenText);
+    return {
+      type: "sizing",
+      mode: parser.mode,
+      // Figure out what size to use based on the list of functions above
+      size: sizeFuncs.indexOf(funcName) + 1,
+      body: body
+    };
+  },
+  htmlBuilder: sizing_htmlBuilder,
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var newOptions = options.havingSize(group.size);
+    var inner = buildMathML_buildExpression(group.body, newOptions);
+    var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
+    // changes, because we don't keep state of what style we're currently
+    // in, so we can't reset the size to normal before changing it.  Now
+    // that we're passing an options parameter we should be able to fix
+    // this.
+
+    node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/smash.js
+// smash, with optional [tb], as in AMS
+
+
+
+
+
+
+defineFunction({
+  type: "smash",
+  names: ["\\smash"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser;
+    var smashHeight = false;
+    var smashDepth = false;
+    var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");
+
+    if (tbArg) {
+      // Optional [tb] argument is engaged.
+      // ref: amsmath: \renewcommand{\smash}[1][tb]{%
+      //               def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}%
+      var letter = "";
+
+      for (var i = 0; i < tbArg.body.length; ++i) {
+        var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.
+
+        letter = node.text;
+
+        if (letter === "t") {
+          smashHeight = true;
+        } else if (letter === "b") {
+          smashDepth = true;
+        } else {
+          smashHeight = false;
+          smashDepth = false;
+          break;
+        }
+      }
+    } else {
+      smashHeight = true;
+      smashDepth = true;
+    }
+
+    var body = args[0];
+    return {
+      type: "smash",
+      mode: parser.mode,
+      body: body,
+      smashHeight: smashHeight,
+      smashDepth: smashDepth
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]);
+
+    if (!group.smashHeight && !group.smashDepth) {
+      return node;
+    }
+
+    if (group.smashHeight) {
+      node.height = 0; // In order to influence makeVList, we have to reset the children.
+
+      if (node.children) {
+        for (var i = 0; i < node.children.length; i++) {
+          node.children[i].height = 0;
+        }
+      }
+    }
+
+    if (group.smashDepth) {
+      node.depth = 0;
+
+      if (node.children) {
+        for (var _i = 0; _i < node.children.length; _i++) {
+          node.children[_i].depth = 0;
+        }
+      }
+    } // At this point, we've reset the TeX-like height and depth values.
+    // But the span still has an HTML line height.
+    // makeVList applies "display: table-cell", which prevents the browser
+    // from acting on that line height. So we'll call makeVList now.
+
+
+    var smashedNode = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord).
+
+    return buildCommon.makeSpan(["mord"], [smashedNode], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]);
+
+    if (group.smashHeight) {
+      node.setAttribute("height", "0px");
+    }
+
+    if (group.smashDepth) {
+      node.setAttribute("depth", "0px");
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/sqrt.js
+
+
+
+
+
+
+
+defineFunction({
+  type: "sqrt",
+  names: ["\\sqrt"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1
+  },
+  handler: function handler(_ref, args, optArgs) {
+    var parser = _ref.parser;
+    var index = optArgs[0];
+    var body = args[0];
+    return {
+      type: "sqrt",
+      mode: parser.mode,
+      body: body,
+      index: index
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Square roots are handled in the TeXbook pg. 443, Rule 11.
+    // First, we do the same steps as in overline to build the inner group
+    // and line
+    var inner = buildHTML_buildGroup(group.body, options.havingCrampedStyle());
+
+    if (inner.height === 0) {
+      // Render a small surd.
+      inner.height = options.fontMetrics().xHeight;
+    } // Some groups can return document fragments.  Handle those by wrapping
+    // them in a span.
+
+
+    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter
+
+    var metrics = options.fontMetrics();
+    var theta = metrics.defaultRuleThickness;
+    var phi = theta;
+
+    if (options.style.id < src_Style.TEXT.id) {
+      phi = options.fontMetrics().xHeight;
+    } // Calculate the clearance between the body and line
+
+
+    var lineClearance = theta + phi / 4;
+    var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size
+
+    var _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options),
+        img = _delimiter$sqrtImage.span,
+        ruleWidth = _delimiter$sqrtImage.ruleWidth,
+        advanceWidth = _delimiter$sqrtImage.advanceWidth;
+
+    var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size
+
+    if (delimDepth > inner.height + inner.depth + lineClearance) {
+      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
+    } // Shift the sqrt image
+
+
+    var imgShift = img.height - inner.height - lineClearance - ruleWidth;
+    inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument.
+
+    var body = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: inner,
+        wrapperClasses: ["svg-align"]
+      }, {
+        type: "kern",
+        size: -(inner.height + imgShift)
+      }, {
+        type: "elem",
+        elem: img
+      }, {
+        type: "kern",
+        size: ruleWidth
+      }]
+    }, options);
+
+    if (!group.index) {
+      return buildCommon.makeSpan(["mord", "sqrt"], [body], options);
+    } else {
+      // Handle the optional root index
+      // The index is always in scriptscript style
+      var newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT);
+      var rootm = buildHTML_buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX
+      // source, in the definition of `\r@@t`.
+
+      var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly
+
+      var rootVList = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: -toShift,
+        children: [{
+          type: "elem",
+          elem: rootm
+        }]
+      }, options); // Add a class surrounding it so we can add on the appropriate
+      // kerning
+
+      var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);
+      return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options);
+    }
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var body = group.body,
+        index = group.index;
+    return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/styling.js
+
+
+
+
+
+var styling_styleMap = {
+  "display": src_Style.DISPLAY,
+  "text": src_Style.TEXT,
+  "script": src_Style.SCRIPT,
+  "scriptscript": src_Style.SCRIPTSCRIPT
+};
+defineFunction({
+  type: "styling",
+  names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var breakOnTokenText = _ref.breakOnTokenText,
+        funcName = _ref.funcName,
+        parser = _ref.parser;
+    // parse out the implicit body
+    var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.
+    // here and in buildHTML and de-dupe the enumeration of all the styles).
+    // $FlowFixMe: The names above exactly match the styles.
+
+    var style = funcName.slice(1, funcName.length - 5);
+    return {
+      type: "styling",
+      mode: parser.mode,
+      // Figure out what style to use by pulling out the style from
+      // the function name
+      style: style,
+      body: body
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Style changes are handled in the TeXbook on pg. 442, Rule 3.
+    var newStyle = styling_styleMap[group.style];
+    var newOptions = options.havingStyle(newStyle).withFont('');
+    return sizingGroup(group.body, newOptions, options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    // Figure out what style we're changing to.
+    var newStyle = styling_styleMap[group.style];
+    var newOptions = options.havingStyle(newStyle);
+    var inner = buildMathML_buildExpression(group.body, newOptions);
+    var node = new mathMLTree.MathNode("mstyle", inner);
+    var styleAttributes = {
+      "display": ["0", "true"],
+      "text": ["0", "false"],
+      "script": ["1", "false"],
+      "scriptscript": ["2", "false"]
+    };
+    var attr = styleAttributes[group.style];
+    node.setAttribute("scriptlevel", attr[0]);
+    node.setAttribute("displaystyle", attr[1]);
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/supsub.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Sometimes, groups perform special rules when they have superscripts or
+ * subscripts attached to them. This function lets the `supsub` group know that
+ * Sometimes, groups perform special rules when they have superscripts or
+ * its inner element should handle the superscripts and subscripts instead of
+ * handling them itself.
+ */
+var supsub_htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {
+  var base = group.base;
+
+  if (!base) {
+    return null;
+  } else if (base.type === "op") {
+    // Operators handle supsubs differently when they have limits
+    // (e.g. `\displaystyle\sum_2^3`)
+    var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub);
+    return delegate ? op_htmlBuilder : null;
+  } else if (base.type === "operatorname") {
+    var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits);
+
+    return _delegate ? operatorname_htmlBuilder : null;
+  } else if (base.type === "accent") {
+    return utils.isCharacterBox(base.base) ? accent_htmlBuilder : null;
+  } else if (base.type === "horizBrace") {
+    var isSup = !group.sub;
+    return isSup === base.isOver ? horizBrace_htmlBuilder : null;
+  } else {
+    return null;
+  }
+}; // Super scripts and subscripts, whose precise placement can depend on other
+// functions that precede them.
+
+
+defineFunctionBuilders({
+  type: "supsub",
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Superscript and subscripts are handled in the TeXbook on page
+    // 445-446, rules 18(a-f).
+    // Here is where we defer to the inner group if it should handle
+    // superscripts and subscripts itself.
+    var builderDelegate = supsub_htmlBuilderDelegate(group, options);
+
+    if (builderDelegate) {
+      return builderDelegate(group, options);
+    }
+
+    var valueBase = group.base,
+        valueSup = group.sup,
+        valueSub = group.sub;
+    var base = buildHTML_buildGroup(valueBase, options);
+    var supm;
+    var subm;
+    var metrics = options.fontMetrics(); // Rule 18a
+
+    var supShift = 0;
+    var subShift = 0;
+    var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);
+
+    if (valueSup) {
+      var newOptions = options.havingStyle(options.style.sup());
+      supm = buildHTML_buildGroup(valueSup, newOptions, options);
+
+      if (!isCharacterBox) {
+        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
+      }
+    }
+
+    if (valueSub) {
+      var _newOptions = options.havingStyle(options.style.sub());
+
+      subm = buildHTML_buildGroup(valueSub, _newOptions, options);
+
+      if (!isCharacterBox) {
+        subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;
+      }
+    } // Rule 18c
+
+
+    var minSupShift;
+
+    if (options.style === src_Style.DISPLAY) {
+      minSupShift = metrics.sup1;
+    } else if (options.style.cramped) {
+      minSupShift = metrics.sup3;
+    } else {
+      minSupShift = metrics.sup2;
+    } // scriptspace is a font-size-independent size, so scale it
+    // appropriately for use as the marginRight.
+
+
+    var multiplier = options.sizeMultiplier;
+    var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em";
+    var marginLeft = null;
+
+    if (subm) {
+      // Subscripts shouldn't be shifted by the base's italic correction.
+      // Account for that by shifting the subscript back the appropriate
+      // amount. Note we only do this when the base is a single symbol.
+      var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint");
+
+      if (base instanceof domTree_SymbolNode || isOiint) {
+        // $FlowFixMe
+        marginLeft = -base.italic + "em";
+      }
+    }
+
+    var supsub;
+
+    if (supm && subm) {
+      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+      subShift = Math.max(subShift, metrics.sub2);
+      var ruleWidth = metrics.defaultRuleThickness; // Rule 18e
+
+      var maxWidth = 4 * ruleWidth;
+
+      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {
+        subShift = maxWidth - (supShift - supm.depth) + subm.height;
+        var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
+
+        if (psi > 0) {
+          supShift += psi;
+          subShift -= psi;
+        }
+      }
+
+      var vlistElem = [{
+        type: "elem",
+        elem: subm,
+        shift: subShift,
+        marginRight: marginRight,
+        marginLeft: marginLeft
+      }, {
+        type: "elem",
+        elem: supm,
+        shift: -supShift,
+        marginRight: marginRight
+      }];
+      supsub = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: vlistElem
+      }, options);
+    } else if (subm) {
+      // Rule 18b
+      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
+      var _vlistElem = [{
+        type: "elem",
+        elem: subm,
+        marginLeft: marginLeft,
+        marginRight: marginRight
+      }];
+      supsub = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: subShift,
+        children: _vlistElem
+      }, options);
+    } else if (supm) {
+      // Rule 18c, d
+      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+      supsub = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: -supShift,
+        children: [{
+          type: "elem",
+          elem: supm,
+          marginRight: marginRight
+        }]
+      }, options);
+    } else {
+      throw new Error("supsub must have either sup or sub.");
+    } // Wrap the supsub vlist in a span.msupsub to reset text-align.
+
+
+    var mclass = getTypeOfDomTree(base, "right") || "mord";
+    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    // Is the inner group a relevant horizonal brace?
+    var isBrace = false;
+    var isOver;
+    var isSup;
+    var horizBrace = checkNodeType(group.base, "horizBrace");
+
+    if (horizBrace) {
+      isSup = !!group.sup;
+
+      if (isSup === horizBrace.isOver) {
+        isBrace = true;
+        isOver = horizBrace.isOver;
+      }
+    }
+
+    if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {
+      group.base.parentIsSupSub = true;
+    }
+
+    var children = [buildMathML_buildGroup(group.base, options)];
+
+    if (group.sub) {
+      children.push(buildMathML_buildGroup(group.sub, options));
+    }
+
+    if (group.sup) {
+      children.push(buildMathML_buildGroup(group.sup, options));
+    }
+
+    var nodeType;
+
+    if (isBrace) {
+      nodeType = isOver ? "mover" : "munder";
+    } else if (!group.sub) {
+      var base = group.base;
+
+      if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {
+        nodeType = "mover";
+      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) {
+        nodeType = "mover";
+      } else {
+        nodeType = "msup";
+      }
+    } else if (!group.sup) {
+      var _base = group.base;
+
+      if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) {
+        nodeType = "munder";
+      } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) {
+        nodeType = "munder";
+      } else {
+        nodeType = "msub";
+      }
+    } else {
+      var _base2 = group.base;
+
+      if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) {
+        nodeType = "munderover";
+      } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) {
+        nodeType = "munderover";
+      } else {
+        nodeType = "msubsup";
+      }
+    }
+
+    var node = new mathMLTree.MathNode(nodeType, children);
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/symbolsOp.js
+
+
+
+ // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js.
+
+defineFunctionBuilders({
+  type: "atom",
+  htmlBuilder: function htmlBuilder(group, options) {
+    return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.text, group.mode)]);
+
+    if (group.family === "bin") {
+      var variant = buildMathML_getVariant(group, options);
+
+      if (variant === "bold-italic") {
+        node.setAttribute("mathvariant", variant);
+      }
+    } else if (group.family === "punct") {
+      node.setAttribute("separator", "true");
+    } else if (group.family === "open" || group.family === "close") {
+      // Delims built here should not stretch vertically.
+      // See delimsizing.js for stretchy delims.
+      node.setAttribute("stretchy", "false");
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/symbolsOrd.js
+
+
+
+
+// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in
+var defaultVariant = {
+  "mi": "italic",
+  "mn": "normal",
+  "mtext": "normal"
+};
+defineFunctionBuilders({
+  type: "mathord",
+  htmlBuilder: function htmlBuilder(group, options) {
+    return buildCommon.makeOrd(group, options, "mathord");
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node = new mathMLTree.MathNode("mi", [buildMathML_makeText(group.text, group.mode, options)]);
+    var variant = buildMathML_getVariant(group, options) || "italic";
+
+    if (variant !== defaultVariant[node.type]) {
+      node.setAttribute("mathvariant", variant);
+    }
+
+    return node;
+  }
+});
+defineFunctionBuilders({
+  type: "textord",
+  htmlBuilder: function htmlBuilder(group, options) {
+    return buildCommon.makeOrd(group, options, "textord");
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var text = buildMathML_makeText(group.text, group.mode, options);
+    var variant = buildMathML_getVariant(group, options) || "normal";
+    var node;
+
+    if (group.mode === 'text') {
+      node = new mathMLTree.MathNode("mtext", [text]);
+    } else if (/[0-9]/.test(group.text)) {
+      // TODO(kevinb) merge adjacent <mn> nodes
+      // do it as a post processing step
+      node = new mathMLTree.MathNode("mn", [text]);
+    } else if (group.text === "\\prime") {
+      node = new mathMLTree.MathNode("mo", [text]);
+    } else {
+      node = new mathMLTree.MathNode("mi", [text]);
+    }
+
+    if (variant !== defaultVariant[node.type]) {
+      node.setAttribute("mathvariant", variant);
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js
+
+
+
+ // A map of CSS-based spacing functions to their CSS class.
+
+var cssSpace = {
+  "\\nobreak": "nobreak",
+  "\\allowbreak": "allowbreak"
+}; // A lookup table to determine whether a spacing function/symbol should be
+// treated like a regular space character.  If a symbol or command is a key
+// in this table, then it should be a regular space character.  Furthermore,
+// the associated value may have a `className` specifying an extra CSS class
+// to add to the created `span`.
+
+var regularSpace = {
+  " ": {},
+  "\\ ": {},
+  "~": {
+    className: "nobreak"
+  },
+  "\\space": {},
+  "\\nobreakspace": {
+    className: "nobreak"
+  }
+}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in
+// src/symbols.js.
+
+defineFunctionBuilders({
+  type: "spacing",
+  htmlBuilder: function htmlBuilder(group, options) {
+    if (regularSpace.hasOwnProperty(group.text)) {
+      var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these
+      // things has an entry in the symbols table, so these will be turned
+      // into appropriate outputs.
+
+      if (group.mode === "text") {
+        var ord = buildCommon.makeOrd(group, options, "textord");
+        ord.classes.push(className);
+        return ord;
+      } else {
+        return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options);
+      }
+    } else if (cssSpace.hasOwnProperty(group.text)) {
+      // Spaces based on just a CSS class.
+      return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options);
+    } else {
+      throw new src_ParseError("Unknown type of space \"" + group.text + "\"");
+    }
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var node;
+
+    if (regularSpace.hasOwnProperty(group.text)) {
+      node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]);
+    } else if (cssSpace.hasOwnProperty(group.text)) {
+      // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored
+      return new mathMLTree.MathNode("mspace");
+    } else {
+      throw new src_ParseError("Unknown type of space \"" + group.text + "\"");
+    }
+
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/tag.js
+
+
+
+
+var tag_pad = function pad() {
+  var padNode = new mathMLTree.MathNode("mtd", []);
+  padNode.setAttribute("width", "50%");
+  return padNode;
+};
+
+defineFunctionBuilders({
+  type: "tag",
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);
+    table.setAttribute("width", "100%");
+    return table; // TODO: Left-aligned tags.
+    // Currently, the group and options passed here do not contain
+    // enough info to set tag alignment. `leqno` is in Settings but it is
+    // not passed to Options. On the HTML side, leqno is
+    // set by a CSS class applied in buildTree.js. That would have worked
+    // in MathML if browsers supported <mlabeledtr>. Since they don't, we
+    // need to rewrite the way this function is called.
+  }
+});
+// CONCATENATED MODULE: ./src/functions/text.js
+
+
+
+ // Non-mathy text, possibly in a font
+
+var textFontFamilies = {
+  "\\text": undefined,
+  "\\textrm": "textrm",
+  "\\textsf": "textsf",
+  "\\texttt": "texttt",
+  "\\textnormal": "textrm"
+};
+var textFontWeights = {
+  "\\textbf": "textbf",
+  "\\textmd": "textmd"
+};
+var textFontShapes = {
+  "\\textit": "textit",
+  "\\textup": "textup"
+};
+
+var optionsWithFont = function optionsWithFont(group, options) {
+  var font = group.font; // Checks if the argument is a font family or a font style.
+
+  if (!font) {
+    return options;
+  } else if (textFontFamilies[font]) {
+    return options.withTextFontFamily(textFontFamilies[font]);
+  } else if (textFontWeights[font]) {
+    return options.withTextFontWeight(textFontWeights[font]);
+  } else {
+    return options.withTextFontShape(textFontShapes[font]);
+  }
+};
+
+defineFunction({
+  type: "text",
+  names: [// Font families
+  "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights
+  "\\textbf", "\\textmd", // Font Shapes
+  "\\textit", "\\textup"],
+  props: {
+    numArgs: 1,
+    argTypes: ["text"],
+    greediness: 2,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser,
+        funcName = _ref.funcName;
+    var body = args[0];
+    return {
+      type: "text",
+      mode: parser.mode,
+      body: defineFunction_ordargument(body),
+      font: funcName
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var newOptions = optionsWithFont(group, options);
+    var inner = buildHTML_buildExpression(group.body, newOptions, true);
+    return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var newOptions = optionsWithFont(group, options);
+    return buildExpressionRow(group.body, newOptions);
+  }
+});
+// CONCATENATED MODULE: ./src/functions/underline.js
+
+
+
+
+
+defineFunction({
+  type: "underline",
+  names: ["\\underline"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: function handler(_ref, args) {
+    var parser = _ref.parser;
+    return {
+      type: "underline",
+      mode: parser.mode,
+      body: args[0]
+    };
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    // Underlines are handled in the TeXbook pg 443, Rule 10.
+    // Build the inner group.
+    var innerGroup = buildHTML_buildGroup(group.body, options); // Create the line to go below the body
+
+    var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns
+
+    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
+    var vlist = buildCommon.makeVList({
+      positionType: "top",
+      positionData: innerGroup.height,
+      children: [{
+        type: "kern",
+        size: defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: line
+      }, {
+        type: "kern",
+        size: 3 * defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: innerGroup
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "underline"], [vlist], options);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
+    operator.setAttribute("stretchy", "true");
+    var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]);
+    node.setAttribute("accentunder", "true");
+    return node;
+  }
+});
+// CONCATENATED MODULE: ./src/functions/verb.js
+
+
+
+
+defineFunction({
+  type: "verb",
+  names: ["\\verb"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: function handler(context, args, optArgs) {
+    // \verb and \verb* are dealt with directly in Parser.js.
+    // If we end up here, it's because of a failure to match the two delimiters
+    // in the regex in Lexer.js.  LaTeX raises the following error when \verb is
+    // terminated by end of line (or file).
+    throw new src_ParseError("\\verb ended by end of line instead of matching delimiter");
+  },
+  htmlBuilder: function htmlBuilder(group, options) {
+    var text = makeVerb(group);
+    var body = []; // \verb enters text mode and therefore is sized like \textstyle
+
+    var newOptions = options.havingStyle(options.style.text());
+
+    for (var i = 0; i < text.length; i++) {
+      var c = text[i];
+
+      if (c === '~') {
+        c = '\\textasciitilde';
+      }
+
+      body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"]));
+    }
+
+    return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);
+  },
+  mathmlBuilder: function mathmlBuilder(group, options) {
+    var text = new mathMLTree.TextNode(makeVerb(group));
+    var node = new mathMLTree.MathNode("mtext", [text]);
+    node.setAttribute("mathvariant", "monospace");
+    return node;
+  }
+});
+/**
+ * Converts verb group into body string.
+ *
+ * \verb* replaces each space with an open box \u2423
+ * \verb replaces each space with a no-break space \xA0
+ */
+
+var makeVerb = function makeVerb(group) {
+  return group.body.replace(/ /g, group.star ? "\u2423" : '\xA0');
+};
+// CONCATENATED MODULE: ./src/functions.js
+/** Include this to ensure that all functions are defined. */
+
+var functions = _functions;
+/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with
+// that object in this file instead of relying on side-effects.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// CONCATENATED MODULE: ./src/Lexer.js
+/**
+ * The Lexer class handles tokenizing the input in various ways. Since our
+ * parser expects us to be able to backtrack, the lexer allows lexing from any
+ * given starting point.
+ *
+ * Its main exposed function is the `lex` function, which takes a position to
+ * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
+ * function.
+ *
+ * The various `_innerLex` functions perform the actual lexing of different
+ * kinds.
+ */
+
+
+
+
+/* The following tokenRegex
+ * - matches typical whitespace (but not NBSP etc.) using its first group
+ * - does not match any control character \x00-\x1f except whitespace
+ * - does not match a bare backslash
+ * - matches any ASCII character except those just mentioned
+ * - does not match the BMP private use area \uE000-\uF8FF
+ * - does not match bare surrogate code units
+ * - matches any BMP character except for those just described
+ * - matches any valid Unicode surrogate pair
+ * - matches a backslash followed by one or more letters
+ * - matches a backslash followed by any BMP character, including newline
+ * Just because the Lexer matches something doesn't mean it's valid input:
+ * If there is no matching function or symbol definition, the Parser will
+ * still reject the input.
+ */
+var spaceRegexString = "[ \r\n\t]";
+var controlWordRegexString = "\\\\[a-zA-Z@]+";
+var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
+var controlWordWhitespaceRegexString = "" + controlWordRegexString + spaceRegexString + "*";
+var controlWordWhitespaceRegex = new RegExp("^(" + controlWordRegexString + ")" + spaceRegexString + "*$");
+var combiningDiacriticalMarkString = "[\u0300-\u036F]";
+var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$");
+var tokenRegexString = "(" + spaceRegexString + "+)|" + // whitespace
+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint
+combiningDiacriticalMarkString + "*") + // ...plus accents
+"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair
+combiningDiacriticalMarkString + "*") + // ...plus accents
+"|\\\\verb\\*([^]).*?\\3" + // \verb*
+"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
+"|\\\\operatorname\\*" + ( // \operatorname*
+"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces
+"|" + controlSymbolRegexString + ")"); // \\, \', etc.
+
+/** Main Lexer class */
+
+var Lexer_Lexer =
+/*#__PURE__*/
+function () {
+  // category codes, only supports comment characters (14) for now
+  function Lexer(input, settings) {
+    this.input = void 0;
+    this.settings = void 0;
+    this.tokenRegex = void 0;
+    this.catcodes = void 0;
+    // Separate accents from characters
+    this.input = input;
+    this.settings = settings;
+    this.tokenRegex = new RegExp(tokenRegexString, 'g');
+    this.catcodes = {
+      "%": 14 // comment character
+
+    };
+  }
+
+  var _proto = Lexer.prototype;
+
+  _proto.setCatcode = function setCatcode(char, code) {
+    this.catcodes[char] = code;
+  }
+  /**
+   * This function lexes a single token.
+   */
+  ;
+
+  _proto.lex = function lex() {
+    var input = this.input;
+    var pos = this.tokenRegex.lastIndex;
+
+    if (pos === input.length) {
+      return new Token_Token("EOF", new SourceLocation(this, pos, pos));
+    }
+
+    var match = this.tokenRegex.exec(input);
+
+    if (match === null || match.index !== pos) {
+      throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token_Token(input[pos], new SourceLocation(this, pos, pos + 1)));
+    }
+
+    var text = match[2] || " ";
+
+    if (this.catcodes[text] === 14) {
+      // comment character
+      var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex);
+
+      if (nlIndex === -1) {
+        this.tokenRegex.lastIndex = input.length; // EOF
+
+        this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)");
+      } else {
+        this.tokenRegex.lastIndex = nlIndex + 1;
+      }
+
+      return this.lex();
+    } // Trim any trailing whitespace from control word match
+
+
+    var controlMatch = text.match(controlWordWhitespaceRegex);
+
+    if (controlMatch) {
+      text = controlMatch[1];
+    }
+
+    return new Token_Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));
+  };
+
+  return Lexer;
+}();
+
+
+// CONCATENATED MODULE: ./src/Namespace.js
+/**
+ * A `Namespace` refers to a space of nameable things like macros or lengths,
+ * which can be `set` either globally or local to a nested group, using an
+ * undo stack similar to how TeX implements this functionality.
+ * Performance-wise, `get` and local `set` take constant time, while global
+ * `set` takes time proportional to the depth of group nesting.
+ */
+
+
+var Namespace_Namespace =
+/*#__PURE__*/
+function () {
+  /**
+   * Both arguments are optional.  The first argument is an object of
+   * built-in mappings which never change.  The second argument is an object
+   * of initial (global-level) mappings, which will constantly change
+   * according to any global/top-level `set`s done.
+   */
+  function Namespace(builtins, globalMacros) {
+    if (builtins === void 0) {
+      builtins = {};
+    }
+
+    if (globalMacros === void 0) {
+      globalMacros = {};
+    }
+
+    this.current = void 0;
+    this.builtins = void 0;
+    this.undefStack = void 0;
+    this.current = globalMacros;
+    this.builtins = builtins;
+    this.undefStack = [];
+  }
+  /**
+   * Start a new nested group, affecting future local `set`s.
+   */
+
+
+  var _proto = Namespace.prototype;
+
+  _proto.beginGroup = function beginGroup() {
+    this.undefStack.push({});
+  }
+  /**
+   * End current nested group, restoring values before the group began.
+   */
+  ;
+
+  _proto.endGroup = function endGroup() {
+    if (this.undefStack.length === 0) {
+      throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug");
+    }
+
+    var undefs = this.undefStack.pop();
+
+    for (var undef in undefs) {
+      if (undefs.hasOwnProperty(undef)) {
+        if (undefs[undef] === undefined) {
+          delete this.current[undef];
+        } else {
+          this.current[undef] = undefs[undef];
+        }
+      }
+    }
+  }
+  /**
+   * Detect whether `name` has a definition.  Equivalent to
+   * `get(name) != null`.
+   */
+  ;
+
+  _proto.has = function has(name) {
+    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);
+  }
+  /**
+   * Get the current value of a name, or `undefined` if there is no value.
+   *
+   * Note: Do not use `if (namespace.get(...))` to detect whether a macro
+   * is defined, as the definition may be the empty string which evaluates
+   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
+   * `if (namespace.has(...))`.
+   */
+  ;
+
+  _proto.get = function get(name) {
+    if (this.current.hasOwnProperty(name)) {
+      return this.current[name];
+    } else {
+      return this.builtins[name];
+    }
+  }
+  /**
+   * Set the current value of a name, and optionally set it globally too.
+   * Local set() sets the current value and (when appropriate) adds an undo
+   * operation to the undo stack.  Global set() may change the undo
+   * operation at every level, so takes time linear in their number.
+   */
+  ;
+
+  _proto.set = function set(name, value, global) {
+    if (global === void 0) {
+      global = false;
+    }
+
+    if (global) {
+      // Global set is equivalent to setting in all groups.  Simulate this
+      // by destroying any undos currently scheduled for this name,
+      // and adding an undo with the *new* value (in case it later gets
+      // locally reset within this environment).
+      for (var i = 0; i < this.undefStack.length; i++) {
+        delete this.undefStack[i][name];
+      }
+
+      if (this.undefStack.length > 0) {
+        this.undefStack[this.undefStack.length - 1][name] = value;
+      }
+    } else {
+      // Undo this set at end of this group (possibly to `undefined`),
+      // unless an undo is already in place, in which case that older
+      // value is the correct one.
+      var top = this.undefStack[this.undefStack.length - 1];
+
+      if (top && !top.hasOwnProperty(name)) {
+        top[name] = this.current[name];
+      }
+    }
+
+    this.current[name] = value;
+  };
+
+  return Namespace;
+}();
+
+
+// CONCATENATED MODULE: ./src/macros.js
+/**
+ * Predefined macros for KaTeX.
+ * This can be used to define some commands in terms of others.
+ */
+
+
+
+
+
+var builtinMacros = {};
+/* harmony default export */ var macros = (builtinMacros); // This function might one day accept an additional argument and do more things.
+
+function defineMacro(name, body) {
+  builtinMacros[name] = body;
+} //////////////////////////////////////////////////////////////////////
+// macro tools
+// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2
+// TeX source: \long\def\@firstoftwo#1#2{#1}
+
+defineMacro("\\@firstoftwo", function (context) {
+  var args = context.consumeArgs(2);
+  return {
+    tokens: args[0],
+    numArgs: 0
+  };
+}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1
+// TeX source: \long\def\@secondoftwo#1#2{#2}
+
+defineMacro("\\@secondoftwo", function (context) {
+  var args = context.consumeArgs(2);
+  return {
+    tokens: args[1],
+    numArgs: 0
+  };
+}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)
+// symbol.  If it matches #1, then the macro expands to #2; otherwise, #3.
+// Note, however, that it does not consume the next symbol in either case.
+
+defineMacro("\\@ifnextchar", function (context) {
+  var args = context.consumeArgs(3); // symbol, if, else
+
+  var nextToken = context.future();
+
+  if (args[0].length === 1 && args[0][0].text === nextToken.text) {
+    return {
+      tokens: args[1],
+      numArgs: 0
+    };
+  } else {
+    return {
+      tokens: args[2],
+      numArgs: 0
+    };
+  }
+}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.
+// If it is `*`, then it consumes the symbol, and the macro expands to #1;
+// otherwise, the macro expands to #2 (without consuming the symbol).
+// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
+
+defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode
+
+defineMacro("\\TextOrMath", function (context) {
+  var args = context.consumeArgs(2);
+
+  if (context.mode === 'text') {
+    return {
+      tokens: args[0],
+      numArgs: 0
+    };
+  } else {
+    return {
+      tokens: args[1],
+      numArgs: 0
+    };
+  }
+}); // Lookup table for parsing numbers in base 8 through 16
+
+var digitToNumber = {
+  "0": 0,
+  "1": 1,
+  "2": 2,
+  "3": 3,
+  "4": 4,
+  "5": 5,
+  "6": 6,
+  "7": 7,
+  "8": 8,
+  "9": 9,
+  "a": 10,
+  "A": 10,
+  "b": 11,
+  "B": 11,
+  "c": 12,
+  "C": 12,
+  "d": 13,
+  "D": 13,
+  "e": 14,
+  "E": 14,
+  "f": 15,
+  "F": 15
+}; // TeX \char makes a literal character (catcode 12) using the following forms:
+// (see The TeXBook, p. 43)
+//   \char123  -- decimal
+//   \char'123 -- octal
+//   \char"123 -- hex
+//   \char`x   -- character that can be written (i.e. isn't active)
+//   \char`\x  -- character that cannot be written (e.g. %)
+// These all refer to characters from the font, so we turn them into special
+// calls to a function \@char dealt with in the Parser.
+
+defineMacro("\\char", function (context) {
+  var token = context.popToken();
+  var base;
+  var number = '';
+
+  if (token.text === "'") {
+    base = 8;
+    token = context.popToken();
+  } else if (token.text === '"') {
+    base = 16;
+    token = context.popToken();
+  } else if (token.text === "`") {
+    token = context.popToken();
+
+    if (token.text[0] === "\\") {
+      number = token.text.charCodeAt(1);
+    } else if (token.text === "EOF") {
+      throw new src_ParseError("\\char` missing argument");
+    } else {
+      number = token.text.charCodeAt(0);
+    }
+  } else {
+    base = 10;
+  }
+
+  if (base) {
+    // Parse a number in the given base, starting with first `token`.
+    number = digitToNumber[token.text];
+
+    if (number == null || number >= base) {
+      throw new src_ParseError("Invalid base-" + base + " digit " + token.text);
+    }
+
+    var digit;
+
+    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {
+      number *= base;
+      number += digit;
+      context.popToken();
+    }
+  }
+
+  return "\\@char{" + number + "}";
+}); // Basic support for macro definitions:
+//     \def\macro{expansion}
+//     \def\macro#1{expansion}
+//     \def\macro#1#2{expansion}
+//     \def\macro#1#2#3#4#5#6#7#8#9{expansion}
+// Also the \gdef and \global\def equivalents
+
+var macros_def = function def(context, global) {
+  var arg = context.consumeArgs(1)[0];
+
+  if (arg.length !== 1) {
+    throw new src_ParseError("\\gdef's first argument must be a macro name");
+  }
+
+  var name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ...
+
+  var numArgs = 0;
+  arg = context.consumeArgs(1)[0];
+
+  while (arg.length === 1 && arg[0].text === "#") {
+    arg = context.consumeArgs(1)[0];
+
+    if (arg.length !== 1) {
+      throw new src_ParseError("Invalid argument number length \"" + arg.length + "\"");
+    }
+
+    if (!/^[1-9]$/.test(arg[0].text)) {
+      throw new src_ParseError("Invalid argument number \"" + arg[0].text + "\"");
+    }
+
+    numArgs++;
+
+    if (parseInt(arg[0].text) !== numArgs) {
+      throw new src_ParseError("Argument number \"" + arg[0].text + "\" out of order");
+    }
+
+    arg = context.consumeArgs(1)[0];
+  } // Final arg is the expansion of the macro
+
+
+  context.macros.set(name, {
+    tokens: arg,
+    numArgs: numArgs
+  }, global);
+  return '';
+};
+
+defineMacro("\\gdef", function (context) {
+  return macros_def(context, true);
+});
+defineMacro("\\def", function (context) {
+  return macros_def(context, false);
+});
+defineMacro("\\global", function (context) {
+  var next = context.consumeArgs(1)[0];
+
+  if (next.length !== 1) {
+    throw new src_ParseError("Invalid command after \\global");
+  }
+
+  var command = next[0].text; // TODO: Should expand command
+
+  if (command === "\\def") {
+    // \global\def is equivalent to \gdef
+    return macros_def(context, true);
+  } else {
+    throw new src_ParseError("Invalid command '" + command + "' after \\global");
+  }
+}); // \newcommand{\macro}[args]{definition}
+// \renewcommand{\macro}[args]{definition}
+// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition}
+
+var macros_newcommand = function newcommand(context, existsOK, nonexistsOK) {
+  var arg = context.consumeArgs(1)[0];
+
+  if (arg.length !== 1) {
+    throw new src_ParseError("\\newcommand's first argument must be a macro name");
+  }
+
+  var name = arg[0].text;
+  var exists = context.isDefined(name);
+
+  if (exists && !existsOK) {
+    throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand"));
+  }
+
+  if (!exists && !nonexistsOK) {
+    throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand");
+  }
+
+  var numArgs = 0;
+  arg = context.consumeArgs(1)[0];
+
+  if (arg.length === 1 && arg[0].text === "[") {
+    var argText = '';
+    var token = context.expandNextToken();
+
+    while (token.text !== "]" && token.text !== "EOF") {
+      // TODO: Should properly expand arg, e.g., ignore {}s
+      argText += token.text;
+      token = context.expandNextToken();
+    }
+
+    if (!argText.match(/^\s*[0-9]+\s*$/)) {
+      throw new src_ParseError("Invalid number of arguments: " + argText);
+    }
+
+    numArgs = parseInt(argText);
+    arg = context.consumeArgs(1)[0];
+  } // Final arg is the expansion of the macro
+
+
+  context.macros.set(name, {
+    tokens: arg,
+    numArgs: numArgs
+  });
+  return '';
+};
+
+defineMacro("\\newcommand", function (context) {
+  return macros_newcommand(context, false, true);
+});
+defineMacro("\\renewcommand", function (context) {
+  return macros_newcommand(context, true, false);
+});
+defineMacro("\\providecommand", function (context) {
+  return macros_newcommand(context, true, true);
+}); //////////////////////////////////////////////////////////////////////
+// Grouping
+// \let\bgroup={ \let\egroup=}
+
+defineMacro("\\bgroup", "{");
+defineMacro("\\egroup", "}"); // Symbols from latex.ltx:
+// \def\lq{`}
+// \def\rq{'}
+// \def \aa {\r a}
+// \def \AA {\r A}
+
+defineMacro("\\lq", "`");
+defineMacro("\\rq", "'");
+defineMacro("\\aa", "\\r a");
+defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.
+// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
+// \DeclareTextCommandDefault{\textregistered}{\textcircled{%
+//      \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}
+// \DeclareRobustCommand{\copyright}{%
+//    \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}
+
+defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}");
+defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");
+defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF
+
+defineMacro("\u212C", "\\mathscr{B}"); // script
+
+defineMacro("\u2130", "\\mathscr{E}");
+defineMacro("\u2131", "\\mathscr{F}");
+defineMacro("\u210B", "\\mathscr{H}");
+defineMacro("\u2110", "\\mathscr{I}");
+defineMacro("\u2112", "\\mathscr{L}");
+defineMacro("\u2133", "\\mathscr{M}");
+defineMacro("\u211B", "\\mathscr{R}");
+defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur
+
+defineMacro("\u210C", "\\mathfrak{H}");
+defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML.
+
+defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot
+// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
+// the dot at U+22C5 and gives it punct spacing.
+
+defineMacro("\xB7", "\\cdotp"); // \llap and \rlap render their contents in text mode
+
+defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
+defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
+defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via
+// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
+// It's thus treated like a \mathrel, but defined by a symbol that has zero
+// width but extends to the right.  We use \rlap to get that spacing.
+// For MathML we write U+0338 here. buildMathML.js will then do the overlay.
+
+defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx:
+// \def\neq{\not=} \let\ne=\neq
+// \DeclareRobustCommand
+//   \notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
+// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
+
+defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");
+defineMacro("\\ne", "\\neq");
+defineMacro("\u2260", "\\neq");
+defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}");
+defineMacro("\u2209", "\\notin"); // Unicode stacked relations
+
+defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}");
+defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");
+defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");
+defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}");
+defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}");
+defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}");
+defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode
+
+defineMacro("\u27C2", "\\perp");
+defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}");
+defineMacro("\u220C", "\\notni");
+defineMacro("\u231C", "\\ulcorner");
+defineMacro("\u231D", "\\urcorner");
+defineMacro("\u231E", "\\llcorner");
+defineMacro("\u231F", "\\lrcorner");
+defineMacro("\xA9", "\\copyright");
+defineMacro("\xAE", "\\textregistered");
+defineMacro("\uFE0F", "\\textregistered"); //////////////////////////////////////////////////////////////////////
+// LaTeX_2ε
+// \vdots{\vbox{\baselineskip4\p@  \lineskiplimit\z@
+// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
+// We'll call \varvdots, which gets a glyph from symbols.js.
+// The zero-width rule gets us an equivalent to the vertical 6pt kern.
+
+defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
+defineMacro("\u22EE", "\\vdots"); //////////////////////////////////////////////////////////////////////
+// amsmath.sty
+// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf
+// Italic Greek capital letters.  AMS defines these with \DeclareMathSymbol,
+// but they are equivalent to \mathit{\Letter}.
+
+defineMacro("\\varGamma", "\\mathit{\\Gamma}");
+defineMacro("\\varDelta", "\\mathit{\\Delta}");
+defineMacro("\\varTheta", "\\mathit{\\Theta}");
+defineMacro("\\varLambda", "\\mathit{\\Lambda}");
+defineMacro("\\varXi", "\\mathit{\\Xi}");
+defineMacro("\\varPi", "\\mathit{\\Pi}");
+defineMacro("\\varSigma", "\\mathit{\\Sigma}");
+defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
+defineMacro("\\varPhi", "\\mathit{\\Phi}");
+defineMacro("\\varPsi", "\\mathit{\\Psi}");
+defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
+
+defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
+
+defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
+
+defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;}
+// \def\implies{\DOTSB\;\Longrightarrow\;}
+// \def\impliedby{\DOTSB\;\Longleftarrow\;}
+
+defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;");
+defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;");
+defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro.
+
+var dotsByToken = {
+  ',': '\\dotsc',
+  '\\not': '\\dotsb',
+  // \keybin@ checks for the following:
+  '+': '\\dotsb',
+  '=': '\\dotsb',
+  '<': '\\dotsb',
+  '>': '\\dotsb',
+  '-': '\\dotsb',
+  '*': '\\dotsb',
+  ':': '\\dotsb',
+  // Symbols whose definition starts with \DOTSB:
+  '\\DOTSB': '\\dotsb',
+  '\\coprod': '\\dotsb',
+  '\\bigvee': '\\dotsb',
+  '\\bigwedge': '\\dotsb',
+  '\\biguplus': '\\dotsb',
+  '\\bigcap': '\\dotsb',
+  '\\bigcup': '\\dotsb',
+  '\\prod': '\\dotsb',
+  '\\sum': '\\dotsb',
+  '\\bigotimes': '\\dotsb',
+  '\\bigoplus': '\\dotsb',
+  '\\bigodot': '\\dotsb',
+  '\\bigsqcup': '\\dotsb',
+  '\\And': '\\dotsb',
+  '\\longrightarrow': '\\dotsb',
+  '\\Longrightarrow': '\\dotsb',
+  '\\longleftarrow': '\\dotsb',
+  '\\Longleftarrow': '\\dotsb',
+  '\\longleftrightarrow': '\\dotsb',
+  '\\Longleftrightarrow': '\\dotsb',
+  '\\mapsto': '\\dotsb',
+  '\\longmapsto': '\\dotsb',
+  '\\hookrightarrow': '\\dotsb',
+  '\\doteq': '\\dotsb',
+  // Symbols whose definition starts with \mathbin:
+  '\\mathbin': '\\dotsb',
+  // Symbols whose definition starts with \mathrel:
+  '\\mathrel': '\\dotsb',
+  '\\relbar': '\\dotsb',
+  '\\Relbar': '\\dotsb',
+  '\\xrightarrow': '\\dotsb',
+  '\\xleftarrow': '\\dotsb',
+  // Symbols whose definition starts with \DOTSI:
+  '\\DOTSI': '\\dotsi',
+  '\\int': '\\dotsi',
+  '\\oint': '\\dotsi',
+  '\\iint': '\\dotsi',
+  '\\iiint': '\\dotsi',
+  '\\iiiint': '\\dotsi',
+  '\\idotsint': '\\dotsi',
+  // Symbols whose definition starts with \DOTSX:
+  '\\DOTSX': '\\dotsx'
+};
+defineMacro("\\dots", function (context) {
+  // TODO: If used in text mode, should expand to \textellipsis.
+  // However, in KaTeX, \textellipsis and \ldots behave the same
+  // (in text mode), and it's unlikely we'd see any of the math commands
+  // that affect the behavior of \dots when in text mode.  So fine for now
+  // (until we support \ifmmode ... \else ... \fi).
+  var thedots = '\\dotso';
+  var next = context.expandAfterFuture().text;
+
+  if (next in dotsByToken) {
+    thedots = dotsByToken[next];
+  } else if (next.substr(0, 4) === '\\not') {
+    thedots = '\\dotsb';
+  } else if (next in src_symbols.math) {
+    if (utils.contains(['bin', 'rel'], src_symbols.math[next].group)) {
+      thedots = '\\dotsb';
+    }
+  }
+
+  return thedots;
+});
+var spaceAfterDots = {
+  // \rightdelim@ checks for the following:
+  ')': true,
+  ']': true,
+  '\\rbrack': true,
+  '\\}': true,
+  '\\rbrace': true,
+  '\\rangle': true,
+  '\\rceil': true,
+  '\\rfloor': true,
+  '\\rgroup': true,
+  '\\rmoustache': true,
+  '\\right': true,
+  '\\bigr': true,
+  '\\biggr': true,
+  '\\Bigr': true,
+  '\\Biggr': true,
+  // \extra@ also tests for the following:
+  '$': true,
+  // \extrap@ checks for the following:
+  ';': true,
+  '.': true,
+  ',': true
+};
+defineMacro("\\dotso", function (context) {
+  var next = context.future().text;
+
+  if (next in spaceAfterDots) {
+    return "\\ldots\\,";
+  } else {
+    return "\\ldots";
+  }
+});
+defineMacro("\\dotsc", function (context) {
+  var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for
+  // ';' and '.', but doesn't check for ','.
+
+  if (next in spaceAfterDots && next !== ',') {
+    return "\\ldots\\,";
+  } else {
+    return "\\ldots";
+  }
+});
+defineMacro("\\cdots", function (context) {
+  var next = context.future().text;
+
+  if (next in spaceAfterDots) {
+    return "\\@cdots\\,";
+  } else {
+    return "\\@cdots";
+  }
+});
+defineMacro("\\dotsb", "\\cdots");
+defineMacro("\\dotsm", "\\cdots");
+defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro
+// starting with \DOTSX implies \dotso, and then \extra@ detects this case
+// and forces the added `\,`.
+
+defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax
+// \let\DOTSB\relax
+// \let\DOTSX\relax
+
+defineMacro("\\DOTSI", "\\relax");
+defineMacro("\\DOTSB", "\\relax");
+defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults
+// \DeclareRobustCommand{\tmspace}[3]{%
+//   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
+
+defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
+// TODO: math mode should use \thinmuskip
+
+defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\,
+
+defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip}
+// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
+// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu
+
+defineMacro("\\>", "\\mskip{4mu}");
+defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\:
+
+defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
+// TODO: math mode should use \thickmuskip = 5mu plus 5mu
+
+defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\;
+
+defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
+// TODO: math mode should use \thinmuskip
+
+defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\!
+
+defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
+// TODO: math mode should use \medmuskip
+
+defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
+// TODO: math mode should use \thickmuskip
+
+defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em }
+
+defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax}
+
+defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax}
+
+defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax}
+
+defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag
+
+defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren");
+defineMacro("\\tag@paren", "\\tag@literal{({#1})}");
+defineMacro("\\tag@literal", function (context) {
+  if (context.macros.get("\\df@tag")) {
+    throw new src_ParseError("Multiple \\tag");
+  }
+
+  return "\\gdef\\df@tag{\\text{#1}}";
+}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
+//   {\operator@font mod}\penalty900
+//   \mkern5mu\nonscript\mskip-\medmuskip}
+// \newcommand{\pod}[1]{\allowbreak
+//   \if@display\mkern18mu\else\mkern8mu\fi(#1)}
+// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}}
+// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu
+//   \else\mkern12mu\fi{\operator@font mod}\,\,#1}
+// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu
+
+defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");
+defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
+defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
+defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb    --   A simulation of bold.
+// The version in ambsy.sty works by typesetting three copies of the argument
+// with small offsets. We use two copies. We omit the vertical offset because
+// of rendering problems that makeVList encounters in Safari.
+
+defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); //////////////////////////////////////////////////////////////////////
+// LaTeX source2e
+// \\ defaults to \newline, but changes to \cr within array environment
+
+defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
+// TODO: Doesn't normally work in math mode because \@ fails.  KaTeX doesn't
+// support \@ yet, so that's omitted, and we add \text so that the result
+// doesn't look funny in math mode.
+
+defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
+//         {\sbox\z@ T%
+//          \vbox to\ht\z@{\hbox{\check@mathfonts
+//                               \fontsize\sf@size\z@
+//                               \math@fontsfalse\selectfont
+//                               A}%
+//                         \vss}%
+//         }%
+//         \kern-.15em%
+//         \TeX}
+// This code aligns the top of the A with the T (from the perspective of TeX's
+// boxes, though visually the A appears to extend above slightly).
+// We compute the corresponding \raisebox when A is rendered in \normalsize
+// \scriptstyle, which has a scale factor of 0.7 (see Options.js).
+
+var latexRaiseA = fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1] + "em";
+defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo
+
+defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
+// \def\@hspace#1{\hskip  #1\relax}
+// \def\@hspacer#1{\vrule \@width\z@\nobreak
+//                 \hskip #1\hskip \z@skip}
+
+defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace");
+defineMacro("\\@hspace", "\\hskip #1\\relax");
+defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); //////////////////////////////////////////////////////////////////////
+// mathtools.sty
+//\providecommand\ordinarycolon{:}
+
+defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
+//TODO(edemaine): Not yet centered. Fix via \raisebox or #726
+
+defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
+
+defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
+
+defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔
+// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
+
+defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+
+defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+
+defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
+
+defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕
+// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
+
+defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
+
+defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
+
+defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
+
+defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
+
+defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
+
+defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
+
+defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.
+
+defineMacro("\u2237", "\\dblcolon"); // ::
+
+defineMacro("\u2239", "\\eqcolon"); // -:
+
+defineMacro("\u2254", "\\coloneqq"); // :=
+
+defineMacro("\u2255", "\\eqqcolon"); // =:
+
+defineMacro("\u2A74", "\\Coloneqq"); // ::=
+//////////////////////////////////////////////////////////////////////
+// colonequals.sty
+// Alternate names for mathtools's macros:
+
+defineMacro("\\ratio", "\\vcentcolon");
+defineMacro("\\coloncolon", "\\dblcolon");
+defineMacro("\\colonequals", "\\coloneqq");
+defineMacro("\\coloncolonequals", "\\Coloneqq");
+defineMacro("\\equalscolon", "\\eqqcolon");
+defineMacro("\\equalscoloncolon", "\\Eqqcolon");
+defineMacro("\\colonminus", "\\coloneq");
+defineMacro("\\coloncolonminus", "\\Coloneq");
+defineMacro("\\minuscolon", "\\eqcolon");
+defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals.
+
+defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals.
+
+defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions:
+
+defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
+defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");
+defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
+defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts
+
+defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
+defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
+defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); //////////////////////////////////////////////////////////////////////
+// MathML alternates for KaTeX glyphs in the Unicode private area
+
+defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
+defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
+defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
+defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
+defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
+defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
+defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
+defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
+defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
+defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
+defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
+defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
+defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
+defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); //////////////////////////////////////////////////////////////////////
+// stmaryrd and semantic
+// The stmaryrd and semantic packages render the next four items by calling a
+// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.
+
+defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}");
+defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}");
+defineMacro("\u27E6", "\\llbracket"); // blackboard bold [
+
+defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ]
+
+defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}");
+defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}");
+defineMacro("\u2983", "\\lBrace"); // blackboard bold {
+
+defineMacro("\u2984", "\\rBrace"); // blackboard bold }
+// TODO: Create variable sized versions of the last two items. I believe that
+// will require new font glyphs.
+//////////////////////////////////////////////////////////////////////
+// texvc.sty
+// The texvc package contains macros available in mediawiki pages.
+// We omit the functions deprecated at
+// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax
+// We also omit texvc's \O, which conflicts with \text{\O}
+
+defineMacro("\\darr", "\\downarrow");
+defineMacro("\\dArr", "\\Downarrow");
+defineMacro("\\Darr", "\\Downarrow");
+defineMacro("\\lang", "\\langle");
+defineMacro("\\rang", "\\rangle");
+defineMacro("\\uarr", "\\uparrow");
+defineMacro("\\uArr", "\\Uparrow");
+defineMacro("\\Uarr", "\\Uparrow");
+defineMacro("\\N", "\\mathbb{N}");
+defineMacro("\\R", "\\mathbb{R}");
+defineMacro("\\Z", "\\mathbb{Z}");
+defineMacro("\\alef", "\\aleph");
+defineMacro("\\alefsym", "\\aleph");
+defineMacro("\\Alpha", "\\mathrm{A}");
+defineMacro("\\Beta", "\\mathrm{B}");
+defineMacro("\\bull", "\\bullet");
+defineMacro("\\Chi", "\\mathrm{X}");
+defineMacro("\\clubs", "\\clubsuit");
+defineMacro("\\cnums", "\\mathbb{C}");
+defineMacro("\\Complex", "\\mathbb{C}");
+defineMacro("\\Dagger", "\\ddagger");
+defineMacro("\\diamonds", "\\diamondsuit");
+defineMacro("\\empty", "\\emptyset");
+defineMacro("\\Epsilon", "\\mathrm{E}");
+defineMacro("\\Eta", "\\mathrm{H}");
+defineMacro("\\exist", "\\exists");
+defineMacro("\\harr", "\\leftrightarrow");
+defineMacro("\\hArr", "\\Leftrightarrow");
+defineMacro("\\Harr", "\\Leftrightarrow");
+defineMacro("\\hearts", "\\heartsuit");
+defineMacro("\\image", "\\Im");
+defineMacro("\\infin", "\\infty");
+defineMacro("\\Iota", "\\mathrm{I}");
+defineMacro("\\isin", "\\in");
+defineMacro("\\Kappa", "\\mathrm{K}");
+defineMacro("\\larr", "\\leftarrow");
+defineMacro("\\lArr", "\\Leftarrow");
+defineMacro("\\Larr", "\\Leftarrow");
+defineMacro("\\lrarr", "\\leftrightarrow");
+defineMacro("\\lrArr", "\\Leftrightarrow");
+defineMacro("\\Lrarr", "\\Leftrightarrow");
+defineMacro("\\Mu", "\\mathrm{M}");
+defineMacro("\\natnums", "\\mathbb{N}");
+defineMacro("\\Nu", "\\mathrm{N}");
+defineMacro("\\Omicron", "\\mathrm{O}");
+defineMacro("\\plusmn", "\\pm");
+defineMacro("\\rarr", "\\rightarrow");
+defineMacro("\\rArr", "\\Rightarrow");
+defineMacro("\\Rarr", "\\Rightarrow");
+defineMacro("\\real", "\\Re");
+defineMacro("\\reals", "\\mathbb{R}");
+defineMacro("\\Reals", "\\mathbb{R}");
+defineMacro("\\Rho", "\\mathrm{P}");
+defineMacro("\\sdot", "\\cdot");
+defineMacro("\\sect", "\\S");
+defineMacro("\\spades", "\\spadesuit");
+defineMacro("\\sub", "\\subset");
+defineMacro("\\sube", "\\subseteq");
+defineMacro("\\supe", "\\supseteq");
+defineMacro("\\Tau", "\\mathrm{T}");
+defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}");
+
+defineMacro("\\weierp", "\\wp");
+defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////////////////////////////////
+// statmath.sty
+// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
+
+defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
+defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
+defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
+
+defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
+defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
+defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
+defineMacro("\\red", "\\textcolor{##df0030}{#1}");
+defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
+defineMacro("\\gray", "\\textcolor{gray}{#1}");
+defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
+defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
+defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
+defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
+defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
+defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
+defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
+defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
+defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
+defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
+defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
+defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
+defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
+defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
+defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
+defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
+defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
+defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
+defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
+defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
+defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
+defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
+defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
+defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
+defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
+defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
+defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
+defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
+defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
+defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
+defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
+defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
+defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
+defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
+defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
+defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
+defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
+defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
+defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
+defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
+defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
+defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
+defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
+defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
+defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
+defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
+defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
+defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
+defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
+defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
+// CONCATENATED MODULE: ./src/MacroExpander.js
+/**
+ * This file contains the “gullet” where macros are expanded
+ * until only non-macro tokens remain.
+ */
+
+
+
+
+
+
+
+// List of commands that act like macros but aren't defined as a macro,
+// function, or symbol.  Used in `isDefined`.
+var implicitCommands = {
+  "\\relax": true,
+  // MacroExpander.js
+  "^": true,
+  // Parser.js
+  "_": true,
+  // Parser.js
+  "\\limits": true,
+  // Parser.js
+  "\\nolimits": true // Parser.js
+
+};
+
+var MacroExpander_MacroExpander =
+/*#__PURE__*/
+function () {
+  function MacroExpander(input, settings, mode) {
+    this.settings = void 0;
+    this.expansionCount = void 0;
+    this.lexer = void 0;
+    this.macros = void 0;
+    this.stack = void 0;
+    this.mode = void 0;
+    this.settings = settings;
+    this.expansionCount = 0;
+    this.feed(input); // Make new global namespace
+
+    this.macros = new Namespace_Namespace(macros, settings.macros);
+    this.mode = mode;
+    this.stack = []; // contains tokens in REVERSE order
+  }
+  /**
+   * Feed a new input string to the same MacroExpander
+   * (with existing macros etc.).
+   */
+
+
+  var _proto = MacroExpander.prototype;
+
+  _proto.feed = function feed(input) {
+    this.lexer = new Lexer_Lexer(input, this.settings);
+  }
+  /**
+   * Switches between "text" and "math" modes.
+   */
+  ;
+
+  _proto.switchMode = function switchMode(newMode) {
+    this.mode = newMode;
+  }
+  /**
+   * Start a new group nesting within all namespaces.
+   */
+  ;
+
+  _proto.beginGroup = function beginGroup() {
+    this.macros.beginGroup();
+  }
+  /**
+   * End current group nesting within all namespaces.
+   */
+  ;
+
+  _proto.endGroup = function endGroup() {
+    this.macros.endGroup();
+  }
+  /**
+   * Returns the topmost token on the stack, without expanding it.
+   * Similar in behavior to TeX's `\futurelet`.
+   */
+  ;
+
+  _proto.future = function future() {
+    if (this.stack.length === 0) {
+      this.pushToken(this.lexer.lex());
+    }
+
+    return this.stack[this.stack.length - 1];
+  }
+  /**
+   * Remove and return the next unexpanded token.
+   */
+  ;
+
+  _proto.popToken = function popToken() {
+    this.future(); // ensure non-empty stack
+
+    return this.stack.pop();
+  }
+  /**
+   * Add a given token to the token stack.  In particular, this get be used
+   * to put back a token returned from one of the other methods.
+   */
+  ;
+
+  _proto.pushToken = function pushToken(token) {
+    this.stack.push(token);
+  }
+  /**
+   * Append an array of tokens to the token stack.
+   */
+  ;
+
+  _proto.pushTokens = function pushTokens(tokens) {
+    var _this$stack;
+
+    (_this$stack = this.stack).push.apply(_this$stack, tokens);
+  }
+  /**
+   * Consume all following space tokens, without expansion.
+   */
+  ;
+
+  _proto.consumeSpaces = function consumeSpaces() {
+    for (;;) {
+      var token = this.future();
+
+      if (token.text === " ") {
+        this.stack.pop();
+      } else {
+        break;
+      }
+    }
+  }
+  /**
+   * Consume the specified number of arguments from the token stream,
+   * and return the resulting array of arguments.
+   */
+  ;
+
+  _proto.consumeArgs = function consumeArgs(numArgs) {
+    var args = []; // obtain arguments, either single token or balanced {…} group
+
+    for (var i = 0; i < numArgs; ++i) {
+      this.consumeSpaces(); // ignore spaces before each argument
+
+      var startOfArg = this.popToken();
+
+      if (startOfArg.text === "{") {
+        var arg = [];
+        var depth = 1;
+
+        while (depth !== 0) {
+          var tok = this.popToken();
+          arg.push(tok);
+
+          if (tok.text === "{") {
+            ++depth;
+          } else if (tok.text === "}") {
+            --depth;
+          } else if (tok.text === "EOF") {
+            throw new src_ParseError("End of input in macro argument", startOfArg);
+          }
+        }
+
+        arg.pop(); // remove last }
+
+        arg.reverse(); // like above, to fit in with stack order
+
+        args[i] = arg;
+      } else if (startOfArg.text === "EOF") {
+        throw new src_ParseError("End of input expecting macro argument");
+      } else {
+        args[i] = [startOfArg];
+      }
+    }
+
+    return args;
+  }
+  /**
+   * Expand the next token only once if possible.
+   *
+   * If the token is expanded, the resulting tokens will be pushed onto
+   * the stack in reverse order and will be returned as an array,
+   * also in reverse order.
+   *
+   * If not, the next token will be returned without removing it
+   * from the stack.  This case can be detected by a `Token` return value
+   * instead of an `Array` return value.
+   *
+   * In either case, the next token will be on the top of the stack,
+   * or the stack will be empty.
+   *
+   * Used to implement `expandAfterFuture` and `expandNextToken`.
+   *
+   * At the moment, macro expansion doesn't handle delimited macros,
+   * i.e. things like those defined by \def\foo#1\end{…}.
+   * See the TeX book page 202ff. for details on how those should behave.
+   */
+  ;
+
+  _proto.expandOnce = function expandOnce() {
+    var topToken = this.popToken();
+    var name = topToken.text;
+
+    var expansion = this._getExpansion(name);
+
+    if (expansion == null) {
+      // mainly checking for undefined here
+      // Fully expanded
+      this.pushToken(topToken);
+      return topToken;
+    }
+
+    this.expansionCount++;
+
+    if (this.expansionCount > this.settings.maxExpand) {
+      throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting");
+    }
+
+    var tokens = expansion.tokens;
+
+    if (expansion.numArgs) {
+      var args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders
+
+      tokens = tokens.slice(); // make a shallow copy
+
+      for (var i = tokens.length - 1; i >= 0; --i) {
+        var tok = tokens[i];
+
+        if (tok.text === "#") {
+          if (i === 0) {
+            throw new src_ParseError("Incomplete placeholder at end of macro body", tok);
+          }
+
+          tok = tokens[--i]; // next token on stack
+
+          if (tok.text === "#") {
+            // ## → #
+            tokens.splice(i + 1, 1); // drop first #
+          } else if (/^[1-9]$/.test(tok.text)) {
+            var _tokens;
+
+            // replace the placeholder with the indicated argument
+            (_tokens = tokens).splice.apply(_tokens, [i, 2].concat(args[+tok.text - 1]));
+          } else {
+            throw new src_ParseError("Not a valid argument number", tok);
+          }
+        }
+      }
+    } // Concatenate expansion onto top of stack.
+
+
+    this.pushTokens(tokens);
+    return tokens;
+  }
+  /**
+   * Expand the next token only once (if possible), and return the resulting
+   * top token on the stack (without removing anything from the stack).
+   * Similar in behavior to TeX's `\expandafter\futurelet`.
+   * Equivalent to expandOnce() followed by future().
+   */
+  ;
+
+  _proto.expandAfterFuture = function expandAfterFuture() {
+    this.expandOnce();
+    return this.future();
+  }
+  /**
+   * Recursively expand first token, then return first non-expandable token.
+   */
+  ;
+
+  _proto.expandNextToken = function expandNextToken() {
+    for (;;) {
+      var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
+
+      if (expanded instanceof Token_Token) {
+        // \relax stops the expansion, but shouldn't get returned (a
+        // null return value couldn't get implemented as a function).
+        if (expanded.text === "\\relax") {
+          this.stack.pop();
+        } else {
+          return this.stack.pop(); // === expanded
+        }
+      }
+    } // Flow unable to figure out that this pathway is impossible.
+    // https://github.com/facebook/flow/issues/4808
+
+
+    throw new Error(); // eslint-disable-line no-unreachable
+  }
+  /**
+   * Fully expand the given macro name and return the resulting list of
+   * tokens, or return `undefined` if no such macro is defined.
+   */
+  ;
+
+  _proto.expandMacro = function expandMacro(name) {
+    if (!this.macros.get(name)) {
+      return undefined;
+    }
+
+    var output = [];
+    var oldStackLength = this.stack.length;
+    this.pushToken(new Token_Token(name));
+
+    while (this.stack.length > oldStackLength) {
+      var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
+
+      if (expanded instanceof Token_Token) {
+        output.push(this.stack.pop());
+      }
+    }
+
+    return output;
+  }
+  /**
+   * Fully expand the given macro name and return the result as a string,
+   * or return `undefined` if no such macro is defined.
+   */
+  ;
+
+  _proto.expandMacroAsText = function expandMacroAsText(name) {
+    var tokens = this.expandMacro(name);
+
+    if (tokens) {
+      return tokens.map(function (token) {
+        return token.text;
+      }).join("");
+    } else {
+      return tokens;
+    }
+  }
+  /**
+   * Returns the expanded macro as a reversed array of tokens and a macro
+   * argument count.  Or returns `null` if no such macro.
+   */
+  ;
+
+  _proto._getExpansion = function _getExpansion(name) {
+    var definition = this.macros.get(name);
+
+    if (definition == null) {
+      // mainly checking for undefined here
+      return definition;
+    }
+
+    var expansion = typeof definition === "function" ? definition(this) : definition;
+
+    if (typeof expansion === "string") {
+      var numArgs = 0;
+
+      if (expansion.indexOf("#") !== -1) {
+        var stripped = expansion.replace(/##/g, "");
+
+        while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
+          ++numArgs;
+        }
+      }
+
+      var bodyLexer = new Lexer_Lexer(expansion, this.settings);
+      var tokens = [];
+      var tok = bodyLexer.lex();
+
+      while (tok.text !== "EOF") {
+        tokens.push(tok);
+        tok = bodyLexer.lex();
+      }
+
+      tokens.reverse(); // to fit in with stack using push and pop
+
+      var expanded = {
+        tokens: tokens,
+        numArgs: numArgs
+      };
+      return expanded;
+    }
+
+    return expansion;
+  }
+  /**
+   * Determine whether a command is currently "defined" (has some
+   * functionality), meaning that it's a macro (in the current group),
+   * a function, a symbol, or one of the special commands listed in
+   * `implicitCommands`.
+   */
+  ;
+
+  _proto.isDefined = function isDefined(name) {
+    return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);
+  };
+
+  return MacroExpander;
+}();
+
+
+// CONCATENATED MODULE: ./src/unicodeAccents.js
+// Mapping of Unicode accent characters to their LaTeX equivalent in text and
+// math mode (when they exist).
+/* harmony default export */ var unicodeAccents = ({
+  "\u0301": {
+    text: "\\'",
+    math: '\\acute'
+  },
+  "\u0300": {
+    text: '\\`',
+    math: '\\grave'
+  },
+  "\u0308": {
+    text: '\\"',
+    math: '\\ddot'
+  },
+  "\u0303": {
+    text: '\\~',
+    math: '\\tilde'
+  },
+  "\u0304": {
+    text: '\\=',
+    math: '\\bar'
+  },
+  "\u0306": {
+    text: "\\u",
+    math: '\\breve'
+  },
+  "\u030C": {
+    text: '\\v',
+    math: '\\check'
+  },
+  "\u0302": {
+    text: '\\^',
+    math: '\\hat'
+  },
+  "\u0307": {
+    text: '\\.',
+    math: '\\dot'
+  },
+  "\u030A": {
+    text: '\\r',
+    math: '\\mathring'
+  },
+  "\u030B": {
+    text: '\\H'
+  }
+});
+// CONCATENATED MODULE: ./src/unicodeSymbols.js
+// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
+/* harmony default export */ var unicodeSymbols = ({
+  "\xE1": "a\u0301",
+  // á = \'{a}
+  "\xE0": "a\u0300",
+  // à = \`{a}
+  "\xE4": "a\u0308",
+  // ä = \"{a}
+  "\u01DF": "a\u0308\u0304",
+  // ǟ = \"\={a}
+  "\xE3": "a\u0303",
+  // ã = \~{a}
+  "\u0101": "a\u0304",
+  // ā = \={a}
+  "\u0103": "a\u0306",
+  // ă = \u{a}
+  "\u1EAF": "a\u0306\u0301",
+  // ắ = \u\'{a}
+  "\u1EB1": "a\u0306\u0300",
+  // ằ = \u\`{a}
+  "\u1EB5": "a\u0306\u0303",
+  // ẵ = \u\~{a}
+  "\u01CE": "a\u030C",
+  // ǎ = \v{a}
+  "\xE2": "a\u0302",
+  // â = \^{a}
+  "\u1EA5": "a\u0302\u0301",
+  // ấ = \^\'{a}
+  "\u1EA7": "a\u0302\u0300",
+  // ầ = \^\`{a}
+  "\u1EAB": "a\u0302\u0303",
+  // ẫ = \^\~{a}
+  "\u0227": "a\u0307",
+  // ȧ = \.{a}
+  "\u01E1": "a\u0307\u0304",
+  // ǡ = \.\={a}
+  "\xE5": "a\u030A",
+  // å = \r{a}
+  "\u01FB": "a\u030A\u0301",
+  // ǻ = \r\'{a}
+  "\u1E03": "b\u0307",
+  // ḃ = \.{b}
+  "\u0107": "c\u0301",
+  // ć = \'{c}
+  "\u010D": "c\u030C",
+  // č = \v{c}
+  "\u0109": "c\u0302",
+  // ĉ = \^{c}
+  "\u010B": "c\u0307",
+  // ċ = \.{c}
+  "\u010F": "d\u030C",
+  // ď = \v{d}
+  "\u1E0B": "d\u0307",
+  // ḋ = \.{d}
+  "\xE9": "e\u0301",
+  // é = \'{e}
+  "\xE8": "e\u0300",
+  // è = \`{e}
+  "\xEB": "e\u0308",
+  // ë = \"{e}
+  "\u1EBD": "e\u0303",
+  // ẽ = \~{e}
+  "\u0113": "e\u0304",
+  // ē = \={e}
+  "\u1E17": "e\u0304\u0301",
+  // ḗ = \=\'{e}
+  "\u1E15": "e\u0304\u0300",
+  // ḕ = \=\`{e}
+  "\u0115": "e\u0306",
+  // ĕ = \u{e}
+  "\u011B": "e\u030C",
+  // ě = \v{e}
+  "\xEA": "e\u0302",
+  // ê = \^{e}
+  "\u1EBF": "e\u0302\u0301",
+  // ế = \^\'{e}
+  "\u1EC1": "e\u0302\u0300",
+  // ề = \^\`{e}
+  "\u1EC5": "e\u0302\u0303",
+  // ễ = \^\~{e}
+  "\u0117": "e\u0307",
+  // ė = \.{e}
+  "\u1E1F": "f\u0307",
+  // ḟ = \.{f}
+  "\u01F5": "g\u0301",
+  // ǵ = \'{g}
+  "\u1E21": "g\u0304",
+  // ḡ = \={g}
+  "\u011F": "g\u0306",
+  // ğ = \u{g}
+  "\u01E7": "g\u030C",
+  // ǧ = \v{g}
+  "\u011D": "g\u0302",
+  // ĝ = \^{g}
+  "\u0121": "g\u0307",
+  // ġ = \.{g}
+  "\u1E27": "h\u0308",
+  // ḧ = \"{h}
+  "\u021F": "h\u030C",
+  // ȟ = \v{h}
+  "\u0125": "h\u0302",
+  // ĥ = \^{h}
+  "\u1E23": "h\u0307",
+  // ḣ = \.{h}
+  "\xED": "i\u0301",
+  // í = \'{i}
+  "\xEC": "i\u0300",
+  // ì = \`{i}
+  "\xEF": "i\u0308",
+  // ï = \"{i}
+  "\u1E2F": "i\u0308\u0301",
+  // ḯ = \"\'{i}
+  "\u0129": "i\u0303",
+  // ĩ = \~{i}
+  "\u012B": "i\u0304",
+  // ī = \={i}
+  "\u012D": "i\u0306",
+  // ĭ = \u{i}
+  "\u01D0": "i\u030C",
+  // ǐ = \v{i}
+  "\xEE": "i\u0302",
+  // î = \^{i}
+  "\u01F0": "j\u030C",
+  // ǰ = \v{j}
+  "\u0135": "j\u0302",
+  // ĵ = \^{j}
+  "\u1E31": "k\u0301",
+  // ḱ = \'{k}
+  "\u01E9": "k\u030C",
+  // ǩ = \v{k}
+  "\u013A": "l\u0301",
+  // ĺ = \'{l}
+  "\u013E": "l\u030C",
+  // ľ = \v{l}
+  "\u1E3F": "m\u0301",
+  // ḿ = \'{m}
+  "\u1E41": "m\u0307",
+  // ṁ = \.{m}
+  "\u0144": "n\u0301",
+  // ń = \'{n}
+  "\u01F9": "n\u0300",
+  // ǹ = \`{n}
+  "\xF1": "n\u0303",
+  // ñ = \~{n}
+  "\u0148": "n\u030C",
+  // ň = \v{n}
+  "\u1E45": "n\u0307",
+  // ṅ = \.{n}
+  "\xF3": "o\u0301",
+  // ó = \'{o}
+  "\xF2": "o\u0300",
+  // ò = \`{o}
+  "\xF6": "o\u0308",
+  // ö = \"{o}
+  "\u022B": "o\u0308\u0304",
+  // ȫ = \"\={o}
+  "\xF5": "o\u0303",
+  // õ = \~{o}
+  "\u1E4D": "o\u0303\u0301",
+  // ṍ = \~\'{o}
+  "\u1E4F": "o\u0303\u0308",
+  // ṏ = \~\"{o}
+  "\u022D": "o\u0303\u0304",
+  // ȭ = \~\={o}
+  "\u014D": "o\u0304",
+  // ō = \={o}
+  "\u1E53": "o\u0304\u0301",
+  // ṓ = \=\'{o}
+  "\u1E51": "o\u0304\u0300",
+  // ṑ = \=\`{o}
+  "\u014F": "o\u0306",
+  // ŏ = \u{o}
+  "\u01D2": "o\u030C",
+  // ǒ = \v{o}
+  "\xF4": "o\u0302",
+  // ô = \^{o}
+  "\u1ED1": "o\u0302\u0301",
+  // ố = \^\'{o}
+  "\u1ED3": "o\u0302\u0300",
+  // ồ = \^\`{o}
+  "\u1ED7": "o\u0302\u0303",
+  // ỗ = \^\~{o}
+  "\u022F": "o\u0307",
+  // ȯ = \.{o}
+  "\u0231": "o\u0307\u0304",
+  // ȱ = \.\={o}
+  "\u0151": "o\u030B",
+  // ő = \H{o}
+  "\u1E55": "p\u0301",
+  // ṕ = \'{p}
+  "\u1E57": "p\u0307",
+  // ṗ = \.{p}
+  "\u0155": "r\u0301",
+  // ŕ = \'{r}
+  "\u0159": "r\u030C",
+  // ř = \v{r}
+  "\u1E59": "r\u0307",
+  // ṙ = \.{r}
+  "\u015B": "s\u0301",
+  // ś = \'{s}
+  "\u1E65": "s\u0301\u0307",
+  // ṥ = \'\.{s}
+  "\u0161": "s\u030C",
+  // š = \v{s}
+  "\u1E67": "s\u030C\u0307",
+  // ṧ = \v\.{s}
+  "\u015D": "s\u0302",
+  // ŝ = \^{s}
+  "\u1E61": "s\u0307",
+  // ṡ = \.{s}
+  "\u1E97": "t\u0308",
+  // ẗ = \"{t}
+  "\u0165": "t\u030C",
+  // ť = \v{t}
+  "\u1E6B": "t\u0307",
+  // ṫ = \.{t}
+  "\xFA": "u\u0301",
+  // ú = \'{u}
+  "\xF9": "u\u0300",
+  // ù = \`{u}
+  "\xFC": "u\u0308",
+  // ü = \"{u}
+  "\u01D8": "u\u0308\u0301",
+  // ǘ = \"\'{u}
+  "\u01DC": "u\u0308\u0300",
+  // ǜ = \"\`{u}
+  "\u01D6": "u\u0308\u0304",
+  // ǖ = \"\={u}
+  "\u01DA": "u\u0308\u030C",
+  // ǚ = \"\v{u}
+  "\u0169": "u\u0303",
+  // ũ = \~{u}
+  "\u1E79": "u\u0303\u0301",
+  // ṹ = \~\'{u}
+  "\u016B": "u\u0304",
+  // ū = \={u}
+  "\u1E7B": "u\u0304\u0308",
+  // ṻ = \=\"{u}
+  "\u016D": "u\u0306",
+  // ŭ = \u{u}
+  "\u01D4": "u\u030C",
+  // ǔ = \v{u}
+  "\xFB": "u\u0302",
+  // û = \^{u}
+  "\u016F": "u\u030A",
+  // ů = \r{u}
+  "\u0171": "u\u030B",
+  // ű = \H{u}
+  "\u1E7D": "v\u0303",
+  // ṽ = \~{v}
+  "\u1E83": "w\u0301",
+  // ẃ = \'{w}
+  "\u1E81": "w\u0300",
+  // ẁ = \`{w}
+  "\u1E85": "w\u0308",
+  // ẅ = \"{w}
+  "\u0175": "w\u0302",
+  // ŵ = \^{w}
+  "\u1E87": "w\u0307",
+  // ẇ = \.{w}
+  "\u1E98": "w\u030A",
+  // ẘ = \r{w}
+  "\u1E8D": "x\u0308",
+  // ẍ = \"{x}
+  "\u1E8B": "x\u0307",
+  // ẋ = \.{x}
+  "\xFD": "y\u0301",
+  // ý = \'{y}
+  "\u1EF3": "y\u0300",
+  // ỳ = \`{y}
+  "\xFF": "y\u0308",
+  // ÿ = \"{y}
+  "\u1EF9": "y\u0303",
+  // ỹ = \~{y}
+  "\u0233": "y\u0304",
+  // ȳ = \={y}
+  "\u0177": "y\u0302",
+  // ŷ = \^{y}
+  "\u1E8F": "y\u0307",
+  // ẏ = \.{y}
+  "\u1E99": "y\u030A",
+  // ẙ = \r{y}
+  "\u017A": "z\u0301",
+  // ź = \'{z}
+  "\u017E": "z\u030C",
+  // ž = \v{z}
+  "\u1E91": "z\u0302",
+  // ẑ = \^{z}
+  "\u017C": "z\u0307",
+  // ż = \.{z}
+  "\xC1": "A\u0301",
+  // Á = \'{A}
+  "\xC0": "A\u0300",
+  // À = \`{A}
+  "\xC4": "A\u0308",
+  // Ä = \"{A}
+  "\u01DE": "A\u0308\u0304",
+  // Ǟ = \"\={A}
+  "\xC3": "A\u0303",
+  // Ã = \~{A}
+  "\u0100": "A\u0304",
+  // Ā = \={A}
+  "\u0102": "A\u0306",
+  // Ă = \u{A}
+  "\u1EAE": "A\u0306\u0301",
+  // Ắ = \u\'{A}
+  "\u1EB0": "A\u0306\u0300",
+  // Ằ = \u\`{A}
+  "\u1EB4": "A\u0306\u0303",
+  // Ẵ = \u\~{A}
+  "\u01CD": "A\u030C",
+  // Ǎ = \v{A}
+  "\xC2": "A\u0302",
+  // Â = \^{A}
+  "\u1EA4": "A\u0302\u0301",
+  // Ấ = \^\'{A}
+  "\u1EA6": "A\u0302\u0300",
+  // Ầ = \^\`{A}
+  "\u1EAA": "A\u0302\u0303",
+  // Ẫ = \^\~{A}
+  "\u0226": "A\u0307",
+  // Ȧ = \.{A}
+  "\u01E0": "A\u0307\u0304",
+  // Ǡ = \.\={A}
+  "\xC5": "A\u030A",
+  // Å = \r{A}
+  "\u01FA": "A\u030A\u0301",
+  // Ǻ = \r\'{A}
+  "\u1E02": "B\u0307",
+  // Ḃ = \.{B}
+  "\u0106": "C\u0301",
+  // Ć = \'{C}
+  "\u010C": "C\u030C",
+  // Č = \v{C}
+  "\u0108": "C\u0302",
+  // Ĉ = \^{C}
+  "\u010A": "C\u0307",
+  // Ċ = \.{C}
+  "\u010E": "D\u030C",
+  // Ď = \v{D}
+  "\u1E0A": "D\u0307",
+  // Ḋ = \.{D}
+  "\xC9": "E\u0301",
+  // É = \'{E}
+  "\xC8": "E\u0300",
+  // È = \`{E}
+  "\xCB": "E\u0308",
+  // Ë = \"{E}
+  "\u1EBC": "E\u0303",
+  // Ẽ = \~{E}
+  "\u0112": "E\u0304",
+  // Ē = \={E}
+  "\u1E16": "E\u0304\u0301",
+  // Ḗ = \=\'{E}
+  "\u1E14": "E\u0304\u0300",
+  // Ḕ = \=\`{E}
+  "\u0114": "E\u0306",
+  // Ĕ = \u{E}
+  "\u011A": "E\u030C",
+  // Ě = \v{E}
+  "\xCA": "E\u0302",
+  // Ê = \^{E}
+  "\u1EBE": "E\u0302\u0301",
+  // Ế = \^\'{E}
+  "\u1EC0": "E\u0302\u0300",
+  // Ề = \^\`{E}
+  "\u1EC4": "E\u0302\u0303",
+  // Ễ = \^\~{E}
+  "\u0116": "E\u0307",
+  // Ė = \.{E}
+  "\u1E1E": "F\u0307",
+  // Ḟ = \.{F}
+  "\u01F4": "G\u0301",
+  // Ǵ = \'{G}
+  "\u1E20": "G\u0304",
+  // Ḡ = \={G}
+  "\u011E": "G\u0306",
+  // Ğ = \u{G}
+  "\u01E6": "G\u030C",
+  // Ǧ = \v{G}
+  "\u011C": "G\u0302",
+  // Ĝ = \^{G}
+  "\u0120": "G\u0307",
+  // Ġ = \.{G}
+  "\u1E26": "H\u0308",
+  // Ḧ = \"{H}
+  "\u021E": "H\u030C",
+  // Ȟ = \v{H}
+  "\u0124": "H\u0302",
+  // Ĥ = \^{H}
+  "\u1E22": "H\u0307",
+  // Ḣ = \.{H}
+  "\xCD": "I\u0301",
+  // Í = \'{I}
+  "\xCC": "I\u0300",
+  // Ì = \`{I}
+  "\xCF": "I\u0308",
+  // Ï = \"{I}
+  "\u1E2E": "I\u0308\u0301",
+  // Ḯ = \"\'{I}
+  "\u0128": "I\u0303",
+  // Ĩ = \~{I}
+  "\u012A": "I\u0304",
+  // Ī = \={I}
+  "\u012C": "I\u0306",
+  // Ĭ = \u{I}
+  "\u01CF": "I\u030C",
+  // Ǐ = \v{I}
+  "\xCE": "I\u0302",
+  // Î = \^{I}
+  "\u0130": "I\u0307",
+  // İ = \.{I}
+  "\u0134": "J\u0302",
+  // Ĵ = \^{J}
+  "\u1E30": "K\u0301",
+  // Ḱ = \'{K}
+  "\u01E8": "K\u030C",
+  // Ǩ = \v{K}
+  "\u0139": "L\u0301",
+  // Ĺ = \'{L}
+  "\u013D": "L\u030C",
+  // Ľ = \v{L}
+  "\u1E3E": "M\u0301",
+  // Ḿ = \'{M}
+  "\u1E40": "M\u0307",
+  // Ṁ = \.{M}
+  "\u0143": "N\u0301",
+  // Ń = \'{N}
+  "\u01F8": "N\u0300",
+  // Ǹ = \`{N}
+  "\xD1": "N\u0303",
+  // Ñ = \~{N}
+  "\u0147": "N\u030C",
+  // Ň = \v{N}
+  "\u1E44": "N\u0307",
+  // Ṅ = \.{N}
+  "\xD3": "O\u0301",
+  // Ó = \'{O}
+  "\xD2": "O\u0300",
+  // Ò = \`{O}
+  "\xD6": "O\u0308",
+  // Ö = \"{O}
+  "\u022A": "O\u0308\u0304",
+  // Ȫ = \"\={O}
+  "\xD5": "O\u0303",
+  // Õ = \~{O}
+  "\u1E4C": "O\u0303\u0301",
+  // Ṍ = \~\'{O}
+  "\u1E4E": "O\u0303\u0308",
+  // Ṏ = \~\"{O}
+  "\u022C": "O\u0303\u0304",
+  // Ȭ = \~\={O}
+  "\u014C": "O\u0304",
+  // Ō = \={O}
+  "\u1E52": "O\u0304\u0301",
+  // Ṓ = \=\'{O}
+  "\u1E50": "O\u0304\u0300",
+  // Ṑ = \=\`{O}
+  "\u014E": "O\u0306",
+  // Ŏ = \u{O}
+  "\u01D1": "O\u030C",
+  // Ǒ = \v{O}
+  "\xD4": "O\u0302",
+  // Ô = \^{O}
+  "\u1ED0": "O\u0302\u0301",
+  // Ố = \^\'{O}
+  "\u1ED2": "O\u0302\u0300",
+  // Ồ = \^\`{O}
+  "\u1ED6": "O\u0302\u0303",
+  // Ỗ = \^\~{O}
+  "\u022E": "O\u0307",
+  // Ȯ = \.{O}
+  "\u0230": "O\u0307\u0304",
+  // Ȱ = \.\={O}
+  "\u0150": "O\u030B",
+  // Ő = \H{O}
+  "\u1E54": "P\u0301",
+  // Ṕ = \'{P}
+  "\u1E56": "P\u0307",
+  // Ṗ = \.{P}
+  "\u0154": "R\u0301",
+  // Ŕ = \'{R}
+  "\u0158": "R\u030C",
+  // Ř = \v{R}
+  "\u1E58": "R\u0307",
+  // Ṙ = \.{R}
+  "\u015A": "S\u0301",
+  // Ś = \'{S}
+  "\u1E64": "S\u0301\u0307",
+  // Ṥ = \'\.{S}
+  "\u0160": "S\u030C",
+  // Š = \v{S}
+  "\u1E66": "S\u030C\u0307",
+  // Ṧ = \v\.{S}
+  "\u015C": "S\u0302",
+  // Ŝ = \^{S}
+  "\u1E60": "S\u0307",
+  // Ṡ = \.{S}
+  "\u0164": "T\u030C",
+  // Ť = \v{T}
+  "\u1E6A": "T\u0307",
+  // Ṫ = \.{T}
+  "\xDA": "U\u0301",
+  // Ú = \'{U}
+  "\xD9": "U\u0300",
+  // Ù = \`{U}
+  "\xDC": "U\u0308",
+  // Ü = \"{U}
+  "\u01D7": "U\u0308\u0301",
+  // Ǘ = \"\'{U}
+  "\u01DB": "U\u0308\u0300",
+  // Ǜ = \"\`{U}
+  "\u01D5": "U\u0308\u0304",
+  // Ǖ = \"\={U}
+  "\u01D9": "U\u0308\u030C",
+  // Ǚ = \"\v{U}
+  "\u0168": "U\u0303",
+  // Ũ = \~{U}
+  "\u1E78": "U\u0303\u0301",
+  // Ṹ = \~\'{U}
+  "\u016A": "U\u0304",
+  // Ū = \={U}
+  "\u1E7A": "U\u0304\u0308",
+  // Ṻ = \=\"{U}
+  "\u016C": "U\u0306",
+  // Ŭ = \u{U}
+  "\u01D3": "U\u030C",
+  // Ǔ = \v{U}
+  "\xDB": "U\u0302",
+  // Û = \^{U}
+  "\u016E": "U\u030A",
+  // Ů = \r{U}
+  "\u0170": "U\u030B",
+  // Ű = \H{U}
+  "\u1E7C": "V\u0303",
+  // Ṽ = \~{V}
+  "\u1E82": "W\u0301",
+  // Ẃ = \'{W}
+  "\u1E80": "W\u0300",
+  // Ẁ = \`{W}
+  "\u1E84": "W\u0308",
+  // Ẅ = \"{W}
+  "\u0174": "W\u0302",
+  // Ŵ = \^{W}
+  "\u1E86": "W\u0307",
+  // Ẇ = \.{W}
+  "\u1E8C": "X\u0308",
+  // Ẍ = \"{X}
+  "\u1E8A": "X\u0307",
+  // Ẋ = \.{X}
+  "\xDD": "Y\u0301",
+  // Ý = \'{Y}
+  "\u1EF2": "Y\u0300",
+  // Ỳ = \`{Y}
+  "\u0178": "Y\u0308",
+  // Ÿ = \"{Y}
+  "\u1EF8": "Y\u0303",
+  // Ỹ = \~{Y}
+  "\u0232": "Y\u0304",
+  // Ȳ = \={Y}
+  "\u0176": "Y\u0302",
+  // Ŷ = \^{Y}
+  "\u1E8E": "Y\u0307",
+  // Ẏ = \.{Y}
+  "\u0179": "Z\u0301",
+  // Ź = \'{Z}
+  "\u017D": "Z\u030C",
+  // Ž = \v{Z}
+  "\u1E90": "Z\u0302",
+  // Ẑ = \^{Z}
+  "\u017B": "Z\u0307",
+  // Ż = \.{Z}
+  "\u03AC": "\u03B1\u0301",
+  // ά = \'{α}
+  "\u1F70": "\u03B1\u0300",
+  // ὰ = \`{α}
+  "\u1FB1": "\u03B1\u0304",
+  // ᾱ = \={α}
+  "\u1FB0": "\u03B1\u0306",
+  // ᾰ = \u{α}
+  "\u03AD": "\u03B5\u0301",
+  // έ = \'{ε}
+  "\u1F72": "\u03B5\u0300",
+  // ὲ = \`{ε}
+  "\u03AE": "\u03B7\u0301",
+  // ή = \'{η}
+  "\u1F74": "\u03B7\u0300",
+  // ὴ = \`{η}
+  "\u03AF": "\u03B9\u0301",
+  // ί = \'{ι}
+  "\u1F76": "\u03B9\u0300",
+  // ὶ = \`{ι}
+  "\u03CA": "\u03B9\u0308",
+  // ϊ = \"{ι}
+  "\u0390": "\u03B9\u0308\u0301",
+  // ΐ = \"\'{ι}
+  "\u1FD2": "\u03B9\u0308\u0300",
+  // ῒ = \"\`{ι}
+  "\u1FD1": "\u03B9\u0304",
+  // ῑ = \={ι}
+  "\u1FD0": "\u03B9\u0306",
+  // ῐ = \u{ι}
+  "\u03CC": "\u03BF\u0301",
+  // ό = \'{ο}
+  "\u1F78": "\u03BF\u0300",
+  // ὸ = \`{ο}
+  "\u03CD": "\u03C5\u0301",
+  // ύ = \'{υ}
+  "\u1F7A": "\u03C5\u0300",
+  // ὺ = \`{υ}
+  "\u03CB": "\u03C5\u0308",
+  // ϋ = \"{υ}
+  "\u03B0": "\u03C5\u0308\u0301",
+  // ΰ = \"\'{υ}
+  "\u1FE2": "\u03C5\u0308\u0300",
+  // ῢ = \"\`{υ}
+  "\u1FE1": "\u03C5\u0304",
+  // ῡ = \={υ}
+  "\u1FE0": "\u03C5\u0306",
+  // ῠ = \u{υ}
+  "\u03CE": "\u03C9\u0301",
+  // ώ = \'{ω}
+  "\u1F7C": "\u03C9\u0300",
+  // ὼ = \`{ω}
+  "\u038E": "\u03A5\u0301",
+  // Ύ = \'{Υ}
+  "\u1FEA": "\u03A5\u0300",
+  // Ὺ = \`{Υ}
+  "\u03AB": "\u03A5\u0308",
+  // Ϋ = \"{Υ}
+  "\u1FE9": "\u03A5\u0304",
+  // Ῡ = \={Υ}
+  "\u1FE8": "\u03A5\u0306",
+  // Ῠ = \u{Υ}
+  "\u038F": "\u03A9\u0301",
+  // Ώ = \'{Ω}
+  "\u1FFA": "\u03A9\u0300" // Ὼ = \`{Ω}
+
+});
+// CONCATENATED MODULE: ./src/Parser.js
+/* eslint no-constant-condition:0 */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * This file contains the parser used to parse out a TeX expression from the
+ * input. Since TeX isn't context-free, standard parsers don't work particularly
+ * well.
+ *
+ * The strategy of this parser is as such:
+ *
+ * The main functions (the `.parse...` ones) take a position in the current
+ * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
+ * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When
+ * individual tokens are needed at a position, the lexer is called to pull out a
+ * token, which is then used.
+ *
+ * The parser has a property called "mode" indicating the mode that
+ * the parser is currently in. Currently it has to be one of "math" or
+ * "text", which denotes whether the current environment is a math-y
+ * one or a text-y one (e.g. inside \text). Currently, this serves to
+ * limit the functions which can be used in text mode.
+ *
+ * The main functions then return an object which contains the useful data that
+ * was parsed at its given point, and a new position at the end of the parsed
+ * data. The main functions can call each other and continue the parsing by
+ * using the returned position as a new starting point.
+ *
+ * There are also extra `.handle...` functions, which pull out some reused
+ * functionality into self-contained functions.
+ *
+ * The functions return ParseNodes.
+ */
+var Parser_Parser =
+/*#__PURE__*/
+function () {
+  function Parser(input, settings) {
+    this.mode = void 0;
+    this.gullet = void 0;
+    this.settings = void 0;
+    this.leftrightDepth = void 0;
+    this.nextToken = void 0;
+    // Start in math mode
+    this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a
+    // new lexer (mouth) for this parser (stomach, in the language of TeX)
+
+    this.gullet = new MacroExpander_MacroExpander(input, settings, this.mode); // Store the settings for use in parsing
+
+    this.settings = settings; // Count leftright depth (for \middle errors)
+
+    this.leftrightDepth = 0;
+  }
+  /**
+   * Checks a result to make sure it has the right type, and throws an
+   * appropriate error otherwise.
+   */
+
+
+  var _proto = Parser.prototype;
+
+  _proto.expect = function expect(text, consume) {
+    if (consume === void 0) {
+      consume = true;
+    }
+
+    if (this.fetch().text !== text) {
+      throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch());
+    }
+
+    if (consume) {
+      this.consume();
+    }
+  }
+  /**
+   * Discards the current lookahead token, considering it consumed.
+   */
+  ;
+
+  _proto.consume = function consume() {
+    this.nextToken = null;
+  }
+  /**
+   * Return the current lookahead token, or if there isn't one (at the
+   * beginning, or if the previous lookahead token was consume()d),
+   * fetch the next token as the new lookahead token and return it.
+   */
+  ;
+
+  _proto.fetch = function fetch() {
+    if (this.nextToken == null) {
+      this.nextToken = this.gullet.expandNextToken();
+    }
+
+    return this.nextToken;
+  }
+  /**
+   * Switches between "text" and "math" modes.
+   */
+  ;
+
+  _proto.switchMode = function switchMode(newMode) {
+    this.mode = newMode;
+    this.gullet.switchMode(newMode);
+  }
+  /**
+   * Main parsing function, which parses an entire input.
+   */
+  ;
+
+  _proto.parse = function parse() {
+    // Create a group namespace for the math expression.
+    // (LaTeX creates a new group for every $...$, $$...$$, \[...\].)
+    this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested.
+    // We do this within the group for the math expression, so it doesn't
+    // pollute settings.macros.
+
+    if (this.settings.colorIsTextColor) {
+      this.gullet.macros.set("\\color", "\\textcolor");
+    } // Try to parse the input
+
+
+    var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end
+
+    this.expect("EOF"); // End the group namespace for the expression
+
+    this.gullet.endGroup();
+    return parse;
+  };
+
+  _proto.parseExpression = function parseExpression(breakOnInfix, breakOnTokenText) {
+    var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either
+    // we reached the end, a }, or a \right)
+
+    while (true) {
+      // Ignore spaces in math mode
+      if (this.mode === "math") {
+        this.consumeSpaces();
+      }
+
+      var lex = this.fetch();
+
+      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
+        break;
+      }
+
+      if (breakOnTokenText && lex.text === breakOnTokenText) {
+        break;
+      }
+
+      if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) {
+        break;
+      }
+
+      var atom = this.parseAtom(breakOnTokenText);
+
+      if (!atom) {
+        break;
+      }
+
+      body.push(atom);
+    }
+
+    if (this.mode === "text") {
+      this.formLigatures(body);
+    }
+
+    return this.handleInfixNodes(body);
+  }
+  /**
+   * Rewrites infix operators such as \over with corresponding commands such
+   * as \frac.
+   *
+   * There can only be one infix operator per group.  If there's more than one
+   * then the expression is ambiguous.  This can be resolved by adding {}.
+   */
+  ;
+
+  _proto.handleInfixNodes = function handleInfixNodes(body) {
+    var overIndex = -1;
+    var funcName;
+
+    for (var i = 0; i < body.length; i++) {
+      var node = checkNodeType(body[i], "infix");
+
+      if (node) {
+        if (overIndex !== -1) {
+          throw new src_ParseError("only one infix operator per group", node.token);
+        }
+
+        overIndex = i;
+        funcName = node.replaceWith;
+      }
+    }
+
+    if (overIndex !== -1 && funcName) {
+      var numerNode;
+      var denomNode;
+      var numerBody = body.slice(0, overIndex);
+      var denomBody = body.slice(overIndex + 1);
+
+      if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
+        numerNode = numerBody[0];
+      } else {
+        numerNode = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: numerBody
+        };
+      }
+
+      if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
+        denomNode = denomBody[0];
+      } else {
+        denomNode = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: denomBody
+        };
+      }
+
+      var _node;
+
+      if (funcName === "\\\\abovefrac") {
+        _node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
+      } else {
+        _node = this.callFunction(funcName, [numerNode, denomNode], []);
+      }
+
+      return [_node];
+    } else {
+      return body;
+    }
+  } // The greediness of a superscript or subscript
+  ;
+
+  /**
+   * Handle a subscript or superscript with nice errors.
+   */
+  _proto.handleSupSubscript = function handleSupSubscript(name) {
+    var symbolToken = this.fetch();
+    var symbol = symbolToken.text;
+    this.consume();
+    var group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument
+
+    if (!group) {
+      throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken);
+    }
+
+    return group;
+  }
+  /**
+   * Converts the textual input of an unsupported command into a text node
+   * contained within a color node whose color is determined by errorColor
+   */
+  ;
+
+  _proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) {
+    var textordArray = [];
+
+    for (var i = 0; i < text.length; i++) {
+      textordArray.push({
+        type: "textord",
+        mode: "text",
+        text: text[i]
+      });
+    }
+
+    var textNode = {
+      type: "text",
+      mode: this.mode,
+      body: textordArray
+    };
+    var colorNode = {
+      type: "color",
+      mode: this.mode,
+      color: this.settings.errorColor,
+      body: [textNode]
+    };
+    return colorNode;
+  }
+  /**
+   * Parses a group with optional super/subscripts.
+   */
+  ;
+
+  _proto.parseAtom = function parseAtom(breakOnTokenText) {
+    // The body of an atom is an implicit group, so that things like
+    // \left(x\right)^2 work correctly.
+    var base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts
+
+    if (this.mode === "text") {
+      return base;
+    } // Note that base may be empty (i.e. null) at this point.
+
+
+    var superscript;
+    var subscript;
+
+    while (true) {
+      // Guaranteed in math mode, so eat any spaces first.
+      this.consumeSpaces(); // Lex the first token
+
+      var lex = this.fetch();
+
+      if (lex.text === "\\limits" || lex.text === "\\nolimits") {
+        // We got a limit control
+        var opNode = checkNodeType(base, "op");
+
+        if (opNode) {
+          var limits = lex.text === "\\limits";
+          opNode.limits = limits;
+          opNode.alwaysHandleSupSub = true;
+        } else {
+          opNode = checkNodeType(base, "operatorname");
+
+          if (opNode && opNode.alwaysHandleSupSub) {
+            var _limits = lex.text === "\\limits";
+
+            opNode.limits = _limits;
+          } else {
+            throw new src_ParseError("Limit controls must follow a math operator", lex);
+          }
+        }
+
+        this.consume();
+      } else if (lex.text === "^") {
+        // We got a superscript start
+        if (superscript) {
+          throw new src_ParseError("Double superscript", lex);
+        }
+
+        superscript = this.handleSupSubscript("superscript");
+      } else if (lex.text === "_") {
+        // We got a subscript start
+        if (subscript) {
+          throw new src_ParseError("Double subscript", lex);
+        }
+
+        subscript = this.handleSupSubscript("subscript");
+      } else if (lex.text === "'") {
+        // We got a prime
+        if (superscript) {
+          throw new src_ParseError("Double superscript", lex);
+        }
+
+        var prime = {
+          type: "textord",
+          mode: this.mode,
+          text: "\\prime"
+        }; // Many primes can be grouped together, so we handle this here
+
+        var primes = [prime];
+        this.consume(); // Keep lexing tokens until we get something that's not a prime
+
+        while (this.fetch().text === "'") {
+          // For each one, add another prime to the list
+          primes.push(prime);
+          this.consume();
+        } // If there's a superscript following the primes, combine that
+        // superscript in with the primes.
+
+
+        if (this.fetch().text === "^") {
+          primes.push(this.handleSupSubscript("superscript"));
+        } // Put everything into an ordgroup as the superscript
+
+
+        superscript = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: primes
+        };
+      } else {
+        // If it wasn't ^, _, or ', stop parsing super/subscripts
+        break;
+      }
+    } // Base must be set if superscript or subscript are set per logic above,
+    // but need to check here for type check to pass.
+
+
+    if (superscript || subscript) {
+      // If we got either a superscript or subscript, create a supsub
+      return {
+        type: "supsub",
+        mode: this.mode,
+        base: base,
+        sup: superscript,
+        sub: subscript
+      };
+    } else {
+      // Otherwise return the original body
+      return base;
+    }
+  }
+  /**
+   * Parses an entire function, including its base and all of its arguments.
+   */
+  ;
+
+  _proto.parseFunction = function parseFunction(breakOnTokenText, name, // For error reporting.
+  greediness) {
+    var token = this.fetch();
+    var func = token.text;
+    var funcData = src_functions[func];
+
+    if (!funcData) {
+      return null;
+    }
+
+    this.consume(); // consume command token
+
+    if (greediness != null && funcData.greediness <= greediness) {
+      throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token);
+    } else if (this.mode === "text" && !funcData.allowedInText) {
+      throw new src_ParseError("Can't use function '" + func + "' in text mode", token);
+    } else if (this.mode === "math" && funcData.allowedInMath === false) {
+      throw new src_ParseError("Can't use function '" + func + "' in math mode", token);
+    }
+
+    var _this$parseArguments = this.parseArguments(func, funcData),
+        args = _this$parseArguments.args,
+        optArgs = _this$parseArguments.optArgs;
+
+    return this.callFunction(func, args, optArgs, token, breakOnTokenText);
+  }
+  /**
+   * Call a function handler with a suitable context and arguments.
+   */
+  ;
+
+  _proto.callFunction = function callFunction(name, args, optArgs, token, breakOnTokenText) {
+    var context = {
+      funcName: name,
+      parser: this,
+      token: token,
+      breakOnTokenText: breakOnTokenText
+    };
+    var func = src_functions[name];
+
+    if (func && func.handler) {
+      return func.handler(context, args, optArgs);
+    } else {
+      throw new src_ParseError("No function handler for " + name);
+    }
+  }
+  /**
+   * Parses the arguments of a function or environment
+   */
+  ;
+
+  _proto.parseArguments = function parseArguments(func, // Should look like "\name" or "\begin{name}".
+  funcData) {
+    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
+
+    if (totalArgs === 0) {
+      return {
+        args: [],
+        optArgs: []
+      };
+    }
+
+    var baseGreediness = funcData.greediness;
+    var args = [];
+    var optArgs = [];
+
+    for (var i = 0; i < totalArgs; i++) {
+      var argType = funcData.argTypes && funcData.argTypes[i];
+      var isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments.  As the TeXbook says:
+      // "After you have said ‘\def\row#1#2{...}’, you are allowed to
+      //  put spaces between the arguments (e.g., ‘\row x n’), because
+      //  TeX doesn’t use single spaces as undelimited arguments."
+
+      var consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol
+      // won't know what to do with them.  This can only happen with
+      // macros, e.g. \frac\foo\foo where \foo expands to a space symbol.
+      // In LaTeX, the \foo's get treated as (blank) arguments.
+      // In KaTeX, for now, both spaces will get consumed.
+      // TODO(edemaine)
+      i === 0 && !isOptional && this.mode === "math";
+      var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional, baseGreediness, consumeSpaces);
+
+      if (!arg) {
+        if (isOptional) {
+          optArgs.push(null);
+          continue;
+        }
+
+        throw new src_ParseError("Expected group after '" + func + "'", this.fetch());
+      }
+
+      (isOptional ? optArgs : args).push(arg);
+    }
+
+    return {
+      args: args,
+      optArgs: optArgs
+    };
+  }
+  /**
+   * Parses a group when the mode is changing.
+   */
+  ;
+
+  _proto.parseGroupOfType = function parseGroupOfType(name, type, optional, greediness, consumeSpaces) {
+    switch (type) {
+      case "color":
+        if (consumeSpaces) {
+          this.consumeSpaces();
+        }
+
+        return this.parseColorGroup(optional);
+
+      case "size":
+        if (consumeSpaces) {
+          this.consumeSpaces();
+        }
+
+        return this.parseSizeGroup(optional);
+
+      case "url":
+        return this.parseUrlGroup(optional, consumeSpaces);
+
+      case "math":
+      case "text":
+        return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces);
+
+      case "hbox":
+        {
+          // hbox argument type wraps the argument in the equivalent of
+          // \hbox, which is like \text but switching to \textstyle size.
+          var group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces);
+
+          if (!group) {
+            return group;
+          }
+
+          var styledGroup = {
+            type: "styling",
+            mode: group.mode,
+            body: [group],
+            style: "text" // simulate \textstyle
+
+          };
+          return styledGroup;
+        }
+
+      case "raw":
+        {
+          if (consumeSpaces) {
+            this.consumeSpaces();
+          }
+
+          if (optional && this.fetch().text === "{") {
+            return null;
+          }
+
+          var token = this.parseStringGroup("raw", optional, true);
+
+          if (token) {
+            return {
+              type: "raw",
+              mode: "text",
+              string: token.text
+            };
+          } else {
+            throw new src_ParseError("Expected raw group", this.fetch());
+          }
+        }
+
+      case "original":
+      case null:
+      case undefined:
+        return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces);
+
+      default:
+        throw new src_ParseError("Unknown group type as " + name, this.fetch());
+    }
+  }
+  /**
+   * Discard any space tokens, fetching the next non-space token.
+   */
+  ;
+
+  _proto.consumeSpaces = function consumeSpaces() {
+    while (this.fetch().text === " ") {
+      this.consume();
+    }
+  }
+  /**
+   * Parses a group, essentially returning the string formed by the
+   * brace-enclosed tokens plus some position information.
+   */
+  ;
+
+  _proto.parseStringGroup = function parseStringGroup(modeName, // Used to describe the mode in error messages.
+  optional, raw) {
+    var groupBegin = optional ? "[" : "{";
+    var groupEnd = optional ? "]" : "}";
+    var beginToken = this.fetch();
+
+    if (beginToken.text !== groupBegin) {
+      if (optional) {
+        return null;
+      } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) {
+        this.consume();
+        return beginToken;
+      }
+    }
+
+    var outerMode = this.mode;
+    this.mode = "text";
+    this.expect(groupBegin);
+    var str = "";
+    var firstToken = this.fetch();
+    var nested = 0; // allow nested braces in raw string group
+
+    var lastToken = firstToken;
+    var nextToken;
+
+    while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) {
+      switch (nextToken.text) {
+        case "EOF":
+          throw new src_ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str));
+
+        case groupBegin:
+          nested++;
+          break;
+
+        case groupEnd:
+          nested--;
+          break;
+      }
+
+      lastToken = nextToken;
+      str += lastToken.text;
+      this.consume();
+    }
+
+    this.expect(groupEnd);
+    this.mode = outerMode;
+    return firstToken.range(lastToken, str);
+  }
+  /**
+   * Parses a regex-delimited group: the largest sequence of tokens
+   * whose concatenated strings match `regex`. Returns the string
+   * formed by the tokens plus some position information.
+   */
+  ;
+
+  _proto.parseRegexGroup = function parseRegexGroup(regex, modeName) {
+    var outerMode = this.mode;
+    this.mode = "text";
+    var firstToken = this.fetch();
+    var lastToken = firstToken;
+    var str = "";
+    var nextToken;
+
+    while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {
+      lastToken = nextToken;
+      str += lastToken.text;
+      this.consume();
+    }
+
+    if (str === "") {
+      throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
+    }
+
+    this.mode = outerMode;
+    return firstToken.range(lastToken, str);
+  }
+  /**
+   * Parses a color description.
+   */
+  ;
+
+  _proto.parseColorGroup = function parseColorGroup(optional) {
+    var res = this.parseStringGroup("color", optional);
+
+    if (!res) {
+      return null;
+    }
+
+    var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
+
+    if (!match) {
+      throw new src_ParseError("Invalid color: '" + res.text + "'", res);
+    }
+
+    var color = match[0];
+
+    if (/^[0-9a-f]{6}$/i.test(color)) {
+      // We allow a 6-digit HTML color spec without a leading "#".
+      // This follows the xcolor package's HTML color model.
+      // Predefined color names are all missed by this RegEx pattern.
+      color = "#" + color;
+    }
+
+    return {
+      type: "color-token",
+      mode: this.mode,
+      color: color
+    };
+  }
+  /**
+   * Parses a size specification, consisting of magnitude and unit.
+   */
+  ;
+
+  _proto.parseSizeGroup = function parseSizeGroup(optional) {
+    var res;
+    var isBlank = false;
+
+    if (!optional && this.fetch().text !== "{") {
+      res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
+    } else {
+      res = this.parseStringGroup("size", optional);
+    }
+
+    if (!res) {
+      return null;
+    }
+
+    if (!optional && res.text.length === 0) {
+      // Because we've tested for what is !optional, this block won't
+      // affect \kern, \hspace, etc. It will capture the mandatory arguments
+      // to \genfrac and \above.
+      res.text = "0pt"; // Enable \above{}
+
+      isBlank = true; // This is here specifically for \genfrac
+    }
+
+    var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
+
+    if (!match) {
+      throw new src_ParseError("Invalid size: '" + res.text + "'", res);
+    }
+
+    var data = {
+      number: +(match[1] + match[2]),
+      // sign + magnitude, cast to number
+      unit: match[3]
+    };
+
+    if (!validUnit(data)) {
+      throw new src_ParseError("Invalid unit: '" + data.unit + "'", res);
+    }
+
+    return {
+      type: "size",
+      mode: this.mode,
+      value: data,
+      isBlank: isBlank
+    };
+  }
+  /**
+   * Parses an URL, checking escaped letters and allowed protocols,
+   * and setting the catcode of % as an active character (as in \hyperref).
+   */
+  ;
+
+  _proto.parseUrlGroup = function parseUrlGroup(optional, consumeSpaces) {
+    this.gullet.lexer.setCatcode("%", 13); // active character
+
+    var res = this.parseStringGroup("url", optional, true); // get raw string
+
+    this.gullet.lexer.setCatcode("%", 14); // comment character
+
+    if (!res) {
+      return null;
+    } // hyperref package allows backslashes alone in href, but doesn't
+    // generate valid links in such cases; we interpret this as
+    // "undefined" behaviour, and keep them as-is. Some browser will
+    // replace backslashes with forward slashes.
+
+
+    var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1');
+    return {
+      type: "url",
+      mode: this.mode,
+      url: url
+    };
+  }
+  /**
+   * If `optional` is false or absent, this parses an ordinary group,
+   * which is either a single nucleus (like "x") or an expression
+   * in braces (like "{x+y}") or an implicit group, a group that starts
+   * at the current position, and ends right before a higher explicit
+   * group ends, or at EOF.
+   * If `optional` is true, it parses either a bracket-delimited expression
+   * (like "[x+y]") or returns null to indicate the absence of a
+   * bracket-enclosed group.
+   * If `mode` is present, switches to that mode while parsing the group,
+   * and switches back after.
+   */
+  ;
+
+  _proto.parseGroup = function parseGroup(name, // For error reporting.
+  optional, greediness, breakOnTokenText, mode, consumeSpaces) {
+    // Switch to specified mode
+    var outerMode = this.mode;
+
+    if (mode) {
+      this.switchMode(mode);
+    } // Consume spaces if requested, crucially *after* we switch modes,
+    // so that the next non-space token is parsed in the correct mode.
+
+
+    if (consumeSpaces) {
+      this.consumeSpaces();
+    } // Get first token
+
+
+    var firstToken = this.fetch();
+    var text = firstToken.text;
+    var result; // Try to parse an open brace or \begingroup
+
+    if (optional ? text === "[" : text === "{" || text === "\\begingroup") {
+      this.consume();
+      var groupEnd = Parser.endOfGroup[text]; // Start a new group namespace
+
+      this.gullet.beginGroup(); // If we get a brace, parse an expression
+
+      var expression = this.parseExpression(false, groupEnd);
+      var lastToken = this.fetch(); // Check that we got a matching closing brace
+
+      this.expect(groupEnd); // End group namespace
+
+      this.gullet.endGroup();
+      result = {
+        type: "ordgroup",
+        mode: this.mode,
+        loc: SourceLocation.range(firstToken, lastToken),
+        body: expression,
+        // A group formed by \begingroup...\endgroup is a semi-simple group
+        // which doesn't affect spacing in math mode, i.e., is transparent.
+        // https://tex.stackexchange.com/questions/1930/when-should-one-
+        // use-begingroup-instead-of-bgroup
+        semisimple: text === "\\begingroup" || undefined
+      };
+    } else if (optional) {
+      // Return nothing for an optional group
+      result = null;
+    } else {
+      // If there exists a function with this name, parse the function.
+      // Otherwise, just return a nucleus
+      result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol();
+
+      if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) {
+        if (this.settings.throwOnError) {
+          throw new src_ParseError("Undefined control sequence: " + text, firstToken);
+        }
+
+        result = this.formatUnsupportedCmd(text);
+        this.consume();
+      }
+    } // Switch mode back
+
+
+    if (mode) {
+      this.switchMode(outerMode);
+    }
+
+    return result;
+  }
+  /**
+   * Form ligature-like combinations of characters for text mode.
+   * This includes inputs like "--", "---", "``" and "''".
+   * The result will simply replace multiple textord nodes with a single
+   * character in each value by a single textord node having multiple
+   * characters in its value.  The representation is still ASCII source.
+   * The group will be modified in place.
+   */
+  ;
+
+  _proto.formLigatures = function formLigatures(group) {
+    var n = group.length - 1;
+
+    for (var i = 0; i < n; ++i) {
+      var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.
+
+      var v = a.text;
+
+      if (v === "-" && group[i + 1].text === "-") {
+        if (i + 1 < n && group[i + 2].text === "-") {
+          group.splice(i, 3, {
+            type: "textord",
+            mode: "text",
+            loc: SourceLocation.range(a, group[i + 2]),
+            text: "---"
+          });
+          n -= 2;
+        } else {
+          group.splice(i, 2, {
+            type: "textord",
+            mode: "text",
+            loc: SourceLocation.range(a, group[i + 1]),
+            text: "--"
+          });
+          n -= 1;
+        }
+      }
+
+      if ((v === "'" || v === "`") && group[i + 1].text === v) {
+        group.splice(i, 2, {
+          type: "textord",
+          mode: "text",
+          loc: SourceLocation.range(a, group[i + 1]),
+          text: v + v
+        });
+        n -= 1;
+      }
+    }
+  }
+  /**
+   * Parse a single symbol out of the string. Here, we handle single character
+   * symbols and special functions like \verb.
+   */
+  ;
+
+  _proto.parseSymbol = function parseSymbol() {
+    var nucleus = this.fetch();
+    var text = nucleus.text;
+
+    if (/^\\verb[^a-zA-Z]/.test(text)) {
+      this.consume();
+      var arg = text.slice(5);
+      var star = arg.charAt(0) === "*";
+
+      if (star) {
+        arg = arg.slice(1);
+      } // Lexer's tokenRegex is constructed to always have matching
+      // first/last characters.
+
+
+      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {
+        throw new src_ParseError("\\verb assertion failed --\n                    please report what input caused this bug");
+      }
+
+      arg = arg.slice(1, -1); // remove first and last char
+
+      return {
+        type: "verb",
+        mode: "text",
+        body: arg,
+        star: star
+      };
+    } // At this point, we should have a symbol, possibly with accents.
+    // First expand any accented base symbol according to unicodeSymbols.
+
+
+    if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) {
+      // This behavior is not strict (XeTeX-compatible) in math mode.
+      if (this.settings.strict && this.mode === "math") {
+        this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus);
+      }
+
+      text = unicodeSymbols[text[0]] + text.substr(1);
+    } // Strip off any combining characters
+
+
+    var match = combiningDiacriticalMarksEndRegex.exec(text);
+
+    if (match) {
+      text = text.substring(0, match.index);
+
+      if (text === 'i') {
+        text = "\u0131"; // dotless i, in math and text mode
+      } else if (text === 'j') {
+        text = "\u0237"; // dotless j, in math and text mode
+      }
+    } // Recognize base symbol
+
+
+    var symbol;
+
+    if (src_symbols[this.mode][text]) {
+      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {
+        this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus);
+      }
+
+      var group = src_symbols[this.mode][text].group;
+      var loc = SourceLocation.range(nucleus);
+      var s;
+
+      if (ATOMS.hasOwnProperty(group)) {
+        // $FlowFixMe
+        var family = group;
+        s = {
+          type: "atom",
+          mode: this.mode,
+          family: family,
+          loc: loc,
+          text: text
+        };
+      } else {
+        // $FlowFixMe
+        s = {
+          type: group,
+          mode: this.mode,
+          loc: loc,
+          text: text
+        };
+      }
+
+      symbol = s;
+    } else if (text.charCodeAt(0) >= 0x80) {
+      // no symbol for e.g. ^
+      if (this.settings.strict) {
+        if (!supportedCodepoint(text.charCodeAt(0))) {
+          this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus);
+        } else if (this.mode === "math") {
+          this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus);
+        }
+      } // All nonmathematical Unicode characters are rendered as if they
+      // are in text mode (wrapped in \text) because that's what it
+      // takes to render them in LaTeX.  Setting `mode: this.mode` is
+      // another natural choice (the user requested math mode), but
+      // this makes it more difficult for getCharacterMetrics() to
+      // distinguish Unicode characters without metrics and those for
+      // which we want to simulate the letter M.
+
+
+      symbol = {
+        type: "textord",
+        mode: "text",
+        loc: SourceLocation.range(nucleus),
+        text: text
+      };
+    } else {
+      return null; // EOF, ^, _, {, }, etc.
+    }
+
+    this.consume(); // Transform combining characters into accents
+
+    if (match) {
+      for (var i = 0; i < match[0].length; i++) {
+        var accent = match[0][i];
+
+        if (!unicodeAccents[accent]) {
+          throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus);
+        }
+
+        var command = unicodeAccents[accent][this.mode];
+
+        if (!command) {
+          throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus);
+        }
+
+        symbol = {
+          type: "accent",
+          mode: this.mode,
+          loc: SourceLocation.range(nucleus),
+          label: command,
+          isStretchy: false,
+          isShifty: true,
+          base: symbol
+        };
+      }
+    }
+
+    return symbol;
+  };
+
+  return Parser;
+}();
+
+Parser_Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"];
+Parser_Parser.endOfGroup = {
+  "[": "]",
+  "{": "}",
+  "\\begingroup": "\\endgroup"
+  /**
+   * Parses an "expression", which is a list of atoms.
+   *
+   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
+   *                 happens when functions have higher precendence han infix
+   *                 nodes in implicit parses.
+   *
+   * `breakOnTokenText`: The text of the token that the expression should end
+   *                     with, or `null` if something else should end the
+   *                     expression.
+   */
+
+};
+Parser_Parser.SUPSUB_GREEDINESS = 1;
+
+// CONCATENATED MODULE: ./src/parseTree.js
+/**
+ * Provides a single function for parsing an expression using a Parser
+ * TODO(emily): Remove this
+ */
+
+
+
+/**
+ * Parses an expression using a Parser, then returns the parsed result.
+ */
+var parseTree_parseTree = function parseTree(toParse, settings) {
+  if (!(typeof toParse === 'string' || toParse instanceof String)) {
+    throw new TypeError('KaTeX can only parse string typed expression');
+  }
+
+  var parser = new Parser_Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors
+
+  delete parser.gullet.macros.current["\\df@tag"];
+  var tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag.
+  // In this case, we separately parse the tag and wrap the tree.
+
+  if (parser.gullet.macros.get("\\df@tag")) {
+    if (!settings.displayMode) {
+      throw new src_ParseError("\\tag works only in display equations");
+    }
+
+    parser.gullet.feed("\\df@tag");
+    tree = [{
+      type: "tag",
+      mode: "text",
+      body: tree,
+      tag: parser.parse()
+    }];
+  }
+
+  return tree;
+};
+
+/* harmony default export */ var src_parseTree = (parseTree_parseTree);
+// CONCATENATED MODULE: ./katex.js
+/* eslint no-console:0 */
+
+/**
+ * This is the main entry point for KaTeX. Here, we expose functions for
+ * rendering expressions either to DOM nodes or to markup strings.
+ *
+ * We also expose the ParseError class to check if errors thrown from KaTeX are
+ * errors in the expression, or errors in javascript handling.
+ */
+
+
+
+
+
+
+
+
+
+
+/**
+ * Parse and build an expression, and place that expression in the DOM node
+ * given.
+ */
+var katex_render = function render(expression, baseNode, options) {
+  baseNode.textContent = "";
+  var node = katex_renderToDomTree(expression, options).toNode();
+  baseNode.appendChild(node);
+}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and
+// disable rendering.
+
+
+if (typeof document !== "undefined") {
+  if (document.compatMode !== "CSS1Compat") {
+    typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
+
+    katex_render = function render() {
+      throw new src_ParseError("KaTeX doesn't work in quirks mode.");
+    };
+  }
+}
+/**
+ * Parse and build an expression, and return the markup for that.
+ */
+
+
+var renderToString = function renderToString(expression, options) {
+  var markup = katex_renderToDomTree(expression, options).toMarkup();
+  return markup;
+};
+/**
+ * Parse an expression and return the parse tree.
+ */
+
+
+var katex_generateParseTree = function generateParseTree(expression, options) {
+  var settings = new Settings_Settings(options);
+  return src_parseTree(expression, settings);
+};
+/**
+ * If the given error is a KaTeX ParseError and options.throwOnError is false,
+ * renders the invalid LaTeX as a span with hover title giving the KaTeX
+ * error message.  Otherwise, simply throws the error.
+ */
+
+
+var katex_renderError = function renderError(error, expression, options) {
+  if (options.throwOnError || !(error instanceof src_ParseError)) {
+    throw error;
+  }
+
+  var node = buildCommon.makeSpan(["katex-error"], [new domTree_SymbolNode(expression)]);
+  node.setAttribute("title", error.toString());
+  node.setAttribute("style", "color:" + options.errorColor);
+  return node;
+};
+/**
+ * Generates and returns the katex build tree. This is used for advanced
+ * use cases (like rendering to custom output).
+ */
+
+
+var katex_renderToDomTree = function renderToDomTree(expression, options) {
+  var settings = new Settings_Settings(options);
+
+  try {
+    var tree = src_parseTree(expression, settings);
+    return buildTree_buildTree(tree, expression, settings);
+  } catch (error) {
+    return katex_renderError(error, expression, settings);
+  }
+};
+/**
+ * Generates and returns the katex build tree, with just HTML (no MathML).
+ * This is used for advanced use cases (like rendering to custom output).
+ */
+
+
+var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) {
+  var settings = new Settings_Settings(options);
+
+  try {
+    var tree = src_parseTree(expression, settings);
+    return buildTree_buildHTMLTree(tree, expression, settings);
+  } catch (error) {
+    return katex_renderError(error, expression, settings);
+  }
+};
+
+/* harmony default export */ var katex_0 = ({
+  /**
+   * Current KaTeX version
+   */
+  version: "0.11.1",
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML combination, and adds
+   * it as a child to the specified DOM node.
+   */
+  render: katex_render,
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML combination string,
+   * for sending to the client.
+   */
+  renderToString: renderToString,
+
+  /**
+   * KaTeX error, usually during parsing.
+   */
+  ParseError: src_ParseError,
+
+  /**
+   * Parses the given LaTeX into KaTeX's internal parse tree structure,
+   * without rendering to HTML or MathML.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __parse: katex_generateParseTree,
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML internal DOM tree
+   * representation, without flattening that representation to a string.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __renderToDomTree: katex_renderToDomTree,
+
+  /**
+   * Renders the given LaTeX into an HTML internal DOM tree representation,
+   * without MathML and without flattening that representation to a string.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __renderToHTMLTree: katex_renderToHTMLTree,
+
+  /**
+   * extends internal font metrics object with a new object
+   * each key in the new object represents a font name
+  */
+  __setFontMetrics: setFontMetrics,
+
+  /**
+   * adds a new symbol to builtin symbols table
+   */
+  __defineSymbol: defineSymbol,
+
+  /**
+   * adds a new macro to builtin macro list
+   */
+  __defineMacro: defineMacro,
+
+  /**
+   * Expose the dom tree node types, which can be useful for type checking nodes.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __domTree: {
+    Span: domTree_Span,
+    Anchor: domTree_Anchor,
+    SymbolNode: domTree_SymbolNode,
+    SvgNode: SvgNode,
+    PathNode: domTree_PathNode,
+    LineNode: LineNode
+  }
+});
+// CONCATENATED MODULE: ./katex.webpack.js
+/**
+ * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2]
+ * doesn't support CSS modules natively, a separate entry point is used and
+ * it is not flowtyped.
+ *
+ * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef
+ * [2] https://facebook.github.io/jest/docs/en/webpack.html
+ */
+
+
+/* harmony default export */ var katex_webpack = __webpack_exports__["default"] = (katex_0);
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/katex.min.css b/codegen/vulkan/vulkan-docs-next/katex/katex.min.css
new file mode 100644
index 0000000..c0cd145
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/katex.min.css
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype");font-weight:400;font-style:normal}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.11.1"}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex svg path{stroke:none}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left}
diff --git a/codegen/vulkan/vulkan-docs-next/katex/katex.min.js b/codegen/vulkan/vulkan-docs-next/katex/katex.min.js
new file mode 100644
index 0000000..906ce12
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/katex.min.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.katex=e():t.katex=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function r(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=1)}([function(t,e,r){},function(t,e,r){"use strict";r.r(e);r(0);var a=function(){function t(t,e,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=t,this.start=e,this.end=r}return t.range=function(e,r){return r?e&&e.loc&&r.loc&&e.loc.lexer===r.loc.lexer?new t(e.loc.lexer,e.loc.start,r.loc.end):null:e&&e.loc},t}(),n=function(){function t(t,e){this.text=void 0,this.loc=void 0,this.text=t,this.loc=e}return t.prototype.range=function(e,r){return new t(r,a.range(this,e))},t}(),i=function t(e,r){this.position=void 0;var a,n="KaTeX parse error: "+e,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;a=i.start;var s=i.end;a===o.length?n+=" at end of input: ":n+=" at position "+(a+1)+": ";var h=o.slice(a,s).replace(/[^]/g,"$&\u0332");n+=(a>15?"\u2026"+o.slice(a-15,a):o.slice(0,a))+h+(s+15<o.length?o.slice(s,s+15)+"\u2026":o.slice(s))}var l=new Error(n);return l.name="ParseError",l.__proto__=t.prototype,l.position=a,l};i.prototype.__proto__=Error.prototype;var o=i,s=/([A-Z])/g,h={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},l=/[&><"']/g;var m=function t(e){return"ordgroup"===e.type?1===e.body.length?t(e.body[0]):e:"color"===e.type?1===e.body.length?t(e.body[0]):e:"font"===e.type?t(e.body):e},c={contains:function(t,e){return-1!==t.indexOf(e)},deflt:function(t,e){return void 0===t?e:t},escape:function(t){return String(t).replace(l,function(t){return h[t]})},hyphenate:function(t){return t.replace(s,"-$1").toLowerCase()},getBaseElem:m,isCharacterBox:function(t){var e=m(t);return"mathord"===e.type||"textord"===e.type||"atom"===e.type},protocolFromUrl:function(t){var e=/^\s*([^\\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(t);return null!=e?e[1]:"_relative"}},u=function(){function t(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,t=t||{},this.displayMode=c.deflt(t.displayMode,!1),this.output=c.deflt(t.output,"htmlAndMathml"),this.leqno=c.deflt(t.leqno,!1),this.fleqn=c.deflt(t.fleqn,!1),this.throwOnError=c.deflt(t.throwOnError,!0),this.errorColor=c.deflt(t.errorColor,"#cc0000"),this.macros=t.macros||{},this.minRuleThickness=Math.max(0,c.deflt(t.minRuleThickness,0)),this.colorIsTextColor=c.deflt(t.colorIsTextColor,!1),this.strict=c.deflt(t.strict,"warn"),this.trust=c.deflt(t.trust,!1),this.maxSize=Math.max(0,c.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,c.deflt(t.maxExpand,1e3))}var e=t.prototype;return e.reportNonstrict=function(t,e,r){var a=this.strict;if("function"==typeof a&&(a=a(t,e,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new o("LaTeX-incompatible input and strict mode is set to 'error': "+e+" ["+t+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]")}},e.useStrictBehavior=function(t,e,r){var a=this.strict;if("function"==typeof a)try{a=a(t,e,r)}catch(t){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]"),!1)))},e.isTrusted=function(t){t.url&&!t.protocol&&(t.protocol=c.protocolFromUrl(t.url));var e="function"==typeof this.trust?this.trust(t):this.trust;return Boolean(e)},t}(),p=function(){function t(t,e,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=e,this.cramped=r}var e=t.prototype;return e.sup=function(){return d[f[this.id]]},e.sub=function(){return d[g[this.id]]},e.fracNum=function(){return d[x[this.id]]},e.fracDen=function(){return d[v[this.id]]},e.cramp=function(){return d[b[this.id]]},e.text=function(){return d[y[this.id]]},e.isTight=function(){return this.size>=2},t}(),d=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],f=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],x=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],w={DISPLAY:d[0],TEXT:d[2],SCRIPT:d[4],SCRIPTSCRIPT:d[6]},k=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var S=[];function M(t){for(var e=0;e<S.length;e+=2)if(t>=S[e]&&t<=S[e+1])return!0;return!1}k.forEach(function(t){return t.blocks.forEach(function(t){return S.push.apply(S,t)})});var z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function t(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){for(var t=document.createDocumentFragment(),e=0;e<this.children.length;e++)t.appendChild(this.children[e].toNode());return t},e.toMarkup=function(){for(var t="",e=0;e<this.children.length;e++)t+=this.children[e].toMarkup();return t},e.toText=function(){var t=function(t){return t.toText()};return this.children.map(t).join("")},t}(),T=function(t){return t.filter(function(t){return t}).join(" ")},B=function(t,e,r){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},e){e.style.isTight()&&this.classes.push("mtight");var a=e.getColor();a&&(this.style.color=a)}},C=function(t){var e=document.createElement(t);for(var r in e.className=T(this.classes),this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&e.setAttribute(a,this.attributes[a]);for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e},q=function(t){var e="<"+t;this.classes.length&&(e+=' class="'+c.escape(T(this.classes))+'"');var r="";for(var a in this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+":"+this.style[a]+";");for(var n in r&&(e+=' style="'+c.escape(r)+'"'),this.attributes)this.attributes.hasOwnProperty(n)&&(e+=" "+n+'="'+c.escape(this.attributes[n])+'"');e+=">";for(var i=0;i<this.children.length;i++)e+=this.children[i].toMarkup();return e+="</"+t+">"},N=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,t,r,a),this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"span")},e.toMarkup=function(){return q.call(this,"span")},t}(),I=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,e,a),this.children=r||[],this.setAttribute("href",t)}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"a")},e.toMarkup=function(){return q.call(this,"a")},t}(),R=function(){function t(t,e,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=e,this.src=t,this.classes=["mord"],this.style=r}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createElement("img");for(var e in t.src=this.src,t.alt=this.alt,t.className="mord",this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);return t},e.toMarkup=function(){var t="<img  src='"+this.src+" 'alt='"+this.alt+"' ",e="";for(var r in this.style)this.style.hasOwnProperty(r)&&(e+=c.hyphenate(r)+":"+this.style[r]+";");return e&&(t+=' style="'+c.escape(e)+'"'),t+="'/>"},t}(),O={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"},E=function(){function t(t,e,r,a,n,i,o,s){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=t,this.height=e||0,this.depth=r||0,this.italic=a||0,this.skew=n||0,this.width=i||0,this.classes=o||[],this.style=s||{},this.maxFontSize=0;var h=function(t){for(var e=0;e<k.length;e++)for(var r=k[e],a=0;a<r.blocks.length;a++){var n=r.blocks[a];if(t>=n[0]&&t<=n[1])return r.name}return null}(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=O[this.text])}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createTextNode(this.text),e=null;for(var r in this.italic>0&&((e=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((e=e||document.createElement("span")).className=T(this.classes)),this.style)this.style.hasOwnProperty(r)&&((e=e||document.createElement("span")).style[r]=this.style[r]);return e?(e.appendChild(t),e):t},e.toMarkup=function(){var t=!1,e="<span";this.classes.length&&(t=!0,e+=' class="',e+=c.escape(T(this.classes)),e+='"');var r="";for(var a in this.italic>0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+":"+this.style[a]+";");r&&(t=!0,e+=' style="'+c.escape(r)+'"');var n=c.escape(this.text);return t?(e+=">",e+=n,e+="</span>"):n},t}(),L=function(){function t(t,e){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=e||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t="<svg";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+"='"+this.attributes[e]+"'");t+=">";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+="</svg>"},t}(),H=function(){function t(t,e){this.pathName=void 0,this.alternate=void 0,this.pathName=t,this.alternate=e}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","path");return this.alternate?t.setAttribute("d",this.alternate):t.setAttribute("d",z[this.pathName]),t},e.toMarkup=function(){return this.alternate?"<path d='"+this.alternate+"'/>":"<path d='"+z[this.pathName]+"'/>"},t}(),P=function(){function t(t){this.attributes=void 0,this.attributes=t||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","line");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);return t},e.toMarkup=function(){var t="<line";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+"='"+this.attributes[e]+"'");return t+="/>"},t}();function D(t){if(t instanceof E)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}var F={"AMS-Regular":{65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473]},"Fraktur-Regular":{33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],163:[0,.69444,0,0,.86853],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],163:[0,.69444,0,0,.76909],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],305:[0,.43056,0,.02778,.32246],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],567:[.19444,.43056,0,.08334,.38403],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.12,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,1],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.67,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.9,0,0,.278],8943:[-.19,.31,0,0,1.172],8945:[-.1,.82,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.744,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.744,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333]},"Math-Italic":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},"Math-Regular":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},"SansSerif-Bold":{33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212]},"Size1-Regular":{40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},V={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},U={"\xc5":"A","\xc7":"C","\xd0":"D","\xde":"o","\xe5":"a","\xe7":"c","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function G(t,e,r){if(!F[e])throw new Error("Font metrics not found for font: "+e+".");var a=t.charCodeAt(0),n=F[e][a];if(!n&&t[0]in U&&(a=U[t[0]].charCodeAt(0),n=F[e][a]),n||"text"!==r||M(a)&&(n=F[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var Y={};var W={bin:1,close:1,inner:1,open:1,punct:1,rel:1},X={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},_={math:{},text:{}},j=_;function $(t,e,r,a,n,i){_[t][n]={font:e,group:r,replace:a},i&&a&&(_[t][a]=_[t][n])}var Z="main",K="ams",J="bin",Q="mathord",tt="op-token",et="rel";$("math",Z,et,"\u2261","\\equiv",!0),$("math",Z,et,"\u227a","\\prec",!0),$("math",Z,et,"\u227b","\\succ",!0),$("math",Z,et,"\u223c","\\sim",!0),$("math",Z,et,"\u22a5","\\perp"),$("math",Z,et,"\u2aaf","\\preceq",!0),$("math",Z,et,"\u2ab0","\\succeq",!0),$("math",Z,et,"\u2243","\\simeq",!0),$("math",Z,et,"\u2223","\\mid",!0),$("math",Z,et,"\u226a","\\ll",!0),$("math",Z,et,"\u226b","\\gg",!0),$("math",Z,et,"\u224d","\\asymp",!0),$("math",Z,et,"\u2225","\\parallel"),$("math",Z,et,"\u22c8","\\bowtie",!0),$("math",Z,et,"\u2323","\\smile",!0),$("math",Z,et,"\u2291","\\sqsubseteq",!0),$("math",Z,et,"\u2292","\\sqsupseteq",!0),$("math",Z,et,"\u2250","\\doteq",!0),$("math",Z,et,"\u2322","\\frown",!0),$("math",Z,et,"\u220b","\\ni",!0),$("math",Z,et,"\u221d","\\propto",!0),$("math",Z,et,"\u22a2","\\vdash",!0),$("math",Z,et,"\u22a3","\\dashv",!0),$("math",Z,et,"\u220b","\\owns"),$("math",Z,"punct",".","\\ldotp"),$("math",Z,"punct","\u22c5","\\cdotp"),$("math",Z,"textord","#","\\#"),$("text",Z,"textord","#","\\#"),$("math",Z,"textord","&","\\&"),$("text",Z,"textord","&","\\&"),$("math",Z,"textord","\u2135","\\aleph",!0),$("math",Z,"textord","\u2200","\\forall",!0),$("math",Z,"textord","\u210f","\\hbar",!0),$("math",Z,"textord","\u2203","\\exists",!0),$("math",Z,"textord","\u2207","\\nabla",!0),$("math",Z,"textord","\u266d","\\flat",!0),$("math",Z,"textord","\u2113","\\ell",!0),$("math",Z,"textord","\u266e","\\natural",!0),$("math",Z,"textord","\u2663","\\clubsuit",!0),$("math",Z,"textord","\u2118","\\wp",!0),$("math",Z,"textord","\u266f","\\sharp",!0),$("math",Z,"textord","\u2662","\\diamondsuit",!0),$("math",Z,"textord","\u211c","\\Re",!0),$("math",Z,"textord","\u2661","\\heartsuit",!0),$("math",Z,"textord","\u2111","\\Im",!0),$("math",Z,"textord","\u2660","\\spadesuit",!0),$("text",Z,"textord","\xa7","\\S",!0),$("text",Z,"textord","\xb6","\\P",!0),$("math",Z,"textord","\u2020","\\dag"),$("text",Z,"textord","\u2020","\\dag"),$("text",Z,"textord","\u2020","\\textdagger"),$("math",Z,"textord","\u2021","\\ddag"),$("text",Z,"textord","\u2021","\\ddag"),$("text",Z,"textord","\u2021","\\textdaggerdbl"),$("math",Z,"close","\u23b1","\\rmoustache",!0),$("math",Z,"open","\u23b0","\\lmoustache",!0),$("math",Z,"close","\u27ef","\\rgroup",!0),$("math",Z,"open","\u27ee","\\lgroup",!0),$("math",Z,J,"\u2213","\\mp",!0),$("math",Z,J,"\u2296","\\ominus",!0),$("math",Z,J,"\u228e","\\uplus",!0),$("math",Z,J,"\u2293","\\sqcap",!0),$("math",Z,J,"\u2217","\\ast"),$("math",Z,J,"\u2294","\\sqcup",!0),$("math",Z,J,"\u25ef","\\bigcirc"),$("math",Z,J,"\u2219","\\bullet"),$("math",Z,J,"\u2021","\\ddagger"),$("math",Z,J,"\u2240","\\wr",!0),$("math",Z,J,"\u2a3f","\\amalg"),$("math",Z,J,"&","\\And"),$("math",Z,et,"\u27f5","\\longleftarrow",!0),$("math",Z,et,"\u21d0","\\Leftarrow",!0),$("math",Z,et,"\u27f8","\\Longleftarrow",!0),$("math",Z,et,"\u27f6","\\longrightarrow",!0),$("math",Z,et,"\u21d2","\\Rightarrow",!0),$("math",Z,et,"\u27f9","\\Longrightarrow",!0),$("math",Z,et,"\u2194","\\leftrightarrow",!0),$("math",Z,et,"\u27f7","\\longleftrightarrow",!0),$("math",Z,et,"\u21d4","\\Leftrightarrow",!0),$("math",Z,et,"\u27fa","\\Longleftrightarrow",!0),$("math",Z,et,"\u21a6","\\mapsto",!0),$("math",Z,et,"\u27fc","\\longmapsto",!0),$("math",Z,et,"\u2197","\\nearrow",!0),$("math",Z,et,"\u21a9","\\hookleftarrow",!0),$("math",Z,et,"\u21aa","\\hookrightarrow",!0),$("math",Z,et,"\u2198","\\searrow",!0),$("math",Z,et,"\u21bc","\\leftharpoonup",!0),$("math",Z,et,"\u21c0","\\rightharpoonup",!0),$("math",Z,et,"\u2199","\\swarrow",!0),$("math",Z,et,"\u21bd","\\leftharpoondown",!0),$("math",Z,et,"\u21c1","\\rightharpoondown",!0),$("math",Z,et,"\u2196","\\nwarrow",!0),$("math",Z,et,"\u21cc","\\rightleftharpoons",!0),$("math",K,et,"\u226e","\\nless",!0),$("math",K,et,"\ue010","\\@nleqslant"),$("math",K,et,"\ue011","\\@nleqq"),$("math",K,et,"\u2a87","\\lneq",!0),$("math",K,et,"\u2268","\\lneqq",!0),$("math",K,et,"\ue00c","\\@lvertneqq"),$("math",K,et,"\u22e6","\\lnsim",!0),$("math",K,et,"\u2a89","\\lnapprox",!0),$("math",K,et,"\u2280","\\nprec",!0),$("math",K,et,"\u22e0","\\npreceq",!0),$("math",K,et,"\u22e8","\\precnsim",!0),$("math",K,et,"\u2ab9","\\precnapprox",!0),$("math",K,et,"\u2241","\\nsim",!0),$("math",K,et,"\ue006","\\@nshortmid"),$("math",K,et,"\u2224","\\nmid",!0),$("math",K,et,"\u22ac","\\nvdash",!0),$("math",K,et,"\u22ad","\\nvDash",!0),$("math",K,et,"\u22ea","\\ntriangleleft"),$("math",K,et,"\u22ec","\\ntrianglelefteq",!0),$("math",K,et,"\u228a","\\subsetneq",!0),$("math",K,et,"\ue01a","\\@varsubsetneq"),$("math",K,et,"\u2acb","\\subsetneqq",!0),$("math",K,et,"\ue017","\\@varsubsetneqq"),$("math",K,et,"\u226f","\\ngtr",!0),$("math",K,et,"\ue00f","\\@ngeqslant"),$("math",K,et,"\ue00e","\\@ngeqq"),$("math",K,et,"\u2a88","\\gneq",!0),$("math",K,et,"\u2269","\\gneqq",!0),$("math",K,et,"\ue00d","\\@gvertneqq"),$("math",K,et,"\u22e7","\\gnsim",!0),$("math",K,et,"\u2a8a","\\gnapprox",!0),$("math",K,et,"\u2281","\\nsucc",!0),$("math",K,et,"\u22e1","\\nsucceq",!0),$("math",K,et,"\u22e9","\\succnsim",!0),$("math",K,et,"\u2aba","\\succnapprox",!0),$("math",K,et,"\u2246","\\ncong",!0),$("math",K,et,"\ue007","\\@nshortparallel"),$("math",K,et,"\u2226","\\nparallel",!0),$("math",K,et,"\u22af","\\nVDash",!0),$("math",K,et,"\u22eb","\\ntriangleright"),$("math",K,et,"\u22ed","\\ntrianglerighteq",!0),$("math",K,et,"\ue018","\\@nsupseteqq"),$("math",K,et,"\u228b","\\supsetneq",!0),$("math",K,et,"\ue01b","\\@varsupsetneq"),$("math",K,et,"\u2acc","\\supsetneqq",!0),$("math",K,et,"\ue019","\\@varsupsetneqq"),$("math",K,et,"\u22ae","\\nVdash",!0),$("math",K,et,"\u2ab5","\\precneqq",!0),$("math",K,et,"\u2ab6","\\succneqq",!0),$("math",K,et,"\ue016","\\@nsubseteqq"),$("math",K,J,"\u22b4","\\unlhd"),$("math",K,J,"\u22b5","\\unrhd"),$("math",K,et,"\u219a","\\nleftarrow",!0),$("math",K,et,"\u219b","\\nrightarrow",!0),$("math",K,et,"\u21cd","\\nLeftarrow",!0),$("math",K,et,"\u21cf","\\nRightarrow",!0),$("math",K,et,"\u21ae","\\nleftrightarrow",!0),$("math",K,et,"\u21ce","\\nLeftrightarrow",!0),$("math",K,et,"\u25b3","\\vartriangle"),$("math",K,"textord","\u210f","\\hslash"),$("math",K,"textord","\u25bd","\\triangledown"),$("math",K,"textord","\u25ca","\\lozenge"),$("math",K,"textord","\u24c8","\\circledS"),$("math",K,"textord","\xae","\\circledR"),$("text",K,"textord","\xae","\\circledR"),$("math",K,"textord","\u2221","\\measuredangle",!0),$("math",K,"textord","\u2204","\\nexists"),$("math",K,"textord","\u2127","\\mho"),$("math",K,"textord","\u2132","\\Finv",!0),$("math",K,"textord","\u2141","\\Game",!0),$("math",K,"textord","\u2035","\\backprime"),$("math",K,"textord","\u25b2","\\blacktriangle"),$("math",K,"textord","\u25bc","\\blacktriangledown"),$("math",K,"textord","\u25a0","\\blacksquare"),$("math",K,"textord","\u29eb","\\blacklozenge"),$("math",K,"textord","\u2605","\\bigstar"),$("math",K,"textord","\u2222","\\sphericalangle",!0),$("math",K,"textord","\u2201","\\complement",!0),$("math",K,"textord","\xf0","\\eth",!0),$("math",K,"textord","\u2571","\\diagup"),$("math",K,"textord","\u2572","\\diagdown"),$("math",K,"textord","\u25a1","\\square"),$("math",K,"textord","\u25a1","\\Box"),$("math",K,"textord","\u25ca","\\Diamond"),$("math",K,"textord","\xa5","\\yen",!0),$("text",K,"textord","\xa5","\\yen",!0),$("math",K,"textord","\u2713","\\checkmark",!0),$("text",K,"textord","\u2713","\\checkmark"),$("math",K,"textord","\u2136","\\beth",!0),$("math",K,"textord","\u2138","\\daleth",!0),$("math",K,"textord","\u2137","\\gimel",!0),$("math",K,"textord","\u03dd","\\digamma",!0),$("math",K,"textord","\u03f0","\\varkappa"),$("math",K,"open","\u250c","\\ulcorner",!0),$("math",K,"close","\u2510","\\urcorner",!0),$("math",K,"open","\u2514","\\llcorner",!0),$("math",K,"close","\u2518","\\lrcorner",!0),$("math",K,et,"\u2266","\\leqq",!0),$("math",K,et,"\u2a7d","\\leqslant",!0),$("math",K,et,"\u2a95","\\eqslantless",!0),$("math",K,et,"\u2272","\\lesssim",!0),$("math",K,et,"\u2a85","\\lessapprox",!0),$("math",K,et,"\u224a","\\approxeq",!0),$("math",K,J,"\u22d6","\\lessdot"),$("math",K,et,"\u22d8","\\lll",!0),$("math",K,et,"\u2276","\\lessgtr",!0),$("math",K,et,"\u22da","\\lesseqgtr",!0),$("math",K,et,"\u2a8b","\\lesseqqgtr",!0),$("math",K,et,"\u2251","\\doteqdot"),$("math",K,et,"\u2253","\\risingdotseq",!0),$("math",K,et,"\u2252","\\fallingdotseq",!0),$("math",K,et,"\u223d","\\backsim",!0),$("math",K,et,"\u22cd","\\backsimeq",!0),$("math",K,et,"\u2ac5","\\subseteqq",!0),$("math",K,et,"\u22d0","\\Subset",!0),$("math",K,et,"\u228f","\\sqsubset",!0),$("math",K,et,"\u227c","\\preccurlyeq",!0),$("math",K,et,"\u22de","\\curlyeqprec",!0),$("math",K,et,"\u227e","\\precsim",!0),$("math",K,et,"\u2ab7","\\precapprox",!0),$("math",K,et,"\u22b2","\\vartriangleleft"),$("math",K,et,"\u22b4","\\trianglelefteq"),$("math",K,et,"\u22a8","\\vDash",!0),$("math",K,et,"\u22aa","\\Vvdash",!0),$("math",K,et,"\u2323","\\smallsmile"),$("math",K,et,"\u2322","\\smallfrown"),$("math",K,et,"\u224f","\\bumpeq",!0),$("math",K,et,"\u224e","\\Bumpeq",!0),$("math",K,et,"\u2267","\\geqq",!0),$("math",K,et,"\u2a7e","\\geqslant",!0),$("math",K,et,"\u2a96","\\eqslantgtr",!0),$("math",K,et,"\u2273","\\gtrsim",!0),$("math",K,et,"\u2a86","\\gtrapprox",!0),$("math",K,J,"\u22d7","\\gtrdot"),$("math",K,et,"\u22d9","\\ggg",!0),$("math",K,et,"\u2277","\\gtrless",!0),$("math",K,et,"\u22db","\\gtreqless",!0),$("math",K,et,"\u2a8c","\\gtreqqless",!0),$("math",K,et,"\u2256","\\eqcirc",!0),$("math",K,et,"\u2257","\\circeq",!0),$("math",K,et,"\u225c","\\triangleq",!0),$("math",K,et,"\u223c","\\thicksim"),$("math",K,et,"\u2248","\\thickapprox"),$("math",K,et,"\u2ac6","\\supseteqq",!0),$("math",K,et,"\u22d1","\\Supset",!0),$("math",K,et,"\u2290","\\sqsupset",!0),$("math",K,et,"\u227d","\\succcurlyeq",!0),$("math",K,et,"\u22df","\\curlyeqsucc",!0),$("math",K,et,"\u227f","\\succsim",!0),$("math",K,et,"\u2ab8","\\succapprox",!0),$("math",K,et,"\u22b3","\\vartriangleright"),$("math",K,et,"\u22b5","\\trianglerighteq"),$("math",K,et,"\u22a9","\\Vdash",!0),$("math",K,et,"\u2223","\\shortmid"),$("math",K,et,"\u2225","\\shortparallel"),$("math",K,et,"\u226c","\\between",!0),$("math",K,et,"\u22d4","\\pitchfork",!0),$("math",K,et,"\u221d","\\varpropto"),$("math",K,et,"\u25c0","\\blacktriangleleft"),$("math",K,et,"\u2234","\\therefore",!0),$("math",K,et,"\u220d","\\backepsilon"),$("math",K,et,"\u25b6","\\blacktriangleright"),$("math",K,et,"\u2235","\\because",!0),$("math",K,et,"\u22d8","\\llless"),$("math",K,et,"\u22d9","\\gggtr"),$("math",K,J,"\u22b2","\\lhd"),$("math",K,J,"\u22b3","\\rhd"),$("math",K,et,"\u2242","\\eqsim",!0),$("math",Z,et,"\u22c8","\\Join"),$("math",K,et,"\u2251","\\Doteq",!0),$("math",K,J,"\u2214","\\dotplus",!0),$("math",K,J,"\u2216","\\smallsetminus"),$("math",K,J,"\u22d2","\\Cap",!0),$("math",K,J,"\u22d3","\\Cup",!0),$("math",K,J,"\u2a5e","\\doublebarwedge",!0),$("math",K,J,"\u229f","\\boxminus",!0),$("math",K,J,"\u229e","\\boxplus",!0),$("math",K,J,"\u22c7","\\divideontimes",!0),$("math",K,J,"\u22c9","\\ltimes",!0),$("math",K,J,"\u22ca","\\rtimes",!0),$("math",K,J,"\u22cb","\\leftthreetimes",!0),$("math",K,J,"\u22cc","\\rightthreetimes",!0),$("math",K,J,"\u22cf","\\curlywedge",!0),$("math",K,J,"\u22ce","\\curlyvee",!0),$("math",K,J,"\u229d","\\circleddash",!0),$("math",K,J,"\u229b","\\circledast",!0),$("math",K,J,"\u22c5","\\centerdot"),$("math",K,J,"\u22ba","\\intercal",!0),$("math",K,J,"\u22d2","\\doublecap"),$("math",K,J,"\u22d3","\\doublecup"),$("math",K,J,"\u22a0","\\boxtimes",!0),$("math",K,et,"\u21e2","\\dashrightarrow",!0),$("math",K,et,"\u21e0","\\dashleftarrow",!0),$("math",K,et,"\u21c7","\\leftleftarrows",!0),$("math",K,et,"\u21c6","\\leftrightarrows",!0),$("math",K,et,"\u21da","\\Lleftarrow",!0),$("math",K,et,"\u219e","\\twoheadleftarrow",!0),$("math",K,et,"\u21a2","\\leftarrowtail",!0),$("math",K,et,"\u21ab","\\looparrowleft",!0),$("math",K,et,"\u21cb","\\leftrightharpoons",!0),$("math",K,et,"\u21b6","\\curvearrowleft",!0),$("math",K,et,"\u21ba","\\circlearrowleft",!0),$("math",K,et,"\u21b0","\\Lsh",!0),$("math",K,et,"\u21c8","\\upuparrows",!0),$("math",K,et,"\u21bf","\\upharpoonleft",!0),$("math",K,et,"\u21c3","\\downharpoonleft",!0),$("math",K,et,"\u22b8","\\multimap",!0),$("math",K,et,"\u21ad","\\leftrightsquigarrow",!0),$("math",K,et,"\u21c9","\\rightrightarrows",!0),$("math",K,et,"\u21c4","\\rightleftarrows",!0),$("math",K,et,"\u21a0","\\twoheadrightarrow",!0),$("math",K,et,"\u21a3","\\rightarrowtail",!0),$("math",K,et,"\u21ac","\\looparrowright",!0),$("math",K,et,"\u21b7","\\curvearrowright",!0),$("math",K,et,"\u21bb","\\circlearrowright",!0),$("math",K,et,"\u21b1","\\Rsh",!0),$("math",K,et,"\u21ca","\\downdownarrows",!0),$("math",K,et,"\u21be","\\upharpoonright",!0),$("math",K,et,"\u21c2","\\downharpoonright",!0),$("math",K,et,"\u21dd","\\rightsquigarrow",!0),$("math",K,et,"\u21dd","\\leadsto"),$("math",K,et,"\u21db","\\Rrightarrow",!0),$("math",K,et,"\u21be","\\restriction"),$("math",Z,"textord","\u2018","`"),$("math",Z,"textord","$","\\$"),$("text",Z,"textord","$","\\$"),$("text",Z,"textord","$","\\textdollar"),$("math",Z,"textord","%","\\%"),$("text",Z,"textord","%","\\%"),$("math",Z,"textord","_","\\_"),$("text",Z,"textord","_","\\_"),$("text",Z,"textord","_","\\textunderscore"),$("math",Z,"textord","\u2220","\\angle",!0),$("math",Z,"textord","\u221e","\\infty",!0),$("math",Z,"textord","\u2032","\\prime"),$("math",Z,"textord","\u25b3","\\triangle"),$("math",Z,"textord","\u0393","\\Gamma",!0),$("math",Z,"textord","\u0394","\\Delta",!0),$("math",Z,"textord","\u0398","\\Theta",!0),$("math",Z,"textord","\u039b","\\Lambda",!0),$("math",Z,"textord","\u039e","\\Xi",!0),$("math",Z,"textord","\u03a0","\\Pi",!0),$("math",Z,"textord","\u03a3","\\Sigma",!0),$("math",Z,"textord","\u03a5","\\Upsilon",!0),$("math",Z,"textord","\u03a6","\\Phi",!0),$("math",Z,"textord","\u03a8","\\Psi",!0),$("math",Z,"textord","\u03a9","\\Omega",!0),$("math",Z,"textord","A","\u0391"),$("math",Z,"textord","B","\u0392"),$("math",Z,"textord","E","\u0395"),$("math",Z,"textord","Z","\u0396"),$("math",Z,"textord","H","\u0397"),$("math",Z,"textord","I","\u0399"),$("math",Z,"textord","K","\u039a"),$("math",Z,"textord","M","\u039c"),$("math",Z,"textord","N","\u039d"),$("math",Z,"textord","O","\u039f"),$("math",Z,"textord","P","\u03a1"),$("math",Z,"textord","T","\u03a4"),$("math",Z,"textord","X","\u03a7"),$("math",Z,"textord","\xac","\\neg",!0),$("math",Z,"textord","\xac","\\lnot"),$("math",Z,"textord","\u22a4","\\top"),$("math",Z,"textord","\u22a5","\\bot"),$("math",Z,"textord","\u2205","\\emptyset"),$("math",K,"textord","\u2205","\\varnothing"),$("math",Z,Q,"\u03b1","\\alpha",!0),$("math",Z,Q,"\u03b2","\\beta",!0),$("math",Z,Q,"\u03b3","\\gamma",!0),$("math",Z,Q,"\u03b4","\\delta",!0),$("math",Z,Q,"\u03f5","\\epsilon",!0),$("math",Z,Q,"\u03b6","\\zeta",!0),$("math",Z,Q,"\u03b7","\\eta",!0),$("math",Z,Q,"\u03b8","\\theta",!0),$("math",Z,Q,"\u03b9","\\iota",!0),$("math",Z,Q,"\u03ba","\\kappa",!0),$("math",Z,Q,"\u03bb","\\lambda",!0),$("math",Z,Q,"\u03bc","\\mu",!0),$("math",Z,Q,"\u03bd","\\nu",!0),$("math",Z,Q,"\u03be","\\xi",!0),$("math",Z,Q,"\u03bf","\\omicron",!0),$("math",Z,Q,"\u03c0","\\pi",!0),$("math",Z,Q,"\u03c1","\\rho",!0),$("math",Z,Q,"\u03c3","\\sigma",!0),$("math",Z,Q,"\u03c4","\\tau",!0),$("math",Z,Q,"\u03c5","\\upsilon",!0),$("math",Z,Q,"\u03d5","\\phi",!0),$("math",Z,Q,"\u03c7","\\chi",!0),$("math",Z,Q,"\u03c8","\\psi",!0),$("math",Z,Q,"\u03c9","\\omega",!0),$("math",Z,Q,"\u03b5","\\varepsilon",!0),$("math",Z,Q,"\u03d1","\\vartheta",!0),$("math",Z,Q,"\u03d6","\\varpi",!0),$("math",Z,Q,"\u03f1","\\varrho",!0),$("math",Z,Q,"\u03c2","\\varsigma",!0),$("math",Z,Q,"\u03c6","\\varphi",!0),$("math",Z,J,"\u2217","*"),$("math",Z,J,"+","+"),$("math",Z,J,"\u2212","-"),$("math",Z,J,"\u22c5","\\cdot",!0),$("math",Z,J,"\u2218","\\circ"),$("math",Z,J,"\xf7","\\div",!0),$("math",Z,J,"\xb1","\\pm",!0),$("math",Z,J,"\xd7","\\times",!0),$("math",Z,J,"\u2229","\\cap",!0),$("math",Z,J,"\u222a","\\cup",!0),$("math",Z,J,"\u2216","\\setminus"),$("math",Z,J,"\u2227","\\land"),$("math",Z,J,"\u2228","\\lor"),$("math",Z,J,"\u2227","\\wedge",!0),$("math",Z,J,"\u2228","\\vee",!0),$("math",Z,"textord","\u221a","\\surd"),$("math",Z,"open","(","("),$("math",Z,"open","[","["),$("math",Z,"open","\u27e8","\\langle",!0),$("math",Z,"open","\u2223","\\lvert"),$("math",Z,"open","\u2225","\\lVert"),$("math",Z,"close",")",")"),$("math",Z,"close","]","]"),$("math",Z,"close","?","?"),$("math",Z,"close","!","!"),$("math",Z,"close","\u27e9","\\rangle",!0),$("math",Z,"close","\u2223","\\rvert"),$("math",Z,"close","\u2225","\\rVert"),$("math",Z,et,"=","="),$("math",Z,et,"<","<"),$("math",Z,et,">",">"),$("math",Z,et,":",":"),$("math",Z,et,"\u2248","\\approx",!0),$("math",Z,et,"\u2245","\\cong",!0),$("math",Z,et,"\u2265","\\ge"),$("math",Z,et,"\u2265","\\geq",!0),$("math",Z,et,"\u2190","\\gets"),$("math",Z,et,">","\\gt"),$("math",Z,et,"\u2208","\\in",!0),$("math",Z,et,"\ue020","\\@not"),$("math",Z,et,"\u2282","\\subset",!0),$("math",Z,et,"\u2283","\\supset",!0),$("math",Z,et,"\u2286","\\subseteq",!0),$("math",Z,et,"\u2287","\\supseteq",!0),$("math",K,et,"\u2288","\\nsubseteq",!0),$("math",K,et,"\u2289","\\nsupseteq",!0),$("math",Z,et,"\u22a8","\\models"),$("math",Z,et,"\u2190","\\leftarrow",!0),$("math",Z,et,"\u2264","\\le"),$("math",Z,et,"\u2264","\\leq",!0),$("math",Z,et,"<","\\lt"),$("math",Z,et,"\u2192","\\rightarrow",!0),$("math",Z,et,"\u2192","\\to"),$("math",K,et,"\u2271","\\ngeq",!0),$("math",K,et,"\u2270","\\nleq",!0),$("math",Z,"spacing","\xa0","\\ "),$("math",Z,"spacing","\xa0","~"),$("math",Z,"spacing","\xa0","\\space"),$("math",Z,"spacing","\xa0","\\nobreakspace"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0","~"),$("text",Z,"spacing","\xa0","\\space"),$("text",Z,"spacing","\xa0","\\nobreakspace"),$("math",Z,"spacing",null,"\\nobreak"),$("math",Z,"spacing",null,"\\allowbreak"),$("math",Z,"punct",",",","),$("math",Z,"punct",";",";"),$("math",K,J,"\u22bc","\\barwedge",!0),$("math",K,J,"\u22bb","\\veebar",!0),$("math",Z,J,"\u2299","\\odot",!0),$("math",Z,J,"\u2295","\\oplus",!0),$("math",Z,J,"\u2297","\\otimes",!0),$("math",Z,"textord","\u2202","\\partial",!0),$("math",Z,J,"\u2298","\\oslash",!0),$("math",K,J,"\u229a","\\circledcirc",!0),$("math",K,J,"\u22a1","\\boxdot",!0),$("math",Z,J,"\u25b3","\\bigtriangleup"),$("math",Z,J,"\u25bd","\\bigtriangledown"),$("math",Z,J,"\u2020","\\dagger"),$("math",Z,J,"\u22c4","\\diamond"),$("math",Z,J,"\u22c6","\\star"),$("math",Z,J,"\u25c3","\\triangleleft"),$("math",Z,J,"\u25b9","\\triangleright"),$("math",Z,"open","{","\\{"),$("text",Z,"textord","{","\\{"),$("text",Z,"textord","{","\\textbraceleft"),$("math",Z,"close","}","\\}"),$("text",Z,"textord","}","\\}"),$("text",Z,"textord","}","\\textbraceright"),$("math",Z,"open","{","\\lbrace"),$("math",Z,"close","}","\\rbrace"),$("math",Z,"open","[","\\lbrack"),$("text",Z,"textord","[","\\lbrack"),$("math",Z,"close","]","\\rbrack"),$("text",Z,"textord","]","\\rbrack"),$("math",Z,"open","(","\\lparen"),$("math",Z,"close",")","\\rparen"),$("text",Z,"textord","<","\\textless"),$("text",Z,"textord",">","\\textgreater"),$("math",Z,"open","\u230a","\\lfloor",!0),$("math",Z,"close","\u230b","\\rfloor",!0),$("math",Z,"open","\u2308","\\lceil",!0),$("math",Z,"close","\u2309","\\rceil",!0),$("math",Z,"textord","\\","\\backslash"),$("math",Z,"textord","\u2223","|"),$("math",Z,"textord","\u2223","\\vert"),$("text",Z,"textord","|","\\textbar"),$("math",Z,"textord","\u2225","\\|"),$("math",Z,"textord","\u2225","\\Vert"),$("text",Z,"textord","\u2225","\\textbardbl"),$("text",Z,"textord","~","\\textasciitilde"),$("text",Z,"textord","\\","\\textbackslash"),$("text",Z,"textord","^","\\textasciicircum"),$("math",Z,et,"\u2191","\\uparrow",!0),$("math",Z,et,"\u21d1","\\Uparrow",!0),$("math",Z,et,"\u2193","\\downarrow",!0),$("math",Z,et,"\u21d3","\\Downarrow",!0),$("math",Z,et,"\u2195","\\updownarrow",!0),$("math",Z,et,"\u21d5","\\Updownarrow",!0),$("math",Z,tt,"\u2210","\\coprod"),$("math",Z,tt,"\u22c1","\\bigvee"),$("math",Z,tt,"\u22c0","\\bigwedge"),$("math",Z,tt,"\u2a04","\\biguplus"),$("math",Z,tt,"\u22c2","\\bigcap"),$("math",Z,tt,"\u22c3","\\bigcup"),$("math",Z,tt,"\u222b","\\int"),$("math",Z,tt,"\u222b","\\intop"),$("math",Z,tt,"\u222c","\\iint"),$("math",Z,tt,"\u222d","\\iiint"),$("math",Z,tt,"\u220f","\\prod"),$("math",Z,tt,"\u2211","\\sum"),$("math",Z,tt,"\u2a02","\\bigotimes"),$("math",Z,tt,"\u2a01","\\bigoplus"),$("math",Z,tt,"\u2a00","\\bigodot"),$("math",Z,tt,"\u222e","\\oint"),$("math",Z,tt,"\u222f","\\oiint"),$("math",Z,tt,"\u2230","\\oiiint"),$("math",Z,tt,"\u2a06","\\bigsqcup"),$("math",Z,tt,"\u222b","\\smallint"),$("text",Z,"inner","\u2026","\\textellipsis"),$("math",Z,"inner","\u2026","\\mathellipsis"),$("text",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u22ef","\\@cdots",!0),$("math",Z,"inner","\u22f1","\\ddots",!0),$("math",Z,"textord","\u22ee","\\varvdots"),$("math",Z,"accent-token","\u02ca","\\acute"),$("math",Z,"accent-token","\u02cb","\\grave"),$("math",Z,"accent-token","\xa8","\\ddot"),$("math",Z,"accent-token","~","\\tilde"),$("math",Z,"accent-token","\u02c9","\\bar"),$("math",Z,"accent-token","\u02d8","\\breve"),$("math",Z,"accent-token","\u02c7","\\check"),$("math",Z,"accent-token","^","\\hat"),$("math",Z,"accent-token","\u20d7","\\vec"),$("math",Z,"accent-token","\u02d9","\\dot"),$("math",Z,"accent-token","\u02da","\\mathring"),$("math",Z,Q,"\u0131","\\imath",!0),$("math",Z,Q,"\u0237","\\jmath",!0),$("text",Z,"textord","\u0131","\\i",!0),$("text",Z,"textord","\u0237","\\j",!0),$("text",Z,"textord","\xdf","\\ss",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\u0153","\\oe",!0),$("text",Z,"textord","\xf8","\\o",!0),$("text",Z,"textord","\xc6","\\AE",!0),$("text",Z,"textord","\u0152","\\OE",!0),$("text",Z,"textord","\xd8","\\O",!0),$("text",Z,"accent-token","\u02ca","\\'"),$("text",Z,"accent-token","\u02cb","\\`"),$("text",Z,"accent-token","\u02c6","\\^"),$("text",Z,"accent-token","\u02dc","\\~"),$("text",Z,"accent-token","\u02c9","\\="),$("text",Z,"accent-token","\u02d8","\\u"),$("text",Z,"accent-token","\u02d9","\\."),$("text",Z,"accent-token","\u02da","\\r"),$("text",Z,"accent-token","\u02c7","\\v"),$("text",Z,"accent-token","\xa8",'\\"'),$("text",Z,"accent-token","\u02dd","\\H"),$("text",Z,"accent-token","\u25ef","\\textcircled");var rt={"--":!0,"---":!0,"``":!0,"''":!0};$("text",Z,"textord","\u2013","--"),$("text",Z,"textord","\u2013","\\textendash"),$("text",Z,"textord","\u2014","---"),$("text",Z,"textord","\u2014","\\textemdash"),$("text",Z,"textord","\u2018","`"),$("text",Z,"textord","\u2018","\\textquoteleft"),$("text",Z,"textord","\u2019","'"),$("text",Z,"textord","\u2019","\\textquoteright"),$("text",Z,"textord","\u201c","``"),$("text",Z,"textord","\u201c","\\textquotedblleft"),$("text",Z,"textord","\u201d","''"),$("text",Z,"textord","\u201d","\\textquotedblright"),$("math",Z,"textord","\xb0","\\degree",!0),$("text",Z,"textord","\xb0","\\degree"),$("text",Z,"textord","\xb0","\\textdegree",!0),$("math",Z,Q,"\xa3","\\pounds"),$("math",Z,Q,"\xa3","\\mathsterling",!0),$("text",Z,Q,"\xa3","\\pounds"),$("text",Z,Q,"\xa3","\\textsterling",!0),$("math",K,"textord","\u2720","\\maltese"),$("text",K,"textord","\u2720","\\maltese"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0"," "),$("text",Z,"spacing","\xa0","~");for(var at=0;at<'0123456789/@."'.length;at++){var nt='0123456789/@."'.charAt(at);$("math",Z,"textord",nt,nt)}for(var it=0;it<'0123456789!@*()-=+[]<>|";:?/.,'.length;it++){var ot='0123456789!@*()-=+[]<>|";:?/.,'.charAt(it);$("text",Z,"textord",ot,ot)}for(var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",ht=0;ht<st.length;ht++){var lt=st.charAt(ht);$("math",Z,Q,lt,lt),$("text",Z,"textord",lt,lt)}$("math",K,"textord","C","\u2102"),$("text",K,"textord","C","\u2102"),$("math",K,"textord","H","\u210d"),$("text",K,"textord","H","\u210d"),$("math",K,"textord","N","\u2115"),$("text",K,"textord","N","\u2115"),$("math",K,"textord","P","\u2119"),$("text",K,"textord","P","\u2119"),$("math",K,"textord","Q","\u211a"),$("text",K,"textord","Q","\u211a"),$("math",K,"textord","R","\u211d"),$("text",K,"textord","R","\u211d"),$("math",K,"textord","Z","\u2124"),$("text",K,"textord","Z","\u2124"),$("math",Z,Q,"h","\u210e"),$("text",Z,Q,"h","\u210e");for(var mt="",ct=0;ct<st.length;ct++){var ut=st.charAt(ct);$("math",Z,Q,ut,mt=String.fromCharCode(55349,56320+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56372+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56424+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56580+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56736+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56788+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56840+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56944+ct)),$("text",Z,"textord",ut,mt),ct<26&&($("math",Z,Q,ut,mt=String.fromCharCode(55349,56632+ct)),$("text",Z,"textord",ut,mt),$("math",Z,Q,ut,mt=String.fromCharCode(55349,56476+ct)),$("text",Z,"textord",ut,mt))}$("math",Z,Q,"k",mt=String.fromCharCode(55349,56668)),$("text",Z,"textord","k",mt);for(var pt=0;pt<10;pt++){var dt=pt.toString();$("math",Z,Q,dt,mt=String.fromCharCode(55349,57294+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57314+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57324+pt)),$("text",Z,"textord",dt,mt),$("math",Z,Q,dt,mt=String.fromCharCode(55349,57334+pt)),$("text",Z,"textord",dt,mt)}for(var ft=0;ft<"\xc7\xd0\xde\xe7\xfe".length;ft++){var gt="\xc7\xd0\xde\xe7\xfe".charAt(ft);$("math",Z,Q,gt,gt),$("text",Z,"textord",gt,gt)}$("text",Z,"textord","\xf0","\xf0"),$("text",Z,"textord","\u2013","\u2013"),$("text",Z,"textord","\u2014","\u2014"),$("text",Z,"textord","\u2018","\u2018"),$("text",Z,"textord","\u2019","\u2019"),$("text",Z,"textord","\u201c","\u201c"),$("text",Z,"textord","\u201d","\u201d");var xt=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathdefault","textit","Math-Italic"],["mathdefault","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["","",""],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],vt=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],bt=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],yt=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],wt=function(t,e){return e.size<2?t:bt[t-1][e.size-1]},kt=function(){function t(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=yt[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}var e=t.prototype;return e.extend=function(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var a in e)e.hasOwnProperty(a)&&(r[a]=e[a]);return new t(r)},e.havingStyle=function(t){return this.style===t?this:this.extend({style:t,size:wt(this.textSize,t)})},e.havingCrampedStyle=function(){return this.havingStyle(this.style.cramp())},e.havingSize=function(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:yt[t-1]})},e.havingBaseStyle=function(e){e=e||this.style.text();var r=wt(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})},e.havingBaseSizing=function(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})},e.withColor=function(t){return this.extend({color:t})},e.withPhantom=function(){return this.extend({phantom:!0})},e.withFont=function(t){return this.extend({font:t})},e.withTextFontFamily=function(t){return this.extend({fontFamily:t,font:""})},e.withTextFontWeight=function(t){return this.extend({fontWeight:t,font:""})},e.withTextFontShape=function(t){return this.extend({fontShape:t,font:""})},e.sizingClasses=function(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]},e.baseSizingClasses=function(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]},e.fontMetrics=function(){return this._fontMetrics||(this._fontMetrics=function(t){var e;if(!Y[e=t>=5?0:t>=3?1:2]){var r=Y[e]={cssEmPerMu:V.quad[e]/18};for(var a in V)V.hasOwnProperty(a)&&(r[a]=V[a][e])}return Y[e]}(this.size)),this._fontMetrics},e.getColor=function(){return this.phantom?"transparent":this.color},t}();kt.BASESIZE=6;var St=kt,Mt={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},zt={ex:!0,em:!0,mu:!0},At=function(t){return"string"!=typeof t&&(t=t.unit),t in Mt||t in zt||"ex"===t},Tt=function(t,e){var r;if(t.unit in Mt)r=Mt[t.unit]/e.fontMetrics().ptPerEm/e.sizeMultiplier;else if("mu"===t.unit)r=e.fontMetrics().cssEmPerMu;else{var a;if(a=e.style.isTight()?e.havingStyle(e.style.text()):e,"ex"===t.unit)r=a.fontMetrics().xHeight;else{if("em"!==t.unit)throw new o("Invalid unit: '"+t.unit+"'");r=a.fontMetrics().quad}a!==e&&(r*=a.sizeMultiplier/e.sizeMultiplier)}return Math.min(t.number*r,e.maxSize)},Bt=["\\imath","\u0131","\\jmath","\u0237","\\pounds","\\mathsterling","\\textsterling","\xa3"],Ct=function(t,e,r){return j[r][t]&&j[r][t].replace&&(t=j[r][t].replace),{value:t,metrics:G(t,e,r)}},qt=function(t,e,r,a,n){var i,o=Ct(t,e,r),s=o.metrics;if(t=o.value,s){var h=s.italic;("text"===r||a&&"mathit"===a.font)&&(h=0),i=new E(t,s.height,s.depth,h,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+t+"' in style '"+e+"' and mode '"+r+"'"),i=new E(t,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var l=a.getColor();l&&(i.style.color=l)}return i},Nt=function(t,e){if(T(t.classes)!==T(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;for(var r in t.style)if(t.style.hasOwnProperty(r)&&t.style[r]!==e.style[r])return!1;for(var a in e.style)if(e.style.hasOwnProperty(a)&&t.style[a]!==e.style[a])return!1;return!0},It=function(t){for(var e=0,r=0,a=0,n=0;n<t.children.length;n++){var i=t.children[n];i.height>e&&(e=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}t.height=e,t.depth=r,t.maxFontSize=a},Rt=function(t,e,r,a){var n=new N(t,e,r,a);return It(n),n},Ot=function(t,e,r,a){return new N(t,e,r,a)},Et=function(t){var e=new A(t);return It(e),e},Lt=function(t,e,r){var a="";switch(t){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=t}return a+"-"+("textbf"===e&&"textit"===r?"BoldItalic":"textbf"===e?"Bold":"textit"===e?"Italic":"Regular")},Ht={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Pt={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Dt={fontMap:Ht,makeSymbol:qt,mathsym:function(t,e,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Ct(t,"Main-Bold",e).metrics?qt(t,"Main-Bold",e,r,a.concat(["mathbf"])):"\\"===t||"main"===j[e][t].font?qt(t,"Main-Regular",e,r,a):qt(t,"AMS-Regular",e,r,a.concat(["amsrm"]))},makeSpan:Rt,makeSvgSpan:Ot,makeLineSpan:function(t,e,r){var a=Rt([t],[],e);return a.height=Math.max(r||e.fontMetrics().defaultRuleThickness,e.minRuleThickness),a.style.borderBottomWidth=a.height+"em",a.maxFontSize=1,a},makeAnchor:function(t,e,r,a){var n=new I(t,e,r,a);return It(n),n},makeFragment:Et,wrapFragment:function(t,e){return t instanceof A?Rt([],[t],e):t},makeVList:function(t,e){for(var r=function(t){if("individualShift"===t.positionType){for(var e=t.children,r=[e[0]],a=-e[0].shift-e[0].elem.depth,n=a,i=1;i<e.length;i++){var o=-e[i].shift-n-e[i].elem.depth,s=o-(e[i-1].elem.height+e[i-1].elem.depth);n+=o,r.push({type:"kern",size:s}),r.push(e[i])}return{children:r,depth:a}}var h;if("top"===t.positionType){for(var l=t.positionData,m=0;m<t.children.length;m++){var c=t.children[m];l-="kern"===c.type?c.size:c.elem.height+c.elem.depth}h=l}else if("bottom"===t.positionType)h=-t.positionData;else{var u=t.children[0];if("elem"!==u.type)throw new Error('First child must have type "elem".');if("shift"===t.positionType)h=-u.elem.depth-t.positionData;else{if("firstBaseline"!==t.positionType)throw new Error("Invalid positionType "+t.positionType+".");h=-u.elem.depth}}return{children:t.children,depth:h}}(t),a=r.children,n=r.depth,i=0,o=0;o<a.length;o++){var s=a[o];if("elem"===s.type){var h=s.elem;i=Math.max(i,h.maxFontSize,h.height)}}i+=2;var l=Rt(["pstrut"],[]);l.style.height=i+"em";for(var m=[],c=n,u=n,p=n,d=0;d<a.length;d++){var f=a[d];if("kern"===f.type)p+=f.size;else{var g=f.elem,x=f.wrapperClasses||[],v=f.wrapperStyle||{},b=Rt(x,[l,g],void 0,v);b.style.top=-i-p-g.depth+"em",f.marginLeft&&(b.style.marginLeft=f.marginLeft),f.marginRight&&(b.style.marginRight=f.marginRight),m.push(b),p+=g.height+g.depth}c=Math.min(c,p),u=Math.max(u,p)}var y,w=Rt(["vlist"],m);if(w.style.height=u+"em",c<0){var k=Rt([],[]),S=Rt(["vlist"],[k]);S.style.height=-c+"em";var M=Rt(["vlist-s"],[new E("\u200b")]);y=[Rt(["vlist-r"],[w,M]),Rt(["vlist-r"],[S])]}else y=[Rt(["vlist-r"],[w])];var z=Rt(["vlist-t"],y);return 2===y.length&&z.classes.push("vlist-t2"),z.height=u,z.depth=-c,z},makeOrd:function(t,e,r){var a,n=t.mode,i=t.text,s=["mord"],h="math"===n||"text"===n&&e.font,l=h?e.font:e.fontFamily;if(55349===i.charCodeAt(0)){var m=function(t,e){var r=1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536,a="math"===e?0:1;if(119808<=r&&r<120484){var n=Math.floor((r-119808)/26);return[xt[n][2],xt[n][a]]}if(120782<=r&&r<=120831){var i=Math.floor((r-120782)/10);return[vt[i][2],vt[i][a]]}if(120485===r||120486===r)return[xt[0][2],xt[0][a]];if(120486<r&&r<120782)return["",""];throw new o("Unsupported character: "+t)}(i,n),u=m[0],p=m[1];return qt(i,u,n,e,s.concat(p))}if(l){var d,f;if("boldsymbol"===l||"mathnormal"===l){var g="boldsymbol"===l?function(t,e,r,a){return Ct(t,"Math-BoldItalic",e).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(i,n):(a=i,c.contains(Bt,a)?{fontName:"Main-Italic",fontClass:"mathit"}:/[0-9]/.test(a.charAt(0))?{fontName:"Caligraphic-Regular",fontClass:"mathcal"}:{fontName:"Math-Italic",fontClass:"mathdefault"});d=g.fontName,f=[g.fontClass]}else c.contains(Bt,i)?(d="Main-Italic",f=["mathit"]):h?(d=Ht[l].fontName,f=[l]):(d=Lt(l,e.fontWeight,e.fontShape),f=[l,e.fontWeight,e.fontShape]);if(Ct(i,d,n).metrics)return qt(i,d,n,e,s.concat(f));if(rt.hasOwnProperty(i)&&"Typewriter"===d.substr(0,10)){for(var x=[],v=0;v<i.length;v++)x.push(qt(i[v],d,n,e,s.concat(f)));return Et(x)}}if("mathord"===r){var b=function(t,e,r,a){return/[0-9]/.test(t.charAt(0))||c.contains(Bt,t)?{fontName:"Main-Italic",fontClass:"mathit"}:{fontName:"Math-Italic",fontClass:"mathdefault"}}(i);return qt(i,b.fontName,n,e,s.concat([b.fontClass]))}if("textord"===r){var y=j[n][i]&&j[n][i].font;if("ams"===y){var w=Lt("amsrm",e.fontWeight,e.fontShape);return qt(i,w,n,e,s.concat("amsrm",e.fontWeight,e.fontShape))}if("main"!==y&&y){var k=Lt(y,e.fontWeight,e.fontShape);return qt(i,k,n,e,s.concat(k,e.fontWeight,e.fontShape))}var S=Lt("textrm",e.fontWeight,e.fontShape);return qt(i,S,n,e,s.concat(e.fontWeight,e.fontShape))}throw new Error("unexpected type: "+r+" in makeOrd")},makeGlue:function(t,e){var r=Rt(["mspace"],[],e),a=Tt(t,e);return r.style.marginRight=a+"em",r},staticSvg:function(t,e){var r=Pt[t],a=r[0],n=r[1],i=r[2],o=new H(a),s=new L([o],{width:n+"em",height:i+"em",style:"width:"+n+"em",viewBox:"0 0 "+1e3*n+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),h=Ot(["overlay"],[s],e);return h.height=i,h.style.height=i+"em",h.style.width=n+"em",h},svgData:Pt,tryCombineChars:function(t){for(var e=0;e<t.length-1;e++){var r=t[e],a=t[e+1];r instanceof E&&a instanceof E&&Nt(r,a)&&(r.text+=a.text,r.height=Math.max(r.height,a.height),r.depth=Math.max(r.depth,a.depth),r.italic=a.italic,t.splice(e+1,1),e--)}return t}};function Ft(t,e){var r=Vt(t,e);if(!r)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return r}function Vt(t,e){return t&&t.type===e?t:null}function Ut(t,e){var r=function(t,e){return t&&"atom"===t.type&&t.family===e?t:null}(t,e);if(!r)throw new Error('Expected node of type "atom" and family "'+e+'", but got '+(t?"atom"===t.type?"atom of family "+t.family:"node of type "+t.type:String(t)));return r}function Gt(t){var e=Yt(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function Yt(t){return t&&("atom"===t.type||X.hasOwnProperty(t.type))?t:null}var Wt={number:3,unit:"mu"},Xt={number:4,unit:"mu"},_t={number:5,unit:"mu"},jt={mord:{mop:Wt,mbin:Xt,mrel:_t,minner:Wt},mop:{mord:Wt,mop:Wt,mrel:_t,minner:Wt},mbin:{mord:Xt,mop:Xt,mopen:Xt,minner:Xt},mrel:{mord:_t,mop:_t,mopen:_t,minner:_t},mopen:{},mclose:{mop:Wt,mbin:Xt,mrel:_t,minner:Wt},mpunct:{mord:Wt,mop:Wt,mrel:_t,mopen:Wt,mclose:Wt,mpunct:Wt,minner:Wt},minner:{mord:Wt,mop:Wt,mbin:Xt,mrel:_t,mopen:Wt,mpunct:Wt,minner:Wt}},$t={mord:{mop:Wt},mop:{mord:Wt,mop:Wt},mbin:{},mrel:{},mopen:{},mclose:{mop:Wt},mpunct:{},minner:{mop:Wt}},Zt={},Kt={},Jt={};function Qt(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,i=t.htmlBuilder,o=t.mathmlBuilder,s={type:e,numArgs:a.numArgs,argTypes:a.argTypes,greediness:void 0===a.greediness?1:a.greediness,allowedInText:!!a.allowedInText,allowedInMath:void 0===a.allowedInMath||a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,handler:n},h=0;h<r.length;++h)Zt[r[h]]=s;e&&(i&&(Kt[e]=i),o&&(Jt[e]=o))}function te(t){Qt({type:t.type,names:[],props:{numArgs:0},handler:function(){throw new Error("Should never be called.")},htmlBuilder:t.htmlBuilder,mathmlBuilder:t.mathmlBuilder})}var ee=function(t){var e=Vt(t,"ordgroup");return e?e.body:[t]},re=Dt.makeSpan,ae=["leftmost","mbin","mopen","mrel","mop","mpunct"],ne=["rightmost","mrel","mclose","mpunct"],ie={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT},oe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},se=function(t,e,r,a){void 0===a&&(a=[null,null]);for(var n=[],i=0;i<t.length;i++){var o=ue(t[i],e);if(o instanceof A){var s=o.children;n.push.apply(n,s)}else n.push(o)}if(!r)return n;var h=e;if(1===t.length){var l=Vt(t[0],"sizing")||Vt(t[0],"styling");l&&("sizing"===l.type?h=e.havingSize(l.size):"styling"===l.type&&(h=e.havingStyle(ie[l.style])))}var m=re([a[0]||"leftmost"],[],e),u=re([a[1]||"rightmost"],[],e);return he(n,function(t,e){var r=e.classes[0],a=t.classes[0];"mbin"===r&&c.contains(ne,a)?e.classes[0]="mord":"mbin"===a&&c.contains(ae,r)&&(t.classes[0]="mord")},{node:m},u),he(n,function(t,e){var r=me(e),a=me(t),n=r&&a?t.hasClass("mtight")?$t[r][a]:jt[r][a]:null;if(n)return Dt.makeGlue(n,h)},{node:m},u),n},he=function t(e,r,a,n){n&&e.push(n);for(var i=0;i<e.length;i++){var o=e[i],s=le(o);if(s)t(s.children,r,a);else if("mspace"!==o.classes[0]){var h=r(o,a.node);h&&(a.insertAfter?a.insertAfter(h):(e.unshift(h),i++)),a.node=o,a.insertAfter=function(t){return function(r){e.splice(t+1,0,r),i++}}(i)}}n&&e.pop()},le=function(t){return t instanceof A||t instanceof I?t:null},me=function(t,e){return t?(e&&(t=function t(e,r){var a=le(e);if(a){var n=a.children;if(n.length){if("right"===r)return t(n[n.length-1],"right");if("left"===r)return t(n[0],"left")}}return e}(t,e)),oe[t.classes[0]]||null):null},ce=function(t,e){var r=["nulldelimiter"].concat(t.baseSizingClasses());return re(e.concat(r))},ue=function(t,e,r){if(!t)return re();if(Kt[t.type]){var a=Kt[t.type](t,e);if(r&&e.size!==r.size){a=re(e.sizingClasses(r),[a],e);var n=e.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new o("Got group of unknown type: '"+t.type+"'")};function pe(t,e){var r=re(["base"],t,e),a=re(["strut"]);return a.style.height=r.height+r.depth+"em",a.style.verticalAlign=-r.depth+"em",r.children.unshift(a),r}function de(t,e){var r=null;1===t.length&&"tag"===t[0].type&&(r=t[0].tag,t=t[0].body);for(var a,n=se(t,e,!0),i=[],o=[],s=0;s<n.length;s++)if(o.push(n[s]),n[s].hasClass("mbin")||n[s].hasClass("mrel")||n[s].hasClass("allowbreak")){for(var h=!1;s<n.length-1&&n[s+1].hasClass("mspace")&&!n[s+1].hasClass("newline");)s++,o.push(n[s]),n[s].hasClass("nobreak")&&(h=!0);h||(i.push(pe(o,e)),o=[])}else n[s].hasClass("newline")&&(o.pop(),o.length>0&&(i.push(pe(o,e)),o=[]),i.push(n[s]));o.length>0&&i.push(pe(o,e)),r&&((a=pe(se(r,e,!0))).classes=["tag"],i.push(a));var l=re(["katex-html"],i);if(l.setAttribute("aria-hidden","true"),a){var m=a.children[0];m.style.height=l.height+l.depth+"em",m.style.verticalAlign=-l.depth+"em"}return l}function fe(t){return new A(t)}var ge=function(){function t(t,e){this.type=void 0,this.attributes=void 0,this.children=void 0,this.type=t,this.attributes={},this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.getAttribute=function(t){return this.attributes[t]},e.toNode=function(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t="<"+this.type;for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=" "+e+'="',t+=c.escape(this.attributes[e]),t+='"');t+=">";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+="</"+this.type+">"},e.toText=function(){return this.children.map(function(t){return t.toText()}).join("")},t}(),xe=function(){function t(t){this.text=void 0,this.text=t}var e=t.prototype;return e.toNode=function(){return document.createTextNode(this.text)},e.toMarkup=function(){return c.escape(this.toText())},e.toText=function(){return this.text},t}(),ve={MathNode:ge,TextNode:xe,SpaceNode:function(){function t(t){this.width=void 0,this.character=void 0,this.width=t,this.character=t>=.05555&&t<=.05556?"\u200a":t>=.1666&&t<=.1667?"\u2009":t>=.2222&&t<=.2223?"\u2005":t>=.2777&&t<=.2778?"\u2005\u200a":t>=-.05556&&t<=-.05555?"\u200a\u2063":t>=-.1667&&t<=-.1666?"\u2009\u2063":t>=-.2223&&t<=-.2222?"\u205f\u2063":t>=-.2778&&t<=-.2777?"\u2005\u2063":null}var e=t.prototype;return e.toNode=function(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",this.width+"em"),t},e.toMarkup=function(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+this.width+'em"/>'},e.toText=function(){return this.character?this.character:" "},t}(),newDocumentFragment:fe},be=function(t,e,r){return!j[e][t]||!j[e][t].replace||55349===t.charCodeAt(0)||rt.hasOwnProperty(t)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(t=j[e][t].replace),new ve.TextNode(t)},ye=function(t){return 1===t.length?t[0]:new ve.MathNode("mrow",t)},we=function(t,e){if("texttt"===e.fontFamily)return"monospace";if("textsf"===e.fontFamily)return"textit"===e.fontShape&&"textbf"===e.fontWeight?"sans-serif-bold-italic":"textit"===e.fontShape?"sans-serif-italic":"textbf"===e.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===e.fontShape&&"textbf"===e.fontWeight)return"bold-italic";if("textit"===e.fontShape)return"italic";if("textbf"===e.fontWeight)return"bold";var r=e.font;if(!r||"mathnormal"===r)return null;var a=t.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=t.text;return c.contains(["\\imath","\\jmath"],n)?null:(j[a][n]&&j[a][n].replace&&(n=j[a][n].replace),G(n,Dt.fontMap[r].fontName,a)?Dt.fontMap[r].variant:null)},ke=function(t,e,r){if(1===t.length){var a=Me(t[0],e);return r&&a instanceof ge&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o<t.length;o++){var s=Me(t[o],e);if(s instanceof ge&&n instanceof ge){if("mtext"===s.type&&"mtext"===n.type&&s.getAttribute("mathvariant")===n.getAttribute("mathvariant")){var h;(h=n.children).push.apply(h,s.children);continue}if("mn"===s.type&&"mn"===n.type){var l;(l=n.children).push.apply(l,s.children);continue}if("mi"===s.type&&1===s.children.length&&"mn"===n.type){var m=s.children[0];if(m instanceof xe&&"."===m.text){var c;(c=n.children).push.apply(c,s.children);continue}}else if("mi"===n.type&&1===n.children.length){var u=n.children[0];if(u instanceof xe&&"\u0338"===u.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){var p=s.children[0];p instanceof xe&&p.text.length>0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),n=s}return i},Se=function(t,e,r){return ye(ke(t,e,r))},Me=function(t,e){if(!t)return new ve.MathNode("mrow");if(Jt[t.type])return Jt[t.type](t,e);throw new o("Got group of unknown type: '"+t.type+"'")};function ze(t,e,r,a){var n,i=ke(t,r);n=1===i.length&&i[0]instanceof ge&&c.contains(["mrow","mtable"],i[0].type)?i[0]:new ve.MathNode("mrow",i);var o=new ve.MathNode("annotation",[new ve.TextNode(e)]);o.setAttribute("encoding","application/x-tex");var s=new ve.MathNode("semantics",[n,o]),h=new ve.MathNode("math",[s]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");var l=a?"katex":"katex-mathml";return Dt.makeSpan([l],[h])}var Ae=function(t){return new St({style:t.displayMode?w.DISPLAY:w.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},Te=function(t,e){if(e.displayMode){var r=["katex-display"];e.leqno&&r.push("leqno"),e.fleqn&&r.push("fleqn"),t=Dt.makeSpan(r,[t])}return t},Be=function(t,e,r){var a,n=Ae(r);if("mathml"===r.output)return ze(t,e,n,!0);if("html"===r.output){var i=de(t,n);a=Dt.makeSpan(["katex"],[i])}else{var o=ze(t,e,n,!1),s=de(t,n);a=Dt.makeSpan(["katex"],[o,s])}return Te(a,r)},Ce={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb"},qe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ne=function(t){return"ordgroup"===t.type?t.body.length:1},Ie=function(t,e,r,a){var n,i=t.height+t.depth+2*r;if(/fbox|color/.test(e)){if(n=Dt.makeSpan(["stretchy",e],[],a),"fbox"===e){var o=a.color&&a.getColor();o&&(n.style.borderColor=o)}}else{var s=[];/^[bx]cancel$/.test(e)&&s.push(new P({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(e)&&s.push(new P({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new L(s,{width:"100%",height:i+"em"});n=Dt.makeSvgSpan([],[h],a)}return n.height=i,n.style.height=i+"em",n},Re=function(t){var e=new ve.MathNode("mo",[new ve.TextNode(Ce[t.substr(1)])]);return e.setAttribute("stretchy","true"),e},Oe=function(t,e){var r=function(){var r=4e5,a=t.label.substr(1);if(c.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s=Ne(t.base);if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][h],n=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=a+h):(r=[0,600,1033,2339,2340][h],n=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var l=new H(i),m=new L([l],{width:"100%",height:o+"em",viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Dt.makeSvgSpan([],[m],e),minWidth:0,height:o}}var u,p,d=[],f=qe[a],g=f[0],x=f[1],v=f[2],b=v/1e3,y=g.length;if(1===y)u=["hide-tail"],p=[f[3]];else if(2===y)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==y)throw new Error("Correct katexImagesData or update code here to support\n                    "+y+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var w=0;w<y;w++){var k=new H(g[w]),S=new L([k],{width:"400em",height:b+"em",viewBox:"0 0 "+r+" "+v,preserveAspectRatio:p[w]+" slice"}),M=Dt.makeSvgSpan([u[w]],[S],e);if(1===y)return{span:M,minWidth:x,height:b};M.style.height=b+"em",d.push(M)}return{span:Dt.makeSpan(["stretchy"],d,e),minWidth:x,height:b}}(),a=r.span,n=r.minWidth,i=r.height;return a.height=i,a.style.height=i+"em",n>0&&(a.style.minWidth=n+"em"),a},Ee=function(t,e){var r,a,n,i=Vt(t,"supsub");i?(r=(a=Ft(i.base,"accent")).base,i.base=r,n=function(t){if(t instanceof N)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}(ue(i,e)),i.base=a):r=(a=Ft(t,"accent")).base;var o=ue(r,e.havingCrampedStyle()),s=0;if(a.isShifty&&c.isCharacterBox(r)){var h=c.getBaseElem(r);s=D(ue(h,e.havingCrampedStyle())).skew}var l,m=Math.min(o.height,e.fontMetrics().xHeight);if(a.isStretchy)l=Oe(a,e),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+2*s+"em)",marginLeft:2*s+"em"}:void 0}]},e);else{var u,p;"\\vec"===a.label?(u=Dt.staticSvg("vec",e),p=Dt.svgData.vec[1]):((u=D(u=Dt.makeOrd({mode:a.mode,text:a.label},e,"textord"))).italic=0,p=u.width),l=Dt.makeSpan(["accent-body"],[u]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),m=o.height);var f=s;d||(f-=p/2),l.style.left=f+"em","\\textcircled"===a.label&&(l.style.top=".2em"),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:-m},{type:"elem",elem:l}]},e)}var g=Dt.makeSpan(["mord","accent"],[l],e);return n?(n.children[0]=g,n.height=Math.max(g.height,n.height),n.classes[0]="mord",n):g},Le=function(t,e){var r=t.isStretchy?Re(t.label):new ve.MathNode("mo",[be(t.label,t.mode)]),a=new ve.MathNode("mover",[Me(t.base,e),r]);return a.setAttribute("accent","true"),a},He=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(function(t){return"\\"+t}).join("|"));Qt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(t,e){var r=e[0],a=!He.test(t.funcName),n=!a||"\\widehat"===t.funcName||"\\widetilde"===t.funcName||"\\widecheck"===t.funcName;return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=e[0];return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:function(t,e){var r=ue(t.base,e),a=Oe(t,e),n="\\utilde"===t.label?.12:0,i=Dt.makeVList({positionType:"bottom",positionData:a.height+n,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","accentunder"],[i],e)},mathmlBuilder:function(t,e){var r=Re(t.label),a=new ve.MathNode("munder",[Me(t.base,e),r]);return a.setAttribute("accentunder","true"),a}});var Pe=function(t){var e=new ve.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};Qt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:r[0]}},htmlBuilder:function(t,e){var r,a=e.style,n=e.havingStyle(a.sup()),i=Dt.wrapFragment(ue(t.body,n,e),e);i.classes.push("x-arrow-pad"),t.below&&(n=e.havingStyle(a.sub()),(r=Dt.wrapFragment(ue(t.below,n,e),e)).classes.push("x-arrow-pad"));var o,s=Oe(t,e),h=-e.fontMetrics().axisHeight+.5*s.height,l=-e.fontMetrics().axisHeight-.5*s.height-.111;if((i.depth>.25||"\\xleftequilibrium"===t.label)&&(l-=i.depth),r){var m=-e.fontMetrics().axisHeight+r.height+.5*s.height+.111;o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h},{type:"elem",elem:r,shift:m}]},e)}else o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h}]},e);return o.children[0].children[0].children[1].classes.push("svg-align"),Dt.makeSpan(["mrel","x-arrow"],[o],e)},mathmlBuilder:function(t,e){var r,a=Re(t.label);if(t.body){var n=Pe(Me(t.body,e));if(t.below){var i=Pe(Me(t.below,e));r=new ve.MathNode("munderover",[a,i,n])}else r=new ve.MathNode("mover",[a,n])}else if(t.below){var o=Pe(Me(t.below,e));r=new ve.MathNode("munder",[a,o])}else r=Pe(),r=new ve.MathNode("mover",[a,r]);return r}}),Qt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){for(var r=t.parser,a=Ft(e[0],"ordgroup").body,n="",i=0;i<a.length;i++){n+=Ft(a[i],"textord").text}var s=parseInt(n);if(isNaN(s))throw new o("\\@char has non-numeric argument "+n);return{type:"textord",mode:r.mode,text:String.fromCharCode(s)}}});var De=function(t,e){var r=se(t.body,e.withColor(t.color),!1);return Dt.makeFragment(r)},Fe=function(t,e){var r=ke(t.body,e.withColor(t.color)),a=new ve.MathNode("mstyle",r);return a.setAttribute("mathcolor",t.color),a};Qt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","original"]},handler:function(t,e){var r=t.parser,a=Ft(e[0],"color-token").color,n=e[1];return{type:"color",mode:r.mode,color:a,body:ee(n)}},htmlBuilder:De,mathmlBuilder:Fe}),Qt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,greediness:3,argTypes:["color"]},handler:function(t,e){var r=t.parser,a=t.breakOnTokenText,n=Ft(e[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:De,mathmlBuilder:Fe}),Qt({type:"cr",names:["\\cr","\\newline"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=r[0],o="\\cr"===n,s=!1;return o||(s=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode")),{type:"cr",mode:a.mode,newLine:s,newRow:o,size:i&&Ft(i,"size").value}},htmlBuilder:function(t,e){if(t.newRow)throw new o("\\cr valid only within a tabular/array environment");var r=Dt.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=Tt(t.size,e)+"em")),r},mathmlBuilder:function(t,e){var r=new ve.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",Tt(t.size,e)+"em")),r}});var Ve=function(t,e,r){var a=G(j.math[t]&&j.math[t].replace||t,e,r);if(!a)throw new Error("Unsupported symbol "+t+" and font size "+e+".");return a},Ue=function(t,e,r,a){var n=r.havingBaseStyle(e),i=Dt.makeSpan(a.concat(n.sizingClasses(r)),[t],r),o=n.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=n.sizeMultiplier,i},Ge=function(t,e,r){var a=e.havingBaseStyle(r),n=(1-e.sizeMultiplier/a.sizeMultiplier)*e.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=n+"em",t.height-=n,t.depth+=n},Ye=function(t,e,r,a,n,i){var o=function(t,e,r,a){return Dt.makeSymbol(t,"Size"+e+"-Regular",r,a)}(t,e,n,a),s=Ue(Dt.makeSpan(["delimsizing","size"+e],[o],a),w.TEXT,a,i);return r&&Ge(s,a,w.TEXT),s},We=function(t,e,r){var a;return a="Size1-Regular"===e?"delim-size1":"delim-size4",{type:"elem",elem:Dt.makeSpan(["delimsizinginner",a],[Dt.makeSpan([],[Dt.makeSymbol(t,e,r)])])}},Xe={type:"kern",size:-.005},_e=function(t,e,r,a,n,i){var o,s,h,l;o=h=l=t,s=null;var m="Size1-Regular";"\\uparrow"===t?h=l="\u23d0":"\\Uparrow"===t?h=l="\u2016":"\\downarrow"===t?o=h="\u23d0":"\\Downarrow"===t?o=h="\u2016":"\\updownarrow"===t?(o="\\uparrow",h="\u23d0",l="\\downarrow"):"\\Updownarrow"===t?(o="\\Uparrow",h="\u2016",l="\\Downarrow"):"["===t||"\\lbrack"===t?(o="\u23a1",h="\u23a2",l="\u23a3",m="Size4-Regular"):"]"===t||"\\rbrack"===t?(o="\u23a4",h="\u23a5",l="\u23a6",m="Size4-Regular"):"\\lfloor"===t||"\u230a"===t?(h=o="\u23a2",l="\u23a3",m="Size4-Regular"):"\\lceil"===t||"\u2308"===t?(o="\u23a1",h=l="\u23a2",m="Size4-Regular"):"\\rfloor"===t||"\u230b"===t?(h=o="\u23a5",l="\u23a6",m="Size4-Regular"):"\\rceil"===t||"\u2309"===t?(o="\u23a4",h=l="\u23a5",m="Size4-Regular"):"("===t||"\\lparen"===t?(o="\u239b",h="\u239c",l="\u239d",m="Size4-Regular"):")"===t||"\\rparen"===t?(o="\u239e",h="\u239f",l="\u23a0",m="Size4-Regular"):"\\{"===t||"\\lbrace"===t?(o="\u23a7",s="\u23a8",l="\u23a9",h="\u23aa",m="Size4-Regular"):"\\}"===t||"\\rbrace"===t?(o="\u23ab",s="\u23ac",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\lgroup"===t||"\u27ee"===t?(o="\u23a7",l="\u23a9",h="\u23aa",m="Size4-Regular"):"\\rgroup"===t||"\u27ef"===t?(o="\u23ab",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\lmoustache"===t||"\u23b0"===t?(o="\u23a7",l="\u23ad",h="\u23aa",m="Size4-Regular"):"\\rmoustache"!==t&&"\u23b1"!==t||(o="\u23ab",l="\u23a9",h="\u23aa",m="Size4-Regular");var c=Ve(o,m,n),u=c.height+c.depth,p=Ve(h,m,n),d=p.height+p.depth,f=Ve(l,m,n),g=f.height+f.depth,x=0,v=1;if(null!==s){var b=Ve(s,m,n);x=b.height+b.depth,v=2}var y=u+g+x,k=Math.max(0,Math.ceil((e-y)/(v*d))),S=y+k*v*d,M=a.fontMetrics().axisHeight;r&&(M*=a.sizeMultiplier);var z=S/2-M,A=.005*(k+1)-d,T=[];if(T.push(We(l,m,n)),null===s)for(var B=0;B<k;B++)T.push(Xe),T.push(We(h,m,n));else{for(var C=0;C<k;C++)T.push(Xe),T.push(We(h,m,n));T.push({type:"kern",size:A}),T.push(We(h,m,n)),T.push(Xe),T.push(We(s,m,n));for(var q=0;q<k;q++)T.push(Xe),T.push(We(h,m,n))}T.push({type:"kern",size:A}),T.push(We(h,m,n)),T.push(Xe),T.push(We(o,m,n));var N=a.havingBaseStyle(w.TEXT),I=Dt.makeVList({positionType:"bottom",positionData:z,children:T},N);return Ue(Dt.makeSpan(["delimsizing","mult"],[I],N),w.TEXT,a,i)},je=function(t,e,r,a,n){var i=function(t,e,r){e*=1e3;var a="";switch(t){case"sqrtMain":a=function(t,e){return"M95,"+(622+t+e)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+t/2.075+" -"+t+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+t)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize1":a=function(t,e){return"M263,"+(601+t+e)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+t/2.084+" -"+t+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+t)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize2":a=function(t,e){return"M983 "+(10+t+e)+"\nl"+t/3.13+" -"+t+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+t)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+t)+" "+e+"h400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize3":a=function(t,e){return"M424,"+(2398+t+e)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+t/4.223+" -"+t+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+t)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+t)+" "+e+"\nh400000v"+(40+t)+"h-400000z"}(e,80);break;case"sqrtSize4":a=function(t,e){return"M473,"+(2713+t+e)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+t/5.298+" -"+t+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+t)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+t)+" "+e+"h400000v"+(40+t)+"H1017.7z"}(e,80);break;case"sqrtTall":a=function(t,e,r){return"M702 "+(t+e)+"H400000"+(40+t)+"\nH742v"+(r-54-e-t)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+e+"H400000v"+(40+t)+"H742z"}(e,80,r)}return a}(t,a,r),o=new H(t,i),s=new L([o],{width:"400em",height:e+"em",viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Dt.makeSvgSpan(["hide-tail"],[s],n)},$e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],Ze=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],Ke=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Je=[0,1.2,1.8,2.4,3],Qe=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],tr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],er=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],rr=function(t){if("small"===t.type)return"Main-Regular";if("large"===t.type)return"Size"+t.size+"-Regular";if("stack"===t.type)return"Size4-Regular";throw new Error("Add support for delim type '"+t.type+"' here.")},ar=function(t,e,r,a){for(var n=Math.min(2,3-a.style.size);n<r.length&&"stack"!==r[n].type;n++){var i=Ve(t,rr(r[n]),"math"),o=i.height+i.depth;if("small"===r[n].type&&(o*=a.havingBaseStyle(r[n].style).sizeMultiplier),o>e)return r[n]}return r[r.length-1]},nr=function(t,e,r,a,n,i){var o;"<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),o=c.contains(Ke,t)?Qe:c.contains($e,t)?er:tr;var s=ar(t,e,o,a);return"small"===s.type?function(t,e,r,a,n,i){var o=Dt.makeSymbol(t,"Main-Regular",n,a),s=Ue(o,e,a,i);return r&&Ge(s,a,e),s}(t,s.style,r,a,n,i):"large"===s.type?Ye(t,s.size,r,a,n,i):_e(t,e,r,a,n,i)},ir=function(t,e){var r,a,n=e.havingBaseSizing(),i=ar("\\surd",t*n.sizeMultiplier,er,n),o=n.sizeMultiplier,s=Math.max(0,e.minRuleThickness-e.fontMetrics().sqrtRuleThickness),h=0,l=0,m=0;return"small"===i.type?(t<1?o=1:t<1.4&&(o=.7),l=(1+s)/o,(r=je("sqrtMain",h=(1+s+.08)/o,m=1e3+1e3*s+80,s,e)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*Je[i.size],l=(Je[i.size]+s)/o,h=(Je[i.size]+s+.08)/o,(r=je("sqrtSize"+i.size,h,m,s,e)).style.minWidth="1.02em",a=1/o):(h=t+s+.08,l=t+s,m=Math.floor(1e3*t+s)+80,(r=je("sqrtTall",h,m,s,e)).style.minWidth="0.742em",a=1.056),r.height=l,r.style.height=h+"em",{span:r,advanceWidth:a,ruleWidth:(e.fontMetrics().sqrtRuleThickness+s)*o}},or=function(t,e,r,a,n){if("<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),c.contains($e,t)||c.contains(Ke,t))return Ye(t,e,!1,r,a,n);if(c.contains(Ze,t))return _e(t,Je[e],!1,r,a,n);throw new o("Illegal delimiter: '"+t+"'")},sr=nr,hr=function(t,e,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,h=Math.max(e-o,r+o),l=Math.max(h/500*901,2*h-s);return nr(t,l,!0,a,n,i)},lr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},mr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function cr(t,e){var r=Yt(t);if(r&&c.contains(mr,r.text))return r;throw new o("Invalid delimiter: '"+(r?r.text:JSON.stringify(t))+"' after '"+e.funcName+"'",t)}function ur(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Qt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:lr[t.funcName].size,mclass:lr[t.funcName].mclass,delim:r.text}},htmlBuilder:function(t,e){return"."===t.delim?Dt.makeSpan([t.mclass]):or(t.delim,t.size,e,t.mode,[t.mclass])},mathmlBuilder:function(t){var e=[];"."!==t.delim&&e.push(be(t.delim,t.mode));var r=new ve.MathNode("mo",e);return"mopen"===t.mclass||"mclose"===t.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r}}),Qt({type:"leftright-right",names:["\\right"],props:{numArgs:1},handler:function(t,e){var r=t.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new o("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:cr(e[0],t).text,color:r}}}),Qt({type:"leftright",names:["\\left"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t),a=t.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Ft(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(t,e){ur(t);for(var r,a,n=se(t.body,e,!0,["mopen","mclose"]),i=0,o=0,s=!1,h=0;h<n.length;h++)n[h].isMiddle?s=!0:(i=Math.max(n[h].height,i),o=Math.max(n[h].depth,o));if(i*=e.sizeMultiplier,o*=e.sizeMultiplier,r="."===t.left?ce(e,["mopen"]):hr(t.left,i,o,e,t.mode,["mopen"]),n.unshift(r),s)for(var l=1;l<n.length;l++){var m=n[l].isMiddle;m&&(n[l]=hr(m.delim,i,o,m.options,t.mode,[]))}if("."===t.right)a=ce(e,["mclose"]);else{var c=t.rightColor?e.withColor(t.rightColor):e;a=hr(t.right,i,o,c,t.mode,["mclose"])}return n.push(a),Dt.makeSpan(["minner"],n,e)},mathmlBuilder:function(t,e){ur(t);var r=ke(t.body,e);if("."!==t.left){var a=new ve.MathNode("mo",[be(t.left,t.mode)]);a.setAttribute("fence","true"),r.unshift(a)}if("."!==t.right){var n=new ve.MathNode("mo",[be(t.right,t.mode)]);n.setAttribute("fence","true"),t.rightColor&&n.setAttribute("mathcolor",t.rightColor),r.push(n)}return ye(r)}}),Qt({type:"middle",names:["\\middle"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t);if(!t.parser.leftrightDepth)throw new o("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},htmlBuilder:function(t,e){var r;if("."===t.delim)r=ce(e,[]);else{r=or(t.delim,1,e,t.mode,[]);var a={delim:t.delim,options:e};r.isMiddle=a}return r},mathmlBuilder:function(t,e){var r="\\vert"===t.delim||"|"===t.delim?be("|","text"):be(t.delim,t.mode),a=new ve.MathNode("mo",[r]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var pr=function(t,e){var r,a,n=Dt.wrapFragment(ue(t.body,e),e),i=t.label.substr(1),o=e.sizeMultiplier,s=0,h=c.isCharacterBox(t.body);if("sout"===i)(r=Dt.makeSpan(["stretchy","sout"])).height=e.fontMetrics().defaultRuleThickness/o,s=-.5*e.fontMetrics().xHeight;else{/cancel/.test(i)?h||n.classes.push("cancel-pad"):n.classes.push("boxpad");var l=0,m=0;/box/.test(i)?(m=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),l=e.fontMetrics().fboxsep+("colorbox"===i?0:m)):l=h?.2:0,r=Ie(n,i,l,e),/fbox|boxed|fcolorbox/.test(i)&&(r.style.borderStyle="solid",r.style.borderWidth=m+"em"),s=n.depth+l,t.backgroundColor&&(r.style.backgroundColor=t.backgroundColor,t.borderColor&&(r.style.borderColor=t.borderColor))}return a=t.backgroundColor?Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:s},{type:"elem",elem:n,shift:0}]},e):Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:0},{type:"elem",elem:r,shift:s,wrapperClasses:/cancel/.test(i)?["svg-align"]:[]}]},e),/cancel/.test(i)&&(a.height=n.height,a.depth=n.depth),/cancel/.test(i)&&!h?Dt.makeSpan(["mord","cancel-lap"],[a],e):Dt.makeSpan(["mord"],[a],e)},dr=function(t,e){var r=0,a=new ve.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Me(t.body,e)]);switch(t.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===t.label){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(t.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return t.backgroundColor&&a.setAttribute("mathbackground",t.backgroundColor),a};Qt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:["color","color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=Ft(e[1],"color-token").color,s=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(t,e){return{type:"enclose",mode:t.parser.mode,label:"\\fbox",body:e[0]}}}),Qt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout"],props:{numArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=e[0];return{type:"enclose",mode:a.mode,label:n,body:i}},htmlBuilder:pr,mathmlBuilder:dr});var fr={};function gr(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,i=t.htmlBuilder,o=t.mathmlBuilder,s={type:e,numArgs:a.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:n},h=0;h<r.length;++h)fr[r[h]]=s;i&&(Kt[e]=i),o&&(Jt[e]=o)}function xr(t){var e=[];t.consumeSpaces();for(var r=t.fetch().text;"\\hline"===r||"\\hdashline"===r;)t.consume(),e.push("\\hdashline"===r),t.consumeSpaces(),r=t.fetch().text;return e}function vr(t,e,r){var a=e.hskipBeforeAndAfter,n=e.addJot,i=e.cols,s=e.arraystretch,h=e.colSeparationType;if(t.gullet.beginGroup(),t.gullet.macros.set("\\\\","\\cr"),!s){var l=t.gullet.expandMacroAsText("\\arraystretch");if(null==l)s=1;else if(!(s=parseFloat(l))||s<0)throw new o("Invalid \\arraystretch: "+l)}t.gullet.beginGroup();var m=[],c=[m],u=[],p=[];for(p.push(xr(t));;){var d=t.parseExpression(!1,"\\cr");t.gullet.endGroup(),t.gullet.beginGroup(),d={type:"ordgroup",mode:t.mode,body:d},r&&(d={type:"styling",mode:t.mode,style:r,body:[d]}),m.push(d);var f=t.fetch().text;if("&"===f)t.consume();else{if("\\end"===f){1===m.length&&"styling"===d.type&&0===d.body[0].body.length&&c.pop(),p.length<c.length+1&&p.push([]);break}if("\\cr"!==f)throw new o("Expected & or \\\\ or \\cr or \\end",t.nextToken);var g=Ft(t.parseFunction(),"cr");u.push(g.size),p.push(xr(t)),m=[],c.push(m)}}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:n,arraystretch:s,body:c,cols:i,rowGaps:u,hskipBeforeAndAfter:a,hLinesBeforeRow:p,colSeparationType:h}}function br(t){return"d"===t.substr(0,1)?"display":"text"}var yr=function(t,e){var r,a,n=t.body.length,i=t.hLinesBeforeRow,s=0,h=new Array(n),l=[],m=Math.max(e.fontMetrics().arrayRuleWidth,e.minRuleThickness),u=1/e.fontMetrics().ptPerEm,p=5*u;t.colSeparationType&&"small"===t.colSeparationType&&(p=e.havingStyle(w.SCRIPT).sizeMultiplier/e.sizeMultiplier*.2778);var d=12*u,f=3*u,g=t.arraystretch*d,x=.7*g,v=.3*g,b=0;function y(t){for(var e=0;e<t.length;++e)e>0&&(b+=.25),l.push({pos:b,isDashed:t[e]})}for(y(i[0]),r=0;r<t.body.length;++r){var k=t.body[r],S=x,M=v;s<k.length&&(s=k.length);var z=new Array(k.length);for(a=0;a<k.length;++a){var A=ue(k[a],e);M<A.depth&&(M=A.depth),S<A.height&&(S=A.height),z[a]=A}var T=t.rowGaps[r],B=0;T&&(B=Tt(T,e))>0&&(M<(B+=v)&&(M=B),B=0),t.addJot&&(M+=f),z.height=S,z.depth=M,b+=S,z.pos=b,b+=M+B,h[r]=z,y(i[r+1])}var C,q,N=b/2+e.fontMetrics().axisHeight,I=t.cols||[],R=[];for(a=0,q=0;a<s||q<I.length;++a,++q){for(var O=I[q]||{},E=!0;"separator"===O.type;){if(E||((C=Dt.makeSpan(["arraycolsep"],[])).style.width=e.fontMetrics().doubleRuleSep+"em",R.push(C)),"|"!==O.separator&&":"!==O.separator)throw new o("Invalid separator type: "+O.separator);var L="|"===O.separator?"solid":"dashed",H=Dt.makeSpan(["vertical-separator"],[],e);H.style.height=b+"em",H.style.borderRightWidth=m+"em",H.style.borderRightStyle=L,H.style.margin="0 -"+m/2+"em",H.style.verticalAlign=-(b-N)+"em",R.push(H),O=I[++q]||{},E=!1}if(!(a>=s)){var P=void 0;(a>0||t.hskipBeforeAndAfter)&&0!==(P=c.deflt(O.pregap,p))&&((C=Dt.makeSpan(["arraycolsep"],[])).style.width=P+"em",R.push(C));var D=[];for(r=0;r<n;++r){var F=h[r],V=F[a];if(V){var U=F.pos-N;V.depth=F.depth,V.height=F.height,D.push({type:"elem",elem:V,shift:U})}}D=Dt.makeVList({positionType:"individualShift",children:D},e),D=Dt.makeSpan(["col-align-"+(O.align||"c")],[D]),R.push(D),(a<s-1||t.hskipBeforeAndAfter)&&0!==(P=c.deflt(O.postgap,p))&&((C=Dt.makeSpan(["arraycolsep"],[])).style.width=P+"em",R.push(C))}}if(h=Dt.makeSpan(["mtable"],R),l.length>0){for(var G=Dt.makeLineSpan("hline",e,m),Y=Dt.makeLineSpan("hdashline",e,m),W=[{type:"elem",elem:h,shift:0}];l.length>0;){var X=l.pop(),_=X.pos-N;X.isDashed?W.push({type:"elem",elem:Y,shift:_}):W.push({type:"elem",elem:G,shift:_})}h=Dt.makeVList({positionType:"individualShift",children:W},e)}return Dt.makeSpan(["mord"],[h],e)},wr={c:"center ",l:"left ",r:"right "},kr=function(t,e){var r=new ve.MathNode("mtable",t.body.map(function(t){return new ve.MathNode("mtr",t.map(function(t){return new ve.MathNode("mtd",[Me(t,e)])}))})),a=.5===t.arraystretch?.1:.16+t.arraystretch-1+(t.addJot?.09:0);r.setAttribute("rowspacing",a+"em");var n="",i="";if(t.cols){var o=t.cols,s="",h=!1,l=0,m=o.length;"separator"===o[0].type&&(n+="top ",l=1),"separator"===o[o.length-1].type&&(n+="bottom ",m-=1);for(var c=l;c<m;c++)"align"===o[c].type?(i+=wr[o[c].align],h&&(s+="none "),h=!0):"separator"===o[c].type&&h&&(s+="|"===o[c].separator?"solid ":"dashed ",h=!1);r.setAttribute("columnalign",i.trim()),/[sd]/.test(s)&&r.setAttribute("columnlines",s.trim())}if("align"===t.colSeparationType){for(var u=t.cols||[],p="",d=1;d<u.length;d++)p+=d%2?"0em ":"1em ";r.setAttribute("columnspacing",p.trim())}else"alignat"===t.colSeparationType?r.setAttribute("columnspacing","0em"):"small"===t.colSeparationType?r.setAttribute("columnspacing","0.2778em"):r.setAttribute("columnspacing","1em");var f="",g=t.hLinesBeforeRow;n+=g[0].length>0?"left ":"",n+=g[g.length-1].length>0?"right ":"";for(var x=1;x<g.length-1;x++)f+=0===g[x].length?"none ":g[x][0]?"dashed ":"solid ";return/[sd]/.test(f)&&r.setAttribute("rowlines",f.trim()),""!==n&&(r=new ve.MathNode("menclose",[r])).setAttribute("notation",n.trim()),t.arraystretch&&t.arraystretch<1&&(r=new ve.MathNode("mstyle",[r])).setAttribute("scriptlevel","1"),r},Sr=function(t,e){var r,a=[],n=vr(t.parser,{cols:a,addJot:!0},"display"),i=0,s={type:"ordgroup",mode:t.mode,body:[]},h=Vt(e[0],"ordgroup");if(h){for(var l="",m=0;m<h.body.length;m++){l+=Ft(h.body[m],"textord").text}r=Number(l),i=2*r}var c=!i;n.body.forEach(function(t){for(var e=1;e<t.length;e+=2){var a=Ft(t[e],"styling");Ft(a.body[0],"ordgroup").body.unshift(s)}if(c)i<t.length&&(i=t.length);else{var n=t.length/2;if(r<n)throw new o("Too many math in a row: expected "+r+", but got "+n,t[0])}});for(var u=0;u<i;++u){var p="r",d=0;u%2==1?p="l":u>0&&c&&(d=1),a[u]={type:"align",align:p,pregap:d,postgap:0}}return n.colSeparationType=c?"align":"alignat",n};gr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(t,e){var r={cols:(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lcr".indexOf(e))return{type:"align",align:e};if("|"===e)return{type:"separator",separator:"|"};if(":"===e)return{type:"separator",separator:":"};throw new o("Unknown column alignment: "+e,t)}),hskipBeforeAndAfter:!0};return vr(t.parser,r,br(t.envName))},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],props:{numArgs:0},handler:function(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName],r=vr(t.parser,{hskipBeforeAndAfter:!1},br(t.envName));return e?{type:"leftright",mode:t.mode,body:[r],left:e[0],right:e[1],rightColor:void 0}:r},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:.5},"script");return e.colSeparationType="small",e},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(t,e){var r=(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lc".indexOf(e))return{type:"align",align:e};throw new o("Unknown column alignment: "+e,t)});if(r.length>1)throw new o("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=vr(t.parser,a,"script")).body[0].length>1)throw new o("{subarray} can contain only one column");return a},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["cases","dcases"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},br(t.envName));return{type:"leftright",mode:t.mode,body:[e],left:"\\{",right:".",rightColor:void 0}},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["aligned"],props:{numArgs:0},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["gathered"],props:{numArgs:0},handler:function(t){return vr(t.parser,{cols:[{type:"align",align:"c"}],addJot:!0},"display")},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["alignedat"],props:{numArgs:1},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),Qt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(t,e){throw new o(t.funcName+" valid only within array environment")}});var Mr=fr;Qt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];if("ordgroup"!==n.type)throw new o("Invalid environment name",n);for(var i="",s=0;s<n.body.length;++s)i+=Ft(n.body[s],"textord").text;if("\\begin"===a){if(!Mr.hasOwnProperty(i))throw new o("No such environment: "+i,n);var h=Mr[i],l=r.parseArguments("\\begin{"+i+"}",h),m=l.args,c=l.optArgs,u={mode:r.mode,envName:i,parser:r},p=h.handler(u,m,c);r.expect("\\end",!1);var d=r.nextToken,f=Ft(r.parseFunction(),"environment");if(f.name!==i)throw new o("Mismatch: \\begin{"+i+"} matched by \\end{"+f.name+"}",d);return p}return{type:"environment",mode:r.mode,name:i,nameGroup:n}}});var zr=Dt.makeSpan;function Ar(t,e){var r=se(t.body,e,!0);return zr([t.mclass],r,e)}function Tr(t,e){var r,a=ke(t.body,e);return"minner"===t.mclass?ve.newDocumentFragment(a):("mord"===t.mclass?t.isCharacterBox?(r=a[0]).type="mi":r=new ve.MathNode("mi",a):(t.isCharacterBox?(r=a[0]).type="mo":r=new ve.MathNode("mo",a),"mbin"===t.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===t.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"!==t.mclass&&"mclose"!==t.mclass||(r.attributes.lspace="0em",r.attributes.rspace="0em")),r)}Qt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+a.substr(5),body:ee(n),isCharacterBox:c.isCharacterBox(n)}},htmlBuilder:Ar,mathmlBuilder:Tr});var Br=function(t){var e="ordgroup"===t.type&&t.body.length?t.body[0]:t;return"atom"!==e.type||"bin"!==e.family&&"rel"!==e.family?"mord":"m"+e.family};Qt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:function(t,e){return{type:"mclass",mode:t.parser.mode,mclass:Br(e[0]),body:[e[1]],isCharacterBox:c.isCharacterBox(e[1])}}}),Qt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,i=e[1],o=e[0];r="\\stackrel"!==n?Br(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:ee(i)},h={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===n?null:o,sub:"\\underset"===n?o:null};return{type:"mclass",mode:a.mode,mclass:r,body:[h],isCharacterBox:c.isCharacterBox(h)}},htmlBuilder:Ar,mathmlBuilder:Tr});var Cr=function(t,e){var r=t.font,a=e.withFont(r);return ue(t.body,a)},qr=function(t,e){var r=t.font,a=e.withFont(r);return Me(t.body,a)},Nr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Qt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0],i=a;return i in Nr&&(i=Nr[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:Cr,mathmlBuilder:qr}),Qt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=e[0],n=c.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:Br(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),Qt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=t.breakOnTokenText,i=r.mode,o=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Cr,mathmlBuilder:qr});var Ir=function(t,e){var r=e;return"display"===t?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:"text"===t&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===t?r=w.SCRIPT:"scriptscript"===t&&(r=w.SCRIPTSCRIPT),r},Rr=function(t,e){var r,a=Ir(t.size,e.style),n=a.fracNum(),i=a.fracDen();r=e.havingStyle(n);var o=ue(t.numer,r,e);if(t.continued){var s=8.5/e.fontMetrics().ptPerEm,h=3.5/e.fontMetrics().ptPerEm;o.height=o.height<s?s:o.height,o.depth=o.depth<h?h:o.depth}r=e.havingStyle(i);var l,m,c,u,p,d,f,g,x,v,b=ue(t.denom,r,e);if(t.hasBarLine?(t.barSize?(m=Tt(t.barSize,e),l=Dt.makeLineSpan("frac-line",e,m)):l=Dt.makeLineSpan("frac-line",e),m=l.height,c=l.height):(l=null,m=0,c=e.fontMetrics().defaultRuleThickness),a.size===w.DISPLAY.size||"display"===t.size?(u=e.fontMetrics().num1,p=m>0?3*c:7*c,d=e.fontMetrics().denom1):(m>0?(u=e.fontMetrics().num2,p=c):(u=e.fontMetrics().num3,p=3*c),d=e.fontMetrics().denom2),l){var y=e.fontMetrics().axisHeight;u-o.depth-(y+.5*m)<p&&(u+=p-(u-o.depth-(y+.5*m))),y-.5*m-(b.height-d)<p&&(d+=p-(y-.5*m-(b.height-d)));var k=-(y-.5*m);f=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:l,shift:k},{type:"elem",elem:o,shift:-u}]},e)}else{var S=u-o.depth-(b.height-d);S<p&&(u+=.5*(p-S),d+=.5*(p-S)),f=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:o,shift:-u}]},e)}return r=e.havingStyle(a),f.height*=r.sizeMultiplier/e.sizeMultiplier,f.depth*=r.sizeMultiplier/e.sizeMultiplier,g=a.size===w.DISPLAY.size?e.fontMetrics().delim1:e.fontMetrics().delim2,x=null==t.leftDelim?ce(e,["mopen"]):sr(t.leftDelim,g,!0,e.havingStyle(a),t.mode,["mopen"]),v=t.continued?Dt.makeSpan([]):null==t.rightDelim?ce(e,["mclose"]):sr(t.rightDelim,g,!0,e.havingStyle(a),t.mode,["mclose"]),Dt.makeSpan(["mord"].concat(r.sizingClasses(e)),[x,Dt.makeSpan(["mfrac"],[f]),v],e)},Or=function(t,e){var r=new ve.MathNode("mfrac",[Me(t.numer,e),Me(t.denom,e)]);if(t.hasBarLine){if(t.barSize){var a=Tt(t.barSize,e);r.setAttribute("linethickness",a+"em")}}else r.setAttribute("linethickness","0px");var n=Ir(t.size,e.style);if(n.size!==e.style.size){r=new ve.MathNode("mstyle",[r]);var i=n.size===w.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=t.leftDelim||null!=t.rightDelim){var o=[];if(null!=t.leftDelim){var s=new ve.MathNode("mo",[new ve.TextNode(t.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=t.rightDelim){var h=new ve.MathNode("mo",[new ve.TextNode(t.rightDelim.replace("\\",""))]);h.setAttribute("fence","true"),o.push(h)}return ye(o)}return r};Qt({type:"genfrac",names:["\\cfrac","\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,greediness:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,i=e[0],o=e[1],s=null,h=null,l="auto";switch(n){case"\\cfrac":case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",h=")";break;case"\\\\bracefrac":r=!1,s="\\{",h="\\}";break;case"\\\\brackfrac":r=!1,s="[",h="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\cfrac":case"\\dfrac":case"\\dbinom":l="display";break;case"\\tfrac":case"\\tbinom":l="text"}return{type:"genfrac",mode:a.mode,continued:"\\cfrac"===n,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:h,size:l,barSize:null}},htmlBuilder:Rr,mathmlBuilder:Or}),Qt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler:function(t){var e,r=t.parser,a=t.funcName,n=t.token;switch(a){case"\\over":e="\\frac";break;case"\\choose":e="\\binom";break;case"\\atop":e="\\\\atopfrac";break;case"\\brace":e="\\\\bracefrac";break;case"\\brack":e="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:e,token:n}}});var Er=["display","text","script","scriptscript"],Lr=function(t){var e=null;return t.length>0&&(e="."===(e=t)?null:e),e};Qt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,greediness:6,argTypes:["math","math","size","text","math","math"]},handler:function(t,e){var r=t.parser,a=e[4],n=e[5],i=Vt(e[0],"atom");i&&(i=Ut(e[0],"open"));var o=i?Lr(i.text):null,s=Vt(e[1],"atom");s&&(s=Ut(e[1],"close"));var h,l=s?Lr(s.text):null,m=Ft(e[2],"size"),c=null;h=!!m.isBlank||(c=m.value).number>0;var u="auto",p=Vt(e[3],"ordgroup");if(p){if(p.body.length>0){var d=Ft(p.body[0],"textord");u=Er[Number(d.text)]}}else p=Ft(e[3],"textord"),u=Er[Number(p.text)];return{type:"genfrac",mode:r.mode,numer:a,denom:n,continued:!1,hasBarLine:h,barSize:c,leftDelim:o,rightDelim:l,size:u}},htmlBuilder:Rr,mathmlBuilder:Or}),Qt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(t,e){var r=t.parser,a=(t.funcName,t.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ft(e[0],"size").value,token:a}}}),Qt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(t,e){var r=t.parser,a=(t.funcName,e[0]),n=function(t){if(!t)throw new Error("Expected non-null, but got "+String(t));return t}(Ft(e[1],"infix").size),i=e[2],o=n.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:i,continued:!1,hasBarLine:o,barSize:n,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Rr,mathmlBuilder:Or});var Hr=function(t,e){var r,a,n=e.style,i=Vt(t,"supsub");i?(r=i.sup?ue(i.sup,e.havingStyle(n.sup()),e):ue(i.sub,e.havingStyle(n.sub()),e),a=Ft(i.base,"horizBrace")):a=Ft(t,"horizBrace");var o,s=ue(a.base,e.havingBaseStyle(w.DISPLAY)),h=Oe(a,e);if(a.isOver?(o=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:h}]},e)).children[0].children[0].children[1].classes.push("svg-align"):(o=Dt.makeVList({positionType:"bottom",positionData:s.depth+.1+h.height,children:[{type:"elem",elem:h},{type:"kern",size:.1},{type:"elem",elem:s}]},e)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e);o=a.isOver?Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},e):Dt.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},e)}return Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e)};Qt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:Hr,mathmlBuilder:function(t,e){var r=Re(t.label);return new ve.MathNode(t.isOver?"mover":"munder",[Me(t.base,e),r])}}),Qt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[1],n=Ft(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ee(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(t,e){var r=se(t.body,e,!1);return Dt.makeAnchor(t.href,[],r,e)},mathmlBuilder:function(t,e){var r=Se(t.body,e);return r instanceof ge||(r=new ge("mrow",[r])),r.setAttribute("href",t.href),r}}),Qt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ft(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;i<a.length;i++){var o=a[i];"~"===o&&(o="\\textasciitilde"),n.push({type:"textord",mode:"text",text:o})}var s={type:"text",mode:r.mode,font:"\\texttt",body:n};return{type:"href",mode:r.mode,href:a,body:ee(s)}}}),Qt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:function(t,e){return{type:"htmlmathml",mode:t.parser.mode,html:ee(e[0]),mathml:ee(e[1])}},htmlBuilder:function(t,e){var r=se(t.html,e,!1);return Dt.makeFragment(r)},mathmlBuilder:function(t,e){return Se(t.mathml,e)}});var Pr=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var e=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!e)throw new o("Invalid size: '"+t+"' in \\includegraphics");var r={number:+(e[1]+e[2]),unit:e[3]};if(!At(r))throw new o("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};Qt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:function(t,e,r){var a=t.parser,n={number:0,unit:"em"},i={number:.9,unit:"em"},s={number:0,unit:"em"},h="";if(r[0])for(var l=Ft(r[0],"raw").string.split(","),m=0;m<l.length;m++){var c=l[m].split("=");if(2===c.length){var u=c[1].trim();switch(c[0].trim()){case"alt":h=u;break;case"width":n=Pr(u);break;case"height":i=Pr(u);break;case"totalheight":s=Pr(u);break;default:throw new o("Invalid key: '"+c[0]+"' in \\includegraphics.")}}}var p=Ft(e[0],"url").url;return""===h&&(h=(h=(h=p).replace(/^.*[\\\/]/,"")).substring(0,h.lastIndexOf("."))),a.settings.isTrusted({command:"\\includegraphics",url:p})?{type:"includegraphics",mode:a.mode,alt:h,width:n,height:i,totalheight:s,src:p}:a.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:function(t,e){var r=Tt(t.height,e),a=0;t.totalheight.number>0&&(a=Tt(t.totalheight,e)-r,a=Number(a.toFixed(2)));var n=0;t.width.number>0&&(n=Tt(t.width,e));var i={height:r+a+"em"};n>0&&(i.width=n+"em"),a>0&&(i.verticalAlign=-a+"em");var o=new R(t.src,t.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:function(t,e){var r=new ve.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var a=Tt(t.height,e),n=0;if(t.totalheight.number>0&&(n=(n=Tt(t.totalheight,e)-a).toFixed(2),r.setAttribute("valign","-"+n+"em")),r.setAttribute("height",a+n+"em"),t.width.number>0){var i=Tt(t.width,e);r.setAttribute("width",i+"em")}return r.setAttribute("src",t.src),r}}),Qt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=Ft(e[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:function(t,e){return Dt.makeGlue(t.dimension,e)},mathmlBuilder:function(t,e){var r=Tt(t.dimension,e);return new ve.SpaceNode(r)}}),Qt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:function(t,e){var r;"clap"===t.alignment?(r=Dt.makeSpan([],[ue(t.body,e)]),r=Dt.makeSpan(["inner"],[r],e)):r=Dt.makeSpan(["inner"],[ue(t.body,e)]);var a=Dt.makeSpan(["fix"],[]),n=Dt.makeSpan([t.alignment],[r,a],e),i=Dt.makeSpan(["strut"]);return i.style.height=n.height+n.depth+"em",i.style.verticalAlign=-n.depth+"em",n.children.unshift(i),n=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:n}]},e),Dt.makeSpan(["mord"],[n],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]);if("rlap"!==t.alignment){var a="llap"===t.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),Qt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=t.funcName,a=t.parser,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),Qt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){throw new o("Mismatched "+t.funcName)}});var Dr=function(t,e){switch(e.style.size){case w.DISPLAY.size:return t.display;case w.TEXT.size:return t.text;case w.SCRIPT.size:return t.script;case w.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}};Qt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4},handler:function(t,e){return{type:"mathchoice",mode:t.parser.mode,display:ee(e[0]),text:ee(e[1]),script:ee(e[2]),scriptscript:ee(e[3])}},htmlBuilder:function(t,e){var r=Dr(t,e),a=se(r,e,!1);return Dt.makeFragment(a)},mathmlBuilder:function(t,e){var r=Dr(t,e);return Se(r,e)}});var Fr=function(t,e,r,a,n,i,o){var s,h,l;if(t=Dt.makeSpan([],[t]),e){var m=ue(e,a.havingStyle(n.sup()),a);h={elem:m,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-m.depth)}}if(r){var c=ue(r,a.havingStyle(n.sub()),a);s={elem:c,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-c.height)}}if(h&&s){var u=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:u,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var p=t.height-o;l=Dt.makeVList({positionType:"top",positionData:p,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t}]},a)}else{if(!h)return t;var d=t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:d,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}return Dt.makeSpan(["mop","op-limits"],[l],a)},Vr=["\\smallint"],Ur=function(t,e){var r,a,n,i=!1,o=Vt(t,"supsub");o?(r=o.sup,a=o.sub,n=Ft(o.base,"op"),i=!0):n=Ft(t,"op");var s,h=e.style,l=!1;if(h.size===w.DISPLAY.size&&n.symbol&&!c.contains(Vr,n.name)&&(l=!0),n.symbol){var m=l?"Size2-Regular":"Size1-Regular",u="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(u=n.name.substr(1),n.name="oiint"===u?"\\iint":"\\iiint"),s=Dt.makeSymbol(n.name,m,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),u.length>0){var p=s.italic,d=Dt.staticSvg(u+"Size"+(l?"2":"1"),e);s=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:0},{type:"elem",elem:d,shift:l?.08:0}]},e),n.name="\\"+u,s.classes.unshift("mop"),s.italic=p}}else if(n.body){var f=se(n.body,e,!0);1===f.length&&f[0]instanceof E?(s=f[0]).classes[0]="mop":s=Dt.makeSpan(["mop"],Dt.tryCombineChars(f),e)}else{for(var g=[],x=1;x<n.name.length;x++)g.push(Dt.mathsym(n.name[x],n.mode,e));s=Dt.makeSpan(["mop"],g,e)}var v=0,b=0;return(s instanceof E||"\\oiint"===n.name||"\\oiiint"===n.name)&&!n.suppressBaseShift&&(v=(s.height-s.depth)/2-e.fontMetrics().axisHeight,b=s.italic),i?Fr(s,r,a,e,h,b,v):(v&&(s.style.position="relative",s.style.top=v+"em"),s)},Gr=function(t,e){var r;if(t.symbol)r=new ge("mo",[be(t.name,t.mode)]),c.contains(Vr,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ge("mo",ke(t.body,e));else{r=new ge("mi",[new xe(t.name.slice(1))]);var a=new ge("mo",[be("\u2061","text")]);r=t.parentIsSupSub?new ge("mo",[r,a]):fe([r,a])}return r},Yr={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};Qt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:function(t,e){var r=t.parser,a=t.funcName;return 1===a.length&&(a=Yr[a]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\mathop"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ee(a)}},htmlBuilder:Ur,mathmlBuilder:Gr});var Wr={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};Qt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr}),Qt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return 1===r.length&&(r=Wr[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:Ur,mathmlBuilder:Gr});var Xr=function(t,e){var r,a,n,i,o=!1,s=Vt(t,"supsub");if(s?(r=s.sup,a=s.sub,n=Ft(s.base,"operatorname"),o=!0):n=Ft(t,"operatorname"),n.body.length>0){for(var h=n.body.map(function(t){var e=t.text;return"string"==typeof e?{type:"textord",mode:t.mode,text:e}:t}),l=se(h,e.withFont("mathrm"),!0),m=0;m<l.length;m++){var c=l[m];c instanceof E&&(c.text=c.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}i=Dt.makeSpan(["mop"],l,e)}else i=Dt.makeSpan(["mop"],[],e);return o?Fr(i,r,a,e,e.style,0,0):i};function _r(t,e,r){for(var a=se(t,e,!1),n=e.sizeMultiplier/r.sizeMultiplier,i=0;i<a.length;i++){var o=a[i].classes.indexOf("sizing");o<0?Array.prototype.push.apply(a[i].classes,e.sizingClasses(r)):a[i].classes[o+1]==="reset-size"+e.size&&(a[i].classes[o+1]="reset-size"+r.size),a[i].height*=n,a[i].depth*=n}return Dt.makeFragment(a)}Qt({type:"operatorname",names:["\\operatorname","\\operatorname*"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"operatorname",mode:r.mode,body:ee(n),alwaysHandleSupSub:"\\operatorname*"===a,limits:!1,parentIsSupSub:!1}},htmlBuilder:Xr,mathmlBuilder:function(t,e){for(var r=ke(t.body,e.withFont("mathrm")),a=!0,n=0;n<r.length;n++){var i=r[n];if(i instanceof ve.SpaceNode);else if(i instanceof ve.MathNode)switch(i.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":var o=i.children[0];1===i.children.length&&o instanceof ve.TextNode?o.text=o.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):a=!1;break;default:a=!1}else a=!1}if(a){var s=r.map(function(t){return t.toText()}).join("");r=[new ve.TextNode(s)]}var h=new ve.MathNode("mi",r);h.setAttribute("mathvariant","normal");var l=new ve.MathNode("mo",[be("\u2061","text")]);return t.parentIsSupSub?new ve.MathNode("mo",[h,l]):ve.newDocumentFragment([h,l])}}),te({type:"ordgroup",htmlBuilder:function(t,e){return t.semisimple?Dt.makeFragment(se(t.body,e,!1)):Dt.makeSpan(["mord"],se(t.body,e,!0),e)},mathmlBuilder:function(t,e){return Se(t.body,e,!0)}}),Qt({type:"overline",names:["\\overline"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=ue(t.body,e.havingCrampedStyle()),a=Dt.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,i=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},e);return Dt.makeSpan(["mord","overline"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[new ve.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new ve.MathNode("mover",[Me(t.body,e),r]);return a.setAttribute("accent","true"),a}}),Qt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"phantom",mode:r.mode,body:ee(a)}},htmlBuilder:function(t,e){var r=se(t.body,e.withPhantom(),!1);return Dt.makeFragment(r)},mathmlBuilder:function(t,e){var r=ke(t.body,e);return new ve.MathNode("mphantom",r)}}),Qt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Dt.makeSpan([],[ue(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a<r.children.length;a++)r.children[a].height=0,r.children[a].depth=0;return r=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Dt.makeSpan(["mord"],[r],e)},mathmlBuilder:function(t,e){var r=ke(ee(t.body),e),a=new ve.MathNode("mphantom",r),n=new ve.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}}),Qt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:"vphantom",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Dt.makeSpan(["inner"],[ue(t.body,e.withPhantom())]),a=Dt.makeSpan(["fix"],[]);return Dt.makeSpan(["mord","rlap"],[r,a],e)},mathmlBuilder:function(t,e){var r=ke(ee(t.body),e),a=new ve.MathNode("mphantom",r),n=new ve.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}}),Qt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ft(e[0],"size").value,n=e[1];return{type:"raisebox",mode:r.mode,dy:a,body:n}},htmlBuilder:function(t,e){var r=ue(t.body,e),a=Tt(t.dy,e);return Dt.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:r}]},e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]),a=t.dy.number+t.dy.unit;return r.setAttribute("voffset",a),r}}),Qt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler:function(t,e,r){var a=t.parser,n=r[0],i=Ft(e[0],"size"),o=Ft(e[1],"size");return{type:"rule",mode:a.mode,shift:n&&Ft(n,"size").value,width:i.value,height:o.value}},htmlBuilder:function(t,e){var r=Dt.makeSpan(["mord","rule"],[],e),a=Tt(t.width,e),n=Tt(t.height,e),i=t.shift?Tt(t.shift,e):0;return r.style.borderRightWidth=a+"em",r.style.borderTopWidth=n+"em",r.style.bottom=i+"em",r.width=a,r.height=n+i,r.depth=-i,r.maxFontSize=1.125*n*e.sizeMultiplier,r},mathmlBuilder:function(t,e){var r=Tt(t.width,e),a=Tt(t.height,e),n=t.shift?Tt(t.shift,e):0,i=e.color&&e.getColor()||"black",o=new ve.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",r+"em"),o.setAttribute("height",a+"em");var s=new ve.MathNode("mpadded",[o]);return n>=0?s.setAttribute("height","+"+n+"em"):(s.setAttribute("height",n+"em"),s.setAttribute("depth","+"+-n+"em")),s.setAttribute("voffset",n+"em"),s}});var jr=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];Qt({type:"sizing",names:jr,props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:jr.indexOf(a)+1,body:i}},htmlBuilder:function(t,e){var r=e.havingSize(t.size);return _r(t.body,r,e)},mathmlBuilder:function(t,e){var r=e.havingSize(t.size),a=ke(t.body,r),n=new ve.MathNode("mstyle",a);return n.setAttribute("mathsize",r.sizeMultiplier+"em"),n}}),Qt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=!1,i=!1,o=r[0]&&Ft(r[0],"ordgroup");if(o)for(var s="",h=0;h<o.body.length;++h){if("t"===(s=o.body[h].text))n=!0;else{if("b"!==s){n=!1,i=!1;break}i=!0}}else n=!0,i=!0;var l=e[0];return{type:"smash",mode:a.mode,body:l,smashHeight:n,smashDepth:i}},htmlBuilder:function(t,e){var r=Dt.makeSpan([],[ue(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var a=0;a<r.children.length;a++)r.children[a].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].depth=0;var i=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r}}),Qt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=r[0],i=e[0];return{type:"sqrt",mode:a.mode,body:i,index:n}},htmlBuilder:function(t,e){var r=ue(t.body,e.havingCrampedStyle());0===r.height&&(r.height=e.fontMetrics().xHeight),r=Dt.wrapFragment(r,e);var a=e.fontMetrics().defaultRuleThickness,n=a;e.style.id<w.TEXT.id&&(n=e.fontMetrics().xHeight);var i=a+n/4,o=r.height+r.depth+i+a,s=ir(o,e),h=s.span,l=s.ruleWidth,m=s.advanceWidth,c=h.height-l;c>r.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=h.height-r.height-i-l;r.style.paddingLeft=m+"em";var p=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:h},{type:"kern",size:l}]},e);if(t.index){var d=e.havingStyle(w.SCRIPTSCRIPT),f=ue(t.index,d,e),g=.6*(p.height-p.depth),x=Dt.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},e),v=Dt.makeSpan(["root"],[x]);return Dt.makeSpan(["mord","sqrt"],[v,p],e)}return Dt.makeSpan(["mord","sqrt"],[p],e)},mathmlBuilder:function(t,e){var r=t.body,a=t.index;return a?new ve.MathNode("mroot",[Me(r,e),Me(a,e)]):new ve.MathNode("msqrt",[Me(r,e)])}});var $r={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};Qt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r).withFont("");return _r(t.body,a,e)},mathmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r),n=ke(t.body,a),i=new ve.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[t.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});te({type:"supsub",htmlBuilder:function(t,e){var r=function(t,e){var r=t.base;return r?"op"===r.type?r.limits&&(e.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?Ur:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(e.style.size===w.DISPLAY.size||r.limits)?Xr:null:"accent"===r.type?c.isCharacterBox(r.base)?Ee:null:"horizBrace"===r.type&&!t.sub===r.isOver?Hr:null:null}(t,e);if(r)return r(t,e);var a,n,i,o=t.base,s=t.sup,h=t.sub,l=ue(o,e),m=e.fontMetrics(),u=0,p=0,d=o&&c.isCharacterBox(o);if(s){var f=e.havingStyle(e.style.sup());a=ue(s,f,e),d||(u=l.height-f.fontMetrics().supDrop*f.sizeMultiplier/e.sizeMultiplier)}if(h){var g=e.havingStyle(e.style.sub());n=ue(h,g,e),d||(p=l.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}i=e.style===w.DISPLAY?m.sup1:e.style.cramped?m.sup3:m.sup2;var x,v=e.sizeMultiplier,b=.5/m.ptPerEm/v+"em",y=null;if(n){var k=t.base&&"op"===t.base.type&&t.base.name&&("\\oiint"===t.base.name||"\\oiiint"===t.base.name);(l instanceof E||k)&&(y=-l.italic+"em")}if(a&&n){u=Math.max(u,i,a.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-a.depth-(n.height-p)<S){p=S-(u-a.depth)+n.height;var M=.8*m.xHeight-(u-a.depth);M>0&&(u+=M,p-=M)}var z=[{type:"elem",elem:n,shift:p,marginRight:b,marginLeft:y},{type:"elem",elem:a,shift:-u,marginRight:b}];x=Dt.makeVList({positionType:"individualShift",children:z},e)}else if(n){p=Math.max(p,m.sub1,n.height-.8*m.xHeight);var A=[{type:"elem",elem:n,marginLeft:y,marginRight:b}];x=Dt.makeVList({positionType:"shift",positionData:p,children:A},e)}else{if(!a)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,a.depth+.25*m.xHeight),x=Dt.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:a,marginRight:b}]},e)}var T=me(l,"right")||"mord";return Dt.makeSpan([T],[l,Dt.makeSpan(["msupsub"],[x])],e)},mathmlBuilder:function(t,e){var r,a=!1,n=Vt(t.base,"horizBrace");n&&!!t.sup===n.isOver&&(a=!0,r=n.isOver),!t.base||"op"!==t.base.type&&"operatorname"!==t.base.type||(t.base.parentIsSupSub=!0);var i,o=[Me(t.base,e)];if(t.sub&&o.push(Me(t.sub,e)),t.sup&&o.push(Me(t.sup,e)),a)i=r?"mover":"munder";else if(t.sub)if(t.sup){var s=t.base;i=s&&"op"===s.type&&s.limits&&e.style===w.DISPLAY?"munderover":s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(e.style===w.DISPLAY||s.limits)?"munderover":"msubsup"}else{var h=t.base;i=h&&"op"===h.type&&h.limits&&(e.style===w.DISPLAY||h.alwaysHandleSupSub)?"munder":h&&"operatorname"===h.type&&h.alwaysHandleSupSub&&(h.limits||e.style===w.DISPLAY)?"munder":"msub"}else{var l=t.base;i=l&&"op"===l.type&&l.limits&&(e.style===w.DISPLAY||l.alwaysHandleSupSub)?"mover":l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||e.style===w.DISPLAY)?"mover":"msup"}return new ve.MathNode(i,o)}}),te({type:"atom",htmlBuilder:function(t,e){return Dt.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[be(t.text,t.mode)]);if("bin"===t.family){var a=we(t,e);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===t.family?r.setAttribute("separator","true"):"open"!==t.family&&"close"!==t.family||r.setAttribute("stretchy","false");return r}});var Zr={mi:"italic",mn:"normal",mtext:"normal"};te({type:"mathord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"mathord")},mathmlBuilder:function(t,e){var r=new ve.MathNode("mi",[be(t.text,t.mode,e)]),a=we(t,e)||"italic";return a!==Zr[r.type]&&r.setAttribute("mathvariant",a),r}}),te({type:"textord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"textord")},mathmlBuilder:function(t,e){var r,a=be(t.text,t.mode,e),n=we(t,e)||"normal";return r="text"===t.mode?new ve.MathNode("mtext",[a]):/[0-9]/.test(t.text)?new ve.MathNode("mn",[a]):"\\prime"===t.text?new ve.MathNode("mo",[a]):new ve.MathNode("mi",[a]),n!==Zr[r.type]&&r.setAttribute("mathvariant",n),r}});var Kr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Jr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};te({type:"spacing",htmlBuilder:function(t,e){if(Jr.hasOwnProperty(t.text)){var r=Jr[t.text].className||"";if("text"===t.mode){var a=Dt.makeOrd(t,e,"textord");return a.classes.push(r),a}return Dt.makeSpan(["mspace",r],[Dt.mathsym(t.text,t.mode,e)],e)}if(Kr.hasOwnProperty(t.text))return Dt.makeSpan(["mspace",Kr[t.text]],[],e);throw new o('Unknown type of space "'+t.text+'"')},mathmlBuilder:function(t,e){if(!Jr.hasOwnProperty(t.text)){if(Kr.hasOwnProperty(t.text))return new ve.MathNode("mspace");throw new o('Unknown type of space "'+t.text+'"')}return new ve.MathNode("mtext",[new ve.TextNode("\xa0")])}});var Qr=function(){var t=new ve.MathNode("mtd",[]);return t.setAttribute("width","50%"),t};te({type:"tag",mathmlBuilder:function(t,e){var r=new ve.MathNode("mtable",[new ve.MathNode("mtr",[Qr(),new ve.MathNode("mtd",[Se(t.body,e)]),Qr(),new ve.MathNode("mtd",[Se(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});var ta={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ea={"\\textbf":"textbf","\\textmd":"textmd"},ra={"\\textit":"textit","\\textup":"textup"},aa=function(t,e){var r=t.font;return r?ta[r]?e.withTextFontFamily(ta[r]):ea[r]?e.withTextFontWeight(ea[r]):e.withTextFontShape(ra[r]):e};Qt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],greediness:2,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"text",mode:r.mode,body:ee(n),font:a}},htmlBuilder:function(t,e){var r=aa(t,e),a=se(t.body,r,!0);return Dt.makeSpan(["mord","text"],Dt.tryCombineChars(a),r)},mathmlBuilder:function(t,e){var r=aa(t,e);return Se(t.body,r)}}),Qt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){return{type:"underline",mode:t.parser.mode,body:e[0]}},htmlBuilder:function(t,e){var r=ue(t.body,e),a=Dt.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,i=Dt.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","underline"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[new ve.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new ve.MathNode("munder",[Me(t.body,e),r]);return a.setAttribute("accentunder","true"),a}}),Qt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(t,e,r){throw new o("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(t,e){for(var r=na(t),a=[],n=e.havingStyle(e.style.text()),i=0;i<r.length;i++){var o=r[i];"~"===o&&(o="\\textasciitilde"),a.push(Dt.makeSymbol(o,"Typewriter-Regular",t.mode,n,["mord","texttt"]))}return Dt.makeSpan(["mord","text"].concat(n.sizingClasses(e)),Dt.tryCombineChars(a),n)},mathmlBuilder:function(t,e){var r=new ve.TextNode(na(t)),a=new ve.MathNode("mtext",[r]);return a.setAttribute("mathvariant","monospace"),a}});var na=function(t){return t.body.replace(/ /g,t.star?"\u2423":"\xa0")},ia=Zt,oa=new RegExp("^(\\\\[a-zA-Z@]+)[ \r\n\t]*$"),sa=new RegExp("[\u0300-\u036f]+$"),ha="([ \r\n\t]+)|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff][\u0300-\u036f]*|[\ud800-\udbff][\udc00-\udfff][\u0300-\u036f]*|\\\\verb\\*([^]).*?\\3|\\\\verb([^*a-zA-Z]).*?\\4|\\\\operatorname\\*|\\\\[a-zA-Z@]+[ \r\n\t]*|\\\\[^\ud800-\udfff])",la=function(){function t(t,e){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=e,this.tokenRegex=new RegExp(ha,"g"),this.catcodes={"%":14}}var e=t.prototype;return e.setCatcode=function(t,e){this.catcodes[t]=e},e.lex=function(){var t=this.input,e=this.tokenRegex.lastIndex;if(e===t.length)return new n("EOF",new a(this,e,e));var r=this.tokenRegex.exec(t);if(null===r||r.index!==e)throw new o("Unexpected character: '"+t[e]+"'",new n(t[e],new a(this,e,e+1)));var i=r[2]||" ";if(14===this.catcodes[i]){var s=t.indexOf("\n",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}var h=i.match(oa);return h&&(i=h[1]),new n(i,new a(this,e,this.tokenRegex.lastIndex))},t}(),ma=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=e,this.builtins=t,this.undefStack=[]}var e=t.prototype;return e.beginGroup=function(){this.undefStack.push({})},e.endGroup=function(){if(0===this.undefStack.length)throw new o("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var t=this.undefStack.pop();for(var e in t)t.hasOwnProperty(e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])},e.has=function(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)},e.get=function(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]},e.set=function(t,e,r){if(void 0===r&&(r=!1),r){for(var a=0;a<this.undefStack.length;a++)delete this.undefStack[a][t];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][t]=e)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(t)&&(n[t]=this.current[t])}this.current[t]=e},t}(),ca={},ua=ca;function pa(t,e){ca[t]=e}pa("\\@firstoftwo",function(t){return{tokens:t.consumeArgs(2)[0],numArgs:0}}),pa("\\@secondoftwo",function(t){return{tokens:t.consumeArgs(2)[1],numArgs:0}}),pa("\\@ifnextchar",function(t){var e=t.consumeArgs(3),r=t.future();return 1===e[0].length&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),pa("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),pa("\\TextOrMath",function(t){var e=t.consumeArgs(2);return"text"===t.mode?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var da={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};pa("\\char",function(t){var e,r=t.popToken(),a="";if("'"===r.text)e=8,r=t.popToken();else if('"'===r.text)e=16,r=t.popToken();else if("`"===r.text)if("\\"===(r=t.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new o("\\char` missing argument");a=r.text.charCodeAt(0)}else e=10;if(e){if(null==(a=da[r.text])||a>=e)throw new o("Invalid base-"+e+" digit "+r.text);for(var n;null!=(n=da[t.future().text])&&n<e;)a*=e,a+=n,t.popToken()}return"\\@char{"+a+"}"});var fa=function(t,e){var r=t.consumeArgs(1)[0];if(1!==r.length)throw new o("\\gdef's first argument must be a macro name");var a=r[0].text,n=0;for(r=t.consumeArgs(1)[0];1===r.length&&"#"===r[0].text;){if(1!==(r=t.consumeArgs(1)[0]).length)throw new o('Invalid argument number length "'+r.length+'"');if(!/^[1-9]$/.test(r[0].text))throw new o('Invalid argument number "'+r[0].text+'"');if(n++,parseInt(r[0].text)!==n)throw new o('Argument number "'+r[0].text+'" out of order');r=t.consumeArgs(1)[0]}return t.macros.set(a,{tokens:r,numArgs:n},e),""};pa("\\gdef",function(t){return fa(t,!0)}),pa("\\def",function(t){return fa(t,!1)}),pa("\\global",function(t){var e=t.consumeArgs(1)[0];if(1!==e.length)throw new o("Invalid command after \\global");var r=e[0].text;if("\\def"===r)return fa(t,!0);throw new o("Invalid command '"+r+"' after \\global")});var ga=function(t,e,r){var a=t.consumeArgs(1)[0];if(1!==a.length)throw new o("\\newcommand's first argument must be a macro name");var n=a[0].text,i=t.isDefined(n);if(i&&!e)throw new o("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!i&&!r)throw new o("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var s=0;if(1===(a=t.consumeArgs(1)[0]).length&&"["===a[0].text){for(var h="",l=t.expandNextToken();"]"!==l.text&&"EOF"!==l.text;)h+=l.text,l=t.expandNextToken();if(!h.match(/^\s*[0-9]+\s*$/))throw new o("Invalid number of arguments: "+h);s=parseInt(h),a=t.consumeArgs(1)[0]}return t.macros.set(n,{tokens:a,numArgs:s}),""};pa("\\newcommand",function(t){return ga(t,!1,!0)}),pa("\\renewcommand",function(t){return ga(t,!0,!1)}),pa("\\providecommand",function(t){return ga(t,!0,!0)}),pa("\\bgroup","{"),pa("\\egroup","}"),pa("\\lq","`"),pa("\\rq","'"),pa("\\aa","\\r a"),pa("\\AA","\\r A"),pa("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),pa("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),pa("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),pa("\u212c","\\mathscr{B}"),pa("\u2130","\\mathscr{E}"),pa("\u2131","\\mathscr{F}"),pa("\u210b","\\mathscr{H}"),pa("\u2110","\\mathscr{I}"),pa("\u2112","\\mathscr{L}"),pa("\u2133","\\mathscr{M}"),pa("\u211b","\\mathscr{R}"),pa("\u212d","\\mathfrak{C}"),pa("\u210c","\\mathfrak{H}"),pa("\u2128","\\mathfrak{Z}"),pa("\\Bbbk","\\Bbb{k}"),pa("\xb7","\\cdotp"),pa("\\llap","\\mathllap{\\textrm{#1}}"),pa("\\rlap","\\mathrlap{\\textrm{#1}}"),pa("\\clap","\\mathclap{\\textrm{#1}}"),pa("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),pa("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),pa("\\ne","\\neq"),pa("\u2260","\\neq"),pa("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),pa("\u2209","\\notin"),pa("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),pa("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),pa("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),pa("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),pa("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),pa("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),pa("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),pa("\u27c2","\\perp"),pa("\u203c","\\mathclose{!\\mkern-0.8mu!}"),pa("\u220c","\\notni"),pa("\u231c","\\ulcorner"),pa("\u231d","\\urcorner"),pa("\u231e","\\llcorner"),pa("\u231f","\\lrcorner"),pa("\xa9","\\copyright"),pa("\xae","\\textregistered"),pa("\ufe0f","\\textregistered"),pa("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),pa("\u22ee","\\vdots"),pa("\\varGamma","\\mathit{\\Gamma}"),pa("\\varDelta","\\mathit{\\Delta}"),pa("\\varTheta","\\mathit{\\Theta}"),pa("\\varLambda","\\mathit{\\Lambda}"),pa("\\varXi","\\mathit{\\Xi}"),pa("\\varPi","\\mathit{\\Pi}"),pa("\\varSigma","\\mathit{\\Sigma}"),pa("\\varUpsilon","\\mathit{\\Upsilon}"),pa("\\varPhi","\\mathit{\\Phi}"),pa("\\varPsi","\\mathit{\\Psi}"),pa("\\varOmega","\\mathit{\\Omega}"),pa("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),pa("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"),pa("\\boxed","\\fbox{$\\displaystyle{#1}$}"),pa("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),pa("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),pa("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var xa={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};pa("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in xa?e=xa[r]:"\\not"===r.substr(0,4)?e="\\dotsb":r in j.math&&c.contains(["bin","rel"],j.math[r].group)&&(e="\\dotsb"),e});var va={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};pa("\\dotso",function(t){return t.future().text in va?"\\ldots\\,":"\\ldots"}),pa("\\dotsc",function(t){var e=t.future().text;return e in va&&","!==e?"\\ldots\\,":"\\ldots"}),pa("\\cdots",function(t){return t.future().text in va?"\\@cdots\\,":"\\@cdots"}),pa("\\dotsb","\\cdots"),pa("\\dotsm","\\cdots"),pa("\\dotsi","\\!\\cdots"),pa("\\dotsx","\\ldots\\,"),pa("\\DOTSI","\\relax"),pa("\\DOTSB","\\relax"),pa("\\DOTSX","\\relax"),pa("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),pa("\\,","\\tmspace+{3mu}{.1667em}"),pa("\\thinspace","\\,"),pa("\\>","\\mskip{4mu}"),pa("\\:","\\tmspace+{4mu}{.2222em}"),pa("\\medspace","\\:"),pa("\\;","\\tmspace+{5mu}{.2777em}"),pa("\\thickspace","\\;"),pa("\\!","\\tmspace-{3mu}{.1667em}"),pa("\\negthinspace","\\!"),pa("\\negmedspace","\\tmspace-{4mu}{.2222em}"),pa("\\negthickspace","\\tmspace-{5mu}{.277em}"),pa("\\enspace","\\kern.5em "),pa("\\enskip","\\hskip.5em\\relax"),pa("\\quad","\\hskip1em\\relax"),pa("\\qquad","\\hskip2em\\relax"),pa("\\tag","\\@ifstar\\tag@literal\\tag@paren"),pa("\\tag@paren","\\tag@literal{({#1})}"),pa("\\tag@literal",function(t){if(t.macros.get("\\df@tag"))throw new o("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),pa("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),pa("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),pa("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),pa("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),pa("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),pa("\\\\","\\newline"),pa("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var ba=F["Main-Regular"]["T".charCodeAt(0)][1]-.7*F["Main-Regular"]["A".charCodeAt(0)][1]+"em";pa("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),pa("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),pa("\\hspace","\\@ifstar\\@hspacer\\@hspace"),pa("\\@hspace","\\hskip #1\\relax"),pa("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),pa("\\ordinarycolon",":"),pa("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),pa("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),pa("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),pa("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),pa("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),pa("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),pa("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),pa("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),pa("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),pa("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),pa("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),pa("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),pa("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),pa("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),pa("\u2237","\\dblcolon"),pa("\u2239","\\eqcolon"),pa("\u2254","\\coloneqq"),pa("\u2255","\\eqqcolon"),pa("\u2a74","\\Coloneqq"),pa("\\ratio","\\vcentcolon"),pa("\\coloncolon","\\dblcolon"),pa("\\colonequals","\\coloneqq"),pa("\\coloncolonequals","\\Coloneqq"),pa("\\equalscolon","\\eqqcolon"),pa("\\equalscoloncolon","\\Eqqcolon"),pa("\\colonminus","\\coloneq"),pa("\\coloncolonminus","\\Coloneq"),pa("\\minuscolon","\\eqcolon"),pa("\\minuscoloncolon","\\Eqcolon"),pa("\\coloncolonapprox","\\Colonapprox"),pa("\\coloncolonsim","\\Colonsim"),pa("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),pa("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),pa("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),pa("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),pa("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),pa("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),pa("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),pa("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),pa("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),pa("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),pa("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),pa("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),pa("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),pa("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),pa("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),pa("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),pa("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),pa("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),pa("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),pa("\u27e6","\\llbracket"),pa("\u27e7","\\rrbracket"),pa("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),pa("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),pa("\u2983","\\lBrace"),pa("\u2984","\\rBrace"),pa("\\darr","\\downarrow"),pa("\\dArr","\\Downarrow"),pa("\\Darr","\\Downarrow"),pa("\\lang","\\langle"),pa("\\rang","\\rangle"),pa("\\uarr","\\uparrow"),pa("\\uArr","\\Uparrow"),pa("\\Uarr","\\Uparrow"),pa("\\N","\\mathbb{N}"),pa("\\R","\\mathbb{R}"),pa("\\Z","\\mathbb{Z}"),pa("\\alef","\\aleph"),pa("\\alefsym","\\aleph"),pa("\\Alpha","\\mathrm{A}"),pa("\\Beta","\\mathrm{B}"),pa("\\bull","\\bullet"),pa("\\Chi","\\mathrm{X}"),pa("\\clubs","\\clubsuit"),pa("\\cnums","\\mathbb{C}"),pa("\\Complex","\\mathbb{C}"),pa("\\Dagger","\\ddagger"),pa("\\diamonds","\\diamondsuit"),pa("\\empty","\\emptyset"),pa("\\Epsilon","\\mathrm{E}"),pa("\\Eta","\\mathrm{H}"),pa("\\exist","\\exists"),pa("\\harr","\\leftrightarrow"),pa("\\hArr","\\Leftrightarrow"),pa("\\Harr","\\Leftrightarrow"),pa("\\hearts","\\heartsuit"),pa("\\image","\\Im"),pa("\\infin","\\infty"),pa("\\Iota","\\mathrm{I}"),pa("\\isin","\\in"),pa("\\Kappa","\\mathrm{K}"),pa("\\larr","\\leftarrow"),pa("\\lArr","\\Leftarrow"),pa("\\Larr","\\Leftarrow"),pa("\\lrarr","\\leftrightarrow"),pa("\\lrArr","\\Leftrightarrow"),pa("\\Lrarr","\\Leftrightarrow"),pa("\\Mu","\\mathrm{M}"),pa("\\natnums","\\mathbb{N}"),pa("\\Nu","\\mathrm{N}"),pa("\\Omicron","\\mathrm{O}"),pa("\\plusmn","\\pm"),pa("\\rarr","\\rightarrow"),pa("\\rArr","\\Rightarrow"),pa("\\Rarr","\\Rightarrow"),pa("\\real","\\Re"),pa("\\reals","\\mathbb{R}"),pa("\\Reals","\\mathbb{R}"),pa("\\Rho","\\mathrm{P}"),pa("\\sdot","\\cdot"),pa("\\sect","\\S"),pa("\\spades","\\spadesuit"),pa("\\sub","\\subset"),pa("\\sube","\\subseteq"),pa("\\supe","\\supseteq"),pa("\\Tau","\\mathrm{T}"),pa("\\thetasym","\\vartheta"),pa("\\weierp","\\wp"),pa("\\Zeta","\\mathrm{Z}"),pa("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),pa("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),pa("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),pa("\\blue","\\textcolor{##6495ed}{#1}"),pa("\\orange","\\textcolor{##ffa500}{#1}"),pa("\\pink","\\textcolor{##ff00af}{#1}"),pa("\\red","\\textcolor{##df0030}{#1}"),pa("\\green","\\textcolor{##28ae7b}{#1}"),pa("\\gray","\\textcolor{gray}{#1}"),pa("\\purple","\\textcolor{##9d38bd}{#1}"),pa("\\blueA","\\textcolor{##ccfaff}{#1}"),pa("\\blueB","\\textcolor{##80f6ff}{#1}"),pa("\\blueC","\\textcolor{##63d9ea}{#1}"),pa("\\blueD","\\textcolor{##11accd}{#1}"),pa("\\blueE","\\textcolor{##0c7f99}{#1}"),pa("\\tealA","\\textcolor{##94fff5}{#1}"),pa("\\tealB","\\textcolor{##26edd5}{#1}"),pa("\\tealC","\\textcolor{##01d1c1}{#1}"),pa("\\tealD","\\textcolor{##01a995}{#1}"),pa("\\tealE","\\textcolor{##208170}{#1}"),pa("\\greenA","\\textcolor{##b6ffb0}{#1}"),pa("\\greenB","\\textcolor{##8af281}{#1}"),pa("\\greenC","\\textcolor{##74cf70}{#1}"),pa("\\greenD","\\textcolor{##1fab54}{#1}"),pa("\\greenE","\\textcolor{##0d923f}{#1}"),pa("\\goldA","\\textcolor{##ffd0a9}{#1}"),pa("\\goldB","\\textcolor{##ffbb71}{#1}"),pa("\\goldC","\\textcolor{##ff9c39}{#1}"),pa("\\goldD","\\textcolor{##e07d10}{#1}"),pa("\\goldE","\\textcolor{##a75a05}{#1}"),pa("\\redA","\\textcolor{##fca9a9}{#1}"),pa("\\redB","\\textcolor{##ff8482}{#1}"),pa("\\redC","\\textcolor{##f9685d}{#1}"),pa("\\redD","\\textcolor{##e84d39}{#1}"),pa("\\redE","\\textcolor{##bc2612}{#1}"),pa("\\maroonA","\\textcolor{##ffbde0}{#1}"),pa("\\maroonB","\\textcolor{##ff92c6}{#1}"),pa("\\maroonC","\\textcolor{##ed5fa6}{#1}"),pa("\\maroonD","\\textcolor{##ca337c}{#1}"),pa("\\maroonE","\\textcolor{##9e034e}{#1}"),pa("\\purpleA","\\textcolor{##ddd7ff}{#1}"),pa("\\purpleB","\\textcolor{##c6b9fc}{#1}"),pa("\\purpleC","\\textcolor{##aa87ff}{#1}"),pa("\\purpleD","\\textcolor{##7854ab}{#1}"),pa("\\purpleE","\\textcolor{##543b78}{#1}"),pa("\\mintA","\\textcolor{##f5f9e8}{#1}"),pa("\\mintB","\\textcolor{##edf2df}{#1}"),pa("\\mintC","\\textcolor{##e0e5cc}{#1}"),pa("\\grayA","\\textcolor{##f6f7f7}{#1}"),pa("\\grayB","\\textcolor{##f0f1f2}{#1}"),pa("\\grayC","\\textcolor{##e3e5e6}{#1}"),pa("\\grayD","\\textcolor{##d6d8da}{#1}"),pa("\\grayE","\\textcolor{##babec2}{#1}"),pa("\\grayF","\\textcolor{##888d93}{#1}"),pa("\\grayG","\\textcolor{##626569}{#1}"),pa("\\grayH","\\textcolor{##3b3e40}{#1}"),pa("\\grayI","\\textcolor{##21242c}{#1}"),pa("\\kaBlue","\\textcolor{##314453}{#1}"),pa("\\kaGreen","\\textcolor{##71B307}{#1}");var ya={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},wa=function(){function t(t,e,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=e,this.expansionCount=0,this.feed(t),this.macros=new ma(ua,e.macros),this.mode=r,this.stack=[]}var e=t.prototype;return e.feed=function(t){this.lexer=new la(t,this.settings)},e.switchMode=function(t){this.mode=t},e.beginGroup=function(){this.macros.beginGroup()},e.endGroup=function(){this.macros.endGroup()},e.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},e.popToken=function(){return this.future(),this.stack.pop()},e.pushToken=function(t){this.stack.push(t)},e.pushTokens=function(t){var e;(e=this.stack).push.apply(e,t)},e.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},e.consumeArgs=function(t){for(var e=[],r=0;r<t;++r){this.consumeSpaces();var a=this.popToken();if("{"===a.text){for(var n=[],i=1;0!==i;){var s=this.popToken();if(n.push(s),"{"===s.text)++i;else if("}"===s.text)--i;else if("EOF"===s.text)throw new o("End of input in macro argument",a)}n.pop(),n.reverse(),e[r]=n}else{if("EOF"===a.text)throw new o("End of input expecting macro argument");e[r]=[a]}}return e},e.expandOnce=function(){var t=this.popToken(),e=t.text,r=this._getExpansion(e);if(null==r)return this.pushToken(t),t;if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new o("Too many expansions: infinite loop or need to increase maxExpand setting");var a=r.tokens;if(r.numArgs)for(var n=this.consumeArgs(r.numArgs),i=(a=a.slice()).length-1;i>=0;--i){var s=a[i];if("#"===s.text){if(0===i)throw new o("Incomplete placeholder at end of macro body",s);if("#"===(s=a[--i]).text)a.splice(i+1,1);else{if(!/^[1-9]$/.test(s.text))throw new o("Not a valid argument number",s);var h;(h=a).splice.apply(h,[i,2].concat(n[+s.text-1]))}}}return this.pushTokens(a),a},e.expandAfterFuture=function(){return this.expandOnce(),this.future()},e.expandNextToken=function(){for(;;){var t=this.expandOnce();if(t instanceof n){if("\\relax"!==t.text)return this.stack.pop();this.stack.pop()}}throw new Error},e.expandMacro=function(t){if(this.macros.get(t)){var e=[],r=this.stack.length;for(this.pushToken(new n(t));this.stack.length>r;){this.expandOnce()instanceof n&&e.push(this.stack.pop())}return e}},e.expandMacroAsText=function(t){var e=this.expandMacro(t);return e?e.map(function(t){return t.text}).join(""):e},e._getExpansion=function(t){var e=this.macros.get(t);if(null==e)return e;var r="function"==typeof e?e(this):e;if("string"==typeof r){var a=0;if(-1!==r.indexOf("#"))for(var n=r.replace(/##/g,"");-1!==n.indexOf("#"+(a+1));)++a;for(var i=new la(r,this.settings),o=[],s=i.lex();"EOF"!==s.text;)o.push(s),s=i.lex();return o.reverse(),{tokens:o,numArgs:a}}return r},e.isDefined=function(t){return this.macros.has(t)||ia.hasOwnProperty(t)||j.math.hasOwnProperty(t)||j.text.hasOwnProperty(t)||ya.hasOwnProperty(t)},t}(),ka={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"}},Sa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\u010f":"d\u030c","\u1e0b":"d\u0307","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u013a":"l\u0301","\u013e":"l\u030c","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\u010e":"D\u030c","\u1e0a":"D\u0307","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0139":"L\u0301","\u013d":"L\u030c","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u0164":"T\u030c","\u1e6a":"T\u0307","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Ma=function(){function t(t,e){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new wa(t,e,this.mode),this.settings=e,this.leftrightDepth=0}var e=t.prototype;return e.expect=function(t,e){if(void 0===e&&(e=!0),this.fetch().text!==t)throw new o("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());e&&this.consume()},e.consume=function(){this.nextToken=null},e.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},e.switchMode=function(t){this.mode=t,this.gullet.switchMode(t)},e.parse=function(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");var t=this.parseExpression(!1);return this.expect("EOF"),this.gullet.endGroup(),t},e.parseExpression=function(e,r){for(var a=[];;){"math"===this.mode&&this.consumeSpaces();var n=this.fetch();if(-1!==t.endOfExpression.indexOf(n.text))break;if(r&&n.text===r)break;if(e&&ia[n.text]&&ia[n.text].infix)break;var i=this.parseAtom(r);if(!i)break;a.push(i)}return"text"===this.mode&&this.formLigatures(a),this.handleInfixNodes(a)},e.handleInfixNodes=function(t){for(var e,r=-1,a=0;a<t.length;a++){var n=Vt(t[a],"infix");if(n){if(-1!==r)throw new o("only one infix operator per group",n.token);r=a,e=n.replaceWith}}if(-1!==r&&e){var i,s,h=t.slice(0,r),l=t.slice(r+1);return i=1===h.length&&"ordgroup"===h[0].type?h[0]:{type:"ordgroup",mode:this.mode,body:h},s=1===l.length&&"ordgroup"===l[0].type?l[0]:{type:"ordgroup",mode:this.mode,body:l},["\\\\abovefrac"===e?this.callFunction(e,[i,t[r],s],[]):this.callFunction(e,[i,s],[])]}return t},e.handleSupSubscript=function(e){var r=this.fetch(),a=r.text;this.consume();var n=this.parseGroup(e,!1,t.SUPSUB_GREEDINESS,void 0,void 0,!0);if(!n)throw new o("Expected group after '"+a+"'",r);return n},e.formatUnsupportedCmd=function(t){for(var e=[],r=0;r<t.length;r++)e.push({type:"textord",mode:"text",text:t[r]});var a={type:"text",mode:this.mode,body:e};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[a]}},e.parseAtom=function(t){var e,r,a=this.parseGroup("atom",!1,null,t);if("text"===this.mode)return a;for(;;){this.consumeSpaces();var n=this.fetch();if("\\limits"===n.text||"\\nolimits"===n.text){var i=Vt(a,"op");if(i){var s="\\limits"===n.text;i.limits=s,i.alwaysHandleSupSub=!0}else{if(!(i=Vt(a,"operatorname"))||!i.alwaysHandleSupSub)throw new o("Limit controls must follow a math operator",n);var h="\\limits"===n.text;i.limits=h}this.consume()}else if("^"===n.text){if(e)throw new o("Double superscript",n);e=this.handleSupSubscript("superscript")}else if("_"===n.text){if(r)throw new o("Double subscript",n);r=this.handleSupSubscript("subscript")}else{if("'"!==n.text)break;if(e)throw new o("Double superscript",n);var l={type:"textord",mode:this.mode,text:"\\prime"},m=[l];for(this.consume();"'"===this.fetch().text;)m.push(l),this.consume();"^"===this.fetch().text&&m.push(this.handleSupSubscript("superscript")),e={type:"ordgroup",mode:this.mode,body:m}}}return e||r?{type:"supsub",mode:this.mode,base:a,sup:e,sub:r}:a},e.parseFunction=function(t,e,r){var a=this.fetch(),n=a.text,i=ia[n];if(!i)return null;if(this.consume(),null!=r&&i.greediness<=r)throw new o("Got function '"+n+"' with no arguments"+(e?" as "+e:""),a);if("text"===this.mode&&!i.allowedInText)throw new o("Can't use function '"+n+"' in text mode",a);if("math"===this.mode&&!1===i.allowedInMath)throw new o("Can't use function '"+n+"' in math mode",a);var s=this.parseArguments(n,i),h=s.args,l=s.optArgs;return this.callFunction(n,h,l,a,t)},e.callFunction=function(t,e,r,a,n){var i={funcName:t,parser:this,token:a,breakOnTokenText:n},s=ia[t];if(s&&s.handler)return s.handler(i,e,r);throw new o("No function handler for "+t)},e.parseArguments=function(t,e){var r=e.numArgs+e.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var a=e.greediness,n=[],i=[],s=0;s<r;s++){var h=e.argTypes&&e.argTypes[s],l=s<e.numOptionalArgs,m=s>0&&!l||0===s&&!l&&"math"===this.mode,c=this.parseGroupOfType("argument to '"+t+"'",h,l,a,m);if(!c){if(l){i.push(null);continue}throw new o("Expected group after '"+t+"'",this.fetch())}(l?i:n).push(c)}return{args:n,optArgs:i}},e.parseGroupOfType=function(t,e,r,a,n){switch(e){case"color":return n&&this.consumeSpaces(),this.parseColorGroup(r);case"size":return n&&this.consumeSpaces(),this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r,n);case"math":case"text":return this.parseGroup(t,r,a,void 0,e,n);case"hbox":var i=this.parseGroup(t,r,a,void 0,"text",n);return i?{type:"styling",mode:i.mode,body:[i],style:"text"}:i;case"raw":if(n&&this.consumeSpaces(),r&&"{"===this.fetch().text)return null;var s=this.parseStringGroup("raw",r,!0);if(s)return{type:"raw",mode:"text",string:s.text};throw new o("Expected raw group",this.fetch());case"original":case null:case void 0:return this.parseGroup(t,r,a,void 0,void 0,n);default:throw new o("Unknown group type as "+t,this.fetch())}},e.consumeSpaces=function(){for(;" "===this.fetch().text;)this.consume()},e.parseStringGroup=function(t,e,r){var a=e?"[":"{",n=e?"]":"}",i=this.fetch();if(i.text!==a){if(e)return null;if(r&&"EOF"!==i.text&&/[^{}[\]]/.test(i.text))return this.consume(),i}var s=this.mode;this.mode="text",this.expect(a);for(var h,l="",m=this.fetch(),c=0,u=m;(h=this.fetch()).text!==n||r&&c>0;){switch(h.text){case"EOF":throw new o("Unexpected end of input in "+t,m.range(u,l));case a:c++;break;case n:c--}l+=(u=h).text,this.consume()}return this.expect(n),this.mode=s,m.range(u,l)},e.parseRegexGroup=function(t,e){var r=this.mode;this.mode="text";for(var a,n=this.fetch(),i=n,s="";"EOF"!==(a=this.fetch()).text&&t.test(s+a.text);)s+=(i=a).text,this.consume();if(""===s)throw new o("Invalid "+e+": '"+n.text+"'",n);return this.mode=r,n.range(i,s)},e.parseColorGroup=function(t){var e=this.parseStringGroup("color",t);if(!e)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(e.text);if(!r)throw new o("Invalid color: '"+e.text+"'",e);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a="#"+a),{type:"color-token",mode:this.mode,color:a}},e.parseSizeGroup=function(t){var e,r=!1;if(!(e=t||"{"===this.fetch().text?this.parseStringGroup("size",t):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;t||0!==e.text.length||(e.text="0pt",r=!0);var a=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e.text);if(!a)throw new o("Invalid size: '"+e.text+"'",e);var n={number:+(a[1]+a[2]),unit:a[3]};if(!At(n))throw new o("Invalid unit: '"+n.unit+"'",e);return{type:"size",mode:this.mode,value:n,isBlank:r}},e.parseUrlGroup=function(t,e){this.gullet.lexer.setCatcode("%",13);var r=this.parseStringGroup("url",t,!0);if(this.gullet.lexer.setCatcode("%",14),!r)return null;var a=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:a}},e.parseGroup=function(e,r,n,i,s,h){var l=this.mode;s&&this.switchMode(s),h&&this.consumeSpaces();var m,c=this.fetch(),u=c.text;if(r?"["===u:"{"===u||"\\begingroup"===u){this.consume();var p=t.endOfGroup[u];this.gullet.beginGroup();var d=this.parseExpression(!1,p),f=this.fetch();this.expect(p),this.gullet.endGroup(),m={type:"ordgroup",mode:this.mode,loc:a.range(c,f),body:d,semisimple:"\\begingroup"===u||void 0}}else if(r)m=null;else if(null==(m=this.parseFunction(i,e,n)||this.parseSymbol())&&"\\"===u[0]&&!ya.hasOwnProperty(u)){if(this.settings.throwOnError)throw new o("Undefined control sequence: "+u,c);m=this.formatUnsupportedCmd(u),this.consume()}return s&&this.switchMode(l),m},e.formLigatures=function(t){for(var e=t.length-1,r=0;r<e;++r){var n=t[r],i=n.text;"-"===i&&"-"===t[r+1].text&&(r+1<e&&"-"===t[r+2].text?(t.splice(r,3,{type:"textord",mode:"text",loc:a.range(n,t[r+2]),text:"---"}),e-=2):(t.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,t[r+1]),text:"--"}),e-=1)),"'"!==i&&"`"!==i||t[r+1].text!==i||(t.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,t[r+1]),text:i+i}),e-=1)}},e.parseSymbol=function(){var t=this.fetch(),e=t.text;if(/^\\verb[^a-zA-Z]/.test(e)){this.consume();var r=e.slice(5),n="*"===r.charAt(0);if(n&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new o("\\verb assertion failed --\n                    please report what input caused this bug");return{type:"verb",mode:"text",body:r=r.slice(1,-1),star:n}}Sa.hasOwnProperty(e[0])&&!j[this.mode][e[0]]&&(this.settings.strict&&"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+e[0]+'" used in math mode',t),e=Sa[e[0]]+e.substr(1));var i,s=sa.exec(e);if(s&&("i"===(e=e.substring(0,s.index))?e="\u0131":"j"===e&&(e="\u0237")),j[this.mode][e]){this.settings.strict&&"math"===this.mode&&"\xc7\xd0\xde\xe7\xfe".indexOf(e)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+e[0]+'" used in math mode',t);var h,l=j[this.mode][e].group,m=a.range(t);if(W.hasOwnProperty(l)){var c=l;h={type:"atom",mode:this.mode,family:c,loc:m,text:e}}else h={type:l,mode:this.mode,loc:m,text:e};i=h}else{if(!(e.charCodeAt(0)>=128))return null;this.settings.strict&&(M(e.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+e[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+e[0]+'" ('+e.charCodeAt(0)+")",t)),i={type:"textord",mode:"text",loc:a.range(t),text:e}}if(this.consume(),s)for(var u=0;u<s[0].length;u++){var p=s[0][u];if(!ka[p])throw new o("Unknown accent ' "+p+"'",t);var d=ka[p][this.mode];if(!d)throw new o("Accent "+p+" unsupported in "+this.mode+" mode",t);i={type:"accent",mode:this.mode,loc:a.range(t),label:d,isStretchy:!1,isShifty:!0,base:i}}return i},t}();Ma.endOfExpression=["}","\\endgroup","\\end","\\right","&"],Ma.endOfGroup={"[":"]","{":"}","\\begingroup":"\\endgroup"},Ma.SUPSUB_GREEDINESS=1;var za=function(t,e){if(!("string"==typeof t||t instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new Ma(t,e);delete r.gullet.macros.current["\\df@tag"];var a=r.parse();if(r.gullet.macros.get("\\df@tag")){if(!e.displayMode)throw new o("\\tag works only in display equations");r.gullet.feed("\\df@tag"),a=[{type:"tag",mode:"text",body:a,tag:r.parse()}]}return a},Aa=function(t,e,r){e.textContent="";var a=Ba(t,r).toNode();e.appendChild(a)};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),Aa=function(){throw new o("KaTeX doesn't work in quirks mode.")});var Ta=function(t,e,r){if(r.throwOnError||!(t instanceof o))throw t;var a=Dt.makeSpan(["katex-error"],[new E(e)]);return a.setAttribute("title",t.toString()),a.setAttribute("style","color:"+r.errorColor),a},Ba=function(t,e){var r=new u(e);try{var a=za(t,r);return Be(a,t,r)}catch(e){return Ta(e,t,r)}},Ca={version:"0.11.1",render:Aa,renderToString:function(t,e){return Ba(t,e).toMarkup()},ParseError:o,__parse:function(t,e){var r=new u(e);return za(t,r)},__renderToDomTree:Ba,__renderToHTMLTree:function(t,e){var r=new u(e);try{return function(t,e,r){var a=de(t,Ae(r)),n=Dt.makeSpan(["katex"],[a]);return Te(n,r)}(za(t,r),0,r)}catch(e){return Ta(e,t,r)}},__setFontMetrics:function(t,e){F[t]=e},__defineSymbol:$,__defineMacro:pa,__domTree:{Span:N,Anchor:I,SymbolNode:E,SvgNode:L,PathNode:H,LineNode:P}};e.default=Ca}]).default});
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/katex/katex.mjs b/codegen/vulkan/vulkan-docs-next/katex/katex.mjs
new file mode 100644
index 0000000..dc7eebb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/katex/katex.mjs
@@ -0,0 +1,17021 @@
+/**
+ * Lexing or parsing positional information for error reporting.
+ * This object is immutable.
+ */
+class SourceLocation {
+  // The + prefix indicates that these fields aren't writeable
+  // Lexer holding the input string.
+  // Start offset, zero-based inclusive.
+  // End offset, zero-based exclusive.
+  constructor(lexer, start, end) {
+    this.lexer = void 0;
+    this.start = void 0;
+    this.end = void 0;
+    this.lexer = lexer;
+    this.start = start;
+    this.end = end;
+  }
+  /**
+   * Merges two `SourceLocation`s from location providers, given they are
+   * provided in order of appearance.
+   * - Returns the first one's location if only the first is provided.
+   * - Returns a merged range of the first and the last if both are provided
+   *   and their lexers match.
+   * - Otherwise, returns null.
+   */
+
+
+  static range(first, second) {
+    if (!second) {
+      return first && first.loc;
+    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {
+      return null;
+    } else {
+      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);
+    }
+  }
+
+}
+
+/**
+ * Interface required to break circular dependency between Token, Lexer, and
+ * ParseError.
+ */
+
+/**
+ * The resulting token returned from `lex`.
+ *
+ * It consists of the token text plus some position information.
+ * The position information is essentially a range in an input string,
+ * but instead of referencing the bare input string, we refer to the lexer.
+ * That way it is possible to attach extra metadata to the input string,
+ * like for example a file name or similar.
+ *
+ * The position information is optional, so it is OK to construct synthetic
+ * tokens if appropriate. Not providing available position information may
+ * lead to degraded error reporting, though.
+ */
+class Token {
+  constructor(text, // the text of this token
+  loc) {
+    this.text = void 0;
+    this.loc = void 0;
+    this.text = text;
+    this.loc = loc;
+  }
+  /**
+   * Given a pair of tokens (this and endToken), compute a `Token` encompassing
+   * the whole input range enclosed by these two.
+   */
+
+
+  range(endToken, // last token of the range, inclusive
+  text) // the text of the newly constructed token
+  {
+    return new Token(text, SourceLocation.range(this, endToken));
+  }
+
+}
+
+/**
+ * This is the ParseError class, which is the main error thrown by KaTeX
+ * functions when something has gone wrong. This is used to distinguish internal
+ * errors from errors in the expression that the user provided.
+ *
+ * If possible, a caller should provide a Token or ParseNode with information
+ * about where in the source string the problem occurred.
+ */
+class ParseError {
+  // Error position based on passed-in Token or ParseNode.
+  constructor(message, // The error message
+  token) // An object providing position information
+  {
+    this.position = void 0;
+    let error = "KaTeX parse error: " + message;
+    let start;
+    const loc = token && token.loc;
+
+    if (loc && loc.start <= loc.end) {
+      // If we have the input and a position, make the error a bit fancier
+      // Get the input
+      const input = loc.lexer.input; // Prepend some information
+
+      start = loc.start;
+      const end = loc.end;
+
+      if (start === input.length) {
+        error += " at end of input: ";
+      } else {
+        error += " at position " + (start + 1) + ": ";
+      } // Underline token in question using combining underscores
+
+
+      const underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error
+
+      let left;
+
+      if (start > 15) {
+        left = "…" + input.slice(start - 15, start);
+      } else {
+        left = input.slice(0, start);
+      }
+
+      let right;
+
+      if (end + 15 < input.length) {
+        right = input.slice(end, end + 15) + "…";
+      } else {
+        right = input.slice(end);
+      }
+
+      error += left + underlined + right;
+    } // Some hackery to make ParseError a prototype of Error
+    // See http://stackoverflow.com/a/8460753
+
+
+    const self = new Error(error);
+    self.name = "ParseError"; // $FlowFixMe
+
+    self.__proto__ = ParseError.prototype; // $FlowFixMe
+
+    self.position = start;
+    return self;
+  }
+
+} // $FlowFixMe More hackery
+
+
+ParseError.prototype.__proto__ = Error.prototype;
+
+/**
+ * This file contains a list of utility functions which are useful in other
+ * files.
+ */
+
+/**
+ * Return whether an element is contained in a list
+ */
+const contains = function contains(list, elem) {
+  return list.indexOf(elem) !== -1;
+};
+/**
+ * Provide a default value if a setting is undefined
+ * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.
+ */
+
+
+const deflt = function deflt(setting, defaultIfUndefined) {
+  return setting === undefined ? defaultIfUndefined : setting;
+}; // hyphenate and escape adapted from Facebook's React under Apache 2 license
+
+
+const uppercase = /([A-Z])/g;
+
+const hyphenate = function hyphenate(str) {
+  return str.replace(uppercase, "-$1").toLowerCase();
+};
+
+const ESCAPE_LOOKUP = {
+  "&": "&amp;",
+  ">": "&gt;",
+  "<": "&lt;",
+  "\"": "&quot;",
+  "'": "&#x27;"
+};
+const ESCAPE_REGEX = /[&><"']/g;
+/**
+ * Escapes text to prevent scripting attacks.
+ */
+
+function escape(text) {
+  return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);
+}
+/**
+ * Sometimes we want to pull out the innermost element of a group. In most
+ * cases, this will just be the group itself, but when ordgroups and colors have
+ * a single element, we want to pull that out.
+ */
+
+
+const getBaseElem = function getBaseElem(group) {
+  if (group.type === "ordgroup") {
+    if (group.body.length === 1) {
+      return getBaseElem(group.body[0]);
+    } else {
+      return group;
+    }
+  } else if (group.type === "color") {
+    if (group.body.length === 1) {
+      return getBaseElem(group.body[0]);
+    } else {
+      return group;
+    }
+  } else if (group.type === "font") {
+    return getBaseElem(group.body);
+  } else {
+    return group;
+  }
+};
+/**
+ * TeXbook algorithms often reference "character boxes", which are simply groups
+ * with a single character in them. To decide if something is a character box,
+ * we find its innermost group, and see if it is a single character.
+ */
+
+
+const isCharacterBox = function isCharacterBox(group) {
+  const baseElem = getBaseElem(group); // These are all they types of groups which hold single characters
+
+  return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
+};
+
+const assert = function assert(value) {
+  if (!value) {
+    throw new Error('Expected non-null, but got ' + String(value));
+  }
+
+  return value;
+};
+/**
+ * Return the protocol of a URL, or "_relative" if the URL does not specify a
+ * protocol (and thus is relative).
+ */
+
+const protocolFromUrl = function protocolFromUrl(url) {
+  const protocol = /^\s*([^\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(url);
+  return protocol != null ? protocol[1] : "_relative";
+};
+var utils = {
+  contains,
+  deflt,
+  escape,
+  hyphenate,
+  getBaseElem,
+  isCharacterBox,
+  protocolFromUrl
+};
+
+/* eslint no-console:0 */
+
+/**
+ * The main Settings object
+ *
+ * The current options stored are:
+ *  - displayMode: Whether the expression should be typeset as inline math
+ *                 (false, the default), meaning that the math starts in
+ *                 \textstyle and is placed in an inline-block); or as display
+ *                 math (true), meaning that the math starts in \displaystyle
+ *                 and is placed in a block with vertical margin.
+ */
+class Settings {
+  constructor(options) {
+    this.displayMode = void 0;
+    this.output = void 0;
+    this.leqno = void 0;
+    this.fleqn = void 0;
+    this.throwOnError = void 0;
+    this.errorColor = void 0;
+    this.macros = void 0;
+    this.minRuleThickness = void 0;
+    this.colorIsTextColor = void 0;
+    this.strict = void 0;
+    this.trust = void 0;
+    this.maxSize = void 0;
+    this.maxExpand = void 0;
+    // allow null options
+    options = options || {};
+    this.displayMode = utils.deflt(options.displayMode, false);
+    this.output = utils.deflt(options.output, "htmlAndMathml");
+    this.leqno = utils.deflt(options.leqno, false);
+    this.fleqn = utils.deflt(options.fleqn, false);
+    this.throwOnError = utils.deflt(options.throwOnError, true);
+    this.errorColor = utils.deflt(options.errorColor, "#cc0000");
+    this.macros = options.macros || {};
+    this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
+    this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
+    this.strict = utils.deflt(options.strict, "warn");
+    this.trust = utils.deflt(options.trust, false);
+    this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
+    this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
+  }
+  /**
+   * Report nonstrict (non-LaTeX-compatible) input.
+   * Can safely not be called if `this.strict` is false in JavaScript.
+   */
+
+
+  reportNonstrict(errorCode, errorMsg, token) {
+    let strict = this.strict;
+
+    if (typeof strict === "function") {
+      // Allow return value of strict function to be boolean or string
+      // (or null/undefined, meaning no further processing).
+      strict = strict(errorCode, errorMsg, token);
+    }
+
+    if (!strict || strict === "ignore") {
+      return;
+    } else if (strict === true || strict === "error") {
+      throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + `${errorMsg} [${errorCode}]`, token);
+    } else if (strict === "warn") {
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`);
+    } else {
+      // won't happen in type-safe code
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`);
+    }
+  }
+  /**
+   * Check whether to apply strict (LaTeX-adhering) behavior for unusual
+   * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
+   * instead, "error" translates to a return value of `true`, while "ignore"
+   * translates to a return value of `false`.  May still print a warning:
+   * "warn" prints a warning and returns `false`.
+   * This is for the second category of `errorCode`s listed in the README.
+   */
+
+
+  useStrictBehavior(errorCode, errorMsg, token) {
+    let strict = this.strict;
+
+    if (typeof strict === "function") {
+      // Allow return value of strict function to be boolean or string
+      // (or null/undefined, meaning no further processing).
+      // But catch any exceptions thrown by function, treating them
+      // like "error".
+      try {
+        strict = strict(errorCode, errorMsg, token);
+      } catch (error) {
+        strict = "error";
+      }
+    }
+
+    if (!strict || strict === "ignore") {
+      return false;
+    } else if (strict === true || strict === "error") {
+      return true;
+    } else if (strict === "warn") {
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`);
+      return false;
+    } else {
+      // won't happen in type-safe code
+      typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`);
+      return false;
+    }
+  }
+  /**
+   * Check whether to test potentially dangerous input, and return
+   * `true` (trusted) or `false` (untrusted).  The sole argument `context`
+   * should be an object with `command` field specifying the relevant LaTeX
+   * command (as a string starting with `\`), and any other arguments, etc.
+   * If `context` has a `url` field, a `protocol` field will automatically
+   * get added by this function (changing the specified object).
+   */
+
+
+  isTrusted(context) {
+    if (context.url && !context.protocol) {
+      context.protocol = utils.protocolFromUrl(context.url);
+    }
+
+    const trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
+    return Boolean(trust);
+  }
+
+}
+
+/**
+ * This file contains information and classes for the various kinds of styles
+ * used in TeX. It provides a generic `Style` class, which holds information
+ * about a specific style. It then provides instances of all the different kinds
+ * of styles possible, and provides functions to move between them and get
+ * information about them.
+ */
+
+/**
+ * The main style class. Contains a unique id for the style, a size (which is
+ * the same for cramped and uncramped version of a style), and a cramped flag.
+ */
+class Style {
+  constructor(id, size, cramped) {
+    this.id = void 0;
+    this.size = void 0;
+    this.cramped = void 0;
+    this.id = id;
+    this.size = size;
+    this.cramped = cramped;
+  }
+  /**
+   * Get the style of a superscript given a base in the current style.
+   */
+
+
+  sup() {
+    return styles[sup[this.id]];
+  }
+  /**
+   * Get the style of a subscript given a base in the current style.
+   */
+
+
+  sub() {
+    return styles[sub[this.id]];
+  }
+  /**
+   * Get the style of a fraction numerator given the fraction in the current
+   * style.
+   */
+
+
+  fracNum() {
+    return styles[fracNum[this.id]];
+  }
+  /**
+   * Get the style of a fraction denominator given the fraction in the current
+   * style.
+   */
+
+
+  fracDen() {
+    return styles[fracDen[this.id]];
+  }
+  /**
+   * Get the cramped version of a style (in particular, cramping a cramped style
+   * doesn't change the style).
+   */
+
+
+  cramp() {
+    return styles[cramp[this.id]];
+  }
+  /**
+   * Get a text or display version of this style.
+   */
+
+
+  text() {
+    return styles[text[this.id]];
+  }
+  /**
+   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
+   */
+
+
+  isTight() {
+    return this.size >= 2;
+  }
+
+} // Export an interface for type checking, but don't expose the implementation.
+// This way, no more styles can be generated.
+
+
+// IDs of the different styles
+const D = 0;
+const Dc = 1;
+const T = 2;
+const Tc = 3;
+const S = 4;
+const Sc = 5;
+const SS = 6;
+const SSc = 7; // Instances of the different styles
+
+const styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another
+
+const sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
+const sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
+const fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
+const fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
+const cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
+const text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.
+
+var Style$1 = {
+  DISPLAY: styles[D],
+  TEXT: styles[T],
+  SCRIPT: styles[S],
+  SCRIPTSCRIPT: styles[SS]
+};
+
+/*
+ * This file defines the Unicode scripts and script families that we
+ * support. To add new scripts or families, just add a new entry to the
+ * scriptData array below. Adding scripts to the scriptData array allows
+ * characters from that script to appear in \text{} environments.
+ */
+
+/**
+ * Each script or script family has a name and an array of blocks.
+ * Each block is an array of two numbers which specify the start and
+ * end points (inclusive) of a block of Unicode codepoints.
+ */
+
+/**
+ * Unicode block data for the families of scripts we support in \text{}.
+ * Scripts only need to appear here if they do not have font metrics.
+ */
+const scriptData = [{
+  // Latin characters beyond the Latin-1 characters we have metrics for.
+  // Needed for Czech, Hungarian and Turkish text, for example.
+  name: 'latin',
+  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
+  [0x0300, 0x036f]]
+}, {
+  // The Cyrillic script used by Russian and related languages.
+  // A Cyrillic subset used to be supported as explicitly defined
+  // symbols in symbols.js
+  name: 'cyrillic',
+  blocks: [[0x0400, 0x04ff]]
+}, {
+  // The Brahmic scripts of South and Southeast Asia
+  // Devanagari (0900–097F)
+  // Bengali (0980–09FF)
+  // Gurmukhi (0A00–0A7F)
+  // Gujarati (0A80–0AFF)
+  // Oriya (0B00–0B7F)
+  // Tamil (0B80–0BFF)
+  // Telugu (0C00–0C7F)
+  // Kannada (0C80–0CFF)
+  // Malayalam (0D00–0D7F)
+  // Sinhala (0D80–0DFF)
+  // Thai (0E00–0E7F)
+  // Lao (0E80–0EFF)
+  // Tibetan (0F00–0FFF)
+  // Myanmar (1000–109F)
+  name: 'brahmic',
+  blocks: [[0x0900, 0x109F]]
+}, {
+  name: 'georgian',
+  blocks: [[0x10A0, 0x10ff]]
+}, {
+  // Chinese and Japanese.
+  // The "k" in cjk is for Korean, but we've separated Korean out
+  name: "cjk",
+  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana
+  [0x4E00, 0x9FAF], // CJK ideograms
+  [0xFF00, 0xFF60]]
+}, {
+  // Korean
+  name: 'hangul',
+  blocks: [[0xAC00, 0xD7AF]]
+}];
+/**
+ * Given a codepoint, return the name of the script or script family
+ * it is from, or null if it is not part of a known block
+ */
+
+function scriptFromCodepoint(codepoint) {
+  for (let i = 0; i < scriptData.length; i++) {
+    const script = scriptData[i];
+
+    for (let i = 0; i < script.blocks.length; i++) {
+      const block = script.blocks[i];
+
+      if (codepoint >= block[0] && codepoint <= block[1]) {
+        return script.name;
+      }
+    }
+  }
+
+  return null;
+}
+/**
+ * A flattened version of all the supported blocks in a single array.
+ * This is an optimization to make supportedCodepoint() fast.
+ */
+
+const allBlocks = [];
+scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));
+/**
+ * Given a codepoint, return true if it falls within one of the
+ * scripts or script families defined above and false otherwise.
+ *
+ * Micro benchmarks shows that this is faster than
+ * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
+ * in Firefox, Chrome and Node.
+ */
+
+function supportedCodepoint(codepoint) {
+  for (let i = 0; i < allBlocks.length; i += 2) {
+    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+/**
+ * This file provides support to domTree.js and delimiter.js.
+ * It's a storehouse of path geometry for SVG images.
+ */
+// In all paths below, the viewBox-to-em scale is 1000:1.
+const hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
+// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
+// Think of variable extraViniculum as two detours in the SVG path.
+// The detour begins at the lower left of the area labeled extraViniculum below.
+// The detour proceeds one extraViniculum distance up and slightly to the right,
+// displacing the radiused corner between surd and viniculum. The radius is
+// traversed as usual, then the detour resumes. It goes right, to the end of
+// the very long viniculumn, then down one extraViniculum distance,
+// after which it resumes regular path geometry for the radical.
+
+/*                                                  viniculum
+                                                   /
+         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
+        / █████████████████████←0.04em (40 unit) std viniculum thickness
+       / /
+      / /
+     / /\
+    / / surd
+*/
+
+const sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
+  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main
+  return `M95,${622 + extraViniculum + hLinePad}
+c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
+c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
+c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
+s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
+c69,-144,104.5,-217.7,106.5,-221
+l${extraViniculum / 2.075} -${extraViniculum}
+c5.3,-9.3,12,-14,20,-14
+H400000v${40 + extraViniculum}H845.2724
+s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
+c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
+M${834 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
+};
+
+const sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
+  // size1 is from glyph U221A in the font KaTeX_Size1-Regular
+  return `M263,${601 + extraViniculum + hLinePad}c0.7,0,18,39.7,52,119
+c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120
+c340,-704.7,510.7,-1060.3,512,-1067
+l${extraViniculum / 2.084} -${extraViniculum}
+c4.7,-7.3,11,-11,19,-11
+H40000v${40 + extraViniculum}H1012.3
+s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232
+c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1
+s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26
+c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z
+M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
+};
+
+const sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
+  // size2 is from glyph U221A in the font KaTeX_Size2-Regular
+  return `M983 ${10 + extraViniculum + hLinePad}
+l${extraViniculum / 3.13} -${extraViniculum}
+c4,-6.7,10,-10,18,-10 H400000v${40 + extraViniculum}
+H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7
+s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744
+c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30
+c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722
+c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5
+c53.7,-170.3,84.5,-266.8,92.5,-289.5z
+M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`;
+};
+
+const sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
+  // size3 is from glyph U221A in the font KaTeX_Size3-Regular
+  return `M424,${2398 + extraViniculum + hLinePad}
+c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514
+c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20
+s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121
+s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081
+l${extraViniculum / 4.223} -${extraViniculum}c4,-6.7,10,-10,18,-10 H400000
+v${40 + extraViniculum}H1014.6
+s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185
+c-2,6,-10,9,-24,9
+c-8,0,-12,-0.7,-12,-2z M${1001 + extraViniculum} ${hLinePad}
+h400000v${40 + extraViniculum}h-400000z`;
+};
+
+const sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
+  // size4 is from glyph U221A in the font KaTeX_Size4-Regular
+  return `M473,${2713 + extraViniculum + hLinePad}
+c339.3,-1799.3,509.3,-2700,510,-2702 l${extraViniculum / 5.298} -${extraViniculum}
+c3.3,-7.3,9.3,-11,18,-11 H400000v${40 + extraViniculum}H1017.7
+s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
+c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
+c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
+s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
+606zM${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}H1017.7z`;
+};
+
+const sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
+  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
+  // One path edge has a variable length. It runs vertically from the viniculumn
+  // to a point near (14 units) the bottom of the surd. The viniculum
+  // is normally 40 units thick. So the length of the line in question is:
+  const vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
+  return `M702 ${extraViniculum + hLinePad}H400000${40 + extraViniculum}
+H742v${vertSegment}l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1
+h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170
+c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667
+219 661 l218 661zM702 ${hLinePad}H400000v${40 + extraViniculum}H742z`;
+};
+
+const sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
+  extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
+
+  let path = "";
+
+  switch (size) {
+    case "sqrtMain":
+      path = sqrtMain(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize1":
+      path = sqrtSize1(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize2":
+      path = sqrtSize2(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize3":
+      path = sqrtSize3(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtSize4":
+      path = sqrtSize4(extraViniculum, hLinePad);
+      break;
+
+    case "sqrtTall":
+      path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
+  }
+
+  return path;
+};
+const path = {
+  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
+  doubleleftarrow: `M262 157
+l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3
+ 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28
+ 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5
+c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5
+ 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87
+-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7
+-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z
+m8 0v40h399730v-40zm0 194v40h399730v-40z`,
+  // doublerightarrow is from glyph U+21D2 in font KaTeX Main
+  doublerightarrow: `M399738 392l
+-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5
+ 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88
+-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68
+-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18
+-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782
+c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3
+-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,
+  // leftarrow is from glyph U+2190 in font KaTeX Main
+  leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120
+ 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8
+-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247
+c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208
+ 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3
+ 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202
+ l-3-3h399890zM100 241v40h399900v-40z`,
+  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+  leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117
+-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7
+ 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,
+  leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
+ 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
+ 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
+-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,
+  // overgroup is from the MnSymbol package (public domain)
+  leftgroup: `M400000 80
+H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0
+ 435 0h399565z`,
+  leftgroupunder: `M400000 262
+H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219
+ 435 219h399565z`,
+  // Harpoons are from glyph U+21BD in font KaTeX Main
+  leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3
+-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5
+-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7
+-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,
+  leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5
+ 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3
+-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7
+-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z
+m0 0v40h400000v-40z`,
+  leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333
+ 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5
+ 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667
+-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,
+  leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12
+ 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7
+-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0
+v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,
+  // hook is from glyph U+21A9 in font KaTeX Main
+  lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5
+-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3
+-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21
+ 71.5 23h399859zM103 281v-40h399897v40z`,
+  leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z
+M40 281 V428 H0 V94 H40 V241 H400000 v40z`,
+  leftmapsto: `M40 281 V448H0V74H40V241H400000v40z
+M40 281 V448H0V74H40V241H400000v40z`,
+  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
+  leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23
+-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8
+c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3
+ 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,
+  longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z
+M0 50 h400000 v40H0z m0 194h40000v40H0z`,
+  midbrace: `M200428 334
+c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14
+-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7
+ 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11
+ 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,
+  midbraceunder: `M199572 214
+c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
+ 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
+ 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
+-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,
+  oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6
+-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z
+m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8
+60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,
+  oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8
+-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z
+m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2
+c0 110 84 276 504 276s502.4-166 502.4-276z`,
+  oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6
+-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z
+m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0
+85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,
+  oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8
+-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z
+m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1
+c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,
+  rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128
+-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
+ 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
+ 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
+-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
+-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
+ 151.7 139 205zm0 0v40h399900v-40z`,
+  rightbrace: `M400000 542l
+-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5
+s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1
+c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,
+  rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
+ 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
+-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,
+  rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0
+ 3-1 3-3v-38c-76-158-257-219-435-219H0z`,
+  rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18
+ 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,
+  rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3
+-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2
+-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58
+ 69.2 92 94.5zm0 0v40h399900v-40z`,
+  rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11
+-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7
+ 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z
+m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,
+  rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8
+ 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5
+-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95
+-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,
+  rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8
+ 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3
+ 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3
+-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z
+m0-194v40h400000v-40zm0 0v40h400000v-40z`,
+  righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3
+ 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0
+-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21
+ 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,
+  rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z
+M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,
+  rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23
+ 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32
+-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142
+-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,
+  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
+  twoheadleftarrow: `M0 167c68 40
+ 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69
+-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3
+-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19
+-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101
+ 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,
+  twoheadrightarrow: `M400000 167
+c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3
+ 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42
+ 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333
+-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70
+ 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,
+  // tilde1 is a modified version of a glyph from the MnSymbol package
+  tilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7
+-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0
+ 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0
+ 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128
+-68.267.847-113-73.952-191-73.952z`,
+  // ditto tilde2, tilde3, & tilde4
+  tilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418
+-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9
+ 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114
+c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751
+ 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,
+  tilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457
+-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0
+ 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697
+ 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696
+ -338 0-409-156.573-744-156.573z`,
+  tilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345
+-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409
+ 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9
+ 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409
+ -175.236-744-175.236z`,
+  // vec is from glyph U+20D7 in font KaTeX Main
+  vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5
+3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11
+10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63
+-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1
+-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59
+H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359
+c-16-25.333-24-45-24-59z`,
+  // widehat1 is a modified version of a glyph from the MnSymbol package
+  widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22
+c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,
+  // ditto widehat2, widehat3, & widehat4
+  widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+  widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+  widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+  // widecheck paths are all inverted versions of widehat
+  widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,
+-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,
+  widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+  widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+  widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+  // The next ten paths support reaction arrows from the mhchem package.
+  // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
+  // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main
+  baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202
+c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5
+c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130
+s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47
+121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6
+s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11
+c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z
+M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,
+  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
+  rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32
+-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0
+13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39
+-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5
+-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
+-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
+151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,
+  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
+  // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
+  baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
+c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17
+c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21
+c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40
+c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z
+M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,
+  rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0
+c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
+-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
+c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
+M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,
+  shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
+c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,
+1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,
+-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z
+M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,
+  shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0
+c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
+-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
+c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
+M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`
+};
+
+/**
+ * This node represents a document fragment, which contains elements, but when
+ * placed into the DOM doesn't have any representation itself. It only contains
+ * children and doesn't have any DOM node properties.
+ */
+class DocumentFragment {
+  // HtmlDomNode
+  // Never used; needed for satisfying interface.
+  constructor(children) {
+    this.children = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    this.children = children;
+    this.classes = [];
+    this.height = 0;
+    this.depth = 0;
+    this.maxFontSize = 0;
+    this.style = {};
+  }
+
+  hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+  /** Convert the fragment into a node. */
+
+
+  toNode() {
+    const frag = document.createDocumentFragment();
+
+    for (let i = 0; i < this.children.length; i++) {
+      frag.appendChild(this.children[i].toNode());
+    }
+
+    return frag;
+  }
+  /** Convert the fragment into HTML markup. */
+
+
+  toMarkup() {
+    let markup = ""; // Simply concatenate the markup for the children together.
+
+    for (let i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    return markup;
+  }
+  /**
+   * Converts the math node into a string, similar to innerText. Applies to
+   * MathDomNode's only.
+   */
+
+
+  toText() {
+    // To avoid this, we would subclass documentFragment separately for
+    // MathML, but polyfills for subclassing is expensive per PR 1469.
+    // $FlowFixMe: Only works for ChildType = MathDomNode.
+    const toText = child => child.toText();
+
+    return this.children.map(toText).join("");
+  }
+
+}
+
+/**
+ * These objects store the data about the DOM nodes we create, as well as some
+ * extra data. They can then be transformed into real DOM nodes with the
+ * `toNode` function or HTML markup using `toMarkup`. They are useful for both
+ * storing extra properties on the nodes, as well as providing a way to easily
+ * work with the DOM.
+ *
+ * Similar functions for working with MathML nodes exist in mathMLTree.js.
+ *
+ * TODO: refactor `span` and `anchor` into common superclass when
+ * target environments support class inheritance
+ */
+
+/**
+ * Create an HTML className based on a list of classes. In addition to joining
+ * with spaces, we also remove empty classes.
+ */
+const createClass = function createClass(classes) {
+  return classes.filter(cls => cls).join(" ");
+};
+
+const initNode = function initNode(classes, options, style) {
+  this.classes = classes || [];
+  this.attributes = {};
+  this.height = 0;
+  this.depth = 0;
+  this.maxFontSize = 0;
+  this.style = style || {};
+
+  if (options) {
+    if (options.style.isTight()) {
+      this.classes.push("mtight");
+    }
+
+    const color = options.getColor();
+
+    if (color) {
+      this.style.color = color;
+    }
+  }
+};
+/**
+ * Convert into an HTML node
+ */
+
+
+const toNode = function toNode(tagName) {
+  const node = document.createElement(tagName); // Apply the class
+
+  node.className = createClass(this.classes); // Apply inline styles
+
+  for (const style in this.style) {
+    if (this.style.hasOwnProperty(style)) {
+      // $FlowFixMe Flow doesn't seem to understand span.style's type.
+      node.style[style] = this.style[style];
+    }
+  } // Apply attributes
+
+
+  for (const attr in this.attributes) {
+    if (this.attributes.hasOwnProperty(attr)) {
+      node.setAttribute(attr, this.attributes[attr]);
+    }
+  } // Append the children, also as HTML nodes
+
+
+  for (let i = 0; i < this.children.length; i++) {
+    node.appendChild(this.children[i].toNode());
+  }
+
+  return node;
+};
+/**
+ * Convert into an HTML markup string
+ */
+
+
+const toMarkup = function toMarkup(tagName) {
+  let markup = `<${tagName}`; // Add the class
+
+  if (this.classes.length) {
+    markup += ` class="${utils.escape(createClass(this.classes))}"`;
+  }
+
+  let styles = ""; // Add the styles, after hyphenation
+
+  for (const style in this.style) {
+    if (this.style.hasOwnProperty(style)) {
+      styles += `${utils.hyphenate(style)}:${this.style[style]};`;
+    }
+  }
+
+  if (styles) {
+    markup += ` style="${utils.escape(styles)}"`;
+  } // Add the attributes
+
+
+  for (const attr in this.attributes) {
+    if (this.attributes.hasOwnProperty(attr)) {
+      markup += ` ${attr}="${utils.escape(this.attributes[attr])}"`;
+    }
+  }
+
+  markup += ">"; // Add the markup of the children, also as markup
+
+  for (let i = 0; i < this.children.length; i++) {
+    markup += this.children[i].toMarkup();
+  }
+
+  markup += `</${tagName}>`;
+  return markup;
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+// This type does not include all CSS properties. Additional properties should
+// be added as needed.
+
+
+/**
+ * This node represents a span node, with a className, a list of children, and
+ * an inline style. It also contains information about its height, depth, and
+ * maxFontSize.
+ *
+ * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan
+ * otherwise. This typesafety is important when HTML builders access a span's
+ * children.
+ */
+class Span {
+  constructor(classes, children, options, style) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.width = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    initNode.call(this, classes, options, style);
+    this.children = children || [];
+  }
+  /**
+   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
+   * all browsers support attributes the same, and having too many custom
+   * attributes is probably bad.
+   */
+
+
+  setAttribute(attribute, value) {
+    this.attributes[attribute] = value;
+  }
+
+  hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+
+  toNode() {
+    return toNode.call(this, "span");
+  }
+
+  toMarkup() {
+    return toMarkup.call(this, "span");
+  }
+
+}
+/**
+ * This node represents an anchor (<a>) element with a hyperlink.  See `span`
+ * for further details.
+ */
+
+class Anchor {
+  constructor(href, classes, children, options) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    initNode.call(this, classes, options);
+    this.children = children || [];
+    this.setAttribute('href', href);
+  }
+
+  setAttribute(attribute, value) {
+    this.attributes[attribute] = value;
+  }
+
+  hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+
+  toNode() {
+    return toNode.call(this, "a");
+  }
+
+  toMarkup() {
+    return toMarkup.call(this, "a");
+  }
+
+}
+/**
+ * This node represents an image embed (<img>) element.
+ */
+
+class Img {
+  constructor(src, alt, style) {
+    this.src = void 0;
+    this.alt = void 0;
+    this.classes = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.maxFontSize = void 0;
+    this.style = void 0;
+    this.alt = alt;
+    this.src = src;
+    this.classes = ["mord"];
+    this.style = style;
+  }
+
+  hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+
+  toNode() {
+    const node = document.createElement("img");
+    node.src = this.src;
+    node.alt = this.alt;
+    node.className = "mord"; // Apply inline styles
+
+    for (const style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        // $FlowFixMe
+        node.style[style] = this.style[style];
+      }
+    }
+
+    return node;
+  }
+
+  toMarkup() {
+    let markup = `<img  src='${this.src} 'alt='${this.alt}' `; // Add the styles, after hyphenation
+
+    let styles = "";
+
+    for (const style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        styles += `${utils.hyphenate(style)}:${this.style[style]};`;
+      }
+    }
+
+    if (styles) {
+      markup += ` style="${utils.escape(styles)}"`;
+    }
+
+    markup += "'/>";
+    return markup;
+  }
+
+}
+const iCombinations = {
+  'î': '\u0131\u0302',
+  'ï': '\u0131\u0308',
+  'í': '\u0131\u0301',
+  // 'ī': '\u0131\u0304', // enable when we add Extended Latin
+  'ì': '\u0131\u0300'
+};
+/**
+ * A symbol node contains information about a single symbol. It either renders
+ * to a single text node, or a span with a single text node in it, depending on
+ * whether it has CSS classes, styles, or needs italic correction.
+ */
+
+class SymbolNode {
+  constructor(text, height, depth, italic, skew, width, classes, style) {
+    this.text = void 0;
+    this.height = void 0;
+    this.depth = void 0;
+    this.italic = void 0;
+    this.skew = void 0;
+    this.width = void 0;
+    this.maxFontSize = void 0;
+    this.classes = void 0;
+    this.style = void 0;
+    this.text = text;
+    this.height = height || 0;
+    this.depth = depth || 0;
+    this.italic = italic || 0;
+    this.skew = skew || 0;
+    this.width = width || 0;
+    this.classes = classes || [];
+    this.style = style || {};
+    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we
+    // can specify which fonts to use.  This allows us to render these
+    // characters with a serif font in situations where the browser would
+    // either default to a sans serif or render a placeholder character.
+    // We use CSS class names like cjk_fallback, hangul_fallback and
+    // brahmic_fallback. See ./unicodeScripts.js for the set of possible
+    // script names
+
+    const script = scriptFromCodepoint(this.text.charCodeAt(0));
+
+    if (script) {
+      this.classes.push(script + "_fallback");
+    }
+
+    if (/[îïíì]/.test(this.text)) {
+      // add ī when we add Extended Latin
+      this.text = iCombinations[this.text];
+    }
+  }
+
+  hasClass(className) {
+    return utils.contains(this.classes, className);
+  }
+  /**
+   * Creates a text node or span from a symbol node. Note that a span is only
+   * created if it is needed.
+   */
+
+
+  toNode() {
+    const node = document.createTextNode(this.text);
+    let span = null;
+
+    if (this.italic > 0) {
+      span = document.createElement("span");
+      span.style.marginRight = this.italic + "em";
+    }
+
+    if (this.classes.length > 0) {
+      span = span || document.createElement("span");
+      span.className = createClass(this.classes);
+    }
+
+    for (const style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type.
+
+        span.style[style] = this.style[style];
+      }
+    }
+
+    if (span) {
+      span.appendChild(node);
+      return span;
+    } else {
+      return node;
+    }
+  }
+  /**
+   * Creates markup for a symbol node.
+   */
+
+
+  toMarkup() {
+    // TODO(alpert): More duplication than I'd like from
+    // span.prototype.toMarkup and symbolNode.prototype.toNode...
+    let needsSpan = false;
+    let markup = "<span";
+
+    if (this.classes.length) {
+      needsSpan = true;
+      markup += " class=\"";
+      markup += utils.escape(createClass(this.classes));
+      markup += "\"";
+    }
+
+    let styles = "";
+
+    if (this.italic > 0) {
+      styles += "margin-right:" + this.italic + "em;";
+    }
+
+    for (const style in this.style) {
+      if (this.style.hasOwnProperty(style)) {
+        styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+      }
+    }
+
+    if (styles) {
+      needsSpan = true;
+      markup += " style=\"" + utils.escape(styles) + "\"";
+    }
+
+    const escaped = utils.escape(this.text);
+
+    if (needsSpan) {
+      markup += ">";
+      markup += escaped;
+      markup += "</span>";
+      return markup;
+    } else {
+      return escaped;
+    }
+  }
+
+}
+/**
+ * SVG nodes are used to render stretchy wide elements.
+ */
+
+class SvgNode {
+  constructor(children, attributes) {
+    this.children = void 0;
+    this.attributes = void 0;
+    this.children = children || [];
+    this.attributes = attributes || {};
+  }
+
+  toNode() {
+    const svgNS = "http://www.w3.org/2000/svg";
+    const node = document.createElementNS(svgNS, "svg"); // Apply attributes
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    for (let i = 0; i < this.children.length; i++) {
+      node.appendChild(this.children[i].toNode());
+    }
+
+    return node;
+  }
+
+  toMarkup() {
+    let markup = "<svg"; // Apply attributes
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += ` ${attr}='${this.attributes[attr]}'`;
+      }
+    }
+
+    markup += ">";
+
+    for (let i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    markup += "</svg>";
+    return markup;
+  }
+
+}
+class PathNode {
+  constructor(pathName, alternate) {
+    this.pathName = void 0;
+    this.alternate = void 0;
+    this.pathName = pathName;
+    this.alternate = alternate; // Used only for \sqrt
+  }
+
+  toNode() {
+    const svgNS = "http://www.w3.org/2000/svg";
+    const node = document.createElementNS(svgNS, "path");
+
+    if (this.alternate) {
+      node.setAttribute("d", this.alternate);
+    } else {
+      node.setAttribute("d", path[this.pathName]);
+    }
+
+    return node;
+  }
+
+  toMarkup() {
+    if (this.alternate) {
+      return `<path d='${this.alternate}'/>`;
+    } else {
+      return `<path d='${path[this.pathName]}'/>`;
+    }
+  }
+
+}
+class LineNode {
+  constructor(attributes) {
+    this.attributes = void 0;
+    this.attributes = attributes || {};
+  }
+
+  toNode() {
+    const svgNS = "http://www.w3.org/2000/svg";
+    const node = document.createElementNS(svgNS, "line"); // Apply attributes
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    return node;
+  }
+
+  toMarkup() {
+    let markup = "<line";
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += ` ${attr}='${this.attributes[attr]}'`;
+      }
+    }
+
+    markup += "/>";
+    return markup;
+  }
+
+}
+function assertSymbolDomNode(group) {
+  if (group instanceof SymbolNode) {
+    return group;
+  } else {
+    throw new Error(`Expected symbolNode but got ${String(group)}.`);
+  }
+}
+function assertSpan(group) {
+  if (group instanceof Span) {
+    return group;
+  } else {
+    throw new Error(`Expected span<HtmlDomNode> but got ${String(group)}.`);
+  }
+}
+
+// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.
+var metricMap = {
+  "AMS-Regular": {
+    "65": [0, 0.68889, 0, 0, 0.72222],
+    "66": [0, 0.68889, 0, 0, 0.66667],
+    "67": [0, 0.68889, 0, 0, 0.72222],
+    "68": [0, 0.68889, 0, 0, 0.72222],
+    "69": [0, 0.68889, 0, 0, 0.66667],
+    "70": [0, 0.68889, 0, 0, 0.61111],
+    "71": [0, 0.68889, 0, 0, 0.77778],
+    "72": [0, 0.68889, 0, 0, 0.77778],
+    "73": [0, 0.68889, 0, 0, 0.38889],
+    "74": [0.16667, 0.68889, 0, 0, 0.5],
+    "75": [0, 0.68889, 0, 0, 0.77778],
+    "76": [0, 0.68889, 0, 0, 0.66667],
+    "77": [0, 0.68889, 0, 0, 0.94445],
+    "78": [0, 0.68889, 0, 0, 0.72222],
+    "79": [0.16667, 0.68889, 0, 0, 0.77778],
+    "80": [0, 0.68889, 0, 0, 0.61111],
+    "81": [0.16667, 0.68889, 0, 0, 0.77778],
+    "82": [0, 0.68889, 0, 0, 0.72222],
+    "83": [0, 0.68889, 0, 0, 0.55556],
+    "84": [0, 0.68889, 0, 0, 0.66667],
+    "85": [0, 0.68889, 0, 0, 0.72222],
+    "86": [0, 0.68889, 0, 0, 0.72222],
+    "87": [0, 0.68889, 0, 0, 1.0],
+    "88": [0, 0.68889, 0, 0, 0.72222],
+    "89": [0, 0.68889, 0, 0, 0.72222],
+    "90": [0, 0.68889, 0, 0, 0.66667],
+    "107": [0, 0.68889, 0, 0, 0.55556],
+    "165": [0, 0.675, 0.025, 0, 0.75],
+    "174": [0.15559, 0.69224, 0, 0, 0.94666],
+    "240": [0, 0.68889, 0, 0, 0.55556],
+    "295": [0, 0.68889, 0, 0, 0.54028],
+    "710": [0, 0.825, 0, 0, 2.33334],
+    "732": [0, 0.9, 0, 0, 2.33334],
+    "770": [0, 0.825, 0, 0, 2.33334],
+    "771": [0, 0.9, 0, 0, 2.33334],
+    "989": [0.08167, 0.58167, 0, 0, 0.77778],
+    "1008": [0, 0.43056, 0.04028, 0, 0.66667],
+    "8245": [0, 0.54986, 0, 0, 0.275],
+    "8463": [0, 0.68889, 0, 0, 0.54028],
+    "8487": [0, 0.68889, 0, 0, 0.72222],
+    "8498": [0, 0.68889, 0, 0, 0.55556],
+    "8502": [0, 0.68889, 0, 0, 0.66667],
+    "8503": [0, 0.68889, 0, 0, 0.44445],
+    "8504": [0, 0.68889, 0, 0, 0.66667],
+    "8513": [0, 0.68889, 0, 0, 0.63889],
+    "8592": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8594": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8602": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8603": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8606": [0.01354, 0.52239, 0, 0, 1.0],
+    "8608": [0.01354, 0.52239, 0, 0, 1.0],
+    "8610": [0.01354, 0.52239, 0, 0, 1.11111],
+    "8611": [0.01354, 0.52239, 0, 0, 1.11111],
+    "8619": [0, 0.54986, 0, 0, 1.0],
+    "8620": [0, 0.54986, 0, 0, 1.0],
+    "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
+    "8622": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8624": [0, 0.69224, 0, 0, 0.5],
+    "8625": [0, 0.69224, 0, 0, 0.5],
+    "8630": [0, 0.43056, 0, 0, 1.0],
+    "8631": [0, 0.43056, 0, 0, 1.0],
+    "8634": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8635": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8638": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8639": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8642": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8643": [0.19444, 0.69224, 0, 0, 0.41667],
+    "8644": [0.1808, 0.675, 0, 0, 1.0],
+    "8646": [0.1808, 0.675, 0, 0, 1.0],
+    "8647": [0.1808, 0.675, 0, 0, 1.0],
+    "8648": [0.19444, 0.69224, 0, 0, 0.83334],
+    "8649": [0.1808, 0.675, 0, 0, 1.0],
+    "8650": [0.19444, 0.69224, 0, 0, 0.83334],
+    "8651": [0.01354, 0.52239, 0, 0, 1.0],
+    "8652": [0.01354, 0.52239, 0, 0, 1.0],
+    "8653": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8654": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8655": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8666": [0.13667, 0.63667, 0, 0, 1.0],
+    "8667": [0.13667, 0.63667, 0, 0, 1.0],
+    "8669": [-0.13313, 0.37788, 0, 0, 1.0],
+    "8672": [-0.064, 0.437, 0, 0, 1.334],
+    "8674": [-0.064, 0.437, 0, 0, 1.334],
+    "8705": [0, 0.825, 0, 0, 0.5],
+    "8708": [0, 0.68889, 0, 0, 0.55556],
+    "8709": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8717": [0, 0.43056, 0, 0, 0.42917],
+    "8722": [-0.03598, 0.46402, 0, 0, 0.5],
+    "8724": [0.08198, 0.69224, 0, 0, 0.77778],
+    "8726": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8733": [0, 0.69224, 0, 0, 0.77778],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8737": [0, 0.69224, 0, 0, 0.72222],
+    "8738": [0.03517, 0.52239, 0, 0, 0.72222],
+    "8739": [0.08167, 0.58167, 0, 0, 0.22222],
+    "8740": [0.25142, 0.74111, 0, 0, 0.27778],
+    "8741": [0.08167, 0.58167, 0, 0, 0.38889],
+    "8742": [0.25142, 0.74111, 0, 0, 0.5],
+    "8756": [0, 0.69224, 0, 0, 0.66667],
+    "8757": [0, 0.69224, 0, 0, 0.66667],
+    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
+    "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8774": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+    "8778": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8782": [0.06062, 0.54986, 0, 0, 0.77778],
+    "8783": [0.06062, 0.54986, 0, 0, 0.77778],
+    "8785": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8786": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8787": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8790": [0, 0.69224, 0, 0, 0.77778],
+    "8791": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8796": [0.08198, 0.91667, 0, 0, 0.77778],
+    "8806": [0.25583, 0.75583, 0, 0, 0.77778],
+    "8807": [0.25583, 0.75583, 0, 0, 0.77778],
+    "8808": [0.25142, 0.75726, 0, 0, 0.77778],
+    "8809": [0.25142, 0.75726, 0, 0, 0.77778],
+    "8812": [0.25583, 0.75583, 0, 0, 0.5],
+    "8814": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8815": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8816": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8817": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8818": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8819": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8822": [0.1808, 0.675, 0, 0, 0.77778],
+    "8823": [0.1808, 0.675, 0, 0, 0.77778],
+    "8828": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8829": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8830": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8831": [0.22958, 0.72958, 0, 0, 0.77778],
+    "8832": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8833": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8840": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8841": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8842": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8843": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8847": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8848": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8858": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8859": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8861": [0.08198, 0.58198, 0, 0, 0.77778],
+    "8862": [0, 0.675, 0, 0, 0.77778],
+    "8863": [0, 0.675, 0, 0, 0.77778],
+    "8864": [0, 0.675, 0, 0, 0.77778],
+    "8865": [0, 0.675, 0, 0, 0.77778],
+    "8872": [0, 0.69224, 0, 0, 0.61111],
+    "8873": [0, 0.69224, 0, 0, 0.72222],
+    "8874": [0, 0.69224, 0, 0, 0.88889],
+    "8876": [0, 0.68889, 0, 0, 0.61111],
+    "8877": [0, 0.68889, 0, 0, 0.61111],
+    "8878": [0, 0.68889, 0, 0, 0.72222],
+    "8879": [0, 0.68889, 0, 0, 0.72222],
+    "8882": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8883": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8884": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8885": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8888": [0, 0.54986, 0, 0, 1.11111],
+    "8890": [0.19444, 0.43056, 0, 0, 0.55556],
+    "8891": [0.19444, 0.69224, 0, 0, 0.61111],
+    "8892": [0.19444, 0.69224, 0, 0, 0.61111],
+    "8901": [0, 0.54986, 0, 0, 0.27778],
+    "8903": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8905": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8906": [0.08167, 0.58167, 0, 0, 0.77778],
+    "8907": [0, 0.69224, 0, 0, 0.77778],
+    "8908": [0, 0.69224, 0, 0, 0.77778],
+    "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
+    "8910": [0, 0.54986, 0, 0, 0.76042],
+    "8911": [0, 0.54986, 0, 0, 0.76042],
+    "8912": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8913": [0.03517, 0.54986, 0, 0, 0.77778],
+    "8914": [0, 0.54986, 0, 0, 0.66667],
+    "8915": [0, 0.54986, 0, 0, 0.66667],
+    "8916": [0, 0.69224, 0, 0, 0.66667],
+    "8918": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8919": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8920": [0.03517, 0.54986, 0, 0, 1.33334],
+    "8921": [0.03517, 0.54986, 0, 0, 1.33334],
+    "8922": [0.38569, 0.88569, 0, 0, 0.77778],
+    "8923": [0.38569, 0.88569, 0, 0, 0.77778],
+    "8926": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8927": [0.13667, 0.63667, 0, 0, 0.77778],
+    "8928": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8929": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8934": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8935": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8936": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8937": [0.23222, 0.74111, 0, 0, 0.77778],
+    "8938": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8939": [0.20576, 0.70576, 0, 0, 0.77778],
+    "8940": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8941": [0.30274, 0.79383, 0, 0, 0.77778],
+    "8994": [0.19444, 0.69224, 0, 0, 0.77778],
+    "8995": [0.19444, 0.69224, 0, 0, 0.77778],
+    "9416": [0.15559, 0.69224, 0, 0, 0.90222],
+    "9484": [0, 0.69224, 0, 0, 0.5],
+    "9488": [0, 0.69224, 0, 0, 0.5],
+    "9492": [0, 0.37788, 0, 0, 0.5],
+    "9496": [0, 0.37788, 0, 0, 0.5],
+    "9585": [0.19444, 0.68889, 0, 0, 0.88889],
+    "9586": [0.19444, 0.74111, 0, 0, 0.88889],
+    "9632": [0, 0.675, 0, 0, 0.77778],
+    "9633": [0, 0.675, 0, 0, 0.77778],
+    "9650": [0, 0.54986, 0, 0, 0.72222],
+    "9651": [0, 0.54986, 0, 0, 0.72222],
+    "9654": [0.03517, 0.54986, 0, 0, 0.77778],
+    "9660": [0, 0.54986, 0, 0, 0.72222],
+    "9661": [0, 0.54986, 0, 0, 0.72222],
+    "9664": [0.03517, 0.54986, 0, 0, 0.77778],
+    "9674": [0.11111, 0.69224, 0, 0, 0.66667],
+    "9733": [0.19444, 0.69224, 0, 0, 0.94445],
+    "10003": [0, 0.69224, 0, 0, 0.83334],
+    "10016": [0, 0.69224, 0, 0, 0.83334],
+    "10731": [0.11111, 0.69224, 0, 0, 0.66667],
+    "10846": [0.19444, 0.75583, 0, 0, 0.61111],
+    "10877": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10878": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10885": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10886": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10887": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10888": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10889": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10890": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10891": [0.48256, 0.98256, 0, 0, 0.77778],
+    "10892": [0.48256, 0.98256, 0, 0, 0.77778],
+    "10901": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10902": [0.13667, 0.63667, 0, 0, 0.77778],
+    "10933": [0.25142, 0.75726, 0, 0, 0.77778],
+    "10934": [0.25142, 0.75726, 0, 0, 0.77778],
+    "10935": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10936": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10937": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10938": [0.26167, 0.75726, 0, 0, 0.77778],
+    "10949": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10950": [0.25583, 0.75583, 0, 0, 0.77778],
+    "10955": [0.28481, 0.79383, 0, 0, 0.77778],
+    "10956": [0.28481, 0.79383, 0, 0, 0.77778],
+    "57350": [0.08167, 0.58167, 0, 0, 0.22222],
+    "57351": [0.08167, 0.58167, 0, 0, 0.38889],
+    "57352": [0.08167, 0.58167, 0, 0, 0.77778],
+    "57353": [0, 0.43056, 0.04028, 0, 0.66667],
+    "57356": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57357": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57358": [0.41951, 0.91951, 0, 0, 0.77778],
+    "57359": [0.30274, 0.79383, 0, 0, 0.77778],
+    "57360": [0.30274, 0.79383, 0, 0, 0.77778],
+    "57361": [0.41951, 0.91951, 0, 0, 0.77778],
+    "57366": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57367": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57368": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57369": [0.25142, 0.75726, 0, 0, 0.77778],
+    "57370": [0.13597, 0.63597, 0, 0, 0.77778],
+    "57371": [0.13597, 0.63597, 0, 0, 0.77778]
+  },
+  "Caligraphic-Regular": {
+    "48": [0, 0.43056, 0, 0, 0.5],
+    "49": [0, 0.43056, 0, 0, 0.5],
+    "50": [0, 0.43056, 0, 0, 0.5],
+    "51": [0.19444, 0.43056, 0, 0, 0.5],
+    "52": [0.19444, 0.43056, 0, 0, 0.5],
+    "53": [0.19444, 0.43056, 0, 0, 0.5],
+    "54": [0, 0.64444, 0, 0, 0.5],
+    "55": [0.19444, 0.43056, 0, 0, 0.5],
+    "56": [0, 0.64444, 0, 0, 0.5],
+    "57": [0.19444, 0.43056, 0, 0, 0.5],
+    "65": [0, 0.68333, 0, 0.19445, 0.79847],
+    "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
+    "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
+    "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
+    "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
+    "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
+    "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
+    "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],
+    "73": [0, 0.68333, 0.07382, 0, 0.54452],
+    "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
+    "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
+    "76": [0, 0.68333, 0, 0.13889, 0.68972],
+    "77": [0, 0.68333, 0, 0.13889, 1.2009],
+    "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
+    "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
+    "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
+    "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
+    "82": [0, 0.68333, 0, 0.08334, 0.8475],
+    "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
+    "84": [0, 0.68333, 0.25417, 0, 0.54464],
+    "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
+    "86": [0, 0.68333, 0.08222, 0, 0.61278],
+    "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
+    "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
+    "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
+    "90": [0, 0.68333, 0.07944, 0.13889, 0.72473]
+  },
+  "Fraktur-Regular": {
+    "33": [0, 0.69141, 0, 0, 0.29574],
+    "34": [0, 0.69141, 0, 0, 0.21471],
+    "38": [0, 0.69141, 0, 0, 0.73786],
+    "39": [0, 0.69141, 0, 0, 0.21201],
+    "40": [0.24982, 0.74947, 0, 0, 0.38865],
+    "41": [0.24982, 0.74947, 0, 0, 0.38865],
+    "42": [0, 0.62119, 0, 0, 0.27764],
+    "43": [0.08319, 0.58283, 0, 0, 0.75623],
+    "44": [0, 0.10803, 0, 0, 0.27764],
+    "45": [0.08319, 0.58283, 0, 0, 0.75623],
+    "46": [0, 0.10803, 0, 0, 0.27764],
+    "47": [0.24982, 0.74947, 0, 0, 0.50181],
+    "48": [0, 0.47534, 0, 0, 0.50181],
+    "49": [0, 0.47534, 0, 0, 0.50181],
+    "50": [0, 0.47534, 0, 0, 0.50181],
+    "51": [0.18906, 0.47534, 0, 0, 0.50181],
+    "52": [0.18906, 0.47534, 0, 0, 0.50181],
+    "53": [0.18906, 0.47534, 0, 0, 0.50181],
+    "54": [0, 0.69141, 0, 0, 0.50181],
+    "55": [0.18906, 0.47534, 0, 0, 0.50181],
+    "56": [0, 0.69141, 0, 0, 0.50181],
+    "57": [0.18906, 0.47534, 0, 0, 0.50181],
+    "58": [0, 0.47534, 0, 0, 0.21606],
+    "59": [0.12604, 0.47534, 0, 0, 0.21606],
+    "61": [-0.13099, 0.36866, 0, 0, 0.75623],
+    "63": [0, 0.69141, 0, 0, 0.36245],
+    "65": [0, 0.69141, 0, 0, 0.7176],
+    "66": [0, 0.69141, 0, 0, 0.88397],
+    "67": [0, 0.69141, 0, 0, 0.61254],
+    "68": [0, 0.69141, 0, 0, 0.83158],
+    "69": [0, 0.69141, 0, 0, 0.66278],
+    "70": [0.12604, 0.69141, 0, 0, 0.61119],
+    "71": [0, 0.69141, 0, 0, 0.78539],
+    "72": [0.06302, 0.69141, 0, 0, 0.7203],
+    "73": [0, 0.69141, 0, 0, 0.55448],
+    "74": [0.12604, 0.69141, 0, 0, 0.55231],
+    "75": [0, 0.69141, 0, 0, 0.66845],
+    "76": [0, 0.69141, 0, 0, 0.66602],
+    "77": [0, 0.69141, 0, 0, 1.04953],
+    "78": [0, 0.69141, 0, 0, 0.83212],
+    "79": [0, 0.69141, 0, 0, 0.82699],
+    "80": [0.18906, 0.69141, 0, 0, 0.82753],
+    "81": [0.03781, 0.69141, 0, 0, 0.82699],
+    "82": [0, 0.69141, 0, 0, 0.82807],
+    "83": [0, 0.69141, 0, 0, 0.82861],
+    "84": [0, 0.69141, 0, 0, 0.66899],
+    "85": [0, 0.69141, 0, 0, 0.64576],
+    "86": [0, 0.69141, 0, 0, 0.83131],
+    "87": [0, 0.69141, 0, 0, 1.04602],
+    "88": [0, 0.69141, 0, 0, 0.71922],
+    "89": [0.18906, 0.69141, 0, 0, 0.83293],
+    "90": [0.12604, 0.69141, 0, 0, 0.60201],
+    "91": [0.24982, 0.74947, 0, 0, 0.27764],
+    "93": [0.24982, 0.74947, 0, 0, 0.27764],
+    "94": [0, 0.69141, 0, 0, 0.49965],
+    "97": [0, 0.47534, 0, 0, 0.50046],
+    "98": [0, 0.69141, 0, 0, 0.51315],
+    "99": [0, 0.47534, 0, 0, 0.38946],
+    "100": [0, 0.62119, 0, 0, 0.49857],
+    "101": [0, 0.47534, 0, 0, 0.40053],
+    "102": [0.18906, 0.69141, 0, 0, 0.32626],
+    "103": [0.18906, 0.47534, 0, 0, 0.5037],
+    "104": [0.18906, 0.69141, 0, 0, 0.52126],
+    "105": [0, 0.69141, 0, 0, 0.27899],
+    "106": [0, 0.69141, 0, 0, 0.28088],
+    "107": [0, 0.69141, 0, 0, 0.38946],
+    "108": [0, 0.69141, 0, 0, 0.27953],
+    "109": [0, 0.47534, 0, 0, 0.76676],
+    "110": [0, 0.47534, 0, 0, 0.52666],
+    "111": [0, 0.47534, 0, 0, 0.48885],
+    "112": [0.18906, 0.52396, 0, 0, 0.50046],
+    "113": [0.18906, 0.47534, 0, 0, 0.48912],
+    "114": [0, 0.47534, 0, 0, 0.38919],
+    "115": [0, 0.47534, 0, 0, 0.44266],
+    "116": [0, 0.62119, 0, 0, 0.33301],
+    "117": [0, 0.47534, 0, 0, 0.5172],
+    "118": [0, 0.52396, 0, 0, 0.5118],
+    "119": [0, 0.52396, 0, 0, 0.77351],
+    "120": [0.18906, 0.47534, 0, 0, 0.38865],
+    "121": [0.18906, 0.47534, 0, 0, 0.49884],
+    "122": [0.18906, 0.47534, 0, 0, 0.39054],
+    "8216": [0, 0.69141, 0, 0, 0.21471],
+    "8217": [0, 0.69141, 0, 0, 0.21471],
+    "58112": [0, 0.62119, 0, 0, 0.49749],
+    "58113": [0, 0.62119, 0, 0, 0.4983],
+    "58114": [0.18906, 0.69141, 0, 0, 0.33328],
+    "58115": [0.18906, 0.69141, 0, 0, 0.32923],
+    "58116": [0.18906, 0.47534, 0, 0, 0.50343],
+    "58117": [0, 0.69141, 0, 0, 0.33301],
+    "58118": [0, 0.62119, 0, 0, 0.33409],
+    "58119": [0, 0.47534, 0, 0, 0.50073]
+  },
+  "Main-Bold": {
+    "33": [0, 0.69444, 0, 0, 0.35],
+    "34": [0, 0.69444, 0, 0, 0.60278],
+    "35": [0.19444, 0.69444, 0, 0, 0.95833],
+    "36": [0.05556, 0.75, 0, 0, 0.575],
+    "37": [0.05556, 0.75, 0, 0, 0.95833],
+    "38": [0, 0.69444, 0, 0, 0.89444],
+    "39": [0, 0.69444, 0, 0, 0.31944],
+    "40": [0.25, 0.75, 0, 0, 0.44722],
+    "41": [0.25, 0.75, 0, 0, 0.44722],
+    "42": [0, 0.75, 0, 0, 0.575],
+    "43": [0.13333, 0.63333, 0, 0, 0.89444],
+    "44": [0.19444, 0.15556, 0, 0, 0.31944],
+    "45": [0, 0.44444, 0, 0, 0.38333],
+    "46": [0, 0.15556, 0, 0, 0.31944],
+    "47": [0.25, 0.75, 0, 0, 0.575],
+    "48": [0, 0.64444, 0, 0, 0.575],
+    "49": [0, 0.64444, 0, 0, 0.575],
+    "50": [0, 0.64444, 0, 0, 0.575],
+    "51": [0, 0.64444, 0, 0, 0.575],
+    "52": [0, 0.64444, 0, 0, 0.575],
+    "53": [0, 0.64444, 0, 0, 0.575],
+    "54": [0, 0.64444, 0, 0, 0.575],
+    "55": [0, 0.64444, 0, 0, 0.575],
+    "56": [0, 0.64444, 0, 0, 0.575],
+    "57": [0, 0.64444, 0, 0, 0.575],
+    "58": [0, 0.44444, 0, 0, 0.31944],
+    "59": [0.19444, 0.44444, 0, 0, 0.31944],
+    "60": [0.08556, 0.58556, 0, 0, 0.89444],
+    "61": [-0.10889, 0.39111, 0, 0, 0.89444],
+    "62": [0.08556, 0.58556, 0, 0, 0.89444],
+    "63": [0, 0.69444, 0, 0, 0.54305],
+    "64": [0, 0.69444, 0, 0, 0.89444],
+    "65": [0, 0.68611, 0, 0, 0.86944],
+    "66": [0, 0.68611, 0, 0, 0.81805],
+    "67": [0, 0.68611, 0, 0, 0.83055],
+    "68": [0, 0.68611, 0, 0, 0.88194],
+    "69": [0, 0.68611, 0, 0, 0.75555],
+    "70": [0, 0.68611, 0, 0, 0.72361],
+    "71": [0, 0.68611, 0, 0, 0.90416],
+    "72": [0, 0.68611, 0, 0, 0.9],
+    "73": [0, 0.68611, 0, 0, 0.43611],
+    "74": [0, 0.68611, 0, 0, 0.59444],
+    "75": [0, 0.68611, 0, 0, 0.90138],
+    "76": [0, 0.68611, 0, 0, 0.69166],
+    "77": [0, 0.68611, 0, 0, 1.09166],
+    "78": [0, 0.68611, 0, 0, 0.9],
+    "79": [0, 0.68611, 0, 0, 0.86388],
+    "80": [0, 0.68611, 0, 0, 0.78611],
+    "81": [0.19444, 0.68611, 0, 0, 0.86388],
+    "82": [0, 0.68611, 0, 0, 0.8625],
+    "83": [0, 0.68611, 0, 0, 0.63889],
+    "84": [0, 0.68611, 0, 0, 0.8],
+    "85": [0, 0.68611, 0, 0, 0.88472],
+    "86": [0, 0.68611, 0.01597, 0, 0.86944],
+    "87": [0, 0.68611, 0.01597, 0, 1.18888],
+    "88": [0, 0.68611, 0, 0, 0.86944],
+    "89": [0, 0.68611, 0.02875, 0, 0.86944],
+    "90": [0, 0.68611, 0, 0, 0.70277],
+    "91": [0.25, 0.75, 0, 0, 0.31944],
+    "92": [0.25, 0.75, 0, 0, 0.575],
+    "93": [0.25, 0.75, 0, 0, 0.31944],
+    "94": [0, 0.69444, 0, 0, 0.575],
+    "95": [0.31, 0.13444, 0.03194, 0, 0.575],
+    "97": [0, 0.44444, 0, 0, 0.55902],
+    "98": [0, 0.69444, 0, 0, 0.63889],
+    "99": [0, 0.44444, 0, 0, 0.51111],
+    "100": [0, 0.69444, 0, 0, 0.63889],
+    "101": [0, 0.44444, 0, 0, 0.52708],
+    "102": [0, 0.69444, 0.10903, 0, 0.35139],
+    "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
+    "104": [0, 0.69444, 0, 0, 0.63889],
+    "105": [0, 0.69444, 0, 0, 0.31944],
+    "106": [0.19444, 0.69444, 0, 0, 0.35139],
+    "107": [0, 0.69444, 0, 0, 0.60694],
+    "108": [0, 0.69444, 0, 0, 0.31944],
+    "109": [0, 0.44444, 0, 0, 0.95833],
+    "110": [0, 0.44444, 0, 0, 0.63889],
+    "111": [0, 0.44444, 0, 0, 0.575],
+    "112": [0.19444, 0.44444, 0, 0, 0.63889],
+    "113": [0.19444, 0.44444, 0, 0, 0.60694],
+    "114": [0, 0.44444, 0, 0, 0.47361],
+    "115": [0, 0.44444, 0, 0, 0.45361],
+    "116": [0, 0.63492, 0, 0, 0.44722],
+    "117": [0, 0.44444, 0, 0, 0.63889],
+    "118": [0, 0.44444, 0.01597, 0, 0.60694],
+    "119": [0, 0.44444, 0.01597, 0, 0.83055],
+    "120": [0, 0.44444, 0, 0, 0.60694],
+    "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
+    "122": [0, 0.44444, 0, 0, 0.51111],
+    "123": [0.25, 0.75, 0, 0, 0.575],
+    "124": [0.25, 0.75, 0, 0, 0.31944],
+    "125": [0.25, 0.75, 0, 0, 0.575],
+    "126": [0.35, 0.34444, 0, 0, 0.575],
+    "168": [0, 0.69444, 0, 0, 0.575],
+    "172": [0, 0.44444, 0, 0, 0.76666],
+    "176": [0, 0.69444, 0, 0, 0.86944],
+    "177": [0.13333, 0.63333, 0, 0, 0.89444],
+    "184": [0.17014, 0, 0, 0, 0.51111],
+    "198": [0, 0.68611, 0, 0, 1.04166],
+    "215": [0.13333, 0.63333, 0, 0, 0.89444],
+    "216": [0.04861, 0.73472, 0, 0, 0.89444],
+    "223": [0, 0.69444, 0, 0, 0.59722],
+    "230": [0, 0.44444, 0, 0, 0.83055],
+    "247": [0.13333, 0.63333, 0, 0, 0.89444],
+    "248": [0.09722, 0.54167, 0, 0, 0.575],
+    "305": [0, 0.44444, 0, 0, 0.31944],
+    "338": [0, 0.68611, 0, 0, 1.16944],
+    "339": [0, 0.44444, 0, 0, 0.89444],
+    "567": [0.19444, 0.44444, 0, 0, 0.35139],
+    "710": [0, 0.69444, 0, 0, 0.575],
+    "711": [0, 0.63194, 0, 0, 0.575],
+    "713": [0, 0.59611, 0, 0, 0.575],
+    "714": [0, 0.69444, 0, 0, 0.575],
+    "715": [0, 0.69444, 0, 0, 0.575],
+    "728": [0, 0.69444, 0, 0, 0.575],
+    "729": [0, 0.69444, 0, 0, 0.31944],
+    "730": [0, 0.69444, 0, 0, 0.86944],
+    "732": [0, 0.69444, 0, 0, 0.575],
+    "733": [0, 0.69444, 0, 0, 0.575],
+    "915": [0, 0.68611, 0, 0, 0.69166],
+    "916": [0, 0.68611, 0, 0, 0.95833],
+    "920": [0, 0.68611, 0, 0, 0.89444],
+    "923": [0, 0.68611, 0, 0, 0.80555],
+    "926": [0, 0.68611, 0, 0, 0.76666],
+    "928": [0, 0.68611, 0, 0, 0.9],
+    "931": [0, 0.68611, 0, 0, 0.83055],
+    "933": [0, 0.68611, 0, 0, 0.89444],
+    "934": [0, 0.68611, 0, 0, 0.83055],
+    "936": [0, 0.68611, 0, 0, 0.89444],
+    "937": [0, 0.68611, 0, 0, 0.83055],
+    "8211": [0, 0.44444, 0.03194, 0, 0.575],
+    "8212": [0, 0.44444, 0.03194, 0, 1.14999],
+    "8216": [0, 0.69444, 0, 0, 0.31944],
+    "8217": [0, 0.69444, 0, 0, 0.31944],
+    "8220": [0, 0.69444, 0, 0, 0.60278],
+    "8221": [0, 0.69444, 0, 0, 0.60278],
+    "8224": [0.19444, 0.69444, 0, 0, 0.51111],
+    "8225": [0.19444, 0.69444, 0, 0, 0.51111],
+    "8242": [0, 0.55556, 0, 0, 0.34444],
+    "8407": [0, 0.72444, 0.15486, 0, 0.575],
+    "8463": [0, 0.69444, 0, 0, 0.66759],
+    "8465": [0, 0.69444, 0, 0, 0.83055],
+    "8467": [0, 0.69444, 0, 0, 0.47361],
+    "8472": [0.19444, 0.44444, 0, 0, 0.74027],
+    "8476": [0, 0.69444, 0, 0, 0.83055],
+    "8501": [0, 0.69444, 0, 0, 0.70277],
+    "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8593": [0.19444, 0.69444, 0, 0, 0.575],
+    "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8595": [0.19444, 0.69444, 0, 0, 0.575],
+    "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8597": [0.25, 0.75, 0, 0, 0.575],
+    "8598": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8599": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8600": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8601": [0.19444, 0.69444, 0, 0, 1.14999],
+    "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8657": [0.19444, 0.69444, 0, 0, 0.70277],
+    "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8659": [0.19444, 0.69444, 0, 0, 0.70277],
+    "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
+    "8661": [0.25, 0.75, 0, 0, 0.70277],
+    "8704": [0, 0.69444, 0, 0, 0.63889],
+    "8706": [0, 0.69444, 0.06389, 0, 0.62847],
+    "8707": [0, 0.69444, 0, 0, 0.63889],
+    "8709": [0.05556, 0.75, 0, 0, 0.575],
+    "8711": [0, 0.68611, 0, 0, 0.95833],
+    "8712": [0.08556, 0.58556, 0, 0, 0.76666],
+    "8715": [0.08556, 0.58556, 0, 0, 0.76666],
+    "8722": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8723": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8725": [0.25, 0.75, 0, 0, 0.575],
+    "8726": [0.25, 0.75, 0, 0, 0.575],
+    "8727": [-0.02778, 0.47222, 0, 0, 0.575],
+    "8728": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8729": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8730": [0.18, 0.82, 0, 0, 0.95833],
+    "8733": [0, 0.44444, 0, 0, 0.89444],
+    "8734": [0, 0.44444, 0, 0, 1.14999],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8739": [0.25, 0.75, 0, 0, 0.31944],
+    "8741": [0.25, 0.75, 0, 0, 0.575],
+    "8743": [0, 0.55556, 0, 0, 0.76666],
+    "8744": [0, 0.55556, 0, 0, 0.76666],
+    "8745": [0, 0.55556, 0, 0, 0.76666],
+    "8746": [0, 0.55556, 0, 0, 0.76666],
+    "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
+    "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
+    "8768": [0.19444, 0.69444, 0, 0, 0.31944],
+    "8771": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8776": [0.02444, 0.52444, 0, 0, 0.89444],
+    "8781": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8801": [0.00222, 0.50222, 0, 0, 0.89444],
+    "8804": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8805": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8810": [0.08556, 0.58556, 0, 0, 1.14999],
+    "8811": [0.08556, 0.58556, 0, 0, 1.14999],
+    "8826": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8827": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8834": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8835": [0.08556, 0.58556, 0, 0, 0.89444],
+    "8838": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8839": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8846": [0, 0.55556, 0, 0, 0.76666],
+    "8849": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8850": [0.19667, 0.69667, 0, 0, 0.89444],
+    "8851": [0, 0.55556, 0, 0, 0.76666],
+    "8852": [0, 0.55556, 0, 0, 0.76666],
+    "8853": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8854": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8855": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8856": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8857": [0.13333, 0.63333, 0, 0, 0.89444],
+    "8866": [0, 0.69444, 0, 0, 0.70277],
+    "8867": [0, 0.69444, 0, 0, 0.70277],
+    "8868": [0, 0.69444, 0, 0, 0.89444],
+    "8869": [0, 0.69444, 0, 0, 0.89444],
+    "8900": [-0.02639, 0.47361, 0, 0, 0.575],
+    "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
+    "8902": [-0.02778, 0.47222, 0, 0, 0.575],
+    "8968": [0.25, 0.75, 0, 0, 0.51111],
+    "8969": [0.25, 0.75, 0, 0, 0.51111],
+    "8970": [0.25, 0.75, 0, 0, 0.51111],
+    "8971": [0.25, 0.75, 0, 0, 0.51111],
+    "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
+    "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
+    "9651": [0.19444, 0.69444, 0, 0, 1.02222],
+    "9657": [-0.02778, 0.47222, 0, 0, 0.575],
+    "9661": [0.19444, 0.69444, 0, 0, 1.02222],
+    "9667": [-0.02778, 0.47222, 0, 0, 0.575],
+    "9711": [0.19444, 0.69444, 0, 0, 1.14999],
+    "9824": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9825": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9826": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9827": [0.12963, 0.69444, 0, 0, 0.89444],
+    "9837": [0, 0.75, 0, 0, 0.44722],
+    "9838": [0.19444, 0.69444, 0, 0, 0.44722],
+    "9839": [0.19444, 0.69444, 0, 0, 0.44722],
+    "10216": [0.25, 0.75, 0, 0, 0.44722],
+    "10217": [0.25, 0.75, 0, 0, 0.44722],
+    "10815": [0, 0.68611, 0, 0, 0.9],
+    "10927": [0.19667, 0.69667, 0, 0, 0.89444],
+    "10928": [0.19667, 0.69667, 0, 0, 0.89444],
+    "57376": [0.19444, 0.69444, 0, 0, 0]
+  },
+  "Main-BoldItalic": {
+    "33": [0, 0.69444, 0.11417, 0, 0.38611],
+    "34": [0, 0.69444, 0.07939, 0, 0.62055],
+    "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
+    "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
+    "38": [0, 0.69444, 0.08528, 0, 0.88555],
+    "39": [0, 0.69444, 0.12945, 0, 0.35555],
+    "40": [0.25, 0.75, 0.15806, 0, 0.47333],
+    "41": [0.25, 0.75, 0.03306, 0, 0.47333],
+    "42": [0, 0.75, 0.14333, 0, 0.59111],
+    "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
+    "44": [0.19444, 0.14722, 0, 0, 0.35555],
+    "45": [0, 0.44444, 0.02611, 0, 0.41444],
+    "46": [0, 0.14722, 0, 0, 0.35555],
+    "47": [0.25, 0.75, 0.15806, 0, 0.59111],
+    "48": [0, 0.64444, 0.13167, 0, 0.59111],
+    "49": [0, 0.64444, 0.13167, 0, 0.59111],
+    "50": [0, 0.64444, 0.13167, 0, 0.59111],
+    "51": [0, 0.64444, 0.13167, 0, 0.59111],
+    "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+    "53": [0, 0.64444, 0.13167, 0, 0.59111],
+    "54": [0, 0.64444, 0.13167, 0, 0.59111],
+    "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+    "56": [0, 0.64444, 0.13167, 0, 0.59111],
+    "57": [0, 0.64444, 0.13167, 0, 0.59111],
+    "58": [0, 0.44444, 0.06695, 0, 0.35555],
+    "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
+    "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
+    "63": [0, 0.69444, 0.11472, 0, 0.59111],
+    "64": [0, 0.69444, 0.09208, 0, 0.88555],
+    "65": [0, 0.68611, 0, 0, 0.86555],
+    "66": [0, 0.68611, 0.0992, 0, 0.81666],
+    "67": [0, 0.68611, 0.14208, 0, 0.82666],
+    "68": [0, 0.68611, 0.09062, 0, 0.87555],
+    "69": [0, 0.68611, 0.11431, 0, 0.75666],
+    "70": [0, 0.68611, 0.12903, 0, 0.72722],
+    "71": [0, 0.68611, 0.07347, 0, 0.89527],
+    "72": [0, 0.68611, 0.17208, 0, 0.8961],
+    "73": [0, 0.68611, 0.15681, 0, 0.47166],
+    "74": [0, 0.68611, 0.145, 0, 0.61055],
+    "75": [0, 0.68611, 0.14208, 0, 0.89499],
+    "76": [0, 0.68611, 0, 0, 0.69777],
+    "77": [0, 0.68611, 0.17208, 0, 1.07277],
+    "78": [0, 0.68611, 0.17208, 0, 0.8961],
+    "79": [0, 0.68611, 0.09062, 0, 0.85499],
+    "80": [0, 0.68611, 0.0992, 0, 0.78721],
+    "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
+    "82": [0, 0.68611, 0.02559, 0, 0.85944],
+    "83": [0, 0.68611, 0.11264, 0, 0.64999],
+    "84": [0, 0.68611, 0.12903, 0, 0.7961],
+    "85": [0, 0.68611, 0.17208, 0, 0.88083],
+    "86": [0, 0.68611, 0.18625, 0, 0.86555],
+    "87": [0, 0.68611, 0.18625, 0, 1.15999],
+    "88": [0, 0.68611, 0.15681, 0, 0.86555],
+    "89": [0, 0.68611, 0.19803, 0, 0.86555],
+    "90": [0, 0.68611, 0.14208, 0, 0.70888],
+    "91": [0.25, 0.75, 0.1875, 0, 0.35611],
+    "93": [0.25, 0.75, 0.09972, 0, 0.35611],
+    "94": [0, 0.69444, 0.06709, 0, 0.59111],
+    "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
+    "97": [0, 0.44444, 0.09426, 0, 0.59111],
+    "98": [0, 0.69444, 0.07861, 0, 0.53222],
+    "99": [0, 0.44444, 0.05222, 0, 0.53222],
+    "100": [0, 0.69444, 0.10861, 0, 0.59111],
+    "101": [0, 0.44444, 0.085, 0, 0.53222],
+    "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
+    "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
+    "104": [0, 0.69444, 0.09426, 0, 0.59111],
+    "105": [0, 0.69326, 0.11387, 0, 0.35555],
+    "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
+    "107": [0, 0.69444, 0.11111, 0, 0.53222],
+    "108": [0, 0.69444, 0.10861, 0, 0.29666],
+    "109": [0, 0.44444, 0.09426, 0, 0.94444],
+    "110": [0, 0.44444, 0.09426, 0, 0.64999],
+    "111": [0, 0.44444, 0.07861, 0, 0.59111],
+    "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
+    "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
+    "114": [0, 0.44444, 0.11111, 0, 0.50167],
+    "115": [0, 0.44444, 0.08167, 0, 0.48694],
+    "116": [0, 0.63492, 0.09639, 0, 0.385],
+    "117": [0, 0.44444, 0.09426, 0, 0.62055],
+    "118": [0, 0.44444, 0.11111, 0, 0.53222],
+    "119": [0, 0.44444, 0.11111, 0, 0.76777],
+    "120": [0, 0.44444, 0.12583, 0, 0.56055],
+    "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
+    "122": [0, 0.44444, 0.13889, 0, 0.49055],
+    "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
+    "163": [0, 0.69444, 0, 0, 0.86853],
+    "168": [0, 0.69444, 0.11473, 0, 0.59111],
+    "176": [0, 0.69444, 0, 0, 0.94888],
+    "184": [0.17014, 0, 0, 0, 0.53222],
+    "198": [0, 0.68611, 0.11431, 0, 1.02277],
+    "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
+    "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
+    "230": [0, 0.44444, 0.085, 0, 0.82666],
+    "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
+    "305": [0, 0.44444, 0.09426, 0, 0.35555],
+    "338": [0, 0.68611, 0.11431, 0, 1.14054],
+    "339": [0, 0.44444, 0.085, 0, 0.82666],
+    "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
+    "710": [0, 0.69444, 0.06709, 0, 0.59111],
+    "711": [0, 0.63194, 0.08271, 0, 0.59111],
+    "713": [0, 0.59444, 0.10444, 0, 0.59111],
+    "714": [0, 0.69444, 0.08528, 0, 0.59111],
+    "715": [0, 0.69444, 0, 0, 0.59111],
+    "728": [0, 0.69444, 0.10333, 0, 0.59111],
+    "729": [0, 0.69444, 0.12945, 0, 0.35555],
+    "730": [0, 0.69444, 0, 0, 0.94888],
+    "732": [0, 0.69444, 0.11472, 0, 0.59111],
+    "733": [0, 0.69444, 0.11472, 0, 0.59111],
+    "915": [0, 0.68611, 0.12903, 0, 0.69777],
+    "916": [0, 0.68611, 0, 0, 0.94444],
+    "920": [0, 0.68611, 0.09062, 0, 0.88555],
+    "923": [0, 0.68611, 0, 0, 0.80666],
+    "926": [0, 0.68611, 0.15092, 0, 0.76777],
+    "928": [0, 0.68611, 0.17208, 0, 0.8961],
+    "931": [0, 0.68611, 0.11431, 0, 0.82666],
+    "933": [0, 0.68611, 0.10778, 0, 0.88555],
+    "934": [0, 0.68611, 0.05632, 0, 0.82666],
+    "936": [0, 0.68611, 0.10778, 0, 0.88555],
+    "937": [0, 0.68611, 0.0992, 0, 0.82666],
+    "8211": [0, 0.44444, 0.09811, 0, 0.59111],
+    "8212": [0, 0.44444, 0.09811, 0, 1.18221],
+    "8216": [0, 0.69444, 0.12945, 0, 0.35555],
+    "8217": [0, 0.69444, 0.12945, 0, 0.35555],
+    "8220": [0, 0.69444, 0.16772, 0, 0.62055],
+    "8221": [0, 0.69444, 0.07939, 0, 0.62055]
+  },
+  "Main-Italic": {
+    "33": [0, 0.69444, 0.12417, 0, 0.30667],
+    "34": [0, 0.69444, 0.06961, 0, 0.51444],
+    "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
+    "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
+    "38": [0, 0.69444, 0.09694, 0, 0.76666],
+    "39": [0, 0.69444, 0.12417, 0, 0.30667],
+    "40": [0.25, 0.75, 0.16194, 0, 0.40889],
+    "41": [0.25, 0.75, 0.03694, 0, 0.40889],
+    "42": [0, 0.75, 0.14917, 0, 0.51111],
+    "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
+    "44": [0.19444, 0.10556, 0, 0, 0.30667],
+    "45": [0, 0.43056, 0.02826, 0, 0.35778],
+    "46": [0, 0.10556, 0, 0, 0.30667],
+    "47": [0.25, 0.75, 0.16194, 0, 0.51111],
+    "48": [0, 0.64444, 0.13556, 0, 0.51111],
+    "49": [0, 0.64444, 0.13556, 0, 0.51111],
+    "50": [0, 0.64444, 0.13556, 0, 0.51111],
+    "51": [0, 0.64444, 0.13556, 0, 0.51111],
+    "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+    "53": [0, 0.64444, 0.13556, 0, 0.51111],
+    "54": [0, 0.64444, 0.13556, 0, 0.51111],
+    "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+    "56": [0, 0.64444, 0.13556, 0, 0.51111],
+    "57": [0, 0.64444, 0.13556, 0, 0.51111],
+    "58": [0, 0.43056, 0.0582, 0, 0.30667],
+    "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
+    "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
+    "63": [0, 0.69444, 0.1225, 0, 0.51111],
+    "64": [0, 0.69444, 0.09597, 0, 0.76666],
+    "65": [0, 0.68333, 0, 0, 0.74333],
+    "66": [0, 0.68333, 0.10257, 0, 0.70389],
+    "67": [0, 0.68333, 0.14528, 0, 0.71555],
+    "68": [0, 0.68333, 0.09403, 0, 0.755],
+    "69": [0, 0.68333, 0.12028, 0, 0.67833],
+    "70": [0, 0.68333, 0.13305, 0, 0.65277],
+    "71": [0, 0.68333, 0.08722, 0, 0.77361],
+    "72": [0, 0.68333, 0.16389, 0, 0.74333],
+    "73": [0, 0.68333, 0.15806, 0, 0.38555],
+    "74": [0, 0.68333, 0.14028, 0, 0.525],
+    "75": [0, 0.68333, 0.14528, 0, 0.76888],
+    "76": [0, 0.68333, 0, 0, 0.62722],
+    "77": [0, 0.68333, 0.16389, 0, 0.89666],
+    "78": [0, 0.68333, 0.16389, 0, 0.74333],
+    "79": [0, 0.68333, 0.09403, 0, 0.76666],
+    "80": [0, 0.68333, 0.10257, 0, 0.67833],
+    "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
+    "82": [0, 0.68333, 0.03868, 0, 0.72944],
+    "83": [0, 0.68333, 0.11972, 0, 0.56222],
+    "84": [0, 0.68333, 0.13305, 0, 0.71555],
+    "85": [0, 0.68333, 0.16389, 0, 0.74333],
+    "86": [0, 0.68333, 0.18361, 0, 0.74333],
+    "87": [0, 0.68333, 0.18361, 0, 0.99888],
+    "88": [0, 0.68333, 0.15806, 0, 0.74333],
+    "89": [0, 0.68333, 0.19383, 0, 0.74333],
+    "90": [0, 0.68333, 0.14528, 0, 0.61333],
+    "91": [0.25, 0.75, 0.1875, 0, 0.30667],
+    "93": [0.25, 0.75, 0.10528, 0, 0.30667],
+    "94": [0, 0.69444, 0.06646, 0, 0.51111],
+    "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
+    "97": [0, 0.43056, 0.07671, 0, 0.51111],
+    "98": [0, 0.69444, 0.06312, 0, 0.46],
+    "99": [0, 0.43056, 0.05653, 0, 0.46],
+    "100": [0, 0.69444, 0.10333, 0, 0.51111],
+    "101": [0, 0.43056, 0.07514, 0, 0.46],
+    "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
+    "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
+    "104": [0, 0.69444, 0.07671, 0, 0.51111],
+    "105": [0, 0.65536, 0.1019, 0, 0.30667],
+    "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
+    "107": [0, 0.69444, 0.10764, 0, 0.46],
+    "108": [0, 0.69444, 0.10333, 0, 0.25555],
+    "109": [0, 0.43056, 0.07671, 0, 0.81777],
+    "110": [0, 0.43056, 0.07671, 0, 0.56222],
+    "111": [0, 0.43056, 0.06312, 0, 0.51111],
+    "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
+    "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
+    "114": [0, 0.43056, 0.10764, 0, 0.42166],
+    "115": [0, 0.43056, 0.08208, 0, 0.40889],
+    "116": [0, 0.61508, 0.09486, 0, 0.33222],
+    "117": [0, 0.43056, 0.07671, 0, 0.53666],
+    "118": [0, 0.43056, 0.10764, 0, 0.46],
+    "119": [0, 0.43056, 0.10764, 0, 0.66444],
+    "120": [0, 0.43056, 0.12042, 0, 0.46389],
+    "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
+    "122": [0, 0.43056, 0.12292, 0, 0.40889],
+    "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
+    "163": [0, 0.69444, 0, 0, 0.76909],
+    "168": [0, 0.66786, 0.10474, 0, 0.51111],
+    "176": [0, 0.69444, 0, 0, 0.83129],
+    "184": [0.17014, 0, 0, 0, 0.46],
+    "198": [0, 0.68333, 0.12028, 0, 0.88277],
+    "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
+    "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
+    "230": [0, 0.43056, 0.07514, 0, 0.71555],
+    "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
+    "305": [0, 0.43056, 0, 0.02778, 0.32246],
+    "338": [0, 0.68333, 0.12028, 0, 0.98499],
+    "339": [0, 0.43056, 0.07514, 0, 0.71555],
+    "567": [0.19444, 0.43056, 0, 0.08334, 0.38403],
+    "710": [0, 0.69444, 0.06646, 0, 0.51111],
+    "711": [0, 0.62847, 0.08295, 0, 0.51111],
+    "713": [0, 0.56167, 0.10333, 0, 0.51111],
+    "714": [0, 0.69444, 0.09694, 0, 0.51111],
+    "715": [0, 0.69444, 0, 0, 0.51111],
+    "728": [0, 0.69444, 0.10806, 0, 0.51111],
+    "729": [0, 0.66786, 0.11752, 0, 0.30667],
+    "730": [0, 0.69444, 0, 0, 0.83129],
+    "732": [0, 0.66786, 0.11585, 0, 0.51111],
+    "733": [0, 0.69444, 0.1225, 0, 0.51111],
+    "915": [0, 0.68333, 0.13305, 0, 0.62722],
+    "916": [0, 0.68333, 0, 0, 0.81777],
+    "920": [0, 0.68333, 0.09403, 0, 0.76666],
+    "923": [0, 0.68333, 0, 0, 0.69222],
+    "926": [0, 0.68333, 0.15294, 0, 0.66444],
+    "928": [0, 0.68333, 0.16389, 0, 0.74333],
+    "931": [0, 0.68333, 0.12028, 0, 0.71555],
+    "933": [0, 0.68333, 0.11111, 0, 0.76666],
+    "934": [0, 0.68333, 0.05986, 0, 0.71555],
+    "936": [0, 0.68333, 0.11111, 0, 0.76666],
+    "937": [0, 0.68333, 0.10257, 0, 0.71555],
+    "8211": [0, 0.43056, 0.09208, 0, 0.51111],
+    "8212": [0, 0.43056, 0.09208, 0, 1.02222],
+    "8216": [0, 0.69444, 0.12417, 0, 0.30667],
+    "8217": [0, 0.69444, 0.12417, 0, 0.30667],
+    "8220": [0, 0.69444, 0.1685, 0, 0.51444],
+    "8221": [0, 0.69444, 0.06961, 0, 0.51444],
+    "8463": [0, 0.68889, 0, 0, 0.54028]
+  },
+  "Main-Regular": {
+    "32": [0, 0, 0, 0, 0.25],
+    "33": [0, 0.69444, 0, 0, 0.27778],
+    "34": [0, 0.69444, 0, 0, 0.5],
+    "35": [0.19444, 0.69444, 0, 0, 0.83334],
+    "36": [0.05556, 0.75, 0, 0, 0.5],
+    "37": [0.05556, 0.75, 0, 0, 0.83334],
+    "38": [0, 0.69444, 0, 0, 0.77778],
+    "39": [0, 0.69444, 0, 0, 0.27778],
+    "40": [0.25, 0.75, 0, 0, 0.38889],
+    "41": [0.25, 0.75, 0, 0, 0.38889],
+    "42": [0, 0.75, 0, 0, 0.5],
+    "43": [0.08333, 0.58333, 0, 0, 0.77778],
+    "44": [0.19444, 0.10556, 0, 0, 0.27778],
+    "45": [0, 0.43056, 0, 0, 0.33333],
+    "46": [0, 0.10556, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0, 0, 0.5],
+    "48": [0, 0.64444, 0, 0, 0.5],
+    "49": [0, 0.64444, 0, 0, 0.5],
+    "50": [0, 0.64444, 0, 0, 0.5],
+    "51": [0, 0.64444, 0, 0, 0.5],
+    "52": [0, 0.64444, 0, 0, 0.5],
+    "53": [0, 0.64444, 0, 0, 0.5],
+    "54": [0, 0.64444, 0, 0, 0.5],
+    "55": [0, 0.64444, 0, 0, 0.5],
+    "56": [0, 0.64444, 0, 0, 0.5],
+    "57": [0, 0.64444, 0, 0, 0.5],
+    "58": [0, 0.43056, 0, 0, 0.27778],
+    "59": [0.19444, 0.43056, 0, 0, 0.27778],
+    "60": [0.0391, 0.5391, 0, 0, 0.77778],
+    "61": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "62": [0.0391, 0.5391, 0, 0, 0.77778],
+    "63": [0, 0.69444, 0, 0, 0.47222],
+    "64": [0, 0.69444, 0, 0, 0.77778],
+    "65": [0, 0.68333, 0, 0, 0.75],
+    "66": [0, 0.68333, 0, 0, 0.70834],
+    "67": [0, 0.68333, 0, 0, 0.72222],
+    "68": [0, 0.68333, 0, 0, 0.76389],
+    "69": [0, 0.68333, 0, 0, 0.68056],
+    "70": [0, 0.68333, 0, 0, 0.65278],
+    "71": [0, 0.68333, 0, 0, 0.78472],
+    "72": [0, 0.68333, 0, 0, 0.75],
+    "73": [0, 0.68333, 0, 0, 0.36111],
+    "74": [0, 0.68333, 0, 0, 0.51389],
+    "75": [0, 0.68333, 0, 0, 0.77778],
+    "76": [0, 0.68333, 0, 0, 0.625],
+    "77": [0, 0.68333, 0, 0, 0.91667],
+    "78": [0, 0.68333, 0, 0, 0.75],
+    "79": [0, 0.68333, 0, 0, 0.77778],
+    "80": [0, 0.68333, 0, 0, 0.68056],
+    "81": [0.19444, 0.68333, 0, 0, 0.77778],
+    "82": [0, 0.68333, 0, 0, 0.73611],
+    "83": [0, 0.68333, 0, 0, 0.55556],
+    "84": [0, 0.68333, 0, 0, 0.72222],
+    "85": [0, 0.68333, 0, 0, 0.75],
+    "86": [0, 0.68333, 0.01389, 0, 0.75],
+    "87": [0, 0.68333, 0.01389, 0, 1.02778],
+    "88": [0, 0.68333, 0, 0, 0.75],
+    "89": [0, 0.68333, 0.025, 0, 0.75],
+    "90": [0, 0.68333, 0, 0, 0.61111],
+    "91": [0.25, 0.75, 0, 0, 0.27778],
+    "92": [0.25, 0.75, 0, 0, 0.5],
+    "93": [0.25, 0.75, 0, 0, 0.27778],
+    "94": [0, 0.69444, 0, 0, 0.5],
+    "95": [0.31, 0.12056, 0.02778, 0, 0.5],
+    "97": [0, 0.43056, 0, 0, 0.5],
+    "98": [0, 0.69444, 0, 0, 0.55556],
+    "99": [0, 0.43056, 0, 0, 0.44445],
+    "100": [0, 0.69444, 0, 0, 0.55556],
+    "101": [0, 0.43056, 0, 0, 0.44445],
+    "102": [0, 0.69444, 0.07778, 0, 0.30556],
+    "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
+    "104": [0, 0.69444, 0, 0, 0.55556],
+    "105": [0, 0.66786, 0, 0, 0.27778],
+    "106": [0.19444, 0.66786, 0, 0, 0.30556],
+    "107": [0, 0.69444, 0, 0, 0.52778],
+    "108": [0, 0.69444, 0, 0, 0.27778],
+    "109": [0, 0.43056, 0, 0, 0.83334],
+    "110": [0, 0.43056, 0, 0, 0.55556],
+    "111": [0, 0.43056, 0, 0, 0.5],
+    "112": [0.19444, 0.43056, 0, 0, 0.55556],
+    "113": [0.19444, 0.43056, 0, 0, 0.52778],
+    "114": [0, 0.43056, 0, 0, 0.39167],
+    "115": [0, 0.43056, 0, 0, 0.39445],
+    "116": [0, 0.61508, 0, 0, 0.38889],
+    "117": [0, 0.43056, 0, 0, 0.55556],
+    "118": [0, 0.43056, 0.01389, 0, 0.52778],
+    "119": [0, 0.43056, 0.01389, 0, 0.72222],
+    "120": [0, 0.43056, 0, 0, 0.52778],
+    "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
+    "122": [0, 0.43056, 0, 0, 0.44445],
+    "123": [0.25, 0.75, 0, 0, 0.5],
+    "124": [0.25, 0.75, 0, 0, 0.27778],
+    "125": [0.25, 0.75, 0, 0, 0.5],
+    "126": [0.35, 0.31786, 0, 0, 0.5],
+    "160": [0, 0, 0, 0, 0.25],
+    "167": [0.19444, 0.69444, 0, 0, 0.44445],
+    "168": [0, 0.66786, 0, 0, 0.5],
+    "172": [0, 0.43056, 0, 0, 0.66667],
+    "176": [0, 0.69444, 0, 0, 0.75],
+    "177": [0.08333, 0.58333, 0, 0, 0.77778],
+    "182": [0.19444, 0.69444, 0, 0, 0.61111],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "198": [0, 0.68333, 0, 0, 0.90278],
+    "215": [0.08333, 0.58333, 0, 0, 0.77778],
+    "216": [0.04861, 0.73194, 0, 0, 0.77778],
+    "223": [0, 0.69444, 0, 0, 0.5],
+    "230": [0, 0.43056, 0, 0, 0.72222],
+    "247": [0.08333, 0.58333, 0, 0, 0.77778],
+    "248": [0.09722, 0.52778, 0, 0, 0.5],
+    "305": [0, 0.43056, 0, 0, 0.27778],
+    "338": [0, 0.68333, 0, 0, 1.01389],
+    "339": [0, 0.43056, 0, 0, 0.77778],
+    "567": [0.19444, 0.43056, 0, 0, 0.30556],
+    "710": [0, 0.69444, 0, 0, 0.5],
+    "711": [0, 0.62847, 0, 0, 0.5],
+    "713": [0, 0.56778, 0, 0, 0.5],
+    "714": [0, 0.69444, 0, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0, 0, 0.5],
+    "729": [0, 0.66786, 0, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.75],
+    "732": [0, 0.66786, 0, 0, 0.5],
+    "733": [0, 0.69444, 0, 0, 0.5],
+    "915": [0, 0.68333, 0, 0, 0.625],
+    "916": [0, 0.68333, 0, 0, 0.83334],
+    "920": [0, 0.68333, 0, 0, 0.77778],
+    "923": [0, 0.68333, 0, 0, 0.69445],
+    "926": [0, 0.68333, 0, 0, 0.66667],
+    "928": [0, 0.68333, 0, 0, 0.75],
+    "931": [0, 0.68333, 0, 0, 0.72222],
+    "933": [0, 0.68333, 0, 0, 0.77778],
+    "934": [0, 0.68333, 0, 0, 0.72222],
+    "936": [0, 0.68333, 0, 0, 0.77778],
+    "937": [0, 0.68333, 0, 0, 0.72222],
+    "8211": [0, 0.43056, 0.02778, 0, 0.5],
+    "8212": [0, 0.43056, 0.02778, 0, 1.0],
+    "8216": [0, 0.69444, 0, 0, 0.27778],
+    "8217": [0, 0.69444, 0, 0, 0.27778],
+    "8220": [0, 0.69444, 0, 0, 0.5],
+    "8221": [0, 0.69444, 0, 0, 0.5],
+    "8224": [0.19444, 0.69444, 0, 0, 0.44445],
+    "8225": [0.19444, 0.69444, 0, 0, 0.44445],
+    "8230": [0, 0.12, 0, 0, 1.172],
+    "8242": [0, 0.55556, 0, 0, 0.275],
+    "8407": [0, 0.71444, 0.15382, 0, 0.5],
+    "8463": [0, 0.68889, 0, 0, 0.54028],
+    "8465": [0, 0.69444, 0, 0, 0.72222],
+    "8467": [0, 0.69444, 0, 0.11111, 0.41667],
+    "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
+    "8476": [0, 0.69444, 0, 0, 0.72222],
+    "8501": [0, 0.69444, 0, 0, 0.61111],
+    "8592": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8593": [0.19444, 0.69444, 0, 0, 0.5],
+    "8594": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8595": [0.19444, 0.69444, 0, 0, 0.5],
+    "8596": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8597": [0.25, 0.75, 0, 0, 0.5],
+    "8598": [0.19444, 0.69444, 0, 0, 1.0],
+    "8599": [0.19444, 0.69444, 0, 0, 1.0],
+    "8600": [0.19444, 0.69444, 0, 0, 1.0],
+    "8601": [0.19444, 0.69444, 0, 0, 1.0],
+    "8614": [0.011, 0.511, 0, 0, 1.0],
+    "8617": [0.011, 0.511, 0, 0, 1.126],
+    "8618": [0.011, 0.511, 0, 0, 1.126],
+    "8636": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8637": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8640": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8641": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8652": [0.011, 0.671, 0, 0, 1.0],
+    "8656": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8657": [0.19444, 0.69444, 0, 0, 0.61111],
+    "8658": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8659": [0.19444, 0.69444, 0, 0, 0.61111],
+    "8660": [-0.13313, 0.36687, 0, 0, 1.0],
+    "8661": [0.25, 0.75, 0, 0, 0.61111],
+    "8704": [0, 0.69444, 0, 0, 0.55556],
+    "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
+    "8707": [0, 0.69444, 0, 0, 0.55556],
+    "8709": [0.05556, 0.75, 0, 0, 0.5],
+    "8711": [0, 0.68333, 0, 0, 0.83334],
+    "8712": [0.0391, 0.5391, 0, 0, 0.66667],
+    "8715": [0.0391, 0.5391, 0, 0, 0.66667],
+    "8722": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8723": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8725": [0.25, 0.75, 0, 0, 0.5],
+    "8726": [0.25, 0.75, 0, 0, 0.5],
+    "8727": [-0.03472, 0.46528, 0, 0, 0.5],
+    "8728": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8729": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8730": [0.2, 0.8, 0, 0, 0.83334],
+    "8733": [0, 0.43056, 0, 0, 0.77778],
+    "8734": [0, 0.43056, 0, 0, 1.0],
+    "8736": [0, 0.69224, 0, 0, 0.72222],
+    "8739": [0.25, 0.75, 0, 0, 0.27778],
+    "8741": [0.25, 0.75, 0, 0, 0.5],
+    "8743": [0, 0.55556, 0, 0, 0.66667],
+    "8744": [0, 0.55556, 0, 0, 0.66667],
+    "8745": [0, 0.55556, 0, 0, 0.66667],
+    "8746": [0, 0.55556, 0, 0, 0.66667],
+    "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
+    "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+    "8768": [0.19444, 0.69444, 0, 0, 0.27778],
+    "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8773": [-0.022, 0.589, 0, 0, 1.0],
+    "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+    "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8784": [-0.133, 0.67, 0, 0, 0.778],
+    "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
+    "8804": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8805": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8810": [0.0391, 0.5391, 0, 0, 1.0],
+    "8811": [0.0391, 0.5391, 0, 0, 1.0],
+    "8826": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8827": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8834": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8835": [0.0391, 0.5391, 0, 0, 0.77778],
+    "8838": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8839": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8846": [0, 0.55556, 0, 0, 0.66667],
+    "8849": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8850": [0.13597, 0.63597, 0, 0, 0.77778],
+    "8851": [0, 0.55556, 0, 0, 0.66667],
+    "8852": [0, 0.55556, 0, 0, 0.66667],
+    "8853": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8854": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8855": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8856": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8857": [0.08333, 0.58333, 0, 0, 0.77778],
+    "8866": [0, 0.69444, 0, 0, 0.61111],
+    "8867": [0, 0.69444, 0, 0, 0.61111],
+    "8868": [0, 0.69444, 0, 0, 0.77778],
+    "8869": [0, 0.69444, 0, 0, 0.77778],
+    "8872": [0.249, 0.75, 0, 0, 0.867],
+    "8900": [-0.05555, 0.44445, 0, 0, 0.5],
+    "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
+    "8902": [-0.03472, 0.46528, 0, 0, 0.5],
+    "8904": [0.005, 0.505, 0, 0, 0.9],
+    "8942": [0.03, 0.9, 0, 0, 0.278],
+    "8943": [-0.19, 0.31, 0, 0, 1.172],
+    "8945": [-0.1, 0.82, 0, 0, 1.282],
+    "8968": [0.25, 0.75, 0, 0, 0.44445],
+    "8969": [0.25, 0.75, 0, 0, 0.44445],
+    "8970": [0.25, 0.75, 0, 0, 0.44445],
+    "8971": [0.25, 0.75, 0, 0, 0.44445],
+    "8994": [-0.14236, 0.35764, 0, 0, 1.0],
+    "8995": [-0.14236, 0.35764, 0, 0, 1.0],
+    "9136": [0.244, 0.744, 0, 0, 0.412],
+    "9137": [0.244, 0.744, 0, 0, 0.412],
+    "9651": [0.19444, 0.69444, 0, 0, 0.88889],
+    "9657": [-0.03472, 0.46528, 0, 0, 0.5],
+    "9661": [0.19444, 0.69444, 0, 0, 0.88889],
+    "9667": [-0.03472, 0.46528, 0, 0, 0.5],
+    "9711": [0.19444, 0.69444, 0, 0, 1.0],
+    "9824": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9825": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9826": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9827": [0.12963, 0.69444, 0, 0, 0.77778],
+    "9837": [0, 0.75, 0, 0, 0.38889],
+    "9838": [0.19444, 0.69444, 0, 0, 0.38889],
+    "9839": [0.19444, 0.69444, 0, 0, 0.38889],
+    "10216": [0.25, 0.75, 0, 0, 0.38889],
+    "10217": [0.25, 0.75, 0, 0, 0.38889],
+    "10222": [0.244, 0.744, 0, 0, 0.412],
+    "10223": [0.244, 0.744, 0, 0, 0.412],
+    "10229": [0.011, 0.511, 0, 0, 1.609],
+    "10230": [0.011, 0.511, 0, 0, 1.638],
+    "10231": [0.011, 0.511, 0, 0, 1.859],
+    "10232": [0.024, 0.525, 0, 0, 1.609],
+    "10233": [0.024, 0.525, 0, 0, 1.638],
+    "10234": [0.024, 0.525, 0, 0, 1.858],
+    "10236": [0.011, 0.511, 0, 0, 1.638],
+    "10815": [0, 0.68333, 0, 0, 0.75],
+    "10927": [0.13597, 0.63597, 0, 0, 0.77778],
+    "10928": [0.13597, 0.63597, 0, 0, 0.77778],
+    "57376": [0.19444, 0.69444, 0, 0, 0]
+  },
+  "Math-BoldItalic": {
+    "65": [0, 0.68611, 0, 0, 0.86944],
+    "66": [0, 0.68611, 0.04835, 0, 0.8664],
+    "67": [0, 0.68611, 0.06979, 0, 0.81694],
+    "68": [0, 0.68611, 0.03194, 0, 0.93812],
+    "69": [0, 0.68611, 0.05451, 0, 0.81007],
+    "70": [0, 0.68611, 0.15972, 0, 0.68889],
+    "71": [0, 0.68611, 0, 0, 0.88673],
+    "72": [0, 0.68611, 0.08229, 0, 0.98229],
+    "73": [0, 0.68611, 0.07778, 0, 0.51111],
+    "74": [0, 0.68611, 0.10069, 0, 0.63125],
+    "75": [0, 0.68611, 0.06979, 0, 0.97118],
+    "76": [0, 0.68611, 0, 0, 0.75555],
+    "77": [0, 0.68611, 0.11424, 0, 1.14201],
+    "78": [0, 0.68611, 0.11424, 0, 0.95034],
+    "79": [0, 0.68611, 0.03194, 0, 0.83666],
+    "80": [0, 0.68611, 0.15972, 0, 0.72309],
+    "81": [0.19444, 0.68611, 0, 0, 0.86861],
+    "82": [0, 0.68611, 0.00421, 0, 0.87235],
+    "83": [0, 0.68611, 0.05382, 0, 0.69271],
+    "84": [0, 0.68611, 0.15972, 0, 0.63663],
+    "85": [0, 0.68611, 0.11424, 0, 0.80027],
+    "86": [0, 0.68611, 0.25555, 0, 0.67778],
+    "87": [0, 0.68611, 0.15972, 0, 1.09305],
+    "88": [0, 0.68611, 0.07778, 0, 0.94722],
+    "89": [0, 0.68611, 0.25555, 0, 0.67458],
+    "90": [0, 0.68611, 0.06979, 0, 0.77257],
+    "97": [0, 0.44444, 0, 0, 0.63287],
+    "98": [0, 0.69444, 0, 0, 0.52083],
+    "99": [0, 0.44444, 0, 0, 0.51342],
+    "100": [0, 0.69444, 0, 0, 0.60972],
+    "101": [0, 0.44444, 0, 0, 0.55361],
+    "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
+    "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
+    "104": [0, 0.69444, 0, 0, 0.66759],
+    "105": [0, 0.69326, 0, 0, 0.4048],
+    "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
+    "107": [0, 0.69444, 0.01852, 0, 0.6037],
+    "108": [0, 0.69444, 0.0088, 0, 0.34815],
+    "109": [0, 0.44444, 0, 0, 1.0324],
+    "110": [0, 0.44444, 0, 0, 0.71296],
+    "111": [0, 0.44444, 0, 0, 0.58472],
+    "112": [0.19444, 0.44444, 0, 0, 0.60092],
+    "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
+    "114": [0, 0.44444, 0.03194, 0, 0.5287],
+    "115": [0, 0.44444, 0, 0, 0.53125],
+    "116": [0, 0.63492, 0, 0, 0.41528],
+    "117": [0, 0.44444, 0, 0, 0.68102],
+    "118": [0, 0.44444, 0.03704, 0, 0.56666],
+    "119": [0, 0.44444, 0.02778, 0, 0.83148],
+    "120": [0, 0.44444, 0, 0, 0.65903],
+    "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
+    "122": [0, 0.44444, 0.04213, 0, 0.55509],
+    "915": [0, 0.68611, 0.15972, 0, 0.65694],
+    "916": [0, 0.68611, 0, 0, 0.95833],
+    "920": [0, 0.68611, 0.03194, 0, 0.86722],
+    "923": [0, 0.68611, 0, 0, 0.80555],
+    "926": [0, 0.68611, 0.07458, 0, 0.84125],
+    "928": [0, 0.68611, 0.08229, 0, 0.98229],
+    "931": [0, 0.68611, 0.05451, 0, 0.88507],
+    "933": [0, 0.68611, 0.15972, 0, 0.67083],
+    "934": [0, 0.68611, 0, 0, 0.76666],
+    "936": [0, 0.68611, 0.11653, 0, 0.71402],
+    "937": [0, 0.68611, 0.04835, 0, 0.8789],
+    "945": [0, 0.44444, 0, 0, 0.76064],
+    "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
+    "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
+    "948": [0, 0.69444, 0.03819, 0, 0.52222],
+    "949": [0, 0.44444, 0, 0, 0.52882],
+    "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
+    "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
+    "952": [0, 0.69444, 0.03194, 0, 0.5618],
+    "953": [0, 0.44444, 0, 0, 0.41204],
+    "954": [0, 0.44444, 0, 0, 0.66759],
+    "955": [0, 0.69444, 0, 0, 0.67083],
+    "956": [0.19444, 0.44444, 0, 0, 0.70787],
+    "957": [0, 0.44444, 0.06898, 0, 0.57685],
+    "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
+    "959": [0, 0.44444, 0, 0, 0.58472],
+    "960": [0, 0.44444, 0.03704, 0, 0.68241],
+    "961": [0.19444, 0.44444, 0, 0, 0.6118],
+    "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
+    "963": [0, 0.44444, 0.03704, 0, 0.68588],
+    "964": [0, 0.44444, 0.13472, 0, 0.52083],
+    "965": [0, 0.44444, 0.03704, 0, 0.63055],
+    "966": [0.19444, 0.44444, 0, 0, 0.74722],
+    "967": [0.19444, 0.44444, 0, 0, 0.71805],
+    "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
+    "969": [0, 0.44444, 0.03704, 0, 0.71782],
+    "977": [0, 0.69444, 0, 0, 0.69155],
+    "981": [0.19444, 0.69444, 0, 0, 0.7125],
+    "982": [0, 0.44444, 0.03194, 0, 0.975],
+    "1009": [0.19444, 0.44444, 0, 0, 0.6118],
+    "1013": [0, 0.44444, 0, 0, 0.48333]
+  },
+  "Math-Italic": {
+    "65": [0, 0.68333, 0, 0.13889, 0.75],
+    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
+    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
+    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
+    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
+    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
+    "71": [0, 0.68333, 0, 0.08334, 0.78625],
+    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
+    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
+    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
+    "76": [0, 0.68333, 0, 0.02778, 0.68056],
+    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
+    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
+    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
+    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
+    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
+    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
+    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
+    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
+    "86": [0, 0.68333, 0.22222, 0, 0.58333],
+    "87": [0, 0.68333, 0.13889, 0, 0.94445],
+    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
+    "89": [0, 0.68333, 0.22222, 0, 0.58056],
+    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
+    "97": [0, 0.43056, 0, 0, 0.52859],
+    "98": [0, 0.69444, 0, 0, 0.42917],
+    "99": [0, 0.43056, 0, 0.05556, 0.43276],
+    "100": [0, 0.69444, 0, 0.16667, 0.52049],
+    "101": [0, 0.43056, 0, 0.05556, 0.46563],
+    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+    "104": [0, 0.69444, 0, 0, 0.57616],
+    "105": [0, 0.65952, 0, 0, 0.34451],
+    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
+    "107": [0, 0.69444, 0.03148, 0, 0.5206],
+    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
+    "109": [0, 0.43056, 0, 0, 0.87801],
+    "110": [0, 0.43056, 0, 0, 0.60023],
+    "111": [0, 0.43056, 0, 0.05556, 0.48472],
+    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
+    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
+    "115": [0, 0.43056, 0, 0.05556, 0.46875],
+    "116": [0, 0.61508, 0, 0.08334, 0.36111],
+    "117": [0, 0.43056, 0, 0.02778, 0.57246],
+    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
+    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
+    "120": [0, 0.43056, 0, 0.02778, 0.57153],
+    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
+    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
+    "916": [0, 0.68333, 0, 0.16667, 0.83334],
+    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "923": [0, 0.68333, 0, 0.16667, 0.69445],
+    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
+    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
+    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
+    "934": [0, 0.68333, 0, 0.08334, 0.66667],
+    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
+    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
+    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
+    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
+    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
+    "949": [0, 0.43056, 0, 0.08334, 0.46632],
+    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
+    "953": [0, 0.43056, 0, 0.05556, 0.35394],
+    "954": [0, 0.43056, 0, 0, 0.57616],
+    "955": [0, 0.69444, 0, 0, 0.58334],
+    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
+    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
+    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+    "959": [0, 0.43056, 0, 0.05556, 0.48472],
+    "960": [0, 0.43056, 0.03588, 0, 0.57003],
+    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+    "963": [0, 0.43056, 0.03588, 0, 0.57141],
+    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
+    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
+    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
+    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
+    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+    "969": [0, 0.43056, 0.03588, 0, 0.62245],
+    "977": [0, 0.69444, 0, 0.08334, 0.59144],
+    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
+    "982": [0, 0.43056, 0.02778, 0, 0.82813],
+    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
+  },
+  "Math-Regular": {
+    "65": [0, 0.68333, 0, 0.13889, 0.75],
+    "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
+    "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
+    "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
+    "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
+    "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
+    "71": [0, 0.68333, 0, 0.08334, 0.78625],
+    "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
+    "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
+    "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
+    "76": [0, 0.68333, 0, 0.02778, 0.68056],
+    "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
+    "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
+    "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
+    "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
+    "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
+    "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
+    "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
+    "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
+    "86": [0, 0.68333, 0.22222, 0, 0.58333],
+    "87": [0, 0.68333, 0.13889, 0, 0.94445],
+    "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
+    "89": [0, 0.68333, 0.22222, 0, 0.58056],
+    "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
+    "97": [0, 0.43056, 0, 0, 0.52859],
+    "98": [0, 0.69444, 0, 0, 0.42917],
+    "99": [0, 0.43056, 0, 0.05556, 0.43276],
+    "100": [0, 0.69444, 0, 0.16667, 0.52049],
+    "101": [0, 0.43056, 0, 0.05556, 0.46563],
+    "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+    "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+    "104": [0, 0.69444, 0, 0, 0.57616],
+    "105": [0, 0.65952, 0, 0, 0.34451],
+    "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
+    "107": [0, 0.69444, 0.03148, 0, 0.5206],
+    "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
+    "109": [0, 0.43056, 0, 0, 0.87801],
+    "110": [0, 0.43056, 0, 0, 0.60023],
+    "111": [0, 0.43056, 0, 0.05556, 0.48472],
+    "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
+    "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+    "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
+    "115": [0, 0.43056, 0, 0.05556, 0.46875],
+    "116": [0, 0.61508, 0, 0.08334, 0.36111],
+    "117": [0, 0.43056, 0, 0.02778, 0.57246],
+    "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
+    "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
+    "120": [0, 0.43056, 0, 0.02778, 0.57153],
+    "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+    "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
+    "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
+    "916": [0, 0.68333, 0, 0.16667, 0.83334],
+    "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+    "923": [0, 0.68333, 0, 0.16667, 0.69445],
+    "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
+    "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+    "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
+    "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
+    "934": [0, 0.68333, 0, 0.08334, 0.66667],
+    "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
+    "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
+    "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
+    "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+    "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
+    "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
+    "949": [0, 0.43056, 0, 0.08334, 0.46632],
+    "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+    "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+    "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
+    "953": [0, 0.43056, 0, 0.05556, 0.35394],
+    "954": [0, 0.43056, 0, 0, 0.57616],
+    "955": [0, 0.69444, 0, 0, 0.58334],
+    "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
+    "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
+    "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+    "959": [0, 0.43056, 0, 0.05556, 0.48472],
+    "960": [0, 0.43056, 0.03588, 0, 0.57003],
+    "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+    "963": [0, 0.43056, 0.03588, 0, 0.57141],
+    "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
+    "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
+    "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
+    "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
+    "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+    "969": [0, 0.43056, 0.03588, 0, 0.62245],
+    "977": [0, 0.69444, 0, 0.08334, 0.59144],
+    "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
+    "982": [0, 0.43056, 0.02778, 0, 0.82813],
+    "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+    "1013": [0, 0.43056, 0, 0.05556, 0.4059]
+  },
+  "SansSerif-Bold": {
+    "33": [0, 0.69444, 0, 0, 0.36667],
+    "34": [0, 0.69444, 0, 0, 0.55834],
+    "35": [0.19444, 0.69444, 0, 0, 0.91667],
+    "36": [0.05556, 0.75, 0, 0, 0.55],
+    "37": [0.05556, 0.75, 0, 0, 1.02912],
+    "38": [0, 0.69444, 0, 0, 0.83056],
+    "39": [0, 0.69444, 0, 0, 0.30556],
+    "40": [0.25, 0.75, 0, 0, 0.42778],
+    "41": [0.25, 0.75, 0, 0, 0.42778],
+    "42": [0, 0.75, 0, 0, 0.55],
+    "43": [0.11667, 0.61667, 0, 0, 0.85556],
+    "44": [0.10556, 0.13056, 0, 0, 0.30556],
+    "45": [0, 0.45833, 0, 0, 0.36667],
+    "46": [0, 0.13056, 0, 0, 0.30556],
+    "47": [0.25, 0.75, 0, 0, 0.55],
+    "48": [0, 0.69444, 0, 0, 0.55],
+    "49": [0, 0.69444, 0, 0, 0.55],
+    "50": [0, 0.69444, 0, 0, 0.55],
+    "51": [0, 0.69444, 0, 0, 0.55],
+    "52": [0, 0.69444, 0, 0, 0.55],
+    "53": [0, 0.69444, 0, 0, 0.55],
+    "54": [0, 0.69444, 0, 0, 0.55],
+    "55": [0, 0.69444, 0, 0, 0.55],
+    "56": [0, 0.69444, 0, 0, 0.55],
+    "57": [0, 0.69444, 0, 0, 0.55],
+    "58": [0, 0.45833, 0, 0, 0.30556],
+    "59": [0.10556, 0.45833, 0, 0, 0.30556],
+    "61": [-0.09375, 0.40625, 0, 0, 0.85556],
+    "63": [0, 0.69444, 0, 0, 0.51945],
+    "64": [0, 0.69444, 0, 0, 0.73334],
+    "65": [0, 0.69444, 0, 0, 0.73334],
+    "66": [0, 0.69444, 0, 0, 0.73334],
+    "67": [0, 0.69444, 0, 0, 0.70278],
+    "68": [0, 0.69444, 0, 0, 0.79445],
+    "69": [0, 0.69444, 0, 0, 0.64167],
+    "70": [0, 0.69444, 0, 0, 0.61111],
+    "71": [0, 0.69444, 0, 0, 0.73334],
+    "72": [0, 0.69444, 0, 0, 0.79445],
+    "73": [0, 0.69444, 0, 0, 0.33056],
+    "74": [0, 0.69444, 0, 0, 0.51945],
+    "75": [0, 0.69444, 0, 0, 0.76389],
+    "76": [0, 0.69444, 0, 0, 0.58056],
+    "77": [0, 0.69444, 0, 0, 0.97778],
+    "78": [0, 0.69444, 0, 0, 0.79445],
+    "79": [0, 0.69444, 0, 0, 0.79445],
+    "80": [0, 0.69444, 0, 0, 0.70278],
+    "81": [0.10556, 0.69444, 0, 0, 0.79445],
+    "82": [0, 0.69444, 0, 0, 0.70278],
+    "83": [0, 0.69444, 0, 0, 0.61111],
+    "84": [0, 0.69444, 0, 0, 0.73334],
+    "85": [0, 0.69444, 0, 0, 0.76389],
+    "86": [0, 0.69444, 0.01528, 0, 0.73334],
+    "87": [0, 0.69444, 0.01528, 0, 1.03889],
+    "88": [0, 0.69444, 0, 0, 0.73334],
+    "89": [0, 0.69444, 0.0275, 0, 0.73334],
+    "90": [0, 0.69444, 0, 0, 0.67223],
+    "91": [0.25, 0.75, 0, 0, 0.34306],
+    "93": [0.25, 0.75, 0, 0, 0.34306],
+    "94": [0, 0.69444, 0, 0, 0.55],
+    "95": [0.35, 0.10833, 0.03056, 0, 0.55],
+    "97": [0, 0.45833, 0, 0, 0.525],
+    "98": [0, 0.69444, 0, 0, 0.56111],
+    "99": [0, 0.45833, 0, 0, 0.48889],
+    "100": [0, 0.69444, 0, 0, 0.56111],
+    "101": [0, 0.45833, 0, 0, 0.51111],
+    "102": [0, 0.69444, 0.07639, 0, 0.33611],
+    "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
+    "104": [0, 0.69444, 0, 0, 0.56111],
+    "105": [0, 0.69444, 0, 0, 0.25556],
+    "106": [0.19444, 0.69444, 0, 0, 0.28611],
+    "107": [0, 0.69444, 0, 0, 0.53056],
+    "108": [0, 0.69444, 0, 0, 0.25556],
+    "109": [0, 0.45833, 0, 0, 0.86667],
+    "110": [0, 0.45833, 0, 0, 0.56111],
+    "111": [0, 0.45833, 0, 0, 0.55],
+    "112": [0.19444, 0.45833, 0, 0, 0.56111],
+    "113": [0.19444, 0.45833, 0, 0, 0.56111],
+    "114": [0, 0.45833, 0.01528, 0, 0.37222],
+    "115": [0, 0.45833, 0, 0, 0.42167],
+    "116": [0, 0.58929, 0, 0, 0.40417],
+    "117": [0, 0.45833, 0, 0, 0.56111],
+    "118": [0, 0.45833, 0.01528, 0, 0.5],
+    "119": [0, 0.45833, 0.01528, 0, 0.74445],
+    "120": [0, 0.45833, 0, 0, 0.5],
+    "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
+    "122": [0, 0.45833, 0, 0, 0.47639],
+    "126": [0.35, 0.34444, 0, 0, 0.55],
+    "168": [0, 0.69444, 0, 0, 0.55],
+    "176": [0, 0.69444, 0, 0, 0.73334],
+    "180": [0, 0.69444, 0, 0, 0.55],
+    "184": [0.17014, 0, 0, 0, 0.48889],
+    "305": [0, 0.45833, 0, 0, 0.25556],
+    "567": [0.19444, 0.45833, 0, 0, 0.28611],
+    "710": [0, 0.69444, 0, 0, 0.55],
+    "711": [0, 0.63542, 0, 0, 0.55],
+    "713": [0, 0.63778, 0, 0, 0.55],
+    "728": [0, 0.69444, 0, 0, 0.55],
+    "729": [0, 0.69444, 0, 0, 0.30556],
+    "730": [0, 0.69444, 0, 0, 0.73334],
+    "732": [0, 0.69444, 0, 0, 0.55],
+    "733": [0, 0.69444, 0, 0, 0.55],
+    "915": [0, 0.69444, 0, 0, 0.58056],
+    "916": [0, 0.69444, 0, 0, 0.91667],
+    "920": [0, 0.69444, 0, 0, 0.85556],
+    "923": [0, 0.69444, 0, 0, 0.67223],
+    "926": [0, 0.69444, 0, 0, 0.73334],
+    "928": [0, 0.69444, 0, 0, 0.79445],
+    "931": [0, 0.69444, 0, 0, 0.79445],
+    "933": [0, 0.69444, 0, 0, 0.85556],
+    "934": [0, 0.69444, 0, 0, 0.79445],
+    "936": [0, 0.69444, 0, 0, 0.85556],
+    "937": [0, 0.69444, 0, 0, 0.79445],
+    "8211": [0, 0.45833, 0.03056, 0, 0.55],
+    "8212": [0, 0.45833, 0.03056, 0, 1.10001],
+    "8216": [0, 0.69444, 0, 0, 0.30556],
+    "8217": [0, 0.69444, 0, 0, 0.30556],
+    "8220": [0, 0.69444, 0, 0, 0.55834],
+    "8221": [0, 0.69444, 0, 0, 0.55834]
+  },
+  "SansSerif-Italic": {
+    "33": [0, 0.69444, 0.05733, 0, 0.31945],
+    "34": [0, 0.69444, 0.00316, 0, 0.5],
+    "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
+    "36": [0.05556, 0.75, 0.11156, 0, 0.5],
+    "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
+    "38": [0, 0.69444, 0.03058, 0, 0.75834],
+    "39": [0, 0.69444, 0.07816, 0, 0.27778],
+    "40": [0.25, 0.75, 0.13164, 0, 0.38889],
+    "41": [0.25, 0.75, 0.02536, 0, 0.38889],
+    "42": [0, 0.75, 0.11775, 0, 0.5],
+    "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
+    "44": [0.125, 0.08333, 0, 0, 0.27778],
+    "45": [0, 0.44444, 0.01946, 0, 0.33333],
+    "46": [0, 0.08333, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0.13164, 0, 0.5],
+    "48": [0, 0.65556, 0.11156, 0, 0.5],
+    "49": [0, 0.65556, 0.11156, 0, 0.5],
+    "50": [0, 0.65556, 0.11156, 0, 0.5],
+    "51": [0, 0.65556, 0.11156, 0, 0.5],
+    "52": [0, 0.65556, 0.11156, 0, 0.5],
+    "53": [0, 0.65556, 0.11156, 0, 0.5],
+    "54": [0, 0.65556, 0.11156, 0, 0.5],
+    "55": [0, 0.65556, 0.11156, 0, 0.5],
+    "56": [0, 0.65556, 0.11156, 0, 0.5],
+    "57": [0, 0.65556, 0.11156, 0, 0.5],
+    "58": [0, 0.44444, 0.02502, 0, 0.27778],
+    "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
+    "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
+    "63": [0, 0.69444, 0.11809, 0, 0.47222],
+    "64": [0, 0.69444, 0.07555, 0, 0.66667],
+    "65": [0, 0.69444, 0, 0, 0.66667],
+    "66": [0, 0.69444, 0.08293, 0, 0.66667],
+    "67": [0, 0.69444, 0.11983, 0, 0.63889],
+    "68": [0, 0.69444, 0.07555, 0, 0.72223],
+    "69": [0, 0.69444, 0.11983, 0, 0.59722],
+    "70": [0, 0.69444, 0.13372, 0, 0.56945],
+    "71": [0, 0.69444, 0.11983, 0, 0.66667],
+    "72": [0, 0.69444, 0.08094, 0, 0.70834],
+    "73": [0, 0.69444, 0.13372, 0, 0.27778],
+    "74": [0, 0.69444, 0.08094, 0, 0.47222],
+    "75": [0, 0.69444, 0.11983, 0, 0.69445],
+    "76": [0, 0.69444, 0, 0, 0.54167],
+    "77": [0, 0.69444, 0.08094, 0, 0.875],
+    "78": [0, 0.69444, 0.08094, 0, 0.70834],
+    "79": [0, 0.69444, 0.07555, 0, 0.73611],
+    "80": [0, 0.69444, 0.08293, 0, 0.63889],
+    "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
+    "82": [0, 0.69444, 0.08293, 0, 0.64584],
+    "83": [0, 0.69444, 0.09205, 0, 0.55556],
+    "84": [0, 0.69444, 0.13372, 0, 0.68056],
+    "85": [0, 0.69444, 0.08094, 0, 0.6875],
+    "86": [0, 0.69444, 0.1615, 0, 0.66667],
+    "87": [0, 0.69444, 0.1615, 0, 0.94445],
+    "88": [0, 0.69444, 0.13372, 0, 0.66667],
+    "89": [0, 0.69444, 0.17261, 0, 0.66667],
+    "90": [0, 0.69444, 0.11983, 0, 0.61111],
+    "91": [0.25, 0.75, 0.15942, 0, 0.28889],
+    "93": [0.25, 0.75, 0.08719, 0, 0.28889],
+    "94": [0, 0.69444, 0.0799, 0, 0.5],
+    "95": [0.35, 0.09444, 0.08616, 0, 0.5],
+    "97": [0, 0.44444, 0.00981, 0, 0.48056],
+    "98": [0, 0.69444, 0.03057, 0, 0.51667],
+    "99": [0, 0.44444, 0.08336, 0, 0.44445],
+    "100": [0, 0.69444, 0.09483, 0, 0.51667],
+    "101": [0, 0.44444, 0.06778, 0, 0.44445],
+    "102": [0, 0.69444, 0.21705, 0, 0.30556],
+    "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
+    "104": [0, 0.69444, 0.01778, 0, 0.51667],
+    "105": [0, 0.67937, 0.09718, 0, 0.23889],
+    "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
+    "107": [0, 0.69444, 0.08336, 0, 0.48889],
+    "108": [0, 0.69444, 0.09483, 0, 0.23889],
+    "109": [0, 0.44444, 0.01778, 0, 0.79445],
+    "110": [0, 0.44444, 0.01778, 0, 0.51667],
+    "111": [0, 0.44444, 0.06613, 0, 0.5],
+    "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
+    "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
+    "114": [0, 0.44444, 0.10836, 0, 0.34167],
+    "115": [0, 0.44444, 0.0778, 0, 0.38333],
+    "116": [0, 0.57143, 0.07225, 0, 0.36111],
+    "117": [0, 0.44444, 0.04169, 0, 0.51667],
+    "118": [0, 0.44444, 0.10836, 0, 0.46111],
+    "119": [0, 0.44444, 0.10836, 0, 0.68334],
+    "120": [0, 0.44444, 0.09169, 0, 0.46111],
+    "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
+    "122": [0, 0.44444, 0.08752, 0, 0.43472],
+    "126": [0.35, 0.32659, 0.08826, 0, 0.5],
+    "168": [0, 0.67937, 0.06385, 0, 0.5],
+    "176": [0, 0.69444, 0, 0, 0.73752],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "305": [0, 0.44444, 0.04169, 0, 0.23889],
+    "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
+    "710": [0, 0.69444, 0.0799, 0, 0.5],
+    "711": [0, 0.63194, 0.08432, 0, 0.5],
+    "713": [0, 0.60889, 0.08776, 0, 0.5],
+    "714": [0, 0.69444, 0.09205, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0.09483, 0, 0.5],
+    "729": [0, 0.67937, 0.07774, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.73752],
+    "732": [0, 0.67659, 0.08826, 0, 0.5],
+    "733": [0, 0.69444, 0.09205, 0, 0.5],
+    "915": [0, 0.69444, 0.13372, 0, 0.54167],
+    "916": [0, 0.69444, 0, 0, 0.83334],
+    "920": [0, 0.69444, 0.07555, 0, 0.77778],
+    "923": [0, 0.69444, 0, 0, 0.61111],
+    "926": [0, 0.69444, 0.12816, 0, 0.66667],
+    "928": [0, 0.69444, 0.08094, 0, 0.70834],
+    "931": [0, 0.69444, 0.11983, 0, 0.72222],
+    "933": [0, 0.69444, 0.09031, 0, 0.77778],
+    "934": [0, 0.69444, 0.04603, 0, 0.72222],
+    "936": [0, 0.69444, 0.09031, 0, 0.77778],
+    "937": [0, 0.69444, 0.08293, 0, 0.72222],
+    "8211": [0, 0.44444, 0.08616, 0, 0.5],
+    "8212": [0, 0.44444, 0.08616, 0, 1.0],
+    "8216": [0, 0.69444, 0.07816, 0, 0.27778],
+    "8217": [0, 0.69444, 0.07816, 0, 0.27778],
+    "8220": [0, 0.69444, 0.14205, 0, 0.5],
+    "8221": [0, 0.69444, 0.00316, 0, 0.5]
+  },
+  "SansSerif-Regular": {
+    "33": [0, 0.69444, 0, 0, 0.31945],
+    "34": [0, 0.69444, 0, 0, 0.5],
+    "35": [0.19444, 0.69444, 0, 0, 0.83334],
+    "36": [0.05556, 0.75, 0, 0, 0.5],
+    "37": [0.05556, 0.75, 0, 0, 0.83334],
+    "38": [0, 0.69444, 0, 0, 0.75834],
+    "39": [0, 0.69444, 0, 0, 0.27778],
+    "40": [0.25, 0.75, 0, 0, 0.38889],
+    "41": [0.25, 0.75, 0, 0, 0.38889],
+    "42": [0, 0.75, 0, 0, 0.5],
+    "43": [0.08333, 0.58333, 0, 0, 0.77778],
+    "44": [0.125, 0.08333, 0, 0, 0.27778],
+    "45": [0, 0.44444, 0, 0, 0.33333],
+    "46": [0, 0.08333, 0, 0, 0.27778],
+    "47": [0.25, 0.75, 0, 0, 0.5],
+    "48": [0, 0.65556, 0, 0, 0.5],
+    "49": [0, 0.65556, 0, 0, 0.5],
+    "50": [0, 0.65556, 0, 0, 0.5],
+    "51": [0, 0.65556, 0, 0, 0.5],
+    "52": [0, 0.65556, 0, 0, 0.5],
+    "53": [0, 0.65556, 0, 0, 0.5],
+    "54": [0, 0.65556, 0, 0, 0.5],
+    "55": [0, 0.65556, 0, 0, 0.5],
+    "56": [0, 0.65556, 0, 0, 0.5],
+    "57": [0, 0.65556, 0, 0, 0.5],
+    "58": [0, 0.44444, 0, 0, 0.27778],
+    "59": [0.125, 0.44444, 0, 0, 0.27778],
+    "61": [-0.13, 0.37, 0, 0, 0.77778],
+    "63": [0, 0.69444, 0, 0, 0.47222],
+    "64": [0, 0.69444, 0, 0, 0.66667],
+    "65": [0, 0.69444, 0, 0, 0.66667],
+    "66": [0, 0.69444, 0, 0, 0.66667],
+    "67": [0, 0.69444, 0, 0, 0.63889],
+    "68": [0, 0.69444, 0, 0, 0.72223],
+    "69": [0, 0.69444, 0, 0, 0.59722],
+    "70": [0, 0.69444, 0, 0, 0.56945],
+    "71": [0, 0.69444, 0, 0, 0.66667],
+    "72": [0, 0.69444, 0, 0, 0.70834],
+    "73": [0, 0.69444, 0, 0, 0.27778],
+    "74": [0, 0.69444, 0, 0, 0.47222],
+    "75": [0, 0.69444, 0, 0, 0.69445],
+    "76": [0, 0.69444, 0, 0, 0.54167],
+    "77": [0, 0.69444, 0, 0, 0.875],
+    "78": [0, 0.69444, 0, 0, 0.70834],
+    "79": [0, 0.69444, 0, 0, 0.73611],
+    "80": [0, 0.69444, 0, 0, 0.63889],
+    "81": [0.125, 0.69444, 0, 0, 0.73611],
+    "82": [0, 0.69444, 0, 0, 0.64584],
+    "83": [0, 0.69444, 0, 0, 0.55556],
+    "84": [0, 0.69444, 0, 0, 0.68056],
+    "85": [0, 0.69444, 0, 0, 0.6875],
+    "86": [0, 0.69444, 0.01389, 0, 0.66667],
+    "87": [0, 0.69444, 0.01389, 0, 0.94445],
+    "88": [0, 0.69444, 0, 0, 0.66667],
+    "89": [0, 0.69444, 0.025, 0, 0.66667],
+    "90": [0, 0.69444, 0, 0, 0.61111],
+    "91": [0.25, 0.75, 0, 0, 0.28889],
+    "93": [0.25, 0.75, 0, 0, 0.28889],
+    "94": [0, 0.69444, 0, 0, 0.5],
+    "95": [0.35, 0.09444, 0.02778, 0, 0.5],
+    "97": [0, 0.44444, 0, 0, 0.48056],
+    "98": [0, 0.69444, 0, 0, 0.51667],
+    "99": [0, 0.44444, 0, 0, 0.44445],
+    "100": [0, 0.69444, 0, 0, 0.51667],
+    "101": [0, 0.44444, 0, 0, 0.44445],
+    "102": [0, 0.69444, 0.06944, 0, 0.30556],
+    "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
+    "104": [0, 0.69444, 0, 0, 0.51667],
+    "105": [0, 0.67937, 0, 0, 0.23889],
+    "106": [0.19444, 0.67937, 0, 0, 0.26667],
+    "107": [0, 0.69444, 0, 0, 0.48889],
+    "108": [0, 0.69444, 0, 0, 0.23889],
+    "109": [0, 0.44444, 0, 0, 0.79445],
+    "110": [0, 0.44444, 0, 0, 0.51667],
+    "111": [0, 0.44444, 0, 0, 0.5],
+    "112": [0.19444, 0.44444, 0, 0, 0.51667],
+    "113": [0.19444, 0.44444, 0, 0, 0.51667],
+    "114": [0, 0.44444, 0.01389, 0, 0.34167],
+    "115": [0, 0.44444, 0, 0, 0.38333],
+    "116": [0, 0.57143, 0, 0, 0.36111],
+    "117": [0, 0.44444, 0, 0, 0.51667],
+    "118": [0, 0.44444, 0.01389, 0, 0.46111],
+    "119": [0, 0.44444, 0.01389, 0, 0.68334],
+    "120": [0, 0.44444, 0, 0, 0.46111],
+    "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
+    "122": [0, 0.44444, 0, 0, 0.43472],
+    "126": [0.35, 0.32659, 0, 0, 0.5],
+    "168": [0, 0.67937, 0, 0, 0.5],
+    "176": [0, 0.69444, 0, 0, 0.66667],
+    "184": [0.17014, 0, 0, 0, 0.44445],
+    "305": [0, 0.44444, 0, 0, 0.23889],
+    "567": [0.19444, 0.44444, 0, 0, 0.26667],
+    "710": [0, 0.69444, 0, 0, 0.5],
+    "711": [0, 0.63194, 0, 0, 0.5],
+    "713": [0, 0.60889, 0, 0, 0.5],
+    "714": [0, 0.69444, 0, 0, 0.5],
+    "715": [0, 0.69444, 0, 0, 0.5],
+    "728": [0, 0.69444, 0, 0, 0.5],
+    "729": [0, 0.67937, 0, 0, 0.27778],
+    "730": [0, 0.69444, 0, 0, 0.66667],
+    "732": [0, 0.67659, 0, 0, 0.5],
+    "733": [0, 0.69444, 0, 0, 0.5],
+    "915": [0, 0.69444, 0, 0, 0.54167],
+    "916": [0, 0.69444, 0, 0, 0.83334],
+    "920": [0, 0.69444, 0, 0, 0.77778],
+    "923": [0, 0.69444, 0, 0, 0.61111],
+    "926": [0, 0.69444, 0, 0, 0.66667],
+    "928": [0, 0.69444, 0, 0, 0.70834],
+    "931": [0, 0.69444, 0, 0, 0.72222],
+    "933": [0, 0.69444, 0, 0, 0.77778],
+    "934": [0, 0.69444, 0, 0, 0.72222],
+    "936": [0, 0.69444, 0, 0, 0.77778],
+    "937": [0, 0.69444, 0, 0, 0.72222],
+    "8211": [0, 0.44444, 0.02778, 0, 0.5],
+    "8212": [0, 0.44444, 0.02778, 0, 1.0],
+    "8216": [0, 0.69444, 0, 0, 0.27778],
+    "8217": [0, 0.69444, 0, 0, 0.27778],
+    "8220": [0, 0.69444, 0, 0, 0.5],
+    "8221": [0, 0.69444, 0, 0, 0.5]
+  },
+  "Script-Regular": {
+    "65": [0, 0.7, 0.22925, 0, 0.80253],
+    "66": [0, 0.7, 0.04087, 0, 0.90757],
+    "67": [0, 0.7, 0.1689, 0, 0.66619],
+    "68": [0, 0.7, 0.09371, 0, 0.77443],
+    "69": [0, 0.7, 0.18583, 0, 0.56162],
+    "70": [0, 0.7, 0.13634, 0, 0.89544],
+    "71": [0, 0.7, 0.17322, 0, 0.60961],
+    "72": [0, 0.7, 0.29694, 0, 0.96919],
+    "73": [0, 0.7, 0.19189, 0, 0.80907],
+    "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
+    "75": [0, 0.7, 0.31259, 0, 0.91364],
+    "76": [0, 0.7, 0.19189, 0, 0.87373],
+    "77": [0, 0.7, 0.15981, 0, 1.08031],
+    "78": [0, 0.7, 0.3525, 0, 0.9015],
+    "79": [0, 0.7, 0.08078, 0, 0.73787],
+    "80": [0, 0.7, 0.08078, 0, 1.01262],
+    "81": [0, 0.7, 0.03305, 0, 0.88282],
+    "82": [0, 0.7, 0.06259, 0, 0.85],
+    "83": [0, 0.7, 0.19189, 0, 0.86767],
+    "84": [0, 0.7, 0.29087, 0, 0.74697],
+    "85": [0, 0.7, 0.25815, 0, 0.79996],
+    "86": [0, 0.7, 0.27523, 0, 0.62204],
+    "87": [0, 0.7, 0.27523, 0, 0.80532],
+    "88": [0, 0.7, 0.26006, 0, 0.94445],
+    "89": [0, 0.7, 0.2939, 0, 0.70961],
+    "90": [0, 0.7, 0.24037, 0, 0.8212]
+  },
+  "Size1-Regular": {
+    "40": [0.35001, 0.85, 0, 0, 0.45834],
+    "41": [0.35001, 0.85, 0, 0, 0.45834],
+    "47": [0.35001, 0.85, 0, 0, 0.57778],
+    "91": [0.35001, 0.85, 0, 0, 0.41667],
+    "92": [0.35001, 0.85, 0, 0, 0.57778],
+    "93": [0.35001, 0.85, 0, 0, 0.41667],
+    "123": [0.35001, 0.85, 0, 0, 0.58334],
+    "125": [0.35001, 0.85, 0, 0, 0.58334],
+    "710": [0, 0.72222, 0, 0, 0.55556],
+    "732": [0, 0.72222, 0, 0, 0.55556],
+    "770": [0, 0.72222, 0, 0, 0.55556],
+    "771": [0, 0.72222, 0, 0, 0.55556],
+    "8214": [-0.00099, 0.601, 0, 0, 0.77778],
+    "8593": [1e-05, 0.6, 0, 0, 0.66667],
+    "8595": [1e-05, 0.6, 0, 0, 0.66667],
+    "8657": [1e-05, 0.6, 0, 0, 0.77778],
+    "8659": [1e-05, 0.6, 0, 0, 0.77778],
+    "8719": [0.25001, 0.75, 0, 0, 0.94445],
+    "8720": [0.25001, 0.75, 0, 0, 0.94445],
+    "8721": [0.25001, 0.75, 0, 0, 1.05556],
+    "8730": [0.35001, 0.85, 0, 0, 1.0],
+    "8739": [-0.00599, 0.606, 0, 0, 0.33333],
+    "8741": [-0.00599, 0.606, 0, 0, 0.55556],
+    "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
+    "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
+    "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
+    "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
+    "8896": [0.25001, 0.75, 0, 0, 0.83334],
+    "8897": [0.25001, 0.75, 0, 0, 0.83334],
+    "8898": [0.25001, 0.75, 0, 0, 0.83334],
+    "8899": [0.25001, 0.75, 0, 0, 0.83334],
+    "8968": [0.35001, 0.85, 0, 0, 0.47222],
+    "8969": [0.35001, 0.85, 0, 0, 0.47222],
+    "8970": [0.35001, 0.85, 0, 0, 0.47222],
+    "8971": [0.35001, 0.85, 0, 0, 0.47222],
+    "9168": [-0.00099, 0.601, 0, 0, 0.66667],
+    "10216": [0.35001, 0.85, 0, 0, 0.47222],
+    "10217": [0.35001, 0.85, 0, 0, 0.47222],
+    "10752": [0.25001, 0.75, 0, 0, 1.11111],
+    "10753": [0.25001, 0.75, 0, 0, 1.11111],
+    "10754": [0.25001, 0.75, 0, 0, 1.11111],
+    "10756": [0.25001, 0.75, 0, 0, 0.83334],
+    "10758": [0.25001, 0.75, 0, 0, 0.83334]
+  },
+  "Size2-Regular": {
+    "40": [0.65002, 1.15, 0, 0, 0.59722],
+    "41": [0.65002, 1.15, 0, 0, 0.59722],
+    "47": [0.65002, 1.15, 0, 0, 0.81111],
+    "91": [0.65002, 1.15, 0, 0, 0.47222],
+    "92": [0.65002, 1.15, 0, 0, 0.81111],
+    "93": [0.65002, 1.15, 0, 0, 0.47222],
+    "123": [0.65002, 1.15, 0, 0, 0.66667],
+    "125": [0.65002, 1.15, 0, 0, 0.66667],
+    "710": [0, 0.75, 0, 0, 1.0],
+    "732": [0, 0.75, 0, 0, 1.0],
+    "770": [0, 0.75, 0, 0, 1.0],
+    "771": [0, 0.75, 0, 0, 1.0],
+    "8719": [0.55001, 1.05, 0, 0, 1.27778],
+    "8720": [0.55001, 1.05, 0, 0, 1.27778],
+    "8721": [0.55001, 1.05, 0, 0, 1.44445],
+    "8730": [0.65002, 1.15, 0, 0, 1.0],
+    "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
+    "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
+    "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
+    "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
+    "8896": [0.55001, 1.05, 0, 0, 1.11111],
+    "8897": [0.55001, 1.05, 0, 0, 1.11111],
+    "8898": [0.55001, 1.05, 0, 0, 1.11111],
+    "8899": [0.55001, 1.05, 0, 0, 1.11111],
+    "8968": [0.65002, 1.15, 0, 0, 0.52778],
+    "8969": [0.65002, 1.15, 0, 0, 0.52778],
+    "8970": [0.65002, 1.15, 0, 0, 0.52778],
+    "8971": [0.65002, 1.15, 0, 0, 0.52778],
+    "10216": [0.65002, 1.15, 0, 0, 0.61111],
+    "10217": [0.65002, 1.15, 0, 0, 0.61111],
+    "10752": [0.55001, 1.05, 0, 0, 1.51112],
+    "10753": [0.55001, 1.05, 0, 0, 1.51112],
+    "10754": [0.55001, 1.05, 0, 0, 1.51112],
+    "10756": [0.55001, 1.05, 0, 0, 1.11111],
+    "10758": [0.55001, 1.05, 0, 0, 1.11111]
+  },
+  "Size3-Regular": {
+    "40": [0.95003, 1.45, 0, 0, 0.73611],
+    "41": [0.95003, 1.45, 0, 0, 0.73611],
+    "47": [0.95003, 1.45, 0, 0, 1.04445],
+    "91": [0.95003, 1.45, 0, 0, 0.52778],
+    "92": [0.95003, 1.45, 0, 0, 1.04445],
+    "93": [0.95003, 1.45, 0, 0, 0.52778],
+    "123": [0.95003, 1.45, 0, 0, 0.75],
+    "125": [0.95003, 1.45, 0, 0, 0.75],
+    "710": [0, 0.75, 0, 0, 1.44445],
+    "732": [0, 0.75, 0, 0, 1.44445],
+    "770": [0, 0.75, 0, 0, 1.44445],
+    "771": [0, 0.75, 0, 0, 1.44445],
+    "8730": [0.95003, 1.45, 0, 0, 1.0],
+    "8968": [0.95003, 1.45, 0, 0, 0.58334],
+    "8969": [0.95003, 1.45, 0, 0, 0.58334],
+    "8970": [0.95003, 1.45, 0, 0, 0.58334],
+    "8971": [0.95003, 1.45, 0, 0, 0.58334],
+    "10216": [0.95003, 1.45, 0, 0, 0.75],
+    "10217": [0.95003, 1.45, 0, 0, 0.75]
+  },
+  "Size4-Regular": {
+    "40": [1.25003, 1.75, 0, 0, 0.79167],
+    "41": [1.25003, 1.75, 0, 0, 0.79167],
+    "47": [1.25003, 1.75, 0, 0, 1.27778],
+    "91": [1.25003, 1.75, 0, 0, 0.58334],
+    "92": [1.25003, 1.75, 0, 0, 1.27778],
+    "93": [1.25003, 1.75, 0, 0, 0.58334],
+    "123": [1.25003, 1.75, 0, 0, 0.80556],
+    "125": [1.25003, 1.75, 0, 0, 0.80556],
+    "710": [0, 0.825, 0, 0, 1.8889],
+    "732": [0, 0.825, 0, 0, 1.8889],
+    "770": [0, 0.825, 0, 0, 1.8889],
+    "771": [0, 0.825, 0, 0, 1.8889],
+    "8730": [1.25003, 1.75, 0, 0, 1.0],
+    "8968": [1.25003, 1.75, 0, 0, 0.63889],
+    "8969": [1.25003, 1.75, 0, 0, 0.63889],
+    "8970": [1.25003, 1.75, 0, 0, 0.63889],
+    "8971": [1.25003, 1.75, 0, 0, 0.63889],
+    "9115": [0.64502, 1.155, 0, 0, 0.875],
+    "9116": [1e-05, 0.6, 0, 0, 0.875],
+    "9117": [0.64502, 1.155, 0, 0, 0.875],
+    "9118": [0.64502, 1.155, 0, 0, 0.875],
+    "9119": [1e-05, 0.6, 0, 0, 0.875],
+    "9120": [0.64502, 1.155, 0, 0, 0.875],
+    "9121": [0.64502, 1.155, 0, 0, 0.66667],
+    "9122": [-0.00099, 0.601, 0, 0, 0.66667],
+    "9123": [0.64502, 1.155, 0, 0, 0.66667],
+    "9124": [0.64502, 1.155, 0, 0, 0.66667],
+    "9125": [-0.00099, 0.601, 0, 0, 0.66667],
+    "9126": [0.64502, 1.155, 0, 0, 0.66667],
+    "9127": [1e-05, 0.9, 0, 0, 0.88889],
+    "9128": [0.65002, 1.15, 0, 0, 0.88889],
+    "9129": [0.90001, 0, 0, 0, 0.88889],
+    "9130": [0, 0.3, 0, 0, 0.88889],
+    "9131": [1e-05, 0.9, 0, 0, 0.88889],
+    "9132": [0.65002, 1.15, 0, 0, 0.88889],
+    "9133": [0.90001, 0, 0, 0, 0.88889],
+    "9143": [0.88502, 0.915, 0, 0, 1.05556],
+    "10216": [1.25003, 1.75, 0, 0, 0.80556],
+    "10217": [1.25003, 1.75, 0, 0, 0.80556],
+    "57344": [-0.00499, 0.605, 0, 0, 1.05556],
+    "57345": [-0.00499, 0.605, 0, 0, 1.05556],
+    "57680": [0, 0.12, 0, 0, 0.45],
+    "57681": [0, 0.12, 0, 0, 0.45],
+    "57682": [0, 0.12, 0, 0, 0.45],
+    "57683": [0, 0.12, 0, 0, 0.45]
+  },
+  "Typewriter-Regular": {
+    "32": [0, 0, 0, 0, 0.525],
+    "33": [0, 0.61111, 0, 0, 0.525],
+    "34": [0, 0.61111, 0, 0, 0.525],
+    "35": [0, 0.61111, 0, 0, 0.525],
+    "36": [0.08333, 0.69444, 0, 0, 0.525],
+    "37": [0.08333, 0.69444, 0, 0, 0.525],
+    "38": [0, 0.61111, 0, 0, 0.525],
+    "39": [0, 0.61111, 0, 0, 0.525],
+    "40": [0.08333, 0.69444, 0, 0, 0.525],
+    "41": [0.08333, 0.69444, 0, 0, 0.525],
+    "42": [0, 0.52083, 0, 0, 0.525],
+    "43": [-0.08056, 0.53055, 0, 0, 0.525],
+    "44": [0.13889, 0.125, 0, 0, 0.525],
+    "45": [-0.08056, 0.53055, 0, 0, 0.525],
+    "46": [0, 0.125, 0, 0, 0.525],
+    "47": [0.08333, 0.69444, 0, 0, 0.525],
+    "48": [0, 0.61111, 0, 0, 0.525],
+    "49": [0, 0.61111, 0, 0, 0.525],
+    "50": [0, 0.61111, 0, 0, 0.525],
+    "51": [0, 0.61111, 0, 0, 0.525],
+    "52": [0, 0.61111, 0, 0, 0.525],
+    "53": [0, 0.61111, 0, 0, 0.525],
+    "54": [0, 0.61111, 0, 0, 0.525],
+    "55": [0, 0.61111, 0, 0, 0.525],
+    "56": [0, 0.61111, 0, 0, 0.525],
+    "57": [0, 0.61111, 0, 0, 0.525],
+    "58": [0, 0.43056, 0, 0, 0.525],
+    "59": [0.13889, 0.43056, 0, 0, 0.525],
+    "60": [-0.05556, 0.55556, 0, 0, 0.525],
+    "61": [-0.19549, 0.41562, 0, 0, 0.525],
+    "62": [-0.05556, 0.55556, 0, 0, 0.525],
+    "63": [0, 0.61111, 0, 0, 0.525],
+    "64": [0, 0.61111, 0, 0, 0.525],
+    "65": [0, 0.61111, 0, 0, 0.525],
+    "66": [0, 0.61111, 0, 0, 0.525],
+    "67": [0, 0.61111, 0, 0, 0.525],
+    "68": [0, 0.61111, 0, 0, 0.525],
+    "69": [0, 0.61111, 0, 0, 0.525],
+    "70": [0, 0.61111, 0, 0, 0.525],
+    "71": [0, 0.61111, 0, 0, 0.525],
+    "72": [0, 0.61111, 0, 0, 0.525],
+    "73": [0, 0.61111, 0, 0, 0.525],
+    "74": [0, 0.61111, 0, 0, 0.525],
+    "75": [0, 0.61111, 0, 0, 0.525],
+    "76": [0, 0.61111, 0, 0, 0.525],
+    "77": [0, 0.61111, 0, 0, 0.525],
+    "78": [0, 0.61111, 0, 0, 0.525],
+    "79": [0, 0.61111, 0, 0, 0.525],
+    "80": [0, 0.61111, 0, 0, 0.525],
+    "81": [0.13889, 0.61111, 0, 0, 0.525],
+    "82": [0, 0.61111, 0, 0, 0.525],
+    "83": [0, 0.61111, 0, 0, 0.525],
+    "84": [0, 0.61111, 0, 0, 0.525],
+    "85": [0, 0.61111, 0, 0, 0.525],
+    "86": [0, 0.61111, 0, 0, 0.525],
+    "87": [0, 0.61111, 0, 0, 0.525],
+    "88": [0, 0.61111, 0, 0, 0.525],
+    "89": [0, 0.61111, 0, 0, 0.525],
+    "90": [0, 0.61111, 0, 0, 0.525],
+    "91": [0.08333, 0.69444, 0, 0, 0.525],
+    "92": [0.08333, 0.69444, 0, 0, 0.525],
+    "93": [0.08333, 0.69444, 0, 0, 0.525],
+    "94": [0, 0.61111, 0, 0, 0.525],
+    "95": [0.09514, 0, 0, 0, 0.525],
+    "96": [0, 0.61111, 0, 0, 0.525],
+    "97": [0, 0.43056, 0, 0, 0.525],
+    "98": [0, 0.61111, 0, 0, 0.525],
+    "99": [0, 0.43056, 0, 0, 0.525],
+    "100": [0, 0.61111, 0, 0, 0.525],
+    "101": [0, 0.43056, 0, 0, 0.525],
+    "102": [0, 0.61111, 0, 0, 0.525],
+    "103": [0.22222, 0.43056, 0, 0, 0.525],
+    "104": [0, 0.61111, 0, 0, 0.525],
+    "105": [0, 0.61111, 0, 0, 0.525],
+    "106": [0.22222, 0.61111, 0, 0, 0.525],
+    "107": [0, 0.61111, 0, 0, 0.525],
+    "108": [0, 0.61111, 0, 0, 0.525],
+    "109": [0, 0.43056, 0, 0, 0.525],
+    "110": [0, 0.43056, 0, 0, 0.525],
+    "111": [0, 0.43056, 0, 0, 0.525],
+    "112": [0.22222, 0.43056, 0, 0, 0.525],
+    "113": [0.22222, 0.43056, 0, 0, 0.525],
+    "114": [0, 0.43056, 0, 0, 0.525],
+    "115": [0, 0.43056, 0, 0, 0.525],
+    "116": [0, 0.55358, 0, 0, 0.525],
+    "117": [0, 0.43056, 0, 0, 0.525],
+    "118": [0, 0.43056, 0, 0, 0.525],
+    "119": [0, 0.43056, 0, 0, 0.525],
+    "120": [0, 0.43056, 0, 0, 0.525],
+    "121": [0.22222, 0.43056, 0, 0, 0.525],
+    "122": [0, 0.43056, 0, 0, 0.525],
+    "123": [0.08333, 0.69444, 0, 0, 0.525],
+    "124": [0.08333, 0.69444, 0, 0, 0.525],
+    "125": [0.08333, 0.69444, 0, 0, 0.525],
+    "126": [0, 0.61111, 0, 0, 0.525],
+    "127": [0, 0.61111, 0, 0, 0.525],
+    "160": [0, 0, 0, 0, 0.525],
+    "176": [0, 0.61111, 0, 0, 0.525],
+    "184": [0.19445, 0, 0, 0, 0.525],
+    "305": [0, 0.43056, 0, 0, 0.525],
+    "567": [0.22222, 0.43056, 0, 0, 0.525],
+    "711": [0, 0.56597, 0, 0, 0.525],
+    "713": [0, 0.56555, 0, 0, 0.525],
+    "714": [0, 0.61111, 0, 0, 0.525],
+    "715": [0, 0.61111, 0, 0, 0.525],
+    "728": [0, 0.61111, 0, 0, 0.525],
+    "730": [0, 0.61111, 0, 0, 0.525],
+    "770": [0, 0.61111, 0, 0, 0.525],
+    "771": [0, 0.61111, 0, 0, 0.525],
+    "776": [0, 0.61111, 0, 0, 0.525],
+    "915": [0, 0.61111, 0, 0, 0.525],
+    "916": [0, 0.61111, 0, 0, 0.525],
+    "920": [0, 0.61111, 0, 0, 0.525],
+    "923": [0, 0.61111, 0, 0, 0.525],
+    "926": [0, 0.61111, 0, 0, 0.525],
+    "928": [0, 0.61111, 0, 0, 0.525],
+    "931": [0, 0.61111, 0, 0, 0.525],
+    "933": [0, 0.61111, 0, 0, 0.525],
+    "934": [0, 0.61111, 0, 0, 0.525],
+    "936": [0, 0.61111, 0, 0, 0.525],
+    "937": [0, 0.61111, 0, 0, 0.525],
+    "8216": [0, 0.61111, 0, 0, 0.525],
+    "8217": [0, 0.61111, 0, 0, 0.525],
+    "8242": [0, 0.61111, 0, 0, 0.525],
+    "9251": [0.11111, 0.21944, 0, 0, 0.525]
+  }
+};
+
+/**
+ * This file contains metrics regarding fonts and individual symbols. The sigma
+ * and xi variables, as well as the metricMap map contain data extracted from
+ * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
+ * `metrics` variable and the getCharacterMetrics function.
+ */
+// In TeX, there are actually three sets of dimensions, one for each of
+// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
+// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are
+// provided in the the arrays below, in that order.
+//
+// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
+// This was determined by running the following script:
+//
+//     latex -interaction=nonstopmode \
+//     '\documentclass{article}\usepackage{amsmath}\begin{document}' \
+//     '$a$ \expandafter\show\the\textfont2' \
+//     '\expandafter\show\the\scriptfont2' \
+//     '\expandafter\show\the\scriptscriptfont2' \
+//     '\stop'
+//
+// The metrics themselves were retreived using the following commands:
+//
+//     tftopl cmsy10
+//     tftopl cmsy7
+//     tftopl cmsy5
+//
+// The output of each of these commands is quite lengthy.  The only part we
+// care about is the FONTDIMEN section. Each value is measured in EMs.
+const sigmasAndXis = {
+  slant: [0.250, 0.250, 0.250],
+  // sigma1
+  space: [0.000, 0.000, 0.000],
+  // sigma2
+  stretch: [0.000, 0.000, 0.000],
+  // sigma3
+  shrink: [0.000, 0.000, 0.000],
+  // sigma4
+  xHeight: [0.431, 0.431, 0.431],
+  // sigma5
+  quad: [1.000, 1.171, 1.472],
+  // sigma6
+  extraSpace: [0.000, 0.000, 0.000],
+  // sigma7
+  num1: [0.677, 0.732, 0.925],
+  // sigma8
+  num2: [0.394, 0.384, 0.387],
+  // sigma9
+  num3: [0.444, 0.471, 0.504],
+  // sigma10
+  denom1: [0.686, 0.752, 1.025],
+  // sigma11
+  denom2: [0.345, 0.344, 0.532],
+  // sigma12
+  sup1: [0.413, 0.503, 0.504],
+  // sigma13
+  sup2: [0.363, 0.431, 0.404],
+  // sigma14
+  sup3: [0.289, 0.286, 0.294],
+  // sigma15
+  sub1: [0.150, 0.143, 0.200],
+  // sigma16
+  sub2: [0.247, 0.286, 0.400],
+  // sigma17
+  supDrop: [0.386, 0.353, 0.494],
+  // sigma18
+  subDrop: [0.050, 0.071, 0.100],
+  // sigma19
+  delim1: [2.390, 1.700, 1.980],
+  // sigma20
+  delim2: [1.010, 1.157, 1.420],
+  // sigma21
+  axisHeight: [0.250, 0.250, 0.250],
+  // sigma22
+  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
+  // they correspond to the font parameters of the extension fonts (family 3).
+  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
+  // match cmex7, we'd use cmex7.tfm values for script and scriptscript
+  // values.
+  defaultRuleThickness: [0.04, 0.049, 0.049],
+  // xi8; cmex7: 0.049
+  bigOpSpacing1: [0.111, 0.111, 0.111],
+  // xi9
+  bigOpSpacing2: [0.166, 0.166, 0.166],
+  // xi10
+  bigOpSpacing3: [0.2, 0.2, 0.2],
+  // xi11
+  bigOpSpacing4: [0.6, 0.611, 0.611],
+  // xi12; cmex7: 0.611
+  bigOpSpacing5: [0.1, 0.143, 0.143],
+  // xi13; cmex7: 0.143
+  // The \sqrt rule width is taken from the height of the surd character.
+  // Since we use the same font at all sizes, this thickness doesn't scale.
+  sqrtRuleThickness: [0.04, 0.04, 0.04],
+  // This value determines how large a pt is, for metrics which are defined
+  // in terms of pts.
+  // This value is also used in katex.less; if you change it make sure the
+  // values match.
+  ptPerEm: [10.0, 10.0, 10.0],
+  // The space between adjacent `|` columns in an array definition. From
+  // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
+  doubleRuleSep: [0.2, 0.2, 0.2],
+  // The width of separator lines in {array} environments. From
+  // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
+  arrayRuleWidth: [0.04, 0.04, 0.04],
+  // Two values from LaTeX source2e:
+  fboxsep: [0.3, 0.3, 0.3],
+  //        3 pt / ptPerEm
+  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
+
+}; // This map contains a mapping from font name and character code to character
+// should have Latin-1 and Cyrillic characters, but may not depending on the
+// operating system.  The metrics do not account for extra height from the
+// accents.  In the case of Cyrillic characters which have both ascenders and
+// descenders we prefer approximations with ascenders, primarily to prevent
+// the fraction bar or root line from intersecting the glyph.
+// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
+
+const extraCharacterMap = {
+  // Latin-1
+  'Å': 'A',
+  'Ç': 'C',
+  'Ð': 'D',
+  'Þ': 'o',
+  'å': 'a',
+  'ç': 'c',
+  'ð': 'd',
+  'þ': 'o',
+  // Cyrillic
+  'А': 'A',
+  'Б': 'B',
+  'В': 'B',
+  'Г': 'F',
+  'Д': 'A',
+  'Е': 'E',
+  'Ж': 'K',
+  'З': '3',
+  'И': 'N',
+  'Й': 'N',
+  'К': 'K',
+  'Л': 'N',
+  'М': 'M',
+  'Н': 'H',
+  'О': 'O',
+  'П': 'N',
+  'Р': 'P',
+  'С': 'C',
+  'Т': 'T',
+  'У': 'y',
+  'Ф': 'O',
+  'Х': 'X',
+  'Ц': 'U',
+  'Ч': 'h',
+  'Ш': 'W',
+  'Щ': 'W',
+  'Ъ': 'B',
+  'Ы': 'X',
+  'Ь': 'B',
+  'Э': '3',
+  'Ю': 'X',
+  'Я': 'R',
+  'а': 'a',
+  'б': 'b',
+  'в': 'a',
+  'г': 'r',
+  'д': 'y',
+  'е': 'e',
+  'ж': 'm',
+  'з': 'e',
+  'и': 'n',
+  'й': 'n',
+  'к': 'n',
+  'л': 'n',
+  'м': 'm',
+  'н': 'n',
+  'о': 'o',
+  'п': 'n',
+  'р': 'p',
+  'с': 'c',
+  'т': 'o',
+  'у': 'y',
+  'ф': 'b',
+  'х': 'x',
+  'ц': 'n',
+  'ч': 'n',
+  'ш': 'w',
+  'щ': 'w',
+  'ъ': 'a',
+  'ы': 'm',
+  'ь': 'a',
+  'э': 'e',
+  'ю': 'm',
+  'я': 'r'
+};
+
+/**
+ * This function adds new font metrics to default metricMap
+ * It can also override existing metrics
+ */
+function setFontMetrics(fontName, metrics) {
+  metricMap[fontName] = metrics;
+}
+/**
+ * This function is a convenience function for looking up information in the
+ * metricMap table. It takes a character as a string, and a font.
+ *
+ * Note: the `width` property may be undefined if fontMetricsData.js wasn't
+ * built using `Make extended_metrics`.
+ */
+
+function getCharacterMetrics(character, font, mode) {
+  if (!metricMap[font]) {
+    throw new Error(`Font metrics not found for font: ${font}.`);
+  }
+
+  let ch = character.charCodeAt(0);
+  let metrics = metricMap[font][ch];
+
+  if (!metrics && character[0] in extraCharacterMap) {
+    ch = extraCharacterMap[character[0]].charCodeAt(0);
+    metrics = metricMap[font][ch];
+  }
+
+  if (!metrics && mode === 'text') {
+    // We don't typically have font metrics for Asian scripts.
+    // But since we support them in text mode, we need to return
+    // some sort of metrics.
+    // So if the character is in a script we support but we
+    // don't have metrics for it, just use the metrics for
+    // the Latin capital letter M. This is close enough because
+    // we (currently) only care about the height of the glpyh
+    // not its width.
+    if (supportedCodepoint(ch)) {
+      metrics = metricMap[font][77]; // 77 is the charcode for 'M'
+    }
+  }
+
+  if (metrics) {
+    return {
+      depth: metrics[0],
+      height: metrics[1],
+      italic: metrics[2],
+      skew: metrics[3],
+      width: metrics[4]
+    };
+  }
+}
+const fontMetricsBySizeIndex = {};
+/**
+ * Get the font metrics for a given size.
+ */
+
+function getGlobalMetrics(size) {
+  let sizeIndex;
+
+  if (size >= 5) {
+    sizeIndex = 0;
+  } else if (size >= 3) {
+    sizeIndex = 1;
+  } else {
+    sizeIndex = 2;
+  }
+
+  if (!fontMetricsBySizeIndex[sizeIndex]) {
+    const metrics = fontMetricsBySizeIndex[sizeIndex] = {
+      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
+    };
+
+    for (const key in sigmasAndXis) {
+      if (sigmasAndXis.hasOwnProperty(key)) {
+        metrics[key] = sigmasAndXis[key][sizeIndex];
+      }
+    }
+  }
+
+  return fontMetricsBySizeIndex[sizeIndex];
+}
+
+/**
+ * This file holds a list of all no-argument functions and single-character
+ * symbols (like 'a' or ';').
+ *
+ * For each of the symbols, there are three properties they can have:
+ * - font (required): the font to be used for this symbol. Either "main" (the
+     normal font), or "ams" (the ams fonts).
+ * - group (required): the ParseNode group type the symbol should have (i.e.
+     "textord", "mathord", etc).
+     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types
+ * - replace: the character that this symbol or function should be
+ *   replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
+ *   character in the main font).
+ *
+ * The outermost map in the table indicates what mode the symbols should be
+ * accepted in (e.g. "math" or "text").
+ */
+// Some of these have a "-token" suffix since these are also used as `ParseNode`
+// types for raw text tokens, and we want to avoid conflicts with higher-level
+// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by
+// looking up the `symbols` map.
+const ATOMS = {
+  "bin": 1,
+  "close": 1,
+  "inner": 1,
+  "open": 1,
+  "punct": 1,
+  "rel": 1
+};
+const NON_ATOMS = {
+  "accent-token": 1,
+  "mathord": 1,
+  "op-token": 1,
+  "spacing": 1,
+  "textord": 1
+};
+const symbols = {
+  "math": {},
+  "text": {}
+};
+/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */
+
+function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
+  symbols[mode][name] = {
+    font,
+    group,
+    replace
+  };
+
+  if (acceptUnicodeChar && replace) {
+    symbols[mode][replace] = symbols[mode][name];
+  }
+} // Some abbreviations for commonly used strings.
+// This helps minify the code, and also spotting typos using jshint.
+// modes:
+
+const math = "math";
+const text$1 = "text"; // fonts:
+
+const main = "main";
+const ams = "ams"; // groups:
+
+const accent = "accent-token";
+const bin = "bin";
+const close = "close";
+const inner = "inner";
+const mathord = "mathord";
+const op = "op-token";
+const open = "open";
+const punct = "punct";
+const rel = "rel";
+const spacing = "spacing";
+const textord = "textord"; // Now comes the symbol table
+// Relation Symbols
+
+defineSymbol(math, main, rel, "\u2261", "\\equiv", true);
+defineSymbol(math, main, rel, "\u227a", "\\prec", true);
+defineSymbol(math, main, rel, "\u227b", "\\succ", true);
+defineSymbol(math, main, rel, "\u223c", "\\sim", true);
+defineSymbol(math, main, rel, "\u22a5", "\\perp");
+defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true);
+defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true);
+defineSymbol(math, main, rel, "\u2243", "\\simeq", true);
+defineSymbol(math, main, rel, "\u2223", "\\mid", true);
+defineSymbol(math, main, rel, "\u226a", "\\ll", true);
+defineSymbol(math, main, rel, "\u226b", "\\gg", true);
+defineSymbol(math, main, rel, "\u224d", "\\asymp", true);
+defineSymbol(math, main, rel, "\u2225", "\\parallel");
+defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true);
+defineSymbol(math, main, rel, "\u2323", "\\smile", true);
+defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true);
+defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true);
+defineSymbol(math, main, rel, "\u2250", "\\doteq", true);
+defineSymbol(math, main, rel, "\u2322", "\\frown", true);
+defineSymbol(math, main, rel, "\u220b", "\\ni", true);
+defineSymbol(math, main, rel, "\u221d", "\\propto", true);
+defineSymbol(math, main, rel, "\u22a2", "\\vdash", true);
+defineSymbol(math, main, rel, "\u22a3", "\\dashv", true);
+defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation
+
+defineSymbol(math, main, punct, "\u002e", "\\ldotp");
+defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols
+
+defineSymbol(math, main, textord, "\u0023", "\\#");
+defineSymbol(text$1, main, textord, "\u0023", "\\#");
+defineSymbol(math, main, textord, "\u0026", "\\&");
+defineSymbol(text$1, main, textord, "\u0026", "\\&");
+defineSymbol(math, main, textord, "\u2135", "\\aleph", true);
+defineSymbol(math, main, textord, "\u2200", "\\forall", true);
+defineSymbol(math, main, textord, "\u210f", "\\hbar", true);
+defineSymbol(math, main, textord, "\u2203", "\\exists", true);
+defineSymbol(math, main, textord, "\u2207", "\\nabla", true);
+defineSymbol(math, main, textord, "\u266d", "\\flat", true);
+defineSymbol(math, main, textord, "\u2113", "\\ell", true);
+defineSymbol(math, main, textord, "\u266e", "\\natural", true);
+defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true);
+defineSymbol(math, main, textord, "\u2118", "\\wp", true);
+defineSymbol(math, main, textord, "\u266f", "\\sharp", true);
+defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true);
+defineSymbol(math, main, textord, "\u211c", "\\Re", true);
+defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true);
+defineSymbol(math, main, textord, "\u2111", "\\Im", true);
+defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true);
+defineSymbol(text$1, main, textord, "\u00a7", "\\S", true);
+defineSymbol(text$1, main, textord, "\u00b6", "\\P", true); // Math and Text
+
+defineSymbol(math, main, textord, "\u2020", "\\dag");
+defineSymbol(text$1, main, textord, "\u2020", "\\dag");
+defineSymbol(text$1, main, textord, "\u2020", "\\textdagger");
+defineSymbol(math, main, textord, "\u2021", "\\ddag");
+defineSymbol(text$1, main, textord, "\u2021", "\\ddag");
+defineSymbol(text$1, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters
+
+defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true);
+defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true);
+defineSymbol(math, main, close, "\u27ef", "\\rgroup", true);
+defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators
+
+defineSymbol(math, main, bin, "\u2213", "\\mp", true);
+defineSymbol(math, main, bin, "\u2296", "\\ominus", true);
+defineSymbol(math, main, bin, "\u228e", "\\uplus", true);
+defineSymbol(math, main, bin, "\u2293", "\\sqcap", true);
+defineSymbol(math, main, bin, "\u2217", "\\ast");
+defineSymbol(math, main, bin, "\u2294", "\\sqcup", true);
+defineSymbol(math, main, bin, "\u25ef", "\\bigcirc");
+defineSymbol(math, main, bin, "\u2219", "\\bullet");
+defineSymbol(math, main, bin, "\u2021", "\\ddagger");
+defineSymbol(math, main, bin, "\u2240", "\\wr", true);
+defineSymbol(math, main, bin, "\u2a3f", "\\amalg");
+defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath
+// Arrow Symbols
+
+defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true);
+defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true);
+defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true);
+defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true);
+defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true);
+defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true);
+defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true);
+defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true);
+defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true);
+defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true);
+defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true);
+defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true);
+defineSymbol(math, main, rel, "\u2197", "\\nearrow", true);
+defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true);
+defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true);
+defineSymbol(math, main, rel, "\u2198", "\\searrow", true);
+defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true);
+defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true);
+defineSymbol(math, main, rel, "\u2199", "\\swarrow", true);
+defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true);
+defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true);
+defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true);
+defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations
+
+defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
+
+defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant");
+defineSymbol(math, ams, rel, "\ue011", "\\@nleqq");
+defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true);
+defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true);
+defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq");
+defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true);
+defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true);
+defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true);
+defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true);
+defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true);
+defineSymbol(math, ams, rel, "\u2241", "\\nsim", true);
+defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid");
+defineSymbol(math, ams, rel, "\u2224", "\\nmid", true);
+defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true);
+defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true);
+defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft");
+defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true);
+defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true);
+defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq");
+defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true);
+defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq");
+defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true);
+defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant");
+defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq");
+defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true);
+defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true);
+defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq");
+defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true);
+defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true);
+defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true);
+defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true);
+defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u2246", "\\ncong", true);
+defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel");
+defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true);
+defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true);
+defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright");
+defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true);
+defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq");
+defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true);
+defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq");
+defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true);
+defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq");
+defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true);
+defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true);
+defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true);
+defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq");
+defineSymbol(math, ams, bin, "\u22b4", "\\unlhd");
+defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows
+
+defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true);
+defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true);
+defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true);
+defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true);
+defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true);
+defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc
+
+defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle");
+defineSymbol(math, ams, textord, "\u210f", "\\hslash");
+defineSymbol(math, ams, textord, "\u25bd", "\\triangledown");
+defineSymbol(math, ams, textord, "\u25ca", "\\lozenge");
+defineSymbol(math, ams, textord, "\u24c8", "\\circledS");
+defineSymbol(math, ams, textord, "\u00ae", "\\circledR");
+defineSymbol(text$1, ams, textord, "\u00ae", "\\circledR");
+defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true);
+defineSymbol(math, ams, textord, "\u2204", "\\nexists");
+defineSymbol(math, ams, textord, "\u2127", "\\mho");
+defineSymbol(math, ams, textord, "\u2132", "\\Finv", true);
+defineSymbol(math, ams, textord, "\u2141", "\\Game", true);
+defineSymbol(math, ams, textord, "\u2035", "\\backprime");
+defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle");
+defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown");
+defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare");
+defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge");
+defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
+defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true);
+defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth
+
+defineSymbol(math, ams, textord, "\u00f0", "\\eth", true);
+defineSymbol(math, ams, textord, "\u2571", "\\diagup");
+defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
+defineSymbol(math, ams, textord, "\u25a1", "\\square");
+defineSymbol(math, ams, textord, "\u25a1", "\\Box");
+defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen
+
+defineSymbol(math, ams, textord, "\u00a5", "\\yen", true);
+defineSymbol(text$1, ams, textord, "\u00a5", "\\yen", true);
+defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true);
+defineSymbol(text$1, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew
+
+defineSymbol(math, ams, textord, "\u2136", "\\beth", true);
+defineSymbol(math, ams, textord, "\u2138", "\\daleth", true);
+defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek
+
+defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true);
+defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters
+
+defineSymbol(math, ams, open, "\u250c", "\\ulcorner", true);
+defineSymbol(math, ams, close, "\u2510", "\\urcorner", true);
+defineSymbol(math, ams, open, "\u2514", "\\llcorner", true);
+defineSymbol(math, ams, close, "\u2518", "\\lrcorner", true); // AMS Binary Relations
+
+defineSymbol(math, ams, rel, "\u2266", "\\leqq", true);
+defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true);
+defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true);
+defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true);
+defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true);
+defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true);
+defineSymbol(math, ams, bin, "\u22d6", "\\lessdot");
+defineSymbol(math, ams, rel, "\u22d8", "\\lll", true);
+defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true);
+defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true);
+defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true);
+defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
+defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true);
+defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true);
+defineSymbol(math, ams, rel, "\u223d", "\\backsim", true);
+defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true);
+defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true);
+defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true);
+defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true);
+defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true);
+defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true);
+defineSymbol(math, ams, rel, "\u227e", "\\precsim", true);
+defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true);
+defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft");
+defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq");
+defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true);
+defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true);
+defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
+defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
+defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true);
+defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true);
+defineSymbol(math, ams, rel, "\u2267", "\\geqq", true);
+defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true);
+defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true);
+defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true);
+defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true);
+defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot");
+defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true);
+defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true);
+defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true);
+defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true);
+defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true);
+defineSymbol(math, ams, rel, "\u2257", "\\circeq", true);
+defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true);
+defineSymbol(math, ams, rel, "\u223c", "\\thicksim");
+defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
+defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true);
+defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true);
+defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true);
+defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true);
+defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true);
+defineSymbol(math, ams, rel, "\u227f", "\\succsim", true);
+defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true);
+defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright");
+defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq");
+defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true);
+defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
+defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
+defineSymbol(math, ams, rel, "\u226c", "\\between", true);
+defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true);
+defineSymbol(math, ams, rel, "\u221d", "\\varpropto");
+defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(math, ams, rel, "\u2234", "\\therefore", true);
+defineSymbol(math, ams, rel, "\u220d", "\\backepsilon");
+defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(math, ams, rel, "\u2235", "\\because", true);
+defineSymbol(math, ams, rel, "\u22d8", "\\llless");
+defineSymbol(math, ams, rel, "\u22d9", "\\gggtr");
+defineSymbol(math, ams, bin, "\u22b2", "\\lhd");
+defineSymbol(math, ams, bin, "\u22b3", "\\rhd");
+defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true);
+defineSymbol(math, main, rel, "\u22c8", "\\Join");
+defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators
+
+defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true);
+defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
+defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true);
+defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true);
+defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true);
+defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true);
+defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true);
+defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true);
+defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true);
+defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true);
+defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true);
+defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true);
+defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true);
+defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true);
+defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true);
+defineSymbol(math, ams, bin, "\u229b", "\\circledast", true);
+defineSymbol(math, ams, bin, "\u22c5", "\\centerdot");
+defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true);
+defineSymbol(math, ams, bin, "\u22d2", "\\doublecap");
+defineSymbol(math, ams, bin, "\u22d3", "\\doublecup");
+defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows
+// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
+// We'll map it to AMS function \dashrightarrow. It produces the same atom.
+
+defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true);
+defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true);
+defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true);
+defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true);
+defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true);
+defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true);
+defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true);
+defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true);
+defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true);
+defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true);
+defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true);
+defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true);
+defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true);
+defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true);
+defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true);
+defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true);
+defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true);
+defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true);
+defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true);
+defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true);
+defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true);
+defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true);
+defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true);
+defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true);
+defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true);
+defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true);
+defineSymbol(math, ams, rel, "\u21dd", "\\leadsto");
+defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true);
+defineSymbol(math, ams, rel, "\u21be", "\\restriction");
+defineSymbol(math, main, textord, "\u2018", "`");
+defineSymbol(math, main, textord, "$", "\\$");
+defineSymbol(text$1, main, textord, "$", "\\$");
+defineSymbol(text$1, main, textord, "$", "\\textdollar");
+defineSymbol(math, main, textord, "%", "\\%");
+defineSymbol(text$1, main, textord, "%", "\\%");
+defineSymbol(math, main, textord, "_", "\\_");
+defineSymbol(text$1, main, textord, "_", "\\_");
+defineSymbol(text$1, main, textord, "_", "\\textunderscore");
+defineSymbol(math, main, textord, "\u2220", "\\angle", true);
+defineSymbol(math, main, textord, "\u221e", "\\infty", true);
+defineSymbol(math, main, textord, "\u2032", "\\prime");
+defineSymbol(math, main, textord, "\u25b3", "\\triangle");
+defineSymbol(math, main, textord, "\u0393", "\\Gamma", true);
+defineSymbol(math, main, textord, "\u0394", "\\Delta", true);
+defineSymbol(math, main, textord, "\u0398", "\\Theta", true);
+defineSymbol(math, main, textord, "\u039b", "\\Lambda", true);
+defineSymbol(math, main, textord, "\u039e", "\\Xi", true);
+defineSymbol(math, main, textord, "\u03a0", "\\Pi", true);
+defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true);
+defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true);
+defineSymbol(math, main, textord, "\u03a6", "\\Phi", true);
+defineSymbol(math, main, textord, "\u03a8", "\\Psi", true);
+defineSymbol(math, main, textord, "\u03a9", "\\Omega", true);
+defineSymbol(math, main, textord, "A", "\u0391");
+defineSymbol(math, main, textord, "B", "\u0392");
+defineSymbol(math, main, textord, "E", "\u0395");
+defineSymbol(math, main, textord, "Z", "\u0396");
+defineSymbol(math, main, textord, "H", "\u0397");
+defineSymbol(math, main, textord, "I", "\u0399");
+defineSymbol(math, main, textord, "K", "\u039A");
+defineSymbol(math, main, textord, "M", "\u039C");
+defineSymbol(math, main, textord, "N", "\u039D");
+defineSymbol(math, main, textord, "O", "\u039F");
+defineSymbol(math, main, textord, "P", "\u03A1");
+defineSymbol(math, main, textord, "T", "\u03A4");
+defineSymbol(math, main, textord, "X", "\u03A7");
+defineSymbol(math, main, textord, "\u00ac", "\\neg", true);
+defineSymbol(math, main, textord, "\u00ac", "\\lnot");
+defineSymbol(math, main, textord, "\u22a4", "\\top");
+defineSymbol(math, main, textord, "\u22a5", "\\bot");
+defineSymbol(math, main, textord, "\u2205", "\\emptyset");
+defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
+defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true);
+defineSymbol(math, main, mathord, "\u03b2", "\\beta", true);
+defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true);
+defineSymbol(math, main, mathord, "\u03b4", "\\delta", true);
+defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true);
+defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true);
+defineSymbol(math, main, mathord, "\u03b7", "\\eta", true);
+defineSymbol(math, main, mathord, "\u03b8", "\\theta", true);
+defineSymbol(math, main, mathord, "\u03b9", "\\iota", true);
+defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true);
+defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true);
+defineSymbol(math, main, mathord, "\u03bc", "\\mu", true);
+defineSymbol(math, main, mathord, "\u03bd", "\\nu", true);
+defineSymbol(math, main, mathord, "\u03be", "\\xi", true);
+defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true);
+defineSymbol(math, main, mathord, "\u03c0", "\\pi", true);
+defineSymbol(math, main, mathord, "\u03c1", "\\rho", true);
+defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true);
+defineSymbol(math, main, mathord, "\u03c4", "\\tau", true);
+defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true);
+defineSymbol(math, main, mathord, "\u03d5", "\\phi", true);
+defineSymbol(math, main, mathord, "\u03c7", "\\chi", true);
+defineSymbol(math, main, mathord, "\u03c8", "\\psi", true);
+defineSymbol(math, main, mathord, "\u03c9", "\\omega", true);
+defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true);
+defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true);
+defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true);
+defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true);
+defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true);
+defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true);
+defineSymbol(math, main, bin, "\u2217", "*");
+defineSymbol(math, main, bin, "+", "+");
+defineSymbol(math, main, bin, "\u2212", "-");
+defineSymbol(math, main, bin, "\u22c5", "\\cdot", true);
+defineSymbol(math, main, bin, "\u2218", "\\circ");
+defineSymbol(math, main, bin, "\u00f7", "\\div", true);
+defineSymbol(math, main, bin, "\u00b1", "\\pm", true);
+defineSymbol(math, main, bin, "\u00d7", "\\times", true);
+defineSymbol(math, main, bin, "\u2229", "\\cap", true);
+defineSymbol(math, main, bin, "\u222a", "\\cup", true);
+defineSymbol(math, main, bin, "\u2216", "\\setminus");
+defineSymbol(math, main, bin, "\u2227", "\\land");
+defineSymbol(math, main, bin, "\u2228", "\\lor");
+defineSymbol(math, main, bin, "\u2227", "\\wedge", true);
+defineSymbol(math, main, bin, "\u2228", "\\vee", true);
+defineSymbol(math, main, textord, "\u221a", "\\surd");
+defineSymbol(math, main, open, "(", "(");
+defineSymbol(math, main, open, "[", "[");
+defineSymbol(math, main, open, "\u27e8", "\\langle", true);
+defineSymbol(math, main, open, "\u2223", "\\lvert");
+defineSymbol(math, main, open, "\u2225", "\\lVert");
+defineSymbol(math, main, close, ")", ")");
+defineSymbol(math, main, close, "]", "]");
+defineSymbol(math, main, close, "?", "?");
+defineSymbol(math, main, close, "!", "!");
+defineSymbol(math, main, close, "\u27e9", "\\rangle", true);
+defineSymbol(math, main, close, "\u2223", "\\rvert");
+defineSymbol(math, main, close, "\u2225", "\\rVert");
+defineSymbol(math, main, rel, "=", "=");
+defineSymbol(math, main, rel, "<", "<");
+defineSymbol(math, main, rel, ">", ">");
+defineSymbol(math, main, rel, ":", ":");
+defineSymbol(math, main, rel, "\u2248", "\\approx", true);
+defineSymbol(math, main, rel, "\u2245", "\\cong", true);
+defineSymbol(math, main, rel, "\u2265", "\\ge");
+defineSymbol(math, main, rel, "\u2265", "\\geq", true);
+defineSymbol(math, main, rel, "\u2190", "\\gets");
+defineSymbol(math, main, rel, ">", "\\gt");
+defineSymbol(math, main, rel, "\u2208", "\\in", true);
+defineSymbol(math, main, rel, "\ue020", "\\@not");
+defineSymbol(math, main, rel, "\u2282", "\\subset", true);
+defineSymbol(math, main, rel, "\u2283", "\\supset", true);
+defineSymbol(math, main, rel, "\u2286", "\\subseteq", true);
+defineSymbol(math, main, rel, "\u2287", "\\supseteq", true);
+defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true);
+defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true);
+defineSymbol(math, main, rel, "\u22a8", "\\models");
+defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true);
+defineSymbol(math, main, rel, "\u2264", "\\le");
+defineSymbol(math, main, rel, "\u2264", "\\leq", true);
+defineSymbol(math, main, rel, "<", "\\lt");
+defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true);
+defineSymbol(math, main, rel, "\u2192", "\\to");
+defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true);
+defineSymbol(math, ams, rel, "\u2270", "\\nleq", true);
+defineSymbol(math, main, spacing, "\u00a0", "\\ ");
+defineSymbol(math, main, spacing, "\u00a0", "~");
+defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
+
+defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace");
+defineSymbol(text$1, main, spacing, "\u00a0", "\\ ");
+defineSymbol(text$1, main, spacing, "\u00a0", "~");
+defineSymbol(text$1, main, spacing, "\u00a0", "\\space");
+defineSymbol(text$1, main, spacing, "\u00a0", "\\nobreakspace");
+defineSymbol(math, main, spacing, null, "\\nobreak");
+defineSymbol(math, main, spacing, null, "\\allowbreak");
+defineSymbol(math, main, punct, ",", ",");
+defineSymbol(math, main, punct, ";", ";");
+defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true);
+defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true);
+defineSymbol(math, main, bin, "\u2299", "\\odot", true);
+defineSymbol(math, main, bin, "\u2295", "\\oplus", true);
+defineSymbol(math, main, bin, "\u2297", "\\otimes", true);
+defineSymbol(math, main, textord, "\u2202", "\\partial", true);
+defineSymbol(math, main, bin, "\u2298", "\\oslash", true);
+defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true);
+defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true);
+defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup");
+defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown");
+defineSymbol(math, main, bin, "\u2020", "\\dagger");
+defineSymbol(math, main, bin, "\u22c4", "\\diamond");
+defineSymbol(math, main, bin, "\u22c6", "\\star");
+defineSymbol(math, main, bin, "\u25c3", "\\triangleleft");
+defineSymbol(math, main, bin, "\u25b9", "\\triangleright");
+defineSymbol(math, main, open, "{", "\\{");
+defineSymbol(text$1, main, textord, "{", "\\{");
+defineSymbol(text$1, main, textord, "{", "\\textbraceleft");
+defineSymbol(math, main, close, "}", "\\}");
+defineSymbol(text$1, main, textord, "}", "\\}");
+defineSymbol(text$1, main, textord, "}", "\\textbraceright");
+defineSymbol(math, main, open, "{", "\\lbrace");
+defineSymbol(math, main, close, "}", "\\rbrace");
+defineSymbol(math, main, open, "[", "\\lbrack");
+defineSymbol(text$1, main, textord, "[", "\\lbrack");
+defineSymbol(math, main, close, "]", "\\rbrack");
+defineSymbol(text$1, main, textord, "]", "\\rbrack");
+defineSymbol(math, main, open, "(", "\\lparen");
+defineSymbol(math, main, close, ")", "\\rparen");
+defineSymbol(text$1, main, textord, "<", "\\textless"); // in T1 fontenc
+
+defineSymbol(text$1, main, textord, ">", "\\textgreater"); // in T1 fontenc
+
+defineSymbol(math, main, open, "\u230a", "\\lfloor", true);
+defineSymbol(math, main, close, "\u230b", "\\rfloor", true);
+defineSymbol(math, main, open, "\u2308", "\\lceil", true);
+defineSymbol(math, main, close, "\u2309", "\\rceil", true);
+defineSymbol(math, main, textord, "\\", "\\backslash");
+defineSymbol(math, main, textord, "\u2223", "|");
+defineSymbol(math, main, textord, "\u2223", "\\vert");
+defineSymbol(text$1, main, textord, "|", "\\textbar"); // in T1 fontenc
+
+defineSymbol(math, main, textord, "\u2225", "\\|");
+defineSymbol(math, main, textord, "\u2225", "\\Vert");
+defineSymbol(text$1, main, textord, "\u2225", "\\textbardbl");
+defineSymbol(text$1, main, textord, "~", "\\textasciitilde");
+defineSymbol(text$1, main, textord, "\\", "\\textbackslash");
+defineSymbol(text$1, main, textord, "^", "\\textasciicircum");
+defineSymbol(math, main, rel, "\u2191", "\\uparrow", true);
+defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true);
+defineSymbol(math, main, rel, "\u2193", "\\downarrow", true);
+defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true);
+defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true);
+defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true);
+defineSymbol(math, main, op, "\u2210", "\\coprod");
+defineSymbol(math, main, op, "\u22c1", "\\bigvee");
+defineSymbol(math, main, op, "\u22c0", "\\bigwedge");
+defineSymbol(math, main, op, "\u2a04", "\\biguplus");
+defineSymbol(math, main, op, "\u22c2", "\\bigcap");
+defineSymbol(math, main, op, "\u22c3", "\\bigcup");
+defineSymbol(math, main, op, "\u222b", "\\int");
+defineSymbol(math, main, op, "\u222b", "\\intop");
+defineSymbol(math, main, op, "\u222c", "\\iint");
+defineSymbol(math, main, op, "\u222d", "\\iiint");
+defineSymbol(math, main, op, "\u220f", "\\prod");
+defineSymbol(math, main, op, "\u2211", "\\sum");
+defineSymbol(math, main, op, "\u2a02", "\\bigotimes");
+defineSymbol(math, main, op, "\u2a01", "\\bigoplus");
+defineSymbol(math, main, op, "\u2a00", "\\bigodot");
+defineSymbol(math, main, op, "\u222e", "\\oint");
+defineSymbol(math, main, op, "\u222f", "\\oiint");
+defineSymbol(math, main, op, "\u2230", "\\oiiint");
+defineSymbol(math, main, op, "\u2a06", "\\bigsqcup");
+defineSymbol(math, main, op, "\u222b", "\\smallint");
+defineSymbol(text$1, main, inner, "\u2026", "\\textellipsis");
+defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
+defineSymbol(text$1, main, inner, "\u2026", "\\ldots", true);
+defineSymbol(math, main, inner, "\u2026", "\\ldots", true);
+defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true);
+defineSymbol(math, main, inner, "\u22f1", "\\ddots", true);
+defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro
+
+defineSymbol(math, main, accent, "\u02ca", "\\acute");
+defineSymbol(math, main, accent, "\u02cb", "\\grave");
+defineSymbol(math, main, accent, "\u00a8", "\\ddot");
+defineSymbol(math, main, accent, "\u007e", "\\tilde");
+defineSymbol(math, main, accent, "\u02c9", "\\bar");
+defineSymbol(math, main, accent, "\u02d8", "\\breve");
+defineSymbol(math, main, accent, "\u02c7", "\\check");
+defineSymbol(math, main, accent, "\u005e", "\\hat");
+defineSymbol(math, main, accent, "\u20d7", "\\vec");
+defineSymbol(math, main, accent, "\u02d9", "\\dot");
+defineSymbol(math, main, accent, "\u02da", "\\mathring");
+defineSymbol(math, main, mathord, "\u0131", "\\imath", true);
+defineSymbol(math, main, mathord, "\u0237", "\\jmath", true);
+defineSymbol(text$1, main, textord, "\u0131", "\\i", true);
+defineSymbol(text$1, main, textord, "\u0237", "\\j", true);
+defineSymbol(text$1, main, textord, "\u00df", "\\ss", true);
+defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true);
+defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true);
+defineSymbol(text$1, main, textord, "\u0153", "\\oe", true);
+defineSymbol(text$1, main, textord, "\u00f8", "\\o", true);
+defineSymbol(text$1, main, textord, "\u00c6", "\\AE", true);
+defineSymbol(text$1, main, textord, "\u0152", "\\OE", true);
+defineSymbol(text$1, main, textord, "\u00d8", "\\O", true);
+defineSymbol(text$1, main, accent, "\u02ca", "\\'"); // acute
+
+defineSymbol(text$1, main, accent, "\u02cb", "\\`"); // grave
+
+defineSymbol(text$1, main, accent, "\u02c6", "\\^"); // circumflex
+
+defineSymbol(text$1, main, accent, "\u02dc", "\\~"); // tilde
+
+defineSymbol(text$1, main, accent, "\u02c9", "\\="); // macron
+
+defineSymbol(text$1, main, accent, "\u02d8", "\\u"); // breve
+
+defineSymbol(text$1, main, accent, "\u02d9", "\\."); // dot above
+
+defineSymbol(text$1, main, accent, "\u02da", "\\r"); // ring above
+
+defineSymbol(text$1, main, accent, "\u02c7", "\\v"); // caron
+
+defineSymbol(text$1, main, accent, "\u00a8", '\\"'); // diaresis
+
+defineSymbol(text$1, main, accent, "\u02dd", "\\H"); // double acute
+
+defineSymbol(text$1, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph
+// These ligatures are detected and created in Parser.js's `formLigatures`.
+
+const ligatures = {
+  "--": true,
+  "---": true,
+  "``": true,
+  "''": true
+};
+defineSymbol(text$1, main, textord, "\u2013", "--");
+defineSymbol(text$1, main, textord, "\u2013", "\\textendash");
+defineSymbol(text$1, main, textord, "\u2014", "---");
+defineSymbol(text$1, main, textord, "\u2014", "\\textemdash");
+defineSymbol(text$1, main, textord, "\u2018", "`");
+defineSymbol(text$1, main, textord, "\u2018", "\\textquoteleft");
+defineSymbol(text$1, main, textord, "\u2019", "'");
+defineSymbol(text$1, main, textord, "\u2019", "\\textquoteright");
+defineSymbol(text$1, main, textord, "\u201c", "``");
+defineSymbol(text$1, main, textord, "\u201c", "\\textquotedblleft");
+defineSymbol(text$1, main, textord, "\u201d", "''");
+defineSymbol(text$1, main, textord, "\u201d", "\\textquotedblright"); //  \degree from gensymb package
+
+defineSymbol(math, main, textord, "\u00b0", "\\degree", true);
+defineSymbol(text$1, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package
+
+defineSymbol(text$1, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math
+// mode, but among our fonts, only Main-Italic defines this character "163".
+
+defineSymbol(math, main, mathord, "\u00a3", "\\pounds");
+defineSymbol(math, main, mathord, "\u00a3", "\\mathsterling", true);
+defineSymbol(text$1, main, mathord, "\u00a3", "\\pounds");
+defineSymbol(text$1, main, mathord, "\u00a3", "\\textsterling", true);
+defineSymbol(math, ams, textord, "\u2720", "\\maltese");
+defineSymbol(text$1, ams, textord, "\u2720", "\\maltese");
+defineSymbol(text$1, main, spacing, "\u00a0", "\\ ");
+defineSymbol(text$1, main, spacing, "\u00a0", " ");
+defineSymbol(text$1, main, spacing, "\u00a0", "~"); // There are lots of symbols which are the same, so we add them in afterwards.
+// All of these are textords in math mode
+
+const mathTextSymbols = "0123456789/@.\"";
+
+for (let i = 0; i < mathTextSymbols.length; i++) {
+  const ch = mathTextSymbols.charAt(i);
+  defineSymbol(math, main, textord, ch, ch);
+} // All of these are textords in text mode
+
+
+const textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,";
+
+for (let i = 0; i < textSymbols.length; i++) {
+  const ch = textSymbols.charAt(i);
+  defineSymbol(text$1, main, textord, ch, ch);
+} // All of these are textords in text mode, and mathords in math mode
+
+
+const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+for (let i = 0; i < letters.length; i++) {
+  const ch = letters.charAt(i);
+  defineSymbol(math, main, mathord, ch, ch);
+  defineSymbol(text$1, main, textord, ch, ch);
+} // Blackboard bold and script letters in Unicode range
+
+
+defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold
+
+defineSymbol(text$1, ams, textord, "C", "\u2102");
+defineSymbol(math, ams, textord, "H", "\u210D");
+defineSymbol(text$1, ams, textord, "H", "\u210D");
+defineSymbol(math, ams, textord, "N", "\u2115");
+defineSymbol(text$1, ams, textord, "N", "\u2115");
+defineSymbol(math, ams, textord, "P", "\u2119");
+defineSymbol(text$1, ams, textord, "P", "\u2119");
+defineSymbol(math, ams, textord, "Q", "\u211A");
+defineSymbol(text$1, ams, textord, "Q", "\u211A");
+defineSymbol(math, ams, textord, "R", "\u211D");
+defineSymbol(text$1, ams, textord, "R", "\u211D");
+defineSymbol(math, ams, textord, "Z", "\u2124");
+defineSymbol(text$1, ams, textord, "Z", "\u2124");
+defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant
+
+defineSymbol(text$1, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters.
+// We support some letters in the Unicode range U+1D400 to U+1D7FF,
+// Mathematical Alphanumeric Symbols.
+// Some editors do not deal well with wide characters. So don't write the
+// string into this file. Instead, create the string from the surrogate pair.
+
+let wideChar = "";
+
+for (let i = 0; i < letters.length; i++) {
+  const ch = letters.charAt(i); // The hex numbers in the next line are a surrogate pair.
+  // 0xD835 is the high surrogate for all letters in the range we support.
+  // 0xDC00 is the low surrogate for bold A.
+
+  wideChar = String.fromCharCode(0xD835, 0xDC00 + i); // A-Z a-z bold
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDC34 + i); // A-Z a-z italic
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDC68 + i); // A-Z a-z bold italic
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDD04 + i); // A-Z a-z Fractur
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDDA0 + i); // A-Z a-z sans-serif
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDDD4 + i); // A-Z a-z sans bold
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDE08 + i); // A-Z a-z sans italic
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDE70 + i); // A-Z a-z monospace
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+
+  if (i < 26) {
+    // KaTeX fonts have only capital letters for blackboard bold and script.
+    // See exception for k below.
+    wideChar = String.fromCharCode(0xD835, 0xDD38 + i); // A-Z double struck
+
+    defineSymbol(math, main, mathord, ch, wideChar);
+    defineSymbol(text$1, main, textord, ch, wideChar);
+    wideChar = String.fromCharCode(0xD835, 0xDC9C + i); // A-Z script
+
+    defineSymbol(math, main, mathord, ch, wideChar);
+    defineSymbol(text$1, main, textord, ch, wideChar);
+  } // TODO: Add bold script when it is supported by a KaTeX font.
+
+} // "k" is the only double struck lower case letter in the KaTeX fonts.
+
+
+wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
+
+defineSymbol(math, main, mathord, "k", wideChar);
+defineSymbol(text$1, main, textord, "k", wideChar); // Next, some wide character numerals
+
+for (let i = 0; i < 10; i++) {
+  const ch = i.toString();
+  wideChar = String.fromCharCode(0xD835, 0xDFCE + i); // 0-9 bold
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDFE2 + i); // 0-9 sans serif
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDFEC + i); // 0-9 bold sans
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+  wideChar = String.fromCharCode(0xD835, 0xDFF6 + i); // 0-9 monospace
+
+  defineSymbol(math, main, mathord, ch, wideChar);
+  defineSymbol(text$1, main, textord, ch, wideChar);
+} // We add these Latin-1 letters as symbols for backwards-compatibility,
+// but they are not actually in the font, nor are they supported by the
+// Unicode accent mechanism, so they fall back to Times font and look ugly.
+// TODO(edemaine): Fix this.
+
+
+const extraLatin = "ÇÐÞçþ";
+
+for (let i = 0; i < extraLatin.length; i++) {
+  const ch = extraLatin.charAt(i);
+  defineSymbol(math, main, mathord, ch, ch);
+  defineSymbol(text$1, main, textord, ch, ch);
+}
+
+defineSymbol(text$1, main, textord, "ð", "ð"); // Unicode versions of existing characters
+
+defineSymbol(text$1, main, textord, "\u2013", "–");
+defineSymbol(text$1, main, textord, "\u2014", "—");
+defineSymbol(text$1, main, textord, "\u2018", "‘");
+defineSymbol(text$1, main, textord, "\u2019", "’");
+defineSymbol(text$1, main, textord, "\u201c", "“");
+defineSymbol(text$1, main, textord, "\u201d", "”");
+
+/**
+ * This file provides support for Unicode range U+1D400 to U+1D7FF,
+ * Mathematical Alphanumeric Symbols.
+ *
+ * Function wideCharacterFont takes a wide character as input and returns
+ * the font information necessary to render it properly.
+ */
+/**
+ * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf
+ * That document sorts characters into groups by font type, say bold or italic.
+ *
+ * In the arrays below, each subarray consists three elements:
+ *      * The CSS class of that group when in math mode.
+ *      * The CSS class of that group when in text mode.
+ *      * The font name, so that KaTeX can get font metrics.
+ */
+
+const wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright
+["mathbf", "textbf", "Main-Bold"], // a-z bold upright
+["mathdefault", "textit", "Math-Italic"], // A-Z italic
+["mathdefault", "textit", "Math-Italic"], // a-z italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic
+// Map fancy A-Z letters to script, not calligraphic.
+// This aligns with unicode-math and math fonts (except Cambria Math).
+["mathscr", "textscr", "Script-Regular"], // A-Z script
+["", "", ""], // a-z script.  No font
+["", "", ""], // A-Z bold script. No font
+["", "", ""], // a-z bold script. No font
+["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur
+["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur
+["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck
+["mathbb", "textbb", "AMS-Regular"], // k double-struck
+["", "", ""], // A-Z bold Fraktur No font metrics
+["", "", ""], // a-z bold Fraktur.   No font.
+["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif
+["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif
+["", "", ""], // A-Z bold italic sans. No font
+["", "", ""], // a-z bold italic sans. No font
+["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace
+["mathtt", "texttt", "Typewriter-Regular"]];
+const wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold
+["", "", ""], // 0-9 double-struck. No KaTeX font.
+["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif
+["mathtt", "texttt", "Typewriter-Regular"]];
+const wideCharacterFont = function wideCharacterFont(wideChar, mode) {
+  // IE doesn't support codePointAt(). So work with the surrogate pair.
+  const H = wideChar.charCodeAt(0); // high surrogate
+
+  const L = wideChar.charCodeAt(1); // low surrogate
+
+  const codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
+  const j = mode === "math" ? 0 : 1; // column index for CSS class.
+
+  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {
+    // wideLatinLetterData contains exactly 26 chars on each row.
+    // So we can calculate the relevant row. No traverse necessary.
+    const i = Math.floor((codePoint - 0x1D400) / 26);
+    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];
+  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {
+    // Numerals, ten per row.
+    const i = Math.floor((codePoint - 0x1D7CE) / 10);
+    return [wideNumeralData[i][2], wideNumeralData[i][j]];
+  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {
+    // dotless i or j
+    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];
+  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {
+    // Greek letters. Not supported, yet.
+    return ["", ""];
+  } else {
+    // We don't support any wide characters outside 1D400–1D7FF.
+    throw new ParseError("Unsupported character: " + wideChar);
+  }
+};
+
+/**
+ * This file contains information about the options that the Parser carries
+ * around with it while parsing. Data is held in an `Options` object, and when
+ * recursing, a new `Options` object can be created with the `.with*` and
+ * `.reset` functions.
+ */
+const sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].
+// The size mappings are taken from TeX with \normalsize=10pt.
+[1, 1, 1], // size1: [5, 5, 5]              \tiny
+[2, 1, 1], // size2: [6, 5, 5]
+[3, 1, 1], // size3: [7, 5, 5]              \scriptsize
+[4, 2, 1], // size4: [8, 6, 5]              \footnotesize
+[5, 2, 1], // size5: [9, 6, 5]              \small
+[6, 3, 1], // size6: [10, 7, 5]             \normalsize
+[7, 4, 2], // size7: [12, 8, 6]             \large
+[8, 6, 3], // size8: [14.4, 10, 7]          \Large
+[9, 7, 6], // size9: [17.28, 12, 10]        \LARGE
+[10, 8, 7], // size10: [20.74, 14.4, 12]     \huge
+[11, 10, 9]];
+const sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if
+// you change size indexes, change that function.
+0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];
+
+const sizeAtStyle = function sizeAtStyle(size, style) {
+  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
+}; // In these types, "" (empty string) means "no change".
+
+
+/**
+ * This is the main options class. It contains the current style, size, color,
+ * and font.
+ *
+ * Options objects should not be modified. To create a new Options with
+ * different properties, call a `.having*` method.
+ */
+class Options {
+  // A font family applies to a group of fonts (i.e. SansSerif), while a font
+  // represents a specific font (i.e. SansSerif Bold).
+  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
+
+  /**
+   * The base size index.
+   */
+  constructor(data) {
+    this.style = void 0;
+    this.color = void 0;
+    this.size = void 0;
+    this.textSize = void 0;
+    this.phantom = void 0;
+    this.font = void 0;
+    this.fontFamily = void 0;
+    this.fontWeight = void 0;
+    this.fontShape = void 0;
+    this.sizeMultiplier = void 0;
+    this.maxSize = void 0;
+    this.minRuleThickness = void 0;
+    this._fontMetrics = void 0;
+    this.style = data.style;
+    this.color = data.color;
+    this.size = data.size || Options.BASESIZE;
+    this.textSize = data.textSize || this.size;
+    this.phantom = !!data.phantom;
+    this.font = data.font || "";
+    this.fontFamily = data.fontFamily || "";
+    this.fontWeight = data.fontWeight || '';
+    this.fontShape = data.fontShape || '';
+    this.sizeMultiplier = sizeMultipliers[this.size - 1];
+    this.maxSize = data.maxSize;
+    this.minRuleThickness = data.minRuleThickness;
+    this._fontMetrics = undefined;
+  }
+  /**
+   * Returns a new options object with the same properties as "this".  Properties
+   * from "extension" will be copied to the new options object.
+   */
+
+
+  extend(extension) {
+    const data = {
+      style: this.style,
+      size: this.size,
+      textSize: this.textSize,
+      color: this.color,
+      phantom: this.phantom,
+      font: this.font,
+      fontFamily: this.fontFamily,
+      fontWeight: this.fontWeight,
+      fontShape: this.fontShape,
+      maxSize: this.maxSize,
+      minRuleThickness: this.minRuleThickness
+    };
+
+    for (const key in extension) {
+      if (extension.hasOwnProperty(key)) {
+        data[key] = extension[key];
+      }
+    }
+
+    return new Options(data);
+  }
+  /**
+   * Return an options object with the given style. If `this.style === style`,
+   * returns `this`.
+   */
+
+
+  havingStyle(style) {
+    if (this.style === style) {
+      return this;
+    } else {
+      return this.extend({
+        style: style,
+        size: sizeAtStyle(this.textSize, style)
+      });
+    }
+  }
+  /**
+   * Return an options object with a cramped version of the current style. If
+   * the current style is cramped, returns `this`.
+   */
+
+
+  havingCrampedStyle() {
+    return this.havingStyle(this.style.cramp());
+  }
+  /**
+   * Return an options object with the given size and in at least `\textstyle`.
+   * Returns `this` if appropriate.
+   */
+
+
+  havingSize(size) {
+    if (this.size === size && this.textSize === size) {
+      return this;
+    } else {
+      return this.extend({
+        style: this.style.text(),
+        size: size,
+        textSize: size,
+        sizeMultiplier: sizeMultipliers[size - 1]
+      });
+    }
+  }
+  /**
+   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
+   * changes to at least `\textstyle`.
+   */
+
+
+  havingBaseStyle(style) {
+    style = style || this.style.text();
+    const wantSize = sizeAtStyle(Options.BASESIZE, style);
+
+    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {
+      return this;
+    } else {
+      return this.extend({
+        style: style,
+        size: wantSize
+      });
+    }
+  }
+  /**
+   * Remove the effect of sizing changes such as \Huge.
+   * Keep the effect of the current style, such as \scriptstyle.
+   */
+
+
+  havingBaseSizing() {
+    let size;
+
+    switch (this.style.id) {
+      case 4:
+      case 5:
+        size = 3; // normalsize in scriptstyle
+
+        break;
+
+      case 6:
+      case 7:
+        size = 1; // normalsize in scriptscriptstyle
+
+        break;
+
+      default:
+        size = 6;
+      // normalsize in textstyle or displaystyle
+    }
+
+    return this.extend({
+      style: this.style.text(),
+      size: size
+    });
+  }
+  /**
+   * Create a new options object with the given color.
+   */
+
+
+  withColor(color) {
+    return this.extend({
+      color: color
+    });
+  }
+  /**
+   * Create a new options object with "phantom" set to true.
+   */
+
+
+  withPhantom() {
+    return this.extend({
+      phantom: true
+    });
+  }
+  /**
+   * Creates a new options object with the given math font or old text font.
+   * @type {[type]}
+   */
+
+
+  withFont(font) {
+    return this.extend({
+      font
+    });
+  }
+  /**
+   * Create a new options objects with the given fontFamily.
+   */
+
+
+  withTextFontFamily(fontFamily) {
+    return this.extend({
+      fontFamily,
+      font: ""
+    });
+  }
+  /**
+   * Creates a new options object with the given font weight
+   */
+
+
+  withTextFontWeight(fontWeight) {
+    return this.extend({
+      fontWeight,
+      font: ""
+    });
+  }
+  /**
+   * Creates a new options object with the given font weight
+   */
+
+
+  withTextFontShape(fontShape) {
+    return this.extend({
+      fontShape,
+      font: ""
+    });
+  }
+  /**
+   * Return the CSS sizing classes required to switch from enclosing options
+   * `oldOptions` to `this`. Returns an array of classes.
+   */
+
+
+  sizingClasses(oldOptions) {
+    if (oldOptions.size !== this.size) {
+      return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
+    } else {
+      return [];
+    }
+  }
+  /**
+   * Return the CSS sizing classes required to switch to the base size. Like
+   * `this.havingSize(BASESIZE).sizingClasses(this)`.
+   */
+
+
+  baseSizingClasses() {
+    if (this.size !== Options.BASESIZE) {
+      return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];
+    } else {
+      return [];
+    }
+  }
+  /**
+   * Return the font metrics for this size.
+   */
+
+
+  fontMetrics() {
+    if (!this._fontMetrics) {
+      this._fontMetrics = getGlobalMetrics(this.size);
+    }
+
+    return this._fontMetrics;
+  }
+  /**
+   * Gets the CSS color of the current options object
+   */
+
+
+  getColor() {
+    if (this.phantom) {
+      return "transparent";
+    } else {
+      return this.color;
+    }
+  }
+
+}
+
+Options.BASESIZE = 6;
+
+/**
+ * This file does conversion between units.  In particular, it provides
+ * calculateSize to convert other units into ems.
+ */
+// Thus, multiplying a length by this number converts the length from units
+// into pts.  Dividing the result by ptPerEm gives the number of ems
+// *assuming* a font size of ptPerEm (normal size, normal style).
+
+const ptPerUnit = {
+  // https://en.wikibooks.org/wiki/LaTeX/Lengths and
+  // https://tex.stackexchange.com/a/8263
+  "pt": 1,
+  // TeX point
+  "mm": 7227 / 2540,
+  // millimeter
+  "cm": 7227 / 254,
+  // centimeter
+  "in": 72.27,
+  // inch
+  "bp": 803 / 800,
+  // big (PostScript) points
+  "pc": 12,
+  // pica
+  "dd": 1238 / 1157,
+  // didot
+  "cc": 14856 / 1157,
+  // cicero (12 didot)
+  "nd": 685 / 642,
+  // new didot
+  "nc": 1370 / 107,
+  // new cicero (12 new didot)
+  "sp": 1 / 65536,
+  // scaled point (TeX's internal smallest unit)
+  // https://tex.stackexchange.com/a/41371
+  "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
+
+}; // Dictionary of relative units, for fast validity testing.
+
+const relativeUnit = {
+  "ex": true,
+  "em": true,
+  "mu": true
+};
+
+/**
+ * Determine whether the specified unit (either a string defining the unit
+ * or a "size" parse node containing a unit field) is valid.
+ */
+const validUnit = function validUnit(unit) {
+  if (typeof unit !== "string") {
+    unit = unit.unit;
+  }
+
+  return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
+};
+/*
+ * Convert a "size" parse node (with numeric "number" and string "unit" fields,
+ * as parsed by functions.js argType "size") into a CSS em value for the
+ * current style/scale.  `options` gives the current options.
+ */
+
+const calculateSize = function calculateSize(sizeValue, options) {
+  let scale;
+
+  if (sizeValue.unit in ptPerUnit) {
+    // Absolute units
+    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt
+    / options.fontMetrics().ptPerEm // Convert pt to CSS em
+    / options.sizeMultiplier; // Unscale to make absolute units
+  } else if (sizeValue.unit === "mu") {
+    // `mu` units scale with scriptstyle/scriptscriptstyle.
+    scale = options.fontMetrics().cssEmPerMu;
+  } else {
+    // Other relative units always refer to the *textstyle* font
+    // in the current size.
+    let unitOptions;
+
+    if (options.style.isTight()) {
+      // isTight() means current style is script/scriptscript.
+      unitOptions = options.havingStyle(options.style.text());
+    } else {
+      unitOptions = options;
+    } // TODO: In TeX these units are relative to the quad of the current
+    // *text* font, e.g. cmr10. KaTeX instead uses values from the
+    // comparably-sized *Computer Modern symbol* font. At 10pt, these
+    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
+    // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
+    // TeX \showlists shows a kern of 1.13889 * fontsize;
+    // KaTeX shows a kern of 1.171 * fontsize.
+
+
+    if (sizeValue.unit === "ex") {
+      scale = unitOptions.fontMetrics().xHeight;
+    } else if (sizeValue.unit === "em") {
+      scale = unitOptions.fontMetrics().quad;
+    } else {
+      throw new ParseError("Invalid unit: '" + sizeValue.unit + "'");
+    }
+
+    if (unitOptions !== options) {
+      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
+    }
+  }
+
+  return Math.min(sizeValue.number * scale, options.maxSize);
+};
+
+/* eslint no-console:0 */
+// The following have to be loaded from Main-Italic font, using class mathit
+const mathitLetters = ["\\imath", "ı", // dotless i
+"\\jmath", "ȷ", // dotless j
+"\\pounds", "\\mathsterling", "\\textsterling", "£"];
+/**
+ * Looks up the given symbol in fontMetrics, after applying any symbol
+ * replacements defined in symbol.js
+ */
+
+const lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.
+fontName, mode) {
+  // Replace the value with its replaced value from symbol.js
+  if (symbols[mode][value] && symbols[mode][value].replace) {
+    value = symbols[mode][value].replace;
+  }
+
+  return {
+    value: value,
+    metrics: getCharacterMetrics(value, fontName, mode)
+  };
+};
+/**
+ * Makes a symbolNode after translation via the list of symbols in symbols.js.
+ * Correctly pulls out metrics for the character, and optionally takes a list of
+ * classes to be attached to the node.
+ *
+ * TODO: make argument order closer to makeSpan
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ * TODO(#953): Make `options` mandatory and always pass it in.
+ */
+
+
+const makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {
+  const lookup = lookupSymbol(value, fontName, mode);
+  const metrics = lookup.metrics;
+  value = lookup.value;
+  let symbolNode;
+
+  if (metrics) {
+    let italic = metrics.italic;
+
+    if (mode === "text" || options && options.font === "mathit") {
+      italic = 0;
+    }
+
+    symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
+  } else {
+    // TODO(emily): Figure out a good way to only print this in development
+    typeof console !== "undefined" && console.warn("No character metrics " + `for '${value}' in style '${fontName}' and mode '${mode}'`);
+    symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);
+  }
+
+  if (options) {
+    symbolNode.maxFontSize = options.sizeMultiplier;
+
+    if (options.style.isTight()) {
+      symbolNode.classes.push("mtight");
+    }
+
+    const color = options.getColor();
+
+    if (color) {
+      symbolNode.style.color = color;
+    }
+  }
+
+  return symbolNode;
+};
+/**
+ * Makes a symbol in Main-Regular or AMS-Regular.
+ * Used for rel, bin, open, close, inner, and punct.
+ */
+
+
+const mathsym = function mathsym(value, mode, options, classes) {
+  if (classes === void 0) {
+    classes = [];
+  }
+
+  // Decide what font to render the symbol in by its entry in the symbols
+  // table.
+  // Have a special case for when the value = \ because the \ is used as a
+  // textord in unsupported command errors but cannot be parsed as a regular
+  // text ordinal and is therefore not present as a symbol in the symbols
+  // table for text, as well as a special case for boldsymbol because it
+  // can be used for bold + and -
+  if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) {
+    return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
+  } else if (value === "\\" || symbols[mode][value].font === "main") {
+    return makeSymbol(value, "Main-Regular", mode, options, classes);
+  } else {
+    return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
+  }
+};
+/**
+ * Determines which of the two font names (Main-Italic and Math-Italic) and
+ * corresponding style tags (maindefault or mathit) to use for default math font,
+ * depending on the symbol.
+ */
+
+
+const mathdefault = function mathdefault(value, mode, options, classes) {
+  if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we
+  // need to use Main-Italic instead
+  utils.contains(mathitLetters, value)) {
+    return {
+      fontName: "Main-Italic",
+      fontClass: "mathit"
+    };
+  } else {
+    return {
+      fontName: "Math-Italic",
+      fontClass: "mathdefault"
+    };
+  }
+};
+/**
+ * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic)
+ * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font
+ * "mathnormal", depending on the symbol.  Use this function instead of fontMap for
+ * font "mathnormal".
+ */
+
+
+const mathnormal = function mathnormal(value, mode, options, classes) {
+  if (utils.contains(mathitLetters, value)) {
+    return {
+      fontName: "Main-Italic",
+      fontClass: "mathit"
+    };
+  } else if (/[0-9]/.test(value.charAt(0))) {
+    return {
+      fontName: "Caligraphic-Regular",
+      fontClass: "mathcal"
+    };
+  } else {
+    return {
+      fontName: "Math-Italic",
+      fontClass: "mathdefault"
+    };
+  }
+};
+/**
+ * Determines which of the two font names (Main-Bold and Math-BoldItalic) and
+ * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",
+ * depending on the symbol.  Use this function instead of fontMap for font
+ * "boldsymbol".
+ */
+
+
+const boldsymbol = function boldsymbol(value, mode, options, classes) {
+  if (lookupSymbol(value, "Math-BoldItalic", mode).metrics) {
+    return {
+      fontName: "Math-BoldItalic",
+      fontClass: "boldsymbol"
+    };
+  } else {
+    // Some glyphs do not exist in Math-BoldItalic so we need to use
+    // Main-Bold instead.
+    return {
+      fontName: "Main-Bold",
+      fontClass: "mathbf"
+    };
+  }
+};
+/**
+ * Makes either a mathord or textord in the correct font and color.
+ */
+
+
+const makeOrd = function makeOrd(group, options, type) {
+  const mode = group.mode;
+  const text = group.text;
+  const classes = ["mord"]; // Math mode or Old font (i.e. \rm)
+
+  const isFont = mode === "math" || mode === "text" && options.font;
+  const fontOrFamily = isFont ? options.font : options.fontFamily;
+
+  if (text.charCodeAt(0) === 0xD835) {
+    // surrogate pairs get special treatment
+    const _wideCharacterFont = wideCharacterFont(text, mode),
+          wideFontName = _wideCharacterFont[0],
+          wideFontClass = _wideCharacterFont[1];
+
+    return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));
+  } else if (fontOrFamily) {
+    let fontName;
+    let fontClasses;
+
+    if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") {
+      const fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : mathnormal(text, mode, options, classes);
+      fontName = fontData.fontName;
+      fontClasses = [fontData.fontClass];
+    } else if (utils.contains(mathitLetters, text)) {
+      fontName = "Main-Italic";
+      fontClasses = ["mathit"];
+    } else if (isFont) {
+      fontName = fontMap[fontOrFamily].fontName;
+      fontClasses = [fontOrFamily];
+    } else {
+      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);
+      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];
+    }
+
+    if (lookupSymbol(text, fontName, mode).metrics) {
+      return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));
+    } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") {
+      // Deconstruct ligatures in monospace fonts (\texttt, \tt).
+      const parts = [];
+
+      for (let i = 0; i < text.length; i++) {
+        parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));
+      }
+
+      return makeFragment(parts);
+    }
+  } // Makes a symbol in the default font for mathords and textords.
+
+
+  if (type === "mathord") {
+    const fontLookup = mathdefault(text, mode, options, classes);
+    return makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
+  } else if (type === "textord") {
+    const font = symbols[mode][text] && symbols[mode][text].font;
+
+    if (font === "ams") {
+      const fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);
+      return makeSymbol(text, fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));
+    } else if (font === "main" || !font) {
+      const fontName = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);
+      return makeSymbol(text, fontName, mode, options, classes.concat(options.fontWeight, options.fontShape));
+    } else {
+      // fonts added by plugins
+      const fontName = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class
+
+      return makeSymbol(text, fontName, mode, options, classes.concat(fontName, options.fontWeight, options.fontShape));
+    }
+  } else {
+    throw new Error("unexpected type: " + type + " in makeOrd");
+  }
+};
+/**
+ * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,
+ * and styles.
+ */
+
+
+const canCombine = (prev, next) => {
+  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {
+    return false;
+  }
+
+  for (const style in prev.style) {
+    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
+      return false;
+    }
+  }
+
+  for (const style in next.style) {
+    if (next.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
+      return false;
+    }
+  }
+
+  return true;
+};
+/**
+ * Combine consequetive domTree.symbolNodes into a single symbolNode.
+ * Note: this function mutates the argument.
+ */
+
+
+const tryCombineChars = chars => {
+  for (let i = 0; i < chars.length - 1; i++) {
+    const prev = chars[i];
+    const next = chars[i + 1];
+
+    if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {
+      prev.text += next.text;
+      prev.height = Math.max(prev.height, next.height);
+      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use
+      // it to add padding to the right of the span created from
+      // the combined characters.
+
+      prev.italic = next.italic;
+      chars.splice(i + 1, 1);
+      i--;
+    }
+  }
+
+  return chars;
+};
+/**
+ * Calculate the height, depth, and maxFontSize of an element based on its
+ * children.
+ */
+
+
+const sizeElementFromChildren = function sizeElementFromChildren(elem) {
+  let height = 0;
+  let depth = 0;
+  let maxFontSize = 0;
+
+  for (let i = 0; i < elem.children.length; i++) {
+    const child = elem.children[i];
+
+    if (child.height > height) {
+      height = child.height;
+    }
+
+    if (child.depth > depth) {
+      depth = child.depth;
+    }
+
+    if (child.maxFontSize > maxFontSize) {
+      maxFontSize = child.maxFontSize;
+    }
+  }
+
+  elem.height = height;
+  elem.depth = depth;
+  elem.maxFontSize = maxFontSize;
+};
+/**
+ * Makes a span with the given list of classes, list of children, and options.
+ *
+ * TODO(#953): Ensure that `options` is always provided (currently some call
+ * sites don't pass it) and make the type below mandatory.
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ */
+
+
+const makeSpan = function makeSpan(classes, children, options, style) {
+  const span = new Span(classes, children, options, style);
+  sizeElementFromChildren(span);
+  return span;
+}; // SVG one is simpler -- doesn't require height, depth, max-font setting.
+// This is also a separate method for typesafety.
+
+
+const makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);
+
+const makeLineSpan = function makeLineSpan(className, options, thickness) {
+  const line = makeSpan([className], [], options);
+  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
+  line.style.borderBottomWidth = line.height + "em";
+  line.maxFontSize = 1.0;
+  return line;
+};
+/**
+ * Makes an anchor with the given href, list of classes, list of children,
+ * and options.
+ */
+
+
+const makeAnchor = function makeAnchor(href, classes, children, options) {
+  const anchor = new Anchor(href, classes, children, options);
+  sizeElementFromChildren(anchor);
+  return anchor;
+};
+/**
+ * Makes a document fragment with the given list of children.
+ */
+
+
+const makeFragment = function makeFragment(children) {
+  const fragment = new DocumentFragment(children);
+  sizeElementFromChildren(fragment);
+  return fragment;
+};
+/**
+ * Wraps group in a span if it's a document fragment, allowing to apply classes
+ * and styles
+ */
+
+
+const wrapFragment = function wrapFragment(group, options) {
+  if (group instanceof DocumentFragment) {
+    return makeSpan([], [group], options);
+  }
+
+  return group;
+}; // These are exact object types to catch typos in the names of the optional fields.
+
+
+// Computes the updated `children` list and the overall depth.
+//
+// This helper function for makeVList makes it easier to enforce type safety by
+// allowing early exits (returns) in the logic.
+const getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {
+  if (params.positionType === "individualShift") {
+    const oldChildren = params.children;
+    const children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be
+    // shifted to the correct specified shift
+
+    const depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
+    let currPos = depth;
+
+    for (let i = 1; i < oldChildren.length; i++) {
+      const diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
+      const size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
+      currPos = currPos + diff;
+      children.push({
+        type: "kern",
+        size
+      });
+      children.push(oldChildren[i]);
+    }
+
+    return {
+      children,
+      depth
+    };
+  }
+
+  let depth;
+
+  if (params.positionType === "top") {
+    // We always start at the bottom, so calculate the bottom by adding up
+    // all the sizes
+    let bottom = params.positionData;
+
+    for (let i = 0; i < params.children.length; i++) {
+      const child = params.children[i];
+      bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
+    }
+
+    depth = bottom;
+  } else if (params.positionType === "bottom") {
+    depth = -params.positionData;
+  } else {
+    const firstChild = params.children[0];
+
+    if (firstChild.type !== "elem") {
+      throw new Error('First child must have type "elem".');
+    }
+
+    if (params.positionType === "shift") {
+      depth = -firstChild.elem.depth - params.positionData;
+    } else if (params.positionType === "firstBaseline") {
+      depth = -firstChild.elem.depth;
+    } else {
+      throw new Error(`Invalid positionType ${params.positionType}.`);
+    }
+  }
+
+  return {
+    children: params.children,
+    depth
+  };
+};
+/**
+ * Makes a vertical list by stacking elements and kerns on top of each other.
+ * Allows for many different ways of specifying the positioning method.
+ *
+ * See VListParam documentation above.
+ */
+
+
+const makeVList = function makeVList(params, options) {
+  const _getVListChildrenAndD = getVListChildrenAndDepth(params),
+        children = _getVListChildrenAndD.children,
+        depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to
+  // each item, where it will determine the item's baseline. Since it has
+  // `overflow:hidden`, the strut's top edge will sit on the item's line box's
+  // top edge and the strut's bottom edge will sit on the item's baseline,
+  // with no additional line-height spacing. This allows the item baseline to
+  // be positioned precisely without worrying about font ascent and
+  // line-height.
+
+
+  let pstrutSize = 0;
+
+  for (let i = 0; i < children.length; i++) {
+    const child = children[i];
+
+    if (child.type === "elem") {
+      const elem = child.elem;
+      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
+    }
+  }
+
+  pstrutSize += 2;
+  const pstrut = makeSpan(["pstrut"], []);
+  pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets
+
+  const realChildren = [];
+  let minPos = depth;
+  let maxPos = depth;
+  let currPos = depth;
+
+  for (let i = 0; i < children.length; i++) {
+    const child = children[i];
+
+    if (child.type === "kern") {
+      currPos += child.size;
+    } else {
+      const elem = child.elem;
+      const classes = child.wrapperClasses || [];
+      const style = child.wrapperStyle || {};
+      const childWrap = makeSpan(classes, [pstrut, elem], undefined, style);
+      childWrap.style.top = -pstrutSize - currPos - elem.depth + "em";
+
+      if (child.marginLeft) {
+        childWrap.style.marginLeft = child.marginLeft;
+      }
+
+      if (child.marginRight) {
+        childWrap.style.marginRight = child.marginRight;
+      }
+
+      realChildren.push(childWrap);
+      currPos += elem.height + elem.depth;
+    }
+
+    minPos = Math.min(minPos, currPos);
+    maxPos = Math.max(maxPos, currPos);
+  } // The vlist contents go in a table-cell with `vertical-align:bottom`.
+  // This cell's bottom edge will determine the containing table's baseline
+  // without overly expanding the containing line-box.
+
+
+  const vlist = makeSpan(["vlist"], realChildren);
+  vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth.
+
+  let rows;
+
+  if (minPos < 0) {
+    // We will define depth in an empty span with display: table-cell.
+    // It should render with the height that we define. But Chrome, in
+    // contenteditable mode only, treats that span as if it contains some
+    // text content. And that min-height over-rides our desired height.
+    // So we put another empty span inside the depth strut span.
+    const emptySpan = makeSpan([], []);
+    const depthStrut = makeSpan(["vlist"], [emptySpan]);
+    depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it
+    // puts the bottom of the *second* row on the baseline.
+
+    const topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200b")]);
+    rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];
+  } else {
+    rows = [makeSpan(["vlist-r"], [vlist])];
+  }
+
+  const vtable = makeSpan(["vlist-t"], rows);
+
+  if (rows.length === 2) {
+    vtable.classes.push("vlist-t2");
+  }
+
+  vtable.height = maxPos;
+  vtable.depth = -minPos;
+  return vtable;
+}; // Glue is a concept from TeX which is a flexible space between elements in
+// either a vertical or horizontal list. In KaTeX, at least for now, it's
+// static space between elements in a horizontal layout.
+
+
+const makeGlue = (measurement, options) => {
+  // Make an empty span for the space
+  const rule = makeSpan(["mspace"], [], options);
+  const size = calculateSize(measurement, options);
+  rule.style.marginRight = `${size}em`;
+  return rule;
+}; // Takes font options, and returns the appropriate fontLookup name
+
+
+const retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {
+  let baseFontName = "";
+
+  switch (fontFamily) {
+    case "amsrm":
+      baseFontName = "AMS";
+      break;
+
+    case "textrm":
+      baseFontName = "Main";
+      break;
+
+    case "textsf":
+      baseFontName = "SansSerif";
+      break;
+
+    case "texttt":
+      baseFontName = "Typewriter";
+      break;
+
+    default:
+      baseFontName = fontFamily;
+    // use fonts added by a plugin
+  }
+
+  let fontStylesName;
+
+  if (fontWeight === "textbf" && fontShape === "textit") {
+    fontStylesName = "BoldItalic";
+  } else if (fontWeight === "textbf") {
+    fontStylesName = "Bold";
+  } else if (fontWeight === "textit") {
+    fontStylesName = "Italic";
+  } else {
+    fontStylesName = "Regular";
+  }
+
+  return `${baseFontName}-${fontStylesName}`;
+};
+/**
+ * Maps TeX font commands to objects containing:
+ * - variant: string used for "mathvariant" attribute in buildMathML.js
+ * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
+ */
+// A map between tex font commands an MathML mathvariant attribute values
+
+
+const fontMap = {
+  // styles
+  "mathbf": {
+    variant: "bold",
+    fontName: "Main-Bold"
+  },
+  "mathrm": {
+    variant: "normal",
+    fontName: "Main-Regular"
+  },
+  "textit": {
+    variant: "italic",
+    fontName: "Main-Italic"
+  },
+  "mathit": {
+    variant: "italic",
+    fontName: "Main-Italic"
+  },
+  // Default math font, "mathnormal" and "boldsymbol" are missing because they
+  // require the use of several fonts: Main-Italic and Math-Italic for default
+  // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and
+  // Math-BoldItalic and Main-Bold for "boldsymbol".  This is handled by a
+  // special case in makeOrd which ends up calling mathdefault, mathnormal,
+  // and boldsymbol.
+  // families
+  "mathbb": {
+    variant: "double-struck",
+    fontName: "AMS-Regular"
+  },
+  "mathcal": {
+    variant: "script",
+    fontName: "Caligraphic-Regular"
+  },
+  "mathfrak": {
+    variant: "fraktur",
+    fontName: "Fraktur-Regular"
+  },
+  "mathscr": {
+    variant: "script",
+    fontName: "Script-Regular"
+  },
+  "mathsf": {
+    variant: "sans-serif",
+    fontName: "SansSerif-Regular"
+  },
+  "mathtt": {
+    variant: "monospace",
+    fontName: "Typewriter-Regular"
+  }
+};
+const svgData = {
+  //   path, width, height
+  vec: ["vec", 0.471, 0.714],
+  // values from the font glyph
+  oiintSize1: ["oiintSize1", 0.957, 0.499],
+  // oval to overlay the integrand
+  oiintSize2: ["oiintSize2", 1.472, 0.659],
+  oiiintSize1: ["oiiintSize1", 1.304, 0.499],
+  oiiintSize2: ["oiiintSize2", 1.98, 0.659]
+};
+
+const staticSvg = function staticSvg(value, options) {
+  // Create a span with inline SVG for the element.
+  const _svgData$value = svgData[value],
+        pathName = _svgData$value[0],
+        width = _svgData$value[1],
+        height = _svgData$value[2];
+  const path = new PathNode(pathName);
+  const svgNode = new SvgNode([path], {
+    "width": width + "em",
+    "height": height + "em",
+    // Override CSS rule `.katex svg { width: 100% }`
+    "style": "width:" + width + "em",
+    "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,
+    "preserveAspectRatio": "xMinYMin"
+  });
+  const span = makeSvgSpan(["overlay"], [svgNode], options);
+  span.height = height;
+  span.style.height = height + "em";
+  span.style.width = width + "em";
+  return span;
+};
+
+var buildCommon = {
+  fontMap,
+  makeSymbol,
+  mathsym,
+  makeSpan,
+  makeSvgSpan,
+  makeLineSpan,
+  makeAnchor,
+  makeFragment,
+  wrapFragment,
+  makeVList,
+  makeOrd,
+  makeGlue,
+  staticSvg,
+  svgData,
+  tryCombineChars
+};
+
+/**
+ * Asserts that the node is of the given type and returns it with stricter
+ * typing. Throws if the node's type does not match.
+ */
+function assertNodeType(node, type) {
+  const typedNode = checkNodeType(node, type);
+
+  if (!typedNode) {
+    throw new Error(`Expected node of type ${type}, but got ` + (node ? `node of type ${node.type}` : String(node)));
+  } // $FlowFixMe: Unsure why.
+
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkNodeType(node, type) {
+  if (node && node.type === type) {
+    // The definition of ParseNode<TYPE> doesn't communicate to flow that
+    // `type: TYPE` (as that's not explicitly mentioned anywhere), though that
+    // happens to be true for all our value types.
+    // $FlowFixMe
+    return node;
+  }
+
+  return null;
+}
+/**
+ * Asserts that the node is of the given type and returns it with stricter
+ * typing. Throws if the node's type does not match.
+ */
+
+function assertAtomFamily(node, family) {
+  const typedNode = checkAtomFamily(node, family);
+
+  if (!typedNode) {
+    throw new Error(`Expected node of type "atom" and family "${family}", but got ` + (node ? node.type === "atom" ? `atom of family ${node.family}` : `node of type ${node.type}` : String(node)));
+  }
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkAtomFamily(node, family) {
+  return node && node.type === "atom" && node.family === family ? node : null;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function assertSymbolNodeType(node) {
+  const typedNode = checkSymbolNodeType(node);
+
+  if (!typedNode) {
+    throw new Error(`Expected node of symbol group type, but got ` + (node ? `node of type ${node.type}` : String(node)));
+  }
+
+  return typedNode;
+}
+/**
+ * Returns the node more strictly typed iff it is of the given type. Otherwise,
+ * returns null.
+ */
+
+function checkSymbolNodeType(node) {
+  if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) {
+    // $FlowFixMe
+    return node;
+  }
+
+  return null;
+}
+
+/**
+ * Describes spaces between different classes of atoms.
+ */
+const thinspace = {
+  number: 3,
+  unit: "mu"
+};
+const mediumspace = {
+  number: 4,
+  unit: "mu"
+};
+const thickspace = {
+  number: 5,
+  unit: "mu"
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+
+// Spacing relationships for display and text styles
+const spacings = {
+  mord: {
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mop: {
+    mord: thinspace,
+    mop: thinspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mbin: {
+    mord: mediumspace,
+    mop: mediumspace,
+    mopen: mediumspace,
+    minner: mediumspace
+  },
+  mrel: {
+    mord: thickspace,
+    mop: thickspace,
+    mopen: thickspace,
+    minner: thickspace
+  },
+  mopen: {},
+  mclose: {
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    minner: thinspace
+  },
+  mpunct: {
+    mord: thinspace,
+    mop: thinspace,
+    mrel: thickspace,
+    mopen: thinspace,
+    mclose: thinspace,
+    mpunct: thinspace,
+    minner: thinspace
+  },
+  minner: {
+    mord: thinspace,
+    mop: thinspace,
+    mbin: mediumspace,
+    mrel: thickspace,
+    mopen: thinspace,
+    mpunct: thinspace,
+    minner: thinspace
+  }
+}; // Spacing relationships for script and scriptscript styles
+
+const tightSpacings = {
+  mord: {
+    mop: thinspace
+  },
+  mop: {
+    mord: thinspace,
+    mop: thinspace
+  },
+  mbin: {},
+  mrel: {},
+  mopen: {},
+  mclose: {
+    mop: thinspace
+  },
+  mpunct: {},
+  minner: {
+    mop: thinspace
+  }
+};
+
+/**
+ * All registered functions.
+ * `functions.js` just exports this same dictionary again and makes it public.
+ * `Parser.js` requires this dictionary.
+ */
+const _functions = {};
+/**
+ * All HTML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+const _htmlGroupBuilders = {};
+/**
+ * All MathML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+const _mathmlGroupBuilders = {};
+function defineFunction(_ref) {
+  let type = _ref.type,
+      names = _ref.names,
+      props = _ref.props,
+      handler = _ref.handler,
+      htmlBuilder = _ref.htmlBuilder,
+      mathmlBuilder = _ref.mathmlBuilder;
+  // Set default values of functions
+  const data = {
+    type,
+    numArgs: props.numArgs,
+    argTypes: props.argTypes,
+    greediness: props.greediness === undefined ? 1 : props.greediness,
+    allowedInText: !!props.allowedInText,
+    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
+    numOptionalArgs: props.numOptionalArgs || 0,
+    infix: !!props.infix,
+    handler: handler
+  };
+
+  for (let i = 0; i < names.length; ++i) {
+    _functions[names[i]] = data;
+  }
+
+  if (type) {
+    if (htmlBuilder) {
+      _htmlGroupBuilders[type] = htmlBuilder;
+    }
+
+    if (mathmlBuilder) {
+      _mathmlGroupBuilders[type] = mathmlBuilder;
+    }
+  }
+}
+/**
+ * Use this to register only the HTML and MathML builders for a function (e.g.
+ * if the function's ParseNode is generated in Parser.js rather than via a
+ * stand-alone handler provided to `defineFunction`).
+ */
+
+function defineFunctionBuilders(_ref2) {
+  let type = _ref2.type,
+      htmlBuilder = _ref2.htmlBuilder,
+      mathmlBuilder = _ref2.mathmlBuilder;
+  defineFunction({
+    type,
+    names: [],
+    props: {
+      numArgs: 0
+    },
+
+    handler() {
+      throw new Error('Should never be called.');
+    },
+
+    htmlBuilder,
+    mathmlBuilder
+  });
+} // Since the corresponding buildHTML/buildMathML function expects a
+// list of elements, we normalize for different kinds of arguments
+
+const ordargument = function ordargument(arg) {
+  const node = checkNodeType(arg, "ordgroup");
+  return node ? node.body : [arg];
+};
+
+/**
+ * This file does the main work of building a domTree structure from a parse
+ * tree. The entry point is the `buildHTML` function, which takes a parse tree.
+ * Then, the buildExpression, buildGroup, and various groupBuilders functions
+ * are called, to produce a final HTML tree.
+ */
+const makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
+// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
+// and the text before Rule 19.
+
+const binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
+const binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
+const styleMap = {
+  "display": Style$1.DISPLAY,
+  "text": Style$1.TEXT,
+  "script": Style$1.SCRIPT,
+  "scriptscript": Style$1.SCRIPTSCRIPT
+};
+const DomEnum = {
+  mord: "mord",
+  mop: "mop",
+  mbin: "mbin",
+  mrel: "mrel",
+  mopen: "mopen",
+  mclose: "mclose",
+  mpunct: "mpunct",
+  minner: "minner"
+};
+
+/**
+ * Take a list of nodes, build them in order, and return a list of the built
+ * nodes. documentFragments are flattened into their contents, so the
+ * returned list contains no fragments. `isRealGroup` is true if `expression`
+ * is a real group (no atoms will be added on either side), as opposed to
+ * a partial group (e.g. one created by \color). `surrounding` is an array
+ * consisting type of nodes that will be added to the left and right.
+ */
+const buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) {
+  if (surrounding === void 0) {
+    surrounding = [null, null];
+  }
+
+  // Parse expressions into `groups`.
+  const groups = [];
+
+  for (let i = 0; i < expression.length; i++) {
+    const output = buildGroup(expression[i], options);
+
+    if (output instanceof DocumentFragment) {
+      const children = output.children;
+      groups.push(...children);
+    } else {
+      groups.push(output);
+    }
+  } // If `expression` is a partial group, let the parent handle spacings
+  // to avoid processing groups multiple times.
+
+
+  if (!isRealGroup) {
+    return groups;
+  }
+
+  let glueOptions = options;
+
+  if (expression.length === 1) {
+    const node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling");
+
+    if (!node) ; else if (node.type === "sizing") {
+      glueOptions = options.havingSize(node.size);
+    } else if (node.type === "styling") {
+      glueOptions = options.havingStyle(styleMap[node.style]);
+    }
+  } // Dummy spans for determining spacings between surrounding atoms.
+  // If `expression` has no atoms on the left or right, class "leftmost"
+  // or "rightmost", respectively, is used to indicate it.
+
+
+  const dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options);
+  const dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element
+  // of its `classes` array. A later cleanup should ensure this, for
+  // instance by changing the signature of `makeSpan`.
+  // Before determining what spaces to insert, perform bin cancellation.
+  // Binary operators change to ordinary symbols in some contexts.
+
+  traverseNonSpaceNodes(groups, (node, prev) => {
+    const prevType = prev.classes[0];
+    const type = node.classes[0];
+
+    if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {
+      prev.classes[0] = "mord";
+    } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {
+      node.classes[0] = "mord";
+    }
+  }, {
+    node: dummyPrev
+  }, dummyNext);
+  traverseNonSpaceNodes(groups, (node, prev) => {
+    const prevType = getTypeOfDomTree(prev);
+    const type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.
+
+    const space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;
+
+    if (space) {
+      // Insert glue (spacing) after the `prev`.
+      return buildCommon.makeGlue(space, glueOptions);
+    }
+  }, {
+    node: dummyPrev
+  }, dummyNext);
+  return groups;
+}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and
+// previous node as arguments, optionally returning a node to insert after the
+// previous node. `prev` is an object with the previous node and `insertAfter`
+// function to insert after it. `next` is a node that will be added to the right.
+// Used for bin cancellation and inserting spacings.
+
+const traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) {
+  if (next) {
+    // temporarily append the right node, if exists
+    nodes.push(next);
+  }
+
+  let i = 0;
+
+  for (; i < nodes.length; i++) {
+    const node = nodes[i];
+    const partialGroup = checkPartialGroup(node);
+
+    if (partialGroup) {
+      // Recursive DFS
+      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
+      traverseNonSpaceNodes(partialGroup.children, callback, prev);
+      continue;
+    } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
+    // spacing should go between atoms of different classes
+
+
+    if (node.classes[0] === "mspace") {
+      continue;
+    }
+
+    const result = callback(node, prev.node);
+
+    if (result) {
+      if (prev.insertAfter) {
+        prev.insertAfter(result);
+      } else {
+        // insert at front
+        nodes.unshift(result);
+        i++;
+      }
+    }
+
+    prev.node = node;
+
+    prev.insertAfter = (index => n => {
+      nodes.splice(index + 1, 0, n);
+      i++;
+    })(i);
+  }
+
+  if (next) {
+    nodes.pop();
+  }
+}; // Check if given node is a partial group, i.e., does not affect spacing around.
+
+
+const checkPartialGroup = function checkPartialGroup(node) {
+  if (node instanceof DocumentFragment || node instanceof Anchor) {
+    return node;
+  }
+
+  return null;
+}; // Return the outermost node of a domTree.
+
+
+const getOutermostNode = function getOutermostNode(node, side) {
+  const partialGroup = checkPartialGroup(node);
+
+  if (partialGroup) {
+    const children = partialGroup.children;
+
+    if (children.length) {
+      if (side === "right") {
+        return getOutermostNode(children[children.length - 1], "right");
+      } else if (side === "left") {
+        return getOutermostNode(children[0], "left");
+      }
+    }
+  }
+
+  return node;
+}; // Return math atom class (mclass) of a domTree.
+// If `side` is given, it will get the type of the outermost node at given side.
+
+
+const getTypeOfDomTree = function getTypeOfDomTree(node, side) {
+  if (!node) {
+    return null;
+  }
+
+  if (side) {
+    node = getOutermostNode(node, side);
+  } // This makes a lot of assumptions as to where the type of atom
+  // appears.  We should do a better job of enforcing this.
+
+
+  return DomEnum[node.classes[0]] || null;
+};
+const makeNullDelimiter = function makeNullDelimiter(options, classes) {
+  const moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
+  return makeSpan$1(classes.concat(moreClasses));
+};
+/**
+ * buildGroup is the function that takes a group and calls the correct groupType
+ * function for it. It also handles the interaction of size and style changes
+ * between parents and children.
+ */
+
+const buildGroup = function buildGroup(group, options, baseOptions) {
+  if (!group) {
+    return makeSpan$1();
+  }
+
+  if (_htmlGroupBuilders[group.type]) {
+    // Call the groupBuilders function
+    let groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account
+    // for that size difference.
+
+    if (baseOptions && options.size !== baseOptions.size) {
+      groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);
+      const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
+      groupNode.height *= multiplier;
+      groupNode.depth *= multiplier;
+    }
+
+    return groupNode;
+  } else {
+    throw new ParseError("Got group of unknown type: '" + group.type + "'");
+  }
+};
+/**
+ * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)
+ * into an unbreakable HTML node of class .base, with proper struts to
+ * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to
+ * make up the entire expression as a sequence of unbreakable units.
+ */
+
+function buildHTMLUnbreakable(children, options) {
+  // Compute height and depth of this chunk.
+  const body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at
+  // the height of the expression, and the bottom of the HTML element
+  // falls at the depth of the expression.
+  // We used to have separate top and bottom struts, where the bottom strut
+  // would like to use `vertical-align: top`, but in IE 9 this lowers the
+  // baseline of the box to the bottom of this strut (instead of staying in
+  // the normal place) so we use an absolute value for vertical-align instead.
+
+  const strut = makeSpan$1(["strut"]);
+  strut.style.height = body.height + body.depth + "em";
+  strut.style.verticalAlign = -body.depth + "em";
+  body.children.unshift(strut);
+  return body;
+}
+/**
+ * Take an entire parse tree, and build it into an appropriate set of HTML
+ * nodes.
+ */
+
+
+function buildHTML(tree, options) {
+  // Strip off outer tag wrapper for processing below.
+  let tag = null;
+
+  if (tree.length === 1 && tree[0].type === "tag") {
+    tag = tree[0].tag;
+    tree = tree[0].body;
+  } // Build the expression contained in the tree
+
+
+  const expression = buildExpression(tree, options, true);
+  const children = []; // Create one base node for each chunk between potential line breaks.
+  // The TeXBook [p.173] says "A formula will be broken only after a
+  // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary
+  // operation symbol like $+$ or $-$ or $\times$, where the relation or
+  // binary operation is on the ``outer level'' of the formula (i.e., not
+  // enclosed in {...} and not part of an \over construction)."
+
+  let parts = [];
+
+  for (let i = 0; i < expression.length; i++) {
+    parts.push(expression[i]);
+
+    if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {
+      // Put any post-operator glue on same line as operator.
+      // Watch for \nobreak along the way, and stop at \newline.
+      let nobreak = false;
+
+      while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {
+        i++;
+        parts.push(expression[i]);
+
+        if (expression[i].hasClass("nobreak")) {
+          nobreak = true;
+        }
+      } // Don't allow break if \nobreak among the post-operator glue.
+
+
+      if (!nobreak) {
+        children.push(buildHTMLUnbreakable(parts, options));
+        parts = [];
+      }
+    } else if (expression[i].hasClass("newline")) {
+      // Write the line except the newline
+      parts.pop();
+
+      if (parts.length > 0) {
+        children.push(buildHTMLUnbreakable(parts, options));
+        parts = [];
+      } // Put the newline at the top level
+
+
+      children.push(expression[i]);
+    }
+  }
+
+  if (parts.length > 0) {
+    children.push(buildHTMLUnbreakable(parts, options));
+  } // Now, if there was a tag, build it too and append it as a final child.
+
+
+  let tagChild;
+
+  if (tag) {
+    tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true));
+    tagChild.classes = ["tag"];
+    children.push(tagChild);
+  }
+
+  const htmlNode = makeSpan$1(["katex-html"], children);
+  htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children
+  // (the height of the enclosing htmlNode) for proper vertical alignment.
+
+  if (tagChild) {
+    const strut = tagChild.children[0];
+    strut.style.height = htmlNode.height + htmlNode.depth + "em";
+    strut.style.verticalAlign = -htmlNode.depth + "em";
+  }
+
+  return htmlNode;
+}
+
+/**
+ * These objects store data about MathML nodes. This is the MathML equivalent
+ * of the types in domTree.js. Since MathML handles its own rendering, and
+ * since we're mainly using MathML to improve accessibility, we don't manage
+ * any of the styling state that the plain DOM nodes do.
+ *
+ * The `toNode` and `toMarkup` functions work simlarly to how they do in
+ * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
+ */
+function newDocumentFragment(children) {
+  return new DocumentFragment(children);
+}
+/**
+ * This node represents a general purpose MathML node of any type. The
+ * constructor requires the type of node to create (for example, `"mo"` or
+ * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags).
+ */
+
+class MathNode {
+  constructor(type, children) {
+    this.type = void 0;
+    this.attributes = void 0;
+    this.children = void 0;
+    this.type = type;
+    this.attributes = {};
+    this.children = children || [];
+  }
+  /**
+   * Sets an attribute on a MathML node. MathML depends on attributes to convey a
+   * semantic content, so this is used heavily.
+   */
+
+
+  setAttribute(name, value) {
+    this.attributes[name] = value;
+  }
+  /**
+   * Gets an attribute on a MathML node.
+   */
+
+
+  getAttribute(name) {
+    return this.attributes[name];
+  }
+  /**
+   * Converts the math node into a MathML-namespaced DOM element.
+   */
+
+
+  toNode() {
+    const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        node.setAttribute(attr, this.attributes[attr]);
+      }
+    }
+
+    for (let i = 0; i < this.children.length; i++) {
+      node.appendChild(this.children[i].toNode());
+    }
+
+    return node;
+  }
+  /**
+   * Converts the math node into an HTML markup string.
+   */
+
+
+  toMarkup() {
+    let markup = "<" + this.type; // Add the attributes
+
+    for (const attr in this.attributes) {
+      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+        markup += " " + attr + "=\"";
+        markup += utils.escape(this.attributes[attr]);
+        markup += "\"";
+      }
+    }
+
+    markup += ">";
+
+    for (let i = 0; i < this.children.length; i++) {
+      markup += this.children[i].toMarkup();
+    }
+
+    markup += "</" + this.type + ">";
+    return markup;
+  }
+  /**
+   * Converts the math node into a string, similar to innerText, but escaped.
+   */
+
+
+  toText() {
+    return this.children.map(child => child.toText()).join("");
+  }
+
+}
+/**
+ * This node represents a piece of text.
+ */
+
+class TextNode {
+  constructor(text) {
+    this.text = void 0;
+    this.text = text;
+  }
+  /**
+   * Converts the text node into a DOM text node.
+   */
+
+
+  toNode() {
+    return document.createTextNode(this.text);
+  }
+  /**
+   * Converts the text node into escaped HTML markup
+   * (representing the text itself).
+   */
+
+
+  toMarkup() {
+    return utils.escape(this.toText());
+  }
+  /**
+   * Converts the text node into a string
+   * (representing the text iteself).
+   */
+
+
+  toText() {
+    return this.text;
+  }
+
+}
+/**
+ * This node represents a space, but may render as <mspace.../> or as text,
+ * depending on the width.
+ */
+
+class SpaceNode {
+  /**
+   * Create a Space node with width given in CSS ems.
+   */
+  constructor(width) {
+    this.width = void 0;
+    this.character = void 0;
+    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html
+    // for a table of space-like characters.  We use Unicode
+    // representations instead of &LongNames; as it's not clear how to
+    // make the latter via document.createTextNode.
+
+    if (width >= 0.05555 && width <= 0.05556) {
+      this.character = "\u200a"; // &VeryThinSpace;
+    } else if (width >= 0.1666 && width <= 0.1667) {
+      this.character = "\u2009"; // &ThinSpace;
+    } else if (width >= 0.2222 && width <= 0.2223) {
+      this.character = "\u2005"; // &MediumSpace;
+    } else if (width >= 0.2777 && width <= 0.2778) {
+      this.character = "\u2005\u200a"; // &ThickSpace;
+    } else if (width >= -0.05556 && width <= -0.05555) {
+      this.character = "\u200a\u2063"; // &NegativeVeryThinSpace;
+    } else if (width >= -0.1667 && width <= -0.1666) {
+      this.character = "\u2009\u2063"; // &NegativeThinSpace;
+    } else if (width >= -0.2223 && width <= -0.2222) {
+      this.character = "\u205f\u2063"; // &NegativeMediumSpace;
+    } else if (width >= -0.2778 && width <= -0.2777) {
+      this.character = "\u2005\u2063"; // &NegativeThickSpace;
+    } else {
+      this.character = null;
+    }
+  }
+  /**
+   * Converts the math node into a MathML-namespaced DOM element.
+   */
+
+
+  toNode() {
+    if (this.character) {
+      return document.createTextNode(this.character);
+    } else {
+      const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
+      node.setAttribute("width", this.width + "em");
+      return node;
+    }
+  }
+  /**
+   * Converts the math node into an HTML markup string.
+   */
+
+
+  toMarkup() {
+    if (this.character) {
+      return `<mtext>${this.character}</mtext>`;
+    } else {
+      return `<mspace width="${this.width}em"/>`;
+    }
+  }
+  /**
+   * Converts the math node into a string, similar to innerText.
+   */
+
+
+  toText() {
+    if (this.character) {
+      return this.character;
+    } else {
+      return " ";
+    }
+  }
+
+}
+
+var mathMLTree = {
+  MathNode,
+  TextNode,
+  SpaceNode,
+  newDocumentFragment
+};
+
+/**
+ * This file converts a parse tree into a cooresponding MathML tree. The main
+ * entry point is the `buildMathML` function, which takes a parse tree from the
+ * parser.
+ */
+
+/**
+ * Takes a symbol and converts it into a MathML text node after performing
+ * optional replacement from symbols.js.
+ */
+const makeText = function makeText(text, mode, options) {
+  if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) {
+    text = symbols[mode][text].replace;
+  }
+
+  return new mathMLTree.TextNode(text);
+};
+/**
+ * Wrap the given array of nodes in an <mrow> node if needed, i.e.,
+ * unless the array has length 1.  Always returns a single node.
+ */
+
+const makeRow = function makeRow(body) {
+  if (body.length === 1) {
+    return body[0];
+  } else {
+    return new mathMLTree.MathNode("mrow", body);
+  }
+};
+/**
+ * Returns the math variant as a string or null if none is required.
+ */
+
+const getVariant = function getVariant(group, options) {
+  // Handle \text... font specifiers as best we can.
+  // MathML has a limited list of allowable mathvariant specifiers; see
+  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt
+  if (options.fontFamily === "texttt") {
+    return "monospace";
+  } else if (options.fontFamily === "textsf") {
+    if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+      return "sans-serif-bold-italic";
+    } else if (options.fontShape === "textit") {
+      return "sans-serif-italic";
+    } else if (options.fontWeight === "textbf") {
+      return "bold-sans-serif";
+    } else {
+      return "sans-serif";
+    }
+  } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+    return "bold-italic";
+  } else if (options.fontShape === "textit") {
+    return "italic";
+  } else if (options.fontWeight === "textbf") {
+    return "bold";
+  }
+
+  const font = options.font;
+
+  if (!font || font === "mathnormal") {
+    return null;
+  }
+
+  const mode = group.mode;
+
+  if (font === "mathit") {
+    return "italic";
+  } else if (font === "boldsymbol") {
+    return "bold-italic";
+  } else if (font === "mathbf") {
+    return "bold";
+  } else if (font === "mathbb") {
+    return "double-struck";
+  } else if (font === "mathfrak") {
+    return "fraktur";
+  } else if (font === "mathscr" || font === "mathcal") {
+    // MathML makes no distinction between script and caligrahpic
+    return "script";
+  } else if (font === "mathsf") {
+    return "sans-serif";
+  } else if (font === "mathtt") {
+    return "monospace";
+  }
+
+  let text = group.text;
+
+  if (utils.contains(["\\imath", "\\jmath"], text)) {
+    return null;
+  }
+
+  if (symbols[mode][text] && symbols[mode][text].replace) {
+    text = symbols[mode][text].replace;
+  }
+
+  const fontName = buildCommon.fontMap[font].fontName;
+
+  if (getCharacterMetrics(text, fontName, mode)) {
+    return buildCommon.fontMap[font].variant;
+  }
+
+  return null;
+};
+/**
+ * Takes a list of nodes, builds them, and returns a list of the generated
+ * MathML nodes.  Also combine consecutive <mtext> outputs into a single
+ * <mtext> tag.
+ */
+
+const buildExpression$1 = function buildExpression(expression, options, isOrdgroup) {
+  if (expression.length === 1) {
+    const group = buildGroup$1(expression[0], options);
+
+    if (isOrdgroup && group instanceof MathNode && group.type === "mo") {
+      // When TeX writers want to suppress spacing on an operator,
+      // they often put the operator by itself inside braces.
+      group.setAttribute("lspace", "0em");
+      group.setAttribute("rspace", "0em");
+    }
+
+    return [group];
+  }
+
+  const groups = [];
+  let lastGroup;
+
+  for (let i = 0; i < expression.length; i++) {
+    const group = buildGroup$1(expression[i], options);
+
+    if (group instanceof MathNode && lastGroup instanceof MathNode) {
+      // Concatenate adjacent <mtext>s
+      if (group.type === 'mtext' && lastGroup.type === 'mtext' && group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
+        lastGroup.children.push(...group.children);
+        continue; // Concatenate adjacent <mn>s
+      } else if (group.type === 'mn' && lastGroup.type === 'mn') {
+        lastGroup.children.push(...group.children);
+        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>
+      } else if (group.type === 'mi' && group.children.length === 1 && lastGroup.type === 'mn') {
+        const child = group.children[0];
+
+        if (child instanceof TextNode && child.text === '.') {
+          lastGroup.children.push(...group.children);
+          continue;
+        }
+      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
+        const lastChild = lastGroup.children[0];
+
+        if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (group.type === 'mo' || group.type === 'mi' || group.type === 'mn')) {
+          const child = group.children[0];
+
+          if (child instanceof TextNode && child.text.length > 0) {
+            // Overlay with combining character long solidus
+            child.text = child.text.slice(0, 1) + "\u0338" + child.text.slice(1);
+            groups.pop();
+          }
+        }
+      }
+    }
+
+    groups.push(group);
+    lastGroup = group;
+  }
+
+  return groups;
+};
+/**
+ * Equivalent to buildExpression, but wraps the elements in an <mrow>
+ * if there's more than one.  Returns a single node instead of an array.
+ */
+
+const buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
+  return makeRow(buildExpression$1(expression, options, isOrdgroup));
+};
+/**
+ * Takes a group from the parser and calls the appropriate groupBuilders function
+ * on it to produce a MathML node.
+ */
+
+const buildGroup$1 = function buildGroup(group, options) {
+  if (!group) {
+    return new mathMLTree.MathNode("mrow");
+  }
+
+  if (_mathmlGroupBuilders[group.type]) {
+    // Call the groupBuilders function
+    const result = _mathmlGroupBuilders[group.type](group, options);
+    return result;
+  } else {
+    throw new ParseError("Got group of unknown type: '" + group.type + "'");
+  }
+};
+/**
+ * Takes a full parse tree and settings and builds a MathML representation of
+ * it. In particular, we put the elements from building the parse tree into a
+ * <semantics> tag so we can also include that TeX source as an annotation.
+ *
+ * Note that we actually return a domTree element with a `<math>` inside it so
+ * we can do appropriate styling.
+ */
+
+function buildMathML(tree, texExpression, options, forMathmlOnly) {
+  const expression = buildExpression$1(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics
+  // tag correctly, unless it's a single <mrow> or <mtable>.
+
+  let wrapper;
+
+  if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {
+    wrapper = expression[0];
+  } else {
+    wrapper = new mathMLTree.MathNode("mrow", expression);
+  } // Build a TeX annotation of the source
+
+
+  const annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
+  annotation.setAttribute("encoding", "application/x-tex");
+  const semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
+  const math = new mathMLTree.MathNode("math", [semantics]);
+  math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style <math> nodes, so we wrap the node in a span.
+  // NOTE: The span class is not typed to have <math> nodes as children, and
+  // we don't want to make the children type more generic since the children
+  // of span are expected to have more fields in `buildHtml` contexts.
+
+  const wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe
+
+  return buildCommon.makeSpan([wrapperClass], [math]);
+}
+
+const optionsFromSettings = function optionsFromSettings(settings) {
+  return new Options({
+    style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,
+    maxSize: settings.maxSize,
+    minRuleThickness: settings.minRuleThickness
+  });
+};
+
+const displayWrap = function displayWrap(node, settings) {
+  if (settings.displayMode) {
+    const classes = ["katex-display"];
+
+    if (settings.leqno) {
+      classes.push("leqno");
+    }
+
+    if (settings.fleqn) {
+      classes.push("fleqn");
+    }
+
+    node = buildCommon.makeSpan(classes, [node]);
+  }
+
+  return node;
+};
+
+const buildTree = function buildTree(tree, expression, settings) {
+  const options = optionsFromSettings(settings);
+  let katexNode;
+
+  if (settings.output === "mathml") {
+    return buildMathML(tree, expression, options, true);
+  } else if (settings.output === "html") {
+    const htmlNode = buildHTML(tree, options);
+    katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
+  } else {
+    const mathMLNode = buildMathML(tree, expression, options, false);
+    const htmlNode = buildHTML(tree, options);
+    katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, htmlNode]);
+  }
+
+  return displayWrap(katexNode, settings);
+};
+const buildHTMLTree = function buildHTMLTree(tree, expression, settings) {
+  const options = optionsFromSettings(settings);
+  const htmlNode = buildHTML(tree, options);
+  const katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
+  return displayWrap(katexNode, settings);
+};
+
+/**
+ * This file provides support to buildMathML.js and buildHTML.js
+ * for stretchy wide elements rendered from SVG files
+ * and other CSS trickery.
+ */
+const stretchyCodePoint = {
+  widehat: "^",
+  widecheck: "ˇ",
+  widetilde: "~",
+  utilde: "~",
+  overleftarrow: "\u2190",
+  underleftarrow: "\u2190",
+  xleftarrow: "\u2190",
+  overrightarrow: "\u2192",
+  underrightarrow: "\u2192",
+  xrightarrow: "\u2192",
+  underbrace: "\u23df",
+  overbrace: "\u23de",
+  overgroup: "\u23e0",
+  undergroup: "\u23e1",
+  overleftrightarrow: "\u2194",
+  underleftrightarrow: "\u2194",
+  xleftrightarrow: "\u2194",
+  Overrightarrow: "\u21d2",
+  xRightarrow: "\u21d2",
+  overleftharpoon: "\u21bc",
+  xleftharpoonup: "\u21bc",
+  overrightharpoon: "\u21c0",
+  xrightharpoonup: "\u21c0",
+  xLeftarrow: "\u21d0",
+  xLeftrightarrow: "\u21d4",
+  xhookleftarrow: "\u21a9",
+  xhookrightarrow: "\u21aa",
+  xmapsto: "\u21a6",
+  xrightharpoondown: "\u21c1",
+  xleftharpoondown: "\u21bd",
+  xrightleftharpoons: "\u21cc",
+  xleftrightharpoons: "\u21cb",
+  xtwoheadleftarrow: "\u219e",
+  xtwoheadrightarrow: "\u21a0",
+  xlongequal: "=",
+  xtofrom: "\u21c4",
+  xrightleftarrows: "\u21c4",
+  xrightequilibrium: "\u21cc",
+  // Not a perfect match.
+  xleftequilibrium: "\u21cb" // None better available.
+
+};
+
+const mathMLnode = function mathMLnode(label) {
+  const node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
+  node.setAttribute("stretchy", "true");
+  return node;
+}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
+// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)
+// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)
+// Licensed under the SIL Open Font License, Version 1.1.
+// See \nhttp://scripts.sil.org/OFL
+// Very Long SVGs
+//    Many of the KaTeX stretchy wide elements use a long SVG image and an
+//    overflow: hidden tactic to achieve a stretchy image while avoiding
+//    distortion of arrowheads or brace corners.
+//    The SVG typically contains a very long (400 em) arrow.
+//    The SVG is in a container span that has overflow: hidden, so the span
+//    acts like a window that exposes only part of the  SVG.
+//    The SVG always has a longer, thinner aspect ratio than the container span.
+//    After the SVG fills 100% of the height of the container span,
+//    there is a long arrow shaft left over. That left-over shaft is not shown.
+//    Instead, it is sliced off because the span's CSS has overflow: hidden.
+//    Thus, the reader sees an arrow that matches the subject matter width
+//    without distortion.
+//    Some functions, such as \cancel, need to vary their aspect ratio. These
+//    functions do not get the overflow SVG treatment.
+// Second Brush Stroke
+//    Low resolution monitors struggle to display images in fine detail.
+//    So browsers apply anti-aliasing. A long straight arrow shaft therefore
+//    will sometimes appear as if it has a blurred edge.
+//    To mitigate this, these SVG files contain a second "brush-stroke" on the
+//    arrow shafts. That is, a second long thin rectangular SVG path has been
+//    written directly on top of each arrow shaft. This reinforcement causes
+//    some of the screen pixels to display as black instead of the anti-aliased
+//    gray pixel that a  single path would generate. So we get arrow shafts
+//    whose edges appear to be sharper.
+// In the katexImagesData object just below, the dimensions all
+// correspond to path geometry inside the relevant SVG.
+// For example, \overrightarrow uses the same arrowhead as glyph U+2192
+// from the KaTeX Main font. The scaling factor is 1000.
+// That is, inside the font, that arrowhead is 522 units tall, which
+// corresponds to 0.522 em inside the document.
+
+
+const katexImagesData = {
+  //   path(s), minWidth, height, align
+  overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+  overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+  underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+  underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+  xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
+  xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
+  Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
+  xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
+  xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
+  overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+  xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+  xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
+  overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+  xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+  xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
+  xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
+  xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
+  xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
+  overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+  overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
+  underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
+  underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+  xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
+  xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
+  xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
+  xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
+  xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
+  xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
+  overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+  underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+  overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
+  undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
+  xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
+  xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
+  // The next three arrows are from the mhchem package.
+  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
+  // document as \xrightarrow or \xrightleftharpoons. Those have
+  // min-length = 1.75em, so we set min-length on these next three to match.
+  xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
+  xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
+  xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
+};
+
+const groupLength = function groupLength(arg) {
+  if (arg.type === "ordgroup") {
+    return arg.body.length;
+  } else {
+    return 1;
+  }
+};
+
+const svgSpan = function svgSpan(group, options) {
+  // Create a span with inline SVG for the element.
+  function buildSvgSpan_() {
+    let viewBoxWidth = 400000; // default
+
+    const label = group.label.substr(1);
+
+    if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {
+      // Each type in the `if` statement corresponds to one of the ParseNode
+      // types below. This narrowing is required to access `grp.base`.
+      const grp = group; // There are four SVG images available for each function.
+      // Choose a taller image when there are more characters.
+
+      const numChars = groupLength(grp.base);
+      let viewBoxHeight;
+      let pathName;
+      let height;
+
+      if (numChars > 5) {
+        if (label === "widehat" || label === "widecheck") {
+          viewBoxHeight = 420;
+          viewBoxWidth = 2364;
+          height = 0.42;
+          pathName = label + "4";
+        } else {
+          viewBoxHeight = 312;
+          viewBoxWidth = 2340;
+          height = 0.34;
+          pathName = "tilde4";
+        }
+      } else {
+        const imgIndex = [1, 1, 2, 2, 3, 3][numChars];
+
+        if (label === "widehat" || label === "widecheck") {
+          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];
+          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];
+          height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];
+          pathName = label + imgIndex;
+        } else {
+          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];
+          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];
+          height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];
+          pathName = "tilde" + imgIndex;
+        }
+      }
+
+      const path = new PathNode(pathName);
+      const svgNode = new SvgNode([path], {
+        "width": "100%",
+        "height": height + "em",
+        "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
+        "preserveAspectRatio": "none"
+      });
+      return {
+        span: buildCommon.makeSvgSpan([], [svgNode], options),
+        minWidth: 0,
+        height
+      };
+    } else {
+      const spans = [];
+      const data = katexImagesData[label];
+      const paths = data[0],
+            minWidth = data[1],
+            viewBoxHeight = data[2];
+      const height = viewBoxHeight / 1000;
+      const numSvgChildren = paths.length;
+      let widthClasses;
+      let aligns;
+
+      if (numSvgChildren === 1) {
+        // $FlowFixMe: All these cases must be of the 4-tuple type.
+        const align1 = data[3];
+        widthClasses = ["hide-tail"];
+        aligns = [align1];
+      } else if (numSvgChildren === 2) {
+        widthClasses = ["halfarrow-left", "halfarrow-right"];
+        aligns = ["xMinYMin", "xMaxYMin"];
+      } else if (numSvgChildren === 3) {
+        widthClasses = ["brace-left", "brace-center", "brace-right"];
+        aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"];
+      } else {
+        throw new Error(`Correct katexImagesData or update code here to support
+                    ${numSvgChildren} children.`);
+      }
+
+      for (let i = 0; i < numSvgChildren; i++) {
+        const path = new PathNode(paths[i]);
+        const svgNode = new SvgNode([path], {
+          "width": "400em",
+          "height": height + "em",
+          "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
+          "preserveAspectRatio": aligns[i] + " slice"
+        });
+        const span = buildCommon.makeSvgSpan([widthClasses[i]], [svgNode], options);
+
+        if (numSvgChildren === 1) {
+          return {
+            span,
+            minWidth,
+            height
+          };
+        } else {
+          span.style.height = height + "em";
+          spans.push(span);
+        }
+      }
+
+      return {
+        span: buildCommon.makeSpan(["stretchy"], spans, options),
+        minWidth,
+        height
+      };
+    }
+  } // buildSvgSpan_()
+
+
+  const _buildSvgSpan_ = buildSvgSpan_(),
+        span = _buildSvgSpan_.span,
+        minWidth = _buildSvgSpan_.minWidth,
+        height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0.
+  // Any adjustments relative to the baseline must be done in buildHTML.
+
+
+  span.height = height;
+  span.style.height = height + "em";
+
+  if (minWidth > 0) {
+    span.style.minWidth = minWidth + "em";
+  }
+
+  return span;
+};
+
+const encloseSpan = function encloseSpan(inner, label, pad, options) {
+  // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
+  let img;
+  const totalHeight = inner.height + inner.depth + 2 * pad;
+
+  if (/fbox|color/.test(label)) {
+    img = buildCommon.makeSpan(["stretchy", label], [], options);
+
+    if (label === "fbox") {
+      const color = options.color && options.getColor();
+
+      if (color) {
+        img.style.borderColor = color;
+      }
+    }
+  } else {
+    // \cancel, \bcancel, or \xcancel
+    // Since \cancel's SVG is inline and it omits the viewBox attribute,
+    // its stroke-width will not vary with span area.
+    const lines = [];
+
+    if (/^[bx]cancel$/.test(label)) {
+      lines.push(new LineNode({
+        "x1": "0",
+        "y1": "0",
+        "x2": "100%",
+        "y2": "100%",
+        "stroke-width": "0.046em"
+      }));
+    }
+
+    if (/^x?cancel$/.test(label)) {
+      lines.push(new LineNode({
+        "x1": "0",
+        "y1": "100%",
+        "x2": "100%",
+        "y2": "0",
+        "stroke-width": "0.046em"
+      }));
+    }
+
+    const svgNode = new SvgNode(lines, {
+      "width": "100%",
+      "height": totalHeight + "em"
+    });
+    img = buildCommon.makeSvgSpan([], [svgNode], options);
+  }
+
+  img.height = totalHeight;
+  img.style.height = totalHeight + "em";
+  return img;
+};
+
+var stretchy = {
+  encloseSpan,
+  mathMLnode,
+  svgSpan
+};
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but
+const htmlBuilder = (grp, options) => {
+  // Accents are handled in the TeXbook pg. 443, rule 12.
+  let base;
+  let group;
+  const supSub = checkNodeType(grp, "supsub");
+  let supSubGroup;
+
+  if (supSub) {
+    // If our base is a character box, and we have superscripts and
+    // subscripts, the supsub will defer to us. In particular, we want
+    // to attach the superscripts and subscripts to the inner body (so
+    // that the position of the superscripts and subscripts won't be
+    // affected by the height of the accent). We accomplish this by
+    // sticking the base of the accent into the base of the supsub, and
+    // rendering that, while keeping track of where the accent is.
+    // The real accent group is the base of the supsub group
+    group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group
+
+    base = group.base; // Stick the character box into the base of the supsub group
+
+    supSub.base = base; // Rerender the supsub group with its new base, and store that
+    // result.
+
+    supSubGroup = assertSpan(buildGroup(supSub, options)); // reset original base
+
+    supSub.base = group;
+  } else {
+    group = assertNodeType(grp, "accent");
+    base = group.base;
+  } // Build the base group
+
+
+  const body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?
+
+  const mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the
+  // nucleus is not a single character, let s = 0; otherwise set s to the
+  // kern amount for the nucleus followed by the \skewchar of its font."
+  // Note that our skew metrics are just the kern between each character
+  // and the skewchar.
+
+  let skew = 0;
+
+  if (mustShift) {
+    // If the base is a character box, then we want the skew of the
+    // innermost character. To do that, we find the innermost character:
+    const baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it
+
+    const baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.
+
+    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we
+    // removed with getBaseElem might contain things like \color which
+    // we can't get rid of.
+    // TODO(emily): Find a better way to get the skew
+  } // calculate the amount of space between the body and the accent
+
+
+  let clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent
+
+  let accentBody;
+
+  if (!group.isStretchy) {
+    let accent;
+    let width;
+
+    if (group.label === "\\vec") {
+      // Before version 0.9, \vec used the combining font glyph U+20D7.
+      // But browsers, especially Safari, are not consistent in how they
+      // render combining characters when not preceded by a character.
+      // So now we use an SVG.
+      // If Safari reforms, we should consider reverting to the glyph.
+      accent = buildCommon.staticSvg("vec", options);
+      width = buildCommon.svgData.vec[1];
+    } else {
+      accent = buildCommon.makeOrd({
+        mode: group.mode,
+        text: group.label
+      }, options, "textord");
+      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to
+      // shift the accent over to a place we don't want.
+
+      accent.italic = 0;
+      width = accent.width;
+    }
+
+    accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be
+    // at least the width of the accent, and overlap directly onto the
+    // character without any vertical offset.
+
+    const accentFull = group.label === "\\textcircled";
+
+    if (accentFull) {
+      accentBody.classes.push('accent-full');
+      clearance = body.height;
+    } // Shift the accent over by the skew.
+
+
+    let left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`
+    // so that the accent doesn't contribute to the bounding box.
+    // We need to shift the character by its width (effectively half
+    // its width) to compensate.
+
+    if (!accentFull) {
+      left -= width / 2;
+    }
+
+    accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some
+    // vertical adjustment to match LaTeX.
+
+    if (group.label === "\\textcircled") {
+      accentBody.style.top = ".2em";
+    }
+
+    accentBody = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "kern",
+        size: -clearance
+      }, {
+        type: "elem",
+        elem: accentBody
+      }]
+    }, options);
+  } else {
+    accentBody = stretchy.svgSpan(group, options);
+    accentBody = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "elem",
+        elem: accentBody,
+        wrapperClasses: ["svg-align"],
+        wrapperStyle: skew > 0 ? {
+          width: `calc(100% - ${2 * skew}em)`,
+          marginLeft: `${2 * skew}em`
+        } : undefined
+      }]
+    }, options);
+  }
+
+  const accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options);
+
+  if (supSubGroup) {
+    // Here, we replace the "base" child of the supsub with our newly
+    // generated accent.
+    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the
+    // accent, we manually recalculate height.
+
+    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.
+
+    supSubGroup.classes[0] = "mord";
+    return supSubGroup;
+  } else {
+    return accentWrap;
+  }
+};
+
+const mathmlBuilder = (group, options) => {
+  const accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]);
+  const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.base, options), accentNode]);
+  node.setAttribute("accent", "true");
+  return node;
+};
+
+const NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => `\\${accent}`).join("|")); // Accents
+
+defineFunction({
+  type: "accent",
+  names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
+  props: {
+    numArgs: 1
+  },
+  handler: (context, args) => {
+    const base = args[0];
+    const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
+    const isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck";
+    return {
+      type: "accent",
+      mode: context.parser.mode,
+      label: context.funcName,
+      isStretchy: isStretchy,
+      isShifty: isShifty,
+      base: base
+    };
+  },
+  htmlBuilder,
+  mathmlBuilder
+}); // Text-mode accents
+
+defineFunction({
+  type: "accent",
+  names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"],
+  props: {
+    numArgs: 1,
+    allowedInText: true,
+    allowedInMath: false
+  },
+  handler: (context, args) => {
+    const base = args[0];
+    return {
+      type: "accent",
+      mode: context.parser.mode,
+      label: context.funcName,
+      isStretchy: false,
+      isShifty: true,
+      base: base
+    };
+  },
+  htmlBuilder,
+  mathmlBuilder
+});
+
+// Horizontal overlap functions
+defineFunction({
+  type: "accentUnder",
+  names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
+  props: {
+    numArgs: 1
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const base = args[0];
+    return {
+      type: "accentUnder",
+      mode: parser.mode,
+      label: funcName,
+      base: base
+    };
+  },
+  htmlBuilder: (group, options) => {
+    // Treat under accents much like underlines.
+    const innerGroup = buildGroup(group.base, options);
+    const accentBody = stretchy.svgSpan(group, options);
+    const kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns
+
+    const vlist = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: accentBody.height + kern,
+      children: [{
+        type: "elem",
+        elem: accentBody,
+        wrapperClasses: ["svg-align"]
+      }, {
+        type: "kern",
+        size: kern
+      }, {
+        type: "elem",
+        elem: innerGroup
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options);
+  },
+  mathmlBuilder: (group, options) => {
+    const accentNode = stretchy.mathMLnode(group.label);
+    const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.base, options), accentNode]);
+    node.setAttribute("accentunder", "true");
+    return node;
+  }
+});
+
+// Helper function
+const paddedNode = group => {
+  const node = new mathMLTree.MathNode("mpadded", group ? [group] : []);
+  node.setAttribute("width", "+0.6em");
+  node.setAttribute("lspace", "0.3em");
+  return node;
+}; // Stretchy arrows with an optional argument
+
+
+defineFunction({
+  type: "xArrow",
+  names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension.
+  // Direct use of these functions is discouraged and may break someday.
+  "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1
+  },
+
+  handler(_ref, args, optArgs) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    return {
+      type: "xArrow",
+      mode: parser.mode,
+      label: funcName,
+      body: args[0],
+      below: optArgs[0]
+    };
+  },
+
+  // Flow is unable to correctly infer the type of `group`, even though it's
+  // unamibiguously determined from the passed-in `type` above.
+  htmlBuilder(group, options) {
+    const style = options.style; // Build the argument groups in the appropriate style.
+    // Ref: amsmath.dtx:   \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
+    // Some groups can return document fragments.  Handle those by wrapping
+    // them in a span.
+
+    let newOptions = options.havingStyle(style.sup());
+    const upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options);
+    upperGroup.classes.push("x-arrow-pad");
+    let lowerGroup;
+
+    if (group.below) {
+      // Build the lower group
+      newOptions = options.havingStyle(style.sub());
+      lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options);
+      lowerGroup.classes.push("x-arrow-pad");
+    }
+
+    const arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.
+    // The point we want on the math axis is at 0.5 * arrowBody.height.
+
+    const arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
+
+    let upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu
+
+    if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") {
+      upperShift -= upperGroup.depth; // shift up if depth encroaches
+    } // Generate the vlist
+
+
+    let vlist;
+
+    if (lowerGroup) {
+      const lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
+      vlist = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: upperGroup,
+          shift: upperShift
+        }, {
+          type: "elem",
+          elem: arrowBody,
+          shift: arrowShift
+        }, {
+          type: "elem",
+          elem: lowerGroup,
+          shift: lowerShift
+        }]
+      }, options);
+    } else {
+      vlist = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: upperGroup,
+          shift: upperShift
+        }, {
+          type: "elem",
+          elem: arrowBody,
+          shift: arrowShift
+        }]
+      }, options);
+    } // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+
+    vlist.children[0].children[0].children[1].classes.push("svg-align");
+    return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options);
+  },
+
+  mathmlBuilder(group, options) {
+    const arrowNode = stretchy.mathMLnode(group.label);
+    let node;
+
+    if (group.body) {
+      const upperNode = paddedNode(buildGroup$1(group.body, options));
+
+      if (group.below) {
+        const lowerNode = paddedNode(buildGroup$1(group.below, options));
+        node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
+      } else {
+        node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
+      }
+    } else if (group.below) {
+      const lowerNode = paddedNode(buildGroup$1(group.below, options));
+      node = new mathMLTree.MathNode("munder", [arrowNode, lowerNode]);
+    } else {
+      // This should never happen.
+      // Parser.js throws an error if there is no argument.
+      node = paddedNode();
+      node = new mathMLTree.MathNode("mover", [arrowNode, node]);
+    }
+
+    return node;
+  }
+
+});
+
+// {123} and converts into symbol with code 123.  It is used by the *macro*
+// \char defined in macros.js.
+
+defineFunction({
+  type: "textord",
+  names: ["\\@char"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser;
+    const arg = assertNodeType(args[0], "ordgroup");
+    const group = arg.body;
+    let number = "";
+
+    for (let i = 0; i < group.length; i++) {
+      const node = assertNodeType(group[i], "textord");
+      number += node.text;
+    }
+
+    const code = parseInt(number);
+
+    if (isNaN(code)) {
+      throw new ParseError(`\\@char has non-numeric argument ${number}`);
+    }
+
+    return {
+      type: "textord",
+      mode: parser.mode,
+      text: String.fromCharCode(code)
+    };
+  }
+
+});
+
+const htmlBuilder$1 = (group, options) => {
+  const elements = buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains.
+  // To accomplish this, we wrap the results in a fragment, so the inner
+  // elements will be able to directly interact with their neighbors. For
+  // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
+
+  return buildCommon.makeFragment(elements);
+};
+
+const mathmlBuilder$1 = (group, options) => {
+  const inner = buildExpression$1(group.body, options.withColor(group.color));
+  const node = new mathMLTree.MathNode("mstyle", inner);
+  node.setAttribute("mathcolor", group.color);
+  return node;
+};
+
+defineFunction({
+  type: "color",
+  names: ["\\textcolor"],
+  props: {
+    numArgs: 2,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "original"]
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser;
+    const color = assertNodeType(args[0], "color-token").color;
+    const body = args[1];
+    return {
+      type: "color",
+      mode: parser.mode,
+      color,
+      body: ordargument(body)
+    };
+  },
+
+  htmlBuilder: htmlBuilder$1,
+  mathmlBuilder: mathmlBuilder$1
+});
+defineFunction({
+  type: "color",
+  names: ["\\color"],
+  props: {
+    numArgs: 1,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color"]
+  },
+
+  handler(_ref2, args) {
+    let parser = _ref2.parser,
+        breakOnTokenText = _ref2.breakOnTokenText;
+    const color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current
+    // color, mimicking the behavior of color.sty.
+    // This is currently used just to correctly color a \right
+    // that follows a \color command.
+
+    parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored.
+
+    const body = parser.parseExpression(true, breakOnTokenText);
+    return {
+      type: "color",
+      mode: parser.mode,
+      color,
+      body
+    };
+  },
+
+  htmlBuilder: htmlBuilder$1,
+  mathmlBuilder: mathmlBuilder$1
+});
+
+// Row breaks within tabular environments, and line breaks at top level
+// same signature, we implement them as one megafunction, with newRow
+// indicating whether we're in the \cr case, and newLine indicating whether
+// to break the line in the \newline case.
+
+defineFunction({
+  type: "cr",
+  names: ["\\cr", "\\newline"],
+  props: {
+    numArgs: 0,
+    numOptionalArgs: 1,
+    argTypes: ["size"],
+    allowedInText: true
+  },
+
+  handler(_ref, args, optArgs) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const size = optArgs[0];
+    const newRow = funcName === "\\cr";
+    let newLine = false;
+
+    if (!newRow) {
+      if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) {
+        newLine = false;
+      } else {
+        newLine = true;
+      }
+    }
+
+    return {
+      type: "cr",
+      mode: parser.mode,
+      newLine,
+      newRow,
+      size: size && assertNodeType(size, "size").value
+    };
+  },
+
+  // The following builders are called only at the top level,
+  // not within tabular/array environments.
+  htmlBuilder(group, options) {
+    if (group.newRow) {
+      throw new ParseError("\\cr valid only within a tabular/array environment");
+    }
+
+    const span = buildCommon.makeSpan(["mspace"], [], options);
+
+    if (group.newLine) {
+      span.classes.push("newline");
+
+      if (group.size) {
+        span.style.marginTop = calculateSize(group.size, options) + "em";
+      }
+    }
+
+    return span;
+  },
+
+  mathmlBuilder(group, options) {
+    const node = new mathMLTree.MathNode("mspace");
+
+    if (group.newLine) {
+      node.setAttribute("linebreak", "newline");
+
+      if (group.size) {
+        node.setAttribute("height", calculateSize(group.size, options) + "em");
+      }
+    }
+
+    return node;
+  }
+
+});
+
+/**
+ * This file deals with creating delimiters of various sizes. The TeXbook
+ * discusses these routines on page 441-442, in the "Another subroutine sets box
+ * x to a specified variable delimiter" paragraph.
+ *
+ * There are three main routines here. `makeSmallDelim` makes a delimiter in the
+ * normal font, but in either text, script, or scriptscript style.
+ * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
+ * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
+ * smaller pieces that are stacked on top of one another.
+ *
+ * The functions take a parameter `center`, which determines if the delimiter
+ * should be centered around the axis.
+ *
+ * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
+ * one of the given sizes. This is used for things like `\bigl`.
+ * `customSizedDelim` makes a delimiter with a given total height+depth. It is
+ * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
+ * delimiter which surrounds an expression of a given height an depth. It is
+ * used in `\left` and `\right`.
+ */
+
+/**
+ * Get the metrics for a given symbol and font, after transformation (i.e.
+ * after following replacement from symbols.js)
+ */
+const getMetrics = function getMetrics(symbol, font, mode) {
+  const replace = symbols.math[symbol] && symbols.math[symbol].replace;
+  const metrics = getCharacterMetrics(replace || symbol, font, mode);
+
+  if (!metrics) {
+    throw new Error(`Unsupported symbol ${symbol} and font size ${font}.`);
+  }
+
+  return metrics;
+};
+/**
+ * Puts a delimiter span in a given style, and adds appropriate height, depth,
+ * and maxFontSizes.
+ */
+
+
+const styleWrap = function styleWrap(delim, toStyle, options, classes) {
+  const newOptions = options.havingBaseStyle(toStyle);
+  const span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);
+  const delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
+  span.height *= delimSizeMultiplier;
+  span.depth *= delimSizeMultiplier;
+  span.maxFontSize = newOptions.sizeMultiplier;
+  return span;
+};
+
+const centerSpan = function centerSpan(span, options, style) {
+  const newOptions = options.havingBaseStyle(style);
+  const shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
+  span.classes.push("delimcenter");
+  span.style.top = shift + "em";
+  span.height -= shift;
+  span.depth += shift;
+};
+/**
+ * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
+ * font, but is restyled to either be in textstyle, scriptstyle, or
+ * scriptscriptstyle.
+ */
+
+
+const makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
+  const text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
+  const span = styleWrap(text, style, options, classes);
+
+  if (center) {
+    centerSpan(span, options, style);
+  }
+
+  return span;
+};
+/**
+ * Builds a symbol in the given font size (note size is an integer)
+ */
+
+
+const mathrmSize = function mathrmSize(value, size, mode, options) {
+  return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options);
+};
+/**
+ * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
+ * Size3, or Size4 fonts. It is always rendered in textstyle.
+ */
+
+
+const makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
+  const inner = mathrmSize(delim, size, mode, options);
+  const span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes);
+
+  if (center) {
+    centerSpan(span, options, Style$1.TEXT);
+  }
+
+  return span;
+};
+/**
+ * Make an inner span with the given offset and in the given font. This is used
+ * in `makeStackedDelim` to make the stacking pieces for the delimiter.
+ */
+
+
+const makeInner = function makeInner(symbol, font, mode) {
+  let sizeClass; // Apply the correct CSS class to choose the right font.
+
+  if (font === "Size1-Regular") {
+    sizeClass = "delim-size1";
+  } else
+    /* if (font === "Size4-Regular") */
+    {
+      sizeClass = "delim-size4";
+    }
+
+  const inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element
+  // in the appropriate tag that VList uses.
+
+  return {
+    type: "elem",
+    elem: inner
+  };
+}; // Helper for makeStackedDelim
+
+
+const lap = {
+  type: "kern",
+  size: -0.005
+};
+/**
+ * Make a stacked delimiter out of a given delimiter, with the total height at
+ * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
+ */
+
+const makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
+  // There are four parts, the top, an optional middle, a repeated part, and a
+  // bottom.
+  let top;
+  let middle;
+  let repeat;
+  let bottom;
+  top = repeat = bottom = delim;
+  middle = null; // Also keep track of what font the delimiters are in
+
+  let font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use
+  // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
+  // repeats of the arrows
+
+  if (delim === "\\uparrow") {
+    repeat = bottom = "\u23d0";
+  } else if (delim === "\\Uparrow") {
+    repeat = bottom = "\u2016";
+  } else if (delim === "\\downarrow") {
+    top = repeat = "\u23d0";
+  } else if (delim === "\\Downarrow") {
+    top = repeat = "\u2016";
+  } else if (delim === "\\updownarrow") {
+    top = "\\uparrow";
+    repeat = "\u23d0";
+    bottom = "\\downarrow";
+  } else if (delim === "\\Updownarrow") {
+    top = "\\Uparrow";
+    repeat = "\u2016";
+    bottom = "\\Downarrow";
+  } else if (delim === "[" || delim === "\\lbrack") {
+    top = "\u23a1";
+    repeat = "\u23a2";
+    bottom = "\u23a3";
+    font = "Size4-Regular";
+  } else if (delim === "]" || delim === "\\rbrack") {
+    top = "\u23a4";
+    repeat = "\u23a5";
+    bottom = "\u23a6";
+    font = "Size4-Regular";
+  } else if (delim === "\\lfloor" || delim === "\u230a") {
+    repeat = top = "\u23a2";
+    bottom = "\u23a3";
+    font = "Size4-Regular";
+  } else if (delim === "\\lceil" || delim === "\u2308") {
+    top = "\u23a1";
+    repeat = bottom = "\u23a2";
+    font = "Size4-Regular";
+  } else if (delim === "\\rfloor" || delim === "\u230b") {
+    repeat = top = "\u23a5";
+    bottom = "\u23a6";
+    font = "Size4-Regular";
+  } else if (delim === "\\rceil" || delim === "\u2309") {
+    top = "\u23a4";
+    repeat = bottom = "\u23a5";
+    font = "Size4-Regular";
+  } else if (delim === "(" || delim === "\\lparen") {
+    top = "\u239b";
+    repeat = "\u239c";
+    bottom = "\u239d";
+    font = "Size4-Regular";
+  } else if (delim === ")" || delim === "\\rparen") {
+    top = "\u239e";
+    repeat = "\u239f";
+    bottom = "\u23a0";
+    font = "Size4-Regular";
+  } else if (delim === "\\{" || delim === "\\lbrace") {
+    top = "\u23a7";
+    middle = "\u23a8";
+    bottom = "\u23a9";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } else if (delim === "\\}" || delim === "\\rbrace") {
+    top = "\u23ab";
+    middle = "\u23ac";
+    bottom = "\u23ad";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } else if (delim === "\\lgroup" || delim === "\u27ee") {
+    top = "\u23a7";
+    bottom = "\u23a9";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } else if (delim === "\\rgroup" || delim === "\u27ef") {
+    top = "\u23ab";
+    bottom = "\u23ad";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } else if (delim === "\\lmoustache" || delim === "\u23b0") {
+    top = "\u23a7";
+    bottom = "\u23ad";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } else if (delim === "\\rmoustache" || delim === "\u23b1") {
+    top = "\u23ab";
+    bottom = "\u23a9";
+    repeat = "\u23aa";
+    font = "Size4-Regular";
+  } // Get the metrics of the four sections
+
+
+  const topMetrics = getMetrics(top, font, mode);
+  const topHeightTotal = topMetrics.height + topMetrics.depth;
+  const repeatMetrics = getMetrics(repeat, font, mode);
+  const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
+  const bottomMetrics = getMetrics(bottom, font, mode);
+  const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
+  let middleHeightTotal = 0;
+  let middleFactor = 1;
+
+  if (middle !== null) {
+    const middleMetrics = getMetrics(middle, font, mode);
+    middleHeightTotal = middleMetrics.height + middleMetrics.depth;
+    middleFactor = 2; // repeat symmetrically above and below middle
+  } // Calcuate the minimal height that the delimiter can have.
+  // It is at least the size of the top, bottom, and optional middle combined.
+
+
+  const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need
+
+  const repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols
+
+  const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note
+  // that in this context, "center" means that the delimiter should be
+  // centered around the axis in the current style, while normally it is
+  // centered around the axis in textstyle.
+
+  let axisHeight = options.fontMetrics().axisHeight;
+
+  if (center) {
+    axisHeight *= options.sizeMultiplier;
+  } // Calculate the depth
+
+
+  const depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way.
+  // We shift each repeat element downwards by 0.005em, to prevent a gap
+  // due to browser floating point rounding error.
+  // Then, at the last element-to element joint, we add one extra repeat
+  // element to cover the gap created by the shifts.
+  // Find the shift needed to align the upper end of the extra element at a point
+  // 0.005em above the lower end of the top element.
+
+  const shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist
+  // Keep a list of the inner pieces
+
+  const inners = []; // Add the bottom symbol
+
+  inners.push(makeInner(bottom, font, mode));
+
+  if (middle === null) {
+    // Add that many symbols
+    for (let i = 0; i < repeatCount; i++) {
+      inners.push(lap); // overlap
+
+      inners.push(makeInner(repeat, font, mode));
+    }
+  } else {
+    // When there is a middle bit, we need the middle part and two repeated
+    // sections
+    for (let i = 0; i < repeatCount; i++) {
+      inners.push(lap);
+      inners.push(makeInner(repeat, font, mode));
+    } // Insert one extra repeat element.
+
+
+    inners.push({
+      type: "kern",
+      size: shiftOfExtraElement
+    });
+    inners.push(makeInner(repeat, font, mode));
+    inners.push(lap); // Now insert the middle of the brace.
+
+    inners.push(makeInner(middle, font, mode));
+
+    for (let i = 0; i < repeatCount; i++) {
+      inners.push(lap);
+      inners.push(makeInner(repeat, font, mode));
+    }
+  } // To cover the gap create by the overlaps, insert one more repeat element,
+  // at a position that juts 0.005 above the bottom of the top element.
+
+
+  inners.push({
+    type: "kern",
+    size: shiftOfExtraElement
+  });
+  inners.push(makeInner(repeat, font, mode));
+  inners.push(lap); // Add the top symbol
+
+  inners.push(makeInner(top, font, mode)); // Finally, build the vlist
+
+  const newOptions = options.havingBaseStyle(Style$1.TEXT);
+  const inner = buildCommon.makeVList({
+    positionType: "bottom",
+    positionData: depth,
+    children: inners
+  }, newOptions);
+  return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes);
+}; // All surds have 0.08em padding above the viniculum inside the SVG.
+// That keeps browser span height rounding error from pinching the line.
+
+
+const vbPad = 80; // padding above the surd, measured inside the viewBox.
+
+const emPad = 0.08; // padding, in ems, measured in the document.
+
+const sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) {
+  const path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight);
+  const pathNode = new PathNode(sqrtName, path);
+  const svg = new SvgNode([pathNode], {
+    // Note: 1000:1 ratio of viewBox to document em width.
+    "width": "400em",
+    "height": height + "em",
+    "viewBox": "0 0 400000 " + viewBoxHeight,
+    "preserveAspectRatio": "xMinYMin slice"
+  });
+  return buildCommon.makeSvgSpan(["hide-tail"], [svg], options);
+};
+/**
+ * Make a sqrt image of the given height,
+ */
+
+
+const makeSqrtImage = function makeSqrtImage(height, options) {
+  // Define a newOptions that removes the effect of size changes such as \Huge.
+  // We don't pick different a height surd for \Huge. For it, we scale up.
+  const newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.
+
+  const delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
+  let sizeMultiplier = newOptions.sizeMultiplier; // default
+  // The standard sqrt SVGs each have a 0.04em thick viniculum.
+  // If Settings.minRuleThickness is larger than that, we add extraViniculum.
+
+  const extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.
+
+  let span;
+  let spanHeight = 0;
+  let texHeight = 0;
+  let viewBoxHeight = 0;
+  let advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd.
+  // Then browser rounding error on the parent span height will not
+  // encroach on the ink of the viniculum. But that padding is not
+  // included in the TeX-like `height` used for calculation of
+  // vertical alignment. So texHeight = span.height < span.style.height.
+
+  if (delim.type === "small") {
+    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
+    // 1000 unit normal glyph height.
+    viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad;
+
+    if (height < 1.0) {
+      sizeMultiplier = 1.0; // mimic a \textfont radical
+    } else if (height < 1.4) {
+      sizeMultiplier = 0.7; // mimic a \scriptfont radical
+    }
+
+    spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier;
+    texHeight = (1.00 + extraViniculum) / sizeMultiplier;
+    span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "0.853em";
+    advanceWidth = 0.833 / sizeMultiplier; // from the font.
+  } else if (delim.type === "large") {
+    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
+    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];
+    texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier;
+    spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier;
+    span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "1.02em";
+    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.
+  } else {
+    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
+    // We'll use a single SVG to accomplish the same thing.
+    spanHeight = height + extraViniculum + emPad;
+    texHeight = height + extraViniculum;
+    viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad;
+    span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options);
+    span.style.minWidth = "0.742em";
+    advanceWidth = 1.056;
+  }
+
+  span.height = texHeight;
+  span.style.height = spanHeight + "em";
+  return {
+    span,
+    advanceWidth,
+    // Calculate the actual line width.
+    // This actually should depend on the chosen font -- e.g. \boldmath
+    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
+    // have thicker rules.
+    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier
+  };
+}; // There are three kinds of delimiters, delimiters that stack when they become
+// too large
+
+
+const stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack
+
+const stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack
+
+const stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of
+// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$
+// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.
+
+const sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
+/**
+ * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
+ */
+
+const makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {
+  // < and > turn into \langle and \rangle in delimiters
+  if (delim === "<" || delim === "\\lt" || delim === "\u27e8") {
+    delim = "\\langle";
+  } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") {
+    delim = "\\rangle";
+  } // Sized delimiters are never centered.
+
+
+  if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {
+    return makeLargeDelim(delim, size, false, options, mode, classes);
+  } else if (utils.contains(stackAlwaysDelimiters, delim)) {
+    return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
+  } else {
+    throw new ParseError("Illegal delimiter: '" + delim + "'");
+  }
+};
+/**
+ * There are three different sequences of delimiter sizes that the delimiters
+ * follow depending on the kind of delimiter. This is used when creating custom
+ * sized delimiters to decide whether to create a small, large, or stacked
+ * delimiter.
+ *
+ * In real TeX, these sequences aren't explicitly defined, but are instead
+ * defined inside the font metrics. Since there are only three sequences that
+ * are possible for the delimiters that TeX defines, it is easier to just encode
+ * them explicitly here.
+ */
+
+
+// Delimiters that never stack try small delimiters and large delimiters only
+const stackNeverDelimiterSequence = [{
+  type: "small",
+  style: Style$1.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: Style$1.SCRIPT
+}, {
+  type: "small",
+  style: Style$1.TEXT
+}, {
+  type: "large",
+  size: 1
+}, {
+  type: "large",
+  size: 2
+}, {
+  type: "large",
+  size: 3
+}, {
+  type: "large",
+  size: 4
+}]; // Delimiters that always stack try the small delimiters first, then stack
+
+const stackAlwaysDelimiterSequence = [{
+  type: "small",
+  style: Style$1.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: Style$1.SCRIPT
+}, {
+  type: "small",
+  style: Style$1.TEXT
+}, {
+  type: "stack"
+}]; // Delimiters that stack when large try the small and then large delimiters, and
+// stack afterwards
+
+const stackLargeDelimiterSequence = [{
+  type: "small",
+  style: Style$1.SCRIPTSCRIPT
+}, {
+  type: "small",
+  style: Style$1.SCRIPT
+}, {
+  type: "small",
+  style: Style$1.TEXT
+}, {
+  type: "large",
+  size: 1
+}, {
+  type: "large",
+  size: 2
+}, {
+  type: "large",
+  size: 3
+}, {
+  type: "large",
+  size: 4
+}, {
+  type: "stack"
+}];
+/**
+ * Get the font used in a delimiter based on what kind of delimiter it is.
+ * TODO(#963) Use more specific font family return type once that is introduced.
+ */
+
+const delimTypeToFont = function delimTypeToFont(type) {
+  if (type.type === "small") {
+    return "Main-Regular";
+  } else if (type.type === "large") {
+    return "Size" + type.size + "-Regular";
+  } else if (type.type === "stack") {
+    return "Size4-Regular";
+  } else {
+    throw new Error(`Add support for delim type '${type.type}' here.`);
+  }
+};
+/**
+ * Traverse a sequence of types of delimiters to decide what kind of delimiter
+ * should be used to create a delimiter of the given height+depth.
+ */
+
+
+const traverseSequence = function traverseSequence(delim, height, sequence, options) {
+  // Here, we choose the index we should start at in the sequences. In smaller
+  // sizes (which correspond to larger numbers in style.size) we start earlier
+  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
+  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
+  const start = Math.min(2, 3 - options.style.size);
+
+  for (let i = start; i < sequence.length; i++) {
+    if (sequence[i].type === "stack") {
+      // This is always the last delimiter, so we just break the loop now.
+      break;
+    }
+
+    const metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math");
+    let heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we
+    // account for the style change size.
+
+    if (sequence[i].type === "small") {
+      const newOptions = options.havingBaseStyle(sequence[i].style);
+      heightDepth *= newOptions.sizeMultiplier;
+    } // Check if the delimiter at this size works for the given height.
+
+
+    if (heightDepth > height) {
+      return sequence[i];
+    }
+  } // If we reached the end of the sequence, return the last sequence element.
+
+
+  return sequence[sequence.length - 1];
+};
+/**
+ * Make a delimiter of a given height+depth, with optional centering. Here, we
+ * traverse the sequences, and create a delimiter that the sequence tells us to.
+ */
+
+
+const makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
+  if (delim === "<" || delim === "\\lt" || delim === "\u27e8") {
+    delim = "\\langle";
+  } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") {
+    delim = "\\rangle";
+  } // Decide what sequence to use
+
+
+  let sequence;
+
+  if (utils.contains(stackNeverDelimiters, delim)) {
+    sequence = stackNeverDelimiterSequence;
+  } else if (utils.contains(stackLargeDelimiters, delim)) {
+    sequence = stackLargeDelimiterSequence;
+  } else {
+    sequence = stackAlwaysDelimiterSequence;
+  } // Look through the sequence
+
+
+  const delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.
+  // Depending on the sequence element we decided on, call the
+  // appropriate function.
+
+  if (delimType.type === "small") {
+    return makeSmallDelim(delim, delimType.style, center, options, mode, classes);
+  } else if (delimType.type === "large") {
+    return makeLargeDelim(delim, delimType.size, center, options, mode, classes);
+  } else
+    /* if (delimType.type === "stack") */
+    {
+      return makeStackedDelim(delim, height, center, options, mode, classes);
+    }
+};
+/**
+ * Make a delimiter for use with `\left` and `\right`, given a height and depth
+ * of an expression that the delimiters surround.
+ */
+
+
+const makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
+  // We always center \left/\right delimiters, so the axis is always shifted
+  const axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right
+
+  const delimiterFactor = 901;
+  const delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
+  const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
+  const totalHeight = Math.max( // In real TeX, calculations are done using integral values which are
+  // 65536 per pt, or 655360 per em. So, the division here truncates in
+  // TeX but doesn't here, producing different results. If we wanted to
+  // exactly match TeX's calculation, we could do
+  //   Math.floor(655360 * maxDistFromAxis / 500) *
+  //    delimiterFactor / 655360
+  // (To see the difference, compare
+  //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
+  // in TeX and KaTeX)
+  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total
+  // height
+
+  return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
+};
+
+var delimiter = {
+  sqrtImage: makeSqrtImage,
+  sizedDelim: makeSizedDelim,
+  customSizedDelim: makeCustomSizedDelim,
+  leftRightDelim: makeLeftRightDelim
+};
+
+// Extra data needed for the delimiter handler down below
+const delimiterSizes = {
+  "\\bigl": {
+    mclass: "mopen",
+    size: 1
+  },
+  "\\Bigl": {
+    mclass: "mopen",
+    size: 2
+  },
+  "\\biggl": {
+    mclass: "mopen",
+    size: 3
+  },
+  "\\Biggl": {
+    mclass: "mopen",
+    size: 4
+  },
+  "\\bigr": {
+    mclass: "mclose",
+    size: 1
+  },
+  "\\Bigr": {
+    mclass: "mclose",
+    size: 2
+  },
+  "\\biggr": {
+    mclass: "mclose",
+    size: 3
+  },
+  "\\Biggr": {
+    mclass: "mclose",
+    size: 4
+  },
+  "\\bigm": {
+    mclass: "mrel",
+    size: 1
+  },
+  "\\Bigm": {
+    mclass: "mrel",
+    size: 2
+  },
+  "\\biggm": {
+    mclass: "mrel",
+    size: 3
+  },
+  "\\Biggm": {
+    mclass: "mrel",
+    size: 4
+  },
+  "\\big": {
+    mclass: "mord",
+    size: 1
+  },
+  "\\Big": {
+    mclass: "mord",
+    size: 2
+  },
+  "\\bigg": {
+    mclass: "mord",
+    size: 3
+  },
+  "\\Bigg": {
+    mclass: "mord",
+    size: 4
+  }
+};
+const delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."];
+
+// Delimiter functions
+function checkDelimiter(delim, context) {
+  const symDelim = checkSymbolNodeType(delim);
+
+  if (symDelim && utils.contains(delimiters, symDelim.text)) {
+    return symDelim;
+  } else {
+    throw new ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim);
+  }
+}
+
+defineFunction({
+  type: "delimsizing",
+  names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
+  props: {
+    numArgs: 1
+  },
+  handler: (context, args) => {
+    const delim = checkDelimiter(args[0], context);
+    return {
+      type: "delimsizing",
+      mode: context.parser.mode,
+      size: delimiterSizes[context.funcName].size,
+      mclass: delimiterSizes[context.funcName].mclass,
+      delim: delim.text
+    };
+  },
+  htmlBuilder: (group, options) => {
+    if (group.delim === ".") {
+      // Empty delimiters still count as elements, even though they don't
+      // show anything.
+      return buildCommon.makeSpan([group.mclass]);
+    } // Use delimiter.sizedDelim to generate the delimiter.
+
+
+    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);
+  },
+  mathmlBuilder: group => {
+    const children = [];
+
+    if (group.delim !== ".") {
+      children.push(makeText(group.delim, group.mode));
+    }
+
+    const node = new mathMLTree.MathNode("mo", children);
+
+    if (group.mclass === "mopen" || group.mclass === "mclose") {
+      // Only some of the delimsizing functions act as fences, and they
+      // return "mopen" or "mclose" mclass.
+      node.setAttribute("fence", "true");
+    } else {
+      // Explicitly disable fencing if it's not a fence, to override the
+      // defaults.
+      node.setAttribute("fence", "false");
+    }
+
+    return node;
+  }
+});
+
+function assertParsed(group) {
+  if (!group.body) {
+    throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
+  }
+}
+
+defineFunction({
+  type: "leftright-right",
+  names: ["\\right"],
+  props: {
+    numArgs: 1
+  },
+  handler: (context, args) => {
+    // \left case below triggers parsing of \right in
+    //   `const right = parser.parseFunction();`
+    // uses this return value.
+    const color = context.parser.gullet.macros.get("\\current@color");
+
+    if (color && typeof color !== "string") {
+      throw new ParseError("\\current@color set to non-string in \\right");
+    }
+
+    return {
+      type: "leftright-right",
+      mode: context.parser.mode,
+      delim: checkDelimiter(args[0], context).text,
+      color // undefined if not set via \color
+
+    };
+  }
+});
+defineFunction({
+  type: "leftright",
+  names: ["\\left"],
+  props: {
+    numArgs: 1
+  },
+  handler: (context, args) => {
+    const delim = checkDelimiter(args[0], context);
+    const parser = context.parser; // Parse out the implicit body
+
+    ++parser.leftrightDepth; // parseExpression stops before '\\right'
+
+    const body = parser.parseExpression(false);
+    --parser.leftrightDepth; // Check the next token
+
+    parser.expect("\\right", false);
+    const right = assertNodeType(parser.parseFunction(), "leftright-right");
+    return {
+      type: "leftright",
+      mode: parser.mode,
+      body,
+      left: delim.text,
+      right: right.delim,
+      rightColor: right.color
+    };
+  },
+  htmlBuilder: (group, options) => {
+    assertParsed(group); // Build the inner expression
+
+    const inner = buildExpression(group.body, options, true, ["mopen", "mclose"]);
+    let innerHeight = 0;
+    let innerDepth = 0;
+    let hadMiddle = false; // Calculate its height and depth
+
+    for (let i = 0; i < inner.length; i++) {
+      // Property `isMiddle` not defined on `span`. See comment in
+      // "middle"'s htmlBuilder.
+      // $FlowFixMe
+      if (inner[i].isMiddle) {
+        hadMiddle = true;
+      } else {
+        innerHeight = Math.max(inner[i].height, innerHeight);
+        innerDepth = Math.max(inner[i].depth, innerDepth);
+      }
+    } // The size of delimiters is the same, regardless of what style we are
+    // in. Thus, to correctly calculate the size of delimiter we need around
+    // a group, we scale down the inner size based on the size.
+
+
+    innerHeight *= options.sizeMultiplier;
+    innerDepth *= options.sizeMultiplier;
+    let leftDelim;
+
+    if (group.left === ".") {
+      // Empty delimiters in \left and \right make null delimiter spaces.
+      leftDelim = makeNullDelimiter(options, ["mopen"]);
+    } else {
+      // Otherwise, use leftRightDelim to generate the correct sized
+      // delimiter.
+      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
+    } // Add it to the beginning of the expression
+
+
+    inner.unshift(leftDelim); // Handle middle delimiters
+
+    if (hadMiddle) {
+      for (let i = 1; i < inner.length; i++) {
+        const middleDelim = inner[i]; // Property `isMiddle` not defined on `span`. See comment in
+        // "middle"'s htmlBuilder.
+        // $FlowFixMe
+
+        const isMiddle = middleDelim.isMiddle;
+
+        if (isMiddle) {
+          // Apply the options that were active when \middle was called
+          inner[i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);
+        }
+      }
+    }
+
+    let rightDelim; // Same for the right delimiter, but using color specified by \color
+
+    if (group.right === ".") {
+      rightDelim = makeNullDelimiter(options, ["mclose"]);
+    } else {
+      const colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;
+      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);
+    } // Add it to the end of the expression.
+
+
+    inner.push(rightDelim);
+    return buildCommon.makeSpan(["minner"], inner, options);
+  },
+  mathmlBuilder: (group, options) => {
+    assertParsed(group);
+    const inner = buildExpression$1(group.body, options);
+
+    if (group.left !== ".") {
+      const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]);
+      leftNode.setAttribute("fence", "true");
+      inner.unshift(leftNode);
+    }
+
+    if (group.right !== ".") {
+      const rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]);
+      rightNode.setAttribute("fence", "true");
+
+      if (group.rightColor) {
+        rightNode.setAttribute("mathcolor", group.rightColor);
+      }
+
+      inner.push(rightNode);
+    }
+
+    return makeRow(inner);
+  }
+});
+defineFunction({
+  type: "middle",
+  names: ["\\middle"],
+  props: {
+    numArgs: 1
+  },
+  handler: (context, args) => {
+    const delim = checkDelimiter(args[0], context);
+
+    if (!context.parser.leftrightDepth) {
+      throw new ParseError("\\middle without preceding \\left", delim);
+    }
+
+    return {
+      type: "middle",
+      mode: context.parser.mode,
+      delim: delim.text
+    };
+  },
+  htmlBuilder: (group, options) => {
+    let middleDelim;
+
+    if (group.delim === ".") {
+      middleDelim = makeNullDelimiter(options, []);
+    } else {
+      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);
+      const isMiddle = {
+        delim: group.delim,
+        options
+      }; // Property `isMiddle` not defined on `span`. It is only used in
+      // this file above.
+      // TODO: Fix this violation of the `span` type and possibly rename
+      // things since `isMiddle` sounds like a boolean, but is a struct.
+      // $FlowFixMe
+
+      middleDelim.isMiddle = isMiddle;
+    }
+
+    return middleDelim;
+  },
+  mathmlBuilder: (group, options) => {
+    // A Firefox \middle will strech a character vertically only if it
+    // is in the fence part of the operator dictionary at:
+    // https://www.w3.org/TR/MathML3/appendixc.html.
+    // So we need to avoid U+2223 and use plain "|" instead.
+    const textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode);
+    const middleNode = new mathMLTree.MathNode("mo", [textNode]);
+    middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each <mo> element.
+    // \middle should get delimiter spacing instead.
+
+    middleNode.setAttribute("lspace", "0.05em");
+    middleNode.setAttribute("rspace", "0.05em");
+    return middleNode;
+  }
+});
+
+const htmlBuilder$2 = (group, options) => {
+  // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox
+  // Some groups can return document fragments.  Handle those by wrapping
+  // them in a span.
+  const inner = buildCommon.wrapFragment(buildGroup(group.body, options), options);
+  const label = group.label.substr(1);
+  const scale = options.sizeMultiplier;
+  let img;
+  let imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different
+  // depending on whether the subject is wider than it is tall, or vice versa.
+  // We don't know the width of a group, so as a proxy, we test if
+  // the subject is a single character. This captures most of the
+  // subjects that should get the "tall" treatment.
+
+  const isSingleChar = utils.isCharacterBox(group.body);
+
+  if (label === "sout") {
+    img = buildCommon.makeSpan(["stretchy", "sout"]);
+    img.height = options.fontMetrics().defaultRuleThickness / scale;
+    imgShift = -0.5 * options.fontMetrics().xHeight;
+  } else {
+    // Add horizontal padding
+    if (/cancel/.test(label)) {
+      if (!isSingleChar) {
+        inner.classes.push("cancel-pad");
+      }
+    } else {
+      inner.classes.push("boxpad");
+    } // Add vertical padding
+
+
+    let vertPad = 0;
+    let ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2"
+
+    if (/box/.test(label)) {
+      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default
+      options.minRuleThickness // User override.
+      );
+      vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
+    } else {
+      vertPad = isSingleChar ? 0.2 : 0;
+    }
+
+    img = stretchy.encloseSpan(inner, label, vertPad, options);
+
+    if (/fbox|boxed|fcolorbox/.test(label)) {
+      img.style.borderStyle = "solid";
+      img.style.borderWidth = `${ruleThickness}em`;
+    }
+
+    imgShift = inner.depth + vertPad;
+
+    if (group.backgroundColor) {
+      img.style.backgroundColor = group.backgroundColor;
+
+      if (group.borderColor) {
+        img.style.borderColor = group.borderColor;
+      }
+    }
+  }
+
+  let vlist;
+
+  if (group.backgroundColor) {
+    vlist = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [// Put the color background behind inner;
+      {
+        type: "elem",
+        elem: img,
+        shift: imgShift
+      }, {
+        type: "elem",
+        elem: inner,
+        shift: 0
+      }]
+    }, options);
+  } else {
+    vlist = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [// Write the \cancel stroke on top of inner.
+      {
+        type: "elem",
+        elem: inner,
+        shift: 0
+      }, {
+        type: "elem",
+        elem: img,
+        shift: imgShift,
+        wrapperClasses: /cancel/.test(label) ? ["svg-align"] : []
+      }]
+    }, options);
+  }
+
+  if (/cancel/.test(label)) {
+    // The cancel package documentation says that cancel lines add their height
+    // to the expression, but tests show that isn't how it actually works.
+    vlist.height = inner.height;
+    vlist.depth = inner.depth;
+  }
+
+  if (/cancel/.test(label) && !isSingleChar) {
+    // cancel does not create horiz space for its line extension.
+    return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options);
+  } else {
+    return buildCommon.makeSpan(["mord"], [vlist], options);
+  }
+};
+
+const mathmlBuilder$2 = (group, options) => {
+  let fboxsep = 0;
+  const node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup$1(group.body, options)]);
+
+  switch (group.label) {
+    case "\\cancel":
+      node.setAttribute("notation", "updiagonalstrike");
+      break;
+
+    case "\\bcancel":
+      node.setAttribute("notation", "downdiagonalstrike");
+      break;
+
+    case "\\sout":
+      node.setAttribute("notation", "horizontalstrike");
+      break;
+
+    case "\\fbox":
+      node.setAttribute("notation", "box");
+      break;
+
+    case "\\fcolorbox":
+    case "\\colorbox":
+      // <menclose> doesn't have a good notation option. So use <mpadded>
+      // instead. Set some attributes that come included with <menclose>.
+      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;
+      node.setAttribute("width", `+${2 * fboxsep}pt`);
+      node.setAttribute("height", `+${2 * fboxsep}pt`);
+      node.setAttribute("lspace", `${fboxsep}pt`); //
+
+      node.setAttribute("voffset", `${fboxsep}pt`);
+
+      if (group.label === "\\fcolorbox") {
+        const thk = Math.max(options.fontMetrics().fboxrule, // default
+        options.minRuleThickness // user override
+        );
+        node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
+      }
+
+      break;
+
+    case "\\xcancel":
+      node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
+      break;
+  }
+
+  if (group.backgroundColor) {
+    node.setAttribute("mathbackground", group.backgroundColor);
+  }
+
+  return node;
+};
+
+defineFunction({
+  type: "enclose",
+  names: ["\\colorbox"],
+  props: {
+    numArgs: 2,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "text"]
+  },
+
+  handler(_ref, args, optArgs) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const color = assertNodeType(args[0], "color-token").color;
+    const body = args[1];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      backgroundColor: color,
+      body
+    };
+  },
+
+  htmlBuilder: htmlBuilder$2,
+  mathmlBuilder: mathmlBuilder$2
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\fcolorbox"],
+  props: {
+    numArgs: 3,
+    allowedInText: true,
+    greediness: 3,
+    argTypes: ["color", "color", "text"]
+  },
+
+  handler(_ref2, args, optArgs) {
+    let parser = _ref2.parser,
+        funcName = _ref2.funcName;
+    const borderColor = assertNodeType(args[0], "color-token").color;
+    const backgroundColor = assertNodeType(args[1], "color-token").color;
+    const body = args[2];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      backgroundColor,
+      borderColor,
+      body
+    };
+  },
+
+  htmlBuilder: htmlBuilder$2,
+  mathmlBuilder: mathmlBuilder$2
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\fbox"],
+  props: {
+    numArgs: 1,
+    argTypes: ["hbox"],
+    allowedInText: true
+  },
+
+  handler(_ref3, args) {
+    let parser = _ref3.parser;
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: "\\fbox",
+      body: args[0]
+    };
+  }
+
+});
+defineFunction({
+  type: "enclose",
+  names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(_ref4, args, optArgs) {
+    let parser = _ref4.parser,
+        funcName = _ref4.funcName;
+    const body = args[0];
+    return {
+      type: "enclose",
+      mode: parser.mode,
+      label: funcName,
+      body
+    };
+  },
+
+  htmlBuilder: htmlBuilder$2,
+  mathmlBuilder: mathmlBuilder$2
+});
+
+/**
+ * All registered environments.
+ * `environments.js` exports this same dictionary again and makes it public.
+ * `Parser.js` requires this dictionary via `environments.js`.
+ */
+const _environments = {};
+function defineEnvironment(_ref) {
+  let type = _ref.type,
+      names = _ref.names,
+      props = _ref.props,
+      handler = _ref.handler,
+      htmlBuilder = _ref.htmlBuilder,
+      mathmlBuilder = _ref.mathmlBuilder;
+  // Set default values of environments.
+  const data = {
+    type,
+    numArgs: props.numArgs || 0,
+    greediness: 1,
+    allowedInText: false,
+    numOptionalArgs: 0,
+    handler
+  };
+
+  for (let i = 0; i < names.length; ++i) {
+    // TODO: The value type of _environments should be a type union of all
+    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is
+    // an existential type.
+    // $FlowFixMe
+    _environments[names[i]] = data;
+  }
+
+  if (htmlBuilder) {
+    _htmlGroupBuilders[type] = htmlBuilder;
+  }
+
+  if (mathmlBuilder) {
+    _mathmlGroupBuilders[type] = mathmlBuilder;
+  }
+}
+
+function getHLines(parser) {
+  // Return an array. The array length = number of hlines.
+  // Each element in the array tells if the line is dashed.
+  const hlineInfo = [];
+  parser.consumeSpaces();
+  let nxt = parser.fetch().text;
+
+  while (nxt === "\\hline" || nxt === "\\hdashline") {
+    parser.consume();
+    hlineInfo.push(nxt === "\\hdashline");
+    parser.consumeSpaces();
+    nxt = parser.fetch().text;
+  }
+
+  return hlineInfo;
+}
+/**
+ * Parse the body of the environment, with rows delimited by \\ and
+ * columns delimited by &, and create a nested list in row-major order
+ * with one group per cell.  If given an optional argument style
+ * ("text", "display", etc.), then each cell is cast into that style.
+ */
+
+
+function parseArray(parser, _ref, style) {
+  let hskipBeforeAndAfter = _ref.hskipBeforeAndAfter,
+      addJot = _ref.addJot,
+      cols = _ref.cols,
+      arraystretch = _ref.arraystretch,
+      colSeparationType = _ref.colSeparationType;
+  // Parse body of array with \\ temporarily mapped to \cr
+  parser.gullet.beginGroup();
+  parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment
+
+  if (!arraystretch) {
+    const stretch = parser.gullet.expandMacroAsText("\\arraystretch");
+
+    if (stretch == null) {
+      // Default \arraystretch from lttab.dtx
+      arraystretch = 1;
+    } else {
+      arraystretch = parseFloat(stretch);
+
+      if (!arraystretch || arraystretch < 0) {
+        throw new ParseError(`Invalid \\arraystretch: ${stretch}`);
+      }
+    }
+  } // Start group for first cell
+
+
+  parser.gullet.beginGroup();
+  let row = [];
+  const body = [row];
+  const rowGaps = [];
+  const hLinesBeforeRow = []; // Test for \hline at the top of the array.
+
+  hLinesBeforeRow.push(getHLines(parser));
+
+  while (true) {
+    // eslint-disable-line no-constant-condition
+    // Parse each cell in its own group (namespace)
+    let cell = parser.parseExpression(false, "\\cr");
+    parser.gullet.endGroup();
+    parser.gullet.beginGroup();
+    cell = {
+      type: "ordgroup",
+      mode: parser.mode,
+      body: cell
+    };
+
+    if (style) {
+      cell = {
+        type: "styling",
+        mode: parser.mode,
+        style,
+        body: [cell]
+      };
+    }
+
+    row.push(cell);
+    const next = parser.fetch().text;
+
+    if (next === "&") {
+      parser.consume();
+    } else if (next === "\\end") {
+      // Arrays terminate newlines with `\crcr` which consumes a `\cr` if
+      // the last line is empty.
+      // NOTE: Currently, `cell` is the last item added into `row`.
+      if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) {
+        body.pop();
+      }
+
+      if (hLinesBeforeRow.length < body.length + 1) {
+        hLinesBeforeRow.push([]);
+      }
+
+      break;
+    } else if (next === "\\cr") {
+      const cr = assertNodeType(parser.parseFunction(), "cr");
+      rowGaps.push(cr.size); // check for \hline(s) following the row separator
+
+      hLinesBeforeRow.push(getHLines(parser));
+      row = [];
+      body.push(row);
+    } else {
+      throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken);
+    }
+  } // End cell group
+
+
+  parser.gullet.endGroup(); // End array group defining \\
+
+  parser.gullet.endGroup();
+  return {
+    type: "array",
+    mode: parser.mode,
+    addJot,
+    arraystretch,
+    body,
+    cols,
+    rowGaps,
+    hskipBeforeAndAfter,
+    hLinesBeforeRow,
+    colSeparationType
+  };
+} // Decides on a style for cells in an array according to whether the given
+// environment name starts with the letter 'd'.
+
+
+function dCellStyle(envName) {
+  if (envName.substr(0, 1) === "d") {
+    return "display";
+  } else {
+    return "text";
+  }
+}
+
+const htmlBuilder$3 = function htmlBuilder(group, options) {
+  let r;
+  let c;
+  const nr = group.body.length;
+  const hLinesBeforeRow = group.hLinesBeforeRow;
+  let nc = 0;
+  let body = new Array(nr);
+  const hlines = [];
+  const ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
+  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.
+  ); // Horizontal spacing
+
+  const pt = 1 / options.fontMetrics().ptPerEm;
+  let arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls
+
+  if (group.colSeparationType && group.colSeparationType === "small") {
+    // We're in a {smallmatrix}. Default column space is \thickspace,
+    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.
+    // But that needs adjustment because LaTeX applies \scriptstyle to the
+    // entire array, including the colspace, but this function applies
+    // \scriptstyle only inside each element.
+    const localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;
+    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);
+  } // Vertical spacing
+
+
+  const baselineskip = 12 * pt; // see size10.clo
+  // Default \jot from ltmath.dtx
+  // TODO(edemaine): allow overriding \jot via \setlength (#687)
+
+  const jot = 3 * pt;
+  const arrayskip = group.arraystretch * baselineskip;
+  const arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
+
+  const arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
+
+  let totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any.
+
+  function setHLinePos(hlinesInGap) {
+    for (let i = 0; i < hlinesInGap.length; ++i) {
+      if (i > 0) {
+        totalHeight += 0.25;
+      }
+
+      hlines.push({
+        pos: totalHeight,
+        isDashed: hlinesInGap[i]
+      });
+    }
+  }
+
+  setHLinePos(hLinesBeforeRow[0]);
+
+  for (r = 0; r < group.body.length; ++r) {
+    const inrow = group.body[r];
+    let height = arstrutHeight; // \@array adds an \@arstrut
+
+    let depth = arstrutDepth; // to each tow (via the template)
+
+    if (nc < inrow.length) {
+      nc = inrow.length;
+    }
+
+    const outrow = new Array(inrow.length);
+
+    for (c = 0; c < inrow.length; ++c) {
+      const elt = buildGroup(inrow[c], options);
+
+      if (depth < elt.depth) {
+        depth = elt.depth;
+      }
+
+      if (height < elt.height) {
+        height = elt.height;
+      }
+
+      outrow[c] = elt;
+    }
+
+    const rowGap = group.rowGaps[r];
+    let gap = 0;
+
+    if (rowGap) {
+      gap = calculateSize(rowGap, options);
+
+      if (gap > 0) {
+        // \@argarraycr
+        gap += arstrutDepth;
+
+        if (depth < gap) {
+          depth = gap; // \@xargarraycr
+        }
+
+        gap = 0;
+      }
+    } // In AMS multiline environments such as aligned and gathered, rows
+    // correspond to lines that have additional \jot added to the
+    // \baselineskip via \openup.
+
+
+    if (group.addJot) {
+      depth += jot;
+    }
+
+    outrow.height = height;
+    outrow.depth = depth;
+    totalHeight += height;
+    outrow.pos = totalHeight;
+    totalHeight += depth + gap; // \@yargarraycr
+
+    body[r] = outrow; // Set a position for \hline(s), if any.
+
+    setHLinePos(hLinesBeforeRow[r + 1]);
+  }
+
+  const offset = totalHeight / 2 + options.fontMetrics().axisHeight;
+  const colDescriptions = group.cols || [];
+  const cols = [];
+  let colSep;
+  let colDescrNum;
+
+  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column
+  // descriptions, so trailing separators don't get lost.
+  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {
+    let colDescr = colDescriptions[colDescrNum] || {};
+    let firstSeparator = true;
+
+    while (colDescr.type === "separator") {
+      // If there is more than one separator in a row, add a space
+      // between them.
+      if (!firstSeparator) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
+        cols.push(colSep);
+      }
+
+      if (colDescr.separator === "|" || colDescr.separator === ":") {
+        const lineType = colDescr.separator === "|" ? "solid" : "dashed";
+        const separator = buildCommon.makeSpan(["vertical-separator"], [], options);
+        separator.style.height = totalHeight + "em";
+        separator.style.borderRightWidth = `${ruleThickness}em`;
+        separator.style.borderRightStyle = lineType;
+        separator.style.margin = `0 -${ruleThickness / 2}em`;
+        separator.style.verticalAlign = -(totalHeight - offset) + "em";
+        cols.push(separator);
+      } else {
+        throw new ParseError("Invalid separator type: " + colDescr.separator);
+      }
+
+      colDescrNum++;
+      colDescr = colDescriptions[colDescrNum] || {};
+      firstSeparator = false;
+    }
+
+    if (c >= nc) {
+      continue;
+    }
+
+    let sepwidth;
+
+    if (c > 0 || group.hskipBeforeAndAfter) {
+      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
+
+      if (sepwidth !== 0) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = sepwidth + "em";
+        cols.push(colSep);
+      }
+    }
+
+    let col = [];
+
+    for (r = 0; r < nr; ++r) {
+      const row = body[r];
+      const elem = row[c];
+
+      if (!elem) {
+        continue;
+      }
+
+      const shift = row.pos - offset;
+      elem.depth = row.depth;
+      elem.height = row.height;
+      col.push({
+        type: "elem",
+        elem: elem,
+        shift: shift
+      });
+    }
+
+    col = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: col
+    }, options);
+    col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);
+    cols.push(col);
+
+    if (c < nc - 1 || group.hskipBeforeAndAfter) {
+      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
+
+      if (sepwidth !== 0) {
+        colSep = buildCommon.makeSpan(["arraycolsep"], []);
+        colSep.style.width = sepwidth + "em";
+        cols.push(colSep);
+      }
+    }
+  }
+
+  body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any.
+
+  if (hlines.length > 0) {
+    const line = buildCommon.makeLineSpan("hline", options, ruleThickness);
+    const dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);
+    const vListElems = [{
+      type: "elem",
+      elem: body,
+      shift: 0
+    }];
+
+    while (hlines.length > 0) {
+      const hline = hlines.pop();
+      const lineShift = hline.pos - offset;
+
+      if (hline.isDashed) {
+        vListElems.push({
+          type: "elem",
+          elem: dashes,
+          shift: lineShift
+        });
+      } else {
+        vListElems.push({
+          type: "elem",
+          elem: line,
+          shift: lineShift
+        });
+      }
+    }
+
+    body = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: vListElems
+    }, options);
+  }
+
+  return buildCommon.makeSpan(["mord"], [body], options);
+};
+
+const alignMap = {
+  c: "center ",
+  l: "left ",
+  r: "right "
+};
+
+const mathmlBuilder$3 = function mathmlBuilder(group, options) {
+  let table = new mathMLTree.MathNode("mtable", group.body.map(function (row) {
+    return new mathMLTree.MathNode("mtr", row.map(function (cell) {
+      return new mathMLTree.MathNode("mtd", [buildGroup$1(cell, options)]);
+    }));
+  })); // Set column alignment, row spacing, column spacing, and
+  // array lines by setting attributes on the table element.
+  // Set the row spacing. In MathML, we specify a gap distance.
+  // We do not use rowGap[] because MathML automatically increases
+  // cell height with the height/depth of the element content.
+  // LaTeX \arraystretch multiplies the row baseline-to-baseline distance.
+  // We simulate this by adding (arraystretch - 1)em to the gap. This
+  // does a reasonable job of adjusting arrays containing 1 em tall content.
+  // The 0.16 and 0.09 values are found emprically. They produce an array
+  // similar to LaTeX and in which content does not interfere with \hines.
+
+  const gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}
+  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
+  table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
+  // To place a line on an edge we'll use <menclose>, if necessary.
+
+  let menclose = "";
+  let align = "";
+
+  if (group.cols) {
+    // Find column alignment, column spacing, and  vertical lines.
+    const cols = group.cols;
+    let columnLines = "";
+    let prevTypeWasAlign = false;
+    let iStart = 0;
+    let iEnd = cols.length;
+
+    if (cols[0].type === "separator") {
+      menclose += "top ";
+      iStart = 1;
+    }
+
+    if (cols[cols.length - 1].type === "separator") {
+      menclose += "bottom ";
+      iEnd -= 1;
+    }
+
+    for (let i = iStart; i < iEnd; i++) {
+      if (cols[i].type === "align") {
+        align += alignMap[cols[i].align];
+
+        if (prevTypeWasAlign) {
+          columnLines += "none ";
+        }
+
+        prevTypeWasAlign = true;
+      } else if (cols[i].type === "separator") {
+        // MathML accepts only single lines between cells.
+        // So we read only the first of consecutive separators.
+        if (prevTypeWasAlign) {
+          columnLines += cols[i].separator === "|" ? "solid " : "dashed ";
+          prevTypeWasAlign = false;
+        }
+      }
+    }
+
+    table.setAttribute("columnalign", align.trim());
+
+    if (/[sd]/.test(columnLines)) {
+      table.setAttribute("columnlines", columnLines.trim());
+    }
+  } // Set column spacing.
+
+
+  if (group.colSeparationType === "align") {
+    const cols = group.cols || [];
+    let spacing = "";
+
+    for (let i = 1; i < cols.length; i++) {
+      spacing += i % 2 ? "0em " : "1em ";
+    }
+
+    table.setAttribute("columnspacing", spacing.trim());
+  } else if (group.colSeparationType === "alignat") {
+    table.setAttribute("columnspacing", "0em");
+  } else if (group.colSeparationType === "small") {
+    table.setAttribute("columnspacing", "0.2778em");
+  } else {
+    table.setAttribute("columnspacing", "1em");
+  } // Address \hline and \hdashline
+
+
+  let rowLines = "";
+  const hlines = group.hLinesBeforeRow;
+  menclose += hlines[0].length > 0 ? "left " : "";
+  menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
+
+  for (let i = 1; i < hlines.length - 1; i++) {
+    rowLines += hlines[i].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.
+    : hlines[i][0] ? "dashed " : "solid ";
+  }
+
+  if (/[sd]/.test(rowLines)) {
+    table.setAttribute("rowlines", rowLines.trim());
+  }
+
+  if (menclose !== "") {
+    table = new mathMLTree.MathNode("menclose", [table]);
+    table.setAttribute("notation", menclose.trim());
+  }
+
+  if (group.arraystretch && group.arraystretch < 1) {
+    // A small array. Wrap in scriptstyle so row gap is not too large.
+    table = new mathMLTree.MathNode("mstyle", [table]);
+    table.setAttribute("scriptlevel", "1");
+  }
+
+  return table;
+}; // Convenience function for aligned and alignedat environments.
+
+
+const alignedHandler = function alignedHandler(context, args) {
+  const cols = [];
+  const res = parseArray(context.parser, {
+    cols,
+    addJot: true
+  }, "display"); // Determining number of columns.
+  // 1. If the first argument is given, we use it as a number of columns,
+  //    and makes sure that each row doesn't exceed that number.
+  // 2. Otherwise, just count number of columns = maximum number
+  //    of cells in each row ("aligned" mode -- isAligned will be true).
+  //
+  // At the same time, prepend empty group {} at beginning of every second
+  // cell in each row (starting with second cell) so that operators become
+  // binary.  This behavior is implemented in amsmath's \start@aligned.
+
+  let numMaths;
+  let numCols = 0;
+  const emptyGroup = {
+    type: "ordgroup",
+    mode: context.mode,
+    body: []
+  };
+  const ordgroup = checkNodeType(args[0], "ordgroup");
+
+  if (ordgroup) {
+    let arg0 = "";
+
+    for (let i = 0; i < ordgroup.body.length; i++) {
+      const textord = assertNodeType(ordgroup.body[i], "textord");
+      arg0 += textord.text;
+    }
+
+    numMaths = Number(arg0);
+    numCols = numMaths * 2;
+  }
+
+  const isAligned = !numCols;
+  res.body.forEach(function (row) {
+    for (let i = 1; i < row.length; i += 2) {
+      // Modify ordgroup node within styling node
+      const styling = assertNodeType(row[i], "styling");
+      const ordgroup = assertNodeType(styling.body[0], "ordgroup");
+      ordgroup.body.unshift(emptyGroup);
+    }
+
+    if (!isAligned) {
+      // Case 1
+      const curMaths = row.length / 2;
+
+      if (numMaths < curMaths) {
+        throw new ParseError("Too many math in a row: " + `expected ${numMaths}, but got ${curMaths}`, row[0]);
+      }
+    } else if (numCols < row.length) {
+      // Case 2
+      numCols = row.length;
+    }
+  }); // Adjusting alignment.
+  // In aligned mode, we add one \qquad between columns;
+  // otherwise we add nothing.
+
+  for (let i = 0; i < numCols; ++i) {
+    let align = "r";
+    let pregap = 0;
+
+    if (i % 2 === 1) {
+      align = "l";
+    } else if (i > 0 && isAligned) {
+      // "aligned" mode.
+      pregap = 1; // add one \quad
+    }
+
+    cols[i] = {
+      type: "align",
+      align: align,
+      pregap: pregap,
+      postgap: 0
+    };
+  }
+
+  res.colSeparationType = isAligned ? "align" : "alignat";
+  return res;
+}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
+// is part of the source2e.pdf file of LaTeX2e source documentation.
+// {darray} is an {array} environment where cells are set in \displaystyle,
+// as defined in nccmath.sty.
+
+
+defineEnvironment({
+  type: "array",
+  names: ["array", "darray"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(context, args) {
+    // Since no types are specified above, the two possibilities are
+    // - The argument is wrapped in {} or [], in which case Parser's
+    //   parseGroup() returns an "ordgroup" wrapping some symbol node.
+    // - The argument is a bare symbol node.
+    const symNode = checkSymbolNodeType(args[0]);
+    const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
+    const cols = colalign.map(function (nde) {
+      const node = assertSymbolNodeType(nde);
+      const ca = node.text;
+
+      if ("lcr".indexOf(ca) !== -1) {
+        return {
+          type: "align",
+          align: ca
+        };
+      } else if (ca === "|") {
+        return {
+          type: "separator",
+          separator: "|"
+        };
+      } else if (ca === ":") {
+        return {
+          type: "separator",
+          separator: ":"
+        };
+      }
+
+      throw new ParseError("Unknown column alignment: " + ca, nde);
+    });
+    const res = {
+      cols,
+      hskipBeforeAndAfter: true // \@preamble in lttab.dtx
+
+    };
+    return parseArray(context.parser, res, dCellStyle(context.envName));
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // The matrix environments of amsmath builds on the array environment
+// of LaTeX, which is discussed above.
+
+defineEnvironment({
+  type: "array",
+  names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(context) {
+    const delimiters = {
+      "matrix": null,
+      "pmatrix": ["(", ")"],
+      "bmatrix": ["[", "]"],
+      "Bmatrix": ["\\{", "\\}"],
+      "vmatrix": ["|", "|"],
+      "Vmatrix": ["\\Vert", "\\Vert"]
+    }[context.envName]; // \hskip -\arraycolsep in amsmath
+
+    const payload = {
+      hskipBeforeAndAfter: false
+    };
+    const res = parseArray(context.parser, payload, dCellStyle(context.envName));
+    return delimiters ? {
+      type: "leftright",
+      mode: context.mode,
+      body: [res],
+      left: delimiters[0],
+      right: delimiters[1],
+      rightColor: undefined // \right uninfluenced by \color in array
+
+    } : res;
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+});
+defineEnvironment({
+  type: "array",
+  names: ["smallmatrix"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(context) {
+    const payload = {
+      arraystretch: 0.5
+    };
+    const res = parseArray(context.parser, payload, "script");
+    res.colSeparationType = "small";
+    return res;
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+});
+defineEnvironment({
+  type: "array",
+  names: ["subarray"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(context, args) {
+    // Parsing of {subarray} is similar to {array}
+    const symNode = checkSymbolNodeType(args[0]);
+    const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
+    const cols = colalign.map(function (nde) {
+      const node = assertSymbolNodeType(nde);
+      const ca = node.text; // {subarray} only recognizes "l" & "c"
+
+      if ("lc".indexOf(ca) !== -1) {
+        return {
+          type: "align",
+          align: ca
+        };
+      }
+
+      throw new ParseError("Unknown column alignment: " + ca, nde);
+    });
+
+    if (cols.length > 1) {
+      throw new ParseError("{subarray} can contain only one column");
+    }
+
+    let res = {
+      cols,
+      hskipBeforeAndAfter: false,
+      arraystretch: 0.5
+    };
+    res = parseArray(context.parser, res, "script");
+
+    if (res.body[0].length > 1) {
+      throw new ParseError("{subarray} can contain only one column");
+    }
+
+    return res;
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // A cases environment (in amsmath.sty) is almost equivalent to
+// \def\arraystretch{1.2}%
+// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
+// {dcases} is a {cases} environment where cells are set in \displaystyle,
+// as defined in mathtools.sty.
+
+defineEnvironment({
+  type: "array",
+  names: ["cases", "dcases"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(context) {
+    const payload = {
+      arraystretch: 1.2,
+      cols: [{
+        type: "align",
+        align: "l",
+        pregap: 0,
+        // TODO(kevinb) get the current style.
+        // For now we use the metrics for TEXT style which is what we were
+        // doing before.  Before attempting to get the current style we
+        // should look at TeX's behavior especially for \over and matrices.
+        postgap: 1.0
+        /* 1em quad */
+
+      }, {
+        type: "align",
+        align: "l",
+        pregap: 0,
+        postgap: 0
+      }]
+    };
+    const res = parseArray(context.parser, payload, dCellStyle(context.envName));
+    return {
+      type: "leftright",
+      mode: context.mode,
+      body: [res],
+      left: "\\{",
+      right: ".",
+      rightColor: undefined
+    };
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // An aligned environment is like the align* environment
+// except it operates within math mode.
+// Note that we assume \nomallineskiplimit to be zero,
+// so that \strut@ is the same as \strut.
+
+defineEnvironment({
+  type: "array",
+  names: ["aligned"],
+  props: {
+    numArgs: 0
+  },
+  handler: alignedHandler,
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // A gathered environment is like an array environment with one centered
+// column, but where rows are considered lines so get \jot line spacing
+// and contents are set in \displaystyle.
+
+defineEnvironment({
+  type: "array",
+  names: ["gathered"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(context) {
+    const res = {
+      cols: [{
+        type: "align",
+        align: "c"
+      }],
+      addJot: true
+    };
+    return parseArray(context.parser, res, "display");
+  },
+
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // alignat environment is like an align environment, but one must explicitly
+// specify maximum number of columns in each row, and can adjust spacing between
+// each columns.
+
+defineEnvironment({
+  type: "array",
+  names: ["alignedat"],
+  // One for numbered and for unnumbered;
+  // but, KaTeX doesn't supports math numbering yet,
+  // they make no difference for now.
+  props: {
+    numArgs: 1
+  },
+  handler: alignedHandler,
+  htmlBuilder: htmlBuilder$3,
+  mathmlBuilder: mathmlBuilder$3
+}); // Catch \hline outside array environment
+
+defineFunction({
+  type: "text",
+  // Doesn't matter what this is.
+  names: ["\\hline", "\\hdashline"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: true
+  },
+
+  handler(context, args) {
+    throw new ParseError(`${context.funcName} valid only within array environment`);
+  }
+
+});
+
+const environments = _environments;
+
+// defineEnvironment definitions.
+// $FlowFixMe, "environment" handler returns an environment ParseNode
+
+defineFunction({
+  type: "environment",
+  names: ["\\begin", "\\end"],
+  props: {
+    numArgs: 1,
+    argTypes: ["text"]
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const nameGroup = args[0];
+
+    if (nameGroup.type !== "ordgroup") {
+      throw new ParseError("Invalid environment name", nameGroup);
+    }
+
+    let envName = "";
+
+    for (let i = 0; i < nameGroup.body.length; ++i) {
+      envName += assertNodeType(nameGroup.body[i], "textord").text;
+    }
+
+    if (funcName === "\\begin") {
+      // begin...end is similar to left...right
+      if (!environments.hasOwnProperty(envName)) {
+        throw new ParseError("No such environment: " + envName, nameGroup);
+      } // Build the environment object. Arguments and other information will
+      // be made available to the begin and end methods using properties.
+
+
+      const env = environments[envName];
+
+      const _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env),
+            args = _parser$parseArgument.args,
+            optArgs = _parser$parseArgument.optArgs;
+
+      const context = {
+        mode: parser.mode,
+        envName,
+        parser
+      };
+      const result = env.handler(context, args, optArgs);
+      parser.expect("\\end", false);
+      const endNameToken = parser.nextToken;
+      const end = assertNodeType(parser.parseFunction(), "environment");
+
+      if (end.name !== envName) {
+        throw new ParseError(`Mismatch: \\begin{${envName}} matched by \\end{${end.name}}`, endNameToken);
+      }
+
+      return result;
+    }
+
+    return {
+      type: "environment",
+      mode: parser.mode,
+      name: envName,
+      nameGroup
+    };
+  }
+
+});
+
+const makeSpan$2 = buildCommon.makeSpan;
+
+function htmlBuilder$4(group, options) {
+  const elements = buildExpression(group.body, options, true);
+  return makeSpan$2([group.mclass], elements, options);
+}
+
+function mathmlBuilder$4(group, options) {
+  let node;
+  const inner = buildExpression$1(group.body, options);
+
+  if (group.mclass === "minner") {
+    return mathMLTree.newDocumentFragment(inner);
+  } else if (group.mclass === "mord") {
+    if (group.isCharacterBox) {
+      node = inner[0];
+      node.type = "mi";
+    } else {
+      node = new mathMLTree.MathNode("mi", inner);
+    }
+  } else {
+    if (group.isCharacterBox) {
+      node = inner[0];
+      node.type = "mo";
+    } else {
+      node = new mathMLTree.MathNode("mo", inner);
+    } // Set spacing based on what is the most likely adjacent atom type.
+    // See TeXbook p170.
+
+
+    if (group.mclass === "mbin") {
+      node.attributes.lspace = "0.22em"; // medium space
+
+      node.attributes.rspace = "0.22em";
+    } else if (group.mclass === "mpunct") {
+      node.attributes.lspace = "0em";
+      node.attributes.rspace = "0.17em"; // thinspace
+    } else if (group.mclass === "mopen" || group.mclass === "mclose") {
+      node.attributes.lspace = "0em";
+      node.attributes.rspace = "0em";
+    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.
+    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo
+
+  }
+
+  return node;
+} // Math class commands except \mathop
+
+
+defineFunction({
+  type: "mclass",
+  names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const body = args[0];
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: "m" + funcName.substr(5),
+      // TODO(kevinb): don't prefix with 'm'
+      body: ordargument(body),
+      isCharacterBox: utils.isCharacterBox(body)
+    };
+  },
+
+  htmlBuilder: htmlBuilder$4,
+  mathmlBuilder: mathmlBuilder$4
+});
+const binrelClass = arg => {
+  // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.
+  // (by rendering separately and with {}s before and after, and measuring
+  // the change in spacing).  We'll do roughly the same by detecting the
+  // atom type directly.
+  const atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg;
+
+  if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) {
+    return "m" + atom.family;
+  } else {
+    return "mord";
+  }
+}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.
+// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX.
+
+defineFunction({
+  type: "mclass",
+  names: ["\\@binrel"],
+  props: {
+    numArgs: 2
+  },
+
+  handler(_ref2, args) {
+    let parser = _ref2.parser;
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: binrelClass(args[0]),
+      body: [args[1]],
+      isCharacterBox: utils.isCharacterBox(args[1])
+    };
+  }
+
+}); // Build a relation or stacked op by placing one symbol on top of another
+
+defineFunction({
+  type: "mclass",
+  names: ["\\stackrel", "\\overset", "\\underset"],
+  props: {
+    numArgs: 2
+  },
+
+  handler(_ref3, args) {
+    let parser = _ref3.parser,
+        funcName = _ref3.funcName;
+    const baseArg = args[1];
+    const shiftedArg = args[0];
+    let mclass;
+
+    if (funcName !== "\\stackrel") {
+      // LaTeX applies \binrel spacing to \overset and \underset.
+      mclass = binrelClass(baseArg);
+    } else {
+      mclass = "mrel"; // for \stackrel
+    }
+
+    const baseOp = {
+      type: "op",
+      mode: baseArg.mode,
+      limits: true,
+      alwaysHandleSupSub: true,
+      parentIsSupSub: false,
+      symbol: false,
+      suppressBaseShift: funcName !== "\\stackrel",
+      body: ordargument(baseArg)
+    };
+    const supsub = {
+      type: "supsub",
+      mode: shiftedArg.mode,
+      base: baseOp,
+      sup: funcName === "\\underset" ? null : shiftedArg,
+      sub: funcName === "\\underset" ? shiftedArg : null
+    };
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass,
+      body: [supsub],
+      isCharacterBox: utils.isCharacterBox(supsub)
+    };
+  },
+
+  htmlBuilder: htmlBuilder$4,
+  mathmlBuilder: mathmlBuilder$4
+});
+
+// TODO(kevinb): implement \\sl and \\sc
+
+const htmlBuilder$5 = (group, options) => {
+  const font = group.font;
+  const newOptions = options.withFont(font);
+  return buildGroup(group.body, newOptions);
+};
+
+const mathmlBuilder$5 = (group, options) => {
+  const font = group.font;
+  const newOptions = options.withFont(font);
+  return buildGroup$1(group.body, newOptions);
+};
+
+const fontAliases = {
+  "\\Bbb": "\\mathbb",
+  "\\bold": "\\mathbf",
+  "\\frak": "\\mathfrak",
+  "\\bm": "\\boldsymbol"
+};
+defineFunction({
+  type: "font",
+  names: [// styles, except \boldsymbol defined below
+  "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families
+  "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below
+  "\\Bbb", "\\bold", "\\frak"],
+  props: {
+    numArgs: 1,
+    greediness: 2
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const body = args[0];
+    let func = funcName;
+
+    if (func in fontAliases) {
+      func = fontAliases[func];
+    }
+
+    return {
+      type: "font",
+      mode: parser.mode,
+      font: func.slice(1),
+      body
+    };
+  },
+  htmlBuilder: htmlBuilder$5,
+  mathmlBuilder: mathmlBuilder$5
+});
+defineFunction({
+  type: "mclass",
+  names: ["\\boldsymbol", "\\bm"],
+  props: {
+    numArgs: 1,
+    greediness: 2
+  },
+  handler: (_ref2, args) => {
+    let parser = _ref2.parser;
+    const body = args[0];
+    const isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the
+    // argument's bin|rel|ord status
+
+    return {
+      type: "mclass",
+      mode: parser.mode,
+      mclass: binrelClass(body),
+      body: [{
+        type: "font",
+        mode: parser.mode,
+        font: "boldsymbol",
+        body
+      }],
+      isCharacterBox: isCharacterBox
+    };
+  }
+}); // Old font changing functions
+
+defineFunction({
+  type: "font",
+  names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: (_ref3, args) => {
+    let parser = _ref3.parser,
+        funcName = _ref3.funcName,
+        breakOnTokenText = _ref3.breakOnTokenText;
+    const mode = parser.mode;
+    const body = parser.parseExpression(true, breakOnTokenText);
+    const style = `math${funcName.slice(1)}`;
+    return {
+      type: "font",
+      mode: mode,
+      font: style,
+      body: {
+        type: "ordgroup",
+        mode: parser.mode,
+        body
+      }
+    };
+  },
+  htmlBuilder: htmlBuilder$5,
+  mathmlBuilder: mathmlBuilder$5
+});
+
+const adjustStyle = (size, originalStyle) => {
+  // Figure out what style this fraction should be in based on the
+  // function used
+  let style = originalStyle;
+
+  if (size === "display") {
+    // Get display style as a default.
+    // If incoming style is sub/sup, use style.text() to get correct size.
+    style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;
+  } else if (size === "text" && style.size === Style$1.DISPLAY.size) {
+    // We're in a \tfrac but incoming style is displaystyle, so:
+    style = Style$1.TEXT;
+  } else if (size === "script") {
+    style = Style$1.SCRIPT;
+  } else if (size === "scriptscript") {
+    style = Style$1.SCRIPTSCRIPT;
+  }
+
+  return style;
+};
+
+const htmlBuilder$6 = (group, options) => {
+  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
+  const style = adjustStyle(group.size, options.style);
+  const nstyle = style.fracNum();
+  const dstyle = style.fracDen();
+  let newOptions;
+  newOptions = options.havingStyle(nstyle);
+  const numerm = buildGroup(group.numer, newOptions, options);
+
+  if (group.continued) {
+    // \cfrac inserts a \strut into the numerator.
+    // Get \strut dimensions from TeXbook page 353.
+    const hStrut = 8.5 / options.fontMetrics().ptPerEm;
+    const dStrut = 3.5 / options.fontMetrics().ptPerEm;
+    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
+    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
+  }
+
+  newOptions = options.havingStyle(dstyle);
+  const denomm = buildGroup(group.denom, newOptions, options);
+  let rule;
+  let ruleWidth;
+  let ruleSpacing;
+
+  if (group.hasBarLine) {
+    if (group.barSize) {
+      ruleWidth = calculateSize(group.barSize, options);
+      rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth);
+    } else {
+      rule = buildCommon.makeLineSpan("frac-line", options);
+    }
+
+    ruleWidth = rule.height;
+    ruleSpacing = rule.height;
+  } else {
+    rule = null;
+    ruleWidth = 0;
+    ruleSpacing = options.fontMetrics().defaultRuleThickness;
+  } // Rule 15b
+
+
+  let numShift;
+  let clearance;
+  let denomShift;
+
+  if (style.size === Style$1.DISPLAY.size || group.size === "display") {
+    numShift = options.fontMetrics().num1;
+
+    if (ruleWidth > 0) {
+      clearance = 3 * ruleSpacing;
+    } else {
+      clearance = 7 * ruleSpacing;
+    }
+
+    denomShift = options.fontMetrics().denom1;
+  } else {
+    if (ruleWidth > 0) {
+      numShift = options.fontMetrics().num2;
+      clearance = ruleSpacing;
+    } else {
+      numShift = options.fontMetrics().num3;
+      clearance = 3 * ruleSpacing;
+    }
+
+    denomShift = options.fontMetrics().denom2;
+  }
+
+  let frac;
+
+  if (!rule) {
+    // Rule 15c
+    const candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
+
+    if (candidateClearance < clearance) {
+      numShift += 0.5 * (clearance - candidateClearance);
+      denomShift += 0.5 * (clearance - candidateClearance);
+    }
+
+    frac = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [{
+        type: "elem",
+        elem: denomm,
+        shift: denomShift
+      }, {
+        type: "elem",
+        elem: numerm,
+        shift: -numShift
+      }]
+    }, options);
+  } else {
+    // Rule 15d
+    const axisHeight = options.fontMetrics().axisHeight;
+
+    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
+      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
+    }
+
+    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
+      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
+    }
+
+    const midShift = -(axisHeight - 0.5 * ruleWidth);
+    frac = buildCommon.makeVList({
+      positionType: "individualShift",
+      children: [{
+        type: "elem",
+        elem: denomm,
+        shift: denomShift
+      }, {
+        type: "elem",
+        elem: rule,
+        shift: midShift
+      }, {
+        type: "elem",
+        elem: numerm,
+        shift: -numShift
+      }]
+    }, options);
+  } // Since we manually change the style sometimes (with \dfrac or \tfrac),
+  // account for the possible size change here.
+
+
+  newOptions = options.havingStyle(style);
+  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
+  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e
+
+  let delimSize;
+
+  if (style.size === Style$1.DISPLAY.size) {
+    delimSize = options.fontMetrics().delim1;
+  } else {
+    delimSize = options.fontMetrics().delim2;
+  }
+
+  let leftDelim;
+  let rightDelim;
+
+  if (group.leftDelim == null) {
+    leftDelim = makeNullDelimiter(options, ["mopen"]);
+  } else {
+    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]);
+  }
+
+  if (group.continued) {
+    rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac
+  } else if (group.rightDelim == null) {
+    rightDelim = makeNullDelimiter(options, ["mclose"]);
+  } else {
+    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]);
+  }
+
+  return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options);
+};
+
+const mathmlBuilder$6 = (group, options) => {
+  let node = new mathMLTree.MathNode("mfrac", [buildGroup$1(group.numer, options), buildGroup$1(group.denom, options)]);
+
+  if (!group.hasBarLine) {
+    node.setAttribute("linethickness", "0px");
+  } else if (group.barSize) {
+    const ruleWidth = calculateSize(group.barSize, options);
+    node.setAttribute("linethickness", ruleWidth + "em");
+  }
+
+  const style = adjustStyle(group.size, options.style);
+
+  if (style.size !== options.style.size) {
+    node = new mathMLTree.MathNode("mstyle", [node]);
+    const isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false";
+    node.setAttribute("displaystyle", isDisplay);
+    node.setAttribute("scriptlevel", "0");
+  }
+
+  if (group.leftDelim != null || group.rightDelim != null) {
+    const withDelims = [];
+
+    if (group.leftDelim != null) {
+      const leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]);
+      leftOp.setAttribute("fence", "true");
+      withDelims.push(leftOp);
+    }
+
+    withDelims.push(node);
+
+    if (group.rightDelim != null) {
+      const rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]);
+      rightOp.setAttribute("fence", "true");
+      withDelims.push(rightOp);
+    }
+
+    return makeRow(withDelims);
+  }
+
+  return node;
+};
+
+defineFunction({
+  type: "genfrac",
+  names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly
+  "\\\\bracefrac", "\\\\brackfrac"],
+  props: {
+    numArgs: 2,
+    greediness: 2
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const numer = args[0];
+    const denom = args[1];
+    let hasBarLine;
+    let leftDelim = null;
+    let rightDelim = null;
+    let size = "auto";
+
+    switch (funcName) {
+      case "\\cfrac":
+      case "\\dfrac":
+      case "\\frac":
+      case "\\tfrac":
+        hasBarLine = true;
+        break;
+
+      case "\\\\atopfrac":
+        hasBarLine = false;
+        break;
+
+      case "\\dbinom":
+      case "\\binom":
+      case "\\tbinom":
+        hasBarLine = false;
+        leftDelim = "(";
+        rightDelim = ")";
+        break;
+
+      case "\\\\bracefrac":
+        hasBarLine = false;
+        leftDelim = "\\{";
+        rightDelim = "\\}";
+        break;
+
+      case "\\\\brackfrac":
+        hasBarLine = false;
+        leftDelim = "[";
+        rightDelim = "]";
+        break;
+
+      default:
+        throw new Error("Unrecognized genfrac command");
+    }
+
+    switch (funcName) {
+      case "\\cfrac":
+      case "\\dfrac":
+      case "\\dbinom":
+        size = "display";
+        break;
+
+      case "\\tfrac":
+      case "\\tbinom":
+        size = "text";
+        break;
+    }
+
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      continued: funcName === "\\cfrac",
+      numer,
+      denom,
+      hasBarLine,
+      leftDelim,
+      rightDelim,
+      size,
+      barSize: null
+    };
+  },
+  htmlBuilder: htmlBuilder$6,
+  mathmlBuilder: mathmlBuilder$6
+}); // Infix generalized fractions -- these are not rendered directly, but replaced
+// immediately by one of the variants above.
+
+defineFunction({
+  type: "infix",
+  names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
+  props: {
+    numArgs: 0,
+    infix: true
+  },
+
+  handler(_ref2) {
+    let parser = _ref2.parser,
+        funcName = _ref2.funcName,
+        token = _ref2.token;
+    let replaceWith;
+
+    switch (funcName) {
+      case "\\over":
+        replaceWith = "\\frac";
+        break;
+
+      case "\\choose":
+        replaceWith = "\\binom";
+        break;
+
+      case "\\atop":
+        replaceWith = "\\\\atopfrac";
+        break;
+
+      case "\\brace":
+        replaceWith = "\\\\bracefrac";
+        break;
+
+      case "\\brack":
+        replaceWith = "\\\\brackfrac";
+        break;
+
+      default:
+        throw new Error("Unrecognized infix genfrac command");
+    }
+
+    return {
+      type: "infix",
+      mode: parser.mode,
+      replaceWith,
+      token
+    };
+  }
+
+});
+const stylArray = ["display", "text", "script", "scriptscript"];
+
+const delimFromValue = function delimFromValue(delimString) {
+  let delim = null;
+
+  if (delimString.length > 0) {
+    delim = delimString;
+    delim = delim === "." ? null : delim;
+  }
+
+  return delim;
+};
+
+defineFunction({
+  type: "genfrac",
+  names: ["\\genfrac"],
+  props: {
+    numArgs: 6,
+    greediness: 6,
+    argTypes: ["math", "math", "size", "text", "math", "math"]
+  },
+
+  handler(_ref3, args) {
+    let parser = _ref3.parser;
+    const numer = args[4];
+    const denom = args[5]; // Look into the parse nodes to get the desired delimiters.
+
+    let leftNode = checkNodeType(args[0], "atom");
+
+    if (leftNode) {
+      leftNode = assertAtomFamily(args[0], "open");
+    }
+
+    const leftDelim = leftNode ? delimFromValue(leftNode.text) : null;
+    let rightNode = checkNodeType(args[1], "atom");
+
+    if (rightNode) {
+      rightNode = assertAtomFamily(args[1], "close");
+    }
+
+    const rightDelim = rightNode ? delimFromValue(rightNode.text) : null;
+    const barNode = assertNodeType(args[2], "size");
+    let hasBarLine;
+    let barSize = null;
+
+    if (barNode.isBlank) {
+      // \genfrac acts differently than \above.
+      // \genfrac treats an empty size group as a signal to use a
+      // standard bar size. \above would see size = 0 and omit the bar.
+      hasBarLine = true;
+    } else {
+      barSize = barNode.value;
+      hasBarLine = barSize.number > 0;
+    } // Find out if we want displaystyle, textstyle, etc.
+
+
+    let size = "auto";
+    let styl = checkNodeType(args[3], "ordgroup");
+
+    if (styl) {
+      if (styl.body.length > 0) {
+        const textOrd = assertNodeType(styl.body[0], "textord");
+        size = stylArray[Number(textOrd.text)];
+      }
+    } else {
+      styl = assertNodeType(args[3], "textord");
+      size = stylArray[Number(styl.text)];
+    }
+
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      numer,
+      denom,
+      continued: false,
+      hasBarLine,
+      barSize,
+      leftDelim,
+      rightDelim,
+      size
+    };
+  },
+
+  htmlBuilder: htmlBuilder$6,
+  mathmlBuilder: mathmlBuilder$6
+}); // \above is an infix fraction that also defines a fraction bar size.
+
+defineFunction({
+  type: "infix",
+  names: ["\\above"],
+  props: {
+    numArgs: 1,
+    argTypes: ["size"],
+    infix: true
+  },
+
+  handler(_ref4, args) {
+    let parser = _ref4.parser,
+        funcName = _ref4.funcName,
+        token = _ref4.token;
+    return {
+      type: "infix",
+      mode: parser.mode,
+      replaceWith: "\\\\abovefrac",
+      size: assertNodeType(args[0], "size").value,
+      token
+    };
+  }
+
+});
+defineFunction({
+  type: "genfrac",
+  names: ["\\\\abovefrac"],
+  props: {
+    numArgs: 3,
+    argTypes: ["math", "size", "math"]
+  },
+  handler: (_ref5, args) => {
+    let parser = _ref5.parser,
+        funcName = _ref5.funcName;
+    const numer = args[0];
+    const barSize = assert(assertNodeType(args[1], "infix").size);
+    const denom = args[2];
+    const hasBarLine = barSize.number > 0;
+    return {
+      type: "genfrac",
+      mode: parser.mode,
+      numer,
+      denom,
+      continued: false,
+      hasBarLine,
+      barSize,
+      leftDelim: null,
+      rightDelim: null,
+      size: "auto"
+    };
+  },
+  htmlBuilder: htmlBuilder$6,
+  mathmlBuilder: mathmlBuilder$6
+});
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but
+const htmlBuilder$7 = (grp, options) => {
+  const style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node.
+
+  let supSubGroup;
+  let group;
+  const supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // Ref: LaTeX source2e: }}}}\limits}
+    // i.e. LaTeX treats the brace similar to an op and passes it
+    // with \limits, so we need to assign supsub style.
+    supSubGroup = supSub.sup ? buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildGroup(supSub.sub, options.havingStyle(style.sub()), options);
+    group = assertNodeType(supSub.base, "horizBrace");
+  } else {
+    group = assertNodeType(grp, "horizBrace");
+  } // Build the base group
+
+
+  const body = buildGroup(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element
+
+  const braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓
+  // This first vlist contains the content and the brace:   equation
+
+  let vlist;
+
+  if (group.isOver) {
+    vlist = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: body
+      }, {
+        type: "kern",
+        size: 0.1
+      }, {
+        type: "elem",
+        elem: braceBody
+      }]
+    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+    vlist.children[0].children[0].children[1].classes.push("svg-align");
+  } else {
+    vlist = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: body.depth + 0.1 + braceBody.height,
+      children: [{
+        type: "elem",
+        elem: braceBody
+      }, {
+        type: "kern",
+        size: 0.1
+      }, {
+        type: "elem",
+        elem: body
+      }]
+    }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList.
+
+    vlist.children[0].children[0].children[0].classes.push("svg-align");
+  }
+
+  if (supSubGroup) {
+    // To write the supsub, wrap the first vlist in another vlist:
+    // They can't all go in the same vlist, because the note might be
+    // wider than the equation. We want the equation to control the
+    // brace width.
+    //      note          long note           long note
+    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓
+    //    equation           eqn                 eqn
+    const vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
+
+    if (group.isOver) {
+      vlist = buildCommon.makeVList({
+        positionType: "firstBaseline",
+        children: [{
+          type: "elem",
+          elem: vSpan
+        }, {
+          type: "kern",
+          size: 0.2
+        }, {
+          type: "elem",
+          elem: supSubGroup
+        }]
+      }, options);
+    } else {
+      vlist = buildCommon.makeVList({
+        positionType: "bottom",
+        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,
+        children: [{
+          type: "elem",
+          elem: supSubGroup
+        }, {
+          type: "kern",
+          size: 0.2
+        }, {
+          type: "elem",
+          elem: vSpan
+        }]
+      }, options);
+    }
+  }
+
+  return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options);
+};
+
+const mathmlBuilder$7 = (group, options) => {
+  const accentNode = stretchy.mathMLnode(group.label);
+  return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup$1(group.base, options), accentNode]);
+}; // Horizontal stretchy braces
+
+
+defineFunction({
+  type: "horizBrace",
+  names: ["\\overbrace", "\\underbrace"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    return {
+      type: "horizBrace",
+      mode: parser.mode,
+      label: funcName,
+      isOver: /^\\over/.test(funcName),
+      base: args[0]
+    };
+  },
+
+  htmlBuilder: htmlBuilder$7,
+  mathmlBuilder: mathmlBuilder$7
+});
+
+defineFunction({
+  type: "href",
+  names: ["\\href"],
+  props: {
+    numArgs: 2,
+    argTypes: ["url", "original"],
+    allowedInText: true
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser;
+    const body = args[1];
+    const href = assertNodeType(args[0], "url").url;
+
+    if (!parser.settings.isTrusted({
+      command: "\\href",
+      url: href
+    })) {
+      return parser.formatUnsupportedCmd("\\href");
+    }
+
+    return {
+      type: "href",
+      mode: parser.mode,
+      href,
+      body: ordargument(body)
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const elements = buildExpression(group.body, options, false);
+    return buildCommon.makeAnchor(group.href, [], elements, options);
+  },
+  mathmlBuilder: (group, options) => {
+    let math = buildExpressionRow(group.body, options);
+
+    if (!(math instanceof MathNode)) {
+      math = new MathNode("mrow", [math]);
+    }
+
+    math.setAttribute("href", group.href);
+    return math;
+  }
+});
+defineFunction({
+  type: "href",
+  names: ["\\url"],
+  props: {
+    numArgs: 1,
+    argTypes: ["url"],
+    allowedInText: true
+  },
+  handler: (_ref2, args) => {
+    let parser = _ref2.parser;
+    const href = assertNodeType(args[0], "url").url;
+
+    if (!parser.settings.isTrusted({
+      command: "\\url",
+      url: href
+    })) {
+      return parser.formatUnsupportedCmd("\\url");
+    }
+
+    const chars = [];
+
+    for (let i = 0; i < href.length; i++) {
+      let c = href[i];
+
+      if (c === "~") {
+        c = "\\textasciitilde";
+      }
+
+      chars.push({
+        type: "textord",
+        mode: "text",
+        text: c
+      });
+    }
+
+    const body = {
+      type: "text",
+      mode: parser.mode,
+      font: "\\texttt",
+      body: chars
+    };
+    return {
+      type: "href",
+      mode: parser.mode,
+      href,
+      body: ordargument(body)
+    };
+  }
+});
+
+defineFunction({
+  type: "htmlmathml",
+  names: ["\\html@mathml"],
+  props: {
+    numArgs: 2,
+    allowedInText: true
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser;
+    return {
+      type: "htmlmathml",
+      mode: parser.mode,
+      html: ordargument(args[0]),
+      mathml: ordargument(args[1])
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const elements = buildExpression(group.html, options, false);
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: (group, options) => {
+    return buildExpressionRow(group.mathml, options);
+  }
+});
+
+const sizeData = function sizeData(str) {
+  if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) {
+    // str is a number with no unit specified.
+    // default unit is bp, per graphix package.
+    return {
+      number: +str,
+      unit: "bp"
+    };
+  } else {
+    const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str);
+
+    if (!match) {
+      throw new ParseError("Invalid size: '" + str + "' in \\includegraphics");
+    }
+
+    const data = {
+      number: +(match[1] + match[2]),
+      // sign + magnitude, cast to number
+      unit: match[3]
+    };
+
+    if (!validUnit(data)) {
+      throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics.");
+    }
+
+    return data;
+  }
+};
+
+defineFunction({
+  type: "includegraphics",
+  names: ["\\includegraphics"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1,
+    argTypes: ["raw", "url"],
+    allowedInText: false
+  },
+  handler: (_ref, args, optArgs) => {
+    let parser = _ref.parser;
+    let width = {
+      number: 0,
+      unit: "em"
+    };
+    let height = {
+      number: 0.9,
+      unit: "em"
+    }; // sorta character sized.
+
+    let totalheight = {
+      number: 0,
+      unit: "em"
+    };
+    let alt = "";
+
+    if (optArgs[0]) {
+      const attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.
+
+      const attributes = attributeStr.split(",");
+
+      for (let i = 0; i < attributes.length; i++) {
+        const keyVal = attributes[i].split("=");
+
+        if (keyVal.length === 2) {
+          const str = keyVal[1].trim();
+
+          switch (keyVal[0].trim()) {
+            case "alt":
+              alt = str;
+              break;
+
+            case "width":
+              width = sizeData(str);
+              break;
+
+            case "height":
+              height = sizeData(str);
+              break;
+
+            case "totalheight":
+              totalheight = sizeData(str);
+              break;
+
+            default:
+              throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
+          }
+        }
+      }
+    }
+
+    const src = assertNodeType(args[0], "url").url;
+
+    if (alt === "") {
+      // No alt given. Use the file name. Strip away the path.
+      alt = src;
+      alt = alt.replace(/^.*[\\/]/, '');
+      alt = alt.substring(0, alt.lastIndexOf('.'));
+    }
+
+    if (!parser.settings.isTrusted({
+      command: "\\includegraphics",
+      url: src
+    })) {
+      return parser.formatUnsupportedCmd("\\includegraphics");
+    }
+
+    return {
+      type: "includegraphics",
+      mode: parser.mode,
+      alt: alt,
+      width: width,
+      height: height,
+      totalheight: totalheight,
+      src: src
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const height = calculateSize(group.height, options);
+    let depth = 0;
+
+    if (group.totalheight.number > 0) {
+      depth = calculateSize(group.totalheight, options) - height;
+      depth = Number(depth.toFixed(2));
+    }
+
+    let width = 0;
+
+    if (group.width.number > 0) {
+      width = calculateSize(group.width, options);
+    }
+
+    const style = {
+      height: height + depth + "em"
+    };
+
+    if (width > 0) {
+      style.width = width + "em";
+    }
+
+    if (depth > 0) {
+      style.verticalAlign = -depth + "em";
+    }
+
+    const node = new Img(group.src, group.alt, style);
+    node.height = height;
+    node.depth = depth;
+    return node;
+  },
+  mathmlBuilder: (group, options) => {
+    const node = new mathMLTree.MathNode("mglyph", []);
+    node.setAttribute("alt", group.alt);
+    const height = calculateSize(group.height, options);
+    let depth = 0;
+
+    if (group.totalheight.number > 0) {
+      depth = calculateSize(group.totalheight, options) - height;
+      depth = depth.toFixed(2);
+      node.setAttribute("valign", "-" + depth + "em");
+    }
+
+    node.setAttribute("height", height + depth + "em");
+
+    if (group.width.number > 0) {
+      const width = calculateSize(group.width, options);
+      node.setAttribute("width", width + "em");
+    }
+
+    node.setAttribute("src", group.src);
+    return node;
+  }
+});
+
+// Horizontal spacing commands
+
+defineFunction({
+  type: "kern",
+  names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
+  props: {
+    numArgs: 1,
+    argTypes: ["size"],
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const size = assertNodeType(args[0], "size");
+
+    if (parser.settings.strict) {
+      const mathFunction = funcName[1] === 'm'; // \mkern, \mskip
+
+      const muUnit = size.value.unit === 'mu';
+
+      if (mathFunction) {
+        if (!muUnit) {
+          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} supports only mu units, ` + `not ${size.value.unit} units`);
+        }
+
+        if (parser.mode !== "math") {
+          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} works only in math mode`);
+        }
+      } else {
+        // !mathFunction
+        if (muUnit) {
+          parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} doesn't support mu units`);
+        }
+      }
+    }
+
+    return {
+      type: "kern",
+      mode: parser.mode,
+      dimension: size.value
+    };
+  },
+
+  htmlBuilder(group, options) {
+    return buildCommon.makeGlue(group.dimension, options);
+  },
+
+  mathmlBuilder(group, options) {
+    const dimension = calculateSize(group.dimension, options);
+    return new mathMLTree.SpaceNode(dimension);
+  }
+
+});
+
+// Horizontal overlap functions
+defineFunction({
+  type: "lap",
+  names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const body = args[0];
+    return {
+      type: "lap",
+      mode: parser.mode,
+      alignment: funcName.slice(5),
+      body
+    };
+  },
+  htmlBuilder: (group, options) => {
+    // mathllap, mathrlap, mathclap
+    let inner;
+
+    if (group.alignment === "clap") {
+      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/
+      inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span
+
+      inner = buildCommon.makeSpan(["inner"], [inner], options);
+    } else {
+      inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]);
+    }
+
+    const fix = buildCommon.makeSpan(["fix"], []);
+    let node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the
+    // two items involved in the lap.
+    // Next, use a strut to set the height of the HTML bounding box.
+    // Otherwise, a tall argument may be misplaced.
+
+    const strut = buildCommon.makeSpan(["strut"]);
+    strut.style.height = node.height + node.depth + "em";
+    strut.style.verticalAlign = -node.depth + "em";
+    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.
+
+    node = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // Get the horizontal spacing correct relative to adjacent items.
+
+    return buildCommon.makeSpan(["mord"], [node], options);
+  },
+  mathmlBuilder: (group, options) => {
+    // mathllap, mathrlap, mathclap
+    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
+
+    if (group.alignment !== "rlap") {
+      const offset = group.alignment === "llap" ? "-1" : "-0.5";
+      node.setAttribute("lspace", offset + "width");
+    }
+
+    node.setAttribute("width", "0px");
+    return node;
+  }
+});
+
+defineFunction({
+  type: "styling",
+  names: ["\\(", "$"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: false
+  },
+
+  handler(_ref, args) {
+    let funcName = _ref.funcName,
+        parser = _ref.parser;
+    const outerMode = parser.mode;
+    parser.switchMode("math");
+    const close = funcName === "\\(" ? "\\)" : "$";
+    const body = parser.parseExpression(false, close);
+    parser.expect(close);
+    parser.switchMode(outerMode);
+    return {
+      type: "styling",
+      mode: parser.mode,
+      style: "text",
+      body
+    };
+  }
+
+}); // Check for extra closing math delimiters
+
+defineFunction({
+  type: "text",
+  // Doesn't matter what this is.
+  names: ["\\)", "\\]"],
+  props: {
+    numArgs: 0,
+    allowedInText: true,
+    allowedInMath: false
+  },
+
+  handler(context, args) {
+    throw new ParseError(`Mismatched ${context.funcName}`);
+  }
+
+});
+
+const chooseMathStyle = (group, options) => {
+  switch (options.style.size) {
+    case Style$1.DISPLAY.size:
+      return group.display;
+
+    case Style$1.TEXT.size:
+      return group.text;
+
+    case Style$1.SCRIPT.size:
+      return group.script;
+
+    case Style$1.SCRIPTSCRIPT.size:
+      return group.scriptscript;
+
+    default:
+      return group.text;
+  }
+};
+
+defineFunction({
+  type: "mathchoice",
+  names: ["\\mathchoice"],
+  props: {
+    numArgs: 4
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser;
+    return {
+      type: "mathchoice",
+      mode: parser.mode,
+      display: ordargument(args[0]),
+      text: ordargument(args[1]),
+      script: ordargument(args[2]),
+      scriptscript: ordargument(args[3])
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const body = chooseMathStyle(group, options);
+    const elements = buildExpression(body, options, false);
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: (group, options) => {
+    const body = chooseMathStyle(group, options);
+    return buildExpressionRow(body, options);
+  }
+});
+
+// For an operator with limits, assemble the base, sup, and sub into a span.
+const assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {
+  // IE 8 clips \int if it is in a display: inline-block. We wrap it
+  // in a new span so it is an inline, and works.
+  base = buildCommon.makeSpan([], [base]);
+  let sub;
+  let sup; // We manually have to handle the superscripts and subscripts. This,
+  // aside from the kern calculations, is copied from supsub.
+
+  if (supGroup) {
+    const elem = buildGroup(supGroup, options.havingStyle(style.sup()), options);
+    sup = {
+      elem,
+      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
+    };
+  }
+
+  if (subGroup) {
+    const elem = buildGroup(subGroup, options.havingStyle(style.sub()), options);
+    sub = {
+      elem,
+      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - elem.height)
+    };
+  } // Build the final group as a vlist of the possible subscript, base,
+  // and possible superscript.
+
+
+  let finalGroup;
+
+  if (sup && sub) {
+    const bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
+    finalGroup = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: bottom,
+      children: [{
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }, {
+        type: "elem",
+        elem: sub.elem,
+        marginLeft: -slant + "em"
+      }, {
+        type: "kern",
+        size: sub.kern
+      }, {
+        type: "elem",
+        elem: base
+      }, {
+        type: "kern",
+        size: sup.kern
+      }, {
+        type: "elem",
+        elem: sup.elem,
+        marginLeft: slant + "em"
+      }, {
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }]
+    }, options);
+  } else if (sub) {
+    const top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
+    // that we are supposed to shift the limits by 1/2 of the slant,
+    // but since we are centering the limits adding a full slant of
+    // margin will shift by 1/2 that.
+
+    finalGroup = buildCommon.makeVList({
+      positionType: "top",
+      positionData: top,
+      children: [{
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }, {
+        type: "elem",
+        elem: sub.elem,
+        marginLeft: -slant + "em"
+      }, {
+        type: "kern",
+        size: sub.kern
+      }, {
+        type: "elem",
+        elem: base
+      }]
+    }, options);
+  } else if (sup) {
+    const bottom = base.depth + baseShift;
+    finalGroup = buildCommon.makeVList({
+      positionType: "bottom",
+      positionData: bottom,
+      children: [{
+        type: "elem",
+        elem: base
+      }, {
+        type: "kern",
+        size: sup.kern
+      }, {
+        type: "elem",
+        elem: sup.elem,
+        marginLeft: slant + "em"
+      }, {
+        type: "kern",
+        size: options.fontMetrics().bigOpSpacing5
+      }]
+    }, options);
+  } else {
+    // This case probably shouldn't occur (this would mean the
+    // supsub was sending us a group with no superscript or
+    // subscript) but be safe.
+    return base;
+  }
+
+  return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
+};
+
+// Limits, symbols
+// Most operators have a large successor symbol, but these don't.
+const noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
+// "supsub" since some of them (like \int) can affect super/subscripting.
+
+const htmlBuilder$8 = (grp, options) => {
+  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
+  let supGroup;
+  let subGroup;
+  let hasLimits = false;
+  let group;
+  const supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // If we have limits, supsub will pass us its group to handle. Pull
+    // out the superscript and subscript and set the group to the op in
+    // its base.
+    supGroup = supSub.sup;
+    subGroup = supSub.sub;
+    group = assertNodeType(supSub.base, "op");
+    hasLimits = true;
+  } else {
+    group = assertNodeType(grp, "op");
+  }
+
+  const style = options.style;
+  let large = false;
+
+  if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {
+    // Most symbol operators get larger in displaystyle (rule 13)
+    large = true;
+  }
+
+  let base;
+
+  if (group.symbol) {
+    // If this is a symbol, create the symbol.
+    const fontName = large ? "Size2-Regular" : "Size1-Regular";
+    let stash = "";
+
+    if (group.name === "\\oiint" || group.name === "\\oiiint") {
+      // No font glyphs yet, so use a glyph w/o the oval.
+      // TODO: When font glyphs are available, delete this code.
+      stash = group.name.substr(1); // $FlowFixMe
+
+      group.name = stash === "oiint" ? "\\iint" : "\\iiint";
+    }
+
+    base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
+
+    if (stash.length > 0) {
+      // We're in \oiint or \oiiint. Overlay the oval.
+      // TODO: When font glyphs are available, delete this code.
+      const italic = base.italic;
+      const oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options);
+      base = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: [{
+          type: "elem",
+          elem: base,
+          shift: 0
+        }, {
+          type: "elem",
+          elem: oval,
+          shift: large ? 0.08 : 0
+        }]
+      }, options); // $FlowFixMe
+
+      group.name = "\\" + stash;
+      base.classes.unshift("mop"); // $FlowFixMe
+
+      base.italic = italic;
+    }
+  } else if (group.body) {
+    // If this is a list, compose that list.
+    const inner = buildExpression(group.body, options, true);
+
+    if (inner.length === 1 && inner[0] instanceof SymbolNode) {
+      base = inner[0];
+      base.classes[0] = "mop"; // replace old mclass
+    } else {
+      base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options);
+    }
+  } else {
+    // Otherwise, this is a text operator. Build the text from the
+    // operator's name.
+    // TODO(emily): Add a space in the middle of some of these
+    // operators, like \limsup
+    const output = [];
+
+    for (let i = 1; i < group.name.length; i++) {
+      output.push(buildCommon.mathsym(group.name[i], group.mode, options));
+    }
+
+    base = buildCommon.makeSpan(["mop"], output, options);
+  } // If content of op is a single symbol, shift it vertically.
+
+
+  let baseShift = 0;
+  let slant = 0;
+
+  if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) {
+    // We suppress the shift of the base of \overset and \underset. Otherwise,
+    // shift the symbol so its center lies on the axis (rule 13). It
+    // appears that our fonts have the centers of the symbols already
+    // almost on the axis, so these numbers are very small. Note we
+    // don't actually apply this here, but instead it is used either in
+    // the vlist creation or separately when there are no limits.
+    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.
+    // $FlowFixMe
+
+    slant = base.italic;
+  }
+
+  if (hasLimits) {
+    return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);
+  } else {
+    if (baseShift) {
+      base.style.position = "relative";
+      base.style.top = baseShift + "em";
+    }
+
+    return base;
+  }
+};
+
+const mathmlBuilder$8 = (group, options) => {
+  let node;
+
+  if (group.symbol) {
+    // This is a symbol. Just add the symbol.
+    node = new MathNode("mo", [makeText(group.name, group.mode)]);
+
+    if (utils.contains(noSuccessor, group.name)) {
+      node.setAttribute("largeop", "false");
+    }
+  } else if (group.body) {
+    // This is an operator with children. Add them.
+    node = new MathNode("mo", buildExpression$1(group.body, options));
+  } else {
+    // This is a text operator. Add all of the characters from the
+    // operator's name.
+    node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.
+    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
+
+    const operator = new MathNode("mo", [makeText("\u2061", "text")]);
+
+    if (group.parentIsSupSub) {
+      node = new MathNode("mo", [node, operator]);
+    } else {
+      node = newDocumentFragment([node, operator]);
+    }
+  }
+
+  return node;
+};
+
+const singleCharBigOps = {
+  "\u220F": "\\prod",
+  "\u2210": "\\coprod",
+  "\u2211": "\\sum",
+  "\u22c0": "\\bigwedge",
+  "\u22c1": "\\bigvee",
+  "\u22c2": "\\bigcap",
+  "\u22c3": "\\bigcup",
+  "\u2a00": "\\bigodot",
+  "\u2a01": "\\bigoplus",
+  "\u2a02": "\\bigotimes",
+  "\u2a04": "\\biguplus",
+  "\u2a06": "\\bigsqcup"
+};
+defineFunction({
+  type: "op",
+  names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"],
+  props: {
+    numArgs: 0
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    let fName = funcName;
+
+    if (fName.length === 1) {
+      fName = singleCharBigOps[fName];
+    }
+
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: true,
+      parentIsSupSub: false,
+      symbol: true,
+      name: fName
+    };
+  },
+  htmlBuilder: htmlBuilder$8,
+  mathmlBuilder: mathmlBuilder$8
+}); // Note: calling defineFunction with a type that's already been defined only
+// works because the same htmlBuilder and mathmlBuilder are being used.
+
+defineFunction({
+  type: "op",
+  names: ["\\mathop"],
+  props: {
+    numArgs: 1
+  },
+  handler: (_ref2, args) => {
+    let parser = _ref2.parser;
+    const body = args[0];
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: false,
+      body: ordargument(body)
+    };
+  },
+  htmlBuilder: htmlBuilder$8,
+  mathmlBuilder: mathmlBuilder$8
+}); // There are 2 flags for operators; whether they produce limits in
+// displaystyle, and whether they are symbols and should grow in
+// displaystyle. These four groups cover the four possible choices.
+
+const singleCharIntegrals = {
+  "\u222b": "\\int",
+  "\u222c": "\\iint",
+  "\u222d": "\\iiint",
+  "\u222e": "\\oint",
+  "\u222f": "\\oiint",
+  "\u2230": "\\oiiint"
+}; // No limits, not symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(_ref3) {
+    let parser = _ref3.parser,
+        funcName = _ref3.funcName;
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: false,
+      name: funcName
+    };
+  },
+
+  htmlBuilder: htmlBuilder$8,
+  mathmlBuilder: mathmlBuilder$8
+}); // Limits, not symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(_ref4) {
+    let parser = _ref4.parser,
+        funcName = _ref4.funcName;
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: true,
+      parentIsSupSub: false,
+      symbol: false,
+      name: funcName
+    };
+  },
+
+  htmlBuilder: htmlBuilder$8,
+  mathmlBuilder: mathmlBuilder$8
+}); // No limits, symbols
+
+defineFunction({
+  type: "op",
+  names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"],
+  props: {
+    numArgs: 0
+  },
+
+  handler(_ref5) {
+    let parser = _ref5.parser,
+        funcName = _ref5.funcName;
+    let fName = funcName;
+
+    if (fName.length === 1) {
+      fName = singleCharIntegrals[fName];
+    }
+
+    return {
+      type: "op",
+      mode: parser.mode,
+      limits: false,
+      parentIsSupSub: false,
+      symbol: true,
+      name: fName
+    };
+  },
+
+  htmlBuilder: htmlBuilder$8,
+  mathmlBuilder: mathmlBuilder$8
+});
+
+// NOTE: Unlike most `htmlBuilder`s, this one handles not only
+// "operatorname", but also  "supsub" since \operatorname* can
+const htmlBuilder$9 = (grp, options) => {
+  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
+  let supGroup;
+  let subGroup;
+  let hasLimits = false;
+  let group;
+  const supSub = checkNodeType(grp, "supsub");
+
+  if (supSub) {
+    // If we have limits, supsub will pass us its group to handle. Pull
+    // out the superscript and subscript and set the group to the op in
+    // its base.
+    supGroup = supSub.sup;
+    subGroup = supSub.sub;
+    group = assertNodeType(supSub.base, "operatorname");
+    hasLimits = true;
+  } else {
+    group = assertNodeType(grp, "operatorname");
+  }
+
+  let base;
+
+  if (group.body.length > 0) {
+    const body = group.body.map(child => {
+      // $FlowFixMe: Check if the node has a string `text` property.
+      const childText = child.text;
+
+      if (typeof childText === "string") {
+        return {
+          type: "textord",
+          mode: child.mode,
+          text: childText
+        };
+      } else {
+        return child;
+      }
+    }); // Consolidate function names into symbol characters.
+
+    const expression = buildExpression(body, options.withFont("mathrm"), true);
+
+    for (let i = 0; i < expression.length; i++) {
+      const child = expression[i];
+
+      if (child instanceof SymbolNode) {
+        // Per amsopn package,
+        // change minus to hyphen and \ast to asterisk
+        child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
+      }
+    }
+
+    base = buildCommon.makeSpan(["mop"], expression, options);
+  } else {
+    base = buildCommon.makeSpan(["mop"], [], options);
+  }
+
+  if (hasLimits) {
+    return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);
+  } else {
+    return base;
+  }
+};
+
+const mathmlBuilder$9 = (group, options) => {
+  // The steps taken here are similar to the html version.
+  let expression = buildExpression$1(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
+
+  let isAllString = true; // default
+
+  for (let i = 0; i < expression.length; i++) {
+    const node = expression[i];
+
+    if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {
+      switch (node.type) {
+        case "mi":
+        case "mn":
+        case "ms":
+        case "mspace":
+        case "mtext":
+          break;
+        // Do nothing yet.
+
+        case "mo":
+          {
+            const child = node.children[0];
+
+            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {
+              child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
+            } else {
+              isAllString = false;
+            }
+
+            break;
+          }
+
+        default:
+          isAllString = false;
+      }
+    } else {
+      isAllString = false;
+    }
+  }
+
+  if (isAllString) {
+    // Write a single TextNode instead of multiple nested tags.
+    const word = expression.map(node => node.toText()).join("");
+    expression = [new mathMLTree.TextNode(word)];
+  }
+
+  const identifier = new mathMLTree.MathNode("mi", expression);
+  identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as &ApplyFunction;
+  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
+
+  const operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]);
+
+  if (group.parentIsSupSub) {
+    return new mathMLTree.MathNode("mo", [identifier, operator]);
+  } else {
+    return mathMLTree.newDocumentFragment([identifier, operator]);
+  }
+}; // \operatorname
+// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
+
+
+defineFunction({
+  type: "operatorname",
+  names: ["\\operatorname", "\\operatorname*"],
+  props: {
+    numArgs: 1
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const body = args[0];
+    return {
+      type: "operatorname",
+      mode: parser.mode,
+      body: ordargument(body),
+      alwaysHandleSupSub: funcName === "\\operatorname*",
+      limits: false,
+      parentIsSupSub: false
+    };
+  },
+  htmlBuilder: htmlBuilder$9,
+  mathmlBuilder: mathmlBuilder$9
+});
+
+defineFunctionBuilders({
+  type: "ordgroup",
+
+  htmlBuilder(group, options) {
+    if (group.semisimple) {
+      return buildCommon.makeFragment(buildExpression(group.body, options, false));
+    }
+
+    return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options);
+  },
+
+  mathmlBuilder(group, options) {
+    return buildExpressionRow(group.body, options, true);
+  }
+
+});
+
+defineFunction({
+  type: "overline",
+  names: ["\\overline"],
+  props: {
+    numArgs: 1
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser;
+    const body = args[0];
+    return {
+      type: "overline",
+      mode: parser.mode,
+      body
+    };
+  },
+
+  htmlBuilder(group, options) {
+    // Overlines are handled in the TeXbook pg 443, Rule 9.
+    // Build the inner group in the cramped style.
+    const innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body
+
+    const line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns
+
+    const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
+    const vlist = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: innerGroup
+      }, {
+        type: "kern",
+        size: 3 * defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: line
+      }, {
+        type: "kern",
+        size: defaultRuleThickness
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "overline"], [vlist], options);
+  },
+
+  mathmlBuilder(group, options) {
+    const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]);
+    operator.setAttribute("stretchy", "true");
+    const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.body, options), operator]);
+    node.setAttribute("accent", "true");
+    return node;
+  }
+
+});
+
+defineFunction({
+  type: "phantom",
+  names: ["\\phantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: (_ref, args) => {
+    let parser = _ref.parser;
+    const body = args[0];
+    return {
+      type: "phantom",
+      mode: parser.mode,
+      body: ordargument(body)
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const elements = buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains.
+    // See "color" for more details.
+
+    return buildCommon.makeFragment(elements);
+  },
+  mathmlBuilder: (group, options) => {
+    const inner = buildExpression$1(group.body, options);
+    return new mathMLTree.MathNode("mphantom", inner);
+  }
+});
+defineFunction({
+  type: "hphantom",
+  names: ["\\hphantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: (_ref2, args) => {
+    let parser = _ref2.parser;
+    const body = args[0];
+    return {
+      type: "hphantom",
+      mode: parser.mode,
+      body
+    };
+  },
+  htmlBuilder: (group, options) => {
+    let node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]);
+    node.height = 0;
+    node.depth = 0;
+
+    if (node.children) {
+      for (let i = 0; i < node.children.length; i++) {
+        node.children[i].height = 0;
+        node.children[i].depth = 0;
+      }
+    } // See smash for comment re: use of makeVList
+
+
+    node = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord).
+
+    return buildCommon.makeSpan(["mord"], [node], options);
+  },
+  mathmlBuilder: (group, options) => {
+    const inner = buildExpression$1(ordargument(group.body), options);
+    const phantom = new mathMLTree.MathNode("mphantom", inner);
+    const node = new mathMLTree.MathNode("mpadded", [phantom]);
+    node.setAttribute("height", "0px");
+    node.setAttribute("depth", "0px");
+    return node;
+  }
+});
+defineFunction({
+  type: "vphantom",
+  names: ["\\vphantom"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+  handler: (_ref3, args) => {
+    let parser = _ref3.parser;
+    const body = args[0];
+    return {
+      type: "vphantom",
+      mode: parser.mode,
+      body
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]);
+    const fix = buildCommon.makeSpan(["fix"], []);
+    return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options);
+  },
+  mathmlBuilder: (group, options) => {
+    const inner = buildExpression$1(ordargument(group.body), options);
+    const phantom = new mathMLTree.MathNode("mphantom", inner);
+    const node = new mathMLTree.MathNode("mpadded", [phantom]);
+    node.setAttribute("width", "0px");
+    return node;
+  }
+});
+
+defineFunction({
+  type: "raisebox",
+  names: ["\\raisebox"],
+  props: {
+    numArgs: 2,
+    argTypes: ["size", "hbox"],
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser;
+    const amount = assertNodeType(args[0], "size").value;
+    const body = args[1];
+    return {
+      type: "raisebox",
+      mode: parser.mode,
+      dy: amount,
+      body
+    };
+  },
+
+  htmlBuilder(group, options) {
+    const body = buildGroup(group.body, options);
+    const dy = calculateSize(group.dy, options);
+    return buildCommon.makeVList({
+      positionType: "shift",
+      positionData: -dy,
+      children: [{
+        type: "elem",
+        elem: body
+      }]
+    }, options);
+  },
+
+  mathmlBuilder(group, options) {
+    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
+    const dy = group.dy.number + group.dy.unit;
+    node.setAttribute("voffset", dy);
+    return node;
+  }
+
+});
+
+defineFunction({
+  type: "rule",
+  names: ["\\rule"],
+  props: {
+    numArgs: 2,
+    numOptionalArgs: 1,
+    argTypes: ["size", "size", "size"]
+  },
+
+  handler(_ref, args, optArgs) {
+    let parser = _ref.parser;
+    const shift = optArgs[0];
+    const width = assertNodeType(args[0], "size");
+    const height = assertNodeType(args[1], "size");
+    return {
+      type: "rule",
+      mode: parser.mode,
+      shift: shift && assertNodeType(shift, "size").value,
+      width: width.value,
+      height: height.value
+    };
+  },
+
+  htmlBuilder(group, options) {
+    // Make an empty span for the rule
+    const rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units
+
+    const width = calculateSize(group.width, options);
+    const height = calculateSize(group.height, options);
+    const shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size
+
+    rule.style.borderRightWidth = width + "em";
+    rule.style.borderTopWidth = height + "em";
+    rule.style.bottom = shift + "em"; // Record the height and width
+
+    rule.width = width;
+    rule.height = height + shift;
+    rule.depth = -shift; // Font size is the number large enough that the browser will
+    // reserve at least `absHeight` space above the baseline.
+    // The 1.125 factor was empirically determined
+
+    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
+    return rule;
+  },
+
+  mathmlBuilder(group, options) {
+    const width = calculateSize(group.width, options);
+    const height = calculateSize(group.height, options);
+    const shift = group.shift ? calculateSize(group.shift, options) : 0;
+    const color = options.color && options.getColor() || "black";
+    const rule = new mathMLTree.MathNode("mspace");
+    rule.setAttribute("mathbackground", color);
+    rule.setAttribute("width", width + "em");
+    rule.setAttribute("height", height + "em");
+    const wrapper = new mathMLTree.MathNode("mpadded", [rule]);
+
+    if (shift >= 0) {
+      wrapper.setAttribute("height", "+" + shift + "em");
+    } else {
+      wrapper.setAttribute("height", shift + "em");
+      wrapper.setAttribute("depth", "+" + -shift + "em");
+    }
+
+    wrapper.setAttribute("voffset", shift + "em");
+    return wrapper;
+  }
+
+});
+
+function sizingGroup(value, options, baseOptions) {
+  const inner = buildExpression(value, options, false);
+  const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
+  // manually. Handle nested size changes.
+
+  for (let i = 0; i < inner.length; i++) {
+    const pos = inner[i].classes.indexOf("sizing");
+
+    if (pos < 0) {
+      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
+    } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
+      // This is a nested size change: e.g., inner[i] is the "b" in
+      // `\Huge a \small b`. Override the old size (the `reset-` class)
+      // but not the new size.
+      inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
+    }
+
+    inner[i].height *= multiplier;
+    inner[i].depth *= multiplier;
+  }
+
+  return buildCommon.makeFragment(inner);
+}
+const sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
+const htmlBuilder$a = (group, options) => {
+  // Handle sizing operators like \Huge. Real TeX doesn't actually allow
+  // these functions inside of math expressions, so we do some special
+  // handling.
+  const newOptions = options.havingSize(group.size);
+  return sizingGroup(group.body, newOptions, options);
+};
+defineFunction({
+  type: "sizing",
+  names: sizeFuncs,
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+  handler: (_ref, args) => {
+    let breakOnTokenText = _ref.breakOnTokenText,
+        funcName = _ref.funcName,
+        parser = _ref.parser;
+    const body = parser.parseExpression(false, breakOnTokenText);
+    return {
+      type: "sizing",
+      mode: parser.mode,
+      // Figure out what size to use based on the list of functions above
+      size: sizeFuncs.indexOf(funcName) + 1,
+      body
+    };
+  },
+  htmlBuilder: htmlBuilder$a,
+  mathmlBuilder: (group, options) => {
+    const newOptions = options.havingSize(group.size);
+    const inner = buildExpression$1(group.body, newOptions);
+    const node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
+    // changes, because we don't keep state of what style we're currently
+    // in, so we can't reset the size to normal before changing it.  Now
+    // that we're passing an options parameter we should be able to fix
+    // this.
+
+    node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
+    return node;
+  }
+});
+
+// smash, with optional [tb], as in AMS
+defineFunction({
+  type: "smash",
+  names: ["\\smash"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1,
+    allowedInText: true
+  },
+  handler: (_ref, args, optArgs) => {
+    let parser = _ref.parser;
+    let smashHeight = false;
+    let smashDepth = false;
+    const tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup");
+
+    if (tbArg) {
+      // Optional [tb] argument is engaged.
+      // ref: amsmath: \renewcommand{\smash}[1][tb]{%
+      //               def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}%
+      let letter = "";
+
+      for (let i = 0; i < tbArg.body.length; ++i) {
+        const node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.
+
+        letter = node.text;
+
+        if (letter === "t") {
+          smashHeight = true;
+        } else if (letter === "b") {
+          smashDepth = true;
+        } else {
+          smashHeight = false;
+          smashDepth = false;
+          break;
+        }
+      }
+    } else {
+      smashHeight = true;
+      smashDepth = true;
+    }
+
+    const body = args[0];
+    return {
+      type: "smash",
+      mode: parser.mode,
+      body,
+      smashHeight,
+      smashDepth
+    };
+  },
+  htmlBuilder: (group, options) => {
+    const node = buildCommon.makeSpan([], [buildGroup(group.body, options)]);
+
+    if (!group.smashHeight && !group.smashDepth) {
+      return node;
+    }
+
+    if (group.smashHeight) {
+      node.height = 0; // In order to influence makeVList, we have to reset the children.
+
+      if (node.children) {
+        for (let i = 0; i < node.children.length; i++) {
+          node.children[i].height = 0;
+        }
+      }
+    }
+
+    if (group.smashDepth) {
+      node.depth = 0;
+
+      if (node.children) {
+        for (let i = 0; i < node.children.length; i++) {
+          node.children[i].depth = 0;
+        }
+      }
+    } // At this point, we've reset the TeX-like height and depth values.
+    // But the span still has an HTML line height.
+    // makeVList applies "display: table-cell", which prevents the browser
+    // from acting on that line height. So we'll call makeVList now.
+
+
+    const smashedNode = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: node
+      }]
+    }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord).
+
+    return buildCommon.makeSpan(["mord"], [smashedNode], options);
+  },
+  mathmlBuilder: (group, options) => {
+    const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]);
+
+    if (group.smashHeight) {
+      node.setAttribute("height", "0px");
+    }
+
+    if (group.smashDepth) {
+      node.setAttribute("depth", "0px");
+    }
+
+    return node;
+  }
+});
+
+defineFunction({
+  type: "sqrt",
+  names: ["\\sqrt"],
+  props: {
+    numArgs: 1,
+    numOptionalArgs: 1
+  },
+
+  handler(_ref, args, optArgs) {
+    let parser = _ref.parser;
+    const index = optArgs[0];
+    const body = args[0];
+    return {
+      type: "sqrt",
+      mode: parser.mode,
+      body,
+      index
+    };
+  },
+
+  htmlBuilder(group, options) {
+    // Square roots are handled in the TeXbook pg. 443, Rule 11.
+    // First, we do the same steps as in overline to build the inner group
+    // and line
+    let inner = buildGroup(group.body, options.havingCrampedStyle());
+
+    if (inner.height === 0) {
+      // Render a small surd.
+      inner.height = options.fontMetrics().xHeight;
+    } // Some groups can return document fragments.  Handle those by wrapping
+    // them in a span.
+
+
+    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter
+
+    const metrics = options.fontMetrics();
+    const theta = metrics.defaultRuleThickness;
+    let phi = theta;
+
+    if (options.style.id < Style$1.TEXT.id) {
+      phi = options.fontMetrics().xHeight;
+    } // Calculate the clearance between the body and line
+
+
+    let lineClearance = theta + phi / 4;
+    const minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size
+
+    const _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options),
+          img = _delimiter$sqrtImage.span,
+          ruleWidth = _delimiter$sqrtImage.ruleWidth,
+          advanceWidth = _delimiter$sqrtImage.advanceWidth;
+
+    const delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size
+
+    if (delimDepth > inner.height + inner.depth + lineClearance) {
+      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
+    } // Shift the sqrt image
+
+
+    const imgShift = img.height - inner.height - lineClearance - ruleWidth;
+    inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument.
+
+    const body = buildCommon.makeVList({
+      positionType: "firstBaseline",
+      children: [{
+        type: "elem",
+        elem: inner,
+        wrapperClasses: ["svg-align"]
+      }, {
+        type: "kern",
+        size: -(inner.height + imgShift)
+      }, {
+        type: "elem",
+        elem: img
+      }, {
+        type: "kern",
+        size: ruleWidth
+      }]
+    }, options);
+
+    if (!group.index) {
+      return buildCommon.makeSpan(["mord", "sqrt"], [body], options);
+    } else {
+      // Handle the optional root index
+      // The index is always in scriptscript style
+      const newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);
+      const rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX
+      // source, in the definition of `\r@@t`.
+
+      const toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly
+
+      const rootVList = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: -toShift,
+        children: [{
+          type: "elem",
+          elem: rootm
+        }]
+      }, options); // Add a class surrounding it so we can add on the appropriate
+      // kerning
+
+      const rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);
+      return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options);
+    }
+  },
+
+  mathmlBuilder(group, options) {
+    const body = group.body,
+          index = group.index;
+    return index ? new mathMLTree.MathNode("mroot", [buildGroup$1(body, options), buildGroup$1(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup$1(body, options)]);
+  }
+
+});
+
+const styleMap$1 = {
+  "display": Style$1.DISPLAY,
+  "text": Style$1.TEXT,
+  "script": Style$1.SCRIPT,
+  "scriptscript": Style$1.SCRIPTSCRIPT
+};
+defineFunction({
+  type: "styling",
+  names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let breakOnTokenText = _ref.breakOnTokenText,
+        funcName = _ref.funcName,
+        parser = _ref.parser;
+    // parse out the implicit body
+    const body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.
+    // here and in buildHTML and de-dupe the enumeration of all the styles).
+    // $FlowFixMe: The names above exactly match the styles.
+
+    const style = funcName.slice(1, funcName.length - 5);
+    return {
+      type: "styling",
+      mode: parser.mode,
+      // Figure out what style to use by pulling out the style from
+      // the function name
+      style,
+      body
+    };
+  },
+
+  htmlBuilder(group, options) {
+    // Style changes are handled in the TeXbook on pg. 442, Rule 3.
+    const newStyle = styleMap$1[group.style];
+    const newOptions = options.havingStyle(newStyle).withFont('');
+    return sizingGroup(group.body, newOptions, options);
+  },
+
+  mathmlBuilder(group, options) {
+    // Figure out what style we're changing to.
+    const newStyle = styleMap$1[group.style];
+    const newOptions = options.havingStyle(newStyle);
+    const inner = buildExpression$1(group.body, newOptions);
+    const node = new mathMLTree.MathNode("mstyle", inner);
+    const styleAttributes = {
+      "display": ["0", "true"],
+      "text": ["0", "false"],
+      "script": ["1", "false"],
+      "scriptscript": ["2", "false"]
+    };
+    const attr = styleAttributes[group.style];
+    node.setAttribute("scriptlevel", attr[0]);
+    node.setAttribute("displaystyle", attr[1]);
+    return node;
+  }
+
+});
+
+/**
+ * Sometimes, groups perform special rules when they have superscripts or
+ * subscripts attached to them. This function lets the `supsub` group know that
+ * Sometimes, groups perform special rules when they have superscripts or
+ * its inner element should handle the superscripts and subscripts instead of
+ * handling them itself.
+ */
+const htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {
+  const base = group.base;
+
+  if (!base) {
+    return null;
+  } else if (base.type === "op") {
+    // Operators handle supsubs differently when they have limits
+    // (e.g. `\displaystyle\sum_2^3`)
+    const delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);
+    return delegate ? htmlBuilder$8 : null;
+  } else if (base.type === "operatorname") {
+    const delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);
+    return delegate ? htmlBuilder$9 : null;
+  } else if (base.type === "accent") {
+    return utils.isCharacterBox(base.base) ? htmlBuilder : null;
+  } else if (base.type === "horizBrace") {
+    const isSup = !group.sub;
+    return isSup === base.isOver ? htmlBuilder$7 : null;
+  } else {
+    return null;
+  }
+}; // Super scripts and subscripts, whose precise placement can depend on other
+// functions that precede them.
+
+
+defineFunctionBuilders({
+  type: "supsub",
+
+  htmlBuilder(group, options) {
+    // Superscript and subscripts are handled in the TeXbook on page
+    // 445-446, rules 18(a-f).
+    // Here is where we defer to the inner group if it should handle
+    // superscripts and subscripts itself.
+    const builderDelegate = htmlBuilderDelegate(group, options);
+
+    if (builderDelegate) {
+      return builderDelegate(group, options);
+    }
+
+    const valueBase = group.base,
+          valueSup = group.sup,
+          valueSub = group.sub;
+    const base = buildGroup(valueBase, options);
+    let supm;
+    let subm;
+    const metrics = options.fontMetrics(); // Rule 18a
+
+    let supShift = 0;
+    let subShift = 0;
+    const isCharacterBox = valueBase && utils.isCharacterBox(valueBase);
+
+    if (valueSup) {
+      const newOptions = options.havingStyle(options.style.sup());
+      supm = buildGroup(valueSup, newOptions, options);
+
+      if (!isCharacterBox) {
+        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
+      }
+    }
+
+    if (valueSub) {
+      const newOptions = options.havingStyle(options.style.sub());
+      subm = buildGroup(valueSub, newOptions, options);
+
+      if (!isCharacterBox) {
+        subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier;
+      }
+    } // Rule 18c
+
+
+    let minSupShift;
+
+    if (options.style === Style$1.DISPLAY) {
+      minSupShift = metrics.sup1;
+    } else if (options.style.cramped) {
+      minSupShift = metrics.sup3;
+    } else {
+      minSupShift = metrics.sup2;
+    } // scriptspace is a font-size-independent size, so scale it
+    // appropriately for use as the marginRight.
+
+
+    const multiplier = options.sizeMultiplier;
+    const marginRight = 0.5 / metrics.ptPerEm / multiplier + "em";
+    let marginLeft = null;
+
+    if (subm) {
+      // Subscripts shouldn't be shifted by the base's italic correction.
+      // Account for that by shifting the subscript back the appropriate
+      // amount. Note we only do this when the base is a single symbol.
+      const isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint");
+
+      if (base instanceof SymbolNode || isOiint) {
+        // $FlowFixMe
+        marginLeft = -base.italic + "em";
+      }
+    }
+
+    let supsub;
+
+    if (supm && subm) {
+      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+      subShift = Math.max(subShift, metrics.sub2);
+      const ruleWidth = metrics.defaultRuleThickness; // Rule 18e
+
+      const maxWidth = 4 * ruleWidth;
+
+      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {
+        subShift = maxWidth - (supShift - supm.depth) + subm.height;
+        const psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
+
+        if (psi > 0) {
+          supShift += psi;
+          subShift -= psi;
+        }
+      }
+
+      const vlistElem = [{
+        type: "elem",
+        elem: subm,
+        shift: subShift,
+        marginRight,
+        marginLeft
+      }, {
+        type: "elem",
+        elem: supm,
+        shift: -supShift,
+        marginRight
+      }];
+      supsub = buildCommon.makeVList({
+        positionType: "individualShift",
+        children: vlistElem
+      }, options);
+    } else if (subm) {
+      // Rule 18b
+      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
+      const vlistElem = [{
+        type: "elem",
+        elem: subm,
+        marginLeft,
+        marginRight
+      }];
+      supsub = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: subShift,
+        children: vlistElem
+      }, options);
+    } else if (supm) {
+      // Rule 18c, d
+      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+      supsub = buildCommon.makeVList({
+        positionType: "shift",
+        positionData: -supShift,
+        children: [{
+          type: "elem",
+          elem: supm,
+          marginRight
+        }]
+      }, options);
+    } else {
+      throw new Error("supsub must have either sup or sub.");
+    } // Wrap the supsub vlist in a span.msupsub to reset text-align.
+
+
+    const mclass = getTypeOfDomTree(base, "right") || "mord";
+    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options);
+  },
+
+  mathmlBuilder(group, options) {
+    // Is the inner group a relevant horizonal brace?
+    let isBrace = false;
+    let isOver;
+    let isSup;
+    const horizBrace = checkNodeType(group.base, "horizBrace");
+
+    if (horizBrace) {
+      isSup = !!group.sup;
+
+      if (isSup === horizBrace.isOver) {
+        isBrace = true;
+        isOver = horizBrace.isOver;
+      }
+    }
+
+    if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {
+      group.base.parentIsSupSub = true;
+    }
+
+    const children = [buildGroup$1(group.base, options)];
+
+    if (group.sub) {
+      children.push(buildGroup$1(group.sub, options));
+    }
+
+    if (group.sup) {
+      children.push(buildGroup$1(group.sup, options));
+    }
+
+    let nodeType;
+
+    if (isBrace) {
+      nodeType = isOver ? "mover" : "munder";
+    } else if (!group.sub) {
+      const base = group.base;
+
+      if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
+        nodeType = "mover";
+      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {
+        nodeType = "mover";
+      } else {
+        nodeType = "msup";
+      }
+    } else if (!group.sup) {
+      const base = group.base;
+
+      if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
+        nodeType = "munder";
+      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {
+        nodeType = "munder";
+      } else {
+        nodeType = "msub";
+      }
+    } else {
+      const base = group.base;
+
+      if (base && base.type === "op" && base.limits && options.style === Style$1.DISPLAY) {
+        nodeType = "munderover";
+      } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || base.limits)) {
+        nodeType = "munderover";
+      } else {
+        nodeType = "msubsup";
+      }
+    }
+
+    const node = new mathMLTree.MathNode(nodeType, children);
+    return node;
+  }
+
+});
+
+defineFunctionBuilders({
+  type: "atom",
+
+  htmlBuilder(group, options) {
+    return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]);
+  },
+
+  mathmlBuilder(group, options) {
+    const node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]);
+
+    if (group.family === "bin") {
+      const variant = getVariant(group, options);
+
+      if (variant === "bold-italic") {
+        node.setAttribute("mathvariant", variant);
+      }
+    } else if (group.family === "punct") {
+      node.setAttribute("separator", "true");
+    } else if (group.family === "open" || group.family === "close") {
+      // Delims built here should not stretch vertically.
+      // See delimsizing.js for stretchy delims.
+      node.setAttribute("stretchy", "false");
+    }
+
+    return node;
+  }
+
+});
+
+// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in
+const defaultVariant = {
+  "mi": "italic",
+  "mn": "normal",
+  "mtext": "normal"
+};
+defineFunctionBuilders({
+  type: "mathord",
+
+  htmlBuilder(group, options) {
+    return buildCommon.makeOrd(group, options, "mathord");
+  },
+
+  mathmlBuilder(group, options) {
+    const node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]);
+    const variant = getVariant(group, options) || "italic";
+
+    if (variant !== defaultVariant[node.type]) {
+      node.setAttribute("mathvariant", variant);
+    }
+
+    return node;
+  }
+
+});
+defineFunctionBuilders({
+  type: "textord",
+
+  htmlBuilder(group, options) {
+    return buildCommon.makeOrd(group, options, "textord");
+  },
+
+  mathmlBuilder(group, options) {
+    const text = makeText(group.text, group.mode, options);
+    const variant = getVariant(group, options) || "normal";
+    let node;
+
+    if (group.mode === 'text') {
+      node = new mathMLTree.MathNode("mtext", [text]);
+    } else if (/[0-9]/.test(group.text)) {
+      // TODO(kevinb) merge adjacent <mn> nodes
+      // do it as a post processing step
+      node = new mathMLTree.MathNode("mn", [text]);
+    } else if (group.text === "\\prime") {
+      node = new mathMLTree.MathNode("mo", [text]);
+    } else {
+      node = new mathMLTree.MathNode("mi", [text]);
+    }
+
+    if (variant !== defaultVariant[node.type]) {
+      node.setAttribute("mathvariant", variant);
+    }
+
+    return node;
+  }
+
+});
+
+const cssSpace = {
+  "\\nobreak": "nobreak",
+  "\\allowbreak": "allowbreak"
+}; // A lookup table to determine whether a spacing function/symbol should be
+// treated like a regular space character.  If a symbol or command is a key
+// in this table, then it should be a regular space character.  Furthermore,
+// the associated value may have a `className` specifying an extra CSS class
+// to add to the created `span`.
+
+const regularSpace = {
+  " ": {},
+  "\\ ": {},
+  "~": {
+    className: "nobreak"
+  },
+  "\\space": {},
+  "\\nobreakspace": {
+    className: "nobreak"
+  }
+}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in
+// src/symbols.js.
+
+defineFunctionBuilders({
+  type: "spacing",
+
+  htmlBuilder(group, options) {
+    if (regularSpace.hasOwnProperty(group.text)) {
+      const className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these
+      // things has an entry in the symbols table, so these will be turned
+      // into appropriate outputs.
+
+      if (group.mode === "text") {
+        const ord = buildCommon.makeOrd(group, options, "textord");
+        ord.classes.push(className);
+        return ord;
+      } else {
+        return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options);
+      }
+    } else if (cssSpace.hasOwnProperty(group.text)) {
+      // Spaces based on just a CSS class.
+      return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options);
+    } else {
+      throw new ParseError(`Unknown type of space "${group.text}"`);
+    }
+  },
+
+  mathmlBuilder(group, options) {
+    let node;
+
+    if (regularSpace.hasOwnProperty(group.text)) {
+      node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]);
+    } else if (cssSpace.hasOwnProperty(group.text)) {
+      // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored
+      return new mathMLTree.MathNode("mspace");
+    } else {
+      throw new ParseError(`Unknown type of space "${group.text}"`);
+    }
+
+    return node;
+  }
+
+});
+
+const pad = () => {
+  const padNode = new mathMLTree.MathNode("mtd", []);
+  padNode.setAttribute("width", "50%");
+  return padNode;
+};
+
+defineFunctionBuilders({
+  type: "tag",
+
+  mathmlBuilder(group, options) {
+    const table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);
+    table.setAttribute("width", "100%");
+    return table; // TODO: Left-aligned tags.
+    // Currently, the group and options passed here do not contain
+    // enough info to set tag alignment. `leqno` is in Settings but it is
+    // not passed to Options. On the HTML side, leqno is
+    // set by a CSS class applied in buildTree.js. That would have worked
+    // in MathML if browsers supported <mlabeledtr>. Since they don't, we
+    // need to rewrite the way this function is called.
+  }
+
+});
+
+const textFontFamilies = {
+  "\\text": undefined,
+  "\\textrm": "textrm",
+  "\\textsf": "textsf",
+  "\\texttt": "texttt",
+  "\\textnormal": "textrm"
+};
+const textFontWeights = {
+  "\\textbf": "textbf",
+  "\\textmd": "textmd"
+};
+const textFontShapes = {
+  "\\textit": "textit",
+  "\\textup": "textup"
+};
+
+const optionsWithFont = (group, options) => {
+  const font = group.font; // Checks if the argument is a font family or a font style.
+
+  if (!font) {
+    return options;
+  } else if (textFontFamilies[font]) {
+    return options.withTextFontFamily(textFontFamilies[font]);
+  } else if (textFontWeights[font]) {
+    return options.withTextFontWeight(textFontWeights[font]);
+  } else {
+    return options.withTextFontShape(textFontShapes[font]);
+  }
+};
+
+defineFunction({
+  type: "text",
+  names: [// Font families
+  "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights
+  "\\textbf", "\\textmd", // Font Shapes
+  "\\textit", "\\textup"],
+  props: {
+    numArgs: 1,
+    argTypes: ["text"],
+    greediness: 2,
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser,
+        funcName = _ref.funcName;
+    const body = args[0];
+    return {
+      type: "text",
+      mode: parser.mode,
+      body: ordargument(body),
+      font: funcName
+    };
+  },
+
+  htmlBuilder(group, options) {
+    const newOptions = optionsWithFont(group, options);
+    const inner = buildExpression(group.body, newOptions, true);
+    return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions);
+  },
+
+  mathmlBuilder(group, options) {
+    const newOptions = optionsWithFont(group, options);
+    return buildExpressionRow(group.body, newOptions);
+  }
+
+});
+
+defineFunction({
+  type: "underline",
+  names: ["\\underline"],
+  props: {
+    numArgs: 1,
+    allowedInText: true
+  },
+
+  handler(_ref, args) {
+    let parser = _ref.parser;
+    return {
+      type: "underline",
+      mode: parser.mode,
+      body: args[0]
+    };
+  },
+
+  htmlBuilder(group, options) {
+    // Underlines are handled in the TeXbook pg 443, Rule 10.
+    // Build the inner group.
+    const innerGroup = buildGroup(group.body, options); // Create the line to go below the body
+
+    const line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns
+
+    const defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
+    const vlist = buildCommon.makeVList({
+      positionType: "top",
+      positionData: innerGroup.height,
+      children: [{
+        type: "kern",
+        size: defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: line
+      }, {
+        type: "kern",
+        size: 3 * defaultRuleThickness
+      }, {
+        type: "elem",
+        elem: innerGroup
+      }]
+    }, options);
+    return buildCommon.makeSpan(["mord", "underline"], [vlist], options);
+  },
+
+  mathmlBuilder(group, options) {
+    const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]);
+    operator.setAttribute("stretchy", "true");
+    const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.body, options), operator]);
+    node.setAttribute("accentunder", "true");
+    return node;
+  }
+
+});
+
+defineFunction({
+  type: "verb",
+  names: ["\\verb"],
+  props: {
+    numArgs: 0,
+    allowedInText: true
+  },
+
+  handler(context, args, optArgs) {
+    // \verb and \verb* are dealt with directly in Parser.js.
+    // If we end up here, it's because of a failure to match the two delimiters
+    // in the regex in Lexer.js.  LaTeX raises the following error when \verb is
+    // terminated by end of line (or file).
+    throw new ParseError("\\verb ended by end of line instead of matching delimiter");
+  },
+
+  htmlBuilder(group, options) {
+    const text = makeVerb(group);
+    const body = []; // \verb enters text mode and therefore is sized like \textstyle
+
+    const newOptions = options.havingStyle(options.style.text());
+
+    for (let i = 0; i < text.length; i++) {
+      let c = text[i];
+
+      if (c === '~') {
+        c = '\\textasciitilde';
+      }
+
+      body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"]));
+    }
+
+    return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);
+  },
+
+  mathmlBuilder(group, options) {
+    const text = new mathMLTree.TextNode(makeVerb(group));
+    const node = new mathMLTree.MathNode("mtext", [text]);
+    node.setAttribute("mathvariant", "monospace");
+    return node;
+  }
+
+});
+/**
+ * Converts verb group into body string.
+ *
+ * \verb* replaces each space with an open box \u2423
+ * \verb replaces each space with a no-break space \xA0
+ */
+
+const makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0');
+
+/** Include this to ensure that all functions are defined. */
+const functions = _functions;
+
+/**
+ * The Lexer class handles tokenizing the input in various ways. Since our
+ * parser expects us to be able to backtrack, the lexer allows lexing from any
+ * given starting point.
+ *
+ * Its main exposed function is the `lex` function, which takes a position to
+ * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
+ * function.
+ *
+ * The various `_innerLex` functions perform the actual lexing of different
+ * kinds.
+ */
+
+/* The following tokenRegex
+ * - matches typical whitespace (but not NBSP etc.) using its first group
+ * - does not match any control character \x00-\x1f except whitespace
+ * - does not match a bare backslash
+ * - matches any ASCII character except those just mentioned
+ * - does not match the BMP private use area \uE000-\uF8FF
+ * - does not match bare surrogate code units
+ * - matches any BMP character except for those just described
+ * - matches any valid Unicode surrogate pair
+ * - matches a backslash followed by one or more letters
+ * - matches a backslash followed by any BMP character, including newline
+ * Just because the Lexer matches something doesn't mean it's valid input:
+ * If there is no matching function or symbol definition, the Parser will
+ * still reject the input.
+ */
+const spaceRegexString = "[ \r\n\t]";
+const controlWordRegexString = "\\\\[a-zA-Z@]+";
+const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
+const controlWordWhitespaceRegexString = `${controlWordRegexString}${spaceRegexString}*`;
+const controlWordWhitespaceRegex = new RegExp(`^(${controlWordRegexString})${spaceRegexString}*$`);
+const combiningDiacriticalMarkString = "[\u0300-\u036f]";
+const combiningDiacriticalMarksEndRegex = new RegExp(`${combiningDiacriticalMarkString}+$`);
+const tokenRegexString = `(${spaceRegexString}+)|` + // whitespace
+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
+`${combiningDiacriticalMarkString}*` + // ...plus accents
+"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
+`${combiningDiacriticalMarkString}*` + // ...plus accents
+"|\\\\verb\\*([^]).*?\\3" + // \verb*
+"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
+"|\\\\operatorname\\*" + // \operatorname*
+`|${controlWordWhitespaceRegexString}` + // \macroName + spaces
+`|${controlSymbolRegexString})`; // \\, \', etc.
+
+/** Main Lexer class */
+
+class Lexer {
+  // category codes, only supports comment characters (14) for now
+  constructor(input, settings) {
+    this.input = void 0;
+    this.settings = void 0;
+    this.tokenRegex = void 0;
+    this.catcodes = void 0;
+    // Separate accents from characters
+    this.input = input;
+    this.settings = settings;
+    this.tokenRegex = new RegExp(tokenRegexString, 'g');
+    this.catcodes = {
+      "%": 14 // comment character
+
+    };
+  }
+
+  setCatcode(char, code) {
+    this.catcodes[char] = code;
+  }
+  /**
+   * This function lexes a single token.
+   */
+
+
+  lex() {
+    const input = this.input;
+    const pos = this.tokenRegex.lastIndex;
+
+    if (pos === input.length) {
+      return new Token("EOF", new SourceLocation(this, pos, pos));
+    }
+
+    const match = this.tokenRegex.exec(input);
+
+    if (match === null || match.index !== pos) {
+      throw new ParseError(`Unexpected character: '${input[pos]}'`, new Token(input[pos], new SourceLocation(this, pos, pos + 1)));
+    }
+
+    let text = match[2] || " ";
+
+    if (this.catcodes[text] === 14) {
+      // comment character
+      const nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex);
+
+      if (nlIndex === -1) {
+        this.tokenRegex.lastIndex = input.length; // EOF
+
+        this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)");
+      } else {
+        this.tokenRegex.lastIndex = nlIndex + 1;
+      }
+
+      return this.lex();
+    } // Trim any trailing whitespace from control word match
+
+
+    const controlMatch = text.match(controlWordWhitespaceRegex);
+
+    if (controlMatch) {
+      text = controlMatch[1];
+    }
+
+    return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));
+  }
+
+}
+
+/**
+ * A `Namespace` refers to a space of nameable things like macros or lengths,
+ * which can be `set` either globally or local to a nested group, using an
+ * undo stack similar to how TeX implements this functionality.
+ * Performance-wise, `get` and local `set` take constant time, while global
+ * `set` takes time proportional to the depth of group nesting.
+ */
+class Namespace {
+  /**
+   * Both arguments are optional.  The first argument is an object of
+   * built-in mappings which never change.  The second argument is an object
+   * of initial (global-level) mappings, which will constantly change
+   * according to any global/top-level `set`s done.
+   */
+  constructor(builtins, globalMacros) {
+    if (builtins === void 0) {
+      builtins = {};
+    }
+
+    if (globalMacros === void 0) {
+      globalMacros = {};
+    }
+
+    this.current = void 0;
+    this.builtins = void 0;
+    this.undefStack = void 0;
+    this.current = globalMacros;
+    this.builtins = builtins;
+    this.undefStack = [];
+  }
+  /**
+   * Start a new nested group, affecting future local `set`s.
+   */
+
+
+  beginGroup() {
+    this.undefStack.push({});
+  }
+  /**
+   * End current nested group, restoring values before the group began.
+   */
+
+
+  endGroup() {
+    if (this.undefStack.length === 0) {
+      throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug");
+    }
+
+    const undefs = this.undefStack.pop();
+
+    for (const undef in undefs) {
+      if (undefs.hasOwnProperty(undef)) {
+        if (undefs[undef] === undefined) {
+          delete this.current[undef];
+        } else {
+          this.current[undef] = undefs[undef];
+        }
+      }
+    }
+  }
+  /**
+   * Detect whether `name` has a definition.  Equivalent to
+   * `get(name) != null`.
+   */
+
+
+  has(name) {
+    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);
+  }
+  /**
+   * Get the current value of a name, or `undefined` if there is no value.
+   *
+   * Note: Do not use `if (namespace.get(...))` to detect whether a macro
+   * is defined, as the definition may be the empty string which evaluates
+   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
+   * `if (namespace.has(...))`.
+   */
+
+
+  get(name) {
+    if (this.current.hasOwnProperty(name)) {
+      return this.current[name];
+    } else {
+      return this.builtins[name];
+    }
+  }
+  /**
+   * Set the current value of a name, and optionally set it globally too.
+   * Local set() sets the current value and (when appropriate) adds an undo
+   * operation to the undo stack.  Global set() may change the undo
+   * operation at every level, so takes time linear in their number.
+   */
+
+
+  set(name, value, global) {
+    if (global === void 0) {
+      global = false;
+    }
+
+    if (global) {
+      // Global set is equivalent to setting in all groups.  Simulate this
+      // by destroying any undos currently scheduled for this name,
+      // and adding an undo with the *new* value (in case it later gets
+      // locally reset within this environment).
+      for (let i = 0; i < this.undefStack.length; i++) {
+        delete this.undefStack[i][name];
+      }
+
+      if (this.undefStack.length > 0) {
+        this.undefStack[this.undefStack.length - 1][name] = value;
+      }
+    } else {
+      // Undo this set at end of this group (possibly to `undefined`),
+      // unless an undo is already in place, in which case that older
+      // value is the correct one.
+      const top = this.undefStack[this.undefStack.length - 1];
+
+      if (top && !top.hasOwnProperty(name)) {
+        top[name] = this.current[name];
+      }
+    }
+
+    this.current[name] = value;
+  }
+
+}
+
+/**
+ * Predefined macros for KaTeX.
+ * This can be used to define some commands in terms of others.
+ */
+const builtinMacros = {};
+
+function defineMacro(name, body) {
+  builtinMacros[name] = body;
+} //////////////////////////////////////////////////////////////////////
+// macro tools
+// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2
+// TeX source: \long\def\@firstoftwo#1#2{#1}
+
+defineMacro("\\@firstoftwo", function (context) {
+  const args = context.consumeArgs(2);
+  return {
+    tokens: args[0],
+    numArgs: 0
+  };
+}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1
+// TeX source: \long\def\@secondoftwo#1#2{#2}
+
+defineMacro("\\@secondoftwo", function (context) {
+  const args = context.consumeArgs(2);
+  return {
+    tokens: args[1],
+    numArgs: 0
+  };
+}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)
+// symbol.  If it matches #1, then the macro expands to #2; otherwise, #3.
+// Note, however, that it does not consume the next symbol in either case.
+
+defineMacro("\\@ifnextchar", function (context) {
+  const args = context.consumeArgs(3); // symbol, if, else
+
+  const nextToken = context.future();
+
+  if (args[0].length === 1 && args[0][0].text === nextToken.text) {
+    return {
+      tokens: args[1],
+      numArgs: 0
+    };
+  } else {
+    return {
+      tokens: args[2],
+      numArgs: 0
+    };
+  }
+}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.
+// If it is `*`, then it consumes the symbol, and the macro expands to #1;
+// otherwise, the macro expands to #2 (without consuming the symbol).
+// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
+
+defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode
+
+defineMacro("\\TextOrMath", function (context) {
+  const args = context.consumeArgs(2);
+
+  if (context.mode === 'text') {
+    return {
+      tokens: args[0],
+      numArgs: 0
+    };
+  } else {
+    return {
+      tokens: args[1],
+      numArgs: 0
+    };
+  }
+}); // Lookup table for parsing numbers in base 8 through 16
+
+const digitToNumber = {
+  "0": 0,
+  "1": 1,
+  "2": 2,
+  "3": 3,
+  "4": 4,
+  "5": 5,
+  "6": 6,
+  "7": 7,
+  "8": 8,
+  "9": 9,
+  "a": 10,
+  "A": 10,
+  "b": 11,
+  "B": 11,
+  "c": 12,
+  "C": 12,
+  "d": 13,
+  "D": 13,
+  "e": 14,
+  "E": 14,
+  "f": 15,
+  "F": 15
+}; // TeX \char makes a literal character (catcode 12) using the following forms:
+// (see The TeXBook, p. 43)
+//   \char123  -- decimal
+//   \char'123 -- octal
+//   \char"123 -- hex
+//   \char`x   -- character that can be written (i.e. isn't active)
+//   \char`\x  -- character that cannot be written (e.g. %)
+// These all refer to characters from the font, so we turn them into special
+// calls to a function \@char dealt with in the Parser.
+
+defineMacro("\\char", function (context) {
+  let token = context.popToken();
+  let base;
+  let number = '';
+
+  if (token.text === "'") {
+    base = 8;
+    token = context.popToken();
+  } else if (token.text === '"') {
+    base = 16;
+    token = context.popToken();
+  } else if (token.text === "`") {
+    token = context.popToken();
+
+    if (token.text[0] === "\\") {
+      number = token.text.charCodeAt(1);
+    } else if (token.text === "EOF") {
+      throw new ParseError("\\char` missing argument");
+    } else {
+      number = token.text.charCodeAt(0);
+    }
+  } else {
+    base = 10;
+  }
+
+  if (base) {
+    // Parse a number in the given base, starting with first `token`.
+    number = digitToNumber[token.text];
+
+    if (number == null || number >= base) {
+      throw new ParseError(`Invalid base-${base} digit ${token.text}`);
+    }
+
+    let digit;
+
+    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {
+      number *= base;
+      number += digit;
+      context.popToken();
+    }
+  }
+
+  return `\\@char{${number}}`;
+}); // Basic support for macro definitions:
+//     \def\macro{expansion}
+//     \def\macro#1{expansion}
+//     \def\macro#1#2{expansion}
+//     \def\macro#1#2#3#4#5#6#7#8#9{expansion}
+// Also the \gdef and \global\def equivalents
+
+const def = (context, global) => {
+  let arg = context.consumeArgs(1)[0];
+
+  if (arg.length !== 1) {
+    throw new ParseError("\\gdef's first argument must be a macro name");
+  }
+
+  const name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ...
+
+  let numArgs = 0;
+  arg = context.consumeArgs(1)[0];
+
+  while (arg.length === 1 && arg[0].text === "#") {
+    arg = context.consumeArgs(1)[0];
+
+    if (arg.length !== 1) {
+      throw new ParseError(`Invalid argument number length "${arg.length}"`);
+    }
+
+    if (!/^[1-9]$/.test(arg[0].text)) {
+      throw new ParseError(`Invalid argument number "${arg[0].text}"`);
+    }
+
+    numArgs++;
+
+    if (parseInt(arg[0].text) !== numArgs) {
+      throw new ParseError(`Argument number "${arg[0].text}" out of order`);
+    }
+
+    arg = context.consumeArgs(1)[0];
+  } // Final arg is the expansion of the macro
+
+
+  context.macros.set(name, {
+    tokens: arg,
+    numArgs
+  }, global);
+  return '';
+};
+
+defineMacro("\\gdef", context => def(context, true));
+defineMacro("\\def", context => def(context, false));
+defineMacro("\\global", context => {
+  const next = context.consumeArgs(1)[0];
+
+  if (next.length !== 1) {
+    throw new ParseError("Invalid command after \\global");
+  }
+
+  const command = next[0].text; // TODO: Should expand command
+
+  if (command === "\\def") {
+    // \global\def is equivalent to \gdef
+    return def(context, true);
+  } else {
+    throw new ParseError(`Invalid command '${command}' after \\global`);
+  }
+}); // \newcommand{\macro}[args]{definition}
+// \renewcommand{\macro}[args]{definition}
+// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition}
+
+const newcommand = (context, existsOK, nonexistsOK) => {
+  let arg = context.consumeArgs(1)[0];
+
+  if (arg.length !== 1) {
+    throw new ParseError("\\newcommand's first argument must be a macro name");
+  }
+
+  const name = arg[0].text;
+  const exists = context.isDefined(name);
+
+  if (exists && !existsOK) {
+    throw new ParseError(`\\newcommand{${name}} attempting to redefine ` + `${name}; use \\renewcommand`);
+  }
+
+  if (!exists && !nonexistsOK) {
+    throw new ParseError(`\\renewcommand{${name}} when command ${name} ` + `does not yet exist; use \\newcommand`);
+  }
+
+  let numArgs = 0;
+  arg = context.consumeArgs(1)[0];
+
+  if (arg.length === 1 && arg[0].text === "[") {
+    let argText = '';
+    let token = context.expandNextToken();
+
+    while (token.text !== "]" && token.text !== "EOF") {
+      // TODO: Should properly expand arg, e.g., ignore {}s
+      argText += token.text;
+      token = context.expandNextToken();
+    }
+
+    if (!argText.match(/^\s*[0-9]+\s*$/)) {
+      throw new ParseError(`Invalid number of arguments: ${argText}`);
+    }
+
+    numArgs = parseInt(argText);
+    arg = context.consumeArgs(1)[0];
+  } // Final arg is the expansion of the macro
+
+
+  context.macros.set(name, {
+    tokens: arg,
+    numArgs
+  });
+  return '';
+};
+
+defineMacro("\\newcommand", context => newcommand(context, false, true));
+defineMacro("\\renewcommand", context => newcommand(context, true, false));
+defineMacro("\\providecommand", context => newcommand(context, true, true)); //////////////////////////////////////////////////////////////////////
+// Grouping
+// \let\bgroup={ \let\egroup=}
+
+defineMacro("\\bgroup", "{");
+defineMacro("\\egroup", "}"); // Symbols from latex.ltx:
+// \def\lq{`}
+// \def\rq{'}
+// \def \aa {\r a}
+// \def \AA {\r A}
+
+defineMacro("\\lq", "`");
+defineMacro("\\rq", "'");
+defineMacro("\\aa", "\\r a");
+defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.
+// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
+// \DeclareTextCommandDefault{\textregistered}{\textcircled{%
+//      \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}
+// \DeclareRobustCommand{\copyright}{%
+//    \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}
+
+defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}");
+defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");
+defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF
+
+defineMacro("\u212C", "\\mathscr{B}"); // script
+
+defineMacro("\u2130", "\\mathscr{E}");
+defineMacro("\u2131", "\\mathscr{F}");
+defineMacro("\u210B", "\\mathscr{H}");
+defineMacro("\u2110", "\\mathscr{I}");
+defineMacro("\u2112", "\\mathscr{L}");
+defineMacro("\u2133", "\\mathscr{M}");
+defineMacro("\u211B", "\\mathscr{R}");
+defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur
+
+defineMacro("\u210C", "\\mathfrak{H}");
+defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML.
+
+defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot
+// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
+// the dot at U+22C5 and gives it punct spacing.
+
+defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode
+
+defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
+defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
+defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via
+// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
+// It's thus treated like a \mathrel, but defined by a symbol that has zero
+// width but extends to the right.  We use \rlap to get that spacing.
+// For MathML we write U+0338 here. buildMathML.js will then do the overlay.
+
+defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx:
+// \def\neq{\not=} \let\ne=\neq
+// \DeclareRobustCommand
+//   \notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
+// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
+
+defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");
+defineMacro("\\ne", "\\neq");
+defineMacro("\u2260", "\\neq");
+defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}");
+defineMacro("\u2209", "\\notin"); // Unicode stacked relations
+
+defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}");
+defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");
+defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");
+defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}");
+defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}");
+defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}");
+defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode
+
+defineMacro("\u27C2", "\\perp");
+defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}");
+defineMacro("\u220C", "\\notni");
+defineMacro("\u231C", "\\ulcorner");
+defineMacro("\u231D", "\\urcorner");
+defineMacro("\u231E", "\\llcorner");
+defineMacro("\u231F", "\\lrcorner");
+defineMacro("\u00A9", "\\copyright");
+defineMacro("\u00AE", "\\textregistered");
+defineMacro("\uFE0F", "\\textregistered"); //////////////////////////////////////////////////////////////////////
+// LaTeX_2ε
+// \vdots{\vbox{\baselineskip4\p@  \lineskiplimit\z@
+// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
+// We'll call \varvdots, which gets a glyph from symbols.js.
+// The zero-width rule gets us an equivalent to the vertical 6pt kern.
+
+defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
+defineMacro("\u22ee", "\\vdots"); //////////////////////////////////////////////////////////////////////
+// amsmath.sty
+// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf
+// Italic Greek capital letters.  AMS defines these with \DeclareMathSymbol,
+// but they are equivalent to \mathit{\Letter}.
+
+defineMacro("\\varGamma", "\\mathit{\\Gamma}");
+defineMacro("\\varDelta", "\\mathit{\\Delta}");
+defineMacro("\\varTheta", "\\mathit{\\Theta}");
+defineMacro("\\varLambda", "\\mathit{\\Lambda}");
+defineMacro("\\varXi", "\\mathit{\\Xi}");
+defineMacro("\\varPi", "\\mathit{\\Pi}");
+defineMacro("\\varSigma", "\\mathit{\\Sigma}");
+defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
+defineMacro("\\varPhi", "\\mathit{\\Phi}");
+defineMacro("\\varPsi", "\\mathit{\\Psi}");
+defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
+
+defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
+
+defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
+
+defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;}
+// \def\implies{\DOTSB\;\Longrightarrow\;}
+// \def\impliedby{\DOTSB\;\Longleftarrow\;}
+
+defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;");
+defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;");
+defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro.
+
+const dotsByToken = {
+  ',': '\\dotsc',
+  '\\not': '\\dotsb',
+  // \keybin@ checks for the following:
+  '+': '\\dotsb',
+  '=': '\\dotsb',
+  '<': '\\dotsb',
+  '>': '\\dotsb',
+  '-': '\\dotsb',
+  '*': '\\dotsb',
+  ':': '\\dotsb',
+  // Symbols whose definition starts with \DOTSB:
+  '\\DOTSB': '\\dotsb',
+  '\\coprod': '\\dotsb',
+  '\\bigvee': '\\dotsb',
+  '\\bigwedge': '\\dotsb',
+  '\\biguplus': '\\dotsb',
+  '\\bigcap': '\\dotsb',
+  '\\bigcup': '\\dotsb',
+  '\\prod': '\\dotsb',
+  '\\sum': '\\dotsb',
+  '\\bigotimes': '\\dotsb',
+  '\\bigoplus': '\\dotsb',
+  '\\bigodot': '\\dotsb',
+  '\\bigsqcup': '\\dotsb',
+  '\\And': '\\dotsb',
+  '\\longrightarrow': '\\dotsb',
+  '\\Longrightarrow': '\\dotsb',
+  '\\longleftarrow': '\\dotsb',
+  '\\Longleftarrow': '\\dotsb',
+  '\\longleftrightarrow': '\\dotsb',
+  '\\Longleftrightarrow': '\\dotsb',
+  '\\mapsto': '\\dotsb',
+  '\\longmapsto': '\\dotsb',
+  '\\hookrightarrow': '\\dotsb',
+  '\\doteq': '\\dotsb',
+  // Symbols whose definition starts with \mathbin:
+  '\\mathbin': '\\dotsb',
+  // Symbols whose definition starts with \mathrel:
+  '\\mathrel': '\\dotsb',
+  '\\relbar': '\\dotsb',
+  '\\Relbar': '\\dotsb',
+  '\\xrightarrow': '\\dotsb',
+  '\\xleftarrow': '\\dotsb',
+  // Symbols whose definition starts with \DOTSI:
+  '\\DOTSI': '\\dotsi',
+  '\\int': '\\dotsi',
+  '\\oint': '\\dotsi',
+  '\\iint': '\\dotsi',
+  '\\iiint': '\\dotsi',
+  '\\iiiint': '\\dotsi',
+  '\\idotsint': '\\dotsi',
+  // Symbols whose definition starts with \DOTSX:
+  '\\DOTSX': '\\dotsx'
+};
+defineMacro("\\dots", function (context) {
+  // TODO: If used in text mode, should expand to \textellipsis.
+  // However, in KaTeX, \textellipsis and \ldots behave the same
+  // (in text mode), and it's unlikely we'd see any of the math commands
+  // that affect the behavior of \dots when in text mode.  So fine for now
+  // (until we support \ifmmode ... \else ... \fi).
+  let thedots = '\\dotso';
+  const next = context.expandAfterFuture().text;
+
+  if (next in dotsByToken) {
+    thedots = dotsByToken[next];
+  } else if (next.substr(0, 4) === '\\not') {
+    thedots = '\\dotsb';
+  } else if (next in symbols.math) {
+    if (utils.contains(['bin', 'rel'], symbols.math[next].group)) {
+      thedots = '\\dotsb';
+    }
+  }
+
+  return thedots;
+});
+const spaceAfterDots = {
+  // \rightdelim@ checks for the following:
+  ')': true,
+  ']': true,
+  '\\rbrack': true,
+  '\\}': true,
+  '\\rbrace': true,
+  '\\rangle': true,
+  '\\rceil': true,
+  '\\rfloor': true,
+  '\\rgroup': true,
+  '\\rmoustache': true,
+  '\\right': true,
+  '\\bigr': true,
+  '\\biggr': true,
+  '\\Bigr': true,
+  '\\Biggr': true,
+  // \extra@ also tests for the following:
+  '$': true,
+  // \extrap@ checks for the following:
+  ';': true,
+  '.': true,
+  ',': true
+};
+defineMacro("\\dotso", function (context) {
+  const next = context.future().text;
+
+  if (next in spaceAfterDots) {
+    return "\\ldots\\,";
+  } else {
+    return "\\ldots";
+  }
+});
+defineMacro("\\dotsc", function (context) {
+  const next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for
+  // ';' and '.', but doesn't check for ','.
+
+  if (next in spaceAfterDots && next !== ',') {
+    return "\\ldots\\,";
+  } else {
+    return "\\ldots";
+  }
+});
+defineMacro("\\cdots", function (context) {
+  const next = context.future().text;
+
+  if (next in spaceAfterDots) {
+    return "\\@cdots\\,";
+  } else {
+    return "\\@cdots";
+  }
+});
+defineMacro("\\dotsb", "\\cdots");
+defineMacro("\\dotsm", "\\cdots");
+defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro
+// starting with \DOTSX implies \dotso, and then \extra@ detects this case
+// and forces the added `\,`.
+
+defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax
+// \let\DOTSB\relax
+// \let\DOTSX\relax
+
+defineMacro("\\DOTSI", "\\relax");
+defineMacro("\\DOTSB", "\\relax");
+defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults
+// \DeclareRobustCommand{\tmspace}[3]{%
+//   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
+
+defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
+// TODO: math mode should use \thinmuskip
+
+defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\,
+
+defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip}
+// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
+// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu
+
+defineMacro("\\>", "\\mskip{4mu}");
+defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\:
+
+defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
+// TODO: math mode should use \thickmuskip = 5mu plus 5mu
+
+defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\;
+
+defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
+// TODO: math mode should use \thinmuskip
+
+defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\!
+
+defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
+// TODO: math mode should use \medmuskip
+
+defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
+// TODO: math mode should use \thickmuskip
+
+defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em }
+
+defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax}
+
+defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax}
+
+defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax}
+
+defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag
+
+defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren");
+defineMacro("\\tag@paren", "\\tag@literal{({#1})}");
+defineMacro("\\tag@literal", context => {
+  if (context.macros.get("\\df@tag")) {
+    throw new ParseError("Multiple \\tag");
+  }
+
+  return "\\gdef\\df@tag{\\text{#1}}";
+}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin
+//   {\operator@font mod}\penalty900
+//   \mkern5mu\nonscript\mskip-\medmuskip}
+// \newcommand{\pod}[1]{\allowbreak
+//   \if@display\mkern18mu\else\mkern8mu\fi(#1)}
+// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}}
+// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu
+//   \else\mkern12mu\fi{\operator@font mod}\,\,#1}
+// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu
+
+defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");
+defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
+defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
+defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb    --   A simulation of bold.
+// The version in ambsy.sty works by typesetting three copies of the argument
+// with small offsets. We use two copies. We omit the vertical offset because
+// of rendering problems that makeVList encounters in Safari.
+
+defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); //////////////////////////////////////////////////////////////////////
+// LaTeX source2e
+// \\ defaults to \newline, but changes to \cr within array environment
+
+defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
+// TODO: Doesn't normally work in math mode because \@ fails.  KaTeX doesn't
+// support \@ yet, so that's omitted, and we add \text so that the result
+// doesn't look funny in math mode.
+
+defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
+//         {\sbox\z@ T%
+//          \vbox to\ht\z@{\hbox{\check@mathfonts
+//                               \fontsize\sf@size\z@
+//                               \math@fontsfalse\selectfont
+//                               A}%
+//                         \vss}%
+//         }%
+//         \kern-.15em%
+//         \TeX}
+// This code aligns the top of the A with the T (from the perspective of TeX's
+// boxes, though visually the A appears to extend above slightly).
+// We compute the corresponding \raisebox when A is rendered in \normalsize
+// \scriptstyle, which has a scale factor of 0.7 (see Options.js).
+
+const latexRaiseA = metricMap['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * metricMap['Main-Regular']["A".charCodeAt(0)][1] + "em";
+defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + `L\\kern-.36em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo
+
+defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + `K\\kern-.17em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
+// \def\@hspace#1{\hskip  #1\relax}
+// \def\@hspacer#1{\vrule \@width\z@\nobreak
+//                 \hskip #1\hskip \z@skip}
+
+defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace");
+defineMacro("\\@hspace", "\\hskip #1\\relax");
+defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); //////////////////////////////////////////////////////////////////////
+// mathtools.sty
+//\providecommand\ordinarycolon{:}
+
+defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
+//TODO(edemaine): Not yet centered. Fix via \raisebox or #726
+
+defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
+
+defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
+
+defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔
+// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
+
+defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+
+defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+
+defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
+
+defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕
+// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
+
+defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
+
+defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
+
+defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
+
+defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
+
+defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
+
+defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
+
+defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.
+
+defineMacro("\u2237", "\\dblcolon"); // ::
+
+defineMacro("\u2239", "\\eqcolon"); // -:
+
+defineMacro("\u2254", "\\coloneqq"); // :=
+
+defineMacro("\u2255", "\\eqqcolon"); // =:
+
+defineMacro("\u2A74", "\\Coloneqq"); // ::=
+//////////////////////////////////////////////////////////////////////
+// colonequals.sty
+// Alternate names for mathtools's macros:
+
+defineMacro("\\ratio", "\\vcentcolon");
+defineMacro("\\coloncolon", "\\dblcolon");
+defineMacro("\\colonequals", "\\coloneqq");
+defineMacro("\\coloncolonequals", "\\Coloneqq");
+defineMacro("\\equalscolon", "\\eqqcolon");
+defineMacro("\\equalscoloncolon", "\\Eqqcolon");
+defineMacro("\\colonminus", "\\coloneq");
+defineMacro("\\coloncolonminus", "\\Coloneq");
+defineMacro("\\minuscolon", "\\eqcolon");
+defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals.
+
+defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals.
+
+defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions:
+
+defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
+defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");
+defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");
+defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts
+
+defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
+defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
+defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); //////////////////////////////////////////////////////////////////////
+// MathML alternates for KaTeX glyphs in the Unicode private area
+
+defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
+defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
+defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
+defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
+defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
+defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
+defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
+defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
+defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
+defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
+defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
+defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
+defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
+defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); //////////////////////////////////////////////////////////////////////
+// stmaryrd and semantic
+// The stmaryrd and semantic packages render the next four items by calling a
+// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.
+
+defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}");
+defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}");
+defineMacro("\u27e6", "\\llbracket"); // blackboard bold [
+
+defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ]
+
+defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}");
+defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}");
+defineMacro("\u2983", "\\lBrace"); // blackboard bold {
+
+defineMacro("\u2984", "\\rBrace"); // blackboard bold }
+// TODO: Create variable sized versions of the last two items. I believe that
+// will require new font glyphs.
+//////////////////////////////////////////////////////////////////////
+// texvc.sty
+// The texvc package contains macros available in mediawiki pages.
+// We omit the functions deprecated at
+// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax
+// We also omit texvc's \O, which conflicts with \text{\O}
+
+defineMacro("\\darr", "\\downarrow");
+defineMacro("\\dArr", "\\Downarrow");
+defineMacro("\\Darr", "\\Downarrow");
+defineMacro("\\lang", "\\langle");
+defineMacro("\\rang", "\\rangle");
+defineMacro("\\uarr", "\\uparrow");
+defineMacro("\\uArr", "\\Uparrow");
+defineMacro("\\Uarr", "\\Uparrow");
+defineMacro("\\N", "\\mathbb{N}");
+defineMacro("\\R", "\\mathbb{R}");
+defineMacro("\\Z", "\\mathbb{Z}");
+defineMacro("\\alef", "\\aleph");
+defineMacro("\\alefsym", "\\aleph");
+defineMacro("\\Alpha", "\\mathrm{A}");
+defineMacro("\\Beta", "\\mathrm{B}");
+defineMacro("\\bull", "\\bullet");
+defineMacro("\\Chi", "\\mathrm{X}");
+defineMacro("\\clubs", "\\clubsuit");
+defineMacro("\\cnums", "\\mathbb{C}");
+defineMacro("\\Complex", "\\mathbb{C}");
+defineMacro("\\Dagger", "\\ddagger");
+defineMacro("\\diamonds", "\\diamondsuit");
+defineMacro("\\empty", "\\emptyset");
+defineMacro("\\Epsilon", "\\mathrm{E}");
+defineMacro("\\Eta", "\\mathrm{H}");
+defineMacro("\\exist", "\\exists");
+defineMacro("\\harr", "\\leftrightarrow");
+defineMacro("\\hArr", "\\Leftrightarrow");
+defineMacro("\\Harr", "\\Leftrightarrow");
+defineMacro("\\hearts", "\\heartsuit");
+defineMacro("\\image", "\\Im");
+defineMacro("\\infin", "\\infty");
+defineMacro("\\Iota", "\\mathrm{I}");
+defineMacro("\\isin", "\\in");
+defineMacro("\\Kappa", "\\mathrm{K}");
+defineMacro("\\larr", "\\leftarrow");
+defineMacro("\\lArr", "\\Leftarrow");
+defineMacro("\\Larr", "\\Leftarrow");
+defineMacro("\\lrarr", "\\leftrightarrow");
+defineMacro("\\lrArr", "\\Leftrightarrow");
+defineMacro("\\Lrarr", "\\Leftrightarrow");
+defineMacro("\\Mu", "\\mathrm{M}");
+defineMacro("\\natnums", "\\mathbb{N}");
+defineMacro("\\Nu", "\\mathrm{N}");
+defineMacro("\\Omicron", "\\mathrm{O}");
+defineMacro("\\plusmn", "\\pm");
+defineMacro("\\rarr", "\\rightarrow");
+defineMacro("\\rArr", "\\Rightarrow");
+defineMacro("\\Rarr", "\\Rightarrow");
+defineMacro("\\real", "\\Re");
+defineMacro("\\reals", "\\mathbb{R}");
+defineMacro("\\Reals", "\\mathbb{R}");
+defineMacro("\\Rho", "\\mathrm{P}");
+defineMacro("\\sdot", "\\cdot");
+defineMacro("\\sect", "\\S");
+defineMacro("\\spades", "\\spadesuit");
+defineMacro("\\sub", "\\subset");
+defineMacro("\\sube", "\\subseteq");
+defineMacro("\\supe", "\\supseteq");
+defineMacro("\\Tau", "\\mathrm{T}");
+defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}");
+
+defineMacro("\\weierp", "\\wp");
+defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////////////////////////////////
+// statmath.sty
+// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
+
+defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
+defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
+defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
+
+defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
+defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
+defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
+defineMacro("\\red", "\\textcolor{##df0030}{#1}");
+defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
+defineMacro("\\gray", "\\textcolor{gray}{#1}");
+defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
+defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
+defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
+defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
+defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
+defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
+defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
+defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
+defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
+defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
+defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
+defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
+defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
+defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
+defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
+defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
+defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
+defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
+defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
+defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
+defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
+defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
+defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
+defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
+defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
+defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
+defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
+defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
+defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
+defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
+defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
+defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
+defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
+defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
+defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
+defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
+defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
+defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
+defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
+defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
+defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
+defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
+defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
+defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
+defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
+defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
+defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
+defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
+defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
+defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
+
+/**
+ * This file contains the “gullet” where macros are expanded
+ * until only non-macro tokens remain.
+ */
+// List of commands that act like macros but aren't defined as a macro,
+// function, or symbol.  Used in `isDefined`.
+const implicitCommands = {
+  "\\relax": true,
+  // MacroExpander.js
+  "^": true,
+  // Parser.js
+  "_": true,
+  // Parser.js
+  "\\limits": true,
+  // Parser.js
+  "\\nolimits": true // Parser.js
+
+};
+class MacroExpander {
+  constructor(input, settings, mode) {
+    this.settings = void 0;
+    this.expansionCount = void 0;
+    this.lexer = void 0;
+    this.macros = void 0;
+    this.stack = void 0;
+    this.mode = void 0;
+    this.settings = settings;
+    this.expansionCount = 0;
+    this.feed(input); // Make new global namespace
+
+    this.macros = new Namespace(builtinMacros, settings.macros);
+    this.mode = mode;
+    this.stack = []; // contains tokens in REVERSE order
+  }
+  /**
+   * Feed a new input string to the same MacroExpander
+   * (with existing macros etc.).
+   */
+
+
+  feed(input) {
+    this.lexer = new Lexer(input, this.settings);
+  }
+  /**
+   * Switches between "text" and "math" modes.
+   */
+
+
+  switchMode(newMode) {
+    this.mode = newMode;
+  }
+  /**
+   * Start a new group nesting within all namespaces.
+   */
+
+
+  beginGroup() {
+    this.macros.beginGroup();
+  }
+  /**
+   * End current group nesting within all namespaces.
+   */
+
+
+  endGroup() {
+    this.macros.endGroup();
+  }
+  /**
+   * Returns the topmost token on the stack, without expanding it.
+   * Similar in behavior to TeX's `\futurelet`.
+   */
+
+
+  future() {
+    if (this.stack.length === 0) {
+      this.pushToken(this.lexer.lex());
+    }
+
+    return this.stack[this.stack.length - 1];
+  }
+  /**
+   * Remove and return the next unexpanded token.
+   */
+
+
+  popToken() {
+    this.future(); // ensure non-empty stack
+
+    return this.stack.pop();
+  }
+  /**
+   * Add a given token to the token stack.  In particular, this get be used
+   * to put back a token returned from one of the other methods.
+   */
+
+
+  pushToken(token) {
+    this.stack.push(token);
+  }
+  /**
+   * Append an array of tokens to the token stack.
+   */
+
+
+  pushTokens(tokens) {
+    this.stack.push(...tokens);
+  }
+  /**
+   * Consume all following space tokens, without expansion.
+   */
+
+
+  consumeSpaces() {
+    for (;;) {
+      const token = this.future();
+
+      if (token.text === " ") {
+        this.stack.pop();
+      } else {
+        break;
+      }
+    }
+  }
+  /**
+   * Consume the specified number of arguments from the token stream,
+   * and return the resulting array of arguments.
+   */
+
+
+  consumeArgs(numArgs) {
+    const args = []; // obtain arguments, either single token or balanced {…} group
+
+    for (let i = 0; i < numArgs; ++i) {
+      this.consumeSpaces(); // ignore spaces before each argument
+
+      const startOfArg = this.popToken();
+
+      if (startOfArg.text === "{") {
+        const arg = [];
+        let depth = 1;
+
+        while (depth !== 0) {
+          const tok = this.popToken();
+          arg.push(tok);
+
+          if (tok.text === "{") {
+            ++depth;
+          } else if (tok.text === "}") {
+            --depth;
+          } else if (tok.text === "EOF") {
+            throw new ParseError("End of input in macro argument", startOfArg);
+          }
+        }
+
+        arg.pop(); // remove last }
+
+        arg.reverse(); // like above, to fit in with stack order
+
+        args[i] = arg;
+      } else if (startOfArg.text === "EOF") {
+        throw new ParseError("End of input expecting macro argument");
+      } else {
+        args[i] = [startOfArg];
+      }
+    }
+
+    return args;
+  }
+  /**
+   * Expand the next token only once if possible.
+   *
+   * If the token is expanded, the resulting tokens will be pushed onto
+   * the stack in reverse order and will be returned as an array,
+   * also in reverse order.
+   *
+   * If not, the next token will be returned without removing it
+   * from the stack.  This case can be detected by a `Token` return value
+   * instead of an `Array` return value.
+   *
+   * In either case, the next token will be on the top of the stack,
+   * or the stack will be empty.
+   *
+   * Used to implement `expandAfterFuture` and `expandNextToken`.
+   *
+   * At the moment, macro expansion doesn't handle delimited macros,
+   * i.e. things like those defined by \def\foo#1\end{…}.
+   * See the TeX book page 202ff. for details on how those should behave.
+   */
+
+
+  expandOnce() {
+    const topToken = this.popToken();
+    const name = topToken.text;
+
+    const expansion = this._getExpansion(name);
+
+    if (expansion == null) {
+      // mainly checking for undefined here
+      // Fully expanded
+      this.pushToken(topToken);
+      return topToken;
+    }
+
+    this.expansionCount++;
+
+    if (this.expansionCount > this.settings.maxExpand) {
+      throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting");
+    }
+
+    let tokens = expansion.tokens;
+
+    if (expansion.numArgs) {
+      const args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders
+
+      tokens = tokens.slice(); // make a shallow copy
+
+      for (let i = tokens.length - 1; i >= 0; --i) {
+        let tok = tokens[i];
+
+        if (tok.text === "#") {
+          if (i === 0) {
+            throw new ParseError("Incomplete placeholder at end of macro body", tok);
+          }
+
+          tok = tokens[--i]; // next token on stack
+
+          if (tok.text === "#") {
+            // ## → #
+            tokens.splice(i + 1, 1); // drop first #
+          } else if (/^[1-9]$/.test(tok.text)) {
+            // replace the placeholder with the indicated argument
+            tokens.splice(i, 2, ...args[+tok.text - 1]);
+          } else {
+            throw new ParseError("Not a valid argument number", tok);
+          }
+        }
+      }
+    } // Concatenate expansion onto top of stack.
+
+
+    this.pushTokens(tokens);
+    return tokens;
+  }
+  /**
+   * Expand the next token only once (if possible), and return the resulting
+   * top token on the stack (without removing anything from the stack).
+   * Similar in behavior to TeX's `\expandafter\futurelet`.
+   * Equivalent to expandOnce() followed by future().
+   */
+
+
+  expandAfterFuture() {
+    this.expandOnce();
+    return this.future();
+  }
+  /**
+   * Recursively expand first token, then return first non-expandable token.
+   */
+
+
+  expandNextToken() {
+    for (;;) {
+      const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
+
+      if (expanded instanceof Token) {
+        // \relax stops the expansion, but shouldn't get returned (a
+        // null return value couldn't get implemented as a function).
+        if (expanded.text === "\\relax") {
+          this.stack.pop();
+        } else {
+          return this.stack.pop(); // === expanded
+        }
+      }
+    } // Flow unable to figure out that this pathway is impossible.
+    // https://github.com/facebook/flow/issues/4808
+
+
+    throw new Error(); // eslint-disable-line no-unreachable
+  }
+  /**
+   * Fully expand the given macro name and return the resulting list of
+   * tokens, or return `undefined` if no such macro is defined.
+   */
+
+
+  expandMacro(name) {
+    if (!this.macros.get(name)) {
+      return undefined;
+    }
+
+    const output = [];
+    const oldStackLength = this.stack.length;
+    this.pushToken(new Token(name));
+
+    while (this.stack.length > oldStackLength) {
+      const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded.
+
+      if (expanded instanceof Token) {
+        output.push(this.stack.pop());
+      }
+    }
+
+    return output;
+  }
+  /**
+   * Fully expand the given macro name and return the result as a string,
+   * or return `undefined` if no such macro is defined.
+   */
+
+
+  expandMacroAsText(name) {
+    const tokens = this.expandMacro(name);
+
+    if (tokens) {
+      return tokens.map(token => token.text).join("");
+    } else {
+      return tokens;
+    }
+  }
+  /**
+   * Returns the expanded macro as a reversed array of tokens and a macro
+   * argument count.  Or returns `null` if no such macro.
+   */
+
+
+  _getExpansion(name) {
+    const definition = this.macros.get(name);
+
+    if (definition == null) {
+      // mainly checking for undefined here
+      return definition;
+    }
+
+    const expansion = typeof definition === "function" ? definition(this) : definition;
+
+    if (typeof expansion === "string") {
+      let numArgs = 0;
+
+      if (expansion.indexOf("#") !== -1) {
+        const stripped = expansion.replace(/##/g, "");
+
+        while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
+          ++numArgs;
+        }
+      }
+
+      const bodyLexer = new Lexer(expansion, this.settings);
+      const tokens = [];
+      let tok = bodyLexer.lex();
+
+      while (tok.text !== "EOF") {
+        tokens.push(tok);
+        tok = bodyLexer.lex();
+      }
+
+      tokens.reverse(); // to fit in with stack using push and pop
+
+      const expanded = {
+        tokens,
+        numArgs
+      };
+      return expanded;
+    }
+
+    return expansion;
+  }
+  /**
+   * Determine whether a command is currently "defined" (has some
+   * functionality), meaning that it's a macro (in the current group),
+   * a function, a symbol, or one of the special commands listed in
+   * `implicitCommands`.
+   */
+
+
+  isDefined(name) {
+    return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);
+  }
+
+}
+
+// Mapping of Unicode accent characters to their LaTeX equivalent in text and
+// math mode (when they exist).
+var unicodeAccents = {
+  '\u0301': {
+    text: "\\'",
+    math: '\\acute'
+  },
+  '\u0300': {
+    text: '\\`',
+    math: '\\grave'
+  },
+  '\u0308': {
+    text: '\\"',
+    math: '\\ddot'
+  },
+  '\u0303': {
+    text: '\\~',
+    math: '\\tilde'
+  },
+  '\u0304': {
+    text: '\\=',
+    math: '\\bar'
+  },
+  '\u0306': {
+    text: '\\u',
+    math: '\\breve'
+  },
+  '\u030c': {
+    text: '\\v',
+    math: '\\check'
+  },
+  '\u0302': {
+    text: '\\^',
+    math: '\\hat'
+  },
+  '\u0307': {
+    text: '\\.',
+    math: '\\dot'
+  },
+  '\u030a': {
+    text: '\\r',
+    math: '\\mathring'
+  },
+  '\u030b': {
+    text: '\\H'
+  }
+};
+
+// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
+var unicodeSymbols = {
+  "\u00e1": "\u0061\u0301",
+  // á = \'{a}
+  "\u00e0": "\u0061\u0300",
+  // à = \`{a}
+  "\u00e4": "\u0061\u0308",
+  // ä = \"{a}
+  "\u01df": "\u0061\u0308\u0304",
+  // ǟ = \"\={a}
+  "\u00e3": "\u0061\u0303",
+  // ã = \~{a}
+  "\u0101": "\u0061\u0304",
+  // ā = \={a}
+  "\u0103": "\u0061\u0306",
+  // ă = \u{a}
+  "\u1eaf": "\u0061\u0306\u0301",
+  // ắ = \u\'{a}
+  "\u1eb1": "\u0061\u0306\u0300",
+  // ằ = \u\`{a}
+  "\u1eb5": "\u0061\u0306\u0303",
+  // ẵ = \u\~{a}
+  "\u01ce": "\u0061\u030c",
+  // ǎ = \v{a}
+  "\u00e2": "\u0061\u0302",
+  // â = \^{a}
+  "\u1ea5": "\u0061\u0302\u0301",
+  // ấ = \^\'{a}
+  "\u1ea7": "\u0061\u0302\u0300",
+  // ầ = \^\`{a}
+  "\u1eab": "\u0061\u0302\u0303",
+  // ẫ = \^\~{a}
+  "\u0227": "\u0061\u0307",
+  // ȧ = \.{a}
+  "\u01e1": "\u0061\u0307\u0304",
+  // ǡ = \.\={a}
+  "\u00e5": "\u0061\u030a",
+  // å = \r{a}
+  "\u01fb": "\u0061\u030a\u0301",
+  // ǻ = \r\'{a}
+  "\u1e03": "\u0062\u0307",
+  // ḃ = \.{b}
+  "\u0107": "\u0063\u0301",
+  // ć = \'{c}
+  "\u010d": "\u0063\u030c",
+  // č = \v{c}
+  "\u0109": "\u0063\u0302",
+  // ĉ = \^{c}
+  "\u010b": "\u0063\u0307",
+  // ċ = \.{c}
+  "\u010f": "\u0064\u030c",
+  // ď = \v{d}
+  "\u1e0b": "\u0064\u0307",
+  // ḋ = \.{d}
+  "\u00e9": "\u0065\u0301",
+  // é = \'{e}
+  "\u00e8": "\u0065\u0300",
+  // è = \`{e}
+  "\u00eb": "\u0065\u0308",
+  // ë = \"{e}
+  "\u1ebd": "\u0065\u0303",
+  // ẽ = \~{e}
+  "\u0113": "\u0065\u0304",
+  // ē = \={e}
+  "\u1e17": "\u0065\u0304\u0301",
+  // ḗ = \=\'{e}
+  "\u1e15": "\u0065\u0304\u0300",
+  // ḕ = \=\`{e}
+  "\u0115": "\u0065\u0306",
+  // ĕ = \u{e}
+  "\u011b": "\u0065\u030c",
+  // ě = \v{e}
+  "\u00ea": "\u0065\u0302",
+  // ê = \^{e}
+  "\u1ebf": "\u0065\u0302\u0301",
+  // ế = \^\'{e}
+  "\u1ec1": "\u0065\u0302\u0300",
+  // ề = \^\`{e}
+  "\u1ec5": "\u0065\u0302\u0303",
+  // ễ = \^\~{e}
+  "\u0117": "\u0065\u0307",
+  // ė = \.{e}
+  "\u1e1f": "\u0066\u0307",
+  // ḟ = \.{f}
+  "\u01f5": "\u0067\u0301",
+  // ǵ = \'{g}
+  "\u1e21": "\u0067\u0304",
+  // ḡ = \={g}
+  "\u011f": "\u0067\u0306",
+  // ğ = \u{g}
+  "\u01e7": "\u0067\u030c",
+  // ǧ = \v{g}
+  "\u011d": "\u0067\u0302",
+  // ĝ = \^{g}
+  "\u0121": "\u0067\u0307",
+  // ġ = \.{g}
+  "\u1e27": "\u0068\u0308",
+  // ḧ = \"{h}
+  "\u021f": "\u0068\u030c",
+  // ȟ = \v{h}
+  "\u0125": "\u0068\u0302",
+  // ĥ = \^{h}
+  "\u1e23": "\u0068\u0307",
+  // ḣ = \.{h}
+  "\u00ed": "\u0069\u0301",
+  // í = \'{i}
+  "\u00ec": "\u0069\u0300",
+  // ì = \`{i}
+  "\u00ef": "\u0069\u0308",
+  // ï = \"{i}
+  "\u1e2f": "\u0069\u0308\u0301",
+  // ḯ = \"\'{i}
+  "\u0129": "\u0069\u0303",
+  // ĩ = \~{i}
+  "\u012b": "\u0069\u0304",
+  // ī = \={i}
+  "\u012d": "\u0069\u0306",
+  // ĭ = \u{i}
+  "\u01d0": "\u0069\u030c",
+  // ǐ = \v{i}
+  "\u00ee": "\u0069\u0302",
+  // î = \^{i}
+  "\u01f0": "\u006a\u030c",
+  // ǰ = \v{j}
+  "\u0135": "\u006a\u0302",
+  // ĵ = \^{j}
+  "\u1e31": "\u006b\u0301",
+  // ḱ = \'{k}
+  "\u01e9": "\u006b\u030c",
+  // ǩ = \v{k}
+  "\u013a": "\u006c\u0301",
+  // ĺ = \'{l}
+  "\u013e": "\u006c\u030c",
+  // ľ = \v{l}
+  "\u1e3f": "\u006d\u0301",
+  // ḿ = \'{m}
+  "\u1e41": "\u006d\u0307",
+  // ṁ = \.{m}
+  "\u0144": "\u006e\u0301",
+  // ń = \'{n}
+  "\u01f9": "\u006e\u0300",
+  // ǹ = \`{n}
+  "\u00f1": "\u006e\u0303",
+  // ñ = \~{n}
+  "\u0148": "\u006e\u030c",
+  // ň = \v{n}
+  "\u1e45": "\u006e\u0307",
+  // ṅ = \.{n}
+  "\u00f3": "\u006f\u0301",
+  // ó = \'{o}
+  "\u00f2": "\u006f\u0300",
+  // ò = \`{o}
+  "\u00f6": "\u006f\u0308",
+  // ö = \"{o}
+  "\u022b": "\u006f\u0308\u0304",
+  // ȫ = \"\={o}
+  "\u00f5": "\u006f\u0303",
+  // õ = \~{o}
+  "\u1e4d": "\u006f\u0303\u0301",
+  // ṍ = \~\'{o}
+  "\u1e4f": "\u006f\u0303\u0308",
+  // ṏ = \~\"{o}
+  "\u022d": "\u006f\u0303\u0304",
+  // ȭ = \~\={o}
+  "\u014d": "\u006f\u0304",
+  // ō = \={o}
+  "\u1e53": "\u006f\u0304\u0301",
+  // ṓ = \=\'{o}
+  "\u1e51": "\u006f\u0304\u0300",
+  // ṑ = \=\`{o}
+  "\u014f": "\u006f\u0306",
+  // ŏ = \u{o}
+  "\u01d2": "\u006f\u030c",
+  // ǒ = \v{o}
+  "\u00f4": "\u006f\u0302",
+  // ô = \^{o}
+  "\u1ed1": "\u006f\u0302\u0301",
+  // ố = \^\'{o}
+  "\u1ed3": "\u006f\u0302\u0300",
+  // ồ = \^\`{o}
+  "\u1ed7": "\u006f\u0302\u0303",
+  // ỗ = \^\~{o}
+  "\u022f": "\u006f\u0307",
+  // ȯ = \.{o}
+  "\u0231": "\u006f\u0307\u0304",
+  // ȱ = \.\={o}
+  "\u0151": "\u006f\u030b",
+  // ő = \H{o}
+  "\u1e55": "\u0070\u0301",
+  // ṕ = \'{p}
+  "\u1e57": "\u0070\u0307",
+  // ṗ = \.{p}
+  "\u0155": "\u0072\u0301",
+  // ŕ = \'{r}
+  "\u0159": "\u0072\u030c",
+  // ř = \v{r}
+  "\u1e59": "\u0072\u0307",
+  // ṙ = \.{r}
+  "\u015b": "\u0073\u0301",
+  // ś = \'{s}
+  "\u1e65": "\u0073\u0301\u0307",
+  // ṥ = \'\.{s}
+  "\u0161": "\u0073\u030c",
+  // š = \v{s}
+  "\u1e67": "\u0073\u030c\u0307",
+  // ṧ = \v\.{s}
+  "\u015d": "\u0073\u0302",
+  // ŝ = \^{s}
+  "\u1e61": "\u0073\u0307",
+  // ṡ = \.{s}
+  "\u1e97": "\u0074\u0308",
+  // ẗ = \"{t}
+  "\u0165": "\u0074\u030c",
+  // ť = \v{t}
+  "\u1e6b": "\u0074\u0307",
+  // ṫ = \.{t}
+  "\u00fa": "\u0075\u0301",
+  // ú = \'{u}
+  "\u00f9": "\u0075\u0300",
+  // ù = \`{u}
+  "\u00fc": "\u0075\u0308",
+  // ü = \"{u}
+  "\u01d8": "\u0075\u0308\u0301",
+  // ǘ = \"\'{u}
+  "\u01dc": "\u0075\u0308\u0300",
+  // ǜ = \"\`{u}
+  "\u01d6": "\u0075\u0308\u0304",
+  // ǖ = \"\={u}
+  "\u01da": "\u0075\u0308\u030c",
+  // ǚ = \"\v{u}
+  "\u0169": "\u0075\u0303",
+  // ũ = \~{u}
+  "\u1e79": "\u0075\u0303\u0301",
+  // ṹ = \~\'{u}
+  "\u016b": "\u0075\u0304",
+  // ū = \={u}
+  "\u1e7b": "\u0075\u0304\u0308",
+  // ṻ = \=\"{u}
+  "\u016d": "\u0075\u0306",
+  // ŭ = \u{u}
+  "\u01d4": "\u0075\u030c",
+  // ǔ = \v{u}
+  "\u00fb": "\u0075\u0302",
+  // û = \^{u}
+  "\u016f": "\u0075\u030a",
+  // ů = \r{u}
+  "\u0171": "\u0075\u030b",
+  // ű = \H{u}
+  "\u1e7d": "\u0076\u0303",
+  // ṽ = \~{v}
+  "\u1e83": "\u0077\u0301",
+  // ẃ = \'{w}
+  "\u1e81": "\u0077\u0300",
+  // ẁ = \`{w}
+  "\u1e85": "\u0077\u0308",
+  // ẅ = \"{w}
+  "\u0175": "\u0077\u0302",
+  // ŵ = \^{w}
+  "\u1e87": "\u0077\u0307",
+  // ẇ = \.{w}
+  "\u1e98": "\u0077\u030a",
+  // ẘ = \r{w}
+  "\u1e8d": "\u0078\u0308",
+  // ẍ = \"{x}
+  "\u1e8b": "\u0078\u0307",
+  // ẋ = \.{x}
+  "\u00fd": "\u0079\u0301",
+  // ý = \'{y}
+  "\u1ef3": "\u0079\u0300",
+  // ỳ = \`{y}
+  "\u00ff": "\u0079\u0308",
+  // ÿ = \"{y}
+  "\u1ef9": "\u0079\u0303",
+  // ỹ = \~{y}
+  "\u0233": "\u0079\u0304",
+  // ȳ = \={y}
+  "\u0177": "\u0079\u0302",
+  // ŷ = \^{y}
+  "\u1e8f": "\u0079\u0307",
+  // ẏ = \.{y}
+  "\u1e99": "\u0079\u030a",
+  // ẙ = \r{y}
+  "\u017a": "\u007a\u0301",
+  // ź = \'{z}
+  "\u017e": "\u007a\u030c",
+  // ž = \v{z}
+  "\u1e91": "\u007a\u0302",
+  // ẑ = \^{z}
+  "\u017c": "\u007a\u0307",
+  // ż = \.{z}
+  "\u00c1": "\u0041\u0301",
+  // Á = \'{A}
+  "\u00c0": "\u0041\u0300",
+  // À = \`{A}
+  "\u00c4": "\u0041\u0308",
+  // Ä = \"{A}
+  "\u01de": "\u0041\u0308\u0304",
+  // Ǟ = \"\={A}
+  "\u00c3": "\u0041\u0303",
+  // Ã = \~{A}
+  "\u0100": "\u0041\u0304",
+  // Ā = \={A}
+  "\u0102": "\u0041\u0306",
+  // Ă = \u{A}
+  "\u1eae": "\u0041\u0306\u0301",
+  // Ắ = \u\'{A}
+  "\u1eb0": "\u0041\u0306\u0300",
+  // Ằ = \u\`{A}
+  "\u1eb4": "\u0041\u0306\u0303",
+  // Ẵ = \u\~{A}
+  "\u01cd": "\u0041\u030c",
+  // Ǎ = \v{A}
+  "\u00c2": "\u0041\u0302",
+  // Â = \^{A}
+  "\u1ea4": "\u0041\u0302\u0301",
+  // Ấ = \^\'{A}
+  "\u1ea6": "\u0041\u0302\u0300",
+  // Ầ = \^\`{A}
+  "\u1eaa": "\u0041\u0302\u0303",
+  // Ẫ = \^\~{A}
+  "\u0226": "\u0041\u0307",
+  // Ȧ = \.{A}
+  "\u01e0": "\u0041\u0307\u0304",
+  // Ǡ = \.\={A}
+  "\u00c5": "\u0041\u030a",
+  // Å = \r{A}
+  "\u01fa": "\u0041\u030a\u0301",
+  // Ǻ = \r\'{A}
+  "\u1e02": "\u0042\u0307",
+  // Ḃ = \.{B}
+  "\u0106": "\u0043\u0301",
+  // Ć = \'{C}
+  "\u010c": "\u0043\u030c",
+  // Č = \v{C}
+  "\u0108": "\u0043\u0302",
+  // Ĉ = \^{C}
+  "\u010a": "\u0043\u0307",
+  // Ċ = \.{C}
+  "\u010e": "\u0044\u030c",
+  // Ď = \v{D}
+  "\u1e0a": "\u0044\u0307",
+  // Ḋ = \.{D}
+  "\u00c9": "\u0045\u0301",
+  // É = \'{E}
+  "\u00c8": "\u0045\u0300",
+  // È = \`{E}
+  "\u00cb": "\u0045\u0308",
+  // Ë = \"{E}
+  "\u1ebc": "\u0045\u0303",
+  // Ẽ = \~{E}
+  "\u0112": "\u0045\u0304",
+  // Ē = \={E}
+  "\u1e16": "\u0045\u0304\u0301",
+  // Ḗ = \=\'{E}
+  "\u1e14": "\u0045\u0304\u0300",
+  // Ḕ = \=\`{E}
+  "\u0114": "\u0045\u0306",
+  // Ĕ = \u{E}
+  "\u011a": "\u0045\u030c",
+  // Ě = \v{E}
+  "\u00ca": "\u0045\u0302",
+  // Ê = \^{E}
+  "\u1ebe": "\u0045\u0302\u0301",
+  // Ế = \^\'{E}
+  "\u1ec0": "\u0045\u0302\u0300",
+  // Ề = \^\`{E}
+  "\u1ec4": "\u0045\u0302\u0303",
+  // Ễ = \^\~{E}
+  "\u0116": "\u0045\u0307",
+  // Ė = \.{E}
+  "\u1e1e": "\u0046\u0307",
+  // Ḟ = \.{F}
+  "\u01f4": "\u0047\u0301",
+  // Ǵ = \'{G}
+  "\u1e20": "\u0047\u0304",
+  // Ḡ = \={G}
+  "\u011e": "\u0047\u0306",
+  // Ğ = \u{G}
+  "\u01e6": "\u0047\u030c",
+  // Ǧ = \v{G}
+  "\u011c": "\u0047\u0302",
+  // Ĝ = \^{G}
+  "\u0120": "\u0047\u0307",
+  // Ġ = \.{G}
+  "\u1e26": "\u0048\u0308",
+  // Ḧ = \"{H}
+  "\u021e": "\u0048\u030c",
+  // Ȟ = \v{H}
+  "\u0124": "\u0048\u0302",
+  // Ĥ = \^{H}
+  "\u1e22": "\u0048\u0307",
+  // Ḣ = \.{H}
+  "\u00cd": "\u0049\u0301",
+  // Í = \'{I}
+  "\u00cc": "\u0049\u0300",
+  // Ì = \`{I}
+  "\u00cf": "\u0049\u0308",
+  // Ï = \"{I}
+  "\u1e2e": "\u0049\u0308\u0301",
+  // Ḯ = \"\'{I}
+  "\u0128": "\u0049\u0303",
+  // Ĩ = \~{I}
+  "\u012a": "\u0049\u0304",
+  // Ī = \={I}
+  "\u012c": "\u0049\u0306",
+  // Ĭ = \u{I}
+  "\u01cf": "\u0049\u030c",
+  // Ǐ = \v{I}
+  "\u00ce": "\u0049\u0302",
+  // Î = \^{I}
+  "\u0130": "\u0049\u0307",
+  // İ = \.{I}
+  "\u0134": "\u004a\u0302",
+  // Ĵ = \^{J}
+  "\u1e30": "\u004b\u0301",
+  // Ḱ = \'{K}
+  "\u01e8": "\u004b\u030c",
+  // Ǩ = \v{K}
+  "\u0139": "\u004c\u0301",
+  // Ĺ = \'{L}
+  "\u013d": "\u004c\u030c",
+  // Ľ = \v{L}
+  "\u1e3e": "\u004d\u0301",
+  // Ḿ = \'{M}
+  "\u1e40": "\u004d\u0307",
+  // Ṁ = \.{M}
+  "\u0143": "\u004e\u0301",
+  // Ń = \'{N}
+  "\u01f8": "\u004e\u0300",
+  // Ǹ = \`{N}
+  "\u00d1": "\u004e\u0303",
+  // Ñ = \~{N}
+  "\u0147": "\u004e\u030c",
+  // Ň = \v{N}
+  "\u1e44": "\u004e\u0307",
+  // Ṅ = \.{N}
+  "\u00d3": "\u004f\u0301",
+  // Ó = \'{O}
+  "\u00d2": "\u004f\u0300",
+  // Ò = \`{O}
+  "\u00d6": "\u004f\u0308",
+  // Ö = \"{O}
+  "\u022a": "\u004f\u0308\u0304",
+  // Ȫ = \"\={O}
+  "\u00d5": "\u004f\u0303",
+  // Õ = \~{O}
+  "\u1e4c": "\u004f\u0303\u0301",
+  // Ṍ = \~\'{O}
+  "\u1e4e": "\u004f\u0303\u0308",
+  // Ṏ = \~\"{O}
+  "\u022c": "\u004f\u0303\u0304",
+  // Ȭ = \~\={O}
+  "\u014c": "\u004f\u0304",
+  // Ō = \={O}
+  "\u1e52": "\u004f\u0304\u0301",
+  // Ṓ = \=\'{O}
+  "\u1e50": "\u004f\u0304\u0300",
+  // Ṑ = \=\`{O}
+  "\u014e": "\u004f\u0306",
+  // Ŏ = \u{O}
+  "\u01d1": "\u004f\u030c",
+  // Ǒ = \v{O}
+  "\u00d4": "\u004f\u0302",
+  // Ô = \^{O}
+  "\u1ed0": "\u004f\u0302\u0301",
+  // Ố = \^\'{O}
+  "\u1ed2": "\u004f\u0302\u0300",
+  // Ồ = \^\`{O}
+  "\u1ed6": "\u004f\u0302\u0303",
+  // Ỗ = \^\~{O}
+  "\u022e": "\u004f\u0307",
+  // Ȯ = \.{O}
+  "\u0230": "\u004f\u0307\u0304",
+  // Ȱ = \.\={O}
+  "\u0150": "\u004f\u030b",
+  // Ő = \H{O}
+  "\u1e54": "\u0050\u0301",
+  // Ṕ = \'{P}
+  "\u1e56": "\u0050\u0307",
+  // Ṗ = \.{P}
+  "\u0154": "\u0052\u0301",
+  // Ŕ = \'{R}
+  "\u0158": "\u0052\u030c",
+  // Ř = \v{R}
+  "\u1e58": "\u0052\u0307",
+  // Ṙ = \.{R}
+  "\u015a": "\u0053\u0301",
+  // Ś = \'{S}
+  "\u1e64": "\u0053\u0301\u0307",
+  // Ṥ = \'\.{S}
+  "\u0160": "\u0053\u030c",
+  // Š = \v{S}
+  "\u1e66": "\u0053\u030c\u0307",
+  // Ṧ = \v\.{S}
+  "\u015c": "\u0053\u0302",
+  // Ŝ = \^{S}
+  "\u1e60": "\u0053\u0307",
+  // Ṡ = \.{S}
+  "\u0164": "\u0054\u030c",
+  // Ť = \v{T}
+  "\u1e6a": "\u0054\u0307",
+  // Ṫ = \.{T}
+  "\u00da": "\u0055\u0301",
+  // Ú = \'{U}
+  "\u00d9": "\u0055\u0300",
+  // Ù = \`{U}
+  "\u00dc": "\u0055\u0308",
+  // Ü = \"{U}
+  "\u01d7": "\u0055\u0308\u0301",
+  // Ǘ = \"\'{U}
+  "\u01db": "\u0055\u0308\u0300",
+  // Ǜ = \"\`{U}
+  "\u01d5": "\u0055\u0308\u0304",
+  // Ǖ = \"\={U}
+  "\u01d9": "\u0055\u0308\u030c",
+  // Ǚ = \"\v{U}
+  "\u0168": "\u0055\u0303",
+  // Ũ = \~{U}
+  "\u1e78": "\u0055\u0303\u0301",
+  // Ṹ = \~\'{U}
+  "\u016a": "\u0055\u0304",
+  // Ū = \={U}
+  "\u1e7a": "\u0055\u0304\u0308",
+  // Ṻ = \=\"{U}
+  "\u016c": "\u0055\u0306",
+  // Ŭ = \u{U}
+  "\u01d3": "\u0055\u030c",
+  // Ǔ = \v{U}
+  "\u00db": "\u0055\u0302",
+  // Û = \^{U}
+  "\u016e": "\u0055\u030a",
+  // Ů = \r{U}
+  "\u0170": "\u0055\u030b",
+  // Ű = \H{U}
+  "\u1e7c": "\u0056\u0303",
+  // Ṽ = \~{V}
+  "\u1e82": "\u0057\u0301",
+  // Ẃ = \'{W}
+  "\u1e80": "\u0057\u0300",
+  // Ẁ = \`{W}
+  "\u1e84": "\u0057\u0308",
+  // Ẅ = \"{W}
+  "\u0174": "\u0057\u0302",
+  // Ŵ = \^{W}
+  "\u1e86": "\u0057\u0307",
+  // Ẇ = \.{W}
+  "\u1e8c": "\u0058\u0308",
+  // Ẍ = \"{X}
+  "\u1e8a": "\u0058\u0307",
+  // Ẋ = \.{X}
+  "\u00dd": "\u0059\u0301",
+  // Ý = \'{Y}
+  "\u1ef2": "\u0059\u0300",
+  // Ỳ = \`{Y}
+  "\u0178": "\u0059\u0308",
+  // Ÿ = \"{Y}
+  "\u1ef8": "\u0059\u0303",
+  // Ỹ = \~{Y}
+  "\u0232": "\u0059\u0304",
+  // Ȳ = \={Y}
+  "\u0176": "\u0059\u0302",
+  // Ŷ = \^{Y}
+  "\u1e8e": "\u0059\u0307",
+  // Ẏ = \.{Y}
+  "\u0179": "\u005a\u0301",
+  // Ź = \'{Z}
+  "\u017d": "\u005a\u030c",
+  // Ž = \v{Z}
+  "\u1e90": "\u005a\u0302",
+  // Ẑ = \^{Z}
+  "\u017b": "\u005a\u0307",
+  // Ż = \.{Z}
+  "\u03ac": "\u03b1\u0301",
+  // ά = \'{α}
+  "\u1f70": "\u03b1\u0300",
+  // ὰ = \`{α}
+  "\u1fb1": "\u03b1\u0304",
+  // ᾱ = \={α}
+  "\u1fb0": "\u03b1\u0306",
+  // ᾰ = \u{α}
+  "\u03ad": "\u03b5\u0301",
+  // έ = \'{ε}
+  "\u1f72": "\u03b5\u0300",
+  // ὲ = \`{ε}
+  "\u03ae": "\u03b7\u0301",
+  // ή = \'{η}
+  "\u1f74": "\u03b7\u0300",
+  // ὴ = \`{η}
+  "\u03af": "\u03b9\u0301",
+  // ί = \'{ι}
+  "\u1f76": "\u03b9\u0300",
+  // ὶ = \`{ι}
+  "\u03ca": "\u03b9\u0308",
+  // ϊ = \"{ι}
+  "\u0390": "\u03b9\u0308\u0301",
+  // ΐ = \"\'{ι}
+  "\u1fd2": "\u03b9\u0308\u0300",
+  // ῒ = \"\`{ι}
+  "\u1fd1": "\u03b9\u0304",
+  // ῑ = \={ι}
+  "\u1fd0": "\u03b9\u0306",
+  // ῐ = \u{ι}
+  "\u03cc": "\u03bf\u0301",
+  // ό = \'{ο}
+  "\u1f78": "\u03bf\u0300",
+  // ὸ = \`{ο}
+  "\u03cd": "\u03c5\u0301",
+  // ύ = \'{υ}
+  "\u1f7a": "\u03c5\u0300",
+  // ὺ = \`{υ}
+  "\u03cb": "\u03c5\u0308",
+  // ϋ = \"{υ}
+  "\u03b0": "\u03c5\u0308\u0301",
+  // ΰ = \"\'{υ}
+  "\u1fe2": "\u03c5\u0308\u0300",
+  // ῢ = \"\`{υ}
+  "\u1fe1": "\u03c5\u0304",
+  // ῡ = \={υ}
+  "\u1fe0": "\u03c5\u0306",
+  // ῠ = \u{υ}
+  "\u03ce": "\u03c9\u0301",
+  // ώ = \'{ω}
+  "\u1f7c": "\u03c9\u0300",
+  // ὼ = \`{ω}
+  "\u038e": "\u03a5\u0301",
+  // Ύ = \'{Υ}
+  "\u1fea": "\u03a5\u0300",
+  // Ὺ = \`{Υ}
+  "\u03ab": "\u03a5\u0308",
+  // Ϋ = \"{Υ}
+  "\u1fe9": "\u03a5\u0304",
+  // Ῡ = \={Υ}
+  "\u1fe8": "\u03a5\u0306",
+  // Ῠ = \u{Υ}
+  "\u038f": "\u03a9\u0301",
+  // Ώ = \'{Ω}
+  "\u1ffa": "\u03a9\u0300" // Ὼ = \`{Ω}
+
+};
+
+/* eslint no-constant-condition:0 */
+
+/**
+ * This file contains the parser used to parse out a TeX expression from the
+ * input. Since TeX isn't context-free, standard parsers don't work particularly
+ * well.
+ *
+ * The strategy of this parser is as such:
+ *
+ * The main functions (the `.parse...` ones) take a position in the current
+ * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
+ * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When
+ * individual tokens are needed at a position, the lexer is called to pull out a
+ * token, which is then used.
+ *
+ * The parser has a property called "mode" indicating the mode that
+ * the parser is currently in. Currently it has to be one of "math" or
+ * "text", which denotes whether the current environment is a math-y
+ * one or a text-y one (e.g. inside \text). Currently, this serves to
+ * limit the functions which can be used in text mode.
+ *
+ * The main functions then return an object which contains the useful data that
+ * was parsed at its given point, and a new position at the end of the parsed
+ * data. The main functions can call each other and continue the parsing by
+ * using the returned position as a new starting point.
+ *
+ * There are also extra `.handle...` functions, which pull out some reused
+ * functionality into self-contained functions.
+ *
+ * The functions return ParseNodes.
+ */
+class Parser {
+  constructor(input, settings) {
+    this.mode = void 0;
+    this.gullet = void 0;
+    this.settings = void 0;
+    this.leftrightDepth = void 0;
+    this.nextToken = void 0;
+    // Start in math mode
+    this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a
+    // new lexer (mouth) for this parser (stomach, in the language of TeX)
+
+    this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing
+
+    this.settings = settings; // Count leftright depth (for \middle errors)
+
+    this.leftrightDepth = 0;
+  }
+  /**
+   * Checks a result to make sure it has the right type, and throws an
+   * appropriate error otherwise.
+   */
+
+
+  expect(text, consume) {
+    if (consume === void 0) {
+      consume = true;
+    }
+
+    if (this.fetch().text !== text) {
+      throw new ParseError(`Expected '${text}', got '${this.fetch().text}'`, this.fetch());
+    }
+
+    if (consume) {
+      this.consume();
+    }
+  }
+  /**
+   * Discards the current lookahead token, considering it consumed.
+   */
+
+
+  consume() {
+    this.nextToken = null;
+  }
+  /**
+   * Return the current lookahead token, or if there isn't one (at the
+   * beginning, or if the previous lookahead token was consume()d),
+   * fetch the next token as the new lookahead token and return it.
+   */
+
+
+  fetch() {
+    if (this.nextToken == null) {
+      this.nextToken = this.gullet.expandNextToken();
+    }
+
+    return this.nextToken;
+  }
+  /**
+   * Switches between "text" and "math" modes.
+   */
+
+
+  switchMode(newMode) {
+    this.mode = newMode;
+    this.gullet.switchMode(newMode);
+  }
+  /**
+   * Main parsing function, which parses an entire input.
+   */
+
+
+  parse() {
+    // Create a group namespace for the math expression.
+    // (LaTeX creates a new group for every $...$, $$...$$, \[...\].)
+    this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested.
+    // We do this within the group for the math expression, so it doesn't
+    // pollute settings.macros.
+
+    if (this.settings.colorIsTextColor) {
+      this.gullet.macros.set("\\color", "\\textcolor");
+    } // Try to parse the input
+
+
+    const parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end
+
+    this.expect("EOF"); // End the group namespace for the expression
+
+    this.gullet.endGroup();
+    return parse;
+  }
+
+  parseExpression(breakOnInfix, breakOnTokenText) {
+    const body = []; // Keep adding atoms to the body until we can't parse any more atoms (either
+    // we reached the end, a }, or a \right)
+
+    while (true) {
+      // Ignore spaces in math mode
+      if (this.mode === "math") {
+        this.consumeSpaces();
+      }
+
+      const lex = this.fetch();
+
+      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
+        break;
+      }
+
+      if (breakOnTokenText && lex.text === breakOnTokenText) {
+        break;
+      }
+
+      if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {
+        break;
+      }
+
+      const atom = this.parseAtom(breakOnTokenText);
+
+      if (!atom) {
+        break;
+      }
+
+      body.push(atom);
+    }
+
+    if (this.mode === "text") {
+      this.formLigatures(body);
+    }
+
+    return this.handleInfixNodes(body);
+  }
+  /**
+   * Rewrites infix operators such as \over with corresponding commands such
+   * as \frac.
+   *
+   * There can only be one infix operator per group.  If there's more than one
+   * then the expression is ambiguous.  This can be resolved by adding {}.
+   */
+
+
+  handleInfixNodes(body) {
+    let overIndex = -1;
+    let funcName;
+
+    for (let i = 0; i < body.length; i++) {
+      const node = checkNodeType(body[i], "infix");
+
+      if (node) {
+        if (overIndex !== -1) {
+          throw new ParseError("only one infix operator per group", node.token);
+        }
+
+        overIndex = i;
+        funcName = node.replaceWith;
+      }
+    }
+
+    if (overIndex !== -1 && funcName) {
+      let numerNode;
+      let denomNode;
+      const numerBody = body.slice(0, overIndex);
+      const denomBody = body.slice(overIndex + 1);
+
+      if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
+        numerNode = numerBody[0];
+      } else {
+        numerNode = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: numerBody
+        };
+      }
+
+      if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
+        denomNode = denomBody[0];
+      } else {
+        denomNode = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: denomBody
+        };
+      }
+
+      let node;
+
+      if (funcName === "\\\\abovefrac") {
+        node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
+      } else {
+        node = this.callFunction(funcName, [numerNode, denomNode], []);
+      }
+
+      return [node];
+    } else {
+      return body;
+    }
+  } // The greediness of a superscript or subscript
+
+
+  /**
+   * Handle a subscript or superscript with nice errors.
+   */
+  handleSupSubscript(name) {
+    const symbolToken = this.fetch();
+    const symbol = symbolToken.text;
+    this.consume();
+    const group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument
+
+    if (!group) {
+      throw new ParseError("Expected group after '" + symbol + "'", symbolToken);
+    }
+
+    return group;
+  }
+  /**
+   * Converts the textual input of an unsupported command into a text node
+   * contained within a color node whose color is determined by errorColor
+   */
+
+
+  formatUnsupportedCmd(text) {
+    const textordArray = [];
+
+    for (let i = 0; i < text.length; i++) {
+      textordArray.push({
+        type: "textord",
+        mode: "text",
+        text: text[i]
+      });
+    }
+
+    const textNode = {
+      type: "text",
+      mode: this.mode,
+      body: textordArray
+    };
+    const colorNode = {
+      type: "color",
+      mode: this.mode,
+      color: this.settings.errorColor,
+      body: [textNode]
+    };
+    return colorNode;
+  }
+  /**
+   * Parses a group with optional super/subscripts.
+   */
+
+
+  parseAtom(breakOnTokenText) {
+    // The body of an atom is an implicit group, so that things like
+    // \left(x\right)^2 work correctly.
+    const base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts
+
+    if (this.mode === "text") {
+      return base;
+    } // Note that base may be empty (i.e. null) at this point.
+
+
+    let superscript;
+    let subscript;
+
+    while (true) {
+      // Guaranteed in math mode, so eat any spaces first.
+      this.consumeSpaces(); // Lex the first token
+
+      const lex = this.fetch();
+
+      if (lex.text === "\\limits" || lex.text === "\\nolimits") {
+        // We got a limit control
+        let opNode = checkNodeType(base, "op");
+
+        if (opNode) {
+          const limits = lex.text === "\\limits";
+          opNode.limits = limits;
+          opNode.alwaysHandleSupSub = true;
+        } else {
+          opNode = checkNodeType(base, "operatorname");
+
+          if (opNode && opNode.alwaysHandleSupSub) {
+            const limits = lex.text === "\\limits";
+            opNode.limits = limits;
+          } else {
+            throw new ParseError("Limit controls must follow a math operator", lex);
+          }
+        }
+
+        this.consume();
+      } else if (lex.text === "^") {
+        // We got a superscript start
+        if (superscript) {
+          throw new ParseError("Double superscript", lex);
+        }
+
+        superscript = this.handleSupSubscript("superscript");
+      } else if (lex.text === "_") {
+        // We got a subscript start
+        if (subscript) {
+          throw new ParseError("Double subscript", lex);
+        }
+
+        subscript = this.handleSupSubscript("subscript");
+      } else if (lex.text === "'") {
+        // We got a prime
+        if (superscript) {
+          throw new ParseError("Double superscript", lex);
+        }
+
+        const prime = {
+          type: "textord",
+          mode: this.mode,
+          text: "\\prime"
+        }; // Many primes can be grouped together, so we handle this here
+
+        const primes = [prime];
+        this.consume(); // Keep lexing tokens until we get something that's not a prime
+
+        while (this.fetch().text === "'") {
+          // For each one, add another prime to the list
+          primes.push(prime);
+          this.consume();
+        } // If there's a superscript following the primes, combine that
+        // superscript in with the primes.
+
+
+        if (this.fetch().text === "^") {
+          primes.push(this.handleSupSubscript("superscript"));
+        } // Put everything into an ordgroup as the superscript
+
+
+        superscript = {
+          type: "ordgroup",
+          mode: this.mode,
+          body: primes
+        };
+      } else {
+        // If it wasn't ^, _, or ', stop parsing super/subscripts
+        break;
+      }
+    } // Base must be set if superscript or subscript are set per logic above,
+    // but need to check here for type check to pass.
+
+
+    if (superscript || subscript) {
+      // If we got either a superscript or subscript, create a supsub
+      return {
+        type: "supsub",
+        mode: this.mode,
+        base: base,
+        sup: superscript,
+        sub: subscript
+      };
+    } else {
+      // Otherwise return the original body
+      return base;
+    }
+  }
+  /**
+   * Parses an entire function, including its base and all of its arguments.
+   */
+
+
+  parseFunction(breakOnTokenText, name, // For error reporting.
+  greediness) {
+    const token = this.fetch();
+    const func = token.text;
+    const funcData = functions[func];
+
+    if (!funcData) {
+      return null;
+    }
+
+    this.consume(); // consume command token
+
+    if (greediness != null && funcData.greediness <= greediness) {
+      throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token);
+    } else if (this.mode === "text" && !funcData.allowedInText) {
+      throw new ParseError("Can't use function '" + func + "' in text mode", token);
+    } else if (this.mode === "math" && funcData.allowedInMath === false) {
+      throw new ParseError("Can't use function '" + func + "' in math mode", token);
+    }
+
+    const _this$parseArguments = this.parseArguments(func, funcData),
+          args = _this$parseArguments.args,
+          optArgs = _this$parseArguments.optArgs;
+
+    return this.callFunction(func, args, optArgs, token, breakOnTokenText);
+  }
+  /**
+   * Call a function handler with a suitable context and arguments.
+   */
+
+
+  callFunction(name, args, optArgs, token, breakOnTokenText) {
+    const context = {
+      funcName: name,
+      parser: this,
+      token,
+      breakOnTokenText
+    };
+    const func = functions[name];
+
+    if (func && func.handler) {
+      return func.handler(context, args, optArgs);
+    } else {
+      throw new ParseError(`No function handler for ${name}`);
+    }
+  }
+  /**
+   * Parses the arguments of a function or environment
+   */
+
+
+  parseArguments(func, // Should look like "\name" or "\begin{name}".
+  funcData) {
+    const totalArgs = funcData.numArgs + funcData.numOptionalArgs;
+
+    if (totalArgs === 0) {
+      return {
+        args: [],
+        optArgs: []
+      };
+    }
+
+    const baseGreediness = funcData.greediness;
+    const args = [];
+    const optArgs = [];
+
+    for (let i = 0; i < totalArgs; i++) {
+      const argType = funcData.argTypes && funcData.argTypes[i];
+      const isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments.  As the TeXbook says:
+      // "After you have said ‘\def\row#1#2{...}’, you are allowed to
+      //  put spaces between the arguments (e.g., ‘\row x n’), because
+      //  TeX doesn’t use single spaces as undelimited arguments."
+
+      const consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol
+      // won't know what to do with them.  This can only happen with
+      // macros, e.g. \frac\foo\foo where \foo expands to a space symbol.
+      // In LaTeX, the \foo's get treated as (blank) arguments.
+      // In KaTeX, for now, both spaces will get consumed.
+      // TODO(edemaine)
+      i === 0 && !isOptional && this.mode === "math";
+      const arg = this.parseGroupOfType(`argument to '${func}'`, argType, isOptional, baseGreediness, consumeSpaces);
+
+      if (!arg) {
+        if (isOptional) {
+          optArgs.push(null);
+          continue;
+        }
+
+        throw new ParseError(`Expected group after '${func}'`, this.fetch());
+      }
+
+      (isOptional ? optArgs : args).push(arg);
+    }
+
+    return {
+      args,
+      optArgs
+    };
+  }
+  /**
+   * Parses a group when the mode is changing.
+   */
+
+
+  parseGroupOfType(name, type, optional, greediness, consumeSpaces) {
+    switch (type) {
+      case "color":
+        if (consumeSpaces) {
+          this.consumeSpaces();
+        }
+
+        return this.parseColorGroup(optional);
+
+      case "size":
+        if (consumeSpaces) {
+          this.consumeSpaces();
+        }
+
+        return this.parseSizeGroup(optional);
+
+      case "url":
+        return this.parseUrlGroup(optional, consumeSpaces);
+
+      case "math":
+      case "text":
+        return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces);
+
+      case "hbox":
+        {
+          // hbox argument type wraps the argument in the equivalent of
+          // \hbox, which is like \text but switching to \textstyle size.
+          const group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces);
+
+          if (!group) {
+            return group;
+          }
+
+          const styledGroup = {
+            type: "styling",
+            mode: group.mode,
+            body: [group],
+            style: "text" // simulate \textstyle
+
+          };
+          return styledGroup;
+        }
+
+      case "raw":
+        {
+          if (consumeSpaces) {
+            this.consumeSpaces();
+          }
+
+          if (optional && this.fetch().text === "{") {
+            return null;
+          }
+
+          const token = this.parseStringGroup("raw", optional, true);
+
+          if (token) {
+            return {
+              type: "raw",
+              mode: "text",
+              string: token.text
+            };
+          } else {
+            throw new ParseError("Expected raw group", this.fetch());
+          }
+        }
+
+      case "original":
+      case null:
+      case undefined:
+        return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces);
+
+      default:
+        throw new ParseError("Unknown group type as " + name, this.fetch());
+    }
+  }
+  /**
+   * Discard any space tokens, fetching the next non-space token.
+   */
+
+
+  consumeSpaces() {
+    while (this.fetch().text === " ") {
+      this.consume();
+    }
+  }
+  /**
+   * Parses a group, essentially returning the string formed by the
+   * brace-enclosed tokens plus some position information.
+   */
+
+
+  parseStringGroup(modeName, // Used to describe the mode in error messages.
+  optional, raw) {
+    const groupBegin = optional ? "[" : "{";
+    const groupEnd = optional ? "]" : "}";
+    const beginToken = this.fetch();
+
+    if (beginToken.text !== groupBegin) {
+      if (optional) {
+        return null;
+      } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) {
+        this.consume();
+        return beginToken;
+      }
+    }
+
+    const outerMode = this.mode;
+    this.mode = "text";
+    this.expect(groupBegin);
+    let str = "";
+    const firstToken = this.fetch();
+    let nested = 0; // allow nested braces in raw string group
+
+    let lastToken = firstToken;
+    let nextToken;
+
+    while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) {
+      switch (nextToken.text) {
+        case "EOF":
+          throw new ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str));
+
+        case groupBegin:
+          nested++;
+          break;
+
+        case groupEnd:
+          nested--;
+          break;
+      }
+
+      lastToken = nextToken;
+      str += lastToken.text;
+      this.consume();
+    }
+
+    this.expect(groupEnd);
+    this.mode = outerMode;
+    return firstToken.range(lastToken, str);
+  }
+  /**
+   * Parses a regex-delimited group: the largest sequence of tokens
+   * whose concatenated strings match `regex`. Returns the string
+   * formed by the tokens plus some position information.
+   */
+
+
+  parseRegexGroup(regex, modeName) {
+    const outerMode = this.mode;
+    this.mode = "text";
+    const firstToken = this.fetch();
+    let lastToken = firstToken;
+    let str = "";
+    let nextToken;
+
+    while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {
+      lastToken = nextToken;
+      str += lastToken.text;
+      this.consume();
+    }
+
+    if (str === "") {
+      throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
+    }
+
+    this.mode = outerMode;
+    return firstToken.range(lastToken, str);
+  }
+  /**
+   * Parses a color description.
+   */
+
+
+  parseColorGroup(optional) {
+    const res = this.parseStringGroup("color", optional);
+
+    if (!res) {
+      return null;
+    }
+
+    const match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
+
+    if (!match) {
+      throw new ParseError("Invalid color: '" + res.text + "'", res);
+    }
+
+    let color = match[0];
+
+    if (/^[0-9a-f]{6}$/i.test(color)) {
+      // We allow a 6-digit HTML color spec without a leading "#".
+      // This follows the xcolor package's HTML color model.
+      // Predefined color names are all missed by this RegEx pattern.
+      color = "#" + color;
+    }
+
+    return {
+      type: "color-token",
+      mode: this.mode,
+      color
+    };
+  }
+  /**
+   * Parses a size specification, consisting of magnitude and unit.
+   */
+
+
+  parseSizeGroup(optional) {
+    let res;
+    let isBlank = false;
+
+    if (!optional && this.fetch().text !== "{") {
+      res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
+    } else {
+      res = this.parseStringGroup("size", optional);
+    }
+
+    if (!res) {
+      return null;
+    }
+
+    if (!optional && res.text.length === 0) {
+      // Because we've tested for what is !optional, this block won't
+      // affect \kern, \hspace, etc. It will capture the mandatory arguments
+      // to \genfrac and \above.
+      res.text = "0pt"; // Enable \above{}
+
+      isBlank = true; // This is here specifically for \genfrac
+    }
+
+    const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
+
+    if (!match) {
+      throw new ParseError("Invalid size: '" + res.text + "'", res);
+    }
+
+    const data = {
+      number: +(match[1] + match[2]),
+      // sign + magnitude, cast to number
+      unit: match[3]
+    };
+
+    if (!validUnit(data)) {
+      throw new ParseError("Invalid unit: '" + data.unit + "'", res);
+    }
+
+    return {
+      type: "size",
+      mode: this.mode,
+      value: data,
+      isBlank
+    };
+  }
+  /**
+   * Parses an URL, checking escaped letters and allowed protocols,
+   * and setting the catcode of % as an active character (as in \hyperref).
+   */
+
+
+  parseUrlGroup(optional, consumeSpaces) {
+    this.gullet.lexer.setCatcode("%", 13); // active character
+
+    const res = this.parseStringGroup("url", optional, true); // get raw string
+
+    this.gullet.lexer.setCatcode("%", 14); // comment character
+
+    if (!res) {
+      return null;
+    } // hyperref package allows backslashes alone in href, but doesn't
+    // generate valid links in such cases; we interpret this as
+    // "undefined" behaviour, and keep them as-is. Some browser will
+    // replace backslashes with forward slashes.
+
+
+    const url = res.text.replace(/\\([#$%&~_^{}])/g, '$1');
+    return {
+      type: "url",
+      mode: this.mode,
+      url
+    };
+  }
+  /**
+   * If `optional` is false or absent, this parses an ordinary group,
+   * which is either a single nucleus (like "x") or an expression
+   * in braces (like "{x+y}") or an implicit group, a group that starts
+   * at the current position, and ends right before a higher explicit
+   * group ends, or at EOF.
+   * If `optional` is true, it parses either a bracket-delimited expression
+   * (like "[x+y]") or returns null to indicate the absence of a
+   * bracket-enclosed group.
+   * If `mode` is present, switches to that mode while parsing the group,
+   * and switches back after.
+   */
+
+
+  parseGroup(name, // For error reporting.
+  optional, greediness, breakOnTokenText, mode, consumeSpaces) {
+    // Switch to specified mode
+    const outerMode = this.mode;
+
+    if (mode) {
+      this.switchMode(mode);
+    } // Consume spaces if requested, crucially *after* we switch modes,
+    // so that the next non-space token is parsed in the correct mode.
+
+
+    if (consumeSpaces) {
+      this.consumeSpaces();
+    } // Get first token
+
+
+    const firstToken = this.fetch();
+    const text = firstToken.text;
+    let result; // Try to parse an open brace or \begingroup
+
+    if (optional ? text === "[" : text === "{" || text === "\\begingroup") {
+      this.consume();
+      const groupEnd = Parser.endOfGroup[text]; // Start a new group namespace
+
+      this.gullet.beginGroup(); // If we get a brace, parse an expression
+
+      const expression = this.parseExpression(false, groupEnd);
+      const lastToken = this.fetch(); // Check that we got a matching closing brace
+
+      this.expect(groupEnd); // End group namespace
+
+      this.gullet.endGroup();
+      result = {
+        type: "ordgroup",
+        mode: this.mode,
+        loc: SourceLocation.range(firstToken, lastToken),
+        body: expression,
+        // A group formed by \begingroup...\endgroup is a semi-simple group
+        // which doesn't affect spacing in math mode, i.e., is transparent.
+        // https://tex.stackexchange.com/questions/1930/when-should-one-
+        // use-begingroup-instead-of-bgroup
+        semisimple: text === "\\begingroup" || undefined
+      };
+    } else if (optional) {
+      // Return nothing for an optional group
+      result = null;
+    } else {
+      // If there exists a function with this name, parse the function.
+      // Otherwise, just return a nucleus
+      result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol();
+
+      if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) {
+        if (this.settings.throwOnError) {
+          throw new ParseError("Undefined control sequence: " + text, firstToken);
+        }
+
+        result = this.formatUnsupportedCmd(text);
+        this.consume();
+      }
+    } // Switch mode back
+
+
+    if (mode) {
+      this.switchMode(outerMode);
+    }
+
+    return result;
+  }
+  /**
+   * Form ligature-like combinations of characters for text mode.
+   * This includes inputs like "--", "---", "``" and "''".
+   * The result will simply replace multiple textord nodes with a single
+   * character in each value by a single textord node having multiple
+   * characters in its value.  The representation is still ASCII source.
+   * The group will be modified in place.
+   */
+
+
+  formLigatures(group) {
+    let n = group.length - 1;
+
+    for (let i = 0; i < n; ++i) {
+      const a = group[i]; // $FlowFixMe: Not every node type has a `text` property.
+
+      const v = a.text;
+
+      if (v === "-" && group[i + 1].text === "-") {
+        if (i + 1 < n && group[i + 2].text === "-") {
+          group.splice(i, 3, {
+            type: "textord",
+            mode: "text",
+            loc: SourceLocation.range(a, group[i + 2]),
+            text: "---"
+          });
+          n -= 2;
+        } else {
+          group.splice(i, 2, {
+            type: "textord",
+            mode: "text",
+            loc: SourceLocation.range(a, group[i + 1]),
+            text: "--"
+          });
+          n -= 1;
+        }
+      }
+
+      if ((v === "'" || v === "`") && group[i + 1].text === v) {
+        group.splice(i, 2, {
+          type: "textord",
+          mode: "text",
+          loc: SourceLocation.range(a, group[i + 1]),
+          text: v + v
+        });
+        n -= 1;
+      }
+    }
+  }
+  /**
+   * Parse a single symbol out of the string. Here, we handle single character
+   * symbols and special functions like \verb.
+   */
+
+
+  parseSymbol() {
+    const nucleus = this.fetch();
+    let text = nucleus.text;
+
+    if (/^\\verb[^a-zA-Z]/.test(text)) {
+      this.consume();
+      let arg = text.slice(5);
+      const star = arg.charAt(0) === "*";
+
+      if (star) {
+        arg = arg.slice(1);
+      } // Lexer's tokenRegex is constructed to always have matching
+      // first/last characters.
+
+
+      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {
+        throw new ParseError(`\\verb assertion failed --
+                    please report what input caused this bug`);
+      }
+
+      arg = arg.slice(1, -1); // remove first and last char
+
+      return {
+        type: "verb",
+        mode: "text",
+        body: arg,
+        star
+      };
+    } // At this point, we should have a symbol, possibly with accents.
+    // First expand any accented base symbol according to unicodeSymbols.
+
+
+    if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {
+      // This behavior is not strict (XeTeX-compatible) in math mode.
+      if (this.settings.strict && this.mode === "math") {
+        this.settings.reportNonstrict("unicodeTextInMathMode", `Accented Unicode text character "${text[0]}" used in ` + `math mode`, nucleus);
+      }
+
+      text = unicodeSymbols[text[0]] + text.substr(1);
+    } // Strip off any combining characters
+
+
+    const match = combiningDiacriticalMarksEndRegex.exec(text);
+
+    if (match) {
+      text = text.substring(0, match.index);
+
+      if (text === 'i') {
+        text = '\u0131'; // dotless i, in math and text mode
+      } else if (text === 'j') {
+        text = '\u0237'; // dotless j, in math and text mode
+      }
+    } // Recognize base symbol
+
+
+    let symbol;
+
+    if (symbols[this.mode][text]) {
+      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {
+        this.settings.reportNonstrict("unicodeTextInMathMode", `Latin-1/Unicode text character "${text[0]}" used in ` + `math mode`, nucleus);
+      }
+
+      const group = symbols[this.mode][text].group;
+      const loc = SourceLocation.range(nucleus);
+      let s;
+
+      if (ATOMS.hasOwnProperty(group)) {
+        // $FlowFixMe
+        const family = group;
+        s = {
+          type: "atom",
+          mode: this.mode,
+          family,
+          loc,
+          text
+        };
+      } else {
+        // $FlowFixMe
+        s = {
+          type: group,
+          mode: this.mode,
+          loc,
+          text
+        };
+      }
+
+      symbol = s;
+    } else if (text.charCodeAt(0) >= 0x80) {
+      // no symbol for e.g. ^
+      if (this.settings.strict) {
+        if (!supportedCodepoint(text.charCodeAt(0))) {
+          this.settings.reportNonstrict("unknownSymbol", `Unrecognized Unicode character "${text[0]}"` + ` (${text.charCodeAt(0)})`, nucleus);
+        } else if (this.mode === "math") {
+          this.settings.reportNonstrict("unicodeTextInMathMode", `Unicode text character "${text[0]}" used in math mode`, nucleus);
+        }
+      } // All nonmathematical Unicode characters are rendered as if they
+      // are in text mode (wrapped in \text) because that's what it
+      // takes to render them in LaTeX.  Setting `mode: this.mode` is
+      // another natural choice (the user requested math mode), but
+      // this makes it more difficult for getCharacterMetrics() to
+      // distinguish Unicode characters without metrics and those for
+      // which we want to simulate the letter M.
+
+
+      symbol = {
+        type: "textord",
+        mode: "text",
+        loc: SourceLocation.range(nucleus),
+        text
+      };
+    } else {
+      return null; // EOF, ^, _, {, }, etc.
+    }
+
+    this.consume(); // Transform combining characters into accents
+
+    if (match) {
+      for (let i = 0; i < match[0].length; i++) {
+        const accent = match[0][i];
+
+        if (!unicodeAccents[accent]) {
+          throw new ParseError(`Unknown accent ' ${accent}'`, nucleus);
+        }
+
+        const command = unicodeAccents[accent][this.mode];
+
+        if (!command) {
+          throw new ParseError(`Accent ${accent} unsupported in ${this.mode} mode`, nucleus);
+        }
+
+        symbol = {
+          type: "accent",
+          mode: this.mode,
+          loc: SourceLocation.range(nucleus),
+          label: command,
+          isStretchy: false,
+          isShifty: true,
+          base: symbol
+        };
+      }
+    }
+
+    return symbol;
+  }
+
+}
+Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"];
+Parser.endOfGroup = {
+  "[": "]",
+  "{": "}",
+  "\\begingroup": "\\endgroup"
+  /**
+   * Parses an "expression", which is a list of atoms.
+   *
+   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
+   *                 happens when functions have higher precendence han infix
+   *                 nodes in implicit parses.
+   *
+   * `breakOnTokenText`: The text of the token that the expression should end
+   *                     with, or `null` if something else should end the
+   *                     expression.
+   */
+
+};
+Parser.SUPSUB_GREEDINESS = 1;
+
+/**
+ * Provides a single function for parsing an expression using a Parser
+ * TODO(emily): Remove this
+ */
+
+/**
+ * Parses an expression using a Parser, then returns the parsed result.
+ */
+const parseTree = function parseTree(toParse, settings) {
+  if (!(typeof toParse === 'string' || toParse instanceof String)) {
+    throw new TypeError('KaTeX can only parse string typed expression');
+  }
+
+  const parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors
+
+  delete parser.gullet.macros.current["\\df@tag"];
+  let tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag.
+  // In this case, we separately parse the tag and wrap the tree.
+
+  if (parser.gullet.macros.get("\\df@tag")) {
+    if (!settings.displayMode) {
+      throw new ParseError("\\tag works only in display equations");
+    }
+
+    parser.gullet.feed("\\df@tag");
+    tree = [{
+      type: "tag",
+      mode: "text",
+      body: tree,
+      tag: parser.parse()
+    }];
+  }
+
+  return tree;
+};
+
+/* eslint no-console:0 */
+
+/**
+ * Parse and build an expression, and place that expression in the DOM node
+ * given.
+ */
+let render = function render(expression, baseNode, options) {
+  baseNode.textContent = "";
+  const node = renderToDomTree(expression, options).toNode();
+  baseNode.appendChild(node);
+}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and
+// disable rendering.
+
+
+if (typeof document !== "undefined") {
+  if (document.compatMode !== "CSS1Compat") {
+    typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
+
+    render = function render() {
+      throw new ParseError("KaTeX doesn't work in quirks mode.");
+    };
+  }
+}
+/**
+ * Parse and build an expression, and return the markup for that.
+ */
+
+
+const renderToString = function renderToString(expression, options) {
+  const markup = renderToDomTree(expression, options).toMarkup();
+  return markup;
+};
+/**
+ * Parse an expression and return the parse tree.
+ */
+
+
+const generateParseTree = function generateParseTree(expression, options) {
+  const settings = new Settings(options);
+  return parseTree(expression, settings);
+};
+/**
+ * If the given error is a KaTeX ParseError and options.throwOnError is false,
+ * renders the invalid LaTeX as a span with hover title giving the KaTeX
+ * error message.  Otherwise, simply throws the error.
+ */
+
+
+const renderError = function renderError(error, expression, options) {
+  if (options.throwOnError || !(error instanceof ParseError)) {
+    throw error;
+  }
+
+  const node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]);
+  node.setAttribute("title", error.toString());
+  node.setAttribute("style", `color:${options.errorColor}`);
+  return node;
+};
+/**
+ * Generates and returns the katex build tree. This is used for advanced
+ * use cases (like rendering to custom output).
+ */
+
+
+const renderToDomTree = function renderToDomTree(expression, options) {
+  const settings = new Settings(options);
+
+  try {
+    const tree = parseTree(expression, settings);
+    return buildTree(tree, expression, settings);
+  } catch (error) {
+    return renderError(error, expression, settings);
+  }
+};
+/**
+ * Generates and returns the katex build tree, with just HTML (no MathML).
+ * This is used for advanced use cases (like rendering to custom output).
+ */
+
+
+const renderToHTMLTree = function renderToHTMLTree(expression, options) {
+  const settings = new Settings(options);
+
+  try {
+    const tree = parseTree(expression, settings);
+    return buildHTMLTree(tree, expression, settings);
+  } catch (error) {
+    return renderError(error, expression, settings);
+  }
+};
+
+var katex = {
+  /**
+   * Current KaTeX version
+   */
+  version: "0.11.1",
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML combination, and adds
+   * it as a child to the specified DOM node.
+   */
+  render,
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML combination string,
+   * for sending to the client.
+   */
+  renderToString,
+
+  /**
+   * KaTeX error, usually during parsing.
+   */
+  ParseError,
+
+  /**
+   * Parses the given LaTeX into KaTeX's internal parse tree structure,
+   * without rendering to HTML or MathML.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __parse: generateParseTree,
+
+  /**
+   * Renders the given LaTeX into an HTML+MathML internal DOM tree
+   * representation, without flattening that representation to a string.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __renderToDomTree: renderToDomTree,
+
+  /**
+   * Renders the given LaTeX into an HTML internal DOM tree representation,
+   * without MathML and without flattening that representation to a string.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __renderToHTMLTree: renderToHTMLTree,
+
+  /**
+   * extends internal font metrics object with a new object
+   * each key in the new object represents a font name
+  */
+  __setFontMetrics: setFontMetrics,
+
+  /**
+   * adds a new symbol to builtin symbols table
+   */
+  __defineSymbol: defineSymbol,
+
+  /**
+   * adds a new macro to builtin macro list
+   */
+  __defineMacro: defineMacro,
+
+  /**
+   * Expose the dom tree node types, which can be useful for type checking nodes.
+   *
+   * NOTE: This method is not currently recommended for public use.
+   * The internal tree representation is unstable and is very likely
+   * to change. Use at your own risk.
+   */
+  __domTree: {
+    Span,
+    Anchor,
+    SymbolNode,
+    SvgNode,
+    PathNode,
+    LineNode
+  }
+};
+
+export default katex;
diff --git a/codegen/vulkan/vulkan-docs-next/makeAllExts b/codegen/vulkan/vulkan-docs-next/makeAllExts
new file mode 100755
index 0000000..1dd4808
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/makeAllExts
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# makeAllExts - invoke Makefile with the right options to build with all
+# extensions included.
+
+./makeSpec -clean -spec all $*
diff --git a/codegen/vulkan/vulkan-docs-next/makeExt b/codegen/vulkan/vulkan-docs-next/makeExt
new file mode 100755
index 0000000..7fa19fb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/makeExt
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# makeExt - invoke Makefile with the right options to build with a
+# specific extension included. Only one extension may be specified;
+# for more complex builds, invoke 'makeSpec' directly.
+#
+# Usage: makeExt extension targets
+
+extension=$1
+shift
+
+./makeSpec -clean -spec core -extension $extension $*
diff --git a/codegen/vulkan/vulkan-docs-next/makeKHR b/codegen/vulkan/vulkan-docs-next/makeKHR
new file mode 100755
index 0000000..1596cd7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/makeKHR
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# makeKHR - invoke Makefile with the right options to build with all
+# KHR extensions included.
+
+# Usage: makeKHR targets
+
+# Load extension dependencies, generated from vk.xml
+./makeSpec -clean -spec khr $*
diff --git a/codegen/vulkan/vulkan-docs-next/makeSpec b/codegen/vulkan/vulkan-docs-next/makeSpec
new file mode 100755
index 0000000..fade64a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/makeSpec
@@ -0,0 +1,169 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Build a spec with requested extension sets and options.
+#
+# Usage: makeSpec script-options make-options
+# Script options are parsed by this script before invoking 'make':
+#   -genpath path - directory for generated files and outputs
+#   -spec core - make a spec with no extensions (default)
+#   -spec khr - make a spec with all KHR extensions
+#   -spec ratified - make a spec with all ratified (KHR + some EXT) extensions
+#   -spec all - make a spec with all registered extensions
+#   -version {1.0 | 1.1 | 1.2 | 1.3 | sc1.0} - make a spec with this core version
+#   -ext name - add specified extension and its dependencies
+#   -clean - clean generated files before building
+#   -registry path - API XML to use instead of default
+#   -apiname name - API name to use instead of default
+#   -test - Build the test spec instead
+#   -v - verbose, print actions before executing  them
+#   -n - dry-run, print actions instead of executing them
+# make-options - all other options are passed to 'make', including
+# requested build targets
+
+import argparse, copy, io, os, re, string, subprocess, sys
+
+def execute(args, results):
+    if results.verbose or results.dryrun:
+        print("'" + "' '".join(args) + "'")
+    if not results.dryrun:
+        subprocess.check_call(args)
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-clean', action='store_true',
+                        help='Clean generated files before building')
+    parser.add_argument('-extension', action='append',
+                        default=[],
+                        help='Specify a required extension or extensions to add to targets')
+    parser.add_argument('-genpath', action='store',
+                        default='gen',
+                        help='Path to directory containing generated files')
+    parser.add_argument('-spec', action='store',
+                        choices=[ 'core', 'khr', 'ratified', 'all' ],
+                        default='core',
+                        help='Type of spec to generate')
+    parser.add_argument('-version', action='store',
+                        choices=[ '1.0', '1.1', '1.2', '1.3', 'sc1.0' ],
+                        default='1.3',
+                        help='Type of spec to generate')
+    parser.add_argument('-registry', action='store',
+                        default=None,
+                        help='Path to API XML registry file specifying version and extension dependencies')
+    parser.add_argument('-apiname', action='store',
+                        default=None,
+                        help='API name to generate')
+    parser.add_argument('-test', action='store_true',
+                        help='Build the test spec instead of the Vulkan spec')
+    parser.add_argument('-n', action='store_true', dest='dryrun',
+                        help='Only prints actions, do not execute them')
+    parser.add_argument('-v', action='store_true', dest='verbose',
+                        help='Print actions before executing them')
+
+    (results, options) = parser.parse_known_args()
+
+    # Ensure genpath is an absolute path, not relative
+    if results.genpath[0] != '/':
+        results.genpath = os.getcwd() + '/' + results.genpath
+
+    # Look for scripts/extdependency.py
+    # This requires makeSpec to be invoked from the repository root, but we
+    # could derive that path.
+    sys.path.insert(0, 'scripts')
+    from extdependency import ApiDependencies
+    deps = ApiDependencies(results.registry, results.apiname)
+
+    # List of versions to build with from the requested -version
+    # This should come from the extdependency module as well, eventually
+    #@ Note that at present, building sc1.0 does *not* include Vulkan 1.3 automatically.
+    versionDict = {
+        '1.0' : [ 'VK_VERSION_1_0' ],
+        '1.1' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ],
+        '1.2' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2' ],
+        '1.3' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VK_VERSION_1_3' ],
+        'sc1.0' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VKSC_VERSION_1_0' ],
+    }
+    versions = 'VERSIONS={}'.format(' '.join(versionDict[results.version]))
+
+    # List of extensions to build with from the requested -spec
+    # Also construct a spec title
+    # This should respect version dependencies as well
+    if results.spec == 'core':
+        title = ''
+        exts = set()
+    elif results.spec == 'khr':
+        title = 'with all KHR extensions'
+        exts = set(deps.khrExtensions())
+    elif results.spec == 'ratified':
+        title = 'with all ratified extensions'
+        exts = set(deps.ratifiedExtensions())
+    elif results.spec == 'all':
+        title = 'with all registered extensions'
+        exts = set(deps.allExtensions())
+
+    # List of explicitly requested extension and all its supported dependencies
+    extraexts = set()
+    for name in results.extension:
+        if name in deps.allExtensions():
+            extraexts.add(name)
+            for dep in deps.children(name):
+                if dep in deps.allExtensions():
+                    extraexts.update({dep})
+        else:
+            raise Exception(f'ERROR: unknown extension {name}')
+
+    # See if any explicitly requested extensions are not implicitly requested
+    # Add any such extensions to the spec title
+    extraexts -= exts
+    if len(extraexts) > 0:
+        exts.update(extraexts)
+        if title != '':
+            title += ' and ' + ', '.join(sorted(extraexts))
+        else:
+            title += 'with ' + ', '.join(sorted(extraexts))
+
+    if title != '':
+        title = '(' + title + ')'
+
+    # Finally, actually invoke make as needed for the targets
+    args = [ 'make', 'GENERATED=' + results.genpath ]
+
+    if results.clean:
+        # If OUTDIR is set on the command line, pass it to the 'clean'
+        # target so it is cleaned as well.
+        cleanopts = ['clean']
+        for opt in options:
+            if opt[:7] == 'OUTDIR=':
+                cleanopts.append(opt)
+        try:
+            execute(args + cleanopts, results)
+        except:
+            sys.exit(1)
+
+    # Use the test spec if specified.  This is used solely by self tests.
+    rootdir = os.path.dirname(os.path.abspath(__file__))
+    if results.test:
+        # Set the spec source to the test spec
+        args.append(f'SPECSRC={rootdir}/build_tests/testspec.adoc')
+        args.append(f'SPECDIR={rootdir}/build_tests/')
+        # Make sure the build is invariant
+        args.append('SPECREVISION=1.2.3')
+        args.append('SPECDATE=\\"2100-11-22 00:33:44Z\\"')
+        args.append('SPECREMARK=\\"test build\\"')
+
+    args.append(versions)
+
+    # The actual target
+    if len(exts) > 0:
+        args.append(f'EXTENSIONS={" ".join(sorted(exts))}')
+    args.append(f'APITITLE={title}')
+    args += options
+
+    try:
+        execute(args, results)
+    except:
+        sys.exit(1)
diff --git a/codegen/vulkan/vulkan-docs-next/package-lock.json b/codegen/vulkan/vulkan-docs-next/package-lock.json
new file mode 100644
index 0000000..42a3944
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/package-lock.json
@@ -0,0 +1,38 @@
+{
+  "name": "Vulkan-Docs",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "devDependencies": {
+        "escape-string-regexp": "^2.0.0",
+        "he": "^1.2.0",
+        "lunr": "2.3.8"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/lunr": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz",
+      "integrity": "sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==",
+      "dev": true
+    }
+  }
+}
diff --git a/codegen/vulkan/vulkan-docs-next/package.json b/codegen/vulkan/vulkan-docs-next/package.json
new file mode 100644
index 0000000..9aa37e1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/package.json
@@ -0,0 +1,8 @@
+{
+  "private": true,
+  "devDependencies": {
+    "escape-string-regexp": "^2.0.0",
+    "he": "^1.2.0",
+    "lunr": "2.3.8"
+  }
+}
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/Roadmap.adoc b/codegen/vulkan/vulkan-docs-next/proposals/Roadmap.adoc
new file mode 100644
index 0000000..5a03161
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/Roadmap.adoc
@@ -0,0 +1,118 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# Vulkan Roadmap
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes the development of a shared public roadmap for features across mid-to-high-end devices in smartphone, tablet, laptop, console, and desktop markets.
+
+
+## Problem Statement
+
+While each hardware vendor determines their own roadmap, input from platform owners and software vendors does influence those roadmaps, and having some of this discussion within Khronos enables vendors to ensure applications can target a standard set of features across the ecosystem.
+
+In the OpenGL/ES era, standardising support for features was done by adding them to new versions of the APIs, but in Vulkan core versions are only really adding software and infrastructure improvements.
+As such there is no current formalization of a shared roadmap; any agreement among the working group has been informal and ad hoc, buried in meeting minutes.
+If any vendor diverges in even one feature from the rest of the industry, then that feature cannot be relied upon by developers and the market is fragmented - arguably a failure at standardisation.
+Feature fragmentation is a particular problem for mid-to-high-end devices across smartphone, tablet, laptop, console, and desktop markets; developers often target a large number of these devices with demanding applications. Often these applications wish to make use of a range of newer features, but a lack of guarantees about feature support across the target devices makes it hard to find a reliable set.
+
+
+## Solution Space
+
+In order to reduce that fragmentation, the options available are roughly as follows:
+
+ - Do nothing, and rely on external pressure to drive the feature set
+ - Create a feature roadmap with defined milestones that have support guarantees
+
+Up until now we had primarily relied on external pressure to drive feature support, but it is apparent that this is not reliable.
+A number of features still do not enjoy wide support, and it is difficult to figure out what the market penetration for a given feature is.
+Different vendors prioritise features differently based on the set of developers they talk to, and while over time the base feature set is growing, it has a very long tail.
+
+Facilitating a roadmap definition would allow the Vulkan members a way to share collective feedback so that everyone has access to the same information, giving a clearer picture of how to prioritise features.
+Ideally by planning well in advance of a release, it will give vendors time to adjust software and hardware roadmaps to align with the wider industry and ultimately reduce fragmentation in future implementations across the identified markets.
+
+This document proposes that the creation and ongoing maintenance of a feature roadmap for the Vulkan working group.
+Possible ways of defining a roadmap include:
+
+  . Having an internal shared roadmap
+  . Having a public shared roadmap
+
+Having a shared roadmap documented internally to Vulkan will allow vendors to collaborate and agree on what the shared roadmap is going to look like, which solves most of the problems.
+If the shared roadmap is published, it adds a lot more scrutiny on hardware vendors - everyone will be able to see if a particular vendor has chosen to ship new hardware that does not meet the roadmap requirements.
+A public roadmap should also lead to a wider range of feedback and discussion; which ultimately should result in a better end product.
+Due to the accountability and potential for more open feedback, this document proposes designing a public roadmap for the Vulkan WG.
+
+Ultimately the roadmap will become a series of milestones with support guarantees tied to a particular point in time - documenting these can be done in a number of ways:
+
+  . Making them part of a core version
+  . Making them into extensions
+  . Documenting them separately
+
+Requiring features in core versions is how things worked for OpenGL and OpenGL ES, and it had enough flaws that this explicitly stopped in Vulkan, with much more caution applied before requiring a feature.
+By not doing this in Vulkan, it has allowed the core version to raise the infrastructure baseline without cutting out old hardware, allowing broader support for new versions.
+There is an additional issue that becomes more apparent with a single core API instead of two as well; which market should define the features in a new core version?
+Vulkan serves the same markets as OpenGL/ES did, which includes even embedded devices - a market that is unlikely to care too much about the latest hardware features for high end graphics.
+This either severely limits the possible impact of requiring features in a core version, or means that certain markets will only be able to support older versions, and are forced to follow the same features.
+
+As for extensions, the roadmap milestones may be retroactively descriptive at the time they are released, and an implementation already supporting the required set of functionality may not be able to get driver updates allowing a milestone extension to be exposed.
+As such, putting the roadmap milestone in the API as an extension would mean some implementations would be excluded from advertising support for the milestone despite supporting all the functionality.
+
+Using separate documentation of the milestones allows markets to evolve requirements separately from the API version, allows multiple markets to coexist while maintaining awareness of how they are each evolving within Khronos, and ensures applications do not rely on extensions as a potentially unreliable mechanism.
+The API specification will describe the milestone, but the detection of a milestone on a given device can be deferred to external tooling.
+
+This proposal details the documentation of the roadmap milestones as separate documentation, supported by external tooling. This proposal does not go into detail about the external tooling, which is being defined separately, but is being designed with the requirements noted in this proposal.
+
+
+## Proposal
+
+Similar to how extensions are defined, this proposal suggests adding a definition of roadmap milestones to the Vulkan specification, though these will not be a part of the API itself.
+Each milestone will be defined as a set of required features and extensions, increased limits, and required versions.
+
+
+### Target Markets
+
+The current roadmap plans account for Vulkan’s most demanding markets - mid-to-high-end across smartphone, tablet, laptop, console, and desktop, but other markets continue to remain important to Vulkan. Embedded systems, wearables, and other area-critical markets currently track the core Vulkan baseline, and future feature planning will continue to account for this. Vulkan SC and the Vulkan portability effort address unique market segments with their own needs that aren’t captured by the current roadmap effort; these initiatives will continue to evolve independently where necessary. If any notable markets emerge with unique needs across a large number of vendors, we could facilitate additional roadmaps.
+
+
+### Defining the roadmap
+
+The roadmap should be initially defined as a set of problems that the Vulkan working group determines should be solved as a priority based on industry input, with rounds of feedback both internally and publicly.
+Periodically, the working group should reevaluate the priorities of these problems, and plan to work towards addressing the highest priority items.
+One of the products of these efforts is likely to be new API features, which will become candidates for including in roadmap milestones.
+
+
+### Milestone release cadence
+
+The cadence of releasing new roadmap milestones is likely to be somewhat coincident with hardware vendor architecture refreshes, which often take somewhere between 3-4 years.
+Given the current cadence of Vulkan versions every 2 years, it is likely that roadmap milestones could be aligned to a 4 year cadence.
+This is not a given, but can be considered reasonable upper bound.
+
+Releasing roadmap milestones once a year is likely to just confuse the market; one year is unlikely to be enough for developers to settle on a single roadmap milestone, or for implementors to align their internal roadmaps enough for significant pieces of functionality.
+A 2 year cadence, being exactly coincident with core version releases, would likely be the lower bound, as it works relatively well for core versions.
+
+The actual criteria used to decide on releasing a roadmap milestone will be whether a roadmap milestone adds notable value to developers, and a reasonable cadence will need to be determined as the working group gains experience with the roadmap.
+However, the working group will aim to have a new milestone within four years of a prior milestone as a default position, as long as Vulkan remains relevant.
+
+
+### Criteria for including a feature in a milestone
+
+Features should only be included in a roadmap milestone if the feature is proven to address identified problems in a reliable manner.
+Any feature which remains unproven across all target markets must not be included in a roadmap milestone.
+
+Milestones should have a year associated with them and a clear indication of support from vendors offering hardware to the target markets that can be publicly advertised.
+If a feature does not have commitment for support by the end of that year (or shortly thereafter) from all vendors supplying mid-to-high-end devices in the target markets, it must not be included in the roadmap.
+
+
+### Milestone Documentation
+
+Milestones will be documented in an appendix to the Vulkan specification, as well as features and limits being documented in the specification text body.
+In addition, external tooling is being developed to define and manage "profiles" in a standard format for ease of use, and milestones should additionally be defined as a profile in this same manner.
+
+
+### Initial milestone
+
+An initial milestone should be developed and published to determine the current state of implementation support.
+This will not allow for time to modify roadmaps significantly, but it should give time to align some software on top of existing hardware support.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_AMDX_shader_enqueue.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_AMDX_shader_enqueue.adoc
new file mode 100644
index 0000000..1add676
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_AMDX_shader_enqueue.adoc
@@ -0,0 +1,582 @@
+// Copyright 2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_AMDX_shader_enqueue
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This extension adds the ability for developers to enqueue compute workgroups from a shader.
+
+## Problem Statement
+
+Applications are increasingly using more complex renderers, often incorporating multiple compute passes that classify, sort, or otherwise preprocess input data.
+These passes may be used to determine how future work is performed on the GPU; but triggering that future GPU work requires either a round trip to the host, or going through buffer memory and using indirect commands.
+Host round trips necessarily include more system bandwidth and latency as command buffers need to be built and transmitted back to the GPU.
+Indirect commands work well in many cases, but they have little flexibility when it comes to determining what is actually dispatched; they must be enqueued ahead of time, synchronized with heavy API barriers, and execute with a single pre-recorded pipeline.
+
+Whilst latency can be hidden and indirect commands can work in many cases where additional latency and bandwidth is not acceptable, recent engine developments such as Unreal 5's Nanite technology explicitly require the flexibility of shader selection _and_ low latency.
+A desirable solution should be able to have the flexibility required for these systems, while keeping the execution loop firmly on the GPU.
+
+
+## Solution Space
+
+Three main possibilities exist:
+
+  . Extend indirect commands
+  . VK_NV_device_generated_commands
+  . Shader enqueue
+
+More flexible indirect commands could feasibly allow things like shader selection, introduce more complex flow control, or include indirect state setting commands.
+The main issue with these is that these always require parameters to be written through regular buffer memory, and that buffer memory has to be sized for each indirect command to handle the maximum number of possibilities.
+As well as the large allocation size causing memory pressure, pushing all that data through buffer memory will reduce the bandwidth available for other operations.
+All of this could cause bottlenecks elsewhere in the pipeline.
+Hypothetically a new interface for better scheduling/memory management could be introduced, but that starts looking a lot like option 3.
+
+Option 2 - implementing a cross-vendor equivalent of VK_NV_device_generated_commands would be a workable solution that adds both flexibility and avoids a CPU round trip.
+The reason it has not enjoyed wider support is due to concerns about how the commands are generated - it uses a tokenised API which has to be processed by the GPU before it can be executed.
+For existing GPUs this can mean doing things like running a single compute shader invocation to process each token stream into a runnable command buffer, adding both latency and bandwidth on the GPU.
+
+Option 3 - OpenCL and CUDA have had some form of shader enqueue API for a while, where the focus has typically been primarily on enabling developers and on compute workloads.
+From a user interface perspective these have had a decent amount of battle testing and is quite a popular and flexible interface.
+
+This proposal is built around something like Option 3, but extended to be explicit and performant.
+
+
+## Proposal
+
+### API Changes
+
+#### Graph Pipelines
+
+In order to facilitate dispatch of multiple shaders from the GPU, the implementation needs some information about how pipelines will be launched and synchronized.
+This proposal introduces a new _execution graph pipeline_ that defines execution paths between multiple shaders, and allows dynamic execution of different shaders.
+
+[source,c]
+----
+VkResult vkCreateExecutionGraphPipelinesAMDX(
+    VkDevice                                        device,
+    VkPipelineCache                                 pipelineCache,
+    uint32_t                                        createInfoCount,
+    const VkExecutionGraphPipelineCreateInfoAMDX*    pCreateInfos,
+    const VkAllocationCallbacks*                    pAllocator,
+    VkPipeline*                                     pPipelines);
+
+typedef struct VkExecutionGraphPipelineCreateInfoAMDX {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkPipelineCreateFlags                       flags;
+    uint32_t                                    stageCount;
+    const VkPipelineShaderStageCreateInfo*      pStages;
+    const VkPipelineLibraryCreateInfoKHR*       pLibraryInfo;
+    VkPipelineLayout                            layout;
+    VkPipeline                                  basePipelineHandle;
+    int32_t                                     basePipelineIndex;
+} VkExecutionGraphPipelineCreateInfoAMDX;
+----
+
+Shaders defined by `pStages` and any pipelines in `pLibraryInfo->pLibraries` define the possible nodes of the graph.
+The linkage between nodes however is defined wholly in shader code.
+
+Shaders in `pStages` must be in the `GLCompute` execution model, and may have the *CoalescingAMDX* execution mode.
+Pipelines in `pLibraries` can be compute pipelines or other graph pipelines created with the `VK_PIPELINE_CREATE_LIBRARY_BIT_KHR` flag bit.
+
+Each shader in an execution graph is associated with a name and an index, which are used to identify the target shader when dispatching a payload.
+The `VkPipelineShaderStageNodeCreateInfoAMDX` provides options for specifying how the shader is specified with regards to its entry point name and index, and can be chained to the link:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo] structure.
+
+[source,c]
+----
+const uint32_t VK_SHADER_INDEX_UNUSED_AMDX = 0xFFFFFFFF;
+
+typedef struct VkPipelineShaderStageNodeCreateInfoAMDX {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    const char*                                 pName;
+    uint32_t                                    index;
+} VkPipelineShaderStageNodeCreateInfoAMDX;
+----
+
+* `index` sets the index value for a shader.
+* `pName` allows applications to override the name specified in SPIR-V by *OpEntryPoint*.
+
+If `pName` is `NULL` then the original name is used, as specified by `VkPipelineShaderStageCreateInfo::pName`.
+If `index` is `VK_SHADER_INDEX_UNUSED_AMDX` then the original index is used, either as specified by the `ShaderIndexAMDX` `Execution` `Mode`, or `0` if that too is not specified.
+If this structure is not provided, `pName` defaults to `NULL`, and `index` defaults to `VK_SHADER_INDEX_UNUSED_AMDX`.
+
+When dispatching from another shader, the index is dynamic and can be specified in uniform control flow - however the name must be statically declared as a decoration on the payload.
+Allowing the index to be set dynamically lets applications stream shaders in and out dynamically, by simply changing constant data and relinking the graph pipeline from new libraries.
+Shaders with the same name and different indexes must consume identical payloads and have the same execution model.
+Shaders with the same name in an execution graph pipeline must have unique indexes.
+
+#### Scratch Memory
+
+Implementations may need scratch memory to manage dispatch queues or similar when executing a pipeline graph, and this is explicitly managed by the application.
+
+[source,c]
+----
+typedef struct VkExecutionGraphPipelineScratchSizeAMDX {
+    VkStructureType                     sType;
+    void*                               pNext;
+    VkDeviceSize                        size;
+} VkExecutionGraphPipelineScratchSizeAMDX;
+
+VkResult vkGetExecutionGraphPipelineScratchSizeAMDX(
+    VkDevice                                device,
+    VkPipeline                              executionGraph,
+    VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
+----
+
+Applications can query the required amount of scratch memory required for a given pipeline, and the address of a buffer of that size must be provided when calling `vkCmdDispatchGraphAMDX`.
+The amount of scratch memory needed by a given pipeline is related to the number and size of payloads across the whole graph; while the exact relationship is implementation dependent, reducing the number of unique nodes (different name string) and size of payloads can reduce scratch memory consumption.
+
+Buffers created for this purpose must use the new buffer usage flags:
+
+[source,c]
+----
+VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
+VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
+----
+
+Scratch memory needs to be initialized against a graph pipeline before it can be used with that graph for the first time, using the following command:
+
+[source,c]
+----
+void vkCmdInitializeGraphScratchMemoryAMDX(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             scratch);
+----
+
+This command initializes it for the currently bound execution graph pipeline.
+Scratch memory will need to be re-initialized if it is going to be reused with a different execution graph pipeline, but can be used with the same pipeline repeatedly without re-initialization.
+Scratch memory initialization can be synchronized using the compute pipeline stage `VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT` and shader write access flag `VK_ACCESS_SHADER_WRITE_BIT`.
+
+
+#### Dispatch a graph
+
+Once an execution graph has been created and scratch memory has been initialized for it, the following commands can be used to execute the graph:
+
+[source,c]
+----
+typedef struct VkDispatchGraphInfoAMDX {
+    uint32_t                                    nodeIndex;
+    uint32_t                                    payloadCount;
+    VkDeviceOrHostAddressConstAMDX              payloads;
+    uint64_t                                    payloadStride;
+} VkDispatchGraphInfoAMDX;
+
+typedef struct VkDispatchGraphCountInfoAMDX {
+    uint32_t                                    count;
+    VkDeviceOrHostAddressConstAMDX              infos;
+    uint64_t                                    stride;
+} VkDispatchGraphCountInfoAMDX;
+
+void vkCmdDispatchGraphAMDX(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             scratch,
+    const VkDispatchGraphCountInfoAMDX*         pCountInfo);
+
+void vkCmdDispatchGraphIndirectAMDX(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             scratch,
+    const VkDispatchGraphCountInfoAMDX*         pCountInfo);
+
+void vkCmdDispatchGraphIndirectCountAMDX(
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceAddress                             scratch,
+    VkDeviceAddress                             countInfo);
+----
+
+Each of the above commands enqueues an array of nodes in the bound execution graph pipeline with separate payloads, according to the contents of the `VkDispatchGraphCountInfoAMDX` and `VkDispatchGraphInfoAMDX` structures.
+
+`vkCmdDispatchGraphAMDX` takes all of its arguments from the host pointers.
+`VkDispatchGraphCountInfoAMDX::infos.hostAddress` is a pointer to an array of `VkDispatchGraphInfoAMDX` structures,
+with stride equal to `VkDispatchGraphCountInfoAMDX::stride` and `VkDispatchGraphCountInfoAMDX::count` elements.
+
+`vkCmdDispatchGraphIndirectAMDX` consumes most parameters on the host, but uses the device address for `VkDispatchGraphCountInfoAMDX::infos`, and also treating `payloads` parameters as device addresses.
+
+`vkCmdDispatchGraphIndirectCountAMDX` consumes `countInfo` on the device and all child parameters also use device addresses.
+
+Data consumed via a device address must be from buffers created with the `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT` and `VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT` flags.
+`payloads` is a pointer to a linear array of payloads in memory, with a stride equal to `payloadStride`.
+`payloadCount` may be `0`.
+`scratch` may be used by the implementation to hold temporary data during graph execution, and can be synchronized using the compute pipeline stage and shader write access flags.
+
+These dispatch commands must not be called in protected command buffers or secondary command buffers.
+
+If a selected node does not include a `StaticNumWorkgroupsAMDX` or `CoalescingAMDX` declaration, the first part of each element of `payloads` must be a `VkDispatchIndirectCommand` structure, indicating the number of workgroups to dispatch in each dimension.
+If an input payload variable in `NodePayloadAMDX` storage class is defined in the shader, its structure type *must* include link:{refpage}VkDispatchIndirectCommand.html[VkDispatchIndirectCommand] in its first 12 bytes.
+
+If that node does not include a `MaxNumWorkgroupsAMDX` declaration, it is assumed that the node may be dispatched with a grid size up to `VkPhysicalDeviceLimits::maxComputeWorkGroupCount`.
+
+If that node does not include a `CoalescingAMDX` declaration, all data in the payload is broadcast to all workgroups dispatched in this way.
+If that node includes a `CoalescingAMDX` declaration, data in the payload will be consumed by exactly one workgroup.
+There is no guarantee of how payloads will be consumed by `CoalescingAMDX` nodes.
+
+The `nodeIndex` is a unique integer identifier identifying a specific shader name and shader index (defined by `VkPipelineShaderStageNodeCreateInfoAMDX`) added to the executable graph pipeline.
+`vkGetExecutionGraphPipelineNodeIndexAMDX` can be used to query the identifier for a given node:
+
+[source,c]
+----
+VkResult vkGetExecutionGraphPipelineNodeIndexAMDX(
+    VkDevice                                        device,
+    VkPipeline                                      executionGraph,
+    const VkPipelineShaderStageNodeCreateInfoAMDX*   pNodeInfo,
+    uint32_t*                                       pNodeIndex);
+----
+
+`pNodeInfo` specifies the shader name and index as set up when creating the pipeline, with the associated node index returned in `pNodeIndex`.
+When used with this function, `pNodeInfo->pName` must not be `NULL`.
+
+[NOTE]
+====
+To summarize, execution graphs use two kinds of indexes:
+
+. _shader index_ specified in `VkPipelineShaderStageNodeCreateInfoAMDX` and used to enqueue payloads,
+. _node index_ specified in `VkDispatchGraphInfoAMDX` and used only for launching the graph from a command buffer.
+====
+
+Execution graph pipelines and their resources are bound using a new pipeline bind point:
+
+[source,c]
+----
+VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX
+----
+
+
+#### Properties
+
+The following new properties are added to Vulkan:
+
+[source,c]
+----
+typedef VkPhysicalDeviceShaderEnqueuePropertiesAMDX {
+    VkStructureType                     sType;
+    void*                               pNext;
+    uint32_t                            maxExecutionGraphDepth;
+    uint32_t                            maxExecutionGraphShaderOutputNodes;
+    uint32_t                            maxExecutionGraphShaderPayloadSize;
+    uint32_t                            maxExecutionGraphShaderPayloadCount;
+    uint32_t                            executionGraphDispatchAddressAlignment;
+} VkPhysicalDeviceShaderEnqueuePropertiesAMDX;
+----
+
+Each limit is defined as follows:
+
+  * `maxExecutionGraphDepth` defines the maximum node chain length in the graph, and must be at least 32.
+  The dispatched node is at depth 1 and the node enqueued by it is at depth 2, and so on.
+  If a node uses tail recursion, each recursive call increases the depth by 1 as well.
+  * `maxExecutionGraphShaderOutputNodes` specifies the maximum number of unique nodes that can be dispatched from a single shader, and must be at least 256.
+  * `maxExecutionGraphShaderPayloadSize` specifies the maximum total size of payload declarations in a shader, and must be at least 32KB.
+  * `maxExecutionGraphShaderPayloadCount` specifies the maximum number of output payloads that can be initialized in a single workgroup, and must be at least 256.
+  * `executionGraphDispatchAddressAlignment` specifies the alignment of non-scratch `VkDeviceAddress` arguments consumed by graph dispatch commands, and must be no more than 4 bytes.
+
+
+#### Features
+
+The following new feature is added to Vulkan:
+
+[source,c]
+----
+typedef VkPhysicalDeviceShaderEnqueueFeaturesAMDX {
+    VkStructureType                     sType;
+    void*                               pNext;
+    VkBool32                            shaderEnqueue;
+} VkPhysicalDeviceShaderEnqueueFeaturesAMDX;
+----
+
+The `shaderEnqueue` feature enables all functionality in this extension.
+
+
+### SPIR-V Changes
+
+A new capability is added:
+
+[cols="1,10,8",options="header"]
+|====
+2+^.^| Capability | Enabling Capabilities
+| 5067 | *ShaderEnqueueAMDX* +
+Uses shader enqueue capabilities | *Shader*
+|====
+
+A new storage class is added:
+
+[cols="1,10,8",options="header"]
+|====
+2+^.^| Storage Class | Enabling Capabilities
+| 5068 | *NodePayloadAMDX* +
+Input payload from a node dispatch. +
+In the *GLCompute* execution model with the *CoalescingAMDX* execution mode, it is visible across all functions in all invocations in a workgroup; otherwise it is visible across all functions in all invocations in a dispatch. +
+Variables declared with this storage class are read-write, and must not have initializers.
+| *ShaderEnqueueAMDX*
+| 5076 | *NodeOutputPayloadAMDX* +
+Output payload to be used for dispatch. +
+Variables declared with this storage class are read-write, must not have initializers, and must be initialized with *OpInitializeNodePayloadsAMDX* before they are accessed. +
+Once initialized, a variable declared with this storage class is visible to all invocations in the declared _Scope_. +
+Valid in *GLCompute* execution models.
+| *ShaderEnqueueAMDX*
+|====
+
+An entry point must only declare one variable in the `NodePayloadAMDX` storage class in its interface.
+
+New execution modes are added:
+
+[cols="1,10,3,3,3,8",options="header"]
+|====
+2+^.^| Execution Mode 3+| Extra Operands | Enabling Capabilities
+| 5069 | *CoalescingAMDX* +
+Indicates that a GLCompute shader has coalescing semantics. (GLCompute only) +
+ +
+Must not be declared alongside *StaticNumWorkgroupsAMDX* or *MaxNumWorkgroupsAMDX*.
+3+|
+|*ShaderEnqueueAMDX*
+| 5071 | *MaxNodeRecursionAMDX* +
+Maximum number of times a node can enqueue itself.
+3+| _<id>_ +
+_Number of recursions_
+|*ShaderEnqueueAMDX*
+| 5072 | *StaticNumWorkgroupsAMDX* +
+Statically declare the number of workgroups dispatched for this shader, instead of obeying an API- or payload-specified value. Values are reflected in the NumWorkgroups built-in value. (GLCompute only) +
+ +
+Must not be declared alongside *CoalescingAMDX* or *MaxNumWorkgroupsAMDX*.
+| _<id>_ +
+_x size_
+| _<id>_ +
+_y size_
+| _<id>_ +
+_z size_
+|*ShaderEnqueueAMDX*
+| 5077 | *MaxNumWorkgroupsAMDX* +
+Declare the maximum number of workgroups dispatched for this shader. Dispatches must not exceed this value (GLCompute only) +
+ +
+Must not be declared alongside *CoalescingAMDX* or *StaticNumWorkgroupsAMDX*.
+| _<id>_ +
+_x size_
+| _<id>_ +
+_y size_
+| _<id>_ +
+_z size_
+|*ShaderEnqueueAMDX*
+| 5073 | *ShaderIndexAMDX* +
+Declare the node index for this shader. (GLCompute only) 3+| _<id>_ +
+_Shader Index_
+|*ShaderEnqueueAMDX*
+|====
+
+A shader module declaring `ShaderEnqueueAMDX` capability must only be used in execution graph pipelines created by
+`vkCreateExecutionGraphPipelinesAMDX` command.
+
+`MaxNodeRecursionAMDX` must be specified if a shader re-enqueues itself, which takes place if that shader
+initializes and finalizes a payload for the same node _name_ and _index_. Other forms of recursion are not allowed.
+
+An application must not dispatch the shader with a number of workgroups in any dimension greater than the values specified by `MaxNumWorkgroupsAMDX`.
+
+`StaticNumWorkgroupsAMDX` allows the declaration of the number of workgroups to dispatch to be coded into the shader itself, which can be useful for optimizing some algorithms. When a compute shader is dispatched using existing `vkCmdDispatchGraph*` commands, the workgroup counts specified there are overridden. When enqueuing such shaders with a payload, these arguments will not be consumed from the payload before user-specified data begins.
+
+The values of `MaxNumWorkgroupsAMDX` and `StaticNumWorkgroupsAMDX` must be less than or equal to `link:{refpage}VkPhysicalDeviceLimits.html[VkPhysicalDeviceLimits]::maxComputeWorkGroupCount`.
+
+The arguments to each of these execution modes must be a constant 32-bit integer value, and may be supplied via specialization constants.
+
+When a *GLCompute* shader is being used in an execution graph, `NumWorkgroups` must not be used.
+
+When *CoalescingAMDX* is used, it has the following effects on a compute shader's inputs and outputs:
+
+ - The `WorkgroupId` built-in is always `(0,0,0)`
+   - NB: This affects related built-ins like `GlobalInvocationId`
+   - So similar to `StaticNumWorkgroupsAMDX`, no dispatch size is consumed from the payload-specified
+ - The input in the `NodePayloadAMDX` storage class must have a type of *OpTypeArray* or *OpTypeRuntimeArray*.
+   - This input must be decorated with `NodeMaxPayloadsAMDX`, indicating the number of payloads that can be received.
+   - The number of payloads received is provided in the `CoalescedInputCountAMDX` built-in.
+   - If *OpTypeArray* is used, that input's array length must be equal to the size indicated by the `NodeMaxPayloadsAMDX` decoration.
+
+New decorations are added:
+
+[cols="1,10,3,4",options="header"]
+|====
+2+^.^| Decoration | Extra Operands | Enabling Capabilities
+| 5020 | *NodeMaxPayloadsAMDX* +
+Must only be used to decorate a variable in the *NodeOutputPayloadAMDX* or *NodePayloadAMDX* storage class. +
+ +
+Variables in the *NodeOutputPayloadAMDX* storage class must have this decoration.
+If such a variable is decorated, the operand indicates the maximum number of payloads in the array +
+as well as the maximum number of payloads that can be allocated by a single workgroup for this output. +
+ +
+Variables in the *NodePayloadAMDX* storage class must have this decoration if the *CoalescingAMDX* execution mode is specified, otherwise they must not.
+If such a variable is decorated, the operand indicates the maximum number of payloads in the array. +
+| _<id>_ +
+_Max number of payloads_
+|*ShaderEnqueueAMDX*
+| 5019 | *NodeSharesPayloadLimitsWithAMDX* +
+Decorates a variable in the *NodeOutputPayloadAMDX* storage class to indicate that it shares output resources with _Payload Array_ when dispatched. +
+ +
+Without the decoration, each variable's resources are separately allocated against the output limits; by using the decoration only the limit of _Payload Array_ is considered.
+Applications must still ensure that at runtime the actual usage does not exceed these limits, as this decoration only relaxes static validation. +
+ +
+Must only be used to decorate a variable in the *NodeOutputPayloadAMDX* storage class,
+_Payload Array_ must be a different variable in the *NodeOutputPayloadAMDX* storage class, and
+_Payload Array_ must not be itself decorated with *NodeSharesPayloadLimitsWithAMDX*. +
+ +
+It is only necessary to decorate one variable to indicate sharing between two node outputs.
+Multiple variables can be decorated with the same _Payload Array_ to indicate sharing across multiple node outputs.
+| _<id>_ +
+_Payload Array_
+|*ShaderEnqueueAMDX*
+| 5091 | *PayloadNodeNameAMDX* +
+Decorates a variable in the *NodeOutputPayloadAMDX* storage class to indicate that the payloads in the array
+will be enqueued for the shader with _Node Name_. +
+ +
+Must only be used to decorate a variable that is initialized by *OpInitializeNodePayloadsAMDX*.
+| _Literal_ +
+_Node Name_
+|*ShaderEnqueueAMDX*
+| 5078 | *TrackFinishWritingAMDX* +
+Decorates a variable in the *NodeOutputPayloadAMDX* or *NodePayloadAMDX* storage class to indicate that a payload that is first
+enqueued and then accessed in a receiving shader, will be used with *OpFinishWritingNodePayloadAMDX* instruction. +
+ +
+Must only be used to decorate a variable in the *NodeOutputPayloadAMDX* or *NodePayloadAMDX* storage class. +
+ +
+Must not be used to decorate a variable in the *NodePayloadAMDX* storage class if the shader uses *CoalescingAMDX* execution mode. +
+ +
+If a variable in *NodeOutputPayloadAMDX* storage class is decorated, then a matching variable with *NodePayloadAMDX* storage class
+in the receiving shader must be decorated as well. +
+ +
+If a variable in *NodePayloadAMDX* storage class is decorated, then a matching variable with *NodeOutputPayloadAMDX* storage class
+in the enqueuing shader must be decorated as well. +
+|
+|*ShaderEnqueueAMDX*
+|====
+
+This allows more control over the `maxExecutionGraphShaderPayloadSize` limit, and can be useful when a shader may output some large number of payloads but to potentially different nodes.
+
+Two new built-ins are provided:
+
+[cols="1,10,8",options="header"]
+|====
+2+^.^| BuiltIn | Enabling Capabilities
+| 5073 | *ShaderIndexAMDX* +
+Index assigned to the current shader.
+|*ShaderEnqueueAMDX*
+| 5021 | *CoalescedInputCountAMDX* +
+Number of valid inputs in the *NodePayloadAMDX* storage class array when using the *CoalescingAMDX* Execution Mode. (GLCompute only)
+|*ShaderEnqueueAMDX*
+|====
+
+The business of actually allocating and enqueuing payloads is done by *OpInitializeNodePayloadsAMDX*:
+
+[cols="1,2,2,2,2,2"]
+|======
+5+|[[OpInitializeNodePayloadsAMDX]]*OpInitializeNodePayloadsAMDX* +
+ +
+Allocate payloads in memory and make them accessible through the _Payload Array_ variable.
+The payloads are enqueued for the node shader identified by the _Node Index_ and _Node Name_ in the decoration
+*PayloadNodeNameAMDX* on the _Payload Array_ variable. +
+ +
+_Payload Array_ variable must be an *OpTypePointer* with a _Storage Class_ of _OutputNodePayloadAMDX_, and a _Type_ of *OpTypeArray* with an _Element Type_ of *OpTypeStruct*. +
+ +
+The array pointed to by _Payload Array_ variable must have _Payload Count_ elements. +
+ +
+Payloads are allocated for the _Scope_ indicated by _Visibility_, and are visible to all invocations in that _Scope_. +
+ +
+_Payload Count_ is the number of payloads to initialize in the _Payload Array_. +
+ +
+_Payload Count_ must be less than or equal to the *NodeMaxPayloadsAMDX* decoration on the _Payload Array_ variable. +
+ +
+_Payload Count_ and _Node Index_ must be dynamically uniform within the scope identified by _Visibility_. +
+ +
+_Visibility_ must only be either _Invocation_ or _Workgroup_. +
+ +
+This instruction must be called in uniform control flow. +
+This instruction must not be called on a _Payload Array_ variable that has previously been initialized.
+1+|Capability: +
+*ShaderEnqueueAMDX*
+| 5 | 5090
+| _<id>_ +
+_Payload Array_
+| _Scope <id>_ +
+_Visibility_
+| _<id>_ +
+_Payload Count_
+| _<id>_ +
+_Node Index_
+|======
+
+
+Once a payload element is initialized, it will be enqueued to workgroups in the corresponding shader after the calling shader has written all of its values.
+Enqueues are performed in the same manner as the `vkCmdDispatchGraph*` API commands.
+If the node enqueued has the `CoalescingAMDX` execution mode, there is no guarantee what set of payloads are visible to the same workgroup.
+
+The shader must not enqueue payloads to a shader with the same name as this shader unless the index identifies this shader and `MaxNodeRecursionAMDX` is declared with a sufficient depth.
+Shaders with the same name and different indexes can each recurse independently.
+
+
+A shader can explicitly specify that it is done writing to outputs (allowing the enqueue to happen sooner) by calling *OpFinalizeNodePayloadsAMDX*:
+
+[cols="3,1,1"]
+|======
+2+|[[OpFinalizeNodePayloadsAMDX]]*OpFinalizeNodePayloadsAMDX* +
+ +
+Optionally indicates that all accesses to an array of output payloads have completed.
+ +
+_Payload Array_ is a payload array previously initialized by *OpInitializeNodePayloadsAMDX*.
+ +
+This instruction must be called in uniform control flow.
+ +
+_Payload Array_ must be an *OpTypePointer* with a _Storage Class_ of _OutputNodePayloadAMDX_, and a _Type_ of *OpTypeArray* or *OpTypeRuntimeArray* with an _Element Type_ of *OpTypeStruct*.
+_Payload Array_ must not have been previously finalized by *OpFinalizeNodePayloadsAMDX*.
+1+|Capability: +
+*ShaderEnqueueAMDX*
+| 2 | 5075
+| _<id>_ +
+_Payload Array_
+|======
+
+Once this has been called, accessing any element of _Payload Array_ is undefined behavior.
+
+[cols="3,1,1,1,1"]
+|======
+4+|[[OpFinishWritingNodePayloadAMDX]]*OpFinishWritingNodePayloadAMDX* +
+ +
+Optionally indicates that all writes to the input payload by the current workgroup have completed.
+ +
+Returns `true` when all workgroups that can access this payload have called this function.
+
+Must not be called if the shader is using *CoalescingAMDX* execution mode,
+or if the shader was dispatched with a `vkCmdDispatchGraph*` command, rather than enqueued from another shader.
+
+Must not be called if the input payload is not decorated with *TrackFinishWritingAMDX*.
+
+_Result Type_ must be *OpTypeBool*.
+ +
+_Payload_ is a variable in the *NodePayloadAMDX* storage class.
+1+|Capability: +
+*ShaderEnqueueAMDX*
+| 4 | 5078
+| _<id>_ +
+_Result Type_
+| _Result_ _<id>_
+| _<id>_ +
+_Payload_
+|======
+
+Once this has been called for a given payload, writing values into that payload by the current invocation/workgroup is undefined behavior.
+
+
+## Issues
+
+### RESOLVED: For compute nodes, can the input payload be modified? If so what sees that modification?
+
+Yes, input payloads are writeable and *OpFinishWritingNodePayloadAMDX* instruction is provided to indicate that all
+workgroups that share the same payload have finished writing to it.
+
+Limitations apply to this functionality. Please refer to the instruction's specification.
+
+
+### UNRESOLVED: Do we need input from the application to tune the scratch allocation?
+
+For now no, more research is required to determine what information would be actually useful to know.
+
+
+### PROPOSED: How does this extension interact with device groups?
+
+It works the same as any other dispatch commands - work is replicated to all devices unless applications split the work themselves.
+There is no automatic scheduling between devices.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_AMD_shader_early_and_late_fragment_tests.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_AMD_shader_early_and_late_fragment_tests.adoc
new file mode 100644
index 0000000..3b535da
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_AMD_shader_early_and_late_fragment_tests.adoc
@@ -0,0 +1,207 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_AMD_shader_early_and_late_fragment_tests
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document describes a proposal for a new SPIR-V execution mode that allows fragment shaders to be discarded by early fragment operations, even if they contain writes to storage resources or other side effects.
+
+
+## Problem Statement
+
+Most graphics devices are able to take advantage of early fragment operations when a fragment shader avoids certain operations - e.g. writing to depth or stencil, or to storage resources, providing significant performance advantages in most cases.
+This is implicitly enabled wherever possible, and can be explicitly enabled by specifying the `EarlyFragmentTests` execution mode in SPIR-V.
+However the `EarlyFragmentTests` execution mode makes it invalid to write fragment depth from a shader.
+
+Some implementations can perform depth testing both before _and_ after fragment shading, allowing a conservative early test to discard most fragments and a late test to discard with more precision.
+https://registry.khronos.org/OpenGL/extensions/ARB/ARB_conservative_depth.txt[GL_ARB_conservative_depth] added a way to enable this optimisation even when depth was written by the fragment shader, allowing further optimisations to be achieved in certain conditions.
+However, if the shader also writes to storage resources, no such optimisation is possible due to the predictability requirements of the specification.
+In cases where an application does not care whether storage writes are performed by a fragment shader when discarded, it is possible to use this capability for a significant performance improvement on some console platforms, but so far Vulkan has no mechanism to do this.
+For some applications, this can mean an unnecessary performance hit that should be relatively straightforward to solve.
+
+
+## Solution Space
+
+There is only really one solution to this problem, which is to expose this capability to applications in some way.
+The main question is how to expose this, at what granularity, and whether we should provide any guarantees.
+Ultimately this should be relatively easy to turn on/off, and ideally should be set per-fragment shader in some form.
+
+The main options for signifying the switch are:
+
+  . Pipeline creation flag
+  . SPIR-V execution mode
+  . Non-semantic instruction
+
+If it becomes a pipeline creation flag, it is easy to turn on/off on a per-pipeline basis.
+However, the knowledge of whether the writes can be discarded is usually a property of whatever algorithm has been written in the fragment shader code itself, meaning this property has to be specified in two places.
+From that perspective, it makes sense to have something in the shader code itself.
+
+A SPIR-V execution mode is a straightforward way to express this, and it is consistent with the way that conservative depth is expressed in SPIR-V (e.g. `DepthGreater` https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Mode[Execution Mode]).
+The downside of using an execution mode which is essentially an optimisation hint is that drivers have to implement the extension for the SPIR-V to be valid; when in fact it can be safely ignored in all cases.
+
+Non-Semantic instructions seem like they could offer a way to specify the behavior without need for drivers to implement anything new.
+Unfortunately, as the induced behavior violates the current Vulkan specification, it is not suitable for this use case, as it cannot be safely added to all shaders.
+
+Without a wider "this can be ignored but can change behavior" extension along the lines of the non-semantic extension, a SPIR-V execution mode is likely the most suitable option.
+Applications, a user-facing library, or a Vulkan software layer could be used to automatically remove the execution mode when not supported.
+Implementations should also eventually be able to support the execution mode as a no-op if they do not have the required capabilities.
+
+
+## Proposal
+
+### New Vulkan feature
+
+```c
+typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderEarlyAndLateFragmentTests;
+} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
+```
+
+This feature allows the new execution mode in SPIR-V shaders consumed by the implementation.
+
+
+### New SPIR-V Execution Modes
+
+A new execution mode is introduced which allows for early depth and stencil tests to be performed both early and late when depth and stencil writes are performed, in combination with the depth optimisations.
+In order to allow for stencil reference writes with this new execution mode, similar stencil reference write optimisations are provided.
+
+[cols="1,6,2,1",options="header"]
+|====
+2+^| Execution mode ^| Extra Operands ^| Enabling Capabilities
+| 5017 | *EarlyAndLateFragmentTestsAMD* +
+Fragment tests can be performed both before and after fragment shader execution, with latter tests taking values written to _FragDepth_ and _FragStencilRefEXT_ into account. Early tests are not guaranteed, late tests are.+
+ +
+If neither of *ExecutionModeDepthReplacing* or *ExecutionModeStencilRefReplacingEXT* are specified, functions identically to *EarlyFragmentTests*. +
+If this and *ExecutionModeStencilRefReplacingEXT* are both specified, one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, or *StencilRefUnchangedAMD* must also be specified. +
+If this and *ExecutionModeDepthReplacing* are both specified, one of *DepthGreater*, *DepthLess*, or *DepthUnchanged* must also be specified. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+See client API for detail on fragment operations.
+|
+| *Shader*
+| 5079 | *StencilRefUnchangedFrontAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is equal to the stencil reference value set for the front face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+| 5080 | *StencilRefGreaterFrontAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is greater than or equal to the stencil reference value set for the front face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+| 5081 | *StencilRefLessFrontAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is less than or equal to the stencil reference value  set for the front face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+| 5082 | *StencilRefUnchangedBackAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is equal to the stencil reference value set for the back face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+| 5083 | *StencilRefGreaterBackAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is greater than or equal to the stencil reference value set for the back face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+| 5084 | *StencilRefLessBackAMD* +
+Indicates that early per-fragment tests may assume that any _FragStencilRefEXT_ built in-decorated value written by the shader is less than or equal to the stencil reference value set for the back face in the client API after masking.
+Late per-fragment tests will use the written value as normal. +
+ +
+Only valid with the Fragment https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#Execution_Model[Execution Model]. +
+At most one of *StencilRefGreaterAMD*, *StencilRefLessAMD*, and *StencilRefUnchangedAMD* can be specified.
+|
+| *StencilExportEXT*
+|====
+
+This allows implementations to perform both early and late tests explicitly.
+
+
+### New GLSL Layout Qualifiers
+
+The following new layout qualifiers are added to GLSL:
+
+Fragment shaders allow the following stand-alone declaration:
+
+```
+__early_and_late_fragment_testsAMD
+```
+
+to request that certain fragment tests be performed before and after fragment shader execution, as described in
+the "`Fragment Operations`" chapter of the Vulkan 1.2 Specification.
+This declaration must appear in a line on its own.
+
+The following additional standalone declarations may be specified:
+
+```
+layout-qualifier-id:
+    __stencil_ref_unchanged_frontAMD
+    __stencil_ref_less_frontAMD
+    __stencil_ref_greater_frontAMD
+    __stencil_ref_unchanged_backAMD
+    __stencil_ref_less_backAMD
+    __stencil_ref_greater_backAMD
+```
+
+These declarations must each appear in a line on their own.
+Only one __stencil_ref_*_frontAMD and one __stencil_ref_*_backAMD declaration may be specified.
+Each declaration constrains the intentions of the final value of `gl_FragStencilRefARB` written by any shader invocation. 
+Implementations are allowed to perform optimizations assuming that the stencil test fails (or passes) for a given fragment if all values of `gl_FragStencilRefARB` consistent with the declaration would fail (or pass).
+This potentially includes skipping shader execution if the fragment is discarded because it is occluded and the shader has no side effects.
+If the final value of `gl_FragStencilRefARB` is inconsistent with the declaration for the facing of the shaded polygon, the result of the stencil test for the corresponding fragment is undefined.
+If the stencil test passes and stencil writes are enabled, the value written to the stencil buffer is always the value of `gl_FragStencilRefARB`, whether or not it is consistent with the layout qualifier.
+
+Each of the above qualifiers maps directly to the equivalently named spir-v execution mode.
+
+
+### New HLSL Attributes
+
+The following new https://github.com/microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst#vulkan-specific-attributes[Vulkan Specific Attribute] is added:
+
+  * `early_and_late_tests`: Marks an entry point as enabling early and late depth tests.
+    If depth is written via `SV_Depth`, `depth_unchanged` must also be specified (SV_DepthLess and SV_DepthGreater can be written freely). 
+    If a stencil reference value is written via `SV_StencilRef`, one of `stencil_ref_unchanged_front`, `stencil_ref_greater_equal_front`, or `stencil_ref_less_equal_front` and one of `stencil_ref_unchanged_back`, `stencil_ref_greater_equal_back`, or `stencil_ref_less_equal_back` must be specified.
+  * `depth_unchanged`: Specifies that any depth written to `SV_Depth` will not invalidate the result of early depth tests.
+     Sets the `DepthUnchanged` execution mode in SPIR-V.
+  * `stencil_ref_unchanged_front`: Specifies that any stencil ref written to `SV_StencilRef` will not invalidate the result of early stencil tests when the fragment is front facing.
+    Sets the `StencilRefUnchangedFrontAMD` execution mode in SPIR-V.
+  * `stencil_ref_greater_equal_front`: Specifies that any stencil ref written to `SV_StencilRef` will be greater than or equal to the stencil reference value set by the API when the fragment is front facing.
+    Sets the `StencilRefGreaterFrontAMD` execution mode in SPIR-V.
+  * `stencil_ref_less_equal_front`: Specifies that any stencil ref written to `SV_StencilRef` will be less than or equal to the stencil reference value set by the API when the fragment is front facing.
+    Sets the `StencilRefLessFrontAMD` execution mode in SPIR-V.
+  * `stencil_ref_unchanged_back`: Specifies that any stencil ref written to `SV_StencilRef` will not invalidate the result of early stencil tests when the fragment is back facing.
+    Sets the `StencilRefUnchangedBackAMD` execution mode in SPIR-V.
+  * `stencil_ref_greater_equal_back`: Specifies that any stencil ref written to `SV_StencilRef` will be greater than or equal to the stencil reference value set by the API when the fragment is back facing.
+    Sets the `StencilRefGreaterBackAMD` execution mode in SPIR-V.
+  * `stencil_ref_less_equal_back`: Specifies that any stencil ref written to `SV_StencilRef` will be less than or equal to the stencil reference value set by the API when the fragment is back facing.
+    Sets the `StencilRefLessBackAMD` execution mode in SPIR-V.
+
+Shaders must not specify more than one of `stencil_ref_unchanged_front`, `stencil_ref_greater_equal_front`, and `stencil_ref_less_equal_front`.
+Shaders must not specify more than one of `stencil_ref_unchanged_back`, `stencil_ref_greater_equal_back`, and `stencil_ref_less_equal_back`.
+
+
+## Issues
+
+### UNRESOLVED: Should we expose a feature/property indiciting if the implementation is actually going to perform early and late tests?
+
+It would be useful if ultimately all implementations could ship this feature, treating it as a no-op where relevant - but if some implementations cannot gain any advantage from this, it might be reasonable to expose a property indicating this.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_ANDROID_external_format_resolve.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_ANDROID_external_format_resolve.adoc
new file mode 100644
index 0000000..52328d1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_ANDROID_external_format_resolve.adoc
@@ -0,0 +1,361 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_ANDROID_external_format_resolve
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This extension enables rendering to Android Hardware Buffers with external formats which cannot be directly represented as renderable in Vulkan, including YC~B~C~R~ formats.
+
+
+== Problem Statement
+
+Applications can render to unknown formats on Android today in OpenGL ES using GL_EXT_yuv_target, which enables direct rendering to images with an unknown external YC~B~C~R~ format.
+In order to support these applications running on top of Vulkan (either via porting or through ANGLE), similar functionality is required for Vulkan.
+
+One issue that needs to be overcome however, is that GL_EXT_yuv_target is very opaque, and in OpenGL ES this allows implementations to hide a lot of gnarly details.
+For Vulkan, it is much harder to hide those details, so an alternative which meets the needs of all potential implementations is required, including those that have no direct support for rendering to YC~B~C~R~ images.
+
+
+== Solution Space
+
+Any solution needs to meet the following requirements:
+
+ * It must provide functionality on par with that provided by GL_EXT_yuv_target
+ * It must be possible to emulate GL_EXT_yuv_target in ANGLE via this extension
+ * It must be cleanly implementable on all implementations
+ * It must perform well on implementations that support direct YC~B~C~R~ rendering
+ * It must be relatively straightforward for applications to use
+ * It must support render pass objects and dynamic rendering
+
+The naive solution would be to directly allow rendering to YC~B~C~R~ images in Vulkan; this would meet most requirements but likely fail at being cleanly implementable, or a lot of awkward detail would need to be exposed to developers.
+
+Another idea that has been suggested would be to enable something via a similar mechanism used for resolving multisampled images at the end of a render pass; resolve operations.
+Care is needed to ensure implementations can still use direct rendering, but it should be able to meet all of the above requirements.
+
+
+== Proposal
+
+This extension extends both render pass objects and dynamic rendering functionality.
+
+
+=== Dynamic Rendering
+
+When using dynamic rendering, a new resolve mode is added to specify that the resolve attachment will have an external format:
+
+[source,c]
+----
+    VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID;
+----
+
+When this resolve mode is specified, the `resolveImageView` member of link:{refpage}VkRenderingAttachmentInfo.html[VkRenderingAttachmentInfo] used as a color attachment must be set to a `VkImageView` created with an image with a non-zero external format.
+If chroma planes of the external format are subsampled, the implementation will reduce the relevant planes by either averaging the corresponding values in the color attachment, or by simply selecting one of the values as representative.
+Implementations may resolve a color attachment to an external format resolve attachment at any time, or bypass writing to a color attachment altogether.
+
+With the resolve mode set to `VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID`, the following additional constraints also apply:
+
+ * If `nullColorAttachmentWithExternalFormatResolve` property is `VK_TRUE`, `imageView` must be `VK_NULL_HANDLE`.
+ ** Values in the color attachment during rendering are loaded from the external format attachment, resampling to the fragment rate as necessary.
+ * If `imageView` is not `NULL`, it must be a single sampled image with a layer count of `1`.
+ * The `layerCount` and `colorAttachmentCount` members of link:{refpage}VkRenderingInfo.html[VkRenderingInfo] must be 1.
+ * The `viewMask` member of link:{refpage}VkRenderingInfo.html[VkRenderingInfo] must be 0.
+ * There must not be a fragment density map image
+ * There must not be a fragment shading rate image
+ * The fragment shading rate must be 1x1
+
+Implementations may need to know that an external format YC~B~C~R~ format is being used when creating a pipeline, so when dynamic rendering is used, link:{refpage}VkExternalFormatANDROID.html[VkExternalFormatANDROID] can be chained to `VkGraphicsPipelineCreateInfo`, indicating the format of the resolve image.
+When rendering, the format of the resolve image specified here and the actual image view used for that color resolve attachment must be the same.
+Graphics pipelines that include a link:{refpage}VkExternalFormatANDROID.html[VkExternalFormatANDROID] structure with a non-zero value must only write to a single color attachment, must not export depth or stencil from the fragment shader, and must disable blending.
+
+==== Inheritance Info
+
+When dynamic rendering is used with secondary command buffer inheritance, the external format must: be made known to the secondary command buffers by including link:{refpage}VkExternalFormatANDROID.html[VkExternalFormatANDROID] in the `pNext` chain of link:{refpage}VkCommandBufferInheritanceInfo.html[VkCommandBufferInheritanceInfo], and the external format must match that in the render pass instance.
+
+=== Render Pass Objects
+
+For render pass objects, color resolve attachments can similarly be repurposed for external YC~B~C~R~ format resolves by setting a color resolve attachment in a subpass to an attachment with an external format.
+These can only be used with link:{refpage}VkSubpassDescription2.html[VkSubpassDescription2], and similar restrictions apply to this as they do to dynamic rendering:
+
+ * The resolve attachment must be an attachment that has a format of `VK_FORMAT_UNDEFINED` and includes a link:{refpage}VkExternalFormatANDROID.html[VkExternalFormatANDROID] structure in its `pNext` chain
+ ** This format must match that for the image view bound via the framebuffer
+ * If `nullColorAttachmentWithExternalFormatResolve` property is `VK_TRUE`, the `attachment` member of the corresponding color attachment must be `VK_ATTACHMENT_UNUSED`.
+ * If the color attachment is not `VK_ATTACHMENT_UNUSED`, it must be a single sampled attachment.
+ * `viewMask` must be 0.
+ * `colorAttachmentCount` must be 1.
+
+Color attachment values written during rendering are resolved in the same manner as specified for `VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID`.
+
+
+=== Input Attachments
+
+If the `nullColorAttachmentWithExternalFormatResolve` property is `VK_FALSE`, applications can bind the color attachment as they normally would with any other color attachment, with value reads working as expected.
+Using an external format image as an input attachment is only valid when the feature bits queried via link:{refpage}vkGetAndroidHardwareBufferPropertiesANDROID.html[vkGetAndroidHardwareBufferPropertiesANDROID] advertise this functionality.
+
+However, if the `nullColorAttachmentWithExternalFormatResolve` property is `VK_TRUE`, applications cannot do that as there is no attachment to use.
+Instead, the resolve attachment itself should be bound as the input attachment (both the attachment reference and the descriptor).
+When using a resolve attachment in this specific configuration, it can be synchronized as if it were actually the color attachment, allowing for subpass self-dependencies.
+If the implementation supports this property, an external format image can be used as an input attachment without the typically required feature bits advertised by link:{refpage}vkGetAndroidHardwareBufferPropertiesANDROID.html[vkGetAndroidHardwareBufferPropertiesANDROID].
+
+If an external format resolve image is read as an input attachment and has subsampled chroma planes, these are resampled per above to provide values at the expected rate.
+Their values are not converted via color space transforms - as with resolves the application must transform these themselves.
+
+
+=== Format Resolve Properties
+
+Not all external formats will be usable for an external format resolve; the following property structure indicates whether an external format is supported for resolves or not:
+
+[source,c]
+----    
+typedef struct VkAndroidHardwareBufferFormatResolvePropertiesANDROID {
+    VkStructureType     sType;
+    void*               pNext;
+    VkFormat            colorAttachmentFormat;
+} VkAndroidHardwareBufferFormatResolvePropertiesANDROID;
+----
+
+External formats that can be resolved to will indicate a format that color attachments should use when rendering.
+If it is not resolvable, it will be set to `VK_FORMAT_UNDEFINED`.
+
+Any Android hardware buffer that is renderable must be either renderable via existing format paths or via this extension.
+
+[NOTE]
+====
+For implementations that expose `nullColorAttachmentWithExternalFormatResolve`, the format should not be used to create images, but does still serve two additional purposes.
+
+Firstly, the numeric type of the format indicates the type that is needed in the shader (e.g. an `UNORM` format indicates a floating point color output).
+
+In addition to that, it indicates the precision of data while the color output remains in the color buffer; as such it should always have a per-channel precision equal to or greater than that of the hardware buffer format.
+Implementations that directly render to the resolve attachment and never store data in an intermediate color buffer can set this to a type large enough that it guarantees it will not interfere with the precision of the final value.
+As there is no expectation of data remaining in the color buffer, applications should expect a minimum precision according to the lowest precision of each channel between the color buffer format and the format of the Android hardware buffer.
+====
+
+
+=== Device Features
+
+The following single feature is exposes all the functionality in this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceExternalFormatResolveFeaturesANDROID {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           externalFormatResolve;
+} VkPhysicalDeviceExternalFormatResolveFeaturesANDROID;
+----
+
+`externalFormatResolve` must be supported if this extension is advertised.
+
+
+=== Device Properties
+
+The following properties are exposed:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID {
+    VkStructureType     sType;
+    void*               pNext;
+    VkBool32            nullColorAttachmentWithExternalFormatResolve;
+    VkChromaLocation    externalFormatResolveChromaOffsetX;
+    VkChromaLocation    externalFormatResolveChromaOffsetY;
+} VkPhysicalDeviceExternalFormatResolvePropertiesANDROID;
+----
+
+* If `nullColorAttachmentWithExternalFormatResolve` is `VK_TRUE`, applications must omit the color attachment by setting `VkRenderingAttachmentInfo::imageView` to `NULL` for dynamic rendering, or using `VK_ATTACHMENT_UNUSED` for the color attachment when creating a render pass object.
+* `externalFormatResolveChromaOffsetX` indicates the chroma offset in the X axis that an implementation uses when resolving to or loading from resolve attachments with an external format.
+* `externalFormatResolveChromaOffsetY` indicates the chroma offset in the Y axis that an implementation uses when resolving to or loading from resolve attachments with an external format.
+
+NOTE: The chroma offsets are consistent between reads and writes inside the Vulkan implementation, but may be inconsistent with other systems writing that data; this may lead to slight inaccuracies when reading from input attachments without writing to them first. If this accuracy is a concern, YC~B~C~R~ sampling can be used for the initial read, where the offset is configurable, rather than reading as an input attachment.
+
+
+== Examples
+
+=== Creation of a Render Pass Object
+
+[source,c]
+----
+// Create two attachments, a resolve and color attachment
+VkAttachmentDescription2 attachments[2] = {
+    {
+        VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
+        &externalFormat,
+        0,
+        VK_FORMAT_UNDEFINED,
+        1,
+        VK_LOAD_OP_LOAD,
+        VK_STORE_OP_STORE,
+        VK_LOAD_OP_LOAD,
+        VK_STORE_OP_STORE,
+        VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+        VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL
+    },
+    {
+        VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
+        NULL,
+        0,
+        resolveFormatProperties.colorAttachmentFormat,
+        1,
+        VK_LOAD_OP_LOAD,
+        VK_STORE_OP_STORE,
+        VK_LOAD_OP_LOAD,
+        VK_STORE_OP_STORE,
+        VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+        VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL
+     }
+};
+
+// Resolve attachment always specified
+VkAttachmentReference2 resolveAttachment = {
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+    NULL,
+    0,
+    VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    0};
+
+// Color attachment must be UNUSED if nullColorAttachmentWithExternalFormatResolve is VK_TRUE
+VkAttachmentReference2 colorAttachment = {
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+    NULL,
+    nullColorAttachmentWithExternalFormatResolve ? VK_ATTACHMENT_UNUSED : 1,
+    VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    0};
+
+// No changes to subpass creation
+VkSubpassDescription2 subpass = {
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
+    NULL,
+    0,
+    VK_PIPELINE_BIND_POINT_GRAPHICS,
+    0,
+    0,
+    NULL,
+    1,
+    &colorAttachment,
+    &resolveAttachment,
+    NULL,
+    0,
+    NULL};
+
+// Only add the color attachment information if nullColorAttachmentWithExternalFormatResolve is VK_FALSE
+VkRenderPassCreateInfo2 createInfo = {
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
+    NULL,
+    0,
+    nullColorAttachmentWithExternalFormatResolve ? 1 : 2,
+    &attachments,
+    1,
+    &subpass,
+    0,
+    0,
+    NULL};
+
+VkRenderPass renderPass;
+vkCreateRenderPass2(device, &createInfo, NULL, &renderPass);
+----
+
+
+=== Dynamic Rendering
+
+[source,c]
+----
+// Do not attach a color image view if nullColorAttachmentWithExternalFormatResolve is VK_TRUE
+// Other setup is identical either way
+VkRenderingAttachmentInfo colorAttachment = {
+    VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
+    NULL,
+    nullColorAttachmentWithExternalFormatResolve ? VK_NULL_HANDLE : colorImageView;
+    VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID,
+    externalResolveImageView,
+    VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    VK_LOAD_OP_LOAD,
+    VK_STORE_OP_STORE,
+    clearValue};
+
+VkRect2D renderArea = { ... };
+VkRenderingInfo renderingInfo = {
+    VK_STRUCTURE_TYPE_RENDERING_INFO,
+    NULL,
+    0,
+    renderArea,
+    1,
+    0,
+    1,
+    &colorAttachment,
+    NULL,
+    NULL};
+
+vkCmdBeginRendering(commandBuffer, renderingInfo);
+----
+
+
+== Issues
+
+
+=== GL_EXT_yuv_target had a shader extension, but this does not, why?
+
+The GLSL portion of that extension consisted of two parts:
+
+. A designation that a color output would be used as yuv
+. YUV conversion helper functions
+
+For the helper functions, no implementation can accelerate these operations in shader code; so they have been omitted in favor of high level language translation (e.g. glslang) providing these functions.
+
+The yuv output marker was necessary in GLSL because it substantially affected compilation, and this is the only way OpenGL ES had to make such information known to the compiler.
+In Vulkan however there is a pipeline object we can use instead; the pipeline contains enough information to make this information available at the API level.
+This does mean this extension will not work with VK_EXT_shader_object or any similar extension without further work.
+All of this is a deliberate choice due to time constraints.
+
+
+=== Who is responsible for conversions to and from YC~B~C~R~ color spaces?
+
+The application is responsible for these conversions; the implementation is only responsible for resampling the values between different sampling rates on the chroma planes.
+Output value expectations match those of GL_EXT_yuv_target.
+
+
+=== How do attachment clears work?
+
+Attachment clears operate as if they were writes to the color attachment, which means that as with color attachment writes, values must be in the correct color space for the external format and in the expected channel order.
+
+
+=== What is the expected channel order for YUV output?
+
+In GL_EXT_yuv_target, the expected mapping was for the Y, C~B~, and C~R~ channels to map to the R, G, and B channels of the output, respectively.
+However, Vulkan established a convention that C~B~ and C~R~ should map to B and R channels, matching their chroma designation.
+
+This extension matches the Vulkan convention, requiring the Y, C~B~, and C~R~ channels to map to the G, B, and R channels in the output, respectively.
+
+[NOTE]
+.Note
+====
+The channel order and color space of an imported external format are opaque to the Vulkan implementation.
+Therefore, all external resolve and input attachment accesses are treated as if they were color images in the ycbcr identity model, without range expansion.
+For example, images with four components are treated as R = Cr, G = Y, and B = Cb. This means that effectively:
+
+  * Input attachment reads present color components as vec4(R, G, B, A) to the shader and yuv components as (V, Y, U, A)
+  * External format resolve takes color components from the shader out variable as vec4(R, G, B, A) and yuv components as (V, Y, U, A)
+  * Clear color given to begin rendering/render pass are taken as (R, G, B, A) for color components and (V, Y, U, A) for yuv components
+
+Implementations must not expose an external formats representing a depth or stencil format.
+Applications must import depth images with link:{refpage}VkFormat.html[VkFormat] in order to render to them.
+Images without depth, color, or yuv components are beyond the scope of Vulkan interface and are defined by the format for which effective color components it should be used as, such as for the RAW10 format.
+====
+
+
+=== How is resampling performed for null attachments when `nullColorAttachmentWithExternalFormatResolve` is supported?
+
+The nearest sample is read from subsampled planes to populate the values in the fragment shader.
+
+
+=== Is there a way we could better unify the two options for the `nullColorAttachmentWithExternalFormatResolve` path?
+
+This could likely be done, but has been skipped due to time constraints.
+A future extension should be able to do a better job of unifying these paths.
+
+
+== Future Work
+
+This extension is fairly limited, as it is meant to match GL_EXT_yuv_target and do no more due to time constraints.
+Further extensions could be introduced to expand the functionality to include things like multisampling, storing both color and YC~B~C~R~ images, tighter controls on precision, and color space conversions.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_dynamic_state.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_dynamic_state.adoc
new file mode 100644
index 0000000..9d4d345
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_dynamic_state.adoc
@@ -0,0 +1,50 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_EXT_attachment_feedback_loop_dynamic_state
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes adding support for setting attachment feedback loops dynamically.
+
+## Problem Statement
+
+VK_EXT_attachment_feedback_loop_layout added functionality for handling feedback loops as a static pipeline state. Recent advances
+in the Vulkan API have moved towards having dynamic states for every corresponding static pipeline state, but there is still no dynamic
+state for attachment feedback loops.
+
+This proposal aims to provide this functionality.
+
+
+## Solution Space
+
+This functionality cannot be provided in any other way.
+
+## Proposal
+
+### API Features
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           attachmentFeedbackLoopDynamicState;
+} VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
+----
+
+`attachmentFeedbackLoopDynamicState` is the core feature enabling this extension's functionality.
+
+
+## Examples
+
+As an example, if an application creates a graphics pipeline using `VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT`,
+`vkCmdSetAttachmentFeedbackLoopEnableEXT` can then be used to dynamically enable feedback loops on a per-aspect basis.
+
+## Issues
+
+No known issues.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_layout.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_layout.adoc
new file mode 100644
index 0000000..c53ef6f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_attachment_feedback_loop_layout.adoc
@@ -0,0 +1,64 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_attachment_feedback_loop_layout
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details API design ideas for the `VK_EXT_attachment_feedback_loop_layout` extension,
+which provides functionality to both render to and sample/fetch from the same subresource of an image in a given
+render pass.
+
+== Problem Statement
+
+Some applications and API layering efforts need a way to sample from an image that is being rendered to
+at the same time. This can either be a color attachment or a depth/stencil attachment.
+
+Some applications and API layering efforts were using
+`VK_IMAGE_LAYOUT_GENERAL` for feedback loops against the specification.
+
+The cases that need to be covered are:
+
+  * One-to-one texel-to-pixel interactions.
+  * Reading/sampling from a region not currently being written
+    to the image as a color or depth/stencil attachment.
+
+Ideally, the solution would also support sampling an image using regular texture operations.
+
+== Solution Space
+
+  . Extend input attachments + `subpassLoad` to support disjoint regions: 
+
+ * Using input attachments would also require extra work to patch shaders and re-compile pipelines
+   at draw time, which would result in stutter.
+ * Would not support using samplers, which is needed by the layers.
+ * Would somehow need to support lod-bias/grad which really does not make sense for `subpassLoad`.
+
+  . Require image copies for feedback loops used in this manner
+
+ * There can be hundreds of draws with a feedback loop which results in a hundreds of copies and barriers
+   between each draw call, which does not work for performance.
+
+  . Add a new `VkImageLayout` that supports attachment feedback loops.
+
+== Proposal
+
+Add a new layout, `VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT`, that supports attachment feedback loops.
+
+It will support all of the following cases:
+
+  * One-to-one texel-to-pixel interactions.
+  * Reading/sampling from a region not currently being written
+    to the image as a color or depth/stencil attachment.
+  * Sampling or fetching from the image while it is not a
+    color or depth/stencil attachment in the current render pass.
+  * Writing to the image as a color or depth/stencil attachment while it is not
+    being sampled or fetched in the current render pass.
+
+== Issues
+
+=== RESOLVED: Is it possible to use `VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT` image layout with sparse images?
+
+Yes, there is no difference between sparse and non-sparse images.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_calibrated_timestamps.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_calibrated_timestamps.adoc
new file mode 100644
index 0000000..42d67e6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_calibrated_timestamps.adoc
@@ -0,0 +1,149 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_calibrated_timestamps
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This extension provides a way to calibrate timestamps captured from different devices in the same system and guarantees monotonicity of captured timestamps.
+
+
+== Problem Statement
+
+Vulkan has exposed timestamps since version 1.0, but does not provide a way to interpret these against wall clock time or other components in the system.
+For performance tuning and certain time-sensitive applications, getting an accurate picture of how long an operation takes and being able to calibrate these measurements against other timers is crucial.
+Two main limitations prevent this kind of measurement; lack of monotonicity, and no method of comparison.
+
+Core Vulkan 1.0 timestamps cannot be compared even across separate submits within the same run of an application, as power management events can reset the timer on many implementations.
+Comparisons within a submission are the only thing that can be relied on, and these can only really be used as a measure of relative performance compared to other workloads on the same system.
+Any solution to this problem needs to be able to guarantee a monotonic timer that only resets in the extreme circumstance that the value of the timer exceeds the size of the value that can be returned, which with 64-bit queries is, for most purposes equivalent to never happening.
+
+Once monotonicity is guaranteed, there needs to be a way to equate device timestamps to other meaningful timing systems; preferably the system timer in the host environment.
+Modern operating systems provide several ways to compare system timers to other timing systems, as well as timers at varying levels of precision.
+
+
+== Solution Space
+
+For the monotonicity guarantee, there are only really two options: either provide a monotonic clock that is undisturbed by power management events or log all power management events to the user with timestamp values stored before being reset.
+While an extension to log power management events affecting timers link:https://registry.khronos.org/OpenGL/extensions/EXT/EXT_disjoint_timer_query.txt[does exist in OpenGL ES], it only exposes whether one happened or not; to be able to generate a truly monotonic value would require more information than this.
+Additionally, a logging system would be difficult to use with timestamps consumed on the GPU; if a power management event occurs, entire frames would need to be discarded.
+To avoid this extra complication, this extension requires that timer queries are monotonic; a future extension could introduce power management event logging.
+
+As for comparing device timestamps to system time, the following options were considered:
+
+  * Add a new query type allowing the timestamp to be returned in a different domain (e.g. the host)
+  * Provide queries describing how to convert between different timer values
+  * Provide a method to capture simultaneous timestamps across different domains so they can be calibrated
+
+Returning a timestamp in a different domain via query operations is difficult as this would involve having the implementation convert the timestamps at the point they are written or copied out; which requires getting access to calibration information on the device when using vkCmdCopyQueryPoolResults, for instance.
+Queries to provide conversion information could potentially work, assuming all timers increase linearly, by providing a multiplier and offset to convert between them; however some clocks may be adjusted or otherwise drift over time, requiring implementations to update these now non-static values.
+Capturing simultaneous (or nearly simultaneous) timestamps between at least a stable host clock and the device will allow applications to calibrate timestamps at any point, which also handles adjustments or drift between clocks over time.
+
+This extension exposes a way to capture roughly simultaneous timestamps from multiple domains at once to allow them to be compared.
+
+
+== Proposal
+
+=== Monotonicity Guarantees
+
+When this extension is enabled on a device, the device timestamps returned by vkCmdWriteTimestamp must be monotonic; for any two timestamps where one happens after the other according to Vulkan synchronization guarantees, the timestamp that happens after must not return a lower timestamp value.
+The only exception to this is if the system has been running for a long enough time that the timestamp value overflows its storage, at which point it must wrap back to zero.
+For 64-bit timestamps this is practically never going to happen, but it could be observable if a 32-bit timestamp query is used. 
+
+
+=== Timestamp Domains
+
+This extension provides four domains to the application; while the device domain is always available, the availability of other domains will depend on the system and the implementation, so can be queried:
+
+[source,c]
+----
+VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pTimeDomainCount,
+    VkTimeDomainEXT*                            pTimeDomains);
+
+typedef enum VkTimeDomainEXT {
+    VK_TIME_DOMAIN_DEVICE_EXT = 0,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
+    VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
+} VkTimeDomainEXT;
+----
+
+On Posix-compatible systems, `VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT` corresponds to https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html[`CLOCK_MONOTONIC`].
+Similarly, on Linux and Linux-derived systems that support it, `VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT` corresponds to https://www.man7.org/linux/man-pages/man3/clock_gettime.3.html[`CLOCK_MONOTONIC_RAW`].
+
+For Windows systems, `VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT` corresponds to the time domain used by https://learn.microsoft.com/en-us/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter[QueryPerformanceCounter].
+
+Finally, the `VK_TIME_DOMAIN_DEVICE_EXT` is the time domain used by the device for all link:{refpage}vkCmdWriteTimestamp.html[vkCmdWriteTimestamp] commands on any queue that supports timestamps.
+
+Implementations must always expose the device domain and at least one other domain when this extension is supported.
+
+
+=== Timestamp Calibration
+
+The following command allows applications to retrieve comparable timestamps across different domains:
+
+[source,c]
+----
+VkResult vkGetCalibratedTimestampsEXT(
+    VkDevice                                    device,
+    uint32_t                                    timestampCount,
+    const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
+    uint64_t*                                   pTimestamps,
+    uint64_t*                                   pMaxDeviation);
+
+typedef struct VkCalibratedTimestampInfoEXT {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkTimeDomainEXT                             timeDomain;
+} VkCalibratedTimestampInfoEXT;
+----
+
+The value returned in each element of `pTimestamps` will be a raw timestamp value in the time domain specified by the corresponding element of `pTimestampInfos`.
+The returned values will be queried in their time domains as closely as possible in time, with the maximum positive deviation between the timestamps returned as a single value in `pMaxDeviation`.
+
+
+== Issues
+
+=== Should other time domain combinations be supported?
+
+As the supported set of timestamp domains is queryable, additional domains can be added over time if needed.
+
+
+=== How can an application extrapolate future device timestamp values from the calibrated timestamp value?
+
+`VkPhysicalDeviceLimits::timestampPeriod` makes it possible to calculate future device timestamps as follows:
+
+[source,c]
+----
+futureTimestamp = calibratedTimestamp + deltaNanoseconds / timestampPeriod
+----
+
+
+=== Can the host and device timestamp values drift apart over longer periods of time?
+
+Yes, especially as some time domains by definition allow for that to happen (e.g. CLOCK_MONOTONIC is subject to NTP adjustments).
+Thus it is recommended that applications re-calibrate from time to time.
+
+
+=== Should there be a query for reporting the maximum deviation of the timestamp values returned by calibrated timestamp queries?
+
+A global query seems inappropriate and difficult to enforce.
+However, it is possible to return the maximum deviation any single calibrated timestamp query can have by sampling one of the time domains twice as follows:
+
+[source,c]
+----
+timestampX = timestampX_before = SampleTimeDomain(X)
+for each time domain Y != X
+    timestampY = SampleTimeDomain(Y)
+timestampX_after = SampleTimeDomain(X)
+maxDeviation = timestampX_after - timestampX_before
+----
+
+
+=== Can the maximum deviation reported ever be zero?
+
+Unless the tick of each clock corresponding to the set of time domains coincides and all clocks can literally be sampled simultaneously, there is not really a possibility for the maximum deviation to be zero, so by convention the maximum deviation is always at least the maximum of the length of the ticks of the set of time domains calibrated and thus can never be zero.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_depth_bias_control.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_depth_bias_control.adoc
new file mode 100644
index 0000000..932e0bc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_depth_bias_control.adoc
@@ -0,0 +1,104 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Proposal Template
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details API design ideas for the `VK_EXT_depth_bias_control` extension,
+which provides functionality for finer control over the behaviour and representation
+of depth bias when rendering.
+
+== Problem Statement
+
+Some applications and API layering efforts, e.g., D3D9, need a way for depth bias to be represented in exact
+terms as if it were `depth = depth + depth_bias` in the shader, rather than being format-dependent.
+
+In some older APIs, applications can specify extreme depth bias values, such as
+`0.5f`, as a direct offset to be applied. Translation layers can attempt to
+simulate this behavior by multiplying the application-provided direct bias by
+`1/r` and passing the result as `depthBiasConstantFactor`. However, the current
+specification does not set a fixed value for `r` in fixed-point attachments, and
+its value can also vary per-primitive when using floating-point attachments.
+This leads to incorrect depth bias values being applied, and the error is larger
+the larger the fixed depth bias is.
+
+API layering efforts regularly need to emulate certain depth formats such as `VK_FORMAT_D24_UNORM_S8_UINT` using higher-precision formats
+such as `VK_FORMAT_D32_SFLOAT_S8_UINT`. This creates an additional problem as the minimum resolvable difference for `SFLOAT` formats is defined differently compared to `UNORM` formats.
+
+This means we need a way to prevent implementations from applying a 2x scaling
+factor to the value of `r` when using fixed-point attachments, and a way of
+treating the depth bias' minimum resolvable difference in linear terms (like
+`UNORM` formats) for `SFLOAT` formats.
+
+== Solution Space
+
+  . Solve from the application side by hardcoding `r * n` values for each driver
+
+ * This is problematic because it means an application must be aware of and hardcode implementation-specific
+   to work around the problem.
+
+  . Solve from the application side with `r * n` resolution
+
+ * The application could attempt to resolve the scaled `r * n` values by drawing a quad with a known depth bias value and reading back the depth. This is problematic because it does not solve the issue regarding the minimum resolvable difference being scaled differently for `SFLOAT` formats. 
+
+  . Solve from the application side with shader-side biasing using `gl_FragDepth`
+
+ * Another option from the application side is to use a push constant and perform depth-bias manually in the shader. This is problematic as it can lead to reduced performance as this avoids early-z optimizations.
+
+  . Add a method of specifying the depth bias representation
+
+ * A Vulkan extension could be made to provide functionality to specify the representation and scaling of depth bias that is wanted.
+
+== Proposal
+
+Add a new function, `vkCmdSetDepthBias2EXT` that uses an extendable `VkDepthBiasInfoEXT`.
+
+Add a new structure, `VkDepthBiasRepresentationInfoEXT`, that can be added to the `pNext` chain of a pipeline's `VkPipelineRasterizationStateCreateInfo` state or `VkDepthBiasInfoEXT` in a `vkCmdSetDepthBias2EXT` call that allows setting the scaling and representation of depth bias for a pipeline.
+
+It will support specifying if the representation should be format-dependent, the behaviour of `UNORM` formats, and whether or not the depth bias should be scaled to ensure a minimum resolvable difference.
+
+```c
+struct VkDepthBiasInfoEXT {
+    VkStructureType    sType; // VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT
+    const void*        pNext;
+    // Same as the params to vkCmdSetDepthBias.
+    float              depthBiasConstantFactor;
+    float              depthBiasClamp;
+    float              depthBiasSlopeFactor;
+};
+```
+
+```c
+void vkCmdSetDepthBias2EXT(
+          VkCommandBuffer                       commandBuffer,
+    const VkDepthBiasInfoEXT*                   pInfo);
+```
+
+```c
+enum VkDepthBiasRepresentationEXT {
+    // The default behaviour of Vulkan.
+    // Depth bias as a factor of `r`, format-dependent.
+    VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT = 0,
+    // Depth bias as a factor of constant `r` UNORM behaviour.
+    VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT = 1,
+    // Depth bias as a raw floating-point value, same effect as doing `gl_FragDepth = gl_FragCoord.z + d`.
+    VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT = 2,
+};
+```
+
+```c
+// Part of the pNext chain of a VkPipelineRasterizationStateCreateInfo.
+struct VkDepthBiasRepresentationInfoEXT {
+    VkStructureType                 sType;                   // VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT
+    const void*                     pNext;
+    VkDepthBiasRepresentationEXT    depthBiasRepresentation; // The depth bias representation for the pipeline
+    VkBool32                        depthBiasExact;          // Whether or not the depth bias should be scaled to ensure a minimum resolvable difference
+};
+```
+
+== Issues
+
+None.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_descriptor_buffer.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_descriptor_buffer.adoc
new file mode 100644
index 0000000..dc5d287
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_descriptor_buffer.adoc
@@ -0,0 +1,1118 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_descriptor_buffer
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to make the management of descriptor memory more explicit, allowing descriptors to be present in buffer memory, allowing the data and memory to be managed alongside other buffer objects.
+
+== Problem Statement
+
+With more “bindless” models of descriptor management, applications are ever increasing the number of descriptors that end up in descriptor sets.
+Managing allocations this large, and ensuring they end up in device local memory for fast access, is becoming an increasingly awkward problem to manage in the driver.
+Developers moving to Vulkan are starting to hit bottlenecks that they simply don’t encounter on other platforms.
+
+In other scenarios, making sure descriptors *do not* end up in device memory is important.
+Copying descriptors in Vulkan is considered rather esoteric, but it is a fairly common strategy in other APIs and implementing a similar style in Vulkan can lead to problems.
+There is no hint to let an implementation know that a descriptor set will only be used for purposes of copying (i.e. staging buffer).
+If a descriptor set is mapped to device local memory (BAR) or uncached memory, reading from the descriptor set on the host can have a catastrophic effect on performance.
+On top of this, some applications rely on being able to copy several tens of thousand individual descriptors every frame.
+The overhead to set up this many calls to `vkUpdateDescriptorSets` is not ideal.
+
+In contrast to this, developers are managing uploads for other large resources (e.g. images, buffers) in application code and generally doing a good job of it – typically this is not identified as a problem area.
+Developers approaching Vulkan are often confused by the way in which descriptor pools work - and several have made requests to manage things more explicitly.
+The key things that we’ve had requests for are (relevant Vulkan issues in brackets):
+
+  * Explicit allocation management
+  * Better mapping to DirectX 12
+  * Host-only descriptor pools
+  * GPU descriptor updates
+
+== Solution Space
+
+There are several more-or-less invasive options that could work here:
+
+  . Add relevant flags and other information to descriptor pools
+  . Like 1, but enable memory binding for descriptor pools
+  . Bypass descriptor pools, and allow direct creation and memory binding for descriptor sets
+  . Bypass descriptor sets, and use descriptor set layouts in buffers
+  . Bypass descriptor set layouts, and use blobs of memory in buffers that shaders access with explicit layouts
+
+link:{refpage}VK_VALVE_mutable_descriptor_type.html[VK_VALVE_mutable_descriptor_type] includes support for option 1,
+through the use of `VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE` and `VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE`.
+However, this does not fully solve the problem of memory management since we can only *avoid* allocating device memory for descriptors.
+Being able to control where shader-accessible descriptors are allocated is still unavailable to applications.
+
+Option 2 attempts to redefine what a descriptor pool is, and it would seem like a very awkward abstraction.
+The whole point of the descriptor pool is to allocate and manage memory on the behalf of the application.
+
+Option 3 and 4 are similarly invasive, but move descriptor pools out of the way, making things a lot clearer.
+The major downside to this is that it potentially blocks out older implementations; however this is likely the same set of implementations that wouldn’t see a benefit from this proposal anyway (i.e. “non-bindless" hardware).
+
+Option 4 has the advantage of having a smaller surface area than option 3 and allows applications to use existing buffer management functions in both Vulkan and in their own code.
+Being able to use buffers directly means that applications are in control of where the memory is allocated and can control if memory is:
+
+ * Host-only (plain malloc)
+ * Host-only but shader-visible (`VkDeviceMemory` with `HOST_VISIBLE_BIT`)
+ * Device local and shader-visible (resizable BAR on discrete GPUs, unified memory on integrated)
+ * Device local only (GPU copies descriptors)
+
+Option 5 is more invasive than Option 4 and requires shader-side changes.
+
+In order to keep the required changes in this extension to the API only, the extra steps in Option 5 are deferred to a future planned extension, and this proposal focuses on Option 4.
+
+
+== Proposal
+
+=== Modelling a descriptor set as memory
+
+Descriptors in Vulkan as it stands are generally considered quite abstract.
+They do not have a size, and when creating descriptor pools it is only specified how many descriptors can be allocated.
+
+This abstraction is removed by the proposal and it assumes that a `VkDescriptorSetLayout` can be expressed as a list of binding points with a known:
+
+ * Byte offset
+ * Element size
+ * Number of elements tightly packed
+
+The element size depends on the descriptor type and is a property of the physical device.
+
+Implementations are free to control the byte offset, and so can freely repack descriptors for optimal memory access.
+For exact control over byte offsets for different descriptors, descriptor indexing should be used, since arrays have guaranteed packing.
+
+If we think in terms of `VkDescriptorPool` with this model, an implementation of that could be something like an arena allocator where size is derived from the descriptor counts,
+and a `VkDescriptorSet` with `VkDescriptorSetLayout` just allocates a certain number of bytes from the pool.
+This is essentially the same model as `VkBuffer` and `VkImage` allocation.
+
+When we call `vkCmdBindDescriptorSets`, what we are really doing is binding a buffer of a certain size.
+The shader compiler looks at `VkPipelineLayout` and based on the `DescriptorSet` and `Binding` decorations, it can look up that a descriptor can be read from the bound descriptor set at a specific offset.
+
+As link:{refpage}VK_EXT_descriptor_indexing.html[VK_EXT_descriptor_indexing] is required, its descriptor limits apply.
+
+==== Next level update-after-bind
+
+With descriptor being modelled as buffer memory, we remove all pretense of the implementation being able to consume descriptors when recording the command buffer.
+In the Vulkan 1.0 descriptor model, descriptors must be valid when descriptor sets are bound and remain valid, which means implementations are free to consume the descriptors, repack them, and so on if they desire.
+With descriptor indexing, the `UPDATE_AFTER_BIND_BIT` and `PARTIALLY_BOUND_BIT` flags imply a buffer like model where descriptors must not be consumed unless dynamically used by shaders.
+With descriptor buffers, this model is implied and it is not allowed to specify a descriptor set layout being both update-after-bind and descriptor buffer capable.
+
+As descriptors can be updated in the GPU timeline, descriptor buffers go a bit further than update-after-bind.
+In the existing update-after-bind model, descriptors can only be consumed correctly if they were written before queue submits.
+
+==== Dropping support for abstract descriptor types
+
+Some descriptor types are a bit more abstract in nature. Dynamic uniform buffers and dynamic storage buffers for example have a component to them that does not consume descriptor memory, but function more like push constants.
+Descriptor types which cannot be expressed in terms of descriptors in memory are not supported with descriptor buffers,
+but rapidly changing descriptors can be replaced with existing alternatives such as:
+
+ * Push constants
+ * Place buffer device address in push constants
+ * Push descriptors
+
+Update-after-bind has similar restrictions already.
+
+==== One buffer, many offsets
+
+While binding descriptor sets as memory is possible on a wide range of hardware, descriptors are still considered "special" memory by many implementations, and it may not be possible to bind many different buffers at the same time.
+Some possible restrictions can be:
+
+ * Limited address space for descriptors
+ * Descriptor sets are accessed with offset from one or more base pointers
+
+In Vulkan, applications are guaranteed at least 4 descriptor sets, but many implementations go beyond this.
+At the same time, it might not be possible to bind that many different descriptor buffers.
+
+In D3D12 for example, this problem manifests itself as `ID3D12GraphicsCommandList::SetDescriptorHeaps()`.
+
+Similarly, this extension will work on a model where applications allocate large descriptor buffers, and bind those buffers to the command buffer.
+From there, descriptor sets are expressed as offsets into the bound buffers.
+
+It is expected that changing a descriptor buffer binding is a fairly heavy operation on some implementations and should be avoided.
+Changing offsets however, is very efficient.
+
+A limited address space can be expressed with special memory types that allocate from a dedicated address space region.
+
+==== No mixing and matching descriptor buffers and older model
+
+The implication of descriptor buffers is that applications will now take more control over which descriptor buffers are bound to a command buffer.
+Without descriptor buffers, this is something implementations were able to hide from applications, so it is not possible to mix and match these models in one draw or dispatch.
+It is possible to mix and match the two models in different draw or dispatches, but it is equivalent to changing the descriptor buffer bindings and should be avoided if possible.
+
+In terms of state invalidation, whenever a descriptor buffer offset is bound, it invalidates all bindings for descriptor sets and vice versa.
+
+=== Putting Descriptors in Memory
+
+This extension introduces new commands to put shader-accessible descriptors directly in memory.
+Properties of descriptor set layouts may vary based on enabled device features, so new device-level functions are added to query the properties of layouts.
+These calls are invariant across the lifetime of the device, and between link:{refpage}VkDevice.html[VkDevice] objects created from the same physical device(s), with the same creation parameters.
+
+[source,c]
+----
+void vkGetDescriptorSetLayoutSizeEXT(
+    VkDevice                                    device,
+    VkDescriptorSetLayout                       layout,
+    VkDeviceSize*                               pLayoutSizeInBytes);
+
+void vkGetDescriptorSetLayoutBindingOffsetEXT(
+    VkDevice                                    device,
+    VkDescriptorSetLayout                       layout,
+    uint32_t                                    binding,
+    VkDeviceSize*                               pOffset);
+----
+
+Applications are responsible for writing data into memory, but the application does not control the memory location directly – descriptor set layouts dictate where each descriptor lives, so that the shader interface continues to work as-is with set and binding numbers.
+
+The size and offset of descriptors is exposed to applications, so they know how to copy it into memory.
+This is important since applications are free to copy descriptors on the device itself.
+
+The sizes for different descriptor types are defined in the properties: `samplerDescriptorSize`, `combinedImageSamplerDescriptorSize`, `sampledImageDescriptorSize`, `storageImageDescriptorSize`, `uniformTexelBufferDescriptorSize`, `robustUniformTexelBufferDescriptorSize`, `storageTexelBufferDescriptorSize`, `robustStorageTexelBufferDescriptorSize`, `uniformBufferDescriptorSize`, `robustUniformBufferDescriptorSize`, `storageBufferDescriptorSize`, `robustStorageBufferDescriptorSize`, `inputAttachmentDescriptorSize`, `accelerationStructureDescriptorSize`, `combinedImageSamplerDensityMapDescriptorSize`.
+
+Descriptor arrays have guaranteed packing, such that each element of an array for a given binding has an offset from that binding’s base offset equal to the size of the descriptor multiplied by the array offset.
+Bindings can be moved around as the driver sees fit, but variable-sized descriptor arrays must be packed at the end.
+
+For use cases where layouts contain a variable-sized descriptor count, the size returned reflects the upper bound described in the descriptor set layout.
+The size required for a descriptor set layout with a variable size descriptor array can be obtained by adding the product of the number of descriptors that are actually used and the size of the descriptor.
+
+Descriptor set layouts used for this purpose must be created with a new create flag:
+
+[source,c]
+----
+VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010
+----
+
+Layouts created with this flag must not be used to create a link:{refpage}VkDescriptorSet.html[VkDescriptorSet] and must not include dynamic uniform buffers or dynamic storage buffers.
+Applications can achieve the same dynamic offsetting by either updating a descriptor buffer, using push constants, or by using push descriptors.
+The blob of memory corresponding to a descriptor is obtained from resource views directly.
+How applications get that data into device memory is entirely up to them, but the offset must match that obtained from the layout.
+
+[source,c]
+----
+typedef struct VkDescriptorAddressInfoEXT {
+    VkStructureType                                 sType;
+    const void*                                     pNext;
+    VkDeviceAddress                                 address;
+    VkDeviceSize                                    range;
+    VkFormat                                        format;
+} VkDescriptorAddressInfoEXT;
+
+typedef union VkDescriptorDataEXT {
+    const VkSampler*                                pSampler;
+    const VkDescriptorImageInfo*                    pCombinedImageSampler;
+    const VkDescriptorImageInfo*                    pInputAttachmentImage;
+    const VkDescriptorImageInfo*                    pSampledImage;
+    const VkDescriptorImageInfo*                    pStorageImage;
+    const VkDescriptorAddressInfoEXT*               pUniformTexelBuffer;
+    const VkDescriptorAddressInfoEXT*               pStorageTexelBuffer;
+    const VkDescriptorAddressInfoEXT*               pUniformBuffer;
+    const VkDescriptorAddressInfoEXT*               pStorageBuffer;
+    VkDeviceAddress                                 accelerationStructure;
+} VkDescriptorDataEXT;
+
+typedef struct VkDescriptorGetInfoEXT {
+    VkStructureType                                 sType;
+    const void*                                     pNext;
+    VkDescriptorType                                type;
+    VkDescriptorDataEXT                             data;
+} VkDescriptorGetInfoEXT;
+
+void vkGetDescriptorEXT(
+    VkDevice                                        device
+    const VkDescriptorGetInfoEXT*                   pCreateInfo,
+    size_t                                          dataSize,
+    void*                                           pDescriptor);
+----
+
+These APIs extract raw descriptor blob data from objects. The data obtained from these calls can be freely copied around.
+Note that these calls do not know anything about descriptor set layouts. It is the application's responsibility to write descriptors to a suitable location.
+
+A notable change here is that there is no longer any need for link:{refpage}VkBufferView.html[VkBufferView] objects.
+Texel buffers are built from buffer device addresses and format instead.
+This improvement is motivated by DX12 portability.
+In some use cases, texel buffers are linearly allocated and having to create and manage a large number of unique view objects is problematic.
+With descriptor buffers, this style of API is now feasible in Vulkan.
+
+A similar improvement is that uniform buffers and storage buffer also take buffer device addresses.
+
+Acceleration structure descriptors are also built from device addresses, or handles retrieved from `vkGetAccelerationStructureHandleNV` when using `VkAccelerationStructureNV` objects.
+
+Inline uniform buffers do not have a descriptor data getter API associated with them.
+Instead, the descriptor data is copied directly into the buffer offset obtained by `vkGetDescriptorSetLayoutBindingOffsetEXT`.
+As the name suggests, inline uniform buffers are embedded into the descriptor set itself.
+
+As descriptors are now in regular memory, drivers cannot hide copies of immutable samplers that end up in descriptor sets from the application.
+As such, applications are required to provide these samplers as if they were not provided immutably.
+These samplers must have identical parameters to the immutable samplers in the descriptor set layout.
+Alternatively, applications can use dedicated descriptor sets for immutable samplers that do not require app-managed memory, by <<Embedded Immutable Samplers,embedding them in a special descriptor set>>.
+
+If the `descriptorBufferImageLayoutIgnored` feature is enabled, the `imageLayout` in link:{refpage}VkDescriptorImageInfo.html[VkDescriptorImageInfo] is ignored, otherwise it specifies the layout that the descriptor will be used with.
+`type` must not be `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC` or `VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC`.
+'format' in `VkDescriptorAddressInfoEXT` is ignored for non-texel buffers.
+
+The `combinedImageSamplerDescriptorSingleArray` property indicates that the implementation does not require an array of `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors to be written into a descriptor buffer as an array of image descriptors, immediately followed by an array of sampler descriptors. If `VK_FALSE`, applications are expected to write the first `sampledImageDescriptorSize` bytes of the data returned through `pDescriptor` to the first array, and the remaining `samplerDescriptorSize` bytes of the data to the second array.
+On these implementations, variable descriptor counts of combined image samplers may be supported, but it is not useful as the descriptor set size must assume the upper bound.
+
+
+==== Embedded Immutable Samplers
+
+Immutable samplers can be embedded into descriptor layouts, allowing them to be bound without disturbing descriptor buffer bindings or requiring device memory backing.
+Descriptor set layouts must be created with a new flag for this purpose: 
+
+[source,c]
+----
+VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020
+----
+
+When this flag is used, this set layout can only contain descriptor bindings with a `descriptorType` of `VK_DESCRIPTOR_TYPE_SAMPLER`, a `descriptorCount` of `1` (i.e. not arrayed), and a valid `VkSampler used in `pImmutableSamplers`.
+Note that arrays of immutable samplers are not supported, as implementations typically need these in memory to allow dynamic indexing - whereas no device memory is directly associated with these sets.
+
+
+=== Pipeline creation
+
+To use pipelines with descriptor buffers a new `VkPipelineCreateFlag` must be used:
+
+[source,c]
+----
+VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000
+----
+
+=== Descriptor Binding
+
+Descriptor buffers are bound to the command buffer directly (similar to vertex buffers).
+
+[source,c]
+----
+
+typedef struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkBuffer                                    buffer;
+} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT;
+
+typedef struct VkDescriptorBufferBindingInfoEXT {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkDeviceAddress                             address;
+    VkBufferUsageFlags                          usage;
+} VkDescriptorBufferBindingInfoEXT;
+
+vkCmdBindDescriptorBuffersEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    bufferCount,
+    const VkDescriptorBufferBindingInfoEXT*     pBindingInfos);
+----
+
+Unlike binding descriptor sets, there’s no invalidating going on with this binding – a buffer remains bound and is interpreted by a pipeline in the manner the pipeline expects, irrespective of what layout was used to construct the buffer for each set.
+
+There must be no more than `maxSamplerDescriptorBufferBindings` descriptor buffers containing sampler descriptor data bound.
+Such buffers must be created with `VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT`.
+
+There must be no more than `maxResourceDescriptorBufferBindings` descriptor buffers containing resource descriptors bound.
+Such buffers must be bound with `VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT`.
+
+If a buffer contains both usage flags, it counts once against both limits.
+
+If the `bufferlessPushDescriptors` property is `VK_FALSE` and a buffer contains the `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT` usage flag, a `VkDescriptorBufferBindingPushDescriptorBufferHandleEXT` structure must be added to the `pNext` chain of `VkDescriptorBufferBindingInfoEXT`.
+
+`bufferCount` must be less than or equal to `maxDescriptorBufferBindings`.
+
+Any previously bound buffers at binding points greater than or equal to `bufferCount` are unbound.
+
+Each entry in `pBindingInfos` contains the device address of a descriptor buffer and the usage flags that the buffer was created with.
+
+Changing buffers may be an expensive operation and should be done infrequently (if ever).
+
+The maximum available range of each binding to a shader is `maxSamplerDescriptorBufferRange` and/or `maxResourceDescriptorBufferRange`.
+
+The `samplerDescriptorBufferAddressSpaceSize`, `resourceDescriptorBufferAddressSpaceSize`, and `descriptorBufferAddressSpaceSize` properties
+give the upper bound for the total amount of address space used for descriptor buffers.
+
+Buffers used for this purpose need to be created with a new usage flags:
+
+[source,c]
+----
+VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT  = 0x00200000
+VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000
+----
+
+`VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT` specifies that the buffer will be used to contain sampler descriptors when bound as a descriptor buffer.
+`VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT` specifies that the buffer will be used to contain resource descriptors, i.e. non-sampler descriptors, when bound as a descriptor buffer.
+Buffers containing `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors must have been created with both `VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT` and `VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT`.
+
+Each descriptor set is associated with a buffer and an offset into that buffer which can be set by:
+
+[source,c]
+----
+vkCmdSetDescriptorBufferOffsetsEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    firstSet,
+    uint32_t                                    setCount,
+    const uint32_t*                             pBufferIndices,
+    const VkDeviceSize*                         pOffsets);
+----
+
+`vkCmdSetDescriptorBufferOffsetsEXT` causes the sets numbered [firstSet.. firstSet+setCount-1] to use the bindings stored in the buffer bound at pBufferIndices[i] at an offset of pOffsets[i] for subsequent bound pipeline commands set by pipelineBindPoint. Any bindings that were previously applied via these sets, or calls to `vkCmdBindDescriptorSets`, are no longer valid. Calling vkCmdBindDescriptorSets invalidates bindings previously applied via `vkCmdSetDescriptorBufferOffsetsEXT`.
+
+Setting offsets should be a cheap operation and can be performed frequently.
+The offsets must be aligned to `descriptorBufferOffsetAlignment`.
+
+<<Embedded Immutable Samplers,Embedded immutable samplers>> can be bound using:
+
+[source,c]
+-----
+vkCmdBindDescriptorBufferEmbeddedSamplersEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    set)
+);
+-----
+
+`vkCmdBindDescriptorBufferEmbeddedSamplersEXT` binds the embedded immutable samplers in `layout` at set index `set` to the same set in the command buffer.
+Set bindings are invalidated in the same manner as they are for `vkCmdSetDescriptorBufferOffsetEXT`.
+The `VkDescriptorSetLayout` at index `set` of `layout` must have been created with the `VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT` bit.
+There must be no more than `maxEmbeddedImmutableSamplerBindings` embedded immutable sampler sets bound.
+Like DX12, there is a limit to how many unique embedded immutable samplers may be alive in a device at any one point. This limit is designed to match DX12.
+
+
+=== Descriptor Updates
+
+As descriptors are just a blob of memory, descriptor updates can be performed by any operation on either the host or device that can access memory, enabling a form of GPU descriptor update.
+Descriptor buffer reads can be synchronized using a new access bit in the relevant shader stage:
+
+[source,c]
+----
+VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT = 0x20000000000ULL
+----
+
+Note that host writes are implicitly made visible to all stages in `vkQueueSubmit`, so this access flag is only relevant when performing GPU-side updates of descriptors.
+
+If the `allowSamplerImageViewPostSubmitCreation` property is `VK_FALSE` there are special requirements for when descriptor data for `VkSampler` or `VkImageView` objects can be used.
+Those objects must have been created before any `vkQueueSubmit` (or `vkQueueSubmit2`) call that executes a command buffer which accesses descriptor data for them.
+
+For example, if `allowSamplerImageViewPostSubmitCreation` is `VK_FALSE`, this is disallowed:
+
+* Call `vkQueueSubmit()` which is waiting for a timeline semaphore
+* Create a `VkImageView`
+* Update the descriptor buffer used by the previous submission from the host using the descriptor data of the new `VkImageView`
+* Signal the semaphore from the host
+
+=== Push descriptors
+
+Support for descriptor buffers combined with push descriptors is supported if the `descriptorBufferPushDescriptors` feature bit is set.
+
+To support push descriptors on certain implementations, additional buffer usage flags are added:
+
+[source,c]
+----
+VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000
+----
+
+If the application desires to use push descriptors and descriptor buffers together,
+a descriptor set layout must be declared with `VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR` and `VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT` bits set.
+
+If the `bufferlessPushDescriptors` property is `VK_FALSE`, there are special requirements for using push descriptors with descriptor buffers.
+`VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` is a special buffer flag which is required for certain implementations in order for push descriptors to interoperate with descriptor buffers.
+When pushing descriptors using this kind of set layout, it is required that a descriptor buffer is bound to the command list with the `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` usage flag.
+The intention here is that implementation can reserve scratch space in descriptor buffers for the purposes of dealing with push descriptors.
+The mechanics here are highly magical and implementation defined in nature and is considered too burdensome to expect that applications deal with it.
+
+Binding a buffer that was created with `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` requires the application to record any current push descriptors again.
+
+=== Capture/Replay
+
+When creating a resource with the capture/replay feature enabled, an opaque handle can be obtained which can be passed into creation calls in a future replay, causing descriptors to be created with the same data.
+
+New flags to be supplied when creating buffers, images, and samplers to be captured/replayed:
+
+[source,c]
+----
+VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT                 = 0x00000020
+VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT                  = 0x00010000
+VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT             = 0x00000004
+VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT                = 0x00000008
+VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008
+----
+
+There are separate commands to get opaque data for buffers, images, and samplers:
+
+[source,c]
+----
+VkResult vkGetBufferOpaqueCaptureDescriptorDataEXT(
+    VkDevice                                    device,
+    const VkBufferCaptureDescriptorDataInfoEXT* pInfo,
+    void*                                       pData);
+
+typedef struct VkBufferCaptureDescriptorDataInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferCaptureDescriptorDataInfoEXT;
+
+VkResult vkGetImageOpaqueCaptureDescriptorDataEXT(
+    VkDevice                                   device,
+    const VkImageCaptureDescriptorDataInfoEXT* pInfo, 
+    void*                                      pData);
+
+typedef struct VkImageCaptureDescriptorDataInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageCaptureDescriptorDataInfoEXT;
+
+VkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT(
+    VkDevice                                       device,
+    const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, 
+    void*                                          pData);
+
+typedef struct VkImageViewCaptureDescriptorDataInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImageView        imageView;
+} VkImageViewCaptureDescriptorDataInfoEXT;
+
+VkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT(
+    VkDevice                                     device,
+    const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, 
+    void*                                        pData);
+
+typedef struct VkSamplerCaptureDescriptorDataInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSampler          sampler;
+} VkSamplerCaptureDescriptorDataInfoEXT;
+
+VkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
+    VkDevice                                                   device,
+    const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, 
+    void*                                                      pData);
+
+typedef struct VkAccelerationStructureCaptureDescriptorDataInfoEXT {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkAccelerationStructureKHR       accelerationStructure;
+    VkAccelerationStructureNV        accelerationStructureNV;
+} VkAccelerationStructureCaptureDescriptorDataInfoEXT;
+----
+
+Once queried, this must be provided to buffer/image/imageview/sampler/acceleration structure creation in a similar manner to buffer device address creation, by chaining the following structure to buffer, image, imageview, sampler, or acceleration structure creation:
+
+[source,c]
+----
+typedef struct VkOpaqueCaptureDescriptorDataCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    const void*        opaqueCaptureDescriptorData;
+} VkOpaqueCaptureDescriptorDataCreateInfoEXT;
+----
+
+In each case, the size of the capture data is sized to the `bufferCaptureReplayDescriptorDataSize`, `imageCaptureReplayDescriptorDataSize`, `imageViewCaptureReplayDescriptorDataSize`, `samplerCaptureReplayDescriptorDataSize`, or `accelerationStructureCaptureReplayDescriptorDataSize` limits as appropriate.
+
+In addition, link:{refpage}vkGetDeviceMemoryOpaqueCaptureAddress.html[vkGetDeviceMemoryOpaqueCaptureAddress] must be used to capture the opaque address and replay it with link:{refpage}VkMemoryOpaqueCaptureAddressAllocateInfo.html[VkMemoryOpaqueCaptureAddressAllocateInfo], for any memory used by resources with these handles.
+
+
+=== Device Features
+
+The following features are exposed:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceDescriptorBufferFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           descriptorBuffer;
+    VkBool32           descriptorBufferCaptureReplay; 
+    VkBool32           descriptorBufferImageLayoutIgnored;
+    VkBool32           descriptorBufferPushDescriptors;
+} VkPhysicalDeviceDescriptorBufferFeaturesEXT;
+----
+
+If the `descriptorBuffer` feature is enabled, link:{refpage}VK_AMD_shader_fragment_mask.html[VK_AMD_shader_fragment_mask] must not be enabled.
+If the `descriptorBufferImageLayoutIgnored` feature is enabled, the image layout provided when getting a descriptor is ignored.
+The `descriptorBufferCaptureReplay` feature is primarily for capture replay tools, and allows opaque data to be captured and replayed, allowing the same descriptor handles to be used on replay. 
+If the `descriptorBufferPushDescriptors` features is enabled push descriptors can be used with descriptor buffers.
+
+
+=== Device Properties
+
+The following properties are exposed:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           combinedImageSamplerDescriptorSingleArray;
+    VkBool32           bufferlessPushDescriptors;
+    VkBool32           allowSamplerImageViewPostSubmitCreation;
+    VkDeviceSize       descriptorBufferOffsetAlignment;
+    uint32_t           maxDescriptorBufferBindings;
+    uint32_t           maxResourceDescriptorBufferBindings;
+    uint32_t           maxSamplerDescriptorBufferBindings;
+    uint32_t           maxEmbeddedImmutableSamplerBindings;
+    uint32_t           maxEmbeddedImmutableSamplers;
+    size_t             bufferCaptureReplayDescriptorDataSize;
+    size_t             imageCaptureReplayDescriptorDataSize;
+    size_t             imageViewCaptureReplayDescriptorDataSize;
+    size_t             samplerCaptureReplayDescriptorDataSize;
+    size_t             accelerationStructureCaptureReplayDescriptorDataSize;
+    size_t             samplerDescriptorSize;
+    size_t             combinedImageSamplerDescriptorSize;
+    size_t             sampledImageDescriptorSize;
+    size_t             storageImageDescriptorSize;
+    size_t             uniformTexelBufferDescriptorSize;
+    size_t             robustUniformTexelBufferDescriptorSize;
+    size_t             storageTexelBufferDescriptorSize;
+    size_t             robustStorageTexelBufferDescriptorSize;
+    size_t             uniformBufferDescriptorSize;
+    size_t             robustUniformBufferDescriptorSize;
+    size_t             storageBufferDescriptorSize;
+    size_t             robustStorageBufferDescriptorSize;
+    size_t             inputAttachmentDescriptorSize;
+    size_t             accelerationStructureDescriptorSize;
+    VkDeviceSize       maxSamplerDescriptorBufferRange;
+    VkDeviceSize       maxResourceDescriptorBufferRange;
+    VkDeviceSize       samplerDescriptorBufferAddressSpaceSize;
+    VkDeviceSize       resourceDescriptorBufferAddressSpaceSize;
+    VkDeviceSize       descriptorBufferAddressSpaceSize;
+} VkPhysicalDeviceDescriptorBufferPropertiesEXT;
+----
+
+* `descriptorBufferOffsetAlignment` describes the alignment required, in bytes, when setting offsets into the descriptor buffer.
+* `combinedImageSamplerDescriptorSingleArray` indicates that the implementation does not require an array of `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors to be written into a descriptor buffer as an array of image descriptors, immediately followed by an array of sampler descriptors.
+* `bufferlessPushDescriptors` indicates that the implementation does not require a buffer created with `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` to be bound when using push descriptors.
+* `allowSamplerImageViewPostSubmitCreation` indicates that the implementation does not restrict when the `VkSampler` or `VkImageView` objects used to retrieve descriptor data can be created in relation to command buffer submission. If this value is `VK_FALSE`, then the application must create any `VkSampler` or `VkImageView` objects whose descriptor data is accessed during the execution of a command buffer, before the `vkQueueSubmit` (or `vkQueueSubmit2`) call that submits that command buffer.
+* `maxDescriptorBufferBindings` defines the maximum total number of descriptor buffers and embedded immutable sampler sets that can be bound.
+* `maxResourceDescriptorBufferBindings` defines the maximum number of resource descriptor buffers that can be bound.
+* `maxSamplerDescriptorBufferBindings` defines the maximum number of sampler descriptor buffers that can be bound.
+* `maxEmbeddedImmutableSamplerBindings` defines the maximum number of embedded immutable samplers sets that can be bound.
+* `maxEmbeddedImmutableSamplers` describes the maximum number of unique immutable samplers in descriptor set layouts created with `VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT`, and pipeline layouts created from them, which can simultaneously exist on a device.
+* `bufferCaptureReplayDescriptorDataSize`, `imageCaptureReplayDescriptorDataSize`, `imageViewCaptureReplayDescriptorDataSize`, `samplerCaptureReplayDescriptorDataSize`, and `accelerationStructureCaptureReplayDescriptorDataSize` define the maximum size, in bytes, of the opaque data used for capture replay with each respective object type.
+* `samplerDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_SAMPLER descriptor.
+* `combinedImageSamplerDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
+* `sampledImageDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE descriptor.
+* `storageImageDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_IMAGE descriptor.
+* `uniformTexelBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
+* `robustUniformTexelBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor when robust buffer access is enabled.
+* `storageTexelBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
+* `robustStorageTexelBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor when robust buffer access is enabled.
+* `uniformBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor.
+* `robustUniformBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor when robust buffer access is enabled.
+* `storageBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor.
+* `robustStorageBufferDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor when robust buffer access is enabled.
+* `inputAttachmentDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor.
+* `accelerationStructureDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR/VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor.
+* `maxSamplerDescriptorBufferRange` describes the accessible range, in bytes, of a sampler buffer when bound.
+* `maxResourceDescriptorBufferRange` describes the accessible range, in bytes, of a resource buffer when bound.
+* `samplerDescriptorBufferAddressSpaceSize` describes the total amount of address space available, in bytes, for descriptor buffers containing samplers.
+* `resourceDescriptorBufferAddressSpaceSize` describes the total amount of address space available, in bytes, for descriptor buffers containing resources.
+* `descriptorBufferAddressSpaceSize` describes the total amount of address space available, in bytes, for all descriptor buffers.
+
+If link:{refpage}VK_VALVE_mutable_descriptor_type.html[VK_VALVE_mutable_descriptor_type] is used,
+a descriptor is considered to be a union of all the enabled types, so the size of a descriptor is the maximum of all enabled types.
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    size_t             combinedImageSamplerDensityMapDescriptorSize;
+} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT;
+----
+
+* `combinedImageSamplerDensityMapDescriptorSize` describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor when using the VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT flag of the link:{refpage}VK_EXT_fragment_density_map.html[VK_EXT_fragment_density_map] extension.
+
+== Mapping to DirectX® 12 Descriptor Heaps
+
+In DirectX 12 (DX12), descriptors are allocated into descriptor heaps, which work almost completely differently to anything currently in Vulkan.
+This extension aims to reduce one aspect of the divergence between the two.
+Below is a rough description of the mapping from DX12 to this extension.
+Applications looking to port between the two APIs will likely have more information available than the DX12 API provides, and can likely take shortcuts (highlighted where possible).
+This doesn’t solve the overall limits for object counts, and so it’s not possible to trivially emulate every corner of the DX12 API.
+
+
+=== Descriptor Heap Creation
+
+DX12 has the following command to create a heap:
+
+[source,c]
+----
+typedef struct D3D12_DESCRIPTOR_HEAP_DESC {
+  D3D12_DESCRIPTOR_HEAP_TYPE  Type;
+  UINT                        NumDescriptors;
+  D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
+  UINT                        NodeMask;
+} D3D12_DESCRIPTOR_HEAP_DESC;
+
+HRESULT CreateDescriptorHeap(
+  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
+  REFIID                           riid,
+  void                             **ppvHeap
+);
+----
+
+Implementing the equivalent functionality in Vulkan would mean the following operations:
+
+  * Create a `VkDescriptorSetLayout` with `VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT`. The count would be up to 1000000 for resources, and 2048 for samplers.
+  ** If link:{refpage}VK_VALVE_mutable_descriptor_type.html[VK_VALVE_mutable_descriptor_type] is supported, we only need one descriptor set layout which supports all descriptor types for the heap type.
+  ** Otherwise, there are two alternatives:
+  *** Create up to 6 descriptor set layouts of the relevant descriptor types the application cares about (`STORAGE_BUFFER`, `UNIFORM_BUFFER`, `SAMPLED_IMAGE`, `STORAGE_IMAGE`, `UNIFORM_TEXEL_BUFFER`, `STORAGE_TEXEL_BUFFER`).
+  *** Create one descriptor set layout with 6 fixed-size arrays instead of using variable descriptor counts. This means `NumDescriptors` is effectively ignored.
+  * Create a `VkBuffer`, size equal to `NumDescriptors` multiplied by the descriptor size within it, and its device mask set per `NodeMask`.
+  * If `Flags` includes `D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE`, allocate `DEVICE_LOCAL` memory.
+  ** If this memory can be `DEVICE_LOCAL` and `HOST_VISIBLE`, then that can be mapped directly for the CPU pointer and used as the heap CPU pointer.
+  ** Otherwise, `HOST_VISIBLE` staging memory should be allocated for a parallel buffer.
+     Copying from this staging buffer to the main descriptor buffer should be done at each submit where the staging buffer has been modified.
+  * If Flags does not include `D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE`, allocate `HOST_VISIBLE` memory that can be used for staging copies to `DEVICE_LOCAL` memory.
+  ** Alternatively, plain `malloc` can be used if descriptor copies are implemented as `memcpy`.
+  * Copying descriptors ala `CopyDescriptorsSimple()` is implemented with either memcpy or staging copies.
+
+This model would support the full TIER_3 resource binding feature in DX12 and shader model 6.6 direct heap access, but can be simplified a lot for applications with DX11-style binding models.
+
+=== Descriptor Creation
+
+Unlike DX12, Vulkan (and this extension) requires view objects and sampler objects to exist and have their lifetimes managed by the application.
+These objects need to be kept alive for the descriptor itself to be valid.
+How this is managed precisely is going to depend on the application’s usage patterns, though link:https://github.com/HansKristian-Work/vkd3d-proton[vkd3d-proton] suggests one viable option.
+The scheme used by vkd3d-proton involves keeping a hash map of the views associated with each resource object (or the device for samplers), using creation parameters as a key, so that their lifetime is tied to the underlying resource and can be reused.
+When actually creating the UAV/SRV/Sampler, the object should be looked up in the relevant hash map, and created there if necessary.
+The descriptor itself is then written directly to the provided CPU pointer.
+Note that 'VkBufferView' objects are not used and have been replaced by an explicit address, range, and format.
+This is very important since applications have a tendency to linearly allocate texel buffers and might end up rapidly create these views at different offsets.
+If applications were forced to hold on to all unique 'VkBufferView' objects, things get out of hand quickly.
+vkd3d-proton currently works around this problem by quantizing the texel buffer offset and range, and instead performs offset/range checks per access in shaders to keep the number of objects low, which is obviously not desirable.
+
+For image views on the other hand, the number of unique views in flight per resource tends to be constrained and manageable.
+In terms of performance characteristics, creating SRVs and UAVs is already far more expensive in DX12 than copying descriptors.
+The style observed in most DX12 applications is that view objects are created in non-shader visible heaps, which are then streamed into shader visible heaps.
+
+=== Descriptor Heap Queries
+
+Descriptor heaps provide methods to query the “start” pointer for the descriptor heap on both the CPU and GPU.
+
+[source,c]
+----
+D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
+D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
+UINT GetDescriptorHandleIncrementSize(
+  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType
+);
+----
+
+`GetGPUDescriptorHandleForHeapStart` should be the `VkDeviceAddress` for the device-local buffer.
+`GetCPUDescriptorHandleForHeapStart` should be the mapped host address for the host-visible buffer.
+`GetDescriptorHandleIncrementSize` should be the size of the largest descriptor possible in the buffer.
+
+However, this model can fall through fairly quickly if the descriptor set layout is more complicated.
+When more than one descriptor array is used to emulate the union-style descriptor heap of DX12,
+it is not possible to provide a unique pointer to host memory that is suitable for copying.
+
+An engine abstraction that takes descriptor heap and offset separately is much easier to implement overall and avoids all these pitfalls.
+
+=== Descriptor Copies
+
+D3D12-style descriptor copies can be performed using `memcpy` on the host-visible descriptor buffer memory,
+but applications need to make sure the memory that is being read from is cached on the host.
+Alternatively, it is possible to use staging buffer copies.
+
+=== Descriptor Binding
+
+Binding descriptors to shaders in DX12 consists of two operations: setting the descriptor heaps, and setting tables as offsets into those heaps.
+
+`SetDescriptorHeaps` allows applications to set one sampler heap, and one CBV/SRV/UAV heap (containing other resources).
+This command should straightforwardly map to `vkCmdBindDescriptorBuffersEXT`, with each heap being bound as a separate buffer.
+
+`Set{Graphics|Compute}RootDescriptorTable` allows applications to set various offsets to the descriptor heap, to be more or less used like descriptor sets in Vulkan.
+This command will map fairly directly to `vkCmdSetDescriptorBufferOffsetsEXT`, but if implementing DX12 root signatures natively, this approach will not work easily.
+The core assumption of DX12 is that the heap is a big array and a table offset should be seen more as an index offset into that big array.
+`descriptorBufferOffsetAlignment` might be larger than one descriptor, so binding at the desired offset might not be possible.
+Descriptor buffer offsets are better suited for suballocating individual descriptor sets rather than slicing existing descriptor sets.
+
+An engine abstraction can decide to take this into account when allocating descriptor sets:
+
+ * In DX12 path, a root signature has N tables, which needs to allocate M descriptors each.
+ * In Vulkan path, a "root signature" translates to a `VkPipelineLayout`, which in turn translates to N `VkDescriptorSetLayout`s which require M bytes in the descriptor buffer each.
+
+If native DX12 root signature compatibility is required however, the suggested implementation is to bind the heap in its entirety with a single `vkCmdSetDescriptorBufferOffsetEXT` of 0.
+The shader declares global unsized arrays and from there we can implement shader model 6.6 by just indexing into the descriptor array directly.
+For older models, descriptor table offsets can translate to u32 push constants that add an extra offset, meaning that we promote legacy root signatures to shader model 6.6.
+This is a fairly invasive process and it is only expected that translation layers would go to this length.
+
+== Porting existing Vulkan applications
+
+Porting an existing Vulkan application to the new API should require minimal additional code, and ideally should allow the removal of older code.
+
+Applications should be uploading descriptors in the exact same manner they upload other resource data (e.g. new textures, constants, etc.).
+All advice about how to upload resources (e.g. use staging buffers, use the DMA queue asynchronously, etc.) apply in the exact same manner for descriptors as they do for anything else.
+
+When porting an application then, the aim should not be to create a new separate path for descriptor uploads, but to directly hook into existing resource upload paths.
+This amortises the cost of descriptor uploads with other data uploads and reduces the amount of code dedicated to descriptor management.
+Any improvements to data uploads then automatically apply to descriptor uploads.
+For strategies where resizable BAR or unified memory can be used, none of this is necessary and uploading descriptors becomes `memcpy`.
+
+For descriptor management, pools are removed. Instead of allocating descriptor sets from pools, applications can instead allocate from a custom allocator, which is backed by a big descriptor buffer.
+The size to allocate for a set would be obtained from `vkGetDescriptorSetLayoutSizeEXT` and alignment from `descriptorBufferOffsetAlignment`.
+A linear or arena allocator would be a good match for this.
+
+Instead of updating descriptor sets with `vkUpdateDescriptorSets`, `vkGetDescriptorEXT` could point directly to the mapped descriptor buffer, or a scratch buffer can be used and copied later.
+
+== Example
+
+This example intends to show:
+
+ * How to create descriptor set layouts
+ * How to use immutable samplers with descriptor buffers
+ * How to use embedded immutable samplers
+ * How to use push descriptors
+ * How to allocate enough descriptor buffer memory
+ * How to bind ranges of descriptor buffers to descriptor sets
+
+[source,c]
+----
+VkSampler immutableSamplers[4]; // Create these somehow.
+
+// When using descriptor buffers, it is generally a good idea to separate out samplers and resources into separate sets,
+// since descriptor buffers containing samplers might be very limited in size.
+const VkDescriptorSetLayoutBinding setLayout0[] =
+{
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,       // descriptorType
+        2,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        NULL                                    // pImmutableSamplers
+    },
+    {
+        1,                                       // binding
+        VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, // descriptorType
+        2,                                       // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,            // stageFlags
+        NULL                                     // pImmutableSamplers
+    }
+};
+
+const VkDescriptorSetLayoutBinding setLayout1[] =
+{
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_SAMPLER,             // descriptorType
+        2,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        &immutableSamplers[0],                  // pImmutableSamplers
+    },
+    {
+        1,                                       // binding
+        VK_DESCRIPTOR_TYPE_SAMPLER,              // descriptorType
+        2,                                       // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,            // stageFlags
+        NULL,
+    }
+};
+
+const VkDescriptorSetLayoutBinding setLayout2[] =
+{
+    // binding to a single image descriptor
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,      // descriptorType
+        1,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        NULL                                    // pImmutableSamplers
+    }
+};
+
+// Embedded immutable samplers are internally allocated and we do not need to allocate anything.
+const VkDescriptorSetLayoutBinding setLayout3[] =
+{
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_SAMPLER,             // descriptorType
+        1,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        &immutableSamplers[2],                  // pImmutableSamplers
+    },
+    {
+        1,                                       // binding
+        VK_DESCRIPTOR_TYPE_SAMPLER,              // descriptorType
+        1,                                       // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,            // stageFlags
+        &immutableSamplers[3],                   // pImmutableSamplers
+    }
+};
+
+// Descriptor set layouts are created as normal, but we use the descriptor buffer flag on the set layouts.
+VkDescriptorSetLayout layout0 =
+    create_descriptor_set_layout({ .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, .pBindings = setLayout0, .bindingCount = 2 });
+VkDescriptorSetLayout layout1 =
+    create_descriptor_set_layout({ .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, .pBindings = setLayout1, .bindingCount = 2 });
+VkDescriptorSetLayout layout2 =
+    create_descriptor_set_layout({ .flags =
+            VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |
+            VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
+        .pBindings = setLayout2, .bindingCount = 1 });
+VkDescriptorSetLayout layout3 =
+    create_descriptor_set_layout({ .flags =
+            VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |
+            VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
+        .pBindings = setLayout3, .bindingCount = 2 });
+
+// Use 5 descriptor set layouts, mostly here to demonstrate how multiple sets can refer to one descriptor buffer.
+// Also, use embedded sampler sets and push constants for completion.
+VkPipelineLayout layout = create_pipeline_layout({ .layouts = { layout0, layout0, layout1, layout2, layout3 }});
+
+// Query how big the descriptor set layout is.
+VkDeviceSize layoutSizes[2];
+vkGetDescriptorSetLayoutSizeEXT(device, layout0, &layoutSizes[0]);
+vkGetDescriptorSetLayoutSizeEXT(device, layout1, &layoutSizes[1]);
+
+// Align the descriptor set size so it is suitable for suballocation within a descriptor buffer.
+layoutSizes[0] = align(layoutSizes[0], props.descriptorBufferOffsetAlignment);
+layoutSizes[1] = align(layoutSizes[1], props.descriptorBufferOffsetAlignment);
+
+// Query individual offsets into the descriptor set.
+VkDeviceSize layoutOffsets[2][2];
+vkGetDescriptorSetLayoutBindingOffsetEXT(device, layout0, 0, &layoutOffsets[0][0]);
+vkGetDescriptorSetLayoutBindingOffsetEXT(device, layout0, 1, &layoutOffsets[0][1]);
+vkGetDescriptorSetLayoutBindingOffsetEXT(device, layout1, 0, &layoutOffsets[1][0]);
+vkGetDescriptorSetLayoutBindingOffsetEXT(device, layout1, 1, &layoutOffsets[1][1]);
+
+#define SET_COUNT 64
+
+// Allocate the equivalent of a big descriptor pool.
+// The size is arbitrary and should be large and be able to hold all descriptors used by app,
+// for this sample, we allocate the smallest possible descriptor buffer for the number of sets we need.
+// The most compatible thing to do is 1 resource buffer, 1 sampler buffer.
+Buffer resourceBuffer = create_buffer({
+    .size = layoutSizes[0] * 2 * SET_COUNT,
+    .usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT |
+        (props.bufferlessPushDescriptors ? 0 : VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT),
+    .properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT });
+
+Buffer samplerBuffer = create_buffer({
+    .size = layoutSizes[1] * SET_COUNT,
+    .usage = VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT,
+    .properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT });
+
+const VkDescriptorBufferBindingPushDescriptorBufferHandleEXT push_descriptor_buffer_handle = {
+    VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT, NULL, resourceBuffer.handle};
+
+const VkDescriptorBufferBindingInfoEXT binding_infos[2] = {
+    { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, (props.bufferlessPushDescriptors ? NULL : &push_descriptor_buffer_handle),
+        resourceBuffer.deviceAddress,
+        VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT | (props.bufferlessPushDescriptors ? 0 : VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT) },
+    { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, NULL, samplerBuffer.deviceAddress,
+        VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT }
+};
+
+// Bind the descriptor buffers once, from here, we will offset into the buffer for different descriptor sets.
+vkCmdBindDescriptorBuffersEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, 0, 2, binding_infos);
+
+// Allocate these somehow, not particularly important to this example.
+VkImageView views[SET_COUNT][2][2];
+VkSampler samplers[SET_COUNT][2];
+VkDeviceAddress bufferAddressTexelBuffer;
+
+// No buffers are associated with embedded immutable samplers. This maps to DX12 static samplers.
+// There is no vkCmdBindPipelineLayout(), so this is the way to do it in Vulkan.
+vkCmdBindDescriptorBufferEmbeddedSamplersEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 4);
+
+for (int i = 0; i < SET_COUNT; i++)
+{
+    // This refers to the buffers we bound in vkCmdBindDescriptorBuffersEXT.
+    // Allocate descriptor sets linearly.
+    const uint32_t bufferIndices[] = { 0, 0, 1 };
+    const VkDeviceSize offsets[] = { 2 * i * layoutSizes[0], (2 * i + 1) * layoutSizes[0], i * layoutSizes[1] };
+
+    // Set 0: Resource set pulled from buffer 0
+    // Set 1: Resource set pulled from buffer 0
+    // Set 2: Sampler set pulled from buffer 1
+    // Set 3: Push descriptors
+    // Set 4: Embedded samplers
+
+    vkCmdSetDescriptorBufferOffsetsEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, 3,
+        bufferIndices, offsets);
+
+    VkWriteDescriptorSet ssbo_write = { /* Fill in as desired, details not interesting here. */ };
+    vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 3, 1, &ssbo_write);
+
+    VkDescriptorImageInfo image_info = {};
+    VkDescriptorAddressInfoEXT addr_info = { VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT };
+    VkDescriptorGetInfoEXT info = { VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT };
+
+    for (int j = 0; j < 2; j++)
+    {
+        info.type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
+        info.pSampledImage = &image_info;
+        // If descriptorBufferImageLayoutIgnored is enabled, this is ignored, convenient!
+        image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+
+        // Offset is based on the binding offset + the offset within the descriptor set layout we queried earlier.
+        // For array indexing, use the descriptor size from physical device property.
+        // set j, binding 0, element k
+        for (int k = 0; k < 2; k++)
+        {
+            image_info.imageView = views[i][j][k];
+            vkGetDescriptorEXT(device, &info, props.sampledImageDescriptorSize,
+            resourceBuffer.hostPointer + offsets[j] + layoutOffsets[0][0] + k * props.sampledImageDescriptorSize);
+        }
+
+        // set j, binding 1, element k
+        info.type = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
+        info.data.pUniformBuffer = &addr_info;
+        for (int k = 0; k < 2; k++)
+        {
+            addr_info.range = 1024;
+            addr_info.address = bufferAddressTexelBuffer + (4 * i + 2 * j + k) * addr_info.range;
+            // No VkBufferView needed, how convenient!
+            addr_info.format = VK_FORMAT_R8G8B8A8_UNORM;
+            vkGetDescriptorEXT(device, &info, props.uniformTexelBufferDescriptorSize,
+            resourceBuffer.hostPointer + offsets[j] + layoutOffsets[0][1] + k * props.uniformTexelBufferDescriptorSize);
+        }
+    }
+
+    // For immutable samplers, we have to emit the buffer payload.
+    // In practice, the immutable samplers must work even if implementation just ignores pImmutableSamplers.
+    info.type = VK_DESCRIPTOR_TYPE_SAMPLER;
+    // set 2, binding 0, element k
+    for (int k = 0; k < 2; k++)
+    {
+        info.data.pSampler = &immutableSamplers[k];
+        vkGetDescriptorEXT(device, &info, props.samplerDescriptorSize,
+        samplerBuffer.hostPointer + offsets[2] + layoutOffsets[1][0] + k * props.samplerDescriptorSize);
+    }
+
+    // set 2, binding 1, element k
+    for (int k = 0; k < 2; k++)
+    {
+        info.data.pSampler = &samplers[i][k];
+        vkGetDescriptorEXT(device, &info, props.samplerDescriptorSize,
+        samplerBuffer.hostPointer + offsets[2] + layoutOffsets[1][1] + k * props.samplerDescriptorSize);
+    }
+
+    vkCmdDraw(...);
+}
+----
+
+== Issues
+
+=== RESOLVED: How do immutable samplers work?
+
+There may be cases where a driver needs immutable samplers stored as part of the descriptor, rather than solely existing as a part of the pipeline.
+With descriptor sets, this could be hidden from the application as the driver controlled how writes were performed – not so with this API.
+To fix this, samplers must be used to populate these descriptor bindings as if they were not immutable, and they must have been created with identical parameters.
+
+For partity with DX12, a special kind of descriptor set - embedded immutable samplers - are supported as an alternative which follow DX12 restrictions.
+
+=== RESOLVED: Should we support dynamic buffers?
+
+No, these have very specialized support paths in some drivers, and end up being more pain than it’s worth to support.
+Applications can achieve the same using device addresses in push constants, or pipelined descriptor buffer updates.
+
+
+=== UNRESOLVED: How does this interact with descriptor set invalidation?
+
+There’s some extra complication with whether descriptor set layouts work with buffers or sets (`VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`) that will need sorting.
+Shouldn’t be too difficult and will likely just be along the lines of invalidating sets that don’t match in this regard when binding a new pipeline layout, but it’s too much detail for this design document.
+
+
+=== RESOLVED: Should `vkGetDescriptorOffset` take an `arrayOffset` parameter, or should we make guarantees about how arrays work?
+
+Guarantees about how arrays work makes it much easier to work with GPU-side updates, as it avoids having to either add a “get offset” shader intrinsic, or for apps to keep a mapping when doing GPU copies.
+
+
+=== RESOLVED: Now that descriptors are in regular memory, should there be a limit on the size of “inline uniforms”?
+
+We should allow developers to put as many constants into descriptor buffers as they want, thus removing the limit, at least when it interacts with this extension.
+This is likely to remove an indirection compared to putting these in a uniform buffer.
+Potentially we might want to at least have it match the uniform buffer limit rather than being independent.
+
+
+=== RESOLVED: Why are view objects required when DX12 has no such requirement?
+
+DX12 has dedicated heap objects which allow implementations to hide a lot of implementation detail behind them; without them, some vendors rely on view objects to store metadata.
+Introducing heaps to Vulkan as-is was too complex alongside the other changes in this extension, when the primary goal is to enable explicit memory management, rather than precise DX12 compatibility.
+If this turns out to be a significant problem, a future extension could be developed to bridge this gap.
+
+
+=== RESOLVED: Should `vkGetDescriptorEXT` / `vkGetDescriptorSetLayoutBindingOffsetEXT` be arrayed?
+
+No – there is no reason why pulling this loop into the driver should provide any benefit.
+
+
+=== RESOLVED: Should we support combined image/sampler descriptors with this extension?
+
+While some consider these deprecated, removing them would prevent some applications being able to port to this extension.
+Additionally, YCbCr support currently _relies_ on this descriptor type, which is required on some platforms.
+It might be possible to remove that requirement in the YCbCr feature, but it is a lot of work for a fairly low payoff.
+
+
+=== RESOLVED: How does this interact with variable descriptor count?
+
+The variable flag is allowed; `vkGetDescriptorSetLayoutSize` returns a size assuming the maximum size will be used - but developers are free to use the set with a buffer sized for a smaller number of descriptors.  The exception to this is when `combinedImageSamplerDescriptorSingleArray` is `VK_FALSE` and the binding contains `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors; in this case the image and sampler descriptors are still arranged in the descriptor buffer as though the maximum number of descriptors are used, and so the buffer must be sized accordingly.
+
+
+=== RESOLVED: Should we require descriptors to be retrieved for `NULL_HANDLE` or is `memset(0)` sufficient?
+
+Some vendors use non-zero values for null descriptors, so applications can retrieve these using `VK_NULL_HANDLE` with `vkGetDescriptorEXT`.
+For descriptor types which take buffer devices addresses, a `0` address is used instead.
+
+=== RESOLVED: How can YCbCr descriptors be obtained?
+
+YCbCr descriptors can have multiple descriptors associated with them; applications must allow for this space.
+`VkSamplerYcbcrConversionImageFormatProperties::combinedImageSamplerDescriptorCount` determines how many descriptors each image format requires.
+When calling `vkGetDescriptorEXT` for a YCbCr combined descriptor, applications must provide a pointer to enough memory for this many combined sampled image descriptors, and factor this in when copying descriptors.
+
+
+=== RESOLVED: How should we expect capture/replay tooling (e.g. RenderDoc/vktrace) to use this?
+
+A capture replay bit on image/buffer creation will be added to enable descriptors to be reused between runs. This allows capture tools to capture the buffer data as bound, and replay with the same descriptors, rather than attempting to do a mapping.
+Some sort of GPU feedback is still desirable on capture to determine which handles are accessed, but this will be similar to the situation with descriptor indexing.
+
+
+=== RESOLVED: On some platforms, descriptor sets occupy a 4GB range, allowing the set pointer to be 32-bit, rather than 64-bit. How can this be guaranteed for descriptor buffers?
+
+This could be done a number of ways – e.g. having unique memory types that guarantee allocation in a 4GB range.
+
+
+=== RESOLVED: Should the alignment be separate from the size?
+
+No - the alignment of a descriptor is always the size of the descriptor.
+
+
+=== RESOLVED: What is the fast path for constant data in this new model? Previously most vendors have recommended dynamic UBOs as a fast path, but those go away in this extension.
+
+The crucial part of getting data into a shader quickly is mostly dominated by number of indirections, and cache behavior.
+Static accesses with fewer indirections and minimal memory model interactions (e.g. read-only and not `NonPrivate`) will be fastest.
+Push constants should be favored for small amounts of data.
+For larger amounts of data, applications should favor allocating buffers and putting data into those buffers according with whichever of the below API mechanisms is most straightforward for their use case, with some potential degradation at each step.
+
+  * Push constants
+  * Pointer to data in push constants
+  * Inline uniform data in descriptor buffers
+  * Push descriptors
+  * Uniform buffer in descriptor memory
+  * Storage buffer in descriptor memory
+
+This order listed above is not necessarily true for all IHVs.
+
+
+=== RESOLVED: Should applications be able to mix sets and buffers?
+
+Originally the intention was to support this, but at least one vendor cannot support this natively.
+
+
+=== RESOLVED: Should we use buffer device addresses for the buffer arguments?
+
+Buffer parameters in recent extensions have been using device address arguments, so this extension aims to be consistent. Part of the reason for this though, is so that the base address can be modified with a single pointer argument instead of object + offset.
+However, this extension explicitly uses a separate command for setting the offset dynamically compared to the base address, to allow for the application to set the base address statically.
+Having the base address specified with a device address is still useful for consistency though.
+
+
+=== RESOLVED: How does this interact with VK_EXT_pipeline_robustness?
+
+There is no way to request robust and non-robust descriptors separately, or specify robust/non-robust descriptors in the set layout, so if 
+the `robustBufferAccess` feature is enabled then robust descriptors are always used.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_device_fault.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_device_fault.adoc
new file mode 100644
index 0000000..f11ab76
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_device_fault.adoc
@@ -0,0 +1,239 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_device_fault
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document outlines functionality to allow applications to query for
+additional diagnostic information following device-loss.
+
+== Problem Statement
+
+Device-loss errors can be challenging to diagnose. They can be triggered by a
+number of issues, including invalid application behaviour, driver bugs, and
+physical failure or removal of hardware. Whilst the Vulkan Validation layers are
+recommended as a first step in diagnosing the majority of API usage issues, they
+are unable to address all possible causes of device-loss.
+
+This proposal aims to provide application developers with additional information
+that may aid in diagnosing such errors.
+
+== Solution Space
+
+Several options have been considered:
+
+- Provide foundational extensions to enable the development of crash postmortem
+  tooling
+- Develop extensions or tools that aim to attribute faults to individual Vulkan
+  objects
+- Rely on individual vendor tools and extensions
+
+This proposal focuses on the first option. It represents a partial solution,
+with further extensions required in order to fully enable crash postmortem
+tooling.
+
+== Proposal
+
+=== API Features
+
+The following features are exposed by the `VK_EXT_device_fault` extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceFaultFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           deviceFault;
+    VkBool32           deviceFaultVendorBinary;
+} VkPhysicalDeviceFaultFeaturesEXT;
+----
+
+`deviceFault` is the main feature enabling this extension’s functionality and
+must be supported if this extension is supported.
+
+`deviceFaultVendorBinary` is an optional feature that enables support for
+vendor-specific binary crash dumps, which may be interpreted via external vendor
+tools.
+
+=== Querying for Fault Information
+
+Following device-loss, applications may query for additional diagnostic
+information by calling `vkGetDeviceFaultInfoEXT`.
+
+[source,c]
+----
+typedef struct VkDeviceFaultCountsEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           addressInfoCount;
+    uint32_t           vendorInfoCount;
+    VkDeviceSize       vendorBinarySize;
+} VkDeviceFaultCountsEXT;
+
+typedef struct VkDeviceFaultInfoEXT {
+    VkStructureType                 sType;
+    void*                           pNext;
+    char                            description[VK_MAX_DESCRIPTION_SIZE];
+    VkDeviceFaultAddressInfoEXT*    pAddressInfos;
+    VkDeviceFaultVendorInfoEXT*     pVendorInfos;
+    void*                           pVendorBinaryData;
+} VkDeviceFaultInfoEXT;
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT(
+    VkDevice                                    device,
+    VkDeviceFaultCountsEXT*                     pFaultCounts,
+    VkDeviceFaultInfoEXT*                       pFaultInfo);
+----
+
+The signature of `vkGetDeviceFaultInfoEXT` is intended to mirror the design of
+existing query functions, where the second parameter (`pFaultCounts`) indicates
+size of output arrays, or the number of results written. However, device fault
+information requires multiple output arrays. Therefore, a
+`VkDeviceFaultCountsEXT` structure is used to specify the sizes of multiple
+arrays at once.
+
+[source,c]
+----
+// Query number of available results
+VkDeviceFaultCountsEXT faultCounts{};
+faultCounts.sType = VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT;
+
+vkGetDeviceFaultInfoEXT(device, &faultCounts, NULL);
+
+// Allocate output arrays and query fault data
+VkDeviceFaultInfoEXT faultInfo{}
+info.sType             = VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT;
+info.pAddressInfos = (VkDeviceFaultAddressInfoEXT*) malloc(sizeof(VkDeviceFaultAddressInfoEXT) *
+                                                           faultCounts.addressInfoCount);
+info.pVendorInfos  = (VkDeviceFaultVendorInfoEXT*)  malloc(sizeof(VkDeviceFaultVendorInfoEXT)  *
+                                                           faultCounts.vendorInfoCount);
+info.pVendorBinaryData = malloc(faultCounts.vendorBinarySize);
+
+vkGetDeviceFaultInfoEXT(device, &faultCounts, &faultInfo);
+----
+
+=== Interpreting GPU Virtual Addresses
+
+Implementations may return information on both page faults generated by invalid
+memory accesses, and instruction pointers indicating the instructions executing
+at the time of the fault.
+
+[source,c]
+----
+typedef enum VkDeviceFaultAddressTypeEXT {
+    VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT = 0,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT = 1,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT = 2,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT = 3,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT = 4,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT = 5,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT = 6,
+    VK_DEVICE_FAULT_ADDRESS_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDeviceFaultAddressTypeEXT;
+
+typedef struct VkDeviceFaultAddressInfoEXT {
+    VkDeviceFaultAddressTypeEXT    addressType;
+    VkDeviceAddress                reportedAddress;
+    VkDeviceSize                   addressPrecision;
+} VkDeviceFaultAddressInfoEXT;
+----
+
+Page addresses and instruction pointers are reported as GPU virtual addresses,
+and additional extensions or vendor tools may be required in order to correlate
+these extensions with individual Vulkan objects.
+
+Implementations may only be able to report these addresses with limited
+precision. The combination of `reportedAddress` and `addressPrecision`
+allow the possible range of addresses to be calculated, such that:
+
+[source,c++]
+---------------------------------------------------
+lower_address = (pInfo->reportedAddress & ~(pInfo->addressPrecision-1))
+upper_address = (pInfo->reportedAddress |  (pInfo->addressPrecision-1))
+---------------------------------------------------
+
+[NOTE]
+.Note
+====
+It is valid for the `reportedAddress` to contain a more precise address
+than indicated by `addressPrecision`.
+In this case, the value of `reportedAddress` should be
+treated as an additional hint as to the value of the address that triggered the
+page fault, or to the value of an instruction pointer.
+====
+
+
+=== Vendor Binary Crash Dumps
+
+Optionally, implementations may also support the generation of vendor-specific
+binary blobs containing additional diagnostic information. All vendor-specific
+binaries will begin with a common header. The contents of the remainder of the
+binary blob are vendor-specific, and will require vendor-specific documentation
+or tools to interpret.
+
+[source,c]
+----
+typedef struct VkDeviceFaultVendorBinaryHeaderVersionOneEXT {
+    uint32_t                                     headerSize;
+    VkDeviceFaultVendorBinaryHeaderVersionEXT    headerVersion;
+    uint32_t                                     vendorID;
+    uint32_t                                     deviceID;
+    uint32_t                                     driverVersion;
+    uint8_t                                      pipelineCacheUUID[VK_UUID_SIZE];
+    uint32_t                                     applicationNameOffset;
+    uint32_t                                     applicationVersion;
+    uint32_t                                     engineNameOffset;
+} VkDeviceFaultVendorBinaryHeaderVersionOneEXT;
+----
+
+== Issues
+
+1) Should `vkGetDeviceFaultInfoEXT` return multiple faults?
+
+*RESOLVED*: No. This extension only seeks to identify a single fault as a
+possible cause of device loss and not to maintain a log of multiple faults.
+We anticipate that in cases where a GPU does encounter multiple faults, there
+is a high probability that the faults would be duplicates, such as those caused
+by parallel execution of the same defective code.
+
+2) Can `vkGetDeviceFaultInfoEXT` be called prior to device loss?
+
+*RESOLVED*: No. `VK_KHR_fault_handling` in VulkanSC does support an equivalent
+to this, but `VK_KHR_fault_handling` aims to address a different use case, where
+a fault log is polled prior to device loss to enable remedial action to be taken.
+
+3) Do page faults need to report the actual address that was accessed, or
+should we allow reporting of the page address?
+
+*RESOLVED*: Some IHVs hardware reports page faults at page alignment, or
+at some other hardware-unit dependent granularity, rather than the precise
+address that triggered the fault. All addresses are reported at hardware-unit
+dependent granularity, along with an associated precision indicator. This information
+can be used to compute an address range that contains the original address that
+triggered the fault.
+
+4) How should we report cases where one of multiple pipelines may have caused a
+fault?
+
+*RESOLVED*: In cases where a fault cannot be attributed to a single unique
+pipeline, reporting the set of possible candidates is desirable.
+
+5) The page fault and instruction address information structures have similar
+structure. Should they be combined?
+
+*RESOLVED*: Yes. These have been combined as `VkDeviceFaultAddressInfoEXT`
+to reduce API surface area.
+
+6) How should implementors approach extensibility for vendor-specific faults?
+Should they rely on pname:pNext chains, or should the extension introduce a
+generic structure to return vendor error codes and human-readable descriptions
+in the base structure?
+
+*RESOLVED*: Implementors should utilize the generic
+`VkDeviceFaultVendorInfoEXT` structures where applicable, and fallback to
+extending pname:pNext chains where this is insufficient. Where a pname:pNext
+chain is required, vendors should tailor their human-readable error
+descriptions to advise developers that additional information may be available.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc
new file mode 100644
index 0000000..336cc29
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc
@@ -0,0 +1,84 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_dynamic_rendering_unused_attachments
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document describes a limitation with `apiext:VK_KHR_dynamic_rendering` that limits what
+pipelines can be used with render pass instances, and may subsequently require
+many more pipeline objects to be created to work around the limitation.
+
+== Problem Statement
+
+The `apiext:VK_KHR_dynamic_rendering` has several restrictions on what pipelines can be
+bound within a render pass instance which may cause the application to have to create
+multiple variants of the pipeline object in order to be compatible with the render
+pass instance.
+These restrictions were put in place to accommodate hardware that uses the pipeline
+state to program the framebuffer layout for the render pass instance and cannot easily
+change the framebuffer layout during the render pass instance, requiring all pipeline
+state bound in the render pass instance to match, even if the mismatch is only between
+a consistent valid format and unused attachments.
+
+The consequence of this limitation is that the following sequence is invalid:
+```c++
+vkCmdBeginRendering(); // Only uses color attachment 0, with VK_FORMAT_R8G8B8A8_UNORM
+vkCmdBindPipeline(A); // A was created with color attachments 0, 1, 2 with VK_FORMAT_R8G8B8A8_UNORM
+vkCmdDraw();
+vkCmdBindPipeline(B); // B was created with only color attachment 0 with VK_FORMAT_R8G8B8A8_UNORM
+vkCmdDraw();
+vkCmdEndRendering();
+```
+
+This can cause a combinatorial explosion of pipeline objects, depending on the
+application, or require pipeline objects to be generated just-in-time to
+be compatible with the active render pass instance.
+Alternatively it forces applications to split the render pass instance any time the
+framebuffer layout in the pipeline state changes.
+
+The current restrictions require there to be an exact match between the bound pipeline
+and the render pass instance attachment formats, including matching unused attachments
+with undefined formats.
+
+The VUIDs that contribute to this limitation are:
+
+<dt>[VUID-vkCmdDraw-colorAttachmentCount-07616](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdDraw-colorAttachmentCount-07616)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound pipeline equal to VK_FORMAT_UNDEFINED</dd>
+
+<dt>[VUID-vkCmdDraw-pDepthAttachment-07617](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdDraw-pDepthAttachment-07617)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the currently bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED</dd>
+
+<dt>[VUID-vkCmdDraw-pStencilAttachment-07618](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdDraw-pStencilAttachment-07618)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the currently bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED</dd>
+
+<dt>[VUID-vkCmdExecuteCommands-imageView-07606](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdExecuteCommands-imageView-07606)</dt>
+<dd>If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is VK_NULL_HANDLE, the corresponding element of the pColorAttachmentFormats member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be VK_FORMAT_UNDEFINED</dd>
+
+<dt>[VUID-vkCmdDraw-colorAttachmentCount-06180](https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-colorAttachmentCount-06180)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound graphics pipeline</dd>
+
+<dt>[VUID-vkCmdDraw-pDepthAttachment-06181](https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-pDepthAttachment-06181)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the currently bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView</dd>
+
+<dt>[VUID-vkCmdDraw-pStencilAttachment-06182](https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-pStencilAttachment-06182)</dt>
+<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the currently bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView</dd>
+
+DX12 does not have these limitations, which makes implementing DX12 translation on top of Vulkan
+with these limitations difficult.
+
+== Solution Space
+
+Since these limitations do not apply to all implementations, we need a simple
+extension that lifts these restrictions and allows pipelines to be bound to render
+pass instances where the attachment formats may match with the same format or
+unused, and where it matches with unused the writes are discarded.
+
+== Proposal
+
+Implementations may expose the `apiext:VK_EXT_dynamic_rendering_unused_attachments` extension
+and the slink:VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT::pname:dynamicRenderingUnusedAttachments
+feature which allows apps to bind pipelines to render pass instances where attachment
+formats can match with unused attachments.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_extended_dynamic_state3.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_extended_dynamic_state3.adoc
new file mode 100644
index 0000000..56999f1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_extended_dynamic_state3.adoc
@@ -0,0 +1,213 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_extended_dynamic_state3
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details the motivation behind another extended dynamic state extension, which follows VK_EXT_extended_dynamic_state and VK_EXT_extended_dynamic_state2.
+
+== Problem Statement
+
+Since the release of VK_EXT_extended_dynamic_state and VK_EXT_extended_dynamic_state2 in Vulkan 1.3, which made
+more pipeline state dynamic, there is still some remaining pipeline state that cannot be changed dynamically.
+Dynamic state helps applications reduce the number of pipelines they need to create and bind.
+It was also noted that several extensions that add pipeline state lack dynamic state equivalents.
+
+Reducing the amount of state required to build a pipeline can also help applications build pipelines ahead of time
+and avoid hitching since that state might not be known until right before the draw command is recorded. By making it
+dynamic there is less state that applications need to hash and cache for on-demand pipeline creation.
+
+These additional dynamic states can also help pare down the pipeline state to help other extensions build on this
+and potentially remove the need to create and bind linked monolithic pipeline objects at all.
+
+
+== Solution Space
+
+This proposal adds more dynamic state that hardware vendors can optionally implement, with enough in common
+between most vendors to be useful for applications.
+This extension also sets a baseline for a potential roadmap for future hardware to handle all dynamic state efficiently.
+
+Some of the dynamic state added by this proposal may not have immediate benefits for applications
+since the state could be constant throughout the application, but it is added anyway to
+capture as much pipeline state as possible and lay a foundation for potentially doing away with linked
+monolithic pipeline objects.
+
+Adding more and more dynamic state by itself is not the solution to all pipeline problems, and this extension
+does not attempt go beyond adding dynamic state to address those other problems.
+
+
+== Proposal
+
+IHVs should only implement support for the dynamic state below if it is efficient on their
+platform. Feature bits are provided for all state so IHVs can implement any subset of
+VK_EXT_extended_dynamic_state3.
+
+=== New Dynamic State
+
+This adds the following dynamic state:
+
+VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT::
+  VkPipelineTessellationDomainOriginStateCreateInfo::domainOrigin
+  * Assuming VkPhysicalDeviceFeatures::tessellationShader is enabled
+  * Requires VK_KHR_maintenance2
+
+VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT::
+  VkPipelineRasterizationStateCreateInfo::depthClampEnable
+  * Assuming VkPhysicalDeviceFeatures::depthClamp is enabled
+
+VK_DYNAMIC_STATE_POLYGON_MODE_EXT::
+  VkPipelineRasterizationStateCreateInfo::polygonMode
+  * Assuming VkPhysicalDeviceFeatures::fillModeNonSolid is enabled
+
+VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT::
+  VkPipelineMultisampleStateCreateInfo::rasterizationSamples
+  * There are restrictions on what values this can be set to
+    based on the variableMultisampleRate feature, the render pass
+    instance attachments, and the extensions
+    VK_NV_framebuffer_mixed_samples and VK_AMD_mixed_attachment_samples.
+
+VK_DYNAMIC_STATE_SAMPLE_MASK_EXT::
+  VkPipelineMultisampleStateCreateInfo::pSampleMask
+
+VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT::
+  VkPipelineMultisampleStateCreateInfo::alphaToCoverageEnable
+
+VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT::
+  VkPipelineMultisampleStateCreateInfo::alphaToOneEnable
+  * Assuming VkPhysicalDeviceFeatures::alphaToOne is enabled
+
+VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT::
+  VkPipelineColorBlendStateCreateInfo::logicOpEnable
+  * Assuming VkPhysicalDeviceFeatures::logicOp is enabled
+
+VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT::
+  Per-attachment:
+    - VkPipelineColorBlendAttachmentState::blendEnable
+
+VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT::
+  Per-attachment:
+    - VkPipelineColorBlendAttachmentState::srcColorBlendFactor
+    - VkPipelineColorBlendAttachmentState::dstColorBlendFactor
+    - VkPipelineColorBlendAttachmentState::colorBlendOp
+    - VkPipelineColorBlendAttachmentState::srcAlphaBlendFactor
+    - VkPipelineColorBlendAttachmentState::dstAlphaBlendFactor
+    - VkPipelineColorBlendAttachmentState::alphaBlendOp
+
+VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT::
+  Per-attachment:
+    - VkPipelineColorBlendAttachmentState::colorWriteMask
+
+VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT::
+  VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream
+  * Assuming VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams is enabled
+  * Requires VK_EXT_transform_feedback
+
+VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT::
+  VkPipelineRasterizationConservativeStateCreateInfoEXT::conservativeRasterizationMode
+  * Assuming VK_EXT_conservative_rasterization is enabled
+  ** Also depends on VkPhysicalDeviceConservativeRasterizationPropertiesEXT::primitiveUnderestimation
+  * Requires VK_EXT_conservative_rasterization
+
+VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT::
+  VkPipelineRasterizationConservativeStateCreateInfoEXT::extraPrimitiveOverestimationSize
+  * Assuming VK_EXT_conservative_rasterization is enabled
+  * Requires VK_EXT_conservative_rasterization
+
+VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT::
+  VkPipelineRasterizationDepthClipStateCreateInfoEXT::depthClipEnable
+  * Assuming VkPhysicalDeviceDepthClipEnableFeaturesEXT::depthClipEnable is enabled
+  * Requires VK_EXT_depth_clip_enable
+
+VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT::
+  VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable
+  * Assuming VK_EXT_sample_locations is enabled
+  * Requires VK_EXT_sample_locations
+
+VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT::
+  Per-attachment:
+    - VkPipelineColorBlendAttachmentState::colorBlendOp
+    - VkPipelineColorBlendAdvancedStateCreateInfoEXT::srcPremultiplied
+    - VkPipelineColorBlendAdvancedStateCreateInfoEXT::dstPremultiplied
+    - VkPipelineColorBlendAdvancedStateCreateInfoEXT::blendOverlap
+   * Requires VK_EXT_blend_operation_advanced
+
+VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT::
+  VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::provokingVertexMode
+  * Assuming VkPhysicalDeviceProvokingVertexFeaturesEXT::provokingVertexLast is enabled
+  * Requires VK_EXT_provoking_vertex
+
+VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT::
+  VkPipelineRasterizationLineStateCreateInfoEXT::lineRasterizationMode
+  * Assuming VK_EXT_line_rasterization is enabled
+  * Requires VK_EXT_line_rasterization
+
+VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT::
+  VkPipelineRasterizationLineStateCreateInfoEXT::stippledLineEnable
+  * Assuming VK_EXT_line_rasterization is enabled
+  * Requires VK_EXT_line_rasterization
+
+VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT::
+  VkPipelineViewportDepthClipControlCreateInfoEXT::negativeOneToOne
+  * Assuming VkPhysicalDeviceDepthClipControlFeaturesEXT::depthClipControl is enabled
+  * Requires VK_EXT_depth_clip_control
+
+VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV::
+  VkPipelineViewportWScalingStateCreateInfoNV::viewportWScalingEnable
+  * Assuming VK_NV_clip_space_w_scaling is enabled
+  * Requires VK_NV_clip_space_w_scaling
+
+VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV::
+  VkPipelineViewportSwizzleStateCreateInfoNV::pViewportSwizzles
+  * Assuming VK_NV_viewport_swizzle is enabled
+  * Requires VK_NV_viewport_swizzle
+
+VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV::
+  VkPipelineCoverageToColorStateCreateInfoNV::coverageToColorEnable
+  * Assuming VK_NV_fragment_coverage_to_color is enabled
+  * Requires VK_NV_fragment_coverage_to_color
+
+VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV::
+  VkPipelineCoverageToColorStateCreateInfoNV::coverageToColorLocation
+  * Assuming VK_NV_fragment_coverage_to_color is enabled
+  * Requires VK_NV_fragment_coverage_to_color
+
+VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV::
+  VkPipelineCoverageModulationStateCreateInfoNV::coverageModulationMode
+  * Assuming VK_NV_framebuffer_mixed_samples is enabled
+  * Requires VK_NV_framebuffer_mixed_samples
+
+VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV::
+  VkPipelineCoverageModulationStateCreateInfoNV::coverageModulationTableEnable
+  * Assuming VK_NV_framebuffer_mixed_samples is enabled
+  * Requires VK_NV_framebuffer_mixed_samples
+
+VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV::
+  VkPipelineCoverageModulationStateCreateInfoNV::pCoverageModulationTable
+  * Assuming VK_NV_framebuffer_mixed_samples is enabled
+  * Requires VK_NV_framebuffer_mixed_samples
+
+VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV::
+  VkPipelineCoverageReductionStateCreateInfoNV::coverageReductionMode
+  * Assuming VkPhysicalDeviceCoverageReductionModeFeaturesNV::coverageReductionMode is enabled
+  * Requires VK_NV_coverage_reduction_mode
+
+VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV::
+  VkPipelineRepresentativeFragmentTestStateCreateInfoNV::representativeFragmentTestEnable
+  * Assuming VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV::representativeFragmentTest is enabled
+  * Requires VK_NV_representative_fragment_test
+
+VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV::
+  VkPipelineViewportShadingRateImageStateCreateInfoNV::shadingRateImageEnable
+  * Assuming VkPhysicalDeviceShadingRateImageFeaturesNV::shadingRateImage is enabled
+  * Requires VK_NV_shading_rate_image
+
+
+=== New Properties
+
+VkPhysicalDeviceExtendedDynamicState3PropertiesEXT::dynamicPrimitiveTopologyUnrestricted::
+  Indicates that VkPipelineInputAssemblyStateCreateInfo::topology is ignored when
+  VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT is enabled, and the application can set any
+  primitive topology in any primitive topology class with vkCmdSetPrimitiveTopology.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_external_memory_acquire_unmodified.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_external_memory_acquire_unmodified.adoc
new file mode 100644
index 0000000..e8ef346
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_external_memory_acquire_unmodified.adoc
@@ -0,0 +1,300 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_external_memory_acquire_unmodified
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes adding a performance hint that may reduce the runtime
+cost of memory barriers that acquire ownership of a resource from an external
+queue family (such as
+link:{refpage}VK_QUEUE_FAMILY_FOREIGN_EXT.html[VK_QUEUE_FAMILY_FOREIGN_EXT]).
+
+== Problem Statement
+
+A memory barrier that acquires ownership of a resource from an external queue
+family may, in some cases, have an unacceptable runtime cost and produce
+noticeable latency.
+
+An external resource's data may be split between external memory and
+non-external memory.
+The resource's _external memory_ is the collection of ranges
+of link:{refpage}VkDeviceMemory.html[VkDeviceMemory] bound to the resource,
+where the link:{refpage}VkDeviceMemory.html[VkDeviceMemory] has been imported or
+exported with an API related to
+link:{refpage}VK_KHR_external_memory.html[VK_KHR_external_memory].
+The external memory is shared among all external APIs and/or processes that
+access the resource.
+The resource's _non-external memory_, in this discussion,
+is any implementation-private memory that
+is associated with the resource
+and does not reside in any range of slink:VkDeviceMemory bound to the resource.
+For example, if the external resource is a link:{refpage}VkImage.html[VkImage],
+then in some Vulkan implementations
+the external memory may contain the image's pixel data and externally shared metadata,
+and the non-external memory may contain implementation-private metadata.
+Note that, in some Vulkan implementations,
+the resource's non-external memory, unlike its external memory, is
+not shared globally among the APIs and/or processes that use the resource.
+For example, each link:{refpage}VkDevice.html[VkDevice]
+and `EGLContext` that accesses the resource may maintain its own private
+non-external memory for the resource.
+
+For this discussion, a resource's _external memory_ is considered
+_unmodified_ if no bit was modified in the allocated memory.
+This definition refers only to the physical bits in the allocated memory, and
+is independent of Vulkan operations such as image layout transitions, shader
+access, transfer commands, etc.
+In particular, operations that seem to be read-only may modify a resource's
+memory in some cases.
+This definition is also independent of the resource's _non-external memory_;
+that is, it is independent of any modifications to implementation-private memory
+associated with the resource.
+
+The performance problem is due to the Vulkan implementation's need to maintain
+synchronization between data contained in the resource's external memory
+and in its non-external memory.
+When an application releases ownership of a resource to an external queue
+family and later re-acquires ownership, the external queue family may have
+modified the resource's external memory during its ownership.
+If the external queue family _did_ modify the resource's external memory,
+then, when the application re-acquires ownership, the Vulkan implementation
+must, during the ownership-acquire operation, synchronize the resource's non-external
+data with the new, modified external data.
+In this case, the synchronization operation is unavoidable.
+However, if the external queue family _did not_ modify the resource's external
+memory, and if the implementation is _unable to determine_ that the external
+memory remained unmodified, then the Vulkan implementation must _still_
+synchronize the data during the acquire operation.
+In this case, the synchronization operation is unnecessary.
+If the application had the ability to inform that Vulkan implementation that
+resource's external memory remained unmodified, then the implementation could
+avoid the synchronization operation.
+
+For example, suppose the application renders to an image, then transfers
+ownership of the image to
+link:{refpage}VK_QUEUE_FAMILY_FOREIGN_EXT.html[VK_QUEUE_FAMILY_FOREIGN_EXT],
+then later re-acquires the image with
+link:{refpage}VkImageMemoryBarrier.html[VkImageMemoryBarrier].
+Suppose the application knows that the external queue family did not modify
+the image's external memory, but cannot inform the Vulkan implementation
+of its unmodified status due to lack of Vulkan API.
+The Vulkan implementation must perform the unnecessary data synchronization
+during the execution of the link:{refpage}VkImageMemoryBarrier.html[VkImageMemoryBarrier].
+
+The problem is especially relevant for systems that implement
+link:{refpage}VkSwapchainKHR.html[VkSwapchainKHR]
+by layering it atop the external memory extensions such as
+link:{refpage}VK_EXT_external_memory_dma_buf.html[VK_EXT_external_memory_dma_buf].
+On such systems, the application may suffer the performance overhead each time
+it acquires an image from the swapchain, even though the window system did not
+modify the image's memory.
+Specifically, the overhead is likely to occur when the application transitions
+the image layout away from
+link:{refpage}VkImageLayout.html[VK_IMAGE_LAYOUT_PRESENT_SRC_KHR]
+after link:{refpage}vkAcquireNextImageKHR.html[vkAcquireNextImageKHR].
+
+== Solution Space
+
+=== Design Goals
+
+- The solution must provide the application a way to inform the implementation
+  that the external resource has remained unmodified for the duration from the
+  application's most recent release of ownership to the external queue family
+  until the application's current ownership acquire operation.
+- The solution should not require the implementation to internally track the
+  link:{refpage}VkImageLayout.html[VkImageLayout] of external images.
+  Such tracking can be complex to implement and cause performance overhead.
+- The solution must work well for systems that implement
+  link:{refpage}VkSwapchainKHR.html[VkSwapchainKHR] by layering it atop external
+  memory extensions such as
+  link:{refpage}VK_EXT_external_memory_dma_buf.html[VK_EXT_external_memory_dma_buf].
+- After acquiring a swapchain image but before using the image, applications
+  must transition the image away from
+  link:{refpage}VkImageLayout.html[VK_IMAGE_LAYOUT_PRESENT_SRC_LAYOUT_KHR]
+  (which preserves the image's pixels) or
+  link:{refpage}VK_IMAGE_LAYOUT_UNDEFINED.html[VK_IMAGE_LAYOUT_UNDEFINED]
+  (which discards the image's pixels). The solution should work well and
+  improve performance regardless of the source layout.
+
+=== Considered Solutions
+
+- **A**. Define a new read-only external queue family, such as
+  link:{refpage}VK_QUEUE_FAMILY_FOREIGN_READ_ONLY_EXT.html[VK_QUEUE_FAMILY_FOREIGN_READ_ONLY_EXT].
+  When the application transfers ownership of a resource to this queue family,
+  it implicitly informs the implementation that the external queue will not
+  modify the resource's external memory.
+- **B**. Extend resource creation, such as link:{refpage}VkImageCreateInfo.html[VkImageCreateInfo],
+  with a new parameter that informs the implementation that no external queue
+  will modify the resource's external memory.
+- **C**. Extend the ownership-release memory barrier, such as
+  link:{refpage}VkImageMemoryBarrier.html[VkImageMemoryBarrier], with a new
+  parameter that informs the implementation that the resource's external memory
+  will remain unmodified for the duration of the external queue family's
+  ownership.
+- **D**. Extend the ownership-acquire memory barrier, such as
+  link:{refpage}VkImageMemoryBarrier.html[VkImageMemoryBarrier], with a new
+  parameter that informs the implementation that the resource's external memory
+  has remained unmodified since the most recent ownership-release.
+
+=== Solution Analysis
+
+For analyzing the pros and cons of each solution, let us examine the life of
+an external image that involves the following producers/consumers.
+
+- A Vulkan application. It juggles the external image among the following
+  producers/consumers in addition to its own independent Vulkan rendering.
+- A video decoder.
+- A library that post-processes the image with Vulkan.
+  For example, the library may apply color correction or add dropshadows.
+  When the image is submitted to the library for post-processing, sometimes the
+  library applies changes to the image, sometimes the library returns the image
+  unchanged.
+- A presentation engine (such as a window system) that only reads the image
+  and never modifies it.
+  The application does not use Vulkan WSI to interact with the presentation
+  engine, such as link:{refpage}vkCreateWaylandSurfaceKHR.html[vkCreateWaylandSurfaceKHR],
+  link:{refpage}VkSwapchainKHR.html[VkSwapchainKHR], and
+  link:{refpage}vkQueuePresentKHR.html[vkQueuePresentKHR].
+  Instead, the application effectively implements these
+  functions itself with a combination of
+  link:{refpage}VK_EXT_external_memory_dma_buf.html[VK_EXT_external_memory_dma_buf],
+  link:{refpage}VK_EXT_queue_family_foreign.html[VK_EXT_queue_family_foreign],
+  and  native Wayland API from `libwayland-client`.
+
+The image is used in the following loop:
+
+- **a**. Application's Vulkan releases ownership of the image to the video decoder.
+- **b**. Video decoder writes to the image, discarding all previous pixel data.
+- **c**. Application's Vulkan acquires ownership.
+- **d**. Application's Vulkan adds a visual effect to the image.
+- **e**. Application's Vulkan releases ownership to the post-processing library.
+- **f**. Post-processing library works on the image. This step has two subcases:
+    - **f.rw**. Post-processing library modifies the image.
+    - **f.ro**. Post-processing library does not modify the image.
+- **g**. Application's Vulkan acquires ownership.
+- **h**. Application's Vulkan samples the image during full-scene composition.
+- **i**. Application's Vulkan releases ownership to the presentation engine.
+- **j**. Application's Vulkan acquires ownership.
+- **k**. Loop. This step has two subcases:
+    - **k.a**. The video decoder is ready to provide a new frame. Goto (a).
+    - **k.d**. The video decoder is not yet ready. Goto (d).
+
+Solution (B) is unusable in this workflow.
+
+Solution (A) works well for steps (i, j, k) because the presentation engine is
+read-only.
+However, the solution is unusable at step (e) because the application does not
+know yet whether step (f.rw) or (f.ro) will be taken.
+
+Solution (`C`) is equivalent to (A) in this example scenario.
+
+Solution (D) works well for all steps in the sequence. In particular, between
+(f) and (g), the application can query the post-processing library, asking
+whether (f.rw) or (f.ro) occurred. If (f.ro), the the application can add the
+performance hint to link:{refpage}VkImageMemoryBarrier.html[VkImageMemoryBarrier] in step (g).
+
+== Proposal
+
+We propose API for solution (D).
+
+=== Feature
+
+[source,c]
+----
+// Extends `VkImageMemoryBarrier*` and `VkBufferMemoryBarrier*`.
+typedef struct VkExternalMemoryAcquireUnmodifiedEXT {
+    VkStructureType sType;
+    const void* pNext;
+    VkBool32 acquireUnmodifiedMemory;
+} VkExternalMemoryAcquireUnmodifiedEXT;
+----
+
+When the application releases ownership of an external resource to an
+external queue family and later re-acquires ownership, and the application
+knows that resource's external memory remained unmodified between the release
+and acquire, then the application should chain
+`VkExternalMemoryAcquireUnmodifiedEXT` into the acquire-operation's memory
+barrier and set `acquireUnmodifiedMemory = VK_TRUE`.
+
+If `acquireUnmodifiedMemory` is `VK_FALSE`, then the Vulkan implementation
+ignores the struct.
+In particular, the struct in this case _does not_ specify that the resource's
+external memory is modified, but rather that it is unknown whether it is
+modified or not.
+
+To allow flexibility in applications and layers, we propose allowing this
+struct to be chained into any memory barrier for any resource.
+If the memory barrier's `srcQueueFamilyIndex` does not specify an external
+queue family, then the Vulkan implementation ignores the struct.
+This flexibility simplifies the implementation of layers that implement
+link:{refpage}VkSwapchainKHR.html[VkSwapchainKHR] atop
+link:{refpage}VK_KHR_external_memory.html[VK_KHR_external_memory] and native
+window system APIs.
+
+=== Caution
+
+Applications and libraries should not use "common sense" approaches to
+determine whether an API has modified the resource.
+They should make the determination solely with dedicated query APIs or with
+specialist knowledge of the API's implementation.
+
+_A counter-example for a "common sense" approach._
+Operations that appear to be read-only may be implemented as read-write.
+Suppose the post-processing library discussed above wants to provide API that
+allows the application to query, between steps (f) and (g), whether the library
+has modified the image.
+A deceptively straightforward, but incorrect, method of implementing the query
+is to track all Vulkan API and SPIR-V instructions that accesses the image.
+The query will report "unmodified" if and only if the library accessed the
+image only with "read-only" Vulkan API and SPIR-V instructions.
+In this method, examples of "read-only" access are SPIR-V instructions such as
+link:https://www.khronos.org/registry/SPIR-V/specs/unified1/SPIRV.html#OpImageRead[OpImageRead],
+link:https://www.khronos.org/registry/SPIR-V/specs/unified1/SPIRV.html#OpImageFetch[OpImageFetch],
+and link:https://www.khronos.org/registry/SPIR-V/specs/unified1/SPIRV.html#OpImageSampleImplicitLod[OpImageSampleImplicitLod],
+and transfer commands such as link:{refpage}vkCmdCopyImage.html[vkCmdCopyImage].
+Surprisingly, these operations may not be implemented as read-only.
+The Vulkan implementation, before dispatching the "read-only" shader
+or transfer command, may modify the image's external memory
+in order to improve the performance of the image reads,
+or in order to coerce the image to use a memory layout
+that is compatible with fickle hardware requirements.
+
+== Issues
+
+=== RESOLVED: OUT OF SCOPE. How to determine if a resource's external memory is modified?
+
+This proposal does not provide a way for the application to query whether the
+resource's external memory was modified by an external queue family,
+which is unfortunately necessary for the application to determine whether to set
+`VkExternalMemoryAcquireUnmodifiedEXT::acquireUnmodifiedMemory`.
+
+When the external queue family accesses the resource with non-Vulkan APIs, then
+such queries are clearly outside the scope of Vulkan.
+Each API that accesses the resource should provide its own query API.
+It is a contradiction to define Vulkan API for this query because,
+if Vulkan were able to determine whether a non-Vulkan API modified the
+resource's external memory,
+then this extension would be unnecessary (see the problem statement).
+
+However, when the external queue family accesses the image with Vulkan
+then the query API should reasonably belong in Vulkan itself.
+For example, in the post-processing library discussed above,
+the library cannot provide a query API to the application
+unless Vulkan itself provides a query API to the library.
+In this proposal's design discussions,
+we agreed that designing such a query API is
+significantly more complex than designing this proposal's hint API.
+Because this proposal's feature is immediately useful
+despite Vulkan lacking the query API, we agreed to postpone the design of the
+query.
+
+== Further Functionality
+
+The natural complement to this proposal's feature
+is a feature that would provide the application a way to query
+whether Vulkan itself has modified a resource's external memory.
+This feature is deferred to a future extension, as explained in the Issues
+section.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_frame_boundary.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_frame_boundary.adoc
new file mode 100644
index 0000000..91fd4b3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_frame_boundary.adoc
@@ -0,0 +1,301 @@
+// Copyright 2022-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# Proposal: `VK_EXT_frame_boundary`
+:toc: left
+
+`VK_EXT_frame_boundary` is a device extension that helps *tools* (such as
+debuggers) to group queue submissions per frames in non-trivial scenarios,
+typically when `vkQueuePresentKHR` is not a relevant frame boundary delimiter.
+
+See also the discussion in https://gitlab.khronos.org/vulkan/vulkan/-/issues/2436
+
+## Problem Statement
+
+Various Vulkan tools (e.g. debuggers) use a layer to monitor all Vulkan
+commands, and need to know where a frame starts and ends. In general,
+`vkQueuePresentKHR` is a natural frame boundary delimiter: a frame is made by
+all commands between two `vkQueuePresentKHR`. However, there are scenarios where
+`vkQueuePresentKHR` is not a suitable frame boundary delimiter. The
+`VK_EXT_frame_boundary` device extension lets application developers indicate to
+tools where the frames start and end.
+
+Note: here, "`frame`" is understood as "`a unit of workload that spans one or more
+queue submissions`". The notion of frame is application-dependent. In graphical
+applications, a frame is typically the work needed to render into the image that
+is eventually presented. In a compute-only application, a frame could be a set
+of compute kernels dispatches that treat one unit of work.
+
+There are a number of cases where `vkQueuePresentKHR` is not a suitable frame
+boundary delimiter.
+
+### Graphics applications bypassing the Khronos swapchain
+
+Graphics applications are not tied to use the Khronos swapchain, and they may
+interact directly with a platform presentation engine. In this case, they will
+not call `vkQueuePresentKHR`.
+
+### Compute-only applications
+
+Compute-only applications typically do not interact with a presentation engine at
+all, so they would not call `vkQueuePresentKHR`.
+
+### Overlapping frames
+
+A graphics application may pipeline its frame preparation such that work for
+different frames is being submitted in an interleaved way, a scenario we call
+here "`overlapping frames`".
+
+For instance, consider a graphics app where each frame is executed via two
+`vkQueueSubmit` followed by a `vkQueuePresentKHR`, and frame preparation is
+pipelined, such that the serialized commands look like:
+
+....
+vkQueueSubmit();     // 1st submit of Frame N
+vkQueueSubmit();     // 2nd submit of Frame N-1
+vkQueuePresentKHR(); // present Frame N-1
+vkQueueSubmit();     // 1st submit of Frame N+1
+vkQueueSubmit();     // 2nd submit of Frame N
+vkQueuePresentKHR(); // present Frame N
+....
+
+Here, relying on `vkQueuePresentKHR` as a frame boundary delimiter would lead to
+the erroneous grouping of queue submissions of different frames as the work of a
+single frame.
+
+## Solution Space
+
+* Debug utilities: existing debug utilities let us tag Vulkan objects, could we
+  use that to identify which work belongs to which frame? We can think of
+  tagging the command buffers submitted with a frame identifier. However some
+  command buffers may be used concurrently by several frames, so that is not a
+  viable approach. In the same vein, queue debug label regions are not
+  satisfactory since they cannot handle overlapping frames.
+
+What we need is a way to associate a frame identifier to the one or more queue
+submissions that submit the work for this frame. This is what the
+VK_EXT_frame_boundary extension does.
+
+## Proposal
+
+### Overview
+
+We want applications to be able to group queue submissions by frames. To this
+aim, we let applications tag queue submissions with a `uint64_t` frame
+identifier. However, this is not sufficient: given that a frame may span more
+than one queue submissions, in order to know when a frame ends, tools also need
+to know which queue submission is the last one for a given frame. So in addition
+to the frame identifier, we also want to be able to tag queue submissions with a
+"`frame end`" flag, to mark the last submission for a given frame identifier.
+
+There is one clarification left to do: the "`frame end`" submission is the
+"`logical last`" queue submission, but in the presence of timeline semaphores it
+may not be the last one to be submitted. Since timeline semaphores permit queue
+submissions to wait on semaphores whose signal is not yet submitted, the
+semaphore meant to be the last part of work for a given frame may not be the
+last one to be submitted. In this context, we want to mark the "`frame end`"
+submission as the one that is logically the last submission for the frame: if
+this submission waits on semaphores whose signal is not yet submitted, then all
+subsequent submissions with the same frame identifier until the submission that
+signals these semaphores are also associated to that frame.
+
+To illustrate this on a small example, considering serialized Vulkan commands:
+
+....
+// At this point, the latest signal of timeline semaphore TLS set its value to 1
+
+// Logical last submission for frame N, wait on TLS value 2
+vkQueueSubmit( frameID:N, frameEnd, wait:TLS(2) )
+
+// The actual final submission, which unblocks the previous one, is also part
+// of the work for frame N, even if in submit order it comes after the frameEnd
+// submission.
+vkQueueSubmit( frameID:N, signal:TLS(2) )
+....
+
+So we want a way to tag queue submissions with a `uint64_t` frame identifier,
+and a frameEnd flag. To this aim, the `VK_EXT_frame_boundary` device extension
+defines the new `VkFrameBoundaryEXT` type that is meant to be passed in queue
+submission pNext chains.
+
+### The `VkFrameBoundaryEXT` type
+
+The `VK_EXT_frame_boundary` device extension defines a new
+`VkFrameBoundaryEXT` type that is meant to be added to pNext chains of queue
+submissions, such as `VkSubmitInfo`, `VkSubmitInfo2`, `VkBindSparseInfo`
+or `VkPresentInfoKHR`. This type looks like:
+
+....
+// Flags
+typedef enum VkFrameBoundaryFlagBitsEXT {
+  VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT = 0x00000001,
+} VkFrameBoundaryFlagBitsEXT;
+typedef VkFlags VkFrameBoundaryFlagsEXT;
+
+// VkFrameBoundaryEXT can be passed in any queue submission's pNext chain
+typedef struct VkFrameBoundaryEXT {
+    VkStructureType              sType;
+    const void*                  pNext;
+
+    // Necessary members:
+    // flags is necessary to mark the last submission of a frame
+    VkFrameBoundaryFlagsEXT      flags;
+    // frameID is necessary to disambiguate overlapping frames
+    uint64_t                     frameID;
+
+    // Extra members: provide a list of objects which  No need to pass the layout as
+    // trace-replay tools will track the layout anyway.
+    uint32_t                     imageCount;
+    const VkImage*               pImages;
+    uint32_t                     bufferCount;
+    const VkBuffer*              pBuffers;
+
+    // Extra info can be passed with an arbitrary tag payload, typically
+    // a tool-specific struct.
+    uint64_t                     tagName;
+    size_t                       tagSize;
+    const void*                  pTag;
+} VkFrameBoundaryEXT;
+....
+
+Where:
+
+. `flags` provides a way to tag submissions with a frameEnd flag.
+
+. `frameID` provides a way to tag submissions with a frame identifier.
+
+In addition to these two necessary members, we have a few extras:
+
+. a list of VkImage: this makes this extension as expressive as
+  `vkQueuePresentKHR`, the classic frame boundary delimiter. For the classic
+  frame-oriented graphics workloads, it is convenient to have a list of images
+  storing the final frame renderings. We do not need the image layout as the
+  trace-replay tools would have to track image layout already anyway.
+
+. a list of VkBuffer: which allows applications that do not produce their
+  final result as an image (eg. compute applications) to provide the final
+  result of the frame.
+
+. a way to attach a binary payload: this can be used to pass tool-specific
+  extra information.
+
+### Validation
+
+Since the concept of a frame is application dependent, there is no way to
+validate relevant use of frame identifier. As such there is no restrictions
+imposed on frame identifiers and is the responsibility of the application
+to use them in a relevant way.
+
+In practice it is advised that applications use a single monotonically
+increasing counter to base their frame identifiers on and not to reuse
+identifiers between separate frames.
+
+However, there is no way for the validation layer to detect an application
+not adhering to these rules, since the validation layer has no idea which
+submissions should be grouped together, so a valid grouping like this might
+be flagged as invalid because of the application using wait before signal:
+
+....
+vkQueueSubmit( frame:0 ) // start of a frame
+vkQueueSubmit( frame:0 ) // part of the frame
+vkQueueSubmit( frame:0, frameEnd, wait:TLS(42) ) // logical end, waiting on a not-yet-signaled TLS
+vkQueueSubmit( frame:0, signal:TLS(42) ) // this is still part of the current frame, after the frameEnd marker.
+....
+
+## Examples
+
+### Compute-only
+
+Compute-only that want to split their work into frames can do so with:
+
+....
+vkQueueSubmit( frame:N )           // Zero or more submits for frame N
+vkQueueSubmit( frame:N, frameEnd ) // Last submit for frame N
+
+vkQueueSubmit( frame:N+1 )           // Zero or more submits for frame N+1
+vkQueueSubmit( frame:N+1, frameEnd ) // Last submit for frame N+1
+....
+
+### Graphics, sequential frames, not using the KHR swapchain
+
+A graphics application that prepare frames in sequence (as opposed to
+overlapping frames), but makes no use of the KHR swapchain, can group
+submissions with:
+
+....
+vkQueueSubmit( frame:N ) // Zero or more submits for frame N
+vkQueueSubmit( frame:N, frameEnd, imageCount:1, pImages:0x12345 ) // Last submit for frame N
+// here code that passes pImages to the presentation engine
+
+vkQueueSubmit( frame:N+1 )           // Zero or more submits for frame N+1
+vkQueueSubmit( frame:N+1, frameEnd, imageCount:1, pImages:0x54321 ) // Last submit for frame N+1
+// here code that passes pImages to the presentation engine
+....
+
+### Overlapping frames with wait-after-signal
+
+A graphics application with overlapping frames and wait-after-signal (that may
+be due to multithreading, here we look at a serialized view of Vulkan commands),
+can group queue submissions per frame with:
+
+....
+vkQueueSubmit( frame:N ); // 1st submit of frame N
+
+vkQueueSubmit( frame:N-1 ); // Some other submissions for an other frame
+vkQueueSubmit( frame:N+1 ); // Some other submissions for an other frame
+
+// 2nd submit of frame N, logically the last one, but waits on a TLS not yet
+// signalled for that value
+vkQueueSubmit( frame:N, frameEnd, wait:TLS(42) );
+
+vkQueueSubmit( frame:... ); // Some other submissions for other frames
+
+// 3rd submit of frame N, not the logical last one, but the last one in submit
+// order (here serialized) since it signals the TLS on which the logical last
+// submission waits
+vkQueueSubmit( frame:N, signal:TLS(42) );
+....
+
+## Issues
+
+### RESOLVED: What should this extension be named?
+
+VK_EXT_frame_boundary.
+
+"`Frame`" is still the best word to convey the meaning of "`a unit of workload
+spanning one or more queue submissions`". "`Boundary`" might be seen as too
+specific since this can be seen more generally as tagging queue submissions
+with frame identifiers, but really the goal of this tagging is precisely to
+know when a frame starts and ends, i.e. to know its boundaries.
+
+### RESOLVED: What information should be included in VkFrameBoundaryEXT?
+
+Beyond the necessary flags and frameID, we keep only a list of objects that
+contain the end result of the frame, and a binary blob where other extra info
+can be provided.
+
+The list of VkImage and VkBuffer objects allow the application to provide the
+end result of the frame. There is no need to provide extra information about
+the object like the layout of these images since capture-replay tools would
+track the Vulkan state whilst the application is running.
+
+The list of VkImage lets this extension be as expressive as
+`vkQueuePresentKHR`, which has a list of swapchain images.
+
+A binary blob (called "`tag`" to be homogeneous with
+VkDebugUtilsObjectTagInfoEXT), allows tools to define their own data containing
+any extra information that is required and update this without having to change
+the Vulkan specification.
+
+### RESOLVED: How should frame identifiers be validated?
+
+Do not impose conditions on frame identifiers.
+
+Frame identifiers are just a way to indicate to tools how to group queue
+submissions, and that there is no ground to impose any kind of monotonic
+increase. Frame identifiers may be reused and the application is responsible to
+reuse them in a "`safe`" way. In practice it is advised that applications do not
+reuse frame identifiers, but if the application is not careful when reusing
+frame identifiers, it only makes a difference for tools, so it should not have
+a semantic impact.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_graphics_pipeline_library.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_graphics_pipeline_library.adoc
new file mode 100644
index 0000000..421b5fc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_graphics_pipeline_library.adoc
@@ -0,0 +1,710 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_EXT_graphics_pipeline_library
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to allow partial compilation of portions
+of pipelines, improving the performance of pipeline compilation for
+applications that have large numbers of materials, large amounts of
+dynamic state, or continuously stream in new material definitions.
+
+
+## Problem Statement
+
+The original promise of monolithic pipelines in Vulkan was to enable
+developers to construct all their state up front, avoiding the driver doing
+dynamic compilation and patching shaders implicitly when recording draw
+calls, resulting in unexpected hitches.
+
+The reality however is that for many game engines, requiring most of this state up front
+either fails to eliminate hitching,
+or requires precompiling so many state combinations that the size of the
+pipeline cache is nearly unmanageable.
+
+Games engines are typically still managing enormous sets of state and
+shader combinations, and this is not a purely technical problem.
+It is still expected and encouraged that developers will limit the number
+of these, but it doesn’t change the fact that at least in the
+short-to-mid-term, developers are having real problems that can’t be solved by
+telling them to reduce the number of pipelines.
+
+This proposal does not aim to fully solve these issues, but instead provides
+a key piece of infrastructure required to solve it.
+The main aim of this proposal is to reduce the cost of loading novel state
+and shader combinations within the rendering loop, thus avoiding hitching.
+
+An additional constraint to be aware of is that any solution should not
+regress the intended wins from moving to pipeline objects – there should be
+no need for late-compilation or patching that is performed *implicitly* by
+the implementation.
+An expectation of any solution here is that GPU performance may suffer
+due to sub-optimal linking, and the solution should provide a way to mitigate this.
+Explicit late compilation or patching may be acceptable, but it should be
+simple to perform, and applications should have control over when and how
+it is done.
+
+
+## Solution Space
+
+The following options have been considered:
+
+  . Handle this inside the implementation
+  . Additional dynamic state
+  . Separately compiled pipeline/state blobs
+
+Handling this inside the implementation would potentially solve the problem
+for the class of apps that have this issue.
+However, it takes the choice of fast-linking vs. whole program optimization
+away from the application.
+It also means fighting with drivers and performance guidelines to hit the
+right usage to trigger it on each implementation.
+
+As for dynamic state, it is likely that the list of state that is fully dynamic
+across implementations has been all but exhausted at this point.
+While vendors can choose to expose additional dynamic state as they see
+fit, solving this problem portably needs a different solution.
+Vendors trying to implement state that isn’t dynamic as if it were dynamic
+will end up doing implicit work at command recording time, leading
+inevitably to implicit compilation or patching of shaders – which is
+undesirable.
+
+Separately compiling chunks of state (e.g. individual shaders, vertex
+inputs, render passes) allows for applications to individually compile
+these chunks as they show up.
+Enough information should be given in this early step that linking these
+chunks together later has significant cost savings and can be done at record time
+if necessary.
+Implementations could “cheat” at separate chunk compilation by exposing
+this extension by keeping the create information until the final link
+step and compiling everything at once then.
+In general it is desirable for implementations to avoid late compilation, but this
+does allow the extension to be implemented more widely (including via a software layer),
+providing better consistency for developers.
+Explicitly advertising this detail could allow developers to make better
+choices about how and when these pipelines are compiled.
+
+This proposal focuses on option 3 – providing applications with the ability
+to separately compile state chunks and later link them together.
+
+
+## Proposal
+
+
+### Prior Art: VK_EXT_pipeline_library
+
+For link:{refpage}VK_KHR_ray_tracing_pipeline.html[VK_KHR_ray_tracing_pipeline], pipelines
+contain a significant number of shaders - making monolithic compilation
+very slow.
+link:{refpage}VK_KHR_pipeline_library.html[VK_KHR_pipeline_library] allowed
+applications to create partial pipelines (pipeline libraries) containing
+only a subset of the final shaders.
+These pipeline libraries can be linked together to form a final executable.
+Ray pipelines were relatively straightforward as only shaders are linked,
+and there’s no “state” for ray shaders beyond the shader groups.
+
+Graphics pipelines by comparison contain a lot of static state that needs
+to be separated carefully, retaining any “interface” information.
+However, this extension reuses the same underlying mechanism.
+
+
+### Features
+
+The following feature is exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           graphicsPipelineLibrary;
+} VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT;
+----
+
+`graphicsPipelineLibrary` is the core feature enabling this
+functionality.
+
+
+### Properties
+
+The following properties are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT {
+    VkStructure sType;
+    void*       pNext;
+    VkBool32    graphicsPipelineLibraryFastLinking;
+    VkBool32    graphicsPipelineLibraryIndependentInterpolationDecoration;
+} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT;
+----
+
+`graphicsPipelineLibraryFastLinking` indicates whether the cost of
+linking pipelines without `VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT`
+is comparable to recording a command in a command buffer, such that
+applications can link pipelines on demand while recording commands.
+If this property is not supported, linking should still be cheaper than
+a full pipeline compilation.
+
+If `graphicsPipelineLibraryIndependentInterpolationDecoration` is not
+supported, applications must provide matching interpolation decorations in
+both the last geometry stage and the fragment stage; if it is supported,
+any geometry stage decorations are ignored.
+
+
+### Dividing up the graphics state
+
+Four sets of state that have been identified as often recombined by
+applications are:
+
+  * Vertex Input Interface
+  * Pre-rasterization
+  * Post-rasterization
+  * Fragment Output Interface (including blend state)
+
+The intent is to allow each of those to be independently compiled as far as
+possible, along with relevant pieces of state that may need to match for
+the final linked pipeline.
+
+[source,c]
+----
+typedef struct VkGraphicsPipelineLibraryCreateInfoEXT {
+    VkStructureType                      sType;
+    void*                                pNext;
+    VkGraphicsPipelineLibraryFlagsEXT    flags;
+} VkGraphicsPipelineLibraryCreateInfoEXT;
+
+typedef enum VkGraphicsPipelineLibraryFlagBitsEXT {
+    VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT = 0x00000001,
+    VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = 0x00000002,
+    VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT = 0x00000004,
+    VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = 0x00000008,
+} VkGraphicsPipelineLibraryFlagBitsEXT;
+
+typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT;
+----
+
+Pipeline libraries are created for the parts specified, and any parameters
+required to create a library with those parts must be provided.
+
+For all pipeline libraries
+link:{refpage}VkPipelineCache.html[VkPipelineCache], `basePipelineHandle`,
+`basePipelineIndex`,
+link:{refpage}VkPipelineCreationFeedbackCreateInfo.html[VkPipelineCreationFeedbackCreateInfo],
+and
+link:{refpage}VkPipelineCompilerControlCreateInfoAMD.html[VkPipelineCompilerControlCreateInfoAMD]
+parameters are independently consumed and do not need to match between
+libraries or for any final pipeline.
+link:{refpage}VkPipelineCreateFlags.html[VkPipelineCreateFlags] are also
+independent, though `VK_PIPELINE_CREATE_LIBRARY_BIT_KHR` is required for
+all pipeline libraries.
+Only dynamic states that affect state consumed by a library are used,
+other dynamic states are ignored and play no part in linked pipelines.
+Where multiple pipeline libraries are built with the same required piece of
+state, those states must match exactly when linked together.
+
+The subset of
+link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]
+used to compile each kind of pipeline library is listed in the following
+sections, along with any pitfalls, quirks, or interactions that need
+calling out.
+Any state not explicitly listed for a particular library part will be
+ignored when compiling that part.
+
+[NOTE]
+.Note
+====
+There is no change to dynamic state, so if state can be made dynamic, it
+doesn’t need to be present when compiling a pipeline library part if it is
+specified as dynamic.
+====
+
+[NOTE]
+.Note
+====
+The following section is a complete list only at time of writing - see the
+specification for a more up-to-date list.
+====
+
+#### Vertex Input Interface
+
+A vertex input interface library is defined by the following state:
+
+  * link:{refpage}VkPipelineVertexInputStateCreateInfo.html[VkPipelineVertexInputStateCreateInfo]
+  * link:{refpage}VkPipelineInputAssemblyStateCreateInfo.html[VkPipelineInputAssemblyStateCreateInfo]
+
+
+#### Pre-Rasterization Shaders
+
+A pre-rasterization shader library is defined by the following state:
+
+  * A valid link:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo]
+    for each pre-rasterization shader stage used
+  * Within the link:{refpage}VkPipelineLayout.html[VkPipelineLayout], all
+    descriptor sets with pre-rasterization shader bindings if
+    `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` was specified.
+  ** If `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` was not specified,
+     the full pipeline layout must be specified.
+  * link:{refpage}VkPipelineViewportStateCreateInfo.html[VkPipelineViewportStateCreateInfo]
+  ** However, all the functionality in that structure is dynamic other than
+     the flags, and this extension allows the structure to be omitted such
+     that it is as-if it was zero-initialized.
+  * link:{refpage}VkPipelineRasterizationStateCreateInfo.html[VkPipelineRasterizationStateCreateInfo]
+  * link:{refpage}VkPipelineTessellationStateCreateInfo.html[VkPipelineTessellationStateCreateInfo]
+    is required if tessellation stages are included.
+  * link:{refpage}VkRenderPass.html[VkRenderPass] and `subpass` parameter
+  * link:{refpage}VkPipelineRenderingCreateInfo.html[VkPipelineRenderingCreateInfo] for the `viewMask` parameter - formats are ignored.
+  * link:{refpage}VkPipelineDiscardRectangleStateCreateInfoEXT.html[VkPipelineDiscardRectangleStateCreateInfoEXT]
+  * link:{refpage}VkPipelineFragmentShadingRateStateCreateInfoKHR.html[VkPipelineFragmentShadingRateStateCreateInfoKHR]
+
+
+#### Fragment Shader
+
+A fragment shader library is defined by the following state:
+
+  * A valid link:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo]
+    for the fragment shader stage.
+  * Within the link:{refpage}VkPipelineLayout.html[VkPipelineLayout], all
+    descriptor sets with fragment shader bindings if
+    `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` was specified.
+  ** If `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` was not specified,
+     the full pipeline layout must be specified.
+  * link:{refpage}VkPipelineMultisampleStateCreateInfo.html[VkPipelineMultisampleStateCreateInfo]
+    if sample shading is enabled or `renderpass` is not `VK_NULL_HANDLE`.
+  * link:{refpage}VkPipelineDepthStencilStateCreateInfo.html[VkPipelineDepthStencilStateCreateInfo]
+  * link:{refpage}VkRenderPass.html[VkRenderPass] and `subpass` parameter
+  * link:{refpage}VkPipelineRenderingCreateInfo.html[VkPipelineRenderingCreateInfo] for the `viewMask` parameter - formats are ignored.
+  * link:{refpage}VkPipelineFragmentShadingRateStateCreateInfoKHR.html[VkPipelineFragmentShadingRateStateCreateInfoKHR]
+  * link:{refpage}VkPipelineFragmentShadingRateEnumStateCreateInfoNV.html[VkPipelineFragmentShadingRateEnumStateCreateInfoNV] 
+  * link:{refpage}VkPipelineRepresentativeFragmentTestStateCreateInfoNV.html[VkPipelineRepresentativeFragmentTestStateCreateInfoNV] 
+  * Inclusion/omission of the
+    `VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR`
+    flag
+  * Inclusion/omission of the
+    `VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT`
+    flag
+
+
+#### Fragment Output Interface
+
+A fragment output interface library is defined by the following state:
+
+  * link:{refpage}VkPipelineColorBlendStateCreateInfo.html[VkPipelineColorBlendStateCreateInfo]
+  * link:{refpage}VkPipelineMultisampleStateCreateInfo.html[VkPipelineMultisampleStateCreateInfo]
+  * link:{refpage}VkRenderPass.html[VkRenderPass] and `subpass` parameter
+  * link:{refpage}VkPipelineRenderingCreateInfo.html[VkPipelineRenderingCreateInfo]
+  * link:{refpage}VkAttachmentSampleCountInfoAMD.html[VkAttachmentSampleCountInfoAMD/NV]
+  
+
+#### Interactions with extensions
+
+The required structures for each pipeline subset include anything in the `pNext`
+chains of the listed structures; any extensions to these structures are thus
+implicitly accounted for unless otherwise stated.
+includes anything in the `pNext` chains of those structures, so any
+extensions that extend these structures will be automatically accounted for.
+If any extension allows parts of
+link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]
+to be ignored, by default that part of the state will also be ignored when
+using graphics pipeline libraries.
+Any extension that extends the base
+link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]
+directly, or otherwise differs from the above implicit interactions, will
+need an explicit interaction.
+
+### Pipeline Layouts
+
+To allow descriptor sets to be independently specified for each of the two shader library types, a new pipeline layout create flag is added:
+
+[source,c]
+----
+typedef enum VkPipelineLayoutCreateFlagBits {
+    VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = 0x00000002
+} VkPipelineLayoutCreateFlagBits;
+----
+
+When specified, fragment and pre-rasterization shader pipeline libraries only need to specify the descriptor sets used by that library.
+Descriptor set layouts unused by a library may be set to `VK_NULL_HANDLE`.
+
+
+### Linking
+
+Linking is performed by including the existing
+link:{refpage}VkPipelineLibraryCreateInfoKHR.html[VkPipelineLibraryCreateInfoKHR] structure in the pNext chain of
+link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo].
+
+[source,c]
+----
+typedef struct VkPipelineLibraryCreateInfoKHR {
+    VkStructureType      sType;
+    const void*          pNext;
+    uint32_t             libraryCount;
+    const VkPipeline*    pLibraries;
+} VkPipelineLibraryCreateInfoKHR;
+----
+
+Libraries can be linked into other libraries recursively while there are
+still state blobs that can be linked together.
+E.g an application could create a library for the vertex input interface
+and pre-rasterization shaders separately, then link them into a new
+library.
+
+A newly created graphics pipeline consists of the parts defined by
+linked libraries, plus those defined by
+link:{refpage}VkGraphicsPipelineLibraryCreateInfoEXT.html[VkGraphicsPipelineLibraryCreateInfoEXT].
+Parts specified in the pipeline must not overlap those defined by
+libraries, and similarly multiple libraries must not provide the same
+parts.
+Any state required by multiple parts must match.
+
+Graphics pipelines that contain a full set of libraries are executable, may
+not be used for further linking, and must not have the
+`VK_PIPELINE_CREATE_LIBRARY_BIT_KHR` set.
+Graphics pipelines that contain only a subset of stages are not executable,
+may be used for further linking, and must have
+`VK_PIPELINE_CREATE_LIBRARY_BIT_KHR` set.
+
+If `rasterizerDiscardEnable` is enabled, the complete set of parts does
+not include fragment shader or fragment output interface
+libraries. 
+
+Two additional bits control how linking is performed:
+
+  * `VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT`
+  * `VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT`
+
+`VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT` allows applications
+to specify that linking should perform an optimization pass; when this bit
+is specified, additional optimizations will be performed at link time, and
+the resulting pipeline should perform equivalently to a pipeline created
+monolithically.
+
+To perform link time optimizations,
+`VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT` must be
+specified on all pipeline libraries that are being linked together.
+Implementations should retain any additional information needed to perform
+optimizations at the final link step when this bit is present.
+
+If the application created the final linked pipeline with pipeline layouts
+including the `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` flag,
+the final linked pipeline layout is the union of the layouts provided for
+shader stages.
+However, in the specific case that a final link is being performed between
+stages and `VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT` is specified,
+the application can override the pipeline layout with one that is compatible
+with that union but does not have the 
+`VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` flag set, allowing a
+more optimal pipeline layout to be used when generating the final pipeline.
+
+
+### Deprecating shader modules
+
+To make single-shader compilation consistent, shader modules will be
+deprecated by allowing link:{refpage}VkShaderModuleCreateInfo.html[VkShaderModuleCreateInfo] to be chained to
+link:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo], and allowing the
+link:{refpage}VkShaderModule.html[VkShaderModule] to be link:{refpage}VK_NULL_HANDLE.html[VK_NULL_HANDLE] in this case.
+Applications can continue to use shader modules as they are not
+being removed; but it’s strongly recommended to not use them.
+The primary reason for this would be to allow bypassing what is in many
+cases a useless copy, along with potential wasted storage if they are
+retained.
+There have been previous efforts to allow shader modules to be precompiled
+in some way, but this functionality is now being made available in a more
+reliable and portably agreed way, negating the need to focus efforts in
+this area moving forward.
+
+
+## Examples
+
+
+### Compilation
+
+Initial compilation can now be organised into separate chunks, allowing
+consistent earlier compilation for applications that have this information
+available separately, and potentially allows more multithreading
+opportunities for applications that do not.
+
+Below is an example of the information needed to compile a vertex shader:
+
+[source,c]
+----
+VkPipeline createVertexShader(
+    VkDevice device,
+    const uint32_t* pShader, 
+    size_t shaderSize,
+    VkPipelineCache vertexShaderCache,
+    VkPipelineLayout layout)
+{
+    VkShaderModuleCreateInfo shaderModuleCreateInfo{};
+    shaderModuleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
+    shaderModuleCreateInfo.codeSize = shaderSize;
+    shaderModuleCreateInfo.pCode = pShader;
+
+    VkGraphicsPipelineLibraryCreateInfoEXT libraryInfo{};
+    libraryInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT;
+    libraryInfo.flags = VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT;
+
+    VkPipelineShaderStageCreateInfo stageCreateInfo{};
+    stageCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+    stageCreateInfo.pNext = &shaderModuleCreateInfo;
+    stageCreateInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
+    stageCreateInfo.pName = "main";
+    
+    VkDynamicState vertexDynamicStates[2] = {
+        VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+        VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT };
+    
+    VkPipelineDynamicStateCreateInfo dynamicInfo{};
+    dynamicInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
+    dynamicInfo.dynamicStateCount = 2;
+    dynamicInfo.pDynamicStates = vertexDynamicStates;
+
+    VkGraphicsPipelineCreateInfo vertexShaderCreateInfo{}; 
+    vertexShaderCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+    vertexShaderCreateInfo.pNext = &libraryInfo;
+    vertexShaderCreateInfo.flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR |
+        VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT;
+    vertexShaderCreateInfo.stageCount = 1;
+    vertexShaderCreateInfo.pStages = &stageCreateInfo;
+    vertexShaderCreateInfo.layout = layout;
+    vertexShaderCreateInfo.pDynamicState = &dynamicInfo;
+
+    VkPipeline vertexShader;
+    vkCreateGraphicsPipelines(
+        device, vertexShaderCache, 1, &vertexShaderCreateInfo, NULL, &vertexShader);
+
+    return vertexShader;
+}
+----
+
+[NOTE]
+.Note
+====
+This example makes use of
+link:{refpage}VK_KHR_dynamic_rendering.html[VK_KHR_dynamic_rendering] to
+avoid render pass interactions.
+If that extension is not available, a render pass object and the
+corresponding subpass will also need to be provided.
+====
+
+### Linking
+
+Linking is relatively straightforward - pipeline libraries in, executable
+pipeline out, with the option of optimizing the pipeline or not.
+
+[source,c]
+----
+VkPipeline linkExecutable(
+    VkDevice device,
+    VkPipeline* pLibraries,
+    size_t libraryCount,
+    VkPipelineCache executableCache,
+    bool optimized)
+{
+    VkPipelineLibraryCreateInfoKHR linkingInfo{};
+    linkingInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR;
+    linkingInfo.libraryCount = libraryCount;
+    linkingInfo.pLibraries = pLibraries;
+
+    VkGraphicsPipelineCreateInfo executablePipelineCreateInfo{};
+    executablePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+    executablePipelineCreateInfo.pNext = &linkingInfo;
+    executablePipelineCreateInfo.flags |= optimized ?
+        VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT : 0;
+    
+    VkPipeline executable = VK_NULL_HANDLE;
+
+    vkCreateGraphicsPipelines(
+        device, executableCache, 1, & executablePipelineCreateInfo, NULL, &executable);
+    
+    return executable;
+}
+----
+
+[NOTE]
+.Note
+====
+The behavior of the pipeline cache in this scenario is subject to specific
+behavior depending on implementation properties and whether fast or
+optimized linking is being used.
+This is spelled out in the spec, but summarised briefly again here:
+
+If fast linking is being performed, the implementation should only lookup
+into the cache if it is expected that will be faster than linking.
+If linking is faster, then the cache lookup and any writes to the cache should be skipped.
+The aim of this is to ensure that fast linking is always as fast as
+possible.
+If a cache lookup is performed, optimized pipelines in the cache should be
+returned preferentially to any fast-linked pipelines.
+
+If optimized linking is being performed, the implementation should not
+generate a hit on a suboptimal fast linked pipeline, instead creating a new
+pipeline and corresponding cache entry. 
+====
+
+
+## Issues
+
+
+### RESOLVED: Should the pre-rasterization stages be separated?
+
+While splitting the geometry stages may be possible, it’s a significant
+amount of additional work for many vendors, the advantage for most
+developers is unclear, and it would be difficult to make some of the
+guarantees in this extension.
+
+
+### RESOLVED: What is the expected usage model?
+
+When a novel shader/stage combination is seen that requires compilation, it
+should be compiled into a separate pipeline library as early as possible;
+this should be possible alongside usual material/object loading
+(e.g. texture/mesh streaming).
+If an application has its own material cache, the library should be cached
+there.
+Applications should still use pipeline caches to amortize compilation
+across similar stage blobs but should avoid mixing different stage types in
+the same link:{refpage}VkPipelineCache.html[VkPipelineCache], to avoid unnecessary lookup overhead.
+
+Basic linking should then be done as early as the application is able.
+Applications should ideally store/cache this pipeline with relevant objects.
+Using a link:{refpage}VkPipelineCache.html[VkPipelineCache] for this suboptimal pipeline is recommended;
+implementations where this would provide no benefit should ignore the cache
+lookup request for fast linking.
+
+Once a basic link is done, the application should schedule a task for a
+separate thread to create an optimized pipeline.
+This should use pipeline caches in the same manner as existing monolithic
+compilation, sharing this cache with fast-linked pipelines.
+Implementations should prefer returning optimized pipelines from these
+caches.
+Applications should switch to the optimized pipeline as soon as they are
+available.
+
+
+### RESOLVED: Why is there suggested behavior for the implementation of pipeline caches instead of letting the caching be driven by the application?
+
+Work to change the way pipelines are cached is ongoing; to avoid scope creep
+the minimum set of features required to ensure things worked were added.
+A future extension may change how a lot of this works, so it was undesirable to
+design something that would be thrown away later.
+
+
+### RESOLVED: What are the downsides to using unoptimized pipelines?
+
+A fast-linked pipeline may have a significant device performance penalty
+compared to the final pipeline on some implementations.
+Some vendors may have a negligible performance penalty; others will have
+performance penalties differing based on which shader stages are compiled
+together.
+A rough estimate given by vendors is that it could be as bad as a 50%
+penalty in the general case, with outliers performing even worse.
+
+As general advice, applications should be aiming to keep the amount of work
+in each frame performed by unoptimized pipelines relatively low (<10%);
+profiling may be necessary to identify problematic areas.
+Developers are strongly encouraged create optimized pipelines as soon as
+they are able to replace the linked pipeline.
+Relying completely on fast linked pipelines could result in unacceptable
+performance degradation on some implementations.
+
+
+### RESOLVED: Are there any interactions with specialization constants?
+
+No. This extension doesn’t change how specialization constants work – they
+work as they do for existing pipelines.
+If they’re provided, implementations are free to specialize the pipeline or
+not, and cache pipelines that are specialized, unspecialized, or both.
+Specialization constants must be provided alongside the shader stages using
+them and cannot be provided at link time.
+This may be something we want to address in a future extension.
+
+
+### RESOLVED: Are there any interface matching requirements that will need to change, like SSOs in OpenGL/ES?
+  
+Some implementations require the interpolation decorations in the last
+geometry shader stage if pipeline libraries are used, and this is
+advertised by the
+`graphicsPipelineLibraryIndependentInterpolationDecoration` property.
+It is expected that these implementations are serving markets where OpenGL
+ES is dominant, where this requirement was never dropped for separate
+shader objects, unlike OpenGL.
+
+
+### RESOLVED: Should we allow passing SPIR-V directly into pipeline creation?
+
+Yes. This simplifies compilation, avoids an unnecessary copy, and brings developers and implementations onto the same page.
+
+
+### RESOLVED: Should we advertise a property for “free link” vs. “fast link”?
+
+Yes, as developers may want to adjust the way they manage pipelines.
+If linking is more or less free, the expectation is that applications may
+link pipelines on demand when recording draw calls.
+If linking is going to take more time, they may try to more aggressively
+pre-cache pipelines.
+This has been added as the `graphicsPipelineLibraryFastLinking`
+property.
+
+Implementation and developer guidance is that if this feature bit is
+advertised, applications should be able to link on demand, so the cost of
+linking should be comparable to recording commands in a command buffer.
+
+
+### RESOLVED: Does anyone need the depth/stencil format to be provided with the depth bias state?
+
+The depth format affects how depth bias is applied, but these are currently provided in separate parts of the pipeline.
+Nobody has claimed this to be a problem.
+
+
+### RESOLVED: With the recommendation to create an optimized pipeline as well as a fast linked pipeline, will this lead to additional memory consumption?
+
+Caches containing pipeline libraries will necessarily increase the total memory consumption of compiled pipelines, as applications will generally try to keep these available while pipeline could be streamed in/out.
+Implementations may be able to use data in the library caches for the final pipelines in some circumstances, which could help mitigate it - but this is not guaranteed and will vary by vendor.
+
+Fast-linked pipelines should not contribute to the total memory consumption if applications destroy the fast-linked pipeline once an optimized version exists.
+
+Improvements to pipeline caches allowing selective eviction of individual caches could help with memory management here, but as this intersects with other known pipeline cache problems, this should be dealt with in a separate extension.
+
+
+### RESOLVED: Should the link time optimization bits apply to other pipeline libraries (e.g. ray tracing)?
+
+Yes, but it will not necessarily be subject to the same quality guarantees. Ray tracing pipeline libraries were not designed with this directly in mind, so while implementations should make use of these bits as best they can, it is not possible to make the same quality guarantees as for graphics pipelines.
+
+Any future extensions using the pipeline library interface should be aware of these interactions and try to follow the intent of these bits as much as possible.
+
+
+### RESOLVED: Does the shader module deprecation apply to other pipelines?
+
+Yes.
+
+
+### RESOLVED: Should `VkPipelineDepthStencilStateCreateInfo` be part of the fragment shader state or fragment output interface state?
+
+Some vendors will make use of this information if it is available and would rather not see it move - however notably all of this state can be made dynamic. Applications wanting to avoid setting this state with the fragment shader library should use this dynamic state.
+
+
+### RESOLVED: Should `VkPipelineMultisampleStateCreateInfo` be required, even when the fragment shader does not make use of multisampling shader features?
+
+The fragment shader library only needs this information when sample shading is enabled.
+
+
+### RESOLVED: Should `VkPipelineMultisampleStateCreateInfo` be part of the fragment output interface instead?
+
+Moving it to the output interface removes the need to create multiple fragment shader libraries for different MSAA rates, which some applications do as a part of dynamic performance tuning.
+This only works when used in conjunction with dynamic rendering; when render pass objects are used, the sample rate will effectively be sourced from any subpass attachments due to validation constraints.
+This could be made to work with subpasses with no attachments, but the additional complexity of adding that path had no clear benefit, so is disallowed.
+
+
+### RESOLVED: Should we add an explicit result code to pipeline creation to indicate that a pipeline compiled with link time optimization has been returned?
+
+No, as the complexity of handling this does not clearly translate to significant application wins.
+
+
+### RESOLVED: Can pipeline caches return optimized pipelines without the `VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT` set?
+
+Not unconditionally - if an implementation does not do anything with that flag then yes, but there is a functional difference then it cannot. I.e. the same as other pipeline state.
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_host_image_copy.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_host_image_copy.adoc
new file mode 100644
index 0000000..9c8bb0d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_host_image_copy.adoc
@@ -0,0 +1,289 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_host_image_copy
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document identifies inefficiencies with image data initialization and proposes an extension to improve it.
+
+== Problem Statement
+
+Copying data to optimal-layout images in Vulkan requires staging the data in a buffer first, and using the GPU to perform the copy.
+Similarly, copying data out of an optimal-layout image requires a copy to a buffer.
+This restriction can cause a number of inefficiencies in certain scenarios.
+
+Take initializing an image for the purpose of sampling as an example, where the source of data is a file.
+The application has to load the data to memory (one copy), then initialize the buffer (second copy) and finally copy over to the image (third copy).
+Applications can remove one copy from the above scenario by creating and memory mapping the buffer first and loading the image data from disk directly into the buffer.
+This is not always possible, for example because the streaming and graphics subsystems of a game engine are independent, or in the case of layering, because the layer is given a pointer to the data which is already loaded from disk.
+
+The extra copy involved due to it going through a buffer is not just a performance cost though.
+The buffer that is allocated for the image copy is at least as big as the image itself, and lives for a short duration until the copy is confirmed to be done.
+When an application performs a large number of image initialization at the same time, such as a game loading assets, it will momentarily have twice as much memory allocated for its images (the images themselves and their staging buffers), greatly increasing its peak memory usage.
+This can lead to out-of-memory errors on some devices.
+
+This document proposes an extension that allows image data to be copied from/to host memory directly, obviating the need to perform the copy through a buffer and save on memory.
+While copying to an optimal layout image on the CPU has its own costs, this extension can still lead to better performance by allowing the CPU to perform some copies in parallel with the GPU.
+
+== Proposal
+
+An extension is proposed to address this issue.
+The extension's API is designed to be similar to buffer-image and image-image copies.
+
+Introduced by this API are:
+
+Features, advertising whether the implementation supports host->image, image->host and image->image copies:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceHostImageCopyFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           hostImageCopy;
+} VkPhysicalDeviceHostImageCopyFeaturesEXT;
+----
+
+Query of which layouts can be used in to-image and from-image copies:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceHostImageCopyPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           copySrcLayoutCount;
+    VkImageLayout*     pCopySrcLayouts;
+    uint32_t           copyDstLayoutCount;
+    VkImageLayout*     pCopyDstLayouts;
+    uint8_t            optimalTilingLayoutUUID[VK_UUID_SIZE];
+    VkBool32           identicalMemoryTypeRequirements;
+} VkPhysicalDeviceHostImageCopyPropertiesEXT;
+----
+
+In the above, `optimalTilingLayoutUUID` can be used to ensure compatible data layouts between memory and images when using `VK_HOST_IMAGE_COPY_MEMCPY_EXT` in the below commands.
+`identicalMemoryTypeRequirements` specifies whether using `VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT` may affect the memory type requirements of the image or not.
+
+Defining regions to copy to an image:
+
+[source,c]
+----
+typedef struct VkCopyMemoryToImageInfoEXT {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkHostImageCopyFlagsEXT       flags;
+    VkImage                       dstImage;
+    VkImageLayout                 dstImageLayout;
+    uint32_t                      regionCount;
+    const VkMemoryToImageCopyEXT* pRegions;
+} VkCopyMemoryToImageInfoEXT;
+----
+
+In the above, `flags` may be `VK_HOST_IMAGE_COPY_MEMCPY_EXT`, in which case the data in host memory should have the same swizzling layout as the image.
+This is mainly useful for embedded systems where this swizzling is known and well defined outside of Vulkan.
+
+Defining regions to copy from an image:
+
+[source,c]
+----
+typedef struct VkCopyImageToMemoryInfoEXT {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkHostImageCopyFlagsEXT       flags;
+    VkImage                       srcImage;
+    VkImageLayout                 srcImageLayout;
+    uint32_t                      regionCount;
+    const VkImageToMemoryCopyEXT* pRegions;
+} VkCopyImageToMemoryInfoEXT;
+----
+
+In the above, `flags` may be `VK_HOST_IMAGE_COPY_MEMCPY_EXT`, in which case the data in host memory will have the same swizzling layout as the image.
+
+Defining regions to copy between images
+
+[source,c]
+----
+typedef struct VkCopyImageToImageInfoEXT {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkHostImageCopyFlagsEXT       flags;
+    VkImage                       srcImage;
+    VkImageLayout                 srcImageLayout;
+    VkImage                       dstImage;
+    VkImageLayout                 dstImageLayout;
+    uint32_t                      regionCount;
+    const VkImageCopy2*           pRegions;
+} VkCopyImageToImageInfoEXT;
+----
+
+In the above, `flags` may be `VK_HOST_IMAGE_COPY_MEMCPY_EXT`, in which case data is copied between images with no swizzling layout considerations.
+Current limitations on source and destination images necessarily lead to raw copies between images, so this flag is currently redundant for image to image copies.
+
+Defining the copy regions themselves:
+
+[source,c]
+----
+typedef struct VkMemoryToImageCopyEXT {
+    VkStructureType             sType;
+    void*                       pNext;
+    const void*                 pHostPointer;
+    uint32_t                    memoryRowLength;
+    uint32_t                    memoryImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkMemoryToImageCopyEXT;
+
+typedef struct VkImageToMemoryCopyEXT {
+    VkStructureType             sType;
+    void*                       pNext;
+    void*                       pHostPointer;
+    uint32_t                    memoryRowLength;
+    uint32_t                    memoryImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkImageToMemoryCopyEXT;
+----
+
+The following functions perform the actual copy:
+
+[source,c]
+----
+VkResult vkCopyMemoryToImageEXT(VkDevice device, const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo);
+VkResult vkCopyImageToMemoryEXT(VkDevice device, const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo);
+VkResult vkCopyImageToImageEXT(VkDevice device, const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo);
+----
+
+Images that are used by these copy instructions must have the `VK_IMAGE_USAGE_HOST_TRANSFER_BIT` usage bit set.
+
+Additionally, to avoid having to submit a command just to transition the image to the correct layout, the following function is introduced to do the layout transition on the host.
+The allowed layouts are limited to serve this purpose without requiring implementations to implement complex layout transitions.
+
+[source,c]
+----
+typedef struct VkHostImageLayoutTransitionInfoEXT {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkImage                    image;
+    VkImageLayout              oldLayout;
+    VkImageLayout              newLayout;
+    VkImageSubresourceRange    subresourceRange;
+} VkHostImageLayoutTransitionInfoEXT;
+
+VkResult vkTransitionImageLayoutEXT(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfoEXT *pTransitions);
+----
+
+The allowed values for `oldLayout` are:
+
+- `VK_IMAGE_LAYOUT_UNDEFINED`
+- `VK_IMAGE_LAYOUT_PREINITIALIZED`
+- Layouts in `VkPhysicalDeviceHostImageCopyPropertiesEXT::pCopySrcLayouts`
+
+The allowed values for `newLayout` are:
+
+- Layouts in `VkPhysicalDeviceHostImageCopyPropertiesEXT::pCopyDstLayouts`.
+  - This list always includes `VK_IMAGE_LAYOUT_GENERAL`
+
+---
+
+When `VK_HOST_IMAGE_COPY_MEMCPY_EXT` is used in copies to or from an image with `VK_IMAGE_TILING_OPTIMAL`, the application may need to query the memory size needed for copy.
+The link:{refpage}vkGetImageSubresourceLayout2EXT.html[vkGetImageSubresourceLayout2EXT] function can be used for this purpose:
+
+[source,c]
+----
+void vkGetImageSubresourceLayout2EXT(
+    VkDevice                       device,
+    VkImage                        image,
+    const VkImageSubresource2EXT*  pSubresource,
+    VkSubresourceLayout2EXT*       pLayout);
+----
+
+The memory size in bytes needed for copies using `VK_HOST_IMAGE_COPY_MEMCPY_EXT` can be retrieved by chaining `VkSubresourceHostMemcpySizeEXT` to `pLayout`:
+
+[source,c]
+----
+typedef struct VkSubresourceHostMemcpySizeEXT {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkDeviceSize               size;
+} VkSubresourceHostMemcpySizeEXT;
+----
+
+=== Querying support
+
+To determine if a format supports host image copies, `VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT` is added.
+
+=== Required formats
+
+All color formats that support sampling are required to support
+`VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT`, with some exceptions for externally defined formats:
+
+- DRM format modifiers
+- Android hardware buffers
+
+=== Limitations
+
+Images in optimal layout are often swizzled non-linearly.
+When copying between images and buffers, the GPU can perform the swizzling and address translations in hardware.
+When copying between images and host memory however, the CPU needs to perform this swizzling.
+As a result:
+
+- The implementation may decide to use a simpler and less efficient layout for the image data when `VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT` is specified.
+  - If `optimalDeviceAccess` is set however (see below), the implementation informs that the memory layout
+    is equivalent to an image that does not enable `VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT` from a performance perspective
+    and applications can assume that host image copy is just as efficient as using device copies for resources which are
+    accessed many times on device.
+  - Equivalent performance is only expected within a specific memory type however.
+    On a discrete GPU for example, non-device local memory is expected to be slower to access than device-local memory.
+- The copy on the CPU may indeed be slower than the double-copy through a buffer due to the above swizzling logic.
+
+Additionally, to perform the copy, the implementation must be able to map the image's memory which may limit the memory type the image can be allocated from.
+
+It is therefore recommended that developers measure performance and decide whether this extension results in a performance gain or loss in their application.
+Unless specifically recommended on a platform, it is _not_ generally recommended for applications to perform all image copies through this extension.
+
+=== Querying performance characteristics
+
+[source,c]
+----
+typedef struct VkHostImageCopyDevicePerformanceQueryEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           optimalDeviceAccess;
+    VkBool32           identicalMemoryLayout;
+} VkHostImageCopyDevicePerformanceQueryEXT;
+----
+
+This struct can be chained as an output struct in `vkGetPhysicalDeviceImageFormatProperties2`.
+Given certain image creation flags, it is important for applications to know if using `VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT`
+has an adverse effect on device performance.
+
+This query cannot be a format feature flag, since image creation information can affect this query.
+For example, an image that is only created with `VK_IMAGE_USAGE_SAMPLED_BIT` and `VK_IMAGE_USAGE_TRANSFER_DST_BIT`
+might not have compression at all on some implementations, but adding `VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT` would change this query.
+Other implementations may want to use compression even for `VK_IMAGE_USAGE_TRANSFER_DST_BIT`.
+
+`identicalMemoryLayout` is intended for the gray area where the image is just swizzled in a slightly different pattern to aid host access,
+but fundamentally similar to non-host image copy paths, such that it is unlikely that performance changes in any meaningful way
+except pathological situations.
+The inclusion of this field gives more leeway to implementations that would like to
+set `optimalDeviceAccess` for an image without having to guarantee 100% identical memory layout, and allows applications to choose host image copies
+in that case, knowing that performance is not sacrificed.
+
+As a baseline, block-compressed formats are required to set `optimalDeviceAccess` to `VK_TRUE`.
+
+== Issues
+
+=== RESOLVED: Should other layouts be allowed in `VkHostImageLayoutTransitionInfoEXT`?
+
+Specifying `VK_IMAGE_USAGE_HOST_TRANSFER_BIT` effectively puts the image in a physical layout where `VK_IMAGE_LAYOUT_GENERAL` performs similarly to the `OPTIMAL` layouts for that image.
+Therefore, it was deemed unnecessary to allow other layouts, as they provide no performance benefit.
+In practice, especially for read-only textures, a host-transferred image in the `VK_IMAGE_LAYOUT_GENERAL` layout could be just as efficient as an image transitioned to `VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL`.
+`VkHostImageCopyDevicePerformanceQueryEXT` can be used to query whether using `VK_IMAGE_USAGE_HOST_TRANSFER_BIT` can be detrimental to performance.
+If it is, performance measurements are recommended to ensure the gains from this extension outperform the potential losses.
+
+=== RESOLVED: Should queue family ownership transfers be supported on the host as well?
+
+As long as the allowed layouts are limited to the ones specified above, the actual physical layout of the image will not vary between queue families, and so queue family ownership transfers are currently unnecessary.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_2d_array_of_3d.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_2d_array_of_3d.adoc
new file mode 100644
index 0000000..76f9c12
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_2d_array_of_3d.adoc
@@ -0,0 +1,57 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_EXT_image_2d_array_of_3d
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes adding support for creating 2D views of 3D images.
+
+## Problem Statement
+
+Other graphics APIs, such as OpenGL, provide functionality for creating two dimensional views of three dimensional images for use in shaders.
+When performing similar operations in Vulkan, this functionality may be emulated in shaders, but many implementations are capable of handling it at the execution level to avoid needing more shader variants or uniform or push constant data.
+
+This proposal aims to provide this functionality.
+
+
+## Solution Space
+
+This functionality could alternatively be emulated with:
+ . Shader variants which each access the intended slice of the 3D image
+ . The use of either uniform or push constant data to dynamically access the intended slice of the 3D image
+
+Neither of these methods solves the more fundamental problem of having an API mismatch which complicates both transitioning from OpenGL to Vulkan and emulating OpenGL on Vulkan.
+
+## Proposal
+
+### API Features
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           image2DViewOf3D;
+    VkBool32           sampler2DViewOf3D;
+} VkPhysicalDeviceImage2DViewOf3DFeaturesEXT;
+----
+
+`image2DViewOf3D` is the core feature enabling this extension's functionality.
+`sampler2DViewOf3D` indicates that the driver supports 2D views of 3D textures.
+
+
+Using the `VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT` flag when creating a 3D image enables this functionality for that image.
+
+
+## Examples
+
+As an example, if an application creates a `VkImage` of type `VK_IMAGE_TYPE_3D` with two layers and wants to only access the zero-th layer in a shader, `VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT` can be used to create the image. A `VkImageView` is then created with `VK_IMAGE_VIEW_TYPE_2D`, and the shader can then access the image data using two-dimensional image operations.
+
+## Issues
+
+No known issues.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_compression_control.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_compression_control.adoc
new file mode 100644
index 0000000..9ca8f21
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_compression_control.adoc
@@ -0,0 +1,250 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_image_compression_control
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes adding support for fixed-rate, or 'lossy', image compression.
+
+== Problem Statement
+
+Many existing implementations support some form of lossless image or framebuffer compression.
+Implementations manage this transparently to applications, which is possible since the output is bit-exact.
+(The use of image compression (or not) can result in performance differences that are visible in profiling tools etc.)
+
+Fixed-rate compression formats have so far not been supported.
+As the term implies, these compression techniques are done at defined bitrates, and may therefore lose information compared to an uncompressed result.
+Since results are generally not bit-exact when compared to an uncompressed result, we do not want implementations to enable these algorithms without application opt-ins.
+
+The fixed-rate compression algorithms are implementation-specific and not standardized.
+We want to expose an API mechanism that abstracts the implementation-specific details.
+
+Further, implementation may not support all possible compression rates and may not be able to use the requested compression rates in all cases (e.g. depending on image usage flags).
+We want to expose a query to let applications understand what compression rates are available and what rates are applied to any given image.
+
+== Solution Space
+
+To enable fixed-rate compression, two options were considered:
+
+ . Add the option to enable compression on existing formats
+ . Add new fixed-rate compressed formats
+
+Adding new formats would follow the precedent of the block compressed formats (ASTC, ETC2, BCn).
+The downside of this approach is that it would introduce a very large set of new formats, in particular because implementations typically support a few different compression rates per format.
+
+This proposal uses the existing formats, but allows the application to opt in to compression for each of them.
+
+The more difficult question is how to describe the compression rates. Options that were considered:
+
+ . Describe them as bytes per 'block' of compressed data. We would likely need to describe the dimensions of each block as well as the size.
+ . Describe them as percentages of the uncompressed size. The percentages would not always be integer sizes and hard to express as enumerants.
+ . Describe them informally as low, medium, high. This would not be very informative.
+ . Describe them as bits per pixel. This has the issue that the meaning of N bits per pixel is very different between a 1-component and a 4-component format.
+ . Describe them as bits per component. This is new terminology.
+
+In the end, the "bits per component" terminology was chosen so that the same compression rate describes the same degree of compression applied to formats that differ only in the number of channels.
+For example, `VK_FORMAT_R8G8_UNORM` compressed to half its original size is a rate of 4 bits per channel, 8 bits per pixel.
+`VK_FORMAT_R8G8B8A8_UNORM` compressed to half _its_ original size is 4 bits per channel, 16 bits per pixel.
+Both of these cases could be requested with `VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT`.
+
+== Proposal
+
+=== API Features
+
+Implementations may support fixed-rate compression for any image, including swapchain images.
+To allow  the implementation of the WSI to be independent from the ICD, the feature is split in two extensions:
+ . VK_EXT_image_compression_control
+ . VK_EXT_image_compression_control_swapchain
+
+The following features are exposed by the VK_EXT_image_compression_control extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControl;
+} VkPhysicalDeviceImageCompressionControlFeaturesEXT;
+----
+
+`imageCompressionControl` is the main feature enabling this extension's functionality and must be supported if this extension is supported.
+
+The following features are exposed by the VK_EXT_image_compression_control_swapchain extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageCompressionControlSwapchain;
+----
+
+`imageCompressionControlSwapchain` specifies if the compression can be controlled for swapchain images and must be supported if this extension is supported.
+
+=== Enabling compression
+
+To enable compression for an image, this structure can be passed in the pNext chain of `VkImageCreateInfo`:
+
+[source,c]
+----
+typedef struct VkImageCompressionControlEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkImageCompressionFlagsEXT              flags;
+    uint32_t                                compressionControlPlaneCount;
+    VkImageCompressionFixedRateFlagsEXT*    pFixedRateFlags;
+} VkImageCompressionControlEXT;
+----
+
+The `flags` parameter specifies one of the following values:
+
+[source,c]
+----
+typedef enum VkImageCompressionFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFlagBitsEXT;
+----
+
+Here:
+
+  * `VK_IMAGE_COMPRESSION_DEFAULT_EXT` specifies the default behavior, where fixed-rate compression is disallowed, and is equivalent to not passing this extension structure.
+  * `VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT` specifies that the implementation can pick a default fixed-rate compression rate. This option can be used by applications that want to enable some level of fixed-rate compression without having to query all the implementation-specific details.
+  * `VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT` specifies that the fixed-rate compression rates are chosen explicitly, and provided in the `pFixedRateFlags` parameters.
+  * `VK_IMAGE_COMPRESSION_DISABLED_EXT` specifies that all compression should be disabled. This is not intended for shipping applications, but may be useful for profiling and debugging.
+
+If `flags` is VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT the compression rate is specifies by the `compressionControlPlaneCount` and `pFixedRateFlags` parameters.
+The `compressionControlPlaneCount` parameter is included to support YCbCr formats where implementations may allow the compression rate to be different per plane.
+If the value of this parameter is `1`, then the value of `pFixedRateFlags` specifies the compression rate for all planes.
+
+Each element of `pFixedRateFlags` can be a combination of the following values:
+
+[source,c]
+----
+typedef enum VkImageCompressionFixedRateFlagBitsEXT {
+    VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000,
+    VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkImageCompressionFixedRateFlagBitsEXT;
+----
+
+Where "BPC" is an abbreviation for "Bits Per Component".
+
+If more than one bit is set in an element of `pFixedRateFlags`, the implementation should choose the smallest (most compressed) rate supported.
+
+If the imageCompressionControlSwapchain feature is supported, the `VkImageCompressionControlEXT` structure can be passed in the pNext chain of VkSwapchainCreateInfoKHR to control the compression rate for swapchain images.
+
+
+=== Querying compression
+
+To query the compression properties that actually were applied to an image, include the following structure in the pNext chain of the VkSubresourceLayout2EXT structure in a call to vkGetImageSubresourceLayout2EXT:
+
+[source,c]
+----
+typedef struct VkImageCompressionPropertiesEXT {
+    VkStructureType                        sType;
+    void*                                  pNext;
+    VkImageCompressionFlagsEXT             imageCompressionFlags;
+    VkImageCompressionFixedRateFlagsEXT    imageCompressionFixedRateFlags;
+} VkImageCompressionPropertiesEXT;
+----
+
+This structure can also be passed in the pNext chain of `VkImageFormatProperties2` and `VkSurfaceFormat2KHR` to query what compression rates are available for a given format.
+
+vkGetImageSubresourceLayout2EXT is a new command that is identical to vkGetImageSubresourceLayout but with extensible input and output structures.
+
+== Examples
+
+The least invasive way to opt-in to some form of fixed-rate compression would be:
+
+[source,c]
+----
+VkImageCreateInfo createInfo = {};
+// fill in createInfo as usual
+
+VkImageCompressionControlEXT compressionControl = {}
+compressionControl.flags = VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT;
+createInfo.pNext = &compressionControl;
+
+vkCreateImage(device, &createInfo, NULL, &image);
+----
+
+To check if what level of compression was applied:
+
+[source,c]
+----
+VkImageCompressionPropertiesEXT compressionProperties = {};
+VkImageSubresource2EXT imageSubresource = {};
+imageSubsource.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+imageSubsource.imageSubresource.mipLevel = 0;
+imageSubsource.imageSubresource.arrayLayer = 0;
+VkSubresourceLayout2EXT subresourceLayout = {};
+subresourceLayout.pNext = &compressionProperties;
+
+vkGetImageSubresourceLayout2EXT(device, image, &imageSubresource, &subresourceLayout);
+
+if (compressionProperties.imageCompressionFlags == VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT)
+{
+    // fixed-rate compression was applied
+    // the rate is given by compressionProperties.imageCompressionFixedRateFlags
+}
+----
+
+To query what rates the implementation supports:
+
+[source,c]
+----
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
+    VkImageFormatProperties2*                   pImageFormatProperties);
+
+VkPhysicalDeviceImageFormatInfo2 imageFormatInfo = {};
+// fill in imageFormatInfo as usual
+
+VkImageFormatProperties2 imageFormatProperties = {};
+VkImageCompressionPropertiesEXT compressionProperties = {};
+imageFormatProperties.pNext = &compressionProperties;
+
+vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &imageFormatInfo, &imageFormatProperties);
+
+// compressionProperties describes the supported compression rates
+// this can be used to specify explicit compression rates when the image is created
+----
+
+== Issues
+
+=== RESOLVED: Should we split out the swapchain functionality to a separate extension?
+
+Yes. This is done allow the implementation of the WSI to be independent from the ICD.
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_sliced_view_of_3d.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_sliced_view_of_3d.adoc
new file mode 100644
index 0000000..e668657
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_image_sliced_view_of_3d.adoc
@@ -0,0 +1,88 @@
+// Copyright 2022-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_EXT_image_sliced_view_of_3d
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document describes a proposal for adding support for taking a sliced view of a 3D image,
+where the result is a 3D image view with a restricted range of depth slices.
+
+## Problem Statement
+
+D3D11 and D3D12 allows applications to create a 3D UAV (storage image) descriptor where the depth range is offset and clamped.
+For API docs, see https://docs.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_tex3d_uav[D3D12_TEX3D_UAV].
+
+While this can be emulated by passing down metadata to the shader and doing manual range computation,
+it is not as efficient as using the existing hardware support for this feature, especially when faced
+with descriptor indexing, which is essentially required for D3D12 emulation.
+
+## Solution Space
+
+The proposed solution needs to be able to create a `VkImageView` where we view a range of the depth slices.
+There are two main options for exposing this:
+
+  . Allowing 2D array view of a 3D images, even when used for storage image
+    purposes. Shader code can rewrite 3D storage image types to 2D array
+    storage images without any significant change. Functionally, the
+    difference is minimal.
+  . Specifying the offset and range when creating a 3D image view of a 3D
+    image, using an extension structure at image view creation time.
+
+2D array support was rejected from `VK_EXT_image_2d_view_of_3d` due to lack of universal hardware support,
+and this idea would have similar concerns. There are also potential performance issues allowing
+2D array views on 3D. We still expect to access the 3D resource as a 3D resource in D3D12 emulation,
+so it seems more direct to expose 3D views rather than 2D array.
+It also has the advantage of not having to modify shader code to accommodate this API feature.
+
+## Proposal
+
+### New Vulkan feature
+
+```c
+typedef struct VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imageSlicedViewOf3D;
+} VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT;
+```
+
+### New `VkImageViewSlicedCreateInfoEXT` struct and slice enum
+
+```c
+#define VK_REMAINING_3D_SLICES_EXT        (~0U)
+
+typedef struct VkImageViewSlicedCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           sliceOffset;
+    uint32_t           sliceCount;
+} VkImageViewSlicedCreateInfoEXT;
+```
+
+`VkImageViewSlicedCreateInfoEXT` changes how 3D images are accessed in shaders.
+Normally, the Z coordinate is bounded by the depth value specified in the `VkExtent3D` of `VkImageCreateInfo`.
+If this struct is appended to the `pNext` chain when creating an image view, however,
+any Z coordinate used to access the image view in a shader is offset by `sliceOffset`.
+`sliceCount` controls how many depth slices are part of the view. Accessing texels outside this range is considered
+out of bounds and it handled by robustness with the usual rules.
+
+### Enforcing single mip level
+
+When expressing ranges in terms of the integer Z coordinate, this only works if the image view is restricted to a single mip level.
+This matches D3D12 restrictions, which does not support the concept of multiple UAV levels.
+The Z coordinate range is not adjusted based on log2 reduction.
+
+### Only storage image support
+
+This feature is only supported for UAVs on D3D12, and in Vulkan it is only supported on storage images.
+Similar to `VK_EXT_image_view_min_lod`, the 3D slice is ignored when the descriptor is consumed with a descriptor type
+that is not supported.
+
+## Issues
+
+### RESOLVED: Do we need another image creation flag?
+
+No.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_legacy_dithering.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_legacy_dithering.adoc
new file mode 100644
index 0000000..5866c4c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_legacy_dithering.adoc
@@ -0,0 +1,173 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_legacy_dithering
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal regards layering OpenGL over Vulkan, and provides an efficient
+path to implement OpenGL dithering on Vulkan.
+
+== Problem Statement
+
+Dithering is an important technique necessary to remove color banding, which in
+itself is an artifact of low-frequency sampling (by our eyes) of a step
+function (jumps from one color value to another due to quantization).
+This technique is particularly useful to improve the visuals of gradients
+quantized over a low-precision format (for example
+`VK_FORMAT_R5G6B5_UNORM_PACK16`), or even the highest-precision formats when
+the two ends of the gradient are close in value (for example sky at late dusk).
+
+**Dithering is best done by the Vulkan application.**
+For example, an application rendering to a swapchain with `R5G6B5` format can
+render instead to an `R8G8B8A8` (or even `B10G11R11`) lazily-allocated image in
+one subpass, then apply dithering in a second subpass along with other
+necessary work such as color space transformations.
+
+In OpenGL and OpenGL ES, the `GL_DITHER` state is enabled by default and
+dithering is made the responsibility of the driver.
+However, the dithering algorithm itself is undefined, and explicitly allows "no
+dithering" as a possible algorithm.
+As such, some vendors do not provide dithering in OpenGL at all, while others
+do, especially on some tile-based hardware.
+Those that do provide dithering implement it differently, including using
+different dithering matrix sizes, or performing dithering at different times
+(e.g. fragment output vs render pass store operation).
+Most importantly, devices that apply dithering in OpenGL have specialized
+hardware to perform this efficiently.
+
+As far as OpenGL layering is concerned, no dithering is technically an
+acceptable algorithm.
+However, in practice, due to this state being on by default and implemented by
+a number of vendors, numerous Android applications have come to (accidentally
+or otherwise) rely on the visual improvements dithering brings.
+It is therefore necessary for an OpenGL layer over Vulkan to provide a
+dithering implementation.
+
+== Solution Space
+
+=== Emulation Through Per-Draw Dithering
+
+Dithering could be emulated by applying the Bayer matrix at the end of the
+fragment shader.
+This can potentially be constrained to low-bit formats to limit its effect on
+performance and shader size.
+
+Pros:
+
+- Easy to implement by adding code to the fragment shader during shader
+  compilation.
+
+Cons:
+
+- When enabled, the dithering cost is paid extra for each pixel that is
+  overdrawn.
+- As dithering is non-temporal per the OpenGL spec, overdraw with additive
+  blending can accentuate the dithering that is applied, making the image look
+  grainy.
+- Dithering alpha can create visual artifacts as the background is leaked into
+  an otherwise completely opaque shape when blending is enabled.
+  * Quantizing alpha in the shader itself can alleviate this.
+- The generated shader size is increased, with the usual caveats regarding
+  performance.
+
+=== Emulation Through Per-Subpass Dithering
+
+Dithering can also be applied at the end of the subpass, closely emulating what
+some hardware do.
+For this to work, a post-process subpass needs to be added that applies
+dithering.
+The original subpass needs to render to a lazily-allocated image with higher
+precision.
+
+Pros:
+
+- Performant when possible.
+- No issues with blending.
+
+Cons:
+
+- Costly on non-tiled-based hardware both in memory and performance.
+- Relatively complicated to code.
+- Currently, Vulkan provides no feedback to ensure this is done efficiently
+  (e.g. whether the tile-based Vulkan driver could successfully merge and
+   execute the two subpasses on the tile, without implicit splits such as due
+   to memory constraints).
+- The high and low precision versions of the attachment live on the tile memory
+  at the same time for the final subpass, increasing tile memory usage and
+  potentially degrading performance (if the tile size has to change because of
+  that).
+
+=== Exposing Dithering Hardware Through a Vulkan Extension
+
+For vendors that support dithering in hardware, exposing it in a Vulkan
+extension would enable the OpenGL layer to match the vendors' current OpenGL
+driver in behavior.
+
+Pros:
+
+- Trivial to use.
+- Efficient.
+
+Cons:
+
+- Hardware vendors may be planning on removing this feature.
+- The dithering algorithm is grossly underspecified in OpenGL, and vendors are
+  known to apply it incompletely or incorrectly in some situations.
+  A Vulkan extension would necessarily be almost as vague as the OpenGL spec,
+  which is not in the spirit of Vulkan.
+
+== Proposal
+
+Despite the caveats, a Vulkan extension represents the most efficient way
+currently to provide equivalent visuals in an OpenGL layer compared to the
+vendors' OpenGL implementations.
+Once the OpenGL layer replaces vendors' implementations, and once the hardware
+features are removed, an emulation path can be chosen for dithering.
+By that time, it is hoped that applications requiring implicit dithering are a
+relic of the past, and paying the extra cost on newer more efficient hardware
+would be negligible, or at least acceptable.
+
+=== Features
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceLegacyDitheringFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           legacyDithering;
+} VkPhysicalDeviceLegacyDitheringFeaturesEXT;
+----
+
+- `legacyDithering` specifies that OpenGL dithering is available.
+
+=== Enabling Dithering
+
+Extending `VkSubpassDescriptionFlagBits`,
+`VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT` will enable dithering
+for the subpass.
+Extending `VkRenderingFlagBits`, `VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT`
+does the same when using dynamic rendering.
+
+The Vulkan implementation is expected to apply dithering equivalently to the
+vendor's OpenGL driver.
+
+=== Limitations
+
+The dithering applied through the use of this extension is unspecified, and
+it is possible that the implementation performs no dithering at all for some
+formats.
+However, it will be equivalent to the vendor's OpenGL driver given equivalent
+OpenGL API calls.
+The following limitations thus apply to OpenGL as well.
+
+- Only certain formats may actually be dithered.
+- The details of the dithering algorithm are unknown.
+- Correctness of the dithering algorithm with respect to sRGB are not
+  guaranteed.
+
+**It is strongly recommended that Vulkan applications implement dithering on
+their own if needed.**
+This extension is intended only for use by OpenGL emulation layers.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mesh_shader.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mesh_shader.adoc
new file mode 100644
index 0000000..0725fed
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mesh_shader.adoc
@@ -0,0 +1,567 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_mesh_shader
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:spec: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html
+:sectnums:
+
+This extension provides a new mechanism allowing applications to generate collections of geometric primitives via programmable mesh shading.
+
+
+== Problem Statement
+
+The rasterization pipeline for Vulkan is fairly fixed - a fixed input stage assembles vertex data for the vertex shader, data optionally passes through tessellation and geometry stages, then fixed vertex processing passes the resulting primitives to the rasterizer.
+As rendering engines get increasingly complex, the fixed nature of this pipeline has become a bottleneck; many developers are augmenting their rasterization pipelines with compute shaders to make them more flexible.
+Using compute shaders comes at a cost though - data has to be piped via global memory, and once there it still has to be optimised for an implementation's vertex caches or face performance penalties.
+With compute shaders processing geometry, the role of the vertex shader is also somewhat redundant - transformations could be performed just as easily in compute shaders, and the vertex shader serves merely as a way to get at the fixed rasterization interface.
+
+This proposal aims to find a way to make the geometry pipeline more flexible, removing the unnecessary cost of an extra shader.
+
+
+== Solution Space
+
+Making the geometry pipeline more flexible requires rethinking how data is transmitted from buffers to device memory; ideally a solution should allow applications to flexibly modify the set of geometry as a whole in the way developers are currently using compute shaders, and how they may use them in future (e.g. culling, grouping, decompression), without compromising on efficiency. Some considered ways to do this include:
+
+  . Giving vertex shaders defined grouping, and enabling communication via subgroup operations
+  . Skipping the vertex shader and using geometry or tessellation shaders at the start of the pipeline
+  . Use compute shaders in place of pre-rasterization shader stages
+
+While a defined grouping in the vertex shaders would give applications the ability to manipulate sets of vertices, there is very limited ability to cull or remove vertices or primitives within a group, and the groups would be limited by the size of subgroups on the GPU without significant modifications.
+Similarly, applications would be largely constrained by fixed input assembly requiring a 1:1 ratio of indices to input vertices, meaning things like decompressing meshes or acting at any granularity other than vertices would be infeasible.
+Changing the vertex stage to accommodate this extra flexibility would require significant changes to how the stage works, which could likely better be accommodated by other existing stages.
+
+Skipping vertex shading and jumping straight to geometry or tessellation stages would provide a level of flexibility that could be interesting - both have access to geometric data at a granularity other than vertices, and are able to remove or add geometric detail before rasterization.
+The main issues with these stages is that they are still rather fixed in terms of inputs, output topology, and the granularity they operate at - they are also historically not very efficient across platforms, and removing the vertex shader from the front of the pipeline would not do much to help that.
+
+The last clear option is to effectively use compute shaders in place of existing rasterization stages, enabling applications to more easily port existing compute shaders to this new extension with all the flexibility intact.
+The main difficulty with this is simply defining the interface between the shader and the rasterizer, as existing compute shaders simply write out to buffers, whereas rasterization hardware is highly specialized, and may need to be fed in a particular manner.
+
+This extension opts for something close to option 3, by replacing all pre-rasterization shaders in the graphics pipeline with two new stages that operate like compute shaders but with output that can be consumed by the rasterizer.
+
+
+== Proposal
+
+=== New Shaders
+
+This proposal adds two new shader stages, which can be used in place of the existing pre-rasterization shader stages; <<Mesh Shaders>> and <<Task Shaders>>.
+
+
+==== Mesh Shaders 
+
+Mesh shaders are a new compute-like shader stage that has a primary aim of generating a set of primitives to the rasterizer, which are passed via its new output interface.
+For the most part, these map well to compute shaders - they are dispatched in workgroups and have access to shared memory, workgroup barriers, and local IDs, allowing for a lot of flexibility in how they are executed.
+
+Unlike vertex shaders, they do not use the vertex input interface, and geometry and indices must: be generated by the shader or read from buffers with no requirement for applications to provide the data in a particular way.
+As such, this allows applications to read or generate data however they need to, removing the need to prepare data before launching the graphics pipeline.
+This allows items such as decompression or decryption of data to be performed within the graphics pipeline directly, avoiding the bandwidth cost typically associated with compute shaders.
+
+Another key part of mesh shaders is that the number of primitives that a given workgroup can emit is dynamic - there are limits to how much can be emitted, which is advertised by the implementation, but applications can freely emit fewer primitives than the maximum.
+This allows things like modifying the level of detail at a fine granularity without the use of tessellation.
+Vertex outputs are written via the `Output` storage class and using standard built-ins like `Position` and `PointSize`, but are written as arrays in the same way as a tessellation control shader's outputs.
+Additionally, the mesh shader outputs indices per primitive according to the output primitive type (points, lines, or triangles). Indices are emitted as a separate array in a similar fashion to vertex outputs.
+Mesh shader output topologies are lists only - there is no support for triangle or line strips or triangle fans; data in these formats must be unpacked by the shader.
+Other user data can be emitted at per-vertex or per-primitive rates alongside these built-ins.
+Mesh shaders must specify the actual number of primitives and vertices being emitted before writing them, via the `OpSetMeshOutputsEXT` instruction.
+Subsequent fragment shaders can retrieve input data at both rates, tied to the vertices and primitive being rasterized.
+
+Mesh shaders can be dispatched from the API like a compute shader would be, or launched via <<Task Shaders>>.
+
+
+==== Task Shaders
+
+Task shaders are an optional shader stage that executes ahead of mesh shaders. A task shader is dispatched like a compute shader, and indirectly dispatches mesh shader workgroups.
+This shader is another compute-like stage that is executed in workgroups and has all the other features of compute shaders as well, with the addition of access to a dedicated instruction to launch mesh shaders.
+
+The primary function of task shaders is to dispatch mesh shaders via code:OpEmitMeshTasksEXT, which takes as input a number of mesh shader groups to emit, and a payload variable that will be visible to all mesh shader invocations launched by this instruction.
+This instruction is executed once per workgroup rather than per-invocation, and the payload itself is in a workgroup-wide storage class, similar to shared memory.
+Once this instruction is called, the workgroup is terminated immediately, and the mesh shaders are launched.
+
+Task shaders can be used for functionality like coarse culling of entire meshlets or dynamically generating more or less geometry depending on the level of detail required.
+This is notionally similar to the purpose of tessellation shaders, but without the constraint of fixed functionality, and with greater flexibility in how primitives are executed.
+Applications can use task shaders to determine the number of launched mesh shader workgroups at whatever input granularity they want, and however they see fit.
+
+
+==== Rasterization Order
+
+As task and mesh shaders change how primitives are dispatched, a subsequent modification of rasterization order is made.
+Within a mesh shader workgroup, primitives are rasterized in the order in which they are defined in the output.
+A group of mesh shaders either launched directly by the API, indirectly by the API,
+or indirectly from a single task shader workgroup will rasterize their outputs in sequential order based on their flattened global invocation index,
+equal to asciimath:[x + y * width + z * width * height], where `x`, `y`, and `z` refer to the components of the code:GlobalInvocationId built-in.
+`width` and `height` are equal to code:NumWorkgroups times code:WorkgroupSize for their respective dimensions. 
+When using task shaders, there is no rasterization order guarantee between mesh shaders launched by separate task shader workgroups, even within the same draw command.
+
+
+=== API Changes
+
+==== Graphics Pipeline Creation
+
+Graphics pipelines can now be created using mesh and task shaders in place of vertex, tessellation, and geometry shaders.
+This can be achieved by omitting existing pre-rasterization shaders and including a mesh shader stage, and optionally a task shader stage.
+When present, a graphics pipeline is complete without the inclusion of the link:{spec}#pipeline-graphics-subsets-vertex-input[vertex input state subset], as this state does not participate in mesh pipelines.
+No other modifications to graphics pipelines are necessary.
+Two new shader stages are added to the API to describe the new shader stages:
+
+```c
+VK_SHADER_STAGE_TASK_BIT = 0x40,
+VK_SHADER_STAGE_MESH_BIT = 0x80,
+```
+Note that `VK_SHADER_STAGE_ALL_GRAPHICS_BIT` was defined as a mask of existing bits during Vulkan 1.0 development, and thus cannot include these new bits; modifying it would break compatibility.
+
+==== Synchronization
+
+New pipeline stages are added for synchronization of these new stages:
+
+```c
+VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT = 0x80000,
+VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT = 0x100000,
+```
+
+```c
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_TASK_SHADER_BIT_2_EXT = 0x00080000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_MESH_SHADER_BIT_2_EXT = 0x00100000ULL;
+```
+
+These new pipeline stages interact similarly to compute shaders, with all the same access types and operations.
+They are also logically ordered before fragment shading, but have no logical ordering compared to existing pre-rasterization shader stages.
+The `VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT` stage added by link:{refpage}VK_KHR_synchronization2.html[VK_KHR_synchronization2] includes these new shader stages, and can be used identically.
+
+
+==== Queries
+
+Pipeline statistics queries are updated with new bits to count mesh and task shader invocations, in a similar manner to how other shader invocations are counted:
+
+```c
+VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT = 0x800,
+VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT = 0x1000,
+```
+
+An additional standalone query counting the number of mesh primitives generated is added:
+
+```c
+VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT = 1000328000,
+```
+
+An active query of this type will generate a count of every individual primitive emitted from any mesh shader workgroup that is not culled by fixed function culling.
+
+
+==== Draw Calls
+
+Three new draw calls are added to the API to dispatch mesh pipelines:
+
+```c
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    groupCountX,
+    uint32_t                                    groupCountY,
+    uint32_t                                    groupCountZ);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    uint32_t                                    drawCount,
+    uint32_t                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkBuffer                                    countBuffer,
+    VkDeviceSize                                countBufferOffset,
+    uint32_t                                    maxDrawCount,
+    uint32_t                                    stride);
+
+typedef struct VkDrawMeshTasksIndirectCommandEXT {
+    uint32_t    x;
+    uint32_t    y;
+    uint32_t    z;
+} VkDrawMeshTasksIndirectCommandEXT;
+```
+
+`vkCmdDrawMeshTasksEXT` is the simplest as it functions the same as link:{refpage}vkCmdDispatch.html[vkCmdDispatch], but dispatches the mesh or task shader in a graphics pipeline with the specified workgroup counts, rather than a compute shader.
+
+`vkCmdDrawMeshTasksIndirectEXT` functions similarly to link:{refpage}vkCmdDispatchIndirect.html[vkCmdDispatchIndirect], but with the draw count functionality from other draw commands.
+Multiple draws are dispatched according to the `drawCount` parameter, with data in buffer being consumed as a strided array of `VkDrawMeshTasksIndirectCommandEXT` structures, with stride equal to `stride`.
+Each element of this array defines a separate draw call's workgroup counts in each dimension, and dispatches mesh or task shaders for the current pipeline accordingly.
+
+`vkCmdDrawMeshTasksIndirectCountEXT` functions as `vkCmdDrawMeshTasksIndirectEXT`, but takes its draw count from the device as well.
+The draw count is read from `countBuffer` at an offset of `countBufferOffset`, and must be lower than `maxDrawCount`.
+
+
+==== Properties
+
+Several new properties are added to the API - some dictating hard limits, and others indicating performance considerations:
+
+```c
+typedef struct VkPhysicalDeviceMeshShaderPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxTaskWorkGroupTotalCount;
+    uint32_t           maxTaskWorkGroupCount[3];
+    uint32_t           maxTaskWorkGroupInvocations;
+    uint32_t           maxTaskWorkGroupSize[3];
+    uint32_t           maxTaskPayloadSize;
+    uint32_t           maxTaskSharedMemorySize;
+    uint32_t           maxTaskPayloadAndSharedMemorySize;
+    uint32_t           maxMeshWorkGroupTotalCount;
+    uint32_t           maxMeshWorkGroupCount[3];
+    uint32_t           maxMeshWorkGroupInvocations;
+    uint32_t           maxMeshWorkGroupSize[3];
+    uint32_t           maxMeshSharedMemorySize;
+    uint32_t           maxMeshPayloadAndSharedMemorySize;
+    uint32_t           maxMeshOutputMemorySize;
+    uint32_t           maxMeshPayloadAndOutputMemorySize;
+    uint32_t           maxMeshOutputComponents;
+    uint32_t           maxMeshOutputVertices;
+    uint32_t           maxMeshOutputPrimitives;
+    uint32_t           maxMeshOutputLayers;
+    uint32_t           maxMeshMultiviewViewCount;
+    uint32_t           meshOutputPerVertexGranularity;
+    uint32_t           meshOutputPerPrimitiveGranularity;
+    uint32_t           maxPreferredTaskWorkGroupInvocations;
+    uint32_t           maxPreferredMeshWorkGroupInvocations;
+    VkBool32           prefersLocalInvocationVertexOutput;
+    VkBool32           prefersLocalInvocationPrimitiveOutput;
+    VkBool32           prefersCompactVertexOutput;
+    VkBool32           prefersCompactPrimitiveOutput;
+} VkPhysicalDeviceMeshShaderPropertiesEXT;
+```
+
+The following limits affect task shader execution:
+
+ * `maxTaskWorkGroupTotalCount` indicates the total number of workgroups that can be launched for a task shader. 
+ * `maxTaskWorkGroupCount` indicates the number of workgroups that can be launched for a task shader in each given dimension. 
+ * `maxTaskWorkGroupInvocations` indicates the total number of invocations that can be launched for a task shader in a single workgroup. 
+ * `maxTaskWorkGroupSize` indicates the maximum number of invocations for a task shader in each dimension for a single workgroup. 
+ * `maxTaskPayloadSize` indicates the maximum total size of task shader output payloads.
+ * `maxTaskSharedMemorySize` indicates the maximum total size of task shader shared memory variables.
+ * `maxTaskPayloadAndSharedMemorySize` indicates the maximum total combined size of task shader output payloads and shared memory variables.
+
+Similar limits affect task shader execution:
+
+ * `maxMeshWorkGroupTotalCount` indicates the total number of workgroups that can be launched for a mesh shader. 
+ * `maxMeshWorkGroupCount` indicates the number of workgroups that can be launched for a mesh shader in each given dimension. 
+ * `maxMeshWorkGroupInvocations` indicates the total number of invocations that can be launched for a mesh shader in a single workgroup. 
+ * `maxMeshWorkGroupSize` indicates the maximum number of invocations for a mesh shader in each dimension for a single workgroup.
+ * `maxMeshSharedMemorySize` indicates the maximum total size of mesh shader shared memory variables.
+ * `maxMeshPayloadAndSharedMemorySize` indicates the maximum total combined size of mesh shader input payloads and shared memory variables.
+ * `maxMeshSharedMemorySize` indicates the maximum total size of mesh shader output variables.
+ * `maxMeshPayloadAndOutputMemorySize` indicates the maximum total combined size of mesh shader input payloads and output variables.
+ * `maxMeshOutputComponents` is the maximum number of components of mesh shader output variables.
+ * `maxMeshOutputVertices` is the maximum number of vertices a mesh shader can emit.
+ * `maxMeshOutputPrimitives` is the maximum number of primitives a mesh shader can emit.
+ * `maxMeshOutputLayers` is the maximum number of layers that a mesh shader can render to.
+ * `maxMeshMultiviewViewCount` is the maximum number of views that a mesh shader can render to.
+ 
+When considering the above properties, the number of mesh shader outputs a shader uses are rounded up to implementation-defined numbers defined by the following properties:
+ 
+ * `meshOutputPerVertexGranularity` is the alignment of each per-vertex mesh shader output.
+ * `meshOutputPerPrimitiveGranularity` is the alignment of each per-primitive mesh shader output.
+ 
+The following properties are implementation preferences.
+Violating these limits will not result in validation errors, but it is strongly recommended that applications adhere to them in order to maximize performance on each implementation.
+
+ * `maxPreferredTaskWorkGroupInvocations` indicates the maximum preferred number of task shader invocations in a single workgroup.
+ * `maxPreferredMeshWorkGroupInvocations` indicates the maximum preferred number of mesh shader invocations in a single workgroup.
+ * If `prefersLocalInvocationVertexOutput` is `VK_TRUE`, the implementation will perform best when each invocation writes to an array index in the per-vertex output matching code:LocalInvocationIndex.
+ * If `prefersLocalInvocationPrimitiveOutput` is `VK_TRUE`, the implementation will perform best when each invocation writes to an array index in the per-primitive output matching code:LocalInvocationIndex.
+ * If `prefersCompactVertexOutput` is `VK_TRUE`, the implementation will perform best if there are no unused vertices in the output array.
+ * If `prefersCompactPrimitiveOutput` is `VK_TRUE`, the implementation will perform best if there are no unused primitives in the output array.
+
+Note that even if some of the above values are false, the implementation can still perform just as well whether or not the corresponding preferences are followed. It is recommended to follow these preferences unless the performance cost of doing so outweighs the gains of hitting the optimal paths in the implementation.
+
+
+==== Features
+
+A few new features are introduced by this extension:
+
+```c
+typedef struct VkPhysicalDeviceMeshShaderFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           taskShader;
+    VkBool32           meshShader;
+    VkBool32           multiviewMeshShader;
+    VkBool32           primitiveFragmentShadingRateMeshShader;
+    VkBool32           meshShaderQueries;
+} VkPhysicalDeviceMeshShaderFeaturesEXT;
+```
+
+ * `taskShader` indicates support for task shaders and associated features - if not supported, only mesh shaders can be used.
+ * `meshShader` indicates support for mesh shaders and associated features - if not supported, none of the features in this extension can be used.
+ * `multiviewMeshShader` indicates support for the use of multi-view with mesh shaders.
+ * `primitiveFragmentShadingRateMeshShader` indicates whether the per-primitive fragment shading rate can be written by mesh shaders when fragment shading rates are supported.
+ * `meshShaderQueries` indicates support for the new queries added by this extension.
+
+
+=== SPIR-V Changes
+
+One new capability is added gating all of the new functionality:
+
+```
+MeshShadingEXT
+```
+
+Two new execution models are added, corresponding to the two <<New Shaders>> added by this extension:
+
+```
+TaskEXT
+MeshEXT
+```
+
+Task shader output/mesh shader input payloads are declared in a new storage class:
+
+```
+TaskPayloadWorkgroupEXT
+```
+
+Variables in this storage class are accessible by all invocations in a workgroup in a task shader, and is broadcast to all invocations in workgroups dispatched by the same task shader workgroup where it is read-only.
+
+In task shaders, code:TaskPayloadWorkgroupEXT is a hybrid of code:Output and code:Workgroup storage classes. It supports all usual operations code:Workgroup supports, with the caveats of:
+
+  . No explicit memory layout support with `VK_KHR_workgroup_memory_explicit_layout`
+  . Can be declared independently of code:Workgroup, meaning local scratch workgroup memory can still be used with `VK_KHR_workgroup_memory_explicit_layout`
+  . Has two separate limits for size, `maxTaskPayloadSize` for its size in isolation, and `maxTaskPayloadAndSharedMemorySize` for the combined size
+
+Mesh shaders declare the type of primitive being output by way of three execution modes, two of which are introduced by this extension:
+
+```
+OutputPoints
+OutputLinesEXT
+OutputTrianglesEXT
+```
+
+Mesh shaders declare the maximum number of vertex and primitives the shader will ever emit for the invocation group by way of two execution modes, one of which is introduced by this extension:
+
+```
+OutputVertices
+OutputPrimitivesEXT
+```
+
+A new decoration is added to for mesh shader outputs/fragment shader inputs to indicate per-primitive data rather than per-vertex data:
+
+```
+PerPrimitiveEXT
+```
+
+New per-primitive built-ins are added:
+
+```
+PrimitivePointIndicesEXT
+PrimitiveLineIndicesEXT
+PrimitiveTriangleIndicesEXT
+CullPrimitiveEXT
+```
+
+Each of the `Primitive*IndicesEXT` built-ins is used when the corresponding execution mode is specified, declared as scalars or vectors with a number of components equal to the number of vertices in the primitive type.
+`CullPrimitiveEXT` is a per-primitive boolean value indicating to the implementation that its corresponding primitive must not be rasterized and is instead discarded with no further processing once emitted.
+
+A new instruction is added to task shaders to launch mesh shader workgroups:
+
+
+[cols="1,1,2,2,2*2",width="100%"]
+|=====
+5+|[[OpEmitMeshTasksEXT]]*OpEmitMeshTasksEXT* +
+ +
+Defines the grid size of subsequent mesh shader workgroups to generate
+upon completion of the task shader workgroup. +
+ +
+'Group Count X Y Z' must each be a 32-bit unsigned integer value.
+They configure the number of local workgroups in each respective dimensions
+for the launch of child mesh tasks. See Vulkan API specification for more detail. +
+ +
+'Payload' is an optional pointer to the payload structure to pass to the generated mesh shader invocations.
+'Payload' must be the result of an *OpVariable* with a storage class of *TaskPayloadWorkgroupEXT*. +
+ +
+The arguments are taken from the first invocation in each workgroup.
+Any invocation must execute this instruction exactly once and under uniform
+control flow.
+This instruction also serves as an *OpControlBarrier* instruction, and also
+performs and adheres to the description and semantics of an *OpControlBarrier*
+instruction with the 'Execution' and 'Memory' operands set to *Workgroup* and
+the 'Semantics' operand set to a combination of *WorkgroupMemory* and
+*AcquireRelease*.
+Ceases all further processing: Only instructions executed before
+*OpEmitMeshTasksEXT* have observable side effects. +
+ +
+This instruction must be the last instruction in a block. +
+ +
+This instruction is only valid in the *TaskEXT* Execution Model.
+|Capability: +
+*MeshShadingEXT*
+| 4 + variable | 5294 | '<id>' +
+'Group Count X' | '<id>' +
+'Group Count Y' | '<id>' +
+'Group Count Z' | Optional +
+'<id>' +
+'Payload'
+|=====
+
+A new mesh shader instruction is added to set the number of actual primitives and vertices that a mesh shader writes, avoiding unnecessary allocations or processing by the implementation:
+
+[cols="1,1,2*3",width="100%"]
+|=====
+3+|[[OpSetMeshOutputsEXT]]*OpSetMeshOutputsEXT* +
+ +
+Sets the actual output size of the primitives and vertices that the mesh shader
+workgroup will emit upon completion. +
+ +
+'Vertex Count' must be a 32-bit unsigned integer value.
+It defines the array size of per-vertex outputs. +
+ +
+'Primitive Count' must a 32-bit unsigned integer value.
+It defines the array size of per-primitive outputs. +
+ +
+The arguments are taken from the first invocation in each workgroup.
+Any invocation must execute this instruction no more than once and under
+uniform control flow.
+There must not be any control flow path to an output write that is not preceded
+by this instruction. +
+ +
+This instruction is only valid in the *MeshEXT* Execution Model.
+|Capability: +
+*MeshShadingEXT*
+| 3 | 5295 | '<id>' +
+'Vertex Count' | '<id>' +
+'Primitive Count'
+|=====
+
+This instruction must be called before writing to mesh shader outputs.
+
+
+=== GLSL Changes
+
+Mesh shaders defined in GLSL the same as compute shaders, with the addition of access to shader outputs normally available in vertex shaders and the following new features:
+
+```glsl
+out uint  gl_PrimitivePointIndicesEXT[];
+out uvec2 gl_PrimitiveLineIndicesEXT[];
+out uvec3 gl_PrimitiveTriangleIndicesEXT[];
+```
+
+These built-ins correspond to the identically named SPIR-V constructs, and are written in the same way.
+Applications should access only the index output corresponding to the primitive type declared by the following layout qualifiers:
+
+```glsl
+points
+lines
+triangles
+```
+
+Each layout qualifier is declared as `layout(<qualifier>) out;`.
+
+A new auxiliary storage qualifier can be added to interface variables to indicate that they are per-primitive rate:
+
+```glsl
+perprimitiveEXT
+```
+
+New write-only output blocks are defined for built-in output values from mesh shaders:
+
+```glsl
+out gl_MeshPerVertexEXT {
+  vec4  gl_Position;
+  float gl_PointSize;
+  float gl_ClipDistance[];
+  float gl_CullDistance[];
+} gl_MeshVerticesEXT[];
+
+perprimitiveEXT out gl_MeshPerPrimitiveEXT {
+  int  gl_PrimitiveID;
+  int  gl_Layer;
+  int  gl_ViewportIndex;
+  bool gl_CullPrimitiveEXT;
+  int  gl_PrimitiveShadingRateEXT;
+} gl_MeshPrimitivesEXT[];
+```
+
+Note that some existing outputs that previously were associated by provoking vertices are now directly declared as per-primitive variables.
+
+Finally a new mesh-shader function is added:
+
+```glsl
+    void SetMeshOutputsEXT(uint vertexCount,
+                           uint primitiveCount)
+```
+
+This function maps exactly to the `OpSetMeshOutputsEXT` instruction - setting the number of valid vertices and primitives that are output by the mesh shader workgroup.
+
+Task shader payloads can be declared in task and mesh shaders using the new `taskPayloadSharedEXT` storage qualifier as follows:
+
+```glsl
+taskPayloadSharedEXT MyPayloadStruct {
+    ...
+} payload;
+```
+
+Finally a new function corresponding to `OpEmitMeshTasksEXT` is added to launch mesh workgroups:
+
+```glsl
+    void EmitMeshTasksEXT(uint groupCountX,
+                          uint groupCountY,
+                          uint groupCountZ)
+```
+
+
+=== HLSL Changes
+
+The HLSL specification for mesh shaders is defined by Microsoft® here: https://microsoft.github.io/DirectX-Specs/d3d/MeshShader.html.
+
+Everything in that specification should work directly as described, with the exception of linking per-primitive interface variables between pixel and mesh shaders.
+Microsoft defined the fragment/mesh interface to effectively be fixed up at link time - making no distinction between per-vertex and per-primitive variables in the pixel shader.
+This works okay with monolithic pipeline construction, but with the addition of things like link:{refpage}VK_EXT_graphics_pipeline_library.html[VK_EXT_graphics_pipeline_library], modifying this at link time would cause undesirable slowdown.
+As a result, the Vulkan version of this feature requires the `\[[vk::perprimitive]]` attribute on pixel shader inputs in order to generate a match with mesh shader outputs denoted with the `primitives` qualifier.
+
+Mapping to SPIR-V is largely performed identically to any other shader for both mesh and task shaders, with most new functionality mapping 1:1.
+One outlier is in index generation - the primitive index outputs are denoted by a variable in the function signature preceded by `out indices ...`.
+The HLSL compiler should map this variable to the appropriate built-in value based on the selected `outputtopology` qualifier.
+
+Another outlier is the groupshared task payload. In HLSL this is declared as groupshared, but must be declared in the code:TaskPayloadWorkgroupEXT storage class in SPIR-V.
+The call to `DispatchMesh()` can inform the compiler which groupshared variable to promote to code:TaskPayloadWorkgroupEXT.
+
+
+== Issues
+
+=== What are the differences to VK_NV_mesh_shader?
+
+The following changes have been made to the API:
+
+  * Drawing mesh tasks can now be done with a three-dimensional number of workgroups, rather than just one-dimensional.
+  * There are new device queries for the number of mesh primitives generated, and the number of shader invocations for the new shader stages.
+  * A new command token is added when interacting with VK_NV_device_generated_commands, as mesh shaders from each extension are incompatible.
+  * New optional features have been added for interactions with multiview, primitive fragment shading rate specification, and the new queries.
+  * Several more device properties are expressed to enable app developers to use mesh shaders optimally across vendors (see <<Properties>> for details of how these are expressed and used).
+
+Note that the SPIR-V and GLSL expression of these extensions have changed, details of which are outlined in those extensions.
+These changes aim to make the extension more portable across multiple vendors, and increase compatibility with the similar feature in Microsoft® DirectX®.
+
+=== What are the differences to DirectX® 12's Mesh shaders?
+
+From the shader side, declaring mesh or amplification shaders in HLSL will have no meaningful differences - HLSL code written for DirectX should also work fine in Vulkan, with all the expected limits and features available.
+One difference is present in pixel shaders though - any user-declared attributes with the "primitive" keyword in the mesh shader will need to be declared in the fragment shader with the `\[[vk::perprimitive]]` attribute to facilitate linking.
+This makes it so that the shader can be compiled without modifying the input interface, which is particularly important for interactions with extensions like link:{refpage}VK_EXT_graphics_pipeline_library.html[VK_EXT_graphics_pipeline_library].
+
+Some amount of massaging by the HLSL compiler will be required to the shader interfaces as DirectX does linking by name rather than location between mesh and pixel shaders, but the requirement to use `\[[vk::perprimitive]]` allows the different attributes to continue using locations in Vulkan.
+
+The only notable difference on the API side is that Vulkan provides additional device properties that allow developers to tune their shaders to different vendors' fast paths, should they wish to.
+Details of how these are expressed are detailed <<Properties, here>>.
+
+=== Can there be more than one output payload in a task shader?
+
+There can only be one output payload per task shader; one declaration in HLSL or GLSL, and only one in the interface declaration for SPIR-V.
+More would have no effect anyway, as only one payload can be emitted for mesh shader consumption.
+
+=== Should developers port everything to mesh shading?
+
+Mesh shaders are not necessarily a performance win compared to the existing pipeline - their purpose is to offer greater flexibility at decent performance, but this flexibility may come at a cost, and that cost is likely platform dependent.
+What task and mesh shading offer is a way to perform novel techniques efficiently compared to the hoops developers would previously have to jump through.
+Task and mesh shaders are a tool that should be used when it makes sense to do so - if a developer has a novel technique that would be easier to implement using task and mesh shaders, then they are likely the appropriate tool.
+Moving from an existing optimized pipeline without this consideration may lead to decreased performance.
+
+=== Does vertex input interface state interact with task/mesh shaders?
+
+No, topology information is specified within the mesh shader, and data must be read or generated these shader stages programmatically.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_metal_objects.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_metal_objects.adoc
new file mode 100644
index 0000000..581d81e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_metal_objects.adoc
@@ -0,0 +1,219 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_metal_objects
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details API design ideas for the `VK_EXT_metal_objects` extension,
+which, in a Vulkan implementation that is layered on top of Metal on Apple device
+platforms, provides the ability to import and export the underlying Metal objects
+associated with specific Vulkan objects.
+
+
+== Problem Statement
+
+In a Vulkan implementation that is layered on top of Metal on Apple device platforms,
+many Vulkan objects have a corresponding Metal equivalent that provides the underlying
+functionality. When integrating a Vulkan app onto such a platform, it is often useful
+for the app to be able to interact directly with these Metal objects:
+
+  . Pass Metal texture and buffer resources between Vulkan and platform functionality
+    such as camera, video, AR, or inter-process frameworks.
+  . Create hybrid apps that combine and mingle Vulkan and Metal operations,
+    by sharing, in addition to Metal texture and buffer resources, also Metal device,
+    command queues, and synchronization operations.
+
+
+== Solution Space
+
+While the first use case listed above might be addressed via extensions built by adding
+Metal platform variations to the `VK_KHR_external_memory` family of extensions, the
+second use case requires a different approach. Rather than create a fragmented approach
+to managing access to Metal objects, this extension proposes to provide a single unified
+interface to all Metal objects providing functionality to the layered Vulkan implementation.
+Furthermore, this extension has been designed to be easily extendable, to import and export
+new Metal objects that might be introduced in the future.
+
+The intent is that this extension will be advertised and supported only on
+implementations that are layered on top of Metal on Apple device platforms.
+
+
+== Proposal
+
+=== Exporting Metal Objects
+
+To export underlying Metal objects from Vulkan objects, this extension adds one new
+Vulkan command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT(
+    VkDevice                                    device,
+    VkExportMetalObjectsInfoEXT*                pMetalObjectsInfo);
+----
+
+The `pNext` chain of the `VkExportMetalObjectsInfoEXT` in the `pMetalObjectsInfo`
+parameter can contain a variety of specialized structures, each targeted to identify
+a particular Vulkan object and a pointer through which the underlying Metal object
+can be exported, as identified in the following list. The use of `pNext` structures
+allows this extension to be flexibly extended in the future to permit access to
+additional Metal objects, through the future addition of new export object structures.
+
+[source,c]
+----
+typedef struct VkExportMetalObjectsInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+} VkExportMetalObjectsInfoEXT;
+
+typedef struct VkExportMetalDeviceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    MTLDevice_id       mtlDevice;
+} VkExportMetalDeviceInfoEXT;
+
+typedef struct VkExportMetalCommandQueueInfoEXT {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkQueue               queue;
+    MTLCommandQueue_id    mtlCommandQueue;
+} VkExportMetalCommandQueueInfoEXT;
+
+typedef struct VkExportMetalBufferInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+    MTLBuffer_id       mtlBuffer;
+} VkExportMetalBufferInfoEXT;
+
+typedef struct VkExportMetalTextureInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImage                  image;
+    VkImageView              imageView;
+    VkBufferView             bufferView;
+    VkImageAspectFlagBits    plane;
+    MTLTexture_id            mtlTexture;
+} VkExportMetalTextureInfoEXT;
+
+typedef struct VkExportMetalIOSurfaceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    IOSurfaceRef       ioSurface;
+} VkExportMetalIOSurfaceInfoEXT;
+
+typedef struct VkExportMetalSharedEventInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkSemaphore          semaphore;
+    VkEvent              event;
+    MTLSharedEvent_id    mtlSharedEvent;
+} VkExportMetalSharedEventInfoEXT;
+----
+
+To export Metal objects from Vulkan objects, the app must first indicate the
+intention to do so during the creation of the Vulkan object, by including a
+`VkExportMetalObjectCreateInfoEXT` structure in the `pNext` chain of the
+`VkInstanceCreateInfo`, `VkMemoryAllocateInfo`, `VkImageCreateInfo`,
+`VkImageViewCreateInfo`, `VkBufferViewCreateInfo`, `VkSemaphoreCreateInfo`,
+or `VkEventCreateInfo`, in the corresponding Vulkan object creation command.
+
+[source,c]
+----
+typedef struct VkExportMetalObjectCreateInfoEXT {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExportMetalObjectTypeFlagBitsEXT    exportObjectType;
+} VkExportMetalObjectCreateInfoEXT;
+
+typedef enum VkExportMetalObjectTypeFlagBitsEXT {
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010,
+    VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020,
+    VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkExportMetalObjectTypeFlagBitsEXT;
+typedef VkFlags VkExportMetalObjectTypeFlagsEXT;
+----
+
+=== Importing Metal Objects
+
+A `VkDeviceMemory` object can be created on an existing `MTLBuffer` object, by including
+the `MTLBuffer` object in a `VkImportMetalBufferInfoEXT` structure in the `pNext` chain
+of the `VkMemoryAllocateInfo` structure in the `vkAllocateMemory` command.
+
+A `VkImage` object can be created on an existing `IOSurface` object, or one or
+more existing Metal `MTLTexture` objects, by including those Metal objects in
+`VkImportMetalIOSurfaceInfoEXT` or `VkImportMetalTextureInfoEXT` structures in the
+`pNext` chain of the `VkImageCreateInfo` structure in the `vkCreateImage` command.
+
+A `VkSemaphore` or `VkEvent` object can be created on an existing `MTLSharedEvent`
+object, by including the `MTLSharedEvent` object in a `VkImportMetalSharedEventInfoEXT`
+structure in the `pNext` chain of the `VkSemaphoreCreateInfo` or `VkEventCreateInfo`
+structure in a `vkCreateSemaphore` or `vkCreateEvent` command, respectively
+
+[source,c]
+----
+typedef struct VkImportMetalBufferInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    MTLBuffer_id       mtlBuffer;
+} VkImportMetalBufferInfoEXT;
+
+typedef struct VkImportMetalTextureInfoEXT {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkImageAspectFlags    aspectMask;
+    MTLTexture_id         mtlTexture;
+} VkImportMetalTextureInfoEXT;
+
+typedef struct VkImportMetalIOSurfaceInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    IOSurfaceRef       ioSurface;
+} VkImportMetalIOSurfaceInfoEXT;
+
+typedef struct VkImportMetalSharedEventInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    MTLSharedEvent_id    mtlSharedEvent;
+} VkImportMetalSharedEventInfoEXT;
+----
+
+
+== Issues
+
+=== RESOLVED: Should this extension be built by adding Metal platform variations to the `VK_KHR_external_memory` family of extensions?
+
+No. While the `VK_KHR_external_memory` family of extensions is suitable for resource
+objects such as images and buffers, the intent of the `VK_EXT_metal_objects` is to
+provide consistent access to a wide variety of Metal objects, including, but not
+limited to resource objects.
+
+=== RESOLVED: Should this extension be split into two, one for resources and one for other objects?
+
+No. Given the expectation that this extension will be limited to layered implementations
+on top of Metal running only on Apple platforms, the preference was for a single simple
+extension that served the needs of all expected use cases for apps on those platforms.
+Furthermore, the existence of this `VK_EXT_metal_objects` extension does not prevent
+additional resource-only extensions compatible with `VK_KHR_external_memory` from being
+introduced for those specific use cases, and with the expectation that any resulting
+functionality overlap will not cause any issues.
+
+=== RESOLVED: Should the app be required to indicate its intention to export Metal objects when the corresponding Vulkan object is created?
+
+Yes. To improve implementation flexibility and integrity, requiring the app to indicate
+the intention to export provides the implementation with the flexibility to optimize
+internally if it knows certain Metal objects will or will not be required to be available.
+
+=== RESOLVED: Should a `MTLBuffer` be imported and exported through a `VkBuffer` or a `VkDeviceMemory`?
+
+While `MTLBuffer` spans functionality covered by both `VkBuffer` and `VkDeviceMemory`, it
+was felt that `MTLBuffer` maps closest to `VkDeviceMemory`, with a `VkBuffer` essentially
+being a wrapper object around a segment of that `VkDeviceMemory/MTLBuffer`.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_multisampled_render_to_single_sampled.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_multisampled_render_to_single_sampled.adoc
new file mode 100644
index 0000000..0680bb1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_multisampled_render_to_single_sampled.adoc
@@ -0,0 +1,384 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_EXT_multisampled_render_to_single_sampled
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document identifies difficulties with efficient multisampled rendering on
+tiling GPUs and proposes an extension to improve it.
+
+## Problem Statement
+
+With careful usage of resolve attachments, multisampled image memory allocated
+with `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`, `loadOp` not equal to
+`VK_ATTACHMENT_LOAD_OP_LOAD`, and `storeOp` not equal to
+`VK_ATTACHMENT_STORE_OP_STORE`, a Vulkan application is able to efficiently
+perform multisampled rendering without incurring any additional memory penalty
+on tiling GPUs in most cases.
+
+On some tiling GPUs, subpass resolve operations for some formats cannot be done
+on the tile, and so additional performance and memory cost is silently paid
+similarly to performing the resolve through
+link:{refpage}vkCmdResolveImage.html[`vkCmdResolveImage`] after the subpass,
+with no feedback to the application.
+
+Additionally, under certain circumstances, the application may not be able to
+complete its multisampled rendering within a single render pass; for example if
+it does partial rasterization from frame to frame, blending on an image from a
+previous frame, or in emulation of `GL_EXT_multisampled_render_to_texture`.
+In such cases, the application can use an initial subpass to effectively load
+single sampled data from the next subpass's resolve attachment and fill in the
+multisampled attachment which otherwise uses `loadOp` equal to
+`VK_ATTACHMENT_LOAD_OP_DONT_CARE`.
+However, this is not always possible (for example for stencil in the absence of
+`VK_EXT_shader_stencil_export`) and has multiple drawbacks.
+
+Some implementations are able to perform said operation efficiently in
+hardware, effectively loading a multisampled attachment from the contents of a
+single sampled one.
+Together with the ability to perform a resolve operation at the end of a
+subpass, these implementations are able to perform multisampled rendering on
+single-sampled attachments with no extra memory or bandwidth overhead.
+
+This document proposes an extension that exposes this capability by allowing a
+framebuffer and render pass to include single-sampled attachments while
+rendering is done with a specified number of samples.
+
+## Proposal
+
+The extension first allows a framebuffer to contain a mixture of single-sampled
+and multisampled attachments.
+In the absence of `VkMultisampledRenderToSingleSampledInfoEXT`, a render pass
+subpass which performs multisampled rendering with `N` samples would still
+require all the attachments used in the subpass to have `N` samples.
+Similarly with `VK_EXT_dynamic_rendering`, the attachments can be a mixture of
+single-sampled and multisampled if `VkMultisampledRenderToSingleSampledInfoEXT`
+is present.
+
+In the following, a _pass_ refers to either a render pass subpass, or a
+`VK_EXT_dynamic_rendering` render pass.
+
+When `VkMultisampledRenderToSingleSampledInfoEXT` is provided, specifying that
+rendering is done with `N` samples, then any attachment used in the pass may
+either have one or `N` samples.
+In that case, attachments with one sample will automatically load as
+multisampled for the duration of the pass (where every pixel's value is
+replicated in all samples of that pixel on tile memory) and will automatically
+resolve at the end of the pass.
+This document refers to such single-sampled attachments as
+multisampled-render-to-single-sampled attachments.
+
+Additionally, this extension provides a means to the application to determine
+whether usage of a format for attachments will be detrimental to performance
+during a pass resolve operation, which can particularly adversely affect
+multisampled-render-to-single-sampled passes.
+
+Introduced by this API are:
+
+Feature, advertising whether the implementation supports
+multisampled-rendering-to-single-sampled:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           multisampledRenderToSingleSampled;
+} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
+----
+
+Performance query specifying whether usage of an attachment that is resolved at
+the end of a pass with a format will be optimal on hardware:
+
+[source,c]
+----
+typedef struct VkSubpassResolvePerformanceQueryEXT {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkBool32                      optimal;
+} VkSubpassResolvePerformanceQueryEXT;
+----
+
+Specifying that a pass should perform multisampled-rendering-to-single-sampled
+with `N` sample counts (extending `VkSubpassDescription2` and
+                `VkRenderingInfo`):
+
+[source,c]
+----
+typedef struct VkMultisampledRenderToSingleSampledInfoEXT {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkBool32                      multisampledRenderToSingleSampledEnable;
+    VkSampleCountFlagBits         rasterizationSamples;
+} VkMultisampledRenderToSingleSampledInfoEXT;
+----
+
+An image creation flag to indicate the intention of using a single-sampled
+image in a multisampled-render-to-single-sampled pass:
+
+[source,c]
+----
+VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT
+----
+
+In a multisampled-render-to-single-sampled pass with `N` samples, all rendering
+is done with `N` samples as if any single-sampled attachments truly had `N`
+samples.
+This means that
+link:{refpage}VkPipelineMultisampleStateCreateInfo.html[`VkPipelineMultisampleStateCreateInfo::rasterizationSamples`]
+would have to be `N`, and rasterization is done identically to Vulkan's
+multisampling rules for passes not using this extension.
+As such, the functionality in this extension purely affects the load and store
+of single-sampled attachments and their automatic representation as
+multisampled for the duration of the pass.
+
+Regardless of which load and store ops are used, the single-sampled attachments
+in a multisampled-render-to-single-sampled passes are represented as
+multisampled.
+The different load and store ops behave identically to the case where
+multisampled attachments are used.
+The following clarifies the ops in combination with
+multisampled-render-to-single-sampled attachments:
+
+- `VK_ATTACHMENT_LOAD_OP_LOAD`: For each pixel, its value is replicated in all
+  the `N` corresponding samples at the start of the pass.
+- `VK_ATTACHMENT_LOAD_OP_CLEAR`: The multisampled representation of the
+  attachment is cleared, not the single-sampled attachment.
+- `VK_ATTACHMENT_LOAD_OP_DONT_CARE`: Specifies that the previous contents of
+  the single-sampled attachment need not be preserved, and the contents of the
+  multisampled representation of the attachment will be undefined.
+- `VK_ATTACHMENT_LOAD_OP_NONE_EXT`: Specifies that the previous contents of the
+  single-sampled attachment will be preserved, but the contents of the
+  multisampled representation of the attachment will be undefined.
+
+- `VK_ATTACHMENT_STORE_OP_STORE`: The result of rendering is automatically
+  resolved into the single-sampled attachment at the end of the pass and
+  multisampled data is discarded.
+  With render passes, if a subpass follows that reads from the attachment as a
+  multisampled-render-to-single-sampled input attachment, it is undefined
+  whether the previous subpass's multisampled data are returned or the resolved
+  values.
+- `VK_ATTACHMENT_STORE_OP_DONT_CARE`: Specifies that the multisampled contents
+  are not needed after rendering, and may be discarded.
+  The contents of the single-sampled attachment will be undefined.
+- `VK_ATTACHMENT_STORE_OP_NONE_KHR`: Specifies that the contents of the
+  single-sampled attachment is not accessed by the store operation, but will be
+  undefined if the attachment was written to during the pass.
+
+While this extension adds a query for the resolve performance of attachments
+with a format, the results are not limited to
+multisampled-render-to-single-sampled passes, and are also applicable to passes
+with separate multisampled and single-sampled attachments with a resolve
+operation.
+
+== Examples
+
+To determine whether a format is suitable for use as a
+multisampled-render-to-single-sampled attachment for optimal performance:
+
+[source,c]
+----
+VkSubpassResolvePerformanceQueryEXT perfQuery = {
+    .sType = VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT,
+};
+
+VkFormatProperties2 formatProperties = {
+    .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;
+    .pNext = &perfQuery;
+};
+
+vkGetPhysicalDeviceFormatProperties2(device, format, &formatProperties);
+----
+
+To create a render pass with a multisampled-render-to-single-sampled subpass
+with 4 samples:
+
+[source,c]
+----
+// Render pass attachments with mixed sample count
+VkAttachmentDescription2 attachmentDescs[3] = {
+    [0] = {
+        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR,
+        .format = ...,
+        .samples = 1,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
+        .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
+        .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+        .finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+    },
+    [1] = {
+        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR,
+        .format = ...,
+        .samples = 4,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
+        .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+        .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+    },
+    [2] = {
+        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR,
+        .format = ...,
+        .samples = 1,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
+        .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
+        .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        .initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+        .finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+    },
+};
+
+// Subpass attachment references
+VkAttachmentReference2 colorAttachments[2] = {
+    [0] = {
+        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+        .attachment = 0,
+        .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+        .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+    },
+    [1] = {
+        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+        .attachment = 1,
+        .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+        .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+    },
+};
+
+VkAttachmentReference2 depthStencilAttachment = {
+    .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
+    .attachment = 0,
+    .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+    .aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT,
+};
+
+// Multisampled-render-to-single-sampling info.  Rendering at 4xMSAA.
+VkMultisampledRenderToSingleSampledInfoEXT msrtss = {
+    .sType = VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT,
+    .multisampledRenderToSingleSampledEnable = VK_TRUE,
+    .rasterizationSamples = 4,
+};
+
+// Resolve modes for depth/stencil
+VkSubpassDescriptionDepthStencilResolve depthStencilResolve = {
+    .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
+    .pNext = &msrtss,
+    .depthResolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
+    .stencilResolveMode = VK_RESOLVE_MODE_NONE,
+};
+
+// The subpass description where multisampled-render-to-single-sampled rendering is enabled.
+VkSubpassDescription2 subpassDescription = {
+    .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR,
+    .pNext = &depthStencilResolve,
+    .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
+    .colorAttachmentCount = 2,
+    .pColorAttachments = colorAttachments,
+    .pDepthStencilAttachment = &depthStencilAttachment,
+};
+
+// The render pass creation.
+VkRenderPassCreateInfo2KHR renderPassInfo = {
+    .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR,
+    .attachmentCount = 3,
+    .pAttachments = attachmentDescs,
+    .subpassCount = 1,
+    .pSubpasses = &subpassDescription,
+};
+
+VkRenderPass renderPass;
+vkCreateRenderPass2(device, &renderPassInfo, NULL, &renderPass);
+----
+
+A similar pass with `VK_KHR_dynamic_rendering`:
+
+[source,c]
+----
+VkRenderingAttachmentInfo colorAttachments[2] = {
+    // Assuming a single-sampled color attachment 0
+    {
+        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO
+        .imageView = ...,
+        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+        .resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
+        .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
+    },
+    // Assuming a multisampled color attachment 1 with 4x samples
+    {
+        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO
+        .imageView = ...,
+        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+        .resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
+        .resolveImageView = ...,
+        .resolveImageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
+    },
+};
+
+// Assuming a single-sampled depth/stencil attachment
+VkRenderingAttachmentInfo depthAttachment = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO
+    .imageView = ...,
+    .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    .resolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
+    .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
+    .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
+    .clearValue = { ... },
+};
+VkRenderingAttachmentInfo stencilAttachment = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO
+    .imageView = ...,
+    .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
+    .resolveMode = VK_RESOLVE_MODE_NONE,
+    .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
+    .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+};
+
+// Multisampled-render-to-single-sampling info.  Rendering at 4xMSAA.
+VkMultisampledRenderToSingleSampledInfoEXT msrtss = {
+    .sType = VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT,
+    .multisampledRenderToSingleSampledEnable = VK_TRUE,
+    .rasterizationSamples = 4,
+};
+
+VkRenderingInfo renderingInfo = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_INFO,
+    .pNext = &msrtss,
+    .renderArea = { ... },
+    .layerCount = 1,
+    .colorAttachmentCount = 2,
+    .pColorAttachments = colorAttachments,
+    .pDepthAttachment = &depthAttachment,
+    .pStencilAttachment = &stencilAttachment,
+};
+
+vkCmdBeginRendering(commandBuffer, &renderingInfo);
+----
+
+== Issues
+
+=== RESOLVED: What about `VK_KHR_dynamic_rendering`?
+
+Render passes remain the optimal solution for tiling GPUs.
+The current limitations of the `VK_KHR_dynamic_rendering` extension on tiling
+GPUs may improve over time, so this extension may be used with dynamic
+rendering.
+
+=== RESOLVED: Lack of on-tile-resolve support for some formats will particularly have a negative impact on this extension.  Can there be a format feature flag added?
+
+A specific struct is added to query performance of subpass resolve for each
+format.
+A format feature flag is avoided for two reasons; one is their scarcity, and
+the other is that normally format feature flags imply that the corresponding
+functionalities are not allowed if the flag is missing.
+In this case however, the implementation necessarily supports subpass resolves
+albeit inefficiently, so the lack of such a hypothetical format feature flag
+would not block their usage.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mutable_descriptor_type.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mutable_descriptor_type.adoc
new file mode 100644
index 0000000..24f302c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_mutable_descriptor_type.adoc
@@ -0,0 +1,281 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_mutable_descriptor_type
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This extension enables applications to alias multiple descriptor types onto the same binding, reducing friction when porting between Vulkan and DirectX 12.
+
+NOTE: This extension is a direct promotion of link:{refpage}VK_VALVE_mutable_descriptor_type.html[VK_VALVE_mutable_descriptor_type]. As that extension already shipped before proposal documents existed, this document has been written retroactively during promotion to EXT.
+
+
+== Problem Statement
+
+Applications porting to Vulkan from DirectX 12, or layers emulating DX12 on Vulkan, are faced with two major performance hurdles when dealing with descriptors due to a mismatch in how the two APIs handle descriptors and descriptor uploads.
+
+In DirectX 12, resource descriptors are stored in a uniform array of bindings in the API, such that the same array can contain both texture and buffer descriptors.
+This manifests in particular when using Shader Model 6.6, where this uniform array of bindings is exposed directly to the shader.
+In addition to that, when using DirectX 12, users can create a CPU-local heap used for manipulation, before uploading that to device memory.
+This allows for a lot of manipulation on the host without saturating system bandwidth to VRAM for discrete GPUs, and can result in improved descriptor upload performance.
+
+In core Vulkan, there is no way to store different types of descriptors in a single array - each descriptor type has its own array bindings, and there is no way to index between them.
+Emulating this reliably means creating multiple parallel arrays of each resource type, which can result in a significant memory hit compared to DirectX.
+In Vulkan, this would be covered by 6 different descriptor types:
+
+ - `VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER` (SRV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER` (UAV)
+ - `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE` (SRV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_IMAGE` (UAV)
+ - `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER` (CBV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_BUFFER` (SRV or UAV depending on read-only)
+
+`VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR` can also be added, but its support is optional and is awkward to use when porting from DirectX 12 due to its use of GPU VA without a pResource.
+
+There is also no way to flag a descriptor as being used for host manipulation in Vulkan, so managing descriptors as a DirectX 12 app would do results in significantly worse performance, and can actually be a bottleneck in dynamic systems.
+
+There are other notable differences between the two APIs in terms of descriptor management, but no other difference has such an outsized impact on performance or memory consumption, so this extension proposal is limited to addressing these specific issues.
+
+
+== Solution Space
+
+There are a handful of ways of dealing with these issues that have been considered:
+
+. Solve this in external software
+. Add the ability to alias descriptors and specify host-only descriptor sets
+. Replace Vulkan's descriptor management APIs wholesale
+
+Firstly, solving this in external software has been attempted (notably by https://github.com/ValveSoftware/vkd3d[vkd3d]) and no satisfying options could be identified; there are workarounds but they are either too slow or too memory intensive to emulate DirectX 12 content at native performance.
+
+Adding descriptor aliasing and host-only descriptor pools is a simple point fix that applications and layers would be able to integrate relatively easily, without hugely impacting existing software decisions.
+More notably, no significant changes to shaders are required, other than changing descriptor sets and binding decorations.
+
+Replacing Vulkan's descriptor management more generally is possible, but ultimately would require significantly more work than option 2, both in design and in application software stacks to make use of it.
+This could be considered for future extensions, but for the problems identified here, it would be overkill.
+
+
+== Proposal
+
+
+=== Mutable Descriptor Type
+
+Typically when specifying a link:{refpage}VkDescriptorSetLayoutBinding.html[descriptor set layout binding], applications have to choose one of the available link:{refpage}VkDescriptorType.html[descriptor types] that will occupy that binding.
+This extension adds a new descriptor type:
+
+[source,c]
+----
+VK_DESCRIPTOR_TYPE_MUTABLE_EXT = 1000351000
+----
+
+When this descriptor type is specified, the descriptor type is specified to be a union of other types that are further specified for each binding with the following structures:
+
+[source,c]
+----
+typedef struct VkMutableDescriptorTypeCreateInfoEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    uint32_t                                mutableDescriptorTypeListCount;
+    const VkMutableDescriptorTypeListEXT*   pMutableDescriptorTypeLists;
+} VkMutableDescriptorTypeCreateInfoEXT;
+
+typedef struct VkMutableDescriptorTypeListEXT {
+    uint32_t                                descriptorTypeCount;
+    const VkDescriptorType*                 pDescriptorTypes;
+} VkMutableDescriptorTypeListEXT;
+----
+
+`VkMutableDescriptorTypeCreateInfoEXT` can be added to the `pNext` chain of link:{refpage}VkDescriptorSetLayoutCreateInfo.html[VkDescriptorSetLayoutCreateInfo], where each entry in `pMutableDescriptorTypeLists` corresponds to a binding at the same index in `pBindings`.
+The list of descriptor types in `VkMutableDescriptorTypeListEXT` then defines the set of types which can be used in that binding.
+
+When writing a descriptor to such a binding in a descriptor set, the actual type of the descriptor must be specified, and it must be one of the types specified in this list when the set layout was created.
+
+A mutable descriptor can be consumed as the descriptor type it was updated with.
+For example, if a mutable descriptor was updated with a `STORAGE_IMAGE` it can be consumed as a `STORAGE_IMAGE` in the shader.
+Consuming the descriptor as any other descriptor type is undefined behavior.
+Descriptor types are inherited through descriptor copies as well where the type of the source descriptor is made active in the destination descriptor.
+
+==== Supported descriptor types
+
+As a baseline, the extension guarantees that any combination of these descriptor types are supported, which aims to mirror DirectX 12:
+
+ - `VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER` (SRV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER` (UAV)
+ - `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE` (SRV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_IMAGE` (UAV)
+ - `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER` (CBV)
+ - `VK_DESCRIPTOR_TYPE_STORAGE_BUFFER` (SRV or UAV depending on read-only)
+
+NOTE: Samplers live in separate heaps in DirectX 12, and do not need to be mutable like this.
+
+Support can be restricted if the descriptor type in question cannot be used with the descriptor flags in question.
+An example here would be `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER` which may not be supported with update-after-bind on some implementations.
+In this situations, applications need to use `VK_DESCRIPTOR_TYPE_STORAGE_BUFFER` and modify the shaders accordingly, but ideally, plain uniform buffers should be used instead if possible.
+
+It is possible to go beyond the minimum supported set. For this purpose, the desired descriptor set layout can be queried with link:{refpage}vkGetDescriptorSetLayoutSupport.html[vkGetDescriptorSetLayoutSupport].
+
+The interactions between descriptor types and flags can be complicated enough that it is non-trivial to report a list of supported descriptor types at the physical device level.
+
+NOTE: Acceleration structures can also be implemented as a buffer containing `uint64_t` addresses using `OpConvertUToAccelerationStructureKHR`. No descriptor is required. Alternatively, a separate descriptor set for acceleration structures can also be used.
+
+NOTE: While it is valid to expose `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER`, implementations are discouraged from doing so due to their large sizes and potentially awkward memory layout. Applications should never aim to use combined image samplers with mutable descriptors.
+
+==== Performance considerations
+
+A mutable descriptor is expected to consume as much memory as the largest descriptor type it supports,
+and it is expected that there will be holes in GPU memory between descriptors when smaller descriptor types are used.
+Using mutable descriptor types should only be considered when it is meaningful, e.g. when the alternative is emitting 6+ large descriptor arrays as a workaround in bindless DirectX 12 emulation or similar.
+Using mutable descriptor types as a lazy workaround for using concrete descriptor types will likely lead to lower GPU performance.
+It might also disable certain fast-paths in implementations since the descriptors types are no longer statically known at layout creation time.
+
+=== Host-Only Descriptor Sets
+
+In order to enable better host write performance for descriptors, a new flag is added to descriptor pools and descriptor set layouts to specify that accesses to descriptor sets created with them will be done in host-local memory, and does not need to be directly visible to the device.
+Without these flags, implementations may favor device-local memory with better device access performance characteristics, at the expense of host access performance.
+These flags allow device access performance to be disregarded, enabling memory with better host access performance to be used.
+Host-only descriptor sets cannot be bound to a command buffer, and their contents must be copied to a non-host-only set using link:{refpage}vkUpdateDescriptorSets.html[vkUpdateDescriptorSets] before those descriptors can be used.
+
+Descriptor pools are specified as host-only using a new link:{refpage}VkDescriptorSetLayoutCreateFlagBits.html[create flag]:
+
+[source,c]
+----
+VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT = 0x00000004
+----
+
+Any descriptor set created from a pool with this flag set is a host-only descriptor set.
+
+The memory layout of a descriptor set may also be optimized for device access rather than host access, so a new link:{refpage}VkDescriptorSetLayoutCreateFlagBits.html[create flag] is provided to specify when a layout will be used with a host-only pool:
+
+[source,c]
+----
+VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 0x00000004
+----
+
+Descriptor set layouts created with this flag must only be used to create descriptor sets from host-only pools, and descriptor sets created from host-only pools must be created with layouts that specify this flag.
+In addition, as such layouts are not valid for device access, link:{refpage}VkPipelineLayout.html[VkPipelineLayout] objects cannot be created with such descriptor set layouts.
+
+Host-only descriptor sets do not consume device-global descriptor resources (e.g. `maxUpdateAfterBindDescriptorsInAllPools`),
+and they support concurrent descriptor set updates similar to update-after-bind.
+The intention is that a host-only descriptor set can be implemented with a simple `malloc` to back the descriptor set payload.
+
+=== Features
+
+A single new feature enables all the functionality of this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT {
+    VkStructureType                         sType;
+    void*                                   pNext;
+    VkBool32                                mutableDescriptorType;
+} VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT;
+----
+
+
+== Examples
+
+
+=== Specifying a descriptor binding equivalent to a DirectX 12 CBV_SRV_UAV heap
+
+DirectX 12 descriptor heaps can be specified for general resources containing all types of buffer and image descriptors using the https://docs.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_descriptor_heap_type[D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV] type.
+The following example shows a binding specification in Vulkan that would allow it to be used with the same descriptor types as are valid in DirectX 12.
+
+[source,c]
+----
+VkDescriptorType cbvSrvUavTypes[] = {
+    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
+    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+    VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR /* Need to check support if this is desired. */};
+
+VkMutableDescriptorTypeListVALVE cbvSrvUavTypeList = {
+    .descriptorTypeCount = sizeof(cbvSrvUavTypes)/sizeof(VkDescriptorType),
+    .pDescriptorTypes    = cbvSrvUavTypes};
+
+VkMutableDescriptorTypeCreateInfoEXT mutableTypeInfo = {
+    .sType                          = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT,
+    .pNext                          = NULL,
+    .mutableDescriptorTypeListCount = 1,
+    .pMutableDescriptorTypeLists    = &cbvSrvUavTypeList};
+
+VkDescriptorSetLayoutBinding cbvSrvUavBinding = {
+    .binding                        = 0,
+    .descriptorType                 = VK_DESCRIPTOR_TYPE_MUTABLE_EXT,
+    .descriptorCount                = /*...*/,
+    .stageFlags                     = /*...*/,
+    .pImmutableSamplers             = NULL};
+
+VkDescriptorSetLayoutCreateInfo createInfo = {
+    .sType                          = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+    .pNext                          = &mutableTypeInfo,
+    .flags                          = /*...*/,
+    .bindingCount                   = 1,
+    .pBindings                      = &cbvSrvUavBinding};
+
+// To use optional features, need to query first.
+VkDescriptorSetLayoutSupport support = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT };
+vkGetDescriptorSetLayoutSupport(device, &createInfo, &support);
+
+if (support.supported) {
+    VkDescriptorSetLayout layout;
+    VkResult result = vkCreateDescriptorSetLayout(device, &createInfo, NULL, &layout);
+} else {
+    // Fallback
+}
+----
+
+=== Accessing a mutable descriptor in a shader
+
+Very little needs to change, but multiple descriptors can alias over the same binding.
+
+==== GLSL
+
+[source,c]
+----
+layout(set = 0, binding = 0) uniform texture2D Tex2DHeap[];
+layout(set = 0, binding = 0) uniform texture3D Tex3DHeap[];
+layout(set = 0, binding = 0) uniform textureCube TexCubeHeap[];
+layout(set = 0, binding = 0) uniform textureBuffer TexelBufferHeap[];
+layout(set = 0, binding = 0) uniform image2D RWTex2DHeap[];
+layout(set = 0, binding = 0) uniform image3D RWTex3DHeap[];
+layout(set = 0, binding = 0) uniform imageBuffer StorageTexelBufferHeap[];
+layout(set = 0, binding = 0) uniform CBVHeap { vec4 data[4096]; } CBVHeap[];
+// Can alias freely. Might need Aliased decorations if the same SSBO is accessed with different data types.
+// SRV raw buffers
+layout(set = 0, binding = 0) readonly buffer { float data[]; } SRVFloatHeap[];
+layout(set = 0, binding = 0) readonly buffer { vec2 data[]; } SRVFloat2Heap[];
+layout(set = 0, binding = 0) readonly buffer { vec4 data[]; } SRVFloat4Heap[];
+// UAV raw buffers
+layout(set = 0, binding = 0) buffer { float data[]; } UAVFloatHeap[];
+layout(set = 0, binding = 0) buffer { vec2 data[]; } UAVFloat2Heap[];
+layout(set = 0, binding = 0) buffer { vec4 data[]; } UAVFloat4Heap[];
+
+void main()
+{
+    // Access the heap freely ala SM 6.6. All variables alias on top of the same descriptor array.
+    texelFetch(Tex2DHeap[index0], ...);
+    texelFetch(Tex3DHeap[index1], ...);
+    vec4 data = CBVHeap[index2].data[offset];
+}
+----
+
+The ergonomics here are somewhat awkward, but it is possible to move the resource declarations to a common header if desired.
+
+For this to be well defined, `VK_DESCRIPTOR_BINDING_FLAG_PARTIALLY_BOUND_BIT` must be used on the mutable binding, since descriptor validity is only checked when a descriptor is dynamically accessed.
+
+==== HLSL
+
+The example above can mirror HLSL using `\[[vk::]]` attributes, but for a more direct SM 6.6-style integration, it is possible to implement this in a HLSL frontend as such:
+
+ - Application specifies that resource heap lives in a specific set / binding.
+  - To fallback to non-mutable support, it is possible to support a different set / binding for each Vulkan descriptor type.
+ - HLSL frontend emits `OpVariable` runtime array aliases as required when a descriptor is loaded in `ResourceDescriptorHeap[]` or `SamplerDescriptorHeap[]`.
+  - The set / binding is provided by application.
+  - Index into that array is 1:1 the index in HLSL source.
+  - NonUniformResourceIndex must be forwarded to where the resource is accessed.
+  - https://github.com/HansKristian-Work/dxil-spirv[dxil-spirv] implements this.
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_non_seamless_cube_map.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_non_seamless_cube_map.adoc
new file mode 100644
index 0000000..ac4165e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_non_seamless_cube_map.adoc
@@ -0,0 +1,56 @@
+// Copyright 2022 Georg Lehmann
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_non_seamless_cube_map
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+== Problem Statement
+
+Other graphics APIs, such as OpenGL and D3D9, have cube maps without seamless edge handling.
+When sampling near an edge, instead of interpolating between two texels on the neighboring cube map faces the usual sampler address modes are applied within a single face.
+Vulkan only has cube maps with seamless edge handling.
+
+This proposal aims to provide functionality to support non seamless cube maps.
+
+== Solution Space
+
+=== Emulation With 2D Array Textures
+
+The idea behind this solution is to represent cube map textures as 2D array textures with 6 layers, one for each cube map face.
+Cube map coordinates can then be transformed to a face index and a 2D coordinate within this face, so that then the fixed function sampling takes care of applying the sampler address modes.
+A problem is correct LOD selection while preserving anisotropic filtering. Emulation of implicit derivatives with LOD offset cannot be easily emulated with explicit derivatives.
+Additionally, having pipeline variants depending on if seamless cube sampling is used prevents precompiling pipelines if any cubes are used as this information is only known at draw time.
+With advanced OpenGL features it is also not possible to know if a sampling operation is seamless even at draw time, so emulation needs extra descriptors, uniforms and branches.
+
+
+=== A Per Sampler Seamless Setting
+
+A new per sampler setting to allow to select if cube map edge sampling is seamless can be introduced.
+This can commonly be handled by fixed function hardware, which allows identical behavior to the other graphics APIs.
+
+This solution is adopted for this problem.
+
+== Proposal
+
+```c
+typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           nonSeamlessCubeMap;
+} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT;
+```
+
+`nonSeamlessCubeMap` is the feature enabling this extension’s functionality.
+
+Using `VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT` disables seamless cube map edge handling.
+
+== Example
+
+As an example, if an application creates a cube map and wants to always clamp to the edge within the selected cube face, `VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT` together with `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE` can be used.
+
+== Issues
+
+No known issues.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_opacity_micromap.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_opacity_micromap.adoc
new file mode 100644
index 0000000..90f6bd7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_opacity_micromap.adoc
@@ -0,0 +1,89 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Proposal Template
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+VK_EXT_opacity_micromap adds a micromap object to associate micro-geometry information with geometry in an acceleration
+structure as well as a specific application of an opacity micromap to acceleration sub-triangle opacity without
+having to call a user any hit shader.
+
+== Problem Statement
+
+Geometry in an acceleration structure in the basic ray tracing extensions contains either geometric information or
+bounds for custom geometry. There are some applications where having a more compact representation of sub-triangle
+level information can be useful. One specific application is handling opacity information more efficiently at traversal
+time than having to return to an application-provided any hit shader. 
+
+== Solution Space
+
+The mapping of the data onto the mesh is one design choice. Traditionally, texturing onto geometry is accomplished by
+application-provided texture coordinates, but in this case that would add significant extra metadata and require 
+potentially more complicated sampling. A quad domain is natural for some interpretations of map data, but that may
+require more information from the application on at least adjacency information, even if not full UV coordinates. A
+triangular mapping is very amenable to performant implementations both in hardware and in software while not requiring
+extra information from the application outside of a given triangle. 
+
+Relatedly, the mapping from triangle to index is another design choice. With raster images, pitch ordering is the de facto
+standard for interoperating images. There is no direct analogy to a triangular domain, though, and the most similar mapping
+is significantly less trivial than raster images. Moving to a mapping with more locality gives gains in terms of locality
+of processing, ease of downsampling, and similar operations.
+
+== Proposal
+
+The extension defines a VkMicromapEXT object and functions to manipulate it which parallel the functions that operate on
+acceleration structures. The micromap information is defined on the domain of subdivided triangles on a given acceleration
+structure geometry triangle. The build information contains usage information to compute the size including the number of triangles
+with a given subdivision level and format. For an opacity micromap, the micromap contains either 1-bit or 2-bit information
+which controls how the traversal is performed when combined with a set of flags. 
+
+Once the micromap is built an extension structure can attach it to
+link:{refpage}VkAccelerationStructureGeometryKHR.html[VkAccelerationStructureGeometryKHR] along with
+mapping information from each triangle in the geometry to a specified triangle index in the micromap.
+
+== Examples
+
+    VkMicromapBuildInfoEXT mmBuildInfo = { VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT };
+
+    mmBuildInfo... = ;
+
+    vkGetMicromapBuildSizesEXT(..., &mmBuildInfo, &sizeInfo)
+
+    CreateBuffer(sizeInfo)
+
+    VkMicromapCreateInfoEXT mmCreateInfo = { VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT };
+
+    mmCreateInfo... = ;
+
+    vkCreateMicromapEXT(device, mmCreateInfo, null, &micromap)
+
+    mmBuildInfo = ...;
+
+    vkCmdBuildMicromapsEXT(cmd, 1, &mmBuildInfo);
+
+    VkAccelerationStructureTrianglesOpacityMicromapEXT opacityGeometryMicromap = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT };
+
+    opacityGeometryMicromap... = ;
+
+    VkAccelerationStructureGeometryKHR bottomASGeometry = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR };
+
+    bottomASGeometry... = ;
+    bottomASGEometry.pNext = &opacityGeometryMicromap;  
+
+    vkGetAccelerationStructureBuildSizesKHR()
+    vkCreateAccelerationStructureKHR()
+    vkCmdBuildAccelerationStructureKHR()
+
+== Issues
+
+=== RESOLVED: Are there any issues that belong here?
+
+All of the issues are in the spec documents.
+
+== Further Functionality
+
+ . A flag to give an implementation more flexibility in conservatively calling any hit shaders may be interesting. During EXT discussion,
+   it was decided that it was not ready and postponed for a possible extension to the extension.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_library_group_handles.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_library_group_handles.adoc
new file mode 100644
index 0000000..cad56c8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_library_group_handles.adoc
@@ -0,0 +1,140 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_pipeline_library_group_handles
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This extension adds support for querying ray tracing group handles on library creation time rather than waiting for pipeline linking.
+This improves composability for applications that mix and match libraries or incrementally create shader groups.
+
+Compatibility with DXR 1.1 is also improved. In that API, it is possible to query handles on COLLECTION creation time,
+and handles are guaranteed to remain bitwise identical when linked into other pipelines.
+AddToStateObject() is another API which incrementally adds shader groups to a ray tracing pipeline and group handles are required to remain bitwise identical in that scenario as well.
+
+== Problem Statement
+
+When using pipeline libraries with ray tracing,
+the intent is that pipeline libraries allow for a flexible model where pipeline libraries are compiled in isolation, and later, pipelines can be linked rapidly on-demand.
+Based on the relevant materials that are active in a scene, a ray tracing pipeline can be linked that suits that scene.
+
+However, relinking a pipeline in the current API means that all group handles are invalidated,
+and group handles must be required and uploaded to the device for every pipeline. This is not desirable.
+
+== Solution Space
+
+There are not many options for how to implement this feature.
+The only way to expose this feature is to allow group handles to be queried on the pipeline library itself.
+The second part is to add a guarantee about invariance.
+For every library that includes a pipeline library,
+the group handles remain bitwise identical.
+This means that applications do not have to query the group handle after linking, it can keep using the same record buffers in ray tracing dispatches.
+
+For capture replay, we also allow capture replay handles to be extracted from pipeline libraries. When creating a pipeline library,
+those capture replay handles can be used, which also ensures invariance for any pipeline that includes the library.
+
+Rather than allowing group handles directly from libraries,
+it would be possible to require applications to link a pipeline library trivially by creating a complete pipeline with no extra shader groups and one pipeline library.
+From there, group handles can be queried.
+This is problematic since fully linked pipelines must include a ray generation shader stage. Forcing applications to include one just for the sake of querying handles is awkward.
+
+Another consideration is if we need a new pipeline creation flag to state that group handles can be queried from a library.
+The assumption and premise of this extension is that drivers already compile pipelines into binary form on library creation time,
+so adding a pipeline creation flag just clutters the API.
+
+== Proposal
+
+=== Features
+
+The entire extension is covered by a feature struct.
+
+[source,c]
+----
+typedef struct VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT {
+    VkStructureType                         sType;
+    void*                                   pNext;
+    VkBool32                                pipelineLibraryGroupHandles;
+} VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
+----
+
+When this feature is enabled, restrictions are lifted on `vkGetRayTracingShaderGroupHandlesKHR` and `vkGetRayTracingCaptureReplayShaderGroupHandlesKHR`,
+and it is valid to use it on pipeline libraries as well.
+The expectation is that implementations create binaries at library creation time and there are no differences in querying group handles from a library or a linked pipeline.
+Invariance is also guaranteed, so that the group handle can be queried just once by application and reused for every pipeline that links against the library.
+
+Group indices work as-if the pipeline was already fully linked.
+
+Note that invariance is not relevant for linked pipelines that are created without `VK_PIPELINE_CREATE_LIBRARY_BIT_KHR`.
+These pipelines cannot be linked into any other pipelines, so the question of invariance does not exist.
+Creating an equivalent pipeline without going through the library mechanism does not guarantee invariance of group handles.
+
+== Example
+
+=== Incrementally linking
+
+This style of implementation matches DXR 1.1 AddToStateObject().
+
+[source,c]
+----
+// Pseudo-code. Compile libraries separately.
+vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pGroups = &group0, &library0);
+vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pGroups = &group1, &library1);
+vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pGroups = &group2, &library2);
+
+// Query these once. Either upload to GPU or save them on CPU side.
+// Application can start constructing record buffers.
+uint8_t groupBuffer[3][32];
+vkGetRayTracingShaderGroupHandlesKHR(library0, groupCount = 1, &groupBuffer[0]);
+vkGetRayTracingShaderGroupHandlesKHR(library1, groupCount = 1, &groupBuffer[1]);
+vkGetRayTracingShaderGroupHandlesKHR(library2, groupCount = 1, &groupBuffer[2]);
+
+// Not required yet, compile these in the background for when they are needed.
+async {
+        vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pGroups = &group3, &library3);
+        vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pGroups = &group4, &library4);
+        uint8_t groupBuffer[2][32];
+        vkGetRayTracingShaderGroupHandlesKHR(library3, groupCount = 1, &groupBuffer[0]);
+        vkGetRayTracingShaderGroupHandlesKHR(library4, groupCount = 1, &groupBuffer[1]);
+}
+
+vkCreateRayTracingPipelines(pLibraryInfo = { &library0, &library1, &library2 }, &rtpso);
+
+// Trace some rays.
+vkCmdBindPipeline(rtpso);
+vkCmdTraceRaysKHR();
+
+// Loading screen, we need some more material in next scene, link them in now incrementally.
+wait { library3, library4 }
+vkCreateRayTracingPipelines(pLibraryInfo = { &library0, &library1, ..., &library4 }, &rtpso2);
+vkDestroyPipeline(rtpso);
+
+// Trace rays, with upgraded pipeline. No need to requery all group handles.
+vkCmdBindPipeline(rtpso2);
+vkCmdTraceRaysKHR();
+----
+
+An alternative style for incremental link can be used where combine libraries into a fused library and link it.
+On an incremental link, we reduce the number of handles used. This might improve linking performance or ease of use.
+The downside of this approach is that we cannot easily remove pipelines once linked.
+
+[source,c]
+----
+// It is legal to link other libraries into a new library.
+vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pLibraryInfo = { &library0, &library1, &library2 }, &rtpsoLibrary);
+vkCreateRayTracingPipelines(pLibraryInfo = { &rtpsoLibrary }, &rtpso);
+
+// Trace some rays.
+vkCmdBindPipeline(rtpso);
+vkCmdTraceRaysKHR();
+
+// Keep incrementally linking.
+wait { library3, library4 }
+vkCreateRayTracingPipelines(flags = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pLibraryInfo = { &rtpsoLibrary, &library3, &library4 }, &rtpso2Library);
+vkCreateRayTracingPipelines(pLibraryInfo = { &rtpso2Library }, &rtpso2);
+vkDestroyPipeline(rtpso);
+
+vkCmdBindPipeline(rtpso2);
+vkCmdTraceRaysKHR();
+----
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_protected_access.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_protected_access.adoc
new file mode 100644
index 0000000..47eb861
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_pipeline_protected_access.adoc
@@ -0,0 +1,154 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_pipeline_protected_access
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal regards pipeline access to protected memory, and provides the
+means for applications to distinguish between pipelines that do and do not
+access protected memory.
+
+== Problem Statement
+
+Currently, access to protected memory is enabled with the
+`VkPhysicalDeviceProtectedMemoryFeatures::protectedMemory` feature.
+As this feature is enabled on the device, every pipeline created by the driver
+may be used to access protected memory.
+For some vendors, this has negative ramifications on the performance of
+pipeline creation and/or execution.
+
+Some applications may require access to protected memory in a handful of
+pipelines while the rest of the pipelines do not.
+In some cases, it may not be known at device creation time whether protected memory access
+would be necessary, for example in an OpenGL layer over Vulkan.
+Enabling the `protectedMemory` feature in such applications could lead to
+reduced performance with every pipeline instead of only those that do in fact
+access protected memory.
+
+This proposal addresses this problem by allowing applications to specify
+protected memory access in pipeline granularity.
+
+== Solution Space
+
+The proposed solution is a new Vulkan extension that allows the application to
+specify whether and how each individual pipeline may access protected memory.
+
+=== Per Pipeline Protected Access Flag
+
+A `VkPipelineCreateFlagBits` flag can be specified to disallow
+the pipeline from being used in a protected command buffer and submission.
+
+An additional `VkPipelineCreateFlagBits` flag could restrict the usage
+of a pipeline to protected command buffers.
+
+Pros:
+
+- Simple to use
+
+Cons:
+
+- If protected access is required for only one kind of resource, for example a
+  protected buffer, the use of a single boolean disallows optimizations that
+  could be applicable to access to other kinds of resources.
+
+=== Per Usage Access Flags
+
+An alternative could be to provide the usages that may require protected memory
+access when creating a pipeline; a set of `VkBufferUsageFlags` and
+`VkImageUsageFlags` flags.
+
+Pros:
+
+- Specifying protected access to one usage does not disallow optimizations to
+  accesses to unprotected resources that are used differently.
+
+Cons:
+
+- If many resources with the same usage are accessed, but not all need to be
+  protected, access to all of them may be suboptimal.
+
+=== Per Resource Access Flags
+
+Ultimately, the application could specify exactly which resources may be
+protected; a flag for each render pass attachment, a flag for each binding in
+the descriptor set layout, a flag for each vertex binding, etc.
+
+Pros:
+
+- This can theoretically lead to the most efficient pipeline that only pays a
+  potential penalty for access to the exact resources that use protected memory.
+
+Cons:
+
+- This is considerably more complex, requiring flags added to numerous places.
+
+== Proposal
+
+In practice, pipelines that actually access protected memory are scarce and
+rarely, if ever, access a mixture of protected and unprotected resources of the
+same kind.
+Additionally, on some hardware, not all combinations of protected access for
+input and output resources are possible.
+As such, the first solution is adopted in this extension, serving the needs of
+all known users without introducing unnecessary complexity.
+
+=== Features
+
+[source,c]
+----
+typedef struct VkPhysicalDevicePipelineProtectedAccessFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineProtectedAccess;
+} VkPhysicalDevicePipelineProtectedAccessFeaturesEXT;
+----
+
+- `pipelineProtectedAccess` specifies that per-pipeline protected access can be
+  specified.
+
+When this feature is enabled, pipelines can be flagged as not accessing
+protected resources (as otherwise is assumed by the `protectedMemory` feature).
+Such pipelines are not allowed to be bound to protected command buffers.
+Conversely, they can be flagged such that they can only be bound to protected
+command buffers.
+
+=== Pipeline Creation
+
+To create a pipeline that will not access protected memory, and that cannot be
+used in a protected command buffer and submission, specify the
+`VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT` create flag.
+
+To create a pipeline that may access protected memory, and that cannot be used
+in a non-protected command buffer and submission, specify the
+`VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT` create flag.
+
+== Issues
+
+=== RESOLVED: How should the `pipelineProtectedAccess` feature interact with `protectedMemory`?
+
+The `pipelineProtectedAccess` feature allows pipelines to be restricted to or
+excluded from access to protected resources.
+Without the `protectedMemory` feature, there cannot be any protected resources
+to begin with.
+As such, enabling the `pipelineProtectedAccess` feature without the
+`protectedMemory` is ineffective, but is nevertheless not incorrect.
+
+=== RESOLVED: Should the `pipelineProtectedAccess` feature allow pipelines to opt into protected access or out of it?
+
+Both, with the default retaining current Vulkan behavior.
+This is necessary to make sure that the mere act of enabling the
+`pipelineProtectedAccess` feature does not break existing code.
+Opt-in is supported in addition to opt-out to help platforms where the specific
+knowledge that a pipeline is only used with protected command buffers leads to
+possible optimizations.
+
+=== RESOLVED: Should links between protected and unprotected pipeline libraries be allowed?
+
+No.
+The linked pipeline could not be considered protected in that case, as parts of
+it has been created without the necessary flag.
+And if the result is an unprotected pipeline, it is not useful (or efficient)
+to create parts of it as protected.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_primitives_generated_query.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_primitives_generated_query.adoc
new file mode 100644
index 0000000..982e3a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_primitives_generated_query.adoc
@@ -0,0 +1,92 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_primitives_generated_query
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal regards layering OpenGL over Vulkan, and provides a convenience
+query for use by such layers.
+
+== Problem Statement
+
+In OpenGL, the `GL_PRIMITIVES_GENERATED` query can be used independently from
+whether transform feedback is active or not.
+There is no direct equivalent in Vulkan.
+
+This extension provides a simple and efficient way to implement this OpenGL
+query on top of Vulkan.
+
+== Solution Space
+
+=== Emulation Through Other Vulkan Queries
+
+In Vulkan, the second result from the
+`VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT` query produces the same value as
+OpenGL's `GL_PRIMITIVES_GENERATED` query.
+However, this can only be used when transform feedback is active, and thus is
+not suitable.
+
+The result of `VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT` from the
+`VK_QUERY_TYPE_PIPELINE_STATISTICS` query also produces the same result.
+Support for this query implies support for a number of other statistics that
+are not universally available, and so the `pipelineStatisticsQuery` feature is
+often not available on Android devices.
+Furthermore, emulating `GL_PRIMITIVES_GENERATED` and
+`GL_CLIPPING_INPUT_PRIMITIVES_ARB` through the same Vulkan query creates
+unnecessary complications, given that only one query of each type can be active
+at a time in Vulkan.
+
+=== A New Query Type
+
+A new Vulkan query type can be introduced to provide identical results to
+OpenGL's `GL_PRIMITIVES_GENERATED` query.
+There are a number of limitations to address:
+
+- Similarly to `VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT`, as
+  stated by the Vulkan spec, if `rasterizerDiscardEnable` is enabled the query
+  may not produce valid results on some hardware.
+- Some hardware cannot produce a valid value when a non-zero transform feedback
+  stream is used (i.e.
+  `VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream` is not
+  zero).
+
+This solution is adopted for this problem.
+
+== Proposal
+
+A new query type is added, namely `VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT`,
+that behaves identically to the OpenGL `GL_PRIMITIVES_GENERATED` query.
+
+=== Features
+
+[source,c]
+----
+typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           primitivesGeneratedQuery;
+    VkBool32           primitivesGeneratedQueryWithRasterizerDiscard;
+    VkBool32           primitivesGeneratedQueryWithNonZeroStreams;
+} VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT;
+----
+
+- `primitivesGeneratedQuery` specifies if the query is usable.
+- If `primitivesGeneratedQueryWithRasterizerDiscard` is false, then rasterizer
+  discard (through
+  `VkPipelineRasterizationStateCreateInfo::rasterizerDiscardEnable` or
+  equivalent dynamic state) must not be enabled.
+- If `primitivesGeneratedQueryWithNonZeroStreams` is false, the query cannot be
+  used in conjunction with non-zero transform feedback streams.
+
+On hardware where `primitivesGeneratedQueryWithRasterizerDiscard` is not
+available, the OpenGL layer can discard the rasterization result by some other
+means; for example by using an empty scissor.
+
+On hardware where `primitivesGeneratedQueryWithNonZeroStreams` is not
+available, the transform feedback query can be used for non-zero streams since
+transform feedback is necessarily active.
+This is nonetheless not a concern for OpenGL layers as non-zero transform
+feedback streams are not supported in OpenGL.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_rasterization_order_attachment_access.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_rasterization_order_attachment_access.adoc
new file mode 100644
index 0000000..1793c9d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_rasterization_order_attachment_access.adoc
@@ -0,0 +1,88 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_rasterization_order_attachment_access
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal extends the mechanism of input attachments to allow access to framebuffer attachments that are used both as input and as
+color or depth/stencil attachments from one fragment to the next, in rasterization order, without explicit synchronization.
+
+== Problem Statement
+
+Renderpasses, and specifically subpass self-dependencies enable much of the same functionality as the framebuffer
+fetch and pixel local storage extensions did for OpenGL ES.
+But certain techniques such as programmable blending are awkward or impractical to implement with these alone, in part because a self-dependency
+is required every time a fragment will read a value at a given sample coordinate.
+For these use-cases, a mechanisms that more closely matches framebuffer fetch is useful.
+
+== Solution Space
+
+For simplicity, this proposal extends the original render pass API and not the link:{refpage}VK_KHR_dynamic_rendering.html[VK_KHR_dynamic_rendering] API.
+Raster order attachment reads are done as input attachment reads (as before), but self-dependencies are no longer required when reading a value written
+by fragments earlier in rasterization order.
+
+Since input attachments are not used in dynamic rendering, a different approach is needed there. This proposal does not address that issue.
+
+== Proposal
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           rasterizationOrderColorAttachmentAccess;
+    VkBool32           rasterizationOrderDepthAttachmentAccess;
+    VkBool32           rasterizationOrderStencilAttachmentAccess;
+} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT;
+----
+These features allow the implementation to expose separately whether rasterization order access is supported
+for color attachments, depth attachments, and stencil attachments.
+
+The application declares at pipeline creation time whether rasterization order access will be used
+for color, depth, or stencil aspects, by setting the appropriate combination of the following flags on the pipeline:
+
+[source,c]
+----
+typedef enum VkPipelineDepthStencilStateCreateFlagBits {
+    VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000001,
+    VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000002,
+    VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineDepthStencilStateCreateFlagBits;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+
+typedef enum VkPipelineColorBlendStateCreateFlagBits {
+    VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT = 0x00000001,
+    VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineColorBlendStateCreateFlagBits;
+----
+
+Additionally, per subpass flags are added to indicate whether a subpass is compatible with
+rasterization order access. The following flags are added to VkSubpassDescriptionFlagBits:
+
+[source,c]
+----
+typedef enum VkSubpassDescriptionFlagBits {
+    /* existing flags not shown */
+    VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT = 0x00000010,
+    VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000020,
+    VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000040,
+    VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassDescriptionFlagBits;
+----
+
+== Issues
+
+=== RESOLVED: Is there any interaction with the link:{refpage}VK_KHR_dynamic_rendering.html[VK_KHR_dynamic_rendering] extension?
+
+No. This extension only affects reads from input attachments.
+Render pass instances begun with `vkCmdBeginRenderingKHR` do not have input attachments and a different mechanism will be needed to provide similar functionality in that case.
+
+=== RESOLVED: What are the differences to the link:{refpage}VK_ARM_rasterization_order_attachment_access.html[VK_ARM_rasterization_order_attachment_access] extension?
+
+None. This extension is a multi-vendor version of that extension with no changes.
+The two extensions can be used interchangeably since the API structures and enumeration alias each other.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_module_identifier.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_module_identifier.adoc
new file mode 100644
index 0000000..f441936
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_module_identifier.adoc
@@ -0,0 +1,154 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+= VK_EXT_shader_module_identifier
+
+This extension adds functionality to avoid having to pass down complete SPIR-V to shaders in situations
+where we speculate that an implementation already has a pipeline blob in cache and conversion to SPIR-V is not needed to begin with.
+
+== Problem Statement
+
+In some applications, SPIR-V is generated on-the-fly, usually by translating from some other representation.
+API translation libraries and emulators in particular frequently run into these problems.
+
+In such applications, the overhead required to obtain valid SPIR-V before any pipeline creation call can be problematic.
+Especially in graphics API translation layering efforts, applications expect that compilation with hot caches is "instant",
+as that is how a native driver would behave. Translating to SPIR-V can therefore become a performance problem.
+There are two common problems:
+
+ - Applications compile PSOs late -> stutter! -> but we are expected to mitigate
+ - Applications compile a lot of PSOs early -> good! but can lead to excessive load times even on subsequent runs of application
+
+For translation layers, there are currently two options we can consider to mitigate the issue:
+
+ - Optimize the translation
+ - Cache converted SPIR-V on disk
+
+Neither option may be good enough. Disk requirements for large application caches can be impractical on some platforms,
+since we might end up having to store in the order of 100k SPIR-V modules, easily in the gigabyte range.
+Optimizing the translation might not be enough when faced with tens of thousand pipelines being compiled at once.
+
+== Solution Space
+
+The solution this extension addresses is the minimum viable approach to fix the problem.
+The main idea is that when pipeline caches are primed, SPIR-V modules are largely useless,
+since most implementations are likely to only hash, and never look at the SPIR-V again.
+We can just hand back the hash to the implementation instead.
+
+The extension is designed to work on top of `VK_EXT_pipeline_creation_cache_control`.
+We can reuse the main idea of a "non-blocking" compile where we return early if pipeline compilation is required,
+and the translation layer can build SPIR-V as needed. Next time, we are likely to hit in cache.
+
+An important consideration here is that this solution is intended to aid internal implementation caching,
+i.e. a "magic disk cache", which most desktop implementations of graphics APIs are expected to have.
+
+For explicit application side caching mechanisms, larger cache sizes are reasonable and expected,
+but we are more constrained with internal caches. These should be as lean and mean as possible,
+but internal caches are also more "fuzzy" in nature. Spurious failure is okay, a "best effort" approach
+is suitable for this use case.
+
+One could extend this idea to full PSO keys as well, but that is better left to other proposals.
+
+== Example use case
+
+One scenario where this extension has been found to be particularly useful is D3D12 to Vulkan translation.
+The translation layers need to translate DXBC and DXIL code to SPIR-V, which is then translated to GPU ISA.
+SPIR-V to ISA translation is cached by Vulkan pipeline caches or in-driver caches,
+but the DXBC/DXIL -> SPIR-V cache is not covered by the API.
+
+We can store SPIR-V on-disk and reload that in response to a pipeline creation call,
+but the overhead of storing SPIR-V on disk, validating it, decompressing it, etc, is a significant overhead that can be avoided,
+with storage space being the most significant problem.
+If the final ISA is present in pipeline caches, we do not really need the SPIR-V at all.
+
+We have observed >95% disk savings with this scenario, and this is transformative since it makes it practical to share this cache across different machines.
+This hypothetically allows an end-user to never observe shader compilation stutter or excessive load times on first run of a game.
+
+== Proposal
+
+=== Querying identifier
+
+After the application has converted a shader to SPIR-V and compiled a pipeline, `vkGetShaderModuleIdentifierEXT` is used to obtain a shader identifier.
+This identifier can be stored on-disk for later use. (`vkGetShaderModuleCreateInfoIdentifierEXT` can be used as an object-less alternative.)
+`VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT::shaderModuleIdentifierAlgorithmUUID`
+is also needed so applications know if we need to throw away any caches using the identifier.
+This should only happen on different driver implementations. Different versions of the same driver are not expected to change hashing algorithms.
+For drivers sharing the same framework (e.g. Mesa), the module hashing algorithm could even be the same one.
+
+To make the API friendly to applications, there is a small upper bound on how large an identifier may be,
+so that the identifiers can be retrieved without memory allocation.
+
+=== `VK_NULL_HANDLE` module proxy
+
+On subsequent runs of an application, we speculate that the driver caches (or VkPipelineCaches) are primed, and thus having SPIR-V is not useful anymore.
+We then set `VkPipelineShaderStageCreateInfo::module` to `VK_NULL_HANDLE` and chain in `VkPipelineShaderStageModuleIdentifierCreateInfoEXT` as a proxy.
+This allows a driver to generate the same internal PSO key that it would generate if we passed in actual SPIR-V.
+`VK_PIPELINE_CREATE_FAIL_ON_COMPILE_REQUIRED_BIT` must be set in this situation, since this is a speculative compile by definition.
+
+=== Handling fallbacks
+
+In a situation where we do not have the pipeline cached, we receive `VK_PIPELINE_COMPILE_REQUIRED`, and fall back to re-creating SPIR-V as usual.
+
+=== Soft guarantees of successfully compiling pipelines
+
+The proposal as-is states that implementations may fail compilation for any reason. This is a defensive measure
+to make it possible for this extension to interoperate with layers, validation, debug tooling, etc., without too many problems.
+In most such layers, there is a need to parse the SPIR-V itself to figure out information required for correct operation.
+While the ICD might recognize an identifier, a layer might not, and therefore they might need the escape hatch where they can spuriously fail compilation.
+
+This effectively makes the spec somewhat vague, and it becomes a quality-of-implementation issue on what ICDs do.
+This is not different from what implementations already do either way. After all, you may or may not have a PSO in disk cache and that is okay.
+
+== Issues
+
+=== RESOLVED: Should applications be allowed to specify their own shader module identifier?
+
+NO.
+
+It is plausible that applications might want to generate their own keys instead of using driver-generated keys.
+For this to be useful, an application will need to generate a key which depends
+on input data/shaders, the revision of the code which performs runtime conversion to SPIR-V, and potentially, the driver kind or any configuration options
+which affect shader conversion. A typical problem which comes up when doing forward hashing like this is that hashes can change for every revision of the application,
+even if the resulting SPIR-V ends up being identical. This will easily contribute to pipeline cache bloat, since the exact same pipelines might end up in cache with
+different hashes. Implementations can be defensive about this and introduce extra identifier indirections, e.g. have an extra hashmap for application identifier
+to driver identifier, but ideally, this extension should not introduce extra implementation complexity to support it well.
+
+Applications could also hash the resulting SPIR-V and ensure non-duplicated identifiers this way,
+but this is not meaningfully different from just using the driver identifier, and also avoids added implementation complexity.
+
+=== RESOLVED: How does this interact with VK_KHR_ray_tracing_pipeline, VK_KHR_pipeline_library and VK_EXT_graphics_pipeline_library?
+
+SUPPORTED.
+
+When using pipeline libraries, there are two scenarios where pipeline creation can fail if we only have an identifier,
+at creation time of the library, and the consumption of that library.
+
+There are at least three possibilities an implementation could consider when building libraries and consuming them:
+
+- Generate final code when creating library, link step is trivial. Ray tracing pipeline libraries may be implemented like this.
+- Generate code when creating library, but allow link-time optimization for later. Graphics pipeline libraries is a common case here.
+- Just retain a reference to the shader module, perform actual compilation during linking. Another strategy for ray tracing libraries.
+
+In the latter two scenarios, it is reasonable to assume that compilation may happen during the final pipeline build
+and compilation would spuriously fail if the source module was only defined by identifier and the final PSO did not exist in cache.
+If we do not allow compilation to fail with `VK_PIPELINE_CREATE_FAIL_ON_COMPILE_REQUIRED_BIT` here, it would not be safe to return
+`VK_SUCCESS` from the library creation step, which would be unfortunate.
+
+For scenarios where the implementation may generate code later, we require that any pipeline libraries
+which were created with identifiers inherit the requirement of using `VK_PIPELINE_CREATE_FAIL_ON_COMPILE_REQUIRED_BIT`.
+This allows applications to speculatively create link-time optimized pipelines from identifiers only as well as
+ray-tracing pipelines from libraries.
+
+=== RESOLVED: Should there be stronger guarantees on when pipeline compilation with identifier must succeed?
+
+NO.
+
+The existing proposal gives a lot of lee-way for implementations to spuriously fail compilation when module is `VK_NULL_HANDLE`.
+It might be possible to give stronger guarantees with tighter spec language?
+
+CTS testing will report quality warnings if identifiers cannot be used with `VkPipelineCache`,
+as there is no good excuse why an implementation should not be able to satisfy those pipelines.
+
+== Further Functionality
+
+N/A
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_object.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_object.adoc
new file mode 100644
index 0000000..cfd95e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_object.adoc
@@ -0,0 +1,702 @@
+// Copyright 2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_shader_object
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document describes the proposed design for a new extension which aims to comprehensively address problems the pipeline abstraction has created for both applications and implementations.
+
+== Problem Statement
+
+When Vulkan 1.0 and its precursor Mantle were originally developed the then-existing shader and state binding models of earlier APIs were beginning to show worrying limitations, both in terms of draw call scaling and driver complexity needed to support them. Application developers were being artificially constrained from accessing the full capabilities of GPUs, and many IHVs were forced to maintain rat's nests of driver code full of heavy-handed draw time state validation and hacky shader patching, all in the service of simplicity at the API level. IHVs were understandably highly motivated to move away from such API designs.
+
+Enter the new low-level APIs like Mantle and ultimately Vulkan. These APIs set out to reduce driver overhead by exposing lower-level abstractions that would hopefully avoid the need for the draw time state validation and shader patching that was so problematic for IHVs, and so detrimental to performance for applications.
+
+One of the most significant changes to this end was the new concept of pipelines, which promised to shift the burden of the shader state combinatorics out of drivers and into applications, ideally avoiding the need for driver-side draw time state validation and shader patching entirely. The thinking went that application developers would design or redesign their renderers with pipelines in mind, and in so doing they would naturally learn to accomplish their goals with fewer combinations of state.
+
+Implicit in such a design was an assumption that applications would be able to know and provide nearly all of this state upfront. A very limited set of dynamic states was specified for the few pieces of state that had effectively unbounded ranges of values, but otherwise even state that could have been fully dynamic on all implementations was required to be baked into the static pipeline objects. This, the thinking went, would benefit even those implementations where the state was internally dynamic by enabling new possibilities for optimization during shader compilation.
+
+Also implicit in the design of pipelines was an assumption that the driver overhead of the pipeline abstraction would either be negligible, or that it would at least always be outweighed by the performance savings at draw time when compared to earlier APIs. The possibility that either setting dozens of individual pieces of state each time a pipeline is bound or tracking which of those dozens of pieces of state had changed since the previous pipeline bind might cause some implementations to exhibit problematically high overhead at pipeline bind time does not seem to have been a central consideration.
+
+Many of these assumptions have since proven to be unrealistic.
+
+On the application side, many developers considering or implementing Vulkan and similar APIs found them unable to efficiently support important use cases which were easily supportable in earlier APIs. This has not been simply a matter of developers being stuck in an old way of thinking or unwilling to "rein in" an unnecessarily large number of state combinations, but a reflection of the reality that the natural design patterns of the most demanding class of applications which use graphics APIs -- video games -- are inherently and deeply dependent on the very "dynamism" that pipelines set out to constrain.
+
+As a result, renderers with a choice of API have largely chosen to avoid Vulkan and its "pipelined" contemporaries, while those without a choice have largely just devised workarounds to make these new APIs behave like the old ones -- usually in the form of the now nearly ubiquitous hash-n-cache pattern. These applications set various pieces of "pipeline" state independently, then hash it all at draw time and use the hash as a key into an application-managed pipeline cache, reusing an existing pipeline if it exists or creating and caching a new one if it does not. In effect, the messy and inefficient parts of GL drivers that pipelines sought to eliminate have simply moved into applications, except without the benefits of implementation specific knowledge which might have reduced their complexity or improved their performance.
+
+This is not just a problem of "legacy" application code where it might be viable for the API to wait it out until application codebases are rewritten or replaced. Applications need the features they need, and are unlikely to remove features they need just to satisfy what they know to be artificial limitations imposed by a graphics API's made-up abstraction. This is especially true for developers working on platforms where the pipeline API does not offer substantial performance benefits over other APIs that do not share the same limitations.
+
+On the driver side, pipelines have provided some of their desired benefits for some implementations, but for others they have largely just shifted draw time overhead to pipeline bind time (while in some cases still not entirely eliminating the draw time overhead in the first place). Implementations where nearly all "pipeline" state is internally dynamic are forced to either redundantly re-bind all of this state each time a pipeline is bound, or to track what state has changed from pipeline to pipeline -- either of which creates considerable overhead on CPU-constrained platforms.
+
+For certain implementations, the pipeline abstraction has also locked away a significant amount of the flexibility supported by their hardware, thereby paradoxically leaving many of their capabilities inaccessible in the newer and ostensibly "low level" API, though still accessible through older, high level ones. In effect, this is a return to the old problem of the graphics API artificially constraining applications from accessing the full capabilities of the GPU, only on a different axis.
+
+Finally, on fixed hardware platforms like game consoles and embedded systems pipelines have created some additional and unique challenges. These platforms tend to have limited CPU performance, memory, and storage capacity all at the same time. Because of this it is generally not desirable for applications on these platforms to waste storage space shipping both uncompiled SPIR-V and precompiled pipeline caches, however it is also not desirable to compile the same shaders from scratch on each system (even if they could be cached for subsequent runs). Also, the hardware and even driver versions on these systems are typically known in advance, and drivers might only ever change in tandem with applications. Vulkan applications on these systems are forced to waste precious storage space on not only shipping both SPIR-V and pipeline cached versions of their shaders, but on their pipeline caches containing potentially large numbers of slightly differently optimized permutations of the same shader code, with only minor differences in pipeline state (arguably this last point is a compression problem, but opaque pipeline caches mostly leave applications at the mercy of the driver to solve it for them).
+
+Fortunately, some of these problems have been acknowledged and various efforts have already begun to address several of them.
+
+These existing efforts have mainly chosen to tackle problems through the lens of existing hash-n-cache type application architectures, and have focused on those problems which are most acute at pipeline compile time. Their goals have included things like reducing pipeline counts, improving the usability and efficiency of pipeline caches, and introducing more granularity to the pipeline compilation and caching process. The extensions they have produced have preferred a targeted, piecemeal, and minimally invasive "band-aid" approach over a more holistic "rip off the band-aid" redesign.
+
+Such efforts have undoubtedly produced valuable improvements, but they have left the class of problems which manifest at bind time largely unaddressed. It might be possible to continue the existing piecemeal approach with a refocus onto bind time, but the solution space afforded by this kind of approach would necessarily remain constrained by the design decisions of the past.
+
+== Solution Space
+
+Several approaches are immediately apparent:
+
+ . Extend the existing graphics pipeline library concept somehow, perhaps by adding optional new, more granular library types and/or making pipeline binaries directly bindable without needing to be explicitly linked into a pipeline object
+ . Continue to expose more (maybe optional) dynamic state to minimize the number of pipeline objects needed
+ . Abandon pipelines entirely and introduce new functionality to compile and bind shaders directly
+
+Option 1 is a natural extension of recent efforts and requires relatively few API changes, but it adds even more complexity to the already very complex pipeline concept, while also failing to adequately address significant parts of the problem. While directly bindable pipeline libraries do reduce the dimensionality of pipeline combinatorics, they do not provide any meaningful absolute CPU performance improvement at pipeline bind time. The total overhead of binding N different pipeline libraries is still roughly on par with the overhead of binding a single (monolithic or linked) pipeline.
+
+Option 2 also requires relatively few API changes and would do more to address bind time CPU performance than option 1, but this option is limited in both the class of issues it can address and its portability across implementations. Much of the universally supportable "low hanging fruit" dynamic state has already been exposed by the existing extended dynamic state extensions, and the remaining state is mostly not universally dynamic. Exposing states A and B as dynamic on one implementation and states B and C on another is still valuable, but it limits this approach's benefits for simplifying application architectures. Even though this option is not a complete solution, it can and should be pursued in parallel with other efforts -- both for its own sake and as a potential foundation for more a comprehensive solution. 
+
+Option 3 is more radical, but brings the API design more in line with developer expectations. The pipeline abstraction has been a consistent problem for many developers trying to use Vulkan since its inception, and this option can produce a cleaner, more user-friendly abstraction that bypasses the complexity of pipelines. With the benefit of years of hindsight and broader Working Group knowledge about the constraints of each others' implementations, it can aim to achieve a design which better balances API simplicity with adherence to the explicit design ethos of Vulkan.
+
+This proposal focuses on option 3, for the reasons outlined above.
+
+== Proposal
+
+=== Shaders
+
+This extension introduces a new object type `VkShaderEXT` which represents a single compiled shader stage. `VkShaderEXT` objects may be created either independently or linked with other `VkShaderEXT` objects created at the same time. To create `VkShaderEXT` objects, applications call `vkCreateShadersEXT()`:
+
+[source,c]
+----
+VkResult vkCreateShadersEXT(
+    VkDevice                                    device,
+    uint32_t                                    createInfoCount,
+    VkShaderCreateInfoEXT*                      pCreateInfos,
+    VkAllocationCallbacks*                      pAllocator,
+    VkShaderEXT*                                pShaders);
+----
+
+This function compiles the source code for one or more shader stages into `VkShaderEXT` objects. Whenever `createInfoCount` is greater than one, the shaders being created may optionally be linked together. Linking allows the implementation to perform cross-stage optimizations based on a promise by the application that the linked shaders will always be used together.
+
+Though a set of linked shaders may perform anywhere between the same to substantially better than equivalent unlinked shaders, this tradeoff is left to the application and linking is never mandatory.
+
+[source,c]
+----
+typedef enum VkShaderCreateFlagBitsEXT {
+    VK_SHADER_CREATE_LINK_STAGE_BIT_EXT = 0x00000001,
+    VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000002,
+    VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000004,
+    VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT = 0x00000008,
+    VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT = 0x00000010,
+    VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT = 0x00000020,
+    VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00000040
+} VkShaderCreateFlagBitsEXT;
+typedef VkFlags VkShaderCreateFlagsEXT;
+
+typedef enum VkShaderCodeTypeEXT {
+    VK_SHADER_CODE_TYPE_BINARY_EXT = 0,
+    VK_SHADER_CODE_TYPE_SPIRV_EXT = 1
+} VkShaderCodeTypeEXT;
+
+typedef struct VkShaderCreateInfoEXT {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkShaderCreateFlagsEXT                      flags;
+    VkShaderStageFlagBits                       stage;
+    VkShaderStageFlags                          nextStage;
+    VkShaderCodeTypeEXT                         codeType;
+    size_t                                      codeSize;
+    const void*                                 pCode;
+    const char*                                 pName;
+    uint32_t                                    setLayoutCount;
+    const VkDescriptorSetLayout*                pSetLayouts;
+    uint32_t                                    pushConstantRangeCount;
+    const VkPushConstantRange*                  pPushConstantRanges;
+    const VkSpecializationInfo*                 pSpecializationInfo;
+} VkShaderCreateInfoEXT;
+----
+
+To specify that shaders should be linked, include the `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` flag in each of the `VkShaderCreateInfoEXT` structures passed to `vkCreateShadersEXT()`. The presence or absence of `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` must match across all `VkShaderCreateInfoEXT` structures passed to a single `vkCreateShadersEXT()` call: i.e., if any member of `pCreateInfos` includes `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` then all other members must include it too. `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` is ignored if `createInfoCount` is one, and a shader created this way is considered unlinked.
+
+The stage of the shader being compiled is specified by `stage`. Applications must also specify which stage types will be allowed to immediately follow the shader being created. For example, a vertex shader might specify a `nextStage` value of `VK_SHADER_STAGE_FRAGMENT_BIT` to indicate that the vertex shader being created will always be followed by a fragment shader (and never a geometry or tessellation shader). Applications that do not know this information at shader creation time or need the same shader to be compatible with multiple subsequent stages can specify a mask that includes as many valid next stages as they wish. For example, a vertex shader can specify a `nextStage` mask of `VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_FRAGMENT_BIT` to indicate that the next stage could be either a geometry shader or fragment shader (but not a tessellation shader).
+
+[NOTE]
+====
+Certain implementations may incur a compile time and/or memory usage penalty whenever more than one stage bit is set in `nextStage`, so applications should strive to set the minimum number of bits they are able to. However, applications should *not* interpret this advice to mean that they should create multiple `VkShaderEXT` objects that differ only by the value of `nextStage`, as this will incur unnecessarily overhead on implementations where `nextStage` is ignored.
+====
+
+The shader code is pointed to by `pCode` and may be provided as SPIR-V, or in an opaque implementation defined binary form specific to the physical device. The format of the shader code is specified by `codeType`.
+
+The `codeType` of all `VkShaderCreateInfoEXT` structures passed to a `vkCreateShadersEXT()` call must match. This also means that only shaders created with the same `codeType` may be linked together.
+
+Descriptor set layouts and push constant ranges used by each shader are specified directly (not via a `VkPipelineLayout`), though multiple stages can of course point to the same structures.
+
+Any time after a `VkShaderEXT` object has been created, its binary shader code can be queried using `vkGetShaderBinaryDataEXT()`:
+
+[source,c]
+----
+VkResult vkGetShaderBinaryDataEXT(
+    VkDevice                                    device,
+    VkShaderEXT                                 shader,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+----
+
+When `pData` is `NULL`, `size` is filled with the number of bytes needed to store the shader’s binary code and `VK_SUCCESS` is returned.
+
+When `pData` is non-`NULL`, `size` points to the application-provided size of `pData`. If the provided size is large enough then the location pointed to by `pData` is filled with the shader’s binary code and `VK_SUCCESS` is returned, otherwise nothing is written to `pData` and `VK_INCOMPLETE` is returned.
+
+The binary shader code returned in `pData` can be saved by the application and used in a future `vkCreateShadersEXT()` call (including on a different `VkInstance` and/or `VkDevice`) with a compatible physical device by setting `codeType` to `VK_SHADER_CODE_TYPE_BINARY_EXT`. This means that on fixed platforms like game consoles and embedded systems applications need not ship SPIR-V shader code at all. If the binary shader code in any `VkShaderCreateInfoEXT` passed to `vkCreateShadersEXT()` is not compatible with the physical device then the `vkCreateShadersEXT()` call returns `VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT`.
+
+Applications must pass the same values of `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` to a `vkCreateShadersEXT()` call with a `codeType` of `VK_SHADER_CODE_TYPE_BINARY_EXT` as were passed when those shaders were originally compiled from SPIR-V.
+
+`VkShaderEXT` objects can be bound on a command buffer using `vkCmdBindShadersEXT()`:
+
+[source,c]
+----
+void vkCmdBindShadersEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    stageCount,
+    const VkShaderStageFlagBits*                pStages,
+    const VkShaderEXT*                          pShaders);
+----
+
+It is possible to unbind shaders for a particular stage by calling `vkCmdBindShadersEXT()` with elements of `pShaders` set to `VK_NULL_HANDLE`. For example, an application may want to arbitrarily bind and unbind a known compatible passthrough geometry shader without knowing or caring what specific vertex and fragment shaders are bound at that time.
+
+Regardless of whether the shaders were created with `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` the interfaces of all stages bound at `vkCmdDraw*()` time must be compatible. This means that the union of descriptor set layouts and push constant ranges across all bound shaders must not conflict, and that the inputs of each stage are compatible with the outputs of the previous stage. It is the application's responsibility to ensure that this is the case, and the implementation will not do any draw time state validation to guard against this kind of invalid usage.
+
+If any of the shaders bound at `vkCmdDraw*()` time were created with `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` then all shaders that were linked to that shader must also be bound. It is the application's responsibility to ensure that this is the case, and the implementation will not do any draw time state validation to guard against this kind of invalid usage.
+
+When drawing with shaders bound with `vkCmdBindShadersEXT()` most state must be set dynamically. Specifically, the following existing commands must be used to set the corresponding state:
+
+ * `vkCmdSetViewportWithCount()`
+ * `vkCmdSetScissorWithCount()`
+ * `vkCmdSetLineWidth()`
+ * `vkCmdSetDepthBias()`
+ * `vkCmdSetBlendConstants()`
+ * `vkCmdSetDepthBounds()`
+ * `vkCmdSetStencilCompareMask()`
+ * `vkCmdSetStencilWriteMask()`
+ * `vkCmdSetStencilReference()`
+ * `vkCmdBindVertexBuffers2()`
+ * `vkCmdSetCullMode()`
+ * `vkCmdSetDepthBoundsTestEnable()`
+ * `vkCmdSetDepthCompareOp()`
+ * `vkCmdSetDepthTestEnable()`
+ * `vkCmdSetDepthWriteEnable()`
+ * `vkCmdSetFrontFace()`
+ * `vkCmdSetPrimitiveTopology()`
+ * `vkCmdSetStencilOp()`
+ * `vkCmdSetStencilTestEnable()`
+ * `vkCmdSetDepthBiasEnable()`
+ * `vkCmdSetPrimitiveRestartEnable()`
+ * `vkCmdSetRasterizerDiscardEnable()`
+ * `vkCmdSetVertexInputEXT()`
+ * `vkCmdSetLogicOpEXT()`
+ * `vkCmdSetPatchControlPointsEXT()`
+ * `vkCmdSetTessellationDomainOriginEXT()`
+ * `vkCmdSetDepthClampEnableEXT()`
+ * `vkCmdSetPolygonModeEXT()`
+ * `vkCmdSetRasterizationSamplesEXT()`
+ * `vkCmdSetSampleMaskEXT()`
+ * `vkCmdSetAlphaToCoverageEnableEXT()`
+ * `vkCmdSetAlphaToOneEnableEXT()`
+ * `vkCmdSetLogicOpEnableEXT()`
+ * `vkCmdSetColorBlendEnableEXT()`
+ * `vkCmdSetColorBlendEquationEXT()`
+ * `vkCmdSetColorWriteMaskEXT()`
+
+If link:{refpage}VK_KHR_fragment_shading_rate.html[VK_KHR_fragment_shading_rate] is supported and enabled:
+
+ * `vkCmdSetFragmentShadingRateKHR()`
+
+If link:{refpage}VK_EXT_transform_feedback.html[VK_EXT_transform_feedback] is supported and enabled:
+
+ * `vkCmdSetRasterizationStreamEXT()`
+
+If link:{refpage}VK_EXT_discard_rectangle.html[VK_EXT_discard_rectangle] is supported and enabled:
+
+ * `vkCmdSetDiscardRectangleEnableEXT()`
+ * `vkCmdSetDiscardRectangleModeEXT()`
+ * `vkCmdSetDiscardRectangleEXT()`
+
+If link:{refpage}VK_EXT_conservative_rasterization.html[VK_EXT_conservative_rasterization] is supported and enabled:
+
+ * `vkCmdSetConservativeRasterizationModeEXT()`
+ * `vkCmdSetExtraPrimitiveOverestimationSizeEXT()`
+
+If link:{refpage}VK_EXT_depth_clip_enable.html[VK_EXT_depth_clip_enable] is supported and enabled:
+
+ * `vkCmdSetDepthClipEnableEXT()`
+
+If link:{refpage}VK_EXT_sample_locations.html[VK_EXT_sample_locations] is supported and enabled:
+
+ * `vkCmdSetSampleLocationsEnableEXT()`
+ * `vkCmdSetSampleLocationsEXT()`
+
+If link:{refpage}VK_EXT_blend_operation_advanced.html[VK_EXT_blend_operation_advanced] is supported and enabled:
+
+ * `vkCmdSetColorBlendAdvancedEXT()`
+
+If link:{refpage}VK_EXT_provoking_vertex.html[VK_EXT_provoking_vertex] is supported and enabled:
+
+ * `vkCmdSetProvokingVertexModeEXT()`
+
+If link:{refpage}VK_EXT_line_rasterization.html[VK_EXT_line_rasterization] is supported and enabled:
+
+ * `vkCmdSetLineRasterizationModeEXT()`
+ * `vkCmdSetLineStippleEnableEXT()`
+ * `vkCmdSetLineStippleEXT()`
+
+If link:{refpage}VK_EXT_depth_clip_control.html[VK_EXT_depth_clip_control] is supported and enabled:
+
+ * `vkCmdSetDepthClipNegativeOneToOneEXT()`
+
+If link:{refpage}VK_EXT_color_write_enable.html[VK_EXT_color_write_enable] is supported and enabled:
+
+ * `vkCmdSetColorWriteEnableEXT()`
+
+If link:{refpage}VK_NV_clip_space_w_scaling.html[VK_NV_clip_space_w_scaling] is supported and enabled:
+
+ * `vkCmdSetViewportWScalingEnableNV()`
+ * `vkCmdSetViewportWScalingNV()`
+
+If link:{refpage}VK_NV_viewport_swizzle.html[VK_NV_viewport_swizzle] is supported and enabled:
+
+ * `vkCmdSetViewportSwizzleNV()`
+
+If link:{refpage}VK_NV_fragment_coverage_to_color.html[VK_NV_fragment_coverage_to_color] is supported and enabled:
+
+ * `vkCmdSetCoverageToColorEnableNV()`
+ * `vkCmdSetCoverageToColorLocationNV()`
+
+If link:{refpage}VK_NV_framebuffer_mixed_samples.html[VK_NV_framebuffer_mixed_samples] is supported and enabled:
+
+ * `vkCmdSetCoverageModulationModeNV()`
+ * `vkCmdSetCoverageModulationTableEnableNV()`
+ * `vkCmdSetCoverageModulationTableNV()`
+
+If link:{refpage}VK_NV_coverage_reduction_mode.html[VK_NV_coverage_reduction_mode] is supported and enabled:
+
+ * `vkCmdSetCoverageReductionModeNV()`
+
+If link:{refpage}VK_NV_representative_fragment_test.html[VK_NV_representative_fragment_test] is supported and enabled:
+
+ * `vkCmdSetRepresentativeFragmentTestEnableNV()`
+
+If link:{refpage}VK_NV_shading_rate_image.html[VK_NV_shading_rate_image] is supported and enabled:
+
+ * `vkCmdSetCoarseSampleOrderNV()`
+ * `vkCmdSetShadingRateImageEnableNV()`
+ * `vkCmdSetViewportShadingRatePaletteNV()`
+
+If link:{refpage}VK_NV_scissor_exclusive.html[VK_NV_scissor_exclusive] is supported and enabled:
+
+ * `vkCmdSetExclusiveScissorEnableNV()`
+ * `vkCmdSetExclusiveScissorNV()`
+
+If link:{refpage}VK_NV_fragment_shading_rate_enums.html[VK_NV_fragment_shading_rate_enums] is supported and enabled:
+
+ * `vkCmdSetFragmentShadingRateEnumNV()`
+
+Certain dynamic state setting commands have modified behavior from their original versions:
+
+ * `vkCmdSetPrimitiveTopology()` does not have any constraints on the topology class (i.e., it behaves as if the `dynamicPrimitiveTopologyUnrestricted` property is `VK_TRUE` even when the actual property is `VK_FALSE`).
+ * `vkCmdSetLogicOpEXT()` may be used on any implementation regardless of its support for the `extendedDynamicState2LogicOp` feature.
+ * `vkCmdSetPatchControlPointsEXT()` may be used on any implementation regardless of its support for the `extendedDynamicState2PatchControlPoints` feature.
+
+Any `VkShaderEXT` can be destroyed using `vkDestroyShaderEXT()`:
+
+[source,c]
+----
+void vkDestroyShaderEXT(
+    VkDevice                                    device,
+    VkShaderEXT                                 shader,
+    VkAllocationCallbacks*                      pAllocator);
+----
+
+Destroying a `VkShaderEXT` object used by action commands in one or more command buffers in the _recording_ or _executable_ states causes those command buffers to enter the _invalid_ state. A `VkShaderEXT` object must not be destroyed as long as any command buffer that issues any action command that uses it is in the _pending_ state.
+
+== Examples
+
+=== Graphics
+
+Consider an application which always treats sets of shader stages as complete programs.
+
+At startup time, the application compiles and links the shaders for each complete program:
+
+[source,c]
+----
+VkShaderCreateInfoEXT shaderInfo[2] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexShaderSpirvSize,
+        .pCode = pVertexShaderSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentShaderSpirvSize,
+        .pCode = pFragmentShaderSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    }
+};
+
+VkShaderEXT shaders[2];
+
+vkCreateShadersEXT(device, 2, shaderInfo, NULL, shaders);
+----
+
+Later at draw time, the application binds the linked vertex and fragment shaders forming a complete program:
+
+[source,c]
+----
+VkShaderStageFlagBits stages[2] = {
+    VK_SHADER_STAGE_VERTEX_BIT,
+    VK_SHADER_STAGE_FRAGMENT_BIT
+};
+vkCmdBindShadersEXT(commandBuffer, 2, stages, shaders);
+----
+
+Alternatively, the same result could be achieved by:
+
+[source,c]
+----
+{
+    VkShaderStageFlagBits stage = VK_SHADER_STAGE_VERTEX_BIT;
+    vkCmdBindShadersEXT(commandBuffer, 1, &stage, &shaders[0]);
+}
+
+{
+    VkShaderStageFlagBits stage = VK_SHADER_STAGE_FRAGMENT_BIT;
+    vkCmdBindShadersEXT(commandBuffer, 1, &stage, &shaders[1]);
+}
+----
+
+If the `tessellationShader` or `geometryShader` features are enabled on the device, the application sets the corresponding shader types to VK_NULL_HANDLE:
+
+[source,c]
+----
+VkShaderStageFlagBits unusedStages[3] = {
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    VK_SHADER_STAGE_GEOMETRY_BIT
+};
+VkShaderEXT unusedShaders[3] = { /* VK_NULL_HANDLE, ... */ };
+vkCmdBindShadersEXT(commandBuffer, 3, unusedStages, unusedShaders);
+----
+
+Alternatively, the same result could be achieved by:
+
+[source,c]
+----
+VkShaderStageFlagBits unusedStages[3] = {
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    VK_SHADER_STAGE_GEOMETRY_BIT
+};
+// Setting pShaders to NULL is equivalent to specifying an array of stageCount VK_NULL_HANDLE values
+vkCmdBindShadersEXT(commandBuffer, 3, unusedStages, NULL);
+----
+
+Finally, the application issues a draw call:
+
+[source,c]
+----
+vkCmdDrawIndexed(commandBuffer, ...);
+----
+
+Now consider a different application which needs to mix and match vertex and fragment shaders in arbitrary combinations that are not predictable at shader compile time.
+
+At startup time, the application compiles unlinked vertex and fragment shaders:
+
+[source,c]
+----
+VkShaderCreateInfoEXT shaderInfo[3] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexShaderSpirvSize,
+        .pCode = pVertexShaderSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentShaderSpirvSize[0],
+        .pCode = pFragmentShaderSpirv[0],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentShaderSpirvSize[1],
+        .pCode = pFragmentShaderSpirv[1],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    }
+};
+
+VkShaderEXT shaders[3];
+
+vkCreateShadersEXT(device, 3, shaderInfo, NULL, shaders);
+----
+
+Alternatively, the same result could be achieved by:
+
+[source,c]
+----
+VkShaderEXT shaders[3];
+
+{
+    VkShaderCreateInfoEXT shaderInfo = {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_VERTEX_BIT,
+        .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = vertexShaderSpirvSize,
+        .pCode = pVertexShaderSpirv,
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    };
+
+    vkCreateShadersEXT(device, 1, &shaderInfo, NULL, &shaders[0]);
+}
+
+{
+    VkShaderCreateInfoEXT shaderInfo = {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentShaderSpirvSize[0],
+        .pCode = pFragmentShaderSpirv[0],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    };
+
+    vkCreateShadersEXT(device, 1, &shaderInfo, NULL, &shaders[1]);
+}
+
+{
+    VkShaderCreateInfoEXT shaderInfo = {
+        .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+        .pNext = NULL,
+        .flags = 0,
+        .stage = VK_SHADER_STAGE_FRAGMENT_BIT,
+        .nextStage = 0,
+        .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+        .codeSize = fragmentShaderSpirvSize[1],
+        .pCode = pFragmentShaderSpirv[1],
+        .pName = "main",
+        .setLayoutCount = 1,
+        .pSetLayouts = &descriptorSetLayout,
+        .pushConstantRangeCount = 0,
+        .pPushConstantRanges = NULL,
+        .pSpecializationInfo = NULL
+    };
+
+    vkCreateShadersEXT(device, 1, &shaderInfo, NULL, &shaders[2]);
+}
+----
+
+Later at draw time, the application binds independent vertex and fragment shaders forming a complete program:
+
+[source,c]
+----
+VkShaderStageFlagBits stages[2] = {
+    VK_SHADER_STAGE_VERTEX_BIT,
+    VK_SHADER_STAGE_FRAGMENT_BIT
+};
+vkCmdBindShadersEXT(commandBuffer, 2, stages, shaders);
+----
+
+If the `tessellationShader` or `geometryShader` features are enabled on the device, the application sets the corresponding shader types to VK_NULL_HANDLE:
+
+[source,c]
+----
+VkShaderStageFlagBits unusedStages[3] = {
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+    VK_SHADER_STAGE_GEOMETRY_BIT
+};
+// Setting pShaders to NULL is equivalent to specifying an array of stageCount VK_NULL_HANDLE values
+vkCmdBindShadersEXT(commandBuffer, 3, unusedStages, NULL);
+----
+
+Then, the application issues a draw call:
+
+[source,c]
+----
+vkCmdDrawIndexed(commandBuffer, ...);
+----
+
+Later, the application binds a different fragment shader without disturbing any other stages:
+
+[source,c]
+----
+VkShaderStageFlagBits stage = VK_SHADER_STAGE_FRAGMENT_BIT;
+vkCmdBindShadersEXT(commandBuffer, 1, &stage, &shaders[2]);
+----
+
+Finally, the application issues another draw call:
+
+[source,c]
+----
+vkCmdDrawIndexed(commandBuffer, ...);
+----
+
+=== Compute
+
+At startup time, the application compiles a compute shader:
+
+[source,c]
+----
+VkShaderCreateInfoEXT shaderInfo = {
+    .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT,
+    .pNext = NULL,
+    .flags = 0,
+    .stage = VK_SHADER_STAGE_COMPUTE_BIT,
+    .nextStage = 0,
+    .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT,
+    .codeSize = computeShaderSpirvSize,
+    .pCode = pComputeShaderSpirv,
+    .pName = "main",
+    .setLayoutCount = 1,
+    .pSetLayouts = &descriptorSetLayout,
+    .pushConstantRangeCount = 0,
+    .pPushConstantRanges = NULL,
+    .pSpecializationInfo = NULL
+};
+
+VkShaderEXT shader;
+
+vkCreateShadersEXT(device, 1, &shaderInfo, NULL, &shader);
+----
+
+Later, the application binds the compute shader:
+
+[source,c]
+----
+VkShaderStageFlagBits stage = VK_SHADER_STAGE_COMPUTE_BIT;
+vkCmdBindShadersEXT(commandBuffer, 1, &stage, &shader);
+----
+
+Finally, the application dispatches the compute:
+
+[source,c]
+----
+vkCmdDispatch(commandBuffer, ...);
+----
+
+== Issues
+
+=== RESOLVED: How should implementations which absolutely must link shader stages implement this extension?
+
+The purpose of this extension is to expose the flexibility of those implementations which allow arbitrary combinations of unlinked but compatible shader stages and state to be bound independently. Attempting to modify this extension to support implementations which do not have this flexibility would defeat the entire purpose of the extension. For this reason, implementations which do not have the required flexibility should not implement this extension.
+
+IHVs whose implementations have such limitations today are encouraged to consider incorporating changes which could remove these limitations into their future hardware roadmaps.
+
+=== RESOLVED: Should this extension try to reuse pipeline objects and concepts?
+
+No - the pipeline abstraction was never designed with such a radically different design in mind.
+
+Avoiding the introduction of a new object type and a handful of new entry points is not a compelling reason to continue to pile less and less pipeline-like functionality into pipelines. Doing so would needlessly constrict or even undermine the design and future extensibility of both models.
+
+=== RESOLVED: Should binary shader support be exposed in some way similar to existing pipeline caches or pipeline binaries?
+
+No - fixed platforms like game consoles and embedded systems have constraints which make shipping both SPIR-V and binary copies of the same shader code undesirable.
+
+=== RESOLVED: Should there be some kind of shader program object to represent a set of linked shaders?
+
+No - the compiled code for each shader stage is represented by a single `VkShaderEXT` object whether it is linked to other stages or not.
+
+Introducing a shader program object would overly complicate the API and impose a new and unnecessary object lifetime management burden on applications. Vulkan is a low level API, and it should be the application's responsibility to ensure that it keeps any promises it chooses to make about binding the correct stages together.
+
+[NOTE]
+====
+Whenever shaders are created linked together, the rules for binding them give implementations the freedom to (for example) internally store the compiled code for multiple linked stages in a single stage's `VkShaderEXT` object and to leave the other stages' `VkShaderEXT` objects internally unused, though this is *strongly* discouraged.
+====
+
+=== RESOLVED: Should there be some mechanism for applications to provide static state that is known at compile time?
+
+Not as part of this extension - it is possible to imagine some kind of "shader optimization hint" functionality to let applications provide implementations with "static state" similar to the existing static state in pipelines, but on an opt-in rather than opt-out basis. By providing a given piece of state in an optimization hint at shader creation time, an application could promise that the equivalent piece of dynamic state would always be set to some specific value whenever that shader is used, thereby allowing implementations to perform compile time optimizations similar to those they can make with pipelines today.
+
+For already pipeline-friendly applications with lots of static state this could serve as a "gentler" version of pipelines that might provide the best of both worlds, but it is unclear that the benefits of such a scheme for the (pipeline-unfriendly) majority of applications which actually need this extension would outweigh the costs of the added complexity to the API.
+
+If such functionality turns out to be important, it can be noninvasively layered on top of this extension in the form of another extension. Until then, applications wanting something that behaves like pipelines should just use pipelines.
+
+=== RESOLVED: Should this extension expose some abstraction for setting groups of related state?
+
+No - an earlier version of this proposal exposed a mechanism for applications to pre-create "interface shaders" which could then be bound on a command buffer to reduce draw time overhead. This added complexity to the API, and it was unclear that this solution would be able to deliver meaningful performance improvements over setting individual pieces of state on the command buffer.
+
+Such an abstraction may prove beneficial for certain implementations, but it should not be designed until those implementations have at least attempted to implement support for this extension in its existing form.
+
+=== RESOLVED: There is currently no dynamic state setting functionality for sample shading. How should this be handled?
+
+Sample shading is already implicitly enabled (with minSampleShading = 1.0) whenever a shader reads from the SampleId or SamplePosition builtins. The main functionality missing in the absence of dynamic sample shading is the ability to specify minSampleShading values other than 1.0.
+
+This could be addressed by introducing a new MinSampleShading shader builtin which can be either hard-coded or specialized at SPIR-V compile time using the existing specialization constant mechanism. However, since introducing this functionality is orthogonal to the objective of this extension this is left up to a different extension.
+
+Until such an extension is available, applications that need to specify a minSampleShading other than 1.0 should use pipelines.
+
+== Further Functionality
+
+ * Shader optimization hints
+ * State grouping
+ * Ray tracing shader objects
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_tile_image.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_tile_image.adoc
new file mode 100644
index 0000000..d62d990
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_shader_tile_image.adoc
@@ -0,0 +1,499 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_shader_tile_image
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+`VK_EXT_shader_tile_image` is a device extension that explicitly enables access to on-chip pixel data. For GPUs supporting this extension, it is a replacement for many use-cases for subpasses, which are not available when the `VK_KHR_dynamic_rendering` extension is used.
+
+== Problem Statement
+
+Some implementations, in particular tile-based GPUs, want to allow applications to effectively exploit local, e.g. on-chip, memory.
+A classic example would be optimizing G-buffer based deferred shading techniques where the G-buffer is produced and consumed on-chip.
+
+Subpasses were designed to support such use-cases with an API mechanism that was portable across all implementations. In practice, that has led to some problems, including:
+
+ * the high level abstraction is far removed from the mental model an application developer needs to have to be able to optimize for keeping data on-chip
+ * the subpass design affects other parts of the API and is seen as a 'tax' on applications that do not target implementations that benefit from on-chip storage
+ * developers wanting to optimize for a specific class of GPUs often need to make GPU specific optimization choices, so the abstraction does not add much
+
+These problems motivated `VK_KHR_dynamic_rendering`, which offers an alternative API without subpasses. But keeping data on-chip is still an important optimization for a class of GPUs.
+
+This proposal aims to provide the most essential functionality of subpasses, but in an explicit manner.
+The abstractions in this proposal are a closer match to what the underlying GPU implementation does and should make it easier to communicate best practices and performance guarantees to developers.
+
+== Solution Space
+
+=== High-level choices
+
+The solution space can be split in two axes: scope and abstraction level.
+
+The abstraction level is a question of whether we want an API that is only targeted at tile-based GPUs or if we should have a higher-level API that would allow the feature to be supported on a wider range of GPUs.
+The main argument for a higher abstraction level is application portability.
+Arguments against additional abstractions include:
+
+ * It would be hard for developers to reason about performance expectations, for the same reasons that it is hard to do this for subpasses
+ * "Framebuffer fetch" and "programmable blend" semantics are naturally expressed as direct reads from color attachments, and adding abstractions just obfuscate what (some) GPU hardware is doing
+ * GPUs that are not tile-based would not gain much from exposing this - at least not unless the scope is expanded - so the abstractions add little practical value
+
+There are two choices broadly based on what the functionality is for, and which GPUs are able to support it:
+
+1. An explicit API to allow certain tile-based GPUs to expose on-chip memory with fast raster order access.
+ * Provides framebuffer fetch and Pixel Local Storage functionality and forms the basis for Tile Shader like functionality.
+ * This is mainly targeted at GPUs which defer fragment shading into framebuffer tiles where each tile is typically processed just once.
+ * This addresses use cases such as keeping G-buffer data on-chip.
+ * No DRAM bandwidth paid for render targets which are cleared on load, consumed within the render pass, and content discarded at end of render pass.
+ * Raster order access (coherent access) to framebuffer data from fragment shader is efficient or even "free" - depending on the GPU.
+ * No descriptors needed for render target access.
+
+2. A slightly higher level API to enable broad GPU support for framebuffer fetch like functionality within draw calls in dynamic render passes.
+ * Provides framebuffer fetch like functionality.
+ * This is intended to be supported by a wide range of GPUs. The GPUs in general have optimised support for framebuffer fetch within a render pass.
+ * This addresses use cases such a programmable image composition, or programmable resolve.
+ * Attachment data is not guaranteed to be on-chip within a render pass and may spill to DRAM. Implementations may opportunistically cache data in their cache hierarchy.
+ * Raster order access to framebuffer data from fragment shader is not "free". Many implementations may prefer non-coherent access with explicit synchronization from applications.
+ * Descriptors need to be bound for render target access (at least for some implementations).
+
+This proposal targets the first choice.
+
+The options for scope include:
+
+ * "Framebuffer fetch" equivalent, i.e. enable access to the previously written pixel in the local framebuffer region
+ * "Pixel local storage" equivalent, i.e. as above with the addition of pixel format reinterpretation
+ * "Tile shader" equivalent, i.e. enable access to a region larger than 1x1 pixels
+
+This proposal targets the first option, but adds building blocks to enable future enhancements.
+The reasoning behind this choice is that:
+
+ * It should be possible to support this extension on existing GPUs
+ * Many use-cases that benefit from subpasses could be implemented with this functionality
+ * Ease of integration; this option requires the least amount of changes to rendering engines
+ * Time to market; several IHVs would like at least the subpass equivalent functionality to be implemented alongside `VK_KHR_dynamic_rendering`
+
+=== Implementation choices
+
+It is useful to provide tile image access for all attachment types.
+But implementations may manage depth/stencil differently than color, which could add constraints.
+We will therefore expose separate feature bits for color, depth, and stencil access.
+
+Tile image variables currently have to 'alias' a color attachment location, and their format is implicitly specified to match the color attachment format.
+
+== Proposal
+
+=== Concept
+
+image::{images}/tile_image.svg[align="center",title="Tile Image",align="center",opts="{imageopts}"]
+
+Introduce the concept of a 'tile image'. When the extension is enabled, the framebuffer is logically divided into a grid of non-overlapping tiles called tile images.
+
+=== API changes
+
+Add a new feature struct `VkPhysicalDeviceShaderTileImageFeaturesEXT` containing:
+
+ * shaderTileImageColorReadAccess
+ * shaderTileImageDepthReadAccess
+ * shaderTileImageStencilReadAccess
+
+shaderTileImageColorReadAccess is mandatory if this extension is supported.
+
+shaderTileImageColorReadAccess provides the ability to access current (rasterization order) color values from tile memory via tile images.
+There is no support for the storage format to be redefined as part of this feature.
+Output data is still written via Fragment Output variables.
+Since the framebuffer format is not re-declared, fixed-function blending works as normal.
+
+Existing shaders do not to need to be modified to write to color attachments.
+
+Reading color values using the functionality in this extension guarantees that the access is in rasterization order.
+See the spec (Fragment Shader Tile Image Reads) for details on which samples reads qualify for coherent read access.
+
+shaderTileImageDepthReadAccess and shaderTileImageStencilReadAccess provide similar ability to read the depth and stencil values of any sample location covered by the fragment.
+Depth and stencil fetches use implicit tile images.
+If no depth / stencil attachment is present then the values returned by fetches are undefined.
+Early fragment tests are disallowed if depth or stencil fetch is used.
+
+Reading depth/stencil values have similar rasterization order and synchronization guarantees as color.
+
+=== SPIR-V changes
+
+This proposal leverages `OpTypeImage` and makes 'TileImageDataEXT' another `Dim` similar to `SubpassData`.
+
+Specifically:
+
+ * `Dim` is extended with `TileImageDataEXT`.
+ * `OpTypeImage` gets the additional constraint that if `Dim` is `TileImageDataEXT`:
+ ** `Sampled` must: be `2`
+ ** `Image Format` must be `Unknown` as the format is implicitly specified by the color attachment
+ *** (We could relax this in a further extension if we wanted to support format reinterpretation in the shader.)
+ ** `Execution Model` must be `Fragment`
+ ** `Arrayed` must be `0`
+ ** Extend the use of `Location` such that it specifies the color attachment index
+ * Add `OpColorAttachmentReadEXT`, which is similar to `OpImageRead` but helps disambiguate between color/depth/stencil.
+ * Add `OpDepthAttachmentReadEXT` and `OpStencilAttachmentReadEXT` to read depth/stencil
+ ** These take an optional `Sample` parameter for MSAA use-cases
+ * Add a `TileImageEXT` Storage Class that is only supported for variables of `OpTypeImage` with `Dim` equal to `TileImageDataEXT`
+
+=== GLSL changes
+
+Main changes:
+
+ * New type: `attachmentEXT`
+ * The `location` layout qualifier is used to specify the corresponding color attachment
+ * New storage qualifier (supported only in fragment shaders): `tileImageEXT`
+ * New functions: `colorAttachmentReadEXT`, `depthAttachmentReadEXT`, `stencilAttachmentReadEXT`
+
+Mapping to SPIR-V:
+
+ * `attachmentEXT` maps to `OpTypeImage` with `Dim` equal to `TileImageDataEXT`
+ * `colorAttachmentReadEXT` maps to `OpColorAttachmentReadEXT`
+ * `depthAttachmentReadEXT` maps to `OpDepthAttachmentReadEXT`
+ * `stencilAttachmentReadEXT` maps to `OpStencilAttachmentReadEXT`
+
+Function signatures:
+[source,c]
+----
+// color
+gvec4 colorAttachmentReadEXT(gattachment attachmentEXT);
+gvec4 colorAttachmentReadEXT(gattachment attachmentEXT, int sample);
+
+// depth
+highp float depthAttachmentReadEXT();
+highp float depthAttachmentReadEXT(int sample);
+
+// stencil
+lowp uint stencilAttachmentReadEXT();
+lowp uint stencilAttachmentReadEXT(int sample);
+----
+
+=== HLSL Changes
+
+== Examples
+
+=== Color reads
+
+[source,c]
+----
+// ------ Subpass Example --------
+layout( set = 0, binding = 0, input_attachment_index = 0 ) uniform highp subpassInput color0;
+layout( set = 0, binding = 1, input_attachment_index = 1 ) uniform highp subpassInput color1;
+
+layout( location = 0 ) out vec4 fragColor;
+
+void main()
+{
+    vec4 value = subpassLoad(color0) + subpassLoad(color1);
+    fragColor = value;
+}
+
+// ----- Equivalent Tile Image approach ------
+
+// NOTES:
+// 'tileImageEXT' is a storage qualifier.
+// 'attachmentEXT' is an opaque type; similar to subpassInput
+// 'aliased' means that the variable shares _tile image_ with the corresponding attachment; there is no in-memory aliasing
+
+layout( location = 0 /* aliased to color attachment 0 */ ) tileImageEXT highp attachmentEXT color0;
+layout( location = 1 /* aliased to color attachment 1 */ ) tileImageEXT highp attachmentEXT color1;
+
+layout( location = 0 ) out vec4 fragColor;
+
+void main()
+{
+    vec4 value = colorAttachmentReadEXT(color0) + colorAttachmentReadEXT(color1);
+    fragColor = value;
+}
+----
+
+==== Depth reads
+
+[source,c]
+----
+void main()
+{
+    // read sample 0: works for non-MSAA or MSAA targets
+    highp float last_depth = depthAttachmentReadEXT();
+}
+----
+
+== Alternate Proposals
+
+The following proposals explore alternate ways to expose the functionality for reading from the tile memory for color data - reading depth and stencil and the API changes are kept unchanged from the main proposal.
+
+=== Proposal B: OpTypeTileImage
+
+==== SPIR-V Changes
+
+Add new type: `TileImage`. We have two options for defining `TileImage`:
+
+. `TileImage` variables which are instanced per-pixel (or per-sample in case of multisampled framebuffers)
+. `TileImage` defines a 2D array of pixels similar to an image but in tile memory.
+.. Note: Defining this as a 2D array fits well for future `Tile Shaders` functionality where tile shader invocations on a tile can access any location within a TileImage on the tile.
+
+Add new instruction: `OpTypeTileImage`. The instruction declares a `tile image`. `Tile image` is an opaque type. `OpTypeTileImage` has the following operands:
+
+* `Image Format`: the imageformat. This must be set to `Unknown` as the format is implicitly specified by the color attachment.
+** (We could relax this in a further extension if we wanted to support format reinterpretation in the shader.)
+* `MS` : indicates whether the content is multisampled. 0 - single-sampled. 1 - multisampled.
+
+`Tile image` variables must be decorated with `Location` which specifies the color attachment index.
+`Execution Model` must be `Fragment`.
+
+Add `OpTileImageRead`, `OpDepthTileImageRead`, `OpStencilTileImageRead` to read from color, depth, stencil tile images.
+Add `Tile` storage class.
+
+==== GLSL Changes
+
+GLSL changes remain the same as in the main proposal except the mapping changes to `OpTypeTileImage` instead of `OpTypeImage`:
+
+ * `tileImage` maps to `OpTypeTileImage`
+
+=== Proposal C: Storage Class / PLS style
+
+==== SPIR-V Changes
+
+Introduce `TileImage` as a new storage class.
+
+* Variables declared with `TileImage` must have `Location` decoration specified - this specifies the attachment index to alias to.
+* If image format reinterpretation is to be supported then a new `Imageformat` decoration is specified.
+* `TileImage` storage class variables are multisampled with the sample count of the framebuffer if multisampling is enabled.
+* Reading of TileImage variables is done via `OpTileImageRead`.
+** `OpTileImageRead` which accepts a `sample` parameter for MSAA use cases.
+
+* If aggregate types are to be supported in `TileImage` storage class, we would need the following:
+** `Location` and `Imageformat` must only be applied to non-structure type (that is, scalars or vectors or arrays of scalars or arrays of vectors).
+
+==== GLSL Changes
+
+* New storage class `tileImage`.
+* Add support for grouping `tileImage` variable declarations into an interface block.
+* layout `location` must be specified for the variables.
+* Add new builtin function `tileImageRead`, which accepts an optional parameter `sample`
+* If reinterpretation of formats is supported (within the same draw call), then we need `tileImageIn` and `tileImageOut` (or make `tileImage` an auxiliary storage specifier, similar to `patch` so we could use `tileImage in` and `tileImage out`).
+
+== Non-coherent access
+
+Some implementations have a penalty for support raster order access to tile image data. To support this functionality on such implementations we would add the following changes to the base proposal:
+
+=== API Changes
+
+* A property bit `shaderTileImagePreferCoherentReadAccess` indicating whether the implementation prefers coherent read accesses are used.
+
+* Support for specifying the barriers - three broad options (see next section)
+
+* Note: The gains from tile image feature with raster order access enabled are expected to match the gains from subpasses.
+
+=== Barrier Proposal A: MemoryBarrier via vkCmdPipelineBarrier2
+
+`vkCmdPipelineBarrier2` would be allowed within dynamic render passes to specify a `VkMemoryBarrier2` with some restrictions. The enums `VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT` and `VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT` are reused for tileimage read accesses.
+
+This approach would allow synchronizing all color attachments, or depth stencil attachment, but does not support synchronizing individual color attachments.
+
+Example synchronizing two draw calls, where the first writes to color attachments and the second reads via the tileimage variables.
+
+[source,c]
+----
+vkCmdDraw(...);
+
+VkMemoryBarrier2 memoryBarrier = {
+        ...
+        .srcStageMask = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT,
+        .srcAccessMask = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT,
+        .dstStageMask = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
+        .dstAccessMask = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT
+};
+
+VkDependencyInfo dependencyInfo {
+        ...
+        VK_DEPENDENCY_BY_REGION, //dependency flags
+        1, //memory barrier count
+        &memoryBarrier, //memory barrier
+        ...
+};
+
+vkCmdPipelineBarrier2(commandBuffer, &dependencyInfo);
+
+vkCmdDraw(...);
+----
+
+=== Barrier Proposal B: ImageMemoryBarrier via vkCmdPipelineBarrier2
+
+`vkCmdPipelineBarrier2` would be allowed within dynamic render passes to specify a `VkMemoryBarrier2` with some restrictions. The enums `VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT` and `VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT` are reused to express tileimage read accesses.
+
+This approach would allow synchronizing individual color attachments, or depth or stencil attachment.
+
+Example synchronizing two draw calls, where the first writes to color attachments and the second reads via the tileimage variables.
+
+[source,c]
+----
+vkCmdDraw(...);
+
+VkImageMemoryBarrier2 imageMemoryBarrier = {
+        ...
+        .srcStageMask = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT,
+        .srcAccessMask = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT,
+        .dstStageMask = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
+        .dstAccessMask = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT,
+        .oldLayout = ..., //layouts not allowed to be changed.
+        .newLayout ...,
+        .image = .., //image and subresource identifying the specific attachment.
+        .subresourceRange = ..
+};
+
+VkDependencyInfo dependencyInfo {
+        ...
+        VK_DEPENDENCY_BY_REGION, //dependency flags
+        ...
+        1, //image memory barrier count
+        &imageMemoryBarrier, //memory barrier
+        ...
+};
+
+vkCmdPipelineBarrier2(commandBuffer, &dependencyInfo);
+
+vkCmdDraw(...);
+----
+
+=== Barrier Proposal C: New simple API for tile image barriers
+
+New API entry point `vkCmdTileBarrierEXT(..)` where the app can specify which attachments to synchronize. This can be easily extended to tile shader if an implementation desires explicit barriers - by specifying all of tile memory needs to be synchronized and explicitly specifying tile-wide synchronization.
+
+[source,c]
+----
+//New Vulkan function and types
+vkCmdTileBarrierEXT(
+    VkCommandBuffer             commandBuffer,
+    VkDependencyFlags           dependencyFlags,
+    VkTileMemoryTypeFlagsEXT    tileMemoryMask);
+
+typedef enum VkTileMemoryTypeFlagsBitsEXT {
+    VK_TILE_IMAGE_COLOR_ATTACHMENTS_BIT = 0x00000001,
+    VK_TILE_IMAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000002,
+}
+----
+
+Example synchronizing two draw calls, where the first writes to color attachments and the second reads via the tile image variables.
+
+[source,c]
+----
+vkCmdDraw(...);
+
+vkCmdTileBarrierEXT(commandBuffer,
+    VK_DEPENDENCY_BY_REGION,
+    VK_TILE_IMAGE_COLOR_ATTACHMENTS_BIT);
+
+vkCmdDraw(...);
+----
+
+
+=== SPIR-V and GLSL changes
+
+* Tile Image data variables can optionally be specified with "noncoherent" layout qualifier in GLSL. For Depth and Stencil we could use a special fragment shader layout qualifier (similar to early_fragment_tests) to indicate depth and stencil access is "noncoherent".
+* Three new Execution modes in SPIR-V to specify that color, depth or stencil reads via the functionality in this extension are non-coherent (that is the reads are no longer guaranteed to be in raster order with respect to write operations from prior fragments).
+
+== Issues
+
+=== 1. RESOLVED: Should we allow early fragment tests?
+
+Early fragment tests are disallowed if reading frag depth / stencil.
+
+=== 2. RESOLVED: Should depth / stencil fetch be a separate extension?
+
+Access to depth / stencil is defined differently than color, but we suggest keeping them together - with separate feature bits.
+
+=== 3. RESOLVED: What should we name these variables? What should the extension be named?
+
+Other APIs have similar but not identical concepts, so a unique name is useful.
+
+We call these resources tile images.
+On typical implementations supporting this extension, the framebuffer is divided into tiles and fragment processing is deferred such that each framebuffer tile is typically visited just once.
+A tile image is a view of a framebuffer attachment, restricted to the tile being processed.
+
+Note that fragment shaders still can only color, depth, and stencil values from their fragment location and not the entire tile.
+
+The extension is called VK_EXT_shader_tile_image.
+
+=== 4. RESOLVED: Are there any non-obvious interactions with the suspend/resume functionality in `VK_KHR_dynamic_rendering`?
+
+Not at present.
+If we were to allow non-aliased tile image variables, then implementations would have to be able to guarantee that those variables never have to 'spill' from tile image.
+
+=== 5. RESOLVED: Enable / Disable raster order access
+
+Some implementations pay a performance cost to guarantee raster order access. We need to give them a way to disable raster order access and add support for barriers to explicitly perform synchronization.
+
+Three proposals have been added to the Non-coherent access section in this document. The spec changes currently choose Barrier Proposal A: MemoryBarrier via vkCmdPipelineBarrier2.
+
+Vulkan barriers have been difficult for developers to use, so Barrier Proposal C might offer a simpler API.
+
+Consensus was to keep things consistent with existing barriers in Vulkan, so Barrier Proposal A was chosen.
+
+=== 7. RESOLVED: Should this extension reuse OpTypeImage, or introduce a new type for declaring tile images?
+
+OpTypeImage is reused with a special Dim for tile images, following what was done for subpass attachments.
+
+An alternative would have been to make tile images their own type, and introduce an OpTypeTileImage type.
+That would require less special-casing of OpTypeImage, but comes with higher initial burden in tooling.
+
+=== 8. RESOLVED: Should Color, Depth, and Stencil reads use the same SPIR-V opcode?
+
+No. The extension introduces separate opcodes.
+
+Tile based GPUs which guarantee framebuffer residency in tile memory can offer efficient raster order access to color, depth, stencil data with relatively low overhead.
+Some GPU implementations would have a significant performance penalty in raster order access if the implementation cannot determine from the SPIR-V shader whether a specific access is color, depth, or stencil.
+
+This design choice is in-line with other API extensions (GL framebuffer fetch and framebuffer fetch depth stencil) and other APIs where depth/stencil access is clearly disambiguated.
+
+=== 9. RESOLVED: Should Depth and Stencil read opcodes consume an image operand specifying the attachment, or should it be implicit?
+
+No operand is necessary as there is depth and stencil uniquely identify the attachments unlike with color.
+
+The other options considered were:
+
+ A. Allow depth and stencil tile images to be declared as variables. Tile images are defined to map to the color attachment specified via the `Location` decoration - some equivalent needs to be defined for depth and stencil. Pixel Local Storage like functionality of supporting format reinterpretation is only supported for color attachments, and hence must be disallowed for depth and stencil. There is very little benefit to declaring the depth and stencil variables given these restrictions.
+ B. Depth and stencil tile images are exposed as built-in variables.
+
+Given the design choice made for issue 8, the alternate options do not add any value.
+
+=== 10. RESOLVED: Should this extension reuse the image Dim SubpassData or introduce a new Dim?
+
+The extension introduces a new Dim.
+
+This extension is intended to serve as foundation for further functionality - for example Pixel Local Storage like format reinterpretation, or to define the tile size and allow tile shaders to access any pixel within the tile.
+In SPIR-V, input attachments use images with Dim of SubpassData. We use a new Dim so we can easily distinguish whether an image is an input attachment or a tile image.
+
+=== 11. RESOLVED: Should this extension require applications to create and bind descriptors for tile images?
+
+No.
+Some GPUs internally require descriptors to be able to access framebuffer data. The input attachments in Vulkan subpasses help these GPU implementations.
+
+Other GPUs do not require apps to bind such descriptors. The intent with this extension is to provide functionality roughly in the lines of GL_EXT_shader_framebuffer_fetch, GL_EXT_shader_pixel_local_storage - which do not require apps to manage and bind descriptors.
+
+=== 12. RESOLVED: What does 'undefined value' mean for tile image reads?
+
+It simply means that the value has no well-defined meaning to an application. It does _not_ mean that the value is random nor that it could have been leaked from other contexts, processes, or memory other than the framebuffer attachments.
+
+== Further Functionality
+
+=== Fragment Shading Rate interactions
+
+With `VK_KHR_fragment_shading_rate` multi-pixel fragments read some implementation-defined pixel from the input attachments. We could define stronger requirements in this extension.
+
+=== Allow non-aliased Tile Image variables and/or image format redeclaration
+
+This would provide "Pixel local storage" equivalent functionality.
+
+A possible approach for that would be to specify the format as layout parameter - similar to image access:
+[source,c]
+----
+layout(r11f_g11f_b10f) tile readonly highp tileImage normal;
+----
+
+=== Tile Image size query
+
+If we were to allow non-aliased Tile Image variables, we would need to expose some limits on tile image size and tile dimensions so that applications can make performance trade-offs on tile size vs storage requirements.
+
+=== Memoryless attachments
+
+We have lazily allocated images in Vulkan, but they do not guarantee that memory is not allocated.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_subpass_merge_feedback.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_subpass_merge_feedback.adoc
new file mode 100644
index 0000000..0e4ec67
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_subpass_merge_feedback.adoc
@@ -0,0 +1,113 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_subpass_merge_feedback
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+== Problem Statement
+
+The Vulkan render pass mechanism allows the implementation to merge subpasses at render pass
+creation time to improve performance or reduce memory bandwidth usage. However, the criteria
+for merging are implementation-specific and not visible to applications, and the application
+has no way to know which (if any) subpasses were merged.
+
+For performance debugging, applications may want to query whether certain subpasses were
+merged, or why they were not. They may also want to disable subpass merging completely or
+for certain subpasses, in order to determine the impact of subpass merging on performance.
+
+This proposal attempts to provide feedback and control for the subpass merging. It can be used
+for performance debugging or for runtime usage.
+
+== Solution Space
+
+Some new structures can be chained to pNext of VkRenderPassCreateInfo2, then the driver could
+provide subpass merging feedback and control subpass merging at render pass creation time.
+
+If the subpasses cannot be merged, the reason could be returned. The driver could change the
+conditions of subpass merging based on performance result, or being compatible with future new
+extensions, so using a string to store the reason is more flexible than a enumeration.
+
+== Proposal
+
+The following feature is exposed by the VK_EXT_subpass_merge_feedback extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkBool32                       subpassMergeFeedback;
+}
+----
+
+`subpassMergeFeedback` is the main feature enabling this extension's functionality and must
+be supported if this extension is supported.
+
+[source,c]
+----
+typedef struct VkRenderPassCreationControlEXT {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkBool32                       disallowMerging;
+}
+----
+
+The structure can control the subpass merging for both render pass level and subpass level.
+It can be chained to the pNext of VkRenderPassCreateInfo2 or VkSubpassDescription2.
+
+[source,c]
+----
+typedef struct VkRenderPassCreationFeedbackCreateInfoEXT {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkRenderPassCreationFeedbackInfoEXT*        pRenderPassFeedback;
+}
+----
+
+The structure can get the feedback from render pass level at render pass creation time.
+It can be chained to the pNext of VkRenderPassCreateInfo2. The feedback information could
+tell application which subpasses are merged.
+
+[source,c]
+----
+typedef struct VkRenderPassCreationFeedbackInfoEXT {
+    uint32_t                       postMergeSubpassCount;
+}
+----
+
+The structure contains the feedback data from render pass level.
+
+[source,c]
+----
+typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkRenderPassSubpassFeedbackInfoEXT*  pSubpassFeedback;
+----
+
+The structure can get the feedback from subpass level at render pass creation time.
+It can be chained to the pNext of VkSubpassDescription2. The feedback information could
+tell application whether a subpass is merged into previous subpass and what is the reason
+if the subpass cannot be merged.
+
+[source,c]
+----
+typedef struct VkRenderPassSubpassFeedbackInfoEXT {
+    VkMergeStatusEXT               mergeStatus;
+    char                           description[VK_MAX_DESCRIPTION_SIZE];
+    uint32_t                       postMergeIndex;
+}
+----
+
+The structure contains the feedback data from the subpass level.
+
+== Issues
+
+=== RESOLVED: Could the reasons of not merging be enum instead of string?
+
+New enums are introduced in addition to the string.
+The enums will cover the main reasons and the string will specify the unspecified reason
+of enum.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_surface_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_surface_maintenance1.adoc
new file mode 100644
index 0000000..d331578
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_surface_maintenance1.adoc
@@ -0,0 +1,185 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_surface_maintenance1
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal investigates and addresses a number of practical issues with the
+`VK_KHR_surface` specification.
+
+== Problem Statement
+
+The following is a list of issues considered in this proposal:
+
+  * Min and max image count as reported in `VkSurfaceCapabilitiesKHR` depend on
+    present mode.
+  * The scaling behavior of the surface is undefined when the swapchain and
+    the surface dimensions do not match.
+  * Switching between some present modes technically should not require
+    recreating the swapchain
+
+=== Image Count Query Per Present Mode
+
+The implementation may require a different number of images, as reported in
+`VkSurfaceCapabilitiesKHR::minImageCount` and
+`VkSurfaceCapabilitiesKHR::maxImageCount` depending on the desired present mode.
+However, there is currently no way to specify the present mode when calling
+`vkGetPhysicalDeviceSurfaceCapabilitiesKHR`.
+
+=== Undefined Scaling Behavior
+
+Currently, a few of the surface extensions (such as `VK_KHR_xcb_surface` and
+`VK_KHR_win32_surface`) require the swapchain's extents to match the surface's.
+A mismatch between the swapchain and the surface dimensions, as the window is
+resized, would result in `VK_ERROR_OUT_OF_DATE_KHR`, which can be undesirable
+behavior.
+On other surfaces where scaling happens, it is undefined how the image is
+scaled.
+The image may stretch, scale with fixed aspect ratio, snap to a corner or be
+centered.
+
+=== Switching Present Modes
+
+Certain present modes are compatible, such that a swapchain operating under one
+mode can be easily switched to another.
+In such a case, recreating the swapchain is undesirable.
+
+See the proposal for `VK_EXT_swapchain_maintenance1` for details.
+
+== Solution Space
+
+=== Image Count Query Per Present Mode
+
+This issue can be rectified by providing the desired present mode when querying
+surface capabilities.
+
+=== Undefined Scaling Behavior
+
+This issue can be resolved by the application querying and opting in to a
+specific supported scaling behavior.  Potential behaviors are:
+
+  * Stretch the swapchain image to the dimensions of the surface
+  * Stretch the swapchain image while maintaining the aspect ratio to fit
+    within the surface
+  * No scaling applied, and swapchain pixels are mapped one-to-one to the
+    surface
+
+When the resulting image does not cover the entire surface, additional behavior
+can be specified for each of the X and Y axes:
+
+  * Gravitate to left/top
+  * Gravitate to right/bottom
+  * Center
+
+This extension allows the supported behavior to be queried, while
+`VK_EXT_swapchain_maintenance1` would be used to select the desired behavior at
+swapchain creation time.
+
+=== Switching Present Modes
+
+To support the `VK_EXT_swapchain_maintenance1` extension and allow creating
+swapchains that may change present modes, it should be possible to query the
+set of compatible present modes for this purpose.
+
+This can be done by providing one present mode and querying the list of
+compatible present modes from the surface.
+
+== Proposal
+
+Introduced by this API are:
+
+=== Image Count Query Per Present Mode
+
+To query the min and max image counts for a specific present mode, chain the
+following to `VkPhysicalDeviceSurfaceInfo2KHR` when calling
+`vkGetPhysicalDeviceSurfaceCapabilities2KHR`:
+
+[source,c]
+----
+typedef struct VkSurfacePresentModeEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkPresentModeKHR   presentMode;
+} VkSurfacePresentModeEXT;
+----
+
+The returned values in `VkSurfaceCapabilitiesKHR::minImageCount` and
+`VkSurfaceCapabilitiesKHR::maxImageCount` would then be specific to the given
+present mode.
+
+=== Undefined Scaling Behavior
+
+To query supported scaling behavior, chain `VkSurfacePresentModeEXT` to
+`VkPhysicalDeviceSurfaceInfo2KHR` and chain the following to
+`VkSurfaceCapabilities2KHR`:
+
+[source,c]
+----
+typedef struct VkSurfacePresentScalingCapabilitiesEXT {
+    VkStructureType           sType;
+    void*                     pNext;
+    VkPresentScalingFlagsEXT  supportedPresentScaling;
+    VkPresentGravityFlagsEXT  supportedPresentGravityX;
+    VkPresentGravityFlagsEXT  supportedPresentGravityY;
+    VkExtent2D                minScaledImageExtent;
+    VkExtent2D                maxScaledImageExtent;
+} VkSurfacePresentScalingCapabilitiesEXT;
+----
+
+Where `VkPresentScalingFlagsEXT` is defined as:
+
+[source,c]
+----
+typedef enum VkPresentScalingFlagBitsEXT {
+    VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT = 0x00000001,
+    VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT = 0x00000002,
+    VK_PRESENT_SCALING_STRETCH_BIT_EXT = 0x00000004,
+} VkPresentScalingFlagBitsEXT;
+
+typedef VkFlags VkPresentScalingFlagsEXT;
+----
+
+And `VkPresentGravityFlagsEXT` is defined as:
+
+[source,c]
+----
+typedef enum VkPresentGravityFlagBitsEXT {
+    VK_PRESENT_GRAVITY_MIN_BIT_EXT = 0x00000001,
+    VK_PRESENT_GRAVITY_MAX_BIT_EXT = 0x00000002,
+    VK_PRESENT_GRAVITY_CENTERED_BIT_EXT = 0x00000004,
+} VkPresentGravityFlagBitsEXT;
+
+typedef VkFlags VkPresentGravityFlagsEXT;
+----
+
+Note that scaling may not be supported for certain present modes.
+
+The `VK_EXT_swapchain_maintenance1` extension must be used to create a
+swapchain with a supported behavior.
+Swapchains created with scaling enabled, must use image extents that are
+bounded by `minScaledImageExtent` and `maxScaledImageExtent`.
+
+=== Switching Present Modes
+
+To query the list of compatible present modes with a given present mode for the
+purposes of mode switching, chain `VkSurfacePresentModeEXT` to
+`VkPhysicalDeviceSurfaceInfo2KHR` and chain the following to
+`VkSurfaceCapabilities2KHR`:
+
+[source,c]
+----
+typedef struct VkSurfacePresentModeCompatibilityEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           presentModeCount;
+    VkPresentMode*     pPresentModes;
+} VkSurfacePresentModeCompatibilityEXT;
+----
+
+The implementation will return the count of compatible present modes in
+`presentModeCount`, and if provided, the list of them in `pPresentModes`.
+
+== Issues
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_swapchain_maintenance1.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_swapchain_maintenance1.adoc
new file mode 100644
index 0000000..70ee7c8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_EXT_swapchain_maintenance1.adoc
@@ -0,0 +1,338 @@
+// Copyright 2022-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_EXT_swapchain_maintenance1
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal investigates and addresses a number of practical issues with the
+`VK_KHR_swapchain` specification.
+
+== Problem Statement
+
+The following is a list of issues considered in this proposal:
+
+  * It is not directly known when a semaphore used for presentation can be
+    recycled.
+  * Switching present modes requires a swapchain recreation
+  * Upfront memory allocation is costly in startup time and memory
+  * Unknown behavior when presenting a swapchain image to a surface with
+    different dimensions
+  * Impossible to release acquired images without presenting them
+
+=== Recycling Present Semaphores
+
+With `VK_KHR_swapchain`, there is no way to provide feedback as to when a
+semaphore used for presentation can be freed or recycled.
+The application would have to infer this information from when the fence of the
+_next_ call to `vkAcquireNextImageKHR` that returns the presented image's index
+has been signaled.
+This is needlessly complicated.
+
+=== Swapchain Recreation on Present Mode Change
+
+Currently, when changing present modes, the Vulkan swapchain is required to be
+recreated.
+This is unnecessary if otherwise the swapchain is not changed, as the present
+mode does not affect the actual swapchain images and their associated memory.
+This is realistically affecting apps that switch between
+VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR and
+VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR (in single-buffer applications).
+In that case, a flicker is noticed as the swapchain is recreated and the old
+contents of the swapchain is discarded.
+
+=== Upfront Memory Allocation
+
+Currently, Vulkan allows the application to record commands using any image
+from the swapchain.
+Additionally, the application may use `VkBindImageMemorySwapchainInfoKHR` at
+any time to bind an image to swapchain memory.
+This requires swapchain implementations to allocate memory for all images
+upfront.
+This is costly both in startup time, and potentially memory if all images are
+not eventually acquired.
+
+=== Scaling Behavior
+
+It is desirable for the application to specify a scaling behavior for when the
+swapchain extents do not match the surface's, such as during window resizing,
+instead of receiving `VK_ERROR_OUT_OF_DATE_KHR`.
+
+See the proposal document for `VK_EXT_surface_maintenance1` for details.
+
+=== Releasing Acquired Images
+
+When the swapchain needs to be recreated, it may be possible that an
+application has acquired images from the old swapchain that it is no longer
+interested in presenting to.
+However, it is unable to release those images before recreating the swapchain.
+As a result, the application is forced to present to an old swapchain that may
+no longer match the surface.
+Additionally, the memory allocated for the old and new swapchains coexist,
+increasing peak memory usage.
+
+== Solution Space
+
+There are generally two possible approaches to resolving these problems:
+
+  * Have the application directly interface with the window system, bypassing
+    `VK_KHR_swapchain`.
+  * Improve upon `VK_KHR_swapchain`
+
+The benefits of the first approach are:
+
+  * Total control of the swapchain implementation by the application, which
+    would allow for prompt fixes of future issue
+  * Works on existing drivers, removing any need for fallbacks
+
+However, this approach results in duplicated effort among applications.
+A potential library with a swapchain implementation can be conceived which
+could be updated and shipped with applications independently from driver
+updates, though it lacks the benefit of driver updates bringing fixes and
+optimizations to all applications.
+
+This proposal considers the second approach with the goal of improving the
+larger Vulkan ecosystem while leveraging existing swapchain implementations
+which most applications have come to rely on.
+
+=== Recycling Present Semaphores
+
+There are three potential solutions for this:
+
+  * A status query for present operations, potentially identified through ids
+    assigned with `VK_KHR_present_id`.
+  * A wait function similar to `vkWaitForPresentKHR`
+  * A fence passed to `vkQueuePresentKHR` that signals when the presentation
+    engine no longer accesses the present semaphores
+
+The last solution is adopted as it provides more power to the application
+(wait, in addition to query), as well as fitting better with event loops, other
+Vulkan APIs and future work to enable timeline semaphores.
+
+=== Swapchain Recreation on Present Mode Change
+
+Each present mode may require a different number of images.
+Additionally, the `VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR` and
+`VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR` present modes may require a
+different image memory layout compared with the rest of the present modes.
+Switching between non-shared present modes may or may not be possible on some
+implementations.
+
+Regarding image count, potential solutions are:
+
+  * Specify all potential present modes at swapchain creation time
+  ** The swapchain would then allocate as many images to satisfy all present
+     modes
+  * Increase the number of swapchain images as necessary when present mode is
+    changed
+  ** This requires the application to use `vkGetSwapchainImagesKHR` after each
+     change in present mode and adjust accordingly
+
+Regarding the subsets of switchable present modes that the implementation
+supports, potential solutions are:
+
+  * Specify a particular behavior for `VkSwapchainCreateInfoKHR::oldSwapchain`
+    when the only change is in the present mode
+  ** This is not straightforward and is error-prone
+  * Allow modifying present modes as needed, such as during a
+    `vkQueuePresentKHR` call
+  ** Implementations may support switching between present modes only in
+     disjoint subsets.
+     This subsets can be queried.
+     Alternatively, Vulkan could divide the present modes into shared and
+     non-shared, with the latter conditional to a feature flag.
+
+The adopted solution in this proposal is to allow applications to specify a
+potential set of present modes at swapchain creation time.
+A query must be used to determine whether these present modes are compatible
+for dynamic switching.
+Then, the application would pass the desired present mode to
+`vkQueuePresentKHR`.
+
+With the solution to the "Upfront Memory Allocation" problem, the application
+can avoid paying any extra memory cost due to higher image counts until a
+present mode that uses that many images is used.
+
+=== Upfront Memory Allocation
+
+This can be explicitly opted in with a new swapchain create flag.
+Using this flag would prohibit problematic scenarios, such as using
+`VkBindImageMemorySwapchainInfoKHR` with an image index that has never been
+acquired, or recording command buffers using those swapchain images.
+
+This amortizes the cost of memory allocation between the first few frames,
+using CPU time that may otherwise have gone idle waiting for the GPU.
+This will additionally resolve a number of memory issues:
+
+  * If a present mode is specified at swapchain creation time which requires a
+    larger number of images, but that is never actually used, the extra
+    images would not have to consume memory.
+  * When resizing the swapchain, peak memory increase is avoided by not
+    actually allocating memory for the new swapchain.
+    First memory allocation for the new swapchain could happen after some of
+    the images from the old swapchain have been destroyed.
+
+=== Scaling Behavior
+
+The `VK_EXT_surface_maintenance1` extension introduces scaling and gravity
+behavior enums whose support can be queried from the surface.
+At swapchain creation time, one of the supported behavior can be specified by
+the application.
+
+=== Releasing Acquired Images
+
+There are a number of ways the applications could partially work around this
+issue, such as by deferring image acquisition, or recreating the swapchain only
+once all images from the old swapchain are presented.
+
+However, in all implementations, releasing an acquired image without presenting
+it is no more complex than presenting it.
+The adopted solution is to expose this functionality in this extension.
+
+== Proposal
+
+Introduced by this API are:
+
+=== Feature
+
+Advertising whether the implementation supports the functionality in this
+extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           swapchainMaintenance1;
+} VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT;
+----
+
+=== Present Fence
+
+To associate fences with the present operations for each swapchain, chain the
+following to `VkPresentInfoKHR`:
+
+[source,c]
+----
+typedef struct VkSwapchainPresentFenceInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           swapchainCount;
+    VkFence*           pFences;
+} VkSwapchainPresentFenceInfoEXT;
+----
+
+With `swapchainCount` matching
+`VkSwapchainPresentFenceInfoEXT::swapchainCount`, each swapchain being
+presented to will signal the fence once the application is allowed to destroy
+or recycle the semaphores passed to `vkPresentInfoKHR::pname:pWaitSemaphores`.
+
+=== Switching Present Modes
+
+During creation of the swapchain, all potential present modes are specified by
+chaining the following to `VkSwapchainCreateInfoKHR`:
+
+[source,c]
+----
+typedef struct VkSwapchainPresentModesCreateInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           presentModeCount;
+    VkPresentModeKHR*  pPresentModes;
+} VkSwapchainPresentModesCreateInfoEXT;
+----
+
+The present modes given in `pPresentModes` must be compatible for mode
+switching.
+This can be queried by use of `VkSurfacePresentModeCompatibilityEXT` from the
+`VK_EXT_surface_maintenance1` extension.
+
+The present mode can be changed by chaining the following to
+`VkPresentInfoKHR`:
+
+[source,c]
+----
+typedef struct VkSwapchainPresentModeInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           swapchainCount;
+    VkPresentModeKHR*  pPresentModes;
+} VkSwapchainPresentModeInfoEXT;
+----
+
+Where the elements of `pPresentModes` can take any present mode specified in
+`VkSwapchainPresentModesCreateInfoEXT` during the creation of the respective
+swapchain.
+If not specified, the swapchain will continue to operate according to the last
+specified present mode.
+
+=== Swapchain Memory Allocation
+
+To allow the swapchain to defer memory allocation for each image until it is
+acquired through `vkAcquireNextImageKHR`, specify the
+`VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT` flag in
+`VkSwapchainCreateInfoKHR::flags`.
+In that case, the application may still use `vkGetSwapchainImagesKHR` to
+retrieve the image handles, but it may not use any image whose index has never
+been returned by `vkAcquireNextImageKHR`; this includes recording commands
+using such an image, or binding another image to its memory through
+`VkBindImageMemorySwapchainInfoKHR`.
+
+As memory allocation for each image is deferred, so should the application
+defer the above operations for each image until it is first acquired.
+
+=== Scaling Behavior
+
+To specify the scaling behavior of the swapchain, chain the following to
+`VkSwapchainCreateInfoKHR`:
+
+[source,c]
+----
+typedef struct VkSwapchainPresentScalingCreateInfoEXT {
+    VkStructureType                 sType;
+    void*                           pNext;
+    VkPresentScalingFlagsEXT        scalingBehavior;
+    VkPresentGravityFlagsEXT        presentGravityX;
+    VkPresentGravityFlagsEXT        presentGravityY;
+} VkSwapchainPresentScalingCreateInfoEXT;
+----
+
+The values specified in `scalingBehavior`, `presentGravityX` and
+`presentGravityY` must be supported by the surface.
+This can be queried by use of `VkSurfacePresentScalingCapabilitiesEXT` from the
+`VK_EXT_surface_maintenance1` extension.
+
+=== Releasing Acquired Images
+
+To release previously acquired images back to the swapchain, call
+`vkReleaseSwapchainImagesEXT`:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT(
+    VkDevice                                    device,
+    const VkReleaseSwapchainImagesInfoEXT*      pReleaseInfo);
+----
+
+`VkReleaseSwapchainImagesInfoEXT` is defined as:
+
+[source,c]
+----
+typedef struct VkReleaseSwapchainImagesInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+    deUint32           imageIndexCount;
+    const deUint32*    pImageIndices;
+} VkReleaseSwapchainImagesInfoEXT;
+----
+
+== Issues
+
+=== RESOLVED: Should there be a surface capability bit to advertise the present fence functionality?
+
+No.
+Present fences fix a critical hole in the swapchain programming model and hence
+are a required feature of this maintenance extension.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_GOOGLE_surfaceless_query.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_GOOGLE_surfaceless_query.adoc
new file mode 100644
index 0000000..3926b1f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_GOOGLE_surfaceless_query.adoc
@@ -0,0 +1,79 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_GOOGLE_surfaceless_query
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal regards layering OpenGL over Vulkan, and addresses a discrepancy
+where EGL is able to respond to certain queries before a surface is created,
+while Vulkan requires a surface for corresponding queries.
+
+== Problem Statement
+
+An application using EGL can query the list of supported ``EGLConfig``s, based on
+which it would create an `EGLSurface`.
+Additionally, based on the availability of extensions, it can provide a
+color space to `eglCreateWindowSurface` at the same time.
+
+In Vulkan, the format and color space information are retrievable from the
+`VkSurfaceKHR` through
+link:{refpage}vkGetPhysicalDeviceSurfaceFormatsKHR.html[`vkGetPhysicalDeviceSurfaceFormatsKHR`]
+When layering OpenGL over Vulkan, there needs to be a way to query this
+information before the surface is created.
+
+Similarly, the OpenGL implementation layer needs to know:
+
+- The supported present modes by the platform to be able to correctly expose
+  the `EGL_KHR_mutable_render_buffer` extension,
+- Whether protected surfaces are supported to be able to correctly expose the
+  `EGL_EXT_protected_content` extension.
+
+On some implementations and platforms, the surface formats, color spaces,
+present modes and support for protected content are identical for every
+surface, and such queries could in fact be answered before a surface is
+created.
+
+== Solution Space
+
+Currently, no cross-platform solution is known to exist to support layering
+OpenGL over Vulkan in this regard.
+
+=== Surfaceless Queries
+
+One solution is to modify the existing relevant queries to allow querying
+without a link:{refpage}VkSurfaceKHR.html[`VkSurfaceKHR`].
+This works on platforms where this information is truly global, which is
+currently the case with Google's Android and SwiftShader.
+
+Pros:
+
+- Trivial to implement and use
+
+Cons:
+
+- Works only on some platforms, and cannot be implemented on all platforms.
+
+== Proposal
+
+In VK_GOOGLE_surfaceless_query, the first solution is adopted primarily to
+accelerate producing working systems where OpenGL is layered on Vulkan.
+
+With this extension, the `surface` parameter can be `VK_NULL_HANDLE` in the
+following:
+
+- link:{refpage}vkGetPhysicalDeviceSurfaceFormatsKHR.html[`vkGetPhysicalDeviceSurfaceFormatsKHR`]
+- link:{refpage}vkGetPhysicalDeviceSurfacePresentModesKHR.html[`vkGetPhysicalDeviceSurfacePresentModesKHR`]
+- `pSurfaceInfo->surface` passed to
+  link:{refpage}vkGetPhysicalDeviceSurfaceCapabilities2KHR.html[`vkGetPhysicalDeviceSurfaceCapabilities2KHR`]
+  if
+  link:{refpage}VkSurfaceProtectedCapabilitiesKHR.html[`VkSurfaceProtectedCapabilitiesKHR`]
+  is chained to `pSurfaceCapabilities`.
+  In this case, only the protected information is populated, while
+  link:{refpage}VkSurfaceCapabilities2KHR.html[`VkSurfaceCapabilities2KHR`]`::surfaceCapabilities`
+  and any other chained structs will have undefined values.
+
+In all the above situations, calling the function with any valid `surface`
+parameter will produce identical results to calling it with `VK_NULL_HANDLE`.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_cluster_culling_shader.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_cluster_culling_shader.adoc
new file mode 100644
index 0000000..903738e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_cluster_culling_shader.adoc
@@ -0,0 +1,178 @@
+// Copyright (c) 2020-2024 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_HUAWEI_cluster_culling_shader
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+
+== Problem Statement
+
+When drawing a scene with a massive amount of geometry, it is necessary to remove the invisible geometry to decrease redundant drawing, a common approach used to remove invisible geometry is called cluster culling, a cluster is a subset of a mesh that has as many shared vertices as possible, alternatively, a cluster can also be an entire mesh, cluster will be pre-computed and stored with the geometry to avoid computation at runtime.
+
+The GPU has numerous of thread and parallel computing capabilities, so it is more suitable for culling many clusters than the CPU. Many developers use compute shader for GPU culling tasks. Because compute shader can not generate output which directly connected to the existing rendering pipeline. It is necessary to separate culling and rendering into two passes. First, the culling pass processes the whole scene and updates the MDI command, and then uses the MDI method to draw during the rendering pass.
+
+== Solution space
+Provide a new extension to connect the output of the compute shader to the existing rednering pipeline, developers who originally used compute shader for culling can easily migrate to this new extension and have better performance.
+
+
+
+== Proposal.
+=== Cluster culling shader
+This extension allowing application to use a new programmable shader type -- Cluster Culling Shader -- to execute geometry culling on GPU. This mechanism does not require pipeline barrier between compute shader and other rendering pipeline.
+
+This new shader type have execution environments similar to that of compute shaders, where a collection of shader invocations form a workgroup and cooperate to perform coarse level culling and level-of-detail selection, shader invocation can emit a set of built-in output variables to the subsequent rendering pipeline via a new built-in function, these emitted variables form a drawing command used to draw geometries of cluster.
+
+=== API changes
+==== shader stage and synchronization
+Extending `VkShaderStageFlagBits:`::
+`VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI`
+specifies the cluster shader stage.
+
+Extending `VkPipelineStageFlagBits2:`::
+`VK_PIPELINE_STAGE2_CLUSTER_CULLING_SHADER_BIT_HUAWEI`
+ specifies the cluster pipeline stage for synchronization.
+
+==== New structure
+Extending `VkPhysicalDeviceFeatures2`, `VkDeviceCreateInfo:`::
+VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI
+
+Extending `VkPhysicalDeviceProperties2:`::
+`VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI`
+
+==== drawcall
+dispatching command are recording into a command buffer and when executed by a queue, it will produce work which executes according to the bound Cluster Culling Shader pipeline.
+
+To Record a Cluster Culling Shader command:
+```c
+void vkCmdDrawClusterHUAWEI(
+    VkCommandBuffer     commandBuffer,
+    uint32_t            groupCountX,
+    uint32_t            groupCountY,
+    uint32_t            groupCountZ );
+```
+* `commandBuffer` is the command buffer into which the command will be recorded.
+* `groupCountX` is the number of local workgroups to dispatch in the X dimension.
+* `groupCountY` is the number of local workgroups to dispatch in the Y dimension
+* `groupCountZ` is the number of local workgroups to dispatch in the Z dimension
+When the command is executed, a global workgroup consisting of  `groupCountX`  * `groupCountY` * `groupCountZ` local workgroup is assembled.
+
+
+To record an indirect Cluster Culling Shader command:
+```c
+void vkCmdDrawClusterIndirectHUAWEI(
+    VkCommandBuffer     commandBuffer,
+    vkBuffer            buffer,
+    vkDeviceSize        offset );
+```
+
+* `commandBuffer` is the command buffer into which the command will be recorded.
+* `buffer` is the buffer containing dispatch parameters.
+* `offset` is the byte offset into buffer where parameters begin.
+
+`vkCmdDrawClusterIndirectHUAWEI` behaves similarly to `vkCmdDrawClusterHUAWEI` except that the parameters are read by the device from a buffer during execution.
+
+==== feature
+`VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI` - Structure describing cluster culling shading features that can be supported by an implementation.
+
+`VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI` structure is defined as:
+```c
+Typedef struct VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI {
+    VkStructureType             sType;
+    void*                       pNext;
+    VkBool32                    clustercullingShader;
+    VkBool32                    multiviewClusterCullingShader;
+}VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI;
+```
+
+* `sType` is the type of this structure.
+* `pNext` is NULL or a pointer to a structure extending this structure.
+* `clustercullingShader` indicates whether the cluster culling stage is supported.
+* `multiviewClusterCullingShader` indicates whether multiview can be used with cluster culling shader.
+
+If the `VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI` structure is included in the `pNext` chain of the `VkPhysicalDeviceFeature2` structure passed to `vkPhysicalDeviceFeature2`, it is filled in to indicate whether each corresponding feature is supported.
+`VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI` can also be used in the `pNext` chain of `VkDeviceCreateInfo` to selectively enable these features.
+
+
+==== property
+`VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI` - Structure describing cluster culling shading properties.
+```c
+Typedef struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI {
+    VkStructureType             sType;
+    void*                       pNext;
+    uint32_t                    maxWorkGroupCount[3];
+    uint32_t                    maxWorkGroupSize[3];
+    uint32_t                    maxOutputClusterCount;
+}VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI;
+```
+
+* `sType` is the type of this structure.
+
+* `pNext` is NULL or a pointer to a structure extending this structure.
+* `maxWorkgroupCount` is the maximum number of local workgroups that can be launched by a single command. These three value represent the maximum local workgroup count in the X, Y and Z dimensions, respectively. In the current implementation, the values of Y and Z are both implicitly set as one. `groupCountX` of `DrawCluster*` command must be less than or equal to `maxWorkGroupCount[0]`.
+* `maxWorkGroupSize` is the maximum size of a local workgroup. These three value represent the maximum local workgroup size in the X, Y and Z dimensions, respectively. The x, y and z sizes, as specified by the LocalSize or LocalSizeId execution mode or by the object decorated by the WorkgroupSize decoration in shader modules, must be less than or equal to the corresponding limit.
+* `maxOutputClusterCount` is the maximum number of output clusters that a single workgroup may emit.
+
+If the `VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI` structure is included in the `pNext` chain of the `VkPhysicalDeviceProperties2` structure passed to `vkGetPhysicalDeviceProperties2`, it is filled in with each corresponding implementation-dependent property.
+
+=== SPIR-V changes
+==== new capability
+
+`ClusterCullingShadingHUAWEI`
+
+==== execution model
+`ClusterCullingHUAWEI`
+
+==== built-in
+
+cluster culling shader have the following built-in output variables, these variables form a aforementioned drawing command.
+
+* `IndexCountHUAWEI` is the number of vertices to draw.
+
+* `VertexCountHUAWEI` is the number of vertices to draw.
+* `InstanceCountHUAWEI` is the number of instances to draw.
+* `FirstIndexHUAWEI` is the base index within the index buffer.
+* `FirstVertexHUAWEI` is the index of the first vertex to draw.
+* `VertexOffsetHUAWEI` is the value added to the vertex index before indexing into the vertex buffer.
+* `FirstInstanceHUAWEI` is the instance ID of the first instance to draw.
+* `ClusterIdHUAWEI` is the index of cluster being rendered by this drawing command. Cluster Culling Shader passes this id to vertex shader for cluster related information fetching. When cluster culling shader enable, gl_DrawID will be replaced by gl_ClusterIDHUAWEI in Vertex Shader.
+
+==== new function.
+* `OpDispatchClusterHUAWEI`
+
+Any invocation in Cluster Culling Shader can execute this instruction more than once, after execution, it will emite the Cluster Culling Shader built-in output variables which describe in 3.3.3 to the subsequent rendering pipeline. While a workgroup is done, GPU creates warps for VS according to these output variables, all invocations in VertexShader are responsible for shading the vertices.
+
+=== GLSL changes
+New write-only output blocks are defined for built-in output variables:
+```c
+Type 1 (non-indexed mode):
+out gl_PerClusterHUAWEI
+{
+    uint gl_VertexCountHUAWEI;
+    uint gl_InstanceCountHUAWEI;
+    uint gl_FirstVertexHUAWEI;
+    uint gl_FirstInstanceHUAWEI;
+    uint gl_ClusterIdHUAWEI;
+}
+```
+
+```c
+Type 2 (indexed mode):
+ out gl_PerClusterHUAWEI
+{
+    uint gl_IndexCountHUAWEI;
+    uint gl_InstanceCountHUAWEI;
+    uint gl_FirstIndexHUAWEI ;
+    int  gl_VertexOffsetHUAWEI;
+    uint gl_FirstInstanceHUAWEI;
+    uint gl_ClusterIdHUAWEI;
+}
+```
+
+
+A new function is added:
+```c
+void dispatchClusterHUAWEI(void);
+```
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_invocation_mask.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_invocation_mask.adoc
new file mode 100644
index 0000000..1d8a9ee
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_HUAWEI_invocation_mask.adoc
@@ -0,0 +1,149 @@
+
+// Copyright 2021 HUAWEI, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_HUAWEI_invocation_mask
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+
+
+
+== Problem Statement
+
+The rays to trace may be sparse in some use cases. 
+
+For example, the scene only have a few regions to reflect. 
+
+Providing an invocation mask image to the trace ray commands could potentially give the hardware the hint to do
+
+certain optimization without invoking an additional pass to compact the ray buffer.
+
+== Solution Space
+
+
+
+== Proposal
+
+API proposal
+
+New Enum Constants
+
+• VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME
+• VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION
+• Extending VkAccessFlagBits2KHR:
+
+ ◦ VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI
+
+• Extending VkImageUsageFlagBits:
+
+ ◦ VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
+
+• Extending VkPipelineStageFlagBits2KHR:
+
+ ◦ VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+
+• Extending VkStructureType:
+
+ ◦ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI
+
+
+New structure
+ ◦ VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
+
+typedef enum VkImageUsageFlagBits {
+
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+ VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+ VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+ VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
+ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+ VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
+
+ // Provided by VK_EXT_fragment_density_map
+ VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
+
+ // Provided by VK_HUAWEI_invocation_mask
+ VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000,
+
+} VkImageUsageFlagBits;
+
+New commands
+
+void vkCmdBindInvocationMaskHUAWEI(
+  VkCommandBuffer commandBuffer,
+  VkImageView imageView,
+  VkImageLayout imageLayout);
+  
+• If imageView is not VK_NULL_HANDLE, it must be a valid VkImageView handle of type VK_IMAGE_VIEW_TYPE_2D
+
+• If imageView is not VK_NULL_HANDLE, it must have a format of VK_FORMAT_R8_UINT
+
+• If imageView is not VK_NULL_HANDLE, it must have been created with a usage value including VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI
+
+• If imageView is not VK_NULL_HANDLE, imageLayout must match the actual VkImageLayou
+of each subresource accessible from imageView at the time the subresource is accessed
+• If imageView is not VK_NULL_HANDLE, imageLayout must be VK_IMAGE_LAYOUT_GENERAL
+
+Valid usage:
+
+Mask image resolution must match the width/height in vkCmdTraceRay;
+The element of the invocation mask image use value 0 and 1.
+The value 1 means the invocation is active.
+
+New structure
+
+• Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:
+
+ ◦ VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
+
+ typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI {
+  VkStructureType sType;
+  void* pNext;
+  VkBool32 invocationMask;
+ } VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
+
+invocationMask = true mean the feature is supported
+
+
+== Examples
+
+RT mask is updated before each traceRay.
+
+Step 1. Generate InvocationMask.
+
+//the rt mask image bind as color attachment in the fragment shader
+Layout(location = 2) out vec4 outRTmask
+vec4 mask = vec4(x,x,x,x);
+outRTmask = mask;
+
+Step 2. traceRay with InvocationMask
+
+vkCmdBindPipeline(
+    commandBuffers[imageIndex],
+    VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, m_rtPipeline);
+    vkCmdBindDescriptorSets(commandBuffers[imageIndex],
+    VK_PIPELINE_BIND_POINT_RAY_TRACING_NV,
+    m_rtPipelineLayout, 0, 1, &m_rtDescriptorSet,
+    0, nullptr);
+
+vkCmdBindInvocationMaskHUAWEI(
+    commandBuffers[imageIndex],
+    InvocationMaskimageView,
+    InvocationMaskimageLayout);
+    vkCmdTraceRaysKHR(commandBuffers[imageIndex],
+    pRaygenShaderBindingTable,
+    pMissShaderBindingTable,
+    swapChainExtent.width,
+    swapChainExtent.height, 1);
+
+
+== Issues
+
+
+== Further Functionality
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_cooperative_matrix.asciidoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_cooperative_matrix.asciidoc
new file mode 100644
index 0000000..29b86a5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_cooperative_matrix.asciidoc
@@ -0,0 +1,50 @@
+// Copyright 2021-2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_cooperative_matrix
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document proposes adding support for so-called cooperative matrix
+operations that enables multiple shader invocations to cooperatively and
+efficiently perform matrix multiplications.
+
+== Problem Statement
+
+A growing number of GPU applications are making use of matrix multiplication
+operations. Modern GPU HW can take advantage of cross-invocation communication
+channels or other hardware facilities to implement matrix multiplications
+operations more efficiently but there is currently no suitable standard
+SPIR-V/API mechanism to expose these features to applications or libraries.
+
+== Solution Space
+
+Applications or libraries can use subgroup primitives to write more efficient
+matrix multiplication kernels but, while technically possible on some hardware,
+this approach often does not make it possible to write optimal kernels and
+requires applications to have a lot of device-specific knowledge.
+
+NVIDIA exposed with VK_NV_cooperative_matrix a new set of abstractions for such
+cooperative matrix operations. These include cooperative load and store
+instructions, a matrix multiplication-addition instruction as well a limited
+support for element-wise operations on these matrices. Since the release of
+that extension, a growing body of evidence in the form of discussions and
+other similar vendor extensions suggests that this approach is suitable for
+a wide variety of devices and applications and is thus a good candidate for
+standardisation.
+
+== Proposal
+
+Work towards a standard extension that exposes abstractions similar as those
+released under VK_NV_cooperative_matrix.
+
+== Examples
+
+See specifications and presentations for VK_NV_cooperative_matrix.
+
+== Issues
+
+None.
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_dynamic_rendering.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_dynamic_rendering.adoc
new file mode 100644
index 0000000..d5eff52
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_dynamic_rendering.adoc
@@ -0,0 +1,446 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_dynamic_rendering
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details API design ideas for the VK_KHR_dynamic_rendering extension, which adds a more dynamic and flexible way to use draw commands, as a straightforward replacement for single pass render passes.
+
+
+== Problem Statement
+
+Render passes are the number one complaint from developers about Vulkan and have been almost since launch. Some of the most pointed issues are as follows:
+
+  . Other APIs have much more flexible APIs for the same functionality
+  . Most of the render pass API in Vulkan goes unused
+  . Most applications do not or cannot use subpasses, but still pay the cost of setting them up
+  . The API does not fit into most existing software architectures
+  . Fundamentally, other than load/store actions, they do not address real issues for IHVs or ISVs
+  . When teaching Vulkan as an API, this is a huge place where people trip up
+
+An additional problem came up recently that having this state baked into pipeline creation actively contributes to the pipeline compilation time problem and having the ability to separate out most of this state would help enormously.
+
+This proposal _only_ addresses single pass render passes; additional functionality to replace multiple subpasses will be in a separate proposal.
+
+
+== Solution Space
+
+The following rough options exist for addressing this issue:
+
+  . Drastically expand the render pass compatibility options
+  . Allow render pass objects to be “VK_NULL_HANDLE” until record time
+  . Create a new API that pares down the information required to the bare minimum
+
+Option 1 has the advantage of being the least invasive in terms of API changes – it only really affects a handful of VUs, whilst still solving some of the flexibility issues.
+The disadvantage of this is that applications still have to manage render pass objects, and it does not really address any of the points in the problem statement directly.
+
+Option 2 effectively allows applications to provide the same information to applications again without any real API change, and addresses point 4 in the problem statement directly as it allows the render pass information to provided fairly late.
+
+Option 3 is a much more drastic change in terms of the API, requiring additional paths through the API/driver that are generally somewhat annoying to manage. This has the advantage of being able to address all points in the problem statement, however.
+Render pass objects also carry a lot of baggage in terms of developer opinion, and an overhaul replacement is likely to be better received for that reason.
+
+Developers and the Vulkan WG seems to be more enthusiastic about Option 3 than other approaches, and so it is the approach proposed here.
+
+
+== Proposal
+
+=== Begin/End Render Pass
+
+This extension introduces new commands to begin and end a render pass:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkRenderingInfoKHR*                   pRenderingInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR(
+    VkCommandBuffer                             commandBuffer);
+----
+
+Neither of these commands make any reference to a render pass object – render passes are now fully dynamic.
+These commands may be called inside secondary command buffers, but `vkCmdEndRenderingKHR` and `vkCmdBeginRenderingKHR` must always appear as a pair in the same command buffer.
+Note that render passes can still span multiple command buffers via <<suspending-and-resuming,suspended render passes>>.
+
+[source,c]
+----
+typedef struct VkRenderingInfoKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkRenderingFlagsKHR                 flags;
+    VkRect2D                            renderArea;
+    uint32_t                            layerCount;
+    uint32_t                            viewMask;
+    uint32_t                            colorAttachmentCount;
+    const VkRenderingAttachmentInfoKHR* pColorAttachments;
+    const VkRenderingAttachmentInfoKHR* pDepthAttachment;
+    const VkRenderingAttachmentInfoKHR* pStencilAttachment;
+} VkRenderingInfoKHR;
+----
+
+The rendering info provided to `vkCmdBeginRenderingKHR` is the essential information needed to begin rendering, based on what is and is not currently inside the compatibility rules for render passes.
+Notably, this is not a synchronization command – there is no replacement for subpass external dependencies.
+Applications should use other synchronization primitives (barriers, events) to manage synchronization.
+
+If `viewMask` is `0`, then multiview is disabled for this render pass, and `layerCount` indicates the number of layers used in each attachment.
+If `viewMask` is non-zero, then multiview is enabled for this render pass, and each bit in `viewMask` indicates a layer index in each element that will rendered.
+
+==== Attachments
+
+Depth and stencil image info are separated for API clarity (since everything else is applied independently), but they must point to the same image.
+The same restriction applies to their respective resolve images.
+For each attachment, the information provided is a the image view to bind, layout information, resolve information, and load/store ops (including a clear color).
+
+[source,c]
+----
+typedef struct VkRenderingAttachmentInfoKHR {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageView              imageView;
+    VkImageLayout            imageLayout;
+    VkResolveModeFlagBits    resolveMode;
+    VkImageView              resolveImageView;
+    VkImageLayout            resolveImageLayout;
+    VkAttachmentLoadOp       loadOp;
+    VkAttachmentStoreOp      storeOp;
+    VkClearValue             clearValue;
+} VkRenderingAttachmentInfoKHR;
+----
+
+There are no layout transitions or other synchronization info for images – synchronization is done exclusively by existing synchronization commands - the layouts provided are those that the image must already be in when rendering.
+
+Image views for any attachment may be link:{refpage}VK_NULL_HANDLE.html[VK_NULL_HANDLE], indicating that writes to the attachment are discarded, and reads return undefined values.
+
+Note that the resolve images do not have their own load/store operations; they are treated as if they are implicitly `VK_ATTACHMENT_LOAD_OP_DONT_CARE` and `VK_ATTACHMENT_STORE_OP_STORE` – other combinations in the existing API do not really carry any useful meaning.
+
+`resolveMode` for color attachments must be `VK_RESOLVE_MODE_NONE` or `VK_RESOLVE_MODE_AVERAGE_BIT`.
+
+===== Store Op None
+
+A new store operation is provided as originally described by link:{refpage}VK_QCOM_render_pass_store_ops.html[VK_QCOM_render_pass_store_ops]:
+
+[source,c]
+----
+VK_ATTACHMENT_STORE_OP_NONE_KHR = 1000301000,
+----
+
+This store operation works largely like DONT_CARE but guarantees that the store op does not access the attachment.
+When a render pass accesses an attachment as read only, this can be useful in avoiding a potential write operation during the store operation, and removing the need for synchronization in some cases.
+
+
+==== Rendering Flags
+
+Rendering flags cover the following functionality:
+
+[source,c]
+----
+typedef enum VkRenderingFlagsKHR {
+    VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = 0x00000001,
+    VK_RENDERING_SUSPENDING_BIT_KHR                         = 0x00000002,
+    VK_RENDERING_RESUMING_BIT_KHR                           = 0x00000004,
+} VkRenderingFlagsKHR;
+----
+
+
+===== Secondary Command Buffer Contents
+
+`VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR` works more or less identically to `VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS`, indicating that the contents of the render pass will be entirely recorded inside a secondary command buffer and replayed.
+If it is absent, the commands must be wholly recorded inside the command buffer that starts it.
+
+This requires the introduction of a new inheritance info when dynamic rendering is used, as the renderpass will no longer provide information required by implementations:
+
+[source,c]
+----
+typedef struct VkCommandBufferInheritanceRenderingInfoKHR {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkRenderingFlagsKHR      flags;
+    uint32_t                 viewMask;
+    uint32_t                 colorAttachmentCount;
+    const VkFormat*          pColorAttachmentFormats;
+    VkFormat                 depthAttachmentFormat;
+    VkFormat                 stencilAttachmentFormat;
+    VkSampleCountFlagBits    rasterizationSamples;
+} VkCommandBufferInheritanceRenderingInfoKHR;
+----
+
+Information here must match that in the render pass being executed.
+If no color attachments are used or the formats are all `VK_FORMAT_UNDEFINED`, and the `variableMultisampleRate` feature is supported, the rasterization sample count is ignored.
+If either `depthAttachmentFormat` or `stencilAttachmentFormat` are not `VK_FORMAT_UNDEFINED`, they must have the same value.
+
+This allows applications to use secondary command buffers with dynamic rendering as they would have done in the existing render pass API.
+
+However, an alternative method of recording commands across multiple command buffers is also provided by <<suspending-and-resuming,suspending render passes>>.
+
+[[command-buffer-inheritance-mixed-samples]]
+====== Mixed Samples
+
+If either of link:{refpage}VK_NV_framebuffer_mixed_samples.html[VK_NV_framebuffer_mixed_samples] or link:{refpage}VK_AMD_mixed_attachment_samples.html[VK_AMD_mixed_attachment_samples] are enabled, the sample counts of color and depth attachments may vary from the `rasterizationSamples`.
+In this case, the sample count of each attachment can be specified by including the `VkAttachmentSampleInfoAMD`/`VkAttachmentSampleCountInfoNV` structure in the same `pNext` chain.
+
+[source,c]
+----
+typedef struct VkAttachmentSampleCountInfoAMD {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkRenderingFlagsKHR             flags;
+    uint32_t                        colorAttachmentCount;
+    const VkSampleCountFlagBits*    pColorAttachmentSamples;
+    VkSampleCountFlagBits           depthStencilAttachmentSamples;
+} VkAttachmentSampleCountInfoAMD;
+
+typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV;
+----
+
+[[command-buffer-inheritance-multiview-per-view-attributes]]
+====== Multiview Per-View Attributes
+
+If link:{refpage}VK_NVX_multiview_per_view_attributes.html[VK_NVX_multiview_per_view_attributes] is enabled, the multiview per-view attributes can be specified by including the `VkMultiviewPerViewAttributesInfoNVX` structure in the same `pNext` chain.
+
+
+[[suspending-and-resuming]]
+===== Suspending and Resuming
+
+`VK_RENDERING_SUSPENDING_BIT_KHR` and `VK_RENDERING_RESUMING_BIT_KHR` allow an alternative method of recording across multiple command buffers.
+Applications can suspend a render pass in one command buffer using `VK_RENDERING_SUSPENDING_BIT_KHR`, and resume it in another command buffer by starting an identical render pass with `VK_RENDERING_RESUMING_BIT_KHR`.
+Suspended render passes must be resumed by a render pass with identical begin parameters, other than the presence absence of `VK_RENDERING_SUSPENDING_BIT_KHR`, `VK_RENDERING_RESUMING_BIT_KHR`, and `VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR`.
+
+It is invalid to use action commands, synchronization commands, or record additional render passes, between a suspended render pass and the render pass which resumes it.
+All pairs of resuming and suspending render passes must be submitted in the same batch.
+Applications can resume a dynamic render pass in the same command buffer as it was suspended.
+Applications can record a dynamic render pass wholly inside secondary command buffers.
+A dynamic render pass can be both suspending and resuming.
+
+
+==== Device Groups
+
+The link:{refpage}VkDeviceGroupRenderPassBeginInfo.html[VkDeviceGroupRenderPassBeginInfo] structure can be chained from `VkRenderingInfoKHR`, with the same effect as when chained to link:{refpage}VkRenderPassBeginInfo.html[VkRenderPassBeginInfo] - setting the device mask and setting independent render areas per device.
+
+
+==== Fragment Shading Rate
+
+If link:{refpage}VK_KHR_fragment_shading_rate.html[VK_KHR_fragment_shading_rate] is enabled, when calling `vkCmdBeginRenderingKHR`, the following structure should be chained to `VkRenderingInfoKHR` to include a fragment shading rate attachment:
+
+[source,c]
+----
+typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkImageView                         imageView;
+    VkImageLayout                       imageLayout;
+} VkRenderingFragmentShadingRateAttachmentInfoKHR;
+----
+
+
+==== Fragment Density Map
+
+If link:{refpage}VK_EXT_fragment_density_map.html[VK_EXT_fragment_density_map] is enabled, when calling `vkCmdBeginRenderingKHR`, the following structure should be chained to `VkRenderingInfoKHR` to include a fragment density map attachment:
+
+[source,c]
+----
+typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkImageView                         imageView;
+    VkImageLayout                       imageLayout;
+} VkRenderingFragmentDensityMapAttachmentInfoEXT;
+----
+
+
+=== Pipeline Creation
+
+With the removal of render pass objects, it is now necessary to provide some of that same information to applications at pipeline creation.
+This structure is chained from link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]:
+
+[source,c]
+----
+typedef struct VkPipelineRenderingCreateInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           colorAttachmentCount;
+    const VkFormat*    pColorAttachmentFormats;
+    VkFormat           depthAttachmentFormat;
+    VkFormat           stencilAttachmentFormat;
+    uint32_t           viewMask;
+} VkPipelineRenderingCreateInfoKHR;
+----
+
+If a color or depth/stencil attachment is specified in `vkCmdBeginRenderingKHR`, its format must match that provided here.
+If any format here is `VK_FORMAT_UNDEFINED`, no attachment must be specified for that attachment in `vkCmdBeginRenderingKHR`.
+If either `depthAttachmentFormat` or `stencilAttachmentFormat` are not `VK_FORMAT_UNDEFINED`, they must have the same value.
+
+The value of `viewMask` must match the value of the `viewMask` member of `VkRenderingInfoKHR`.
+
+==== Multiview Per-View Attributes
+
+If link:{refpage}VK_NVX_multiview_per_view_attributes.html[VK_NVX_multiview_per_view_attributes] is enabled, the multiview per-view attributes can be specified by including the `VkMultiviewPerViewAttributesInfoNVX` structure in the same `pNext` chain.
+
+==== Mixed Sample Attachments
+
+If either of link:{refpage}VK_NV_framebuffer_mixed_samples.html[VK_NV_framebuffer_mixed_samples] or link:{refpage}VK_AMD_mixed_attachment_samples.html[VK_AMD_mixed_attachment_samples] are enabled, the sample counts of color and depth attachments must be specified at pipeline creation as well.
+As with <<command-buffer-inheritance-mixed-samples,command buffer inheritance>>, the sample count of each attachment can be specified by including the `VkAttachmentSampleInfoAMD`/`VkAttachmentSampleCountInfoNV` structure in the `pNext` chain.
+If the structure is omitted, the sample count for each attachment is considered equal to link:{refpage}VkPipelineMultisampleStateCreateInfo.html[`VkPipelineMultisampleStateCreateInfo::rasterizationSamples`].
+
+
+==== Fragment Shading Rate
+
+If link:{refpage}VK_KHR_fragment_shading_rate.html[VK_KHR_fragment_shading_rate] is enabled, a new rasterization state pipeline creation flag must be provided if a shading rate attachment will be used:
+
+[source,c]
+----
+VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+----
+
+
+==== Fragment Density Map
+
+If link:{refpage}VK_EXT_fragment_density_map.html[VK_EXT_fragment_density_map] is enabled, a new rasterization state pipeline creation flag must be provided if a fragment density map will be used:
+
+[source,c]
+----
+VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
+----
+
+
+=== Features
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceDynamicRenderingFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           dynamicRendering;
+} VkPhysicalDeviceDynamicRenderingFeaturesKHR
+----
+
+`dynamicRendering` is the core feature enabling this extension's functionality.
+
+
+== Examples
+
+
+=== Creating a Pipeline
+
+[source,c]
+----
+VkFormat colorRenderingFormats[2] = {
+    VK_FORMAT_R8G8B8A8_UNORM,
+    VK_FORMAT_R32_UINT };
+
+VkPipelineRenderingCreateInfoKHR rfInfo = {
+    .sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR,
+    .pNext = NULL,
+    .colorAttachmentCount = 2,
+    .pColorAttachmentFormats = colorRenderingFormats,
+    .depthAttachmentFormat = VK_FORMAT_D32_SFLOAT_S8_UINT,
+    .stencilAttachmentFormat = VK_FORMAT_D32_SFLOAT_S8_UINT };
+
+VkGraphicsPipelineCreateInfo createInfo = {
+    .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+    .pNext = &rfInfo,
+    .renderPass = VK_NULL_HANDLE,
+    .... };
+
+VkPipeline graphicsPipeline;
+
+vkCreateGraphicsPipelines(device, pipelineCache, 1, &createInfo, NULL, &graphicsPipeline);
+----
+
+=== Rendering with a dynamic render pass
+
+[source,c]
+----
+VkRenderingAttachmentInfoKHR colorAttachments[2] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
+        .pNext = NULL,
+        .imageView = colorImageViews[0],
+        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
+        .resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
+        .resolveImageView = resolveColorImageView,
+        .resolveImageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
+        .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        .clearValue = {.color = {.float32 = {0.0f,0.0f,0.0f,0.0f} } }
+    }, {
+        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
+        .pNext = NULL,
+        .imageView = colorImageViews[1],
+        .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
+        .resolveMode = VK_RESOLVE_MODE_NONE,
+        .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        .storeOp = VK_ATTACHMENT_STORE_OP_STORE
+    } };
+
+// A single depth stencil attachment info can be used, but they can also be specified separately.
+// When both are specified separately, the only requirement is that the image view is identical.
+VkRenderingAttachmentInfoKHR depthStencilAttachment = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
+    .pNext = NULL,
+    .imageView = depthStencilImageView,
+    .imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
+    .resolveMode = VK_RESOLVE_MODE_NONE,
+    .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
+    .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    .clearValue = {.depthStencil = {.depth = 0.0f, .stencil = 0 } } };
+
+VkRenderingInfoKHR renderingInfo = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
+    .pNext = NULL,
+    .flags = 0,
+    .renderArea = { ... },
+    .layerCount = 1,
+    .colorAttachmentCount = 2,
+    .pColorAttachments = colorAttachments,
+    .pDepthAttachment = &depthStencilAttachment,
+    .pStencilAttachment = &depthStencilAttachment };
+
+vkCmdBeginRenderingKHR(commandBuffer, &renderingInfo);
+
+vkCmdDraw(commandBuffer, ...);
+
+...
+
+vkCmdDraw(commandBuffer, ...);
+
+vkCmdEndRenderingKHR(commandBuffer);
+----
+
+
+== Issues
+
+This section describes issues with the existing proposal – including both open issues that you have not addressed, and closed issues that are not self-evident from the proposal description.
+
+
+=== Should we support multiview?
+
+Yes, its complexity is much reduced compared to render pass objects, and it is probably worth preserving in this limited form for compatibility reasons.
+
+
+=== Should there be a view mask for multiview?
+
+Yes.
+Without multiple subpasses the view mask is significantly less useful; the layer count provided is sufficient to describe the number of views.
+However, the mask allows specification of a non-contiguous array, and while it is unclear if any applications use this, it has been included to maintain compatibility with existing APIs.
+
+
+=== Should we have functionality to replace the on-chip storage aspect of subpasses?
+
+No - this will be designed as a separate extension.
+
+
+=== Should pipeline barriers work inside these limited render passes?
+
+No - without input attachments or a solution for on-chip storage these are currently functionally useless.
+
+
+=== Is there a preferred render area granularity for `VkRenderingInfo::renderArea` similar to `vkGetRenderAreaGranularity`?
+
+During design discussions for this extension, no hardware vendor felt that this functionality was important enough to bring over to dynamic rendering.
+If vendors have performance concerns, extensions such as link:{refpage}VK_QCOM_tile_properties.html[VK_QCOM_tile_properties] can be exposed, and there may be scope for a future cross-vendor extension.
+Applications can use values for the render area freely without alignment considerations.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shader_barycentric.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shader_barycentric.adoc
new file mode 100644
index 0000000..71a671e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shader_barycentric.adoc
@@ -0,0 +1,119 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_fragment_shader_barycentric
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details the VK_KHR_fragment_shader_barcentric extension, which adds a cross-vendor way to access barycentric coordinates in a fragment shader.
+
+== Problem Statement
+
+Barycentric coordinates are widely used in computer graphics, and are an important building block for various algorithms.  By being able to access the location of a pixel within a primitive and
+the non-interpolated attributes at the vertices, pixel shaders are able to perform things such as custom attribute interpolation or effects based on the pixel's location within a primitive.
+
+== Solution Space
+
+Two options have been considered:
+
+- Take VK_NV_fragment_shader_barycentric and add any new required properties and behaviours.
+- Start afresh
+
+This proposal focuses on the first option.
+
+== Proposal
+
+=== New SPIR-V decorations
+
+A new SPIR-V extension https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_fragment_shader_barycentric.html[SPV_KHR_fragment_shader_barycentric]
+adds three fragment shader variable decorations:
+
+  * `PerVertexKHR`, which indicates that a fragment shader input will not
+    have interpolated values, but instead must be accessed with an extra
+    array index that identifies one of the vertices of the primitive
+    producing the fragment
+  * `BaryCoordKHR`, which indicates that the variable is a three-component
+    floating-point vector holding barycentric weights for the fragment
+    produced using perspective interpolation
+  * `BaryCoordNoPerspKHR`, which indicates that the variable is a
+    three-component floating-point vector holding barycentric weights for
+    the fragment produced using linear interpolation
+
+=== Barycentric weights
+
+- For point primitives, `BaryCoordKHR` and `BaryCoordNoPerspKHR` are assigned the value (1,0,0).
+- For line primitives, `BaryCoordKHR` and `BaryCoordNoPerspKHR` are assigned the values (1,0,0) and (0,1,0) at the ends of the primitive.
+- For polygon primitives, `BaryCoordKHR` and `BaryCoordNoPerspKHR` are assigned the values (1,0,0), (0,1,0), and (0,0,1) at the three vertices.
+
+=== Per-vertex attributes
+
+Per-vertex attributes for "missing" vertices, such as the third vertex of a line primitive, will return values from the valid vertex with the highest index.
+
+Vertices are numbered as follows:
+
+[cols="10,10,10,10",options="header",width = "80%"]
+|====
+| Primitive Topology | Vertex 0 | Vertex 1 | Vertex 2
+| `VK_PRIMITIVE_TOPOLOGY_POINT_LIST`                           | i           | i           | i
+| `VK_PRIMITIVE_TOPOLOGY_LINE_LIST`                            | 2i          | 2i+1        | 2i+1
+| `VK_PRIMITIVE_TOPOLOGY_LINE_STRIP`                           | i           | i+1         | i+1
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST`                        | 3i          | 3i+1        | 3i+2
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP` (even)                | i           | i+1         | i+2
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP` (odd)                 | i           | i+2         | i+1
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN`                         | i+1         | i+2         | 0
+| `VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY`             | 4i+1        | 4i+2        | 4i+2
+| `VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY`            | i+1         | i+2         | i+2
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY`         | 6i          | 6i+2        | 6i+4
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY` (even) | 2i          | 2i+2        | 2i+4
+| `VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY` (odd)  | 2i          | 2i+4        | 2i+2
+|====
+
+When the provoking vertex mode is `VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT`, the original vertex numbers used are the same as above except as indicated in the table below.
+
+[cols="10,10,10,10",options="header",width = "80%"]
+|====
+| Primitive Topology | Vertex 0 | Vertex 1 | Vertex 2
+| VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd, and `triStripVertexOrderIndependentOfProvokingVertex`  is `VK_FALSE`)    | i+1         | i           | i+2
+| VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                         | 0           | i+1         | i+2
+| VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY (odd)  | 2i+2        | 2i          | 2i+4
+|====
+
+=== Properties
+
+A new property structure is added:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           triStripVertexOrderIndependentOfProvokingVertex;
+} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR;
+----
+
+The `triStripVertexOrderIndependentOfProvokingVertex` property indicates that the implementation does not change its vertex numbering for triangle strip primitives
+when the link:{refpage}VkProvokingVertexModeEXT.html[provoking vertex mode] is `VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT`.
+
+=== GLSL mapping
+
+The following variables from https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_fragment_shader_barycentric.txt[`GL_EXT_fragment_shader_barycentric`]
+map to these SPIR-V built-in decorations:
+
+- in vec3 gl_BaryCoordEXT; → BaryCoordKHR
+- in vec3 gl_BaryCoordNoPerspEXT; → BaryCoordNoPerspKHR
+
+GLSL variables declared using the `__pervertexEXT` GLSL qualifier are expected to be decorated with `PerVertexKHR` in SPIR-V.
+
+=== HLSL mapping
+
+- in float3 barycentrics : SV_Barycentrics; → BaryCoordKHR
+- in noperspective float3 barycentrics : SV_Barycentrics; → BaryCoordNoPerspKHR
+
+Values of per-vertex attributes provided by `GetAttributeAtVertex` are expected to be decorated with `PerVertexKHR` in SPIR-V.
+
+== Issues
+
+None
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shading_rate.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shading_rate.adoc
new file mode 100644
index 0000000..577cc53
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_fragment_shading_rate.adoc
@@ -0,0 +1,329 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_fragment_shading_rate
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This extension adds the ability to change the rate at which fragments are shaded. Rather than the usual single fragment invocation for each pixel covered by a primitive, multiple pixels can be shaded by a single fragment shader invocation.
+
+== Problem Statement
+
+Rendering resolutions are continually getting higher and higher, but as resolutions increase, the requirements on device performance increase at the same rate.
+However with a move from e.g. a 4K resolution to an 8K resolution, effectively doubling visual fidelity, this quadruples the requirements on device performance in order to keep up.
+In many cases, this extra pixel fidelity is not necessarily perceptible - and uniformly increasing the rate at which pixels are generated results in unnecessary work being performed, and it would be useful to reclaim some of that performance to improve the overall experience for an end user. This could be due to low-detail objects, triangles with a low delta between pixels, or something like VR where a user will not perceive detail in their peripheral vision.
+
+There are three potential bottlenecks as resolution requirements increase: the rasterizer's ability to generate pixels, fragment shading, and bandwidth. This proposal focuses on reducing the shading rate, as this is the primary bottleneck on many implementations; though implementations may be able to take advantage of this to reduce workloads in other areas.
+
+
+== Solution Space
+
+Current solutions to address this require a uniform rate to be applied across the screen - things like MSAA, sample rate shading, and custom sample locations can be used to modify the rate at which shading occurs, but this is always applied uniformly across the screen; though steps can be taken to apply different rates to different sets of geometry by modifying state between draw calls.
+However, this requires careful state management, and requires awkward sorting of geometry/draws in order to achieve anything other than a natural per-draw rate.
+
+Different applications may want to change the rate per-draw, per-triangle, or per-screen-region.
+While it would be possible to modify the behavior of sample shading to be modifiable at different rates to solve this, multisample state is relatively complex, and could result in tricky edge cases for some applications.
+The alternative is to provide a new shading rate state that is independent of multisampling, and enable it to be set at each separate rate.
+In either case, per draw rate can be set by pipeline or dynamic state, but for per-triangle and per-screen-region use cases, new mechanisms will be needed. For per-triangle state, the usual way of setting this is in the API is by providing data along with the provoking vertex. For the screen regions, two main options are viable - either an associated image which has sub regions identifying the state, or providing some sort of equation to be applied across the screen.
+
+Due to the complexity and potential fragility of multisample state, this proposal introduces new shading rate state to the API. As not all known use cases for screen-region state can be expressed as an straightforward equation, per-image state allowing arbitrary expression of regions is preferred.
+
+
+== Proposal
+
+This extension introduces the concept of a fragment size to the API, where a given fragment can cover more than one pixel in the output attachments.
+Each fragment is still rasterized at a per-pixel rate, as it effectively has one sample per pixel - but when shaded, only one shader is invoked for the entire fragment.
+This is very similar to multisampling, where multiple samples are generated for each pixel, but on a wider scale.
+This state also interacts with multisampling, such that one fragment can cover multiple pixels, with multiple samples per pixel.
+Note though that enabling sample shading will effectively disable the fragment shading rate.
+
+=== Per-Draw state
+
+This state can be set per-draw as part of the pipeline by chaining the following structure to link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]:
+
+[source,c]
+----
+typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExtent2D                            fragmentSize;
+    VkFragmentShadingRateCombinerOpKHR    combinerOps[2];
+} VkPipelineFragmentShadingRateStateCreateInfoKHR;
+----
+
+It can also be set dynamically by setting `VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR` on the pipeline and using:
+
+[source,c]
+----
+void vkCmdSetFragmentShadingRateKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkExtent2D*                           pFragmentSize,
+    const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
+----
+
+In each case, the link:{refpage}VkExtent2D.html[VkExtent2D] sets the base fragment size in the x and y dimensions for all fragments generated by draw calls using this state.
+
+As there are three rates at which the state can be set, rather than having these only set one at a time, applications can have all three rates set and define combiner operations to dictate how the final result is calculated.
+This allows applications to e.g. have a per-screen-region rate while also marking some triangles or objects as lower detail than the base rate.
+
+The per-draw and per-triangle rates are first combined according to the first combiner operation, and then the result of that is combined according to the second combiner operation.
+Available combiner operations are as follows:
+
+
+[source,c]
+----
+typedef enum VkFragmentShadingRateCombinerOpKHR {
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4,
+} VkFragmentShadingRateCombinerOpKHR;
+----
+
+`KEEP` will select the first rate in the combination, while `REPLACE` will select the second rate.
+`MIN` and `MAX` will select the minimum/maximum rate respectively, and do so separately for each dimension.
+So e.g. taking the max of `(1,2)` and `(2,1)` would result in `(2,2)`.
+
+The `MUL` operation multiples each dimension of the first input rate by the corresponding rate in the second input rate. So e.g. `(2,2)` and `(1,4)` would result in `(2,8)`.
+
+NOTE: The Vulkan specification chose to define this as a MUL operation using linear values to make this clear; whereas the DirectX Variable Rate Shading specification defines it as an addition in log2 space using bit flags. This unfortunately resulted in a misunderstanding between vendors, giving rise to the `fragmentShadingRateStrictMultiplyCombiner` limit, which when `VK_FALSE` indicates this operation acts as an addition. Fortunately, this only practically changes the result of a single combination - where the sum of 1 and 1 is 2 instead of a product of 1. All other combinations are clamped to 2 or 4, giving the same result as a true multiplication would provide.
+
+The result of the combiner operations will always be clamped to maximum supported rate of the implementation given the current draw state.
+
+When none of the above state is set, the fragment size is treated as 1 by 1, and the combiner ops are set to KEEP.
+
+
+=== Per-Triangle state
+
+The per-triangle shading rate can be set by a new output in pre-rasterization shaders that is set on the provoking vertex:
+
+[options="header"]
+|====
+2+| BuiltIn| Enabling Capabilities | Enabled by Extension
+| 4432 | *PrimitiveShadingRateKHR* +
+Output primitive fragment shading rate.
+Only valid in the *Vertex*, *Geometry*, and *MeshNV* Execution Models.
+See the API specification for more detail.
+| *FragmentShadingRateKHR* | *SPV_KHR_fragment_shading_rate*
+|====
+
+This value is set to a single integer value according to four flag values:
+
+[cols="1,15,5",options="header",width = "80%"]
+|====
+2+^.^| Fragment Shading Rate Flags | Enabling Capabilities
+| 1 | *Vertical2Pixels*  +
+Fragment invocation covers 2 pixels vertically.
+| *FragmentShadingRateKHR*
+| 2 | *Vertical4Pixels*  +
+Fragment invocation covers 4 pixels vertically.
+| *FragmentShadingRateKHR*
+| 4 | *Horizontal2Pixels*  +
+Fragment invocation covers 2 pixels horizontally.
+| *FragmentShadingRateKHR*
+| 8 | *Horizontal4Pixels*  +
+Fragment invocation covers 4 pixels horizontally.
+| *FragmentShadingRateKHR*
+|====
+
+Valid rate combinations must not include more than 1 horizontal and 1
+vertical rate.
+If no horizontal rate flags are set, it indicates a fragment shader covers one
+pixel horizontally.
+If no vertical rate flags are set, it indicates a fragment shader covers one
+pixel vertically.
+
+This functionality is gated behind a new capability:
+
+[options="header"]
+|====
+2+| Capability | Implicitly Declares
+| 4422 | *FragmentShadingRateKHR* +
+Uses the *PrimitiveShadingRateKHR* or *ShadingRateKHR* Builtins. | *Shader*
+|====
+
+
+=== Per-Region state
+
+The per-region state can be set through an image where a pixel in that image corresponds to a given region in the render.
+Using the same flag values as the per-triangle rate, the value of that pixel determines the per-region rate for the corresponding region.
+This image can be set per-subpass by chaining the following structure to link:{refpage}VkSubpassDescription2.html[VkSubpassDescription2]:
+
+[source,c]
+----
+typedef struct VkFragmentShadingRateAttachmentInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    const VkAttachmentReference2*    pFragmentShadingRateAttachment;
+    VkExtent2D                       shadingRateAttachmentTexelSize;
+} VkFragmentShadingRateAttachmentInfoKHR;
+----
+
+`pFragmentShadingRateAttachment` selects the attachment description corresponding to the image, which must have dimensions at least equal to the framebuffer size divided by the texel size selected by `shadingRateAttachmentTexelSize`.
+`shadingRateAttachmentTexelSize` can be set to values supported by the implementation, which are advertised via `maxFragmentShadingRateAttachmentTexelSize`, `minFragmentShadingRateAttachmentTexelSize`, `maxFragmentShadingRateAttachmentTexelSizeAspectRatio`, and must be power-of-two values.
+
+
+=== Reading the final rate
+
+In a fragment shader, the final calculated rate can be read through a new built-in:
+
+[options="header"]
+|====
+2+| BuiltIn| Enabling Capabilities | Enabled by Extension
+| 4444 | *ShadingRateKHR* +
+Input fragment shading rate for the current shader
+invocation.
+Only valid in the *Fragment* Execution Model.
+See the API specification for more detail.
+| *FragmentShadingRateKHR* | *SPV_KHR_fragment_shading_rate*
+|====
+
+=== Properties
+
+Properties of the implementation can be queried via a new properties structure:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR {
+    VkStructureType          sType;
+    void*                    pNext;
+    VkExtent2D               minFragmentShadingRateAttachmentTexelSize;
+    VkExtent2D               maxFragmentShadingRateAttachmentTexelSize;
+    uint32_t                 maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
+    VkBool32                 primitiveFragmentShadingRateWithMultipleViewports;
+    VkBool32                 layeredShadingRateAttachments;
+    VkBool32                 fragmentShadingRateNonTrivialCombinerOps;
+    VkExtent2D               maxFragmentSize;
+    uint32_t                 maxFragmentSizeAspectRatio;
+    uint32_t                 maxFragmentShadingRateCoverageSamples;
+    VkSampleCountFlagBits    maxFragmentShadingRateRasterizationSamples;
+    VkBool32                 fragmentShadingRateWithShaderDepthStencilWrites;
+    VkBool32                 fragmentShadingRateWithSampleMask;
+    VkBool32                 fragmentShadingRateWithShaderSampleMask;
+    VkBool32                 fragmentShadingRateWithConservativeRasterization;
+    VkBool32                 fragmentShadingRateWithFragmentShaderInterlock;
+    VkBool32                 fragmentShadingRateWithCustomSampleLocations;
+    VkBool32                 fragmentShadingRateStrictMultiplyCombiner;
+} VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
+----
+
+The limits are somewhat complex, as this functionality interacts heavily with other state, however many of these states are informative only; the implementation will automatically reduce the fragment shading rate to `(1,1)` when they are violated.
+`minFragmentShadingRateAttachmentTexelSize`, `maxFragmentShadingRateAttachmentTexelSize`, `maxFragmentShadingRateAttachmentTexelSizeAspectRatio`, `primitiveFragmentShadingRateWithMultipleViewports`, `fragmentShadingRateNonTrivialCombinerOps`, and `layeredShadingRateAttachments` are the only hard limits.
+`fragmentShadingRateStrictMultiplyCombiner` affects the operation of certain combiner operations, and cannot be violated.
+
+These limits must be adhered to by an application for correct behavior:
+
+* `minFragmentShadingRateAttachmentTexelSize` advertises the minimum size of the texel region for the per-region rate supported by the implementation.
+* `maxFragmentShadingRateAttachmentTexelSize` advertises the maximum size of the texel region for the per-region rate supported by the implementation.
+* `maxFragmentShadingRateAttachmentTexelSizeAspectRatio` advertises the maximum aspect ratio of the texel region for the per-region rate supported by the implementation.
+* `primitiveFragmentShadingRateWithMultipleViewports` advertises whether applications can write the primitive fragment shading rate when multiple viewports are used. Does not affect multiview.
+* `layeredShadingRateAttachments` advertises whether applications can use separate shading rate attachments for independent layers when performing layered rendering. Does not affect multiview.
+* `fragmentShadingRateNonTrivialCombinerOps` advertises whether applications can set the combiner ops to anything other than `KEEP` or `REPLACE`.
+
+Violating these limits is not invalid - instead the implementation will automatically reduce the fragment shading rate to `(1,1)` if any of them are violated.
+This allows applications to ship one algorithm while still ensuring valid behavior.
+
+* `maxFragmentSize` determines the maximum supported fragment size.
+* `maxFragmentSizeAspectRatio` determines the maximum supported aspect ratio between dimensions for the fragment size.
+* `maxFragmentShadingRateCoverageSamples` determines the maximum total coverage samples for a fragment as a product of the fragment shading rate in each dimension and the multisample rate.
+* `maxFragmentShadingRateRasterizationSamples` determines the maximum multisample rate (`rasterizationSamples`) when using a fragment shading rate.
+* `fragmentShadingRateWithShaderDepthStencilWrites` determines if depth/stencil export from a shader can be used with fragment shading rate.
+* `fragmentShadingRateWithSampleMask` determines if the `pSampleMask` member of link:{refpage}VkPipelineMultisampleStateCreateInfo.html[VkPipelineMultisampleStateCreateInfo] can have any valid bits equal to 0 when using with fragment shading rate.
+* `fragmentShadingRateWithShaderSampleMask` determines if the sample mask (input or output) can be used in a shader with fragment shading rate.
+* `fragmentShadingRateWithConservativeRasterization` determines if conservative rasterization can be used with fragment shading rate.
+* `fragmentShadingRateWithFragmentShaderInterlock` determines if fragment shader interlock can be used with fragment shading rate.
+* `fragmentShadingRateWithCustomSampleLocations` determines if custom sample locations can be used with fragment shading rate.
+
+This final limit cannot be violated:
+
+* `fragmentShadingRateStrictMultiplyCombiner` determines whether the operation of the MUL combiner operation is correct - if it is `VK_FALSE`, MUL acts as a sum operation.
+
+NOTE: See the definition of `VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR` for more information.
+
+
+=== Available shading rates
+
+To advertise precisely which shading rates are supported by an implementation, the following function is added to the specification:
+
+[source,c]
+----
+VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pFragmentShadingRateCount,
+    VkPhysicalDeviceFragmentShadingRateKHR*     pFragmentShadingRates);
+
+typedef struct VkPhysicalDeviceFragmentShadingRateKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSampleCountFlags    sampleCounts;
+    VkExtent2D            fragmentSize;
+} VkPhysicalDeviceFragmentShadingRateKHR;
+----
+
+This function returns the full list of supported fragment shading rates ordered from largest fragment size to smallest, with all valid sample rates.
+Implementations must support the following rates:
+
+[options="autowidth"]
+|===
+| `sampleCounts`                                   | `fragmentSize`
+
+| `VK_SAMPLE_COUNT_1_BIT \| VK_SAMPLE_COUNT_4_BIT` | {2,2}
+| `VK_SAMPLE_COUNT_1_BIT \| VK_SAMPLE_COUNT_4_BIT` | {2,1}
+| ~0                                               | {1,1}
+|===
+
+(1,1) is included for completeness only.
+Even if a shading rate advertises a given sample rate, valid sample rates are still subject to usual constraints on multisampling.
+
+
+=== Features
+
+Each of the three rates is enabled by an independent feature:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineFragmentShadingRate;
+    VkBool32           primitiveFragmentShadingRate;
+    VkBool32           attachmentFragmentShadingRate;
+} VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
+----
+
+  * `pipelineFragmentShadingRate` indicates support for the per-draw fragment shading rate, both dynamic and pipeline state. This feature must be supported to support the extension.
+  * `primitiveFragmentShadingRate` indicates support for the per-triangle fragment shading rate.
+  * `attachmentFragmentShadingRate` indicates support for the per-screen-region fragment shading rate.
+
+
+== Examples
+
+Two concrete samples are available in the https://github.com/KhronosGroup/Vulkan-Samples[KhronosGroup/Vulkan-Samples] repository:
+
+  * https://github.com/KhronosGroup/Vulkan-Samples/tree/master/samples/extensions/fragment_shading_rate
+  * https://github.com/KhronosGroup/Vulkan-Samples/tree/master/samples/extensions/fragment_shading_rate_dynamic
+
+== Issues
+
+This section describes issues with the existing proposal – including both open issues that you have not addressed, and closed issues that are not self-evident from the proposal description.
+
+=== RESOLVED: Should the result of combiners be required to be a valid rate?
+
+This makes a number of combinations nigh impossible to use, so instead combined values are clamped, with strict rules on how they are clamped.
+
+=== RESOLVED: Should the various limits on state setting be validated?
+
+Convention suggests they should be, but this makes the extension much harder to use - by asking implementations to clamp the rate to (1,1) instead, applications can ship the same functionality everywhere without having to modify their algorithm or assets.
+
+=== RESOLVED: Should we describe the final combiner operation as a multiplication or addition? Related, should the per-draw fragment shading rate be set as flags or raw values?
+
+The primitive and image rates have to be bit flags to maintain compatibility with other APIs. There was significant confusion about the meaning of the final combiner operation as an addition of log2 values, so the choice was made to describe this as a multiplication of raw values, and the API values were set as real values to make this clearer.
+
+=== RESOLVED: When no fragment shading rate is provided, should the default rate {1, 1} take part in combination operation?
+
+Yes.
+When no fragment shading rate is given in a certain stage, the default rate {1, 1} is used and participates in combination operations.
+For example, if per-draw/per-triangle/per-region shading rates are all enabled and `combinerOps` are `REPLACE`/`KEEP`, with a per-draw rate of {4, 2}, a per-region rate of {2, 2}, and no declaration of `FragmentShadingRateKHR` in the fragment shader (so it takes a default of {1, 1}), the final fragment size is {1, 1}.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_maintenance5.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_maintenance5.adoc
new file mode 100644
index 0000000..e8736ac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_maintenance5.adoc
@@ -0,0 +1,352 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Proposal Template
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This proposal details and addresses the issues solved by the `VK_KHR_maintenance5` extension.
+
+== Problem Statement
+
+Over time, a collection of minor features, none of which would warrant an entire extension of their own, requires the creation of a maintenance extension.
+
+The following is a list of issues considered in this proposal:
+
+  * Allow PointSize to take a default value of 1.0 when it is not written, rather than being undefined
+  * A device property to indicate whether non-strict lines use parallelogram or Bresenham.
+  * Add a A1B5G5R5 format (corresponding to `GL_UNSIGNED_SHORT_1_5_5_5_REV`)
+  * Allow vkGetPhysicalDeviceFormatProperties with unknown formats
+  * Add a vkGetRenderAreaGranularity equivalent for dynamic rendering
+  * Require vkGetDeviceProcAddr to return NULL for functions beyond app version
+  * Index buffer range specification
+  * Add a property to indicate multisample coverage operations are performed after sample counting in EarlyFragmentTests mode
+  * Add VK_REMAINING_ARRAY_LAYERS support to VkImageSubresourceLayers.layerCount
+  * Allow VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2
+  * Add support for a new vkGetDeviceImageSubresourceLayout to allow a vkGetImageSubresourceLayout query without having to create a dummy image
+  * Ensure we have a reliable/deterministic way to detect device loss
+  * We are running out of spare bits in various FlagBits
+  * Add a property to indicate sample mask test operations are performed after sample counting in EarlyFragmentTests mode
+  * Deprecate shader modules to avoid management of that object in the API
+  * Add a A8_UNORM format
+  * Relax VkBufferView creation requirements
+  * Appearance when using VK_POLYGON_MODE_POINT together with PointSize
+  * Enabling copies between images of any dimensionality
+  * Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats
+
+
+== Issue Details and Solution Space
+
+=== Default PointSize of 1.0
+
+It is unclear in the specification if the `PointSize` builtin is required to be written, and if it is not, what the default size is.
+
+=== Indication of parallelogram or Bresenham non-strict lines
+
+Some applications need to know whether the rasterization algorithm used for non-strict lines is parallelogram or Bresenham style.
+
+=== A1B5G5R5 format
+
+There is a request to add a format equivalent to GL_UNSIGNED_SHORT_1_5_5_5_REV for emulation.
+
+=== vkGetPhysicalDeviceFormatProperties with unknown formats
+
+The current specification prohibits `vkGetPhysicalDeviceFormatProperties` from being called with a `VkFormat` that is from an API version higher than that of the device, or from a device-level extension that is not supported by the device.
+In order to query a format's support, applications must first query the relevant extension/version/feature beforehand, complicating format queries.
+
+=== A vkGetRenderAreaGranularity equivalent for dynamic rendering
+
+Some tile-based GPUs can benefit from providing an optimal render area granularity as the basis for a performance hint.
+
+=== vkGetDeviceProcAddr to return NULL for functions beyond app version
+
+Existing implementations have different behaviour when returning function pointers from `vkGetDeviceProcAddr()`
+for supported core functions of versions greater than than the version requested by the application.
+
+=== Add vkCmdBindIndexBuffer2KHR with a size parameter
+
+With `vkCmdBindIndexBuffer`, it is not possible to communicate the size of the subrange buffer used as index data.
+Robustness therefore operates on the size of the underlying buffer, which may be larger than the subrange that contains index data.
+A new function can be introduced to add the necessary size information for robustness.
+
+=== Multisample coverage operations and sample counting property
+
+Some hardware performs sample counting after multisample coverage operations when the EarlyFragmentTests execution mode is declared in a pixel shader, but the specification says "If the fragment shader declares the EarlyFragmentTests execution mode, fragment shading and multisample coverage operations are instead performed after sample counting."
+
+=== VK_REMAINING_ARRAY_LAYERS for VkImageSubresourceLayers.layerCount
+
+`layerCount` in `VkImageSubresourceLayers` unintentionally does not support `VK_REMAINING_ARRAY_LAYERS`.
+
+=== VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2
+
+`pSizes` in `vkCmdBindVertexBuffers2` unintentionally does not support `VK_WHOLE_SIZE`.
+
+=== vkGetImageSubresourceLayout query without having to create a dummy image
+
+There is a potential implementation overhead when querying the subresource layout of an image due to object creation.  This overhead could be reduced by a function that works in a similar way to `vkGetDeviceImageMemoryRequirements()` which uses the image creation properties, rather than an image object, to perform the query.
+
+=== Reliable/deterministic way to detect device loss
+
+All existing entrypoints that are capable of returning
+ename:VK_ERROR_DEVICE_LOST have some form of exemption or
+special-case allowing for other return values to be returned even when a device
+is irrecoverably lost. These exemptions are all necessary due to the
+asynchronous nature of device-loss detection, but this makes it difficult for
+application developers to reason about how to reliably detect device-loss.
+
+=== Lack of available flag bits
+
+Both `VkPipelineCreateFlagBits` and `VkBufferCreateFlagBits` are running out of available bits for new extensions.
+
+=== Sample mask test and sample counting property
+
+The specification says "If the fragment shader declares the EarlyFragmentTests
+execution mode, fragment shading and multisample coverage operations are instead
+performed after sample counting", but some hardware performs the sample mask test
+after sample counting operations when the EarlyFragmentTests execution mode is
+declared in a pixel shader.
+
+=== Deprecation of VkShaderModule
+
+Shader modules are transient objects used to create pipelines,
+originally put in the Vulkan API to enable pre-compilation of
+SPIR-V to reduce duplicated work at pipeline creation.
+
+In practice though, few implementations do anything useful with these objects, and they
+end up just being an unnecessary copy and a waste of memory while they
+exist.
+They also are yet another object for applications to manage, which is
+development overhead that would be useful to remove.
+
+Solutions here should have the following properties:
+
+  * Not require object creation
+  * Allow shader code to be passed directly from application memory to the pipeline
+    creation
+  * Be as simple as possible
+
+link:{refpage}VK_EXT_graphics_pipeline_library.html[VK_EXT_graphics_pipeline_library]
+already introduced a simple way to do this, which is adopted by this
+extension.
+
+=== A8_UNORM format ===
+
+This provides direct compatibility with D3D11 and D3D12 for layering.
+
+=== Relax VkBufferView creation requirement
+
+Some users of the Vulkan API (for example, OpenGL API emulation libraries) have a
+hard time figuring out in advance how one of their VkBuffer objects is going to be
+used with VkBufferView. Relaxing the requirement that the VkBufferView format is
+supported for all the usages of the VkBuffer would help.
+
+=== Appearance when using VK_POLYGON_MODE_POINT together with PointSize
+
+Some hardware does not take point size into account when rasterizing polygons with VK_POLYGON_MODE_POINT.
+
+=== Copying between different image types
+
+Copies between different image types other than between 2D and 3D is unclear, and untested. This flexibility is useful for some applications.
+
+=== Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats ===
+
+Some implementations have undefined results when SWIZZLE_ONE is used with a depth-stencil format, so the default Vulkan behavior in this case is undefined.
+For many implementations this combination _is_ defined, however, so it is useful to be able to determine programmatically when that is the case.
+
+== Proposal
+
+Items introduced by this extension are:
+
+=== Default PointSize of 1.0
+
+Points now take a default size of 1.0 if the `PointSize` builtin is not written.
+
+=== Indication of parallelogram or Bresenham non-strict lines
+
+Two new properties are added:
+
+ - `nonStrictSinglePixelWideLinesUseParallelogram` reports the rasterization algorithm used for lines of width 1.0
+ - `nonStrictWideLinesUseParallelogram` reports the rasterization algorithm used for lines of width greater than 1.0
+
+=== A1B5G5R5 format
+
+An optional format VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR is added.
+
+=== vkGetPhysicalDeviceFormatProperties with unknown formats
+
+Physical-device-level functions can now be called with any value in the valid range for a type beyond the defined enumerants, such that applications can avoid checking individual features, extensions, or versions before querying supported properties of a particular enumerant.
+
+=== A vkGetRenderAreaGranularity equivalent for dynamic rendering
+
+A new function provides the ability to query the implementation's preferred
+render area granularity for a render pass instance:
+
+[source,c]
+----
+void vkGetRenderingAreaGranularityKHR(
+    VkDevice                                    device,
+    const VkRenderingAreaInfoKHR*               pRenderingAreaInfo,
+    VkExtent2D*                                 pGranularity);
+----
+
+=== vkGetDeviceProcAddr to return NULL for functions beyond app version
+
+The specification has been changed to require `vkGetDeviceProcAddr()` to return `NULL` for supported core functions beyond the version requested by the application.
+
+=== Add vkCmdBindIndexBuffer2KHR with a size parameter
+
+A new entry point `vkCmdBindIndexBuffer2KHR` is added:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkDeviceSize                                size,
+    VkIndexType                                 indexType);
+----
+
+=== Multisample coverage operations and sample counting property
+
+A new `earlyFragmentMultisampleCoverageAfterSampleCounting` property is added.
+
+=== VK_REMAINING_ARRAY_LAYERS for VkImageSubresourceLayers.layerCount
+
+Support for using `VK_REMAINING_ARRAY_LAYERS` as the `layerCount` member of `VkImageSubresourceLayers` is added.
+
+=== VK_WHOLE_SIZE for pSizes argument of vkCmdBindVertexBuffers2
+
+Support for using `VK_WHOLE_SIZE` in the `pSizes` parameter of `vkCmdBindVertexBuffers2` is added.
+
+=== vkGetImageSubresourceLayout query without having to create a dummy image
+
+A new `vkGetDeviceImageSubresourceLayoutKHR` function provides the ability to query the subresource layout for an image without requiring an image object, and a KHR version of `vkGetImageSubresourceLayout2EXT`:
+
+[source,c]
+----
+
+typedef struct VkImageSubresource2KHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkImageSubresource    imageSubresource;
+} VkImageSubresource2KHR;
+
+typedef struct VkSubresourceLayout2KHR {
+    VkStructureType        sType;
+    void*                  pNext;
+    VkSubresourceLayout    subresourceLayout;
+} VkSubresourceLayout2KHR;
+
+typedef VkSubresourceLayout2KHR VkSubresourceLayout2EXT;
+typedef VkImageSubresource2KHR VkImageSubresource2EXT;
+
+typedef struct VkDeviceImageSubresourceInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    const VkImageCreateInfo*         pCreateInfo;
+    const VkImageSubresource2KHR*    pSubresource;
+} VkDeviceImageSubresourceInfoKHR;
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR(
+    VkDevice                                    device,
+    const VkDeviceImageSubresourceInfoKHR*      pInfo,
+    VkSubresourceLayout2KHR*                    pLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkImageSubresource2KHR*               pSubresource,
+    VkSubresourceLayout2KHR*                    pLayout);
+----
+
+=== Reliable/deterministic way to detect device loss
+
+Following device-loss, entrypoints that may return `VK_ERROR_DEVICE_LOST` do so
+in a more consistent manner.
+
+=== Lack of available flag bits
+
+Two new flags words are added, along with structures to use them: 
+
+* `VkPipelineCreateFlagBits2KHR` and `VkPipelineCreateFlags2CreateInfoKHR`
+* `VkBufferUsageFlagBits2KHR` and `VkBufferUsageFlags2CreateInfoKHR`
+
+=== Sample mask test and sample counting property
+
+A new `earlyFragmentSampleMaskTestBeforeSampleCounting` property is added.
+
+=== Deprecating Shader Modules
+
+Shader modules are deprecated by allowing
+link:{refpage}VkShaderModuleCreateInfo.html[VkShaderModuleCreateInfo] to be
+chained to
+link:{refpage}VkPipelineShaderStageCreateInfo.html[VkPipelineShaderStageCreateInfo],
+and allowing the link:{refpage}VkShaderModule.html[VkShaderModule] to be
+link:{refpage}VK_NULL_HANDLE.html[VK_NULL_HANDLE] in this case.
+Shader modules are not being removed, but it is recommended to not use them in order to save memory and avoid unnecessary copies.
+
+For example, where previously an application would have to create a shader
+module, it can now simply do this:
+
+[source,c]
+----
+VkShaderModuleCreateInfo computeShader = {
+    .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
+    .pNext = NULL,
+    .flags = 0,
+    .codeSize = ...,
+    .pCode = ... };
+
+VkComputePipelineCreateInfo computePipeline = {
+    .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
+    .pNext = NULL,
+    .flags = 0,
+    .stage = {
+        .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+        .pNext = &computeShader,
+        .flags = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT | VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT,
+        .stage = VK_SHADER_STAGE_COMPUTE_BIT,
+        .module = VK_NULL_HANDLE,
+        .pName = ...,
+        .pSpecializationInfo = ... },
+    .layout = ...,
+    .basePipelineHandle = 0,
+    .basePipelineIndex = 0 };
+----
+
+=== A8_UNORM format
+
+An optional format VK_FORMAT_A8_UNORM_KHR is added.
+
+=== Relax VkBufferView creation requirement
+
+Use the new `VkBufferUsageFlags2CreateInfoKHR` structure chained
+into the `pNext` of `VkBufferViewCreateInfo` to specify a
+subset of usage of the associated `VkBuffer`.
+
+=== Appearance when using VK_POLYGON_MODE_POINT together with PointSize
+
+A new `polygonModePointSize` property is added.
+
+=== Copying between different image types
+
+Allow copies between different image types, treating 1D images as 2D images
+with a height of 1.
+
+=== Need a way to indicate when SWIZZLE_ONE has defined results when used with depth-stencil formats ===
+
+Introduce a `depthStencilSwizzleOneSupport`
+property which an implementation should expose to indicate that this
+behavior is defined.
+
+== Issues
+
+None.
+
+
+== Further Functionality
+
+None.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_map_memory2.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_map_memory2.adoc
new file mode 100644
index 0000000..8906880
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_map_memory2.adoc
@@ -0,0 +1,76 @@
+// Copyright 2023 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_KHR_map_memory2
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document proposes adding extensible version of `vkMapMemory()` and
+`vkUnmapMemory()`.
+
+## Problem Statement
+
+The current Vulkan memory mapping entrypoints are not extensible in the
+usual sense.
+`vkMapMemory()` does have a flags argument which is currently unused, but
+neither `vkMapMemory()` nor `vkUnmapMemory()` take an input struct with a
+`pNext` which can be extended.
+
+## Proposal
+
+Add new `vkMapMemory2KHR()` and `vkUnmapMemory2KHR()` entrypoints which
+take input structs which are extensible via the usual `pNext` mechanism:
+[source,c]
+----
+typedef struct VkMemoryMapInfoKHR {
+    VkStructureType     sType;
+    const void*         pNext;
+    VkMemoryMapFlags    flags;
+    VkDeviceMemory      memory;
+    VkDeviceSize        offset;
+    VkDeviceSize        size;
+} VkMemoryMapInfoKHR;
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR(
+    VkDevice                                    device,
+    const VkMemoryMapInfoKHR*                   pMemoryMapInfo,
+    void**                                      ppData);
+
+typedef struct VkMemoryUnmapInfoKHR {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkMemoryUnmapFlagsKHR    flags;
+    VkDeviceMemory           memory;
+} VkMemoryUnmapInfoKHR;
+
+VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR(
+    VkDevice                                    device,
+    const VkMemoryUnmapInfoKHR*                 pMemoryUnmapInfo);
+----
+
+While we are at it, two additional changes are made to `vkUnmapMemory()`
+which may be used by upcoming extensions:
+
+ 1. It is given a new `VkMemoryUnmapFlagsKHR flags` parameter.  As with
+    `VkMemoryMapFlags`, it is currently unused.
+
+ 2. It gets a `VkResult` return value.  Currently, it is required to always
+    return `VK_SUCCESS`.  However, VK_KHR_map_memory_placed will add cases
+    in which unmap can fail.  As long as that extension is not used,
+    clients are free to ignore the return value as it will always be
+    required to be `VK_SUCCESS`.
+
+### API Features
+
+This extension has no independent features
+
+## Issues
+
+1) Should we do further reworks of the memory mapping API?
+
+*PROPOSED*: No, further reworks are out-of-scope for this extension.  It is
+intended to solve the extensibility problem to enable new functionality,
+not add functionality itself.  In that sense, it is similar to
+VK_KHR_get_physical_device_properties2 or VK_KHR_copy_commands2.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_ray_tracing_position_fetch.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_ray_tracing_position_fetch.adoc
new file mode 100644
index 0000000..b6367e7
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_ray_tracing_position_fetch.adoc
@@ -0,0 +1,128 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_ray_tracing_position_fetch
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details the VK_KHR_ray_tracing_position_fetch extension which exposes the ability to fetch vertex positions from an acceleration structure hit when ray tracing. 
+
+== Problem Statement
+
+Acceleration structures used in ray tracing have the position of the geometry provided to them and have to have at least some derived form of the position encoded in them.
+Applications frequently need to know the position or derived attribute of the triangle on a hit, so it is desirable to be able to share that information to avoid duplication.
+One of the derived attributes that is of particular interest is the normal of the hit. 
+
+== Solution Space
+
+Options considered:
+
+- Expose the normal (potentially compressed) of the triangle at the hit
+- Expose the positions of the triangle at the hit
+
+Exposing the normal is only beneficial for an implementation that cannot expose the positions encoded in the acceleration structure, which seems to be a rare case.
+Exposing the positions of the triangle is more general and the application can easily compute the normal itself.
+
+We choose the latter.
+
+== Proposal
+
+=== New SPIR-V decorations
+
+A new SPIR-V extension https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing_position_fetch.html[SPV_KHR_ray_tracing_position_fetch]
+adds one ray pipeline shader variable decoration:
+  
+    * `HitTriangleVertexPositionsKHR` which indicates a builtin which contains the vertex position values for a triangle hit in any-hit or closest hit shaders
+
+=== New SPIR-V instructions
+
+A new SPIR-V extension https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing_position_fetch.html[SPV_KHR_ray_tracing_position_fetch]
+adds one shader instruction:
+  
+    * `OpRayQueryGetIntersectionTriangleVertexPositionsKHR` which returns the vertex position values for a triangle hit when using ray query
+
+=== New Acceleration structure build flag
+
+    * `VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR` on an acceleration structure indicates that an application wants to be able to read the data from that acceleration structure
+
+=== GLSL mapping
+
+The GLSL functionality is defined in https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_ray_tracing_position_fetch.txt[GLSL_EXT_ray_tracing_position_fetch].
+
+      gl_HitVertexTrianglePositionsEXT -> HitTriangleVertexPositionsKHR decorated OpVariable
+
+      rayQueryGetIntersectionTriangleVertexPositionsEXT -> OpRayQueryGetIntersectionTriangleVertexPositionsKHR instruction
+
+
+=== HLSL mapping
+
+HLSL does not provide this functionality natively yet.
+
+However, it is possible to use this functionality via
+https://github.com/microsoft/DirectXShaderCompiler/wiki/GL_EXT_spirv_intrinsics-for-SPIR-V-code-gen[SPIR-V Intrinsics].
+
+The SPIR-V values for ray tracing position fetch are obtained from
+https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing_position_fetch.html[SPV_KHR_ray_tracing_position_fetch].
+
+==== Ray Pipelines
+In the core HLSL, add the following:
+
+[source,c]
+----
+#define BuiltIn 11
+#define RayTracingPositionFetchKHR 5336
+#define HitTriangleVertexPositionsKHR 5335
+
+[[vk::ext_capability(RayTracingPositionFetchKHR)]]
+[[vk::ext_extension("SPV_KHR_ray_tracing_position_fetch")]]
+----
+
+In the function to access the data:
+
+[source,c]
+----
+  // Adding access to the vertex positions stored in the acceleration structure.
+  [[vk::ext_decorate(BuiltIn, HitTriangleVertexPositionsKHR)]]
+  float3 HitTriangleVertexPositions[3];
+----
+
+==== Ray Queries
+In the core HLSL, add the following:
+
+[source,c]
+----
+#define RayQueryPositionFetchKHR 5391
+#define OpRayQueryGetIntersectionTriangleVertexPositionsKHR 5340
+#define RayQueryCandidateIntersectionKHR 0
+#define RayQueryCommittedIntersectionKHR 1
+
+[[vk::ext_capability(RayQueryPositionFetchKHR)]]
+[[vk::ext_extension("SPV_KHR_ray_tracing_position_fetch")]]
+
+[[vk::ext_instruction(OpRayQueryGetIntersectionTriangleVertexPositionsKHR)]]
+float3 RayQueryGetIntersectionTriangleVertexPositionsKHR(
+  [[vk::ext_reference]] RayQuery<RAY_FLAG_FORCE_OPAQUE> query,
+  int committed)[3];
+----
+
+Then to use this new instruction:
+
+[source,c]
+----
+  RayQuery < RAY_FLAG_FORCE_OPAQUE > q;
+  q.TraceRayInline(topLevelAS, RAY_FLAG_NONE, 0xFF, ray);
+  q.Proceed();
+...
+
+  float3 positions[3] = RayQueryGetIntersectionTriangleVertexPositionsKHR(q, RayQueryCommittedIntersectionKHR);
+----
+
+== Issues
+
+None.
+
+== Further Functionality
+
+None.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_shader_integer_dot_product.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_shader_integer_dot_product.adoc
new file mode 100644
index 0000000..a81eaf1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_shader_integer_dot_product.adoc
@@ -0,0 +1,130 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_shader_integer_dot_product
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes adding support for shader integer dot product instructions.
+
+== Problem Statement
+
+Dot product operations between vectors of integer values are used heavily in machine learning algorithms, acting as a fairly fundamental building block.
+When running machine learning algorithms in Vulkan, these have to be emulated using other integer operations; however many implementations have dedicated fast paths for these operations.
+
+An additional problem is that there is no clear common subset of accelerated dot product operations between vendors - making standardising on a solution somewhat tricky.
+
+This proposal aims to enable these fast paths for machine learning algorithms with minimal difficulty.
+
+
+== Solution Space
+
+There are two main ways in which applications could gain access to these fast paths:
+
+ . Rely on compiler pattern matching to optimise standard integer operations into dot products
+ . Add dedicated dot product operations
+
+The first of those is more or less a "do nothing" approach and puts a burden on implementations to detect these cases, with variable success rates.
+Adding dedicated dot product operations is less error prone, but does mean machine learning content needs to be updated to use these new operations.
+In the long run, the latter is likely to be much more reliable for new applications - so this proposal aims to add new operations.
+
+The question then becomes _which_ dedicated dot product operations should be exposed if there is no common subset of accelerated operations.
+Choices become:
+
+ . Multiple extensions advertising different operations
+ . One extension with the superset of operations but make them all optional
+ . One extension with all operations available, emulating those that are not accelerated
+
+Most existing ML backends targeting SPIR-V compile to SPIR-V once and expect the code to work everywhere within their target market - they will pick a single expression of the ML operations at the macro level and compile to that.
+To run this code everywhere, only option 3 works directly - the only option faced with 1 or 2 would be to emulate the functions as they do today, perhaps picking up optimisations in extreme cases only.
+
+Newer backends such as those using https://www.tensorflow.org/mlir[MLIR] are looking at generating platform-specific optimised IR, which can be done in part by expressing the macro-level operations differently.
+Backends like this could use information about the accelerated operations to determine which SPIR-V operations to target, and thus 1 and 2 are well suited to this.
+Option 3 would also work but would need additional information in order to make optimisation decisions.
+
+In order to satisfy both of these types of backends, this proposal works along the lines of option 3, while providing platform-specific information to allow optimising compilers to make useful choices.
+
+
+== Proposal
+
+=== API Features
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderIntegerDotProduct;
+} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+----
+
+`shaderIntegerDotProduct` is the core feature enabling this extension's functionality.
+
+
+=== API Properties
+
+The following features are exposed by this extension:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           integerDotProduct8BitUnsignedAccelerated;
+    VkBool32           integerDotProduct8BitSignedAccelerated;
+    VkBool32           integerDotProduct8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProduct16BitUnsignedAccelerated;
+    VkBool32           integerDotProduct16BitSignedAccelerated;
+    VkBool32           integerDotProduct16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct32BitUnsignedAccelerated;
+    VkBool32           integerDotProduct32BitSignedAccelerated;
+    VkBool32           integerDotProduct32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct64BitUnsignedAccelerated;
+    VkBool32           integerDotProduct64BitSignedAccelerated;
+    VkBool32           integerDotProduct64BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+} VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+----
+
+Each of these properties is a boolean that will be ename:VK_TRUE if the implementation provides a performance advantage for the corresponding SPIR-V instruction, over application-provided code composed from elementary instructions and/or other dot product instructions.
+This could be either because the implementation uses optimized machine code sequences whose generation from application-provided code cannot be guaranteed or because it uses hardware features that cannot otherwise be targeted from application-provided code.
+
+[NOTE]
+---
+Properties are written as `integerDotProduct<AccumulatingSaturating>{type bitwidth}{Unsigned|Signed|MixedSignedness}Accelerated`.
+Each property corresponds to a SPIR-V opcode of the form `Op{U|S|SU}Dot<AccSat>KHR`, as defined in SPIR-V extension SPV_KHR_integer_dot_product.
+The `<AccumulatingSaturating>` portion of the property corresponds to the `AccSat` instruction variants.
+The type bitwidth refers to the size of the input vectors and whether it is a packed format or not.
+`{Unsigned|Signed|MixedSignedness}` in the property correspond to `{U|S|SU}` in the instruction name.
+---
+
+=== SPIR-V Changes
+
+This proposal uses an existing SPIR-V extension: https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_integer_dot_product.html[SPV_KHR_integer_dot_product].
+
+
+== Examples
+
+TODO
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h264.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h264.adoc
new file mode 100644
index 0000000..ab3480b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h264.adoc
@@ -0,0 +1,532 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_video_decode_h264
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to enable performing H.264/AVC video decode operations in Vulkan.
+
+== Problem Statement
+
+The `VK_KHR_video_queue` extension introduces support for video coding operations and the `VK_KHR_video_decode_queue` extension further extends this with APIs specific to video decoding.
+
+The goal of this proposal is to build upon this infrastructure to introduce support for decoding elementary video stream sequences compliant with the H.264/AVC video compression standard.
+
+
+== Solution Space
+
+As the `VK_KHR_video_queue` and `VK_KHR_video_decode_queue` extensions already laid down the architecture for how codec-specific video decode extensions need to be designed, this extension only needs to define the APIs to provide the necessary codec-specific parameters at various points during the use of the codec-independent APIs. In particular:
+
+  * APIs allowing to specify H.264 sequence and picture parameter sets (SPS, PPS) to be stored in video session parameters objects
+  * APIs allowing to specify H.264 information specific to the decoded picture, including references to previously stored SPS and PPS entries
+  * APIs allowing to specify H.264 reference picture information specific to the active reference pictures and optional reconstructed picture used in video decode operations
+
+The following options have been considered to choose the structure of these definitions:
+
+  1. Allow specifying packed codec-specific data to the APIs in the form they appear in bitstreams
+  2. Specify codec-specific parameters through custom type definitions that the application can populate after parsing the corresponding data elements in the bitstreams
+
+Option (1) would allow for a simpler API, but it requires implementations to include an appropriate parser for these data elements. As decoding applications typically parse these data elements for other reasons anyway, this proposal choses option (2) to enable the application to provide the needed parameters through custom definitions provided by a video std header dedicated to H.264 video decoding.
+
+The following additional options have been considered to choose the way this video std header is defined:
+
+  1. Include all definitions in this H.264 video decode std header
+  2. Add a separate video std header that includes H.264 parameter definitions that can be shared across video decoding and video encoding use cases that the H.264 video decode std header depends on, and only include decode-specific definitions in the H.264 video decode std header
+
+Both options are reasonable, however, as the H.264 video decoding and H.264 video encoding functionalities were designed in parallel, this extension uses option (2) and introduces the following new video std headers:
+
+  * `vulkan_video_codec_h264std` - containing common definitions for all H.264 video coding operations
+  * `vulkan_video_codec_h264std_decode` - containing definitions specific to H.264 video decoding operations
+
+These headers can be included as follows:
+
+[source,c]
+----
+#include <vk_video/vulkan_video_codec_h264std.h>
+#include <vk_video/vulkan_video_codec_h264std_decode.h>
+----
+
+
+== Proposal
+
+=== Video Std Headers
+
+This extension uses the new `vulkan_video_codec_h264std_decode` video std header. Implementations must always support at least version 1.0.0 of this video std header.
+
+
+=== H.264 Decode Profiles
+
+This extension introduces the new video codec operation `VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR`. This flag can be used to check whether a particular queue family supports decoding H.264/AVC content, as returned in `VkQueueFamilyVideoPropertiesKHR`.
+
+An H.264 decode profile can be defined through a `VkVideoProfileInfoKHR` structure using this new video codec operation and by including the following new codec-specific profile information structure in the `pNext` chain:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264ProfileInfoKHR {
+    VkStructureType                              sType;
+    const void*                                  pNext;
+    StdVideoH264ProfileIdc                       stdProfileIdc;
+    VkVideoDecodeH264PictureLayoutFlagBitsKHR    pictureLayout;
+} VkVideoDecodeH264ProfileInfoKHR;
+----
+
+`stdProfileIdc` specifies the H.264 profile indicator, while `pictureLayout` provides information about the representation of pictures usable with a video session created with such a video profile, and takes its value from the following new flag bit type:
+
+[source,c]
+----
+typedef enum VkVideoDecodeH264PictureLayoutFlagBitsKHR {
+    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR = 0,
+    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR = 0x00000001,
+    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR = 0x00000002,
+    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoDecodeH264PictureLayoutFlagBitsKHR;
+----
+
+If `pictureLayout` is zero (`VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR`), then the video profile only allows producing and consuming progressive frames. Otherwise, it also supports interlaced frames, and the individual bits indicate the way individual fields of such interlaced frames are represented within the images backing the video picture resources. In particular:
+
+  * `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR` indicates that the top and bottom fields are stored interleaved across the scanlines of the video picture resources, with all lines belonging to the top field being stored at even-numbered lines within the picture resource, and all lines belonging to the bottom field being stored at odd-numbered lines within the picture resource.
+  * `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR` indicates that the top and bottom fields are stored separately, i.e. all lines belonging to a field are grouped together in a single image subregion. The two fields comprising the frame thus can be stored in separate image subregions of the same image subresource or in separate image subresources.
+
+It is expected that most implementations will at least support the `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR` picture layout, but support for any particular interlaced picture layout is not mandatory. Applications need to verify support for individual H.264 decode profiles specifying particular picture layouts using the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command. The `VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR` error code indicates that the chosen picture layout is not supported by the implementation.
+
+
+=== H.264 Decode Capabilities
+
+Applications need to include the following new structure in the `pNext` chain of `VkVideoCapabilitiesKHR` when calling the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command to retrieve the capabilities specific to H.264 video decoding:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264CapabilitiesKHR {
+    VkStructureType         sType;
+    void*                   pNext;
+    StdVideoH264LevelIdc    maxLevelIdc;
+    VkOffset2D              fieldOffsetGranularity;
+} VkVideoDecodeH264CapabilitiesKHR;
+----
+
+`maxLevelIdc` indicates the maximum supported H.264 level indicator, while `fieldOffsetGranularity` indicates the alignment requirements of the `codedOffset` values specified for video picture resources when using the `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR` picture layout.
+
+
+=== H.264 Decode Parameter Sets
+
+The use of video session parameters objects is mandatory when decoding H.264 video streams. Applications need to include the following new structure in the `pNext` chain of `VkVideoSessionParametersCreateInfoKHR` when creating video session parameters objects for H.264 decode use, to specify the parameter set capacity of the created objects:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264SessionParametersCreateInfoKHR {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    uint32_t                                               maxStdSPSCount;
+    uint32_t                                               maxStdPPSCount;
+    const VkVideoDecodeH264SessionParametersAddInfoKHR*    pParametersAddInfo;
+} VkVideoDecodeH264SessionParametersCreateInfoKHR;
+----
+
+The optional `pParametersAddInfo` member also allows specifying an initial set of parameter sets to add to the created object:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264SessionParametersAddInfoKHR {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   stdSPSCount;
+    const StdVideoH264SequenceParameterSet*    pStdSPSs;
+    uint32_t                                   stdPPSCount;
+    const StdVideoH264PictureParameterSet*     pStdPPSs;
+} VkVideoDecodeH264SessionParametersAddInfoKHR;
+----
+
+This structure can also be included in the `pNext` chain of `VkVideoSessionParametersUpdateInfoKHR` used in video session parameters update operations to add further parameter sets to an object after its creation.
+
+Individual parameter sets are stored using parameter set IDs as their keys, specifically:
+
+  * H.264 SPS entries are identified using a `seq_parameter_set_id` value
+  * H.264 PPS entries are identified using a pair of `seq_parameter_set_id` and `pic_parameter_set_id` values
+
+The H.264/AVC video compression standard always requires an SPS and PPS, hence the application has to add an instance of each parameter set to the used parameters object before being able to record video decode operations.
+
+Furthermore, the H.264/AVC video compression standard also allows modifying existing parameter sets, but as parameters already stored in video session parameters objects cannot be changed in Vulkan, the application has to create new parameters objects in such cases, as described in the proposal for `VK_KHR_video_queue`.
+
+
+=== H.264 Decoding Parameters
+
+Decode parameters specific to H.264 need to be provided by the application through the `pNext` chain of `VkVideoDecodeInfoKHR`, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264PictureInfoKHR {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    const StdVideoDecodeH264PictureInfo*    pStdPictureInfo;
+    uint32_t                                sliceCount;
+    const uint32_t*                         pSliceOffsets;
+} VkVideoDecodeH264PictureInfoKHR;
+----
+
+`pStdPictureInfo` points to the codec-specific decode parameters defined in the `vulkan_video_codec_h264std_decode` video std header, while the `pSliceOffsets` array contains the relative offset of individual slices of the picture within the video bitstream range used by the video decode operation.
+
+Specific flags within the codec-specific decode parameters are used to determine whether the picture to be decoded is a frame or a field, according to the table below:
+
+|===
+| **field_pic_flag** | **bottom_field_flag** | **frame / field**
+| 0 | _ignored_ | frame
+| 1 | 0 | top field
+| 1 | 1 | bottom field
+|===
+
+The active SPS and PPS (sourced from the bound video session parameters object) are identified by the `seq_parameter_set_id` and `pic_parameter_set_id` parameters.
+
+Picture information specific to H.264 for the active reference pictures and the optional reconstructed picture need to be provided by the application through the `pNext` chain of corresponding elements of `VkVideoDecodeInfoKHR::pReferenceSlots` and the `pNext` chain of `VkVideoDecodeInfoKHR::pSetupReferenceSlot`, respectively, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH264DpbSlotInfoKHR {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    const StdVideoDecodeH264ReferenceInfo*    pStdReferenceInfo;
+} VkVideoDecodeH264DpbSlotInfoKHR;
+----
+
+`pStdReferenceInfo` points to the codec-specific reference picture parameters defined in the `vulkan_video_codec_h264std_decode` video std header.
+
+Specific flags within the codec-specific reference picture parameters are used to determined whether the picture is a frame or a field, according to the table below:
+
+|===
+| **top_field_flag** | **bottom_field_flag** | **frame / field**
+| 0 | 0 | frame
+| 1 | 0 | top field
+| 0 | 1 | bottom field
+| 1 | 1 | both fields (for active reference pictures only)
+|===
+
+The ability to specify both fields is specific to the list of active reference pictures provided in `VkVideoDecodeInfo::pReferenceSlots` and is needed to allow the application to use both fields of an interlaced frame when the two fields are stored in the same video picture resource, which happens when using the `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR` picture layout. As a consequence, the value of `VkVideoDecodeInfo::referenceSlotCount` is not always indicative of the total number of active reference pictures used by a video decode operation, as a single element of `pReferenceSlots` may refer to two reference pictures in this case.
+
+It is the application's responsibility to specify video bitstream buffer data and codec-specific parameters that are compliant to the rules defined by the H.264/AVC video compression standard. While it is not illegal, from the API usage's point of view, to specify non-compliant inputs, they may cause the video decode operation to complete unsuccessfully and will cause the output pictures (decode output and reconstructed pictures) to have undefined contents after the execution of the operation.
+
+For more information about how to parse individual H.264 bitstream syntax elements, calculate derived values, and, in general, how to interpret these parameters, please refer to the corresponding sections of the https://www.itu.int/rec/T-REC-H.264-202108-I/[ITU-T H.264 Specification].
+
+
+== Examples
+
+=== Select queue family with H.264 decode support
+
+[source,c]
+----
+uint32_t queueFamilyIndex;
+uint32_t queueFamilyCount;
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, NULL);
+
+VkQueueFamilyProperties2* props = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyProperties2));
+VkQueueFamilyVideoPropertiesKHR* videoProps = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyVideoPropertiesKHR));
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    props[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+    props[queueFamilyIndex].pNext = &videoProps[queueFamilyIndex];
+
+    videoProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, props);
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    if ((props[queueFamilyIndex].queueFamilyProperties.queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) != 0 &&
+        (videoProps[queueFamilyIndex].videoCodecOperations & VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR) != 0) {
+        break;
+    }
+}
+
+if (queueFamilyIndex < queueFamilyCount) {
+    // Found appropriate queue family
+    ...
+} else {
+    // Did not find a queue family with the needed capabilities
+    ...
+}
+----
+
+
+=== Check support and query the capabilities for an H.264 decode profile
+
+[source,c]
+----
+VkResult result;
+
+VkVideoDecodeH264ProfileInfoKHR decodeH264ProfileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR,
+    .pNext = NULL,
+    .stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_BASELINE,
+    .pictureLayout = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR
+};
+
+VkVideoProfileInfoKHR profileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,
+    .pNext = &decodeH264ProfileInfo,
+    .videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
+    .chromaSubsampling = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
+    .lumaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
+    .chromaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR
+};
+
+VkVideoDecodeH264CapabilitiesKHR decodeH264Capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR,
+    .pNext = NULL,
+};
+
+VkVideoDecodeCapabilitiesKHR decodeCapabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR,
+    .pNext = &decodeH264Capabilities
+}
+
+VkVideoCapabilitiesKHR capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+    .pNext = &decodeCapabilities
+};
+
+result = vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &profileInfo, &capabilities);
+
+if (result == VK_SUCCESS) {
+    // Profile is supported, check additional capabilities
+    ...
+} else {
+    // Profile is not supported, result provides additional information about why
+    ...
+}
+----
+
+=== Create and update H.264 video session parameters objects
+
+[source,c]
+----
+VkVideoSessionParametersKHR videoSessionParams = VK_NULL_HANDLE;
+
+VkVideoDecodeH264SessionParametersCreateInfoKHR decodeH264CreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR,
+    .pNext = NULL,
+    .maxStdSPSCount = ... // SPS capacity
+    .maxStdPPSCount = ... // PPS capacity
+    .pParametersAddInfo = ... // parameters to add at creation time or NULL
+};
+
+VkVideoSessionParametersCreateInfoKHR createInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
+    .pNext = &decodeH264CreateInfo,
+    .flags = 0,
+    .videoSessionParametersTemplate = ... // template to use or VK_NULL_HANDLE
+    .videoSession = videoSession
+};
+
+vkCreateVideoSessionParametersKHR(device, &createInfo, NULL, &videoSessionParams);
+
+...
+
+StdVideoH264SequenceParameterSet sps = {};
+// parse and populate SPS parameters
+...
+
+StdVideoH264PictureParameterSet pps = {};
+// parse and populate PPS parameters
+...
+
+VkVideoDecodeH264SessionParametersAddInfoKHR decodeH264AddInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR,
+    .pNext = NULL,
+    .stdSPSCount = 1,
+    .pStdSPSs = &sps,
+    .stdPPSCount = 1,
+    .pStdPPSs = &pps
+};
+
+VkVideoSessionParametersUpdateInfoKHR updateInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR,
+    .pNext = &decodeH264AddInfo,
+    .updateSequenceCount = 1 // incremented for each subsequent update
+};
+
+vkUpdateVideoSessionParametersKHR(device, &videoSessionParams, &updateInfo);
+----
+
+
+=== Record H.264 decode operation (without reconstructed picture setup or reference pictures)
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH264PictureInfo stdPictureInfo = {};
+// parse and populate picture info from slice header data
+...
+
+VkVideoDecodeH264PictureInfoKHR decodeH264PictureInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR,
+    .pNext = NULL,
+    .pStdPictureInfo = &stdPictureInfo,
+    .sliceCount = ... // number of slices
+    .pSliceOffsets = ... // array of slice offsets relative to the bitstream buffer range
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = &decodeH264PictureInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record H.264 decode operation with reconstructed picture setup
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH264ReferenceInfo stdReferenceInfo = {};
+// parse and populate reconstructed reference picture info from slice header data
+...
+
+VkVideoDecodeH264DpbSlotInfoKHR decodeH264DpbSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR,
+    .pNext = NULL,
+    .pStdReferenceInfo = &stdReferenceInfo
+};
+
+VkVideoReferenceSlotInfoKHR setupSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+    .pNext = &decodeH264DpbSlotInfo
+    ...
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    ...
+    .pSetupReferenceSlot = &setupSlotInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record H.264 decode operation with reference picture list
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH264ReferenceInfo stdReferenceInfo[] = {};
+// populate reference picture info for each active reference picture
+...
+
+VkVideoDecodeH264DpbSlotInfoKHR decodeH264DpbSlotInfo[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR,
+        .pNext = NULL,
+        .pStdReferenceInfo = &stdReferenceInfo[0]
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR,
+        .pNext = NULL,
+        .pStdReferenceInfo = &stdReferenceInfo[1]
+    },
+    ...
+};
+
+
+VkVideoReferenceSlotInfoKHR referenceSlotInfo[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = &decodeH264DpbSlotInfo[0],
+        ...
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = &decodeH264DpbSlotInfo[1],
+        ...
+    },
+    ...
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    ...
+    .referenceSlotCount = sizeof(referenceSlotInfo) / sizeof(referenceSlotInfo[0]),
+    .pReferenceSlots = &referenceSlotInfo[0]
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+== Issues
+
+=== RESOLVED: In what form should codec-specific parameters be provided?
+
+In the form of structures defined by the `vulkan_video_codec_h264std_decode` and `vulkan_video_codec_h264std` video std headers. Applications are responsible to parse parameter sets and slice header data and use the parsed data to populate the structures defined by the video std headers. It is also the application's responsibility to maintain and manage these data structures, as needed, to be able to provide them as inputs to video decode operations where needed.
+
+
+=== RESOLVED: Why the `vulkan_video_codec_h264std` video std header does not have a version number?
+
+The `vulkan_video_codec_h264std` video std header was introduced to share common definitions used in both H.264/AVC video decoding and video encoding, as the two functionalities were designed in parallel. However, as no video coding extension uses this video std header directly, only as a dependency of the video std header specific to the particular video coding operation, no separate versioning scheme was deemed necessary.
+
+
+=== RESOLVED: What are the requirements for the codec-specific input parameters and bitstream data?
+
+It is legal from an API usage perspective for the application to provide any values for the codec-specific input parameters (parameter sets, picture information, etc.) or video bitstream data. However, if the input data does not conform to the requirements of the H.264/AVC video compression standard, then video decode operations may complete unsuccessfully and, in general, the outputs produced by the video decode operation will have undefined contents.
+
+
+=== RESOLVED: Why is there a need for the application to specify the offset of individual slices of the decoded pictures?
+
+Implementations can take advantage of having access to the offsets of individual slices within the video bitstream buffer range provided to the video decode operations, hence this extension requires the application provide these offsets as input.
+
+
+=== RESOLVED: Are interlaced frames supported?
+
+Yes, through specifying an interlaced picture layout in the H.264 decode profile.
+
+Video sessions created with an interlaced picture layout can be used to decode field pictures, as well as progressive frame pictures. This also enables support for decoding PAFF and MBAFF content.
+
+
+=== RESOLVED: How are interlaced frames stored?
+
+Depending on the used picture layout, interlaced frames may be stored _interleaved_ by storing both the top and bottom fields in even and odd scanlines of a single video picture resource, respectively, or in _separate planes_. In the latter case the two fields comprising an interlaced frame may be stored in different subregions of a single image array layer, in separate image array layers, or in entirely separate images.
+
+
+=== RESOLVED: How should DPB images be created in case of interlaced frame support?
+
+Typically, interlaced frames are stored with one frame in each image array layer, hence the total number of layers across the DPB image(s) usually still matches the DPB slot capacity. The only exception is when the `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR` picture layout is used and the application wants to store individual fields in separate image array layers, in which case the total number of layers across the DPB image(s) may need to be twice as large as the DPB slot capacity.
+
+
+=== RESOLVED: How should both fields of an interlaced frame be specified as part of the active reference picture list?
+
+The way how both fields of an interlaced frame can be included in the list of active reference pictures differs depending on the used picture layout.
+
+If `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR` is used, then both fields of an interlaced frame are stored in the same video picture resource, hence the application has to refer to both fields using a single `VkVideoReferenceSlotInfoKHR` structure with `StdVideoDecodeH264ReferenceInfo` having both `top_field_flag` and `bottom_field_flag` set to `1`.
+
+If `VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR` is used, then each field is stored in a separate video picture resource (even if backed by the same image array layer), hence the application has to refer to each field using a separate `VkVideoReferenceSlotInfoKHR` structure with `StdVideoDecodeH264ReferenceInfo` setting only the field flag corresponding to the field picture in question.
+
+
+=== RESOLVED: Is H.264 Multiview content supported?
+
+Not as part of this extension, but future extensions can add support for that. While the provisional `VK_EXT_video_decode_h264` this extension was promoted from did include support for H.264 MVC, the corresponding APIs were not considered to be mature enough to be included in this extension.
+
+
+=== RESOLVED: Why are H.264 level indicator values specified differently than the way they are defined in the codec specification?
+
+For historical reasons, the `StdVideoH264Level` type is defined with ordinal enum constant values, which does not match the decimal encoding used by the H.264/AVC video compression standard specification. All APIs defined by this extension and the used video std headers accept and report H.264 levels using the enum constants `STD_VIDEO_H264_LEVEL_<major>.<minor>`, not the decimal encoding used within raw H.264/AVC bitstreams.
+
+
+== Further Functionality
+
+Future extensions can further extend the capabilities provided here, e.g. exposing support to decode H.264 Multiview content.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h265.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h265.adoc
new file mode 100644
index 0000000..21ac863
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_h265.adoc
@@ -0,0 +1,492 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_video_decode_h265
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to enable performing H.265/HEVC video decode operations in Vulkan.
+
+== Problem Statement
+
+The `VK_KHR_video_queue` extension introduces support for video coding operations and the `VK_KHR_video_decode_queue` extension further extends this with APIs specific to video decoding.
+
+The goal of this proposal is to build upon this infrastructure to introduce support for decoding elementary video stream sequences compliant with the H.265/HEVC video compression standard.
+
+
+== Solution Space
+
+As the `VK_KHR_video_queue` and `VK_KHR_video_decode_queue` extensions already laid down the architecture for how codec-specific video decode extensions need to be designed, this extension only needs to define the APIs to provide the necessary codec-specific parameters at various points during the use of the codec-independent APIs. In particular:
+
+  * APIs allowing to specify H.265 video, sequence, and picture parameter sets (VPS, SPS, PPS) to be stored in video session parameters objects
+  * APIs allowing to specify H.265 information specific to the decoded picture, including references to previously stored VPS, SPS, and PPS entries
+  * APIs allowing to specify H.265 reference picture information specific to the active reference pictures and optional reconstructed picture used in video decode operations
+
+The following options have been considered to choose the structure of these definitions:
+
+  1. Allow specifying packed codec-specific data to the APIs in the form they appear in bitstreams
+  2. Specify codec-specific parameters through custom type definitions that the application can populate after parsing the corresponding data elements in the bitstreams
+
+Option (1) would allow for a simpler API, but it requires implementations to include an appropriate parser for these data elements. As decoding applications typically parse these data elements for other reasons anyway, this proposal choses option (2) to enable the application to provide the needed parameters through custom definitions provided by a video std header dedicated to H.265 video decoding.
+
+The following additional options have been considered to choose the way this video std header is defined:
+
+  1. Include all definitions in this H.265 video decode std header
+  2. Add a separate video std header that includes H.265 parameter definitions that can be shared across video decoding and video encoding use cases that the H.265 video decode std header depends on, and only include decode-specific definitions in the H.265 video decode std header
+
+Both options are reasonable, however, as the H.265 video decoding and H.265 video encoding functionalities were designed in parallel, this extension uses option (2) and introduces the following new video std headers:
+
+  * `vulkan_video_codec_h265std` - containing common definitions for all H.265 video coding operations
+  * `vulkan_video_codec_h265std_decode` - containing definitions specific to H.265 video decoding operations
+
+These headers can be included as follows:
+
+[source,c]
+----
+#include <vk_video/vulkan_video_codec_h265std.h>
+#include <vk_video/vulkan_video_codec_h265std_decode.h>
+----
+
+
+== Proposal
+
+=== Video Std Headers
+
+This extension uses the new `vulkan_video_codec_h265std_decode` video std header. Implementations must always support at least version 1.0.0 of this video std header.
+
+
+=== H.265 Decode Profiles
+
+This extension introduces the new video codec operation `VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR`. This flag can be used to check whether a particular queue family supports decoding H.265/HEVC content, as returned in `VkQueueFamilyVideoPropertiesKHR`.
+
+An H.265 decode profile can be defined through a `VkVideoProfileInfoKHR` structure using this new video codec operation and by including the following new codec-specific profile information structure in the `pNext` chain:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265ProfileInfoKHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    StdVideoH265ProfileIdc    stdProfileIdc;
+} VkVideoDecodeH265ProfileInfoKHR;
+----
+
+`stdProfileIdc` specifies the H.265 profile indicator.
+
+
+=== H.265 Decode Capabilities
+
+Applications need to include the following new structure in the `pNext` chain of `VkVideoCapabilitiesKHR` when calling the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command to retrieve the capabilities specific to H.265 video decoding:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265CapabilitiesKHR {
+    VkStructureType         sType;
+    void*                   pNext;
+    StdVideoH265LevelIdc    maxLevelIdc;
+} VkVideoDecodeH265CapabilitiesKHR;
+----
+
+`maxLevelIdc` indicates the maximum supported H.265 level indicator.
+
+
+=== H.265 Decode Parameter Sets
+
+The use of video session parameters objects is mandatory when decoding H.265 video streams. Applications need to include the following new structure in the `pNext` chain of `VkVideoSessionParametersCreateInfoKHR` when creating video session parameters objects for H.265 decode use, to specify the parameter set capacity of the created objects:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265SessionParametersCreateInfoKHR {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    uint32_t                                               maxStdVPSCount;
+    uint32_t                                               maxStdSPSCount;
+    uint32_t                                               maxStdPPSCount;
+    const VkVideoDecodeH265SessionParametersAddInfoKHR*    pParametersAddInfo;
+} VkVideoDecodeH265SessionParametersCreateInfoKHR;
+----
+
+The optional `pParametersAddInfo` member also allows specifying an initial set of parameter sets to add to the created object:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265SessionParametersAddInfoKHR {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   stdVPSCount;
+    const StdVideoH265VideoParameterSet*       pStdVPSs;
+    uint32_t                                   stdSPSCount;
+    const StdVideoH265SequenceParameterSet*    pStdSPSs;
+    uint32_t                                   stdPPSCount;
+    const StdVideoH265PictureParameterSet*     pStdPPSs;
+} VkVideoDecodeH265SessionParametersAddInfoKHR;
+----
+
+This structure can also be included in the `pNext` chain of `VkVideoSessionParametersUpdateInfoKHR` used in video session parameters update operations to add further parameter sets to an object after its creation.
+
+Individual parameter sets are stored using parameter set IDs as their keys, specifically:
+
+  * H.265 VPS entries are identified using a `vps_video_parameter_set_id` value
+  * H.265 SPS entries are identified using a pair of `sps_video_parameter_set_id` and `sps_seq_parameter_set_id` values
+  * H.265 PPS entries are identified using a triplet of `sps_video_parameter_set_id`, `pps_seq_parameter_set_id`, and `pps_pic_parameter_set_id` values
+
+Please note the inclusion of the VPS ID in the PPS key. This is needed because a PPS is not uniquely identified by its ID and the ID of the parent SPS, as multiple SPS entries may exist with the same ID that have different parent VPS IDs. In order to ensure the uniqueness of keys, all APIs referring to a PPS in this proposal also take the parent VPS ID of the SPS the PPS in question belongs to, to specify the full hierarchy of IDs.
+
+The H.265/HEVC video compression standard always requires a VPS, SPS, and PPS, hence the application has to add an instance of each parameter set to the used parameters object before being able to record video decode operations.
+
+Furthermore, the H.265/HEVC video compression standard also allows modifying existing parameter sets, but as parameters already stored in video session parameters objects cannot be changed in Vulkan, the application has to create new parameters objects in such cases, as described in the proposal for `VK_KHR_video_queue`.
+
+
+=== H.265 Decoding Parameters
+
+Decode parameters specific to H.265 need to be provided by the application through the `pNext` chain of `VkVideoDecodeInfoKHR`, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265PictureInfoKHR {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    const StdVideoDecodeH265PictureInfo*    pStdPictureInfo;
+    uint32_t                                sliceSegmentCount;
+    const uint32_t*                         pSliceSegmentOffsets;
+} VkVideoDecodeH265PictureInfoKHR;
+----
+
+`pStdPictureInfo` points to the codec-specific decode parameters defined in the `vulkan_video_codec_h265std_decode` video std header, while the `pSliceSegmentOffsets` array contains the relative offset of individual slice segments of the picture within the video bitstream range used by the video decode operation.
+
+The active VPS, SPS, and PPS (sourced from the bound video session parameters object) are identified by the `sps_video_parameter_set_id`, `pps_seq_parameter_set_id`, and `pps_pic_parameter_set_id` parameters.
+
+Picture information specific to H.265 for the active reference pictures and the optional reconstructed picture need to be provided by the application through the `pNext` chain of corresponding elements of `VkVideoDecodeInfoKHR::pReferenceSlots` and the `pNext` chain of `VkVideoDecodeInfoKHR::pSetupReferenceSlot`, respectively, using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeH265DpbSlotInfoKHR {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    const StdVideoDecodeH265ReferenceInfo*    pStdReferenceInfo;
+} VkVideoDecodeH265DpbSlotInfoKHR;
+----
+
+`pStdReferenceInfo` points to the codec-specific reference picture parameters defined in the `vulkan_video_codec_h265std_decode` video std header.
+
+It is the application's responsibility to specify video bitstream buffer data and codec-specific parameters that are compliant to the rules defined by the H.265/HEVC video compression standard. While it is not illegal, from the API usage's point of view, to specify non-compliant inputs, they may cause the video decode operation to complete unsuccessfully and will cause the output pictures (decode output and reconstructed pictures) to have undefined contents after the execution of the operation.
+
+For more information about how to parse individual H.265 bitstream syntax elements, calculate derived values, and, in general, how to interpret these parameters, please refer to the corresponding sections of the https://www.itu.int/rec/T-REC-H.265-202108-I/[ITU-T H.265 Specification].
+
+
+== Examples
+
+=== Select queue family with H.265 decode support
+
+[source,c]
+----
+uint32_t queueFamilyIndex;
+uint32_t queueFamilyCount;
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, NULL);
+
+VkQueueFamilyProperties2* props = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyProperties2));
+VkQueueFamilyVideoPropertiesKHR* videoProps = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyVideoPropertiesKHR));
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    props[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+    props[queueFamilyIndex].pNext = &videoProps[queueFamilyIndex];
+
+    videoProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, props);
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    if ((props[queueFamilyIndex].queueFamilyProperties.queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) != 0 &&
+        (videoProps[queueFamilyIndex].videoCodecOperations & VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR) != 0) {
+        break;
+    }
+}
+
+if (queueFamilyIndex < queueFamilyCount) {
+    // Found appropriate queue family
+    ...
+} else {
+    // Did not find a queue family with the needed capabilities
+    ...
+}
+----
+
+
+=== Check support and query the capabilities for an H.265 decode profile
+
+[source,c]
+----
+VkResult result;
+
+VkVideoDecodeH265ProfileInfoKHR decodeH265ProfileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR,
+    .pNext = NULL,
+    .stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN
+};
+
+VkVideoProfileInfoKHR profileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,
+    .pNext = &decodeH265ProfileInfo,
+    .videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR,
+    .chromaSubsampling = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
+    .lumaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
+    .chromaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR
+};
+
+VkVideoDecodeH265CapabilitiesKHR decodeH265Capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR,
+    .pNext = NULL,
+};
+
+VkVideoDecodeCapabilitiesKHR decodeCapabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR,
+    .pNext = &decodeH265Capabilities
+}
+
+VkVideoCapabilitiesKHR capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+    .pNext = &decodeCapabilities
+};
+
+result = vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &profileInfo, &capabilities);
+
+if (result == VK_SUCCESS) {
+    // Profile is supported, check additional capabilities
+    ...
+} else {
+    // Profile is not supported, result provides additional information about why
+    ...
+}
+----
+
+=== Create and update H.265 video session parameters objects
+
+[source,c]
+----
+VkVideoSessionParametersKHR videoSessionParams = VK_NULL_HANDLE;
+
+VkVideoDecodeH265SessionParametersCreateInfoKHR decodeH265CreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR,
+    .pNext = NULL,
+    .maxStdVPSCount = ... // VPS capacity
+    .maxStdSPSCount = ... // SPS capacity
+    .maxStdPPSCount = ... // PPS capacity
+    .pParametersAddInfo = ... // parameters to add at creation time or NULL
+};
+
+VkVideoSessionParametersCreateInfoKHR createInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
+    .pNext = &decodeH265CreateInfo,
+    .flags = 0,
+    .videoSessionParametersTemplate = ... // template to use or VK_NULL_HANDLE
+    .videoSession = videoSession
+};
+
+vkCreateVideoSessionParametersKHR(device, &createInfo, NULL, &videoSessionParams);
+
+...
+
+StdVideoH265VideoParameterSet vps = {};
+// parse and populate VPS parameters
+...
+
+StdVideoH265SequenceParameterSet sps = {};
+// parse and populate SPS parameters
+...
+
+StdVideoH265PictureParameterSet pps = {};
+// parse and populate PPS parameters
+...
+
+VkVideoDecodeH265SessionParametersAddInfoKHR decodeH265AddInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR,
+    .pNext = NULL,
+    .stdVPSCount = 1,
+    .pStdVPSs = &vps,
+    .stdSPSCount = 1,
+    .pStdSPSs = &sps,
+    .stdPPSCount = 1,
+    .pStdPPSs = &pps
+};
+
+VkVideoSessionParametersUpdateInfoKHR updateInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR,
+    .pNext = &decodeH265AddInfo,
+    .updateSequenceCount = 1 // incremented for each subsequent update
+};
+
+vkUpdateVideoSessionParametersKHR(device, &videoSessionParams, &updateInfo);
+----
+
+
+=== Record H.265 decode operation (without reconstructed picture setup or reference pictures)
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH265PictureInfo stdPictureInfo = {};
+// parse and populate picture info from slice segment header data
+...
+
+VkVideoDecodeH265PictureInfoKHR decodeH265PictureInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR,
+    .pNext = NULL,
+    .pStdPictureInfo = &stdPictureInfo,
+    .sliceSegmentCount = ... // number of slice segments
+    .pSliceSegmentOffsets = ... // array of slice segment offsets relative to the bitstream buffer range
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = &decodeH265PictureInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record H.265 decode operation with reconstructed picture setup
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH265ReferenceInfo stdReferenceInfo = {};
+// parse and populate reconstructed reference picture info from slice segment header data
+...
+
+VkVideoDecodeH265DpbSlotInfoKHR decodeH265DpbSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR,
+    .pNext = NULL,
+    .pStdReferenceInfo = &stdReferenceInfo
+};
+
+VkVideoReferenceSlotInfoKHR setupSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+    .pNext = &decodeH265DpbSlotInfo
+    ...
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    ...
+    .pSetupReferenceSlot = &setupSlotInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record H.265 decode operation with reference picture list
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+StdVideoDecodeH265ReferenceInfo stdReferenceInfo[] = {};
+// populate reference picture info for each active reference picture
+...
+
+VkVideoDecodeH265DpbSlotInfoKHR decodeH265DpbSlotInfo[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR,
+        .pNext = NULL,
+        .pStdReferenceInfo = &stdReferenceInfo[0]
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR,
+        .pNext = NULL,
+        .pStdReferenceInfo = &stdReferenceInfo[1]
+    },
+    ...
+};
+
+
+VkVideoReferenceSlotInfoKHR referenceSlotInfo[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = &decodeH265DpbSlotInfo[0],
+        ...
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = &decodeH265DpbSlotInfo[1],
+        ...
+    },
+    ...
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    ...
+    .referenceSlotCount = sizeof(referenceSlotInfo) / sizeof(referenceSlotInfo[0]),
+    .pReferenceSlots = &referenceSlotInfo[0]
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+== Issues
+
+=== RESOLVED: In what form should codec-specific parameters be provided?
+
+In the form of structures defined by the `vulkan_video_codec_h265std_decode` and `vulkan_video_codec_h265std` video std headers. Applications are responsible to parse parameter sets and slice segment header data and use the parsed data to populate the structures defined by the video std headers. It is also the application's responsibility to maintain and manage these data structures, as needed, to be able to provide them as inputs to video decode operations where needed.
+
+
+=== RESOLVED: Why the `vulkan_video_codec_h265std` video std header does not have a version number?
+
+The `vulkan_video_codec_h265std` video std header was introduced to share common definitions used in both H.265/HEVC video decoding and video encoding, as the two functionalities were designed in parallel. However, as no video coding extension uses this video std header directly, only as a dependency of the video std header specific to the particular video coding operation, no separate versioning scheme was deemed necessary.
+
+
+=== RESOLVED: What are the requirements for the codec-specific input parameters and bitstream data?
+
+It is legal from an API usage perspective for the application to provide any values for the codec-specific input parameters (parameter sets, picture information, etc.) or video bitstream data. However, if the input data does not conform to the requirements of the H.265/HEVC video compression standard, then video decode operations may complete unsuccessfully and, in general, the outputs produced by the video decode operation will have undefined contents.
+
+
+=== RESOLVED: How should PPS entries be identified?
+
+The H.265 picture parameter set syntax only includes the PPS ID (`pps_pic_parameter_set_id`) and the parent SPS ID (`pps_seq_parameter_set_id`). However, the SPS IDs are not globally unique, as multiple sequence parameter sets can have the same ID as long as they have different parent VPS IDs.
+
+In order to be able to uniquely identify (and thus key) parameter sets, the video std header structures providing the contents of a PPS to store in a video session parameters objects, and the parameters indicating the active PPS to use in a video decode operation both include an additional `sps_video_parameter_set_id` member that is not part of the PPS syntax nor the slice segment header syntax, but enable the implementation to uniquely identify PPS entries stored and referenced in a video session parameters object.
+
+
+=== RESOLVED: Why is there a need for the application to specify the offset of individual slice segments of the decoded pictures?
+
+Implementations can take advantage of having access to the offsets of individual slice segments within the video bitstream buffer range provided to the video decode operations, hence this extension requires the application provide these offsets as input.
+
+
+=== RESOLVED: Is H.265 Multiview content supported?
+
+Not as part of this extension, but future extensions can add support for that.
+
+
+=== RESOLVED: Is the worst case size of all input structures for H.265 VPS and SPS entries prohibitively large for embedded devices?
+
+While the maximum possible size of all input structures for H.265 VPS and SPS entries may be quite large, in practice they are not expected to be all specified as most content will not need them. Nested arrays are usually specified through pointers to arrays in the video std headers which enable applications to only specify the elements required by the content at hand.
+
+It is thus not recommended for applications to statically allocate for the worst case size of H.265 VPS and SPS entries. As these are out-of-band data entries anyway, applications should prefer to dynamically allocate sufficient space if atypical content may require larger input data entries.
+
+
+=== RESOLVED: Why are H.265 level indicator values specified differently than the way they are defined in the codec specification?
+
+For historical reasons, the `StdVideoH265Level` type is defined with ordinal enum constant values, which does not match the decimal encoding used by the H.265/HEVC video compression standard specification. All APIs defined by this extension and the used video std headers accept and report H.265 levels using the enum constants `STD_VIDEO_H265_LEVEL_<major>.<minor>`, not the decimal encoding used within raw H.265/HEVC bitstreams.
+
+
+== Further Functionality
+
+Future extensions can further extend the capabilities provided here, e.g. exposing support to decode H.265 Multiview content.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_queue.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_queue.adoc
new file mode 100644
index 0000000..750ec0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_decode_queue.adoc
@@ -0,0 +1,800 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_video_decode_queue
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to enable performing video decode operations in Vulkan.
+
+== Problem Statement
+
+Integrating video decode operations into Vulkan applications enable a wide set of new usage scenarios including, but not limited to, the following examples:
+
+  * Applying post-processing on top of video frames decoded from a compressed video stream
+  * Sourcing dynamic texture data from compressed video streams
+
+It is also not uncommon for Vulkan capable devices to feature dedicated hardware acceleration for video decompression.
+
+The goal of this proposal is to enable these use cases, allow exposing the underlying hardware capabilities, and provide tight integration with other functionalities of the Vulkan API.
+
+
+== Solution Space
+
+The following options have been considered:
+
+  1. Rely on external sharing capabilities to interact with existing video decode APIs
+  2. Add new dedicated APIs to Vulkan specific to video decoding
+  3. Build upon a common set of APIs that enable video coding operations in general
+
+As discussed in the proposal for the `VK_KHR_video_queue` extension, reusing a common, shared infrastructure across all video coding functionalities that leverage existing Vulkan capabilities was preferred, hence this extension follows option 3.
+
+Further sub-options were considered whether a common set of APIs could be used to enable video decoding in general, upon which codec-specific extensions can be built. As the possibility of API reuse is similarly possible within the domain of video decoding as it is for video coding in general, this proposal follows the same principle to extend `VK_KHR_video_queue` with codec-independent video decoding capabilities.
+
+
+== Proposal
+
+=== Video Decode Queues
+
+While `VK_KHR_video_queue` already includes support for a more fine grained query to determine the set of supported video codec operations for a given queue family, this extension introduces an explicit queue flag called `VK_QUEUE_VIDEO_DECODE_BIT_KHR` to indicate support for video decoding.
+
+Applications can use this flag bit to identify video decode capable queue families in general, if needed, before querying more details about the individual video codec operations supported through the use of the `VkQueueFamilyVideoPropertiesKHR` structure. It also indicates support for the set of command buffer commands available on video decode queues, which include the following:
+
+  * Pipeline barrier and event handling commands used for synchronization
+  * Basic query commands to begin, end, and reset queries
+  * Timestamp write commands
+  * Generic video coding commands
+  * The new video decode command introduced by this extension
+
+For the full list of individual commands supported by video decode queues, and whether any command is supported inside/outside of video coding scopes, refer to the manual page of the corresponding command.
+
+
+=== Video Decode Profiles
+
+Video decode profiles are defined using a `VkVideoProfileInfoKHR` structure that specifies a `videoCodecOperation` value identifying a video decode operation. This extension does not introduce any video decode operation flags, as that is left to the codec-specific decode extensions.
+
+On the other hand, this extension allows the application to specify usage hints specific to video decoding by chaining the following new structure to `VkVideoProfileInfoKHR`:
+
+[source,c]
+----
+typedef struct VkVideoDecodeUsageInfoKHR {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkVideoDecodeUsageFlagsKHR    videoUsageHints;
+} VkVideoDecodeUsageInfoKHR;
+----
+
+The hint flags introduced by this extension are as follows:
+
+  * `VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR` should be used in video transcoding use cases
+  * `VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR` should be used when decoding local video content
+  * `VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR` should be used when decoding video content streamed over network
+
+These usage hints do not provide any restrictions or guarantees, so any combination of flags can be used, but they allow the application to better communicate the intended use case scenario so that implementations can make appropriate choices based on it.
+
+Logically, however, it is part of the video profile definition, so capabilities may vary across video decode profiles that only differ in terms of video decode usage hints, and it also affects video profile compatibility between resources and video sessions, so the same `VkVideoDecodeUsageInfoKHR` structure has to be included everywhere where the specific video decode profile is used.
+
+
+=== New Pipeline Stage and Access Flags
+
+This extension also introduces a new pipeline stage identified by the `VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR` flag to enable synchronizing video decode operations with respect to other Vulkan operations.
+
+In addition, two new access flags are introduced to indicate reads and writes, respectively, performed by the video decode pipeline stage:
+
+  * `VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR`
+  * `VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR`
+
+As these flags did no longer fit into the legacy 32-bit enums, this extension requires the `VK_KHR_synchronization2` extension and relies on the 64-bit versions of the pipeline stage and access mask flags to handle synchronization specific to video decode operations.
+
+
+=== New Buffer and Image Usage Flags
+
+This extension introduces the following new buffer usage flags:
+
+  * `VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR` allows using the buffer as a video bitstream buffer in video decode operations
+  * `VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR` is reserved for future use
+
+This extension also introduces the following new image usage flags:
+
+  * `VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR` is reserved for future use
+  * `VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR` allows using the image as a decode output picture
+  * `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR` allows using the image as a decode DPB picture (reconstructed/reference picture)
+
+Specifying these usage flags alone is not sufficient to create a buffer or image that is compatible to be used with a video session created against any particular video profile. In fact, when specifying any of these usage flags at resource creation time, the application has to include a `VkVideoProfileListInfoKHR` structure in the `pNext` chain of the corresponding create info structure that includes a video decode profile. The created resources will be compatible only with that single video decode profile (and any additional video encode profiles that may have been specified in the list).
+
+
+=== New Format Feature Flags
+
+To indicate which formats are compatible with video decode usage, the following new format feature flags are introduced:
+
+  * `VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR` indicates support for decode output picture usage
+  * `VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR` indicates support for decode DPB picture usage
+
+The presence of the format flags alone, as returned by the various format queries, is not sufficient to indicate that an image with that format is usable with video decoding using any particular video decode profile. Actual compatibility with a specific video decode profile has to be verified using the `vkGetPhysicalDeviceVideoFormatPropertiesKHR` command.
+
+
+=== Basic Operation
+
+Video decode operations can be recorded into command buffers allocated from command pools created against queue families that support the `VK_QUEUE_VIDEO_DECODE_BIT_KHR` flag.
+
+Recording video decode operations happens through the use of the following new command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoDecodeInfoKHR*                 pDecodeInfo);
+----
+
+The common, codec-independent parameters of the video decode operation are provided using the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoDecodeInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkVideoDecodeFlagsKHR                 flags;
+    VkBuffer                              srcBuffer;
+    VkDeviceSize                          srcBufferOffset;
+    VkDeviceSize                          srcBufferRange;
+    VkVideoPictureResourceInfoKHR         dstPictureResource;
+    const VkVideoReferenceSlotInfoKHR*    pSetupReferenceSlot;
+    uint32_t                              referenceSlotCount;
+    const VkVideoReferenceSlotInfoKHR*    pReferenceSlots;
+} VkVideoDecodeInfoKHR;
+----
+
+Executing such a video decode operation results in the decompression of a single picture (unless otherwise defined by layered extensions), and, if there is an active `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` query, the status of the video decode operation is recorded into the active query slot.
+
+If the decode operation requires additional codec-specific parameters, then such parameters are provided in the `pNext` chain of the structure above. Whether such codec-specific information is necessary, and what it may contain is up to the codec-specific extensions.
+
+`srcBuffer`, `srcBufferOffset`, and `srcBufferRange` provide information about the used video bitstream buffer range. The video decode operation reads the compressed picture data from this buffer range.
+
+The application has to create the video bitstream buffer with the new `VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR` usage flag, and must also include the used video session's video profile in the `VkVideoProfileListInfoKHR` structure specified at buffer creation time.
+
+The expected contents of the video bitstream buffer range depends on the specific video codec used, as defined by corresponding codec-specific extensions built upon this proposal.
+
+The `dstPictureResource`, `pSetupReferenceSlot`, and `pReferenceSlots` members specify the decode output picture, reconstructed picture, and reference pictures, respectively, used by the video decode operation, as discussed in later sections of this proposal.
+
+
+=== Decode Output Picture
+
+`dstPictureResource` defines the parameters of the video picture resource to use as the decode output picture. The video decode operation writes the picture data resulting from the decompression of the bitstream data to this video picture resource. As such it is a mandatory parameter of the operation.
+
+The application has to create the image view specified in `dstPictureResource.imageViewBinding` with the new `VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR` usage flag, and must also include the used video session's video profile in the `VkVideoProfileListInfoKHR` structure specified at image creation time.
+
+The image subresource backing the decode output picture has to be in the new `VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR` layout at the time the video decode operation is executed, except if it matches the reconstructed picture, as discussed later, in which case the image subresource has to be in the new `VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR` layout.
+
+
+=== Reconstructed Picture
+
+`pSetupReferenceSlot` is an optional parameter specifying the video picture resource to use as the reconstructed picture and the DPB slot index to activate with it. Content-wise, a reconstructed picture is generally identical to the decode output picture, but unlike the latter, the reconstructed picture can be used as a reference picture in future video decode operations, hence it is a picture that is part of the DPB.
+
+When a non-`NULL` `pSetupReferenceSlot` is specified, the DPB slot identified by its `slotIndex` member is activated with the video picture resource specified by its `pPictureResource` member. Hence this parameter can be used to add new reference pictures to the DPB, and change the association between DPB slot indices and video picture resources. That also implies that the application has to specify a video picture resource in `pSetupReferenceSlot->pPictureResource` that was included in the set of bound reference picture resources specified when the video coding scope was started (in one of the elements of `VkVideoBeginCodingInfoKHR::pReferenceSlots`). No similar requirement exists for the decode output picture specified by `dstPictureResource` which can refer to any video picture resource.
+
+The application has to create the image view specified in `pSetupReferenceSlot->pPictureResource->imageViewBinding` with the new `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR` usage flag, and must also include the used video session's video profile in the `VkVideoProfileListInfoKHR` structure specified at image creation time.
+
+The image subresource backing the reconstructed picture has to be in the new `VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR` layout at the time the video decode operation is executed.
+
+Implementations diverge in the way they handle reconstructed pictures:
+
+  * On some implementations the decode output picture and reconstructed picture have to be _distinct_ video picture resources, even if the picture data written by the video decode operation to the two resources is identical.
+  * On other implementations the decode output picture and reconstructed picture have to _coincide_, i.e. both have to refer to the same video picture resource.
+  * Some other implementations may actually support both modes.
+
+Support for the individual modes is indicated by the `VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR` and `VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR` capability flags. Implementations are only required to support one of the two modes, hence portable applications have to make sure that they support both options. Dealing with this implementation divergence, however, is fairly simple.
+
+Generally speaking, the application has to create the following images in order to decode a video stream:
+
+  * One or more images that will contain the reference pictures associated with the DPB.
+  * An additional image usable as the decode output picture (if not all decoded pictures are expected to be stored in the DPB).
+
+The application should always create the image(s) backing the DPB with the `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR` usage flag. If only the _coincide_ mode is supported for reconstructed pictures, then the DPB image(s) that may be used as a reconstructed picture in a video decode operation have to also include the `VK_IMAGE_USAGE_VIDEO_DECODE_DST_KHR` usage flag to allow them to be used as coinciding decode output and reconstructed pictures.
+
+The image backing the decode output picture should always be created with the `VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR` usage flag.
+
+The DPB image(s) are expected to be in the `VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR` layout while in use by video decode operations, while the decode output image is expected to be in the `VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR` layout.
+
+Now we have two cases to consider:
+
+  1. When a reconstructed picture needs to be specified (as the picture is expected to be used as a reference picture later on); and
+  2. When one is not needed (`pSetupReferenceSlot = NULL`)
+
+In case of (2), the application can use the image created for the decode output picture in `dstPictureResource`, indifferent of whether the _distinct_ or _coincide_ mode is used.
+
+In case of (1), the behavior is as follows:
+
+  * In _distinct_ mode the decode output picture's image should be used in `dstPictureResource`, and (one of) the DPB image(s) should be referred to in `pSetupReferenceSlot`, as it would naturally follow.
+  * In _coincide_ mode both `dstPictureResource` and `pSetupReferenceSlot` should refer to a video picture resource in (one of) the DPB image(s).
+
+In the latter situation the decoded picture will be written only to the DPB image, and the image created for decode-output-only use remains unused. If the application wants to concurrently use the decoded picture while also performing video decode operations using the same picture as reference, it can manually copy the decoded picture stored in the DPB image to the otherwise unused decode output image, if needed. This way it practically mimics the behavior of an implementation supporting the _distinct_ mode. However, in most use cases that is not necessary, hence on implementations supporting the _coincide_ mode the application can avoid having two copies of the decoded pictures, even if they are used as reference pictures later on.
+
+If the video profile in use requires additional codec-specific parameters for the reconstructed picture, then such parameters are provided in the `pNext` chain of `pSetupReferenceSlot`. Whether such codec-specific reconstructed picture information is necessary, and what it may contain is up to the codec-specific extensions.
+
+
+=== Reference Pictures
+
+If the video session allows, reference pictures can be specified in the `pReferenceSlots` array to provide predictions of the values of samples of the decoded picture.
+
+Each entry in the `pReferenceSlots` array adds one or more pictures, currently associated with the DPB slot specified in the element's `slotIndex` member and stored in the video picture specified in the element's `pPictureResource` member, to the list of active reference pictures to use in the video decode operation.
+
+The application has to make sure to specify each video picture resource used as a reference picture in a video decode operation, beforehand, in the set of bound reference picture resources specified when the video coding scope was started (in one of the elements of `VkVideoBeginCodingInfoKHR::pReferenceSlots`).
+
+The application has to create the image view specified in `pPictureResource->imageViewBinding` of the elements of `pReferenceSlots` with the new `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR`` usage flag, and must also include the used video session’s video profile in the `VkVideoProfileListInfoKHR` structure specified at image creation time.
+
+The image subresources backing the reference pictures have to be in the new `VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR` layout at the time the video decode operation is executed.
+
+Typically the number of elements in `pReferenceSlots` equals the number of reference pictures added, but in certain cases (depending on the used video codec and video profile) there may be multiple pictures in the same DPB slot resource.
+
+If the video profile in use requires additional codec-specific parameters for the reference pictures, then such parameters are provided in the `pNext` chain of the elements of `pReferenceSlots`. Whether such codec-specific reference picture information is necessary, and what it may contain is up to the codec-specific extensions.
+
+
+=== Capabilities
+
+Querying capabilities specific to video decoding happens through the query mechanisms introduced by the `VK_KHR_video_queue` extension.
+
+Support for individual video decode operations can be retrieved for each queue family using the `VkQueueFamilyVideoPropertiesKHR` structure, as discussed earlier.
+
+The application can also use the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command to query the capabilities of a specific video decode profile. In case of video decode profiles, the following new structure has to be included in the `pNext` chain of the `VkVideoCapabilitiesKHR` structure used to retrieve the general video decode capabilities:
+
+[source,c]
+----
+typedef struct VkVideoDecodeCapabilitiesKHR {
+    VkStructureType                    sType;
+    void*                              pNext;
+    VkVideoDecodeCapabilityFlagsKHR    flags;
+} VkVideoDecodeCapabilitiesKHR;
+----
+
+This structure only contains a new decode-specific `flags` member that indicates support for various video decode capabilities, like the support for the _distinct_ and _coincide_ modes for reconstructed pictures, as discussed earlier.
+
+The `vkGetPhysicalDeviceVideoFormatPropertiesKHR` command can be used to query the supported image/picture formats for a given set of video profiles, as described in the `VK_KHR_video_queue` extension.
+
+In particular, if the application would like to query the list of format properties supported for decode output pictures, then it should include the new `VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR` usage flag in `VkPhysicalDeviceVideoFormatInfoKHR::imageUsage`.
+
+Similarly, to query the list of format properties supported for decode DPB pictures (reconstructed/reference pictures), then it should include the new `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR` usage flag in `VkPhysicalDeviceVideoFormatInfoKHR::imageUsage`.
+
+When using the _coincide_ mode, the application will need DPB pictures that support both decode output and DPB usage, hence it should call `vkGetPhysicalDeviceVideoFormatPropertiesKHR` with `VkPhysicalDeviceVideoFormatInfoKHR::imageUsage` including both `VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR` and `VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR`.
+
+
+=== Usage Summary
+
+To summarize the usage of the video decoding features introduced by this extension, let us take a look at a typical usage scenario when using this extension to decode a video stream.
+
+Before the application can start recording command buffers with video decode operations, it has to do the following:
+
+  . Ensure that the implementation can decode the video content at hand by first querying the video codec operations supported by each queue family using the `vkGetPhysicalDeviceQueueFamilyProperties2` command and the `VkQueueFamilyVideoPropertiesKHR` output structure.
+  . If needed, the application has to also retrieve the `VkQueueFamilyQueryResultStatusPropertiesKHR` output structure for the queue family to check support for `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` queries.
+  . Construct the `VkVideoProfileInfoKHR` structure describing the entire video profile, including the video codec operation, chroma subsampling, bit depths, and any other usage or codec-specific parameters.
+  . Ensure that the specific video profile is supported by the implementation using the `vkGetPhysicalDeviceVideoCapabilitiesKHR` command and retrieve the general, decode-specific, and codec-specific capabilities at the same time.
+  . Query the list of supported image/picture format properties supported for the video profile using the `vkGetPhysicalDeviceVideoFormatPropertiesKHR` structure, and select a suitable format for the DPB and decode output pictures.
+  . Create an image corresponding to the decode output picture with the appropriate usage flags and video profile list, as described earlier, and bind suitable device memory to the image. Also create an image view with the appropriate usage flags to use in the video decode operations.
+  . If needed, create one or more images corresponding to the DPB pictures with the appropriate usage flags and video profile list, as described earlier, and bind suitable device memory to them. Also create any image views with the appropriate usage flags to use in the video decode operations.
+  . Create a buffer with the `VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR` usage flag and the video profile list, to use as the source video bitstream buffer. If the buffer is expected to be populated using the CPU, consider binding compatible host-visible device memory to the buffer.
+  . If result status queries are needed and supported (as determined earlier), create a query pool with the `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` query type and the used video decode profile.
+  . Create the video session using the video decode profile and appropriate parameters within the capabilities supported by the profile, as determined earlier. Bind suitable device memory to each memory binding index of the video session.
+  . If needed, create a video session parameters object for the video session.
+
+Recording video decode operations into command buffers typically consists of the following sequence:
+
+  . Start a video coding scope with the created video session (and parameters) object using the `vkCmdBeginVideoCodingKHR` command. Make sure to include all video picture resources in `VkVideoBeginCodingInfoKHR::pReferenceSlots` that may be used as reconstructed or reference pictures within the video coding scope, and ensure that the DPB slots specified for each reflect the current DPB slot association for the resource.
+  . If this is the first video coding scope the video session is used in, reset the video session to the initial state by recording a `vkCmdControlVideoCodingKHR` command with the `VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR` flag.
+  . If needed, start a `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` query using `vkCmdBeginQuery`. Reset the query using `vkCmdResetQueryPool`, beforehand, as needed.
+  . Issue a video decode operation using the `vkCmdDecodeVideoKHR` command with appropriate parameters, as discussed earlier.
+  . If needed, end the started query using `vkCmdEndQuery`.
+  . Record any further control or decode operations into the video coding scope, as needed.
+  . End the video coding scope using the `vkCmdEndVideoCodingKHR` command.
+
+
+== Examples
+
+=== Select queue family with video decode support for a given video codec operation
+
+[source,c]
+----
+VkVideoCodecOperationFlagBitsKHR neededVideoDecodeOp = ...
+uint32_t queueFamilyIndex;
+uint32_t queueFamilyCount;
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, NULL);
+
+VkQueueFamilyProperties2* props = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyProperties2));
+VkQueueFamilyVideoPropertiesKHR* videoProps = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyVideoPropertiesKHR));
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    props[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+    props[queueFamilyIndex].pNext = &videoProps[queueFamilyIndex];
+
+    videoProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, props);
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    if ((props[queueFamilyIndex].queueFamilyProperties.queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) != 0 &&
+        (videoProps[queueFamilyIndex].videoCodecOperations & neededVideoDecodeOp) != 0) {
+        break;
+    }
+}
+
+if (queueFamilyIndex < queueFamilyCount) {
+    // Found appropriate queue family
+    ...
+} else {
+    // Did not find a queue family with the needed capabilities
+    ...
+}
+----
+
+
+=== Check support and query the capabilities for a video decode profile
+
+[source,c]
+----
+VkResult result;
+
+// We also include the optional decode usage hints here
+VkVideoDecodeUsageInfoKHR profileUsageInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific profile structure
+    .videoUsageHints = VK_VIDEO_DECODE_USAGE_DEFAULT_KHR,
+};
+
+VkVideoProfileInfoKHR profileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,
+    .pNext = &profileUsageInfo
+    .videoCodecOperation = ... // used video decode operation
+    .chromaSubsampling = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
+    .lumaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
+    .chromaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR
+};
+
+VkVideoDecodeCapabilitiesKHR decodeCapabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR,
+    .pNext = ... // pointer to codec-specific capability structure
+}
+
+VkVideoCapabilitiesKHR capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+    .pNext = &decodeCapabilities
+};
+
+result = vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &profileInfo, &capabilities);
+
+if (result == VK_SUCCESS) {
+    // Profile is supported, check additional capabilities
+    ...
+} else {
+    // Profile is not supported, result provides additional information about why
+    ...
+}
+----
+
+
+=== Select decode output and DPB formats supported by the video decode profile
+
+[source,c]
+----
+VkVideoProfileInfoKHR profileInfo = {
+    ...
+};
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = 1,
+    .pProfiles = &profileInfo
+};
+
+VkPhysicalDeviceVideoFormatInfoKHR formatInfo = {
+    .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR,
+    .pNext = &profileListInfo
+};
+
+VkVideoFormatPropertiesKHR* formatProps = NULL;
+
+// First query decode output formats
+formatInfo.imageUsage = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR;
+
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, NULL);
+formatProps = calloc(formatCount, sizeof(VkVideoFormatPropertiesKHR));
+for (uint32_t i = 0; i < formatCount; ++i) {
+    formatProps.sType = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
+}
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, formatProps);
+
+for (uint32_t i = 0; i < formatCount; ++i) {
+    // Select decode output format and image creation capabilities best suited for the use case
+    ...
+}
+free(formatProps);
+
+// Then query DPB formats
+formatInfo.imageUsage = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR;
+
+// If DISTINCT mode is not supported or if COINCIDE mode is supported and preferred, then the DPB
+// images generally have to be created to be usable both as decode output and DPB pictures
+if ((decodeCapabilities.flags & VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR) == 0 || preferCoincideMode) {
+    formatInfo.imageUsage |= VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR;
+}
+
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, NULL);
+formatProps = calloc(formatCount, sizeof(VkVideoFormatPropertiesKHR));
+for (uint32_t i = 0; i < formatCount; ++i) {
+    formatProps.sType = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
+}
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, formatProps);
+
+for (uint32_t i = 0; i < formatCount; ++i) {
+    // Select DPB format and image creation capabilities best suited for the use case
+    ...
+}
+free(formatProps);
+----
+
+
+=== Create bitstream buffer
+
+[source,c]
+----
+VkBuffer bitstreamBuffer = VK_NULL_HANDLE;
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = ... // number of video profiles to use the bitstream buffer with
+    .pProfiles = ... // pointer to an array of video profile information structure chains
+};
+
+VkBufferCreateInfo createInfo = {
+    .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
+    .pNext = &profileListInfo,
+    ...
+    .usage = VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR | ... // any other usages that may be needed
+    ...
+};
+
+vkCreateBuffer(device, &createInfo, NULL, &bitstreamBuffer);
+----
+
+
+=== Create decode output image and image view
+
+[source,c]
+----
+VkImage outputImage = VK_NULL_HANDLE;
+VkImageView outputImageView = VK_NULL_HANDLE;
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = ... // number of video profiles to use the decode output image with
+    .pProfiles = ... // pointer to an array of video profile information structure chains
+};
+
+VkImageCreateInfo imageCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+    .pNext = &profileListInfo,
+    ...
+    .usage = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | ... // any other usages that may be needed
+    ...
+};
+
+vkCreateImage(device, &imageCreateInfo, NULL, &outputImage);
+
+VkImageViewUsageCreateInfo imageViewUsageInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
+    .pNext = NULL,
+    .usage = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+};
+
+VkImageViewCreateInfo imageViewCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+    .pNext = &imageViewUsageInfo,
+    .flags = 0,
+    .image = outputImage,
+    .viewType = ... // image view type (only 2D or 2D_ARRAY is supported)
+    ... // other image view creation parameters
+};
+
+vkCreateImageView(device, &imageViewCreateInfo, NULL, &outputImageView);
+----
+
+
+=== Create DPB image and image view
+
+[source,c]
+----
+// NOTE: This example creates a single image and image view that is used to back all DPB pictures
+// but, depending on the support of the VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR
+// capability flag, the application can choose to create separate images for each DPB slot or
+// picture
+
+VkImage dpbImage = VK_NULL_HANDLE;
+VkImageView dpbImageView = VK_NULL_HANDLE;
+
+VkImageUsage dpbImageUsage = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR;
+
+// If DISTINCT mode is not supported or if COINCIDE mode is supported and preferred, then the DPB
+// images generally have to be created to be usable both as decode output and DPB pictures
+if ((decodeCapabilities.flags & VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR) == 0 || preferCoincideMode) {
+    dpbImageUsage |= VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR;
+}
+
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = ... // number of video profiles to use the decode DPB image with
+    .pProfiles = ... // pointer to an array of video profile information structure chains
+};
+
+VkImageCreateInfo imageCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+    .pNext = &profileListInfo,
+    ...
+    .usage = dpbImageUsage | ... // any other usages that may be needed
+    ...
+    .arrayLayers = // typically equal to the DPB slot count
+};
+
+vkCreateImage(device, &imageCreateInfo, NULL, &dpbImage);
+
+VkImageViewUsageCreateInfo imageViewUsageInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
+    .pNext = NULL,
+    .usage = dpbImageUsage
+};
+
+VkImageViewCreateInfo imageViewCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+    .pNext = &imageViewUsageInfo,
+    .flags = 0,
+    .image = dpbImage,
+    .viewType = ... // image view type (only 2D or 2D_ARRAY is supported)
+    ... // other image view creation parameters
+};
+
+vkCreateImageView(device, &imageViewCreateInfo, NULL, &dpbImageView);
+----
+
+
+=== Record decode operation (without reconstructed picture setup or reference pictures)
+
+[source,c]
+----
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+VkVideoPictureResourceInfoKHR decodeOutputPictureResource = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+    .pNext = NULL,
+    .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+    .codedExtent = ... // extent of decoded picture (typically the video frame size)
+    .baseArrayLayer = 0,
+    .imageViewBinding = outputImageView
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific picture information structure
+    .flags = 0,
+    .srcBuffer = bitstreamBuffer,
+    .srcBufferOffset = ... // offset of picture data in the video bitstream buffer
+    .srcBufferRange = ... // size of picture data in the video bitstream buffer
+    .dstPictureResource = decodeOutputPictureResource,
+    .pSetupReferenceSlot = NULL,
+    .referenceSlotCount = 0,
+    .pReferenceSlots = NULL
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record decode operation with reconstructed picture setup (DISTINCT mode)
+
+[source,c]
+----
+// Bound reference resource list provided has to include reconstructed picture resource
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+VkVideoPictureResourceInfoKHR decodeOutputPictureResource = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+    .pNext = NULL,
+    .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+    .codedExtent = ... // extent of decoded picture (typically the video frame size)
+    .baseArrayLayer = 0,
+    .imageViewBinding = outputImageView
+};
+
+VkVideoPictureResourceInfoKHR reconstructedPictureResource = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+    .pNext = NULL,
+    .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+    .codedExtent = ... // extent of reconstructed picture (typically the video frame size)
+    .baseArrayLayer = ... // layer to use for setup picture in DPB
+    .imageViewBinding = dpbImageView
+};
+
+VkVideoReferenceSlotInfoKHR setupSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+    .pNext = ... // pointer to codec-specific reconstructed picture information structure
+    .slotIndex = ... // DPB slot index to activate with the reconstructed picture
+    .pPictureResource = &reconstructedPictureResource
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific picture information structure
+    ...
+    .dstPictureResource = decodeOutputPictureResource,
+    .pSetupReferenceSlot = &setupSlotInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record decode operation with reconstructed picture setup (COINCIDE mode)
+
+[source,c]
+----
+// Bound reference resource list provided has to include reconstructed picture resource
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+VkVideoPictureResourceInfoKHR reconstructedPictureResource = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+    .pNext = NULL,
+    .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+    .codedExtent = ... // extent of decoded picture (typically the video frame size)
+    .baseArrayLayer = ... // layer to use for setup picture in DPB
+    .imageViewBinding = dpbImageView
+};
+
+VkVideoReferenceSlotInfoKHR setupSlotInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+    .pNext = ... // pointer to codec-specific reconstructed picture information structure
+    .slotIndex = ... // DPB slot index to activate with the reconstructed picture
+    .pPictureResource = &reconstructedPictureResource
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific picture information structure
+    ...
+    .dstPictureResource = reconstructedPictureResource,
+    .pSetupReferenceSlot = &setupSlotInfo,
+    ...
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+=== Record decode operation with reference picture list
+
+[source,c]
+----
+// Bound reference resource list provided has to include all used reference picture resources
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+
+VkVideoPictureResourceInfoKHR referencePictureResources[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+        .pNext = NULL,
+        .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+        .codedExtent = ... // extent of reference picture (typically the video frame size)
+        .baseArrayLayer = ... // layer of first reference picture resource
+        .imageViewBinding = dpbImageView
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
+        .pNext = NULL,
+        .codedOffset = ... // offset within the image subresource (typically { 0, 0 })
+        .codedExtent = ... // extent of reference picture (typically the video frame size)
+        .baseArrayLayer = ... // layer of second reference picture resource
+        .imageViewBinding = dpbImageView
+    },
+    ...
+};
+// NOTE: Individual resources do not have to refer to the same image view, e.g. if different
+// image views are created for each picture resource, or if the
+// VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR capability is supported and the
+// application created separate images for the reference pictures.
+
+VkVideoReferenceSlotInfoKHR referenceSlotInfo[] = {
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = ... // pointer to codec-specific reference picture information structure
+        .slotIndex = ... // DPB slot index of the first reference picture
+        .pPictureResource = &referencePictureResource[0]
+    },
+    {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
+        .pNext = ... // pointer to codec-specific reference picture information structure
+        .slotIndex = ... // DPB slot index of the second reference picture
+        .pPictureResource = &referencePictureResource[1]
+    },
+    ...
+};
+
+VkVideoDecodeInfoKHR decodeInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific picture information structure
+    ...
+    .referenceSlotCount = sizeof(referenceSlotInfo) / sizeof(referenceSlotInfo[0]),
+    .pReferenceSlots = &referenceSlotInfo[0]
+};
+
+vkCmdDecodeVideoKHR(commandBuffer, &decodeInfo);
+
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+----
+
+
+== Issues
+
+=== RESOLVED: Why is there no `VK_PIPELINE_STAGE_VIDEO_DECODE_BIT_KHR`?
+
+This extension requires the `VK_KHR_synchronization2` extension because the new access flags introduced did not fit in the 32-bit enum `VkAccessFlagBits`. Accordingly, all new pipeline stage and access flags have been added to the corresponding 64-bit enums and no new flags have been added to the legacy 32-bit enums. While the new pipeline stage flag introduced uses bit #26 which would also fit in the legacy `VkPipelineStageFlagBits` enum, there is no real benefit to include it. Instead the bit is marked reserved.
+
+
+=== RESOLVED: Are the decode output picture data and reconstructed picture data used to activate a DPB slot written to the same resource?
+
+When activating DPB slots with reconstructed pictures (reference picture setup), decode operations have to write the decompressed picture data to a DPB-capable video picture resource.
+
+Behavior varies across implementations in this case:
+
+  * Some implementations write the outputs of the picture decompression to two separate resources: the decoded output picture and the reconstructed picture
+  * Some other implementations only write picture decompression results to one place, which in this case has to be a DPB picture (as it must be usable as a reference picture later on)
+
+A separate output could be useful if e.g. the application intends to use the decode output picture for other purposes (e.g. for window-system presentation or for texture sampling), while using the reconstructed picture in parallel to continue decoding. However, such concurrent use of the outputs is not always necessary.
+
+Trying to mandate a uniform behavior across such implementations could have negative performance implications:
+
+  * If separate outputs would be required, then implementations using a single output would have to perform additional copies even though the application use cases might not need to have one.
+  * If a single output would be required, then applications would have to do copies if they wanted to do such concurrent processing and would not be able to take advantage of implementations that already can write separate outputs in an optimized fashion.
+
+Instead, this extension allows implementations to support either of these modes of operations (separate or single output), as indicated by the `VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR` and `VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR` capability flags, respectively. Implementations are required to support only one of these two modes, and the extension even allows for implementations that may support both modes of operation.
+
+
+=== RESOLVED: How can layered codec-specific decode extensions enable applications to provide the necessary codec-specific picture information, parameter sets, etc. that may be needed to perform the video coding operations?
+
+There are multiple points where codec-specific picture information can be provided to a video decode operation. This extension suggests the following convention:
+
+  * Codec-specific decode parameters are expected to be provided in the `pNext` chain of `VkVideoDecodeInfoKHR`.
+  * Codec-specific reconstructed picture information is expected to be provided in the `pNext` chain of `VkVideoDecodeInfoKHR::pSetupReferenceSlot`.
+  * Codec-specific reference picture information is expected to be provided in the `pNext` chain of the elements of the `VkVideoDecodeInfoKHR::pReferenceSlots` array.
+
+
+=== RESOLVED: Can `vkCmdVideoDecodeKHR` only decode frames? What about field decoding, slice decoding, etc.?
+
+This extension does not define the types of pictures or sub-picture content that can be decoded by a `vkCmdVideoDecodeKHR` command. It is expected that the codec-specific decode extensions built upon this extension define the types of pictures that can be decoded. Furthermore, both codec-specific and codec-independent extensions can expand the set of capabilities introduced here to enable more advanced use cases, as needed.
+
+
+=== RESOLVED: What is the effect of the flags provided in `VkVideoDecodeUsageInfoKHR::videoUsageHints`?
+
+There are no specific behavioral effects associated with any of the video decode usage hints, so the application can specify any combination of these flags. They are included to enable the application to better communicate the intended use case scenario to the implementation.
+
+However, just like any other additional video profile information included in the `pNext` chain of `VkVideoProfileInfoKHR` structures, they are part of the video profile definition, hence whenever matching video profiles have to be provided to an API call, let that be queries or resource creation structures, the application must provide identical video decode usage hint values. This also applies if the application does not include the `VkVideoDecodeUsageInfoKHR` structure, which is treated equivalently to specifying the structure with `videoUsageHints` equal to `VK_VIDEO_DECODE_USAGE_DEFAULT_KHR` (or zero), per the usual conventions of Vulkan.
+
+
+== Further Functionality
+
+This extension is meant to provide only common video decode functionality, thus support for individual video decode profiles using specific video compression standards is left for extensions layered on top of the infrastructure provided here.
+
+Currently the following layered extensions are available:
+
+  * `VK_KHR_video_decode_h264` - adds support for decoding H.264/AVC video sequences
+  * `VK_KHR_video_decode_h265` - adds support for decoding H.265/HEVC video sequences
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_queue.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_queue.adoc
new file mode 100644
index 0000000..584c828
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_KHR_video_queue.adoc
@@ -0,0 +1,1074 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_video_queue
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.2-extensions/man/html/
+:sectnums:
+
+This document outlines a proposal to enable performing video coding operations in Vulkan.
+
+
+== Problem Statement
+
+Integrating video coding operations into Vulkan applications enable a wide set of new usage scenarios including, but not limited to, the following examples:
+
+  * Applying post-processing on top of video frames decoded from a compressed video stream
+  * Sourcing dynamic texture data from compressed video streams
+  * Recording the output of rendering operations
+  * Efficiently transferring rendering results over network (video conferencing, game streaming, etc.)
+
+It is also not uncommon for Vulkan capable devices to feature dedicated hardware acceleration for video compression and decompression.
+
+The goal of this proposal is to enable these use cases, allow exposing the underlying hardware capabilities, and provide tight integration with other functionalities of the Vulkan API.
+
+
+== Solution Space
+
+The following options have been considered:
+
+  1. Rely on external sharing capabilities to interact with existing video APIs
+  2. Add new dedicated APIs to Vulkan separately for video decoding and video encoding
+  3. Add a common set of APIs to Vulkan enabling video coding operations in general
+
+Option 1 has the advantage of being the least invasive in terms of API changes. The disadvantage is that there are a wide range of video APIs out there, most of them being platform or vendor specific which makes creating portable applications difficult. Cross-API interaction also often comes with undesired performance costs and it makes it difficult, if not impossible, to take advantage of all the existing features of Vulkan in such scenarios.
+
+Option 2 enables integrating video coding operations into the API and leveraging all the other capabilities of Vulkan including, but not limited to, explicit resource management and synchronization. Besides that, an integrated solution greatly reduces application complexity and allows for better portability.
+
+Option 3 improves option 2 by acknowledging that there are a lot of facilities that could be shared across different video coding operations like video decoding and encoding. Accordingly, this proposal follows option 3 to introduce a set of concepts, object types, and commands that form the foundation of the video coding capabilities of Vulkan upon which additional functionalities can be layered providing specific video coding operations like video decoding or encoding, and support for individual video compression standards.
+
+
+== Proposal
+
+=== Video Std Headers
+
+As each video compression standard requires a large set of codec-specific parameters that are orthogonal to the Vulkan API itself, the definitions of those are not part of the Vulkan headers. Instead, these definitions are provided separately for each codec-specific extension in corresponding video std headers.
+
+
+=== Video Profiles
+
+This extension introduces the concept of video profiles. A video profile in Vulkan loosely resembles similar concepts defined in video compression standards, however, it is a more generic concept that encompasses additional information like the specific video coding operation, the content type/format, and any other information related to the video coding scenario.
+
+A video profile in Vulkan is defined using the following structure:
+
+[source,c]
+----
+typedef struct VkVideoProfileInfoKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkVideoCodecOperationFlagBitsKHR    videoCodecOperation;
+    VkVideoChromaSubsamplingFlagsKHR    chromaSubsampling;
+    VkVideoComponentBitDepthFlagsKHR    lumaBitDepth;
+    VkVideoComponentBitDepthFlagsKHR    chromaBitDepth;
+} VkVideoProfileInfoKHR;
+----
+
+A complete video profile definition includes an instance of the structure above with additional codec and use case specific parameters provided through its `pNext` chain.
+
+The `videoCodecOperation` member identifies the particular video codec and video coding operation, while the other members provide information about the content type/format, including the chroma subsampling mode and the bit depths used by the compressed video stream.
+
+This extension does not define any video codec operations. Instead, it is left to codec-specific extensions layered on top of this proposal to provide those.
+
+
+=== Video Queues
+
+Support for video coding operations is exposed through new commands available for use on video-capable queue families. As it is not uncommon for devices to have separate dedicated hardware for accelerating video compression and decompression, possibly separate ones for different video codecs, implementations may expose multiple queue families with different video coding capabilities, although it is also possible for implementations to support video coding operations on the usual graphics or compute capable queue families.
+
+The set of video codec operations supported by a queue family can be retrieved using queue family property queries by including the following new output structure:
+
+[source,c]
+----
+typedef struct VkQueueFamilyVideoPropertiesKHR {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkVideoCodecOperationFlagsKHR    videoCodecOperations;
+} VkQueueFamilyVideoPropertiesKHR;
+----
+
+After a successful query, the `videoCodecOperations` member will contain bits corresponding to the individual video codec operations supported by the queue family in question.
+
+
+=== Video Picture Resources
+
+Pictures used by video coding operations are referred to as video picture resources, and are provided to the video coding APIs through instances of the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoPictureResourceInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkOffset2D         codedOffset;
+    VkExtent2D         codedExtent;
+    uint32_t           baseArrayLayer;
+    VkImageView        imageViewBinding;
+} VkVideoPictureResourceInfoKHR;
+----
+
+Each video picture resource is backed by a subregion within a layer of an image object. `baseArrayLayer` specifies the array layer index used relative to the image view specified in `imageViewBinding`. Depending on the specific video codec operation, `codedOffset` can specify an additional offset within the image subresource to read/write picture data from/to, while `codedExtent` typically specifies the size of the video frame.
+
+Actual semantics of `codedOffset` and `codedExtent` are specific to the video profile in use, as the capabilities and semantics of individual codecs varies.
+
+
+=== Decoded Picture Buffer
+
+The chosen video compression standard may require the use of reference pictures. Such reference pictures are used by video coding operations to provide predictions of the values of samples of subsequently decoded or encoded pictures. Just like any other picture data, the decoded picture buffer (DPB) is backed by image layers. In this extension reference pictures are represented by video picture resources and corresponding image views. The DPB is the logical structure that holds this pool of reference pictures.
+
+The DPB is an indexed data structure, and individual indexed entries of the DPB are referred to as the DPB slots. The range of valid DPB slot indices is between zero and `N-1`, where `N` is the capacity of the DPB. Each DPB slot can refer to one or more reference pictures. In case of typical progressive content each DPB slot usually refers to a single picture containing a video frame, but other content types like multiview or interlaced video allow multiple pictures to be associated with each slot. If a DPB slot has any pictures associated with it, then it is an active DPB slot, otherwise it is an inactive DPB slot.
+
+DPB slots can be activated with reference pictures in response to video coding operations requesting such activations. This extension does not introduce any video coding operations. Instead, layered extensions provide those. However, this extension does provide facilities to deactivate currently active DPB slots, as discussed later.
+
+In this extension, the state and the backing store of the DPB are separated as follows:
+
+  * The state of individual DPB slots is maintained by video session objects.
+  * The backing store of DPB slots is provided by video picture resources and the underlying images.
+
+A single non-mipmapped image with a layer count equaling the number of DPB slots can used as the backing store of the DPB, where the picture corresponding to a particular DPB slot index is stored in the layer with the same index. The API also allows arbitrary mapping of image layers to DPB slots. Furthermore, if the `VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR` capability flag is supported by the implementation for a specific video profile, then individual DPB slots can be backed by different images, potentially using a separate image for each DPB slot.
+
+Depending on the used video profile, a single DPB slot may contain more than just one picture (e.g. in case of multiview and interlaced content). In such cases the number of needed image layers may be larger than the number of DPB slots, hence the image(s) used as the backing store of the DPB have to be sized accordingly.
+
+There may also be video compression standards, video profiles, or use cases that do not require or do not support reference pictures at all. In such cases a DPB is not needed either.
+
+The responsibility of managing the DPB is split between the application and the implementation as follows:
+
+  * The application maintains the association between DPB slot indices and corresponding video picture resources.
+  * The implementation maintains global and per-slot opaque reference picture metadata.
+
+In addition, the application is also responsible for managing the mapping between the codec-specific picture IDs and DPB slots, and any other codec-specific states.
+
+
+=== Video Session
+
+Before performing any video coding operations, the application needs to create a video session object using the following new command:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
+    VkDevice                                    device,
+    const VkVideoSessionCreateInfoKHR*          pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkVideoSessionKHR*                          pVideoSession);
+----
+
+The creation parameters are as follows:
+
+[source,c]
+----
+typedef struct VkVideoSessionCreateInfoKHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    uint32_t                        queueFamilyIndex;
+    VkVideoSessionCreateFlagsKHR    flags;
+    const VkVideoProfileInfoKHR*    pVideoProfile;
+    VkFormat                        pictureFormat;
+    VkExtent2D                      maxCodedExtent;
+    VkFormat                        referencePictureFormat;
+    uint32_t                        maxDpbSlots;
+    uint32_t                        maxActiveReferencePictures;
+    const VkExtensionProperties*    pStdHeaderVersion;
+} VkVideoSessionCreateInfoKHR;
+----
+
+A video session object is created against a specific video profile and the implementation uses it to maintain video coding related state. The creation parameters of a video session object include the following:
+
+  * The queue family the video session can be used with (`queueFamilyIndex`)
+  * A video profile definition specifying the particular video compression standard and video coding operation type the video session can be used with (`pVideoProfile`)
+  * The maximum size of the coded frames the video session can be used with (`maxCodedExtent`)
+  * The capacity of the DPB (`maxDpbSlots`)
+  * The maximum number of reference pictures that can be used in a single operation (`maxActiveReferencePictures`)
+  * The used picture formats (`pictureFormat` and `referencePictureFormat`)
+  * The used video compression standard header (`pStdHeaderVersion`)
+
+A video session object can be used to perform video coding operations on a single video stream at the time. After the application finished processing a video stream, it can reuse the object to process another video stream, provided that the configuration parameters between the two streams are compatible (as determined by the video compression standard in use).
+
+Once a video session has been created, the video compression standard and profiles, picture formats, and other settings like the maximum coded extent cannot be changed. However, many parameters of video coding operations may change between subsequent operations, subject to restrictions imposed on parameter updates by the video compression standard, e.g.:
+
+  * The size of the decoded or encoded pictures
+  * The number of active DPB slots
+  * The number of reference pictures in use
+
+In particular, a given video session can be reused to process video streams with different extents, as long as the used coded extent does not exceed the maximum coded extent the video session was created with. This can be useful to reduce latency/overhead when processing video content that may dynamically change the video resolution as part of adjusting to varying network conditions, for example.
+
+After creating a video session, and before using the object in command buffer commands, the application has to allocate and bind device memory to the video session. Implementations may require one or more memory bindings to be bound with compatible device memory, as reported by the following new command:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    uint32_t*                                   pMemoryRequirementsCount,
+    VkVideoSessionMemoryRequirementsKHR*        pMemoryRequirements);
+----
+
+For each memory binding the following information is returned:
+
+[source,c]
+----
+typedef struct VkVideoSessionMemoryRequirementsKHR {
+    VkStructureType         sType;
+    void*                   pNext;
+    uint32_t                memoryBindIndex;
+    VkMemoryRequirements    memoryRequirements;
+} VkVideoSessionMemoryRequirementsKHR;
+----
+
+`memoryBindIndex` is a unique identifier of the corresponding memory binding and can have any value, and `memoryRequirements` contains the memory requirements corresponding to the memory binding.
+
+The application can bind compatible device memory ranges for each binding through one or more calls to the following new command:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    uint32_t                                    bindSessionMemoryInfoCount,
+    const VkBindVideoSessionMemoryInfoKHR*      pBindSessionMemoryInfos);
+----
+
+The parameters of a memory binding are as follows:
+
+[source,c]
+----
+typedef struct VkBindVideoSessionMemoryInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           memoryBindIndex;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+    VkDeviceSize       memorySize;
+} VkBindVideoSessionMemoryInfoKHR;
+----
+
+The application does not have to bind memory to each memory binding with a single call, but before being able to use the video session in video coding operations, all memory bindings have to be bound to compatible device memory, and the bindings are immutable for the lifetime of the video session.
+
+Once a video session object is no longer needed (and is no longer used by any pending command buffers), it can be destroyed with the following new command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    const VkAllocationCallbacks*                pAllocator);
+----
+
+
+=== Video Session Parameters
+
+Most video compression standards require parameters that are in use across multiple video coding operations, potentially across the entire video stream. For example, the H.264/AVC and H.265/HEVC standards require sequence and picture parameter sets (SPS and PPS) that apply to multiple video frames, layers, and sub-layers.
+
+This extension uses video session parameters objects to store such standard parameters. These objects enable storing such codec-specific parameters in a preprocessed form and enable reducing the number of parameters needed to be provided and processed by the implementation while recording video coding operations into command buffers.
+
+Video session parameters objects use a key-value storage. The way how keys are derived from the provided parameters is codec-specific (e.g. in case of H.264/AVC picture parameter sets the key consists of an SPS and PPS ID pair).
+
+The application can create a video session parameters object against a video session with the following new command:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
+    VkDevice                                    device,
+    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkVideoSessionParametersKHR*                pVideoSessionParameters);
+----
+
+The creation parameters are as follows:
+
+[source,c]
+----
+typedef struct VkVideoSessionParametersCreateInfoKHR {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    VkVideoSessionParametersCreateFlagsKHR    flags;
+    VkVideoSessionParametersKHR               videoSessionParametersTemplate;
+    VkVideoSessionKHR                         videoSession;
+} VkVideoSessionParametersCreateInfoKHR;
+----
+
+Layered extensions may provide mechanisms to specify an initial set of parameters at creation time, and the application can also specify a video session parameters object in `videoSessionParametersTemplate` that will be used as a template for the new object. Applying a template happens by first adding any parameters specified in the codec-specific creation parameters, followed by adding any parameters from the template object that have a key that does not match the key of any of the already added parameters.
+
+Parameters stored in video session parameters objects are immutable to facilitate the concurrent use of the stored parameters in multiple threads. However, new parameters can be added to existing objects using the following new command:
+
+[source,c]
+----
+KAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
+    VkDevice                                    device,
+    VkVideoSessionParametersKHR                 videoSessionParameters,
+    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
+----
+
+The base parameters to the command are as follows:
+
+[source,c]
+----
+typedef struct VkVideoSessionParametersUpdateInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           updateSequenceCount;
+} VkVideoSessionParametersUpdateInfoKHR;
+----
+
+The `updateSequenceCount` parameter is used to ensure that the video session parameters objects are updated in order. To support concurrent use of the stored immutable parameters while also allowing the video session parameters object to be extended with new parameters, each object maintains an _update sequence counter_ that is set to `0` at object creation time and has to be incremented by each subsequent update operation by specifying an `updateSequenceCount` that equals the current update sequence counter of the object plus one.
+
+Some codecs permit updating previously supplied parameters. As the parameters stored in the video session parameters objects are immutable, if a parameter update is necessary, the application has the following options:
+
+  * Cache the set of parameters on the application side and create a new video session parameters object adding all the parameters with appropriate changes, as necessary; or
+  * Create a new video session parameters object providing only the updated parameters and the previously used object as the template, which ensures that parameters not specified at creation time will be copied unmodified from the template object.
+
+Another case when a new video session parameters object may need to be created is when the capacity of the current object is exhausted. Each video session parameters object is created with a specific capacity, hence if that capacity later turns out to be insufficient, a new object with a larger capacity should be created, typically using the old one as a template.
+
+The application has to track the capacity and the keys of currently stored parameters for each video session parameters object in order to be able to determine when a new object needs to be created due to a change to an existing parameter or due to exceeding the capacity of the existing object.
+
+During command buffer recording, it is the responsibility of the application to provide the video session parameters object containing the necessary parameters for processing the portion of the video stream in question.
+
+The expected usage model for video session parameters object is a single-producer-multiple-consumer one. Typically a single thread processing the video stream is expected to update the corresponding parameters object, or create new ones when necessary, while at the same time any thread can record video coding operations into command buffers referring to parameters previously added to the object. If, for some reason, the application wants to update a given video session parameters object from multiple threads, it is responsible to provide appropriate mutual exclusion so that no two threads update the same object concurrently, and that the used `updateSequenceCount` values are sequentially increasing.
+
+Once a video session parameters object is no longer needed (and is no longer used by any pending command buffers), it can be destroyed with the following new command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
+    VkDevice                                    device,
+    VkVideoSessionParametersKHR                 videoSessionParameters,
+    const VkAllocationCallbacks*                pAllocator);
+----
+
+This extension does not define any parameter types. Instead, layered codec-specific extensions define those. Some codecs may not need parameters at all, in which case no video session parameters objects need to be created or managed.
+
+
+=== Command Buffer Commands
+
+This extension does not introduce any specific video coding operations, however, it does introduce new commands that can be recorded into video-capable command buffers (created from command pools that target queue families with video capabilities).
+
+Applications can record video coding operations into such a command buffer only within a _video coding scope_. The following new command begins such a video coding scope within the command buffer:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoBeginCodingInfoKHR*            pBeginInfo);
+----
+
+This command takes the following parameters:
+
+[source,c]
+----
+typedef struct VkVideoBeginCodingInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkVideoBeginCodingFlagsKHR            flags;
+    VkVideoSessionKHR                     videoSession;
+    VkVideoSessionParametersKHR           videoSessionParameters;
+    uint32_t                              referenceSlotCount;
+    const VkVideoReferenceSlotInfoKHR*    pReferenceSlots;
+} VkVideoBeginCodingInfoKHR;
+----
+
+The mandatory `videoSession` parameter specifies the video session object used to process the video coding operations within the video coding scope. As the video session object is a stateful object providing the device state context needed to perform video coding operations, portions of a video stream can be processed across multiple video coding scopes and multiple command buffers using the same video session object. It is typical, for example, to submit a single command buffer with a single video coding scope encapsulating a single video coding operation (let that be a video decode or encode operation) that performs the decompression or compression of a single video frame produced or consumed by other Vulkan commands.
+
+`videoSessionParameters` provides the optional parameters object to use with the video coding operations, depending on whether one is needed according to the codec-specific requirements.
+
+This command binds the specified video session and (if present) video session parameters objects to the command buffer for the duration of the video coding scope.
+
+In addition, the application can provide a list of reference picture resources, with initial information about which DPB slots they may be currently associated with. This information is provided through an array of the following new structure:
+
+[source,c]
+----
+typedef struct VkVideoReferenceSlotInfoKHR {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    int32_t                                 slotIndex;
+    const VkVideoPictureResourceInfoKHR*    pPictureResource;
+} VkVideoReferenceSlotInfoKHR;
+----
+
+The list of video picture resources provided here is needed because the `vkCmdBeginVideoScopeKHR` command also acts as a resource binding command, as the provided list defines the set of resources that can be used as reconstructed or reference pictures by video coding operations within the video coding scope.
+
+The DPB slot association information needs to be provided because it is the application's responsibility to maintain the association between DPB slot indices and corresponding video picture resources. If a video picture resource is not currently associated with any DPB slot, but it is planned to be associated with one within this video coding scope (e.g. by using it as the target of picture reconstruction), then it has to be included in the list with a negative `slotIndex` value, indicating that it is a bound reference picture resource, but one that is not currently associated with any DPB slot.
+
+The `vkCmdBeginVideoCodingKHR` command also allows the application to deactivate previously activated DPB slots. This can be done by passing the index of the DPB slot to deactivate in `slotIndex` but not specifying any associated picture resource(`pPictureResource = NULL`). Deactivating the DPB slot removes all associated reference pictures which allows the application to e.g. reuse or deallocate the corresponding memory resources.
+
+The associations between these bound video picture resources and DPB slots can also change during the course of the video coding scope in response to video coding operations.
+
+Control and state changing operations can be issued within a video coding scope with the following new command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
+----
+
+This extension introduces only a single control flag called `VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR` that is used to initialize the video session object. Before being able to record actual video coding operations against a bound video session object, it has to be initialized (reset) using this command by including the `VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR` flag. The reset operation also returns all DPB slots of the video session to the inactive state and removes any DPB slot index associations.
+
+After processing a video stream using a video session, the reset operation can also be used to return the video session back to the initial state. This enables reusing a single video session object to process different, independent video sequences.
+
+A video coding scope can be ended with the following new command:
+
+[source,c]
+----
+VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoEndCodingInfoKHR*              pEndCodingInfo);
+----
+
+
+=== Status Queries
+
+Compressing and decompressing video content is a non-trivial process that involves complex codec-specific semantics and requirements. Accordingly, it is possible for a video coding operation to fail when processing input content that is not conformant to the rules defined by the used video compression standard, thus determining whether a particular video coding operation completed successfully can only happen at runtime.
+
+In order to facilitate this, this extension also introduces a new `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` query type that enables getting feedback about the status of operations. Support for this new query type can be queried for each queue family index through the following new output structure:
+
+[source,c]
+----
+typedef struct VkQueueFamilyQueryResultStatusPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           queryResultStatusSupport;
+} VkQueueFamilyQueryResultStatusPropertiesKHR;
+----
+
+Quries also work slightly differently within a video coding scope due to the special behavior of video coding operations. Instead of a query being bound to the scope determined by the corresponding `vkCmdBeginQuery` and `vkCmdEndQuery` calls, in case of video coding each video coding operation consumes its own query slot. Thus if a command issues multiple video coding operations, then those may consume multiple subsequent query slots within the query pool. However, as no new commands are introduced by this extension to start queries with multiple activatable query slots, currently only a single video coding operation is allowed between a `vkCmdBeginQuery` and `vkCmdEndQuery` call.
+
+An unsuccessfully completed video coding operation may also have an effect on subsequently executed video coding operations against the same video session. In particular, if a video coding operation requests the setup (activation) of a DPB slot with a reference picture and that video coding operation completes unsuccessfully, then the corresponding DPB slot will end up having an invalid picture reference. This will cause subsequent video coding operations using reference pictures associated with that DPB slot to produce unexpected results, and may even cause such dependent video coding operations themselves to complete unsuccessfully in response to the invalid input data.
+
+Thus applications have to make sure that they use queries to determine the completion status of video coding operations in order to be able to detect if outputs may contain undefined data and potentially drop those, depending on the particular use case.
+
+The mechanisms introduced by the new query type are designed to be generic. While video coding scopes only allow using `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` queries (at least without layered extensions introducing further video-compatible query types), the new `VK_QUERY_RESULT_WITH_STATUS_BIT_KHR` bit can also be used with other query types, replacing the traditional boolean availability information with an enumeration based status value:
+
+[source,c]
+----
+typedef enum VkQueryResultStatusKHR {
+    VK_QUERY_RESULT_STATUS_ERROR_KHR = -1,
+    VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0,
+    VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1,
+    VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkQueryResultStatusKHR;
+----
+
+In general, when retrieving the result status of a query, negative values indicate some sort of failure (unsuccessful completion of operations) and positive values indicate success.
+
+
+=== Device Memory Management
+
+In this extension the application has complete control over how and when system resources are used. This extension provides the following tools to enable optimal usage of device and host memory resources:
+
+  * The application can manage the number of allocated output and input pictures, and can dynamically grow or shrink the DPB holding the reference pictures, based on the changing video content requirements.
+  * Individual video picture resources can be shared across different contexts, e.g. reference pictures can be shared between video decoding and encoding workloads, and the output of a video decode operation can be used as an input to a video encode operation.
+  * The images backing the video picture resources can also be used in other non-video-related operations, e.g. video decode operations may directly output to presentable swapchain images, or to images that can be subsequently sampled by graphics operations, subject to appropriate implementation capabilities.
+  * The application can also use sparse memory bindings for the images backing the video picture resources. The use of sparse memory bindings allows the application to unbind the device memory backing of the images when the corresponding DPB slot is not in active use.
+
+These general Vulkan capabilities enable this extension to provide seamless and efficient integration across different types of workloads in a "zero-copy" fashion and minimal synchronization overhead.
+
+
+=== Resource Creation
+
+This extension stores video picture resources in image objects. As the device memory requirements of video picture resources may be specific to the video profile used, when creating images with any video-specific usage the application has to provide information about the video profiles the image will be used with. As a single image may be reused across video sessions using different video profiles (e.g. to use the decoded output picture as an input picture to subsequent encode operations), the following new structure is introduced to provide a list of video profiles:
+
+[source,c]
+----
+typedef struct VkVideoProfileListInfoKHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    uint32_t                        profileCount;
+    const VkVideoProfileInfoKHR*    pProfiles;
+} VkVideoProfileListInfoKHR;
+----
+
+As multiple profiles are expected to be specified only in video transcoding use cases, the list can include at most one video decode profile and one or more video encode profiles.
+
+When an instance of this structure is included in the `pNext` chain of `VkImageCreateInfo` to a `vkCreateImage` call, the created image will be usable in video coding operations recorded against video sessions using any of the specified video profiles.
+
+Similarly, buffers used as the backing store for video bitstreams have to be created with the `pNext` chain of `VkBufferCreateInfo` including a profile list structure when calling `vkCreateBuffer` in order to make the resulting buffer compatible with video sessions using any of the specified video profiles.
+
+Query pools are also video-profile-specific. In particular, in order to create a `VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR` query pool compatible with a particular video profile, the application has to include an instance of the `VkVideoProfileInfoKHR` structure in the `pNext` chain of `VkQueryPoolCreateInfo`. Unlike buffers and images, query pools are not reusable across video sessions using different video profiles, hence the used structure is `VkVideoProfileInfoKHR` instead of `VkVideoProfileListInfoKHR`.
+
+
+=== Protected Content Support
+
+This extension also enables support of video coding operations using protected content. Whether a particular implementation supports coding protected content is indicated by the `VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR` capability flag.
+
+Just like in all other Vulkan operations using protected content, the resources participating in those must either all be protected or unprotected. This applies to the command buffer (and the command pool it is allocated from), to the queue the command buffer is submitted to, to the buffers and images used within those command buffers, as well as to the video session objects used for video coding.
+
+If the `VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR` capability flag is supported, the application can create protected-capable video sessions using the `VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR` flag.
+
+
+=== Capabilities
+
+The generic capabilities of the implementation for a given video profile can be queried using the following new command:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkVideoProfileInfoKHR*                pVideoProfile,
+    VkVideoCapabilitiesKHR*                     pCapabilities);
+----
+
+The output structure contains only common capabilities that are relevant for all video profiles:
+
+[source,c]
+----
+typedef struct VkVideoCapabilitiesKHR {
+    VkStructureType              sType;
+    void*                        pNext;
+    VkVideoCapabilityFlagsKHR    flags;
+    VkDeviceSize                 minBitstreamBufferOffsetAlignment;
+    VkDeviceSize                 minBitstreamBufferSizeAlignment;
+    VkExtent2D                   pictureAccessGranularity;
+    VkExtent2D                   minCodedExtent;
+    VkExtent2D                   maxCodedExtent;
+    uint32_t                     maxDpbSlots;
+    uint32_t                     maxActiveReferencePictures;
+    VkExtensionProperties        stdHeaderVersion;
+} VkVideoCapabilitiesKHR;
+----
+
+In particular, it contains information about the following:
+
+  * Buffer offset and (range) size requirements of the video bitstream buffer ranges
+  * Access granularity of video picture resources
+  * Minimum and maximum size of coded pictures
+  * Maximum number of DPB slots and active reference pictures
+  * Name and maximum supported version of the codec-specific video std headers
+
+While these capabilities are generic, each video profile may have its own set of capabilities. In addition, layered extensions will include additional capabilities specific to the type of video coding operation and video compression standard.
+
+The picture access granularity is something that the application has to particularly pay attention to. Video coding hardware can often access memory only at a particular granularity (block size) that may span multiple rows or columns of the picture data. This means that when a video coding operation writes data to a video picture resource it is possible that texels outside of the effective extents of the picture will also get modified. Writes to such padding texels will result in undefined texel values, thus the application has to make sure not to assume any particular values in these "shoulder" areas. This is especially important when the application chooses to reuse the same video picture resources to process video frames larger than the resource was previously used with. To avoid reading undefined values in such cases, applications should clear the image subresources used as video picture resources when the resolution of the video content changes, or otherwise ensure that these padding texels contain well-defined data (e.g. by writing to them) before being read from.
+
+Besides the global capabilities of a video profile, the set of image formats usable with video coding operations is also specific to each video profile. The following new query enables the application to enumerate the list and properties of the image formats supported by a given set of video profiles:
+
+[source,c]
+----
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
+    uint32_t*                                   pVideoFormatPropertyCount,
+    VkVideoFormatPropertiesKHR*                 pVideoFormatProperties);
+----
+
+The input to this query includes the needed image usage flags, which typically include some video-specific usage flags, and the list of video profiles provided through a `VkVideoProfileListInfoKHR` structure included in the `pNext` of the following new structure:
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceVideoFormatInfoKHR {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkImageUsageFlags    imageUsage;
+} VkPhysicalDeviceVideoFormatInfoKHR;
+----
+
+The query returns the following new output structure:
+
+[source,c]
+----
+typedef struct VkVideoFormatPropertiesKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkFormat              format;
+    VkComponentMapping    componentMapping;
+    VkImageCreateFlags    imageCreateFlags;
+    VkImageType           imageType;
+    VkImageTiling         imageTiling;
+    VkImageUsageFlags     imageUsageFlags;
+} VkVideoFormatPropertiesKHR;
+----
+
+Alongside the format and the supported image creation values/flags, `componentMapping` indicates how the video coding operations interpret the individual components of video picture resources using this format. For example, if the implementation produces video decode output with the `VK_FORMAT_G8_B8R8_2PLANE_420_UNORM` format where the blue and red chrominance channels are swapped then `componentMapping` will have the following values:
+
+[source,c]
+----
+components.r = VK_COMPONENT_SWIZZLE_B;        // Cb component
+components.g = VK_COMPONENT_SWIZZLE_IDENTITY; // Y component
+components.b = VK_COMPONENT_SWIZZLE_R;        // Cr component
+components.a = VK_COMPONENT_SWIZZLE_IDENTITY; // unused, defaults to 1.0
+----
+
+The query may return multiple `VkVideoFormatPropertiesKHR` entries with the same format, but otherwise different values for other members (e.g. with different image type or image tiling). In addition, a different set of entries may be returned depending on the input image usage flags specified, even for the same set of video profiles, for example, based on whether input, output, or DPB usage is requested.
+
+The application can select the parameters from a returned entry and use compatible parameters when creating images to be used as video picture resources with any of the video profiles provided in the input list.
+
+
+== Examples
+
+=== Select queue family with support for a given video codec operation and result status queries
+
+[source,c]
+----
+VkVideoCodecOperationFlagBitsKHR neededVideoCodecOp = ...
+uint32_t queueFamilyIndex;
+uint32_t queueFamilyCount;
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, NULL);
+
+VkQueueFamilyProperties2* props = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyProperties2));
+VkQueueFamilyVideoPropertiesKHR* videoProps = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyVideoPropertiesKHR));
+VkQueueFamilyQueryResultStatusPropertiesKHR* queryResultStatusProps = calloc(queueFamilyCount,
+    sizeof(VkQueueFamilyQueryResultStatusPropertiesKHR));
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    props[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+    props[queueFamilyIndex].pNext = &videoProps[queueFamilyIndex];
+
+    videoProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
+    videoProps[queueFamilyIndex].pNext = &queryResultStatusProps[queueFamilyIndex];
+
+    queryResultStatusProps[queueFamilyIndex].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyCount, props);
+
+for (queueFamilyIndex = 0; queueFamilyIndex < queueFamilyCount; ++queueFamilyIndex) {
+    if ((videoProps[queueFamilyIndex].videoCodecOperations & neededVideoCodecOp) != 0 &&
+        (queryResultStatusProps[queueFamilyIndex].queryResultStatusSupport == VK_TRUE)) {
+        break;
+    }
+}
+
+if (queueFamilyIndex < queueFamilyCount) {
+    // Found appropriate queue family
+    ...
+} else {
+    // Did not find a queue family with the needed capabilities
+    ...
+}
+----
+
+
+=== Check support and query the capabilities for a video profile
+
+[source,c]
+----
+VkResult result;
+
+VkVideoProfileInfoKHR profileInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,
+    .pNext = ... // pointer to additional profile information structures specific to the codec and use case
+    .videoCodecOperation = ... // used video codec operation
+    .chromaSubsampling = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
+    .lumaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
+    .chromaBitDepth = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR
+};
+
+VkVideoCapabilitiesKHR capabilities = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+    .pNext = ... // pointer to additional capability structures specific to the type of video coding operation and codec
+};
+
+result = vkGetPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &profileInfo, &capabilities);
+
+if (result == VK_SUCCESS) {
+    // Profile is supported, check additional capabilities
+    ...
+} else {
+    // Profile is not supported, result provides additional information about why
+    ...
+}
+----
+
+
+=== Enumerate supported formats for a video profile with a given usage
+
+[source,c]
+----
+uint32_t formatCount;
+
+VkVideoProfileInfoKHR profileInfo = {
+    ...
+};
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = 1,
+    .pProfiles = &profileInfo
+};
+// NOTE: Add any additional profiles to the list for e.g. video transcoding use cases
+
+VkPhysicalDeviceVideoFormatInfoKHR formatInfo = {
+    .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR,
+    .pNext = &profileListInfo,
+    .imageUsage = ... // expected image usage, e.g. DPB, input, or output
+};
+
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, NULL);
+
+VkVideoFormatPropertiesKHR* formatProps = calloc(formatCount, sizeof(VkVideoFormatPropertiesKHR));
+
+for (uint32_t i = 0; i < formatCount; ++i) {
+    formatProps.sType = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
+}
+
+vkGetPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &formatInfo, &formatCount, formatProps);
+
+for (uint32_t i = 0; i < formatCount; ++i) {
+    // Find format and image creation capabilities best suited for the use case
+    ...
+}
+----
+
+
+=== Create video session for a video profile
+
+[source,c]
+----
+VkVideoSessionKHR videoSession = VK_NULL_HANDLE;
+
+VkVideoSessionCreateInfoKHR createInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR,
+    .pNext = NULL,
+    .queueFamilyIndex = ... // index of queue family that supports the video codec operation
+    .flags = 0,
+    .pVideoProfile = ... // pointer to video profile information structure chain
+    .pictureFormat = ... // image format to use for input/output pictures
+    .maxCodedExtent = ... // maximum extent of coded pictures supported by the session
+    .referencePictureFormat = ... // image format to use for reference pictures (if used)
+    .maxDpbSlots = ... // DPB slot capacity to use (if needed)
+    .maxActiveReferencePictures = ... // maximum number of reference pictures used by any operation (if needed)
+    .pStdHeaderVersion = ... // pointer to the video std header information (typically the same as reported in the capabilities)
+};
+
+vkCreateVideoSession(device, &createInfo, NULL, &videoSession);
+----
+
+
+=== Query memory requirements and bind memory to a video session
+
+[source,c]
+----
+uint32_t memReqCount;
+
+vkGetVideoSessionMemoryRequirementsKHR(device, videoSession, &memReqCount, NULL);
+
+VkVideoSessionMemoryRequirementsKHR* memReqs = calloc(memReqCount, sizeof(VkVideoSessionMemoryRequirementsKHR));
+
+for (uint32_t i = 0; i < memReqCount; ++i) {
+    memReqs.sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR;
+}
+
+vkGetVideoSessionMemoryRequirementsKHR(device, videoSession, &memReqCount, memReqs);
+
+for (uint32_t i = 0; i < memReqCount; ++i) {
+    // Allocate memory compatible with the given memory binding
+    VkDeviceMemory memory = ...
+
+    // Bind the memory to the memory binding
+    VkBindVideoSessionMemoryInfoKHR bindInfo = {
+        .sType = VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR,
+        .pNext = NULL,
+        .memoryBindIndex = memReqs[i].memoryBindIndex,
+        .memory = ... // memory object to bind
+        .memoryOffset = ... // offset to bind
+        .memorySize = ... // size to bind
+    };
+
+    vkBindVideoSessionMemoryKHR(device, videoSession, 1, &bindInfo);
+}
+// NOTE: Alternatively, all memory bindings can be bound with a single call
+----
+
+
+=== Create and update video session parameters objects
+
+[source,c]
+----
+VkVideoSessionParametersKHR videoSessionParams = VK_NULL_HANDLE;
+
+VkVideoSessionParametersCreateInfoKHR createInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific parameters creation information
+    .flags = 0,
+    .videoSessionParametersTemplate = ... // template to use or VK_NULL_HANDLE
+    .videoSession = videoSession
+};
+
+vkCreateVideoSessionParametersKHR(device, &createInfo, NULL, &videoSessionParams);
+
+...
+
+VkVideoSessionParametersUpdateInfoKHR updateInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR,
+    .pNext = ... // pointer to codec-specific parameters update information
+    .updateSequenceCount = 1 // incremented for each subsequent update
+};
+
+vkUpdateVideoSessionParametersKHR(device, &videoSessionParams, &updateInfo);
+----
+
+
+=== Create bitstream buffer
+
+[source,c]
+----
+VkBuffer buffer = VK_NULL_HANDLE;
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = ... // number of video profiles to use the bitstream buffer with
+    .pProfiles = ... // pointer to an array of video profile information structure chains
+};
+
+VkBufferCreateInfo createInfo = {
+    .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
+    .pNext = &profileListInfo,
+    ... // buffer creation parameters including one or more video-specific usage flags
+};
+
+vkCreateBuffer(device, &createInfo, NULL, &buffer);
+----
+
+
+=== Create image and image view backing video picture resources
+
+[source,c]
+----
+VkImage image = VK_NULL_HANDLE;
+VkImageView imageView = VK_NULL_HANDLE;
+
+VkVideoProfileListInfoKHR profileListInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR,
+    .pNext = NULL,
+    .profileCount = ... // number of video profiles to use the image with
+    .pProfiles = ... // pointer to an array of video profile information structure chains
+};
+
+VkImageCreateInfo imageCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+    .pNext = &profileListInfo,
+    ... // image creation parameters including one or more video-specific usage flags
+};
+
+vkCreateImage(device, &imageCreateInfo, NULL, &image);
+
+VkImageViewUsageCreateInfo imageViewUsageInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
+    .pNext = NULL,
+    .usage = // video-specific usage flags
+};
+
+VkImageViewCreateInfo imageViewCreateInfo = {
+    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+    .pNext = &imageViewUsageInfo,
+    .flags = 0,
+    .image = image,
+    .viewType = ... // image view type (only 2D or 2D_ARRAY is supported)
+    ... // other image view creation parameters
+};
+
+vkCreateImageView(device, &imageViewCreateInfo, NULL, &imageView);
+----
+
+
+=== Record video coding operations into command buffers
+
+[source,c]
+----
+VkCommandBuffer commandBuffer = ... // allocate command buffer for a queue family supporting the video profile
+
+vkBeginCommandBuffer(commandBuffer, ...);
+...
+
+// Begin video coding scope with given video session, parameters, and reference picture resources
+VkVideoBeginCodingInfoKHR beginInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR,
+    .pNext = NULL,
+    .flags = 0,
+    .videoSession = videoSession,
+    .videoSessionParameters = videoSessionParams,
+    .referenceSlotCount = ...
+    .pReferenceSlots = ...
+};
+
+vkCmdBeginVideoCodingKHR(commandBuffer, &beginInfo);
+
+// Reset video session before starting to use it for video coding operations
+// (only needed when starting to process a new video stream)
+VkVideoCodingControlInfoKHR controlInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR,
+    .pNext = NULL,
+    .flags = VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR
+};
+
+vkCmdControlVideoCodingKHR(commandBuffer, &controlInfo);
+
+// Issue video coding operations against the video session
+...
+
+// End video coding scope
+VkVideoEndCodingInfoKHR endInfo = {
+    .sType = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR,
+    .pNext = NULL,
+    .flags = 0
+};
+
+vkCmdEndVideoCodingKHR(commandBuffer, &endInfo);
+
+...
+vkEndCommandBuffer(commandBuffer);
+----
+
+
+=== Create and use result status query pool with a video session
+
+[source,c]
+----
+VkQueryPool queryPool = VK_NULL_HANDLE;
+
+VkVideoProfileInfoKHR profileInfo = {
+    ...
+};
+
+VkQueryPoolCreateInfo createInfo = {
+    .sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
+    .pNext = &profileInfo,
+    .flags = 0,
+    .queryType = VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR,
+    ...
+};
+
+vkCreateQueryPool(device, &createInfo, NULL, &queryPool);
+
+...
+vkBeginCommandBuffer(commandBuffer, ...);
+...
+vkCmdBeginVideoCodingKHR(commandBuffer, ...);
+...
+vkCmdBeginQuery(commandBuffer, queryPool, 0, 0);
+// Issue video coding operation
+...
+vkCmdEndQuery(commandBuffer, queryPool, 0);
+...
+vkCmdEndVideoCodingKHR(commandBuffer, ...);
+...
+vkEndCommandBuffer(commandBuffer);
+...
+
+VkQueryResultStatusKHR status;
+vkGetQueryPoolResults(device, queryPool, 0, 1,
+                      sizeof(status), &status, sizeof(status),
+                      VK_QUERY_RESULT_WITH_STATUS_BIT_KHR);
+
+if (status == VK_QUERY_RESULT_STATUS_NOT_READY_KHR /* 0 */) {
+    // Query result not ready yet
+    ...
+} else if (status > 0) {
+    // Video coding operation was successful, enum values indicate specific success status code
+    ...
+} else if (status < 0) {
+    // Video coding operation was unsuccessful, enum values indicate specific failure status code
+    ...
+}
+----
+
+
+== Issues
+
+=== RESOLVED: What is within the scope of this extension?
+
+The goal of this extension is to include all infrastructure APIs that are shareable across all video coding use cases, including video decoding and video encoding, independent of the video compression standard used. While there is a large set of parameters and semantics that are specific to the particular video coding operation and video codec used, many fundamental concepts and APIs are common across those, including:
+
+  * The concept of video profiles that describe the video content and video coding use cases
+  * The concept of video picture resources and decoded picture buffers
+  * Queries that allow the application to determine if a video profile is supported, the capabilities of each video profile, and the supported video picture resource formats that can be used in conjunction with particular sets of video profiles
+  * Video session objects that provide the device state context for video coding operations
+  * Video session parameters objects that provide the means to reuse large sets of codec-specific parameters across video coding operations
+  * General command buffer commands and semantics to build command sequences working on video streams using a video session
+  * Feedback mechanisms that enable tracking the status of individual video coding operations
+
+These APIs are designed to be used in conjunction with layered extensions that introduce support for specific video coding operations and video compression standards.
+
+
+=== RESOLVED: Are Vulkan video profiles equivalent to the corresponding concepts of video compression standards?
+
+Not exactly. While they do encompass actual video compression standard profile information, they also contain other information related to the type of the video content and additional use case scenario specific information.
+
+The video coding operation and the used video compression standard is identified by bits in the new `VkVideoCodecOperationFlagBitsKHR` type. While this extension does not define any valid values, layered codec-specific extensions are expected to add corresponding bits in the form `VK_VIDEO_CODEC_OPERATION_<operationType>_<codec>_BIT`.
+
+
+=== RESOLVED: Do we need a query to be able to enumerate all supported video profiles?
+
+Enumerating individual video profiles is a non-trivial problem due to the parameter combinatorics and the interaction between individual parameters. As Vulkan video profiles also include additional use case scenario specific information, it gets even more complicated. It is also expected that most use cases (especially video decoding) will want to target specific video profiles anyway, so this extension does not include an enumeration API for video profiles, rather it provides the mechanisms to determine support for specific ones. Nonetheless, a more generic enumeration API is considered to be included in future extensions.
+
+
+=== RESOLVED: Do we need queries that allow determining how multiple video profiles can be used in conjunction?
+
+Video transcoding is an important use case, so this extension does allow queries and other APIs to take a list of video profiles, when applicable, that enable the application to determine how to use a particular set of video decode and video encode profiles in conjunction, and thus support video transcoding without the need to copy video picture data, when possible.
+
+
+=== RESOLVED: What kind of capabilitity queries do we need?
+
+First, this extension enables the application to query the video codec operations supported by each queue family with the new output structure `VkQueueFamilyVideoPropertiesKHR`.
+
+Second, the new `vkGetPhysicalDeviceVideoCapabilitiesKHR` command enables checking support for individual video profiles, and querying their general capabilities. This API also enables layered extensions to add new output structures to retrieve additional capabilities specific to the used video coding operation and video compression standard.
+
+Besides those, as the set of image formats and other image creation parameters compatible with video coding varies across video profiles, the new `vkGetPhysicalDeviceVideoFormatPropertiesKHR` command is introduced to query the set of image parameters that are compatible with a given set of video profiles and usage. In addition, the existing `vkGetPhysicalDeviceImageFormatProperties2` command is also extended to be able to take a list of video profiles as input to query video-specific image format capabilities.
+
+
+=== RESOLVED: What kind of command buffer commands do we need?
+
+This extension does not introduce any specific video coding operations (e.g. video decode or encode operations). However, it does introduce a set of command buffer commands that enable defining scopes within command buffers where layered extensions can record video coding operations against a specific video session to process a video sequence. These video coding scopes are delimited by the new `vkCmdBeginVideoCodingKHR` and `vkCmdEndVideoCodingKHR` commands.
+
+In addition, the `vkCmdControlVideoCodingKHR` command is introduced to allow layered extensions to modify dynamic context state, and control video session state in general.
+
+
+=== RESOLVED: How can the application get feedback about the status of video coding operations?
+
+This extension uses queries for the purpose and even introduces a new query type (`VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR`) that only includes status information. Layered extensions may also introduce other query types to enable retrieving any additional feedback that may be needed in the specific video coding use case.
+
+Such queries can be issued within video coding scopes using the existing `vkCmdBeginQuery` and `vkCmdEndQuery` commands (and its variants), however, the behavior of queries within video coding scopes is slightly different. Instead of a single query capturing the overall result of a series of commands, queries in video coding scopes produce separate results for each video coding operation, hence multiple video coding operations need to consume a separate query slot each.
+
+
+=== RESOLVED: Do we need to introduce new `vkCmdBeginQueryRangeKHR` and `vkCmdEndQueryRangeKHR` commands to allow capturing feedback about multiple video coding operations using a single scope?
+
+Not in this extension. For now each layered extension is expected to introduce commands that result in the issue of only a single video coding operation, hence using the existing `vkCmdBeginQuery` and `vkCmdEndQuery` commands to surround each such command separately is sufficient. However, future extensions may introduce such commands if needed.
+
+
+=== RESOLVED: Can resources be shared across video sessions, potentially ones using different video profiles?
+
+Yes, we need to support resource sharing at least for video bitstream buffers and video picture resources. This is important for the purposes of supporting efficient video transcoding.
+
+Subject to the capabilities of the implementation, buffers and image resources can be created to be shareable across video sessions by including the list of video profiles used by each video session in the object creation parameters.
+
+Query pools, however, are always specific to a video profile, as there is little use to share them across video sessions, and typically the contents of the query results are specific to the used video profile anyway.
+
+
+=== RESOLVED: How are video coding operations synchronized with respect to other Vulkan operations?
+
+Synchronization works in the same way as elsewhere in the API. Command buffers targeting video-capable queues can use `vkCmdPipelineBarrier` or any of the other synchronization commands both inside and outside of video coding scopes. While this extension does not include any new pipeline stages, access flags, or image layouts, the layered extensions introducing particular video coding operations do.
+
+
+=== RESOLVED: Why do some of the members of `VkVideoProfileInfoKHR` have `Flags` types instead of `FlagBits` types when only a single bit can be used?
+
+While this extension allows specifying only a single bit in the `chromaSubsampling`, `lumaBitDepth`, and `chromaBitDepth` members of `VkVideoProfileInfoKHR`, it is expected that future extensions may relax those requirements.
+
+
+=== RESOLVED: Can the application create video sessions with any `maxDpbSlots` and `maxActiveReferencePictures` values within the supported capabilities?
+
+Yes. While it is quite common for video compression standards to define these values, in particular a given video profile usually supports a specific value for the number of DPB slots and it is also typical for video compression standards to allow using all reference pictures associated with active DPB slots as active reference pictures in a video coding operation. However, depending on the specific use case, the application can choose to use lower values.
+
+For example, if the application knows that the video content always uses at most a single reference picture for each frame, and that it only ever uses a single DPB slot, using `1` as the value for both `maxDpbSlots` and `maxActiveReferencePictures` can enable the application to limit the memory requirements of the DPB.
+
+Nonetheless, it is the application's responsibility to make sure that it creates video sessions with appropriate values to be able to handle the video content at hand.
+
+
+=== RESOLVED: Are `VkVideoSessionParametersKHR` objects internally or externally synchronized?
+
+Video session parameters objects have special synchronization requirements. Typically they will only get updated by a single thread that processes the video stream but they may be consumed concurrently by multiple command buffer recording threads.
+
+Accordingly, they are defined to be logically internally synchronized, but in practice concurrent updates of the same object is disallowed by the requirement that the application has to increment the update sequence counter of the object with each update call. This model enables implementations to allow concurrent consumption of already stored parameters with minimal to no synchronization overhead.
+
+
+== Further Functionality
+
+This extension is meant to provide only common video coding functionality, thus support for individual video coding operations and video compression standards is left for extensions layered on top of the infrastructure provided here.
+
+Currently the following layered extensions are available:
+
+  * `VK_KHR_video_decode_queue` - adds general support for video decode operations
+  * `VK_KHR_video_decode_h264` - adds support for decoding H.264/AVC video sequences
+  * `VK_KHR_video_decode_h265` - adds support for decoding H.265/HEVC video sequences
+  * `VK_KHR_video_encode_queue` (provisional) - adds general support for video encode operations
+  * `VK_EXT_video_encode_h264` (provisional) - adds support for encoding H.264/AVC video sequences
+  * `VK_EXT_video_encode_h265` (provisional) - adds support for encoding H.265/HEVC video sequences
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_LUNARG_direct_driver_loading.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_LUNARG_direct_driver_loading.adoc
new file mode 100644
index 0000000..cac30fa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_LUNARG_direct_driver_loading.adoc
@@ -0,0 +1,176 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_LUNARG_direct_driver_loading
+
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+Adds an extension that allows applications to provide drivers to the loader during
+instance creation.
+
+== Problem Statement
+
+There are several uses cases that cause applications to want to ship a driver with
+themselves. Adding a fallback CPU driver is necessary in many web browsers to
+support hardware which does not support vulkan, as well as for testing
+infrastructure where hardware might not be available. While there are currently
+several desktop Vulkan Loader mechanisms that allow applications to provide
+drivers, they all suffer from various shortcomings. A non comprehensive list is
+detailed below.
+
+* Some require an installer to be run. This necessitates an uninstaller, as well
+as makes the driver 'global' to the system or user.
+* They may require elevated privileges to use, such as with an installer, or
+causes the solution to fail when running with elevated privileges, as with
+Environment Variables.
+
+== Current Solution Space
+
+* Installation to OS specific locations
+    a. Explicit installer and uninstaller needs to be run
+    b. Global to all applications
+    c. Requires elevated privileges in most cases
+* Environment Variables
+    a. Disabled when running with elevated privileges due to the security concerns
+    b. Tedious to setup since they require the full path to the driver manifest
+* MacOS Bundles -  Allows placing the .dylib inside a relocatable package, loader knows how to look in them
+    a. Not available for any other platform
+* Looking in current working directory
+    a. Disabled when running with elevated privileges, as that is an attack vector
+
+== Proposal
+
+`VK_LUNARG_direct_driver_loading` extends the pNext chain of
+link:{refpage}VkInstanceCreateInfo.html[VkInstanceCreateInfo] to provide a list
+of structures which contain the information needed by the loader to load the drivers.
+This is achieved by providing the driver's link:{refpage}vkGetInstanceProcAddr.html[vkGetInstanceProcAddr],
+bypassing the loaders need to use the systems dynamic linker to load the drivers functions.
+
+The extension also allows applications to use provided drivers exclusively, so that no
+drivers found on the system are loaded.
+
+This satisfies the requirements:
+
+ * Isolated from all other running processes.
+ * No installation required.
+ * Works when the application is running with elevated privileges.
+
+The intent of the extension is to be implemented in the desktop Vulkan-Loader.
+
+[source,c]
+----
+typedef struct VkDirectDriverLoadingInfoLUNARG {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkDirectDriverLoadingFlagsLUNARG        flags;
+    PFN_vkGetInstanceProcAddr               pfnGetInstanceProcAddr;
+} VkDirectDriverLoadingInfoLUNARG;
+
+typedef struct VkDirectDriverLoadingListLUNARG {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    VkDirectDriverLoadingModeLUNARG         mode;
+    uint32_t                                driverCount;
+    const VkDirectDriverLoadingInfoLUNARG*  pDrivers;
+} VkDirectDriverLoadingListLUNARG;
+
+typedef enum VkDirectDriverLoadingModeLUNARG {
+    VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0,
+    VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1,
+    VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF
+} VkDirectDriverLoadingModeLUNARG;
+----
+
+`VkDirectDriverLoadingModeLUNARG` allows applications to choose whether to load
+only the drivers they provide or include the drivers they provide with all of
+the drivers the Vulkan Loader finds on the system.
+
+There is a known defect with this extension. When the application queries the
+list of instance extensions, there is no way to provide to the Vulkan Loader the
+list of application provided drivers, to combine the driver's extensions with
+the extensions supported by the drivers and implicit layers on the system. As a
+workaround, applications can instead load the vkEnumerateInstanceExtensionProperties
+entrypoint from the provided drivers instead to get their list of extensions.
+
+This workaround has a known defect when all of the following is true:
+
+1. An application uses VK_LUNARG_direct_driver_loading to add drivers.
+2. A layer (that will be enabled) filters out unsupported extensions during
+calls to vkEnumerateInstanceExtensionProperties entrypoint.
+3. The application enables instance extensions in VkInstanceCreateInfo
+which are supported by the application provided driver but not the layer(s).
+
+As the application directly calls the driver's vkEnumerateInstanceExtensionProperties
+instead of the loader's, this prevents layers from being able to modify the list of
+extensions. Since the layer will not be able to filter out unsupported instance
+extensions, the layer may fail to work, cause bugs elsewhere, or crash.
+
+
+== Example Usage
+
+This example shows typical usage where the provided driver should be the ONLY driver found.
+It uses `VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG` to prevent the loader from loading
+any drivers on the system, useful for use when running under testing conditions.
+
+```c
+
+VkDirectDriverLoadingInfoLUNARG app_provided_driver{};
+app_provided_driver.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
+app_provided_driver.pfnGetInstanceProcAddr = /* address of drivers function pointer*/
+
+VkDirectDriverLoadingListLUNARG direct_driver_loading{};
+direct_driver_loading.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
+direct_driver_loading.mode = VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG; // Do not load any other drivers
+direct_driver_loading.driverCount = 1;
+direct_driver_loading.pDrivers = &app_provided_driver;
+
+VkInstanceCreateInfo instance_info{};
+instance_info.pNext = &direct_driver_loading;
+
+vkCreateInstance(&instance_info, NULL, inst);
+```
+
+== Issues
+
+=== RESOLVED: Global functions are not extensible
+
+Since this proposal allows adding drivers, and vkEnumerateInstanceExtensionProperties
+returns the list of extensions supported by drivers on the system, the application
+must either 'know' which extensions the provided drivers support or query them
+directly then manually enable the extensions in VkInstanceCreateInfo.
+While it is an adequate solution for most use cases, it does create a corner case
+when layers that modify the instance extension list are present. Fundamentally
+it is a problem with the design of extension enumeration and instance creation.
+While it is possible to add functionality to this extension which resolves the
+issue, it is better solved with its own extension since there are more issues
+with instance creation that need addressing than what this extension accomplishes.
+
+=== RESOLVED: Should this extension also handle layer loading?
+
+No, layers require significantly more information to be present for the loader
+to handle correctly, and have the same defect of global functions not being extensible.
+
+=== RESOLVED: Do drivers implement this extension?
+
+No, this would be implemented by the Vulkan Loader.
+
+=== RESOLVED: Are there any changes drivers need to make to allow being used in this extension?
+
+Partially, drivers do not need modification to work today. However, to support
+all of the features of the Loader-ICD interface, they will need to support the
+"Loader-ICD interface version 7". This version requires that all currently
+exported entry points in the Loader-ICD interface be queryable through
+vkGetInstanceProcAddr, which is simple addition.
+
+=== RESOLVED: What kinds of drivers are expected to be used with this extension?
+
+This extension is designed to be used with non-hardware drivers, such as software
+implementations like lavapipe and swiftshader, as well as API translation layers
+like MoltenVK. Trying to use this extension with hardware drivers is expressedly
+not intended and actively discouraged as hardware drivers require support by the
+Operating System and other system components that must be installed. Additionally
+the kernel components of hardware drivers are liable to change between versions
+rendering any user mode components useless after updates.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_MSFT_layered_driver.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_MSFT_layered_driver.adoc
new file mode 100644
index 0000000..0561f91
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_MSFT_layered_driver.adoc
@@ -0,0 +1,87 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Proposal Template
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document proposes an extension to allow the loader to understand
+driver layering, for improving physical device sorting.
+
+== Problem Statement
+
+The Vulkan loader is able to sort physical devices according to
+platform-specific criteria. For example, on Windows, the loader uses LUIDs
+to put physical devices in the same order as DXGI adapters. However, it is
+possible to have multiple Vulkan drivers that provide support for the same
+physical device, for example, where one is a "`native`" vendor-provided
+implementation and another is a "`layered`" implementation on top of a
+different API. Examples of layered implementations would include VulkanOn12
+(aka Dozen), layered on D3D12, and MoltenVK, layered on Metal.
+
+On a system where a physical device has two possible drivers, the sort
+order between them is currently unspecified. An ideal sort order
+should place any native/un-layered drivers sorted-before any layered
+drivers, as it should be expected that native drivers will provide more
+functionality and higher performance, since layering inherently adds
+overhead. But the loader has no way of knowing which driver to prefer.
+
+An additional problem that is not addressed by this specification is the
+case where you have multiple "`native`" drivers for a single physical device.
+In that case, the sort order remains unspecified, as a correct ordering
+between drivers is non-obvious.
+
+== Solution Space
+
+Options that were considered include:
+* Special-casing well-known layered drivers in the Vulkan loader.
+* Extending the Loader-ICD interface to identify layered drivers.
+* Providing an extension to allow layered drivers to self-identify.
+
+The latter solution is the more general, and also has the benefit of
+allowing applications to understand when they are running on a layered
+driver.
+
+== Proposal
+
+The following properties are exposed by the `VK_MSFT_layered_driver`
+extension:
+[source,c]
+----
+typedef enum VkLayeredDriverUnderlyingApiMSFT {
+    VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT,
+    VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT,
+} VkLayeredDriverUnderlyingApiMSFT;
+
+typedef struct VkPhysicalDeviceLayeredDriverPropertiesMSFT {
+    VkStructureType sType;
+    const void* pNext;
+    VkLayeredDriverUnderlyingApiMSFT underlyingAPI;
+} VkPhysicalDeviceLayeredDriverPropertiesMSFT;
+----
+
+Layered drivers should implement this extension. The Vulkan loader can then
+be updated to query for the this structure. If the `underlyingAPI` is not
+`NONE`, then the driver should be considered layered. The specific value of
+`underlyingAPI` is simply informational for applications to query if they
+so choose.
+
+== Issues
+
+=== RESOLVED: Is a string the right way to identify an underlying API?
+
+No, an enum is a much better solution. The same conclusion was already
+reached with the `VkDriverId` enum.
+
+== Further Functionality
+
+Additional properties of the layering implementation, such as underlying
+API object pointers, could be exposed, but considering that the nature of
+those will depend on the underlying API, it seems like those should be
+exposed via separate extensions, if at all.
+
+It might make sense to add things like driver version for the underlying
+driver, since the version information exposed through existing properties
+would refer to the version of layered implementation.
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_image_processing.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_image_processing.adoc
new file mode 100644
index 0000000..2012695
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_image_processing.adoc
@@ -0,0 +1,704 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+# VK_QCOM_image_processing
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+
+This document proposes a new extension that adds shader built-in functions and
+descriptor types for image processing.
+
+## Problem Statement
+
+GPUs commonly process images for a wide range of use-cases.  These include enhancement
+of externally sourced images (i.e., camera image enhancement),  post processing of GPU-rendered
+game content, image scaling, and image analysis (i.e., motion vector generation).  For common use-cases,
+the existing texture built-ins combined with bilinear/bicubic filtering work well.  In other cases,
+higher-order filtering kernels or advanced image algorithms are required.
+
+While such algorithms could be implemented in shader code generically using existing texture
+built-in functions, it requires many round-trips between the texture unit and shader unit.
+The latest Adreno GPUs have dedicated HW shader instructions for such image processing tasks,
+enabling advanced functionality with simplified shader code.   For some use-cases, significant
+performance and power savings are possible using dedicated texture sampling instructions.
+
+## Solution Space
+
+Adreno GPUs have native support for multiple image processing instructions:
+
+* High-order (up to 64x64 kernel) filters with user-supplied weights, and sub-texel phasing support
+* High-order (up to 64x64) box filtering with HW-computed weights, and fractional box sizes
+* Block Matching (up to 64x64) pixel regions across images
+
+These capabilities are currently not exposed in Vulkan.  Exposing these instructions would
+provide a significant increase in functionality beyond current SPIR-V texture built-ins.
+Adreno GPUs exposing this extension perform the above algorithms fully inside the texture
+unit, saving shader instructions cycles, memory bandwidth, and shader register space.
+
+## Proposal
+
+The extension exposes support for 3 new SPIR-V instructions:
+
+* `OpImageWeightedSampleQCOM`: This instruction performs a weighted texture sampling
+operation involving two images: the _sampled image_ and the _weight image_.  An MxN region of texels in the
+_sampled image_ are convolved with an MxN set of scalar weights provided in the _weight image_.  Large filter
+sizes up to 64x64 taps enable important use-cases like edge-detection, feature extraction,
+and anti-aliasing.
+** `Sub-pixel Weighting`:  Frequently the texture coordinates will not align with a texel center in the _sampled image_, and in such cases the kernel weights can be adjusted to reflect the sub-texel sample location.  Sub-texel weighting is supported, where the texel is subdivided into PxP sub-texels, called "phases", with unique weights per-phase.  Adreno GPUs support up to 32x32 phases.
+** `Separable-filters`: Many common 2D image filtering kernels can be expressed as a mathematically equivalent 1D separable kernel.  Separable filters offer significant performance/power savings over their non-separable equivalent.  This instruction supports both separable and non-separable filtering kernels.
+* `OpImageBoxFilterQCOM`: This instruction performs weighted average of the texels within a screen-aligned box.  The operation is similar to bi-linear filtering, except the region of texels is not limited to 2x2. The instruction includes a `BoxSize` parameter, with fractional box sizes up to [64.0, 64.0].  Similar to bi-linear filtering, the implementation computes a weighted average for all texels covered by the box, with the weight for each texel proportional covered area. Large box sizes up to 64x64 enable important use-cases like bulk mipmap generation and high quality single-pass image down-scaling with arbitrary scaling ratios (e.g. thumbnail generation).
+* `opImageBlockMatchSAD` and `code:opImageBlockMatchSSD`: These instructions perform a block matching operation involving two images: the _target image_ and _reference image_.   The instruction takes two sets of integer texture coordinates, and an integer `BlockSize` parameter.  An MxN region of texels in the _target image_ is compared with an MxN region in the _reference image_.  The instruction returns a per-component error metric describing the difference between the two regions.  The SAD returns the sum of the absolute errors and SSD returns the sum of the squared differences.
+
+Each of the image processing instructions operate only on 2D images.  The instructions
+do not-support sampling of mipmap, multi-plane, multi-layer, multi-sampled, or depth/stencil
+images.  The new instructions can be used in any shader stage.
+
+Exposing this functionality in Vulkan makes use of a corresponding SPIR-V extension, and the built-ins
+will be exposed in high-level languages (e.g., GLSL) via related extensions.
+
+
+### SPIR-V Built-in Functions
+
+[cols="1,1,4*3",width="100%"]
+|====
+5+|*OpImageSampleWeightedQCOM* +
+ +
+Weighted sample operation +
+ +
+_Result Type_ is the type of the result of weighted sample operation
+ +
+_Texture Sampled Image_ must be an object whose type is OpTypeSampledImage. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Coordinate_ must be a vector of floating-point type, whose vector size is 2.
+ +
+_Weight Image_ must be an object whose type is OpTypeSampledImage decorated with WeightTextureQCOM. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+1+|Capability: +
+*TextureSampleWeightedQCOM*
+| 5 | XXX | <id> _Result Type_ | <<ResultId,'Result <id>' >> | <id> _Texture Sampled Image_ | <id> _Coordinate_ | <id> _Weight Sampled Image_
+|====
+
+[cols="1,1,4*3",width="100%"]
+|====
+5+|*OpImageBoxFilterQCOM* +
+ +
+Image box filter operation. +
+ +
+_Result Type_ is the type of the result of image box filter operation
+ +
+_Texture Sampled Image_ must be an object whose type is OpTypeSampledImage. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Coordinate_ must be a vector of floating-point type, whose vector size is 2.
+ +
+_Box Size_ must be a vector of floating-point type, whose vector size is 2 and signedness is 0.
+ +
+1+|Capability: +
+*TextureBoxFilterQCOM*
+| 5 | XXX | <id> _Result Type_ | <<ResultId,'Result <id>' >> | <id> _Texture Sampled Image_ | <id> _Coordinate_ | <id> _Box Size_
+|====
+
+[cols="1,1,6*3",width="100%"]
+|====
+7+|*OpImageBlockMatchSADQCOM* +
+ +
+Image block match sum of absolute differences. +
+ +
+_Result Type_ is the type of the result of image block match sum of absolute differences
+ +
+_Target Sampled Image_ must be an object whose type is OpTypeSampledImage decorated with BlockMatchTextureQCOM. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Target Coordinate_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+_Reference Sampled Image_ must be an object whose type is OpTypeSampledImage decorated with BlockMatchTextureQCOM. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Reference Coordinate_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+_Block Size_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+1+|Capability: +
+*TextureBlockMatchQCOM*
+| 7 | XXX | <id> _Result Type_ | <<ResultId,'Result <id>' >> | <id> _Target Sampled Image_ | <id> _Target Coordinate_ | <id> _Reference Sampled Image_ | <id> _Reference Coordinate_ | <id> _Block Size_
+|====
+
+[cols="1,1,6*3",width="100%"]
+|====
+7+|*OpImageBlockMatchSSDQCOM* +
+ +
+Image block match sum of square differences. +
+ +
+_Result Type_ is the type of the result of image block match sum of square differences
+ +
+_Target Sampled Image_ must be an object whose type is OpTypeSampledImage decorated with BlockMatchTextureQCOM. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Target Coordinate_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+_Reference Sampled Image_ must be an object whose type is OpTypeSampledImage decorated with BlockMatchTextureQCOM. The MS operand of the
+underlying OpTypeImage must be 0.
+ +
+_Reference Coordinate_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+_Block Size_ must be a vector of integer type, whose vector size is 2 and signedness is 0.
+ +
+1+|Capability: +
+*TextureBlockMatchQCOM*
+| 7 | XXX | <id> _Result Type_ | <<ResultId,'Result <id>' >> | <id> _Target Sampled Image_ | <id> _Target Coordinate_ | <id> _Reference Sampled Image_ | <id> _Reference Coordinate_ | <id> _Block Size_
+|====
+
+The extension adds two new SPIR-V decorations
+--
+[options="header"]
+|====
+2+^| Decoration 2+^| Extra Operands     ^| Enabling Capabilities
+| 4487 | *WeightTextureQCOM* +
+Apply to a texture used as 'Weight Image' in OpImageSampleWeightedQCOM.  Behavior is defined by the runtime environment.
+2+| | *TextureWeightedSampleQCOM*
+| 4488 | *BlockMatchTextureQCOM* +
+Apply to textures used as 'Target Sampled Image' and 'Reference Sampled Image' in OpImageBlockMatchSSDQCOM/OpImageBlockMatchSADQCOM. +
+Behavior is defined by the runtime environment.
+2+| | *TextureBlockMatchQCOM*
+|====
+--
+
+This functionality is gated behind 3 SPIR-V capabilities:
+
+[options="header"]
+|====
+2+^| Capability ^| Implicitly declares
+| XXXX | *TextureSampleWeightedQCOM* +
+Add weighted sample operation. |
+|====
+|====
+2+^| Capability ^| Implicitly declares
+| XXXX | *TextureBoxFilterQCOM* +
+Add box filter operation. |
+|====
+|====
+2+^| Capability ^| Implicitly declares
+| XXXX | *TextureBlockMatchQCOM* +
+Add block matching operation (sum of absolute/square differences). |
+|====
+
+
+### High Level Language Exposure
+
+The following summarizes how the built-ins are exposed in GLSL:
+[source,c]
+----
+    +------------------------------------+--------------------------------------------+
+    | Syntax                             | Description                                |
+    +------------------------------------+--------------------------------------------+
+    |   vec4 textureWeightedQCOM(        | weighted sample operation multiplies       |
+    |       sampler2D tex,               | a 2D kernel of filter weights with a corr- |
+    |       vec2      P,                 | esponding region of sampled texels and     |
+    |       sampler2DArray weight)       | sums the results to produce the output     |
+    |                                    | value.                                     |
+    +------------------------------------+--------------------------------------------+
+    |   vec4 textureBoxFilterQCOM(       | Linear operation taking average of pixels  |
+    |       sampler2D tex,               | within the spatial region described by     |
+    |       vec2      P,                 | boxSize.  The box is centered at coordinate|
+    |       vec2      boxSize)           | P and has width and height of boxSize.x    |
+    |                                    | and boxSize.y.                             |
+    +------------------------------------+--------------------------------------------+
+    |   vec4 textureBlockMatchSADQCOM(   | Block matching operation measures the      |
+    |       sampler2D target             | correlation (or similarity) of the target  |
+    |       uvec2     targetCoord,       | block and reference block.  TargetCoord    |
+    |       sampler2D reference,         | and refCoord specify the bottom-left corner|
+    |       uvec2     refCoord,          | of the block in target and reference       |
+    |       uvec2     blockSize)         | images. The error metric is the Sum of     |
+    |                                    | Absolute Differences(SAD).                 |
+    +------------------------------------+--------------------------------------------+
+    |   vec4 textureBlockMatchSSDQCOM(   | Block matching operation measures the      |
+    |       sampler2D target             | correlation (or similarity) of the target  |
+    |       uvec2     targetCoord,       | block and reference block.  TargetCoord    |
+    |       sampler2D reference,         | and refCoord specify the bottom-left corner|
+    |       uvec2     refCoord,          | of the block in target and reference       |
+    |       uvec2     blockSize)         | images. The error metric is the Sum of     |
+    |                                    | Square Differences(SSD).                   |
+    +------------------------------------+--------------------------------------------+
+----
+
+### Features and Properties
+
+Support for weighted sampling, box filtering, and block matching operations are
+indicated by feature bits in a structure that extends
+link:{refpage}VkPhysicalDeviceFeatures2.html[VkPhysicalDeviceFeatures2].
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceImageProcessingFeaturesQCOM {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           textureSampleWeighted;
+    VkBool32           textureBoxFilter;
+    VkBool32           textureBlockMatch;
+} VkPhysicalDeviceImageProcessingFeaturesQCOM;
+----
+
+`textureSampleWeighted` indicates that the implementation supports SPIR-V modules
+declaring the `TextureSampleWeightedQCOM` capability.
+`textureBoxFilter` indicates that the implementation supports SPIR-V modules
+declaring the `TextureBoxFilterQCOM` capability.
+`textureBlockMatch` indicates that the implementation supports SPIR-V modules
+declaring the TextureBlockMatchQCOM capability.
+
+Implementation-specific properties are exposed in a structure that extends
+link:{refpage}VkPhysicalDeviceProperties2.html[VkPhysicalDeviceProperties2].
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceImageProcessingPropertiesQCOM {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxWeightFilterPhases;
+    VkExtent2D         maxWeightFilterDimension;
+    VkExtent2D         maxBlockMatchRegion;
+    VkExtent2D         maxBoxFilterBlockSize;
+} VkPhysicalDeviceImageProcessingPropertiesQCOM;
+----
+
+`maxWeightFilterPhases` is the maximum number of sub-pixel phases supported for `OpImageSampleWeightedQCOM`.
+`maxWeightFilterDimension` is the largest supported filter size (width and height) for `OpImageSampleWeightedQCOM`.
+`maxBlockMatchRegion` is the largest supported region size (width and height) for `OpImageBlockMatchSSDQCOM` and `OpImageBlockMatchSADQCOM`.
+`maxBoxFilterBlockSize` is the largest supported BoxSize (width and height) for `OpImageBoxFilterQCOM`.
+
+### VkSampler compatibility
+
+VkSampler objects created for use with the built-ins added with this extension
+must be created with `VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM`.
+Such samplers must not be used with the other existing `OpImage*` built-ins
+unrelated to this extension.  In practice, this means an application must create
+dedicated VkSamplers use use with this extension.
+
+The `OpImageSampleWeightedQCOM` and `OpImageSampleBoxFilterQCOM` built-ins
+support samplers with `unnormalizedCoordinates` equal to `VK_TRUE` or
+`VK_FALSE`.
+The `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSSDQCOM` require
+a sampler with `unnormalizedCoordinates` equal to `VK_TRUE`.
+
+All built-ins added with this extension support samplers with `addressModeU`
+and `addressModeV` equal to
+`VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE` or `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER`.
+If `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER` is used, the `borderColor` must be
+opaque black.
+
+All built-ins added with this extension support samplers with all
+link:{refpage}VkSamplerReductionMode.html[VkSamplerReductionModes].
+
+The other
+link:{refpage}VkSamplerCreateInfo.html[VkSamplerCreateInfo] parameters
+must be set to a default values but generally have no effect on the built-ins.
+
+### VkImage compatibility
+
+When creating a VkImage for compatibility with the new built-ins, the driver needs
+additional usage flags.  VkImages must be created with
+`VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM` when used as a _weight image_ with
+`OpImageSampleWeightedQCOM`.  VkImages must be created with
+`VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM` when used as a
+_reference image_ or _target image_ with `OpImageBlockMatchSADQCOM`
+or `OpImageBlockMatchSSDQCOM`.
+
+### Descriptor Types
+This extension adds two new descriptor Types:
+[source,c]
+----
+VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM
+VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM
+----
+
+`VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM` specifies a 2D image array descriptor
+for a _weight image_ can be used with OpImageSampleWeightedQCOM.  The corresponding
+VkImageView must have been created with `VkImageViewSampleWeightCreateInfoQCOM` in the
+pNext chain.
+
+`VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM` specifies a 2D image descriptor for the
+_reference image_ or _target image_ that can be used with `OpImageBlockMatchSADQCOM`
+or `OpImageBlockMatchSSDQCOM`.
+
+
+### VkFormat Support
+
+Implementations will advertise format support for this extension
+through the `linearTilingFeatures` or `optimalTilingFeatures` of
+link:{refpage}VkFormatProperties3.html[VkFormatProperties3]
+
+[source,c]
+----
+VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM
+VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
+VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
+VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
+----
+
+The SPIR-V `OpImageSampleWeightedQCOM` instruction takes two image parameters: the _weight image_ which holds weight values, and the _sampled image_ which holds the texels being sampled.
+
+* `VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM` specifies that the format is supported as a _weight image_ with `OpImageSampleWeightedQCOM`.
+* `VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM` specifies that the format is supported as a _sampled image_ with `OpImageSampleWeightedQCOM`.
+
+The SPIR-V `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSADQCOM`  instructions take two image parameters: the _target image_ and the _reference image_.
+
+* `VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM` specifies that the format is supported as a _target image_ or _reference image_ with both `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSADQCOM`.
+
+The SPIR-V `OpImageBoxFilterQCOM`  instruction takes one image parameter, the _sampled image_.
+
+* `VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM` specifies that the format is supported as _sampled image_ with `OpImageBoxFilterQCOM`.
+
+
+### Weight Image Sampling
+
+The SPIR-V `OpImageSampleWeightedQCOM` instruction takes 3 operands: _sampled image_,
+_weight image_, and texture coordinates.  The instruction computes a weighted average
+of an MxN region of texels in the _sampled image_, using a set of MxN weights in the
+_weight image_.
+
+To create a VkImageView for the _weight image_, the
+link:{refpage}VkImageViewCreateInfo.html[VkImageViewCreateInfo] structure
+is extended to provide weight filter parameters.
+[source,c]
+----
+typedef struct VkImageViewSampleWeightCreateInfoQCOM {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkOffset2D         filterCenter;
+    VkExtent2D         filterSize;
+    uint32_t           numPhases;
+} VkImageViewSampleWeightCreateInfoQCOM;
+----
+
+The texture coordinates provided to `OpImageSampleWeightedQCOM`,
+combined with the `filterCenter` and `filterSize` selects a
+region of texels in the _sampled texture_:
+
+[source,c]
+----
+// let (u,v) be 2D unnormalized coordinates passed to `OpImageSampleWeightedQCOM`.
+// The lower-left-texel of the region has integer texel coordinates (i0,j0):
+i0 =  floor(u) - filterCenter.x
+j0 =  floor(v) - filterCenter.y
+
+// the upper-right texel of the region has integer coordinates (imax,jmax)
+imax = i0 + filterSize.width - 1
+jmax = j0 + filterSize.height - 1
+----
+
+If the sampler `reductionMode` is `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE` then the
+value of each texel in the region is multiplied by the associated value from the _weight
+texure_, and the resulting weighted average is summed for each component across all texels
+in the region.  Note that since the weight values are application-defined,
+their sum may be greater than 1.0 or less than 0.0, therefore the
+filter output for UNORM format may be greater than 1.0 or less than 0.0.
+
+If the sampler `reductionMode` is VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX,
+a component-wise minimum or maximum is computed, for all texels in the region with non-zero
+weights.
+
+#### Sub-texel weighting
+
+The _weight image_ can optionally provide sub-texel weights.  This feature
+is enabled by setting `numPhases` to a value greater than
+1.  In this case, _weight image_ specifies `numPhases` unique sets of
+`filterSize`.`width` x `filterSize`.`height` weights for each phase.
+
+The texels in the _sampled image_ are is subdivided
+both horizontally and vertically in to an NxN grid of sub-texel regions,
+or "phases".
+The number of horizontal and vertical subdivisions must be equal,
+must be a power-of-two.  `numPhases` is the product
+of the horizontal and vertical phase counts.
+
+For example, `numPhases` equal to 4 means that texel is divided into
+two vertical phases and two horizontal phases, and that the weight texture
+defines 4 sets of weights, each with a width and height as specified by
+`filterSize`.  The texture coordinate sub-texel location will determine
+which set of weights is used.
+The maximum supported values for `numPhases` and `filterSize` is specified by
+`VkPhysicalDeviceImageProcessingPropertiesQCOM` `maxWeightFilterPhases` and
+`maxWeightFilterDimension` respectively.
+
+#### Weight Image View Type
+
+The `OpImageSampleWeightedQCOM` _weight image_ created with
+`VkImageViewSampleWeightCreateInfoQCOM` must have a `viewType` of
+either `VK_IMAGE_VIEW_TYPE_1D_ARRAY` which indicates separable
+weight encoding, or `VK_IMAGE_VIEW_TYPE_2D_ARRAY` which indicates
+non-separable weight encoding as described below.
+
+The view type (1D array or 2D array) is the sole indication whether
+the weights are separable or non-separable -- there is no other API state nor any
+shader change to designate separable versus non-separable weight image.
+
+#### Non-Separable Weight Encoding
+
+For a non-separable weight filtering, the view will be type
+VK_IMAGE_VIEW_TYPE_2D_ARRAY.  Each layer of the 2D array
+corresponds to one phase of the filter.  The view's
+`VkImageSubresourceRange::layerCount` must be equal to
+`VkImageViewSampleWeightCreateInfoQCOM::numPhases`. The phases
+are stored as layers in the 2D array, in horizontal phase major
+order,  left-to-right and top-to-bottom. Expressed as a formula,
+the layer index for a each filter phase is computed as:
+
+[source,c]
+----
+layerIndex(horizPhase,vertPhase,horizPhaseCount) = (vertPhase * horizPhaseCount) + horizPhase
+----
+
+
+For each layer, the weights are specified by the value in texels [0, 0] to
+[`filterSize.width`-1, `filterSize.height`-1].
+While is valid for the view's VkImage to have width/height larger than `filterSize`,
+image texels with integer coordinates greater than or equal to `filterSize`
+are ignored by weight sampling.  Image property query instructions `OpImageQuerySize`,
+`OpImageQuerySizeLod`, `OpImageQueryLevels`, and `OpImageQuerySamples` return undefined
+values for a weight image descriptor.
+
+#### Separable Weight Encoding
+
+For a separable weight filtering, the view will be type VK_IMAGE_VIEW_TYPE_1D_ARRAY.
+Horizontal weights for all phases are packed in layer '0' and the vertical weights for
+all phases are packed in layer '1'.  Within each layer, the weights are arranged into
+groups of 4.  For each group, the weights are ordered by by phase. Expressed as a
+formula, the 1D texel offset for all weights and phases within each layer is computed as:
+
+[source,c]
+----
+// Let horizontal weights have a weightIndex of [0, filterSize.width - 1]
+// Let vertical weights have a weightIndex of [0, filterSize.height - 1]
+// Let phaseCount be the number of phases in either the vertical or horizontal direction.
+
+texelOffset(phaseIndex,weightIndex,phaseCount) = (phaseCount * 4 * (weightIndex / 4)) + (phaseIndex * 4) + (weightIndex % 4)
+----
+
+### Box Filter Sampling
+
+The SPIR-V `OpImageBoxFilterQCOM` instruction takes 3 operands: _sampled image_,
+_box size_, and texture coordinates.  Note that _box size_ specifies a floating point
+width and height in texels.  The instruction computes a weighted average of all texels
+in the _sampled image_ that are covered (either partially or fully) by a box with
+the specified size and centered at the specified texture coordinates.
+
+For each texel covered by the box, a weight value is computed by the implementation.
+The weight is proportional to the area of the texel covered.  Those texels that are
+fully covered by the box receive a weight of 1.0.  Those texels that are partially
+covered by the box receive a weight proportional to the covered area.  For example,
+a texel that has one one quarter of its area covered by the box will receive a
+weight of 0.25.
+
+If the sampler `reductionMode` is `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE` then the
+value of each covered texel is multiplied by the weight, and the resulting weighted
+average is summed for each component across all covered texels.  The resulting sum
+is then divided by the _box size_ area.
+
+If the sampler `reductionMode` is VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX,
+a component-wise minimum or maximum is computed, for all texels covered by the box,
+including texels that are partially covered.
+
+
+### Block Matching Sampling
+
+
+The SPIR-V `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSSDQCOM` instructions
+each takes 5 operands: _target image_, _target coordinates_, _reference image_,
+_reference coordinates_, and _block size_.  Each instruction computes an error
+metric, that describes whether a block of texels in the _target image_ matches
+a corresponding block of texels in the _reference image_.  The error metric
+is computed per-component.  `OpImageBlockMatchSADQCOM` computes "Sum Of Absolute
+Difference" and `OpImageBlockMatchSSDQCOM` computes "Sum of Squared Difference",
+but otherwise both instructions are similar.
+
+Both _target coordinates_ and _reference coordinates_ are integer texel coordinates
+of the lower-left texel of the block to be matched in the _target image_ and
+_reference image_ respectively.
+The _block size_ provides the height and width in integer texels of the regions to
+be matched.
+
+Note that the coordinates and _block size_ may result in a region that extends
+beyond the bounds of _target image_ or _reference image_.  For _target image_,
+this is valid and the  sampler `addressModeU` and `addressModeV` will determine
+the value of such texels.   For _reference image_ case this will result in undefined
+values returned.  The application must guarantee that the _reference region
+does not extend beyond the bounds of _reference image_.
+
+For each texel in the regions, a difference value is computed by subtracting the
+target value from the reference value.  `OpImageBlockMatchSADQCOM` computes the
+absolute value of the difference; this is the _texel error_.  `OpImageBlockMatchSSDQCOM`
+computes the square of the difference; this is the _texel error squared_.
+
+If the sampler `reductionMode` is `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE` then the
+_texel error_ or texel_error_squared for each texel in the region is summed for each
+component across all texels.
+
+If the sampler `reductionMode` is VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX,
+a component-wise minimum or maximum is computed, for all texels in the region.
+`OpImageBlockMatchSADQCOM` returns the minimum or maximum _texel error_ across
+all texels.    `OpImageBlockMatchSSDQCOM` returns the minimum or maximum _texel error_
+squared.   Note that `OpImageBlockMatchSSDQCOM` does not return the minimum or maximum
+of _texel error squared_.
+
+
+## Expected Features and limits
+
+Below are the properties, features, and formats that are expected to be advertised by a Adreno drivers supporting this extension:
+
+Features supported in VkPhysicalDeviceImageProcessingFeaturesQCOM:
+[source,c]
+----
+    textureSampleWeighted   = TRUE
+    textureBoxFilter        = TRUE
+    textureBlockMatch       = TRUE
+----
+
+Properties reported in VkPhysicalDeviceImageProcessingPropertiesQCOM
+[source,c]
+----
+    maxWeightFilterPhases       = 1024
+    maxWeightFilterDimension    = 64
+    maxBlockMatchRegion         = 64
+    maxBoxFilterBlockSize       = 64
+----
+
+
+Formats supported by _sampled image_ parameter to `OpImageSampleWeightedQCOM` and `OpImageBoxFilterQCOM`
+[source,c]
+----
+    VK_FORMAT_R8_UNORM
+    VK_FORMAT_R8_SNORM
+    VK_FORMAT_R8G8_UNORM
+    VK_FORMAT_R8G8B8A8_UNORM
+    VK_FORMAT_R8G8B8A8_SNORM
+    VK_FORMAT_A8B8G8R8_UNORM_PACK32
+    VK_FORMAT_A8B8G8R8_SNORM_PACK32
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32
+    VK_FORMAT_R16_SFLOAT
+    VK_FORMAT_R16G16_SFLOAT
+    VK_FORMAT_R16G16B16A16_SFLOAT
+    VK_FORMAT_B10G11R11_UFLOAT_PACK32
+    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+    VK_FORMAT_BC1_RGB_UNORM_BLOCK
+    VK_FORMAT_BC1_RGB_SRGB_BLOCK
+    VK_FORMAT_BC1_RGBA_UNORM_BLOCK
+    VK_FORMAT_BC1_RGBA_SRGB_BLOCK
+    VK_FORMAT_BC2_SRGB_BLOCK
+    VK_FORMAT_BC3_UNORM_BLOCK
+    VK_FORMAT_BC3_SRGB_BLOCK
+    VK_FORMAT_BC4_UNORM_BLOCK
+    VK_FORMAT_BC4_SNORM_BLOCK
+    VK_FORMAT_BC5_UNORM_BLOCK
+    VK_FORMAT_BC5_SNORM_BLOCK
+    VK_FORMAT_BC6H_UFLOAT_BLOCK
+    VK_FORMAT_BC6H_SFLOAT_BLOCK
+    VK_FORMAT_BC7_UNORM_BLOCK
+    VK_FORMAT_BC7_SRGB_BLOCK
+    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
+    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
+    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
+    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+    VK_FORMAT_EAC_R11_UNORM_BLOCK
+    VK_FORMAT_EAC_R11_SNORM_BLOCK
+    VK_FORMAT_EAC_R11G11_UNORM_BLOCK
+    VK_FORMAT_EAC_R11G11_SNORM_BLOCK
+    VK_FORMAT_ASTC_4x4_UNORM_BLOCK
+    VK_FORMAT_ASTC_4x4_SRGB_BLOCK
+    VK_FORMAT_ASTC_5x4_UNORM_BLOCK
+    VK_FORMAT_ASTC_5x4_SRGB_BLOCK
+    VK_FORMAT_ASTC_5x5_UNORM_BLOCK
+    VK_FORMAT_ASTC_5x5_SRGB_BLOCK
+    VK_FORMAT_ASTC_6x5_UNORM_BLOCK
+    VK_FORMAT_ASTC_6x5_SRGB_BLOCK
+    VK_FORMAT_ASTC_6x6_UNORM_BLOCK
+    VK_FORMAT_ASTC_6x6_SRGB_BLOCK
+    VK_FORMAT_ASTC_8x5_UNORM_BLOCK
+    VK_FORMAT_ASTC_8x5_SRGB_BLOCK
+    VK_FORMAT_ASTC_8x6_SRGB_BLOCK
+    VK_FORMAT_ASTC_8x8_UNORM_BLOCK
+    VK_FORMAT_ASTC_8x8_SRGB_BLOCK
+    VK_FORMAT_ASTC_10x5_UNORM_BLOCK
+    VK_FORMAT_ASTC_10x5_SRGB_BLOCK
+    VK_FORMAT_ASTC_10x6_UNORM_BLOCK
+    VK_FORMAT_ASTC_10x6_SRGB_BLOCK
+    VK_FORMAT_ASTC_10x8_UNORM_BLOCK
+    VK_FORMAT_ASTC_10x8_SRGB_BLOCK
+    VK_FORMAT_ASTC_10x10_UNORM_BLOCK
+    VK_FORMAT_ASTC_10x10_SRGB_BLOCK
+    VK_FORMAT_ASTC_12x10_UNORM_BLOCK
+    VK_FORMAT_ASTC_12x10_SRGB_BLOCK
+    VK_FORMAT_ASTC_12x12_UNORM_BLOCK
+    VK_FORMAT_ASTC_12x12_SRGB_BLOCK
+    VK_FORMAT_G8B8G8R8_422_UNORM
+    VK_FORMAT_B8G8R8G8_422_UNORM
+    VK_FORMAT_A4B4G4R4_UNORM_PACK16
+    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK
+    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK
+----
+
+Formats supported by _weight image_ parameter to `OpImageSampleWeightedQCOM`
+[source,c]
+----
+    VK_FORMAT_R8_UNORM
+    VK_FORMAT_R16_SFLOAT
+----
+
+Formats supported by _target image_ or _referenence image_ parameter to `OpImageBlockMatchSADQCOM` and `OpImageBlockMatchSSDQCOM`
+[source,c]
+----
+    VK_FORMAT_R8_UNORM
+    VK_FORMAT_R8G8_UNORM
+    VK_FORMAT_R8G8B8_UNORM
+    VK_FORMAT_R8G8B8A8_UNORM
+    VK_FORMAT_A8B8G8R8_UNORM_PACK32
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32
+    VK_FORMAT_G8B8G8R8_422_UNORM
+    VK_FORMAT_B8G8R8G8_422_UNORM
+----
+
+
+## Issues
+
+### RESOLVED:  Should this be one extension or 3 extensions?
+
+For simplicity, and since we expect this extension supported only for Adreno GPUs, we propose one extension with 3 feature bits.  The associated SPIR-V extension will have 3 capabilities.  The associated GLSL extension will have 3 extension strings.
+
+### RESOLVED:  How does this interact with descriptor indexing ?
+
+The new built-ins added by this extension support descriptor arrays and
+dynamic indexing, but only if the index is dynamically uniform.  The "update-after-bind"
+functionality is fully supported.  Non-uniform dynamic indexing is not supported.  There are no
+feature bits for an implementation to advertise support for dynamic indexing with the
+shader built-ins added in this extension.
+
+The new descriptor types for sample weight image and block match image count against
+the maxPerStageDescriptor[UpdateAfterBind]SampledImages and
+maxDescriptorSetUpdate[AfterBind]SampledImages limits.
+bind"
+
+### RESOLVED:  How does this extension interact with EXT_robustness2 ?
+
+These instructions do not support nullDescriptor feature of robustness2.  If any descriptor accessed by these
+instructions is not bound, undefined results will occur.
+
+### RESOLVED:  How does this interact with push descriptors ?
+
+The descriptors added by this extension can be updated using vkCmdPushDescriptors
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_tile_properties.adoc b/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_tile_properties.adoc
new file mode 100644
index 0000000..dec4a10
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/VK_QCOM_tile_properties.adoc
@@ -0,0 +1,184 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_QCOM_tile_properties
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+This document details API design ideas for the VK_QCOM_tile_properties extension, which allows application to query the tile properties. This extension supports both renderpasses and dynamic rendering.
+
+== Background
+
+Adreno GPUs uses a rendering technique called tiled rendering. In this technique, the attachments are divided into a uniform grid of small regions or "tiles". Tile size is shared by and affects all attachments in use. Splitting a render target into multiple chunks or tiles, and rendering each tile individually in order to reconstruct the full render target can be faster and more power-efficient.
+
+A typical tile size will be such that it is contained completely within the attachment but tiles can span outside the attachment's extent as well. This is because _Number of tiles = ceil(attachment_width / tile_width)_. Such tiles are called partially filled tiles and are less-efficient to render.
+
+In the case of fragment density map, a "local framebuffer region" and all fragments within it will share a value for "fragment area" determined from a corresponding texel in the fragment density map as described in "Fragment Area Conversion" section in the "Fragment Density Map Operations" chapter of the Vulkan specification. Implementations are also free to fetch additional texels within an implementation-defined window as described in "Fragment Area Filter" section of "Fragment Density Map Operations" chapter of the Vulkan specification. Adreno implementations utilize this behavior and will perform both windowing and fragment area assignment within a region defined by a "tile".
+
+The "tiles" exposed in this extension also each define a "framebuffer-local region" as described in the "Framebuffer Region Dependencies" section in the "Synchronization and Cache Control" chapter of the Vulkan specification.
+
+== Problem Statement
+
+Currently, developers do not know how the implementation is tiling their applications. Several application-controlled factors will implicitly influence the tile size, such as attachment resolution, number of attachments, formats, number of samples, etc.
+
+Adreno implementations will window and apply fragment density map values on a tile-basis. Currently, applications are unable to determine the size and location of tiles, preventing them from knowing how their fragment density map will be applied and the final fragment areas that will result.
+
+With regard to framebuffer-local dependencies, applications are unable to determine the size of the framebuffer-local region and thus must assume it is the size of a single fragment or sample. Due to this, applications must use framebuffer-global dependencies outside of single pixel or sample sized regions, possibly at the cost of efficiency.
+
+Another problem is that currently, applications are unable to align the renderArea with tile boundaries which would achieve the most efficient rendering. The command link:{refpage}vkGetRenderAreaGranularity.html[vkGetRenderAreaGranularity] does not allow implementations to fully describe the tiling grid and reported granularity is based solely on a renderpass.
+
+== Solution Space
+
+Create a new extension with API entrypoints that allows developer to query the tile properties.
+
+With the knowledge from this extension, applications can create fragment density maps that will apply in a more direct way to the final fragment areas in use, allowing more purposeful creation of maps.
+
+Information from this extension can also be used to determine the size and location of framebuffer-local regions, allowing applications to use local-region dependencies in place of framebuffer-global ones for potential increases in efficiency.
+
+== Proposal
+
+This extension introduces new API calls and a new struct:
+
+[source,c]
+----
+VKAPI_ATTR QGLENTRY_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM(
+    VkDevice                     device,
+    VkFramebuffer                vkFramebuffer,
+    uint32_t*                    pPropertiesCount,
+    VkTilePropertiesQCOM*        pProperties);
+----
+
+When using renderpasses, use the above command after framebuffer creation to query the tile properties from the framebuffer. `pPropertiesCount` is a pointer to an integer related to the number of `pProperties` available or queried. `pProperties` is a pointer to an array of `VkTilePropertiesQCOM` structure that holds the returned properties.
+If `pProperties` is NULL, then the total number of tile properties available is returned in `pPropertiesCount`. `pPropertiesCount` must point to a variable set by the user to the number of elements in the `pProperties` array, and on return the variable is overwritten with the number of properties actually written to `pProperties`. If `pPropertiesCount` is less than the number of `pProperties` available, at most `pPropertiesCount` structures will be written, and `VK_INCOMPLETE` will be returned instead of `VK_SUCCESS`, to indicate that not all the available tile properties were returned.
+
+The number of tile properties available is determined by the number of merged subpasses, and each tile property is associated with a merged subpass. There will be at most as many properties as there are subpasses within the render pass. To obtain the tile properties for a given merged subpass, the `pProperties` array can be indexed using the `postMergeIndex` value provided in link:{refpage}VkRenderPassSubpassFeedbackInfoEXT.html[VkRenderPassSubpassFeedbackInfoEXT].
+
+For dynamic rendering, a new API entrypoint is introduced because it does not have a framebuffer:
+
+[source,c]
+----
+VKAPI_ATTR QGLENTRY_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM(
+    VkDevice                     device,
+    const VkRenderingInfo*       pRenderingInfo,
+    VkTilePropertiesQCOM*        pProperties);
+----
+
+When using dynamic rendering, use the above command to query the tile properties. `pRenderingInfo` is a pointer to the `VkRenderingInfo` structure specifying details of the render pass instance in dynamic rendering. Tile properties are returned in `pProperties` which is a pointer to `VkTilePropertiesQCOM` structure that holds the available properties.
+
+Support for querying tile properties is indicated by feature bit in a
+structure that extends
+link:{refpage}VkPhysicalDeviceFeatures2.html[VkPhysicalDeviceFeatures2].
+
+[source,c]
+----
+typedef struct VkPhysicalDeviceTilePropertiesFeaturesQCOM {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           tileProperties;
+} VkPhysicalDeviceTilePropertiesFeaturesQCOM;
+----
+
+`tileProperties` indicates that the implementation supports queries for tile
+properties.
+
+A new structure is introduced to hold the tile properties.
+
+[source,c]
+----
+typedef struct VkTilePropertiesQCOM {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkExtent3D            tileSize;
+    VkExtent2D            apronSize;
+    VkOffset2D            origin;
+} VkTilePropertiesQCOM;
+----
+
+The reported value for `apronSize` will be zero and its functionality will be described in a future extension.
+
+`tileSize` describes the dimensions of a tile, with width and height describing the width and height of a tile
+in pixels, and depth corresponding to the number of slices the tile spans. All attachments share the same tile
+width and height.  The tile depth value reflects the maximum slice count of all in-use attachments.
+
+`origin` is top-left corner of the first tile in attachment space.
+
+All tiles will be tightly packed around the first tile, with edges being multiples of tile width and/or height from the origin.
+
+== Examples
+
+
+=== Query tile properties when using render pass
+
+[source,c]
+----
+uint32_t subpassCount = 2;
+
+VkTilePropertiesQCOM* tileProperties =
+  malloc(sizeof(VkTilePropertiesQCOM) * subpassCount);
+
+// `device` is a valid VkDevice handle
+// `hFramebuffer` is a handle to a valid VkFramebuffer object that we want to query
+vkGetFramebufferTilePropertiesQCOM(device, hFramebuffer, tileProperties, &subpassCount);
+----
+
+=== Query tile properties when using dynamic rendering
+
+[source,c]
+----
+VkRenderingInfoKHR renderingInfo = {
+    .sType = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
+    .pNext = NULL,
+    .flags = 0,
+    .renderArea = { ... },
+    .layerCount = 1,
+    .colorAttachmentCount = 2,
+    .pColorAttachments = colorAttachments,
+    .pDepthAttachment = &depthStencilAttachment,
+    .pStencilAttachment = &depthStencilAttachment };
+    
+    VkTilePropertiesQCOM tileProperties = {
+    .sType = VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM,
+    .pNext = NULL,
+    .... };
+
+// `device` is a valid VkDevice handle
+// `pRenderingInfo` is pointer to the `VkRenderingInfoKHR` struct that was passed to `vkCmdBeginRenderingKHR`
+vkGetDynamicRenderingTilePropertiesQCOM(device, pRenderingInfo, &tileProperties);
+----
+
+=== Interpreting tile size values
+
+  . If attachment dimensions are (768, 1440) and tile size returned is (768, 480) then it implies that there are three tiles in a (1 x 3) tile-grid. All tiles are full tiles contained within the attachment.
+
+  . If attachment dimensions are (720, 1440) and tile size returned is (768, 480) then it implies that there are three tiles in a (1 x 3) tile-grid. All tiles are _partially filled_ tiles as they span outside the attachment extent.
+
+  . If attachment dimensions are (1920, 1080) and tile size returned is (672, 576) then it implies that there are six tiles in a (3 x 2) tile-grid. Last tiles in each row and column are _partially filled_ tiles as they span outside the attachment extent.
+
+=== Interpreting origin values
+
+  . If returned origin is (0, 0) then the first tile's top-left corner is at the attachment's origin (0,0).
+  
+  . If returned origin is (-32, -64) and tile size is (768, 480), then tile boundaries in x will lie at -32, 736, 1504, ... and tile boundaries in y will lie at -64, 416, 896, ...".
+
+== Issues
+
+This section describes issues that came up during discussion and their resolution.
+
+
+=== RESOLVED: How to handle dynamic rendering?
+
+Since the extension should support both renderpasses and dynamic rendering, dedicated API entrypoints were added for both.
+
+=== RESOLVED: This extension returns only one set of dimensions for tile size so how to handle the case of non-merged subpasses where each subpass can have a different tile size?
+
+The extension was modified to return an array of tile properties which holds properties for all requested or available subpassses instead of single value for tile properties.
+
+=== RESOLVED: Adreno implementation may decide to execute certain workloads in direct rendering mode a.k.a Flex render. What is the interaction of this extension with Flex render?
+
+In those cases, the information returned by this extension may not indicate the true execution mode of the GPU.
+
+
+
+
diff --git a/codegen/vulkan/vulkan-docs-next/proposals/template.adoc b/codegen/vulkan/vulkan-docs-next/proposals/template.adoc
new file mode 100644
index 0000000..843e58a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/proposals/template.adoc
@@ -0,0 +1,69 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Proposal Template
+:toc: left
+:refpage: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/
+:sectnums:
+
+.How to use this document
+[NOTE]
+====
+This document outlines the expected flow of a proposal - text in the following sections is there as guidance for how to fill out each section.
+When creating a new proposal, text inside these sections (including this note!) should be removed and replaced with actual proposal text.
+
+Proposal documents are standalone and do not use the attributes and extensions associated with the specification - they should be independently buildable with Asciidoctor, which allows them to be previewed live on GitHub/GitLab.
+
+When calling out existing API constructs or extensions, the `refpage` attribute should be used to link to the relevant Khronos reference page.
+For example - "...used to extend link:{refpage}VkGraphicsPipelineCreateInfo.html[VkGraphicsPipelineCreateInfo]..."
+====
+
+A short summary of this proposal should be written here.
+
+== Problem Statement
+
+This section should detail the problem that is being addressed as succinctly as possible.
+Usually this comes in three parts:
+
+ . Setting the scene
+ . Bulleted list of problems
+ . (Optional) Describe peripheral issues
+  a. I.e. things this may enable solutions for, but does not directly address.
+
+Writing this section is a good opportunity to make sure you are not overreaching by trying to address too many problems at once.
+
+== Solution Space
+
+This section should briefly describe the options that have been considered (this is a good time to reconsider those options too!).
+
+Start with a bulleted list of the options, usually no more than a paragraph on each option and what the pros/cons of each are, then some sort of brief reason for picking the proposal you are about to make in section 3.
+
+== Proposal
+
+This section should be the most detailed – it should go into enough detail on specific points of the proposal that readers can understand it, but without being overly verbose.
+Typically, this section will be split into subsections describing different areas of the proposal.
+
+This should only describe the minimum viable proposal; all those extra things that you could put on top that do not necessarily fix the initial problem should move to section 5 (further functionality).
+They may make it into the final proposal, but it is important to give others the opportunity to evaluate these independently.
+
+== Examples
+
+Where relevant, add one or more examples of how this proposal will be used in practice.
+Some proposals that have limited external surface area (e.g. add a flag in a function call) may not require this but try to write motivating examples down where possible.
+This section is relatively freeform but should remain concise and to the point.
+Extraneous details in examples should be omitted (e.g. code examples do not need to compile).
+
+== Issues
+
+This section describes issues with the existing proposal – including both open issues that you have not addressed, and closed issues that are not self-evident from the proposal description.
+
+=== RESOLVED: How are issues written?
+
+Each issue should be a separate subsection starting with a question, an indication of the status (UNRESOLVED/PROPOSED/RESOLVED), discussion expanding on the question, and a proposal for resolving it if there is one.
+
+== Further Functionality
+
+This section is for anything that could be beneficial in the final solution, but may not be necessary to address the core problem.
+Subsections here will be like those in section 3 (Proposal) but offer additional background as to what peripheral problem they address, or benefit they provide.
+Writing this section is a good chance to re-evaluate if anything can or should be moved from section 3 to here, or just outright removed.
diff --git a/codegen/vulkan/vulkan-docs-next/registry.adoc b/codegen/vulkan/vulkan-docs-next/registry.adoc
new file mode 100644
index 0000000..ff17328
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/registry.adoc
@@ -0,0 +1,3210 @@
+// Copyright 2013-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Core versions and extensions to enable
+// Must be included before the header and attribs.adoc
+include::{generated}/specattribs.adoc[]
+
+= The Khronos^®^ Vulkan^®^ API Registry
+Jon Leech
+:data-uri:
+:icons: font
+:toc2:
+:toclevels: 3
+:numbered:
+:source-highlighter: rouge
+:rouge-style: github
+:doctype: book
+:imagewidth: 800
+:fullimagewidth: width="800"
+:attribute-missing: warn
+:cl: &#x3a;
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.adoc[]
+
+:leveloffset: 1
+
+<<<<
+
+include::{config}/copyright-ccby.adoc[]
+
+<<<<
+
+[[introduction]]
+= Introduction
+
+This document describes the Khronos Vulkan API Registry schema, and provides
+some additional information about using the registry and scripts to generate
+a variety of outputs, including C header files as well as several types of
+asciidoc include files used in the Vulkan API specification and reference
+pages.
+The underlying XML files and scripts are located on the Khronos public
+GitHub server at URL
+
+https://github.com/KhronosGroup/Vulkan-Docs
+
+The authoritative copy of the Registry is maintained in the default branch,
+currently `main`.
+
+The registry uses an XML representation of the Vulkan API, together with a
+set of Python scripts to manipulate the registry once loaded.
+The scripts rely on the Python `etree` package to parse and operate on XML.
+An XML schema and validator target are included.
+
+The schema is based on, but not identical to that used for the previously
+published OpenGL, OpenGL ES and EGL API registries.
+It was extended to represent additional types and concepts not needed for
+those APIs, such as structure and enumerant types, as well as additional
+types of registered information specific to Vulkan.
+
+The Vulkan C header files generated from the registry are checked into a
+separate repository under
+
+https://github.com/KhronosGroup/Vulkan-Headers/
+
+
+== Schema Choices
+
+The XML schema is not pure XML all the way down.
+In particular, command return types/names and parameters, and structure
+members, are described in mixed-mode tag containing C declarations of the
+appropriate information, with some XML nodes annotating particular parts of
+the declaration such as its base type and name.
+This choice is based on prior experience with the SGI `.spec` file format
+used to describe OpenGL, and greatly eases human reading and writing the
+XML, and generating C-oriented output.
+The cost is that people writing output generators for other languages will
+have to include enough logic to parse the C declarations and extract the
+relevant information.
+
+People who do not find the supplied Python scripts to suit their needs are
+likely to write their own parsers, interpreters, and/or converters operating
+on the registry XML.
+We hope that we have provided enough information in this document, the RNC
+schema (`registry.rnc`), and comments in the Registry (`vk.xml`) itself to
+enable such projects.
+If not and you need clarifications; if you have other problems using the
+registry; or if you have proposed changes and enhancements, then please file
+issues on Khronos' public GitHub project at
+
+https://github.com/KhronosGroup/Vulkan-Docs/issues
+
+Please tag your issues with `[Registry]` in the subject line to help us
+categorize them.
+
+
+[[introduction-normative]]
+== Normative References
+
+Normative references are references to external documents or resources to
+which documentation authors must comply.
+
+[[vulkan-styleguide]] Jon Leech and Tobias Hector.
+_Vulkan Documentation and Extensions: Procedures and Conventions_ (February
+26, 2023).
+https://registry.khronos.org/vulkan/specs/1.3/styleguide.html .
+
+[[vulkan-spec]] Khronos Vulkan Working Group.
+_Vulkan 1.3.242 - A Specification_ (February 26, 2023).
+https://registry.khronos.org/vulkan/ .
+
+
+[[starting]]
+= Getting Started
+
+See
+https://gitlab.khronos.org/vulkan/vulkan/blob/main/xml/README.adoc[`xml/README.adoc`]
+in the `Vulkan-Docs` repository for information on required toolchain
+components such as Python 3, pass:[g++], and GNU make.
+
+Once you have the right tools installed, perform the following steps:
+
+  * Check out the `Vulkan-Docs` repository linked above from Khronos GitHub
+    (there are instructions at the link)
+  * `cd` to the root directory in your checked-out repo
+  * Switch to the default branch (`main`).
+  * Invoke `make clean ; make install ; make test`
+
+This should regenerate `vulkan_core.h` and a variety of platform-specific
+headers, install them in `../include/vulkan/`, and verify that the headers
+build properly.
+If you build at the latest repository tag, the resulting headers should be
+identical to the latest versions in the
+link:https://github.com/KhronosGroup/Vulkan-Headers/[Vulkan-Headers
+repository].
+
+The `install` target also generates source code for a simple extension
+loader library in `../src/ext_loader/`.
+
+Other Makefile targets in `xml/` include:
+
+  * `validate` - validate `vk.xml` against the XML schema.
+    Recommended if you are making nontrivial changes.
+  * The asciidoc includes used by the <<vulkan-spec, Vulkan API
+    Specification>> and Reference Pages are built using the 'make generated'
+    target in the parent directory Makefile, although they use the scripts
+    and XML in this directory.
+    These files are generated dynamically when building the specs, since
+    their contents depend on the exact set of extensions the Specification
+    is being built to include.
+
+If you just want to modify the API, changing `vk.xml` and running `make`
+should be all that is needed.
+See <<examples>> for some examples of modifying the XML.
+
+If you want to use the registry for reasons other than generating the header
+file, extension loader, and asciidoc includes, or to generate headers for
+languages other than C, start with the Makefile rules and the files
+`vk.xml` and scripts `genvk.py`, `reg.py`, and `generator.py`.
+The scripts are described below and are all located in the `scripts`
+directory under the repository root.
+
+== Header Generation Script - `genvk.py`
+
+When generating header files using the `genvk.py` script, an API name and
+profile name are required, as shown in the Makefile examples.
+Additionally, specific API versions and extensions can be required or
+excluded.
+Based on this information, the generator script extracts the relevant
+interfaces and creates a C-language header file for them.
+`genvk.py` contains predefined generator options for the current
+<<vulkan-spec, Vulkan API Specification>> release.
+
+The generator script is intended to be generalizable to other languages by
+writing new generator classes.
+Such generators would have to rewrite the C types and definitions in the XML
+to something appropriate to their language.
+
+
+== Registry Processing Script - `reg.py`
+
+XML processing is done in `reg.py`, which contains several objects and
+methods for loading registries and extracting interfaces and extensions for
+use in header generation.
+There is some internal documentation in the form of comments, although
+nothing more extensive exists yet.
+
+
+== Output Generator Script - `generator.py`
+
+Once the registry is loaded, the `COutputGenerator` class defined in
+`generator.py` is used to create a header file.
+The `DocOutputGenerator` class is used to create the asciidoc include files.
+Output generators for other purposes can be added as needed.
+There are a variety of output generators included:
+
+  * `cgenerator.py` - generate C header file
+  * `docgenerator.py` - generate asciidoc includes for APIs
+  * `hostsyncgenerator.py` - generate host sync table includes for APIs
+  * `validitygenerator.py` - generate validity language includes
+  * `pygenerator.py` - generate a Python dictionary-based encoding of
+    portions of the registry, used during spec generation
+  * `extensionStubSource.py` - generate a simple C extension loader.
+
+
+[[schema]]
+= Vulkan Registry Schema
+
+The format of the Vulkan registry is a top level tag:registry tag containing
+tag:types, tag:enums, tag:commands, tag:feature, and tag:extension tags
+describing the different elements of an API, as explained below.
+This description corresponds to a formal Relax NG schema file,
+`registry.rnc`, against which the XML registry files can be validated.
+
+At present the only registry in this schema is the core Vulkan API registry,
+`vk.xml`.
+
+
+[[schema:profile]]
+== Profiles
+
+Types and enumerants can have different definitions depending on the API
+profile requested.
+This capability is not used in the current Vulkan API but may be in the
+future.
+Features and extensions can include some elements conditionally depending on
+the API profile requested.
+
+
+[[schema:apiname]]
+== API Names
+
+Specific API versions features and extensions can be tagged as belonging to
+to classes of features with the use of _API names_.
+This is intended to allow multiple closely-related API specifications in the
+same family - such as desktop and mobile specifications - to share the same
+XML.
+An API name is an arbitrary alphanumeric string, although it should be
+chosen to match the corresponding API.
+For example, Vulkan and OpenXR use `vulkan` and `openxr` as their API names,
+respectively.
+
+The attr:api attribute of the tag:feature tag and the attr:supported
+attribute of the tag:extensions tag must be comma-separated lists of one or
+more API names, all of which match that feature or extension.
+When generating headers and other artifacts from the XML, an API name may be
+specified to the processing scripts, causing the selection of only those
+features and extensions whose API names match the specified name.
+
+Several other tags for defining types and groups of types also support
+attr:api attributes.
+If present, the attribute value must be a comma-separated list of one or
+more API names.
+This allows specializing a definition for different, closely related APIs.
+
+
+[[schema:root]]
+= Registry Root (tag:registry Tag)
+
+A tag:registry contains the entire definition of one or more related APIs.
+
+== Attributes of tag:registry Tags
+
+None.
+
+== Contents of tag:registry Tags
+
+Zero or more of each of the following tags, normally in this order (although
+order should not be important):
+
+  * tag:comment - Contains arbitrary text, such as a copyright statement.
+  * <<tag-platforms,tag:platforms>> - defines platform names corresponding
+    to platform-specific <<tag-extension,API extensions>>.
+  * <<tag-tags,tag:tags>> - defines author IDs used for extensions and
+    layers.
+    Author IDs are described in detail in the "`Layers & Extensions`"
+    section of the "`Vulkan Documentation and Extensions: Procedures and
+    Conventions`" document.
+  * <<tag-types,tag:types>> - defines API types.
+    Usually only one tag is used.
+  * <<tag-enums,tag:enums>> - defines API token names and values.
+    Usually multiple tags are used.
+    Related groups may be tagged as an enumerated type corresponding to a
+    tag:type tag, and resulting in a C `enum` declaration.
+    This ability is heavily used in the Vulkan API.
+  * <<tag-commands,tag:commands>> - defines API commands (functions).
+    Usually only one tag is used.
+  * <<tag-feature,tag:feature>> - defines API feature interfaces (API
+    versions, more or less).
+    One tag per feature set.
+  * <<tag-extensions,tag:extensions>> - defines API extension interfaces.
+    Usually only one tag is used, wrapping many extensions.
+  * <<tag-formats,tag:formats>> - defines properties of image formats.
+    Only one tag is used, wrapping all the formats.
+  * <<tag-spirvextensions,tag:spirvextensions>> - defines relationship
+    between SPIR-V extensions and API interfaces which enable each
+    extension.
+    Only one tag is used, wrapping all the SPIR-V extensions.
+  * <<tag-spirvcapabilities,tag:spirvcapabilities>> - defines relationship
+    between SPIR-V capabilities and API interfaces which enable each
+    capability.
+    Only one tag is used, wrapping all the SPIR-V capabilities.
+  * <<tag-sync,tag:sync>> - Defines sync objects
+  * <<tag-syncstage,tag::syncstage>> - Defines all Pipeline Stages
+  * <<tag-syncaccess,tag::syncaccess>> - Defines all Access Types
+  * <<tag-syncpipeline,tag::syncpipeline>> - Defines Pipeline's logical ordering
+
+
+[[tag-comment]]
+=== Comment Tags (tag:comment Tag)
+
+A tag:comment tag contains an arbitrary string, and is unused.
+Comment tags may appear in multiple places in the schema, as described
+below.
+Comment tags are removed by output generators if they would otherwise appear
+in generated headers, asciidoc include files, etc.
+
+
+[[tag-platforms]]
+= Platform Name Blocks (tag:platforms Tag)
+
+A tag:platforms contains descriptions of platform IDs for platforms
+supported by window system-specific extensions to Vulkan.
+
+== Attributes of tag:platforms Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:platforms Tags
+
+Zero or more tag:platform tags, in arbitrary order (though they are
+typically ordered by sorting on the platform name).
+
+
+[[tag-platform]]
+= Platform Names (tag:platform Tag)
+
+A tag:platform tag describes a single platform name.
+
+== Attributes of tag:platform Tags
+
+  * attr:name - required.
+    The platform name.
+    This must be a short alphanumeric string corresponding to the platform
+    name, valid as part of a C99 identifier.
+    Lower-case is preferred.
+    In some cases, it may be desirable to distinguish a subset of platform
+    functionality from the entire platform.
+    In these cases, the platform name should begin with the entire platform
+    name, followed by `_` and the subset name.
++
+--
+[NOTE]
+.Note
+====
+For example,
+
+`name="xlib"`
+
+is used for the X Window System, Xlib client library platform.
+
+`name="xlib_xrandr"`
+
+is used for the XRandR functionality within the `xlib` platform.
+====
+--
+  * attr:protect - required.
+    This must be a C99 preprocessor token beginning with `VK_USE_PLATFORM_`
+    followed by the platform name, converted to upper case, followed by `_`
+    and the extension suffix of the corresponding window system-specific
+    extension supporting the platform.
++
+--
+[NOTE]
+.Note
+====
+For example,
+
+`protect="VK_USE_PLATFORM_XLIB_XRANDR_EXT"`
+
+is used for the `xlib_xrandr` platform name.
+====
+--
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:platform Tags
+
+No contents are allowed.
+All information is contained in the attributes.
+
+
+[[tag-tags]]
+= Author ID Blocks (tag:tags Tag)
+
+A tag:tags tag contains tag:authorid tags describing reserved author IDs
+used by extension and layer authors.
+
+== Attributes of tag:tags Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:tags Tags
+
+Zero or more tag:tag tags, in arbitrary order (though they are typically
+ordered by sorting on the author ID).
+
+
+[[tag-tag]]
+= Author IDs (tag:tag Tag)
+
+A tag:tag tag contains information defining a single author ID.
+
+== Attributes of tag:tag Tags
+
+  * attr:name - required.
+    The author ID, as registered with Khronos.
+    A short, upper-case string, usually an abbreviation of an author,
+    project or company name.
+  * attr:author - required.
+    The author name, such as a full company or project name.
+  * attr:contact - required.
+    The contact who registered or is currently responsible for extensions
+    and layers using the ID, including sufficient contact information to
+    reach the contact such as individual name together with email address,
+    GitHub username, or other contact information.
+
+== Contents of tag:tag Tags
+
+No contents are allowed.
+All information is contained in the attributes.
+
+
+[[tag-types]]
+= API Type Blocks (tag:types Tag)
+
+A tag:types tag contains definitions of derived types used in the API.
+
+== Attributes of tag:types Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:types Tags
+
+Zero or more tag:type and tag:comment tags, in arbitrary order (though they
+are typically ordered by putting dependencies of other types earlier in the
+list).
+The tag:comment tags are used mostly to indicate grouping of related types.
+
+
+[[tag-type]]
+= API Type (tag:type Tag)
+
+A tag:type tag contains information which can be used to generate C code
+corresponding to the type.
+In many cases, this is simply legal C code, with attributes or embedded tags
+denoting the type name and other types used in defining this type.
+In some cases, additional attribute and embedded type information is used to
+generate more complicated C types.
+
+== Attributes of tag:type Tags
+
+  * attr:requires - optional.
+    Another type name this type requires to complete its definition.
+  * attr:name - optional.
+    Name of this type (if not defined in the tag body).
+  * attr:alias - optional.
+    Another type name which this type is an alias of.
+    Must match the name of another tag:type element.
+    This is typically used when promoting a type defined by an extension to
+    a new core version of the API.
+    The old extension type is still defined, but as an alias of the new
+    type.
+  * attr:api - optional comma-separated list of <<schema:apiname, API names>>
+    for which this definition is specialized, so that different APIs may
+    have different definitions for the same type.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+  * attr:category - optional.
+    A string which indicates that this type contains a more complex
+    structured definition.
+    At present the only accepted categories are `basetype`, `bitmask`,
+    `define`, `enum`, `funcpointer`, `group`, `handle`, `include`, `struct`,
+    and `union`, as described below.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+  * attr:deprecated - optional.
+    Indicates that this type has been deprecated.
+    Possible values are:
+  ** `"true"` - deprecated, but no explanation given.
+  ** `"aliased"` - an old name not following Vulkan conventions.
+     The equivalent alias following Vulkan conventions should be used
+     instead.
+  * attr:parent - only applicable if `"category"` is `handle`.
+    Notes another type with the `handle` category that acts as a parent
+    object for this type.
+  * attr:returnedonly - only applicable if `"category"` is `struct` or
+    `union`.
+    Notes that this struct/union is going to be filled in by the API, rather
+    than an application filling it out and passing it to the API.
+  * attr:structextends only applicable if category is `struct` or `union`.
+    This is a comma-separated list of structures whose `pNext` can include
+    this type.
+    This should usually only list the top-level structure that is extended,
+    for all possible extending structures.
+    This will generate a validity statement on the top level structure that
+    validates the entire chain in one go, rather than each extending
+    structure repeating the list of valid structs.
+    There is no need to set the attr:noautovalidity attribute on the `pNext`
+    members of extending structures.
+  * attr:allowduplicate - only applicable if attr:category is `"struct"`.
+    If `"true"`, then structures whose `pNext` chains include this structure
+    may include more than one instance of it.
+  * attr:objtypeenum - only applicable at present if attr:category is
+    `"handle"`.
+    Specifies the name of a `VkObjectType` enumerant which corresponds to
+    this type.
+    The enumerant must be defined.
+
+== Contents of tag:type Tags
+
+The valid contents depend on the attr:category attribute.
+
+=== Enumerated Types - attr:category `"enum"`
+
+If the attr:category tag has the value `enum`, the type is a C enumeration.
+The body of the tag is ignored in this case.
+The value of the attr:name attribute must be provided and must match the
+attr:name attribute of a <<tag-enums,tag:enums>> tag.
+The enumerant values defined within the tag:enums tag are used to generate a
+C `enum` type declaration.
+
+=== Structure Types - attr:category `"struct"` or `"union"`
+
+If the attr:category tag has the values `struct` or `union`, the type is a C
+structure or union, respectively.
+In this case, the attr:name attribute must be provided, and the contents of
+the tag:type tag are a series of tag:member tags defining the members of the
+aggregate type, in order, interleaved with any number of tag:comment tags.
+
+==== Structure Member (tag:member) Tags
+
+The tag:member tag defines the type and name of a structure or union member.
+
+==== Attributes of tag:member Tags
+
+  * attr:api - optional <<schema:apiname, API names>> for which this
+    definition is specialized, so that different APIs may have different
+    definitions for the same type.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+  * attr:values - only valid on the `sType` member of a struct.
+    This is a comma-separated list of enumerant values that are valid for
+    the structure type; usually there is only a single value.
+  * attr: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 is just a pointer (used for nested pointers); or an
+    equation in math markup for incorporation in the specification (a LaTeX
+    math expression delimited by `latexmath:[` and `]`.
+    The only variables in the equation should be the names of members of the
+    structure.
+  * attr:altlen - if the attr:len attribute is specified, and contains a
+    `latexmath:` equation, this attribute should be specified with an
+    equivalent equation using only C builtin operators, C math library
+    function names, and variables as allowed for attr:len.
+    It must be a valid C99 expression whose result is equal to attr:len for
+    all possible inputs.
+    It is a comma separated list that has size equal to only the `latexmath`
+    item count in attr:len list.
+    This attribute is intended to support consumers of the XML who need to
+    generate validation code from the allowed length.
+  * attr:deprecated - optional.
+    Indicates that this member has been deprecated.
+    Possible values are:
+  ** `"true"` - deprecated, but no explanation given.
+  ** `"ignored"` - functionality described by this member no longer
+     operates.
+  * attr:externsync - denotes that the member should be externally
+    synchronized when accessed by Vulkan
+  * attr:optional - optional.
+    A value of `"true"` specifies that this member can be omitted by
+    providing `NULL` (for pointers), `VK_NULL_HANDLE` (for handles), or 0
+    (for other scalar types).
+    If not present, the value is assumed to be `"false"` (the member must
+    not be omitted).
+    If the member is a pointer to one of those types, multiple values may be
+    provided, separated by commas - one for each pointer indirection.
+    Structure members with name `pNext` must always be specified with
+    `optional="true"`, since there is no requirement that any member of a
+    `pNext` chain have a following member in the chain.
++
+--
+[NOTE]
+.Note
+====
+While the attr:optional attribute can be used for scalar types such as
+integers, it does not affect the output generators included with the
+<<vulkan-spec, Vulkan API Specification>>.
+In this case, the attribute serves only as an indicator to human readers of
+the XML.
+
+Explicitly specifying `optional="false"` is not supported, but
+`optional="false,true"` is supported for a pointer type.
+====
+--
+  * attr:selector - optional.
+    If the member is a union, attr:selector identifies another member of the
+    struct that is used to select which of that union's members are valid.
+  * attr:selection - optional.
+    For a member of a union, attr:selection identifies a value of the
+    attr:selector that indicates this member is valid.
+  * attr:noautovalidity - prevents automatic validity language being
+    generated for the tagged item.
+    Only suppresses item-specific validity - parenting issues etc.
+    are still captured.
+    It must also be used for structures that have no implicit validity when
+    such structure has explicit validity.
+  * attr:limittype - only applicable for members of
+    `VkFormatProperties`, `VkFormatProperties2`,
+    `VkPhysicalDeviceProperties`, `VkPhysicalDeviceProperties2`,
+    `VkPhysicalDeviceLimits`, `VkQueueFamilyProperties`,
+    `VkQueueFamilyProperties2`, `VkSparseImageFormatProperties`,
+    `VkSparseImageFormatProperties2`, and structures extending or members of
+    any of those structures.
+    Specifies the type of a device limit.
+    This type describes how a value might be compared with the value of a
+    member in order to check whether it fits the limit.
+    Valid values:
+  ** `"min"` and `"max"` denote minimum and maximum limits.
+     They may also apply to arrays and `VkExtent*D`.
+  ** `"pot"` denotes a value that has to be a power of two value.
+     They may also apply to arrays and `VkExtent*D`.
+  ** `"mul"` denotes a value that must be an integer multiple of this limit.
+     They may also apply to arrays and `VkExtent*D`.
+  ** `"bits"` corresponds to the bits precision of an implementation.
+  ** `"bitmask"` corresponds to bitmasks and `VkBool32`, where set bits
+     indicate the presence of a capability
+  ** `"range"` specifies a [min, max] range
+  ** `"struct"` means that the member's fields should be compared.
+  ** `"exact"` specifies a limit that must be a specific value.
+  ** `"noauto"` limits cannot be trivially compared.
+     This is the default value, if unspecified.
+  * attr:objecttype - only applicable for members which are `uint64_t`
+    values representing a Vulkan object handle.
+    Specifies the name of another member which must be a `VkObjectType` or
+    `VkDebugReportObjectTypeEXT` value specifying the type of object the
+    handle refers to.
+  * attr:stride - if the member is an array, stride specifies the name of
+    another member containing the byte stride between consecutive elements
+    in the array. Is assumed tightly packed if omitted.
+
+
+==== Contents of tag:member Tags
+
+The text elements of a tag:member tag, with all other tags removed, is a
+legal C declaration of a struct or union member.
+In addition it may contain several semantic tags:
+
+  * The tag:type tag is optional.
+    It contains text which is a valid type name found in another tag:type
+    tag, and indicates that this type must be previously defined for the
+    definition of the command to succeed.
+    Builtin C types should not be wrapped in tag:type tags.
+  * The tag:name tag is required, and contains the struct/union member name
+    being described.
+  * The tag:enum tag is optional.
+    It contains text which is a valid enumerant name found in another
+    tag:type tag, and indicates that this enumerant must be previously
+    defined for the definition of the command to succeed.
+    Typically this is used to semantically tag static array lengths.
+  * The tag:comment tag is optional.
+    It contains an arbitrary string (unused).
+
+
+=== All Other Types
+
+If the attr:category attribute is one of `basetype`, `bitmask`, `define`,
+`funcpointer`, `group`, `handle` or `include`, or is not specified, tag:type
+contains text which is legal C code for a type declaration.
+It may also contain embedded tags:
+
+  * tag:type - nested type tags contain other type names which are required
+    by the definition of this type.
+  * tag:apientry/ - insert a platform calling convention macro here during
+    header generation, used mostly for function pointer types.
+  * tag:name - contains the name of this type (if not defined in the tag
+    attributes).
+  * tag:bitvalues - contains the name of the enumeration defining flag
+    values for a `bitmask` type.
+    Ignored for other types.
+
+There is no restriction on which sorts of definitions may be made in a given
+category, although the contents of tags with attr:category `enum`, `struct`
+or `union` are interpreted specially as described above.
+
+However, when generating the header, types within each category are grouped
+together, and categories are generated in the order given by the following
+list.
+Therefore, types in a category should correspond to the intended purpose
+given for that category.
+If this recommendation is not followed, it is possible that the resulting
+header file will not compile due to out-of-order type dependencies.
+The intended purpose of each category is:
+
+  * `include` (`#include`) directives)
+  * `define` (macro `#define` directives)
+  * `basetype` (built-in C language types; scalar API typedefs, such as the
+    definition of `VkFlags`; and types defined by external APIs, such as an
+    underlying OS or window system
+  * `handle` (invocations of macros defining scalar types such as
+    `VkInstance`)
+  * `enum` (enumeration types and `#define` for constant values)
+  * `group` (currently unused)
+  * `bitmask` (enumeration types whose members are bitmasks)
+  * `funcpointer` (function pointer typedefs)
+  * `struct` and `union` together (struct and union types)
+
+
+[[tag-types:example]]
+== Example of a tag:types Tag
+
+[source,xml]
+--------------------------------------
+<types>
+    <type name="stddef">#include &lt;stddef.h&gt;</type>
+    <type requires="stddef">typedef ptrdiff_t <name>VKlongint</name>;</type>
+    <type name="VkEnum" category="enum"/>
+    <type category="struct" name="VkStruct">
+        <member><type>VkEnum</type> <name>srcEnum</name></member>
+        <member><type>VkEnum</type> <name>dstEnum</name></member>
+    </type>
+</types>
+
+<enums name="VkEnum" type="enum">
+    <enum value="0" name="VK_ENUM_ZERO"/>
+    <enum value="42" name="VK_ENUM_FORTY_TWO"/>
+</enums>
+--------------------------------------
+
+The `VkStruct` type is defined to require the types `VkEnum` and `VKlongint`
+as well.
+If `VkStruct` is in turn required by a command or another type during header
+generation, it will result in the following declarations:
+
+[source,c]
+--------------------------------------
+#include <stddef.h>
+typedef ptrdiff_t VKlongint.
+
+typedef enum {
+    VK_ENUM_ZERO = 0,
+    VK_ENUM_FORTY_TWO = 42
+} VkEnum;
+
+typedef struct {
+    VkEnum    dstEnum;
+    VkLongint dstVal;
+} VkStruct;
+--------------------------------------
+
+Note that the angle brackets around `stddef.h` are represented as XML
+entities in the registry.
+This could also be done using a CDATA block but unless there are many
+characters requiring special representation in XML, using entities is
+preferred.
+
+
+[[tag-enums]]
+= Enumerant Blocks (tag:enums Tag)
+
+The tag:enums tags contain individual tag:enum tags describing each of the
+token names used in the API.
+In some cases these correspond to a C `enum`, and in some cases they are
+simply compile time constants (e.g. `#define`).
+
+[NOTE]
+.Note
+====
+It would make more sense to call these `const` or `define` tags.
+This is a historical hangover from the OpenGL XML format which this schema
+was based on.
+====
+
+
+== Attributes of tag:enums Tags
+
+  * attr:name - optional.
+    String naming the C `enum` type whose members are defined by this enum
+    group.
+    If present, this attribute should match the attr:name attribute of a
+    corresponding tag:type tag.
+  * attr:type - optional.
+    String describing the data type of the values of this group of enums.
+    At present the only accepted categories are `enum` and `bitmask`, as
+    described below.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+  * attr:bitwidth - optional.
+    Bit width required for the generated enum value type.
+    If omitted, a default value of 32 is used.
+
+== Contents of tag:enums Tags
+
+Each tag:enums block contains zero or more tag:enum, tag:unused, and
+tag:comment tags, in arbitrary order (although they are typically ordered by
+sorting on enumerant values, to improve human readability).
+
+== Example of tag:enums Tags
+
+<<tag-types:example,An example>> showing a tag with attribute
+attr:type`="enum"` is given above.
+The following example is for non-enumerated tokens.
+
+[source,xml]
+--------------------------------------
+<enums>
+    <enum value="256" name="VK_MAX_EXTENSION_NAME"/>
+    <enum value="MAX_FLOAT"  name="VK_LOD_CLAMP_NONE"/>
+</enums>
+--------------------------------------
+
+When processed into a C header, and assuming all these tokens were required,
+this results in
+
+[source,c]
+--------------------------------------
+#define VK_MAX_EXTENSION_NAME   256
+#define VK_LOD_CLAMP_NONE       MAX_FLOAT
+--------------------------------------
+
+
+[[tag-enum]]
+= Enumerants (tag:enum Tag)
+
+Each tag:enum tag defines a single Vulkan (or other API) token.
+
+== Attributes of tag:enum Tags
+
+  * attr:value is a numeric value in the form of a legal C expression when
+    evaluated at compile time in the generated header files.
+    This is usually either a literal integer value or the name of an alias
+    for a previously defined value, though more complex expressions are
+    sometimes employed for <<compile-time-constants, compile time
+    constants>>.
+  * attr:bitpos is a literal integer bit position in a bitmask.
+    The bit position must be in the range [0,30] when used as a flag bit in
+    a `Vk*FlagBits` data type.
+    Bit positions 31 and up may be used for values that are not flag bits,
+    or for <<adding-bitflags, flag bits used with 64-bit flag types>>.
+    Exactly one of attr:value and attr:bitpos must be present in an tag:enum
+    tag.
+  * attr:name - required.
+    Enumerant name, a legal C preprocessor token name.
+  * attr:api - optional comma-separated list of <<schema:apiname, API
+    names>> for which this definition is specialized, so that different APIs
+    may have different values for the same token.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+  * attr:deprecated - optional.
+    Indicates that this enum has been deprecated.
+    Possible values are:
+  ** `"true"` - deprecated, but no explanation given.
+  ** `"ignored"` - functionality described by this enum no longer operates.
+  ** `"aliased"` - an old name not following Vulkan conventions.
+     The equivalent alias following Vulkan conventions should be used
+     instead.
+  * attr:type - may be used only when attr:value is specified.
+    In this case, attr:type is optional except when defining a
+    <<compile-time-constants, compile time constant>>, in which case it is
+    required when using some output generator paths.
+    If present the attribute must be a C scalar type corresponding to the
+    type of attr:value, although only `uint32_t`, `uint64_t`, and `float`
+    are currently meaningful.
+    attr:type is used by some output generators to generate constant
+    declarations, although the default behavior is to use C `#define` for
+    compile time constants.
+  * attr:alias - optional.
+    Name of another enumerant this is an alias of, used where token names
+    have been changed as a result of profile changes or for consistency
+    purposes.
+    An enumerant alias is simply a different attr:name for the exact same
+    attr:value or attr:bitpos.
+  * attr:protect - optional.
+    An additional preprocessor token used to protect an enum definition.
+
+[NOTE]
+.Note
+====
+Using attr:alias on a tag:enum means you want the attr:name defined by the
+tag to be treated as an alias of the token name in the attr:alias attribute
+value.
+For example, the following tag defines `VK_ALIAS` as an alias of `VK_VALUE`:
+
+[source,xml]
+--------------------------------------
+<enum name="VK_ALIAS" alias="VK_VALUE">
+--------------------------------------
+====
+
+[NOTE]
+.Note
+====
+In older versions of the schema, attr:type was described as allowing only
+the C integer suffix types `u` and `ull`, which is inconsistent with the
+current definition.
+However, attr:type was not actually used in the registry processing scripts
+or `vk.xml` at the time the current definition was introduced, so this is
+expected to be a benign change.
+====
+
+
+== Contents of tag:enum Tags
+
+tag:enum tags have no allowed contents.
+All information is contained in the attributes.
+
+
+[[tag-unused]]
+= Unused Enumerants (tag:unused Tag)
+
+Each tag:unused tag defines a range of enumerants which is allocated, but
+not yet assigned to specific enums.
+This just tracks the unused values for the Registrar's use, and is not used
+for header generation.
+
+[NOTE]
+.Note
+====
+tag:unused tags could be generated and inserted automatically, which would
+be a good way to avoid the attributes becoming out of date.
+However, they are rarely used in the Vulkan XML schema, unlike the OpenGL
+XML schema it was based on.
+====
+
+== Attributes of tag:unused Tags
+
+  * attr:start - required, attr:end - optional.
+    Integers defining the start and end of an unused range of enumerants.
+    attr:start must be {leq} attr:end.
+    If attr:end is not present, then attr:start defines a single unused
+    enumerant.
+    This range should not exceed the range reserved by the surrounding
+    tag:enums tag.
+  * attr:vendor - optional.
+    String describing the vendor or purposes to whom a reserved range of
+    enumerants is allocated.
+    Usually identical to the attr:vendor attribute of the surrounding
+    attr:enums block.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:unused Tags
+
+None.
+
+
+[[tag-commands]]
+= Command Blocks (tag:commands Tag)
+
+The tag:commands tag contains definitions of each of the functions
+(commands) used in the API.
+
+== Attributes of tag:commands Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:commands Tags
+
+Each tag:commands block contains zero or more tag:command tags, in arbitrary
+order (although they are typically ordered by sorting on the command name,
+to improve human readability).
+
+
+[[tag-command]]
+= Commands (tag:command Tag)
+
+The tag:command tag contains a structured definition of a single API command
+(function).
+
+== Attributes of tag:command Tags
+
+There are two ways to define a command.
+The first uses a set of attributes to the tag:command tag defining
+properties of the command used for constructing automatic validation rules,
+and the contents of the tag:command tag define the name, signature, and
+parameters of the command.
+In this case the allowed attributes include:
+
+  * attr:tasks - optional.
+    A string identifying the tasks this command performs, as described in
+    the "`Queue Operation`" section of the <<vulkan-spec, Vulkan API
+    Specification>>.
+    The format of the string is one or more of the terms `"action"`,
+    `"synchronization"`, `"state"`, and `"indirection"`, with multiple terms
+    separated by commas (`","`).
+  * attr:queues - optional.
+    A string identifying the command queues this command can be placed on.
+    The format of the string is one or more of the terms `"compute"`,
+    `"decode"`, `"encode"`, `"graphics"`, `"transfer"`, `"sparse_binding"`,
+    and `"opticalflow"`, with multiple terms separated by commas (`","`).
+  * attr:successcodes - optional.
+    A string describing possible successful return codes from the command,
+    as a comma-separated list of Vulkan result code names.
+  * attr:errorcodes - optional.
+    A string describing possible error return codes from the command, as a
+    comma-separated list of Vulkan result code names.
+  * attr:renderpass - optional.
+    A string identifying whether the command can be issued only inside a
+    render pass (`"inside"`), only outside a render pass (`"outside"`), or
+    both (`"both"`).
+  * attr:videocoding - optional.
+    A string identifying whether the command can be issued only inside a
+    video coding scope (`"inside"`), only outside a video coding scope
+    (`"outside"`), or both (`"both"`); the default is `"outside"` for
+    commands that do not specify it.
+  * attr:cmdbufferlevel - optional.
+    A string identifying the command buffer levels that this command can be
+    called by.
+    The format of the string is one or more of the terms `"primary"` and
+    `"secondary"`, with multiple terms separated by commas (`","`).
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+The second way of defining a command is as an alias of another command.
+For example when an extension is promoted from extension to core status, the
+commands defined by that extensions become aliases of the corresponding new
+core commands.
+In this case, only two attributes are allowed:
+
+  * attr:name - required.
+    A string naming the command defined by the tag.
+  * attr:alias - required.
+    A string naming the command that attr:name is an alias of.
+    The string must be the same as the attr:name value of another
+    tag:command defining another command.
+
+Both forms of tag:command support these options:
+
+  * attr:api - optional <<schema:apiname, API names>> for which this
+    definition is specialized, so that different APIs may have different
+    values for the same token.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+
+== Contents of tag:command Tags
+
+  * tag:proto is required and must be the first element.
+    It is a tag defining the C function prototype of a command as described
+    below, up to the function name and return type but not including
+    function parameters.
+  * tag:param elements for each command parameter follow, defining its name
+    and type, as described below.
+    If a command takes no arguments, it has no tag:param tags.
+
+Following these elements, the remaining elements in a tag:command tag are
+optional and may be in any order:
+
+  * tag:alias - optional.
+    Has no attributes and contains a string which is the name of another
+    command this command is an alias of, used when promoting a function from
+    vendor to Khronos extension or Khronos extension to core API status.
+    A command alias describes the case where there are two function names
+    which implement the same behavior.
+  * tag:description - optional.
+    Unused text.
+  * tag:implicitexternsyncparams - optional.
+    Contains a list of tag:param tags, each containing asciidoc source text
+    describing an object which is not a parameter of the command but is
+    related to one, and which also <<tag-command:param:attr,requires
+    external synchronization>>.
+    The text is intended to be incorporated into the API specification.
+
+[NOTE]
+.Note
+====
+Versions of the registry documentation prior to 1.1.93 asserted that command
+aliases "`resolve to the _same_ entry point in the underlying layer stack.`"
+Whilst this may be true on many implementations, it is not required - each
+command alias must be queried separately through `vkGetInstanceProcAddr`
+or `vkGetDeviceProcAddr`.
+====
+
+
+[[tag-command:proto]]
+== Command Prototype (tag:proto Tags)
+
+The tag:proto tag defines the return type and name of a command.
+
+=== Attributes of tag:proto Tags
+
+None.
+
+// attr:group - group name, an arbitrary string.
+//
+// If the group name is defined, it may be interpreted as described in
+// <<tag-group:meaning>>.
+
+=== Contents of tag:proto Tags
+
+The text elements of a tag:proto tag, with all other tags removed, is legal
+C code describing the return type and name of a command.
+In addition to text, it may contain two semantic tags:
+
+  * The tag:type tag is optional, and contains text which is a valid type
+    name found in a tag:type tag.
+    It indicates that this type must be previously defined for the
+    definition of the command to succeed.
+    Builtin C types, and any derived types which are expected to be found in
+    other header files, should not be wrapped in tag:type tags.
+  * The tag:name tag is required, and contains the command name being
+    described.
+
+
+[[tag-command:param]]
+== Command Parameter (tag:param Tags)
+
+The tag:param tag defines the type and name of a parameter.
+Its contents are very similar to the tag:member tag used to define struct
+and union members.
+
+
+[[tag-command:param:attr]]
+=== Attributes of tag:param Tags
+
+  * attr:api - optional <<schema:apiname, API names>> for which this
+    definition is specialized, so that different APIs may have different
+    definitions for the same type.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+  * attr:len - if the param is an array, len may be one or more of the
+    following things, separated by commas (one for each array indirection):
+    another param of that command; `"null-terminated"` for a string; `"1"`
+    to indicate it is just a pointer (used for nested pointers); or an
+    equation in math markup for incorporation in the specification (a LaTeX
+    math expression delimited by `latexmath:[` and `]`.
+    The only variables in the equation should be the names of this or other
+    parameters.
+  * attr:altlen - if the attr:len attribute is specified, and contains a
+    `latexmath:` equation, this attribute should be specified with an
+    equivalent equation using only C builtin operators, C math library
+    function names, and variables as allowed for attr:len.
+    It must be a valid C99 expression whose result is equal to attr:len for
+    all possible inputs.
+    It is a comma separated list that has size equal to only the `latexmath`
+    item count in attr:len list.
+    This attribute is intended to support consumers of the XML who need to
+    generate validation code from the allowed length.
+  * attr:optional - optional.
+    A value of `"true"` specifies that this parameter can be omitted by
+    providing `NULL` (for pointers), `VK_NULL_HANDLE` (for handles), or 0
+    (for other scalar types).
+    If not present, the value is assumed to be `"false"` (the parameter must
+    not be omitted).
+    If the parameter is a pointer to one of those types, multiple values may
+    be provided, separated by commas - one for each pointer indirection.
++
+--
+[NOTE]
+.Note
+====
+While the attr:optional attribute can be used for scalar types such as
+integers, it does not affect the output generators included with the
+<<vulkan-spec, Vulkan API Specification>>.
+In this case, the attribute serves only as an indicator to human readers of
+the XML.
+
+Explicitly specifying `optional="false"` is not supported, but
+`optional="false,true"` is supported for a pointer type.
+====
+--
+  * attr:selector - optional.
+    If the parameter is a union, attr:selector identifies another parameter
+    of the command that is used to select which of that union's members are
+    valid.
+  * attr:noautovalidity - prevents automatic validity language being
+    generated for the tagged item.
+    Only suppresses item-specific validity - parenting issues etc.
+    are still captured.
+  * attr:externsync - optional.
+    A value of `"true"` indicates that this parameter (e.g. the object a
+    handle refers to, or the contents of an array a pointer refers to) is
+    modified by the command, and is not protected against modification in
+    multiple app threads.
+    If only certain members of an object or elements of an array are
+    modified, multiple strings may be provided, separated by commas.
+    Each string describes a member which is modified.
+    For example, the `VkPresentInfoKHR` struct includes attr:externsync
+    attributes for the `pPresentInfo` array indicating that only specific
+    members of each element of the array are modified:
++
+--
+[source,xml]
+--------------------------------------
+<param externsync="pPresentInfo-&gt;pWaitSemaphores[],pPresentInfo-&gt;pSwapchains[]">const <type>VkPresentInfoKHR</type>* <name>pPresentInfo</name></param>
+--------------------------------------
+
+Parameters which do not have an attr:externsync attribute are assumed to not
+require external synchronization.
+--
+  * attr:objecttype - only applicable for parameters which are `uint64_t`
+    values representing a Vulkan object handle.
+    Specifies the name of another parameter which must be a `VkObjectType`
+    or `VkDebugReportObjectTypeEXT` value specifying the type of object the
+    handle refers to.
+  * attr:validstructs - optional.
+    Allowed only when the parameter type is a pointer to an abstract
+    `VkBaseInStructure` or `VkBaseOutStructure` type.
+    This is a comma-separated list of structures which can either be
+    passed as the parameter, or can appear anywhere in the `pNext` chain of
+    the parameter.
+
+
+=== Contents of tag:param Tags
+
+The text elements of a tag:param tag, with all other tags removed, is legal
+C code describing the type and name of a function parameter.
+In addition it may contain two semantic tags:
+
+  * The tag:type tag is optional, and contains text which is a valid type
+    name found in tag:type tag, and indicates that this type must be
+    previously defined for the definition of the command to succeed.
+    Builtin C types, and any derived types which are expected to be found in
+    other header files, should not be wrapped in tag:type tags.
+  * The tag:name tag is required, and contains the parameter name being
+    described.
+
+== Example of a tag:commands Tag
+
+[source,xml]
+--------------------------------------
+<commands>
+    <command>
+        <proto><type>VkResult</type> <name>vkCreateInstance</name></proto>
+        <param>const <type>VkInstanceCreateInfo</type>* <name>pCreateInfo</name></param>
+        <param><type>VkInstance</type>* <name>pInstance</name></param>
+    </command>
+</commands>
+--------------------------------------
+
+When processed into a C header, this results in
+
+[source,c]
+--------------------------------------
+VkResult vkCreateInstance(
+    const VkInstanceCreateInfo* pCreateInfo,
+    VkInstance* pInstance);
+--------------------------------------
+
+
+[[tag-feature]]
+= API Features and Versions (tag:feature Tag)
+
+API features are described in individual tag:feature tags.
+A feature is the set of interfaces (enumerants and commands) defined by a
+particular API and version, such as Vulkan 1.0, and includes all profiles of
+that API and version.
+
+== Attributes of tag:feature Tags
+
+  * attr:api - required comma-separated list of <<schema:apiname, API
+    names>> for which this feature is defined, such as `vulkan`.
+  * attr:name - required.
+    Version name, used as the C preprocessor token under which the version's
+    interfaces are protected against multiple inclusion.
+    Example: `"VK_VERSION_1_0"`.
+  * attr:number - required.
+    Feature version number, usually a string interpreted as
+    `majorNumber.minorNumber`.
+    Example: `4.2`.
+  * attr:sortorder - optional.
+    A decimal number which specifies an order relative to other tag:feature
+    tags when calling output generators.
+    Defaults to `0`.
+    Rarely used, for when ordering by attr:name is insufficient.
+  * attr:protect - optional.
+    An additional preprocessor token used to protect a feature definition.
+    Usually another feature or extension attr:name.
+    Rarely used, for odd circumstances where the definition of a feature or
+    extension requires another to be defined first.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+[NOTE]
+.Note
+====
+The attr:name attribute used for Vulkan core versions, such as
+`"VK_VERSION_1_0"`, is not an API construct.
+It is used only as a preprocessor guard in the headers, and an asciidoctor
+conditional in the specification sources.
+The similar `"VK_API_VERSION_1_0"` symbols are part of the API and their
+values are packed integers containing Vulkan core version numbers.
+====
+
+== Contents of tag:feature Tags
+
+Zero or more <<tag-required,tag:require and tag:remove tags>>, in arbitrary
+order.
+Each tag describes a set of interfaces that is respectively required for, or
+removed from, this feature, as described below.
+
+== Example of a tag:feature Tag
+
+[source,xml]
+--------------------------------------
+<feature api="vulkan" name="VK_VERSION_1_0" number="1.0">
+    <require comment="Header boilerplate">
+        <type name="vk_platform"/>
+    </require>
+    <require comment="API constants">
+        <enum name="VK_MAX_PHYSICAL_DEVICE_NAME"/>
+        <enum name="VK_LOD_CLAMP_NONE"/>
+    </require>
+    <require comment="Device initialization">
+        <command name="vkCreateInstance"/>
+    </require>
+</feature>
+--------------------------------------
+
+When processed into a C header for Vulkan, this results in:
+
+[source,c]
+--------------------------------------
+#ifndef VK_VERSION_1_0
+#define VK_VERSION_1_0 1
+#define VK_MAX_EXTENSION_NAME   256
+#define VK_LOD_CLAMP_NONE       MAX_FLOAT
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance);
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    VkInstance*                                 pInstance);
+#endif
+#endif /* VK_VERSION_1_0 */
+--------------------------------------
+
+
+[[tag-extensions]]
+= Extension Blocks (tag:extensions Tag)
+
+The tag:extensions tag contains definitions of each of the extensions which
+are defined for the API.
+
+== Attributes of tag:extensions Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:extensions Tags
+
+Each tag:extensions block contains zero or more tag:extension tags, each
+describing an API extension, in arbitrary order (although they are typically
+ordered by sorting on the extension name, to improve human readability).
+
+
+[[tag-extension]]
+= API Extensions (tag:extension Tag)
+
+API extensions are described in individual tag:extension tags.
+An extension is the set of interfaces defined by a particular API extension
+specification, such as `ARB_multitexture`.
+tag:extension is similar to tag:feature, but instead of having an
+attr:number attribute, it instead has a attr:supported attribute, which
+describes the set of API names which the extension can potentially be
+implemented against.
+
+== Attributes of tag:extension Tags
+
+  * attr:name - required.
+    Extension name, following the conventions in the <<vulkan-spec, Vulkan
+    API Specification>>.
+    Example: `name="VK_VERSION_1_0"`.
+  * attr:number - required.
+    A decimal number which is the registered, unique extension number for
+    attr:name.
+  * attr:sortorder - optional.
+    A decimal number which specifies an order relative to other
+    tag:extension tags when calling output generators.
+    Defaults to `0`.
+    Rarely used, for when ordering by attr:number is insufficient.
+  * attr:author - optional.
+    The author name, such as a full company name.
+    If not present, this can be taken from the corresponding tag:tag
+    attribute.
+    However, `EXT` and other multi-vendor extensions may not have a
+    well-defined author or contact in the tag.
+    This attribute is not used in processing the XML.
+    It is just metadata, mostly used to track the original author of an
+    extension (which may have since been promoted to use a different author
+    ID).
+  * attr:contact - optional.
+    The contact who registered or is currently responsible for extensions
+    and layers using the tag, including sufficient contact information to
+    reach the contact such as individual name together with GitHub username
+    (`@username`), Khronos internal Gitlab username (`gitlab:@username`) if
+    no public GitHub contact is available, or other contact information.
+    If not present, this can be taken from the corresponding tag:tag
+    attribute just like attr:author.
+  * attr:type - required if the attr:supported attribute is not
+    `'disabled'`.
+    Must be either `'device'` or `'instance'`, if present.
+  * [[depends-expressions]] attr:depends - optional.
+    String containing a boolean expression of one or more API core version
+    and extension names.
+    The extension requires the expression in the string to be satisfied to
+    use any functionality it defines (for instance extensions), or to use
+    any device-level functionality it provides (for device extensions).
+    Supported operators include `,` for logical OR, `+` for logical AND, and
+    `(` `)` for grouping.
+    `,` and `+` are of equal precedence, and lower than `(` `)`.
+    Expressions must be evaluated left-to-right for operators of the same
+    precedence.
+    Terms which are core version names are true if the corresponding
+    API version is supported.
+    Terms which are extension names are true if the corresponding extension
+    is enabled.
++
+--
+[NOTE]
+.Note
+====
+attr:depends is a breaking change in Vulkan 1.3.241, replacing the
+`requires` and `requiresCore` attributes.
+For example, an extension which previously specified these two attributes in
+`vk.xml`:
+
+* `requires="VK_KHR_dep_a,VK_EXT_dep_b"`
+* `requiresCore="1.1"`
+
+should replace them both with
+
+* `depends="VK_VERSION_1_1+VK_KHR_dep_a+VK_EXT_dep_b"`
+
+Note that the use of `,` in the old `requires` attribute was treated as a
+logical AND, and must be replaced by `+` in the `depends` attribute.
+====
+--
+  * attr:protect - optional.
+    An additional preprocessor token used to protect an extension
+    definition.
+    Usually another feature or extension attr:name.
+    Rarely used, for odd circumstances where the definition of an extension
+    requires another extension or a header file to be defined first.
+  * attr:platform - optional.
+    Indicates that the extension is specific to the platform identified by
+    the attribute value, and should be emitted conditional on that platform
+    being available, in a platform-specific header, etc.
+    The attribute value must be the same as one of the tag:platform tag:name
+    attribute values.
+  * attr:supported - comma-separated list of required <<schema:apiname, API
+    names>> for which this extension is defined.
+    When the extension tag is just reserving an extension number, use
+    `supported="disabled"` to indicate this extension should never be
+    processed.
+    Interfaces defined in a `disabled` extension block are tentative at best
+    and must: not be generated or otherwise used by scripts processing the
+    XML.
+    The only exception to this rule is for scripts used solely for
+    reserving, or checking for reserved bitflag values.
+  * attr:ratified - optional comma-separated list of <<scheme:apiname, API
+    names>> for which this extension has been ratified by the Khronos Board
+    of Promoters.
+    Defaults to the empty string if not specified.
+  * attr:promotedto - optional.
+    A 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_count"`.
+  * attr:deprecatedby - optional.
+    A Vulkan version or a name of an extension that _deprecates_ this
+    extension.
+    It may be an empty string.
+    E.g. `"VK_VERSION_1_1"`, or `"VK_EXT_debug_utils"`, or `""`.
+  * attr:obsoletedby - optional.
+    A Vulkan version or a name of an extension that _obsoletes_ this
+    extension.
+    It may be an empty string.
+    E.g. `"VK_VERSION_1_1"`, or `"VK_KHR_maintenance1"`, or `""`.
+  * attr:provisional - optional.
+    `"true"` if this extension is released provisionally.
+    Defaults to `"false"` if not specified.
+  * attr:specialuse - optional.
+    If present, must contain one or more tokens separated by commas,
+    indicating a special purpose of the extension.
+    Tokens may include:
+  ** 'cadsupport' - for support of CAD software.
+  ** 'd3demulation' - for support of Direct3D emulation layers or libraries,
+     or applications porting from Direct3D.
+  ** 'debugging' - for debugging an application.
+  ** 'devtools' - for support of developer tools, such as capture-replay
+     libraries.
+  ** 'glemulation' - for support of OpenGL and/or OpenGL ES emulation layers
+     or libraries, or applications porting from those APIs.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+[NOTE]
+.Note
+====
+The attr:depends attribute is used to specify other extensions that *must*
+be enabled for an extension to be enabled.
+
+In some cases, an extension may include functionality which is only defined
+*if* another extension is enabled.
+Such functionality should be specified within a tag:require tag, using the
+attr:depends attribute to specify that extension.
+====
+
+== Contents of tag:extension Tags
+
+Zero or more <<tag-required,tag:require and tag:remove tags>>, in arbitrary
+order.
+Each tag describes a set of interfaces that is respectively required for, or
+removed from, this extension, as described below.
+
+== Example of an tag:extensions Tag
+
+[source,xml]
+--------------------------------------
+<extension name="VK_KHR_display_swapchain" number="4" supported="vulkan">
+    <require>
+        <enum value="9" name="VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION"/>
+        <enum value="4" name="VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER"/>
+        <enum value="&quot;VK_KHR_display_swapchain&quot;"
+              name="VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME"/>
+        <type name="VkDisplayPresentInfoKHR"/>
+        <command name="vkCreateSharedSwapchainsKHR"/>
+    </require>
+</extension>
+--------------------------------------
+
+The attr:supported attribute says that the extension is defined for the
+default profile (`vulkan`).
+When processed into a C header for the `vulkan` profile, this results in
+header contents something like (assuming corresponding definitions of the
+specified tag:type and tag:command elsewhere in the XML):
+
+[source,c]
+--------------------------------------
+#define VK_KHR_display_swapchain 1
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+
+typedef struct VkDisplayPresentInfoKHR {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkRect2D                                    srcRect;
+    VkRect2D                                    dstRect;
+    VkBool32                                    persistent;
+} VkDisplayPresentInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(
+    VkDevice device, uint32_t swapchainCount,
+    const VkSwapchainCreateInfoKHR* pCreateInfos,
+    const VkAllocationCallbacks* pAllocator,
+    VkSwapchainKHR* pSwapchains);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
+    VkDevice                                    device,
+    uint32_t                                    swapchainCount,
+    const VkSwapchainCreateInfoKHR*             pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSwapchainKHR*                             pSwapchains);
+#endif
+--------------------------------------
+
+
+[[tag-required]]
+= Required and Removed Interfaces (tag:require and tag:remove Tags)
+
+A tag:require block defines a set of interfaces (types, enumerants and
+commands) 'required' by a tag:feature or tag:extension.
+A tag:remove block defines a set of interfaces 'removed' by a tag:feature.
+This is primarily for future profiles of an API which may choose to
+deprecate and/or remove some interfaces.
+Extensions should never remove interfaces, although this usage is allowed by
+the schema).
+Except for the tag name and behavior, the contents of tag:require and
+tag:remove tags are identical.
+
+== Attributes of tag:require and tag:remove Tags
+
+  * attr:profile - optional.
+    String name of an API profile.
+    Interfaces in the tag are only required (or removed) if the specified
+    profile is being generated.
+    If not specified, interfaces are required (or removed) for all API
+    profiles.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+  * attr:api - optional comma-separated list of <<schema:apiname, API
+    names>> requiring or removing these interfaces.
+    Interfaces in the tag are only required (or removed) if the requested
+    API name matches an element of the attribute.
+    If not specified, interfaces are required (or removed) for all APIs.
+
+[NOTE]
+.Note
+====
+The attr:api attribute is only supported inside tag:extension tags, since
+tag:feature tags already define a specific API.
+====
+
+== Attributes of tag:require Tags
+
+These attributes are allowed only for a tag:require tag.
+
+  * attr:depends - optional, and only for tag:require tags.
+    String containing a boolean expression of one or more API core version
+    and extension names.
+    The <<depends-expressions, syntax of this string>> is identical to that
+    of the tag:extension attr:depends attribute.
+    Interfaces in the tag are only required if the expression is satisfied.
++
+--
+[NOTE]
+.Note
+====
+attr:depends is a breaking change in Vulkan 1.3.241, replacing the
+`extension` and `feature` attributes.
+====
+--
+
+== Contents of tag:require and tag:remove Tags
+
+Zero or more of the following tags, in any order:
+
+=== Comment Tags
+
+<<tag-comment, tag:comment>> (as described above).
+
+=== Command Tags
+
+tag:command specifies an required (or removed) command defined in a
+tag:commands block.
+The tag has no content, but contains attributes:
+
+  * attr:name - required.
+    Name of the command.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+=== Enum Tags
+
+tag:enum specifies an required (or removed) enumerant defined in a tag:enums
+block.
+All forms of this tag support the following attributes:
+
+  * attr:name - required.
+    Name of the enumerant.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+  * attr:api - optional comma-separated list of <<schema:apiname, API
+    names>> for which this definition is specialized, so that different APIs
+    may have different values for the same token.
+    This definition is only used if the requested API name matches the
+    attribute.
+    May be used to address subtle incompatibilities.
+
+There are two forms of tag:enum tags:
+
+_Reference enums_ simply pull in the definition of an enumerant given in a
+separate tag:enums block.
+No attributes other than attr:name and attr:comment are supported for them.
+tag:enum tags appearing inside tag:remove tags should always be reference
+enums.
+Reference enums may also be used inside tag:require tags, if the
+corresponding value is defined in a tag:enums block.
+This is typically used for constants not part of an enumerated type.
+
+_Extension enums_ define the value of an enumerant inline in an tag:feature
+or tag:extensions block.
+Typically these are used to add additional values specified by an extension
+or core feature to an existing enumerated type.
+There are a variety of attributes which are used to specify the value of the
+enumerant:
+
+  * attr:value and attr:type - define a constant value in the same fashion
+    as an tag:enum tag in an <<tag-enum,tag:enums>> block.
+  * attr:bitpos - define a constant bitmask value in the same fashion as an
+    <<tag-enum,tag:enum>> tag in an tag:enums block.
+    attr:bitpos is a literal integer bit position in a bitmask.
+    The same value and usage constraints apply to this bit position as are
+    applied to the <<tag-enum, attr:bitpos attribute of an tag:enum tag.
+  * attr:extends - the name of a separately defined enumerated type (e.g. a
+    tag:type tag with attr:category``="enum"``) to which the extension
+    enumerant is added.
+    The enumerated type is required to complete the definition of the
+    enumerant, in the same fashion as the attr:requires attribute of a
+    tag:type tag.
+    If not present, the enumerant is treated as a global constant value.
+  * attr:extnumber - an extension number.
+    The extension number in turn specifies the starting value of a block
+    (range) of values reserved for enumerants defined by or associated with
+    the corresponding tag:extension tag with the same attr:number.
+    This is used when an extension or core feature needs to extend an
+    enumerated type in a block defined by a different extension.
+  * Attribute attr:offset - the offset within an extension block.
+    If attr:extnumber is not present, the extension number defining that
+    block is given by the attr:number attribute of the surrounding
+    tag:extension tag.
+    The numeric value of an enumerant is computed as defined in the
+    ``Assigning Extension Token Values`" section of the <<vulkan-styleguide,
+    Vulkan Documentation and Extensions: Procedures and Conventions>>
+    document.
+  * Attribute attr:dir - if present, the calculated enumerant value will be
+    negative, instead of positive.
+    Negative enumerant values are normally used only for Vulkan error codes.
+    The attribute value must be specified as `dir="-"`.
+  * attr:alias - the name of another enumerant this is an alias of.
+    An enumerant alias is simply a different name for the same enumerant
+    value.
+    This is typically used when promoting an enumerant defined by an
+    extension to a new core version of the API.
+    The old extension enumerant is still defined, but as an alias of the new
+    core enumerant.
+    It may also be used when token names have been changed as a result of
+    profile changes, or for consistency purposes.
+  * attr:protect - define a preprocessor protection symbol for the enum in
+    the same fashion as a tag:enum tag in an <<tag-enum,tag:enums>> block.
+
+Not all combinations of attributes are either meaningful or supported.
+The attr:protect attribute may always be present.
+For other attributes, the allowed combinations are:
+
+.Valid Combinations of attr:enum Attributes for Extension Enums
+|====
+| Description                   | attr:value | attr:bitpos | attr:alias | attr:offset | attr:extnumber | attr:dir | attr:extends
+| Numeric value                 | *Yes*      | No          | No         | No          | No             | No       | *Yes*^2^
+| Bitmask value                 | No         | *Yes*       | No         | No          | No             | No       | *Yes*^2^
+| Alias of another enumerant    | No         | No          | *Yes*      | No          | No             | No       | *Yes*^2^
+| Value added to an enumeration | No         | No          | No         | *Yes*       | *Yes*^1^       | *Yes*^3^ | *Yes*
+|====
+
+[1]: Optional.
+If attr:extnumber is not present, the tag:enum tag may only be within a
+tag:extension.
+Otherwise, the tag:enum tag may also be within a tag:feature.
+
+[2]: Optional.
+If attr:extends is not present, the enumerant value is a global constant.
+Otherwise, the value is added to the specified enumeration.
+
+[3]: Optional.
+If not present, the computed value will be positive.
+
+Examples of <<tag-required-examples,various types of extension enumerants>>
+are given below.
+
+
+=== Type Tags
+
+tag:type specifies a required (or removed) type defined in a tag:types
+block.
+Most types are picked up implicitly by using the tag:type tags of commands,
+but in a few cases, additional types need to be specified explicitly.
+It is unlikely that a type would ever be removed, although this usage is
+allowed by the schema.
+The tag has no content, but contains elements:
+
+  * attr:name - required.
+    Name of the type.
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+
+[[tag-required-examples]]
+== Examples of Extension Enumerants
+
+Examples of some of the supported extension enumerant tag:enum tags are
+given below.
+
+[source,xml]
+--------------------------------------
+<extensions>
+    <extension name="VK_KHR_test_extension" number="1" supported="vulkan">
+        <require>
+            <enum value="42" name="VK_KHR_TEST_ANSWER"/>
+            <enum bitpos="29" name="VK_KHR_TEST_BITMASK"/>
+            <enum offset="0" dir="-" extends="VkResult"
+                  name="VK_ERROR_SURFACE_LOST_KHR"/>
+            <enum offset="1" extends="VkResult"
+                  name="VK_SUBOPTIMAL_KHR"/>
+            <enum bitpos="30" extends="VkCullModeFlagBits"
+                  name="VK_KHR_TEST_CULL_MODE_BIT"/>
+        </require>
+    </extension>
+</extensions>
+--------------------------------------
+
+The corresponding header file will include definitions like this:
+
+[source,c]
+--------------------------------------
+typedef enum VkResult {
+    <previously defined VkResult enumerant values},
+    VK_ERROR_SURFACE_LOST_KHR = -1000000000,
+    VK_SUBOPTIMAL_KHR = 1000000001,
+    VK_KHR_EXTENSION_BIT = 0x80000000,
+};
+
+#define VK_KHR_test_extension 1
+#define VK_KHR_theanswer 42
+#define VK_KHR_bitmask 0x20000000
+--------------------------------------
+
+
+[[tag-formats]]
+= Formats (tag:formats Tag)
+
+The tag:formats tag contains definitions of each of the image formats which
+are defined for the API.
+
+== Attributes of tag:formats Tags
+
+None.
+
+//  * attr:comment - optional.
+//    Arbitrary string (unused).
+
+== Contents of tag:formats Tags
+
+A tag:formats block contains zero or more tag:format tags, each describing
+an image format, in arbitrary order.
+
+
+[[tag-format]]
+= Image Format (tag:format Tag)
+
+Image formats are described in individual tag:format tags.
+An image format corresponds to a Vulkan `VkFormat` enumerant.
+This tag contains information specifying the structure and meaning of
+different parts of the format.
+The meaning of different parts of the format information is described in
+more detail in the "`Format Definition`" section of the <<vulkan-spec,
+Vulkan API Specification>>.
+
+== Attributes of tag:format Tags
+
+  * attr:name - required.
+    Format name, matching a `VkFormat` tag:enum attr:name.
+    Example: `name="VK_FORMAT_R8_UNORM"`.
+  * attr:class - required.
+    Format class.
+    A string whose value is shared by a group of formats which may be
+    compatible, and is a textual description of something important that
+    group has in common.
+    Example: `class="8-bit"`.
+  * attr:blockSize - required.
+    A decimal integer which is the texel block size, in bytes, of the
+    format.
+  * attr:texelsPerBlock - required
+    A decimal integer which is the number of texels in a texel block of the
+    format.
+  * attr:blockExtent - optional.
+    Three-dimensional extent of a texel block.
+    A comma-separated list of three decimal integers.
+    If not present, `blockExtent="1,1,1"` is assumed.
+  * attr:packed - optional.
+    A decimal integer which is the number of bits into which the format is
+    packed.
+    If defined, a single image element in this format can be stored in the
+    same space as a scalar type of this bit width.
+  * attr:compressed - optional.
+    A string whose value is shared by a group of formats which use the same
+    general texture compression scheme, and is a textual description of that
+    scheme.
+    Example: `compressed="ASTC LDR"`.
+  * attr:chroma - optional.
+    A string used to mark if {YCbCr} samplers are required by default when
+    using this format.
+    Must be one of the three values `"420"`, `"422"`, or `"444"`
+    corresponding to different {YCbCr} encodings.
+
+== Contents of tag:format Tags
+
+One or more <<tag-component,tag:component>> tags.
+The order of tag:component tags corresponds to the memory order of
+components of the format.
+Each tag describes the size and format of that component.
+
+Zero or more <<tag-plane,tag:plane>> tags, in arbitrary order.
+Each tag describes the scale of a specific image plane of the format
+relative to the overall format.
+
+Zero or more <<tag-spirvimageformat,tag:spirvimageformat>> tags, in
+arbitrary order.
+Each tag describes a SPIR-V format name corresponding to the tag:format.
+
+== Example of a tag:format Tag
+
+[source,xml]
+--------------------------------------
+<format name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM" class="16-bit 2-plane 420" blockSize="6" texelsPerBlock="1" chroma="420">
+    <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+    <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+    <component name="R" bits="16" numericFormat="UNORM" planeIndex="1"/>
+    <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+    <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R16G16_UNORM"/>
+</format>
+--------------------------------------
+
+
+[[tag-component]]
+= Format Components (tag:component Tag)
+
+The tag:component tag contains definitions of each of the components which
+are part of an image format.
+
+== Attributes of tag:component Tags
+
+  * attr:name - required.
+    A string specifying the name of this component.
+    Must be one of the values `"R"`, `"G"`, `"B"`, `"A"`, `"D"`, or `"S"`
+    corresponding to red, green, blue, alpha, depth, and stencil components,
+    respectively.
+  * attr:bits - required.
+    Must be either a decimal integer which is the number of bits in this
+    component, or `"compressed"`, corresponding to a specific compression
+    scheme.
+  * attr:numericFormat - required.
+    A string specifying the scalar data type of the component.
+    Must be one of the following values:
+  ** `"SFLOAT"` - signed floating-point numbers
+  ** `"SINT"` - signed integer values in the range [-2^n-1^,2^n-1^-1]
+  ** `"SNORM"` - signed normalized values in the range [-1,1]
+  ** `"SRGB"` - R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+  ** `"SSCALED"` - signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+  ** `"UFLOAT"` - unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+  ** `"UINT"` - unsigned integer values in the range [0,2^n^-1]
+  ** `"UNORM"` - unsigned normalized values in the range [0,1]
+  ** `"USCALED"` - unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+  * attr:planeIndex - optional.
+    A decimal integer specifying which plane this component lies in.
+    If present, must correspond to the attr:index attribute value of a
+    tag:plane tag for the same tag:component.
+
+== Contents of tag:component Tags
+
+None.
+
+
+[[tag-plane]]
+= Format Planes (tag:plane Tag)
+
+The tag:plane tag contains definitions of each of the image planes which are
+part of an image format.
+
+== Attributes of tag:plane Tags
+
+  * attr:index - required.
+    An integer specifying the image plane being defined.
+    Image planes are in the range [0,_p_-1] where _p_ is the number of
+    planes in the format.
+  * attr:widthDivisor - required.
+    An integer specifying the relative width of this plane.
+    A value of _k_ means that this plane is 1/_k_ the width of the overall
+    format.
+  * attr:heightDivisor - required.
+    An integer specifying the relative height of this plane.
+    A value of _k_ means that this plane is 1/_k_ the height of the overall
+    format.
+  * attr:compatible - required.
+    A string naming another, single-plane format that this plane is
+    compatible with.
+    Must match the attr:name of another attr:format.
+
+== Contents of tag:plane Tags
+
+None.
+
+
+[[tag-spirvimageformat]]
+= SPIR-V Image Formats (tag:spirvimageformat Tag)
+
+The tag:spirvimageformat tag specifies the name of a SPIR-V image format
+equivalent to this format.
+
+== Attributes of tag:spirvimageformat Tags
+
+  * attr:name - required.
+    The name of the SPIR-V image format.
+    Example: `name="R11fG11fB10f"`.
+
+== Contents of tag:spirvimageformat Tags
+
+None.
+
+
+[[tag-spirvextensions]]
+= SPIR-V Extensions (tag:spirvextensions Tag)
+
+The tag:spirvextensions tag contains definitions of each of the SPIR-V
+extensions which are defined for the API.
+
+== Attributes of tag:spirvextensions Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:spirvextensions Tags
+
+Each tag:spirvextensions block contains zero or more tag:spirvextension tags, each
+describing an single SPIR-V extension, in arbitrary order.
+
+
+[[tag-spirvextension]]
+= SPIR-V Extension (tag:spirvextension Tag)
+
+SPIR-V extensions are described in individual tag:spirvextension tags.
+A SPIR-V extension is enabled by API versions or extensions.
+
+== Attributes of tag:spirvextension Tags
+
+  * attr:name - required.
+    SPIR-V extension name.
+    Example: `name="SPV_KHR_variable_pointers"`
+
+== Contents of tag:spirvextension Tags
+
+One or more <<tag-spirvenable,tag:enable>> tags, in arbitrary order.
+Each tag describes a single enabling mechanism for the extension.
+
+== Example of a tag:spirvextensions Tag
+
+[source,xml]
+--------------------------------------
+<spirvextension name="SPV_KHR_multiview">
+    <enable version="VK_VERSION_1_1"/>
+    <enable extension="VK_KHR_multiview"/>
+</spirvextension>
+--------------------------------------
+
+
+[[tag-spirvcapabilities]]
+= SPIR-V Capabilities (tag:spirvcapabilities Tag)
+
+The tag:spirvcapabilities tag contains definitions of each of the SPIR-V
+capabilities which are defined for the API.
+
+== Attributes of tag:spirvcapabilities Tags
+
+  * attr:comment - optional.
+    Arbitrary string (unused).
+
+== Contents of tag:spirvcapabilities Tags
+
+Each tag:spirvcapabilities block contains zero or more tag:spirvcapability
+tags, each describing an single SPIR-V capability, in arbitrary order.
+
+
+[[tag-spirvcapability]]
+= SPIR-V Capability (tag:spirvcapability Tag)
+
+SPIR-V capabilities are described in individual tag:spirvcapability tags.
+A SPIR-V capability is enabled by API versions, extensions, features, or
+properties.
+
+== Attributes of tag:spirvcapability Tags
+
+  * attr:name - required.
+    SPIR-V capability name.
+    Example: `name="SPV_KHR_variable_pointers"`
+
+== Contents of tag:spirvcapability Tags
+
+One or more <<tag-spirvenable,tag:enable>> tags, in arbitrary order.
+Each tag describes a single enabling mechanism for the capability.
+
+== Example of a tag:spirvcapabilities Tag
+
+[source,xml]
+--------------------------------------
+<spirvcapability name="ImageCubeArray">
+    <enable struct="VkPhysicalDeviceFeatures" feature="imageCubeArray" requires="VK_VERSION_1_0"/>
+</spirvcapability>
+<spirvcapability name="GroupNonUniform">
+    <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_BASIC_BIT" requires="VK_VERSION_1_1"/>
+</spirvcapability>
+--------------------------------------
+
+
+[[tag-spirvenable]]
+= SPIR-V Enables (tag:enable Tag)
+
+The tag:enable tag describes a single mechanism in the API which enables a
+tag:spirvextension or tag:spirvcapability.
+There are four forms of tag:enable tags corresponding to different ways the
+API may advertise enablement, though not all forms may be used with
+tag:spirvextension tags.
+Each form is described separately below.
+
+[[tag-syncstage]]
+= Sync Stage (tag:syncstage Tag)
+
+The tag:syncstage tag contains definitions of each Pipeline stage.
+
+== Attributes of tag:syncstage Tags
+
+  * attr:name - required.
+    VkPipelineStageFlagBits2 name
+  * attr:alias - optional.
+    Semantically equivalent name which is an alias of attr:name.
+
+== Contents of tag:syncstage Tags
+
+More information about the Pipeline stage using either
+tag:syncequivalent or tag:syncsupport
+
+[[tag-syncaccess]]
+= Sync Access (tag:syncaccess Tag)
+
+The tag:syncaccess tag contains definitions of each Access mask.
+
+== Attributes of tag:syncaccess Tags
+
+  * attr:name - required.
+    VkAccessFlagBits2 name
+  * attr:alias - optional.
+    Semantically equivalent name which is an alias of attr:name.
+
+== Contents of tag:syncaccess Tags
+
+More information about the Access mask using either
+tag:syncequivalent or tag:syncsupport
+
+[[tag-syncpipeline]]
+= Sync Pipeline (tag:syncpipeline Tag)
+
+The tag:syncpipeline tag contains definitions of each type of Pipeline.
+
+== Attributes of tag:syncpipeline Tags
+
+  * attr:name - required.
+    A unique string identifying the pipeline.
+
+== Contents of tag:syncpipeline Tags
+
+The tag:syncpipeline lists each pipeline stage in logical order using
+tag:syncpipelinestage. Stages have extra attributes to describe
+special ordering within the list
+
+[[tag-syncsupport]]
+= Sync Support (tag:syncsupport Tag)
+
+The tag:syncsupport tag contains information what support there is for
+a given Sync element.
+
+== Attributes of tag:syncsupport Tags
+
+  * attr:queues - optional.
+    A comma-separated list of Queue types that are supported.
+  * attr:stage - optional.
+    A comma-separated list of Sync Stages that are supported.
+    This is used to cross-reference with tag:syncstage
+
+[[tag-syncequivalent]]
+= Sync Equivalent (tag:syncequivalent Tag)
+
+The tag:syncequivalent tag contains information showing a one-to-many
+relationship of Sync elements
+
+== Attributes of tag:syncsupport Tags
+
+  * attr:stage - optional.
+    A comma-separated list of Sync Stages that are the OR logical
+    equivalence of the parent Sync Element
+  * attr:access - optional.
+    A comma-separated list of Sync Accesses that are the OR logical
+    equivalence of the parent Sync Element
+
+== Attributes for API Version Number Enables
+
+  * attr:version - required.
+    An API feature name, matching a tag:feature attr:name attribute value.
+
+If the API version is supported, the SPIR-V extension or capability is
+enabled.
+
+== Attributes for API Extension Enables
+
+  * attr:extension - required.
+    An API extension name, matching an tag:extension attr:name attribute
+    value.
+
+If the API extension is supported and enabled, the SPIR-V extension or
+capability is enabled.
+
+== Attributes for API Feature Enables
+
+  * attr:struct - required.
+    An API feature structure name, matching a tag:struct attr:name attribute
+    value.
+  * attr:feature - required.
+    An API feature name, matching a tag:member tag:name value of the feature
+    structure.
+  * attr:requires - required.
+    A comma-separated list of API feature version numbers and/or extension
+    names.
+  * attr:alias - optional.
+    Another API feature name which is an alias of attr:feature.
+    Needed when the same feature is provided by two different API versions
+    or extensions.
+
+If one of the API feature version numbers or extensions in the attr:requires
+list is supported or enabled, respectively; and if the attr:feature name is
+enabled in the feature structure, the SPIR-V capability is enabled.
+
+API feature enables are not supported for tag:spirvextension tags.
+
+== Attributes for API Property Enables
+
+  * attr:property - required.
+    An API property structure name, matching a tag:struct attr:name
+    attribute value.
+  * attr:member - required.
+    An API property name, matching a tag:member tag:name value of the
+    attr:property structure.
+  * attr:value - required.
+    A value, matching an API tag:enum tag:name value.
+    If the property is a bitfield, tag:value must be a bitmask value
+    belonging to the attr:member bitfield type.
+    Otherwise, tag:value must be an tag:enum name defined for the
+    attr:member enumeration type.
+  * attr:requires - optional.
+    A comma-separated list of API feature version numbers and/or extension
+    names.
+
+If one of the API feature version numbers or extensions in the attr:requires
+list is supported or enabled, respectively; and if the attr:member property
+contains the tag:value bit, or matches the tag:value, the SPIR-V capability
+is enabled.
+
+API property enables are not supported for tag:spirvextension tags.
+
+== Contents of tag:enable Tags
+
+None.
+
+
+[[examples]]
+= Examples / FAQ / How Do I?
+
+For people new to the Registry, it will not be immediately obvious how to
+make changes.
+This section includes some tips and examples that will help you make changes
+to the Vulkan headers by changing the Registry XML description.
+
+First, follow the steps described to <<starting,get the Vulkan GitHub
+repository>> containing the registry and assemble the tools necessary to
+work with the XML registry.
+Once you are able to regenerate the Vulkan headers from `vk.xml`, you can
+start making changes.
+
+
+== General Strategy
+
+If you are _adding_ to the API, perform the following steps to _create_ the
+description of that API element:
+
+  * For each type, enum group, compile time constant, and command being
+    added, create appropriate new tag:type, tag:enums, tag:enum, or
+    tag:command tags defining the interface in question.
+  * Make sure that all added types and commands appropriately tag their
+    dependencies on other types by adding nested tag:type tags.
+  * Make sure that each new tag defines the name of the corresponding type,
+    enum group, constant, or command, and that structure/union types and
+    commands tag the types and names of all their members and parameters.
+    This is essential for the automatic dependency process to work.
+
+If you are _modifying_ existing APIs, just make appropriate changes in the
+existing tags.
+
+Once the definition is added, proceed to the next section to create
+dependencies on the changed feature.
+
+
+== API Feature Dependencies
+
+When you add new API elements, they will not result in corresponding changes
+in the generated header unless they are _required_ by the interface being
+generated.
+This makes it possible to include different API versions and extensions in a
+single registry and pull them out as needed.
+So you must introduce a dependency on new features in the corresponding
+tag:feature tag.
+
+There are multiple API versions defined for Vulkan at this time.
+The initial Vulkan 1.0 tag can be found by searching for
+
+[source,xml]
+--------------------------------------
+<feature api="vulkan" name="VK_VERSION_1_0"
+--------------------------------------
+
+Inside a tag:feature tag are multiple tag:require tags.
+Some of these tags are used to express extension interactions, and others
+only as a logical grouping mechanism for related parts of that API feature.
+
+
+=== API Feature Walkthrough
+
+This section walks through the first few required API features in the
+`vk.xml` tag:feature tag, showing how each requirement pulls in type, token,
+and command definitions and turns those into definitions in the C header
+file `vulkan_core.h`.
+
+Consider the first few lines of the tag:feature:
+
+[source,xml]
+--------------------------------------
+<require comment="Header boilerplate">
+    <type name="vk_platform"/>
+</require>
+<require comment="API constants">
+    <enum name="VK_MAX_PHYSICAL_DEVICE_NAME"/>
+    <enum name="VK_MAX_EXTENSION_NAME"/>
+    ...
+</require>
+<require comment="Device initialization">
+    <command name="vkCreateInstance"/>
+    ...
+--------------------------------------
+
+The first tag:require block says to require a type named `vk_platform`.
+If you look at the beginning of the tag:types section, there is a
+corresponding definition section:
+
+[source,xml]
+--------------------------------------
+<type name="vk_platform">#include "vk_platform.h"
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((major &lt;&lt; 22) | (minor &lt;&lt; 12) | patch)
+    ...
+--------------------------------------
+
+This section is invoked by the requirement and emits a bunch of boilerplate
+C code.
+The explicit dependency is not strictly required since `vk_platform` will be
+required by many other types, but placing it first causes this to appear
+first in the output file.
+
+Note that `vk_platform` does not correspond to an actual C type, but instead
+to a collection of freeform preprocessor includes and macros and comments.
+Most other tag:type tags do define a specific type and are much simpler, but
+this approach can be used to inject arbitrary C into the Vulkan headers
+*when there is no other way*.
+In general inserting arbitrary C is strongly discouraged outside of specific
+special cases like this.
+
+The next tag:require block pulls in some compile time constants.
+These correspond to the definitions found in the first tag:enums section of
+`vk.xml`:
+
+[source,xml]
+--------------------------------------
+<enums name="API Constants"
+       comment="Vulkan hardcoded constants - not an enumerated type, part of the header boilerplate">
+    <enum value="256"        name="VK_MAX_PHYSICAL_DEVICE_NAME"/>
+    <enum value="256"        name="VK_MAX_EXTENSION_NAME"/>
+    ...
+--------------------------------------
+
+The third tag:require block starts pulling in some Vulkan commands.
+The first command corresponds to the following definition found in the
+tag:commands section of `vk.xml`:
+
+[source,xml]
+--------------------------------------
+<commands>
+    <command>
+        <proto><type>VkResult</type> <name>vkCreateInstance</name></proto>
+        <param>const <type>VkInstanceCreateInfo</type>* <name>pCreateInfo</name></param>
+        <param><type>VkInstance</type>* <name>pInstance</name></param>
+    </command>
+    ...
+--------------------------------------
+
+In turn, the tag:command tag requires the tag:types `VkResult`,
+`VkInstanceCreateInfo`, and `VkInstance` as part of its definition.
+The definitions of these types are determined as follows:
+
+For `VkResult`, the corresponding required tag:type is:
+
+[source,xml]
+--------------------------------------
+<type name="VkResult" category="enum"/>
+--------------------------------------
+
+Since this is an enumeration type, it simply links to an tag:enums tag with
+the same name:
+
+[source,xml]
+--------------------------------------
+<enums name="VkResult" type="enum" comment="API result codes">
+        <comment>Return codes (positive values)</comment>
+    <enum value="0"     name="VK_SUCCESS"/>
+    <enum value="1"     name="VK_UNSUPPORTED"/>
+    <enum value="2"     name="VK_NOT_READY"/>
+    ...
+        <comment>Error codes (negative values)</comment>
+    <enum value="-1"    name="VK_ERROR_OUT_OF_HOST_MEMORY" comment="A host memory allocation has failed"/>
+    ...
+--------------------------------------
+
+For `VkInstanceCreateInfo`, the required tag:type is:
+
+[source,xml]
+--------------------------------------
+<type category="struct" name="VkInstanceCreateInfo">
+    <member values="VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+    <member>const void*                         <name>pNext</name></member>
+    <member>const <type>VkApplicationInfo</type>* <name>pAppInfo</name></member>
+    <member>const <type>VkAllocCallbacks</type>* <name>pAllocCb</name></member>
+    <member><type>uint32_t</type>               <name>extensionCount</name></member>
+    <member>const <type>char</type>*const*      <name>ppEnabledExtensionNames</name></member>
+</type>
+--------------------------------------
+
+This is a structure type, defining a C `struct` with all the members defined
+in each tag:member tag in order.
+In addition, it requires some other types, whose definitions are located by
+name in exactly the same fashion.
+
+For the final direct dependency of the command, `VkInstance`, the required
+tag:type is:
+
+[source,xml]
+--------------------------------------
+    <comment>Types which can be void pointers or class pointers, selected at compile time</comment>
+<type>VK_DEFINE_BASE_HANDLE(<name>VkObject</name>)</type>
+<type>VK_DEFINE_DISP_SUBCLASS_HANDLE(<name>VkInstance</name>, <type>VkObject</type>)</type>
+--------------------------------------
+
+In this case, the type `VkInstance` is defined by a special compile time
+macro which defines it as a derived class of `VkObject` (for `C```) or a
+less typesafe definition (for C).
+This macro is not part of the type dependency analysis, just the boilerplate
+used in the header.
+
+If these are the only tag:feature dependencies in `vk.xml`, the resulting
+`vulkan_core.h` header will look like this:
+
+[source,c]
+--------------------------------------
+#ifndef VULKAN_H_
+#define VULKAN_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 2015-2023 The Khronos Group Inc.
+    ...
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+** Generated on date 20170208
+*/
+
+
+#define VK_VERSION_1_0 1
+#include "vk_platform.h"
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((major << 22) | (minor << 12) | patch)
+
+// Vulkan API version supported by this file
+#define VK_API_VERSION VK_MAKE_VERSION(0, 104, 0)
+
+#if defined (__cplusplus) && (VK_UINTPTRLEAST64_MAX == UINTPTR_MAX)
+    #define VK_TYPE_SAFE_COMPATIBLE_HANDLES 1
+#endif
+
+#if defined(VK_TYPE_SAFE_COMPATIBLE_HANDLES) && !defined(VK_DISABLE_TYPE_SAFE_HANDLES)
+    #define VK_DEFINE_PTR_HANDLE(_obj) struct _obj##_T { char _placeholder; }; typedef _obj##_T* _obj;
+    #define VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
+
+    #define VK_DEFINE_BASE_HANDLE(_obj) VK_DEFINE_PTR_HANDLE(_obj)
+    #define VK_DEFINE_DISP_SUBCLASS_HANDLE(_obj, _base) VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base)
+    #define VK_DEFINE_NONDISP_SUBCLASS_HANDLE(_obj, _base) VK_DEFINE_PTR_SUBCLASS_HANDLE(_obj, _base)
+#else
+    #define VK_DEFINE_BASE_HANDLE(_obj) typedef VkUintPtrLeast64 _obj;
+    #define VK_DEFINE_DISP_SUBCLASS_HANDLE(_obj, _base) typedef uintptr_t _obj;
+    #define VK_DEFINE_NONDISP_SUBCLASS_HANDLE(_obj, _base) typedef VkUintPtrLeast64 _obj;
+#endif
+
+typedef enum {
+    VK_SUCCESS = 0,
+    VK_UNSUPPORTED = 1,
+    VK_NOT_READY = 2,
+    ...
+} VkResult;
+typedef enum {
+    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+    ...
+} VKStructureType;
+typedef struct {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    const char*                                 pAppName;
+    uint32_t                                    appVersion;
+    const char*                                 pEngineName;
+    uint32_t                                    engineVersion;
+    uint32_t                                    apiVersion;
+} VkApplicationInfo;
+typedef enum {
+    VK_SYSTEM_ALLOC_TYPE_API_OBJECT = 0,
+    ...
+} VkSystemAllocType;
+typedef void* (VKAPI_PTR *PFN_vkAllocFunction)(
+    void*                           pUserData,
+    size_t                          size,
+    size_t                          alignment,
+    VkSystemAllocType               allocType);
+typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+    void*                           pUserData,
+    void*                           pMem);
+typedef struct {
+    void*                                       pUserData;
+    PFN_vkAllocFunction                         pfnAlloc;
+    PFN_vkFreeFunction                          pfnFree;
+} VkAllocCallbacks;
+typedef struct {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    const VkApplicationInfo*                    pAppInfo;
+    const VkAllocCallbacks*                     pAllocCb;
+    uint32_t                                    extensionCount;
+    const char*const*                           ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+VK_DEFINE_BASE_HANDLE(VkObject)
+VK_DEFINE_DISP_SUBCLASS_HANDLE(VkInstance, VkObject)
+#define VK_MAX_PHYSICAL_DEVICE_NAME       256
+#define VK_MAX_EXTENSION_NAME             256
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance);
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    VkInstance*                                 pInstance);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+--------------------------------------
+
+Note that several additional types are pulled in by the type dependency
+analysis, but only those types, commands, and tokens required by the
+specified features are generated.
+
+
+[[compile-time-constants]]
+== How to Add a Compile Time Constant
+
+Go to the desired tag:feature or tag:extension tag.
+Add (if not present) a nested tag:require block labelled
+
+[source,xml]
+--------------------------------------
+<require comment="API constants">
+--------------------------------------
+
+In this block, add an (appropriately indented) tag like
+
+[source,xml]
+--------------------------------------
+    <enum name="VK_THE_ANSWER"/>
+--------------------------------------
+
+Then go to the tag:enums block labelled
+
+[source,xml]
+--------------------------------------
+<enums comment="Misc. hardcoded constants - not an enumerated type">
+--------------------------------------
+
+In this block, add a tag whose attr:name attribute matches the attr:name you
+defined above and whose attr:value attribute is the value to give the
+constant:
+
+[source,xml]
+--------------------------------------
+    <enum value="42" type="uint32_t" name="VK_THE_ANSWER"/>
+--------------------------------------
+
+The attr:type attribute must be present, and must have one of the allowed
+values `uint32_t`, `uint64_t`, or `float`.
+
+
+[[compile-time-constants-format]]
+== Allowed Format of Compile Time Constants
+
+The attr:value attribute must be a legal C99 constant scalar expression when
+evaluated at compilation time.
+Allowed expressions are additionally restricted to the following syntax:
+
+  * a single C decimal integer or floating-point value
+  * optionally prefixed with `~`
+  * optionally suffixed with `U`, `UL`, `ULL`, or `F`
+  * and the entire expression optionally surrounded by paired `(` and `)`.
+
+
+== How to Add a Struct or Union Type
+
+For this example, assume we want to define a type corresponding to a C
+`struct` defined as follows:
+
+[source,c]
+--------------------------------------
+typedef struct {
+    VkStructureType          sType;
+    const void*              pNext;
+    const VkApplicationInfo* pAppInfo;
+    const VkAllocCallbacks*  pAllocCb;
+    uint32_t                 extensionCount;
+    const char*const*        ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+--------------------------------------
+
+If `VkInstanceCreateInfo` is the type of a parameter of a command in the
+API, make sure that command's definition (see below for how to add a
+command) puts `VkInstanceCreateInfo` in nested tag:type tags where it is
+used.
+
+Otherwise, if the struct type is not used directly by a command in the API,
+nor required by a chain of type dependencies for other commands, an explicit
+tag:type dependency should be added to the tag:feature tag.
+Go to the tag:types tag and search for the nested block labelled
+
+[source,xml]
+--------------------------------------
+<require comment="Types not directly used by the API. Include e.g. structs that are not parameter types of commands, but still defined by the API.">
+    ...
+--------------------------------------
+
+In this block, add a tag whose attr:name attribute matches the attr:name of
+the struct type being defined:
+
+[source,xml]
+--------------------------------------
+<require comment="API types not used by commands">
+    <type name="VkInstanceCreateInfo"/>
+    ...
+--------------------------------------
+
+Then go to the tag:types tag and add a new tag:type tag defining the struct
+names and members, somewhere below the corresponding comment, like this:
+
+[source,xml]
+--------------------------------------
+<types>
+    ...
+        <comment>Struct types</comment>
+    <type category="struct" name="VkInstanceCreateInfo">
+        <member><type>VkStructureType</type>
+                <name>sType</name></member>
+        <member>const void*
+                <name>pNext</name></member>
+        <member>const <type>VkApplicationInfo</type>*
+                <name>pAppInfo</name></member>
+        <member>const <type>VkAllocCallbacks</type>*
+                <name>pAllocCb</name></member>
+        <member><type>uint32_t</type>
+                <name>extensionCount</name></member>
+        <member>const <type>char</type>*const*
+                <name>ppEnabledExtensionNames</name></member>
+    </type>
+    ...
+--------------------------------------
+
+If any of the member types are types also defined in the header, make sure
+to enclose those type names in nested tag:type tags, as shown above.
+Basic C types should not be tagged.
+
+If the type is a C `union`, rather than a `struct`, then set the value of
+the attr:category attribute to `"union"` instead of `"struct"`.
+
+
+== How to Add an Enumerated Type
+
+For this example, assume we want to define a type corresponding to a C
+`enum` defined as follows:
+
+[source,c]
+--------------------------------------
+typedef enum {
+    VK_DEVICE_CREATE_VALIDATION_BIT = 0x00000001,
+    VK_DEVICE_CREATE_MULTI_DEVICE_IQ_MATCH_BIT = 0x00000002;
+} VkDeviceCreateFlagBits.
+--------------------------------------
+
+If `VkDeviceCreateFlagBits` is the type of a parameter to a command in the
+API, or of a member in a structure or union, make sure that command
+parameter or struct member's definition puts `VkDeviceCreateFlagBits` in
+nested tag:type tags where it is used.
+
+Otherwise, if the enumerated type is not used directly by a command in the
+API, nor required by a chain of type dependencies for commands and structs,
+an explicit tag:type dependency should be added to the tag:feature tag in
+exactly the same fashion as described above for `struct` types.
+
+Next, go to the line labelled
+
+[source,xml]
+--------------------------------------
+<comment>Vulkan enumerant (token) definitions</comment>
+--------------------------------------
+
+At an appropriate point below this line, add an tag:enums tag whose
+attr:name attribute matches the tag:type name `VkDeviceCreateFlagBits`, and
+whose contents correspond to the individual fields of the enumerated type:
+
+[source,xml]
+--------------------------------------
+<enums name="VkDeviceCreateFlagBits" type="bitmask">
+    <enum bitpos="0" name="VK_DEVICE_CREATE_VALIDATION_BIT"/>
+    <enum bitpos="1" name="VK_DEVICE_CREATE_MULTI_DEVICE_IQ_MATCH_BIT"/>
+</enums>
+--------------------------------------
+
+Several other attributes of the tag:enums tag can be set.
+In this case, the attr:type attribute is set to `"bitmask"`, indicating that
+the individual enumerants represent elements of a bitmask.
+
+The individual tag:enum tags define the enumerants, just like the definition
+for compile time constants described above.
+In this case, because the enumerants are bits in a bitmask, their values are
+specified using the attr:bitpos attribute.
+The value of this attribute must be an integer in the range [0,30]
+specifying a single bit number, and the resulting value is printed as a
+hexadecimal constant corresponding to that bit.
+
+It is also possible to specify enumerant values using the attr:value
+attribute, in which case the specified numeric value is passed through to
+the C header unchanged.
+
+
+[[adding-bitflags]]
+== How to Add Bit Flags
+
+Bit masks are defined by two types in the xml - the type of the mask itself,
+and the type of the valid flags.
+
+For this example, assume we want to define bit flags that can handle up to
+64 independent values as follows:
+
+[source,c]
+--------------------------------------
+// Flag bits for VkExampleFlagBits
+typedef VkFlags64 VkExampleFlagBits;
+static const VkExampleFlagBits VK_EXAMPLE_NONE = 0;
+static const VkExampleFlagBits VK_EXAMPLE_FIRST_BIT = 0x00000001;
+static const VkExampleFlagBits VK_EXAMPLE_SECOND_BIT = 0x00000002;
+
+typedef VkFlags64 VkExampleFlags;
+--------------------------------------
+
+An explicit tag:type dependency should be added to the tag:feature tag in
+exactly the same fashion as described above for `struct` types.
+
+Firstly, a definition is needed for the flags type used as a parameter to
+commands or member of functions.
+Go to the line labelled:
+
+[source,xml]
+--------------------------------------
+<comment>Bitmask types</comment>
+--------------------------------------
+
+At the end of the list of `VkFlags` and `VkFlags64` types, add a definition
+of the flags type like so:
+
+[source,xml]
+--------------------------------------
+<type bitvalues="VkExampleFlagBits" category="bitmask">typedef <type>VkFlags64</type> <name>VkExampleFlags</name>;</type>
+--------------------------------------
+
+The attr:category defines this as a `"bitmask"` type.
+The attr:bitvalues attribute identifies the `*FlagBits` entry defining the
+flag bits associated with this type.
+
+Next, go to the line labelled:
+
+[source,xml]
+--------------------------------------
+<comment>Types generated from corresponding enums tags below</comment>
+--------------------------------------
+
+At an appropriate point in the list of enum types after this comment, add
+the following line:
+
+[source,xml]
+--------------------------------------
+<type name="VkExampleFlagBits" category="enum"/>
+--------------------------------------
+
+This defines a type for the flag bits for generators that need it.
+The attr:category attribute of `"enum"` identifies that this is an
+enumerated type.
+
+Finally, go to the line labelled:
+
+[source,xml]
+--------------------------------------
+<comment>Vulkan enumerant (token) definitions</comment>
+--------------------------------------
+
+At the end of the list of enum definitions below this line, add an tag:enums
+tag whose attr:name attribute matches the tag:type name `VkExampleFlagBits`,
+and whose contents correspond to the individual fields of the enumerated
+type:
+
+[source,xml]
+--------------------------------------
+<enums name="VkExampleFlagBits" type="bitmask" bitwidth="64">
+    <enum value="0" name="VK_EXAMPLE_NONE"/>
+    <enum bitpos="0" name="VK_EXAMPLE_FIRST_BIT"/>
+    <enum bitpos="1" name="VK_EXAMPLE_SECOND_BIT"/>
+</enums>
+--------------------------------------
+
+The attr:type attribute is set to `"bitmask"`, indicating that the
+individual enumerants represent elements of a bitmask.
+The attr:bitwidth attribute is set to `"64"` indicating that this is a
+64-bit flag type.
+
+The individual tag:enum tags define the enumerants, just like the definition
+for compile time constants described above.
+In this case, a "no flags" type is defined in `VK_EXAMPLE_NONE` with the
+attr:value attribute defining it to have a hard value of 0.
+The other types have their values are specified using the attr:bitpos
+attribute, as these are actual bit flag values.
+The value of this attribute must be an integer in the range [0,63]
+specifying a single bit number, and the resulting value is printed as a
+hexadecimal constant corresponding to that bit.
+
+
+=== 32-bit Flags
+
+Bit flags can also be defined using 32-bit C enum types.
+Doing so is broadly similar to 64-bit bit flags, but with a few key
+differences.
+For this example, assume we want to define the same type as above, but
+corresponding to a C `enum` and flags type defined as follows:
+
+[source,c]
+--------------------------------------
+typedef enum VkExampleFlagBits {
+    VK_EXAMPLE_NONE
+    VK_DEVICE_CREATE_VALIDATION_BIT = 0x00000001,
+    VK_DEVICE_CREATE_MULTI_DEVICE_IQ_MATCH_BIT = 0x00000002;
+} VkExampleFlagBits;
+
+typedef VkFlags VkExampleFlags;
+--------------------------------------
+
+To add this to the xml, entries need to be added to the XML in the same way
+as above, but with slightly different attributes:
+
+For the flag type definition, the entry should use `VkFlags` instead of
+`VkFlags64`, and require the flag bits type, instead of specifying the
+attr:bitvalues attribute:
+
+[source,xml]
+--------------------------------------
+<type requires="VkExampleFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkExampleFlags</name>;</type>
+--------------------------------------
+
+For the definition of the enumerated flag values themselves, the bitwidth
+needs to either be changed to `"32"`, or omitted entirely (which defaults to
+a bitwidth of 32) as follows:
+
+[source,xml]
+--------------------------------------
+<enums name="VkExampleFlagBits" type="bitmask">
+--------------------------------------
+
+Note that 32-bit bitmasks must use an integer in the range [0,30] - C enums
+are only guaranteed to support signed 32-bit integer values, and defining an
+unsigned value for the 31st bit could change the size of the enum type.
+The generator scripts will warn about values exceeding this range.
+
+
+== How to Add a Command
+
+For this example, assume we want to define the command:
+
+[source,c]
+--------------------------------------
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    VkInstance*                                 pInstance);
+--------------------------------------
+
+Commands must always be explicitly required in the tag:feature tag.
+In that tag, you can use an existing tag:require block including API
+features which the new command should be grouped with, or define a new
+block.
+For this example, add a new block, and require the command by using the
+tag:command tag inside that block:
+
+[source,xml]
+--------------------------------------
+<feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions">
+    ...
+    <require comment="Device initialization">
+        <command name="vkCreateInstance"/>
+    </require>
+    ...
+</feature>
+--------------------------------------
+
+The tag:require block may include a attr:comment attribute whose value is a
+descriptive comment of the contents required within that block.
+The comment is not currently used in header generation, but might be in the
+future, so use comments which are polite and meaningful to users of the
+generated header files.
+
+Then go to the tag:commands tag and add a new tag:command tag defining the
+command, preferably sorted into alphabetic order with other commands for
+ease of reading, as follows:
+
+[source,xml]
+--------------------------------------
+<commands comment="Vulkan command definitions">
+    ...
+    <command>
+        <proto><type>VkResult</type>
+               <name>vkCreateInstance</name></proto>
+        <param>const <type>VkInstanceCreateInfo</type>*
+               <name>pCreateInfo</name></param>
+        <param><type>VkInstance</type>*
+               <name>pInstance</name></param>
+    </command>
+    ...
+</commands>
+--------------------------------------
+
+The tag:proto tag defines the return type and function name of the command.
+The tag:param tags define the command's parameters in the order in which
+they are passed, including the parameter type and name.
+The contents are laid out in the same way as the structure tag:member tags
+described previously.
+
+
+== More Complicated API Representations
+
+The registry schema can represent a good deal of additional information, for
+example by creating multiple tag:feature tags defining different API
+versions and extensions.
+This capability is not yet relevant to Vulkan.
+Those capabilities will be documented as they are needed.
+
+
+== More Complicated Output Formats and Other Languages
+
+The registry schema is oriented towards C-language APIs.
+Types and commands are defined using syntax which is a subset of C,
+especially for structure members and command parameters.
+It would be possible to use a language-independent syntax for representing
+such information, but since we are writing a C API, any such representation
+would have to be converted into C anyway at some stage.
+
+The `vulkan.h` header is written using an _output generator_ object in the
+Python scripts.
+This output generator is specialized for C, but the design of the scripts is
+intended to support writing output generators for other languages as well as
+purposes such as documentation (e.g. generating asciidoc fragments
+corresponding to types and commands for use in the API specification and
+reference pages).
+When targeting other languages, the amount of parsing required to convert
+type declarations into other languages is small.
+However, it will probably be necessary to modify some of the boilerplate C
+text, or specialize the tags by language, to support such generators.
+
+
+== Additional Semantic Tagging
+
+The schema is being extended to support semantic tags describing various
+properties of API features, such as:
+
+  * constraints on allowed scalar values to function parameters (non-`NULL`,
+    normalized floating-point, etc.)
+  * length of arrays corresponding to function pointer parameters
+  * miscellaneous properties of commands such as whether the application or
+    system is responsible for threadsafe use; which queues they may be
+    issued on; whether they are aliases or otherwise related to other
+    commands; etc.
+
+These tags will be used by other tools for purposes such as helping create
+validation layers, generating serialization code, and so on.
+We would like to eventually represent everything about the API that is
+amenable to automatic processing within the registry schema.
+Please make suggestions on the GitHub issue tracker.
+
+
+[[general:stability]]
+== Stability of the XML Database and Schema
+
+The Vulkan XML schema is evolving in response to corresponding changes in
+the Vulkan API and ecosystem.
+Most such change will probably be confined to adding attributes to existing
+tags and properly expressing the relationships to them, and making API
+changes corresponding to accepted feature requests.
+Changes to the schema should be described in the <<changelog,change log>> of
+this document.
+Changes to the `.xml` files and Python scripts are logged in GitHub history.
+
+
+[[changelog]]
+= Change Log
+
+  * 2023-06-28 - remove support for tag:member and tag:param attr:optional
+    attribute value `"false"` (internal issue 3548).
+  * 2023-06-14 - removed deprecated attr:start and attr:end from tag:enums
+  * 2023-05-18 - Add tag:sync to help define all sync objects in the XML
+  * 2023-03-29 - add tag:extension attr:ratified attribute to express
+    ratification status.
+  * 2023-02-26 - add normative references section, cite it as needed, and
+    update description of tag:extension tags to refer to the style guide for
+    computing numeric enumerant values (public issue 2069).
+  * 2023-02-22 - specify that attr:depends expressions are
+    <<depends-expressions, evaluated left-to-right>> for operators of the
+    same precedence (public issue 2062).
+  * 2023-02-14 - replace tag:extension attributes attr:requiresCore and
+    attr:requires, and tag:require attributes attr:feature and
+    attr:extension, by a new attr:depends attribute. This is an intentional
+    breaking change to support a more flexible and consistent expression
+    syntax for these dependencies (internal issues 2883, 3272).
+  * 2023-01-11 - add attr:deprecated attribute to tag:enum, tag:type,
+    and tag:type tag:member tags.
+  * 2022-11-23 - update tag:command attr:queues syntax to include all queue
+    types currently in use.
+  * 2022-08-12 - update tag:requires attr:extension syntax to support
+    logical OR and AND constructs for multiple extensions (internal issue
+    2922).
+  * 2022-07-11 - Add attr:videocoding attribute to <<tag-command,tag:command>>
+    tags to indicate whether a command buffer command can be recorded inside,
+    outside, or both inside and outside of a video coding scope.
+  * 2022-06-29 - Add tag:command attribute attr:tasks (internal issue 3117).
+  * 2022-06-22 - Add attr:validstructs attribute to command
+    <<tag-command:param:attr, tag:param>> tags when using an abstract
+    `VkBaseInStructure` or `VkBaseOutStructure` as the formal parameter
+    type.
+  * 2022-06-16 - Add `VkSparseImageFormatProperties*` to the list of
+    structure types allowed to have 'limittype' member attributes.
+  * 2022-06-08 - Add `exact`, `bits`, `mul` and `pot` limit types.
+  * 2022-06-08 - Update description of types to which the attr:limittype
+    attribute of structure tag:member tags can be applied (internal issue
+    3101).
+  * 2022-06-08 - Update description of tag:extension attr:requires attribute
+    such that the specified extensions must be *enabled*, not just
+    *supported*. This is consistent with the following NOTE, the
+    specification description of "`required extensions`", and actual use in
+    the XML of this attribute (internal issue 3116).
+  * 2021-12-13 - Add attr:api attribute to the tag:member and tag:param
+    tags.
+  * 2021-11-29 - Add attr:api attribute to the tag:command tag.
+  * 2021-10-11 - Add description of the tag:formats tag for describing
+    Vulkan `VkFormat` image formats, and of the tag:spirvextensions and
+    tag:spirvcapabilities tags for describing enabling mechanisms for SPIR-V
+    extensions (internal issue 2484).
+  * 2021-09-13 - Further clarify that attr:api and attr:supported attributes
+    are comma-separated list of API names (internal issue 2809).
+  * 2021-08-22 - Update introductory descriptions of toolchain and scripts.
+  * 2021-08-15 - Add an explicit description of the tag:enum attr:extends
+    attribute as introducing a requirement for the enumerated type being
+    extended.
+  * 2021-07-12 - Note that tag:extension tags describing instance extensions
+    must not have dependencies on device extensions (internal issue 2387).
+  * 2021-06-14 - Add an `objecttype` attribute which specifies the
+    relationship between a Vulkan handle and another member or parameter
+    specifying the type of object that handle refers to (public issue 1536).
+  * 2021-06-06 - Update description of the attr:supported attribute of
+    <<tag-extension, tag:extension tags>> to mandate that `disabled`
+    extensions are not processed (public issue 1549).
+  * 2021-04-21 - Add the attr:limittype attribute to <<tag-type, structure
+    tag:member tags>>, to describe how queried limits are interpreted
+    (internal issue 2427).
+  * 2021-03-30 - Add a description of the <<compile-time-constants-format,
+    allowed format of compile time constants>> (internal merge request
+    4451).
+  * 2021-03-22 - Update allowed values for the attr:type attribute of
+    tag:enum tags and make it mandatory (internal issue 2564).
+  * 2021-01-11 - Expand the scope of the attr:optional attribute tag:member
+    and tag:param tags to specify that the member or parameter may be 0 for
+    all scalar types, not just bitmasks and array sizes (internal issue
+    2435).
+  * 2020-11-23 - Add `objtypeenum` attribute to <<tag:type, tag:type>> tags
+    to link the object name to the corresponding `VK_OBJECT_TYPE_*`
+    enumerant, if any (internal issue 2393).
+  * 2020-11-22 - Add requirement that `pNext` members have the
+    `optional="true"` attribute set (internal issue 2428).
+  * 2020-10-14 - Remove advice to set the attr:noautovalidity attribute on
+    the `pNext` member of extending structures in the <<tag:type, tag:type
+    tag>>, since the validity generator scripts now take care of this
+    (internal issue 2335).
+  * 2020-06-02 - Add description of how to switch between 64- and 32-bit
+    flags.
+  * 2020-05-07 - Update description of <<schema:apiname, API Names>> to
+    current usage, including allowing specifying multiple API names for a
+    given feature or extension.
+  * 2020-04-29 - Expand use of attr:category `basetype` in tag:type tags to
+    include external API types.
+  * 2020-02-20 - Clarify that tag:enum tags inside tag:remove tags must be
+    reference enums, not containing attributes defining values.
+  * 2020-01-13 - Restrict attr:bitpos to [0,30] to avoid poorly defined
+    compiler behavior.
+  * 2019-08-25 - Add attr:sortorder attribute to tag:feature and
+    tag:extension tags.
+  * 2018-12-06 - Specify that command aliases are not guaranteed to resolve
+    to the same entry point in the underlying layer stack, matching a
+    related clarification in the Vulkan Specification.
+  * 2018-10-01 - Add description of the default value of attr:optional
+    member and parameter attributes, if not specified.
+  * 2018-08-28 - Add optional attr:provisional attribute to tag:extension
+    tags.
+  * 2018-07-07 - Add optional attr:promotedto, attr:deprecatedby, and
+    attr:obsoletedby attributes to tag:extension tags.
+  * 2018-06-25 - Remove attr:vendorids tags for Khronos vendor IDs.
+  * 2018-05-08 - Add tag:driverids and tag:driverid tags for describing
+    Vulkan driver implementation identification information.
+  * 2018-04-15 - Add attr:requiresCore.
+  * 2018-03-07 - Updated for Vulkan 1.1 release.
+  * 2018-02-21 - Add descriptions of the attr:extnumber and attr:alias
+    attributes used for defining tag:enum attributes, the attr:alias
+    attribute used for defining tag:type aliases, the attr:name and
+    attr:alias attributes used for defining tag:command aliases, the
+    attr:platform attribute of tag:extension tags, and the attr:feature
+    attribute of tag:require tags; and update the document to the header
+    naming and grouping scheme used starting in Vulkan 1.1.
+  * 2018-01-07 - Add tag:platforms and tag:platform tags for describing
+    Vulkan platform names and preprocessor symbols.
+  * 2017-09-10 - Define syntax of member and parameter attr:altlen
+    attributes, for use by code generators.
+  * 2017-09-01 - Define syntax of member and parameter attr:len attributes
+    consistently and correctly for current uses of latexmath:
+  * 2017-08-24 - Note that the tag:extension attribute attr:type must be
+    specified if the extension is not disabled.
+  * 2017-07-27 - Finish removing validextensionstructs attribute and
+    replacing it with structextends.
+  * 2017-07-14 - Add comment attributes or tags as valid content in several
+    places, replacing XML comments which could not be preserved by XML
+    transformation tools.
+  * 2017-02-20 - Change to asciidoctor markup and move into the
+    specification source directory for ease of building.
+  * 2016-09-27 - Remove tag:validity and tag:usage tags, since these
+    explicit usage statements have been moved to the specification source.
+  * 2016-08-26 - Update for the single-branch model.
+  * 2016-07-28 - Add attr:type and attr:requires attributes to tag:extension
+    tags.
+  * 2016-02-22 - Change math markup in attr:len attributes to use asciidoc
+    `latexmath:[$` and `$]` delimiters.
+  * 2016-02-19 - Add attr:successcodes and attr:errorcodes attributes of
+    tag:command tags.
+    Add a subsection to the introduction describing the schema choices and
+    how to file issues against the registry.
+  * 2016-02-07 - Add attr:vendorids tags for Khronos vendor IDs.
+  * 2015-12-10 - Add attr:author and attr:contact attributes for
+    tag:extension tags.
+  * 2015-12-07 - Move `vulkan/vulkan.h` to a subdirectory.
+  * 2015-12-01 - Add tag:tags tags for author tags.
+  * 2015-11-18 - Bring documentation and schema up to date for extension
+    enumerants.
+  * 2015-11-02 - Bring documentation and schema up to date with several
+    recent merges, including tag:validity tags.
+    Still out of date WRT extension enumerants, but that will change soon.
+  * 2015-09-08 - Rename `threadsafe` attribute to attr:externsync, and
+    `implicitunsafeparams` tag to attr:implicitexternsync.
+  * 2015-09-07 - Update tag:command tag description to remove the
+    attr:threadsafe attribute and replace it with a combination of
+    attr:threadunsafe attributes on individual parameters, and
+    tag:implicitunsafeparams tags describing additional unsafe objects for
+    the command.
+  * 2015-08-04 - Add `basetype` and `funcpointer` attr:category values for
+    type tags, and explain the intended use and order in which types in each
+    category are emitted.
+  * 2015-07-02 - Update description of Makefile targets.
+    Add descriptions of attr:threadsafe, attr:queues, and attr:renderpass
+    attributes of <<tag-command,tag:command>> tags, and of attr:modified
+    attributes of <<tag-command:param,tag:param>> tags.
+  * 2015-06-17 - add descriptions of allowed attr:category attribute values
+    of tag:type tags, used to group and sort related categories of
+    declarations together in the generated header.
+  * 2015-06-04 - Add <<examples,examples of making changes and additions>>
+    to the registry.
+  * 2015-06-03 - Move location to new `vulkan` Git repository.
+    Add definition of tag:type tags for C struct/unions.
+    Start adding <<examples,examples of making changes>>.
+  * 2015-06-02 - Branch from OpenGL specfile documentation and bring up to
+    date with current Vulkan schema.
+  * 2015-07-10 - Remove contractions to match the style guide.
+  * 2015-07-19 - Move this document from LaTeX to asciidoc source format and
+    make minor changes to markup.
diff --git a/codegen/vulkan/vulkan-docs-next/sandboxCopy b/codegen/vulkan/vulkan-docs-next/sandboxCopy
new file mode 100755
index 0000000..e09cecf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/sandboxCopy
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+#
+# Copyright 2018-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+specdir=out
+RHOST=kaylee
+RPATH=/home/khronos/memberftp/vulkan/
+
+cd $specdir || (echo "Cannot cd to $specdir !" ; exit 1)
+# Create tarball and upload/copy/extract that to speed things
+echo "Creating tarball"
+tar czpf /tmp/tarball.tgz .
+echo "Uploading tarball"
+scp /tmp/tarball.tgz $RHOST:$RPATH
+echo "Extracting tarball on server"
+# Could add "&& rm tarball.tgz" but nice to have around
+ssh $RHOST "cd $RPATH && tar xzpf tarball.tgz"
+echo "Removing tarball"
+rm /tmp/tarball.tgz
+
+# scp -rp * $RHOST:$RPATH
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/README.adoc b/codegen/vulkan/vulkan-docs-next/scripts/README.adoc
new file mode 100644
index 0000000..e9b2558
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/README.adoc
@@ -0,0 +1,83 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan^(R)^ Specification Repository Scripts
+
+This directory contains scripts used in building the Vulkan API
+specification and related artifacts. For the most part, these scripts are
+invoked from the top-level directory or from the API Registry in
+../xml to build generated components of the specification.
+
+Scripts in this directory include:
+
+  * `genvk.py` - Python script to generate Vulkan headers and some other
+    targets, using the generators described below.
+  * `reg.py` - Python tools to read a registry XML file and call into
+    generators to create headers and other types of output.
+  * `conventions.py`, `vkconventions.py`, `apiconventions.py` - API-specific
+    parameters and formatting / style conventions used by generators.
+  * `generator.py` - output generator base class.
+  ** `cgenerator.py` - C header output generator.
+  ** `docgenerator.py` - Asciidoc interface language include generator.
+  ** `extensionmetadocgenerator.py` - Generator for Asciidoc extension
+     descriptions in spec appendices.
+  ** `hostsyncgenerator.py` - Asciidoc host sync table generator.
+  ** `interfacedocgenerator.py` - Asciidoc extension appendix interface
+     generator.
+  ** `pygenerator.py, `rubygenerator.py`, `scriptgenerator.py` - generate
+     Python and Ruby encodings of parts of the API description for use in
+     other scripts and asciidoctor extensions.
+  ** `spirvcapgenerator.py` - Asciidoc generator for SPIR-V capability
+     tables.
+  ** `validitygenerator.py` - Asciidoc validity language generator.
+
+  * `check_spec_links.py` - validates a variety of markup and content in the
+    Asciidoctor specification source.
+  * `conventions.py`, `vkconventions.py` - API-specific options used by
+    scripts shared with OpenXR and other APIs.
+  * `extdependency.py` - generate extension dependencies for use when
+    building the specification.
+  * `genRelease`, `genspec.py` - build HTML and PDF Specifications with a
+    variety of options to control target directories, extensions included
+    while building, etc.
+  * `genRef.py`, `reflib.py`, `makemanaliases.py` - extract API reference
+    pages from specification source into single-page source documents, and
+    create symbolic links in the generated refpage HTML for API aliases.
+  * `indexExt.py` - generate HTML index of all extensions for inclusion into
+    the Vulkan registry index page.
+  * `reflow.py`, `reflow_count.py` - reflow specification source text to
+    follow style guidelines, and insert Valid Usage statements where they
+    are needed.
+  * `test_check_spec_links.py`, `test_check_spec_links_api_specific.py`,
+    `test_entity_db.py` - these are from another Khronos WG repository and
+    are unused by Vulkan at present.
+  * `xml_consistency.py` - perform some internal consistency checks on
+    `vk.xml`.
+
+  * `compImages.sh` - compare images in two branches.
+  * `htmldiff/htmldiff` - HTML diff script (see below).
+  * `Retired/` - contains obsolete, unused, or single-purpose scripts. Not
+    maintained.
+
+== HTML Diff Script for Vulkan
+
+This is a first cut at a script to compare Vulkan HTML specifications. Usage
+is simply 'htmldiff file1.html file2.html > diff.html'. The script does not
+copy CSS and images required by the input specs, so it is best to generate
+the output in the same directory as one of the inputs. However, the script
+must be invoked from the directory it is located within.
+
+The scripts used require Python and Perl. Additionally, the python
+'utidylib' module and the underlying libtidy C library are required.
+On Debian Linux, it may be necessary to install the 'python-utidylib' and
+'libtidy' packages if they are not already present.
+
+The scripts are taken from the code backing the
+
+    http://services.w3.org/htmldiff
+
+website. `htmldiff` is the Python driver script. `htmldiff.pl` is the
+Perl script which generates the diff after preprocessing of the input
+HTML by `htmldiff`. `htmldiff.orig` is the original Python script from
+the website, modified to run at the command line instead of as a CGI
+script.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/checkLinks.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/checkLinks.py
new file mode 100755
index 0000000..8d0b071
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/checkLinks.py
@@ -0,0 +1,353 @@
+#!/usr/bin/python3
+#
+# Copyright 2015-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# checkLinks.py - validate link/reference API constructs in files
+#
+# Usage: checkLinks.py [options] files > logfile
+#
+# Options:
+# -follow attempt to follow include:: directives. This script is not an
+#  Asciidoctor processor, so only literal relative paths can be followed.
+# -info print some internal diagnostics.
+# -paramcheck attempt to validate param: names against the surrounding
+#  context (the current structure/function being validated, for example).
+#  This generates many false positives, so is not enabled by default.
+# -fatal unvalidatable links cause immediate error exit from the script.
+#  Otherwise, errors are accumulated and summarized at the end.
+#
+# Depends on vkapi.py, which is a Python representation of relevant parts
+# of the Vulkan API. Only works when vkapi.py is generated for the full
+# API, e.g. 'makeAllExts checklinks'; otherwise many false-flagged errors
+# will occur.
+
+import copy, os, pdb, re, string, sys
+from vkapi import *
+
+global curFile, curLine, sectionDepth
+global errCount, warnCount, emittedPrefix, printInfo
+
+curFile = '???'
+curLine = -1
+sectionDepth = 0
+emittedPrefix = {}
+printInfo = False
+
+# Called before printing a warning or error. Only prints once prior
+# to output for a given file.
+def emitPrefix():
+    global curFile, curLine, emittedPrefix
+    if (curFile not in emittedPrefix.keys()):
+        emittedPrefix[curFile] = None
+        print('Checking file:', curFile)
+        print('-------------------------------')
+
+def info(*args, **kwargs):
+    global curFile, curLine, printInfo
+    if (printInfo):
+
+        emitPrefix()
+        print('INFO: %s line %d:' % (curFile, curLine),
+            ' '.join([str(arg) for arg in args]))
+
+# Print a validation warning found in a file
+def warning(*args, **kwargs):
+    global curFile, curLine, warnCount
+
+    warnCount = warnCount + 1
+    emitPrefix()
+    print('WARNING: %s line %d:' % (curFile, curLine),
+        ' '.join([str(arg) for arg in args]))
+
+# Print a validation error found in a file
+def error(*args, **kwargs):
+    global curFile, curLine, errCount
+
+    errCount = errCount + 1
+    emitPrefix()
+    print('ERROR: %s line %d:' % (curFile, curLine),
+        ' '.join([str(arg) for arg in args]))
+
+# See if a tag value exists in the specified dictionary and
+# suggest it as an alternative if so.
+def checkTag(tag, value, dict, dictName, tagName):
+    if (value in dict.keys()):
+        warning(value, 'exists in the API but not as a',
+            tag + ': .', 'Try using the', tagName + ': tag.')
+
+# Report an error due to an asciidoc tag which does not match
+# a corresponding API entity.
+def foundError(errType, tag, value, fatal):
+    global curFile, curLine
+    error('no such', errType, tag + ':' + value)
+    # Try some heuristics to detect likely problems such as missing vk
+    # prefixes or the wrong tag.
+
+    # Look in all the dictionaries in vkapi.py to see if the tag
+    # is just wrong but the API entity actually exists.
+    checkTag(tag, value, flags,   'flags', 'tlink/tname')
+    checkTag(tag, value, enums,   'enums', 'elink')
+    checkTag(tag, value, structs, 'structs', 'slink/sname')
+    checkTag(tag, value, handles, 'handles', 'slink/sname')
+    checkTag(tag, value, defines, 'defines', 'slink/sname')
+    checkTag(tag, value, consts,  'consts', 'ename')
+    checkTag(tag, value, protos,  'protos', 'flink/fname')
+    checkTag(tag, value, funcpointers, 'funcpointers', 'tlink/tname')
+
+    # Look for missing vk prefixes (quirky since it is case-dependent)
+    # NOT DONE YET
+
+    if fatal:
+        print('ERROR: %s line %d:' % (curFile, curLine),
+            ' '.join(['no such', errType, tag + ':' + value]), file=sys.stderr)
+        sys.exit(1)
+
+# Look for param in the list of all parameters of the specified functions
+# Returns True if found, False otherwise
+def findParam(param, funclist):
+    for f in funclist:
+        if (param in protos[f]):
+            info('parameter:', param, 'found in function:', f)
+            return True
+    return False
+
+# Initialize tracking state for checking links/includes
+def initChecks():
+    global curFile, curLine, curFuncs, curStruct, accumFunc, sectionDepth
+    global errCount, warnCount
+    global incPat, linkPat, pathPat, sectionPat
+
+    # Matches asciidoc single-line section tags
+    sectionPat = re.compile('^(=+) ')
+
+    # Matches any asciidoc include:: directive
+    pathPat = re.compile('^include::([\w./_]+)\[\]')
+
+    # Matches asciidoc include:: directives used in spec/ref pages (and also
+    # others such as validity). This is specific to the layout of the api/
+    # includes and allows any path preceding 'api/' followed by the category
+    # (protos, structs, enums, etc.) followed by the name of the proto,
+    # struct, etc. file.
+    incPat = re.compile('^.*api/(\w+)/(\w+)\.adoc')
+
+    # Lists of current /protos/ (functions) and /structs/ includes. There
+    # can be several protos contiguously for different forms of a command
+    curFuncs = []
+    curStruct = None
+
+    # Tag if we should accumulate funcs or start a new list. Any intervening
+    # pname: tags or struct includes will restart the list.
+    accumFunc = False
+
+    # Matches all link names in the current spec/man pages. Assumes these
+    # macro names are not trailing subsets of other macros. Used to
+    # precede the regexp with [^A-Za-z], but this did not catch macros
+    # at start of line.
+    linkPat = re.compile('([efpst](name|link)):(\w*)')
+
+    # Total error/warning counters
+    errCount = 0
+    warnCount = 0
+
+# Validate asciidoc internal links in specified file.
+#   infile - filename to validate
+#   follow - if True, recursively follow include:: directives
+#   paramCheck - if True, try to verify pname: refers to valid
+#   parameter/member names. This generates many false flags currently
+#   included - if True, function was called recursively
+#   fatalExit - if True, validation errors cause an error exit immediately
+# Links checked are:
+#   fname:vkBlah     - Vulkan command name (generates internal link)
+#   flink:vkBlah     - Vulkan command name
+#   sname:VkBlah     - Vulkan struct name (generates internal link)
+#   slink:VkBlah     - Vulkan struct name
+#   elink:VkEnumName - Vulkan enumeration ('enum') type name (generates internal link)
+#   ename:VK_BLAH    - Vulkan enumerant token name
+#   pname:name       - parameter name to a command or a struct member
+#   tlink:name       - Other Vulkan type name (generates internal link)
+#   tname:name       - Other Vulkan type name
+def checkLinks(infile, follow = False, paramCheck = True, included = False, fatalExit = False):
+    global curFile, curLine, curFuncs, curStruct, accumFunc, sectionDepth
+    global errCount, warnCount
+    global incPat, linkPat, pathPat, sectionPat
+
+    # Global state which gets saved and restored by this function
+    oldCurFile = curFile
+    oldCurLine = curLine
+    curFile = infile
+    curLine = 0
+
+    # N.b. dirname() returns an empty string for a path with no directories,
+    # unlike the shell dirname(1).
+    if (not os.path.exists(curFile)):
+        error('No such file', curFile, '- skipping check')
+        # Restore global state before exiting the function
+        curFile = oldCurFile
+        curLine = oldCurLine
+        return
+
+    inPath = os.path.dirname(curFile)
+    fp = open(curFile, 'r', encoding='utf-8')
+
+    for line in fp:
+        curLine = curLine + 1
+
+        # Track changes up and down section headers, and forget
+        # the current functions/structure when popping up a level
+        match = sectionPat.search(line)
+        if (match):
+            info('Match sectionPat for line:', line)
+            depth = len(match.group(1))
+            if (depth < sectionDepth):
+                info('Resetting current function/structure for section:', line)
+                curFuncs = []
+                curStruct = None
+            sectionDepth = depth
+
+        match = pathPat.search(line)
+        if (match):
+            incpath = match.group(1)
+            info('Match pathPat for line:', line)
+            info('  incpath =', incpath)
+            # An include:: directive. First check if it looks like a
+            # function or struct include file, and modify the corresponding
+            # current function or struct state accordingly.
+            match = incPat.search(incpath)
+            if (match):
+                info('Match incPat for line:', line)
+                # For prototypes, if it is preceded by
+                # another include:: directive with no intervening link: tags,
+                # add to the current function list. Otherwise start a new list.
+                # There is only one current structure.
+                category = match.group(1)
+                tag = match.group(2)
+                # @ Validate tag!
+                # @ Arguably, any intervening text should shift to accumFuncs = False,
+                # e.g. only back-to-back includes separated by blank lines would be
+                # accumulated.
+                if (category == 'protos'):
+                    if (tag in protos.keys()):
+                        if (accumFunc):
+                            curFuncs.append(tag)
+                        else:
+                            curFuncs = [ tag ]
+                            # Restart accumulating functions
+                            accumFunc = True
+                        info('curFuncs =', curFuncs, 'accumFunc =', accumFunc)
+                    else:
+                        error('include of nonexistent function', tag)
+                elif (category == 'structs'):
+                    if (tag in structs.keys()):
+                        curStruct = tag
+                        # Any /structs/ include means to stop accumulating /protos/
+                        accumFunc = False
+                        info('curStruct =', curStruct)
+                    else:
+                        error('include of nonexistent struct', tag)
+            if (follow):
+                # Actually process the included file now, recursively
+                newpath = os.path.normpath(os.path.join(inPath, incpath))
+                info(curFile, ': including file:', newpath)
+                checkLinks(newpath, follow, paramCheck, included = True, fatalExit = fatalExit)
+
+        matches = linkPat.findall(line)
+        for match in matches:
+            # Start actual validation work. Depending on what the
+            # asciidoc tag name is, look up the value in the corresponding
+            # dictionary.
+            tag = match[0]
+            value = match[2]
+            if (tag == 'fname' or tag == 'flink'):
+                if (value not in protos.keys()):
+                    foundError('function', tag, value, False)
+            elif (tag == 'sname' or tag == 'slink'):
+                if (value not in structs.keys() and
+                    value not in handles.keys()):
+                    foundError('aggregate/scalar/handle/define type', tag, value, False)
+            elif (tag == 'ename'):
+                if (value not in consts.keys() and value not in defines.keys()):
+                    foundError('enumerant/constant', tag, value, False)
+            elif (tag == 'elink'):
+                if (value not in enums.keys() and value not in flags.keys()):
+                    foundError('enum/bitflag type', tag, value, fatalExit)
+            # tname and tlink are the same except if the errors are treated as fatal
+            # They can be recombined once both are error-clean
+            elif (tag == 'tname'):
+                if (value not in funcpointers.keys() and value not in flags.keys()):
+                    foundError('function pointer/other type', tag, value, fatalExit)
+            elif (tag == 'tlink'):
+                if (value not in funcpointers.keys() and value not in flags.keys()):
+                    foundError('function pointer/other type', tag, value, False)
+            elif (tag == 'pname'):
+                # Any pname: tag means to stop accumulating /protos/
+                accumFunc = False
+                # See if this parameter is in the current proto(s) and struct
+                foundParam = False
+                if (curStruct and value in structs[curStruct]):
+                    info('parameter', value, 'found in struct', curStruct)
+                elif (curFuncs and findParam(value, curFuncs)):
+                    True
+                else:
+                    if paramCheck:
+                        warning('parameter', value, 'not found. curStruct =',
+                                curStruct, 'curFuncs =', curFuncs)
+            else:
+                # This is a logic error
+                error('unknown tag', tag + ':' + value)
+    fp.close()
+
+    if (errCount > 0 or warnCount > 0):
+        if (not included):
+            print('Errors found:', errCount, 'Warnings found:', warnCount)
+            print('')
+
+    if (included):
+        info('----- returning from:', infile, 'to parent file', '-----')
+
+    # Do not generate any output for files without errors
+    # else:
+    #     print(curFile + ': No errors found')
+
+    # Restore global state before exiting the function
+    curFile = oldCurFile
+    curLine = oldCurLine
+
+if __name__ == '__main__':
+    follow = False
+    paramCheck = False
+    included = False
+    fatalExit = False
+
+    totalErrCount = 0
+    totalWarnCount = 0
+
+    if (len(sys.argv) > 1):
+        for file in sys.argv[1:]:
+            if (file == '-follow'):
+                follow = True
+            elif (file == '-info'):
+                printInfo = True
+            elif file == '-paramcheck':
+                paramCheck = True
+            elif (file == '-fatal'):
+                fatalExit = True
+            else:
+                initChecks()
+                checkLinks(file,
+                           follow,
+                           paramCheck = paramCheck,
+                           included = included,
+                           fatalExit = fatalExit)
+                totalErrCount = totalErrCount + errCount
+                totalWarnCount = totalWarnCount + warnCount
+    else:
+        print('Need arguments: [-follow] [-info] [-paramcheck] [-fatal] infile [infile...]', file=sys.stderr)
+
+    if (totalErrCount > 0 or totalWarnCount > 0):
+        if (not included):
+            print('TOTAL Errors found:', totalErrCount, 'Warnings found:',
+                  totalWarnCount)
+            if totalErrCount > 0:
+                sys.exit(1)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/extensionStubSource.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/extensionStubSource.py
new file mode 100644
index 0000000..eac3a3e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/extensionStubSource.py
@@ -0,0 +1,327 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import os,re,sys
+from generator import *
+
+doc = """
+/*
+** This target is no longer maintained and supported.
+** See README.adoc for discussion.
+**
+** This is a simple extension loader which provides the implementations for the
+** extension prototypes declared in vulkan header. It supports loading extensions either
+** for a single instance or a single device. Multiple instances are not yet supported.
+**
+** To use the loader add vulkan_ext.c to your solution and include <vulkan/vulkan_ext.h>.
+**
+** If your application is using a single instance, but multiple devices callParam
+**
+** vkExtInitInstance(instance);
+**
+** after initializing the instance. This way the extension loader will use the loaders
+** trampoline functions to call the correct driver for each call. This method is safe
+** if your application might use more than one device at the cost of one additional
+** indirection, the dispatch table of each dispatchable object.
+**
+** If your application uses only a single device it is better to use
+**
+** vkExtInitDevice(device);
+**
+** once the device has been initialized. This will resolve the function pointers
+** upfront and thus removes one indirection for each call into the driver. This *can*
+** result in slightly more performance for calling overhead limited cases.
+*/
+"""
+
+# StubExtGeneratorOptions - subclass of GeneratorOptions.
+#
+# Adds options used by COutputGenerator objects during C language header
+# generation.
+#
+# Additional members
+#   prefixText - list of strings to prefix generated header with
+#     (usually a copyright statement + calling convention macros).
+#   alignFuncParam - if nonzero and parameters are being put on a
+#     separate line, align parameter names at the specified column
+class StubExtGeneratorOptions(GeneratorOptions):
+    """Represents options during C interface generation for headers"""
+    def __init__(self,
+                 filename = None,
+                 directory = '.',
+                 apiname = None,
+                 profile = None,
+                 versions = '.*',
+                 emitversions = '.*',
+                 defaultExtensions = None,
+                 addExtensions = None,
+                 removeExtensions = None,
+                 emitExtensions = None,
+                 sortProcedure = regSortFeatures,
+                 prefixText = "",
+                 alignFuncParam = 0):
+        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
+                                  versions, emitversions, defaultExtensions,
+                                  addExtensions, removeExtensions,
+                                  emitExtensions, sortProcedure)
+        self.prefixText      = prefixText
+        self.alignFuncParam  = alignFuncParam
+
+# ExtensionStubSourceOutputGenerator - subclass of OutputGenerator.
+# Generates C-language extension wrapper interface sources.
+#
+# ---- methods ----
+# ExtensionStubSourceOutputGenerator(errFile, warnFile, diagFile) - args as for
+#   OutputGenerator. Defines additional internal state.
+# ---- methods overriding base class ----
+# beginFile(genOpts)
+# endFile()
+# beginFeature(interface, emit)
+# endFeature()
+# genType(typeinfo,name)
+# genStruct(typeinfo,name)
+# genGroup(groupinfo,name)
+# genEnum(enuminfo, name)
+# genCmd(cmdinfo)
+class ExtensionStubSourceOutputGenerator(OutputGenerator):
+    """Generate specified API interfaces in a specific style, such as a C header"""
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'funcpointer', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS + ['commandPointer', 'command']
+    def __init__(self,
+                 errFile = sys.stderr,
+                 warnFile = sys.stderr,
+                 diagFile = sys.stdout):
+        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
+    #
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+        # C-specific
+        #
+        # Multiple inclusion protection & C++ wrappers.
+
+        # Internal state - accumulators for function pointers and function
+        # pointer initializatoin
+        self.pointers = [];
+        self.pointerInitializersInstance = [];
+        self.pointerInitializersDevice = [];
+
+        #
+        # Write header protection
+        filename = self.genOpts.directory + '/' + 'vulkan_ext.h'
+        self.outFileHeader = open(filename, 'w', encoding='utf-8')
+
+        write('#ifndef VULKAN_EXT_H', file=self.outFileHeader)
+        write('#define VULKAN_EXT_H', file=self.outFileHeader)
+        write('', file=self.outFileHeader)
+        write('#ifdef __cplusplus', file=self.outFileHeader)
+        write('extern "C" {', file=self.outFileHeader)
+        write('#endif', file=self.outFileHeader)
+
+        #
+        # User-supplied prefix text, if any (list of strings)
+        if (genOpts.prefixText):
+            for s in genOpts.prefixText:
+                write(s, file=self.outFile)
+                write(s, file=self.outFileHeader)
+
+        write(doc, file=self.outFileHeader)
+
+        write('#include <vulkan/vulkan.h>', file=self.outFile)
+        self.newline()
+
+        write('#include <vulkan/vulkan_core.h>', file=self.outFileHeader)
+        write('', file=self.outFileHeader)
+
+        write('void vkExtInitInstance(VkInstance instance);', file=self.outFileHeader)
+        write('void vkExtInitDevice(VkDevice device);', file=self.outFileHeader)
+        write('', file=self.outFileHeader)
+
+    def endFile(self):
+        for pointer in self.pointers:
+          write(pointer, file=self.outFile)
+
+        self.newline()
+
+        write('void vkExtInitInstance(VkInstance instance)\n{', file=self.outFile)
+        for pointerInitializer in self.pointerInitializersInstance:
+          write(pointerInitializer, file=self.outFile)
+        write('}', file=self.outFile)
+
+        self.newline()
+
+        write('void vkExtInitDevice(VkDevice device)\n{', file=self.outFile)
+        for pointerInitializer in self.pointerInitializersDevice:
+          write(pointerInitializer, file=self.outFile)
+        write('}', file=self.outFile)
+
+        self.newline()
+
+        #Finish header file
+        write('#ifdef __cplusplus', file=self.outFileHeader)
+        write('}', file=self.outFileHeader)
+        write('#endif', file=self.outFileHeader)
+        write('', file=self.outFileHeader)
+        write('#endif', file=self.outFileHeader)
+        self.outFileHeader.close()
+
+        # Finish processing in superclass
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        # Accumulate function pointers and function pointer initialization
+        self.featurePointers = []
+        self.featurePointerInitializersInstance = []
+        self.featurePointerInitializersDevice = []
+
+    def endFeature(self):
+        # Add feature to global list with protectFeature
+        if (self.emit and self.featurePointers):
+          if (self.genOpts.protectFeature):
+              self.pointers.append('#ifdef ' + self.featureName)
+              self.pointerInitializersInstance.append('#ifdef ' + self.featureName)
+              self.pointerInitializersDevice.append('#ifdef ' + self.featureName)
+
+          if (self.featureExtraProtect != None):
+              self.pointers.append('#ifdef ' + self.featureExtraProtect)
+              self.pointerInitializersInstance.append('#ifndef ' + self.featureName)
+              self.pointerInitializersDevice.append('#ifndef ' + self.featureName)
+
+          self.pointers += self.featurePointers;
+          self.pointerInitializersInstance += self.featurePointerInitializersInstance;
+          self.pointerInitializersDevice += self.featurePointerInitializersDevice;
+
+          if (self.featureExtraProtect != None):
+              self.pointers.append('#endif /* ' + self.featureExtraProtect + ' */')
+              self.pointerInitializersInstance.append('#endif /* ' + self.featureExtraProtect + ' */')
+              self.pointerInitializersDevice.append('#endif /* ' + self.featureExtraProtect + ' */')
+          if (self.genOpts.protectFeature):
+              self.pointers.append('#endif /* ' + self.featureName + ' */')
+              self.pointerInitializersInstance.append('#endif /* ' + self.featureName + ' */')
+              self.pointerInitializersDevice.append('#endif /* ' + self.featureName + ' */')
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+    #
+    # Type generation
+    def genType(self, typeinfo, name, alias):
+      pass
+
+    def genStruct(self, typeinfo, typeName, alias):
+      pass
+
+    def genGroup(self, groupinfo, groupName, alias):
+      pass
+
+    def genEnum(self, enuminfo, name, alias):
+      pass
+
+      #
+    # Command generation
+    def genCmd(self, cmdinfo, name, alias):
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        #
+        decls = self.makeStub(cmdinfo.elem)
+        self.featurePointerInitializersInstance.append(decls[0])
+        self.featurePointerInitializersDevice.append(decls[1])
+        self.featurePointers.append(decls[2])
+
+    #
+    # makeStub - return static declaration for function pointer and initialization of function pointer
+    # as a two-element list of strings.
+    # cmd - Element containing a <command> tag
+    def makeStub(self, cmd):
+        """Generate a stub function pointer <command> Element"""
+        proto = cmd.find('proto')
+        params = cmd.findall('param')
+        name = cmd.find('name')
+
+        # Begin accumulating prototype and typedef strings
+        pfnDecl = 'static '
+        pfnDecl += noneStr(proto.text)
+
+        # Find the name tag and generate the function pointer and function pointer initialization code
+        nameTag = proto.find('name')
+        tail = noneStr(nameTag.tail)
+        returnType = noneStr(proto.find('type').text)
+
+        type = self.makeFunctionPointerType(nameTag.text, tail)
+
+        # For each child element, if it is a <name> wrap in appropriate
+        # declaration. Otherwise append its contents and tail con#tents.
+        stubDecl = ''
+        for elem in proto:
+            text = noneStr(elem.text)
+            tail = noneStr(elem.tail)
+            if (elem.tag == 'name'):
+                name = self.makeProtoName(text, tail)
+                stubDecl += name
+            else:
+                stubDecl += text + tail
+
+        pfnName = self.makeFunctionPointerName(nameTag.text, noneStr(tail));
+        pfnDecl += type + ' ' + pfnName + ';'
+
+        # Now generate the stub function
+        pfnDecl += '\n'
+
+        # Now add the parameter declaration list, which is identical
+        # for prototypes and typedefs. Concatenate all the text from
+        # a <param> node without the tags. No tree walking required
+        # since all tags are ignored.
+        n = len(params)
+        paramdecl = '(\n'
+
+        pfnCall = '\n{\n    ' + ('return ', '')[returnType == 'void'] + pfnName + '(\n'
+        # Indented parameters
+        if n > 0:
+            indentCallParam = '(\n'
+            indentdecl = '(\n'
+            for i in range(0,n):
+                callParam = ''
+
+                paramdecl += self.makeCParamDecl(params[i], self.genOpts.alignFuncParam)
+                pfnCall += self.makeCCallParam(params[i], self.genOpts.alignFuncParam)
+                if (i < n - 1):
+                    paramdecl += ',\n'
+                    pfnCall += ',\n'
+                else:
+                    paramdecl += ')'
+                    pfnCall += '\n    );\n'
+                indentdecl += paramdecl
+                indentCallParam += pfnCall
+        else:
+            indentdecl = '(void);'
+
+        pfnCall += '}\n'
+
+        featureInstance = '    '  + pfnName + ' = ('+type+')vkGetInstanceProcAddr(instance, "' + name + '");'
+        featureDevice = '    '  + pfnName + ' = ('+type+')vkGetDeviceProcAddr(device, "' + name + '");'
+        return [featureInstance, featureDevice , pfnDecl  + stubDecl + paramdecl + pfnCall]
+
+    # Return function pointer type for given function
+    def makeFunctionPointerType(self, name, tail):
+       return 'PFN_' + name + tail
+
+    # Return name of static variable which stores the function pointer for the given function
+    def makeFunctionPointerName(self, name, tail):
+       return 'pfn_' + name + tail
+
+    #
+    # makeCParamDecl - return a string which is an indented, formatted
+    # declaration for a <param> or <member> block (e.g. function parameter
+    # or structure/union member).
+    # param - Element (<param> or <member>) to format
+    # aligncol - if non-zero, attempt to align the nested <name> element
+    #   at this column
+    def makeCCallParam(self, param, aligncol):
+        return '        ' + param.find('name').text
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/findBalance.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/findBalance.py
new file mode 100755
index 0000000..0673851
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/findBalance.py
@@ -0,0 +1,162 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# fixupRef.py - replace old // refBegin .. // refEnd syntax with new
+# open block syntax
+#
+# Usage: fixupRef.py [-outdir path] [-overwrite] files
+
+from reflib import *
+import argparse, copy, io, os, pdb, re, string, sys
+
+def prefix(depth):
+    return '  ' * depth
+
+openPat   = re.compile('^\[open,(?P<attribs>refpage=.*)\]')
+ifdefPat = re.compile('^if(n|)def::(?P<condition>.*)\[(?P<text>.*)\]')
+endifPat = re.compile('^endif::(?P<condition>.*)\[\]')
+
+# Look for imbalanced block delimiters and conditionals
+#   specFile - filename to examine
+def findBalance(specFile):
+    file = loadFile(specFile)
+    if file == None:
+        return
+
+    # blocks[] is a stack of nesting constructs, each of which is
+    # [ '--', line, None ] for a -- delimiter on line
+    # [ 'ifdef', line, condition] for an ifdef or ifndef on line
+    blocks = []
+
+    line = 1
+
+    for str in file:
+        blockDepth = len(blocks)
+        if blockDepth > 0:
+            thisBlock = blocks[blockDepth-1]
+            blockType = thisBlock[0]
+            blockLine = thisBlock[1]
+            blockCondition = thisBlock[2]
+        else:
+            thisBlock = None
+            blockType = None
+            blockLine = None
+            blockCondition = None
+
+        if str.rstrip() == '--':
+            if (blockDepth > 0 and blockType == '--'):
+                print(prefix(blockDepth - 1) +
+                      'Closing -- block opened @', blockLine,
+                      '-> new block depth =', blockDepth - 1)
+                blocks.pop()
+            else:
+                print(prefix(blockDepth) +
+                      'Opening -- block @', line,
+                      '-> new block depth:', blockDepth + 1)
+                blocks.append([ '--', line, None ])
+            line = line + 1
+            continue
+
+        matches = beginPat.search(str)
+        if matches != None:
+            # print('Matched [open pattern @', line, ':', str.rstrip())
+            line = line + 1
+            continue
+
+        matches = ifdefPat.search(str)
+        if matches != None:
+            condition = matches.group('condition')
+            text = matches.group('text')
+
+            if text != '':
+                print('Matched self-closing if(n)def pattern @', line,
+                      'condition:', condition, 'text:', text)
+            else:
+                print(prefix(blockDepth) +
+                      'Opening if(n)def block @', line,
+                      '-> new block depth =', blockDepth + 1,
+                      'condition:', condition)
+                blocks.append([ 'ifdef', line, condition ])
+
+            line = line + 1
+            continue
+
+        matches = endifPat.search(str)
+        if matches != None:
+            condition = matches.group('condition')
+
+            if (blockDepth > 0):
+                if blockType == 'ifdef':
+                    # Try closing an ifdef/ifndef block
+                    if blockCondition != condition:
+                        print('** WARNING:', specFile,
+                              'endif @', blockLine,
+                              'block depth:', blockDepth,
+                              'condition', condition,
+                              'does not match ifdef/ifndef @',
+                              blockLine, 'condition', blockCondition)
+
+                    print(prefix(blockDepth - 1) +
+                          'Closing endif block @', line,
+                          '-> new block depth =', blockDepth - 1)
+                    blocks.pop()
+                elif blockType == '--':
+                    # An overlap!
+                    print('** ERROR:', specFile, 'endif @', line,
+                          'block depth:', blockDepth,
+                          'overlaps -- block start @', blockLine)
+                else:
+                    # Should never get here
+                    print('** ERROR:', specFile,
+                          'block depth:', blockDepth,
+                          'unknown open block type:', blockType)
+            else:
+                # Unlikely error condition from bad markup
+                print('** ERROR:', specFile,
+                      'block depth:', blockDepth,
+                      'endif @', line, 'with no matching open block')
+
+            line = line + 1
+            continue
+
+        line = line + 1
+
+    blockDepth = len(blocks)
+    if blockDepth > 0:
+        print('** ERROR:', specFile, 'still in open block at EOF:',
+              'block depth =', blockDepth,
+              'block type:', blocks[blockDepth-1][0])
+
+if __name__ == '__main__':
+    global genDict
+    genDict = {}
+
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-diag', action='store', dest='diagFile',
+                        help='Set the diagnostic file')
+    parser.add_argument('-warn', action='store', dest='warnFile',
+                        help='Set the warning file')
+    parser.add_argument('-log', action='store', dest='logFile',
+                        help='Set the log file for both diagnostics and warnings')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to extract ref pages from')
+    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+
+    results = parser.parse_args()
+
+    setLogFile(True,  True, results.logFile)
+    setLogFile(True, False, results.diagFile)
+    setLogFile(False, True, results.warnFile)
+
+    skipped = set()
+    for file in results.files:
+        findBalance(file)
+
+    if len(skipped) > 0:
+        print('Files containing skipped feature blocks:')
+        for file in sorted(skipped):
+            print('\t' + file)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/fixupRef.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/fixupRef.py
new file mode 100755
index 0000000..140fff0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/fixupRef.py
@@ -0,0 +1,202 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# fixupRef.py - replace old // refBegin .. // refEnd syntax with new
+# open block syntax
+#
+# Usage: fixupRef.py [-outdir path] [-overwrite] files
+
+from reflib import *
+from vkapi import *
+import argparse, copy, io, os, pdb, re, string, sys
+
+# Return 'None' for None, the string otherwise
+def noneStr(str):
+    if str == None:
+        return '(None)'
+    else:
+        return str
+
+# Escape single quotes in a string for asciidoc
+def escapeQuote(str):
+    return str.replace("'", "\'")
+
+# Start a refpage open block
+def openBlock(pi, fp):
+    if pi.refs != '':
+        print("[open,refpage='" + pi.name +
+              "',desc='" + pi.desc +
+              "',type='" + pi.type +
+              "',xrefs='" + pi.refs + "']",
+              file=fp)
+    else:
+        print("[open,refpage='" + pi.name +
+              "',desc='" + pi.desc +
+              "',type='" + pi.type + "']",
+              file=fp)
+    print('--', file=fp)
+
+# End a refpage open block
+def closeBlock(pi, fp):
+    print('--', file=fp)
+    # Just for finding block ends while debugging
+    # print("// end [open,refpage='" + pi.name + "']", file=fp)
+
+# Replace old // refBegin .. // refEnd references in an asciidoc
+# file with open blocks, per # ??? .
+#   specFile - filename to extract from
+#   outDir - output directory to write updated file to, if not overwritten
+#   overwrite - True if the file should be overwritten in place
+#   skipped - set of filenames containing commands which were not
+#       rewritten with open blocks (e.g. enums). Updated in place.
+def replaceRef(specFile, outDir, overwrite = False, skipped = set()):
+    file = loadFile(specFile)
+    if file == None:
+        return
+
+    # Save the path to this file for later use in rewriting relative includes
+    specDir = os.path.dirname(os.path.abspath(specFile))
+
+    pageMap = findRefs(file)
+    logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
+
+    sys.stderr.flush()
+
+    # Fix up references in pageMap
+    fixupRefs(pageMap, specFile, file)
+
+    # Map the page info dictionary into a dictionary of actions
+    # keyed by line number they are performed on/after:
+    #   'action' : 'begin' or 'end'. What to do on a refBegin or refEnd line
+    #   'replace': True if this line needs to be replaced
+    #   'name'   : Name of the ref page being defined
+    #   'desc'   : One-line description of the ref page being defined
+    #   'type'   : Type of the ref page being defined, 'structs', 'protos', etc.
+    #   'refs'   : Space-separated string of cross-referenced pages
+
+    actions = { }
+
+    for name in pageMap.keys():
+        pi = pageMap[name]
+
+        # Cleanup parameters for output
+        pi.name = noneStr(pi.name)
+        pi.desc = escapeQuote(noneStr(pi.desc))
+
+        if pi.extractPage:
+            if (file[pi.begin][0:11] == '// refBegin'):
+                # Replace line
+                actions[pi.begin] = {
+                    'action'   : 'begin',
+                    'replace'  : True,
+                    'pageinfo' : pi
+                }
+            else:
+                # Insert line
+                actions[pi.begin] = {
+                    'action'   : 'begin',
+                    'replace'  : False,
+                    'pageinfo' : pi
+                }
+
+            if (file[pi.end][0:9] == '// refEnd'):
+                # Replace line
+                actions[pi.end] = {
+                    'action'   : 'end',
+                    'replace'  : True,
+                    'pageinfo' : pi
+                }
+            else:
+                # Insert line
+                actions[pi.end] = {
+                    'action'   : 'end',
+                    'replace'  : False,
+                    'pageinfo' : pi
+                }
+        else:
+            logWarn('Skipping replacement for', pi.name, 'at', specFile,
+                    'line', pi.begin)
+            print('Skipping replacement for', pi.name, 'at', specFile,
+                  'line', pi.begin)
+            printPageInfo(pi, file)
+            skipped.add(specFile)
+
+    if overwrite:
+        pageName = specFile
+    else:
+        pageName = outDir + '/' + os.path.basename(specFile)
+
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    line = 0
+    for text in file:
+        if line in actions.keys():
+            action = actions[line]['action']
+            replace = actions[line]['replace']
+            pi = actions[line]['pageinfo']
+
+            logDiag('ACTION:', action, 'REPLACE:', replace, 'at line', line)
+            logDiag('PageInfo of action:')
+            printPageInfo(pi, file)
+
+            if action == 'begin':
+                openBlock(pi, fp)
+                if not replace:
+                    print(text, file=fp, end='')
+            elif action == 'end':
+                if not replace:
+                    print(text, file=fp, end='')
+                closeBlock(pi, fp)
+            else:
+                print('ERROR: unrecognized action:', action, 'in',
+                      specFile, 'at line', line)
+                print(text, file=fp, end='')
+        else:
+            print(text, file=fp, end='')
+        line = line + 1
+
+    fp.close()
+
+    #for line in sorted(actions.keys()):
+    #    action = actions[line]
+    #    print('action at line', line, '\t',
+    #          action[0], action[1], action[2])
+
+if __name__ == '__main__':
+    global genDict
+    genDict = {}
+
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-diag', action='store', dest='diagFile',
+                        help='Set the diagnostic file')
+    parser.add_argument('-warn', action='store', dest='warnFile',
+                        help='Set the warning file')
+    parser.add_argument('-log', action='store', dest='logFile',
+                        help='Set the log file for both diagnostics and warnings')
+    parser.add_argument('-outdir', action='store', dest='outDir',
+                        default='out',
+                        help='Set the base directory in which pages are generated')
+    parser.add_argument('-overwrite', action='store_true',
+                        help='Overwrite input filenames instead of writing different output filenames')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to extract ref pages from')
+    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+
+    results = parser.parse_args()
+
+    setLogFile(True,  True, results.logFile)
+    setLogFile(True, False, results.diagFile)
+    setLogFile(False, True, results.warnFile)
+
+    skipped = set()
+    for file in results.files:
+        replaceRef(file, results.outDir, results.overwrite, skipped)
+
+    if len(skipped) > 0:
+        print('Files containing skipped feature blocks:')
+        for file in sorted(skipped):
+            print('\t' + file)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/insertTags.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/insertTags.py
new file mode 100755
index 0000000..62bf7db
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/insertTags.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# insertTags.py - insert // refBegin and // refEnd tags in Vulkan
+# spec source files.
+#
+# Usage: insertTags.py output-dir files
+
+# Short descriptions of ref pages, if not found
+from refDesc import *
+
+# Utility functions
+from reflib import *
+import copy, os, pdb, re, string, sys
+
+# Insert informative tags in a spec asciidoc source file
+#   specFile - filename to add tags to
+#   baseDir - output directory to generate page in
+def insertTags(specFile, baseDir):
+    file = loadFile(specFile)
+    if (file == None):
+        return
+    pageMap = findRefs(file)
+    logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
+
+    # Fix up references in pageMap
+    fixupRefs(pageMap, specFile, file)
+
+    # Proceed backwards through the file, inserting
+    # // refBegin name desc
+    # lines where they are meaningful
+
+    logDiag('Table of pages found:')
+    logDiag('---------------------')
+    for name in pageMap.keys():
+        printPageInfo(pageMap[name], file)
+
+    line = len(file) - 1
+    while (line >= 0):
+        # If this is a valid begin line without a description, and a
+        # description exists in refDesc, add it.
+        for name in pageMap.keys():
+            pi = pageMap[name]
+            if (pi.begin == line):
+                if (not name in refDesc.keys()):
+                    if (pi.desc != None):
+                        logDiag('Description already exists, but no refDesc found for', name, 'at', specFile + ':' + str(line))
+                    else:
+                        if (pi.embed):
+                            logDiag('No refDesc found (this is OK) for embedded', name, 'at', specFile + ':' + str(line))
+                        else:
+                            logWarn('No refDesc found for', name, 'at', specFile + ':' + str(line))
+                    continue
+
+                # New or replacement refBegin line, with short description
+                newLine = '// refBegin ' + name + ' - ' + refDesc[name] + '\n'
+
+                if (pi.desc == None):
+                    logDiag('Adding description for', name, 'at', specFile + ':' + str(line))
+
+                    # If there is already a refBegin on this line, replace it.
+                    # Otherwise, insert one.
+                    if (file[line].find('// refBegin') == 0):
+                        logDiag('Replacing existing refBegin without description for', name, 'at', specFile + ':' + str(line))
+                        file[line] = newLine
+                    else:
+                        logDiag('Inserting new refBegin at', specFile + ':' + str(line))
+                        # Add a blank line after the comment if it is new
+                        file.insert(line, newLine)
+                        file.insert(line, '\n')
+                else:
+                    if (pi.desc[-1] == '.'):
+                        pi.desc = pi.desc[0:-1]
+                    if (pi.desc == refDesc[name]):
+                        logDiag('Not replacing description for', name, 'at', specFile + ':' + str(line), '- MATCHES existing one')
+                    else:
+                        logWarn('Replacing existing refBegin WITH description for', name, 'at', specFile + ':' + str(line))
+                        file[line] = newLine
+                        # logWarn('\t  refDesc: ', refDesc[name])
+                        # logWarn('\tfile desc: ', pi.desc)
+
+        line = line - 1
+
+    pageName = baseDir + '/' + os.path.basename(specFile)
+    logDiag('Creating output file', pageName)
+    fp = open(pageName, 'w', encoding='utf-8')
+    fp.writelines(file)
+    fp.close()
+
+
+if __name__ == '__main__':
+    logDiag('In main!')
+
+    baseDir = 'man'
+    follow = False
+    if (len(sys.argv) > 2):
+        baseDir = sys.argv[1]
+        for file in sys.argv[2:]:
+            insertTags(file, baseDir)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/realign.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/realign.py
new file mode 100755
index 0000000..1736898
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/realign.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python3
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Usage: realign [infile] > outfile
+# Used to realign XML tags in the Vulkan registry after it is operated on by
+# some other filter, since whitespace inside a tag is not part of the
+# internal representation.
+
+import copy, sys, string, re
+
+def realignXML(fp):
+    patterns = [
+        [ r'(^ *\<type .*)(category=[\'"]bitmask[\'"].*)', 58 ],
+        [ r'(^ *\<enum [bv].*)(name=.*)',     28 ],
+        [ r'(^ *\<enum [bv].*)(comment=.*)',  85 ]
+    ]
+
+    # Assemble compiled expressions to match and alignment columns
+    numpat = len(patterns)
+    regexp = [ re.compile(patterns[i][0]) for i in range(0,numpat)]
+    column = [ patterns[i][1] for i in range(0,numpat)]
+
+    lines = fp.readlines()
+    for line in lines:
+        emitted = False
+        for i in range(0,len(patterns)):
+            match = regexp[i].match(line)
+            if (match):
+                if (not emitted):
+                    #print('# While processing line: ' + line, end='')
+                    emitted = True
+                #print('# matched expression: ' + patterns[i][0])
+                #print('# clause 1 = ' + match.group(1))
+                #print('# clause 2 = ' + match.group(2))
+                line = match.group(1).ljust(column[i]) + match.group(2)
+        if (emitted):
+            print(line)
+        else:
+            print(line, end='')
+
+if __name__ == '__main__':
+    if (len(sys.argv) > 1):
+        realignXML(open(sys.argv[1], 'r', encoding='utf-8'))
+    else:
+        realignXML(sys.stdin)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/Retired/refDesc.py b/codegen/vulkan/vulkan-docs-next/scripts/Retired/refDesc.py
new file mode 100644
index 0000000..9f7bb37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/Retired/refDesc.py
@@ -0,0 +1,356 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+refDesc = {}
+
+# These are extracted from the original handwritten ref pages
+# This is a one-time measure to inject // refBegin markup into the spec.
+
+refDesc['vkAcquireNextImageKHR'] = 'Retrieve the index of the next available presentable image'
+refDesc['vkAllocateCommandBuffers'] = 'Allocate command buffers from an existing command pool'
+refDesc['vkAllocateDescriptorSets'] = 'Allocate one or more descriptor sets'
+refDesc['vkAllocateMemory'] = 'Allocate GPU memory'
+refDesc['VkAllocationCallbacks'] = 'Structure containing callback function pointers for memory allocation'
+refDesc['vkBeginCommandBuffer'] = 'Start recording a command buffer'
+refDesc['vkBindBufferMemory'] = 'Bind device memory to a buffer object'
+refDesc['vkBindImageMemory'] = 'Bind device memory to an image object'
+refDesc['VkBufferCreateFlags'] = 'Buffer object creation flags'
+refDesc['VkBufferCreateInfo'] = 'Structure specifying the parameters of a newly created buffer object'
+refDesc['VkBufferMemoryBarrier'] = 'Structure specifying the parameters of a buffer memory barrier'
+refDesc['VkBufferUsageFlags'] = 'Buffer object usage flags'
+refDesc['vkCmdBeginQuery'] = 'Begin a query'
+refDesc['vkCmdBeginRenderPass'] = 'Begin a new render pass'
+refDesc['vkCmdBindDescriptorSets'] = 'Binds descriptor sets to a command buffer'
+refDesc['vkCmdBindIndexBuffer'] = 'Bind an index buffer to a command buffer'
+refDesc['vkCmdBindPipeline'] = 'Bind a pipeline object to a command buffer'
+refDesc['vkCmdBindVertexBuffers'] = 'Bind vertex buffers to a command buffer'
+refDesc['vkCmdBlitImage'] = 'Copy regions of an image, potentially performing format conversion,'
+refDesc['vkCmdClearAttachments'] = 'Clear regions within currently bound framebuffer attachments'
+refDesc['vkCmdClearColorImage'] = 'Clear regions of a color image'
+refDesc['vkCmdClearDepthStencilImage'] = 'Fill regions of a combined depth-stencil image'
+refDesc['vkCmdCopyBufferToImage'] = 'Copy data from a buffer into an image'
+refDesc['vkCmdCopyBuffer'] = 'Copy data between buffer regions'
+refDesc['vkCmdCopyImageToBuffer'] = 'Copy image data into a buffer'
+refDesc['vkCmdCopyImage'] = 'Copy data between images'
+refDesc['vkCmdCopyQueryPoolResults'] = 'Copy the results of queries in a query pool to a buffer object'
+refDesc['vkCmdDispatchIndirect'] = 'Dispatch compute work items using indirect parameters'
+refDesc['vkCmdDispatch'] = 'Dispatch compute work items'
+refDesc['vkCmdDrawIndexedIndirect'] = 'Perform an indexed indirect draw'
+refDesc['vkCmdDrawIndexed'] = 'Issue an indexed draw into a command buffer'
+refDesc['vkCmdDrawIndirect'] = 'Issue an indirect draw into a command buffer'
+refDesc['vkCmdDraw'] = 'Draw primitives'
+refDesc['vkCmdEndQuery'] = 'Ends a query'
+refDesc['vkCmdEndRenderPass'] = 'End the current render pass'
+refDesc['vkCmdExecuteCommands'] = 'Execute a secondary command buffer from a primary command buffer'
+refDesc['vkCmdFillBuffer'] = 'Fill a region of a buffer with a fixed value'
+refDesc['vkCmdNextSubpass'] = 'Transition to the next subpass of a render pass'
+refDesc['vkCmdPipelineBarrier'] = 'Insert a set of execution and memory barriers'
+refDesc['vkCmdPushConstants'] = 'Update the values of push constants'
+refDesc['vkCmdResetEvent'] = 'Reset an event object to non-signaled state'
+refDesc['vkCmdResetQueryPool'] = 'Reset queries in a query pool'
+refDesc['vkCmdResolveImage'] = 'Resolve regions of an image'
+refDesc['vkCmdSetBlendConstants'] = 'Set the values of blend constants'
+refDesc['vkCmdSetDepthBias'] = 'Set the depth bias dynamic state'
+refDesc['vkCmdSetDepthBounds'] = 'Set the depth bounds test values for a command buffer'
+refDesc['vkCmdSetEvent'] = 'Set an event object to signaled state'
+refDesc['vkCmdSetLineWidth'] = 'Set the dynamic line width state'
+refDesc['vkCmdSetScissor'] = 'Set the dynamic scissor rectangles on a command buffer'
+refDesc['vkCmdSetStencilCompareMask'] = 'Set the stencil compare mask dynamic state'
+refDesc['vkCmdSetStencilReference'] = 'Set the stencil reference dynamic state'
+refDesc['vkCmdSetStencilWriteMask'] = 'Set the stencil write mask dynamic state'
+refDesc['vkCmdSetViewport'] = 'Set the viewport on a command buffer'
+refDesc['vkCmdUpdateBuffer'] = 'Update a buffer\'s contents from host memory'
+refDesc['vkCmdWaitEvents'] = 'Wait for one or more events and insert a set of memory'
+refDesc['vkCmdWriteTimestamp'] = 'Write a device timestamp into a query object'
+refDesc['VkCommandBufferAllocateInfo'] = 'Structure specifying the allocation parameters for command buffer object'
+refDesc['vkCreateAndroidSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for an Android native window'
+refDesc['vkCreateBuffer'] = 'Create a new buffer object'
+refDesc['vkCreateBufferView'] = 'Create a new buffer view object'
+refDesc['vkCreateCommandPool'] = 'Create a new command pool object'
+refDesc['vkCreateComputePipelines'] = 'Creates a new compute pipeline object'
+refDesc['vkCreateDescriptorPool'] = 'Creates a descriptor pool object'
+refDesc['vkCreateDescriptorSetLayout'] = 'Create a new descriptor set layout'
+refDesc['vkCreateDevice'] = 'Create a new device instance'
+refDesc['vkCreateDisplayModeKHR'] = 'Create a display mode'
+refDesc['vkCreateDisplayPlaneSurfaceKHR'] = 'Create a slink:VkSurfaceKHR structure representing a display plane and mode'
+refDesc['vkCreateEvent'] = 'Create a new event object'
+refDesc['vkCreateFence'] = 'Create a new fence object'
+refDesc['vkCreateFramebuffer'] = 'Create a new framebuffer object'
+refDesc['vkCreateGraphicsPipelines'] = 'Create graphics pipelines'
+refDesc['vkCreateImage'] = 'Create a new image object'
+refDesc['vkCreateImageView'] = 'Create an image view from an existing image'
+refDesc['vkCreateInstance'] = 'Create a new Vulkan instance'
+refDesc['vkCreateMirSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a Mir window'
+refDesc['vkCreatePipelineCache'] = 'Creates a new pipeline cache'
+refDesc['vkCreatePipelineLayout'] = 'Creates a new pipeline layout object'
+refDesc['vkCreateQueryPool'] = 'Create a new query pool object'
+refDesc['vkCreateRenderPass'] = 'Create a new render pass object'
+refDesc['vkCreateSampler'] = 'Create a new sampler object'
+refDesc['vkCreateSemaphore'] = 'Create a new queue semaphore object'
+refDesc['vkCreateShaderModule'] = 'Creates a new shader module object'
+refDesc['vkCreateSharedSwapchainsKHR'] = 'Create multiple swapchains that share presentable images'
+refDesc['vkCreateSwapchainKHR'] = 'Create a swapchain'
+refDesc['vkCreateWaylandSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a Wayland window'
+refDesc['vkCreateXcbSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for a X11 window, using the XCB client-side library'
+refDesc['vkCreateXlibSurfaceKHR'] = 'Create a slink:VkSurfaceKHR object for an X11 window, using the Xlib client-side library'
+refDesc['VkDescriptorSetAllocateInfo'] = 'Structure specifying the allocation parameters for descriptor sets'
+refDesc['VkDescriptorType'] = 'Specifies the type of a descriptor in a descriptor set'
+refDesc['vkDestroyBuffer'] = 'Destroy a buffer object'
+refDesc['vkDestroyBufferView'] = 'Destroy a buffer view object'
+refDesc['vkDestroyCommandPool'] = 'Destroy a command pool object'
+refDesc['vkDestroyDescriptorPool'] = 'Destroy a descriptor pool object'
+refDesc['vkDestroyDescriptorSetLayout'] = 'Destroy a descriptor set layout object'
+refDesc['vkDestroyDevice'] = 'Destroy a logical device'
+refDesc['vkDestroyEvent'] = 'Destroy an event object'
+refDesc['vkDestroyFence'] = 'Destroy a fence object'
+refDesc['vkDestroyFramebuffer'] = 'Destroy a framebuffer object'
+refDesc['vkDestroyImage'] = 'Destroy an image object'
+refDesc['vkDestroyImageView'] = 'Destroy an image view object'
+refDesc['vkDestroyInstance'] = 'Destroy an instance of Vulkan'
+refDesc['vkDestroyPipelineCache'] = 'Destroy a pipeline cache object'
+refDesc['vkDestroyPipelineLayout'] = 'Destroy a pipeline layout object'
+refDesc['vkDestroyPipeline'] = 'Destroy a pipeline object'
+refDesc['vkDestroyQueryPool'] = 'Destroy a query pool object'
+refDesc['vkDestroyRenderPass'] = 'Destroy a render pass object'
+refDesc['vkDestroySampler'] = 'Destroy a sampler object'
+refDesc['vkDestroySemaphore'] = 'Destroy a semaphore object'
+refDesc['vkDestroyShaderModule'] = 'Destroy a shader module'
+refDesc['vkDestroySurfaceKHR'] = 'Destroy a VkSurfaceKHR object'
+refDesc['vkDestroySwapchainKHR'] = 'Destroy a swapchain object'
+refDesc['vkDeviceWaitIdle'] = 'Wait for a device to become idle'
+refDesc['vkEndCommandBuffer'] = 'Finish recording a command buffer'
+refDesc['vkEnumerateDeviceExtensionProperties'] = 'Returns properties of available physical device extensions'
+refDesc['vkEnumerateDeviceLayerProperties'] = 'Returns properties of available physical device layers'
+refDesc['vkEnumerateInstanceExtensionProperties'] = 'Returns up to requested number of global extension properties'
+refDesc['vkEnumerateInstanceLayerProperties'] = 'Returns up to requested number of global layer properties'
+refDesc['vkEnumeratePhysicalDevices'] = 'Enumerates the physical devices accessible to a Vulkan instance'
+refDesc['vkFlushMappedMemoryRanges'] = 'Flush mapped memory ranges'
+refDesc['VkFormatFeatureFlags'] = 'Capability flags of a particular format'
+refDesc['vkFreeCommandBuffers'] = 'Free command buffers'
+refDesc['vkFreeDescriptorSets'] = 'Free one or more descriptor sets'
+refDesc['vkFreeMemory'] = 'Free GPU memory'
+refDesc['vkGetBufferMemoryRequirements'] = 'Returns the memory requirements for specified Vulkan object'
+refDesc['vkGetDeviceMemoryCommitment'] = 'Query the current commitment for a VkDeviceMemory'
+refDesc['vkGetDeviceProcAddr'] = 'Return a function pointer for a command'
+refDesc['vkGetDeviceQueue'] = 'Get a queue handle from a device'
+refDesc['vkGetDisplayModePropertiesKHR'] = 'Query the set of mode properties supported by the display'
+refDesc['vkGetDisplayPlaneCapabilitiesKHR'] = 'Query capabilities of a mode and plane combination'
+refDesc['vkGetDisplayPlaneSupportedDisplaysKHR'] = 'Query the list of displays a plane supports'
+refDesc['vkGetEventStatus'] = 'Retrieve the status of an event object'
+refDesc['vkGetFenceStatus'] = 'Return the status of a fence'
+refDesc['vkGetImageMemoryRequirements'] = 'Returns the memory requirements for specified Vulkan object'
+refDesc['vkGetImageSparseMemoryRequirements'] = 'Query the memory requirements for a sparse image'
+refDesc['vkGetImageSubresourceLayout'] = 'Retrieve information about an image subresource'
+refDesc['vkGetInstanceProcAddr'] = 'Return a function pointer for a command'
+refDesc['vkGetPhysicalDeviceDisplayPlanePropertiesKHR'] = 'Query the plane properties'
+refDesc['vkGetPhysicalDeviceDisplayPropertiesKHR'] = 'Query information about the available displays'
+refDesc['vkGetPhysicalDeviceFeatures'] = 'Reports capabilities of a physical device'
+refDesc['vkGetPhysicalDeviceFormatProperties'] = 'Lists physical device\'s format capabilities'
+refDesc['vkGetPhysicalDeviceImageFormatProperties'] = 'Lists physical device\'s image format capabilities'
+refDesc['vkGetPhysicalDeviceMemoryProperties'] = 'Reports memory information for the specified physical device'
+refDesc['vkGetPhysicalDeviceMirPresentationSupportKHR'] = 'Query physical device for presentation to Mir'
+refDesc['vkGetPhysicalDeviceProperties'] = 'Returns properties of a physical device'
+refDesc['vkGetPhysicalDeviceQueueFamilyProperties'] = 'Reports properties of the queues of the specified physical device'
+refDesc['vkGetPhysicalDeviceSparseImageFormatProperties'] = 'Retrieve properties of an image format applied to sparse images'
+refDesc['vkGetPhysicalDeviceSurfaceCapabilitiesKHR'] = 'Query surface capabilities'
+refDesc['vkGetPhysicalDeviceSurfaceFormatsKHR'] = 'Query color formats supported by surface'
+refDesc['vkGetPhysicalDeviceSurfacePresentModesKHR'] = 'Query supported presentation modes'
+refDesc['vkGetPhysicalDeviceSurfaceSupportKHR'] = 'Query if presentation is supported'
+refDesc['vkGetPhysicalDeviceWaylandPresentationSupportKHR'] = 'Query physical device for presentation to Wayland'
+refDesc['vkGetPhysicalDeviceXcbPresentationSupportKHR'] = 'Query physical device for presentation to X11 server using XCB'
+refDesc['vkGetPhysicalDeviceXlibPresentationSupportKHR'] = 'Query physical device for presentation to X11 server using Xlib'
+refDesc['vkGetPipelineCacheData'] = 'Get the data store from a pipeline cache'
+refDesc['vkGetQueryPoolResults'] = 'Copy results of queries in a query pool to a host memory region'
+refDesc['vkGetRenderAreaGranularity'] = 'Returns the granularity for optimal render area'
+refDesc['vkGetSwapchainImagesKHR'] = 'Obtain the array of presentable images associated with a swapchain'
+refDesc['VkImageCreateFlags'] = 'Image object creation flags'
+refDesc['VkImageCreateInfo'] = 'Structure specifying the parameters of a newly created image object'
+refDesc['VkImageLayout'] = 'Layout of image and image subresources'
+refDesc['VkImageMemoryBarrier'] = 'Structure specifying the parameters of an image memory barrier'
+refDesc['VkImageType'] = 'Specifies the type of an image object'
+refDesc['VkImageUsageFlags'] = 'Image object usage flags'
+refDesc['VkImageViewType'] = 'Image view types'
+refDesc['vkInvalidateMappedMemoryRanges'] = 'Invalidate ranges of mapped memory objects'
+refDesc['vkMapMemory'] = 'Map a memory object into application address space'
+refDesc['VkMemoryAllocateInfo'] = 'Structure containing parameters of a memory allocation'
+refDesc['VkMemoryPropertyFlags'] = 'Memory pool properties'
+refDesc['vkMergePipelineCaches'] = 'Combine the data stores of pipeline caches'
+refDesc['VkPhysicalDeviceFeatures'] = 'Structure describing the fine-grained features that can be supported by an implementation'
+refDesc['VkPhysicalDeviceLimits'] = 'Structure'
+refDesc['VkPipelineLayoutCreateInfo'] = 'Structure specifying the parameters of a newly created pipeline layout object'
+refDesc['VkPipelineStageFlags'] = 'Pipeline stage identifiers'
+refDesc['VkQueryControlFlags'] = 'Query control flags'
+refDesc['VkQueryResultFlags'] = 'Query result flags'
+refDesc['vkQueueBindSparse'] = 'Bind device memory to a sparse resource object'
+refDesc['VkQueueFamilyProperties'] = 'Structure providing information about a queue family'
+refDesc['VkQueueFlags'] = 'Queue capability flags'
+refDesc['vkQueuePresentKHR'] = 'Queue an image for presentation'
+refDesc['vkQueueSubmit'] = 'Submits a sequence of semaphores or command buffers to a queue'
+refDesc['vkQueueWaitIdle'] = 'Wait for a queue to become idle'
+refDesc['vkResetCommandBuffer'] = 'Reset a command buffer'
+refDesc['vkResetCommandPool'] = 'Reset a command pool'
+refDesc['vkResetDescriptorPool'] = 'Resets a descriptor pool object'
+refDesc['vkResetEvent'] = 'Reset an event to non-signaled state'
+refDesc['vkResetFences'] = 'Resets one or more fence objects'
+refDesc['vkSetEvent'] = 'Set an event to signaled state'
+refDesc['VkSharingMode'] = 'Buffer and image sharing modes'
+refDesc['vkUnmapMemory'] = 'Unmap a previously mapped memory object'
+refDesc['vkUpdateDescriptorSets'] = 'Update the contents of a descriptor set object'
+refDesc['vkWaitForFences'] = 'Wait for one or more fences to become signaled'
+refDesc['VkWriteDescriptorSet'] = 'Structure specifying the parameters of a descriptor set write operation'
+refDesc['VkAndroidSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Android surface object'
+refDesc['VkDebugReportCallbackCreateInfoEXT'] = 'Structure specifying parameters of a newly created debug report object'
+refDesc['VkDisplayModeCreateInfoKHR'] = 'Structure specifying parameters of a newly created display mode object'
+refDesc['VkDisplayModeParametersKHR'] = 'Structure describing display parameters associated with a display mode'
+refDesc['VkDisplayModePropertiesKHR'] = 'Structure describing display mode properties'
+refDesc['VkDisplayPlaneCapabilitiesKHR'] = 'Structure describing capabilities of a mode and plane combination'
+refDesc['VkDisplayPlanePropertiesKHR'] = 'Structure describing display plane properties'
+refDesc['VkDisplayPresentInfoKHR'] = 'Structure describing parameters of a queue presentation to a swapchain'
+refDesc['VkDisplayPropertiesKHR'] = 'Structure describing an available display device'
+refDesc['VkDisplaySurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created display plane surface object'
+refDesc['VkMirSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Mir surface object'
+refDesc['VkPresentInfoKHR'] = 'Structure describing parameters of a queue presentation'
+refDesc['VkSurfaceCapabilitiesKHR'] = 'Structure describing capabilities of a surface'
+refDesc['VkSurfaceFormatKHR'] = 'Structure describing a supported swapchain format-colorspace pair'
+refDesc['VkSwapchainCreateInfoKHR'] = 'Structure specifying parameters of a newly created swapchain object'
+refDesc['VkWaylandSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Wayland surface object'
+refDesc['VkWin32SurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Win32 surface object'
+refDesc['VkXcbSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Xcb surface object'
+refDesc['VkXlibSurfaceCreateInfoKHR'] = 'Structure specifying parameters of a newly created Xlib surface object'
+
+# These are generated based on the structure name
+
+refDesc['VkBufferViewCreateInfo'] =                 'Structure specifying parameters of a newly created buffer view'
+refDesc['VkCommandPoolCreateInfo'] =                'Structure specifying parameters of a newly created command pool'
+refDesc['VkComputePipelineCreateInfo'] =            'Structure specifying parameters of a newly created compute pipeline'
+refDesc['VkDescriptorPoolCreateInfo'] =             'Structure specifying parameters of a newly created descriptor pool'
+refDesc['VkDescriptorSetLayoutCreateInfo'] =        'Structure specifying parameters of a newly created descriptor set layout'
+refDesc['VkDeviceCreateInfo'] =                     'Structure specifying parameters of a newly created device'
+refDesc['VkDeviceQueueCreateInfo'] =                'Structure specifying parameters of a newly created device queue'
+refDesc['VkEventCreateInfo'] =                      'Structure specifying parameters of a newly created event'
+refDesc['VkExtent2D'] =                             'Structure specifying a two-dimensional extent'
+refDesc['VkExtent3D'] =                             'Structure specifying a three-dimensional extent'
+refDesc['VkFenceCreateInfo'] =                      'Structure specifying parameters of a newly created fence'
+refDesc['VkFramebufferCreateInfo'] =                'Structure specifying parameters of a newly created framebuffer'
+refDesc['VkGraphicsPipelineCreateInfo'] =           'Structure specifying parameters of a newly created graphics pipeline'
+refDesc['VkImageViewCreateInfo'] =                  'Structure specifying parameters of a newly created image view'
+refDesc['VkInstanceCreateInfo'] =                   'Structure specifying parameters of a newly created instance'
+refDesc['VkOffset2D'] =                             'Structure specifying a two-dimensional offset'
+refDesc['VkOffset3D'] =                             'Structure specifying a three-dimensional offset'
+refDesc['VkPipelineCacheCreateInfo'] =              'Structure specifying parameters of a newly created pipeline cache'
+refDesc['VkPipelineColorBlendStateCreateInfo'] =    'Structure specifying parameters of a newly created pipeline color blend state'
+refDesc['VkPipelineDepthStencilStateCreateInfo'] =  'Structure specifying parameters of a newly created pipeline depth stencil state'
+refDesc['VkPipelineDynamicStateCreateInfo'] =       'Structure specifying parameters of a newly created pipeline dynamic state'
+refDesc['VkPipelineInputAssemblyStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline input assembly state'
+refDesc['VkPipelineMultisampleStateCreateInfo'] =   'Structure specifying parameters of a newly created pipeline multisample state'
+refDesc['VkPipelineRasterizationStateCreateInfo'] = 'Structure specifying parameters of a newly created pipeline rasterization state'
+refDesc['VkPipelineShaderStageCreateInfo'] =        'Structure specifying parameters of a newly created pipeline shader stage'
+refDesc['VkPipelineTessellationStateCreateInfo'] =  'Structure specifying parameters of a newly created pipeline tessellation state'
+refDesc['VkPipelineVertexInputStateCreateInfo'] =   'Structure specifying parameters of a newly created pipeline vertex input state'
+refDesc['VkPipelineViewportStateCreateInfo'] =      'Structure specifying parameters of a newly created pipeline viewport state'
+refDesc['VkQueryPoolCreateInfo'] =                  'Structure specifying parameters of a newly created query pool'
+refDesc['VkRect2D'] =                               'Structure specifying a two-dimensional subregion'
+refDesc['VkRenderPassCreateInfo'] =                 'Structure specifying parameters of a newly created render pass'
+refDesc['VkSamplerCreateInfo'] =                    'Structure specifying parameters of a newly created sampler'
+refDesc['VkSemaphoreCreateInfo'] =                  'Structure specifying parameters of a newly created semaphore'
+refDesc['VkShaderModuleCreateInfo'] =               'Structure specifying parameters of a newly created shader module'
+
+# These are TBD
+
+refDesc['VkApplicationInfo'] =                      'Structure specifying application info'
+refDesc['VkAttachmentDescription'] =                'Structure specifying an attachment description'
+refDesc['VkAttachmentReference'] =                  'Structure specifying an attachment reference'
+refDesc['VkBindSparseInfo'] =                       'Structure specifying a sparse binding operation'
+refDesc['VkBufferCopy'] =                           'Structure specifying a buffer copy operation'
+refDesc['VkBufferImageCopy'] =                      'Structure specifying a buffer image copy operation'
+refDesc['VkClearAttachment'] =                      'Structure specifying a clear attachment'
+refDesc['VkClearColorValue'] =                      'Structure specifying a clear color value'
+refDesc['VkClearDepthStencilValue'] =               'Structure specifying a clear depth stencil value'
+refDesc['VkClearRect'] =                            'Structure specifying a clear rectangle'
+refDesc['VkClearValue'] =                           'Structure specifying a clear value'
+refDesc['VkCommandBufferBeginInfo'] =               'Structure specifying a command buffer begin operation'
+refDesc['VkCommandBufferInheritanceInfo'] =         'Structure specifying command buffer inheritance info'
+refDesc['VkCommandBufferLevel'] =                   'Structure specifying a command buffer level'
+refDesc['VkComponentMapping'] =                     'Structure specifying a color component mapping'
+refDesc['VkCopyDescriptorSet'] =                    'Structure specifying a copy descriptor set operation'
+refDesc['VkDescriptorBufferInfo'] =                 'Structure specifying descriptor buffer info'
+refDesc['VkDescriptorImageInfo'] =                  'Structure specifying descriptor image info'
+refDesc['VkDescriptorPoolSize'] =                   'Structure specifying descriptor pool size'
+refDesc['VkDescriptorSetLayoutBinding'] =           'Structure specifying a descriptor set layout binding'
+refDesc['VkDispatchIndirectCommand'] =              'Structure specifying a dispatch indirect command'
+refDesc['VkDrawIndexedIndirectCommand'] =           'Structure specifying a draw indexed indirect command'
+refDesc['VkDrawIndirectCommand'] =                  'Structure specifying a draw indirect command'
+refDesc['VkExtensionProperties'] =                  'Structure specifying a extension properties'
+refDesc['VkFormatProperties'] =                     'Structure specifying image format properties'
+refDesc['VkImageBlit'] =                            'Structure specifying an image blit operation'
+refDesc['VkImageCopy'] =                            'Structure specifying an image copy operation'
+refDesc['VkImageFormatProperties'] =                'Structure specifying a image format properties'
+refDesc['VkImageResolve'] =                         'Structure specifying an image resolve operation'
+refDesc['VkImageSubresource'] =                     'Structure specifying a image subresource'
+refDesc['VkImageSubresourceLayers'] =               'Structure specifying a image subresource layers'
+refDesc['VkImageSubresourceRange'] =                'Structure specifying a image subresource range'
+refDesc['VkLayerProperties'] =                      'Structure specifying layer properties'
+refDesc['VkMappedMemoryRange'] =                    'Structure specifying a mapped memory range'
+refDesc['VkMemoryBarrier'] =                        'Structure specifying a memory barrier'
+refDesc['VkMemoryHeap'] =                           'Structure specifying a memory heap'
+refDesc['VkMemoryRequirements'] =                   'Structure specifying memory requirements'
+refDesc['VkMemoryType'] =                           'Structure specifying memory type'
+refDesc['VkPhysicalDeviceMemoryProperties'] =       'Structure specifying physical device memory properties'
+refDesc['VkPhysicalDeviceProperties'] =             'Structure specifying physical device properties'
+refDesc['VkPhysicalDeviceSparseProperties'] =       'Structure specifying physical device sparse memory properties'
+refDesc['VkPipelineColorBlendAttachmentState'] =    'Structure specifying a pipeline color blend attachment state'
+refDesc['VkPushConstantRange'] =                    'Structure specifying a push constant range'
+refDesc['VkRenderPassBeginInfo'] =                  'Structure specifying render pass begin info'
+refDesc['VkSparseBufferMemoryBindInfo'] =           'Structure specifying a sparse buffer memory bind operation'
+refDesc['VkSparseImageFormatProperties'] =          'Structure specifying sparse image format properties'
+refDesc['VkSparseImageMemoryBind'] =                'Structure specifying sparse image memory bind'
+refDesc['VkSparseImageMemoryBindInfo'] =            'Structure specifying sparse image memory bind info'
+refDesc['VkSparseImageMemoryRequirements'] =        'Structure specifying sparse image memory requirements'
+refDesc['VkSparseImageOpaqueMemoryBindInfo'] =      'Structure specifying sparse image opaque memory bind info'
+refDesc['VkSparseMemoryBind'] =                     'Structure specifying a sparse memory bind operation'
+refDesc['VkSpecializationInfo'] =                   'Structure specifying specialization info'
+refDesc['VkSpecializationMapEntry'] =               'Structure specifying a specialization map entry'
+refDesc['VkStencilOpState'] =                       'Structure specifying stencil operation state'
+refDesc['VkSubmitInfo'] =                           'Structure specifying a queue submit operation'
+refDesc['VkSubpassDependency'] =                    'Structure specifying a subpass dependency'
+refDesc['VkSubpassDescription'] =                   'Structure specifying a subpass description'
+refDesc['VkSubresourceLayout'] =                    'Structure specifying subresource layout'
+refDesc['VkVertexInputAttributeDescription'] =      'Structure specifying vertex input attribute description'
+refDesc['VkVertexInputBindingDescription'] =        'Structure specifying vertex input binding description'
+refDesc['VkViewport'] =                             'Structure specifying a viewport'
+
+# These are constructed from spec text
+
+refDesc['VkAccessFlagBits'] =                  'Bitmask specifying classes of memory access the will participate in a memory barrier dependency'
+refDesc['VkAttachmentDescriptionFlagBits'] =   'Bitmask specifying additional properties of an attachment'
+refDesc['VkBufferCreateFlagBits'] =            'Bitmask specifying additional parameters of a buffer'
+refDesc['VkBufferUsageFlagBits'] =             'Bitmask specifying allowed usage of a buffer'
+refDesc['VkColorComponentFlagBits'] =          'Bitmask controlling which components are written to the framebuffer'
+refDesc['VkCommandBufferResetFlagBits'] =      'Bitmask controlling behavior of a command buffer reset'
+refDesc['VkCommandBufferUsageFlagBits'] =      'Bitmask specifying usage behavior for command buffer'
+refDesc['VkCommandPoolCreateFlagBits'] =       'Bitmask specifying usage behavior for a command pool'
+refDesc['VkCommandPoolResetFlagBits'] =        'Bitmask controlling behavior of a command pool reset'
+refDesc['VkCullModeFlagBits'] =                'Bitmask controlling triangle culling'
+refDesc['VkDependencyFlagBits'] =              'Bitmask specifying dependencies between subpasses'
+refDesc['VkDescriptorPoolCreateFlagBits'] =    'Bitmask specifying certain supported operations on a descriptor pool'
+refDesc['VkFenceCreateFlagBits'] =             'Bitmask specifying initial state and behavior of a fence'
+refDesc['VkFormatFeatureFlagBits'] =           'Bitmask specifying features supported by a buffer'
+refDesc['VkImageAspectFlagBits'] =             'Bitmask specifying which aspects of an image are included in a view'
+refDesc['VkImageCreateFlagBits'] =             'Bitmask specifying additional parameters of an image'
+refDesc['VkImageUsageFlagBits'] =              'Bitmask specifying intended usage of an image'
+refDesc['VkMemoryHeapFlagBits'] =              'Bitmask specifying attribute flags for a heap'
+refDesc['VkMemoryPropertyFlagBits'] =          'Bitmask specifying properties for a memory type'
+refDesc['VkPipelineCreateFlagBits'] =          'Bitmask controlling how a pipeline is generated'
+refDesc['VkPipelineStageFlagBits'] =           'Bitmask specifying pipeline stages'
+refDesc['VkQueryControlFlagBits'] =            'Bitmask specifying constraints on a query'
+refDesc['VkQueryPipelineStatisticFlagBits'] =  'Bitmask specifying queried pipeline statistics'
+refDesc['VkQueryResultFlagBits'] =             'Bitmask specifying how and when query results are returned'
+refDesc['VkQueueFlagBits'] =                   'Bitmask specifying capabilities of queues in a queue family'
+refDesc['VkSampleCountFlagBits'] =             'Bitmask specifying sample counts supported for an image used for storage operations'
+refDesc['VkShaderStageFlagBits'] =             'Bitmask specifying a pipeline stage'
+refDesc['VkSparseImageFormatFlagBits'] =       'Bitmask specifying additional information about a sparse image resource'
+refDesc['VkSparseMemoryBindFlagBits'] =        'Bitmask specifying usage of a sparse memory binding operation'
+refDesc['VkStencilFaceFlagBits'] =             'Bitmask specifying sets of stencil state for which to update the compare mask'
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/__init__.py.docs b/codegen/vulkan/vulkan-docs-next/scripts/__init__.py.docs
new file mode 100644
index 0000000..1058ab0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/__init__.py.docs
@@ -0,0 +1,37 @@
+# Copyright 2019-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+"""Scripts for building the Vulkan specification and artifacts."""
+
+# This is only used during doc builds, hence the weird file extension.
+# It messes up scripts at other times.
+
+# __all__ = [
+#     "cgenerator",
+#     "check_spec_links",
+#     "comment_convert",
+#     "conventions",
+#     "docgenerator",
+#     "extdependency",
+#     "extensionmetadocgenerator",
+#     "generator",
+#     "genRef",
+#     "genspec",
+#     "genvk",
+#     "hostsyncgenerator",
+#     "interfacedocgenerator",
+#     "pygenerator",
+#     "reflib",
+#     "reflow",
+#     "reg",
+#     "spirvcapgenerator",
+#     "test_check_spec_links_api_specific",
+#     "test_check_spec_links",
+#     "test_entity_db",
+#     "validitygenerator",
+#     "vkconventions",
+#     "vuidCounts",
+#     "xml_consistency",
+#     "spec_tools",
+# ]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/antora-prep.py b/codegen/vulkan/vulkan-docs-next/scripts/antora-prep.py
new file mode 100755
index 0000000..f08c821
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/antora-prep.py
@@ -0,0 +1,586 @@
+#!/usr/bin/python3
+#
+# Copyright 2022-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Used to convert files from the asciidoctor spec tree to Antora module
+format. Success is highly dependent on strict adherence to Vulkan spec
+authoring conventions.
+
+Usage: `antora-prep.py [-root path] -component path files`
+
+- `-root` is the root path (repository root, usually) relative to which spec
+  files are processed. Defaults to current directory if not specified.
+- `-component` is the path to the module and component in which converted
+  files are written (e.g. the component directory under which pages/,
+  partials/, images/, etc. are located).
+- `files` are asciidoc source files from the spec to convert.
+
+Image files are linked from the component 'images' directory
+
+Asciidoc markup files (.adoc) are scanned for the first title markup and
+classified as partials or pages depending on whether it is a top-level title
+or not. All .adoc files are rewritten to the component 'partials' directory, to
+allow transclusion of pages to work (otherwise the transclusions would also
+have to be rewritten).
+
+pages then have additional markup injected immediately following the page
+title to set custom attributes needed for the build. pages are then
+symbolically linked from the component 'pages' directory to the actual
+rewritten file in the 'partials' directory to follow Antora conventions.
+"""
+
+# For error and file-loading interfaces only
+import argparse
+import importlib
+import os
+import re
+import sys
+from generator import enquote
+from reflib import loadFile, logDiag, logWarn, logErr, setLogFile, getBranch
+from pathlib import Path
+
+titleAnchorPat = re.compile(r'^\[\[(?P<anchor>[^,]+).*\]\]$')
+titlePat = re.compile(r'^[=#] (?P<title>[A-Z].*)')
+subtitlePat = re.compile(r'^[=#]{2,} (?P<title>[A-Z].*)')
+
+Pages = 'pages'
+Partials = 'partials'
+Images = 'images'
+
+def undefquote(s):
+    """Quote a string for JavaScript, or return the JavaScript undefined
+       value."""
+
+    if s is not None:
+        return enquote(s)
+    else:
+        return 'undefined'
+
+
+def mapAnchor(anchor, title, pageMap, xrefMap, closeAnchor):
+    """Rewrite a <<anchor{, title}>> xref -> xref:pagemap#anchor[{title}]
+        - anchor - anchor name
+        - title - xref description or '' if not specified, in which case the
+          anchor text from the xrefMap is used if available
+        - closeAnchor - True if closing >> is on this line, False otherwise
+        - pageMap, xrefMap - per rewriteXrefs below
+    """
+
+    #@if anchor == 'features-shaderStorageImageReadWithoutFormat':
+    #@    import pdb
+    #@    pdb.set_trace()
+
+    # Determine which page anchor this anchor comes from
+    # If it cannot be determined, use the unmapped anchor
+    #@ Simplify the page anchor if pageName == current page
+    try:
+        if title != '' or not closeAnchor:
+            # Either a (possibly up to a line break) title is supplied, or
+            # title is on the next line
+            (pageAnchor, _) = xrefMap[anchor]
+        else:
+            # No explicit title. Infer one from anchor and xrefMap.
+            (pageAnchor, title) = xrefMap[anchor]
+
+            # If the title is *still* empty, make a note of it and just use
+            # the anchor name
+            if title == '':
+                print(f'No title found for anchor {anchor}', file=sys.stderr)
+                title = anchor
+
+        # Page the page anchor comes from
+        pageName = pageMap[pageAnchor]
+        print(f'mapAnchor: anchor {anchor} pageAnchor {pageAnchor} -> pageName = {pageName}')
+
+        xref = f'{pageName}#{anchor}'
+    except:
+        print(f'Cannot determine which page {anchor} comes from, passing through to Antora intact', file=sys.stderr)
+        xref = f'{anchor}'
+
+    # Remove extraneous whitespace
+    title = ' '.join(title.split())
+
+    if closeAnchor:
+        return f'xref:{xref}[{title}]'
+    else:
+        return f'xref:{xref}[{title}'
+
+def replaceAnchorText(match, pageMap, xrefMap):
+    """Rewrite <<anchor,text>> to xref:newanchor[text]
+        - match - match object, \1 = anchor, \2 = text
+        - pageMap, xrefMap - per rewriteXrefs below
+    """
+
+    anchor = match.group(1)
+    text = match.group(2)
+
+    return mapAnchor(anchor, text, pageMap, xrefMap, closeAnchor=True)
+
+def replaceAnchorOnly(match, pageMap, xrefMap):
+    """Rewrite <<anchor>> to xref:newanchor[]
+        - match - match object, \1 = anchor
+        - pageMap, xrefMap - per rewriteXrefs below
+    """
+
+    anchor = match.group(1)
+
+    return mapAnchor(anchor, '', pageMap, xrefMap, closeAnchor=True)
+
+def replaceAnchorTrailingText(match, pageMap, xrefMap):
+    """Rewrite <<anchor, to xref:newanchor[
+        - match - match object, \1 = anchor, \2 = text (may be empty)
+        - pageMap, xrefMap - per rewriteXrefs below
+    """
+
+    anchor = match.group(1)
+    text = match.group(2)
+
+    return mapAnchor(anchor, text, pageMap, xrefMap, closeAnchor=False)
+
+class DocFile:
+    """Information about a markup file being converted"""
+
+    def __init__(self):
+        """Constructor
+           - lines - text of file as list of strings
+           - root - common base directory for src files
+           - component - path to component directory for outputs
+           - srcpath - absolute path to file source
+           - relpath - path to file source relative to root
+           - dstpath - path to output file destination
+           - dstlink - path to a an alias (symlink to) dstpath, used for
+             files that need to be in both partials and pages directories.
+           - category - file type - Pages, Partials, or Images. These are
+             string variables containing the corresponding component
+             subdirectory name.
+           - title - page title for Pages, else ''
+           - titleAnchor - page title anchor for Pages, else ''
+           - anchors - asciidoc anchors found in the file
+           - includes - asciidoc includes found in the file
+           - pageMap - dictionary mapping a page anchor to a source file
+             relpath
+           - xrefMap - dictionary mapping an anchor within a page to a page
+             anchor
+        """
+
+        self.lines = None
+        self.root = None
+        self.component = None
+        self.srcpath = None
+        self.relpath = None
+        self.dstpath = None
+        self.dstlink = None
+        self.category = None
+        self.title = ''
+        self.titleAnchor = ''
+        self.anchors = set()
+        self.includes = set()
+
+        self.pageMap = {}
+        self.xrefMap = {}
+
+    def findTitle(self):
+        """Find category (Pages or Partials) and title, for Pages, in a
+           .adoc markup file.
+
+           Heuristic is to search the beginning of the file for a top-level
+           asciidoc title, preceded immediately by an anchor for the page.
+
+           Returns (category, title, titleLine, titleAnchor) with '' for a
+           Partials title and '' if no title anchor is found."""
+
+        """Chapter title block must be within this many lines of start of file"""
+        maxLines = min(30, len(self.lines))
+
+        """Default, if page title and/or page anchor not found"""
+        titleAnchor = ''
+        title = ''
+
+        for lineno in range(0, maxLines):
+            line = self.lines[lineno]
+
+            # Look for the first anchor, which must precede the title to
+            # apply to it (really, must precede it by exactly one line).
+            match = titleAnchorPat.match(line)
+            if match is not None:
+                titleAnchor = match.group('anchor')
+                continue
+
+            # If we find a top-level title, it is a page.
+            match = titlePat.match(line)
+            if match is not None:
+                return (Pages, match.group('title'), lineno, titleAnchor)
+
+            # If we find a second-level or above title, it is a partial
+            match = subtitlePat.match(line)
+            if match is not None:
+                return (Partials, match.group('title'), lineno, titleAnchor)
+
+        # If we do not find a match in the first maxLines lines, assume it
+        # is a partial.
+        return(Partials, 'NO TITLE FOUND', -1, titleAnchor)
+
+    def populate(self,
+                 filename,
+                 root,
+                 component):
+        """Populate data structures given file content and location.
+
+           - filename - file to scan
+           - root - absolute path to root under which all source files are
+             read
+           - component - absolute path to module / component directory under
+             which all destination files are written
+        """
+
+        # Load file content
+        self.srcpath = os.path.abspath(filename)
+        self.lines, _ = loadFile(self.srcpath)
+        if self.lines is None:
+            raise RuntimeError(f'No such file {self.srcpath}')
+
+        # Miscellaneous relevant paths
+        self.root = root
+        self.relpath = os.path.relpath(self.srcpath, root)
+        self.component = component
+
+        # Determine file category.
+        # Only .adoc files are candidates for pages, which is verified by
+        # looking at the file header for a top-level title.
+        # .svg .jpg .png are always images
+        # Anything else is a partial
+        (_, fileext) = os.path.splitext(filename)
+
+        # Defaults
+        self.title = ''
+        self.titleLine = 0
+        self.titleAnchor = None
+
+        if fileext in (('.svg', '.jpg', '.png')):
+            self.category = Images
+        elif fileext == '.adoc':
+            (self.category,
+             self.title,
+             self.titleLine,
+             self.titleAnchor) = self.findTitle()
+        else:
+            self.category = Partials
+
+        # Determine destination path based on category
+        # images/ are treated specially since there is only a single
+        # directory and the component directory is already named Images.
+        if self.category == Partials:
+            self.dstpath = Path(self.component) / Partials / self.relpath
+        elif self.category == Pages:
+            # Save the page in partials/, link from pages/
+            self.dstpath = Path(self.component) / Partials / self.relpath
+            self.dstlink = Path(self.component) / Pages / self.relpath
+        else:
+            # Images go under images/, not under images/images/
+            # This could fail if there were ever top-level images but as all
+            # images used in the spec are required to be specified relative
+            # to {images}, it is OK.
+            self.dstpath = Path(self.component) / self.relpath
+
+
+    def rewriteXrefs(self, pageMap = {}, xrefMap = {}):
+        """Rewrite asciidoc <<>> xrefs into Antora xref: xrefs, including
+           altering the xref target.
+
+           - pageMap - map from page anchors to page names
+           - xrefMap - map from anchors within a page to the page anchor"""
+
+        # pageMap and xrefMap are used in functions called by re.subn, so
+        # save them in members.
+        self.pageMap = pageMap
+        self.xrefMap = xrefMap
+
+        # Xref markup may be broken across lines, and may or may not include
+        # anchor text. Track whether the closing >> is being looked for at
+        # start of line, or not.
+        withinXref = False
+
+        for lineno in range(0, len(self.lines)):
+            line = self.lines[lineno]
+
+            if withinXref:
+                # Could use line.replace, but that does not return a match
+                # count, so we cannot tell if the '>>' is missing.
+                (line, count) = re.subn(r'>>', r']', line, count=1)
+                if count == 0:
+                    print(f'WARNING: No closing >> found on line {lineno} of {self.relpath}', file=sys.stderr)
+                elif line[0] != ' ' and self.lines[lineno-1][-1] not in '[ ':
+                    # Add whitespace corresponding to crushed-out newline on
+                    # previous line, so title words do not run together.
+                    self.lines[lineno-1] += ' '
+                withinXref = False
+
+            # Now look for all xrefs starting on this line and remap them,
+            # including remapping the anchor.
+
+            # First, complete xrefs with alt-text (<<anchor, text>>)
+            (line, count) = re.subn(r'<<([^,>]*),([^>]+)>>',
+                lambda match: replaceAnchorText(match, pageMap, xrefMap),
+                line)
+
+            # Next, complete xrefs without alt-text (<<anchor>>)
+            (line, count) = re.subn(r'<<([^,>]*)>>',
+                lambda match: replaceAnchorOnly(match, pageMap, xrefMap),
+                line)
+
+            # Finally, if there is a trailing '<<anchor,' at EOL, remap it
+            # and set the flag so the terminating '>>' on the next line will
+            # be mapped into an xref closing ']'.
+            (line, count) = re.subn(r'<<([^,>]*),([^>]*)$',
+                lambda match: replaceAnchorTrailingText(match, pageMap, xrefMap),
+                line)
+            if count > 0:
+                withinXref = True
+
+            self.lines[lineno] = line
+
+    def __str__(self):
+        lines = [
+            f'Input file {filename}: {len(self.lines)} lines',
+            f'root = {self.root} component = {self.component} relpath = {self.relpath}',
+            f'category = {self.category} dstpath = {self.dstpath}',
+            f'title = {self.title}',
+            f'titleAnchor = {self.titleAnchor}',
+        ]
+        return '\n'.join(lines)
+
+    def removeDestination(self, path, text, overwrite):
+        """Remove a destination file, if it exists and overwrite is true.
+           Ensure the destination directory exists.
+
+            path - file pathname
+            text - descriptive text for errors
+            overwrite - if True, replace existing output file
+        """
+
+        if os.path.exists(path):
+            if overwrite:
+                # print(f'Removing {text}: {path}')
+                os.remove(path)
+            else:
+                raise RuntimeError(f'Will not overwrite {text}: {path}')
+
+        dir = os.path.dirname(path)
+        if not os.path.exists(dir):
+            # print(f'Creating {text} directory {dir}')
+            os.makedirs(dir)
+
+    def rewriteFile(self, overwrite = True, pageHeaders = None):
+        """Write source file to component directory. Images are just symlinked
+           to the external file. Pages are rewritten to Partials, then
+           symlinked to Pages.
+
+           - overwrite - if True, replace existing output files
+           - pageHeaders - if not None, a list of strings to inject
+             following the chapter heading in each page
+
+           <<>>-style xrefs are assumed to be rewritten prior to calling
+           rewriteFile.
+
+           May still need to rewrite custom macros.
+        """
+
+        self.removeDestination(self.dstpath, 'destination file', overwrite)
+
+        if self.category == Images:
+            # Just symlink destination image to source
+            # print(f'Symlinking {self.dstpath} -> {self.srcpath}')
+            os.symlink(self.srcpath, self.dstpath)
+        elif self.category == Partials:
+            self.writeFile(self.dstpath)
+        elif self.category == Pages:
+            if pageHeaders is not None:
+                # Add blank lines before and after the pageHeaders to avoid
+                # coalescing with file content.
+                lines = self.lines[0:self.titleLine+1]
+                lines += ['\n'] + pageHeaders + ['\n']
+                lines = lines + self.lines[self.titleLine+1:]
+                self.lines = lines
+
+            # Inject page headers immediately following page title
+
+            self.writeFile(self.dstpath)
+
+            if self.dstlink is None:
+                RuntimeError(f'Wrote Page {self.dstpath} to Partials, but no Pages link supplied')
+            else:
+                self.removeDestination(self.dstlink, 'destination link', overwrite)
+                os.symlink(self.dstpath, self.dstlink)
+
+    def writeFile(self, path):
+        """Write self.lines[] to file at specified path"""
+
+        try:
+            fp = open(path, 'w', encoding='utf8')
+        except:
+            raise RuntimeError(f'Cannot open output file {path}')
+
+        for line in self.lines:
+            print(line, file=fp, end='')
+
+        fp.close()
+
+def testHarness():
+    def printFile(label, lines):
+        print(label)
+        print('------------------')
+        for line in lines:
+            print(line)
+
+    # Test harness
+    docFile = DocFile()
+    docFile.lines = [
+        '<<ext,ext chapter>> <<ext-label,',
+        'ext chapter/label>>',
+        '<<core>>, <<core-label, core chapter/label',
+        '>>'
+    ]
+
+    pageMap = {
+        'ext'  : 'file/ext.adoc',
+        'core' : 'file/core.adoc',
+    }
+    xrefMap = {
+        'ext'       : [ 'ext', '' ],
+        'ext-label' : [ 'ext', 'LABELLED ext-label' ],
+        'core'      : [ 'core', 'Core Title' ],
+        'core-label': [ 'core', 'Core Label Title' ],
+    }
+
+    printFile('Original File', docFile.lines)
+
+    docFile.rewriteXrefs(pageMap, xrefMap)
+
+    printFile('Edited File', docFile.lines)
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-root', action='store', dest='root',
+                        default=os.getcwd(),
+                        help='Specify root directory under which files are located (default current directory)')
+    parser.add_argument('-pageHeaders', action='store', dest='pageHeaders',
+                        default=None,
+                        help='Specify file whose contents are injected after title of each converted page')
+    parser.add_argument('-component', action='store', dest='component',
+                        required=True,
+                        help='Specify module / component directory in which converted files are written')
+    #parser.add_argument('-htmlspec', action='store', dest='htmlspec',
+    #                    default=None, required=False,
+    #                    help='Specify HTML of generated spec to extract anchor mapping from')
+    parser.add_argument('-xrefpath', action='store', dest='xrefpath',
+                        default=None, required=False,
+                        help='Specify path to xrefMap.py containing map of anchors to chapter anchors')
+    parser.add_argument('-pagemappath', action='store', dest='pagemappath',
+                        default=None, required=False,
+                        help='Specify path to output pageMap.cjs containing map of anchors to chapter anchors')
+    parser.add_argument('-filelist', action='store',
+                        default=None, required=False,
+                        help='Specify file containing a list of filenames to convert, one/line')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='Specify name of a single file to convert')
+
+    args = parser.parse_args()
+
+    args.root = os.path.abspath(args.root)
+    args.component = os.path.abspath(args.component)
+
+    if args.pageHeaders is not None:
+        args.pageHeaders, _ = loadFile(args.pageHeaders)
+
+    if False:
+        testHarness()
+        sys.exit(0)
+
+    # Initialize dictionaries
+    pageInfo = {}
+    pageMap = {}
+
+    # The xrefmap is imported from the 'xrefMap' module, if it exists
+    try:
+        if args.xrefpath is not None:
+            sys.path.append(args.xrefpath)
+        from xrefMap import xrefMap
+    except:
+        print('WARNING: No module xrefMap containing xrefMap dictionary', file=sys.stderr)
+        xrefMap = {}
+
+    # If a file containing a list of files was specified, add each one.
+    # Could try using os.walk() instead, but that is very slow.
+    if args.filelist is not None:
+        count = 0
+        lines, _ = loadFile(args.filelist)
+        if lines is None:
+            raise RuntimeError(f'Error reading filelist {args.filelist}')
+        for line in lines:
+            path = line.rstrip()
+            if path[0].isalpha() and path.endswith('.adoc'):
+                args.files.append(path)
+                count = count + 1
+        print(f'Read {count} paths from {args.filelist}')
+
+    for filename in args.files:
+        # Create data structure representing the file.
+        docFile = DocFile()
+        docFile.populate(filename = filename,
+                         root = args.root,
+                         component = args.component)
+        # print(docFile, '\n')
+
+        # Save information about the file under its relpath
+        pageInfo[docFile.relpath] = docFile
+
+        # Save mapping from page anchor to its relpath
+        if docFile.titleAnchor is not None:
+            pageMap[docFile.titleAnchor] = docFile.relpath
+
+    # All files have been read and classified.
+    # Rewrite them in memory.
+
+    for key in pageInfo:
+        # Look for <<>>-style anchors and rewrite them to Antora xref-style
+        # anchors using the pageMap (of top-level anchors to page names) and
+        # xrefmap (of anchors to top-level anchors).
+        docFile = pageInfo[key]
+
+        ## print(f'*** Rewriting {key}')
+        ## print(docFile, '\n')
+
+        docFile.rewriteXrefs(pageMap, xrefMap)
+        docFile.rewriteFile(overwrite = True, pageHeaders = args.pageHeaders)
+
+    # Write the pageMap to a .cjs file for use in the Antora build's
+    # specmacros extensions. The xrefMap is already written in JS form.
+    if args.pagemappath is not None:
+        try:
+            fp = open(args.pagemappath, 'w', encoding='utf8')
+        except:
+            raise RuntimeError(f'Cannot open output pageMap.cjs file {args.pagemappath}')
+
+        print('exports.pageMap = {', file=fp)
+        for pageAnchor in sorted(pageMap):
+            pageName = pageMap[pageAnchor]
+            print(f'    {undefquote(pageAnchor)} : {undefquote(pageName)},', file=fp)
+        print('}', file=fp)
+
+        fp.close()
+
+##        if not os.path.exists(args.xrefmap):
+##            raise UserWarning(f'Specified xrefmap {args.xrefmap} does not exist')
+##        if args.xrefmap[-3:] != '.py':
+##            raise UserWarning(f'Specified xrefmap {args.xrefmap} is not a .py file')
+##
+##        abspath = os.path.abspath(args.xrefmap)
+##        xrefdir = os.path.dirname(os.path.abspath(args.xrefmap))
+##        sys.path.append(dir)
+##
+##        xrefbase = os.path.split(args.xrefmap)[1]
+##        xrefbase = os.path.splitext(xrefbase)[0]
+##
+##            raise UserWarning(f'Specified xrefmap {args.xrefmap} does not exist')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/apiconventions.py b/codegen/vulkan/vulkan-docs-next/scripts/apiconventions.py
new file mode 100644
index 0000000..d170dd4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/apiconventions.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2021-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# Generic alias for working group-specific API conventions interface.
+
+# This import should be changed at the repository / working group level to
+# specify the correct API's conventions.
+
+
+import os
+
+defaultAPI = 'vulkan'
+
+VulkanAPI = os.getenv('VULKAN_API', default=defaultAPI)
+
+if VulkanAPI == 'vulkansc':
+    from vkconventions import VulkanSCConventions as APIConventions
+else:
+    from vkconventions import VulkanConventions as APIConventions
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/LICENSE b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/LICENSE
new file mode 100644
index 0000000..ab60297
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/README.md b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/README.md
new file mode 100644
index 0000000..0ae6131
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/README.md
@@ -0,0 +1,123 @@
+# asciidoctor-chunker
+
+[![npm version](https://badge.fury.io/js/asciidoctor-chunker.svg)](https://badge.fury.io/js/asciidoctor-chunker)
+[![Node.js CI](https://github.com/wshito/asciidoctor-chunker/actions/workflows/node.js.yml/badge.svg)](https://github.com/wshito/asciidoctor-chunker/actions/workflows/node.js.yml)
+[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+
+Generates chunked (multi-page) HTML from Asciidoctor's single HTML file with the support of fine-tuned splits by chapters, sections, or any depth of subsections.  Here is [the sample output.](http://www.seinan-gu.ac.jp/~shito/asciidoctor/html_chunk/index.html)  Each chapter can have different levels of extraction depth.  See [What it does](#what-it-does) for details.
+
+## News
+
+- 2021/8/3 [Ver 1.0.4](https://github.com/wshito/asciidoctor-chunker/releases) Added the keyboard shortcuts for the page navigation with arrow keys.  Added the accessibility labels on the page navigation for screen readers.
+- 2021/6/25 [Ver 1.0.3](https://github.com/wshito/asciidoctor-chunker/releases) Fixed the security vulnerabilities in the dependencies.
+- 2021/5/9 [Ver 1.0.2](https://github.com/wshito/asciidoctor-chunker/releases) The toc item for the titlepage can be configured with `--titlePage` option (thanks to [@johnthad](https://github.com/johnthad)).
+- 2021/3/17 [Ver 1.0.1](https://github.com/wshito/asciidoctor-chunker/releases) The script contains shebang and can be invoked directly.  Published on [npm](https://www.npmjs.com/package/asciidoctor-chunker).  You can install via npm.  See [Installation](#installation).
+- 2021/2/27 [Ver 1.0.0 Released!](https://github.com/wshito/asciidoctor-chunker/releases)
+  - Non opinionated page navigation at the bottom of each page is available.
+  - You can insert custom css from the command line with `--css` option.
+  - If you have any custom elements inserted in the source html, they are handled in non-strict mode by setting `--no-strictMode` option.
+  - Gives warning if no relative links are available in tocs.
+  - The current page toc is highlighted and scrolled into view.
+- 2021/2/20  Ver 0.9 is released!  This is a complete re-write from the previous Lisp version.  **It is re-implemented in JavaScript!**  So it is super easy to setup with NodeJS!  The fine tuned split options are available.  Oh, and it runs a lot faster than the previous version!😊
+- 2021/2/10  Started work on the more enhanced version in `javascript` branch.  Please wait a couple of weeks.  The new version can control any depth of sections to split.  And even more, each chapter can have a different depth extraction level.   The new version is written in JavaScript so it will be a lot easier to install!
+- 2018/7/11  Locally linked files with `link` and `script` tags with relative paths are copied to the destination directory keeping the structure of the relative path.  So the custom CSS and script files should be properly copied by `asciidoctor-chunker`.
+
+## What it does
+
+Asciidoctor-Chunker generates chunked HTML from a single HTML generated by Asciidoctor.
+
+1. Splits part preambles and chapters (or any depth of section level) into separate files. Each chapter can be configured to have a different depth for extractions.
+1. Extracts css inside the style element into a separate file so the browser can cache and share it among all the pages.
+1. Places footnotes in the file they belong to.  This also means that the multiply referred footnotes are placed in every referrer's files and sets the link back to the referrer's id within the page.
+1. Re-writes the relative links in order to point to the appropriate chunked files.
+1. Copies the local images and linked files (with `link`, `script` and `img` tags) whose paths are relative, to the directory relative to the chunked html output.  Files are only copied if they are new or modified compared to the previously copied one.
+1. Adds a titlepage link in the toc and page navigation at the bottom of each page.
+1. Adds non-opinionated page navigation.
+1. Highlights the current page toc items and they get scrolled into the viewport.
+
+Here is [the sample output](http://www.seinan-gu.ac.jp/~shito/asciidoctor/html_chunk/index.html) created from the [Asciidoctor User Manual](https://asciidoctor.org/docs/user-manual/).  The footer on the sample page is added by setting the asciidoctor attribute and is not added by asciidoctor-chunker.
+
+
+## Installation
+
+Asciidoctor-Chunker is written in JavaScript and runs with NodeJS.
+
+1. Install [Node.js](https://nodejs.org/), the JavaScript runtime.  This will install `npm`, the package manager CLI for Node.js.
+1. If you want to install globally, invoke the following;
+   ```
+   npm install -g asciidoctor-chunker
+   ```
+   You can install locally under the current directory as;
+   ```
+   npm install asciidoctor-chunker
+   ```
+1. Or alternatively you can download the pre-built program from the [release](https://github.com/wshito/asciidoctor-chunker/releases).
+
+## Usage
+
+If you installed globally:
+   ```
+   asiidoctor-chunker [single-html-file] -o [output-directory]
+   ```
+If you installed locally invoke the following under the directory you installed:
+   ```
+   npx asciidoctor-chunker [single-html-file] -o [output-directory]
+   ```
+If you installed the prebuild program simply run the script as:
+   ```
+   ./asciidoctor-chunker.js [single-html-file] -o [output-directory]
+   ```
+`[single-html-file]` is the single HTML file generated by [Asciidoctor](https://asciidoctor.org) from the book doctype.  If the output directory is not specified, the default is `html_chunks` under the current directory.
+
+More description of usage is available with `--help` option.
+
+## How to Configure the Depth of Extraction
+
+You can list the multiple settings by connecting each specifier with a comma.  Each specifier is consisted of either a single number or a collon separated with two numbers.
+
+The single number sets the default level of extraction.  Number 1 is the application's default and it extracts the chapter level.  Number 2 for section extraction, 3 for subsection, and so on to 6 which is the maximum section level of Asciidoctor.
+
+The list of collon separated numbers, `chap:level`, can change the extraction depth for specific chapters, so `3:2` means chapter 3 is extracted down to 2 levels (ie. section level).  You can use a hyphen to specify the range of chapters to set as `chapFrom-chapTo:level`, so `1-3:5` means chapter 1 through 5 should be extracted with the depth level 5.
+
+Example:
+```
+  --depth 2          The default level 2, all the chapters and
+                     sections will be extracted.
+  --depth 3,1:2,8:5  The default level 3, level 2 for Chap 1,
+                     level 5 for Chap 8.
+  --depth 1,3-8:2    The default level 1, level 2 for Chap 3 to 8.
+  --depth 3-8:3      No default is set so default level is 1, and
+                     level 3 for chap3 to 8.`
+```
+
+## Custom CSS
+
+By default `asciidoctor-chunker.css` is included in the output directory.  It provides the non-opinionated page navigation at the bottom of every chunked page.  You can override this by giving a comma separated list of paths to your custom css files.  They are copied into the output directory so the paths must be accessible by `asciidoctor-chunker`.
+
+## About Strict Mode
+
+If you have any custom elements inserted under `<div id=#content></div>` in the source single html, `asciidoctor-chunker` ignores it by default.  If you want them to be included into the chunked html, set the option `--no-strictMode`.
+The element will be copied to every chunked page.
+
+## Customizing Titlepage
+
+The `index.html` created by `asciidoctor-chunker` is selected by clicking the word **Titlepage** in the table of contents. To change the default value, use the option `--titlePage [string]` where `[string]` is the desired text.
+
+## Example
+
+The project contains the `example` directory where you can generate the chunked html for the [Asciidoctor User Manual](https://asciidoctor.org/docs/user-manual/) by invoking `make`.  Simply go into the `example` directory and invoke `make`.  This will clone the asciidoctor project from the github for the first time, then the chunked html will be generated under `test/output-chunk/html_chunk/` directory.  The `index.html` is the first page.
+
+```
+$ cd example
+$ make
+```
+
+## License
+
+MIT
+
+## Developer's Memo
+
+- Unit test uses `test/resources/output/single/sample.html` generated from `test/resources/sample.adoc`.
+- `npm install cheerio commander`
+- `npm install --save-dev ava webpack webpack-cli webpack-shebang-plugin`
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/asciidoctor-chunker.js b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/asciidoctor-chunker.js
new file mode 100644
index 0000000..afdf947
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/asciidoctor-chunker/asciidoctor-chunker.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+
+/*! For license information please see asciidoctor-chunker.js.LICENSE.txt */
+(()=>{var e,t,n={1073:e=>{e.exports={trueFunc:function(){return!0},falseFunc:function(){return!1}}},9125:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.groupSelectors=t.getDocumentRoot=void 0;var r=n(2515);t.getDocumentRoot=function(e){for(;e.parent;)e=e.parent;return e},t.groupSelectors=function(e){for(var t=[],n=[],i=0,s=e;i<s.length;i++){var o=s[i];o.some(r.isFilter)?t.push(o):n.push(o)}return[n,t]}},7248:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return s(t,e),t},a=this&&this.__spreadArray||function(e,t){for(var n=0,r=t.length,i=e.length;n<r;n++,i++)e[i]=t[n];return e};Object.defineProperty(t,"__esModule",{value:!0}),t.select=t.filter=t.some=t.is=t.aliases=t.pseudos=t.filters=void 0;var c=n(9751),l=n(5366),u=o(n(9432)),h=n(9125),p=n(2515),d=n(5366);Object.defineProperty(t,"filters",{enumerable:!0,get:function(){return d.filters}}),Object.defineProperty(t,"pseudos",{enumerable:!0,get:function(){return d.pseudos}}),Object.defineProperty(t,"aliases",{enumerable:!0,get:function(){return d.aliases}});var f={type:"pseudo",name:"scope",data:null},m=r({},f),T={type:"universal",namespace:null};function _(e,t,n){if(void 0===n&&(n={}),"function"==typeof t)return e.some(t);var r=h.groupSelectors(c.parse(t,n)),i=r[0],s=r[1];return i.length>0&&e.some(l._compileToken(i,n))||s.some((function(t){return g(t,e,n).length>0}))}function E(e,t,n){if(0===t.length)return[];var r,i=h.groupSelectors(e),s=i[0],o=i[1];if(s.length){var a=S(t,s,n);if(0===o.length)return a;a.length&&(r=new Set(a))}for(var c=0;c<o.length&&(null==r?void 0:r.size)!==t.length;c++){var l=o[c];if(0===(r?t.filter((function(e){return u.isTag(e)&&!r.has(e)})):t).length)break;if((a=g(l,t,n)).length)if(r)a.forEach((function(e){return r.add(e)}));else{if(c===o.length-1)return a;r=new Set(a)}}return void 0!==r?r.size===t.length?t:t.filter((function(e){return r.has(e)})):[]}function g(e,t,n){var r;return e.some(c.isTraversal)?O(null!==(r=n.root)&&void 0!==r?r:h.getDocumentRoot(t[0]),a(a([],e),[m]),n,!0,t):O(t,e,n,!1)}t.is=function(e,t,n){return void 0===n&&(n={}),_([e],t,n)},t.some=_,t.filter=function(e,t,n){return void 0===n&&(n={}),E(c.parse(e,n),t,n)},t.select=function(e,t,n){if(void 0===n&&(n={}),"function"==typeof e)return b(t,e);var r=h.groupSelectors(c.parse(e,n)),i=r[0],s=r[1].map((function(e){return O(t,e,n,!0)}));return i.length&&s.push(v(t,i,n,1/0)),1===s.length?s[0]:u.uniqueSort(s.reduce((function(e,t){return a(a([],e),t)})))};var A=new Set(["descendant","adjacent"]);function C(e){return e!==f&&"pseudo"===e.type&&("scope"===e.name||Array.isArray(e.data)&&e.data.some((function(e){return e.some(C)})))}function N(e,t,n){return n&&e.some(C)?r(r({},t),{context:n}):t}function O(e,t,n,r,i){var s=t.findIndex(p.isFilter),o=t.slice(0,s),a=t[s],l=p.getLimit(a.name,a.data);if(0===l)return[];var h=N(o,n,i),d=(0!==o.length||Array.isArray(e)?0===o.length||1===o.length&&o[0]===f?(Array.isArray(e)?e:[e]).filter(u.isTag):r||o.some(c.isTraversal)?v(e,[o],h,l):S(e,[o],h):u.getChildren(e).filter(u.isTag)).slice(0,l),m=function(e,t,n,r){var i="string"==typeof n?parseInt(n,10):NaN;switch(e){case"first":case"lt":return t;case"last":return t.length>0?[t[t.length-1]]:t;case"nth":case"eq":return isFinite(i)&&Math.abs(i)<t.length?[i<0?t[t.length+i]:t[i]]:[];case"gt":return isFinite(i)?t.slice(i+1):[];case"even":return t.filter((function(e,t){return t%2==0}));case"odd":return t.filter((function(e,t){return t%2==1}));case"not":var s=new Set(E(n,t,r));return t.filter((function(e){return!s.has(e)}))}}(a.name,d,a.data,n);if(0===m.length||t.length===s+1)return m;var _=t.slice(s+1),g=_.some(c.isTraversal),C=N(_,n,i);return g&&(A.has(_[0].type)&&_.unshift(T),_.unshift(f)),_.some(p.isFilter)?O(m,_,n,!1,i):g?v(m,[_],C,1/0):S(m,[_],C)}function v(e,t,n,r){return 0===r?[]:b(e,l._compileToken(t,n,e),r)}function b(e,t,n){void 0===n&&(n=1/0);var r=l.prepareContext(e,u,t.shouldTestNextSiblings);return u.find((function(e){return u.isTag(e)&&t(e)}),r,!0,n)}function S(e,t,n){var r=(Array.isArray(e)?e:[e]).filter(u.isTag);if(0===r.length)return r;var i=l._compileToken(t,n);return r.filter(i)}},2515:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getLimit=t.isFilter=t.filterNames=void 0,t.filterNames=new Set(["first","last","eq","gt","nth","lt","even","odd"]),t.isFilter=function e(n){return"pseudo"===n.type&&(!!t.filterNames.has(n.name)||!("not"!==n.name||!Array.isArray(n.data))&&n.data.some((function(t){return t.some(e)})))},t.getLimit=function(e,t){var n=null!=t?parseInt(t,10):NaN;switch(e){case"first":return 1;case"nth":case"eq":return isFinite(n)?n>=0?n+1:1/0:0;case"lt":return isFinite(n)?n>=0?n:1/0:0;case"gt":return isFinite(n)?1/0:0;default:return 1/0}}},6451:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.toggleClass=t.removeClass=t.addClass=t.hasClass=t.removeAttr=t.val=t.data=t.prop=t.attr=void 0;var r=n(6634),i=n(5633),s=Object.prototype.hasOwnProperty,o=/\s+/,a="data-",c={null:null,true:!0,false:!1},l=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/^{[^]*}$|^\[[^]*]$/;function h(e,t,n){var o;if(e&&i.isTag(e))return null!==(o=e.attribs)&&void 0!==o||(e.attribs={}),t?s.call(e.attribs,t)?!n&&l.test(t)?t:e.attribs[t]:"option"===e.name&&"value"===t?r.text(e.children):"input"!==e.name||"radio"!==e.attribs.type&&"checkbox"!==e.attribs.type||"value"!==t?void 0:"on":e.attribs}function p(e,t,n){null===n?_(e,t):e.attribs[t]=""+n}function d(e,t,n){if(e&&i.isTag(e))return t in e?e[t]:!n&&l.test(t)?void 0!==h(e,t,!1):h(e,t,n)}function f(e,t,n,r){t in e?e[t]=n:p(e,t,!r&&l.test(t)?n?"":null:""+n)}function m(e,t,n){var r,i=e;null!==(r=i.data)&&void 0!==r||(i.data={}),"object"==typeof t?Object.assign(i.data,t):"string"==typeof t&&void 0!==n&&(i.data[t]=n)}function T(e,t){var n,r,o;null==t?r=(n=Object.keys(e.attribs).filter((function(e){return e.startsWith(a)}))).map((function(e){return i.camelCase(e.slice(a.length))})):(n=[a+i.cssCase(t)],r=[t]);for(var l=0;l<n.length;++l){var h=n[l],p=r[l];if(s.call(e.attribs,h)&&!s.call(e.data,p)){if(o=e.attribs[h],s.call(c,o))o=c[o];else if(o===String(Number(o)))o=Number(o);else if(u.test(o))try{o=JSON.parse(o)}catch(e){}e.data[p]=o}}return null==t?e.data:o}function _(e,t){e.attribs&&s.call(e.attribs,t)&&delete e.attribs[t]}function E(e){return e?e.trim().split(o):[]}t.attr=function(e,t){if("object"==typeof e||void 0!==t){if("function"==typeof t){if("string"!=typeof e)throw new Error("Bad combination of arguments.");return i.domEach(this,(function(n,r){i.isTag(n)&&p(n,e,t.call(n,r,n.attribs[e]))}))}return i.domEach(this,(function(n){i.isTag(n)&&("object"==typeof e?Object.keys(e).forEach((function(t){var r=e[t];p(n,t,r)})):p(n,e,t))}))}return arguments.length>1?this:h(this[0],e,this.options.xmlMode)},t.prop=function(e,t){var n=this;if("string"==typeof e&&void 0===t)switch(e){case"style":var r=this.css(),s=Object.keys(r);return s.forEach((function(e,t){r[t]=e})),r.length=s.length,r;case"tagName":case"nodeName":var o=this[0];return i.isTag(o)?o.name.toUpperCase():void 0;case"outerHTML":return this.clone().wrap("<container />").parent().html();case"innerHTML":return this.html();default:return d(this[0],e,this.options.xmlMode)}if("object"==typeof e||void 0!==t){if("function"==typeof t){if("object"==typeof e)throw new Error("Bad combination of arguments.");return i.domEach(this,(function(r,s){i.isTag(r)&&f(r,e,t.call(r,s,d(r,e,n.options.xmlMode)),n.options.xmlMode)}))}return i.domEach(this,(function(r){i.isTag(r)&&("object"==typeof e?Object.keys(e).forEach((function(t){var i=e[t];f(r,t,i,n.options.xmlMode)})):f(r,e,t,n.options.xmlMode))}))}},t.data=function(e,t){var n,r=this[0];if(r&&i.isTag(r)){var o=r;return null!==(n=o.data)&&void 0!==n||(o.data={}),e?"object"==typeof e||void 0!==t?(i.domEach(this,(function(n){i.isTag(n)&&("object"==typeof e?m(n,e):m(n,e,t))})),this):s.call(o.data,e)?o.data[e]:T(o,e):T(o)}},t.val=function(e){var t=0===arguments.length,n=this[0];if(!n||!i.isTag(n))return t?void 0:this;switch(n.name){case"textarea":return this.text(e);case"select":var s=this.find("option:selected");if(!t){if(null==this.attr("multiple")&&"object"==typeof e)return this;this.find("option").removeAttr("selected");for(var o="object"!=typeof e?[e]:e,a=0;a<o.length;a++)this.find('option[value="'+o[a]+'"]').attr("selected","");return this}return this.attr("multiple")?s.toArray().map((function(e){return r.text(e.children)})):s.attr("value");case"input":case"option":return t?this.attr("value"):this.attr("value",e)}},t.removeAttr=function(e){for(var t=E(e),n=function(e){i.domEach(r,(function(n){i.isTag(n)&&_(n,t[e])}))},r=this,s=0;s<t.length;s++)n(s);return this},t.hasClass=function(e){return this.toArray().some((function(t){var n=i.isTag(t)&&t.attribs.class,r=-1;if(n&&e.length)for(;(r=n.indexOf(e,r+1))>-1;){var s=r+e.length;if((0===r||o.test(n[r-1]))&&(s===n.length||o.test(n[s])))return!0}return!1}))},t.addClass=function e(t){if("function"==typeof t)return i.domEach(this,(function(n,r){if(i.isTag(n)){var s=n.attribs.class||"";e.call([n],t.call(n,r,s))}}));if(!t||"string"!=typeof t)return this;for(var n=t.split(o),r=this.length,s=0;s<r;s++){var a=this[s];if(i.isTag(a)){var c=h(a,"class",!1);if(c){for(var l=" "+c+" ",u=0;u<n.length;u++){var d=n[u]+" ";l.includes(" "+d)||(l+=d)}p(a,"class",l.trim())}else p(a,"class",n.join(" ").trim())}}return this},t.removeClass=function e(t){if("function"==typeof t)return i.domEach(this,(function(n,r){i.isTag(n)&&e.call([n],t.call(n,r,n.attribs.class||""))}));var n=E(t),r=n.length,s=0===arguments.length;return i.domEach(this,(function(e){if(i.isTag(e))if(s)e.attribs.class="";else{for(var t=E(e.attribs.class),o=!1,a=0;a<r;a++){var c=t.indexOf(n[a]);c>=0&&(t.splice(c,1),o=!0,a--)}o&&(e.attribs.class=t.join(" "))}}))},t.toggleClass=function e(t,n){if("function"==typeof t)return i.domEach(this,(function(r,s){i.isTag(r)&&e.call([r],t.call(r,s,r.attribs.class||"",n),n)}));if(!t||"string"!=typeof t)return this;for(var r=t.split(o),s=r.length,a="boolean"==typeof n?n?1:-1:0,c=this.length,l=0;l<c;l++){var u=this[l];if(i.isTag(u)){for(var h=E(u.attribs.class),p=0;p<s;p++){var d=h.indexOf(r[p]);a>=0&&d<0?h.push(r[p]):a<=0&&d>=0&&h.splice(d,1)}u.attribs.class=h.join(" ")}}return this}},9806:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.css=void 0;var r=n(5633);function i(e,t,n,r){if("string"==typeof t){var o=s(e),a="function"==typeof n?n.call(e,r,o[t]):n;""===a?delete o[t]:null!=a&&(o[t]=a),e.attribs.style=(c=o,Object.keys(c).reduce((function(e,t){return e+(e?" ":"")+t+": "+c[t]+";"}),""))}else"object"==typeof t&&Object.keys(t).forEach((function(n,r){i(e,n,t[n],r)}));var c}function s(e,t){if(e&&r.isTag(e)){var n=function(e){return(e=(e||"").trim())?e.split(";").reduce((function(e,t){var n=t.indexOf(":");return n<1||n===t.length-1||(e[t.slice(0,n).trim()]=t.slice(n+1).trim()),e}),{}):{}}(e.attribs.style);if("string"==typeof t)return n[t];if(Array.isArray(t)){var i={};return t.forEach((function(e){null!=n[e]&&(i[e]=n[e])})),i}return n}}t.css=function(e,t){return null!=e&&null!=t||"object"==typeof e&&!Array.isArray(e)?r.domEach(this,(function(n,s){r.isTag(n)&&i(n,e,t,s)})):s(this[0],e)}},3432:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.serializeArray=t.serialize=void 0;var r=n(5633),i="input,select,textarea,keygen",s=/%20/g,o=/\r?\n/g;t.serialize=function(){return this.serializeArray().map((function(e){return encodeURIComponent(e.name)+"="+encodeURIComponent(e.value)})).join("&").replace(s,"+")},t.serializeArray=function(){var e=this;return this.map((function(t,n){var s=e._make(n);return r.isTag(n)&&"form"===n.name?s.find(i).toArray():s.filter(i).toArray()})).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map((function(t,n){var r,i=e._make(n),s=i.attr("name"),a=null!==(r=i.val())&&void 0!==r?r:"";return Array.isArray(a)?a.map((function(e){return{name:s,value:e.replace(o,"\r\n")}})):{name:s,value:a.replace(o,"\r\n")}})).toArray()}},848:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.clone=t.text=t.toString=t.html=t.empty=t.replaceWith=t.remove=t.insertBefore=t.before=t.insertAfter=t.after=t.wrapAll=t.unwrap=t.wrapInner=t.wrap=t.prepend=t.append=t.prependTo=t.appendTo=t._makeDomArray=void 0;var r=n(9698),i=n(7915),s=n(7915),o=r.__importStar(n(5012)),a=n(6634),c=n(5633),l=n(3719);function u(e){return function(){for(var t=this,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var s=this.length-1;return c.domEach(this,(function(r,o){if(i.hasChildren(r)){var c="function"==typeof n[0]?n[0].call(r,o,a.html(r.children)):n,l=t._makeDomArray(c,o<s);e(l,r.children,r)}}))}}function h(e,t,n,i,s){for(var o,a,c=r.__spreadArray([t,n],i),l=e[t-1]||null,u=e[t+n]||null,h=0;h<i.length;++h){var p=i[h],d=p.parent;if(d){var f=d.children.indexOf(i[h]);f>-1&&(d.children.splice(f,1),s===d&&t>f&&c[0]--)}p.parent=s,p.prev&&(p.prev.next=null!==(o=p.next)&&void 0!==o?o:null),p.next&&(p.next.prev=null!==(a=p.prev)&&void 0!==a?a:null),p.prev=i[h-1]||l,p.next=i[h+1]||u}return l&&(l.next=i[0]),u&&(u.prev=i[i.length-1]),e.splice.apply(e,c)}function p(e){return function(t){for(var n=this.length-1,r=this.parents().last(),i=0;i<this.length;i++){var s=this[i],o="function"==typeof t?t.call(s,i,s):"string"!=typeof t||c.isHtml(t)?t:r.find(t).clone(),a=this._makeDomArray(o,i<n)[0];if(a&&l.DomUtils.hasChildren(a)){for(var u=a,h=0;h<u.children.length;){var p=u.children[h];c.isTag(p)?(u=p,h=0):h++}e(s,u,[a])}}return this}}t._makeDomArray=function(e,t){var n=this;return null==e?[]:c.isCheerio(e)?t?c.cloneDom(e.get()):e.get():Array.isArray(e)?e.reduce((function(e,r){return e.concat(n._makeDomArray(r,t))}),[]):"string"==typeof e?o.default(e,this.options,!1).children:t?c.cloneDom([e]):[e]},t.appendTo=function(e){return(c.isCheerio(e)?e:this._make(e)).append(this),this},t.prependTo=function(e){return(c.isCheerio(e)?e:this._make(e)).prepend(this),this},t.append=u((function(e,t,n){h(t,t.length,0,e,n)})),t.prepend=u((function(e,t,n){h(t,0,0,e,n)})),t.wrap=p((function(e,t,n){var r=e.parent;if(r){var i=r.children,s=i.indexOf(e);o.update([e],t),h(i,s,0,n,r)}})),t.wrapInner=p((function(e,t,n){i.hasChildren(e)&&(o.update(e.children,t),o.update(n,e))})),t.unwrap=function(e){var t=this;return this.parent(e).not("body").each((function(e,n){t._make(n).replaceWith(n.children)})),this},t.wrapAll=function(e){var t=this[0];if(t){for(var n=this._make("function"==typeof e?e.call(t,0,t):e).insertBefore(t),r=void 0,i=0;i<n.length;i++)"tag"===n[i].type&&(r=n[i]);for(var s=0;r&&s<r.children.length;){var o=r.children[s];"tag"===o.type?(r=o,s=0):s++}r&&this._make(r).append(this)}return this},t.after=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=this.length-1;return c.domEach(this,(function(n,i){var s=n.parent;if(l.DomUtils.hasChildren(n)&&s){var o=s.children,c=o.indexOf(n);if(!(c<0)){var u="function"==typeof t[0]?t[0].call(n,i,a.html(n.children)):t;h(o,c+1,0,e._makeDomArray(u,i<r),s)}}}))},t.insertAfter=function(e){var t=this;"string"==typeof e&&(e=this._make(e)),this.remove();var n=[];return this._makeDomArray(e).forEach((function(e){var r=t.clone().toArray(),i=e.parent;if(i){var s=i.children,o=s.indexOf(e);o<0||(h(s,o+1,0,r,i),n.push.apply(n,r))}})),this._make(n)},t.before=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=this.length-1;return c.domEach(this,(function(n,i){var s=n.parent;if(l.DomUtils.hasChildren(n)&&s){var o=s.children,c=o.indexOf(n);if(!(c<0)){var u="function"==typeof t[0]?t[0].call(n,i,a.html(n.children)):t;h(o,c,0,e._makeDomArray(u,i<r),s)}}}))},t.insertBefore=function(e){var t=this,n=this._make(e);this.remove();var r=[];return c.domEach(n,(function(e){var n=t.clone().toArray(),i=e.parent;if(i){var s=i.children,o=s.indexOf(e);o<0||(h(s,o,0,n,i),r.push.apply(r,n))}})),this._make(r)},t.remove=function(e){var t=e?this.filter(e):this;return c.domEach(t,(function(e){l.DomUtils.removeElement(e),e.prev=e.next=e.parent=null})),this},t.replaceWith=function(e){var t=this;return c.domEach(this,(function(n,r){var i=n.parent;if(i){var s=i.children,a="function"==typeof e?e.call(n,r,n):e,c=t._makeDomArray(a);o.update(c,null);var l=s.indexOf(n);h(s,l,1,c,i),c.includes(n)||(n.parent=n.prev=n.next=null)}}))},t.empty=function(){return c.domEach(this,(function(e){l.DomUtils.hasChildren(e)&&(e.children.forEach((function(e){e.next=e.prev=e.parent=null})),e.children.length=0)}))},t.html=function(e){if(void 0===e){var t=this[0];return t&&l.DomUtils.hasChildren(t)?a.html(t.children,this.options):null}var n=r.__assign(r.__assign({},this.options),{context:null});return c.domEach(this,(function(t){if(l.DomUtils.hasChildren(t)){t.children.forEach((function(e){e.next=e.prev=e.parent=null})),n.context=t;var r=c.isCheerio(e)?e.toArray():o.default(""+e,n,!1).children;o.update(r,t)}}))},t.toString=function(){return a.html(this,this.options)},t.text=function e(t){var n=this;return void 0===t?a.text(this):"function"==typeof t?c.domEach(this,(function(r,i){e.call(n._make(r),t.call(r,i,a.text([r])))})):c.domEach(this,(function(e){if(l.DomUtils.hasChildren(e)){e.children.forEach((function(e){e.next=e.prev=e.parent=null}));var n=new s.Text(t);o.update(n,e)}}))},t.clone=function(){return this._make(c.cloneDom(this.get()))}},1042:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addBack=t.add=t.end=t.slice=t.index=t.toArray=t.get=t.eq=t.last=t.first=t.has=t.not=t.is=t.filterArray=t.filter=t.map=t.each=t.contents=t.children=t.siblings=t.prevUntil=t.prevAll=t.prev=t.nextUntil=t.nextAll=t.next=t.closest=t.parentsUntil=t.parents=t.parent=t.find=void 0;var r=n(9698),i=n(7915),s=r.__importStar(n(7248)),o=n(5633),a=n(6634),c=n(3719),l=c.DomUtils.uniqueSort,u=/^\s*[~+]/;function h(e){return function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return function(r){var i,s=e(t,this);return r&&(s=_(s,r,this.options.xmlMode,null===(i=this._root)||void 0===i?void 0:i[0])),this._make(this.length>1&&s.length>1?n.reduce((function(e,t){return t(e)}),s):s)}}}t.find=function(e){var t;if(!e)return this._make([]);var n=this.toArray();if("string"!=typeof e){var r=o.isCheerio(e)?e.toArray():[e];return this._make(r.filter((function(e){return n.some((function(t){return a.contains(t,e)}))})))}var i=u.test(e)?n:this.children().toArray(),c={context:n,root:null===(t=this._root)||void 0===t?void 0:t[0],xmlMode:this.options.xmlMode};return this._make(s.select(e,i,c))};var p=h((function(e,t){for(var n,r=[],i=0;i<t.length;i++){var s=e(t[i]);r.push(s)}return(n=new Array).concat.apply(n,r)})),d=h((function(e,t){for(var n=[],r=0;r<t.length;r++){var i=e(t[r]);null!==i&&n.push(i)}return n}));function f(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var i=null,a=h((function(e,t){var n=[];return o.domEach(t,(function(t){for(var r;(r=e(t))&&!(null==i?void 0:i(r,n.length));t=r)n.push(r)})),n})).apply(void 0,r.__spreadArray([e],t));return function(e,t){var n=this;i="string"==typeof e?function(t){return s.is(t,e,n.options)}:e?T(e):null;var r=a.call(this,t);return i=null,r}}function m(e){return Array.from(new Set(e))}function T(e){return"function"==typeof e?function(t,n){return e.call(t,n,t)}:o.isCheerio(e)?function(t){return Array.prototype.includes.call(e,t)}:function(t){return e===t}}function _(e,t,n,r){return"string"==typeof t?s.filter(t,e,{xmlMode:n,root:r}):e.filter(T(t))}t.parent=d((function(e){var t=e.parent;return t&&!i.isDocument(t)?t:null}),m),t.parents=p((function(e){for(var t=[];e.parent&&!i.isDocument(e.parent);)t.push(e.parent),e=e.parent;return t}),l,(function(e){return e.reverse()})),t.parentsUntil=f((function(e){var t=e.parent;return t&&!i.isDocument(t)?t:null}),l,(function(e){return e.reverse()})),t.closest=function(e){var t=this,n=[];return e?(o.domEach(this,(function(r){for(var i;r&&"root"!==r.type;){if(!e||_([r],e,t.options.xmlMode,null===(i=t._root)||void 0===i?void 0:i[0]).length){r&&!n.includes(r)&&n.push(r);break}r=r.parent}})),this._make(n)):this._make(n)},t.next=d((function(e){return c.DomUtils.nextElementSibling(e)})),t.nextAll=p((function(e){for(var t=[];e.next;)e=e.next,o.isTag(e)&&t.push(e);return t}),m),t.nextUntil=f((function(e){return c.DomUtils.nextElementSibling(e)}),m),t.prev=d((function(e){return c.DomUtils.prevElementSibling(e)})),t.prevAll=p((function(e){for(var t=[];e.prev;)e=e.prev,o.isTag(e)&&t.push(e);return t}),m),t.prevUntil=f((function(e){return c.DomUtils.prevElementSibling(e)}),m),t.siblings=p((function(e){return c.DomUtils.getSiblings(e).filter((function(t){return o.isTag(t)&&t!==e}))}),l),t.children=p((function(e){return c.DomUtils.getChildren(e).filter(o.isTag)}),m),t.contents=function(){var e=this.toArray().reduce((function(e,t){return i.hasChildren(t)?e.concat(t.children):e}),[]);return this._make(e)},t.each=function(e){for(var t=0,n=this.length;t<n&&!1!==e.call(this[t],t,this[t]);)++t;return this},t.map=function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n],i=e.call(r,n,r);null!=i&&(t=t.concat(i))}return this._make(t)},t.filter=function(e){var t;return this._make(_(this.toArray(),e,this.options.xmlMode,null===(t=this._root)||void 0===t?void 0:t[0]))},t.filterArray=_,t.is=function(e){var t=this.toArray();return"string"==typeof e?s.some(t.filter(o.isTag),e,this.options):!!e&&t.some(T(e))},t.not=function(e){var t=this.toArray();if("string"==typeof e){var n=new Set(s.filter(e,t,this.options));t=t.filter((function(e){return!n.has(e)}))}else{var r=T(e);t=t.filter((function(e,t){return!r(e,t)}))}return this._make(t)},t.has=function(e){var t=this;return this.filter("string"==typeof e?":has("+e+")":function(n,r){return t._make(r).find(e).length>0})},t.first=function(){return this.length>1?this._make(this[0]):this},t.last=function(){return this.length>0?this._make(this[this.length-1]):this},t.eq=function(e){var t;return 0==(e=+e)&&this.length<=1?this:(e<0&&(e=this.length+e),this._make(null!==(t=this[e])&&void 0!==t?t:[]))},t.get=function(e){return null==e?this.toArray():this[e<0?this.length+e:e]},t.toArray=function(){return Array.prototype.slice.call(this)},t.index=function(e){var t,n;return null==e?(t=this.parent().children(),n=this[0]):"string"==typeof e?(t=this._make(e),n=this[0]):(t=this,n=o.isCheerio(e)?e[0]:e),Array.prototype.indexOf.call(t,n)},t.slice=function(e,t){return this._make(Array.prototype.slice.call(this,e,t))},t.end=function(){var e;return null!==(e=this.prevObject)&&void 0!==e?e:this._make([])},t.add=function(e,t){var n=this._make(e,t),i=l(r.__spreadArray(r.__spreadArray([],this.get()),n.get()));return this._make(i)},t.addBack=function(e){return this.prevObject?this.add(e?this.prevObject.filter(e):this.prevObject):this}},7911:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Cheerio=void 0;var r=n(9698),i=r.__importDefault(n(5012)),s=r.__importDefault(n(2754)),o=n(5633),a=r.__importStar(n(6451)),c=r.__importStar(n(1042)),l=r.__importStar(n(848)),u=r.__importStar(n(9806)),h=r.__importStar(n(3432)),p=function(){function e(e,t,n,r){var a=this;if(void 0===r&&(r=s.default),this.length=0,this.options=r,!e)return this;if(n&&("string"==typeof n&&(n=i.default(n,this.options,!1)),this._root=new this.constructor(n,null,null,this.options),this._root._root=this._root),o.isCheerio(e))return e;var c,l="string"==typeof e&&o.isHtml(e)?i.default(e,this.options,!1).children:(c=e).name||"root"===c.type||"text"===c.type||"comment"===c.type?[e]:Array.isArray(e)?e:null;if(l)return l.forEach((function(e,t){a[t]=e})),this.length=l.length,this;var u=e,h=t?"string"==typeof t?o.isHtml(t)?this._make(i.default(t,this.options,!1)):(u=t+" "+u,this._root):o.isCheerio(t)?t:this._make(t):this._root;return h?h.find(u):this}return e.prototype._make=function(e,t){var n=new this.constructor(e,t,this._root,this.options);return n.prevObject=this,n},e}();t.Cheerio=p,p.prototype.cheerio="[cheerio object]",p.prototype.splice=Array.prototype.splice,p.prototype[Symbol.iterator]=Array.prototype[Symbol.iterator],Object.assign(p.prototype,a,c,l,u,h)},7503:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.root=t.parseHTML=t.merge=t.contains=void 0;var r=n(9698);r.__exportStar(n(8701),t),r.__exportStar(n(3434),t);var i=n(3434);t.default=i.load([]);var s=r.__importStar(n(6634));t.contains=s.contains,t.merge=s.merge,t.parseHTML=s.parseHTML,t.root=s.root},3434:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.load=void 0;var r=n(9698),i=r.__importStar(n(2754)),s=r.__importStar(n(6634)),o=n(7911),a=r.__importDefault(n(5012));t.load=function e(t,n,c){if(void 0===c&&(c=!0),null==t)throw new Error("cheerio.load() expects a string");var l=r.__assign(r.__assign({},i.default),i.flatten(n)),u=a.default(t,l,c),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.__extends(t,e),t}(o.Cheerio);function p(e,t,n,s){return void 0===n&&(n=u),new h(e,t,n,r.__assign(r.__assign({},l),i.flatten(s)))}return Object.assign(p,s,{load:e,_root:u,_options:l,fn:h.prototype,prototype:h.prototype}),p}},2754:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.flatten=void 0;var r=n(9698);t.default={xml:!1,decodeEntities:!0};var i={_useHtmlParser2:!0,xmlMode:!0};t.flatten=function(e){return(null==e?void 0:e.xml)?"boolean"==typeof e.xml?i:r.__assign(r.__assign({},i),e.xml):null!=e?e:void 0}},5012:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.update=void 0;var r=n(3719),i=n(8585),s=n(7957),o=n(7915);function a(e,t){var n=Array.isArray(e)?e:[e];t?t.children=n:t=null;for(var i=0;i<n.length;i++){var s=n[i];s.parent&&s.parent.children!==n&&r.DomUtils.removeElement(s),t?(s.prev=n[i-1]||null,s.next=n[i+1]||null):s.prev=s.next=null,s.parent=t}return t}t.default=function(e,t,n){if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)&&(e=e.toString()),"string"==typeof e)return t.xmlMode||t._useHtmlParser2?i.parse(e,t):s.parse(e,t,n);var r=e;if(!Array.isArray(r)&&o.isDocument(r))return r;var c=new o.Document([]);return a(r,c),c},t.update=a},8585:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.render=t.parse=void 0;var i=n(3719);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return i.parseDocument}});var s=n(7220);Object.defineProperty(t,"render",{enumerable:!0,get:function(){return r(s).default}})},7957:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.render=t.parse=void 0;var r=n(9698),i=n(7915),s=n(2394),o=r.__importDefault(n(1906));t.parse=function(e,t,n){var r={scriptingEnabled:"boolean"!=typeof t.scriptingEnabled||t.scriptingEnabled,treeAdapter:o.default,sourceCodeLocationInfo:t.sourceCodeLocationInfo},i=t.context;return n?s.parse(e,r):s.parseFragment(i,e,r)},t.render=function(e){for(var t,n=("length"in e?e:[e]),a=0;a<n.length;a+=1){var c=n[a];i.isDocument(c)&&(t=Array.prototype.splice).call.apply(t,r.__spreadArray([n,a,1],c.children))}return s.serialize({children:n},{treeAdapter:o.default})}},6634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.merge=t.contains=t.root=t.parseHTML=t.text=t.xml=t.html=void 0;var r=n(9698),i=r.__importStar(n(2754)),s=n(7248),o=n(3719),a=n(7957),c=n(8585);function l(e,t,n){var r,i=t?"string"==typeof t?s.select(t,null!==(r=null==e?void 0:e._root)&&void 0!==r?r:[],n):t:null==e?void 0:e._root.children;return i?n.xmlMode||n._useHtmlParser2?c.render(i,n):a.render(i):""}function u(e){if(Array.isArray(e))return!0;if("object"!=typeof e||!Object.prototype.hasOwnProperty.call(e,"length")||"number"!=typeof e.length||e.length<0)return!1;for(var t=0;t<e.length;t++)if(!(t in e))return!1;return!0}t.html=function(e,t){return!t&&function(e){return"object"==typeof e&&null!=e&&!("length"in e)&&!("type"in e)}(e)&&(t=e,e=void 0),l(this||void 0,e,r.__assign(r.__assign(r.__assign({},i.default),this?this._options:{}),i.flatten(null!=t?t:{})))},t.xml=function(e){return l(this,e,r.__assign(r.__assign({},this._options),{xmlMode:!0}))},t.text=function e(t){for(var n=t||(this?this.root():[]),r="",i=0;i<n.length;i++){var s=n[i];o.DomUtils.isText(s)?r+=s.data:o.DomUtils.hasChildren(s)&&s.type!==o.ElementType.Comment&&s.type!==o.ElementType.Script&&s.type!==o.ElementType.Style&&(r+=e(s.children))}return r},t.parseHTML=function(e,t,n){if(void 0===n&&(n="boolean"==typeof t&&t),!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t);var r=this.load(e,i.default,!1);return n||r("script").remove(),r.root()[0].children.slice()},t.root=function(){return this(this._root)},t.contains=function(e,t){if(t===e)return!1;for(var n=t;n&&n!==n.parent;)if((n=n.parent)===e)return!0;return!1},t.merge=function(e,t){if(u(e)&&u(t)){for(var n=e.length,r=+t.length,i=0;i<r;i++)e[n++]=t[i];return e.length=n,e}}},8701:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5633:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isHtml=t.cloneDom=t.domEach=t.cssCase=t.camelCase=t.isCheerio=t.isTag=void 0;var r=n(3719),i=n(7915);t.isTag=r.DomUtils.isTag,t.isCheerio=function(e){return null!=e.cheerio},t.camelCase=function(e){return e.replace(/[_.-](\w|$)/g,(function(e,t){return t.toUpperCase()}))},t.cssCase=function(e){return e.replace(/[A-Z]/g,"-$&").toLowerCase()},t.domEach=function(e,t){for(var n=e.length,r=0;r<n;r++)t(e[r],r);return e},t.cloneDom=function(e){var t="length"in e?Array.prototype.map.call(e,(function(e){return i.cloneNode(e,!0)})):[i.cloneNode(e,!0)],n=new i.Document(t);return t.forEach((function(e){e.parent=n})),t};var s=/<[a-zA-Z][^]*>/;t.isHtml=function(e){return s.test(e)}},9698:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__extends:()=>i,__assign:()=>s,__rest:()=>o,__decorate:()=>a,__param:()=>c,__metadata:()=>l,__awaiter:()=>u,__generator:()=>h,__createBinding:()=>p,__exportStar:()=>d,__values:()=>f,__read:()=>m,__spread:()=>T,__spreadArrays:()=>_,__spreadArray:()=>E,__await:()=>g,__asyncGenerator:()=>A,__asyncDelegator:()=>C,__asyncValues:()=>N,__makeTemplateObject:()=>O,__importStar:()=>b,__importDefault:()=>S,__classPrivateFieldGet:()=>y,__classPrivateFieldSet:()=>I});var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var s=function(){return(s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function o(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}function a(e,t,n,r){var i,s=arguments.length,o=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(o=(s<3?i(o):s>3?i(t,n,o):i(t,n))||o);return s>3&&o&&Object.defineProperty(t,n,o),o}function c(e,t){return function(n,r){t(n,r,e)}}function l(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function u(e,t,n,r){return new(n||(n=Promise))((function(i,s){function o(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}c((r=r.apply(e,t||[])).next())}))}function h(e,t){var n,r,i,s,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&s[0]?r.return:s[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;switch(r=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(6===s[0]&&o.label<i[1]){o.label=i[1],i=s;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(s);break}i[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],r=0}finally{n=i=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}}var p=Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function d(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||p(t,e,n)}function f(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,s=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=s.next()).done;)o.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=s.return)&&n.call(s)}finally{if(i)throw i.error}}return o}function T(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(m(arguments[t]));return e}function _(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<n;t++)for(var s=arguments[t],o=0,a=s.length;o<a;o++,i++)r[i]=s[o];return r}function E(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i<s;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||t)}function g(e){return this instanceof g?(this.v=e,this):new g(e)}function A(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,i=n.apply(e,t||[]),s=[];return r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r;function o(e){i[e]&&(r[e]=function(t){return new Promise((function(n,r){s.push([e,t,n,r])>1||a(e,t)}))})}function a(e,t){try{(n=i[e](t)).value instanceof g?Promise.resolve(n.value.v).then(c,l):u(s[0][2],n)}catch(e){u(s[0][3],e)}var n}function c(e){a("next",e)}function l(e){a("throw",e)}function u(e,t){e(t),s.shift(),s.length&&a(s[0][0],s[0][1])}}function C(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,i){t[r]=e[r]?function(t){return(n=!n)?{value:g(e[r](t)),done:"return"===r}:i?i(t):t}:i}}function N(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=f(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,i){!function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)}(r,i,(t=e[n](t)).done,t.value)}))}}}function O(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var v=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function b(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&p(t,e,n);return v(t,e),t}function S(e){return e&&e.__esModule?e:{default:e}}function y(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function I(e,t,n,r,i){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?i.call(e,n):i?i.value=n:t.set(e,n),n}},996:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.attributeRules=void 0;var r=n(1073),i=/[-[\]{}()*+?.,\\^$|#\s]/g;function s(e){return e.replace(i,"\\$&")}t.attributeRules={equals:function(e,t,n){var r=n.adapter,i=t.name,s=t.value;return t.ignoreCase?(s=s.toLowerCase(),function(t){var n=r.getAttributeValue(t,i);return null!=n&&n.length===s.length&&n.toLowerCase()===s&&e(t)}):function(t){return r.getAttributeValue(t,i)===s&&e(t)}},hyphen:function(e,t,n){var r=n.adapter,i=t.name,s=t.value,o=s.length;return t.ignoreCase?(s=s.toLowerCase(),function(t){var n=r.getAttributeValue(t,i);return null!=n&&(n.length===o||"-"===n.charAt(o))&&n.substr(0,o).toLowerCase()===s&&e(t)}):function(t){var n=r.getAttributeValue(t,i);return null!=n&&(n.length===o||"-"===n.charAt(o))&&n.substr(0,o)===s&&e(t)}},element:function(e,t,n){var i=t.name,o=t.value,a=t.ignoreCase,c=n.adapter;if(/\s/.test(o))return r.falseFunc;var l=new RegExp("(?:^|\\s)"+s(o)+"(?:$|\\s)",a?"i":"");return function(t){var n=c.getAttributeValue(t,i);return null!=n&&n.length>=o.length&&l.test(n)&&e(t)}},exists:function(e,t,n){var r=t.name,i=n.adapter;return function(t){return i.hasAttrib(t,r)&&e(t)}},start:function(e,t,n){var i=n.adapter,s=t.name,o=t.value,a=o.length;return 0===a?r.falseFunc:t.ignoreCase?(o=o.toLowerCase(),function(t){var n=i.getAttributeValue(t,s);return null!=n&&n.length>=a&&n.substr(0,a).toLowerCase()===o&&e(t)}):function(t){var n;return!!(null===(n=i.getAttributeValue(t,s))||void 0===n?void 0:n.startsWith(o))&&e(t)}},end:function(e,t,n){var i=n.adapter,s=t.name,o=t.value,a=-o.length;return 0===a?r.falseFunc:t.ignoreCase?(o=o.toLowerCase(),function(t){var n;return(null===(n=i.getAttributeValue(t,s))||void 0===n?void 0:n.substr(a).toLowerCase())===o&&e(t)}):function(t){var n;return!!(null===(n=i.getAttributeValue(t,s))||void 0===n?void 0:n.endsWith(o))&&e(t)}},any:function(e,t,n){var i=n.adapter,o=t.name,a=t.value;if(""===a)return r.falseFunc;if(t.ignoreCase){var c=new RegExp(s(a),"i");return function(t){var n=i.getAttributeValue(t,o);return null!=n&&n.length>=a.length&&c.test(n)&&e(t)}}return function(t){var n;return!!(null===(n=i.getAttributeValue(t,o))||void 0===n?void 0:n.includes(a))&&e(t)}},not:function(e,t,n){var r=n.adapter,i=t.name,s=t.value;return""===s?function(t){return!!r.getAttributeValue(t,i)&&e(t)}:t.ignoreCase?(s=s.toLowerCase(),function(t){var n=r.getAttributeValue(t,i);return(null==n||n.length!==s.length||n.toLowerCase()!==s)&&e(t)}):function(t){return r.getAttributeValue(t,i)!==s&&e(t)}}}},8866:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.compileToken=t.compileUnsafe=t.compile=void 0;var i=n(9751),s=n(1073),o=r(n(7353)),a=n(7177),c=n(3621),l=n(1768);function u(e,t,n){return m("string"==typeof e?i.parse(e,t):e,t,n)}function h(e){return"pseudo"===e.type&&("scope"===e.name||Array.isArray(e.data)&&e.data.some((function(e){return e.some(h)})))}t.compile=function(e,t,n){var r=u(e,t,n);return l.ensureIsTag(r,t.adapter)},t.compileUnsafe=u;var p={type:"descendant"},d={type:"_flexibleDescendant"},f={type:"pseudo",name:"scope",data:null};function m(e,t,n){var r;(e=e.filter((function(e){return e.length>0}))).forEach(o.default),n=null!==(r=t.context)&&void 0!==r?r:n;var i=Array.isArray(n),u=n&&(Array.isArray(n)?n:[n]);!function(e,t,n){for(var r=t.adapter,i=!!(null==n?void 0:n.every((function(e){var t=r.isTag(e)&&r.getParent(e);return e===l.PLACEHOLDER_ELEMENT||t&&r.isTag(t)}))),s=0,o=e;s<o.length;s++){var c=o[s];if(c.length>0&&a.isTraversal(c[0])&&"descendant"!==c[0].type);else{if(!i||c.some(h))continue;c.unshift(p)}c.unshift(f)}}(e,t,u);var _=!1,E=e.map((function(e){if(e.length>=2){var n=e[0],r=e[1];"pseudo"!==n.type||"scope"!==n.name||(i&&"descendant"===r.type?e[1]=d:"adjacent"!==r.type&&"sibling"!==r.type||(_=!0))}return function(e,t,n){var r;return e.reduce((function(e,r){return e===s.falseFunc?s.falseFunc:c.compileGeneralSelector(e,r,t,n,m)}),null!==(r=t.rootFunc)&&void 0!==r?r:s.trueFunc)}(e,t,u)})).reduce(T,s.falseFunc);return E.shouldTestNextSiblings=_,E}function T(e,t){return t===s.falseFunc||e===s.trueFunc?e:e===s.falseFunc||t===s.trueFunc?t:function(n){return e(n)||t(n)}}t.compileToken=m},3621:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compileGeneralSelector=void 0;var r=n(996),i=n(8677);t.compileGeneralSelector=function(e,t,n,s,o){var a=n.adapter,c=n.equals;switch(t.type){case"pseudo-element":throw new Error("Pseudo-elements are not supported by css-select");case"attribute":return r.attributeRules[t.action](e,t,n);case"pseudo":return i.compilePseudoSelector(e,t,n,s,o);case"tag":return function(n){return a.getName(n)===t.name&&e(n)};case"descendant":if(!1===n.cacheResults||"undefined"==typeof WeakSet)return function(t){for(var n=t;n=a.getParent(n);)if(a.isTag(n)&&e(n))return!0;return!1};var l=new WeakSet;return function(t){for(var n=t;n=a.getParent(n);)if(!l.has(n)){if(a.isTag(n)&&e(n))return!0;l.add(n)}return!1};case"_flexibleDescendant":return function(t){var n=t;do{if(a.isTag(n)&&e(n))return!0}while(n=a.getParent(n));return!1};case"parent":return function(t){return a.getChildren(t).some((function(t){return a.isTag(t)&&e(t)}))};case"child":return function(t){var n=a.getParent(t);return null!=n&&a.isTag(n)&&e(n)};case"sibling":return function(t){for(var n=a.getSiblings(t),r=0;r<n.length;r++){var i=n[r];if(c(t,i))break;if(a.isTag(i)&&e(i))return!0}return!1};case"adjacent":return function(t){for(var n,r=a.getSiblings(t),i=0;i<r.length;i++){var s=r[i];if(c(t,s))break;a.isTag(s)&&(n=s)}return!!n&&e(n)};case"universal":return e}}},5366:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.aliases=t.pseudos=t.filters=t.is=t.selectOne=t.selectAll=t.prepareContext=t._compileToken=t._compileUnsafe=t.compile=void 0;var o=s(n(9432)),a=n(1073),c=n(8866),l=n(1768),u=function(e,t){return e===t},h={adapter:o,equals:u};function p(e){var t,n,r,i,s=null!=e?e:h;return null!==(t=s.adapter)&&void 0!==t||(s.adapter=o),null!==(n=s.equals)&&void 0!==n||(s.equals=null!==(i=null===(r=s.adapter)||void 0===r?void 0:r.equals)&&void 0!==i?i:u),s}function d(e){return function(t,n,r){var i=p(n);return e(t,i,r)}}function f(e){return function(t,n,r){var i=p(r);"function"!=typeof t&&(t=c.compileUnsafe(t,i,n));var s=m(n,i.adapter,t.shouldTestNextSiblings);return e(t,s,i)}}function m(e,t,n){return void 0===n&&(n=!1),n&&(e=function(e,t){for(var n=Array.isArray(e)?e.slice(0):[e],r=0;r<n.length;r++){var i=l.getNextSiblings(n[r],t);n.push.apply(n,i)}return n}(e,t)),Array.isArray(e)?t.removeSubsets(e):t.getChildren(e)}t.compile=d(c.compile),t._compileUnsafe=d(c.compileUnsafe),t._compileToken=d(c.compileToken),t.prepareContext=m,t.selectAll=f((function(e,t,n){return e!==a.falseFunc&&t&&0!==t.length?n.adapter.findAll(e,t):[]})),t.selectOne=f((function(e,t,n){return e!==a.falseFunc&&t&&0!==t.length?n.adapter.findOne(e,t):null})),t.is=function(e,t,n){var r=p(n);return("function"==typeof t?t:c.compile(t,r))(e)},t.default=t.selectAll;var T=n(8677);Object.defineProperty(t,"filters",{enumerable:!0,get:function(){return T.filters}}),Object.defineProperty(t,"pseudos",{enumerable:!0,get:function(){return T.pseudos}}),Object.defineProperty(t,"aliases",{enumerable:!0,get:function(){return T.aliases}})},7177:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isTraversal=t.procedure=void 0,t.procedure={universal:50,tag:30,attribute:1,pseudo:0,"pseudo-element":0,descendant:-1,child:-1,parent:-1,sibling:-1,adjacent:-1,_flexibleDescendant:-1},t.isTraversal=function(e){return t.procedure[e.type]<0}},2968:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.aliases=void 0,t.aliases={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:":is(\n        :is(button, input, select, textarea, optgroup, option)[disabled],\n        optgroup[disabled] > option,\n        fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n    )",enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"}},7689:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.filters=void 0;var i=r(n(7540)),s=n(1073);function o(e,t){return function(n){var r=t.getParent(n);return null!=r&&t.isTag(r)&&e(n)}}function a(e){return function(t,n,r){var i=r.adapter[e];return"function"!=typeof i?s.falseFunc:function(e){return i(e)&&t(e)}}}t.filters={contains:function(e,t,n){var r=n.adapter;return function(n){return e(n)&&r.getText(n).includes(t)}},icontains:function(e,t,n){var r=n.adapter,i=t.toLowerCase();return function(t){return e(t)&&r.getText(t).toLowerCase().includes(i)}},"nth-child":function(e,t,n){var r=n.adapter,a=n.equals,c=i.default(t);return c===s.falseFunc?s.falseFunc:c===s.trueFunc?o(e,r):function(t){for(var n=r.getSiblings(t),i=0,s=0;s<n.length&&!a(t,n[s]);s++)r.isTag(n[s])&&i++;return c(i)&&e(t)}},"nth-last-child":function(e,t,n){var r=n.adapter,a=n.equals,c=i.default(t);return c===s.falseFunc?s.falseFunc:c===s.trueFunc?o(e,r):function(t){for(var n=r.getSiblings(t),i=0,s=n.length-1;s>=0&&!a(t,n[s]);s--)r.isTag(n[s])&&i++;return c(i)&&e(t)}},"nth-of-type":function(e,t,n){var r=n.adapter,a=n.equals,c=i.default(t);return c===s.falseFunc?s.falseFunc:c===s.trueFunc?o(e,r):function(t){for(var n=r.getSiblings(t),i=0,s=0;s<n.length;s++){var o=n[s];if(a(t,o))break;r.isTag(o)&&r.getName(o)===r.getName(t)&&i++}return c(i)&&e(t)}},"nth-last-of-type":function(e,t,n){var r=n.adapter,a=n.equals,c=i.default(t);return c===s.falseFunc?s.falseFunc:c===s.trueFunc?o(e,r):function(t){for(var n=r.getSiblings(t),i=0,s=n.length-1;s>=0;s--){var o=n[s];if(a(t,o))break;r.isTag(o)&&r.getName(o)===r.getName(t)&&i++}return c(i)&&e(t)}},root:function(e,t,n){var r=n.adapter;return function(t){var n=r.getParent(t);return(null==n||!r.isTag(n))&&e(t)}},scope:function(e,n,r,i){var s=r.equals;return i&&0!==i.length?1===i.length?function(t){return s(i[0],t)&&e(t)}:function(t){return i.includes(t)&&e(t)}:t.filters.root(e,n,r)},hover:a("isHovered"),visited:a("isVisited"),active:a("isActive")}},8677:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compilePseudoSelector=t.aliases=t.pseudos=t.filters=void 0;var r=n(1073),i=n(9751),s=n(7689);Object.defineProperty(t,"filters",{enumerable:!0,get:function(){return s.filters}});var o=n(7221);Object.defineProperty(t,"pseudos",{enumerable:!0,get:function(){return o.pseudos}});var a=n(2968);Object.defineProperty(t,"aliases",{enumerable:!0,get:function(){return a.aliases}});var c=n(1768);t.compilePseudoSelector=function(e,t,n,l,u){var h=t.name,p=t.data;if(Array.isArray(p))return c.subselects[h](e,p,n,l,u);if(h in a.aliases){if(null!=p)throw new Error("Pseudo "+h+" doesn't have any arguments");var d=i.parse(a.aliases[h],n);return c.subselects.is(e,d,n,l,u)}if(h in s.filters)return s.filters[h](e,p,n,l);if(h in o.pseudos){var f=o.pseudos[h];return o.verifyPseudoArgs(f,h,p),f===r.falseFunc?r.falseFunc:e===r.trueFunc?function(e){return f(e,n,p)}:function(t){return f(t,n,p)&&e(t)}}throw new Error("unmatched pseudo-class :"+h)}},7221:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.verifyPseudoArgs=t.pseudos=void 0,t.pseudos={empty:function(e,t){var n=t.adapter;return!n.getChildren(e).some((function(e){return n.isTag(e)||""!==n.getText(e)}))},"first-child":function(e,t){var n=t.adapter,r=t.equals,i=n.getSiblings(e).find((function(e){return n.isTag(e)}));return null!=i&&r(e,i)},"last-child":function(e,t){for(var n=t.adapter,r=t.equals,i=n.getSiblings(e),s=i.length-1;s>=0;s--){if(r(e,i[s]))return!0;if(n.isTag(i[s]))break}return!1},"first-of-type":function(e,t){for(var n=t.adapter,r=t.equals,i=n.getSiblings(e),s=n.getName(e),o=0;o<i.length;o++){var a=i[o];if(r(e,a))return!0;if(n.isTag(a)&&n.getName(a)===s)break}return!1},"last-of-type":function(e,t){for(var n=t.adapter,r=t.equals,i=n.getSiblings(e),s=n.getName(e),o=i.length-1;o>=0;o--){var a=i[o];if(r(e,a))return!0;if(n.isTag(a)&&n.getName(a)===s)break}return!1},"only-of-type":function(e,t){var n=t.adapter,r=t.equals,i=n.getName(e);return n.getSiblings(e).every((function(t){return r(e,t)||!n.isTag(t)||n.getName(t)!==i}))},"only-child":function(e,t){var n=t.adapter,r=t.equals;return n.getSiblings(e).every((function(t){return r(e,t)||!n.isTag(t)}))}},t.verifyPseudoArgs=function(e,t,n){if(null===n){if(e.length>2)throw new Error("pseudo-selector :"+t+" requires an argument")}else if(2===e.length)throw new Error("pseudo-selector :"+t+" doesn't have any arguments")}},1768:function(e,t,n){"use strict";var r=this&&this.__spreadArray||function(e,t){for(var n=0,r=t.length,i=e.length;n<r;n++,i++)e[i]=t[n];return e};Object.defineProperty(t,"__esModule",{value:!0}),t.subselects=t.getNextSiblings=t.ensureIsTag=t.PLACEHOLDER_ELEMENT=void 0;var i=n(1073),s=n(7177);function o(e,t){return e===i.falseFunc?i.falseFunc:function(n){return t.isTag(n)&&e(n)}}function a(e,t){var n=t.getSiblings(e);if(n.length<=1)return[];var r=n.indexOf(e);return r<0||r===n.length-1?[]:n.slice(r+1).filter(t.isTag)}t.PLACEHOLDER_ELEMENT={},t.ensureIsTag=o,t.getNextSiblings=a;var c=function(e,t,n,r,i){var s=i(t,{xmlMode:!!n.xmlMode,adapter:n.adapter,equals:n.equals},r);return function(t){return s(t)&&e(t)}};t.subselects={is:c,matches:c,not:function(e,t,n,r,s){var o=s(t,{xmlMode:!!n.xmlMode,adapter:n.adapter,equals:n.equals},r);return o===i.falseFunc?e:o===i.trueFunc?i.falseFunc:function(t){return!o(t)&&e(t)}},has:function(e,n,c,l,u){var h=c.adapter,p={xmlMode:!!c.xmlMode,adapter:h,equals:c.equals},d=n.some((function(e){return e.some(s.isTraversal)}))?[t.PLACEHOLDER_ELEMENT]:void 0,f=u(n,p,d);if(f===i.falseFunc)return i.falseFunc;if(f===i.trueFunc)return function(t){return h.getChildren(t).some(h.isTag)&&e(t)};var m=o(f,h),T=f.shouldTestNextSiblings,_=void 0!==T&&T;return d?function(t){d[0]=t;var n=h.getChildren(t),i=_?r(r([],n),a(t,h)):n;return e(t)&&h.existsOne(m,i)}:function(t){return e(t)&&h.existsOne(m,h.getChildren(t))}}}},7353:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7177),i={exists:10,equals:8,not:7,start:6,end:6,any:5,hyphen:4,element:4};function s(e){var t=r.procedure[e.type];if("attribute"===e.type)(t=i[e.action])===i.equals&&"id"===e.name&&(t=9),e.ignoreCase&&(t>>=1);else if("pseudo"===e.type)if(e.data)if("has"===e.name||"contains"===e.name)t=0;else if(Array.isArray(e.data)){t=0;for(var n=0;n<e.data.length;n++)if(1===e.data[n].length){var o=s(e.data[n][0]);if(0===o){t=0;break}o>t&&(t=o)}e.data.length>1&&t>0&&(t-=1)}else t=1;else t=3;return t}t.default=function(e){for(var t=e.map(s),n=1;n<e.length;n++){var r=t[n];if(!(r<0))for(var i=n-1;i>=0&&r<t[i];i--){var o=e[i+1];e[i+1]=e[i],e[i]=o,t[i+1]=t[i],t[i]=r}}}},9751:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.stringify=t.parse=void 0,i(n(675),t);var o=n(675);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return s(o).default}});var a=n(6868);Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return s(a).default}})},675:function(e,t){"use strict";var n=this&&this.__spreadArray||function(e,t){for(var n=0,r=t.length,i=e.length;n<r;n++,i++)e[i]=t[n];return e};Object.defineProperty(t,"__esModule",{value:!0}),t.isTraversal=void 0;var r=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,i=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,s=new Map([["~","element"],["^","start"],["$","end"],["*","any"],["!","not"],["|","hyphen"]]),o={">":"child","<":"parent","~":"sibling","+":"adjacent"},a={"#":["id","equals"],".":["class","element"]},c=new Set(["has","not","matches","is","host","host-context"]),l=new Set(n(["descendant"],Object.keys(o).map((function(e){return o[e]})))),u=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function h(e){return l.has(e.type)}t.isTraversal=h;var p=new Set(["contains","icontains"]),d=new Set(['"',"'"]);function f(e,t,n){var r=parseInt(t,16)-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)}function m(e){return e.replace(i,f)}function T(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function _(e,t,n,i){var l,f;void 0===n&&(n={});var g=[],A=!1;function C(e){var n=t.slice(i+e).match(r);if(!n)throw new Error("Expected name, found "+t.slice(i));var s=n[0];return i+=e+s.length,m(s)}function N(e){for(;T(t.charAt(i+e));)e++;i+=e}function O(e){for(var n=0;"\\"===t.charAt(--e);)n++;return 1==(1&n)}function v(){if(g.length>0&&h(g[g.length-1]))throw new Error("Did not expect successive traversals.")}for(N(0);""!==t;){var b=t.charAt(i);if(T(b))A=!0,N(1);else if(b in o)v(),g.push({type:o[b]}),A=!1,N(1);else if(","===b){if(0===g.length)throw new Error("Empty sub-selector");e.push(g),g=[],A=!1,N(1)}else if(t.startsWith("/*",i)){var S=t.indexOf("*/",i+2);if(S<0)throw new Error("Comment was not terminated");i=S+2}else if(A&&(v(),g.push({type:"descendant"}),A=!1),b in a){var y=a[b],I=y[0],k=y[1];g.push({type:"attribute",name:I,action:k,value:C(1),namespace:null,ignoreCase:!!n.xmlMode&&null})}else if("["===b){N(1);var R=void 0,L=null;"|"===t.charAt(i)&&(L="",i+=1),t.startsWith("*|",i)&&(L="*",i+=2),R=C(0),null===L&&"|"===t.charAt(i)&&"="!==t.charAt(i+1)&&(L=R,R=C(1)),(null!==(l=n.lowerCaseAttributeNames)&&void 0!==l?l:!n.xmlMode)&&(R=R.toLowerCase()),N(0),k="exists";var M=s.get(t.charAt(i));if(M){if(k=M,"="!==t.charAt(i+1))throw new Error("Expected `=`");N(2)}else"="===t.charAt(i)&&(k="equals",N(1));var x="",P=null;if("exists"!==k){if(d.has(t.charAt(i))){for(var D=t.charAt(i),w=i+1;w<t.length&&(t.charAt(w)!==D||O(w));)w+=1;if(t.charAt(w)!==D)throw new Error("Attribute value didn't end");x=m(t.slice(i+1,w)),i=w+1}else{for(var H=i;i<t.length&&(!T(t.charAt(i))&&"]"!==t.charAt(i)||O(i));)i+=1;x=m(t.slice(H,i))}N(0);var F=t.charAt(i);"s"===F||"S"===F?(P=!1,N(1)):"i"!==F&&"I"!==F||(P=!0,N(1))}if(n.xmlMode||null!=P||(P=u.has(R)),"]"!==t.charAt(i))throw new Error("Attribute selector didn't terminate");i+=1;var U={type:"attribute",name:R,action:k,value:x,namespace:L,ignoreCase:P};g.push(U)}else if(":"===b){if(":"===t.charAt(i+1)){g.push({type:"pseudo-element",name:C(2).toLowerCase()});continue}var B=C(1).toLowerCase(),G=null;if("("===t.charAt(i))if(c.has(B)){if(d.has(t.charAt(i+1)))throw new Error("Pseudo-selector "+B+" cannot be quoted");if(i=_(G=[],t,n,i+1),")"!==t.charAt(i))throw new Error("Missing closing parenthesis in :"+B+" ("+t+")");i+=1}else{for(var j=i+=1,q=1;q>0&&i<t.length;i++)"("!==t.charAt(i)||O(i)?")"!==t.charAt(i)||O(i)||q--:q++;if(q)throw new Error("Parenthesis not matched");if(G=t.slice(j,i-1),p.has(B)){var K=G.charAt(0);K===G.slice(-1)&&d.has(K)&&(G=G.slice(1,-1)),G=m(G)}}g.push({type:"pseudo",name:B,data:G})}else{L=null;var V=void 0;if("*"===b)i+=1,V="*";else{if(!r.test(t.slice(i)))return g.length&&"descendant"===g[g.length-1].type&&g.pop(),E(e,g),i;"|"===t.charAt(i)&&(L="",i+=1),V=C(0)}"|"===t.charAt(i)&&(L=V,"*"===t.charAt(i+1)?(V="*",i+=2):V=C(1)),"*"===V?g.push({type:"universal",namespace:L}):((null!==(f=n.lowerCaseTags)&&void 0!==f?f:!n.xmlMode)&&(V=V.toLowerCase()),g.push({type:"tag",name:V,namespace:L}))}}return E(e,g),i}function E(e,t){if(e.length>0&&0===t.length)throw new Error("Empty sub-selector");e.push(t)}t.default=function(e,t){var n=[],r=_(n,""+e,t,0);if(r<e.length)throw new Error("Unmatched selector: "+e.slice(r));return n}},6868:function(e,t){"use strict";var n=this&&this.__spreadArray||function(e,t){for(var n=0,r=t.length,i=e.length;n<r;n++,i++)e[i]=t[n];return e};Object.defineProperty(t,"__esModule",{value:!0});var r={equals:"",element:"~",start:"^",end:"$",any:"*",not:"!",hyphen:"|"},i=new Set(n(n([],Object.keys(r).map((function(e){return r[e]})).filter(Boolean)),[":","[","]"," ","\\","(",")","'"]));function s(e){return e.map(o).join(", ")}function o(e){return e.map(a).join("")}function a(e){switch(e.type){case"child":return" > ";case"parent":return" < ";case"sibling":return" ~ ";case"adjacent":return" + ";case"descendant":return" ";case"universal":return l(e.namespace)+"*";case"tag":return c(e);case"pseudo-element":return"::"+u(e.name);case"pseudo":return null===e.data?":"+u(e.name):"string"==typeof e.data?":"+u(e.name)+"("+u(e.data)+")":":"+u(e.name)+"("+s(e.data)+")";case"attribute":if("id"===e.name&&"equals"===e.action&&!e.ignoreCase&&!e.namespace)return"#"+u(e.value);if("class"===e.name&&"element"===e.action&&!e.ignoreCase&&!e.namespace)return"."+u(e.value);var t=c(e);return"exists"===e.action?"["+t+"]":"["+t+r[e.action]+"='"+u(e.value)+"'"+(e.ignoreCase?"i":!1===e.ignoreCase?"s":"")+"]"}}function c(e){return""+l(e.namespace)+u(e.name)}function l(e){return null!==e?("*"===e?"*":u(e))+"|":""}function u(e){return e.split("").map((function(e){return i.has(e)?"\\"+e:e})).join("")}t.default=s},7837:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.attributeNames=t.elementNames=void 0,t.elementNames=new Map([["altglyph","altGlyph"],["altglyphdef","altGlyphDef"],["altglyphitem","altGlyphItem"],["animatecolor","animateColor"],["animatemotion","animateMotion"],["animatetransform","animateTransform"],["clippath","clipPath"],["feblend","feBlend"],["fecolormatrix","feColorMatrix"],["fecomponenttransfer","feComponentTransfer"],["fecomposite","feComposite"],["feconvolvematrix","feConvolveMatrix"],["fediffuselighting","feDiffuseLighting"],["fedisplacementmap","feDisplacementMap"],["fedistantlight","feDistantLight"],["fedropshadow","feDropShadow"],["feflood","feFlood"],["fefunca","feFuncA"],["fefuncb","feFuncB"],["fefuncg","feFuncG"],["fefuncr","feFuncR"],["fegaussianblur","feGaussianBlur"],["feimage","feImage"],["femerge","feMerge"],["femergenode","feMergeNode"],["femorphology","feMorphology"],["feoffset","feOffset"],["fepointlight","fePointLight"],["fespecularlighting","feSpecularLighting"],["fespotlight","feSpotLight"],["fetile","feTile"],["feturbulence","feTurbulence"],["foreignobject","foreignObject"],["glyphref","glyphRef"],["lineargradient","linearGradient"],["radialgradient","radialGradient"],["textpath","textPath"]]),t.attributeNames=new Map([["definitionurl","definitionURL"],["attributename","attributeName"],["attributetype","attributeType"],["basefrequency","baseFrequency"],["baseprofile","baseProfile"],["calcmode","calcMode"],["clippathunits","clipPathUnits"],["diffuseconstant","diffuseConstant"],["edgemode","edgeMode"],["filterunits","filterUnits"],["glyphref","glyphRef"],["gradienttransform","gradientTransform"],["gradientunits","gradientUnits"],["kernelmatrix","kernelMatrix"],["kernelunitlength","kernelUnitLength"],["keypoints","keyPoints"],["keysplines","keySplines"],["keytimes","keyTimes"],["lengthadjust","lengthAdjust"],["limitingconeangle","limitingConeAngle"],["markerheight","markerHeight"],["markerunits","markerUnits"],["markerwidth","markerWidth"],["maskcontentunits","maskContentUnits"],["maskunits","maskUnits"],["numoctaves","numOctaves"],["pathlength","pathLength"],["patterncontentunits","patternContentUnits"],["patterntransform","patternTransform"],["patternunits","patternUnits"],["pointsatx","pointsAtX"],["pointsaty","pointsAtY"],["pointsatz","pointsAtZ"],["preservealpha","preserveAlpha"],["preserveaspectratio","preserveAspectRatio"],["primitiveunits","primitiveUnits"],["refx","refX"],["refy","refY"],["repeatcount","repeatCount"],["repeatdur","repeatDur"],["requiredextensions","requiredExtensions"],["requiredfeatures","requiredFeatures"],["specularconstant","specularConstant"],["specularexponent","specularExponent"],["spreadmethod","spreadMethod"],["startoffset","startOffset"],["stddeviation","stdDeviation"],["stitchtiles","stitchTiles"],["surfacescale","surfaceScale"],["systemlanguage","systemLanguage"],["tablevalues","tableValues"],["targetx","targetX"],["targety","targetY"],["textlength","textLength"],["viewbox","viewBox"],["viewtarget","viewTarget"],["xchannelselector","xChannelSelector"],["ychannelselector","yChannelSelector"],["zoomandpan","zoomAndPan"]])},7220:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});var a=o(n(9960)),c=n(5863),l=n(7837),u=new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),h=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]);function p(e,t){void 0===t&&(t={});for(var n=("length"in e?e:[e]),r="",i=0;i<n.length;i++)r+=d(n[i],t);return r}function d(e,t){switch(e.type){case a.Root:return p(e.children,t);case a.Directive:case a.Doctype:return"<"+e.data+">";case a.Comment:return"\x3c!--"+e.data+"--\x3e";case a.CDATA:return function(e){return"<![CDATA["+e.children[0].data+"]]>"}(e);case a.Script:case a.Style:case a.Tag:return function(e,t){var n;"foreign"===t.xmlMode&&(e.name=null!==(n=l.elementNames.get(e.name))&&void 0!==n?n:e.name,e.parent&&f.has(e.parent.name)&&(t=r(r({},t),{xmlMode:!1}))),!t.xmlMode&&m.has(e.name)&&(t=r(r({},t),{xmlMode:"foreign"}));var i="<"+e.name,s=function(e,t){if(e)return Object.keys(e).map((function(n){var r,i,s=null!==(r=e[n])&&void 0!==r?r:"";return"foreign"===t.xmlMode&&(n=null!==(i=l.attributeNames.get(n))&&void 0!==i?i:n),t.emptyAttrs||t.xmlMode||""!==s?n+'="'+(!1!==t.decodeEntities?c.encodeXML(s):s.replace(/"/g,"&quot;"))+'"':n})).join(" ")}(e.attribs,t);return s&&(i+=" "+s),0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&h.has(e.name))?(t.xmlMode||(i+=" "),i+="/>"):(i+=">",e.children.length>0&&(i+=p(e.children,t)),!t.xmlMode&&h.has(e.name)||(i+="</"+e.name+">")),i}(e,t);case a.Text:return function(e,t){var n=e.data||"";return!1===t.decodeEntities||!t.xmlMode&&e.parent&&u.has(e.parent.name)||(n=c.encodeXML(n)),n}(e,t)}}t.default=p;var f=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),m=new Set(["svg","math"])},9960:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(n=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===n.Tag||e.type===n.Script||e.type===n.Style},t.Root=n.Root,t.Text=n.Text,t.Directive=n.Directive,t.Comment=n.Comment,t.Script=n.Script,t.Style=n.Style,t.Tag=n.Tag,t.CDATA=n.CDATA,t.Doctype=n.Doctype},7915:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.DomHandler=void 0;var s=n(9960),o=n(7790);i(n(7790),t);var a=/\s+/g,c={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1},l=function(){function e(e,t,n){this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"==typeof t&&(n=t,t=c),"object"==typeof e&&(t=e,e=void 0),this.callback=null!=e?e:null,this.options=null!=t?t:c,this.elementCB=null!=n?n:null}return e.prototype.onparserinit=function(e){this.parser=e},e.prototype.onreset=function(){var e;this.dom=[],this.root=new o.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null!==(e=this.parser)&&void 0!==e?e:null},e.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},e.prototype.onopentag=function(e,t){var n=this.options.xmlMode?s.ElementType.Tag:void 0,r=new o.Element(e,t,void 0,n);this.addNode(r),this.tagStack.push(r)},e.prototype.ontext=function(e){var t=this.options.normalizeWhitespace,n=this.lastNode;if(n&&n.type===s.ElementType.Text)t?n.data=(n.data+e).replace(a," "):n.data+=e;else{t&&(e=e.replace(a," "));var r=new o.Text(e);this.addNode(r),this.lastNode=r}},e.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===s.ElementType.Comment)this.lastNode.data+=e;else{var t=new o.Comment(e);this.addNode(t),this.lastNode=t}},e.prototype.oncommentend=function(){this.lastNode=null},e.prototype.oncdatastart=function(){var e=new o.Text(""),t=new o.NodeWithChildren(s.ElementType.CDATA,[e]);this.addNode(t),e.parent=t,this.lastNode=e},e.prototype.oncdataend=function(){this.lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var n=new o.ProcessingInstruction(e,t);this.addNode(n)},e.prototype.handleCallback=function(e){if("function"==typeof this.callback)this.callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this.tagStack[this.tagStack.length-1],n=t.children[t.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),t.children.push(e),n&&(e.prev=n,n.next=e),e.parent=t,this.lastNode=null},e}();t.DomHandler=l,t.default=l},7790:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),s=this&&this.__assign||function(){return(s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.cloneNode=t.hasChildren=t.isDocument=t.isDirective=t.isComment=t.isText=t.isCDATA=t.isTag=t.Element=t.Document=t.NodeWithChildren=t.ProcessingInstruction=t.Comment=t.Text=t.DataNode=t.Node=void 0;var o=n(9960),a=new Map([[o.ElementType.Tag,1],[o.ElementType.Script,1],[o.ElementType.Style,1],[o.ElementType.Directive,1],[o.ElementType.Text,3],[o.ElementType.CDATA,4],[o.ElementType.Comment,8],[o.ElementType.Root,9]]),c=function(){function e(e){this.type=e,this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(e.prototype,"nodeType",{get:function(){var e;return null!==(e=a.get(this.type))&&void 0!==e?e:1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"parentNode",{get:function(){return this.parent},set:function(e){this.parent=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"previousSibling",{get:function(){return this.prev},set:function(e){this.prev=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextSibling",{get:function(){return this.next},set:function(e){this.next=e},enumerable:!1,configurable:!0}),e.prototype.cloneNode=function(e){return void 0===e&&(e=!1),N(this,e)},e}();t.Node=c;var l=function(e){function t(t,n){var r=e.call(this,t)||this;return r.data=n,r}return i(t,e),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.data},set:function(e){this.data=e},enumerable:!1,configurable:!0}),t}(c);t.DataNode=l;var u=function(e){function t(t){return e.call(this,o.ElementType.Text,t)||this}return i(t,e),t}(l);t.Text=u;var h=function(e){function t(t){return e.call(this,o.ElementType.Comment,t)||this}return i(t,e),t}(l);t.Comment=h;var p=function(e){function t(t,n){var r=e.call(this,o.ElementType.Directive,n)||this;return r.name=t,r}return i(t,e),t}(l);t.ProcessingInstruction=p;var d=function(e){function t(t,n){var r=e.call(this,t)||this;return r.children=n,r}return i(t,e),Object.defineProperty(t.prototype,"firstChild",{get:function(){var e;return null!==(e=this.children[0])&&void 0!==e?e:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children.length>0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(c);t.NodeWithChildren=d;var f=function(e){function t(t){return e.call(this,o.ElementType.Root,t)||this}return i(t,e),t}(d);t.Document=f;var m=function(e){function t(t,n,r,i){void 0===r&&(r=[]),void 0===i&&(i="script"===t?o.ElementType.Script:"style"===t?o.ElementType.Style:o.ElementType.Tag);var s=e.call(this,i,r)||this;return s.name=t,s.attribs=n,s}return i(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(d);function T(e){return o.isTag(e)}function _(e){return e.type===o.ElementType.CDATA}function E(e){return e.type===o.ElementType.Text}function g(e){return e.type===o.ElementType.Comment}function A(e){return e.type===o.ElementType.Directive}function C(e){return e.type===o.ElementType.Root}function N(e,t){var n;if(void 0===t&&(t=!1),E(e))n=new u(e.data);else if(g(e))n=new h(e.data);else if(T(e)){var r=t?O(e.children):[],i=new m(e.name,s({},e.attribs),r);r.forEach((function(e){return e.parent=i})),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]=s({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]=s({},e["x-attribsPrefix"])),n=i}else if(_(e)){r=t?O(e.children):[];var a=new d(o.ElementType.CDATA,r);r.forEach((function(e){return e.parent=a})),n=a}else if(C(e)){r=t?O(e.children):[];var c=new f(r);r.forEach((function(e){return e.parent=c})),e["x-mode"]&&(c["x-mode"]=e["x-mode"]),n=c}else{if(!A(e))throw new Error("Not implemented yet: "+e.type);var l=new p(e.name,e.data);null!=e["x-name"]&&(l["x-name"]=e["x-name"],l["x-publicId"]=e["x-publicId"],l["x-systemId"]=e["x-systemId"]),n=l}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,n}function O(e){for(var t=e.map((function(e){return N(e,!0)})),n=1;n<t.length;n++)t[n].prev=t[n-1],t[n-1].next=t[n];return t}t.Element=m,t.isTag=T,t.isCDATA=_,t.isText=E,t.isComment=g,t.isDirective=A,t.isDocument=C,t.hasChildren=function(e){return Object.prototype.hasOwnProperty.call(e,"children")},t.cloneNode=N},4975:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.uniqueSort=t.compareDocumentPosition=t.removeSubsets=void 0;var r=n(7915);function i(e,t){var n=[],i=[];if(e===t)return 0;for(var s=r.hasChildren(e)?e:e.parent;s;)n.unshift(s),s=s.parent;for(s=r.hasChildren(t)?t:t.parent;s;)i.unshift(s),s=s.parent;for(var o=Math.min(n.length,i.length),a=0;a<o&&n[a]===i[a];)a++;if(0===a)return 1;var c=n[a-1],l=c.children,u=n[a],h=i[a];return l.indexOf(u)>l.indexOf(h)?c===t?20:4:c===e?10:2}t.removeSubsets=function(e){for(var t=e.length;--t>=0;){var n=e[t];if(t>0&&e.lastIndexOf(n,t-1)>=0)e.splice(t,1);else for(var r=n.parent;r;r=r.parent)if(e.includes(r)){e.splice(t,1);break}}return e},t.compareDocumentPosition=i,t.uniqueSort=function(e){return(e=e.filter((function(e,t,n){return!n.includes(e,t+1)}))).sort((function(e,t){var n=i(e,t);return 2&n?-1:4&n?1:0})),e}},9432:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.hasChildren=t.isDocument=t.isComment=t.isText=t.isCDATA=t.isTag=void 0,i(n(3346),t),i(n(5010),t),i(n(6765),t),i(n(8043),t),i(n(3905),t),i(n(4975),t);var s=n(7915);Object.defineProperty(t,"isTag",{enumerable:!0,get:function(){return s.isTag}}),Object.defineProperty(t,"isCDATA",{enumerable:!0,get:function(){return s.isCDATA}}),Object.defineProperty(t,"isText",{enumerable:!0,get:function(){return s.isText}}),Object.defineProperty(t,"isComment",{enumerable:!0,get:function(){return s.isComment}}),Object.defineProperty(t,"isDocument",{enumerable:!0,get:function(){return s.isDocument}}),Object.defineProperty(t,"hasChildren",{enumerable:!0,get:function(){return s.hasChildren}})},3905:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getElementsByTagType=t.getElementsByTagName=t.getElementById=t.getElements=t.testElement=void 0;var r=n(7915),i=n(8043),s={tag_name:function(e){return"function"==typeof e?function(t){return r.isTag(t)&&e(t.name)}:"*"===e?r.isTag:function(t){return r.isTag(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return r.isText(t)&&e(t.data)}:function(t){return r.isText(t)&&t.data===e}}};function o(e,t){return"function"==typeof t?function(n){return r.isTag(n)&&t(n.attribs[e])}:function(n){return r.isTag(n)&&n.attribs[e]===t}}function a(e,t){return function(n){return e(n)||t(n)}}function c(e){var t=Object.keys(e).map((function(t){var n=e[t];return t in s?s[t](n):o(t,n)}));return 0===t.length?null:t.reduce(a)}t.testElement=function(e,t){var n=c(e);return!n||n(t)},t.getElements=function(e,t,n,r){void 0===r&&(r=1/0);var s=c(e);return s?i.filter(s,t,n,r):[]},t.getElementById=function(e,t,n){return void 0===n&&(n=!0),Array.isArray(t)||(t=[t]),i.findOne(o("id",e),t,n)},t.getElementsByTagName=function(e,t,n,r){return void 0===n&&(n=!0),void 0===r&&(r=1/0),i.filter(s.tag_name(e),t,n,r)},t.getElementsByTagType=function(e,t,n,r){return void 0===n&&(n=!0),void 0===r&&(r=1/0),i.filter(s.tag_type(e),t,n,r)}},6765:(e,t)=>{"use strict";function n(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var t=e.parent.children;t.splice(t.lastIndexOf(e),1)}}Object.defineProperty(t,"__esModule",{value:!0}),t.prepend=t.prependChild=t.append=t.appendChild=t.replaceElement=t.removeElement=void 0,t.removeElement=n,t.replaceElement=function(e,t){var n=t.prev=e.prev;n&&(n.next=t);var r=t.next=e.next;r&&(r.prev=t);var i=t.parent=e.parent;if(i){var s=i.children;s[s.lastIndexOf(e)]=t}},t.appendChild=function(e,t){if(n(t),t.next=null,t.parent=e,e.children.push(t)>1){var r=e.children[e.children.length-2];r.next=t,t.prev=r}else t.prev=null},t.append=function(e,t){n(t);var r=e.parent,i=e.next;if(t.next=i,t.prev=e,e.next=t,t.parent=r,i){if(i.prev=t,r){var s=r.children;s.splice(s.lastIndexOf(i),0,t)}}else r&&r.children.push(t)},t.prependChild=function(e,t){if(n(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)){var r=e.children[1];r.prev=t,t.next=r}else t.next=null},t.prepend=function(e,t){n(t);var r=e.parent;if(r){var i=r.children;i.splice(i.indexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=r,t.prev=e.prev,t.next=e,e.prev=t}},8043:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.findAll=t.existsOne=t.findOne=t.findOneChild=t.find=t.filter=void 0;var r=n(7915);function i(e,t,n,s){for(var o=[],a=0,c=t;a<c.length;a++){var l=c[a];if(e(l)&&(o.push(l),--s<=0))break;if(n&&r.hasChildren(l)&&l.children.length>0){var u=i(e,l.children,n,s);if(o.push.apply(o,u),(s-=u.length)<=0)break}}return o}t.filter=function(e,t,n,r){return void 0===n&&(n=!0),void 0===r&&(r=1/0),Array.isArray(t)||(t=[t]),i(e,t,n,r)},t.find=i,t.findOneChild=function(e,t){return t.find(e)},t.findOne=function e(t,n,i){void 0===i&&(i=!0);for(var s=null,o=0;o<n.length&&!s;o++){var a=n[o];r.isTag(a)&&(t(a)?s=a:i&&a.children.length>0&&(s=e(t,a.children)))}return s},t.existsOne=function e(t,n){return n.some((function(n){return r.isTag(n)&&(t(n)||n.children.length>0&&e(t,n.children))}))},t.findAll=function(e,t){for(var n,i,s=[],o=t.filter(r.isTag);i=o.shift();){var a=null===(n=i.children)||void 0===n?void 0:n.filter(r.isTag);a&&a.length>0&&o.unshift.apply(o,a),e(i)&&s.push(i)}return s}},3346:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.innerText=t.textContent=t.getText=t.getInnerHTML=t.getOuterHTML=void 0;var i=n(7915),s=r(n(7220)),o=n(9960);function a(e,t){return s.default(e,t)}t.getOuterHTML=a,t.getInnerHTML=function(e,t){return i.hasChildren(e)?e.children.map((function(e){return a(e,t)})).join(""):""},t.getText=function e(t){return Array.isArray(t)?t.map(e).join(""):i.isTag(t)?"br"===t.name?"\n":e(t.children):i.isCDATA(t)?e(t.children):i.isText(t)?t.data:""},t.textContent=function e(t){return Array.isArray(t)?t.map(e).join(""):i.isTag(t)||i.isCDATA(t)?e(t.children):i.isText(t)?t.data:""},t.innerText=function e(t){return Array.isArray(t)?t.map(e).join(""):i.hasChildren(t)&&t.type===o.ElementType.Tag||i.isCDATA(t)?e(t.children):i.isText(t)?t.data:""}},5010:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.prevElementSibling=t.nextElementSibling=t.getName=t.hasAttrib=t.getAttributeValue=t.getSiblings=t.getParent=t.getChildren=void 0;var r=n(7915),i=[];function s(e){var t;return null!==(t=e.children)&&void 0!==t?t:i}function o(e){return e.parent||null}t.getChildren=s,t.getParent=o,t.getSiblings=function(e){var t=o(e);if(null!=t)return s(t);for(var n=[e],r=e.prev,i=e.next;null!=r;)n.unshift(r),r=r.prev;for(;null!=i;)n.push(i),i=i.next;return n},t.getAttributeValue=function(e,t){var n;return null===(n=e.attribs)||void 0===n?void 0:n[t]},t.hasAttrib=function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},t.getName=function(e){return e.name},t.nextElementSibling=function(e){for(var t=e.next;null!==t&&!r.isTag(t);)t=t.next;return t},t.prevElementSibling=function(e){for(var t=e.prev;null!==t&&!r.isTag(t);)t=t.prev;return t}},4076:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeHTML=t.decodeHTMLStrict=t.decodeXML=void 0;var i=r(n(9323)),s=r(n(9591)),o=r(n(2586)),a=r(n(26)),c=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;function l(e){var t=h(e);return function(e){return String(e).replace(c,t)}}t.decodeXML=l(o.default),t.decodeHTMLStrict=l(i.default);var u=function(e,t){return e<t?1:-1};function h(e){return function(t){if("#"===t.charAt(1)){var n=t.charAt(2);return"X"===n||"x"===n?a.default(parseInt(t.substr(3),16)):a.default(parseInt(t.substr(2),10))}return e[t.slice(1,-1)]||t}}t.decodeHTML=function(){for(var e=Object.keys(s.default).sort(u),t=Object.keys(i.default).sort(u),n=0,r=0;n<t.length;n++)e[r]===t[n]?(t[n]+=";?",r++):t[n]+=";";var o=new RegExp("&(?:"+t.join("|")+"|#[xX][\\da-fA-F]+;?|#\\d+;?)","g"),a=h(i.default);function c(e){return";"!==e.substr(-1)&&(e+=";"),a(e)}return function(e){return String(e).replace(o,c)}}()},26:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(3600)),s=String.fromCodePoint||function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)};t.default=function(e){return e>=55296&&e<=57343||e>1114111?"�":(e in i.default&&(e=i.default[e]),s(e))}},7322:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=void 0;var i=u(r(n(2586)).default),s=h(i);t.encodeXML=T(i);var o,a,c=u(r(n(9323)).default),l=h(c);function u(e){return Object.keys(e).sort().reduce((function(t,n){return t[e[n]]="&"+n+";",t}),{})}function h(e){for(var t=[],n=[],r=0,i=Object.keys(e);r<i.length;r++){var s=i[r];1===s.length?t.push("\\"+s):n.push(s)}t.sort();for(var o=0;o<t.length-1;o++){for(var a=o;a<t.length-1&&t[a].charCodeAt(1)+1===t[a+1].charCodeAt(1);)a+=1;var c=1+a-o;c<3||t.splice(o,c,t[o]+"-"+t[a])}return n.unshift("["+t.join("")+"]"),new RegExp(n.join("|"),"g")}t.encodeHTML=(o=c,a=l,function(e){return e.replace(a,(function(e){return o[e]})).replace(p,f)}),t.encodeNonAsciiHTML=T(c);var p=/(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g,d=null!=String.prototype.codePointAt?function(e){return e.codePointAt(0)}:function(e){return 1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1)-56320+65536};function f(e){return"&#x"+(e.length>1?d(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}var m=new RegExp(s.source+"|"+p.source,"g");function T(e){return function(t){return t.replace(m,(function(t){return e[t]||f(t)}))}}t.escape=function(e){return e.replace(m,f)},t.escapeUTF8=function(e){return e.replace(s,f)}},5863:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.encodeHTML5=t.encodeHTML4=t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=t.encode=t.decodeStrict=t.decode=void 0;var r=n(4076),i=n(7322);t.decode=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?i.encodeXML:i.encodeHTML)(e)};var s=n(7322);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return s.encodeXML}}),Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return s.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return s.encodeNonAsciiHTML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return s.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return s.escapeUTF8}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return s.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return s.encodeHTML}});var o=n(4076);Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return o.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return o.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return o.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return o.decodeXML}})},3870:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),s=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&s(t,e,n);return o(t,e),t},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.parseFeed=t.FeedHandler=void 0;var l,u,h=c(n(7915)),p=a(n(9432)),d=n(763);!function(e){e[e.image=0]="image",e[e.audio=1]="audio",e[e.video=2]="video",e[e.document=3]="document",e[e.executable=4]="executable"}(l||(l={})),function(e){e[e.sample=0]="sample",e[e.full=1]="full",e[e.nonstop=2]="nonstop"}(u||(u={}));var f=function(e){function t(t,n){return"object"==typeof t&&(n=t=void 0),e.call(this,t,n)||this}return i(t,e),t.prototype.onend=function(){var e,t,n=_(C,this.dom);if(n){var r={};if("feed"===n.name){var i=n.children;r.type="atom",A(r,"id","id",i),A(r,"title","title",i);var s=g("href",_("link",i));s&&(r.link=s),A(r,"description","subtitle",i),(o=E("updated",i))&&(r.updated=new Date(o)),A(r,"author","email",i,!0),r.items=T("entry",i).map((function(e){var t={},n=e.children;A(t,"id","id",n),A(t,"title","title",n);var r=g("href",_("link",n));r&&(t.link=r);var i=E("summary",n)||E("content",n);i&&(t.description=i);var s=E("updated",n);return s&&(t.pubDate=new Date(s)),t.media=m(n),t}))}else{var o;i=null!==(t=null===(e=_("channel",n.children))||void 0===e?void 0:e.children)&&void 0!==t?t:[],r.type=n.name.substr(0,3),r.id="",A(r,"title","title",i),A(r,"link","link",i),A(r,"description","description",i),(o=E("lastBuildDate",i))&&(r.updated=new Date(o)),A(r,"author","managingEditor",i,!0),r.items=T("item",n.children).map((function(e){var t={},n=e.children;A(t,"id","guid",n),A(t,"title","title",n),A(t,"link","link",n),A(t,"description","description",n);var r=E("pubDate",n);return r&&(t.pubDate=new Date(r)),t.media=m(n),t}))}this.feed=r,this.handleCallback(null)}else this.handleCallback(new Error("couldn't find root of feed"))},t}(h.default);function m(e){return T("media:content",e).map((function(e){var t={medium:e.attribs.medium,isDefault:!!e.attribs.isDefault};return e.attribs.url&&(t.url=e.attribs.url),e.attribs.fileSize&&(t.fileSize=parseInt(e.attribs.fileSize,10)),e.attribs.type&&(t.type=e.attribs.type),e.attribs.expression&&(t.expression=e.attribs.expression),e.attribs.bitrate&&(t.bitrate=parseInt(e.attribs.bitrate,10)),e.attribs.framerate&&(t.framerate=parseInt(e.attribs.framerate,10)),e.attribs.samplingrate&&(t.samplingrate=parseInt(e.attribs.samplingrate,10)),e.attribs.channels&&(t.channels=parseInt(e.attribs.channels,10)),e.attribs.duration&&(t.duration=parseInt(e.attribs.duration,10)),e.attribs.height&&(t.height=parseInt(e.attribs.height,10)),e.attribs.width&&(t.width=parseInt(e.attribs.width,10)),e.attribs.lang&&(t.lang=e.attribs.lang),t}))}function T(e,t){return p.getElementsByTagName(e,t,!0)}function _(e,t){return p.getElementsByTagName(e,t,!0,1)[0]}function E(e,t,n){return void 0===n&&(n=!1),p.getText(p.getElementsByTagName(e,t,n,1)).trim()}function g(e,t){return t?t.attribs[e]:null}function A(e,t,n,r,i){void 0===i&&(i=!1);var s=E(n,r,i);s&&(e[t]=s)}function C(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}t.FeedHandler=f,t.parseFeed=function(e,t){void 0===t&&(t={xmlMode:!0});var n=new f(t);return new d.Parser(n,t).end(e),n.feed}},763:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;var i=r(n(9889)),s=new Set(["input","option","optgroup","select","button","datalist","textarea"]),o=new Set(["p"]),a={tr:new Set(["tr","th","td"]),th:new Set(["th"]),td:new Set(["thead","th","td"]),body:new Set(["head","link","script"]),li:new Set(["li"]),p:o,h1:o,h2:o,h3:o,h4:o,h5:o,h6:o,select:s,input:s,output:s,button:s,datalist:s,textarea:s,option:new Set(["option"]),optgroup:new Set(["optgroup","option"]),dd:new Set(["dt","dd"]),dt:new Set(["dt","dd"]),address:o,article:o,aside:o,blockquote:o,details:o,div:o,dl:o,fieldset:o,figcaption:o,figure:o,footer:o,form:o,header:o,hr:o,main:o,nav:o,ol:o,pre:o,section:o,table:o,ul:o,rt:new Set(["rt","rp"]),rp:new Set(["rt","rp"]),tbody:new Set(["thead","tbody"]),tfoot:new Set(["thead","tbody"])},c=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),l=new Set(["math","svg"]),u=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),h=/\s|\//,p=function(){function e(e,t){var n,r,s,o,a;void 0===t&&(t={}),this.startIndex=0,this.endIndex=null,this.tagname="",this.attribname="",this.attribvalue="",this.attribs=null,this.stack=[],this.foreignContext=[],this.options=t,this.cbs=null!=e?e:{},this.lowerCaseTagNames=null!==(n=t.lowerCaseTags)&&void 0!==n?n:!t.xmlMode,this.lowerCaseAttributeNames=null!==(r=t.lowerCaseAttributeNames)&&void 0!==r?r:!t.xmlMode,this.tokenizer=new(null!==(s=t.Tokenizer)&&void 0!==s?s:i.default)(this.options,this),null===(a=(o=this.cbs).onparserinit)||void 0===a||a.call(o,this)}return e.prototype.updatePosition=function(e){null===this.endIndex?this.tokenizer.sectionStart<=e?this.startIndex=0:this.startIndex=this.tokenizer.sectionStart-e:this.startIndex=this.endIndex+1,this.endIndex=this.tokenizer.getAbsoluteIndex()},e.prototype.ontext=function(e){var t,n;this.updatePosition(1),this.endIndex--,null===(n=(t=this.cbs).ontext)||void 0===n||n.call(t,e)},e.prototype.onopentagname=function(e){var t,n;if(this.lowerCaseTagNames&&(e=e.toLowerCase()),this.tagname=e,!this.options.xmlMode&&Object.prototype.hasOwnProperty.call(a,e))for(var r=void 0;this.stack.length>0&&a[e].has(r=this.stack[this.stack.length-1]);)this.onclosetag(r);!this.options.xmlMode&&c.has(e)||(this.stack.push(e),l.has(e)?this.foreignContext.push(!0):u.has(e)&&this.foreignContext.push(!1)),null===(n=(t=this.cbs).onopentagname)||void 0===n||n.call(t,e),this.cbs.onopentag&&(this.attribs={})},e.prototype.onopentagend=function(){var e,t;this.updatePosition(1),this.attribs&&(null===(t=(e=this.cbs).onopentag)||void 0===t||t.call(e,this.tagname,this.attribs),this.attribs=null),!this.options.xmlMode&&this.cbs.onclosetag&&c.has(this.tagname)&&this.cbs.onclosetag(this.tagname),this.tagname=""},e.prototype.onclosetag=function(e){if(this.updatePosition(1),this.lowerCaseTagNames&&(e=e.toLowerCase()),(l.has(e)||u.has(e))&&this.foreignContext.pop(),!this.stack.length||!this.options.xmlMode&&c.has(e))this.options.xmlMode||"br"!==e&&"p"!==e||(this.onopentagname(e),this.closeCurrentTag());else{var t=this.stack.lastIndexOf(e);if(-1!==t)if(this.cbs.onclosetag)for(t=this.stack.length-t;t--;)this.cbs.onclosetag(this.stack.pop());else this.stack.length=t;else"p"!==e||this.options.xmlMode||(this.onopentagname(e),this.closeCurrentTag())}},e.prototype.onselfclosingtag=function(){this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?this.closeCurrentTag():this.onopentagend()},e.prototype.closeCurrentTag=function(){var e,t,n=this.tagname;this.onopentagend(),this.stack[this.stack.length-1]===n&&(null===(t=(e=this.cbs).onclosetag)||void 0===t||t.call(e,n),this.stack.pop())},e.prototype.onattribname=function(e){this.lowerCaseAttributeNames&&(e=e.toLowerCase()),this.attribname=e},e.prototype.onattribdata=function(e){this.attribvalue+=e},e.prototype.onattribend=function(e){var t,n;null===(n=(t=this.cbs).onattribute)||void 0===n||n.call(t,this.attribname,this.attribvalue,e),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribname="",this.attribvalue=""},e.prototype.getInstructionName=function(e){var t=e.search(h),n=t<0?e:e.substr(0,t);return this.lowerCaseTagNames&&(n=n.toLowerCase()),n},e.prototype.ondeclaration=function(e){if(this.cbs.onprocessinginstruction){var t=this.getInstructionName(e);this.cbs.onprocessinginstruction("!"+t,"!"+e)}},e.prototype.onprocessinginstruction=function(e){if(this.cbs.onprocessinginstruction){var t=this.getInstructionName(e);this.cbs.onprocessinginstruction("?"+t,"?"+e)}},e.prototype.oncomment=function(e){var t,n,r,i;this.updatePosition(4),null===(n=(t=this.cbs).oncomment)||void 0===n||n.call(t,e),null===(i=(r=this.cbs).oncommentend)||void 0===i||i.call(r)},e.prototype.oncdata=function(e){var t,n,r,i,s,o;this.updatePosition(1),this.options.xmlMode||this.options.recognizeCDATA?(null===(n=(t=this.cbs).oncdatastart)||void 0===n||n.call(t),null===(i=(r=this.cbs).ontext)||void 0===i||i.call(r,e),null===(o=(s=this.cbs).oncdataend)||void 0===o||o.call(s)):this.oncomment("[CDATA["+e+"]]")},e.prototype.onerror=function(e){var t,n;null===(n=(t=this.cbs).onerror)||void 0===n||n.call(t,e)},e.prototype.onend=function(){var e,t;if(this.cbs.onclosetag)for(var n=this.stack.length;n>0;this.cbs.onclosetag(this.stack[--n]));null===(t=(e=this.cbs).onend)||void 0===t||t.call(e)},e.prototype.reset=function(){var e,t,n,r;null===(t=(e=this.cbs).onreset)||void 0===t||t.call(e),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack=[],null===(r=(n=this.cbs).onparserinit)||void 0===r||r.call(n,this)},e.prototype.parseComplete=function(e){this.reset(),this.end(e)},e.prototype.write=function(e){this.tokenizer.write(e)},e.prototype.end=function(e){this.tokenizer.end(e)},e.prototype.pause=function(){this.tokenizer.pause()},e.prototype.resume=function(){this.tokenizer.resume()},e.prototype.parseChunk=function(e){this.write(e)},e.prototype.done=function(e){this.end(e)},e}();t.Parser=p},9889:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(26)),s=r(n(9323)),o=r(n(9591)),a=r(n(2586));function c(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function l(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}function u(e,t,n){var r=e.toLowerCase();return e===r?function(e,i){i===r?e._state=t:(e._state=n,e._index--)}:function(i,s){s===r||s===e?i._state=t:(i._state=n,i._index--)}}function h(e,t){var n=e.toLowerCase();return function(r,i){i===n||i===e?r._state=t:(r._state=3,r._index--)}}var p=u("C",24,16),d=u("D",25,16),f=u("A",26,16),m=u("T",27,16),T=u("A",28,16),_=h("R",35),E=h("I",36),g=h("P",37),A=h("T",38),C=u("R",40,1),N=u("I",41,1),O=u("P",42,1),v=u("T",43,1),b=h("Y",45),S=h("L",46),y=h("E",47),I=u("Y",49,1),k=u("L",50,1),R=u("E",51,1),L=h("I",54),M=h("T",55),x=h("L",56),P=h("E",57),D=u("I",58,1),w=u("T",59,1),H=u("L",60,1),F=u("E",61,1),U=u("#",63,64),B=u("X",66,65),G=function(){function e(e,t){var n;this._state=1,this.buffer="",this.sectionStart=0,this._index=0,this.bufferOffset=0,this.baseState=1,this.special=1,this.running=!0,this.ended=!1,this.cbs=t,this.xmlMode=!!(null==e?void 0:e.xmlMode),this.decodeEntities=null===(n=null==e?void 0:e.decodeEntities)||void 0===n||n}return e.prototype.reset=function(){this._state=1,this.buffer="",this.sectionStart=0,this._index=0,this.bufferOffset=0,this.baseState=1,this.special=1,this.running=!0,this.ended=!1},e.prototype.write=function(e){this.ended&&this.cbs.onerror(Error(".write() after done!")),this.buffer+=e,this.parse()},e.prototype.end=function(e){this.ended&&this.cbs.onerror(Error(".end() after done!")),e&&this.write(e),this.ended=!0,this.running&&this.finish()},e.prototype.pause=function(){this.running=!1},e.prototype.resume=function(){this.running=!0,this._index<this.buffer.length&&this.parse(),this.ended&&this.finish()},e.prototype.getAbsoluteIndex=function(){return this.bufferOffset+this._index},e.prototype.stateText=function(e){"<"===e?(this._index>this.sectionStart&&this.cbs.ontext(this.getSection()),this._state=2,this.sectionStart=this._index):!this.decodeEntities||"&"!==e||1!==this.special&&4!==this.special||(this._index>this.sectionStart&&this.cbs.ontext(this.getSection()),this.baseState=1,this._state=62,this.sectionStart=this._index)},e.prototype.isTagStartChar=function(e){return l(e)||this.xmlMode&&!c(e)&&"/"!==e&&">"!==e},e.prototype.stateBeforeTagName=function(e){"/"===e?this._state=5:"<"===e?(this.cbs.ontext(this.getSection()),this.sectionStart=this._index):">"===e||1!==this.special||c(e)?this._state=1:"!"===e?(this._state=15,this.sectionStart=this._index+1):"?"===e?(this._state=17,this.sectionStart=this._index+1):this.isTagStartChar(e)?(this._state=this.xmlMode||"s"!==e&&"S"!==e?this.xmlMode||"t"!==e&&"T"!==e?3:52:32,this.sectionStart=this._index):this._state=1},e.prototype.stateInTagName=function(e){("/"===e||">"===e||c(e))&&(this.emitToken("onopentagname"),this._state=8,this._index--)},e.prototype.stateBeforeClosingTagName=function(e){c(e)||(">"===e?this._state=1:1!==this.special?4===this.special||"s"!==e&&"S"!==e?4!==this.special||"t"!==e&&"T"!==e?(this._state=1,this._index--):this._state=53:this._state=33:this.isTagStartChar(e)?(this._state=6,this.sectionStart=this._index):(this._state=20,this.sectionStart=this._index))},e.prototype.stateInClosingTagName=function(e){(">"===e||c(e))&&(this.emitToken("onclosetag"),this._state=7,this._index--)},e.prototype.stateAfterClosingTagName=function(e){">"===e&&(this._state=1,this.sectionStart=this._index+1)},e.prototype.stateBeforeAttributeName=function(e){">"===e?(this.cbs.onopentagend(),this._state=1,this.sectionStart=this._index+1):"/"===e?this._state=4:c(e)||(this._state=9,this.sectionStart=this._index)},e.prototype.stateInSelfClosingTag=function(e){">"===e?(this.cbs.onselfclosingtag(),this._state=1,this.sectionStart=this._index+1,this.special=1):c(e)||(this._state=8,this._index--)},e.prototype.stateInAttributeName=function(e){("="===e||"/"===e||">"===e||c(e))&&(this.cbs.onattribname(this.getSection()),this.sectionStart=-1,this._state=10,this._index--)},e.prototype.stateAfterAttributeName=function(e){"="===e?this._state=11:"/"===e||">"===e?(this.cbs.onattribend(void 0),this._state=8,this._index--):c(e)||(this.cbs.onattribend(void 0),this._state=9,this.sectionStart=this._index)},e.prototype.stateBeforeAttributeValue=function(e){'"'===e?(this._state=12,this.sectionStart=this._index+1):"'"===e?(this._state=13,this.sectionStart=this._index+1):c(e)||(this._state=14,this.sectionStart=this._index,this._index--)},e.prototype.handleInAttributeValue=function(e,t){e===t?(this.emitToken("onattribdata"),this.cbs.onattribend(t),this._state=8):this.decodeEntities&&"&"===e&&(this.emitToken("onattribdata"),this.baseState=this._state,this._state=62,this.sectionStart=this._index)},e.prototype.stateInAttributeValueDoubleQuotes=function(e){this.handleInAttributeValue(e,'"')},e.prototype.stateInAttributeValueSingleQuotes=function(e){this.handleInAttributeValue(e,"'")},e.prototype.stateInAttributeValueNoQuotes=function(e){c(e)||">"===e?(this.emitToken("onattribdata"),this.cbs.onattribend(null),this._state=8,this._index--):this.decodeEntities&&"&"===e&&(this.emitToken("onattribdata"),this.baseState=this._state,this._state=62,this.sectionStart=this._index)},e.prototype.stateBeforeDeclaration=function(e){this._state="["===e?23:"-"===e?18:16},e.prototype.stateInDeclaration=function(e){">"===e&&(this.cbs.ondeclaration(this.getSection()),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateInProcessingInstruction=function(e){">"===e&&(this.cbs.onprocessinginstruction(this.getSection()),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateBeforeComment=function(e){"-"===e?(this._state=19,this.sectionStart=this._index+1):this._state=16},e.prototype.stateInComment=function(e){"-"===e&&(this._state=21)},e.prototype.stateInSpecialComment=function(e){">"===e&&(this.cbs.oncomment(this.buffer.substring(this.sectionStart,this._index)),this._state=1,this.sectionStart=this._index+1)},e.prototype.stateAfterComment1=function(e){this._state="-"===e?22:19},e.prototype.stateAfterComment2=function(e){">"===e?(this.cbs.oncomment(this.buffer.substring(this.sectionStart,this._index-2)),this._state=1,this.sectionStart=this._index+1):"-"!==e&&(this._state=19)},e.prototype.stateBeforeCdata6=function(e){"["===e?(this._state=29,this.sectionStart=this._index+1):(this._state=16,this._index--)},e.prototype.stateInCdata=function(e){"]"===e&&(this._state=30)},e.prototype.stateAfterCdata1=function(e){this._state="]"===e?31:29},e.prototype.stateAfterCdata2=function(e){">"===e?(this.cbs.oncdata(this.buffer.substring(this.sectionStart,this._index-2)),this._state=1,this.sectionStart=this._index+1):"]"!==e&&(this._state=29)},e.prototype.stateBeforeSpecialS=function(e){"c"===e||"C"===e?this._state=34:"t"===e||"T"===e?this._state=44:(this._state=3,this._index--)},e.prototype.stateBeforeSpecialSEnd=function(e){2!==this.special||"c"!==e&&"C"!==e?3!==this.special||"t"!==e&&"T"!==e?this._state=1:this._state=48:this._state=39},e.prototype.stateBeforeSpecialLast=function(e,t){("/"===e||">"===e||c(e))&&(this.special=t),this._state=3,this._index--},e.prototype.stateAfterSpecialLast=function(e,t){">"===e||c(e)?(this.special=1,this._state=6,this.sectionStart=this._index-t,this._index--):this._state=1},e.prototype.parseFixedEntity=function(e){if(void 0===e&&(e=this.xmlMode?a.default:s.default),this.sectionStart+1<this._index){var t=this.buffer.substring(this.sectionStart+1,this._index);Object.prototype.hasOwnProperty.call(e,t)&&(this.emitPartial(e[t]),this.sectionStart=this._index+1)}},e.prototype.parseLegacyEntity=function(){for(var e=this.sectionStart+1,t=Math.min(this._index-e,6);t>=2;){var n=this.buffer.substr(e,t);if(Object.prototype.hasOwnProperty.call(o.default,n))return this.emitPartial(o.default[n]),void(this.sectionStart+=t+1);t--}},e.prototype.stateInNamedEntity=function(e){";"===e?(this.parseFixedEntity(),1===this.baseState&&this.sectionStart+1<this._index&&!this.xmlMode&&this.parseLegacyEntity(),this._state=this.baseState):(e<"0"||e>"9")&&!l(e)&&(this.xmlMode||this.sectionStart+1===this._index||(1!==this.baseState?"="!==e&&this.parseFixedEntity(o.default):this.parseLegacyEntity()),this._state=this.baseState,this._index--)},e.prototype.decodeNumericEntity=function(e,t,n){var r=this.sectionStart+e;if(r!==this._index){var s=this.buffer.substring(r,this._index),o=parseInt(s,t);this.emitPartial(i.default(o)),this.sectionStart=n?this._index+1:this._index}this._state=this.baseState},e.prototype.stateInNumericEntity=function(e){";"===e?this.decodeNumericEntity(2,10,!0):(e<"0"||e>"9")&&(this.xmlMode?this._state=this.baseState:this.decodeNumericEntity(2,10,!1),this._index--)},e.prototype.stateInHexEntity=function(e){";"===e?this.decodeNumericEntity(3,16,!0):(e<"a"||e>"f")&&(e<"A"||e>"F")&&(e<"0"||e>"9")&&(this.xmlMode?this._state=this.baseState:this.decodeNumericEntity(3,16,!1),this._index--)},e.prototype.cleanup=function(){this.sectionStart<0?(this.buffer="",this.bufferOffset+=this._index,this._index=0):this.running&&(1===this._state?(this.sectionStart!==this._index&&this.cbs.ontext(this.buffer.substr(this.sectionStart)),this.buffer="",this.bufferOffset+=this._index,this._index=0):this.sectionStart===this._index?(this.buffer="",this.bufferOffset+=this._index,this._index=0):(this.buffer=this.buffer.substr(this.sectionStart),this._index-=this.sectionStart,this.bufferOffset+=this.sectionStart),this.sectionStart=0)},e.prototype.parse=function(){for(;this._index<this.buffer.length&&this.running;){var e=this.buffer.charAt(this._index);1===this._state?this.stateText(e):12===this._state?this.stateInAttributeValueDoubleQuotes(e):9===this._state?this.stateInAttributeName(e):19===this._state?this.stateInComment(e):20===this._state?this.stateInSpecialComment(e):8===this._state?this.stateBeforeAttributeName(e):3===this._state?this.stateInTagName(e):6===this._state?this.stateInClosingTagName(e):2===this._state?this.stateBeforeTagName(e):10===this._state?this.stateAfterAttributeName(e):13===this._state?this.stateInAttributeValueSingleQuotes(e):11===this._state?this.stateBeforeAttributeValue(e):5===this._state?this.stateBeforeClosingTagName(e):7===this._state?this.stateAfterClosingTagName(e):32===this._state?this.stateBeforeSpecialS(e):21===this._state?this.stateAfterComment1(e):14===this._state?this.stateInAttributeValueNoQuotes(e):4===this._state?this.stateInSelfClosingTag(e):16===this._state?this.stateInDeclaration(e):15===this._state?this.stateBeforeDeclaration(e):22===this._state?this.stateAfterComment2(e):18===this._state?this.stateBeforeComment(e):33===this._state?this.stateBeforeSpecialSEnd(e):53===this._state?D(this,e):39===this._state?C(this,e):40===this._state?N(this,e):41===this._state?O(this,e):34===this._state?_(this,e):35===this._state?E(this,e):36===this._state?g(this,e):37===this._state?A(this,e):38===this._state?this.stateBeforeSpecialLast(e,2):42===this._state?v(this,e):43===this._state?this.stateAfterSpecialLast(e,6):44===this._state?b(this,e):29===this._state?this.stateInCdata(e):45===this._state?S(this,e):46===this._state?y(this,e):47===this._state?this.stateBeforeSpecialLast(e,3):48===this._state?I(this,e):49===this._state?k(this,e):50===this._state?R(this,e):51===this._state?this.stateAfterSpecialLast(e,5):52===this._state?L(this,e):54===this._state?M(this,e):55===this._state?x(this,e):56===this._state?P(this,e):57===this._state?this.stateBeforeSpecialLast(e,4):58===this._state?w(this,e):59===this._state?H(this,e):60===this._state?F(this,e):61===this._state?this.stateAfterSpecialLast(e,5):17===this._state?this.stateInProcessingInstruction(e):64===this._state?this.stateInNamedEntity(e):23===this._state?p(this,e):62===this._state?U(this,e):24===this._state?d(this,e):25===this._state?f(this,e):30===this._state?this.stateAfterCdata1(e):31===this._state?this.stateAfterCdata2(e):26===this._state?m(this,e):27===this._state?T(this,e):28===this._state?this.stateBeforeCdata6(e):66===this._state?this.stateInHexEntity(e):65===this._state?this.stateInNumericEntity(e):63===this._state?B(this,e):this.cbs.onerror(Error("unknown _state"),this._state),this._index++}this.cleanup()},e.prototype.finish=function(){this.sectionStart<this._index&&this.handleTrailingData(),this.cbs.onend()},e.prototype.handleTrailingData=function(){var e=this.buffer.substr(this.sectionStart);29===this._state||30===this._state||31===this._state?this.cbs.oncdata(e):19===this._state||21===this._state||22===this._state?this.cbs.oncomment(e):64!==this._state||this.xmlMode?65!==this._state||this.xmlMode?66!==this._state||this.xmlMode?3!==this._state&&8!==this._state&&11!==this._state&&10!==this._state&&9!==this._state&&13!==this._state&&12!==this._state&&14!==this._state&&6!==this._state&&this.cbs.ontext(e):(this.decodeNumericEntity(3,16,!1),this.sectionStart<this._index&&(this._state=this.baseState,this.handleTrailingData())):(this.decodeNumericEntity(2,10,!1),this.sectionStart<this._index&&(this._state=this.baseState,this.handleTrailingData())):(this.parseLegacyEntity(),this.sectionStart<this._index&&(this._state=this.baseState,this.handleTrailingData()))},e.prototype.getSection=function(){return this.buffer.substring(this.sectionStart,this._index)},e.prototype.emitToken=function(e){this.cbs[e](this.getSection()),this.sectionStart=-1},e.prototype.emitPartial=function(e){1!==this.baseState?this.cbs.onattribdata(e):this.cbs.ontext(e)},e}();t.default=G},3719:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RssHandler=t.DefaultHandler=t.DomUtils=t.ElementType=t.Tokenizer=t.createDomStream=t.parseDOM=t.parseDocument=t.DomHandler=t.Parser=void 0;var c=n(763);Object.defineProperty(t,"Parser",{enumerable:!0,get:function(){return c.Parser}});var l=n(7915);function u(e,t){var n=new l.DomHandler(void 0,t);return new c.Parser(n,t).end(e),n.root}Object.defineProperty(t,"DomHandler",{enumerable:!0,get:function(){return l.DomHandler}}),Object.defineProperty(t,"DefaultHandler",{enumerable:!0,get:function(){return l.DomHandler}}),t.parseDocument=u,t.parseDOM=function(e,t){return u(e,t).children},t.createDomStream=function(e,t,n){var r=new l.DomHandler(e,t,n);return new c.Parser(r,t)};var h=n(9889);Object.defineProperty(t,"Tokenizer",{enumerable:!0,get:function(){return a(h).default}});var p=s(n(9960));t.ElementType=p,o(n(3870),t),t.DomUtils=s(n(9432));var d=n(3870);Object.defineProperty(t,"RssHandler",{enumerable:!0,get:function(){return d.FeedHandler}})},9769:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compile=void 0;var r=n(1073);t.compile=function(e){var t=e[0],n=e[1]-1;if(n<0&&t<=0)return r.falseFunc;if(-1===t)return function(e){return e<=n};if(0===t)return function(e){return e===n};if(1===t)return n<0?r.trueFunc:function(e){return e>=n};var i=Math.abs(t),s=(n%i+i)%i;return t>1?function(e){return e>=n&&e%i===s}:function(e){return e<=n&&e%i===s}}},7540:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compile=t.parse=void 0;var r=n(7766);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return r.parse}});var i=n(9769);Object.defineProperty(t,"compile",{enumerable:!0,get:function(){return i.compile}}),t.default=function(e){return(0,i.compile)((0,r.parse)(e))}},7766:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;var n=new Set([9,10,12,13,32]),r="0".charCodeAt(0),i="9".charCodeAt(0);t.parse=function(e){if("even"===(e=e.trim().toLowerCase()))return[2,0];if("odd"===e)return[2,1];var t=0,s=0,o=c(),a=l();if(t<e.length&&"n"===e.charAt(t)&&(t++,s=o*(null!=a?a:1),u(),t<e.length?(o=c(),u(),a=l()):o=a=0),null===a||t<e.length)throw new Error("n-th rule couldn't be parsed ('"+e+"')");return[s,o*a];function c(){return"-"===e.charAt(t)?(t++,-1):("+"===e.charAt(t)&&t++,1)}function l(){for(var n=t,s=0;t<e.length&&e.charCodeAt(t)>=r&&e.charCodeAt(t)<=i;)s=10*s+(e.charCodeAt(t)-r),t++;return t===n?null:s}function u(){for(;t<e.length&&n.has(e.charCodeAt(t));)t++}}},1906:(e,t,n)=>{"use strict";const r=n(1515),{DOCUMENT_MODE:i}=n(6152),s={element:1,text:3,cdata:4,comment:8},o={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"};class a{constructor(e){for(const t of Object.keys(e))this[t]=e[t]}get firstChild(){const e=this.children;return e&&e[0]||null}get lastChild(){const e=this.children;return e&&e[e.length-1]||null}get nodeType(){return s[this.type]||s.element}}Object.keys(o).forEach((e=>{const t=o[e];Object.defineProperty(a.prototype,e,{get:function(){return this[t]||null},set:function(e){return this[t]=e,e}})})),t.createDocument=function(){return new a({type:"root",name:"root",parent:null,prev:null,next:null,children:[],"x-mode":i.NO_QUIRKS})},t.createDocumentFragment=function(){return new a({type:"root",name:"root",parent:null,prev:null,next:null,children:[]})},t.createElement=function(e,t,n){const r=Object.create(null),i=Object.create(null),s=Object.create(null);for(let e=0;e<n.length;e++){const t=n[e].name;r[t]=n[e].value,i[t]=n[e].namespace,s[t]=n[e].prefix}return new a({type:"script"===e||"style"===e?e:"tag",name:e,namespace:t,attribs:r,"x-attribsNamespace":i,"x-attribsPrefix":s,children:[],parent:null,prev:null,next:null})},t.createCommentNode=function(e){return new a({type:"comment",data:e,parent:null,prev:null,next:null})};const c=function(e){return new a({type:"text",data:e,parent:null,prev:null,next:null})},l=t.appendChild=function(e,t){const n=e.children[e.children.length-1];n&&(n.next=t,t.prev=n),e.children.push(t),t.parent=e},u=t.insertBefore=function(e,t,n){const r=e.children.indexOf(n),i=n.prev;i&&(i.next=t,t.prev=i),n.prev=t,t.next=n,e.children.splice(r,0,t),t.parent=e};t.setTemplateContent=function(e,t){l(e,t)},t.getTemplateContent=function(e){return e.children[0]},t.setDocumentType=function(e,t,n,i){const s=r.serializeContent(t,n,i);let o=null;for(let t=0;t<e.children.length;t++)if("directive"===e.children[t].type&&"!doctype"===e.children[t].name){o=e.children[t];break}o?(o.data=s,o["x-name"]=t,o["x-publicId"]=n,o["x-systemId"]=i):l(e,new a({type:"directive",name:"!doctype",data:s,"x-name":t,"x-publicId":n,"x-systemId":i}))},t.setDocumentMode=function(e,t){e["x-mode"]=t},t.getDocumentMode=function(e){return e["x-mode"]},t.detachNode=function(e){if(e.parent){const t=e.parent.children.indexOf(e),n=e.prev,r=e.next;e.prev=null,e.next=null,n&&(n.next=r),r&&(r.prev=n),e.parent.children.splice(t,1),e.parent=null}},t.insertText=function(e,t){const n=e.children[e.children.length-1];n&&"text"===n.type?n.data+=t:l(e,c(t))},t.insertTextBefore=function(e,t,n){const r=e.children[e.children.indexOf(n)-1];r&&"text"===r.type?r.data+=t:u(e,c(t),n)},t.adoptAttributes=function(e,t){for(let n=0;n<t.length;n++){const r=t[n].name;void 0===e.attribs[r]&&(e.attribs[r]=t[n].value,e["x-attribsNamespace"][r]=t[n].namespace,e["x-attribsPrefix"][r]=t[n].prefix)}},t.getFirstChild=function(e){return e.children[0]},t.getChildNodes=function(e){return e.children},t.getParentNode=function(e){return e.parent},t.getAttrList=function(e){const t=[];for(const n in e.attribs)t.push({name:n,value:e.attribs[n],namespace:e["x-attribsNamespace"][n],prefix:e["x-attribsPrefix"][n]});return t},t.getTagName=function(e){return e.name},t.getNamespaceURI=function(e){return e.namespace},t.getTextNodeContent=function(e){return e.data},t.getCommentNodeContent=function(e){return e.data},t.getDocumentTypeNodeName=function(e){return e["x-name"]},t.getDocumentTypeNodePublicId=function(e){return e["x-publicId"]},t.getDocumentTypeNodeSystemId=function(e){return e["x-systemId"]},t.isTextNode=function(e){return"text"===e.type},t.isCommentNode=function(e){return"comment"===e.type},t.isDocumentTypeNode=function(e){return"directive"===e.type&&"!doctype"===e.name},t.isElementNode=function(e){return!!e.attribs},t.setNodeSourceCodeLocation=function(e,t){e.sourceCodeLocation=t},t.getNodeSourceCodeLocation=function(e){return e.sourceCodeLocation},t.updateNodeSourceCodeLocation=function(e,t){e.sourceCodeLocation=Object.assign(e.sourceCodeLocation,t)}},1515:(e,t,n)=>{"use strict";const{DOCUMENT_MODE:r}=n(6152),i="html",s=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],o=s.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]),a=["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"],c=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],l=c.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]);function u(e){const t=-1!==e.indexOf('"')?"'":'"';return t+e+t}function h(e,t){for(let n=0;n<t.length;n++)if(0===e.indexOf(t[n]))return!0;return!1}t.isConforming=function(e){return e.name===i&&null===e.publicId&&(null===e.systemId||"about:legacy-compat"===e.systemId)},t.getDocumentMode=function(e){if(e.name!==i)return r.QUIRKS;const t=e.systemId;if(t&&"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"===t.toLowerCase())return r.QUIRKS;let n=e.publicId;if(null!==n){if(n=n.toLowerCase(),a.indexOf(n)>-1)return r.QUIRKS;let e=null===t?o:s;if(h(n,e))return r.QUIRKS;if(e=null===t?c:l,h(n,e))return r.LIMITED_QUIRKS}return r.NO_QUIRKS},t.serializeContent=function(e,t,n){let r="!DOCTYPE ";return e&&(r+=e),t?r+=" PUBLIC "+u(t):n&&(r+=" SYSTEM"),null!==n&&(r+=" "+u(n)),r}},1734:e=>{"use strict";e.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}},8779:(e,t,n)=>{"use strict";const r=n(5763),i=n(6152),s=i.TAG_NAMES,o=i.NAMESPACES,a=i.ATTRS,c={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},l={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:o.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:o.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:o.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:o.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:o.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:o.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:o.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:o.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:o.XML},"xml:space":{prefix:"xml",name:"space",namespace:o.XML},xmlns:{prefix:"",name:"xmlns",namespace:o.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:o.XMLNS}},u=t.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},h={[s.B]:!0,[s.BIG]:!0,[s.BLOCKQUOTE]:!0,[s.BODY]:!0,[s.BR]:!0,[s.CENTER]:!0,[s.CODE]:!0,[s.DD]:!0,[s.DIV]:!0,[s.DL]:!0,[s.DT]:!0,[s.EM]:!0,[s.EMBED]:!0,[s.H1]:!0,[s.H2]:!0,[s.H3]:!0,[s.H4]:!0,[s.H5]:!0,[s.H6]:!0,[s.HEAD]:!0,[s.HR]:!0,[s.I]:!0,[s.IMG]:!0,[s.LI]:!0,[s.LISTING]:!0,[s.MENU]:!0,[s.META]:!0,[s.NOBR]:!0,[s.OL]:!0,[s.P]:!0,[s.PRE]:!0,[s.RUBY]:!0,[s.S]:!0,[s.SMALL]:!0,[s.SPAN]:!0,[s.STRONG]:!0,[s.STRIKE]:!0,[s.SUB]:!0,[s.SUP]:!0,[s.TABLE]:!0,[s.TT]:!0,[s.U]:!0,[s.UL]:!0,[s.VAR]:!0};t.causesExit=function(e){const t=e.tagName;return!(t!==s.FONT||null===r.getTokenAttr(e,a.COLOR)&&null===r.getTokenAttr(e,a.SIZE)&&null===r.getTokenAttr(e,a.FACE))||h[t]},t.adjustTokenMathMLAttrs=function(e){for(let t=0;t<e.attrs.length;t++)if("definitionurl"===e.attrs[t].name){e.attrs[t].name="definitionURL";break}},t.adjustTokenSVGAttrs=function(e){for(let t=0;t<e.attrs.length;t++){const n=c[e.attrs[t].name];n&&(e.attrs[t].name=n)}},t.adjustTokenXMLAttrs=function(e){for(let t=0;t<e.attrs.length;t++){const n=l[e.attrs[t].name];n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace)}},t.adjustTokenSVGTagName=function(e){const t=u[e.tagName];t&&(e.tagName=t)},t.isIntegrationPoint=function(e,t,n,r){return!(r&&r!==o.HTML||!function(e,t,n){if(t===o.MATHML&&e===s.ANNOTATION_XML)for(let e=0;e<n.length;e++)if(n[e].name===a.ENCODING){const t=n[e].value.toLowerCase();return"text/html"===t||"application/xhtml+xml"===t}return t===o.SVG&&(e===s.FOREIGN_OBJECT||e===s.DESC||e===s.TITLE)}(e,t,n))||!(r&&r!==o.MATHML||!function(e,t){return t===o.MATHML&&(e===s.MI||e===s.MO||e===s.MN||e===s.MS||e===s.MTEXT)}(e,t))}},6152:(e,t)=>{"use strict";const n=t.NAMESPACES={HTML:"http://www.w3.org/1999/xhtml",MATHML:"http://www.w3.org/1998/Math/MathML",SVG:"http://www.w3.org/2000/svg",XLINK:"http://www.w3.org/1999/xlink",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"};t.ATTRS={TYPE:"type",ACTION:"action",ENCODING:"encoding",PROMPT:"prompt",NAME:"name",COLOR:"color",FACE:"face",SIZE:"size"},t.DOCUMENT_MODE={NO_QUIRKS:"no-quirks",QUIRKS:"quirks",LIMITED_QUIRKS:"limited-quirks"};const r=t.TAG_NAMES={A:"a",ADDRESS:"address",ANNOTATION_XML:"annotation-xml",APPLET:"applet",AREA:"area",ARTICLE:"article",ASIDE:"aside",B:"b",BASE:"base",BASEFONT:"basefont",BGSOUND:"bgsound",BIG:"big",BLOCKQUOTE:"blockquote",BODY:"body",BR:"br",BUTTON:"button",CAPTION:"caption",CENTER:"center",CODE:"code",COL:"col",COLGROUP:"colgroup",DD:"dd",DESC:"desc",DETAILS:"details",DIALOG:"dialog",DIR:"dir",DIV:"div",DL:"dl",DT:"dt",EM:"em",EMBED:"embed",FIELDSET:"fieldset",FIGCAPTION:"figcaption",FIGURE:"figure",FONT:"font",FOOTER:"footer",FOREIGN_OBJECT:"foreignObject",FORM:"form",FRAME:"frame",FRAMESET:"frameset",H1:"h1",H2:"h2",H3:"h3",H4:"h4",H5:"h5",H6:"h6",HEAD:"head",HEADER:"header",HGROUP:"hgroup",HR:"hr",HTML:"html",I:"i",IMG:"img",IMAGE:"image",INPUT:"input",IFRAME:"iframe",KEYGEN:"keygen",LABEL:"label",LI:"li",LINK:"link",LISTING:"listing",MAIN:"main",MALIGNMARK:"malignmark",MARQUEE:"marquee",MATH:"math",MENU:"menu",META:"meta",MGLYPH:"mglyph",MI:"mi",MO:"mo",MN:"mn",MS:"ms",MTEXT:"mtext",NAV:"nav",NOBR:"nobr",NOFRAMES:"noframes",NOEMBED:"noembed",NOSCRIPT:"noscript",OBJECT:"object",OL:"ol",OPTGROUP:"optgroup",OPTION:"option",P:"p",PARAM:"param",PLAINTEXT:"plaintext",PRE:"pre",RB:"rb",RP:"rp",RT:"rt",RTC:"rtc",RUBY:"ruby",S:"s",SCRIPT:"script",SECTION:"section",SELECT:"select",SOURCE:"source",SMALL:"small",SPAN:"span",STRIKE:"strike",STRONG:"strong",STYLE:"style",SUB:"sub",SUMMARY:"summary",SUP:"sup",TABLE:"table",TBODY:"tbody",TEMPLATE:"template",TEXTAREA:"textarea",TFOOT:"tfoot",TD:"td",TH:"th",THEAD:"thead",TITLE:"title",TR:"tr",TRACK:"track",TT:"tt",U:"u",UL:"ul",SVG:"svg",VAR:"var",WBR:"wbr",XMP:"xmp"};t.SPECIAL_ELEMENTS={[n.HTML]:{[r.ADDRESS]:!0,[r.APPLET]:!0,[r.AREA]:!0,[r.ARTICLE]:!0,[r.ASIDE]:!0,[r.BASE]:!0,[r.BASEFONT]:!0,[r.BGSOUND]:!0,[r.BLOCKQUOTE]:!0,[r.BODY]:!0,[r.BR]:!0,[r.BUTTON]:!0,[r.CAPTION]:!0,[r.CENTER]:!0,[r.COL]:!0,[r.COLGROUP]:!0,[r.DD]:!0,[r.DETAILS]:!0,[r.DIR]:!0,[r.DIV]:!0,[r.DL]:!0,[r.DT]:!0,[r.EMBED]:!0,[r.FIELDSET]:!0,[r.FIGCAPTION]:!0,[r.FIGURE]:!0,[r.FOOTER]:!0,[r.FORM]:!0,[r.FRAME]:!0,[r.FRAMESET]:!0,[r.H1]:!0,[r.H2]:!0,[r.H3]:!0,[r.H4]:!0,[r.H5]:!0,[r.H6]:!0,[r.HEAD]:!0,[r.HEADER]:!0,[r.HGROUP]:!0,[r.HR]:!0,[r.HTML]:!0,[r.IFRAME]:!0,[r.IMG]:!0,[r.INPUT]:!0,[r.LI]:!0,[r.LINK]:!0,[r.LISTING]:!0,[r.MAIN]:!0,[r.MARQUEE]:!0,[r.MENU]:!0,[r.META]:!0,[r.NAV]:!0,[r.NOEMBED]:!0,[r.NOFRAMES]:!0,[r.NOSCRIPT]:!0,[r.OBJECT]:!0,[r.OL]:!0,[r.P]:!0,[r.PARAM]:!0,[r.PLAINTEXT]:!0,[r.PRE]:!0,[r.SCRIPT]:!0,[r.SECTION]:!0,[r.SELECT]:!0,[r.SOURCE]:!0,[r.STYLE]:!0,[r.SUMMARY]:!0,[r.TABLE]:!0,[r.TBODY]:!0,[r.TD]:!0,[r.TEMPLATE]:!0,[r.TEXTAREA]:!0,[r.TFOOT]:!0,[r.TH]:!0,[r.THEAD]:!0,[r.TITLE]:!0,[r.TR]:!0,[r.TRACK]:!0,[r.UL]:!0,[r.WBR]:!0,[r.XMP]:!0},[n.MATHML]:{[r.MI]:!0,[r.MO]:!0,[r.MN]:!0,[r.MS]:!0,[r.MTEXT]:!0,[r.ANNOTATION_XML]:!0},[n.SVG]:{[r.TITLE]:!0,[r.FOREIGN_OBJECT]:!0,[r.DESC]:!0}}},4284:(e,t)=>{"use strict";const n=[65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];t.REPLACEMENT_CHARACTER="�",t.CODE_POINTS={EOF:-1,NULL:0,TABULATION:9,CARRIAGE_RETURN:13,LINE_FEED:10,FORM_FEED:12,SPACE:32,EXCLAMATION_MARK:33,QUOTATION_MARK:34,NUMBER_SIGN:35,AMPERSAND:38,APOSTROPHE:39,HYPHEN_MINUS:45,SOLIDUS:47,DIGIT_0:48,DIGIT_9:57,SEMICOLON:59,LESS_THAN_SIGN:60,EQUALS_SIGN:61,GREATER_THAN_SIGN:62,QUESTION_MARK:63,LATIN_CAPITAL_A:65,LATIN_CAPITAL_F:70,LATIN_CAPITAL_X:88,LATIN_CAPITAL_Z:90,RIGHT_SQUARE_BRACKET:93,GRAVE_ACCENT:96,LATIN_SMALL_A:97,LATIN_SMALL_F:102,LATIN_SMALL_X:120,LATIN_SMALL_Z:122,REPLACEMENT_CHARACTER:65533},t.CODE_POINT_SEQUENCES={DASH_DASH_STRING:[45,45],DOCTYPE_STRING:[68,79,67,84,89,80,69],CDATA_START_STRING:[91,67,68,65,84,65,91],SCRIPT_STRING:[115,99,114,105,112,116],PUBLIC_STRING:[80,85,66,76,73,67],SYSTEM_STRING:[83,89,83,84,69,77]},t.isSurrogate=function(e){return e>=55296&&e<=57343},t.isSurrogatePair=function(e){return e>=56320&&e<=57343},t.getSurrogatePairCodePoint=function(e,t){return 1024*(e-55296)+9216+t},t.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},t.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||n.indexOf(e)>-1}},3843:(e,t,n)=>{"use strict";const r=n(1704);e.exports=class extends r{constructor(e,t){super(e),this.posTracker=null,this.onParseError=t.onParseError}_setErrorLocation(e){e.startLine=e.endLine=this.posTracker.line,e.startCol=e.endCol=this.posTracker.col,e.startOffset=e.endOffset=this.posTracker.offset}_reportError(e){const t={code:e,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(t),this.onParseError(t)}_getOverriddenMethods(e){return{_err(t){e._reportError(t)}}}}},2232:(e,t,n)=>{"use strict";const r=n(3843),i=n(50),s=n(6110),o=n(1704);e.exports=class extends r{constructor(e,t){super(e,t),this.opts=t,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(e){this.ctLoc&&(e.startLine=this.ctLoc.startLine,e.startCol=this.ctLoc.startCol,e.startOffset=this.ctLoc.startOffset,e.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,e.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,e.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset)}_getOverriddenMethods(e,t){return{_bootstrap(n,r){t._bootstrap.call(this,n,r),o.install(this.tokenizer,i,e.opts),o.install(this.tokenizer,s)},_processInputToken(n){e.ctLoc=n.location,t._processInputToken.call(this,n)},_err(t,n){e.locBeforeToken=n&&n.beforeToken,e._reportError(t)}}}}},3288:(e,t,n)=>{"use strict";const r=n(3843),i=n(7930),s=n(1704);e.exports=class extends r{constructor(e,t){super(e,t),this.posTracker=s.install(e,i),this.lastErrOffset=-1}_reportError(e){this.lastErrOffset!==this.posTracker.offset&&(this.lastErrOffset=this.posTracker.offset,super._reportError(e))}}},50:(e,t,n)=>{"use strict";const r=n(3843),i=n(3288),s=n(1704);e.exports=class extends r{constructor(e,t){super(e,t);const n=s.install(e.preprocessor,i,t);this.posTracker=n.posTracker}}},1077:(e,t,n)=>{"use strict";const r=n(1704);e.exports=class extends r{constructor(e,t){super(e),this.onItemPop=t.onItemPop}_getOverriddenMethods(e,t){return{pop(){e.onItemPop(this.current),t.pop.call(this)},popAllUpToHtmlElement(){for(let t=this.stackTop;t>0;t--)e.onItemPop(this.items[t]);t.popAllUpToHtmlElement.call(this)},remove(n){e.onItemPop(this.current),t.remove.call(this,n)}}}}},452:(e,t,n)=>{"use strict";const r=n(1704),i=n(5763),s=n(6110),o=n(1077),a=n(6152).TAG_NAMES;e.exports=class extends r{constructor(e){super(e),this.parser=e,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(e){let t=null;this.lastStartTagToken&&(t=Object.assign({},this.lastStartTagToken.location),t.startTag=this.lastStartTagToken.location),this.treeAdapter.setNodeSourceCodeLocation(e,t)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,r=this.treeAdapter.getTagName(e),s={};t.type===i.END_TAG_TOKEN&&r===t.tagName?(s.endTag=Object.assign({},n),s.endLine=n.endLine,s.endCol=n.endCol,s.endOffset=n.endOffset):(s.endLine=n.startLine,s.endCol=n.startCol,s.endOffset=n.startOffset),this.treeAdapter.updateNodeSourceCodeLocation(e,s)}}_getOverriddenMethods(e,t){return{_bootstrap(n,i){t._bootstrap.call(this,n,i),e.lastStartTagToken=null,e.lastFosterParentingLocation=null,e.currentToken=null;const a=r.install(this.tokenizer,s);e.posTracker=a.posTracker,r.install(this.openElements,o,{onItemPop:function(t){e._setEndLocation(t,e.currentToken)}})},_runParsingLoop(n){t._runParsingLoop.call(this,n);for(let t=this.openElements.stackTop;t>=0;t--)e._setEndLocation(this.openElements.items[t],e.currentToken)},_processTokenInForeignContent(n){e.currentToken=n,t._processTokenInForeignContent.call(this,n)},_processToken(n){if(e.currentToken=n,t._processToken.call(this,n),n.type===i.END_TAG_TOKEN&&(n.tagName===a.HTML||n.tagName===a.BODY&&this.openElements.hasInScope(a.BODY)))for(let t=this.openElements.stackTop;t>=0;t--){const r=this.openElements.items[t];if(this.treeAdapter.getTagName(r)===n.tagName){e._setEndLocation(r,n);break}}},_setDocumentType(e){t._setDocumentType.call(this,e);const n=this.treeAdapter.getChildNodes(this.document),r=n.length;for(let t=0;t<r;t++){const r=n[t];if(this.treeAdapter.isDocumentTypeNode(r)){this.treeAdapter.setNodeSourceCodeLocation(r,e.location);break}}},_attachElementToTree(n){e._setStartLocation(n),e.lastStartTagToken=null,t._attachElementToTree.call(this,n)},_appendElement(n,r){e.lastStartTagToken=n,t._appendElement.call(this,n,r)},_insertElement(n,r){e.lastStartTagToken=n,t._insertElement.call(this,n,r)},_insertTemplate(n){e.lastStartTagToken=n,t._insertTemplate.call(this,n);const r=this.treeAdapter.getTemplateContent(this.openElements.current);this.treeAdapter.setNodeSourceCodeLocation(r,null)},_insertFakeRootElement(){t._insertFakeRootElement.call(this),this.treeAdapter.setNodeSourceCodeLocation(this.openElements.current,null)},_appendCommentNode(e,n){t._appendCommentNode.call(this,e,n);const r=this.treeAdapter.getChildNodes(n),i=r[r.length-1];this.treeAdapter.setNodeSourceCodeLocation(i,e.location)},_findFosterParentingLocation(){return e.lastFosterParentingLocation=t._findFosterParentingLocation.call(this),e.lastFosterParentingLocation},_insertCharacters(n){t._insertCharacters.call(this,n);const r=this._shouldFosterParentOnInsertion(),i=r&&e.lastFosterParentingLocation.parent||this.openElements.currentTmplContent||this.openElements.current,s=this.treeAdapter.getChildNodes(i),o=r&&e.lastFosterParentingLocation.beforeElement?s.indexOf(e.lastFosterParentingLocation.beforeElement)-1:s.length-1,a=s[o];if(this.treeAdapter.getNodeSourceCodeLocation(a)){const{endLine:e,endCol:t,endOffset:r}=n.location;this.treeAdapter.updateNodeSourceCodeLocation(a,{endLine:e,endCol:t,endOffset:r})}else this.treeAdapter.setNodeSourceCodeLocation(a,n.location)}}}}},6110:(e,t,n)=>{"use strict";const r=n(1704),i=n(5763),s=n(7930);e.exports=class extends r{constructor(e){super(e),this.tokenizer=e,this.posTracker=r.install(e.preprocessor,s),this.currentAttrLocation=null,this.ctLoc=null}_getCurrentLocation(){return{startLine:this.posTracker.line,startCol:this.posTracker.col,startOffset:this.posTracker.offset,endLine:-1,endCol:-1,endOffset:-1}}_attachCurrentAttrLocationInfo(){this.currentAttrLocation.endLine=this.posTracker.line,this.currentAttrLocation.endCol=this.posTracker.col,this.currentAttrLocation.endOffset=this.posTracker.offset;const e=this.tokenizer.currentToken,t=this.tokenizer.currentAttr;e.location.attrs||(e.location.attrs=Object.create(null)),e.location.attrs[t.name]=this.currentAttrLocation}_getOverriddenMethods(e,t){const n={_createStartTagToken(){t._createStartTagToken.call(this),this.currentToken.location=e.ctLoc},_createEndTagToken(){t._createEndTagToken.call(this),this.currentToken.location=e.ctLoc},_createCommentToken(){t._createCommentToken.call(this),this.currentToken.location=e.ctLoc},_createDoctypeToken(n){t._createDoctypeToken.call(this,n),this.currentToken.location=e.ctLoc},_createCharacterToken(n,r){t._createCharacterToken.call(this,n,r),this.currentCharacterToken.location=e.ctLoc},_createEOFToken(){t._createEOFToken.call(this),this.currentToken.location=e._getCurrentLocation()},_createAttr(n){t._createAttr.call(this,n),e.currentAttrLocation=e._getCurrentLocation()},_leaveAttrName(n){t._leaveAttrName.call(this,n),e._attachCurrentAttrLocationInfo()},_leaveAttrValue(n){t._leaveAttrValue.call(this,n),e._attachCurrentAttrLocationInfo()},_emitCurrentToken(){const n=this.currentToken.location;this.currentCharacterToken&&(this.currentCharacterToken.location.endLine=n.startLine,this.currentCharacterToken.location.endCol=n.startCol,this.currentCharacterToken.location.endOffset=n.startOffset),this.currentToken.type===i.EOF_TOKEN?(n.endLine=n.startLine,n.endCol=n.startCol,n.endOffset=n.startOffset):(n.endLine=e.posTracker.line,n.endCol=e.posTracker.col+1,n.endOffset=e.posTracker.offset+1),t._emitCurrentToken.call(this)},_emitCurrentCharacterToken(){const n=this.currentCharacterToken&&this.currentCharacterToken.location;n&&-1===n.endOffset&&(n.endLine=e.posTracker.line,n.endCol=e.posTracker.col,n.endOffset=e.posTracker.offset),t._emitCurrentCharacterToken.call(this)}};return Object.keys(i.MODE).forEach((r=>{const s=i.MODE[r];n[s]=function(n){e.ctLoc=e._getCurrentLocation(),t[s].call(this,n)}})),n}}},7930:(e,t,n)=>{"use strict";const r=n(1704);e.exports=class extends r{constructor(e){super(e),this.preprocessor=e,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.offset=0,this.col=0,this.line=1}_getOverriddenMethods(e,t){return{advance(){const n=this.pos+1,r=this.html[n];return e.isEol&&(e.isEol=!1,e.line++,e.lineStartPos=n),("\n"===r||"\r"===r&&"\n"!==this.html[n+1])&&(e.isEol=!0),e.col=n-e.lineStartPos+1,e.offset=e.droppedBufferSize+n,t.advance.call(this)},retreat(){t.retreat.call(this),e.isEol=!1,e.col=this.pos-e.lineStartPos+1},dropParsedChunk(){const n=this.pos;t.dropParsedChunk.call(this);const r=n-this.pos;e.lineStartPos-=r,e.droppedBufferSize+=r,e.offset=e.droppedBufferSize+this.pos}}}}},2394:(e,t,n)=>{"use strict";const r=n(7045),i=n(3988);t.parse=function(e,t){return new r(t).parse(e)},t.parseFragment=function(e,t,n){return"string"==typeof e&&(n=t,t=e,e=null),new r(n).parseFragment(t,e)},t.serialize=function(e,t){return new i(e,t).serialize()}},2484:e=>{"use strict";class t{constructor(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null}_getNoahArkConditionCandidates(e){const n=[];if(this.length>=3){const r=this.treeAdapter.getAttrList(e).length,i=this.treeAdapter.getTagName(e),s=this.treeAdapter.getNamespaceURI(e);for(let e=this.length-1;e>=0;e--){const o=this.entries[e];if(o.type===t.MARKER_ENTRY)break;const a=o.element,c=this.treeAdapter.getAttrList(a);this.treeAdapter.getTagName(a)===i&&this.treeAdapter.getNamespaceURI(a)===s&&c.length===r&&n.push({idx:e,attrs:c})}}return n.length<3?[]:n}_ensureNoahArkCondition(e){const t=this._getNoahArkConditionCandidates(e);let n=t.length;if(n){const r=this.treeAdapter.getAttrList(e),i=r.length,s=Object.create(null);for(let e=0;e<i;e++){const t=r[e];s[t.name]=t.value}for(let e=0;e<i;e++)for(let r=0;r<n;r++){const i=t[r].attrs[e];if(s[i.name]!==i.value&&(t.splice(r,1),n--),t.length<3)return}for(let e=n-1;e>=2;e--)this.entries.splice(t[e].idx,1),this.length--}}insertMarker(){this.entries.push({type:t.MARKER_ENTRY}),this.length++}pushElement(e,n){this._ensureNoahArkCondition(e),this.entries.push({type:t.ELEMENT_ENTRY,element:e,token:n}),this.length++}insertElementAfterBookmark(e,n){let r=this.length-1;for(;r>=0&&this.entries[r]!==this.bookmark;r--);this.entries.splice(r+1,0,{type:t.ELEMENT_ENTRY,element:e,token:n}),this.length++}removeEntry(e){for(let t=this.length-1;t>=0;t--)if(this.entries[t]===e){this.entries.splice(t,1),this.length--;break}}clearToLastMarker(){for(;this.length;){const e=this.entries.pop();if(this.length--,e.type===t.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(e){for(let n=this.length-1;n>=0;n--){const r=this.entries[n];if(r.type===t.MARKER_ENTRY)return null;if(this.treeAdapter.getTagName(r.element)===e)return r}return null}getElementEntry(e){for(let n=this.length-1;n>=0;n--){const r=this.entries[n];if(r.type===t.ELEMENT_ENTRY&&r.element===e)return r}return null}}t.MARKER_ENTRY="MARKER_ENTRY",t.ELEMENT_ENTRY="ELEMENT_ENTRY",e.exports=t},7045:(e,t,n)=>{"use strict";const r=n(5763),i=n(6519),s=n(2484),o=n(452),a=n(2232),c=n(1704),l=n(7296),u=n(8904),h=n(1515),p=n(8779),d=n(1734),f=n(4284),m=n(6152),T=m.TAG_NAMES,_=m.NAMESPACES,E=m.ATTRS,g={scriptingEnabled:!0,sourceCodeLocationInfo:!1,onParseError:null,treeAdapter:l},A="hidden",C="INITIAL_MODE",N="BEFORE_HTML_MODE",O="BEFORE_HEAD_MODE",v="IN_HEAD_MODE",b="IN_HEAD_NO_SCRIPT_MODE",S="AFTER_HEAD_MODE",y="IN_BODY_MODE",I="TEXT_MODE",k="IN_TABLE_MODE",R="IN_TABLE_TEXT_MODE",L="IN_CAPTION_MODE",M="IN_COLUMN_GROUP_MODE",x="IN_TABLE_BODY_MODE",P="IN_ROW_MODE",D="IN_CELL_MODE",w="IN_SELECT_MODE",H="IN_SELECT_IN_TABLE_MODE",F="IN_TEMPLATE_MODE",U="AFTER_BODY_MODE",B="IN_FRAMESET_MODE",G="AFTER_FRAMESET_MODE",j="AFTER_AFTER_BODY_MODE",q="AFTER_AFTER_FRAMESET_MODE",K={[T.TR]:P,[T.TBODY]:x,[T.THEAD]:x,[T.TFOOT]:x,[T.CAPTION]:L,[T.COLGROUP]:M,[T.TABLE]:k,[T.BODY]:y,[T.FRAMESET]:B},V={[T.CAPTION]:k,[T.COLGROUP]:k,[T.TBODY]:k,[T.TFOOT]:k,[T.THEAD]:k,[T.COL]:M,[T.TR]:x,[T.TD]:P,[T.TH]:P},Y={[C]:{[r.CHARACTER_TOKEN]:oe,[r.NULL_CHARACTER_TOKEN]:oe,[r.WHITESPACE_CHARACTER_TOKEN]:ee,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:function(e,t){e._setDocumentType(t);const n=t.forceQuirks?m.DOCUMENT_MODE.QUIRKS:h.getDocumentMode(t);h.isConforming(t)||e._err(d.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=N},[r.START_TAG_TOKEN]:oe,[r.END_TAG_TOKEN]:oe,[r.EOF_TOKEN]:oe},[N]:{[r.CHARACTER_TOKEN]:ae,[r.NULL_CHARACTER_TOKEN]:ae,[r.WHITESPACE_CHARACTER_TOKEN]:ee,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){t.tagName===T.HTML?(e._insertElement(t,_.HTML),e.insertionMode=O):ae(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n!==T.HTML&&n!==T.HEAD&&n!==T.BODY&&n!==T.BR||ae(e,t)},[r.EOF_TOKEN]:ae},[O]:{[r.CHARACTER_TOKEN]:ce,[r.NULL_CHARACTER_TOKEN]:ce,[r.WHITESPACE_CHARACTER_TOKEN]:ee,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:te,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.HEAD?(e._insertElement(t,_.HTML),e.headElement=e.openElements.current,e.insertionMode=v):ce(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HEAD||n===T.BODY||n===T.HTML||n===T.BR?ce(e,t):e._err(d.endTagWithoutMatchingOpenElement)},[r.EOF_TOKEN]:ce},[v]:{[r.CHARACTER_TOKEN]:he,[r.NULL_CHARACTER_TOKEN]:he,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:te,[r.START_TAG_TOKEN]:le,[r.END_TAG_TOKEN]:ue,[r.EOF_TOKEN]:he},[b]:{[r.CHARACTER_TOKEN]:pe,[r.NULL_CHARACTER_TOKEN]:pe,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:te,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.BASEFONT||n===T.BGSOUND||n===T.HEAD||n===T.LINK||n===T.META||n===T.NOFRAMES||n===T.STYLE?le(e,t):n===T.NOSCRIPT?e._err(d.nestedNoscriptInHead):pe(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.NOSCRIPT?(e.openElements.pop(),e.insertionMode=v):n===T.BR?pe(e,t):e._err(d.endTagWithoutMatchingOpenElement)},[r.EOF_TOKEN]:pe},[S]:{[r.CHARACTER_TOKEN]:de,[r.NULL_CHARACTER_TOKEN]:de,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:te,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.BODY?(e._insertElement(t,_.HTML),e.framesetOk=!1,e.insertionMode=y):n===T.FRAMESET?(e._insertElement(t,_.HTML),e.insertionMode=B):n===T.BASE||n===T.BASEFONT||n===T.BGSOUND||n===T.LINK||n===T.META||n===T.NOFRAMES||n===T.SCRIPT||n===T.STYLE||n===T.TEMPLATE||n===T.TITLE?(e._err(d.abandonedHeadElementChild),e.openElements.push(e.headElement),le(e,t),e.openElements.remove(e.headElement)):n===T.HEAD?e._err(d.misplacedStartTagForHeadElement):de(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.BODY||n===T.HTML||n===T.BR?de(e,t):n===T.TEMPLATE?ue(e,t):e._err(d.endTagWithoutMatchingOpenElement)},[r.EOF_TOKEN]:de},[y]:{[r.CHARACTER_TOKEN]:me,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:Se,[r.END_TAG_TOKEN]:Re,[r.EOF_TOKEN]:Le},[I]:{[r.CHARACTER_TOKEN]:ie,[r.NULL_CHARACTER_TOKEN]:ie,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ee,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:ee,[r.END_TAG_TOKEN]:function(e,t){t.tagName===T.SCRIPT&&(e.pendingScript=e.openElements.current),e.openElements.pop(),e.insertionMode=e.originalInsertionMode},[r.EOF_TOKEN]:function(e,t){e._err(d.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e._processToken(t)}},[k]:{[r.CHARACTER_TOKEN]:Me,[r.NULL_CHARACTER_TOKEN]:Me,[r.WHITESPACE_CHARACTER_TOKEN]:Me,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:xe,[r.END_TAG_TOKEN]:Pe,[r.EOF_TOKEN]:Le},[R]:{[r.CHARACTER_TOKEN]:function(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0},[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:function(e,t){e.pendingCharacterTokens.push(t)},[r.COMMENT_TOKEN]:we,[r.DOCTYPE_TOKEN]:we,[r.START_TAG_TOKEN]:we,[r.END_TAG_TOKEN]:we,[r.EOF_TOKEN]:we},[L]:{[r.CHARACTER_TOKEN]:me,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.CAPTION||n===T.COL||n===T.COLGROUP||n===T.TBODY||n===T.TD||n===T.TFOOT||n===T.TH||n===T.THEAD||n===T.TR?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=k,e._processToken(t)):Se(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.CAPTION||n===T.TABLE?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=k,n===T.TABLE&&e._processToken(t)):n!==T.BODY&&n!==T.COL&&n!==T.COLGROUP&&n!==T.HTML&&n!==T.TBODY&&n!==T.TD&&n!==T.TFOOT&&n!==T.TH&&n!==T.THEAD&&n!==T.TR&&Re(e,t)},[r.EOF_TOKEN]:Le},[M]:{[r.CHARACTER_TOKEN]:He,[r.NULL_CHARACTER_TOKEN]:He,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.COL?(e._appendElement(t,_.HTML),t.ackSelfClosing=!0):n===T.TEMPLATE?le(e,t):He(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.COLGROUP?e.openElements.currentTagName===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=k):n===T.TEMPLATE?ue(e,t):n!==T.COL&&He(e,t)},[r.EOF_TOKEN]:Le},[x]:{[r.CHARACTER_TOKEN]:Me,[r.NULL_CHARACTER_TOKEN]:Me,[r.WHITESPACE_CHARACTER_TOKEN]:Me,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.TR?(e.openElements.clearBackToTableBodyContext(),e._insertElement(t,_.HTML),e.insertionMode=P):n===T.TH||n===T.TD?(e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(T.TR),e.insertionMode=P,e._processToken(t)):n===T.CAPTION||n===T.COL||n===T.COLGROUP||n===T.TBODY||n===T.TFOOT||n===T.THEAD?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=k,e._processToken(t)):xe(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.TBODY||n===T.TFOOT||n===T.THEAD?e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=k):n===T.TABLE?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=k,e._processToken(t)):(n!==T.BODY&&n!==T.CAPTION&&n!==T.COL&&n!==T.COLGROUP||n!==T.HTML&&n!==T.TD&&n!==T.TH&&n!==T.TR)&&Pe(e,t)},[r.EOF_TOKEN]:Le},[P]:{[r.CHARACTER_TOKEN]:Me,[r.NULL_CHARACTER_TOKEN]:Me,[r.WHITESPACE_CHARACTER_TOKEN]:Me,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.TH||n===T.TD?(e.openElements.clearBackToTableRowContext(),e._insertElement(t,_.HTML),e.insertionMode=D,e.activeFormattingElements.insertMarker()):n===T.CAPTION||n===T.COL||n===T.COLGROUP||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR?e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=x,e._processToken(t)):xe(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.TR?e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=x):n===T.TABLE?e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=x,e._processToken(t)):n===T.TBODY||n===T.TFOOT||n===T.THEAD?(e.openElements.hasInTableScope(n)||e.openElements.hasInTableScope(T.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=x,e._processToken(t)):(n!==T.BODY&&n!==T.CAPTION&&n!==T.COL&&n!==T.COLGROUP||n!==T.HTML&&n!==T.TD&&n!==T.TH)&&Pe(e,t)},[r.EOF_TOKEN]:Le},[D]:{[r.CHARACTER_TOKEN]:me,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.CAPTION||n===T.COL||n===T.COLGROUP||n===T.TBODY||n===T.TD||n===T.TFOOT||n===T.TH||n===T.THEAD||n===T.TR?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),e._processToken(t)):Se(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.TD||n===T.TH?e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=P):n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR?e.openElements.hasInTableScope(n)&&(e._closeTableCell(),e._processToken(t)):n!==T.BODY&&n!==T.CAPTION&&n!==T.COL&&n!==T.COLGROUP&&n!==T.HTML&&Re(e,t)},[r.EOF_TOKEN]:Le},[w]:{[r.CHARACTER_TOKEN]:ie,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:Fe,[r.END_TAG_TOKEN]:Ue,[r.EOF_TOKEN]:Le},[H]:{[r.CHARACTER_TOKEN]:ie,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processToken(t)):Fe(e,t)},[r.END_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processToken(t)):Ue(e,t)},[r.EOF_TOKEN]:Le},[F]:{[r.CHARACTER_TOKEN]:me,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;if(n===T.BASE||n===T.BASEFONT||n===T.BGSOUND||n===T.LINK||n===T.META||n===T.NOFRAMES||n===T.SCRIPT||n===T.STYLE||n===T.TEMPLATE||n===T.TITLE)le(e,t);else{const r=V[n]||y;e._popTmplInsertionMode(),e._pushTmplInsertionMode(r),e.insertionMode=r,e._processToken(t)}},[r.END_TAG_TOKEN]:function(e,t){t.tagName===T.TEMPLATE&&ue(e,t)},[r.EOF_TOKEN]:Be},[U]:{[r.CHARACTER_TOKEN]:Ge,[r.NULL_CHARACTER_TOKEN]:Ge,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:function(e,t){e._appendCommentNode(t,e.openElements.items[0])},[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){t.tagName===T.HTML?Se(e,t):Ge(e,t)},[r.END_TAG_TOKEN]:function(e,t){t.tagName===T.HTML?e.fragmentContext||(e.insertionMode=j):Ge(e,t)},[r.EOF_TOKEN]:se},[B]:{[r.CHARACTER_TOKEN]:ee,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.FRAMESET?e._insertElement(t,_.HTML):n===T.FRAME?(e._appendElement(t,_.HTML),t.ackSelfClosing=!0):n===T.NOFRAMES&&le(e,t)},[r.END_TAG_TOKEN]:function(e,t){t.tagName!==T.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagName===T.FRAMESET||(e.insertionMode=G))},[r.EOF_TOKEN]:se},[G]:{[r.CHARACTER_TOKEN]:ee,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:ie,[r.COMMENT_TOKEN]:ne,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.NOFRAMES&&le(e,t)},[r.END_TAG_TOKEN]:function(e,t){t.tagName===T.HTML&&(e.insertionMode=q)},[r.EOF_TOKEN]:se},[j]:{[r.CHARACTER_TOKEN]:je,[r.NULL_CHARACTER_TOKEN]:je,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:re,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){t.tagName===T.HTML?Se(e,t):je(e,t)},[r.END_TAG_TOKEN]:je,[r.EOF_TOKEN]:se},[q]:{[r.CHARACTER_TOKEN]:ee,[r.NULL_CHARACTER_TOKEN]:ee,[r.WHITESPACE_CHARACTER_TOKEN]:fe,[r.COMMENT_TOKEN]:re,[r.DOCTYPE_TOKEN]:ee,[r.START_TAG_TOKEN]:function(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.NOFRAMES&&le(e,t)},[r.END_TAG_TOKEN]:ee,[r.EOF_TOKEN]:se}};function W(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagName)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):ke(e,t),n}function Q(e,t){let n=null;for(let r=e.openElements.stackTop;r>=0;r--){const i=e.openElements.items[r];if(i===t.element)break;e._isSpecialElement(i)&&(n=i)}return n||(e.openElements.popUntilElementPopped(t.element),e.activeFormattingElements.removeEntry(t)),n}function z(e,t,n){let r=t,i=e.openElements.getCommonAncestor(t);for(let s=0,o=i;o!==n;s++,o=i){i=e.openElements.getCommonAncestor(o);const n=e.activeFormattingElements.getElementEntry(o),a=n&&s>=3;!n||a?(a&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(o)):(o=$(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(o,r),r=o)}return r}function $(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function X(e,t,n){if(e._isElementCausesFosterParenting(t))e._fosterParentElement(n);else{const r=e.treeAdapter.getTagName(t),i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===_.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function J(e,t,n){const r=e.treeAdapter.getNamespaceURI(n.element),i=n.token,s=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,s),e.treeAdapter.appendChild(t,s),e.activeFormattingElements.insertElementAfterBookmark(s,n.token),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,s)}function Z(e,t){let n;for(let r=0;r<8&&(n=W(e,t),n);r++){const t=Q(e,n);if(!t)break;e.activeFormattingElements.bookmark=n;const r=z(e,t,n.element),i=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(r),X(e,i,r),J(e,t,n)}}function ee(){}function te(e){e._err(d.misplacedDoctype)}function ne(e,t){e._appendCommentNode(t,e.openElements.currentTmplContent||e.openElements.current)}function re(e,t){e._appendCommentNode(t,e.document)}function ie(e,t){e._insertCharacters(t)}function se(e){e.stopped=!0}function oe(e,t){e._err(d.missingDoctype,{beforeToken:!0}),e.treeAdapter.setDocumentMode(e.document,m.DOCUMENT_MODE.QUIRKS),e.insertionMode=N,e._processToken(t)}function ae(e,t){e._insertFakeRootElement(),e.insertionMode=O,e._processToken(t)}function ce(e,t){e._insertFakeElement(T.HEAD),e.headElement=e.openElements.current,e.insertionMode=v,e._processToken(t)}function le(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.BASE||n===T.BASEFONT||n===T.BGSOUND||n===T.LINK||n===T.META?(e._appendElement(t,_.HTML),t.ackSelfClosing=!0):n===T.TITLE?e._switchToTextParsing(t,r.MODE.RCDATA):n===T.NOSCRIPT?e.options.scriptingEnabled?e._switchToTextParsing(t,r.MODE.RAWTEXT):(e._insertElement(t,_.HTML),e.insertionMode=b):n===T.NOFRAMES||n===T.STYLE?e._switchToTextParsing(t,r.MODE.RAWTEXT):n===T.SCRIPT?e._switchToTextParsing(t,r.MODE.SCRIPT_DATA):n===T.TEMPLATE?(e._insertTemplate(t,_.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=F,e._pushTmplInsertionMode(F)):n===T.HEAD?e._err(d.misplacedStartTagForHeadElement):he(e,t)}function ue(e,t){const n=t.tagName;n===T.HEAD?(e.openElements.pop(),e.insertionMode=S):n===T.BODY||n===T.BR||n===T.HTML?he(e,t):n===T.TEMPLATE&&e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagName!==T.TEMPLATE&&e._err(d.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode()):e._err(d.endTagWithoutMatchingOpenElement)}function he(e,t){e.openElements.pop(),e.insertionMode=S,e._processToken(t)}function pe(e,t){const n=t.type===r.EOF_TOKEN?d.openElementsLeftAfterEof:d.disallowedContentInNoscriptInHead;e._err(n),e.openElements.pop(),e.insertionMode=v,e._processToken(t)}function de(e,t){e._insertFakeElement(T.BODY),e.insertionMode=y,e._processToken(t)}function fe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function me(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function Te(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML)}function _e(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function Ee(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function ge(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Ae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,_.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function Ce(e,t){e._appendElement(t,_.HTML),t.ackSelfClosing=!0}function Ne(e,t){e._switchToTextParsing(t,r.MODE.RAWTEXT)}function Oe(e,t){e.openElements.currentTagName===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML)}function ve(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,_.HTML)}function be(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML)}function Se(e,t){const n=t.tagName;switch(n.length){case 1:n===T.I||n===T.S||n===T.B||n===T.U?Ee(e,t):n===T.P?Te(e,t):n===T.A?function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(T.A);n&&(Z(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):be(e,t);break;case 2:n===T.DL||n===T.OL||n===T.UL?Te(e,t):n===T.H1||n===T.H2||n===T.H3||n===T.H4||n===T.H5||n===T.H6?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement();const n=e.openElements.currentTagName;n!==T.H1&&n!==T.H2&&n!==T.H3&&n!==T.H4&&n!==T.H5&&n!==T.H6||e.openElements.pop(),e._insertElement(t,_.HTML)}(e,t):n===T.LI||n===T.DD||n===T.DT?function(e,t){e.framesetOk=!1;const n=t.tagName;for(let t=e.openElements.stackTop;t>=0;t--){const r=e.openElements.items[t],i=e.treeAdapter.getTagName(r);let s=null;if(n===T.LI&&i===T.LI?s=T.LI:n!==T.DD&&n!==T.DT||i!==T.DD&&i!==T.DT||(s=i),s){e.openElements.generateImpliedEndTagsWithExclusion(s),e.openElements.popUntilTagNamePopped(s);break}if(i!==T.ADDRESS&&i!==T.DIV&&i!==T.P&&e._isSpecialElement(r))break}e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML)}(e,t):n===T.EM||n===T.TT?Ee(e,t):n===T.BR?Ae(e,t):n===T.HR?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,_.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t):n===T.RB?ve(e,t):n===T.RT||n===T.RP?function(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,_.HTML)}(e,t):n!==T.TH&&n!==T.TD&&n!==T.TR&&be(e,t);break;case 3:n===T.DIV||n===T.DIR||n===T.NAV?Te(e,t):n===T.PRE?_e(e,t):n===T.BIG?Ee(e,t):n===T.IMG||n===T.WBR?Ae(e,t):n===T.XMP?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,r.MODE.RAWTEXT)}(e,t):n===T.SVG?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenSVGAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,_.SVG):e._insertElement(t,_.SVG),t.ackSelfClosing=!0}(e,t):n===T.RTC?ve(e,t):n!==T.COL&&be(e,t);break;case 4:n===T.HTML?function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t):n===T.BASE||n===T.LINK||n===T.META?le(e,t):n===T.BODY?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t):n===T.MAIN||n===T.MENU?Te(e,t):n===T.FORM?function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML),n||(e.formElement=e.openElements.current))}(e,t):n===T.CODE||n===T.FONT?Ee(e,t):n===T.NOBR?function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(Z(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,_.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t):n===T.AREA?Ae(e,t):n===T.MATH?function(e,t){e._reconstructActiveFormattingElements(),p.adjustTokenMathMLAttrs(t),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,_.MATHML):e._insertElement(t,_.MATHML),t.ackSelfClosing=!0}(e,t):n===T.MENU?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML)}(e,t):n!==T.HEAD&&be(e,t);break;case 5:n===T.STYLE||n===T.TITLE?le(e,t):n===T.ASIDE?Te(e,t):n===T.SMALL?Ee(e,t):n===T.TABLE?function(e,t){e.treeAdapter.getDocumentMode(e.document)!==m.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML),e.framesetOk=!1,e.insertionMode=k}(e,t):n===T.EMBED?Ae(e,t):n===T.INPUT?function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,_.HTML);const n=r.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t):n===T.PARAM||n===T.TRACK?Ce(e,t):n===T.IMAGE?function(e,t){t.tagName=T.IMG,Ae(e,t)}(e,t):n!==T.FRAME&&n!==T.TBODY&&n!==T.TFOOT&&n!==T.THEAD&&be(e,t);break;case 6:n===T.SCRIPT?le(e,t):n===T.CENTER||n===T.FIGURE||n===T.FOOTER||n===T.HEADER||n===T.HGROUP||n===T.DIALOG?Te(e,t):n===T.BUTTON?function(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML),e.framesetOk=!1}(e,t):n===T.STRIKE||n===T.STRONG?Ee(e,t):n===T.APPLET||n===T.OBJECT?ge(e,t):n===T.KEYGEN?Ae(e,t):n===T.SOURCE?Ce(e,t):n===T.IFRAME?function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,r.MODE.RAWTEXT)}(e,t):n===T.SELECT?function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,_.HTML),e.framesetOk=!1,e.insertionMode===k||e.insertionMode===L||e.insertionMode===x||e.insertionMode===P||e.insertionMode===D?e.insertionMode=H:e.insertionMode=w}(e,t):n===T.OPTION?Oe(e,t):be(e,t);break;case 7:n===T.BGSOUND?le(e,t):n===T.DETAILS||n===T.ADDRESS||n===T.ARTICLE||n===T.SECTION||n===T.SUMMARY?Te(e,t):n===T.LISTING?_e(e,t):n===T.MARQUEE?ge(e,t):n===T.NOEMBED?Ne(e,t):n!==T.CAPTION&&be(e,t);break;case 8:n===T.BASEFONT?le(e,t):n===T.FRAMESET?function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,_.HTML),e.insertionMode=B)}(e,t):n===T.FIELDSET?Te(e,t):n===T.TEXTAREA?function(e,t){e._insertElement(t,_.HTML),e.skipNextNewLine=!0,e.tokenizer.state=r.MODE.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=I}(e,t):n===T.TEMPLATE?le(e,t):n===T.NOSCRIPT?e.options.scriptingEnabled?Ne(e,t):be(e,t):n===T.OPTGROUP?Oe(e,t):n!==T.COLGROUP&&be(e,t);break;case 9:n===T.PLAINTEXT?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,_.HTML),e.tokenizer.state=r.MODE.PLAINTEXT}(e,t):be(e,t);break;case 10:n===T.BLOCKQUOTE||n===T.FIGCAPTION?Te(e,t):be(e,t);break;default:be(e,t)}}function ye(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function Ie(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function ke(e,t){const n=t.tagName;for(let t=e.openElements.stackTop;t>0;t--){const r=e.openElements.items[t];if(e.treeAdapter.getTagName(r)===n){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilElementPopped(r);break}if(e._isSpecialElement(r))break}}function Re(e,t){const n=t.tagName;switch(n.length){case 1:n===T.A||n===T.B||n===T.I||n===T.S||n===T.U?Z(e,t):n===T.P?function(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(T.P),e._closePElement()}(e):ke(e,t);break;case 2:n===T.DL||n===T.UL||n===T.OL?ye(e,t):n===T.LI?function(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI))}(e):n===T.DD||n===T.DT?function(e,t){const n=t.tagName;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t):n===T.H1||n===T.H2||n===T.H3||n===T.H4||n===T.H5||n===T.H6?function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e):n===T.BR?function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(T.BR),e.openElements.pop(),e.framesetOk=!1}(e):n===T.EM||n===T.TT?Z(e,t):ke(e,t);break;case 3:n===T.BIG?Z(e,t):n===T.DIR||n===T.DIV||n===T.NAV||n===T.PRE?ye(e,t):ke(e,t);break;case 4:n===T.BODY?function(e){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=U)}(e):n===T.HTML?function(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=U,e._processToken(t))}(e,t):n===T.FORM?function(e){const t=e.openElements.tmplCount>0,n=e.formElement;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(T.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(T.FORM):e.openElements.remove(n))}(e):n===T.CODE||n===T.FONT||n===T.NOBR?Z(e,t):n===T.MAIN||n===T.MENU?ye(e,t):ke(e,t);break;case 5:n===T.ASIDE?ye(e,t):n===T.SMALL?Z(e,t):ke(e,t);break;case 6:n===T.CENTER||n===T.FIGURE||n===T.FOOTER||n===T.HEADER||n===T.HGROUP||n===T.DIALOG?ye(e,t):n===T.APPLET||n===T.OBJECT?Ie(e,t):n===T.STRIKE||n===T.STRONG?Z(e,t):ke(e,t);break;case 7:n===T.ADDRESS||n===T.ARTICLE||n===T.DETAILS||n===T.SECTION||n===T.SUMMARY||n===T.LISTING?ye(e,t):n===T.MARQUEE?Ie(e,t):ke(e,t);break;case 8:n===T.FIELDSET?ye(e,t):n===T.TEMPLATE?ue(e,t):ke(e,t);break;case 10:n===T.BLOCKQUOTE||n===T.FIGCAPTION?ye(e,t):ke(e,t);break;default:ke(e,t)}}function Le(e,t){e.tmplInsertionModeStackTop>-1?Be(e,t):e.stopped=!0}function Me(e,t){const n=e.openElements.currentTagName;n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=R,e._processToken(t)):De(e,t)}function xe(e,t){const n=t.tagName;switch(n.length){case 2:n===T.TD||n===T.TH||n===T.TR?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(T.TBODY),e.insertionMode=x,e._processToken(t)}(e,t):De(e,t);break;case 3:n===T.COL?function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(T.COLGROUP),e.insertionMode=M,e._processToken(t)}(e,t):De(e,t);break;case 4:n===T.FORM?function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,_.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t):De(e,t);break;case 5:n===T.TABLE?function(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processToken(t))}(e,t):n===T.STYLE?le(e,t):n===T.TBODY||n===T.TFOOT||n===T.THEAD?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,_.HTML),e.insertionMode=x}(e,t):n===T.INPUT?function(e,t){const n=r.getTokenAttr(t,E.TYPE);n&&n.toLowerCase()===A?e._appendElement(t,_.HTML):De(e,t),t.ackSelfClosing=!0}(e,t):De(e,t);break;case 6:n===T.SCRIPT?le(e,t):De(e,t);break;case 7:n===T.CAPTION?function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,_.HTML),e.insertionMode=L}(e,t):De(e,t);break;case 8:n===T.COLGROUP?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,_.HTML),e.insertionMode=M}(e,t):n===T.TEMPLATE?le(e,t):De(e,t);break;default:De(e,t)}}function Pe(e,t){const n=t.tagName;n===T.TABLE?e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode()):n===T.TEMPLATE?ue(e,t):n!==T.BODY&&n!==T.CAPTION&&n!==T.COL&&n!==T.COLGROUP&&n!==T.HTML&&n!==T.TBODY&&n!==T.TD&&n!==T.TFOOT&&n!==T.TH&&n!==T.THEAD&&n!==T.TR&&De(e,t)}function De(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(t),e.fosterParentingEnabled=n}function we(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)De(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t)}function He(e,t){e.openElements.currentTagName===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=k,e._processToken(t))}function Fe(e,t){const n=t.tagName;n===T.HTML?Se(e,t):n===T.OPTION?(e.openElements.currentTagName===T.OPTION&&e.openElements.pop(),e._insertElement(t,_.HTML)):n===T.OPTGROUP?(e.openElements.currentTagName===T.OPTION&&e.openElements.pop(),e.openElements.currentTagName===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,_.HTML)):n===T.INPUT||n===T.KEYGEN||n===T.TEXTAREA||n===T.SELECT?e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),n!==T.SELECT&&e._processToken(t)):n!==T.SCRIPT&&n!==T.TEMPLATE||le(e,t)}function Ue(e,t){const n=t.tagName;if(n===T.OPTGROUP){const t=e.openElements.items[e.openElements.stackTop-1],n=t&&e.treeAdapter.getTagName(t);e.openElements.currentTagName===T.OPTION&&n===T.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagName===T.OPTGROUP&&e.openElements.pop()}else n===T.OPTION?e.openElements.currentTagName===T.OPTION&&e.openElements.pop():n===T.SELECT&&e.openElements.hasInSelectScope(T.SELECT)?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode()):n===T.TEMPLATE&&ue(e,t)}function Be(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(t)):e.stopped=!0}function Ge(e,t){e.insertionMode=y,e._processToken(t)}function je(e,t){e.insertionMode=y,e._processToken(t)}e.exports=class{constructor(e){this.options=u(g,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo&&c.install(this,o),this.options.onParseError&&c.install(this,a,{onParseError:this.options.onParseError})}parse(e){const t=this.treeAdapter.createDocument();return this._bootstrap(t,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),t}parseFragment(e,t){t||(t=this.treeAdapter.createElement(T.TEMPLATE,_.HTML,[]));const n=this.treeAdapter.createElement("documentmock",_.HTML,[]);this._bootstrap(n,t),this.treeAdapter.getTagName(t)===T.TEMPLATE&&this._pushTmplInsertionMode(F),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);const r=this.treeAdapter.getFirstChild(n),i=this.treeAdapter.createDocumentFragment();return this._adoptNodes(r,i),i}_bootstrap(e,t){this.tokenizer=new r(this.options),this.stopped=!1,this.insertionMode=C,this.originalInsertionMode="",this.document=e,this.fragmentContext=t,this.headElement=null,this.formElement=null,this.openElements=new i(this.document,this.treeAdapter),this.activeFormattingElements=new s(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();const t=this.tokenizer.getNextToken();if(t.type===r.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.type===r.WHITESPACE_CHARACTER_TOKEN&&"\n"===t.chars[0])){if(1===t.chars.length)continue;t.chars=t.chars.substr(1)}if(this._processInputToken(t),e&&this.pendingScript)break}}runParsingLoopForCurrentChunk(e,t){if(this._runParsingLoop(t),t&&this.pendingScript){const e=this.pendingScript;return this.pendingScript=null,void t(e)}e&&e()}_setupTokenizerCDATAMode(){const e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==_.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,t){this._insertElement(e,_.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=I}switchToPlaintextParsing(){this.insertionMode=I,this.originalInsertionMode=y,this.tokenizer.state=r.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===T.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}while(e)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===_.HTML){const e=this.treeAdapter.getTagName(this.fragmentContext);e===T.TITLE||e===T.TEXTAREA?this.tokenizer.state=r.MODE.RCDATA:e===T.STYLE||e===T.XMP||e===T.IFRAME||e===T.NOEMBED||e===T.NOFRAMES||e===T.NOSCRIPT?this.tokenizer.state=r.MODE.RAWTEXT:e===T.SCRIPT?this.tokenizer.state=r.MODE.SCRIPT_DATA:e===T.PLAINTEXT&&(this.tokenizer.state=r.MODE.PLAINTEXT)}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",r=e.systemId||"";this.treeAdapter.setDocumentType(this.document,t,n,r)}_attachElementToTree(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n),this.openElements.push(n)}_insertFakeElement(e){const t=this.treeAdapter.createElement(e,_.HTML,[]);this._attachElementToTree(t),this.openElements.push(t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,_.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t),this.openElements.push(t)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(T.HTML,_.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n)}_insertCharacters(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{const t=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(t,e.chars)}}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_shouldProcessTokenInForeignContent(e){const t=this._getAdjustedCurrentElement();if(!t||t===this.document)return!1;const n=this.treeAdapter.getNamespaceURI(t);if(n===_.HTML)return!1;if(this.treeAdapter.getTagName(t)===T.ANNOTATION_XML&&n===_.MATHML&&e.type===r.START_TAG_TOKEN&&e.tagName===T.SVG)return!1;const i=e.type===r.CHARACTER_TOKEN||e.type===r.NULL_CHARACTER_TOKEN||e.type===r.WHITESPACE_CHARACTER_TOKEN;return!((e.type===r.START_TAG_TOKEN&&e.tagName!==T.MGLYPH&&e.tagName!==T.MALIGNMARK||i)&&this._isIntegrationPoint(t,_.MATHML)||(e.type===r.START_TAG_TOKEN||i)&&this._isIntegrationPoint(t,_.HTML)||e.type===r.EOF_TOKEN)}_processToken(e){Y[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){Y.IN_BODY_MODE[e.type](this,e)}_processTokenInForeignContent(e){e.type===r.CHARACTER_TOKEN?function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e):e.type===r.NULL_CHARACTER_TOKEN?function(e,t){t.chars=f.REPLACEMENT_CHARACTER,e._insertCharacters(t)}(this,e):e.type===r.WHITESPACE_CHARACTER_TOKEN?ie(this,e):e.type===r.COMMENT_TOKEN?ne(this,e):e.type===r.START_TAG_TOKEN?function(e,t){if(p.causesExit(t)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==_.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t)}else{const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===_.MATHML?p.adjustTokenMathMLAttrs(t):r===_.SVG&&(p.adjustTokenSVGTagName(t),p.adjustTokenSVGAttrs(t)),p.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r),t.ackSelfClosing=!0}}(this,e):e.type===r.END_TAG_TOKEN&&function(e,t){for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===_.HTML){e._processToken(t);break}if(e.treeAdapter.getTagName(r).toLowerCase()===t.tagName){e.openElements.popUntilElementPopped(r);break}}}(this,e)}_processInputToken(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e),e.type===r.START_TAG_TOKEN&&e.selfClosing&&!e.ackSelfClosing&&this._err(d.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(e,t){const n=this.treeAdapter.getTagName(e),r=this.treeAdapter.getNamespaceURI(e),i=this.treeAdapter.getAttrList(e);return p.isIntegrationPoint(n,r,i,t)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.length;if(e){let t=e,n=null;do{if(t--,n=this.activeFormattingElements.entries[t],n.type===s.MARKER_ENTRY||this.openElements.contains(n.element)){t++;break}}while(t>0);for(let r=t;r<e;r++)n=this.activeFormattingElements.entries[r],this._insertElement(n.token,this.treeAdapter.getNamespaceURI(n.element)),n.element=this.openElements.current}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=P}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(T.P),this.openElements.popUntilTagNamePopped(T.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop,t=!1;e>=0;e--){let n=this.openElements.items[e];0===e&&(t=!0,this.fragmentContext&&(n=this.fragmentContext));const r=this.treeAdapter.getTagName(n),i=K[r];if(i){this.insertionMode=i;break}if(!(t||r!==T.TD&&r!==T.TH)){this.insertionMode=D;break}if(!t&&r===T.HEAD){this.insertionMode=v;break}if(r===T.SELECT){this._resetInsertionModeForSelect(e);break}if(r===T.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}if(r===T.HTML){this.insertionMode=this.headElement?S:O;break}if(t){this.insertionMode=y;break}}}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.items[t],n=this.treeAdapter.getTagName(e);if(n===T.TEMPLATE)break;if(n===T.TABLE)return void(this.insertionMode=H)}this.insertionMode=w}_pushTmplInsertionMode(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(e){const t=this.treeAdapter.getTagName(e);return t===T.TABLE||t===T.TBODY||t===T.TFOOT||t===T.THEAD||t===T.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){const e={parent:null,beforeElement:null};for(let t=this.openElements.stackTop;t>=0;t--){const n=this.openElements.items[t],r=this.treeAdapter.getTagName(n),i=this.treeAdapter.getNamespaceURI(n);if(r===T.TEMPLATE&&i===_.HTML){e.parent=this.treeAdapter.getTemplateContent(n);break}if(r===T.TABLE){e.parent=this.treeAdapter.getParentNode(n),e.parent?e.beforeElement=n:e.parent=this.openElements.items[t-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_fosterParentText(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertTextBefore(t.parent,e,t.beforeElement):this.treeAdapter.insertText(t.parent,e)}_isSpecialElement(e){const t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);return m.SPECIAL_ELEMENTS[n][t]}}},6519:(e,t,n)=>{"use strict";const r=n(6152),i=r.TAG_NAMES,s=r.NAMESPACES;function o(e){switch(e.length){case 1:return e===i.P;case 2:return e===i.RB||e===i.RP||e===i.RT||e===i.DD||e===i.DT||e===i.LI;case 3:return e===i.RTC;case 6:return e===i.OPTION;case 8:return e===i.OPTGROUP}return!1}function a(e){switch(e.length){case 1:return e===i.P;case 2:return e===i.RB||e===i.RP||e===i.RT||e===i.DD||e===i.DT||e===i.LI||e===i.TD||e===i.TH||e===i.TR;case 3:return e===i.RTC;case 5:return e===i.TBODY||e===i.TFOOT||e===i.THEAD;case 6:return e===i.OPTION;case 7:return e===i.CAPTION;case 8:return e===i.OPTGROUP||e===i.COLGROUP}return!1}function c(e,t){switch(e.length){case 2:if(e===i.TD||e===i.TH)return t===s.HTML;if(e===i.MI||e===i.MO||e===i.MN||e===i.MS)return t===s.MATHML;break;case 4:if(e===i.HTML)return t===s.HTML;if(e===i.DESC)return t===s.SVG;break;case 5:if(e===i.TABLE)return t===s.HTML;if(e===i.MTEXT)return t===s.MATHML;if(e===i.TITLE)return t===s.SVG;break;case 6:return(e===i.APPLET||e===i.OBJECT)&&t===s.HTML;case 7:return(e===i.CAPTION||e===i.MARQUEE)&&t===s.HTML;case 8:return e===i.TEMPLATE&&t===s.HTML;case 13:return e===i.FOREIGN_OBJECT&&t===s.SVG;case 14:return e===i.ANNOTATION_XML&&t===s.MATHML}return!1}e.exports=class{constructor(e,t){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=t}_indexOf(e){let t=-1;for(let n=this.stackTop;n>=0;n--)if(this.items[n]===e){t=n;break}return t}_isInTemplate(){return this.currentTagName===i.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===s.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++}pop(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement()}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&this._updateCurrentElement()}insertAfter(e,t){const n=this._indexOf(e)+1;this.items.splice(n,0,t),n===++this.stackTop&&this._updateCurrentElement()}popUntilTagNamePopped(e){for(;this.stackTop>-1;){const t=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),t===e&&n===s.HTML)break}}popUntilElementPopped(e){for(;this.stackTop>-1;){const t=this.current;if(this.pop(),t===e)break}}popUntilNumberedHeaderPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.H1||e===i.H2||e===i.H3||e===i.H4||e===i.H5||e===i.H6&&t===s.HTML)break}}popUntilTableCellPopped(){for(;this.stackTop>-1;){const e=this.currentTagName,t=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.TD||e===i.TH&&t===s.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){for(;this.currentTagName!==i.TABLE&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop()}clearBackToTableBodyContext(){for(;this.currentTagName!==i.TBODY&&this.currentTagName!==i.TFOOT&&this.currentTagName!==i.THEAD&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop()}clearBackToTableRowContext(){for(;this.currentTagName!==i.TR&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==s.HTML;)this.pop()}remove(e){for(let t=this.stackTop;t>=0;t--)if(this.items[t]===e){this.items.splice(t,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){const e=this.items[1];return e&&this.treeAdapter.getTagName(e)===i.BODY?e:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let t=this._indexOf(e);return--t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.currentTagName===i.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===s.HTML)return!0;if(c(n,r))return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]),n=this.treeAdapter.getNamespaceURI(this.items[e]);if((t===i.H1||t===i.H2||t===i.H3||t===i.H4||t===i.H5||t===i.H6)&&n===s.HTML)return!0;if(c(t,n))return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===s.HTML)return!0;if((n===i.UL||n===i.OL)&&r===s.HTML||c(n,r))return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]),r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===s.HTML)return!0;if(n===i.BUTTON&&r===s.HTML||c(n,r))return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===s.HTML){if(n===e)return!0;if(n===i.TABLE||n===i.TEMPLATE||n===i.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.treeAdapter.getTagName(this.items[e]);if(this.treeAdapter.getNamespaceURI(this.items[e])===s.HTML){if(t===i.TBODY||t===i.THEAD||t===i.TFOOT)return!0;if(t===i.TABLE||t===i.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.treeAdapter.getTagName(this.items[t]);if(this.treeAdapter.getNamespaceURI(this.items[t])===s.HTML){if(n===e)return!0;if(n!==i.OPTION&&n!==i.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;o(this.currentTagName);)this.pop()}generateImpliedEndTagsThoroughly(){for(;a(this.currentTagName);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;o(this.currentTagName)&&this.currentTagName!==e;)this.pop()}}},3988:(e,t,n)=>{"use strict";const r=n(7296),i=n(8904),s=n(1515),o=n(6152),a=o.TAG_NAMES,c=o.NAMESPACES,l={treeAdapter:r},u=/&/g,h=/\u00a0/g,p=/"/g,d=/</g,f=/>/g;class m{constructor(e,t){this.options=i(l,t),this.treeAdapter=this.options.treeAdapter,this.html="",this.startNode=e}serialize(){return this._serializeChildNodes(this.startNode),this.html}_serializeChildNodes(e){const t=this.treeAdapter.getChildNodes(e);if(t)for(let e=0,n=t.length;e<n;e++){const n=t[e];this.treeAdapter.isElementNode(n)?this._serializeElement(n):this.treeAdapter.isTextNode(n)?this._serializeTextNode(n):this.treeAdapter.isCommentNode(n)?this._serializeCommentNode(n):this.treeAdapter.isDocumentTypeNode(n)&&this._serializeDocumentTypeNode(n)}}_serializeElement(e){const t=this.treeAdapter.getTagName(e),n=this.treeAdapter.getNamespaceURI(e);if(this.html+="<"+t,this._serializeAttributes(e),this.html+=">",t!==a.AREA&&t!==a.BASE&&t!==a.BASEFONT&&t!==a.BGSOUND&&t!==a.BR&&t!==a.COL&&t!==a.EMBED&&t!==a.FRAME&&t!==a.HR&&t!==a.IMG&&t!==a.INPUT&&t!==a.KEYGEN&&t!==a.LINK&&t!==a.META&&t!==a.PARAM&&t!==a.SOURCE&&t!==a.TRACK&&t!==a.WBR){const r=t===a.TEMPLATE&&n===c.HTML?this.treeAdapter.getTemplateContent(e):e;this._serializeChildNodes(r),this.html+="</"+t+">"}}_serializeAttributes(e){const t=this.treeAdapter.getAttrList(e);for(let e=0,n=t.length;e<n;e++){const n=t[e],r=m.escapeString(n.value,!0);this.html+=" ",n.namespace?n.namespace===c.XML?this.html+="xml:"+n.name:n.namespace===c.XMLNS?("xmlns"!==n.name&&(this.html+="xmlns:"),this.html+=n.name):n.namespace===c.XLINK?this.html+="xlink:"+n.name:this.html+=n.prefix+":"+n.name:this.html+=n.name,this.html+='="'+r+'"'}}_serializeTextNode(e){const t=this.treeAdapter.getTextNodeContent(e),n=this.treeAdapter.getParentNode(e);let r;n&&this.treeAdapter.isElementNode(n)&&(r=this.treeAdapter.getTagName(n)),r===a.STYLE||r===a.SCRIPT||r===a.XMP||r===a.IFRAME||r===a.NOEMBED||r===a.NOFRAMES||r===a.PLAINTEXT||r===a.NOSCRIPT?this.html+=t:this.html+=m.escapeString(t,!1)}_serializeCommentNode(e){this.html+="\x3c!--"+this.treeAdapter.getCommentNodeContent(e)+"--\x3e"}_serializeDocumentTypeNode(e){const t=this.treeAdapter.getDocumentTypeNodeName(e);this.html+="<"+s.serializeContent(t,null,null)+">"}}m.escapeString=function(e,t){return e=e.replace(u,"&amp;").replace(h,"&nbsp;"),t?e.replace(p,"&quot;"):e.replace(d,"&lt;").replace(f,"&gt;")},e.exports=m},5763:(e,t,n)=>{"use strict";const r=n(7118),i=n(4284),s=n(5482),o=n(1734),a=i.CODE_POINTS,c=i.CODE_POINT_SEQUENCES,l={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},u="DATA_STATE",h="RCDATA_STATE",p="RAWTEXT_STATE",d="SCRIPT_DATA_STATE",f="PLAINTEXT_STATE",m="TAG_OPEN_STATE",T="END_TAG_OPEN_STATE",_="TAG_NAME_STATE",E="RCDATA_LESS_THAN_SIGN_STATE",g="RCDATA_END_TAG_OPEN_STATE",A="RCDATA_END_TAG_NAME_STATE",C="RAWTEXT_LESS_THAN_SIGN_STATE",N="RAWTEXT_END_TAG_OPEN_STATE",O="RAWTEXT_END_TAG_NAME_STATE",v="SCRIPT_DATA_LESS_THAN_SIGN_STATE",b="SCRIPT_DATA_END_TAG_OPEN_STATE",S="SCRIPT_DATA_END_TAG_NAME_STATE",y="SCRIPT_DATA_ESCAPE_START_STATE",I="SCRIPT_DATA_ESCAPE_START_DASH_STATE",k="SCRIPT_DATA_ESCAPED_STATE",R="SCRIPT_DATA_ESCAPED_DASH_STATE",L="SCRIPT_DATA_ESCAPED_DASH_DASH_STATE",M="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE",x="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE",P="SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE",D="SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE",w="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",H="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE",F="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE",U="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE",B="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",G="BEFORE_ATTRIBUTE_NAME_STATE",j="ATTRIBUTE_NAME_STATE",q="AFTER_ATTRIBUTE_NAME_STATE",K="BEFORE_ATTRIBUTE_VALUE_STATE",V="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",Y="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",W="ATTRIBUTE_VALUE_UNQUOTED_STATE",Q="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",z="SELF_CLOSING_START_TAG_STATE",$="BOGUS_COMMENT_STATE",X="MARKUP_DECLARATION_OPEN_STATE",J="COMMENT_START_STATE",Z="COMMENT_START_DASH_STATE",ee="COMMENT_STATE",te="COMMENT_LESS_THAN_SIGN_STATE",ne="COMMENT_LESS_THAN_SIGN_BANG_STATE",re="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE",ie="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE",se="COMMENT_END_DASH_STATE",oe="COMMENT_END_STATE",ae="COMMENT_END_BANG_STATE",ce="DOCTYPE_STATE",le="BEFORE_DOCTYPE_NAME_STATE",ue="DOCTYPE_NAME_STATE",he="AFTER_DOCTYPE_NAME_STATE",pe="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE",de="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE",fe="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE",me="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE",Te="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE",_e="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",Ee="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE",ge="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE",Ae="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE",Ce="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE",Ne="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE",Oe="BOGUS_DOCTYPE_STATE",ve="CDATA_SECTION_STATE",be="CDATA_SECTION_BRACKET_STATE",Se="CDATA_SECTION_END_STATE",ye="CHARACTER_REFERENCE_STATE",Ie="NAMED_CHARACTER_REFERENCE_STATE",ke="AMBIGUOS_AMPERSAND_STATE",Re="NUMERIC_CHARACTER_REFERENCE_STATE",Le="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE",Me="DECIMAL_CHARACTER_REFERENCE_START_STATE",xe="HEXADEMICAL_CHARACTER_REFERENCE_STATE",Pe="DECIMAL_CHARACTER_REFERENCE_STATE",De="NUMERIC_CHARACTER_REFERENCE_END_STATE";function we(e){return e===a.SPACE||e===a.LINE_FEED||e===a.TABULATION||e===a.FORM_FEED}function He(e){return e>=a.DIGIT_0&&e<=a.DIGIT_9}function Fe(e){return e>=a.LATIN_CAPITAL_A&&e<=a.LATIN_CAPITAL_Z}function Ue(e){return e>=a.LATIN_SMALL_A&&e<=a.LATIN_SMALL_Z}function Be(e){return Ue(e)||Fe(e)}function Ge(e){return Be(e)||He(e)}function je(e){return e>=a.LATIN_CAPITAL_A&&e<=a.LATIN_CAPITAL_F}function qe(e){return e>=a.LATIN_SMALL_A&&e<=a.LATIN_SMALL_F}function Ke(e){return e+32}function Ve(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function Ye(e){return String.fromCharCode(Ke(e))}function We(e,t){const n=s[++e];let r=++e,i=r+n-1;for(;r<=i;){const e=r+i>>>1,o=s[e];if(o<t)r=e+1;else{if(!(o>t))return s[e+n];i=e-1}}return-1}class Qe{constructor(){this.preprocessor=new r,this.tokenQueue=[],this.allowCDATA=!1,this.state=u,this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(e){this._consume(),this._err(e),this._unconsume()}getNextToken(){for(;!this.tokenQueue.length&&this.active;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this[this.state](e)}return this.tokenQueue.shift()}write(e,t){this.active=!0,this.preprocessor.write(e,t)}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:Qe.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(e){this.state=e,this._unconsume()}_consumeSequenceIfMatch(e,t,n){let r=0,i=!0;const s=e.length;let o,c=0,l=t;for(;c<s;c++){if(c>0&&(l=this._consume(),r++),l===a.EOF){i=!1;break}if(o=e[c],l!==o&&(n||l!==Ke(o))){i=!1;break}}if(!i)for(;r--;)this._unconsume();return i}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==c.SCRIPT_STRING.length)return!1;for(let e=0;e<this.tempBuff.length;e++)if(this.tempBuff[e]!==c.SCRIPT_STRING[e])return!1;return!0}_createStartTagToken(){this.currentToken={type:Qe.START_TAG_TOKEN,tagName:"",selfClosing:!1,ackSelfClosing:!1,attrs:[]}}_createEndTagToken(){this.currentToken={type:Qe.END_TAG_TOKEN,tagName:"",selfClosing:!1,attrs:[]}}_createCommentToken(){this.currentToken={type:Qe.COMMENT_TOKEN,data:""}}_createDoctypeToken(e){this.currentToken={type:Qe.DOCTYPE_TOKEN,name:e,forceQuirks:!1,publicId:null,systemId:null}}_createCharacterToken(e,t){this.currentCharacterToken={type:e,chars:t}}_createEOFToken(){this.currentToken={type:Qe.EOF_TOKEN}}_createAttr(e){this.currentAttr={name:e,value:""}}_leaveAttrName(e){null===Qe.getTokenAttr(this.currentToken,this.currentAttr.name)?this.currentToken.attrs.push(this.currentAttr):this._err(o.duplicateAttribute),this.state=e}_leaveAttrValue(e){this.state=e}_emitCurrentToken(){this._emitCurrentCharacterToken();const e=this.currentToken;this.currentToken=null,e.type===Qe.START_TAG_TOKEN?this.lastStartTagName=e.tagName:e.type===Qe.END_TAG_TOKEN&&(e.attrs.length>0&&this._err(o.endTagWithAttributes),e.selfClosing&&this._err(o.endTagWithTrailingSolidus)),this.tokenQueue.push(e)}_emitCurrentCharacterToken(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null)}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(e,t){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=t:this._createCharacterToken(e,t)}_emitCodePoint(e){let t=Qe.CHARACTER_TOKEN;we(e)?t=Qe.WHITESPACE_CHARACTER_TOKEN:e===a.NULL&&(t=Qe.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(t,Ve(e))}_emitSeveralCodePoints(e){for(let t=0;t<e.length;t++)this._emitCodePoint(e[t])}_emitChars(e){this._appendCharToCurrentCharacterToken(Qe.CHARACTER_TOKEN,e)}_matchNamedCharacterReference(e){let t=null,n=1,r=We(0,e);for(this.tempBuff.push(e);r>-1;){const e=s[r],i=e<7;i&&1&e&&(t=2&e?[s[++r],s[++r]]:[s[++r]],n=0);const o=this._consume();if(this.tempBuff.push(o),n++,o===a.EOF)break;r=i?4&e?We(r,o):-1:o===e?++r:-1}for(;n--;)this.tempBuff.pop(),this._unconsume();return t}_isCharacterReferenceInAttribute(){return this.returnState===V||this.returnState===Y||this.returnState===W}_isCharacterReferenceAttributeQuirk(e){if(!e&&this._isCharacterReferenceInAttribute()){const e=this._consume();return this._unconsume(),e===a.EQUALS_SIGN||Ge(e)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let e=0;e<this.tempBuff.length;e++)this.currentAttr.value+=Ve(this.tempBuff[e]);else this._emitSeveralCodePoints(this.tempBuff);this.tempBuff=[]}[u](e){this.preprocessor.dropParsedChunk(),e===a.LESS_THAN_SIGN?this.state=m:e===a.AMPERSAND?(this.returnState=u,this.state=ye):e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitCodePoint(e)):e===a.EOF?this._emitEOFToken():this._emitCodePoint(e)}[h](e){this.preprocessor.dropParsedChunk(),e===a.AMPERSAND?(this.returnState=h,this.state=ye):e===a.LESS_THAN_SIGN?this.state=E:e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?this._emitEOFToken():this._emitCodePoint(e)}[p](e){this.preprocessor.dropParsedChunk(),e===a.LESS_THAN_SIGN?this.state=C:e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?this._emitEOFToken():this._emitCodePoint(e)}[d](e){this.preprocessor.dropParsedChunk(),e===a.LESS_THAN_SIGN?this.state=v:e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?this._emitEOFToken():this._emitCodePoint(e)}[f](e){this.preprocessor.dropParsedChunk(),e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?this._emitEOFToken():this._emitCodePoint(e)}[m](e){e===a.EXCLAMATION_MARK?this.state=X:e===a.SOLIDUS?this.state=T:Be(e)?(this._createStartTagToken(),this._reconsumeInState(_)):e===a.QUESTION_MARK?(this._err(o.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(),this._reconsumeInState($)):e===a.EOF?(this._err(o.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken()):(this._err(o.invalidFirstCharacterOfTagName),this._emitChars("<"),this._reconsumeInState(u))}[T](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(_)):e===a.GREATER_THAN_SIGN?(this._err(o.missingEndTagName),this.state=u):e===a.EOF?(this._err(o.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken()):(this._err(o.invalidFirstCharacterOfTagName),this._createCommentToken(),this._reconsumeInState($))}[_](e){we(e)?this.state=G:e===a.SOLIDUS?this.state=z:e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):Fe(e)?this.currentToken.tagName+=Ye(e):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.tagName+=i.REPLACEMENT_CHARACTER):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):this.currentToken.tagName+=Ve(e)}[E](e){e===a.SOLIDUS?(this.tempBuff=[],this.state=g):(this._emitChars("<"),this._reconsumeInState(h))}[g](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(A)):(this._emitChars("</"),this._reconsumeInState(h))}[A](e){if(Fe(e))this.currentToken.tagName+=Ye(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else{if(this.lastStartTagName===this.currentToken.tagName){if(we(e))return void(this.state=G);if(e===a.SOLIDUS)return void(this.state=z);if(e===a.GREATER_THAN_SIGN)return this.state=u,void this._emitCurrentToken()}this._emitChars("</"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(h)}}[C](e){e===a.SOLIDUS?(this.tempBuff=[],this.state=N):(this._emitChars("<"),this._reconsumeInState(p))}[N](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(O)):(this._emitChars("</"),this._reconsumeInState(p))}[O](e){if(Fe(e))this.currentToken.tagName+=Ye(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else{if(this.lastStartTagName===this.currentToken.tagName){if(we(e))return void(this.state=G);if(e===a.SOLIDUS)return void(this.state=z);if(e===a.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=u)}this._emitChars("</"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(p)}}[v](e){e===a.SOLIDUS?(this.tempBuff=[],this.state=b):e===a.EXCLAMATION_MARK?(this.state=y,this._emitChars("<!")):(this._emitChars("<"),this._reconsumeInState(d))}[b](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(S)):(this._emitChars("</"),this._reconsumeInState(d))}[S](e){if(Fe(e))this.currentToken.tagName+=Ye(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else{if(this.lastStartTagName===this.currentToken.tagName){if(we(e))return void(this.state=G);if(e===a.SOLIDUS)return void(this.state=z);if(e===a.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=u)}this._emitChars("</"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(d)}}[y](e){e===a.HYPHEN_MINUS?(this.state=I,this._emitChars("-")):this._reconsumeInState(d)}[I](e){e===a.HYPHEN_MINUS?(this.state=L,this._emitChars("-")):this._reconsumeInState(d)}[k](e){e===a.HYPHEN_MINUS?(this.state=R,this._emitChars("-")):e===a.LESS_THAN_SIGN?this.state=M:e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):this._emitCodePoint(e)}[R](e){e===a.HYPHEN_MINUS?(this.state=L,this._emitChars("-")):e===a.LESS_THAN_SIGN?this.state=M:e===a.NULL?(this._err(o.unexpectedNullCharacter),this.state=k,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=k,this._emitCodePoint(e))}[L](e){e===a.HYPHEN_MINUS?this._emitChars("-"):e===a.LESS_THAN_SIGN?this.state=M:e===a.GREATER_THAN_SIGN?(this.state=d,this._emitChars(">")):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.state=k,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=k,this._emitCodePoint(e))}[M](e){e===a.SOLIDUS?(this.tempBuff=[],this.state=x):Be(e)?(this.tempBuff=[],this._emitChars("<"),this._reconsumeInState(D)):(this._emitChars("<"),this._reconsumeInState(k))}[x](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(P)):(this._emitChars("</"),this._reconsumeInState(k))}[P](e){if(Fe(e))this.currentToken.tagName+=Ye(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else{if(this.lastStartTagName===this.currentToken.tagName){if(we(e))return void(this.state=G);if(e===a.SOLIDUS)return void(this.state=z);if(e===a.GREATER_THAN_SIGN)return this._emitCurrentToken(),void(this.state=u)}this._emitChars("</"),this._emitSeveralCodePoints(this.tempBuff),this._reconsumeInState(k)}}[D](e){we(e)||e===a.SOLIDUS||e===a.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?w:k,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(Ke(e)),this._emitCodePoint(e)):Ue(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(k)}[w](e){e===a.HYPHEN_MINUS?(this.state=H,this._emitChars("-")):e===a.LESS_THAN_SIGN?(this.state=U,this._emitChars("<")):e===a.NULL?(this._err(o.unexpectedNullCharacter),this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):this._emitCodePoint(e)}[H](e){e===a.HYPHEN_MINUS?(this.state=F,this._emitChars("-")):e===a.LESS_THAN_SIGN?(this.state=U,this._emitChars("<")):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.state=w,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=w,this._emitCodePoint(e))}[F](e){e===a.HYPHEN_MINUS?this._emitChars("-"):e===a.LESS_THAN_SIGN?(this.state=U,this._emitChars("<")):e===a.GREATER_THAN_SIGN?(this.state=d,this._emitChars(">")):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.state=w,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=w,this._emitCodePoint(e))}[U](e){e===a.SOLIDUS?(this.tempBuff=[],this.state=B,this._emitChars("/")):this._reconsumeInState(w)}[B](e){we(e)||e===a.SOLIDUS||e===a.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?k:w,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(Ke(e)),this._emitCodePoint(e)):Ue(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(w)}[G](e){we(e)||(e===a.SOLIDUS||e===a.GREATER_THAN_SIGN||e===a.EOF?this._reconsumeInState(q):e===a.EQUALS_SIGN?(this._err(o.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j):(this._createAttr(""),this._reconsumeInState(j)))}[j](e){we(e)||e===a.SOLIDUS||e===a.GREATER_THAN_SIGN||e===a.EOF?(this._leaveAttrName(q),this._unconsume()):e===a.EQUALS_SIGN?this._leaveAttrName(K):Fe(e)?this.currentAttr.name+=Ye(e):e===a.QUOTATION_MARK||e===a.APOSTROPHE||e===a.LESS_THAN_SIGN?(this._err(o.unexpectedCharacterInAttributeName),this.currentAttr.name+=Ve(e)):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentAttr.name+=i.REPLACEMENT_CHARACTER):this.currentAttr.name+=Ve(e)}[q](e){we(e)||(e===a.SOLIDUS?this.state=z:e===a.EQUALS_SIGN?this.state=K:e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(j)))}[K](e){we(e)||(e===a.QUOTATION_MARK?this.state=V:e===a.APOSTROPHE?this.state=Y:e===a.GREATER_THAN_SIGN?(this._err(o.missingAttributeValue),this.state=u,this._emitCurrentToken()):this._reconsumeInState(W))}[V](e){e===a.QUOTATION_MARK?this.state=Q:e===a.AMPERSAND?(this.returnState=V,this.state=ye):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):this.currentAttr.value+=Ve(e)}[Y](e){e===a.APOSTROPHE?this.state=Q:e===a.AMPERSAND?(this.returnState=Y,this.state=ye):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):this.currentAttr.value+=Ve(e)}[W](e){we(e)?this._leaveAttrValue(G):e===a.AMPERSAND?(this.returnState=W,this.state=ye):e===a.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===a.QUOTATION_MARK||e===a.APOSTROPHE||e===a.LESS_THAN_SIGN||e===a.EQUALS_SIGN||e===a.GRAVE_ACCENT?(this._err(o.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=Ve(e)):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):this.currentAttr.value+=Ve(e)}[Q](e){we(e)?this._leaveAttrValue(G):e===a.SOLIDUS?this._leaveAttrValue(z):e===a.GREATER_THAN_SIGN?(this._leaveAttrValue(u),this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):(this._err(o.missingWhitespaceBetweenAttributes),this._reconsumeInState(G))}[z](e){e===a.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):(this._err(o.unexpectedSolidusInTag),this._reconsumeInState(G))}[$](e){e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.EOF?(this._emitCurrentToken(),this._emitEOFToken()):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.data+=i.REPLACEMENT_CHARACTER):this.currentToken.data+=Ve(e)}[X](e){this._consumeSequenceIfMatch(c.DASH_DASH_STRING,e,!0)?(this._createCommentToken(),this.state=J):this._consumeSequenceIfMatch(c.DOCTYPE_STRING,e,!1)?this.state=ce:this._consumeSequenceIfMatch(c.CDATA_START_STRING,e,!0)?this.allowCDATA?this.state=ve:(this._err(o.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=$):this._ensureHibernation()||(this._err(o.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState($))}[J](e){e===a.HYPHEN_MINUS?this.state=Z:e===a.GREATER_THAN_SIGN?(this._err(o.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):this._reconsumeInState(ee)}[Z](e){e===a.HYPHEN_MINUS?this.state=oe:e===a.GREATER_THAN_SIGN?(this._err(o.abruptClosingOfEmptyComment),this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[ee](e){e===a.HYPHEN_MINUS?this.state=se:e===a.LESS_THAN_SIGN?(this.currentToken.data+="<",this.state=te):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.data+=i.REPLACEMENT_CHARACTER):e===a.EOF?(this._err(o.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.data+=Ve(e)}[te](e){e===a.EXCLAMATION_MARK?(this.currentToken.data+="!",this.state=ne):e===a.LESS_THAN_SIGN?this.currentToken.data+="!":this._reconsumeInState(ee)}[ne](e){e===a.HYPHEN_MINUS?this.state=re:this._reconsumeInState(ee)}[re](e){e===a.HYPHEN_MINUS?this.state=ie:this._reconsumeInState(se)}[ie](e){e!==a.GREATER_THAN_SIGN&&e!==a.EOF&&this._err(o.nestedComment),this._reconsumeInState(oe)}[se](e){e===a.HYPHEN_MINUS?this.state=oe:e===a.EOF?(this._err(o.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(ee))}[oe](e){e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.EXCLAMATION_MARK?this.state=ae:e===a.HYPHEN_MINUS?this.currentToken.data+="-":e===a.EOF?(this._err(o.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--",this._reconsumeInState(ee))}[ae](e){e===a.HYPHEN_MINUS?(this.currentToken.data+="--!",this.state=se):e===a.GREATER_THAN_SIGN?(this._err(o.incorrectlyClosedComment),this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--!",this._reconsumeInState(ee))}[ce](e){we(e)?this.state=le:e===a.GREATER_THAN_SIGN?this._reconsumeInState(le):e===a.EOF?(this._err(o.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingWhitespaceBeforeDoctypeName),this._reconsumeInState(le))}[le](e){we(e)||(Fe(e)?(this._createDoctypeToken(Ye(e)),this.state=ue):e===a.NULL?(this._err(o.unexpectedNullCharacter),this._createDoctypeToken(i.REPLACEMENT_CHARACTER),this.state=ue):e===a.GREATER_THAN_SIGN?(this._err(o.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._createDoctypeToken(Ve(e)),this.state=ue))}[ue](e){we(e)?this.state=he:e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):Fe(e)?this.currentToken.name+=Ye(e):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.name+=i.REPLACEMENT_CHARACTER):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.name+=Ve(e)}[he](e){we(e)||(e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this._consumeSequenceIfMatch(c.PUBLIC_STRING,e,!1)?this.state=pe:this._consumeSequenceIfMatch(c.SYSTEM_STRING,e,!1)?this.state=Ee:this._ensureHibernation()||(this._err(o.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe)))}[pe](e){we(e)?this.state=de:e===a.QUOTATION_MARK?(this._err(o.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=fe):e===a.APOSTROPHE?(this._err(o.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=me):e===a.GREATER_THAN_SIGN?(this._err(o.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe))}[de](e){we(e)||(e===a.QUOTATION_MARK?(this.currentToken.publicId="",this.state=fe):e===a.APOSTROPHE?(this.currentToken.publicId="",this.state=me):e===a.GREATER_THAN_SIGN?(this._err(o.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe)))}[fe](e){e===a.QUOTATION_MARK?this.state=Te:e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.publicId+=i.REPLACEMENT_CHARACTER):e===a.GREATER_THAN_SIGN?(this._err(o.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=Ve(e)}[me](e){e===a.APOSTROPHE?this.state=Te:e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.publicId+=i.REPLACEMENT_CHARACTER):e===a.GREATER_THAN_SIGN?(this._err(o.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=Ve(e)}[Te](e){we(e)?this.state=_e:e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.QUOTATION_MARK?(this._err(o.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=Ae):e===a.APOSTROPHE?(this._err(o.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=Ce):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe))}[_e](e){we(e)||(e===a.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===a.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===a.APOSTROPHE?(this.currentToken.systemId="",this.state=Ce):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe)))}[Ee](e){we(e)?this.state=ge:e===a.QUOTATION_MARK?(this._err(o.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=Ae):e===a.APOSTROPHE?(this._err(o.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=Ce):e===a.GREATER_THAN_SIGN?(this._err(o.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe))}[ge](e){we(e)||(e===a.QUOTATION_MARK?(this.currentToken.systemId="",this.state=Ae):e===a.APOSTROPHE?(this.currentToken.systemId="",this.state=Ce):e===a.GREATER_THAN_SIGN?(this._err(o.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(Oe)))}[Ae](e){e===a.QUOTATION_MARK?this.state=Ne:e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.systemId+=i.REPLACEMENT_CHARACTER):e===a.GREATER_THAN_SIGN?(this._err(o.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=Ve(e)}[Ce](e){e===a.APOSTROPHE?this.state=Ne:e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentToken.systemId+=i.REPLACEMENT_CHARACTER):e===a.GREATER_THAN_SIGN?(this._err(o.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=Ve(e)}[Ne](e){we(e)||(e===a.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===a.EOF?(this._err(o.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(o.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState(Oe)))}[Oe](e){e===a.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=u):e===a.NULL?this._err(o.unexpectedNullCharacter):e===a.EOF&&(this._emitCurrentToken(),this._emitEOFToken())}[ve](e){e===a.RIGHT_SQUARE_BRACKET?this.state=be:e===a.EOF?(this._err(o.eofInCdata),this._emitEOFToken()):this._emitCodePoint(e)}[be](e){e===a.RIGHT_SQUARE_BRACKET?this.state=Se:(this._emitChars("]"),this._reconsumeInState(ve))}[Se](e){e===a.GREATER_THAN_SIGN?this.state=u:e===a.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(ve))}[ye](e){this.tempBuff=[a.AMPERSAND],e===a.NUMBER_SIGN?(this.tempBuff.push(e),this.state=Re):Ge(e)?this._reconsumeInState(Ie):(this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[Ie](e){const t=this._matchNamedCharacterReference(e);if(this._ensureHibernation())this.tempBuff=[a.AMPERSAND];else if(t){const e=this.tempBuff[this.tempBuff.length-1]===a.SEMICOLON;this._isCharacterReferenceAttributeQuirk(e)||(e||this._errOnNextCodePoint(o.missingSemicolonAfterCharacterReference),this.tempBuff=t),this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state=ke}[ke](e){Ge(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=Ve(e):this._emitCodePoint(e):(e===a.SEMICOLON&&this._err(o.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[Re](e){this.charRefCode=0,e===a.LATIN_SMALL_X||e===a.LATIN_CAPITAL_X?(this.tempBuff.push(e),this.state=Le):this._reconsumeInState(Me)}[Le](e){!function(e){return He(e)||je(e)||qe(e)}(e)?(this._err(o.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)):this._reconsumeInState(xe)}[Me](e){He(e)?this._reconsumeInState(Pe):(this._err(o.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[xe](e){je(e)?this.charRefCode=16*this.charRefCode+e-55:qe(e)?this.charRefCode=16*this.charRefCode+e-87:He(e)?this.charRefCode=16*this.charRefCode+e-48:e===a.SEMICOLON?this.state=De:(this._err(o.missingSemicolonAfterCharacterReference),this._reconsumeInState(De))}[Pe](e){He(e)?this.charRefCode=10*this.charRefCode+e-48:e===a.SEMICOLON?this.state=De:(this._err(o.missingSemicolonAfterCharacterReference),this._reconsumeInState(De))}[De](){if(this.charRefCode===a.NULL)this._err(o.nullCharacterReference),this.charRefCode=a.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(o.characterReferenceOutsideUnicodeRange),this.charRefCode=a.REPLACEMENT_CHARACTER;else if(i.isSurrogate(this.charRefCode))this._err(o.surrogateCharacterReference),this.charRefCode=a.REPLACEMENT_CHARACTER;else if(i.isUndefinedCodePoint(this.charRefCode))this._err(o.noncharacterCharacterReference);else if(i.isControlCodePoint(this.charRefCode)||this.charRefCode===a.CARRIAGE_RETURN){this._err(o.controlCharacterReference);const e=l[this.charRefCode];e&&(this.charRefCode=e)}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}Qe.CHARACTER_TOKEN="CHARACTER_TOKEN",Qe.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN",Qe.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN",Qe.START_TAG_TOKEN="START_TAG_TOKEN",Qe.END_TAG_TOKEN="END_TAG_TOKEN",Qe.COMMENT_TOKEN="COMMENT_TOKEN",Qe.DOCTYPE_TOKEN="DOCTYPE_TOKEN",Qe.EOF_TOKEN="EOF_TOKEN",Qe.HIBERNATION_TOKEN="HIBERNATION_TOKEN",Qe.MODE={DATA:u,RCDATA:h,RAWTEXT:p,SCRIPT_DATA:d,PLAINTEXT:f},Qe.getTokenAttr=function(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null},e.exports=Qe},5482:e=>{"use strict";e.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])},7118:(e,t,n)=>{"use strict";const r=n(4284),i=n(1734),s=r.CODE_POINTS;e.exports=class{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.lastCharPos){const t=this.html.charCodeAt(this.pos+1);if(r.isSurrogatePair(t))return this.pos++,this._addGap(),r.getSurrogatePairCodePoint(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,s.EOF;return this._err(i.surrogateInInputStream),e}dropParsedChunk(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[])}write(e,t){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,s.EOF;let e=this.html.charCodeAt(this.pos);return this.skipNextNewLine&&e===s.LINE_FEED?(this.skipNextNewLine=!1,this._addGap(),this.advance()):e===s.CARRIAGE_RETURN?(this.skipNextNewLine=!0,s.LINE_FEED):(this.skipNextNewLine=!1,r.isSurrogate(e)&&(e=this._processSurrogate(e)),e>31&&e<127||e===s.LINE_FEED||e===s.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){r.isControlCodePoint(e)?this._err(i.controlCharacterInInputStream):r.isUndefinedCodePoint(e)&&this._err(i.noncharacterInInputStream)}retreat(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--}}},7296:(e,t,n)=>{"use strict";const{DOCUMENT_MODE:r}=n(6152);t.createDocument=function(){return{nodeName:"#document",mode:r.NO_QUIRKS,childNodes:[]}},t.createDocumentFragment=function(){return{nodeName:"#document-fragment",childNodes:[]}},t.createElement=function(e,t,n){return{nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},t.createCommentNode=function(e){return{nodeName:"#comment",data:e,parentNode:null}};const i=function(e){return{nodeName:"#text",value:e,parentNode:null}},s=t.appendChild=function(e,t){e.childNodes.push(t),t.parentNode=e},o=t.insertBefore=function(e,t,n){const r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e};t.setTemplateContent=function(e,t){e.content=t},t.getTemplateContent=function(e){return e.content},t.setDocumentType=function(e,t,n,r){let i=null;for(let t=0;t<e.childNodes.length;t++)if("#documentType"===e.childNodes[t].nodeName){i=e.childNodes[t];break}i?(i.name=t,i.publicId=n,i.systemId=r):s(e,{nodeName:"#documentType",name:t,publicId:n,systemId:r})},t.setDocumentMode=function(e,t){e.mode=t},t.getDocumentMode=function(e){return e.mode},t.detachNode=function(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},t.insertText=function(e,t){if(e.childNodes.length){const n=e.childNodes[e.childNodes.length-1];if("#text"===n.nodeName)return void(n.value+=t)}s(e,i(t))},t.insertTextBefore=function(e,t,n){const r=e.childNodes[e.childNodes.indexOf(n)-1];r&&"#text"===r.nodeName?r.value+=t:o(e,i(t),n)},t.adoptAttributes=function(e,t){const n=[];for(let t=0;t<e.attrs.length;t++)n.push(e.attrs[t].name);for(let r=0;r<t.length;r++)-1===n.indexOf(t[r].name)&&e.attrs.push(t[r])},t.getFirstChild=function(e){return e.childNodes[0]},t.getChildNodes=function(e){return e.childNodes},t.getParentNode=function(e){return e.parentNode},t.getAttrList=function(e){return e.attrs},t.getTagName=function(e){return e.tagName},t.getNamespaceURI=function(e){return e.namespaceURI},t.getTextNodeContent=function(e){return e.value},t.getCommentNodeContent=function(e){return e.data},t.getDocumentTypeNodeName=function(e){return e.name},t.getDocumentTypeNodePublicId=function(e){return e.publicId},t.getDocumentTypeNodeSystemId=function(e){return e.systemId},t.isTextNode=function(e){return"#text"===e.nodeName},t.isCommentNode=function(e){return"#comment"===e.nodeName},t.isDocumentTypeNode=function(e){return"#documentType"===e.nodeName},t.isElementNode=function(e){return!!e.tagName},t.setNodeSourceCodeLocation=function(e,t){e.sourceCodeLocation=t},t.getNodeSourceCodeLocation=function(e){return e.sourceCodeLocation},t.updateNodeSourceCodeLocation=function(e,t){e.sourceCodeLocation=Object.assign(e.sourceCodeLocation,t)}},8904:e=>{"use strict";e.exports=function(e,t){return[e,t=t||Object.create(null)].reduce(((e,t)=>(Object.keys(t).forEach((n=>{e[n]=t[n]})),e)),Object.create(null))}},1704:e=>{"use strict";class t{constructor(e){const t={},n=this._getOverriddenMethods(this,t);for(const r of Object.keys(n))"function"==typeof n[r]&&(t[r]=e[r],e[r]=n[r])}_getOverriddenMethods(){throw new Error("Not implemented")}}t.install=function(e,t,n){e.__mixins||(e.__mixins=[]);for(let n=0;n<e.__mixins.length;n++)if(e.__mixins[n].constructor===t)return e.__mixins[n];const r=new t(e,n);return e.__mixins.push(r),r},e.exports=t},2846:e=>{"use strict";e.exports=".nav {\n  margin: 0;\n  max-width: 150px;\n  min-width: 90px;\n  justify-content: center;\n  align-content: center;\n  font-size: 40px;\n  color: #ccc;\n  text-align: center;\n  text-decoration: none;\n  text-rendering: auto;\n  -webkit-transition: all 350ms ease;\n  -moz-transition: all 350ms ease;\n  -o-transition: all 350ms ease;\n  transition: all 350ms ease\n}\n\n.nav:hover {\n  text-decoration: none;\n  color: #444\n}\n\n.nav-next {\n  float: right;\n  display: block;\n}\n\n.nav-prev {\n  float: left;\n  display: block;\n}\n\n#toc li {\n  padding: 0.07rem;\n}\n\nli.current {\n  border-radius: 0.5rem;\n  background-color: rgb(226, 231, 235);\n  /* rgb(226, 231, 235); */\n  /* rgb(255, 247, 229); */\n}\n"},2081:e=>{"use strict";e.exports=require("child_process")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},1017:e=>{"use strict";e.exports=require("path")},7461:(e,t,n)=>{const{Argument:r}=n(8998),{Command:i}=n(5282),{CommanderError:s,InvalidArgumentError:o}=n(8056),{Help:a}=n(8917),{Option:c}=n(5790);(t=e.exports=new i).program=t,t.Argument=r,t.Command=i,t.CommanderError=s,t.Help=a,t.InvalidArgumentError=o,t.InvalidOptionArgumentError=o,t.Option=c},8998:(e,t,n)=>{const{InvalidArgumentError:r}=n(8056);t.Argument=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e}this._name.length>3&&"..."===this._name.slice(-3)&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t!==this.defaultValue&&Array.isArray(t)?t.concat(e):[e]}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e,this.parseArg=(t,n)=>{if(!e.includes(t))throw new r(`Allowed choices are ${e.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}},t.humanReadableArgName=function(e){const t=e.name()+(!0===e.variadic?"...":"");return e.required?"<"+t+">":"["+t+"]"}},5282:(e,t,n)=>{const r=n(2361).EventEmitter,i=n(2081),s=n(1017),o=n(7147),{Argument:a,humanReadableArgName:c}=n(8998),{CommanderError:l}=n(8056),{Help:u}=n(8917),{Option:h,splitOptionFlags:p}=n(5790);class d extends r{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this._args=[],this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._outputConfiguration={writeOut:e=>process.stdout.write(e),writeErr:e=>process.stderr.write(e),getOutHelpWidth:()=>process.stdout.isTTY?process.stdout.columns:void 0,getErrHelpWidth:()=>process.stderr.isTTY?process.stderr.columns:void 0,outputError:(e,t)=>t(e)},this._hidden=!1,this._hasHelpOption=!0,this._helpFlags="-h, --help",this._helpDescription="display help for command",this._helpShortFlag="-h",this._helpLongFlag="--help",this._addImplicitHelpCommand=void 0,this._helpCommandName="help",this._helpCommandnameAndArgs="help [command]",this._helpCommandDescription="display help for command",this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._hasHelpOption=e._hasHelpOption,this._helpFlags=e._helpFlags,this._helpDescription=e._helpDescription,this._helpShortFlag=e._helpShortFlag,this._helpLongFlag=e._helpLongFlag,this._helpCommandName=e._helpCommandName,this._helpCommandnameAndArgs=e._helpCommandnameAndArgs,this._helpCommandDescription=e._helpCommandDescription,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this}command(e,t,n){let r=t,i=n;"object"==typeof r&&null!==r&&(i=r,r=null),i=i||{};const[,s,o]=e.match(/([^ ]+) *(.*)/),a=this.createCommand(s);return r&&(a.description(r),a._executableHandler=!0),i.isDefault&&(this._defaultCommandName=a._name),a._hidden=!(!i.noHelp&&!i.hidden),a._executableFile=i.executableFile||null,o&&a.arguments(o),this.commands.push(a),a.parent=this,a.copyInheritedSettings(this),r?this:a}createCommand(e){return new d(e)}createHelp(){return Object.assign(new u,this.configureHelp())}configureHelp(e){return void 0===e?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return void 0===e?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return"string"!=typeof e&&(e=!!e),this._showHelpAfterError=e,this}addCommand(e,t){if(!e._name)throw new Error("Command passed to .addCommand() must have a name");return function e(t){t.forEach((t=>{if(t._executableHandler&&!t._executableFile)throw new Error(`Must specify executableFile for deeply nested executable: ${t.name()}`);e(t.commands)}))}(e.commands),(t=t||{}).isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this.commands.push(e),e.parent=this,this}createArgument(e,t){return new a(e,t)}argument(e,t,n,r){const i=this.createArgument(e,t);return"function"==typeof n?i.default(r).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.split(/ +/).forEach((e=>{this.argument(e)})),this}addArgument(e){const t=this._args.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&void 0!==e.defaultValue&&void 0===e.parseArg)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this._args.push(e),this}addHelpCommand(e,t){return!1===e?this._addImplicitHelpCommand=!1:(this._addImplicitHelpCommand=!0,"string"==typeof e&&(this._helpCommandName=e.split(" ")[0],this._helpCommandnameAndArgs=e),this._helpCommandDescription=t||this._helpCommandDescription),this}_hasImplicitHelpCommand(){return void 0===this._addImplicitHelpCommand?this.commands.length&&!this._actionHandler&&!this._findCommand("help"):this._addImplicitHelpCommand}hook(e,t){const n=["preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.\nExpecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return this._exitCallback=e||(e=>{if("commander.executeSubCommandAsync"!==e.code)throw e}),this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new l(e,t,n)),process.exit(e)}action(e){return this._actionHandler=t=>{const n=this._args.length,r=t.slice(0,n);return this._storeOptionsAsProperties?r[n]=this:r[n]=this.opts(),r.push(this),e.apply(this,r)},this}createOption(e,t){return new h(e,t)}addOption(e){const t=e.name(),n=e.attributeName();let r=e.defaultValue;if(e.negate||e.optional||e.required||"boolean"==typeof r){if(e.negate){const t=e.long.replace(/^--no-/,"--");r=!this._findOption(t)||this.getOptionValue(n)}void 0!==r&&this.setOptionValue(n,r)}return this.options.push(e),this.on("option:"+t,(t=>{const i=this.getOptionValue(n);if(null!==t&&e.parseArg)try{t=e.parseArg(t,void 0===i?r:i)}catch(n){if("commander.invalidArgument"===n.code){const r=`error: option '${e.flags}' argument '${t}' is invalid. ${n.message}`;this._displayError(n.exitCode,n.code,r)}throw n}else null!==t&&e.variadic&&(t=e._concatValue(t,i));"boolean"==typeof i||void 0===i?null==t?this.setOptionValue(n,!e.negate&&(r||!0)):this.setOptionValue(n,t):null!==t&&this.setOptionValue(n,!e.negate&&t)})),this}_optionEx(e,t,n,r,i){const s=this.createOption(t,n);if(s.makeOptionMandatory(!!e.mandatory),"function"==typeof r)s.default(i).argParser(r);else if(r instanceof RegExp){const e=r;r=(t,n)=>{const r=e.exec(t);return r?r[0]:n},s.default(i).argParser(r)}else s.default(r);return this.addOption(s)}option(e,t,n,r){return this._optionEx({},e,t,n,r)}requiredOption(e,t,n,r){return this._optionEx({mandatory:!0},e,t,n,r)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){if(this._passThroughOptions=!!e,this.parent&&e&&!this.parent._enablePositionalOptions)throw new Error("passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)");return this}storeOptionsAsProperties(e=!0){if(this._storeOptionsAsProperties=!!e,this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");return this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this}_prepareUserArgs(e,t){if(void 0!==e&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");let r;switch(t=t||{},void 0===e&&(e=process.argv,process.versions&&process.versions.electron&&(t.from="electron")),this.rawArgs=e.slice(),t.from){case void 0:case"node":this._scriptPath=e[1],r=e.slice(2);break;case"electron":process.defaultApp?(this._scriptPath=e[1],r=e.slice(2)):r=e.slice(1);break;case"user":r=e.slice(0);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._scriptPath&&n.c[n.s]&&(this._scriptPath=n.c[n.s].filename),this._name=this._name||this._scriptPath&&s.basename(this._scriptPath,s.extname(this._scriptPath)),r}parse(e,t){const n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){const n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let r=!1;const a=[".js",".ts",".tsx",".mjs",".cjs"];this._checkForMissingMandatoryOptions();let c,u=this._scriptPath;!u&&n.c[n.s]&&(u=n.c[n.s].filename);try{const e=o.realpathSync(u);c=s.dirname(e)}catch(e){c="."}let h=s.basename(u,s.extname(u))+"-"+e._name;e._executableFile&&(h=e._executableFile);const p=s.join(c,h);let d;o.existsSync(p)?h=p:a.forEach((e=>{o.existsSync(`${p}${e}`)&&(h=`${p}${e}`)})),r=a.includes(s.extname(h)),"win32"!==process.platform?r?(t.unshift(h),t=m(process.execArgv).concat(t),d=i.spawn(process.argv[0],t,{stdio:"inherit"})):d=i.spawn(h,t,{stdio:"inherit"}):(t.unshift(h),t=m(process.execArgv).concat(t),d=i.spawn(process.execPath,t,{stdio:"inherit"})),["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((e=>{process.on(e,(()=>{!1===d.killed&&null===d.exitCode&&d.kill(e)}))}));const f=this._exitCallback;f?d.on("close",(()=>{f(new l(process.exitCode||0,"commander.executeSubCommandAsync","(close)"))})):d.on("close",process.exit.bind(process)),d.on("error",(t=>{if("ENOENT"===t.code){const t=`'${h}' does not exist\n - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name`;throw new Error(t)}if("EACCES"===t.code)throw new Error(`'${h}' not executable`);if(f){const e=new l(1,"commander.executeSubCommandAsync","(error)");e.nestedError=t,f(e)}else process.exit(1)})),this.runningCommand=d}_dispatchSubcommand(e,t,n){const r=this._findCommand(e);if(r||this.help({error:!0}),!r._executableHandler)return r._parseCommand(t,n);this._executeSubCommand(r,t.concat(n))}_checkNumberOfArguments(){this._args.forEach(((e,t)=>{e.required&&null==this.args[t]&&this.missingArgument(e.name())})),this._args.length>0&&this._args[this._args.length-1].variadic||this.args.length>this._args.length&&this._excessArguments(this.args)}_processArguments(){const e=(e,t,n)=>{let r=t;if(null!==t&&e.parseArg)try{r=e.parseArg(t,n)}catch(n){if("commander.invalidArgument"===n.code){const r=`error: command-argument value '${t}' is invalid for argument '${e.name()}'. ${n.message}`;this._displayError(n.exitCode,n.code,r)}throw n}return r};this._checkNumberOfArguments();const t=[];this._args.forEach(((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce(((t,r)=>e(n,r,t)),n.defaultValue))):void 0===i&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i})),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&"function"==typeof e.then?e.then((()=>t())):t()}_chainOrCallHooks(e,t){let n=e;const r=[];return T(this).reverse().filter((e=>void 0!==e._lifeCycleHooks[t])).forEach((e=>{e._lifeCycleHooks[t].forEach((t=>{r.push({hookedCommand:e,callback:t})}))})),"postAction"===t&&r.reverse(),r.forEach((e=>{n=this._chainOrCall(n,(()=>e.callback(e.hookedCommand,this)))})),n}_parseCommand(e,t){const n=this.parseOptions(t);if(e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._hasImplicitHelpCommand()&&e[0]===this._helpCommandName)return 1===e.length&&this.help(),this._dispatchSubcommand(e[1],[],[this._helpLongFlag]);if(this._defaultCommandName)return f(this,t),this._dispatchSubcommand(this._defaultCommandName,e,t);!this.commands.length||0!==this.args.length||this._actionHandler||this._defaultCommandName||this.help({error:!0}),f(this,n.unknown),this._checkForMissingMandatoryOptions();const r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){let n;return r(),this._processArguments(),n=this._chainOrCallHooks(n,"preAction"),n=this._chainOrCall(n,(()=>this._actionHandler(this.processedArgs))),this.parent&&this.parent.emit(i,e,t),n=this._chainOrCallHooks(n,"postAction"),n}if(this.parent&&this.parent.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?this.help({error:!0}):(r(),this._processArguments())}_findCommand(e){if(e)return this.commands.find((t=>t._name===e||t._aliases.includes(e)))}_findOption(e){return this.options.find((t=>t.is(e)))}_checkForMissingMandatoryOptions(){for(let e=this;e;e=e.parent)e.options.forEach((t=>{t.mandatory&&void 0===e.getOptionValue(t.attributeName())&&e.missingMandatoryOptionValue(t)}))}parseOptions(e){const t=[],n=[];let r=t;const i=e.slice();function s(e){return e.length>1&&"-"===e[0]}let o=null;for(;i.length;){const e=i.shift();if("--"===e){r===n&&r.push(e),r.push(...i);break}if(!o||s(e)){if(o=null,s(e)){const t=this._findOption(e);if(t){if(t.required){const e=i.shift();void 0===e&&this.optionMissingArgument(t),this.emit(`option:${t.name()}`,e)}else if(t.optional){let e=null;i.length>0&&!s(i[0])&&(e=i.shift()),this.emit(`option:${t.name()}`,e)}else this.emit(`option:${t.name()}`);o=t.variadic?t:null;continue}}if(e.length>2&&"-"===e[0]&&"-"!==e[1]){const t=this._findOption(`-${e[1]}`);if(t){t.required||t.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${t.name()}`,e.slice(2)):(this.emit(`option:${t.name()}`),i.unshift(`-${e.slice(2)}`));continue}}if(/^--[^=]+=/.test(e)){const t=e.indexOf("="),n=this._findOption(e.slice(0,t));if(n&&(n.required||n.optional)){this.emit(`option:${n.name()}`,e.slice(t+1));continue}}if(s(e)&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&0===t.length&&0===n.length){if(this._findCommand(e)){t.push(e),i.length>0&&n.push(...i);break}if(e===this._helpCommandName&&this._hasImplicitHelpCommand()){t.push(e),i.length>0&&t.push(...i);break}if(this._defaultCommandName){n.push(e),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){r.push(e),i.length>0&&r.push(...i);break}r.push(e)}else this.emit(`option:${o.name()}`,e)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){const e={},t=this.options.length;for(let n=0;n<t;n++){const t=this.options[n].attributeName();e[t]=t===this._versionOptionName?this._version:this[t]}return e}return this._optionValues}_displayError(e,t,n){this._outputConfiguration.outputError(`${n}\n`,this._outputConfiguration.writeErr),"string"==typeof this._showHelpAfterError?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr("\n"),this.outputHelp({error:!0})),this._exit(e,t,n)}missingArgument(e){const t=`error: missing required argument '${e}'`;this._displayError(1,"commander.missingArgument",t)}optionMissingArgument(e){const t=`error: option '${e.flags}' argument missing`;this._displayError(1,"commander.optionMissingArgument",t)}missingMandatoryOptionValue(e){const t=`error: required option '${e.flags}' not specified`;this._displayError(1,"commander.missingMandatoryOptionValue",t)}unknownOption(e){if(this._allowUnknownOption)return;const t=`error: unknown option '${e}'`;this._displayError(1,"commander.unknownOption",t)}_excessArguments(e){if(this._allowExcessArguments)return;const t=this._args.length,n=1===t?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this._displayError(1,"commander.excessArguments",r)}unknownCommand(){const e=`error: unknown command '${this.args[0]}'`;this._displayError(1,"commander.unknownCommand",e)}version(e,t,n){if(void 0===e)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";const r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this.options.push(r),this.on("option:"+r.name(),(()=>{this._outputConfiguration.writeOut(`${e}\n`),this._exit(0,"commander.version",e)})),this}description(e,t){return void 0===e&&void 0===t?this._description:(this._description=e,t&&(this._argsDescription=t),this)}alias(e){if(void 0===e)return this._aliases[0];let t=this;if(0!==this.commands.length&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");return t._aliases.push(e),this}aliases(e){return void 0===e?this._aliases:(e.forEach((e=>this.alias(e))),this)}usage(e){if(void 0===e){if(this._usage)return this._usage;const e=this._args.map((e=>c(e)));return[].concat(this.options.length||this._hasHelpOption?"[options]":[],this.commands.length?"[command]":[],this._args.length?e:[]).join(" ")}return this._usage=e,this}name(e){return void 0===e?this._name:(this._name=e,this)}helpInformation(e){const t=this.createHelp();return void 0===t.helpWidth&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){const t={error:!!(e=e||{}).error};let n;return n=t.error?e=>this._outputConfiguration.writeErr(e):e=>this._outputConfiguration.writeOut(e),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;"function"==typeof e&&(t=e,e=void 0);const n=this._getHelpContext(e);T(this).reverse().forEach((e=>e.emit("beforeAllHelp",n))),this.emit("beforeHelp",n);let r=this.helpInformation(n);if(t&&(r=t(r),"string"!=typeof r&&!Buffer.isBuffer(r)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(r),this.emit(this._helpLongFlag),this.emit("afterHelp",n),T(this).forEach((e=>e.emit("afterAllHelp",n)))}helpOption(e,t){if("boolean"==typeof e)return this._hasHelpOption=e,this;this._helpFlags=e||this._helpFlags,this._helpDescription=t||this._helpDescription;const n=p(this._helpFlags);return this._helpShortFlag=n.shortFlag,this._helpLongFlag=n.longFlag,this}help(e){this.outputHelp(e);let t=process.exitCode||0;0===t&&e&&"function"!=typeof e&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){const n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${n.join("', '")}'`);const r=`${e}Help`;return this.on(r,(e=>{let n;n="function"==typeof t?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)})),this}}function f(e,t){e._hasHelpOption&&t.find((t=>t===e._helpLongFlag||t===e._helpShortFlag))&&(e.outputHelp(),e._exit(0,"commander.helpDisplayed","(outputHelp)"))}function m(e){return e.map((e=>{if(!e.startsWith("--inspect"))return e;let t,n,r="127.0.0.1",i="9229";return null!==(n=e.match(/^(--inspect(-brk)?)$/))?t=n[1]:null!==(n=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))?(t=n[1],/^\d+$/.test(n[3])?i=n[3]:r=n[3]):null!==(n=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))&&(t=n[1],r=n[3],i=n[4]),t&&"0"!==i?`${t}=${r}:${parseInt(i)+1}`:e}))}function T(e){const t=[];for(let n=e;n;n=n.parent)t.push(n);return t}t.Command=d},8056:(e,t)=>{class n extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}}t.CommanderError=n,t.InvalidArgumentError=class extends n{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}},8917:(e,t,n)=>{const{humanReadableArgName:r}=n(8998);t.Help=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1}visibleCommands(e){const t=e.commands.filter((e=>!e._hidden));if(e._hasImplicitHelpCommand()){const[,n,r]=e._helpCommandnameAndArgs.match(/([^ ]+) *(.*)/),i=e.createCommand(n).helpOption(!1);i.description(e._helpCommandDescription),r&&i.arguments(r),t.push(i)}return this.sortSubcommands&&t.sort(((e,t)=>e.name().localeCompare(t.name()))),t}visibleOptions(e){const t=e.options.filter((e=>!e.hidden)),n=e._hasHelpOption&&e._helpShortFlag&&!e._findOption(e._helpShortFlag),r=e._hasHelpOption&&!e._findOption(e._helpLongFlag);if(n||r){let i;i=n?r?e.createOption(e._helpFlags,e._helpDescription):e.createOption(e._helpShortFlag,e._helpDescription):e.createOption(e._helpLongFlag,e._helpDescription),t.push(i)}if(this.sortOptions){const e=e=>e.short?e.short.replace(/^-/,""):e.long.replace(/^--/,"");t.sort(((t,n)=>e(t).localeCompare(e(n))))}return t}visibleArguments(e){return e._argsDescription&&e._args.forEach((t=>{t.description=t.description||e._argsDescription[t.name()]||""})),e._args.find((e=>e.description))?e._args:[]}subcommandTerm(e){const t=e._args.map((e=>r(e))).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce(((e,n)=>Math.max(e,t.subcommandTerm(n).length)),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce(((e,n)=>Math.max(e,t.optionTerm(n).length)),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce(((e,n)=>Math.max(e,t.argumentTerm(n).length)),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let t=e.parent;t;t=t.parent)n=t.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.description()}optionDescription(e){if(e.negate)return e.description;const t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map((e=>JSON.stringify(e))).join(", ")}`),void 0!==e.defaultValue&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){const t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map((e=>JSON.stringify(e))).join(", ")}`),void 0!==e.defaultValue&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){const n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){const n=t.padWidth(e,t),r=t.helpWidth||80;function i(e,i){if(i){const s=`${e.padEnd(n+2)}${i}`;return t.wrap(s,r-2,n+2)}return e}function s(e){return e.join("\n").replace(/^/gm," ".repeat(2))}let o=[`Usage: ${t.commandUsage(e)}`,""];const a=t.commandDescription(e);a.length>0&&(o=o.concat([a,""]));const c=t.visibleArguments(e).map((e=>i(t.argumentTerm(e),t.argumentDescription(e))));c.length>0&&(o=o.concat(["Arguments:",s(c),""]));const l=t.visibleOptions(e).map((e=>i(t.optionTerm(e),t.optionDescription(e))));l.length>0&&(o=o.concat(["Options:",s(l),""]));const u=t.visibleCommands(e).map((e=>i(t.subcommandTerm(e),t.subcommandDescription(e))));return u.length>0&&(o=o.concat(["Commands:",s(u),""])),o.join("\n")}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,r=40){if(e.match(/[\n]\s+/))return e;const i=t-n;if(i<r)return e;const s=e.substr(0,n),o=e.substr(n),a=" ".repeat(n),c=new RegExp(".{1,"+(i-1)+"}([\\s​]|$)|[^\\s​]+?([\\s​]|$)","g");return s+(o.match(c)||[]).map(((e,t)=>("\n"===e.slice(-1)&&(e=e.slice(0,e.length-1)),(t>0?a:"")+e.trimRight()))).join("\n")}}},5790:(e,t,n)=>{const{InvalidArgumentError:r}=n(8056);function i(e){let t,n;const r=e.split(/[ |,]+/);return r.length>1&&!/^[[<]/.test(r[1])&&(t=r.shift()),n=r.shift(),!t&&/^-[^-]$/.test(n)&&(t=n,n=void 0),{shortFlag:t,longFlag:n}}t.Option=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;const n=i(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t!==this.defaultValue&&Array.isArray(t)?t.concat(e):[e]}choices(e){return this.argChoices=e,this.parseArg=(t,n)=>{if(!e.includes(t))throw new r(`Allowed choices are ${e.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.name().replace(/^no-/,"").split("-").reduce(((e,t)=>e+t[0].toUpperCase()+t.slice(1)))}is(e){return this.short===e||this.long===e}},t.splitOptionFlags=i},366:(e,t,n)=>{"use strict";var r=n(7147),i=n(1017),s=n(7503),o=n(7911);const a=(...e)=>(...t)=>{let n=t;for(let t=0;t<e.length;t++)n=[e[t].apply(void 0,n)];return n[0]},c=(e,t,n,r,i,s)=>{const a=r.clone();let c=0,l=0,u=!1,h=!1;a.find("#content").children().each(((r,p)=>{const d=new o.Cheerio(p);if(!d.hasClass("partintro"))return d.hasClass("sect1")?(u||h?h=!1:(h=!0,u=!0),n(i,a,d,1,"chap",s,++c,h)):d.hasClass("sect0")?(u||h?h=!1:(h=!0,u=!0),t(i,a,d,++l,h)):"preamble"===d.attr("id")?(h=!0,u=!0,e(i,a,d,h)):void 0}))},l=e=>{const t=(n,r,i,s,a,c,l,u)=>{const h=n.depth[l]||n.depth.default,p=u?"index":c(a,s,l);if(h===s)return void e(n,p,r,i,u);const d=`div.sect${s+1}`;var f;e(n,p,r,(f=d,e=>e.clone().find(f).remove().end())(i),u);const m=i.find(d);return 0!==m.length?m.each(((e,i)=>t(n,r,new o.Cheerio(i),s+1,p,c,e+1,!1))):void 0};return t},u=e=>(0===e.find("#toc a[href^=#]").length&&console.log("INFO: Your TOC has no in-document links.\n"),e),h=e=>e.addClass("current");function p(e,t,n){return 1===t?`${e}${n}`:2===t?`${e}_sec${n}`:`${e}-${n}`}const d=function(){return p},f=require("url"),m=r.promises,T=e=>m.mkdir(e,{recursive:!0}).then((t=>e),(e=>e)),_=e=>async t=>{if(await(e=>t=>Promise.allSettled([m.stat(e),m.stat(t)]).then((([e,t])=>"rejected"===t.status||e.value.atimeMs>t.value.atimeMs)))(e)(t)){const n=i.dirname(t);return await E(n)||await T(n),m.copyFile(e,t).then((e=>t))}return!1},E=e=>m.access(e,r.constants.F_OK).then((e=>!0),(e=>!1)),g=/^#|^https:|^http:|^file:|^data:/,A=(e,t)=>n=>{const r=(e=>t=>{const n=i.dirname(e);return i.join(n,t)})(e);(e=>{const t=[];return e.find("link[href], script[src], img[src]").each(((e,n)=>{const r=new o.Cheerio(n),s=r.attr("href")||r.attr("src");s.match(g)||i.isAbsolute(s)||t.push((e=>{const t=i.basename(e),n=t.indexOf("?");return-1===n?e:i.join(i.dirname(e),t.substring(0,n))})(s))})),t})(n).forEach((e=>{return _(r(e))((n=e,i.join(t,n))).catch((t=>console.log(`    Local file linked from the document is missing: ${r(e)}`)));var n}))},C=r.promises,N=e=>{if(0===e.length)return e;const t=new Set;return e.each(((e,n)=>{const r=new o.Cheerio(n);if(r.attr("id"))return;const i=r.attr("href");if(t.has(i))return;t.add(i);const s=O(i);r.attr("id",s)})),e},O=e=>`_footnoteref${e.substring(e.lastIndexOf("_"))}`,v=e=>e.find("a.footnote"),b=r.promises,S=e=>("#content",e=>e.find("#content"))(e),y=(e,t)=>(n,r,i,...s)=>{const o=R(t),c=s.map(o),l=i.clone();var u;return a(S,((...e)=>t=>(e.forEach((e=>t.append(e.clone()))),t.end()))(...c),(e=>t=>(a(S,v,e,N)(t),t))(e(l.find("#footnotes"))),L(r,t.get("navigation")),(u=r,e=>(a((e=>t=>t.find(`#toc a[href^="${e}.html"]`).parent())(u),h)(e),e)),x)(l)},I=d(),k=(e,t,r)=>{const s=((e,t)=>{const n=new Map,r={},i=[];let s=0;const a=(e,t)=>{r[t]=s,i[s]=t,s++,e.find("*[id]").each(((e,r)=>{const i=new o.Cheerio(r).attr("id");i.startsWith("_footnotedef_")||n.set(i,`${t}#${i}`)})),e.attr("id")?n.set(e.attr("id"),t):n.set(e.children().first().attr("id"),t)},u=l(((e,t,n,r,i)=>{a(r,i?"index.html":`${t}.html`)}));return c(((e,t,n,r)=>{a(n,r?"index.html":"preamble.html")}),((e,t,n,r,i)=>{a(n,i?"index.html":`part${r}.html`)}),u,e,t,d()),n.set("navigation",{filename2pageNum:r,filenameList:i}),n})(t.root(),r),h=R(s),p=a((e=>t=>{const{strictMode:n}=e,r=t.root().clone().find("#content > #preamble, #content > .partintro, #content > .sect1, #content > .sect0").remove().end(),i=r.find("#content");return n?(i.children().length>0&&(s=i,console.log("INFO: Non-Asciidoc contents encountered under <div id='#content'>.\nINFO: They are ignored and not included in chunked html by default.\nINFO: If you want them to be included, use the '--no-strictMode' command option."),s.html().trim().split(/\n+/).forEach((e=>console.log(`INFO: Found content => ${e}`))),console.log()),i.empty().end()):r;var s})(r),u,h,(m=r.outdir,e=>(e.find("style").each(((e,t)=>{const n=`style${e}.css`,r=new o.Cheerio(t);C.writeFile(i.join(m,n),new o.Cheerio(t).contents().text()),r.replaceWith(new o.Cheerio(`<link rel='stylesheet' href='${n}' type='text/css' />`))})),e)),(e=>t=>{const{css:r,outdir:s}=e;if(!r||0==r.length)return t;const o=t.find("head");return r.forEach((e=>o.append(((e,t)=>{const r=i.basename(t),s=i.join(e,r);return"asciidoctor-chunker.css"===t?Promise.resolve().then(n.t.bind(n,2846,17)).then((e=>C.writeFile(s,e.default))).catch((e=>{const t=i.dirname((0,f.fileURLToPath)("file:///Users/shito/Documents/git-repositories/javascript/asciidoctor-chunker/src/CSS.mjs")),n=i.resolve(t,"css","asciidoctor-chunker.css");_(n)(s)})):_(t)(s),`<link rel="stylesheet" href="${r}" type="text/css" />`})(s,e)))),t})(r),(e=>t=>(new o.Cheerio(`<li><a href="index.html">${e.titlePage}</a></li>`).insertBefore(t.find("div#toc > ul > li:first-child")),t))(r))(t);var m;const T=(E=(e=>{const t=new Set;return e.find("div.footnote").each(((e,n)=>{t.add(new o.Cheerio(n).attr("id"))})),t})(t("#footnotes")),e=>t=>{if(0===t.length)return e.empty().end(),t;const n=new Set([...E]);return t.each(((e,t)=>{n.delete(new o.Cheerio(t).attr("href").substring(1))})),n.forEach((t=>{e.find(`#${t}`).remove().end()})),t});var E;c(((e,t,n)=>(r,i,s,o)=>{const a=o?"index":"preamble";e(a,n(r,a,t,s))})(e,p,y(T,s)),((e,t,n)=>(r,i,s,o,a)=>{const c=a?"index":`part${o}`;e(c,((e,t,n,r,i)=>i(e,t,n,...r.next().hasClass("partintro")?[r,r.next()]:[r]))(r,c,t,s,n))})(e,p,y(T,s)),((e,t,n,r)=>l(((n,i,s,o,a)=>{e(i,r(n,i,t,o))})))(e,p,0,y(T,s)),t.root(),r,I)},R=e=>t=>(t.find("a[href^=#]").each(((t,n)=>{const r=new o.Cheerio(n),i=r.attr("href");if(!i.startsWith("#_footnotedef_")&&!i.startsWith("#_footnoteref_")){const t=i.substring(1),n=e.get(t);if(n)r.attr("href",n);else{const e=r.attr("class")?`${r.attr("class")} target-missing`:"target-missing";r.attr("href",`#${t}`),r.attr("class",e)}}})),t),L=(e,{filename2pageNum:t,filenameList:n})=>r=>{const i=t[`${e}.html`],s=i>0?n[i-1]:null,a=i<n.length-1?n[i+1]:null,c=M(s,a),l=r.find("body > div:last-of-type");return"footer"===l.attr("id")?new o.Cheerio(c).insertBefore(l):new o.Cheerio(c).insertAfter(l),r},M=(e,t)=>`\n<nav>\n  ${e?`<a rel="prev" href="${e}" class="nav nav-prev"\n        title="Previous page"\n        aria-label="Previous page"\n        aria-keyshortcuts="Left">\n        <i class="fa fa-angle-left"></i>\n     </a>`:""}\n  ${t?`<a rel="next" href="${t}" class="nav nav-next"\n        title="Next page"\n        aria-label="Next page"\n        aria-keyshortcuts="Right">\n        <i class="fa fa-angle-right"></i>\n     </a>`:""}\n  <div style="clear: both"></div>\n</nav>\n`,x=e=>(e.find("html").append("\n  <script>\n  function isInViewport(ele) {\n    const rect = ele.getBoundingClientRect();\n    return (\n        rect.top >= 0 &&\n        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n    );\n  }\n  function yPosition (ele) {\n    const rect = ele.getBoundingClientRect();\n    return (rect.top - 20); // 20px above\n  }\n  let curr = document.getElementsByClassName('current');\n  if (!isInViewport(curr[curr.length - 1])) {\n    document.getElementById('toc').scrollTo({\n      top: yPosition(curr[0]),\n      left: 0,\n      behavior: 'smooth'\n    });\n  }\n\n  /* For page navigation */\n  function gotoPage(selector) {\n    const button = document.querySelector(selector);\n    if (button)\n      window.location.href = button.href;\n  }\n  document.addEventListener('keydown', e => {\n    switch (e.key) {\n      case 'ArrowRight':\n        e.preventDefault();\n        gotoPage('.nav-next');\n        break;\n      case 'ArrowLeft':\n        e.preventDefault();\n        gotoPage('.nav-prev');\n        break;\n    }\n  });\n  <\/script>\n  "),e);var P=n(7461);const D=(e,t)=>e.split(","),w=(e,t)=>{const[n,r]=e.split("-").map((e=>parseInt(e)));return r?new Array(r-n+1).fill(0).reduce(((e,r,i)=>({...e,[i+n]:+t})),{}):{[n]:+t}},H={depth:1,outdir:"html_chunks",css:["asciidoctor-chunker.css"],strictMode:!0,titlePage:"Titlepage"};console.log();const{singleHTML:F,config:U}=(e=>{const t=P.version("1.0.5").name("node asciidoctor-chunker.js").usage("<single.html> [options]").option("-o, --outdir <directory>","The output directory where the chunked html will be written to.","html_chunks").option("--depth <depth specifier>","See the description above.","1").option("--css <paths>","The comma-separated list of css file paths to include.  The paths must be accessible from the current directory.",D).option("--no-strictMode","Disables strict mode.").option("--titlePage <title string>","Sets title page TOC string.","Titlepage").description("Description:\n  Splits a single html document generated by Asciidoctor into\n  multiple chunked html files.\n  The default output directory is 'html_chunks'.  You can override\n  it via the '-o' option.\n\n  The default splits are made by preamble, parts, and chapters.\n  You can specify the extraction level with the '--depth' option.\n\n  If you have any custom elements inserted under <div d=#content>\n  in the single-source html, asciidoctor-chunker ignores them by\n  default.  If you want them to be included into the chunked html,\n  set the '--no-strictMode' option.  The elements will be copied\n  to every chunked page.\n\n  By default 'asciidoctor-chunker.css' is included in the\n  output directory.  It provides the non-opinionated page\n  navigation bar at the bottom of every chunked page.\n  You can override this by giving a comma-separated list\n  of paths to your custom css files.  They will be copied\n  into the output directory, so their paths must be accessible\n  to asciidoctor-chunker.\n\nThe Depth Specifier:\n  You can list multiple settings by separating each specifier\n  with a comma.  Each specifier consists of either a single\n  number or two numbers separated by a colon.\n\n  A single number sets the default level of extraction.\n  Number 1 is the application default and it extracts the\n  chapter level.  Number 2 is for section extraction, 3 for\n  subsection, and so on, up to 6 which is the maximum section\n  level of Asciidoctor.\n\n  The list of colon-separated numbers, chap:level, can\n  change the extraction depth for specific chapters.\n  so 3:2 means chapter 3 is extracted down to 2 levels (i.e.\n  section level). You can use a hyphen to specify the range\n  of chapters to set as chapFrom-chapTo:level, so 1-3:5 means\n  chapter 1 through 5 should be extracted with the depth\n  level 5.\n\nExample:\n  --depth 2          Sets default level 2, all the chapters and\n                     sections will be extracted.\n  --depth 3,1:2,8:5  Sets default level 3, level 2 for Ch. 1,\n                     and level 5 for Ch. 8.\n  --depth 1,3-8:2    Sets default level 1, and level 2 for Chs. 3 to 8.\n  --depth 3-8:3      No default is set so default level is 1, and\n                     level 3 for Chs. 3 to 8.").parse(e),{depth:n,outdir:r,strictMode:i,titlePage:s,css:o=["asciidoctor-chunker.css"]}=t.opts(),a=t.args;1!==a.length&&t.help();const c=(e=>e.split(",").map((e=>{const[t,n]=e.split(":");return n?w(t,n):{default:+t}})).reduce(((e,t)=>({...e,...t})),{default:1}))(n);return{singleHTML:a[0],config:{depth:c,outdir:r,css:o,strictMode:i,titlePage:s}}})(process.argv);(async(e,t=H)=>{const{outdir:n}=t;await E(n)||await T(n);const o=(a=n,(e,t)=>{const n=i.format({dir:a,base:`${e}.html`});b.writeFile(n,t.html()).catch((e=>console.log("File write error:",n)))});var a;const c=(l=e,s.load(r.readFileSync(l)));var l;A(e,n)(c.root()),k(o,c,t),console.log(`Successfully chunked! => ${i.join(n,"index.html")}\n`)})(F,U)},3600:e=>{"use strict";e.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},9323:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ﬃ","fflig":"ﬀ","ffllig":"ﬄ","Ffr":"𝔉","ffr":"𝔣","filig":"ﬁ","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"ﬂ","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"⁣","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"Ĳ","ijlig":"ĳ","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"⁣","InvisibleTimes":"⁢","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"⁢","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ŉ","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":"  ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"}')},9591:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}')},2586:e=>{"use strict";e.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')}},r={};function i(e){var t=r[e];if(void 0!==t)return t.exports;var s=r[e]={exports:{}};return n[e].call(s.exports,s,s.exports,i),s.exports}i.c=r,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var s=Object.create(null);i.r(s);var o={};e=e||[null,t({}),t([]),t(t)];for(var a=2&r&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((e=>o[e]=()=>n[e]));return o.default=()=>n,i.d(s,o),s},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i(i.s=366)})();
\ No newline at end of file
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/cgenerator.py
new file mode 100644
index 0000000..ef8d681
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/cgenerator.py
@@ -0,0 +1,513 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import os
+import re
+
+from generator import (GeneratorOptions,
+                       MissingGeneratorOptionsConventionsError,
+                       MissingGeneratorOptionsError, MissingRegistryError,
+                       OutputGenerator, noneStr, regSortFeatures, write)
+
+class CGeneratorOptions(GeneratorOptions):
+    """CGeneratorOptions - subclass of GeneratorOptions.
+
+    Adds options used by COutputGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText='',
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 protectExtensionProto=None,
+                 protectExtensionProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 genStructExtendsComment=False,
+                 aliasMacro='',
+                 misracstyle=False,
+                 misracppstyle=False,
+                 **kwargs
+                 ):
+        """Constructor.
+        Additional parameters beyond parent class:
+
+        - prefixText - list of strings to prefix generated header with
+        (usually a copyright statement + calling convention macros)
+        - protectFile - True if multiple inclusion protection should be
+        generated (based on the filename) around the entire header
+        - protectFeature - True if #ifndef..#endif protection should be
+        generated around a feature interface in the header file
+        - genFuncPointers - True if function pointer typedefs should be
+        generated
+        - protectProto - If conditional protection should be generated
+        around prototype declarations, set to either '#ifdef'
+        to require opt-in (#ifdef protectProtoStr) or '#ifndef'
+        to require opt-out (#ifndef protectProtoStr). Otherwise
+        set to None.
+        - protectProtoStr - #ifdef/#ifndef symbol to use around prototype
+        declarations, if protectProto is set
+        - protectExtensionProto - If conditional protection should be generated
+        around extension prototype declarations, set to either '#ifdef'
+        to require opt-in (#ifdef protectExtensionProtoStr) or '#ifndef'
+        to require opt-out (#ifndef protectExtensionProtoStr). Otherwise
+        set to None
+        - protectExtensionProtoStr - #ifdef/#ifndef symbol to use around
+        extension prototype declarations, if protectExtensionProto is set
+        - apicall - string to use for the function declaration prefix,
+        such as APICALL on Windows
+        - apientry - string to use for the calling convention macro,
+        in typedefs, such as APIENTRY
+        - apientryp - string to use for the calling convention macro
+        in function pointer typedefs, such as APIENTRYP
+        - indentFuncProto - True if prototype declarations should put each
+        parameter on a separate line
+        - indentFuncPointer - True if typedefed function pointers should put each
+        parameter on a separate line
+        - alignFuncParam - if nonzero and parameters are being put on a
+        separate line, align parameter names at the specified column
+        - genEnumBeginEndRange - True if BEGIN_RANGE / END_RANGE macros should
+        be generated for enumerated types
+        - genAliasMacro - True if the OpenXR alias macro should be generated
+        for aliased types (unclear what other circumstances this is useful)
+        - genStructExtendsComment - True if comments showing the structures
+        whose pNext chain a structure extends are included before its
+        definition
+        - aliasMacro - alias macro to inject when genAliasMacro is True
+        - misracstyle - generate MISRA C-friendly headers
+        - misracppstyle - generate MISRA C++-friendly headers"""
+
+        GeneratorOptions.__init__(self, **kwargs)
+
+        self.prefixText = prefixText
+        """list of strings to prefix generated header with (usually a copyright statement + calling convention macros)."""
+
+        self.genFuncPointers = genFuncPointers
+        """True if function pointer typedefs should be generated"""
+
+        self.protectFile = protectFile
+        """True if multiple inclusion protection should be generated (based on the filename) around the entire header."""
+
+        self.protectFeature = protectFeature
+        """True if #ifndef..#endif protection should be generated around a feature interface in the header file."""
+
+        self.protectProto = protectProto
+        """If conditional protection should be generated around prototype declarations, set to either '#ifdef' to require opt-in (#ifdef protectProtoStr) or '#ifndef' to require opt-out (#ifndef protectProtoStr). Otherwise set to None."""
+
+        self.protectProtoStr = protectProtoStr
+        """#ifdef/#ifndef symbol to use around prototype declarations, if protectProto is set"""
+
+        self.protectExtensionProto = protectExtensionProto
+        """If conditional protection should be generated around extension prototype declarations, set to either '#ifdef' to require opt-in (#ifdef protectExtensionProtoStr) or '#ifndef' to require opt-out (#ifndef protectExtensionProtoStr). Otherwise set to None."""
+
+        self.protectExtensionProtoStr = protectExtensionProtoStr
+        """#ifdef/#ifndef symbol to use around extension prototype declarations, if protectExtensionProto is set"""
+
+        self.apicall = apicall
+        """string to use for the function declaration prefix, such as APICALL on Windows."""
+
+        self.apientry = apientry
+        """string to use for the calling convention macro, in typedefs, such as APIENTRY."""
+
+        self.apientryp = apientryp
+        """string to use for the calling convention macro in function pointer typedefs, such as APIENTRYP."""
+
+        self.indentFuncProto = indentFuncProto
+        """True if prototype declarations should put each parameter on a separate line"""
+
+        self.indentFuncPointer = indentFuncPointer
+        """True if typedefed function pointers should put each parameter on a separate line"""
+
+        self.alignFuncParam = alignFuncParam
+        """if nonzero and parameters are being put on a separate line, align parameter names at the specified column"""
+
+        self.genEnumBeginEndRange = genEnumBeginEndRange
+        """True if BEGIN_RANGE / END_RANGE macros should be generated for enumerated types"""
+
+        self.genAliasMacro = genAliasMacro
+        """True if the OpenXR alias macro should be generated for aliased types (unclear what other circumstances this is useful)"""
+
+        self.genStructExtendsComment = genStructExtendsComment
+        """True if comments showing the structures whose pNext chain a structure extends are included before its definition"""
+
+        self.aliasMacro = aliasMacro
+        """alias macro to inject when genAliasMacro is True"""
+
+        self.misracstyle = misracstyle
+        """generate MISRA C-friendly headers"""
+
+        self.misracppstyle = misracppstyle
+        """generate MISRA C++-friendly headers"""
+
+        self.codeGenerator = True
+        """True if this generator makes compilable code"""
+
+
+class COutputGenerator(OutputGenerator):
+    """Generates C-language API interfaces."""
+
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'funcpointer', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS + ['commandPointer', 'command']
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias = None
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        # C-specific
+        #
+        # Multiple inclusion protection & C++ wrappers.
+        if self.genOpts.protectFile and self.genOpts.filename:
+            headerSym = re.sub(r'\.h', '_h_',
+                               os.path.basename(self.genOpts.filename)).upper()
+            write('#ifndef', headerSym, file=self.outFile)
+            write('#define', headerSym, '1', file=self.outFile)
+            self.newline()
+
+        # User-supplied prefix text, if any (list of strings)
+        if genOpts.prefixText:
+            for s in genOpts.prefixText:
+                write(s, file=self.outFile)
+
+        # C++ extern wrapper - after prefix lines so they can add includes.
+        self.newline()
+        write('#ifdef __cplusplus', file=self.outFile)
+        write('extern "C" {', file=self.outFile)
+        write('#endif', file=self.outFile)
+        self.newline()
+
+    def endFile(self):
+        # C-specific
+        # Finish C++ wrapper and multiple inclusion protection
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        self.newline()
+        write('#ifdef __cplusplus', file=self.outFile)
+        write('}', file=self.outFile)
+        write('#endif', file=self.outFile)
+        if self.genOpts.protectFile and self.genOpts.filename:
+            self.newline()
+            write('#endif', file=self.outFile)
+        # Finish processing in superclass
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+        # C-specific
+        # Accumulate includes, defines, types, enums, function pointer typedefs,
+        # end function prototypes separately for this feature. They are only
+        # printed in endFeature().
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def _endProtectComment(self, protect_str, protect_directive='#ifdef'):
+        if protect_directive is None or protect_str is None:
+            raise RuntimeError('Should not call in here without something to protect')
+
+        # Do not put comments after #endif closing blocks if this is not set
+        if not self.genOpts.conventions.protectProtoComment:
+            return ''
+        elif 'ifdef' in protect_directive:
+            return f' /* {protect_str} */'
+        else:
+            return f' /* !{protect_str} */'
+
+    def endFeature(self):
+        "Actually write the interface to the output file."
+        # C-specific
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts is None:
+                    raise MissingGeneratorOptionsError()
+                if self.genOpts.conventions is None:
+                    raise MissingGeneratorOptionsConventionsError()
+                is_core = self.featureName and self.featureName.startswith(self.conventions.api_prefix + 'VERSION_')
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+                    self.newline()
+                    if self.genOpts.protectFeature:
+                        write('#ifndef', self.featureName, file=self.outFile)
+
+                    # If type declarations are needed by other features based on
+                    # this one, it may be necessary to suppress the ExtraProtect,
+                    # or move it below the 'for section...' loop.
+                    if self.featureExtraProtect is not None:
+                        write('#ifdef', self.featureExtraProtect, file=self.outFile)
+                    self.newline()
+
+                    # Generate warning of possible use in IDEs
+                    write(f'// {self.featureName} is a preprocessor guard. Do not pass it to API calls.', file=self.outFile)
+                    write('#define', self.featureName, '1', file=self.outFile)
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+                    if self.genOpts.genFuncPointers and self.sections['commandPointer']:
+                        write('\n'.join(self.sections['commandPointer']), file=self.outFile)
+                        self.newline()
+
+                    if self.sections['command']:
+                        if self.genOpts.protectProto:
+                            write(self.genOpts.protectProto,
+                                  self.genOpts.protectProtoStr, file=self.outFile)
+                        if self.genOpts.protectExtensionProto and not is_core:
+                            write(self.genOpts.protectExtensionProto,
+                                  self.genOpts.protectExtensionProtoStr, file=self.outFile)
+                        write('\n'.join(self.sections['command']), end='', file=self.outFile)
+                        if self.genOpts.protectExtensionProto and not is_core:
+                            write('#endif' +
+                                  self._endProtectComment(protect_directive=self.genOpts.protectExtensionProto,
+                                                          protect_str=self.genOpts.protectExtensionProtoStr),
+                                  file=self.outFile)
+                        if self.genOpts.protectProto:
+                            write('#endif' +
+                                  self._endProtectComment(protect_directive=self.genOpts.protectProto,
+                                                          protect_str=self.genOpts.protectProtoStr),
+                                  file=self.outFile)
+                        else:
+                            self.newline()
+
+                    if self.featureExtraProtect is not None:
+                        write('#endif' +
+                              self._endProtectComment(protect_str=self.featureExtraProtect),
+                              file=self.outFile)
+
+                    if self.genOpts.protectFeature:
+                        write('#endif' +
+                              self._endProtectComment(protect_str=self.featureName),
+                              file=self.outFile)
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text):
+        "Append a definition to the specified section"
+
+        if section is None:
+            self.logMsg('error', 'Missing section in appendSection (probably a <type> element missing its \'category\' attribute. Text:', text)
+            exit(1)
+
+        self.sections[section].append(text)
+        self.feature_not_empty = True
+
+    def genType(self, typeinfo, name, alias):
+        "Generate type."
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+
+        # Vulkan:
+        # Determine the category of the type, and the type section to add
+        # its definition to.
+        # 'funcpointer' is added to the 'struct' section as a workaround for
+        # internal issue #877, since structures and function pointer types
+        # can have cross-dependencies.
+        category = typeElem.get('category')
+        if category == 'funcpointer':
+            section = 'struct'
+        else:
+            section = category
+
+        if category in ('struct', 'union'):
+            # If the type is a struct type, generate it using the
+            # special-purpose generator.
+            self.genStruct(typeinfo, name, alias)
+        else:
+            if self.genOpts is None:
+                raise MissingGeneratorOptionsError()
+            # OpenXR: this section was not under 'else:' previously, just fell through
+            if alias:
+                # If the type is an alias, just emit a typedef declaration
+                body = 'typedef ' + alias + ' ' + name + ';\n'
+            else:
+                # Replace <apientry /> tags with an APIENTRY-style string
+                # (from self.genOpts). Copy other text through unchanged.
+                # If the resulting text is an empty string, do not emit it.
+                body = noneStr(typeElem.text)
+                for elem in typeElem:
+                    if elem.tag == 'apientry':
+                        body += self.genOpts.apientry + noneStr(elem.tail)
+                    else:
+                        body += noneStr(elem.text) + noneStr(elem.tail)
+                if category == 'define' and self.misracppstyle():
+                    body = body.replace("(uint32_t)", "static_cast<uint32_t>")
+            if body:
+                # Add extra newline after multi-line entries.
+                if '\n' in body[0:-1]:
+                    body += '\n'
+                self.appendSection(section, body)
+
+    def genProtectString(self, protect_str):
+        """Generate protection string.
+
+        Protection strings are the strings defining the OS/Platform/Graphics
+        requirements for a given API command.  When generating the
+        language header files, we need to make sure the items specific to a
+        graphics API or OS platform are properly wrapped in #ifs."""
+        protect_if_str = ''
+        protect_end_str = ''
+        if not protect_str:
+            return (protect_if_str, protect_end_str)
+
+        if ',' in protect_str:
+            protect_list = protect_str.split(',')
+            protect_defs = ('defined(%s)' % d for d in protect_list)
+            protect_def_str = ' && '.join(protect_defs)
+            protect_if_str = '#if %s\n' % protect_def_str
+            protect_end_str = '#endif // %s\n' % protect_def_str
+        else:
+            protect_if_str = '#ifdef %s\n' % protect_str
+            protect_end_str = '#endif // %s\n' % protect_str
+
+        return (protect_if_str, protect_end_str)
+
+    def typeMayAlias(self, typeName):
+        if not self.may_alias:
+            if self.registry is None:
+                raise MissingRegistryError()
+            # First time we have asked if a type may alias.
+            # So, populate the set of all names of types that may.
+
+            # Everyone with an explicit mayalias="true"
+            self.may_alias = set(typeName
+                                 for typeName, data in self.registry.typedict.items()
+                                 if data.elem.get('mayalias') == 'true')
+
+            # Every type mentioned in some other type's parentstruct attribute.
+            polymorphic_bases = (otherType.elem.get('parentstruct')
+                                 for otherType in self.registry.typedict.values())
+            self.may_alias.update(set(x for x in polymorphic_bases
+                                      if x is not None))
+        return typeName in self.may_alias
+
+    def genStruct(self, typeinfo, typeName, alias):
+        """Generate struct (e.g. C "struct" type).
+
+        This is a special case of the <type> tag where the contents are
+        interpreted as a set of <member> tags instead of freeform C
+        C type declarations. The <member> tags are just like <param>
+        tags - they are a declaration of a struct or union member.
+        Only simple member declarations are supported (no nested
+        structs etc.)
+
+        If alias is not None, then this struct aliases another; just
+        generate a typedef of that alias."""
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+
+        typeElem = typeinfo.elem
+
+        if alias:
+            body = 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            body = ''
+            (protect_begin, protect_end) = self.genProtectString(typeElem.get('protect'))
+            if protect_begin:
+                body += protect_begin
+
+            if self.genOpts.genStructExtendsComment:
+                structextends = typeElem.get('structextends')
+                body += '// ' + typeName + ' extends ' + structextends + '\n' if structextends else ''
+
+            body += 'typedef ' + typeElem.get('category')
+
+            # This is an OpenXR-specific alternative where aliasing refers
+            # to an inheritance hierarchy of types rather than C-level type
+            # aliases.
+            if self.genOpts.genAliasMacro and self.typeMayAlias(typeName):
+                body += ' ' + self.genOpts.aliasMacro
+
+            body += ' ' + typeName + ' {\n'
+
+            targetLen = self.getMaxCParamTypeLength(typeinfo)
+            for member in typeElem.findall('.//member'):
+                body += self.makeCParamDecl(member, targetLen + 4)
+                body += ';\n'
+            body += '} ' + typeName + ';\n'
+            if protect_end:
+                body += protect_end
+
+        self.appendSection('struct', body)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        """Generate groups (e.g. C "enum" type).
+
+        These are concatenated together with other types.
+
+        If alias is not None, it is the name of another group type
+        which aliases this type; just generate that alias."""
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+
+        # After either enumerated type or alias paths, add the declaration
+        # to the appropriate section for the group being defined.
+        if groupElem.get('type') == 'bitmask':
+            section = 'bitmask'
+        else:
+            section = 'group'
+
+        if alias:
+            # If the group name is aliased, just emit a typedef declaration
+            # for the alias.
+            body = 'typedef ' + alias + ' ' + groupName + ';\n'
+            self.appendSection(section, body)
+        else:
+            if self.genOpts is None:
+                raise MissingGeneratorOptionsError()
+            (section, body) = self.buildEnumCDecl(self.genOpts.genEnumBeginEndRange, groupinfo, groupName)
+            self.appendSection(section, '\n' + body)
+
+    def genEnum(self, enuminfo, name, alias):
+        """Generate the C declaration for a constant (a single <enum> value).
+
+        <enum> tags may specify their values in several ways, but are usually
+        just integers."""
+
+        OutputGenerator.genEnum(self, enuminfo, name, alias)
+
+        body = self.buildConstantCDecl(enuminfo, name, alias)
+        self.appendSection('enum', body)
+
+    def genCmd(self, cmdinfo, name, alias):
+        "Command generation"
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        # if alias:
+        #     prefix = '// ' + name + ' is an alias of command ' + alias + '\n'
+        # else:
+        #     prefix = ''
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+
+        prefix = ''
+        decls = self.makeCDecls(cmdinfo.elem)
+        self.appendSection('command', prefix + decls[0] + '\n')
+        if self.genOpts.genFuncPointers:
+            self.appendSection('commandPointer', decls[1])
+
+    def misracstyle(self):
+        return self.genOpts.misracstyle;
+
+    def misracppstyle(self):
+        return self.genOpts.misracppstyle;
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/checkXrefs b/codegen/vulkan/vulkan-docs-next/scripts/checkXrefs
new file mode 100755
index 0000000..df9c51c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/checkXrefs
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Copyright 2015-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# checkXrefs - check internal links in a Vulkan HTML spec
+# Usage: checkXrefs file.html
+# Prints a list of internal hrefs with no corresponding anchors.
+# (There are many anchors with no corresponding hrefs - this is OK).
+
+xrefs=`tempfile`
+ids=`tempfile`
+
+sed -e 's/ href="#/\nhref="#/g' < $1 | \
+    grep 'href="#' | \
+    sed -e 's/href="#//g' -e 's/"[ >].*//g' | \
+    sort | uniq > $xrefs
+sed -e 's/ id="/\nid="/g' < $1 | \
+    grep 'id="' | \
+    sed -e 's/id="//g' -e 's/"[ >].*//g' | \
+    sort | uniq > $ids
+
+comm -23 $xrefs $ids
+
+rm $xrefs $ids 1>&2
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/check_html_xrefs.py b/codegen/vulkan/vulkan-docs-next/scripts/check_html_xrefs.py
new file mode 100755
index 0000000..9f38fe0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/check_html_xrefs.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# check_html_xrefs - simple-minded check for internal xrefs in spec HTML
+# that do not exist.
+
+# Usage: check_html_xrefs file
+# Just reports bad xrefs, not where they occur
+
+import argparse
+import re
+import sys
+from lxml import etree
+
+SECTNAME = re.compile(r'sect(?P<level>\d+)')
+
+def find_parent_ids(elem, href):
+    """Find section titles in parents, which are the 'id' elements of '<hN'
+       children of '<div class="sectM"' tags, and N = M + 1. This may be
+       specific to the Vulkan spec, though - hierarchy could be different in
+       other asciidoctor documents. Returns a list of [ anchor, title ].
+
+       elem - this node
+       href - href link text of elem"""
+
+    # Find parent <div> with class="sect#"
+    parent = elem.getparent()
+    while parent is not None:
+        if parent.tag == 'div':
+            cssclass = parent.get('class')
+            matches = SECTNAME.match(cssclass)
+            if matches is not None:
+                level = int(matches.group('level'))
+                # Look for corresponding header tag in this div
+                helem = parent.find('./h{}'.format(level+1))
+                if helem is not None:
+                    return [ helem.get('id'), ''.join(helem.itertext()) ]
+        parent = parent.getparent()
+    return [ '** NO PARENT NODE IDENTIFIED **', '' ]
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='Path to registry XML')
+    args = parser.parse_args()
+
+    for filename in args.files:
+        parser = etree.HTMLParser()
+        tree = etree.parse(filename, parser)
+
+        # Find all 'id' elements
+        id_elems = tree.findall('.//*[@id]')
+        ids = set()
+        for elem in id_elems:
+            id = elem.get('id')
+            if id in ids:
+                True
+                # print('Duplicate ID attribute:', id)
+            else:
+                ids.add(id)
+
+        # Find all internal 'href' attributes and see if they are valid
+        # Keep an [element, href] list for tracking parents
+        # Also keep a count of each href
+        ref_elems = tree.findall('.//a[@href]')
+        refs = []
+        count = {}
+        for elem in ref_elems:
+            href = elem.get('href')
+            # If not a local href, skip it
+            if href[0] == '#':
+                # If there is a corresponding id, skip it
+                href = href[1:]
+                if href not in ids:
+                    if href in count:
+                        refs.append((elem, href))
+                        True
+                        count[href] = count[href] + 1
+                    else:
+                        refs.append((elem, href))
+                        count[href] = 1
+            else:
+                True
+                # print('Skipping external href:', ref)
+
+        # Check for hrefs not found in ids
+        if len(refs) > 0:
+            print('Found bad links in {}:'.format(filename))
+            for (elem, href) in refs:
+                parents = find_parent_ids(elem, href)
+                print('{:<40} in {:<28} ({})'.format(href, parents[0], parents[1]))
+            sys.exit(1)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/check_spec_links.py b/codegen/vulkan/vulkan-docs-next/scripts/check_spec_links.py
new file mode 100755
index 0000000..f4ae232
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/check_spec_links.py
@@ -0,0 +1,182 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose:      This file performs some basic checks of the custom macros
+#               used in the AsciiDoctor source for the spec, especially
+#               related to the validity of the entities linked-to.
+
+from pathlib import Path
+
+from reg import Registry
+from spec_tools.entity_db import EntityDatabase
+from spec_tools.macro_checker import MacroChecker
+from spec_tools.macro_checker_file import MacroCheckerFile
+from spec_tools.main import checkerMain
+from spec_tools.shared import (AUTO_FIX_STRING, EXTENSION_CATEGORY, MessageId,
+                               MessageType)
+
+###
+# "Configuration" constants
+
+FREEFORM_CATEGORY = 'freeform'
+
+# defines mentioned in spec but not needed in registry
+EXTRA_DEFINES = (
+    'VKAPI_ATTR',
+    'VKAPI_CALL',
+    'VKAPI_PTR',
+    'VK_NO_STDDEF_H',
+    'VK_NO_STDINT_H',
+    )
+
+# Extra freeform refpages in addition to EXTRA_DEFINES
+EXTRA_REFPAGES = (
+    'VK_VERSION_1_0',
+    'VK_VERSION_1_1',
+    'VK_VERSION_1_2',
+    'VK_VERSION_1_3',
+    'WSIheaders',
+    'provisional-headers',
+    )
+
+# These are marked with the code: macro
+SYSTEM_TYPES = set(('void', 'char', 'float', 'size_t', 'uintptr_t',
+                    'int8_t', 'uint8_t',
+                    'int32_t', 'uint32_t',
+                    'int64_t', 'uint64_t'))
+
+ROOT = Path(__file__).resolve().parent.parent
+DEFAULT_DISABLED_MESSAGES = set((
+    MessageId.LEGACY,
+    MessageId.REFPAGE_MISSING,
+    MessageId.MISSING_MACRO,
+    MessageId.EXTENSION,
+    # TODO *text macro checking actually needs fixing for Vulkan
+    MessageId.MISUSED_TEXT,
+    MessageId.MISSING_TEXT
+))
+
+CWD = Path('.').resolve()
+
+
+class VulkanEntityDatabase(EntityDatabase):
+    """Vulkan-specific subclass of EntityDatabase."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self._conditionally_recognized = set(('fname', 'sname'))
+
+    def makeRegistry(self):
+        registryFile = str(ROOT / 'xml/vk.xml')
+        registry = Registry()
+        registry.loadFile(registryFile)
+        return registry
+
+    def getNamePrefix(self):
+        return "vk"
+
+    def getPlatformRequires(self):
+        return 'vk_platform'
+
+    def getSystemTypes(self):
+        return SYSTEM_TYPES
+
+    def populateMacros(self):
+        self.addMacros('t', ['link', 'name'], ['funcpointers', 'flags'])
+
+    def populateEntities(self):
+        # These are not mentioned in the XML
+        for name in EXTRA_DEFINES:
+            self.addEntity(name, 'dlink',
+                           category=FREEFORM_CATEGORY, generates=False)
+        for name in EXTRA_REFPAGES:
+            self.addEntity(name, 'code',
+                           category=FREEFORM_CATEGORY, generates=False)
+
+    def shouldBeRecognized(self, macro, entity_name):
+        """Determine, based on the macro and the name provided, if we should expect to recognize the entity."""
+        if super().shouldBeRecognized(macro, entity_name):
+            return True
+
+        # The *name: macros in Vulkan should also be recognized if the entity name matches the pattern.
+        if macro in self._conditionally_recognized and self.likelyRecognizedEntity(entity_name):
+            return True
+        return False
+
+
+class VulkanMacroCheckerFile(MacroCheckerFile):
+    """Vulkan-specific subclass of MacroCheckerFile."""
+
+    def perform_entity_check(self, type):
+        """Returns True if an entity check should be performed on this
+           refpage type.
+
+           Overrides base class definition for Vulkan, since we have refpage
+           types which do not correspond to entities in the API."""
+
+        return type != 'builtins' and type != 'spirv'
+
+    def handleWrongMacro(self, msg, data):
+        """Report an appropriate message when we found that the macro used is incorrect.
+
+        May be overridden depending on each API's behavior regarding macro misuse:
+        e.g. in some cases, it may be considered a MessageId.LEGACY warning rather than
+        a MessageId.WRONG_MACRO or MessageId.EXTENSION.
+        """
+        message_type = MessageType.WARNING
+        message_id = MessageId.WRONG_MACRO
+        group = 'macro'
+
+        if data.category == EXTENSION_CATEGORY:
+            # Ah, this is an extension
+            msg.append(
+                'This is apparently an extension name, which should be marked up as a link.')
+            message_id = MessageId.EXTENSION
+            group = None  # replace the whole thing
+        else:
+            # Non-extension, we found the macro though.
+            if data.macro[0] == self.macro[0] and data.macro[1:] == 'link' and self.macro[1:] == 'name':
+                # First letter matches, old is 'name', new is 'link':
+                # This is legacy markup
+                msg.append(
+                    'This is legacy markup that has not been updated yet.')
+                message_id = MessageId.LEGACY
+            else:
+                # Not legacy, just wrong.
+                message_type = MessageType.ERROR
+
+        msg.append(AUTO_FIX_STRING)
+        self.diag(message_type, message_id, msg,
+                  group=group, replacement=self.makeMacroMarkup(data=data), fix=self.makeFix(data=data))
+
+    def allowEnumXrefs(self):
+        """Returns True if enums can be specified in the 'xrefs' attribute
+        of a refpage.
+
+        Overrides base class behavior. OpenXR does not allow this.
+        """
+        return True
+
+def makeMacroChecker(enabled_messages):
+    """Create a correctly-configured MacroChecker instance."""
+    entity_db = VulkanEntityDatabase()
+    return MacroChecker(enabled_messages, entity_db, VulkanMacroCheckerFile, ROOT)
+
+
+if __name__ == '__main__':
+    default_enabled_messages = set(MessageId).difference(
+        DEFAULT_DISABLED_MESSAGES)
+
+    all_docs = [str(fn)
+                for fn in sorted((ROOT / 'chapters/').glob('**/[A-Za-z]*.adoc'))]
+    all_docs.extend([str(fn)
+                     for fn in sorted((ROOT / 'appendices/').glob('**/[A-Za-z]*.adoc'))])
+    all_docs.append(str(ROOT / 'vkspec.adoc'))
+
+    checkerMain(default_enabled_messages, makeMacroChecker,
+                all_docs)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/ci/check_undefined b/codegen/vulkan/vulkan-docs-next/scripts/ci/check_undefined
new file mode 100755
index 0000000..3dfcee0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/ci/check_undefined
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# Copyright 2020-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# scripts/ci/check_undefined
+# Check for non-tagged 'undefined' in spec sources.
+# Skip appendices/VK* files, which are non-normative.
+# Ideally we would skip NOTES too, but that would require parsing.
+
+undefined=/tmp/undefined
+ls chapters/*.adoc chapters/*/*.adoc appendices/[A-UW-Za-z]*.adoc | \
+    xargs egrep -E '(^|[[:space:]])undefined($|[^:])' > $undefined
+if test `cat $undefined | wc -l` -gt 0 ; then
+    echo "*** Found un-tagged uses of 'undefined'"
+    cat $undefined
+    rm $undefined
+    exit 1
+else
+    rm $undefined
+    exit 0
+fi
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/comment_convert.py b/codegen/vulkan/vulkan-docs-next/scripts/comment_convert.py
new file mode 100755
index 0000000..f1fa938
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/comment_convert.py
@@ -0,0 +1,203 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose:      This script converts leading comments on some Python
+#               classes and functions into docstrings.
+#               It doesn't attempt to deal with line continuations, etc.
+#               so you may want to "join line" on your def statements
+#               temporarily before running.
+
+import re
+
+from spec_tools.file_process import LinewiseFileProcessor
+
+COMMENT_RE = re.compile(r" *#(!.*| (?P<content>.*))?")
+CONVERTIBLE_DEF_RE = re.compile(r"(?P<indentation> *)(def|class) .*:")
+
+
+class CommentConverter(LinewiseFileProcessor):
+    def __init__(self, single_line_quotes=False, allow_blank_lines=False):
+        super().__init__()
+        self.comment_lines = []
+        "Temporary storage for contiguous comment lines."
+
+        self.trailing_empty_lines = []
+        "Temporary storage for empty lines following a comment."
+
+        self.output_lines = []
+        "Fully-processed output lines."
+
+        self.single_line_quotes = single_line_quotes
+        "Whether we generate simple, single-line quotes for single line comments."
+
+        self.allow_blank_lines = allow_blank_lines
+        "Whether we allow blank lines between a comment and the thing it's considered to document."
+
+        self.done_with_initial_comment = False
+        "Have we read our first non-comment line yet?"
+
+    def output_line(self, line=None):
+        if line:
+            self.output_lines.append(line)
+        else:
+            self.output_lines.append("")
+
+    def output_normal_line(self, line):
+        # flush any comment lines we had stored and output this line.
+        self.dump_comment_lines()
+        self.output_line(line)
+
+    def dump_comment_lines(self):
+        # Early out for empty
+        if not self.comment_lines:
+            return
+
+        for line in self.comment_lines:
+            self.output_line(line)
+        self.comment_lines = []
+
+        for line in self.trailing_empty_lines:
+            self.output_line(line)
+        self.trailing_empty_lines = []
+
+    def dump_converted_comment_lines(self, indent):
+        # Early out for empty
+        if not self.comment_lines:
+            return
+
+        for line in self.trailing_empty_lines:
+            self.output_line(line)
+        self.trailing_empty_lines = []
+
+        indent = indent + '    '
+
+        def extract(line):
+            match = COMMENT_RE.match(line)
+            content = match.group('content')
+            if content:
+                return content
+            return ""
+
+        # Extract comment content
+        lines = [extract(line) for line in self.comment_lines]
+
+        # Drop leading empty comments.
+        while lines and not lines[0].strip():
+            lines.pop(0)
+
+        # Drop trailing empty comments.
+        while lines and not lines[-1].strip():
+            lines.pop()
+
+        # Add single- or multi-line-string quote
+        if self.single_line_quotes \
+            and len(lines) == 1 \
+                and '"' not in lines[0]:
+            quote = '"'
+        else:
+            quote = '"""'
+        lines[0] = quote + lines[0]
+        lines[-1] = lines[-1] + quote
+
+        # Output lines, indenting content as required.
+        for line in lines:
+            if line:
+                self.output_line(indent + line)
+            else:
+                # Don't indent empty comment lines
+                self.output_line()
+
+        # Clear stored comment lines since we processed them
+        self.comment_lines = []
+
+    def queue_comment_line(self, line):
+        if self.trailing_empty_lines:
+            # If we had blank lines between comment lines, they are separate blocks
+            self.dump_comment_lines()
+        self.comment_lines.append(line)
+
+    def handle_empty_line(self, line):
+        """Handle an empty line.
+
+        Contiguous empty lines between a comment and something documentable do not
+        disassociate the comment from the documentable thing.
+        We have someplace else to store these lines in case there isn't something
+        documentable coming up."""
+        if self.comment_lines and self.allow_blank_lines:
+            self.trailing_empty_lines.append(line)
+        else:
+            self.output_normal_line(line)
+
+    def is_next_line_doc_comment(self):
+        next_line = self.next_line_rstripped
+        if next_line is None:
+            return False
+
+        return next_line.strip().startswith('"')
+
+    def process_line(self, line_num, line):
+        line = line.rstrip()
+        comment_match = COMMENT_RE.match(line)
+        def_match = CONVERTIBLE_DEF_RE.match(line)
+
+        # First check if this is a comment line.
+        if comment_match:
+            if self.done_with_initial_comment:
+                self.queue_comment_line(line)
+            else:
+                self.output_line(line)
+        else:
+            # If not a comment line, then by definition we're done with the comment header.
+            self.done_with_initial_comment = True
+            if not line.strip():
+                self.handle_empty_line(line)
+            elif def_match and not self.is_next_line_doc_comment():
+                # We got something we can make a docstring for:
+                # print the thing the docstring is for first,
+                # then the converted comment.
+
+                indent = def_match.group('indentation')
+                self.output_line(line)
+                self.dump_converted_comment_lines(indent)
+            else:
+                # Can't make a docstring for this line:
+                self.output_normal_line(line)
+
+    def process(self, fn, write=False):
+        self.process_file(fn)
+
+        if write:
+            with open(fn, 'w', encoding='utf-8') as fp:
+                for line in self.output_lines:
+                    fp.write(line)
+                    fp.write('\n')
+
+        # Reset state
+        self.__init__(self.single_line_quotes, self.allow_blank_lines)
+
+
+def main():
+    import argparse
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument('filenames', metavar='filename',
+                        type=str, nargs='+',
+                        help='A Python file to transform.')
+    parser.add_argument('-b', '--blanklines', action='store_true',
+                        help='Allow blank lines between a comment and a define and still convert that comment.')
+
+    args = parser.parse_args()
+
+    converter = CommentConverter(allow_blank_lines=args.blanklines)
+    for fn in args.filenames:
+        print("Processing", fn)
+        converter.process(fn, write=True)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/compImages.sh b/codegen/vulkan/vulkan-docs-next/scripts/compImages.sh
new file mode 100755
index 0000000..24d65ce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/compImages.sh
@@ -0,0 +1,127 @@
+#!/bin/bash
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# compareImages - compare all asciidoctor images in two branches
+# Usage: compareImages branch1 branch2
+
+# Where to put temporary files
+compare=compare
+
+branch1=$1
+branch2=$2
+
+echo "Preparing test tree under compare/"
+rm -rf $compare
+
+echo "Gathering images under compare/$1 compare/$2"
+if git checkout $branch1 ; then
+    img1=$compare/$branch1
+    files1=$compare/$branch1-files
+    mkdir -p $img1
+    cp images/*.svg $img1
+    (cd $img1 ; ls) > $files1
+else
+    echo "Cannot switch to branch $branch1"
+    rm -rf $compare
+    exit 1
+fi
+
+if git checkout $branch2 ; then
+    img2=$compare/$branch2
+    files2=$compare/$branch2-files
+    mkdir -p $img2
+    cp images/*.svg $img2
+    (cd $img2 ; ls) > $files2
+else
+    echo "Cannot switch to branch $branch2"
+    rm -rf $compare
+    exit 1
+fi
+
+srcfile=compare/compImages.adoc
+
+# Boilerplate header
+echo "= Image Comparison of Vulkan images in $branch1 $branch2
+:data-uri:
+:icons: font
+include::../config/attribs.adoc[]
+" > $srcfile
+
+
+# Files common to both branches
+echo "== Images Common to Both Branches
+" >> $srcfile
+
+# Identical images
+identical=()
+
+# Where to generate comparison images
+compdir=$compare/compare
+mkdir -p $compdir
+
+for file in `comm -12 $files1 $files2` ; do
+    echo "Comparing $file"
+    if diff -q $img1/$file $img2/$file > /dev/null ; then
+        identical+=( $file )
+        # Files are identical
+    else
+        # sum1=`sum $img1/$file | awk '{print $1}'`
+        # sum2=`sum $img2/$file | awk '{print $1}'`
+        #
+        # if test $sum1 -eq $sum2 ; then
+
+        # Generate comparison image
+        compfile="$compdir/$file"
+        compare $img1/$file $img2/$file $compfile
+
+        echo "=== $file
+
+image::$branch1/$file[title=\"$file in $branch1\",align=\"center\",opts=\"inline\"]
+
+image::$branch2/$file[title=\"$file in $branch2\",align=\"center\",opts=\"inline\"]
+
+image::compare/$file[title=\"Comparison of branches\",align=\"center\",opts=\"inline\"]
+
+<<<
+
+" >> $srcfile
+
+    fi
+done
+
+
+# Identical files
+echo "== Identical images
+" >> $srcfile
+
+for file in ${identical[@]} ; do
+    echo "  * $file" >> $srcfile
+done
+echo >> $srcfile
+
+
+# Files only in first branch
+echo "== Images only in $branch1
+" >> $srcfile
+
+for file in `comm -23 $files1 $files2` ; do
+    echo "  * $file" >> $srcfile
+done
+echo >> $srcfile
+
+
+# Files only in second branch
+echo "== Images only in $branch2
+" >> $srcfile
+
+for file in `comm -13 $files1 $files2` ; do
+    echo "  * $file" >> $srcfile
+done
+echo >> $srcfile
+
+outfile=$compare/`basename $srcfile .adoc`.pdf
+echo "Generating $outfile from $srcfile"
+asciidoctor -b pdf -r asciidoctor-pdf -o $outfile $srcfile
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/deperiodize_vuids.py b/codegen/vulkan/vulkan-docs-next/scripts/deperiodize_vuids.py
new file mode 100755
index 0000000..2bf32d2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/deperiodize_vuids.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python3
+#
+# Copyright 2020 Petr Kraus
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Removes periods after Valid Usage sentence in the spec
+#
+# Usage:
+# cd <root of Vulkan-Docs repo>
+# ./scripts/deperiodize_vuids.py
+
+import os,re
+
+def deperiodizeFile(filename):
+    print('    Deperiodizing = %s' % filename)
+
+    with open(filename, 'r', encoding='utf8', newline='\n') as f:
+        data = f.read()
+
+    # Remove periods from VUs
+    data = re.sub( r'(  \* \[\[VUID\-[\s\S]+?)\.?(?=(\n  \* \[\[VUID\-)|(\n\*\*\*\*)|(\n// )|(\ninclude::)|(\nendif::)|(\nifdef::)|(\nifndef::))', r'\g<1>', data )
+
+    with open(filename, 'w', encoding='utf8', newline='\n') as f:
+        data = f.write(data)
+
+def deperiodizeFolder(folder):
+    print('  Parsing = %s' % folder)
+    for root, subdirs, files in os.walk(folder):
+        for file in files:
+            if file.endswith(".adoc"):
+                file_path = os.path.join(root, file)
+                deperiodizeFile(file_path)
+        for subdir in subdirs:
+            sub_folder = os.path.join(root, subdir)
+            deperiodizeFolder(sub_folder)
+
+if __name__ == '__main__':
+    deperiodizeFolder(os.getcwd() + '/chapters')
+    deperiodizeFolder(os.getcwd() + '/appendices')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/docgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/docgenerator.py
new file mode 100644
index 0000000..c1cf906
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/docgenerator.py
@@ -0,0 +1,510 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from pathlib import Path
+
+from generator import GeneratorOptions, OutputGenerator, noneStr, write
+from parse_dependency import dependencyLanguageComment
+
+_ENUM_TABLE_PREFIX = """
+[cols=",",options="header",]
+|====
+|Enum |Description"""
+
+_TABLE_SUFFIX = """|===="""
+
+_ENUM_BLOCK_PREFIX = """.Enumerant Descriptions
+****"""
+
+_FLAG_BLOCK_PREFIX = """.Flag Descriptions
+****"""
+
+_BLOCK_SUFFIX = """****"""
+
+def orgLevelKey(name):
+    # Sort key for organization levels of features / extensions
+    # From highest to lowest, core versions, KHR extensions, EXT extensions,
+    # and vendor extensions
+
+    prefixes = (
+        'VK_VERSION_',
+        'VKSC_VERSION_',
+        'VK_KHR_',
+        'VK_EXT_')
+
+    i = 0
+    for prefix in prefixes:
+        if name.startswith(prefix):
+            return i
+        i += 1
+
+    # Everything else (e.g. vendor extensions) is least important
+    return i
+
+
+class DocGeneratorOptions(GeneratorOptions):
+    """DocGeneratorOptions - subclass of GeneratorOptions for
+    generating declaration snippets for the spec.
+
+    Shares many members with CGeneratorOptions, since
+    both are writing C-style declarations."""
+
+    def __init__(self,
+                 prefixText="",
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 secondaryInclude=False,
+                 expandEnumerants=True,
+                 extEnumerantAdditions=False,
+                 extEnumerantFormatString=" (Added by the {} extension)",
+                 **kwargs):
+        """Constructor.
+
+        Since this generator outputs multiple files at once,
+        the filename is just a "stamp" to indicate last generation time.
+
+        Shares many parameters/members with CGeneratorOptions, since
+        both are writing C-style declarations:
+
+        - prefixText - list of strings to prefix generated header with
+        (usually a copyright statement + calling convention macros).
+        - apicall - string to use for the function declaration prefix,
+        such as APICALL on Windows.
+        - apientry - string to use for the calling convention macro,
+        in typedefs, such as APIENTRY.
+        - apientryp - string to use for the calling convention macro
+        in function pointer typedefs, such as APIENTRYP.
+        - indentFuncProto - True if prototype declarations should put each
+        parameter on a separate line
+        - indentFuncPointer - True if typedefed function pointers should put each
+        parameter on a separate line
+        - alignFuncParam - if nonzero and parameters are being put on a
+        separate line, align parameter names at the specified column
+
+        Additional parameters/members:
+
+        - expandEnumerants - if True, add BEGIN/END_RANGE macros in enumerated
+        type declarations
+        - secondaryInclude - if True, add secondary (no xref anchor) versions
+        of generated files
+        - extEnumerantAdditions - if True, include enumerants added by extensions
+        in comment tables for core enumeration types.
+        - extEnumerantFormatString - A format string for any additional message for
+        enumerants from extensions if extEnumerantAdditions is True. The correctly-
+        marked-up extension name will be passed.
+        """
+        GeneratorOptions.__init__(self, **kwargs)
+        self.prefixText = prefixText
+        """list of strings to prefix generated header with (usually a copyright statement + calling convention macros)."""
+
+        self.apicall = apicall
+        """string to use for the function declaration prefix, such as APICALL on Windows."""
+
+        self.apientry = apientry
+        """string to use for the calling convention macro, in typedefs, such as APIENTRY."""
+
+        self.apientryp = apientryp
+        """string to use for the calling convention macro in function pointer typedefs, such as APIENTRYP."""
+
+        self.indentFuncProto = indentFuncProto
+        """True if prototype declarations should put each parameter on a separate line"""
+
+        self.indentFuncPointer = indentFuncPointer
+        """True if typedefed function pointers should put each parameter on a separate line"""
+
+        self.alignFuncParam = alignFuncParam
+        """if nonzero and parameters are being put on a separate line, align parameter names at the specified column"""
+
+        self.secondaryInclude = secondaryInclude
+        """if True, add secondary (no xref anchor) versions of generated files"""
+
+        self.expandEnumerants = expandEnumerants
+        """if True, add BEGIN/END_RANGE macros in enumerated type declarations"""
+
+        self.extEnumerantAdditions = extEnumerantAdditions
+        """if True, include enumerants added by extensions in comment tables for core enumeration types."""
+
+        self.extEnumerantFormatString = extEnumerantFormatString
+        """A format string for any additional message for
+        enumerants from extensions if extEnumerantAdditions is True. The correctly-
+        marked-up extension name will be passed."""
+
+
+class DocOutputGenerator(OutputGenerator):
+    """DocOutputGenerator - subclass of OutputGenerator.
+
+    Generates AsciiDoc includes with C-language API interfaces, for reference
+    pages and the corresponding specification. Similar to COutputGenerator,
+    but each interface is written into a different file as determined by the
+    options, only actual C types are emitted, and none of the boilerplate
+    preprocessor code is emitted."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        # This should be a separate conventions property rather than an
+        # inferred type name pattern for different APIs.
+        self.result_type = genOpts.conventions.type_prefix + "Result"
+
+    def endFile(self):
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        # Decide if we are in a core <feature> or an <extension>
+        self.in_core = (interface.tag == 'feature')
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def genRequirements(self, name, mustBeFound = True):
+        """Generate text showing what core versions and extensions introduce
+        an API. This relies on the map in apimap.py, which may be loaded at
+        runtime into self.apidict. If not present, no message is
+        generated.
+
+        - name - name of the API
+        - mustBeFound - If True, when requirements for 'name' cannot be
+          determined, a warning comment is generated.
+        """
+
+        if self.apidict:
+            if name in self.apidict.requiredBy:
+                # It is possible to get both 'A with B' and 'B with A' for
+                # the same API.
+                # To simplify this, sort the (base,dependency) requirements
+                # and put them in a set to ensure they are unique.
+                features = set()
+                # 'dependency' may be a boolean expression of extension names
+                for (base,dependency) in self.apidict.requiredBy[name]:
+                    if dependency is not None:
+                        # 'dependency' may be a boolean expression of extension
+                        # names, in which case the sorting will not work well.
+
+                        # First, convert it from asciidoctor markup to language.
+                        depLanguage = dependencyLanguageComment(dependency)
+
+                        # If they are the same, the dependency is only a
+                        # single extension, and sorting them works.
+                        # Otherwise, skip it.
+                        if depLanguage == dependency:
+                            deps = sorted(
+                                    sorted((base, dependency)),
+                                    key=orgLevelKey)
+                            depString = ' with '.join(deps)
+                        else:
+                            # An expression with multiple extensions
+                            depString = f'{base} with {depLanguage}'
+
+                        features.add(depString)
+                    else:
+                        features.add(base)
+                # Sort the overall dependencies so core versions are first
+                provider = ', '.join(sorted(
+                                        sorted(features),
+                                        key=orgLevelKey))
+                return f'// Provided by {provider}\n'
+            else:
+                if mustBeFound:
+                    self.logMsg('warn', 'genRequirements: API {} not found'.format(name))
+                return ''
+        else:
+            # No API dictionary available, return nothing
+            return ''
+
+    def writeInclude(self, directory, basename, contents):
+        """Generate an include file.
+
+        - directory - subdirectory to put file in
+        - basename - base name of the file
+        - contents - contents of the file (Asciidoc boilerplate aside)"""
+        # Create subdirectory, if needed
+        directory = self.genOpts.directory + '/' + directory
+        self.makeDir(directory)
+
+        # Create file
+        filename = directory + '/' + basename + self.file_suffix
+        self.logMsg('diag', '# Generating include file:', filename)
+        fp = open(filename, 'w', encoding='utf-8')
+
+        # Asciidoc anchor
+        write(self.genOpts.conventions.warning_comment, file=fp)
+        write('[[{0}]]'.format(basename), file=fp)
+
+        if self.genOpts.conventions.generate_index_terms:
+            if basename.startswith(self.conventions.command_prefix):
+                index_term = basename + " (function)"
+            elif basename.startswith(self.conventions.type_prefix):
+                index_term = basename + " (type)"
+            elif basename.startswith(self.conventions.api_prefix):
+                index_term = basename + " (define)"
+            else:
+                index_term = basename
+            write('indexterm:[{}]'.format(index_term), file=fp)
+
+        write('[source,c++]', file=fp)
+        write('----', file=fp)
+        write(contents, file=fp)
+        write('----', file=fp)
+        fp.close()
+
+        if self.genOpts.secondaryInclude:
+            # Create secondary no cross-reference include file
+            filename = f'{directory}/{basename}.no-xref{self.file_suffix}'
+            self.logMsg('diag', '# Generating include file:', filename)
+            fp = open(filename, 'w', encoding='utf-8')
+
+            # Asciidoc anchor
+            write(self.genOpts.conventions.warning_comment, file=fp)
+            write('// Include this no-xref version without cross reference id for multiple includes of same file', file=fp)
+            write('[source,c++]', file=fp)
+            write('----', file=fp)
+            write(contents, file=fp)
+            write('----', file=fp)
+            fp.close()
+
+    def writeEnumTable(self, basename, values):
+        """Output a table of enumerants."""
+        directory = Path(self.genOpts.directory) / 'enums'
+        self.makeDir(str(directory))
+
+        filename = str(directory / f'{basename}.comments{self.file_suffix}')
+        self.logMsg('diag', '# Generating include file:', filename)
+
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.conventions.warning_comment, file=fp)
+            write(_ENUM_TABLE_PREFIX, file=fp)
+
+            for data in values:
+                write("|ename:{}".format(data['name']), file=fp)
+                write("|{}".format(data['comment']), file=fp)
+
+            write(_TABLE_SUFFIX, file=fp)
+
+    def writeBox(self, filename, prefix, items):
+        """Write a generalized block/box for some values."""
+        self.logMsg('diag', '# Generating include file:', filename)
+
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.conventions.warning_comment, file=fp)
+            write(prefix, file=fp)
+
+            for item in items:
+                write("* {}".format(item), file=fp)
+
+            write(_BLOCK_SUFFIX, file=fp)
+
+    def writeEnumBox(self, basename, values):
+        """Output a box of enumerants."""
+        directory = Path(self.genOpts.directory) / 'enums'
+        self.makeDir(str(directory))
+
+        filename = str(directory / f'{basename}.comments-box{self.file_suffix}')
+        self.writeBox(filename, _ENUM_BLOCK_PREFIX,
+                      ("ename:{} -- {}".format(data['name'], data['comment'])
+                       for data in values))
+
+    def writeFlagBox(self, basename, values):
+        """Output a box of flag bit comments."""
+        directory = Path(self.genOpts.directory) / 'enums'
+        self.makeDir(str(directory))
+
+        filename = str(directory / f'{basename}.comments{self.file_suffix}')
+        self.writeBox(filename, _FLAG_BLOCK_PREFIX,
+                      ("ename:{} -- {}".format(data['name'], data['comment'])
+                       for data in values))
+
+    def genType(self, typeinfo, name, alias):
+        """Generate type."""
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+        # If the type is a struct type, traverse the embedded <member> tags
+        # generating a structure. Otherwise, emit the tag text.
+        category = typeElem.get('category')
+
+        if category in ('struct', 'union'):
+            # If the type is a struct type, generate it using the
+            # special-purpose generator.
+            self.genStruct(typeinfo, name, alias)
+        elif category not in OutputGenerator.categoryToPath:
+            # If there is no path, do not write output
+            self.logMsg('diag', 'NOT writing include for {} category {}'.format(
+                        name, category))
+        else:
+            body = self.genRequirements(name)
+            if alias:
+                # If the type is an alias, just emit a typedef declaration
+                body += 'typedef ' + alias + ' ' + name + ';\n'
+                self.writeInclude(OutputGenerator.categoryToPath[category],
+                                  name, body)
+            else:
+                # Replace <apientry /> tags with an APIENTRY-style string
+                # (from self.genOpts). Copy other text through unchanged.
+                # If the resulting text is an empty string, do not emit it.
+                body += noneStr(typeElem.text)
+                for elem in typeElem:
+                    if elem.tag == 'apientry':
+                        body += self.genOpts.apientry + noneStr(elem.tail)
+                    else:
+                        body += noneStr(elem.text) + noneStr(elem.tail)
+
+                if body:
+                    self.writeInclude(OutputGenerator.categoryToPath[category],
+                                      name, body + '\n')
+                else:
+                    self.logMsg('diag', 'NOT writing empty include file for type', name)
+
+    def genStructBody(self, typeinfo, typeName):
+        """
+        Returns the body generated for a struct.
+
+        Factored out to allow aliased types to also generate the original type.
+        """
+        typeElem = typeinfo.elem
+        body = 'typedef ' + typeElem.get('category') + ' ' + typeName + ' {\n'
+
+        targetLen = self.getMaxCParamTypeLength(typeinfo)
+        for member in typeElem.findall('.//member'):
+            body += self.makeCParamDecl(member, targetLen + 4)
+            body += ';\n'
+        body += '} ' + typeName + ';'
+        return body
+
+    def genStruct(self, typeinfo, typeName, alias):
+        """Generate struct."""
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+        body = self.genRequirements(typeName)
+        if alias:
+            if self.conventions.duplicate_aliased_structs:
+                # TODO maybe move this outside the conditional? This would be a visual change.
+                body += '// {} is an alias for {}\n'.format(typeName, alias)
+                alias_info = self.registry.typedict[alias]
+                body += self.genStructBody(alias_info, alias)
+                body += '\n\n'
+            body += 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            body += self.genStructBody(typeinfo, typeName)
+
+        self.writeInclude('structs', typeName, body)
+
+    def genEnumTable(self, groupinfo, groupName):
+        """Generate tables of enumerant values and short descriptions from
+        the XML."""
+
+        values = []
+        got_comment = False
+        missing_comments = []
+        for elem in groupinfo.elem.findall('enum'):
+            if not elem.get('required'):
+                continue
+            name = elem.get('name')
+
+            data = {
+                'name': name,
+            }
+
+            (numVal, _) = self.enumToValue(elem, True)
+            data['value'] = numVal
+
+            extname = elem.get('extname')
+
+            added_by_extension_to_core = (extname is not None and self.in_core)
+            if added_by_extension_to_core and not self.genOpts.extEnumerantAdditions:
+                # We are skipping such values
+                continue
+
+            comment = elem.get('comment')
+            if comment:
+                got_comment = True
+            elif name.endswith('_UNKNOWN') and numVal == 0:
+                # This is a placeholder for 0-initialization to be clearly invalid.
+                # Just skip this silently
+                continue
+            else:
+                # Skip but record this in case it is an odd-one-out missing
+                # a comment.
+                missing_comments.append(name)
+                continue
+
+            if added_by_extension_to_core and self.genOpts.extEnumerantFormatString:
+                # Add a note to the comment
+                comment += self.genOpts.extEnumerantFormatString.format(
+                    self.conventions.formatExtension(extname))
+
+            data['comment'] = comment
+            values.append(data)
+
+        if got_comment:
+            # If any had a comment, output it.
+
+            if missing_comments:
+                self.logMsg('warn', 'The following values for', groupName,
+                            'were omitted from the table due to missing comment attributes:',
+                            ', '.join(missing_comments))
+
+            group_type = groupinfo.elem.get('type')
+            if groupName == self.result_type:
+                # Split this into success and failure
+                self.writeEnumTable(groupName + '.success',
+                                (data for data in values
+                                 if data['value'] >= 0))
+                self.writeEnumTable(groupName + '.error',
+                                (data for data in values
+                                 if data['value'] < 0))
+            elif group_type == 'bitmask':
+                self.writeFlagBox(groupName, values)
+            elif group_type == 'enum':
+                self.writeEnumTable(groupName, values)
+                self.writeEnumBox(groupName, values)
+            else:
+                raise RuntimeError("Unrecognized enums type: " + str(group_type))
+
+    def genGroup(self, groupinfo, groupName, alias):
+        """Generate group (e.g. C "enum" type)."""
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+
+        body = self.genRequirements(groupName)
+        if alias:
+            # If the group name is aliased, just emit a typedef declaration
+            # for the alias.
+            body += 'typedef ' + alias + ' ' + groupName + ';\n'
+        else:
+            expand = self.genOpts.expandEnumerants
+            (_, enumbody) = self.buildEnumCDecl(expand, groupinfo, groupName)
+            body += enumbody
+            if self.genOpts.conventions.generate_enum_table:
+                self.genEnumTable(groupinfo, groupName)
+
+        self.writeInclude('enums', groupName, body)
+
+    def genEnum(self, enuminfo, name, alias):
+        """Generate the C declaration for a constant (a single <enum> value)."""
+
+        OutputGenerator.genEnum(self, enuminfo, name, alias)
+
+        body = self.buildConstantCDecl(enuminfo, name, alias)
+
+        self.writeInclude('enums', name, body)
+
+    def genCmd(self, cmdinfo, name, alias):
+        "Generate command."
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        body = self.genRequirements(name)
+        decls = self.makeCDecls(cmdinfo.elem)
+        body += decls[0]
+        self.writeInclude('protos', name, body)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/doctransformer.py b/codegen/vulkan/vulkan-docs-next/scripts/doctransformer.py
new file mode 100644
index 0000000..05f6600
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/doctransformer.py
@@ -0,0 +1,449 @@
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+"""Utilities for automatic transformation of spec sources.  Most of the logic
+has to do with detecting asciidoc markup or block types that should not be
+transformed (tables, code) and ignoring them.  It is very likely there are many
+asciidoc constructs not yet accounted for in the script, our usage of asciidoc
+markup is intentionally somewhat limited.
+"""
+
+import re
+import sys
+from reflib import logDiag, logWarn
+
+# Vulkan-specific - will consolidate into scripts/ like OpenXR soon
+sys.path.insert(0, 'xml')
+
+from apiconventions import APIConventions
+conventions = APIConventions()
+
+# Start of an asciidoctor conditional
+#   ifdef::
+#   ifndef::
+conditionalStart = re.compile(r'^(ifdef|ifndef)::')
+
+# Markup that always ends a paragraph
+#   empty line or whitespace
+#   [block options]
+#   [[anchor]]
+#   //                  comment
+#   <<<<                page break
+#   :attribute-setting
+#   macro-directive::terms
+#   +                   standalone list item continuation
+#   label::             labelled list - label must be standalone
+endPara = re.compile(r'^( *|\[.*\]|//.*|<<<<|:.*|[a-z]+::.*|\+|.*::)$')
+
+# Special case of markup ending a paragraph, used to track the current
+# command/structure. This allows for either OpenXR or Vulkan API path
+# conventions. Nominally it should use the file suffix defined by the API
+# conventions (conventions.file_suffix), except that XR uses '.txt' for
+# generated API include files, not '.adoc' like its other includes.
+includePat = re.compile(
+        r'include::(?P<directory_traverse>((../){1,4}|\{generated\}/)(generated/)?)(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).adoc[\[][\]]')
+
+# Markup that is OK in a contiguous paragraph but otherwise passed through
+#   .anything (except .., which indicates a literal block)
+#   === Section Titles
+#   image::path_to_image[attributes]  (apparently a single colon is OK but less idiomatic)
+endParaContinue = re.compile(r'^(\.[^.].*|=+ .*|image:.*\[.*\])$')
+
+# Markup for block delimiters whose contents *should* be reformatted
+#   --   (exactly two)  (open block)
+#   **** (4 or more)    (sidebar block)
+#   ==== (4 or more)    (example block)
+#   ____ (4 or more)    (quote block)
+blockTransform = re.compile(r'^(--|[*=_]{4,})$')
+
+# Fake block delimiters for "common" VU statements
+blockCommonTransform = '// Common Valid Usage\n'
+
+# Markup for block delimiters whose contents should *not* be transformed
+#   |=== (3 or more)  (table)
+#   ```  (3 or more)  (listing block)
+#   //// (4 or more)  (comment block)
+#   ---- (4 or more)  (listing block)
+#   .... (4 or more)  (literal block)
+#   ++++ (4 or more)  (passthrough block)
+blockPassthrough = re.compile(r'^(\|={3,}|[`]{3}|[\-+./]{4,})$')
+
+# Markup for introducing lists (hanging paragraphs)
+#   * bullet
+#     ** bullet
+#     -- bullet
+#   . bullet
+#   :: bullet (no longer supported by asciidoctor 2)
+#   {empty}:: bullet
+#   1. list item
+#   <1> source listing callout
+beginBullet = re.compile(r'^ *([-*.]+|\{empty\}::|::|[0-9]+[.]|<([0-9]+)>) ')
+
+class TransformState:
+    """State machine for transforming documents.
+
+    Represents the state of the transform operation"""
+    def __init__(self):
+        self.blockStack = [ None ]
+        """The last element is a line with the asciidoc block delimiter that is
+        currently in effect, such as '--', '----', '****', '====', or '++++'.
+        This affects whether or not the block contents should be transformed."""
+        self.transformStack = [ True ]
+        """The last element is True or False if the current blockStack contents
+        should be transformed."""
+        self.vuStack = [ False ]
+        """the last element is True or False if the current blockStack contents
+        are an explicit Valid Usage block."""
+
+        self.para = []
+        """list of lines in the paragraph being accumulated.
+        When this is non-empty, there is a current paragraph."""
+
+        self.lastTitle = False
+        """true if the previous line was a document title line
+        (e.g. :leveloffset: 0 - no attempt to track changes to this is made)."""
+
+        self.leadIndent = 0
+        """indent level (in spaces) of the first line of a paragraph."""
+
+        self.hangIndent = 0
+        """indent level of the remaining lines of a paragraph."""
+
+        self.lineNumber = 0
+        """line number being read from the input file."""
+
+        self.defaultApiName = '{refpage}'
+        self.apiName = self.defaultApiName
+        """String name of an API structure or command for VUID tag generation,
+        or {refpage} if one has not been included in this file yet."""
+
+    def incrLineNumber(self):
+        self.lineNumber = self.lineNumber + 1
+
+    def isOpenBlockDelimiter(self, line):
+        """Returns True if line is an open block delimiter.
+           This does not and should not match the listing block delimiter,
+           which is used inside refpage blocks both as a listing block and,
+           via an extension, as a nested open block."""
+        return line.rstrip() == '--'
+
+    def resetPara(self):
+        """Reset the paragraph, including its indentation level"""
+        self.para = []
+        self.leadIndent = 0
+        self.hangIndent = 0
+
+    def endBlock(self, line, transform, vuBlock):
+        """If beginning a block, tag whether or not to transform the contents.
+
+        vuBlock is True if the previous line indicates this is a Valid Usage
+        block."""
+        if self.blockStack[-1] == line:
+            logDiag('endBlock line', self.lineNumber,
+                    ': popping block end depth:', len(self.blockStack),
+                    ':', line, end='')
+
+            # Reset apiName at the end of an open block.
+            # Open blocks cannot be nested (at present), so this is safe.
+            if self.isOpenBlockDelimiter(line):
+                logDiag('reset apiName to empty at line', self.lineNumber)
+                self.apiName = self.defaultApiName
+            else:
+                logDiag('NOT resetting apiName to default at line',
+                        self.lineNumber)
+
+            self.blockStack.pop()
+            self.transformStack.pop()
+            self.vuStack.pop()
+        else:
+            # Start a block
+            self.blockStack.append(line)
+            self.transformStack.append(transform)
+            self.vuStack.append(vuBlock)
+
+            logDiag('endBlock transform =', transform, ' line', self.lineNumber,
+                    ': pushing block start depth', len(self.blockStack),
+                    ':', line, end='')
+
+    def addLine(self, line, indent):
+        """Add a line to the current paragraph"""
+        if self.para == []:
+            # Begin a new paragraph
+            self.para = [line]
+            self.leadIndent = indent
+            self.hangIndent = indent
+        else:
+            # Add a line to a paragraph. Increase the hanging indentation
+            # level - once.
+            if self.hangIndent == self.leadIndent:
+                self.hangIndent = indent
+            self.para.append(line)
+
+
+class TransformCallbackState:
+    """State given to the transformer callback object, derived from
+    TransformState."""
+    def __init__(self, state):
+        self.isVU = state.vuStack[-1] if len(state.vuStack) > 0 else False
+        """Whether this paragraph is a VU."""
+
+        self.apiName = state.apiName
+        """String name of an API structure or command this paragraph belongs
+        to."""
+
+        self.leadIndent = state.leadIndent
+        """indent level (in spaces) of the first line of a paragraph."""
+
+        self.hangIndent = state.hangIndent
+        """indent level of the remaining lines of a paragraph."""
+
+        self.lineNumber = state.lineNumber
+        """line number being read from the input file."""
+
+
+class DocTransformer:
+    """A transformer that recursively goes over all spec files under a path.
+
+    The transformer goes over all spec files under a path and does some basic
+    parsing.  In particular, it tracks which section the current text belongs
+    to, whether it references a VU, etc and processes them in 'paragraph'
+    granularity.
+    The transformer takes a callback object with the following methods:
+
+    - transformParagraph: Called when a paragraph is parsed.  The paragraph
+      along with some information (such as whether it is a VU) is passed.  The
+      function may transform the paragraph as necessary.
+    - onEmbeddedVUConditional: Called when an embedded VU conditional is
+      encountered.
+    """
+    def __init__(self,
+                 filename,
+                 outfile,
+                 callback):
+        self.filename = filename
+        """base name of file being read from."""
+
+        self.outfile = outfile
+        """file handle to write to."""
+
+        self.state = TransformState()
+        """State of transformation"""
+
+        self.callback = callback
+        """The transformation callback object"""
+
+    def printLines(self, lines):
+        """Print an array of lines with newlines already present"""
+        if len(lines) > 0:
+            logDiag(':: printLines:', len(lines), 'lines: ', lines[0], end='')
+
+        if self.outfile is not None:
+            for line in lines:
+                print(line, file=self.outfile, end='')
+
+    def emitPara(self):
+        """Emit a paragraph, possibly transforming it depending on the block
+        context.
+
+        Resets the paragraph accumulator."""
+        if self.state.para != []:
+            transformedPara = self.state.para
+
+            if self.state.transformStack[-1]:
+                callbackState = TransformCallbackState(self.state)
+
+                transformedPara = self.callback.transformParagraph(
+                        self.state.para,
+                        callbackState)
+
+            self.printLines(transformedPara)
+
+        self.state.resetPara()
+
+    def endPara(self, line):
+        """'line' ends a paragraph and should itself be emitted.
+        line may be None to indicate EOF or other exception."""
+        logDiag('endPara line', self.state.lineNumber, ': emitting paragraph')
+
+        # Emit current paragraph, this line, and reset tracker
+        self.emitPara()
+
+        if line:
+            self.printLines([line])
+
+    def endParaContinue(self, line):
+        """'line' ends a paragraph (unless there is already a paragraph being
+        accumulated, e.g. len(para) > 0 - currently not implemented)"""
+        self.endPara(line)
+
+    def endBlock(self, line, transform = False, vuBlock = False):
+        """'line' begins or ends a block.
+
+        If beginning a block, tag whether or not to transform the contents.
+
+        vuBlock is True if the previous line indicates this is a Valid Usage
+        block."""
+        self.endPara(line)
+        self.state.endBlock(line, transform, vuBlock)
+
+    def endParaBlockTransform(self, line, vuBlock):
+        """'line' begins or ends a block. The paragraphs in the block *should* be
+        reformatted (e.g. a NOTE)."""
+        self.endBlock(line, transform = True, vuBlock = vuBlock)
+
+    def endParaBlockPassthrough(self, line):
+        """'line' begins or ends a block. The paragraphs in the block should
+        *not* be reformatted (e.g. a code listing)."""
+        self.endBlock(line, transform = False)
+
+    def addLine(self, line):
+        """'line' starts or continues a paragraph.
+
+        Paragraphs may have "hanging indent", e.g.
+
+        ```
+          * Bullet point...
+            ... continued
+        ```
+
+        In this case, when the higher indentation level ends, so does the
+        paragraph."""
+        logDiag('addLine line', self.state.lineNumber, ':', line, end='')
+
+        # See https://stackoverflow.com/questions/13648813/what-is-the-pythonic-way-to-count-the-leading-spaces-in-a-string
+        indent = len(line) - len(line.lstrip())
+
+        # A hanging paragraph ends due to a less-indented line.
+        if self.state.para != [] and indent < self.state.hangIndent:
+            logDiag('addLine: line reduces indentation, emit paragraph')
+            self.emitPara()
+
+        # A bullet point (or something that looks like one) always ends the
+        # current paragraph.
+        if beginBullet.match(line):
+            logDiag('addLine: line matches beginBullet, emit paragraph')
+            self.emitPara()
+
+        self.state.addLine(line, indent)
+
+    def apiMatch(self, oldname, newname):
+        """Returns whether oldname and newname match, up to an API suffix.
+           This should use the API map instead of this heuristic, since aliases
+           like VkPhysicalDeviceVariablePointerFeaturesKHR ->
+           VkPhysicalDeviceVariablePointersFeatures are not recognized."""
+        upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+        return oldname.rstrip(upper) == newname.rstrip(upper)
+
+    def transformFile(self, lines):
+        """Transform lines, and possibly output to to the given file."""
+
+        for line in lines:
+            self.state.incrLineNumber()
+
+            # Is this a title line (leading '= ' followed by text)?
+            thisTitle = False
+
+            # The logic here is broken. If we are in a non-transformable block and
+            # this line *does not* end the block, it should always be
+            # accumulated.
+
+            # Test for a blockCommonTransform delimiter comment first, to avoid
+            # treating it solely as a end-Paragraph marker comment.
+            if line == blockCommonTransform:
+                # Starting or ending a pseudo-block for "common" VU statements.
+                self.endParaBlockTransform(line, vuBlock = True)
+
+            elif blockTransform.match(line):
+                # Starting or ending a block whose contents may be transformed.
+                # Blocks cannot be nested.
+
+                # Is this is an explicit Valid Usage block?
+                vuBlock = (self.state.lineNumber > 1 and
+                           lines[self.state.lineNumber-2] == '.Valid Usage\n')
+
+                self.endParaBlockTransform(line, vuBlock)
+
+            elif endPara.match(line):
+                # Ending a paragraph. Emit the current paragraph, if any, and
+                # prepare to begin a new paragraph.
+
+                self.endPara(line)
+
+                # If this is an include:: line starting the definition of a
+                # structure or command, track that for use in VUID generation.
+
+                matches = includePat.search(line)
+                if matches is not None:
+                    generated_type = matches.group('generated_type')
+                    include_type = matches.group('category')
+                    if generated_type == 'api' and include_type in ('protos', 'structs', 'funcpointers'):
+                        apiName = matches.group('entity_name')
+                        if self.state.apiName != self.state.defaultApiName:
+                            # This happens when there are multiple API include
+                            # lines in a single block. The style guideline is to
+                            # always place the API which others are promoted to
+                            # first. In virtually all cases, the promoted API
+                            # will differ solely in the vendor suffix (or
+                            # absence of it), which is benign.
+                            if not self.apiMatch(self.state.apiName, apiName):
+                                logDiag(f'Promoted API name mismatch at line {self.state.lineNumber}: {apiName} does not match self.state.apiName (this is OK if it is just a spelling alias)')
+                        else:
+                            self.state.apiName = apiName
+
+            elif endParaContinue.match(line):
+                # For now, always just end the paragraph.
+                # Could check see if len(para) > 0 to accumulate.
+
+                self.endParaContinue(line)
+
+                # If it is a title line, track that
+                if line[0:2] == '= ':
+                    thisTitle = True
+
+            elif blockPassthrough.match(line):
+                # Starting or ending a block whose contents must not be
+                # transformed.  These are tables, etc. Blocks cannot be nested.
+                # Note that the use of a listing block masquerading as an
+                # open block, via an extension, will not be formatted even
+                # though it should be.
+                # Fixing this would require looking at the previous line
+                # state for the '[open]' tag, and there are so few cases of
+                # this in the spec markup that it is not worth the trouble.
+
+                self.endParaBlockPassthrough(line)
+            elif self.state.lastTitle:
+                # The previous line was a document title line. This line
+                # is the author / credits line and must not be transformed.
+
+                self.endPara(line)
+            else:
+                # Just accumulate a line to the current paragraph. Watch out for
+                # hanging indents / bullet-points and track that indent level.
+
+                self.addLine(line)
+
+                # Commented out now that VU extractor supports this, but may
+                # need to refactor through a conventions object enable if
+                # OpenXR still needs this.
+
+                # This test looks for disallowed conditionals inside Valid Usage
+                # blocks, by checking if (a) this line does not start a new VU
+                # (bullet point) and (b) the previous line starts an asciidoctor
+                # conditional (ifdef:: or ifndef::).
+                # if (self.state.vuStack[-1]
+                #     and not beginBullet.match(line)
+                #     and conditionalStart.match(lines[self.state.lineNumber-2])):
+                #        self.callback.onEmbeddedVUConditional(self.state)
+
+            self.state.lastTitle = thisTitle
+
+        # Cleanup at end of file
+        self.endPara(None)
+
+        # Check for sensible block nesting
+        if len(self.state.blockStack) > 1:
+            logWarn('file', self.filename,
+                    'mismatched asciidoc block delimiters at EOF:',
+                    self.state.blockStack[-1])
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/extdependency.py b/codegen/vulkan/vulkan-docs-next/scripts/extdependency.py
new file mode 100755
index 0000000..20fe9c2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/extdependency.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python3
+#
+# Copyright 2017-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Generate a mapping of extension name -> all required extension names for
+   that extension, from dependencies in the API XML."""
+
+import argparse
+import errno
+import xml.etree.ElementTree as etree
+from pathlib import Path
+
+from apiconventions import APIConventions
+from parse_dependency import dependencyNames
+
+class DiGraph:
+    """A directed graph.
+
+    The implementation and API mimic that of networkx.DiGraph in networkx-1.11.
+    networkx implements graphs as nested dicts; it uses dicts all the way
+    down, no lists.
+
+    Some major differences between this implementation and that of
+    networkx-1.11 are:
+
+        * This omits edge and node attribute data, because we never use them
+          yet they add additional code complexity.
+
+        * This returns iterator objects when possible instead of collection
+          objects, because it simplifies the implementation and should provide
+          better performance.
+    """
+
+    def __init__(self):
+        self.__nodes = {}
+
+    def add_node(self, node):
+        if node not in self.__nodes:
+            self.__nodes[node] = DiGraphNode()
+
+    def add_edge(self, src, dest):
+        self.add_node(src)
+        self.add_node(dest)
+        self.__nodes[src].adj.add(dest)
+
+    def nodes(self):
+        """Iterate over the nodes in the graph."""
+        return self.__nodes.keys()
+
+    def descendants(self, node):
+        """
+        Iterate over the nodes reachable from the given start node, excluding
+        the start node itself. Each node in the graph is yielded at most once.
+        """
+
+        # Implementation detail: Do a breadth-first traversal because it is
+        # easier than depth-first.
+
+        # All nodes seen during traversal.
+        seen = set()
+
+        # The stack of nodes that need visiting.
+        visit_me = []
+
+        # Bootstrap the traversal.
+        seen.add(node)
+        for x in self.__nodes[node].adj:
+            if x not in seen:
+                seen.add(x)
+                visit_me.append(x)
+
+        while visit_me:
+            x = visit_me.pop()
+            assert x in seen
+            yield x
+
+            for y in self.__nodes[x].adj:
+                if y not in seen:
+                    seen.add(y)
+                    visit_me.append(y)
+
+class DiGraphNode:
+    def __init__(self):
+        # Set of adjacent of nodes.
+        self.adj = set()
+
+class ApiDependencies:
+    def __init__(self,
+                 registry_path = None,
+                 api_name = None):
+        """Load an API registry and generate extension dependencies
+
+        registry_path - relative filename of XML registry. If not specified,
+        uses the API default.
+
+        api_name - API name for which to generate dependencies. Only
+        extensions supported for that API are considered.
+        """
+
+        conventions = APIConventions()
+        if registry_path is None:
+            registry_path = conventions.registry_path
+        if api_name is None:
+            api_name = conventions.xml_api_name
+
+        self.allExts = set()
+        self.khrExts = set()
+        self.ratifiedExts = set()
+        self.graph = DiGraph()
+        self.extensions = {}
+        self.tree = etree.parse(registry_path)
+
+        # Loop over all supported extensions, creating a digraph of the
+        # extension dependencies in the 'depends' attribute, which is a
+        # boolean expression of core version and extension names.
+        # A static dependency tree can be constructed only by treating all
+        # extension names in the expression as dependencies, even though
+        # that may not be true if it is of form (ext OR ext).
+        # For the purpose these dependencies are used for - generating
+        # specifications with required dependencies included automatically -
+        # this will suffice.
+        # Separately tracks lists of all extensions and all KHR extensions,
+        # which are common specification targets.
+        for elem in self.tree.findall('extensions/extension'):
+            name = elem.get('name')
+            supported = elem.get('supported')
+            ratified = elem.get('ratified', '')
+
+            if api_name in supported.split(','):
+                self.allExts.add(name)
+
+                if 'KHR' in name:
+                    self.khrExts.add(name)
+
+                if api_name in ratified.split(','):
+                    self.ratifiedExts.add(name)
+
+                self.graph.add_node(name)
+
+                depends = elem.get('depends')
+                if depends:
+                    # Walk a list of the leaf nodes (version and extension
+                    # names) in the boolean expression.
+                    for dep in dependencyNames(depends):
+                        # Filter out version names, which are explicitly
+                        # specified when building a specification.
+                        if not conventions.is_api_version_name(dep):
+                            self.graph.add_edge(name, dep)
+            else:
+                # Skip unsupported extensions
+                pass
+
+    def allExtensions(self):
+        """Returns a set of all extensions in the graph"""
+        return self.allExts
+
+    def khrExtensions(self):
+        """Returns a set of all KHR extensions in the graph"""
+        return self.khrExts
+
+    def ratifiedExtensions(self):
+        """Returns a set of all ratified extensions in the graph"""
+        return self.ratifiedExts
+
+    def children(self, extension):
+        """Returns a set of the dependencies of an extension.
+           Throws an exception if the extension is not in the graph."""
+
+        if extension not in self.allExts:
+            raise Exception(f'Extension {extension} not found in XML!')
+
+        return set(self.graph.descendants(extension))
+
+
+# Test script
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-registry', action='store',
+                        default=APIConventions().registry_path,
+                        help='Use specified registry file instead of ' + APIConventions().registry_path)
+    parser.add_argument('-loops', action='store',
+                        default=10, type=int,
+                        help='Number of timing loops to run')
+    parser.add_argument('-test', action='store',
+                        default=None,
+                        help='Specify extension to find dependencies of')
+
+    args = parser.parse_args()
+
+    deps = ApiDependencies(args.registry)
+    print('KHR exts =', sorted(deps.khrExtensions()))
+    print('Ratified exts =', sorted(deps.ratifiedExtensions()))
+
+    import time
+    startTime = time.process_time()
+
+    for loop in range(args.loops):
+        deps = ApiDependencies(args.registry)
+
+    endTime = time.process_time()
+
+    deltaT = endTime - startTime
+    print('Total time = {} time/loop = {}'.format(deltaT, deltaT / args.loops))
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/extensionmetadocgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/extensionmetadocgenerator.py
new file mode 100644
index 0000000..6f5e0ef
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/extensionmetadocgenerator.py
@@ -0,0 +1,737 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import os
+import re
+import sys
+from functools import total_ordering
+from generator import GeneratorOptions, OutputGenerator, regSortFeatures, write
+from parse_dependency import dependencyMarkup
+
+class ExtensionMetaDocGeneratorOptions(GeneratorOptions):
+    """ExtensionMetaDocGeneratorOptions - subclass of GeneratorOptions.
+
+    Represents options during extension metainformation generation for Asciidoc"""
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+@total_ordering
+class Extension:
+    def __init__(self,
+                 generator, # needed for logging and API conventions
+                 filename,
+                 name,
+                 number,
+                 ext_type,
+                 depends,
+                 contact,
+                 promotedTo,
+                 deprecatedBy,
+                 obsoletedBy,
+                 provisional,
+                 revision,
+                 specialuse,
+                 ratified
+                ):
+        self.generator = generator
+        self.conventions = generator.genOpts.conventions
+        self.filename = filename
+        self.name = name
+        self.number = number
+        self.ext_type = ext_type
+        self.depends = depends
+        self.contact = contact
+        self.promotedTo = promotedTo
+        self.deprecatedBy = deprecatedBy
+        self.obsoletedBy = obsoletedBy
+        self.provisional = provisional
+        self.revision = revision
+        self.specialuse = specialuse
+        self.ratified = ratified
+
+        self.deprecationType = None
+        self.supercedingAPIVersion = None
+        self.supercedingExtension = None
+        # This is a set containing names of extensions (if any) promoted
+        # *to* this extension.
+        # It is filled in after all the Extension objects are created,
+        # since it requires a reverse mapping step.
+        self.promotedFrom = set()
+
+        if self.promotedTo is not None and self.deprecatedBy is not None and self.obsoletedBy is not None:
+            self.generator.logMsg('warn', 'All \'promotedto\', \'deprecatedby\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'promotedto\' and \'deprecatedby\'.')
+        elif self.promotedTo is not None and self.deprecatedBy is not None:
+            self.generator.logMsg('warn', 'Both \'promotedto\' and \'deprecatedby\' attributes used on extension ' + self.name + '! Ignoring \'deprecatedby\'.')
+        elif self.promotedTo is not None and self.obsoletedBy is not None:
+            self.generator.logMsg('warn', 'Both \'promotedto\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'promotedto\'.')
+        elif self.deprecatedBy is not None and self.obsoletedBy is not None:
+            self.generator.logMsg('warn', 'Both \'deprecatedby\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'deprecatedby\'.')
+
+        supercededBy = None
+        if self.promotedTo is not None:
+            self.deprecationType = 'promotion'
+            supercededBy = promotedTo
+        elif self.deprecatedBy is not None:
+            self.deprecationType = 'deprecation'
+            supercededBy = deprecatedBy
+        elif self.obsoletedBy is not None:
+            self.deprecationType = 'obsoletion'
+            supercededBy = obsoletedBy
+
+        if supercededBy is not None:
+            if supercededBy == '' and not self.deprecationType == 'promotion':
+                pass # supercedingAPIVersion, supercedingExtension is None
+            elif supercededBy.startswith(self.conventions.api_version_prefix):
+                self.supercedingAPIVersion = supercededBy
+            elif supercededBy.startswith(self.conventions.api_prefix):
+                self.supercedingExtension = supercededBy
+            else:
+                self.generator.logMsg('error', 'Unrecognized ' + self.deprecationType + ' attribute value \'' + supercededBy + '\'!')
+
+    def __str__(self):
+        return self.name
+    def __eq__(self, other):
+        return self.name == other.name
+    def __ne__(self, other):
+        return self.name != other.name
+
+    def __lt__(self, other):
+        self_is_KHR = self.name.startswith(self.conventions.KHR_prefix)
+        self_is_EXT = self.name.startswith(self.conventions.EXT_prefix)
+        other_is_KHR = other.name.startswith(self.conventions.KHR_prefix)
+        other_is_EXT = other.name.startswith(self.conventions.EXT_prefix)
+
+        swap = False
+        if self_is_KHR and not other_is_KHR:
+            return not swap
+        if other_is_KHR and not self_is_KHR:
+            return swap
+        if self_is_EXT and not other_is_EXT:
+            return not swap
+        if other_is_EXT and not self_is_EXT:
+            return swap
+
+        return self.name < other.name
+
+    def typeToStr(self):
+        if self.ext_type == 'instance':
+            return 'Instance extension'
+        if self.ext_type == 'device':
+            return 'Device extension'
+
+        if self.ext_type is not None:
+            self.generator.logMsg('warn', 'The type attribute of ' + self.name + ' extension is neither \'instance\' nor \'device\'. That is invalid (at the time this script was written).')
+        else: # should be unreachable
+            self.generator.logMsg('error', 'Logic error in typeToStr(): Missing type attribute!')
+        return None
+
+    def specLink(self, xrefName, xrefText, isRefpage = False):
+        """Generate a string containing a link to a specification anchor in
+           asciidoctor markup form.
+
+        - xrefName - anchor name in the spec
+        - xrefText - text to show for the link, or None
+        - isRefpage = True if generating a refpage include, False if
+          generating a specification extension appendix include"""
+
+        if isRefpage:
+            # Always link into API spec
+            specURL = self.conventions.specURL('api')
+            return 'link:{}#{}[{}^]'.format(specURL, xrefName, xrefText)
+        else:
+            return '<<' + xrefName + ', ' + xrefText + '>>'
+
+    def conditionalLinkCoreAPI(self, apiVersion, linkSuffix, isRefpage):
+        versionMatch = re.match(self.conventions.api_version_prefix + r'(\d+)_(\d+)', apiVersion)
+        major = versionMatch.group(1)
+        minor = versionMatch.group(2)
+
+        dottedVersion = major + '.' + minor
+
+        xrefName = 'versions-' + dottedVersion + linkSuffix
+        xrefText = self.conventions.api_name() + ' ' + dottedVersion
+
+        doc  = 'ifdef::' + apiVersion + '[]\n'
+        doc += '    ' + self.specLink(xrefName, xrefText, isRefpage) + '\n'
+        doc += 'endif::' + apiVersion + '[]\n'
+        doc += 'ifndef::' + apiVersion + '[]\n'
+        doc += '    ' + self.conventions.api_name() + ' ' + dottedVersion + '\n'
+        doc += 'endif::' + apiVersion + '[]\n'
+
+        return doc
+
+    def conditionalLinkExt(self, extName, indent = '    '):
+        doc  = 'ifdef::' + extName + '[]\n'
+        doc +=  indent + self.conventions.formatExtension(extName) + '\n'
+        doc += 'endif::' + extName + '[]\n'
+        doc += 'ifndef::' + extName + '[]\n'
+        doc += indent + '`' + extName + '`\n'
+        doc += 'endif::' + extName + '[]\n'
+
+        return doc
+
+    def resolveDeprecationChain(self, extensions, succeededBy, isRefpage, file):
+        if succeededBy not in extensions:
+            write(f'  ** *NOTE* The extension `{succeededBy}` is not supported for the API specification being generated', file=file)
+            self.generator.logMsg('warn', f'resolveDeprecationChain: {self.name} defines a superseding interface {succeededBy} which is not in the supported extensions list')
+            return
+
+        ext = extensions[succeededBy]
+
+        if ext.deprecationType:
+            if ext.deprecationType == 'promotion':
+                if ext.supercedingAPIVersion:
+                    write('  ** Which in turn was _promoted_ to\n' + ext.conditionalLinkCoreAPI(ext.supercedingAPIVersion, '-promotions', isRefpage), file=file)
+                else: # ext.supercedingExtension
+                    write('  ** Which in turn was _promoted_ to extension\n' + ext.conditionalLinkExt(ext.supercedingExtension), file=file)
+                    ext.resolveDeprecationChain(extensions, ext.supercedingExtension, file)
+            elif ext.deprecationType == 'deprecation':
+                if ext.supercedingAPIVersion:
+                    write('  ** Which in turn was _deprecated_ by\n' + ext.conditionalLinkCoreAPI(ext.supercedingAPIVersion, '-new-feature', isRefpage), file=file)
+                elif ext.supercedingExtension:
+                    write('  ** Which in turn was _deprecated_ by\n' + ext.conditionalLinkExt(ext.supercedingExtension) + '    extension', file=file)
+                    ext.resolveDeprecationChain(extensions, ext.supercedingExtension, file)
+                else:
+                    write('  ** Which in turn was _deprecated_ without replacement', file=file)
+            elif ext.deprecationType == 'obsoletion':
+                if ext.supercedingAPIVersion:
+                    write('  ** Which in turn was _obsoleted_ by\n' + ext.conditionalLinkCoreAPI(ext.supercedingAPIVersion, '-new-feature', isRefpage), file=file)
+                elif ext.supercedingExtension:
+                    write('  ** Which in turn was _obsoleted_ by\n' + ext.conditionalLinkExt(ext.supercedingExtension) + '    extension', file=file)
+                    ext.resolveDeprecationChain(extensions, ext.supercedingExtension, file)
+                else:
+                    write('  ** Which in turn was _obsoleted_ without replacement', file=file)
+            else: # should be unreachable
+                self.generator.logMsg('error', 'Logic error in resolveDeprecationChain(): deprecationType is neither \'promotion\', \'deprecation\' nor \'obsoletion\'!')
+
+
+    def writeTag(self, tag, value, isRefpage, fp):
+        """Write a tag and (if non-None) a tag value to a file.
+
+           If the value is None, just write the tag.
+
+           If the tag is None, just write the value (used for adding a value
+           to a just-written tag).
+
+        - tag - string tag name
+        - value - tag value, or None
+        - isRefpage - controls style in which the tag is marked up
+        - fp - open file pointer to write to"""
+
+        if isRefpage:
+            # Use subsection headers for the tag name
+            tagPrefix = '== '
+            tagSuffix = ''
+        else:
+            # Use an bolded item list for the tag name
+            tagPrefix = '*'
+            tagSuffix = '*::'
+
+        if tag is not None:
+            write(tagPrefix + tag + tagSuffix, file=fp)
+        if value is not None:
+            write(value, file=fp)
+
+        if isRefpage:
+            write('', file=fp)
+
+    def makeMetafile(self, extensions, isRefpage = False):
+        """Generate a file containing extension metainformation in
+           asciidoctor markup form.
+
+        - extensions - dictionary of Extension objects for extensions spec
+          is being generated against
+        - isRefpage - True if generating a refpage include, False if
+          generating a specification extension appendix include"""
+
+        if isRefpage:
+            filename = self.filename.replace('meta/', 'meta/refpage.')
+        else:
+            filename = self.filename
+
+        fp = self.generator.newFile(filename)
+
+        if not isRefpage:
+            write('[[' + self.name + ']]', file=fp)
+            write('=== ' + self.name, file=fp)
+            write('', file=fp)
+
+            self.writeTag('Name String', '`' + self.name + '`', isRefpage, fp)
+            self.writeTag('Extension Type', self.typeToStr(), isRefpage, fp)
+
+        self.writeTag('Registered Extension Number', self.number, isRefpage, fp)
+        self.writeTag('Revision', self.revision, isRefpage, fp)
+
+        if self.conventions.xml_api_name in self.ratified.split(','):
+            ratstatus = 'Ratified'
+        else:
+            ratstatus = 'Not ratified'
+        self.writeTag('Ratification Status', ratstatus, isRefpage, fp)
+
+        # Only API extension dependencies are coded in XML, others are explicit
+        self.writeTag('Extension and Version Dependencies', None, isRefpage, fp)
+
+        # Transform the boolean 'depends' expression into equivalent
+        # human-readable asciidoc markup.
+        if self.depends is not None:
+            if isRefpage:
+                separator = ''
+            else:
+                separator = '+'
+            write(separator + '\n--\n' +
+                  dependencyMarkup(self.depends) +
+                  '--', file=fp)
+        else:
+            # Do not bother specifying the base Vulkan 1.0 API redundantly
+            True
+
+        if self.provisional == 'true' and self.conventions.provisional_extension_warning:
+            write('  * *This is a _provisional_ extension and must: be used with caution.', file=fp)
+            write('    See the ' +
+                  self.specLink(xrefName = 'boilerplate-provisional-header',
+                                xrefText = 'description',
+                                isRefpage = isRefpage) +
+                  ' of provisional header files for enablement and stability details.*', file=fp)
+        write('', file=fp)
+
+        if self.deprecationType:
+            self.writeTag('Deprecation State', None, isRefpage, fp)
+
+            if self.deprecationType == 'promotion':
+                if self.supercedingAPIVersion:
+                    write('  * _Promoted_ to\n' + self.conditionalLinkCoreAPI(self.supercedingAPIVersion, '-promotions', isRefpage), file=fp)
+                else: # ext.supercedingExtension
+                    write('  * _Promoted_ to\n' + self.conditionalLinkExt(self.supercedingExtension) + '    extension', file=fp)
+                    self.resolveDeprecationChain(extensions, self.supercedingExtension, isRefpage, fp)
+            elif self.deprecationType == 'deprecation':
+                if self.supercedingAPIVersion:
+                    write('  * _Deprecated_ by\n' + self.conditionalLinkCoreAPI(self.supercedingAPIVersion, '-new-features', isRefpage), file=fp)
+                elif self.supercedingExtension:
+                    write('  * _Deprecated_ by\n' + self.conditionalLinkExt(self.supercedingExtension) + '    extension' , file=fp)
+                    self.resolveDeprecationChain(extensions, self.supercedingExtension, isRefpage, fp)
+                else:
+                    write('  * _Deprecated_ without replacement' , file=fp)
+            elif self.deprecationType == 'obsoletion':
+                if self.supercedingAPIVersion:
+                    write('  * _Obsoleted_ by\n' + self.conditionalLinkCoreAPI(self.supercedingAPIVersion, '-new-features', isRefpage), file=fp)
+                elif self.supercedingExtension:
+                    write('  * _Obsoleted_ by\n' + self.conditionalLinkExt(self.supercedingExtension) + '    extension' , file=fp)
+                    self.resolveDeprecationChain(extensions, self.supercedingExtension, isRefpage, fp)
+                else:
+                    # TODO: Does not make sense to retroactively ban use of extensions from 1.0.
+                    #       Needs some tweaks to the semantics and this message, when such extension(s) occur.
+                    write('  * _Obsoleted_ without replacement' , file=fp)
+            else: # should be unreachable
+                self.generator.logMsg('error', 'Logic error in makeMetafile(): deprecationType is neither \'promotion\', \'deprecation\' nor \'obsoletion\'!')
+            write('', file=fp)
+
+        if self.specialuse is not None:
+            specialuses = self.specialuse.split(',')
+            if len(specialuses) > 1:
+                header = 'Special Uses'
+            else:
+                header = 'Special Use'
+            self.writeTag(header, None, isRefpage, fp)
+
+            for use in specialuses:
+                # Each specialuse attribute value expands an asciidoctor
+                # attribute of the same name, instead of using the shorter,
+                # and harder to understand attribute
+                write('* {}'.format(
+                      self.specLink(
+                           xrefName = self.conventions.special_use_section_anchor,
+                           xrefText = '{' + use + '}',
+                           isRefpage = isRefpage)), file=fp)
+            write('', file=fp)
+
+        if self.conventions.write_contacts:
+            self.writeTag('Contact', None, isRefpage, fp)
+
+            contacts = self.contact.split(',')
+            for contact in contacts:
+                contactWords = contact.strip().split()
+                name = ' '.join(contactWords[:-1])
+                handle = contactWords[-1]
+                if handle.startswith('gitlab:'):
+                    prettyHandle = 'icon:gitlab[alt=GitLab, role="red"]' + handle.replace('gitlab:@', '')
+                elif handle.startswith('@'):
+                    issuePlaceholderText = '[' + self.name + '] ' + handle
+                    issuePlaceholderText += '%0A*Here describe the issue or question you have about the ' + self.name + ' extension*'
+                    trackerLink = 'link:++https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=' + issuePlaceholderText + '++'
+                    prettyHandle = trackerLink + '[icon:github[alt=GitHub,role="black"]' + handle[1:] + ',window=_blank,opts=nofollow]'
+                else:
+                    prettyHandle = handle
+
+                write('  * ' + name + ' ' + prettyHandle, file=fp)
+            write('', file=fp)
+
+        # Check if a proposal document for this extension exists in the
+        # current repository, and link to the same document (parameterized
+        # by a URL prefix attribute) if it does.
+        # The assumption is that a proposal document for an extension
+        # VK_name will be located in 'proposals/VK_name.adoc' relative
+        # to the repository root, and that this script will be invoked from
+        # the repository root.
+        # If a proposal for this extension does not exist, look for
+        # proposals for the extensions it is promoted from.
+
+        def checkProposal(extname):
+            """Check if a proposal document for an extension exists,
+               returning the path to that proposal or None otherwise."""
+
+            path = 'proposals/{}.adoc'.format(extname)
+            if os.path.exists(path) and os.access(path, os.R_OK):
+                return path
+            else:
+                return None
+
+        # List of [ extname, proposal link ]
+        proposals = []
+
+        path = checkProposal(self.name)
+        if path is not None:
+            proposals.append([self.name, path])
+        else:
+            for name in self.promotedFrom:
+                path = checkProposal(name)
+                if path is not None:
+                    proposals.append([name, path])
+
+        if len(proposals) > 0:
+            tag = 'Extension Proposal'
+            for (name, path) in sorted(proposals):
+                self.writeTag(tag,
+                    f'link:{{specRepositoryURL}}/{path}[{name}]',
+                    isRefpage, fp)
+                # Setting tag = None so additional values will not get
+                # additional tag headers.
+                tag = None
+
+        # If this is metadata to be included in a refpage, adjust the
+        # leveloffset to account for the relative structure of the extension
+        # appendices vs. refpages.
+        if isRefpage and self.conventions.include_extension_appendix_in_refpage:
+            write(':leveloffset: -1', file=fp)
+
+        fp.close()
+
+class ExtensionMetaDocOutputGenerator(OutputGenerator):
+    """ExtensionMetaDocOutputGenerator - subclass of OutputGenerator.
+
+    Generates AsciiDoc includes with metainformation for the API extension
+    appendices. The fields used from <extension> tags in the API XML are:
+
+    - name          extension name string
+    - number        extension number (optional)
+    - contact       name and GitHub login or email address (optional)
+    - type          'instance' | 'device' (optional)
+    - depends       boolean expression of core version and extension names this depends on (optional)
+    - promotedTo    extension or API version it was promoted to
+    - deprecatedBy  extension or API version which deprecated this extension,
+                    or empty string if deprecated without replacement
+    - obsoletedBy   extension or API version which obsoleted this extension,
+                    or empty string if obsoleted without replacement
+    - provisional   'true' if this extension is released provisionally"""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.extensions = {}
+        # List of strings containing all vendor tags
+        self.vendor_tags = []
+        self.file_suffix = ''
+
+    def newFile(self, filename):
+        self.logMsg('diag', '# Generating include file:', filename)
+        fp = open(filename, 'w', encoding='utf-8')
+        write(self.genOpts.conventions.warning_comment, file=fp)
+        return fp
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        self.directory = self.genOpts.directory
+        self.file_suffix = self.genOpts.conventions.file_suffix
+
+        # Iterate over all 'tag' Elements and add the names of all the valid vendor
+        # tags to the list
+        root = self.registry.tree.getroot()
+        for tag in root.findall('tags/tag'):
+            self.vendor_tags.append(tag.get('name'))
+
+        # Create subdirectory, if needed
+        self.makeDir(self.directory)
+
+    def conditionalExt(self, extName, content, ifdef = None, condition = None):
+        doc = ''
+
+        innerdoc  = 'ifdef::' + extName + '[]\n'
+        innerdoc += content + '\n'
+        innerdoc += 'endif::' + extName + '[]\n'
+
+        if ifdef:
+            if ifdef == 'ifndef':
+                if condition:
+                    doc += 'ifndef::' + condition + '[]\n'
+                    doc += innerdoc
+                    doc += 'endif::' + condition + '[]\n'
+                else: # no condition is as if condition is defined; "nothing" is always defined :p
+                    pass # so no output
+            elif ifdef == 'ifdef':
+                if condition:
+                    doc += 'ifdef::' + condition + '+' + extName + '[]\n'
+                    doc += content + '\n' # does not include innerdoc; the ifdef was merged with the one above
+                    doc += 'endif::' + condition + '+' + extName + '[]\n'
+                else: # no condition is as if condition is defined; "nothing" is always defined :p
+                    doc += innerdoc
+            else: # should be unreachable
+                raise RuntimeError('Should be unreachable: ifdef is neither \'ifdef \' nor \'ifndef\'!')
+        else:
+            doc += innerdoc
+
+        return doc
+
+    def makeExtensionInclude(self, extname):
+        return self.conventions.extension_include_string(extname)
+
+    def endFile(self):
+        # Determine the extension an extension is promoted from, if any.
+        # This is used when attempting to locate a proposal document in
+        # makeMetafile() below.
+        for (extname, ext) in self.extensions.items():
+            promotedTo = ext.promotedTo
+            if promotedTo is not None:
+                if promotedTo in self.extensions:
+                    #print(f'{promotedTo} is promoted from {extname}')
+                    self.extensions[promotedTo].promotedFrom.add(extname)
+                    #print(f'setting self.extensions[{promotedTo}].promotedFrom = {self.extensions[promotedTo].promotedFrom}')
+                elif not self.conventions.is_api_version_name(promotedTo):
+                    self.logMsg('warn', f'{extname} is promoted to {promotedTo} which is not in the extension map')
+
+        # Generate metadoc extension files, in refpage and non-refpage form
+        for ext in self.extensions.values():
+            ext.makeMetafile(self.extensions, isRefpage = False)
+            if self.conventions.write_refpage_include:
+                ext.makeMetafile(self.extensions, isRefpage = True)
+
+        # Key to sort extensions alphabetically within 'KHR', 'EXT', vendor
+        # extension prefixes.
+        def makeSortKey(extname):
+            name = extname.lower()
+            prefixes = self.conventions.extension_index_prefixes
+            for i, prefix in enumerate(prefixes):
+                if extname.startswith(prefix):
+                    return (i, name)
+            return (len(prefixes), name)
+
+        # Generate list of promoted extensions
+        promotedExtensions = {}
+        for ext in self.extensions.values():
+            if ext.deprecationType == 'promotion' and ext.supercedingAPIVersion:
+                promotedExtensions.setdefault(ext.supercedingAPIVersion, []).append(ext.name)
+
+        for coreVersion, extensions in promotedExtensions.items():
+            promoted_extensions_fp = self.newFile(self.directory + '/promoted_extensions_' + coreVersion + self.file_suffix)
+
+            for extname in sorted(extensions, key=makeSortKey):
+                indent = ''
+                write('  * {blank}\n+\n' + ext.conditionalLinkExt(extname, indent), file=promoted_extensions_fp)
+
+            promoted_extensions_fp.close()
+
+        # Generate include directives for the extensions appendix, grouping
+        # extensions by status (current, deprecated, provisional, etc.)
+        with self.newFile(self.directory + '/current_extensions_appendix' + self.file_suffix) as current_extensions_appendix_fp, \
+                self.newFile(self.directory + '/deprecated_extensions_appendix' + self.file_suffix) as deprecated_extensions_appendix_fp, \
+                self.newFile(self.directory + '/current_extension_appendices' + self.file_suffix) as current_extension_appendices_fp, \
+                self.newFile(self.directory + '/current_extension_appendices_toc' + self.file_suffix) as current_extension_appendices_toc_fp, \
+                self.newFile(self.directory + '/deprecated_extension_appendices' + self.file_suffix) as deprecated_extension_appendices_fp, \
+                self.newFile(self.directory + '/deprecated_extension_appendices_toc' + self.file_suffix) as deprecated_extension_appendices_toc_fp, \
+                self.newFile(self.directory + '/deprecated_extensions_guard_macro' + self.file_suffix) as deprecated_extensions_guard_macro_fp, \
+                self.newFile(self.directory + '/provisional_extensions_appendix' + self.file_suffix) as provisional_extensions_appendix_fp, \
+                self.newFile(self.directory + '/provisional_extension_appendices' + self.file_suffix) as provisional_extension_appendices_fp, \
+                self.newFile(self.directory + '/provisional_extension_appendices_toc' + self.file_suffix) as provisional_extension_appendices_toc_fp, \
+                self.newFile(self.directory + '/provisional_extensions_guard_macro' + self.file_suffix) as provisional_extensions_guard_macro_fp:
+
+            # Note: there is a hardwired assumption in creating the
+            # include:: directives below that all of these files are located
+            # in the 'meta/' subdirectory of the generated files directory.
+            # This is difficult to change, and it is very unlikely changing
+            # it will be needed.
+
+            write('', file=current_extensions_appendix_fp)
+            write('include::{generated}/meta/deprecated_extensions_guard_macro' + self.file_suffix + '[]', file=current_extensions_appendix_fp)
+            write('', file=current_extensions_appendix_fp)
+            write('ifndef::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
+            write('[[extension-appendices-list]]', file=current_extensions_appendix_fp)
+            write('== List of Extensions', file=current_extensions_appendix_fp)
+            write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
+            write('ifdef::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
+            write('[[extension-appendices-list]]', file=current_extensions_appendix_fp)
+            write('== List of Current Extensions', file=current_extensions_appendix_fp)
+            write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
+            write('', file=current_extensions_appendix_fp)
+            write('include::{generated}/meta/current_extension_appendices_toc' + self.file_suffix + '[]', file=current_extensions_appendix_fp)
+            write('\n<<<\n', file=current_extensions_appendix_fp)
+            write('include::{generated}/meta/current_extension_appendices' + self.file_suffix + '[]', file=current_extensions_appendix_fp)
+
+            write('', file=deprecated_extensions_appendix_fp)
+            write('include::{generated}/meta/deprecated_extensions_guard_macro' + self.file_suffix + '[]', file=deprecated_extensions_appendix_fp)
+            write('', file=deprecated_extensions_appendix_fp)
+            write('ifdef::HAS_DEPRECATED_EXTENSIONS[]', file=deprecated_extensions_appendix_fp)
+            write('[[deprecated-extension-appendices-list]]', file=deprecated_extensions_appendix_fp)
+            write('== List of Deprecated Extensions', file=deprecated_extensions_appendix_fp)
+            write('include::{generated}/meta/deprecated_extension_appendices_toc' + self.file_suffix + '[]', file=deprecated_extensions_appendix_fp)
+            write('\n<<<\n', file=deprecated_extensions_appendix_fp)
+            write('include::{generated}/meta/deprecated_extension_appendices' + self.file_suffix + '[]', file=deprecated_extensions_appendix_fp)
+            write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=deprecated_extensions_appendix_fp)
+
+            # add include guards to allow multiple includes
+            write('ifndef::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=deprecated_extensions_guard_macro_fp)
+            write(':DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD:\n', file=deprecated_extensions_guard_macro_fp)
+            write('ifndef::PROVISIONAL_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=provisional_extensions_guard_macro_fp)
+            write(':PROVISIONAL_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD:\n', file=provisional_extensions_guard_macro_fp)
+
+            write('', file=provisional_extensions_appendix_fp)
+            write('include::{generated}/meta/provisional_extensions_guard_macro' + self.file_suffix + '[]', file=provisional_extensions_appendix_fp)
+            write('', file=provisional_extensions_appendix_fp)
+            write('ifdef::HAS_PROVISIONAL_EXTENSIONS[]', file=provisional_extensions_appendix_fp)
+            write('[[provisional-extension-appendices-list]]', file=provisional_extensions_appendix_fp)
+            write('== List of Provisional Extensions', file=provisional_extensions_appendix_fp)
+            write('include::{generated}/meta/provisional_extension_appendices_toc' + self.file_suffix + '[]', file=provisional_extensions_appendix_fp)
+            write('\n<<<\n', file=provisional_extensions_appendix_fp)
+            write('include::{generated}/meta/provisional_extension_appendices' + self.file_suffix + '[]', file=provisional_extensions_appendix_fp)
+            write('endif::HAS_PROVISIONAL_EXTENSIONS[]', file=provisional_extensions_appendix_fp)
+
+            # Emit extensions in author ID order
+            sorted_keys = sorted(self.extensions.keys(), key=makeSortKey)
+            for name in sorted_keys:
+                ext = self.extensions[name]
+
+                include = self.makeExtensionInclude(ext.name)
+                link = '  * ' + self.conventions.formatExtension(ext.name)
+                if ext.provisional == 'true':
+                    write(self.conditionalExt(ext.name, include), file=provisional_extension_appendices_fp)
+                    write(self.conditionalExt(ext.name, link), file=provisional_extension_appendices_toc_fp)
+                    write(self.conditionalExt(ext.name, ':HAS_PROVISIONAL_EXTENSIONS:'), file=provisional_extensions_guard_macro_fp)
+                elif ext.deprecationType is None:
+                    write(self.conditionalExt(ext.name, include), file=current_extension_appendices_fp)
+                    write(self.conditionalExt(ext.name, link), file=current_extension_appendices_toc_fp)
+                else:
+                    condition = ext.supercedingAPIVersion if ext.supercedingAPIVersion else ext.supercedingExtension  # potentially None too
+
+                    write(self.conditionalExt(ext.name, include, 'ifndef', condition), file=current_extension_appendices_fp)
+                    write(self.conditionalExt(ext.name, link, 'ifndef', condition), file=current_extension_appendices_toc_fp)
+
+                    write(self.conditionalExt(ext.name, include, 'ifdef', condition), file=deprecated_extension_appendices_fp)
+                    write(self.conditionalExt(ext.name, link, 'ifdef', condition), file=deprecated_extension_appendices_toc_fp)
+
+                    write(self.conditionalExt(ext.name, ':HAS_DEPRECATED_EXTENSIONS:', 'ifdef', condition), file=deprecated_extensions_guard_macro_fp)
+
+            write('endif::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=deprecated_extensions_guard_macro_fp)
+            write('endif::PROVISIONAL_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=provisional_extensions_guard_macro_fp)
+
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        if interface.tag != 'extension':
+            self.logMsg('diag', 'beginFeature: ignoring non-extension feature', self.featureName)
+            return
+
+        # These attributes must exist
+        name = self.featureName
+        number = self.getAttrib(interface, 'number')
+        ext_type = self.getAttrib(interface, 'type')
+        revision = self.getSpecVersion(interface, name)
+
+        # These attributes are optional
+        OPTIONAL = False
+        depends = self.getAttrib(interface, 'depends', OPTIONAL)    # TODO should default to VK_VERSION_1_0?
+        contact = self.getAttrib(interface, 'contact', OPTIONAL)
+        promotedTo = self.getAttrib(interface, 'promotedto', OPTIONAL)
+        deprecatedBy = self.getAttrib(interface, 'deprecatedby', OPTIONAL)
+        obsoletedBy = self.getAttrib(interface, 'obsoletedby', OPTIONAL)
+        provisional = self.getAttrib(interface, 'provisional', OPTIONAL, 'false')
+        specialuse = self.getAttrib(interface, 'specialuse', OPTIONAL)
+        ratified = self.getAttrib(interface, 'ratified', OPTIONAL, '')
+
+        filename = self.directory + '/' + name + self.file_suffix
+
+        extdata = Extension(
+            generator = self,
+            filename = filename,
+            name = name,
+            number = number,
+            ext_type = ext_type,
+            depends = depends,
+            contact = contact,
+            promotedTo = promotedTo,
+            deprecatedBy = deprecatedBy,
+            obsoletedBy = obsoletedBy,
+            provisional = provisional,
+            revision = revision,
+            specialuse = specialuse,
+            ratified = ratified)
+        self.extensions[name] = extdata
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def getAttrib(self, elem, attribute, required=True, default=None):
+        """Query an attribute from an element, or return a default value
+
+        - elem - element to query
+        - attribute - attribute name
+        - required - whether attribute must exist
+        - default - default value if attribute not present"""
+        attrib = elem.get(attribute, default)
+        if required and (attrib is None):
+            name = elem.get('name', 'UNKNOWN')
+            self.logMsg('error', 'While processing \'' + self.featureName + ', <' + elem.tag + '> \'' + name + '\' does not contain required attribute \'' + attribute + '\'')
+        return attrib
+
+    def numbersToWords(self, name):
+        allowlist = ['WIN32', 'INT16', 'D3D1']
+
+        # temporarily replace allowlist items
+        for i, w in enumerate(allowlist):
+            name = re.sub(w, '{' + str(i) + '}', name)
+
+        name = re.sub(r'(?<=[A-Z])(\d+)(?![A-Z])', r'_\g<1>', name)
+
+        # undo allowlist substitution
+        for i, w in enumerate(allowlist):
+            name = re.sub('\\{' + str(i) + '}', w, name)
+
+        return name
+
+    def getSpecVersion(self, elem, extname, default=None):
+        """Determine the extension revision from the EXTENSION_NAME_SPEC_VERSION
+        enumerant.
+
+        - elem - <extension> element to query
+        - extname - extension name from the <extension> 'name' attribute
+        - default - default value if SPEC_VERSION token not present"""
+        # The literal enumerant name to match
+        versioningEnumName = self.numbersToWords(extname.upper()) + '_SPEC_VERSION'
+
+        for enum in elem.findall('./require/enum'):
+            enumName = self.getAttrib(enum, 'name')
+            if enumName == versioningEnumName:
+                return self.getAttrib(enum, 'value')
+
+        #if not found:
+        for enum in elem.findall('./require/enum'):
+            enumName = self.getAttrib(enum, 'name')
+            if enumName.find('SPEC_VERSION') != -1:
+                self.logMsg('diag', 'Missing ' + versioningEnumName + '! Potential misnamed candidate ' + enumName + '.')
+                return self.getAttrib(enum, 'value')
+
+        self.logMsg('error', 'Missing ' + versioningEnumName + '!')
+        return default
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/formatsgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/formatsgenerator.py
new file mode 100644
index 0000000..ba1733e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/formatsgenerator.py
@@ -0,0 +1,224 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, write
+from spec_tools.attributes import ExternSyncEntry
+from spec_tools.util import getElemName
+
+import pdb
+
+class FormatsOutputGenerator(OutputGenerator):
+    """FormatsOutputGenerator - subclass of OutputGenerator.
+    Generates AsciiDoc includes of the table for the format chapters
+    of the API specification.
+
+    ---- methods ----
+    FormatsOutputGenerator(errFile, warnFile, diagFile) - args as for
+      OutputGenerator. Defines additional internal state.
+    ---- methods overriding base class ----
+    genCmd(cmdinfo)"""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        # List of all the formats elements
+        self.formats = []
+        # <format, condition as asciidoc string>
+        self.format_conditions = dict()
+        # <class, {'formats' : [], 'meta' : {} }>
+        self.format_classes = dict()
+        # {'packedSize' : ['format', 'format', ...]}
+        self.packed_info = dict()
+        # {VkFormat : SpirvFormat}
+        self.spirv_image_format = dict()
+        # <format, [{plane_info}, ...]>
+        self.plane_format = dict()
+
+    def endFile(self):
+
+        # Generate compatibility table
+        compatibility_table = []
+        for class_name, info in self.format_classes.items():
+            # Do an initial loop of formats in class to see if whole class is a single condition
+            class_condition = None
+            for index, format in enumerate(info['formats']):
+                condition = self.format_conditions[format]
+                if (condition == None) or (class_condition != None and class_condition != condition):
+                    class_condition = None
+                    break
+                else:
+                    class_condition = condition
+
+            # If not single class condition for the class, next check if a single format has a condition
+            # Move all condition formats to the front of array to make listing the formats in table
+            if class_condition == None:
+                condition_list = []
+                noncondition_list = []
+                for index, format in enumerate(info['formats']):
+                    if self.format_conditions[format] == None:
+                        noncondition_list.append(format)
+                    else:
+                        condition_list.append(format)
+                info['formats'] = condition_list + noncondition_list
+
+            if class_condition != None:
+                compatibility_table.append('ifdef::{}[]'.format(class_condition))
+
+            compatibility_table.append("| {} +".format(class_name))
+            compatibility_table.append("  Block size {} byte +".format(info['meta']['blockSize']))
+            compatibility_table.append("  {} block extent +".format(info['meta']['blockExtent'].replace(",", "x")))
+            compatibility_table.append("  {} texel/block |".format(info['meta']['texelsPerBlock']))
+
+            for index, format in enumerate(info['formats']):
+                format_condition = self.format_conditions[format]
+                if format_condition != None and class_condition == None:
+                    compatibility_table.append('ifdef::{}[]'.format(format_condition))
+                suffix = ", +" if index != len(info['formats']) - 1 else ""
+                compatibility_table.append("                    ename:{}{}".format(format, suffix))
+                if format_condition != None and class_condition == None:
+                    compatibility_table.append('endif::{}[]'.format(format_condition))
+
+            if class_condition != None:
+                compatibility_table.append('endif::{}[]'.format(class_condition))
+        self.writeBlock(f'compatibility{self.file_suffix}', compatibility_table)
+
+        # Generate packed format list
+        packed_table = []
+        for packed_size, formats in self.packed_info.items():
+            packed_table.append('  * <<formats-packed-{}-bit,Packed into {}-bit data types>>:'.format(packed_size, packed_size))
+            # Do an initial loop of formats with same packed size to group conditional together for easier reading of final asciidoc
+            sorted_formats = dict() # {condition : formats}
+            for format in formats:
+                format_condition = self.format_conditions[format]
+                if format_condition == None:
+                    format_condition = "None" # to allow as a key in the dict
+                if format_condition not in sorted_formats:
+                    sorted_formats[format_condition] = []
+                sorted_formats[format_condition].append(format)
+
+            for condition, condition_formats in sorted_formats.items():
+                if condition != "None":
+                    packed_table.append('ifdef::{}[]'.format(condition))
+                for format in condition_formats:
+                    packed_table.append('  ** ename:{}'.format(format))
+                if condition != "None":
+                    packed_table.append('endif::{}[]'.format(condition))
+        self.writeBlock(f'packed{self.file_suffix}', packed_table)
+
+        # Generate SPIR-V Image Format Compatibility
+        spirv_image_format_table = []
+        spirv_image_format_table.append('|code:Unknown|Any')
+        for vk_format, spirv_format in self.spirv_image_format.items():
+            spirv_image_format_table.append('|code:{}|ename:{}'.format(spirv_format, vk_format))
+        self.writeBlock(f'spirvimageformat{self.file_suffix}', spirv_image_format_table)
+
+        # Generate Plane Format Compatibility Table
+        plane_format_table = []
+        for format_name, plane_infos in self.plane_format.items():
+            format_condition = self.format_conditions[format_name]
+            # The table is already in a ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+            # so no need to duplicate the condition
+            add_condition = False if format_condition == 'None' or format_condition == 'VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion' else True
+
+            if add_condition:
+                plane_format_table.append('ifdef::{}[]'.format(format_condition))
+
+            plane_format_table.append('4+| *ename:{}*'.format(format_name))
+            for plane_info in plane_infos:
+                width_divisor = 'w'
+                height_divisor = 'h'
+                if plane_info['widthDivisor'] != 1:
+                    width_divisor += '/{}'.format(plane_info['widthDivisor'])
+                if plane_info['heightDivisor'] != 1:
+                    height_divisor += '/{}'.format(plane_info['heightDivisor'])
+
+                plane_format_table.append('^| {} ^| ename:{} ^| {} ^| {}'.format(plane_info['index'],
+                                                                                 plane_info['compatible'],
+                                                                                 width_divisor,
+                                                                                 height_divisor))
+            if add_condition:
+                plane_format_table.append('endif::{}[]'.format(format_condition))
+        self.writeBlock(f'planeformat{self.file_suffix}', plane_format_table)
+
+        # Finish processing in superclass
+        OutputGenerator.endFile(self)
+
+    def writeBlock(self, basename, contents):
+        """Generate an include file.
+
+        - directory - subdirectory to put file in
+        - basename - base name of the file
+        - contents - contents of the file (Asciidoc boilerplate aside)"""
+
+        filename = self.genOpts.directory + '/' + basename
+        self.logMsg('diag', '# Generating include file:', filename)
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.genOpts.conventions.warning_comment, file=fp)
+
+            if len(contents) > 0:
+                for str in contents:
+                    write(str, file=fp)
+            else:
+                self.logMsg('diag', '# No contents for:', filename)
+
+    def genFormat(self, format, formatinfo, alias):
+        """Generate Formats
+
+        formatinfo - dictionary entry for an XML <format> element
+        name - name attribute of format.elem"""
+
+        OutputGenerator.genFormat(self, format, formatinfo, alias)
+        elem = format.elem
+        format_name = elem.get('name')
+
+        self.formats.append(elem)
+        self.format_conditions[format_name] = format.condition
+
+        # Create format class data structure to be processed later
+        class_name = elem.get('class')
+        class_meta = {
+            'blockSize' : elem.get('blockSize'),
+            'texelsPerBlock' : elem.get('texelsPerBlock'),
+            # default extent
+            'blockExtent' : "1,1,1" if elem.get('blockExtent') == None else elem.get('blockExtent')
+        }
+
+        if class_name in self.format_classes:
+            self.format_classes[class_name]['formats'].append(format_name)
+            # Assert all classes are using same meta info
+            if class_meta != self.format_classes[class_name]['meta']:
+                self.logMsg('error', 'Class meta info is not consistent for class ', class_name)
+        else:
+            self.format_classes[class_name] = {
+                'formats' : [format_name],
+                'meta' : class_meta
+            }
+
+        # Build list of formats with packed info in xml
+        packed = elem.get('packed')
+        if packed is not None:
+            if packed not in self.packed_info:
+                self.packed_info[packed] = []
+            self.packed_info[packed].append(format_name)
+
+        # Currently there is only at most one <spirvimageformat>
+        spirv_image_format = elem.find('spirvimageformat')
+        if (spirv_image_format is not None):
+            self.spirv_image_format[format_name] = spirv_image_format.get('name')
+
+        for plane in elem.iterfind('plane'):
+            if format_name not in self.plane_format:
+                # create list if first time
+                self.plane_format[format_name] = []
+            self.plane_format[format_name].append({
+                'index' : int(plane.get('index')),
+                'widthDivisor' : int(plane.get('widthDivisor')),
+                'heightDivisor' : int(plane.get('heightDivisor')),
+                'compatible' : plane.get('compatible'),
+            })
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/genRef.py b/codegen/vulkan/vulkan-docs-next/scripts/genRef.py
new file mode 100755
index 0000000..953ec6b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/genRef.py
@@ -0,0 +1,1113 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# genRef.py - create API ref pages from spec source files
+#
+# Usage: genRef.py files
+
+import argparse
+import io
+import os
+import re
+import sys
+from collections import OrderedDict
+from reflib import (findRefs, fixupRefs, loadFile, logDiag, logWarn, logErr,
+                    printPageInfo, setLogFile)
+from reg import Registry
+from generator import GeneratorOptions
+from parse_dependency import dependencyNames
+from apiconventions import APIConventions
+
+
+# refpage 'type' attributes which are API entities and contain structured
+# content such as API includes, valid usage blocks, etc.
+refpage_api_types = (
+    'basetypes',
+    'consts',
+    'defines',
+    'enums',
+    'flags',
+    'funcpointers',
+    'handles',
+    'protos',
+    'structs',
+)
+
+# Other refpage types - SPIR-V builtins, API feature blocks, etc. - which do
+# not have structured content.
+refpage_other_types = (
+    'builtins',
+    'feature',
+    'freeform',
+    'spirv'
+)
+
+
+def makeExtensionInclude(name):
+    """Return an include command for a generated extension interface.
+       - name - extension name"""
+
+    return 'include::{}/meta/refpage.{}{}[]'.format(
+            conventions.generated_include_path,
+            name,
+            conventions.file_suffix)
+
+
+def makeAPIInclude(type, name):
+    """Return an include command for a generated API interface
+       - type - type of the API, e.g. 'flags', 'handles', etc
+       - name - name of the API"""
+
+    return 'include::{}/api/{}/{}{}\n'.format(
+            conventions.generated_include_path,
+            type, name, conventions.file_suffix)
+
+
+def isextension(name):
+    """Return True if name is an API extension name (ends with an upper-case
+    author ID).
+
+    This assumes that author IDs are at least two characters."""
+    return name[-2:].isalpha() and name[-2:].isupper()
+
+
+def printCopyrightSourceComments(fp):
+    """Print Khronos CC-BY copyright notice on open file fp.
+
+    Writes an asciidoc comment block, which copyrights the source
+    file."""
+    print('// Copyright 2014-2023 The Khronos Group Inc.', file=fp)
+    print('//', file=fp)
+    # This works around constraints of the 'reuse' tool
+    print('// SPDX' + '-License-Identifier: CC-BY-4.0', file=fp)
+    print('', file=fp)
+
+
+def printFooter(fp, leveloffset=0):
+    """Print footer material at the end of each refpage on open file fp.
+
+    If generating separate refpages, adds the copyright.
+    If generating the single combined refpage, just add a separator.
+
+    - leveloffset - number of levels to bias section titles up or down."""
+
+    # Generate the section header.
+    # Default depth is 2.
+    depth = max(0, leveloffset + 2)
+    prefix = '=' * depth
+
+    print('ifdef::doctype-manpage[]',
+          f'{prefix} Copyright',
+          '',
+          'include::{config}/copyright-ccby' + conventions.file_suffix + '[]',
+          'endif::doctype-manpage[]',
+          '',
+          'ifndef::doctype-manpage[]',
+          '<<<',
+          'endif::doctype-manpage[]',
+          '',
+          sep='\n', file=fp)
+
+
+def macroPrefix(name):
+    """Add a spec asciidoc macro prefix to an API name, depending on its type
+    (protos, structs, enums, etc.).
+
+    If the name is not recognized, use the generic link macro 'reflink:'."""
+    if name in api.basetypes:
+        return 'basetype:' + name
+    if name in api.defines:
+        return 'dlink:' + name
+    if name in api.enums:
+        return 'elink:' + name
+    if name in api.flags:
+        return 'tlink:' + name
+    if name in api.funcpointers:
+        return 'tlink:' + name
+    if name in api.handles:
+        return 'slink:' + name
+    if name in api.protos:
+        return 'flink:' + name
+    if name in api.structs:
+        return 'slink:' + name
+    if name == 'TBD':
+        return 'No cross-references are available'
+    return 'reflink:' + name
+
+
+def seeAlsoList(apiName, explicitRefs=None, apiAliases=[]):
+    """Return an asciidoc string with a list of 'See Also' references for the
+    API entity 'apiName', based on the relationship mapping in the api module.
+
+    'explicitRefs' is a list of additional cross-references.
+
+    If apiAliases is not None, it is a list of aliases of apiName whose
+    cross-references will also be included.
+
+    If no relationships are available, return None."""
+
+    refs = set(())
+
+    # apiName and its aliases are treated equally
+    allApis = apiAliases.copy()
+    allApis.append(apiName)
+
+    # Add all the implicit references to refs
+    for name in allApis:
+        if name in api.mapDict:
+            refs.update(api.mapDict[name])
+
+    # Add all the explicit references
+    if explicitRefs is not None:
+        if isinstance(explicitRefs, str):
+            explicitRefs = explicitRefs.split()
+        refs.update(name for name in explicitRefs)
+
+    # Add extensions / core versions based on dependencies
+    for name in allApis:
+        if name in api.requiredBy:
+            for (base,dependency) in api.requiredBy[name]:
+                refs.add(base)
+                if dependency is not None:
+                    # 'dependency' may be a boolean expression of extension
+                    # names.
+                    # Extract them for use in cross-references.
+                    for extname in dependencyNames(dependency):
+                        refs.add(extname)
+
+    if len(refs) == 0:
+        return None
+    else:
+        return ', '.join(macroPrefix(name) for name in sorted(refs)) + '\n'
+
+
+def remapIncludes(lines, baseDir, specDir):
+    """Remap include directives in a list of lines so they can be extracted to a
+    different directory.
+
+    Returns remapped lines.
+
+    - lines - text to remap
+    - baseDir - target directory
+    - specDir - source directory"""
+    # This should be compiled only once
+    includePat = re.compile(r'^include::(?P<path>.*)\[\]')
+
+    newLines = []
+    for line in lines:
+        matches = includePat.search(line)
+        if matches is not None:
+            path = matches.group('path')
+
+            if path[0] != '{':
+                # Relative path to include file from here
+                incPath = specDir + '/' + path
+                # Remap to be relative to baseDir
+                newPath = os.path.relpath(incPath, baseDir)
+                newLine = 'include::' + newPath + '[]\n'
+                logDiag('remapIncludes: remapping', line, '->', newLine)
+                newLines.append(newLine)
+            else:
+                # An asciidoctor variable starts the path.
+                # This must be an absolute path, not needing to be rewritten.
+                newLines.append(line)
+        else:
+            newLines.append(line)
+    return newLines
+
+
+def refPageShell(pageName, pageDesc, fp, head_content = None, sections=None, tail_content=None, man_section=3):
+    """Generate body of a reference page.
+
+    - pageName - string name of the page
+    - pageDesc - string short description of the page
+    - fp - file to write to
+    - head_content - text to include before the sections
+    - sections - iterable returning (title,body) for each section.
+    - tail_content - text to include after the sections
+    - man_section - Unix man page section"""
+
+    printCopyrightSourceComments(fp)
+
+    print(':data-uri:',
+          ':icons: font',
+          ':attribute-missing: warn',
+          conventions.extra_refpage_headers,
+          '',
+          sep='\n', file=fp)
+
+    s = '{}({})'.format(pageName, man_section)
+    print('= ' + s,
+          '',
+          conventions.extra_refpage_body,
+          '',
+          sep='\n', file=fp)
+    if pageDesc.strip() == '':
+        pageDesc = 'NO SHORT DESCRIPTION PROVIDED'
+        logWarn('refPageHead: no short description provided for', pageName)
+
+    print('== Name',
+          '{} - {}'.format(pageName, pageDesc),
+          '',
+          sep='\n', file=fp)
+
+    if head_content is not None:
+        print(head_content,
+              '',
+              sep='\n', file=fp)
+
+    if sections is not None:
+        for title, content in sections.items():
+            print('== {}'.format(title),
+                  '',
+                  content,
+                  '',
+                  sep='\n', file=fp)
+
+    if tail_content is not None:
+        print(tail_content,
+              '',
+              sep='\n', file=fp)
+
+
+def refPageHead(pageName, pageDesc, specText, fieldName, fieldText, descText, fp):
+    """Generate header of a reference page.
+
+    - pageName - string name of the page
+    - pageDesc - string short description of the page
+    - specType - string containing 'spec' field from refpage open block, or None.
+      Used to determine containing spec name and URL.
+    - specText - string that goes in the "C Specification" section
+    - fieldName - string heading an additional section following specText, if not None
+    - fieldText - string that goes in the additional section
+    - descText - string that goes in the "Description" section
+    - fp - file to write to"""
+    sections = OrderedDict()
+
+    if specText is not None:
+        sections['C Specification'] = specText
+
+    if fieldName is not None:
+        sections[fieldName] = fieldText
+
+    if descText is None or descText.strip() == '':
+        logWarn('refPageHead: no description provided for', pageName)
+
+    if descText is not None:
+        sections['Description'] = descText
+
+    refPageShell(pageName, pageDesc, fp, head_content=None, sections=sections)
+
+
+def refPageTail(pageName,
+                specType=None,
+                specAnchor=None,
+                seeAlso=None,
+                fp=None,
+                auto=False,
+                leveloffset=0):
+    """Generate end boilerplate of a reference page.
+
+    - pageName - name of the page
+    - specType - None or the 'spec' attribute from the refpage block,
+      identifying the specification name and URL this refpage links to.
+    - specAnchor - None or the 'anchor' attribute from the refpage block,
+      identifying the anchor in the specification this refpage links to. If
+      None, the pageName is assumed to be a valid anchor.
+    - seeAlso - text of the "See Also" section
+    - fp - file to write the page to
+    - auto - True if this is an entirely generated refpage, False if it is
+      handwritten content from the spec.
+    - leveloffset - number of levels to bias section titles up or down."""
+
+    specName = conventions.api_name(specType)
+    specURL = conventions.specURL(specType)
+    if specAnchor is None:
+        specAnchor = pageName
+
+    if seeAlso is None:
+        seeAlso = 'No cross-references are available\n'
+
+    notes = [
+        'For more information, see the {}#{}[{} Specification^]'.format(
+            specURL, specAnchor, specName),
+        '',
+    ]
+
+    if auto:
+        notes.extend((
+            'This page is a generated document.',
+            'Fixes and changes should be made to the generator scripts, '
+            'not directly.',
+        ))
+    else:
+        notes.extend((
+            'This page is extracted from the ' + specName + ' Specification. ',
+            'Fixes and changes should be made to the Specification, '
+            'not directly.',
+        ))
+
+    # Generate the section header.
+    # Default depth is 2.
+    depth = max(0, leveloffset + 2)
+    prefix = '=' * depth
+
+    print(f'{prefix} See Also',
+          '',
+          seeAlso,
+          '',
+          sep='\n', file=fp)
+
+    print(f'{prefix} Document Notes',
+          '',
+          '\n'.join(notes),
+          '',
+          sep='\n', file=fp)
+
+    printFooter(fp, leveloffset)
+
+
+def xrefRewriteInitialize():
+    """Initialize substitution patterns for asciidoctor xrefs."""
+
+    global refLinkPattern, refLinkSubstitute
+    global refLinkTextPattern, refLinkTextSubstitute
+    global specLinkPattern, specLinkSubstitute
+
+    # These are xrefs to API entities, rewritten to link to refpages
+    # The refLink variants are for xrefs with only an anchor and no text.
+    # The refLinkText variants are for xrefs with both anchor and text
+    refLinkPattern = re.compile(r'<<([Vv][Kk][A-Za-z0-9_]+)>>')
+    refLinkSubstitute = r'link:\1.html[\1^]'
+
+    refLinkTextPattern = re.compile(r'<<([Vv][Kk][A-Za-z0-9_]+)[,]?[ \t\n]*([^>,]*)>>')
+    refLinkTextSubstitute = r'link:\1.html[\2^]'
+
+    # These are xrefs to other anchors, rewritten to link to the spec
+    specLinkPattern = re.compile(r'<<([-A-Za-z0-9_.(){}:]+)[,]?[ \t\n]*([^>,]*)>>')
+
+    # Unfortunately, specLinkSubstitute depends on the link target,
+    # so cannot be constructed in advance.
+    specLinkSubstitute = None
+
+
+def xrefRewrite(text, specURL):
+    """Rewrite asciidoctor xrefs in text to resolve properly in refpages.
+    Xrefs which are to refpages are rewritten to link to those
+    refpages. The remainder are rewritten to generate external links into
+    the supplied specification document URL.
+
+    - text - string to rewrite, or None
+    - specURL - URL to target
+
+    Returns rewritten text, or None, respectively"""
+
+    global refLinkPattern, refLinkSubstitute
+    global refLinkTextPattern, refLinkTextSubstitute
+    global specLinkPattern, specLinkSubstitute
+
+    specLinkSubstitute = r'link:{}#\1[\2^]'.format(specURL)
+
+    if text is not None:
+        text, _ = refLinkPattern.subn(refLinkSubstitute, text)
+        text, _ = refLinkTextPattern.subn(refLinkTextSubstitute, text)
+        text, _ = specLinkPattern.subn(specLinkSubstitute, text)
+
+    return text
+
+def emitPage(baseDir, specDir, pi, file):
+    """Extract a single reference page into baseDir.
+
+    - baseDir - base directory to emit page into
+    - specDir - directory extracted page source came from
+    - pi - pageInfo for this page relative to file
+    - file - list of strings making up the file, indexed by pi"""
+    pageName = f'{baseDir}/{pi.name}{conventions.file_suffix}'
+
+    # Add a dictionary entry for this page
+    global genDict
+    genDict[pi.name] = None
+    logDiag('emitPage:', pageName)
+
+    # Short description
+    if pi.desc is None:
+        pi.desc = '(no short description available)'
+
+    # Member/parameter section label and text, if there is one
+    field = None
+    fieldText = None
+
+    # Only do structural checks on API pages
+    if pi.type in refpage_api_types:
+        if pi.include is None:
+            logWarn('emitPage:', pageName, 'INCLUDE is None, no page generated')
+            return
+
+        # Specification text
+        lines = remapIncludes(file[pi.begin:pi.include + 1], baseDir, specDir)
+        specText = ''.join(lines)
+
+        if pi.param is not None:
+            if pi.type == 'structs':
+                field = 'Members'
+            elif pi.type in ['protos', 'funcpointers']:
+                field = 'Parameters'
+            else:
+                logWarn('emitPage: unknown field type:', pi.type,
+                        'for', pi.name)
+            lines = remapIncludes(file[pi.param:pi.body], baseDir, specDir)
+            fieldText = ''.join(lines)
+
+        # Description text
+        if pi.body != pi.include:
+            lines = remapIncludes(file[pi.body:pi.end + 1], baseDir, specDir)
+            descText = ''.join(lines)
+        else:
+            descText = None
+            logWarn('emitPage: INCLUDE == BODY, so description will be empty for', pi.name)
+            if pi.begin != pi.include:
+                logWarn('emitPage: Note: BEGIN != INCLUDE, so the description might be incorrectly located before the API include!')
+    elif pi.type in refpage_other_types:
+        specText = None
+        descText = ''.join(file[pi.begin:pi.end + 1])
+    else:
+        # This should be caught in the spec markup checking tests
+        logErr(f"emitPage: refpage type='{pi.type}' is unrecognized")
+
+    # Rewrite asciidoctor xrefs to resolve properly in refpages
+    specURL = conventions.specURL(pi.spec)
+
+    specText = xrefRewrite(specText, specURL)
+    fieldText = xrefRewrite(fieldText, specURL)
+    descText = xrefRewrite(descText, specURL)
+
+    fp = open(pageName, 'w', encoding='utf-8')
+    refPageHead(pi.name,
+                pi.desc,
+                specText,
+                field, fieldText,
+                descText,
+                fp)
+    refPageTail(pageName=pi.name,
+                specType=pi.spec,
+                specAnchor=pi.anchor,
+                seeAlso=seeAlsoList(pi.name, pi.refs, pi.alias.split()),
+                fp=fp,
+                auto=False)
+    fp.close()
+
+
+def autoGenEnumsPage(baseDir, pi, file):
+    """Autogenerate a single reference page in baseDir.
+
+    Script only knows how to do this for /enums/ pages, at present.
+
+    - baseDir - base directory to emit page into
+    - pi - pageInfo for this page relative to file
+    - file - list of strings making up the file, indexed by pi"""
+    pageName = f'{baseDir}/{pi.name}{conventions.file_suffix}'
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    # Add a dictionary entry for this page
+    global genDict
+    genDict[pi.name] = None
+    logDiag('autoGenEnumsPage:', pageName)
+
+    # Short description
+    if pi.desc is None:
+        pi.desc = '(no short description available)'
+
+    # Description text. Allow for the case where an enum definition
+    # is not embedded.
+    if not pi.embed:
+        embedRef = ''
+    else:
+        embedRef = ''.join((
+                           '  * The reference page for ',
+                           macroPrefix(pi.embed),
+                           ', where this interface is defined.\n'))
+
+    txt = ''.join((
+        'For more information, see:\n\n',
+        embedRef,
+        '  * The See Also section for other reference pages using this type.\n',
+        '  * The ' + apiName + ' Specification.\n'))
+
+    refPageHead(pi.name,
+                pi.desc,
+                ''.join(file[pi.begin:pi.include + 1]),
+                None, None,
+                txt,
+                fp)
+    refPageTail(pageName=pi.name,
+                specType=pi.spec,
+                specAnchor=pi.anchor,
+                seeAlso=seeAlsoList(pi.name, pi.refs, pi.alias.split()),
+                fp=fp,
+                auto=True)
+    fp.close()
+
+
+# Pattern to break apart an API *Flags{authorID} name, used in
+# autoGenFlagsPage.
+flagNamePat = re.compile(r'(?P<name>\w+)Flags(?P<author>[A-Z]*)')
+
+
+def autoGenFlagsPage(baseDir, flagName):
+    """Autogenerate a single reference page in baseDir for an API *Flags type.
+
+    - baseDir - base directory to emit page into
+    - flagName - API *Flags name"""
+    pageName = f'{baseDir}/{flagName}{conventions.file_suffix}'
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    # Add a dictionary entry for this page
+    global genDict
+    genDict[flagName] = None
+    logDiag('autoGenFlagsPage:', pageName)
+
+    # Short description
+    matches = flagNamePat.search(flagName)
+    if matches is not None:
+        name = matches.group('name')
+        author = matches.group('author')
+        logDiag('autoGenFlagsPage: split name into', name, 'Flags', author)
+        flagBits = name + 'FlagBits' + author
+        desc = 'Bitmask of ' + flagBits
+    else:
+        logWarn('autoGenFlagsPage:', pageName, 'does not end in "Flags{author ID}". Cannot infer FlagBits type.')
+        flagBits = None
+        desc = 'Unknown ' + apiName + ' flags type'
+
+    # Description text
+    if flagBits is not None:
+        txt = ''.join((
+            'etext:' + flagName,
+            ' is a mask of zero or more elink:' + flagBits + '.\n',
+            'It is used as a member and/or parameter of the structures and commands\n',
+            'in the See Also section below.\n'))
+    else:
+        txt = ''.join((
+            'etext:' + flagName,
+            ' is an unknown ' + apiName + ' type, assumed to be a bitmask.\n'))
+
+    refPageHead(flagName,
+                desc,
+                makeAPIInclude('flags', flagName),
+                None, None,
+                txt,
+                fp)
+    refPageTail(pageName=flagName,
+                specType=pi.spec,
+                specAnchor=pi.anchor,
+                seeAlso=seeAlsoList(flagName, None),
+                fp=fp,
+                auto=True)
+    fp.close()
+
+
+def autoGenHandlePage(baseDir, handleName):
+    """Autogenerate a single handle page in baseDir for an API handle type.
+
+    - baseDir - base directory to emit page into
+    - handleName - API handle name"""
+    # @@ Need to determine creation function & add handles/ include for the
+    # @@ interface in generator.py.
+    pageName = f'{baseDir}/{handleName}{conventions.file_suffix}'
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    # Add a dictionary entry for this page
+    global genDict
+    genDict[handleName] = None
+    logDiag('autoGenHandlePage:', pageName)
+
+    # Short description
+    desc = apiName + ' object handle'
+
+    descText = ''.join((
+        'sname:' + handleName,
+        ' is an object handle type, referring to an object used\n',
+        'by the ' + apiName + ' implementation. These handles are created or allocated\n',
+        'by the @@ TBD @@ function, and used by other ' + apiName + ' structures\n',
+        'and commands in the See Also section below.\n'))
+
+    refPageHead(handleName,
+                desc,
+                makeAPIInclude('handles', handleName),
+                None, None,
+                descText,
+                fp)
+    refPageTail(pageName=handleName,
+                specType=pi.spec,
+                specAnchor=pi.anchor,
+                seeAlso=seeAlsoList(handleName, None),
+                fp=fp,
+                auto=True)
+    fp.close()
+
+
+def genRef(specFile, baseDir):
+    """Extract reference pages from a spec asciidoc source file.
+
+    - specFile - filename to extract from
+    - baseDir - output directory to generate page in"""
+    # We do not care the newline format used here.
+    file, _ = loadFile(specFile)
+    if file is None:
+        return
+
+    # Save the path to this file for later use in rewriting relative includes
+    specDir = os.path.dirname(os.path.abspath(specFile))
+
+    pageMap = findRefs(file, specFile)
+    logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
+
+    sys.stderr.flush()
+
+    # Fix up references in pageMap
+    fixupRefs(pageMap, specFile, file)
+
+    # Create each page, if possible
+    pages = {}
+
+    for name in sorted(pageMap):
+        pi = pageMap[name]
+
+        # Only generate the page if it is in the requested build
+        # 'freeform' pages are always generated
+        # 'feature' pages (core versions & extensions) are generated if they are in
+        # the requested feature list
+        # All other pages (APIs) are generated if they are in the API map for
+        # the build.
+        if pi.type in refpage_api_types:
+            if name not in api.typeCategory:
+                # Also check aliases of name - api.nonexistent is the same
+                # mapping used to rewrite *link: macros in this build.
+                if name not in api.nonexistent:
+                    logWarn(f'genRef: NOT generating feature page {name} - API not in this build')
+                    continue
+                else:
+                    logWarn(f'genRef: generating feature page {name} because its alias {api.nonexistent[name]} exists')
+        elif pi.type in refpage_other_types:
+            # The only non-API type which can be checked is a feature refpage
+            if pi.type == 'feature':
+                if name not in api.features:
+                    logWarn(f'genRef: NOT generating feature page {name} - feature not in this build')
+                    continue
+
+        printPageInfo(pi, file)
+
+        if pi.Warning:
+            logDiag('genRef:', pi.name + ':', pi.Warning)
+
+        if pi.extractPage:
+            emitPage(baseDir, specDir, pi, file)
+        elif pi.type == 'enums':
+            autoGenEnumsPage(baseDir, pi, file)
+        elif pi.type == 'flags':
+            autoGenFlagsPage(baseDir, pi.name)
+        else:
+            # Do not extract this page
+            logWarn('genRef: Cannot extract or autogenerate:', pi.name)
+
+        pages[pi.name] = pi
+        for alias in pi.alias.split():
+            pages[alias] = pi
+
+    return pages
+
+
+def genSinglePageRef(baseDir):
+    """Generate the single-page version of the ref pages.
+
+    This assumes there is a page for everything in the api module dictionaries.
+    Extensions (KHR, EXT, etc.) are currently skipped"""
+    # Accumulate head of page
+    head = io.StringIO()
+
+    printCopyrightSourceComments(head)
+
+    print('= ' + apiName + ' API Reference Pages',
+          ':data-uri:',
+          ':icons: font',
+          ':doctype: book',
+          ':numbered!:',
+          ':max-width: 200',
+          ':data-uri:',
+          ':toc2:',
+          ':toclevels: 2',
+          ':attribute-missing: warn',
+          '',
+          sep='\n', file=head)
+
+    print('== Copyright', file=head)
+    print('', file=head)
+    print('include::{config}/copyright-ccby' + conventions.file_suffix + '[]', file=head)
+    print('', file=head)
+
+    # Inject the table of contents. Asciidoc really ought to be generating
+    # this for us.
+
+    sections = [
+        [api.protos,       'protos',       apiName + ' Commands'],
+        [api.handles,      'handles',      'Object Handles'],
+        [api.structs,      'structs',      'Structures'],
+        [api.enums,        'enums',        'Enumerations'],
+        [api.flags,        'flags',        'Flags'],
+        [api.funcpointers, 'funcpointers', 'Function Pointer Types'],
+        [api.basetypes,    'basetypes',    apiName + ' Scalar types'],
+        [api.defines,      'defines',      'C Macro Definitions'],
+        [extensions,       'extensions',   apiName + ' Extensions']
+    ]
+
+    # Accumulate body of page
+    body = io.StringIO()
+
+    for (apiDict, label, title) in sections:
+        # Add section title/anchor header to body
+        anchor = '[[' + label + ',' + title + ']]'
+        print(anchor,
+              '== ' + title,
+              '',
+              ':leveloffset: 2',
+              '',
+              sep='\n', file=body)
+
+        if label == 'extensions':
+            # preserve order of extensions since we already sorted the way we want.
+            keys = apiDict.keys()
+        else:
+            keys = sorted(apiDict.keys())
+
+        for refPage in keys:
+            # Do not generate links for aliases, which are included with the
+            # aliased page
+            if refPage not in api.alias:
+                # Add page to body
+                if 'FlagBits' in refPage and conventions.unified_flag_refpages:
+                    # OpenXR does not create separate ref pages for FlagBits:
+                    # the FlagBits includes go in the Flags refpage.
+                    # Previously the Vulkan script would only emit non-empty
+                    # Vk*Flags pages, via the logic
+                    #   if refPage not in api.flags or api.flags[refPage] is not None
+                    #       emit page
+                    # Now, all are emitted.
+                    continue
+                else:
+                    print(f'include::{refPage}{conventions.file_suffix}[]', file=body)
+            else:
+                # Alternatively, we could (probably should) link to the
+                # aliased refpage
+                logWarn('(Benign) Not including', refPage,
+                        'in single-page reference',
+                        'because it is an alias of', api.alias[refPage])
+
+        print('\n' + ':leveloffset: 0' + '\n', file=body)
+
+    # Write head and body to the output file
+    pageName = f'{baseDir}/apispec{conventions.file_suffix}'
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    print(head.getvalue(), file=fp, end='')
+    print(body.getvalue(), file=fp, end='')
+
+    head.close()
+    body.close()
+    fp.close()
+
+
+def genExtension(baseDir, extpath, name, info):
+    """Generate refpage, and add dictionary entry for an extension
+
+    - baseDir - output directory to generate page in
+    - extpath - None, or path to per-extension specification sources if
+                those are to be included in extension refpages
+    - name - extension name
+    - info - <extension> Element from XML"""
+
+    # Add a dictionary entry for this page
+    global genDict
+    genDict[name] = None
+    declares = []
+    elem = info.elem
+
+    # Type of extension (instance, device, etc.)
+    ext_type = elem.get('type')
+
+    # Autogenerate interfaces from <extension> entry
+    for required in elem.find('require'):
+        req_name = required.get('name')
+        if not req_name:
+            # This is not what we are looking for
+            continue
+        if req_name.endswith('_SPEC_VERSION') or req_name.endswith('_EXTENSION_NAME'):
+            # Do not link to spec version or extension name - those ref pages are not created.
+            continue
+
+        if required.get('extends'):
+            # These are either extensions of enumerated types, or const enum
+            # values: neither of which get a ref page - although we could
+            # include the enumerated types in the See Also list.
+            continue
+
+        if req_name not in genDict:
+            if req_name in api.alias:
+                logWarn(f'WARN: {req_name} (in extension {name}) is an alias, so does not have a ref page')
+            else:
+                logWarn(f'ERROR: {req_name} (in extension {name}) does not have a ref page.')
+
+        declares.append(req_name)
+
+    appbody = None
+    tail_content = None
+    if extpath is not None:
+        try:
+            appPath = extpath + '/' + conventions.extension_file_path(name)
+            appfp = open(appPath, 'r', encoding='utf-8')
+            appbody = appfp.read()
+            appfp.close()
+
+            # Transform internal links to crosslinks
+            specURL = conventions.specURL()
+            appbody = xrefRewrite(appbody, specURL)
+        except FileNotFoundError:
+            print('Cannot find extension appendix for', name)
+            logWarn('Cannot find extension appendix for', name)
+
+            # Fall through to autogenerated page
+            extpath = None
+            appbody = None
+
+            appbody = f'Cannot find extension appendix {appPath} for {name}\n'
+    else:
+        tail_content = makeExtensionInclude(name)
+
+    # Write the extension refpage
+    pageName = f'{baseDir}/{name}{conventions.file_suffix}'
+    logDiag('genExtension:', pageName)
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    # There are no generated titled sections
+    sections = None
+
+    refPageShell(name,
+                 "{} extension".format(ext_type),
+                 fp,
+                 appbody,
+                 sections=sections,
+                 tail_content=tail_content)
+
+    # Restore leveloffset for boilerplate in refPageTail
+    if conventions.include_extension_appendix_in_refpage:
+        # The generated metadata include (refpage.extensionname.adoc) moved
+        # the leveloffset attribute by -1 to account for the relative
+        # structuring of the spec extension appendix section structure vs.
+        # the refpages.
+        # This restores leveloffset for the boilerplate in refPageTail.
+        leveloffset = 1
+    else:
+        leveloffset = 0
+
+    refPageTail(pageName=name,
+                specType=None,
+                specAnchor=name,
+                seeAlso=seeAlsoList(name, declares),
+                fp=fp,
+                auto=True,
+                leveloffset=leveloffset)
+    fp.close()
+
+
+if __name__ == '__main__':
+    global genDict, extensions, conventions, apiName
+    genDict = {}
+    extensions = OrderedDict()
+    conventions = APIConventions()
+    apiName = conventions.api_name('api')
+
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-diag', action='store', dest='diagFile',
+                        help='Set the diagnostic file')
+    parser.add_argument('-warn', action='store', dest='warnFile',
+                        help='Set the warning file')
+    parser.add_argument('-log', action='store', dest='logFile',
+                        help='Set the log file for both diagnostics and warnings')
+    parser.add_argument('-genpath', action='store',
+                        default='gen',
+                        help='Path to directory containing generated files')
+    parser.add_argument('-basedir', action='store', dest='baseDir',
+                        default=None,
+                        help='Set the base directory in which pages are generated')
+    parser.add_argument('-noauto', action='store_true',
+                        help='Don\'t generate inferred ref pages automatically')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to extract ref pages from')
+    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+    parser.add_argument('-extension', action='append',
+                        default=[],
+                        help='Specify an extension or extensions to add to targets')
+    parser.add_argument('-rewrite', action='store',
+                        default=None,
+                        help='Name of output file to write Apache mod_rewrite directives to')
+    parser.add_argument('-toc', action='store',
+                        default=None,
+                        help='Name of output file to write an alphabetical TOC to')
+    parser.add_argument('-registry', action='store',
+                        default=conventions.registry_path,
+                        help='Use specified registry file instead of default')
+    parser.add_argument('-extpath', action='store',
+                        default=None,
+                        help='Use extension descriptions from this directory instead of autogenerating extension refpages')
+
+    results = parser.parse_args()
+
+    # Load the generated apimap module
+    sys.path.insert(0, results.genpath)
+    import apimap as api
+
+    setLogFile(True,  True, results.logFile)
+    setLogFile(True, False, results.diagFile)
+    setLogFile(False, True, results.warnFile)
+
+    # Initialize static rewrite patterns for spec xrefs
+    xrefRewriteInitialize()
+
+    if results.baseDir is None:
+        baseDir = results.genpath + '/ref'
+    else:
+        baseDir = results.baseDir
+
+    # Dictionary of pages & aliases
+    pages = {}
+
+    for file in results.files:
+        d = genRef(file, baseDir)
+        pages.update(d)
+
+    # Now figure out which pages were not generated from the spec.
+    # This relies on the dictionaries of API constructs in the api module.
+
+    if not results.noauto:
+        # Must have an apiname selected to avoid complaints from
+        # registry.loadFile, even though it is irrelevant to our uses.
+        genOpts = GeneratorOptions(apiname = conventions.xml_api_name)
+        registry = Registry(genOpts = genOpts)
+        registry.loadFile(results.registry)
+
+        if conventions.write_refpage_include:
+            # Only extensions with a supported="..." attribute in this set
+            # will be considered for extraction/generation.
+            ext_names = set(k for k, v in registry.extdict.items()
+                            if conventions.xml_api_name in v.supported.split(','))
+
+            desired_extensions = ext_names.intersection(set(results.extension))
+            for prefix in conventions.extension_index_prefixes:
+                # Splits up into chunks, sorted within each chunk.
+                filtered_extensions = sorted(
+                    [name for name in desired_extensions
+                     if name.startswith(prefix) and name not in extensions])
+                for name in filtered_extensions:
+                    # logWarn('NOT autogenerating extension refpage for', name)
+                    extensions[name] = None
+                    genExtension(baseDir, results.extpath, name, registry.extdict[name])
+
+        # autoGenFlagsPage is no longer needed because they are added to
+        # the spec sources now.
+        # for page in api.flags:
+        #     if page not in genDict:
+        #         autoGenFlagsPage(baseDir, page)
+
+        # autoGenHandlePage is no longer needed because they are added to
+        # the spec sources now.
+        # for page in api.structs:
+        #    if typeCategory[page] == 'handle':
+        #        autoGenHandlePage(baseDir, page)
+
+        sections = [
+            (api.flags,        'Flag Types'),
+            (api.enums,        'Enumerated Types'),
+            (api.structs,      'Structures'),
+            (api.protos,       'Prototypes'),
+            (api.funcpointers, 'Function Pointers'),
+            (api.basetypes,    apiName + ' Scalar Types'),
+            (extensions,       apiName + ' Extensions'),
+        ]
+
+        # Summarize pages that were not generated, for good or bad reasons
+
+        for (apiDict, title) in sections:
+            # OpenXR was keeping a 'flagged' state which only printed out a
+            # warning for the first non-generated page, but was otherwise
+            # unused. This does not seem helpful.
+            for page in apiDict:
+                if page not in genDict:
+                    # Page was not generated - why not?
+                    if page in api.alias:
+                        logDiag('(Benign, is an alias) Ref page for', title, page, 'is aliased into', api.alias[page])
+                    elif page in api.flags and api.flags[page] is None:
+                        logDiag('(Benign, no FlagBits defined) No ref page generated for ', title,
+                                page)
+                    else:
+                        # Could introduce additional logic to detect
+                        # external types and not emit them.
+                        logWarn('No ref page generated for  ', title, page)
+
+        genSinglePageRef(baseDir)
+
+    if results.rewrite:
+        # Generate Apache rewrite directives for refpage aliases
+        fp = open(results.rewrite, 'w', encoding='utf-8')
+
+        for page in sorted(pages):
+            p = pages[page]
+            rewrite = p.name
+
+            if page != rewrite:
+                print('RewriteRule ^', page, '.html$ ', rewrite, '.html',
+                      sep='', file=fp)
+        fp.close()
+
+    if results.toc:
+        # Generate dynamic portion of refpage TOC
+        fp = open(results.toc, 'w', encoding='utf-8')
+
+        # Run through dictionary of pages generating an TOC
+        print(12 * ' ', '<li class="Level1">Alphabetic Contents', sep='', file=fp)
+        print(16 * ' ', '<ul class="Level2">', sep='', file=fp)
+        lastLetter = None
+
+        for page in sorted(pages, key=str.upper):
+            p = pages[page]
+            letter = page[0:1].upper()
+
+            if letter != lastLetter:
+                if lastLetter:
+                    # End previous block
+                    print(24 * ' ', '</ul>', sep='', file=fp)
+                    print(20 * ' ', '</li>', sep='', file=fp)
+                # Start new block
+                print(20 * ' ', '<li>', letter, sep='', file=fp)
+                print(24 * ' ', '<ul class="Level3">', sep='', file=fp)
+                lastLetter = letter
+
+            # Add this page to the list
+            print(28 * ' ', '<li><a href="', p.name, '.html" ',
+                  'target="pagedisplay">', page, '</a></li>',
+                  sep='', file=fp)
+
+        if lastLetter:
+            # Close the final letter block
+            print(24 * ' ', '</ul>', sep='', file=fp)
+            print(20 * ' ', '</li>', sep='', file=fp)
+
+        # Close the list
+        print(16 * ' ', '</ul>', sep='', file=fp)
+        print(12 * ' ', '</li>', sep='', file=fp)
+
+        # print('name {} -> page {}'.format(page, pages[page].name))
+
+        fp.close()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/genRelease b/codegen/vulkan/vulkan-docs-next/scripts/genRelease
new file mode 100755
index 0000000..73b1f37
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/genRelease
@@ -0,0 +1,257 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import subprocess
+import sys
+
+from genspec import *
+
+# Eventually, these may be defined by the extdependency module
+Version1_3 = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VK_VERSION_1_3' ]
+Version1_2 = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2' ]
+Version1_1 = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ]
+Version1_0 = [ 'VK_VERSION_1_0' ]
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-internal', action='store_true',
+                        help='Generate internal build, not public')
+    parser.add_argument('-norefpages', action='store_true',
+                        help='Do not generate refpages')
+    parser.add_argument('-singlerefpage', action='store_true',
+                        help='Generate single-page refpage - NOT SUPPORTED')
+    parser.add_argument('-chunked', action='store_true',
+                        help='Generate chunked HTML outputs')
+    parser.add_argument('-pdf', action='store_true',
+                        help='Generate PDF outputs')
+
+    parser.add_argument('-nov13', action='store_false', dest='v13',
+                        help='Suppress Vulkan 1.3 targets')
+    parser.add_argument('-v12', action='store_true',
+                        help='Generate Vulkan 1.2 targets')
+    parser.add_argument('-v11', action='store_true',
+                        help='Generate Vulkan 1.1 targets')
+    parser.add_argument('-v10', action='store_true',
+                        help='Generate Vulkan 1.0 targets')
+
+    parser.add_argument('-nocorespec', action='store_false', dest='corespec',
+                        help='Do not generate core API-only targets')
+    parser.add_argument('-noratspec', action='store_false', dest='ratspec',
+                        help='Do not generate core API + ratified extensions-only targets')
+    parser.add_argument('-noallspec', action='store_false', dest='allspec',
+                        help='Do not generate full API + all extensions targets')
+
+    parser.add_argument('-registry', action='store',
+                        default=None,
+                        help='Path to API XML registry file specifying version and extension dependencies')
+    parser.add_argument('-apiname', action='store',
+                        default=None,
+                        help='API name to generate')
+
+    parser.add_argument('-gitroot', action='store',
+                        default='/home/tree/git',
+                        help='Set the directory containing gitlab vulkan and github Vulkan-Docs repo clones to build from')
+    parser.add_argument('-repodir', action='store', dest='repoDir',
+                        default=None,
+                        help='Set the repository directory to build from (overrides defaults)')
+    parser.add_argument('-outdir', action='store', dest='outDir',
+                        default=None,
+                        help='Set the output directory to build into (overrides defaults)')
+
+    args = parser.parse_args()
+
+    # Look for scripts/extdependency.py
+    # This requires makeSpec to be invoked from the repository root, but we
+    # could derive that path.
+    sys.path.insert(0, 'scripts')
+    from extdependency import ApiDependencies
+
+    deps = ApiDependencies(args.registry, args.apiname)
+
+    allExts = deps.allExtensions()
+    ratifiedExts = deps.ratifiedExtensions()
+
+    if args.internal:
+        # For internal build & pseudo-release
+        if args.repoDir is None:
+            args.repoDir = f'{args.gitroot}/vulkan'
+        if args.outDir is None:
+            args.outDir = f'{args.gitroot}/vulkan/out'
+    else:
+        # For public release
+        if args.repoDir is None:
+            args.repoDir = f'{args.gitroot}/Vulkan-Docs'
+        if args.outDir is None:
+            args.outDir = f'{args.gitroot}/registry/vulkan/specs'
+
+    refPageTargets = ''
+
+    if not args.norefpages:
+        # Generate separate reference pages
+        refPageTargets += ' manhtmlpages'
+
+    if args.singlerefpage:
+        # Generate single-page refpage.
+        refPageTargets += ' manhtml'
+        if args.pdf:
+            refPageTargets += ' manpdf'
+        print('echo Info: single-page refpage targets are NOT SUPPORTED')
+
+    specTargets = ' html'
+    if args.chunked:
+        specTargets += ' chunked'
+    if args.pdf:
+        specTargets += ' pdf'
+
+    print('echo Info: Building release from', args.repoDir, 'to', args.outDir)
+    print('echo Info: Building spec targets', specTargets)
+    print('')
+
+    # Current Vulkan 1.3 specs
+    if args.v13:
+        if args.allspec:
+            # Build ref pages and validusage targets only for 1.3 + all exts
+            # Formerly set xmlTargets = 'clobber install', but we no longer
+            # generate headers in the registry tree.
+            buildBranch(targetDir = '1.3-extensions',
+                        versions = Version1_3,
+                        extensions = allExts,
+                        ratified = False,
+                        apititle = '(with all registered Vulkan extensions)',
+                        specTargets = specTargets + ' validusage' + refPageTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.ratspec:
+            buildBranch(targetDir = '1.3-khr-extensions',
+                        versions = Version1_3,
+                        extensions = ratifiedExts,
+                        ratified = True,
+                        apititle = '(with all ratified extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.corespec:
+            # Build style guide and registry documentation targets only for 1.3
+            # + no extensions.
+            buildBranch(targetDir = '1.3',
+                        versions = Version1_3,
+                        extensions = None,
+                        ratified = True,
+                        apititle = None,
+                        specTargets = specTargets + ' styleguide registry',
+                        repoDir = args.repoDir,
+                        outDir = args.outDir,
+                        needRefSources = True)
+
+    # Vulkan 1.2 specs
+    if args.v12:
+        if args.allspec:
+            buildBranch(targetDir = '1.2-extensions',
+                        versions = Version1_2,
+                        extensions = allExts,
+                        ratified = False,
+                        apititle = '(with all registered Vulkan extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.ratspec:
+            buildBranch(targetDir = '1.2-khr-extensions',
+                        versions = Version1_2,
+                        extensions = ratifiedExts,
+                        ratified = True,
+                        apititle = '(with all ratified extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.corespec:
+            # Build style guide and registry documentation targets only for 1.2
+            # + no extensions.
+            buildBranch(targetDir = '1.2',
+                        versions = Version1_2,
+                        extensions = None,
+                        ratified = True,
+                        apititle = None,
+                        specTargets = specTargets + ' styleguide registry',
+                        repoDir = args.repoDir,
+                        outDir = args.outDir,
+                        needRefSources = True)
+
+    # Vulkan 1.1 specs
+    if args.v11:
+        if args.allspec:
+            buildBranch(targetDir = '1.1-extensions',
+                        versions = Version1_1,
+                        extensions = allExts,
+                        ratified = False,
+                        apititle = '(with all registered Vulkan extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.ratspec:
+            buildBranch(targetDir = '1.1-khr-extensions',
+                        versions = Version1_1,
+                        extensions = ratifiedExts,
+                        ratified = True,
+                        apititle = '(with all ratified extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.corespec:
+            buildBranch(targetDir = '1.1',
+                        versions = Version1_1,
+                        extensions = None,
+                        ratified = True,
+                        apititle = None,
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+    else:
+        print('echo Info: Not building 1.1 specs yet')
+
+
+    # Vulkan 1.0 specs.
+    if args.v10:
+        if args.allspec:
+            buildBranch(targetDir = '1.0-extensions',
+                        versions = Version1_0,
+                        extensions = allExts,
+                        ratified = False,
+                        apititle = '(with all registered Vulkan extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.ratspec:
+            buildBranch(targetDir = '1.0-wsi_extensions',
+                        versions = Version1_0,
+                        extensions = ratifiedExts,
+                        ratified = True,
+                        apititle = '(with all ratified extensions)',
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.corespec:
+            buildBranch(targetDir = '1.0',
+                        versions = Version1_0,
+                        extensions = None,
+                        ratified = True,
+                        apititle = None,
+                        specTargets = specTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+    else:
+        print('echo Info: Not building 1.0 specs yet')
+
+    print('echo Info: post-generation cleanup')
+    createTags(releaseNum(), buildOnFriday())
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/generator.py b/codegen/vulkan/vulkan-docs-next/scripts/generator.py
new file mode 100644
index 0000000..669e5d6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/generator.py
@@ -0,0 +1,1389 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+"""Base class for source/header/doc generators, as well as some utility functions."""
+
+from __future__ import unicode_literals
+
+import io
+import os
+import pdb
+import re
+import shutil
+import sys
+import tempfile
+try:
+    from pathlib import Path
+except ImportError:
+    from pathlib2 import Path  # type: ignore
+
+from spec_tools.util import getElemName, getElemType
+
+
+def write(*args, **kwargs):
+    file = kwargs.pop('file', sys.stdout)
+    end = kwargs.pop('end', '\n')
+    file.write(' '.join(str(arg) for arg in args))
+    file.write(end)
+
+
+def noneStr(s):
+    """Return string argument, or "" if argument is None.
+
+    Used in converting etree Elements into text.
+    s - string to convert"""
+    if s:
+        return s
+    return ""
+
+
+def enquote(s):
+    """Return string argument with surrounding quotes,
+      for serialization into Python code."""
+    if s:
+        if isinstance(s, str):
+            return f"'{s}'"
+        else:
+            return s
+    return None
+
+
+def regSortCategoryKey(feature):
+    """Sort key for regSortFeatures.
+    Sorts by category of the feature name string:
+
+    - Core API features (those defined with a `<feature>` tag)
+        - (sort VKSC after VK - this is Vulkan-specific)
+    - ARB/KHR/OES (Khronos extensions)
+    - other       (EXT/vendor extensions)"""
+
+    if feature.elem.tag == 'feature':
+        if feature.name.startswith('VKSC'):
+            return 0.5
+        else:
+            return 0
+    if (feature.category == 'ARB'
+        or feature.category == 'KHR'
+            or feature.category == 'OES'):
+        return 1
+
+    return 2
+
+
+def regSortOrderKey(feature):
+    """Sort key for regSortFeatures - key is the sortorder attribute."""
+
+    return feature.sortorder
+
+
+def regSortNameKey(feature):
+    """Sort key for regSortFeatures - key is the extension name."""
+
+    return feature.name
+
+
+def regSortFeatureVersionKey(feature):
+    """Sort key for regSortFeatures - key is the feature version.
+    `<extension>` elements all have version number 0."""
+
+    return float(feature.versionNumber)
+
+
+def regSortExtensionNumberKey(feature):
+    """Sort key for regSortFeatures - key is the extension number.
+    `<feature>` elements all have extension number 0."""
+
+    return int(feature.number)
+
+
+def regSortFeatures(featureList):
+    """Default sort procedure for features.
+
+    - Sorts by explicit sort order (default 0) relative to other features
+    - then by feature category ('feature' or 'extension'),
+    - then by version number (for features)
+    - then by extension number (for extensions)"""
+    featureList.sort(key=regSortExtensionNumberKey)
+    featureList.sort(key=regSortFeatureVersionKey)
+    featureList.sort(key=regSortCategoryKey)
+    featureList.sort(key=regSortOrderKey)
+
+
+class MissingGeneratorOptionsError(RuntimeError):
+    """Error raised when a Generator tries to do something that requires GeneratorOptions but it is None."""
+
+    def __init__(self, msg=None):
+        full_msg = 'Missing generator options object self.genOpts'
+        if msg:
+            full_msg += ': ' + msg
+        super().__init__(full_msg)
+
+
+class MissingRegistryError(RuntimeError):
+    """Error raised when a Generator tries to do something that requires a Registry object but it is None."""
+
+    def __init__(self, msg=None):
+        full_msg = 'Missing Registry object self.registry'
+        if msg:
+            full_msg += ': ' + msg
+        super().__init__(full_msg)
+
+
+class MissingGeneratorOptionsConventionsError(RuntimeError):
+    """Error raised when a Generator tries to do something that requires a Conventions object but it is None."""
+
+    def __init__(self, msg=None):
+        full_msg = 'Missing Conventions object self.genOpts.conventions'
+        if msg:
+            full_msg += ': ' + msg
+        super().__init__(full_msg)
+
+
+class GeneratorOptions:
+    """Base class for options used during header/documentation production.
+
+    These options are target language independent, and used by
+    Registry.apiGen() and by base OutputGenerator objects."""
+
+    def __init__(self,
+                 conventions=None,
+                 filename=None,
+                 directory='.',
+                 genpath=None,
+                 apiname=None,
+                 mergeApiNames=None,
+                 profile=None,
+                 versions='.*',
+                 emitversions='.*',
+                 defaultExtensions=None,
+                 addExtensions=None,
+                 removeExtensions=None,
+                 emitExtensions=None,
+                 emitSpirv=None,
+                 emitFormats=None,
+                 reparentEnums=True,
+                 sortProcedure=regSortFeatures,
+                 requireCommandAliases=False,
+                 requireDepends=True,
+                ):
+        """Constructor.
+
+        Arguments:
+
+        - conventions - may be mandatory for some generators:
+        an object that implements ConventionsBase
+        - filename - basename of file to generate, or None to write to stdout.
+        - directory - directory in which to generate filename
+        - genpath - path to previously generated files, such as apimap.py
+        - apiname - string matching `<api>` 'apiname' attribute, e.g. 'gl'.
+        - mergeApiNames - If not None, a comma separated list of API names
+          to merge into the API specified by 'apiname'
+        - profile - string specifying API profile , e.g. 'core', or None.
+        - versions - regex matching API versions to process interfaces for.
+        Normally `'.*'` or `'[0-9][.][0-9]'` to match all defined versions.
+        - emitversions - regex matching API versions to actually emit
+        interfaces for (though all requested versions are considered
+        when deciding which interfaces to generate). For GL 4.3 glext.h,
+        this might be `'1[.][2-5]|[2-4][.][0-9]'`.
+        - defaultExtensions - If not None, a string which must in its
+        entirety match the pattern in the "supported" attribute of
+        the `<extension>`. Defaults to None. Usually the same as apiname.
+        - addExtensions - regex matching names of additional extensions
+        to include. Defaults to None.
+        - removeExtensions - regex matching names of extensions to
+        remove (after defaultExtensions and addExtensions). Defaults
+        to None.
+        - emitExtensions - regex matching names of extensions to actually emit
+        interfaces for (though all requested versions are considered when
+        deciding which interfaces to generate). Defaults to None.
+        - emitSpirv - regex matching names of extensions and capabilities
+        to actually emit interfaces for.
+        - emitFormats - regex matching names of formats to actually emit
+        interfaces for.
+        - reparentEnums - move <enum> elements which extend an enumerated
+        type from <feature> or <extension> elements to the target <enums>
+        element. This is required for almost all purposes, but the
+        InterfaceGenerator relies on the list of interfaces in the <feature>
+        or <extension> being complete. Defaults to True.
+        - sortProcedure - takes a list of FeatureInfo objects and sorts
+        them in place to a preferred order in the generated output.
+        - requireCommandAliases - if True, treat command aliases
+        as required dependencies.
+        - requireDepends - whether to follow API dependencies when emitting
+        APIs.
+
+        Default is
+          - core API versions
+          - Khronos (ARB/KHR/OES) extensions
+          - All other extensions
+          - By core API version number or extension number in each group.
+
+        The regex patterns can be None or empty, in which case they match
+        nothing."""
+        self.conventions = conventions
+        """may be mandatory for some generators:
+        an object that implements ConventionsBase"""
+
+        self.filename = filename
+        "basename of file to generate, or None to write to stdout."
+
+        self.genpath = genpath
+        """path to previously generated files, such as apimap.py"""
+
+        self.directory = directory
+        "directory in which to generate filename"
+
+        self.apiname = apiname
+        "string matching `<api>` 'apiname' attribute, e.g. 'gl'."
+
+        self.mergeApiNames = mergeApiNames
+        "comma separated list of API names to merge into the API specified by 'apiname'"
+
+        self.profile = profile
+        "string specifying API profile , e.g. 'core', or None."
+
+        self.versions = self.emptyRegex(versions)
+        """regex matching API versions to process interfaces for.
+        Normally `'.*'` or `'[0-9][.][0-9]'` to match all defined versions."""
+
+        self.emitversions = self.emptyRegex(emitversions)
+        """regex matching API versions to actually emit
+        interfaces for (though all requested versions are considered
+        when deciding which interfaces to generate). For GL 4.3 glext.h,
+        this might be `'1[.][2-5]|[2-4][.][0-9]'`."""
+
+        self.defaultExtensions = defaultExtensions
+        """If not None, a string which must in its
+        entirety match the pattern in the "supported" attribute of
+        the `<extension>`. Defaults to None. Usually the same as apiname."""
+
+        self.addExtensions = self.emptyRegex(addExtensions)
+        """regex matching names of additional extensions
+        to include. Defaults to None."""
+
+        self.removeExtensions = self.emptyRegex(removeExtensions)
+        """regex matching names of extensions to
+        remove (after defaultExtensions and addExtensions). Defaults
+        to None."""
+
+        self.emitExtensions = self.emptyRegex(emitExtensions)
+        """regex matching names of extensions to actually emit
+        interfaces for (though all requested versions are considered when
+        deciding which interfaces to generate)."""
+
+        self.emitSpirv = self.emptyRegex(emitSpirv)
+        """regex matching names of extensions and capabilities
+        to actually emit interfaces for."""
+
+        self.emitFormats = self.emptyRegex(emitFormats)
+        """regex matching names of formats
+        to actually emit interfaces for."""
+
+        self.reparentEnums = reparentEnums
+        """boolean specifying whether to remove <enum> elements from
+        <feature> or <extension> when extending an <enums> type."""
+
+        self.sortProcedure = sortProcedure
+        """takes a list of FeatureInfo objects and sorts
+        them in place to a preferred order in the generated output.
+        Default is core API versions, ARB/KHR/OES extensions, all
+        other extensions, alphabetically within each group."""
+
+        self.codeGenerator = False
+        """True if this generator makes compilable code"""
+
+        self.registry = None
+        """Populated later with the registry object."""
+
+        self.requireCommandAliases = requireCommandAliases
+        """True if alias= attributes of <command> tags are transitively
+        required."""
+
+        self.requireDepends = requireDepends
+        """True if dependencies of API tags are transitively required."""
+
+    def emptyRegex(self, pat):
+        """Substitute a regular expression which matches no version
+        or extension names for None or the empty string."""
+        if not pat:
+            return '_nomatch_^'
+
+        return pat
+
+
+class OutputGenerator:
+    """Generate specified API interfaces in a specific style, such as a C header.
+
+    Base class for generating API interfaces.
+    Manages basic logic, logging, and output file control.
+    Derived classes actually generate formatted output.
+    """
+
+    # categoryToPath - map XML 'category' to include file directory name
+    categoryToPath = {
+        'bitmask': 'flags',
+        'enum': 'enums',
+        'funcpointer': 'funcpointers',
+        'handle': 'handles',
+        'define': 'defines',
+        'basetype': 'basetypes',
+    }
+
+    def breakName(self, name, msg):
+        """Break into debugger if this is a special name"""
+
+        # List of string names to break on
+        bad = (
+        )
+
+        if name in bad and True:
+            print('breakName {}: {}'.format(name, msg))
+            pdb.set_trace()
+
+    def __init__(self, errFile=sys.stderr, warnFile=sys.stderr, diagFile=sys.stdout):
+        """Constructor
+
+        - errFile, warnFile, diagFile - file handles to write errors,
+          warnings, diagnostics to. May be None to not write."""
+        self.outFile = None
+        self.errFile = errFile
+        self.warnFile = warnFile
+        self.diagFile = diagFile
+        # Internal state
+        self.featureName = None
+        """The current feature name being generated."""
+
+        self.genOpts = None
+        """The GeneratorOptions subclass instance."""
+
+        self.registry = None
+        """The specification registry object."""
+
+        self.featureDictionary = {}
+        """The dictionary of dictionaries of API features."""
+
+        # Used for extension enum value generation
+        self.extBase = 1000000000
+        self.extBlockSize = 1000
+        self.madeDirs = {}
+
+        # API dictionary, which may be loaded by the beginFile method of
+        # derived generators.
+        self.apidict = None
+
+        # File suffix for generated files, set in beginFile below.
+        self.file_suffix = ''
+
+    def logMsg(self, level, *args):
+        """Write a message of different categories to different
+        destinations.
+
+        - `level`
+          - 'diag' (diagnostic, voluminous)
+          - 'warn' (warning)
+          - 'error' (fatal error - raises exception after logging)
+
+        - `*args` - print()-style arguments to direct to corresponding log"""
+        if level == 'error':
+            strfile = io.StringIO()
+            write('ERROR:', *args, file=strfile)
+            if self.errFile is not None:
+                write(strfile.getvalue(), file=self.errFile)
+            raise UserWarning(strfile.getvalue())
+        elif level == 'warn':
+            if self.warnFile is not None:
+                write('WARNING:', *args, file=self.warnFile)
+        elif level == 'diag':
+            if self.diagFile is not None:
+                write('DIAG:', *args, file=self.diagFile)
+        else:
+            raise UserWarning(
+                '*** FATAL ERROR in Generator.logMsg: unknown level:' + level)
+
+    def enumToValue(self, elem, needsNum, bitwidth = 32,
+                    forceSuffix = False, parent_for_alias_dereference=None):
+        """Parse and convert an `<enum>` tag into a value.
+
+        - elem - <enum> Element
+        - needsNum - generate a numeric representation of the element value
+        - bitwidth - size of the numeric representation in bits (32 or 64)
+        - forceSuffix - if True, always use a 'U' / 'ULL' suffix on integers
+        - parent_for_alias_dereference - if not None, an Element containing
+          the parent of elem, used to look for elements this is an alias of
+
+        Returns a list:
+
+        - first element - integer representation of the value, or None
+          if needsNum is False. The value must be a legal number
+          if needsNum is True.
+        - second element - string representation of the value
+
+        There are several possible representations of values.
+
+        - A 'value' attribute simply contains the value.
+        - A 'bitpos' attribute defines a value by specifying the bit
+          position which is set in that value.
+        - An 'offset','extbase','extends' triplet specifies a value
+          as an offset to a base value defined by the specified
+          'extbase' extension name, which is then cast to the
+          typename specified by 'extends'. This requires probing
+          the registry database, and imbeds knowledge of the
+          API extension enum scheme in this function.
+        - An 'alias' attribute contains the name of another enum
+          which this is an alias of. The other enum must be
+          declared first when emitting this enum."""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        if self.genOpts.conventions is None:
+            raise MissingGeneratorOptionsConventionsError()
+
+        name = elem.get('name')
+        numVal = None
+        if 'value' in elem.keys():
+            value = elem.get('value')
+            # print('About to translate value =', value, 'type =', type(value))
+            if needsNum:
+                numVal = int(value, 0)
+            # If there is a non-integer, numeric 'type' attribute (e.g. 'u' or
+            # 'ull'), append it to the string value.
+            # t = enuminfo.elem.get('type')
+            # if t is not None and t != '' and t != 'i' and t != 's':
+            #     value += enuminfo.type
+            if forceSuffix:
+              if bitwidth == 64:
+                value = value + 'ULL'
+              else:
+                value = value + 'U'
+            self.logMsg('diag', 'Enum', name, '-> value [', numVal, ',', value, ']')
+            return [numVal, value]
+        if 'bitpos' in elem.keys():
+            value = elem.get('bitpos')
+            bitpos = int(value, 0)
+            numVal = 1 << bitpos
+            value = '0x%08x' % numVal
+            if bitwidth == 64 or bitpos >= 32:
+              value = value + 'ULL'
+            elif forceSuffix:
+              value = value + 'U'
+            self.logMsg('diag', 'Enum', name, '-> bitpos [', numVal, ',', value, ']')
+            return [numVal, value]
+        if 'offset' in elem.keys():
+            # Obtain values in the mapping from the attributes
+            enumNegative = False
+            offset = int(elem.get('offset'), 0)
+            extnumber = int(elem.get('extnumber'), 0)
+            extends = elem.get('extends')
+            if 'dir' in elem.keys():
+                enumNegative = True
+            self.logMsg('diag', 'Enum', name, 'offset =', offset,
+                        'extnumber =', extnumber, 'extends =', extends,
+                        'enumNegative =', enumNegative)
+            # Now determine the actual enumerant value, as defined
+            # in the "Layers and Extensions" appendix of the spec.
+            numVal = self.extBase + (extnumber - 1) * self.extBlockSize + offset
+            if enumNegative:
+                numVal *= -1
+            value = '%d' % numVal
+            # More logic needed!
+            self.logMsg('diag', 'Enum', name, '-> offset [', numVal, ',', value, ']')
+            return [numVal, value]
+        if 'alias' in elem.keys():
+            alias_of = elem.get('alias')
+            if parent_for_alias_dereference is None:
+                return (None, alias_of)
+            siblings = parent_for_alias_dereference.findall('enum')
+            for sib in siblings:
+                sib_name = sib.get('name')
+                if sib_name == alias_of:
+                    return self.enumToValue(sib, needsNum)
+            raise RuntimeError("Could not find the aliased enum value")
+        return [None, None]
+
+    def checkDuplicateEnums(self, enums):
+        """Check enumerated values for duplicates.
+
+        -  enums - list of `<enum>` Elements
+
+        returns the list with duplicates stripped"""
+        # Dictionaries indexed by name and numeric value.
+        # Entries are [ Element, numVal, strVal ] matching name or value
+
+        nameMap = {}
+        valueMap = {}
+
+        stripped = []
+        for elem in enums:
+            name = elem.get('name')
+            (numVal, strVal) = self.enumToValue(elem, True)
+
+            if name in nameMap:
+                # Duplicate name found; check values
+                (name2, numVal2, strVal2) = nameMap[name]
+
+                # Duplicate enum values for the same name are benign. This
+                # happens when defining the same enum conditionally in
+                # several extension blocks.
+                if (strVal2 == strVal or (numVal is not None
+                                          and numVal == numVal2)):
+                    True
+                    # self.logMsg('info', 'checkDuplicateEnums: Duplicate enum (' + name +
+                    #             ') found with the same value:' + strVal)
+                else:
+                    self.logMsg('warn', 'checkDuplicateEnums: Duplicate enum (' + name
+                                + ') found with different values:' + strVal
+                                + ' and ' + strVal2)
+
+                # Do not add the duplicate to the returned list
+                continue
+            elif numVal in valueMap:
+                # Duplicate value found (such as an alias); report it, but
+                # still add this enum to the list.
+                (name2, numVal2, strVal2) = valueMap[numVal]
+
+                msg = 'Two enums found with the same value: {} = {} = {}'.format(
+                    name, name2.get('name'), strVal)
+                self.logMsg('error', msg)
+
+            # Track this enum to detect followon duplicates
+            nameMap[name] = [elem, numVal, strVal]
+            if numVal is not None:
+                valueMap[numVal] = [elem, numVal, strVal]
+
+            # Add this enum to the list
+            stripped.append(elem)
+
+        # Return the list
+        return stripped
+
+    def misracstyle(self):
+        return False;
+
+    def misracppstyle(self):
+        return False;
+
+    def buildEnumCDecl(self, expand, groupinfo, groupName):
+        """Generate the C declaration for an enum"""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        if self.genOpts.conventions is None:
+            raise MissingGeneratorOptionsConventionsError()
+
+        groupElem = groupinfo.elem
+
+        # Determine the required bit width for the enum group.
+        # 32 is the default, which generates C enum types for the values.
+        bitwidth = 32
+
+        # If the constFlagBits preference is set, 64 is the default for bitmasks
+        if self.genOpts.conventions.constFlagBits and groupElem.get('type') == 'bitmask':
+            bitwidth = 64
+
+        # Check for an explicitly defined bitwidth, which will override any defaults.
+        if groupElem.get('bitwidth'):
+            try:
+                bitwidth = int(groupElem.get('bitwidth'))
+            except ValueError as ve:
+                self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for ', groupName, ' - must be an integer value\n')
+                exit(1)
+
+        usebitmask = False
+        usedefine = False
+
+        # Bitmask flags can be generated as either "static const uint{32,64}_t" values,
+        # or as 32-bit C enums. 64-bit types must use uint64_t values.
+        if groupElem.get('type') == 'bitmask':
+            if bitwidth > 32 or self.misracppstyle():
+                usebitmask = True
+            if self.misracstyle():
+                usedefine = True
+
+        if usedefine or usebitmask:
+            # Validate the bitwidth and generate values appropriately
+            if bitwidth > 64:
+                self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for bitmask type ', groupName, ' - must be less than or equal to 64\n')
+                exit(1)
+            else:
+                return self.buildEnumCDecl_BitmaskOrDefine(groupinfo, groupName, bitwidth, usedefine)
+        else:
+            # Validate the bitwidth and generate values appropriately
+            if bitwidth > 32:
+                self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for enum type ', groupName, ' - must be less than or equal to 32\n')
+                exit(1)
+            else:
+                return self.buildEnumCDecl_Enum(expand, groupinfo, groupName)
+
+    def buildEnumCDecl_BitmaskOrDefine(self, groupinfo, groupName, bitwidth, usedefine):
+        """Generate the C declaration for an "enum" that is actually a
+        set of flag bits"""
+        groupElem = groupinfo.elem
+        flagTypeName = groupElem.get('name')
+
+        # Prefix
+        body = "// Flag bits for " + flagTypeName + "\n"
+
+        if bitwidth == 64:
+            body += "typedef VkFlags64 %s;\n" % flagTypeName;
+        else:
+            body += "typedef VkFlags %s;\n" % flagTypeName;
+
+        # Maximum allowable value for a flag (unsigned 64-bit integer)
+        maxValidValue = 2**(64) - 1
+        minValidValue = 0
+
+        # Get a list of nested 'enum' tags.
+        enums = groupElem.findall('enum')
+
+        # Check for and report duplicates, and return a list with them
+        # removed.
+        enums = self.checkDuplicateEnums(enums)
+
+        # Accumulate non-numeric enumerant values separately and append
+        # them following the numeric values, to allow for aliases.
+        # NOTE: this does not do a topological sort yet, so aliases of
+        # aliases can still get in the wrong order.
+        aliasText = ''
+
+        # Loop over the nested 'enum' tags.
+        for elem in enums:
+            # Convert the value to an integer and use that to track min/max.
+            # Values of form -(number) are accepted but nothing more complex.
+            # Should catch exceptions here for more complex constructs. Not yet.
+            (numVal, strVal) = self.enumToValue(elem, True, bitwidth, True)
+            name = elem.get('name')
+
+            # Range check for the enum value
+            if numVal is not None and (numVal > maxValidValue or numVal < minValidValue):
+                self.logMsg('error', 'Allowable range for flag types in C is [', minValidValue, ',', maxValidValue, '], but', name, 'flag has a value outside of this (', strVal, ')\n')
+                exit(1)
+
+            decl = self.genRequirements(name, mustBeFound = False)
+
+            if self.isEnumRequired(elem):
+                protect = elem.get('protect')
+                if protect is not None:
+                    body += '#ifdef {}\n'.format(protect)
+
+                if usedefine:
+                    decl += "#define {} {}\n".format(name, strVal)
+                elif self.misracppstyle():
+                    decl += "static constexpr {} {} {{{}}};\n".format(flagTypeName, name, strVal)
+                else:
+                    # Some C compilers only allow initializing a 'static const' variable with a literal value.
+                    # So initializing an alias from another 'static const' value would fail to compile.
+                    # Work around this by chasing the aliases to get the actual value.
+                    while numVal is None:
+                        alias = self.registry.tree.find("enums/enum[@name='" + strVal + "']")
+                        if alias is not None:
+                            (numVal, strVal) = self.enumToValue(alias, True, bitwidth, True)
+                        else:
+                            self.logMsg('error', 'No such alias {} for enum {}'.format(strVal, name))
+                    decl += "static const {} {} = {};\n".format(flagTypeName, name, strVal)
+
+                if numVal is not None:
+                    body += decl
+                else:
+                    aliasText += decl
+
+                if protect is not None:
+                    body += '#endif\n'
+
+        # Now append the non-numeric enumerant values
+        body += aliasText
+
+        # Postfix
+
+        return ("bitmask", body)
+
+    def buildEnumCDecl_Enum(self, expand, groupinfo, groupName):
+        """Generate the C declaration for an enumerated type"""
+        groupElem = groupinfo.elem
+
+        # Break the group name into prefix and suffix portions for range
+        # enum generation
+        expandName = re.sub(r'([0-9]+|[a-z_])([A-Z0-9])', r'\1_\2', groupName).upper()
+        expandPrefix = expandName
+        expandSuffix = ''
+        expandSuffixMatch = re.search(r'[A-Z][A-Z]+$', groupName)
+        if expandSuffixMatch:
+            expandSuffix = '_' + expandSuffixMatch.group()
+            # Strip off the suffix from the prefix
+            expandPrefix = expandName.rsplit(expandSuffix, 1)[0]
+
+        # Prefix
+        body = ["typedef enum %s {" % groupName]
+
+        # @@ Should use the type="bitmask" attribute instead
+        isEnum = ('FLAG_BITS' not in expandPrefix)
+
+        # Allowable range for a C enum - which is that of a signed 32-bit integer
+        maxValidValue = 2**(32 - 1) - 1
+        minValidValue = (maxValidValue * -1) - 1
+
+        # Get a list of nested 'enum' tags.
+        enums = groupElem.findall('enum')
+
+        # Check for and report duplicates, and return a list with them
+        # removed.
+        enums = self.checkDuplicateEnums(enums)
+
+        # Loop over the nested 'enum' tags. Keep track of the minimum and
+        # maximum numeric values, if they can be determined; but only for
+        # core API enumerants, not extension enumerants. This is inferred
+        # by looking for 'extends' attributes.
+        minName = None
+
+        # Accumulate non-numeric enumerant values separately and append
+        # them following the numeric values, to allow for aliases.
+        # NOTE: this does not do a topological sort yet, so aliases of
+        # aliases can still get in the wrong order.
+        aliasText = []
+
+        maxName = None
+        minValue = None
+        maxValue = None
+        for elem in enums:
+            # Convert the value to an integer and use that to track min/max.
+            # Values of form -(number) are accepted but nothing more complex.
+            # Should catch exceptions here for more complex constructs. Not yet.
+            (numVal, strVal) = self.enumToValue(elem, True)
+            name = elem.get('name')
+
+            # Extension enumerants are only included if they are required
+            if self.isEnumRequired(elem):
+                decl = ''
+
+                protect = elem.get('protect')
+                if protect is not None:
+                    decl += '#ifdef {}\n'.format(protect)
+
+                # Indent requirements comment, if there is one
+                requirements = self.genRequirements(name, mustBeFound = False)
+                if requirements != '':
+                    requirements = '  ' + requirements
+                decl += requirements
+                decl += '    {} = {},'.format(name, strVal)
+
+                if protect is not None:
+                    decl += '\n#endif'
+
+                if numVal is not None:
+                    body.append(decl)
+                else:
+                    aliasText.append(decl)
+
+            # Range check for the enum value
+            if numVal is not None and (numVal > maxValidValue or numVal < minValidValue):
+                self.logMsg('error', 'Allowable range for C enum types is [', minValidValue, ',', maxValidValue, '], but', name, 'has a value outside of this (', strVal, ')\n')
+                exit(1)
+
+            # Do not track min/max for non-numbers (numVal is None)
+            if isEnum and numVal is not None and elem.get('extends') is None:
+                if minName is None:
+                    minName = maxName = name
+                    minValue = maxValue = numVal
+                elif minValue is None or numVal < minValue:
+                    minName = name
+                    minValue = numVal
+                elif maxValue is None or numVal > maxValue:
+                    maxName = name
+                    maxValue = numVal
+
+        # Now append the non-numeric enumerant values
+        body.extend(aliasText)
+
+        # Generate min/max value tokens - legacy use case.
+        if isEnum and expand:
+            body.extend((f'    {expandPrefix}_BEGIN_RANGE{expandSuffix} = {minName},',
+                         f'    {expandPrefix}_END_RANGE{expandSuffix} = {maxName},',
+                         f'    {expandPrefix}_RANGE_SIZE{expandSuffix} = ({maxName} - {minName} + 1),'))
+
+        # Generate a range-padding value to ensure the enum is 32 bits, but
+        # only in code generators, so it does not appear in documentation
+        if (self.genOpts.codeGenerator or
+            self.conventions.generate_max_enum_in_docs):
+            body.append(f'    {expandPrefix}_MAX_ENUM{expandSuffix} = 0x7FFFFFFF')
+
+        # Postfix
+        body.append("} %s;" % groupName)
+
+        # Determine appropriate section for this declaration
+        if groupElem.get('type') == 'bitmask':
+            section = 'bitmask'
+        else:
+            section = 'group'
+
+        return (section, '\n'.join(body))
+
+    def buildConstantCDecl(self, enuminfo, name, alias):
+        """Generate the C declaration for a constant (a single <enum>
+        value).
+
+        <enum> tags may specify their values in several ways, but are
+        usually just integers or floating-point numbers."""
+
+        (_, strVal) = self.enumToValue(enuminfo.elem, False)
+
+        if self.misracppstyle() and enuminfo.elem.get('type') and not alias:
+            # Generate e.g.: static constexpr uint32_t x = ~static_cast<uint32_t>(1U);
+            # This appeases MISRA "underlying type" rules.
+            typeStr = enuminfo.elem.get('type');
+            invert = '~' in strVal
+            number = strVal.strip("()~UL")
+            if typeStr != "float":
+                number += 'U'
+            strVal = "~" if invert else ""
+            strVal += "static_cast<" + typeStr + ">(" + number + ")"
+            body = 'static constexpr ' + typeStr.ljust(9) + name.ljust(33) + ' {' + strVal + '};'
+        elif enuminfo.elem.get('type') and not alias:
+            # Generate e.g.: #define x (~0ULL)
+            typeStr = enuminfo.elem.get('type');
+            invert = '~' in strVal
+            paren = '(' in strVal
+            number = strVal.strip("()~UL")
+            if typeStr != "float":
+                if typeStr == "uint64_t":
+                    number += 'ULL'
+                else:
+                    number += 'U'
+            strVal = "~" if invert else ""
+            strVal += number
+            if paren:
+                strVal = "(" + strVal + ")";
+            body = '#define ' + name.ljust(33) + ' ' + strVal;
+        else:
+            body = '#define ' + name.ljust(33) + ' ' + strVal
+
+        return body
+
+    def makeDir(self, path):
+        """Create a directory, if not already done.
+
+        Generally called from derived generators creating hierarchies."""
+        self.logMsg('diag', 'OutputGenerator::makeDir(' + path + ')')
+        if path not in self.madeDirs:
+            # This can get race conditions with multiple writers, see
+            # https://stackoverflow.com/questions/273192/
+            if not os.path.exists(path):
+                os.makedirs(path)
+            self.madeDirs[path] = None
+
+    def beginFile(self, genOpts):
+        """Start a new interface file
+
+        - genOpts - GeneratorOptions controlling what is generated and how"""
+
+        self.genOpts = genOpts
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        if self.genOpts.conventions is None:
+            raise MissingGeneratorOptionsConventionsError()
+        self.should_insert_may_alias_macro = \
+            self.genOpts.conventions.should_insert_may_alias_macro(self.genOpts)
+        self.file_suffix = self.genOpts.conventions.file_suffix
+
+        # Try to import the API dictionary, apimap.py, if it exists. Nothing
+        # in apimap.py cannot be extracted directly from the XML, and in the
+        # future we should do that.
+        if self.genOpts.genpath is not None:
+            try:
+                sys.path.insert(0, self.genOpts.genpath)
+                import apimap
+                self.apidict = apimap
+            except ImportError:
+                self.apidict = None
+
+        self.conventions = genOpts.conventions
+
+        # Open a temporary file for accumulating output.
+        if self.genOpts.filename is not None:
+            self.outFile = tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', newline='\n', delete=False)
+        else:
+            self.outFile = sys.stdout
+
+    def endFile(self):
+        if self.errFile:
+            self.errFile.flush()
+        if self.warnFile:
+            self.warnFile.flush()
+        if self.diagFile:
+            self.diagFile.flush()
+        if self.outFile:
+            self.outFile.flush()
+            if self.outFile != sys.stdout and self.outFile != sys.stderr:
+                self.outFile.close()
+
+            if self.genOpts is None:
+                raise MissingGeneratorOptionsError()
+
+            # On successfully generating output, move the temporary file to the
+            # target file.
+            if self.genOpts.filename is not None:
+                if sys.platform == 'win32':
+                    directory = Path(self.genOpts.directory)
+                    if not Path.exists(directory):
+                        os.makedirs(directory)
+                shutil.copy(self.outFile.name, self.genOpts.directory + '/' + self.genOpts.filename)
+                os.remove(self.outFile.name)
+        self.genOpts = None
+
+    def beginFeature(self, interface, emit):
+        """Write interface for a feature and tag generated features as having been done.
+
+        - interface - element for the `<version>` / `<extension>` to generate
+        - emit - actually write to the header only when True"""
+        self.emit = emit
+        self.featureName = interface.get('name')
+        # If there is an additional 'protect' attribute in the feature, save it
+        self.featureExtraProtect = interface.get('protect')
+
+    def endFeature(self):
+        """Finish an interface file, closing it when done.
+
+        Derived classes responsible for emitting feature"""
+        self.featureName = None
+        self.featureExtraProtect = None
+
+    def genRequirements(self, name, mustBeFound = True):
+        """Generate text showing what core versions and extensions introduce
+        an API. This exists in the base Generator class because it is used by
+        the shared enumerant-generating interfaces (buildEnumCDecl, etc.).
+        Here it returns an empty string for most generators, but can be
+        overridden by e.g. DocGenerator.
+
+        - name - name of the API
+        - mustBeFound - If True, when requirements for 'name' cannot be
+          determined, a warning comment is generated.
+        """
+
+        return ''
+
+    def validateFeature(self, featureType, featureName):
+        """Validate we are generating something only inside a `<feature>` tag"""
+        if self.featureName is None:
+            raise UserWarning('Attempt to generate', featureType,
+                              featureName, 'when not in feature')
+
+    def genType(self, typeinfo, name, alias):
+        """Generate interface for a type
+
+        - typeinfo - TypeInfo for a type
+
+        Extend to generate as desired in your derived class."""
+        self.validateFeature('type', name)
+
+    def genStruct(self, typeinfo, typeName, alias):
+        """Generate interface for a C "struct" type.
+
+        - typeinfo - TypeInfo for a type interpreted as a struct
+
+        Extend to generate as desired in your derived class."""
+        self.validateFeature('struct', typeName)
+
+        # The mixed-mode <member> tags may contain no-op <comment> tags.
+        # It is convenient to remove them here where all output generators
+        # will benefit.
+        for member in typeinfo.elem.findall('.//member'):
+            for comment in member.findall('comment'):
+                member.remove(comment)
+
+    def genGroup(self, groupinfo, groupName, alias):
+        """Generate interface for a group of enums (C "enum")
+
+        - groupinfo - GroupInfo for a group.
+
+        Extend to generate as desired in your derived class."""
+
+        self.validateFeature('group', groupName)
+
+    def genEnum(self, enuminfo, typeName, alias):
+        """Generate interface for an enum (constant).
+
+        - enuminfo - EnumInfo for an enum
+        - name - enum name
+
+        Extend to generate as desired in your derived class."""
+        self.validateFeature('enum', typeName)
+
+    def genCmd(self, cmd, cmdinfo, alias):
+        """Generate interface for a command.
+
+        - cmdinfo - CmdInfo for a command
+
+        Extend to generate as desired in your derived class."""
+        self.validateFeature('command', cmdinfo)
+
+    def genSpirv(self, spirv, spirvinfo, alias):
+        """Generate interface for a spirv element.
+
+        - spirvinfo - SpirvInfo for a command
+
+        Extend to generate as desired in your derived class."""
+        return
+
+    def genFormat(self, format, formatinfo, alias):
+        """Generate interface for a format element.
+
+        - formatinfo - FormatInfo
+
+        Extend to generate as desired in your derived class."""
+        return
+
+    def genSyncStage(self, stageinfo):
+        """Generate interface for a sync stage element.
+
+        - stageinfo - SyncStageInfo
+
+        Extend to generate as desired in your derived class."""
+        return
+
+    def genSyncAccess(self, accessinfo):
+        """Generate interface for a sync stage element.
+
+        - accessinfo - AccessInfo
+
+        Extend to generate as desired in your derived class."""
+        return
+
+    def genSyncPipeline(self, pipelineinfo):
+        """Generate interface for a sync stage element.
+
+        - pipelineinfo - SyncPipelineInfo
+
+        Extend to generate as desired in your derived class."""
+        return
+
+    def makeProtoName(self, name, tail):
+        """Turn a `<proto>` `<name>` into C-language prototype
+        and typedef declarations for that name.
+
+        - name - contents of `<name>` tag
+        - tail - whatever text follows that tag in the Element"""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        return self.genOpts.apientry + name + tail
+
+    def makeTypedefName(self, name, tail):
+        """Make the function-pointer typedef name for a command."""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        return '(' + self.genOpts.apientryp + 'PFN_' + name + tail + ')'
+
+    def makeCParamDecl(self, param, aligncol):
+        """Return a string which is an indented, formatted
+        declaration for a `<param>` or `<member>` block (e.g. function parameter
+        or structure/union member).
+
+        - param - Element (`<param>` or `<member>`) to format
+        - aligncol - if non-zero, attempt to align the nested `<name>` element
+          at this column"""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        if self.genOpts.conventions is None:
+            raise MissingGeneratorOptionsConventionsError()
+        indent = '    '
+        paramdecl = indent
+        prefix = noneStr(param.text)
+
+        for elem in param:
+            text = noneStr(elem.text)
+            tail = noneStr(elem.tail)
+
+            if self.should_insert_may_alias_macro and self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail):
+                # OpenXR-specific macro insertion - but not in apiinc for the spec
+                tail = self.genOpts.conventions.make_voidpointer_alias(tail)
+            if elem.tag == 'name' and aligncol > 0:
+                self.logMsg('diag', 'Aligning parameter', elem.text, 'to column', self.genOpts.alignFuncParam)
+                # Align at specified column, if possible
+                paramdecl = paramdecl.rstrip()
+                oldLen = len(paramdecl)
+                # This works around a problem where very long type names -
+                # longer than the alignment column - would run into the tail
+                # text.
+                paramdecl = paramdecl.ljust(aligncol - 1) + ' '
+                newLen = len(paramdecl)
+                self.logMsg('diag', 'Adjust length of parameter decl from', oldLen, 'to', newLen, ':', paramdecl)
+
+            if (self.misracppstyle() and prefix.find('const ') != -1):
+                # Change pointer type order from e.g. "const void *" to "void const *".
+                # If the string starts with 'const', reorder it to be after the first type.
+                paramdecl += prefix.replace('const ', '') + text + ' const' + tail
+            else:
+                paramdecl += prefix + text + tail
+
+            # Clear prefix for subsequent iterations
+            prefix = ''
+
+        paramdecl = paramdecl + prefix
+
+        if aligncol == 0:
+            # Squeeze out multiple spaces other than the indentation
+            paramdecl = indent + ' '.join(paramdecl.split())
+        return paramdecl
+
+    def getCParamTypeLength(self, param):
+        """Return the length of the type field is an indented, formatted
+        declaration for a `<param>` or `<member>` block (e.g. function parameter
+        or structure/union member).
+
+        - param - Element (`<param>` or `<member>`) to identify"""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        if self.genOpts.conventions is None:
+            raise MissingGeneratorOptionsConventionsError()
+
+        # Allow for missing <name> tag
+        newLen = 0
+        paramdecl = '    ' + noneStr(param.text)
+        for elem in param:
+            text = noneStr(elem.text)
+            tail = noneStr(elem.tail)
+
+            if self.should_insert_may_alias_macro and self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail):
+                # OpenXR-specific macro insertion
+                tail = self.genOpts.conventions.make_voidpointer_alias(tail)
+            if elem.tag == 'name':
+                # Align at specified column, if possible
+                newLen = len(paramdecl.rstrip())
+                self.logMsg('diag', 'Identifying length of', elem.text, 'as', newLen)
+            paramdecl += text + tail
+
+        return newLen
+
+    def getMaxCParamTypeLength(self, info):
+        """Return the length of the longest type field for a member/parameter.
+
+        - info - TypeInfo or CommandInfo.
+        """
+        lengths = (self.getCParamTypeLength(member)
+                   for member in info.getMembers())
+        return max(lengths)
+
+    def getHandleParent(self, typename):
+        """Get the parent of a handle object."""
+        if self.registry is None:
+            raise MissingRegistryError()
+
+        info = self.registry.typedict.get(typename)
+        if info is None:
+            return None
+
+        elem = info.elem
+        if elem is not None:
+            return elem.get('parent')
+
+        return None
+
+    def iterateHandleAncestors(self, typename):
+        """Iterate through the ancestors of a handle type."""
+        current = self.getHandleParent(typename)
+        while current is not None:
+            yield current
+            current = self.getHandleParent(current)
+
+    def getHandleAncestors(self, typename):
+        """Get the ancestors of a handle object."""
+        return list(self.iterateHandleAncestors(typename))
+
+    def getTypeCategory(self, typename):
+        """Get the category of a type."""
+        if self.registry is None:
+            raise MissingRegistryError()
+
+        info = self.registry.typedict.get(typename)
+        if info is None:
+            return None
+
+        elem = info.elem
+        if elem is not None:
+            return elem.get('category')
+        return None
+
+    def isStructAlwaysValid(self, structname):
+        """Try to do check if a structure is always considered valid (i.e. there is no rules to its acceptance)."""
+        # A conventions object is required for this call.
+        if not self.conventions:
+            raise RuntimeError("To use isStructAlwaysValid, be sure your options include a Conventions object.")
+        if self.registry is None:
+            raise MissingRegistryError()
+
+        if self.conventions.type_always_valid(structname):
+            return True
+
+        category = self.getTypeCategory(structname)
+        if self.conventions.category_requires_validation(category):
+            return False
+
+        info = self.registry.typedict.get(structname)
+        if info is None:
+            self.logMsg('error', f'isStructAlwaysValid({structname}) - structure not found in typedict')
+
+        members = info.getMembers()
+
+        for member in members:
+            member_name = getElemName(member)
+            if member_name in (self.conventions.structtype_member_name,
+                               self.conventions.nextpointer_member_name):
+                return False
+
+            if member.get('noautovalidity'):
+                return False
+
+            member_type = getElemType(member)
+
+            if member_type in ('void', 'char') or self.paramIsArray(member) or self.paramIsPointer(member):
+                return False
+
+            if self.conventions.type_always_valid(member_type):
+                continue
+
+            member_category = self.getTypeCategory(member_type)
+
+            if self.conventions.category_requires_validation(member_category):
+                return False
+
+            if member_category in ('struct', 'union'):
+                if self.isStructAlwaysValid(member_type) is False:
+                    return False
+
+        return True
+
+    def paramIsArray(self, param):
+        """Check if the parameter passed in is a pointer to an array.
+
+        param           the XML information for the param
+        """
+        return param.get('len') is not None
+
+    def paramIsPointer(self, param):
+        """Check if the parameter passed in is a pointer.
+
+        param           the XML information for the param
+        """
+        tail = param.find('type').tail
+        return tail is not None and '*' in tail
+
+    def isEnumRequired(self, elem):
+        """Return True if this `<enum>` element is
+        required, False otherwise
+
+        - elem - `<enum>` element to test"""
+        required = elem.get('required') is not None
+        self.logMsg('diag', 'isEnumRequired:', elem.get('name'),
+                    '->', required)
+        return required
+
+        # @@@ This code is overridden by equivalent code now run in
+        # @@@ Registry.generateFeature
+
+        required = False
+
+        extname = elem.get('extname')
+        if extname is not None:
+            # 'supported' attribute was injected when the <enum> element was
+            # moved into the <enums> group in Registry.parseTree()
+            if self.genOpts.defaultExtensions == elem.get('supported'):
+                required = True
+            elif re.match(self.genOpts.addExtensions, extname) is not None:
+                required = True
+        elif elem.get('version') is not None:
+            required = re.match(self.genOpts.emitversions, elem.get('version')) is not None
+        else:
+            required = True
+
+        return required
+
+    def makeCDecls(self, cmd):
+        """Return C prototype and function pointer typedef for a
+        `<command>` Element, as a two-element list of strings.
+
+        - cmd - Element containing a `<command>` tag"""
+        if self.genOpts is None:
+            raise MissingGeneratorOptionsError()
+        proto = cmd.find('proto')
+        params = cmd.findall('param')
+        # Begin accumulating prototype and typedef strings
+        pdecl = self.genOpts.apicall
+        tdecl = 'typedef '
+
+        # Insert the function return type/name.
+        # For prototypes, add APIENTRY macro before the name
+        # For typedefs, add (APIENTRY *<name>) around the name and
+        #   use the PFN_cmdnameproc naming convention.
+        # Done by walking the tree for <proto> element by element.
+        # etree has elem.text followed by (elem[i], elem[i].tail)
+        #   for each child element and any following text
+        # Leading text
+        pdecl += noneStr(proto.text)
+        tdecl += noneStr(proto.text)
+        # For each child element, if it is a <name> wrap in appropriate
+        # declaration. Otherwise append its contents and tail contents.
+        for elem in proto:
+            text = noneStr(elem.text)
+            tail = noneStr(elem.tail)
+            if elem.tag == 'name':
+                pdecl += self.makeProtoName(text, tail)
+                tdecl += self.makeTypedefName(text, tail)
+            else:
+                pdecl += text + tail
+                tdecl += text + tail
+
+        if self.genOpts.alignFuncParam == 0:
+            # Squeeze out multiple spaces - there is no indentation
+            pdecl = ' '.join(pdecl.split())
+            tdecl = ' '.join(tdecl.split())
+
+        # Now add the parameter declaration list, which is identical
+        # for prototypes and typedefs. Concatenate all the text from
+        # a <param> node without the tags. No tree walking required
+        # since all tags are ignored.
+        # Uses: self.indentFuncProto
+        # self.indentFuncPointer
+        # self.alignFuncParam
+        n = len(params)
+        # Indented parameters
+        if n > 0:
+            indentdecl = '(\n'
+            indentdecl += ',\n'.join(self.makeCParamDecl(p, self.genOpts.alignFuncParam)
+                                     for p in params)
+            indentdecl += ');'
+        else:
+            indentdecl = '(void);'
+        # Non-indented parameters
+        paramdecl = '('
+        if n > 0:
+            paramnames = []
+            if self.misracppstyle():
+                for p in params:
+                    param = ''
+                    firstIter = True;
+                    for t in p.itertext():
+                        if (firstIter):
+                            prefix = t
+                            firstIter = False
+                        else:
+                            # Change pointer type order from e.g. "const void *" to "void const *".
+                            # If the string starts with 'const', reorder it to be after the first type.
+                            if (prefix.find('const ') != -1):
+                                param += prefix.replace('const ', '') + t + ' const '
+                            else:
+                                param += prefix + t
+                            # Clear prefix for subsequent iterations
+                            prefix = ''
+                    paramnames.append(param);
+            else:
+                paramnames = (''.join(t for t in p.itertext())
+                              for p in params)
+            paramdecl += ', '.join(paramnames)
+        else:
+            paramdecl += 'void'
+        paramdecl += ");"
+        return [pdecl + indentdecl, tdecl + paramdecl]
+
+    def newline(self):
+        """Print a newline to the output file (utility function)"""
+        write('', file=self.outFile)
+
+    def setRegistry(self, registry):
+        self.registry = registry
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/genspec.py b/codegen/vulkan/vulkan-docs-next/scripts/genspec.py
new file mode 100644
index 0000000..8822449
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/genspec.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+"""This script builds a full release package including XHTML and PDF
+versions of the specification, including an optional list of
+extensions. Other files in the release directory are removed,
+including man pages, XHTML chunked, HTML, validity output, etc.
+
+The current branch must be fully committed and up to date when the
+script is run, with no outstanding un-added / un-committed files.
+After completing the build, suggestions for creating tags are made."""
+
+import time
+from datetime import date, timedelta
+
+
+def releaseNum():
+    """Return the Vulkan release number, used for tags."""
+    return '$REVISION'
+
+
+def buildOnFriday():
+    """Return a date for the current, or upcoming if not already, Friday,
+    which is when releases happen."""
+    today = date.today()
+    friday = today + timedelta((4 - today.weekday()) % 7)
+    return friday
+
+
+def buildRelease(label,
+                 versions,
+                 extensions,
+                 ratified,
+                 outdir,
+                 apititle,
+                 xmlDir, xmlTargets,
+                 specDir, specTargets,
+                 miscSrc=None, miscDst=None, needRefSources=False):
+    """Build a release.
+
+    - `label` = textual label to use for target being generated
+    - `versions` = list of core API versions to include
+    - `extensions` = list of extension names to include
+    - `ratified` = True if this is a ratified spec (one built without non-KHR extensions)
+    - `outdir` = directory to generate specs in
+    - `apititle` = extra title to apply to the specification
+    - `xmlDir` = directory containing registry XML
+    - `xmlTargets` = targets to build in xml/
+    - `specDir` = directory containing spec source & Makefile
+    - `specTargets` = targets to build
+    - `miscSrc` = path to copy misc files from, if non-None
+    - `miscDst` = path to copy misc files to, if non-None
+    - `needRefSources` = True if ref pages must be extracted from the spec sources"""
+
+    print('echo Info: Generating target=' + label,
+          'outdir=' + outdir)
+
+    outarg = 'OUTDIR=' + outdir
+
+    if versions != None and len(versions) > 0:
+        versarg = 'VERSIONS="' + ' '.join(versions) + '"'
+    else:
+        versarg = ''
+
+    if extensions != None and len(extensions) > 0:
+        extarg = 'EXTENSIONS="' + ' '.join(extensions) + '"'
+    else:
+        extarg = ''
+
+    if ratified:
+        ratifiedarg = 'EXTRAATTRIBS="-a ratified_core_spec"'
+    else:
+        ratifiedarg = ''
+
+    if apititle != None:
+        titlearg = 'APITITLE="' + apititle + '"'
+    else:
+        titlearg = ''
+
+    # print('echo Info: Creating directory and cleaning spec in', outdir)
+    print('mkdir -p', outdir)
+    print('(cd ', outdir, '&& rm -rf',
+          'html chunked pdf',
+          'man config checks',
+          'vkspec.html styleguide.html apispec.html apispec.pdf registry.html',
+          ')')
+
+    if xmlTargets != '':
+        # print('echo Info: Generating headers and spec include files')
+        print('cd', xmlDir)
+        print('make', outarg, xmlTargets)
+
+    # print('echo Info: Generating ref pages sources and spec targets')
+    print('cd', specDir)
+    print('make', outarg, 'clean')
+    # This is a temporary workaround for a dependency bug - if any of the
+    # specTargets require ref page sources, and they are not already present
+    # at the time the make is invoked, that target will not be built.
+    if needRefSources:
+        print('make', outarg, versarg, extarg, 'refpages')
+    # Now make the actual targets.
+    print('make -O -k -j 8',
+          outarg, versarg, extarg, ratifiedarg, titlearg,
+          'NOTEOPTS="-a implementation-guide"',
+          specTargets)
+
+    if miscSrc != None and miscDst != None:
+        print('mkdir -p', miscDst)
+        print('cp', miscSrc + '/*.adoc', miscDst + '/')
+
+    print('')
+
+
+def buildBranch(targetDir = '',
+                versions = '',
+                extensions = '',
+                ratified = False,
+                apititle = '(NO TITLE SPECIFIED)',
+                xmlTargets = '',
+                specTargets = '',
+                repoDir = '',
+                outDir = '',
+                needRefSources=False):
+    """Build all target documents.
+
+    - `repoDir` = path to the Vulkan git repo containing the specs
+    - `outDir` = path to the output base directory in which targets are generated"""
+
+    # Directory with vk.xml and generation tools
+    xmlDir = repoDir + '/xml'
+    # Directory with spec sources
+    specDir = repoDir
+    # Directory containing misc. files to copy to registry.
+    # At present there are none, since GLSL extensions have moved to the
+    # GLSL repository and are redirected from the Vulkan registry website.
+    # These should be relative to repoDir and outDir, respectively
+    miscSrc = None
+    miscDst = None
+
+    buildRelease(targetDir,
+                 versions,
+                 extensions,
+                 ratified,
+                 outDir + '/' + targetDir,
+                 apititle,
+                 xmlDir, xmlTargets,
+                 specDir, specTargets,
+                 miscSrc, miscDst,
+                 needRefSources)
+
+
+def createTags(releaseNum, tagdate):
+    """Print commands to tag the git branches.
+
+    - `releaseNum` = release number of this spec update, to tag the tree with
+    - `tagdate` = date (used to be used to tag the tree with)"""
+    # Tag date in YYYYMMDD format
+    now = tagdate.strftime('%Y%m%d')
+
+    print('echo To tag the spec branch for this release, execute the command:')
+    print('echo git tag -a -m \\"Tag Vulkan API specification for 1.3.' +
+          releaseNum, 'release\\"', 'v1.3.' + releaseNum)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/genvk.py b/codegen/vulkan/vulkan-docs-next/scripts/genvk.py
new file mode 100755
index 0000000..676c78c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/genvk.py
@@ -0,0 +1,1117 @@
+#!/usr/bin/python3
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import os
+import pdb
+import re
+import sys
+import copy
+import time
+import xml.etree.ElementTree as etree
+
+sys.path.append(os.path.abspath(os.path.dirname(__file__)))
+
+from cgenerator import CGeneratorOptions, COutputGenerator
+# Vulkan SC modules
+from json_parser import JSONParserGenerator, JSONParserOptions
+from schema_generator import SchemaGeneratorOptions, SchemaOutputGenerator
+from json_generator import JSONGeneratorOptions, JSONOutputGenerator
+from json_h_generator import JSONHeaderOutputGenerator, JSONHeaderGeneratorOptions
+from json_c_generator import JSONCOutputGenerator, JSONCGeneratorOptions
+
+from docgenerator import DocGeneratorOptions, DocOutputGenerator
+from extensionmetadocgenerator import (ExtensionMetaDocGeneratorOptions,
+                                       ExtensionMetaDocOutputGenerator)
+from interfacedocgenerator import InterfaceDocGenerator
+from generator import write
+from spirvcapgenerator import SpirvCapabilityOutputGenerator
+from hostsyncgenerator import HostSynchronizationOutputGenerator
+from formatsgenerator import FormatsOutputGenerator
+from syncgenerator import SyncOutputGenerator
+from jsgenerator import JSOutputGenerator
+from pygenerator import PyOutputGenerator
+from rubygenerator import RubyOutputGenerator
+from reflib import logDiag, logWarn, logErr, setLogFile
+from reg import Registry
+from validitygenerator import ValidityOutputGenerator
+from apiconventions import APIConventions
+
+# Simple timer functions
+startTime = None
+
+
+def startTimer(timeit):
+    global startTime
+    if timeit:
+        startTime = time.process_time()
+
+
+def endTimer(timeit, msg):
+    global startTime
+    if timeit and startTime is not None:
+        endTime = time.process_time()
+        logDiag(msg, endTime - startTime)
+        startTime = None
+
+
+def makeREstring(strings, default=None, strings_are_regex=False):
+    """Turn a list of strings into a regexp string matching exactly those strings."""
+    if strings or default is None:
+        if not strings_are_regex:
+            strings = (re.escape(s) for s in strings)
+        return '^(' + '|'.join(strings) + ')$'
+    return default
+
+
+def makeGenOpts(args):
+    """Returns a directory of [ generator function, generator options ] indexed
+    by specified short names. The generator options incorporate the following
+    parameters:
+
+    args is an parsed argument object; see below for the fields that are used."""
+    global genOpts
+    genOpts = {}
+
+    # Default class of extensions to include, or None
+    defaultExtensions = args.defaultExtensions
+
+    # Additional extensions to include (list of extensions)
+    extensions = args.extension
+
+    # Extensions to remove (list of extensions)
+    removeExtensions = args.removeExtensions
+
+    # Extensions to emit (list of extensions)
+    emitExtensions = args.emitExtensions
+
+    # SPIR-V capabilities / features to emit (list of extensions & capabilities)
+    emitSpirv = args.emitSpirv
+
+    # Vulkan Formats to emit
+    emitFormats = args.emitFormats
+
+    # Features to include (list of features)
+    features = args.feature
+
+    # Whether to disable inclusion protect in headers
+    protect = args.protect
+
+    # Output target directory
+    directory = args.directory
+
+    # Path to generated files, particularly apimap.py
+    genpath = args.genpath
+
+    # Generate MISRA C-friendly headers
+    misracstyle = args.misracstyle;
+
+    # Generate MISRA C++-friendly headers
+    misracppstyle = args.misracppstyle;
+
+    # Descriptive names for various regexp patterns used to select
+    # versions and extensions
+    allFormats = allSpirv = allFeatures = allExtensions = r'.*'
+
+    # Turn lists of names/patterns into matching regular expressions
+    addExtensionsPat     = makeREstring(extensions, None)
+    removeExtensionsPat  = makeREstring(removeExtensions, None)
+    emitExtensionsPat    = makeREstring(emitExtensions, allExtensions)
+    emitSpirvPat         = makeREstring(emitSpirv, allSpirv)
+    emitFormatsPat       = makeREstring(emitFormats, allFormats)
+    featuresPat          = makeREstring(features, allFeatures)
+
+    # Copyright text prefixing all headers (list of strings).
+    # The SPDX formatting below works around constraints of the 'reuse' tool
+    prefixStrings = [
+        '/*',
+        '** Copyright 2015-2023 The Khronos Group Inc.',
+        '**',
+        '** SPDX-License-Identifier' + ': Apache-2.0',
+        '*/',
+        ''
+    ]
+
+    # Text specific to Vulkan headers
+    vkPrefixStrings = [
+        '/*',
+        '** This header is generated from the Khronos Vulkan XML API Registry.',
+        '**',
+        '*/',
+        ''
+    ]
+
+    vulkanLayer = args.vulkanLayer
+
+    # Defaults for generating re-inclusion protection wrappers (or not)
+    protectFile = protect
+
+    # An API style conventions object
+    conventions = APIConventions()
+
+    if args.apiname is not None:
+        defaultAPIName = args.apiname
+    else:
+        defaultAPIName = conventions.xml_api_name
+
+    # APIs to merge
+    mergeApiNames = args.mergeApiNames
+
+    isCTS = args.isCTS
+
+    # API include files for spec and ref pages
+    # Overwrites include subdirectories in spec source tree
+    # The generated include files do not include the calling convention
+    # macros (apientry etc.), unlike the header files.
+    # Because the 1.0 core branch includes ref pages for extensions,
+    # all the extension interfaces need to be generated, even though
+    # none are used by the core spec itself.
+    genOpts['apiinc'] = [
+          DocOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = genpath,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            apicall           = '',
+            apientry          = '',
+            apientryp         = '*',
+            alignFuncParam    = 48,
+            expandEnumerants  = False)
+        ]
+
+    # JavaScript, Python, and Ruby representations of API information, used
+    # by scripts that do not need to load the full XML.
+    genOpts['apimap.cjs'] = [
+          JSOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'apimap.cjs',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    genOpts['apimap.py'] = [
+          PyOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'apimap.py',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    genOpts['apimap.rb'] = [
+          RubyOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'apimap.rb',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+
+    # API validity files for spec
+    #
+    # requireCommandAliases is set to True because we need validity files
+    # for the command something is promoted to even when the promoted-to
+    # feature is not included. This avoids wordy includes of validity files.
+    genOpts['validinc'] = [
+          ValidityOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            requireCommandAliases = True,
+            )
+        ]
+
+    # API host sync table files for spec
+    genOpts['hostsyncinc'] = [
+          HostSynchronizationOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    # Extension metainformation for spec extension appendices
+    # Includes all extensions by default, but only so that the generated
+    # 'promoted_extensions_*' files refer to all extensions that were
+    # promoted to a core version.
+    genOpts['extinc'] = [
+          ExtensionMetaDocOutputGenerator,
+          ExtensionMetaDocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = None,
+            defaultExtensions = defaultExtensions,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = None,
+            emitExtensions    = emitExtensionsPat)
+        ]
+
+    # Version and extension interface docs for version/extension appendices
+    # Includes all extensions by default.
+    genOpts['interfaceinc'] = [
+          InterfaceDocGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    genOpts['spirvcapinc'] = [
+          SpirvCapabilityOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            emitSpirv         = emitSpirvPat,
+            reparentEnums     = False)
+        ]
+
+    # Used to generate various format chapter tables
+    genOpts['formatsinc'] = [
+          FormatsOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            emitFormats       = emitFormatsPat,
+            reparentEnums     = False)
+        ]
+
+    # Used to generate various synchronization chapter tables
+    genOpts['syncinc'] = [
+          SyncOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    # Platform extensions, in their own header files
+    # Each element of the platforms[] array defines information for
+    # generating a single platform:
+    #   [0] is the generated header file name
+    #   [1] is the set of platform extensions to generate
+    #   [2] is additional extensions whose interfaces should be considered,
+    #   but suppressed in the output, to avoid duplicate definitions of
+    #   dependent types like VkDisplayKHR and VkSurfaceKHR which come from
+    #   non-platform extensions.
+
+    # Track all platform extensions, for exclusion from vulkan_core.h
+    allPlatformExtensions = []
+
+    # Extensions suppressed for all WSI platforms (WSI extensions required
+    # by all platforms)
+    commonSuppressExtensions = [ 'VK_KHR_display', 'VK_KHR_swapchain' ]
+
+    # Extensions required and suppressed for beta "platform". This can
+    # probably eventually be derived from the requires= attributes of
+    # the extension blocks.
+    betaRequireExtensions = [
+        'VK_KHR_portability_subset',
+        'VK_KHR_video_encode_queue',
+        'VK_EXT_video_encode_h264',
+        'VK_EXT_video_encode_h265',
+        'VK_NV_displacement_micromap',
+        'VK_AMDX_shader_enqueue',
+    ]
+
+    betaSuppressExtensions = [
+        'VK_KHR_video_queue',
+        'VK_EXT_opacity_micromap',
+        'VK_KHR_pipeline_library',
+    ]
+
+    platforms = [
+        [ 'vulkan_android.h',     [ 'VK_KHR_android_surface',
+                                    'VK_ANDROID_external_memory_android_hardware_buffer',
+                                    'VK_ANDROID_external_format_resolve'
+                                                                  ], commonSuppressExtensions +
+                                                                     [ 'VK_KHR_format_feature_flags2',
+                                                                     ] ],
+        [ 'vulkan_fuchsia.h',     [ 'VK_FUCHSIA_imagepipe_surface',
+                                    'VK_FUCHSIA_external_memory',
+                                    'VK_FUCHSIA_external_semaphore',
+                                    'VK_FUCHSIA_buffer_collection' ], commonSuppressExtensions ],
+        [ 'vulkan_ggp.h',         [ 'VK_GGP_stream_descriptor_surface',
+                                    'VK_GGP_frame_token'          ], commonSuppressExtensions ],
+        [ 'vulkan_ios.h',         [ 'VK_MVK_ios_surface'          ], commonSuppressExtensions ],
+        [ 'vulkan_macos.h',       [ 'VK_MVK_macos_surface'        ], commonSuppressExtensions ],
+        [ 'vulkan_vi.h',          [ 'VK_NN_vi_surface'            ], commonSuppressExtensions ],
+        [ 'vulkan_wayland.h',     [ 'VK_KHR_wayland_surface'      ], commonSuppressExtensions ],
+        [ 'vulkan_win32.h',       [ 'VK_.*_win32(|_.*)', 'VK_.*_winrt(|_.*)', 'VK_EXT_full_screen_exclusive' ],
+                                                                     commonSuppressExtensions +
+                                                                     [ 'VK_KHR_external_semaphore',
+                                                                       'VK_KHR_external_memory_capabilities',
+                                                                       'VK_KHR_external_fence',
+                                                                       'VK_KHR_external_fence_capabilities',
+                                                                       'VK_KHR_get_surface_capabilities2',
+                                                                       'VK_NV_external_memory_capabilities',
+                                                                     ] ],
+        [ 'vulkan_xcb.h',         [ 'VK_KHR_xcb_surface'          ], commonSuppressExtensions ],
+        [ 'vulkan_xlib.h',        [ 'VK_KHR_xlib_surface'         ], commonSuppressExtensions ],
+        [ 'vulkan_directfb.h',    [ 'VK_EXT_directfb_surface'     ], commonSuppressExtensions ],
+        [ 'vulkan_xlib_xrandr.h', [ 'VK_EXT_acquire_xlib_display' ], commonSuppressExtensions ],
+        [ 'vulkan_metal.h',       [ 'VK_EXT_metal_surface',
+                                    'VK_EXT_metal_objects'        ], commonSuppressExtensions ],
+        [ 'vulkan_screen.h',      [ 'VK_QNX_screen_surface',
+                                    'VK_QNX_external_memory_screen_buffer' ], commonSuppressExtensions ],
+        [ 'vulkan_sci.h',         [ 'VK_NV_external_sci_sync',
+                                    'VK_NV_external_sci_sync2',
+                                    'VK_NV_external_memory_sci_buf'], commonSuppressExtensions ],
+        [ 'vulkan_beta.h',        betaRequireExtensions,             betaSuppressExtensions ],
+    ]
+
+    for platform in platforms:
+        headername = platform[0]
+
+        allPlatformExtensions += platform[1]
+
+        addPlatformExtensionsRE = makeREstring(
+            platform[1] + platform[2], strings_are_regex=True)
+        emitPlatformExtensionsRE = makeREstring(
+            platform[1], strings_are_regex=True)
+
+        opts = CGeneratorOptions(
+            conventions       = conventions,
+            filename          = headername,
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            mergeApiNames     = mergeApiNames,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = None,
+            defaultExtensions = None,
+            addExtensions     = addPlatformExtensionsRE,
+            removeExtensions  = None,
+            emitExtensions    = emitPlatformExtensionsRE,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+
+        genOpts[headername] = [ COutputGenerator, opts ]
+
+    # Header for core API + extensions.
+    # To generate just the core API,
+    # change to 'defaultExtensions = None' below.
+    #
+    # By default this adds all enabled, non-platform extensions.
+    # It removes all platform extensions (from the platform headers options
+    # constructed above) as well as any explicitly specified removals.
+
+    removeExtensionsPat = makeREstring(
+        allPlatformExtensions + removeExtensions, None, strings_are_regex=True)
+
+    genOpts['vulkan_core.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_core.h',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            mergeApiNames     = mergeApiNames,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = defaultExtensions,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+        ]
+
+    # Vulkan versions to include for SC header - SC *removes* features from 1.0/1.1/1.2
+    scVersions = makeREstring(['VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VKSC_VERSION_1_0'])
+
+    genOpts['vulkan_sc_core.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_sc_core.h',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+        ]
+
+    genOpts['vulkan_sc_core.hpp'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_sc_core.hpp',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+        ]
+
+    genOpts['vk.json'] = [
+          SchemaOutputGenerator,
+          SchemaGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vk.json',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48)
+        ]
+
+    if vulkanLayer:
+        genOpts['vulkan_json_data.hpp'] = [
+            JSONOutputGenerator,
+            JSONGeneratorOptions(
+                conventions       = conventions,
+                filename          = 'vulkan_json_data.hpp',
+                directory         = directory,
+                apiname           = 'vulkan',
+                profile           = None,
+                versions          = featuresPat,
+                emitversions      = featuresPat,
+                defaultExtensions = None,
+                addExtensions     = addExtensionsPat,
+                removeExtensions  = None,
+                emitExtensions    = None,
+                vulkanLayer       = vulkanLayer,
+                prefixText        = prefixStrings + vkPrefixStrings,
+                genFuncPointers   = True,
+                protectFile       = protectFile,
+                protectFeature    = False,
+                protectProto      = '#ifndef',
+                protectProtoStr   = 'VK_NO_PROTOTYPES',
+                apicall           = 'VKAPI_ATTR ',
+                apientry          = 'VKAPI_CALL ',
+                apientryp         = 'VKAPI_PTR *',
+                alignFuncParam    = 48)
+            ]
+    else:
+        genOpts['vulkan_json_data.hpp'] = [
+        JSONOutputGenerator,
+        JSONGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_json_data.hpp',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            vulkanLayer       = vulkanLayer,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            isCTS             = isCTS,
+            alignFuncParam    = 48)
+        ]
+
+    # keep any relevant platform extensions for the following generators
+    # (needed for e.g. the vulkan_sci extensions)
+    explicitRemoveExtensionsPat = makeREstring(
+        removeExtensions, None, strings_are_regex=True)
+
+    # Raw C header file generator.
+    genOpts['vulkan_json_gen.h'] = [
+          JSONHeaderOutputGenerator,
+          JSONHeaderGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_json_gen.h',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = explicitRemoveExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48)
+        ]
+
+    # Raw C source file generator.
+    genOpts['vulkan_json_gen.c'] = [
+          JSONCOutputGenerator,
+          JSONCGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_json_gen.c',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = explicitRemoveExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48)
+        ]
+
+    genOpts['vulkan_json_parser.hpp'] = [
+          JSONParserGenerator,
+          JSONParserOptions(
+            conventions       = conventions,
+            filename          = 'vulkan_json_parser.hpp',
+            directory         = directory,
+            apiname           = 'vulkansc',
+            profile           = None,
+            versions          = scVersions,
+            emitversions      = scVersions,
+            defaultExtensions = 'vulkansc',
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = explicitRemoveExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            isCTS             = isCTS,
+            alignFuncParam    = 48)
+        ]
+
+    # Unused - vulkan10.h target.
+    # It is possible to generate a header with just the Vulkan 1.0 +
+    # extension interfaces defined, but since the promoted KHR extensions
+    # are now defined in terms of the 1.1 interfaces, such a header is very
+    # similar to vulkan_core.h.
+    genOpts['vulkan10.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan10.h',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = 'VK_VERSION_1_0',
+            emitversions      = 'VK_VERSION_1_0',
+            defaultExtensions = None,
+            addExtensions     = None,
+            removeExtensions  = None,
+            emitExtensions    = None,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+        ]
+
+    # Video header target - combines all video extension dependencies into a
+    # single header, at present.
+    genOpts['vk_video.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vk_video.h',
+            directory         = directory,
+            genpath           = None,
+            apiname           = 'vulkan',
+            profile           = None,
+            versions          = None,
+            emitversions      = None,
+            defaultExtensions = defaultExtensions,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = '',
+            apientry          = '',
+            apientryp         = '',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+    ]
+
+    # Video extension 'Std' interfaces, each in its own header files
+    # These are not Vulkan extensions, or a part of the Vulkan API at all.
+    # They are treated in a similar fashion for generation purposes, but
+    # all required APIs for each interface must be explicitly required.
+    #
+    # Each element of the videoStd[] array is an extension name defining an
+    # interface, and is also the basis for the generated header file name.
+
+    videoStd = [
+        'vulkan_video_codecs_common',
+        'vulkan_video_codec_h264std',
+        'vulkan_video_codec_h264std_decode',
+        'vulkan_video_codec_h264std_encode',
+        'vulkan_video_codec_h265std',
+        'vulkan_video_codec_h265std_decode',
+        'vulkan_video_codec_h265std_encode',
+    ]
+
+    # Unused at present
+    # addExtensionRE = makeREstring(videoStd)
+    for codec in videoStd:
+        headername = f'{codec}.h'
+
+        # Consider all of the codecs 'extensions', but only emit this one
+        emitExtensionRE = makeREstring([codec])
+
+        opts = CGeneratorOptions(
+            conventions       = conventions,
+            filename          = headername,
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            mergeApiNames     = mergeApiNames,
+            profile           = None,
+            versions          = None,
+            emitversions      = None,
+            defaultExtensions = None,
+            addExtensions     = emitExtensionRE,
+            removeExtensions  = None,
+            emitExtensions    = emitExtensionRE,
+            requireDepends    = False,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = False,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            alignFuncParam    = 48,
+            )
+
+        genOpts[headername] = [ COutputGenerator, opts ]
+
+    # Unused - vulkan11.h target.
+    # It is possible to generate a header with just the Vulkan 1.0 +
+    # extension interfaces defined, but since the promoted KHR extensions
+    # are now defined in terms of the 1.1 interfaces, such a header is very
+    # similar to vulkan_core.h.
+    genOpts['vulkan11.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'vulkan11.h',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = '^VK_VERSION_1_[01]$',
+            emitversions      = '^VK_VERSION_1_[01]$',
+            defaultExtensions = None,
+            addExtensions     = None,
+            removeExtensions  = None,
+            emitExtensions    = None,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            genFuncPointers   = True,
+            protectFile       = protectFile,
+            protectFeature    = False,
+            protectProto      = '#ifndef',
+            protectProtoStr   = 'VK_NO_PROTOTYPES',
+            apicall           = 'VKAPI_ATTR ',
+            apientry          = 'VKAPI_CALL ',
+            apientryp         = 'VKAPI_PTR *',
+            alignFuncParam    = 48,
+            misracstyle       = misracstyle,
+            misracppstyle     = misracppstyle)
+        ]
+
+    genOpts['alias.h'] = [
+          COutputGenerator,
+          CGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'alias.h',
+            directory         = directory,
+            genpath           = None,
+            apiname           = defaultAPIName,
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = defaultExtensions,
+            addExtensions     = None,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = None,
+            genFuncPointers   = False,
+            protectFile       = False,
+            protectFeature    = False,
+            protectProto      = '',
+            protectProtoStr   = '',
+            apicall           = '',
+            apientry          = '',
+            apientryp         = '',
+            alignFuncParam    = 36)
+        ]
+
+
+def genTarget(args):
+    """Create an API generator and corresponding generator options based on
+    the requested target and command line options.
+
+    This is encapsulated in a function so it can be profiled and/or timed.
+    The args parameter is an parsed argument object containing the following
+    fields that are used:
+
+    - target - target to generate
+    - directory - directory to generate it in
+    - protect - True if re-inclusion wrappers should be created
+    - extensions - list of additional extensions to include in generated interfaces"""
+
+    # Create generator options with parameters specified on command line
+    makeGenOpts(args)
+
+    # Select a generator matching the requested target
+    if args.target in genOpts:
+        createGenerator = genOpts[args.target][0]
+        options = genOpts[args.target][1]
+
+        logDiag('* Building', options.filename)
+        logDiag('* options.versions          =', options.versions)
+        logDiag('* options.emitversions      =', options.emitversions)
+        logDiag('* options.defaultExtensions =', options.defaultExtensions)
+        logDiag('* options.addExtensions     =', options.addExtensions)
+        logDiag('* options.removeExtensions  =', options.removeExtensions)
+        logDiag('* options.emitExtensions    =', options.emitExtensions)
+        logDiag('* options.emitSpirv         =', options.emitSpirv)
+        logDiag('* options.emitFormats       =', options.emitFormats)
+
+        gen = createGenerator(errFile=errWarn,
+                              warnFile=errWarn,
+                              diagFile=diag)
+        return (gen, options)
+    else:
+        logErr('No generator options for unknown target:', args.target)
+        return None
+
+
+# -feature name
+# -extension name
+# For both, "name" may be a single name, or a space-separated list
+# of names, or a regular expression.
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-apiname', action='store',
+                        default=None,
+                        help='Specify API to generate (defaults to repository-specific conventions object value)')
+    parser.add_argument('-mergeApiNames', action='store',
+                        default=None,
+                        help='Specify a comma separated list of APIs to merge into the target API')
+    parser.add_argument('-defaultExtensions', action='store',
+                        default=APIConventions().xml_api_name,
+                        help='Specify a single class of extensions to add to targets')
+    parser.add_argument('-extension', action='append',
+                        default=[],
+                        help='Specify an extension or extensions to add to targets')
+    parser.add_argument('-removeExtensions', action='append',
+                        default=[],
+                        help='Specify an extension or extensions to remove from targets')
+    parser.add_argument('-emitExtensions', action='append',
+                        default=[],
+                        help='Specify an extension or extensions to emit in targets')
+    parser.add_argument('-emitSpirv', action='append',
+                        default=[],
+                        help='Specify a SPIR-V extension or capability to emit in targets')
+    parser.add_argument('-emitFormats', action='append',
+                        default=[],
+                        help='Specify Vulkan Formats to emit in targets')
+    parser.add_argument('-feature', action='append',
+                        default=[],
+                        help='Specify a core API feature name or names to add to targets')
+    parser.add_argument('-debug', action='store_true',
+                        help='Enable debugging')
+    parser.add_argument('-dump', action='store_true',
+                        help='Enable dump to stderr')
+    parser.add_argument('-diagfile', action='store',
+                        default=None,
+                        help='Write diagnostics to specified file')
+    parser.add_argument('-errfile', action='store',
+                        default=None,
+                        help='Write errors and warnings to specified file instead of stderr')
+    parser.add_argument('-noprotect', dest='protect', action='store_false',
+                        help='Disable inclusion protection in output headers')
+    parser.add_argument('-profile', action='store_true',
+                        help='Enable profiling')
+    parser.add_argument('-registry', action='store',
+                        default='vk.xml',
+                        help='Use specified registry file instead of vk.xml')
+    parser.add_argument('-time', action='store_true',
+                        help='Enable timing')
+    parser.add_argument('-genpath', action='store', default='gen',
+                        help='Path to generated files')
+    parser.add_argument('-o', action='store', dest='directory',
+                        default='.',
+                        help='Create target and related files in specified directory')
+    parser.add_argument('target', metavar='target', nargs='?',
+                        help='Specify target')
+    parser.add_argument('-quiet', action='store_true', default=True,
+                        help='Suppress script output during normal execution.')
+    parser.add_argument('-verbose', action='store_false', dest='quiet', default=True,
+                        help='Enable script output during normal execution.')
+    parser.add_argument('--vulkanLayer', action='store_true', dest='vulkanLayer',
+                        help='Enable scripts to generate VK specific vulkan_json_data.hpp for json_gen_layer.')
+    parser.add_argument('-misracstyle', dest='misracstyle', action='store_true',
+                        help='generate MISRA C-friendly headers')
+    parser.add_argument('-misracppstyle', dest='misracppstyle', action='store_true',
+                        help='generate MISRA C++-friendly headers')
+    parser.add_argument('--iscts', action='store_true', dest='isCTS',
+                        help='Specify if this should generate CTS compatible code')
+
+    args = parser.parse_args()
+
+    # This splits arguments which are space-separated lists
+    args.feature = [name for arg in args.feature for name in arg.split()]
+    args.extension = [name for arg in args.extension for name in arg.split()]
+
+    # create error/warning & diagnostic files
+    if args.errfile:
+        errWarn = open(args.errfile, 'w', encoding='utf-8')
+    else:
+        errWarn = sys.stderr
+
+    if args.diagfile:
+        diag = open(args.diagfile, 'w', encoding='utf-8')
+    else:
+        diag = None
+
+    if args.time:
+        # Log diagnostics and warnings
+        setLogFile(setDiag = True, setWarn = True, filename = '-')
+
+    # Create the API generator & generator options
+    (gen, options) = genTarget(args)
+
+    # Create the registry object with the specified generator and generator
+    # options. The options are set before XML loading as they may affect it.
+    reg = Registry(gen, options)
+
+    # Parse the specified registry XML into an ElementTree object
+    startTimer(args.time)
+    tree = etree.parse(args.registry)
+    endTimer(args.time, '* Time to make ElementTree =')
+
+    # Load the XML tree into the registry object
+    startTimer(args.time)
+    reg.loadElementTree(tree)
+    endTimer(args.time, '* Time to parse ElementTree =')
+
+    if args.dump:
+        logDiag('* Dumping registry to regdump.txt')
+        reg.dumpReg(filehandle=open('regdump.txt', 'w', encoding='utf-8'))
+
+    # Finally, use the output generator to create the requested target
+    if args.debug:
+        pdb.run('reg.apiGen()')
+    else:
+        startTimer(args.time)
+        reg.apiGen()
+        endTimer(args.time, '* Time to generate ' + options.filename + ' =')
+
+    if not args.quiet:
+        logDiag('* Generated', options.filename)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/globalizeIncludes b/codegen/vulkan/vulkan-docs-next/scripts/globalizeIncludes
new file mode 100755
index 0000000..bc63c57
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/globalizeIncludes
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright 2019-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# globalizeIncludes - rewrites generated include::, and image:/image::
+# asciidoctor directives in specified Vulkan specification source files to
+# be relative to specified attributes {generated} and {images}, ensuring
+# they work properly when extracted to reference pages.
+#
+# usage: globalizeIncludes filenames
+# Updates specified files in-place, so make sure they are backed up first.
+
+sed -i -E \
+    -e 's#image:images/#image:{images}/#g' \
+    -e 's#image::images/#image::{images}/#g' \
+    -e 's#include::(\.\./)*(api|validity|hostsynctable)#include::{generated}/\2#g' \
+    $*
+
+# Not yet:
+#   -e 's#include::meta/#include::{generated}/meta/#g' \
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/hostsyncgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/hostsyncgenerator.py
new file mode 100644
index 0000000..850f0c6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/hostsyncgenerator.py
@@ -0,0 +1,145 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, write
+from spec_tools.attributes import ExternSyncEntry
+from spec_tools.validity import ValidityCollection, ValidityEntry
+from spec_tools.util import getElemName
+
+
+class HostSynchronizationOutputGenerator(OutputGenerator):
+    """HostSynchronizationOutputGenerator - subclass of OutputGenerator.
+    Generates AsciiDoc includes of the externsync parameter table for the
+    fundamentals chapter of the API specification. Similar to
+    DocOutputGenerator.
+
+    ---- methods ----
+    HostSynchronizationOutputGenerator(errFile, warnFile, diagFile) - args as for
+      OutputGenerator. Defines additional internal state.
+    ---- methods overriding base class ----
+    genCmd(cmdinfo)"""
+    # Generate Host Synchronized Parameters in a table at the top of the spec
+
+    threadsafety = {
+        'parameters': ValidityCollection(),
+        'parameterlists': ValidityCollection(),
+        'implicit': ValidityCollection()
+    }
+
+    def makeParameterName(self, name):
+        return 'pname:' + name
+
+    def makeFLink(self, name):
+        return 'flink:' + name
+
+    def writeBlock(self, basename, title, contents):
+        """Generate an include file.
+
+        - directory - subdirectory to put file in
+        - basename - base name of the file
+        - contents - contents of the file (Asciidoc boilerplate aside)"""
+        filename = self.genOpts.directory + '/' + basename
+        self.logMsg('diag', '# Generating include file:', filename)
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.genOpts.conventions.warning_comment, file=fp)
+
+            if contents:
+                write('.%s' % title, file=fp)
+                write('****', file=fp)
+                write(contents, file=fp, end='')
+                write('****', file=fp)
+                write('', file=fp)
+            else:
+                self.logMsg('diag', '# No contents for:', filename)
+
+    def writeInclude(self):
+        "Generates the asciidoc include files."""
+        self.writeBlock('parameters.adoc',
+                        'Externally Synchronized Parameters',
+                        self.threadsafety['parameters'])
+        self.writeBlock('parameterlists.adoc',
+                        'Externally Synchronized Parameter Lists',
+                        self.threadsafety['parameterlists'])
+        self.writeBlock('implicit.adoc',
+                        'Implicit Externally Synchronized Parameters',
+                        self.threadsafety['implicit'])
+
+    def makeThreadSafetyBlocks(self, cmd, paramtext):
+        # See also makeThreadSafetyBlock in validitygenerator.py - similar but not entirely identical
+        protoname = cmd.find('proto/name').text
+
+        # Find and add any parameters that are thread unsafe
+        explicitexternsyncparams = cmd.findall(paramtext + "[@externsync]")
+        if explicitexternsyncparams is not None:
+            for param in explicitexternsyncparams:
+                self.makeThreadSafetyForParam(protoname, param)
+
+        # Find and add any "implicit" parameters that are thread unsafe
+        implicitexternsyncparams = cmd.find('implicitexternsyncparams')
+        if implicitexternsyncparams is not None:
+            for elem in implicitexternsyncparams:
+                entry = ValidityEntry()
+                entry += elem.text
+                entry += ' in '
+                entry += self.makeFLink(protoname)
+                self.threadsafety['implicit'] += entry
+
+        # Add a VU for any command requiring host synchronization.
+        # This could be further parameterized, if a future non-Vulkan API
+        # requires it.
+        if self.genOpts.conventions.is_externsync_command(protoname):
+            entry = ValidityEntry()
+            entry += 'The sname:VkCommandPool that pname:commandBuffer was allocated from, in '
+            entry += self.makeFLink(protoname)
+            self.threadsafety['implicit'] += entry
+
+    def makeThreadSafetyForParam(self, protoname, param):
+        """Create thread safety validity for a single param of a command."""
+        externsyncattribs = ExternSyncEntry.parse_externsync_from_param(param)
+        param_name = getElemName(param)
+
+        for attrib in externsyncattribs:
+            entry = ValidityEntry()
+            is_array = False
+            if attrib.entirely_extern_sync:
+                # "true" or "true_with_children"
+                if self.paramIsArray(param):
+                    entry += 'Each element of the '
+                    is_array = True
+                elif self.paramIsPointer(param):
+                    entry += 'The object referenced by the '
+                else:
+                    entry += 'The '
+
+                entry += self.makeParameterName(param_name)
+                entry += ' parameter'
+
+                if attrib.children_extern_sync:
+                    entry += ', and any child handles,'
+
+            else:
+                # parameter/member reference
+                readable = attrib.get_human_readable(make_param_name=self.makeParameterName)
+                is_array = (' element of ' in readable)
+                entry += readable
+
+            entry += ' in '
+            entry += self.makeFLink(protoname)
+
+            if is_array:
+                self.threadsafety['parameterlists'] += entry
+            else:
+                self.threadsafety['parameters'] += entry
+
+    def genCmd(self, cmdinfo, name, alias):
+        "Generate command."
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        # @@@ (Jon) something needs to be done here to handle aliases, probably
+
+        self.makeThreadSafetyBlocks(cmdinfo.elem, 'param')
+
+        self.writeInclude()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff b/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff
new file mode 100755
index 0000000..f4c8c74
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff
@@ -0,0 +1,135 @@
+#!/usr/bin/env python3
+#
+# Modified from the htmldiff script developed by Dominique Hazael-Massieux
+# for the http://services.w3.org/htmldiff website.
+# License information found at https://github.com/w3c/htmldiff-ui/blob/master/LICENSE
+# for "htmldiffy.py".
+#
+# Copyright (c) 2008-2020 w3c
+# Copyright 2016-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: MIT
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+import atexit
+import os
+import re
+import sys
+import tempfile
+import tidy
+
+from subprocess import Popen, PIPE
+
+def tidyFile(filename):
+    ifp = open(filename, 'r')
+
+    # option for tidy
+    options = dict(tidy_mark=0,show_warnings=0,quiet=1,char_encoding='utf8')
+    html5 = re.search(r"<!doctype\s+html\s*>", ifp.read(4096),
+                      re.IGNORECASE)
+    ifp.seek(0)
+    html5_options = {'add_xml_space': 'no',
+                     'output_xhtml': 'no',
+                     'tidy_mark': 'no',
+                     'new_blocklevel_tags': 'article,aside,canvas,dialog,details,figcaption,figure,footer,header,hgroup,menu,nav,section,main,summary,math,semantics,mrow,mfenced,mtable,mtr,mtd,mi,mn,msub,mo,mfrac,munderover,mtext,svg,g,image,rect,text,desc,line,path,polygon,ellipse,tspan,defs,feoffset,fecolormatrix,filter,fegaussianblur,feblend,marker,circle',
+                     'new_inline_tags': 'video,audio,canvas,ruby,rt,rp,time,meter,progress,track,source,emu-val,emu-nt,emu-t,mark',
+                     'break_before_br': 'no',
+                     'vertical_space': 'no',
+                     'enclose_text': 'no',
+                     'numeric_entities': 'yes',
+                     'wrap': '1000',
+                     'wrap_attributes': 'no',
+                     'drop_empty_paras': 'no'
+                     }
+    if html5:
+        options.update(html5_options)
+    newtidy = tidy.parseString(ifp.read(), **options)
+    if len(newtidy.errors) > 0:
+        if not html5:
+            ifp.seek(0)
+            options.update(html5_options)
+            newtidy = tidy.parseString(ifp.read(), **options)
+    ifp.close()
+
+    fp = tempfile.NamedTemporaryFile(
+           mode='w+', prefix='htmldiff-', suffix='.html')
+    atexit.register(fp.close)
+    fp.write(str(newtidy))
+    fp.flush()
+    fp.seek(0)
+
+    # sys.stderr.write('tidyFile: tempfile name %s\n' % fp.name)
+
+    if (newtidy.errors):
+        sys.stderr.write('tidyFile: tidy.parseString error: %s\n' % str(newtidy.errors))
+    return fp
+
+def call_perl(args):
+
+    scriptdir = os.path.abspath(os.path.dirname(sys.argv[0]))
+    perlscript = os.path.join(scriptdir, 'htmldiff.pl')
+    cmd = [perlscript]
+    cmd.extend(args)
+    p = Popen(cmd,
+              text=True,
+              stdin=PIPE, stdout=PIPE, stderr=PIPE)
+    sys.stdout.flush()
+    sys.stderr.flush()
+    (out, err) = p.communicate()
+    p.stdin.close()
+    if err:
+        print(out)
+        sys.stderr.write('htmldiff: An error occurred when running htmldiff.pl on the documents: %s\n'% str(err))
+        exit(1)
+    else:
+        print(out)
+        exit(0)
+
+def usage():
+    # did not investigate fully what -c does - something about mhtml comments?
+    sys.stderr.write("""htmldiff: need two filename args file1 file2
+
+May also pass arguments:
+    -l  Make diff highlights links that jump to the following diff
+    -t  Add a script to optionally hide old text via button
+    -o  Complete omit old text
+    -h  show this text
+""")
+    sys.exit(1)
+
+if __name__ == '__main__':
+
+    docs = []
+    passthru_args = []
+    for arg in sys.argv[1:]:
+        if arg in ('-c', '-l', '-t', '-o'):
+            passthru_args.append(arg)
+        elif arg == '-h':
+            usage()
+        else:
+            docs.append(arg)
+
+    if (len(docs) != 2):
+        usage()
+    refdoc = tidyFile(docs[0])
+
+    newdoc = tidyFile(docs[1])
+    passthru_args.append(refdoc.name)
+    passthru_args.append(newdoc.name)
+    call_perl(passthru_args)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff.pl b/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff.pl
new file mode 100755
index 0000000..af2a6cd
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/htmldiff/htmldiff.pl
@@ -0,0 +1,581 @@
+#!/usr/bin/perl
+#
+# htmldiff - present a diff marked version of two html documents
+#
+# Copyright (c) 1998-2006 MACS, Inc.
+#
+# Copyright (c) 2007 SiSco, Inc.
+#
+# SPDX-License-Identifier: MIT
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# See http://www.themacs.com for more information.
+#
+# usage: htmldiff [[-c] [-l] [-o] oldversion newversion [output]]
+#
+# -c - disable metahtml comment processing
+# -o - disable outputting of old text
+# -l - use navindex to create sequence of diffs
+# oldversion - the previous version of the document
+# newversion - the newer version of the document
+# output - a filename to place the output in. If omitted, the output goes to
+#          standard output.
+#
+# if invoked with no options or arguments, operates as a CGI script. It then
+# takes the following parameters:
+#
+# oldfile - the URL of the original file
+# newfile - the URL of the new file
+# mhtml - a flag to indicate whether it should be aware of MetaHTML comments.
+#
+# requires GNU diff utility
+# also requires the perl modules Getopt::Std
+#
+# NOTE: The markup created by htmldiff may not validate against the HTML 4.0
+# DTD. This is because the algorithm is realtively simple, and there are
+# places in the markup content model where the span element is not allowed.
+# Htmldiff is NOT aware of these places.
+#
+# $Source: /u/sources/public/2009/htmldiff/htmldiff.pl,v $
+# $Revision: 1.3 $
+#
+# $Log: htmldiff.pl,v $
+# Revision 1.3  2016/10/24 15:06:51  dom
+# Summary: Use nav script always
+#
+# Revision 1.2  2016/10/24 15:04:28  dom
+# Add navigation script
+#
+# Revision 1.1  2014-01-06 08:04:51  dom
+# added copy of htmldiff perl script since aptest.com repo no longer available
+#
+# Revision 1.5  2008/03/05 13:23:16  ahby
+# Fixed a problem with leading whitespace before markup.
+#
+# Revision 1.4  2007/12/13 13:09:16  ahby
+# Updated copyright and license.
+#
+# Revision 1.3  2007/12/13 12:53:34  ahby
+# Changed use of span to ins and del
+#
+# Revision 1.2  2002/02/13 16:27:23  ahby
+# Changed processing model.
+# Improved handling of old text and changed styles.
+#
+# Revision 1.1  2000/07/12 12:20:04  ahby
+# Updated to remove empty spans - this fixes validation problems under
+# strict.
+#
+# Revision 1.11  1999/12/08 19:46:45  ahby
+# Fixed validation errors introduced by placing markup where it didn't
+# belong.
+#
+# Revision 1.10  1999/10/18 13:42:58  ahby
+# Added -o to the usage message.
+#
+# Revision 1.9  1999/05/04 12:29:11  ahby
+# Added an option to turn off the display of old text.
+#
+# Revision 1.8  1999/04/09 14:37:27  ahby
+# Fixed a perl syntax error.
+#
+# Revision 1.7  1999/04/09 14:35:49  ahby
+# Added reference to MACS homepage.
+#
+# Revision 1.6  1999/04/09 14:35:09  ahby
+# Added comment about validity of generated markup.
+#
+# Revision 1.5  1999/02/22 22:17:54  ahby
+# Changed to use stylesheets.
+# Changed to rely upon span.
+# Changed to work around content model problems.
+#
+# Revision 1.4  1999/02/08 02:32:22  ahby
+# Added a copyright statement.
+#
+# Revision 1.3  1999/02/08 02:30:40  ahby
+# Added header processing.
+#
+# Revision 1.2  1998/12/10 17:31:31  ahby
+# Fixed to escape less-thans in change blocks and to not permit change
+# markup within specific elements (like TITLE).
+#
+# Revision 1.1  1998/11/26 00:09:22  ahby
+# Initial revision
+#
+#
+
+use Getopt::Std;
+
+sub usage {
+	print STDERR "htmldiff [-c] [-o] oldversion newversion [output]\n";
+	exit;
+}
+
+sub url_encode {
+    my $str = shift;
+    $str =~ s/([\x00-\x1f\x7F-\xFF])/
+                 sprintf ('%%%02x', ord ($1))/eg;
+    return $str;
+}
+
+# markit - diff-mark the streams
+#
+# markit(file1, file2)
+#
+# markit relies upon GNUdiff to mark up the text.
+#
+# The markup is encoded using special control sequences:
+#
+#   a block wrapped in control-a is deleted text
+#   a block wrapped in control-b is old text
+#   a block wrapped in control-c is new text
+#
+# The main processing loop attempts to wrap the text blocks in appropriate
+# SPANs based upon the type of text that it is.
+#
+# When the loop encounters a < in the text, it stops the span. Then it outputs
+# the element that is defined, then it restarts the span.
+
+sub markit {
+	my $retval = "";
+	my($file1) = shift;
+	my($file2) = shift;
+#	my $old="<span class=\\\"diff-old-a\\\">deleted text: </span>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'";
+	my $old="%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'";
+	my $new="%c'\012'%c'\003'%c'\012'%>%c'\012'%c'\003'%c'\012'";
+	my $unchanged="%=";
+	my $changed="%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'%c'\004'%c'\012'%>%c'\012'%c'\004'%c'\012'";
+	if ($opt_o) {
+		$old = "";
+		$changed = "%c'\012'%c'\004'%c'\012'%>%c'\012'%c'\004'%c'\012'";
+	}
+#	my $old="%c'\002'<font color=\\\"purple\\\" size=\\\"-2\\\">deleted text:</font><s>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'</s>%c'\012'%c'\002'";
+#	my $new="%c'\002'<font color=\\\"purple\\\"><u>%c'\012'%c'\002'%>%c'\002'</u></font>%c'\002'%c'\012'";
+#	my $unchanged="%=";
+#	my $changed="%c'\002'<s>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'</s><font color=\\\"purple\\\"><u>%c'\002'%c'\012'%>%c'\012'%c'\002'</u></font>%c'\002'%c'\012'";
+
+	my @span;
+	$span[0]="</span>";
+	$span[1]="<del class=\"diff-old\">";
+	$span[2]="<del class=\"diff-old\">";
+	$span[3]="<ins class=\"diff-new\">";
+	$span[4]="<ins class=\"diff-chg\">";
+
+	my @diffEnd ;
+	$diffEnd[1] = '</del>';
+	$diffEnd[2] = '</del>';
+	$diffEnd[3] = '</ins>';
+	$diffEnd[4] = '</ins>';
+
+	my $diffcounter = 0;
+
+	open(FILE, qq(diff -d --old-group-format="$old" --new-group-format="$new" --changed-group-format="$changed" --unchanged-group-format="$unchanged" $file1 $file2 |)) || die("Diff failed: $!");
+#	system (qq(diff --old-group-format="$old" --new-group-format="$new" --changed-group-format="$changed" --unchanged-group-format="$unchanged" $file1 $file2 > /tmp/output));
+
+	my $state = 0;
+	my $inblock = 0;
+	my $temp = "";
+	my $lineCount = 0;
+
+# strategy:
+#
+# process the output of diff...
+#
+# a link with control A-D means the start/end of the corresponding ordinal
+# state (1-4). Resting state is state 0.
+#
+# While in a state, accumulate the contents for that state. When exiting the
+# state, determine if it is appropriate to emit the contents with markup or
+# not (basically, if the accumulated buffer contains only empty lines or lines
+# with markup, then we don't want to emit the wrappers.  We don't need them.
+#
+# Note that if there is markup in the "old" block, that markup is silently
+# removed.  It isn't really that interesting, and it messes up the output
+# something fierce.
+
+	while (<FILE>) {
+		my $nextCounter = $diffcounter + 1;
+		my $anchor = $opt_l ? qq[<a tabindex="$diffcounter" id="diff-$diffcounter" href="#diff-$nextCounter">] : "" ;
+		my $anchorEnd = $opt_l ? q[</a>] : "" ;
+		$lineCount ++;
+		if ($state == 0) {	# if we are resting and we find a marker,
+							# then we must be entering a block
+			if (m/^([\001-\004])/) {
+				$state = ord($1);
+				$_ = "";
+			}
+#			if (m/^\001/) {
+#				$state = 1;
+#				s/^/$span[1]/;
+#			} elsif (m/^\002/) {
+#				$state = 2;
+#				s/^/$span[2]/;
+#			} elsif (m/^\003/) {
+#				$state = 3;
+#				s/^/$span[3]/;
+#			} elsif (m/^\004/) {
+#				$state = 4;
+#				s/^/$span[4]/;
+#			}
+		} else {
+			# if we are in "old" state, remove markup
+			if (($state == 1) || ($state == 2)) {
+				s/\<.*\>//;	# get rid of any old markup
+				s/\</&lt;/g; # escape any remaining STAG or ETAGs
+				s/\>/&gt;/g;
+			}
+			# if we found another marker, we must be exiting the state
+			if (m/^([\001-\004])/) {
+				if ($temp ne "") {
+					$_ = $span[$state] . $anchor . $temp . $anchorEnd . $diffEnd[$state] . "\n";
+					$temp = "";
+					$diffcounter++;
+				} else {
+					$_ = "" ;
+				}
+				$state = 0;
+			} elsif (m/^\s*\</) { # otherwise, is this line markup?
+				# if it is markup AND we haven't seen anything else yet,
+				# then we will emit the markup
+				if ($temp eq "") {
+					$retval .= $_;
+					$_ = "";
+				} else {	# we wrap it with the state switches and hold it
+					s/^/$anchorEnd$diffEnd[$state]/;
+					s/$/$span[$state]$anchor/;
+					$temp .= $_;
+					$_ = "";
+					$diffcounter++;
+				}
+			} else {
+				if (m/.+/) {
+					$temp .= $_;
+					$_ = "";
+				}
+			}
+		}
+
+		s/\001//g;
+		s/\002//g;
+		s/\003//g;
+		s/\004//g;
+		if ($_ !~ m/^$/) {
+			$retval .= $_;
+		}
+	}
+	close FILE;
+	$retval =~ s/$span[1]\n+$diffEnd[1]//g;
+	$retval =~ s/$span[2]\n+$diffEnd[2]//g;
+	$retval =~ s/$span[3]\n+$diffEnd[3]//g;
+	$retval =~ s/$span[4]\n+$diffEnd[4]//g;
+	$retval =~ s/$span[1]\n*$//g;
+	$retval =~ s/$span[2]\n*$//g;
+	$retval =~ s/$span[3]\n*$//g;
+	$retval =~ s/$span[4]\n*$//g;
+	return $retval;
+}
+
+sub splitit {
+	my $filename = shift;
+	my $headertmp = shift;
+	my $inheader=0;
+	my $preformatted=0;
+	my $inelement=0;
+	my $retval = "";
+	my $styles = q(<style type='text/css'>
+.diff-old-a {
+  font-size: smaller;
+  color: red;
+}
+.diff-new a { text-decoration: none; }
+.diff-new { background-color: yellow; }
+.diff-chg { background-color: lime; }
+.diff-chg a { text-decoration: none; }
+.diff-new:before,
+.diff-new:after
+    { content: "\2191" }
+.diff-chg:before, .diff-chg:after
+    { content: "\2195" }
+.diff-old { text-decoration: line-through; background-color: #FBB; }
+.diff-old:before,
+.diff-old:after
+    { content: "\2193" }
+.diff-old a { text-decoration: none; }
+:focus { border: thin red solid}
+</style>
+<script src="https://www.w3.org/2016/10/htmldiff-nav.js"></script>);
+	if ($opt_t) {
+		$styles .= q(
+<script type="text/javascript">
+<!--
+function setOldDisplay() {
+	for ( var s = 0; s < document.styleSheets.length; s++ ) {
+		var css = document.styleSheets[s];
+		var mydata ;
+		try { mydata = css.cssRules ;
+		if ( ! mydata ) mydata = css.rules;
+		for ( var r = 0; r < mydata.length; r++ ) {
+			if ( mydata[r].selectorText == '.diff-old' ) {
+				mydata[r].style.display = ( mydata[r].style.display == '' ) ? 'none'
+: '';
+				return;
+			}
+		}
+		} catch(e) {} ;
+	}
+}
+-->
+</script>
+);
+
+	}
+
+	if ($stripheader) {
+		open(HEADER, ">$headertmp");
+	}
+
+	my $incomment = 0;
+	my $inhead = 1;
+	open(FILE, $filename) || die("File $filename cannot be opened: $!");
+	while (<FILE>) {
+		if ($inhead == 1) {
+			if (m/\<\/head/i) {
+				print HEADER $styles;
+			}
+			if (m/\<body/i) {
+				$inhead = 0;
+				print HEADER;
+				if ($opt_t) {
+					print HEADER q(
+<form action=""><input type="button" onclick="setOldDisplay()" value="Show/Hide Old Content" /></form>
+);
+				}
+				if ($opt_l) {
+					print HEADER q(
+						<p><em>NOTE: Click highlighted diff text to jump to the following difference.</em></p>
+					);
+				}
+				close HEADER;
+			} else {
+				print HEADER;
+			}
+		} else {
+			if ($incomment) {
+				if (m;-->;) {
+					$incomment = 0;
+					s/.*-->//;
+				} else {
+					next;
+				}
+			}
+			if (m;<!--;) {
+				while (m;<!--.*-->;) {
+					s/<!--.*?-->//;
+				}
+				if (m;<!--; ) {
+					$incomment = 1;
+					s/<!--.*//;
+				}
+			}
+			if (m/\<pre/i) {
+				$preformatted = 1;
+			}
+			if (m/\<\/pre\>/i) {
+				$preformatted = 0;
+			}
+			if ($preformatted) {
+				$retval .= $_;
+			} elsif ($mhtmlcomments && /^;;;/) {
+				$retval .= $_;
+			} else {
+				my @list = split(' ');
+				foreach $element (@list) {
+					if ($element =~ m/\<H[1-6]/i) {
+#						$inheader = 1;
+					}
+					if ($inheader == 0) {
+						$element =~ s/</\n</g;
+						$element =~ s/^\n//;
+						$element =~ s/>/>\n/g;
+						$element =~ s/\n$//;
+						$element =~ s/>\n([.,:!]+)/>$1/g;
+					}
+					if ($element =~ m/\<\/H[1-6]\>/i) {
+						$inheader = 0;
+					}
+					$retval .= "$element";
+					$inelement += ($element =~ s/</&lt;/g);
+					$inelement -= ($element =~ s/>/&gt;/g);
+					if ($inelement < 0) {
+						$inelement = 0;
+					}
+					if (($inelement == 0) && ($inheader == 0)) {
+						$retval .= "\n";
+					} else {
+						$retval .= " ";
+					}
+				}
+			undef @list;
+			}
+		}
+	}
+	$retval .= "\n";
+	close FILE;
+	return $retval;
+}
+
+$mhtmlcomments = 1;
+
+sub cli {
+	getopts("clto") || usage();
+
+	if ($opt_c) {$mhtmlcomments = 0;}
+
+	if (@ARGV < 2) { usage(); }
+
+	$file1 = $ARGV[0];
+	$file2 = $ARGV[1];
+	$file3 = $ARGV[2];
+
+	$tmp = splitit($file1, $headertmp1);
+	open (FILE, ">$tmp1");
+	print FILE $tmp;
+	close FILE;
+
+	$tmp = splitit($file2, $headertmp2);
+	open (FILE, ">$tmp2");
+	print FILE $tmp;
+	close FILE;
+
+	$output = "";
+
+	if ($stripheader) {
+		open(FILE, $headertmp2);
+		while (<FILE>) {
+			$output .= $_;
+		}
+		close(FILE);
+	}
+
+	$output .= markit($tmp1, $tmp2);
+
+	if ($file3) {
+		open(FILE, ">$file3");
+		print FILE $output;
+		close FILE;
+	} else {
+		print $output;
+	}
+}
+
+sub cgi {
+#	use LWP::UserAgent;
+#	use CGI;
+
+	my $query = new CGI;
+	my $url1 = $query->param("oldfile");
+	my $url2 = $query->param("newfile");
+	my $mhtml = $query->param("mhtml");
+
+	my $file1 = "/tmp/htdcgi1.$$";
+	my $file2 = "/tmp/htdcgi2.$$";
+
+	my $ua = new LWP::UserAgent;
+	$ua->agent("MACS, Inc. HTMLdiff/0.9 " . $ua->agent);
+
+	# Create a request
+
+	my $req1 = new HTTP::Request GET => $url1;
+
+	my $res1 = $ua->request($req1, $file1);
+	if ($res1->is_error) {
+		print $res1->error_as_HTML();
+		print "<p>The URL $url1 could not be found.  Please check it and try again.</p>";
+		return;
+	}
+
+	my $req2 = new HTTP::Request GET => $url2;
+
+	my $res2 = $ua->request($req2, $file2);
+	if ($res2->is_error) {
+		print $res2->error_as_HTML();
+		print "<p>The URL $url2 could not be found.  Please check it and try again.</p>";
+		return;
+	}
+
+	$split1 = splitit($file1, $headertmp1);
+	open (FILE, ">$tmp1");
+	print FILE $split1;
+	close FILE;
+
+	$split2 = splitit($file2, $headertmp2);
+	open (FILE, ">$tmp2");
+	print FILE $split2;
+	close FILE;
+
+	$output = "";
+
+	if ($stripheader) {
+		open(FILE, $headertmp2);
+		while (<FILE>) {
+			$output .= $_;
+		}
+		close(FILE);
+	}
+
+	$output .= markit($tmp1, $tmp2);
+
+	my $base=$res2->base;
+
+	if ($base !~ /\/$/) {
+		$base =~ s/[^\/]*$//;
+	}
+
+	if ( $output !~ /<base/i ) {
+		$output =~ s/<head>/<head>\n<base href="$base">/i ||
+	  	$output =~ s/<html>/<html>\n<base href="$base">/i ;
+	}
+
+	print $query->header(-type=>'text/html',-nph=>1);
+	print $output;
+
+	unlink $file1;
+	unlink $file2;
+
+}
+
+$tmp1="/tmp/htdtmp1.$$";
+$headertmp1="/tmp/htdhtmp1.$$";
+$tmp2="/tmp/htdtmp2.$$";
+$headertmp2="/tmp/htdhtmp2.$$";
+$stripheader = 1;
+
+if (@ARGV == 0) {
+	cgi();		# if no arguments, we must be operating as a cgi script
+} else {
+	cli();		# if there are arguments, then we are operating as a CLI
+}
+
+unlink $tmp1;
+unlink $headertmp1;
+unlink $tmp2;
+unlink $headertmp2;
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/indexExt.py b/codegen/vulkan/vulkan-docs-next/scripts/indexExt.py
new file mode 100755
index 0000000..68d5528
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/indexExt.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python3
+#
+# Copyright 2017-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Construct an HTML fragment indexing extension appendices in vkspec.html.
+# This is run only when publishing an update spec, to update the Vulkan
+# registry.
+
+import argparse,io,os,re,string,sys,copy
+import xml.etree.ElementTree as etree
+from apiconventions import APIConventions
+
+def listExts(vendor, ext, tag):
+    prefix = '    <li> <b> '
+    suffix = ' </b> </li>'
+
+    if vendor in tag:
+        desc = vendor + ' Extensions (' + tag[vendor] + ')'
+    else:
+        desc = vendor + ' Extensions (full vendor description unavailable)'
+    print(prefix, desc, suffix)
+
+    # (OLD) Links to the extension appendix in the single-page HTML document.
+    # This is very slow to load.
+    # fmtString = '    <li> <a href="specs/1.3-extensions/html/vkspec.html#{0}"> {0} </a> </li>'
+
+    # This links to the individual per-extension refpages, which are a
+    # slightly modified version of the extension appendices, and far faster
+    # to load.
+    if APIConventions().xml_api_name == 'vulkansc':
+        fmtString = '    <li> <a href="specs/1.0-extensions/man/html/{0}.html"> {0} </a> </li>'
+    else:
+        fmtString = '    <li> <a href="specs/1.3-extensions/man/html/{0}.html"> {0} </a> </li>'
+
+    for name in sorted(ext[vendor]):
+        print(fmtString.format(name))
+
+# -extension name - may be a single extension name, a a space-separated list
+# of names, or a regular expression.
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-registry', action='store',
+                        default='vk.xml',
+                        help='Use specified registry file instead of vk.xml')
+    parser.add_argument('-quiet', action='store_true', default=False,
+                        help='Suppress script output during normal execution.')
+
+    args = parser.parse_args()
+
+    tree = etree.parse(args.registry)
+
+    # Dictionary of vendor tags -> author name mappings
+    tag = {}
+
+    # Loop over all vendor tags, tracking the full corresponding author name
+    for elem in tree.findall('tags/tag'):
+        vendor = elem.get('name')
+        author = elem.get('author')
+
+        tag[vendor] = author
+
+    # Dictionary of supported extensions, indexed by vendor prefix
+    ext = {}
+
+    # Loop over all extensions, add supported names to the dictionary
+    for elem in tree.findall('extensions/extension'):
+        name = elem.get('name')
+        supported = elem.get('supported')
+
+        if APIConventions().xml_api_name in supported.split(','):
+            # Relies on name being in the form VK_<vendor>_stuff
+            (vk, vendor) = name.split('_')[0:2]
+
+            if not vendor in ext:
+                ext[vendor] = []
+            ext[vendor].append(name)
+
+    # Emit HTML fragment indexing the extensions
+
+    print('<ul>')
+
+    for vendor in ['KHR', 'EXT']:
+        if vendor in ext:
+            listExts(vendor, ext, tag)
+            del ext[vendor]
+
+    for vendor in sorted(ext.keys()):
+        listExts(vendor, ext, tag)
+        del ext[vendor]
+
+    print('</ul>')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/interfacedocgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/interfacedocgenerator.py
new file mode 100644
index 0000000..37ed32e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/interfacedocgenerator.py
@@ -0,0 +1,124 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import re
+from generator import OutputGenerator, write
+from parse_dependency import dependencyLanguageSpecMacros
+
+def interfaceDocSortKey(item):
+    if item == None:
+        return '\0'
+    else:
+        return item.casefold()
+
+class InterfaceDocGenerator(OutputGenerator):
+    """InterfaceDocGenerator - subclass of OutputGenerator.
+    Generates AsciiDoc includes of the interfaces added by a an API version
+    or extension."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.features = []
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        # Create subdirectory, if needed
+        self.makeDir(self.genOpts.directory)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        self.features.append( self.featureName )
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def writeNewInterfaces(self, feature, key, title, markup, fp):
+        dict = self.featureDictionary[feature][key]
+
+        parentmarkup = markup
+        if key == 'enumconstant':
+            parentmarkup = 'elink:'
+
+        if dict:
+            write('=== ' + title, file=fp)
+            write('',file=fp)
+
+            # Loop through required blocks, sorted so they start with "core" features
+            for required in sorted(dict, key = interfaceDocSortKey):
+                # 'required' may be a boolean expression of extension
+                # names.
+                # Currently this syntax is the same as asciidoc conditional
+                # syntax, but will eventually become more complex.
+                if required is not None:
+                    # Rewrite with spec macros and xrefs applied to names
+                    requiredlink = dependencyLanguageSpecMacros(required)
+
+                    # @@ A better approach would be to actually evaluate the
+                    # logical expression at generation time.
+                    # If the extensions required are not in the spec build,
+                    # then do not include these requirements.
+                    # This would support arbitrarily complex expressions,
+                    # unlike asciidoc ifdef syntax.
+                    write('ifdef::' + required + '[]', file=fp)
+                    write(f'If {requiredlink} is supported:', file=fp)
+                    write('',file=fp)
+
+                # Commands are relatively straightforward
+                if key == 'command':
+                    for api in sorted(dict[required]):
+                        write('  * ' + markup + api, file=fp)
+                # Types and constants are potentially parented, so need to handle that
+                else:
+                    # Loop through parents, sorted so they start with unparented items
+                    for parent in sorted(dict[required], key = interfaceDocSortKey):
+                        parentstring = ''
+                        if parent:
+                            parentstring = parentmarkup + (', ' + markup).join(parent.split(','))
+                            write('  * Extending ' + parentstring + ':', file=fp)
+                            for api in sorted(dict[required][parent]):
+                                write('  ** ' + markup + api, file=fp)
+                        else:
+                            for api in sorted(dict[required][parent]):
+                                write('  * ' + markup + api, file=fp)
+
+                if required is not None:
+                    write('endif::' + required + '[]', file=fp)
+                write('',file=fp)
+
+    def makeInterfaceFile(self, feature):
+        """Generate a file containing feature interface documentation in
+           asciidoctor markup form.
+
+        - feature - name of the feature being generated"""
+
+        filename = feature + self.genOpts.conventions.file_suffix
+        fp = open(self.genOpts.directory + '/' + filename, 'w', encoding='utf-8')
+
+        # Write out the lists of new interfaces added by the feature
+        self.writeNewInterfaces(feature, 'define',      'New Macros',           'dlink:',   fp)
+        self.writeNewInterfaces(feature, 'basetype',    'New Base Types',       'basetype:',fp)
+        self.writeNewInterfaces(feature, 'handle',      'New Object Types',     'slink:',   fp)
+        self.writeNewInterfaces(feature, 'command',     'New Commands',         'flink:',   fp)
+        self.writeNewInterfaces(feature, 'struct',      'New Structures',       'slink:',   fp)
+        self.writeNewInterfaces(feature, 'union',       'New Unions',           'slink:',   fp)
+        self.writeNewInterfaces(feature, 'funcpointer', 'New Function Pointers','tlink:',   fp)
+        self.writeNewInterfaces(feature, 'enum',        'New Enums',            'elink:',   fp)
+        self.writeNewInterfaces(feature, 'bitmask',     'New Bitmasks',         'tlink:',   fp)
+        self.writeNewInterfaces(feature, 'include',     'New Headers',          'code:',    fp)
+        self.writeNewInterfaces(feature, 'enumconstant','New Enum Constants',   'ename:',   fp)
+
+        fp.close()
+
+    def endFile(self):
+        # Generate metadoc feature files, in refpage and non-refpage form
+        for feature in self.features:
+            self.makeInterfaceFile(feature)
+
+        OutputGenerator.endFile(self)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/jsgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/jsgenerator.py
new file mode 100644
index 0000000..fc7ff7e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/jsgenerator.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python3 -i
+# Copyright 2013-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, enquote, write
+from scriptgenerator import ScriptOutputGenerator
+import pprint
+
+def undefquote(s):
+    if s:
+        return enquote(s)
+    else:
+        return 'undefined'
+
+class JSOutputGenerator(ScriptOutputGenerator):
+    """JSOutputGenerator - subclass of ScriptOutputGenerator.
+    Generates JavaScript data structures describing API names and
+    relationships."""
+
+    def __init__(self, *args, **kwargs):
+        self.currentDict = None
+        super().__init__(*args, **kwargs)
+
+    def beginDict(self, name):
+        """String starting definition of a named dictionary"""
+        self.currentDict = name
+        return f'exports.{name} = {{'
+
+    def endDict(self):
+        """ String ending definition of a named dictionary"""
+        return '}'
+
+    def writeDict(self, dict, name, printValues = True):
+        """Write dictionary as a JavaScript object with the given name.
+           If printValues is False, just output keys with undefined
+           values."""
+
+        write(self.beginDict(name), file=self.outFile)
+        for key in sorted(dict):
+            if printValues:
+                value = undefquote(dict[key])
+            else:
+                value = 'undefined'
+            write(f'{enquote(key)} : {value},', file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+    def writeList(self, l, name):
+        """Write list l as a JavaScript hash with the given name"""
+
+        self.writeDict(l, name, printValues = False)
+
+    def endFile(self):
+        # Creates the inverse mapping of nonexistent APIs to their aliases.
+        super().createInverseMap()
+
+        # Print out all the dictionaries as JavaScript strings.
+        # Could just print(dict) but that is not human-readable
+        dicts = ( [ self.basetypes,     'basetypes' ],
+                  [ self.consts,        'consts' ],
+                  [ self.enums,         'enums' ],
+                  [ self.flags,         'flags' ],
+                  [ self.funcpointers,  'funcpointers' ],
+                  [ self.protos,        'protos' ],
+                  [ self.structs,       'structs' ],
+                  [ self.handles,       'handles' ],
+                  [ self.defines,       'defines' ],
+                  [ self.typeCategory,  'typeCategory' ],
+                  [ self.alias,         'alias' ],
+                  [ self.nonexistent,   'nonexistent' ],
+                )
+
+        for (dict, name) in dicts:
+            self.writeDict(dict, name)
+
+        # Dictionary containing the relationships of a type
+        # (e.g. a dictionary with each related type as keys).
+        write(self.beginDict('mapDict'), file=self.outFile)
+        for baseType in sorted(self.mapDict):
+            # Not actually including the relationships yet
+            write(f'{enquote(baseType)} : undefined,',
+                file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        # List of included feature names
+        self.writeList(sorted(self.features), 'features')
+
+        # Generate feature <-> interface mappings
+        for feature in self.features:
+            self.mapInterfaces(feature)
+
+        # Write out the reverse map from APIs to requiring features
+        write(self.beginDict('requiredBy'), file=self.outFile)
+        for api in sorted(self.apimap):
+            # Sort requirements by first feature in each one
+            deps = sorted(self.apimap[api], key = lambda dep: dep[0])
+            reqs = ', '.join('[{}, {}]'.format(undefquote(dep[0]), undefquote(dep[1])) for dep in deps)
+            write('{} : [{}],'.format(enquote(api), reqs), file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        super().endFile()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/json_c_generator.py b/codegen/vulkan/vulkan-docs-next/scripts/json_c_generator.py
new file mode 100644
index 0000000..94f95b1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/json_c_generator.py
@@ -0,0 +1,659 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script generates a .hpp file that can be included in an application
+# to generate json data that can then be used to generate the pipeline cache.
+
+import os
+import re
+import xml.dom.minidom
+from generator import (GeneratorOptions, OutputGenerator, noneStr,
+                       regSortFeatures, write)
+
+copyright = """
+/*
+** Copyright (c) 2020 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+"""
+
+predefinedCode = """
+/********************************************************************************************/
+/** This code is generated. To make changes, please modify the scripts or the relevant xml **/
+/********************************************************************************************/
+
+#pragma once
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <inttypes.h>
+#include <vulkan/vulkan.h>
+#include "vulkan_json_gen.h"
+
+#define MAX_SIZE 255 // We don't expect to write a bigger string at a time.
+#define MAX_JSON_SIZE 1024*1024 // We don't expect the entire JSON file to be bigger than this.
+
+static int s_num_spaces = 0;
+static char s_tempBuf[MAX_SIZE];
+static char s_outBuf[MAX_JSON_SIZE];
+static char *s_writePtr = s_outBuf;
+
+#define _OUT s_tempBuf
+
+#define UPDATE_BUF strncpy(s_writePtr, s_tempBuf, strnlen(s_tempBuf, MAX_SIZE)); s_writePtr += strnlen(s_tempBuf, MAX_SIZE);
+
+// Variadic macro for neat buffer update + print.
+#define vk_json_printf(...) { sprintf(__VA_ARGS__); UPDATE_BUF }
+
+// Helper utility to do indentation in the generated json file.
+#define PRINT_SPACE \
+{ \\
+    int spaces; \\
+    for (spaces = 0; spaces < s_num_spaces; spaces++) \\
+        vk_json_printf(_OUT, " "); \\
+}
+
+
+#define INDENT(sz) s_num_spaces += (sz);
+
+const char* getJSONOutput()
+{
+    return s_outBuf;
+}
+
+void resetJSONOutput(void)
+{
+    memset(s_outBuf, 0x00, MAX_JSON_SIZE);
+    s_writePtr = s_outBuf;
+}
+
+"""
+
+printVal = """
+void print_@name(const @name * obj, const char* s, int commaNeeded) {
+    PRINT_SPACE
+    if (s[0] != 0) {
+        vk_json_printf(_OUT, \"\\\"%s\\\" : FORMAT%s\\n\", s, *obj, commaNeeded ? \",\" : \"\");
+    } else {
+        vk_json_printf(_OUT, \"FORMAT%s\\n", *obj, commaNeeded ? \",\" : \"\");
+    }
+}
+"""
+
+class JSONCGeneratorOptions(GeneratorOptions):
+    """JSONCGeneratorOptions - subclass of GeneratorOptions.
+
+    Adds options used by JSONCOutputGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText="",
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 aliasMacro='',
+                 **kwargs
+                 ):
+
+        GeneratorOptions.__init__(self, **kwargs)
+
+
+class JSONCOutputGenerator(OutputGenerator):
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias         = None
+        self.featureDict       = {}
+        self.vkscFeatureList   = []
+        self.enumNames         = []
+        self.baseTypeDict      = {
+                                  "int32_t"  : "%d",
+                                  "uint32_t" : "%u",
+                                  "uint8_t"  : "%u",
+                                  "uint64_t" : "%\" PRIu64 \"",
+                                  "float"    : "%f",
+                                  "int"      : "%d",
+                                  "double"   : "%lf",
+                                  "int64_t"  : "%\" PRId64 \"",
+                                  "uint16_t" : "%u",
+                                  "char"     : "%c",
+                                  "size_t"   : "%zu"
+                                  }
+
+    def printBaseTypes(self):
+        for baseType in self.baseTypeDict:
+            temp = printVal
+            temp = printVal.replace("@name", baseType)
+            temp = temp.replace("FORMAT", self.baseTypeDict[baseType])
+            write(temp, file=self.outFile)
+
+    def genStructExtensionCode(self):
+       code  = ""
+       code += "void dumpPNextChain(const void* pNext) {\n"
+       code += "      VkBaseInStructure *pBase = (VkBaseInStructure*)pNext;\n"
+       code += "      if (pNext) {\n"
+       code += "          PRINT_SPACE\n"
+       code += "          vk_json_printf(_OUT, \"\\\"pNext\\\":\\n\");\n"
+       code += "          switch (pBase->sType) {\n"
+
+       typesList = self.registry.reg.findall('types')
+       currentExtension = "VK_VERSION_1_0"
+       for types in typesList:
+           typeList = types.findall("type")
+           for type in typeList:
+               if type.get('category') == 'struct' and type.get('structextends') is not None and type.get('name') in self.vkscFeatureList:
+                   members = type.findall('member')
+                   for m in members:
+                       n = type.get('name')
+                       if m.get('values'):
+                           if n in self.featureDict and currentExtension != self.featureDict[n]:
+                               if currentExtension != "VK_VERSION_1_0":
+                                   code += "#endif\n"
+                               currentExtension = self.featureDict[n]
+                               if self.featureDict[n] != "VK_VERSION_1_0":
+                                   code += "#ifdef %s\n" %(currentExtension)
+                           code += "             case %s:" %(m.get('values'))
+                           code += "print_%s(((%s *)pNext), \"%s\", 1);\n" %(n, n, n)
+                           code += "             break;\n"
+
+       if currentExtension != "VK_VERSION_1_0":
+            code += "#endif\n"
+       code += "             default: assert(!\"No structure type matching!\");\n"
+       code += "         }\n"
+       code += "     }\n"
+       code += "  }\n"
+
+       return code
+
+    def createvkscFeatureList(self):
+        for feature in self.registry.reg.findall('feature'):
+            if feature.get('api').find('vulkansc') != -1:
+                # Remove entries that are removed in features in VKSC profile.
+                requiredList = feature.findall("require")
+
+                for requiredItem in requiredList:
+                    typeList = requiredItem.findall("type")
+                    for typeName in typeList:
+                        if typeName.get("name") != "":
+                            self.featureDict[typeName.get("name")] = feature.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+                removeItemList = feature.findall("remove")
+                for removeItem in removeItemList:
+                    removeTypes = removeItem.findall("type")
+                    for item in removeTypes:
+                        if self.vkscFeatureList.count(item.get("name")) > 0:
+                            self.vkscFeatureList.remove(item.get("name"))
+
+        allExtensions = self.registry.reg.findall('extensions')
+        for extensions in allExtensions:
+            extensionList = extensions.findall("extension")
+            for extension in extensionList:
+                if extension.get("supported").find("vulkansc") != -1:
+                    requiredList = extension.findall("require")
+                    for requiredItem in requiredList:
+                        typeList = requiredItem.findall("type")
+                        for typeName in typeList:
+                            self.featureDict[typeName.get("name")] = extension.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+        self.createvkscFeatureList()
+
+        write(copyright, file=self.outFile)
+        write(predefinedCode, file=self.outFile)
+        self.printBaseTypes()
+
+        write(self.genStructExtensionCode(), file=self.outFile)
+
+    def endFile(self):
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text, extension):
+        if extension != "VK_VERSION_1_0":
+            self.sections[section].append("#ifdef %s" %(extension))
+        self.sections[section].append(text)
+        self.feature_not_empty = True
+        if extension != "VK_VERSION_1_0":
+            self.sections[section].append("#endif")
+
+    def genEnumData(self, name, obj):
+        code = ""
+        code += "     if (strncmp(str, \"\", 255)) vk_json_printf(_OUT, \"\\\"%s\\\" : \", str);\n"
+        code += "     vk_json_printf(_OUT, \"\\\"%%s\\\"%%s\\n\", %s_map(*%sobj), commaNeeded ? \",\" : \"\");\n" %(name, obj)
+        return code
+
+    def genEnumCode(self, name):
+        code = ""
+        code += "void print_%s(const %s* obj, const char* str, int commaNeeded) {\n" %(name, name)
+        code += "     PRINT_SPACE\n"
+        code += self.genEnumData(name, "")
+        code += "}\n"
+
+        return code
+
+    def genBasetypeCode(self, str1, str2, name, baseType):
+        code = ""
+        code += "void print_" + name + "(" + str1 + name + str2 + " const char* str, int commaNeeded) {\n"
+        code += "     PRINT_SPACE\n"
+        if name == "VkBool32":
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" : \\\"%s\\\"%s\\n\", str, (*obj == 0) ? (\"VK_FALSE\") : (\"VK_TRUE\"), commaNeeded ? \",\" : \"\");\n"
+        else:
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" : \\\"" + self.baseTypeDict[baseType] + "\\\"%s\\n\", str, *obj, commaNeeded ? \",\" : \"\");\n"
+        code += "}\n"
+        return code
+
+    def genHandleCode(self, str1, str2, name):
+        code = ""
+        code += "void print_%s(%s%s%s const char* str, int commaNeeded) {\n" %(name, str1, name, str2)
+        code += "     (void)%s;\n" %(str2[:-1])
+        code += "     PRINT_SPACE\n"
+        code += "     vk_json_printf(_OUT, \"\\\"%s\\\"%s\\n\", str, commaNeeded ? \",\" : \"\");\n"
+        code += "}\n"
+        return code
+
+    def genBitmaskCode(self, str1, str2, name, mapName):
+        if mapName is not None:
+            code = ""
+            code += "void print_%s(%s%s%s const char* str, int commaNeeded) {\n" %(name, str1, name, str2)
+            code += "     const unsigned int max_bits = 64; \n"
+            code += "     unsigned int _count = 0;\n"
+            code += "     unsigned int checkBit = 1;\n"
+            code += "     unsigned int i = 0;\n"
+            code += "     unsigned int bitCount = 0;\n"
+            code += "     unsigned int n = *obj;\n"
+            code += "     unsigned int b = *obj;\n"
+            code += "     unsigned int res = 0;\n"
+            code += "     PRINT_SPACE\n"
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" : \", str);\n"
+            code += "     while (n) {\n"
+            code += "        n &= (n-1);\n"
+            code += "        _count++;\n"
+            code += "     }\n"
+            code += "     vk_json_printf(_OUT, \"\\\"\");\n"
+            code += "     if (*obj == 0) vk_json_printf(_OUT, \"0\");\n"
+            #We need bitpos here, so just iterate fully.
+            code += "     for (i = 0, bitCount = 0; i < max_bits; i++, checkBit <<= 1) {\n"
+            code += "         res = b & checkBit;\n"
+            code += "         if (res) {\n"
+            code += "             bitCount++;\n"
+            code += "             if (bitCount < _count) {\n"
+            code += "                 vk_json_printf(_OUT, \"%%s | \", %s_map(1<<i));\n" %(mapName)
+            code += "             } else {\n"
+            code += "                 vk_json_printf(_OUT, \"%%s\", %s_map(1<<i));\n" %(mapName)
+            code += "             }\n"
+            code += "         }\n"
+            code += "     }\n"
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\n\", commaNeeded ? \",\" : \"\");\n"
+            code += "}\n"
+
+        else:
+            code = ""
+            code += "void print_%s(%s%s%s const char* str, int commaNeeded) {\n" %(name, str1, name, str2)
+            code += "     PRINT_SPACE\n"
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" : \\\"%d\\\"%s\\n\", str, (int)(*obj), commaNeeded ? \",\" : \"\");\n"
+            code += "}\n"
+
+        return code
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+        body = ""
+
+        category = typeElem.get('category')
+        if category == 'funcpointer':
+            section = 'struct'
+        else:
+            section = category
+
+        extension = "VK_VERSION_1_0"
+        if (name in self.featureDict):
+            extension = self.featureDict[name]
+
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
+        else:
+            if typeElem.get('category') == 'bitmask':
+                for elem in typeElem:
+                    if elem.tag == 'name':
+                        body += self.genBitmaskCode("const ", " * obj,", elem.text, typeElem.get('requires'))
+
+            elif typeElem.get('category') == 'basetype':
+                    body += self.genBasetypeCode("const ", " * obj,", typeElem.find('name').text, typeElem.find('type').text)
+
+            elif typeElem.get('category') == 'handle':
+                    for elem in typeElem:
+                        if elem.tag == 'name':
+                            body += self.genHandleCode("const ", "  * obj,", elem.text)
+            if body:
+                self.appendSection(section, body, extension)
+
+    def paramIsStruct(self, memberType):
+        if str(self.getTypeCategory(memberType)) == 'struct':
+            return 1
+        return 0
+
+    # Helper taken from the validation layers code.
+    def paramIsPointer(self, param):
+        ispointer = False
+        for elem in param:
+            if elem.tag == 'type' and elem.tail is not None and '*' in elem.tail:
+                ispointer = True
+        return ispointer
+
+    # Helper taken from the validation layers code.
+    def paramIsStaticArray(self, param):
+        isstaticarray = 0
+        paramname = param.find('name')
+        if (paramname.tail is not None) and ('[' in paramname.tail) and (']' in paramname.tail):
+            isstaticarray = paramname.tail.count('[')
+            if isstaticarray:
+                arraySize = paramname.tail[1]
+
+        if isstaticarray:
+            return arraySize
+        else:
+            return 0
+
+    def generateStructMembercode(self, param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded):
+        length = ""
+        code = ""
+        comma = "," if isCommaNeeded else ""
+        isArr = param.get('len') is not None
+
+        if param.get('len') is not None:
+            length = str2 + param.get('len')
+
+        if  re.search(r'\d', length) is None: derefPtr = "*"
+        else:                                 derefPtr = ""
+
+        code += "     PRINT_SPACE\n"
+        code += "     vk_json_printf(_OUT, \"\\\"%s\\\" :\");\n" %(memberName)
+
+        if self.paramIsPointer(param): code += str4 + memberName + ") {\n"
+        else:                          code += "     {\n"
+        if isArr:                      code += "         unsigned int i = 0;\n"
+        code += "         vk_json_printf(_OUT, \"\\n\");\n"
+
+        # TODO: With some tweak, we can use the genArrayCode() here.
+        if isArr is True:
+            code += "         PRINT_SPACE\n"
+            code += "         vk_json_printf(_OUT, \"[\\n\");\n"
+            code += "         for (i = 0; i < %s(%s); i++) {\n" %(derefPtr, length)
+            code += "             if (i+1 == %s(%s))\n" %(derefPtr, length)
+            code += "                 print_%s(%s%s[i], \"%s\", 0);\n" %(typeName, str2, memberName, memberName)
+            code += "             else\n"
+            code += "                 print_%s(%s%s[i], \"%s\", 1);\n" %(typeName, str2, memberName, memberName)
+            code += "         }\n"
+            code += "         PRINT_SPACE\n"
+            code += "         vk_json_printf(_OUT, \"]%s\\n\");\n" % comma
+            code += "     }\n"
+        elif self.paramIsPointer(param):
+            code += "         print_%s(*(%s%s), \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+            code += "     }\n"
+
+        else:
+            code += "         print_%s(%s%s, \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+            code += "     }\n"
+
+        if self.paramIsPointer(param):
+            code += "     else \n"
+            code += "     {\n"
+            code += "         vk_json_printf(_OUT, \" \\\"NULL\\\"%s\\n\");\n" % comma
+            code += "     }\n"
+
+        return code
+
+    def genPNextCode(self, str2):
+        code  = ""
+        code += "     if (obj->pNext) {\n"
+        code += "         dumpPNextChain(obj->pNext);\n"
+        code += "     } else {\n"
+        code += "         PRINT_SPACE\n"
+        code += "         vk_json_printf(_OUT, \"\\\"pNext\\\" : \\\"NULL\\\",\\n\");\n"
+        code += "     }\n"
+
+        return code
+
+    # TODO: This may need to be relaxed in the schema. The schema could say array of integers,
+    # but we will print the extra strings to show them
+    def genArrayCode(self, name, typeName, str2, arraySize, needStrPrint, isCommaNeeded):
+            comma = "," if isCommaNeeded else ""
+            code = ""
+            printStr  = "\"\""
+            arraySize = arraySize.replace(')', '')
+            derefPtr = "*"
+            if arraySize.find("VK") != -1 or re.search(r'\d', arraySize) is not None:
+                derefPtr = ""
+
+            code += "     PRINT_SPACE\n"
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" :\");\n" %(name)
+            code += "     if (obj->%s) {\n" %(name)
+            code += "        bool isCommaNeeded = false;\n"
+            code += "        unsigned int i = 0;\n"
+            code += "        vk_json_printf(_OUT, \"\\n\"); PRINT_SPACE\n"
+            code += "        vk_json_printf(_OUT, \"[\\n\");\n"
+            code += "        for (i = 0; i < %s(%s); i++) {\n" %(derefPtr, arraySize)
+            code += "            char tmp[100];\n"
+            
+            # Special case handling for giving unique names for pImmutableSamplers if there are multiple
+            # bindings in the same Descriptor set layout.
+            if name == "pImmutableSamplers":
+                code += "            sprintf(tmp, \"%s_%%u_%%u\", *(%sbinding), i);\n" %(name, str2)
+            else:
+                code += "            sprintf(tmp, \"%s_%%u\", i);\n" %(name)
+
+            code += "            INDENT(4);\n"
+            code += "            isCommaNeeded = (i+1) != %s(%s);\n" %(derefPtr, arraySize)
+            if str(self.getTypeCategory(typeName)) == 'handle':
+                code += "            print_%s(%s%s[i], tmp, isCommaNeeded);\n" %(typeName, str2, name)
+            elif not typeName.startswith("Std"):
+                code += "            print_%s(%s%s[i], %s, isCommaNeeded);\n" %(typeName, str2, name, printStr)
+            code += "            INDENT(-4);\n"
+            code += "        }\n"
+            code += "        PRINT_SPACE\n"
+            code += "        vk_json_printf(_OUT, \"]%s\\n\");\n" %(comma)
+            code += "     } else {\n"
+            code += "         vk_json_printf(_OUT, \" \\\"NULL\\\"%s\\n\");\n" %(comma)
+            code += "     }\n"
+            
+            return code
+
+    # Prints out member name followed by empty string.
+    def genEmptyCode(self, memberName, isCommaNeeded):
+        comma = "," if isCommaNeeded else ""
+        code = ""
+        code +=  "     /** Note: printing just an empty entry here **/\n"
+        code +=  "     PRINT_SPACE"
+        code +=  "    vk_json_printf(_OUT, \"\\\"%s\\\" : \\\"\\\"%s\\n\");\n" %(memberName, comma)
+
+        return code
+
+    def genStructCode(self, param, str1, str2, str3, str4, structName, isCommaNeeded):
+        code = ""
+        memberName = ""
+        typeName = ""
+
+        for elem in param:
+            if elem.text.find('PFN_') != -1:
+                return "     /** Note: Ignoring function pointer (%s). **/\n" %(elem.text)
+
+            if elem.text == 'pNext':
+                return self.genPNextCode(str2)
+
+            if elem.tag == 'name':
+                memberName = elem.text
+
+            if elem.tag == 'type':
+                typeName = elem.text
+
+            # Some arrays have constant sizes.
+            if elem.text.find("VK_") != -1:
+                return self.genArrayCode(memberName, typeName, str2, elem.text, False, isCommaNeeded)
+
+        if self.paramIsStaticArray(param):
+            return self.genArrayCode(memberName, typeName, str2, self.paramIsStaticArray(param), False, isCommaNeeded)
+
+        # If the struct's member is another struct, we need a different way to handle.
+        elif self.paramIsStruct(typeName) == 1:
+            code += self.generateStructMembercode(param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded)
+
+        # Ignore void* data members
+        elif self.paramIsPointer(param) and typeName == 'void':
+            return "     /** Note: Ignoring void* data. **/\n"
+
+        # Handle C style strings
+        elif self.paramIsPointer(param) and param.get('len') is not None and param.get('len').find('null-terminated') != -1:
+            code = "     /** Printing string inline. **/\n"
+            code += "     PRINT_SPACE\n"
+            code += "     vk_json_printf(_OUT, \"\\\"%s\\\" : \\\"%%s\\\",\\n\", (char*)obj->%s);\n" %(memberName, memberName)
+            return code
+
+        #TODO: Handle this path.
+        elif self.paramIsPointer(param) and param.get('len') is not None and param.get('len').find('latexmath') != -1:
+            code = "     /** Skipping %s. **/\n" %(typeName)
+
+        # For pointers where we have the 'len' field, dump them as arrays.
+        elif self.paramIsPointer(param) and param.get('len') is not None and param.get('len').find('null-terminated') == -1 and param.get('len').find('latexmath') == -1:
+            return self.genArrayCode(memberName, typeName, str2, str2+param.get('len')+")", False, isCommaNeeded)
+
+        # If a struct member is just a handle.
+        elif str(self.getTypeCategory(typeName)) == 'handle':
+            return self.genEmptyCode(memberName, isCommaNeeded)
+
+        elif not typeName.startswith("Std"):
+            code += "     print_%s(%s%s, \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+
+        return code
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+        body = ""
+        typeElem = typeinfo.elem
+
+        extension = "VK_VERSION_1_0"
+        if (typeName in self.featureDict):
+            extension = self.featureDict[typeName]
+
+        if alias:
+            body = 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            # The code here is similar to the hpp generator. Hence maintaining similar form.
+            genStr1 = ["const "]
+            genStr2 = ["&obj->" ]
+            genStr3 = [" * obj, const char* s, int commaNeeded) {"]
+            genStr4 = ["     if (obj->"]
+
+            for index in range(len(genStr1)):
+                body += "void print_%s(%s%s%s\n" %(typeName, genStr1[index], typeName, genStr3[index])
+                body += "     (void)s;\n"
+                body += "     PRINT_SPACE\n"
+                body += "     vk_json_printf(_OUT, \"{\\n\");\n"
+                body += "     INDENT(4);\n"
+                body += "\n"
+                count = 0
+                numMembers = len(typeElem.findall('.//member'))
+
+                isCommaNeeded = 1
+                for member in typeElem.findall('.//member'):
+                    count = count + 1
+                    if count == numMembers:
+                        isCommaNeeded = 0
+
+                    body += self.genStructCode(member, genStr1[index], genStr2[index], genStr3[index], genStr4[index], typeName, isCommaNeeded)
+                    body += "\n"
+
+                body += "     INDENT(-4);\n"
+                body += "     PRINT_SPACE\n"
+                body += "     vk_json_printf(_OUT, \"}%s\\n\", commaNeeded ? \",\" : \"\");\n"
+                body += "}\n"
+
+        self.appendSection('struct', body, extension)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+        body = ""
+        section = 'enum'
+
+        extension = "VK_VERSION_1_0"
+        if (groupName in self.featureDict):
+            extension = self.featureDict[groupName]
+        enumType = "uint32_t"
+        bitStr = "1u"
+        if groupElem.get('bitwidth') and (int(groupElem.get('bitwidth')) == 64):
+            enumType = "uint64_t"
+            bitStr = "1ull"
+
+        body += "static const char* %s_map(%s o) {\n" %(groupName, enumType)
+        body += "switch (o) {\n"
+        enums = groupElem.findall('enum')
+
+        for enum in enums:
+            # Avoid having duplicates.
+            if enum.get('name') not in self.enumNames:
+                self.enumNames.append(enum.get('name'))
+
+                if enum.get('value'):
+                    body += "    case %s: return \"%s\";\n" %(enum.get('value'), enum.get('name'))
+
+                elif enum.get('bitpos'):
+                    body += "    case (%s << %s): return \"%s\";\n" %(bitStr, enum.get('bitpos'), enum.get('name'))
+
+                #TODO: Some enums have no offset. How to handle those?
+                elif enum.get('extends') and enum.get("extnumber") and enum.get("offset"):
+                    extNumber = int(enum.get("extnumber"))
+                    offset = int(enum.get("offset"))
+                    enumVal = self.extBase + (extNumber - 1) * self.extBlockSize + offset
+                    body += "    case %s: return \"%s\";\n" %(str(enumVal), enum.get('name'))
+
+        body += "   }\n"
+        body += "   return NULL;\n";
+        body += "}\n"
+        body += self.genEnumCode(groupName)
+
+        self.appendSection(section, body, extension)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/json_generator.py b/codegen/vulkan/vulkan-docs-next/scripts/json_generator.py
new file mode 100644
index 0000000..596afb5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/json_generator.py
@@ -0,0 +1,982 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script generates a .hpp file that can be included in an application
+# to generate json data that can then be used to generate the pipeline cache.
+
+import os
+import re
+from generator import (GeneratorOptions, OutputGenerator, noneStr,
+                       regSortFeatures, write)
+
+copyright = """
+/*
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \\file
+ * \\brief Defines JSON generators for Vulkan structures
+ */
+"""
+
+predefinedCode = """
+/********************************************************************************************/
+/** This code is generated. To make changes, please modify the scripts or the relevant xml **/
+/********************************************************************************************/
+
+#include <iostream>
+#include <map>
+#include <bitset>
+#include <functional>
+#include <sstream>
+#include <cassert>
+#include <cmath>
+#ifndef VULKAN_JSON_CTS
+    #include <vulkan/vulkan.h>
+#endif
+
+#ifdef _WIN32
+	#ifndef WIN32_LEAN_AND_MEAN
+	#define WIN32_LEAN_AND_MEAN
+	#endif
+	#define VC_EXTRALEAN
+	#define NOMINMAX
+	#include <windows.h>
+#endif
+
+namespace vk_json {
+
+static thread_local int s_num_spaces    = 0;
+static thread_local std::stringstream _string_stream;
+
+static void dumpPNextChain(const void* pNext);
+
+// By default, redirect to std::cout. Can stream it to a stringstream if needed.
+//#define   _OUT std::cout
+#define _OUT _string_stream
+
+// Helper utility to do indentation in the generated json file.
+#define PRINT_SPACE for (int k = 0; k < s_num_spaces; k++) _OUT << \" \";
+
+#define INDENT(sz) s_num_spaces += (sz);
+
+#define PRINT_VAL(c) PRINT_SPACE \\
+    if (s != "") {\\
+        _OUT << \"\\\"\" << s << \"\\\"\" << \" : \" << o << (c ? \",\" : \"\") << std::endl; \\
+    } else {\\
+        _OUT << o << (c ? \",\" : \"\") << std::endl; \\
+    }
+
+#define PRINT_STR(c) PRINT_SPACE \\
+    if (s != "") {\\
+        _OUT << \"\\\"\" << s << \"\\\"\" << \" : " << \"\\\"\" << o << \"\\\"\" << (c ? \",\" : \"\") << std::endl; \\
+    } else {\\
+        _OUT << \"\\\"\" << o << \"\\\"\" << (c ? \",\" : \"\") << std::endl; \\
+    }
+
+// To make sure the generated data is consistent across platforms,
+// we typecast to 32-bit and dump the data.
+// The value is not expected to exceed the range.
+static void print_size_t(const size_t* o, const std::string& s, bool commaNeeded=true)
+{
+    PRINT_SPACE
+    _OUT << \"\\\"\" << s << \"\\\"\" << \" : \" << static_cast<%s>(*o) << (commaNeeded ? \",\" : \"\") << std::endl;\\
+}
+static void print_size_t(size_t o, const std::string& s, bool commaNeeded=true)
+{
+    PRINT_SPACE
+    _OUT << \"\\\"\" << s << \"\\\"\" << \" : \" << static_cast<%s>(o) << (commaNeeded ? \",\" : \"\") << std::endl;\\
+}
+"""
+
+headerGuardTop = """#ifndef _VULKAN_JSON_DATA_HPP
+#define _VULKAN_JSON_DATA_HPP
+"""
+
+headerGuardBottom = """#endif // _VULKAN_JSON_DATA_HPP"""
+
+encodeBase64CodeCTS = """
+// Base 64 formatter class from executor/xeTestLogWriter.cpp
+
+class Base64Formatter
+{
+public:
+	const deUint8*	data;
+	int				numBytes;
+
+	Base64Formatter(const deUint8* data_, int numBytes_) : data(data_), numBytes(numBytes_) {}
+};
+
+std::ostream& operator<< (std::ostream& str, const Base64Formatter& fmt)
+{
+	static const char s_base64Table[64] =
+	{
+		'A','B','C','D','E','F','G','H','I','J','K','L','M',
+		'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+		'a','b','c','d','e','f','g','h','i','j','k','l','m',
+		'n','o','p','q','r','s','t','u','v','w','x','y','z',
+		'0','1','2','3','4','5','6','7','8','9','+','/'
+	};
+
+	const deUint8*	data = fmt.data;
+	int				numBytes = fmt.numBytes;
+	int				srcNdx = 0;
+
+	DE_ASSERT(data && (numBytes > 0));
+
+	/* Loop all input chars. */
+	while (srcNdx < numBytes)
+	{
+		int		numRead = de::min(3, numBytes - srcNdx);
+		deUint8	s0 = data[srcNdx];
+		deUint8	s1 = (numRead >= 2) ? data[srcNdx + 1] : 0;
+		deUint8	s2 = (numRead >= 3) ? data[srcNdx + 2] : 0;
+		char	d[4];
+
+		srcNdx += numRead;
+
+		d[0] = s_base64Table[s0 >> 2];
+		d[1] = s_base64Table[((s0 & 0x3) << 4) | (s1 >> 4)];
+		d[2] = s_base64Table[((s1 & 0xF) << 2) | (s2 >> 6)];
+		d[3] = s_base64Table[s2 & 0x3F];
+
+		if (numRead < 3) d[3] = '=';
+		if (numRead < 2) d[2] = '=';
+
+		/* Write data. */
+		str.write(&d[0], sizeof(d));
+	}
+
+	return str;
+}
+
+inline Base64Formatter toBase64(const deUint8* bytes, int numBytes) {return Base64Formatter(bytes, numBytes); }
+
+static void print_void_data(const void * o, int oSize, const std::string& s, bool commaNeeded=true)
+{
+	if (o != NULL && oSize != 0)
+	{
+		PRINT_SPACE _OUT << "\\\"" << s << "\\\"" << " : " << "\\\"" << toBase64((deUint8*)o, oSize) << "\\\"" << (commaNeeded ? "," : "") << std::endl;
+	}
+	else
+	{
+		PRINT_SPACE _OUT << "\\\"" << s << "\\\"" << " : " << "\\\"NULL\\\"" << (commaNeeded ? "," : "") << std::endl;
+	}
+}
+"""
+encodeBase64Code = """
+// Base 64 formatter class from executor/xeTestLogWriter.cpp
+
+class Base64Formatter
+{
+public:
+	const uint8_t*	data;
+	int				numBytes;
+
+	Base64Formatter(const uint8_t* data_, int numBytes_) : data(data_), numBytes(numBytes_) {}
+};
+
+std::ostream& operator<< (std::ostream& str, const Base64Formatter& fmt)
+{
+	static const char s_base64Table[64] =
+	{
+		'A','B','C','D','E','F','G','H','I','J','K','L','M',
+		'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+		'a','b','c','d','e','f','g','h','i','j','k','l','m',
+		'n','o','p','q','r','s','t','u','v','w','x','y','z',
+		'0','1','2','3','4','5','6','7','8','9','+','/'
+	};
+
+	const uint8_t*	data = fmt.data;
+	int				numBytes = fmt.numBytes;
+	int				srcNdx = 0;
+
+	assert(data && (numBytes > 0));
+
+	/* Loop all input chars. */
+	while (srcNdx < numBytes)
+	{
+        #undef min
+		int		numRead = std::min(3, numBytes - srcNdx);
+		uint8_t	s0 = data[srcNdx];
+		uint8_t	s1 = (numRead >= 2) ? data[srcNdx + 1] : 0;
+		uint8_t	s2 = (numRead >= 3) ? data[srcNdx + 2] : 0;
+		char	d[4];
+
+		srcNdx += numRead;
+
+		d[0] = s_base64Table[s0 >> 2];
+		d[1] = s_base64Table[((s0 & 0x3) << 4) | (s1 >> 4)];
+		d[2] = s_base64Table[((s1 & 0xF) << 2) | (s2 >> 6)];
+		d[3] = s_base64Table[s2 & 0x3F];
+
+		if (numRead < 3) d[3] = '=';
+		if (numRead < 2) d[2] = '=';
+
+		/* Write data. */
+		str.write(&d[0], sizeof(d));
+	}
+
+	return str;
+}
+
+inline Base64Formatter toBase64(const uint8_t* bytes, int numBytes) {return Base64Formatter(bytes, numBytes); }
+
+static void print_void_data(const void * o, int oSize, const std::string& s, bool commaNeeded=true)
+{
+	if (o != NULL && oSize != 0)
+	{
+		PRINT_SPACE _OUT << "\\\"" << s << "\\\"" << " : " << "\\\"" << toBase64((uint8_t*)o, oSize) << "\\\"" << (commaNeeded ? "," : "") << std::endl;
+	}
+	else
+	{
+		PRINT_SPACE _OUT << "\\\"" << s << "\\\"" << " : " << "\\\"NULL\\\"" << (commaNeeded ? "," : "") << std::endl;
+	}
+}
+"""
+
+class JSONGeneratorOptions(GeneratorOptions):
+    """JSONGeneratorOptions - subclass of GeneratorOptions.
+
+    Adds options used by JSONOutputGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText="",
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 isCTS = False,
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 aliasMacro='',
+                 vulkanLayer=False,
+                 **kwargs
+                 ):
+
+        GeneratorOptions.__init__(self, **kwargs)
+        self.isCTS = isCTS
+
+        self.vulkanLayer = vulkanLayer
+
+class JSONOutputGenerator(OutputGenerator):
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias         = None
+        self.vkscFeatureList   = []
+        self.vkFeatureLayerList = []
+
+        # Fills in some extensions for exclusion while generating code for layer.
+        self.vkLayerNotReqList = set([""])
+
+        self.platformList      = ["xlib",
+                                  "xlib_xrandr",
+                                  "xcb",
+                                  "wayland",
+                                  "directfb",
+                                  "android",
+                                  "win32",
+                                  "vi",
+                                  "ios",
+                                  "macos",
+                                  "metal",
+                                  "fuchsia",
+                                  "ggp",
+                                  "QNX",
+                                  "provisional"]
+        self.baseTypeList      = ["int32_t",
+                                  "uint32_t",
+                                  "uint8_t",
+                                  "uint64_t",
+                                  "float",
+                                  "int",
+                                  "double",
+                                  "int64_t",
+                                  "uint16_t",
+                                  "char"]
+
+    def printBaseTypes(self):
+        for baseType in self.baseTypeList:
+            printStr = "    PRINT_VAL(commaNeeded)\n"
+
+            # Some special handling needed here.
+            if baseType == 'char':
+                write("static void print_%s(const %s * const* o, const std::string& s, bool commaNeeded=true)\n" %(baseType, self.baseTypeListMap[baseType]) +
+                  "{\n"                                                                                                           						+
+                  "    PRINT_STR(commaNeeded)\n"                                                                                  						+
+                  "}\n"
+                  , file=self.outFile
+                 )
+
+            if self.isCTS and baseType == "float":
+                printStr = "	if (std::isnan(o))\n"
+                printStr +="	{\n"
+                printStr +="		PRINT_SPACE\n"
+                printStr +="		if (s != \"\")\n"
+                printStr +="			_OUT << \"\\\"\" << s << \"\\\"\" << \" : \\\"NaN\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+                printStr +="		else\n"
+                printStr +="			_OUT << \"\\\"NaN\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+                printStr +="	}\n"
+                printStr +="	else\n"
+                printStr +="	{\n"
+                printStr +="		PRINT_VAL(commaNeeded)\n"
+                printStr +="	}\n"
+
+            write("static void print_%s(%s o, const std::string& s, bool commaNeeded=true)\n" %(baseType, self.baseTypeListMap[baseType]) +
+                  "{\n"                                                                                        						 +
+                  printStr                                                                                     						 +
+                  "}\n"
+                  , file=self.outFile
+                  )
+
+            if baseType == 'char':
+                printStr = "    PRINT_STR(commaNeeded)\n"
+
+            if self.isCTS and baseType == "float":
+                printStr = "	if (std::isnan(*o))\n"
+                printStr +="	{\n"
+                printStr +="		PRINT_SPACE\n"
+                printStr +="		if (s != \"\")\n"
+                printStr +="			_OUT << \"\\\"\" << s << \"\\\"\" << \" : \\\"NaN\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+                printStr +="		else\n"
+                printStr +="			_OUT << \"\\\"NaN\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+                printStr +="	}\n"
+                printStr +="	else\n"
+                printStr +="	{\n"
+                printStr +="		PRINT_VAL(commaNeeded)\n"
+                printStr +="	}\n"
+
+            write("static void print_%s(const %s * o, const std::string& s, bool commaNeeded=true)\n" %(baseType, self.baseTypeListMap[baseType]) +
+                  "{\n"                                                                                                						 +
+                  printStr                                                                                             						 +
+                  "}\n"
+                  , file=self.outFile
+                 )
+
+    def createLayerUnusedList(self):
+        allExtensions = self.registry.reg.findall('extensions')
+        for extensions in allExtensions:
+            extensionList = extensions.findall("extension")
+            for extension in extensionList:
+                for platform in self.platformList:
+                    if re.search(platform, extension.get("name"), re.IGNORECASE):
+                        requiredList = extension.findall("require")
+                        for requiredItem in requiredList:
+                            typeList = requiredItem.findall("type")
+                            for typeName in typeList:
+                                if platform == "vi":
+                                    if re.search("NN", extension.get("name")):
+                                        self.vkLayerNotReqList.add(typeName.get("name"))
+                                else:
+                                    self.vkLayerNotReqList.add(typeName.get("name"))
+                        break
+
+        typesList = self.registry.reg.findall('types')
+        for types in typesList:
+            typeList = types.findall("type")
+            for type in typeList:
+                if type.get("name") != "":
+                    cat  = type.get("category")
+                    name = type.get("name")
+                    if cat in {"handle", "bitmask", "basetype", "enum", "struct"}:
+                        for platform in self.platformList:
+                            if re.search(platform, name, re.IGNORECASE):
+                                if platform == "vi":
+                                    if re.search("NN", name):
+                                        self.vkLayerNotReqList.add(name)
+                                else:
+                                    self.vkLayerNotReqList.add(name)
+                                break
+
+
+    def createvkscFeatureList(self):
+        for feature in self.registry.reg.findall('feature'):
+            if feature.get('api').find('vulkansc') != -1:
+                # Remove entries that are removed in features in VKSC profile.
+                requiredList = feature.findall("require")
+
+                for requiredItem in requiredList:
+                    typeList = requiredItem.findall("type")
+                    for typeName in typeList:
+                        if typeName.get("name") != "":
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+                removeItemList = feature.findall("remove")
+                for removeItem in removeItemList:
+                    removeTypes = removeItem.findall("type")
+                    for item in removeTypes:
+                        if self.vkscFeatureList.count(item.get("name")) > 0:
+                            self.vkscFeatureList.remove(item.get("name"))
+
+        allExtensions = self.registry.reg.findall('extensions')
+        for extensions in allExtensions:
+            extensionList = extensions.findall("extension")
+            for extension in extensionList:
+                if extension.get("supported").find("vulkansc") != -1:
+                    requiredList = extension.findall("require")
+                    for requiredItem in requiredList:
+                        typeList = requiredItem.findall("type")
+                        for typeName in typeList:
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+    def printPrototypesAndExtensionDump(self):
+        code = ""
+
+        code += "/*************************************** Begin prototypes ***********************************/\n"
+        if self.vulkanLayer:
+            typesList = self.registry.reg.findall('types')
+            for types in typesList:
+                typeList = types.findall("type")
+                for type in typeList:
+                    if type.get("name") != "":
+                        cat  = type.get("category")
+                        name = type.get("name")
+
+            enumList = self.registry.reg.findall('enums')
+            for enums in enumList:
+                name = enums.get("name")
+        else:
+            typesList = self.registry.reg.findall('types')
+            for types in typesList:
+                typeList = types.findall("type")
+                for type in typeList:
+                    if type.get("name") != "":
+                        cat  = type.get("category")
+                        name = type.get("name")
+
+        code += "/*************************************** End prototypes ***********************************/\n\n"
+        code += "static void dumpPNextChain(const void* pNext) {\n"
+        code += "      VkBaseInStructure *pBase = (VkBaseInStructure*)pNext;\n"
+        code += "      if (pNext) {\n"
+        code += "           PRINT_SPACE\n"
+        code += "           _OUT << \"\\\"pNext\\\":\"<< std::endl;\n\n"
+        code += "          switch (pBase->sType) {\n"
+
+        for type in typeList:
+            if type.get('category') == 'struct' and type.get('structextends') is not None:
+                if (self.vulkanLayer and (type.get('name') not in self.vkLayerNotReqList)) or (not self.vulkanLayer):
+                    members = type.findall('member')
+                    for m in members:
+                            n = type.get('name')
+                            if m.get('values') and (n in self.vkFeatureLayerList):
+                                code += "             case %s:" %(m.get('values'))
+                                code += "print_%s((%s *) pNext, \"%s\", true);\n" %(n, n, n)
+                                code += "             break;\n"
+
+        code += "             default: assert(false); // No structure type matching\n"
+        code += "         }\n"
+        code += "     }\n"
+        code += "  }\n"
+
+        return code
+
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        self.vulkanLayer = genOpts.vulkanLayer
+        if self.vulkanLayer:
+            self.createLayerUnusedList()
+
+        self.createvkscFeatureList()
+
+        self.isCTS = genOpts.isCTS
+
+        self.baseTypeListMap  = {
+                                  "int32_t"   : "deInt32" if self.isCTS else "int32_t",
+                                  "uint32_t"  : "deUint32" if self.isCTS else "uint32_t",
+                                  "uint8_t"   : "deUint8" if self.isCTS else "uint8_t",
+                                  "uint64_t"  : "deUint64" if self.isCTS else "uint64_t",
+                                  "float"     : "float",
+                                  "int"       : "int",
+                                  "double"    : "double",
+                                  "int64_t"   : "deInt64" if self.isCTS else "int64_t",
+                                  "uint16_t"  : "deUint16" if self.isCTS else "uint16_t",
+                                  "char"      : "char"
+                                }
+
+        write(headerGuardTop, file=self.outFile, end='')
+        write(copyright, file=self.outFile)
+        if self.isCTS:
+            write(predefinedCode % ("deUint32", "deUint32"), file=self.outFile)
+        else:
+            write(predefinedCode % ("uint32_t", "uint32_t"), file=self.outFile)
+        self.printBaseTypes()
+        if self.isCTS:
+            write(encodeBase64CodeCTS, file=self.outFile)
+        else:
+            write(encodeBase64Code, file=self.outFile)
+
+    def endFile(self):
+        write(self.printPrototypesAndExtensionDump(), file=self.outFile)
+        write("}//End of namespace vk_json\n", file=self.outFile) # end of namespace
+        write(headerGuardBottom, file=self.outFile, end='') # end of _VULKAN_JSON_DATA_HPP
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text):
+        self.sections[section].append(text)
+        self.feature_not_empty = True
+
+    def genEnumData(self, name, obj):
+        code = ""
+        code += "     if (str != \"\") _OUT << \"\\\"\" << str << \"\\\"\" << \" : \";\n"
+        code += "     if (commaNeeded)\n"
+        code += "         _OUT << \"\\\"\" <<  %s_map[%sobj] << \"\\\",\" << std::endl;\n" %(name, obj)
+        code += "     else\n"
+        code += "         _OUT << \"\\\"\" << %s_map[%sobj] << \"\\\"\" << std::endl;\n" %(name, obj)
+        return code
+
+    def genEnumCode(self, name):
+        code = ""
+        code += "static void print_%s(%s obj, const std::string& str, bool commaNeeded=true) {\n" %(name, name)
+        code += "     PRINT_SPACE\n"
+        code += self.genEnumData(name, "")
+        code += "}\n"
+
+        code += "static void print_%s(const %s * obj, const std::string& str, bool commaNeeded=true) {\n" %(name, name)
+        code += "     PRINT_SPACE\n"
+        code += self.genEnumData(name, "*")
+        code += "}\n"
+
+        return code
+
+    def genBasetypeCode(self, str1, str2, name):
+        code = ""
+        code += "static void print_" + name + "(" + str1 + name + str2 + " const std::string& str, bool commaNeeded=true) {\n"
+        code += "     PRINT_SPACE\n"
+        if name == "VkBool32":
+            code += "     _OUT << \"\\\"\" << str << \"\\\"\" << \" : \" << \"\\\"\" << ((obj == 0) ? (\"VK_FALSE\") : (\"VK_TRUE\")) << \"\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+        else:
+            code += "     _OUT << \"\\\"\" << str << \"\\\"\" << \" : \" << \"\\\"\" << obj << \"\\\"\" << (commaNeeded ? \",\" : \"\") << std::endl;\n"
+        code += "}\n"
+        return code
+
+    def genHandleCode(self, str1, str2, name):
+        code = ""
+        code += "static void print_%s(%s%s%s const std::string& str, bool commaNeeded=true) {\n" %(name, str1, name, str2)
+        code += "     PRINT_SPACE\n"
+        code += "     if (commaNeeded)\n"
+        code += "         _OUT << \"\\\"\" << str << \"\\\"\" << \",\" << std::endl;\n"
+        code += "     else\n"
+        code += "         _OUT << \"\\\"\" << str << \"\\\"\" << std::endl;\n"
+        code += "}\n"
+        return code
+
+    def genBitmaskCode(self, str1, str2, name, mapName):
+        if mapName is not None:
+            code = ""
+            code += "static void print_%s(%s%s%s const std::string& str, bool commaNeeded=true) {\n" %(name, str1, name, str2)
+            code += "     PRINT_SPACE\n"
+            code += "     if (str != \"\") _OUT << \"\\\"\" << str << \"\\\"\" << \" : \";\n"
+            code += "     const int max_bits = 64; // We don't expect the number to be larger.\n"
+            code += "     std::bitset<max_bits> b(obj);\n"
+            code += "     _OUT << " + "\"\\\"\"" + ";\n"
+            code += "     if (obj == 0) _OUT << \"0\";\n"
+            code += "     for (unsigned int i = 0, bitCount = 0; i < b.size(); i++) {\n"
+            code += "         if (b[i] == 1) {\n"
+            code += "             bitCount++;\n"
+            code += "             if (bitCount < b.count())\n"
+            code += "                 _OUT << %s_map[1ULL<<i] << \" | \";\n" %(mapName)
+            code += "             else\n"
+            code += "                 _OUT << %s_map[1ULL<<i];\n" %(mapName)
+            code += "         }\n"
+            code += "     }\n"
+            code += "     if (commaNeeded)\n"
+            code += "       _OUT << \"\\\"\" << \",\";\n"
+            code += "     else\n"
+            code += "       _OUT << \"\\\"\"<< \"\";\n"
+            code += "     _OUT << std::endl;\n"
+            code += "}\n"
+
+        else:
+            code = ""
+            code += "static void print_%s(%s%s%s const std::string& str, bool commaNeeded=true) {\n" %(name, str1, name, str2)
+            code += "     PRINT_SPACE\n"
+            code += "     if (commaNeeded)\n"
+            code += "         _OUT << \"\\\"\" << str << \"\\\"\" << \" : \" << obj << \",\" << std::endl;\n"
+            code += "     else\n"
+            code += "         _OUT << \"\\\"\" << str << \"\\\"\" << \" : \" << obj << std::endl;\n"
+            code += "}\n"
+
+        return code
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+        body = ""
+        
+        self.vkFeatureLayerList.append(name);
+
+        category = typeElem.get('category')
+        if category == 'funcpointer':
+            section = 'struct'
+        else:
+            section = category
+
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
+        else:
+            if typeElem.get('category') == 'bitmask':
+                for elem in typeElem:
+                    if elem.tag == 'name':
+                        body += self.genBitmaskCode("", " obj,", elem.text, typeElem.get('requires'))
+                        body += self.genBitmaskCode("const ", " * obj,", elem.text, typeElem.get('requires'))
+
+            elif typeElem.get('category') == 'basetype':
+                    for elem in typeElem:
+                        if elem.tag == 'name':
+                            body += self.genBasetypeCode("", " obj,", elem.text)
+                            body += self.genBasetypeCode("const ", " * obj,", elem.text)
+
+            elif typeElem.get('category') == 'handle':
+                    for elem in typeElem:
+                        if elem.tag == 'name':
+                            body += self.genHandleCode("", " obj,", elem.text)
+                            body += self.genHandleCode("const ", " * obj,", elem.text)
+            if body:
+                self.appendSection(section, body)
+
+    def paramIsStruct(self, memberType):
+        if str(self.getTypeCategory(memberType)) == 'struct':
+            return 1
+        return 0
+
+    # Helper taken from the validation layers code.
+    def paramIsPointer(self, param):
+        ispointer = False
+        for elem in param:
+            if elem.tag == 'type' and elem.tail is not None and '*' in elem.tail:
+                ispointer = True
+        return ispointer
+
+    # Helper taken from the validation layers code.
+    def paramIsStaticArray(self, param):
+        isstaticarray = 0
+        paramname = param.find('name')
+        if (paramname.tail is not None) and ('[' in paramname.tail) and (']' in paramname.tail):
+            isstaticarray = paramname.tail.count('[')
+            if isstaticarray:
+                arraySize = paramname.tail[1]
+
+        if isstaticarray:
+            return arraySize
+        else:
+            return 0
+
+    def generateStructMembercode(self, param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded):
+        length = ""
+        code = ""
+        isArr = param.get('len') is not None
+
+        if param.get('len') is not None:
+            length = str2 + param.get('len') + ")"
+        length = length.replace(')', '')
+        length = length.replace(',1', '')
+
+        code += "     PRINT_SPACE\n"
+        code += "     _OUT << \"\\\"%s\\\": \" << std::endl;\n" %(memberName)
+
+        if self.paramIsPointer(param): code += str4 + memberName + ") {\n"
+        else:                          code += "     {\n"
+
+        # TODO: With some tweak, we can use the genArrayCode() here.
+        if isArr is True:
+            code += "         PRINT_SPACE\n"
+            code += "         _OUT << \"[\" << std::endl;\n"
+            code += "         for (unsigned int i = 0; i < %s; i++) {\n" %(length)
+            code += "           if (i+1 == %s)\n" %(length)
+            code += "               print_%s(%s%s[i], \"%s\", 0);\n" %(typeName, str2, memberName, memberName)
+            code += "           else\n"
+            code += "               print_%s(%s%s[i], \"%s\", 1);\n" %(typeName, str2, memberName, memberName)
+            code += "         }\n"
+            code += "         PRINT_SPACE\n"
+            if isCommaNeeded:
+                code += "         _OUT << \"],\" << std::endl;\n"
+            else:
+                code += "         _OUT << \"]\" << std::endl;\n"
+            code += "    }\n"
+        else:
+            if (typeName == "VkAccelerationStructureGeometryKHR"):
+                code += "           print_%s(*%s%s, \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+            else:
+                code += "           print_%s(%s%s, \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+            code += "     }\n"
+
+        if self.paramIsPointer(param):
+            code += "     else\n"
+            code += "     {\n"
+            if isCommaNeeded:
+                code += "         PRINT_SPACE _OUT << \"\\\"NULL\\\"\"<< \",\"<< std::endl;\n"
+            else:
+                code += "         PRINT_SPACE _OUT << \"\\\"NULL\\\"\"<< \"\"<< std::endl;\n"
+            code += "     }\n"
+
+        return code
+
+    def genPNextCode(self, str2):
+        code  = ""
+        code += "      if (%spNext) {\n" %(str2)
+        code += "         dumpPNextChain(%spNext);\n" %(str2)
+        code += "      } else {\n"
+        code += "         PRINT_SPACE\n"
+        code += "         _OUT << \"\\\"pNext\\\":\" << \"\\\"NULL\\\"\"<< \",\"<< std::endl;\n"
+        code += "     }\n"
+
+        return code
+
+    # Prints out member name followed by empty string.
+    def genEmptyCode(self, memberName, str2, isCommaNeeded):
+        code = ""
+        if not self.isCTS:
+            code +=  "     /** Note: printing just an empty entry here **/\n"
+        else:
+            code +=  "     // CTS : required value\n"
+        code +=  "     PRINT_SPACE"
+        if isCommaNeeded:
+            if self.isCTS and (memberName == "module" or memberName == "layout" or memberName == "renderPass" or memberName == "conversion"):
+                code +=  "    _OUT << \"\\\"\" << \"%s\" << \"\\\"\" << \" : \" << %s%s.getInternal() << \",\" << std::endl;\n" %(memberName, str2, memberName)
+            else:
+                code +=  "    _OUT << \"\\\"\" << \"%s\" << \"\\\"\" << \" : \" << \"\\\"\" << \"\\\",\" << std::endl;\n" %(memberName)
+        else:
+            if self.isCTS and (memberName == "module" or memberName == "layout" or memberName == "renderPass" or memberName == "conversion"):
+                code +=  "    _OUT << \"\\\"\" << \"%s\" << \"\\\"\" << \" : \" << %s%s.getInternal() << std::endl;\n" %(memberName, str2, memberName)
+            else:
+                code +=  "    _OUT << \"\\\"\" << \"%s\" << \"\\\"\" << \" : \" << \"\\\"\" << \"\\\"\" << std::endl;\n" %(memberName)
+        return code
+
+    def genArrayCode(self, structName, name, typeName, str2, arraySize, needStrPrint, isArrayType, isCommaNeeded):
+            comma = "," if isCommaNeeded else ""
+            code = ""
+            arraySize = arraySize.replace(')', '')
+            needsTmp = needStrPrint or (str(self.getTypeCategory(typeName)) == 'handle')
+            
+            if needStrPrint: printStr = "tmp.str()"
+            else:            printStr = "\"\""
+
+            code += "     PRINT_SPACE\n"
+            code += "     _OUT << \"\\\"%s\\\":\" << std::endl;\n" %(name)
+            code += "     PRINT_SPACE\n"
+            if not isArrayType:
+                code += "     if (%s%s) {\n" %(str2, name)
+            code += "       _OUT << \"[\" << std::endl;\n"
+            code += "       for (unsigned int i = 0; i < %s; i++) {\n" %(arraySize)
+            if self.isCTS and (structName == "VkPipelineLayoutCreateInfo" or structName == "VkDescriptorSetLayoutBinding"):
+                code += "           bool isCommaNeeded = (i+1) != %s;\n" %(arraySize)
+                code += "           if (isCommaNeeded)\n"
+                code += "           {\n"
+                code += "               PRINT_SPACE\n"
+                code += "               _OUT << %s%s[i].getInternal() << \",\" << std::endl;\n" %(str2, name)
+                code += "           }\n"
+                code += "           else\n"
+                code += "           {\n"
+                code += "               PRINT_SPACE\n"
+                code += "               _OUT << %s%s[i].getInternal() << std::endl;\n" %(str2, name)
+                code += "           }\n"
+            else:
+                if needsTmp:
+                    code += "           std:: stringstream tmp;\n"
+
+                    # Special case handling for giving unique names for pImmutableSamplers if there are multiple
+                    # bindings in the same Descriptor set layout.
+                    if name == "pImmutableSamplers":
+                        code += "           tmp << \"%s\" << \"_\" << (%sbinding) << \"_\" << i;\n" %(name, str2)
+                    else:
+                        code += "           tmp << \"%s\" << \"_\" << i;\n" %(name)
+
+                code += "           bool isCommaNeeded = (i+1) != %s;\n" %(arraySize)
+
+                if str(self.getTypeCategory(typeName)) == 'handle':
+                    code += "           print_%s(%s%s[i], tmp.str(), isCommaNeeded);\n" %(typeName, str2, name)
+                else:
+                    if self.isCTS and name == "pipelineIdentifier":
+                        code += "           print_uint32_t((%s)%s%s[i], %s, isCommaNeeded);\n" %(self.baseTypeListMap["uint32_t"], str2, name, printStr)
+                    else:
+                        code += "           print_%s(%s%s[i], %s, isCommaNeeded);\n" %(typeName, str2, name, printStr)
+            code += "       }\n"
+            code += "       PRINT_SPACE\n"
+            code += "       _OUT << \"]\" << \"%s\" << std::endl;\n" %(comma)
+            if not isArrayType == True:
+                code += "     } else {\n"
+                code += "       _OUT << \"\\\"NULL\\\"\" << \"%s\" << std::endl;\n" %(comma)
+                code += "     }\n"
+            return code
+
+    def genStructCode(self, param, str1, str2, str3, str4, structName, isCommaNeeded):
+        code = ""
+        memberName = ""
+        typeName = ""
+
+        for elem in param:
+            if elem.text.find('PFN_') != -1:
+                return "     /** Note: Ignoring function pointer (%s). **/\n" %(elem.text)
+
+            if elem.text == 'pNext':
+                return self.genPNextCode(str2)
+
+            if elem.tag == 'name':
+                memberName = elem.text
+
+            if elem.tag == 'type':
+                typeName = elem.text
+
+            # Some arrays have constant sizes.
+            if elem.text.find("VK_") != -1:
+                return self.genArrayCode(structName, memberName, typeName, str2, elem.text, False, True, isCommaNeeded)
+
+        if self.paramIsStaticArray(param):
+            return self.genArrayCode(structName, memberName, typeName, str2, self.paramIsStaticArray(param), False, True, isCommaNeeded)
+
+        # If the struct's member is another struct, we need a different way to handle.
+        elif self.paramIsStruct(typeName) == 1:
+            code += self.generateStructMembercode(param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded)
+
+        # Ignore void* data members
+        elif self.paramIsPointer(param) and typeName == 'void':
+            if structName == "VkSpecializationInfo":
+                    return "     print_void_data(%s%s, int(%sdataSize), \"%s\", 0);\n" %(str2, memberName, str2, memberName)
+            if self.isCTS:
+                if structName == "VkPipelineCacheCreateInfo":
+                    return "     print_void_data(%s%s, int(%sinitialDataSize), \"%s\", 0);\n" %(str2, memberName, str2, memberName)
+            return "     /** Note: Ignoring void* data. **/\n"
+
+        # For pointers where we have the 'len' field, dump them as arrays.
+        elif self.paramIsPointer(param) and param.get('len') is not None and param.get('len').find('null-terminated') == -1 and param.get('len').find('latexmath') == -1:
+            if memberName == "versionData":
+                return self.genArrayCode(structName, memberName, typeName, str2, param.get('len')+")", False, False, isCommaNeeded)
+            else:
+                return self.genArrayCode(structName, memberName, typeName, str2, str2+param.get('len')+")", False, False, isCommaNeeded)
+
+        # Special handling for VkPipelineMultisampleStateCreateInfo::pSampleMask
+        elif typeName in "VkSampleMask":
+            code += "     %s sampleMaskSize = ((%srasterizationSamples + 31) / 32);\n" % (self.baseTypeListMap["uint32_t"], str2)
+            code += self.genArrayCode(structName, memberName, "uint32_t", str2, "sampleMaskSize", False, False, isCommaNeeded)
+            return code
+
+        # If a struct member is just a handle.
+        elif str(self.getTypeCategory(typeName)) == 'handle':
+            return self.genEmptyCode(memberName, str2, isCommaNeeded)
+
+        else:
+            code += "     print_%s(%s%s, \"%s\", %s);\n" %(typeName, str2, memberName, memberName, str(isCommaNeeded))
+
+        return code
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+        body = ""
+        typeElem = typeinfo.elem
+
+        if alias:
+            body = 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            genStr1 = [""   , "const "]
+            genStr2 = ["obj.", "obj->" ]
+            genStr3 = [" obj, const std::string& s, bool commaNeeded=true) {" , " * obj, const std::string& s, bool commaNeeded=true) {"]
+            genStr4 = ["     if (obj.", "     if (obj->"]
+
+            for index in range(len(genStr1)):
+                body += "static void print_%s(%s%s%s\n" %(typeName, genStr1[index], typeName, genStr3[index])
+                body += "     PRINT_SPACE\n"
+                body += "     _OUT << \"{\" << std::endl;\n"
+                body += "     INDENT(4);\n"
+                body += "\n"
+                count = 0
+                numMembers = len(typeElem.findall('.//member'))
+
+                isCommaNeeded = 1
+                for member in typeElem.findall('.//member'):
+                    count = count + 1
+                    if count == numMembers:
+                        isCommaNeeded = 0
+
+                    body += self.genStructCode(member, genStr1[index], genStr2[index], genStr3[index], genStr4[index], typeName, isCommaNeeded)
+                    body += "\n"
+
+                body += "     INDENT(-4);\n"
+                body += "     PRINT_SPACE\n"
+                body += "     if (commaNeeded)\n"
+                body += "         _OUT << \"},\" << std::endl;\n"
+                body += "     else\n"
+                body += "         _OUT << \"}\" << std::endl;\n"
+                body += "}\n"
+
+        self.appendSection('struct', body)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+        body = ""
+        section = 'enum'
+
+        body += "static std::map<%s, std::string> %s_map = {\n" %(self.baseTypeListMap["uint64_t"], groupName)
+        enums = groupElem.findall('enum')
+
+        for enum in enums:
+            if enum.get('value'):
+                body += "    std::make_pair(%s, \"%s\"),\n" %(enum.get('value'), enum.get('name'))
+
+            elif enum.get('bitpos'):
+                body += "    std::make_pair(1ULL << %s, \"%s\"),\n" %(enum.get('bitpos'), enum.get('name'))
+
+            #TODO: Some enums have no offset. How to handle those?
+            elif enum.get('extends') and enum.get("extnumber") and enum.get("offset"):
+                extNumber = int(enum.get("extnumber"))
+                offset = int(enum.get("offset"))
+                enumVal = self.extBase + (extNumber - 1) * self.extBlockSize + offset
+                body += "    std::make_pair(%s, \"%s\"),\n" %(str(enumVal), enum.get('name'))
+
+        body += "};\n"
+        body += self.genEnumCode(groupName)
+
+        self.appendSection(section, body)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/json_h_generator.py b/codegen/vulkan/vulkan-docs-next/scripts/json_h_generator.py
new file mode 100644
index 0000000..6c5715d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/json_h_generator.py
@@ -0,0 +1,196 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script generates a .hpp file that can be included in an application
+# to generate json data that can then be used to generate the pipeline cache.
+
+import os
+import re
+import xml.dom.minidom
+from generator import (GeneratorOptions, OutputGenerator, noneStr,
+                       regSortFeatures, write)
+
+copyright = """
+/*
+** Copyright (c) 2020 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+"""
+
+
+predefinedCode = """
+/********************************************************************************************/
+/** This code is generated. To make changes, please modify the scripts or the relevant xml **/
+/********************************************************************************************/
+
+#pragma once
+
+#include <stdio.h>
+#include <vulkan/vulkan.h>
+
+const char* getJSONOutput(void);
+void resetJSONOutput(void);
+"""
+
+class JSONHeaderGeneratorOptions(GeneratorOptions):
+    """JSONHeaderGeneratorOptions - subclass of GeneratorOptions.
+
+    Adds options used by JSONHeaderOutputGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText="",
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 aliasMacro='',
+                 **kwargs
+                 ):
+
+        GeneratorOptions.__init__(self, **kwargs)
+
+
+class JSONHeaderOutputGenerator(OutputGenerator):
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias         = None
+        self.featureDict       = {}
+        self.vkscFeatureList   = []
+        self.baseTypeList      = ["int32_t",
+                                  "uint32_t",
+                                  "uint8_t",
+                                  "uint64_t",
+                                  "float",
+                                  "int",
+                                  "double",
+                                  "int64_t",
+                                  "uint16_t",
+                                  "char"]
+
+
+    def createvkscFeatureList(self):
+        for feature in self.registry.reg.findall('feature'):
+            if feature.get('api').find('vulkansc') != -1:
+                # Remove entries that are removed in features in VKSC profile.
+                requiredList = feature.findall("require")
+
+                for requiredItem in requiredList:
+                    typeList = requiredItem.findall("type")
+                    for typeName in typeList:
+                        if typeName.get("name") != "":
+                            self.featureDict[typeName.get("name")] = feature.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+                removeItemList = feature.findall("remove")
+                for removeItem in removeItemList:
+                    removeTypes = removeItem.findall("type")
+                    for item in removeTypes:
+                        if self.vkscFeatureList.count(item.get("name")) > 0:
+                            self.vkscFeatureList.remove(item.get("name"))
+                            
+        allExtensions = self.registry.reg.findall('extensions')
+        for extensions in allExtensions:
+            extensionList = extensions.findall("extension")
+            for extension in extensionList:
+                if extension.get("supported").find("vulkansc") != -1:
+                    requiredList = extension.findall("require")
+                    for requiredItem in requiredList:
+                        typeList = requiredItem.findall("type")
+                        for typeName in typeList:
+                            self.featureDict[typeName.get("name")] = extension.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+    def printPrototypes(self):
+       code = ""
+
+       code += "/*************************************** Begin prototypes ***********************************/\n"
+       typesList = self.registry.reg.findall('types')
+       currentExtension = "VK_VERSION_1_0"
+       for types in typesList:
+            typeList = types.findall("type")
+
+            for type in typeList:
+                if type.get("name") != "":
+                    cat  = type.get("category")
+                    name = type.get("name")
+
+                    if cat in {"handle", "bitmask", "basetype", "enum", "struct"} and name in self.vkscFeatureList:
+                        if name in self.featureDict and currentExtension != self.featureDict[name]:
+                            if currentExtension != "VK_VERSION_1_0":
+                                code += "#endif\n"
+                            currentExtension = self.featureDict[name]
+                            if self.featureDict[name] != "VK_VERSION_1_0":
+                                code += "#ifdef %s\n" %(currentExtension)
+                        code += "void print_%s(const %s* obj, const char* str, int commaNeeded);\n" %(name, name)
+                        
+       if currentExtension != "VK_VERSION_1_0":
+            code += "#endif\n"
+       code += "/*************************************** End prototypes ***********************************/\n\n"
+       
+       return code
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        self.createvkscFeatureList()
+
+        write(copyright, file=self.outFile)
+        write(predefinedCode, file=self.outFile)
+
+        write(self.printPrototypes(), file=self.outFile)
+        write("void dumpPNextChain(const void* pNext);\n", file=self.outFile)
+
+    def endFile(self):
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/json_parser.py b/codegen/vulkan/vulkan-docs-next/scripts/json_parser.py
new file mode 100644
index 0000000..680bafb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/json_parser.py
@@ -0,0 +1,1020 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script generates a .hpp file that creates VK structures from a
+# json file.
+
+import os
+import re
+import xml.dom.minidom
+from generator import (GeneratorOptions, OutputGenerator, noneStr,
+                       regSortFeatures, write)
+
+copyright = """
+/*
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \\file
+ * \\brief Defines JSON generators for Vulkan structures
+ */
+"""
+
+predefinedCode = """
+/********************************************************************************************/
+/** This code is generated. To make changes, please modify the scripts or the relevant xml **/
+/********************************************************************************************/
+
+#pragma once
+#include <iostream>
+#include <map>
+#include <cinttypes>
+#include <algorithm>
+#include <bitset>
+#include <functional>
+#include <sstream>
+#include <cinttypes>
+#include <json/json.h>
+
+namespace vk_json_parser {
+
+template <typename T1, typename T2>
+class GlobalMem {
+    static constexpr size_t MAX_ALIGNMENT = alignof(std::max_align_t);
+
+    void grow(T1 size = 0) {
+        //push_back new single vector of size m_tabSize onto vec
+        void * p = calloc(size > m_tabSize ? size : m_tabSize, sizeof(T2));
+        assert(p);
+        m_vec.push_back(p);
+        m_pointer = 0U;
+    }
+    void * alloc(T1 size) {
+        // Align to the next multiple of MAX_ALIGNMENT.
+        size = (size + static_cast<T1>(MAX_ALIGNMENT) - 1) & ~(static_cast<T1>(MAX_ALIGNMENT) - 1);
+
+        void* result = static_cast<%s *>(m_vec.back()) + m_pointer;
+        m_pointer += size;
+        return result;
+    }
+public:
+
+    GlobalMem(T1 tabSize_ = 32768U)
+      : m_tabSize(tabSize_), m_pointer(0U)
+    {
+    }
+
+    void* allocate (T1 size)
+    {
+        if (m_vec.empty() || m_pointer+size >= m_tabSize) {
+            grow();
+        }
+        return alloc(size);
+    }
+
+    void* allocate (T1 count, T1 size)
+    {
+        T1 totalSize = count * size;
+        if (m_vec.empty() || m_pointer+totalSize >= m_tabSize)
+        {
+            grow(totalSize);
+        }
+        return alloc(totalSize);
+    }
+    // deallocates all memory. Any use of earlier allocated elements is forbidden
+    void clear()
+    {
+        // remove all vectors from vec excluding the one with index 0
+        for (size_t i=1 ; i<m_vec.size(); i++) {
+            free(m_vec[i]);
+        }
+        if (!m_vec.empty()) {
+            m_vec.resize(1);
+        }
+        m_pointer = 0;
+    }
+
+    ~GlobalMem()
+    {
+        clear();
+        if (!m_vec.empty()) {
+            free(m_vec[0]);
+        }
+    }
+
+private:
+    std::vector< void * > m_vec;
+    T1 m_tabSize;
+    T1 m_pointer;
+};
+
+static thread_local GlobalMem<%s, %s> s_globalMem(32768U);
+
+// To make sure the generated data is consistent across platforms,
+// we typecast to 32-bit.
+static void parse_size_t(const char* s, Json::Value& obj, size_t& o)
+{
+    %s _res = static_cast<%s>(obj.asUInt());
+    o = _res;
+}
+
+static void parse_char(const char* s, Json::Value& obj, char o[])
+{
+    std::string _res = obj.asString();
+    memcpy((void*)o, _res.c_str(), static_cast<%s>(_res.size()));
+    o[_res.size()] = \'\\0\';
+}
+static void parse_char(const char* s, Json::Value& obj, const char* const*)
+{
+}
+static void parse_char(const char* s, Json::Value& obj, const char** o)
+{
+    std::string _res = obj.asString();
+    char *writePtr = (char *)s_globalMem.allocate(static_cast<%s>(_res.size()) + 1);
+    memcpy((void*)writePtr, _res.c_str(), _res.size());
+    writePtr[_res.size()] = \'\\0\';
+    *o = writePtr;
+}
+
+"""
+
+base64DecodeCodeCTS = """
+// base64 encoder taken from executor/xeTestResultParser.cpp
+
+static
+std::vector<deUint8> base64decode(const std::string encoded)
+{
+	int base64DecodeOffset = 0;
+	std::vector<deUint8> result;
+
+	for (std::size_t inNdx = 0; inNdx < encoded.size(); inNdx++)
+	{
+		deUint8	byte = encoded[inNdx];
+		deUint8	decodedBits = 0;
+
+		if (de::inRange<deUint8>(byte, 'A', 'Z'))
+			decodedBits = (deUint8)(byte - 'A');
+		else if (de::inRange<deUint8>(byte, 'a', 'z'))
+			decodedBits = (deUint8)(('Z' - 'A' + 1) + (byte - 'a'));
+		else if (de::inRange<deUint8>(byte, '0', '9'))
+			decodedBits = (deUint8)(('Z' - 'A' + 1) + ('z' - 'a' + 1) + (byte - '0'));
+		else if (byte == '+')
+			decodedBits = ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 1);
+		else if (byte == '/')
+			decodedBits = ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 2);
+		else
+			continue; // Not an B64 input character.
+
+		int phase = base64DecodeOffset % 4;
+
+		if (phase == 0)
+			result.resize(result.size() + 3, 0);
+
+		//		if ((int)image->data.size() < (base64DecodeOffset >> 2) * 3 + 3)
+		//			throw TestResultParseError("Malformed base64 data");
+		deUint8* outPtr = result.data() + (base64DecodeOffset >> 2) * 3;
+
+		switch (phase)
+		{
+		case 0: outPtr[0] |= (deUint8)(decodedBits << 2);																								break;
+		case 1: outPtr[0] = (deUint8)(outPtr[0] | (deUint8)(decodedBits >> 4));	outPtr[1] = (deUint8)(outPtr[1] | (deUint8)((decodedBits & 0xF) << 4));	break;
+		case 2: outPtr[1] = (deUint8)(outPtr[1] | (deUint8)(decodedBits >> 2));	outPtr[2] = (deUint8)(outPtr[2] | (deUint8)((decodedBits & 0x3) << 6));	break;
+		case 3: outPtr[2] |= decodedBits;																												break;
+		default:
+			DE_ASSERT(false);
+		}
+
+		base64DecodeOffset++;
+	}
+	return result;
+}
+
+static void parse_void_data(const void* s, Json::Value& obj, void* o, int oSize)
+{
+	std::vector<deUint8> data;
+	if (obj.isString())
+	{
+		data = base64decode(obj.asString());
+	}
+	else
+	{
+		data.resize(oSize);
+		for (int i = 0; i < std::min(oSize, (int)obj.size()); i++)
+		{
+			parse_uint8_t("pData", obj[i], const_cast<deUint8&>(data[i]));
+		}
+	}
+	memcpy(o, data.data(), oSize);
+}
+
+"""
+
+base64DecodeCode = """
+// base64 encoder taken from executor/xeTestResultParser.cpp
+
+static
+std::vector<uint8_t> base64decode(const std::string encoded)
+{
+	int base64DecodeOffset = 0;
+	std::vector<uint8_t> result;
+
+	for (std::size_t inNdx = 0; inNdx < encoded.size(); inNdx++)
+	{
+		uint8_t	byte = encoded[inNdx];
+		uint8_t	decodedBits = 0;
+
+        if ('A' <= byte && byte <= 'Z')
+			decodedBits = (uint8_t)(byte - 'A');
+        else if ('a' <= byte && byte <= 'z')
+			decodedBits = (uint8_t)(('Z' - 'A' + 1) + (byte - 'a'));
+        else if ('0' <= byte && byte <= '9')
+			decodedBits = (uint8_t)(('Z' - 'A' + 1) + ('z' - 'a' + 1) + (byte - '0'));
+		else if (byte == '+')
+			decodedBits = ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 1);
+		else if (byte == '/')
+			decodedBits = ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 2);
+		else
+			continue; // Not an B64 input character.
+
+		int phase = base64DecodeOffset % 4;
+
+		if (phase == 0)
+			result.resize(result.size() + 3, 0);
+
+		//		if ((int)image->data.size() < (base64DecodeOffset >> 2) * 3 + 3)
+		//			throw TestResultParseError("Malformed base64 data");
+		uint8_t* outPtr = result.data() + (base64DecodeOffset >> 2) * 3;
+
+		switch (phase)
+		{
+		case 0: outPtr[0] |= (uint8_t)(decodedBits << 2);																								break;
+		case 1: outPtr[0] = (uint8_t)(outPtr[0] | (uint8_t)(decodedBits >> 4));	outPtr[1] = (uint8_t)(outPtr[1] | (uint8_t)((decodedBits & 0xF) << 4));	break;
+		case 2: outPtr[1] = (uint8_t)(outPtr[1] | (uint8_t)(decodedBits >> 2));	outPtr[2] = (uint8_t)(outPtr[2] | (uint8_t)((decodedBits & 0x3) << 6));	break;
+		case 3: outPtr[2] |= decodedBits;																												break;
+		default:
+			assert(false);
+		}
+
+		base64DecodeOffset++;
+	}
+	return result;
+}
+
+static void parse_void_data(const void* s, Json::Value& obj, void* o, int oSize)
+{
+	std::vector<uint8_t> data;
+	if (obj.isString())
+	{
+		data = base64decode(obj.asString());
+	}
+	else
+	{
+		data.resize(oSize);
+		for (int i = 0; i < std::min(oSize, (int)obj.size()); i++)
+		{
+			parse_uint8_t("pData", obj[i], const_cast<uint8_t&>(data[i]));
+		}
+	}
+	memcpy(o, data.data(), oSize);
+}
+
+"""
+
+headerGuardTop = """#ifndef _VULKAN_JSON_PARSER_HPP
+#define _VULKAN_JSON_PARSER_HPP
+"""
+
+headerGuardBottom = """#endif // _VULKAN_JSON_PARSER_HPP"""
+
+class JSONParserOptions(GeneratorOptions):
+    """JSONParserOptions - subclass of GeneratorOptions.
+
+    Adds options used by JSONParserGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText="",
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 isCTS = False,
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 aliasMacro='',
+                 **kwargs
+                 ):
+
+        GeneratorOptions.__init__(self, **kwargs)
+        self.isCTS = isCTS
+
+
+class JSONParserGenerator(OutputGenerator):
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['basetype', 'handle', 'enum',
+                     'group', 'bitmask', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias         = None
+        self.featureDict       = {}
+        self.vkscFeatureList   = []
+        self.constDict         = {}
+        self.baseTypeDict      = {
+                                  "int32_t"  : "obj.asInt()",
+                                  "uint32_t" : "obj.asUInt()",
+                                  "uint8_t"  : "obj.asUInt()",
+                                  "uint64_t" : "obj.asUInt64()",
+                                  "float"    : "obj.asFloat()",
+                                  "int"      : "obj.asInt()",
+                                  "double"   : "obj.asDouble()",
+                                  "int64_t"  : "obj.asInt64()",
+                                  "uint16_t" : "obj.asUInt()",
+                                  "NvSciBufAttrList"  : "obj.asInt()",
+                                  "NvSciBufObj"       : "obj.asInt()",
+                                  "NvSciSyncAttrList" : "obj.asInt()",
+                                  "NvSciSyncObj"      : "obj.asInt()"
+                                  }
+
+    def parseBaseTypes(self):
+        for baseType in self.baseTypeDict:
+            printStr = self.baseTypeDict[baseType]
+            if baseType == "uint8_t" or baseType == "uint16_t" or baseType.startswith('NvSci'):
+                write("static void parse_%s(const char* s, Json::Value& obj, %s& o)\n" %(baseType, self.baseTypeListMap[baseType]) +
+                    "{\n"
+                    "     o = static_cast<%s>(%s);\n" %(self.baseTypeListMap[baseType],printStr)                                                                                   +
+                    "}\n"
+                    , file=self.outFile
+                )
+            else:
+                code = ""
+                code += "static void parse_%s(const char* s, Json::Value& obj, %s& o)\n" %(baseType, self.baseTypeListMap[baseType])
+                code += "{\n"
+                if baseType in self.constDict:
+                    code += "     if (obj.isString())\n"
+                    for index, enumValue in enumerate(self.constDict[baseType]):
+                        code += "          %sif (obj.asString() == \"%s\")\n" %("else " if index > 0 else "", enumValue[0])
+                        code += "               o = %s;\n" %(enumValue[1])
+                    if baseType == "float":
+                        code += "          else if (obj.asString() == \"NaN\")\n"
+                        code += "               o = std::numeric_limits<float>::quiet_NaN();\n"
+                    code += "          else\n"
+                    code += "               assert(false);\n"
+                    code += "     else\n"
+                    code += "          o = %s;\n" %(printStr)
+                else:
+                    code += "     o = %s;\n" %(printStr)
+                code += "}\n"
+                write(code, file=self.outFile)
+
+    def createvkscFeatureList(self):
+        for feature in self.registry.reg.findall('feature'):
+            if feature.get('api').find('vulkansc') != -1:
+                # Remove entries that are removed in features in VKSC profile.
+                requiredList = feature.findall("require")
+
+                for requiredItem in requiredList:
+                    typeList = requiredItem.findall("type")
+                    for typeName in typeList:
+                        if typeName.get("name") != "":
+                            self.featureDict[typeName.get("name")] = feature.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+                removeItemList = feature.findall("remove")
+                for removeItem in removeItemList:
+                    removeTypes = removeItem.findall("type")
+                    for item in removeTypes:
+                        if self.vkscFeatureList.count(item.get("name")) > 0:
+                            self.vkscFeatureList.remove(item.get("name"))
+
+        allExtensions = self.registry.reg.findall('extensions')
+        for extensions in allExtensions:
+            extensionList = extensions.findall("extension")
+            for extension in extensionList:
+                if extension.get("supported").find("vulkansc") != -1:
+                    requiredList = extension.findall("require")
+                    for requiredItem in requiredList:
+                        typeList = requiredItem.findall("type")
+                        for typeName in typeList:
+                            self.featureDict[typeName.get("name")] = extension.get("name")
+                            self.vkscFeatureList.append(typeName.get("name"))
+
+    def createConstDict(self):
+        for enums in self.registry.reg.findall('enums'):
+            if enums.get("name") == "API Constants":
+                for enum in enums.findall('enum'):
+                    type = enum.get("type");
+                    if (type):
+                        name = enum.get("name")
+                        value = enum.get("value")
+                        if type not in self.constDict:
+                            self.constDict[type] = [(name, value)]
+                        else:
+                            self.constDict[type].append((name, value))
+
+    def printPrototypes(self):
+       code = ""
+
+       code += "/*************************************** Begin prototypes ***********************************/\n"
+       typesList = self.registry.reg.findall('types')
+       currentExtension = "VK_VERSION_1_0"
+       for types in typesList:
+            typeList = types.findall("type")
+
+            for type in typeList:
+                if type.get("name") != "":
+                    cat  = type.get("category")
+                    name = type.get("name")
+
+                    if cat in {"handle", "bitmask", "basetype", "enum", "struct"} and name in self.vkscFeatureList:
+                        if name in self.featureDict and currentExtension != self.featureDict[name]:
+                            if not self.isCTS and currentExtension != "VK_VERSION_1_0":
+                                code += "#endif\n"
+                            currentExtension = self.featureDict[name]
+                            if self.featureDict[name] != "VK_VERSION_1_0":
+                                if not self.isCTS:
+                                    code += "#ifdef %s\n" %(currentExtension)
+                        code += "static void parse_%s(const char* s, Json::Value& obj, %s& o);\n" %(name, name)
+
+       if currentExtension != "VK_VERSION_1_0":   
+            if not self.isCTS:
+                code += "#endif\n"
+       code += "/*************************************** End prototypes ***********************************/\n\n"
+
+       return code
+
+    def genStructExtensionCode(self):
+       code  = ""
+       code += "static\n"
+       code += "void* parsePNextChain(Json::Value& obj) {\n"
+       code += "      VkBaseInStructure o;\n"
+       code += "      Json::Value& pNextObj = obj[\"pNext\"];\n"
+       code += "      if (pNextObj.empty() || (pNextObj.isString() && pNextObj.asString() == \"NULL\")) return nullptr;\n\n"
+       code += "      parse_VkStructureType(\"sType\", pNextObj[\"sType\"], (o.sType));\n"
+       code += "      void* p = nullptr;\n"
+       code += "      switch (o.sType) {\n"
+
+       typesList = self.registry.reg.findall('types')
+       currentExtension = "VK_VERSION_1_0"
+       for types in typesList:
+           typeList = types.findall("type")
+           for type in typeList:
+               if type.get('category') == 'struct' and type.get('structextends') is not None and type.get('name') in self.vkscFeatureList:
+                   members = type.findall('member')
+                   for m in members:
+                       n = type.get('name')
+                       if m.get('values'):
+                           if n in self.featureDict and currentExtension != self.featureDict[n]:
+                               if not self.isCTS and currentExtension != "VK_VERSION_1_0":
+                                   code += "#endif\n"
+                               currentExtension = self.featureDict[n]
+                               if self.featureDict[n] != "VK_VERSION_1_0":
+                                    if not self.isCTS:
+                                        code += "#ifdef %s\n" %(currentExtension)
+                           code += "             case %s:\n" %(m.get('values'))
+                           code += "             {\n"
+                           code += "                p = s_globalMem.allocate(sizeof(%s));\n" %(n)
+                           code += "                parse_%s(\"\", pNextObj, *((%s*)p));\n" %(n, n)
+                           code += "             }\n"
+                           #code += "print_%s(((%s *)pNext), \"%s\", 1);\n" %(n, n, n)
+                           code += "             break;\n"
+
+       if currentExtension != "VK_VERSION_1_0":
+            if not self.isCTS:
+                code += "#endif\n"
+       code += "             default: {/** **/}\n"
+       code += "     }\n"
+       code += "     return p;\n"
+       code += "  }\n"
+
+       return code
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        self.createvkscFeatureList()
+        self.createConstDict()
+
+        self.isCTS = genOpts.isCTS
+
+        self.baseTypeListMap  = {
+                                  "int32_t"   : "deInt32" if self.isCTS else "int32_t",
+                                  "uint32_t"  : "deUint32" if self.isCTS else "uint32_t",
+                                  "uint8_t"   : "deUint8" if self.isCTS else "uint8_t",
+                                  "uint64_t"  : "deUint64" if self.isCTS else "uint64_t",
+                                  "float"     : "float",
+                                  "int"       : "int",
+                                  "double"    : "double",
+                                  "int64_t"   : "deInt64" if self.isCTS else "int64_t",
+                                  "uint16_t"  : "deUint16" if self.isCTS else "uint16_t",
+                                  "NvSciBufAttrList"  : "vk::pt::NvSciBufAttrList" if self.isCTS else "NvSciBufAttrList",
+                                  "NvSciBufObj"       : "vk::pt::NvSciBufObj" if self.isCTS else "NvSciBufObj",
+                                  "NvSciSyncAttrList" : "vk::pt::NvSciSyncAttrList" if self.isCTS else "NvSciSyncAttrList",
+                                  "NvSciSyncObj"      : "vk::pt::NvSciSyncObj" if self.isCTS else "NvSciSyncObj"
+                                }
+
+        write(headerGuardTop, file=self.outFile, end='')
+        write(copyright, file=self.outFile)
+        write(predefinedCode % (self.baseTypeListMap["uint8_t"],
+                                self.baseTypeListMap["uint32_t"],
+                                self.baseTypeListMap["uint8_t"],
+                                self.baseTypeListMap["uint32_t"],
+                                self.baseTypeListMap["uint32_t"],
+                                self.baseTypeListMap["uint32_t"],
+                                self.baseTypeListMap["uint32_t"]), file=self.outFile)
+
+        self.parseBaseTypes()
+        if self.isCTS:
+            write(base64DecodeCodeCTS, file=self.outFile)
+        else:
+            write(base64DecodeCode, file=self.outFile)
+
+        write(self.printPrototypes(), file=self.outFile)
+
+        write(self.genStructExtensionCode(), file=self.outFile)
+
+    def endFile(self):
+        write("}//End of namespace vk_json_parser\n", file=self.outFile) # end of namespace
+        write(headerGuardBottom, file=self.outFile, end='') # end of _VULKAN_JSON_PARSER_HPP
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text):
+        self.sections[section].append(text)
+        self.feature_not_empty = True
+
+    def genEnumCode(self, name, endIfdef):
+        code = ""
+        code += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(name, name)
+        code += "     std::string _res = obj.asString();\n"
+        code += "     o = (%s)%s_map[std::string(_res)];\n" %(name, name)
+        code += "}\n"
+        if not self.isCTS and endIfdef:
+            code += "#endif\n"
+
+        return code
+
+    def genBasetypeCode(self, str1, str2, name):
+        code = ""
+        code += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(name, name)
+        code += "     std::string _res = obj.asString();\n"
+        if name == "VkBool32":
+            code += "     //VkBool is represented as VK_TRUE and VK_FALSE in the json\n"
+            code += "     o = (_res == \"VK_TRUE\") ? (1) : (0);\n"
+        elif name == "VkDeviceAddress":
+            code += "     sscanf(_res.c_str(), \"%\" SCNu64, &o);\n"
+        elif name == "VkDeviceSize":
+            code += "     if (_res == \"VK_WHOLE_SIZE\")\n"
+            code += "          o = (~0ULL);\n"
+            code += "     else\n"
+            code += "          sscanf(_res.c_str(), \"%\" SCNu64, &o);\n"
+        elif name in ["VkFlags64", "VkPipelineStageFlags2KHR", "VkAccessFlags2KHR", "VkFormatFeatureFlags2KHR"]:
+            code += "     sscanf(_res.c_str(), \"%\" SCNd64, &o);\n"
+        else:
+            code += "     sscanf(_res.c_str(), \"%u\", &o);\n"
+        code += "}\n"
+        return code
+
+    def genHandleCode(self, str1, str2, name):
+        code = ""
+        ifdefName = ""
+        if name in self.featureDict and self.featureDict[name] != "VK_VERSION_1_0":
+            ifdefName = self.featureDict[name]
+        if not self.isCTS and ifdefName != "":
+            code += "#ifdef %s\n" %(ifdefName)
+        code += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(name, name)
+        code += "//     std::string _res = obj.asString();\n"
+        code += "}\n"
+        if not self.isCTS and ifdefName != "":
+            code += "#endif\n"
+        return code
+
+    def genBitmaskCode(self, str1, str2, name, mapName):
+        code = ""
+        ifdefName = ""
+        if mapName in self.featureDict and self.featureDict[mapName] != "VK_VERSION_1_0":
+            ifdefName = self.featureDict[mapName]
+        elif name in self.featureDict and self.featureDict[name] != "VK_VERSION_1_0":
+            ifdefName = self.featureDict[name]
+        if ifdefName != "":
+            if not self.isCTS:
+                code += "#ifdef %s\n" %(ifdefName)
+
+        if mapName is not None:
+            code += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(name, name)
+            code += "     o = (%s)0;\n" %(name)
+            code += "     std::string _res = obj.asString();\n"
+            code += "     std::vector<std::string> bitmasks;\n"
+            code += "     std::istringstream inputStream(_res);\n"
+            code += "     std::string tempStr;\n"
+            code += "     while (getline(inputStream, tempStr, '|')) {\n"
+            code += "         tempStr.erase(std::remove_if(tempStr.begin(), tempStr.end(), isspace), tempStr.end());\n"
+            code += "         bitmasks.push_back(tempStr);\n"
+            code += "     }\n"
+            code += "     for (auto& it : bitmasks) {\n"
+            code += "       o |= (%s)%s_map[it];\n" %(mapName, mapName)
+            code += "     }\n"
+            code += "}\n"
+        else:
+            code += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(name, name)
+            code += "     if (obj.isString()) {\n"
+            code += "          std::string _res = obj.asString();\n"
+            if name in ["VkFlags64", "VkPipelineStageFlags2KHR", "VkAccessFlags2KHR", "VkFormatFeatureFlags2KHR"]:
+                code += "          sscanf(_res.c_str(), \"%\" SCNd64, &o);\n"
+            else:
+                code += "          sscanf(_res.c_str(), \"%u\", &o);\n"
+            code += "     }\n"
+            code += "     else {\n"
+            code += "          o = obj.asUInt();\n"
+            code += "     }\n"
+
+            code += "}\n"
+            
+        if not self.isCTS and ifdefName != "":
+            code += "#endif\n"
+
+        return code
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+        body = ""
+
+        category = typeElem.get('category')
+        if category == 'funcpointer':
+            section = 'struct'
+        else:
+            section = category
+
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
+        else:
+            if typeElem.get('category') == 'bitmask':
+                for elem in typeElem:
+                    if elem.tag == 'name':
+                        body += self.genBitmaskCode("(", " obj,", elem.text, typeElem.get('requires'))
+
+            elif typeElem.get('category') == 'basetype':
+                    for elem in typeElem:
+                        if elem.tag == 'name':
+                            body += self.genBasetypeCode("(", " obj,", elem.text)
+
+            elif typeElem.get('category') == 'handle':
+                    for elem in typeElem:
+                        if elem.tag == 'name':
+                            body += self.genHandleCode("(", " obj,", elem.text)
+
+            if body:
+                self.appendSection(section, body)
+
+    def paramIsStruct(self, memberType):
+        if str(self.getTypeCategory(memberType)) == 'struct':
+            return 1
+        return 0
+
+    # Helper taken from the validation layers code.
+    def paramIsPointer(self, param):
+        ispointer = False
+        for elem in param:
+            if elem.tag == 'type' and elem.tail is not None and '*' in elem.tail:
+                ispointer = True
+        return ispointer
+
+    # Helper taken from the validation layers code.
+    def paramIsStaticArray(self, param):
+        isstaticarray = 0
+        paramname = param.find('name')
+        if (paramname.tail is not None) and ('[' in paramname.tail) and (']' in paramname.tail):
+            isstaticarray = paramname.tail.count('[')
+            if isstaticarray:
+                arraySize = paramname.tail[1]
+
+        if isstaticarray:
+            return arraySize
+        else:
+            return 0
+
+    def paramIsStaticArrayWithMacroSize(self, param):
+        paramname = param.find('name')
+        isCharArray = param.find('type') is not None and 'char' in param.find('type').text
+        hasMacroSize = paramname.tail is not None and '[' in paramname.tail and param.find('enum') is not None
+        if hasMacroSize and not isCharArray:
+            return 1
+        else:
+            return 0
+
+    def paramIsCharStaticArrayWithMacroSize(self, param):
+        paramname = param.find('name')
+        if paramname.tail is None and paramname.text == "pName":
+            return 0
+        else:
+            return 1
+
+    def generateStructMembercode(self, param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded):
+        length = ""
+        code = ""
+        isArr = param.get('len') is not None
+
+        if param.get('len') is not None:
+            length = str2 + param.get('len') + ")"
+
+        if self.paramIsPointer(param) is True and isArr is True:
+            code += "     %s%s) = (%s*)s_globalMem.allocate(%s, sizeof(%s));\n" %(str2, memberName, typeName, length, typeName)
+            code += "     Json::Value& obj_%s = obj[\"%s\"];\n" %(memberName, memberName)
+            code += "     if (obj_%s.size() == 0) %s%s) = nullptr;\n" %(memberName, str2, memberName)
+            code += "     else {\n"
+            code += "       for (unsigned int i = 0; i < %s; i++) {\n" %(length)
+            code += "           parse_%s(\"%s\", obj_%s[i], const_cast<%s&>(%s%s[i])));\n" %(typeName, memberName, memberName, typeName, str2, memberName)
+            code += "       }\n"
+            code += "     }\n"
+            return code
+        elif self.paramIsPointer(param) is True:
+            code += "     {\n"
+            code += "         Json::Value& obj_%s = obj[\"%s\"];\n" %(memberName, memberName)
+            code += "         const int sz = obj_%s.size();\n" %(memberName)
+            code += "         if (obj_%s.size() == 0) {\n" %(memberName)
+            code += "             %s%s) = nullptr;\n"%(str2, memberName)
+            code += "         } else {\n"
+            code += "             %s%s) = (%s*)s_globalMem.allocate(1, sizeof(%s));\n" %(str2, memberName, typeName, typeName)
+            code += "             parse_%s(\"%s\", obj_%s, const_cast<%s&>(*%s%s)));\n" %(typeName, memberName, memberName, typeName, str2, memberName)
+            code += "         }\n"
+            code += "     }\n"
+            return code
+
+        # TODO: With some tweak, we can use the genArrayCode() here.
+        if isArr is True:
+            code += "     Json::Value& obj_%s = obj[\"%s\"];\n" %(memberName, memberName)
+            code += "     for (unsigned int i = 0; i < obj_%s.size(); i++) {\n" %(memberName)
+            code += "           parse_%s(\"%s\", obj_%s[i], const_cast<%s&>(%s%s[i])));\n" %(typeName, memberName, memberName, typeName, str2, memberName)
+            code += "     }\n"
+        else:
+            code += "     parse_%s(\"%s\", obj[\"%s\"], %s%s));\n" %(typeName, memberName, memberName, str2, memberName)
+
+        return code
+
+    def genArrayCode(self, structName, name, typeName, str2, arraySize, needStrPrint, isMallocNeeded):
+        code = ""
+        mappedType = self.baseTypeListMap[typeName] if self.baseTypeListMap.get(typeName) != None else typeName
+        if structName == "VkPipelineLayoutCreateInfo" and self.isCTS:
+            if isMallocNeeded:
+                code += "     %s* %sTab = (%s*)s_globalMem.allocate(%s, sizeof(%s));\n" %(mappedType, name, mappedType, arraySize, mappedType)
+            code += "     Json::Value& obj_%s_arr = obj[\"%s\"];\n" %(name, name)
+            code += "     for (unsigned int i = 0; i < obj_%s_arr.size(); i++) {\n" %(name)
+            code += "           deUint64 %sInternal = 0;\n" %(name)
+            code += "           parse_uint64_t(\"%s\", obj_%s_arr[i], %sInternal);\n" %(name, name, name)
+            code += "           %sTab[i] = %s(%sInternal);\n" %(name, mappedType, name)
+            code += "     }\n"
+            code += "     %s%s = %sTab;\n" %(str2[1:], name, name)
+        else:
+            if isMallocNeeded:
+                code += "     %s%s) = (%s*)s_globalMem.allocate(%s, sizeof(%s));\n" %(str2, name, mappedType, arraySize, mappedType)
+            code += "     Json::Value& obj_%s_arr = obj[\"%s\"];\n" %(name, name)
+            code += "     for (unsigned int i = 0; i < obj_%s_arr.size(); i++) {\n" %(name)
+            code += "           parse_%s(\"%s\", obj_%s_arr[i], const_cast<%s&>(%s%s[i])));\n" %(typeName, name, name, mappedType, str2, name)
+            code += "     }\n"
+
+        return code
+
+    # Prints out member name followed by empty string.
+    def genEmptyCode(self, memberName, isCommaNeeded):
+        code = ""
+        return code
+
+    def genCTSHandleCode(self, memberName, typeName):
+        code = ""
+        code += "     deUint64 %sInternal = 0;\n" %(memberName)
+        code += "     parse_uint64_t(\"%s\", obj[\"%s\"], %sInternal);\n" %(memberName, memberName, memberName)
+        code += "     o.%s = %s(%sInternal);\n" %(memberName, typeName, memberName)
+        return code
+
+    def genStructCode(self, param, str1, str2, str3, str4, structName, isCommaNeeded):
+        code = ""
+        memberName = ""
+        typeName = ""
+
+        for elem in param:
+            if elem.text.find('PFN_') != -1:
+                return "     /** Note: Ignoring function pointer (%s). **/\n" %(elem.text)
+
+            if elem.text == 'pNext':
+                return  "     o.pNext = (%s*)parsePNextChain(obj);\n" %(structName)
+
+            if elem.tag == 'name':
+                memberName = elem.text
+
+            if elem.tag == 'type':
+                typeName = elem.text
+
+        if self.paramIsStaticArray(param):
+            return self.genArrayCode(structName, memberName, typeName, str2, self.paramIsStaticArray(param), False, isCommaNeeded)
+
+        elif self.paramIsStaticArrayWithMacroSize(param):
+            arraySize = param.find('enum').text
+            return self.genArrayCode(structName, memberName, typeName, str2, arraySize, False, isCommaNeeded)
+
+        # If the struct's member is another struct, we need a different way to handle.
+        elif self.paramIsStruct(typeName) == 1:
+            code += self.generateStructMembercode(param, str1, str2, str3, str4, memberName, typeName, isCommaNeeded)
+
+        # Ignore void* data members
+        elif self.paramIsPointer(param) and typeName == 'void':
+            code = ""
+            if structName == "VkSpecializationInfo":
+                code += "     if (o.dataSize > 0U)\n"
+                code += "     {\n"
+                code += "         void* data = s_globalMem.allocate(%s(%sdataSize));\n" %(self.baseTypeListMap["uint32_t"] ,str2[1:])
+                code += "         parse_void_data(\"%s\", obj[\"%s\"], data, int(%sdataSize));\n" %(memberName, memberName, str2[1:])
+                code += "         %s%s = data;\n" %(str2[1:], memberName)
+                code += "     }\n"
+                code += "     else\n"
+                code += "         %s%s = NULL;\n" %(str2[1:], memberName)
+                return code
+            if self.isCTS:
+                if structName == "VkPipelineCacheCreateInfo":
+                    code += "     if (o.initialDataSize > 0U)\n"
+                    code += "     {\n"
+                    code += "         void* data = s_globalMem.allocate(%s(%sinitialDataSize));\n" %(self.baseTypeListMap["uint32_t"], str2[1:])
+                    code += "         parse_void_data(\"%s\", obj[\"%s\"], data, int(%sinitialDataSize));\n" %(memberName, memberName, str2[1:])
+                    code += "         %s%s = data;\n" %(str2[1:], memberName)
+                    code += "     }\n"
+                    code += "     else\n"
+                    code += "         %s%s = NULL;\n" %(str2[1:], memberName)
+                return code
+            return "     /** Note: Ignoring void* data. **/\n"
+
+        # For pointers where we have the 'len' field, dump them as arrays.
+        elif self.paramIsPointer(param) and param.get('len') is not None and param.get('len').find('null-terminated') == -1 and param.get('len').find('latexmath') == -1:
+            # TODO: Check what the optional means here. In some cases, the pointer isn't populated, but the count gets set.
+            if param.get('optional') != 'true':
+                return self.genArrayCode(structName, memberName, typeName, str2, str2+param.get('len')+")", False, True)
+            else:
+                if structName == "VkDescriptorSetLayoutBinding" and self.isCTS:
+                    code = ""
+                    code += "     Json::Value& obj_%s = obj[\"%s\"];\n" %(memberName, memberName)
+                    code += "     if (obj_%s.empty() || (obj_%s.isString() && obj_%s.asString() == \"NULL\"))\n" %(memberName, memberName, memberName)
+                    code += "         o.%s = nullptr;\n" %(memberName)
+                    code += "     else\n"
+                    code += "     {\n"
+                    code += "         %s* samplers = (%s*)s_globalMem.allocate((o.descriptorCount), sizeof(%s));\n" %(typeName, typeName, typeName)
+                    code += "         for (unsigned int i = 0; i < obj_%s.size(); i++)\n" %(memberName)
+                    code += "         {\n"
+                    code += "             deUint64 sInternal = 0;\n"
+                    code += "             parse_uint64_t(\"%s\", obj_%s[i], sInternal);\n" %(memberName, memberName)
+                    code += "             samplers[i] = %s(sInternal);\n" %(typeName)
+                    code += "         }\n"
+                    code += "         o.%s = samplers;\n" %(memberName)
+                    code += "     }"
+                    return code
+                return self.genEmptyCode(memberName, isCommaNeeded)
+
+        # Special handling for VkPipelineMultisampleStateCreateInfo::pSampleMask
+        elif typeName in "VkSampleMask":
+            arraySize = "(%s(o.rasterizationSamples + 31) / 32)" %(self.baseTypeListMap["uint32_t"])
+            code += "     %s%s) = (%s*)s_globalMem.allocate(%s, sizeof(%s));\n" %(str2, memberName, typeName, arraySize, typeName)
+            code += "     Json::Value& obj_%s = obj[\"%s\"];\n" %(memberName, memberName)
+            code += "     if (o.rasterizationSamples == 0 || obj_%s.size() == 0) {\n" %(memberName)
+            code += "         %s%s) = nullptr;\n" %(str2, memberName)
+            code += "     } else {\n"
+            code += "         for (%s i = 0; i < %s; i++) {\n" %(self.baseTypeListMap["uint32_t"], arraySize)
+            code += "             parse_uint32_t(\"%s\", obj_%s[i], const_cast<%s&>(%s%s[i])));\n" %(memberName, memberName, typeName, str2, memberName)
+            code += "         }\n"
+            code += "     }\n"
+
+        # If a struct member is just a handle.
+        elif str(self.getTypeCategory(typeName)) == 'handle':
+            if self.isCTS and (memberName == "module" or memberName == "layout" or memberName == "renderPass" or memberName == "conversion"):
+                return self.genCTSHandleCode(memberName, typeName)
+            return self.genEmptyCode(memberName, isCommaNeeded)
+
+        elif typeName in "char":
+            if self.paramIsCharStaticArrayWithMacroSize(param) == 0:
+                code += "     %s%s) = (const char*)s_globalMem.allocate(255);\n" %(str2, memberName)
+                code += "     parse_%s(\"%s\", obj[\"%s\"], &%s%s));\n" %(typeName, memberName, memberName, str2, memberName)
+            else:
+                code += "     /** TODO: Handle this - %s **/\n" %(memberName)
+
+        elif typeName in "NvSciSyncFence":
+            code += "     /** TODO: Handle this - %s **/\n" %(memberName)
+
+        else:
+            code += "     parse_%s(\"%s\", obj[\"%s\"], %s%s));\n" %(typeName, memberName, memberName, str2, memberName)
+
+        return code
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+        body = ""
+        typeElem = typeinfo.elem
+        ifdefNeeded = False
+
+        if typeName in self.featureDict and self.featureDict[typeName] != "VK_VERSION_1_0":
+            ifdefNeeded = True
+            if not self.isCTS:
+                body = "#ifdef %s\n" %(self.featureDict[typeName])
+
+        if alias:
+            body += 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            genStr1 = ["("]
+            genStr2 = ["(o."]
+            genStr3 = [" o, const const char* s, bool commaNeeded) {"]
+            genStr4 = ["     if (obj."]
+
+            index = 0
+            body += "static void parse_%s(const char* s, Json::Value& obj, %s& o) {\n" %(typeName, typeName)
+            body += "\n"
+
+            for member in typeElem.findall('.//member'):
+                body += self.genStructCode(member, genStr1[index], genStr2[index], genStr3[index], genStr4[index], typeName, 0)
+                body += "\n"
+
+            body += "}\n"
+
+        if not self.isCTS and ifdefNeeded:
+            body += "#endif\n"
+
+        self.appendSection('struct', body)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+        body = ""
+        section = 'enum'
+        ifdefNeeded = False
+ 
+        if groupName in self.featureDict and self.featureDict[groupName] != "VK_VERSION_1_0":
+            ifdefNeeded = True
+            if not self.isCTS:
+                body += "#ifdef %s\n" %(self.featureDict[groupName])
+
+        if groupName == "VkPipelineStageFlagBits2KHR" or groupName == "VkAccessFlagBits2KHR" or groupName == "VkFormatFeatureFlagBits2KHR":
+            body += "static std::map<std::string, %s> %s_map = {\n" %(self.baseTypeListMap["uint64_t"],groupName)
+        else:
+            body += "static std::map<std::string, int> %s_map = {\n" %(groupName)
+        enums = groupElem.findall('enum')
+
+        for enum in enums:
+            if enum.get('value'):
+                body += "    std::make_pair(\"%s\", %s),\n" %(enum.get('name'), enum.get('value'))
+
+            elif enum.get('bitpos'):
+                if groupName == "VkPipelineStageFlagBits2KHR" or groupName == "VkAccessFlagBits2KHR" or groupName == "VkFormatFeatureFlagBits2KHR":
+                    body += "    std::make_pair(\"%s\", 1ULL << %s),\n" %(enum.get('name'), enum.get('bitpos'))
+                else:
+                    body += "    std::make_pair(\"%s\", 1UL << %s),\n" %(enum.get('name'), enum.get('bitpos'))
+
+            elif enum.get('extends') and enum.get("extnumber") and enum.get("offset"):
+                extNumber = int(enum.get("extnumber"))
+                offset = int(enum.get("offset"))
+                enumVal = self.extBase + (extNumber - 1) * self.extBlockSize + offset
+                body += "    std::make_pair(\"%s\", %s),\n" %(enum.get('name'), str(enumVal))
+
+        body += "};\n"
+        body += self.genEnumCode(groupName, ifdefNeeded)
+
+        self.appendSection(section, body)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/json_validate.py b/codegen/vulkan/vulkan-docs-next/scripts/json_validate.py
new file mode 100644
index 0000000..b31fb48
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/json_validate.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script validates a json pipeline file against the schema files.
+
+import os,sys
+import re
+import argparse
+import json
+import jsonschema
+
+base_schema_filename = os.path.join("..", "json", "vk.json")
+vkpcc_schema_filename = os.path.join("..", "json", "vkpcc.json")
+
+# Parses input arguments
+def ParseArgs():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('json_file', help='The json file to validate')
+    return parser.parse_args()
+
+def main():
+    args           = ParseArgs()
+    jsonText       = ""
+    baseSchemaText = ""
+    vkSchemaText   = ""
+
+    # Exit with error if json or schema files do not exist
+    if not os.path.exists(args.json_file):
+        print('Error: json file \"%s\" does not exist.' % args.json_file)
+        sys.exit(1)
+    elif not os.path.exists(base_schema_filename):
+        print('Error: json file \"%s\" does not exist.' % base_schema_filename)
+        sys.exit(1)
+    elif not os.path.exists(vkpcc_schema_filename):
+        print('Error: json file \"%s\" does not exist.' % vkpcc_schema_filename)
+        sys.exit(1)
+
+    # Read the json schemas files in as text
+    with open(base_schema_filename) as baseSchemaFile:
+        baseSchemaText = baseSchemaFile.read()
+    with open(vkpcc_schema_filename) as vkSchemaFile:
+        vkSchemaText = vkSchemaFile.read()
+    with open(args.json_file) as jsonFile:
+        jsonText = jsonFile.read()
+    baseSchema = json.loads(baseSchemaText)
+    vkSchema   = json.loads(vkSchemaText)
+    jsonData   = json.loads(jsonText)
+
+    # Ensure that the generated vk.json schema is a valid schema
+    try:
+        jsonschema.Draft4Validator.check_schema(baseSchema)
+        print(base_schema_filename, "is valid")
+    except jsonschema.SchemaError as e:
+        print(base_schema_filename, "error: " + str(e))
+
+    # Ensure that vkpcc.json is also a valid schema
+    try:
+        jsonschema.Draft4Validator.check_schema(vkSchema)
+        print(vkpcc_schema_filename, "schema is valid")
+    except jsonschema.exceptions.SchemaError as e:
+        print(vkpcc_schema_filename, "schema error: " + str(e))
+
+    # Construct a schema validator object from the two schema files
+    schemaRefStore = {
+        baseSchema["id"] : baseSchema,
+        vkSchema["id"]   : vkSchema
+    }
+    resolver  = jsonschema.RefResolver.from_schema(baseSchema, store=schemaRefStore)
+    validator = jsonschema.Draft4Validator(vkSchema, resolver=resolver)
+
+    # Validate the input .json file using the schemas
+    for error in sorted(validator.iter_errors(jsonData), key=str):
+        print(error.message)
+        print(list(error.path))
+        for suberror in sorted(error.context, key=lambda e: e.schema_path):
+            print(list(suberror.path), suberror.message, sep="\n")
+        print("\n")
+
+if __name__ == '__main__':
+    main()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/linkcheck.py b/codegen/vulkan/vulkan-docs-next/scripts/linkcheck.py
new file mode 100755
index 0000000..0ee0c01
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/linkcheck.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python3
+# Copyright 2013-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# linkcheck - check internal links of the specified HTML file against
+# internal anchors and report inconsistencies.
+#
+# Usage: linkcheck file.html
+
+import argparse
+from lxml import etree as et
+
+def printSet(s):
+    for key in sorted(s):
+        print('    {}'.format(key))
+
+def checkLinks(file, args):
+    parser = et.HTMLParser()
+    tree = et.parse(file, parser)
+
+    # Remove all <svg> elements, which just add noise to the cross-referencing
+    for svg in tree.findall('//svg'):
+        svg.getparent().remove(svg)
+
+    # Extract elements with href= and id= attributes
+    hrefs = tree.findall('//*[@href]')
+    ids = tree.findall('//*[@id]')
+
+    # Extract xref name from each xref
+    internals = set()
+    externals = set()
+
+    for e in hrefs:
+        # Do not track '<link>' tags from HTML headers
+        if e.tag != 'link':
+            xref = e.get('href')
+
+            if xref[0:1] == '#':
+                # Internal anchor
+                internals.add(xref[1:])
+            else:
+                externals.add(xref)
+
+    # Extract anchor name from each id
+    anchors = set()
+
+    for e in ids:
+        # Do not track SVG '<g>' tags
+        if e.tag != 'g':
+            anchors.add(e.get('id'))
+
+    # Intersect them to find inconsistencies
+    xrefsOnly = internals.difference(anchors)
+    anchorsOnly = anchors.difference(internals)
+
+    # print('External xrefs:', len(externals))
+    # printSet(externals)
+    #
+    # print('Internal xrefs:', len(internals))
+    # print('Anchors:       ', len(anchors))
+
+    print('Internal xrefs not in anchors:', len(xrefsOnly))
+    printSet(xrefsOnly)
+
+    if args.anchors:
+        print('Internal anchors not in xrefs:', len(anchorsOnly))
+        printSet(anchorsOnly)
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to promote text in')
+    parser.add_argument('-anchors', action='store_true',
+                        help='Report orphaned anchors')
+
+
+    args = parser.parse_args()
+
+    for file in args.files:
+        checkLinks(file, args)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/makemanaliases.py b/codegen/vulkan/vulkan-docs-next/scripts/makemanaliases.py
new file mode 100755
index 0000000..3bcb939
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/makemanaliases.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+"""Script to create symbolic links for aliases in reference pages
+   Usage: makemanaliases.py -refdir refpage-output-directory"""
+
+import argparse
+import os
+import sys
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-genpath', action='store',
+                        default=None,
+                        help='Path to directory containing generated apimap.py module')
+    parser.add_argument('-refdir', action='store',
+                        required=True,
+                        help='Path to directory containing reference pages to symlink')
+
+    args = parser.parse_args()
+
+    # Look for apimap.py in the specified directory
+    if args.genpath is not None:
+        sys.path.insert(0, args.genpath)
+    import apimap as api
+
+    # Change to refpage directory
+    try:
+        os.chdir(args.refdir)
+    except:
+        print('Cannot chdir to', args.refdir, file=sys.stderr)
+        sys.exit(1)
+
+    # For each alias in the API alias map, create a symlink if it
+    # does not exist - and warn if it does exist.
+
+    for key in api.alias:
+        if key.endswith(('_EXTENSION_NAME', '_SPEC_VERSION')):
+            # No reference pages are generated for these meta-tokens, so
+            # attempts to alias them will fail. Silently skip them.
+            continue
+
+        alias = key + '.html'
+        src = api.alias[key] + '.html'
+
+        if not os.access(src, os.R_OK):
+            # This should not happen, but is possible if the api module is
+            # not generated for the same set of APIs as were the refpages.
+            print('No source file', src, file=sys.stderr)
+            continue
+
+        if os.access(alias, os.R_OK):
+            # If the link already exists, that is not necessarily a
+            # problem, so do not fail, but it should be checked out.
+            # The usual case for this is not cleaning the target directory
+            # prior to generating refpages.
+            print('Unexpected alias file "' + alias + '" exists, skipping',
+                  file=sys.stderr)
+        else:
+            # Create link from alias refpage to page for what it is aliasing
+            os.symlink(src, alias)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/map_html_anchors.py b/codegen/vulkan/vulkan-docs-next/scripts/map_html_anchors.py
new file mode 100755
index 0000000..06c2f54
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/map_html_anchors.py
@@ -0,0 +1,210 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# map_html_anchors - map each id= element in a spec HTML file onto the
+# top-level (chapter) id= element it belongs to. Used to rewrite spec
+# xrefs for Antora. Prints a Python script containing a dictionary
+# mapping each discovered ID into the top-level ID it belongs to, and the
+# corresponding title element following the id.
+#
+# This script is very specific to HTML generated by asciidoctor and
+# following conventions of the Vulkan style guide.
+
+# Usage: map_html_anchors.py file.html > xrefMap.py
+
+import argparse
+import re
+import sys
+from lxml import etree
+
+def contains_any_of(words, wordlist):
+    """Returns True if any element of 'word' is contained in 'words'
+
+       - words - iterable of words to check against wordlist
+       - wordlist - iterable of words"""
+
+    for word in words:
+        if word in wordlist:
+            return True
+    return False
+
+sectNumberPat = re.compile(r'^(Table |)([0-9]+\.)+ *')
+
+def add_id(chapelem, idelem, id_map, chapter_id):
+    """Add a ID -> [ chapter ID, title] mapping.
+
+       - chapelem - Element for the chapter containing this ID
+       - idelem - Element for the ID itself
+       - id_map - dictionary containing the map
+       - chapter_id - chapter ID of chapelem"""
+
+    # The actual ID
+    id = idelem.get('id')
+
+    # Try to determine the title corresponding to this ID, or '' otherwise
+    if idelem.tag == 'a':
+        # <a id=> does not have a corresponding title element
+        id_title = ''
+    elif idelem.tag in (('h2', 'h3', 'h4', 'h4', 'h5', 'h6')):
+        # <h# id=> has ((#.)* *title) in the text of its element
+        id_title = ''.join(idelem.itertext())
+    elif idelem.tag == 'table':
+        # <table id=> may be followed by <caption class="title">
+        # with 'Table ##. caption' text
+        capelem = idelem.find('.//caption[@class="title"]')
+        if capelem is not None:
+            id_title = ''.join(capelem.itertext())
+        else:
+            id_title = 'NO TABLE CAPTION FOUND'
+    elif idelem.tag == 'div':
+        classes = idelem.get('class')
+        if classes is not None:
+            divclass = classes.split()
+
+            if contains_any_of((('admonitionblock', 'paragraph', 'sidebarblock')), divclass):
+                # <div> classes with no title elements (paragraphs or NOTEs)
+                id_title = ''
+            elif 'listingblock' in divclass:
+                # <div id= class="listingblock"> has title == id (used for API includes)
+                id_title = id
+            elif contains_any_of((('dlist', 'openblock')), divclass):
+                # <div> classes with titles in the text of the first
+                # <dt class="hdlist1"> element of the div
+                #
+                # "dlist" are mostly glossary elements
+                # "openblock" are mostly SPIR-V keywords
+                dtelem = idelem.find('.//dt[@class="hdlist1"]')
+                if dtelem is not None:
+                    # This may not find text in child Elements of <dt>
+                    id_title = ''.join(dtelem.itertext())
+                else:
+                    # No dtelem text found, this probably means a label on an
+                    # API open block
+                    id_title = ''
+            elif contains_any_of((('ulist', 'imageblock')), divclass):
+                # <div> classes with titles in the first
+                # <div class="title"> element of the div
+                titleelem = idelem.find('.//div[@class="title"]')
+                if titleelem is not None:
+                    id_title = ''.join(titleelem.itertext())
+                else:
+                    # No <div class="title"> text found
+                    id_title = ''
+            else:
+                id_title = ''
+                print(f'Cannot find title for <div id="{id}" class="{classes}"> - unrecognized class', file=sys.stderr)
+        else:
+            # <div id=> without a class may have a corresponding <h# id=> with the
+            # same id - in this case, the div will be thrown away when the
+            # following element is encountered.
+            id_title = ''
+
+    if id in id_map:
+        val = id_map[id]
+        print(f'Replacing key {id} -> ({val[0]}, {val[1]}) with ({chapter_id}, {id_title})', file=sys.stderr)
+
+    # Strip whitespace and leading table or section numbers, if present
+    id_title = sectNumberPat.sub('', id_title.strip())
+
+    # Map the xref to the chapter it came from and its title
+    id_map[id] = [ chapter_id, id_title ]
+
+def generate_map(id_map, filename, scripttype):
+    """Encode the ID map into the specified scripttype ('python' or
+       'javascript') in the specified file."""
+
+    fp = open(filename, 'w')
+
+    # Python and JS are extremely similar when the output is just a
+    # dictionary of lists of strings.
+
+    if scripttype == 'javascript':
+        print('exports.xrefMap = {', file=fp)
+    else:
+        print('xrefMap = {', file=fp)
+
+    # Sort keys so the can be compared between runs
+    for id in sorted(id_map):
+        print(f"    '{id}' : [ '{id_map[id][0]}', '{id_map[id][1]}' ],", file=fp)
+
+    print('}', file=fp)
+
+    fp.close()
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+
+    parser.add_argument('-jsfile', action='store',
+                        default=None,
+                        help='Specify name of JavaScript file to generate')
+    parser.add_argument('-pyfile', action='store',
+                        default=None,
+                        help='Specify name of Python file to generate')
+    parser.add_argument('files', metavar='filename', nargs=1,
+                        help='HTML spec file to map IDs from')
+    args = parser.parse_args()
+
+    # Tags whose id elements are anchors (we are not concerned about other
+    # tags such as <svg>).
+    idtags = (('a', 'div', 'h2', 'h3', 'h4', 'h4', 'h5', 'h6', 'table'))
+
+    # Tags whose id elements we do not care about ('h2' is a special case)
+    rejected_tags = (('svg',
+                      'circle',
+                      'clippath',
+                      'defs',
+                      'ellipse',
+                      'g',
+                      'grid',
+                      'lineargradient',
+                      'marker',
+                      'metadata',
+                      'namedview',
+                      'path',
+                      'path-effect',
+                      'rect',
+                      'stop',
+                      'text',
+                      'tspan',
+        ))
+
+    parser = etree.HTMLParser()
+
+    # There is exactly one HTML filename
+    filename = args.files[0]
+    tree = etree.parse(filename, parser)
+
+    # Dictionary mapping an ID (anchor) to [chapter ID, ID title],
+    # where 'chapter ID' is the ID of the chapter it appears in
+    id_map = {}
+
+    # Find each <div class="sect1"> element, which corresponds to a
+    # chapter.
+    chapter_elems = tree.findall('.//div[@class="sect1"]')
+    for chapelem in chapter_elems:
+        chapter_id = ''
+        h2_elems = chapelem.findall('.//h2[@id]')
+        if len(h2_elems) != 1:
+            raise UserWarning(f'Error! <div> must have exactly 1 <h2> element, has {len(h2_elems)}')
+        else:
+            chapter_id = h2_elems[0].get('id')
+
+        for idelem in chapelem.findall('.//*[@id]'):
+            if idelem.tag in idtags:
+                add_id(chapelem, idelem, id_map, chapter_id)
+                True
+            elif idelem.tag in rejected_tags:
+                # print(f'Rejecting tag {idelem.tag}')
+                # Do nothing - for tags we know we do not care about
+                True
+            else:
+                print(f'    Rejecting unknown tag with ID <{idelem.tag} id="{idelem.get("id")}"', file=sys.stderr)
+                True
+
+    if args.pyfile is not None:
+        generate_map(id_map, args.pyfile, 'python')
+    if args.jsfile is not None:
+        generate_map(id_map, args.jsfile, 'javascript')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/parse_dependency.py b/codegen/vulkan/vulkan-docs-next/scripts/parse_dependency.py
new file mode 100755
index 0000000..313b3c0
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/parse_dependency.py
@@ -0,0 +1,424 @@
+#!/usr/bin/python3
+
+# Copyright 2022-2023 The Khronos Group Inc.
+# Copyright 2003-2019 Paul McGuire
+# SPDX-License-Identifier: MIT
+
+# apirequirements.py - parse 'depends' expressions in API XML
+# Supported methods:
+#   dependency - the expression string
+#
+# evaluateDependency(dependency, isSupported) evaluates the expression,
+# returning a boolean result. isSupported takes an extension or version name
+# string and returns a boolean.
+#
+# dependencyLanguage(dependency) returns an English string equivalent
+# to the expression, suitable for header file comments.
+#
+# dependencyNames(dependency) returns a set of the extension and
+# version names in the expression.
+#
+# dependencyMarkup(dependency) returns a string containing asciidoctor
+# markup for English equivalent to the expression, suitable for extension
+# appendices.
+#
+# All may throw a ParseException if the expression cannot be parsed or is
+# not completely consumed by parsing.
+
+# Supported expressions at present:
+#   - extension names
+#   - '+' as AND connector
+#   - ',' as OR connector
+#   - parenthesization for grouping
+
+# Based on https://github.com/pyparsing/pyparsing/blob/master/examples/fourFn.py
+
+from pyparsing import (
+    Literal,
+    Word,
+    Group,
+    Forward,
+    alphas,
+    alphanums,
+    Regex,
+    ParseException,
+    CaselessKeyword,
+    Suppress,
+    delimitedList,
+    infixNotation,
+)
+import math
+import operator
+import pyparsing as pp
+import re
+
+def markupPassthrough(name):
+    """Pass a name (leaf or operator) through without applying markup"""
+    return name
+
+# A regexp matching Vulkan and VulkanSC core version names
+# The Conventions is_api_version_name() method is similar, but does not
+# return the matches.
+apiVersionNamePat = re.compile(r'(VK|VKSC)_VERSION_([0-9]+)_([0-9]+)')
+
+def apiVersionNameMatch(name):
+    """Return [ apivariant, major, minor ] if name is an API version name,
+       or [ None, None, None ] if it is not."""
+
+    match = apiVersionNamePat.match(name)
+    if match is not None:
+        return [ match.group(1), match.group(2), match.group(3) ]
+    else:
+        return [ None, None, None ]
+
+def leafMarkupAsciidoc(name):
+    """Markup a leaf name as an asciidoc link to an API version or extension
+       anchor.
+
+       - name - version or extension name"""
+
+    (apivariant, major, minor) = apiVersionNameMatch(name)
+
+    if apivariant is not None:
+        version = major + '.' + minor
+        if apivariant == 'VKSC':
+            # Vulkan SC has a different anchor pattern for version appendices
+            if version == '1.0':
+                return 'Vulkan SC 1.0'
+            else:
+                return f'<<versions-sc-{version}, Version SC {version}>>'
+        else:
+            return f'<<versions-{version}, Version {version}>>'
+    else:
+        return f'apiext:{name}'
+
+def leafMarkupC(name):
+    """Markup a leaf name as a C expression, using conventions of the
+       Vulkan Validation Layers
+
+       - name - version or extension name"""
+
+    (apivariant, major, minor) = apiVersionNameMatch(name)
+
+    if apivariant is not None:
+        return name
+    else:
+        return f'ext.{name}'
+
+opMarkupAsciidocMap = { '+' : 'and', ',' : 'or' }
+
+def opMarkupAsciidoc(op):
+    """Markup a operator as an asciidoc spec markup equivalent
+
+       - op - operator ('+' or ',')"""
+
+    return opMarkupAsciidocMap[op]
+
+opMarkupCMap = { '+' : '&&', ',' : '||' }
+
+def opMarkupC(op):
+    """Markup a operator as an C language equivalent
+
+       - op - operator ('+' or ',')"""
+
+    return opMarkupCMap[op]
+
+
+# Unfortunately global to be used in pyparsing
+exprStack = []
+
+def push_first(toks):
+    """Push a token on the global stack
+
+       - toks - first element is the token to push"""
+
+    exprStack.append(toks[0])
+
+# An identifier (version or extension name)
+dependencyIdent = Word(alphanums + '_')
+
+# Infix expression for depends expressions
+dependencyExpr = pp.infixNotation(dependencyIdent,
+    [ (pp.oneOf(', +'), 2, pp.opAssoc.LEFT), ])
+
+# BNF grammar for depends expressions
+_bnf = None
+def dependencyBNF():
+    """
+    boolop  :: '+' | ','
+    extname :: Char(alphas)
+    atom    :: extname | '(' expr ')'
+    expr    :: atom [ boolop atom ]*
+    """
+    global _bnf
+    if _bnf is None:
+        and_, or_ = map(Literal, '+,')
+        lpar, rpar = map(Suppress, '()')
+        boolop = and_ | or_
+
+        expr = Forward()
+        expr_list = delimitedList(Group(expr))
+        atom = (
+            boolop[...]
+            + (
+                (dependencyIdent).setParseAction(push_first)
+                | Group(lpar + expr + rpar)
+            )
+        )
+
+        expr <<= atom + (boolop + atom).setParseAction(push_first)[...]
+        _bnf = expr
+    return _bnf
+
+
+# map operator symbols to corresponding arithmetic operations
+_opn = {
+    '+': operator.and_,
+    ',': operator.or_,
+}
+
+def evaluateStack(stack, isSupported):
+    """Evaluate an expression stack, returning a boolean result.
+
+     - stack - the stack
+     - isSupported - function taking a version or extension name string and
+       returning True or False if that name is supported or not."""
+
+    op, num_args = stack.pop(), 0
+    if isinstance(op, tuple):
+        op, num_args = op
+
+    if op in '+,':
+        # Note: operands are pushed onto the stack in reverse order
+        op2 = evaluateStack(stack, isSupported)
+        op1 = evaluateStack(stack, isSupported)
+        return _opn[op](op1, op2)
+    elif op[0].isalpha():
+        return isSupported(op)
+    else:
+        raise Exception(f'invalid op: {op}')
+
+def evaluateDependency(dependency, isSupported):
+    """Evaluate a dependency expression, returning a boolean result.
+
+     - dependency - the expression
+     - isSupported - function taking a version or extension name string and
+       returning True or False if that name is supported or not."""
+
+    global exprStack
+    exprStack = []
+    results = dependencyBNF().parseString(dependency, parseAll=True)
+    val = evaluateStack(exprStack[:], isSupported)
+    return val
+
+def evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root):
+    """Evaluate an expression stack, returning an English equivalent
+
+     - stack - the stack
+     - leafMarkup, opMarkup, parenthesize - same as dependencyLanguage
+     - root - True only if this is the outer (root) expression level"""
+
+    op, num_args = stack.pop(), 0
+    if isinstance(op, tuple):
+        op, num_args = op
+    if op in '+,':
+        # Could parenthesize, not needed yet
+        rhs = evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root = False)
+        opname = opMarkup(op)
+        lhs = evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root = False)
+        if parenthesize and not root:
+            return f'({lhs} {opname} {rhs})'
+        else:
+            return f'{lhs} {opname} {rhs}'
+    elif op[0].isalpha():
+        # This is an extension or feature name
+        return leafMarkup(op)
+    else:
+        raise Exception(f'invalid op: {op}')
+
+def dependencyLanguage(dependency, leafMarkup, opMarkup, parenthesize):
+    """Return an API dependency expression translated to a form suitable for
+       asciidoctor conditionals or header file comments.
+
+     - dependency - the expression
+     - leafMarkup - function taking an extension / version name and
+                    returning an equivalent marked up version
+     - opMarkup - function taking an operator ('+' / ',') name name and
+                  returning an equivalent marked up version
+     - parenthesize - True if parentheses should be used in the resulting
+                      expression, False otherwise"""
+
+    global exprStack
+    exprStack = []
+    results = dependencyBNF().parseString(dependency, parseAll=True)
+    return evalDependencyLanguage(exprStack, leafMarkup, opMarkup, parenthesize, root = True)
+
+# aka specmacros = False
+def dependencyLanguageComment(dependency):
+    """Return dependency expression translated to a form suitable for
+       comments in headers of emitted C code, as used by the
+       docgenerator."""
+    return dependencyLanguage(dependency, leafMarkup = markupPassthrough, opMarkup = opMarkupAsciidoc, parenthesize = True)
+
+# aka specmacros = True
+def dependencyLanguageSpecMacros(dependency):
+    """Return dependency expression translated to a form suitable for
+       comments in headers of emitted C code, as used by the
+       interfacegenerator."""
+    return dependencyLanguage(dependency, leafMarkup = leafMarkupAsciidoc, opMarkup = opMarkupAsciidoc, parenthesize = False)
+
+def dependencyLanguageC(dependency):
+    """Return dependency expression translated to a form suitable for
+       use in C expressions"""
+    return dependencyLanguage(dependency, leafMarkup = leafMarkupC, opMarkup = opMarkupC, parenthesize = True)
+
+def evalDependencyNames(stack):
+    """Evaluate an expression stack, returning the set of extension and
+       feature names used in the expression.
+
+     - stack - the stack"""
+
+    op, num_args = stack.pop(), 0
+    if isinstance(op, tuple):
+        op, num_args = op
+    if op in '+,':
+        # Do not evaluate the operation. We only care about the names.
+        return evalDependencyNames(stack) | evalDependencyNames(stack)
+    elif op[0].isalpha():
+        return { op }
+    else:
+        raise Exception(f'invalid op: {op}')
+
+def dependencyNames(dependency):
+    """Return a set of the extension and version names in an API dependency
+       expression. Used when determining transitive dependencies for spec
+       generation with specific extensions included.
+
+     - dependency - the expression"""
+
+    global exprStack
+    exprStack = []
+    results = dependencyBNF().parseString(dependency, parseAll=True)
+    # print(f'names(): stack = {exprStack}')
+    return evalDependencyNames(exprStack)
+
+def markupTraverse(expr, level = 0, root = True):
+    """Recursively process a dependency in infix form, transforming it into
+       asciidoctor markup with expression nesting indicated by indentation
+       level.
+
+       - expr - expression to process
+       - level - indentation level to render expression at
+       - root - True only on initial call"""
+
+    if level > 0:
+        prefix = '{nbsp}{nbsp}' * level * 2 + ' '
+    else:
+        prefix = ''
+    str = ''
+
+    for elem in expr:
+        if isinstance(elem, pp.ParseResults):
+            if not root:
+                nextlevel = level + 1
+            else:
+                # Do not indent the outer expression
+                nextlevel = level
+
+            str = str + markupTraverse(elem, level = nextlevel, root = False)
+        elif elem in ('+', ','):
+            str = str + f'{prefix}{opMarkupAsciidoc(elem)} +\n'
+        else:
+            str = str + f'{prefix}{leafMarkupAsciidoc(elem)} +\n'
+
+    return str
+
+def dependencyMarkup(dependency):
+    """Return asciidoctor markup for a human-readable equivalent of an API
+       dependency expression, suitable for use in extension appendix
+       metadata.
+
+     - dependency - the expression"""
+
+    parsed = dependencyExpr.parseString(dependency)
+    return markupTraverse(parsed)
+
+if __name__ == "__main__":
+
+    termdict = {
+        'VK_VERSION_1_1' : True,
+        'false' : False,
+        'true' : True,
+    }
+    termSupported = lambda name: name in termdict and termdict[name]
+
+    def test(dependency, expected):
+        val = False
+        try:
+            val = evaluateDependency(dependency, termSupported)
+        except ParseException as pe:
+            print(dependency, f'failed parse: {dependency}')
+        except Exception as e:
+            print(dependency, f'failed eval: {dependency}')
+
+        if val == expected:
+            True
+            # print(f'{dependency} = {val} (as expected)')
+        else:
+            print(f'{dependency} ERROR: {val} != {expected}')
+
+    # Verify expressions are evaluated left-to-right
+
+    test('false,false+false', False)
+    test('false,false+true', False)
+    test('false,true+false', False)
+    test('false,true+true', True)
+    test('true,false+false', False)
+    test('true,false+true', True)
+    test('true,true+false', False)
+    test('true,true+true', True)
+
+    test('false,(false+false)', False)
+    test('false,(false+true)', False)
+    test('false,(true+false)', False)
+    test('false,(true+true)', True)
+    test('true,(false+false)', True)
+    test('true,(false+true)', True)
+    test('true,(true+false)', True)
+    test('true,(true+true)', True)
+
+
+    test('false+false,false', False)
+    test('false+false,true', True)
+    test('false+true,false', False)
+    test('false+true,true', True)
+    test('true+false,false', False)
+    test('true+false,true', True)
+    test('true+true,false', True)
+    test('true+true,true', True)
+
+    test('false+(false,false)', False)
+    test('false+(false,true)', False)
+    test('false+(true,false)', False)
+    test('false+(true,true)', False)
+    test('true+(false,false)', False)
+    test('true+(false,true)', True)
+    test('true+(true,false)', True)
+    test('true+(true,true)', True)
+
+    # Check formatting
+    for dependency in [
+        #'true',
+        #'true+true+false',
+        'true+false',
+        'true+(true+false),(false,true)',
+        #'true+((true+false),(false,true))',
+        'VK_VERSION_1_0+VK_KHR_display',
+        #'VK_VERSION_1_1+(true,false)',
+    ]:
+        print(f'expr = {dependency}\n{dependencyMarkup(dependency)}')
+        print(f'  spec language = {dependencyLanguageSpecMacros(dependency)}')
+        print(f'  comment language = {dependencyLanguageComment(dependency)}')
+        print(f'  C language = {dependencyLanguageC(dependency)}')
+        print(f'  names = {dependencyNames(dependency)}')
+        print(f'  value = {evaluateDependency(dependency, termSupported)}')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/promote.py b/codegen/vulkan/vulkan-docs-next/scripts/promote.py
new file mode 100755
index 0000000..417b357
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/promote.py
@@ -0,0 +1,173 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Retroactively insert markup in show both 1.1 core features and KHR
+# extensions they were promoted from.
+
+# Usage: promote.py [-overwrite] [-out dir] [-suffix str] files
+#   -overwrite updates in place (can be risky, make sure there are backups)
+#   -out specifies directory to create output file in, default 'out'
+#   -suffix specifies suffix to add to output files, default ''
+#   files are asciidoc source files from the Vulkan spec to reflow.
+
+# For error and file-loading interfaces only
+import argparse, copy, os, pdb, re, string, sys
+from reflib import *
+from promoted import *
+
+global anchor
+anchor = 0
+
+def anchorname(anchor):
+    return 'promoted-' + str(anchor)
+
+def printanchor(fp):
+    # Anchor index for navigation
+    global anchor
+
+    print('[[' + anchorname(anchor) + ']]', file=fp)
+    print('This anchor:', anchorname(anchor), file=fp)
+    print('<<' + anchorname(anchor+1) + ', OINK>>', file=fp)
+    anchor = anchor + 1
+
+# promote a core interface and include the extension it was promoted from
+#   line - matching line with 1.1 interface
+#   type - 'protos', 'structs', 'flags', 'enums'
+#   name - interface name
+#   extension - name of extension interface was promoted from
+#   fp - output filename
+def promote(line, type, name, extension, fp):
+    if type == 'protos':
+        # printanchor(fp)
+        print('ifdef::VK_VERSION_1_1[]', file=fp)
+        print(line, file=fp, end='')
+        print('endif::VK_VERSION_1_1[]', file=fp)
+        print('', file=fp)
+        print('ifdef::VK_VERSION_1_1+' + extension +
+              '[or the equivalent command]', file=fp)
+        print('', file=fp)
+        print('ifdef::' + extension + '[]', file=fp)
+        print('include::../api/' + type + '/' + name + 'KHR.adoc[]', file=fp)
+        print('endif::' + extension + '[]', file=fp)
+        del promoted[name]
+    elif type == 'structs' or type == 'enums' or type == 'flags' or type == 'handles':
+        # printanchor(fp)
+        print(line, file=fp, end='')
+        print('', file=fp)
+        print('ifdef::' + extension + '[]', file=fp)
+        print('or the equivalent', file=fp)
+        print('', file=fp)
+        print('include::../api/' + type + '/' + name + 'KHR.adoc[]', file=fp)
+        print('endif::' + extension + '[]', file=fp)
+        del promoted[name]
+    else:
+        logWarn('Unrecognized promoted type', type, 'for interface', name)
+        print(line, file=fp, end='')
+
+
+def promoteFile(filename, args):
+    logDiag('promote: filename', filename)
+
+    lines = loadFile(filename)
+    if (lines == None):
+        return
+
+    # Output file handle and promote object for this file. There are no race
+    # conditions on overwriting the input, but it is not recommended unless
+    # you have backing store such as git.
+
+    if args.overwrite:
+        outFilename = filename
+    else:
+        outFilename = args.outDir + '/' + os.path.basename(filename) + args.suffix
+
+    try:
+        fp = open(outFilename, 'w', encoding='utf8')
+        True
+    except:
+        logWarn('Cannot open output file', filename, ':', sys.exc_info()[0])
+        return None
+
+    lineno = 0
+    for line in lines:
+        lineno = lineno + 1
+
+        matches = includePat.search(line)
+        if matches != None:
+            type = matches.group('type')
+            name = matches.group('name')
+            if name in promoted:
+                extension = promoted[name]['extension']
+                if extension:
+                    # Promote core interface
+                    promote(line, type, name, promoted[name]['extension'], fp)
+                    continue
+        # Fallthrough
+        print(line, file=fp, end='')
+
+    fp.close()
+
+def promoteAllAdocFiles(folder_to_promote, args):
+    for root, subdirs, files in os.walk(folder_to_promote):
+        for file in files:
+            if file.endswith(".adoc"):
+                file_path = os.path.join(root, file)
+                promoteFile(file_path, args)
+        for subdir in subdirs:
+            sub_folder = os.path.join(root, subdir)
+            print('Sub-folder = %s' % sub_folder)
+            if not (subdir.lower() == "scripts") and not (subdir.lower() == "style"):
+                print('   Parsing = %s' % sub_folder)
+                promoteAllAdocFiles(sub_folder, args)
+            else:
+                print('   Skipping = %s' % sub_folder)
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-diag', action='store', dest='diagFile',
+                        help='Set the diagnostic file')
+    parser.add_argument('-warn', action='store', dest='warnFile',
+                        help='Set the warning file')
+    parser.add_argument('-log', action='store', dest='logFile',
+                        help='Set the log file for both diagnostics and warnings')
+    parser.add_argument('-overwrite', action='store_true',
+                        help='Overwrite input filenames instead of writing different output filenames')
+    parser.add_argument('-out', action='store', dest='outDir',
+                        default='out',
+                        help='Set the output directory in which updated files are generated (default: out)')
+    parser.add_argument('-suffix', action='store', dest='suffix',
+                        default='',
+                        help='Set the suffix added to updated file names (default: none)')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to promote text in')
+    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+
+    args = parser.parse_args()
+
+    setLogFile(True,  True, args.logFile)
+    setLogFile(True, False, args.diagFile)
+    setLogFile(False, True, args.warnFile)
+
+    if args.overwrite:
+        logWarn('promote.py: will overwrite all input files')
+
+    # If no files are specified, promote the entire specification chapters folder
+    if len(args.files) == 0:
+        folder_to_promote = os.getcwd()
+        folder_to_promote += '/chapters'
+        promoteAllAdocFiles(folder_to_promote, args)
+    else:
+        for file in args.files:
+            promoteFile(file, args)
+
+    print('At end, promoted interfaces remaining:')
+    for key in promoted:
+        if promoted[key]['extension'] != None:
+            print('\t' + key)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/pygenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/pygenerator.py
new file mode 100644
index 0000000..6e0e8f9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/pygenerator.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, enquote, write
+from scriptgenerator import ScriptOutputGenerator
+import pprint
+
+class PyOutputGenerator(ScriptOutputGenerator):
+    """PyOutputGenerator - subclass of ScriptOutputGenerator.
+    Generates Python data structures describing API names and
+    relationships."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def beginDict(self, name):
+        """String starting definition of a named dictionary"""
+        return f'{name} = {{'
+
+    def endDict(self):
+        """ String ending definition of a named dictionary"""
+        return '}'
+
+    def writeDict(self, dict, name, printValues = True):
+        """Write dictionary as a Python dictionary with the given name.
+           If printValues is False, just output keys with None values."""
+
+        write(self.beginDict(name), file=self.outFile)
+        for key in sorted(dict):
+            if printValues:
+                value = enquote(dict[key])
+            else:
+                value = 'None'
+            write(f'{enquote(key)} : {value},', file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+    def writeList(self, l, name):
+        """Write list l as a Ruby hash with the given name"""
+
+        self.writeDict(l, name, printValues = False)
+
+    def endFile(self):
+        # Creates the inverse mapping of nonexistent APIs to their aliases.
+        super().createInverseMap()
+
+        # Print out all the dictionaries as Python strings.
+        # Could just print(dict) but that is not human-readable
+        dicts = ( [ self.basetypes,     'basetypes' ],
+                  [ self.consts,        'consts' ],
+                  [ self.enums,         'enums' ],
+                  [ self.flags,         'flags' ],
+                  [ self.funcpointers,  'funcpointers' ],
+                  [ self.protos,        'protos' ],
+                  [ self.structs,       'structs' ],
+                  [ self.handles,       'handles' ],
+                  [ self.defines,       'defines' ],
+                  [ self.typeCategory,  'typeCategory' ],
+                  [ self.alias,         'alias' ],
+                  [ self.nonexistent,   'nonexistent' ],
+                )
+
+        for (dict, name) in dicts:
+            self.writeDict(dict, name)
+
+        # Dictionary containing the relationships of a type
+        # (e.g. a dictionary with each related type as keys).
+        # Could just print(self.mapDict), but prefer something
+        # human-readable and stable-ordered
+        write(self.beginDict('mapDict'), file=self.outFile)
+        for baseType in sorted(self.mapDict.keys()):
+            write('{} : {},'.format(enquote(baseType),
+                pprint.pformat(self.mapDict[baseType])), file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        # List of included feature names
+        self.writeList(sorted(self.features), 'features')
+
+        # Generate feature <-> interface mappings
+        for feature in self.features:
+            self.mapInterfaces(feature)
+
+        # Write out the reverse map from APIs to requiring features
+        write(self.beginDict('requiredBy'), file=self.outFile)
+        for api in sorted(self.apimap):
+            # Sort requirements by first feature in each one
+            deps = sorted(self.apimap[api], key = lambda dep: dep[0])
+            reqs = ', '.join('({}, {})'.format(enquote(dep[0]), enquote(dep[1])) for dep in deps)
+            write('{} : [{}],'.format(enquote(api), reqs), file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        super().endFile()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflib.py b/codegen/vulkan/vulkan-docs-next/scripts/reflib.py
new file mode 100644
index 0000000..db9353d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflib.py
@@ -0,0 +1,664 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Utility functions for automatic ref page generation and other script stuff
+
+import io
+import re
+import sys
+import subprocess
+
+# global errFile, warnFile, diagFile
+
+errFile = sys.stderr
+warnFile = sys.stdout
+diagFile = None
+logSourcefile = None
+logProcname = None
+logLine = None
+
+def unescapeQuotes(s):
+    """Remove \' escape sequences in a string (refpage description)"""
+    return s.replace('\\\'', '\'')
+
+def write(*args, **kwargs ):
+    file = kwargs.pop('file',sys.stdout)
+    end = kwargs.pop('end','\n')
+    file.write(' '.join(str(arg) for arg in args))
+    file.write(end)
+
+def setLogSourcefile(filename):
+    """Metadata which may be printed (if not None) for diagnostic messages"""
+    global logSourcefile
+    logSourcefile = filename
+
+def setLogProcname(procname):
+    global logProcname
+    logProcname = procname
+
+def setLogLine(line):
+    global logLine
+    logLine = line
+
+def logHeader(severity):
+    """Generate prefix for a diagnostic line using metadata and severity"""
+    global logSourcefile, logProcname, logLine
+
+    msg = severity + ': '
+    if logProcname:
+        msg = msg + ' in ' + logProcname
+    if logSourcefile:
+        msg = msg + ' for ' + logSourcefile
+    if logLine:
+        msg = msg + ' line ' + str(logLine)
+    return msg + ' '
+
+def setLogFile(setDiag, setWarn, filename):
+    """Set the file handle to log either or both warnings and diagnostics to.
+
+    - setDiag and setWarn are True if the corresponding handle is to be set.
+    - filename is None for no logging, '-' for stdout, or a pathname."""
+    global diagFile, warnFile
+
+    if filename is None:
+        return
+
+    if filename == '-':
+        fp = sys.stdout
+    else:
+        fp = open(filename, 'w', encoding='utf-8')
+
+    if setDiag:
+        diagFile = fp
+    if setWarn:
+        warnFile = fp
+
+def logDiag(*args, **kwargs):
+    file = kwargs.pop('file', diagFile)
+    end = kwargs.pop('end','\n')
+    if file is not None:
+        file.write(logHeader('DIAG') + ' '.join(str(arg) for arg in args))
+        file.write(end)
+
+def logWarn(*args, **kwargs):
+    file = kwargs.pop('file', warnFile)
+    end = kwargs.pop('end','\n')
+    if file is not None:
+        file.write(logHeader('WARN') + ' '.join(str(arg) for arg in args))
+        file.write(end)
+
+def logErr(*args, **kwargs):
+    file = kwargs.pop('file', errFile)
+    end = kwargs.pop('end','\n')
+
+    strfile = io.StringIO()
+    strfile.write(logHeader('ERROR') + ' '.join(str(arg) for arg in args))
+    strfile.write(end)
+
+    if file is not None:
+        file.write(strfile.getvalue())
+    raise UserWarning(strfile.getvalue())
+
+def isempty(s):
+    """Return True if s is nothing but white space, False otherwise"""
+    return len(''.join(s.split())) == 0
+
+class pageInfo:
+    """Information about a ref page relative to the file it is extracted from."""
+    def __init__(self):
+        self.extractPage = True
+        """True if page should be extracted"""
+
+        self.Warning  = None
+        """string warning if page is suboptimal or cannot be generated"""
+
+        self.embed    = False
+        """False or the name of the ref page this include is embedded within"""
+
+        self.type     = None
+        """refpage type attribute - 'structs', 'protos', 'freeform', etc."""
+
+        self.name     = None
+        """struct/proto/enumerant/etc. name"""
+
+        self.desc     = None
+        """short description of ref page"""
+
+        self.begin    = None
+        """index of first line of the page (heuristic or // refBegin)"""
+
+        self.include  = None
+        """index of include:: line defining the page"""
+
+        self.param    = None
+        """index of first line of parameter/member definitions"""
+
+        self.body     = None
+        """index of first line of body text"""
+
+        self.validity = None
+        """index of validity include"""
+
+        self.end      = None
+        """index of last line of the page (heuristic validity include, or // refEnd)"""
+
+        self.alias    = ''
+        """aliases of this name, if supplied, or ''"""
+
+        self.refs     = ''
+        """cross-references on // refEnd line, if supplied"""
+
+        self.spec     = None
+        """'spec' attribute in refpage open block, if supplied, or None for the default ('api') type"""
+
+        self.anchor   = None
+        """'anchor' attribute in refpage open block, if supplied, or inferred to be the same as the 'name'"""
+
+def printPageInfoField(desc, line, file):
+    """Print a single field of a pageInfo struct, possibly None.
+
+    - desc - string description of field
+    - line - field value or None
+    - file - indexed by line"""
+    if line is not None:
+        logDiag(desc + ':', line + 1, '\t-> ', file[line], end='')
+    else:
+        logDiag(desc + ':', line)
+
+def printPageInfo(pi, file):
+    """Print out fields of a pageInfo struct
+
+    - pi - pageInfo
+    - file - indexed by pageInfo"""
+    logDiag('TYPE:   ', pi.type)
+    logDiag('NAME:   ', pi.name)
+    logDiag('WARNING:', pi.Warning)
+    logDiag('EXTRACT:', pi.extractPage)
+    logDiag('EMBED:  ', pi.embed)
+    logDiag('DESC:   ', pi.desc)
+    printPageInfoField('BEGIN   ', pi.begin,    file)
+    printPageInfoField('INCLUDE ', pi.include,  file)
+    printPageInfoField('PARAM   ', pi.param,    file)
+    printPageInfoField('BODY    ', pi.body,     file)
+    printPageInfoField('VALIDITY', pi.validity, file)
+    printPageInfoField('END     ', pi.end,      file)
+    logDiag('REFS: "' + pi.refs + '"')
+
+def prevPara(file, line):
+    """Go back one paragraph from the specified line and return the line number
+    of the first line of that paragraph.
+
+    Paragraphs are delimited by blank lines. It is assumed that the
+    current line is the first line of a paragraph.
+
+    - file is an array of strings
+    - line is the starting point (zero-based)"""
+    # Skip over current paragraph
+    while (line >= 0 and not isempty(file[line])):
+        line = line - 1
+    # Skip over white space
+    while (line >= 0 and isempty(file[line])):
+        line = line - 1
+    # Skip to first line of previous paragraph
+    while (line >= 1 and not isempty(file[line-1])):
+        line = line - 1
+    return line
+
+def nextPara(file, line):
+    """Go forward one paragraph from the specified line and return the line
+    number of the first line of that paragraph.
+
+    Paragraphs are delimited by blank lines. It is assumed that the
+    current line is standalone (which is bogus).
+
+    - file is an array of strings
+    - line is the starting point (zero-based)"""
+    maxLine = len(file) - 1
+    # Skip over current paragraph
+    while (line != maxLine and not isempty(file[line])):
+        line = line + 1
+    # Skip over white space
+    while (line != maxLine and isempty(file[line])):
+        line = line + 1
+    return line
+
+def lookupPage(pageMap, name):
+    """Return (creating if needed) the pageInfo entry in pageMap for name"""
+    if name not in pageMap:
+        pi = pageInfo()
+        pi.name = name
+        pageMap[name] = pi
+    else:
+        pi = pageMap[name]
+    return pi
+
+def loadFile(filename):
+    """Load a file into a list of strings. Return the (list, newline_string) or (None, None) on failure"""
+    newline_string = "\n"
+    try:
+        with open(filename, 'rb') as fp:
+            contents = fp.read()
+            if contents.count(b"\r\n") > 1:
+                newline_string = "\r\n"
+
+        with open(filename, 'r', encoding='utf-8') as fp:
+            lines = fp.readlines()
+    except:
+        logWarn('Cannot open file', filename, ':', sys.exc_info()[0])
+        return None, None
+
+    return lines, newline_string
+
+def clampToBlock(line, minline, maxline):
+    """Clamp a line number to be in the range [minline,maxline].
+
+    If the line number is None, just return it.
+    If minline is None, do not clamp to that value."""
+    if line is None:
+        return line
+    if minline and line < minline:
+        return minline
+    if line > maxline:
+        return maxline
+
+    return line
+
+def fixupRefs(pageMap, specFile, file):
+    """Fill in missing fields in pageInfo structures, to the extent they can be
+    inferred.
+
+    - pageMap - dictionary of pageInfo structures
+    - specFile - filename
+    - file - list of strings making up the file, indexed by pageInfo"""
+    # All potential ref pages are now in pageMap. Process them to
+    # identify actual page start/end/description boundaries, if
+    # not already determined from the text.
+    for name in sorted(pageMap.keys()):
+        pi = pageMap[name]
+
+        # # If nothing is found but an include line with no begin, validity,
+        # # or end, this is not intended as a ref page (yet). Set the begin
+        # # line to the include line, so autogeneration can at least
+        # # pull the include out, but mark it not to be extracted.
+        # # Examples include the host sync table includes in
+        # # chapters/fundamentals.adoc and the table of Vk*Flag types in
+        # # appendices/boilerplate.adoc.
+        # if pi.begin is None and pi.validity is None and pi.end is None:
+        #     pi.begin = pi.include
+        #     pi.extractPage = False
+        #     pi.Warning = 'No begin, validity, or end lines identified'
+        #     continue
+
+        # Using open block delimiters, ref pages must *always* have a
+        # defined begin and end. If either is undefined, that is fatal.
+        if pi.begin is None:
+            pi.extractPage = False
+            pi.Warning = 'Can\'t identify begin of ref page open block'
+            continue
+
+        if pi.end is None:
+            pi.extractPage = False
+            pi.Warning = 'Can\'t identify end of ref page open block'
+            continue
+
+        # If there is no description of the page, infer one from the type
+        if pi.desc is None:
+            if pi.type is not None:
+                # pi.desc = pi.type[0:len(pi.type)-1] + ' (no short description available)'
+                pi.Warning = 'No short description available; could infer from the type and name'
+            else:
+                pi.extractPage = False
+                pi.Warning = 'No short description available, cannot infer from the type'
+                continue
+
+        # Try to determine where the parameter and body sections of the page
+        # begin. funcpointer, proto, and struct pages infer the location of
+        # the parameter and body sections. Other pages infer the location of
+        # the body, but have no parameter sections.
+        #
+        # Probably some other types infer this as well - refer to list of
+        # all page types in genRef.py:emitPage()
+        if pi.include is not None:
+            if pi.type in ['funcpointers', 'protos', 'structs']:
+                pi.param = nextPara(file, pi.include)
+                if pi.body is None:
+                    pi.body = nextPara(file, pi.param)
+            else:
+                if pi.body is None:
+                    pi.body = nextPara(file, pi.include)
+        else:
+            pi.Warning = 'Page does not have an API definition include::'
+
+        # It is possible for the inferred param and body lines to run past
+        # the end of block, if, for example, there is no parameter section.
+        pi.param = clampToBlock(pi.param, pi.include, pi.end)
+        pi.body = clampToBlock(pi.body, pi.param, pi.end)
+
+        # We can get to this point with .include, .param, and .validity
+        # all being None, indicating those sections were not found.
+
+        logDiag('fixupRefs: after processing,', pi.name, 'looks like:')
+        printPageInfo(pi, file)
+
+    # Now that all the valid pages have been found, try to make some
+    # inferences about invalid pages.
+    #
+    # If a reference without a .end is entirely inside a valid reference,
+    # then it is intentionally embedded - may want to create an indirect
+    # page that links into the embedding page. This is done by a very
+    # inefficient double loop, but the loop depth is small.
+    for name in sorted(pageMap.keys()):
+        pi = pageMap[name]
+
+        if pi.end is None:
+            for embedName in sorted(pageMap.keys()):
+                logDiag('fixupRefs: comparing', pi.name, 'to', embedName)
+                embed = pageMap[embedName]
+                # Do not check embeddings which are themselves invalid
+                if not embed.extractPage:
+                    logDiag('Skipping check for embedding in:', embed.name)
+                    continue
+                if embed.begin is None or embed.end is None:
+                    logDiag('fixupRefs:', name + ':',
+                            'can\'t compare to unanchored ref:', embed.name,
+                            'in', specFile, 'at line', pi.include )
+                    printPageInfo(pi, file)
+                    printPageInfo(embed, file)
+                # If an embed is found, change the error to a warning
+                elif (pi.include is not None and pi.include >= embed.begin and
+                      pi.include <= embed.end):
+                    logDiag('fixupRefs: Found embed for:', name,
+                            'inside:', embedName,
+                            'in', specFile, 'at line', pi.include )
+                    pi.embed = embed.name
+                    pi.Warning = 'Embedded in definition for ' + embed.name
+                    break
+                else:
+                    logDiag('fixupRefs: No embed match for:', name,
+                            'inside:', embedName, 'in', specFile,
+                            'at line', pi.include)
+
+
+def compatiblePageTypes(refpage_type, pagemap_type):
+    """Returns whether two refpage 'types' (categories) are compatible -
+       this is only true for 'consts' and 'enums' types."""
+
+    constsEnums = [ 'consts', 'enums' ]
+
+    if refpage_type == pagemap_type:
+        return True
+    if refpage_type in constsEnums and pagemap_type in constsEnums:
+        return True
+    return False
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+endifPat   = re.compile(r'^endif::(?P<condition>[\w_+,]+)\[\]')
+beginPat   = re.compile(r'^\[open,(?P<attribs>refpage=.*)\]')
+# attribute key/value pairs of an open block
+attribStr  = r"([a-z]+)='([^'\\]*(?:\\.[^'\\]*)*)'"
+attribPat  = re.compile(attribStr)
+bodyPat    = re.compile(r'^// *refBody')
+errorPat   = re.compile(r'^// *refError')
+
+# This regex transplanted from check_spec_links
+# It looks for either OpenXR or Vulkan generated file conventions, and for
+# the api/validity include (generated_type), protos/struct/etc path
+# (category), and API name (entity_name). It could be put into the API
+# conventions object.
+INCLUDE = re.compile(
+        r'include::(?P<directory_traverse>((../){1,4}|\{generated\}/)(generated/)?)(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).adoc[\[][\]]')
+
+def findRefs(file, filename):
+    """Identify reference pages in a list of strings, returning a dictionary of
+    pageInfo entries for each one found, or None on failure."""
+    setLogSourcefile(filename)
+    setLogProcname('findRefs')
+
+    # To reliably detect the open blocks around reference pages, we must
+    # first detect the '[open,refpage=...]' markup delimiting the block;
+    # skip past the '--' block delimiter on the next line; and identify the
+    # '--' block delimiter closing the page.
+    # This cannot be done solely with pattern matching, and requires state to
+    # track 'inside/outside block'.
+    # When looking for open blocks, possible states are:
+    #   'outside' - outside a block
+    #   'start' - have found the '[open...]' line
+    #   'inside' - have found the following '--' line
+    openBlockState = 'outside'
+
+    # Dictionary of interesting line numbers and strings related to an API
+    # name
+    pageMap = {}
+
+    numLines = len(file)
+    line = 0
+
+    # Track the pageInfo object corresponding to the current open block
+    pi = None
+
+    while (line < numLines):
+        setLogLine(line)
+
+        # Only one of the patterns can possibly match. Add it to
+        # the dictionary for that name.
+
+        # [open,refpage=...] starting a refpage block
+        matches = beginPat.search(file[line])
+        if matches is not None:
+            logDiag('Matched open block pattern')
+            attribs = matches.group('attribs')
+
+            # If the previous open block was not closed, raise an error
+            if openBlockState != 'outside':
+                logErr('Nested open block starting at line', line, 'of',
+                       filename)
+
+            openBlockState = 'start'
+
+            # Parse the block attributes
+            matches = attribPat.findall(attribs)
+
+            # Extract each attribute
+            name = None
+            desc = None
+            refpage_type = None
+            spec_type = None
+            anchor = None
+            alias = None
+            xrefs = None
+
+            for (key,value) in matches:
+                logDiag('got attribute', key, '=', value)
+                if key == 'refpage':
+                    name = value
+                elif key == 'desc':
+                    desc = unescapeQuotes(value)
+                elif key == 'type':
+                    refpage_type = value
+                elif key == 'spec':
+                    spec_type = value
+                elif key == 'anchor':
+                    anchor = value
+                elif key == 'alias':
+                    alias = value
+                elif key == 'xrefs':
+                    xrefs = value
+                else:
+                    logWarn('unknown open block attribute:', key)
+
+            if name is None or desc is None or refpage_type is None:
+                logWarn('missing one or more required open block attributes:'
+                        'refpage, desc, or type')
+                # Leave pi is None so open block delimiters are ignored
+            else:
+                pi = lookupPage(pageMap, name)
+                pi.desc = desc
+                # Must match later type definitions in interface/validity includes
+                pi.type = refpage_type
+                pi.spec = spec_type
+                pi.anchor = anchor
+                if alias:
+                    pi.alias = alias
+                if xrefs:
+                    pi.refs = xrefs
+                logDiag('open block for', name, 'added DESC =', desc,
+                        'TYPE =', refpage_type, 'ALIAS =', alias,
+                        'XREFS =', xrefs, 'SPEC =', spec_type,
+                        'ANCHOR =', anchor)
+
+            line = line + 1
+            continue
+
+        # '--' starting or ending and open block
+        if file[line].rstrip() == '--':
+            if openBlockState == 'outside':
+                # Only refpage open blocks should use -- delimiters
+                logWarn('Unexpected double-dash block delimiters')
+            elif openBlockState == 'start':
+                # -- delimiter following [open,refpage=...]
+                openBlockState = 'inside'
+
+                if pi is None:
+                    logWarn('no pageInfo available for opening -- delimiter')
+                else:
+                    pi.begin = line + 1
+                    logDiag('opening -- delimiter: added BEGIN =', pi.begin)
+            elif openBlockState == 'inside':
+                # -- delimiter ending an open block
+                if pi is None:
+                    logWarn('no pageInfo available for closing -- delimiter')
+                else:
+                    pi.end = line - 1
+                    logDiag('closing -- delimiter: added END =', pi.end)
+
+                openBlockState = 'outside'
+                pi = None
+            else:
+                logWarn('unknown openBlockState:', openBlockState)
+
+            line = line + 1
+            continue
+
+        matches = INCLUDE.search(file[line])
+        if matches is not None:
+            # Something got included, not sure what yet.
+            gen_type = matches.group('generated_type')
+            refpage_type = matches.group('category')
+            name = matches.group('entity_name')
+
+            # This will never match in OpenCL
+            if gen_type == 'validity':
+                logDiag('Matched validity pattern')
+                if pi is not None:
+                    if pi.type and not compatiblePageTypes(refpage_type, pi.type):
+                        logWarn('ERROR: pageMap[' + name + '] type:',
+                                pi.type, 'does not match type:', refpage_type)
+                    pi.type = refpage_type
+                    pi.validity = line
+                    logDiag('added TYPE =', pi.type, 'VALIDITY =', pi.validity)
+                else:
+                    logWarn('validity include:: line NOT inside block')
+
+                line = line + 1
+                continue
+
+            if gen_type == 'api':
+                logDiag('Matched include pattern')
+                if pi is not None:
+                    if pi.include is not None:
+                        logDiag('found multiple includes for this block')
+                    if pi.type and not compatiblePageTypes(refpage_type, pi.type):
+                        logWarn('ERROR: pageMap[' + name + '] type:',
+                                pi.type, 'does not match type:', refpage_type)
+                    pi.type = refpage_type
+                    pi.include = line
+                    logDiag('added TYPE =', pi.type, 'INCLUDE =', pi.include)
+                else:
+                    logWarn('interface include:: line NOT inside block')
+
+                line = line + 1
+                continue
+
+            logDiag('ignoring unrecognized include line ', matches.group())
+
+        # Vulkan 1.1 markup allows the last API include construct to be
+        # followed by an asciidoctor endif:: construct (and also preceded,
+        # at some distance).
+        # This looks for endif:: immediately following an include:: line
+        # and, if found, moves the include boundary to this line.
+        matches = endifPat.search(file[line])
+        if matches is not None and pi is not None:
+            if pi.include == line - 1:
+                logDiag('Matched endif pattern following include; moving include')
+                pi.include = line
+            else:
+                logDiag('Matched endif pattern (not following include)')
+
+            line = line + 1
+            continue
+
+        matches = bodyPat.search(file[line])
+        if matches is not None:
+            logDiag('Matched // refBody pattern')
+            if pi is not None:
+                pi.body = line
+                logDiag('added BODY =', pi.body)
+            else:
+                logWarn('// refBody line NOT inside block')
+
+            line = line + 1
+            continue
+
+        # OpenCL spec uses // refError to tag "validity" (Errors) language,
+        # instead of /validity/ includes.
+        matches = errorPat.search(file[line])
+        if matches is not None:
+            logDiag('Matched // refError pattern')
+            if pi is not None:
+                pi.validity = line
+                logDiag('added VALIDITY (refError) =', pi.validity)
+            else:
+                logWarn('// refError line NOT inside block')
+
+            line = line + 1
+            continue
+
+        line = line + 1
+        continue
+
+    if pi is not None:
+        logErr('Unclosed open block at EOF!')
+
+    setLogSourcefile(None)
+    setLogProcname(None)
+    setLogLine(None)
+
+    return pageMap
+
+
+def getBranch():
+    """Determine current git branch
+
+    Returns (branch name, ''), or (None, stderr output) if the branch name
+    cannot be determined"""
+
+    command = [ 'git', 'symbolic-ref', '--short', 'HEAD' ]
+    results = subprocess.run(command,
+                             stdout=subprocess.PIPE,
+                             stderr=subprocess.PIPE)
+
+    # git command failed
+    if len(results.stderr) > 0:
+        return (None, results.stderr)
+
+    # Remove newline from output and convert to a string
+    branch = results.stdout.rstrip().decode()
+    if len(branch) > 0:
+        # Strip trailing newline
+        branch = results.stdout.decode()[0:-1]
+
+    return (branch, '')
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/.gitignore b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/.gitignore
new file mode 100644
index 0000000..bc62deb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/.gitignore
@@ -0,0 +1,5 @@
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+results/
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/README.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/README.adoc
new file mode 100644
index 0000000..2a57e39
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/README.adoc
@@ -0,0 +1,22 @@
+// Copyright 2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Reflow Tests
+
+This directory contains test source and expectation files for the `reflow.py`
+script. These files are used by the tests in `test_reflow.py`, which is run as
+part of `pytest`.
+
+The tests reflow each source file (`src-<name>.adoc`) with multiple
+configurations (with or without VUID assignment, with or without reflowing the
+text), and match them against the expectation (`expect-<name>-<options>.adoc`).
+
+After running `pytest`, if any `test_reflow.py` test fails for example because
+the reflow script has been modified to function differently, the test results
+can be found under `results/<options>/src-<name>.adoc` and needs to be manually
+reviewed for correctness. Once correctness of new results are verified, the
+expectations can be updated with:
+
+----
+$ ./update-expectations
+----
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-default.adoc
new file mode 100644
index 0000000..1643380
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-default.adoc
@@ -0,0 +1,44 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * [[VUID-{refpage}-pRegions-10000]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcBuffer-10001]]
+    pname:srcBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-10002]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00178]]
+    If pname:dstImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-10003]]
+    pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-dstImageLayout-10004]]
+    pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00181]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow-novuid.adoc
new file mode 100644
index 0000000..01e8fd4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow-novuid.adoc
@@ -0,0 +1,32 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]] pname:dstImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00178]]
+    If pname:dstImage is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * pname:dstImageLayout must: specify the layout of the image subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00181]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow.adoc
new file mode 100644
index 0000000..0cceaf1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-noreflow.adoc
@@ -0,0 +1,37 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * [[VUID-{refpage}-pRegions-10000]]
+    The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * [[VUID-{refpage}-srcBuffer-10001]]
+    pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-dstImage-10002]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]] pname:dstImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00178]]
+    If pname:dstImage is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-10003]]
+    pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-{refpage}-dstImageLayout-10004]]
+    pname:dstImageLayout must: specify the layout of the image subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00181]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-novuid.adoc
new file mode 100644
index 0000000..c22e7bc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-common-validity-novuid.adoc
@@ -0,0 +1,39 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * pname:srcBuffer must: have been created with
+    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00178]]
+    If pname:dstImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * pname:dstImageLayout must: specify the layout of the image subresources
+    of pname:dstImage specified in pname:pRegions at the time this command
+    is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00181]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-default.adoc
new file mode 100644
index 0000000..b7f500b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-default.adoc
@@ -0,0 +1,35 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+    , or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow-novuid.adoc
new file mode 100644
index 0000000..b7f500b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow-novuid.adoc
@@ -0,0 +1,35 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+    , or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow.adoc
new file mode 100644
index 0000000..b7f500b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-noreflow.adoc
@@ -0,0 +1,35 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+    , or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-novuid.adoc
new file mode 100644
index 0000000..b7f500b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-ifdef-in-vu-novuid.adoc
@@ -0,0 +1,35 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+    , or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-default.adoc
new file mode 100644
index 0000000..43c1f99
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-default.adoc
@@ -0,0 +1,24 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Title
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-10000]]
+    If pname:image is non-sparse then the following must: hold:
+
+      {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow-novuid.adoc
new file mode 100644
index 0000000..e96c586
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow-novuid.adoc
@@ -0,0 +1,22 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Title
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * If pname:image is non-sparse then the following must: hold:
+
+      {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow.adoc
new file mode 100644
index 0000000..911abe6
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-noreflow.adoc
@@ -0,0 +1,23 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Title
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-10000]]
+    If pname:image is non-sparse then the following must: hold:
+
+      {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-novuid.adoc
new file mode 100644
index 0000000..adff515
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-math-block-in-vu-novuid.adoc
@@ -0,0 +1,23 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Title
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * If pname:image is non-sparse then the following must: hold:
+
+      {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-default.adoc
new file mode 100644
index 0000000..bde5367
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-default.adoc
@@ -0,0 +1,43 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>>
+     feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or
+     equal to Version 1.3
+endif::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline,
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+    and none of the following is enabled:
+ifdef::VK_AMD_mixed_attachment_samples[]
+  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the <<features-multisampledRenderToSingleSampled,
+     pname:multisampledRenderToSingleSampled>> feature
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+
++
+then pname:rasterizationSamples for the currently bound graphics pipeline
+must: be the same as the current subpass color and/or depth/stencil
+attachments
+  * [[VUID-{refpage}-None-10000]]
+    Some VU that follows
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow-novuid.adoc
new file mode 100644
index 0000000..52c7ab1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow-novuid.adoc
@@ -0,0 +1,37 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>> feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or equal to Version 1.3
+endif::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline,
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+    and none of the following is enabled:
+ifdef::VK_AMD_mixed_attachment_samples[]
+  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the <<features-multisampledRenderToSingleSampled, pname:multisampledRenderToSingleSampled>> feature
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+
++
+then pname:rasterizationSamples for the currently bound graphics pipeline must: be the same as the current subpass color and/or depth/stencil attachments
+  * Some VU that follows
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow.adoc
new file mode 100644
index 0000000..bb3cc14
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-noreflow.adoc
@@ -0,0 +1,38 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>> feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or equal to Version 1.3
+endif::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline,
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+    and none of the following is enabled:
+ifdef::VK_AMD_mixed_attachment_samples[]
+  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the <<features-multisampledRenderToSingleSampled, pname:multisampledRenderToSingleSampled>> feature
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+
++
+then pname:rasterizationSamples for the currently bound graphics pipeline must: be the same as the current subpass color and/or depth/stencil attachments
+  * [[VUID-{refpage}-None-10000]]
+    Some VU that follows
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-novuid.adoc
new file mode 100644
index 0000000..a59bf21
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-nested-lists-in-vu-novuid.adoc
@@ -0,0 +1,42 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>>
+     feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or
+     equal to Version 1.3
+endif::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline,
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+    and none of the following is enabled:
+ifdef::VK_AMD_mixed_attachment_samples[]
+  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the <<features-multisampledRenderToSingleSampled,
+     pname:multisampledRenderToSingleSampled>> feature
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+
++
+then pname:rasterizationSamples for the currently bound graphics pipeline
+must: be the same as the current subpass color and/or depth/stencil
+attachments
+  * Some VU that follows
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-default.adoc
new file mode 100644
index 0000000..78d53c9
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-default.adoc
@@ -0,0 +1,87 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+
+// Common Valid Usage
+
+  * [[VUID-{refpage}-{imageparam}-10000]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:imageOffset.y must: be `0` and
+    pname:imageExtent.height must: be `1`
+  * [[VUID-{refpage}-{imagesubresource}-10001]]
+    For each element of pname:pRegions, pname:imageOffset.z and
+    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:{imagesubresource} of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10002]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
+    `1`
+  * [[VUID-{refpage}-{imageparam}-10003]]
+    For each element of pname:pRegions, pname:bufferRowLength must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10004]]
+    For each element of pname:pRegions, pname:bufferImageHeight must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10005]]
+    For each element of pname:pRegions, pname:imageOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10006]]
+    For each element of pname:pRegions, pname:imageOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10007]]
+    For each element of pname:pRegions, pname:imageOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10008]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.x
+    and pname:extent.width does not equal the width of the subresource
+    specified by pname:srcSubresource, pname:extent.width must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10009]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.y
+    and pname:extent.height does not equal the height of the subresource
+    specified by pname:srcSubresource, pname:extent.height must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10010]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.z
+    and pname:extent.depth does not equal the depth of the subresource
+    specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imagesubresource}-10011]]
+    For each element of pname:pRegions, pname:{imagesubresource}.aspectMask
+    must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-10012]]
+    If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * [[VUID-{refpage}-{imageparam}-10013]]
+    If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:{imagesubresource}.aspectMask
+    must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-10014]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each
+    element of pname:pRegions, pname:{imagesubresource}.baseArrayLayer must:
+    be `0` and pname:{imagesubresource}.layerCount must: be `1`
+  * [[VUID-{refpage}-{imageparam}-10015]]
+    For each element of pname:pRegions, pname:bufferRowLength divided by the
+    <<formats-compatibility-classes,texel block extent width>> and then
+    multiplied by the texel block size of pname:{imageparam} must: be less
+    than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow-novuid.adoc
new file mode 100644
index 0000000..4f16b0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow-novuid.adoc
@@ -0,0 +1,47 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+
+// Common Valid Usage
+
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each element
+    of pname:pRegions, pname:imageOffset.y must: be `0` and pname:imageExtent.height must: be `1`
+  * For each element of pname:pRegions, pname:imageOffset.z and
+    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the specified pname:{imagesubresource} of pname:{imageparam}
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions, pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be `1`
+  * For each element of pname:pRegions, pname:bufferRowLength must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:bufferImageHeight must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.x
+    and pname:extent.width does not equal the width of the subresource specified by pname:srcSubresource, pname:extent.width must: be a multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.y
+    and pname:extent.height does not equal the height of the subresource specified by pname:srcSubresource, pname:extent.height must: be a multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.z
+    and pname:extent.depth does not equal the depth of the subresource specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} has a elink:VkFormat with <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each element of
+    pname:pRegions, pname:{imagesubresource}.baseArrayLayer must: be `0` and pname:{imagesubresource}.layerCount must: be `1`
+  * For each element of pname:pRegions, pname:bufferRowLength divided by the <<formats-compatibility-classes,texel block extent width>> and then multiplied by the texel block size of pname:{imageparam} must: be less than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow.adoc
new file mode 100644
index 0000000..566d9a8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-noreflow.adoc
@@ -0,0 +1,63 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+
+// Common Valid Usage
+
+  * [[VUID-{refpage}-{imageparam}-10000]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each element
+    of pname:pRegions, pname:imageOffset.y must: be `0` and pname:imageExtent.height must: be `1`
+  * [[VUID-{refpage}-{imagesubresource}-10001]]
+    For each element of pname:pRegions, pname:imageOffset.z and
+    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the specified pname:{imagesubresource} of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10002]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions, pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be `1`
+  * [[VUID-{refpage}-{imageparam}-10003]]
+    For each element of pname:pRegions, pname:bufferRowLength must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10004]]
+    For each element of pname:pRegions, pname:bufferImageHeight must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10005]]
+    For each element of pname:pRegions, pname:imageOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10006]]
+    For each element of pname:pRegions, pname:imageOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10007]]
+    For each element of pname:pRegions, pname:imageOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10008]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.x
+    and pname:extent.width does not equal the width of the subresource specified by pname:srcSubresource, pname:extent.width must: be a multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10009]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.y
+    and pname:extent.height does not equal the height of the subresource specified by pname:srcSubresource, pname:extent.height must: be a multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imageparam}-10010]]
+    For each element of pname:pRegions, if the sum of pname:imageOffset.z
+    and pname:extent.depth does not equal the depth of the subresource specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * [[VUID-{refpage}-{imagesubresource}-10011]]
+    For each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-10012]]
+    If pname:{imageparam} has a elink:VkFormat with <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * [[VUID-{refpage}-{imageparam}-10013]]
+    If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-{imageparam}-10014]]
+    If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each element of
+    pname:pRegions, pname:{imagesubresource}.baseArrayLayer must: be `0` and pname:{imagesubresource}.layerCount must: be `1`
+  * [[VUID-{refpage}-{imageparam}-10015]]
+    For each element of pname:pRegions, pname:bufferRowLength divided by the <<formats-compatibility-classes,texel block extent width>> and then multiplied by the texel block size of pname:{imageparam} must: be less than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-novuid.adoc
new file mode 100644
index 0000000..32a30b8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-attribute-novuid.adoc
@@ -0,0 +1,71 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+
+// Common Valid Usage
+
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each
+    element of pname:pRegions, pname:imageOffset.y must: be `0` and
+    pname:imageExtent.height must: be `1`
+  * For each element of pname:pRegions, pname:imageOffset.z and
+    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the
+    specified pname:{imagesubresource} of pname:{imageparam}
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or
+    ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
+    pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
+    `1`
+  * For each element of pname:pRegions, pname:bufferRowLength must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:bufferImageHeight must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.x
+    and pname:extent.width does not equal the width of the subresource
+    specified by pname:srcSubresource, pname:extent.width must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.y
+    and pname:extent.height does not equal the height of the subresource
+    specified by pname:srcSubresource, pname:extent.height must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.z
+    and pname:extent.depth does not equal the depth of the subresource
+    specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:{imagesubresource}.aspectMask
+    must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:{imagesubresource}.aspectMask
+    must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each
+    element of pname:pRegions, pname:{imagesubresource}.baseArrayLayer must:
+    be `0` and pname:{imagesubresource}.layerCount must: be `1`
+  * For each element of pname:pRegions, pname:bufferRowLength divided by the
+    <<formats-compatibility-classes,texel block extent width>> and then
+    multiplied by the texel block size of pname:{imageparam} must: be less
+    than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-default.adoc
new file mode 100644
index 0000000..558bbc1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-default.adoc
@@ -0,0 +1,95 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-10000]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-10001]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-10002]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-10003]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-10004]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-10005]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow-novuid.adoc
new file mode 100644
index 0000000..728e36b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow-novuid.adoc
@@ -0,0 +1,72 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * pname:image must: not have a compressed or depth/stencil format
+  * pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow.adoc
new file mode 100644
index 0000000..e99e33f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-noreflow.adoc
@@ -0,0 +1,78 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-10000]]
+    pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-10001]]
+    If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-10002]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-10003]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-10004]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-10005]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-novuid.adoc
new file mode 100644
index 0000000..034729f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-new-vuid-novuid.adoc
@@ -0,0 +1,89 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * pname:image must: not have a compressed or depth/stencil format
+  * pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-default.adoc
new file mode 100644
index 0000000..39efd61
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-default.adoc
@@ -0,0 +1,33 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,10",options="header"]
+|====
+| Numeric format | SPIR-V _Sampled Type_ | Description
+| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+3+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an
+underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has
+etext:m groups of components (which may or may not be stored in separate
+_planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow-novuid.adoc
new file mode 100644
index 0000000..0251a4c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow-novuid.adoc
@@ -0,0 +1,30 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,10",options="header"]
+|====
+| Numeric format | SPIR-V _Sampled Type_ | Description
+| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+3+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has etext:m groups of components (which may or may not be stored in separate _planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow.adoc
new file mode 100644
index 0000000..0251a4c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-noreflow.adoc
@@ -0,0 +1,30 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,10",options="header"]
+|====
+| Numeric format | SPIR-V _Sampled Type_ | Description
+| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+3+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has etext:m groups of components (which may or may not be stored in separate _planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-novuid.adoc
new file mode 100644
index 0000000..39efd61
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-table-novuid.adoc
@@ -0,0 +1,33 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,10",options="header"]
+|====
+| Numeric format | SPIR-V _Sampled Type_ | Description
+| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+3+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an
+underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has
+etext:m groups of components (which may or may not be stored in separate
+_planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-default.adoc
new file mode 100644
index 0000000..9e3c876
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-default.adoc
@@ -0,0 +1,53 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be
+explicitly queried before use to ensure they are supported by the
+implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the
+implementation are queried individually using the
+flink:vkGetPhysicalDeviceFormatProperties command.
+
+  * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+    tempor incididunt ut labore et dolore magna aliqua.
+    Turpis egestas pretium aenean pharetra magna ac placerat.
+    Eros donec ac odio tempor orci.
+    Vel facilisis volutpat est velit egestas.
+    Rhoncus urna neque viverra justo nec ultrices.
+    Sollicitudin ac orci phasellus egestas tellus rutrum tellus
+    pellentesque.
+  * Natoque penatibus et magnis dis parturient.
+    Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat.
+    Donec et odio pellentesque diam volutpat commodo sed egestas.
+    Tortor pretium viverra suspendisse potenti nullam ac tortor vitae.
+    Sed arcu non odio euismod lacinia at quis.
+  ** Convallis a cras semper auctor neque vitae tempus quam pellentesque.
+     Aliquam etiam erat velit scelerisque in dictum non consectetur a.
+     Pretium quam vulputate dignissim suspendisse in est ante.
+     Leo a diam sollicitudin tempor id eu nisl nunc mi.
+     Quis lectus nulla at volutpat diam.
+  ** Neque vitae tempus quam pellentesque nec nam aliquam sem et.
+     Adipiscing commodo elit at imperdiet.
+     Risus in hendrerit gravida rutrum quisque non.
+     Sapien faucibus et molestie ac feugiat.
+     Ac ut consequat semper viverra nam libero justo laoreet sit.
+     Elit scelerisque mauris pellentesque pulvinar pellentesque habitant
+     morbi.
+  *** Euismod quis viverra nibh cras.
+      Vel eros donec ac odio tempor.
+      Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit
+      lectus.
+      Ullamcorper velit sed ullamcorper morbi tincidunt.
+      Sed pulvinar proin gravida hendrerit lectus a.
+      In nulla posuere sollicitudin aliquam ultrices.
+      Tempor id eu nisl nunc mi ipsum faucibus.
+      Non curabitur gravida arcu ac tortor dignissim convallis aenean et.
+  * Pretium quam vulputate dignissim suspendisse in est.
+    Amet volutpat consequat mauris nunc congue nisi vitae suscipit.
+    Risus at ultrices mi tempus imperdiet nulla malesuada.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow-novuid.adoc
new file mode 100644
index 0000000..e4e0183
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow-novuid.adoc
@@ -0,0 +1,24 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be explicitly queried before use to ensure they are supported by the implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the implementation are queried individually using the flink:vkGetPhysicalDeviceFormatProperties command.
+
+  * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Turpis egestas pretium aenean pharetra magna ac placerat. Eros donec ac odio tempor orci. Vel facilisis volutpat est velit egestas. Rhoncus urna neque viverra justo nec ultrices. Sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque.
+  * Natoque penatibus et magnis dis parturient. Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat. Donec et odio pellentesque diam volutpat commodo sed egestas. Tortor pretium viverra suspendisse potenti nullam ac tortor vitae. Sed arcu non odio euismod lacinia at quis.
+  ** Convallis a cras semper auctor
+     neque vitae tempus quam pellentesque. Aliquam etiam erat velit scelerisque in dictum non consectetur a. Pretium quam vulputate dignissim suspendisse in est ante. Leo a diam sollicitudin tempor id eu nisl nunc mi. Quis lectus nulla at volutpat diam.
+  ** Neque vitae tempus quam pellentesque nec nam aliquam sem et. Adipiscing commodo elit at imperdiet. Risus in hendrerit gravida rutrum quisque non.
+     Sapien faucibus et molestie ac feugiat. Ac ut consequat semper viverra nam libero justo laoreet sit. Elit scelerisque mauris pellentesque pulvinar
+     pellentesque habitant morbi.
+  *** Euismod quis viverra nibh cras. Vel eros donec ac odio tempor. Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Ullamcorper
+      velit sed ullamcorper morbi tincidunt. Sed pulvinar proin gravida hendrerit lectus a. In nulla posuere sollicitudin aliquam ultrices. Tempor id eu nisl
+      nunc mi ipsum faucibus. Non curabitur gravida arcu ac tortor dignissim convallis aenean et.
+  * Pretium quam vulputate dignissim suspendisse in est. Amet volutpat consequat mauris nunc congue nisi vitae suscipit. Risus at ultrices mi tempus imperdiet
+    nulla malesuada.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow.adoc
new file mode 100644
index 0000000..e4e0183
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-noreflow.adoc
@@ -0,0 +1,24 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be explicitly queried before use to ensure they are supported by the implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the implementation are queried individually using the flink:vkGetPhysicalDeviceFormatProperties command.
+
+  * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Turpis egestas pretium aenean pharetra magna ac placerat. Eros donec ac odio tempor orci. Vel facilisis volutpat est velit egestas. Rhoncus urna neque viverra justo nec ultrices. Sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque.
+  * Natoque penatibus et magnis dis parturient. Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat. Donec et odio pellentesque diam volutpat commodo sed egestas. Tortor pretium viverra suspendisse potenti nullam ac tortor vitae. Sed arcu non odio euismod lacinia at quis.
+  ** Convallis a cras semper auctor
+     neque vitae tempus quam pellentesque. Aliquam etiam erat velit scelerisque in dictum non consectetur a. Pretium quam vulputate dignissim suspendisse in est ante. Leo a diam sollicitudin tempor id eu nisl nunc mi. Quis lectus nulla at volutpat diam.
+  ** Neque vitae tempus quam pellentesque nec nam aliquam sem et. Adipiscing commodo elit at imperdiet. Risus in hendrerit gravida rutrum quisque non.
+     Sapien faucibus et molestie ac feugiat. Ac ut consequat semper viverra nam libero justo laoreet sit. Elit scelerisque mauris pellentesque pulvinar
+     pellentesque habitant morbi.
+  *** Euismod quis viverra nibh cras. Vel eros donec ac odio tempor. Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Ullamcorper
+      velit sed ullamcorper morbi tincidunt. Sed pulvinar proin gravida hendrerit lectus a. In nulla posuere sollicitudin aliquam ultrices. Tempor id eu nisl
+      nunc mi ipsum faucibus. Non curabitur gravida arcu ac tortor dignissim convallis aenean et.
+  * Pretium quam vulputate dignissim suspendisse in est. Amet volutpat consequat mauris nunc congue nisi vitae suscipit. Risus at ultrices mi tempus imperdiet
+    nulla malesuada.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-novuid.adoc
new file mode 100644
index 0000000..9e3c876
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-text-novuid.adoc
@@ -0,0 +1,53 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be
+explicitly queried before use to ensure they are supported by the
+implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the
+implementation are queried individually using the
+flink:vkGetPhysicalDeviceFormatProperties command.
+
+  * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+    tempor incididunt ut labore et dolore magna aliqua.
+    Turpis egestas pretium aenean pharetra magna ac placerat.
+    Eros donec ac odio tempor orci.
+    Vel facilisis volutpat est velit egestas.
+    Rhoncus urna neque viverra justo nec ultrices.
+    Sollicitudin ac orci phasellus egestas tellus rutrum tellus
+    pellentesque.
+  * Natoque penatibus et magnis dis parturient.
+    Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat.
+    Donec et odio pellentesque diam volutpat commodo sed egestas.
+    Tortor pretium viverra suspendisse potenti nullam ac tortor vitae.
+    Sed arcu non odio euismod lacinia at quis.
+  ** Convallis a cras semper auctor neque vitae tempus quam pellentesque.
+     Aliquam etiam erat velit scelerisque in dictum non consectetur a.
+     Pretium quam vulputate dignissim suspendisse in est ante.
+     Leo a diam sollicitudin tempor id eu nisl nunc mi.
+     Quis lectus nulla at volutpat diam.
+  ** Neque vitae tempus quam pellentesque nec nam aliquam sem et.
+     Adipiscing commodo elit at imperdiet.
+     Risus in hendrerit gravida rutrum quisque non.
+     Sapien faucibus et molestie ac feugiat.
+     Ac ut consequat semper viverra nam libero justo laoreet sit.
+     Elit scelerisque mauris pellentesque pulvinar pellentesque habitant
+     morbi.
+  *** Euismod quis viverra nibh cras.
+      Vel eros donec ac odio tempor.
+      Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit
+      lectus.
+      Ullamcorper velit sed ullamcorper morbi tincidunt.
+      Sed pulvinar proin gravida hendrerit lectus a.
+      In nulla posuere sollicitudin aliquam ultrices.
+      Tempor id eu nisl nunc mi ipsum faucibus.
+      Non curabitur gravida arcu ac tortor dignissim convallis aenean et.
+  * Pretium quam vulputate dignissim suspendisse in est.
+    Amet volutpat consequat mauris nunc congue nisi vitae suscipit.
+    Risus at ultrices mi tempus imperdiet nulla malesuada.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-default.adoc
new file mode 100644
index 0000000..1451c53
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-default.adoc
@@ -0,0 +1,123 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource
+    ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure
+    containing the values that the image subresource ranges will be cleared
+    to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in
+    pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image
+    Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow-novuid.adoc
new file mode 100644
index 0000000..e50a460
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow-novuid.adoc
@@ -0,0 +1,101 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure containing the values that the image subresource ranges will be cleared to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow.adoc
new file mode 100644
index 0000000..e50a460
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-noreflow.adoc
@@ -0,0 +1,101 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure containing the values that the image subresource ranges will be cleared to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-novuid.adoc
new file mode 100644
index 0000000..1451c53
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vu-novuid.adoc
@@ -0,0 +1,123 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource
+    ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure
+    containing the values that the image subresource ranges will be cleared
+    to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in
+    pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image
+    Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image
+    must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-default.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-default.adoc
new file mode 100644
index 0000000..3cdf891
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-default.adoc
@@ -0,0 +1,58 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-02498]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow-novuid.adoc
new file mode 100644
index 0000000..f5fb2de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow-novuid.adoc
@@ -0,0 +1,47 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the elements of the pname:pRanges array must: each only include ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the elements of the pname:pRanges array must: each be less than the pname:mipLevels specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-02498]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow.adoc
new file mode 100644
index 0000000..f5fb2de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-noreflow.adoc
@@ -0,0 +1,47 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the elements of the pname:pRanges array must: each only include ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the elements of the pname:pRanges array must: each be less than the pname:mipLevels specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-02498]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-novuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-novuid.adoc
new file mode 100644
index 0000000..3cdf891
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/expect-vuid-repeat-novuid.adoc
@@ -0,0 +1,58 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or
+    equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-02498]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-common-validity.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-common-validity.adoc
new file mode 100644
index 0000000..01e8fd4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-common-validity.adoc
@@ -0,0 +1,32 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkCmdCopyBufferToImage* commands
+  * [[VUID-{refpage}-pRegions-00171]]
+    pname:srcBuffer must: be large enough to contain all buffer locations
+    that are accessed according to <<copies-buffers-images-addressing,Buffer
+    and Image Addressing>>, for each element of pname:pRegions
+  * The union of all source regions, and the union of all destination
+    regions, specified by the elements of pname:pRegions, must: not overlap
+    in memory
+  * pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcBuffer-00176]]
+    If pname:srcBuffer is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-{refpage}-dstImage-00177]] pname:dstImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+  * [[VUID-{refpage}-dstImage-00178]]
+    If pname:dstImage is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * pname:dstImageLayout must: specify the layout of the image subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00181]]
+    pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+    or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-ifdef-in-vu.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-ifdef-in-vu.adoc
new file mode 100644
index 0000000..b7f500b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-ifdef-in-vu.adoc
@@ -0,0 +1,35 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource
+    ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_GENERAL
+ifdef::VK_KHR_shared_presentable_image[]
+    , or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-math-block-in-vu.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-math-block-in-vu.adoc
new file mode 100644
index 0000000..e96c586
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-math-block-in-vu.adoc
@@ -0,0 +1,22 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Title
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * If pname:image is non-sparse then the following must: hold:
+
+      {empty}:: [eq]#p~i~ = {v~i~, v~i+1~}#
+
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this
+    command is executed on a sname:VkDevice
+****
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-nested-lists-in-vu.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-nested-lists-in-vu.adoc
new file mode 100644
index 0000000..52c7ab1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-nested-lists-in-vu.adoc
@@ -0,0 +1,37 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to dynamic state commands introduced by VK_EXT_extended_dynamic_state
+  * [[VUID-{refpage}-None-08971]]
+    At least one of the following must: be true:
+ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>> feature is enabled
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>> feature is enabled
+endif::VK_EXT_shader_object[]
+ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or equal to Version 1.3
+endif::VK_VERSION_1_3[]
+  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
+    If rasterization is not disabled in the bound graphics pipeline,
+ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+    and none of the following is enabled:
+ifdef::VK_AMD_mixed_attachment_samples[]
+  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
+endif::VK_AMD_mixed_attachment_samples[]
+ifdef::VK_NV_framebuffer_mixed_samples[]
+  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
+endif::VK_NV_framebuffer_mixed_samples[]
+ifdef::VK_EXT_multisampled_render_to_single_sampled[]
+  ** the <<features-multisampledRenderToSingleSampled, pname:multisampledRenderToSingleSampled>> feature
+endif::VK_EXT_multisampled_render_to_single_sampled[]
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
+
++
+then pname:rasterizationSamples for the currently bound graphics pipeline must: be the same as the current subpass color and/or depth/stencil attachments
+  * Some VU that follows
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid-attribute.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid-attribute.adoc
new file mode 100644
index 0000000..4f16b0f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid-attribute.adoc
@@ -0,0 +1,47 @@
+// Copyright 2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+:imageparam: srcImage
+:imagesubresource: imageSubresource
+
+// Common Valid Usage
+
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each element
+    of pname:pRegions, pname:imageOffset.y must: be `0` and pname:imageExtent.height must: be `1`
+  * For each element of pname:pRegions, pname:imageOffset.z and
+    [eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
+    greater than or equal to `0` and less than or equal to the depth of the specified pname:{imagesubresource} of pname:{imageparam}
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions, pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be `1`
+  * For each element of pname:pRegions, pname:bufferRowLength must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:bufferImageHeight must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.x must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.y must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:imageOffset.z must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.x
+    and pname:extent.width does not equal the width of the subresource specified by pname:srcSubresource, pname:extent.width must: be a multiple of the <<formats-compatibility-classes,texel block extent width>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.y
+    and pname:extent.height does not equal the height of the subresource specified by pname:srcSubresource, pname:extent.height must: be a multiple of the <<formats-compatibility-classes,texel block extent
+    height>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, if the sum of pname:imageOffset.z
+    and pname:extent.depth does not equal the depth of the subresource specified by pname:srcSubresource, pname:extent.depth must: be a
+    multiple of the <<formats-compatibility-classes,texel block extent
+    depth>> of the elink:VkFormat of pname:{imageparam}
+  * For each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: specify aspects present in pname:{imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} has a elink:VkFormat with <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * If pname:{imageparam} has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:{imagesubresource}.aspectMask must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:{imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each element of
+    pname:pRegions, pname:{imagesubresource}.baseArrayLayer must: be `0` and pname:{imagesubresource}.layerCount must: be `1`
+  * For each element of pname:pRegions, pname:bufferRowLength divided by the <<formats-compatibility-classes,texel block extent width>> and then multiplied by the texel block size of pname:{imageparam} must: be less than or equal to [eq]#2^31^-1#
+// Common Valid Usage
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid.adoc
new file mode 100644
index 0000000..728e36b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-new-vuid.adoc
@@ -0,0 +1,72 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * pname:image must: not have a compressed or depth/stencil format
+  * pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-table.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-table.adoc
new file mode 100644
index 0000000..0251a4c
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-table.adoc
@@ -0,0 +1,30 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+<<<
+
+[[formats-numericformat]]
+.Interpretation of Numeric Format
+[width="95%",cols="2,3,10",options="header"]
+|====
+| Numeric format | SPIR-V _Sampled Type_ | Description
+| etext:UNORM    | OpTypeFloat           | The components are unsigned normalized values in the range [eq]#[0,1]#
+| etext:SNORM    | OpTypeFloat           | The components are signed normalized values in the range [eq]#[-1,1]#
+| etext:USCALED  | OpTypeFloat           | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1]
+| etext:SSCALED  | OpTypeFloat           | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1]
+| etext:UINT     | OpTypeInt             | The components are unsigned integer values in the range [0,2^n^-1]
+| etext:SINT     | OpTypeInt             | The components are signed integer values in the range [-2^n-1^,2^n-1^-1]
+| etext:UFLOAT   | OpTypeFloat           | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)
+| etext:SFLOAT   | OpTypeFloat           | The components are signed floating-point numbers
+| etext:SRGB     | OpTypeFloat           | The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value
+3+| [eq]#n# is the number of bits in the component.
+|====
+
+The suffix etext:_PACKnn indicates that the format is packed into an underlying type with etext:nn bits.
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+The suffix etext:_mPACKnn is a short-hand that indicates that the format has etext:m groups of components (which may or may not be stored in separate _planes_) that are each packed into an underlying type with etext:nn bits.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-text.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-text.adoc
new file mode 100644
index 0000000..e4e0183
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-text.adoc
@@ -0,0 +1,24 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[formats]]
+= Formats
+
+Supported buffer and image formats may: vary across implementations.
+A minimum set of format features are guaranteed, but others must: be explicitly queried before use to ensure they are supported by the implementation.
+
+The features for the set of formats (elink:VkFormat) supported by the implementation are queried individually using the flink:vkGetPhysicalDeviceFormatProperties command.
+
+  * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Turpis egestas pretium aenean pharetra magna ac placerat. Eros donec ac odio tempor orci. Vel facilisis volutpat est velit egestas. Rhoncus urna neque viverra justo nec ultrices. Sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque.
+  * Natoque penatibus et magnis dis parturient. Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat. Donec et odio pellentesque diam volutpat commodo sed egestas. Tortor pretium viverra suspendisse potenti nullam ac tortor vitae. Sed arcu non odio euismod lacinia at quis.
+  ** Convallis a cras semper auctor
+     neque vitae tempus quam pellentesque. Aliquam etiam erat velit scelerisque in dictum non consectetur a. Pretium quam vulputate dignissim suspendisse in est ante. Leo a diam sollicitudin tempor id eu nisl nunc mi. Quis lectus nulla at volutpat diam.
+  ** Neque vitae tempus quam pellentesque nec nam aliquam sem et. Adipiscing commodo elit at imperdiet. Risus in hendrerit gravida rutrum quisque non.
+     Sapien faucibus et molestie ac feugiat. Ac ut consequat semper viverra nam libero justo laoreet sit. Elit scelerisque mauris pellentesque pulvinar
+     pellentesque habitant morbi.
+  *** Euismod quis viverra nibh cras. Vel eros donec ac odio tempor. Praesent semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Ullamcorper
+      velit sed ullamcorper morbi tincidunt. Sed pulvinar proin gravida hendrerit lectus a. In nulla posuere sollicitudin aliquam ultrices. Tempor id eu nisl
+      nunc mi ipsum faucibus. Non curabitur gravida arcu ac tortor dignissim convallis aenean et.
+  * Pretium quam vulputate dignissim suspendisse in est. Amet volutpat consequat mauris nunc congue nisi vitae suscipit. Risus at ultrices mi tempus imperdiet
+    nulla malesuada.
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vu.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vu.adoc
new file mode 100644
index 0000000..e50a460
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vu.adoc
@@ -0,0 +1,101 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:image is the image to be cleared.
+  * pname:imageLayout specifies the current layout of the image subresource ranges to be cleared, and must: be
+ifdef::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
+endif::VK_KHR_shared_presentable_image[]
+    ename:VK_IMAGE_LAYOUT_GENERAL or ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
+  * pname:pColor is a pointer to a slink:VkClearColorValue structure containing the values that the image subresource ranges will be cleared to (see <<clears-values>> below).
+  * pname:rangeCount is the number of image subresource range structures in pname:pRanges.
+  * pname:pRanges is a pointer to an array of slink:VkImageSubresourceRange
+    structures describing a range of mipmap levels, array layers, and
+    aspects to be cleared, as described in <<resources-image-views,Image Views>>.
+
+Each specified range in pname:pRanges is cleared to the value specified by
+pname:pColor.
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-01993]]
+    The <<resources-image-format-features,format features>> of pname:image must: contain ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdClearColorImage-image-00002]]
+    pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-01545]]
+    pname:image must: not use any of the <<formats-requiring-sampler-ycbcr-conversion, formats that require a sampler {YCbCr} conversion>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-vkCmdClearColorImage-image-00003]]
+    If pname:image is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdClearColorImage-imageLayout-00004]]
+    pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-00005]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-imageLayout-01394]]
+    pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the
+    elements of the pname:pRanges array must: each only include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the
+    elements of the pname:pRanges array must: each be less than the
+    pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
+    was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01692]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or
+    equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-01693]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-04961]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01805]]
+    If pname:commandBuffer is an unprotected command buffer and <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    pname:image must: not be a protected image
+  * [[VUID-vkCmdClearColorImage-commandBuffer-01806]]
+    If pname:commandBuffer is a protected command buffer and
+    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
+    must: not be an unprotected image
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vuid-repeat.adoc b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vuid-repeat.adoc
new file mode 100644
index 0000000..f5fb2de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/src-vuid-repeat.adoc
@@ -0,0 +1,47 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[clears]]
+= Clear Commands
+
+
+[[clears-outside]]
+== Clearing Images Outside A Render Pass Instance
+
+Color and depth/stencil images can: be cleared outside a render pass
+instance using flink:vkCmdClearColorImage or
+flink:vkCmdClearDepthStencilImage, respectively.
+These commands are only allowed outside of a render pass instance.
+
+[open,refpage='vkCmdClearColorImage',desc='Clear regions of a color image',type='protos']
+--
+To clear one or more subranges of a color image, call:
+
+include::{generated}/api/protos/vkCmdClearColorImage.adoc[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearColorImage-aspectMask-02498]]
+    The slink:VkImageSubresourceRange::pname:aspectMask members of the elements of the pname:pRanges array must: each only include ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkCmdClearColorImage-baseMipLevel-01470]]
+    The slink:VkImageSubresourceRange::pname:baseMipLevel members of the elements of the pname:pRanges array must: each be less than the pname:mipLevels specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the
+    pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
+    [eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]
+    The slink:VkImageSubresourceRange::pname:baseArrayLayer members of the elements of the pname:pRanges array must: each be less than the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image was created
+  * [[VUID-vkCmdClearColorImage-pRanges-02498]]
+    For each slink:VkImageSubresourceRange element of pname:pRanges, if the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
+    [eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
+    pname:image was created
+  * [[VUID-vkCmdClearColorImage-image-00007]]
+    pname:image must: not have a compressed or depth/stencil format
+  * [[VUID-vkCmdClearColorImage-pColor-02498]]
+    pname:pColor must: be a valid pointer to a slink:VkClearColorValue union
+****
+
+include::{generated}/validity/protos/vkCmdClearColorImage.adoc[]
+--
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/update-expectations b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/update-expectations
new file mode 100755
index 0000000..ebfcf24
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow-tests/update-expectations
@@ -0,0 +1,16 @@
+#! /bin/bash
+#
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+echo "Note: Run 'pytest test_reflow.py' first to generate results/"
+
+for result_file in results/*/src-*.adoc; do
+  src_file=$(basename $result_file)
+  test_name=${src_file%.adoc}
+  test_name=${test_name#src-}
+  tag=$(basename $(dirname $result_file))
+
+  cp -f "$result_file" "expect-$test_name-$tag.adoc"
+done
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reflow.py b/codegen/vulkan/vulkan-docs-next/scripts/reflow.py
new file mode 100755
index 0000000..88495d3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reflow.py
@@ -0,0 +1,664 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+"""Used for automatic reflow of spec sources to satisfy the agreed layout to
+minimize git churn.  Also used to insert identifying tags on explicit Valid
+Usage statements.
+
+Usage: `reflow.py [-noflow] [-tagvu] [-nextvu #] [-overwrite] [-out dir] [-suffix str] files`
+
+- `-noflow` acts as a passthrough, instead of reflowing text. Other
+  processing may occur.
+- `-tagvu` generates explicit VUID tag for Valid Usage statements which
+  do not already have them.
+- `-nextvu #` starts VUID tag generation at the specified # instead of
+  the value wired into the `reflow.py` script.
+- `-overwrite` updates in place (can be risky, make sure there are backups)
+- `-check FAIL|WARN` runs some consistency checks on markup. If the checks
+  fail and the WARN option is given, the script will simply print a warning
+  message. If the checks fail and the FAIL option is given, the script will
+  exit with an error code. FAIL is for use with continuous integration
+  scripts enforcing the checks.
+- `-out` specifies directory to create output file in, default 'out'
+- `-suffix` specifies suffix to add to output files, default ''
+- `files` are asciidoc source files from the spec to reflow.
+"""
+# For error and file-loading interfaces only
+import argparse
+import os
+import re
+import sys
+from reflib import loadFile, logDiag, logWarn, logErr, setLogFile, getBranch
+from pathlib import Path
+import doctransformer
+
+# Vulkan-specific - will consolidate into scripts/ like OpenXR soon
+sys.path.insert(0, 'xml')
+
+from apiconventions import APIConventions
+conventions = APIConventions()
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+
+# Find the pname: or code: patterns in a Valid Usage statement
+pnamePat = re.compile(r'pname:(?P<param>\{?\w+\}?)')
+codePat = re.compile(r'code:(?P<param>\w+)')
+
+# Text that (may) not end sentences
+
+# A single letter followed by a period, typically a middle initial.
+endInitial = re.compile(r'^[A-Z]\.$')
+# An abbreviation, which does not (usually) end a line.
+endAbbrev = re.compile(r'(e\.g|i\.e|c\.f|vs)\.$', re.IGNORECASE)
+
+# Explicit Valid Usage list item with one or more leading asterisks
+# The re.DOTALL is needed to prevent vuPat.search() from stripping
+# the trailing newline.
+vuPat = re.compile(r'^(?P<head>  [*]+)( *)(?P<tail>.*)', re.DOTALL)
+
+# VUID with the numeric portion captured in the match object
+vuidPat = re.compile(r'VUID-[^-]+-[^-]+-(?P<vuid>[0-9]+)')
+
+# Pattern matching leading nested bullet points
+global nestedVuPat
+nestedVuPat = re.compile(r'^  \*\*')
+
+class ReflowCallbacks:
+    """State and arguments for reflowing.
+
+    Used with DocTransformer to reflow a file."""
+    def __init__(self,
+                 filename,
+                 vuidDict,
+                 margin = 76,
+                 breakPeriod = True,
+                 reflow = True,
+                 nextvu = None,
+                 maxvu = None,
+                 check = True):
+
+        self.filename = filename
+        """base name of file being read from."""
+
+        self.check = check
+        """Whether consistency checks must be performed."""
+
+        self.margin = margin
+        """margin to reflow text to."""
+
+        self.breakPeriod = breakPeriod
+        """True if justification should break to a new line after the end of a
+        sentence."""
+
+        self.breakInitial = True
+        """True if justification should break to a new line after something
+        that appears to be an initial in someone's name. **TBD**"""
+
+        self.reflow = reflow
+        """True if text should be reflowed, False to pass through unchanged."""
+
+        self.vuPrefix = 'VUID'
+        """Prefix of generated Valid Usage tags"""
+
+        self.vuFormat = '{0}-{1}-{2}-{3:0>5d}'
+        """Format string for generating Valid Usage tags.
+        First argument is vuPrefix, second is command/struct name, third is
+        parameter name, fourth is the tag number."""
+
+        self.nextvu = nextvu
+        """Integer to start tagging un-numbered Valid Usage statements with,
+        or None if no tagging should be done."""
+
+        self.maxvu = maxvu
+        """Maximum tag to use for Valid Usage statements, or None if no
+        tagging should be done."""
+
+        self.vuidDict = vuidDict
+        """Dictionary of VUID numbers found, containing a list of (file, VUID)
+        on which that number was found.  This is used to warn on duplicate
+        VUIDs."""
+
+        self.warnCount = 0
+        """Count of markup check warnings encountered."""
+
+    def endSentence(self, word):
+        """Return True if word ends with a sentence-period, False otherwise.
+
+        Allows for contraction cases which will not end a line:
+
+         - A single letter (if breakInitial is True)
+         - Abbreviations: 'c.f.', 'e.g.', 'i.e.' (or mixed-case versions)"""
+        if (word[-1:] != '.' or
+            endAbbrev.search(word) or
+                (self.breakInitial and endInitial.match(word))):
+            return False
+
+        return True
+
+    def vuidAnchor(self, word):
+        """Return True if word is a Valid Usage ID Tag anchor."""
+        return (word[0:7] == '[[VUID-')
+
+    def visitVUID(self, vuid, line):
+        if vuid not in self.vuidDict:
+            self.vuidDict[vuid] = []
+        self.vuidDict[vuid].append([self.filename, line])
+
+    def gatherVUIDs(self, para):
+        """Gather VUID tags and add them to vuidDict.  Used to verify no-duplicate VUIDs"""
+        for line in para:
+            line = line.rstrip()
+
+            matches = vuidPat.search(line)
+            if matches is not None:
+                vuid = matches.group('vuid')
+                self.visitVUID(vuid, line)
+
+    def addVUID(self, para, state):
+        hangIndent = state.hangIndent
+
+        """Generate and add VUID if necessary."""
+        if not state.isVU or self.nextvu is None:
+            return para, hangIndent
+
+        # If:
+        #   - this paragraph is in a Valid Usage block,
+        #   - VUID tags are being assigned,
+        # Try to assign VUIDs
+
+        if nestedVuPat.search(para[0]):
+            # Do not assign VUIDs to nested bullet points.
+            # These are now allowed VU markup syntax, but will never
+            # themselves be VUs, just subsidiary points.
+            return para, hangIndent
+
+        # Skip if there is already a VUID assigned
+        if self.vuPrefix in para[0]:
+            return para, hangIndent
+
+        # If:
+        #   - a tag is not already present, and
+        #   - the paragraph is a properly marked-up list item
+        # Then add a VUID tag starting with the next free ID.
+
+        # Split the first line after the bullet point
+        matches = vuPat.search(para[0])
+        if matches is None:
+            # There are only a few cases of this, and they are all
+            # legitimate. Leave detecting this case to another tool
+            # or hand inspection.
+            # logWarn(self.filename + ': Unexpected non-bullet item in VU block (harmless if following an ifdef):',
+            #         para[0])
+            return para, hangIndent
+
+        outPara = para
+
+        logDiag('addVUID: Matched vuPat on line:', para[0], end='')
+        head = matches.group('head')
+        tail = matches.group('tail')
+
+        # Find pname: or code: tags in the paragraph for the purposes of VUID
+        # tag generation. pname:{attribute}s are prioritized to make sure
+        # commonvalidity VUIDs end up being unique. Otherwise, the first pname:
+        # or code: tag in the paragraph is used, which may not always be
+        # correct, but should be highly reliable.
+        pnameMatches = re.findall(pnamePat, ' '.join(para))
+        codeMatches = re.findall(codePat, ' '.join(para))
+
+        # Prioritize {attribute}s, but not the ones in the exception list
+        # below.  These have complex expressions including ., ->, or [index]
+        # which makes them unsuitable for VUID tags.  Ideally these would be
+        # automatically discovered.
+        attributeExceptionList = ['maxinstancecheck', 'regionsparam',
+                                  'rayGenShaderBindingTableAddress',
+                                  'rayGenShaderBindingTableStride',
+                                  'missShaderBindingTableAddress',
+                                  'missShaderBindingTableStride',
+                                  'hitShaderBindingTableAddress',
+                                  'hitShaderBindingTableStride',
+                                  'callableShaderBindingTableAddress',
+                                  'callableShaderBindingTableStride',
+                                 ]
+        attributeMatches = [match for match in pnameMatches if
+                            match[0] == '{' and
+                            match[1:-1] not in attributeExceptionList]
+        nonattributeMatches = [match for match in pnameMatches if
+                               match[0] != '{']
+
+        if len(attributeMatches) > 0:
+            paramName = attributeMatches[0]
+        elif len(nonattributeMatches) > 0:
+            paramName = nonattributeMatches[0]
+        elif len(codeMatches) > 0:
+            paramName = codeMatches[0]
+        else:
+            paramName = 'None'
+            logWarn(self.filename,
+                    'No param name found for VUID tag on line:',
+                    para[0])
+
+        # Transform:
+        #
+        #   * VU first line
+        #
+        # To:
+        #
+        #   * [[VUID]]
+        #     VU first line
+        #
+        tagLine = (head + ' [[' +
+                   self.vuFormat.format(self.vuPrefix,
+                                        state.apiName,
+                                        paramName,
+                                        self.nextvu) + ']]\n')
+        self.visitVUID(str(self.nextvu), tagLine)
+
+        newLines = [tagLine]
+        if tail.strip() != '':
+            logDiag('transformParagraph first line matches bullet point -'
+                    'single line, assuming hangIndent @ input line',
+                    state.lineNumber)
+            hangIndent = len(head) + 1
+            newLines.append(''.ljust(hangIndent) + tail)
+
+        logDiag('Assigning', self.vuPrefix, state.apiName, self.nextvu,
+                ' on line:\n' + para[0], '->\n' + newLines[0] + 'END', '\n' + newLines[1] if len(newLines) > 1 else '')
+
+        # Do not actually assign the VUID unless it is in the reserved range
+        if self.nextvu <= self.maxvu:
+            if self.nextvu == self.maxvu:
+                logWarn('Skipping VUID assignment, no more VUIDs available')
+            outPara = newLines + para[1:]
+            self.nextvu = self.nextvu + 1
+
+        return outPara, hangIndent
+
+    def transformParagraph(self, para, state):
+        """Reflow a given paragraph, respecting the paragraph lead and
+        hanging indentation levels.
+
+        The algorithm also respects trailing '+' signs that indicate embedded newlines,
+        and will not reflow a very long word immediately after a bullet point.
+
+        Just return the paragraph unchanged if the -noflow argument was
+        given."""
+
+        self.gatherVUIDs(para)
+
+        # If this is a VU that is missing a VUID, add it to the paragraph now.
+        para, hangIndent = self.addVUID(para, state)
+
+        if not self.reflow:
+            return para
+
+        logDiag('transformParagraph lead indent = ', state.leadIndent,
+                'hangIndent =', state.hangIndent,
+                'para:', para[0], end='')
+
+        # Total words processed (we care about the *first* word vs. others)
+        wordCount = 0
+
+        # Tracks the *previous* word processed. It must not be empty.
+        prevWord = ' '
+
+        # Track the previous line and paragraph being indented, if any
+        outLine = None
+        outPara = []
+
+        for line in para:
+            line = line.rstrip()
+            words = line.split()
+
+            # logDiag('transformParagraph: input line =', line)
+            numWords = len(words) - 1
+
+            for i in range(0, numWords + 1):
+                word = words[i]
+                wordLen = len(word)
+                wordCount += 1
+
+                endEscape = False
+                if i == numWords and word in ('+', '-'):
+                    # Trailing ' +' or ' -' must stay on the same line
+                    endEscape = word
+                    # logDiag('transformParagraph last word of line =', word,
+                    #         'prevWord =', prevWord, 'endEscape =', endEscape)
+                else:
+                    # logDiag('transformParagraph wordCount =', wordCount,
+                    #         'word =', word, 'prevWord =', prevWord)
+                    pass
+
+                if wordCount == 1:
+                    # The first word of the paragraph is treated specially.
+                    # The loop logic becomes trickier if all this code is
+                    # done prior to looping over lines and words, so all the
+                    # setup logic is done here.
+
+                    outLine = ''.ljust(state.leadIndent) + word
+                    outLineLen = state.leadIndent + wordLen
+
+                    # If the paragraph begins with a bullet point, generate
+                    # a hanging indent level if there is not one already.
+                    if doctransformer.beginBullet.match(para[0]):
+                        bulletPoint = True
+                        if len(para) > 1:
+                            logDiag('transformParagraph first line matches bullet point',
+                                    'but indent already hanging @ input line',
+                                    state.lineNumber)
+                        else:
+                            logDiag('transformParagraph first line matches bullet point -'
+                                    'single line, assuming hangIndent @ input line',
+                                    state.lineNumber)
+                            hangIndent = outLineLen + 1
+                    else:
+                        bulletPoint = False
+                else:
+                    # Possible actions to take with this word
+                    #
+                    # addWord - add word to current line
+                    # closeLine - append line and start a new (null) one
+                    # startLine - add word to a new line
+
+                    # Default behavior if all the tests below fail is to add
+                    # this word to the current line, and keep accumulating
+                    # that line.
+                    (addWord, closeLine, startLine) = (True, False, False)
+
+                    # How long would this line be if the word were added?
+                    newLen = outLineLen + 1 + wordLen
+
+                    # Are we on the first word following a bullet point?
+                    firstBullet = (wordCount == 2 and bulletPoint)
+
+                    if endEscape:
+                        # If the new word ends the input line with ' +',
+                        # add it to the current line.
+
+                        (addWord, closeLine, startLine) = (True, True, False)
+                    elif self.vuidAnchor(word):
+                        # If the new word is a Valid Usage anchor, break the
+                        # line afterwards. Note that this should only happen
+                        # immediately after a bullet point, but we do not
+                        # currently check for this.
+                        (addWord, closeLine, startLine) = (True, True, False)
+
+                    elif newLen > self.margin:
+                        if firstBullet:
+                            # If the word follows a bullet point, add it to
+                            # the current line no matter its length.
+
+                            (addWord, closeLine, startLine) = (True, True, False)
+                        elif doctransformer.beginBullet.match(word + ' '):
+                            # If the word *is* a bullet point, add it to
+                            # the current line no matter its length.
+                            # This avoids an innocent inline '-' or '*'
+                            # turning into a bogus bullet point.
+
+                            (addWord, closeLine, startLine) = (True, True, False)
+                        else:
+                            # The word overflows, so add it to a new line.
+
+                            (addWord, closeLine, startLine) = (False, True, True)
+                    elif (self.breakPeriod and
+                          (wordCount > 2 or not firstBullet) and
+                          self.endSentence(prevWord)):
+                        # If the previous word ends a sentence and
+                        # breakPeriod is set, start a new line.
+                        # The complicated logic allows for leading bullet
+                        # points which are periods (implicitly numbered lists).
+                        # @@@ But not yet for explicitly numbered lists.
+
+                        (addWord, closeLine, startLine) = (False, True, True)
+
+                    # Add a word to the current line
+                    if addWord:
+                        if outLine:
+                            outLine += ' ' + word
+                            outLineLen = newLen
+                        else:
+                            # Fall through to startLine case if there is no
+                            # current line yet.
+                            startLine = True
+
+                    # Add current line to the output paragraph. Force
+                    # starting a new line, although we do not yet know if it
+                    # will ever have contents.
+                    if closeLine:
+                        if outLine:
+                            outPara.append(outLine + '\n')
+                            outLine = None
+
+                    # Start a new line and add a word to it
+                    if startLine:
+                        outLine = ''.ljust(hangIndent) + word
+                        outLineLen = hangIndent + wordLen
+
+                # Track the previous word, for use in breaking at end of
+                # a sentence
+                prevWord = word
+
+        # Add last line to the output paragraph.
+        if outLine:
+            outPara.append(outLine + '\n')
+
+        return outPara
+
+    def onEmbeddedVUConditional(self, state):
+        if self.check:
+            logWarn('Detected embedded Valid Usage conditional: {}:{}'.format(
+                    self.filename, state.lineNumber - 1))
+            # Keep track of warning check count
+            self.warnCount = self.warnCount + 1
+
+def reflowFile(filename, args):
+    logDiag('reflow: filename', filename)
+
+    # Output file handle and reflow object for this file. There are no race
+    # conditions on overwriting the input, but it is not recommended unless
+    # you have backing store such as git.
+
+    lines, newline_string = loadFile(filename)
+    if lines is None:
+        return
+
+    if args.overwrite:
+        outFilename = filename
+    else:
+        outDir = Path(args.outDir).resolve()
+        outDir.mkdir(parents=True, exist_ok=True)
+
+        outFilename = str(outDir / (os.path.basename(filename) + args.suffix))
+
+    if args.nowrite:
+        fp = None
+    else:
+        try:
+            fp = open(outFilename, 'w', encoding='utf8', newline=newline_string)
+        except:
+            logWarn('Cannot open output file', outFilename, ':', sys.exc_info()[0])
+            return
+
+    callback = ReflowCallbacks(filename,
+                               args.vuidDict,
+                               margin = args.margin,
+                               reflow = not args.noflow,
+                               nextvu = args.nextvu,
+                               maxvu = args.maxvu,
+                               check = args.check)
+
+    transformer = doctransformer.DocTransformer(filename,
+                                                outfile = fp,
+                                                callback = callback)
+
+    transformer.transformFile(lines)
+
+    if fp is not None:
+        fp.close()
+
+    # Update the 'nextvu' value
+    if args.nextvu != callback.nextvu:
+        logWarn('Updated nextvu to', callback.nextvu, 'after file', filename)
+        args.nextvu = callback.nextvu
+
+    args.warnCount += callback.warnCount
+
+def reflowAllAdocFiles(folder_to_reflow, args):
+    for root, subdirs, files in os.walk(folder_to_reflow):
+        for file in files:
+            if file.endswith(conventions.file_suffix):
+                file_path = os.path.join(root, file)
+                reflowFile(file_path, args)
+        for subdir in subdirs:
+            sub_folder = os.path.join(root, subdir)
+            print('Sub-folder = %s' % sub_folder)
+            if subdir.lower() not in conventions.spec_no_reflow_dirs:
+                print('   Parsing = %s' % sub_folder)
+                reflowAllAdocFiles(sub_folder, args)
+            else:
+                print('   Skipping = %s' % sub_folder)
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-diag', action='store', dest='diagFile',
+                        help='Set the diagnostic file')
+    parser.add_argument('-warn', action='store', dest='warnFile',
+                        help='Set the warning file')
+    parser.add_argument('-log', action='store', dest='logFile',
+                        help='Set the log file for both diagnostics and warnings')
+    parser.add_argument('-overwrite', action='store_true',
+                        help='Overwrite input filenames instead of writing different output filenames')
+    parser.add_argument('-out', action='store', dest='outDir',
+                        default='out',
+                        help='Set the output directory in which updated files are generated (default: out)')
+    parser.add_argument('-nowrite', action='store_true',
+                        help='Do not write output files, for use with -check')
+    parser.add_argument('-check', action='store', dest='check',
+                        help='Run markup checks and warn if WARN option is given, error exit if FAIL option is given')
+    parser.add_argument('-checkVUID', action='store', dest='checkVUID',
+                        help='Detect duplicated VUID numbers and warn if WARN option is given, error exit if FAIL option is given')
+    parser.add_argument('-tagvu', action='store_true',
+                        help='Tag un-tagged Valid Usage statements starting at the value wired into reflow.py')
+    parser.add_argument('-nextvu', action='store', dest='nextvu', type=int,
+                        default=None,
+                        help='Tag un-tagged Valid Usage statements starting at the specified base VUID instead of the value wired into reflow.py')
+    parser.add_argument('-maxvu', action='store', dest='maxvu', type=int,
+                        default=None,
+                        help='Specify maximum VUID instead of the value wired into vuidCounts.py')
+    parser.add_argument('-branch', action='store', dest='branch',
+                        help='Specify branch to assign VUIDs for')
+    parser.add_argument('-noflow', action='store_true', dest='noflow',
+                        help='Do not reflow text. Other actions may apply')
+    parser.add_argument('-margin', action='store', type=int, dest='margin',
+                        default='76',
+                        help='Width to reflow text, defaults to 76 characters')
+    parser.add_argument('-suffix', action='store', dest='suffix',
+                        default='',
+                        help='Set the suffix added to updated file names (default: none)')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='a filename to reflow text in')
+    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+
+    args = parser.parse_args()
+
+    setLogFile(True,  True, args.logFile)
+    setLogFile(True, False, args.diagFile)
+    setLogFile(False, True, args.warnFile)
+
+    if args.overwrite:
+        logWarn("reflow.py: will overwrite all input files")
+
+    errors = ''
+    if args.branch is None:
+        (args.branch, errors) = getBranch()
+    if args.branch is None:
+        # This is not fatal unless VUID assignment is required
+        if args.tagvu:
+            logErr('Cannot determine current git branch, so cannot assign VUIDs:', errors)
+
+    if args.tagvu and args.nextvu is None:
+        # Moved here since vuidCounts is only needed in the internal
+        # repository
+        from vuidCounts import vuidCounts
+
+        if args.branch not in vuidCounts:
+            logErr('Branch', args.branch, 'not in vuidCounts, cannot continue')
+        maxVUID = vuidCounts[args.branch][1]
+        startVUID = vuidCounts[args.branch][2]
+        args.nextvu = startVUID
+        args.maxvu = maxVUID
+
+    if args.nextvu is not None:
+        logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu)
+
+    # Count of markup check warnings encountered
+    # This is added to the argparse structure
+    args.warnCount = 0
+
+    # Dictionary of VUID numbers found, containing a list of (file, VUID) on
+    # which that number was found
+    # This is added to the argparse structure
+    args.vuidDict = {}
+
+    # If no files are specified, reflow the entire specification chapters folder
+    if not args.files:
+        folder_to_reflow = conventions.spec_reflow_path
+        logWarn('Reflowing all asciidoc files under', folder_to_reflow)
+        reflowAllAdocFiles(folder_to_reflow, args)
+    else:
+        for file in args.files:
+            reflowFile(file, args)
+
+    if args.warnCount > 0:
+        if args.check == 'FAIL':
+            logErr('Failed with', args.warnCount, 'markup errors detected.\n' +
+                   'To fix these, you can take actions such as:\n' +
+                   '  * Moving conditionals outside VU start / end without changing VU meaning\n' +
+                   '  * Refactor conditional text using terminology defined conditionally outside the VU itself\n' +
+                   '  * Remove the conditional (allowable when this just affects command / structure / enum names)\n')
+        else:
+            logWarn('Total warning count for markup issues is', args.warnCount)
+
+    # Look for duplicated VUID numbers
+    if args.checkVUID:
+        dupVUIDs = 0
+        for vuid in sorted(args.vuidDict):
+            found = args.vuidDict[vuid]
+            if len(found) > 1:
+                logWarn('Duplicate VUID number {} found in files:'.format(vuid))
+                for (file, vuidLine) in found:
+                    logWarn('    {}: {}'.format(file, vuidLine))
+                dupVUIDs = dupVUIDs + 1
+
+        if dupVUIDs > 0:
+            if args.checkVUID == 'FAIL':
+                logErr('Failed with', dupVUIDs, 'duplicated VUID numbers found.\n' +
+                       'To fix this, either convert these to commonvalidity VUs if possible, or strip\n' +
+                       'the VUIDs from all but one of the duplicates and regenerate new ones.')
+            else:
+                logWarn('Total number of duplicated VUID numbers is', dupVUIDs)
+
+    if args.nextvu is not None and args.nextvu != startVUID:
+        # Update next free VUID to assign
+        vuidCounts[args.branch][2] = args.nextvu
+        try:
+            reflow_count_file_path = os.path.dirname(os.path.realpath(__file__))
+            reflow_count_file_path += '/vuidCounts.py'
+            reflow_count_file = open(reflow_count_file_path, 'w', encoding='utf8')
+            print('# Do not edit this file, unless reserving a new VUID range', file=reflow_count_file)
+            print('# VUID ranges reserved for branches', file=reflow_count_file)
+            print('# Key is branch name, value is [ start, end, nextfree ]', file=reflow_count_file)
+            print('# New reservations must be made by MR to main branch', file=reflow_count_file)
+            print('vuidCounts = {', file=reflow_count_file)
+            for key in sorted(vuidCounts.keys(), key=lambda k: vuidCounts[k][0]):
+                counts = vuidCounts[key]
+                print(f"    '{key}': [ {counts[0]}, {counts[1]}, {counts[2]} ],",
+                    file=reflow_count_file)
+            print('}', file=reflow_count_file)
+            reflow_count_file.close()
+        except:
+            logWarn('Cannot open output count file vuidCounts.py', ':', sys.exc_info()[0])
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/reg.py b/codegen/vulkan/vulkan-docs-next/scripts/reg.py
new file mode 100644
index 0000000..4b5a80f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/reg.py
@@ -0,0 +1,1779 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+"""Types and classes for manipulating an API registry."""
+
+import copy
+import re
+import sys
+import xml.etree.ElementTree as etree
+from collections import defaultdict, deque, namedtuple
+
+from generator import GeneratorOptions, OutputGenerator, noneStr, write
+from apiconventions import APIConventions
+
+def apiNameMatch(str, supported):
+    """Return whether a required api name matches a pattern specified for an
+    XML <feature> 'api' attribute or <extension> 'supported' attribute.
+
+    - str - API name such as 'vulkan' or 'openxr'. May be None, in which
+        case it never matches (this should not happen).
+    - supported - comma-separated list of XML API names. May be None, in
+        which case str always matches (this is the usual case)."""
+
+    if str is not None:
+        return supported is None or str in supported.split(',')
+
+    # Fallthrough case - either str is None or the test failed
+    return False
+
+def matchAPIProfile(api, profile, elem):
+    """Return whether an API and profile
+    being generated matches an element's profile
+
+    - api - string naming the API to match
+    - profile - string naming the profile to match
+    - elem - Element which (may) have 'api' and 'profile'
+      attributes to match to.
+
+    If a tag is not present in the Element, the corresponding API
+      or profile always matches.
+
+    Otherwise, the tag must exactly match the API or profile.
+
+    Thus, if 'profile' = core:
+
+    - `<remove>`  with no attribute will match
+    - `<remove profile="core">` will match
+    - `<remove profile="compatibility">` will not match
+
+    Possible match conditions:
+
+    ```
+      Requested   Element
+      Profile     Profile
+      ---------   --------
+      None        None        Always matches
+      'string'    None        Always matches
+      None        'string'    Does not match. Cannot generate multiple APIs
+                              or profiles, so if an API/profile constraint
+                              is present, it must be asked for explicitly.
+      'string'    'string'    Strings must match
+    ```
+
+    ** In the future, we will allow regexes for the attributes,
+    not just strings, so that `api="^(gl|gles2)"` will match. Even
+    this is not really quite enough, we might prefer something
+    like `"gl(core)|gles1(common-lite)"`."""
+    # Match 'api', if present
+    elem_api = elem.get('api')
+    if elem_api:
+        if api is None:
+            raise UserWarning("No API requested, but 'api' attribute is present with value '"
+                              + elem_api + "'")
+        elif api != elem_api:
+            # Requested API does not match attribute
+            return False
+    elem_profile = elem.get('profile')
+    if elem_profile:
+        if profile is None:
+            raise UserWarning("No profile requested, but 'profile' attribute is present with value '"
+                              + elem_profile + "'")
+        elif profile != elem_profile:
+            # Requested profile does not match attribute
+            return False
+    return True
+
+
+def mergeAPIs(tree, fromApiNames, toApiName):
+    """Merge multiple APIs using the precedence order specified in apiNames.
+    Also deletes <remove> elements.
+
+        tree - Element at the root of the hierarchy to merge.
+        apiNames - list of strings of API names."""
+
+    stack = deque()
+    stack.append(tree)
+
+    while len(stack) > 0:
+        parent = stack.pop()
+
+        for child in parent.findall('*'):
+            if child.tag == 'remove':
+                # Remove <remove> elements
+                parent.remove(child)
+            else:
+                stack.append(child)
+
+            supportedList = child.get('supported')
+            if supportedList:
+                supportedList = supportedList.split(',')
+                for apiName in [toApiName] + fromApiNames:
+                    if apiName in supportedList:
+                        child.set('supported', toApiName)
+
+            if child.get('api'):
+                definitionName = None
+                definitionVariants = []
+
+                # Keep only one definition with the same name if there are multiple definitions
+                if child.tag in ['type']:
+                    if child.get('name') is not None:
+                        definitionName = child.get('name')
+                        definitionVariants = parent.findall(f"{child.tag}[@name='{definitionName}']")
+                    else:
+                        definitionName = child.find('name').text
+                        definitionVariants = parent.findall(f"{child.tag}/name[.='{definitionName}']/..")
+                elif child.tag in ['member', 'param']:
+                    definitionName = child.find('name').text
+                    definitionVariants = parent.findall(f"{child.tag}/name[.='{definitionName}']/..")
+                elif child.tag in ['enum', 'feature']:
+                    definitionName = child.get('name')
+                    definitionVariants = parent.findall(f"{child.tag}[@name='{definitionName}']")
+                elif child.tag in ['require']:
+                    definitionName = child.get('feature')
+                    definitionVariants = parent.findall(f"{child.tag}[@feature='{definitionName}']")
+                elif child.tag in ['command']:
+                    definitionName = child.find('proto/name').text
+                    definitionVariants = parent.findall(f"{child.tag}/proto/name[.='{definitionName}']/../..")
+
+                if definitionName:
+                    bestMatchApi = None
+                    requires = None
+                    for apiName in [toApiName] + fromApiNames:
+                        for variant in definitionVariants:
+                            # Keep any requires attributes from the target API
+                            if variant.get('requires') and variant.get('api') == apiName:
+                                requires = variant.get('requires')
+                            # Find the best matching definition
+                            if apiName in variant.get('api').split(',') and bestMatchApi is None:
+                                bestMatchApi = variant.get('api')
+
+                    if bestMatchApi:
+                        for variant in definitionVariants:
+                            if variant.get('api') != bestMatchApi:
+                                # Only keep best matching definition
+                                parent.remove(variant)
+                            else:
+                                # Add requires attribute from the target API if it is not overridden
+                                if requires is not None and variant.get('requires') is None:
+                                    variant.set('requires', requires)
+                                variant.set('api', toApiName)
+
+
+def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True):
+    """Remove tree Elements with 'api' attributes matching apiName.
+
+        tree - Element at the root of the hierarchy to strip. Only its
+            children can actually be removed, not the tree itself.
+        apiName - string which much match a command-separated component of
+            the 'api' attribute.
+        actuallyDelete - only delete matching elements if True."""
+
+    stack = deque()
+    stack.append(tree)
+
+    while len(stack) > 0:
+        parent = stack.pop()
+
+        for child in parent.findall('*'):
+            api = child.get('api')
+
+            if apiNameMatch(apiName, api):
+                # Add child to the queue
+                stack.append(child)
+            elif not apiNameMatch(apiName, api):
+                # Child does not match requested api. Remove it.
+                if actuallyDelete:
+                    parent.remove(child)
+
+
+class BaseInfo:
+    """Base class for information about a registry feature
+    (type/group/enum/command/API/extension).
+
+    Represents the state of a registry feature, used during API generation.
+    """
+
+    def __init__(self, elem):
+        self.required = False
+        """should this feature be defined during header generation
+        (has it been removed by a profile or version)?"""
+
+        self.declared = False
+        "has this feature been defined already?"
+
+        self.elem = elem
+        "etree Element for this feature"
+
+    def resetState(self):
+        """Reset required/declared to initial values. Used
+        prior to generating a new API interface."""
+        self.required = False
+        self.declared = False
+
+    def compareKeys(self, info, key, required = False):
+        """Return True if self.elem and info.elem have the same attribute
+           value for key.
+           If 'required' is not True, also returns True if neither element
+           has an attribute value for key."""
+
+        if required and key not in self.elem.keys():
+            return False
+        return self.elem.get(key) == info.elem.get(key)
+
+    def compareElem(self, info, infoName):
+        """Return True if self.elem and info.elem have the same definition.
+        info - the other object
+        infoName - 'type' / 'group' / 'enum' / 'command' / 'feature' /
+                   'extension'"""
+
+        if infoName == 'enum':
+            if self.compareKeys(info, 'extends'):
+                # Either both extend the same type, or no type
+                if (self.compareKeys(info, 'value', required = True) or
+                    self.compareKeys(info, 'bitpos', required = True)):
+                    # If both specify the same value or bit position,
+                    # they are equal
+                    return True
+                elif (self.compareKeys(info, 'extnumber') and
+                      self.compareKeys(info, 'offset') and
+                      self.compareKeys(info, 'dir')):
+                    # If both specify the same relative offset, they are equal
+                    return True
+                elif (self.compareKeys(info, 'alias')):
+                    # If both are aliases of the same value
+                    return True
+                else:
+                    return False
+            else:
+                # The same enum cannot extend two different types
+                return False
+        else:
+            # Non-<enum>s should never be redefined
+            return False
+
+
+class TypeInfo(BaseInfo):
+    """Registry information about a type. No additional state
+      beyond BaseInfo is required."""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+        self.additionalValidity = []
+        self.removedValidity = []
+
+    def getMembers(self):
+        """Get a collection of all member elements for this type, if any."""
+        return self.elem.findall('member')
+
+    def resetState(self):
+        BaseInfo.resetState(self)
+        self.additionalValidity = []
+        self.removedValidity = []
+
+
+class GroupInfo(BaseInfo):
+    """Registry information about a group of related enums
+    in an <enums> block, generally corresponding to a C "enum" type."""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+
+
+class EnumInfo(BaseInfo):
+    """Registry information about an enum"""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+        self.type = elem.get('type')
+        """numeric type of the value of the <enum> tag
+        ( '' for GLint, 'u' for GLuint, 'ull' for GLuint64 )"""
+        if self.type is None:
+            self.type = ''
+
+
+class CmdInfo(BaseInfo):
+    """Registry information about a command"""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+        self.additionalValidity = []
+        self.removedValidity = []
+
+    def getParams(self):
+        """Get a collection of all param elements for this command, if any."""
+        return self.elem.findall('param')
+
+    def resetState(self):
+        BaseInfo.resetState(self)
+        self.additionalValidity = []
+        self.removedValidity = []
+
+
+class FeatureInfo(BaseInfo):
+    """Registry information about an API <feature>
+    or <extension>."""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+        self.name = elem.get('name')
+        "feature name string (e.g. 'VK_KHR_surface')"
+
+        self.emit = False
+        "has this feature been defined already?"
+
+        self.sortorder = int(elem.get('sortorder', 0))
+        """explicit numeric sort key within feature and extension groups.
+        Defaults to 0."""
+
+        # Determine element category (vendor). Only works
+        # for <extension> elements.
+        if elem.tag == 'feature':
+            # Element category (vendor) is meaningless for <feature>
+            self.category = 'VERSION'
+            """category, e.g. VERSION or khr/vendor tag"""
+
+            self.version = elem.get('name')
+            """feature name string"""
+
+            self.versionNumber = elem.get('number')
+            """versionNumber - API version number, taken from the 'number'
+               attribute of <feature>. Extensions do not have API version
+               numbers and are assigned number 0."""
+
+            self.number = 0
+            self.supported = None
+        else:
+            # Extract vendor portion of <APIprefix>_<vendor>_<name>
+            self.category = self.name.split('_', 2)[1]
+            self.version = "0"
+            self.versionNumber = "0"
+
+            self.number = int(elem.get('number','0'))
+            """extension number, used for ordering and for assigning
+            enumerant offsets. <feature> features do not have extension
+            numbers and are assigned number 0, as are extensions without
+            numbers, so sorting works."""
+
+            self.supported = elem.get('supported', 'disabled')
+
+class SpirvInfo(BaseInfo):
+    """Registry information about an API <spirvextensions>
+    or <spirvcapability>."""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+
+class FormatInfo(BaseInfo):
+    """Registry information about an API <format>."""
+
+    def __init__(self, elem, condition):
+        BaseInfo.__init__(self, elem)
+        # Need to save the condition here when it is known
+        self.condition = condition
+
+class SyncStageInfo(BaseInfo):
+    """Registry information about <syncstage>."""
+
+    def __init__(self, elem, condition):
+        BaseInfo.__init__(self, elem)
+        # Need to save the condition here when it is known
+        self.condition = condition
+
+class SyncAccessInfo(BaseInfo):
+    """Registry information about <syncaccess>."""
+
+    def __init__(self, elem, condition):
+        BaseInfo.__init__(self, elem)
+        # Need to save the condition here when it is known
+        self.condition = condition
+
+class SyncPipelineInfo(BaseInfo):
+    """Registry information about <syncpipeline>."""
+
+    def __init__(self, elem):
+        BaseInfo.__init__(self, elem)
+
+class Registry:
+    """Object representing an API registry, loaded from an XML file."""
+
+    def __init__(self, gen=None, genOpts=None):
+        if gen is None:
+            # If not specified, give a default object so messaging will work
+            self.gen = OutputGenerator()
+        else:
+            self.gen = gen
+        "Output generator used to write headers / messages"
+
+        if genOpts is None:
+            # If no generator is provided, we may still need the XML API name
+            # (for example, in genRef.py).
+            self.genOpts = GeneratorOptions(apiname = APIConventions().xml_api_name)
+        else:
+            self.genOpts = genOpts
+        "Options controlling features to write and how to format them"
+
+        self.gen.registry = self
+        self.gen.genOpts = self.genOpts
+        self.gen.genOpts.registry = self
+
+        self.tree = None
+        "ElementTree containing the root `<registry>`"
+
+        self.typedict = {}
+        "dictionary of TypeInfo objects keyed by type name"
+
+        self.groupdict = {}
+        "dictionary of GroupInfo objects keyed by group name"
+
+        self.enumdict = {}
+        "dictionary of EnumInfo objects keyed by enum name"
+
+        self.cmddict = {}
+        "dictionary of CmdInfo objects keyed by command name"
+
+        self.apidict = {}
+        "dictionary of FeatureInfo objects for `<feature>` elements keyed by API name"
+
+        self.extensions = []
+        "list of `<extension>` Elements"
+
+        self.extdict = {}
+        "dictionary of FeatureInfo objects for `<extension>` elements keyed by extension name"
+
+        self.spirvextdict = {}
+        "dictionary of FeatureInfo objects for `<spirvextension>` elements keyed by spirv extension name"
+
+        self.spirvcapdict = {}
+        "dictionary of FeatureInfo objects for `<spirvcapability>` elements keyed by spirv capability name"
+
+        self.formatsdict = {}
+        "dictionary of FeatureInfo objects for `<format>` elements keyed by VkFormat name"
+
+        self.syncstagedict = {}
+        "dictionary of Sync*Info objects for `<syncstage>` elements keyed by VkPipelineStageFlagBits2 name"
+
+        self.syncaccessdict = {}
+        "dictionary of Sync*Info objects for `<syncaccess>` elements keyed by VkAccessFlagBits2 name"
+
+        self.syncpipelinedict = {}
+        "dictionary of Sync*Info objects for `<syncpipeline>` elements keyed by pipeline type name"
+
+        self.emitFeatures = False
+        """True to actually emit features for a version / extension,
+        or False to just treat them as emitted"""
+
+        self.breakPat = None
+        "regexp pattern to break on when generating names"
+        # self.breakPat     = re.compile('VkFenceImportFlagBits.*')
+
+        self.requiredextensions = []  # Hack - can remove it after validity generator goes away
+
+        # ** Global types for automatic source generation **
+        # Length Member data
+        self.commandextensiontuple = namedtuple('commandextensiontuple',
+                                                ['command',        # The name of the command being modified
+                                                 'value',          # The value to append to the command
+                                                 'extension'])     # The name of the extension that added it
+        self.validextensionstructs = defaultdict(list)
+        self.commandextensionsuccesses = []
+        self.commandextensionerrors = []
+
+        self.filename     = None
+
+    def loadElementTree(self, tree):
+        """Load ElementTree into a Registry object and parse it."""
+        self.tree = tree
+        self.parseTree()
+
+    def loadFile(self, file):
+        """Load an API registry XML file into a Registry object and parse it"""
+        self.filename = file
+        self.tree = etree.parse(file)
+        self.parseTree()
+
+    def setGenerator(self, gen):
+        """Specify output generator object.
+
+        `None` restores the default generator."""
+        self.gen = gen
+        self.gen.setRegistry(self)
+
+    def addElementInfo(self, elem, info, infoName, dictionary):
+        """Add information about an element to the corresponding dictionary.
+
+        Intended for internal use only.
+
+        - elem - `<type>`/`<enums>`/`<enum>`/`<command>`/`<feature>`/`<extension>`/`<spirvextension>`/`<spirvcapability>`/`<format>`/`<syncstage>`/`<syncaccess>`/`<syncpipeline>` Element
+        - info - corresponding {Type|Group|Enum|Cmd|Feature|Spirv|Format|SyncStage|SyncAccess|SyncPipeline}Info object
+        - infoName - 'type' / 'group' / 'enum' / 'command' / 'feature' / 'extension' / 'spirvextension' / 'spirvcapability' / 'format' / 'syncstage' / 'syncaccess' / 'syncpipeline'
+        - dictionary - self.{type|group|enum|cmd|api|ext|format|spirvext|spirvcap|sync}dict
+
+        The dictionary key is the element 'name' attribute."""
+
+        # self.gen.logMsg('diag', 'Adding ElementInfo.required =',
+        #     info.required, 'name =', elem.get('name'))
+        key = elem.get('name')
+        if key in dictionary:
+            if not dictionary[key].compareElem(info, infoName):
+                self.gen.logMsg('warn', 'Attempt to redefine', key,
+                                '(this should not happen)')
+        else:
+            dictionary[key] = info
+
+    def lookupElementInfo(self, fname, dictionary):
+        """Find a {Type|Enum|Cmd}Info object by name.
+
+        Intended for internal use only.
+
+        If an object qualified by API name exists, use that.
+
+        - fname - name of type / enum / command
+        - dictionary - self.{type|enum|cmd}dict"""
+        key = (fname, self.genOpts.apiname)
+        if key in dictionary:
+            # self.gen.logMsg('diag', 'Found API-specific element for feature', fname)
+            return dictionary[key]
+        if fname in dictionary:
+            # self.gen.logMsg('diag', 'Found generic element for feature', fname)
+            return dictionary[fname]
+
+        return None
+
+    def breakOnName(self, regexp):
+        """Specify a feature name regexp to break on when generating features."""
+        self.breakPat = re.compile(regexp)
+
+    def parseTree(self):
+        """Parse the registry Element, once created"""
+        # This must be the Element for the root <registry>
+        if self.tree is None:
+            raise RuntimeError("Tree not initialized!")
+        self.reg = self.tree.getroot()
+
+        # Preprocess the tree in one of the following ways:
+        # - either merge a set of APIs to another API based on their 'api' attributes
+        # - or remove all elements with non-matching 'api' attributes
+        # The preprocessing happens through a breath-first tree traversal.
+        # This is a blunt hammer, but eliminates the need to track and test
+        # the apis deeper in processing to select the correct elements and
+        # avoid duplicates.
+        # Schema validation should prevent duplicate elements with
+        # overlapping api attributes, or where one element has an api
+        # attribute and the other does not.
+
+        if self.genOpts.mergeApiNames:
+            mergeAPIs(self.reg, self.genOpts.mergeApiNames.split(','), self.genOpts.apiname)
+        else:
+            stripNonmatchingAPIs(self.reg, self.genOpts.apiname, actuallyDelete = True)
+
+        # Create dictionary of registry types from toplevel <types> tags
+        # and add 'name' attribute to each <type> tag (where missing)
+        # based on its <name> element.
+        #
+        # There is usually one <types> block; more are OK
+        # Required <type> attributes: 'name' or nested <name> tag contents
+        self.typedict = {}
+        for type_elem in self.reg.findall('types/type'):
+            # If the <type> does not already have a 'name' attribute, set
+            # it from contents of its <name> tag.
+            if type_elem.get('name') is None:
+                name_elem = type_elem.find('name')
+                if name_elem is None or not name_elem.text:
+                    raise RuntimeError("Type without a name!")
+                type_elem.set('name', name_elem.text)
+            self.addElementInfo(type_elem, TypeInfo(type_elem), 'type', self.typedict)
+
+        # Create dictionary of registry enum groups from <enums> tags.
+        #
+        # Required <enums> attributes: 'name'. If no name is given, one is
+        # generated, but that group cannot be identified and turned into an
+        # enum type definition - it is just a container for <enum> tags.
+        self.groupdict = {}
+        for group in self.reg.findall('enums'):
+            self.addElementInfo(group, GroupInfo(group), 'group', self.groupdict)
+
+        # Create dictionary of registry enums from <enum> tags
+        #
+        # <enums> tags usually define different namespaces for the values
+        #   defined in those tags, but the actual names all share the
+        #   same dictionary.
+        # Required <enum> attributes: 'name', 'value'
+        # For containing <enums> which have type="enum" or type="bitmask",
+        # tag all contained <enum>s are required. This is a stopgap until
+        # a better scheme for tagging core and extension enums is created.
+        self.enumdict = {}
+        for enums in self.reg.findall('enums'):
+            required = (enums.get('type') is not None)
+            for enum in enums.findall('enum'):
+                enumInfo = EnumInfo(enum)
+                enumInfo.required = required
+                self.addElementInfo(enum, enumInfo, 'enum', self.enumdict)
+
+        # Create dictionary of registry commands from <command> tags
+        # and add 'name' attribute to each <command> tag (where missing)
+        # based on its <proto><name> element.
+        #
+        # There is usually only one <commands> block; more are OK.
+        # Required <command> attributes: 'name' or <proto><name> tag contents
+        self.cmddict = {}
+        # List of commands which alias others. Contains
+        #   [ aliasName, element ]
+        # for each alias
+        cmdAlias = []
+        for cmd in self.reg.findall('commands/command'):
+            # If the <command> does not already have a 'name' attribute, set
+            # it from contents of its <proto><name> tag.
+            name = cmd.get('name')
+            if name is None:
+                name_elem = cmd.find('proto/name')
+                if name_elem is None or not name_elem.text:
+                    raise RuntimeError("Command without a name!")
+                name = cmd.set('name', name_elem.text)
+            ci = CmdInfo(cmd)
+            self.addElementInfo(cmd, ci, 'command', self.cmddict)
+            alias = cmd.get('alias')
+            if alias:
+                cmdAlias.append([name, alias, cmd])
+
+        # Now loop over aliases, injecting a copy of the aliased command's
+        # Element with the aliased prototype name replaced with the command
+        # name - if it exists.
+        for (name, alias, cmd) in cmdAlias:
+            if alias in self.cmddict:
+                aliasInfo = self.cmddict[alias]
+                cmdElem = copy.deepcopy(aliasInfo.elem)
+                cmdElem.find('proto/name').text = name
+                cmdElem.set('name', name)
+                cmdElem.set('alias', alias)
+                ci = CmdInfo(cmdElem)
+                # Replace the dictionary entry for the CmdInfo element
+                self.cmddict[name] = ci
+
+                # @  newString = etree.tostring(base, encoding="unicode").replace(aliasValue, aliasName)
+                # @elem.append(etree.fromstring(replacement))
+            else:
+                self.gen.logMsg('warn', 'No matching <command> found for command',
+                                cmd.get('name'), 'alias', alias)
+
+        # Create dictionaries of API and extension interfaces
+        #   from toplevel <api> and <extension> tags.
+        self.apidict = {}
+        format_condition = dict()
+        for feature in self.reg.findall('feature'):
+            featureInfo = FeatureInfo(feature)
+            self.addElementInfo(feature, featureInfo, 'feature', self.apidict)
+
+            # Add additional enums defined only in <feature> tags
+            # to the corresponding enumerated type.
+            # When seen here, the <enum> element, processed to contain the
+            # numeric enum value, is added to the corresponding <enums>
+            # element, as well as adding to the enum dictionary. It is no
+            # longer removed from the <require> element it is introduced in.
+            # Instead, generateRequiredInterface ignores <enum> elements
+            # that extend enumerated types.
+            #
+            # For <enum> tags which are actually just constants, if there is
+            # no 'extends' tag but there is a 'value' or 'bitpos' tag, just
+            # add an EnumInfo record to the dictionary. That works because
+            # output generation of constants is purely dependency-based, and
+            # does not need to iterate through the XML tags.
+            for elem in feature.findall('require'):
+                for enum in elem.findall('enum'):
+                    addEnumInfo = False
+                    groupName = enum.get('extends')
+                    if groupName is not None:
+                        # self.gen.logMsg('diag', 'Found extension enum',
+                        #     enum.get('name'))
+                        # Add version number attribute to the <enum> element
+                        enum.set('version', featureInfo.version)
+                        # Look up the GroupInfo with matching groupName
+                        if groupName in self.groupdict:
+                            # self.gen.logMsg('diag', 'Matching group',
+                            #     groupName, 'found, adding element...')
+                            gi = self.groupdict[groupName]
+                            gi.elem.append(copy.deepcopy(enum))
+                        else:
+                            self.gen.logMsg('warn', 'NO matching group',
+                                            groupName, 'for enum', enum.get('name'), 'found.')
+                        if groupName == "VkFormat":
+                            format_name = enum.get('name')
+                            if enum.get('alias'):
+                                format_name = enum.get('alias')
+                            format_condition[format_name] = featureInfo.name
+                        addEnumInfo = True
+                    elif enum.get('value') or enum.get('bitpos') or enum.get('alias'):
+                        # self.gen.logMsg('diag', 'Adding extension constant "enum"',
+                        #     enum.get('name'))
+                        addEnumInfo = True
+                    if addEnumInfo:
+                        enumInfo = EnumInfo(enum)
+                        self.addElementInfo(enum, enumInfo, 'enum', self.enumdict)
+
+        sync_pipeline_stage_condition = dict()
+        sync_access_condition = dict()
+
+        self.extensions = self.reg.findall('extensions/extension')
+        self.extdict = {}
+        for feature in self.extensions:
+            featureInfo = FeatureInfo(feature)
+            self.addElementInfo(feature, featureInfo, 'extension', self.extdict)
+
+            # Add additional enums defined only in <extension> tags
+            # to the corresponding core type.
+            # Algorithm matches that of enums in a "feature" tag as above.
+            #
+            # This code also adds a 'extnumber' attribute containing the
+            # extension number, used for enumerant value calculation.
+            for elem in feature.findall('require'):
+                for enum in elem.findall('enum'):
+                    addEnumInfo = False
+                    groupName = enum.get('extends')
+                    if groupName is not None:
+                        # self.gen.logMsg('diag', 'Found extension enum',
+                        #     enum.get('name'))
+
+                        # Add <extension> block's extension number attribute to
+                        # the <enum> element unless specified explicitly, such
+                        # as when redefining an enum in another extension.
+                        extnumber = enum.get('extnumber')
+                        if not extnumber:
+                            enum.set('extnumber', str(featureInfo.number))
+
+                        enum.set('extname', featureInfo.name)
+                        enum.set('supported', noneStr(featureInfo.supported))
+                        # Look up the GroupInfo with matching groupName
+                        if groupName in self.groupdict:
+                            # self.gen.logMsg('diag', 'Matching group',
+                            #     groupName, 'found, adding element...')
+                            gi = self.groupdict[groupName]
+                            gi.elem.append(copy.deepcopy(enum))
+                        else:
+                            self.gen.logMsg('warn', 'NO matching group',
+                                            groupName, 'for enum', enum.get('name'), 'found.')
+                        # This is Vulkan-specific
+                        if groupName == "VkFormat":
+                            format_name = enum.get('name')
+                            if enum.get('alias'):
+                                format_name = enum.get('alias')
+                            if format_name in format_condition:
+                                format_condition[format_name] += "," + featureInfo.name
+                            else:
+                                format_condition[format_name] = featureInfo.name
+                        elif groupName == "VkPipelineStageFlagBits2":
+                            stage_flag = enum.get('name')
+                            if enum.get('alias'):
+                                stage_flag = enum.get('alias')
+                            featureName = elem.get('depends') if elem.get('depends') is not None else featureInfo.name
+                            if stage_flag in sync_pipeline_stage_condition:
+                                sync_pipeline_stage_condition[stage_flag] += "," + featureName
+                            else:
+                                sync_pipeline_stage_condition[stage_flag] = featureName
+                        elif groupName == "VkAccessFlagBits2":
+                            access_flag = enum.get('name')
+                            if enum.get('alias'):
+                                access_flag = enum.get('alias')
+                            featureName = elem.get('depends') if elem.get('depends') is not None else featureInfo.name
+                            if access_flag in sync_access_condition:
+                                sync_access_condition[access_flag] += "," + featureName
+                            else:
+                                sync_access_condition[access_flag] = featureName
+
+                        addEnumInfo = True
+                    elif enum.get('value') or enum.get('bitpos') or enum.get('alias'):
+                        # self.gen.logMsg('diag', 'Adding extension constant "enum"',
+                        #     enum.get('name'))
+                        addEnumInfo = True
+                    if addEnumInfo:
+                        enumInfo = EnumInfo(enum)
+                        self.addElementInfo(enum, enumInfo, 'enum', self.enumdict)
+
+        # Parse out all spirv tags in dictionaries
+        # Use addElementInfo to catch duplicates
+        for spirv in self.reg.findall('spirvextensions/spirvextension'):
+            spirvInfo = SpirvInfo(spirv)
+            self.addElementInfo(spirv, spirvInfo, 'spirvextension', self.spirvextdict)
+        for spirv in self.reg.findall('spirvcapabilities/spirvcapability'):
+            spirvInfo = SpirvInfo(spirv)
+            self.addElementInfo(spirv, spirvInfo, 'spirvcapability', self.spirvcapdict)
+
+        for format in self.reg.findall('formats/format'):
+            condition = None
+            format_name = format.get('name')
+            if format_name in format_condition:
+                condition = format_condition[format_name]
+            formatInfo = FormatInfo(format, condition)
+            self.addElementInfo(format, formatInfo, 'format', self.formatsdict)
+
+        for stage in self.reg.findall('sync/syncstage'):
+            condition = None
+            stage_flag = stage.get('name')
+            if stage_flag in sync_pipeline_stage_condition:
+                condition = sync_pipeline_stage_condition[stage_flag]
+            syncInfo = SyncStageInfo(stage, condition)
+            self.addElementInfo(stage, syncInfo, 'syncstage', self.syncstagedict)
+
+        for access in self.reg.findall('sync/syncaccess'):
+            condition = None
+            access_flag = access.get('name')
+            if access_flag in sync_access_condition:
+                condition = sync_access_condition[access_flag]
+            syncInfo = SyncAccessInfo(access, condition)
+            self.addElementInfo(access, syncInfo, 'syncaccess', self.syncaccessdict)
+
+        for pipeline in self.reg.findall('sync/syncpipeline'):
+            syncInfo = SyncPipelineInfo(pipeline)
+            self.addElementInfo(pipeline, syncInfo, 'syncpipeline', self.syncpipelinedict)
+
+    def dumpReg(self, maxlen=120, filehandle=sys.stdout):
+        """Dump all the dictionaries constructed from the Registry object.
+
+        Diagnostic to dump the dictionaries to specified file handle (default stdout).
+        Truncates type / enum / command elements to maxlen characters (default 120)"""
+        write('***************************************', file=filehandle)
+        write('    ** Dumping Registry contents **',     file=filehandle)
+        write('***************************************', file=filehandle)
+        write('// Types', file=filehandle)
+        for name in self.typedict:
+            tobj = self.typedict[name]
+            write('    Type', name, '->', etree.tostring(tobj.elem)[0:maxlen], file=filehandle)
+        write('// Groups', file=filehandle)
+        for name in self.groupdict:
+            gobj = self.groupdict[name]
+            write('    Group', name, '->', etree.tostring(gobj.elem)[0:maxlen], file=filehandle)
+        write('// Enums', file=filehandle)
+        for name in self.enumdict:
+            eobj = self.enumdict[name]
+            write('    Enum', name, '->', etree.tostring(eobj.elem)[0:maxlen], file=filehandle)
+        write('// Commands', file=filehandle)
+        for name in self.cmddict:
+            cobj = self.cmddict[name]
+            write('    Command', name, '->', etree.tostring(cobj.elem)[0:maxlen], file=filehandle)
+        write('// APIs', file=filehandle)
+        for key in self.apidict:
+            write('    API Version ', key, '->',
+                  etree.tostring(self.apidict[key].elem)[0:maxlen], file=filehandle)
+        write('// Extensions', file=filehandle)
+        for key in self.extdict:
+            write('    Extension', key, '->',
+                  etree.tostring(self.extdict[key].elem)[0:maxlen], file=filehandle)
+        write('// SPIR-V', file=filehandle)
+        for key in self.spirvextdict:
+            write('    SPIR-V Extension', key, '->',
+                  etree.tostring(self.spirvextdict[key].elem)[0:maxlen], file=filehandle)
+        for key in self.spirvcapdict:
+            write('    SPIR-V Capability', key, '->',
+                  etree.tostring(self.spirvcapdict[key].elem)[0:maxlen], file=filehandle)
+        write('// VkFormat', file=filehandle)
+        for key in self.formatsdict:
+            write('    VkFormat', key, '->',
+                  etree.tostring(self.formatsdict[key].elem)[0:maxlen], file=filehandle)
+
+    def markTypeRequired(self, typename, required):
+        """Require (along with its dependencies) or remove (but not its dependencies) a type.
+
+        - typename - name of type
+        - required - boolean (to tag features as required or not)
+        """
+        self.gen.logMsg('diag', 'tagging type:', typename, '-> required =', required)
+
+        # Get TypeInfo object for <type> tag corresponding to typename
+        typeinfo = self.lookupElementInfo(typename, self.typedict)
+        if typeinfo is not None:
+            if required:
+                # Tag type dependencies in 'alias' and 'required' attributes as
+                # required. This does not un-tag dependencies in a <remove>
+                # tag. See comments in markRequired() below for the reason.
+                for attrib_name in ['requires', 'alias']:
+                    depname = typeinfo.elem.get(attrib_name)
+                    if depname:
+                        self.gen.logMsg('diag', 'Generating dependent type',
+                                        depname, 'for', attrib_name, 'type', typename)
+                        # Do not recurse on self-referential structures.
+                        if typename != depname:
+                            self.markTypeRequired(depname, required)
+                        else:
+                            self.gen.logMsg('diag', 'type', typename, 'is self-referential')
+                # Tag types used in defining this type (e.g. in nested
+                # <type> tags)
+                # Look for <type> in entire <command> tree,
+                # not just immediate children
+                for subtype in typeinfo.elem.findall('.//type'):
+                    self.gen.logMsg('diag', 'markRequired: type requires dependent <type>', subtype.text)
+                    if typename != subtype.text:
+                        self.markTypeRequired(subtype.text, required)
+                    else:
+                        self.gen.logMsg('diag', 'type', typename, 'is self-referential')
+                # Tag enums used in defining this type, for example in
+                #   <member><name>member</name>[<enum>MEMBER_SIZE</enum>]</member>
+                for subenum in typeinfo.elem.findall('.//enum'):
+                    self.gen.logMsg('diag', 'markRequired: type requires dependent <enum>', subenum.text)
+                    self.markEnumRequired(subenum.text, required)
+                # Tag type dependency in 'bitvalues' attributes as
+                # required. This ensures that the bit values for a flag
+                # are emitted
+                depType = typeinfo.elem.get('bitvalues')
+                if depType:
+                    self.gen.logMsg('diag', 'Generating bitflag type',
+                                    depType, 'for type', typename)
+                    self.markTypeRequired(depType, required)
+                    group = self.lookupElementInfo(depType, self.groupdict)
+                    if group is not None:
+                        group.flagType = typeinfo
+
+            typeinfo.required = required
+        elif '.h' not in typename:
+            self.gen.logMsg('warn', 'type:', typename, 'IS NOT DEFINED')
+
+    def markEnumRequired(self, enumname, required):
+        """Mark an enum as required or not.
+
+        - enumname - name of enum
+        - required - boolean (to tag features as required or not)"""
+
+        self.gen.logMsg('diag', 'markEnumRequired: tagging enum:', enumname, '-> required =', required)
+        enum = self.lookupElementInfo(enumname, self.enumdict)
+        if enum is not None:
+            # If the enum is part of a group, and is being removed, then
+            # look it up in that <enums> tag and remove the Element there,
+            # so that it is not visible to generators (which traverse the
+            # <enums> tag elements rather than using the dictionaries).
+            if not required:
+                groupName = enum.elem.get('extends')
+                if groupName is not None:
+                    self.gen.logMsg('diag', f'markEnumRequired: Removing extending enum {enum.elem.get("name")}')
+
+                    # Look up the Info with matching groupName
+                    if groupName in self.groupdict:
+                        gi = self.groupdict[groupName]
+                        gienum = gi.elem.find("enum[@name='" + enumname + "']")
+                        if gienum is not None:
+                            # Remove copy of this enum from the group
+                            gi.elem.remove(gienum)
+                        else:
+                            self.gen.logMsg('warn', 'markEnumRequired: Cannot remove enum',
+                                            enumname, 'not found in group',
+                                            groupName)
+                    else:
+                        self.gen.logMsg('warn', 'markEnumRequired: Cannot remove enum',
+                                        enumname, 'from nonexistent group',
+                                        groupName)
+                else:
+                    # This enum is not an extending enum.
+                    # The XML tree must be searched for all <enums> that
+                    # might have it, so we know the parent to delete from.
+
+                    enumName = enum.elem.get('name')
+
+                    self.gen.logMsg('diag', f'markEnumRequired: Removing non-extending enum {enumName}')
+
+                    count = 0
+                    for enums in self.reg.findall('enums'):
+                        for thisEnum in enums.findall('enum'):
+                            if thisEnum.get('name') == enumName:
+                                # Actually remove it
+                                count = count + 1
+                                enums.remove(thisEnum)
+
+                    if count == 0:
+                        self.gen.logMsg('warn', f'markEnumRequired: {enumName}) not found in any <enums> tag')
+
+            enum.required = required
+            # Tag enum dependencies in 'alias' attribute as required
+            depname = enum.elem.get('alias')
+            if depname:
+                self.gen.logMsg('diag', 'markEnumRequired: Generating dependent enum',
+                                depname, 'for alias', enumname, 'required =', enum.required)
+                self.markEnumRequired(depname, required)
+        else:
+            self.gen.logMsg('warn', f'markEnumRequired: {enumname} IS NOT DEFINED')
+
+    def markCmdRequired(self, cmdname, required):
+        """Mark a command as required or not.
+
+        - cmdname - name of command
+        - required - boolean (to tag features as required or not)"""
+        self.gen.logMsg('diag', 'tagging command:', cmdname, '-> required =', required)
+        cmd = self.lookupElementInfo(cmdname, self.cmddict)
+        if cmd is not None:
+            cmd.required = required
+
+            # Tag command dependencies in 'alias' attribute as required
+            #
+            # This is usually not done, because command 'aliases' are not
+            # actual C language aliases like type and enum aliases. Instead
+            # they are just duplicates of the function signature of the
+            # alias. This means that there is no dependency of a command
+            # alias on what it aliases. One exception is validity includes,
+            # where the spec markup needs the promoted-to validity include
+            # even if only the promoted-from command is being built.
+            if self.genOpts.requireCommandAliases:
+                depname = cmd.elem.get('alias')
+                if depname:
+                    self.gen.logMsg('diag', 'Generating dependent command',
+                                    depname, 'for alias', cmdname)
+                    self.markCmdRequired(depname, required)
+
+            # Tag all parameter types of this command as required.
+            # This does not remove types of commands in a <remove>
+            # tag, because many other commands may use the same type.
+            # We could be more clever and reference count types,
+            # instead of using a boolean.
+            if required:
+                # Look for <type> in entire <command> tree,
+                # not just immediate children
+                for type_elem in cmd.elem.findall('.//type'):
+                    self.gen.logMsg('diag', 'markRequired: command implicitly requires dependent type', type_elem.text)
+                    self.markTypeRequired(type_elem.text, required)
+        else:
+            self.gen.logMsg('warn', 'command:', cmdname, 'IS NOT DEFINED')
+
+    def markRequired(self, featurename, feature, required):
+        """Require or remove features specified in the Element.
+
+        - featurename - name of the feature
+        - feature - Element for `<require>` or `<remove>` tag
+        - required - boolean (to tag features as required or not)"""
+        self.gen.logMsg('diag', 'markRequired (feature = <too long to print>, required =', required, ')')
+
+        # Loop over types, enums, and commands in the tag
+        # @@ It would be possible to respect 'api' and 'profile' attributes
+        #  in individual features, but that is not done yet.
+        for typeElem in feature.findall('type'):
+            self.markTypeRequired(typeElem.get('name'), required)
+        for enumElem in feature.findall('enum'):
+            self.markEnumRequired(enumElem.get('name'), required)
+
+        for cmdElem in feature.findall('command'):
+            self.markCmdRequired(cmdElem.get('name'), required)
+
+        # Extensions may need to extend existing commands or other items in the future.
+        # So, look for extend tags.
+        for extendElem in feature.findall('extend'):
+            extendType = extendElem.get('type')
+            if extendType == 'command':
+                commandName = extendElem.get('name')
+                successExtends = extendElem.get('successcodes')
+                if successExtends is not None:
+                    for success in successExtends.split(','):
+                        self.commandextensionsuccesses.append(self.commandextensiontuple(command=commandName,
+                                                                                         value=success,
+                                                                                         extension=featurename))
+                errorExtends = extendElem.get('errorcodes')
+                if errorExtends is not None:
+                    for error in errorExtends.split(','):
+                        self.commandextensionerrors.append(self.commandextensiontuple(command=commandName,
+                                                                                      value=error,
+                                                                                      extension=featurename))
+            else:
+                self.gen.logMsg('warn', 'extend type:', extendType, 'IS NOT SUPPORTED')
+
+    def getAlias(self, elem, dict):
+        """Check for an alias in the same require block.
+
+        - elem - Element to check for an alias"""
+
+        # Try to find an alias
+        alias = elem.get('alias')
+        if alias is None:
+            name = elem.get('name')
+            typeinfo = self.lookupElementInfo(name, dict)
+            if not typeinfo:
+                self.gen.logMsg('error', name, 'is not a known name')
+            alias = typeinfo.elem.get('alias')
+
+        return alias
+
+    def checkForCorrectionAliases(self, alias, require, tag):
+        """Check for an alias in the same require block.
+
+        - alias - String name of the alias
+        - require -  `<require>` block from the registry
+        - tag - tag to look for in the require block"""
+
+        # For the time being, the code below is bypassed. It has the effect
+        # of excluding "spelling aliases" created to comply with the style
+        # guide, but this leaves references out of the specification and
+        # causes broken internal links.
+        #
+        # if alias and require.findall(tag + "[@name='" + alias + "']"):
+        #     return True
+
+        return False
+
+    def fillFeatureDictionary(self, interface, featurename, api, profile):
+        """Capture added interfaces for a `<version>` or `<extension>`.
+
+        - interface - Element for `<version>` or `<extension>`, containing
+          `<require>` and `<remove>` tags
+        - featurename - name of the feature
+        - api - string specifying API name being generated
+        - profile - string specifying API profile being generated"""
+
+        # Explicitly initialize known types - errors for unhandled categories
+        self.gen.featureDictionary[featurename] = {
+            "enumconstant": {},
+            "command": {},
+            "enum": {},
+            "struct": {},
+            "handle": {},
+            "basetype": {},
+            "include": {},
+            "define": {},
+            "bitmask": {},
+            "union": {},
+            "funcpointer": {},
+        }
+
+        # <require> marks things that are required by this version/profile
+        for require in interface.findall('require'):
+            if matchAPIProfile(api, profile, require):
+
+                # Determine the required extension or version needed for a require block
+                # Assumes that only one of these is specified
+                # 'extension', and therefore 'required_key', may be a boolean
+                # expression of extension names.
+                # 'required_key' is used only as a dictionary key at
+                # present, and passed through to the script generators, so
+                # they must be prepared to parse that boolean expression.
+                required_key = require.get('depends')
+
+                # Loop over types, enums, and commands in the tag
+                for typeElem in require.findall('type'):
+                    typename = typeElem.get('name')
+                    typeinfo = self.lookupElementInfo(typename, self.typedict)
+
+                    if typeinfo:
+                        # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible.
+                        alias = self.getAlias(typeElem, self.typedict)
+                        if not self.checkForCorrectionAliases(alias, require, 'type'):
+                            # Resolve the type info to the actual type, so we get an accurate read for 'structextends'
+                            while alias:
+                                typeinfo = self.lookupElementInfo(alias, self.typedict)
+                                alias = typeinfo.elem.get('alias')
+
+                            typecat = typeinfo.elem.get('category')
+                            typeextends = typeinfo.elem.get('structextends')
+                            if not required_key in self.gen.featureDictionary[featurename][typecat]:
+                                self.gen.featureDictionary[featurename][typecat][required_key] = {}
+                            if not typeextends in self.gen.featureDictionary[featurename][typecat][required_key]:
+                                self.gen.featureDictionary[featurename][typecat][required_key][typeextends] = []
+                            self.gen.featureDictionary[featurename][typecat][required_key][typeextends].append(typename)
+                        else:
+                            self.gen.logMsg('warn', 'fillFeatureDictionary: NOT filling for {}'.format(typename))
+
+
+                for enumElem in require.findall('enum'):
+                    enumname = enumElem.get('name')
+                    typeinfo = self.lookupElementInfo(enumname, self.enumdict)
+
+                    # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible.
+                    alias = self.getAlias(enumElem, self.enumdict)
+                    if not self.checkForCorrectionAliases(alias, require, 'enum'):
+                        enumextends = enumElem.get('extends')
+                        if not required_key in self.gen.featureDictionary[featurename]['enumconstant']:
+                            self.gen.featureDictionary[featurename]['enumconstant'][required_key] = {}
+                        if not enumextends in self.gen.featureDictionary[featurename]['enumconstant'][required_key]:
+                            self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends] = []
+                        self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends].append(enumname)
+                    else:
+                        self.gen.logMsg('warn', 'fillFeatureDictionary: NOT filling for {}'.format(typename))
+
+                for cmdElem in require.findall('command'):
+                    # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible.
+                    alias = self.getAlias(cmdElem, self.cmddict)
+                    if not self.checkForCorrectionAliases(alias, require, 'command'):
+                        if not required_key in self.gen.featureDictionary[featurename]['command']:
+                            self.gen.featureDictionary[featurename]['command'][required_key] = []
+                        self.gen.featureDictionary[featurename]['command'][required_key].append(cmdElem.get('name'))
+                    else:
+                        self.gen.logMsg('warn', 'fillFeatureDictionary: NOT filling for {}'.format(typename))
+
+    def requireFeatures(self, interface, featurename, api, profile):
+        """Process `<require>` tags for a `<version>` or `<extension>`.
+
+        - interface - Element for `<version>` or `<extension>`, containing
+          `<require>` tags
+        - featurename - name of the feature
+        - api - string specifying API name being generated
+        - profile - string specifying API profile being generated"""
+
+        # <require> marks things that are required by this version/profile
+        for feature in interface.findall('require'):
+            if matchAPIProfile(api, profile, feature):
+                self.markRequired(featurename, feature, True)
+
+    def removeFeatures(self, interface, featurename, api, profile):
+        """Process `<remove>` tags for a `<version>` or `<extension>`.
+
+        - interface - Element for `<version>` or `<extension>`, containing
+          `<remove>` tags
+        - featurename - name of the feature
+        - api - string specifying API name being generated
+        - profile - string specifying API profile being generated"""
+
+        # <remove> marks things that are removed by this version/profile
+        for feature in interface.findall('remove'):
+            if matchAPIProfile(api, profile, feature):
+                self.markRequired(featurename, feature, False)
+
+    def assignAdditionalValidity(self, interface, api, profile):
+        # Loop over all usage inside all <require> tags.
+        for feature in interface.findall('require'):
+            if matchAPIProfile(api, profile, feature):
+                for v in feature.findall('usage'):
+                    if v.get('command'):
+                        self.cmddict[v.get('command')].additionalValidity.append(copy.deepcopy(v))
+                    if v.get('struct'):
+                        self.typedict[v.get('struct')].additionalValidity.append(copy.deepcopy(v))
+
+    def removeAdditionalValidity(self, interface, api, profile):
+        # Loop over all usage inside all <remove> tags.
+        for feature in interface.findall('remove'):
+            if matchAPIProfile(api, profile, feature):
+                for v in feature.findall('usage'):
+                    if v.get('command'):
+                        self.cmddict[v.get('command')].removedValidity.append(copy.deepcopy(v))
+                    if v.get('struct'):
+                        self.typedict[v.get('struct')].removedValidity.append(copy.deepcopy(v))
+
+    def generateFeature(self, fname, ftype, dictionary, explicit=False):
+        """Generate a single type / enum group / enum / command,
+        and all its dependencies as needed.
+
+        - fname - name of feature (`<type>`/`<enum>`/`<command>`)
+        - ftype - type of feature, 'type' | 'enum' | 'command'
+        - dictionary - of *Info objects - self.{type|enum|cmd}dict
+        - explicit - True if this is explicitly required by the top-level
+          XML <require> tag, False if it is a dependency of an explicit
+          requirement."""
+
+        self.gen.logMsg('diag', 'generateFeature: generating', ftype, fname)
+
+        if not (explicit or self.genOpts.requireDepends):
+            self.gen.logMsg('diag', 'generateFeature: NOT generating', ftype, fname, 'because generator does not require dependencies')
+            return
+
+        f = self.lookupElementInfo(fname, dictionary)
+        if f is None:
+            # No such feature. This is an error, but reported earlier
+            self.gen.logMsg('diag', 'No entry found for feature', fname,
+                            'returning!')
+            return
+
+        # If feature is not required, or has already been declared, return
+        if not f.required:
+            self.gen.logMsg('diag', 'Skipping', ftype, fname, '(not required)')
+            return
+        if f.declared:
+            self.gen.logMsg('diag', 'Skipping', ftype, fname, '(already declared)')
+            return
+        # Always mark feature declared, as though actually emitted
+        f.declared = True
+
+        # Determine if this is an alias, and of what, if so
+        alias = f.elem.get('alias')
+        if alias:
+            self.gen.logMsg('diag', fname, 'is an alias of', alias)
+
+        # Pull in dependent declaration(s) of the feature.
+        # For types, there may be one type in the 'requires' attribute of
+        #   the element, one in the 'alias' attribute, and many in
+        #   embedded <type> and <enum> tags within the element.
+        # For commands, there may be many in <type> tags within the element.
+        # For enums, no dependencies are allowed (though perhaps if you
+        #   have a uint64 enum, it should require that type).
+        genProc = None
+        followupFeature = None
+        if ftype == 'type':
+            genProc = self.gen.genType
+
+            # Generate type dependencies in 'alias' and 'requires' attributes
+            if alias:
+                self.generateFeature(alias, 'type', self.typedict)
+            requires = f.elem.get('requires')
+            if requires:
+                self.gen.logMsg('diag', 'Generating required dependent type',
+                                requires)
+                self.generateFeature(requires, 'type', self.typedict)
+
+            # Generate types used in defining this type (e.g. in nested
+            # <type> tags)
+            # Look for <type> in entire <command> tree,
+            # not just immediate children
+            for subtype in f.elem.findall('.//type'):
+                self.gen.logMsg('diag', 'Generating required dependent <type>',
+                                subtype.text)
+                self.generateFeature(subtype.text, 'type', self.typedict)
+
+            # Generate enums used in defining this type, for example in
+            #   <member><name>member</name>[<enum>MEMBER_SIZE</enum>]</member>
+            for subtype in f.elem.findall('.//enum'):
+                self.gen.logMsg('diag', 'Generating required dependent <enum>',
+                                subtype.text)
+                self.generateFeature(subtype.text, 'enum', self.enumdict)
+
+            # If the type is an enum group, look up the corresponding
+            # group in the group dictionary and generate that instead.
+            if f.elem.get('category') == 'enum':
+                self.gen.logMsg('diag', 'Type', fname, 'is an enum group, so generate that instead')
+                group = self.lookupElementInfo(fname, self.groupdict)
+                if alias is not None:
+                    # An alias of another group name.
+                    # Pass to genGroup with 'alias' parameter = aliased name
+                    self.gen.logMsg('diag', 'Generating alias', fname,
+                                    'for enumerated type', alias)
+                    # Now, pass the *aliased* GroupInfo to the genGroup, but
+                    # with an additional parameter which is the alias name.
+                    genProc = self.gen.genGroup
+                    f = self.lookupElementInfo(alias, self.groupdict)
+                elif group is None:
+                    self.gen.logMsg('warn', 'Skipping enum type', fname,
+                                    ': No matching enumerant group')
+                    return
+                else:
+                    genProc = self.gen.genGroup
+                    f = group
+
+                    # @ The enum group is not ready for generation. At this
+                    # @   point, it contains all <enum> tags injected by
+                    # @   <extension> tags without any verification of whether
+                    # @   they are required or not. It may also contain
+                    # @   duplicates injected by multiple consistent
+                    # @   definitions of an <enum>.
+
+                    # @ Pass over each enum, marking its enumdict[] entry as
+                    # @ required or not. Mark aliases of enums as required,
+                    # @ too.
+
+                    enums = group.elem.findall('enum')
+
+                    self.gen.logMsg('diag', 'generateFeature: checking enums for group', fname)
+
+                    # Check for required enums, including aliases
+                    # LATER - Check for, report, and remove duplicates?
+                    enumAliases = []
+                    for elem in enums:
+                        name = elem.get('name')
+
+                        required = False
+
+                        extname = elem.get('extname')
+                        version = elem.get('version')
+                        if extname is not None:
+                            # 'supported' attribute was injected when the <enum> element was
+                            # moved into the <enums> group in Registry.parseTree()
+                            supported_list = elem.get('supported').split(",")
+                            if self.genOpts.defaultExtensions in supported_list:
+                                required = True
+                            elif re.match(self.genOpts.addExtensions, extname) is not None:
+                                required = True
+                        elif version is not None:
+                            required = re.match(self.genOpts.emitversions, version) is not None
+                        else:
+                            required = True
+
+                        self.gen.logMsg('diag', '* required =', required, 'for', name)
+                        if required:
+                            # Mark this element as required (in the element, not the EnumInfo)
+                            elem.set('required', 'true')
+                            # If it is an alias, track that for later use
+                            enumAlias = elem.get('alias')
+                            if enumAlias:
+                                enumAliases.append(enumAlias)
+                    for elem in enums:
+                        name = elem.get('name')
+                        if name in enumAliases:
+                            elem.set('required', 'true')
+                            self.gen.logMsg('diag', '* also need to require alias', name)
+            if f is None:
+                raise RuntimeError("Should not get here")
+            if f.elem.get('category') == 'bitmask':
+                followupFeature = f.elem.get('bitvalues')
+        elif ftype == 'command':
+            # Generate command dependencies in 'alias' attribute
+            if alias:
+                self.generateFeature(alias, 'command', self.cmddict)
+
+            genProc = self.gen.genCmd
+            for type_elem in f.elem.findall('.//type'):
+                depname = type_elem.text
+                self.gen.logMsg('diag', 'Generating required parameter type',
+                                depname)
+                self.generateFeature(depname, 'type', self.typedict)
+        elif ftype == 'enum':
+            # Generate enum dependencies in 'alias' attribute
+            if alias:
+                self.generateFeature(alias, 'enum', self.enumdict)
+            genProc = self.gen.genEnum
+
+        # Actually generate the type only if emitting declarations
+        if self.emitFeatures:
+            self.gen.logMsg('diag', 'Emitting', ftype, 'decl for', fname)
+            if genProc is None:
+                raise RuntimeError("genProc is None when we should be emitting")
+            genProc(f, fname, alias)
+        else:
+            self.gen.logMsg('diag', 'Skipping', ftype, fname,
+                            '(should not be emitted)')
+
+        if followupFeature:
+            self.gen.logMsg('diag', 'Generating required bitvalues <enum>',
+                            followupFeature)
+            self.generateFeature(followupFeature, "type", self.typedict)
+
+    def generateRequiredInterface(self, interface):
+        """Generate all interfaces required by an API version or extension.
+
+        - interface - Element for `<version>` or `<extension>`"""
+
+        # Loop over all features inside all <require> tags.
+        for features in interface.findall('require'):
+            for t in features.findall('type'):
+                self.generateFeature(t.get('name'), 'type', self.typedict, explicit=True)
+            for e in features.findall('enum'):
+                # If this is an enum extending an enumerated type, do not
+                # generate it - this has already been done in reg.parseTree,
+                # by copying this element into the enumerated type.
+                enumextends = e.get('extends')
+                if not enumextends:
+                    self.generateFeature(e.get('name'), 'enum', self.enumdict, explicit=True)
+            for c in features.findall('command'):
+                self.generateFeature(c.get('name'), 'command', self.cmddict, explicit=True)
+
+    def generateSpirv(self, spirv, dictionary):
+        if spirv is None:
+            self.gen.logMsg('diag', 'No entry found for element', name,
+                            'returning!')
+            return
+
+        name = spirv.elem.get('name')
+        # No known alias for spirv elements
+        alias = None
+        if spirv.emit:
+            genProc = self.gen.genSpirv
+            genProc(spirv, name, alias)
+
+    def stripUnsupportedAPIs(self, dictionary, attribute, supportedDictionary):
+        """Strip unsupported APIs from attributes of APIs.
+           dictionary - *Info dictionary of APIs to be updated
+           attribute - attribute name to look for in each API
+           supportedDictionary - dictionary in which to look for supported
+            API elements in the attribute"""
+
+        for key in dictionary:
+            eleminfo = dictionary[key]
+            attribstring = eleminfo.elem.get(attribute)
+            if attribstring is not None:
+                apis = []
+                stripped = False
+                for api in attribstring.split(','):
+                    ##print('Checking API {} referenced by {}'.format(api, key))
+                    if api in supportedDictionary and supportedDictionary[api].required:
+                        apis.append(api)
+                    else:
+                        stripped = True
+                        ##print('\t**STRIPPING API {} from {}'.format(api, key))
+
+                # Update the attribute after stripping stuff.
+                # Could sort apis before joining, but it is not a clear win
+                if stripped:
+                    eleminfo.elem.set(attribute, ','.join(apis))
+
+    def stripUnsupportedAPIsFromList(self, dictionary, supportedDictionary):
+        """Strip unsupported APIs from attributes of APIs.
+           dictionary - dictionary of list of structure name strings
+           supportedDictionary - dictionary in which to look for supported
+            API elements in the attribute"""
+
+        for key in dictionary:
+            attribstring = dictionary[key]
+            if attribstring is not None:
+                apis = []
+                stripped = False
+                for api in attribstring:
+                    ##print('Checking API {} referenced by {}'.format(api, key))
+                    if supportedDictionary[api].required:
+                        apis.append(api)
+                    else:
+                        stripped = True
+                        ##print('\t**STRIPPING API {} from {}'.format(api, key))
+
+                # Update the attribute after stripping stuff.
+                # Could sort apis before joining, but it is not a clear win
+                if stripped:
+                    dictionary[key] = apis
+
+    def generateFormat(self, format, dictionary):
+        if format is None:
+            self.gen.logMsg('diag', 'No entry found for format element',
+                            'returning!')
+            return
+
+        name = format.elem.get('name')
+        # No known alias for VkFormat elements
+        alias = None
+        if format.emit:
+            genProc = self.gen.genFormat
+            genProc(format, name, alias)
+
+    def generateSyncStage(self, sync):
+        genProc = self.gen.genSyncStage
+        genProc(sync)
+
+    def generateSyncAccess(self, sync):
+        genProc = self.gen.genSyncAccess
+        genProc(sync)
+
+    def generateSyncPipeline(self, sync):
+        genProc = self.gen.genSyncPipeline
+        genProc(sync)
+
+    def tagValidExtensionStructs(self):
+        """Construct a "validextensionstructs" list for parent structures
+           based on "structextends" tags in child structures.
+           Only do this for structures tagged as required."""
+
+        for typeinfo in self.typedict.values():
+            type_elem = typeinfo.elem
+            if typeinfo.required and type_elem.get('category') == 'struct':
+                struct_extends = type_elem.get('structextends')
+                if struct_extends is not None:
+                    for parent in struct_extends.split(','):
+                        # self.gen.logMsg('diag', type_elem.get('name'), 'extends', parent)
+                        self.validextensionstructs[parent].append(type_elem.get('name'))
+
+        # Sort the lists so they do not depend on the XML order
+        for parent in self.validextensionstructs:
+            self.validextensionstructs[parent].sort()
+
+    def apiGen(self):
+        """Generate interface for specified versions using the current
+        generator and generator options"""
+
+        self.gen.logMsg('diag', '*******************************************')
+        self.gen.logMsg('diag', '  Registry.apiGen file:', self.genOpts.filename,
+                        'api:', self.genOpts.apiname,
+                        'profile:', self.genOpts.profile)
+        self.gen.logMsg('diag', '*******************************************')
+
+        # Could reset required/declared flags for all features here.
+        # This has been removed as never used. The initial motivation was
+        # the idea of calling apiGen() repeatedly for different targets, but
+        # this has never been done. The 20% or so build-time speedup that
+        # might result is not worth the effort to make it actually work.
+        #
+        # self.apiReset()
+
+        # Compile regexps used to select versions & extensions
+        regVersions = re.compile(self.genOpts.versions)
+        regEmitVersions = re.compile(self.genOpts.emitversions)
+        regAddExtensions = re.compile(self.genOpts.addExtensions)
+        regRemoveExtensions = re.compile(self.genOpts.removeExtensions)
+        regEmitExtensions = re.compile(self.genOpts.emitExtensions)
+        regEmitSpirv = re.compile(self.genOpts.emitSpirv)
+        regEmitFormats = re.compile(self.genOpts.emitFormats)
+
+        # Get all matching API feature names & add to list of FeatureInfo
+        # Note we used to select on feature version attributes, not names.
+        features = []
+        apiMatch = False
+        for key in self.apidict:
+            fi = self.apidict[key]
+            api = fi.elem.get('api')
+            if apiNameMatch(self.genOpts.apiname, api):
+                apiMatch = True
+                if regVersions.match(fi.name):
+                    # Matches API & version #s being generated. Mark for
+                    # emission and add to the features[] list .
+                    # @@ Could use 'declared' instead of 'emit'?
+                    fi.emit = (regEmitVersions.match(fi.name) is not None)
+                    features.append(fi)
+                    if not fi.emit:
+                        self.gen.logMsg('diag', 'NOT tagging feature api =', api,
+                                        'name =', fi.name, 'version =', fi.version,
+                                        'for emission (does not match emitversions pattern)')
+                    else:
+                        self.gen.logMsg('diag', 'Including feature api =', api,
+                                        'name =', fi.name, 'version =', fi.version,
+                                        'for emission (matches emitversions pattern)')
+                else:
+                    self.gen.logMsg('diag', 'NOT including feature api =', api,
+                                    'name =', fi.name, 'version =', fi.version,
+                                    '(does not match requested versions)')
+            else:
+                self.gen.logMsg('diag', 'NOT including feature api =', api,
+                                'name =', fi.name,
+                                '(does not match requested API)')
+        if not apiMatch:
+            self.gen.logMsg('warn', 'No matching API versions found!')
+
+        # Get all matching extensions, in order by their extension number,
+        # and add to the list of features.
+        # Start with extensions whose 'supported' attributes match the API
+        # being generated. Add extensions matching the pattern specified in
+        # regExtensions, then remove extensions matching the pattern
+        # specified in regRemoveExtensions
+        for (extName, ei) in sorted(self.extdict.items(), key=lambda x: x[1].number if x[1].number is not None else '0'):
+            extName = ei.name
+            include = False
+
+            # Include extension if defaultExtensions is not None and is
+            # exactly matched by the 'supported' attribute.
+            if apiNameMatch(self.genOpts.defaultExtensions,
+                            ei.elem.get('supported')):
+                self.gen.logMsg('diag', 'Including extension',
+                                extName, "(defaultExtensions matches the 'supported' attribute)")
+                include = True
+
+            # Include additional extensions if the extension name matches
+            # the regexp specified in the generator options. This allows
+            # forcing extensions into an interface even if they are not
+            # tagged appropriately in the registry.
+            # However, we still respect the 'supported' attribute.
+            if regAddExtensions.match(extName) is not None:
+                if not apiNameMatch(self.genOpts.apiname, ei.elem.get('supported')):
+                    self.gen.logMsg('diag', 'NOT including extension',
+                                    extName, '(matches explicitly requested, but does not match the \'supported\' attribute)')
+                    include = False
+                else:
+                    self.gen.logMsg('diag', 'Including extension',
+                                    extName, '(matches explicitly requested extensions to add)')
+                    include = True
+            # Remove extensions if the name matches the regexp specified
+            # in generator options. This allows forcing removal of
+            # extensions from an interface even if they are tagged that
+            # way in the registry.
+            if regRemoveExtensions.match(extName) is not None:
+                self.gen.logMsg('diag', 'Removing extension',
+                                extName, '(matches explicitly requested extensions to remove)')
+                include = False
+
+            # If the extension is to be included, add it to the
+            # extension features list.
+            if include:
+                ei.emit = (regEmitExtensions.match(extName) is not None)
+                features.append(ei)
+                if not ei.emit:
+                    self.gen.logMsg('diag', 'NOT tagging extension',
+                                    extName,
+                                    'for emission (does not match emitextensions pattern)')
+
+                # Hack - can be removed when validity generator goes away
+                # (Jon) I am not sure what this does, or if it should
+                # respect the ei.emit flag above.
+                self.requiredextensions.append(extName)
+            else:
+                self.gen.logMsg('diag', 'NOT including extension',
+                                extName, '(does not match api attribute or explicitly requested extensions)')
+
+        # Add all spirv elements to list
+        # generators decide to emit them all or not
+        # Currently no filtering as no client of these elements needs filtering
+        spirvexts = []
+        for key in self.spirvextdict:
+            si = self.spirvextdict[key]
+            si.emit = (regEmitSpirv.match(key) is not None)
+            spirvexts.append(si)
+        spirvcaps = []
+        for key in self.spirvcapdict:
+            si = self.spirvcapdict[key]
+            si.emit = (regEmitSpirv.match(key) is not None)
+            spirvcaps.append(si)
+
+        formats = []
+        for key in self.formatsdict:
+            si = self.formatsdict[key]
+            si.emit = (regEmitFormats.match(key) is not None)
+            formats.append(si)
+
+        # Sort the features list, if a sort procedure is defined
+        if self.genOpts.sortProcedure:
+            self.genOpts.sortProcedure(features)
+
+        # Passes 1+2: loop over requested API versions and extensions tagging
+        #   types/commands/features as required (in an <require> block) or no
+        #   longer required (in an <remove> block). <remove>s are processed
+        #   after all <require>s, so removals win.
+        # If a profile other than 'None' is being generated, it must
+        #   match the profile attribute (if any) of the <require> and
+        #   <remove> tags.
+        self.gen.logMsg('diag', 'PASS 1: TAG FEATURES')
+        for f in features:
+            self.gen.logMsg('diag', 'PASS 1: Tagging required and features for', f.name)
+            self.fillFeatureDictionary(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
+            self.requireFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
+            self.assignAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile)
+
+        for f in features:
+            self.gen.logMsg('diag', 'PASS 2: Tagging removed features for', f.name)
+            self.removeFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
+            self.removeAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile)
+
+        # Now, strip references to APIs that are not required.
+        # At present such references may occur in:
+        #   Structs in <type category="struct"> 'structextends' attributes
+        #   Enums in <command> 'successcodes' and 'errorcodes' attributes
+        self.stripUnsupportedAPIs(self.typedict, 'structextends', self.typedict)
+        self.stripUnsupportedAPIs(self.cmddict, 'successcodes', self.enumdict)
+        self.stripUnsupportedAPIs(self.cmddict, 'errorcodes', self.enumdict)
+        self.stripUnsupportedAPIsFromList(self.validextensionstructs, self.typedict)
+
+        # Construct lists of valid extension structures
+        self.tagValidExtensionStructs()
+
+        # @@May need to strip <spirvcapability> / <spirvextension> <enable>
+        # tags of these forms:
+        #   <enable version="VK_API_VERSION_1_0"/>
+        #   <enable struct="VkPhysicalDeviceFeatures" feature="geometryShader" requires="VK_VERSION_1_0"/>
+        #   <enable extension="VK_KHR_shader_draw_parameters"/>
+        #   <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormPreserveFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+
+        # Pass 3: loop over specified API versions and extensions printing
+        #   declarations for required things which have not already been
+        #   generated.
+        self.gen.logMsg('diag', 'PASS 3: GENERATE INTERFACES FOR FEATURES')
+        self.gen.beginFile(self.genOpts)
+        for f in features:
+            self.gen.logMsg('diag', 'PASS 3: Generating interface for',
+                            f.name)
+            emit = self.emitFeatures = f.emit
+            if not emit:
+                self.gen.logMsg('diag', 'PASS 3: NOT declaring feature',
+                                f.elem.get('name'), 'because it is not tagged for emission')
+            # Generate the interface (or just tag its elements as having been
+            # emitted, if they have not been).
+            self.gen.beginFeature(f.elem, emit)
+            self.generateRequiredInterface(f.elem)
+            self.gen.endFeature()
+        # Generate spirv elements
+        for s in spirvexts:
+            self.generateSpirv(s, self.spirvextdict)
+        for s in spirvcaps:
+            self.generateSpirv(s, self.spirvcapdict)
+        for s in formats:
+            self.generateFormat(s, self.formatsdict)
+        for s in self.syncstagedict:
+            self.generateSyncStage(self.syncstagedict[s])
+        for s in self.syncaccessdict:
+            self.generateSyncAccess(self.syncaccessdict[s])
+        for s in self.syncpipelinedict:
+            self.generateSyncPipeline(self.syncpipelinedict[s])
+        self.gen.endFile()
+
+    def apiReset(self):
+        """Reset type/enum/command dictionaries before generating another API.
+
+        Use between apiGen() calls to reset internal state."""
+        for datatype in self.typedict:
+            self.typedict[datatype].resetState()
+        for enum in self.enumdict:
+            self.enumdict[enum].resetState()
+        for cmd in self.cmddict:
+            self.cmddict[cmd].resetState()
+        for cmd in self.apidict:
+            self.apidict[cmd].resetState()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/rubygenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/rubygenerator.py
new file mode 100644
index 0000000..283f09f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/rubygenerator.py
@@ -0,0 +1,120 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, enquote, write
+from scriptgenerator import ScriptOutputGenerator
+
+def nilquote(s):
+    if s:
+        return enquote(s)
+    else:
+        return 'nil'
+
+def makeHash(name):
+    return '@{} = {{'.format(name)
+
+class RubyOutputGenerator(ScriptOutputGenerator):
+    """RubyOutputGenerator - subclass of ScriptOutputGenerator.
+    Generates Ruby data structures describing API names and
+    relationships."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def beginDict(self, name):
+        """String starting definition of a named dictionary"""
+        return f'@{name} = {{'
+
+    def endDict(self):
+        """ String ending definition of a named dictionary"""
+        return '}'
+
+    def writeDict(self, dict, name, printValues = True):
+        """Write dictionary as a Ruby hash with the given name.
+           If printValues is False, just output keys with nil values."""
+
+        write(self.beginDict(name), file=self.outFile)
+        for key in sorted(dict):
+            if printValues:
+                value = nilquote(dict[key])
+            else:
+                value = 'nil'
+            write(f'{enquote(key)} => {value},', file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+    def writeList(self, l, name):
+        """Write list l as a Ruby hash with the given name"""
+
+        self.writeDict(l, name, printValues = False)
+
+    def makeAccessor(self, name):
+        """Create an accessor method for the hash 'name'"""
+        write('def {}'.format(name), file=self.outFile)
+        write('    @{}'.format(name), file=self.outFile)
+        write('end', file=self.outFile)
+
+    def endFile(self):
+        # Creates the inverse mapping of nonexistent APIs to their aliases.
+        super().createInverseMap()
+
+        # Print out all the dictionaries as Ruby strings.
+        # Use a simple container class for namespace control
+        write('class APInames\n', ' def initialize', file=self.outFile)
+
+        dicts = ( [ self.basetypes,     'basetypes' ],
+                  [ self.consts,        'consts' ],
+                  [ self.enums,         'enums' ],
+                  [ self.flags,         'flags' ],
+                  [ self.funcpointers,  'funcpointers' ],
+                  [ self.protos,        'protos' ],
+                  [ self.structs,       'structs' ],
+                  [ self.handles,       'handles' ],
+                  [ self.defines,       'defines' ],
+                  [ self.typeCategory,  'typeCategory' ],
+                  [ self.alias,         'aliases' ],
+                  [ self.nonexistent,   'nonexistent' ],
+                )
+        for (dict, name) in dicts:
+            self.writeDict(dict, name)
+
+        # Dictionary containing the relationships of a type
+        # (e.g. a dictionary with each related type as keys).
+        write(self.beginDict('mapDict'), file=self.outFile)
+        for baseType in sorted(self.mapDict):
+            # Not actually including the relationships yet
+            write('{} => {},'.format(enquote(baseType), 'nil'),
+                file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        # List of included feature names
+        self.writeList(sorted(self.features), 'features')
+
+        # Generate feature <-> interface mappings
+        for feature in self.features:
+            self.mapInterfaces(feature)
+
+        # Write out the reverse map from APIs to requiring features
+        write(self.beginDict('requiredBy'), file=self.outFile)
+        for api in sorted(self.apimap):
+            # Sort requirements by first feature in each one
+            deps = sorted(self.apimap[api], key = lambda dep: dep[0])
+            reqs = ', '.join('[{}, {}]'.format(nilquote(dep[0]), nilquote(dep[1])) for dep in deps)
+            write('{} => [{}],'.format(enquote(api), reqs), file=self.outFile)
+        write(self.endDict(), file=self.outFile)
+
+        # Remainder of the class definition
+        # End initialize method
+        write('end', file=self.outFile)
+
+        # Accessor methods
+        for (_, name) in dicts:
+            self.makeAccessor(name)
+        self.makeAccessor('features')
+
+        # Class end
+        write('end', file=self.outFile)
+
+        super().endFile()
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/runDocker b/codegen/vulkan/vulkan-docs-next/scripts/runDocker
new file mode 100755
index 0000000..235e20e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/runDocker
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Copyright 2022-2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+# runDocker - run the Khronos `asciidoctor-spec` Docker image with a local
+# clone of the Vulkan specification repository. This must be invoked from
+# the repository root directory.
+# The following command-line tools are required to run this script:
+#   awk dirname docker grep id realpath
+# These are all normal Linux developer tools except for 'docker' itself.
+
+# Determine path to repository root directory
+scriptpath=`dirname $0`
+repopath=`realpath $scriptpath/..`
+
+# Get SHA256 of the asciidoctor-spec image build used by CI.
+image=`grep -m 1 khronosgroup/docker-images@sha256: $repopath/.gitlab-ci.yml | \
+    awk '{print $2}'`
+
+uid=`id -u`
+gid=`id -g`
+echo "Executing Docker with spec build image and mounted spec repository root:"
+
+# --user causes Docker to run as the specified UID:GID instead of as root
+# -it runs interactively and uses a pseudotty
+# --rm removes the container on exit
+# -v mounts the repository clone as /vulkan in the container
+# $image is image to run
+# /bin/bash drops into a shell in the container
+set -x
+docker run --network=host --user ${uid}:${gid} -it --rm -v ${repopath}:/vulkan $image /bin/bash
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/schema_generator.py b/codegen/vulkan/vulkan-docs-next/scripts/schema_generator.py
new file mode 100644
index 0000000..555f7fe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/schema_generator.py
@@ -0,0 +1,294 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Description:
+# -----------
+# This script generates a full schema definition from the vk.xml.
+
+import os
+import re
+from generator import (GeneratorOptions, OutputGenerator, noneStr,
+                       regSortFeatures, write)
+
+
+headerString = "\
+{\n\
+\"$schema\": \"http://json-schema.org/draft-04/schema#\", \n\
+\"id\": \"https://schema.khronos.org/vulkan/vk.json#\",\n\
+\"title\": \"JSON schema for Vulkan SC\",\n\
+\"description\": \"Schema for representing entire vk.xml as a schema.\",\n\
+\"type\": \"object\",\n\
+\"additionalProperties\": true,\n\
+\"definitions\": {\
+"
+
+basetypeString = "\
+    \"$schema\": {\"type\": \"string\", \"format\": \"uri\"},\n\
+    \"uint8_t\": {\"type\": \"integer\", \"minimum\": 0, \"maximum\": 255},\n\
+    \"int32_t\": {\"type\": \"integer\", \"minimum\": -2147483648, \"maximum\": 2147483647},\n\
+    \"uint32_t\": {\"type\": \"integer\", \"minimum\": 0, \"maximum\": 4294967295},\n\
+    \"uint64_t\": {\"oneOf\": [{\"enum\": [\"\"]},{\"type\": \"integer\"}]},\n\
+    \"char\": {\"type\": \"string\"},\n\
+    \"float\": {\"type\": \"number\"},\n\
+    \"size_t\": {\"$ref\": \"#/definitions/uint32_t\"},\n\
+    \"enum\": {\"type\": \"string\"},\n\
+    \"void\": {\"enum\": [\"NULL\", \"\"]},\
+"
+
+class SchemaGeneratorOptions(GeneratorOptions):
+    """SchemaGeneratorOptions - subclass of GeneratorOptions.
+
+    Adds options used by SchemaOutputGenerator objects during C language header
+    generation."""
+
+    def __init__(self,
+                 prefixText="",
+                 genFuncPointers=True,
+                 protectFile=True,
+                 protectFeature=True,
+                 protectProto=None,
+                 protectProtoStr=None,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=False,
+                 aliasMacro='',
+                 **kwargs
+                 ):
+
+        GeneratorOptions.__init__(self, **kwargs)
+
+        self.prefixText = prefixText
+        """list of strings to prefix generated header with (usually a copyright statement + calling convention macros)."""
+
+        self.genFuncPointers = genFuncPointers
+        """True if function pointer typedefs should be generated"""
+
+        self.protectFile = protectFile
+        """True if multiple inclusion protection should be generated (based on the filename) around the entire header."""
+
+        self.protectFeature = protectFeature
+        """True if #ifndef..#endif protection should be generated around a feature interface in the header file."""
+
+        self.protectProto = protectProto
+        """If conditional protection should be generated around prototype declarations, set to either '#ifdef' to require opt-in (#ifdef protectProtoStr) or '#ifndef' to require opt-out (#ifndef protectProtoStr). Otherwise set to None."""
+
+        self.protectProtoStr = protectProtoStr
+        """#ifdef/#ifndef symbol to use around prototype declarations, if protectProto is set"""
+
+        self.apicall = apicall
+        """string to use for the function declaration prefix, such as APICALL on Windows."""
+
+        self.apientry = apientry
+        """string to use for the calling convention macro, in typedefs, such as APIENTRY."""
+
+        self.apientryp = apientryp
+        """string to use for the calling convention macro in function pointer typedefs, such as APIENTRYP."""
+
+        self.indentFuncProto = indentFuncProto
+        """True if prototype declarations should put each parameter on a separate line"""
+
+        self.indentFuncPointer = indentFuncPointer
+        """True if typedefed function pointers should put each parameter on a separate line"""
+
+        self.alignFuncParam = alignFuncParam
+        """if nonzero and parameters are being put on a separate line, align parameter names at the specified column"""
+
+        self.genEnumBeginEndRange = genEnumBeginEndRange
+        """True if BEGIN_RANGE / END_RANGE macros should be generated for enumerated types"""
+
+        self.genAliasMacro = genAliasMacro
+        """True if the OpenXR alias macro should be generated for aliased types (unclear what other circumstances this is useful)"""
+
+        self.aliasMacro = aliasMacro
+        """alias macro to inject when genAliasMacro is True"""
+
+        self.codeGenerator = True
+        """True if this generator makes compilable code"""
+
+
+class SchemaOutputGenerator(OutputGenerator):
+    # This is an ordered list of sections in the header file.
+    TYPE_SECTIONS = ['basetype', 'handle', 'enum', 'group', 'bitmask', 'struct']
+    ALL_SECTIONS = TYPE_SECTIONS
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Internal state - accumulators for different inner block text
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+        self.may_alias = None
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        # Write schema header
+        write(headerString, file=self.outFile)
+        write(basetypeString, file=self.outFile)
+
+    def endFile(self):
+        write("    \"VkLastStructure\": {", file=self.outFile)
+        write("    }", file=self.outFile)
+        write("  }", file=self.outFile)
+        write("}", file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        if self.emit:
+            if self.feature_not_empty:
+                if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
+
+                    for section in self.TYPE_SECTIONS:
+                        contents = self.sections[section]
+                        if contents:
+                            write('\n'.join(contents), file=self.outFile)
+
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text):
+        self.sections[section].append(text)
+        self.feature_not_empty = True
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        typeElem = typeinfo.elem
+        body = ""
+
+        category = typeElem.get('category')
+        if category == 'funcpointer':
+            section = 'struct'
+        else:
+            section = category
+
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
+
+        elif category == 'handle':
+            for elem in typeElem:
+                if elem.tag == 'name':
+                    body += "    \"" + elem.text + "\": {\"$ref\": \"#/definitions/uint64_t" + "\"},"
+
+        elif category in ('bitmask','basetype'):
+            storeType = ""
+            section = 'bitmask'
+
+            for elem in typeElem:
+                if elem.tag == 'type':
+                    storeType = elem.text
+
+                if elem.tag == 'name':
+                    if elem.text == "VkBool32":
+                        body += "    \"" + elem.text + "\": {\"oneOf\": [{\"$ref\": \"#/definitions/" + storeType + "\"},{\"enum\": [\"VK_TRUE\", \"VK_FALSE\"]}]},"
+                    elif elem.text == "VkFlags":
+                        body += "    \"" + elem.text + "\": {\"oneOf\": [{\"$ref\": \"#/definitions/" + storeType + "\"},{\"$ref\": \"#/definitions/enum\"}]},"
+                    else:
+                        body += "    \"" + elem.text + "\": {\"$ref\": \"#/definitions/" + storeType + "\"},"
+
+        if body:
+            self.appendSection(section, body)
+
+    def genMemberSchema(self, structure, param):
+        paramdecl = ""
+        storeType = ""
+        isArr = param.get('len') not in (None, "null-terminated")
+        isPtr = False
+
+        for elem in param:
+            text = noneStr(elem.text)
+            tail = noneStr(elem.tail)
+
+            #TODO: In the actual json data, we inline the pNext structs by checking what they point to, at runtime.
+            #      This is however not possible to be represented in the schema. So, the plan is to not represent the
+            #      pNext structs altogether or to indicate that these would be represented at runtime.
+            #if elem.text != 'pNext' and elem.text != 'sType' and elem.text != 'VkStructureType' and elem.text != 'void' and elem.text != 'const':
+            if 1:
+                if elem.tag == 'type':
+                    storeType = text
+                    if '*' in tail:
+                        isPtr = True
+
+                if elem.tag == 'name':
+                    paramdecl += "            \"" + text + "\": "
+                    if isPtr and text != "pNext":
+                        paramdecl += "{\"oneOf\": [{\"$ref\": \"#/definitions/void\"},"
+
+                    if isArr or tail.startswith('['):
+                        # TODO: How to get maxCount here?
+                        paramdecl += " {\"type\": \"array\", \"minItems\": 0, \"maxItems\": 255, \"items\": {\"$ref\": \"#/definitions/"
+                        if (structure == "VkPipelineLayoutCreateInfo" and text == "pSetLayouts") or \
+                           (structure == "VkDescriptorSetLayoutBinding" and text == "pImmutableSamplers") or \
+                           (structure == "VkSamplerYcbcrConversionInfo" and text == "conversion"):
+                            paramdecl += "char\"}}"
+                        elif (storeType == "void"):
+                            # void* data can be NULL, an array of uint8_t data, or a Base64-encoded string
+                            paramdecl += "uint8_t\"}}, {\"type\": \"string\"}"
+                        else:
+                            paramdecl += storeType + "\"}}"
+                    else:
+                        paramdecl += "{\"$ref\": \"#/definitions/"
+                        paramdecl += storeType + "\"}"
+
+                    if isPtr and text != "pNext":
+                        paramdecl += "]}"
+                    isPtr = False
+            else:
+                return ""
+
+        return paramdecl
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+        body = ""
+        typeElem = typeinfo.elem
+
+        if alias:
+            return
+        else:
+            body = ''
+            body += "    \"" + typeName + "\": {\n"
+            body += "        \"type\": \"object\",\n"
+            body += "        \"additionalProperties\": false,\n"
+            body += "        \"properties\": {\n"
+
+            count = 0
+            numMembers = len(typeElem.findall('.//member'))
+
+            for member in typeElem.findall('.//member'):
+                count = count + 1
+
+                genText = self.genMemberSchema(typeName, member)
+                body += genText
+
+                if count < numMembers and genText != "":
+                    body += ','
+                    body += '\n'
+            body += "\n        }\n"
+        body += "    },\n"
+
+        self.appendSection('struct', body)
+
+    def genGroup(self, groupinfo, groupName, alias=None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+        body = ""
+
+        section = 'enum'
+        body += "    \"" + groupName + "\": {\"$ref\": \"#/definitions/enum"+ "\"},"
+
+        self.appendSection(section, body)
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/scriptgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/scriptgenerator.py
new file mode 100644
index 0000000..18ce9de
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/scriptgenerator.py
@@ -0,0 +1,386 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, enquote, noneStr
+
+def mostOfficial(api, newapi):
+    """Return the 'most official' of two related names, api and newapi.
+       KHR is more official than EXT is more official than everything else.
+       If there is ambiguity, return api."""
+
+    if api[-3:] == 'KHR':
+        return api
+    if newapi[-3:] == 'KHR':
+        return newapi;
+    if api[-3:] == 'EXT':
+        return api
+    if newapi[-3:] == 'EXT':
+        return newapi;
+    return api
+
+class ScriptOutputGenerator(OutputGenerator):
+    """ScriptOutputGenerator - subclass of OutputGenerator.
+    Base class to Generate script (Python/Ruby/JS/etc.) data structures
+    describing API names and relationships.
+    Similar to DocOutputGenerator, but writes a single file."""
+
+    def apiName(self, name):
+        """Return True if name is in the reserved API namespace.
+
+        Delegates to the conventions object. """
+        return self.genOpts.conventions.is_api_name(name)
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Track features being generated
+        self.features = []
+
+        # Reverse map from interface names to features requiring them
+        self.apimap = {}
+
+        # Reverse map from unsupported APIs in this build to aliases which
+        # are supported
+        self.nonexistent = {}
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+        #
+        # Dictionaries are keyed by the name of the entity (e.g.
+        # self.structs is keyed by structure names). Values are
+        # the names of related entities (e.g. structs contain
+        # a list of type names of members, enums contain a list
+        # of enumerants belong to the enumerated type, etc.), or
+        # just None if there are no directly related entities.
+        #
+        # Collect the mappings, then emit the Python script in endFile
+        self.basetypes = {}
+        self.consts = {}
+        self.enums = {}
+        self.flags = {}
+        self.funcpointers = {}
+        self.protos = {}
+        self.structs = {}
+        self.handles = {}
+        self.defines = {}
+        self.alias = {}
+        # Dictionary containing the type of a type name
+        # (e.g. the string name of the dictionary with its contents).
+        self.typeCategory = {}
+        self.mapDict = {}
+
+    def addInterfaceMapping(self, api, feature, required):
+        """Add a reverse mapping in self.apimap from an API to a feature
+           requiring that API.
+
+        - api - name of the API
+        - feature - name of the feature requiring it
+        - required - None, or an additional feature dependency within
+          'feature'. The additional dependency is a boolean expression of
+          one or more extension and/or core version names, which is passed
+          through to the output script intact."""
+
+        # Each entry in self.apimap contains one or more
+        # ( feature, required ) tuples.
+        deps = ( feature, required )
+
+        if api in self.apimap:
+            self.apimap[api].append(deps)
+        else:
+            self.apimap[api] = [ deps ]
+
+    def mapInterfaceKeys(self, feature, key):
+        """Construct reverse mapping of APIs to features requiring them in
+           self.apimap.
+
+        - feature - name of the feature being generated
+        - key - API category - 'define', 'basetype', etc."""
+
+        dict = self.featureDictionary[feature][key]
+
+        if dict:
+            # Not clear why handling of command vs. type APIs is different -
+            # see interfacedocgenerator.py, which this was based on.
+            if key == 'command':
+                for required in dict:
+                    for api in dict[required]:
+                        self.addInterfaceMapping(api, feature, required)
+            else:
+                for required in dict:
+                    for parent in dict[required]:
+                        for api in dict[required][parent]:
+                            self.addInterfaceMapping(api, feature, required)
+
+    def mapInterfaces(self, feature):
+        """Construct reverse mapping of APIs to features requiring them in
+           self.apimap.
+
+        - feature - name of the feature being generated"""
+
+        # Map each category of interface
+        self.mapInterfaceKeys(feature, 'basetype')
+        self.mapInterfaceKeys(feature, 'bitmask')
+        self.mapInterfaceKeys(feature, 'command')
+        self.mapInterfaceKeys(feature, 'define')
+        self.mapInterfaceKeys(feature, 'enum')
+        self.mapInterfaceKeys(feature, 'enumconstant')
+        self.mapInterfaceKeys(feature, 'funcpointer')
+        self.mapInterfaceKeys(feature, 'handle')
+        self.mapInterfaceKeys(feature, 'include')
+        self.mapInterfaceKeys(feature, 'struct')
+        self.mapInterfaceKeys(feature, 'union')
+
+    def endFile(self):
+        super().endFile()
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        # Add this feature to the list being tracked
+        self.features.append( self.featureName )
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def addName(self, dict, name, value):
+        """Add a string entry to the dictionary, quoting it so it gets
+           printed out correctly in self.endFile()."""
+        dict[name] = value
+
+    def addMapping(self, baseType, refType):
+        """Add a mapping between types to mapDict.
+
+        Only include API types, so we do not end up with a lot of useless
+        uint32_t and void types."""
+        if not self.apiName(baseType) or not self.apiName(refType):
+            self.logMsg('diag', 'ScriptOutputGenerator::addMapping: IGNORE map from', baseType, '<->', refType)
+            return
+
+        self.logMsg('diag', 'ScriptOutputGenerator::addMapping: map from',
+                    baseType, '<->', refType)
+
+        if baseType not in self.mapDict:
+            baseDict = {}
+            self.mapDict[baseType] = baseDict
+        else:
+            baseDict = self.mapDict[baseType]
+        if refType not in self.mapDict:
+            refDict = {}
+            self.mapDict[refType] = refDict
+        else:
+            refDict = self.mapDict[refType]
+
+        baseDict[refType] = None
+        refDict[baseType] = None
+
+    def breakCheck(self, procname, name):
+        """Debugging aid - call from procname to break on API 'name' if it
+           matches logic in this call."""
+
+        pat = 'VkExternalFenceFeatureFlagBits'
+        if name[0:len(pat)] == pat:
+            print('{}(name = {}) matches {}'.format(procname, name, pat))
+            import pdb
+            pdb.set_trace()
+
+    def genType(self, typeinfo, name, alias):
+        """Generate type.
+
+        - For 'struct' or 'union' types, defer to genStruct() to
+          add to the dictionary.
+        - For 'bitmask' types, add the type name to the 'flags' dictionary,
+          with the value being the corresponding 'enums' name defining
+          the acceptable flag bits.
+        - For 'enum' types, add the type name to the 'enums' dictionary,
+          with the value being '@STOPHERE@' (because this case seems
+          never to happen).
+        - For 'funcpointer' types, add the type name to the 'funcpointers'
+          dictionary.
+        - For 'handle' and 'define' types, add the handle or #define name
+          to the 'struct' dictionary, because that is how the spec sources
+          tag these types even though they are not structs."""
+        OutputGenerator.genType(self, typeinfo, name, alias)
+
+        typeElem = typeinfo.elem
+        # If the type is a struct type, traverse the embedded <member> tags
+        # generating a structure. Otherwise, emit the tag text.
+        category = typeElem.get('category')
+
+        # Add a typeCategory{} entry for the category of this type.
+        self.addName(self.typeCategory, name, category)
+
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
+        else:
+            if alias:
+                # Add name -> alias mapping
+                self.addName(self.alias, name, alias)
+
+                # Always emit an alias (?!)
+                count = 1
+
+                # May want to only emit full type definition when not an alias?
+            else:
+                # Extract the type name
+                # (from self.genOpts). Copy other text through unchanged.
+                # If the resulting text is an empty string, do not emit it.
+                count = len(noneStr(typeElem.text))
+                for elem in typeElem:
+                    count += len(noneStr(elem.text)) + len(noneStr(elem.tail))
+
+            if count > 0:
+                if category == 'bitmask':
+                    requiredEnum = typeElem.get('requires')
+                    self.addName(self.flags, name, requiredEnum)
+
+                    # This happens when the Flags type is defined, but no
+                    # FlagBits are defined yet.
+                    if requiredEnum is not None:
+                        self.addMapping(name, requiredEnum)
+                elif category == 'enum':
+                    # This case does not seem to come up. It nominally would
+                    # result from
+                    #   <type name="Something" category="enum"/>,
+                    # but the output generator does not emit them directly.
+                    self.logMsg('warn', 'ScriptOutputGenerator::genType: invalid \'enum\' category for name:', name)
+                elif category == 'funcpointer':
+                    self.funcpointers[name] = None
+                elif category == 'handle':
+                    self.handles[name] = None
+                elif category == 'define':
+                    self.defines[name] = None
+                elif category == 'basetype':
+                    self.basetypes[name] = None
+                    self.addName(self.typeCategory, name, 'basetype')
+            else:
+                self.logMsg('diag', 'ScriptOutputGenerator::genType: unprocessed type:', name)
+
+    def genStruct(self, typeinfo, typeName, alias):
+        """Generate struct (e.g. C "struct" type).
+
+        Add the struct name to the 'structs' dictionary, with the
+        value being an ordered list of the struct member names."""
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+        if alias:
+            # Add name -> alias mapping
+            self.addName(self.alias, typeName, alias)
+        else:
+            # May want to only emit definition on this branch
+            True
+
+        members = [member.text for member in typeinfo.elem.findall('.//member/name')]
+        self.structs[typeName] = members
+        memberTypes = [member.text for member in typeinfo.elem.findall('.//member/type')]
+        for member_type in memberTypes:
+            self.addMapping(typeName, member_type)
+
+    def genGroup(self, groupinfo, groupName, alias):
+        """Generate group (e.g. C "enum" type).
+
+        These are concatenated together with other types.
+
+        - Add the enum type name to the 'enums' dictionary, with
+          the value being an ordered list of the enumerant names.
+        - Add each enumerant name to the 'consts' dictionary, with
+          the value being the enum type the enumerant is part of."""
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        groupElem = groupinfo.elem
+
+        # Add a typeCategory{} entry for the category of this type.
+        self.addName(self.typeCategory, groupName, 'group')
+
+        if alias:
+            # Add name -> alias mapping
+            self.addName(self.alias, groupName, alias)
+        else:
+            # May want to only emit definition on this branch
+            True
+
+        # Add each nested 'enum' tag
+        enumerants = [elem.get('name') for elem in groupElem.findall('enum')]
+        for name in enumerants:
+            self.addName(self.consts, name, groupName)
+
+        # Sort enums for output stability, since their order is irrelevant
+        self.enums[groupName] = sorted(enumerants)
+
+    def genEnum(self, enuminfo, name, alias):
+        """Generate enumerant (compile time constant).
+
+        - Add the constant name to the 'consts' dictionary, with the
+          value being None to indicate that the constant is not
+          an enumeration value."""
+        OutputGenerator.genEnum(self, enuminfo, name, alias)
+
+        if name not in self.consts:
+            # Add a typeCategory{} entry for the category of this type.
+            self.addName(self.typeCategory, name, 'consts')
+            self.consts[name] = None
+
+        if alias:
+            # Add name -> alias mapping
+            self.addName(self.alias, name, alias)
+        else:
+            # May want to only emit definition on this branch
+            True
+
+        # Otherwise, do not add it to the consts dictionary because it is
+        # already present. This happens due to the generator 'reparentEnums'
+        # parameter being False, so each extension enum appears in both the
+        # <enums> type and in the <extension> or <feature> it originally
+        # came from.
+
+    def genCmd(self, cmdinfo, name, alias):
+        """Generate command.
+
+        - Add the command name to the 'protos' dictionary, with the
+          value being an ordered list of the parameter names."""
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        # Add a typeCategory{} entry for the category of this type.
+        self.addName(self.typeCategory, name, 'protos')
+
+        if alias:
+            # Add name -> alias mapping
+            self.addName(self.alias, name, alias)
+        else:
+            # May want to only emit definition on this branch
+            True
+
+        params = [param.text for param in cmdinfo.elem.findall('param/name')]
+        self.protos[name] = params
+        paramTypes = [param.text for param in cmdinfo.elem.findall('param/type')]
+        for param_type in paramTypes:
+            self.addMapping(name, param_type)
+
+    def createInverseMap(self):
+        """This creates the inverse mapping of nonexistent APIs in this
+           build to their aliases which are supported. Must be called by
+           language-specific subclasses before emitting that mapping."""
+
+        # Map from APIs not supported in this build to aliases that are.
+        # When there are multiple valid choices for remapping, choose the
+        # most-official suffixed one (KHR > EXT > vendor).
+        for key in self.alias:
+            # If the API key is aliased to something which does not exist,
+            # then add the thing that does not exist to the nonexistent map.
+            # This is used in spec macros to make promoted extension links
+            # in specs built without the promoted interface refer to the
+            # older interface instead.
+
+            invkey = self.alias[key]
+
+            if invkey not in self.typeCategory:
+                if invkey in self.nonexistent:
+                    # Potentially remap existing mapping to a more official
+                    # alias.
+                    self.nonexistent[invkey] = mostOfficial(self.nonexistent[invkey], key)
+                else:
+                    # Create remapping to an alias
+                    self.nonexistent[invkey] = key
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/__init__.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/__init__.py
new file mode 100644
index 0000000..34c01f3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/__init__.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/algo.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/algo.py
new file mode 100644
index 0000000..e9dff4a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/algo.py
@@ -0,0 +1,145 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+"""RecursiveMemoize serves as a base class for a function modeled
+as a dictionary computed on-the-fly."""
+
+
+class RecursiveMemoize:
+    """Base class for functions that are recursive.
+
+    Derive and implement `def compute(self, key):` to perform the computation:
+    you may use __getitem__ (aka self[otherkey]) to access the results for
+    another key. Each value will be computed at most once. Your
+    function should never return None, since it is used as a sentinel here.
+
+    """
+
+    def __init__(self, func, key_iterable=None, permit_cycles=False):
+        """Initialize data structures, and optionally compute/cache the answer
+        for all elements of an iterable.
+
+        If permit_cycles is False, then __getitem__ on something that's
+        currently being computed raises an exception.
+        If permit_cycles is True, then __getitem__ on something that's
+        currently being computed returns None.
+        """
+        self._compute = func
+        self.permit_cycles = permit_cycles
+        self.d = {}
+        if key_iterable:
+            # If we were given an iterable, let's populate those.
+            for key in key_iterable:
+                _ = self[key]
+
+    def __getitem__(self, key):
+        """Access the result of computing the function on the input.
+
+        Performed lazily and cached.
+        Implement `def compute(self, key):` with the actual function,
+        which will be called on demand."""
+        if key in self.d:
+            ret = self.d[key]
+            # Detect "we're computing this" sentinel and
+            # fail if cycles not permitted
+            if ret is None and not self.permit_cycles:
+                raise RuntimeError("Cycle detected when computing function: " +
+                                   "f({}) depends on itself".format(key))
+            # return the memoized value
+            # (which might be None if we're in a cycle that's permitted)
+            return ret
+
+        # Set sentinel for "we're computing this"
+        self.d[key] = None
+        # Delegate to function to actually compute
+        ret = self._compute(key)
+        # Memoize
+        self.d[key] = ret
+
+        return ret
+
+    def get_dict(self):
+        """Return the dictionary where memoized results are stored.
+
+        DO NOT MODIFY!"""
+        return self.d
+
+
+def longest_common_prefix(strings):
+    """
+    Find the longest common prefix of a list of 2 or more strings.
+
+    Args:
+        strings (collection): at least 2 strings.
+
+    Returns:
+        string: The longest string that all submitted strings start with.
+
+    >>> longest_common_prefix(["abcd", "abce"])
+    'abc'
+
+    """
+    assert(len(strings) > 1)
+    a = min(strings)
+    b = max(strings)
+    prefix = []
+    for a_char, b_char in zip(a, b):
+        if a_char == b_char:
+            prefix.append(a_char)
+        else:
+            break
+    return "".join(prefix)
+
+
+def longest_common_token_prefix(strings, delimiter='_'):
+    """
+    Find the longest common token-wise prefix of a list of 2 or more strings.
+
+    Args:
+        strings (collection): at least 2 strings.
+        delimiter (character): the character to split on.
+
+    Returns:
+        string: The longest string that all submitted strings start with.
+
+    >>> longest_common_token_prefix(["xr_abc_123", "xr_abc_567"])
+    'xr_abc_'
+
+    "1" is in the per-character longest common prefix, but 123 != 135,
+    so it's not in the per-token prefix.
+
+    >>> longest_common_token_prefix(["xr_abc_123", "xr_abc_135"])
+    'xr_abc_'
+
+    Here, the prefix is actually the entirety of one string, so no trailing delimiter.
+
+    >>> longest_common_token_prefix(["xr_abc_123", "xr_abc"])
+    'xr_abc'
+
+
+    No common prefix here, because it's per-token:
+
+    >>> longest_common_token_prefix(["abc_123", "ab_123"])
+    ''
+
+    """
+    assert(len(strings) > 1)
+    a = min(strings).split(delimiter)
+    b = max(strings).split(delimiter)
+    prefix_tokens = []
+    for a_token, b_token in zip(a, b):
+        if a_token == b_token:
+            prefix_tokens.append(a_token)
+        else:
+            break
+    if prefix_tokens:
+        prefix = delimiter.join(prefix_tokens)
+        if len(prefix_tokens) < min(len(a), len(b)):
+            # This is truly a prefix, not just one of the strings.
+            prefix += delimiter
+        return prefix
+    return ''
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/attributes.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/attributes.py
new file mode 100644
index 0000000..9267247
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/attributes.py
@@ -0,0 +1,134 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+"""Utilities for working with attributes of the XML registry."""
+
+import re
+
+_PARAM_REF_NAME_RE = re.compile(
+    r"(?P<name>[\w]+)(?P<brackets>\[\])?(?P<delim>\.|::|->)?")
+
+
+def _split_param_ref(val):
+    return [name for name, _, _ in _PARAM_REF_NAME_RE.findall(val)]
+
+
+def _human_readable_deref(val, make_param_name=None):
+    """Turn the "name[].member[]" notation into plain English."""
+    parts = []
+    matches = _PARAM_REF_NAME_RE.findall(val)
+    for name, brackets, delim in reversed(matches):
+        if make_param_name:
+            name = make_param_name(name)
+        if delim:
+            parts.append('member of')
+        if brackets:
+            parts.append('each element of')
+        parts.append('the')
+        parts.append(name)
+    parts.append('parameter')
+    return ' '.join(parts)
+
+
+class LengthEntry:
+    """An entry in a (comma-separated) len attribute"""
+    NULL_TERMINATED_STRING = 'null-terminated'
+    MATH_STRING = 'latexmath:'
+
+    def __init__(self, val):
+        self.full_reference = val
+        self.other_param_name = None
+        self.null_terminated = False
+        self.number = None
+        self.math = None
+        self.param_ref_parts = None
+        if val == LengthEntry.NULL_TERMINATED_STRING:
+            self.null_terminated = True
+            return
+
+        if val.startswith(LengthEntry.MATH_STRING):
+            self.math = val.replace(LengthEntry.MATH_STRING, '')[1:-1]
+            return
+
+        if val.isdigit():
+            self.number = int(val)
+            return
+
+        # Must be another param name.
+        self.param_ref_parts = _split_param_ref(val)
+        self.other_param_name = self.param_ref_parts[0]
+
+    def __str__(self):
+        return self.full_reference
+
+    def get_human_readable(self, make_param_name=None):
+        assert(self.other_param_name)
+        return _human_readable_deref(self.full_reference, make_param_name=make_param_name)
+
+    def __repr__(self):
+        "Formats an object for repr(), debugger display, etc."
+        return 'spec_tools.attributes.LengthEntry("{}")'.format(self.full_reference)
+
+    @staticmethod
+    def parse_len_from_param(param):
+        """Get a list of LengthEntry, or None."""
+        len_str = param.get('len')
+        if len_str is None:
+            return None
+        return [LengthEntry(elt) for elt in len_str.split(',')]
+
+
+class ExternSyncEntry:
+    """An entry in a (comma-separated) externsync attribute"""
+
+    TRUE_STRING = 'true'
+    TRUE_WITH_CHILDREN_STRING = 'true_with_children'
+
+    def __init__(self, val):
+        self.full_reference = val
+        self.entirely_extern_sync = (val in (ExternSyncEntry.TRUE_STRING, ExternSyncEntry.TRUE_WITH_CHILDREN_STRING))
+        self.children_extern_sync = (val == ExternSyncEntry.TRUE_WITH_CHILDREN_STRING)
+        if self.entirely_extern_sync:
+            return
+
+        self.param_ref_parts = _split_param_ref(val)
+        self.member = self.param_ref_parts[0]
+
+    def get_human_readable(self, make_param_name=None):
+        assert(not self.entirely_extern_sync)
+        return _human_readable_deref(self.full_reference, make_param_name=make_param_name)
+
+    @staticmethod
+    def parse_externsync_from_param(param):
+        """Get a list of ExternSyncEntry."""
+        sync_str = param.get('externsync')
+        if sync_str is None:
+            return None
+        return [ExternSyncEntry(elt) for elt in sync_str.split(',')]
+
+    def __repr__(self):
+        "Formats an object for repr(), debugger display, etc."
+        return 'spec_tools.attributes.ExternSyncEntry("{}")'.format(self.full_reference)
+
+
+_TRUE_STRING = 'true'
+_FALSE_STRING = 'false'
+
+
+def _parse_optional_elt(val):
+    if val not in (_TRUE_STRING, _FALSE_STRING):
+        raise ValueError("Each element of the optional attribute must be 'true', or 'false'")
+    return val == _TRUE_STRING
+
+
+def parse_optional_from_param(param):
+    """Get a list of booleans from a param: always returns at least one element."""
+    optional_str = param.get('optional', _FALSE_STRING)
+    return [_parse_optional_elt(elt) for elt in optional_str.split(',')]
+
+
+def has_any_optional_in_param(param):
+    """Returns True if we have any true in an optional attribute."""
+    return any(parse_optional_from_param(param))
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/base_printer.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/base_printer.py
new file mode 100644
index 0000000..f48905a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/base_printer.py
@@ -0,0 +1,213 @@
+"""Provides the BasePrinter base class for MacroChecker/Message output techniques."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+from abc import ABC, abstractmethod
+from pathlib import Path
+
+from .macro_checker import MacroChecker
+from .macro_checker_file import MacroCheckerFile
+from .shared import EntityData, Message, MessageContext, MessageType
+
+
+def getColumn(message_context):
+    """Return the (zero-based) column number of the message context.
+
+    If a group is specified: returns the column of the start of the group.
+    If no group, but a match is specified: returns the column of the start of
+    the match.
+    If no match: returns column 0 (whole line).
+    """
+    if not message_context.match:
+        # whole line
+        return 0
+    if message_context.group is not None:
+        return message_context.match.start(message_context.group)
+    return message_context.match.start()
+
+
+class BasePrinter(ABC):
+    """Base class for a way of outputting results of a checker execution."""
+
+    def __init__(self):
+        """Constructor."""
+        self._cwd = None
+
+    def close(self):
+        """Write the tail end of the output and close it, if applicable.
+
+        Override if you want to print a summary or are writing to a file.
+        """
+        pass
+
+    ###
+    # Output methods: these should all print/output directly.
+    def output(self, obj):
+        """Output any object.
+
+        Delegates to other output* methods, if type known,
+        otherwise uses self.outputFallback().
+        """
+        if isinstance(obj, Message):
+            self.outputMessage(obj)
+        elif isinstance(obj, MacroCheckerFile):
+            self.outputCheckerFile(obj)
+        elif isinstance(obj, MacroChecker):
+            self.outputChecker(obj)
+        else:
+            self.outputFallback(self.formatBrief(obj))
+
+    @abstractmethod
+    def outputResults(self, checker, broken_links=True,
+                      missing_includes=False):
+        """Output the full results of a checker run.
+
+        Must be implemented.
+
+        Typically will call self.output() on the MacroChecker,
+        as well as calling self.outputBrokenAndMissing()
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def outputBrokenLinks(self, checker, broken):
+        """Output the collection of broken links.
+
+        `broken` is a dictionary of entity names: usage contexts.
+
+        Must be implemented.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def outputMissingIncludes(self, checker, missing):
+        """Output a table of missing includes.
+
+        `missing` is a iterable entity names.
+
+        Must be implemented.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        raise NotImplementedError
+
+    def outputChecker(self, checker):
+        """Output the contents of a MacroChecker object.
+
+        Default implementation calls self.output() on every MacroCheckerFile.
+        """
+        for f in checker.files:
+            self.output(f)
+
+    def outputCheckerFile(self, fileChecker):
+        """Output the contents of a MacroCheckerFile object.
+
+        Default implementation calls self.output() on every Message.
+        """
+        for m in fileChecker.messages:
+            self.output(m)
+
+    def outputBrokenAndMissing(self, checker, broken_links=True,
+                               missing_includes=False):
+        """Outputs broken links and missing includes, if desired.
+
+        Delegates to self.outputBrokenLinks() (if broken_links==True)
+        and self.outputMissingIncludes() (if missing_includes==True).
+        """
+        if broken_links:
+            broken = checker.getBrokenLinks()
+            if broken:
+                self.outputBrokenLinks(checker, broken)
+        if missing_includes:
+            missing = checker.getMissingUnreferencedApiIncludes()
+            if missing:
+                self.outputMissingIncludes(checker, missing)
+
+    @abstractmethod
+    def outputMessage(self, msg):
+        """Output a Message.
+
+        Must be implemented.
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def outputFallback(self, msg):
+        """Output some text in a general way.
+
+        Must be implemented.
+        """
+        raise NotImplementedError
+
+    ###
+    # Format methods: these should all return a string.
+    def formatContext(self, context, _message_type=None):
+        """Format a message context in a verbose way, if applicable.
+
+        May override, default implementation delegates to
+        self.formatContextBrief().
+        """
+        return self.formatContextBrief(context)
+
+    def formatContextBrief(self, context, _with_color=True):
+        """Format a message context in a brief way.
+
+        May override, default is relativeFilename:line:column
+        """
+        return '{}:{}:{}'.format(self.getRelativeFilename(context.filename),
+                                 context.lineNum, getColumn(context))
+
+    def formatMessageTypeBrief(self, message_type, _with_color=True):
+        """Format a message type in a brief way.
+
+        May override, default is message_type:
+        """
+        return '{}:'.format(message_type)
+
+    def formatEntityBrief(self, entity_data, _with_color=True):
+        """Format an entity in a brief way.
+
+        May override, default is macro:entity.
+        """
+        return '{}:{}'.format(entity_data.macro, entity_data.entity)
+
+    def formatBrief(self, obj, with_color=True):
+        """Format any object in a brief way.
+
+        Delegates to other format*Brief methods, if known,
+        otherwise uses str().
+        """
+        if isinstance(obj, MessageContext):
+            return self.formatContextBrief(obj, with_color)
+        if isinstance(obj, MessageType):
+            return self.formatMessageTypeBrief(obj, with_color)
+        if isinstance(obj, EntityData):
+            return self.formatEntityBrief(obj, with_color)
+        return str(obj)
+
+    @property
+    def cwd(self):
+        """Get the current working directory, fully resolved.
+
+        Lazy initialized.
+        """
+        if not self._cwd:
+            self._cwd = Path('.').resolve()
+        return self._cwd
+
+    ###
+    # Helper function
+    def getRelativeFilename(self, fn):
+        """Return the given filename relative to the current directory,
+        if possible.
+        """
+        try:
+            return str(Path(fn).relative_to(self.cwd))
+        except ValueError:
+            return str(Path(fn))
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/consistency_tools.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/consistency_tools.py
new file mode 100644
index 0000000..eab6d47
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/consistency_tools.py
@@ -0,0 +1,824 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+"""Provides utilities to write a script to verify XML registry consistency."""
+
+import re
+from typing import Set
+
+import networkx as nx
+from networkx.algorithms import shortest_path
+
+from .algo import RecursiveMemoize
+from .attributes import ExternSyncEntry, LengthEntry
+from .data_structures import DictOfStringSets
+from .util import findNamedElem, getElemName, getElemType
+from .conventions import ConventionsBase
+
+
+def _get_extension_tags(reg):
+    """Get a set of all author tags registered for use."""
+    return set(elt.get("name") for elt in reg.tree.findall("./tags/tag[@name]"))
+
+
+class XMLChecker:
+    def __init__(self, entity_db,  conventions: ConventionsBase, manual_types_to_codes=None,
+                 forward_only_types_to_codes=None,
+                 reverse_only_types_to_codes=None,
+                 suppressions=None,
+                 display_warnings=True):
+        """Set up data structures.
+
+        May extend - call:
+        `super().__init__(db, conventions, manual_types_to_codes)`
+        as the last statement in your function.
+
+        manual_types_to_codes is a dictionary of hard-coded
+        "manual" return codes:
+        the codes of the value are available for a command if-and-only-if
+        the key type is passed as an input.
+
+        forward_only_types_to_codes is additional entries to the above
+        that should only be used in the "forward" direction
+        (arg type implies return code)
+
+        reverse_only_types_to_codes is additional entries to
+        manual_types_to_codes that should only be used in the
+        "reverse" direction
+        (return code implies arg type)
+        """
+        self.fail = False
+        self.entity = None
+        self.errors = DictOfStringSets()
+        self.warnings = DictOfStringSets()
+        self.db = entity_db
+        self.reg = entity_db.registry
+        self.handle_data = HandleData(self.reg)
+        self.conventions = conventions
+        self.display_warnings = display_warnings
+
+        self.CONST_RE = re.compile(r"\bconst\b")
+        self.ARRAY_RE = re.compile(r"\[[^]]+\]")
+
+        # Init memoized properties
+        self._handle_data = None
+
+        if not manual_types_to_codes:
+            manual_types_to_codes = {}
+        if not reverse_only_types_to_codes:
+            reverse_only_types_to_codes = {}
+        if not forward_only_types_to_codes:
+            forward_only_types_to_codes = {}
+
+        reverse_codes = DictOfStringSets(reverse_only_types_to_codes)
+        forward_codes = DictOfStringSets(forward_only_types_to_codes)
+        for k, v in manual_types_to_codes.items():
+            forward_codes.add(k, v)
+            reverse_codes.add(k, v)
+
+        self.forward_only_manual_types_to_codes = forward_codes.get_dict()
+        self.reverse_only_manual_types_to_codes = reverse_codes.get_dict()
+
+        # The presence of some types as input to a function imply the
+        # availability of some return codes.
+        self.input_type_to_codes = compute_type_to_codes(
+            self.handle_data,
+            forward_codes,
+            extra_op=self.add_extra_codes)
+
+        # Some return codes require a type (or its child) in the input.
+        self.codes_requiring_input_type = compute_codes_requiring_type(
+            self.handle_data,
+            reverse_codes
+        )
+
+        specified_codes = set(self.codes_requiring_input_type.keys())
+        for codes in self.forward_only_manual_types_to_codes.values():
+            specified_codes.update(codes)
+        for codes in self.reverse_only_manual_types_to_codes.values():
+            specified_codes.update(codes)
+        for codes in self.input_type_to_codes.values():
+            specified_codes.update(codes)
+
+        self.return_codes: Set[str]
+        unrecognized = specified_codes - self.return_codes
+        if unrecognized:
+            raise RuntimeError("Return code mentioned in script that isn't in the registry: " +
+                               ', '.join(unrecognized))
+
+        self.referenced_input_types = ReferencedTypes(self.db, self.is_input)
+        self.referenced_types = ReferencedTypes(self.db)
+        if not suppressions:
+            suppressions = {}
+        self.suppressions = DictOfStringSets(suppressions)
+        self.tags = _get_extension_tags(self.db.registry)
+
+    def is_api_type(self, member_elem):
+        """Return true if the member/parameter ElementTree passed is from this API.
+
+        May override or extend."""
+        membertext = "".join(member_elem.itertext())
+
+        return self.conventions.type_prefix in membertext
+
+    def is_input(self, member_elem):
+        """Return true if the member/parameter ElementTree passed is
+        considered "input".
+
+        May override or extend."""
+        membertext = "".join(member_elem.itertext())
+
+        if self.conventions.type_prefix not in membertext:
+            return False
+
+        ret = True
+        # Const is always input.
+        if self.CONST_RE.search(membertext):
+            ret = True
+
+        # Arrays and pointers that aren't const are always output.
+        elif "*" in membertext:
+            ret = False
+        elif self.ARRAY_RE.search(membertext):
+            ret = False
+
+        return ret
+
+    def strip_extension_tag(self, name):
+        """Remove a single author tag from the end of a name, if any.
+
+        Returns the stripped name and the tag, or the input and None if there was no tag.
+        """
+        for t in self.tags:
+            if name.endswith(t):
+                name = name[:-(len(t))]
+                if name[-1] == "_":
+                    # remove trailing underscore
+                    name = name[:-1]
+                return name, t
+        return name, None
+
+    def add_extra_codes(self, types_to_codes):
+        """Add any desired entries to the types-to-codes DictOfStringSets
+        before performing "ancestor propagation".
+
+        Passed to compute_type_to_codes as the extra_op.
+
+        May override."""
+        pass
+
+    def should_skip_checking_codes(self, name):
+        """Return True if more than the basic validation of return codes should
+        be skipped for a command.
+
+        May override."""
+
+        return self.conventions.should_skip_checking_codes
+
+    def get_codes_for_command_and_type(self, cmd_name, type_name):
+        """Return a set of return codes expected due to having
+        an input argument of type type_name.
+
+        The cmd_name is passed for use by extending methods.
+        Note that you should not use cmd_name to add codes, just to
+        filter them out. See get_required_codes_for_command() to do that.
+
+        May extend."""
+        return self.input_type_to_codes.get(type_name, set())
+
+    def get_required_codes_for_command(self, cmd_name):
+        """Return a set of return codes required due to having a particular name.
+
+        May override."""
+        return set()
+
+    def get_forbidden_codes_for_command(self, cmd_name):
+        """Return a set of return codes not permittted due to having a particular name.
+
+        May override."""
+        return set()
+
+    def check(self):
+        """Iterate through the registry, looking for consistency problems.
+
+        Outputs error messages at the end."""
+        # Iterate through commands, looking for consistency problems.
+        for name, info in self.reg.cmddict.items():
+            self.set_error_context(entity=name, elem=info.elem)
+
+            self.check_command(name, info)
+
+        for name, info in self.reg.typedict.items():
+            cat = info.elem.get('category')
+            if not cat:
+                # This is an external thing, skip it.
+                continue
+            self.set_error_context(entity=name, elem=info.elem)
+
+            self.check_type(name, info, cat)
+
+        self.ext_numbers = set()
+        for name, info in self.reg.extdict.items():
+            self.set_error_context(entity=name, elem=info.elem)
+
+            # Determine if this extension is supported by the API we're
+            # testing, and pass that flag to check_extension.
+            # For Vulkan, multiple APIs can be specified in the 'supported'
+            # attribute.
+            supported_apis = info.elem.get('supported', '').split(',')
+            supported = self.conventions.xml_api_name in supported_apis
+            self.check_extension(name, info, supported)
+
+        self.check_format()
+
+        entities_with_messages = set(
+            self.errors.keys()).union(self.warnings.keys())
+        if entities_with_messages:
+            print('xml_consistency/consistency_tools error and warning messages follow.')
+
+        for entity in entities_with_messages:
+            messages = self.errors.get(entity)
+            if messages:
+                print(f'\nError messages for {entity}')
+                for m in messages:
+                    print('ERROR:', m)
+
+            messages = self.warnings.get(entity)
+            if messages and self.display_warnings:
+                print(f'\nWarning messages for {entity}')
+                for m in messages:
+                    print('WARNING:', m)
+
+    def check_param(self, param):
+        """Check a member of a struct or a param of a function.
+
+        Called from check_params.
+
+        May extend."""
+        param_name = getElemName(param)
+        # Make sure there's something between the type and the name
+        # Can't just look at the .tail of <type> for some reason,
+        # so instead we look to see if anything's between
+        # type's text and name's text in the itertext.
+        # If there's no text between the tags, there will be no string
+        # between those tags' text in itertext()
+        text_parts = list(param.itertext())
+        type_idx = text_parts.index(getElemType(param))
+        name_idx = text_parts.index(param_name)
+        if name_idx - type_idx == 1:
+            self.record_error(
+                "Space (or other delimiter text) missing between </type> and <name> for param/member named",
+                param_name)
+
+        # Check external sync entries
+        externsyncs = ExternSyncEntry.parse_externsync_from_param(param)
+        if externsyncs:
+            for entry in externsyncs:
+                if entry.entirely_extern_sync:
+                    if len(externsyncs) > 1:
+                        self.record_error("Comma-separated list in externsync attribute includes 'true' for",
+                                          param_name)
+                else:
+                    # member name
+                    # TODO only looking at the superficial feature here,
+                    # not entry.param_ref_parts
+                    if entry.member != param_name:
+                        self.record_error("externsync attribute for", param_name,
+                                          "refers to some other member/parameter:", entry.member)
+
+    def check_params(self, params):
+        """Check the members of a struct or params of a function.
+
+        Called from check_type and check_command.
+
+        May extend."""
+        for param in params:
+            self.check_param(param)
+
+            # Check for parameters referenced by len= attribute
+            lengths = LengthEntry.parse_len_from_param(param)
+            if lengths:
+                for entry in lengths:
+                    if not entry.other_param_name:
+                        continue
+                    # TODO only looking at the superficial feature here,
+                    # not entry.param_ref_parts
+                    other_param = findNamedElem(params, entry.other_param_name)
+                    if other_param is None:
+                        self.record_error("References a non-existent parameter/member in the length of",
+                                          getElemName(param), ":", entry.other_param_name)
+
+    def check_referenced_type(self, desc, ref_name):
+        """
+        Record an error if a type mentioned somewhere doesn't exist.
+
+        :param desc: Description of where this type reference was found,
+                     for the error message.
+        :param ref_name: The name of the referenced type. If false-ish (incl. None),
+                         checking is skipped, so OK to pass the results of
+                         info.elem.get() directly
+        """
+        if ref_name:
+            entity = self.db.findEntity(ref_name)
+            if not entity:
+                self.record_error("Unknown type named in", desc, ":",
+                                  ref_name)
+
+    def check_type(self, name, info, category):
+        """Check a type's XML data for consistency.
+
+        Called from check.
+
+        May extend."""
+        if category == 'struct':
+            if not name.startswith(self.conventions.type_prefix):
+                self.record_error("Name does not start with",
+                                  self.conventions.type_prefix)
+            members = info.elem.findall('member')
+            self.check_params(members)
+
+            # Check the structure type member, if present.
+            type_member = findNamedElem(
+                members, self.conventions.structtype_member_name)
+            if type_member is not None:
+                val = type_member.get('values')
+                if val:
+                    expected = self.conventions.generate_structure_type_from_name(
+                        name)
+                    if val != expected:
+                        self.record_error("Type has incorrect type-member value: expected",
+                                          expected, "got", val)
+
+            # Check structextends attribute, if present.
+            # For Vulkan, this may be a comma-separated list of multiple types
+            for type in info.elem.get("structextends", '').split(','):
+                self.check_referenced_type("'structextends' attribute", type)
+
+            # Check parentstruct attribute, if present.
+            self.check_referenced_type("'parentstruct' attribute", info.elem.get("parentstruct"))
+
+        elif category == "bitmask":
+            if 'Flags' not in name:
+                self.record_error("Name of bitmask doesn't include 'Flags'")
+        elif category == "handle":
+            # Check parent attribute, if present.
+            self.check_referenced_type("'parent' attribute", info.elem.get("parent"))
+
+    def check_extension(self, name, info, supported):
+        """Check an extension's XML data for consistency.
+
+        Called from check.
+
+        May extend."""
+
+        # Verify that each extension has a unique number
+        extension_number = info.elem.get('number')
+        if extension_number is not None and extension_number != '0':
+            if extension_number in self.ext_numbers:
+                self.record_error('Duplicate extension number ' + extension_number)
+            else:
+                self.ext_numbers.add(extension_number)
+
+    def check_format(self):
+        """Check an extension's XML data for consistency.
+
+        Called from check.
+
+        May extend."""
+        pass
+
+    def check_command(self, name, info):
+        """Check a command's XML data for consistency.
+
+        Called from check.
+
+        May extend."""
+        elem = info.elem
+
+        self.check_params(elem.findall('param'))
+
+        # Some minimal return code checking
+        errorcodes = elem.get("errorcodes")
+        if errorcodes:
+            errorcodes = errorcodes.split(",")
+        else:
+            errorcodes = []
+
+        successcodes = elem.get("successcodes")
+        if successcodes:
+            successcodes = successcodes.split(",")
+        else:
+            successcodes = []
+
+        if not successcodes and not errorcodes:
+            # Early out if no return codes.
+            return
+
+        # Create a set for each group of codes, and check that
+        # they aren't duplicated within or between groups.
+        errorcodes_set = set(errorcodes)
+        if len(errorcodes) != len(errorcodes_set):
+            self.record_error("Contains a duplicate in errorcodes")
+
+        successcodes_set = set(successcodes)
+        if len(successcodes) != len(successcodes_set):
+            self.record_error("Contains a duplicate in successcodes")
+
+        if not successcodes_set.isdisjoint(errorcodes_set):
+            self.record_error("Has errorcodes and successcodes that overlap")
+
+        self.check_command_return_codes_basic(
+            name, info, successcodes_set, errorcodes_set)
+
+        # Continue to further return code checking if not "complicated"
+        if not self.should_skip_checking_codes(name):
+            codes_set = successcodes_set.union(errorcodes_set)
+            self.check_command_return_codes(
+                name, info, successcodes_set, errorcodes_set, codes_set)
+
+    def check_command_return_codes_basic(self, name, info,
+                                         successcodes, errorcodes):
+        """Check a command's return codes for consistency.
+
+        Called from check_command on every command.
+
+        May extend."""
+
+        # Check that all error codes include _ERROR_,
+        #  and that no success codes do.
+        for code in errorcodes:
+            if "_ERROR_" not in code:
+                self.record_error(
+                    code, "in errorcodes but doesn't contain _ERROR_")
+
+        for code in successcodes:
+            if "_ERROR_" in code:
+                self.record_error(code, "in successcodes but contain _ERROR_")
+
+    def check_command_return_codes(self, name, type_info,
+                                   successcodes, errorcodes,
+                                   codes):
+        """Check a command's return codes in-depth for consistency.
+
+        Called from check_command, only if
+        `self.should_skip_checking_codes(name)` is False.
+
+        May extend."""
+        referenced_input = self.referenced_input_types[name]
+        referenced_types = self.referenced_types[name]
+        error_prefix = self.conventions.api_prefix + "ERROR"
+
+        bad_success = {x for x in successcodes if x.startswith(error_prefix)}
+        if bad_success:
+            self.record_error("Found error code(s)",
+                              ",".join(bad_success),
+                              "listed in the successcodes attributes")
+
+        bad_errors = {x for x in errorcodes if not x.startswith(error_prefix)}
+        if bad_errors:
+            self.record_error("Found success code(s)",
+                              ",".join(bad_errors),
+                              "listed in the errorcodes attributes")
+
+        # Check that we have all the codes we expect, based on input types.
+        for referenced_type in referenced_input:
+            required_codes = self.get_codes_for_command_and_type(
+                name, referenced_type)
+            missing_codes = required_codes - codes
+            if missing_codes:
+                path = self.referenced_input_types.shortest_path(
+                    name, referenced_type)
+                path_str = " -> ".join(path)
+                self.record_error("Missing expected return code(s)",
+                                  ",".join(missing_codes),
+                                  "implied because of input of type",
+                                  referenced_type,
+                                  "found via path",
+                                  path_str)
+
+        # Check that we have all the codes we expect based on command name.
+        missing_codes = self.get_required_codes_for_command(name) - codes
+        if missing_codes:
+            self.record_error("Missing expected return code(s)",
+                              ",".join(missing_codes),
+                              "implied because of the name of this command")
+
+        # Check that we don't have any codes forbidden based on command name.
+        forbidden = self.get_forbidden_codes_for_command(name).intersection(codes)
+        if forbidden:
+            self.record_error("Got return code(s)",
+                              ", ".join(forbidden),
+                              "that were forbidden due to the name of this command")
+
+        # Check that, for each code returned by this command that we can
+        # associate with a type, we have some type that can provide it.
+        # e.g. can't have INSTANCE_LOST without an Instance
+        # (or child of Instance).
+        for code in codes:
+
+            required_types = self.codes_requiring_input_type.get(code)
+            if not required_types:
+                # This code doesn't have a known requirement
+                continue
+
+            # TODO: do we look at referenced_types or referenced_input here?
+            # the latter is stricter
+            if not referenced_types.intersection(required_types):
+                self.record_error("Unexpected return code", code,
+                                  "- none of these types:",
+                                  required_types,
+                                  "found in the set of referenced types",
+                                  referenced_types)
+
+    ###
+    # Utility properties/methods
+    ###
+
+    def set_error_context(self, entity=None, elem=None):
+        """Set the entity and/or element for future record_error calls."""
+        self.entity = entity
+        self.elem = elem
+        self.name = getElemName(elem)
+        self.entity_suppressions = self.suppressions.get(getElemName(elem))
+
+    def record_error(self, *args, **kwargs):
+        """Record failure and an error message for the current context."""
+        message = " ".join((str(x) for x in args))
+
+        if self._is_message_suppressed(message):
+            return
+
+        message = self._prepend_sourceline_to_message(message, **kwargs)
+        self.fail = True
+        self.errors.add(self.entity, message)
+
+    def record_warning(self, *args, **kwargs):
+        """Record a warning message for the current context."""
+        message = " ".join((str(x) for x in args))
+
+        if self._is_message_suppressed(message):
+            return
+
+        message = self._prepend_sourceline_to_message(message, **kwargs)
+        self.warnings.add(self.entity, message)
+
+    def _is_message_suppressed(self, message):
+        """Return True if the given message, for this entity, should be suppressed."""
+        if not self.entity_suppressions:
+            return False
+        for suppress in self.entity_suppressions:
+            if suppress in message:
+                return True
+
+        return False
+
+    def _prepend_sourceline_to_message(self, message, **kwargs):
+        """Prepend a file and/or line reference to the message, if possible.
+
+        If filename is given as a keyword argument, it is used on its own.
+
+        If filename is not given, this will attempt to retrieve the filename and line from an XML element.
+        If 'elem' is given as a keyword argument and is not None, it is used to find the line.
+        If 'elem' is given as None, no XML elements are looked at.
+        If 'elem' is not supplied, the error context element is used.
+
+        If using XML, the filename, if available, is retrieved from the Registry class.
+        If using XML and python-lxml is installed, the source line is retrieved from whatever element is chosen."""
+        fn = kwargs.get('filename')
+        sourceline = None
+
+        if fn is None:
+            elem = kwargs.get('elem', self.elem)
+            if elem is not None:
+                sourceline = getattr(elem, 'sourceline', None)
+                if self.reg.filename:
+                    fn = self.reg.filename
+
+        if fn is None and sourceline is None:
+            return message
+
+        if fn is None:
+            return "Line {}: {}".format(sourceline, message)
+
+        if sourceline is None:
+            return "{}: {}".format(fn, message)
+
+        return "{}:{}: {}".format(fn, sourceline, message)
+
+
+class HandleParents(RecursiveMemoize):
+    def __init__(self, handle_types):
+        self.handle_types = handle_types
+
+        def compute(handle_type):
+            immediate_parent = self.handle_types[handle_type].elem.get(
+                'parent')
+
+            if immediate_parent is None:
+                # No parents, no need to recurse
+                return []
+
+            # Support multiple (alternate) parents
+            immediate_parents = immediate_parent.split(',')
+
+            # Recurse, combine, and return
+            all_parents = immediate_parents[:]
+            for parent in immediate_parents:
+                all_parents.extend(self[parent])
+            return all_parents
+
+        super().__init__(compute, handle_types.keys())
+
+
+def _always_true(x):
+    return True
+
+
+class ReferencedTypes(RecursiveMemoize):
+    """Find all types(optionally matching a predicate) that are referenced
+    by a struct or function, recursively."""
+
+    def __init__(self, db, predicate=None):
+        """Initialize.
+
+        Provide an EntityDB object and a predicate function."""
+        self.db = db
+
+        self.predicate = predicate
+        if not self.predicate:
+            # Default predicate is "anything goes"
+            self.predicate = _always_true
+
+        self._directly_referenced = {}
+        self.graph = nx.DiGraph()
+
+        def compute(type_name):
+            """Compute and return all types referenced by type_name, recursively, that satisfy the predicate.
+
+            Called by the [] operator in the base class."""
+            types = self.directly_referenced(type_name)
+            if not types:
+                return types
+
+            all_types = set()
+            all_types.update(types)
+            for t in types:
+                referenced = self[t]
+                if referenced is not None:
+                    # If not leading to a cycle
+                    all_types.update(referenced)
+            return all_types
+
+        # Initialize base class
+        super().__init__(compute, permit_cycles=True)
+
+    def shortest_path(self, source, target):
+        """Get the shortest path between one type/function name and another."""
+        # Trigger computation
+        _ = self[source]
+
+        return shortest_path(self.graph, source=source, target=target)
+
+    def directly_referenced(self, type_name):
+        """Get all types referenced directly by type_name that satisfy the predicate.
+
+        Memoizes its results."""
+        if type_name not in self._directly_referenced:
+            members = self.db.getMemberElems(type_name)
+            if members:
+                types = ((member, member.find("type")) for member in members)
+                self._directly_referenced[type_name] = set(type_elem.text for (member, type_elem) in types
+                                                           if type_elem is not None and self.predicate(member))
+
+            else:
+                self._directly_referenced[type_name] = set()
+            children = self.db.childTypes(type_name)
+            if children:
+                self._directly_referenced[type_name].update(children)
+            # Update graph
+            self.graph.add_node(type_name)
+            self.graph.add_edges_from((type_name, t)
+                                      for t in self._directly_referenced[type_name])
+
+        return self._directly_referenced[type_name]
+
+
+class HandleData:
+    """Data about all the handle types available in an API specification."""
+
+    def __init__(self, registry):
+        self.reg = registry
+        self._handle_types = None
+        self._ancestors = None
+        self._descendants = None
+
+    @property
+    def handle_types(self):
+        """Return a dictionary of handle type names to type info."""
+        if not self._handle_types:
+            # First time requested - compute it.
+            self._handle_types = {
+                type_name: type_info
+                for type_name, type_info in self.reg.typedict.items()
+                if type_info.elem.get('category') == 'handle'
+            }
+        return self._handle_types
+
+    @property
+    def ancestors_dict(self):
+        """Return a dictionary of handle type names to sets of ancestors."""
+        if not self._ancestors:
+            # First time requested - compute it.
+            self._ancestors = HandleParents(self.handle_types).get_dict()
+        return self._ancestors
+
+    @property
+    def descendants_dict(self):
+        """Return a dictionary of handle type names to sets of descendants."""
+        if not self._descendants:
+            # First time requested - compute it.
+
+            handle_parents = self.ancestors_dict
+
+            def get_descendants(handle):
+                return set(h for h in handle_parents.keys()
+                           if handle in handle_parents[h])
+
+            self._descendants = {
+                h: get_descendants(h)
+                for h in handle_parents.keys()
+            }
+        return self._descendants
+
+
+def compute_type_to_codes(handle_data, types_to_codes, extra_op=None):
+    """Compute a DictOfStringSets of input type to required return codes.
+
+    - handle_data is a HandleData instance.
+    - d is a dictionary of type names to strings or string collections of
+      return codes.
+    - extra_op, if any, is called after populating the output from the input
+      dictionary, but before propagation of parent codes to child types.
+      extra_op is called with the in-progress DictOfStringSets.
+
+    Returns a DictOfStringSets of input type name to set of required return
+    code names.
+    """
+    # Initialize with the supplied "manual" codes
+    types_to_codes = DictOfStringSets(types_to_codes)
+
+    # Dynamically generate more codes, if desired
+    if extra_op:
+        extra_op(types_to_codes)
+
+    # Final post-processing
+
+    # Any handle can result in its parent handle's codes too.
+
+    handle_ancestors = handle_data.ancestors_dict
+
+    extra_handle_codes = {}
+    for handle_type, ancestors in handle_ancestors.items():
+        # The sets of return codes corresponding to each ancestor type.
+        ancestors_codes = [types_to_codes.get(ancestor, set())
+                           for ancestor in ancestors]
+        extra_handle_codes[handle_type] = set().union(*ancestors_codes)
+
+    for handle_type, extras in extra_handle_codes.items():
+        types_to_codes.add(handle_type, extras)
+
+    return types_to_codes
+
+
+def compute_codes_requiring_type(handle_data, types_to_codes, registry=None):
+    """Compute a DictOfStringSets of return codes to a set of input types able
+    to provide the ability to generate that code.
+
+    handle_data is a HandleData instance.
+    d is a dictionary of input types to associated return codes(same format
+    as for input to compute_type_to_codes, may use same dict).
+    This will invert that relationship, and also permit any "child handles"
+    to satisfy a requirement for a parent in producing a code.
+
+    Returns a DictOfStringSets of return code name to the set of parameter
+    types that would allow that return code.
+    """
+    # Use DictOfStringSets to normalize the input into a dict with values
+    # that are sets of strings
+    in_dict = DictOfStringSets(types_to_codes)
+
+    handle_descendants = handle_data.descendants_dict
+
+    out = DictOfStringSets()
+    for in_type, code_set in in_dict.items():
+        descendants = handle_descendants.get(in_type)
+        for code in code_set:
+            out.add(code, in_type)
+            if descendants:
+                out.add(code, descendants)
+
+    return out
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/console_printer.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/console_printer.py
new file mode 100644
index 0000000..7d69aac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/console_printer.py
@@ -0,0 +1,274 @@
+"""Defines ConsolePrinter, a BasePrinter subclass for appealing console output."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+from sys import stdout
+
+from .base_printer import BasePrinter
+from .shared import (colored, getHighlightedRange, getInterestedRange,
+                     toNameAndLine)
+
+try:
+    from tabulate import tabulate_impl
+    HAVE_TABULATE = True
+except ImportError:
+    HAVE_TABULATE = False
+
+
+def colWidth(collection, columnNum):
+    """Compute the required width of a column in a collection of row-tuples."""
+    MIN_PADDING = 5
+    return MIN_PADDING + max((len(row[columnNum]) for row in collection))
+
+
+def alternateTabulate(collection, headers=None):
+    """Minimal re-implementation of the tabulate module."""
+    # We need a list, not a generator or anything else.
+    if not isinstance(collection, list):
+        collection = list(collection)
+
+    # Empty collection means no table
+    if not collection:
+        return None
+
+    if headers is None:
+        fullTable = collection
+    else:
+        underline = ['-' * len(header) for header in headers]
+        fullTable = [headers, underline] + collection
+    widths = [colWidth(collection, colNum)
+              for colNum in range(len(fullTable[0]))]
+    widths[-1] = None
+
+    lines = []
+    for row in fullTable:
+        fields = []
+        for data, width in zip(row, widths):
+            if width:
+                spaces = ' ' * (width - len(data))
+                fields.append(data + spaces)
+            else:
+                fields.append(data)
+        lines.append(''.join(fields))
+    return '\n'.join(lines)
+
+
+def printTabulated(collection, headers=None):
+    """Call either tabulate.tabulate(), or our internal alternateTabulate()."""
+    if HAVE_TABULATE:
+        tabulated = tabulate_impl(collection, headers=headers)
+    else:
+        tabulated = alternateTabulate(collection, headers=headers)
+    if tabulated:
+        print(tabulated)
+
+
+def printLineSubsetWithHighlighting(
+        line, start, end, highlightStart=None, highlightEnd=None, maxLen=120, replacement=None):
+    """Print a (potential subset of a) line, with highlighting/underline and optional replacement.
+
+    Will print at least the characters line[start:end], and potentially more if possible
+    to do so without making the output too wide.
+    Will highlight (underline) line[highlightStart:highlightEnd], where the default
+    value for highlightStart is simply start, and the default value for highlightEnd is simply end.
+    replacement, if supplied, will be aligned with the highlighted range.
+
+    Output is intended to look like part of a Clang compile error/warning message.
+    """
+    # Fill in missing start/end with start/end of range.
+    if highlightStart is None:
+        highlightStart = start
+    if highlightEnd is None:
+        highlightEnd = end
+
+    # Expand interested range start/end.
+    start = min(start, highlightStart)
+    end = max(end, highlightEnd)
+
+    tildeLength = highlightEnd - highlightStart - 1
+    caretLoc = highlightStart
+    continuation = '[...]'
+
+    if len(line) > maxLen:
+        # Too long
+
+        # the max is to handle -1 from .find() (which indicates "not found")
+        followingSpaceIndex = max(end, line.find(' ', min(len(line), end + 1)))
+
+        # Maximum length has decreased by at least
+        # the length of a single continuation we absolutely need.
+        maxLen -= len(continuation)
+
+        if followingSpaceIndex <= maxLen:
+            # We can grab the whole beginning of the line,
+            # and not adjust caretLoc
+            line = line[:maxLen] + continuation
+
+        elif (len(line) - followingSpaceIndex) < 5:
+            # We need to truncate the beginning,
+            # but we're close to the end of line.
+            newBeginning = len(line) - maxLen
+
+            caretLoc += len(continuation)
+            caretLoc -= newBeginning
+            line = continuation + line[newBeginning:]
+        else:
+            # Need to truncate the beginning of the string too.
+            newEnd = followingSpaceIndex
+
+            # Now we need two continuations
+            # (and to adjust caret to the right accordingly)
+            maxLen -= len(continuation)
+            caretLoc += len(continuation)
+
+            newBeginning = newEnd - maxLen
+            caretLoc -= newBeginning
+
+            line = continuation + line[newBeginning:newEnd] + continuation
+
+    stdout.buffer.write(line.encode('utf-8'))
+    print()
+
+    spaces = ' ' * caretLoc
+    tildes = '~' * tildeLength
+    print(spaces + colored('^' + tildes, 'green'))
+    if replacement is not None:
+        print(spaces + colored(replacement, 'green'))
+
+
+class ConsolePrinter(BasePrinter):
+    """Implementation of BasePrinter for generating diagnostic reports in colored, helpful console output."""
+
+    def __init__(self):
+        self.show_script_location = False
+        super().__init__()
+
+    ###
+    # Output methods: these all print directly.
+    def outputResults(self, checker, broken_links=True,
+                      missing_includes=False):
+        """Output the full results of a checker run.
+
+        Includes the diagnostics, broken links (if desired),
+        and missing includes (if desired).
+        """
+        self.output(checker)
+        if broken_links:
+            broken = checker.getBrokenLinks()
+            if broken:
+                self.outputBrokenLinks(checker, broken)
+        if missing_includes:
+            missing = checker.getMissingUnreferencedApiIncludes()
+            if missing:
+                self.outputMissingIncludes(checker, missing)
+
+    def outputBrokenLinks(self, checker, broken):
+        """Output a table of broken links.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        print('Missing API includes that are referenced by a linking macro: these result in broken links in the spec!')
+
+        def makeRowOfBroken(entity, uses):
+            fn = checker.findEntity(entity).filename
+            anchor = '[[{}]]'.format(entity)
+            locations = ', '.join((toNameAndLine(context, root_path=checker.root_path)
+                                   for context in uses))
+            return (fn, anchor, locations)
+        printTabulated((makeRowOfBroken(entity, uses)
+                        for entity, uses in sorted(broken.items())),
+                       headers=['Include File', 'Anchor in lieu of include', 'Links to this entity'])
+
+    def outputMissingIncludes(self, checker, missing):
+        """Output a table of missing includes.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        missing = list(sorted(missing))
+        if not missing:
+            # Exit if none
+            return
+        print(
+            'Missing, but unreferenced, API includes/anchors - potentially not-documented entities:')
+
+        def makeRowOfMissing(entity):
+            fn = checker.findEntity(entity).filename
+            anchor = '[[{}]]'.format(entity)
+            return (fn, anchor)
+        printTabulated((makeRowOfMissing(entity) for entity in missing),
+                       headers=['Include File', 'Anchor in lieu of include'])
+
+    def outputMessage(self, msg):
+        """Output a Message, with highlighted range and replacement, if appropriate."""
+        highlightStart, highlightEnd = getHighlightedRange(msg.context)
+
+        if '\n' in msg.context.filename:
+            # This is a multi-line string "filename".
+            # Extra blank line and delimiter line for readability:
+            print()
+            print('--------------------------------------------------------------------')
+
+        fileAndLine = colored('{}:'.format(
+            self.formatBrief(msg.context)), attrs=['bold'])
+
+        headingSize = len('{context}: {mtype}: '.format(
+            context=self.formatBrief(msg.context),
+            mtype=self.formatBrief(msg.message_type, False)))
+        indent = ' ' * headingSize
+        printedHeading = False
+
+        lines = msg.message[:]
+        if msg.see_also:
+            lines.append('See also:')
+            lines.extend(('  {}'.format(self.formatBrief(see))
+                          for see in msg.see_also))
+
+        if msg.fix:
+            lines.append('Note: Auto-fix available')
+
+        for line in msg.message:
+            if not printedHeading:
+                scriptloc = ''
+                if msg.script_location and self.show_script_location:
+                    scriptloc = ', ' + msg.script_location
+                print('{fileLine} {mtype} {msg} (-{arg}{loc})'.format(
+                    fileLine=fileAndLine, mtype=msg.message_type.formattedWithColon(),
+                    msg=colored(line, attrs=['bold']), arg=msg.message_id.enable_arg(), loc=scriptloc))
+                printedHeading = True
+            else:
+                print(colored(indent + line, attrs=['bold']))
+
+        if len(msg.message) > 1:
+            # extra blank line after multiline message
+            print('')
+
+        start, end = getInterestedRange(msg.context)
+        printLineSubsetWithHighlighting(
+            msg.context.line,
+            start, end,
+            highlightStart, highlightEnd,
+            replacement=msg.replacement)
+
+    def outputFallback(self, obj):
+        """Output by calling print."""
+        print(obj)
+
+    ###
+    # Format methods: these all return a string.
+    def formatFilename(self, fn, _with_color=True):
+        """Format a local filename, as a relative path if possible."""
+        return self.getRelativeFilename(fn)
+
+    def formatMessageTypeBrief(self, message_type, with_color=True):
+        """Format a message type briefly, applying color if desired and possible.
+
+        Delegates to the superclass if not formatting with color.
+        """
+        if with_color:
+            return message_type.formattedWithColon()
+        return super(ConsolePrinter, self).formatMessageTypeBrief(
+            message_type, with_color)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/conventions.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/conventions.py
new file mode 100644
index 0000000..faca3a2
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/conventions.py
@@ -0,0 +1,454 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Base class for working-group-specific style conventions,
+# used in generation.
+
+from enum import Enum
+import abc
+import re
+
+# Type categories that respond "False" to isStructAlwaysValid
+# basetype is home to typedefs like ..Bool32
+CATEGORIES_REQUIRING_VALIDATION = set(('handle',
+                                       'enum',
+                                       'bitmask',
+                                       'basetype',
+                                       None))
+
+# These are basic C types pulled in via openxr_platform_defines.h
+TYPES_KNOWN_ALWAYS_VALID = set(('char',
+                                'float',
+                                'int8_t', 'uint8_t',
+                                'int16_t', 'uint16_t',
+                                'int32_t', 'uint32_t',
+                                'int64_t', 'uint64_t',
+                                'size_t',
+                                'intptr_t', 'uintptr_t',
+                                'int',
+                                ))
+
+# Split an extension name into vendor ID and name portions
+EXT_NAME_DECOMPOSE_RE = re.compile(r'[A-Z]+_(?P<vendor>[A-Z]+)_(?P<name>[\w_]+)')
+
+# Match an API version name.
+# This could be refined further for specific APIs.
+API_VERSION_NAME_RE = re.compile(r'[A-Z]+_VERSION_[0-9]')
+
+
+class ProseListFormats(Enum):
+    """A connective, possibly with a quantifier."""
+    AND = 0
+    EACH_AND = 1
+    OR = 2
+    ANY_OR = 3
+
+    @classmethod
+    def from_string(cls, s):
+        if s == 'or':
+            return cls.OR
+        if s == 'and':
+            return cls.AND
+        raise RuntimeError("Unrecognized string connective: " + s)
+
+    @property
+    def connective(self):
+        if self in (ProseListFormats.OR, ProseListFormats.ANY_OR):
+            return 'or'
+        return 'and'
+
+    def quantifier(self, n):
+        """Return the desired quantifier for a list of a given length."""
+        if self == ProseListFormats.ANY_OR:
+            if n > 1:
+                return 'any of '
+        elif self == ProseListFormats.EACH_AND:
+            if n > 2:
+                return 'each of '
+            if n == 2:
+                return 'both of '
+        return ''
+
+
+class ConventionsBase(abc.ABC):
+    """WG-specific conventions."""
+
+    def __init__(self):
+        self._command_prefix = None
+        self._type_prefix = None
+
+    def formatExtension(self, name):
+        """Mark up an extension name as a link the spec."""
+        return '`<<{}>>`'.format(name)
+
+    @property
+    @abc.abstractmethod
+    def null(self):
+        """Preferred spelling of NULL."""
+        raise NotImplementedError
+
+    def makeProseList(self, elements, fmt=ProseListFormats.AND, with_verb=False, *args, **kwargs):
+        """Make a (comma-separated) list for use in prose.
+
+        Adds a connective (by default, 'and')
+        before the last element if there are more than 1.
+
+        Adds the right one of "is" or "are" to the end if with_verb is true.
+
+        Optionally adds a quantifier (like 'any') before a list of 2 or more,
+        if specified by fmt.
+
+        Override with a different method or different call to
+        _implMakeProseList if you want to add a comma for two elements,
+        or not use a serial comma.
+        """
+        return self._implMakeProseList(elements, fmt, with_verb, *args, **kwargs)
+
+    @property
+    def struct_macro(self):
+        """Get the appropriate format macro for a structure.
+
+        May override.
+        """
+        return 'slink:'
+
+    @property
+    def external_macro(self):
+        """Get the appropriate format macro for an external type like uint32_t.
+
+        May override.
+        """
+        return 'code:'
+
+    @property
+    @abc.abstractmethod
+    def structtype_member_name(self):
+        """Return name of the structure type member.
+
+        Must implement.
+        """
+        raise NotImplementedError()
+
+    @property
+    @abc.abstractmethod
+    def nextpointer_member_name(self):
+        """Return name of the structure pointer chain member.
+
+        Must implement.
+        """
+        raise NotImplementedError()
+
+    @property
+    @abc.abstractmethod
+    def xml_api_name(self):
+        """Return the name used in the default API XML registry for the default API"""
+        raise NotImplementedError()
+
+    @abc.abstractmethod
+    def generate_structure_type_from_name(self, structname):
+        """Generate a structure type name, like XR_TYPE_CREATE_INSTANCE_INFO.
+
+        Must implement.
+        """
+        raise NotImplementedError()
+
+    def makeStructName(self, name):
+        """Prepend the appropriate format macro for a structure to a structure type name.
+
+        Uses struct_macro, so just override that if you want to change behavior.
+        """
+        return self.struct_macro + name
+
+    def makeExternalTypeName(self, name):
+        """Prepend the appropriate format macro for an external type like uint32_t to a type name.
+
+        Uses external_macro, so just override that if you want to change behavior.
+        """
+        return self.external_macro + name
+
+    def _implMakeProseList(self, elements, fmt, with_verb, comma_for_two_elts=False, serial_comma=True):
+        """Internal-use implementation to make a (comma-separated) list for use in prose.
+
+        Adds a connective (by default, 'and')
+        before the last element if there are more than 1,
+        and only includes commas if there are more than 2
+        (if comma_for_two_elts is False).
+
+        Adds the right one of "is" or "are" to the end if with_verb is true.
+
+        Optionally adds a quantifier (like 'any') before a list of 2 or more,
+        if specified by fmt.
+
+        Do not edit these defaults, override self.makeProseList().
+        """
+        assert(serial_comma)  # did not implement what we did not need
+        if isinstance(fmt, str):
+            fmt = ProseListFormats.from_string(fmt)
+
+        my_elts = list(elements)
+        if len(my_elts) > 1:
+            my_elts[-1] = '{} {}'.format(fmt.connective, my_elts[-1])
+
+        if not comma_for_two_elts and len(my_elts) <= 2:
+            prose = ' '.join(my_elts)
+        else:
+            prose = ', '.join(my_elts)
+
+        quantifier = fmt.quantifier(len(my_elts))
+
+        parts = [quantifier, prose]
+
+        if with_verb:
+            if len(my_elts) > 1:
+                parts.append(' are')
+            else:
+                parts.append(' is')
+        return ''.join(parts)
+
+    @property
+    @abc.abstractmethod
+    def file_suffix(self):
+        """Return suffix of generated Asciidoctor files"""
+        raise NotImplementedError
+
+    @abc.abstractmethod
+    def api_name(self, spectype=None):
+        """Return API or specification name for citations in ref pages.
+
+        spectype is the spec this refpage is for.
+        'api' (the default value) is the main API Specification.
+        If an unrecognized spectype is given, returns None.
+
+        Must implement."""
+        raise NotImplementedError
+
+    def should_insert_may_alias_macro(self, genOpts):
+        """Return true if we should insert a "may alias" macro in this file.
+
+        Only used by OpenXR right now."""
+        return False
+
+    @property
+    def command_prefix(self):
+        """Return the expected prefix of commands/functions.
+
+        Implemented in terms of api_prefix."""
+        if not self._command_prefix:
+            self._command_prefix = self.api_prefix[:].replace('_', '').lower()
+        return self._command_prefix
+
+    @property
+    def type_prefix(self):
+        """Return the expected prefix of type names.
+
+        Implemented in terms of command_prefix (and in turn, api_prefix)."""
+        if not self._type_prefix:
+            self._type_prefix = ''.join(
+                (self.command_prefix[0:1].upper(), self.command_prefix[1:]))
+        return self._type_prefix
+
+    @property
+    @abc.abstractmethod
+    def api_prefix(self):
+        """Return API token prefix.
+
+        Typically two uppercase letters followed by an underscore.
+
+        Must implement."""
+        raise NotImplementedError
+
+    @property
+    def api_version_prefix(self):
+        """Return API core version token prefix.
+
+        Implemented in terms of api_prefix.
+
+        May override."""
+        return self.api_prefix + 'VERSION_'
+
+    @property
+    def KHR_prefix(self):
+        """Return extension name prefix for KHR extensions.
+
+        Implemented in terms of api_prefix.
+
+        May override."""
+        return self.api_prefix + 'KHR_'
+
+    @property
+    def EXT_prefix(self):
+        """Return extension name prefix for EXT extensions.
+
+        Implemented in terms of api_prefix.
+
+        May override."""
+        return self.api_prefix + 'EXT_'
+
+    def writeFeature(self, featureExtraProtect, filename):
+        """Return True if OutputGenerator.endFeature should write this feature.
+
+        Defaults to always True.
+        Used in COutputGenerator.
+
+        May override."""
+        return True
+
+    def requires_error_validation(self, return_type):
+        """Return True if the return_type element is an API result code
+        requiring error validation.
+
+        Defaults to always False.
+
+        May override."""
+        return False
+
+    @property
+    def required_errors(self):
+        """Return a list of required error codes for validation.
+
+        Defaults to an empty list.
+
+        May override."""
+        return []
+
+    def is_voidpointer_alias(self, tag, text, tail):
+        """Return True if the declaration components (tag,text,tail) of an
+        element represents a void * type.
+
+        Defaults to a reasonable implementation.
+
+        May override."""
+        return tag == 'type' and text == 'void' and tail.startswith('*')
+
+    def make_voidpointer_alias(self, tail):
+        """Reformat a void * declaration to include the API alias macro.
+
+        Defaults to a no-op.
+
+        Must override if you actually want to use this feature in your project."""
+        return tail
+
+    def category_requires_validation(self, category):
+        """Return True if the given type 'category' always requires validation.
+
+        Defaults to a reasonable implementation.
+
+        May override."""
+        return category in CATEGORIES_REQUIRING_VALIDATION
+
+    def type_always_valid(self, typename):
+        """Return True if the given type name is always valid (never requires validation).
+
+        This is for things like integers.
+
+        Defaults to a reasonable implementation.
+
+        May override."""
+        return typename in TYPES_KNOWN_ALWAYS_VALID
+
+    @property
+    def should_skip_checking_codes(self):
+        """Return True if more than the basic validation of return codes should
+        be skipped for a command."""
+
+        return False
+
+    @property
+    def generate_index_terms(self):
+        """Return True if asiidoctor index terms should be generated as part
+           of an API interface from the docgenerator."""
+
+        return False
+
+    @property
+    def generate_enum_table(self):
+        """Return True if asciidoctor tables describing enumerants in a
+           group should be generated as part of group generation."""
+        return False
+
+    @property
+    def generate_max_enum_in_docs(self):
+        """Return True if MAX_ENUM tokens should be generated in
+           documentation includes."""
+        return False
+
+    @abc.abstractmethod
+    def extension_file_path(self, name):
+        """Return file path to an extension appendix relative to a directory
+           containing all such appendices.
+           - name - extension name
+
+           Must implement."""
+        raise NotImplementedError
+
+    def extension_include_string(self, name):
+        """Return format string for include:: line for an extension appendix
+           file.
+            - name - extension name"""
+
+        return 'include::{{appendices}}/{}[]'.format(
+                self.extension_file_path(name))
+
+    @property
+    def provisional_extension_warning(self):
+        """Return True if a warning should be included in extension
+           appendices for provisional extensions."""
+        return True
+
+    @property
+    def generated_include_path(self):
+        """Return path relative to the generated reference pages, to the
+           generated API include files."""
+
+        return '{generated}'
+
+    @property
+    def include_extension_appendix_in_refpage(self):
+        """Return True if generating extension refpages by embedding
+           extension appendix content (default), False otherwise
+           (OpenXR)."""
+
+        return True
+
+    def valid_flag_bit(self, bitpos):
+        """Return True if bitpos is an allowed numeric bit position for
+           an API flag.
+
+           Behavior depends on the data type used for flags (which may be 32
+           or 64 bits), and may depend on assumptions about compiler
+           handling of sign bits in enumerated types, as well."""
+        return True
+
+    @property
+    def duplicate_aliased_structs(self):
+        """
+        Should aliased structs have the original struct definition listed in the
+        generated docs snippet?
+        """
+        return False
+
+    @property
+    def protectProtoComment(self):
+        """Return True if generated #endif should have a comment matching
+           the protection symbol used in the opening #ifdef/#ifndef."""
+        return False
+
+    @property
+    def extra_refpage_headers(self):
+        """Return any extra headers (preceding the title) for generated
+           reference pages."""
+        return ''
+
+    @property
+    def extra_refpage_body(self):
+        """Return any extra text (following the title) for generated
+           reference pages."""
+        return ''
+
+    def is_api_version_name(self, name):
+        """Return True if name is an API version name."""
+
+        return API_VERSION_NAME_RE.match(name) is not None
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/data_structures.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/data_structures.py
new file mode 100644
index 0000000..f2808cf
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/data_structures.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+"""Provides general-purpose data structures."""
+
+
+class DictOfStringSets:
+    """A dictionary where the values are sets of strings.
+
+    Has some convenience functions to allow easier maintenance via
+    the .add method."""
+
+    def __init__(self, d=None):
+        self.d = {}
+        if d:
+            for k, v in d.items():
+                self.add(k, v)
+
+    def __getitem__(self, k):
+        return self.d[k]
+
+    def __contains__(self, k):
+        return k in self.d
+
+    def get(self, k, default=None):
+        return self.d.get(k, default)
+
+    def get_dict(self):
+        return self.d
+
+    def items(self):
+        """Return an iterator like dict().items()."""
+        return self.d.items()
+
+    def keys(self):
+        """Return an iterator over keys."""
+        return self.d.keys()
+
+    def values(self):
+        """Return an iterator over values."""
+        return self.d.values()
+
+    def add_key(self, k):
+        """Ensure the set for the given key exists."""
+        if k not in self.d:
+            self.d[k] = set()
+
+    def add(self, k, v):
+        self.add_key(k)
+        if isinstance(v, str):
+            v = (v, )
+        if not isinstance(v, set):
+            v = set(v)
+        self.d[k].update(v)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/entity_db.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/entity_db.py
new file mode 100644
index 0000000..a685006
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/entity_db.py
@@ -0,0 +1,666 @@
+"""Provides EntityDatabase, a class that keeps track of spec-defined entities and associated macros."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+from abc import ABC, abstractmethod
+
+from .shared import (CATEGORIES_WITH_VALIDITY, EXTENSION_CATEGORY,
+                     NON_EXISTENT_MACROS, EntityData)
+from .util import getElemName
+
+
+def _entityToDict(data):
+    return {
+        'macro': data.macro,
+        'filename': data.filename,
+        'category': data.category,
+        'directory': data.directory
+    }
+
+
+class EntityDatabase(ABC):
+    """Parsed and processed information from the registry XML.
+
+    Must be subclasses for each specific API.
+    """
+
+    ###
+    # Methods that must be implemented in subclasses.
+    ###
+    @abstractmethod
+    def makeRegistry(self):
+        """Return a Registry object that has already had loadFile() and parseTree() called.
+
+        Called only once during construction.
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def getNamePrefix(self):
+        """Return the (two-letter) prefix of all entity names for this API.
+
+        Called only once during construction.
+        """
+        raise NotImplementedError
+
+    @abstractmethod
+    def getPlatformRequires(self):
+        """Return the 'requires' string associated with external/platform definitions.
+
+        This is the string found in the requires attribute of the XML for entities that
+        are externally defined in a platform include file, like the question marks in:
+
+        <type requires="???" name="int8_t"/>
+
+        In Vulkan, this is 'vk_platform'.
+
+        Called only once during construction.
+        """
+        raise NotImplementedError
+
+    ###
+    # Methods that it is optional to **override**
+    ###
+    def getSystemTypes(self):
+        """Return an enumerable of strings that name system types.
+
+        System types use the macro `code`, and they do not generate API/validity includes.
+
+        Called only once during construction.
+        """
+        return []
+
+    def getGeneratedDirs(self):
+        """Return a sequence of strings that are the subdirectories of generates API includes.
+
+        Called only once during construction.
+        """
+        return ['basetypes',
+                'defines',
+                'enums',
+                'flags',
+                'funcpointers',
+                'handles',
+                'protos',
+                'structs']
+
+    def populateMacros(self):
+        """Perform API-specific calls, if any, to self.addMacro() and self.addMacros().
+
+        It is recommended to implement/override this and call
+        self.addMacros(..., ..., [..., "flags"]),
+        since the base implementation, in _basicPopulateMacros(),
+        does not add any macros as pertaining to the category "flags".
+
+        Called only once during construction.
+        """
+        pass
+
+    def populateEntities(self):
+        """Perform API-specific calls, if any, to self.addEntity()."""
+        pass
+
+    def getEntitiesWithoutValidity(self):
+        """Return an enumerable of entity names that do not generate validity includes."""
+        return [self.mixed_case_name_prefix +
+                x for x in ['BaseInStructure', 'BaseOutStructure']]
+
+    def getExclusionSet(self):
+        """Return a set of "support=" attribute strings that should not be included in the database.
+
+        Called only during construction."""
+        return set(('disabled',))
+
+    ###
+    # Methods that it is optional to **extend**
+    ###
+    def handleType(self, name, info, requires):
+        """Add entities, if appropriate, for an item in registry.typedict.
+
+        Called at construction for every name, info in registry.typedict.items()
+        not immediately skipped,
+        to perform the correct associated addEntity() call, if applicable.
+        The contents of the requires attribute, if any, is passed in requires.
+
+        May be extended by API-specific code to handle some cases preferentially,
+        then calling the super implementation to handle the rest.
+        """
+        if requires == self.platform_requires:
+            # Ah, no, don't skip this, it's just in the platform header file.
+            # TODO are these code or basetype?
+            self.addEntity(name, 'code', elem=info.elem, generates=False)
+            return
+
+        protect = info.elem.get('protect')
+        if protect:
+            self.addEntity(protect, 'dlink',
+                           category='configdefines', generates=False)
+
+        alias = info.elem.get('alias')
+        if alias:
+            self.addAlias(name, alias)
+
+        cat = info.elem.get('category')
+        if cat == 'struct':
+            self.addEntity(name, 'slink', elem=info.elem)
+
+        elif cat == 'union':
+            # TODO: is this right?
+            self.addEntity(name, 'slink', elem=info.elem)
+
+        elif cat == 'enum':
+            self.addEntity(
+                name, 'elink', elem=info.elem)
+
+        elif cat == 'handle':
+            self.addEntity(name, 'slink', elem=info.elem,
+                           category='handles')
+
+        elif cat == 'bitmask':
+            self.addEntity(
+                name, 'tlink', elem=info.elem, category='flags')
+
+        elif cat == 'basetype':
+            self.addEntity(name, 'basetype',
+                           elem=info.elem)
+
+        elif cat == 'define':
+            self.addEntity(name, 'dlink', elem=info.elem)
+
+        elif cat == 'funcpointer':
+            self.addEntity(name, 'tlink', elem=info.elem)
+
+        elif cat == 'include':
+            # skip
+            return
+
+        elif cat is None:
+            self.addEntity(name, 'code', elem=info.elem, generates=False)
+
+        else:
+            raise RuntimeError('unrecognized category {}'.format(cat))
+
+    def handleCommand(self, name, info):
+        """Add entities, if appropriate, for an item in registry.cmddict.
+
+        Called at construction for every name, info in registry.cmddict.items().
+        Calls self.addEntity() accordingly.
+        """
+        self.addEntity(name, 'flink', elem=info.elem,
+                       category='commands', directory='protos')
+
+    def handleExtension(self, name, info):
+        """Add entities, if appropriate, for an item in registry.extdict.
+
+        Called at construction for every name, info in registry.extdict.items().
+        Calls self.addEntity() accordingly.
+        """
+        if info.supported in self._supportExclusionSet:
+            # Don't populate with disabled extensions.
+            return
+
+        # Only get the protect strings and name from extensions
+
+        self.addEntity(name, None, category=EXTENSION_CATEGORY,
+                       generates=False)
+        protect = info.elem.get('protect')
+        if protect:
+            self.addEntity(protect, 'dlink',
+                           category='configdefines', generates=False)
+
+    def handleEnumValue(self, name, info):
+        """Add entities, if appropriate, for an item in registry.enumdict.
+
+        Called at construction for every name, info in registry.enumdict.items().
+        Calls self.addEntity() accordingly.
+        """
+        self.addEntity(name, 'ename', elem=info.elem,
+                       category='enumvalues', generates=False)
+
+    ###
+    # END of methods intended to be implemented, overridden, or extended in child classes!
+    ###
+
+    ###
+    # Accessors
+    ###
+    def findMacroAndEntity(self, macro, entity):
+        """Look up EntityData by macro and entity pair.
+
+        Does **not** resolve aliases."""
+        return self._byMacroAndEntity.get((macro, entity))
+
+    def findEntity(self, entity):
+        """Look up EntityData by entity name (case-sensitive).
+
+        If it fails, it will try resolving aliases.
+        """
+        result = self._byEntity.get(entity)
+        if result:
+            return result
+
+        alias_set = self._aliasSetsByEntity.get(entity)
+        if alias_set:
+            for alias in alias_set:
+                if alias in self._byEntity:
+                    return self.findEntity(alias)
+
+            assert(not "Alias without main entry!")
+
+        return None
+
+    def findEntityCaseInsensitive(self, entity):
+        """Look up EntityData by entity name (case-insensitive).
+
+        Does **not** resolve aliases."""
+        return self._byLowercaseEntity.get(entity.lower())
+
+    def getMemberElems(self, commandOrStruct):
+        """Given a command or struct name, retrieve the ETree elements for each member/param.
+
+        Returns None if the entity is not found or doesn't have members/params.
+        """
+        data = self.findEntity(commandOrStruct)
+
+        if not data:
+            return None
+        if data.elem is None:
+            return None
+        if data.macro == 'slink':
+            tag = 'member'
+        else:
+            tag = 'param'
+        return data.elem.findall('.//{}'.format(tag))
+
+    def getMemberNames(self, commandOrStruct):
+        """Given a command or struct name, retrieve the names of each member/param.
+
+        Returns an empty list if the entity is not found or doesn't have members/params.
+        """
+        members = self.getMemberElems(commandOrStruct)
+        if not members:
+            return []
+        ret = []
+        for member in members:
+            name_tag = member.find('name')
+            if name_tag:
+                ret.append(name_tag.text)
+        return ret
+
+    def getEntityJson(self):
+        """Dump the internal entity dictionary to JSON for debugging."""
+        import json
+        d = {entity: _entityToDict(data)
+             for entity, data in self._byEntity.items()}
+        return json.dumps(d, sort_keys=True, indent=4)
+
+    def entityHasValidity(self, entity):
+        """Estimate if we expect to see a validity include for an entity name.
+
+        Returns None if the entity name is not known,
+        otherwise a boolean: True if a validity include is expected.
+
+        Related to Generator.isStructAlwaysValid.
+        """
+        data = self.findEntity(entity)
+        if not data:
+            return None
+
+        if entity in self.entities_without_validity:
+            return False
+
+        if data.category == 'protos':
+            # All protos have validity
+            return True
+
+        if data.category not in CATEGORIES_WITH_VALIDITY:
+            return False
+
+        # Handle structs here.
+        members = self.getMemberElems(entity)
+        if not members:
+            return None
+        for member in members:
+            member_name = getElemName(member)
+            member_type = member.find('type').text
+            member_category = member.get('category')
+
+            if member_name in ('next', 'type'):
+                return True
+
+            if member_type in ('void', 'char'):
+                return True
+
+            if member.get('noautovalidity'):
+                # Not generating validity for this member, skip it
+                continue
+
+            if member.get('len'):
+                # Array
+                return True
+
+            typetail = member.find('type').tail
+            if typetail and '*' in typetail:
+                # Pointer
+                return True
+
+            if member_category in ('handle', 'enum', 'bitmask'):
+                return True
+
+            if member.get('category') in ('struct', 'union') \
+                    and self.entityHasValidity(member_type):
+                # struct or union member - recurse
+                return True
+
+        # Got this far - no validity needed
+        return False
+
+    def entityGenerates(self, entity_name):
+        """Return True if the named entity generates include file(s)."""
+        return entity_name in self._generating_entities
+
+    @property
+    def generating_entities(self):
+        """Return a sequence of all generating entity names."""
+        return self._generating_entities.keys()
+
+    def shouldBeRecognized(self, macro, entity_name):
+        """Determine, based on the macro and the name provided, if we should expect to recognize the entity.
+
+        True if it is linked. Specific APIs may also provide additional cases where it is True."""
+        return self.isLinkedMacro(macro)
+
+    def likelyRecognizedEntity(self, entity_name):
+        """Guess (based on name prefix alone) if an entity is likely to be recognized."""
+        return entity_name.lower().startswith(self.name_prefix)
+
+    def isLinkedMacro(self, macro):
+        """Identify if a macro is considered a "linked" macro."""
+        return macro in self._linkedMacros
+
+    def isValidMacro(self, macro):
+        """Identify if a macro is known and valid."""
+        if macro not in self._categoriesByMacro:
+            return False
+
+        return macro not in NON_EXISTENT_MACROS
+
+    def getCategoriesForMacro(self, macro):
+        """Identify the categories associated with a (known, valid) macro."""
+        if macro in self._categoriesByMacro:
+            return self._categoriesByMacro[macro]
+        return None
+
+    def areAliases(self, first_entity_name, second_entity_name):
+        """Return true if the two entity names are equivalent (aliases of each other)."""
+        alias_set = self._aliasSetsByEntity.get(first_entity_name)
+        if not alias_set:
+            # If this assert fails, we have goofed in addAlias
+            assert(second_entity_name not in self._aliasSetsByEntity)
+
+            return False
+
+        return second_entity_name in alias_set
+
+    @property
+    def macros(self):
+        """Return the collection of all known entity-related markup macros."""
+        return self._categoriesByMacro.keys()
+
+    def childTypes(self, typename):
+        """Return the list of types specifying typename as their parent type."""
+        children = [childname
+                    for childname, entity in self._byEntity.items()
+                    if entity.elem is not None and entity.elem.get("parentstruct") == typename]
+        return children
+
+    ###
+    # Methods only used during initial setup/population of this data structure
+    ###
+    def addMacro(self, macro, categories, link=False):
+        """Add a single markup macro to the collection of categories by macro.
+
+        Also adds the macro to the set of linked macros if link=True.
+
+        If a macro has already been supplied to a call, later calls for that macro have no effect.
+        """
+        if macro in self._categoriesByMacro:
+            return
+        self._categoriesByMacro[macro] = categories
+        if link:
+            self._linkedMacros.add(macro)
+
+    def addMacros(self, letter, macroTypes, categories):
+        """Add markup macros associated with a leading letter to the collection of categories by macro.
+
+        Also, those macros created using 'link' in macroTypes will also be added to the set of linked macros.
+
+        Basically automates a number of calls to addMacro().
+        """
+        for macroType in macroTypes:
+            macro = letter + macroType
+            self.addMacro(macro, categories, link=(macroType == 'link'))
+
+    def addAlias(self, entityName, aliasName):
+        """Record that entityName is an alias for aliasName."""
+        # See if we already have something with this as the alias.
+        alias_set = self._aliasSetsByEntity.get(aliasName)
+        other_alias_set = self._aliasSetsByEntity.get(entityName)
+        if alias_set and other_alias_set:
+            # If this fails, we need to merge sets and update.
+            assert(alias_set is other_alias_set)
+
+        if not alias_set:
+            # Try looking by the other name.
+            alias_set = other_alias_set
+
+        if not alias_set:
+            # Nope, this is a new set.
+            alias_set = set()
+            self._aliasSets.append(alias_set)
+
+        # Add both names to the set
+        alias_set.add(entityName)
+        alias_set.add(aliasName)
+
+        # Associate the set with each name
+        self._aliasSetsByEntity[aliasName] = alias_set
+        self._aliasSetsByEntity[entityName] = alias_set
+
+    def addEntity(self, entityName, macro, category=None, elem=None,
+                  generates=None, directory=None, filename=None):
+        """Add an entity (command, structure type, enum, enum value, etc) in the database.
+
+        If an entityName has already been supplied to a call, later calls for that entityName have no effect.
+
+        Arguments:
+        entityName -- the name of the entity.
+        macro -- the macro (without the trailing colon) that should be used to refer to this entity.
+
+        Optional keyword arguments:
+        category -- If not manually specified, looked up based on the macro.
+        elem -- The ETree element associated with the entity in the registry XML.
+        generates -- Indicates whether this entity generates api and validity include files.
+                     Default depends on directory (or if not specified, category).
+        directory -- The directory that include files (under api/ and validity/) are generated in.
+                     If not specified (and generates is True), the default is the same as the category,
+                     which is almost always correct.
+        filename -- The relative filename (under api/ or validity/) where includes are generated for this.
+                    This only matters if generates is True (default). If not specified and generates is True,
+                    one will be generated based on directory and entityName.
+        """
+        # Probably dealt with in handleType(), but just in case it wasn't.
+        if elem is not None:
+            alias = elem.get('alias')
+            if alias:
+                self.addAlias(entityName, alias)
+
+        if entityName in self._byEntity:
+            # skip if already recorded.
+            return
+
+        # Look up category based on the macro, if category isn't specified.
+        if category is None:
+            category = self._categoriesByMacro.get(macro)[0]
+
+        if generates is None:
+            potential_dir = directory or category
+            generates = potential_dir in self._generated_dirs
+
+        # If directory isn't specified and this entity generates,
+        # the directory is the same as the category.
+        if directory is None and generates:
+            directory = category
+
+        # Don't generate a filename if this entity doesn't generate includes.
+        if filename is None and generates:
+            filename = f'{directory}/{entityName}.adoc'
+
+        data = EntityData(
+            entity=entityName,
+            macro=macro,
+            elem=elem,
+            filename=filename,
+            category=category,
+            directory=directory
+        )
+        if entityName.lower() not in self._byLowercaseEntity:
+            self._byLowercaseEntity[entityName.lower()] = []
+
+        self._byEntity[entityName] = data
+        self._byLowercaseEntity[entityName.lower()].append(data)
+        self._byMacroAndEntity[(macro, entityName)] = data
+        if generates and filename is not None:
+            self._generating_entities[entityName] = data
+
+    def __init__(self):
+        """Constructor: Do not extend or override.
+
+        Changing the behavior of other parts of this logic should be done by
+        implementing, extending, or overriding (as documented):
+
+        - Implement makeRegistry()
+        - Implement getNamePrefix()
+        - Implement getPlatformRequires()
+        - Override getSystemTypes()
+        - Override populateMacros()
+        - Override populateEntities()
+        - Extend handleType()
+        - Extend handleCommand()
+        - Extend handleExtension()
+        - Extend handleEnumValue()
+        """
+        # Internal data that we don't want consumers of the class touching for fear of
+        # breaking invariants
+        self._byEntity = {}
+        self._byLowercaseEntity = {}
+        self._byMacroAndEntity = {}
+        self._categoriesByMacro = {}
+        self._linkedMacros = set()
+        self._aliasSetsByEntity = {}
+        self._aliasSets = []
+
+        self._registry = None
+
+        # Retrieve from subclass, if overridden, then store locally.
+        self._supportExclusionSet = set(self.getExclusionSet())
+
+        # Entities that get a generated/api/category/entity.adoc file.
+        self._generating_entities = {}
+
+        # Name prefix members
+        self.name_prefix = self.getNamePrefix().lower()
+        self.mixed_case_name_prefix = self.name_prefix[:1].upper(
+        ) + self.name_prefix[1:]
+        # Regex string for the name prefix that is case-insensitive.
+        self.case_insensitive_name_prefix_pattern = ''.join(
+            ('[{}{}]'.format(c.upper(), c) for c in self.name_prefix))
+
+        self.platform_requires = self.getPlatformRequires()
+
+        self._generated_dirs = set(self.getGeneratedDirs())
+
+        # Note: Default impl requires self.mixed_case_name_prefix
+        self.entities_without_validity = set(self.getEntitiesWithoutValidity())
+
+        # TODO: Where should flags actually go? Not mentioned in the style guide.
+        # TODO: What about flag wildcards? There are a few such uses...
+
+        # Abstract method: subclass must implement to define macros for flags
+        self.populateMacros()
+
+        # Now, do default macro population
+        self._basicPopulateMacros()
+
+        # Abstract method: subclass must implement to add any "not from the registry" (and not system type)
+        # entities
+        self.populateEntities()
+
+        # Now, do default entity population
+        self._basicPopulateEntities(self.registry)
+
+    ###
+    # Methods only used internally during initial setup/population of this data structure
+    ###
+    @property
+    def registry(self):
+        """Return a Registry."""
+        if not self._registry:
+            self._registry = self.makeRegistry()
+        return self._registry
+
+    def _basicPopulateMacros(self):
+        """Contains calls to self.addMacro() and self.addMacros().
+
+        If you need to change any of these, do so in your override of populateMacros(),
+        which will be called first.
+        """
+        self.addMacro('basetype', ['basetypes'])
+        self.addMacro('code', ['code'])
+        self.addMacros('f', ['link', 'name', 'text'], ['protos'])
+        self.addMacros('s', ['link', 'name', 'text'], ['structs', 'handles'])
+        self.addMacros('e', ['link', 'name', 'text'], ['enums'])
+        self.addMacros('p', ['name', 'text'], ['parameter', 'member'])
+        self.addMacros('t', ['link', 'name'], ['funcpointers'])
+        self.addMacros('d', ['link', 'name'], ['defines', 'configdefines'])
+
+        for macro in NON_EXISTENT_MACROS:
+            # Still search for them
+            self.addMacro(macro, None)
+
+    def _basicPopulateEntities(self, registry):
+        """Contains typical calls to self.addEntity().
+
+        If you need to change any of these, do so in your override of populateEntities(),
+        which will be called first.
+        """
+        system_types = set(self.getSystemTypes())
+        for t in system_types:
+            self.addEntity(t, 'code', generates=False)
+
+        for name, info in registry.typedict.items():
+            if name in system_types:
+                # We already added these.
+                continue
+
+            requires = info.elem.get('requires')
+
+            if requires and not requires.lower().startswith(self.name_prefix):
+                # This is an externally-defined type, will skip it.
+                continue
+
+            # OK, we might actually add an entity here
+            self.handleType(name=name, info=info, requires=requires)
+
+        for name, info in registry.enumdict.items():
+            self.handleEnumValue(name, info)
+
+        for name, info in registry.cmddict.items():
+            self.handleCommand(name, info)
+
+        for name, info in registry.extdict.items():
+            self.handleExtension(name, info)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/file_process.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/file_process.py
new file mode 100644
index 0000000..f0d4c60
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/file_process.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+"Utilities for processing files."
+
+from pathlib import Path
+
+
+class LinewiseFileProcessor:
+    """A base class for code that processes an input file (or file handle) one line at a time."""
+
+    def __init__(self):
+        self._lines = []
+        self._line_num = 0
+        self._next_line = None
+        self._line = ''
+        self._filename = Path()
+
+    @property
+    def filename(self):
+        """The Path object of the currently processed file"""
+        return self._filename
+
+    @property
+    def relative_filename(self):
+        """The current file's Path relative to the current working directory"""
+        return self.filename.relative_to(Path('.').resolve())
+
+    @property
+    def line(self):
+        """The current line, including any trailing whitespace and the line ending."""
+        return self._line
+
+    @property
+    def line_number(self):
+        """Get 1-indexed line number."""
+        return self._line_num
+
+    @property
+    def line_rstripped(self):
+        """The current line without any trailing whitespace."""
+        if self.line is None:
+            return None
+        return self.line.rstrip()
+
+    @property
+    def trailing_whitespace(self):
+        """The trailing whitespace of the current line that gets removed when accessing rstrippedLine"""
+        non_whitespace_length = len(self.line_rstripped)
+        return self.line[non_whitespace_length:]
+
+    @property
+    def next_line(self):
+        """Peek at the next line, if any."""
+        return self._next_line
+
+    @property
+    def next_line_rstripped(self):
+        """Peek at the next line, if any, without any trailing whitespace."""
+        if self.next_line is None:
+            return None
+        return self.next_line.rstrip()
+
+    def get_preceding_line(self, relative_index=-1):
+        """Retrieve the line at an line number at the given relative index, if one exists. Returns None if there is no line there."""
+        if relative_index >= 0:
+            raise RuntimeError(
+                'relativeIndex must be negative, to retrieve a preceding line.')
+        if relative_index + self.line_number <= 0:
+            # There is no line at this index
+            return None
+        return self._lines[self.line_number + relative_index - 1]
+
+    def get_preceding_lines(self, num):
+        """Get *up to* the preceding num lines. Fewer may be returned if the requested number aren't available."""
+        return self._lines[- (num + 1):-1]
+
+    def process_line(self, line_num, line):
+        """Implement in your subclass to handle each new line."""
+        raise NotImplementedError
+
+    def _process_file_handle(self, file_handle):
+        # These are so we can process one line earlier than we're actually iterating thru.
+        processing_line_num = None
+        processing_line = None
+
+        def do_process_line():
+            self._line_num = processing_line_num
+            self._line = processing_line
+            if processing_line is not None:
+                self._lines.append(processing_line)
+                self.process_line(processing_line_num, processing_line)
+
+        for line_num, line in enumerate(file_handle, 1):
+            self._next_line = line
+            do_process_line()
+            processing_line_num = line_num
+            processing_line = line
+
+        # Finally process the left-over line
+        self._next_line = None
+        do_process_line()
+
+    def process_file(self, filename, file_handle=None):
+        """Main entry point - call with a filename and optionally the file handle to read from."""
+        if isinstance(filename, str):
+            filename = Path(filename).resolve()
+
+        self._filename = filename
+
+        if file_handle:
+            self._process_file_handle(file_handle)
+        else:
+            with self._filename.open('r', encoding='utf-8') as f:
+                self._process_file_handle(f)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/html_printer.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/html_printer.py
new file mode 100644
index 0000000..3ec87af
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/html_printer.py
@@ -0,0 +1,436 @@
+"""Defines HTMLPrinter, a BasePrinter subclass for a single-page HTML results file."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+import html
+import re
+from collections import namedtuple
+
+from .base_printer import BasePrinter, getColumn
+from .shared import (MessageContext, MessageType, generateInclude,
+                     getHighlightedRange)
+
+# Bootstrap styles (for constructing CSS class names) associated with MessageType values.
+MESSAGE_TYPE_STYLES = {
+    MessageType.ERROR: 'danger',
+    MessageType.WARNING: 'warning',
+    MessageType.NOTE: 'secondary'
+}
+
+
+# HTML Entity for a little emoji-icon associated with MessageType values.
+MESSAGE_TYPE_ICONS = {
+    MessageType.ERROR: '&#x2297;',  # makeIcon('times-circle'),
+    MessageType.WARNING: '&#9888;',  # makeIcon('exclamation-triangle'),
+    MessageType.NOTE: '&#x2139;'  # makeIcon('info-circle')
+}
+
+LINK_ICON = '&#128279;'  # link icon
+
+
+class HTMLPrinter(BasePrinter):
+    """Implementation of BasePrinter for generating diagnostic reports in HTML format.
+
+    Generates a single file containing neatly-formatted messages.
+
+    The HTML file loads Bootstrap 4 as well as 'prism' syntax highlighting from CDN.
+    """
+
+    def __init__(self, filename):
+        """Construct by opening the file."""
+        self.f = open(filename, 'w', encoding='utf-8')
+        self.f.write("""<!doctype html>
+        <html lang="en"><head>
+        <meta charset="utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/themes/prism.min.css" integrity="sha256-N1K43s+8twRa+tzzoF3V8EgssdDiZ6kd9r8Rfgg8kZU=" crossorigin="anonymous" />
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/plugins/line-numbers/prism-line-numbers.min.css" integrity="sha256-Afz2ZJtXw+OuaPX10lZHY7fN1+FuTE/KdCs+j7WZTGc=" crossorigin="anonymous" />
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/plugins/line-highlight/prism-line-highlight.min.css" integrity="sha256-FFGTaA49ZxFi2oUiWjxtTBqoda+t1Uw8GffYkdt9aco=" crossorigin="anonymous" />
+        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
+        <style>
+        pre {
+            overflow-x: scroll;
+            white-space: nowrap;
+        }
+        </style>
+        <title>check_spec_links results</title>
+        </head>
+        <body>
+        <div class="container">
+        <h1><code>check_spec_links.py</code> Scan Results</h1>
+        """)
+        #
+        self.filenameTransformer = re.compile(r'[^\w]+')
+        self.fileRange = {}
+        self.fileLines = {}
+        self.backLink = namedtuple(
+            'BackLink', ['lineNum', 'col', 'end_col', 'target', 'tooltip', 'message_type'])
+        self.fileBackLinks = {}
+
+        self.nextAnchor = 0
+        super().__init__()
+
+    def close(self):
+        """Write the tail end of the file and close it."""
+        self.f.write("""
+        </div>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/prism.min.js" integrity="sha256-jc6y1s/Y+F+78EgCT/lI2lyU7ys+PFYrRSJ6q8/R8+o=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/plugins/keep-markup/prism-keep-markup.min.js" integrity="sha256-mP5i3m+wTxxOYkH+zXnKIG5oJhXLIPQYoiicCV1LpkM=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/components/prism-asciidoc.min.js" integrity="sha256-NHPE1p3VBIdXkmfbkf/S0hMA6b4Ar4TAAUlR+Rlogoc=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/plugins/line-numbers/prism-line-numbers.min.js" integrity="sha256-JfF9MVfGdRUxzT4pecjOZq6B+F5EylLQLwcQNg+6+Qk=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/plugins/line-highlight/prism-line-highlight.min.js" integrity="sha256-DEl9ZQE+lseY13oqm2+mlUr+sVI18LG813P+kzzIm8o=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.slim.min.js" integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=" crossorigin="anonymous"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/esm/popper.min.js" integrity="sha256-T0gPN+ySsI9ixTd/1ciLl2gjdLJLfECKvkQjJn98lOs=" crossorigin="anonymous"></script>
+        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
+        <script>
+        $(function () {
+            $('[data-toggle="tooltip"]').tooltip();
+            function autoExpand() {
+                var hash = window.location.hash;
+                if (!hash) {
+                    return;
+                }
+                $(hash).parents().filter('.collapse').collapse('show');
+            }
+            window.addEventListener('hashchange', autoExpand);
+            $(document).ready(autoExpand);
+            $('.accordion').on('shown.bs.collapse', function(e) {
+                e.target.parentNode.scrollIntoView();
+            })
+        })
+        </script>
+        </body></html>
+        """)
+        self.f.close()
+
+    ###
+    # Output methods: these all write to the HTML file.
+    def outputResults(self, checker, broken_links=True,
+                      missing_includes=False):
+        """Output the full results of a checker run.
+
+        Includes the diagnostics, broken links (if desired),
+        missing includes (if desired), and excerpts of all files with diagnostics.
+        """
+        self.output(checker)
+        self.outputBrokenAndMissing(
+            checker, broken_links=broken_links, missing_includes=missing_includes)
+
+        self.f.write("""
+        <div class="container">
+        <h2>Excerpts of referenced files</h2>""")
+        for fn in self.fileRange:
+            self.outputFileExcerpt(fn)
+        self.f.write('</div><!-- .container -->\n')
+
+    def outputChecker(self, checker):
+        """Output the contents of a MacroChecker object.
+
+        Starts and ends the accordion populated by outputCheckerFile().
+        """
+        self.f.write(
+            '<div class="container"><h2>Per-File Warnings and Errors</h2>\n')
+        self.f.write('<div class="accordion" id="fileAccordion">\n')
+        super(HTMLPrinter, self).outputChecker(checker)
+        self.f.write("""</div><!-- #fileAccordion -->
+        </div><!-- .container -->\n""")
+
+    def outputCheckerFile(self, fileChecker):
+        """Output the contents of a MacroCheckerFile object.
+
+        Stashes the lines of the file for later excerpts,
+        and outputs any diagnostics in an accordion card.
+        """
+        # Save lines for later
+        self.fileLines[fileChecker.filename] = fileChecker.lines
+
+        if not fileChecker.numDiagnostics():
+            return
+
+        self.f.write("""
+        <div class="card">
+        <div class="card-header" id="{id}-file-heading">
+        <div class="row">
+        <div class="col">
+        <button data-target="#collapse-{id}" class="btn btn-link btn-primary mb-0 collapsed" type="button" data-toggle="collapse" aria-expanded="false" aria-controls="collapse-{id}">
+        {relativefn}
+        </button>
+        </div>
+        """.format(id=self.makeIdentifierFromFilename(fileChecker.filename), relativefn=html.escape(self.getRelativeFilename(fileChecker.filename))))
+        self.f.write('<div class="col-1">')
+        warnings = fileChecker.numMessagesOfType(MessageType.WARNING)
+        if warnings > 0:
+            self.f.write("""<span class="badge badge-warning" data-toggle="tooltip" title="{num} warnings in this file">
+                            {icon}
+                            {num}<span class="sr-only"> warnings</span></span>""".format(num=warnings, icon=MESSAGE_TYPE_ICONS[MessageType.WARNING]))
+        self.f.write('</div>\n<div class="col-1">')
+        errors = fileChecker.numMessagesOfType(MessageType.ERROR)
+        if errors > 0:
+            self.f.write("""<span class="badge badge-danger" data-toggle="tooltip" title="{num} errors in this file">
+                            {icon}
+                            {num}<span class="sr-only"> errors</span></span>""".format(num=errors, icon=MESSAGE_TYPE_ICONS[MessageType.ERROR]))
+        self.f.write("""
+        </div><!-- .col-1 -->
+        </div><!-- .row -->
+        </div><!-- .card-header -->
+        <div id="collapse-{id}" class="collapse" aria-labelledby="{id}-file-heading" data-parent="#fileAccordion">
+        <div class="card-body">
+        """.format(id=self.makeIdentifierFromFilename(fileChecker.filename)))
+        super(HTMLPrinter, self).outputCheckerFile(fileChecker)
+
+        self.f.write("""
+        </div><!-- .card-body -->
+        </div><!-- .collapse -->
+        </div><!-- .card -->
+        <!-- ..................................... -->
+        """)
+
+    def outputMessage(self, msg):
+        """Output a Message."""
+        anchor = self.getUniqueAnchor()
+
+        self.recordUsage(msg.context,
+                         linkBackTarget=anchor,
+                         linkBackTooltip='{}: {} [...]'.format(
+                             msg.message_type, msg.message[0]),
+                         linkBackType=msg.message_type)
+
+        self.f.write("""
+        <div class="card">
+        <div class="card-body">
+        <h5 class="card-header bg bg-{style}" id="{anchor}">{icon} {t} Line {lineNum}, Column {col} (-{arg})</h5>
+        <p class="card-text">
+        """.format(
+            anchor=anchor,
+            icon=MESSAGE_TYPE_ICONS[msg.message_type],
+            style=MESSAGE_TYPE_STYLES[msg.message_type],
+            t=self.formatBrief(msg.message_type),
+            lineNum=msg.context.lineNum,
+            col=getColumn(msg.context),
+            arg=msg.message_id.enable_arg()))
+        self.f.write(self.formatContext(msg.context))
+        self.f.write('<br/>')
+        for line in msg.message:
+            self.f.write(html.escape(line))
+            self.f.write('<br />\n')
+        self.f.write('</p>\n')
+        if msg.see_also:
+            self.f.write('<p>See also:</p><ul>\n')
+            for see in msg.see_also:
+                if isinstance(see, MessageContext):
+                    self.f.write(
+                        '<li>{}</li>\n'.format(self.formatContext(see)))
+                    self.recordUsage(see,
+                                     linkBackTarget=anchor,
+                                     linkBackType=MessageType.NOTE,
+                                     linkBackTooltip='see-also associated with {} at {}'.format(msg.message_type, self.formatContextBrief(see)))
+                else:
+                    self.f.write('<li>{}</li>\n'.format(self.formatBrief(see)))
+            self.f.write('</ul>')
+        if msg.replacement is not None:
+            self.f.write(
+                '<div class="alert alert-primary">Hover the highlight text to view suggested replacement.</div>')
+        if msg.fix is not None:
+            self.f.write(
+                '<div class="alert alert-info">Note: Auto-fix available.</div>')
+        if msg.script_location:
+            self.f.write(
+                '<p>Message originated at <code>{}</code></p>'.format(msg.script_location))
+        self.f.write('<pre class="line-numbers language-asciidoc" data-start="{}"><code>'.format(
+            msg.context.lineNum))
+        highlightStart, highlightEnd = getHighlightedRange(msg.context)
+        self.f.write(html.escape(msg.context.line[:highlightStart]))
+        self.f.write(
+            '<span class="border border-{}"'.format(MESSAGE_TYPE_STYLES[msg.message_type]))
+        if msg.replacement is not None:
+            self.f.write(
+                ' data-toggle="tooltip" title="{}"'.format(msg.replacement))
+        self.f.write('>')
+        self.f.write(html.escape(
+            msg.context.line[highlightStart:highlightEnd]))
+        self.f.write('</span>')
+        self.f.write(html.escape(msg.context.line[highlightEnd:]))
+        self.f.write('</code></pre></div></div>')
+
+    def outputBrokenLinks(self, checker, broken):
+        """Output a table of broken links.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        self.f.write("""
+        <div class="container">
+        <h2>Missing Referenced API Includes</h2>
+        <p>Items here have been referenced by a linking macro, so these are all broken links in the spec!</p>
+        <table class="table table-striped">
+        <thead>
+        <th scope="col">Add line to include this file</th>
+        <th scope="col">or add this macro instead</th>
+        <th scope="col">Links to this entity</th></thead>
+        """)
+
+        for entity_name, uses in sorted(broken.items()):
+            category = checker.findEntity(entity_name).category
+            anchor = self.getUniqueAnchor()
+            asciidocAnchor = '[[{}]]'.format(entity_name)
+            include = generateInclude(dir_traverse='../../generated/',
+                                      generated_type='api',
+                                      category=category,
+                                      entity=entity_name)
+            self.f.write("""
+            <tr id={}>
+            <td><code class="text-dark language-asciidoc">{}</code></td>
+            <td><code class="text-dark">{}</code></td>
+            <td><ul class="list-inline">
+            """.format(anchor, include, asciidocAnchor))
+            for context in uses:
+                self.f.write(
+                    '<li class="list-inline-item">{}</li>'.format(self.formatContext(context, MessageType.NOTE)))
+                self.recordUsage(
+                    context,
+                    linkBackTooltip='Link broken in spec: {} not seen'.format(
+                        include),
+                    linkBackTarget=anchor,
+                    linkBackType=MessageType.NOTE)
+            self.f.write("""</ul></td></tr>""")
+        self.f.write("""</table></div>""")
+
+    def outputMissingIncludes(self, checker, missing):
+        """Output a table of missing includes.
+
+        Called by self.outputBrokenAndMissing() if requested.
+        """
+        self.f.write("""
+        <div class="container">
+        <h2>Missing Unreferenced API Includes</h2>
+        <p>These items are expected to be generated in the spec build process, but aren't included.
+        However, as they also are not referenced by any linking macros, they aren't broken links - at worst they are undocumented entities,
+        at best they are errors in <code>check_spec_links.py</code> logic computing which entities get generated files.</p>
+        <table class="table table-striped">
+        <thead>
+        <th scope="col">Add line to include this file</th>
+        <th scope="col">or add this macro instead</th>
+        """)
+
+        for entity in sorted(missing):
+            fn = checker.findEntity(entity).filename
+            anchor = '[[{}]]'.format(entity)
+            self.f.write("""
+            <tr>
+            <td><code class="text-dark">{filename}</code></td>
+            <td><code class="text-dark">{anchor}</code></td>
+            """.format(filename=fn, anchor=anchor))
+        self.f.write("""</table></div>""")
+
+    def outputFileExcerpt(self, filename):
+        """Output a card containing an excerpt of a file, sufficient to show locations of all diagnostics plus some context.
+
+        Called by self.outputResults().
+        """
+        self.f.write("""<div class="card">
+            <div class="card-header" id="heading-{id}"><h5 class="mb-0">
+            <button class="btn btn-link" type="button">
+            {fn}
+            </button></h5></div><!-- #heading-{id} -->
+            <div class="card-body">
+            """.format(id=self.makeIdentifierFromFilename(filename), fn=self.getRelativeFilename(filename)))
+        lines = self.fileLines[filename]
+        r = self.fileRange[filename]
+        self.f.write("""<pre class="line-numbers language-asciidoc line-highlight" id="excerpt-{id}" data-start="{start}"><code>""".format(
+            id=self.makeIdentifierFromFilename(filename),
+            start=r.start))
+        for lineNum, line in enumerate(
+                lines[(r.start - 1):(r.stop - 1)], r.start):
+            # self.f.write(line)
+            lineLinks = [x for x in self.fileBackLinks[filename]
+                         if x.lineNum == lineNum]
+            for col, char in enumerate(line):
+                colLinks = (x for x in lineLinks if x.col == col)
+                for link in colLinks:
+                    # TODO right now the syntax highlighting is interfering with the link! so the link-generation is commented out,
+                    # only generating the emoji icon.
+
+                    # self.f.write('<a href="#{target}" title="{title}" data-toggle="tooltip" data-container="body">{icon}'.format(
+                    # target=link.target, title=html.escape(link.tooltip),
+                    # icon=MESSAGE_TYPE_ICONS[link.message_type]))
+                    self.f.write(MESSAGE_TYPE_ICONS[link.message_type])
+                    self.f.write('<span class="sr-only">Cross reference: {t} {title}</span>'.format(
+                        title=html.escape(link.tooltip, False), t=link.message_type))
+
+                    # self.f.write('</a>')
+
+                # Write the actual character
+                self.f.write(html.escape(char))
+            self.f.write('\n')
+
+        self.f.write('</code></pre>')
+        self.f.write('</div><!-- .card-body -->\n')
+        self.f.write('</div><!-- .card -->\n')
+
+    def outputFallback(self, obj):
+        """Output some text in a general way."""
+        self.f.write(obj)
+
+    ###
+    # Format method: return a string.
+    def formatContext(self, context, message_type=None):
+        """Format a message context in a verbose way."""
+        if message_type is None:
+            icon = LINK_ICON
+        else:
+            icon = MESSAGE_TYPE_ICONS[message_type]
+        return 'In context: <a href="{href}">{icon}{relative}:{lineNum}:{col}</a>'.format(
+            href=self.getAnchorLinkForContext(context),
+            icon=icon,
+            # id=self.makeIdentifierFromFilename(context.filename),
+            relative=self.getRelativeFilename(context.filename),
+            lineNum=context.lineNum,
+            col=getColumn(context))
+
+    ###
+    # Internal methods: not mandated by parent class.
+    def recordUsage(self, context, linkBackTooltip=None,
+                    linkBackTarget=None, linkBackType=MessageType.NOTE):
+        """Internally record a 'usage' of something.
+
+        Increases the range of lines that are included in the excerpts,
+        and records back-links if appropriate.
+        """
+        BEFORE_CONTEXT = 6
+        AFTER_CONTEXT = 3
+        # Clamp because we need accurate start line number to make line number
+        # display right
+        start = max(1, context.lineNum - BEFORE_CONTEXT)
+        stop = context.lineNum + AFTER_CONTEXT + 1
+        if context.filename not in self.fileRange:
+            self.fileRange[context.filename] = range(start, stop)
+            self.fileBackLinks[context.filename] = []
+        else:
+            oldRange = self.fileRange[context.filename]
+            self.fileRange[context.filename] = range(
+                min(start, oldRange.start), max(stop, oldRange.stop))
+
+        if linkBackTarget is not None:
+            start_col, end_col = getHighlightedRange(context)
+            self.fileBackLinks[context.filename].append(self.backLink(
+                lineNum=context.lineNum, col=start_col, end_col=end_col,
+                target=linkBackTarget, tooltip=linkBackTooltip,
+                message_type=linkBackType))
+
+    def makeIdentifierFromFilename(self, fn):
+        """Compute an acceptable HTML anchor name from a filename."""
+        return self.filenameTransformer.sub('_', self.getRelativeFilename(fn))
+
+    def getAnchorLinkForContext(self, context):
+        """Compute the anchor link to the excerpt for a MessageContext."""
+        return '#excerpt-{}.{}'.format(
+            self.makeIdentifierFromFilename(context.filename), context.lineNum)
+
+    def getUniqueAnchor(self):
+        """Create and return a new unique string usable as a link anchor."""
+        anchor = 'anchor-{}'.format(self.nextAnchor)
+        self.nextAnchor += 1
+        return anchor
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker.py
new file mode 100644
index 0000000..a8a75aa
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker.py
@@ -0,0 +1,220 @@
+"""Provides the MacroChecker class."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+from io import StringIO
+import re
+
+
+class MacroChecker(object):
+    """Perform and track checking of one or more files in an API spec.
+
+    This does not necessarily need to be subclassed per-API: it is sufficiently
+    parameterized in the constructor for expected usage.
+    """
+
+    def __init__(self, enabled_messages, entity_db,
+                 macro_checker_file_type, root_path):
+        """Construct an object that tracks checking one or more files in an API spec.
+
+        enabled_messages -- a set of MessageId that should be enabled.
+        entity_db -- an object of a EntityDatabase subclass for this API.
+        macro_checker_file_type -- Type to instantiate to create the right
+                                   MacroCheckerFile subclass for this API.
+        root_path -- A Path object for the root of this repository.
+        """
+        self.enabled_messages = enabled_messages
+        self.entity_db = entity_db
+        self.macro_checker_file_type = macro_checker_file_type
+        self.root_path = root_path
+
+        self.files = []
+
+        self.refpages = set()
+
+        # keys: entity names. values: MessageContext
+        self.links = {}
+        self.apiIncludes = {}
+        self.validityIncludes = {}
+        self.headings = {}
+
+        # Regexes that are members because they depend on the name prefix.
+
+        # apiPrefix, followed by some word characters or * as many times as desired,
+        # NOT followed by >> and NOT preceded by one of the characters in that first character class.
+        # (which distinguish "names being used somewhere other than prose").
+        self.suspected_missing_macro_re = re.compile(
+            r'\b(?<![-=:/[\.`+,])(?P<entity_name>{}[\w*]+)\b(?!>>)'.format(
+                self.entity_db.case_insensitive_name_prefix_pattern)
+        )
+        self.heading_command_re = re.compile(
+            r'=+ (?P<command>{}[\w]+)'.format(self.entity_db.name_prefix)
+        )
+
+        macros_pattern = '|'.join((re.escape(macro)
+                                   for macro in self.entity_db.macros))
+        # the "formatting" group is to strip matching */**/_/__
+        # surrounding an entire macro.
+        self.macro_re = re.compile(
+            r'(?P<formatting>\**|_*)(?P<macro>{}):(?P<entity_name>[\w*]+((?P<subscript>[\[][^\]]*[\]]))?)(?P=formatting)'.format(macros_pattern))
+
+    def haveLinkTarget(self, entity):
+        """Report if we have parsed an API include (or heading) for an entity.
+
+        None if there is no entity with that name.
+        """
+        if not self.findEntity(entity):
+            return None
+        if entity in self.apiIncludes:
+            return True
+        return entity in self.headings
+
+    def hasFixes(self):
+        """Report if any files have auto-fixes."""
+        for f in self.files:
+            if f.hasFixes():
+                return True
+        return False
+
+    def addLinkToEntity(self, entity, context):
+        """Record seeing a link to an entity's docs from a context."""
+        if entity not in self.links:
+            self.links[entity] = []
+        self.links[entity].append(context)
+
+    def seenRefPage(self, entity):
+        """Check if a ref-page markup block has been seen for an entity."""
+        return entity in self.refpages
+
+    def addRefPage(self, entity):
+        """Record seeing a ref-page markup block for an entity."""
+        self.refpages.add(entity)
+
+    def findMacroAndEntity(self, macro, entity):
+        """Look up EntityData by macro and entity pair.
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.findMacroAndEntity(macro, entity)
+
+    def findEntity(self, entity):
+        """Look up EntityData by entity name (case-sensitive).
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.findEntity(entity)
+
+    def findEntityCaseInsensitive(self, entity):
+        """Look up EntityData by entity name (case-insensitive).
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.findEntityCaseInsensitive(entity)
+
+    def getMemberNames(self, commandOrStruct):
+        """Given a command or struct name, retrieve the names of each member/param.
+
+        Returns an empty list if the entity is not found or doesn't have members/params.
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.getMemberNames(commandOrStruct)
+
+    def likelyRecognizedEntity(self, entity_name):
+        """Guess (based on name prefix alone) if an entity is likely to be recognized.
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.likelyRecognizedEntity(entity_name)
+
+    def isLinkedMacro(self, macro):
+        """Identify if a macro is considered a "linked" macro.
+
+        Forwards to the EntityDatabase.
+        """
+        return self.entity_db.isLinkedMacro(macro)
+
+    def processFile(self, filename):
+        """Parse an .adoc file belonging to the spec and check it for errors."""
+        class FileStreamMaker(object):
+            def __init__(self, filename):
+                self.filename = filename
+
+            def make_stream(self):
+                return open(self.filename, 'r', encoding='utf-8')
+
+        f = self.macro_checker_file_type(self, filename, self.enabled_messages,
+                                         FileStreamMaker(filename))
+        f.process()
+        self.files.append(f)
+
+    def processString(self, s):
+        """Process a string as if it were a spec file.
+
+        Used for testing purposes.
+        """
+        if "\n" in s.rstrip():
+            # remove leading spaces from each line to allow easier
+            # block-quoting in tests
+            s = "\n".join((line.lstrip() for line in s.split("\n")))
+            # fabricate a "filename" that will display better.
+            filename = "string{}\n****START OF STRING****\n{}\n****END OF STRING****\n".format(
+                len(self.files), s.rstrip())
+
+        else:
+            filename = "string{}: {}".format(
+                len(self.files), s.rstrip())
+
+        class StringStreamMaker(object):
+            def __init__(self, string):
+                self.string = string
+
+            def make_stream(self):
+                return StringIO(self.string)
+
+        f = self.macro_checker_file_type(self, filename, self.enabled_messages,
+                                         StringStreamMaker(s))
+        f.process()
+        self.files.append(f)
+        return f
+
+    def numDiagnostics(self):
+        """Return the total number of diagnostics (warnings and errors) over all the files processed."""
+        return sum((f.numDiagnostics() for f in self.files))
+
+    def numErrors(self):
+        """Return the total number of errors over all the files processed."""
+        return sum((f.numErrors() for f in self.files))
+
+    def getMissingUnreferencedApiIncludes(self):
+        """Return the unreferenced entity names that we expected to see an API include or link target for, but did not.
+
+        Counterpart to getBrokenLinks(): This method returns the entity names
+        that were not used in a linking macro (and thus wouldn't create a broken link),
+        but were nevertheless expected and not seen.
+        """
+        return (entity for entity in self.entity_db.generating_entities
+                if (not self.haveLinkTarget(entity)) and entity not in self.links)
+
+    def getBrokenLinks(self):
+        """Return the entity names and usage contexts that we expected to see an API include or link target for, but did not.
+
+        Counterpart to getMissingUnreferencedApiIncludes(): This method returns only the
+        entity names that were used in a linking macro (and thus create a broken link),
+        but were not seen. The values of the dictionary are a list of MessageContext objects
+        for each linking macro usage for this entity name.
+        """
+        return {entity: contexts for entity, contexts in self.links.items()
+                if self.entity_db.entityGenerates(entity) and not self.haveLinkTarget(entity)}
+
+    def getMissingRefPages(self):
+        """Return a list of entities that we expected, but did not see, a ref page block for.
+
+        The heuristics here are rather crude: we expect a ref page for every generating entry.
+        """
+        return (entity for entity in sorted(self.entity_db.generating_entities)
+                if entity not in self.refpages)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker_file.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker_file.py
new file mode 100644
index 0000000..ec73062
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/macro_checker_file.py
@@ -0,0 +1,1682 @@
+"""Provides MacroCheckerFile, a subclassable type that validates a single file in the spec."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+import logging
+import re
+from collections import OrderedDict, namedtuple
+from enum import Enum
+from inspect import currentframe
+
+from .shared import (AUTO_FIX_STRING, CATEGORIES_WITH_VALIDITY,
+                     EXTENSION_CATEGORY, NON_EXISTENT_MACROS, EntityData,
+                     Message, MessageContext, MessageId, MessageType,
+                     generateInclude, toNameAndLine)
+
+# Code blocks may start and end with any number of ----
+CODE_BLOCK_DELIM = '----'
+
+# Mostly for ref page blocks, but also used elsewhere?
+REF_PAGE_LIKE_BLOCK_DELIM = '--'
+
+# For insets/blocks like the implicit valid usage
+# TODO think it must start with this - does it have to be exactly this?
+BOX_BLOCK_DELIM = '****'
+
+
+INTERNAL_PLACEHOLDER = re.compile(
+    r'(?P<delim>__+)([a-zA-Z]+)(?P=delim)'
+)
+
+# Matches any include line.
+# Used to check for a leading path attribute.
+INCLUDE_PATH_ATTRIBUTE = re.compile(
+    r'include::(\{(?P<path_attribute>[a-z]+)\})?.*\[\]')
+
+allowed_path_attributes = {
+    '{appendices}',
+    '{chapters}',
+    '{config}',
+    '{generated}',
+    '{promoted}',
+    '{style}',
+}
+
+# Matches a generated (api or validity) include line.
+INCLUDE = re.compile(
+    r'include::(?P<directory_traverse>((../){1,4}|\{generated\}/)(generated/)?)(?P<generated_type>(api|validity))/(?P<category>\w+)/(?P<entity_name>[^./]+).adoc[\[][\]]')
+
+# Matches an [[AnchorLikeThis]]
+ANCHOR = re.compile(r'\[\[(?P<entity_name>[^\]]+)\]\]')
+
+# Looks for flink:foo:: or slink::foo:: at the end of string:
+# used to detect explicit pname context.
+PRECEDING_MEMBER_REFERENCE = re.compile(
+    r'\b(?P<macro>[fs](text|link)):(?P<entity_name>[\w*]+)::$')
+
+# Matches something like slink:foo::pname:bar as well as
+# the under-marked-up slink:foo::bar.
+MEMBER_REFERENCE = re.compile(
+    r'\b(?P<first_part>(?P<scope_macro>[fs](text|link)):(?P<scope>[\w*]+))(?P<double_colons>::)(?P<second_part>(?P<member_macro>pname:?)(?P<entity_name>[\w]+))\b'
+)
+
+# Matches if a string ends while a link is still "open".
+# (first half of a link being broken across two lines,
+# or containing our interested area when matched against the text preceding).
+# Used to skip checking in some places.
+OPEN_LINK = re.compile(
+    r'.*(?<!`)<<[^>]*$'
+)
+
+# Matches if a string begins and is followed by a link "close" without a matching open.
+# (second half of a link being broken across two lines)
+# Used to skip checking in some places.
+CLOSE_LINK = re.compile(
+    r'[^<]*>>.*$'
+)
+
+# Matches if a line should be skipped without further considering.
+# Matches lines starting with:
+# - `ifdef:`
+# - `endif:`
+# - `todo` (followed by something matching \b, like : or (. capitalization ignored)
+SKIP_LINE = re.compile(
+    r'^(ifdef:)|(endif:)|([tT][oO][dD][oO]\b).*'
+)
+
+# Matches the whole inside of a refpage tag.
+BRACKETS = re.compile(r'\[(?P<tags>.*)\]')
+
+# Matches a key='value' pair from a ref page tag.
+REF_PAGE_ATTRIB = re.compile(
+    r"(?P<key>[a-z]+)='(?P<value>[^'\\]*(?:\\.[^'\\]*)*)'")
+
+# Exceptions to:
+# error: Definition of link target {} with macro etext (used for category enums) does not exist. (-Wwrong_macro)
+# typically caused by using Vulkan-only enums in Vulkan SC blocks with "etext", or because they
+# are suffixed differently.
+CHECK_UNRECOGNIZED_ETEXT_EXCEPTIONS = (
+    'VK_COLORSPACE_SRGB_NONLINEAR_KHR',
+    'VK_COLOR_SPACE_DCI_P3_LINEAR_EXT',
+    'VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT',
+    'VK_STENCIL_FRONT_AND_BACK',
+    'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES',
+    'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES',
+    'VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT',
+)
+
+# Exceptions to:
+# warning: Definition of link target {} with macro ename (used for category enums) does not exist. (-Wbad_enumerant)
+# typically caused by Vulkan SC enums not being recognized in Vulkan build
+CHECK_UNRECOGNIZED_ENAME_EXCEPTIONS = (
+    'VK_ERROR_INVALID_PIPELINE_CACHE_DATA',
+    'VK_ERROR_NO_PIPELINE_MATCH',
+    'VK_ERROR_VALIDATION_FAILED',
+    'VK_MEMORY_HEAP_SEU_SAFE_BIT',
+    'VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT',
+    'VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT',
+    'VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE',
+)
+
+class Attrib(Enum):
+    """Attributes of a ref page."""
+
+    REFPAGE = 'refpage'
+    DESC = 'desc'
+    TYPE = 'type'
+    ALIAS = 'alias'
+    XREFS = 'xrefs'
+    ANCHOR = 'anchor'
+
+
+VALID_REF_PAGE_ATTRIBS = set(
+    (e.value for e in Attrib))
+
+AttribData = namedtuple('AttribData', ['match', 'key', 'value'])
+
+
+def makeAttribFromMatch(match):
+    """Turn a match of REF_PAGE_ATTRIB into an AttribData value."""
+    return AttribData(match=match, key=match.group(
+        'key'), value=match.group('value'))
+
+
+def parseRefPageAttribs(line):
+    """Parse a ref page tag into a dictionary of attribute_name: AttribData."""
+    return {m.group('key'): makeAttribFromMatch(m)
+            for m in REF_PAGE_ATTRIB.finditer(line)}
+
+
+def regenerateIncludeFromMatch(match, generated_type):
+    """Create an include directive from an INCLUDE match and a (new or replacement) generated_type."""
+    return generateInclude(
+        match.group('directory_traverse'),
+        generated_type,
+        match.group('category'),
+        match.group('entity_name'))
+
+
+BlockEntry = namedtuple(
+    'BlockEntry', ['delimiter', 'context', 'block_type', 'refpage'])
+
+
+class BlockType(Enum):
+    """Enumeration of the various distinct block types known."""
+    CODE = 'code'
+    REF_PAGE_LIKE = 'ref-page-like'  # with or without a ref page tag before
+    BOX = 'box'
+
+    @classmethod
+    def lineToBlockType(self, line):
+        """Return a BlockType if the given line is a block delimiter.
+
+        Returns None otherwise.
+        """
+        if line == REF_PAGE_LIKE_BLOCK_DELIM:
+            return BlockType.REF_PAGE_LIKE
+        if line.startswith(CODE_BLOCK_DELIM):
+            return BlockType.CODE
+        if line.startswith(BOX_BLOCK_DELIM):
+            return BlockType.BOX
+
+        return None
+
+
+def _pluralize(word, num):
+    if num == 1:
+        return word
+    if word.endswith('y'):
+        return word[:-1] + 'ies'
+    return word + 's'
+
+
+def _s_suffix(num):
+    """Simplify pluralization."""
+    if num > 1:
+        return 's'
+    return ''
+
+
+def shouldEntityBeText(entity, subscript):
+    """Determine if an entity name appears to use placeholders, wildcards, etc. and thus merits use of a *text macro.
+
+    Call with the entity and subscript groups from a match of MacroChecker.macro_re.
+    """
+    entity_only = entity
+    if subscript:
+        if subscript == '[]' or subscript == '[i]' or subscript.startswith(
+                '[_') or subscript.endswith('_]'):
+            return True
+        entity_only = entity[:-len(subscript)]
+
+    if ('*' in entity) or entity.startswith('_') or entity_only.endswith('_'):
+        return True
+
+    if INTERNAL_PLACEHOLDER.search(entity):
+        return True
+    return False
+
+
+class MacroCheckerFile(object):
+    """Object performing processing of a single AsciiDoctor file from a specification.
+
+    For testing purposes, may also process a string as if it were a file.
+    """
+
+    def __init__(self, checker, filename, enabled_messages, stream_maker):
+        """Construct a MacroCheckerFile object.
+
+        Typically called by MacroChecker.processFile or MacroChecker.processString().
+
+        Arguments:
+        checker -- A MacroChecker object.
+        filename -- A string to use in messages to refer to this checker, typically the file name.
+        enabled_messages -- A set() of MessageId values that should be considered "enabled" and thus stored.
+        stream_maker -- An object with a makeStream() method that returns a stream.
+        """
+        self.checker = checker
+        self.filename = filename
+        self.stream_maker = stream_maker
+        self.enabled_messages = enabled_messages
+        self.missing_validity_suppressions = set(
+            self.getMissingValiditySuppressions())
+
+        self.logger = logging.getLogger(__name__)
+        self.logger.addHandler(logging.NullHandler())
+
+        self.fixes = set()
+        self.messages = []
+
+        self.pname_data = None
+        self.pname_mentions = {}
+
+        self.refpage_includes = {}
+
+        self.lines = []
+
+        # For both of these:
+        # keys: entity name
+        # values: MessageContext
+        self.fs_api_includes = {}
+        self.validity_includes = {}
+
+        self.in_code_block = False
+        self.in_ref_page = False
+        self.prev_line_ref_page_tag = None
+        self.current_ref_page = None
+
+        # Stack of block-starting delimiters.
+        self.block_stack = []
+
+        # Regexes that are members because they depend on the name prefix.
+        self.suspected_missing_macro_re = self.checker.suspected_missing_macro_re
+        self.heading_command_re = self.checker.heading_command_re
+
+    ###
+    # Main process/checking methods, arranged roughly from largest scope to smallest scope.
+    ###
+
+    def process(self):
+        """Check the stream (file, string) created by the streammaker supplied to the constructor.
+
+        This is the top-level method for checking a spec file.
+        """
+        self.logger.info("processing file %s", self.filename)
+
+        # File content checks - performed line-by-line
+        with self.stream_maker.make_stream() as f:
+            # Iterate through lines, calling processLine on each.
+            for lineIndex, line in enumerate(f):
+                trimmedLine = line.rstrip()
+                self.lines.append(trimmedLine)
+                self.processLine(lineIndex + 1, trimmedLine)
+
+        # End of file checks follow:
+
+        # Check "state" at end of file: should have blocks closed.
+        if self.prev_line_ref_page_tag:
+            self.error(MessageId.REFPAGE_BLOCK,
+                       "Reference page tag seen, but block not opened before end of file.",
+                       context=self.storeMessageContext(match=None))
+
+        if self.block_stack:
+            locations = (x.context for x in self.block_stack)
+            formatted_locations = ['{} opened at {}'.format(x.delimiter, self.getBriefLocation(x.context))
+                                   for x in self.block_stack]
+            self.logger.warning("Unclosed blocks: %s",
+                                ', '.join(formatted_locations))
+
+            self.error(MessageId.UNCLOSED_BLOCK,
+                       ["Reached end of page, with these unclosed blocks remaining:"] +
+                       formatted_locations,
+                       context=self.storeMessageContext(match=None),
+                       see_also=locations)
+
+        # Check that every include of an /api/ file in the protos or structs category
+        # had a matching /validity/ include
+        for entity, includeContext in self.fs_api_includes.items():
+            if not self.checker.entity_db.entityHasValidity(entity):
+                continue
+
+            if entity in self.missing_validity_suppressions:
+                continue
+
+            if entity not in self.validity_includes:
+                self.warning(MessageId.MISSING_VALIDITY_INCLUDE,
+                             ['Saw /api/ include for {}, but no matching /validity/ include'.format(entity),
+                              'Expected a line with ' + regenerateIncludeFromMatch(includeContext.match, 'validity')],
+                             context=includeContext)
+
+        # Check that we never include a /validity/ file
+        # without a matching /api/ include
+        for entity, includeContext in self.validity_includes.items():
+            if entity not in self.fs_api_includes:
+                self.error(MessageId.MISSING_API_INCLUDE,
+                           ['Saw /validity/ include for {}, but no matching /api/ include'.format(entity),
+                            'Expected a line with ' + regenerateIncludeFromMatch(includeContext.match, 'api')],
+                           context=includeContext)
+
+        if not self.numDiagnostics():
+            # no problems, exit quietly
+            return
+
+        print('\nFor file {}:'.format(self.filename))
+
+        self.printMessageCounts()
+        numFixes = len(self.fixes)
+        if numFixes > 0:
+            fixes = ', '.join(('{} -> {}'.format(search, replace)
+                               for search, replace in self.fixes))
+
+            print('{} unique auto-fix {} recorded: {}'.format(numFixes,
+                                                              _pluralize('pattern', numFixes), fixes))
+
+    def processLine(self, lineNum, line):
+        """Check the contents of a single line from a file.
+
+        Eventually populates self.match, self.entity, self.macro,
+        before calling processMatch.
+        """
+        self.lineNum = lineNum
+        self.line = line
+        self.match = None
+        self.entity = None
+        self.macro = None
+
+        self.logger.debug("processing line %d", lineNum)
+
+        if self.processPossibleBlockDelimiter():
+            # This is a block delimiter - proceed to next line.
+            # Block-type-specific stuff goes in processBlockOpen and processBlockClosed.
+            return
+
+        if self.in_code_block:
+            # We do no processing in a code block.
+            return
+
+        ###
+        # Detect if the previous line was [open,...] starting a refpage
+        # but this line isn't --
+        # If the line is some other block delimiter,
+        # the related code in self.processPossibleBlockDelimiter()
+        # would have handled it.
+        # (because execution would never get to here for that line)
+        if self.prev_line_ref_page_tag:
+            self.handleExpectedRefpageBlock()
+
+        ###
+        # Detect headings
+        if line.startswith('=='):
+            # Headings cause us to clear our pname_context
+            self.pname_data = None
+
+            command = self.heading_command_re.match(line)
+            if command:
+                data = self.checker.findEntity(command)
+                if data:
+                    self.pname_data = data
+            return
+
+        ###
+        # Detect [open, lines for manpages
+        if line.startswith('[open,'):
+            self.checkRefPage()
+            return
+
+        ###
+        # Skip comments
+        if line.lstrip().startswith('//'):
+            return
+
+        ###
+        # Skip ifdef/endif
+        if SKIP_LINE.match(line):
+            return
+
+        ###
+        # Detect any include:: lines
+        match = INCLUDE_PATH_ATTRIBUTE.match(line)
+        if match:
+            path_attribute = match.group(1)
+            if path_attribute is None:
+                self.error(MessageId.MISSING_INCLUDE_PATH_ATTRIBUTE,
+                           '(no path attribute is present)')
+                return
+            if path_attribute not in allowed_path_attributes:
+                self.error(MessageId.MISSING_INCLUDE_PATH_ATTRIBUTE,
+                           f'(path attribute {{path_attribute}} is not one of {sorted(allowed_path_attributes)})')
+                return
+
+        ###
+        # Detect include:::....[] lines for generated API fragments
+        match = INCLUDE.match(line)
+        if match:
+            self.match = match
+            entity = match.group('entity_name')
+
+            data = self.checker.findEntity(entity)
+            if not data:
+                self.error(MessageId.UNKNOWN_INCLUDE,
+                           'Saw include for {}, but that entity is unknown.'.format(entity))
+                self.pname_data = None
+                return
+
+            self.pname_data = data
+
+            if match.group('generated_type') == 'api':
+                self.recordInclude(self.checker.apiIncludes)
+
+                # Set mentions to None. The first time we see something like `* pname:paramHere`,
+                # we will set it to an empty set
+                self.pname_mentions[entity] = None
+
+                if match.group('category') in CATEGORIES_WITH_VALIDITY:
+                    self.fs_api_includes[entity] = self.storeMessageContext()
+
+                if entity in self.validity_includes:
+                    name_and_line = toNameAndLine(
+                        self.validity_includes[entity], root_path=self.checker.root_path)
+                    self.error(MessageId.API_VALIDITY_ORDER,
+                               ['/api/ include found for {} after a corresponding /validity/ include'.format(entity),
+                                'Validity include located at {}'.format(name_and_line)])
+
+            elif match.group('generated_type') == 'validity':
+                self.recordInclude(self.checker.validityIncludes)
+                self.validity_includes[entity] = self.storeMessageContext()
+
+                if entity not in self.pname_mentions:
+                    self.error(MessageId.API_VALIDITY_ORDER,
+                               '/validity/ include found for {} without a preceding /api/ include'.format(entity))
+                    return
+
+                if self.pname_mentions[entity]:
+                    # Got a validity include and we have seen at least one * pname: line
+                    # since we got the API include
+                    # so we can warn if we haven't seen a reference to every
+                    # parameter/member.
+                    members = self.checker.getMemberNames(entity)
+                    missing = [member for member in members
+                               if member not in self.pname_mentions[entity]]
+                    if missing:
+                        self.error(MessageId.UNDOCUMENTED_MEMBER,
+                                   ['Validity include found for {}, but not all members/params apparently documented'.format(entity),
+                                    'Members/params not mentioned with pname: {}'.format(', '.join(missing))])
+
+            # If we found an include line, we're done with this line.
+            return
+
+        if self.pname_data is not None and '* pname:' in line:
+            context_entity = self.pname_data.entity
+            if self.pname_mentions[context_entity] is None:
+                # First time seeing * pname: after an api include, prepare the set that
+                # tracks
+                self.pname_mentions[context_entity] = set()
+
+        ###
+        # Detect [[Entity]] anchors
+        for match in ANCHOR.finditer(line):
+            entity = match.group('entity_name')
+            if self.checker.findEntity(entity):
+                # We found an anchor with the same name as an entity:
+                # treat it (mostly) like an API include
+                self.match = match
+                self.recordInclude(self.checker.apiIncludes,
+                                   generated_type='api (manual anchor)')
+
+        ###
+        # Detect :: without pname
+        for match in MEMBER_REFERENCE.finditer(line):
+            if not match.group('member_macro'):
+                self.match = match
+                # Got :: but not followed by pname
+
+                search = match.group()
+                replacement = match.group(
+                    'first_part') + '::pname:' + match.group('second_part')
+                self.error(MessageId.MEMBER_PNAME_MISSING,
+                           'Found a function parameter or struct member reference with :: but missing pname:',
+                           group='double_colons',
+                           replacement='::pname:',
+                           fix=(search, replacement))
+
+                # check pname here because it won't come up in normal iteration below
+                # because of the missing macro
+                self.entity = match.group('entity_name')
+                self.checkPname(match.group('scope'))
+
+        ###
+        # Look for things that seem like a missing macro.
+        for match in self.suspected_missing_macro_re.finditer(line):
+            if OPEN_LINK.match(line, endpos=match.start()):
+                # this is in a link, skip it.
+                continue
+            if CLOSE_LINK.match(line[match.end():]):
+                # this is in a link, skip it.
+                continue
+
+            entity = match.group('entity_name')
+            self.match = match
+            self.entity = entity
+            data = self.checker.findEntity(entity)
+            if data:
+
+                if data.category == EXTENSION_CATEGORY:
+                    # Ah, this is an extension
+                    self.warning(MessageId.EXTENSION, "Seems like this is an extension name that was not linked.",
+                                 group='entity_name', replacement=self.makeExtensionLink())
+                else:
+                    self.warning(MessageId.MISSING_MACRO,
+                                 ['Seems like a "{}" macro was omitted for this reference to a known entity in category "{}".'.format(data.macro, data.category),
+                                  'Wrap in ` ` to silence this if you do not want a verified macro here.'],
+                                 group='entity_name',
+                                 replacement=self.makeMacroMarkup(data.macro))
+            else:
+
+                dataArray = self.checker.findEntityCaseInsensitive(entity)
+                # We might have found the goof...
+
+                if dataArray:
+                    if len(dataArray) == 1:
+                        # Yep, found the goof:
+                        # incorrect macro and entity capitalization
+                        data = dataArray[0]
+                        if data.category == EXTENSION_CATEGORY:
+                            # Ah, this is an extension
+                            self.warning(MessageId.EXTENSION,
+                                         "Seems like this is an extension name that was not linked.",
+                                         group='entity_name', replacement=self.makeExtensionLink(data.entity))
+                        else:
+                            self.warning(MessageId.MISSING_MACRO,
+                                         'Seems like a macro was omitted for this reference to a known entity in category "{}", found by searching case-insensitively.'.format(
+                                             data.category),
+                                         replacement=self.makeMacroMarkup(data=data))
+
+                    else:
+                        # Ugh, more than one resolution
+
+                        self.warning(MessageId.MISSING_MACRO,
+                                     ['Seems like a macro was omitted for this reference to a known entity, found by searching case-insensitively.',
+                                      'More than one apparent match.'],
+                                     group='entity_name', see_also=dataArray[:])
+
+        ###
+        # Main operations: detect markup macros
+        for match in self.checker.macro_re.finditer(line):
+            self.match = match
+            self.macro = match.group('macro')
+            self.entity = match.group('entity_name')
+            self.subscript = match.group('subscript')
+            self.processMatch()
+
+    def processPossibleBlockDelimiter(self):
+        """Look at the current line, and if it's a delimiter, update the block stack.
+
+        Calls self.processBlockDelimiter() as required.
+
+        Returns True if a delimiter was processed, False otherwise.
+        """
+        line = self.line
+        new_block_type = BlockType.lineToBlockType(line)
+        if not new_block_type:
+            return False
+
+        ###
+        # Detect if the previous line was [open,...] starting a refpage
+        # but this line is some block delimiter other than --
+        # Must do this here because if we get a different block open instead of the one we want,
+        # the order of block opening will be wrong.
+        if new_block_type != BlockType.REF_PAGE_LIKE and self.prev_line_ref_page_tag:
+            self.handleExpectedRefpageBlock()
+
+        # Delegate to the main process for delimiters.
+        self.processBlockDelimiter(line, new_block_type)
+
+        return True
+
+    def processBlockDelimiter(self, line, new_block_type, context=None):
+        """Update the block stack based on the current or supplied line.
+
+        Calls self.processBlockOpen() or self.processBlockClosed() as required.
+
+        Called by self.processPossibleBlockDelimiter() both in normal operation, as well as
+        when "faking" a ref page block open.
+
+        Returns BlockProcessResult.
+        """
+        if not context:
+            context = self.storeMessageContext()
+
+        location = self.getBriefLocation(context)
+
+        top = self.getInnermostBlockEntry()
+        top_delim = self.getInnermostBlockDelimiter()
+        if top_delim == line:
+            self.processBlockClosed()
+            return
+
+        if top and top.block_type == new_block_type:
+            # Same block type, but not matching - might be an error?
+            # TODO maybe create a diagnostic here?
+            self.logger.warning(
+                "processPossibleBlockDelimiter: %s: Matched delimiter type %s, but did not exactly match current delim %s to top of stack %s, may be a typo?",
+                location, new_block_type, line, top_delim)
+
+        # Empty stack, or top doesn't match us.
+        self.processBlockOpen(new_block_type, delimiter=line)
+
+    def processBlockOpen(self, block_type, context=None, delimiter=None):
+        """Do any block-type-specific processing and push the new block.
+
+        Must call self.pushBlock().
+        May be overridden (carefully) or extended.
+
+        Called by self.processBlockDelimiter().
+        """
+        if block_type == BlockType.REF_PAGE_LIKE:
+            if self.prev_line_ref_page_tag:
+                if self.current_ref_page:
+                    refpage = self.current_ref_page
+                else:
+                    refpage = '?refpage-with-invalid-tag?'
+
+                self.logger.info(
+                    'processBlockOpen: Opening refpage for %s', refpage)
+                # Opening of refpage block "consumes" the preceding ref
+                # page context
+                self.prev_line_ref_page_tag = None
+                self.pushBlock(block_type, refpage=refpage,
+                               context=context, delimiter=delimiter)
+                self.in_ref_page = True
+                return
+
+        if block_type == BlockType.CODE:
+            self.in_code_block = True
+
+        self.pushBlock(block_type, context=context, delimiter=delimiter)
+
+    def processBlockClosed(self):
+        """Do any block-type-specific processing and pop the top block.
+
+        Must call self.popBlock().
+        May be overridden (carefully) or extended.
+
+        Called by self.processPossibleBlockDelimiter().
+        """
+        old_top = self.popBlock()
+
+        if old_top.block_type == BlockType.CODE:
+            self.in_code_block = False
+
+        elif old_top.block_type == BlockType.REF_PAGE_LIKE and old_top.refpage:
+            self.logger.info(
+                'processBlockClosed: Closing refpage for %s', old_top.refpage)
+            # leaving a ref page so reset associated state.
+            self.current_ref_page = None
+            self.prev_line_ref_page_tag = None
+            self.in_ref_page = False
+
+    def processMatch(self):
+        """Process a match of the macro:entity regex for correctness."""
+        match = self.match
+        entity = self.entity
+        macro = self.macro
+
+        ###
+        # Track entities that we're actually linking to.
+        ###
+        if self.checker.entity_db.isLinkedMacro(macro):
+            self.checker.addLinkToEntity(entity, self.storeMessageContext())
+
+        ###
+        # Link everything that should be, and nothing that shouldn't be
+        ###
+        if self.checkRecognizedEntity():
+            # if this returns true,
+            # then there is no need to do the remaining checks on this match
+            return
+
+        ###
+        # Non-existent macros
+        if macro in NON_EXISTENT_MACROS:
+            self.error(MessageId.BAD_MACRO, '{} is not a macro provided in the specification, despite resembling other macros.'.format(
+                macro), group='macro')
+
+        ###
+        # Wildcards (or leading underscore, or square brackets)
+        # if and only if a 'text' macro
+        self.checkText()
+
+        # Do some validation of pname references.
+        if macro == 'pname':
+            # See if there's an immediately-preceding entity
+            preceding = self.line[:match.start()]
+            scope = PRECEDING_MEMBER_REFERENCE.search(preceding)
+            if scope:
+                # Yes there is, check it out.
+                self.checkPname(scope.group('entity_name'))
+            elif self.current_ref_page is not None:
+                # No, but there is a current ref page: very reliable
+                self.checkPnameImpliedContext(self.current_ref_page)
+            elif self.pname_data is not None:
+                # No, but there is a pname_context - better than nothing.
+                self.checkPnameImpliedContext(self.pname_data)
+            else:
+                # no, and no existing context we can imply:
+                # can't check this.
+                pass
+
+    def checkRecognizedEntity(self):
+        """Check the current macro:entity match to see if it is recognized.
+
+        Returns True if there is no need to perform further checks on this match.
+
+        Helps avoid duplicate warnings/errors: typically each macro should have at most
+        one of this class of errors.
+        """
+        entity = self.entity
+        macro = self.macro
+        if self.checker.findMacroAndEntity(macro, entity) is not None:
+            # We know this macro-entity combo
+            return True
+
+        # We don't know this macro-entity combo.
+        possibleCats = self.checker.entity_db.getCategoriesForMacro(macro)
+        if possibleCats is None:
+            possibleCats = ['???']
+        msg = ['Definition of link target {} with macro {} (used for {} {}) does not exist.'.format(
+            entity,
+            macro,
+            _pluralize('category', len(possibleCats)),
+            ', '.join(possibleCats))]
+
+        data = self.checker.findEntity(entity)
+        if data:
+            if entity in CHECK_UNRECOGNIZED_ETEXT_EXCEPTIONS:
+                return False
+
+            # We found the goof: incorrect macro
+            msg.append('Apparently matching entity in category {} found.'.format(
+                data.category))
+            self.handleWrongMacro(msg, data)
+            return True
+
+        see_also = []
+        dataArray = self.checker.findEntityCaseInsensitive(entity)
+        if dataArray:
+            # We might have found the goof...
+
+            if len(dataArray) == 1:
+                # Yep, found the goof:
+                # incorrect macro and entity capitalization
+                data = dataArray[0]
+                msg.append('Apparently matching entity in category {} found by searching case-insensitively.'.format(
+                    data.category))
+                self.handleWrongMacro(msg, data)
+                return True
+            else:
+                # Ugh, more than one resolution
+                msg.append(
+                    'More than one apparent match found by searching case-insensitively, cannot auto-fix.')
+                see_also = dataArray[:]
+
+        # OK, so we don't recognize this entity (and couldn't auto-fix it).
+
+        if self.checker.entity_db.shouldBeRecognized(macro, entity):
+            # We should know the target - it's a link macro,
+            # or there's some reason the entity DB thinks we should know it.
+            if self.checker.likelyRecognizedEntity(entity):
+                # Should be linked and it matches our pattern,
+                # so probably not wrong macro.
+                # Human brains required.
+                if not self.checkText():
+                    self.error(MessageId.BAD_ENTITY, msg + ['Might be a misspelling, or, less likely, the wrong macro.'],
+                               see_also=see_also)
+            else:
+                # Doesn't match our pattern,
+                # so probably should be name instead of link.
+                newMacro = macro[0] + 'name'
+                if self.checker.entity_db.isValidMacro(newMacro):
+                    self.error(MessageId.BAD_ENTITY, msg +
+                               ['Entity name does not fit the pattern for this API, which would mean it should be a "name" macro instead of a "link" macro'],
+                               group='macro', replacement=newMacro, fix=self.makeFix(newMacro=newMacro), see_also=see_also)
+                else:
+                    self.error(MessageId.BAD_ENTITY, msg +
+                               ['Entity name does not fit the pattern for this API, which would mean it should be a "name" macro instead of a "link" macro',
+                                'However, {} is not a known macro so cannot auto-fix.'.format(newMacro)], see_also=see_also)
+
+        elif macro == 'ename':
+            # TODO This might be an ambiguity in the style guide - ename might be a known enumerant value,
+            # or it might be an enumerant value in an external library, etc. that we don't know about - so
+            # hard to check this.
+            if self.checker.likelyRecognizedEntity(entity):
+                if not self.checkText():
+                    if entity in CHECK_UNRECOGNIZED_ENAME_EXCEPTIONS:
+                        return False
+                    else:
+                        self.warning(MessageId.BAD_ENUMERANT, msg +
+                                 ['Unrecognized ename:{} that we would expect to recognize since it fits the pattern for this API.'.format(entity)], see_also=see_also)
+        else:
+            # This is fine:
+            # it doesn't need to be recognized since it's not linked.
+            pass
+        # Don't skip other tests.
+        return False
+
+    def checkText(self):
+        """Evaluate the usage (or non-usage) of a *text macro.
+
+        Wildcards (or leading or trailing underscore, or square brackets with
+        nothing or a placeholder) if and only if a 'text' macro.
+
+        Called by checkRecognizedEntity() when appropriate.
+        """
+        macro = self.macro
+        entity = self.entity
+        shouldBeText = shouldEntityBeText(entity, self.subscript)
+        if shouldBeText and not self.macro.endswith(
+                'text') and not self.macro == 'code':
+            newMacro = macro[0] + 'text'
+            if self.checker.entity_db.getCategoriesForMacro(newMacro):
+                self.error(MessageId.MISSING_TEXT,
+                           ['Asterisk/leading or trailing underscore/bracket found - macro should end with "text:", probably {}:'.format(newMacro),
+                            AUTO_FIX_STRING],
+                           group='macro', replacement=newMacro, fix=self.makeFix(newMacro=newMacro))
+            else:
+                self.error(MessageId.MISSING_TEXT,
+                           ['Asterisk/leading or trailing underscore/bracket found, so macro should end with "text:".',
+                            'However {}: is not a known macro so cannot auto-fix.'.format(newMacro)],
+                           group='macro')
+            return True
+        elif macro.endswith('text') and not shouldBeText:
+            msg = [
+                "No asterisk/leading or trailing underscore/bracket in the entity, so this might be a mistaken use of the 'text' macro {}:".format(macro)]
+            data = self.checker.findEntity(entity)
+            if data:
+                if entity in CHECK_UNRECOGNIZED_ETEXT_EXCEPTIONS:
+                    return False
+
+                # We found the goof: incorrect macro
+                msg.append('Apparently matching entity in category {} found.'.format(
+                    data.category))
+                msg.append(AUTO_FIX_STRING)
+                replacement = self.makeFix(data=data)
+                if data.category == EXTENSION_CATEGORY:
+                    self.error(MessageId.EXTENSION, msg,
+                               replacement=replacement, fix=replacement)
+                else:
+                    self.error(MessageId.WRONG_MACRO, msg,
+                               group='macro', replacement=data.macro, fix=replacement)
+            else:
+                if self.checker.likelyRecognizedEntity(entity):
+                    # This is a use of *text: for something that fits the pattern but isn't in the spec.
+                    # This is OK.
+                    return False
+                msg.append('Entity not found in spec, either.')
+                if macro[0] != 'e':
+                    # Only suggest a macro if we aren't in elink/ename/etext,
+                    # since ename and elink are not related in an equivalent way
+                    # to the relationship between flink and fname.
+                    newMacro = macro[0] + 'name'
+                    if self.checker.entity_db.getCategoriesForMacro(newMacro):
+                        msg.append(
+                            'Consider if {}: might be the correct macro to use here.'.format(newMacro))
+                    else:
+                        msg.append(
+                            'Cannot suggest a new macro because {}: is not a known macro.'.format(newMacro))
+                self.warning(MessageId.MISUSED_TEXT, msg)
+            return True
+        return False
+
+    def checkPnameImpliedContext(self, pname_context):
+        """Handle pname: macros not immediately preceded by something like flink:entity or slink:entity.
+
+        Also records pname: mentions of members/parameters for completeness checking in doc blocks.
+
+        Contains call to self.checkPname().
+        Called by self.processMatch()
+        """
+        self.checkPname(pname_context.entity)
+        if pname_context.entity in self.pname_mentions and \
+                self.pname_mentions[pname_context.entity] is not None:
+            # Record this mention,
+            # in case we're in the documentation block.
+            self.pname_mentions[pname_context.entity].add(self.entity)
+
+    def checkPname(self, pname_context):
+        """Check the current match (as a pname: usage) with the given entity as its 'pname context', if possible.
+
+        e.g. slink:foo::pname:bar, pname_context would be 'foo', while self.entity would be 'bar', etc.
+
+        Called by self.processLine(), self.processMatch(), as well as from self.checkPnameImpliedContext().
+        """
+        if '*' in pname_context:
+            # This context has a placeholder, can't verify it.
+            return
+
+        entity = self.entity
+
+        context_data = self.checker.findEntity(pname_context)
+        members = self.checker.getMemberNames(pname_context)
+
+        if context_data and not members:
+            # This is a recognized parent entity that doesn't have detectable member names,
+            # skip validation
+            # TODO: Annotate parameters of function pointer types with <name>
+            # and <param>?
+            return
+        if not members:
+            self.warning(MessageId.UNRECOGNIZED_CONTEXT,
+                         'pname context entity was un-recognized {}'.format(pname_context))
+            return
+
+        if entity not in members:
+            self.warning(MessageId.UNKNOWN_MEMBER, ["Could not find member/param named '{}' in {}".format(entity, pname_context),
+                                                    'Known {} mamber/param names are: {}'.format(
+                pname_context, ', '.join(members))], group='entity_name')
+
+    def checkIncludeRefPageRelation(self, entity, generated_type):
+        """Identify if our current ref page (or lack thereof) is appropriate for an include just recorded.
+
+        Called by self.recordInclude().
+        """
+        if not self.in_ref_page:
+            # Not in a ref page block: This probably means this entity needs a
+            # ref-page block added.
+            self.handleIncludeMissingRefPage(entity, generated_type)
+            return
+
+        if not isinstance(self.current_ref_page, EntityData):
+            # This isn't a fully-valid ref page, so can't check the includes any better.
+            return
+
+        ref_page_entity = self.current_ref_page.entity
+        if ref_page_entity not in self.refpage_includes:
+            self.refpage_includes[ref_page_entity] = set()
+        expected_ref_page_entity = self.computeExpectedRefPageFromInclude(
+            entity)
+        self.refpage_includes[ref_page_entity].add((generated_type, entity))
+
+        if ref_page_entity == expected_ref_page_entity:
+            # OK, this is a total match.
+            pass
+        elif self.checker.entity_db.areAliases(expected_ref_page_entity, ref_page_entity):
+            # This appears to be a promoted synonym which is OK.
+            pass
+        else:
+            # OK, we are in a ref page block that doesn't match
+            self.handleIncludeMismatchRefPage(entity, generated_type)
+
+    def perform_entity_check(self, type):
+        """Returns True if an entity check should be performed on this
+           refpage type.
+
+           May override."""
+
+        return True
+
+    def checkRefPage(self):
+        """Check if the current line (a refpage tag) meets requirements.
+
+        Called by self.processLine().
+        """
+        line = self.line
+
+        # Should always be found
+        self.match = BRACKETS.match(line)
+
+        data = None
+        directory = None
+        if self.in_ref_page:
+            msg = ["Found reference page markup, but we are already in a refpage block.",
+                   "The block before the first message of this type is most likely not closed.", ]
+            # Fake-close the previous ref page, if it's trivial to do so.
+            if self.getInnermostBlockEntry().block_type == BlockType.REF_PAGE_LIKE:
+                msg.append(
+                    "Pretending that there was a line with `--` immediately above to close that ref page, for more readable messages.")
+                self.processBlockDelimiter(
+                    REF_PAGE_LIKE_BLOCK_DELIM, BlockType.REF_PAGE_LIKE)
+            else:
+                msg.append(
+                    "Ref page wasn't the last block opened, so not pretending to auto-close it for more readable messages.")
+
+            self.error(MessageId.REFPAGE_BLOCK, msg)
+
+        attribs = parseRefPageAttribs(line)
+
+        unknown_attribs = set(attribs.keys()).difference(
+            VALID_REF_PAGE_ATTRIBS)
+        if unknown_attribs:
+            self.error(MessageId.REFPAGE_UNKNOWN_ATTRIB,
+                       "Found unknown attrib(s) in reference page markup: " + ','.join(unknown_attribs))
+
+        # Required field: refpage='xrValidEntityHere'
+        if Attrib.REFPAGE.value in attribs:
+            attrib = attribs[Attrib.REFPAGE.value]
+            text = attrib.value
+            self.entity = text
+
+            context = self.storeMessageContext(
+                group='value', match=attrib.match)
+            if self.checker.seenRefPage(text):
+                self.error(MessageId.REFPAGE_DUPLICATE,
+                           ["Found reference page markup when we already saw refpage='{}' elsewhere.".format(
+                               text),
+                            "This (or the other mention) may be a copy-paste error."],
+                           context=context)
+            self.checker.addRefPage(text)
+
+            # Entity check can be skipped depending on the refpage type
+            # Determine page type for use in several places
+            type_text = ''
+            if Attrib.TYPE.value in attribs:
+                type_text = attribs[Attrib.TYPE.value].value
+
+            if self.perform_entity_check(type_text):
+                data = self.checker.findEntity(text)
+                if data:
+                    # OK, this is a known entity that we're seeing a refpage for.
+                    directory = data.directory
+                    self.current_ref_page = data
+                else:
+                    # TODO suggest fixes here if applicable
+                    self.error(MessageId.REFPAGE_NAME,
+                               [ "Found reference page markup, but refpage='{}' type='{}' does not refer to a recognized entity".format(
+                                   text, type_text),
+                                 'If this is intentional, add the entity to EXTRA_DEFINES or EXTRA_REFPAGES in check_spec_links.py.' ],
+                               context=context)
+        else:
+            self.error(MessageId.REFPAGE_TAG,
+                       "Found apparent reference page markup, but missing refpage='...'",
+                       group=None)
+
+        # Required field: desc='preferably non-empty'
+        if Attrib.DESC.value in attribs:
+            attrib = attribs[Attrib.DESC.value]
+            text = attrib.value
+            if not text:
+                context = self.storeMessageContext(
+                    group=None, match=attrib.match)
+                self.warning(MessageId.REFPAGE_MISSING_DESC,
+                             "Found reference page markup, but desc='' is empty",
+                             context=context)
+        else:
+            self.error(MessageId.REFPAGE_TAG,
+                       "Found apparent reference page markup, but missing desc='...'",
+                       group=None)
+
+        # Required field: type='protos' for example
+        # (used by genRef.py to compute the macro to use)
+        if Attrib.TYPE.value in attribs:
+            attrib = attribs[Attrib.TYPE.value]
+            text = attrib.value
+            if directory and not text == directory:
+                context = self.storeMessageContext(
+                    group='value', match=attrib.match)
+                self.error(MessageId.REFPAGE_TYPE,
+                           "Found reference page markup, but type='{}' is not the expected value '{}'".format(
+                               text, directory),
+                           context=context)
+        else:
+            self.error(MessageId.REFPAGE_TAG,
+                       "Found apparent reference page markup, but missing type='...'",
+                       group=None)
+
+        # Optional field: alias='spaceDelimited validEntities'
+        # Currently does nothing. Could modify checkRefPageXrefs to also
+        # check alias= attribute value
+        # if Attrib.ALIAS.value in attribs:
+        #    # This field is optional
+        #    self.checkRefPageXrefs(attribs[Attrib.XREFS.value])
+
+        # Optional field: xrefs='spaceDelimited validEntities'
+        if Attrib.XREFS.value in attribs:
+            # This field is optional
+            self.checkRefPageXrefs(attribs[Attrib.XREFS.value])
+        self.prev_line_ref_page_tag = self.storeMessageContext()
+
+    def checkRefPageXrefs(self, xrefs_attrib):
+        """Check all cross-refs indicated in an xrefs attribute for a ref page.
+
+        Called by self.checkRefPage().
+
+        Argument:
+        xrefs_attrib -- A match of REF_PAGE_ATTRIB where the group 'key' is 'xrefs'.
+        """
+        text = xrefs_attrib.value
+        context = self.storeMessageContext(
+            group='value', match=xrefs_attrib.match)
+
+        def splitRefs(s):
+            """Split the string on whitespace, into individual references."""
+            return s.split()  # [x for x in s.split() if x]
+
+        def remakeRefs(refs):
+            """Re-create a xrefs string from something list-shaped."""
+            return ' '.join(refs)
+
+        refs = splitRefs(text)
+
+        # Pre-checking if messages are enabled, so that we can correctly determine
+        # the current string following any auto-fixes:
+        # the fixes for messages directly in this method would interact,
+        # and thus must be in the order specified here.
+
+        if self.messageEnabled(MessageId.REFPAGE_XREFS_COMMA) and ',' in text:
+            old_text = text
+            # Re-split after replacing commas.
+            refs = splitRefs(text.replace(',', ' '))
+            # Re-create the space-delimited text.
+            text = remakeRefs(refs)
+            self.error(MessageId.REFPAGE_XREFS_COMMA,
+                       "Found reference page markup, with an unexpected comma in the (space-delimited) xrefs attribute",
+                       context=context,
+                       replacement=text,
+                       fix=(old_text, text))
+
+        # We could conditionally perform this creation, but the code complexity would increase substantially,
+        # for presumably minimal runtime improvement.
+        unique_refs = OrderedDict.fromkeys(refs)
+        if self.messageEnabled(MessageId.REFPAGE_XREF_DUPE) and len(unique_refs) != len(refs):
+            # TODO is it safe to auto-fix here?
+            old_text = text
+            text = remakeRefs(unique_refs.keys())
+            self.warning(MessageId.REFPAGE_XREF_DUPE,
+                         ["Reference page for {} contains at least one duplicate in its cross-references.".format(
+                             self.entity),
+                             "Look carefully to see if this is a copy and paste error and should be changed to a different but related entity:",
+                             "auto-fix simply removes the duplicate."],
+                         context=context,
+                         replacement=text,
+                         fix=(old_text, text))
+
+        if self.messageEnabled(MessageId.REFPAGE_SELF_XREF) and self.entity and self.entity in unique_refs:
+            # Not modifying unique_refs here because that would accidentally affect the whitespace auto-fix.
+            new_text = remakeRefs(
+                [x for x in unique_refs.keys() if x != self.entity])
+
+            # DON'T AUTOFIX HERE because these are likely copy-paste between related entities:
+            # e.g. a Create function and the associated CreateInfo struct.
+            self.warning(MessageId.REFPAGE_SELF_XREF,
+                         ["Reference page for {} included itself in its cross-references.".format(self.entity),
+                          "This is typically a copy and paste error, and the dupe should likely be changed to a different but related entity.",
+                          "Not auto-fixing for this reason."],
+                         context=context,
+                         replacement=new_text,)
+
+        # We didn't have another reason to replace the whole attribute value,
+        # so let's make sure it doesn't have any extra spaces
+        if self.messageEnabled(MessageId.REFPAGE_WHITESPACE) and xrefs_attrib.value == text:
+            old_text = text
+            text = remakeRefs(unique_refs.keys())
+            if old_text != text:
+                self.warning(MessageId.REFPAGE_WHITESPACE,
+                             ["Cross-references for reference page for {} had non-minimal whitespace,".format(self.entity),
+                              "and no other enabled message has re-constructed this value already."],
+                             context=context,
+                             replacement=text,
+                             fix=(old_text, text))
+
+        for entity in unique_refs.keys():
+            self.checkRefPageXref(entity, context)
+
+    @property
+    def allowEnumXrefs(self):
+        """Returns True if enums can be specified in the 'xrefs' attribute
+        of a refpage.
+
+        May override.
+        """
+        return False
+
+    def checkRefPageXref(self, referenced_entity, line_context):
+        """Check a single cross-reference entry for a refpage.
+
+        Called by self.checkRefPageXrefs().
+
+        Arguments:
+        referenced_entity -- The individual entity under consideration from the xrefs='...' string.
+        line_context -- A MessageContext referring to the entire line.
+        """
+        data = self.checker.findEntity(referenced_entity)
+        context = line_context
+        match = re.search(r'\b{}\b'.format(referenced_entity), self.line)
+        if match:
+            context = self.storeMessageContext(
+                group=None, match=match)
+
+        if data and data.category == "enumvalues" and not self.allowEnumXrefs:
+            msg = ["Found reference page markup, with an enum value listed: {}".format(
+                referenced_entity)]
+            self.error(MessageId.REFPAGE_XREFS,
+                    msg,
+                    context=context)
+            return
+
+        if data:
+            # This is OK: we found it, and it's not an enum value
+            return
+
+        msg = ["Found reference page markup, with an unrecognized entity listed: {}".format(
+            referenced_entity)]
+
+        see_also = None
+        dataArray = self.checker.findEntityCaseInsensitive(
+            referenced_entity)
+
+        if dataArray:
+            # We might have found the goof...
+
+            if len(dataArray) == 1:
+                # Yep, found the goof - incorrect entity capitalization
+                data = dataArray[0]
+                new_entity = data.entity
+                self.error(MessageId.REFPAGE_XREFS, msg + [
+                    'Apparently matching entity in category {} found by searching case-insensitively.'.format(
+                        data.category),
+                    AUTO_FIX_STRING],
+                    replacement=new_entity,
+                    fix=(referenced_entity, new_entity),
+                    context=context)
+                return
+
+            # Ugh, more than one resolution
+            msg.append(
+                'More than one apparent match found by searching case-insensitively, cannot auto-fix.')
+            see_also = dataArray[:]
+        else:
+            # Probably not just a typo
+            msg.append(
+                'If this is intentional, add the entity to EXTRA_DEFINES or EXTRA_REFPAGES in check_spec_links.py.')
+
+        # Multiple or no resolutions found
+        self.error(MessageId.REFPAGE_XREFS,
+                   msg,
+                   see_also=see_also,
+                   context=context)
+
+    ###
+    # Message-related methods.
+    ###
+
+    def warning(self, message_id, messageLines, context=None, group=None,
+                replacement=None, fix=None, see_also=None, frame=None):
+        """Log a warning for the file, if the message ID is enabled.
+
+        Wrapper around self.diag() that automatically sets severity as well as frame.
+
+        Arguments:
+        message_id -- A MessageId value.
+        messageLines -- A string or list of strings containing a human-readable error description.
+
+        Optional, named arguments:
+        context -- A MessageContext. If None, will be constructed from self.match and group.
+        group -- The name of the regex group in self.match that contains the problem. Only used if context is None.
+          If needed and is None, self.group is used instead.
+        replacement -- The string, if any, that should be suggested as a replacement for the group in question.
+          Does not create an auto-fix: sometimes we want to show a possible fix but aren't confident enough
+          (or can't easily phrase a regex) to do it automatically.
+        fix -- A (old text, new text) pair if this error is auto-fixable safely.
+        see_also -- An optional array of other MessageContext locations relevant to this message.
+        frame -- The 'inspect' stack frame corresponding to the location that raised this message.
+          If None, will assume it is the direct caller of self.warning().
+        """
+        if not frame:
+            frame = currentframe().f_back
+        self.diag(MessageType.WARNING, message_id, messageLines, group=group,
+                  replacement=replacement, context=context, fix=fix, see_also=see_also, frame=frame)
+
+    def error(self, message_id, messageLines, group=None, replacement=None,
+              context=None, fix=None, see_also=None, frame=None):
+        """Log an error for the file, if the message ID is enabled.
+
+        Wrapper around self.diag() that automatically sets severity as well as frame.
+
+        Arguments:
+        message_id -- A MessageId value.
+        messageLines -- A string or list of strings containing a human-readable error description.
+
+        Optional, named arguments:
+        context -- A MessageContext. If None, will be constructed from self.match and group.
+        group -- The name of the regex group in self.match that contains the problem. Only used if context is None.
+          If needed and is None, self.group is used instead.
+        replacement -- The string, if any, that should be suggested as a replacement for the group in question.
+          Does not create an auto-fix: sometimes we want to show a possible fix but aren't confident enough
+          (or can't easily phrase a regex) to do it automatically.
+        fix -- A (old text, new text) pair if this error is auto-fixable safely.
+        see_also -- An optional array of other MessageContext locations relevant to this message.
+        frame -- The 'inspect' stack frame corresponding to the location that raised this message.
+          If None, will assume it is the direct caller of self.error().
+        """
+        if not frame:
+            frame = currentframe().f_back
+        self.diag(MessageType.ERROR, message_id, messageLines, group=group,
+                  replacement=replacement, context=context, fix=fix, see_also=see_also, frame=frame)
+
+    def diag(self, severity, message_id, messageLines, context=None, group=None,
+             replacement=None, fix=None, see_also=None, frame=None):
+        """Log a diagnostic for the file, if the message ID is enabled.
+
+        Also records the auto-fix, if applicable.
+
+        Arguments:
+        severity -- A MessageType value.
+        message_id -- A MessageId value.
+        messageLines -- A string or list of strings containing a human-readable error description.
+
+        Optional, named arguments:
+        context -- A MessageContext. If None, will be constructed from self.match and group.
+        group -- The name of the regex group in self.match that contains the problem. Only used if context is None.
+          If needed and is None, self.group is used instead.
+        replacement -- The string, if any, that should be suggested as a replacement for the group in question.
+          Does not create an auto-fix: sometimes we want to show a possible fix but aren't confident enough
+          (or can't easily phrase a regex) to do it automatically.
+        fix -- A (old text, new text) pair if this error is auto-fixable safely.
+        see_also -- An optional array of other MessageContext locations relevant to this message.
+        frame -- The 'inspect' stack frame corresponding to the location that raised this message.
+          If None, will assume it is the direct caller of self.diag().
+        """
+        if not self.messageEnabled(message_id):
+            self.logger.debug(
+                'Discarding a %s message because it is disabled.', message_id)
+            return
+
+        if isinstance(messageLines, str):
+            messageLines = [messageLines]
+
+        self.logger.info('Recording a %s message: %s',
+                         message_id, ' '.join(messageLines))
+
+        # Ensure all auto-fixes are marked as such.
+        if fix is not None and AUTO_FIX_STRING not in messageLines:
+            messageLines.append(AUTO_FIX_STRING)
+
+        if not frame:
+            frame = currentframe().f_back
+        if context is None:
+            message = Message(message_id=message_id,
+                              message_type=severity,
+                              message=messageLines,
+                              context=self.storeMessageContext(group=group),
+                              replacement=replacement,
+                              see_also=see_also,
+                              fix=fix,
+                              frame=frame)
+        else:
+            message = Message(message_id=message_id,
+                              message_type=severity,
+                              message=messageLines,
+                              context=context,
+                              replacement=replacement,
+                              see_also=see_also,
+                              fix=fix,
+                              frame=frame)
+        if fix is not None:
+            self.fixes.add(fix)
+        self.messages.append(message)
+
+    def messageEnabled(self, message_id):
+        """Return true if the given message ID is enabled."""
+        return message_id in self.enabled_messages
+
+    ###
+    # Accessors for externally-interesting information
+
+    def numDiagnostics(self):
+        """Count the total number of diagnostics (errors or warnings) for this file."""
+        return len(self.messages)
+
+    def numErrors(self):
+        """Count the total number of errors for this file."""
+        return self.numMessagesOfType(MessageType.ERROR)
+
+    def numMessagesOfType(self, message_type):
+        """Count the number of messages of a particular type (severity)."""
+        return len(
+            [msg for msg in self.messages if msg.message_type == message_type])
+
+    def hasFixes(self):
+        """Return True if any messages included auto-fix patterns."""
+        return len(self.fixes) > 0
+
+    ###
+    # Assorted internal methods.
+    def printMessageCounts(self):
+        """Print a simple count of each MessageType of diagnostics."""
+        for message_type in [MessageType.ERROR, MessageType.WARNING]:
+            count = self.numMessagesOfType(message_type)
+            if count > 0:
+                print('{num} {mtype}{s} generated.'.format(
+                    num=count, mtype=message_type, s=_s_suffix(count)))
+
+    def dumpInternals(self):
+        """Dump internal variables to screen, for debugging."""
+        print('self.lineNum: ', self.lineNum)
+        print('self.line:', self.line)
+        print('self.prev_line_ref_page_tag: ', self.prev_line_ref_page_tag)
+        print('self.current_ref_page:', self.current_ref_page)
+
+    def getMissingValiditySuppressions(self):
+        """Return an enumerable of entity names that we shouldn't warn about missing validity.
+
+        May override.
+        """
+        return []
+
+    def recordInclude(self, include_dict, generated_type=None):
+        """Store the current line as being the location of an include directive or equivalent.
+
+        Reports duplicate include errors, as well as include/ref-page mismatch or missing ref-page,
+        by calling self.checkIncludeRefPageRelation() for "actual" includes (where generated_type is None).
+
+        Arguments:
+        include_dict -- The include dictionary to update: one of self.apiIncludes or self.validityIncludes.
+        generated_type -- The type of include (e.g. 'api', 'valid', etc). By default, extracted from self.match.
+        """
+        entity = self.match.group('entity_name')
+        if generated_type is None:
+            generated_type = self.match.group('generated_type')
+
+            # Only checking the ref page relation if it's retrieved from regex.
+            # Otherwise it might be a manual anchor recorded as an include,
+            # etc.
+            self.checkIncludeRefPageRelation(entity, generated_type)
+
+        if entity in include_dict:
+            self.error(MessageId.DUPLICATE_INCLUDE,
+                       "Included {} docs for {} when they were already included.".format(generated_type,
+                                                                                         entity), see_also=include_dict[entity])
+            include_dict[entity].append(self.storeMessageContext())
+        else:
+            include_dict[entity] = [self.storeMessageContext()]
+
+    def getInnermostBlockEntry(self):
+        """Get the BlockEntry for the top block delim on our stack."""
+        if not self.block_stack:
+            return None
+        return self.block_stack[-1]
+
+    def getInnermostBlockDelimiter(self):
+        """Get the delimiter for the top block on our stack."""
+        top = self.getInnermostBlockEntry()
+        if not top:
+            return None
+        return top.delimiter
+
+    def pushBlock(self, block_type, refpage=None, context=None, delimiter=None):
+        """Push a new entry on the block stack."""
+        if not delimiter:
+            self.logger.info("pushBlock: not given delimiter")
+            delimiter = self.line
+        if not context:
+            context = self.storeMessageContext()
+
+        old_top_delim = self.getInnermostBlockDelimiter()
+
+        self.block_stack.append(BlockEntry(
+            delimiter=delimiter,
+            context=context,
+            refpage=refpage,
+            block_type=block_type))
+
+        location = self.getBriefLocation(context)
+        self.logger.info(
+            "pushBlock: %s: Pushed %s delimiter %s, previous top was %s, now %d elements on the stack",
+            location, block_type.value, delimiter, old_top_delim, len(self.block_stack))
+
+        self.dumpBlockStack()
+
+    def popBlock(self):
+        """Pop and return the top entry from the block stack."""
+        old_top = self.block_stack.pop()
+        location = self.getBriefLocation(old_top.context)
+        self.logger.info(
+            "popBlock: %s: popping %s delimiter %s, now %d elements on the stack",
+            location, old_top.block_type.value, old_top.delimiter, len(self.block_stack))
+
+        self.dumpBlockStack()
+
+        return old_top
+
+    def dumpBlockStack(self):
+        self.logger.debug('Block stack, top first:')
+        for distFromTop, x in enumerate(reversed(self.block_stack)):
+            self.logger.debug(' - block_stack[%d]: Line %d: "%s" refpage=%s',
+                              -1 - distFromTop,
+                              x.context.lineNum, x.delimiter, x.refpage)
+
+    def getBriefLocation(self, context):
+        """Format a context briefly - omitting the filename if it has newlines in it."""
+        if '\n' in context.filename:
+            return 'input string line {}'.format(context.lineNum)
+        return '{}:{}'.format(
+            context.filename, context.lineNum)
+
+    ###
+    # Handlers for a variety of diagnostic-meriting conditions
+    #
+    # Split out for clarity and for allowing fine-grained override on a per-project basis.
+    ###
+
+    def handleIncludeMissingRefPage(self, entity, generated_type):
+        """Report a message about an include outside of a ref-page block."""
+        msg = ["Found {} include for {} outside of a reference page block.".format(generated_type, entity),
+               "This is probably a missing reference page block."]
+        refpage = self.computeExpectedRefPageFromInclude(entity)
+        data = self.checker.findEntity(refpage)
+        if data:
+            msg.append('Expected ref page block might start like:')
+            msg.append(self.makeRefPageTag(refpage, data=data))
+        else:
+            msg.append(
+                "But, expected ref page entity name {} isn't recognized...".format(refpage))
+        self.warning(MessageId.REFPAGE_MISSING, msg)
+
+    def handleIncludeMismatchRefPage(self, entity, generated_type):
+        """Report a message about an include not matching its containing ref-page block."""
+        self.warning(MessageId.REFPAGE_MISMATCH, "Found {} include for {}, inside the reference page block of {}".format(
+            generated_type, entity, self.current_ref_page.entity))
+
+    def handleWrongMacro(self, msg, data):
+        """Report an appropriate message when we found that the macro used is incorrect.
+
+        May be overridden depending on each API's behavior regarding macro misuse:
+        e.g. in some cases, it may be considered a MessageId.LEGACY warning rather than
+        a MessageId.WRONG_MACRO or MessageId.EXTENSION.
+        """
+        message_type = MessageType.WARNING
+        message_id = MessageId.WRONG_MACRO
+        group = 'macro'
+
+        if data.category == EXTENSION_CATEGORY:
+            # Ah, this is an extension
+            msg.append(
+                'This is apparently an extension name, which should be marked up as a link.')
+            message_id = MessageId.EXTENSION
+            group = None  # replace the whole thing
+        else:
+            # Non-extension, we found the macro though.
+            message_type = MessageType.ERROR
+        msg.append(AUTO_FIX_STRING)
+        self.diag(message_type, message_id, msg,
+                  group=group, replacement=self.makeMacroMarkup(data=data), fix=self.makeFix(data=data))
+
+    def handleExpectedRefpageBlock(self):
+        """Handle expecting to see -- to start a refpage block, but not seeing that at all."""
+        self.error(MessageId.REFPAGE_BLOCK,
+                   ["Expected, but did not find, a line containing only -- following a reference page tag,",
+                    "Pretending to insert one, for more readable messages."],
+                   see_also=[self.prev_line_ref_page_tag])
+        # Fake "in ref page" regardless, to avoid spurious extra errors.
+        self.processBlockDelimiter('--', BlockType.REF_PAGE_LIKE,
+                                   context=self.prev_line_ref_page_tag)
+
+    ###
+    # Construct related values (typically named tuples) based on object state and supplied arguments.
+    #
+    # Results are typically supplied to another method call.
+    ###
+
+    def storeMessageContext(self, group=None, match=None):
+        """Create message context from corresponding instance variables.
+
+        Arguments:
+        group -- The regex group name, if any, identifying the part of the match to highlight.
+        match -- The regex match. If None, will use self.match.
+        """
+        if match is None:
+            match = self.match
+        return MessageContext(filename=self.filename,
+                              lineNum=self.lineNum,
+                              line=self.line,
+                              match=match,
+                              group=group)
+
+    def makeFix(self, newMacro=None, newEntity=None, data=None):
+        """Construct a fix pair for replacing the old macro:entity with new.
+
+        Wrapper around self.makeSearch() and self.makeMacroMarkup().
+        """
+        return (self.makeSearch(), self.makeMacroMarkup(
+            newMacro, newEntity, data))
+
+    def makeSearch(self):
+        """Construct the string self.macro:self.entity, for use in the old text part of a fix pair."""
+        return '{}:{}'.format(self.macro, self.entity)
+
+    def makeMacroMarkup(self, newMacro=None, newEntity=None, data=None):
+        """Construct appropriate markup for referring to an entity.
+
+        Typically constructs macro:entity, but can construct `<<EXTENSION_NAME>>` if the supplied
+        entity is identified as an extension.
+
+        Arguments:
+        newMacro -- The macro to use. Defaults to data.macro (if available), otherwise self.macro.
+        newEntity -- The entity to use. Defaults to data.entity (if available), otherwise self.entity.
+        data -- An EntityData value corresponding to this entity. If not provided, will be looked up by newEntity.
+        """
+        if not newEntity:
+            if data:
+                newEntity = data.entity
+            else:
+                newEntity = self.entity
+        if not newMacro:
+            if data:
+                newMacro = data.macro
+            else:
+                newMacro = self.macro
+        if not data:
+            data = self.checker.findEntity(newEntity)
+        if data and data.category == EXTENSION_CATEGORY:
+            return self.makeExtensionLink(newEntity)
+        return '{}:{}'.format(newMacro, newEntity)
+
+    def makeExtensionLink(self, newEntity=None):
+        """Create a correctly-formatted link to an extension.
+
+        Result takes the form `<<EXTENSION_NAME>>`.
+
+        Argument:
+        newEntity -- The extension name to link to. Defaults to self.entity.
+        """
+        if not newEntity:
+            newEntity = self.entity
+        return '`<<{}>>`'.format(newEntity)
+
+    def computeExpectedRefPageFromInclude(self, entity):
+        """Compute the expected ref page entity based on an include entity name."""
+        # No-op in general.
+        return entity
+
+    def makeRefPageTag(self, entity, data=None,
+                       ref_type=None, desc='', xrefs=None):
+        """Construct a ref page tag string from attribute values."""
+        if ref_type is None and data is not None:
+            ref_type = data.directory
+        if ref_type is None:
+            ref_type = "????"
+        return "[open,refpage='{}',type='{}',desc='{}',xrefs='{}']".format(
+            entity, ref_type, desc, ' '.join(xrefs or []))
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/main.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/main.py
new file mode 100644
index 0000000..2cd4f69
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/main.py
@@ -0,0 +1,244 @@
+"""Provides a re-usable command-line interface to a MacroChecker."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+
+import argparse
+import logging
+import re
+from pathlib import Path
+
+from .shared import MessageId
+
+
+def checkerMain(default_enabled_messages, make_macro_checker,
+                all_docs, available_messages=None):
+    """Perform the bulk of the work for a command-line interface to a MacroChecker.
+
+    Arguments:
+    default_enabled_messages -- The MessageId values that should be enabled by default.
+    make_macro_checker -- A function that can be called with a set of enabled MessageId to create a
+      properly-configured MacroChecker.
+    all_docs -- A list of all spec documentation files.
+    available_messages -- a list of all MessageId values that can be generated for this project.
+      Defaults to every value. (e.g. some projects don't have MessageId.LEGACY)
+    """
+    enabled_messages = set(default_enabled_messages)
+    if not available_messages:
+        available_messages = list(MessageId)
+
+    disable_args = []
+    enable_args = []
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        "--scriptlocation",
+        help="Append the script location generated a message to the output.",
+        action="store_true")
+    parser.add_argument(
+        "--verbose",
+        "-v",
+        help="Output 'info'-level development logging messages.",
+        action="store_true")
+    parser.add_argument(
+        "--debug",
+        "-d",
+        help="Output 'debug'-level development logging messages (more verbose than -v).",
+        action="store_true")
+    parser.add_argument(
+        "-Werror",
+        "--warning_error",
+        help="Make warnings act as errors, exiting with non-zero error code",
+        action="store_true")
+    parser.add_argument(
+        "--include_warn",
+        help="List all expected but unseen include files, not just those that are referenced.",
+        action='store_true')
+    parser.add_argument(
+        "-Wmissing_refpages",
+        help="List all entities with expected but unseen ref page blocks. NOT included in -Wall!",
+        action='store_true')
+    parser.add_argument(
+        "--include_error",
+        help="Make expected but unseen include files cause exiting with non-zero error code",
+        action='store_true')
+    parser.add_argument(
+        "--broken_error",
+        help="Make missing include/anchor for linked-to entities cause exiting with non-zero error code. Weaker version of --include_error.",
+        action='store_true')
+    parser.add_argument(
+        "--dump_entities",
+        help="Just dump the parsed entity data to entities.json and exit.",
+        action='store_true')
+    parser.add_argument(
+        "--html",
+        help="Output messages to the named HTML file instead of stdout.")
+    parser.add_argument(
+        "file",
+        help="Only check the indicated file(s). By default, all chapters and extensions are checked.",
+        nargs="*")
+    parser.add_argument(
+        "--ignore_count",
+        type=int,
+        help="Ignore up to the given number of errors without exiting with a non-zero error code.")
+    parser.add_argument("-Wall",
+                        help="Enable all warning categories.",
+                        action='store_true')
+
+    for message_id in MessageId:
+        enable_arg = message_id.enable_arg()
+        enable_args.append((message_id, enable_arg))
+
+        disable_arg = message_id.disable_arg()
+        disable_args.append((message_id, disable_arg))
+        if message_id in enabled_messages:
+            parser.add_argument('-' + disable_arg, action="store_true",
+                                help="Disable message category {}: {}".format(str(message_id), message_id.desc()))
+            # Don't show the enable flag in help since it's enabled by default
+            parser.add_argument('-' + enable_arg, action="store_true",
+                                help=argparse.SUPPRESS)
+        else:
+            parser.add_argument('-' + enable_arg, action="store_true",
+                                help="Enable message category {}: {}".format(str(message_id), message_id.desc()))
+            # Don't show the disable flag in help since it's disabled by
+            # default
+            parser.add_argument('-' + disable_arg, action="store_true",
+                                help=argparse.SUPPRESS)
+
+    args = parser.parse_args()
+
+    arg_dict = vars(args)
+    for message_id, arg in enable_args:
+        if args.Wall or (arg in arg_dict and arg_dict[arg]):
+            enabled_messages.add(message_id)
+
+    for message_id, arg in disable_args:
+        if arg in arg_dict and arg_dict[arg]:
+            enabled_messages.discard(message_id)
+
+    if args.verbose:
+        logging.basicConfig(level='INFO')
+
+    if args.debug:
+        logging.basicConfig(level='DEBUG')
+
+    checker = make_macro_checker(enabled_messages)
+
+    if args.dump_entities:
+        with open('entities.json', 'w', encoding='utf-8') as f:
+            f.write(checker.getEntityJson())
+            exit(0)
+
+    if args.file:
+        files = (str(Path(f).resolve()) for f in args.file)
+    else:
+        files = all_docs
+
+    for fn in files:
+        checker.processFile(fn)
+
+    if args.html:
+        from .html_printer import HTMLPrinter
+        printer = HTMLPrinter(args.html)
+    else:
+        from .console_printer import ConsolePrinter
+        printer = ConsolePrinter()
+
+    if args.scriptlocation:
+        printer.show_script_location = True
+
+    if args.file:
+        printer.output("Only checked specified files.")
+        for f in args.file:
+            printer.output(f)
+    else:
+        printer.output("Checked all chapters and extensions.")
+
+    if args.warning_error:
+        numErrors = checker.numDiagnostics()
+    else:
+        numErrors = checker.numErrors()
+
+    check_includes = args.include_warn
+    check_broken = not args.file
+
+    if args.file and check_includes:
+        print('Note: forcing --include_warn off because only checking supplied files.')
+        check_includes = False
+
+    printer.outputResults(checker, broken_links=(not args.file),
+                          missing_includes=check_includes)
+
+    if check_broken:
+        numErrors += len(checker.getBrokenLinks())
+
+    if args.file and args.include_error:
+        print('Note: forcing --include_error off because only checking supplied files.')
+        args.include_error = False
+    if args.include_error:
+        numErrors += len(checker.getMissingUnreferencedApiIncludes())
+
+    check_missing_refpages = args.Wmissing_refpages
+    if args.file and check_missing_refpages:
+        print('Note: forcing -Wmissing_refpages off because only checking supplied files.')
+        check_missing_refpages = False
+
+    if check_missing_refpages:
+        missing = checker.getMissingRefPages()
+        if missing:
+            printer.output("Expected, but did not find, ref page blocks for the following {} entities: {}".format(
+                len(missing),
+                ', '.join(missing)
+            ))
+            if args.warning_error:
+                numErrors += len(missing)
+
+    printer.close()
+
+    if args.broken_error and not args.file:
+        numErrors += len(checker.getBrokenLinks())
+
+    if checker.hasFixes():
+        fixFn = 'applyfixes.sh'
+        print('Saving shell script to apply fixes as {}'.format(fixFn))
+        with open(fixFn, 'w', encoding='utf-8') as f:
+            f.write('#!/bin/sh -e\n')
+            for fileChecker in checker.files:
+                wroteComment = False
+                for msg in fileChecker.messages:
+                    if msg.fix is not None:
+                        if not wroteComment:
+                            f.write('\n# {}\n'.format(fileChecker.filename))
+                            wroteComment = True
+                        search, replace = msg.fix
+                        f.write(
+                            r"sed -i -r 's~\b{}\b~{}~g' {}".format(
+                                re.escape(search),
+                                replace,
+                                fileChecker.filename))
+                        f.write('\n')
+
+    print('Total number of errors with this run: {}'.format(numErrors))
+
+    if args.ignore_count:
+        if numErrors > args.ignore_count:
+            # Exit with non-zero error code so that we "fail" CI, etc.
+            print('Exceeded specified limit of {}, so exiting with error'.format(
+                args.ignore_count))
+            exit(1)
+        else:
+            print('At or below specified limit of {}, so exiting with success'.format(
+                args.ignore_count))
+            exit(0)
+
+    if numErrors:
+        # Exit with non-zero error code so that we "fail" CI, etc.
+        print('Exiting with error')
+        exit(1)
+    else:
+        print('Exiting with success')
+        exit(0)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/shared.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/shared.py
new file mode 100644
index 0000000..458632e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/shared.py
@@ -0,0 +1,257 @@
+"""Types, constants, and utility functions used by multiple sub-modules in spec_tools."""
+
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+import platform
+from collections import namedtuple
+from enum import Enum
+from inspect import getframeinfo
+from pathlib import Path
+from sys import stdout
+
+# if we have termcolor and we know our stdout is a TTY,
+# pull it in and use it.
+if hasattr(stdout, 'isatty') and stdout.isatty():
+    try:
+        from termcolor import colored as colored_impl
+        HAVE_COLOR = True
+    except ImportError:
+        HAVE_COLOR = False
+elif platform.system() == 'Windows':
+    try:
+        from termcolor import colored as colored_impl
+        import colorama
+        colorama.init()
+        HAVE_COLOR = True
+    except ImportError:
+        HAVE_COLOR = False
+
+else:
+    HAVE_COLOR = False
+
+
+def colored(s, color=None, attrs=None):
+    """Call termcolor.colored with same arguments if this is a tty and it is available."""
+    if HAVE_COLOR:
+        return colored_impl(s, color, attrs=attrs)
+    return s
+
+
+###
+# Constants used in multiple places.
+AUTO_FIX_STRING = 'Note: Auto-fix available.'
+EXTENSION_CATEGORY = 'extension'
+CATEGORIES_WITH_VALIDITY = set(('protos', 'structs'))
+NON_EXISTENT_MACROS = set(('plink', 'ttext', 'dtext'))
+
+###
+# MessageContext: All the information about where a message relates to.
+MessageContext = namedtuple('MessageContext',
+                            ['filename', 'lineNum', 'line',
+                             'match', 'group'])
+
+
+def getInterestedRange(message_context):
+    """Return a (start, end) pair of character index for the match in a MessageContext."""
+    if not message_context.match:
+        # whole line
+        return (0, len(message_context.line))
+    return (message_context.match.start(), message_context.match.end())
+
+
+def getHighlightedRange(message_context):
+    """Return a (start, end) pair of character index for the highlighted range in a MessageContext."""
+    if message_context.group is not None and message_context.match is not None:
+        return (message_context.match.start(message_context.group),
+                message_context.match.end(message_context.group))
+    # no group (whole match) or no match (whole line)
+    return getInterestedRange(message_context)
+
+
+def toNameAndLine(context, root_path=None):
+    """Convert MessageContext into a simple filename:line string."""
+    my_fn = Path(context.filename)
+    if root_path:
+        my_fn = my_fn.relative_to(root_path)
+    return '{}:{}'.format(str(my_fn), context.lineNum)
+
+
+def generateInclude(dir_traverse, generated_type, category, entity):
+    """Create an include:: directive for generated api or validity from the various pieces."""
+    return f'include::{dir_traverse}{generated_type}/{category}/{entity}.adoc[]'
+
+
+# Data stored per entity (function, struct, enumerant type, enumerant, extension, etc.)
+EntityData = namedtuple(
+    'EntityData', ['entity', 'macro', 'elem', 'filename', 'category', 'directory'])
+
+
+class MessageType(Enum):
+    """Type of a message."""
+
+    WARNING = 1
+    ERROR = 2
+    NOTE = 3
+
+    def __str__(self):
+        """Format a MessageType as a lowercase string."""
+        return str(self.name).lower()
+
+    def formattedWithColon(self):
+        """Format a MessageType as a colored, lowercase string followed by a colon."""
+        if self == MessageType.WARNING:
+            return colored(str(self) + ':', 'magenta', attrs=['bold'])
+        if self == MessageType.ERROR:
+            return colored(str(self) + ':', 'red', attrs=['bold'])
+        return str(self) + ':'
+
+
+class MessageId(Enum):
+    # Disable bogus pylint warnings in this enum
+    # pylint: disable=no-member
+    """Enumerates the varieties of messages that can be generated.
+
+    Control over enabled messages with -Wbla or -Wno_bla is per-MessageId.
+    """
+
+    MISSING_TEXT = 1
+    LEGACY = 2
+    WRONG_MACRO = 3
+    MISSING_MACRO = 4
+    BAD_ENTITY = 5
+    BAD_ENUMERANT = 6
+    BAD_MACRO = 7
+    UNRECOGNIZED_CONTEXT = 8
+    UNKNOWN_MEMBER = 9
+    DUPLICATE_INCLUDE = 10
+    UNKNOWN_INCLUDE = 11
+    API_VALIDITY_ORDER = 12
+    UNDOCUMENTED_MEMBER = 13
+    MEMBER_PNAME_MISSING = 14
+    MISSING_VALIDITY_INCLUDE = 15
+    MISSING_API_INCLUDE = 16
+    MISUSED_TEXT = 17
+    EXTENSION = 18
+    REFPAGE_TAG = 19
+    REFPAGE_MISSING_DESC = 20
+    REFPAGE_XREFS = 21
+    REFPAGE_XREFS_COMMA = 22
+    REFPAGE_TYPE = 23
+    REFPAGE_NAME = 24
+    REFPAGE_BLOCK = 25
+    REFPAGE_MISSING = 26
+    REFPAGE_MISMATCH = 27
+    REFPAGE_UNKNOWN_ATTRIB = 28
+    REFPAGE_SELF_XREF = 29
+    REFPAGE_XREF_DUPE = 30
+    REFPAGE_WHITESPACE = 31
+    REFPAGE_DUPLICATE = 32
+    UNCLOSED_BLOCK = 33
+    MISSING_INCLUDE_PATH_ATTRIBUTE = 34
+
+    def __str__(self):
+        """Format as a lowercase string."""
+        return self.name.lower()
+
+    def enable_arg(self):
+        """Return the corresponding Wbla string to make the 'enable this message' argument."""
+        return 'W{}'.format(self.name.lower())
+
+    def disable_arg(self):
+        """Return the corresponding Wno_bla string to make the 'enable this message' argument."""
+        return 'Wno_{}'.format(self.name.lower())
+
+    def desc(self):
+        """Return a brief description of the MessageId suitable for use in --help."""
+        return _MESSAGE_DESCRIPTIONS[self]
+
+
+_MESSAGE_DESCRIPTIONS = {
+    MessageId.MISSING_TEXT: "a *text: macro is expected but not found",
+    MessageId.LEGACY: "legacy usage of *name: macro when *link: is applicable",
+    MessageId.WRONG_MACRO: "wrong macro used for an entity",
+    MessageId.MISSING_MACRO: "a macro might be missing",
+    MessageId.BAD_ENTITY: "entity not recognized, etc.",
+    MessageId.BAD_ENUMERANT: "unrecognized enumerant value used in ename:",
+    MessageId.BAD_MACRO: "unrecognized macro used",
+    MessageId.UNRECOGNIZED_CONTEXT: "pname used with an unrecognized context",
+    MessageId.UNKNOWN_MEMBER: "pname used but member/argument by that name not found",
+    MessageId.DUPLICATE_INCLUDE: "duplicated include line",
+    MessageId.UNKNOWN_INCLUDE: "include line specified file we wouldn't expect to exists",
+    MessageId.API_VALIDITY_ORDER: "saw API include after validity include",
+    MessageId.UNDOCUMENTED_MEMBER: "saw an apparent struct/function documentation, but missing a member",
+    MessageId.MEMBER_PNAME_MISSING: "pname: missing from a 'scope' operator",
+    MessageId.MISSING_VALIDITY_INCLUDE: "missing validity include",
+    MessageId.MISSING_API_INCLUDE: "missing API include",
+    MessageId.MISUSED_TEXT: "a *text: macro is found but not expected",
+    MessageId.EXTENSION: "an extension name is incorrectly marked",
+    MessageId.REFPAGE_TAG: "a refpage tag is missing an expected field",
+    MessageId.REFPAGE_MISSING_DESC: "a refpage tag has an empty description",
+    MessageId.REFPAGE_XREFS: "an unrecognized entity is mentioned in xrefs of a refpage tag",
+    MessageId.REFPAGE_XREFS_COMMA: "a comma was founds in xrefs of a refpage tag, which is space-delimited",
+    MessageId.REFPAGE_TYPE: "a refpage tag has an incorrect type field",
+    MessageId.REFPAGE_NAME: "a refpage tag has an unrecognized entity name in its refpage field",
+    MessageId.REFPAGE_BLOCK: "a refpage block is not correctly opened or closed.",
+    MessageId.REFPAGE_MISSING: "an API include was found outside of a refpage block.",
+    MessageId.REFPAGE_MISMATCH: "an API or validity include was found in a non-matching refpage block.",
+    MessageId.REFPAGE_UNKNOWN_ATTRIB: "a refpage tag has an unrecognized attribute",
+    MessageId.REFPAGE_SELF_XREF: "a refpage tag has itself in the list of cross-references",
+    MessageId.REFPAGE_XREF_DUPE: "a refpage cross-references list has at least one duplicate",
+    MessageId.REFPAGE_WHITESPACE: "a refpage cross-references list has non-minimal whitespace",
+    MessageId.REFPAGE_DUPLICATE: "a refpage tag has been seen for a single entity for a second time",
+    MessageId.UNCLOSED_BLOCK: "one or more blocks remain unclosed at the end of a file",
+    MessageId.MISSING_INCLUDE_PATH_ATTRIBUTE: "include:: directives must begin with a recognized path attribute macro",
+}
+
+
+class Message(object):
+    """An Error, Warning, or Note with a MessageContext, MessageId, and message text.
+
+    May optionally have a replacement, a see_also array, an auto-fix,
+    and a stack frame where the message was created.
+    """
+
+    def __init__(self, message_id, message_type, message, context,
+                 replacement=None, see_also=None, fix=None, frame=None):
+        """Construct a Message.
+
+        Typically called by MacroCheckerFile.diag().
+        """
+        self.message_id = message_id
+
+        self.message_type = message_type
+
+        if isinstance(message, str):
+            self.message = [message]
+        else:
+            self.message = message
+
+        self.context = context
+        if context is not None and context.match is not None and context.group is not None:
+            if context.group not in context.match.groupdict():
+                raise RuntimeError(
+                    'Group "{}" does not exist in the match'.format(context.group))
+
+        self.replacement = replacement
+
+        self.fix = fix
+
+        if see_also is None:
+            self.see_also = None
+        elif isinstance(see_also, MessageContext):
+            self.see_also = [see_also]
+        else:
+            self.see_also = see_also
+
+        self.script_location = None
+        if frame:
+            try:
+                frameinfo = getframeinfo(frame)
+                self.script_location = "{}:{}".format(
+                    frameinfo.filename, frameinfo.lineno)
+            finally:
+                del frame
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/util.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/util.py
new file mode 100644
index 0000000..bf25845
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/util.py
@@ -0,0 +1,58 @@
+"""Utility functions not closely tied to other spec_tools types."""
+# Copyright (c) 2018-2019 Collabora, Ltd.
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+
+def getElemName(elem, default=None):
+    """Get the name associated with an element, either a name child or name attribute."""
+    name_elem = elem.find('name')
+    if name_elem is not None:
+        return name_elem.text
+    # Fallback if there is no child.
+    return elem.get('name', default)
+
+
+def getElemType(elem, default=None):
+    """Get the type associated with an element, either a type child or type attribute."""
+    type_elem = elem.find('type')
+    if type_elem is not None:
+        return type_elem.text
+    # Fallback if there is no child.
+    return elem.get('type', default)
+
+
+def findFirstWithPredicate(collection, pred):
+    """Return the first element that satisfies the predicate, or None if none exist.
+
+    NOTE: Some places where this is used might be better served by changing to a dictionary.
+    """
+    for elt in collection:
+        if pred(elt):
+            return elt
+    return None
+
+
+def findNamedElem(elems, name):
+    """Traverse a collection of elements with 'name' nodes or attributes, looking for and returning one with the right name.
+
+    NOTE: Many places where this is used might be better served by changing to a dictionary.
+    """
+    return findFirstWithPredicate(elems, lambda elem: getElemName(elem) == name)
+
+
+def findTypedElem(elems, typename):
+    """Traverse a collection of elements with 'type' nodes or attributes, looking for and returning one with the right typename.
+
+    NOTE: Many places where this is used might be better served by changing to a dictionary.
+    """
+    return findFirstWithPredicate(elems, lambda elem: getElemType(elem) == typename)
+
+
+def findNamedObject(collection, name):
+    """Traverse a collection of elements with 'name' attributes, looking for and returning one with the right name.
+
+    NOTE: Many places where this is used might be better served by changing to a dictionary.
+    """
+    return findFirstWithPredicate(collection, lambda elt: elt.name == name)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/validity.py b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/validity.py
new file mode 100644
index 0000000..18f9f97
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spec_tools/validity.py
@@ -0,0 +1,225 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import re
+
+
+_A_VS_AN_RE = re.compile(r' a ([a-z]+:)?([aAeEiIoOxX]\w+\b)(?!:)')
+
+_STARTS_WITH_MACRO_RE = re.compile(r'^[a-z]+:.*')
+
+_VUID_ANCHOR_RE = re.compile(r'\[\[VUID-.*\]\]')
+
+
+def _checkAnchorComponents(anchor):
+    """Raise an exception if any component of a VUID anchor name is illegal."""
+    if anchor:
+        # Any other invalid things in an anchor name should be detected here.
+        if any((' ' in anchor_part for anchor_part in anchor)):
+            raise RuntimeError("Illegal component of a VUID anchor name!")
+
+
+def _fix_a_vs_an(s):
+    """Fix usage (often generated) of the indefinite article 'a' when 'an' is appropriate.
+
+    Explicitly excludes the markup macros."""
+    return _A_VS_AN_RE.sub(r' an \1\2', s)
+
+
+class ValidityCollection:
+    """Combines validity for a single entity."""
+
+    def __init__(self, entity_name=None, conventions=None, strict=True, verbose=False):
+        self.entity_name = entity_name
+        self.conventions = conventions
+        self.lines = []
+        self.strict = strict
+        self.verbose = verbose
+
+    def possiblyAddExtensionRequirement(self, extension_name, entity_preface):
+        """Add an extension-related validity statement if required.
+
+        entity_preface is a string that goes between "must be enabled prior to "
+        and the name of the entity, and normally ends in a macro.
+        For instance, might be "calling flink:" for a function.
+        """
+        if extension_name and not extension_name.startswith(self.conventions.api_version_prefix):
+            msg = 'The {} extension must: be enabled prior to {}{}'.format(
+                self.conventions.formatExtension(extension_name), entity_preface, self.entity_name)
+            self.addValidityEntry(msg, anchor=('extension', 'notenabled'))
+
+    def addValidityEntry(self, msg, anchor=None):
+        """Add a validity entry, optionally with a VUID anchor.
+
+        If any trailing arguments are supplied,
+        an anchor is generated by concatenating them with dashes
+        at the end of the VUID anchor name.
+        """
+        if not msg:
+            raise RuntimeError("Tried to add a blank validity line!")
+        parts = ['*']
+        _checkAnchorComponents(anchor)
+        if anchor:
+            if not self.entity_name:
+                raise RuntimeError('Cannot add a validity entry with an anchor to a collection that does not know its entity name.')
+            parts.append('[[{}]]'.format(
+                '-'.join(['VUID', self.entity_name] + list(anchor))))
+        parts.append(msg)
+        combined = _fix_a_vs_an(' '.join(parts))
+        if combined in self.lines:
+            raise RuntimeError("Duplicate validity added!")
+        self.lines.append(combined)
+
+    def addText(self, msg):
+        """Add already formatted validity text."""
+        if self.strict:
+            raise RuntimeError('addText called when collection in strict mode')
+        if not msg:
+            return
+        msg = msg.rstrip()
+        if not msg:
+            return
+        self.lines.append(msg)
+
+    def _extend(self, lines):
+        lines = list(lines)
+        dupes = set(lines).intersection(self.lines)
+        if dupes:
+            raise RuntimeError("The two sets contain some shared entries! " + str(dupes))
+        self.lines.extend(lines)
+
+    def __iadd__(self, other):
+        """Perform += with a string, iterable, or ValidityCollection."""
+        if other is None:
+            pass
+        elif isinstance(other, str):
+            if self.strict:
+                raise RuntimeError(
+                    'Collection += a string when collection in strict mode')
+            if not other:
+                # empty string
+                pass
+            elif other.startswith('*'):
+                # Handle already-formatted
+                self.addText(other)
+            else:
+                # Do the formatting ourselves.
+                self.addValidityEntry(other)
+        elif isinstance(other, ValidityEntry):
+            if other:
+                if other.verbose:
+                    print(self.entity_name, 'Appending', str(other))
+                self.addValidityEntry(str(other), anchor=other.anchor)
+        elif isinstance(other, ValidityCollection):
+            if self.entity_name == other.entity_name:
+                self._extend(other.lines)
+            else:
+                # Remove foreign anchors - this is presumably an alias
+                if other.verbose:
+                    print(self.entity_name,
+                          'merging with validity for',
+                          other.entity_name,
+                          'so removing VUID anchor on incoming entries')
+                self._extend(_VUID_ANCHOR_RE.sub('', s, 1) for s in other.lines)
+        else:
+            # Deal with other iterables.
+            self._extend(other)
+
+        return self
+
+    def __bool__(self):
+        """Is the collection non-empty?"""
+        empty = not self.lines
+        return not empty
+
+    @property
+    def text(self):
+        """Access validity statements as a single string or None."""
+        if not self.lines:
+            return None
+        return '\n'.join(self.lines) + '\n'
+
+    def __str__(self):
+        """Access validity statements as a single string or empty string."""
+        if not self:
+            return ''
+        return self.text
+
+    def __repr__(self):
+        return '<ValidityCollection: {}>'.format(self.lines)
+
+
+class ValidityEntry:
+    """A single validity line in progress."""
+
+    def __init__(self, text=None, anchor=None):
+        """Prepare to add a validity entry, optionally with a VUID anchor.
+
+        An anchor is generated by concatenating the elements of the anchor tuple with dashes
+        at the end of the VUID anchor name.
+        """
+        _checkAnchorComponents(anchor)
+        if isinstance(anchor, str):
+            # anchor needs to be a tuple
+            anchor = (anchor,)
+
+        # VUID does not allow special chars except ":"
+        if anchor is not None:
+            anchor = [(anchor_value.replace('->', '::').replace('.', '::')) for anchor_value in anchor]
+
+        self.anchor = anchor
+        self.parts = []
+        self.verbose = False
+        if text:
+            self.append(text)
+
+    def append(self, part):
+        """Append a part of a string.
+
+        If this is the first entry part and the part doesn't start
+        with a markup macro, the first character will be capitalized."""
+        if not self.parts and not _STARTS_WITH_MACRO_RE.match(part):
+            self.parts.append(part[:1].upper())
+            self.parts.append(part[1:])
+        else:
+            self.parts.append(part)
+        if self.verbose:
+            print('ValidityEntry', id(self), 'after append:', str(self))
+
+    def drop_end(self, n):
+        """Remove up to n trailing characters from the string."""
+        temp = str(self)
+        n = min(len(temp), n)
+        self.parts = [temp[:-n]]
+
+    def __iadd__(self, other):
+        """Perform += with a string,"""
+        self.append(other)
+        return self
+
+    def __bool__(self):
+        """Return true if we have something more than just an anchor."""
+        empty = not self.parts
+        return not empty
+
+    def __str__(self):
+        """Access validity statement as a single string or empty string."""
+        if not self:
+            raise RuntimeError("No parts added?")
+        return ''.join(self.parts).strip()
+
+    def __repr__(self):
+        parts = ['<ValidityEntry: ']
+        if self:
+            parts.append('"')
+            parts.append(str(self))
+            parts.append('"')
+        else:
+            parts.append('EMPTY')
+        if self.anchor:
+            parts.append(', anchor={}'.format('-'.join(self.anchor)))
+        parts.append('>')
+        return ''.join(parts)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/spirvcapgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/spirvcapgenerator.py
new file mode 100644
index 0000000..71eba3d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/spirvcapgenerator.py
@@ -0,0 +1,238 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, write
+from spec_tools.attributes import ExternSyncEntry
+from spec_tools.util import getElemName
+
+import pdb
+
+def makeLink(link, altlink = None):
+    """Create an asciidoctor link, optionally with altlink text
+       if provided"""
+
+    if altlink is not None:
+        return '<<{},{}>>'.format(link, altlink)
+    else:
+        return '<<{}>>'.format(link)
+
+class SpirvCapabilityOutputGenerator(OutputGenerator):
+    """SpirvCapabilityOutputGenerator - subclass of OutputGenerator.
+    Generates AsciiDoc includes of the SPIR-V capabilities table for the
+    features chapter of the API specification.
+
+    ---- methods ----
+    SpirvCapabilityOutputGenerator(errFile, warnFile, diagFile) - args as for
+      OutputGenerator. Defines additional internal state.
+    ---- methods overriding base class ----
+    genCmd(cmdinfo)"""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts)
+
+        # Accumulate SPIR-V capability and feature information
+        self.spirv = []
+
+    def getCondition(self, enable, parent):
+        """Return a strings which is the condition under which an
+           enable is supported.
+
+         - enable - ElementTree corresponding to an <enable> XML tag for a
+           SPIR-V capability or extension
+         - parent - Parent <spirvcapability> or <spirvenable> ElementTree,
+           used for error reporting"""
+
+        if enable.get('version'):
+            return enable.get('version')
+        elif enable.get('extension'):
+            return enable.get('extension')
+        elif enable.get('struct') or enable.get('property'):
+            return enable.get('requires')
+        else:
+            self.logMsg('error', f"<{parent.tag} name=\"{parent.get('name')}\"> is missing a required attribute for an <enable>")
+            return ''
+
+    def getConditions(self, enables):
+        """Return a sorted list of strings which are conditions under which
+           one or more of the enables is supported.
+
+         - enables - ElementTree corresponding to a <spirvcapability> or
+           <spirvextension> XML tag"""
+
+        conditions = set()
+        for enable in enables.findall('enable'):
+            condition = self.getCondition(enable, parent=enables)
+            if condition != None:
+                conditions.add(condition)
+        return sorted(conditions)
+
+    def endFile(self):
+        captable = []
+        exttable = []
+
+        # How to "indent" a pseudo-column for better use of space.
+        # {captableindent} is defined in appendices/spirvenv.adoc
+        indent = '{captableindent}'
+
+        for elem in self.spirv:
+            conditions = self.getConditions(elem)
+
+            # Combine all conditions for enables and surround the row with
+            # them
+            if len(conditions) > 0:
+                condition_string = ','.join(conditions)
+                prefix = [ 'ifdef::{}[]'.format(condition_string) ]
+                suffix = [ 'endif::{}[]'.format(condition_string) ]
+            else:
+                prefix = []
+                suffix = []
+
+            body = []
+
+            # Generate an anchor for each capability
+            if elem.tag == 'spirvcapability':
+                anchor = '[[spirvenv-capabilities-table-{}]]'.format(
+                    elem.get('name'))
+            else:
+                # <spirvextension> entries do not get anchors
+                anchor = ''
+
+            # First "cell" in a table row, and a break for the other "cells"
+            body.append('| {}code:{} +'.format(anchor, elem.get('name')))
+
+            # Iterate over each enable emitting a formatting tag for it
+            # Protect the term if there is a version or extension
+            # requirement, and if there are multiple enables (otherwise,
+            # the ifdef protecting the entire row will suffice).
+
+            enables = [e for e in elem.findall('enable')]
+
+            remaining = len(enables)
+            for subelem in enables:
+                remaining -= 1
+
+                # Sentinel value
+                linktext = None
+                if subelem.get('version'):
+                    version = subelem.get('version')
+
+                    # Convert API enum to anchor for version appendices (versions-m.n)
+                    # version must be the spec conditional macro VK_VERSION_m_n, not
+                    # the API version macro VK_API_VERSION_m_n.
+                    enable = version
+                    link = 'versions-' + version[-3:].replace('_', '.')
+                    altlink = version
+
+                    linktext = makeLink(link, altlink)
+                elif subelem.get('extension'):
+                    extension = subelem.get('extension')
+
+                    enable = extension
+                    link = extension
+                    altlink = None
+
+                    # This uses the extension name macro, rather than
+                    # asciidoc markup
+                    linktext = '`apiext:{}`'.format(extension)
+                elif subelem.get('struct'):
+                    struct = subelem.get('struct')
+                    feature = subelem.get('feature')
+                    requires = subelem.get('requires')
+                    alias = subelem.get('alias')
+
+                    link_name = feature
+                    # For cases, like bufferDeviceAddressEXT where need manual help
+                    if alias:
+                        link_name = alias
+                    exceptions = {
+                        'VkPhysicalDeviceCooperativeMatrixFeaturesNV::cooperativeMatrix': 'cooperativeMatrix-NV',
+                    }
+                    if struct + '::' + feature in exceptions:
+                        link_name = exceptions[struct + '::' + feature]
+
+                    enable = requires
+                    link = 'features-' + link_name
+                    altlink = 'sname:{}::pname:{}'.format(struct, feature)
+
+                    linktext = makeLink(link, altlink)
+                else:
+                    property = subelem.get('property')
+                    member = subelem.get('member')
+                    requires = subelem.get('requires')
+                    value = subelem.get('value')
+
+                    enable = requires
+                    # Properties should have a "feature" prefix
+                    link = 'limits-' + member
+                    # Display the property value by itself if it is not a boolean (matches original table)
+                    # DenormPreserve is an example where it makes sense to just show the
+                    #   member value as it is just a boolean and the name implies "true"
+                    # GroupNonUniformVote is an example where the whole name is too long
+                    #   better to just display the value
+                    if value == "VK_TRUE":
+                        altlink = 'sname:{}::pname:{}'.format(property, member)
+                    else:
+                        altlink = '{}'.format(value)
+
+                    linktext = makeLink(link, altlink)
+
+                # If there are no more enables, do not continue the last line
+                if remaining > 0:
+                    continuation = ' +'
+                else:
+                    continuation = ''
+
+                # condition_string != enable is a small optimization
+                if enable is not None and condition_string != enable:
+                    body.append('ifdef::{}[]'.format(enable))
+                body.append('{} {}{}'.format(indent, linktext, continuation))
+                if enable is not None and condition_string != enable:
+                    body.append('endif::{}[]'.format(enable))
+
+            if elem.tag == 'spirvcapability':
+                captable += prefix + body + suffix
+            else:
+                exttable += prefix + body + suffix
+
+        # Generate the asciidoc include files
+        self.writeBlock('captable.adoc', captable)
+        self.writeBlock('exttable.adoc', exttable)
+
+        # Finish processing in superclass
+        OutputGenerator.endFile(self)
+
+    def writeBlock(self, basename, contents):
+        """Generate an include file.
+
+        - directory - subdirectory to put file in
+        - basename - base name of the file
+        - contents - contents of the file (Asciidoc boilerplate aside)"""
+
+        filename = self.genOpts.directory + '/' + basename
+        self.logMsg('diag', '# Generating include file:', filename)
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.genOpts.conventions.warning_comment, file=fp)
+
+            if len(contents) > 0:
+                for str in contents:
+                    write(str, file=fp)
+            else:
+                self.logMsg('diag', '# No contents for:', filename)
+
+    def genSpirv(self, capinfo, name, alias):
+        """Generate SPIR-V capabilities
+
+        capinfo - dictionary entry for an XML <spirvcapability> or
+            <spirvextension> element
+        name - name attribute of capinfo.elem"""
+
+        OutputGenerator.genSpirv(self, capinfo, name, alias)
+
+        # Just accumulate each element, process in endFile
+        self.spirv.append(capinfo.elem)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/stripAPI.py b/codegen/vulkan/vulkan-docs-next/scripts/stripAPI.py
new file mode 100755
index 0000000..ea37f59
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/stripAPI.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python3
+#
+# Copyright 2023 The Khronos Group Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import xml.etree.ElementTree as etree
+from reg import stripNonmatchingAPIs
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(prog='stripAPI',
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                description='''\
+Filters out elements with non-matching explicit 'api' attributes from API XML.
+To remove Vulkan SC-only elements from the combined API XML:
+    python3 scripts/stripAPI.py -input xml/vk.xml -output vulkan-only.xml -keepAPI vulkan
+To remove Vulkan-only elements:
+    python3 scripts/stripAPI.py -input xml/vk.xml -output vulkansc-only.xml -keepAPI vulkansc
+If you are parsing the XML yourself but using the xml.etree package, the
+equivalent runtime code is:
+   import reg
+   reg.stripNonmatchingAPIs(tree.getroot(), keepAPI, actuallyDelete=True)
+where 'tree' is an ElementTree created from the XML file using
+    etree.parse(filename)''')
+
+    parser.add_argument('-input', action='store',
+                        required=True,
+                        help='Specify input registry XML')
+    parser.add_argument('-output', action='store',
+                        required=True,
+                        help='Specify output registry XML')
+    parser.add_argument('-keepAPI', action='store',
+                        default=None,
+                        help='Specify API name whose \'api\' tags are kept')
+
+    args = parser.parse_args()
+
+    tree = etree.parse(args.input)
+    if args.keepAPI is not None:
+        stripNonmatchingAPIs(tree.getroot(), args.keepAPI, actuallyDelete = True)
+    tree.write(args.output)
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/syncgenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/syncgenerator.py
new file mode 100644
index 0000000..d8f2821
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/syncgenerator.py
@@ -0,0 +1,241 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from generator import OutputGenerator, write
+import os
+
+queueTypeToQueueFlags = {
+    'graphics' : 'VK_QUEUE_GRAPHICS_BIT',
+    'compute' : 'VK_QUEUE_COMPUTE_BIT',
+    'transfer' : 'VK_QUEUE_TRANSFER_BIT',
+    'sparse_binding' : 'VK_QUEUE_SPARSE_BINDING_BIT',
+    'decode' : 'VK_QUEUE_VIDEO_DECODE_BIT_KHR',
+    'encode'  : 'VK_QUEUE_VIDEO_ENCODE_BIT_KHR',
+    'opticalflow' : 'VK_QUEUE_OPTICAL_FLOW_BIT_NV',
+}
+
+class SyncOutputGenerator(OutputGenerator):
+    """SyncOutputGenerator - subclass of OutputGenerator.
+    Generates AsciiDoc includes of the table for the Synchronization chapters
+    of the API specification.
+
+    ---- methods ----
+    SyncOutputGenerator(errFile, warnFile, diagFile) - args as for
+      OutputGenerator. Defines additional internal state.
+    ---- methods overriding base class ----
+    """
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # List of all elements
+        self.pipeline_stages = []
+        self.access_flags = []
+
+        # <Pipeline Stage, condition as asciidoc string>
+        self.pipeline_stage_condition = dict()
+        # <sccess flag, condition as asciidoc string>
+        self.access_flag_condition = dict()
+
+        # <Pipeline Stage, [equivalent pipeline stages]>
+        self.pipeline_stage_equivalent = dict()
+        # <Pipeline Stage, [queue support]>
+        self.pipeline_stage_queue_support = dict()
+
+        # <Access Flag, [equivalent access flaga]>
+        self.access_flag_equivalent = dict()
+        # <Access Flag, [pipeline stage support]>
+        self.access_flag_stage_support = dict()
+
+        self.pipeline_order_info = []
+
+    def endFile(self):
+        self.writeFlagDefinitions()
+        self.supportedPipelineStages()
+        self.supportedAccessTypes()
+        self.pipelineOrdering()
+        OutputGenerator.endFile(self)
+
+    def writeBlock(self, basename, contents):
+        """Generate an include file.
+
+        - directory - subdirectory to put file in
+        - basename - base name of the file
+        - contents - contents of the file (Asciidoc boilerplate aside)"""
+
+        filename = self.genOpts.directory + '/' + basename
+        self.logMsg('diag', '# Generating include file:', filename)
+        dirname = os.path.dirname(filename)
+        if not os.path.exists(dirname):
+            os.makedirs(dirname)
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.genOpts.conventions.warning_comment, file=fp)
+
+            if len(contents) > 0:
+                for str in contents:
+                    write(str, file=fp)
+            else:
+                self.logMsg('diag', '# No contents for:', filename)
+
+    def genSyncStage(self, stageinfo):
+        OutputGenerator.genSyncStage(self, stageinfo)
+        name = stageinfo.elem.get('name')
+        self.pipeline_stages.append(name)
+
+        if stageinfo.condition is not None:
+            self.pipeline_stage_condition[name] = stageinfo.condition
+
+        syncsupport = stageinfo.elem.find('syncsupport')
+        if syncsupport is not None:
+            self.pipeline_stage_queue_support[name] = syncsupport.get('queues').split(',')
+
+        syncequivalent = stageinfo.elem.find('syncequivalent')
+        if syncequivalent is not None:
+            self.pipeline_stage_equivalent[name] = syncequivalent.get('stage').split(',')
+
+    def genSyncAccess(self, accessinfo):
+        OutputGenerator.genSyncStage(self, accessinfo)
+        name = accessinfo.elem.get('name')
+        self.access_flags.append(name)
+
+        if accessinfo.condition is not None:
+            self.access_flag_condition[name] = accessinfo.condition
+
+        syncsupport = accessinfo.elem.find('syncsupport')
+        if syncsupport is not None:
+            self.access_flag_stage_support[name] = syncsupport.get('stage').split(',')
+
+        syncequivalent = accessinfo.elem.find('syncequivalent')
+        if syncequivalent is not None:
+            self.access_flag_equivalent[name] = syncequivalent.get('access').split(',')
+
+    def genSyncPipeline(self, pipelineinfo):
+        OutputGenerator.genSyncStage(self, pipelineinfo)
+        self.pipeline_order_info.append(pipelineinfo)
+
+    def isSameConditionPipeline(self, condition, stage):
+        if stage not in self.pipeline_stage_condition:
+            return False
+        if condition is None:
+            return False
+        return self.pipeline_stage_condition[stage] == condition
+
+    def isSameConditionPipelineAccess(self, stage, flag):
+        if stage not in self.pipeline_stage_condition:
+            return False
+        if flag not in self.access_flag_condition:
+            return False
+        return self.pipeline_stage_condition[stage] == self.access_flag_condition[flag]
+
+    def writePipelineIfdef(self, stage, list):
+        condition = self.pipeline_stage_condition[stage] if stage in self.pipeline_stage_condition else None
+        if condition is not None:
+            list.append('ifdef::{}[]'.format(condition))
+
+    def writePipelineEndif(self, stage, list):
+        condition = self.pipeline_stage_condition[stage] if stage in self.pipeline_stage_condition else None
+        if condition is not None:
+            list.append('endif::{}[]'.format(condition))
+
+    def writeAccessIfdef(self, flag, list):
+        condition = self.access_flag_condition[flag] if flag in self.access_flag_condition else None
+        if condition is not None:
+            list.append('ifdef::{}[]'.format(condition))
+
+    def writeAccessEndif(self, flag, list):
+        condition = self.access_flag_condition[flag] if flag in self.access_flag_condition else None
+        if condition is not None:
+            list.append('endif::{}[]'.format(condition))
+
+    def writeFlagDefinitions(self):
+        for name, stages in self.pipeline_stage_equivalent.items():
+            output = []
+            for stage in stages:
+                self.writePipelineIfdef(stage, output)
+                output.append('  ** ename:{}'.format(stage))
+                self.writePipelineEndif(stage, output)
+
+            self.writeBlock(f'flagDefinitions/{name}{self.file_suffix}', output)
+
+        for name, flags in self.access_flag_equivalent.items():
+            output = []
+            for flag in flags:
+                self.writeAccessIfdef(flag, output)
+                output.append('  ** ename:{}'.format(flag))
+                self.writeAccessEndif(flag, output)
+
+            self.writeBlock(f'flagDefinitions/{name}{self.file_suffix}', output)
+
+    def supportedPipelineStages(self):
+        output = []
+        for stage in self.pipeline_stages:
+            self.writePipelineIfdef(stage, output)
+            queue_support = ''
+            if stage not in self.pipeline_stage_queue_support:
+                queue_support = 'None required'
+            else:
+                for queue in self.pipeline_stage_queue_support[stage]:
+                    ename = 'ename:{}'.format(queueTypeToQueueFlags[queue])
+                    if queue_support != '':
+                        queue_support += ' or '
+                    queue_support += ename
+
+            output.append('|ename:{} | {}'.format(stage, queue_support))
+
+            self.writePipelineEndif(stage, output)
+
+        self.writeBlock(f'supportedPipelineStages{self.file_suffix}', output)
+
+    def supportedAccessTypes(self):
+        output = []
+        for flag in self.access_flags:
+            self.writeAccessIfdef(flag, output)
+            output.append('|ename:{} |'.format(flag))
+
+            if flag not in self.access_flag_stage_support:
+                output.append('\tAny')
+            else:
+                stages = self.access_flag_stage_support[flag]
+                for index, stage in enumerate(stages):
+                    end_symbol = ''
+                    if index != (len(stages) - 1) and len(stages) > 1:
+                        end_symbol = ','
+
+                    if not self.isSameConditionPipelineAccess(stage, flag):
+                        self.writePipelineIfdef(stage, output)
+                    output.append('\tename:{}{}'.format(stage, end_symbol))
+                    if not self.isSameConditionPipelineAccess(stage, flag):
+                        self.writePipelineEndif(stage, output)
+
+            self.writeAccessEndif(flag, output)
+
+        self.writeBlock(f'supportedAccessTypes{self.file_suffix}', output)
+
+    def pipelineOrdering(self):
+        for pipelineinfo in self.pipeline_order_info:
+            output = []
+            name = pipelineinfo.elem.get('name')
+            depends = pipelineinfo.elem.get('depends')
+            syncPipelineStages = pipelineinfo.elem.findall('syncpipelinestage')
+
+            for stageElem in syncPipelineStages:
+                stage = stageElem.text
+                order = stageElem.get('order')
+                before = stageElem.get('before')
+                after = stageElem.get('after')
+                if order == 'None':
+                    continue
+
+                if not self.isSameConditionPipeline(depends, stage):
+                    self.writePipelineIfdef(stage, output)
+
+                output.append('  * ename:{}'.format(stage))
+
+                if not self.isSameConditionPipeline(depends, stage):
+                    self.writePipelineEndif(stage, output)
+
+            file_name = name.replace(' ', '_')
+            self.writeBlock(f'pipelineOrders/{file_name}{self.file_suffix}', output)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/testSpecVersion.py b/codegen/vulkan/vulkan-docs-next/scripts/testSpecVersion.py
new file mode 100755
index 0000000..dbedca8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/testSpecVersion.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python3
+#
+# Copyright 2017-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# testSpecVersion - check if SPEC_VERSION values for an unpublished
+# extension branch meet the requirement of being 1.
+#
+# Usage: textSpecVersion.py [-branch branchname] [-registry file]
+#
+# Checks for an XML <extension> matching the branch name specified
+# on the command line, or the current branch if not specified.
+#
+# If not found, the branch is not an extension staging branch; succeed.
+# If found, but extension is disabled, do not run the test; succeed.
+# If found, and extension SPEC_VERSION has a value of '1', succeed.
+# Otherwise, fail.
+
+import argparse
+import sys
+import xml.etree.ElementTree as etree
+from reflib import getBranch
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-branch', action='store',
+                        default=None,
+                        help='Specify branch to check against')
+    parser.add_argument('-registry', action='store',
+                        default='xml/vk.xml',
+                        help='Use specified registry file instead of vk.xml')
+    args = parser.parse_args()
+
+    try:
+        tree = etree.parse(args.registry)
+    except:
+        print('ERROR - cannot open registry XML file', args.registry)
+        sys.exit(1)
+
+    errors = ''
+    if args.branch is None:
+        (args.branch, errors) = getBranch()
+    if args.branch is None:
+        print('ERROR - Cannot determine current git branch:', errors)
+        sys.exit(1)
+
+    elem = tree.find('extensions/extension[@name="' + args.branch + '"]')
+
+    if elem == None:
+        print('Success - assuming', args.branch, 'is not an extension branch')
+        sys.exit(0)
+
+    supported = elem.get('supported')
+    if supported == 'disabled':
+        print('Success - branch name', args.branch, 'matches, but extension is disabled')
+        sys.exit(0)
+
+    for enum in elem.findall('require/enum'):
+        name = enum.get('name')
+
+        if name is not None and name[-13:] == '_SPEC_VERSION':
+            value = enum.get('value')
+            if value >= '1':
+                print('Success - {} = {} for branch {}'.format(
+                      name, value, args.branch))
+                sys.exit(0)
+            else:
+                print('ERROR - {} = {} for branch {}, but must be >= 1'.format(
+                      name, value, args.branch))
+                sys.exit(1)
+
+    print('ERROR - no SPEC_VERSION token found for branch', args.branch)
+    sys.exit(1)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links.py b/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links.py
new file mode 100644
index 0000000..fcc97f8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links.py
@@ -0,0 +1,643 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose:      This file contains tests for check_spec_links.py
+
+import pytest
+
+from check_spec_links import MessageId, makeMacroChecker
+from spec_tools.console_printer import ConsolePrinter
+from spec_tools.macro_checker_file import shouldEntityBeText
+
+# API-specific constants
+PROTO = 'vkCreateInstance'
+STRUCT = 'VkInstanceCreateInfo'
+EXT = 'VK_KHR_display'
+
+
+class CheckerWrapper(object):
+    """Little wrapper object for a MacroChecker.
+
+    Intended for use in making test assertions shorter and easier to read."""
+
+    def __init__(self, capsys):
+        self.ckr = makeMacroChecker(set())
+        self.capsys = capsys
+
+    def enabled(self, enabled_messages):
+        """Updates the checker's enable message type set, from an iterable."""
+        self.ckr.enabled_messages = set(enabled_messages)
+        return self
+
+    def check(self, string):
+        """Checks a string (as if it were a file), outputs the results to the console, then returns the MacroCheckerFile."""
+
+        # Flush the captured output.
+        _ = self.capsys.readouterr()
+
+        # Process
+        f = self.ckr.processString(string + '\n')
+
+        # Dump messages
+        ConsolePrinter().output(f)
+        return f
+
+
+@pytest.fixture
+def ckr(capsys):
+    """Fixture - add an arg named ckr to your test function to automatically get one passed to you."""
+    return CheckerWrapper(capsys)
+
+
+def msgReplacement(file_checker, which=0):
+    """Return the replacement text associated with the specified message."""
+    assert(len(file_checker.messages) > which)
+    msg = file_checker.messages[which]
+    from pprint import pprint
+    pprint(msg.script_location)
+    pprint(msg.replacement)
+    pprint(msg.fix)
+    return msg.replacement
+
+
+def loneMsgReplacement(file_checker):
+    """Assert there's only one message in a file checker, and return the replacement text associated with it."""
+    assert(len(file_checker.messages) == 1)
+    return msgReplacement(file_checker)
+
+
+def message(file_checker, which=0):
+    """Return a string of the message lines associated with the message of a file checker."""
+    assert(len(file_checker.messages) > which)
+    return "\n".join(file_checker.messages[which].message)
+
+
+def allMessages(file_checker):
+    """Return a list of strings, each being the combination of the message lines of a message from a file checker."""
+    return ['\n'.join(msg.message) for msg in file_checker.messages]
+
+
+def test_missing_macro(ckr):
+    """Verify correct functioning of MessageId.MISSING_MACRO."""
+    ckr.enabled([MessageId.MISSING_MACRO])
+
+    # This should have a missing macro warning
+    assert(ckr.check('with %s by' % PROTO).numDiagnostics() == 1)
+
+    # These 3 should not have a missing macro warning because of their context
+    # (in a link)
+    assert(not ckr.check('<<%s' % PROTO).messages)
+    # These 2 are simulating links that broke over lines
+    assert(not ckr.check('%s>>' % PROTO).messages)
+    assert(not ckr.check(
+        '%s asdf>> table' % PROTO).messages)
+
+
+def test_entity_detection(ckr):
+    ckr.enabled([MessageId.BAD_ENTITY])
+    # Should complain about BAD_ENTITY
+    assert(ckr.check('flink:abcd').numDiagnostics() == 1)
+
+    # Should just give BAD_ENTITY (an error), not MISSING_TEXT (a warning).
+    # Verifying that wrapping in asterisks (for formatting) doesn't get picked up as
+    # an asterisk in the entity name (a placeholder).
+    ckr.enabled(
+        [MessageId.MISSING_TEXT, MessageId.BAD_ENTITY])
+    assert(ckr.check('*flink:abcd*').numErrors() == 1)
+
+
+def test_wrong_macro(ckr):
+    ckr.enabled([MessageId.WRONG_MACRO])
+    # Should error - this ought to be code:uint32_t
+    assert(ckr.check('basetype:uint32_t').numErrors() == 1)
+
+    # This shouldn't error
+    assert(ckr.check('code:uint32_t').numErrors() == 0)
+
+
+def test_should_entity_be_text():
+    # These 5 are all examples of patterns that would merit usage of a ptext/etext/etc
+    # macro, for various reasons:
+
+    # has variable in subscript
+    assert(shouldEntityBeText('pBuffers[i]', '[i]'))
+    assert(shouldEntityBeText('API_ENUM_[X]', '[X]'))
+
+    # has asterisk
+    assert(shouldEntityBeText('maxPerStage*', None))
+
+    # double-underscores make italicized placeholders
+    # (triple are double-underscores delimited by underscores...)
+    assert(shouldEntityBeText('API_ENUM[__x__]', '[__x__]'))
+    assert(shouldEntityBeText('API_ENUM___i___EXT', None))
+
+    # This shouldn't be a *text: macro because it only has single underscores
+    assert(False == shouldEntityBeText('API_ENUM_i_EXT', None))
+
+
+def test_misused_text(ckr):
+    # Tests the same patterns as test_should_entity_be_text(),
+    # but in a whole checker
+    ckr.enabled([MessageId.MISUSED_TEXT])
+
+    assert(ckr.check('etext:API_ENUM_').numDiagnostics() == 0)
+    assert(ckr.check('etext:API_ENUM_[X]').numDiagnostics() == 0)
+    assert(ckr.check('etext:API_ENUM[i]').numDiagnostics() == 0)
+    assert(ckr.check('etext:API_ENUM[__x__]').numDiagnostics() == 0)
+
+    # Should be OK, since __i__ is a placeholder here
+    assert(ckr.check('etext:API_ENUM___i___EXT').numDiagnostics() == 0)
+
+    # This shouldn't be a *text: macro because it only has single underscores
+    assert(ckr.check('API_ENUM_i_EXT').numDiagnostics() == 0)
+
+
+def test_extension(ckr):
+    ckr.enabled(set(MessageId))
+    # Check formatting of extension names:
+    # the following is the canonical way to refer to an extension
+    # (link wrapped in backticks)
+    expected_replacement = '`<<%s>>`' % EXT
+
+    # Extension name mentioned without any markup, should be added
+    assert(loneMsgReplacement(ckr.check('asdf %s asdf' % EXT))
+           == expected_replacement)
+
+    # Extension name mentioned without any markup and wrong case,
+    # should be added and have case fixed
+    assert(loneMsgReplacement(ckr.check('asdf %s asdf' % EXT.upper()))
+           == expected_replacement)
+
+    # Extension name using wrong/old macro: ename isn't for extensions.
+    assert(loneMsgReplacement(ckr.check('asdf ename:%s asdf' % EXT))
+           == expected_replacement)
+
+    # Extension name using wrong macro: elink isn't for extensions.
+    assert(loneMsgReplacement(ckr.check('asdf elink:%s asdf' % EXT))
+           == expected_replacement)
+
+    # Extension name using wrong macro and wrong case: should have markup and
+    # case fixed
+    assert(loneMsgReplacement(ckr.check('asdf elink:%s asdf' % EXT.upper()))
+           == expected_replacement)
+
+    # This shouldn't cause errors because this is how we want it to look.
+    assert(not ckr.check('asdf `<<%s>>` asdf' % EXT).messages)
+
+    # This doesn't (shouldn't?) cause errors because just backticks on their own
+    # "escape" names from the "missing markup" tests.
+    assert(not ckr.check('asdf `%s` asdf' % EXT).messages)
+
+    # TODO can we auto-correct this to add the backticks?
+    # Doesn't error now, but would be nice if it did...
+    assert(not ckr.check('asdf <<%s>> asdf' % EXT).messages)
+
+
+def test_refpage_tag(ckr):
+    ckr.enabled([MessageId.REFPAGE_TAG])
+
+    # Should error: missing refpage='' field
+    assert(ckr.check("[open,desc='',type='',xrefs='']").numErrors() == 1)
+    # Should error: missing desc='' field
+    assert(ckr.check("[open,refpage='',type='',xrefs='']").numErrors() == 1)
+    # Should error: missing type='' field
+    assert(ckr.check("[open,refpage='',desc='',xrefs='']").numErrors() == 1)
+
+    # Should not error: missing xrefs field is optional
+    assert(not ckr.check("[open,refpage='',desc='',type='']").messages)
+
+    # Should error, due to missing refpage, but not crash due to message printing (note the unicode smart quote)
+    assert(ckr.check("[open,desc='',type='',xrefs=’']").numDiagnostics() == 1)
+
+
+def test_refpage_name(ckr):
+    ckr.enabled([MessageId.REFPAGE_NAME])
+    # Should not error: actually exists.
+    assert(ckr.check(
+        "[open,refpage='%s',desc='',type='']" % PROTO).numDiagnostics() == 0)
+
+    # Should error: does not exist.
+    assert(
+        ckr.check("[open,refpage='bogus',desc='',type='']").numDiagnostics() == 1)
+
+
+def test_refpage_missing_desc(ckr):
+    ckr.enabled([MessageId.REFPAGE_MISSING_DESC])
+    # Should not warn: non-empty description actually exists.
+    assert(ckr.check(
+        "[open,refpage='',desc='non-empty description',type='']").numDiagnostics() == 0)
+
+    # Should warn: desc field is empty.
+    assert(
+        ckr.check("[open,refpage='',desc='',type='']").numDiagnostics() == 1)
+
+
+def test_refpage_type(ckr):
+    ckr.enabled([MessageId.REFPAGE_TYPE])
+    # Should not error: this is of type 'protos'.
+    assert(not ckr.check(
+        "[open,refpage='%s',desc='',type='protos']" % PROTO).messages)
+
+    # Should error: this is of type 'protos', not 'structs'.
+    assert(
+        ckr.check("[open,refpage='%s',desc='',type='structs']" % PROTO).messages)
+
+
+def test_refpage_xrefs(ckr):
+    ckr.enabled([MessageId.REFPAGE_XREFS])
+    # Should not error: this is a valid entity to have an xref to.
+    assert(not ckr.check(
+        "[open,refpage='',desc='',type='protos',xrefs='%s']" % STRUCT).messages)
+
+    # case difference:
+    # should error but offer a replacement.
+    assert(loneMsgReplacement(ckr.check("[open,refpage='',xrefs='%s']" % STRUCT.lower()))
+           == STRUCT)
+
+    # Should error: not a valid entity.
+    assert(ckr.check(
+        "[open,refpage='',desc='',type='protos',xrefs='bogus']").numDiagnostics() == 1)
+
+
+def test_refpage_xrefs_comma(ckr):
+    ckr.enabled([MessageId.REFPAGE_XREFS_COMMA])
+    # Should not error: no commas in the xrefs field
+    assert(not ckr.check(
+        "[open,refpage='',xrefs='abc']").messages)
+
+    # Should error: commas shouldn't be there since it's space-delimited.
+    assert(loneMsgReplacement(
+        ckr.check("[open,refpage='',xrefs='abc,']")) == 'abc')
+
+    # All should correct to the same thing.
+    equivalent_tags_with_commas = [
+        "[open,refpage='',xrefs='abc, 123']",
+        "[open,refpage='',xrefs='abc,123']",
+        "[open,refpage='',xrefs='abc , 123']"]
+    for has_comma in equivalent_tags_with_commas:
+        assert(loneMsgReplacement(ckr.check(has_comma)) == 'abc 123')
+
+
+def test_refpage_block(ckr):
+    """Tests of the REFPAGE_BLOCK message."""
+    ckr.enabled([MessageId.REFPAGE_BLOCK])
+    # Should not error: have the tag, an open, and a close
+    assert(not ckr.check(
+        """[open,]
+        --
+        bla
+        --""").messages)
+    assert(not ckr.check(
+        """[open,refpage='abc']
+        --
+        bla
+        --
+
+        [open,refpage='123']
+        --
+        bla2
+        --""").messages)
+
+    # Should have 1 error: file ends immediately after tag
+    assert(ckr.check(
+        "[open,]").numDiagnostics() == 1)
+
+    # Should have 1 error: line after tag isn't --
+    assert(ckr.check(
+        """[open,]
+        bla
+        --""").numDiagnostics() == 1)
+    # Checking precedence of checks: this should have 1 error because line after tag isn't --
+    # (but it is something that causes a line to be handled differently)
+    assert(ckr.check(
+        """[open,]
+        == Heading
+        --""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        ----
+        this is in a code block
+        ----
+        --""").numDiagnostics() == 1)
+
+    # Should have 1 error: tag inside refpage.
+    tag_inside = """[open,]
+        --
+        bla
+        [open,]
+        --"""
+    assert(ckr.check(tag_inside).numDiagnostics() == 1)
+    assert("already in a refpage block" in
+           message(ckr.check(tag_inside)))
+
+
+def test_refpage_missing(ckr):
+    """Test the REFPAGE_MISSING message."""
+    ckr.enabled([MessageId.REFPAGE_MISSING])
+    # Should not error: have the tag, an open, and the include
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/api/protos/%s.adoc[]""" % (PROTO, PROTO)).messages)
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/protos/%s.adoc[]""" % (PROTO, PROTO)).messages)
+
+    # Should not error: manual anchors shouldn't trigger this.
+    assert(not ckr.check("[[%s]]" % PROTO).messages)
+
+    # Should have 1 error: file ends immediately after include
+    assert(ckr.check(
+        "include::{generated}/api/protos/%s.adoc[]" % PROTO).numDiagnostics() == 1)
+    assert(ckr.check(
+        "include::{generated}/validity/protos/%s.adoc[]" % PROTO).numDiagnostics() == 1)
+
+    # Should have 1 error: include is before the refpage open
+    assert(ckr.check(
+        """include::{generated}/api/protos/%s.adoc[]
+        [open,refpage='%s']
+        --""" % (PROTO, PROTO)).numDiagnostics() == 1)
+    assert(ckr.check(
+        """include::{generated}/validity/protos/%s.adoc[]
+        [open,refpage='%s']
+        --""" % (PROTO, PROTO)).numDiagnostics() == 1)
+
+
+def test_refpage_mismatch(ckr):
+    """Test the REFPAGE_MISMATCH message."""
+    ckr.enabled([MessageId.REFPAGE_MISMATCH])
+    # Should not error: have the tag, an open, and a matching include
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/api/protos/%s.adoc[]""" % (PROTO, PROTO)).messages)
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/protos/%s.adoc[]""" % (PROTO, PROTO)).messages)
+
+    # Should error: have the tag, an open, and a mis-matching include
+    assert(ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/api/structs/%s.adoc[]""" % (PROTO, STRUCT)).numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/structs/%s.adoc[]""" % (PROTO, STRUCT)).numDiagnostics() == 1)
+
+
+def test_refpage_unknown_attrib(ckr):
+    """Check the REFPAGE_UNKNOWN_ATTRIB message."""
+    ckr.enabled([MessageId.REFPAGE_UNKNOWN_ATTRIB])
+    # Should not error: these are known attribute names
+    assert(not ckr.check(
+        "[open,refpage='',desc='',type='',xrefs='']").messages)
+
+    # Should error: xref isn't an attribute name.
+    assert(ckr.check(
+        "[open,xref='']").numDiagnostics() == 1)
+
+
+def test_refpage_self_xref(ckr):
+    """Check the REFPAGE_SELF_XREF message."""
+    ckr.enabled([MessageId.REFPAGE_SELF_XREF])
+    # Should not error: not self-referencing
+    assert(not ckr.check(
+        "[open,refpage='abc',xrefs='']").messages)
+    assert(not ckr.check(
+        "[open,refpage='abc',xrefs='123']").messages)
+
+    # Should error: self-referencing isn't an attribute name.
+    assert(loneMsgReplacement(
+        ckr.check("[open,refpage='abc',xrefs='abc']")) == '')
+    assert(loneMsgReplacement(
+        ckr.check("[open,refpage='abc',xrefs='abc 123']")) == '123')
+    assert(loneMsgReplacement(
+        ckr.check("[open,refpage='abc',xrefs='123 abc']")) == '123')
+
+
+def test_refpage_xref_dupe(ckr):
+    """Check the REFPAGE_XREF_DUPE message."""
+    ckr.enabled([MessageId.REFPAGE_XREF_DUPE])
+    # Should not error: no dupes
+    assert(not ckr.check("[open,xrefs='']").messages)
+    assert(not ckr.check("[open,xrefs='123']").messages)
+    assert(not ckr.check("[open,xrefs='abc 123']").messages)
+
+    # Should error: one dupe.
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='abc abc']")) == 'abc')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='abc   abc']")) == 'abc')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='abc abc abc']")) == 'abc')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='abc 123 abc']")) == 'abc 123')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='123 abc abc']")) == '123 abc')
+
+
+def test_REFPAGE_WHITESPACE(ckr):
+    """Check the REFPAGE_WHITESPACE message."""
+    ckr.enabled([MessageId.REFPAGE_WHITESPACE])
+    # Should not error: no extra whitespace
+    assert(not ckr.check("[open,xrefs='']").messages)
+    assert(not ckr.check("[open,xrefs='123']").messages)
+    assert(not ckr.check("[open,xrefs='abc 123']").messages)
+
+    # Should error: some extraneous whitespace.
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='   \t   ']")) == '')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='  abc   123  ']")) == 'abc 123')
+    assert(loneMsgReplacement(
+        ckr.check("[open,xrefs='  abc\t123    xyz  ']")) == 'abc 123 xyz')
+
+    # Should *NOT* remove self-reference, just extra whitespace
+    assert(loneMsgReplacement(
+        ckr.check("[open,refpage='abc',xrefs='  abc   123  ']")) == 'abc 123')
+
+    # Even if we turn on the self-reference warning
+    ckr.enabled([MessageId.REFPAGE_WHITESPACE, MessageId.REFPAGE_SELF_XREF])
+    assert(msgReplacement(
+        ckr.check("[open,refpage='abc',xrefs='  abc   123  ']"), 1) == 'abc 123')
+
+
+def test_REFPAGE_DUPLICATE(ckr):
+    """Check the REFPAGE_DUPLICATE message."""
+    ckr.enabled([MessageId.REFPAGE_DUPLICATE])
+    # Should not error: no duplicate refpages.
+    assert(not ckr.check("[open,refpage='abc']").messages)
+    assert(not ckr.check("[open,refpage='123']").messages)
+
+    # Should error: repeated refpage
+    assert(ckr.check(
+        """[open,refpage='abc']
+        [open,refpage='abc']""").messages)
+
+    # Should error: repeated refpage with something intervening
+    assert(ckr.check(
+        """[open,refpage='abc']
+        [open,refpage='123']
+        [open,refpage='abc']""").messages)
+
+
+def test_UNCLOSED_BLOCK(ckr):
+    """Check the UNCLOSED_BLOCK message."""
+    ckr.enabled([MessageId.UNCLOSED_BLOCK])
+    # These should all have 0 errors
+    assert(not ckr.check("== Heading").messages)
+    assert(not ckr.check(
+        """****
+        == Heading
+        ****""").messages)
+    assert(not ckr.check(
+        """****
+        contents
+        ****""").messages)
+    assert(not ckr.check(
+        """****
+        [source,c]
+        ----
+        this is code
+        ----
+        ****""").messages)
+    assert(not ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ----
+        ****
+        * this is in a box
+        ****
+
+        Now we can close the ref page.
+        --""").messages)
+
+    # These should all have 1 error because I removed a block close.
+    # Because some of them, the missing block close is an interior one, the stack might look weird,
+    # but it's still only 1 error - no matter how many are left unclosed.
+    assert(ckr.check(
+        """****
+        == Heading""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """****
+        contents""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """****
+        [source,c]
+        ----
+        this is code
+        ****""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """****
+        [source,c]
+        ----
+        this is code
+        ----""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ----
+        ****
+        * this is in a box
+        ****""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ----
+        ****
+        * this is in a box
+        --""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ****
+        * this is in a box
+        ****
+
+        Now we can close the ref page.
+        --""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ****
+        * this is in a box
+
+        Now we can close the ref page.
+        --""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,]
+        --
+        123
+
+        [source,c]
+        ----
+        this is code
+        ****
+        * this is in a box""").numDiagnostics() == 1)
+
+    # This should have 0 errors of UNCLOSED_BLOCK: the missing opening -- should get automatically fake-inserted,
+    assert(not ckr.check(
+        """[open,]
+        == Heading
+        --""").messages)
+
+    # Should have 1 error: block left open at end of file
+    assert(ckr.check(
+        """[open,]
+        --
+        bla""").numDiagnostics() == 1)
+
+
+def test_code_block_tracking(ckr):
+    """Check to make sure that no other messages get triggered in a code block."""
+    ckr.enabled([MessageId.BAD_ENTITY])
+
+    # Should have 1 error: not a valid entity
+    assert(ckr.check("slink:BogusStruct").numDiagnostics() == 1)
+    assert(ckr.check(
+        """****
+        * slink:BogusStruct
+        ****""").numDiagnostics() == 1)
+
+    # should have zero errors: the invalid entity is inside a code block,
+    # so it shouldn't be parsed.
+    # (In reality, it's mostly the MISSING_MACRO message that might interact with code block tracking,
+    # but this is easier to test in an API-agnostic way.)
+    assert(not ckr.check(
+        """[source,c]
+        ----
+        This code happens to include the characters slink:BogusStruct
+        ----""").messages)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links_api_specific.py b/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links_api_specific.py
new file mode 100644
index 0000000..587eed3
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/test_check_spec_links_api_specific.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose:      This file contains tests for check_spec_links.py
+#               that depend on the API being used.
+
+import pytest
+
+from check_spec_links import MacroChecker, MessageId, makeMacroChecker
+from spec_tools.console_printer import ConsolePrinter
+from spec_tools.macro_checker_file import shouldEntityBeText
+from test_check_spec_links import (CheckerWrapper, allMessages,
+                                   loneMsgReplacement, message, msgReplacement)
+
+
+@pytest.fixture
+def ckr(capsys):
+    """Fixture - add an arg named ckr to your test function to automatically get one passed to you."""
+    return CheckerWrapper(capsys)
+
+
+def test_vulkan_refpage_mismatch(ckr):
+    """Vulkan-specific tests of the REFPAGE_MISMATCH message."""
+    ckr.enabled([MessageId.REFPAGE_MISMATCH])
+    # Should error: this is actually a mismatch in Vulkan
+    assert(ckr.check(
+        """[open,refpage='VkQueueFlags']
+        --
+        include::{generated}/api/enums/VkQueueFlagBits.adoc[]""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,refpage='VkQueueFlags']
+        --
+        include::{generated}/validity/enums/VkQueueFlagBits.adoc[]""").numDiagnostics() == 1)
+
+    # Should not error: this is just an alias
+    assert(ckr.check(
+        """[open,refpage='vkUpdateDescriptorSetWithTemplate']
+        --
+        include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplateKHR.adoc[]""").numDiagnostics() == 0)
+
+
+def test_vulkan_refpage_missing(ckr):
+    """Vulkan-specific tests of the REFPAGE_MISSING message."""
+    ckr.enabled([MessageId.REFPAGE_MISSING])
+
+    # Should error: flags are expected to have their own ref page.
+    assert(ckr.check(
+        "include::{generated}/api/flags/VkQueueFlags.adoc[]").numDiagnostics() == 1)
+
+
+def test_vulkan_refpage_block(ckr):
+    """Vulkan-specific tests of the REFPAGE_BLOCK message."""
+    ckr.enabled([MessageId.REFPAGE_BLOCK])
+
+    # Should have no errors: Non-refpage usage of '--' is acceptable
+    assert(not ckr.check(
+        """--
+        bla
+        --""").messages)
+
+    # Should have 1 error:
+    #  - line after tag isn't '--'
+    result = ckr.check(
+        """--
+        [open,]
+        bla
+        --""")
+    assert(result.numDiagnostics() == 1)
+    # Internally, it's as if the following were the spec source, after putting in the "fake" lines
+    # (each of the added lines comes from one message):
+    #
+    # --
+    # [open,]
+    # --
+    # bla
+    # --
+    assert("but did not find, a line containing only -- following a reference page tag" in message(result))
+
+
+def test_vulkan_legacy(ckr):
+    """Test the LEGACY message which is Vulkan-only."""
+    ckr.enabled([MessageId.LEGACY])
+    # Should complain about LEGACY
+    assert(ckr.check('sname:VkDeviceMemory').numDiagnostics() == 1)
+
+
+def test_vulkan_alias(ckr):
+    """Tests of the aliasing data structure, dependent on Vulkan-specific registry."""
+    entity_db = ckr.ckr.entity_db
+
+    assert(entity_db.areAliases(
+        'VkCommandPoolTrimFlagsKHR', 'VkCommandPoolTrimFlags'))
+    # Try one reversed-order, though the assert in that method should fire if this is wrong.
+    assert(entity_db.areAliases(
+        'VkCommandPoolTrimFlags', 'VkCommandPoolTrimFlagsKHR'))
+
+    assert(entity_db.areAliases(
+        'VkDescriptorUpdateTemplateKHR', 'VkDescriptorUpdateTemplate'))
+    assert(entity_db.areAliases('VkDescriptorUpdateTemplateTypeKHR',
+                                'VkDescriptorUpdateTemplateType'))
+    assert(entity_db.areAliases('VkQueueFamilyProperties2KHR',
+                                'VkQueueFamilyProperties2'))
+    assert(entity_db.areAliases('VK_COLORSPACE_SRGB_NONLINEAR_KHR',
+                                'VK_COLOR_SPACE_SRGB_NONLINEAR_KHR'))
+    assert(entity_db.areAliases('vkEnumeratePhysicalDeviceGroupsKHR',
+                                'vkEnumeratePhysicalDeviceGroups'))
+    assert(entity_db.areAliases(
+        'vkCmdDrawIndirectCountAMD', 'vkCmdDrawIndirectCountKHR'))
+    assert(entity_db.areAliases('VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT',
+                                'VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT'))
+
+    assert(entity_db.areAliases('VK_LUID_SIZE_KHR', 'VK_LUID_SIZE'))
+
+def test_vulkan_entity_detection(ckr):
+    ckr.enabled([MessageId.BAD_ENTITY])
+    # Should complain about BAD_ENTITY even though it's sname
+    assert(ckr.check('sname:VkInstanceCreateInfoBOGUS').numDiagnostics() == 1)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/test_entity_db.py b/codegen/vulkan/vulkan-docs-next/scripts/test_entity_db.py
new file mode 100644
index 0000000..ef08794
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/test_entity_db.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+
+
+import pytest
+
+from check_spec_links import VulkanEntityDatabase
+
+
+@pytest.fixture
+def db():
+    ret = VulkanEntityDatabase()
+    # print(ret.getEntityJson())
+    return ret
+
+
+def test_likely_recognized(db):
+    assert(db.likelyRecognizedEntity('vkBla'))
+    assert(db.likelyRecognizedEntity('VkBla'))
+    assert(db.likelyRecognizedEntity('VK_BLA'))
+
+
+def test_db(db):
+    assert(db.findEntity('vkCreateInstance'))
+
+    # VKAPI_CALL is not referenced, so not added to EntityDatabase.
+    # assert(db.findEntity('VKAPI_CALL'))
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py b/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py
new file mode 100644
index 0000000..739a32e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py
@@ -0,0 +1,384 @@
+#!/usr/bin/python3
+#
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Shahbaz Youssefi <syoussefi@google.com>
+#
+# Purpose:      This file contains tests for reflow.py
+
+import pytest
+
+from collections import namedtuple
+import os
+
+from reflib import loadFile
+from reflow import reflowFile
+
+testsDir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'reflow-tests')
+resultsDir = os.path.join(testsDir, 'results')
+
+Variations = namedtuple('Variations', ['reflow', 'addVUID'])
+
+def makeTestId(variations):
+    separator = ''
+    testid = ''
+
+    if not variations.reflow:
+        testid += separator + 'noreflow'
+        separator = '-'
+
+    if not variations.addVUID:
+        testid += separator + 'novuid'
+        separator = '-'
+
+    if testid == '':
+        testid = 'default'
+
+    return testid
+
+class ReflowArgs:
+    def __init__(self, variations):
+        self.overwrite = False
+        self.nowrite = False
+        self.outDir = os.path.join(resultsDir, makeTestId(variations))
+        self.check = True
+        self.checkVUID = True
+        self.noflow = not variations.reflow
+        self.margin = 76
+        self.suffix = ''
+        self.nextvu = 10000 if variations.addVUID else None
+        self.maxvu = 99999
+        self.warnCount = 0
+        self.vuidDict = {}
+
+        self.variations = variations
+
+variations = [
+    Variations(False, False),
+    Variations(False, True),
+    Variations(True, False),
+    Variations(True, True),
+]
+
+@pytest.fixture(params=variations, ids=makeTestId)
+def args(request):
+    return ReflowArgs(request.param)
+
+def getPath(*names):
+    return os.path.join(testsDir, *names)
+
+def match_with_expected(resultFile, expectation):
+    result, result_newline = loadFile(resultFile)
+    expect, expect_newline = loadFile(expectation)
+
+    assert(result_newline == expect_newline)
+    assert(result == expect)
+
+def run_reflow_test(args, filetag):
+    testid = makeTestId(args.variations)
+
+    source = 'src-' + filetag + '.adoc'
+    expect = 'expect-' + filetag + '-' + testid + '.adoc'
+
+    filename = getPath(source)
+
+    reflowFile(filename, args)
+
+    match_with_expected(getPath(resultsDir, testid, source), getPath(expect))
+
+def match_warn_count(args, expected):
+    assert(args.warnCount == expected)
+
+def match_vuid_dict(args, expectedExisting, expectedNew):
+    expected = expectedExisting
+    if args.nextvu is not None:
+        expected = expected | expectedNew
+
+    assert(sorted(args.vuidDict.keys()) == sorted(expected.keys()))
+
+    for vuid, locations in args.vuidDict.items():
+        for location, expectedLocation in zip(locations, expected[vuid]):
+            filename, tagline = location
+            expectedFilename, expectedTag = expectedLocation
+
+        assert(expectedFilename in filename)
+        assert(expectedTag in tagline)
+
+def test_text(args):
+    """Basic test of text reflow."""
+    run_reflow_test(args, 'text')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {}, {})
+
+def test_table(args):
+    """Basic test that ensures tables are not reformatted."""
+    run_reflow_test(args, 'table')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {}, {})
+
+def test_vu(args):
+    """Basic test that VU reflows work."""
+    run_reflow_test(args, 'vu')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'01993':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-01993]]']],
+                           '00002':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-00002]]']],
+                           '01545':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-01545]]']],
+                           '00003':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-00003]]']],
+                           '00004':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+                           '00005':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+                           '01394':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-01394]]']],
+                           '02498':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-aspectMask-02498]]']],
+                           '01470':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+                           '01692':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-01692]]']],
+                           '01472':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]']],
+                           '01693':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-01693]]']],
+                           '00007':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-00007]]']],
+                           '04961':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-pColor-04961]]']],
+                           '01805':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-commandBuffer-01805]]']],
+                           '01806':
+                           [['scripts/reflow-tests/src-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-commandBuffer-01806]]']]},
+                    {})
+
+# Commented out now that VU extractor supports this, but may
+# need to refactor through a conventions object enable if
+# OpenXR still needs this.
+# def test_ifdef_in_vu(args):
+#     """Test that ifdef in VUs are warned against."""
+#     run_reflow_test(args, 'ifdef-in-vu')
+#     match_warn_count(args, 1)
+#     match_vuid_dict(args, {'00003':
+#                            [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+#                              '[[VUID-vkCmdClearColorImage-image-00003]]']],
+#                            '00004':
+#                            [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+#                              '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+#                            '00005':
+#                            [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+#                              '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+#                            '04961':
+#                            [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+#                              '[[VUID-vkCmdClearColorImage-pColor-04961]]']]},
+#                     {})
+
+def test_vuid_repeat(args):
+    """Test that same VUID in multiple VUs is detected."""
+    run_reflow_test(args, 'vuid-repeat')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'02498':
+                           [['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-aspectMask-02498]]'],
+                            ['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-02498]]'],
+                            ['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-02498]]'],
+                            ['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-pColor-02498]]']],
+                           '01470':
+                           [['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+                           '00007':
+                           [['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]'],
+                            ['scripts/reflow-tests/src-vuid-repeat.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-00007]]']]},
+                    {})
+
+def test_new_vuid(args):
+    """Test that VUID generation works."""
+    run_reflow_test(args, 'new-vuid')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'01993':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-01993]]']],
+                           '01545':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-01545]]']],
+                           '00004':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+                           '00005':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+                           '02498':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-aspectMask-02498]]']],
+                           '01470':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+                           '01472':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]']],
+                           '01693':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-01693]]']],
+                           '01805':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-commandBuffer-01805]]']],
+                           '01806':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-commandBuffer-01806]]']]},
+                          {'10000':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-10000]]']],
+                           '10001':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-10001]]']],
+                           '10002':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-10002]]']],
+                           '10003':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-pRanges-10003]]']],
+                           '10004':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-10004]]']],
+                           '10005':
+                           [['scripts/reflow-tests/src-new-vuid.adoc',
+                             '[[VUID-vkCmdClearColorImage-pColor-10005]]']]})
+
+def test_new_vuid_attribute(args):
+    """Test that VUID generation works and prioritizes attributes for tags."""
+    run_reflow_test(args, 'new-vuid-attribute')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {}, {'10000':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10000]]']],
+                               '10001':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imagesubresource}-10001]]']],
+                               '10002':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10002]]']],
+                               '10003':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10003]]']],
+                               '10004':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10004]]']],
+                               '10005':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10005]]']],
+                               '10006':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10006]]']],
+                               '10007':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10007]]']],
+                               '10008':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10008]]']],
+                               '10009':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10009]]']],
+                               '10010':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10010]]']],
+                               '10011':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imagesubresource}-10011]]']],
+                               '10012':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10012]]']],
+                               '10013':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10013]]']],
+                               '10014':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10014]]']],
+                               '10015':
+                               [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+                                 '[[VUID-{refpage}-{imageparam}-10015]]']]})
+
+def test_common_validity(args):
+    """Test that VUID generation works for common validity files."""
+    run_reflow_test(args, 'common-validity')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'00171':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-pRegions-00171]]']],
+                           '00176':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-srcBuffer-00176]]']],
+                           '00177':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImage-00177]]']],
+                           '00178':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImage-00178]]']],
+                           '00181':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImageLayout-00181]]']]},
+                          {'10000':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-pRegions-10000]]']],
+                           '10001':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-srcBuffer-10001]]']],
+                           '10002':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImage-10002]]']],
+                           '10003':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImage-10003]]']],
+                           '10004':
+                           [['scripts/reflow-tests/src-common-validity.adoc',
+                             '[[VUID-{refpage}-dstImageLayout-10004]]']]})
+
+def test_nested_lists_in_vu(args):
+    """Test that nested lists in VU work correctly."""
+    run_reflow_test(args, 'nested-lists-in-vu')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'07284':
+                           [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+                             '[[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]']],
+                           '08971':
+                           [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+                             '[[VUID-{refpage}-None-08971]]']]},
+                          {'10000':
+                           [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+                             '[[VUID-{refpage}-None-10000]]']]})
+
+
+def test_math_block_in_vu(args):
+    """Test that nested lists in VU work correctly."""
+    run_reflow_test(args, 'math-block-in-vu')
+    match_warn_count(args, 0)
+    match_vuid_dict(args, {'00004':
+                           [['scripts/reflow-tests/src-math-block-in-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']]},
+                          {'10000':
+                           [['scripts/reflow-tests/src-math-block-in-vu.adoc',
+                             '[[VUID-vkCmdClearColorImage-image-10000]]']]})
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/translate_math.js b/codegen/vulkan/vulkan-docs-next/scripts/translate_math.js
new file mode 100644
index 0000000..fedf8ff
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/translate_math.js
@@ -0,0 +1,33 @@
+// Copyright 2020-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// Translates the latexmath in html on build time using KaTeX
+// Usage: nodejs translate_math.js katex/katex.min.js vkspec.html
+
+const katex = require(process.argv[2]);
+const fs = require("fs");
+const escapeRegex = require("escape-string-regexp");
+const he = require('he');
+
+const filepath = process.argv[3];
+
+var html = fs.readFileSync(filepath, "utf8");
+
+const delimiters = [
+                     //{ left: "$$", right: "$$", display: true},
+                     { left: "\\[", right: "\\]", display: true},
+                     //{ left: "$", right: "$", display: false},
+                     { left: "\\(", right: "\\)", display: false}
+                   ]
+
+for( var delim of delimiters ) {
+    const regex = new RegExp( escapeRegex(delim.left) + "([\\S\\s]*?)" + escapeRegex(delim.right), "g");
+    html = html.replace( regex,
+        function(match, g1) {
+            return katex.renderToString( he.decode(g1, {'strict': true}), {displayMode: delim.display, output: 'html', strict: true} );
+        }
+    );
+}
+
+fs.writeFileSync(filepath, html, 'utf8');
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/validitygenerator.py b/codegen/vulkan/vulkan-docs-next/scripts/validitygenerator.py
new file mode 100755
index 0000000..07439c4
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/validitygenerator.py
@@ -0,0 +1,1591 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import re
+from collections import OrderedDict, namedtuple
+from functools import reduce
+from pathlib import Path
+
+from spec_tools.conventions import ProseListFormats as plf
+from generator import OutputGenerator, write
+from spec_tools.attributes import ExternSyncEntry, LengthEntry
+from spec_tools.util import (findNamedElem, findNamedObject, findTypedElem,
+                             getElemName, getElemType)
+from spec_tools.validity import ValidityCollection, ValidityEntry
+
+
+class UnhandledCaseError(RuntimeError):
+    def __init__(self, msg=None):
+        if msg:
+            super().__init__('Got a case in the validity generator that we have not explicitly handled: ' + msg)
+        else:
+            super().__init__('Got a case in the validity generator that we have not explicitly handled.')
+
+
+def _genericIterateIntersection(a, b):
+    """Iterate through all elements in a that are also in b.
+
+    Somewhat like a set's intersection(),
+    but not type-specific so it can work with OrderedDicts, etc.
+    It also returns a generator instead of a set,
+    so you can pick a preferred container type,
+    if any.
+    """
+    return (x for x in a if x in b)
+
+
+def _make_ordered_dict(gen):
+    """Make an ordered dict (with None as the values) from a generator."""
+    return OrderedDict(((x, None) for x in gen))
+
+
+def _orderedDictIntersection(a, b):
+    return _make_ordered_dict(_genericIterateIntersection(a, b))
+
+
+def _genericIsDisjoint(a, b):
+    """Return true if nothing in a is also in b.
+
+    Like a set's is_disjoint(),
+    but not type-specific so it can work with OrderedDicts, etc.
+    """
+    for _ in _genericIterateIntersection(a, b):
+        return False
+    # if we never enter the loop...
+    return True
+
+
+class ValidityOutputGenerator(OutputGenerator):
+    """ValidityOutputGenerator - subclass of OutputGenerator.
+
+    Generates AsciiDoc includes of valid usage information, for reference
+    pages and the specification. Similar to DocOutputGenerator.
+
+    ---- methods ----
+    ValidityOutputGenerator(errFile, warnFile, diagFile) - args as for
+    OutputGenerator. Defines additional internal state.
+    ---- methods overriding base class ----
+    beginFile(genOpts)
+    endFile()
+    beginFeature(interface, emit)
+    endFeature()
+    genCmd(cmdinfo)
+    """
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        self.currentExtension = ''
+
+        # Tracks whether we are tracing operations
+        self.trace = False
+
+    @property
+    def null(self):
+        """Preferred spelling of NULL.
+
+        Delegates to the object implementing ConventionsBase.
+        """
+        return self.conventions.null
+
+    @property
+    def structtype_member_name(self):
+        """Return name of the structure type member.
+
+        Delegates to the object implementing ConventionsBase.
+        """
+        return self.conventions.structtype_member_name
+
+    @property
+    def nextpointer_member_name(self):
+        """Return name of the structure pointer chain member.
+
+        Delegates to the object implementing ConventionsBase.
+        """
+        return self.conventions.nextpointer_member_name
+
+    def makeProseList(self, elements, fmt=plf.AND,
+                      comma_for_two_elts=False, *args, **kwargs):
+        """Make a (comma-separated) list for use in prose.
+
+        Adds a connective (by default, 'and')
+        before the last element if there are more than 1.
+
+        Optionally adds a quantifier (like 'any') before a list of 2 or more,
+        if specified by fmt.
+
+        Delegates to the object implementing ConventionsBase.
+        """
+        if not elements:
+            raise ValueError(
+                'Cannot pass an empty list if you are trying to make a prose list.')
+        return self.conventions.makeProseList(elements,
+                                              fmt,
+                                              with_verb=False,
+                                              comma_for_two_elts=comma_for_two_elts,
+                                              *args, **kwargs)
+
+    def makeProseListIs(self, elements, fmt=plf.AND,
+                        comma_for_two_elts=False, *args, **kwargs):
+        """Make a (comma-separated) list for use in prose, followed by either 'is' or 'are' as appropriate.
+
+        Adds a connective (by default, 'and')
+        before the last element if there are more than 1.
+
+        Optionally adds a quantifier (like 'any') before a list of 2 or more,
+        if specified by fmt.
+
+        Delegates to the object implementing ConventionsBase.
+        """
+        if not elements:
+            raise ValueError(
+                'Cannot pass an empty list if you are trying to make a prose list.')
+        return self.conventions.makeProseList(elements,
+                                              fmt,
+                                              with_verb=True,
+                                              comma_for_two_elts=comma_for_two_elts,
+                                              *args, **kwargs)
+
+    def makeValidityCollection(self, entity_name):
+        """Create a ValidityCollection object, passing along our Conventions."""
+        return ValidityCollection(entity_name, self.conventions)
+
+    def beginFile(self, genOpts):
+        if not genOpts.conventions:
+            raise RuntimeError(
+                'Must specify conventions object to generator options')
+        self.conventions = genOpts.conventions
+        # Vulkan says 'must: be a valid pointer' a lot, OpenXR just says
+        # 'must: be a pointer'.
+        self.valid_pointer_text = ' '.join(
+            (x for x in (self.conventions.valid_pointer_prefix, 'pointer') if x))
+        OutputGenerator.beginFile(self, genOpts)
+
+    def endFile(self):
+        OutputGenerator.endFile(self)
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+        self.currentExtension = interface.get('name')
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    @property
+    def struct_macro(self):
+        """Get the appropriate format macro for a structure."""
+        # delegate to conventions
+        return self.conventions.struct_macro
+
+    def makeStructName(self, name):
+        """Prepend the appropriate format macro for a structure to a structure type name."""
+        # delegate to conventions
+        return self.conventions.makeStructName(name)
+
+    def makeParameterName(self, name):
+        """Prepend the appropriate format macro for a parameter/member to a parameter name."""
+        return 'pname:' + name
+
+    def makeBaseTypeName(self, name):
+        """Prepend the appropriate format macro for a 'base type' to a type name."""
+        return 'basetype:' + name
+
+    def makeEnumerationName(self, name):
+        """Prepend the appropriate format macro for an enumeration type to a enum type name."""
+        return 'elink:' + name
+
+    def makeFlagsName(self, name):
+        """Prepend the appropriate format macro for a flags type to a flags type name."""
+        return 'tlink:' + name
+
+    def makeFuncPointerName(self, name):
+        """Prepend the appropriate format macro for a function pointer type to a type name."""
+        return 'tlink:' + name
+
+    def makeExternalTypeName(self, name):
+        """Prepend the appropriate format macro for an external type like uint32_t to a type name."""
+        # delegate to conventions
+        return self.conventions.makeExternalTypeName(name)
+
+    def makeEnumerantName(self, name):
+        """Prepend the appropriate format macro for an enumerate (value) to a enum value name."""
+        return 'ename:' + name
+
+    def writeInclude(self, directory, basename, validity: ValidityCollection,
+                     threadsafety, commandpropertiesentry=None,
+                     successcodes=None, errorcodes=None):
+        """Generate an include file.
+
+        directory - subdirectory to put file in (absolute or relative pathname)
+        basename - base name of the file
+        validity - ValidityCollection to write.
+        threadsafety - List (may be empty) of thread safety statements to write.
+        successcodes - Optional success codes to document.
+        errorcodes - Optional error codes to document.
+        """
+        # Create subdirectory, if needed
+        directory = Path(directory)
+        if not directory.is_absolute():
+            directory = Path(self.genOpts.directory) / directory
+        self.makeDir(str(directory))
+
+        # Create validity file
+        filename = str(directory / f'{basename}{self.file_suffix}')
+        self.logMsg('diag', '# Generating include file:', filename)
+
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.conventions.warning_comment, file=fp)
+
+            # Valid Usage
+            if validity:
+                write('.Valid Usage (Implicit)', file=fp)
+                write('****', file=fp)
+                write(validity, file=fp, end='')
+                write('****', file=fp)
+                write('', file=fp)
+
+            # Host Synchronization
+            if threadsafety:
+                # The heading of this block differs between projects, so an Asciidoc attribute is used.
+                write('.{externsynctitle}', file=fp)
+                write('****', file=fp)
+                write(threadsafety, file=fp, end='')
+                write('****', file=fp)
+                write('', file=fp)
+
+            # Command Properties - contained within a block, to avoid table numbering
+            if commandpropertiesentry:
+                write('.Command Properties', file=fp)
+                write('****', file=fp)
+                write('[options="header", width="100%"]', file=fp)
+                write('|====', file=fp)
+                write(self.makeCommandPropertiesTableHeader(), file=fp)
+                write(commandpropertiesentry, file=fp)
+                write('|====', file=fp)
+                write('****', file=fp)
+                write('', file=fp)
+
+            # Success Codes - contained within a block, to avoid table numbering
+            if successcodes or errorcodes:
+                write('.Return Codes', file=fp)
+                write('****', file=fp)
+                if successcodes:
+                    write('ifndef::doctype-manpage[]', file=fp)
+                    write('<<fundamentals-successcodes,Success>>::', file=fp)
+                    write('endif::doctype-manpage[]', file=fp)
+                    write('ifdef::doctype-manpage[]', file=fp)
+                    write('On success, this command returns::', file=fp)
+                    write('endif::doctype-manpage[]', file=fp)
+                    write(successcodes, file=fp)
+                if errorcodes:
+                    write('ifndef::doctype-manpage[]', file=fp)
+                    write('<<fundamentals-errorcodes,Failure>>::', file=fp)
+                    write('endif::doctype-manpage[]', file=fp)
+                    write('ifdef::doctype-manpage[]', file=fp)
+                    write('On failure, this command returns::', file=fp)
+                    write('endif::doctype-manpage[]', file=fp)
+                    write(errorcodes, file=fp)
+                write('****', file=fp)
+                write('', file=fp)
+
+    def paramIsStaticArray(self, param):
+        """Check if the parameter passed in is a static array."""
+        tail = param.find('name').tail
+        return tail and tail[0] == '['
+
+    def paramIsConst(self, param):
+        """Check if the parameter passed in has a type that mentions const."""
+        return param.text is not None and 'const' in param.text
+
+    def staticArrayLength(self, param):
+        """Get the length of a parameter that has been identified as a static array."""
+        paramenumsize = param.find('enum')
+        if paramenumsize is not None:
+            return paramenumsize.text
+            # TODO switch to below when cosmetic changes OK
+            # return self.makeEnumerantName(paramenumsize.text)
+
+        return param.find('name').tail[1:-1]
+
+    def getHandleDispatchableAncestors(self, typename):
+        """Get the ancestors of a handle object."""
+        ancestors = []
+        current = typename
+        while True:
+            current = self.getHandleParent(current)
+            if current is None:
+                return ancestors
+            if self.isHandleTypeDispatchable(current):
+                ancestors.append(current)
+
+    def isHandleTypeDispatchable(self, handlename):
+        """Check if a parent object is dispatchable or not."""
+        handle = self.registry.tree.find(
+            "types/type/[name='" + handlename + "'][@category='handle']")
+        if handle is not None and getElemType(handle) == 'VK_DEFINE_HANDLE':
+            return True
+        else:
+            return False
+
+    def isHandleOptional(self, param, params):
+        # Simple, if it is optional, return true
+        if param.get('optional') is not None:
+            return True
+
+        # If no validity is being generated, it usually means that validity is complex and not absolute, so say yes.
+        if param.get('noautovalidity') is not None:
+            return True
+
+        # If the parameter is an array and we have not already returned, find out if any of the len parameters are optional
+        if self.paramIsArray(param):
+            for length in LengthEntry.parse_len_from_param(param):
+                if not length.other_param_name:
+                    # do not care about constants or "null-terminated"
+                    continue
+
+                other_param = findNamedElem(params, length.other_param_name)
+                if other_param is None:
+                    self.logMsg('warn', length.other_param_name,
+                                'is listed as a length for parameter', param, 'but no such parameter exists')
+                if other_param and other_param.get('optional'):
+                    return True
+
+        return False
+
+    def makeOptionalPre(self, param):
+        # Do not generate this stub for bitflags
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+        type_category = self.getTypeCategory(paramtype)
+        is_optional = param.get('optional').split(',')[0] == 'true'
+        if type_category != 'bitmask' and is_optional:
+            if self.paramIsArray(param) or self.paramIsPointer(param):
+                optional_val = self.null
+            elif type_category == 'handle':
+                if self.isHandleTypeDispatchable(paramtype):
+                    optional_val = self.null
+                else:
+                    optional_val = 'dlink:' + self.conventions.api_prefix + 'NULL_HANDLE'
+            else:
+                optional_val = self.conventions.zero
+            return 'If {} is not {}, '.format(
+                self.makeParameterName(param_name),
+                optional_val)
+
+        return ""
+
+    def makeParamValidityPre(self, param, params, selector):
+        """Make the start of an entry for a parameter's validity, including a chunk of text if it is an array."""
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+
+        # General pre-amble. Check optionality and add stuff.
+        entry = ValidityEntry(anchor=(param_name, 'parameter'))
+        is_optional = param.get('optional') is not None and param.get('optional').split(',')[0] == 'true'
+
+        # This is for a union member, and the valid member is chosen by an enum selection
+        if selector:
+            selection = param.get('selection')
+
+            entry += 'If {} is {}, '.format(
+                self.makeParameterName(selector),
+                self.makeEnumerantName(selection))
+
+            if is_optional:
+                entry += "and "
+                optionalpre = self.makeOptionalPre(param)
+                entry += optionalpre[0].lower() + optionalpre[1:]
+
+            return entry
+
+        if self.paramIsStaticArray(param):
+            if paramtype != 'char':
+                entry += 'Each element of '
+            return entry
+
+        if self.paramIsArray(param) and param.get('len') != LengthEntry.NULL_TERMINATED_STRING:
+            # Find all the parameters that are called out as optional,
+            # so we can document that they might be zero, and the array may be ignored
+            optionallengths = []
+            for length in LengthEntry.parse_len_from_param(param):
+                if not length.other_param_name:
+                    # Only care about length entries that are parameter names
+                    continue
+
+                other_param = findNamedElem(params, length.other_param_name)
+                other_param_optional = (other_param is not None) and (
+                    other_param.get('optional') is not None)
+
+                if other_param is None or not other_param_optional:
+                    # Do not care about not-found params or non-optional params
+                    continue
+
+                if self.paramIsPointer(other_param):
+                    optionallengths.append(
+                        'the value referenced by ' + self.makeParameterName(length.other_param_name))
+                else:
+                    optionallengths.append(
+                        self.makeParameterName(length.other_param_name))
+
+            # Document that these arrays may be ignored if any of the length values are 0
+            if optionallengths or is_optional:
+                entry += 'If '
+            if optionallengths:
+                entry += self.makeProseListIs(optionallengths, fmt=plf.OR)
+                entry += ' not %s, ' % self.conventions.zero
+            # TODO enabling this in OpenXR, as used in Vulkan, causes nonsensical things like
+            # "If pname:propertyCapacityInput is not `0`, and pname:properties is not `NULL`, pname:properties must: be a pointer to an array of pname:propertyCapacityInput slink:XrApiLayerProperties structures"
+            if optionallengths and is_optional:
+                entry += 'and '
+            if is_optional:
+                entry += self.makeParameterName(param_name)
+                # TODO switch when cosmetic changes OK
+                # entry += ' is not {}, '.format(self.null)
+                entry += ' is not `NULL`, '
+            return entry
+
+        if param.get('optional'):
+            entry += self.makeOptionalPre(param)
+            return entry
+
+        # If none of the early returns happened, we at least return an empty
+        # entry with an anchor.
+        return entry
+
+    def createValidationLineForParameterImpl(self, blockname, param, params, typetext, selector, parentname):
+        """Make the generic validity portion used for all parameters.
+
+        May return None if nothing to validate.
+        """
+        if param.get('noautovalidity') is not None:
+            return None
+
+        validity = self.makeValidityCollection(blockname)
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+
+        entry = self.makeParamValidityPre(param, params, selector)
+
+        # pAllocator is not supported in VulkanSC and must always be NULL
+        if self.conventions.xml_api_name == "vulkansc" and param_name == 'pAllocator':
+            entry = ValidityEntry(anchor=(param_name, 'null'))
+            entry += 'pname:pAllocator must: be `NULL`'
+            return entry
+
+        # This is for a child member of a union
+        if selector:
+            entry += 'the {} member of {} must: be '.format(self.makeParameterName(param_name), self.makeParameterName(parentname))
+        else:
+            entry += '{} must: be '.format(self.makeParameterName(param_name))
+
+        if self.paramIsStaticArray(param) and paramtype == 'char':
+            # TODO this is a minor hack to determine if this is a command parameter or a struct member
+            if self.paramIsConst(param) or blockname.startswith(self.conventions.type_prefix):
+                entry += 'a null-terminated UTF-8 string whose length is less than or equal to '
+                entry += self.staticArrayLength(param)
+            else:
+                # This is a command's output parameter
+                entry += 'a character array of length %s ' % self.staticArrayLength(param)
+            validity += entry
+            return validity
+
+        elif self.paramIsArray(param):
+            # Arrays. These are hard to get right, apparently
+
+            lengths = LengthEntry.parse_len_from_param(param)
+
+            for i, length in enumerate(LengthEntry.parse_len_from_param(param)):
+                if i == 0:
+                    # If the first index, make it singular.
+                    entry += 'a '
+                    array_text = 'an array'
+                    pointer_text = self.valid_pointer_text
+                else:
+                    array_text = 'arrays'
+                    pointer_text = self.valid_pointer_text + 's'
+
+                if length.null_terminated:
+                    # This should always be the last thing.
+                    # If it ever is not for some bizarre reason, then this
+                    # will need some massaging.
+                    entry += 'null-terminated '
+                elif length.number == 1:
+                    entry += pointer_text
+                    entry += ' to '
+                else:
+                    entry += pointer_text
+                    entry += ' to '
+                    entry += array_text
+                    entry += ' of '
+                    # Handle equations, which are currently denoted with latex
+                    if length.math:
+                        # Handle equations, which are currently denoted with latex
+                        entry += str(length)
+                    else:
+                        entry += self.makeParameterName(str(length))
+                    entry += ' '
+
+            # Void pointers do not actually point at anything - remove the word "to"
+            if paramtype == 'void':
+                if lengths[-1].number == 1:
+                    if len(lengths) > 1:
+                        # Take care of the extra s added by the post array chunk function. #HACK#
+                        entry.drop_end(5)
+                    else:
+                        entry.drop_end(4)
+
+                    # This has not been hit, so this has not been tested recently.
+                    raise UnhandledCaseError(
+                        "Got void pointer param/member with last length 1")
+                else:
+                    # An array of void values is a byte array.
+                    entry += 'byte'
+
+            elif paramtype == 'char':
+                # A null terminated array of chars is a string
+                if lengths[-1].null_terminated:
+                    entry += 'UTF-8 string'
+                else:
+                    # Else it is just a bunch of chars
+                    entry += 'char value'
+
+            elif self.paramIsConst(param):
+                # If a value is "const" that means it will not get modified,
+                # so it must be valid going into the function.
+                if 'const' in param.text:
+
+                    if not self.isStructAlwaysValid(paramtype):
+                        entry += 'valid '
+
+            # Check if the array elements are optional
+            array_element_optional = param.get('optional') is not None    \
+                      and len(param.get('optional').split(',')) == len(LengthEntry.parse_len_from_param(param)) + 1 \
+                      and param.get('optional').split(',')[-1] == 'true'
+            if array_element_optional and self.getTypeCategory(paramtype) != 'bitmask': # bitmask is handled later
+                entry += 'or dlink:' + self.conventions.api_prefix + 'NULL_HANDLE '
+
+            entry += typetext
+
+            # pluralize
+            if len(lengths) > 1 or (lengths[0] != 1 and not lengths[0].null_terminated):
+                entry += 's'
+
+            return self.handleRequiredBitmask(blockname, param, paramtype, entry, 'true' if array_element_optional else None)
+
+        if self.paramIsPointer(param):
+            # Handle pointers - which are really special case arrays (i.e.
+            # they do not have a length)
+            # TODO  should do something here if someone ever uses some intricate comma-separated `optional`
+            pointercount = param.find('type').tail.count('*')
+
+            # Treat void* as an int
+            if paramtype == 'void':
+                optional = param.get('optional')
+                # If there is only void*, it is just optional int - we do not need any language.
+                if pointercount == 1 and optional is not None:
+                    return None  # early return
+                # Treat the inner-most void* as an int
+                pointercount -= 1
+
+            # Could be multi-level pointers (e.g. ppData - pointer to a pointer). Handle that.
+            entry += 'a '
+            entry += (self.valid_pointer_text + ' to a ') * pointercount
+
+            # Handle void* and pointers to it
+            if paramtype == 'void':
+                if optional is None or optional.split(',')[pointercount]:
+                    # The last void* is just optional int (e.g. to be filled by the impl.)
+                    typetext = 'pointer value'
+
+            # If a value is "const" that means it will not get modified, so
+            # it must be valid going into the function.
+            elif self.paramIsConst(param) and paramtype != 'void':
+                entry += 'valid '
+
+            entry += typetext
+            return self.handleRequiredBitmask(blockname, param, paramtype, entry, param.get('optional'))
+
+        # Add additional line for non-optional bitmasks
+        if self.getTypeCategory(paramtype) == 'bitmask':
+            # TODO does not really handle if someone tries something like optional="true,false"
+            # TODO OpenXR has 0 or a valid combination of flags, for optional things.
+            # Vulkan does not...
+            # isMandatory = param.get('optional') is None
+            # if not isMandatory:
+            #     entry += self.conventions.zero
+            #     entry += ' or '
+            # Non-pointer, non-optional things must be valid
+            entry += 'a valid {}'.format(typetext)
+
+            return self.handleRequiredBitmask(blockname, param, paramtype, entry, param.get('optional'))
+
+        # Non-pointer, non-optional things must be valid
+        entry += 'a valid {}'.format(typetext)
+        return entry
+
+    def handleRequiredBitmask(self, blockname, param, paramtype, entry, optional):
+        # TODO does not really handle if someone tries something like optional="true,false"
+        if self.getTypeCategory(paramtype) != 'bitmask' or optional == 'true':
+            return entry
+        if self.paramIsPointer(param) and not self.paramIsArray(param):
+            # This is presumably an output parameter
+            return entry
+
+        param_name = getElemName(param)
+        # If mandatory, then we need two entries instead of just one.
+        validity = self.makeValidityCollection(blockname)
+        validity += entry
+
+        entry2 = ValidityEntry(anchor=(param_name, 'requiredbitmask'))
+        if self.paramIsArray(param):
+            entry2 += 'Each element of '
+        entry2 += '{} must: not be {}'.format(
+            self.makeParameterName(param_name), self.conventions.zero)
+        validity += entry2
+        return validity
+
+    def createValidationLineForParameter(self, blockname, param, params, typecategory, selector, parentname):
+        """Make an entire validation entry for a given parameter."""
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+
+        is_array = self.paramIsArray(param)
+        is_pointer = self.paramIsPointer(param)
+        needs_recursive_validity = (is_array
+                                    or is_pointer
+                                    or not self.isStructAlwaysValid(paramtype))
+        typetext = None
+        if paramtype in ('void', 'char'):
+            # Chars and void are special cases - we call the impl function,
+            # but do not use the typetext.
+            # A null-terminated char array is a string, else it is chars.
+            # An array of void values is a byte array, a void pointer is just a pointer to nothing in particular
+            typetext = ''
+
+        elif typecategory == 'bitmask':
+            bitsname = paramtype.replace('Flags', 'FlagBits')
+            bitselem = self.registry.tree.find("enums[@name='" + bitsname + "']")
+
+            # If bitsname is an alias, then use the alias to get bitselem.
+            typeElem = self.registry.lookupElementInfo(bitsname, self.registry.typedict)
+            if typeElem is not None:
+                alias = self.registry.getAlias(typeElem.elem, self.registry.typedict)
+                if alias is not None:
+                    bitselem = self.registry.tree.find("enums[@name='" + alias + "']")
+
+            if bitselem is None or len(bitselem.findall('enum[@required="true"]')) == 0:
+                # Empty bit mask: presumably just a placeholder (or only in
+                # an extension not enabled for this build)
+                entry = ValidityEntry(
+                    anchor=(param_name, 'zerobitmask'))
+                entry += self.makeParameterName(param_name)
+                entry += ' must: be '
+                entry += self.conventions.zero
+                # Early return
+                return entry
+
+            is_const = self.paramIsConst(param)
+
+            if is_array:
+                if is_const:
+                    # input an array of bitmask values
+                    template = 'combinations of {bitsname} value'
+                else:
+                    template = '{paramtype} value'
+            elif is_pointer:
+                if is_const:
+                    template = 'combination of {bitsname} values'
+                else:
+                    template = '{paramtype} value'
+            else:
+                template = 'combination of {bitsname} values'
+
+            # The above few cases all use makeEnumerationName, just with different context.
+            typetext = template.format(
+                bitsname=self.makeEnumerationName(bitsname),
+                paramtype=self.makeFlagsName(paramtype))
+
+        elif typecategory == 'handle':
+            typetext = '{} handle'.format(self.makeStructName(paramtype))
+
+        elif typecategory == 'enum':
+            typetext = '{} value'.format(self.makeEnumerationName(paramtype))
+
+        elif typecategory == 'funcpointer':
+            typetext = '{} value'.format(self.makeFuncPointerName(paramtype))
+
+        elif typecategory == 'struct':
+            if needs_recursive_validity:
+                typetext = '{} structure'.format(
+                    self.makeStructName(paramtype))
+
+        elif typecategory == 'union':
+            if needs_recursive_validity:
+                typetext = '{} union'.format(self.makeStructName(paramtype))
+
+        elif self.paramIsArray(param) or self.paramIsPointer(param):
+            # TODO sync cosmetic changes from OpenXR?
+            if typecategory is None:
+                typetext = f'code:{paramtype} value'
+            else:
+                typetext = '{} value'.format(self.makeBaseTypeName(paramtype))
+
+        elif typecategory is None:
+            if not self.isStructAlwaysValid(paramtype):
+                typetext = '{} value'.format(
+                    self.makeExternalTypeName(paramtype))
+
+            # "a valid uint32_t value" does not make much sense.
+            pass
+
+        # If any of the above conditions matched and set typetext,
+        # we call using it.
+        if typetext is not None:
+            return self.createValidationLineForParameterImpl(
+                blockname, param, params, typetext, selector, parentname)
+        return None
+
+    def makeHandleValidityParent(self, param, params):
+        """Make a validity entry for a handle's parent object.
+
+        Creates 'parent' VUID.
+        """
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+
+        # Iterate up the handle parent hierarchy for the first parameter of
+        # a parent type.
+        # This enables cases where a more distant ancestor is present, such
+        # as VkDevice and VkCommandBuffer (but no direct parent
+        # VkCommandPool).
+
+        while True:
+            # If we run out of ancestors, give up
+            handleparent = self.getHandleParent(paramtype)
+            if handleparent is None:
+                if self.trace:
+                    print(f'makeHandleValidityParent:{param_name} has no handle parent, skipping')
+                return None
+
+            # Look for a parameter of the ancestor type
+            otherparam = findTypedElem(params, handleparent)
+            if otherparam is not None:
+                break
+
+            # Continue up the hierarchy
+            paramtype = handleparent
+
+        parent_name = getElemName(otherparam)
+        entry = ValidityEntry(anchor=(param_name, 'parent'))
+
+        is_optional = self.isHandleOptional(param, params)
+
+        if self.paramIsArray(param):
+            template = 'Each element of {}'
+            if is_optional:
+                template += ' that is a valid handle'
+        elif is_optional:
+            template = 'If {} is a valid handle, it'
+        else:
+            # not optional, not an array. Just say the parameter name.
+            template = '{}'
+
+        entry += template.format(self.makeParameterName(param_name))
+
+        entry += ' must: have been created, allocated, or retrieved from {}'.format(
+            self.makeParameterName(parent_name))
+
+        return entry
+
+    def makeAsciiDocHandlesCommonAncestor(self, blockname, handles, params):
+        """Make an asciidoc validity entry for a common ancestors between handles.
+
+        Only handles parent validity for signatures taking multiple handles
+        any ancestors also being supplied to this function.
+        (e.g. "Each of x, y, and z must: come from the same slink:ParentHandle")
+        See self.makeAsciiDocHandleParent() for instances where the parent
+        handle is named and also passed.
+
+        Creates 'commonparent' VUID.
+        """
+        # TODO Replace with refactored code from OpenXR
+        entry = None
+
+        if len(handles) > 1:
+            ancestormap = {}
+            anyoptional = False
+            # Find all the ancestors
+            for param in handles:
+                paramtype = getElemType(param)
+
+                if not self.paramIsPointer(param) or (param.text and 'const' in param.text):
+                    ancestors = self.getHandleDispatchableAncestors(paramtype)
+
+                    ancestormap[param] = ancestors
+
+                    anyoptional |= self.isHandleOptional(param, params)
+
+            # Remove redundant ancestor lists
+            for param in handles:
+                paramtype = getElemType(param)
+
+                removals = []
+                for ancestors in ancestormap.items():
+                    if paramtype in ancestors[1]:
+                        removals.append(ancestors[0])
+
+                if removals != []:
+                    for removal in removals:
+                        del(ancestormap[removal])
+
+            # Intersect
+
+            if len(ancestormap.values()) > 1:
+                current = list(ancestormap.values())[0]
+                for ancestors in list(ancestormap.values())[1:]:
+                    current = [val for val in current if val in ancestors]
+
+                if len(current) > 0:
+                    commonancestor = current[0]
+
+                    if len(ancestormap.keys()) > 1:
+
+                        entry = ValidityEntry(anchor=('commonparent',))
+
+                        parametertexts = []
+                        for param in ancestormap.keys():
+                            param_name = getElemName(param)
+                            parametertext = self.makeParameterName(param_name)
+                            if self.paramIsArray(param):
+                                parametertext = 'the elements of ' + parametertext
+                            parametertexts.append(parametertext)
+
+                        parametertexts.sort()
+
+                        if len(parametertexts) > 2:
+                            entry += 'Each of '
+                        else:
+                            entry += 'Both of '
+
+                        entry += self.makeProseList(parametertexts,
+                                                    comma_for_two_elts=True)
+                        if anyoptional is True:
+                            entry += ' that are valid handles of non-ignored parameters'
+                        entry += ' must: have been created, allocated, or retrieved from the same '
+                        entry += self.makeStructName(commonancestor)
+
+        return entry
+
+    def makeStructureTypeFromName(self, structname):
+        """Create text for a structure type name, like ename:VK_STRUCTURE_TYPE_CREATE_INSTANCE_INFO"""
+        return self.makeEnumerantName(self.conventions.generate_structure_type_from_name(structname))
+
+    def makeStructureTypeValidity(self, structname):
+        """Generate an validity line for the type value of a struct.
+
+        Creates VUID named like the member name.
+        """
+        info = self.registry.typedict.get(structname)
+        assert(info is not None)
+
+        # If this fails (meaning we have something other than a struct in here),
+        # then the caller is wrong:
+        # probably passing the wrong value for structname.
+        members = info.getMembers()
+        assert(members)
+
+        # If this fails, see caller: this should only get called for a struct type with a type value.
+        param = findNamedElem(members, self.structtype_member_name)
+        # OpenXR gets some structs without a type field in here, so cannot assert
+        assert(param is not None)
+        # if param is None:
+        #     return None
+
+        entry = ValidityEntry(
+            anchor=(self.structtype_member_name, self.structtype_member_name))
+        entry += self.makeParameterName(self.structtype_member_name)
+        entry += ' must: be '
+
+        values = param.get('values', '').split(',')
+        if values:
+            # Extract each enumerant value. They could be validated in the
+            # same fashion as validextensionstructs in
+            # makeStructureExtensionPointer, although that is not relevant in
+            # the current extension struct model.
+            entry += self.makeProseList((self.makeEnumerantName(v)
+                                         for v in values), 'or')
+            return entry
+
+        if 'Base' in structname:
+            # This type does not even have any values for its type, and it
+            # seems like it might be a base struct that we would expect to
+            # lack its own type, so omit the entire statement
+            return None
+
+        self.logMsg('warn', 'No values were marked-up for the structure type member of',
+                    structname, 'so making one up!')
+        entry += self.makeStructureTypeFromName(structname)
+
+        return entry
+
+    def makeStructureExtensionPointer(self, blockname, param):
+        """Generate an validity line for the pointer chain member value of a struct."""
+        param_name = getElemName(param)
+
+        if param.get('validextensionstructs') is not None:
+            self.logMsg('warn', blockname,
+                        'validextensionstructs is deprecated/removed', '\n')
+
+        entry = ValidityEntry(
+            anchor=(param_name, self.nextpointer_member_name))
+        validextensionstructs = self.registry.validextensionstructs.get(
+            blockname)
+        extensionstructs = []
+        duplicatestructs = []
+
+        if validextensionstructs is not None:
+            # Check each structure name and skip it if not required by the
+            # generator. This allows tagging extension structs in the XML
+            # that are only included in validity when needed for the spec
+            # being targeted.
+            # Track the required structures, and of the required structures,
+            # those that allow duplicates in the pNext chain.
+            for struct in validextensionstructs:
+                # Unpleasantly breaks encapsulation. Should be a method in the registry class
+                t = self.registry.lookupElementInfo(
+                    struct, self.registry.typedict)
+                if t is None:
+                    self.logMsg('warn', 'makeStructureExtensionPointer: struct', struct,
+                                'is in a validextensionstructs= attribute but is not in the registry')
+                elif t.required:
+                    extensionstructs.append('slink:' + struct)
+                    if t.elem.get('allowduplicate') == 'true':
+                        duplicatestructs.append('slink:' + struct)
+                else:
+                    self.logMsg(
+                        'diag', 'makeStructureExtensionPointer: struct', struct, 'IS NOT required')
+
+        if not extensionstructs:
+            entry += '{} must: be {}'.format(
+                self.makeParameterName(param_name), self.null)
+            return entry
+
+        if len(extensionstructs) == 1:
+            entry += '{} must: be {} or a pointer to a valid instance of {}'.format(self.makeParameterName(param_name), self.null,
+                                                                                    extensionstructs[0])
+        else:
+            # More than one extension struct.
+            entry += 'Each {} member of any structure (including this one) in the pname:{} chain '.format(
+                self.makeParameterName(param_name), self.nextpointer_member_name)
+            entry += 'must: be either {} or a pointer to a valid instance of '.format(
+                self.null)
+
+            entry += self.makeProseList(extensionstructs, fmt=plf.OR)
+
+        validity = self.makeValidityCollection(blockname)
+        validity += entry
+
+        # Generate VU statement requiring unique structures in the pNext
+        # chain.
+        # NOTE: OpenXR always allows non-unique type values. Instances other
+        # than the first are just ignored
+
+        vu = ('The pname:' +
+              self.structtype_member_name +
+              ' value of each struct in the pname:' +
+              self.nextpointer_member_name +
+              ' chain must: be unique')
+        anchor = (self.conventions.member_used_for_unique_vuid, 'unique')
+
+        # If duplicates of some structures are allowed, they are called out
+        # explicitly.
+        num = len(duplicatestructs)
+        if num > 0:
+            vu = (vu +
+                  ', with the exception of structures of type ' +
+                  self.makeProseList(duplicatestructs, fmt=plf.OR))
+
+        validity.addValidityEntry(vu, anchor = anchor )
+
+        return validity
+
+    def addSharedStructMemberValidity(self, struct, blockname, param, validity):
+        """Generate language to independently validate a parameter, for those validated even in output.
+
+        Return value indicates whether it was handled internally (True) or if it may need more validity (False)."""
+        param_name = getElemName(param)
+        paramtype = getElemType(param)
+        if param.get('noautovalidity') is None:
+
+            if self.conventions.is_structure_type_member(paramtype, param_name):
+                validity += self.makeStructureTypeValidity(blockname)
+                return True
+
+            if self.conventions.is_nextpointer_member(paramtype, param_name):
+                # Vulkan: the addition of validity here is conditional unlike OpenXR.
+                if struct.get('structextends') is None:
+                    validity += self.makeStructureExtensionPointer(
+                        blockname, param)
+                return True
+        return False
+
+    def makeOutputOnlyStructValidity(self, cmd, blockname, params):
+        """Generate all the valid usage information for a struct that is entirely output.
+
+        That is, it is only ever filled out by the implementation other than
+        the structure type and pointer chain members.
+        Thus, we only create validity for the pointer chain member.
+        """
+        # Start the validity collection for this struct
+        validity = self.makeValidityCollection(blockname)
+
+        for param in params:
+            self.addSharedStructMemberValidity(
+                cmd, blockname, param, validity)
+
+        return validity
+
+    def isVKVersion11(self):
+        """Returns true if VK_VERSION_1_1 is being emitted."""
+        vk11 = re.match(self.registry.genOpts.emitversions, 'VK_VERSION_1_1') is not None
+        return vk11
+
+    def videocodingRequired(self):
+        """Returns true if VK_KHR_video_queue is being emitted and thus validity
+        with respect to the videocoding attribute should be generated."""
+        return 'VK_KHR_video_queue' in self.registry.requiredextensions
+
+    def getVideocoding(self, cmd):
+        """Returns the value of the videocoding attribute, also considering the
+        default value when the attribute is not present."""
+        videocoding = cmd.get('videocoding')
+        if videocoding is None:
+            videocoding = 'outside'
+        return videocoding
+
+    def conditionallyRemoveQueueType(self, queues, queuetype, condition):
+        """Removes a queue type from a queue list based on the specified condition."""
+        if queuetype in queues and condition:
+            queues.remove(queuetype)
+
+    def getQueueList(self, cmd):
+        """Returns the list of queue types a command is supported on."""
+        queues = cmd.get('queues')
+        if queues is None:
+            return None
+        queues = queues.split(',')
+
+        # Filter queue types that have dependencies
+        self.conditionallyRemoveQueueType(queues, 'sparse_binding', self.conventions.xml_api_name == "vulkansc")
+        self.conditionallyRemoveQueueType(queues, 'decode',         'VK_KHR_video_decode_queue' not in self.registry.requiredextensions)
+        self.conditionallyRemoveQueueType(queues, 'encode',         'VK_KHR_video_encode_queue' not in self.registry.requiredextensions)
+        self.conditionallyRemoveQueueType(queues, 'opticalflow',    'VK_NV_optical_flow' not in self.registry.requiredextensions)
+
+        # Verify that no new queue type is introduced accidentally
+        for queue in queues:
+            if queue not in [ 'transfer', 'compute', 'graphics', 'sparse_binding', 'decode', 'encode', 'opticalflow' ]:
+                self.logMsg('error', f'Unknown queue type "{queue}".')
+
+        return queues
+
+    def getPrettyQueueList(self, cmd):
+        """Returns a prettified version of the queue list which can be included in spec language text."""
+        queues = self.getQueueList(cmd)
+        if queues is None:
+            return None
+
+        replace = {
+            'sparse_binding': 'sparse binding',
+            'opticalflow': 'optical flow'
+        }
+        return [replace[queue] if queue in replace else queue for queue in queues]
+
+    def makeStructOrCommandValidity(self, cmd, blockname, params):
+        """Generate all the valid usage information for a given struct or command."""
+        validity = self.makeValidityCollection(blockname)
+        handles = []
+        arraylengths = dict()
+        for param in params:
+            param_name = getElemName(param)
+            paramtype = getElemType(param)
+
+            # Valid usage ID tags (VUID) are generated for various
+            # conditions based on the name of the block (structure or
+            # command), name of the element (member or parameter), and type
+            # of VU statement.
+
+            # Get the type's category
+            typecategory = self.getTypeCategory(paramtype)
+
+            if not self.addSharedStructMemberValidity(
+                    cmd, blockname, param, validity):
+                if not param.get('selector'):
+                    validity += self.createValidationLineForParameter(
+                        blockname, param, params, typecategory, None, None)
+                else:
+                    selector = param.get('selector')
+                    if typecategory != 'union':
+                        self.logMsg('warn', 'selector attribute set on non-union parameter', param_name, 'in', blockname)
+
+                    paraminfo = self.registry.lookupElementInfo(paramtype, self.registry.typedict)
+
+                    for member in paraminfo.getMembers():
+                        membertype = getElemType(member)
+                        membertypecategory = self.getTypeCategory(membertype)
+
+                        validity += self.createValidationLineForParameter(
+                            blockname, member, paraminfo.getMembers(), membertypecategory, selector, param_name)
+
+            # Ensure that any parenting is properly validated, and list that a handle was found
+            if typecategory == 'handle':
+                handles.append(param)
+
+            # Get the array length for this parameter
+            lengths = LengthEntry.parse_len_from_param(param)
+            if lengths:
+                arraylengths.update({length.other_param_name: length
+                                     for length in lengths
+                                     if length.other_param_name})
+
+        # For any vkQueue* functions, there might be queue type data
+        if 'vkQueue' in blockname:
+            # The queue type must be valid
+            queues = self.getPrettyQueueList(cmd)
+            if queues:
+                entry = ValidityEntry(anchor=('queuetype',))
+                entry += 'The pname:queue must: support '
+                entry += self.makeProseList(queues,
+                                            fmt=plf.OR, comma_for_two_elts=True)
+                entry += ' operations'
+                validity += entry
+
+        if 'vkCmd' in blockname:
+            # The commandBuffer parameter must be being recorded
+            entry = ValidityEntry(anchor=('commandBuffer', 'recording'))
+            entry += 'pname:commandBuffer must: be in the <<commandbuffers-lifecycle, recording state>>'
+            validity += entry
+
+            #
+            # Start of valid queue type validation - command pool must have been
+            # allocated against a queue with at least one of the valid queue types
+            entry = ValidityEntry(anchor=('commandBuffer', 'cmdpool'))
+
+            #
+            # This test for vkCmdFillBuffer is a hack, since we have no path
+            # to conditionally have queues enabled or disabled by an extension.
+            # As the VU stuff is all moving out (hopefully soon), this hack solves the issue for now
+            if blockname == 'vkCmdFillBuffer':
+                entry += 'The sname:VkCommandPool that pname:commandBuffer was allocated from must: support '
+                if self.isVKVersion11() or 'VK_KHR_maintenance1' in self.registry.requiredextensions:
+                    entry += 'transfer, graphics or compute operations'
+                else:
+                    entry += 'graphics or compute operations'
+            else:
+                # The queue type must be valid
+                queues = self.getPrettyQueueList(cmd)
+                assert(queues)
+                entry += 'The sname:VkCommandPool that pname:commandBuffer was allocated from must: support '
+                entry += self.makeProseList(queues,
+                                            fmt=plf.OR, comma_for_two_elts=True)
+                entry += ' operations'
+            validity += entry
+
+            # Must be called inside/outside a render pass appropriately
+            renderpass = cmd.get('renderpass')
+
+            if renderpass != 'both':
+                entry = ValidityEntry(anchor=('renderpass',))
+                entry += 'This command must: only be called '
+                entry += renderpass
+                entry += ' of a render pass instance'
+                validity += entry
+
+            # Must be called inside/outside a video coding scope appropriately
+            if self.videocodingRequired():
+                videocoding = self.getVideocoding(cmd)
+                if videocoding != 'both':
+                    entry = ValidityEntry(anchor=('videocoding',))
+                    entry += 'This command must: only be called '
+                    entry += videocoding
+                    entry += ' of a video coding scope'
+                    validity += entry
+
+            # Must be in the right level command buffer
+            cmdbufferlevel = cmd.get('cmdbufferlevel')
+
+            if cmdbufferlevel != 'primary,secondary':
+                entry = ValidityEntry(anchor=('bufferlevel',))
+                entry += 'pname:commandBuffer must: be a '
+                entry += cmdbufferlevel
+                entry += ' sname:VkCommandBuffer'
+                validity += entry
+
+        # Any non-optional arraylengths should specify they must be greater than 0
+        array_length_params = ((param, getElemName(param))
+                               for param in params
+                               if getElemName(param) in arraylengths)
+
+        for param, param_name in array_length_params:
+            if param.get('optional') is not None:
+                continue
+
+            length = arraylengths[param_name]
+            full_length = length.full_reference
+
+            # Is this just a name of a param? If false, then it is some kind
+            # of qualified name (a member of a param for instance)
+            simple_param_reference = (len(length.param_ref_parts) == 1)
+            if not simple_param_reference:
+                # Loop through to see if any parameters in the chain are optional
+                array_length_parent = cmd
+                array_length_optional = False
+                for part in length.param_ref_parts:
+                    # Overwrite the param so it ends up as the bottom level parameter for later checks
+                    param = array_length_parent.find("*/[name='{}']".format(part))
+
+                    # If any parameter in the chain is optional, skip the implicit length requirement
+                    array_length_optional |= (param.get('optional') is not None)
+
+                    # Lookup the type of the parameter for the next loop iteration
+                    type = param.findtext('type')
+                    array_length_parent = self.registry.tree.find("./types/type/[@name='{}']".format(type))
+
+                if array_length_optional:
+                    continue
+
+            # Get all the array dependencies
+            arrays = cmd.findall(
+                "param/[@len='{}'][@optional='true']".format(full_length))
+
+            # Get all the optional array dependencies, including those not generating validity for some reason
+            optionalarrays = arrays + \
+                cmd.findall(
+                    "param/[@len='{}'][@noautovalidity='true']".format(full_length))
+
+            entry = ValidityEntry(anchor=(full_length, 'arraylength'))
+            # Allow lengths to be arbitrary if all their dependents are optional
+            if optionalarrays and len(optionalarrays) == len(arrays):
+                entry += 'If '
+                # TODO sync this section from OpenXR once cosmetic changes OK
+
+                optional_array_names = (self.makeParameterName(getElemName(array))
+                                        for array in optionalarrays)
+                entry += self.makeProseListIs(optional_array_names,
+                                              plf.ANY_OR, comma_for_two_elts=True)
+
+                entry += ' not {}, '.format(self.null)
+
+            # TODO end needs sync cosmetic
+            if self.paramIsPointer(param):
+                entry += 'the value referenced by '
+
+            # Split and re-join here to insert pname: around ::
+            entry += '::'.join(self.makeParameterName(part)
+                               for part in full_length.split('::'))
+            # TODO replace the previous statement with the following when cosmetic changes OK
+            # entry += length.get_human_readable(make_param_name=self.makeParameterName)
+
+            entry += ' must: be greater than '
+            entry += self.conventions.zero
+            validity += entry
+
+        # Find the parents of all objects referenced in this command
+        for param in handles:
+            # Do not detect a parent for return values!
+            if not self.paramIsPointer(param) or self.paramIsConst(param):
+                validity += self.makeHandleValidityParent(param, params)
+
+        # Find the common ancestor of all objects referenced in this command
+        validity += self.makeAsciiDocHandlesCommonAncestor(
+            blockname, handles, params)
+
+        return validity
+
+    def makeThreadSafetyBlock(self, cmd, paramtext):
+        """Generate thread-safety validity entries for cmd/structure"""
+        # See also makeThreadSafetyBlock in validitygenerator.py
+        validity = self.makeValidityCollection(getElemName(cmd))
+
+        # This text varies between projects, so an Asciidoctor attribute is used.
+        extsync_prefix = "{externsyncprefix} "
+
+        # Find and add any parameters that are thread unsafe
+        explicitexternsyncparams = cmd.findall(paramtext + "[@externsync]")
+        if explicitexternsyncparams is not None:
+            for param in explicitexternsyncparams:
+                externsyncattribs = ExternSyncEntry.parse_externsync_from_param(
+                    param)
+                param_name = getElemName(param)
+
+                for attrib in externsyncattribs:
+                    entry = ValidityEntry()
+                    entry += extsync_prefix
+                    if attrib.entirely_extern_sync:
+                        if self.paramIsArray(param):
+                            entry += 'each member of '
+                        elif self.paramIsPointer(param):
+                            entry += 'the object referenced by '
+
+                        entry += self.makeParameterName(param_name)
+
+                        if attrib.children_extern_sync:
+                            entry += ', and any child handles,'
+
+                    else:
+                        entry += 'pname:'
+                        entry += str(attrib.full_reference)
+                        # TODO switch to the following when cosmetic changes OK
+                        # entry += attrib.get_human_readable(make_param_name=self.makeParameterName)
+                    entry += ' must: be externally synchronized'
+                    validity += entry
+
+        # Vulkan-specific
+        # For any vkCmd* functions, the command pool is externally synchronized
+        if cmd.find('proto/name') is not None and 'vkCmd' in cmd.find('proto/name').text:
+            entry = ValidityEntry()
+            entry += extsync_prefix
+            entry += 'the sname:VkCommandPool that pname:commandBuffer was allocated from must: be externally synchronized'
+            validity += entry
+
+        # Find and add any "implicit" parameters that are thread unsafe
+        implicitexternsyncparams = cmd.find('implicitexternsyncparams')
+        if implicitexternsyncparams is not None:
+            for elem in implicitexternsyncparams:
+                entry = ValidityEntry()
+                entry += extsync_prefix
+                entry += elem.text
+                entry += ' must: be externally synchronized'
+                validity += entry
+
+        return validity
+
+    def makeCommandPropertiesTableHeader(self):
+        header  = '|<<VkCommandBufferLevel,Command Buffer Levels>>'
+        header += '|<<vkCmdBeginRenderPass,Render Pass Scope>>'
+        if self.videocodingRequired():
+            header += '|<<vkCmdBeginVideoCodingKHR,Video Coding Scope>>'
+        header += '|<<VkQueueFlagBits,Supported Queue Types>>'
+        header += '|<<fundamentals-queueoperation-command-types,Command Type>>'
+        return header
+
+    def makeCommandPropertiesTableEntry(self, cmd, name):
+        cmdbufferlevel, renderpass, videocoding, queues, tasks = None, None, None, None, None
+
+        if 'vkCmd' in name:
+            # Must be called in primary/secondary command buffers appropriately
+            cmdbufferlevel = cmd.get('cmdbufferlevel')
+            cmdbufferlevel = (' + \n').join(cmdbufferlevel.title().split(','))
+
+            # Must be called inside/outside a render pass appropriately
+            renderpass = cmd.get('renderpass')
+            renderpass = renderpass.capitalize()
+
+            # Must be called inside/outside a video coding scope appropriately
+            if self.videocodingRequired():
+                videocoding = self.getVideocoding(cmd).capitalize()
+
+            #
+            # This test for vkCmdFillBuffer is a hack, since we have no path
+            # to conditionally have queues enabled or disabled by an extension.
+            # As the VU stuff is all moving out (hopefully soon), this hack solves the issue for now
+            if name == 'vkCmdFillBuffer':
+                if self.isVKVersion11() or 'VK_KHR_maintenance1' in self.registry.requiredextensions:
+                    queues = [ 'transfer', 'graphics', 'compute' ]
+                else:
+                    queues = [ 'graphics', 'compute' ]
+            else:
+                queues = self.getQueueList(cmd)
+            queues = (' + \n').join([queue.title() for queue in queues])
+
+            tasks = cmd.get('tasks')
+            tasks = (' + \n').join(tasks.title().split(','))
+        elif 'vkQueue' in name:
+            # For queue commands there are no command buffer level, render
+            # pass, or video coding scope specific restrictions,
+            # or command type, but the queue types are considered
+            cmdbufferlevel = '-'
+            renderpass = '-'
+            if self.videocodingRequired():
+                videocoding = '-'
+
+            queues = self.getQueueList(cmd)
+            if queues is None:
+                queues = 'Any'
+            else:
+                queues = (' + \n').join([queue.upper() for queue in queues])
+
+            tasks = '-'
+
+        table_items = (cmdbufferlevel, renderpass, videocoding, queues, tasks)
+        entry = '|'.join(filter(None, table_items))
+
+        return ('|' + entry) if entry else None
+
+
+    def findRequiredEnums(self, enums):
+        """Check each enumerant name in the enums list and remove it if not
+        required by the generator. This allows specifying success and error
+        codes for extensions that are only included in validity when needed
+        for the spec being targeted."""
+        return self.keepOnlyRequired(enums, self.registry.enumdict)
+
+    def findRequiredCommands(self, commands):
+        """Check each command name in the commands list and remove it if not
+        required by the generator.
+
+        This will allow some state operations to take place before endFile."""
+        return self.keepOnlyRequired(commands, self.registry.cmddict)
+
+    def keepOnlyRequired(self, names, info_dict):
+        """Check each element name in the supplied dictionary and remove it if not
+        required by the generator.
+
+        This will allow some operations to take place before endFile no matter the order of generation."""
+        # TODO Unpleasantly breaks encapsulation. Should be a method in the registry class
+
+        def is_required(name):
+            info = self.registry.lookupElementInfo(name, info_dict)
+            if info is None:
+                return False
+            if not info.required:
+                self.logMsg('diag', 'keepOnlyRequired: element',
+                            name, 'IS NOT required, skipping')
+            return info.required
+
+        return [name
+                for name in names
+                if is_required(name)]
+
+    def makeReturnCodeList(self, attrib, cmd, name):
+        """Return a list of possible return codes for a function.
+
+        attrib is either 'successcodes' or 'errorcodes'.
+        """
+        return_lines = []
+        RETURN_CODE_FORMAT = '* ename:{}'
+
+        codes_attr = cmd.get(attrib)
+        if codes_attr:
+            codes = self.findRequiredEnums(codes_attr.split(','))
+            if codes:
+                return_lines.extend((RETURN_CODE_FORMAT.format(code)
+                                     for code in codes))
+
+        applicable_ext_codes = (ext_code
+                                for ext_code in self.registry.commandextensionsuccesses
+                                if ext_code.command == name)
+        for ext_code in applicable_ext_codes:
+            line = RETURN_CODE_FORMAT.format(ext_code.value)
+            if ext_code.extension:
+                line += ' [only if {} is enabled]'.format(
+                    self.conventions.formatExtension(ext_code.extension))
+
+            return_lines.append(line)
+        if return_lines:
+            return '\n'.join(return_lines)
+
+        return None
+
+    def makeSuccessCodes(self, cmd, name):
+        return self.makeReturnCodeList('successcodes', cmd, name)
+
+    def makeErrorCodes(self, cmd, name):
+        return self.makeReturnCodeList('errorcodes', cmd, name)
+
+    def genCmd(self, cmdinfo, name, alias):
+        """Command generation."""
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+
+        # @@@ (Jon) something needs to be done here to handle aliases, probably
+
+        validity = self.makeValidityCollection(name)
+
+        # OpenXR-only: make sure extension is enabled
+        # validity.possiblyAddExtensionRequirement(self.currentExtension, 'calling flink:')
+
+        validity += self.makeStructOrCommandValidity(
+            cmdinfo.elem, name, cmdinfo.getParams())
+
+        threadsafety = self.makeThreadSafetyBlock(cmdinfo.elem, 'param')
+        commandpropertiesentry = None
+
+        # Vulkan-specific
+        commandpropertiesentry = self.makeCommandPropertiesTableEntry(
+            cmdinfo.elem, name)
+        successcodes = self.makeSuccessCodes(cmdinfo.elem, name)
+        errorcodes = self.makeErrorCodes(cmdinfo.elem, name)
+
+        # OpenXR-specific
+        # self.generateStateValidity(validity, name)
+
+        self.writeInclude('protos', name, validity, threadsafety,
+                          commandpropertiesentry, successcodes, errorcodes)
+
+    def genStruct(self, typeinfo, typeName, alias):
+        """Struct Generation."""
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+        # @@@ (Jon) something needs to be done here to handle aliases, probably
+
+        # Anything that is only ever returned cannot be set by the user, so
+        # should not have any validity information.
+        validity = self.makeValidityCollection(typeName)
+        threadsafety = []
+
+        # OpenXR-only: make sure extension is enabled
+        # validity.possiblyAddExtensionRequirement(self.currentExtension, 'using slink:')
+
+        if typeinfo.elem.get('category') != 'union':
+            if typeinfo.elem.get('returnedonly') is None:
+                validity += self.makeStructOrCommandValidity(
+                    typeinfo.elem, typeName, typeinfo.getMembers())
+                threadsafety = self.makeThreadSafetyBlock(typeinfo.elem, 'member')
+
+            else:
+                # Need to generate structure type and next pointer chain member validation
+                validity += self.makeOutputOnlyStructValidity(
+                    typeinfo.elem, typeName, typeinfo.getMembers())
+
+        self.writeInclude('structs', typeName, validity,
+                          threadsafety, None, None, None)
+
+    def genGroup(self, groupinfo, groupName, alias):
+        """Group (e.g. C "enum" type) generation.
+        For the validity generator, this just tags individual enumerants
+        as required or not.
+        """
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+
+        # @@@ (Jon) something needs to be done here to handle aliases, probably
+
+        groupElem = groupinfo.elem
+
+        # Loop over the nested 'enum' tags. Keep track of the minimum and
+        # maximum numeric values, if they can be determined; but only for
+        # core API enumerants, not extension enumerants. This is inferred
+        # by looking for 'extends' attributes.
+        for elem in groupElem.findall('enum'):
+            name = elem.get('name')
+            ei = self.registry.lookupElementInfo(name, self.registry.enumdict)
+
+            if ei is None:
+                self.logMsg('error',
+                    f'genGroup({groupName}) - no element found for enum {name}')
+
+            # Tag enumerant as required or not
+            ei.required = self.isEnumRequired(elem)
+
+    def genType(self, typeinfo, name, alias):
+        """Type Generation."""
+        OutputGenerator.genType(self, typeinfo, name, alias)
+
+        # @@@ (Jon) something needs to be done here to handle aliases, probably
+
+        category = typeinfo.elem.get('category')
+        if category in ('struct', 'union'):
+            self.genStruct(typeinfo, name, alias)
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/vkconventions.py b/codegen/vulkan/vulkan-docs-next/scripts/vkconventions.py
new file mode 100755
index 0000000..b4e7966
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/vkconventions.py
@@ -0,0 +1,298 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Working-group-specific style conventions,
+# used in generation.
+
+import re
+import os
+
+from spec_tools.conventions import ConventionsBase
+
+# Modified from default implementation - see category_requires_validation() below
+CATEGORIES_REQUIRING_VALIDATION = set(('handle', 'enum', 'bitmask'))
+
+# Tokenize into "words" for structure types, approximately per spec "Implicit Valid Usage" section 2.7.2
+# This first set is for things we recognize explicitly as words,
+# as exceptions to the general regex.
+# Ideally these would be listed in the spec as exceptions, as OpenXR does.
+SPECIAL_WORDS = set((
+    '16Bit',  # VkPhysicalDevice16BitStorageFeatures
+    '2D',     # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT
+    '3D',     # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT
+    '8Bit',  # VkPhysicalDevice8BitStorageFeaturesKHR
+    'AABB',  # VkGeometryAABBNV
+    'ASTC',  # VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+    'D3D12',  # VkD3D12FenceSubmitInfoKHR
+    'Float16',  # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR
+    'ImagePipe',  # VkImagePipeSurfaceCreateInfoFUCHSIA
+    'Int64',  # VkPhysicalDeviceShaderAtomicInt64FeaturesKHR
+    'Int8',  # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR
+    'MacOS',  # VkMacOSSurfaceCreateInfoMVK
+    'RGBA10X6', # VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
+    'Uint8',  # VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+    'Win32',  # VkWin32SurfaceCreateInfoKHR
+))
+# A regex to match any of the SPECIAL_WORDS
+EXCEPTION_PATTERN = r'(?P<exception>{})'.format(
+    '|'.join('(%s)' % re.escape(w) for w in SPECIAL_WORDS))
+MAIN_RE = re.compile(
+    # the negative lookahead is to prevent the all-caps pattern from being too greedy.
+    r'({}|([0-9]+)|([A-Z][a-z]+)|([A-Z][A-Z]*(?![a-z])))'.format(EXCEPTION_PATTERN))
+
+
+class VulkanConventions(ConventionsBase):
+    @property
+    def null(self):
+        """Preferred spelling of NULL."""
+        return '`NULL`'
+
+    def formatExtension(self, name):
+        """Mark up an extension name as a link the spec."""
+        return '`apiext:{}`'.format(name)
+
+    @property
+    def struct_macro(self):
+        """Get the appropriate format macro for a structure.
+
+        Primarily affects generated valid usage statements.
+        """
+
+        return 'slink:'
+
+    @property
+    def constFlagBits(self):
+        """Returns True if static const flag bits should be generated, False if an enumerated type should be generated."""
+        return False
+
+    @property
+    def structtype_member_name(self):
+        """Return name of the structure type member"""
+        return 'sType'
+
+    @property
+    def nextpointer_member_name(self):
+        """Return name of the structure pointer chain member"""
+        return 'pNext'
+
+    @property
+    def valid_pointer_prefix(self):
+        """Return prefix to pointers which must themselves be valid"""
+        return 'valid'
+
+    def is_structure_type_member(self, paramtype, paramname):
+        """Determine if member type and name match the structure type member."""
+        return paramtype == 'VkStructureType' and paramname == self.structtype_member_name
+
+    def is_nextpointer_member(self, paramtype, paramname):
+        """Determine if member type and name match the next pointer chain member."""
+        return paramtype == 'void' and paramname == self.nextpointer_member_name
+
+    def generate_structure_type_from_name(self, structname):
+        """Generate a structure type name, like VK_STRUCTURE_TYPE_CREATE_INSTANCE_INFO"""
+
+        structure_type_parts = []
+        # Tokenize into "words"
+        for elem in MAIN_RE.findall(structname):
+            word = elem[0]
+            if word == 'Vk':
+                structure_type_parts.append('VK_STRUCTURE_TYPE')
+            else:
+                structure_type_parts.append(word.upper())
+        name = '_'.join(structure_type_parts)
+
+        # The simple-minded rules need modification for some structure names
+        subpats = [
+            [ r'_H_(26[45])_',              r'_H\1_' ],
+            [ r'_VULKAN_([0-9])([0-9])_',   r'_VULKAN_\1_\2_' ],
+            [ r'_VULKAN_SC_([0-9])([0-9])_',r'_VULKAN_SC_\1_\2_' ],
+            [ r'_DIRECT_FB_',               r'_DIRECTFB_' ],
+            [ r'_VULKAN_SC_10',             r'_VULKAN_SC_1_0' ],
+
+        ]
+
+        for subpat in subpats:
+            name = re.sub(subpat[0], subpat[1], name)
+        return name
+
+    @property
+    def warning_comment(self):
+        """Return warning comment to be placed in header of generated Asciidoctor files"""
+        return '// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry'
+
+    @property
+    def file_suffix(self):
+        """Return suffix of generated Asciidoctor files"""
+        return '.adoc'
+
+    def api_name(self, spectype='api'):
+        """Return API or specification name for citations in ref pages.ref
+           pages should link to for
+
+           spectype is the spec this refpage is for: 'api' is the Vulkan API
+           Specification. Defaults to 'api'. If an unrecognized spectype is
+           given, returns None.
+        """
+        if spectype == 'api' or spectype is None:
+            return 'Vulkan'
+        else:
+            return None
+
+    @property
+    def api_prefix(self):
+        """Return API token prefix"""
+        return 'VK_'
+
+    @property
+    def write_contacts(self):
+        """Return whether contact list should be written to extension appendices"""
+        return True
+
+    @property
+    def write_refpage_include(self):
+        """Return whether refpage include should be written to extension appendices"""
+        return True
+
+    @property
+    def member_used_for_unique_vuid(self):
+        """Return the member name used in the VUID-...-...-unique ID."""
+        return self.structtype_member_name
+
+    def is_externsync_command(self, protoname):
+        """Returns True if the protoname element is an API command requiring
+           external synchronization
+        """
+        return protoname is not None and 'vkCmd' in protoname
+
+    def is_api_name(self, name):
+        """Returns True if name is in the reserved API namespace.
+        For Vulkan, these are names with a case-insensitive 'vk' prefix, or
+        a 'PFN_vk' function pointer type prefix.
+        """
+        return name[0:2].lower() == 'vk' or name[0:6] == 'PFN_vk'
+
+    def specURL(self, spectype='api'):
+        """Return public registry URL which ref pages should link to for the
+           current all-extensions HTML specification, so xrefs in the
+           asciidoc source that are not to ref pages can link into it
+           instead. N.b. this may need to change on a per-refpage basis if
+           there are multiple documents involved.
+        """
+        return 'https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html'
+
+    @property
+    def xml_api_name(self):
+        """Return the name used in the default API XML registry for the default API"""
+        return 'vulkan'
+
+    @property
+    def registry_path(self):
+        """Return relpath to the default API XML registry in this project."""
+        return 'xml/vk.xml'
+
+    @property
+    def specification_path(self):
+        """Return relpath to the Asciidoctor specification sources in this project."""
+        return '{generated}/meta'
+
+    @property
+    def special_use_section_anchor(self):
+        """Return asciidoctor anchor name in the API Specification of the
+        section describing extension special uses in detail."""
+        return 'extendingvulkan-compatibility-specialuse'
+
+    @property
+    def extension_index_prefixes(self):
+        """Return a list of extension prefixes used to group extension refpages."""
+        return ['VK_KHR', 'VK_EXT', 'VK']
+
+    @property
+    def unified_flag_refpages(self):
+        """Return True if Flags/FlagBits refpages are unified, False if
+           they are separate.
+        """
+        return False
+
+    @property
+    def spec_reflow_path(self):
+        """Return the path to the spec source folder to reflow"""
+        return os.getcwd()
+
+    @property
+    def spec_no_reflow_dirs(self):
+        """Return a set of directories not to automatically descend into
+           when reflowing spec text
+        """
+        return ('scripts', 'style')
+
+    @property
+    def zero(self):
+        return '`0`'
+
+    def category_requires_validation(self, category):
+        """Return True if the given type 'category' always requires validation.
+
+        Overridden because Vulkan does not require "valid" text for basetype
+        in the spec right now."""
+        return category in CATEGORIES_REQUIRING_VALIDATION
+
+    @property
+    def should_skip_checking_codes(self):
+        """Return True if more than the basic validation of return codes should
+        be skipped for a command.
+
+        Vulkan mostly relies on the validation layers rather than API
+        builtin error checking, so these checks are not appropriate.
+
+        For example, passing in a VkFormat parameter will not potentially
+        generate a VK_ERROR_FORMAT_NOT_SUPPORTED code."""
+
+        return True
+
+    def extension_file_path(self, name):
+        """Return file path to an extension appendix relative to a directory
+           containing all such appendices.
+           - name - extension name"""
+
+        return f'{name}{self.file_suffix}'
+
+    def valid_flag_bit(self, bitpos):
+        """Return True if bitpos is an allowed numeric bit position for
+           an API flag bit.
+
+           Vulkan uses 32 bit Vk*Flags types, and assumes C compilers may
+           cause Vk*FlagBits values with bit 31 set to result in a 64 bit
+           enumerated type, so disallows such flags."""
+        return bitpos >= 0 and bitpos < 31
+
+    @property
+    def extra_refpage_headers(self):
+        """Return any extra text to add to refpage headers."""
+        return 'include::{config}/attribs.adoc[]'
+
+    @property
+    def extra_refpage_body(self):
+        """Return any extra text (following the title) for generated
+           reference pages."""
+        return 'include::{generated}/specattribs.adoc[]'
+
+
+class VulkanSCConventions(VulkanConventions):
+
+    def specURL(self, spectype='api'):
+        """Return public registry URL which ref pages should link to for the
+           current all-extensions HTML specification, so xrefs in the
+           asciidoc source that are not to ref pages can link into it
+           instead. N.b. this may need to change on a per-refpage basis if
+           there are multiple documents involved.
+        """
+        return 'https://registry.khronos.org/vulkansc/specs/1.0-extensions/html/vkspec.html'
+
+    @property
+    def xml_api_name(self):
+        """Return the name used in the default API XML registry for the default API"""
+        return 'vulkansc'
+
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/xml_consistency.py b/codegen/vulkan/vulkan-docs-next/scripts/xml_consistency.py
new file mode 100755
index 0000000..0de982d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/scripts/xml_consistency.py
@@ -0,0 +1,810 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose:      This script checks some "business logic" in the XML registry.
+
+import argparse
+import re
+import sys
+from pathlib import Path
+from collections import defaultdict, deque, namedtuple
+
+from check_spec_links import VulkanEntityDatabase as OrigEntityDatabase
+from reg import Registry
+from spec_tools.consistency_tools import XMLChecker
+from spec_tools.util import findNamedElem, getElemName, getElemType
+from apiconventions import APIConventions
+from parse_dependency import dependencyNames
+
+# These are extensions which do not follow the usual naming conventions,
+# specifying the alternate convention they follow
+EXTENSION_ENUM_NAME_SPELLING_CHANGE = {
+    'VK_EXT_swapchain_colorspace': 'VK_EXT_SWAPCHAIN_COLOR_SPACE',
+}
+
+# These are extensions whose names *look* like they end in version numbers,
+# but do not
+EXTENSION_NAME_VERSION_EXCEPTIONS = (
+    'VK_AMD_gpu_shader_int16',
+    'VK_EXT_index_type_uint8',
+    'VK_EXT_shader_image_atomic_int64',
+    'VK_KHR_video_decode_h264',
+    'VK_KHR_video_decode_h265',
+    'VK_EXT_video_encode_h264',
+    'VK_EXT_video_encode_h265',
+    'VK_KHR_external_fence_win32',
+    'VK_KHR_external_memory_win32',
+    'VK_KHR_external_semaphore_win32',
+    'VK_KHR_shader_atomic_int64',
+    'VK_KHR_shader_float16_int8',
+    'VK_KHR_spirv_1_4',
+    'VK_NV_external_memory_win32',
+    'VK_RESERVED_do_not_use_146',
+    'VK_RESERVED_do_not_use_94',
+)
+
+# These are APIs which can be required by an extension despite not having
+# suffixes matching the vendor ID of that extension.
+# Most are external types.
+# We could make this an (extension name, api name) set to be more specific.
+EXTENSION_API_NAME_EXCEPTIONS = {
+    'AHardwareBuffer',
+    'ANativeWindow',
+    'CAMetalLayer',
+    'IOSurfaceRef',
+    'MTLBuffer_id',
+    'MTLCommandQueue_id',
+    'MTLDevice_id',
+    'MTLSharedEvent_id',
+    'MTLTexture_id',
+    'VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE',
+    'VkFlags64',
+    'VkPipelineCacheCreateFlagBits',
+    'VkPipelineColorBlendStateCreateFlagBits',
+    'VkPipelineDepthStencilStateCreateFlagBits',
+    'VkPipelineLayoutCreateFlagBits',
+}
+
+# These are APIs which contain _RESERVED_ intentionally
+EXTENSION_NAME_RESERVED_EXCEPTIONS = {
+    'VK_STRUCTURE_TYPE_PRIVATE_VENDOR_INFO_RESERVED_OFFSET_0_NV'
+}
+
+# Exceptions to pointer parameter naming rules
+# Keyed by (entity name, type, name).
+CHECK_PARAM_POINTER_NAME_EXCEPTIONS = {
+    ('vkGetDrmDisplayEXT', 'VkDisplayKHR', 'display') : None,
+}
+
+# Exceptions to pNext member requiring an optional attribute
+CHECK_MEMBER_PNEXT_OPTIONAL_EXCEPTIONS = (
+    'VkVideoEncodeInfoKHR',
+    'VkVideoEncodeRateControlLayerInfoKHR',
+)
+
+# Exceptions to VK_INCOMPLETE being required for, and only applicable to, array
+# enumeration functions
+CHECK_ARRAY_ENUMERATION_RETURN_CODE_EXCEPTIONS = (
+    'vkGetDeviceFaultInfoEXT',
+    'vkEnumerateDeviceLayerProperties',
+)
+
+# Exceptions to unknown structure type constants.
+# This is most likely an error in this script, not the XML.
+# It does not understand Vulkan SC (alternate 'api') types.
+CHECK_TYPE_STYPE_EXCEPTIONS = (
+    'VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_RESERVATION_INFO_KHR',
+    'VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE',
+    'VK_STRUCTURE_TYPE_FAULT_DATA',
+    'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES',
+    'VK_STRUCTURE_TYPE_DEVICE_OBJECT_RESERVATION_CREATE_INFO',
+    'VK_STRUCTURE_TYPE_PIPELINE_OFFLINE_CREATE_INFO',
+    'VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO',
+    'VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO',
+    'VK_STRUCTURE_TYPE_DEVICE_SEMAPHORE_SCI_SYNC_POOL_RESERVATION_CREATE_INFO_NV',
+    'VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION',
+    'VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES',
+)
+
+def get_extension_commands(reg):
+    extension_cmds = set()
+    for ext in reg.extensions:
+        for cmd in ext.findall('./require/command[@name]'):
+            extension_cmds.add(cmd.get('name'))
+    return extension_cmds
+
+
+def get_enum_value_names(reg, enum_type):
+    names = set()
+    result_elem = reg.groupdict[enum_type].elem
+    for val in result_elem.findall('./enum[@name]'):
+        names.add(val.get('name'))
+    return names
+
+
+# Regular expression matching an extension name ending in a (possible) version number
+EXTNAME_RE = re.compile(r'(?P<base>(\w+[A-Za-z]))(?P<version>\d+)')
+
+DESTROY_PREFIX = 'vkDestroy'
+TYPEENUM = 'VkStructureType'
+
+SPECIFICATION_DIR = Path(__file__).parent.parent
+REVISION_RE = re.compile(r' *[*] Revision (?P<num>[1-9][0-9]*),.*')
+
+
+def get_extension_source(extname):
+    fn = f'{extname}.adoc'
+    return str(SPECIFICATION_DIR / 'appendices' / fn)
+
+
+class EntityDatabase(OrigEntityDatabase):
+
+    def __init__(self, args):
+        """Retain command-line arguments for later use in makeRegistry"""
+        self.args = args
+
+        super().__init__()
+
+    # Override base class method to not exclude 'disabled' extensions
+    def getExclusionSet(self):
+        """Return a set of "support=" attribute strings that should not be included in the database.
+
+        Called only during construction."""
+
+        return set(())
+
+    def makeRegistry(self):
+        try:
+            import lxml.etree as etree
+            HAS_LXML = True
+        except ImportError:
+            HAS_LXML = False
+        if not HAS_LXML:
+            return super().makeRegistry()
+
+        if len(self.args.files) > 0:
+            registryFile = self.args.files[0]
+        else:
+            registryFile = str(SPECIFICATION_DIR / 'xml/vk.xml')
+
+        registry = Registry()
+        registry.filename = registryFile
+        registry.loadElementTree(etree.parse(registryFile))
+        return registry
+
+
+class Checker(XMLChecker):
+    def __init__(self, args):
+        manual_types_to_codes = {
+            # These are hard-coded "manual" return codes:
+            # the codes of the value (string, list, or tuple)
+            # are available for a command if-and-only-if
+            # the key type is passed as an input.
+            'VkFormat': 'VK_ERROR_FORMAT_NOT_SUPPORTED'
+        }
+        forward_only = {
+            # Like the above, but these are only valid in the
+            # "type implies return code" direction
+        }
+        reverse_only = {
+            # like the above, but these are only valid in the
+            # "return code implies type or its descendant" direction
+            # "XrDuration": "XR_TIMEOUT_EXPIRED"
+        }
+        # Some return codes are related in that only one of a set
+        # may be returned by a command
+        # (eg. XR_ERROR_SESSION_RUNNING and XR_ERROR_SESSION_NOT_RUNNING)
+        self.exclusive_return_code_sets = tuple(
+            # set(("XR_ERROR_SESSION_NOT_RUNNING", "XR_ERROR_SESSION_RUNNING")),
+        )
+
+        # This is used to report collisions.
+        conventions = APIConventions()
+        db = EntityDatabase(args)
+
+        self.extension_cmds = get_extension_commands(db.registry)
+        self.return_codes = get_enum_value_names(db.registry, 'VkResult')
+        self.structure_types = get_enum_value_names(db.registry, TYPEENUM)
+
+        # Dict of entity name to a list of messages to suppress. (Exclude any context data and "Warning:"/"Error:")
+        # Keys are entity names, values are tuples or lists of message text to suppress.
+        suppressions = {}
+
+        # Structures explicitly allowed to have 'limittype' attributes
+        self.allowedStructs = set((
+            'VkFormatProperties',
+            'VkFormatProperties2',
+            'VkPhysicalDeviceProperties',
+            'VkPhysicalDeviceProperties2',
+            'VkPhysicalDeviceLimits',
+            'VkQueueFamilyProperties',
+            'VkQueueFamilyProperties2',
+            'VkSparseImageFormatProperties',
+            'VkSparseImageFormatProperties2',
+        ))
+
+        # Substructures of allowed structures. This can be found by looking
+        # at tags, but there are so few cases that it is hardwired for now.
+        self.nestedStructs = set((
+            'VkPhysicalDeviceLimits',
+            'VkPhysicalDeviceSparseProperties',
+            'VkPhysicalDeviceProperties',
+            'VkQueueFamilyProperties',
+            'VkSparseImageFormatProperties',
+        ))
+
+        # Structures all of whose (non pNext/sType) members are required to
+        # have 'limittype' attributes, as are their descendants
+        self.requiredStructs = set((
+            'VkPhysicalDeviceProperties',
+            'VkPhysicalDeviceProperties2',
+            'VkPhysicalDeviceLimits',
+            'VkSparseImageFormatProperties',
+            'VkSparseImageFormatProperties2',
+        ))
+
+        # Structures which have already have their limittype attributes validated
+        self.validatedLimittype = set()
+
+        # Initialize superclass
+        super().__init__(entity_db=db, conventions=conventions,
+                         manual_types_to_codes=manual_types_to_codes,
+                         forward_only_types_to_codes=forward_only,
+                         reverse_only_types_to_codes=reverse_only,
+                         suppressions=suppressions,
+                         display_warnings=args.warn)
+
+    def check(self):
+        """Extends base class behavior with additional checks"""
+
+        # This test is not run on a per-structure basis, but loops over
+        # specific structures
+        self.check_type_required_limittype()
+
+        super().check()
+
+    def check_command(self, name, info):
+        """Extends base class behavior with additional checks"""
+
+        if name[0:5] == 'vkCmd':
+            if info.elem.get('tasks') is None:
+                self.record_error(f'{name} is a vkCmd* command, but is missing a "tasks" attribute')
+
+        super().check_command(name, info)
+
+    def check_command_return_codes_basic(self, name, info,
+                                         successcodes, errorcodes):
+        """Check a command's return codes for consistency.
+
+        Called on every command."""
+        # Check that all extension commands can return the code associated
+        # with trying to use an extension that was not enabled.
+        # if name in self.extension_cmds and UNSUPPORTED not in errorcodes:
+        #     self.record_error('Missing expected return code',
+        #                       UNSUPPORTED,
+        #                       'implied due to being an extension command')
+
+        codes = successcodes.union(errorcodes)
+
+        # Check that all return codes are recognized.
+        unrecognized = codes - self.return_codes
+        if unrecognized:
+            self.record_error('Unrecognized return code(s):',
+                              unrecognized)
+
+        elem = info.elem
+        params = [(getElemName(elt), elt) for elt in elem.findall('param')]
+
+        def is_count_output(name, elt):
+            # Must end with Count or Size,
+            # not be const,
+            # and be a pointer (detected by naming convention)
+            return (name.endswith('Count') or name.endswith('Size')) \
+                and (elt.tail is None or 'const' not in elt.tail) \
+                and (name.startswith('p'))
+
+        countParams = [elt
+                       for name, elt in params
+                       if is_count_output(name, elt)]
+        if countParams:
+            assert(len(countParams) == 1)
+            if 'VK_INCOMPLETE' not in successcodes:
+                message = "Apparent enumeration of an array without VK_INCOMPLETE in successcodes for command {}.".format(name)
+                if name in CHECK_ARRAY_ENUMERATION_RETURN_CODE_EXCEPTIONS:
+                    self.record_warning('(Allowed exception)', message)
+                else:
+                    self.record_error(message)
+
+        elif 'VK_INCOMPLETE' in successcodes:
+            message = "VK_INCOMPLETE in successcodes of command {} that is apparently not an array enumeration.".format(name)
+            if name in CHECK_ARRAY_ENUMERATION_RETURN_CODE_EXCEPTIONS:
+                self.record_warning('(Allowed exception)', message)
+            else:
+                self.record_error(message)
+
+    def check_param(self, param):
+        """Check a member of a struct or a param of a function.
+
+        Called from check_params."""
+        super().check_param(param)
+
+        if not self.is_api_type(param):
+            return
+
+        param_text = ''.join(param.itertext())
+        param_name = getElemName(param)
+
+        # Make sure the number of leading 'p' matches the pointer count.
+        pointercount = param.find('type').tail
+        if pointercount:
+            pointercount = pointercount.count('*')
+        if pointercount:
+            prefix = 'p' * pointercount
+            if not param_name.startswith(prefix):
+                param_type = param.find('type').text
+                message = "Apparently incorrect pointer-related name prefix for {} - expected it to start with '{}'".format(
+                    param_text, prefix)
+                if (self.entity, param_type, param_name) in CHECK_PARAM_POINTER_NAME_EXCEPTIONS:
+                    self.record_warning('(Allowed exception)', message, elem=param)
+                else:
+                    self.record_error(message, elem=param)
+
+        # Make sure no members have optional="false" attributes
+        optional = param.get('optional')
+        if optional == 'false':
+            message = f'{self.entity}.{param_name} member has disallowed \'optional="false"\' attribute (remove this attribute)'
+            self.record_error(message, elem=param)
+
+        # Make sure pNext members have optional="true" attributes
+        if param_name == self.conventions.nextpointer_member_name:
+            optional = param.get('optional')
+            if optional is None or optional != 'true':
+                message = f'{self.entity}.pNext member is missing \'optional="true"\' attribute'
+                if self.entity in CHECK_MEMBER_PNEXT_OPTIONAL_EXCEPTIONS:
+                    self.record_warning('(Allowed exception)', message, elem=param)
+                else:
+                    self.record_error(message, elem=param)
+
+    def check_type_stype(self, name, info, type_elts):
+        """Check a struct type's sType member"""
+        if len(type_elts) > 1:
+            self.record_error(
+                'Have more than one member of type', TYPEENUM)
+        else:
+            type_elt = type_elts[0]
+            val = type_elt.get('values')
+            if val and val not in self.structure_types:
+                message = f'{self.entity} has unknown structure type constant {val}'
+                if val in CHECK_TYPE_STYPE_EXCEPTIONS:
+                    self.record_warning('(Allowed exception)', message)
+                else:
+                    self.record_error(message)
+
+    def check_type_pnext(self, name, info):
+        """Check a struct type's pNext member, if present"""
+
+        next_name = self.conventions.nextpointer_member_name
+        next_member = findNamedElem(info.elem.findall('member'), next_name)
+        if next_member is not None:
+            # Ensure that the 'optional' attribute is set to 'true'
+            optional = next_member.get('optional')
+            if optional is None or optional != 'true':
+                message = f'{name}.{next_name} member is missing \'optional="true"\' attribute'
+                if name in CHECK_MEMBER_PNEXT_OPTIONAL_EXCEPTIONS:
+                    self.record_warning('(Allowed exception)', message)
+                else:
+                    self.record_error(message)
+
+    def __isLimittypeStruct(self, name, info, allowedStructs):
+        """Check if a type element is a structure allowed to have 'limittype' attributes
+           name - name of a structure
+           info - corresponding TypeInfo object
+           allowedStructs - set of struct names explicitly allowed"""
+
+        # Is this an explicitly allowed struct?
+        if name in allowedStructs:
+            return True
+
+        # Is this a struct extending an explicitly allowed struct?
+        extends = info.elem.get('structextends')
+        if extends is not None:
+            # See if any name in the structextends attribute is an allowed
+            # struct
+            if len(set(extends.split(',')) & allowedStructs) > 0:
+                return True
+
+        return False
+
+    def __validateStructLimittypes(self, name, info, requiredLimittype):
+        """Validate 'limittype' attributes for a single struct.
+           info - TypeInfo for a struct <type>
+           requiredLimittype - True if members *must* have a limittype"""
+
+        # Do not re-check structures
+        if name in self.validatedLimittype:
+            return {}
+        self.validatedLimittype.add(name)
+
+        limittypeDiags = namedtuple('limittypeDiags', ['missing', 'invalid'])
+        badFields = defaultdict(lambda : limittypeDiags(missing=[], invalid=[]))
+        validLimittypes = { 'min', 'max', 'pot', 'mul', 'bits', 'bitmask', 'range', 'struct', 'exact', 'noauto' }
+        for member in info.getMembers():
+            memberName = member.findtext('name')
+            if memberName in ['sType', 'pNext']:
+                continue
+            limittype = member.get('limittype')
+            if limittype is None:
+                # Do not tag this as missing if it is not required
+                if requiredLimittype:
+                    badFields[info.elem.get('name')].missing.append(memberName)
+            elif limittype == 'struct':
+                typeName = member.findtext('type')
+                memberType = self.reg.typedict[typeName]
+                badFields.update(self.__validateStructLimittypes(typeName, memberType, requiredLimittype))
+            else:
+                for value in limittype.split(','):
+                    if value not in validLimittypes:
+                        badFields[info.elem.get('name')].invalid.append(memberName)
+
+        return badFields
+
+    def check_type_disallowed_limittype(self, name, info):
+        """Check if a struct type's members cannot have the 'limittype' attribute"""
+
+        # If not allowed to have limittypes, verify this for each member
+        if not self.__isLimittypeStruct(name, info, self.allowedStructs.union(self.nestedStructs)):
+            for member in info.getMembers():
+                if member.get('limittype') is not None:
+                    memname = member.findtext('name')
+                    self.record_error(f'{name} member {memname} has disallowed limittype attribute')
+
+    def check_type_optional_value(self, name, info):
+        """Check if a struct type's members have disallowed 'optional' attribute values"""
+
+        for member in info.getMembers():
+            # Make sure no members have optional="false" attributes
+            optional = member.get('optional')
+            if optional == 'false':
+                memname = member.findtext('name')
+                message = f'{name} member {memname} has disallowed \'optional="false"\' attribute (remove this attribute)'
+                self.record_error(message, elem=member)
+
+    def check_type_required_limittype(self):
+        """Check struct type members which must have the 'limittype' attribute
+
+        Called from check."""
+
+        for name in self.allowedStructs:
+            # Assume that only extending structs of structs explicitly
+            # requiring limittypes also require them
+            requiredLimittype = (name in self.requiredStructs)
+
+            info = self.reg.typedict[name]
+
+            self.set_error_context(entity=name, elem=info.elem)
+
+            badFields = self.__validateStructLimittypes(name, info, requiredLimittype)
+            for extendingStructName in self.reg.validextensionstructs[name]:
+                extendingStruct = self.reg.typedict[extendingStructName]
+                badFields.update(self.__validateStructLimittypes(extendingStructName, extendingStruct, requiredLimittype))
+
+            if badFields:
+                for key in sorted(badFields.keys()):
+                    diags = badFields[key]
+                    if diags.missing:
+                        self.record_error(f'{name} missing limittype for members {", ".join(badFields[key].missing)}')
+                    if diags.invalid:
+                        self.record_error(f'{name} has invalid limittype for members {", ".join(badFields[key].invalid)}')
+
+    def check_type(self, name, info, category):
+        """Check a type's XML data for consistency.
+
+        Called from check."""
+
+        if category == 'struct':
+            type_elts = [elt
+                         for elt in info.elem.findall('member')
+                         if getElemType(elt) == TYPEENUM]
+
+            if type_elts:
+                self.check_type_stype(name, info, type_elts)
+                self.check_type_pnext(name, info)
+
+            # Check for disallowed limittypes on all structures
+            self.check_type_disallowed_limittype(name, info)
+
+            # Check for disallowed 'optional' values
+            self.check_type_optional_value(name, info)
+        elif category == 'bitmask':
+            if 'Flags' in name:
+                expected_require = name.replace('Flags', 'FlagBits')
+                require = info.elem.get('require')
+                if require is not None and expected_require != require:
+                    self.record_error('Unexpected require attribute value:',
+                                      'got', require,
+                                      'but expected', expected_require)
+        super().check_type(name, info, category)
+
+    def check_suffixes(self, name, info, supported, name_exceptions):
+        """Check suffixes of new APIs required by an extension, which should
+           match the author ID of the extension.
+
+           Called from check_extension.
+
+           name - extension name
+           info - extdict entry for name
+           supported - True if extension supported by API being checked
+           name_exceptions - set of API names to not check, in addition to
+                             the global exception list."""
+
+        def has_suffix(apiname, author):
+            return apiname[-len(author):] == author
+
+        def has_any_suffixes(apiname, authors):
+            for author in authors:
+                if has_suffix(apiname, author):
+                    return True
+            return False
+
+        def check_names(elems, author, alt_authors, name_exceptions):
+            """Check names in a list of elements for consistency
+
+               elems - list of elements to check
+               author - author ID of the <extension> tag
+               alt_authors - set of other allowed author IDs
+               name_exceptions - additional set of allowed exceptions"""
+
+            for elem in elems:
+                apiname = elem.get('name', 'NO NAME ATTRIBUTE')
+                suffix = apiname[-len(author):]
+
+                if (not has_suffix(apiname, author) and
+                    apiname not in EXTENSION_API_NAME_EXCEPTIONS and
+                    apiname not in name_exceptions):
+
+                    msg = f'Extension {name} <{elem.tag}> {apiname} does not have expected suffix {author}'
+
+                    # Explicit 'aliased' deprecations not matching the
+                    # naming rules are allowed, but warned.
+                    if has_any_suffixes(apiname, alt_authors):
+                        self.record_warning('Allowed alternate author ID:', msg)
+                    elif not supported:
+                        self.record_warning('Allowed inconsistency for disabled extension:', msg)
+                    elif elem.get('deprecated') == 'aliased':
+                        self.record_warning('Allowed aliasing deprecation:', msg)
+                    else:
+                        msg += '\n\
+This may be due to an extension interaction not having the correct <require depends="">\n\
+Other exceptions can be added to xml_consistency.py:EXTENSION_API_NAME_EXCEPTIONS'
+                        self.record_error(msg)
+
+        elem = info.elem
+
+        self.set_error_context(entity=name, elem=elem)
+
+        # Extract author ID from the extension name.
+        author = name.split('_')[1]
+
+        # Loop over each <require> tag checking the API name suffixes in
+        # that tag for consistency.
+        # Names in tags whose 'depends' attribute includes extensions with
+        # different author IDs may be suffixed with those IDs.
+        for req_elem in elem.findall('./require'):
+            depends = req_elem.get('depends', '')
+            alt_authors = set()
+            if len(depends) > 0:
+                for name in dependencyNames(depends):
+                    # Skip core versions
+                    if name[0:11] != 'VK_VERSION_':
+                        # Extract author ID from extension name
+                        id = name.split('_')[1]
+                        alt_authors.add(id)
+
+            check_names(req_elem.findall('./command'), author, alt_authors, name_exceptions)
+            check_names(req_elem.findall('./type'), author, alt_authors, name_exceptions)
+            check_names(req_elem.findall('./enum'), author, alt_authors, name_exceptions)
+
+    def check_extension(self, name, info, supported):
+        """Check an extension's XML data for consistency.
+
+        Called from check."""
+
+        elem = info.elem
+        enums = elem.findall('./require/enum[@name]')
+
+        # If extension name is not on the exception list and matches the
+        # versioned-extension pattern, map the extension name to the version
+        # name with the version as a separate word. Otherwise just map it to
+        # the upper-case version of the extension name.
+
+        matches = EXTNAME_RE.fullmatch(name)
+        ext_versioned_name = False
+        if name in EXTENSION_ENUM_NAME_SPELLING_CHANGE:
+            ext_enum_name = EXTENSION_ENUM_NAME_SPELLING_CHANGE.get(name)
+        elif matches is None or name in EXTENSION_NAME_VERSION_EXCEPTIONS:
+            # This is the usual case, either a name that does not look
+            # versioned, or one that does but is on the exception list.
+            ext_enum_name = name.upper()
+        else:
+            # This is a versioned extension name.
+            # Treat the version number as a separate word.
+            base = matches.group('base')
+            version = matches.group('version')
+            ext_enum_name = base.upper() + '_' + version
+            # Keep track of this case
+            ext_versioned_name = True
+
+        # Look for the expected SPEC_VERSION token name
+        version_name = f'{ext_enum_name}_SPEC_VERSION'
+        version_elem = findNamedElem(enums, version_name)
+
+        if version_elem is None:
+            # Did not find a SPEC_VERSION enum matching the extension name
+            if ext_versioned_name:
+                suffix = '\n\
+    Make sure that trailing version numbers in extension names are treated\n\
+    as separate words in extension enumerant names. If this is an extension\n\
+    whose name ends in a number which is not a version, such as "...h264"\n\
+    or "...int16", add it to EXTENSION_NAME_VERSION_EXCEPTIONS in\n\
+    scripts/xml_consistency.py.'
+            else:
+                suffix = ''
+            self.record_error(f'Missing version enum {version_name}{suffix}')
+        elif supported:
+            # Skip unsupported / disabled extensions for these checks
+
+            fn = get_extension_source(name)
+            revisions = []
+            with open(fn, 'r', encoding='utf-8') as fp:
+                for line in fp:
+                    line = line.rstrip()
+                    match = REVISION_RE.match(line)
+                    if match:
+                        revisions.append(int(match.group('num')))
+            ver_from_xml = version_elem.get('value')
+            if revisions:
+                ver_from_text = str(max(revisions))
+                if ver_from_xml != ver_from_text:
+                    self.record_error('Version enum mismatch: spec text indicates', ver_from_text,
+                                      'but XML says', ver_from_xml)
+            else:
+                if ver_from_xml == '1':
+                    self.record_warning(
+                        "Cannot find version history in spec text - make sure it has lines starting exactly like '  * Revision 1, ....'",
+                        filename=fn)
+                else:
+                    self.record_warning("Cannot find version history in spec text, but XML reports a non-1 version number", ver_from_xml,
+                                        " - make sure the spec text has lines starting exactly like '  * Revision 1, ....'",
+                                        filename=fn)
+
+            for enum in enums:
+                enum_name = enum.get('name')
+                if '_RESERVED_' in enum_name and enum_name not in EXTENSION_NAME_RESERVED_EXCEPTIONS:
+                    self.record_error(enum_name, 'should not contain _RESERVED_ for a supported extension.\n\
+If this is intentional, add it to EXTENSION_NAME_RESERVED_EXCEPTIONS in scripts/xml_consistency.py.')
+
+        name_define = f'{ext_enum_name}_EXTENSION_NAME'
+        name_elem = findNamedElem(enums, name_define)
+        if name_elem is None:
+            self.record_error('Missing name enum', name_define)
+        else:
+            # Note: etree handles the XML entities here and turns &quot; back into "
+            expected_name = f'"{name}"'
+            name_val = name_elem.get('value')
+            if name_val != expected_name:
+                self.record_error('Incorrect name enum: expected', expected_name,
+                                  'got', name_val)
+
+        self.check_suffixes(name, info, supported, { version_name, name_define })
+
+        # More general checks
+        super().check_extension(name, info, supported)
+
+    def check_format(self):
+        """Check an extension's XML data for consistency.
+
+        Called from check."""
+
+        astc3d_formats = [
+                'VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT',
+                'VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT'
+        ]
+
+        # Need to build list of formats from rest of <enums>
+        enum_formats = []
+        for enum in self.reg.groupdict['VkFormat'].elem:
+            if enum.get('alias') is None and enum.get('name') != 'VK_FORMAT_UNDEFINED':
+                enum_formats.append(enum.get('name'))
+
+        found_formats = []
+        for name, info in self.reg.formatsdict.items():
+            found_formats.append(name)
+            self.set_error_context(entity=name, elem=info.elem)
+
+            if name not in enum_formats:
+                self.record_error('The <format> has no matching <enum> for', name)
+
+            # Check never just 1 plane
+            plane_elems = info.elem.findall('plane')
+            if len(plane_elems) == 1:
+                self.record_error('The <format> has only 1 <plane> for', name)
+
+            valid_chroma = ['420', '422', '444']
+            if info.elem.get('chroma') and info.elem.get('chroma') not in valid_chroma:
+                self.record_error('The <format> has chroma is not a valid value for', name)
+
+            # The formatsgenerator.py assumes only 1 <spirvimageformat> tag.
+            # If this changes in the future, remove this warning and update generator script
+            spirv_image_format = info.elem.findall('spirvimageformat')
+            if len(spirv_image_format) > 1:
+                self.record_error('More than 1 <spirvimageformat> but formatsgenerator.py is not updated, for format', name)
+
+        # Re-loop to check the other way if the <format> is missing
+        for enum in self.reg.groupdict['VkFormat'].elem:
+            name = enum.get('name')
+            if enum.get('alias') is None and name != 'VK_FORMAT_UNDEFINED':
+                if name not in found_formats and name not in astc3d_formats:
+                    self.set_error_context(entity=name, elem=enum)
+                    self.record_error('The <enum> has no matching <format> for ', name)
+
+        super().check_format()
+
+        # This should be called from check() but as a first pass, do it here
+        # Check for invalid version names in e.g.
+        #    <enable version="VK_VERSION_1_2"/>
+        # Could also consistency check struct / extension tags here
+        for capname in self.reg.spirvcapdict:
+            for elem in self.reg.spirvcapdict[capname].elem.findall('enable'):
+                version = elem.get('version')
+                if version is not None and version not in self.reg.apidict:
+                    self.set_error_context(entity=capname, elem=elem)
+                    self.record_error(f'<spirvcapability> {capname} enabled by a nonexistent version {version}')
+
+if __name__ == '__main__':
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-warn', action='store_true',
+                        help='Enable display of warning messages')
+    parser.add_argument('files', metavar='filename', nargs='*',
+                        help='XML filename to check')
+
+    args = parser.parse_args()
+
+    ckr = Checker(args)
+    ckr.check()
+
+    if ckr.fail:
+        sys.exit(1)
diff --git a/codegen/vulkan/vulkan-docs-next/src/ext_loader/README.md b/codegen/vulkan/vulkan-docs-next/src/ext_loader/README.md
new file mode 100644
index 0000000..3501582
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/src/ext_loader/README.md
@@ -0,0 +1,34 @@
+<!--
+Copyright 2018-2023 The Khronos Group Inc.
+
+SPDX-License-Identifier: CC-BY-4.0
+-->
+
+# What Happened To The Vulkan Extension Loader?
+
+If you are looking for the files vulkan_ext.[ch] in this directory, they
+have been removed. There were two significant problems with these simple
+wrappers.
+
+First, vulkan_ext exported all extension entrypoints. However, the Vulkan
+loader also exports entrypoints for the window system integration
+extensions. If someone tried to compile a project and link it to both the
+loader and vulkan_ext, they would get a bunch of redefined symbols. This
+linking error is difficult to work around, because vulkan_ext does not have
+an easy method of disabling the entrypoints at compile time. It is possible
+to remove these entrypoints when generating vulkan_ext, but even then you
+have to manually compile a list of every single extension to be disabled.
+
+Second, each entrypoint is only stored once, regardless of how many
+instances or devices are created. This means that attempting to use multiple
+instances or devices in parallel can result in one device calling function
+pointers that are only valid on the other device, which will crash. You may
+be able to work around this by never initializing the device dispatch
+(vkExtInitDevice), but we have not tried this.
+
+It is still possible to retrieve the last versions of these files in the
+Github KhronosGroup/Vulkan-Docs repository from the 'v1.1.75' release tag.
+It is also possible to regenerate them from ../../xml/vk.xml, although we
+are no longer maintaining the generator code and it may eventually stop
+working correctly. See README.adoc and the `extloader` Makefile target in
+that directory.
diff --git a/codegen/vulkan/vulkan-docs-next/style/extensions.adoc b/codegen/vulkan/vulkan-docs-next/style/extensions.adoc
new file mode 100644
index 0000000..4e90f1d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/extensions.adoc
@@ -0,0 +1,1248 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[extensions]]
+= API Versions, Extensions, and Layers
+
+This chapter describes required and recommended processes for writing
+specification language for different core API versions, extensions, and API
+layers.
+It is concerned with processes and registration, while fine-grained naming
+conventions are included in the <<naming,API Naming Conventions chapter>>.
+
+[NOTE]
+.Note
+====
+The mechanism and process of specifying extensions is subject to change, as
+we receive feedback from authors and further requirements of documentation
+tooling.
+This document will be updated as changes are made.
+====
+
+
+== Introduction
+
+The Khronos extension registries and extension naming conventions serve
+several purposes:
+
+  * Avoiding naming collisions between extensions developed by mutually
+    unaware parties, both in the extension names themselves, as well as
+    their token, command, and type names.
+  * Allocating enumerant values for tokens added by extensions
+  * Creating a defined order between extensions.
+    Extensions with higher numbers may have dependencies upon extensions
+    with lower numbers, and must define any relevant interactions with
+    lower-numbered extensions.
+  * Provides a central repository for documentation and header changes
+    associated with extensions
+
+
+== Proposing New Extensions
+
+The first step in the process should be to fill out a proposal document, and
+iterate on that before committing to writing specification language.
+
+The main reasons to do this are to ensure that everyone understands the
+nature of the problem being addressed, to be clear why a particular solution
+was chosen in lieu of others, and to allow for design changes before
+committing to specification text.
+If a potential implementor has concerns with any of the design choices, it
+is much easier to change details in a proposal document than it is to
+rewrite specification text.
+
+In the top level `proposals` folder there is a template (`template.adoc`)
+for writing design proposals, including guidance on how it should be used.
+
+For some simpler extensions it may not be necessary to write a proposal
+document if both the problem is well understood and the solution well
+bounded, so this is not a required piece of documentation.
+However it may still be useful to write this in a proposal document.
+
+Once a proposal is written, the Vulkan Working Group and other interested
+parties should be asked to review and provide feedback before specification
+work begins.
+
+
+[[extensions-rules]]
+== General Rules/Guidelines
+
+Some general rules to simplify the specific rules below:
+
+  * API versions, extensions and layers must each have a globally unique
+    name.
+  * All commands and tokens must have a globally unique name.
+  * API versions and extensions can expose new commands, types, and/or
+    tokens, but layers must not.
+  ** However, layers can expose their own extensions, which in turn are
+     allowed to expose new commands and tokens.
+  * All extensions must be registered with Khronos.
+  * Extensions in general are strictly additive and backwards-compatible
+    with each other and with the core API.
+    However, as described in more detail the Fundamentals chapter of the
+    <<vulkan-spec,Vulkan API Specification>>, explicit incompatibilities may
+    exist, and must be documented.
+
+
+[[extensions-naming-conventions]]
+== Version, Extension, and Layer Naming Conventions
+
+Versions, extensions and layers have formal _names_.
+These names are used in a variety of places:
+
+  * When specifying extensions and layers to enable in the API.
+  * As a preprocessor symbol in the `vulkan_*.h` header files indicating
+    that an extension interface is defined at compile time.
+  * To control building the Vulkan Specification from asciidoctor source
+    containing multiple versions and extensions, by explicitly enabling
+    their inclusion.
+
+[NOTE]
+.Note
+====
+Published extensions are documented as part of the default branch (`main`)
+of the <<vulkan-docs,KhronosGroup/Vulkan-Docs>> project.
+They can optionally be included or excluded when generating specifications.
+====
+
+There is a rigid syntax for these names:
+
+  * Versions are named with the syntax `VK_VERSION_<major>_<minor>`.
+  * Extensions are named with the syntax `VK_<author>_<name>`.
+  * Layers are named with the syntax `VK_LAYER_<author>_<name>` or
+    `VK_LAYER_<fqdn>_<name>`.
+
+All these names include a `VK_` prefix, as described in the
+<<naming-preprocessor,Preprocessor Defines>> section above.
+In addition, layers add a `LAYER_` prefix.
+
+All these names must be valid C language identifiers.
+
+
+[[extensions-naming-conventions-name-strings]]
+=== Version, Extension and Layer Name Strings
+
+The `<name>` portion of version, extension and layer names is a concise name
+describing its purpose or functionality.
+The underscore (`_`) character is used as a delimiter between words.
+Every alphabetic character of the name must be in lower case.
+
+
+[[extensions-naming-author-IDs]]
+=== Author IDs for Extensions and Layers
+
+Extension and layer names also contain an _author ID_, indicated by
+`<author>` above, identifying the author of the extension/layer.
+This ID is a short, capitalized string identifying an author, such as a
+Khronos member developing Vulkan implementations for their devices, or a
+non-Khronos developer creating Vulkan layers.
+Author IDs must be registered with Khronos.
+
+Some authors have platform communities they wish to distinguish between, and
+can register additional author IDs for that purpose.
+For example, Google has separate Android and Chrome communities with
+separate author IDs.
+This is represented in the <<extensions-api-registry, API registry>> as:
+
+[source, xml]
+----
+<tag name="ANDROID"  author="Google LLC" contact="contactperson @githubusername"/>
+<tag name="CHROMIUM" author="Google LLC" contact="contactperson @githubusername"/>
+----
+
+In the above example, `Google LLC` is the author for two author IDs
+(`ANDROID` and `CHROMIUM`).
+
+Details on how to register an author ID are provided below.
+Layer authors not wishing to register an author ID with Khronos can instead
+use a fully-qualified domain name (FQDN, indicated by `<fqdn>` above) as the
+ID.
+The FQDN should be a domain name owned by the author.
+FQDNs cannot be used for extensions, only for layers.
+
+_Vendor extensions_ are used for functionality that is, at least initially,
+specific to a single registered author or platform (e.g. Android).
+These extensions are not ratified by Khronos.
+Typically, they are only implemented by the registered author or by
+implementations that support the target platform.
+
+Khronos has registered some author IDs for specific uses:
+
+  * KHR is used for Khronos-ratified extensions.
+  * EXT is used for multi-vendor extensions.
+    These are extensions that have not been ratified, but are intended to be
+    exposed by implementations from multiple vendors.
+
+[NOTE]
+.Note
+====
+The `KHX` author ID was used for _experimental_ extensions, as described in
+the "`Layers & Extensions`" appendix of the <<vulkan-spec,Vulkan API
+Specification>>.
+As of the initial Vulkan 1.1 public release, all `KHX` extensions have been
+promoted to `KHR` status, and this mechanism is no longer used.
+====
+
+The following author IDs are reserved and must _not_ be used:
+
+  * `VK` - To avoid confusion with the top-level `VK_` prefix.
+  * `VULKAN` - To avoid confusion with the name of the Vulkan API.
+  * `LAYER` - To avoid confusion with the higher-level "`LAYER`" prefix.
+  * `KHRONOS` - To avoid confusion with the Khronos organization.
+
+The following is a summary of extension and layer names, demonstrating the
+cases described above:
+
+  * Extension names all use the base prefix `VK_`.
+  * Khronos-ratified extensions add the reserved author ID `KHR` and use the
+    prefix `VK_KHR_`.
+  * Multi-vendor extensions add the special author ID `EXT` to the base
+    prefix, and will use the prefix `VK_EXT_`.
+  * Vendor extensions add the author ID to the base prefix.
+    For example, NVIDIA will use the prefix `VK_NV_`, and Valve will use the
+    prefix `VK_VALVE_`.
+  * Layer names follow the same conventions as extensions, but use the base
+    prefix `VK_LAYER_`.
+  * Because layers need not be registered with Khronos, an alternative
+    mechanism is needed to allow creating unique layer names without
+    registering an author ID.
+    Layer authors that prefer not to register an author ID can instead use a
+    fully-qualified domain name (FQDN) in reverse-order as an author ID,
+    replacing `.` (period) with `_` (underscore) characters.
+    The restriction that layer names must be valid C identifiers means that
+    some FQDNs cannot be used as part of layer names.
+
+
+[source, c]
+.Example
+----
+// Core API version name for Vulkan 1.1
+VK_VERSION_1_1
+
+// Khronos ratified extension name
+VK_KHR_mirror_clamp_to_edge
+
+// Multi-vendor extension name
+VK_EXT_debug_marker
+
+// Vendor extension name using author ID NV
+VK_NV_glsl_shader
+
+// Vendor layer name using author ID LUNARG
+VK_LAYER_LUNARG_vktrace
+
+// Layer name using the FQDN www.3dxcl.invalid instead of an author ID
+VK_LAYER_invalid_3dxcl_www
+----
+
+[NOTE]
+.Note
+====
+To avoid linking to a nonexistent domain, the reserved TLD `.invalid` is
+used in the example above.
+====
+
+
+[[extensions-naming]]
+== Extension Command, Type, and Token Naming Conventions
+
+Extensions may add new commands, types, and tokens, or collectively
+"`objects`", to the Vulkan API.
+These objects are given globally unique names by appending the author ID
+defined above for the extension name as described in the
+<<naming-extension-identifiers, Extension Identifier Naming Conventions>>
+section above.
+
+
+[[extensions-api-registry]]
+== The Vulkan API Registry
+
+The canonical definition of the Vulkan APIs is kept in an XML file known as
+the *Vulkan API Registry*.
+The registry is kept in `xml/vk.xml` in the default branch (`main`) of the
+<<vulkan-docs,KhronosGroup/Vulkan-Docs>> project, containing the most
+recently released Vulkan API specification.
+The registry contains reserved author IDs, core and extension interface
+definitions, definitions of individual commands and structures, and other
+information which must be agreed on by all implementations.
+The registry is used to maintain a single, consistent global namespace for
+the registered entities, to generate the Khronos-supplied Vulkan header
+files, and to create a variety of related documentation used in generating
+the API specification and reference pages.
+Other uses of the registry outside Khronos include the LunarG Loader and
+Validation Layers, and a variety of language bindings.
+
+
+[[extensions-author-ID]]
+== Registering an Author ID With Khronos
+
+Previous Khronos APIs could only officially be modified by Khronos members.
+In an effort to build a more flexible platform, Vulkan allows non-Khronos
+developers to extend and modify the API via layers and extensions in the
+same manner as Khronos members.
+However, extensions must still be registered with Khronos.
+A mechanism for non-members to register layers and extensions is provided.
+
+Extension authors will be able to create an account on GitHub and register
+an author ID with Khronos through the
+<<vulkan-docs,KhronosGroup/Vulkan-Docs>> project.
+The author ID must be used for any extensions that author registers.
+The same mechanism will be used to request registration of extensions or
+layers with Khronos, as described below.
+
+To reserve an author ID, propose a merge request against
+<<extensions-api-registry,`vk.xml`>> in the default branch.
+The merge must add a `<tag>` XML tag and fill in the `name`, `author` and
+`contact` attributes with the requested author ID, the author's formal name
+(e.g. company or project name), and contact email address, respectively.
+The author ID will only be reserved once this merge request is accepted.
+
+Please do not try to reserve author IDs which clearly belong to another
+existing company or project which may wish to develop Vulkan extensions or
+layers in the future, as a matter of courtesy and respect.
+Khronos may decline to register author IDs that are not requested in good
+faith.
+
+
+[[extensions-vendor-id]]
+== Registering a Vendor ID With Khronos
+
+Vulkan implementors must report a valid vendor ID for their implementation
+when queried by fname:vkGetPhysicalDeviceProperties, as described in the
+"`Devices and Queues`" section of the <<vulkan-spec,Vulkan API
+Specification>>.
+If there is no valid PCI vendor ID defined for the physical device,
+implementations must obtain a Khronos vendor ID.
+
+Khronos vendor IDs are reserved in a similar fashion to
+<<extensions-author-ID,author IDs>>.
+While vendor IDs are not directly related to API extensions, the reservation
+process is similar, and so is described in this section.
+
+To reserve an Khronos vendor ID, you must first have a Khronos author ID.
+Propose a merge request against <<extensions-api-registry,`vk.xml`>> in the
+default branch.
+The merge must define a new enumerant by adding an `<enum>` tag to the
+`VkVendorId` `<enums>` tag, following the existing examples.
+The `value` attribute of the `<enum>` must be the next available unused
+value, and is the reserved vendor ID.
+The `name` attribute must be `VK_VENDOR_ID_<author>`, where `<author>` is
+the author tag.
+The vendor ID will be reserved only once this merge request has been
+accepted.
+
+Please do not try to reserve vendor IDs unless you are making a good faith
+effort to develop an implementation of a Khronos API and require one for
+that purpose.
+
+[NOTE]
+.Note
+====
+Other Khronos APIs such as OpenCL also utilize vendor IDs and share the
+Khronos vendor ID space.
+To obtain a vendor ID for these APIs, first reserve it in Vulkan's `vk.xml`
+and once that is done, utilize it in the other API.
+To avoid collisions, we are currently utilizing `vk.xml` as the central
+Khronos vendor ID registry.
+====
+
+
+== Registering Extensions and Layers
+
+Extensions must be registered with Khronos.
+Layers should be registered, but registration is not required.
+Registration means:
+
+  * Receiving an extension number.
+  * Adding the extension or layer name to the list in `vk.xml` and appearing
+    on the Khronos registry website, which will link to associated
+    documentation hosted on Khronos.
+  * For extensions which add to the Vulkan API, including definitions of
+    those additions to `vk.xml`.
+
+Registration for Khronos members is handled by filing a merge request in the
+internal gitlab repository modifying `vk.xml` in the default branch,
+containing the core specification against which the extension or layer will
+be written.
+Registration is not complete until the registry maintainer has validated and
+accepted the merge.
+
+A similar mechanism is used to register extensions not authored by Khronos
+members.
+Implementors who are not Khronos members and who need to create extensions
+must register with Khronos by creating a GitHub account, and registering
+their author ID and/or FQDNs to that account.
+They can then submit new extension registration requests by proposing merges
+to `vk.xml`.
+On acceptance of the merge, the extension will be registered, though its
+specification need not be checked into the Khronos GitHub repository at that
+point.
+
+The registration process can be split into several steps to accommodate
+extension number assignment prior to extension publication:
+
+  * Acquire an extension number.
+    This is done by proposing a merge request against `vk.xml` similarly to
+    how <<extensions-author-ID,author IDs are reserved>>.
+    The merge should add a new `<extension>` tag at the end of the file with
+    attributes specifying the proposed extension `name`, the next unused
+    sequential extension `number`, the `author` and `contact` information
+    (if different than that already specified for the author ID used in the
+    extension name), and finally, specifying `supported="disabled"`.
+    The extension number will be reserved only once this merge request is
+    accepted into the default branch.
+  * Develop and test the extension using the registered extension number.
+  * Publish the extension to Khronos using the previously registered
+    extension number, by submitting merge requests to the default branch
+    defining the changes specific to the extension.
+    Changes to both the specification source, and to `vk.xml` will be
+    needed.
+  ** Extension changes to the specification source must be protected by
+     asciidoctor conditionals as described in the
+     <<extensions-documenting,Documenting Extensions>> section.
+  ** Changes to `vk.xml` must define the extension interfaces in the
+     `<extension>` block, and must also change the `supported` attribute
+     value of the `<extension>` to `supported="vulkan"`.
+  ** When publishing an extension, mark it as enabled by proposing a merge
+     to the default branch changing the `supported` attribute value of the
+     `<extension>` to `supported="vulkan"`.
+  ** Once the merge request defining an extension has been accepted into the
+     default branch, publication is complete - although it may not be
+     visible on GitHub until the next regular core Specification update is
+     pushed out.
+  ** Publishing on the <<vulkan-docs,Khronos public GitHub repository>> is
+     preferred when possible.
+     Khronos members may instead create branches on Khronos' internal gitlab
+     server, but those branches will eventually be mirrored to GitHub.
+  * It is still possible to publish a separate branch of the repository with
+    appropriate changes relative to the core Vulkan API branch instead, but
+    this approach is deprecated and discouraged.
+    If this is done, all changes to `vk.xml` must still be made in the
+    default branch.
+
+
+[[extensions-documenting]]
+== Documenting API Versions and Extensions
+
+API versions and extensions are documented as modifications to the Vulkan
+specification.
+Changes specific to a version or extension are protected by asciidoctor
+conditionals.
+The changes are only visible in generated documentation when the
+Specification is built with an asciidoctor attribute of that name defined.
+Khronos publishes three forms of the Vulkan Specification: the core API
+(e.g. versions 1.x) only; core API with all registered `KHR` extensions; and
+core API with all registered extensions.
+
+
+[[extensions-documenting-extensions]]
+=== Changes for New Extensions
+
+If an new extension, or a related group of them is of sufficient scope to
+require a new chapter of the specification, localize such changes into a
+small number of asciidoctor include files located under a subdirectory with
+the name of the extension.
+An example can be found in `chapters/VK_KHR_surface/wsi.adoc`.
+Most extensions are not entirely self-contained, and also require changes in
+existing parts of the specification to document new interactions.
+Such changes should be inline in existing chapters.
+
+Extensions may also require small additions to `vk.xml`, in addition to
+defining the extension interfaces themselves, for purposes such as
+introducing new return codes or extending structures to existing APIs.
+
+[NOTE]
+.Note
+====
+We do not yet fully document an example of including a new version or
+extension.
+New versions are authored only by Khronos and examples will be available at
+such time that we publish a new version.
+Extension authors should refer to the default branch and search for the
+names of existing extensions, such as `VK_KHR_surface`, for markup examples.
+Some aspects of the changes for this example extension are described below.
+====
+
+Changes for extensions include (but may not be limited to) the following:
+
+  * All extensions must add an appendix to the Vulkan specification.
+    The appendix can be modeled after the `VK_KHR_shader_float_controls`
+    extension in `appendices/VK_KHR_shader_float_controls.adoc`.
+    It contains metainformation about the extension as well as code
+    examples, and revision history.
+    Other useful references are the `VK_KHR_shader_draw_parameters`
+    appendix, which includes a variety of external dependencies and
+    interactions, and the `VK_EXT_debug_marker` appendix, which is a
+    simpler, standalone example.
+  ** The extension appendices are also incorporated in separate
+     per-extension reference pages, and must rigidly follow the structure of
+     the model appendices (although individual subsections can be added or
+     removed as required).
+  ** When creating references to the extension appendix from elsewhere in
+     the Specification, use the custom macro `apiext:`, instead of an
+     explicit asciidoctor link.
+     This allows more easily checking for invalid extensions, and changing
+     the link target for generated reference pages and other alternate
+     output forms.
++
+--
+[source,asciidoc]
+.Example Markup
+----
+A link to the `apiext:VK_KHR_shader_float_controls` extension.
+
+Do not use this (old) form: `<<VK_KHR_shader_float_controls>>`.
+----
+
+[NOTE]
+.Note
+====
+If you are converting an old branch with extension references in it to use
+the `apiext:` macro, you can use this shell script:
+
+[source,sh,subs=attributes+]
+----
+sed -i -E 's/`?<<(VK_[A-Za-z0-9_]*)>>`?/`apiext:\1`/g' chapters/{*.adoc,*/*.adoc} appendices/*.adoc
+----
+====
+--
+  * In the preamble to the appendix, start with an asciidoctor `include` of
+    the automatically generated meta information.
+    This information includes the extension name string, type, number,
+    revision, and contact information from `vk.xml`.
+  * Following the `include`, add an *Other Extension Metadata* subsection
+    containing as many of the following items as are meaningful:
+  ** *Status* - *Complete*, *Draft*, or other.
+     When an extension is published in the default branch, it is normally
+     assumed to be complete; the *Status* field should be removed at this
+     time, unless it contains additional information.
+  ** *Last Modified Date* - if wanted, although git log queries can provide
+     equivalent information.
+  ** *IP Status* - Such as *No known IP claims*, or more specific
+     information if there are known IP claims and the extension has, or has
+     not been ratified by the Khronos Board of Promoters.
+  ** *Interactions and External Dependencies* - may include requirements or
+     interactions with optional Vulkan features, SPIR-V (`SPV`) and OpenGL
+     extensions, and interactions (other than strictly requiring) with other
+     Vulkan extensions.
+  ** *Contributors* - Names and corporate affiliations of people who have
+     made significant direct contributions to this extension.
+  * Following these items, add whitespace followed by a *Description*
+    section.
+    The first paragraph of this section should be a compact, standalone
+    description of the extension's functionality and purpose, suitable for
+    use in summaries of new functionality such as press releases or the
+    Vulkan change log.
+    Additional paragraphs expanding on the description may be added at the
+    author's discretion.
+  * If the extension has been deprecated or promoted, add *Deprecation*
+    and/or *Promotion* sections describing these actions.
+    There is standard boilerplate *Promotion* language used when promoting
+    to a Vulkan core version.
+    For example, see `appendices/VK_EXT_descriptor_indexing.adoc for
+    language used when promoting to Vulkan core, with some features made
+    optional in the promoted version.
+  * Next, add an asciidoctor `include` of the automatically generated
+    interface information.
+    This information includes API entities defined by the extension in
+    `vk.xml`, such as new commands, structures, enumerants, and so on.
+  * Following the `include`, add subsections describing interface
+    information for SPIR-V shading capabilities not captured in `vk.xml`,
+    such as:
+  ** *New SPIR-V Capabilities* (include xrefs to the appropriate new section
+     of the List of SPIR-V Capabilities in `appendices/spirvenv.adoc`).
+  ** *New or Modified Built-In Variables* (include xrefs to the appropriate
+     new section of the Interfaces chapter).
+  ** *New Variable Decorations* (include xrefs to the appropriate new
+     section of the Interfaces chapter).
+  * Finally, add subsections describing other information about the
+    extension, such as:
+  ** *Issues* (in itemized list style, describing each significant issue
+     raised during development of the extension, and its resolution).
+  ** *Version History* (in itemized list style, describing significant
+     functional changes to the extension during its development).
+  * Each extension's appendix file is automatically included from
+    `appendices/extensions.adoc` via code generated from `vk.xml`.
+    It is not necessary to explicitly include the appendices.
+  * Extensions usually make significant additions and changes to the Vulkan
+    specification.
+    They often add an entirely new chapter, or a new section of an existing
+    chapter, defining the new commands, structures, and enumerants.
+    For example, in the case of `VK_EXT_debug_marker`, it adds a new section
+    of the "`Debugging`" chapter in `chapters/debugging.adoc`, by including
+    in that file:
++
+[source,asciidoc]
+.Example Markup
+----
+\ifdef::VK_EXT_debug_marker[]
+\include::{chapters}/VK_EXT_debug_marker/wsi.adoc[]
+\endif::VK_EXT_debug_marker[]
+----
+  * In every other place where the extension alters the behavior of the core
+    Specification, make such changes and protect the modifications with the
+    same asciidoctor conditionals.
+    For example, `VK_KHR_surface` adds new error codes to Vulkan.
+    These are added to `chapters/fundamentals.adoc` in the "`Return Codes`"
+    section as follows:
++
+[source,asciidoc]
+.Example Markup
+----
+... list of existing error codes
+\ifdef::VK_KHR_surface[]
+\include::{chapters}/VK_KHR_surface/VkResultErrorDescriptions_surface.adoc[]
+\endif::VK_KHR_surface[]
+----
+  * If two extensions interact, the asciidoctor conditionals must be
+    carefully structured so as to properly document the interactions if the
+    specification is built with both extensions.
+    Asciidoc conditionals allow
+    link:{docguide}/directives/ifdef-ifndef/#checking-multiple-attributes[AND
+    and OR constructs].
++
+[source,asciidoc]
+.Example Markup
+----
+\ifdef::VK_KHR_foo[]
+... discussion of VK_KHR_foo ...
+\ifdef::VK_KHR_fum[]
+... discussion of interactions between VK_KHR_foo and VK_KHR_fum ...
+\endif::VK_KHR_fum[]
+\endif::VK_KHR_foo[]
+
+\ifdef::VK_KHR_fum[]
+... discussion of VK_KHR_fum ...
+\endif::VK_KHR_fum[]
+----
+  * In cases where a new extension (A) modifies both core and an existing
+    extension (B), if the new extension (A) becomes part of the core at a
+    future release (i.e. is no longer an extension), the portion of the new
+    extension that modified the existing extension (B) effectively becomes
+    part of that existing extension.
+    Thus, at the new core release, enabling the pre-existing extension (B)
+    also enables the functionality that was previously enabled by enabling
+    the previously-new extension (A).
+  * For vendor extensions, changes made to existing core Specification
+    source files and to `vk.xml` all fall under the Contributor License
+    Agreement.
+    Vendors may use their own copyright on new files they add to the
+    repository, although that copyright must be compatible with the
+    Specification copyright.
+  * In most cases, there will be at most two new files added to the
+    specification: `extensions/*extension_name*.adoc`, and
+    `chapters/*extension_name*.adoc`.
+    If you need more than one new file in either the `chapters/` or
+    `extensions/` directories, create a subdirectory named with the
+    extension name and place the new files there.
+    For example, instead of `chapters/VK_KHR_android_surface.adoc`, there is
+    `chapters/VK_KHR_android_surface/platformCreateSurface_android.adoc` and
+    `chapters/VK_KHR_android_surface/platformQuerySupport_android.adoc`,
+    both of which are conditionally included elsewhere in the core
+    specification files.
+  * Valid usage statements referring to interactions between structures in a
+    pname:pNext chain must be described in the parent structure's language,
+    as specified <<extensions-interactions-parent, in more detail below>>.
+  * Valid usage statements should be written including all relevant version
+    and extension information embedded in the text, and surrounded by
+    preprocessor directives as necessary, rather than simply relying on an
+    `ifdef` to take care of it.
+    For example, instead of:
++
+[source,asciidoc]
+.Example Markup
+----
+\ifndef::VK_VERSION_1_3[]
+  * At least one of the following must: be true:
+\ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>>
+     feature is enabled
+\endif::VK_EXT_extended_dynamic_state[]
+\ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>>
+     feature is enabled
+\endif::VK_EXT_shader_object[]
+\endif::VK_VERSION_1_3[]
+----
++
+where the version overrides the need for the features, add a condition for
+the version too:
++
+[source,asciidoc]
+.Example Markup
+----
+  * At least one of the following must: be true:
+\ifdef::VK_EXT_extended_dynamic_state[]
+  ** the <<features-extendedDynamicState, pname:extendedDynamicState>>
+     feature is enabled
+\endif::VK_EXT_extended_dynamic_state[]
+\ifdef::VK_EXT_shader_object[]
+  ** the <<features-shaderObject, pname:shaderObject>>
+     feature is enabled
+\endif::VK_EXT_shader_object[]
+\ifdef::VK_VERSION_1_3[]
+  ** the value of slink:VkApplicationInfo::pname:apiVersion used to create
+     the slink:VkInstance parent of pname:commandBuffer is greater than or
+     equal to Version 1.3
+\endif::VK_VERSION_1_3[]
+----
+
+When writing language dependent on the interaction of multiple extensions,
+asciidoctor conditional syntax is very restricted and only supports a single
+level of logical AND (`+`) or OR (`,`) operators.
+For example, if a section of text only applies when one extensions is
+enabled and another is not, the following markup will not work:
+
+[source,asciidoc]
+.Example Markup (Does Not Work)
+----
+\ifdef::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
+This should only appear if VK_KHR_shader_float16_int8 is defined and
+VK_KHR_8bit_storage is not defined.
+\endif::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
+----
+
+Instead, expand the complex conditional into nested simpler ones:
+
+[source,asciidoc]
+.Example Markup (Does Work)
+----
+\ifdef::VK_KHR_shader_float16_int8[]
+\ifndef::VK_KHR_8bit_storage[]
+This should only appear if VK_KHR_shader_float16_int8 is defined and
+VK_KHR_8bit_storage is not defined.
+\endif::VK_KHR_8bit_storage[]
+\endif::VK_KHR_shader_float16_int8
+----
+
+
+[[extensions-documenting-versions]]
+=== Changes for New API Versions
+
+When creating a new version of the core API, such as Vulkan 1.1, changes are
+done similarly to extensions, with the following differences:
+
+[NOTE]
+.Note
+====
+This list is being developed in conjunction with the Vulkan 1.1
+Specification, is probably incomplete, and is subject to change.
+Items marked *TBD* are still being discussed within the Vulkan Working
+Group.
+====
+
+  * New API versions will be more tightly integrated into the specification
+    sources than extensions, although it is still helpful to partition
+    changes into new files when they are sufficiently self-contained.
+  * New API versions must add an appendix to the Vulkan specification.
+    Unlike the extension appendices, this appendix simply summarizes release
+    information (dates of Ratification by the Khronos Board of Promoters,
+    and of public release), the contributor list, and high-level
+    descriptions of new features in this version (including the names of any
+    extensions promoted to core status in this version).
+  ** TBD - we might choose to include a new API summary with links into the
+     specification body for new features, as well.
+  * TBD - how to name and where to include this appendix file.
+  * Changes to the Specification for new versions will range from small
+    changes to existing language, to new commands and structures, to adding
+    entire new chapters.
+    New chapters must be defined in separate files under the `chapters/`
+    directory, and included at an appropriate point in `vkspec.adoc` or
+    other specification source files.
+    Other changes and additions are included inline in existing chapters.
+  * All changes that are specific to the new version must be protected by
+    the asciidoctor conditional (e.g. the version name).
+    For example, in the case of Vulkan 1.1:
++
+[source,asciidoc]
+.Example Markup
+----
+Add a new chapter:
+
+\ifdef::VK_VERSION_1_1[]
+\include::{chapters}/newchapter11.adoc[]
+\endif::VK_VERSION_1_1[]
+
+Add a new feature:
+
+\ifdef::VK_VERSION_1_1[]
+... language describing the new command, structure, or enumeration
+\endif::VK_VERSION_1_1[]
+----
+  * The specification must continue to be a valid document when the new
+    version is *not* defined, so that (for example) the Vulkan 1.1 branch
+    specification can continue to be updated.
+  * TBD - how to deprecate extensions which have been promoted to core
+    status in the new version, while continuing to have those extensions
+    appear then older versions of the specification are being built.
+  * The same constraints <<extensions-documenting-extensions, described
+    above>> for Valid Usage statements modified by extensions apply for new
+    versions.
+
+
+[[extensions-assigning-token-values]]
+== Assigning Extension Token Values
+
+Extensions can define their own enumeration types and assign any values to
+their enumerants that they like.
+Each enumeration has a private namespace, so collisions are not a problem.
+However, when extending existing enumeration objects with new values, care
+must be taken to preserve global uniqueness of values.
+Enumerations which define new bits in a bitmask are treated specially as
+described in <<extensions-reserving-bitmask-values,Reserving Bitmask
+Values>> below.
+
+Each extension is assigned a range of values that can be used to create
+globally-unique enum values.
+Most values will be negative numbers, but positive numbers are also
+reserved.
+The ability to create both positive and negative extension values is
+necessary to enable extending enumerations such as etext:VkResult that
+assign special meaning to negative and positive values.
+Therefore, 1000 positive and 1000 negative values are reserved for each
+extension.
+Extensions must not define enum values outside their reserved range without
+explicit permission from the owner of those values (e.g. from the author of
+another extension whose range is infringed on, or from the Khronos Registrar
+if the values do not belong to any extension's range).
+
+[NOTE]
+.Note
+====
+Typically, extensions use a unique offset for each enumeration constant they
+add, yielding 1000 distinct token values per extension.
+Since each enumeration object has its own namespace, if an extension needs
+to add many enumeration constant values, it can reuse offsets on a per-type
+basis.
+====
+
+The information needed to add new values to the XML are as follows:
+
+  * The **extension name** (e.g. `VK_KHR_swapchain`) that is adding the new
+    enumeration constant.
+  * The existing enumeration **type** being extended (e.g.
+    stext:VkStructureType).
+  * The name of the new enumeration **token** being added (e.g.
+    etext:VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR).
+  * The **offset**, which is an integer between 0 and 999 relative to the
+    base being used for the extension.
+  * The **direction** may be specified to indicate a negative value
+    (`dir="-"`) when needed for negative etext:VkResult values indicating
+    errors, like etext:VK_ERROR_SURFACE_LOST_KHR.
+    The default direction is positive, if not specified.
+  * The **extension number** is usually implicit and taken from metadata of
+    the extension being defined.
+    It is used to create a range of unused values specific to that
+    extension.
+
+Individual enumerant values are calculated as offsets in the range defined
+by the extension number, as follows:
+
+  * [eq]#_base_value_ = 1000000000#
+  * [eq]#_range_size_ = 1000#
+  * [eq]#enum_offset(_extension_number_, _offset_) = _base_value_ {plus}
+    (_extension_number_ - 1) {times} _range_size_ + _offset_#
+  * Positive values: [eq]#enum_offset(_extension_number_, _offset_})#
+  * Negative values: [eq]#enum_offset(_extension_number_, _offset_})#
+
+The exact syntax for specifying extension enumerant values is defined in the
+<<vulkan-registry, Vulkan API Registry>> schema documentation.
+Extension authors should also refer to existing extensions for examples.
+
+If an extension is promoted to another extension or to a core API version,
+the enumerant values should remain the same as they were in the original
+extension, in order to maintain binary compatibility with existing
+applications.
+In this case, the extension number will need to be specified explicitly to
+keep the promoted enumerant value unchanged.
+
+
+[[extensions-reserving-bitmask-values]]
+=== Reserving Bitmask Values
+
+Enumerants which define bitmask values are a special case, since there are
+only a small number of unused bits available for extensions.
+For core Vulkan API and KHR extension bitmask types, reservations must be
+approved by a vote of the Vulkan Working Group.
+For EXT and vendor extension bitmask types, reservations must be approved by
+the listed contact of the extension.
+Bits are reserved in the same fashion as extension numbers, by creating a
+placeholder reservation for each bit in the disabled XML `<extension>` block
+for that extension in the default branch.
+Once the extension is ready to be merged into the default branch, the
+`<extension>` block is updated with the actual name.
+An example reservation for a disabled extension is:
+
+[source,xml]
+----
+<extension name="VK_AMD_extension_24" number="24" author="AMD" supported="disabled">
+  <require>
+    <enum bitpos="6" extends="VkQueueFlagBits" name="VK_QUEUE_RESERVED_6_BIT_KHR"/>
+----
+
+Bit position 31 may not be used, due to inconsistent behavior by C
+compilers.
+This is enforced by the generator scripts.
+
+[NOTE]
+.Note
+====
+Because of the way in which extension bitmask values are assigned inside the
+XML `<extension>` tag, it is not always obvious what the next free bit in a
+bitmask type is, or when a collision occurs.
+The most straightforward way to determine the next free bit for a given
+bitmask type is to look at the declaration of that type in the generated
+header files.
+When generating the headers, the script will raise warnings about "`Two
+enums found with the same value`" that will help identify this problem.
+====
+
+When a 32-bit flags type is close to running out of bits, a corresponding
+64-bit flag type may be created for use with new interfaces, such as the
+tlink:VkAccessFlags and tlink:VkAccessFlags2KHR types.
+These flag types have corresponding 32- and 64-bit bitmask types
+(elink:VkAccessFlagBits and elink:VkAccessFlagBits2KHR).
+When reserving remaining bits at bit positions 0 through 30, a similarly
+named bit should be reserved in both bitmask types
+(ename:VK_ACCESS_MEMORY_READ_BIT and ename:VK_ACCESS_2_MEMORY_READ_BIT), to
+avoid having the same bit used for different purposes in two otherwise very
+similar interfaces.
+If that usage is not actually supported by one or the other bitmask type,
+the bit should still be reserved, but commented out in the XML.
+
+[NOTE]
+.Note
+====
+The existing reservation mechanism used for in-development extensions does
+not work well for non-disabled extensions.
+So we currently do not have a good way of semantically indicating that a bit
+is reserved, but should not appear in the header file, for a non-disabled
+extension, and an XML comment reserving the bit is a workaround.
+This case will come up very rarely.
+====
+
+
+[[extensions-new-flags-types]]
+== New Flags and Bitmask Types
+
+When an extension introduces a new flags (etext:*Flags) type, it should also
+introduce a corresponding new bitmask (etext:*FlagBits) type.
+The flags type contains zero more more bits from the bitmask, and is used to
+specify sets of bits for commands or structures.
+
+In some cases, a new flags type will be defined with no individual bits yet
+specified.
+This usage occurs when the flags are intended for future expansion.
+In this case, even though the corresponding bitmask type is not yet useful,
+the (empty) bitmask type should be defined in `vk.xml`.
+The empty bitmask type and corresponding flags type should be given
+boilerplate definitions in the specification.
+
+
+== Required Extension Tokens
+
+In addition to any tokens specific to the functionality of an extension, all
+extensions must define two additional tokens.
+
+  * `VK_EXTNAME_SPEC_VERSION` is an integer constant which is the revision
+    of the extension named `VK_extname` (`EXTNAME` is all upper-case, while
+    extname is the capitalization of the actual extension name).
+    This value begins at 1 when an extension specification is first
+    published (pre-release versions may use an internal numbering scheme
+    that is reset at release time), and is incremented when changes are
+    made.
+    Note that the revision of an extension defined in the Vulkan header
+    files and the revision supported by the Vulkan implementation (the
+    pname:specVersion field of the sname:VkExtensionProperties structure
+    corresponding to the extension and returned by one of the
+    link:html/vkspec.html#extendingvulkan-extensions[extension queries]) may
+    differ.
+    The revision value indicates a patch version of the extension
+    specification, and differences in this version number maintain full
+    compatibility, as defined in the "`Compatibility Guarantees`" section of
+    the <<vulkan-spec,Vulkan API Specification>>.
+
+[NOTE]
+.Note
+====
+Any changes requiring the addition or removal of a type or command should be
+done by creating a new extension.
+The resulting extension should take care to include the appropriate
+dependency information on the original extension.
+====
+
+[NOTE]
+.Note
+====
+When the Debug Report extension (VK_EXT_debug_report) was recently updated
+to include the enum values of VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT
+and VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, we violated this
+policy.
+That change was done prior to this revision policy clarification.
+We intend to follow this policy in the future, although in exceptional
+circumstances an exception may be made.
+====
+
+  * `VK_EXTNAME_EXTENSION_NAME` is a string constant which is the name of
+    the extension.
+
+For example, for the WSI extension `VK_KHR_surface`, at the time of writing
+the following definitions were in effect:
+
+[source,c]
+----
+#define VK_KHR_SURFACE_SPEC_VERSION 24
+#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
+----
+
+
+== Extension Handles, Objects, Enums, and Typedefs
+
+Expanding on previous discussion, extensions can add values to existing
+enums; and can add their own commands, enums, typedefs, etc.
+This is done by adding to <<extensions-api-registry,`vk.xml`>>.
+All such additions will be included in the Vulkan header files supplied by
+Khronos.
+
+If the extension adds a new handle to Vulkan, a corresponding value must be
+added to ename:VkObjectType (as defined in the "`Debugging`" section of the
+<<vulkan-spec,Vulkan API Specification>>) in order to allow components to
+identify and track objects of the new type.
+
+The new enumeration value must conform to the naming defined in the
+<<naming-extension-enumerant-names,Extension Enumerant Names>> section.
+In this case, the type's etext:Vk prefix is replaced with the enum prefix
+etext:VK_OBJECT_TYPE_, and the rest of the handle name is converted as
+described in that section.
+
+.Conversion of Handle to sname:VkObjectType Examples:
+[width="70%",options="header",cols="50%,50%"]
+|====
+| Handle                        | sname:VkObjectType token
+| VkSurfaceKHR                  | VK_OBJECT_TYPE_SURFACE_KHR
+| VkDescriptorUpdateTemplateKHR | VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR
+|====
+
+
+[[extension-function_prototypes]]
+== Extension Function Prototypes
+
+Function pointer declarations and function prototypes for all core Vulkan
+API commands are included in the Vulkan header files.
+These come from the official XML specification of the Vulkan API hosted by
+Khronos.
+
+Function pointer declarations are also included in the Vulkan header for all
+commands defined by registered extensions.
+Function prototypes for extensions may be included in the headers.
+Extension commands that are part of the Vulkan ABI must be flagged in the
+XML.
+Function prototypes will be included in the headers for all extension
+commands that are part of the Vulkan ABI.
+
+An extension can be considered platform specific, in which case its
+interfaces in the header files are protected by #ifdefs.
+This is orthogonal to whether an extension command is considered to be part
+of the Vulkan ABI.
+
+The initial set of WSI extension commands (i.e. for `VK_KHR_surface`,
+`VK_KHR_swapchain`, and `VK_KHR_*_surface`) are considered to be part of the
+Vulkan ABI.
+Function prototypes for these WSI commands are included in platform-specific
+files such as `vulkan_android.h`.
+See the "`Window System-Specific Header Control (Informative)`" section of
+the Vulkan Specification for more details.
+
+[NOTE]
+.Note
+====
+Based on feedback from implementors, Khronos expects the Android, Linux, and
+Windows Vulkan SDKs to include our header files, and export the supported
+WSI functions for those platforms from their loader libraries.
+Other implementations can make different choices for their headers and
+loader libraries, but are encouraged to be consistent with these
+implementations.
+====
+
+
+== Accessing Extension Functions From Programs
+
+fname:vkGetInstanceProcAddr and fname:vkGetDeviceProcAddr can be used in
+order to obtain function pointer addresses for core and extension commands
+(per the description in the "`Command Function Pointers`" section of the
+<<vulkan-spec,Vulkan API Specification>>).
+Different Vulkan API loaders can choose to statically export functions for
+some or all of the core Vulkan API commands, and can statically export
+functions for some or all extension commands.
+If a loader statically exports a function, an application can link against
+that function without needing to call one of the ftext:vkGet*ProcAddr
+commands.
+
+[NOTE]
+.Note
+====
+The Vulkan API loader for Android, Linux, and Windows exports functions for
+all core Vulkan API commands, and for a set of WSI extension commands that
+are applicable to those operating systems (see Vulkan loader documentation
+for the relevant platform/OS for details).
+The WSI functions are considered special, because they are required for many
+applications.
+====
+
+
+[[extensions-interactions]]
+== Extending Structures
+
+Extending structures modify the behavior of existing commands or structures
+by providing additional parameters, using the pname:pNext field of an
+existing structure to point to a chain of additional structures.
+This mechanism is described in more detail in the "`Valid Usage for
+Structure Pointer Chains`" section of the <<vulkan-spec,Vulkan API
+Specification>>.
+
+Multiple extending structures affecting the same structure, defined by
+multiple core versions or extensions, can be chained together in this
+fashion.
+Any structure which can be chained in this fashion must begin with the
+following two members:
+
+["source","c++",title=""]
+----
+VkStructureType        sType;
+const void*            pNext;
+----
+
+It is in principle possible for extensions to provide additional parameters
+through alternate means, such as passing a handle parameter to a structure
+with a pname:sType value defined by the extension.
+This approach is strongly discouraged.
+
+When chaining multiple extending structures together, the implementation
+will process the chain starting with the base structure and proceeding
+through each successive extending structure in turn.
+Extending structures should behave in the same fashion no matter the order
+of chaining, and must define their interactions with other extensions such
+that the results are deterministic.
+
+If an extending structure must be present in a pname:pNext chain in specific
+ordering relative to other structures in the chain in order to provide
+deterministic results, it must define that ordering and expected behavior as
+part of its specification and valid usage statements.
+
+[NOTE]
+.Note
+====
+Specific ordering requirements in a pname:pNext chain are strongly
+discouraged.
+====
+
+Validation of structure types in pname:pNext chains is automatically
+generated from the registry, based on the description of `structextends` in
+link:registry.html[the registry document].
+
+
+[[extensions-interactions-parent]]
+== Valid Usage and pname:pNext Chains
+
+When there is a Valid Usage interaction between a parent structure and an
+extending structure appearing in the pname:pNext chain of the parent, that
+interaction must: be described in the explicit Valid Usage section of the
+parent structure, rather than the extending structure, and must: be
+protected by appropriate extension-specific `ifdef` constructs.
+
+For example, a constraint added to the sname:VkImageCreateInfo structure by
+the presence of structures defined by two extensions which cannot interact
+is described as:
+
+[source,asciidoc]
+.Example Markup
+----
+// CORRECT: define interaction with children in parent VkImageCreateInfo
+// structure
+\ifdef::VK_NV_external_memory+VK_KHR_external_memory[]
+  * If the pname:pNext chain includes a
+    slink:VkExternalMemoryImageCreateInfoNV structure, it must: not include
+    a slink:VkExternalMemoryImageCreateInfoKHR structure.
+\endif::VK_NV_external_memory+VK_KHR_external_memory[]
+----
+
+However, a constraint added to sname:VkBufferCreateInfo by an extending
+structure in the `VK_NV_dedicated_allocation` extension must not be
+described as part of the extending structure's valid usage:
+
+[source,asciidoc]
+.Example Markup
+----
+// WRONG! Do not define interaction with parent in child
+// VkDedicatedAllocationBufferCreateInfoNV structure
+  * If pname:dedicatedAllocation is ename:VK_TRUE,
+    sname:VkBufferCreateInfo::pname:flags must: not include
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+----
+
+Instead, define the constraint as part of the parent
+sname:VkBufferCreateInfo structure's valid usage:
+
+[source,asciidoc]
+.Example Markup
+----
+// REWRITTEN CORRECTLY: Define interaction with child in
+// parent VkBufferCreateInfo structure
+\ifdef::VK_NV_dedicated_allocation[]
+  * If the pname:pNext chain includes a
+    slink:VkDedicatedAllocationBufferCreateInfoNV structure, and the
+    pname:dedicatedAllocation member of the chained structure is
+    ename:VK_TRUE, then pname:flags must: not include
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
+    ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+\endif::VK_NV_dedicated_allocation[]
+----
+
+
+[[extensions-feature-structures]]
+== Feature Structures
+
+A feature structure is a structure that extends
+sname:VkPhysicalDeviceFeatures2 and sname:VkDeviceCreateInfo, and which
+provides basetype:VkBool32 members to indicate implementation support for
+individual features.
+
+["source","c++",title=""]
+----
+typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           robustImageAccess;
+} VkPhysicalDeviceImageRobustnessFeaturesEXT;
+----
+
+Every device or physical-device extension that adds or modifies device-level
+commands, or adds new structures or enum values used in device-level
+commands, must define a feature structure.
+
+If an extension requires a feature structure, then any mandatory features
+must be described in the Feature Requirements section.
+New extensions must mandate that implementations support at least one
+feature of an extension.
+
+[source,asciidoc]
+.Example Markup
+----
+ifdef::VK_EXT_image_robustness[]
+  * <<features-robustImageAccess, pname:robustImageAccess>>, if the
+    `apiext:VK_EXT_image_robustness` extension is supported.
+endif::VK_EXT_image_robustness[]
+----
+
+For WSI extensions, it is often necessary to extend
+sname:VkSurfaceCapabilities2KHR in order to enable compatibility between a
+sname:VkSurface and a sname:VkPhysicalDevice to be queried.
+Every device or physical-device extension that relies upon support from the
+window system should implement this query.
+
+The presence of a structure extending sname:VkSurfaceCapabilities2KHR does
+not remove the requirement for a feature structure if any device-level
+functionality is introduced by an extension.
diff --git a/codegen/vulkan/vulkan-docs-next/style/introduction.adoc b/codegen/vulkan/vulkan-docs-next/style/introduction.adoc
new file mode 100644
index 0000000..fc20fba
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/introduction.adoc
@@ -0,0 +1,132 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[introduction]]
+= Introduction
+
+This document contains required procedures and conventions when writing
+specifications for new Vulkan APIs, extensions and layers, or related
+Khronos^{reg}^ documentation such as white papers and tutorials; or
+contributing to existing Vulkan specifications.
+These are collectively referred to as _Vulkan Documentation_ or just
+_documentation_ below.
+The primary focus is the API Specification and API extensions, although all
+of the markup and most of the writing style is equally applicable to other
+documentation.
+
+The primary purpose is to achieve consistency across the API, as well as
+across all of our source and output documents.
+Consistency makes it easier for developers, editors, reviewers, and users of
+our documentation to understand and modify it.
+
+This document is now formally voted on and approved by the Vulkan Working
+Group.
+This means that unless explicitly stated otherwise, the procedures and
+conventions must be followed.
+If you have a strong desire to modify the procedures and conventions, such
+changes must be made through the normal Vulkan Working Group processes.
+
+
+[[introduction-terminology]]
+== Terminology
+
+The key words *must*, *required*, *should*, *recommend*, *may*, and
+*optional* in this document are to be interpreted as described in RFC 2119
+and by the Vulkan Specification in the "`Terminology`" section.
+
+
+[[introduction-structure]]
+== Document Structure
+
+The style guide is broken into four sections:
+
+  * <<naming,API Naming Conventions>> - the required rules for choosing
+    names of Vulkan identifiers of all types.
+  * <<extensions,Extensions and Layers>> - the required procedures for
+    creating formal Vulkan extensions and layers.
+  * <<markup,Markup Style>> - the required and recommended markup style for
+    writing asciidoctor and XML source that follows consistent formatting
+    and layout guidelines, tags special terms and phrases for proper
+    processing by the spec generation tools, etc.
+  * <<writing,Writing Style>> - the required and recommended writing style
+    for overall and fine-grained structure and conventions, normative
+    language use, API naming conventions, common words and phrases to use
+    and to avoid, linking and cross-referencing, etc.
+
+
+[[introduction-asciidoc]]
+== Asciidoctor Markup
+
+Vulkan Documentation is primarily written in Asciidoctor, a text markup
+language.
+We use the command-line asciidoctor client that is actively maintained by
+asciidoctor, which is documented on its website at https://asciidoctor.org.
+
+References to the Asciidoctor User Manual are to sections in the document at
+https://asciidoctor.org/docs/user-manual/.
+
+Asciidoctor is implemented in Ruby (https://www.ruby-lang.org/), which is
+available for Linux, MacOS, and Microsoft Windows.
+
+[NOTE]
+.Note
+====
+There are other implementations of asciidoctor, such as AsciidoctorJ
+(https://github.com/asciidoctor/asciidoctorj) and asciidoctor.js
+(https://github.com/asciidoctor/asciidoctor.js).
+In particular, GitHub and GitLab both have preview renderers for .adoc or
+.asciidoc files in repositories, and live preview extensions exist for
+Chrome and Firefox.
+
+However, because of the use of custom Ruby macros in the Vulkan
+Specification toolchain, and the high complexity of the documents and
+toolchain used to generate it, these web tools cannot currently render the
+Specification from source.
+Instead, we generate HTML and PDF versions of the Specification and publish
+them on the Khronos website.
+
+The Asciidoctor toolchain and build process are not addressed by this
+document, which concentrates solely on source documents.
+====
+
+
+[[introduction-normative]]
+== Normative References
+
+Normative references are references to external documents or resources to
+which documentation authors must comply.
+
+[[acm-references]]
+Association for Computing Machinery.
+_Citation Style and Reference Formats_.
+Retrieved July 27, 2019.
+https://www.acm.org/publications/authors/reference-formatting .
+
+[[iso-8601]]
+International Organization for Standardization.
+_Data elements and interchange formats -- Information interchange --
+Representation of dates and times_ (2004-12-01).
+https://www.iso.org/standard/40874.html .
+Also see https://www.w3.org/QA/Tips/iso-date for colloquial examples.
+
+[[vulkan-docs]]
+Khronos Vulkan Working Group.
+`KhronosGroup/Vulkan-Docs` project on GitHub (July 5, 2016).
+https://github.com/KhronosGroup/Vulkan-Docs .
+
+[[vulkan-registry]]
+Jon Leech.
+_The Khronos Vulkan API Registry_ (February 26, 2023).
+https://registry.khronos.org/vulkan/specs/1.3/registry.html .
+
+[[vulkan-spec]]
+Khronos Vulkan Working Group.
+_Vulkan 1.3.242 - A Specification_ (February 26, 2023).
+https://registry.khronos.org/vulkan/ .
+
+Version 1.3.242 is the latest patch release of the Vulkan API Specification
+as of the time this reference was last updated, but the Specification is
+frequently updated with minor bugfixes and clarifications.
+When a more recent patch release is made, it becomes the normative reference
+for the API.
diff --git a/codegen/vulkan/vulkan-docs-next/style/markup.adoc b/codegen/vulkan/vulkan-docs-next/style/markup.adoc
new file mode 100644
index 0000000..25ef10f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/markup.adoc
@@ -0,0 +1,1230 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[markup]]
+= Markup Style
+
+This chapter demonstrates Asciidoc and Specification structure, including
+text layout and markup style.
+
+
+[[markup-copyrights]]
+== Copyrights and Licenses
+
+The asciidoctor source for the Vulkan Specification and related documents is
+under an open source license.
+
+When creating a *new* file, add the following copyright and license
+statement at the top:
+
+[source,asciidoc]
+.Example Markup
+----
+// Copyright YEAR AUTHOR
+// SPDX-License-Identifier: CC-BY-4.0
+
+----
+
+`YEAR` should be replaced by the year in which the file was created.
+
+`AUTHOR` is normally "`The Khronos Group Inc.`".
+If a new file is created by a member company or outside contributor, use
+that entity's legal name as the author.
+
+`SPDX-License-Identifier` gives the license used for the file, following the
+https://spdx.github.io/spdx-spec/using-SPDX-short-identifiers-in-source-files/[SPDX]
+standard for short identifiers in source files.
+`CC-BY-4.0` is the short identifier for the
+https://spdx.org/licenses/CC-BY-4.0.html[Creative Commons Attribution 4.0
+International] license.
+
+No matter who holds the *copyright* on a source file for the Specification,
+it must be placed under the `CC-BY-4.0` *license*.
+When contributing to the Specification, contributors are required to execute
+a Contributor License Agreement to this effect.
+
+When updating an *existing* file, modify the following copyright and license
+statement to include the year(s) of modification.
+For example:
+
+[source,asciidoc]
+.Example Markup
+----
+// Copyright 2018-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+----
+
+indicates a file which has been been modified in 2018, 2019, and 2020
+inclusive.
+
+Files which are not actual specification source but are "`code-like`", such
+as scripts and Makefiles, are normally placed under the Apache 2.0 license.
+Use `SPDX-License-Identifier:` `Apache-2.0` for such files.
+
+
+[[markup-structure]]
+== Document Structure
+
+Chapters and sections follow a rigid template consisting of an optional
+anchor (if other parts of the document cross-reference the section) followed
+by a link:{docguide}/sections/titles-and-levels/[one line title] and a blank
+line.
+The anchor is typically the base name of the file containing the chapter,
+with a lowercased version of the section name following, with spaces
+replaced by dashes.
+
+Always use the one-line title form, with one to four `=` signs preceding the
+chapter/section title.
+The two-line title form cannot be easily searched for, and often looks like
+other types of asciidoctor delimiters.
+Using a mix of one-line and two-line titles causes compatibility issues, and
+using the two-line title form may implicitly set a backwards-compatibility
+syntax mode we do not want.
+
+Always precede the anchor by two blank lines (except at the beginning of a
+file), and follow the title by a blank line, to set off sections visibly.
+
+[source,asciidoc]
+.Example Markup
+----
+[[markup]]
+= Markup Style
+
+
+[[markup-sample-section]]
+== Sample Section
+----
+
+
+[[markup-include-file-paths]]
+=== Include File Paths
+
+When using the asciidoctor `include::` directive anywhere other than the
+top-level file of the document, always use a full (absolute) path to the
+file being included.
+To make this easier, the specification build process defines several
+attributes which refer to different paths in the document tree:
+
+  * `\{chapters}` - path to the `chapters/` directory containing most of the
+    specification.
+  * `\{appendices}` - path to the `appendices/` directory containing
+    appendices.
+  * `\{generated}` - path to the temporary directory containing generated
+    files such as API includes.
+  * `\{config}` - path to configuration files used in the spec toolchain.
+
+Numerous examples of using these attributes are given in the <<writing,
+Writing Style>> and <<extensions, API Versions, Extensions, and Layers>>
+chapters.
+
+
+[[markup-sample-section]]
+== Sample Section
+
+This is a sample section structurally similar to the <<vulkan-spec,Vulkan
+API Specification>>, nested one level inside a chapter.
+Sections can be nested up to level 5, although not all levels are included
+in the Table of Contents.
+
+
+[[markup-layout]]
+== Asciidoc Markup and Text Layout
+
+Asciidoc source should be text filled to 76 columns with hard line breaks.
+Each sentence in a paragraph ends with a newline to minimize git diff
+conflicts.
+Except when necessary for lists or other markup, text should begin at the
+first column of each line (leading spaces are often semantically meaningful
+in asciidoctor markup).
+
+UTF-8 characters outside the ASCII subset should be used sparingly, only
+when needed for non-English names.
+Instead use asciidoctor markup for special characters, if required.
+For example, two hyphens produces an em-dash:
+
+[NOTE]
+.Example Markup
+====
+
+`+An -- em-dash+` -> An -- em-dash
+====
+
+As an exception, multiplication should be marked with the unicode
+multiplication symbol "`×`" (and *not* an asterisk) when used in plain text.
+You may also use the `\{times}` asciidoctor attribute for this symbol.
+In math sections, the same symbol should be referred to as `\times`.
+In code sections, a conventional asterisk (`*`) should be used instead.
+
+The trailing `+` character causes a hard break in asciidoctor markup, and
+should not be used except for this purpose.
+Markup addition with the \{plus} asciidoctor attribute, except in
+<<writing-math-latexmath, LaTeX math>> and <<markup-blocks, source blocks>>.
+
+See the Asciidoctor docs for
+link:{docguide}/subs/special-characters[supported special characters], as
+well as use of entity references.
+
+Quotation marks should use the 66/99 convention.
+That is, double asymmetric quotation marks, indicated by a quotation mark
+then a backtick as opening marks, and a backtick then quotation mark as
+closing marks (pass:["`like this`"]), which renders "`like this`".
+
+_Never_ use hard tabs or trailing blanks.
+
+* In some cases, limitations of asciidoctor markup may result in lines that
+  are longer than 76 characters and cannot easily be shortened without
+  compromising the output documents.
+
+
+[[markup-minimize-indentation]]
+=== Minimize Indentation
+
+Indentation (leading whitespace) for markup should not be used, except for
+<<markup-sample-section-bullet-lists, bullet lists>> as described below.
+Leading whitespace can affect asciidoctor processing.
+
+When presenting unformatted text, use asciidoctor source blocks as described
+in the next section.
+Source blocks do allow leading whitespace, for example when including sample
+code in C.
+
+
+[[markup-blocks]]
+=== Blocks
+
+There are a variety of asciidoctor _block_ constructs.
+With the exception of <<markup-sample-section-tables,tables>> and of _open
+blocks_ used to group markup together, blocks should be delimited by exactly
+four repeated characters indicating the block type, for consistency.
+The block types and delimiters are shown in the following table.
+
+.Asciidoc Block Delimiters
+[width="70%",options="header",cols="25%,10%,65%"]
+|====
+| Table Type    | Delimiter     | Comments
+| Open          | `--`          | For <<markup-sample-section-bullet-lists,continuation blocks>> and reference pages
+| Open (alt.)   | `----`        | For continuation blocks inside reference pages. Must be preceded by `[open]`
+| Example       | `====`        | For <<markup-informative-notes,Notes>>
+| Passthrough   | `pass:[++++]` | For some kinds of <<writing-math,math markup>>
+| Comment       | `////`        |
+| Listing       | `----`        | For source code listings
+| Sidebar       | `pass:[****]` | For <<markup-implementors-notes,implementor's notes>>
+| Table         | `\|====`      | For <<markup-sample-section-tables,tables>>
+| Quote         | `pass:[____]` |
+| Literal       | `pass:[....]` |
+|====
+
+
+[[markup-blocks-nested-open]]
+==== Open Blocks Nested in Open Blocks
+
+If you need to include an `open` block that would normally use `--`
+delimiters inside an open block delimiting a reference page, such as a
+continuation block, use the markup:
+
+[source,asciidoc,subs=attributes+]
+.Example Markup
+----
+[open]
+{blank}----
+Open block contents
+{blank}----
+----
+
+This replaces prior use of `pass:[~~~~]` delimiters and is enabled by a
+custom asciidoctor extension.
+The `[open]` block type is required in this case, to distinguish the block
+from a regular listing block using the same delimiter.
+
+
+[[markup-footnotes]]
+=== Footnotes
+
+Use manually marked-up footnotes (the asciidoctor footnote construct is OK
+for PDF outputs, but does not work well with long HTML documents since it
+places all footnotes at the end of the document).
+
+Refer to footnotes with asciidoctor superscript notation^1^, and mark up the
+footnotes below, but near the references as labelled lists.
+Manually assigned footnote numbers will inevitably be reused, which is OK as
+long as the colliding numbers are not in the same section.
+
+1::
+    Like this example footnote.
+
+[NOTE]
+====
+.Example Markup
+[source,asciidoc]
+----
+See reference^2^
+
+2::
+    Reference 2.
+----
+
+->
+
+See reference^2^
+
+2::
+    Reference 2.
+====
+
+
+[[markup-sample-section-lists]]
+=== Lists
+
+
+[[markup-sample-section-bullet-lists]]
+==== Bullet Lists and Continuation Blocks
+
+  * Bullet lists are the preferred form of list, aside from glossary
+    definitions.
+  * Lists should have text indented by 4 spaces and the list item delimiter
+    (e.g. one or more asterisks, for bullet lists) indented by two spaces.
++
+Note that continuation blocks for list items longer than one paragraph
+cannot be indented, only the first paragraph.
++
+In general, successive list items should not be separated by white space.
+However, list continuation blocks should be followed by a `+` on a line by
+itself, or by a blank line, due to limitations of the asciidoctor parser.
++
+  * Indent bullet lists two spaces (to the bullet), 4 spaces (to the text,
+    if it extends over multiple lines).
+    This lets us visually distinguish lists from other kinds of markup.
+  ** Nested lists should align the leftmost list item delimiter (bullet,
+     etc.) with the parent delimiter.
+
+[source,asciidoc]
+.Example Markup
+----
+  * This is the first item in a bullet list.
+  * The second item is described with two paragraphs.
+    The second paragraph is in a continuation block:
++
+This is a continuation block containing the second paragraph,
++
+  ** This is a nested list item for the second item.
+     Since it follows a continuation block, it must be separated by a blank
+     line or `+` from that block.
+----
+
+[example]
+====
+  * This is the first item in a bullet list.
+  * The second item is described with two paragraphs.
+    The second paragraph is in a continuation block:
++
+This is a continuation block containing the second paragraph,
++
+  ** This is a nested list item for the second item.
+     Since it follows a continuation block, it must be separated by a blank
+     line or `+` from that block.
+====
+
+  * It is possible to continue a paragraph of the first bullet after a list
+    of sub-bullets if so desired by using continuations in a similar
+    fashion:
+
+[source,asciidoc]
+.Example Markup
+----
+  * This an item in a bullet list.
++
+  ** This is a nested list item for the second item.
+     Since it follows a continuation block, it must be separated by a blank
+     line or `+` from that block.
++
+This is a continuation of the first bullet
+----
+
+[example]
+====
+  * This an item in a bullet list.
++
+  ** This is a nested list item for the second item.
+     Since it follows a continuation block, it must be separated by a blank
+     line or `+` from that block.
++
+This is a continuation of the first bullet
+====
+
+
+[[markup-labelled-lists]]
+==== Labelled Lists
+
+Labelled lists may be used in some cases such as
+<<markup-footnotes,footnotes>>; glossary entries; and long lists of
+information about similar names, such as the "`Features, Limits, and
+Formats`" chapter of the Vulkan Specification.
+Whenever labelled lists are used the label and its terminating double colon
+must be alone on a line, followed by the contents of that list entry.
+
+For consistency do not use labels ending in three or four colons, or two
+semicolons, even though these forms are allowed in asciidoctor markup.
+
+[source,asciidoc]
+.Example Markup
+----
+Glossary Entry::
+    This is a glossary entry.
+
+Last Modified Date::
+    2016-02-16
+----
+
+
+[[markup-numbered-lists]]
+==== Numbered Lists
+
+Numbered lists may be used if strictly necessary to place an ordering on
+list items.
+Always use _implicit numbering_, with the bullet point being a single
+period.
+
+  . Explicit numbering with a number preceding the period is prone to
+    accumulating errors as edits are made.
+  . In addition, the markup is harder to recognize for scripts and tools
+    (other than asciidoctor itself) operating on the document source.
+
+[source,asciidoc]
+.Example Markup
+----
+. First list item.
+. Second list item.
+. Etc.
+----
+
+
+[[markup-sample-section-anchors]]
+=== Anchors and Cross-references
+
+In general, chapters and sections should always have anchors, following the
+naming convention <<markup,discussed above>>.
+Anchors to other sections of the document may be inserted as needed.
+In addition, the autogenerated include files defining commands, structures,
+enumerations and flags all define anchors whose name is the name of the
+command or type being defined, so it is easy to link to a (for example) a
+command name such as <<vkCreateCommandPool,vkCreateCommandPool>>.
+However, using the <<markup-macros,markup macros>> described below is
+preferred when linking to anchors corresponding to API names, such as
+flink:vkCreateCommandPool.
+
+If you want a cross-reference to an anchor to appear as something other than
+the raw anchor name, always make sure to include that text as part of the
+cross-reference.
+There are several different toolchains followed for various forms of
+asciidoctor output, and not all of them treat anchors without alt-text the
+same way.
+
+[source,asciidoc]
+.Example Markup
+----
+In general, chapters and sections should always have anchors, following the
+naming convention <<markup,discussed above>>.
+...
+so it is easy to link to a (for example) a command name such as
+<<vkCreateCommandPool,vkCreateCommandPool>>. However, using the
+<<markup-macros,markup macros>> described below is preferred when linking to
+anchors corresponding to API names, such as flink:vkCreateCommandPool.
+----
+
+
+[[markup-sample-section-features]]
+=== Feature Cross-References
+
+When creating a cross-reference to an API feature (see the "`Features,
+Limits, and Formats`" chapter of the Vulkan Specification), use the
+following markup convention:
+
+[source,asciidoc]
+.Example Markup
+----
+The <<features-someFeatureName, pname:someFeatureName>> feature ...
+----
+
+Always use the API feature name as the cross-reference text.
+
+
+[[markup-sample-section-tables]]
+=== Tables
+
+Asciidoc tables should use the block prefix `|====`.
+Where feasible, align the `|` separating cells across rows.
+This will sometimes result in very wide tables in the source document, but
+makes it easier to see which cells belong to which column.
+Alternatively, long cells can be broken onto a separate line with the `|`
+separator appearing first, except for the first row of the table, which must
+all appear on a single line.
+
+Tables should usually be preceded with a short title.
+
+[source,asciidoc]
+.Example Markup
+----
+.Normative Terminology Macros
+[width="100%",options="header"]
+|====
+| Macro Name     | Output
+| can{cl}        | can:
+| cannot{cl}     | cannot:
+|====
+----
+
+
+[[markup-sample-section-images]]
+=== Figures
+
+All figures (images) must be marked up as follows, to ensure there is an
+anchor and that the figure is given a caption which shows the figure number
+and is added to the list of figures.
+
+[source,asciidoc]
+.Example Markup
+----
+[[fig-anchorname]]
+image::{images}/imagename.svg[align="center",title="Figure caption",opts="{imageopts}"]
+----
+
+There must be SVG versions of each figure checked into the `images/`
+directory, to support generating both HTML and PDF outputs.
+This directory is referred to as `\{images}` so that there is a consistent
+path no matter what directory the file including the images is in.
+The PDF generation pipeline is now able to use SVG images, so PDF versions
+of each image are no longer required.
+The `opts=` attribute defaults to `inline`, which decreases output image
+size in the generated HTML.
+However, the `inline` option interferes with generating HTML diffs between
+two specifications with the script we currently use.
+By using an asciidoctor attribute, this behavior can be controlled.
+
+Asciidoctor restricts captions in figures to be a single line in the source
+document.
+If a longer caption is required, follow the figure directive with a sidebar
+block including the full caption preceded by a link to the figure:
+
+[source,asciidoc]
+.Example Markup
+----
+.Caption
+****
+In the <<fig-anchorname,Figure caption>> diagram, the diagram represents
+... long caption text here.
+****
+----
+
+
+[[markup-indentation-equations]]
+=== Indentation of Equations
+
+Asciidoctor separates structural markup in asciidoctor source from
+formatting, in HTML CSS stylesheets and invoked via asciidoctor "`role`"
+attributes on blocks.
+However, the flexibility of CSS stylesheets is not available in PDF layout
+using the existing PDF toolchain and YML stylesheets.
+
+Explicit indentation should be used sparingly in the specification, but one
+place it is useful is with equations.
+Using <<writing-math, asciidoctor math markup>>, the easiest way to produce
+indentation is with a list where the leading bullet or descriptive text is
+suppressed
+
+[source,asciidoc]
+.Example Markup
+----
+[none]
+  * A {plus} B
+
+or
+
+  {empty}:: A {plus} B
+----
+
+->
+
+[example]
+====
+[none]
+  * A {plus} B
+
+or
+
+  {empty}:: A {plus} B
+====
+
+
+[[markup-italicized-enumerant-names]]
+=== Italicized Enumerant Names
+
+When writing a "`wildcard`" enumerant name containing an italicized term
+within it, it is difficult to directly combine constrained formatting markup
+(double underscores) and the single underscores that separate words in the
+enumerant.
+Instead, use attribute substitution as suggested in the "`Escape
+unconstrained formatting marks`" section of the AsciiDoc Language
+Documentation.
+To help when this is required, an attribute `\{ibit}` expanding to
+`pass:[_i_]` is defined in `config/attribs.adoc`, and the same technique can
+be used for similar markup in other cases if `_i_` is not the desired
+italicized term:
+
+[source,asciidoc]
+.Example Markup
+----
+`VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
+----
+
+->
+
+[example]
+====
+`VK_IMAGE_ASPECT_PLANE__{ibit}__BIT`
+====
+
+[NOTE]
+.Note
+====
+This technique cannot be used with the <<markup-macros, markup macros>> that
+are normally used to semantically tag API names.
+Because there are so few places it is needed, conventional backquote
+formatting markup is used instead.
+====
+
+
+[[markup-macros]]
+== Markup Macros and Normative Terminology
+
+This section discusses Asciidoc macros used in the document.
+In addition to the macros defined by asciidoctor itself, additional macros
+are defined by the <<vulkan-spec,Vulkan API Specification>> and Reference
+Page configuration files.
+
+
+[[markup-macros-api]]
+=== API Markup Macros
+
+These macros must be used to tag command, structure, enumeration, enumerant,
+and other Vulkan-specific names so they can be rendered in a distinctive
+fashion, link to definitions of those names, and be easily searched for in
+the source documents.
+The validation scripts (`make allchecks` output) also rely on these macros
+being used consistently and correctly.
+The API markup macros, with examples of their use, are in the following
+table (note that these examples will not actually successfully link into
+corresponding specification or reference pages, since they are in an
+unrelated document).
+
+.API Markup Macros
+[width="100%",options="header",cols="20%,80%"]
+|====
+| Macro Name    | Usage and Meaning
+| reflink{cl}   | Generates a cross-reference or link to an unknown type of
+                  API entity. This is only used in generated content in the
+                  reference pages which refers to other reference pages
+                  which are not actually part of the API. Example:
+                  reflink{cl}WSIheaders -> reflink:WSIheaders.
+| pass:c[`apiext:`] | Generates a cross-reference or link to the description
+                  of an extension. Example: pass:c[`apiext:VK_KHR_ray_tracing_pipeline`]
+                  -> `apiext:VK_KHR_ray_tracing_pipeline`.
+| flink{cl}     | Generates a cross-reference or link to the definition of
+                  the command name in the macro argument. Example:
+                  flink{cl}vkCreateCommandPool -> flink:vkCreateCommandPool.
+| fname{cl}     | Formats the macro argument like flink{cl}. Does not
+                  generate a cross-reference. Example:
+                  fname{cl}vkCreateCommandPool -> fname:vkCreateCommandPool.
+
+                  Only use this macro <<markup-macros-api-name, when
+                  necessary>>.
+| ftext{cl}     | Formats the macro argument like fname{cl}. May contain
+                  asterisks for wildcards. Not validated. Example:
+                  ftext{cl}vkCmd* -> ftext:vkCmd*.
+
+                  Only use this macro <<markup-macros-api-text, when
+                  necessary>>.
+| slink{cl}     | Generates a cross-reference or link to the definition
+                  of the structure or handle in the macro argument. Example:
+                  slink{cl}VkMemoryHeap -> slink:VkMemoryHeap.
+| sname{cl}     | Formats the macro argument like slink{cl}. Does not
+                  generate a cross-reference. May also be an abstract
+                  structure or handle name. Example:
+                  sname{cl}VkCommandPoolCreateInfo ->
+                  sname:VkCommandPoolCreateInfo.
+
+                  Only use this macro <<markup-macros-api-name, when
+                  necessary>>.
+| stext{cl}     | Formats the macro argument like sname{cl}. May contain
+                  asterisks for wildcards. Not validated. Example:
+                  stext{cl}Vk*CreateInfo -> stext:Vk*CreateInfo.
+
+                  Only use this macro <<markup-macros-api-text, when
+                  necessary>>.
+| elink{cl}     | Formats the macro argument as a Vulkan enumerated
+                  type name and links to the definition of that enumeration
+                  type. Example: elink{cl}VkResult -> elink:VkResult.
+| ename{cl}     | Formats the macro argument as a Vulkan enumerant name.
+                  Example: ename{cl}VK_EVENT_SET -> ename:VK_EVENT_SET.
+                  Note that this is not related to elink{cl}, unlike the
+                  other macro link{cl}/text{cl} pairings.
+| etext{cl}     | Formats the macro argument like ename{cl}. Not validated.
+                  Examples: etext{cl}_RANGE_SIZE -> etext:_RANGE_SIZE,
+                  etext{cl}VK_IMAGE_CREATE_SPARSE_* ->
+                  etext:VK_IMAGE_CREATE_SPARSE_*
+
+                  Only use this macro <<markup-macros-api-text, when
+                  necessary>>.
+| pname{cl}     | Formats the macro argument as a Vulkan parameter or
+                  structure member name. Example: pname{cl}device ->
+                  pname:device.
+| ptext{cl}     | Formats the macro argument like pname{cl}. May contain
+                  asterisks for wildcards. Not validated. Example:
+                  ptext{cl}sparseResidency* -> ptext:sparseResidency*.
+
+                  Only use this macro <<markup-macros-api-text, when
+                  necessary>>.
+| tlink{cl}     | Generates a cross-reference or link to the definition
+                  of the Vulkan type in the macro argument.
+                  Example: tlink{cl}PFN_vkAllocationFunction ->
+                  tlink:PFN_vkAllocationFunction.
+                  This is only used for function pointer and `Vk*Flags`
+                  types at present, although it is a potentially a catch-all
+                  for other types not covered by a more specific macro.
+| tname{cl}     | Formats the macro argument like tlink{cl}. Does not
+                  generate a cross-reference. Example:
+                  tname{cl}PFN_vkAllocationFunction ->
+                  tname:PFN_vkAllocationFunction.
+
+                  Only use this macro <<markup-macros-api-name, when
+                  necessary>>.
+| dlink{cl}     | Generates a cross-reference or link to the definition of
+                  the Vulkan C macro in the macro argument. Example:
+                  dlink{cl}VK_NULL_HANDLE -> dlink:VK_NULL_HANDLE. There are
+                  only a few macros in the Vulkan API, described in the
+                  "`API Boilerplate`" appendix of the <<vulkan-spec,Vulkan
+                  API Specification>>
+| dname{cl}     | Formats the macro argument like dlink{cl}. Does not
+                  generate a cross-reference.
+
+                  Only use this macro <<markup-macros-api-name, when
+                  necessary>>.
+| basetype{cl}  | Formats the macro argument like a basic scalar type,
+                  handle name, or type defined by an external API, with a
+                  definition in the Vulkan Specification.
+                  Examples: basetype{cl}VkBool32 -> basetype:VkBool32,
+                  basetype{cl}AHardwareBuffer -> basetype:AHardwareBuffer,
+                  basetype{cl}VkDeviceSize -> basetype:VkDeviceSize.
+
+                  The `Std*` types used in the Vulkan video APIs
+                  intentionally have no definition in the Vulkan
+                  Specification. Use the code{cl} macro for these types.
+| code{cl}      | Formats the macro argument as a code sample.
+                  Used for SPIR-V keywords, builtin C types, and names
+                  belonging to other APIs such as Linux or Windows system
+                  calls.
+                  Examples: code{cl}uint32_t -> code:uint32_t,
+                  code{cl}ClipDistance -> code:ClipDistance.
+                  code{cl}OpImage*Gather -> code:OpImage*Gather,
+                  code{cl}StdVideoDecodeH264PictureInfo ->
+                  code:StdVideoDecodeH264PictureInfo.
+
+                  This macro allows imbedded field member (`.`) and wildcard
+                  (`*`) text separating words, ending with an optional
+                  wildcard.
+|====
+
+When referring to a compound name (function-parameter, or structure-member),
+combine the macros separated by two colons, resulting in
+flink:vkCmdBindIndexBuffer::pname:indexType and
+slink:VkMemoryHeap::pname:flags.
+This is often done when referring to a particular parameter or member in a
+part of the document other than the description of the corresponding
+function or structure.
+When a nested member within the compound name is referred to, use normal C
+markup:
+
+[source,asciidoc]
+.Example Markup
+----
+flink:vkCmdBindIndexBuffer::pname:indexType
+sname:VkExternalImageFormatProperties::pname:externalMemoryProperties.externalMemoryFeatures
+pname:pAllocateInfo->memoryTypeIndex
+----
+
+[NOTE]
+.Note
+====
+In the macros, "```\->```" is correct markup for the C arrow operator.
+But in any other context (including a "```````" delimited inline literal) it
+would be subject to link:{docguide}/subs/replacements/[Asciidoctor character
+replacement substitutions], resulting in a unicode arrow: ->.
+====
+
+
+[[markup-macros-api-name]]
+==== When to Use *name: Macros
+
+Only use the fname{cl}, sname{cl}, tname{cl}, and dname{cl} macros if no
+definition of the target type with a corresponding anchor exists in the
+document.
+Anchors are automatically defined when including the generated API interface
+definitions under `\{generated}/api/*/*adoc`.
+If an anchor does exist, use the corresponding *link{cl} macro.
+
+[NOTE]
+.Note
+====
+There are many legacy uses of the *name{cl} macros that will be replaced
+over time.
+These uses date from before anchors were added to the generated API
+definitions.
+====
+
+
+[[markup-macros-api-text]]
+==== When to Use *text: Macros
+
+Only use the ftext{cl}, stext{cl}, etext{cl}, and ptext{cl} macros when
+describing something that should be rendered like a command, structure,
+enumerant, or parameter name, respectively, but is not actually one.
+Typically these macros are used for wildcards describing multiple API names
+with common prefixes or suffixes, or common subsets of API names.
+
+
+[[markup-macros-prime-symbols]]
+==== Prime Symbols
+
+Occasionally we want to use mathematical prime symbols as markup in regular
+text, outside of <<latexmath, LaTeX math markup>>.
+While it is easy to write the single quote character for this, since that is
+what LaTeX uses, asciidoctor will turn this into a curved quote character
+whenever it is followed by an alphabetic character.
+For example, when writing the {YCbCr} term widely used to describe a color
+encoding, the obvious markup does not look quite right:
+
+.Prime Attributes (incorrect, with curved prime symbol)
+[width="30%",options="header"]
+|====
+| Markup              | Output
+| `pass:[Y'C~b~C~r~]` | Y'C~b~C~r~
+|====
+
+Using a backslash to escape the apostrophe works in body text, but not
+places such as section titles, captions, and link text.
+When prime symbols are needed, use the Unicode ``prime'' symbol.
+Several predefined asciidoctor variables are available to help with this,
+including symbols for {YCbCr} and {RGBprime} because they are frequently
+used in the specification.
+
+.Prime Attributes (correct)
+[width="30%",options="header"]
+|====
+| Markup              | Output
+| `pass:[{prime}]`    | {prime}
+| `pass:[{YCbCr}]`    | {YCbCr}
+| `pass:[{RGBprime}]` | {RGBprime}
+|====
+
+
+==== Other Markup
+
+Uses of standard Asciidoc markup are less common.
+Occasional asterisk markup is used for *emphasis*.
+Underscores are used for _glossary terms_.
+Backtick markup is used for the C `NULL` macro.
+
+[source,asciidoc]
+.Example Markup
+----
+*emphasis*
+`NULL`
+----
+
+
+==== Glossary Terms
+
+Glossary terms are currently marked up using underscore markup where they
+are defined in the documents, as well as being added to the formal Glossary
+appendix in the <<vulkan-spec,Vulkan API Specification>>.
+However, we will probably change to using custom macros soon, to enable
+linkage between the glossary and definitions in the specification body.
+
+[source,asciidoc]
+.Example Markup
+----
+_Glossary terms_
+----
+
+
+=== Normative Terminology
+
+Normative terminology is precisely defined in section 1.3 of the
+<<vulkan-spec,Vulkan API Specification>>, and is used to visually tag terms
+which express mandatory and optional behavior of Vulkan implementations, and
+of applications using Vulkan.
+
+Whenever one of these terms appears in the <<vulkan-spec,Vulkan API
+Specification>> outside of an <<markup-informative,informative section>>, it
+must be tagged using the macros, to indicate that its use has been carefully
+considered and is consistent with the definitions in section 1.3.
+This is extremely important for determining IP that is in and out of Scope
+during Ratification reviews.
+The normative terminology macros are defined in the following table:
+
+.Normative Terminology Macros
+[width="30%",options="header"]
+|====
+| Macro Name     | Output
+| can{cl}        | can:
+| cannot{cl}     | cannot:
+| may{cl}        | may:
+| may{cl} not    | may: not
+| must{cl}       | must:
+| must{cl} not   | must: not
+| optional{cl}   | optional:
+| optionally{cl} | optionally:
+| required{cl}   | required:
+| should{cl}     | should:
+| should{cl} not | should: not
+|====
+
+Note that the macros are lower-case only, so language should be written such
+that these terms do not appear at the beginning of a sentence (if really
+necessary, additional capitalized macros could be added).
+
+
+==== Optional Behavior
+
+If a described behavior of the implementation is not necessary for
+conformance, use the terms _may{cl}_, _optional{cl}_, or _optionally{cl}_ to
+describe it.
+
+If a described usage pattern by the application is allowed but not
+necessary, use the term _can{cl}_ to describe it.
+
+If language flows more logically using the term "`may not`", use the term
+_may{cl} not_ to describe it.
+
+
+==== Optional Functionality
+
+If functionality (rather than behavior) is optional, it should be described
+as
+
+[source,asciidoc]
+.Example Markup
+----
+not required:
+----
+
+Implementations are not mandated to support functionality which is not
+required, but if they do, they must behave as described by the
+<<vulkan-spec,Vulkan API Specification>>.
+The term _functionality_ includes API features, extensions, and layers.
+
+
+[[markup-informative]]
+== Informative, Editing and Implementor's Notes
+
+There are several possible types of notes.
+Depending on the type of output, they are rendered in different styles, but
+always include a note title, and are usually set off in a box or with an
+icon.
+While asciidoctor supports a wide set of _admonition paragraphs_ such as
+TIP, IMPORTANT, WARNING, and CAUTION, we always use the NOTE form, augmented
+by a note title.
+Each type of note is discussed below.
+
+
+[[markup-informative-notes]]
+=== Informative Sections and Notes
+
+If an entire chapter or section is considered informative, its title should
+be suffixed with "`(Informative)`".
+Additionally, the chapter or section text may begin with the sentence:
+
+[source,asciidoc]
+.Example Markup
+----
+== Explanatory Section (Informative)
+
+This chapter/section is Informative.
+----
+
+Informative notes always appear as part of the document, but are considered
+non-normative.
+They usually describe usage advice for applications, and are always given
+the title _Note_, as in the following example:
+
+[NOTE]
+.Note
+====
+This is an informative note.
+====
+
+[source,asciidoc]
+.Example Markup
+----
+[NOTE]
+.Note
+====
+This is an informative note.
+====
+----
+
+It is not necessary to include the text "`Informative`" in the body of the
+note.
+
+
+[[markup-editing-notes]]
+=== Editing Notes
+
+Editing notes usually only appear in internal (non-published) versions of
+documents, via asciidoctor conditionals.
+If they are not resolved, or are internal issues that should not be visible
+in public, they should be removed from the source before pushing content to
+the canonical GitHub repository.
+They usually tag places where an outstanding Gitlab/GitHub issue is being
+worked, and are always given the title _editing-note_, as in the following
+example:
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+This is an editing note, marked up as follows:
+====
+endif::editing-notes[]
+
+[source,asciidoc]
+.Example Markup
+----
+\ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+Contents of an editing note go here.
+It is good practice to include a Gitlab/GitHub issue number, or link to the
+issue, in the editing note.
+====
+\endif::editing-notes[]
+----
+
+
+[[markup-implementors-notes]]
+=== Implementor's Notes
+
+Implementor's notes may or may not appear in published versions of
+documents, via asciidoctor conditionals.
+They describe suggested approaches or guidelines for people writing Vulkan
+implementations, and are rare because the hardware being targeted varies so
+widely.
+They are always given the title _Implementor's Note_, as in the following
+example:
+
+ifdef::implementation-guide[]
+.Implementor's Note
+====
+This is an implementor's note, marked up as follows:
+====
+endif::implementation-guide[]
+
+[source,asciidoc]
+.Example Markup
+----
+\ifdef::implementation-guide[]
+.Implementor's Note
+====
+Contents of an implementor's note go here.
+====
+\endif::implementation-guide[]
+----
+
+
+[[markup-word-choices]]
+== Word Choices
+
+There are a variety of common terms that have several equivalent word
+choices.
+Always use the words or phrases in the first column instead of the alternate
+terms.
+This list may not be comprehensive; when in doubt, be guided by the existing
+<<vulkan-spec,Vulkan API Specification>>.
+
+.Word Choices
+[width="100%",options="header"]
+|====
+| Use This      | Instead Of     | Comments
+| allocate      | create
+                | When describing objects or memory resulting from
+                  ftext:vkAllocate* commands.
+| application   | client / user  |
+| begins / begun      | starts / started | For ftext:vkBegin* - also see "`finish`"
+| finishes / finished | ends / ended     | For ftext:vkEnd* - also see "`begins`"
+| bitmask       | bit field
+                | Technically correct. Vulkan bitmasks are just integers and
+                  are not logically addressable at the bit level.
+| bound         | currently bound
+                | Appears primarily in valid usage statements, which are
+                  always referring to the current state of the objects
+                  they are validating.
+                  Rare exceptions may be justified in other cases.
+| called in a command buffer
+                | called on a command buffer
+                | Technically correct.
+| command       | function
+                | Except when talking about function pointers returned by
+                  ftext:vkGet*ProcAddr commands.
+| component     | channel        | Specifically this refers to color channels/components
+| create        | allocate
+                | When describing objects resulting from ftext:vkCreate*
+                  commands.
+| depth/stencil | packed (interleaved, combined, _other prefix_)
+                  depth/stencil, depth-stencil, DepthStencil, etc.
+                | Combined format implicit in the name.
+| device        | GPU / processor / accelerator
+                | The Vulkan specification is functional and could be
+                  implemented in many different ways.
+| dispatching command, +
+  drawing command
+                | dispatch command,
+                  draw command   | Glossary usage
+| executable memory, +
+  executable state, +
+  pipeline executable
+                | executable     | Disambiguation
+| heterogeneous | heterogenous   | More common
+| homogeneous   | homogenous     | More common
+| host          | CPU |
+| host endianness | platform endianness |
+| image subresource | subresource
+                | Except when referring to _host-accessible subresources_
+| implementation| system / hardware / software
+                | For consistency, and avoids implied requirements.
+| implementor   | implementer    | For consistency with historical specification practice
+| indices       | indexes        | More common
+| _handle_ is not dlink{cl}VK_NULL_HANDLE
+                | _handle_ is a valid structure |
+| member        | field          |
+| ename:enumerant specifies
+                | ename:enumerant indicates (denotes)
+                | When giving a brief description of enums in an enumerated
+                  type.
+                  It is often appropriate to use "`enumerant _is_`" when
+                  describing the behavior or meaning of enumerants in other
+                  places.
+| _verb_ on the device
+                | _verb_ in the device
+                | Such as "`enabled on`" or "`executed on`"
+| pname:parameter are/is
+                | pname:parameter specifies (denotes, indicates)
+                | In cases when _are_ or _if_ are not grammatically
+                  appropriate, _specifies_ may be used instead.
+| pname:parameter is
+                | the value of pname:parameter is
+                | In rare cases, _the value of_ is appropriate. See the
+                  existing specification language for examples.
+| pname:parameter is a _typename_ containing / controlling / defining /
+  describing / specifying / etc.
+                | pname:parameter is a _typename_ that/which contains
+                  (controls, defines, describes, specifies, etc.)
+                | Commonly used for more nuanced descriptions of parameters
+                  or structure members
+| reference monitor   | mastering display|
+| runtime       | run time / run-time | Arbitrary choice for consistency
+| used          | referenced     | When describing attachments specified in a
+                                   subpass description.
+| statically used | referenced   | When describing resources or push constants
+                                   accessed by shader code
+| _a more specific term_ | referenced | For all other situations.
+|====
+
+[NOTE]
+.Note
+====
+The "`begin/start`" and "`end/finish`" distinction is still being sorted
+out.
+See Gitlab issue #61.
+====
+
+
+[[markup-avoid-contractions]]
+=== Avoid Abbreviations and Contractions
+
+Abbreviations and contractions make the specification sound less formal.
+Avoid using them in specification text.
+The following lists provides some guidance, but are not complete.
+
+.Word Choices (Contractions)
+[width="30%",options="header"]
+|====
+| Use This      | Instead Of
+| are not       | aren't
+| cannot{cl}    | can't
+| does not      | doesn't
+| do not        | don't
+| has not       | hasn't
+| is not        | isn't
+| it is         | it's
+| should not    | shouldn't
+| that is       | that's
+| there is      | there's
+| we are        | we're
+| we will       | we'll
+| we would      | we'd
+| what is       | what's
+| will not      | won't
+| would not     | wouldn't
+|====
+
+.Word Choices (Abbreviations)
+[width="30%",options="header"]
+|====
+| Use This      | Instead Of
+| information   | info
+| specification | spec
+|====
+
+[NOTE]
+.Note
+====
+Avoid using abbreviations in specification text describing the API, even
+though there are certain <<naming-abbreviations, approved abbreviations>>
+used in the names of API entities such as commands, structures, and
+enumerants.
+====
+
+
+[[markup-terms-caution]]
+=== Terms to Use With Caution
+
+The term _subset_ is sometimes used to refer to a _strict subset_, and
+sometimes used to refer to a subset which may be equal to the entire set.
+This is particularly likely to come up when describing bitmasks.
+Make sure to use either _subset_ or _strict subset_ as appropriate.
+
+
+[[markup-terms-avoid]]
+=== Terms to Avoid
+
+Do not describe anything in the documentation using vague or wishy-washy
+terms.
+Our goal is to precisely describe behavior of implementations.
+
+The normative terms may{cl}, optional{cl}, and should{cl} are available when
+implementations may make choices of behavior, but when such choices are
+allowed, each choice still must have well-defined behavior.
+
+.Terms to Avoid
+[width="100%",options="header"]
+|====
+| Bad Term | Comments
+| expect   | And variants such as _expected_
+| likely   | And variants such as _will likely_
+| allowed, could, generally, might, probably, perhaps
+           | And all other such terms of choice. Use _may{cl}_ or _can{cl}_
+             depending on the context.
+| may{cl} or may{cl} not   | Just use _may{cl}_.
+|====
diff --git a/codegen/vulkan/vulkan-docs-next/style/misc.adoc b/codegen/vulkan/vulkan-docs-next/style/misc.adoc
new file mode 100644
index 0000000..c508890
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/misc.adoc
@@ -0,0 +1,115 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[miscellaneous]]
+= Image Authoring, Formats, and Style
+
+Images used in the Vulkan documents must be kept in the directory `images/`
+in SVG format.
+
+Images should be authored in the open-source
+link:https://inkscape.org/[`Inkscape`] tool, downloadable from its website
+or packaged as an optional install for most Linux distributions.
+This allows other people to easily edit your images in the future.
+Also, while SVG is in principle a portable image format, some proprietary
+image editors have been observed to produce images incompatible with the PDF
+image pipeline used by the Specification.
+
+Images must be authored at their actual image size in the HTML and PDF
+output documents, and must not be scaled with asciidoctor options.
+In most cases, images are included as standalone figures and should occupy
+the full width of the document - do not leave unnecessary whitespace on
+either side of the image.
+
+The PDF output has an available width of just over 660px (at the default
+96dpi), and a height somewhere around 1000px (which diagrams should really
+go nowhere near anyway).
+The html output is wider (800 pixels) and with practically unlimited height.
+As the PDF dimensions are more restrictive, images should not exceed these
+limits.
+
+[NOTE]
+.Note
+====
+According to the documentation available, the PDF output *should* have
+dimensions of roughly 184mm x 271mm - or equivalently 697px x 1026px (A4
+size [asciidoctor default] with a 0.5in margin [prawn-pdf default] on each
+side).
+However for reasons currently unknown, at least the available width before
+images are scaled down lies is about 30-something pixels lower than that;
+the height where this happens has not been measured, but is likely to
+similarly be lower than it should be for reasons currently unknown.
+====
+
+Dimensions of elements in the SVG file should be authored in pixels (`px`)
+such that lines/strokes are not unnecessarily anti-aliased (e.g. usually
+stick to integer pixel widths for lines).
+In many cases it is useful to also set the background grid to px, but it not
+necessary; Inkscape has reliable conversions between px and mm using a
+default dpi of 96 (which matches the PDF output), so the output dimension is
+mostly irrelevant.
+
+Text in images should usually appear at 12 point type so as to match that in
+the body of the specification, though 10 point text can be used sparingly
+where necessary (however this is often indicative of the diagram being too
+cramped, so authors should consider scaling or reworking the diagram
+instead).
+Text should use the built-in generic sans serif font so as to ensure the
+font in the output document matches whatever sans serif font is used for
+that document.
+Note that the character set is currently <<character-sets-in-svg,restricted
+to Windows-1252>>.
+
+The font and color scheme used for existing images (black, red, and 50%
+gray) should be used for changes and new images whenever reasonable to do
+so, to preserve a consistent look and feel.
+Whilst a white background is typically assumed, explicitly adding white as a
+color should be avoided - instead leave elements transparent so the diagrams
+can be used in other documents.
+
+Many other elements are consistent throughout the set of diagrams which
+should be maintained in new diagrams where possible.
+Examples include:
+
+  * Lines are usually either fully solid, or use a consistent, and
+    relatively spacious, dash style.
+  * Lines are capped with a consistent arrow shape where relevant.
+  * Small solid circles representing points are a consistently sized circle.
+
+Whenever reasonable, it is advised to copy an existing similar diagram and
+edit it rather than creating one from scratch in order to reuse elements and
+maintain consistency.
+
+
+[[character-sets-in-svg]]
+== Character Sets in SVG Files
+
+At the moment, the PDF conversion path only supports the Windows-1252
+character set, as we are currently using the standard fonts built into every
+PDF viewer - such that we do not have to embed a different font.
+Unfortunately these only support Windows-1252, which is a highly limited
+character set.
+
+As such, characters not in that set will not display properly when present
+in an SVG, and will generate a warning when building the PDF.
+Luckily, Inkscape has an "`Object to path`" function built in, which will
+convert text to a raw path, allowing these characters to be supported.
+
+Please ensure that you build the PDF before submitting any new images,
+particularly with non-standard characters, in order to catch such errors.
+
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+*Other Stuff Which May Be Described In This Chapter Eventually*
+
+  * Something about Image formats
+  * Something about validation scripts
+  * Glossary lists
+  * New param/enum macros
+====
+endif::editing-notes[]
+
diff --git a/codegen/vulkan/vulkan-docs-next/style/naming.adoc b/codegen/vulkan/vulkan-docs-next/style/naming.adoc
new file mode 100644
index 0000000..c58b96b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/naming.adoc
@@ -0,0 +1,657 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[naming]]
+= API Naming Conventions
+
+Identifiers in the Vulkan API (e.g. types, parameters, constants, etc.) all
+follow a set of naming rules, providing a consistent scheme for developers.
+
+The Vulkan C API uses prefixes as an implicit namespace control mechanism.
+Bindings to other languages can choose not to use these prefixes if the
+language provides an explicit namespace mechanism.
+
+
+== General Naming Rules
+
+Names of identifiers should generally be written with full words, as a
+concise description of what that identifier is.
+For example, the type of a structure containing information about how to
+create an instance is stext:VkInstanceCreateInfo.
+
+Abbreviations and prefixes are sometimes used in the API when they do not
+impede clarity.
+All abbreviations and prefixes used in the API must be approved by the
+Vulkan working group, and be added to the <<naming-abbreviations,Common
+Abbreviations>> and <<naming-prefixes,Standard Prefixes>> sections,
+respectively.
+Whenever an approved abbreviation exists for a particular word, it should be
+used in place of the full word unless there is good reason not to.
+
+When a number is part of an identifier, it is treated as a word if it is a
+standalone number, such as the extension name token
+ename:VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME for the
+`VK_KHR_get_memory_requirements2` extension.
+For uses where the number is part of a common abbreviation such as etext:2D
+or etext:R8B8`, the entire abbreviation is treated as a word.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+Unfortunately, there is an internal inconsistency here between extension
+name strings, such as VK_KHR_get_memory_requirements2, and tokens encoding
+those names, such as ename:VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME.
+====
+endif::editing-notes[]
+
+
+[[naming-preprocessor]]
+== Preprocessor Defines
+
+Preprocessor definitions include an underscore `_` as a delimiter between
+words, with every character in upper case.
+
+Each definition is prefixed with `VK_`, followed by the name.
+
+This rule applies to most declarations with the C Preprocessor's `#define`
+token, including macros and constants.
+There are however a few exceptions:
+
+  * The header guard for each header includes an additional underscore `_`
+    at the end of the identifier.
+  ** Example: `VULKAN_H_`
+  * Definitions that denote the presence of an extension follow the
+    <<extensions-naming-conventions-name-strings,extension name string
+    convention>>.
+  ** Example: `VK_KHR_sampler_mirror_clamp_to_edge`
+  * Three `VKAPI_*` definitions are defined by the platform header to alias
+    certain platform-specific identifiers related to calling conventions.
+  ** Examples: `VKAPI_ATTR`, `VKAPI_CALL` and `VKAPI_PTR`
+  * Preprocessor defines are occasionally used to create aliases between
+    other Vulkan identifiers, which usually happens when something was
+    originally misnamed.
+    In these cases, the fixed name is added to the API, and the old name is
+    made into an alias of that.
+    In these cases, the name will be whatever the original misnamed
+    identifier was.
+
+[source, c]
+.Example
+----
+// VK_VERSION_MAJOR (Macro)
+#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
+
+// VK_HEADER_VERSION (Base type)
+#define VK_HEADER_VERSION 10
+----
+
+
+== Type Names
+
+Type names are declared with no separator between words.
+Each word starts with a capital letter, and every other character in each
+word is lower case.
+
+Each type name is prefixed with `Vk`.
+
+This rule applies to all type definitions except <<naming-funcpointers,
+function pointer types>>, including struct and union types, handles, base
+typedefs, and enumerant types.
+
+[source, c]
+.Example
+----
+// VkImage (Handle)
+VK_NONDISP_HANDLE(VkImage)
+
+// VkFlags (Base type)
+typedef uint32_t VkFlags;
+
+// VkResult (Enum type)
+typedef enum VkResult {
+    ...
+};
+
+// VkApplicationInfo (Struct)
+typedef struct VkApplicationInfo {
+    ...
+} VkApplicationInfo;
+
+// VkClearColorValue (Union)
+typedef union VkClearColorValue {
+    ...
+} VkClearColorValue;
+----
+
+
+[[naming-extension-structures]]
+=== Extending Structure Names
+
+Structures which extend a base structures through its pname:pNext chain
+should reflect the name of the base structure.
+Currently there are two examples of such naming schemes.
+
+New structures which add extended object creation parameters to a base
+structure should use this naming scheme:
+
+.Extended Object Information Structures
+[width="60%",options="header"]
+|====
+| Base Structure Name | Extending Structure Name
+| `Vk__Object__CreateInfo`
+    | `Vk__ObjectName__CreateInfo__Author__`
+|====
+
+`_Object_` is the name of the object being created.
+`_Name_` is a short name for the extension or the new information added by
+that extension.
+`_Author_` is the author ID of the extension.
+
+New structures which extend API queries, such as the
+`vkGetPhysicalDeviceFeatures2KHR` and `vkGetPhysicalDeviceProperties2KHR`
+commands defined by the `VK_KHR_get_physical_device_properties2` extension,
+should use this naming scheme:
+
+.Extended Query Structures
+[width="60%",options="header"]
+|====
+| Base Structure Name | Extending Structure Name
+| `vkGetPhysicalDeviceFeatures2KHR`
+    | `VkPhysicalDevice__Name__Features__Author__`
+| `vkGetPhysicalDeviceProperties2KHR`
+    | `VkPhysicalDevice__Name__Properties__Author__`
+|====
+
+`_Name_` is a short name for the extension, or for the new feature or
+property being queried, such as `Multiview` or `DiscardRectangle`.
+`_Author_` is the author ID of the extension.
+
+
+== Enumerant Names
+
+Enumerants include an underscore `_` as a delimiter between words, with
+every character in upper case.
+
+Each enumerant name is prefixed with `VK_`.
+
+Enumerants are prefixed with the exact name of the type it belongs to,
+converted to the correct case (e.g. `VkStructureType` ->
+`VK_STRUCTURE_TYPE_*`).
+
+This rule applies to all enumerants, with one exception.
+
+  * The `VkResult` enumerants are split into two sub types: error and
+    success codes.
+  ** Success codes are not prefixed with anything other than `VK_`.
+  ** Error codes are prefixed with `VK_ERROR_`.
+
+[source, c]
+.Example
+----
+// VK_FORMAT_UNDEFINED, VK_FORMAT_R4G4_UNORM_PACK8 (Enumerants)
+typedef enum VkFormat {
+    VK_FORMAT_UNDEFINED = 0,
+    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
+    ...
+};
+
+// VkResult codes (Exception)
+typedef enum VkResult {
+    VK_SUCCESS = 0,
+    ...
+    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+    ...
+} VkResult;
+----
+
+
+== Command Names
+
+Command names are declared with no separator between words.
+Each word starts with a capital letter, and every other character in each
+word is lower case.
+
+The structure of a command name should be as follows:
+
+`__prefix Verb Object Property__`
+
+`_prefix_`::
+    This is usually "vk", but will be "vkCmd" if it is a command used to
+    record into a command buffer, or "vkQueue" if it directly affects a
+    queue.
+
+`_Verb_`::
+    The verb describing the action being performed.
+    A list of most verbs used in Vulkan is available <<command-names-verbs,
+    here>>.
+
+`_Object_`::
+    The name of the object being acted upon by the command.
+
+`_Property_`::
+    The property of the object which is being acted upon by the command, and
+    is omitted in cases where the whole object is being acted upon (e.g.
+    creation commands).
+
+These rules apply to all command declarations.
+
+[source, c]
+.Example
+----
+// Creation command
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( ... );
+
+// Command buffer recording command
+VKAPI_ATTR VkResult VKAPI_CALL vkCmdBindPipeline( ... );
+
+// Get command
+VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( ... );
+----
+
+.Note
+[NOTE]
+====
+There are three exceptions to the above rule in the core Vulkan API:
+
+  * vkDeviceWaitIdle
+  * vkCmdNextSubpass
+  * vkCmdPipelineBarrier
+
+These names are left as-is to maintain compatibility.
+
+There are additionally a number of exceptions in a few existing extensions.
+====
+
+
+=== Query Commands
+
+A number of commands in the API are used to determine the properties of some
+object in the implementation.
+
+The queried properties may either be invariant, or they may: change based on
+application behavior.
+If the results are not invariant, the lifetime of the results should be
+clearly described in the command description.
+See
+link:html/vkspec.html#fundamentals-commandsyntax-results-lifetime[Lifetime
+of Retrieved Results] in the specification for more information.
+
+These commands fall into two categories from a naming perspective:
+
+Capability Queries::
+
+These are commands which query capabilities of objects that an
+implementation can provide.
+Such commands use the verb "Enumerate" to identify themselves.
++
+e.g. `vkEnumeratePhysicalDeviceProperties`
++
+Whilst these commands describe properties of the named object, they do not
+accept a parameter of that object type - though they usually have a
+parameter for the parent type.
+
+Object State Queries::
+
+These commands are used to query the current properties of an object that
+has been created.
+Such commands use the verb "Get" to identify themselves.
++
+e.g. `vkGetPhysicalDeviceQueueFamilyProperties`
++
+These commands always have a parameter of the object type.
+
+
+[[command-names-verbs]]
+=== Command Verbs
+
+Below is a list of many of the verbs currently in use in core Vulkan and KHR
+extensions, along with their meanings.
+The list is not guaranteed to be up to date, but covers all core and KHR
+verbs at the time of writing.
+
+[%autowidth,options="header"]
+|===
+| Verb       | Meaning
+| Acquire    | Acquire ownership of an object from an external source
+| Allocate   | Allocates memory in a pool or memory heap and creates object - paired with "Free"
+| Begin      | Start of a range of command buffer commands with different behavior than those outside the range - "End" marks the end of the range
+| Bind       | Binds an object to another object
+| Blit       | Performs a filtered and scaled copy of pixels from one image to another
+| Clear      | Sets all pixels in an image to the same value
+| Copy       | A raw copy of data from one object to another with no transformation of the data
+| Create     | Creates an object - paired with "Destroy"
+| Destroy    | Destroys an object - paired with "Create"
+| Dispatch   | Kicks off a set of compute tasks
+| Draw       | Kicks off a set of rasterization tasks
+| End        | End of a range of command buffer commands with different behavior than those outside the range - "Begin" marks the start of the range
+| Enumerate  | Queries the capabilities of objects that could be created, before creating them
+| Execute    | Executes commands recorded in another command buffer
+| Fill       | Sets all data units in a buffer to the same value
+| Flush      | Flushes data from the host to the device
+| Free       | Destroys an object and then frees memory back to a pool or memory heap - paired with "Allocate"
+| Get        | Queries the state of an existing object
+| Import     | Imports the payload from an external object into a Vulkan object
+| Invalidate | Invalidates data on the host, forcing newer data on the device to be read
+| Map        | Maps an allocation into host memory - paired with "Unmap"
+| Merge      | Merges two objects
+| Present    | Presents an image to a surface
+| Push       | Pushes data to the device as part of a command stream
+| Release    | Releases ownership of an object to an external source
+| Reset      | Resets the state of an object to an initial state
+| Resolve    | Resolves multiple samples in a multisampled image to an image with one sample per pixel
+| Set        | Sets the state of an object
+| Submit     | Submits a set of commands to a queue
+| Unmap      | Unmaps an allocation from host memory - paired with "Map"
+| Update     | Updates entries in a descriptor set
+| Wait       | Waits for some signal
+| Write      | Writes values to an object
+|===
+
+
+[[naming-funcpointers]]
+=== Function Pointer Type Names
+
+Function pointer names are declared exactly as the equivalent statically
+declared command would be declared, but prefixed with `PFN_`, standing for
+"Pointer to FunctioN".
+
+[source, c]
+.Example
+----
+// PFN_vkCreateInstance (Function Pointer)
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)( ... );
+----
+
+
+== Function Parameter and Struct/Union Member Names
+
+Function parameter names are declared with no separator between words.
+Each new word, *except* for the first, starts with a capital letter.
+All other characters in the parameter name are in lower case.
+
+Members/parameters of a type that is not a base type should generally be
+named in a similar way to the type itself, with additional context added for
+clarity when necessary.
+
+Pointer members/parameters are prefixed with a number of `p` characters,
+with one `p` for each level of indirection.
+
+Function pointer members/parameters are prefixed with `pfn`.
+
+Any member describing the size of a memory allocation should be suffixed
+with `Size`.
+If the context is self-evident from the structure name, then it may simply
+be named `size`.
+
+Any member describing the number of something, such as an array length or
+number of internal allocations, should be suffixed with `Count`.
+The `size` rule overrides this rule, though it is possible to have multiple
+sizes (e.g. `sizeCount`).
+If the member is an array length, then the name of length should correspond
+to the name of the array member, usually `XYZCount` for an array named
+`pXYZs`.
+If a structure in a pname:pNext chain is an array whose length must match
+the length of an array of the base structure, then that extending structure
+should include an array length member with the same name as the length in
+the base structure.
+
+These rules apply to all function parameters and struct/union members, with
+a single exception:
+
+  * The `sType` member of structures is abbreviated as it is used in almost
+    every structure.
+  ** The slightly odd naming prevents it clashing with any future variables.
+  ** The `s` stands for "`structure`", referring to its enumerant type.
+
+[source, c]
+.Example
+----
+// Function parameters, including a twice indirected pointer.
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                offset,
+    VkDeviceSize                                size,
+    VkMemoryMapFlags                            flags,
+    void**                                      ppData);
+
+// Structure members, including the sType exception and a single indirected
+// pointer.
+typedef struct VkMemoryBarrier {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkAccessFlags      srcAccessMask;
+    VkAccessFlags      dstAccessMask;
+} VkMemoryBarrier;
+
+// Function pointer members
+typedef struct VkAllocationCallbacks {
+    void*                                   pUserData;
+    PFN_vkAllocationFunction                pfnAllocation;
+    PFN_vkReallocationFunction              pfnReallocation;
+    PFN_vkFreeFunction                      pfnFree;
+    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
+    PFN_vkInternalFreeNotification          pfnInternalFree;
+} VkAllocationCallbacks;
+
+// Size member (pCode is not a specific array of anything, it is just a
+// pointer to memory)
+typedef struct VkShaderModuleCreateInfo {
+    VkStructureType              sType;
+    const void*                  pNext;
+    VkShaderModuleCreateFlags    flags;
+    size_t                       codeSize;
+    const uint32_t*              pCode;
+} VkShaderModuleCreateInfo;
+
+// Count member
+typedef struct VkSparseImageMemoryBindInfo {
+    VkImage                           image;
+    uint32_t                          bindCount;
+    const VkSparseImageMemoryBind*    pBinds;
+} VkSparseImageMemoryBindInfo;
+----
+
+
+[[naming-extension-identifiers]]
+== Extension Identifier Naming Conventions
+
+Identifiers defined by an extension are modified by appending the
+extension's author ID to the end of the identifier, as described below.
+Author IDs are obtained as described in the
+<<extensions-naming-conventions,Extension and Layer Naming Conventions>>
+section.
+
+If an extension becomes part of core, a new version of the extension's
+identifiers should be created, that do not contain the author ID at the end
+of the identifier.
+The original identifiers should be kept in order to maintain source-level
+compatibility with existing applications making use of the earlier
+extension's identifiers.
+
+
+=== Extension Type Names
+
+Types defined by extensions have the author ID appended to the end of the
+type name.
+
+[source, c]
+.Example
+----
+// VkSurfaceFormatKHR (structure type with KHR appended)
+typedef struct VkSurfaceFormatKHR {
+    VkFormat           format;
+    VkColorSpaceKHR    colorSpace;
+} VkSurfaceFormatKHR;
+----
+
+
+[[naming-extension-enumerant-names]]
+=== Extension Enumerant Names
+
+Enumerants defined by extensions have the author ID appended to the end of
+the enumerant name, separated by an underscore.
+This includes the begin, end, range and max values added to enumeranted type
+definitions by the generator scripts.
+
+[NOTE]
+====
+There is one exception to this rule in the
+`VK_KHR_sampler_mirror_clamp_to_edge` extension.
+This functionality was included in the original specification, but quickly
+separated out at release.
+Due to this late change, the single enum exposed has retained its original
+identifier to avoid compatibility issues:
+ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
+====
+
+[source, c]
+.Example
+----
+// VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR (enumerant with _KHR appended)
+typedef enum VkCompositeAlphaFlagBitsKHR {
+    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    ...
+} VkCompositeAlphaFlagBitsKHR;
+----
+
+
+=== Extension Function Names
+
+Function and function pointer type names defined by extensions have the
+author ID appended to the end of the name.
+
+[source, c]
+.Example
+----
+// vkDestroySurfaceKHR (function with KHR appended)
+VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+    VkInstance                                  instance,
+    VkSurfaceKHR                                surface,
+    const VkAllocationCallbacks*                pAllocator);
+
+typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(
+    VkInstance                                  instance,
+    VkSurfaceKHR                                surface,
+    const VkAllocationCallbacks*                pAllocator);
+----
+
+
+[[naming-abbreviations]]
+== Common Abbreviations
+
+Abbreviations and acronyms are sometimes used in the <<vulkan-spec,Vulkan
+API Specification>> and the Vulkan API where they are considered clear and
+commonplace.
+All such abbreviations used in the core API are defined here.
+Extensions should also use these abbreviations where appropriate.
+
+Src::
+    Source
+
+Dst::
+    Destination
+
+Min::
+    Minimum
+
+Max::
+    Maximum
+
+Rect::
+    Rectangle
+
+Info::
+    Information
+
+Lod::
+    Level of Detail
+
+Mip::
+    Related to a mipmap.
+    Use "`mipmap`" in full only when it is a standalone term.
+    If referred to some associating with a mipmap, such as levels, sampling
+    mode, size, tail images, etc., use "`mip`" as a standalone prefix word,
+    e.g. pname:maxMipLevels, ename:VK_MIP_MODE, etc.
+    This is analogous to the <<writing-compound-words,spelling conventions
+    for mip-related terms>>
+
+[NOTE]
+====
+The names pname:mipmapMode, pname:mipmapPrecisionBits,
+sname:VkSamplerMipmapMode, and
+ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT are exceptions to this
+general usage guideline, for historical reasons.
+====
+
+ID::
+    Identifier
+
+UUID::
+    Universally Unique Identifier
+
+Op::
+    Operation
+
+R::
+    Red color component
+
+G::
+    Green color component
+
+B::
+    Blue color component
+
+A::
+    Alpha color component
+
+
+[[naming-prefixes]]
+== Standard Prefixes
+
+Prefixes are used in the API to denote specific semantic meaning of Vulkan
+names, or as a label to avoid name clashes, and are explained here:
+
+VK/Vk/vk::
+    Vulkan namespace +
+    All types, commands, enumerants and C macro definitions in the Vulkan
+    specification are prefixed with these two characters, according to the
+    rules defined above.
+
+PFN/pfn::
+    Function Pointer +
+    Denotes that a type is a function pointer, or that a variable is of a
+    pointer type.
+
+p::
+    Pointer +
+    Variable is a pointer.
+
+vkCmd::
+    Commands that record commands in command buffers +
+    These API commands do not result in immediate processing on the device.
+    Instead, they record the requested action in a command buffer for
+    execution when the command buffer is submitted to a queue.
+
+s::
+    Structure +
+    Used to denote the etext:VK_STRUCTURE_TYPE* member of each structure in
+    pname:sType.
+
+
+[[format-types]]
+== Format Types
+
+Formats naming conventions
+
+Numeric Format::
+    Describes the suffix found on formats ex.
+    SFLOAT, SINT, SNORM, SRGB, UINT, USCALED, etc
+
+Numeric Type::
+    describes float, signed int, or unsigned int
+
+SPIR-V Type::
+    The combination of the type (ex OpTypeInt), width, and signedness
diff --git a/codegen/vulkan/vulkan-docs-next/style/revisions.adoc b/codegen/vulkan/vulkan-docs-next/style/revisions.adoc
new file mode 100644
index 0000000..f2f3174
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/revisions.adoc
@@ -0,0 +1,271 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[revisions]]
+= Revision History
+
+* 2023-10-11 - Add rules for <<writing-titlecase, writing chapter and
+  section titles>>.
+* 2023-10-05 - Mention that <<extensions-reserving-bitmask-values, bit
+  position 31>> may not be used for enumerated type bitmasks, due to
+  portability concerns.
+* 2023-07-07 - Remove style guide requirement to
+  <<sample-writing-explicit-vu, not use nested bullet points or other
+  complex markup in a valid usage statement>>, which is now allowed due to
+  toolchain improvements.
+* 2023-07-07 - Add "`use case`" as <<writing-compound-words, preferred
+  orthography>> (internal merge request 5991).
+* 2023-07-05 - Change the boilerplate language for `sType` to refer to
+  `VkStructureType` (internal issue 3493).
+* 2023-06-21 - Remove the style guide advice to keep valid usage statements
+  "`atomic`" with respect to preprocessor directives, as a recent script and
+  validation layer change has enabled preprocessor directives within VUs.
+  In its place, add new advice about making sure all version and extension
+  information is included in the text of the valid usage statement rather
+  than relying on preprocessor directives.
+* 2023-05-03 - Add <<markup-word-choices, preferred way to write>> "`called
+  _in_ a command buffer`" (internal issue 3480).
+* 2023-04-30 - Update <<markup-blocks, Blocks>> to remove tilde markup for
+  source blocks inside refpages, and use `[open]`-tagged listing blocks for
+  <<markup-blocks-nested-open, continuation blocks inside refpages>>
+  instead.
+* 2023-02-26 - update description of computing numeric enumerant values, and
+  reference the normative references section for the registry schema
+  document (public issue 2069).
+* 2022-11-29 - Add a NOTE to the <<writing-conventions, Use American
+  Spelling Conventions>> section explain why there are a few uses of
+  "`colour`" in the Vulkan Video extensions (internal issue 3254).
+* 2022-11-16 - Update `basetype` <<markup-macros-api, markup macro>>
+  description to exclude types without definitions in the Vulkan
+  Specification, such as the Video `Std*` types (internal issue 2703).
+* 2022-11-11 - Add <<markup-word-choices, preferred way to write>>
+  "`_handle_ is not dlink{cl}VK_NULL_HANDLE`"
+* 2022-10-12 - Add <<markup-word-choices, preferred way to write>> "`_verb_
+  on the device`", and re-order part of that table (internal merge request
+  5475).
+* 2022-09-05 - Refactor markup to separate <<introduction, Introduction>>
+  chapter from `styleguide.adoc` and make anchor naming scheme consistent.
+  Convert <<revisions, Revision History>> from a chapter to an appendix and
+  add an anchor.
+* 2022-07-14 - Add <<markup-sample-section-features, Feature
+  Cross-References>> section specifying how to mark up API feature links.
+* 2021-11-21 - Add preferred uses of "`indirect (drawing/dispatching)
+  command`" to the <<writing-compound-words, Compound Words and Preferred
+  Orthography>> section.
+* 2021-11-15 - Add <<markup-include-file-paths, Include File Paths>> section
+  requiring using full paths to included markup files.
+* 2021-11-04 - Remove backquote markup around recommended use of the
+  `apiext:` macro, since that macro now styles the extension name argument
+  itself.
+* 2021-10-29 - add "`render pass" to the <<writing-compound-words, Compound
+  Words and Preferred Orthography>> section.
+* 2021-10-04 - Update the <<extensions-documenting-extensions, Changes for
+  New Extensions>> section to require use of the `apiext:` macro for links
+  to extension names (internal issue 2831).
+* 2021-09-12 - Add a new subsection with more details on using
+  tilde-delimited source blocks <<markup-blocks-source, inside reference
+  page open blocks>>, and rewrite the <<sample-command, Sample Command
+  Description>> section to follow current phrasing and markup patterns
+  (internal issue 2040).
+* 2021-09-09 - Add the <<markup-italicized-enumerant-names, Italicized
+  Enumerant Names>> section to clarify how to write wildcard enumerant names
+  with imbedded italicized text.
+* 2021-09-06 - Add the <<writing-inclusivity, Use Inclusive Language>>
+  section based on the Khronos Inclusive Language list (internal issue
+  2293).
+* 2021-09-06 - add "`cube map`" to the <<writing-compound-words, Compound
+  Words and Preferred Orthography>> section (internal merge request 4794).
+* 2021-07-20 - Add additional contraction examples to the table in the
+  <<markup-avoid-contractions, Avoid Abbreviations and Contractions>>
+  section.
+* 2021-05-31 - Add "`implementation-dependent`" as an exception in the
+  <<writing-compound-words, Compound Words and Preferred Orthography>>
+  section (internal merge request 4611).
+* 2021-05-24 - Add escapes to prevent expansion of attribute names in a few
+  places where markup examples are given.
+* 2021-05-22 - Expand the <<markup-avoid-contractions, markup rules>> to
+  include avoiding abbreviations, as well as contractions.
+* 2021-05-07 - Add <<markup-word-choices, preferred way to write
+  "`drawing/dispatching command">>.
+* 2021-04-28 - Add <<markup-word-choices, disambiguations for
+  "`executable`">>.
+* 2021-04-28 - Add <<writing-pointers-instances, usage for pointers and
+  handles>> which may be `NULL` or dname:VK_NULL_HANDLE, respectively
+  (internal issue 2662).
+* 2021-04-14 - Add "`side effect`" and "`reuse`" as
+  <<writing-compound-words, preferred orthography>> (public issue 1484).
+* 2021-03-31 - Update description of the code{cl} macro in the
+  <<markup-macros-api, API Markup Macros>> section to match current
+  behavior.
+* 2021-03-21 - Note that the <<extensions-reserving-bitmask-values same bit
+  should be reserved>> for the same purpose in comparable 32- and 64-bit
+  bitmask types (internal issue 2565).
+* 2020-09-14 - Change <<markup-informative-notes, Informative Sections and
+  Notes>> section to track actual usage and update the description of the
+  undefined{cl} macro to further clarify its purpose and uses (internal
+  issue 2195).
+* 2020-08-16 - Add "`reference monitor`" to the preferred
+  <<markup-word-choices, Word Choices>> (internal issue 2291).
+* 2020-08-10 - Add a <<writing-describing-errors, Commands which Return
+  Error Codes>> section to guide authors of new commands (internal issue
+  2290).
+* 2020-07-28 - Add a <<markup-copyrights, Copyrights and Licenses>> section
+  describing how to properly attribute this information.
+* 2020-06-23 - Update the <<extensions-documenting-extensions, Changes for
+  New Extensions>> section to recommend placing most extension language
+  inline in existing specification source files, rather than in separate
+  files, and to base extension revision numbers at `1` starting with initial
+  public release (public issue 1263).
+* 2020-04-29 - Expand use of `basetype` macros to include external API
+  types.
+* 2020-03-16 - Add documentation of writing links to extension appendices in
+  the <<extensions-documenting-extensions, Changes for New Extensions>>
+  section and document the `apiext{cl}` and `reflink{cl}` macros in the
+  <<markup-macros-api, API Markup Macros>> section.
+  Improve documentation of writing <<writing-refpages, Markup For Automatic
+  Reference Page Extraction>> including how to mark up content in the
+  Specification source so it only appears in generated reference pages;
+  however, this section is still out of date (internal issue 1999).
+* 2020-03-11 - Specify in the <<sample-command, Sample Command Description>>
+  section that a valid usage statement must be defined at the place (command
+  or structure specification) that all information need to evaluate the
+  statement is known.
+  Update the description of <<appendix-vuid-creating, Creating VUID tags>>
+  to match the current scripts.
+  Use the term "`asciidoctor`" instead of "`asciidoc`" everywhere.
+  Note in the <<introduction-asciidoc, Asciidoctor Markup>> section that the
+  Specification can only be built using the command-line asciidoctor client,
+  not by asciidoctor web clients.
+* 2020-02-22 - Document that it is no longer needed to escape C arrows in
+  macros.
+* 2019-12-15 - Add a markup section on <<markup-macros-prime-symbols, Prime
+  Symbols>> (internal issue 1110).
+* 2019-11-27 - Expand the <<writing-pNext-chain, Describing Extension
+  Structure Chains>> section and make all spec language consistent with it
+  (internal issue 1814).
+* 2019-09-09 - Define markup for nested structure members in the
+  <<markup-macros-api, API Markup Macros>> section (internal issue 1765).
+* 2019-09-08 - Add language to the end of the
+  <<extensions-documenting-extensions, Changes for New Extensions>> section
+  describing how to mark up asciidoctor conditionals (internal issue 1808).
+* 2019-08-25 - Add the <<markup-indentation-equations, Indentation of
+  Equations>> section (internal issue 1793).
+* 2019-08-25 - Add the <<writing-describing-layers, Extensions and Grouping
+  Related Language>> section (internal issue 979) and the
+  <<markup-minimize-indentation, Minimize Indentation>> section (internal
+  issue 747).
+  Disallow use of standalone `+` except in latexmath and source blocks, in
+  the <<markup-layout, Asciidoc Markup And Text Layout>> section (internal
+  issue 736).
+* 2019-08-19 - Add the <<writing-pointers-instances, Describing Pointers and
+  Instances>> section (internal issue 1553).
+* 2019-08-13 - Add a NOTE to the <<appendix-vuid-format, Format of VUID
+  Tags>> appendix specifying allowed characters in VUID tags (based on
+  discussion for internal merge request 3239).
+* 2019-07-27 - Add the <<writing-references, References>> section and
+  rewrite external references accordingly.
+* 2019-05-09 - Specify rules for defining <<extensions-new-flags-types, new
+  flags and bitmask types>> (internal issue 1649).
+* 2019-01-06 - Add details on <<extensions-reserving-bitmask-values,
+  Reserving Bitmask Values>> (internal issue 1411).
+* 2018-11-19 - Add details to the <<extensions-documenting-extensions,
+  Changes for New Extensions>> section including the new "`Description`"
+  section, and other standard parts of extension appendices.
+* 2018-08-13 - Add %inline directive to the <<markup-sample-section-images,
+  Figures>> section (public pull request 734).
+* 2018-07-30 - Added a section on <<writing-undefined, Describing Undefined
+  Behavior>> (as part of the fixes for public issue 379), and describing why
+  the undefined{cl} macro should always be used.
+* 2018-07-08 - Remove requirement to explicitly include extension appendices
+  in the <<extensions-documenting-extensions, Changes for New Extensions>>
+  section.
+* 2018-06-25 - Modify the process for <<extensions-vendor-id, Registering a
+  Vendor ID with Khronos>> to define vendor ID values as part of an
+  enumerated type.
+* 2018-03-07 - Updated for Vulkan 1.1 release.
+* 2018-01-10 - Move details of mandated extension compatibility from the
+  <<extensions-rules, General Rules/Guidelines>> section into the
+  Fundamentals section of the API Specification, where they are changed
+  slightly to allow explicit incompatibilities (public issue 638).
+* 2017-10-27 - Add language about proper use of "`valid pointer`" and
+  "`pointer to valid object`" for valid usage statements, in the
+  <<sample-command, Sample Command Description>> section (related to public
+  pull request 547).
+* 2017-10-15 - Describe how to write <<writing-latexmath-in-table-cells,
+  LaTeX Math in Table Cells>> (internal issue 908).
+* 2017-10-15 - Add more details of <<extensions-naming-author-IDs, `KHX`
+  extensions>> (public issues 536, 580).
+* 2017-09-10 - Add descriptions of <<writing-arrays, how to use `each` and
+  `any`>> to refer to properties of elements of arrays (internal issue 884).
+* 2017-09-10 - Add <<extensions-interactions-parent, Valid Usage and
+  Extension pname:pNext Chains>> language specifying where to describe
+  interactions of structures in a pname:pNext chain (internal issue 715).
+* 2017-09-10 - Add example of marking up an enumerated type all of whose
+  values are defined by extensions (internal issue 864).
+* 2017-08-25 - Add language to the <<extensions,API Versions, Extensions,
+  and Layers>> chapter describing how to write new API versions (internal
+  issue 892).
+* 2017-06-12 - Add sections describing when to use the
+  <<markup-macros-api-name, *name{cl}>> and <<markup-macros-api-text,
+  *text{cl}>> markup macros instead of the *link{cl} macros, and clarify
+  that slink{cl} should be used for handle as well as structure names
+  (internal issue 886).
+* 2017-05-08 - Add appendix describing <<appendix-vuid, Valid Usage ID
+  Tags>> and how they are generated.
+* 2017-03-19 - Add naming rule for <<naming-extension-structures, Extension
+  Structure Names>>.
+* 2017-02-11 - Finish transitioning to asciidoctor markup.
+* 2016-09-28 - Add asciidoc math markup guidelines.
+* 2016-09-16 - Make style guide markup more consistent with its own
+  recommendations.
+  Simplify some tables of preferred terms.
+  Add sections on block and table markup.
+* 2016-09-12 - Describe writing and markup style for labelled lists.
+  Require use of the ISO 8601 date format except in rare legacy cases.
+  Expand the description of <<markup-layout,Line Lengths>> and add a
+  description of markup for <<markup-footnotes,Footnotes>>.
+* 2016-09-08 - Add a writing section about proper use of
+  <<writing-misc-a-an,"`a`" and "`an`">> (internal issue 432).
+* 2016-08-30 - Remove mustnot{cl} and shouldnot{cl} macro definitions, which
+  are no longer used in the Specification (internal issue 407).
+* 2016-08-29 - Add spelling and compound word rules (public issue 352).
+* 2016-08-23 - Modify description of specifying extensions in the
+  <<extensions,Layers and Extensions>> chapter to refer to the new
+  single-branch model for extensions (internal issue 397).
+* 2016-07-26 - Add section describing <<writing-refpages,markup for
+  automatic reference page extraction>>.
+* 2016-07-18 - Add examples of function-parameter and structure-member
+  markup (based on public issue 286).
+* 2016-07-11 - Change the document title.
+* 2016-07-07 - Rename document, change license to CC BY, clarify required
+  and recommended actions, and reserve use of "`normative`" for the
+  Specifications.
+* 2016-06-26 - Move Layers and Extensions chapter from Appendix C of the
+  Vulkan API Specification and merge content with the naming guide.
+  Put extension and naming chapters into their own source files.
+* 2016-06-20 - Add API naming guide.
+* 2016-05-22 - Add markup and image creation rules, after fixing missing
+  figure captions for public issue 219.
+* 2016-05-01 - Include feedback from public issues 120 and 190.
+  Use consistent conventions for defining structures.
+  Use American rather than British spelling conventions.
+* 2016-03-12 - Recommend against "the value of".
+* 2016-02-26 - Replace use of the "maynot{cl}" macro with "may{cl} not".
+* 2016-02-16 - Place asciidoc conversion post-release.
+* 2016-02-09 - Added quotation mark convention.
+* 2016-02-01 - Add the Oxford Comma section and issue resolution.
+* 2016-01-26 - Add bullet-list style description of command parameters.
+* 2016-01-11 - Add "`Numbers in Text`" section from WSI work.
+* 2015-12-16 - Make "`begin / end`" preferred terms to "`start / finish`".
+* 2015-12-15 - Make "`implementation`" preferred term instead of "`system`".
+* 2015-12-13 - Add tlink{cl}/tname{cl} macros for function pointer types.
+* 2015-12-10 - Initial release for feedback.
+
+
+ifdef::VKSC_VERSION_1_0[]
+== Vulkan SC Revision History
+
+* 2019-06-25 - Added <appendix-scid, Safety Critical ID Tags (SCID)>>
+  appendix.
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/style/scid.adoc b/codegen/vulkan/vulkan-docs-next/style/scid.adoc
new file mode 100644
index 0000000..b98d0df
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/scid.adoc
@@ -0,0 +1,39 @@
+// Copyright 2014-2022 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::VKSC_VERSION_1_0[]
+
+[appendix]
+[[appendix-scid]]
+= Safety Critical ID Tags (SCID)
+
+Safety Critical ID tags are used within the Vulkan SC Specification to
+reference safety critical change justifications intended to give the reader
+an understanding of why deviations from the Vulkan Specification have been
+made.
+
+The SCID tags reference the Change Justification Table in the Introduction.
+
+== Format of SCID Tags
+
+SCID tags are formatted like this:
+
+[source,asciidoc]
+----
+<<SCID-#>>
+----
+
+where # is replaced by the specific SCID number (e.g. SCID-3).
+The SCID will show up in the specification enclosed with [] brackets (e.g.
+[SCID-3]).
+
+If multiple SCIDs are being referenced, separate them with a comma (e.g.
+[SCID-3], [SCID-5]).
+
+The SCIDs should be placed at the end of the sentence describing the change
+(e.g. This flag is not supported in Vulkan SC [SCID-8]).
+A SCID should also be added to any entry that will appear in the Vulkan SC
+deviations appendix.
+
+endif::VKSC_VERSION_1_0[]
diff --git a/codegen/vulkan/vulkan-docs-next/style/vuid.adoc b/codegen/vulkan/vulkan-docs-next/style/vuid.adoc
new file mode 100644
index 0000000..87d873d
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/vuid.adoc
@@ -0,0 +1,144 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[vuid]]
+= Valid Usage ID Tags
+
+Valid usage statements in the published Vulkan Specification must all be
+given _Valid Usage ID_ or _VUID_ tags.
+These tags are asciidoctor anchors, intended for use by the validation layer
+to provide unique names for each validation condition, and a way to link
+from validation layer reports into the corresponding parts of the
+Specification.
+
+
+[[vuid-format]]
+== Format of VUID Tags
+
+For implicit valid usage statements, the tags are formatted like this:
+
+[source,asciidoc]
+----
+[[VUID-blockname-paramname-category]]
+----
+
+_blockname_ is the name of the function or structure for which a valid usage
+statement is being generated.
+
+_paramname_ is the name of the parameter being validated.
+In some cases, the statement does not validate a single parameter and this
+portion of the tag is absent.
+
+_category_ is the type of statement being generated.
+There are over one dozen types referring to distinct conditions such as
+valid objects, required bitmasks, required array lengths, constraints on
+parent objects, and so on.
+
+For explicit valid usage statements, the tags are formatted like this:
+
+[source,asciidoc]
+----
+[[VUID-blockname-paramname-number]]
+----
+
+_blockname_ is the name of the function or structure for which a valid usage
+statement is being generated.
+
+_paramname_ is the name of the parameter being validated.
+In some cases, the statement does not validate a single parameter and this
+portion of the tag is replaced by `-None-`
+
+_number_ is a unique five digit, zero-filled number used to disambiguate
+similar tag names.
+
+[NOTE]
+.Note
+====
+The _blockname_, _paramname_, and _category_ portions of a VUID tag name
+must each be composed only of the alphanumeric characters A-Z, a-z, and 0-9,
+and the ':' character.
+In general only the alphabetic subset of these characters is used, but there
+are a few exceptions.
+====
+
+
+[[vuid-creating]]
+== Creating VUID Tags
+
+For implicit valid usage statements generated automatically from `vk.xml`,
+VUID tags are created automatically by the generator scripts.
+
+For explicit valid usage statements, VUID tags are generated by passing
+appropriate options to the script `reflow.py`.
+
+Since these tags are of use only to the published validation layer, they are
+needed only in the published Specification sources and outputs.
+Therefore, authors of extensions, or other branches adding valid usage
+statements, are not themselves responsible for adding tags in their
+branches.
+The specification editors will take care of this as part of the process of
+publishing updates.
+For reference purposes, this process is described below:
+
+First, after integrating all new specification language into the internal
+gitlab default branch (currently `main`) containing the canonical
+Specification source, invoke the following command:
+
+[source,sh]
+----
+python3 scripts/reflow.py -overwrite -noflow -tagvu chapters/*.adoc chapters/*/*.adoc
+----
+
+This will add VUID tags to all statements in valid usage blocks which do not
+already have them.
+Some diagnostics will be reported, but these are do not in general require
+any action.
+
+After updating all files, the script will update the file
+`scripts/vuidCounts.py` containing reserved ranges of VUIDs for the default
+branch and certain other development branches.
+
+Commit the updated source files and `vuidCounts.py` together.
+The next time the script is run, VUID tags will be assigned numbers starting
+from the next free value in the range available to default branch.
+
+In-development Vulkan extensions are kept in their own branches, with the
+branch name the same as the name of the extension being developed.
+VUID tags may be assigned in these branches in the same fashion as in
+default branch.
+To enable this, each development branch must be assigned its own independent
+VUID range in the default branch copy of `vuidCounts.py`, to prevent
+collisions.
+In the event that default branch or any development branch exhausts the
+available VUID range, `reflow.py` will report this and stop assigning VUIDs.
+At that point, a new range must be assigned to the branch in the default
+branch copy of `vuidCounts.py`, as well as in the per-branch copy.
+
+
+== Updating VUID Tags When Valid Usage Statements Change
+
+Valid usage statements have corresponding tests in the Vulkan Validation
+Layer.
+The tests must be changed in response to semantic changes in the VU
+statements, whether for bug-fixing, adding extension interactions, or
+otherwise.
+The rule used when updating explicit VU statements is that the merge request
+or pull request responsible for making the change must remove the existing
+VUID tag, so that a new one can be assigned, _except_ in the following
+cases:
+
+  * The changes are non-semantic, such as using consistent phrasing or
+    markup.
+  * The changes consist of removing or changing extension suffixes when
+    promoting an extension to `EXT`, `KHR`, or core status.
+  * The valid usage statement has not yet been implemented in the validation
+    layers.
+
+[NOTE]
+.Note
+====
+This section may need further modification in response to guidelines agreed
+to by the Vulkan Working Group.
+====
diff --git a/codegen/vulkan/vulkan-docs-next/style/writing.adoc b/codegen/vulkan/vulkan-docs-next/style/writing.adoc
new file mode 100644
index 0000000..77d9653
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/style/writing.adoc
@@ -0,0 +1,1353 @@
+// Copyright 2015-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[writing]]
+= Writing Style
+
+
+[[writing-misc]]
+== Miscellaneous Grammar, Spelling, and Punctuation Issues
+
+=== Use the Oxford Comma (Serial Comma)
+
+When writing a sentence listing a series of items, include a comma before
+the "`and`" separating the last item.
+
+*Correct:* The red, green, blue, and alpha components.
+
+*Incorrect:* The red, green, blue and alpha components.
+
+Also see this
+link:https://blog.oxforddictionaries.com/2015/01/21/video-oxford-comma/[video
+discussion of the Oxford comma] provided by the Oxford Dictionary.
+
+
+[[writing-titlecase]]
+=== Use AP Title Case for Chapter and Section Titles
+
+Here is a link:https://titlecaseconverter.com/rules/[summary] of the rules:
+
+  * Capitalize the first word and the last word of the title.
+  * Capitalize the principal words.
+  * Capitalize "`to`" in infinitives.
+  * Capitalize all words of four letters or more.
+  * Do not capitalize articles, conjunctions, and prepositions of three
+    letters or fewer.
+
+[NOTE]
+.Note
+====
+The actual AP style guide is behind a paywall.
+The summary here is from a commercial website.
+====
+
+
+=== Date Format
+
+Whenever possible, write dates in the <<iso-8601,ISO 8601>> format:
+YYYY-MM-DD.
+
+If needed for consistency with existing dates, e.g. in appendix changelogs,
+you can also write "`Month DD, YYYY`" where "`Month`" is the English name of
+the month.
+
+Never use ambiguous formats such as "`09/12/16`".
+
+[source,asciidoc]
+.Example Markup
+----
+  * 2016-09-12
+  * September 12, 2016
+----
+
+
+[[writing-misc-a-an]]
+=== A/An and Markup Macros
+
+Use "`a`" and "`an`"
+link:https://www.grammar.com/a-vs-an-when-to-use/[correctly], based on the
+*sound* of the letter beginning the following word.
+
+It is easy to get this wrong when talking about Vulkan API names tagged with
+the <<markup-macros,markup macros>>.
+For example, if you wanted to say:
+
+A ename:VK_ERROR_DEVICE_LOST error
+
+the correct way to mark this up in asciidoctor would be:
+
+[source,asciidoc]
+----
+A ename:VK_ERROR_DEVICE_LOST error
+----
+
+However, on first glance at this it *appears* wrong, because the "`word`"
+following "`a`" is the macro name, "`ename{cl}`".
+That starts with a vowel, so the temptation is to say
+
+[source,asciidoc]
+----
+An ename:VK_ERROR_DEVICE_LOST error may occur.
+----
+
+What matters here is how the *output* document is formatted.
+
+
+=== Numbers in Text
+
+When describing the need for a small number of objects, smaller than ten,
+spell the number out (e.g. "`one`").
+If you are describing a literal value that is a small number, you may use a
+numeric value (e.g. "`1`").
+
+For example, instead of writing that a bitmask "`contains 1 or more bits`",
+write that it "`contains one or more bits`".
+A counter example is that it is okay to write "`For non-stereoscopic-3D
+applications, this value is 1.`"
+
+
+[[writing-conventions]]
+=== Use American Spelling Conventions
+
+In case of conflict, use American rather than British spelling conventions,
+except for noted exceptions in the table below.
+
+.Spelling
+[width="60%",options="header"]
+|====
+| Use Spelling  | Instead Of     | Comments
+| color         | colour         |
+| signaled      | signalled      |
+| tessellation  | tesselation    | Historical exception
+|====
+
+[NOTE]
+.Note
+====
+There are a few exceptions to `color` in the Vulkan Video extensions, such
+as ename:VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT.
+This is for because those extensions refer to externally defined video
+compression standards and headers using that spelling.
+====
+
+
+[[writing-inclusivity]]
+=== Use Inclusive Language
+
+The Vulkan Working Group has begun to apply the
+link:https://www.khronos.org/about/inclusive-language[Khronos Inclusive
+Language] list to our specifications and other documents.
+The Khronos Inclusive Language list contains terms to avoid due to their use
+in discriminatory contexts that make people uncomfortable, or cause
+division.
+
+We are working through the Vulkan Specification repository to make
+appropriate changes, and enhancing the repository continuous integration
+scripts to report questionable terminology usage.
+This process will take some time.
+
+Some files in the repository are incorporated unmodified from external
+projects we do not control, and which may not comply with the Inclusive
+Language list.
+We will ask those projects to update their terminology usage, but cannot
+control their choices.
+
+
+[[writing-pointers-instances]]
+=== Describing Pointers, Handles, Structures, and Arrays
+
+When describing pointer parameters or members, use "`is a pointer to`"
+rather than more informal phrasing such as "`points to`".
+
+When describing individual structures, use "`VkStructname structure`" rather
+than longer phrasing such as "`instance of the VkStructname structure`" or
+"`structure of type VkStructname`".
+
+When describing array parameters or members, use "`is a pointer to an array
+of`" rather than "`is an array of`" unless it is a structure member that is
+a fixed-size array.
+Reference the dynamic size of the array that is pointed to (usually another
+structure member), or the static size for fixed-size arrays, in the
+description.
+
+When describing pointers which may be `NULL`, use "`is `NULL` or a pointer
+to`" rather than "`is an optional pointer`".
+The same principle applies when describing a handle which may be
+dname:VK_NULL_HANDLE.
+"`Optional pointer/handle`" are not well-defined terms in the Specification.
+
+[source,asciidoc]
+.Example Markup
+----
+  * pname:pInfo is a pointer to a slink:VkDebugUtilsLabelEXT structure
+    specifying the parameters of the label to insert.
+  * pname:pBindInfos is a pointer to an array of pname:bindInfoCount
+    slink:VkBindBufferMemoryInfo structures describing buffers and memory to
+    bind.
+  * pname:pStrides is `NULL` or a pointer to an array
+    of buffer strides.
+  * pname:image is dlink:VK_NULL_HANDLE or a handle of an image which this
+    memory will be bound to.
+----
+
+
+[[writing-arrays]]
+=== Describing Properties of Array Elements
+
+Many Vulkan parameters are arrays, or pointers to arrays.
+When describing array elements, use the terminology "`each element`" when
+the description applies uniformly and independently to every element of the
+array.
+For example:
+
+[source,asciidoc]
+.Example Markup
+----
+  * Each element of the pname:pCommandBuffers member of each element of
+    pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
+    executable state>>.
+----
+
+Use the terminology "`any element`" when the description is of zero or more
+elements of the array sharing a property.
+For example:
+
+[source,asciidoc]
+.Example Markup
+----
+  * If any element of the pname:pCommandBuffers member of any element
+    of pname:pSubmits was not recorded with the
+    ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
+    the <<commandbuffers-lifecycle, pending state>>.
+----
+
+Never use the redundant terminology "`any *given* element`".
+
+
+[[writing-compound-words]]
+=== Compound Words and Preferred Orthography
+
+Unless there is longstanding precedent in computer science literature, or
+the word is a <<spelling-exception-table, noted exception>>, do not
+arbitrarily combine terms together with hyphens, or as a single compound
+word without hyphens.
+
+This does not apply to parameter names in the API, where capitalization is
+used to distinguish words.
+For example, it is proper to refer to the use of a pname:colorSpace member
+of a structure as a "`color space`" value.
+
+.Spelling
+[width="70%",options="header",cols="20%,20%,60%"]
+|====
+| Use Spelling  | Instead Of     | Comments
+| bit plane     | bitplane       |
+| compile time  | compile-time   | Per Wikipedia "`compile time`"
+| color space   | colorspace     |
+| cube map      | cubemap        |
+| double-buffer | doublebuffer   |
+| entry point   | entry-point, +
+                  entrypoint
+                | Except if needed to disambiguate from surrounding terms
+| flat shading  | flatshading    |
+| GitHub        | Github         | Site's preferred spelling
+| indirect (drawing/dispatching) command
+                | indirect command (draw/dispatch)
+                                 | Even though related commands are named
+                                   ftext:vk*Draw*Indirect
+| LOD           | lod, +
+                  level of detail, +
+                  level-of-detail| Acronym for "`Level of Detail`"
+| mip level +
+  mip layer +
+  mip size  +
+  mip tail
+                | miplevel +
+                  miplayer +
+                  mipsize  +
+                  miptail        | "`mipmap *term*`" may be used in time
+| render pass   | renderpass     |
+| reuse         | re-use         |
+| side effect   | side-effect    |
+| use case      | use-case       |
+|====
+
+[[spelling-exception-table]]
+.Spelling Exceptions
+[width="70%",options="header",cols="20%,20%,60%"]
+|====
+| general-purpose
+                | general purpose| When used as an adjective
+| happen-before +
+  happen-after  | happen before +
+                  happen after   | As used in concurrent languages such as
+                                   C++11, Java and OpenCL C.
+| implementation-dependent
+                | implementation dependent
+                                 | When used as an adjective
+| mipmap        | mip map        | Exception for historical reasons
+| pname:pNext chain
+                | pname:pNext-chain, +
+                  pname:pNext extension chain
+                                 |
+| swapchain     | swap chain     | Exception due to heavy use in WSI extensions
+|====
+
+[NOTE]
+.Note
+====
+These examples are not complete, and will be added to over time when there
+is reason to.
+
+Different sources and individuals can and do reasonably disagree with regard
+to some of the examples.
+====
+
+
+==== Words With "Pre-" Prefixes
+
+// also: premultiply preorder prerotation predefined
+
+When using the prefix "`pre`" to indicate "`prior to`", such as in the words
+"`preinitialized`", "`preprocess`", and "`pretransform`", do not separate
+the prefix from the word with a hyphen.
+This list is not intended to be complete.
+
+
+[[writing-references]]
+=== References
+
+When citing external references, use the appropriate <<acm-references,
+Association for Computing Machinery Citation Style>>.
+Most citations in our specifications should follow the _For an online
+document/WWW resource_ style, using the actual date on the document being
+referenced rather than the document retrieval date.
+See the <<vulkan-spec, Vulkan API Specification>> citation in this document
+for an example.
+
+
+[[writing-undefined]]
+== Describing Undefined Behavior
+
+When describing undefined behavior that results only in the values of
+specified variables, or the contents of specified memory, becoming undefined
+or implementation-defined, use the undefined{cl} macro to indicate that each
+use of the term "`undefined`" has been carefully considered and accurately
+represents the degree of undefined behavior allowed.
+
+The word "`undefined`" should not be used without the trailing {cl}.
+This is enforced by internal CI tests.
+
+The undefined{cl} macro does not result in visible markup in the output
+document, and is not itself a normative term.
+The macro is simply markup to help ensure that use of the word has been
+consciously chosen.
+
+When describing more general types of undefined behavior (up to and
+including termination of the application), do *not* use the term
+"`undefined`".
+Instead, specify that the application must{cl} not create circumstances that
+would lead to such behavior.
+Such statements should be written as valid usage statements, if possible.
+
+
+[[writing-describing]]
+== Describing Commands and Parameters
+
+The <<vulkan-spec,Vulkan API Specification>> describes API commands followed
+by descriptions of their parameters, which are usually simple scalar types,
+handles or pointers to Vulkan objects or arrays of objects; enumerated types
+specifying values or bitmasks which affect the operation of a command; or
+structures containing combinations of scalar types and objects.
+The templates and examples shown and annotated here are based on the
+<<vulkan-spec,Vulkan API Specification>>.
+Do not vary from them without compelling need.
+
+Normative parts of the <<vulkan-spec,Vulkan API Specification>> should
+describe _what_ something does, rather than _how_ or _why_ an application
+would want to use it.
+
+When explicitly allowed by the Specification, the reserved value `NULL` may:
+be used for pointer parameters and members and dispatchable object handles,
+and the reserved value dname:VK_NULL_HANDLE may: be used for
+non-dispatchable Vulkan object handle parameters and members.
+Otherwise, pointers and handles must: refer to valid memory and valid Vulkan
+objects, respectively.
+
+
+[NOTE]
+.Guideline
+====
+As a simple example, say
+
+"`To create a command pool, call fname:vkCreateCommandPool`"
+
+rather than
+
+"`You/The application/The user can create a command pool by calling
+fname:vkCreateCommandPool`".
+====
+
+Explanations of _why_ and _how_ should largely be confined to reference
+documentation, sample code, tutorials, and other such documents.
+Occasional non-normative explanations can be included in the
+<<vulkan-spec,Vulkan API Specification>> using
+<<markup-informative-notes,informative notes>>.
+
+
+[[writing-describing-errors]]
+=== Commands Which Return Error Codes
+
+Commands which return elink:VkResult values must list all possible error
+codes for the command in the `errorcodes` XML attribute for the command.
+Almost all such commands may return the ename:VK_ERROR_OUT_OF_HOST_MEMORY
+error code.
+Any exceptions to this rule should be carefully considered by the
+specification author, and a rationale for this anomalous behavior may be
+provided in a NOTE or in the Issues section of the extension appendix
+corresponding to the new command.
+
+See the "`Return Codes`" section of the <<vulkan-spec,Vulkan API
+Specification>> for additional information.
+
+
+[[writing-describing-layers]]
+== Extensions and Grouping Related Language
+
+Language specifying behavior of a command or structure that does not
+originate in an extension should be placed in a single contiguous region of
+the specification.
+
+When defining a new command or structure from an extension that introduces
+additional behavior or options, do not insert such new language in a way
+that "`orphans`" part of an existing description by splitting up the
+existing language.
+
+This constraint does not apply to enumerated types.
+Language for new enumerants defined by extensions should be added to the
+existing enumerant definition, <<extensions-documenting-extensions,
+protected by asciidoctor conditionals>> for the new extension.
+
+[NOTE]
+.Guideline
+====
+Specification language should be structured, whenever possible, so it fits
+into a single open block defining a <<writing-refpages, reference page>>.
+====
+
+
+[[writing-math]]
+== Math Markup
+
+There is a considerable amount of math in the documentation, ranging from
+simple arithmetic expressions to complicated conditionals.
+There are two ways of marking up math expressions, described below.
+
+
+=== Asciidoc Math Markup
+
+Where possible, math is marked up using straight asciidoctor features.
+For commonality with LaTeX math (see below), some common LaTeX operators and
+names are defined as asciidoctor attributes using the same names, expanding
+to the corresponding Unicode entities.
+The complete set of these attributes is found in `config/attribs.adoc`.
+
+.Spelling
+[width="100%",options="header",cols="20%,20%,60%"]
+|====
+| Feature | Result | Sample Markup
+
+| Subscripts
+| [eq]#a~x~#
+| +++[eq]#a~x~#+++
+
+| Superscripts
+| [eq]#-2^(b-1)^#
+| +++[eq]#-2^(b-1)^#+++
+
+| Struct/parameter names as variables
+| [eq]#2^pname:bits^#
+| +++[eq]#2^pname:bits^#+++
+
+| Greek Letters (selected)
+| [eq]#{alpha}, {beta}, {gamma}, {delta}, {DeltaUpper}, {epsilon}, {lambda},
+  {rho}, {tau}#
+| +++[eq]#{alpha}, {beta}, {gamma}, {delta}, {DeltaUpper}, {epsilon}, {lambda},
+  {rho}, {tau}#+++
+
+| Fractions
+| [eq]#{onequarter} {plus} {onehalf}#
+| +++[eq]#{onequarter} {plus} {onehalf}#+++
+
+| Closed Ranges
+| [eq]#[0,1]#
+| +++[eq]#[0,1]#+++
+
+| Open Ranges
+| [eq]#[0,1)#
+| +++[eq]#[0,1)#+++
+
+| Arithmetic and Relational Operators
+| [eq]#a {times} b#, [eq]#a {leq} b#, [eq]#a {neq} b#, [eq]#a {geq} b#, [eq]#{vert}x{vert}#
+| +++[eq]#a {times} b#+++, +++[eq]#a {leq} b#+++, +++[eq]#a {neq} b#+++, +++[eq]#a {geq} b#+++, +++[eq]#{vert}x{vert}#+++
+
+| Floor
+| [eq]#{lfloor}w - {onehalf}{rfloor}#
+| +++[eq]#{lfloor}w - {onehalf}{rfloor}#+++
+
+| Ceiling
+| [eq]#{lceil}log~2~(max(pname:width, pname:height)){rceil} {plus} 1#
+| +++[eq]#{lceil}log~2~(max(pname:width, pname:height)){rceil} {plus} 1#+++
+
+| Logical and Set Operators
+| [eq]#{land} {lnot} {lor} {oplus} {elem}#
+| +++[eq]#{land} {lnot} {lor} {oplus} {elem}#+++
+
+| Partial Derivatives
+| [eq]#{partial}r~x~ / {partial}x = 0#
+| +++[eq]#{partial}r~x~ / {partial}x = 0#+++
+
+| Matrix/Vector Parameter Names
+| [eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#
+| +++[eq]#**P** = t **P**~1~ {plus} (1-t) **P**~2~#+++
+
+|====
+
+
+[[writing-math-latexmath]]
+=== LaTeX Math Markup
+
+Math markup more complex than easily supported in straight asciidoctor
+markup (examples found in the Vulkan Specification include matrices,
+tensors, summation notation, conditional assignments, and division of
+complex expressions) are marked up using LaTeX math notation, which is
+either passed through to the KaTeX in-browser rendering script for HTML
+outputs, or passed through asciidoctor-mathematical for PDF outputs.
+
+[NOTE]
+.Note
+====
+There are font and style differences between LaTeX and asciidoctor math
+markup which lead to minor visual inconsistencies.
+We will try to make this better over time, but it is not significant enough
+to be a big priority.
+====
+
+While LaTeX math macros, including the amsmath package, are supported,
+general LaTeX constructs are not.
+
+_Inline math_ is encoded using the latexmath{cl} macro.
+For example:
+
+  * latexmath:[[0,1\]]
+  * latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
+  * latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2.]
+
+[source,asciidoc]
+.Example Markup
+----
+  * latexmath:[[0,1\]]
+  * latexmath:[\frac{1 - \frac{x}{2}}{x - 1}]
+  * latexmath:[\mathbf{c} = t \mathbf{c}_1 + (1-t) \mathbf{c}_2. ]
+----
+
+Note the escaped bracket in markup for the first expression, which is
+necessary to work around asciidoctor macro parsing.
+
+_Block math_ is used for more complex equations.
+This example uses the `aligned` environment to delimit the expression.
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+c_{RGB} & =
+  \begin{cases}
+    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
+    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+
+[source,asciidoc]
+.Example Markup
+----
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+c_{RGB} & =
+  \begin{cases}
+    \frac{c_{sRGB}}{12.92}                              & \text{for}\  c_{sRGB} \leq 0.04045 \\
+    \left ( \frac{c_{sRGB}+0.055}{1.055} \right )^{2.4} & \text{for}\  c_{sRGB} > 0.04045
+  \end{cases}
+\end{aligned}
++++++++++++++++++++
+----
+
+[NOTE]
+.Note
+====
+The KaTeX processor used to render LaTeX math inside HTML documents does not
+support all features of LaTeX math.
+
+Similarly, the asciidoctor-mathematical processor does not support
+everything, though does have some support for AMSMath.
+
+Some workarounds we use are:
+
+.LaTeX math replacements for KaTeX compatibility
+[width="70%",options="header",cols="20%,20%,60%"]
+|====
+| Replace                  | With                  | Comments
+| `++\begin{equation}++`, +
+  `++\end{equation}++`     | _nothing_             | Unnecessary in blocks. Should not be used for inline.
+| `\begin{align*}`         | `++\begin{aligned}++` |
+| `\end{align*}`           | `++\end{aligned}++`   |
+| `++\operatorname{foo}++` | `++\mathbin{foo}++`   |
+| `{\rm A}`                | `++\mathrm{A}++`      |
+| `\text{for }`            | `\text{++for++}\`     | Text ending in spaces is unpredictable - favour escaped spaces after text
+|====
+
+The KaTeX repository provides a
+link:https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX[list of
+currently supported LaTeX functionality].
+You can also use the link:https://khan.github.io/KaTeX/[live katex preview
+tool] on the KaTeX website to double check support, without building the
+whole specification.
+
+Note that we use a locally-cached copy of KaTeX which may lag the latest
+published version on the website.
+As of April 2021, we are using v0.11.1.
+
+See the mtex2MML repository for a
+link:https://github.com/gjtorikian/mtex2MML/blob/master/SUPPORTED.md[list of
+supported operations in the PDF build].
+In particular, `\mathop` is not supported properly, but most other standard
+functionality is included.
+
+It is necessary to cross reference these two to make sure that support
+exists before using anything, but almost all standard functionality is
+supported for both.
+====
+
+This example is among the most complex expressions in the Vulkan
+specification:
+
+[latexmath]
++++++++++++++++++++
+V =
+  \begin{cases}
+    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
+    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
+                                            & E = 0,  M \neq 0 \\
+    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
+                                            & 0 < E < 31       \\
+    (-1)^S \times Inf,             & E = 31, M = 0             \\
+    NaN,                           & E = 31, M \neq 0
+  \end{cases}
++++++++++++++++++++
+
+[source,asciidoc]
+.Example Markup
+----
+[latexmath]
++++++++++++++++++++
+V =
+  \begin{cases}
+    (-1)^S \times 0.0,                      & E = 0, M = 0     \\
+    (-1)^S \times 2^{-14} \times { M \over 2^{10} },
+                                            & E = 0,  M \neq 0 \\
+    (-1)^S \times 2^{E-15} \times { \left( 1 + { M \over 2^{10} } \right) },
+                                            & 0 < E < 31       \\
+    (-1)^S \times Inf,             & E = 31, M = 0             \\
+    NaN,                           & E = 31, M \neq 0
+  \end{cases}
++++++++++++++++++++
+----
+
+
+[[writing-latexmath-in-table-cells]]
+=== LaTeX Math in Table Cells
+
+To use `[latexmath]` or `latexmath{cl}` constructs inside table cells, the
+cell separator must be `a|` instead of just `|`:
+
+[source,asciidoc]
+.Example Markup
+----
+.Advanced Blend Overlap Modes
+[width="80%",options="header"]
+|====
+| Overlap Mode                              | Weighting Equations
+| ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT  a|
+[latexmath]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                              \begin{aligned}
+                                                p_0(A_s,A_d) & = A_sA_d \\
+                                                p_1(A_s,A_d) & = A_s(1-A_d) \\
+                                                p_2(A_s,A_d) & = A_d(1-A_s) \\
+                                              \end{aligned}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|====
+----
+
+
+[[writing-pNext-chain]]
+== Describing Extending Structure Chains
+
+When describing an extending structure which is passed to an existing
+command by including it in the pname:pNext chain of a structure parameter of
+that command, introduce the structure description in this fashion:
+
+[source,asciidoc]
+----
+When *performing an operation described by the extending structure*, add
+a slink:VkExtensionStructNameID structure to the pname:pNext chain of the
+slink:VkBaseExtensionStructName structure passed to the
+flink:vkBaseFunctionName command *saying what the extending structure
+does*.
+----
+
+When describing properties of a structure included in a pname:pNext chain,
+refer to that structure as "`included in the pname:pNext chain`" rather than
+`"present in`" or other similar terms, in this fashion:
+
+[source,asciidoc]
+----
+If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2
+structure, then pname:pEnabledFeatures must: be `NULL`
+----
+
+
+[[writing-example]]
+== Example Command, Structure, and Enumerant Descriptions
+
+The <<sample-command,next section>> is a sample based on the
+<<vulkan-spec,Vulkan API Specification>>, and describes a command and
+related structures and enumerated types in enough detail to see the
+different usage patterns and layout / markup used.
+Informative notes discussing markup and guidelines are interspersed with the
+example description to explain how and why it looks as it does.
+
+
+[[sample-command]]
+== Sample Command Description: Creating Command Pools
+
+[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
+--
+To create a command pool, call:
+
+include::{generated}/api/protos/vkCreateCommandPool.adoc[]
+
+[NOTE]
+.Guideline
+====
+Begin the command description with an open block delimiting the contents as
+a reference page.
+The open block contains several required attribute values, as described for
+<<writing-refpages, automatic extraction into a reference page>>.
+
+Use a short, active sentence when describing what commands do, instead of
+more passive phrasing like "`A command pool is created by calling:`" or
+"`The application may create a command pool by calling:`".
+
+After the description, include the autogenerated prototype for the command
+from the `\{generated}/api/protos/` directory:
+
+// The 'subs=attributes+' and '{blank}--' are one way to allow the inner
+// [source] block to show the correct two dashes. See
+// https://discuss.asciidoctor.org/Another-markup-escaping-question-td5665.html
+
+[source,asciidoc,subs=attributes+]
+----
+[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
+{blank}--
+To create a command pool, call:
+
+\include::\{generated}/api/protos/vkCreateCommandPool.adoc[]
+----
+
+Note that each autogenerated command, enumeration, flag, or structure
+definition include file also defines a corresponding asciidoctor anchor
+which is the base name of the file.
+In this case, the anchor is named `vkCreateCommandPool`.
+====
+
+  * pname:device is the logical device that the command pool is created on.
+  * pname:pCreateInfo is a pointer to a slink:VkCommandPoolCreateInfo
+    structure specifying the state of the command pool object.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pCommandPool is a pointer to a slink:VkCommandPool handle in which
+    the created pool is returned.
+
+[NOTE]
+.Guideline
+====
+Describe each command parameter in a separate bullet list item.
+in the same order that parameters appear in the command.
+
+Each description must begin with the parameter name.
+This aids in extracting short descriptions of parameters for inclusion in
+annotated headers and similar documentation.
+Make sure to tag each parameter with the pname{cl} macro.
+
+Strive for compact notation, and in particular always try to use the
+phrasing "`pname{cl}param _is_`" rather than wordier forms such as
+"`pname{cl}param _specifies_`" or "`The pname{cl}param parameter
+specifies`".
+In general there is no need to describe a parameter which is a Vulkan object
+handle *as* a handle; for example, say "`pname{cl}device is the logical
+device`" rather than "`pname{cl}device is a handle to the logical device`".
+An exception is object creation functions, where a pointer to a handle of
+the proper type is used to return the newly created object.
+====
+
+This is a general description of creating a command pool.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
+    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
+    available in the logical device pname:device
+****
+
+include::{generated}/validity/protos/vkCreateCommandPool.adoc[]
+--
+
+[NOTE]
+.Guideline
+====
+If there is a general description of the command, add it following the
+parameter descriptions:
+
+[source,asciidoc,subs=attributes+]
+----
+This is a general description of creating a command pool.
+----
+
+If there are _explicit_ valid usage statements for the command, add them in
+their own valid usage block:
+
+[source,asciidoc,subs=attributes+]
+----
+.Valid Usage
+****
+  * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
+    pname:pCreateInfo->queueFamilyIndex must: be the index of a queue family
+    available in the logical device pname:device
+****
+----
+
+Although a valid usage ID is shown in the rendered example above, do not
+specify the ID when initially writing the statement, as
+<<sample-writing-explicit-vu, described below>>.
+VUIDs are normally assigned immediately prior to publication.
+
+Some parameter and member validation language for commands and structures is
+_implicit_ (autogenerated from `vk.xml`), and included from the
+`\{generated}/validity/` directories.
+All Vulkan command and structure language should include the autogenerated
+file at the end of their descriptions.
+It is harmless to include a nonexistent file, in the rare cases where no
+implicit validity language exists.
+
+[source,asciidoc,subs=attributes+]
+----
+\include::\{generated}/validity/protos/vkCreateCommandPool.adoc[]
+{blank}--
+----
+
+Close the open block surrounding the command description after the implicit
+validity include.
+All content within the block will be extracted for the corresponding
+reference page.
+
+Open blocks delimiting reference page content should not themselves contain
+section headers, as asciidoctor cannot render such nested content correctly.
+Reference pages should in general be relatively short, so this limitation is
+not severe.
+
+Structures and enumerations first introduced as parameters of a command are
+described next.
+====
+
+[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
+--
+The sname:VkCommandPoolCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkCommandPoolCreateInfo.adoc[]
+
+[NOTE]
+.Guideline
+====
+Begin the structure description with an open block delimiting the contents
+as a reference page, in the same fashion as described above for commands.
+The open block contains several required attribute values, as described for
+<<writing-refpages, automatic extraction into a reference page>>.
+
+Use a short, active paragraph to introduce the structure, usually just "`The
+sname:VkStructureName structure is defined as:`".
+
+After the description, include the autogenerated definition for the
+structure from the `\{generated}/api/structs/` directory:
+
+[source,asciidoc,subs=attributes+]
+----
+[open,refpage='VkCommandPoolCreateInfo',desc='Structure specifying parameters of a newly created command pool',type='structs']
+{blank}--
+
+The sname:VkCommandPoolCreateInfo structure is defined as:
+
+\include::\{generated}/api/structs/VkCommandPoolCreateInfo.adoc[]
+----
+====
+
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
++
+--
+This demonstrates how to create a continuation paragraph in a member
+description.
+This paragraph is not present in the actual specification the example is
+based on.
+--
+  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
+    usage behavior for the pool and command buffers allocated from it.
+  * pname:queueFamilyIndex designates a queue family as described in section
+    <<devsandqueues-queueprops,Queue Family Properties>>.
+    All command buffers allocated from this command pool must: be submitted
+    on queues from the same queue family.
+
+[NOTE]
+.Guideline
+====
+Each structure member is described in a separate bullet list item.
+For structures with pname:sType and pname:pNext members, there is standard
+boilerplate for their descriptions.
+Descriptions of other members of the structure follow.
+
+[source,asciidoc,subs=attributes+]
+----
+  * pname:sType is a elink:VkStructureType value identifying this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
++
+{blank}--
+This demonstrates how to create a continuation paragraph in a member
+description.
+This paragraph is not present in the actual specification the example is
+based on.
+{blank}--
+  * pname:flags is a bitmask of elink:VkCommandPoolCreateFlagBits indicating
+    usage behavior for the pool and command buffers allocated from it.
+  * pname:queueFamilyIndex designates a queue family as described in section
+    <<devsandqueues-queueprops,Queue Family Properties>>.
+    All command buffers allocated from this command pool must: be submitted
+    on queues from the same queue family.
+----
+
+These entries should be short and functional, without describing details of
+e.g. new enumerant values, function of individual parameter settings, etc.
+They can refer to other types using the appropriate *link: macros or to
+related sections of the specification using asciidoctor xrefs.
+
+In rare cases, a member description will cover multiple paragraphs.
+In these cases the normal list nesting and indentation guidelines cannot be
+applied due to limitations of the asciidoctor parser.
+It is usually best to append a continuation block following the first
+paragraph of such a list item, as shown for pname:pNext above.
+
+Add general descriptions of the structure, if any, following the member
+descriptions.
+No general description is shown in this example.
+====
+
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, the ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of
+    pname:flags must: not be set
+endif::VK_VERSION_1_1[]
+****
+
+include::{generated}/validity/structs/VkCommandPoolCreateInfo.adoc[]
+--
+
+[NOTE]
+.Guideline
+====
+Add explicit valid usage statements (if any) and the implicit autovalidity
+include in the same fashion as described for commands above, then close the
+open block.
+
+[source,asciidoc,subs=attributes+]
+----
+.Valid Usage
+****
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkCommandPoolCreateInfo-flags-02860]]
+    If the <<features-protectedMemory, pname:protectedMemory>> feature is
+    not enabled, the ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of
+    pname:flags must: not be set
+endif::VK_VERSION_1_1[]
+****
+
+\include::\{generated}/validity/structs/VkCommandPoolCreateInfo.adoc[]
+{blank}--
+----
+====
+
+[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
+--
+Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags to
+specify usage behavior for a command pool are:
+
+include::{generated}/api/enums/VkCommandPoolCreateFlagBits.adoc[]
+
+[NOTE]
+.Guideline
+====
+Begin an enumerated type description with an open block delimiting the
+contents as a reference page, in the same fashion as described above for
+commands and structures.
+
+Use boilerplate language similar to that above to introduce the type.
+
+[source,asciidoc,subs=attributes+]
+----
+[open,refpage='VkCommandPoolCreateFlagBits',desc='Bitmask specifying usage behavior for a command pool',type='enums']
+{blank}--
+Bits which can: be set in slink:VkCommandPoolCreateInfo::pname:flags to
+specify usage behavior for a command pool are:
+
+\include::\{generated}/api/enums/VkCommandPoolCreateFlagBits.adoc[]
+----
+====
+
+  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
+    buffers allocated from the pool will be short-lived, meaning that they
+    will be reset or freed in a relatively short timeframe.
+    This flag may: be used by the implementation to control memory
+    allocation behavior within the pool.
+ifdef::VK_VERSION_1_1[]
+  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
+    buffers allocated from the pool are protected command buffers.
+endif::VK_VERSION_1_1[]
+--
+
+[NOTE]
+.Guideline
+====
+Each enumerant in the enumerated type is described in a separate bullet list
+item.
+Make sure to protect enumerants added to the type by extensions or future
+core versions with asciidoctor conditionals.
+Close the open block after all enumerants are described.
+
+[source,asciidoc,subs=attributes+]
+----
+  * ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT specifies that command
+    buffers allocated from the pool will be short-lived, meaning that they
+    will be reset or freed in a relatively short timeframe.
+    This flag may: be used by the implementation to control memory
+    allocation behavior within the pool.
+\ifdef::VK_VERSION_1_1[]
+  * ename:VK_COMMAND_POOL_CREATE_PROTECTED_BIT specifies that command
+    buffers allocated from the pool are protected command buffers.
+\endif::VK_VERSION_1_1[]
+{blank}--
+----
+====
+
+
+[[sample-writing-explicit-vu]]
+== Writing Explicit Valid Usage Statements
+
+Explicit valid usage statements must be written at a point that all
+information needed to evaluate them is known.
+In particular, if validity of structure parameters depends on other
+parameters of a command that structure is passed to, such valid usage
+statements must be written for the command, rather than the structure.
+
+Each explicit valid usage statement should be a single, self-contained
+assertion, possibly involving multiple subexpressions or parameters.
+For example, instead of writing "`width, height, and depth must: all be
+greater than zero`", write each condition as a separate statement.
+In contrast, "`width {times} height must: be less than 1024`" is a single
+assertion involving multiple parameters.
+
+Do not use "`unless`" to call out exceptions - always write valid usage
+statements of the form "`if _A_ then _B_`".
+This may result in harder to read statements in a few cases, but maintains
+consistency.
+In many cases, it may lead to a simpler VU statement, or splitting one large
+VU into multiple new ones.
+
+A valid usage statement may used nested bullet lists or other asciidoc
+markup.
+
+Be clear on the distinction between a "`valid pointer`" and a "`pointer to a
+valid object`" when writing valid usage statements.
+See the "`Valid Usage`" section of the Vulkan Specification, and
+particularly the "`Valid Usage for Pointers`" section.
+
+When clauses in valid usage statements apply only when specific extensions
+and/or core API versions are enabled at runtime, use appropriate asciidoctor
+conditionals around such clauses.
+
+[NOTE]
+====
+Prior to specification update 1.3.255, there were stronger restrictions on
+placement of asciidoctor conditionals that have been relaxed, allowing
+writing such valid usage statements in a more natural manner and with less
+duplication of language.
+====
+
+Explicit valid usage statements must be assigned Valid Usage ID tags before
+publication.
+This process is described in the <<vuid, Valid Usage ID Tags>> appendix, but
+is normally performed only when preparing to integrate functionality into
+the Vulkan Specification prior to publication.
+It is something authors of new functionality should be aware of, but are not
+themselves responsible for.
+For example, when writing the explicit
+flink:vkCreateCommandPool::pname:queueFamilyIndex valid usage statement
+shown above, the tag
+
+[source,asciidoc,subs=attributes+]
+----
+[[VUID-vkCreateCommandPool-queueFamilyIndex-01937]]
+----
+
+was inserted by a script, not the original author.
+
+[NOTE]
+.Guideline
+====
+If the same set of valid usage statements are going to be common to multiple
+commands or structures, these should be extracted into a separate file under
+`chapters/commonvalidity/`.
+The file name should be short but to the point (e.g. `draw_common.adoc`),
+and then the file can be included in the relevant API features using
+standard include syntax:
+
+[source,asciidoc,subs=attributes+]
+----
+.Valid Usage
+****
+\include::\{chapters}/commonvalidity/draw_common.adoc[]
+\include::\{chapters}/commonvalidity/draw_vertex_binding.adoc[]
+  * [[VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287]]
+    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:transformFeedback
+    must: be enabled
+****
+----
+
+Common VU includes should appear before individual VUs for consistency.
+
+The file itself should be structured with the comment `// Common Valid
+Usage` used as a delimiter at the start and end of the file, with a comment
+describing in more detail where these are included, and then the valid usage
+statement bullets outside of a valid usage block.
+For example:
+
+[source,asciidoc]
+----
+// Common Valid Usage
+// Common to drawing commands that consume vertex binding state
+  * All vertex input bindings accessed via vertex input variables declared
+    in the vertex shader entry point's interface must: have valid buffers
+    bound
+  * For a given vertex buffer binding, any attribute data fetched must: be
+    entirely contained within the corresponding vertex buffer binding, as
+    described in <<fxvertex-input>>
+// Common Valid Usage
+----
+
+Finally, the original feature section needs to define the `:refpage:`
+attribute to match the name of the feature, as this is used to correctly
+generate links to expanded common valid usage statements in the built
+specification.
+
+[source,asciidoc]
+----
+[open,refpage='vkCmdDrawIndirectByteCountEXT',desc='Draw primitives where the vertex count is derived from the counter byte value in the counter buffer',type='protos']
+--
+:refpage: vkCmdDrawIndirectByteCountEXT
+----
+
+In general, this methodology should be preferred over any other method of
+consolidation - e.g. calling out a block of common valid usage statements,
+or referencing the valid usage statements of another command.
+However, for cases where the boilerplate of setting this up creates more
+text than a simple copy paste (e.g. only two commands consume a single
+valid usage statement), the original VUs can be left intact.
+====
+
+
+[[writing-empty-enumerations]]
+== Markup for Empty Enumerated Types
+
+Sometimes an enumerated type has all values defined by extensions, and each
+enumerated value defined by the type will be surrounded by an asciidoctor
+conditional for the corresponding extension.
+When a specification is built without any of those extensions enabled, the
+type should still be included, even though it is empty.
+In this case, the enumerated value descriptions must be followed by one
+additional conditional section which is only included when *none* of the
+relevant extensions are enabled.
+
+For example, the relevant part of the
+ename:VkDescriptorSetLayoutCreateFlagBits description, whose only value is
+defined by an extension, will look like this:
+
+[source,asciidoc,subs=attributes+]
+----
+\include::\{generated}/api/enums/VkDescriptorSetLayoutCreateFlagBits.adoc[]
+
+\ifdef::VK_KHR_push_descriptor[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR specifies
+    that descriptor sets must: not be allocated using this layout, and
+    descriptors are instead pushed by flink:vkCmdPushDescriptorSetKHR.
+\endif::VK_KHR_push_descriptor[]
+
+\ifndef::VK_KHR_push_descriptor[]
+[NOTE]
+.Note
+====
+All bits for this type are defined by extensions, and none of those
+extensions are enabled in this build of the specification.
+====
+\endif::VK_KHR_push_descriptor[]
+----
+
+
+[[writing-refpages]]
+== Markup for Automatic Reference Page Extraction
+
+The Vulkan reference pages are (mostly) extracted from corresponding
+sections of the API Specification.
+This requires that the markup and writing conventions described above be
+adhered to rigidly.
+
+The extraction scripts for a given page rely on the existence of an
+asciidoctor `open` block surrounding markup describing that page, with
+attributes used to specify properties of the reference page.
+Additional heuristics and non-asciidoctor tags, described below, are used to
+identify subsections of a reference page in some cases.
+
+In general the open block introduction will look like:
+
+[source,asciidoc]
+----
+[open,refpage='name',desc='short description',type='pagetype',alias='alias',anchor='anchor',xrefs='xrefs']
+--
+----
+
+Attributes which can be set on the block are:
+
+  * *refpage* - the name of the reference page, e.g. the Vulkan interface
+    (command, structure, enumerant, handle, etc.) name. This attribute is
+    required.
+  * *desc* - short description / summary of the page, used in the page
+    title.
+    This attribute is required.
+  * *type* - type of the interface, which must match the directory name
+    following `api/` in the interface `include::` line within the block, and
+    must be one of `basetypes`, `defines`, `enums`, `flags`, `funcpointers`,
+    `handles`, `protos`, or `structs`; or the non-API block types `feature`,
+    `freeform`. or `spirv`.
+    This attribute is required.
+  * *alias* - list of comma-separated names of other API entities which this
+    refpage also describes. This is used when an API is promoted and the
+    refpage block describes both the old and promoted APIs.
+    This attribute is optional.
+  * *anchor* - anchor name at which this reference page is fully described
+    in the API specification document.
+    This attribute is optional except for the non-API block types, which do
+    not correspond to Vulkan APIs.
+  * *xrefs* - list of whitespace-separated names of other reference pages
+    which should be added to the `See Also` section of this page.
+    Most cross-references are automatically generated based on the immediate
+    dependency information in `vk.xml`, but in some cases, such as referring
+    between `*FlagBits` and `*Flags` types, this additional tagging is
+    useful.
+    This attribute is optional.
+
+Attributes of the open block must be written in this format, using single
+quotes as delimiters (even though asciidoctor markup also allows double
+quotes), and escape single quotes in e.g. the *desc* attribute value with
+backquotes.
+
+After the open block is started, the following markup should be provided:
+
+  * A single paragraph of text describing the definition of the interface.
+    This paragraph is optional, but strongly recommended.
+  * The `include` line for the interface, which must be consistent with the
+    page name and type in the open block attributes.
+    This paragraph is required.
+  * A bullet list describing function parameters, structure members,
+    enumerants in an enumerated type, etc.
+    This list should contain no empty lines, as the extraction script
+    classifies the uninterrupted block of text following the `include`
+    directive as the `Parameters` or `Members` section of the ref page.
+    This list is required, unless the interface has nothing to describe,
+    such as an empty structure or enumeration, or a function with no
+    parameters.
+  * Paragraphs of text making up the `Description` section of the ref page.
+    This section is optional.
+    If it is necessary due to constraints of asciidoctor markup to have an
+    empty line in the bullet list section, add a `// refBody` comment
+    immediately following the bullet list and preceding this section:
++
+[source,asciidoc]
+----
+// refBody
+----
++
+There are no examples of this usage in the Vulkan 1.2.192 Specification,
+but it has been needed in the past and may again in the future.
++
+  * An explicit valid usage block.
+    This block is required if the interface has such valid usage
+    constraints.
+  * The `include` line for the implicit valid usage block.
+    This line is required for commands and structures, but not for
+    interfaces such as enumerated types, which do not have implicit valid
+    usage blocks.
+  * Finally, a two-dash asciidoctor delimiter closing the open block:
++
+[source,asciidoc]
+----
+--
+----
+
+All elements specifying an interface name (open block `refpage` attributes,
+interface `include` lines, and validity `include` lines) must use the same
+interface name, if present.
+Otherwise the extraction script is either unable to extract that page, or
+will extract the wrong text - and the language will be structurally
+incorrect, as well.
+The extraction process is somewhat fragile, so care should be taken and the
+results of reference page extraction verified after making changes to that
+portion of the specification source.
+
+Content that should only appear in reference pages, such as
+developer-oriented guidelines for reference pages describing extensions, may
+be conditionally included in the specification as follows:
+
+[source,asciidoc,subs=attributes+]
+----
+\ifdef::isrefpage[]
+
+=== Refpage-Only Section
+
+*This section will appear only when generating an extension refpage,
+but not in the specification extensions appendix.*
+
+\endif::isrefpage[]
+----
diff --git a/codegen/vulkan/vulkan-docs-next/styleguide.adoc b/codegen/vulkan/vulkan-docs-next/styleguide.adoc
new file mode 100644
index 0000000..1dfdfa5
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/styleguide.adoc
@@ -0,0 +1,60 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Core versions and extensions to enable
+// Must be included before the header and attribs.adoc
+include::{generated}/specattribs.adoc[]
+
+= Vulkan^®^ Documentation and Extensions: Procedures and Conventions
+Jon Leech, Tobias Hector
+:data-uri:
+:icons: font
+:toc2:
+:toclevels: 3
+:numbered:
+:source-highlighter: rouge
+:rouge-style: github
+:doctype: book
+:imagewidth: 800
+:fullimagewidth: width="800"
+:attribute-missing: warn
+:cl: &#x3a;
+:style: style
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.adoc[]
+
+// Where the current Asciidoctor documentation is found.
+:docguide: https://docs.asciidoctor.org/asciidoc/latest
+
+:leveloffset: 1
+
+<<<<
+
+include::{config}/copyright-ccby.adoc[]
+
+<<<<
+
+include::{style}/introduction.adoc[]
+
+include::{style}/naming.adoc[]
+
+include::{style}/extensions.adoc[]
+
+include::{style}/markup.adoc[]
+
+include::{style}/writing.adoc[]
+
+include::{style}/misc.adoc[]
+
+// Appendices
+
+include::{style}/vuid.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+include::{style}/scid.adoc[]
+endif::VKSC_VERSION_1_0[]
+
+include::{style}/revisions.adoc[]
+
diff --git a/codegen/vulkan/vulkan-docs-next/testBuild b/codegen/vulkan/vulkan-docs-next/testBuild
new file mode 100755
index 0000000..62ee34b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/testBuild
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+#
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# testBuild - invoke Makefile with the right options to build the test spec
+# that is found under build_tests.
+
+# Usage: testBuild
+
+# Build the test spec in various configurations:
+function build_spec() {
+  build=$1
+  options=$2
+
+  echo "-----------------------"
+  echo "Building gen-$build ..."
+
+  # Clean existing build, if any
+  rm -rf build_tests/gen-$build
+
+  # Note: let options expand, do not quote
+  ./makeSpec -spec $options -genpath build_tests/gen-$build -test html
+}
+
+# Core:
+build_spec core "core"
+build_spec core-1.0 "core -version 1.0"
+# With VK_EXT_host_image_copy
+build_spec hic "core -extension VK_EXT_host_image_copy"
+build_spec hic-1.0 "core -extension VK_EXT_host_image_copy -version 1.0"
+# With VK_KHR_copy_commands2
+build_spec copy2-1.0 "core -version 1.0 -extension VK_KHR_copy_commands2"
+# All:
+build_spec all "all"
+build_spec all-1.0 "all -version 1.0"
+
+# Test valid usage generation as well
+echo "-----------------------"
+echo "Generating valid usage ..."
+./makeSpec -spec all -genpath build_tests/gen-validusage -test validusage
+
+echo
+echo "======================="
+
+# Verify the results against expectations.  Note: do this after generating all
+# builds.  This is to support the build_tests/update-expectations script that
+# copies the results over the expectations.
+result=0
+for build in core core-1.0 hic hic-1.0 copy2-1.0 all all-1.0; do
+  echo "Verifying gen-$build is as expected..."
+  if ! diff build_tests/expectations/$build.html build_tests/gen-$build/out/html/vkspec.html; then
+    echo "  FAILED"
+    result=1
+  fi
+done
+
+echo "Verifying validusage in gen-validusage is as expected..."
+if ! diff build_tests/expectations/validusage.json build_tests/gen-validusage/out/validation/validusage.json; then
+  echo "  FAILED"
+  result=1
+fi
+
+if [ "$result" -ne 0 ]; then
+  echo
+  echo "All tests have been built successfully, but the results do not match the"
+  echo "expectations."
+  echo "If trivial, you can review the diff per the above output."
+  echo "Otherwise, please review each failing output at:"
+  echo "  - build_tests/gen-*/out/html/vkspec.html, and"
+  echo "  - build_tests/gen-validusage/out/validation/validusage.json"
+  echo "And ensure they are acceptable.  In that case, update the expectations with:"
+  echo "  $ cd build_tests && ./update-expectations"
+  exit 1
+fi
+
+echo "Success"
diff --git a/codegen/vulkan/vulkan-docs-next/tests/README.adoc b/codegen/vulkan/vulkan-docs-next/tests/README.adoc
new file mode 100644
index 0000000..64674ce
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/README.adoc
@@ -0,0 +1,22 @@
+// Copyright 2017-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Vulkan^(R)^ API Header Tests
+
+This directory contains simple compilation tests used by the CI script
+(../.gitlab-ci.yml) for the Vulkan C headers generated here, and the
+Vulkan-Hpp C++ headers generated by that project:
+
+[options="compact"]
+  * htest.c - test C headers, including all Vulkan platform headers
+  ** ggp_c/, wayland-client.h, windows.h, X11/, xcb/, zircon/, screen/ -
+     fake platform headers used when compiling in an environment without
+     the actual platform headers.
+  * hpptest.cpp - test C++ headers
+
+The 'make test' target in ../xml also builds the C header test.
diff --git a/codegen/vulkan/vulkan-docs-next/tests/X11/Xlib.h b/codegen/vulkan/vulkan-docs-next/tests/X11/Xlib.h
new file mode 100644
index 0000000..c99e423
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/X11/Xlib.h
@@ -0,0 +1,14 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef _X11_XLIB_H_
+#define _X11_XLIB_H_
+
+// "X11/Xlib.h" for non-X11 compilation environment
+
+typedef int Display;
+typedef int Window;
+typedef int VisualID;
+
+#endif
diff --git a/codegen/vulkan/vulkan-docs-next/tests/X11/extensions/Xrandr.h b/codegen/vulkan/vulkan-docs-next/tests/X11/extensions/Xrandr.h
new file mode 100644
index 0000000..e989d83
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/X11/extensions/Xrandr.h
@@ -0,0 +1,12 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef _XRANDR_H_
+#define _XRANDR_H_
+
+// "X11/extensions/Xrandr.h" for non-X11 compilation environment
+
+typedef int RROutput;
+
+#endif
diff --git a/codegen/vulkan/vulkan-docs-next/tests/ggp_c/vulkan_types.h b/codegen/vulkan/vulkan-docs-next/tests/ggp_c/vulkan_types.h
new file mode 100644
index 0000000..33621b8
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/ggp_c/vulkan_types.h
@@ -0,0 +1,8 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "ggp_c/vulkan_types.h" for non-GGP compilation environment
+
+typedef int GgpStreamDescriptor;
+typedef int GgpFrameToken;
diff --git a/codegen/vulkan/vulkan-docs-next/tests/hpptest.cpp b/codegen/vulkan/vulkan-docs-next/tests/hpptest.cpp
new file mode 100644
index 0000000..67f9171
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/hpptest.cpp
@@ -0,0 +1,11 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+#include <vulkan/vulkan.hpp>
+int main()
+{
+    auto const instance_info = vk::InstanceCreateInfo();
+    vk::Instance instance;
+    vk::createInstance(&instance_info, nullptr, &instance);
+}
diff --git a/codegen/vulkan/vulkan-docs-next/tests/htest.c b/codegen/vulkan/vulkan-docs-next/tests/htest.c
new file mode 100644
index 0000000..9268c1f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/htest.c
@@ -0,0 +1,72 @@
+//% gcc -c -Wall -I. -I../include htest.c
+
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// Simple compilation test for Vulkan headers, including all platform
+// headers.
+// To allow compilation in environments without one or more platforms, fake
+// headers for different platforms are supplied. They provide just the types
+// Vulkan platforms require.
+// When a new Vulkan platform is defined, the corresponding USE_PLATFORM
+// header definition, and any supporting fake platform headers, should be
+// defined here, along with a trivial compilation test using a Vulkan type
+// or function specific to that platform.
+
+// Enable each platform when vulkan.h is included
+
+#define VK_USE_PLATFORM_ANDROID_KHR         // No headers needed
+#define VK_USE_PLATFORM_FUCHSIA             // <zircon/types.h>
+#define VK_USE_PLATFORM_GGP                 // <ggp_c/vulkan_types.h>
+#define VK_USE_PLATFORM_IOS_MVK             // No headers needed
+#define VK_USE_PLATFORM_MACOS_MVK           // No headers needed
+#define VK_USE_PLATFORM_METAL_EXT           // No headers needed
+#define VK_USE_PLATFORM_VI_NN               // No headers needed
+#define VK_USE_PLATFORM_WAYLAND_KHR         // <wayland-client.h>
+#define VK_USE_PLATFORM_WIN32_KHR           // <windows.h>
+#define VK_USE_PLATFORM_XCB_KHR             // <xcb/xcb.h>
+#define VK_USE_PLATFORM_XLIB_KHR            // <X11/Xlib.h>
+#define VK_USE_PLATFORM_XLIB_XRANDR_EXT     // <X11/extensions/Xrandr.h>
+#define VK_USE_PLATFORM_SCREEN_QNX          // <screen/screen.h>
+#define VK_ENABLE_BETA_EXTENSIONS           // No headers needed
+
+#include <vulkan/vulkan.h>
+
+// Check with a type or function from each platform header in turn
+
+VkAndroidSurfaceCreateFlagsKHR          android_flags;
+VkImagePipeSurfaceCreateFlagsFUCHSIA    fuchsia_flags;
+VkStreamDescriptorSurfaceCreateFlagsGGP ggp_flags;
+VkIOSSurfaceCreateFlagsMVK              ios_flags;
+VkMacOSSurfaceCreateFlagsMVK            macos_flags;
+VkMetalSurfaceCreateFlagsEXT            metal_flags;
+VkViSurfaceCreateFlagsNN                vi_flags;
+VkWaylandSurfaceCreateFlagsKHR          wayland_flags;
+VkWin32SurfaceCreateFlagsKHR            win32_flags;
+VkXcbSurfaceCreateFlagsKHR              xcb_flags;
+VkXlibSurfaceCreateFlagsKHR             xlib_flags;
+VkScreenSurfaceCreateFlagsQNX           screen_flags;
+
+int main(void) {
+    VkInstanceCreateInfo instance_info;
+    VkInstance instance;
+
+    instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+    instance_info.pNext = NULL,
+    instance_info.flags = 0,
+    instance_info.pApplicationInfo = NULL,
+    instance_info.enabledLayerCount = 0,
+    instance_info.ppEnabledLayerNames = NULL,
+    instance_info.enabledExtensionCount = 0,
+    instance_info.ppEnabledExtensionNames = NULL,
+
+    vkCreateInstance(&instance_info, NULL, &instance);
+    vkDestroyInstance(instance, NULL);
+
+    // Test XLIB_XRANDR_EXT platform, which does not define a new type
+    VkResult xrandr_result = vkAcquireXlibDisplayEXT((VkPhysicalDevice)0, (Display *)NULL, (VkDisplayKHR)0);
+
+    (void)xrandr_result;
+    return 0;
+}
diff --git a/codegen/vulkan/vulkan-docs-next/tests/htest_sc.c b/codegen/vulkan/vulkan-docs-next/tests/htest_sc.c
new file mode 100644
index 0000000..01b61f1
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/htest_sc.c
@@ -0,0 +1,79 @@
+//% gcc -c -Wall -I. -I../include htest.c
+
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// Simple compilation test for Vulkan headers, including all platform
+// headers.
+// To allow compilation in environments without one or more platforms, fake
+// headers for different platforms are supplied. They provide just the types
+// Vulkan platforms require.
+// When a new Vulkan platform is defined, the corresponding USE_PLATFORM
+// header definition, and any supporting fake platform headers, should be
+// defined here, along with a trivial compilation test using a Vulkan type
+// or function specific to that platform.
+
+// Enable each platform when vulkan_sc.h is included
+
+#define VK_USE_PLATFORM_ANDROID_KHR         // No headers needed
+#define VK_USE_PLATFORM_FUCHSIA             // <zircon/types.h>
+#define VK_USE_PLATFORM_GGP                 // <ggp_c/vulkan_types.h>
+#define VK_USE_PLATFORM_IOS_MVK             // No headers needed
+#define VK_USE_PLATFORM_MACOS_MVK           // No headers needed
+#define VK_USE_PLATFORM_METAL_EXT           // No headers needed
+#define VK_USE_PLATFORM_VI_NN               // No headers needed
+#define VK_USE_PLATFORM_WAYLAND_KHR         // <wayland-client.h>
+#define VK_USE_PLATFORM_WIN32_KHR           // <windows.h>
+#define VK_USE_PLATFORM_XCB_KHR             // <xcb/xcb.h>
+#define VK_USE_PLATFORM_XLIB_KHR            // <X11/Xlib.h>
+#define VK_USE_PLATFORM_XLIB_XRANDR_EXT     // <X11/extensions/Xrandr.h>
+#define VK_USE_PLATFORM_SCREEN_QNX          // <screen/screen.h>
+#define VK_USE_PLATFORM_SCI                 // nvscisync.h
+#define VK_ENABLE_BETA_EXTENSIONS           // No headers needed
+
+#ifdef USE_HPP
+#include <vulkan/vulkan_sc_core.hpp>
+
+#include <nvscisync.h>
+#include <nvscibuf.h>
+#include "vulkan/vulkan_sci.h"
+#else
+#include <vulkan/vulkan_sc.h>
+#endif
+
+// Sanity check with a type or function from each platform header in turn
+// (uncomment type below if a platform extension is enabled for 'vulkansc')
+
+//VkAndroidSurfaceCreateFlagsKHR          android_flags;
+//VkImagePipeSurfaceCreateFlagsFUCHSIA    fuchsia_flags;
+//VkStreamDescriptorSurfaceCreateFlagsGGP ggp_flags;
+//VkIOSSurfaceCreateFlagsMVK              ios_flags;
+//VkMacOSSurfaceCreateFlagsMVK            macos_flags;
+//VkMetalSurfaceCreateFlagsEXT            metal_flags;
+//VkViSurfaceCreateFlagsNN                vi_flags;
+//VkWaylandSurfaceCreateFlagsKHR          wayland_flags;
+//VkWin32SurfaceCreateFlagsKHR            win32_flags;
+//VkXcbSurfaceCreateFlagsKHR              xcb_flags;
+//VkXlibSurfaceCreateFlagsKHR             xlib_flags;
+//VkScreenSurfaceCreateFlagsQNX           screen_flags;
+NvSciSyncAttrList                         scisync_attr_list;
+
+int main(void) {
+    VkInstanceCreateInfo instance_info;
+    VkInstance instance;
+
+    instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+    instance_info.pNext = NULL,
+    instance_info.flags = 0,
+    instance_info.pApplicationInfo = NULL,
+    instance_info.enabledLayerCount = 0,
+    instance_info.ppEnabledLayerNames = NULL,
+    instance_info.enabledExtensionCount = 0,
+    instance_info.ppEnabledExtensionNames = NULL,
+
+    vkCreateInstance(&instance_info, NULL, &instance);
+    vkDestroyInstance(instance, NULL);
+
+    return 0;
+}
diff --git a/codegen/vulkan/vulkan-docs-next/tests/nvscibuf.h b/codegen/vulkan/vulkan-docs-next/tests/nvscibuf.h
new file mode 100644
index 0000000..281112e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/nvscibuf.h
@@ -0,0 +1,8 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "nvscibuf.h" for non-SCI compilation environment
+
+typedef int NvSciBufAttrList;
+typedef int NvSciBufObj;
diff --git a/codegen/vulkan/vulkan-docs-next/tests/nvscisync.h b/codegen/vulkan/vulkan-docs-next/tests/nvscisync.h
new file mode 100644
index 0000000..3bf3a1e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/nvscisync.h
@@ -0,0 +1,9 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "nvscisync.h" for non-SCI compilation environment
+
+typedef int NvSciSyncAttrList;
+typedef int NvSciSyncObj;
+typedef int NvSciSyncFence;
diff --git a/codegen/vulkan/vulkan-docs-next/tests/screen/screen.h b/codegen/vulkan/vulkan-docs-next/tests/screen/screen.h
new file mode 100644
index 0000000..028deca
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/screen/screen.h
@@ -0,0 +1,9 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "screen/screen.h" for compilation in non-QNX Screen environment
+
+struct _screen_context;
+struct _screen_window;
+struct _screen_buffer;
diff --git a/codegen/vulkan/vulkan-docs-next/tests/vtest.c b/codegen/vulkan/vulkan-docs-next/tests/vtest.c
new file mode 100644
index 0000000..b0295fb
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/vtest.c
@@ -0,0 +1,50 @@
+// Copyright 2021-2023 The Khronos Group Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+// Simple compilation test for external codec headers accompanying the
+// Vulkan Video extensions.
+// Note that these headers and interfaces are not part of the Vulkan API.
+// When a new codec header is defined, it should be included here.
+
+#ifdef VK_NO_STDINT_H
+typedef char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+#endif
+#ifdef VULKAN_VIDEO_ALL
+#include "vk_video/vulkan_video_codecs_common.h"
+#include "vk_video/vulkan_video_codec_h264std.h"
+#include "vk_video/vulkan_video_codec_h264std_decode.h"
+#include "vk_video/vulkan_video_codec_h264std_encode.h"
+#include "vk_video/vulkan_video_codec_h265std.h"
+#include "vk_video/vulkan_video_codec_h265std_decode.h"
+#include "vk_video/vulkan_video_codec_h265std_encode.h"
+#endif
+#ifdef VULKAN_VIDEO_CODECS_COMMON
+#include "vk_video/vulkan_video_codecs_common.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H264STD
+#include "vk_video/vulkan_video_codec_h264std.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H264STD_DECODE
+#include "vk_video/vulkan_video_codec_h264std_decode.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H264STD_ENCODE
+#include "vk_video/vulkan_video_codec_h264std_encode.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H265STD
+#include "vk_video/vulkan_video_codec_h265std.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H265STD_DECODE
+#include "vk_video/vulkan_video_codec_h265std_decode.h"
+#endif
+#ifdef VULKAN_VIDEO_CODEC_H265STD_ENCODE
+#include "vk_video/vulkan_video_codec_h265std_encode.h"
+#endif
+
+int main(void) {
+    return 0;
+}
diff --git a/codegen/vulkan/vulkan-docs-next/tests/wayland-client.h b/codegen/vulkan/vulkan-docs-next/tests/wayland-client.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/wayland-client.h
diff --git a/codegen/vulkan/vulkan-docs-next/tests/windows.h b/codegen/vulkan/vulkan-docs-next/tests/windows.h
new file mode 100644
index 0000000..973979b
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/windows.h
@@ -0,0 +1,13 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "windows.h" for non-Windows compilation environment
+typedef int DWORD;
+typedef int HANDLE;
+typedef int HINSTANCE;
+typedef int HMONITOR;
+typedef int HWND;
+typedef int LPCWSTR;
+typedef int SECURITY_ATTRIBUTES;
+
diff --git a/codegen/vulkan/vulkan-docs-next/tests/xcb/xcb.h b/codegen/vulkan/vulkan-docs-next/tests/xcb/xcb.h
new file mode 100644
index 0000000..f9f2563
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/xcb/xcb.h
@@ -0,0 +1,9 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "xcb/xcb.h" for non-X11 compilation environment
+
+typedef int xcb_connection_t;
+typedef int xcb_window_t;
+typedef int xcb_visualid_t;
diff --git a/codegen/vulkan/vulkan-docs-next/tests/zircon/types.h b/codegen/vulkan/vulkan-docs-next/tests/zircon/types.h
new file mode 100644
index 0000000..61c0e68
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/tests/zircon/types.h
@@ -0,0 +1,7 @@
+// Copyright 2019-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// "zircon/types.h" for non-Zircon compilation environment
+
+typedef int zx_handle_t;
diff --git a/codegen/vulkan/vulkan-docs-next/vkspec.adoc b/codegen/vulkan/vulkan-docs-next/vkspec.adoc
new file mode 100644
index 0000000..cb5b3ac
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/vkspec.adoc
@@ -0,0 +1,246 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Core versions and extensions to enable
+// Must be included before the header and attribs.adoc
+include::{generated}/specattribs.adoc[]
+
+// Define titles and title logos for either Vulkan or Vulkan SC
+ifdef::VKSC_VERSION_1_0[]
+:DocTitle: Vulkan^®^ {SC} {revnumber} - A Specification {apititle} : Based on Vulkan {baserevnumber}
+:SC: SC
+:VulkanLogo: vulkansc-unscaled.svg
+:LogoDir: vulkansc
+endif::VKSC_VERSION_1_0[]
+ifndef::VKSC_VERSION_1_0[]
+:DocTitle: Vulkan^®^ {revnumber} - A Specification {apititle}
+:SC:
+:VulkanLogo: vulkan2-unscaled.svg
+:LogoDir: vulkan
+endif::VKSC_VERSION_1_0[]
+
+// :regtitle: is explained in
+// https://discuss.asciidoctor.org/How-to-add-markup-to-author-information-in-document-title-td6488.html
+
+= {DocTitle}
+:regtitle: pass:q,r[^®^]
+The Khronos{regtitle} Vulkan {SC} Working Group
+:data-uri:
+:icons: font
+:toc2:
+:toclevels: 2
+:numbered:
+:source-highlighter: rouge
+:rouge-style: github
+:docinfo: shared-header
+:docinfodir: {config}/{LogoDir}
+:title-logo-image: image:{images}/{VulkanLogo}[top="25%"]
+:attribute-missing: warn
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.adoc[]
+
+// Table of contents is inserted here
+toc::[]
+
+:leveloffset: 1
+
+<<<<
+
+// Preamble "chapter"
+
+include::{chapters}/preamble.adoc[]
+
+// Actual chapters
+
+:test: 0
+ifeval::["{test}"=="1"]
+
+// Include or insert trivial test markup here, to bypass building full spec
+// include::{chapters}/textest.adoc[]
+
+include::{chapters}/introduction.adoc[]
+
+endif::[]
+
+ifeval::["{test}"!="1"]
+include::{chapters}/introduction.adoc[]
+
+include::{chapters}/fundamentals.adoc[]
+
+include::{chapters}/initialization.adoc[]
+
+include::{chapters}/devsandqueues.adoc[]
+
+include::{chapters}/cmdbuffers.adoc[]
+
+include::{chapters}/synchronization.adoc[]
+
+include::{chapters}/renderpass.adoc[]
+
+include::{chapters}/shaders.adoc[]
+
+include::{chapters}/pipelines.adoc[]
+
+include::{chapters}/memory.adoc[]
+
+include::{chapters}/resources.adoc[]
+
+include::{chapters}/samplers.adoc[]
+
+include::{chapters}/descriptorsets.adoc[]
+
+include::{chapters}/interfaces.adoc[]
+
+include::{chapters}/textures.adoc[]
+
+ifdef::VK_EXT_fragment_density_map[]
+include::{chapters}/fragmentdensitymapops.adoc[]
+endif::VK_EXT_fragment_density_map[]
+
+include::{chapters}/queries.adoc[]
+
+// Transfer operations
+include::{chapters}/clears.adoc[]
+
+include::{chapters}/copies.adoc[]
+
+// Graphics Operations
+include::{chapters}/drawing.adoc[]
+
+include::{chapters}/fxvertex.adoc[]
+
+include::{chapters}/tessellation.adoc[]
+
+include::{chapters}/geometry.adoc[]
+
+ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+include::{chapters}/VK_NV_mesh_shader/mesh.adoc[]
+endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
+
+ifdef::VK_HUAWEI_cluster_culling_shader[]
+include::{chapters}/VK_HUAWEI_cluster_culling_shader/clusterculling.adoc[]
+endif::VK_HUAWEI_cluster_culling_shader[]
+
+include::{chapters}/vertexpostproc.adoc[]
+
+include::{chapters}/primsrast.adoc[]
+
+include::{chapters}/fragops.adoc[]
+
+include::{chapters}/framebuffer.adoc[]
+
+// Compute
+include::{chapters}/dispatch.adoc[]
+
+// Device Generated Commands
+ifdef::VK_NV_device_generated_commands[]
+include::{chapters}/VK_NV_device_generated_commands/generatedcommands.adoc[]
+endif::VK_NV_device_generated_commands[]
+
+// Sparse
+include::{chapters}/sparsemem.adoc[]
+
+ifdef::VK_KHR_surface[]
+include::{chapters}/VK_KHR_surface/wsi.adoc[]
+endif::VK_KHR_surface[]
+
+// Deferred host ops
+ifdef::VK_KHR_deferred_host_operations[]
+include::{chapters}/VK_KHR_deferred_host_operations/deferred_host_operations.adoc[]
+endif::VK_KHR_deferred_host_operations[]
+
+// Private data
+ifdef::VK_VERSION_1_3,VK_EXT_private_data[]
+include::{chapters}/VK_EXT_private_data.adoc[]
+endif::VK_VERSION_1_3,VK_EXT_private_data[]
+
+// Acceleration structures
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+include::{chapters}/accelstructures.adoc[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+// Micromaps
+ifdef::VK_EXT_opacity_micromap[]
+include::{chapters}/VK_EXT_opacity_micromap/micromaps.adoc[]
+endif::VK_EXT_opacity_micromap[]
+
+// Ray traversal
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+include::{chapters}/raytraversal.adoc[]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+
+// Ray tracing
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+include::{chapters}/raytracing.adoc[]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+// Memory Decompression
+ifdef::VK_NV_memory_decompression[]
+include::{chapters}/VK_NV_memory_decompression.adoc[]
+endif::VK_NV_memory_decompression[]
+
+// Vulkan Video extensions
+ifdef::VK_KHR_video_queue[]
+include::{chapters}/video_extensions.adoc[]
+endif::VK_KHR_video_queue[]
+
+ifdef::VK_NV_optical_flow[]
+include::{chapters}/VK_NV_optical_flow/optical_flow.adoc[]
+endif::VK_NV_optical_flow[]
+
+ifdef::VK_AMDX_shader_enqueue[]
+include::{chapters}/executiongraphs.adoc[]
+endif::VK_AMDX_shader_enqueue[]
+
+ifdef::VK_NV_low_latency2[]
+include::{chapters}/VK_NV_low_latency2/low_latency2.adoc[]
+endif::VK_NV_low_latency2[]
+
+// Sort of an appendix
+include::{chapters}/extensions.adoc[]
+
+include::{chapters}/features.adoc[]
+
+include::{chapters}/limits.adoc[]
+
+include::{chapters}/formats.adoc[]
+
+include::{chapters}/capabilities.adoc[]
+
+include::{chapters}/debugging.adoc[]
+
+// Appendices
+:numbered!:
+
+include::{appendices}/spirvenv.adoc[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+include::{appendices}/memorymodel.adoc[]
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+include::{appendices}/compressedtex.adoc[]
+
+include::{appendices}/versions.adoc[]
+
+// Extension appendices are now included from extensions.adoc
+include::{appendices}/extensions.adoc[]
+
+ifdef::VK_VERSION_1_3[]
+include::{appendices}/roadmap.adoc[]
+endif::VK_VERSION_1_3[]
+
+include::{appendices}/boilerplate.adoc[]
+
+include::{appendices}/invariance.adoc[]
+
+ifdef::VKSC_VERSION_1_0[]
+include::{appendices}/vulkanscdeviations.adoc[]
+endif::VKSC_VERSION_1_0[]
+
+include::{appendices}/glossary.adoc[]
+
+include::{appendices}/credits.adoc[]
+
+endif::[]
diff --git a/codegen/vulkan/vulkan-docs-next/xml/Makefile b/codegen/vulkan/vulkan-docs-next/xml/Makefile
new file mode 100644
index 0000000..7a0362e
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/Makefile
@@ -0,0 +1,246 @@
+# Copyright 2013-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# If a recipe fails, delete its target file. Without this cleanup, the leftover
+# file from the failed recipe can falsely satisfy dependencies on subsequent
+# runs of `make`.
+.DELETE_ON_ERROR:
+
+QUIET	 ?= @
+MKDIR	 = mkdir -p
+CP	 = cp
+RM	 = rm -f
+RMRF	 = rm -rf
+
+# Generator scripts and options
+# GENOPTS can be e.g. '-noprotect'
+
+PYTHON ?= python3
+SCRIPTS = ../scripts
+XML_CONSISTENCY = $(SCRIPTS)/xml_consistency.py
+GENOPTS =
+
+# Generate Vulkan headers from XML. Many other files can be generated
+# from vk.xml using the scripts, but they are all generated from
+# ../Makefile as part of the process of building the Specification.
+#
+# Targets:
+#
+# default / install - regenerate headers in ../include/vulkan/.
+# validate - run XML validator on vk.xml against the schema.
+# test - check if vulkan_core.h compiles.
+# clean_dirt - remove intermediate files.
+# clean - remove installed and intermediate files.
+
+GENERATED   = ../gen
+INCLUDE     = $(GENERATED)/include
+TESTS	    = ../tests
+VULKAN	    = $(INCLUDE)/vulkan
+JSON	    = $(GENERATED)/out/json
+SRC	    = ../src
+
+VULKAN_API ?= vulkan
+ifeq ($(VULKAN_API),vulkan)
+API_SUFFIX :=
+MISRACOPTS ?=
+MISRACPPOPTS ?=
+else
+API_SUFFIX := _sc
+# default options for generating MISRA C or MISRA C++ headers
+# can be overridden from commandline
+MISRACOPTS ?= -misracstyle
+MISRACPPOPTS ?= -misracppstyle
+endif
+
+# Static files needed for a complete set of headers, cached in the
+# repository
+STATIC_HEADERS = $(VULKAN)/vulkan$(API_SUFFIX).h $(VULKAN)/vk_platform.h
+
+# Where static headers are stored
+STATIC				 = ../include/vulkan
+STATIC_JSON_SRC			 = ../json
+
+# Vulkan platform-specific headers
+PLATFORM_HEADERS = \
+    $(VULKAN)/vulkan_android.h \
+    $(VULKAN)/vulkan_fuchsia.h \
+    $(VULKAN)/vulkan_ggp.h \
+    $(VULKAN)/vulkan_ios.h \
+    $(VULKAN)/vulkan_macos.h \
+    $(VULKAN)/vulkan_vi.h \
+    $(VULKAN)/vulkan_wayland.h \
+    $(VULKAN)/vulkan_win32.h \
+    $(VULKAN)/vulkan_xcb.h \
+    $(VULKAN)/vulkan_xlib.h \
+    $(VULKAN)/vulkan_directfb.h \
+    $(VULKAN)/vulkan_xlib_xrandr.h \
+    $(VULKAN)/vulkan_metal.h \
+    $(VULKAN)/vulkan_screen.h \
+    $(VULKAN)/vulkan_beta.h
+
+#@ vulkan_sci.h is Vulkan SC-specific
+ifeq ($(VULKAN_API),vulkansc)
+PLATFORM_HEADERS := $(PLATFORM_HEADERS) $(VULKAN)/vulkan_sci.h
+endif
+
+HEADERS_H = $(VULKAN)/vulkan$(API_SUFFIX)_core.h $(PLATFORM_HEADERS)
+ifeq ($(VULKAN_API),vulkansc)
+HEADERS_HPP = $(VULKAN)/vulkan$(API_SUFFIX)_core.hpp
+STATIC_JSON = $(STATIC_JSON_SRC)/vkpcc.json
+JSON_PCC    = $(JSON)/vkpcc.json
+STATIC_CTS_COPY = \
+	 $(JSON)/cts/vkjson_data_default.h \
+	 $(JSON)/cts/vkjson_parser_default.h
+JSON_SCHEMA = $(JSON)/vk.json
+JSON_GENERATOR = $(JSON)/vulkan_json_data.hpp \
+		 $(JSON)/vulkan_json_gen.h \
+		 $(JSON)/vulkan_json_gen.c
+JSON_PARSER = $(JSON)/vulkan_json_parser.hpp
+JSON_CTS = $(JSON)/cts/vulkan_json_data.hpp  $(JSON)/cts/vulkan_json_parser.hpp
+JSON_SCRIPTS = $(SCRIPTS)/json_parser.py $(SCRIPTS)/json_generator.py
+endif
+HEADERS = $(HEADERS_H) $(HEADERS_HPP)
+JSON_FILES = $(JSON_SCHEMA) $(JSON_GENERATOR) $(JSON_PARSER)
+JSON_CTS_FILES = $(JSON_CTS)
+
+default: install
+
+install: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS) $(JSON_FILES) $(JSON_PCC) $(JSON_CTS_FILES) $(STATIC_CTS_COPY)
+
+$(VULKAN)/vulkan$(API_SUFFIX).h: $(STATIC)/vulkan$(API_SUFFIX).h
+	$(QUIET)$(MKDIR) $(VULKAN)
+	$(CP) $? $@
+
+$(VULKAN)/vulkan$(API_SUFFIX).hpp: $(STATIC)/vulkan$(API_SUFFIX).h
+	$(QUIET)$(MKDIR) $(VULKAN)
+	$(CP) $? $@
+
+$(VULKAN)/vk_platform.h: $(STATIC)/vk_platform.h
+	$(QUIET)$(MKDIR) $(VULKAN)
+	$(CP) $? $@
+
+################################################
+
+# Autogenerate vulkan header from XML API description
+
+# Python and XML files on which vulkan_core.h depends
+GENSCRIPT   = $(SCRIPTS)/genvk.py
+VKXML	    = vk.xml
+VKH_DEPENDS = $(VKXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py
+
+$(HEADERS_H): $(VKH_DEPENDS)
+	$(MKDIR) $(VULKAN)
+	$(PYTHON) $(GENSCRIPT) $(MISRACOPTS) $(GENOPTS) -registry $(VKXML) \
+	    -o $(VULKAN) $(notdir $@)
+
+$(HEADERS_HPP): $(VKH_DEPENDS)
+	$(MKDIR) $(VULKAN)
+	$(PYTHON) $(GENSCRIPT) $(MISRACPPOPTS) $(GENOPTS) -registry $(VKXML) \
+	    -o $(VULKAN) $(notdir $@)
+
+platform: $(PLATFORM_HEADERS)
+
+# Autogenerate video codec headers from XML
+
+VIDEO_INCLUDE = $(INCLUDE)/vk_video
+CODECS = vulkan_video_codecs_common.h \
+	 vulkan_video_codec_h264std.h \
+	 vulkan_video_codec_h264std_decode.h \
+	 vulkan_video_codec_h264std_encode.h \
+	 vulkan_video_codec_h265std.h \
+	 vulkan_video_codec_h265std_decode.h \
+	 vulkan_video_codec_h265std_encode.h
+CODECXML = video.xml
+# Do not build video headers for Vulkan SC
+ifeq ($(VULKAN_API),vulkan)
+CODEC_HEADERS = $(CODECS:%=$(VIDEO_INCLUDE)/%)
+else
+CODEC_HEADERS =
+endif
+
+codec_headers: $(CODEC_HEADERS)
+
+$(VIDEO_INCLUDE)/%.h: $(CODECXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py
+	$(QUIET)$(MKDIR) $(VIDEO_INCLUDE)
+	$(QUIET)$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(CODECXML) -o $(VIDEO_INCLUDE) $(notdir $@)
+
+# Verify registry XML files against the schema
+validate:
+	jing -c registry.rnc $(VKXML)
+	$(PYTHON) $(XML_CONSISTENCY) $(VKXML)
+	jing -c registry.rnc $(CODECXML)
+
+# Test that generated Vulkan headers compile
+
+# Platforms to test
+TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
+
+TESTFILE = $(TESTS)/htest$(API_SUFFIX).c
+
+#@ -DUSE_HPP=1 is used only for Vulkan SC build
+test: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS)
+	gcc -Wall -pedantic-errors -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTFILE)
+	gcc -Wall -pedantic-errors -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTFILE)
+	g++ -Wall -pedantic-errors -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTFILE)
+ifeq ($(VULKAN_API),vulkansc)
+	g++ -Wall -pedantic-errors -c -std=c++98 -I$(INCLUDE) -I$(TESTS) $(TESTFILE)
+	g++ -Wall -pedantic-errors -c -std=c++11 -I$(INCLUDE) -I$(TESTS) -DUSE_HPP=1 $(TESTFILE)
+endif
+	$(RM) htest.o $(TESTS)/test.o
+
+# Test that generated video codec headers compile
+
+vtest: $(CODEC_HEADERS)
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODECS_COMMON
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD_DECODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD_ENCODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD -D VULKAN_VIDEO_CODEC_H264STD_DECODE -D VULKAN_VIDEO_CODEC_H264STD_ENCODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_DECODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_ENCODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD -D VULKAN_VIDEO_CODEC_H265STD_DECODE -D VULKAN_VIDEO_CODEC_H265STD_ENCODE
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL
+	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL -D VK_NO_STDINT_H
+	$(RM) vtest.o
+
+################################################
+
+# Autogenerate JSON Schema and utils from the XML API description
+$(JSON_FILES): $(VKH_DEPENDS) $(JSON_SCRIPTS)
+	$(QUIET)$(MKDIR) $(JSON)
+	$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) \
+	    -o $(JSON) $(notdir $@)
+
+$(JSON_CTS_FILES): $(VKH_DEPENDS) $(JSON_SCRIPTS)
+	$(QUIET)$(MKDIR) $(JSON)/cts
+	$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) --iscts \
+	    -o $(JSON)/cts $(notdir $@)
+
+$(JSON)/cts/vkjson_data_default.h: $(STATIC_JSON_SRC)/vkjson_data_default.h
+	$(QUIET)$(MKDIR) $(JSON)/cts
+	$(CP) $? $@
+
+$(JSON)/cts/vkjson_parser_default.h: $(STATIC_JSON_SRC)/vkjson_parser_default.h
+	$(QUIET)$(MKDIR) $(JSON)/cts
+	$(CP) $? $@
+
+$(JSON_PCC): $(STATIC_JSON)
+	$(QUIET)$(MKDIR) $(JSON)
+	$(CP) $? $@
+
+################################################
+
+# Files to clean up
+PYDIRT = diag.txt dumpReg.txt errwarn.txt *.pyc regdump.txt
+DIRT = $(PYDIRT) ERRS *.o
+
+# Clean intermediate files
+clean_dirt:
+	-$(RM) $(DIRT) \#*
+
+# Clean generated targets and intermediates
+clean clobber: clean_dirt
+	-$(RMRF) $(INCLUDE) $(JSON)
+	-$(RMRF) $(INCLUDE) $(VIDEO_INCLUDE)
diff --git a/codegen/vulkan/vulkan-docs-next/xml/README.adoc b/codegen/vulkan/vulkan-docs-next/xml/README.adoc
new file mode 100644
index 0000000..5e37b9f
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/README.adoc
@@ -0,0 +1,207 @@
+// Copyright 2014-2023 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Vulkan^(R)^ API Registry Build Instructions and Notes
+
+Jon Leech
+
+  * <<intro,Introduction>>
+  * <<build,Build Environment>>
+  * <<files,Files>>
+  * <<targets,Makefile Targets>>
+  * <<linux,Linux Software Dependencies>>
+  * <<windows,Windows Software Dependencies>>
+  * <<history,Revision History>>
+
+
+[[intro]]
+== Introduction
+
+This is the Vulkan XML API Registry. It is used to generate the canonical
+Vulkan header files, the API Asciidoc include files used by the Vulkan
+Specification and Reference Pages, and many other types of generated files.
+
+When changes to generated files are needed, follow this workflow.
+Normally changes are needed only when defining a new extension or core
+version of the API.
+
+  * Clone the repository and create a branch to work in locally
+  * Edit `vk.xml`
+  * `make validate install test`
+  ** This validates the XML files against the schema description; generates
+     headers in `../gen/include/vulkan` including `vulkan_core.h` and a set
+     of platform-dependent headers `vulkan_<platform>.h`; and runs a simple
+     compilation test of the headers.
+  * `(cd .. && make generated)`
+  ** This uses `vk.xml` to generate asciidoc includes and other intermediate
+     files in `../gen` for the specification build.
+     There are many ways to invoke the Makefile in `..`.
+     This simple recipe only generates includes for the core Vulkan API
+     without any extensions.
+     See `../BUILD.adoc` for more.
+  * Repeat until the headers and/or includes are correct
+  * Commit your changes to your local git branch, push to your upstream git
+    server (your personal repository clone of KhronosGroup/Vulkan-Docs on
+    GitHub, for people outside Khronos; the Khronos member gitlab server,
+    otherwise), and create a pull or merge request against the default
+    branch (currently `main`) or other appropriate target.
+
+For a detailed description of the schema, go to `..` and `make registry`,
+which generates `gen/out/registry.html`.
+This document also includes some examples of how to make simple changes in
+the API via the XML.
+
+The generator scripts are written in Python 3, using the `etree` package for
+processing XML.
+See `../scripts/README.adoc` for script descriptions.
+
+=== Video Headers
+
+In addition to `vk.xml` this directory also includes `video.xml`.
+This is a similarly structured XML file used to produce headers for
+structures and other types (`StdVideo*`) associated with externally defined
+video standards.
+While these data types are passed into some of the Vulkan Video extension
+APIs, they are not treated as part of the Vulkan API.
+This is why they are defined in a separate XML file.
+
+The `validate` and `install` targets described above also generate the
+`StdVideo*` headers in `../gen/include/vk_video`.
+A separate test target, `vtest`, can be used as a simple compilation test of
+the `StdVideo*` headers.
+
+
+[[build]]
+== Build Environment
+
+We strongly recommend using the Khronos-provided Docker image, which has all
+needed build tools pre-installed.
+See `../BUILD.adoc` for details.
+
+It is possible to construct your own build environment on Linux, Windows, or
+MacOS by following the recipe in the Dockerfile for the Khronos-provided
+Docker image.
+
+
+[[files]]
+== Files
+
+  * `vk.xml` - XML API description.
+  * `registry.rnc` - RelaxNG compact schema for validating XML against the
+    schema.
+  * `Makefile` - generates headers from `vk.xml` (see <<targets,Makefile
+    Targets>> below).
+  * `../gen/include/vulkan/vulkan_core.h` - Generated Vulkan non-platform
+    API header.
+  * `../gen/include/vulkan/vulkan_<platform>.h` - Generated Vulkan platform
+    API headers.
+  * `video.xml` - `StdVideo*` API description.
+  * `../gen/include/vk_video/vulkan_video*.h` - Generated `StdVideo*` API
+    headers.
+
+
+[[targets]]
+== Makefile Targets
+
+  * `install` (default target) - regenerate Vulkan and `StdVideo*` header
+    files in `../gen/include/`.
+  * `test` - make sure Vulkan headers compile.
+    *Important!* Can also be used to test if platform headers compile by
+    specifying `make TESTDEFS=-DVK_USE_PLATFORM_<PLATFORM>_<AUTHORID> test`.
+  * `vtest` - make sure `StdVideo*` headers compile.
+  * `validate` - validate `vk.xml` and `video.xml` against the schema.
+    Requires installing `jing` (see <<linux,Software Dependencies>> below).
+    Also important!
+  * `clean_dirt` - remove intermediate files.
+  * `clean` - remove generated files.
+
+Generated files can be created in a directory other than the default
+`../gen/` by setting the Makefile variable `GENERATED` to that directory
+path.
+
+If you have trouble running the Makefile on your platform, the following
+steps will build the Vulkan headers and test that `vulkan_core.h` compiles:
+
+[source,sh]
+----
+# Regenerate header from XML
+python3 ../scripts/genvk.py -registry vk.xml -o ../gen/include/vulkan vulkan_core.h
+# Verify that the resulting header compiles
+gcc -Wall -std=c99 -c -I../gen/include -I../tests ../tests/htest.c
+g++ -Wall -std=c++98 -c -I../gen/include -I../tests ../tests/htest.c
+rm -f htest.o
+----
+
+
+[[history]]
+== Revision History
+
+  * 2021-12-13 -
+    Add `video.xml` for `StdVideo*` APIs and headers.
+  * 2020-08-25 -
+    Update for new default branch (`main`).
+  * 2019/05/12 -
+    Bring up to date with changes in file paths and build tools.
+  * 2019/03/10 -
+    Update for script reorganization.
+  * 2018/05/21 -
+    Do not generate vulkan_ext.[ch] from the `install` target. Add a new
+    shortcut `extloader` target for people still using this code and needing
+    to regenerate it.
+  * 2018/03/13 -
+    Update for new directory structure.
+  * 2018/03/06 -
+    Update for Vulkan 1.1 release and new default branch.
+  * 2015/09/18 -
+    Split platform-specific headers into their own vulkan_<platform>.h
+    files, move vulkan.h to vulkan_core.h, and add a new (static) vulkan.h
+    which includes appropriate combinations of the other headers.
+  * 2015/06/01 -
+    The header that is generated has been improved relative to the first
+    version. Function arguments are indented like the hand-generated header,
+    enumerant BEGIN/END_RANGE enums are named the same, etc. The ordering of
+    declarations is unlike the hand-generated header, and probably always
+    will because it results from a type/enum/function dependency analysis.
+    Some of this can be forced by being more explicit about it, if that is a
+    big deal.
+  * 2015/06/02 -
+    Per WG signoff, converted hex constant values to decimal (for
+    non-bitmasks) and VK_BIT macros to 'bitpos' attributes in the XML and
+    hex constants in the header. Updated schema to match. Changed <ptype>
+    tag to <type>.
+  * 2015/06/03 -
+    Moved into new 'vulkan' tree (did not bother preserving history in
+    previous repo). Added semantic knowledge about structs and unions to
+    <type> tags instead of just imbedding C struct definitions. Improved
+    registry.rnc schema a bit.
+  * 2015/06/07 -
+    Incorporate feedback from F2F including Python 3 and Windows fixes to
+    the scripts. Add documentation to readme.pdf. Fold in multiple merge
+    requests resulting from action items agreed at the F2F, to prepare
+    for everyone moving to XML instead of directly editing the header.
+  * 2015/06/20 -
+    Add vulkan-docs target and instructions for installing python3 and
+    python-lxml for Windows.
+  * 2015/08/13 -
+    Bring documentation up to date with Makefile targets (default is now
+    ../include/vulkan.h).
+  * 2015/09/02 -
+    Update README with required (or known working) versions of toolchain
+    components.
+  * 2015/09/02 -
+    Move include/vulkan.h to vulkan/vulkan.h so #include "vulkan/vulkan.h"
+    is the normal usage (Bug 14576).
+  * 2016/02/12 -
+    Update README and remove old files to stage for public release.
+  * 2016/05/31 -
+    Remove dependency on lxml.
+  * 2016/07/27 -
+    Update documentation for changes to schema and generator scripts.
+  * 2016/08/26 -
+    Move README to an asciidoc file and update for the single-branch model.
+    Use 'clean' target to remove generated files in both spec source and
+    registry Makefiles.
+  * 2017/02/20 -
+    Move registry.txt (schema documentation) to the Vulkan spec source
+    directory and update the README here.
diff --git a/codegen/vulkan/vulkan-docs-next/xml/generate-core-block.rb b/codegen/vulkan/vulkan-docs-next/xml/generate-core-block.rb
new file mode 100644
index 0000000..159e2fe
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/generate-core-block.rb
@@ -0,0 +1,125 @@
+# Copyright 2018-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'nokogiri'
+
+
+renames = {}
+
+extension_name = ARGV[0]
+extension_suffix = /VK_([^_]+)_.+/.match(extension_name)[1]
+
+allowed_dependency_renames = ['']
+
+file = File.open("vk.xml")
+Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do | extension |
+  extension_enum_offset = 1000000000 + ((extension.attribute('number').content.to_i - 1) * 1000)
+  extension.xpath('require').each do |require|
+
+    do_rename = false
+
+    if require.attribute('extension')
+      allowed_dependency_renames.each do |dependency|
+        if require.attribute('extension').content == dependency
+          do_rename = true
+        end
+      end
+    else
+      do_rename = true
+    end
+
+    if do_rename == false
+      puts "Extension interaction with " + require.attribute('extension').content + " needs addressing!"
+    else
+      core_block = "\t"*2 + require.to_s.lines[0].strip + "\n"
+      alias_block = "\t"*3 + require.to_s.lines[0].strip + "\n"
+
+      require.children.each do |element|
+        if element.node_name != 'text' && element.node_name != 'comment'
+
+          # Core Block
+          if /.+_EXTENSION_NAME/.match(element.attribute('name').content) == nil &&
+             /.+_SPEC_VERSION/.match(element.attribute('name').content) == nil
+
+            case element.node_name
+            when 'enum'
+              attributes = element.attributes
+              if element.attributes['offset']
+                attributes['value'] = element.attribute('offset').content.to_i + extension_enum_offset
+                attributes.delete('offset')
+              end
+
+              core_block << "\t"*3 + '<enum'
+              attributes.each_pair do |key, value|
+                core_block << ' ' + key + '="' + value.to_s + '"'
+              end
+              core_block << '/>' + "\n"
+            when 'type', 'command'
+              core_block << "\t"*3 + element.to_s.strip + "\n"
+            else
+              core_block << "Warning: Unknown type found!\n" << element.node_name
+            end
+          end
+
+          # Alias Block + Renames
+
+          if /.+_EXTENSION_NAME/.match(element.attribute('name').content) ||
+             /.+_SPEC_VERSION/.match(element.attribute('name').content)
+            alias_block << "\t"*4 + element.to_s.strip + "\n"
+          else
+            old_name = element.attribute('name').content
+            new_name = old_name.sub('_' + extension_suffix,'').sub(extension_suffix,'')
+            alias_block << "\t"*4 + '<alias name="' + old_name + '" value="' + new_name + '"/>' + "\n"
+            renames[old_name] = new_name
+            core_block.gsub!(old_name,new_name)
+          end
+        end
+      end
+      alias_block << "\t"*3 + require.to_s.lines[-1].strip
+      core_block << "\t"*2 + require.to_s.lines[-1].strip
+
+      puts alias_block
+      puts
+      puts core_block
+      puts
+      renames.each_pair do |old, new|
+        puts old + ' -> ' + new
+      end
+    end
+  end
+end
+
+outdata = File.read('vk.xml')
+
+renames.each_pair do |old, new|
+  outdata.gsub!(old,new)
+end
+
+File.open('vk.xml', 'w') do |out|
+  out << outdata
+end
+
+def rename_text_files(dir, renames, extension_name)
+  Dir[dir + '/*.adoc'].each do |name|
+    # Skip renaming in the extension appendix, since this should preserve the old names.
+    if (name != ('../appendices/' + extension_name + '.adoc'))
+      old_file = File.read(name)
+
+      new_file = old_file.clone
+      renames.each_pair do |old, new|
+        new_file.gsub!(old,new)
+      end
+
+      if (old_file != new_file)
+        File.write(name, new_file)
+      end
+    end
+  end
+  Dir[dir + '/*/'].each do |subdir|
+    rename_text_files(subdir, renames, extension_name)
+  end
+end
+
+rename_text_files('../chapters', renames, extension_name)
+rename_text_files('../appendices', renames, extension_name)
diff --git a/codegen/vulkan/vulkan-docs-next/xml/profiles/VP_KHR_roadmap_2022.json b/codegen/vulkan/vulkan-docs-next/xml/profiles/VP_KHR_roadmap_2022.json
new file mode 100644
index 0000000..b528eca
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/profiles/VP_KHR_roadmap_2022.json
@@ -0,0 +1,381 @@
+{
+    "$schema": "https://schema.khronos.org/vulkan/profiles-0.8.1-204.json#",
+    "capabilities": {
+        "vulkan10requirements": {
+            "features": {
+                "VkPhysicalDeviceFeatures": {
+                    "robustBufferAccess": true
+                }
+            }
+        },
+        "vulkan10requirements_roadmap2022": {
+            "features": {
+                "VkPhysicalDeviceFeatures": {
+                    "fullDrawIndexUint32": true,
+                    "imageCubeArray": true,
+                    "independentBlend": true,
+                    "sampleRateShading": true,
+                    "drawIndirectFirstInstance": true,
+                    "depthClamp": true,
+                    "depthBiasClamp": true,
+                    "samplerAnisotropy": true,
+                    "occlusionQueryPrecise": true,
+                    "fragmentStoresAndAtomics": true,
+                    "shaderStorageImageExtendedFormats": true,
+                    "shaderUniformBufferArrayDynamicIndexing": true,
+                    "shaderSampledImageArrayDynamicIndexing": true,
+                    "shaderStorageBufferArrayDynamicIndexing": true,
+                    "shaderStorageImageArrayDynamicIndexing": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceProperties": {
+                    "limits": {
+                        "maxImageDimension1D": 8192,
+                        "maxImageDimension2D": 8192,
+                        "maxImageDimensionCube": 8192,
+                        "maxImageArrayLayers": 2048,
+                        "maxUniformBufferRange": 65536,
+                        "bufferImageGranularity": 4096,
+                        "maxPerStageDescriptorSamplers": 64,
+                        "maxPerStageDescriptorUniformBuffers": 15,
+                        "maxPerStageDescriptorStorageBuffers": 30,
+                        "maxPerStageDescriptorSampledImages": 200,
+                        "maxPerStageDescriptorStorageImages": 16,
+                        "maxPerStageResources": 200,
+                        "maxDescriptorSetSamplers": 576,
+                        "maxDescriptorSetUniformBuffers": 90,
+                        "maxDescriptorSetStorageBuffers": 96,
+                        "maxDescriptorSetSampledImages": 1800,
+                        "maxDescriptorSetStorageImages": 144,
+                        "maxFragmentCombinedOutputResources": 16,
+                        "maxComputeWorkGroupInvocations": 256,
+                        "maxComputeWorkGroupSize": [ 256, 256, 64 ],
+                        "subTexelPrecisionBits": 8,
+                        "mipmapPrecisionBits": 6,
+                        "maxSamplerLodBias": 14,
+                        "standardSampleLocations": true,
+                        "maxColorAttachments": 7
+                    }
+                }
+            }
+        },
+        "vulkan10optionals_roadmap2022": {
+            "features": {
+                "VkPhysicalDeviceFeatures": {
+                    "largePoints": true,
+                    "wideLines": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceProperties": {
+                    "limits": {
+                        "pointSizeGranularity": 0.125,
+                        "lineWidthGranularity": 0.5
+                    }
+                }
+            }
+        },
+        "vulkan11requirements": {
+            "features": {
+                "VkPhysicalDeviceVulkan11Features": {
+                    "multiview": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceVulkan11Properties": {
+                    "maxMultiviewViewCount": 6,
+                    "maxMultiviewInstanceIndex": 134217727
+                }
+            }
+        },
+        "vulkan11requirements_roadmap2022": {
+            "features": {
+                "VkPhysicalDeviceVulkan11Features": {
+                    "samplerYcbcrConversion": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceVulkan11Properties": {
+                    "subgroupSize": 4,
+                    "subgroupSupportedStages": [ "VK_SHADER_STAGE_COMPUTE_BIT", "VK_SHADER_STAGE_FRAGMENT_BIT" ],
+                    "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT", "VK_SUBGROUP_FEATURE_VOTE_BIT", "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT", "VK_SUBGROUP_FEATURE_BALLOT_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", "VK_SUBGROUP_FEATURE_QUAD_BIT" ]
+                }
+            }
+        },
+        "vulkan12requirements": {
+            "features": {
+                "VkPhysicalDeviceVulkan12Features": {
+                    "uniformBufferStandardLayout": true,
+                    "subgroupBroadcastDynamicId": true,
+                    "imagelessFramebuffer": true,
+                    "separateDepthStencilLayouts": true,
+                    "hostQueryReset": true,
+                    "timelineSemaphore": true,
+                    "shaderSubgroupExtendedTypes": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceVulkan12Properties": {
+                    "maxTimelineSemaphoreValueDifference": 2147483647
+                }
+            }
+        },
+        "vulkan12requirements_roadmap2022": {
+            "features": {
+                "VkPhysicalDeviceVulkan12Features": {
+                    "samplerMirrorClampToEdge": true,
+                    "descriptorIndexing": true,
+                    "shaderUniformTexelBufferArrayDynamicIndexing": true,
+                    "shaderStorageTexelBufferArrayDynamicIndexing": true,
+                    "shaderUniformBufferArrayNonUniformIndexing": true,
+                    "shaderSampledImageArrayNonUniformIndexing": true,
+                    "shaderStorageBufferArrayNonUniformIndexing": true,
+                    "shaderStorageImageArrayNonUniformIndexing": true,
+                    "shaderUniformTexelBufferArrayNonUniformIndexing": true,
+                    "shaderStorageTexelBufferArrayNonUniformIndexing": true,
+                    "descriptorBindingSampledImageUpdateAfterBind": true,
+                    "descriptorBindingStorageImageUpdateAfterBind": true,
+                    "descriptorBindingStorageBufferUpdateAfterBind": true,
+                    "descriptorBindingUniformTexelBufferUpdateAfterBind": true,
+                    "descriptorBindingStorageTexelBufferUpdateAfterBind": true,
+                    "descriptorBindingUpdateUnusedWhilePending": true,
+                    "descriptorBindingPartiallyBound": true,
+                    "descriptorBindingVariableDescriptorCount": true,
+                    "runtimeDescriptorArray": true,
+                    "scalarBlockLayout": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceVulkan12Properties": {
+                    "shaderSignedZeroInfNanPreserveFloat16": true,
+                    "shaderSignedZeroInfNanPreserveFloat32": true,
+                    "maxPerStageDescriptorUpdateAfterBindSamplers": 500000,
+                    "maxPerStageDescriptorUpdateAfterBindUniformBuffers": 12,
+                    "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 500000,
+                    "maxPerStageDescriptorUpdateAfterBindSampledImages": 500000,
+                    "maxPerStageDescriptorUpdateAfterBindStorageImages": 500000,
+                    "maxPerStageDescriptorUpdateAfterBindInputAttachments": 7,
+                    "maxPerStageUpdateAfterBindResources": 500000,
+                    "maxDescriptorSetUpdateAfterBindSamplers": 500000,
+                    "maxDescriptorSetUpdateAfterBindUniformBuffers": 72,
+                    "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic": 8,
+                    "maxDescriptorSetUpdateAfterBindStorageBuffers": 500000,
+                    "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic": 4,
+                    "maxDescriptorSetUpdateAfterBindSampledImages": 500000,
+                    "maxDescriptorSetUpdateAfterBindStorageImages": 500000,
+                    "maxDescriptorSetUpdateAfterBindInputAttachments": 7
+                }
+            }
+        },
+        "vulkan13requirements": {
+            "features": {
+                "VkPhysicalDeviceVulkan12Features": {
+                    "vulkanMemoryModel": true,
+                    "vulkanMemoryModelDeviceScope": true,
+                    "bufferDeviceAddress": true
+                },
+                "VkPhysicalDeviceVulkan13Features": {
+                    "robustImageAccess": true,
+                    "shaderTerminateInvocation": true,
+                    "shaderZeroInitializeWorkgroupMemory": true,
+                    "synchronization2": true,
+                    "shaderIntegerDotProduct": true,
+                    "maintenance4": true,
+                    "pipelineCreationCacheControl": true,
+                    "subgroupSizeControl": true,
+                    "computeFullSubgroups": true,
+                    "shaderDemoteToHelperInvocation": true,
+                    "inlineUniformBlock": true,
+                    "dynamicRendering": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceVulkan13Properties": {
+                    "maxBufferSize": 1073741824,
+                    "maxInlineUniformBlockSize": 256,
+                    "maxPerStageDescriptorInlineUniformBlocks": 4,
+                    "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks": 4,
+                    "maxDescriptorSetInlineUniformBlocks": 4,
+                    "maxDescriptorSetUpdateAfterBindInlineUniformBlocks": 4,
+                    "maxInlineUniformTotalSize": 256
+                }
+            }
+        },
+        "vulkan13requirements_1_2": {
+            "extensions": {
+                "VK_EXT_image_robustness": 1,
+                "VK_KHR_shader_non_semantic_info": 1,
+                "VK_KHR_shader_terminate_invocation": 1,
+                "VK_KHR_format_feature_flags2": 1,
+                "VK_KHR_zero_initialize_workgroup_memory": 1,
+                "VK_KHR_synchronization2": 1,
+                "VK_KHR_shader_integer_dot_product": 1,
+                "VK_KHR_maintenance4": 1,
+                "VK_EXT_4444_formats": 1,
+                "VK_EXT_extended_dynamic_state": 1,
+                "VK_EXT_extended_dynamic_state2": 1,
+                "VK_EXT_pipeline_creation_cache_control": 1,
+                "VK_EXT_subgroup_size_control": 1,
+                "VK_EXT_shader_demote_to_helper_invocation": 1,
+                "VK_EXT_inline_uniform_block": 1,
+                "VK_EXT_pipeline_creation_feedback": 1,
+                "VK_EXT_texel_buffer_alignment": 1,
+                "VK_EXT_ycbcr_2plane_444_formats": 1,
+                "VK_EXT_texture_compression_astc_hdr": 1,
+                "VK_EXT_tooling_info": 1,
+                "VK_EXT_private_data": 1,
+                "VK_KHR_dynamic_rendering": 1
+            },
+            "features": {
+                "VkPhysicalDeviceVulkan12Features": {
+                    "vulkanMemoryModel": true,
+                    "vulkanMemoryModelDeviceScope": true,
+                    "vulkanMemoryModelAvailabilityVisibilityChains": true,
+                    "bufferDeviceAddress": true
+                },
+                "VkPhysicalDeviceImageRobustnessFeaturesEXT": {
+                    "robustImageAccess": true
+                },
+                "VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR": {
+                    "shaderTerminateInvocation": true
+                },
+                "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR": {
+                    "shaderZeroInitializeWorkgroupMemory": true
+                },
+                "VkPhysicalDeviceSynchronization2FeaturesKHR": {
+                    "synchronization2": true
+                },
+                "VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR": {
+                    "shaderIntegerDotProduct": true
+                },
+                "VkPhysicalDeviceMaintenance4FeaturesKHR": {
+                    "maintenance4": true
+                },
+                "VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT": {
+                    "pipelineCreationCacheControl": true
+                },
+                "VkPhysicalDeviceSubgroupSizeControlFeaturesEXT": {
+                    "subgroupSizeControl": true,
+                    "computeFullSubgroups": true
+                },
+                "VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT": {
+                    "shaderDemoteToHelperInvocation": true
+                },
+                "VkPhysicalDeviceInlineUniformBlockFeaturesEXT": {
+                    "inlineUniformBlock": true
+                }
+            },
+            "properties": {
+                "VkPhysicalDeviceMaintenance4PropertiesKHR": {
+                    "maxBufferSize": 1073741824
+                },
+                "VkPhysicalDeviceInlineUniformBlockPropertiesEXT": {
+                    "maxInlineUniformBlockSize": 256,
+                    "maxPerStageDescriptorInlineUniformBlocks": 4,
+                    "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks": 4,
+                    "maxDescriptorSetInlineUniformBlocks": 4,
+                    "maxDescriptorSetUpdateAfterBindInlineUniformBlocks": 4
+                }
+            }
+        },
+        "vulkan13requirements_roadmap2022": {
+            "extensions": {
+                "VK_KHR_global_priority": 1
+            },
+            "features": {
+                "VkPhysicalDeviceVulkan13Features": {
+                    "descriptorBindingInlineUniformBlockUpdateAfterBind": true
+                }
+            }
+        },
+        "vulkan13requirements_roadmap2022_1_2": {
+            "extensions": {
+                "VK_EXT_global_priority": 1,
+                "VK_EXT_inline_uniform_block": 1
+            },
+            "features": {
+                "VkPhysicalDeviceInlineUniformBlockFeaturesEXT": {
+                    "descriptorBindingInlineUniformBlockUpdateAfterBind": true
+                }
+            }
+        }
+    },
+    "profiles": {
+        "VP_KHR_roadmap_2022": {
+            "version": 1,
+            "api-version": "1.3.204",
+            "label": "Khronos Vulkan Roadmap 2022 profile",
+            "description": "This roadmap profile is intended to be supported by newer devices shipping in 2022 across mainstream smartphone, tablet, laptops, console and desktop devices.",
+            "contributors": {
+                "Tobias Hector": {
+                    "company": "AMD",
+                    "email": "tobias.hector@amd.com",
+                    "contact": true
+                },
+                "Christophe Riccio": {
+                    "company": "LunarG",
+                    "email": "christophe@lunarg.com",
+                    "contact": true
+                }
+            },
+            "history": [
+                {
+                    "revision": 7,
+                    "date": "2022-11-16",
+                    "author": "Christophe Riccio",
+                    "comment": "Fix wideLines and largePoints that are optionals"
+                },
+                {
+                    "revision": 6,
+                    "date": "2022-11-02",
+                    "author": "Christophe Riccio",
+                    "comment": "Fix roadmap 2022 maxInlineUniformTotalSize limit, 256 instead of 4"
+                },
+                {
+                    "revision": 5,
+                    "date": "2022-05-02",
+                    "author": "Christophe Riccio",
+                    "comment": "Add missing dynamicRendering that is a Vulkan 1.3 requirement"
+                },
+                {
+                    "revision": 4,
+                    "date": "2022-03-08",
+                    "author": "Christophe Riccio",
+                    "comment": "Refactor requirements per Vulkan API version"
+                },
+                {
+                    "revision": 3,
+                    "date": "2022-03-08",
+                    "author": "Christophe Riccio",
+                    "comment": "Fix Vulkan 1.3.204 API version requirement"
+                },
+                {
+                    "revision": 2,
+                    "date": "2022-01-03",
+                    "author": "Christophe Riccio",
+                    "comment": "Rebase against Vulkan 1.3.203 revision"
+                },
+                {
+                    "revision": 1,
+                    "date": "2021-12-08",
+                    "author": "Christophe Riccio",
+                    "comment": "Initial revision"
+                }
+            ],
+            "capabilities": [
+                "vulkan10requirements",
+                "vulkan10requirements_roadmap2022",
+                "vulkan11requirements",
+                "vulkan11requirements_roadmap2022",
+                "vulkan12requirements",
+                "vulkan12requirements_roadmap2022",
+                "vulkan13requirements",
+                "vulkan13requirements_roadmap2022"
+            ],
+            "optionals": [
+                "vulkan10optionals_roadmap2022"
+            ]
+        }
+    }
+}
diff --git a/codegen/vulkan/vulkan-docs-next/xml/registry.rnc b/codegen/vulkan/vulkan-docs-next/xml/registry.rnc
new file mode 100644
index 0000000..906f1fc
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/registry.rnc
@@ -0,0 +1,738 @@
+# Copyright 2013-2023 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        * |
+        Formats           * |
+        Sync              * |
+        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 do not change syntactic interpretation but allow organization
+#       in the generated header.
+#   deprecated - denotes that this type is deprecated, and why.
+#       Valid values: 'aliased', 'true'.
+#   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 is 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.
+#       deprecated - denotes that this member is deprecated, and why.
+#           Valid values: 'ignored', 'true'.
+#       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 substructures, and extensions.
+#           Specifies the type of a device limit.
+#           Valid values: 'min', 'max', 'pot', 'mul', 'bits', bitmask', 'range', 'struct', 'exact', '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 is a problem here: I am 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 deprecated { 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 api { text } ? ,
+                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 } ? ,
+                attribute deprecated { 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.
+#   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 bitwidth { Integer } ? ,
+    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
+#   deprecated - denotes that this enum is deprecated, and why.
+#       Valid values: 'aliased', 'ignored', 'true'.
+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 } &
+      attribute deprecated { 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.
+#
+# Either form may have an 'api' attribute
+#   api - matches a <feature> api attribute, if present
+#
+# The first form only has 'name' and 'alias' attributes, and no contents.
+# It defines a command alias.
+#
+# The second form fully defines a command, and has the following structure:
+# The possible attributes are not described in this comment block yet, but
+# are in registry.html. 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 is 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.
+#     validstructs - only applicable for parameters which are pointers to
+#         VkBaseInStructure or VkBaseOutStructure types, used as abstract
+#         placeholders. Specifies a comma-separated list of structures which
+#         may be passed in place of the parameter, or anywhere in the pNext
+#         chain of the parameter.
+#     stride - if the member is an array, stride specifies the name of
+#         another member containing the byte stride between consecutive
+#         elements in the array. Is assumed tightly packed if omitted.
+#     <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 api { text } ?
+        ) |
+    (
+        attribute tasks { text } ? ,
+        attribute queues { text } ? ,
+        attribute successcodes { text } ? ,
+        attribute errorcodes { text } ? ,
+        attribute renderpass { text } ? ,
+        attribute videocoding { text } ? ,
+        attribute cmdbufferlevel { text } ? ,
+        attribute prefix { text } ? ,
+        attribute suffix { text } ? ,
+        attribute api { text } ? ,
+        Comment ? ,
+        element proto {
+            mixed {
+                element type { TypeName } ? ,
+                element name { text }
+            }
+        } ,
+        element param {
+            attribute api { text } ? ,
+            attribute len { text } ? ,
+            attribute altlen { text } ? ,
+            attribute externsync { text } ? ,
+            attribute optional { text } ? ,
+            attribute selector { text } ? ,
+            attribute noautovalidity { text } ? ,
+            attribute objecttype { text } ? ,
+            attribute validstructs { text } ? ,
+            attribute stride { 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 ? ,
+            Depends ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        } |
+        element remove {
+            ProfileName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        }
+    ) *
+}
+
+Extensions = element extensions {
+    Comment ? ,
+    Extension *
+}
+
+# Each <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 - comma-separated list of API name(s) supporting this extension,
+#       e.g. 'vulkan', or 'disabled' to never generate output.
+#   ratified - comma-separated list of API name(s) for which this extension
+#       has been ratified by Khronos. Defaults to "" if not specified.
+#   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 depends { text } ?,
+    attribute supported { StringGroup } ? ,
+    attribute ratified { text } ? ,
+    attribute promotedto { text } ? ,
+    attribute deprecatedby { text } ? ,
+    attribute obsoletedby { text } ? ,
+    attribute provisional { text } ? ,
+    attribute specialuse { text } ? ,
+    Comment ? ,
+    (
+        element require {
+            attribute api { text } ? ,
+            ProfileName ? ,
+            Depends ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        } |
+        element remove {
+            attribute api { text } ? ,
+            ProfileName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        }
+    ) *
+}
+
+# Each <format> define information about a VkFormat in a machine readable format
+Formats = element formats {
+    Format *
+}
+
+#    name - Format name, matching a VkFormat enum name
+#    class - Used for 'Compatible Formats' table
+#    blockSize - Used for 'Compatible Formats' table
+#    texelsPerBlock - Used for 'Compatible Formats' table
+#    blockExtent - 3D extent, no attribute is same as blockExtent=1,1,1
+#    packed - number of bits data type
+#    compressed - compression format class
+#    planes - number of planes, no attribute is same as planes=1
+#    chroma - can be one of [420, 422, 444] and used to mark if YCbCr Sampler are required by default
+Format = element format {
+    Name ,
+    attribute class { text } ,
+    attribute blockSize { text } ,
+    attribute texelsPerBlock { text } ,
+    attribute blockExtent { text } ? ,
+    attribute packed { text } ? ,
+    attribute compressed { text } ? ,
+    attribute chroma { text } ? ,
+    Component + ,
+    Plane * ,
+    SpirvImageFormat *
+}
+
+#   bits - size of component or "compressed" if part of block-compression format
+#   numericFormat - as per Interpretation of Numeric Format table
+#       some formats (depth/stencil) will have different numeric per component
+#   planeIndex - For multi-planar formats to map to the plane element
+Component = element component {
+    Name ,
+    attribute bits { text } ,
+    attribute numericFormat { text },
+    attribute planeIndex { text } ?
+}
+
+# For multi-planar formats
+Plane = element plane {
+    attribute index { text } ,
+    attribute widthDivisor { text } ,
+    attribute heightDivisor { text } ,
+    attribute compatible { text }
+}
+
+# labels a SPIR-V Image Format
+SpirvImageFormat = element spirvimageformat {
+    Name
+}
+
+# <sync> is a set of all sync objects
+Sync = element sync {
+    Comment ? ,
+    SyncStage *,
+    SyncAccess *,
+    SyncPipeline *
+}
+
+SyncSupport = element syncsupport {
+    attribute queues { text } ? ,
+    attribute stage { text } ?
+}
+
+SyncEquivalent = element syncequivalent {
+    attribute stage { text } ?,
+    attribute access { text } ?
+}
+
+# describes all Pipeline Stages
+SyncStage = element syncstage {
+    Name ,
+    attribute alias { text } ? ,
+    SyncSupport ? ,
+    SyncEquivalent ?
+}
+
+# describes all Access Flags
+SyncAccess = element syncaccess {
+    element comment { text } ?,
+    Name ,
+    attribute alias { text } ? ,
+    SyncSupport ? ,
+    SyncEquivalent ?
+}
+
+SyncPipelineStage = element syncpipelinestage {
+    attribute order { text } ? ,
+    attribute before { text } ? ,
+    attribute after { text } ?,
+    text
+}
+
+# describes pipelines
+SyncPipeline = element syncpipeline {
+    Name ,
+    attribute depends { text } ? ,
+    SyncPipelineStage *
+}
+
+# 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 validating
+# what needs to be enabled or supported to 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 fourth 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 cannot be
+# properly 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 do not 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 }
+# Boolean expression of core version and extension names using (),+ operators
+Depends = attribute depends { text }
+Vendor = attribute vendor { text }
+Comment = attribute comment { text }
+Name = attribute name { text }
diff --git a/codegen/vulkan/vulkan-docs-next/xml/video.xml b/codegen/vulkan/vulkan-docs-next/xml/video.xml
new file mode 100644
index 0000000..a7e66db
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/video.xml
@@ -0,0 +1,1218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<registry>
+    <comment>
+Copyright 2021-2023 The Khronos Group Inc.
+SPDX-License-Identifier: Apache-2.0 OR MIT
+    </comment>
+
+    <comment>
+This file, video.xml, provides the machine readable definition of data
+structures and enumerations that are related to the externally-provided
+video compression standards.
+
+The current public version of video.xml is maintained in the default branch
+(currently named main) of the Khronos Vulkan GitHub project.
+    </comment>
+
+    <types comment="Video type definitions">
+            <!-- base types -->
+        <type name="stdint" category="include">#if !defined(VK_NO_STDINT_H)
+    #include &lt;stdint.h&gt;
+#endif</type>
+        <type name="uint32_t" requires="stdint"/>
+        <type name="uint16_t" requires="stdint"/>
+        <type name="uint8_t" requires="stdint"/>
+        <type name="int32_t" requires="stdint"/>
+        <type name="int8_t" requires="stdint"/>
+
+        <type category="include" name="vk_video/vulkan_video_codecs_common.h">#include "vulkan_video_codecs_common.h"</type>
+        <type category="include" name="vk_video/vulkan_video_codec_h264std.h">#include "vulkan_video_codec_h264std.h"</type>
+        <type category="include" name="vk_video/vulkan_video_codec_h265std.h">#include "vulkan_video_codec_h265std.h"</type>
+
+            <!-- vulkan_video_codecs_common macros -->
+        <type category="define">#define <name>VK_MAKE_VIDEO_STD_VERSION</name>(major, minor, patch) \
+    ((((uint32_t)(major)) &lt;&lt; 22) | (((uint32_t)(minor)) &lt;&lt; 12) | ((uint32_t)(patch)))</type>
+
+            <!-- vulkan_video_codec_h264std_decode.h macros -->
+        <type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">
+#define <name>VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(1, 0, 0)</type>
+
+            <!-- vulkan_video_codec_h264std_encode.h macros -->
+        <type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">// Vulkan 0.9 provisional Vulkan video H.264 encode std specification version number
+#define <name>VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_11</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(0, 9, 11)</type>
+
+            <!-- vulkan_video_codec_h265std_decode.h macros -->
+        <type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">
+#define <name>VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(1, 0, 0)</type>
+
+            <!-- vulkan_video_codec_h265std_encode.h macros -->
+        <type category="define" requires="VK_MAKE_VIDEO_STD_VERSION">// Vulkan 0.9 provisional Vulkan video H.265 encode std specification version number
+#define <name>VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_12</name> <type>VK_MAKE_VIDEO_STD_VERSION</type>(0, 9, 12)</type>
+
+            <!-- vulkan_video_codec_h264std.h enumerated types -->
+        <type name="StdVideoH264ChromaFormatIdc" category="enum"/>
+        <type name="StdVideoH264ProfileIdc" category="enum"/>
+        <type name="StdVideoH264LevelIdc" category="enum"/>
+        <type name="StdVideoH264PocType" category="enum"/>
+        <type name="StdVideoH264AspectRatioIdc" category="enum"/>
+        <type name="StdVideoH264WeightedBipredIdc" category="enum"/>
+        <type name="StdVideoH264ModificationOfPicNumsIdc" category="enum"/>
+        <type name="StdVideoH264MemMgmtControlOp" category="enum"/>
+        <type name="StdVideoH264CabacInitIdc" category="enum"/>
+        <type name="StdVideoH264DisableDeblockingFilterIdc" category="enum"/>
+        <type name="StdVideoH264SliceType" category="enum"/>
+        <type name="StdVideoH264PictureType" category="enum"/>
+        <type name="StdVideoH264NonVclNaluType" category="enum"/>
+
+            <!-- vulkan_video_codec_h264std.h structs -->
+        <type category="struct" name="StdVideoH264SpsVuiFlags">
+            <member><type>uint32_t</type>                             <name>aspect_ratio_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>overscan_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>overscan_appropriate_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>video_signal_type_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>video_full_range_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>color_description_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>chroma_loc_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>timing_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>fixed_frame_rate_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>bitstream_restriction_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>nal_hrd_parameters_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vcl_hrd_parameters_present_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH264HrdParameters" comment="hrd_parameters">
+            <member><type>uint8_t</type>                              <name>cpb_cnt_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>bit_rate_scale</name></member>
+            <member><type>uint8_t</type>                              <name>cpb_size_scale</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint32_t</type>                             <name>bit_rate_value_minus1</name>[<enum>STD_VIDEO_H264_CPB_CNT_LIST_SIZE</enum>]<comment>cpb_cnt_minus1 number of valid elements</comment></member>
+            <member><type>uint32_t</type>                             <name>cpb_size_value_minus1</name>[<enum>STD_VIDEO_H264_CPB_CNT_LIST_SIZE</enum>]<comment>cpb_cnt_minus1 number of valid elements</comment></member>
+            <member><type>uint8_t</type>                              <name>cbr_flag</name>[<enum>STD_VIDEO_H264_CPB_CNT_LIST_SIZE</enum>]<comment>cpb_cnt_minus1 number of valid elements</comment></member>
+            <member><type>uint32_t</type>                             <name>initial_cpb_removal_delay_length_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>cpb_removal_delay_length_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>dpb_output_delay_length_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>time_offset_length</name></member>
+        </type>
+        <type category="struct" name="StdVideoH264SequenceParameterSetVui">
+            <member><type>StdVideoH264SpsVuiFlags</type>              <name>flags</name></member>
+            <member><type>StdVideoH264AspectRatioIdc</type>           <name>aspect_ratio_idc</name></member>
+            <member><type>uint16_t</type>                             <name>sar_width</name></member>
+            <member><type>uint16_t</type>                             <name>sar_height</name></member>
+            <member><type>uint8_t</type>                              <name>video_format</name></member>
+            <member><type>uint8_t</type>                              <name>colour_primaries</name></member>
+            <member><type>uint8_t</type>                              <name>transfer_characteristics</name></member>
+            <member><type>uint8_t</type>                              <name>matrix_coefficients</name></member>
+            <member><type>uint32_t</type>                             <name>num_units_in_tick</name></member>
+            <member><type>uint32_t</type>                             <name>time_scale</name></member>
+            <member><type>uint8_t</type>                              <name>max_num_reorder_frames</name></member>
+            <member><type>uint8_t</type>                              <name>max_dec_frame_buffering</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_sample_loc_type_top_field</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_sample_loc_type_bottom_field</name></member>
+            <member><type>uint32_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoH264HrdParameters</type>*     <name>pHrdParameters</name><comment>must be a valid ptr to hrd_parameters, if nal_hrd_parameters_present_flag or vcl_hrd_parameters_present_flag are set</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH264SpsFlags">
+            <member><type>uint32_t</type>                             <name>constraint_set0_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constraint_set1_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constraint_set2_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constraint_set3_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constraint_set4_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constraint_set5_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>direct_8x8_inference_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>mb_adaptive_frame_field_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>frame_mbs_only_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>delta_pic_order_always_zero_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>separate_colour_plane_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>gaps_in_frame_num_value_allowed_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>qpprime_y_zero_transform_bypass_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>frame_cropping_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>seq_scaling_matrix_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vui_parameters_present_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH264ScalingLists">
+            <comment>
+                scaling_list_present_mask has one bit for each
+                seq_scaling_list_present_flag[i] for SPS OR
+                pic_scaling_list_present_flag[i] for PPS,
+                bit 0 - 5 are for each entry of ScalingList4x4
+                bit 6 - 11 are for each entry plus 6 for ScalingList8x8
+            </comment>
+            <member><type>uint16_t</type>                             <name>scaling_list_present_mask</name></member>
+            <comment>
+                use_default_scaling_matrix_mask has one bit for each
+                UseDefaultScalingMatrix4x4Flag[ i ] and
+                UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS
+                bit 0 - 5 are for each entry of ScalingList4x4
+                bit 6 - 11 are for each entry plus 6 for ScalingList8x8
+            </comment>
+            <member><type>uint16_t</type>                             <name>use_default_scaling_matrix_mask</name></member>
+            <member><type>uint8_t</type>                              <name>ScalingList4x4</name>[<enum>STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS</enum>][<enum>STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS</enum>]</member>
+            <member><type>uint8_t</type>                              <name>ScalingList8x8</name>[<enum>STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS</enum>][<enum>STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS</enum>]</member>
+        </type>
+        <type category="struct" name="StdVideoH264SequenceParameterSet">
+            <member><type>StdVideoH264SpsFlags</type>                 <name>flags</name></member>
+            <member><type>StdVideoH264ProfileIdc</type>               <name>profile_idc</name></member>
+            <member><type>StdVideoH264LevelIdc</type>                 <name>level_idc</name></member>
+            <member><type>StdVideoH264ChromaFormatIdc</type>          <name>chroma_format_idc</name></member>
+            <member><type>uint8_t</type>                              <name>seq_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>bit_depth_luma_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>bit_depth_chroma_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>log2_max_frame_num_minus4</name></member>
+            <member><type>StdVideoH264PocType</type>                  <name>pic_order_cnt_type</name></member>
+            <member><type>int32_t</type>                              <name>offset_for_non_ref_pic</name></member>
+            <member><type>int32_t</type>                              <name>offset_for_top_to_bottom_field</name></member>
+            <member><type>uint8_t</type>                              <name>log2_max_pic_order_cnt_lsb_minus4</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_frames_in_pic_order_cnt_cycle</name></member>
+            <member><type>uint8_t</type>                              <name>max_num_ref_frames</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint32_t</type>                             <name>pic_width_in_mbs_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>pic_height_in_map_units_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>frame_crop_left_offset</name></member>
+            <member><type>uint32_t</type>                             <name>frame_crop_right_offset</name></member>
+            <member><type>uint32_t</type>                             <name>frame_crop_top_offset</name></member>
+            <member><type>uint32_t</type>                             <name>frame_crop_bottom_offset</name></member>
+            <member><type>uint32_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <comment>
+                pOffsetForRefFrame is a pointer representing the offset_for_ref_frame array with num_ref_frames_in_pic_order_cnt_cycle number of elements.
+                If pOffsetForRefFrame has nullptr value, then num_ref_frames_in_pic_order_cnt_cycle must also be "0".
+            </comment>
+            <member>const <type>int32_t</type>*                             <name>pOffsetForRefFrame</name></member>
+            <member>const <type>StdVideoH264ScalingLists</type>*            <name>pScalingLists</name><comment>Must be a valid pointer if seq_scaling_matrix_present_flag is set</comment></member>
+            <member>const <type>StdVideoH264SequenceParameterSetVui</type>* <name>pSequenceParameterSetVui</name><comment>Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH264PpsFlags">
+            <member><type>uint32_t</type>                             <name>transform_8x8_mode_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>redundant_pic_cnt_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constrained_intra_pred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>deblocking_filter_control_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>weighted_pred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>bottom_field_pic_order_in_frame_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>entropy_coding_mode_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pic_scaling_matrix_present_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH264PictureParameterSet">
+            <member><type>StdVideoH264PpsFlags</type>                 <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>seq_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>pic_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l0_default_active_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l1_default_active_minus1</name></member>
+            <member><type>StdVideoH264WeightedBipredIdc</type>        <name>weighted_bipred_idc</name></member>
+            <member><type>int8_t</type>                               <name>pic_init_qp_minus26</name></member>
+            <member><type>int8_t</type>                               <name>pic_init_qs_minus26</name></member>
+            <member><type>int8_t</type>                               <name>chroma_qp_index_offset</name></member>
+            <member><type>int8_t</type>                               <name>second_chroma_qp_index_offset</name></member>
+            <member>const <type>StdVideoH264ScalingLists</type>*      <name>pScalingLists</name><comment>Must be a valid pointer if StdVideoH264PpsFlags::pic_scaling_matrix_present_flag is set.</comment></member>
+        </type>
+
+            <!-- vulkan_video_codec_h264std_decode.h enumerated types -->
+        <type name="StdVideoDecodeH264FieldOrderCount" category="enum"/>
+
+            <!-- vulkan_video_codec_h264std_decode.h structs -->
+        <type category="struct" name="StdVideoDecodeH264PictureInfoFlags">
+            <member><type>uint32_t</type>                             <name>field_pic_flag</name> : 1<comment>Is field picture</comment></member>
+            <member><type>uint32_t</type>                             <name>is_intra</name> : 1<comment>Is intra picture</comment></member>
+            <member><type>uint32_t</type>                             <name>IdrPicFlag</name> : 1<comment>instantaneous decoding refresh (IDR) picture</comment></member>
+            <member><type>uint32_t</type>                             <name>bottom_field_flag</name> : 1<comment>bottom (true) or top (false) field if field_pic_flag is set.</comment></member>
+            <member><type>uint32_t</type>                             <name>is_reference</name> : 1<comment>This only applies to picture info, and not to the DPB lists.</comment></member>
+            <member><type>uint32_t</type>                             <name>complementary_field_pair</name> : 1<comment>complementary field pair, complementary non-reference field pair, complementary reference field pair</comment></member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH264PictureInfo" requires="StdVideoDecodeH264FieldOrderCount" comment="requires tag is for PicOrderCnt, which needs the enum type">
+            <member><type>StdVideoDecodeH264PictureInfoFlags</type>   <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>seq_parameter_set_id</name><comment>Selecting SPS id from the Sequence Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pic_parameter_set_id</name><comment>Selecting PPS id from the Picture Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint16_t</type>                             <name>frame_num</name><comment>7.4.3 Slice header semantics</comment></member>
+            <member><type>uint16_t</type>                             <name>idr_pic_id</name><comment>7.4.3 Slice header semantics</comment></member>
+            <comment>
+                PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2
+            </comment>
+            <member><type>int32_t</type>                              <name>PicOrderCnt</name>[<enum>STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE</enum>]<comment>TopFieldOrderCnt and BottomFieldOrderCnt fields.</comment></member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH264ReferenceInfoFlags">
+            <member><type>uint32_t</type>                             <name>top_field_flag</name> : 1<comment>Reference is used for top field reference.</comment></member>
+            <member><type>uint32_t</type>                             <name>bottom_field_flag</name> : 1<comment>Reference is used for bottom field reference.</comment></member>
+            <member><type>uint32_t</type>                             <name>used_for_long_term_reference</name> : 1<comment>A picture that is marked as "used for long-term reference", derived binary value from clause 8.2.5.1 Sequence of operations for decoded reference picture marking process</comment></member>
+            <member><type>uint32_t</type>                             <name>is_non_existing</name> : 1<comment>Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num</comment></member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH264ReferenceInfo">
+            <member><type>StdVideoDecodeH264ReferenceInfoFlags</type> <name>flags</name></member>
+            <comment>
+                FrameNum = used_for_long_term_reference ?  long_term_frame_idx : frame_num
+            </comment>
+            <member><type>uint16_t</type>                             <name>FrameNum</name><comment>7.4.3.3 Decoded reference picture marking semantics</comment></member>
+            <member><type>uint16_t</type>                             <name>reserved</name><comment>for structure members 32-bit packing/alignment</comment></member>
+            <member><type>int32_t</type>                              <name>PicOrderCnt</name>[<enum>STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE</enum>]<comment>TopFieldOrderCnt and BottomFieldOrderCnt fields.</comment></member>
+        </type>
+
+            <!-- vulkan_video_codec_h264std_encode.h structs -->
+        <type category="struct" name="StdVideoEncodeH264WeightTableFlags">
+            <member><type>uint32_t</type> <name>luma_weight_l0_flag</name><comment>each bit n represents the nth entry in reference list l0, n &lt;= num_ref_idx_l0_active_minus1</comment></member>
+            <member><type>uint32_t</type> <name>chroma_weight_l0_flag</name><comment>each bit n represents the nth entry in reference list l0, n &lt;= num_ref_idx_l0_active_minus1</comment></member>
+            <member><type>uint32_t</type> <name>luma_weight_l1_flag</name><comment>each bit n represents the nth entry in reference list l1, n &lt;= num_ref_idx_l1_active_minus1</comment></member>
+            <member><type>uint32_t</type> <name>chroma_weight_l1_flag</name><comment>each bit n represents the nth entry in reference list l1, n &lt;= num_ref_idx_l1_active_minus1</comment></member>
+        </type>
+
+       <type category="struct" name="StdVideoEncodeH264WeightTable">
+            <comment>
+                StdVideoEncodeH264WeightTable corresponds to the values produced by pred_weight_table() for the h.264 specification.
+                For details, refer to weighted_pred_flag, weighted_bipred_idc, pre_pred_weight_table_src and pred_weight_table().
+            </comment>
+            <member><type>StdVideoEncodeH264WeightTableFlags</type> <name>flags</name><comment></comment></member>
+            <member><type>uint8_t</type>                            <name>luma_log2_weight_denom</name><comment></comment></member>
+            <member><type>uint8_t</type>                            <name>chroma_log2_weight_denom</name><comment></comment></member>
+            <member><type>int8_t</type>                             <name>luma_weight_l0</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>]<comment>valid entry range is [0, num_ref_idx_l0_active_minus1]</comment></member>
+            <member><type>int8_t</type>                             <name>luma_offset_l0</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>]<comment>valid entry range is [0, num_ref_idx_l0_active_minus1]</comment></member>
+            <member><type>int8_t</type>                             <name>chroma_weight_l0</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H264_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                             <name>chroma_offset_l0</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H264_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                             <name>luma_weight_l1</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>]<comment>valid entry range is [0, num_ref_idx_l1_active_minus1]</comment></member>
+            <member><type>int8_t</type>                             <name>luma_offset_l1</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>]<comment>valid entry range is [0, num_ref_idx_l1_active_minus1]</comment></member>
+            <member><type>int8_t</type>                             <name>chroma_weight_l1</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H264_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                             <name>chroma_offset_l1</name>[<enum>STD_VIDEO_H264_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H264_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+        </type>
+
+        <type category="struct" name="StdVideoEncodeH264SliceHeaderFlags">
+            <member><type>uint32_t</type>                             <name>direct_spatial_mv_pred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>num_ref_idx_active_override_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 30</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264PictureInfoFlags">
+            <member><type>uint32_t</type>                             <name>IdrPicFlag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>is_reference</name> : 1<comment>A reference picture, i.e. a picture with nal_ref_idc not equal to 0, as defined in clause 3.136</comment></member>
+            <member><type>uint32_t</type>                             <name>no_output_of_prior_pics_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>long_term_reference_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>adaptive_ref_pic_marking_mode_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 27</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264ReferenceInfoFlags">
+            <member><type>uint32_t</type>                             <name>used_for_long_term_reference</name> : 1<comment>A picture that is marked as "used for long-term reference", derived binary value from clause 8.2.5.1 Sequence of operations for decoded reference picture marking process</comment></member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 31</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264ReferenceListsInfoFlags">
+            <member><type>uint32_t</type>                             <name>ref_pic_list_modification_flag_l0</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>ref_pic_list_modification_flag_l1</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 30</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264RefListModEntry">
+            <member><type>StdVideoH264ModificationOfPicNumsIdc</type> <name>modification_of_pic_nums_idc</name></member>
+            <member><type>uint16_t</type>                             <name>abs_diff_pic_num_minus1</name></member>
+            <member><type>uint16_t</type>                             <name>long_term_pic_num</name></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264RefPicMarkingEntry">
+            <member><type>StdVideoH264MemMgmtControlOp</type>         <name>memory_management_control_operation</name></member>
+            <member><type>uint16_t</type>                             <name>difference_of_pic_nums_minus1</name></member>
+            <member><type>uint16_t</type>                             <name>long_term_pic_num</name></member>
+            <member><type>uint16_t</type>                             <name>long_term_frame_idx</name></member>
+            <member><type>uint16_t</type>                             <name>max_long_term_frame_idx_plus1</name></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264ReferenceListsInfo">
+            <member><type>StdVideoEncodeH264ReferenceListsInfoFlags</type>   <name>flags</name></member>
+            <member><type>uint8_t</type>                                     <name>num_ref_idx_l0_active_minus1</name></member>
+            <member><type>uint8_t</type>                                     <name>num_ref_idx_l1_active_minus1</name></member>
+            <member><type>uint8_t</type>                                     <name>RefPicList0</name>[STD_VIDEO_H264_MAX_NUM_LIST_REF]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H264_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                                     <name>RefPicList1</name>[STD_VIDEO_H264_MAX_NUM_LIST_REF]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H264_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                                     <name>refList0ModOpCount</name></member>
+            <member><type>uint8_t</type>                                     <name>refList1ModOpCount</name></member>
+            <member><type>uint8_t</type>                                     <name>refPicMarkingOpCount</name></member>
+            <member><type>uint8_t</type>                                     <name>reserved1</name>[7]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoEncodeH264RefListModEntry</type>*    <name>pRefList0ModOperations</name><comment>Must be a valid pointer to an array with size refList0ModOpCount if ref_pic_list_modification_flag_l0 is set and contains the RefList0 modification parameters as defined in section 7.4.3.1</comment></member>
+            <member>const <type>StdVideoEncodeH264RefListModEntry</type>*    <name>pRefList1ModOperations</name><comment>Must be a valid pointer to an array with size refList1ModOpCount if ref_pic_list_modification_flag_l1 is set and contains the RefList1 modification parameters as defined in section 7.4.3.1</comment></member>
+            <member>const <type>StdVideoEncodeH264RefPicMarkingEntry</type>* <name>pRefPicMarkingOperations</name><comment>Must be a valid pointer to an array with size refPicMarkingOpCount and contains the reference picture markings as defined in section 7.4.3.3</comment></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264PictureInfo">
+            <member><type>StdVideoEncodeH264PictureInfoFlags</type>   <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>seq_parameter_set_id</name><comment>Selecting SPS id from the Sequence Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pic_parameter_set_id</name><comment>Selecting PPS from the Picture Parameters for all StdVideoEncodeH264SliceHeader(s)</comment></member>
+            <member><type>uint16_t</type>                             <name>idr_pic_id</name></member>
+            <member><type>StdVideoH264PictureType</type>              <name>primary_pic_type</name></member>
+            <member><type>uint32_t</type>                             <name>frame_num</name></member>
+            <member><type>int32_t</type>                              <name>PicOrderCnt</name><comment>Picture order count, as defined in 8.2</comment></member>
+            <member><type>uint8_t</type>                              <name>temporal_id</name><comment>Temporal identifier of the picture, as defined in G.7.3.1.1 / G.7.4.1.1</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name>[3]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoEncodeH264ReferenceListsInfo</type>* <name>pRefLists</name></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264ReferenceInfo">
+            <member><type>StdVideoEncodeH264ReferenceInfoFlags</type> <name>flags</name></member>
+            <member><type>StdVideoH264PictureType</type>              <name>primary_pic_type</name></member>
+            <member><type>uint32_t</type>                             <name>FrameNum</name><comment>Frame number, as defined in 8.2</comment></member>
+            <member><type>int32_t</type>                              <name>PicOrderCnt</name><comment>Picture order count, as defined in 8.2</comment></member>
+            <member><type>uint16_t</type>                             <name>long_term_pic_num</name></member>
+            <member><type>uint16_t</type>                             <name>long_term_frame_idx</name></member>
+            <member><type>uint8_t</type>                              <name>temporal_id</name><comment>Temporal identifier of the picture, as defined in G.7.3.1.1 / G.7.4.1.1</comment></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH264SliceHeader">
+            <member><type>StdVideoEncodeH264SliceHeaderFlags</type>   <name>flags</name></member>
+            <member><type>uint32_t</type>                             <name>first_mb_in_slice</name></member>
+            <member><type>StdVideoH264SliceType</type>                <name>slice_type</name></member>
+            <member><type>int8_t</type>                               <name>slice_alpha_c0_offset_div2</name></member>
+            <member><type>int8_t</type>                               <name>slice_beta_offset_div2</name></member>
+            <member><type>int8_t</type>                               <name>slice_qp_delta</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>StdVideoH264CabacInitIdc</type>             <name>cabac_init_idc</name></member>
+            <member><type>StdVideoH264DisableDeblockingFilterIdc</type> <name>disable_deblocking_filter_idc</name></member>
+            <member>const <type>StdVideoEncodeH264WeightTable</type>* <name>pWeightTable</name><comment></comment></member>
+        </type>
+
+            <!-- vulkan_video_codec_h265std.h enumerated types -->
+        <type name="StdVideoH265ChromaFormatIdc" category="enum"/>
+        <type name="StdVideoH265ProfileIdc" category="enum"/>
+        <type name="StdVideoH265LevelIdc" category="enum"/>
+        <type name="StdVideoH265SliceType" category="enum"/>
+        <type name="StdVideoH265PictureType" category="enum"/>
+        <type name="StdVideoH265AspectRatioIdc" category="enum"/>
+
+            <!-- vulkan_video_codec_h265std.h structs -->
+        <type category="struct" name="StdVideoH265ProfileTierLevelFlags">
+            <member><type>uint32_t</type>                             <name>general_tier_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>general_progressive_source_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>general_interlaced_source_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>general_non_packed_constraint_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>general_frame_only_constraint_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265ProfileTierLevel" comment="profile_tier_level">
+            <member><type>StdVideoH265ProfileTierLevelFlags</type>    <name>flags</name></member>
+            <member><type>StdVideoH265ProfileIdc</type>               <name>general_profile_idc</name></member>
+            <member><type>StdVideoH265LevelIdc</type>                 <name>general_level_idc</name></member>
+        </type>
+        <type category="struct" name="StdVideoH265DecPicBufMgr" comment="sps_ or vps_ parameters, based on if the StdVideoH265DecPicBufMgr is used within the StdVideoH265SequenceParameterSet or StdVideoH265VideoParameterSet">
+            <member><type>uint32_t</type>                             <name>max_latency_increase_plus1</name>[<enum>STD_VIDEO_H265_SUBLAYERS_LIST_SIZE</enum>]<comment>represents sps_max_latency_increase_plus1 or vps_max_latency_increase_plus1</comment></member>
+            <member><type>uint8_t</type>                              <name>max_dec_pic_buffering_minus1</name>[<enum>STD_VIDEO_H265_SUBLAYERS_LIST_SIZE</enum>]<comment>represents sps_max_dec_pic_buffering_minus1 or vps_max_dec_pic_buffering_minus1</comment></member>
+            <member><type>uint8_t</type>                              <name>max_num_reorder_pics</name>[<enum>STD_VIDEO_H265_SUBLAYERS_LIST_SIZE</enum>]<comment>represents sps_max_num_reorder_pics or vps_max_num_reorder_pics</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265SubLayerHrdParameters" comment="sub_layer_hrd_parameters">
+            <member><type>uint32_t</type>                             <name>bit_rate_value_minus1</name>[<enum>STD_VIDEO_H265_CPB_CNT_LIST_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                             <name>cpb_size_value_minus1</name>[<enum>STD_VIDEO_H265_CPB_CNT_LIST_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                             <name>cpb_size_du_value_minus1</name>[<enum>STD_VIDEO_H265_CPB_CNT_LIST_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                             <name>bit_rate_du_value_minus1</name>[<enum>STD_VIDEO_H265_CPB_CNT_LIST_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                             <name>cbr_flag</name><comment>each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265HrdFlags">
+            <member><type>uint32_t</type>                             <name>nal_hrd_parameters_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vcl_hrd_parameters_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sub_pic_hrd_params_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sub_pic_cpb_params_in_pic_timing_sei_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>fixed_pic_rate_general_flag</name> : 8<comment>each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1</comment></member>
+            <member><type>uint32_t</type>                             <name>fixed_pic_rate_within_cvs_flag</name> : 8<comment>each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1</comment></member>
+            <member><type>uint32_t</type>                             <name>low_delay_hrd_flag</name> : 8<comment>each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265HrdParameters">
+            <member><type>StdVideoH265HrdFlags</type>                       <name>flags</name></member>
+            <member><type>uint8_t</type>                                    <name>tick_divisor_minus2</name></member>
+            <member><type>uint8_t</type>                                    <name>du_cpb_removal_delay_increment_length_minus1</name></member>
+            <member><type>uint8_t</type>                                    <name>dpb_output_delay_du_length_minus1</name></member>
+            <member><type>uint8_t</type>                                    <name>bit_rate_scale</name></member>
+            <member><type>uint8_t</type>                                    <name>cpb_size_scale</name></member>
+            <member><type>uint8_t</type>                                    <name>cpb_size_du_scale</name></member>
+            <member><type>uint8_t</type>                                    <name>initial_cpb_removal_delay_length_minus1</name></member>
+            <member><type>uint8_t</type>                                    <name>au_cpb_removal_delay_length_minus1</name></member>
+            <member><type>uint8_t</type>                                    <name>dpb_output_delay_length_minus1</name></member>
+            <member><type>uint8_t</type>                                    <name>cpb_cnt_minus1</name>[<enum>STD_VIDEO_H265_SUBLAYERS_LIST_SIZE</enum>]</member>
+            <member><type>uint16_t</type>                                   <name>elemental_duration_in_tc_minus1</name>[<enum>STD_VIDEO_H265_SUBLAYERS_LIST_SIZE</enum>]</member>
+            <member><type>uint16_t</type>                                   <name>reserved</name>[3]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoH265SubLayerHrdParameters</type>*   <name>pSubLayerHrdParametersNal</name><comment>if flags.nal_hrd_parameters_present_flag is set, then this must be a ptr to an array of StdVideoH265SubLayerHrdParameters with a size specified by sps_max_sub_layers_minus1 + 1 or vps_max_sub_layers_minus1 + 1, depending on whether the HRD parameters are part of the SPS or VPS, respectively.</comment></member>
+            <member>const <type>StdVideoH265SubLayerHrdParameters</type>*   <name>pSubLayerHrdParametersVcl</name><comment>if flags.vcl_hrd_parameters_present_flag is set, then this must be a ptr to an array of StdVideoH265SubLayerHrdParameters with a size specified by sps_max_sub_layers_minus1 + 1 or vps_max_sub_layers_minus1 + 1, depending on whether the HRD parameters are part of the SPS or VPS, respectively.</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265VpsFlags">
+            <member><type>uint32_t</type>                             <name>vps_temporal_id_nesting_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vps_sub_layer_ordering_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vps_timing_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vps_poc_proportional_to_timing_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265VideoParameterSet">
+            <member><type>StdVideoH265VpsFlags</type>                 <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>vps_video_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>vps_max_sub_layers_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint32_t</type>                             <name>vps_num_units_in_tick</name></member>
+            <member><type>uint32_t</type>                             <name>vps_time_scale</name></member>
+            <member><type>uint32_t</type>                             <name>vps_num_ticks_poc_diff_one_minus1</name></member>
+            <member><type>uint32_t</type>                             <name>reserved3</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoH265DecPicBufMgr</type>*      <name>pDecPicBufMgr</name></member>
+            <member>const <type>StdVideoH265HrdParameters</type>*     <name>pHrdParameters</name></member>
+            <member>const <type>StdVideoH265ProfileTierLevel</type>*  <name>pProfileTierLevel</name></member>
+        </type>
+        <type category="struct" name="StdVideoH265ScalingLists">
+            <member><type>uint8_t</type>                              <name>ScalingList4x4</name>[<enum>STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS</enum>][<enum>STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS</enum>]<comment>ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)</comment></member>
+            <member><type>uint8_t</type>                              <name>ScalingList8x8</name>[<enum>STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS</enum>][<enum>STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS</enum>]<comment>ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)</comment></member>
+            <member><type>uint8_t</type>                              <name>ScalingList16x16</name>[<enum>STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS</enum>][<enum>STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS</enum>]<comment>ScalingList[ 2 ][ Matri]xID ][ i ] (sizeID = 2)</comment></member>
+            <member><type>uint8_t</type>                              <name>ScalingList32x32</name>[<enum>STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS</enum>][<enum>STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS</enum>]<comment>ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)</comment></member>
+            <member><type>uint8_t</type>                              <name>ScalingListDCCoef16x16</name>[<enum>STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS</enum>]<comment>scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2</comment></member>
+            <member><type>uint8_t</type>                              <name>ScalingListDCCoef32x32</name>[<enum>STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS</enum>]<comment>scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265ShortTermRefPicSetFlags">
+            <member><type>uint32_t</type>                             <name>inter_ref_pic_set_prediction_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>delta_rps_sign</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265ShortTermRefPicSet">
+            <member><type>StdVideoH265ShortTermRefPicSetFlags</type>  <name>flags</name></member>
+            <member><type>uint32_t</type>                             <name>delta_idx_minus1</name></member>
+            <member><type>uint16_t</type>                             <name>use_delta_flag</name><comment>each bit represents a use_delta_flag[j] syntax</comment></member>
+            <member><type>uint16_t</type>                             <name>abs_delta_rps_minus1</name></member>
+            <member><type>uint16_t</type>                             <name>used_by_curr_pic_flag</name><comment>each bit represents a used_by_curr_pic_flag[j] syntax</comment></member>
+            <member><type>uint16_t</type>                             <name>used_by_curr_pic_s0_flag</name><comment>each bit represents a used_by_curr_pic_s0_flag[i] syntax</comment></member>
+            <member><type>uint16_t</type>                             <name>used_by_curr_pic_s1_flag</name><comment>each bit represents a used_by_curr_pic_s1_flag[i] syntax</comment></member>
+            <member><type>uint16_t</type>                             <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved3</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>num_negative_pics</name></member>
+            <member><type>uint8_t</type>                              <name>num_positive_pics</name></member>
+            <member><type>uint16_t</type>                             <name>delta_poc_s0_minus1</name>[<enum>STD_VIDEO_H265_MAX_DPB_SIZE</enum>]</member>
+            <member><type>uint16_t</type>                             <name>delta_poc_s1_minus1</name>[<enum>STD_VIDEO_H265_MAX_DPB_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="StdVideoH265LongTermRefPicsSps">
+            <member><type>uint32_t</type>                             <name>used_by_curr_pic_lt_sps_flag</name><comment>each bit represents a used_by_curr_pic_lt_sps_flag[i] syntax</comment></member>
+            <member><type>uint32_t</type>                             <name>lt_ref_pic_poc_lsb_sps</name>[<enum>STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS</enum>]</member>
+        </type>
+        <type category="struct" name="StdVideoH265SpsVuiFlags">
+            <member><type>uint32_t</type>                             <name>aspect_ratio_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>overscan_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>overscan_appropriate_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>video_signal_type_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>video_full_range_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>colour_description_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>chroma_loc_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>neutral_chroma_indication_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>field_seq_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>frame_field_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>default_display_window_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vui_timing_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vui_poc_proportional_to_timing_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vui_hrd_parameters_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>bitstream_restriction_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>tiles_fixed_structure_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>motion_vectors_over_pic_boundaries_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>restricted_ref_pic_lists_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265SequenceParameterSetVui">
+            <member><type>StdVideoH265SpsVuiFlags</type>              <name>flags</name></member>
+            <member><type>StdVideoH265AspectRatioIdc</type>           <name>aspect_ratio_idc</name></member>
+            <member><type>uint16_t</type>                             <name>sar_width</name></member>
+            <member><type>uint16_t</type>                             <name>sar_height</name></member>
+            <member><type>uint8_t</type>                              <name>video_format</name></member>
+            <member><type>uint8_t</type>                              <name>colour_primaries</name></member>
+            <member><type>uint8_t</type>                              <name>transfer_characteristics</name></member>
+            <member><type>uint8_t</type>                              <name>matrix_coeffs</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_sample_loc_type_top_field</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_sample_loc_type_bottom_field</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint16_t</type>                             <name>def_disp_win_left_offset</name></member>
+            <member><type>uint16_t</type>                             <name>def_disp_win_right_offset</name></member>
+            <member><type>uint16_t</type>                             <name>def_disp_win_top_offset</name></member>
+            <member><type>uint16_t</type>                             <name>def_disp_win_bottom_offset</name></member>
+            <member><type>uint32_t</type>                             <name>vui_num_units_in_tick</name></member>
+            <member><type>uint32_t</type>                             <name>vui_time_scale</name></member>
+            <member><type>uint32_t</type>                             <name>vui_num_ticks_poc_diff_one_minus1</name></member>
+            <member><type>uint16_t</type>                             <name>min_spatial_segmentation_idc</name></member>
+            <member><type>uint16_t</type>                             <name>reserved3</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>max_bytes_per_pic_denom</name></member>
+            <member><type>uint8_t</type>                              <name>max_bits_per_min_cu_denom</name></member>
+            <member><type>uint8_t</type>                              <name>log2_max_mv_length_horizontal</name></member>
+            <member><type>uint8_t</type>                              <name>log2_max_mv_length_vertical</name></member>
+            <member>const <type>StdVideoH265HrdParameters</type>*     <name>pHrdParameters</name></member>
+        </type>
+        <type category="struct" name="StdVideoH265PredictorPaletteEntries">
+            <member><type>uint16_t</type>                             <name>PredictorPaletteEntries</name>[<enum>STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE</enum>][<enum>STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="StdVideoH265SpsFlags">
+            <member><type>uint32_t</type>                             <name>sps_temporal_id_nesting_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>separate_colour_plane_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>conformance_window_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_sub_layer_ordering_info_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>scaling_list_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_scaling_list_data_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>amp_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sample_adaptive_offset_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pcm_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pcm_loop_filter_disabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>long_term_ref_pics_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_temporal_mvp_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>strong_intra_smoothing_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>vui_parameters_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_extension_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_range_extension_flag</name> : 1</member>
+            <comment>
+                extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+            </comment>
+            <member><type>uint32_t</type>                             <name>transform_skip_rotation_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>transform_skip_context_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>implicit_rdpcm_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>explicit_rdpcm_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>extended_precision_processing_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>intra_smoothing_disabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>high_precision_offsets_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>persistent_rice_adaptation_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>cabac_bypass_alignment_enabled_flag</name> : 1</member>
+            <comment>
+                extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+            </comment>
+            <member><type>uint32_t</type>                             <name>sps_scc_extension_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_curr_pic_ref_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>palette_mode_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sps_palette_predictor_initializers_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>intra_boundary_filtering_disabled_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265SequenceParameterSet">
+            <member><type>StdVideoH265SpsFlags</type>                 <name>flags</name></member>
+            <member><type>StdVideoH265ChromaFormatIdc</type>          <name>chroma_format_idc</name></member>
+            <member><type>uint32_t</type>                             <name>pic_width_in_luma_samples</name></member>
+            <member><type>uint32_t</type>                             <name>pic_height_in_luma_samples</name></member>
+            <member><type>uint8_t</type>                              <name>sps_video_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>sps_max_sub_layers_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>sps_seq_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>bit_depth_luma_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>bit_depth_chroma_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>log2_max_pic_order_cnt_lsb_minus4</name></member>
+            <member><type>uint8_t</type>                              <name>log2_min_luma_coding_block_size_minus3</name></member>
+            <member><type>uint8_t</type>                              <name>log2_diff_max_min_luma_coding_block_size</name></member>
+            <member><type>uint8_t</type>                              <name>log2_min_luma_transform_block_size_minus2</name></member>
+            <member><type>uint8_t</type>                              <name>log2_diff_max_min_luma_transform_block_size</name></member>
+            <member><type>uint8_t</type>                              <name>max_transform_hierarchy_depth_inter</name></member>
+            <member><type>uint8_t</type>                              <name>max_transform_hierarchy_depth_intra</name></member>
+            <member><type>uint8_t</type>                              <name>num_short_term_ref_pic_sets</name></member>
+            <member><type>uint8_t</type>                              <name>num_long_term_ref_pics_sps</name></member>
+            <member><type>uint8_t</type>                              <name>pcm_sample_bit_depth_luma_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>pcm_sample_bit_depth_chroma_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>log2_min_pcm_luma_coding_block_size_minus3</name></member>
+            <member><type>uint8_t</type>                              <name>log2_diff_max_min_pcm_luma_coding_block_size</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <comment>
+                Start extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+            </comment>
+            <member><type>uint8_t</type>                              <name>palette_max_size</name></member>
+            <member><type>uint8_t</type>                              <name>delta_palette_max_predictor_size</name></member>
+            <member><type>uint8_t</type>                              <name>motion_vector_resolution_control_idc</name></member>
+            <member><type>uint8_t</type>                              <name>sps_num_palette_predictor_initializers_minus1</name></member>
+            <comment>
+                End extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+            </comment>
+            <member><type>uint32_t</type>                             <name>conf_win_left_offset</name></member>
+            <member><type>uint32_t</type>                             <name>conf_win_right_offset</name></member>
+            <member><type>uint32_t</type>                             <name>conf_win_top_offset</name></member>
+            <member><type>uint32_t</type>                             <name>conf_win_bottom_offset</name></member>
+            <member>const <type>StdVideoH265ProfileTierLevel</type>*  <name>pProfileTierLevel</name></member>
+            <member>const <type>StdVideoH265DecPicBufMgr</type>*      <name>pDecPicBufMgr</name></member>
+            <member>const <type>StdVideoH265ScalingLists</type>*      <name>pScalingLists</name><comment>Must be a valid pointer if sps_scaling_list_data_present_flag is set</comment></member>
+            <member>const <type>StdVideoH265ShortTermRefPicSet</type>*      <name>pShortTermRefPicSet</name><comment>Must be a valid pointer to an array with size num_short_term_ref_pic_sets if num_short_term_ref_pic_sets is not 0.</comment></member>
+            <member>const <type>StdVideoH265LongTermRefPicsSps</type>*      <name>pLongTermRefPicsSps</name><comment>Must be a valid pointer if long_term_ref_pics_present_flag is set</comment></member>
+            <member>const <type>StdVideoH265SequenceParameterSetVui</type>* <name>pSequenceParameterSetVui</name><comment>Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size</comment></member>
+            <member>const <type>StdVideoH265PredictorPaletteEntries</type>* <name>pPredictorPaletteEntries</name><comment>Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set</comment></member>
+        </type>
+        <type category="struct" name="StdVideoH265PpsFlags">
+            <member><type>uint32_t</type>                             <name>dependent_slice_segments_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>output_flag_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>sign_data_hiding_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>cabac_init_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>constrained_intra_pred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>transform_skip_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>cu_qp_delta_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_slice_chroma_qp_offsets_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>weighted_pred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>weighted_bipred_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>transquant_bypass_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>tiles_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>entropy_coding_sync_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>uniform_spacing_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>loop_filter_across_tiles_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_loop_filter_across_slices_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>deblocking_filter_control_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>deblocking_filter_override_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_deblocking_filter_disabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_scaling_list_data_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>lists_modification_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>slice_segment_header_extension_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_extension_present_flag</name> : 1</member>
+            <comment>
+                extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+            </comment>
+            <member><type>uint32_t</type>                             <name>cross_component_prediction_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>chroma_qp_offset_list_enabled_flag</name> : 1</member>
+            <comment>
+                extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+            </comment>
+            <member><type>uint32_t</type>                             <name>pps_curr_pic_ref_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>residual_adaptive_colour_transform_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_slice_act_qp_offsets_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_palette_predictor_initializers_present_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>monochrome_palette_flag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>pps_range_extension_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoH265PictureParameterSet">
+            <member><type>StdVideoH265PpsFlags</type>                 <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>pps_pic_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>pps_seq_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>sps_video_parameter_set_id</name></member>
+            <member><type>uint8_t</type>                              <name>num_extra_slice_header_bits</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l0_default_active_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l1_default_active_minus1</name></member>
+            <member><type>int8_t</type>                               <name>init_qp_minus26</name></member>
+            <member><type>uint8_t</type>                              <name>diff_cu_qp_delta_depth</name></member>
+            <member><type>int8_t</type>                               <name>pps_cb_qp_offset</name></member>
+            <member><type>int8_t</type>                               <name>pps_cr_qp_offset</name></member>
+            <member><type>int8_t</type>                               <name>pps_beta_offset_div2</name></member>
+            <member><type>int8_t</type>                               <name>pps_tc_offset_div2</name></member>
+            <member><type>uint8_t</type>                              <name>log2_parallel_merge_level_minus2</name></member>
+            <comment>
+                extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+            </comment>
+            <member><type>uint8_t</type>                              <name>log2_max_transform_skip_block_size_minus2</name></member>
+            <member><type>uint8_t</type>                              <name>diff_cu_chroma_qp_offset_depth</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_qp_offset_list_len_minus1</name></member>
+            <member><type>int8_t</type>                               <name>cb_qp_offset_list</name>[<enum>STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE</enum>]</member>
+            <member><type>int8_t</type>                               <name>cr_qp_offset_list</name>[<enum>STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE</enum>]</member>
+            <member><type>uint8_t</type>                              <name>log2_sao_offset_scale_luma</name></member>
+            <member><type>uint8_t</type>                              <name>log2_sao_offset_scale_chroma</name></member>
+            <comment>
+                extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+            </comment>
+            <member><type>int8_t</type>                               <name>pps_act_y_qp_offset_plus5</name></member>
+            <member><type>int8_t</type>                               <name>pps_act_cb_qp_offset_plus5</name></member>
+            <member><type>int8_t</type>                               <name>pps_act_cr_qp_offset_plus3</name></member>
+            <member><type>uint8_t</type>                              <name>pps_num_palette_predictor_initializers</name></member>
+            <member><type>uint8_t</type>                              <name>luma_bit_depth_entry_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>chroma_bit_depth_entry_minus8</name></member>
+            <member><type>uint8_t</type>                              <name>num_tile_columns_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>num_tile_rows_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved2</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member><type>uint16_t</type>                             <name>column_width_minus1</name>[<enum>STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE</enum>]</member>
+            <member><type>uint16_t</type>                             <name>row_height_minus1</name>[<enum>STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                             <name>reserved3</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoH265ScalingLists</type>*      <name>pScalingLists</name><comment>Must be a valid pointer if pps_scaling_list_data_present_flag is set</comment></member>
+            <member>const <type>StdVideoH265PredictorPaletteEntries</type>* <name>pPredictorPaletteEntries</name><comment>Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set</comment></member>
+        </type>
+
+            <!-- vulkan_video_codec_h265std_decode.h structs -->
+        <type category="struct" name="StdVideoDecodeH265PictureInfoFlags">
+            <member><type>uint32_t</type>                             <name>IrapPicFlag</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>IdrPicFlag</name>  : 1</member>
+            <member><type>uint32_t</type>                             <name>IsReference</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>short_term_ref_pic_set_sps_flag</name> : 1</member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH265PictureInfo">
+            <member><type>StdVideoDecodeH265PictureInfoFlags</type>   <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>sps_video_parameter_set_id</name><comment>Selecting VPS id from the Video Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pps_seq_parameter_set_id</name><comment>Selecting SPS id from the Sequence Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pps_pic_parameter_set_id</name><comment>Selecting PPS id from the Picture Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>NumDeltaPocsOfRefRpsIdx</name><comment>NumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0</comment></member>
+            <member><type>int32_t</type>                              <name>PicOrderCntVal</name></member>
+            <member><type>uint16_t</type>                             <name>NumBitsForSTRefPicSetInSlice</name><comment>number of bits used in st_ref_pic_set() when short_term_ref_pic_set_sps_flag is 0otherwise set to 0.</comment></member>
+            <member><type>uint16_t</type>                             <name>reserved</name></member>
+            <member><type>uint8_t</type>                              <name>RefPicSetStCurrBefore</name>[<enum>STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE</enum>]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                              <name>RefPicSetStCurrAfter</name>[<enum>STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE</enum>]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                              <name>RefPicSetLtCurr</name>[<enum>STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE</enum>]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE</comment></member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH265ReferenceInfoFlags">
+            <member><type>uint32_t</type>                             <name>used_for_long_term_reference</name> : 1<comment>A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set</comment></member>
+            <member><type>uint32_t</type>                             <name>unused_for_reference</name> : 1<comment>A picture that is marked as "unused for reference", derived binary value from clause 8.3.2 Decoding process for reference picture set</comment></member>
+        </type>
+        <type category="struct" name="StdVideoDecodeH265ReferenceInfo">
+            <member><type>StdVideoDecodeH265ReferenceInfoFlags</type> <name>flags</name></member>
+            <member><type>int32_t</type>                              <name>PicOrderCntVal</name></member>
+        </type>
+
+        <!-- vulkan_video_codec_h265std_encode.h structs -->
+        <type category="struct" name="StdVideoEncodeH265WeightTableFlags">
+            <member><type>uint16_t</type> <name>luma_weight_l0_flag</name><comment>each bit n represents the nth entry in reference list l0, n &lt;= num_ref_idx_l0_active_minus1</comment></member>
+            <member><type>uint16_t</type> <name>chroma_weight_l0_flag</name><comment>each bit n represents the nth entry in reference list l0, n &lt;= num_ref_idx_l0_active_minus1</comment></member>
+            <member><type>uint16_t</type> <name>luma_weight_l1_flag</name><comment>each bit n represents the nth entry in reference list l1, n &lt;= num_ref_idx_l1_active_minus1</comment></member>
+            <member><type>uint16_t</type> <name>chroma_weight_l1_flag</name><comment>each bit n represents the nth entry in reference list l1, n &lt;= num_ref_idx_l1_active_minus1</comment></member>
+        </type>
+
+        <type category="struct" name="StdVideoEncodeH265WeightTable">
+            <comment>
+                StdVideoEncodeH265WeightTable corresponds to the values produced by pred_weight_table() for the h.265 specification.
+                For details, refer to weighted_pred_flag, weighted_bipred_flag and pred_weight_table().
+            </comment>
+            <member><type>StdVideoEncodeH265WeightTableFlags</type>  <name>flags</name></member>
+            <member><type>uint8_t</type>                             <name>luma_log2_weight_denom</name><comment>[0, 7]</comment></member>
+            <member><type>int8_t</type>                              <name>delta_chroma_log2_weight_denom</name></member>
+            <member><type>int8_t</type>                              <name>delta_luma_weight_l0</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>]<comment>comment</comment></member>
+            <member><type>int8_t</type>                              <name>luma_offset_l0</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>]<comment>comment</comment></member>
+            <member><type>int8_t</type>                              <name>delta_chroma_weight_l0</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H265_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                              <name>delta_chroma_offset_l0</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H265_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                              <name>delta_luma_weight_l1</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>]<comment> </comment></member>
+            <member><type>int8_t</type>                              <name>luma_offset_l1</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>]<comment> </comment></member>
+            <member><type>int8_t</type>                              <name>delta_chroma_weight_l1</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H265_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+            <member><type>int8_t</type>                              <name>delta_chroma_offset_l1</name>[<enum>STD_VIDEO_H265_MAX_NUM_LIST_REF</enum>][<enum>STD_VIDEO_H265_MAX_CHROMA_PLANES</enum>]<comment>[i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr</comment></member>
+        </type>
+
+        <type category="struct" name="StdVideoEncodeH265LongTermRefPics">
+            <member><type>uint8_t</type>                              <name>num_long_term_sps</name></member>
+            <member><type>uint8_t</type>                              <name>num_long_term_pics</name></member>
+            <member><type>uint8_t</type>                              <name>lt_idx_sps</name>[<enum>STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS</enum>]</member>
+            <member><type>uint8_t</type>                              <name>poc_lsb_lt</name>[<enum>STD_VIDEO_H265_MAX_LONG_TERM_PICS</enum>]</member>
+            <member><type>uint16_t</type>                             <name>used_by_curr_pic_lt_flag</name><comment>each bit represents a used_by_curr_pic_lt_flag[i] syntax</comment></member>
+            <member><type>uint8_t</type>                              <name>delta_poc_msb_present_flag</name>[<enum>STD_VIDEO_H265_MAX_DELTA_POC</enum>]</member>
+            <member><type>uint8_t</type>                              <name>delta_poc_msb_cycle_lt</name>[<enum>STD_VIDEO_H265_MAX_DELTA_POC</enum>]</member>
+        </type>
+
+        <type category="struct" name="StdVideoEncodeH265SliceSegmentHeaderFlags">
+            <member><type>uint32_t</type>  <name>first_slice_segment_in_pic_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>dependent_slice_segment_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>slice_sao_luma_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>slice_sao_chroma_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>num_ref_idx_active_override_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>mvd_l1_zero_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>cabac_init_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>cu_chroma_qp_offset_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>deblocking_filter_override_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>slice_deblocking_filter_disabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>collocated_from_l0_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>slice_loop_filter_across_slices_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>reserved</name> : 20</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265SliceSegmentHeader">
+            <member><type>StdVideoEncodeH265SliceSegmentHeaderFlags</type>   <name>flags</name></member>
+            <member><type>StdVideoH265SliceType</type>                <name>slice_type</name></member>
+            <member><type>uint32_t</type>                             <name>slice_segment_address</name></member>
+            <member><type>uint8_t</type>                              <name>collocated_ref_idx</name></member>
+            <member><type>uint8_t</type>                              <name>MaxNumMergeCand</name></member>
+            <member><type>int8_t</type>                               <name>slice_cb_qp_offset</name><comment>[-12, 12]</comment></member>
+            <member><type>int8_t</type>                               <name>slice_cr_qp_offset</name><comment>[-12, 12]</comment></member>
+            <member><type>int8_t</type>                               <name>slice_beta_offset_div2</name><comment>[-6, 6]</comment></member>
+            <member><type>int8_t</type>                               <name>slice_tc_offset_div2</name><comment>[-6, 6]</comment></member>
+            <member><type>int8_t</type>                               <name>slice_act_y_qp_offset</name></member>
+            <member><type>int8_t</type>                               <name>slice_act_cb_qp_offset</name></member>
+            <member><type>int8_t</type>                               <name>slice_act_cr_qp_offset</name></member>
+            <member><type>int8_t</type>                               <name>slice_qp_delta</name></member>
+            <member><type>uint16_t</type>                             <name>reserved1</name><comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoEncodeH265WeightTable</type>* <name>pWeightTable</name><comment></comment></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265ReferenceListsInfoFlags">
+            <member><type>uint32_t</type>                             <name>ref_pic_list_modification_flag_l0</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>ref_pic_list_modification_flag_l1</name> : 1</member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 30</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265ReferenceListsInfo">
+            <member><type>StdVideoEncodeH265ReferenceListsInfoFlags</type> <name>flags</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l0_active_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>num_ref_idx_l1_active_minus1</name></member>
+            <member><type>uint8_t</type>                              <name>RefPicList0</name>[STD_VIDEO_H265_MAX_NUM_LIST_REF]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H265_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                              <name>RefPicList1</name>[STD_VIDEO_H265_MAX_NUM_LIST_REF]<comment>slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H265_NO_REFERENCE_PICTURE</comment></member>
+            <member><type>uint8_t</type>                              <name>list_entry_l0</name>[STD_VIDEO_H265_MAX_NUM_LIST_REF]</member>
+            <member><type>uint8_t</type>                              <name>list_entry_l1</name>[STD_VIDEO_H265_MAX_NUM_LIST_REF]</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265PictureInfoFlags">
+            <member><type>uint32_t</type>  <name>is_reference</name> : 1<comment>A reference picture, as defined in clause 3.132</comment></member>
+            <member><type>uint32_t</type>  <name>IrapPicFlag</name> : 1<comment>A reference picture, as defined in clause 3.73</comment></member>
+            <member><type>uint32_t</type>  <name>used_for_long_term_reference</name> : 1<comment>A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set</comment></member>
+            <member><type>uint32_t</type>  <name>discardable_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>cross_layer_bla_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>pic_output_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>no_output_of_prior_pics_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>short_term_ref_pic_set_sps_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>slice_temporal_mvp_enabled_flag</name> : 1</member>
+            <member><type>uint32_t</type>  <name>reserved</name> : 23</member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265PictureInfo">
+            <member><type>StdVideoEncodeH265PictureInfoFlags</type>   <name>flags</name></member>
+            <member><type>StdVideoH265PictureType</type>              <name>pic_type</name></member>
+            <member><type>uint8_t</type>                              <name>sps_video_parameter_set_id</name><comment>Selecting VPS id from the Video Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pps_seq_parameter_set_id</name><comment>Selecting SPS id from the Sequence Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>pps_pic_parameter_set_id</name><comment>Selecting PPS id from the Picture Parameters Set</comment></member>
+            <member><type>uint8_t</type>                              <name>short_term_ref_pic_set_idx</name></member>
+            <member><type>int32_t</type>                              <name>PicOrderCntVal</name><comment>Picture order count derived as specified in 8.3.1</comment></member>
+            <member><type>uint8_t</type>                              <name>TemporalId</name><comment>Temporal ID, as defined in 7.4.2.2</comment></member>
+            <member><type>uint8_t</type>                              <name>reserved1</name>[7]<comment>Reserved for future use and must be initialized with 0.</comment></member>
+            <member>const <type>StdVideoEncodeH265ReferenceListsInfo</type>* <name>pRefLists</name></member>
+            <member>const <type>StdVideoH265ShortTermRefPicSet</type>* <name>pShortTermRefPicSet</name><comment>Must be a valid pointer if short_term_ref_pic_set_sps_flag is not set</comment></member>
+            <member>const <type>StdVideoEncodeH265LongTermRefPics</type>* <name>pLongTermRefPics</name><comment>Must be a valid pointer if long_term_ref_pics_present_flag is set</comment></member>
+        </type>
+        <type category="struct" name="StdVideoEncodeH265ReferenceInfoFlags">
+            <member><type>uint32_t</type>                             <name>used_for_long_term_reference</name> : 1<comment>A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set</comment></member>
+            <member><type>uint32_t</type>                             <name>unused_for_reference</name> : 1<comment>A picture that is marked as "unused for reference", derived binary value from clause 8.3.2 Decoding process for reference picture set</comment></member>
+            <member><type>uint32_t</type>                             <name>reserved</name> : 30</member>
+        </type>
+
+        <type category="struct" name="StdVideoEncodeH265ReferenceInfo">
+            <member><type>StdVideoEncodeH265ReferenceInfoFlags</type> <name>flags</name></member>
+            <member><type>StdVideoH265PictureType</type>              <name>pic_type</name></member>
+            <member><type>int32_t</type>                              <name>PicOrderCntVal</name><comment>Picture order count derived as specified in 8.3.1</comment></member>
+            <member><type>uint8_t</type>                              <name>TemporalId</name><comment>Temporal ID, as defined in 7.4.2.2</comment></member>
+        </type>
+    </types>
+
+        <!-- vulkan_video_codec_h264std.h enums -->
+    <enums name="StdVideoH264ChromaFormatIdc" type="enum">
+        <enum name="STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME"            value="0"/>
+        <enum name="STD_VIDEO_H264_CHROMA_FORMAT_IDC_420"                   value="1"/>
+        <enum name="STD_VIDEO_H264_CHROMA_FORMAT_IDC_422"                   value="2"/>
+        <enum name="STD_VIDEO_H264_CHROMA_FORMAT_IDC_444"                   value="3"/>
+        <enum name="STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID"               value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264ProfileIdc" type="enum">
+        <enum name="STD_VIDEO_H264_PROFILE_IDC_BASELINE"                    value="66" comment="Only constrained baseline is supported"/>
+        <enum name="STD_VIDEO_H264_PROFILE_IDC_MAIN"                        value="77"/>
+        <enum name="STD_VIDEO_H264_PROFILE_IDC_HIGH"                        value="100"/>
+        <enum name="STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE"         value="244"/>
+        <enum name="STD_VIDEO_H264_PROFILE_IDC_INVALID"                     value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264LevelIdc" type="enum">
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_1_0"                           value="0"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_1_1"                           value="1"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_1_2"                           value="2"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_1_3"                           value="3"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_2_0"                           value="4"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_2_1"                           value="5"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_2_2"                           value="6"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_3_0"                           value="7"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_3_1"                           value="8"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_3_2"                           value="9"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_4_0"                           value="10"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_4_1"                           value="11"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_4_2"                           value="12"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_5_0"                           value="13"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_5_1"                           value="14"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_5_2"                           value="15"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_6_0"                           value="16"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_6_1"                           value="17"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_6_2"                           value="18"/>
+        <enum name="STD_VIDEO_H264_LEVEL_IDC_INVALID"                       value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264PocType" type="enum">
+        <enum name="STD_VIDEO_H264_POC_TYPE_0"                              value="0"/>
+        <enum name="STD_VIDEO_H264_POC_TYPE_1"                              value="1"/>
+        <enum name="STD_VIDEO_H264_POC_TYPE_2"                              value="2"/>
+        <enum name="STD_VIDEO_H264_POC_TYPE_INVALID"                        value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264AspectRatioIdc" type="enum">
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED"            value="0"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE"                 value="1"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11"                  value="2"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11"                  value="3"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11"                  value="4"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33"                  value="5"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11"                  value="6"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11"                  value="7"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11"                  value="8"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33"                  value="9"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11"                  value="10"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11"                  value="11"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33"                  value="12"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99"                 value="13"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3"                    value="14"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2"                    value="15"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1"                    value="16"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR"           value="255"/>
+        <enum name="STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID"                value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264WeightedBipredIdc" type="enum">
+        <enum name="STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT"             value="0"/>
+        <enum name="STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT"            value="1"/>
+        <enum name="STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT"            value="2"/>
+        <enum name="STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID"             value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264ModificationOfPicNumsIdc" type="enum">
+        <enum name="STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT" value="0"/>
+        <enum name="STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD"     value="1"/>
+        <enum name="STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM"          value="2"/>
+        <enum name="STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END"                value="3"/>
+        <enum name="STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID"            value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264MemMgmtControlOp" type="enum">
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END"                         value="0"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM"           value="1"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM"            value="2"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM"              value="3"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX"     value="4"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL"                  value="5"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM"   value="6"/>
+        <enum name="STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID"                     value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264CabacInitIdc" type="enum">
+        <enum name="STD_VIDEO_H264_CABAC_INIT_IDC_0"                        value="0"/>
+        <enum name="STD_VIDEO_H264_CABAC_INIT_IDC_1"                        value="1"/>
+        <enum name="STD_VIDEO_H264_CABAC_INIT_IDC_2"                        value="2"/>
+        <enum name="STD_VIDEO_H264_CABAC_INIT_IDC_INVALID"                  value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264DisableDeblockingFilterIdc" type="enum">
+        <enum name="STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED"  value="0"/>
+        <enum name="STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED"   value="1"/>
+        <enum name="STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL"   value="2"/>
+        <enum name="STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID"   value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264SliceType" type="enum">
+        <enum name="STD_VIDEO_H264_SLICE_TYPE_P"                            value="0"/>
+        <enum name="STD_VIDEO_H264_SLICE_TYPE_B"                            value="1"/>
+        <enum name="STD_VIDEO_H264_SLICE_TYPE_I"                            value="2"/>
+        <comment>
+                reserved STD_VIDEO_H264_SLICE_TYPE_SP = 3
+                reserved STD_VIDEO_H264_SLICE_TYPE_SI = 4
+        </comment>
+        <enum name="STD_VIDEO_H264_SLICE_TYPE_INVALID"                      value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264PictureType" type="enum">
+        <enum name="STD_VIDEO_H264_PICTURE_TYPE_P"                          value="0"/>
+        <enum name="STD_VIDEO_H264_PICTURE_TYPE_B"                          value="1"/>
+        <enum name="STD_VIDEO_H264_PICTURE_TYPE_I"                          value="2"/>
+        <comment>
+                reserved STD_VIDEO_H264_PICTURE_TYPE_SP = 3
+                reserved STD_VIDEO_H264_PICTURE_TYPE_SI = 4
+        </comment>
+        <enum name="STD_VIDEO_H264_PICTURE_TYPE_IDR"                        value="5"/>
+        <enum name="STD_VIDEO_H264_PICTURE_TYPE_INVALID"                    value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH264NonVclNaluType" type="enum">
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS"                   value="0"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS"                   value="1"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD"                   value="2"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX"                value="3"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE"       value="4"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM"         value="5"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED"              value="6"/>
+        <enum name="STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID"               value="0x7FFFFFFF"/>
+    </enums>
+
+            <!-- vulkan_video_codec_h264std_decode.h enums -->
+    <enums name="StdVideoDecodeH264FieldOrderCount" type="enum">
+        <enum name="STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP"            value="0"/>
+        <enum name="STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM"         value="1"/>
+        <enum name="STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID"        value="0x7FFFFFFF"/>
+    </enums>
+
+            <!-- vulkan_video_codec_h265std.h enums -->
+    <enums name="StdVideoH265ChromaFormatIdc" type="enum">
+        <enum name="STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME"            value="0"/>
+        <enum name="STD_VIDEO_H265_CHROMA_FORMAT_IDC_420"                   value="1"/>
+        <enum name="STD_VIDEO_H265_CHROMA_FORMAT_IDC_422"                   value="2"/>
+        <enum name="STD_VIDEO_H265_CHROMA_FORMAT_IDC_444"                   value="3"/>
+        <enum name="STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID"               value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH265ProfileIdc" type="enum">
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_MAIN"                        value="1"/>
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_MAIN_10"                     value="2"/>
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE"          value="3"/>
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS"     value="4"/>
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS"              value="9"/>
+        <enum name="STD_VIDEO_H265_PROFILE_IDC_INVALID"                     value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH265LevelIdc" type="enum">
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_1_0"                           value="0"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_2_0"                           value="1"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_2_1"                           value="2"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_3_0"                           value="3"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_3_1"                           value="4"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_4_0"                           value="5"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_4_1"                           value="6"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_5_0"                           value="7"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_5_1"                           value="8"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_5_2"                           value="9"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_6_0"                           value="10"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_6_1"                           value="11"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_6_2"                           value="12"/>
+        <enum name="STD_VIDEO_H265_LEVEL_IDC_INVALID"                       value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH265SliceType" type="enum">
+        <enum name="STD_VIDEO_H265_SLICE_TYPE_B"                            value="0"/>
+        <enum name="STD_VIDEO_H265_SLICE_TYPE_P"                            value="1"/>
+        <enum name="STD_VIDEO_H265_SLICE_TYPE_I"                            value="2"/>
+        <enum name="STD_VIDEO_H265_SLICE_TYPE_INVALID"                      value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH265PictureType" type="enum">
+        <enum name="STD_VIDEO_H265_PICTURE_TYPE_P"                          value="0"/>
+        <enum name="STD_VIDEO_H265_PICTURE_TYPE_B"                          value="1"/>
+        <enum name="STD_VIDEO_H265_PICTURE_TYPE_I"                          value="2"/>
+        <enum name="STD_VIDEO_H265_PICTURE_TYPE_IDR"                        value="3"/>
+        <enum name="STD_VIDEO_H265_PICTURE_TYPE_INVALID"                    value="0x7FFFFFFF"/>
+    </enums>
+    <enums name="StdVideoH265AspectRatioIdc" type="enum">
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED"            value="0"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE"                 value="1"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11"                  value="2"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11"                  value="3"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11"                  value="4"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33"                  value="5"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11"                  value="6"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11"                  value="7"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11"                  value="8"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33"                  value="9"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11"                  value="10"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11"                  value="11"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33"                  value="12"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99"                 value="13"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3"                    value="14"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2"                    value="15"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1"                    value="16"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR"           value="255"/>
+        <enum name="STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID"                value="0x7FFFFFFF"/>
+    </enums>
+
+    <extensions>
+        <extension name="vulkan_video_codecs_common" comment="protect with VULKAN_VIDEO_CODEC_COMMON_H_" supported="vulkan">
+            <require>
+                <type name="VK_MAKE_VIDEO_STD_VERSION"/>
+                <type name="stdint"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h264std" comment="protect with VULKAN_VIDEO_CODEC_H264STD_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codecs_common.h"/>
+
+                <enum name="STD_VIDEO_H264_CPB_CNT_LIST_SIZE"               value="32"/>
+                <enum name="STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS"      value="6"/>
+                <enum name="STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS"   value="16"/>
+                <enum name="STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS"      value="6"/>
+                <enum name="STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS"   value="64"/>
+                <enum name="STD_VIDEO_H264_MAX_NUM_LIST_REF"                value="32"/>
+                <enum name="STD_VIDEO_H264_MAX_CHROMA_PLANES"               value="2"/>
+                <enum name="STD_VIDEO_H264_NO_REFERENCE_PICTURE"            value="0xFF"/>
+
+                <type name="StdVideoH264ChromaFormatIdc"/>
+                <type name="StdVideoH264ProfileIdc"/>
+                <type name="StdVideoH264LevelIdc"/>
+                <type name="StdVideoH264PocType"/>
+                <type name="StdVideoH264AspectRatioIdc"/>
+                <type name="StdVideoH264WeightedBipredIdc"/>
+                <type name="StdVideoH264ModificationOfPicNumsIdc"/>
+                <type name="StdVideoH264MemMgmtControlOp"/>
+                <type name="StdVideoH264CabacInitIdc"/>
+                <type name="StdVideoH264DisableDeblockingFilterIdc"/>
+                <type name="StdVideoH264SliceType"/>
+                <type name="StdVideoH264PictureType"/>
+                <type name="StdVideoH264NonVclNaluType"/>
+
+                <type name="StdVideoH264SpsVuiFlags"/>
+                <type name="StdVideoH264HrdParameters"/>
+                <type name="StdVideoH264SequenceParameterSetVui"/>
+                <type name="StdVideoH264SpsFlags"/>
+                <type name="StdVideoH264ScalingLists"/>
+                <type name="StdVideoH264SequenceParameterSet"/>
+                <type name="StdVideoH264PpsFlags"/>
+                <type name="StdVideoH264PictureParameterSet"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h264std_decode" comment="protect with VULKAN_VIDEO_CODEC_H264STD_DECODE_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codec_h264std.h"/>
+
+                <type name="VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION"    value="VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME"  value="&quot;VK_STD_vulkan_video_codec_h264_decode&quot;"/>
+
+                <enum name="STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE" value="2"/>
+
+                <type name="StdVideoDecodeH264FieldOrderCount"/>
+                <type name="StdVideoDecodeH264PictureInfoFlags"/>
+                <type name="StdVideoDecodeH264PictureInfo"/>
+                <type name="StdVideoDecodeH264ReferenceInfoFlags"/>
+                <type name="StdVideoDecodeH264ReferenceInfo"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h264std_encode" comment="protect with VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codec_h264std.h"/>
+
+                <type name="VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_11"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION"    value="VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_11"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME"  value="&quot;VK_STD_vulkan_video_codec_h264_encode&quot;"/>
+
+                <type name="StdVideoEncodeH264WeightTableFlags"/>
+                <type name="StdVideoEncodeH264WeightTable"/>
+                <type name="StdVideoEncodeH264SliceHeaderFlags"/>
+                <type name="StdVideoEncodeH264PictureInfoFlags"/>
+                <type name="StdVideoEncodeH264ReferenceInfoFlags"/>
+                <type name="StdVideoEncodeH264ReferenceListsInfoFlags"/>
+                <type name="StdVideoEncodeH264RefListModEntry"/>
+                <type name="StdVideoEncodeH264RefPicMarkingEntry"/>
+                <type name="StdVideoEncodeH264ReferenceListsInfo"/>
+                <type name="StdVideoEncodeH264PictureInfo"/>
+                <type name="StdVideoEncodeH264ReferenceInfo"/>
+                <type name="StdVideoEncodeH264SliceHeader"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h265std" comment="protect with VULKAN_VIDEO_CODEC_H265STD_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codecs_common.h"/>
+
+                <enum name="STD_VIDEO_H265_CPB_CNT_LIST_SIZE"                           value="32"/>
+                <enum name="STD_VIDEO_H265_SUBLAYERS_LIST_SIZE"                         value="7"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS"                  value="6"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS"               value="16"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS"                  value="6"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS"               value="64"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS"                value="6"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS"             value="64"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS"                value="2"/>
+                <enum name="STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS"             value="64"/>
+                <enum name="STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE"                  value="6"/>
+                <enum name="STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE"        value="19"/>
+                <enum name="STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE"        value="21"/>
+                <enum name="STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE"      value="3"/>
+                <enum name="STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE"    value="128"/>
+                <enum name="STD_VIDEO_H265_MAX_NUM_LIST_REF"                            value="15"/>
+                <enum name="STD_VIDEO_H265_MAX_CHROMA_PLANES"                           value="2"/>
+                <enum name="STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS"                 value="64"/>
+                <enum name="STD_VIDEO_H265_MAX_DPB_SIZE"                                value="16"/>
+                <enum name="STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS"                  value="32"/>
+                <enum name="STD_VIDEO_H265_MAX_LONG_TERM_PICS"                          value="16"/>
+                <enum name="STD_VIDEO_H265_MAX_DELTA_POC"                               value="48"/>
+                <enum name="STD_VIDEO_H265_NO_REFERENCE_PICTURE"                        value="0xFF"/>
+
+                <type name="StdVideoH265ChromaFormatIdc"/>
+                <type name="StdVideoH265ProfileIdc"/>
+                <type name="StdVideoH265LevelIdc"/>
+                <type name="StdVideoH265SliceType"/>
+                <type name="StdVideoH265PictureType"/>
+                <type name="StdVideoH265AspectRatioIdc"/>
+                <type name="StdVideoH265DecPicBufMgr"/>
+                <type name="StdVideoH265SubLayerHrdParameters"/>
+                <type name="StdVideoH265HrdFlags"/>
+                <type name="StdVideoH265HrdParameters"/>
+                <type name="StdVideoH265VpsFlags"/>
+                <type name="StdVideoH265ProfileTierLevelFlags"/>
+                <type name="StdVideoH265ProfileTierLevel"/>
+                <type name="StdVideoH265VideoParameterSet"/>
+                <type name="StdVideoH265ScalingLists"/>
+                <type name="StdVideoH265SpsVuiFlags"/>
+                <type name="StdVideoH265SequenceParameterSetVui"/>
+                <type name="StdVideoH265PredictorPaletteEntries"/>
+                <type name="StdVideoH265SpsFlags"/>
+                <type name="StdVideoH265ShortTermRefPicSetFlags"/>
+                <type name="StdVideoH265ShortTermRefPicSet"/>
+                <type name="StdVideoH265LongTermRefPicsSps"/>
+                <type name="StdVideoH265SequenceParameterSet"/>
+                <type name="StdVideoH265PpsFlags"/>
+                <type name="StdVideoH265PictureParameterSet"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h265std_decode" comment="protect with VULKAN_VIDEO_CODEC_H265STD_DECODE_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codec_h265std.h"/>
+
+                <type name="VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION"    value="VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME"  value="&quot;VK_STD_vulkan_video_codec_h265_decode&quot;"/>
+
+                <enum name="STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE"    value="8"/>
+
+                <type name="StdVideoDecodeH265PictureInfoFlags"/>
+                <type name="StdVideoDecodeH265PictureInfo"/>
+                <type name="StdVideoDecodeH265ReferenceInfoFlags"/>
+                <type name="StdVideoDecodeH265ReferenceInfo"/>
+            </require>
+        </extension>
+        <extension name="vulkan_video_codec_h265std_encode" comment="protect with VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_" supported="vulkan">
+            <require>
+                <type name="vk_video/vulkan_video_codec_h265std.h"/>
+
+                <type name="VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_12"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION"    value="VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_0_9_12"/>
+                <enum name="VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME"  value="&quot;VK_STD_vulkan_video_codec_h265_encode&quot;"/>
+
+                <type name="StdVideoEncodeH265WeightTableFlags"/>
+                <type name="StdVideoEncodeH265WeightTable"/>
+                <type name="StdVideoEncodeH265SliceSegmentHeaderFlags"/>
+                <type name="StdVideoEncodeH265SliceSegmentHeader"/>
+                <type name="StdVideoEncodeH265ReferenceListsInfoFlags"/>
+                <type name="StdVideoEncodeH265ReferenceListsInfo"/>
+                <type name="StdVideoEncodeH265PictureInfoFlags"/>
+                <type name="StdVideoEncodeH265LongTermRefPics"/>
+                <type name="StdVideoEncodeH265PictureInfo"/>
+                <type name="StdVideoEncodeH265ReferenceInfoFlags"/>
+                <type name="StdVideoEncodeH265ReferenceInfo"/>
+            </require>
+        </extension>
+    </extensions>
+</registry>
diff --git a/codegen/vulkan/vulkan-docs-next/xml/vk.xml b/codegen/vulkan/vulkan-docs-next/xml/vk.xml
new file mode 100644
index 0000000..3d8405a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/xml/vk.xml
@@ -0,0 +1,26131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<registry>
+    <comment>
+Copyright 2015-2023 The Khronos Group Inc.
+
+SPDX-License-Identifier: Apache-2.0 OR MIT
+    </comment>
+
+    <comment>
+This file, vk.xml, is the Vulkan API Registry. It is a critically important
+and normative part of the Vulkan Specification, including a canonical
+machine-readable definition of the API, parameter and member validation
+language incorporated into the Specification and reference pages, and other
+material which is registered by Khronos, such as tags used by extension and
+layer authors. The authoritative public version of vk.xml is maintained in
+the default branch (currently named main) of the Khronos Vulkan GitHub
+project. The authoritative private version is maintained in the default
+branch of the member gitlab server.
+    </comment>
+
+    <platforms comment="Vulkan platform names, reserved for use with platform- and window system-specific extensions">
+        <platform name="xlib" protect="VK_USE_PLATFORM_XLIB_KHR" comment="X Window System, Xlib client library"/>
+        <platform name="xlib_xrandr" protect="VK_USE_PLATFORM_XLIB_XRANDR_EXT" comment="X Window System, Xlib client library, XRandR extension"/>
+        <platform name="xcb" protect="VK_USE_PLATFORM_XCB_KHR" comment="X Window System, Xcb client library"/>
+        <platform name="wayland" protect="VK_USE_PLATFORM_WAYLAND_KHR" comment="Wayland display server protocol"/>
+        <platform name="directfb" protect="VK_USE_PLATFORM_DIRECTFB_EXT" comment="DirectFB library"/>
+        <platform name="android" protect="VK_USE_PLATFORM_ANDROID_KHR" comment="Android OS"/>
+        <platform name="win32" protect="VK_USE_PLATFORM_WIN32_KHR" comment="Microsoft Win32 API (also refers to Win64 apps)"/>
+        <platform name="vi" protect="VK_USE_PLATFORM_VI_NN" comment="Nintendo Vi"/>
+        <platform name="ios" protect="VK_USE_PLATFORM_IOS_MVK" comment="Apple IOS"/>
+        <platform name="macos" protect="VK_USE_PLATFORM_MACOS_MVK" comment="Apple MacOS"/>
+        <platform name="metal" protect="VK_USE_PLATFORM_METAL_EXT" comment="Metal on CoreAnimation on Apple platforms"/>
+        <platform name="fuchsia" protect="VK_USE_PLATFORM_FUCHSIA" comment="Fuchsia"/>
+        <platform name="ggp" protect="VK_USE_PLATFORM_GGP" comment="Google Games Platform"/>
+        <platform name="sci" protect="VK_USE_PLATFORM_SCI" comment="NVIDIA SCI"/>
+        <platform name="provisional" protect="VK_ENABLE_BETA_EXTENSIONS" comment="Enable declarations for beta/provisional extensions"/>
+        <platform name="screen" protect="VK_USE_PLATFORM_SCREEN_QNX" comment="QNX Screen Graphics Subsystem"/>
+    </platforms>
+
+    <tags comment="Vulkan vendor/author tags for extensions and layers">
+        <tag name="IMG"         author="Imagination Technologies"      contact="Andrew Garrard @fluppeteer"/>
+        <tag name="AMD"         author="Advanced Micro Devices, Inc."  contact="Daniel Rakos @drakos-amd"/>
+        <tag name="AMDX"        author="Advanced Micro Devices, Inc."  contact="Daniel Rakos @drakos-amd"/>
+        <tag name="ARM"         author="ARM Limited"                   contact="Jan-Harald Fredriksen @janharaldfredriksen-arm"/>
+        <tag name="FSL"         author="Freescale Semiconductor, Inc." contact="Norbert Nopper @FslNopper"/>
+        <tag name="BRCM"        author="Broadcom Corporation"          contact="Graeme Leese @gnl21"/>
+        <tag name="NXP"         author="NXP Semiconductors N.V."       contact="Norbert Nopper @FslNopper"/>
+        <tag name="NV"          author="NVIDIA Corporation"            contact="Daniel Koch @dgkoch"/>
+        <tag name="NVX"         author="NVIDIA Corporation"            contact="Daniel Koch @dgkoch"/>
+        <tag name="VIV"         author="Vivante Corporation"           contact="Yanjun Zhang gitlab:@yanjunzhang"/>
+        <tag name="VSI"         author="VeriSilicon Holdings Co., Ltd." contact="Yanjun Zhang gitlab:@yanjunzhang"/>
+        <tag name="KDAB"        author="KDAB"                          contact="Sean Harmer @seanharmer"/>
+        <tag name="ANDROID"     author="Google LLC"                    contact="Jesse Hall @critsec"/>
+        <tag name="CHROMIUM"    author="Google LLC"                    contact="Jesse Hall @critsec"/>
+        <tag name="FUCHSIA"     author="Google LLC"                    contact="Craig Stout @cdotstout, Jesse Hall @critsec, John Rosasco @rosasco"/>
+        <tag name="GGP"         author="Google, LLC"                   contact="Jean-Francois Roy @jfroy, Hai Nguyen @chaoticbob, Jesse Hall @critsec"/>
+        <tag name="GOOGLE"      author="Google LLC"                    contact="Jesse Hall @critsec"/>
+        <tag name="QCOM"        author="Qualcomm Technologies, Inc."   contact="Jeff Leger @jackohounhd"/>
+        <tag name="LUNARG"      author="LunarG, Inc."                  contact="Karen Ghavam @karenghavam-lunarg"/>
+        <tag name="NZXT"        author="NZXT Inc."                     contact="Jacob Kiesel @xaeroxe"/>
+        <tag name="SAMSUNG"     author="Samsung Electronics Co., Ltd." contact="Alon Or-bach @alonorbach"/>
+        <tag name="SEC"         author="Samsung Electronics Co., Ltd." contact="Alon Or-bach @alonorbach"/>
+        <tag name="TIZEN"       author="Samsung Electronics Co., Ltd." contact="Alon Or-bach @alonorbach"/>
+        <tag name="RENDERDOC"   author="RenderDoc (renderdoc.org)"     contact="Baldur Karlsson @baldurk"/>
+        <tag name="NN"          author="Nintendo Co., Ltd."            contact="Yasuhiro Yoshioka gitlab:@yoshioka_yasuhiro"/>
+        <tag name="MVK"         author="The Brenwill Workshop Ltd."    contact="Bill Hollings @billhollings"/>
+        <tag name="KHR"         author="Khronos"                       contact="Tom Olson @tomolson"/>
+        <tag name="KHX"         author="Khronos"                       contact="Tom Olson @tomolson"/>
+        <tag name="EXT"         author="Multivendor"                   contact="Jon Leech @oddhack"/>
+        <tag name="MESA"        author="Mesa open source project"      contact="Lina Versace @versalinyaa, Daniel Stone @fooishbar, David Airlie @airlied, Faith Ekstrand @gfxstrand"/>
+        <tag name="INTEL"       author="Intel Corporation"             contact="Slawek Grajewski @sgrajewski"/>
+        <tag name="HUAWEI"      author="Huawei Technologies Co. Ltd."  contact="Pan Gao @PanGao-h, Juntao Li @Lawrenceleehw"/>
+        <tag name="VALVE"       author="Valve Corporation"             contact="Pierre-Loup Griffais @plagman, Joshua Ashton @Joshua-Ashton, Hans-Kristian Arntzen @HansKristian-Work"/>
+        <tag name="QNX"         author="BlackBerry Limited"            contact="Mike Gorchak @mgorchak-blackberry, Aaron Ruby @aruby-blackberry"/>
+        <tag name="JUICE"       author="Juice Technologies, Inc."      contact="David McCloskey @damcclos, Dean Beeler @canadacow"/>
+        <tag name="FB"          author="Facebook, Inc"                 contact="Artem Bolgar @artyom17"/>
+        <tag name="RASTERGRID"  author="RasterGrid Kft."               contact="Daniel Rakos @aqnuep"/>
+        <tag name="MSFT"        author="Microsoft Corporation"         contact="Jesse Natalie @jenatali"/>
+    </tags>
+
+    <types comment="Vulkan type definitions">
+        <type name="vk_platform" category="include">#include "vk_platform.h"</type>
+
+            <comment>WSI extensions</comment>
+
+        <type category="include" name="X11/Xlib.h"/>
+        <type category="include" name="X11/extensions/Xrandr.h"/>
+        <type category="include" name="wayland-client.h"/>
+        <type category="include" name="windows.h"/>
+        <type category="include" name="xcb/xcb.h"/>
+        <type category="include" name="directfb.h"/>
+        <type category="include" name="zircon/types.h"/>
+        <type category="include" name="ggp_c/vulkan_types.h"/>
+        <type category="include" name="screen/screen.h"/>
+        <type category="include" name="nvscisync.h"/>
+        <type category="include" name="nvscibuf.h"/>
+            <comment>
+                In the current header structure, each platform's interfaces
+                are confined to a platform-specific header (vulkan_xlib.h,
+                vulkan_win32.h, etc.). These headers are not self-contained,
+                and should not include native headers (X11/Xlib.h,
+                windows.h, etc.). Code should either include vulkan.h after
+                defining the appropriate VK_USE_PLATFORM_platform
+                macros, or include the required native headers prior to
+                explicitly including the corresponding platform header.
+
+                To accomplish this, the dependencies of native types require
+                native headers, but the XML defines the content for those
+                native headers as empty. The actual native header includes
+                can be restored by modifying the native header tags above
+                to #include the header file in the 'name' attribute.
+            </comment>
+
+        <type requires="X11/Xlib.h" name="Display"/>
+        <type requires="X11/Xlib.h" name="VisualID"/>
+        <type requires="X11/Xlib.h" name="Window"/>
+        <type requires="X11/extensions/Xrandr.h" name="RROutput"/>
+        <type requires="wayland-client.h" name="wl_display"/>
+        <type requires="wayland-client.h" name="wl_surface"/>
+        <type requires="windows.h" name="HINSTANCE"/>
+        <type requires="windows.h" name="HWND"/>
+        <type requires="windows.h" name="HMONITOR"/>
+        <type requires="windows.h" name="HANDLE"/>
+        <type requires="windows.h" name="SECURITY_ATTRIBUTES"/>
+        <type requires="windows.h" name="DWORD"/>
+        <type requires="windows.h" name="LPCWSTR"/>
+        <type requires="xcb/xcb.h" name="xcb_connection_t"/>
+        <type requires="xcb/xcb.h" name="xcb_visualid_t"/>
+        <type requires="xcb/xcb.h" name="xcb_window_t"/>
+        <type requires="directfb.h" name="IDirectFB"/>
+        <type requires="directfb.h" name="IDirectFBSurface"/>
+        <type requires="zircon/types.h" name="zx_handle_t"/>
+        <type requires="ggp_c/vulkan_types.h" name="GgpStreamDescriptor"/>
+        <type requires="ggp_c/vulkan_types.h" name="GgpFrameToken"/>
+        <type requires="screen/screen.h" name="_screen_context"/>
+        <type requires="screen/screen.h" name="_screen_window"/>
+        <type requires="screen/screen.h" name="_screen_buffer"/>
+        <type requires="nvscisync.h" name="NvSciSyncAttrList"/>
+        <type requires="nvscisync.h" name="NvSciSyncObj"/>
+        <type requires="nvscisync.h" name="NvSciSyncFence"/>
+        <type requires="nvscibuf.h" name="NvSciBufAttrList"/>
+        <type requires="nvscibuf.h" name="NvSciBufObj"/>
+
+        <type category="define" deprecated="true">// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead.
+#define <name>VK_MAKE_VERSION</name>(major, minor, patch) \
+    ((((uint32_t)(major)) &lt;&lt; 22U) | (((uint32_t)(minor)) &lt;&lt; 12U) | ((uint32_t)(patch)))</type>
+        <type category="define" deprecated="true">// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
+#define <name>VK_VERSION_MAJOR</name>(version) ((uint32_t)(version) &gt;&gt; 22U)</type>
+        <type category="define" deprecated="true">// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead.
+#define <name>VK_VERSION_MINOR</name>(version) (((uint32_t)(version) &gt;&gt; 12U) &amp; 0x3FFU)</type>
+        <type category="define" deprecated="true">// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead.
+#define <name>VK_VERSION_PATCH</name>(version) ((uint32_t)(version) &amp; 0xFFFU)</type>
+
+        <type category="define">#define <name>VK_MAKE_API_VERSION</name>(variant, major, minor, patch) \
+    ((((uint32_t)(variant)) &lt;&lt; 29U) | (((uint32_t)(major)) &lt;&lt; 22U) | (((uint32_t)(minor)) &lt;&lt; 12U) | ((uint32_t)(patch)))</type>
+        <type category="define">#define <name>VK_API_VERSION_VARIANT</name>(version) ((uint32_t)(version) &gt;&gt; 29U)</type>
+        <type category="define">#define <name>VK_API_VERSION_MAJOR</name>(version) (((uint32_t)(version) &gt;&gt; 22U) &amp; 0x7FU)</type>
+        <type category="define">#define <name>VK_API_VERSION_MINOR</name>(version) (((uint32_t)(version) &gt;&gt; 12U) &amp; 0x3FFU)</type>
+        <type category="define">#define <name>VK_API_VERSION_PATCH</name>(version) ((uint32_t)(version) &amp; 0xFFFU)</type>
+
+        <type category="define" requires="VK_HEADER_VERSION">// Vulkan SC variant number
+#define <name>VKSC_API_VARIANT</name> 1</type>
+
+        <type category="define">// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
+//#define <name>VK_API_VERSION</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 0, 0) // Patch version should always be set to 0</type>
+        <type category="define">// Vulkan 1.0 version number
+#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 0, 0)// Patch version should always be set to 0</type>
+        <type category="define">// Vulkan 1.1 version number
+#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 1, 0)// Patch version should always be set to 0</type>
+        <type category="define">// Vulkan 1.2 version number
+#define <name>VK_API_VERSION_1_2</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 2, 0)// Patch version should always be set to 0</type>
+        <type category="define" requires="VK_MAKE_API_VERSION">// Vulkan 1.3 version number
+#define <name>VK_API_VERSION_1_3</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 3, 0)// Patch version should always be set to 0</type>
+        <type category="define" requires="VKSC_API_VARIANT">// Vulkan SC 1.0 version number
+#define <name>VKSC_API_VERSION_1_0</name> <type>VK_MAKE_API_VERSION</type>(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0</type>
+
+        <type api="vulkan" category="define">// Version of this file
+#define <name>VK_HEADER_VERSION</name> 269</type>
+        <type api="vulkan" category="define" requires="VK_HEADER_VERSION">// Complete version of this file
+#define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 3, VK_HEADER_VERSION)</type>
+        <type api="vulkansc" category="define">// Version of this file
+#define <name>VK_HEADER_VERSION</name> 13</type>
+        <type api="vulkansc" category="define" requires="VKSC_API_VARIANT">// Complete version of this file
+#define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_API_VERSION</type>(VKSC_API_VARIANT, 1, 0, VK_HEADER_VERSION)</type>
+
+        <type api="vulkan" category="define">
+#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
+        <type api="vulkansc" category="define" comment="Extra parenthesis are a MISRA-C requirement that exposes a bug in MSVC">
+#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* (object);</type>
+
+        <type category="define" name="VK_USE_64_BIT_PTR_DEFINES">
+#ifndef VK_USE_64_BIT_PTR_DEFINES
+    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) &amp;&amp; !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) &amp;&amp; __riscv_xlen == 64)
+        #define VK_USE_64_BIT_PTR_DEFINES 1
+    #else
+        #define VK_USE_64_BIT_PTR_DEFINES 0
+    #endif
+#endif</type>
+        <type category="define" requires="VK_USE_64_BIT_PTR_DEFINES" name="VK_NULL_HANDLE">
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #if (defined(__cplusplus) &amp;&amp; (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) &amp;&amp; (_MSVC_LANG >= 201103L))
+            #define VK_NULL_HANDLE nullptr
+        #else
+            #define VK_NULL_HANDLE ((void*)0)
+        #endif
+    #else
+        #define VK_NULL_HANDLE 0ULL
+    #endif
+#endif
+#ifndef VK_NULL_HANDLE
+    #define VK_NULL_HANDLE 0
+#endif</type>
+        <type api="vulkan" category="define" requires="VK_NULL_HANDLE" name="VK_DEFINE_NON_DISPATCHABLE_HANDLE">
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+    #else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+    #endif
+#endif</type>
+        <type api="vulkansc" category="define" requires="VK_NULL_HANDLE" name="VK_DEFINE_NON_DISPATCHABLE_HANDLE" comment="Extra parenthesis are a MISRA-C requirement that exposes a bug in MSVC">
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *(object);
+    #else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t (object);
+    #endif
+#endif</type>
+
+        <type category="basetype">struct <name>ANativeWindow</name>;</type>
+        <type category="basetype">struct <name>AHardwareBuffer</name>;</type>
+        <type category="basetype">#ifdef __OBJC__
+@class CAMetalLayer;
+#else
+typedef void <name>CAMetalLayer</name>;
+#endif</type>
+        <type category="basetype">#ifdef __OBJC__
+@protocol MTLDevice;
+typedef id&lt;MTLDevice&gt; MTLDevice_id;
+#else
+typedef void* <name>MTLDevice_id</name>;
+#endif</type>
+        <type category="basetype">#ifdef __OBJC__
+@protocol MTLCommandQueue;
+typedef id&lt;MTLCommandQueue&gt; MTLCommandQueue_id;
+#else
+typedef void* <name>MTLCommandQueue_id</name>;
+#endif</type>
+        <type category="basetype">#ifdef __OBJC__
+@protocol MTLBuffer;
+typedef id&lt;MTLBuffer&gt; MTLBuffer_id;
+#else
+typedef void* <name>MTLBuffer_id</name>;
+#endif</type>
+        <type category="basetype">#ifdef __OBJC__
+@protocol MTLTexture;
+typedef id&lt;MTLTexture&gt; MTLTexture_id;
+#else
+typedef void* <name>MTLTexture_id</name>;
+#endif</type>
+        <type category="basetype">#ifdef __OBJC__
+@protocol MTLSharedEvent;
+typedef id&lt;MTLSharedEvent&gt; MTLSharedEvent_id;
+#else
+typedef void* <name>MTLSharedEvent_id</name>;
+#endif</type>
+        <type category="basetype">typedef struct __IOSurface* <name>IOSurfaceRef</name>;</type>
+
+        <type category="basetype">typedef <type>uint32_t</type> <name>VkSampleMask</name>;</type>
+        <type category="basetype">typedef <type>uint32_t</type> <name>VkBool32</name>;</type>
+        <type category="basetype">typedef <type>uint32_t</type> <name>VkFlags</name>;</type>
+        <type category="basetype">typedef <type>uint64_t</type> <name>VkFlags64</name>;</type>
+        <type category="basetype">typedef <type>uint64_t</type> <name>VkDeviceSize</name>;</type>
+        <type category="basetype">typedef <type>uint64_t</type> <name>VkDeviceAddress</name>;</type>
+
+            <comment>Basic C types, pulled in via vk_platform.h</comment>
+        <type requires="vk_platform" name="void"/>
+        <type requires="vk_platform" name="char"/>
+        <type requires="vk_platform" name="float"/>
+        <type requires="vk_platform" name="double"/>
+        <type requires="vk_platform" name="int8_t"/>
+        <type requires="vk_platform" name="uint8_t"/>
+        <type requires="vk_platform" name="int16_t"/>
+        <type requires="vk_platform" name="uint16_t"/>
+        <type requires="vk_platform" name="uint32_t"/>
+        <type requires="vk_platform" name="uint64_t"/>
+        <type requires="vk_platform" name="int32_t"/>
+        <type requires="vk_platform" name="int64_t"/>
+        <type requires="vk_platform" name="size_t"/>
+        <type name="int"/>
+
+            <comment>Bitmask types</comment>
+        <type requires="VkFramebufferCreateFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkFramebufferCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkQueryPoolCreateFlags</name>;</type>
+        <type requires="VkRenderPassCreateFlagBits"       category="bitmask">typedef <type>VkFlags</type> <name>VkRenderPassCreateFlags</name>;</type>
+        <type requires="VkSamplerCreateFlagBits"          category="bitmask">typedef <type>VkFlags</type> <name>VkSamplerCreateFlags</name>;</type>
+        <type requires="VkPipelineLayoutCreateFlagBits"   category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineLayoutCreateFlags</name>;</type>
+        <type requires="VkPipelineCacheCreateFlagBits"    category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCacheCreateFlags</name>;</type>
+        <type api="vulkan" requires="VkPipelineDepthStencilStateCreateFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDepthStencilStateCreateFlags</name>;</type>
+        <type api="vulkansc" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDepthStencilStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDynamicStateCreateFlags</name>;</type>
+        <type api="vulkan" requires="VkPipelineColorBlendStateCreateFlagBits"   category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineColorBlendStateCreateFlags</name>;</type>
+        <type api="vulkansc" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineColorBlendStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineMultisampleStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineRasterizationStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineViewportStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineTessellationStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineInputAssemblyStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineVertexInputStateCreateFlags</name>;</type>
+        <type requires="VkPipelineShaderStageCreateFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineShaderStageCreateFlags</name>;</type>
+        <type requires="VkDescriptorSetLayoutCreateFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorSetLayoutCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkBufferViewCreateFlags</name>;</type>
+        <type requires="VkInstanceCreateFlagBits"         category="bitmask">typedef <type>VkFlags</type> <name>VkInstanceCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceCreateFlags</name>;</type>
+        <type requires="VkDeviceQueueCreateFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceQueueCreateFlags</name>;</type>
+        <type requires="VkQueueFlagBits"                  category="bitmask">typedef <type>VkFlags</type> <name>VkQueueFlags</name>;</type>
+        <type requires="VkMemoryPropertyFlagBits"         category="bitmask">typedef <type>VkFlags</type> <name>VkMemoryPropertyFlags</name>;</type>
+        <type requires="VkMemoryHeapFlagBits"             category="bitmask">typedef <type>VkFlags</type> <name>VkMemoryHeapFlags</name>;</type>
+        <type requires="VkAccessFlagBits"                 category="bitmask">typedef <type>VkFlags</type> <name>VkAccessFlags</name>;</type>
+        <type requires="VkBufferUsageFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkBufferUsageFlags</name>;</type>
+        <type requires="VkBufferCreateFlagBits"           category="bitmask">typedef <type>VkFlags</type> <name>VkBufferCreateFlags</name>;</type>
+        <type requires="VkShaderStageFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkShaderStageFlags</name>;</type>
+        <type requires="VkImageUsageFlagBits"             category="bitmask">typedef <type>VkFlags</type> <name>VkImageUsageFlags</name>;</type>
+        <type requires="VkImageCreateFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkImageCreateFlags</name>;</type>
+        <type requires="VkImageViewCreateFlagBits"        category="bitmask">typedef <type>VkFlags</type> <name>VkImageViewCreateFlags</name>;</type>
+        <type requires="VkPipelineCreateFlagBits"         category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCreateFlags</name>;</type>
+        <type requires="VkColorComponentFlagBits"         category="bitmask">typedef <type>VkFlags</type> <name>VkColorComponentFlags</name>;</type>
+        <type requires="VkFenceCreateFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkFenceCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkSemaphoreCreateFlags</name>;</type>
+        <type requires="VkFormatFeatureFlagBits"          category="bitmask">typedef <type>VkFlags</type> <name>VkFormatFeatureFlags</name>;</type>
+        <type requires="VkQueryControlFlagBits"           category="bitmask">typedef <type>VkFlags</type> <name>VkQueryControlFlags</name>;</type>
+        <type requires="VkQueryResultFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkQueryResultFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkShaderModuleCreateFlags</name>;</type>
+        <type requires="VkEventCreateFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkEventCreateFlags</name>;</type>
+        <type requires="VkCommandPoolCreateFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkCommandPoolCreateFlags</name>;</type>
+        <type requires="VkCommandPoolResetFlagBits"       category="bitmask">typedef <type>VkFlags</type> <name>VkCommandPoolResetFlags</name>;</type>
+        <type requires="VkCommandBufferResetFlagBits"     category="bitmask">typedef <type>VkFlags</type> <name>VkCommandBufferResetFlags</name>;</type>
+        <type requires="VkCommandBufferUsageFlagBits"     category="bitmask">typedef <type>VkFlags</type> <name>VkCommandBufferUsageFlags</name>;</type>
+        <type requires="VkQueryPipelineStatisticFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkQueryPipelineStatisticFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkMemoryMapFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkMemoryUnmapFlagsKHR</name>;</type>
+        <type requires="VkImageAspectFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkImageAspectFlags</name>;</type>
+        <type requires="VkSparseMemoryBindFlagBits"       category="bitmask">typedef <type>VkFlags</type> <name>VkSparseMemoryBindFlags</name>;</type>
+        <type requires="VkSparseImageFormatFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkSparseImageFormatFlags</name>;</type>
+        <type requires="VkSubpassDescriptionFlagBits"     category="bitmask">typedef <type>VkFlags</type> <name>VkSubpassDescriptionFlags</name>;</type>
+        <type requires="VkPipelineStageFlagBits"          category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineStageFlags</name>;</type>
+        <type requires="VkSampleCountFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkSampleCountFlags</name>;</type>
+        <type requires="VkAttachmentDescriptionFlagBits"  category="bitmask">typedef <type>VkFlags</type> <name>VkAttachmentDescriptionFlags</name>;</type>
+        <type requires="VkStencilFaceFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkStencilFaceFlags</name>;</type>
+        <type requires="VkCullModeFlagBits"               category="bitmask">typedef <type>VkFlags</type> <name>VkCullModeFlags</name>;</type>
+        <type requires="VkDescriptorPoolCreateFlagBits"   category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorPoolCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorPoolResetFlags</name>;</type>
+        <type requires="VkDependencyFlagBits"             category="bitmask">typedef <type>VkFlags</type> <name>VkDependencyFlags</name>;</type>
+        <type requires="VkSubgroupFeatureFlagBits"        category="bitmask">typedef <type>VkFlags</type> <name>VkSubgroupFeatureFlags</name>;</type>
+        <type requires="VkIndirectCommandsLayoutUsageFlagBitsNV" category="bitmask">typedef <type>VkFlags</type> <name>VkIndirectCommandsLayoutUsageFlagsNV</name>;</type>
+        <type requires="VkIndirectStateFlagBitsNV"        category="bitmask">typedef <type>VkFlags</type> <name>VkIndirectStateFlagsNV</name>;</type>
+        <type requires="VkGeometryFlagBitsKHR"            category="bitmask">typedef <type>VkFlags</type> <name>VkGeometryFlagsKHR</name>;</type>
+        <type                                             category="bitmask" name="VkGeometryFlagsNV" alias="VkGeometryFlagsKHR"/>
+        <type requires="VkGeometryInstanceFlagBitsKHR"    category="bitmask">typedef <type>VkFlags</type> <name>VkGeometryInstanceFlagsKHR</name>;</type>
+        <type                                             category="bitmask" name="VkGeometryInstanceFlagsNV" alias="VkGeometryInstanceFlagsKHR"/>
+        <type requires="VkBuildAccelerationStructureFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkBuildAccelerationStructureFlagsKHR</name>;</type>
+        <type                                             category="bitmask" name="VkBuildAccelerationStructureFlagsNV" alias="VkBuildAccelerationStructureFlagsKHR"/>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPrivateDataSlotCreateFlags</name>;</type>
+        <type                                             category="bitmask" name="VkPrivateDataSlotCreateFlagsEXT" alias="VkPrivateDataSlotCreateFlags"/>
+        <type requires="VkAccelerationStructureCreateFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkAccelerationStructureCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorUpdateTemplateCreateFlags</name>;</type>
+        <type                                             category="bitmask" name="VkDescriptorUpdateTemplateCreateFlagsKHR" alias="VkDescriptorUpdateTemplateCreateFlags"/>
+        <type requires="VkPipelineCreationFeedbackFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCreationFeedbackFlags</name>;</type>
+        <type                                             category="bitmask" name="VkPipelineCreationFeedbackFlagsEXT" alias="VkPipelineCreationFeedbackFlags"/>
+        <type requires="VkPerformanceCounterDescriptionFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkPerformanceCounterDescriptionFlagsKHR</name>;</type>
+        <type requires="VkAcquireProfilingLockFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkAcquireProfilingLockFlagsKHR</name>;</type>
+        <type requires="VkSemaphoreWaitFlagBits"          category="bitmask">typedef <type>VkFlags</type> <name>VkSemaphoreWaitFlags</name>;</type>
+        <type                                             category="bitmask" name="VkSemaphoreWaitFlagsKHR" alias="VkSemaphoreWaitFlags"/>
+        <type requires="VkPipelineCompilerControlFlagBitsAMD" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCompilerControlFlagsAMD</name>;</type>
+        <type requires="VkShaderCorePropertiesFlagBitsAMD" category="bitmask">typedef <type>VkFlags</type> <name>VkShaderCorePropertiesFlagsAMD</name>;</type>
+        <type requires="VkDeviceDiagnosticsConfigFlagBitsNV" category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceDiagnosticsConfigFlagsNV</name>;</type>
+        <type requires="VkRefreshObjectFlagBitsKHR"       category="bitmask">typedef <type>VkFlags</type> <name>VkRefreshObjectFlagsKHR</name>;</type>
+        <type bitvalues="VkAccessFlagBits2"               category="bitmask">typedef <type>VkFlags64</type> <name>VkAccessFlags2</name>;</type>
+        <type                                             category="bitmask" name="VkAccessFlags2KHR" alias="VkAccessFlags2"/>
+        <type bitvalues="VkPipelineStageFlagBits2"        category="bitmask">typedef <type>VkFlags64</type> <name>VkPipelineStageFlags2</name>;</type>
+        <type                                             category="bitmask" name="VkPipelineStageFlags2KHR" alias="VkPipelineStageFlags2"/>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkAccelerationStructureMotionInfoFlagsNV</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkAccelerationStructureMotionInstanceFlagsNV</name>;</type>
+        <type bitvalues="VkFormatFeatureFlagBits2"        category="bitmask">typedef <type>VkFlags64</type> <name>VkFormatFeatureFlags2</name>;</type>
+        <type                                             category="bitmask" name="VkFormatFeatureFlags2KHR" alias="VkFormatFeatureFlags2"/>
+        <type requires="VkRenderingFlagBits"              category="bitmask">typedef <type>VkFlags</type> <name>VkRenderingFlags</name>;</type>
+        <type bitvalues="VkMemoryDecompressionMethodFlagBitsNV" category="bitmask">typedef <type>VkFlags64</type> <name>VkMemoryDecompressionMethodFlagsNV</name>;</type>
+        <type                                             category="bitmask" name="VkRenderingFlagsKHR" alias="VkRenderingFlags"/>
+        <type requires="VkBuildMicromapFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkBuildMicromapFlagsEXT</name>;</type>
+        <type requires="VkMicromapCreateFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkMicromapCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDirectDriverLoadingFlagsLUNARG</name>;</type>
+        <type bitvalues="VkPipelineCreateFlagBits2KHR"    category="bitmask">typedef <type>VkFlags64</type> <name>VkPipelineCreateFlags2KHR</name>;</type>
+        <type bitvalues="VkBufferUsageFlagBits2KHR"       category="bitmask">typedef <type>VkFlags64</type> <name>VkBufferUsageFlags2KHR</name>;</type>
+
+            <comment>WSI extensions</comment>
+        <type requires="VkCompositeAlphaFlagBitsKHR"      category="bitmask">typedef <type>VkFlags</type> <name>VkCompositeAlphaFlagsKHR</name>;</type>
+        <type requires="VkDisplayPlaneAlphaFlagBitsKHR"   category="bitmask">typedef <type>VkFlags</type> <name>VkDisplayPlaneAlphaFlagsKHR</name>;</type>
+        <type requires="VkSurfaceTransformFlagBitsKHR"    category="bitmask">typedef <type>VkFlags</type> <name>VkSurfaceTransformFlagsKHR</name>;</type>
+        <type requires="VkSwapchainCreateFlagBitsKHR"     category="bitmask">typedef <type>VkFlags</type> <name>VkSwapchainCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDisplayModeCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDisplaySurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkAndroidSurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkViSurfaceCreateFlagsNN</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkWaylandSurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkWin32SurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkXlibSurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkXcbSurfaceCreateFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDirectFBSurfaceCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkIOSSurfaceCreateFlagsMVK</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkMacOSSurfaceCreateFlagsMVK</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkMetalSurfaceCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkImagePipeSurfaceCreateFlagsFUCHSIA</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkStreamDescriptorSurfaceCreateFlagsGGP</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkHeadlessSurfaceCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkScreenSurfaceCreateFlagsQNX</name>;</type>
+        <type requires="VkPeerMemoryFeatureFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkPeerMemoryFeatureFlags</name>;</type>
+        <type                                             category="bitmask" name="VkPeerMemoryFeatureFlagsKHR"               alias="VkPeerMemoryFeatureFlags"/>
+        <type requires="VkMemoryAllocateFlagBits"         category="bitmask">typedef <type>VkFlags</type> <name>VkMemoryAllocateFlags</name>;</type>
+        <type                                             category="bitmask" name="VkMemoryAllocateFlagsKHR"                  alias="VkMemoryAllocateFlags"/>
+        <type requires="VkDeviceGroupPresentModeFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceGroupPresentModeFlagsKHR</name>;</type>
+
+        <type requires="VkDebugReportFlagBitsEXT"         category="bitmask">typedef <type>VkFlags</type> <name>VkDebugReportFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkCommandPoolTrimFlags</name>;</type>
+        <type                                             category="bitmask" name="VkCommandPoolTrimFlagsKHR"                 alias="VkCommandPoolTrimFlags"/>
+        <type requires="VkExternalMemoryHandleTypeFlagBitsNV" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalMemoryHandleTypeFlagsNV</name>;</type>
+        <type requires="VkExternalMemoryFeatureFlagBitsNV" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalMemoryFeatureFlagsNV</name>;</type>
+        <type requires="VkExternalMemoryHandleTypeFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalMemoryHandleTypeFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalMemoryHandleTypeFlagsKHR"        alias="VkExternalMemoryHandleTypeFlags"/>
+        <type requires="VkExternalMemoryFeatureFlagBits"  category="bitmask">typedef <type>VkFlags</type> <name>VkExternalMemoryFeatureFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalMemoryFeatureFlagsKHR"           alias="VkExternalMemoryFeatureFlags"/>
+        <type requires="VkExternalSemaphoreHandleTypeFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalSemaphoreHandleTypeFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalSemaphoreHandleTypeFlagsKHR"     alias="VkExternalSemaphoreHandleTypeFlags"/>
+        <type requires="VkExternalSemaphoreFeatureFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalSemaphoreFeatureFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalSemaphoreFeatureFlagsKHR"        alias="VkExternalSemaphoreFeatureFlags"/>
+        <type requires="VkSemaphoreImportFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkSemaphoreImportFlags</name>;</type>
+        <type                                             category="bitmask" name="VkSemaphoreImportFlagsKHR"                 alias="VkSemaphoreImportFlags"/>
+        <type requires="VkExternalFenceHandleTypeFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkExternalFenceHandleTypeFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalFenceHandleTypeFlagsKHR"         alias="VkExternalFenceHandleTypeFlags"/>
+        <type requires="VkExternalFenceFeatureFlagBits"   category="bitmask">typedef <type>VkFlags</type> <name>VkExternalFenceFeatureFlags</name>;</type>
+        <type                                             category="bitmask" name="VkExternalFenceFeatureFlagsKHR"            alias="VkExternalFenceFeatureFlags"/>
+        <type requires="VkFenceImportFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkFenceImportFlags</name>;</type>
+        <type                                             category="bitmask" name="VkFenceImportFlagsKHR"                     alias="VkFenceImportFlags"/>
+        <type requires="VkSurfaceCounterFlagBitsEXT"      category="bitmask">typedef <type>VkFlags</type> <name>VkSurfaceCounterFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineViewportSwizzleStateCreateFlagsNV</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDiscardRectangleStateCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCoverageToColorStateCreateFlagsNV</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCoverageModulationStateCreateFlagsNV</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCoverageReductionStateCreateFlagsNV</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkValidationCacheCreateFlagsEXT</name>;</type>
+        <type requires="VkDebugUtilsMessageSeverityFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessageSeverityFlagsEXT</name>;</type>
+        <type requires="VkDebugUtilsMessageTypeFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessageTypeFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessengerCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessengerCallbackDataFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceMemoryReportFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineRasterizationConservativeStateCreateFlagsEXT</name>;</type>
+        <type requires="VkDescriptorBindingFlagBits"      category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorBindingFlags</name>;</type>
+        <type                                             category="bitmask" name="VkDescriptorBindingFlagsEXT"               alias="VkDescriptorBindingFlags"/>
+        <type requires="VkConditionalRenderingFlagBitsEXT"  category="bitmask">typedef <type>VkFlags</type> <name>VkConditionalRenderingFlagsEXT</name>;</type>
+        <type requires="VkResolveModeFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkResolveModeFlags</name>;</type>
+        <type                                             category="bitmask" name="VkResolveModeFlagsKHR"                     alias="VkResolveModeFlags"/>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineRasterizationStateStreamCreateFlagsEXT</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineRasterizationDepthClipStateCreateFlagsEXT</name>;</type>
+        <type requires="VkSwapchainImageUsageFlagBitsANDROID" category="bitmask">typedef <type>VkFlags</type> <name>VkSwapchainImageUsageFlagsANDROID</name>;</type>
+        <type requires="VkToolPurposeFlagBits"            category="bitmask">typedef <type>VkFlags</type> <name>VkToolPurposeFlags</name>;</type>
+        <type                                             category="bitmask" name="VkToolPurposeFlagsEXT"                     alias="VkToolPurposeFlags"/>
+        <type requires="VkSubmitFlagBits"                 category="bitmask">typedef <type>VkFlags</type> <name>VkSubmitFlags</name>;</type>
+        <type                                             category="bitmask" name="VkSubmitFlagsKHR"                          alias="VkSubmitFlags"/>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkImageFormatConstraintsFlagsFUCHSIA</name>;</type>
+        <type requires="VkHostImageCopyFlagBitsEXT"       category="bitmask">typedef <type>VkFlags</type> <name>VkHostImageCopyFlagsEXT</name>;</type>
+        <type requires="VkImageConstraintsInfoFlagBitsFUCHSIA"   category="bitmask">typedef <type>VkFlags</type> <name>VkImageConstraintsInfoFlagsFUCHSIA</name>;</type>
+        <type requires="VkGraphicsPipelineLibraryFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkGraphicsPipelineLibraryFlagsEXT</name>;</type>
+        <type requires="VkImageCompressionFlagBitsEXT"          category="bitmask">typedef <type>VkFlags</type> <name>VkImageCompressionFlagsEXT</name>;</type>
+        <type requires="VkImageCompressionFixedRateFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkImageCompressionFixedRateFlagsEXT</name>;</type>
+        <type requires="VkExportMetalObjectTypeFlagBitsEXT"     category="bitmask">typedef <type>VkFlags</type> <name>VkExportMetalObjectTypeFlagsEXT</name>;</type>
+        <type requires="VkDeviceAddressBindingFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkDeviceAddressBindingFlagsEXT</name>;</type>
+        <type requires="VkOpticalFlowGridSizeFlagBitsNV"        category="bitmask">typedef <type>VkFlags</type>   <name>VkOpticalFlowGridSizeFlagsNV</name>;</type>
+        <type requires="VkOpticalFlowUsageFlagBitsNV"           category="bitmask">typedef <type>VkFlags</type>   <name>VkOpticalFlowUsageFlagsNV</name>;</type>
+        <type requires="VkOpticalFlowSessionCreateFlagBitsNV"   category="bitmask">typedef <type>VkFlags</type>   <name>VkOpticalFlowSessionCreateFlagsNV</name>;</type>
+        <type requires="VkOpticalFlowExecuteFlagBitsNV"         category="bitmask">typedef <type>VkFlags</type>   <name>VkOpticalFlowExecuteFlagsNV</name>;</type>
+        <type requires="VkFrameBoundaryFlagBitsEXT"       category="bitmask">typedef <type>VkFlags</type> <name>VkFrameBoundaryFlagsEXT</name>;</type>
+        <type requires="VkPresentScalingFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPresentScalingFlagsEXT</name>;</type>
+        <type requires="VkPresentGravityFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPresentGravityFlagsEXT</name>;</type>
+        <type requires="VkShaderCreateFlagBitsEXT"        category="bitmask">typedef <type>VkFlags</type> <name>VkShaderCreateFlagsEXT</name>;</type>
+        <type bitvalues="VkPhysicalDeviceSchedulingControlsFlagBitsARM" category="bitmask">typedef <type>VkFlags64</type> <name>VkPhysicalDeviceSchedulingControlsFlagsARM</name>;</type>
+
+            <comment>Video Core extension</comment>
+        <type requires="VkVideoCodecOperationFlagBitsKHR"           category="bitmask">typedef <type>VkFlags</type> <name>VkVideoCodecOperationFlagsKHR</name>;</type>
+        <type requires="VkVideoCapabilityFlagBitsKHR"               category="bitmask">typedef <type>VkFlags</type> <name>VkVideoCapabilityFlagsKHR</name>;</type>
+        <type requires="VkVideoSessionCreateFlagBitsKHR"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoSessionCreateFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoSessionParametersCreateFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoBeginCodingFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEndCodingFlagsKHR</name>;</type>
+        <type requires="VkVideoCodingControlFlagBitsKHR"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoCodingControlFlagsKHR</name>;</type>
+
+            <comment>Video Decode Core extension</comment>
+        <type requires="VkVideoDecodeUsageFlagBitsKHR"              category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeUsageFlagsKHR</name>;</type>
+        <type requires="VkVideoDecodeCapabilityFlagBitsKHR"         category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeCapabilityFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeFlagsKHR</name>;</type>
+
+            <comment>Video Decode H.264 extension</comment>
+        <type requires="VkVideoDecodeH264PictureLayoutFlagBitsKHR"  category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeH264PictureLayoutFlagsKHR</name>;</type>
+
+            <comment>Video Encode Core extension</comment>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeUsageFlagBitsKHR"              category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeUsageFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeContentFlagBitsKHR"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeContentFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeCapabilityFlagBitsKHR"         category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeCapabilityFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeFeedbackFlagBitsKHR"           category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeFeedbackFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeRateControlFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeRateControlModeFlagBitsKHR"    category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeRateControlModeFlagsKHR</name>;</type>
+        <type requires="VkVideoChromaSubsamplingFlagBitsKHR"        category="bitmask">typedef <type>VkFlags</type> <name>VkVideoChromaSubsamplingFlagsKHR</name>;</type>
+        <type requires="VkVideoComponentBitDepthFlagBitsKHR"        category="bitmask">typedef <type>VkFlags</type> <name>VkVideoComponentBitDepthFlagsKHR</name>;</type>
+
+            <comment>Video Encode H.264 extension</comment>
+        <type requires="VkVideoEncodeH264CapabilityFlagBitsEXT"             category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264CapabilityFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH264StdFlagBitsEXT"                    category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264StdFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH264RateControlFlagBitsEXT"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264RateControlFlagsEXT</name>;</type>
+
+            <comment>Video Encode H.265 extension</comment>
+        <type requires="VkVideoEncodeH265CapabilityFlagBitsEXT"             category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265CapabilityFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265StdFlagBitsEXT"                    category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265StdFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265RateControlFlagBitsEXT"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265RateControlFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265CtbSizeFlagBitsEXT"                category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265CtbSizeFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265TransformBlockSizeFlagBitsEXT"     category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265TransformBlockSizeFlagsEXT</name>;</type>
+
+            <comment>Types which can be void pointers or class pointers, selected at compile time</comment>
+        <type category="handle"                           objtypeenum="VK_OBJECT_TYPE_INSTANCE"><type>VK_DEFINE_HANDLE</type>(<name>VkInstance</name>)</type>
+        <type category="handle" parent="VkInstance"       objtypeenum="VK_OBJECT_TYPE_PHYSICAL_DEVICE"><type>VK_DEFINE_HANDLE</type>(<name>VkPhysicalDevice</name>)</type>
+        <type category="handle" parent="VkPhysicalDevice" objtypeenum="VK_OBJECT_TYPE_DEVICE"><type>VK_DEFINE_HANDLE</type>(<name>VkDevice</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_QUEUE"><type>VK_DEFINE_HANDLE</type>(<name>VkQueue</name>)</type>
+        <type category="handle" parent="VkCommandPool"    objtypeenum="VK_OBJECT_TYPE_COMMAND_BUFFER"><type>VK_DEFINE_HANDLE</type>(<name>VkCommandBuffer</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_DEVICE_MEMORY"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDeviceMemory</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_COMMAND_POOL"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkCommandPool</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_BUFFER"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkBuffer</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_BUFFER_VIEW"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkBufferView</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_IMAGE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkImage</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_IMAGE_VIEW"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkImageView</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SHADER_MODULE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkShaderModule</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_PIPELINE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPipeline</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_PIPELINE_LAYOUT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPipelineLayout</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SAMPLER"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSampler</name>)</type>
+        <type category="handle" parent="VkDescriptorPool" objtypeenum="VK_OBJECT_TYPE_DESCRIPTOR_SET"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDescriptorSet</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDescriptorSetLayout</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_DESCRIPTOR_POOL"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDescriptorPool</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_FENCE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkFence</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SEMAPHORE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSemaphore</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_EVENT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkEvent</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_QUERY_POOL"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkQueryPool</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_FRAMEBUFFER"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkFramebuffer</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_RENDER_PASS"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkRenderPass</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_PIPELINE_CACHE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPipelineCache</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkIndirectCommandsLayoutNV</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDescriptorUpdateTemplate</name>)</type>
+        <type category="handle" name="VkDescriptorUpdateTemplateKHR" alias="VkDescriptorUpdateTemplate"/>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSamplerYcbcrConversion</name>)</type>
+        <type category="handle" name="VkSamplerYcbcrConversionKHR"   alias="VkSamplerYcbcrConversion"/>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkValidationCacheEXT</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkAccelerationStructureKHR</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkAccelerationStructureNV</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPerformanceConfigurationINTEL</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkBufferCollectionFUCHSIA</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDeferredOperationKHR</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPrivateDataSlot</name>)</type>
+        <type category="handle" name="VkPrivateDataSlotEXT"          alias="VkPrivateDataSlot"/>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_CU_MODULE_NVX"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkCuModuleNVX</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_CU_FUNCTION_NVX"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkCuFunctionNVX</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkOpticalFlowSessionNV</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_MICROMAP_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkMicromapEXT</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SHADER_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkShaderEXT</name>)</type>
+
+            <comment>WSI extensions</comment>
+        <type category="handle" parent="VkPhysicalDevice" objtypeenum="VK_OBJECT_TYPE_DISPLAY_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDisplayKHR</name>)</type>
+        <type category="handle" parent="VkDisplayKHR"     objtypeenum="VK_OBJECT_TYPE_DISPLAY_MODE_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDisplayModeKHR</name>)</type>
+        <type category="handle" parent="VkInstance"       objtypeenum="VK_OBJECT_TYPE_SURFACE_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSurfaceKHR</name>)</type>
+        <type category="handle" parent="VkDevice"         objtypeenum="VK_OBJECT_TYPE_SWAPCHAIN_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSwapchainKHR</name>)</type>
+        <type category="handle" parent="VkInstance"       objtypeenum="VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDebugReportCallbackEXT</name>)</type>
+        <type category="handle" parent="VkInstance"       objtypeenum="VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDebugUtilsMessengerEXT</name>)</type>
+
+            <comment>Video extensions</comment>
+        <type category="handle" parent="VkDevice"          objtypeenum="VK_OBJECT_TYPE_VIDEO_SESSION_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkVideoSessionKHR</name>)</type>
+        <type category="handle" parent="VkVideoSessionKHR" objtypeenum="VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkVideoSessionParametersKHR</name>)</type>
+
+            <comment>VK_NV_external_sci_sync2</comment>
+        <type category="handle" parent="VkDevice"          objtypeenum="VK_OBJECT_TYPE_SEMAPHORE_SCI_SYNC_POOL_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkSemaphoreSciSyncPoolNV</name>)</type>
+
+            <comment>Types generated from corresponding enums tags below</comment>
+        <type name="VkAttachmentLoadOp" category="enum"/>
+        <type name="VkAttachmentStoreOp" category="enum"/>
+        <type name="VkBlendFactor" category="enum"/>
+        <type name="VkBlendOp" category="enum"/>
+        <type name="VkBorderColor" category="enum"/>
+        <type name="VkFramebufferCreateFlagBits" category="enum"/>
+        <type name="VkQueryPoolCreateFlagBits" category="enum"/>
+        <type name="VkRenderPassCreateFlagBits" category="enum"/>
+        <type name="VkSamplerCreateFlagBits" category="enum"/>
+        <type name="VkPipelineCacheHeaderVersion" category="enum"/>
+        <type name="VkPipelineCacheCreateFlagBits" category="enum"/>
+        <type name="VkPipelineShaderStageCreateFlagBits" category="enum"/>
+        <type name="VkDescriptorSetLayoutCreateFlagBits" category="enum"/>
+        <type name="VkInstanceCreateFlagBits" category="enum"/>
+        <type name="VkDeviceQueueCreateFlagBits" category="enum"/>
+        <type name="VkBufferCreateFlagBits" category="enum"/>
+        <type name="VkBufferUsageFlagBits" category="enum"/>
+        <type name="VkColorComponentFlagBits" category="enum"/>
+        <type name="VkComponentSwizzle" category="enum"/>
+        <type name="VkCommandPoolCreateFlagBits" category="enum"/>
+        <type name="VkCommandPoolResetFlagBits" category="enum"/>
+        <type name="VkCommandBufferResetFlagBits" category="enum"/>
+        <type name="VkCommandBufferLevel" category="enum"/>
+        <type name="VkCommandBufferUsageFlagBits" category="enum"/>
+        <type name="VkCompareOp" category="enum"/>
+        <type name="VkCullModeFlagBits" category="enum"/>
+        <type name="VkDescriptorType" category="enum"/>
+        <type name="VkDeviceCreateFlagBits" category="enum"/>
+        <type name="VkDynamicState" category="enum"/>
+        <type name="VkFenceCreateFlagBits" category="enum"/>
+        <type name="VkPolygonMode" category="enum"/>
+        <type name="VkFormat" category="enum"/>
+        <type name="VkFormatFeatureFlagBits" category="enum"/>
+        <type name="VkFrontFace" category="enum"/>
+        <type name="VkImageAspectFlagBits" category="enum"/>
+        <type name="VkImageCreateFlagBits" category="enum"/>
+        <type name="VkImageLayout" category="enum"/>
+        <type name="VkImageTiling" category="enum"/>
+        <type name="VkImageType" category="enum"/>
+        <type name="VkImageUsageFlagBits" category="enum"/>
+        <type name="VkImageViewCreateFlagBits" category="enum"/>
+        <type name="VkImageViewType" category="enum"/>
+        <type name="VkSharingMode" category="enum"/>
+        <type name="VkIndexType" category="enum"/>
+        <type name="VkLogicOp" category="enum"/>
+        <type name="VkMemoryHeapFlagBits" category="enum"/>
+        <type name="VkAccessFlagBits" category="enum"/>
+        <type name="VkMemoryPropertyFlagBits" category="enum"/>
+        <type name="VkPhysicalDeviceType" category="enum"/>
+        <type name="VkPipelineBindPoint" category="enum"/>
+        <type name="VkPipelineCreateFlagBits" category="enum"/>
+        <type name="VkPrimitiveTopology" category="enum"/>
+        <type name="VkQueryControlFlagBits" category="enum"/>
+        <type name="VkQueryPipelineStatisticFlagBits" category="enum"/>
+        <type name="VkQueryResultFlagBits" category="enum"/>
+        <type name="VkQueryType" category="enum"/>
+        <type name="VkQueueFlagBits" category="enum"/>
+        <type name="VkSubpassContents" category="enum"/>
+        <type name="VkResult" category="enum"/>
+        <type name="VkShaderStageFlagBits" category="enum"/>
+        <type name="VkSparseMemoryBindFlagBits" category="enum"/>
+        <type name="VkStencilFaceFlagBits" category="enum"/>
+        <type name="VkStencilOp" category="enum"/>
+        <type name="VkStructureType" category="enum"/>
+        <type name="VkSystemAllocationScope" category="enum"/>
+        <type name="VkInternalAllocationType" category="enum"/>
+        <type name="VkSamplerAddressMode" category="enum"/>
+        <type name="VkFilter" category="enum"/>
+        <type name="VkSamplerMipmapMode" category="enum"/>
+        <type name="VkVertexInputRate" category="enum"/>
+        <type name="VkPipelineStageFlagBits" category="enum"/>
+        <type name="VkSparseImageFormatFlagBits" category="enum"/>
+        <type name="VkSampleCountFlagBits" category="enum"/>
+        <type name="VkAttachmentDescriptionFlagBits" category="enum"/>
+        <type name="VkDescriptorPoolCreateFlagBits" category="enum"/>
+        <type name="VkDependencyFlagBits" category="enum"/>
+        <type name="VkObjectType" category="enum"/>
+        <type name="VkEventCreateFlagBits" category="enum"/>
+        <type name="VkPipelineLayoutCreateFlagBits" category="enum"/>
+        <type name="VkSemaphoreCreateFlagBits" category="enum"/>
+        <type name="VkRayTracingInvocationReorderModeNV" category="enum"/>
+
+        <comment>Extensions</comment>
+        <type name="VkIndirectCommandsLayoutUsageFlagBitsNV" category="enum"/>
+        <type name="VkIndirectCommandsTokenTypeNV" category="enum"/>
+        <type name="VkIndirectStateFlagBitsNV" category="enum"/>
+        <type name="VkPrivateDataSlotCreateFlagBits" category="enum"/>
+        <type category="enum" name="VkPrivateDataSlotCreateFlagBitsEXT"            alias="VkPrivateDataSlotCreateFlagBits"/>
+        <type name="VkDescriptorUpdateTemplateType" category="enum"/>
+        <type category="enum" name="VkDescriptorUpdateTemplateTypeKHR"             alias="VkDescriptorUpdateTemplateType"/>
+        <type name="VkViewportCoordinateSwizzleNV" category="enum"/>
+        <type name="VkDiscardRectangleModeEXT" category="enum"/>
+        <type name="VkSubpassDescriptionFlagBits" category="enum"/>
+        <type name="VkPointClippingBehavior" category="enum"/>
+        <type category="enum" name="VkPointClippingBehaviorKHR"                    alias="VkPointClippingBehavior"/>
+        <type name="VkCoverageModulationModeNV" category="enum"/>
+        <type name="VkCoverageReductionModeNV" category="enum"/>
+        <type name="VkValidationCacheHeaderVersionEXT" category="enum"/>
+        <type name="VkShaderInfoTypeAMD" category="enum"/>
+        <type name="VkQueueGlobalPriorityKHR" category="enum"/>
+        <type name="VkQueueGlobalPriorityEXT" category="enum"                      alias="VkQueueGlobalPriorityKHR"/>
+        <type name="VkTimeDomainEXT" category="enum"/>
+        <type name="VkConservativeRasterizationModeEXT" category="enum"/>
+        <type name="VkResolveModeFlagBits" category="enum"/>
+        <type category="enum" name="VkResolveModeFlagBitsKHR"                      alias="VkResolveModeFlagBits"/>
+        <type name="VkDescriptorBindingFlagBits" category="enum"/>
+        <type category="enum" name="VkDescriptorBindingFlagBitsEXT"                alias="VkDescriptorBindingFlagBits"/>
+        <type name="VkConditionalRenderingFlagBitsEXT" category="enum"/>
+        <type name="VkSemaphoreType" category="enum"/>
+        <type category="enum" name="VkSemaphoreTypeKHR"                            alias="VkSemaphoreType"/>
+        <type name="VkGeometryFlagBitsKHR" category="enum"/>
+        <type category="enum" name="VkGeometryFlagBitsNV"                          alias="VkGeometryFlagBitsKHR"/>
+        <type name="VkGeometryInstanceFlagBitsKHR" category="enum"/>
+        <type category="enum" name="VkGeometryInstanceFlagBitsNV"                  alias="VkGeometryInstanceFlagBitsKHR"/>
+        <type name="VkBuildAccelerationStructureFlagBitsKHR" category="enum"/>
+        <type category="enum" name="VkBuildAccelerationStructureFlagBitsNV"        alias="VkBuildAccelerationStructureFlagBitsKHR"/>
+        <type name="VkAccelerationStructureCreateFlagBitsKHR" category="enum"/>
+        <type name="VkBuildAccelerationStructureModeKHR" category="enum"/>
+        <type name="VkCopyAccelerationStructureModeKHR" category="enum"/>
+        <type category="enum" name="VkCopyAccelerationStructureModeNV"             alias="VkCopyAccelerationStructureModeKHR"/>
+        <type name="VkAccelerationStructureTypeKHR" category="enum"/>
+        <type category="enum" name="VkAccelerationStructureTypeNV"                 alias="VkAccelerationStructureTypeKHR"/>
+        <type name="VkGeometryTypeKHR" category="enum"/>
+        <type category="enum" name="VkGeometryTypeNV"                              alias="VkGeometryTypeKHR"/>
+        <type name="VkRayTracingShaderGroupTypeKHR" category="enum"/>
+        <type category="enum" name="VkRayTracingShaderGroupTypeNV"                 alias="VkRayTracingShaderGroupTypeKHR"/>
+        <type name="VkAccelerationStructureMemoryRequirementsTypeNV" category="enum"/>
+        <type name="VkAccelerationStructureBuildTypeKHR" category="enum"/>
+        <type name="VkAccelerationStructureCompatibilityKHR" category="enum"/>
+        <type name="VkShaderGroupShaderKHR" category="enum"/>
+        <type name="VkMemoryOverallocationBehaviorAMD" category="enum"/>
+        <type name="VkDeviceDiagnosticsConfigFlagBitsNV" category="enum"/>
+        <type name="VkPipelineCreationFeedbackFlagBits" category="enum"/>
+        <type category="enum" name="VkPipelineCreationFeedbackFlagBitsEXT"         alias="VkPipelineCreationFeedbackFlagBits"/>
+        <type name="VkPerformanceCounterScopeKHR" category="enum"/>
+        <type name="VkPerformanceCounterUnitKHR" category="enum"/>
+        <type name="VkPerformanceCounterStorageKHR" category="enum"/>
+        <type name="VkPerformanceCounterDescriptionFlagBitsKHR" category="enum"/>
+        <type name="VkAcquireProfilingLockFlagBitsKHR" category="enum"/>
+        <type name="VkSemaphoreWaitFlagBits" category="enum"/>
+        <type category="enum" name="VkSemaphoreWaitFlagBitsKHR"                    alias="VkSemaphoreWaitFlagBits"/>
+        <type name="VkPerformanceConfigurationTypeINTEL" category="enum"/>
+        <type name="VkQueryPoolSamplingModeINTEL" category="enum"/>
+        <type name="VkPerformanceOverrideTypeINTEL" category="enum"/>
+        <type name="VkPerformanceParameterTypeINTEL" category="enum"/>
+        <type name="VkPerformanceValueTypeINTEL" category="enum"/>
+        <type name="VkLineRasterizationModeEXT" category="enum"/>
+        <type name="VkShaderModuleCreateFlagBits" category="enum"/>
+        <type name="VkPipelineCompilerControlFlagBitsAMD" category="enum"/>
+        <type name="VkShaderCorePropertiesFlagBitsAMD" category="enum"/>
+        <type name="VkRefreshObjectFlagBitsKHR" category="enum"/>
+        <type name="VkFaultLevel" category="enum"/>
+        <type name="VkFaultType" category="enum"/>
+        <type name="VkFaultQueryBehavior" category="enum"/>
+        <type name="VkPipelineMatchControl" category="enum"/>
+        <type name="VkSciSyncClientTypeNV" category="enum"/>
+        <type name="VkSciSyncPrimitiveTypeNV" category="enum"/>
+        <type name="VkToolPurposeFlagBits" category="enum"/>
+        <type category="enum" name="VkToolPurposeFlagBitsEXT"                      alias="VkToolPurposeFlagBits"/>
+        <type name="VkFragmentShadingRateNV" category="enum"/>
+        <type name="VkFragmentShadingRateTypeNV" category="enum"/>
+        <type name="VkSubpassMergeStatusEXT" category="enum"/>
+        <type name="VkAccessFlagBits2" category="enum"/>
+        <type category="enum" name="VkAccessFlagBits2KHR"                          alias="VkAccessFlagBits2"/>
+        <type name="VkPipelineStageFlagBits2" category="enum"/>
+        <type category="enum" name="VkPipelineStageFlagBits2KHR"                   alias="VkPipelineStageFlagBits2"/>
+        <type name="VkProvokingVertexModeEXT" category="enum"/>
+        <type name="VkPipelineCacheValidationVersion" category="enum"/>
+        <type name="VkImageFormatConstraintsFlagBitsFUCHSIA" category="enum"/>
+        <type name="VkHostImageCopyFlagBitsEXT" category="enum"/>
+        <type name="VkImageConstraintsInfoFlagBitsFUCHSIA" category="enum"/>
+        <type name="VkFormatFeatureFlagBits2" category="enum"/>
+        <type category="enum" name="VkFormatFeatureFlagBits2KHR"                   alias="VkFormatFeatureFlagBits2"/>
+        <type name="VkRenderingFlagBits" category="enum"/>
+        <type category="enum" name="VkRenderingFlagBitsKHR"                        alias="VkRenderingFlagBits"/>
+        <type name="VkPipelineDepthStencilStateCreateFlagBits" category="enum"/>
+        <type name="VkPipelineColorBlendStateCreateFlagBits" category="enum"/>
+        <type name="VkImageCompressionFlagBitsEXT" category="enum"/>
+        <type name="VkImageCompressionFixedRateFlagBitsEXT" category="enum"/>
+        <type name="VkExportMetalObjectTypeFlagBitsEXT" category="enum"/>
+        <type name="VkPipelineRobustnessBufferBehaviorEXT" category="enum"/>
+        <type name="VkPipelineRobustnessImageBehaviorEXT" category="enum"/>
+        <type name="VkDeviceAddressBindingFlagBitsEXT" category="enum"/>
+        <type name="VkDeviceAddressBindingTypeEXT" category="enum"/>
+        <type name="VkMicromapTypeEXT" category="enum"/>
+        <type name="VkBuildMicromapModeEXT" category="enum"/>
+        <type name="VkCopyMicromapModeEXT" category="enum"/>
+        <type name="VkBuildMicromapFlagBitsEXT" category="enum"/>
+        <type name="VkMicromapCreateFlagBitsEXT" category="enum"/>
+        <type name="VkOpacityMicromapFormatEXT" category="enum"/>
+        <type name="VkOpacityMicromapSpecialIndexEXT" category="enum"/>
+        <type name="VkDeviceFaultVendorBinaryHeaderVersionEXT" category="enum"/>
+        <type name="VkFrameBoundaryFlagBitsEXT" category="enum"/>
+        <type name="VkMemoryDecompressionMethodFlagBitsNV" category="enum"/>
+        <type name="VkDepthBiasRepresentationEXT" category="enum"/>
+        <type name="VkDirectDriverLoadingModeLUNARG" category="enum"/>
+        <type name="VkPipelineCreateFlagBits2KHR" category="enum"/>
+        <type name="VkBufferUsageFlagBits2KHR" category="enum"/>
+        <type name="VkDisplacementMicromapFormatNV" category="enum"/>
+        <type name="VkShaderCreateFlagBitsEXT" category="enum"/>
+        <type name="VkShaderCodeTypeEXT" category="enum"/>
+        <type name="VkScopeKHR" category="enum"/>
+        <type name="VkComponentTypeKHR" category="enum"/>
+        <type category="enum" name="VkScopeNV"                                     alias="VkScopeKHR"/>
+        <type category="enum" name="VkComponentTypeNV"                             alias="VkComponentTypeKHR"/>
+        <type name="VkCubicFilterWeightsQCOM" category="enum"/>
+        <type name="VkBlockMatchWindowCompareModeQCOM" category="enum"/>
+        <type name="VkLayeredDriverUnderlyingApiMSFT" category="enum"/>
+
+            <comment>WSI extensions</comment>
+        <type name="VkColorSpaceKHR" category="enum"/>
+        <type name="VkCompositeAlphaFlagBitsKHR" category="enum"/>
+        <type name="VkDisplayPlaneAlphaFlagBitsKHR" category="enum"/>
+        <type name="VkPresentModeKHR" category="enum"/>
+        <type name="VkSurfaceTransformFlagBitsKHR" category="enum"/>
+        <type name="VkDebugReportFlagBitsEXT" category="enum"/>
+        <type name="VkDebugReportObjectTypeEXT" category="enum"/>
+        <type name="VkDeviceMemoryReportEventTypeEXT" category="enum"/>
+        <type name="VkRasterizationOrderAMD" category="enum"/>
+        <type name="VkExternalMemoryHandleTypeFlagBitsNV" category="enum"/>
+        <type name="VkExternalMemoryFeatureFlagBitsNV" category="enum"/>
+        <type name="VkValidationCheckEXT" category="enum"/>
+        <type name="VkValidationFeatureEnableEXT" category="enum"/>
+        <type name="VkValidationFeatureDisableEXT" category="enum"/>
+        <type name="VkExternalMemoryHandleTypeFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalMemoryHandleTypeFlagBitsKHR"         alias="VkExternalMemoryHandleTypeFlagBits"/>
+        <type name="VkExternalMemoryFeatureFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalMemoryFeatureFlagBitsKHR"            alias="VkExternalMemoryFeatureFlagBits"/>
+        <type name="VkExternalSemaphoreHandleTypeFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalSemaphoreHandleTypeFlagBitsKHR"      alias="VkExternalSemaphoreHandleTypeFlagBits"/>
+        <type name="VkExternalSemaphoreFeatureFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalSemaphoreFeatureFlagBitsKHR"         alias="VkExternalSemaphoreFeatureFlagBits"/>
+        <type name="VkSemaphoreImportFlagBits" category="enum"/>
+        <type category="enum" name="VkSemaphoreImportFlagBitsKHR"                  alias="VkSemaphoreImportFlagBits"/>
+        <type name="VkExternalFenceHandleTypeFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalFenceHandleTypeFlagBitsKHR"          alias="VkExternalFenceHandleTypeFlagBits"/>
+        <type name="VkExternalFenceFeatureFlagBits" category="enum"/>
+        <type category="enum" name="VkExternalFenceFeatureFlagBitsKHR"             alias="VkExternalFenceFeatureFlagBits"/>
+        <type name="VkFenceImportFlagBits" category="enum"/>
+        <type category="enum" name="VkFenceImportFlagBitsKHR"                      alias="VkFenceImportFlagBits"/>
+        <type name="VkSurfaceCounterFlagBitsEXT" category="enum"/>
+        <type name="VkDisplayPowerStateEXT" category="enum"/>
+        <type name="VkDeviceEventTypeEXT" category="enum"/>
+        <type name="VkDisplayEventTypeEXT" category="enum"/>
+        <type name="VkPeerMemoryFeatureFlagBits" category="enum"/>
+        <type category="enum" name="VkPeerMemoryFeatureFlagBitsKHR"                alias="VkPeerMemoryFeatureFlagBits"/>
+        <type name="VkMemoryAllocateFlagBits" category="enum"/>
+        <type category="enum" name="VkMemoryAllocateFlagBitsKHR"                   alias="VkMemoryAllocateFlagBits"/>
+        <type name="VkDeviceGroupPresentModeFlagBitsKHR" category="enum"/>
+        <type name="VkSwapchainCreateFlagBitsKHR" category="enum"/>
+        <type name="VkSubgroupFeatureFlagBits" category="enum"/>
+        <type name="VkTessellationDomainOrigin" category="enum"/>
+        <type category="enum" name="VkTessellationDomainOriginKHR"                 alias="VkTessellationDomainOrigin"/>
+        <type name="VkSamplerYcbcrModelConversion" category="enum"/>
+        <type category="enum" name="VkSamplerYcbcrModelConversionKHR"              alias="VkSamplerYcbcrModelConversion"/>
+        <type name="VkSamplerYcbcrRange" category="enum"/>
+        <type category="enum" name="VkSamplerYcbcrRangeKHR"                        alias="VkSamplerYcbcrRange"/>
+        <type name="VkChromaLocation" category="enum"/>
+        <type category="enum" name="VkChromaLocationKHR"                           alias="VkChromaLocation"/>
+        <type name="VkSamplerReductionMode" category="enum"/>
+        <type category="enum" name="VkSamplerReductionModeEXT"                     alias="VkSamplerReductionMode"/>
+        <type name="VkBlendOverlapEXT" category="enum"/>
+        <type name="VkDebugUtilsMessageSeverityFlagBitsEXT" category="enum"/>
+        <type name="VkDebugUtilsMessageTypeFlagBitsEXT" category="enum"/>
+        <type name="VkFullScreenExclusiveEXT" category="enum"/>
+        <type name="VkShaderFloatControlsIndependence" category="enum"/>
+        <type category="enum" name="VkShaderFloatControlsIndependenceKHR"          alias="VkShaderFloatControlsIndependence"/>
+        <type name="VkSwapchainImageUsageFlagBitsANDROID" category="enum"/>
+        <type name="VkFragmentShadingRateCombinerOpKHR" category="enum"/>
+        <type name="VkSubmitFlagBits" category="enum"/>
+        <type category="enum" name="VkSubmitFlagBitsKHR"                           alias="VkSubmitFlagBits"/>
+        <type name="VkGraphicsPipelineLibraryFlagBitsEXT" category="enum"/>
+        <type name="VkOpticalFlowGridSizeFlagBitsNV" category="enum"/>
+        <type name="VkOpticalFlowUsageFlagBitsNV" category="enum"/>
+        <type name="VkOpticalFlowPerformanceLevelNV" category="enum"/>
+        <type name="VkOpticalFlowSessionBindingPointNV" category="enum"/>
+        <type name="VkOpticalFlowSessionCreateFlagBitsNV" category="enum"/>
+        <type name="VkOpticalFlowExecuteFlagBitsNV" category="enum"/>
+        <type name="VkDeviceFaultAddressTypeEXT" category="enum"/>
+        <type name="VkPresentScalingFlagBitsEXT" category="enum"/>
+        <type name="VkPresentGravityFlagBitsEXT" category="enum"/>
+        <type name="VkLatencyMarkerNV" category="enum"/>
+        <type name="VkOutOfBandQueueTypeNV" category="enum"/>
+        <type name="VkPhysicalDeviceSchedulingControlsFlagBitsARM" category="enum"/>
+
+            <comment>Enumerated types in the header, but not used by the API</comment>
+        <type name="VkVendorId" category="enum"/>
+        <type name="VkDriverId" category="enum"/>
+        <type category="enum" name="VkDriverIdKHR"                                 alias="VkDriverId"/>
+        <type name="VkShadingRatePaletteEntryNV" category="enum"/>
+        <type name="VkCoarseSampleOrderTypeNV" category="enum"/>
+        <type name="VkPipelineExecutableStatisticFormatKHR" category="enum"/>
+
+            <comment>Video Core extensions</comment>
+        <type name="VkVideoCodecOperationFlagBitsKHR" category="enum"/>
+        <type name="VkVideoChromaSubsamplingFlagBitsKHR" category="enum"/>
+        <type name="VkVideoComponentBitDepthFlagBitsKHR" category="enum"/>
+        <type name="VkVideoCapabilityFlagBitsKHR" category="enum"/>
+        <type name="VkVideoSessionCreateFlagBitsKHR" category="enum"/>
+        <type name="VkVideoCodingControlFlagBitsKHR" category="enum"/>
+        <type name="VkQueryResultStatusKHR" category="enum"/>
+
+            <comment>Video Decode extensions</comment>
+        <type name="VkVideoDecodeUsageFlagBitsKHR" category="enum"/>
+        <type name="VkVideoDecodeCapabilityFlagBitsKHR" category="enum"/>
+
+            <comment>Video H.264 Decode extensions</comment>
+        <type name="VkVideoDecodeH264PictureLayoutFlagBitsKHR" category="enum"/>
+
+            <comment>Video H.265 Decode extensions</comment>
+
+            <comment>Video Encode extensions</comment>
+        <type name="VkVideoEncodeUsageFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeContentFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeTuningModeKHR" category="enum"/>
+        <type name="VkVideoEncodeCapabilityFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeFeedbackFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeRateControlModeFlagBitsKHR" category="enum"/>
+
+           <comment>Video H.264 Encode extensions</comment>
+        <type name="VkVideoEncodeH264CapabilityFlagBitsEXT"             category="enum"/>
+        <type name="VkVideoEncodeH264StdFlagBitsEXT"                    category="enum"/>
+        <type name="VkVideoEncodeH264RateControlFlagBitsEXT"            category="enum"/>
+
+           <comment>Video H.265 Encode extensions</comment>
+        <type name="VkVideoEncodeH265CapabilityFlagBitsEXT"             category="enum"/>
+        <type name="VkVideoEncodeH265StdFlagBitsEXT"                    category="enum"/>
+        <type name="VkVideoEncodeH265RateControlFlagBitsEXT"            category="enum"/>
+        <type name="VkVideoEncodeH265CtbSizeFlagBitsEXT"                category="enum"/>
+        <type name="VkVideoEncodeH265TransformBlockSizeFlagBitsEXT"     category="enum"/>
+
+        <comment>The PFN_vk*Function types are used by VkAllocationCallbacks below</comment>
+        <type category="funcpointer">typedef void (VKAPI_PTR *<name>PFN_vkInternalAllocationNotification</name>)(
+    <type>void</type>*                                       pUserData,
+    <type>size_t</type>                                      size,
+    <type>VkInternalAllocationType</type>                    allocationType,
+    <type>VkSystemAllocationScope</type>                     allocationScope);</type>
+        <type category="funcpointer">typedef void (VKAPI_PTR *<name>PFN_vkInternalFreeNotification</name>)(
+    <type>void</type>*                                       pUserData,
+    <type>size_t</type>                                      size,
+    <type>VkInternalAllocationType</type>                    allocationType,
+    <type>VkSystemAllocationScope</type>                     allocationScope);</type>
+        <type category="funcpointer">typedef void* (VKAPI_PTR *<name>PFN_vkReallocationFunction</name>)(
+    <type>void</type>*                                       pUserData,
+    <type>void</type>*                                       pOriginal,
+    <type>size_t</type>                                      size,
+    <type>size_t</type>                                      alignment,
+    <type>VkSystemAllocationScope</type>                     allocationScope);</type>
+        <type category="funcpointer">typedef void* (VKAPI_PTR *<name>PFN_vkAllocationFunction</name>)(
+    <type>void</type>*                                       pUserData,
+    <type>size_t</type>                                      size,
+    <type>size_t</type>                                      alignment,
+    <type>VkSystemAllocationScope</type>                     allocationScope);</type>
+        <type category="funcpointer">typedef void (VKAPI_PTR *<name>PFN_vkFreeFunction</name>)(
+    <type>void</type>*                                       pUserData,
+    <type>void</type>*                                       pMemory);</type>
+
+            <comment>The PFN_vkVoidFunction type are used by VkGet*ProcAddr below</comment>
+        <type category="funcpointer">typedef void (VKAPI_PTR *<name>PFN_vkVoidFunction</name>)(void);</type>
+
+            <comment>The PFN_vkDebugReportCallbackEXT type are used by the DEBUG_REPORT extension</comment>
+        <type category="funcpointer">typedef VkBool32 (VKAPI_PTR *<name>PFN_vkDebugReportCallbackEXT</name>)(
+    <type>VkDebugReportFlagsEXT</type>                       flags,
+    <type>VkDebugReportObjectTypeEXT</type>                  objectType,
+    <type>uint64_t</type>                                    object,
+    <type>size_t</type>                                      location,
+    <type>int32_t</type>                                     messageCode,
+    const <type>char</type>*                                 pLayerPrefix,
+    const <type>char</type>*                                 pMessage,
+    <type>void</type>*                                       pUserData);</type>
+
+            <comment>The PFN_vkDebugUtilsMessengerCallbackEXT type are used by the VK_EXT_debug_utils extension</comment>
+        <type category="funcpointer" requires="VkDebugUtilsMessengerCallbackDataEXT">typedef VkBool32 (VKAPI_PTR *<name>PFN_vkDebugUtilsMessengerCallbackEXT</name>)(
+    <type>VkDebugUtilsMessageSeverityFlagBitsEXT</type>           messageSeverity,
+    <type>VkDebugUtilsMessageTypeFlagsEXT</type>                  messageTypes,
+    const <type>VkDebugUtilsMessengerCallbackDataEXT</type>*      pCallbackData,
+    <type>void</type>*                                            pUserData);</type>
+
+            <comment>The PFN_vkFaultCallbackFunction type is used by VKSC_VERSION_1_0</comment>
+        <type category="funcpointer">typedef void (VKAPI_PTR *<name>PFN_vkFaultCallbackFunction</name>)(
+    <type>VkBool32</type>                                    unrecordedFaults,
+    <type>uint32_t</type>                                    faultCount,
+    const <type>VkFaultData</type>*                          pFaults);</type>
+
+            <comment>The PFN_vkDeviceMemoryReportCallbackEXT type is used by the VK_EXT_device_memory_report extension</comment>
+        <type category="funcpointer" requires="VkDeviceMemoryReportCallbackDataEXT">typedef void (VKAPI_PTR *<name>PFN_vkDeviceMemoryReportCallbackEXT</name>)(
+    const <type>VkDeviceMemoryReportCallbackDataEXT</type>*  pCallbackData,
+    <type>void</type>*                                       pUserData);</type>
+
+            <comment>The PFN_vkGetInstanceProcAddrLUNARG type is used by the
+                     VkDirectDriverLoadingInfoLUNARG structure.
+                     We cannot introduce an explicit dependency on the
+                     equivalent PFN_vkGetInstanceProcAddr type, even though
+                     it is implicitly generated in the C header, because
+                     that results in multiple definitions.</comment>
+        <type category="funcpointer" requires="VkInstance">typedef PFN_vkVoidFunction (VKAPI_PTR *<name>PFN_vkGetInstanceProcAddrLUNARG</name>)(
+    <type>VkInstance</type> instance, const <type>char</type>* pName);</type>
+
+            <comment>Struct types</comment>
+        <type category="struct" name="VkBaseOutStructure">
+            <member><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">struct <type>VkBaseOutStructure</type>* <name>pNext</name></member>
+        </type>
+        <type category="struct" name="VkBaseInStructure">
+            <member><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const struct <type>VkBaseInStructure</type>* <name>pNext</name></member>
+        </type>
+        <type category="struct" name="VkOffset2D">
+            <member><type>int32_t</type>        <name>x</name></member>
+            <member><type>int32_t</type>        <name>y</name></member>
+        </type>
+        <type category="struct" name="VkOffset3D">
+            <member><type>int32_t</type>        <name>x</name></member>
+            <member><type>int32_t</type>        <name>y</name></member>
+            <member><type>int32_t</type>        <name>z</name></member>
+        </type>
+        <type category="struct" name="VkExtent2D">
+            <member><type>uint32_t</type>        <name>width</name></member>
+            <member><type>uint32_t</type>        <name>height</name></member>
+        </type>
+        <type category="struct" name="VkExtent3D">
+            <member><type>uint32_t</type>        <name>width</name></member>
+            <member><type>uint32_t</type>        <name>height</name></member>
+            <member><type>uint32_t</type>        <name>depth</name></member>
+        </type>
+        <type category="struct" name="VkViewport">
+            <member noautovalidity="true"><type>float</type> <name>x</name></member>
+            <member noautovalidity="true"><type>float</type> <name>y</name></member>
+            <member noautovalidity="true"><type>float</type> <name>width</name></member>
+            <member noautovalidity="true"><type>float</type> <name>height</name></member>
+            <member><type>float</type>                       <name>minDepth</name></member>
+            <member><type>float</type>                       <name>maxDepth</name></member>
+        </type>
+        <type category="struct" name="VkRect2D">
+            <member><type>VkOffset2D</type>     <name>offset</name></member>
+            <member><type>VkExtent2D</type>     <name>extent</name></member>
+        </type>
+        <type category="struct" name="VkClearRect">
+            <member><type>VkRect2D</type>       <name>rect</name></member>
+            <member><type>uint32_t</type>       <name>baseArrayLayer</name></member>
+            <member><type>uint32_t</type>       <name>layerCount</name></member>
+        </type>
+        <type category="struct" name="VkComponentMapping">
+            <member><type>VkComponentSwizzle</type> <name>r</name></member>
+            <member><type>VkComponentSwizzle</type> <name>g</name></member>
+            <member><type>VkComponentSwizzle</type> <name>b</name></member>
+            <member><type>VkComponentSwizzle</type> <name>a</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProperties" returnedonly="true">
+            <member limittype="noauto"><type>uint32_t</type>       <name>apiVersion</name></member>
+            <member limittype="noauto"><type>uint32_t</type>       <name>driverVersion</name></member>
+            <member limittype="noauto"><type>uint32_t</type>       <name>vendorID</name></member>
+            <member limittype="noauto"><type>uint32_t</type>       <name>deviceID</name></member>
+            <member limittype="noauto"><type>VkPhysicalDeviceType</type> <name>deviceType</name></member>
+            <member limittype="noauto"><type>char</type>           <name>deviceName</name>[<enum>VK_MAX_PHYSICAL_DEVICE_NAME_SIZE</enum>]</member>
+            <member limittype="noauto"><type>uint8_t</type>        <name>pipelineCacheUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="struct"><type>VkPhysicalDeviceLimits</type> <name>limits</name></member>
+            <member limittype="struct"><type>VkPhysicalDeviceSparseProperties</type> <name>sparseProperties</name></member>
+        </type>
+        <type category="struct" name="VkExtensionProperties" returnedonly="true">
+            <member><type>char</type>            <name>extensionName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>extension name</comment></member>
+            <member><type>uint32_t</type>        <name>specVersion</name><comment>version of the extension specification implemented</comment></member>
+        </type>
+        <type category="struct" name="VkLayerProperties" returnedonly="true">
+            <member><type>char</type>            <name>layerName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>layer name</comment></member>
+            <member><type>uint32_t</type>        <name>specVersion</name><comment>version of the layer specification implemented</comment></member>
+            <member><type>uint32_t</type>        <name>implementationVersion</name><comment>build or release version of the layer's library</comment></member>
+            <member><type>char</type>            <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the layer</comment></member>
+        </type>
+        <type category="struct" name="VkApplicationInfo">
+            <member values="VK_STRUCTURE_TYPE_APPLICATION_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*     <name>pApplicationName</name></member>
+            <member><type>uint32_t</type>        <name>applicationVersion</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*     <name>pEngineName</name></member>
+            <member><type>uint32_t</type>        <name>engineVersion</name></member>
+            <member><type>uint32_t</type>        <name>apiVersion</name></member>
+        </type>
+        <type category="struct" name="VkAllocationCallbacks">
+            <member optional="true"><type>void</type>*           <name>pUserData</name></member>
+            <member noautovalidity="true"><type>PFN_vkAllocationFunction</type>   <name>pfnAllocation</name></member>
+            <member noautovalidity="true"><type>PFN_vkReallocationFunction</type> <name>pfnReallocation</name></member>
+            <member noautovalidity="true"><type>PFN_vkFreeFunction</type>    <name>pfnFree</name></member>
+            <member optional="true" noautovalidity="true"><type>PFN_vkInternalAllocationNotification</type> <name>pfnInternalAllocation</name></member>
+            <member optional="true" noautovalidity="true"><type>PFN_vkInternalFreeNotification</type> <name>pfnInternalFree</name></member>
+        </type>
+        <type category="struct" name="VkDeviceQueueCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member optional="true"><type>VkDeviceQueueCreateFlags</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>        <name>queueFamilyIndex</name></member>
+            <member><type>uint32_t</type>        <name>queueCount</name></member>
+            <member len="queueCount">const <type>float</type>*    <name>pQueuePriorities</name></member>
+        </type>
+        <type category="struct" name="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member optional="true"><type>VkDeviceCreateFlags</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>        <name>queueCreateInfoCount</name></member>
+            <member len="queueCreateInfoCount">const <type>VkDeviceQueueCreateInfo</type>* <name>pQueueCreateInfos</name></member>
+            <member optional="true" deprecated="ignored"><type>uint32_t</type>               <name>enabledLayerCount</name></member>
+            <member len="enabledLayerCount,null-terminated" deprecated="ignored">const <type>char</type>* const*      <name>ppEnabledLayerNames</name><comment>Ordered list of layer names to be enabled</comment></member>
+            <member optional="true"><type>uint32_t</type>               <name>enabledExtensionCount</name></member>
+            <member len="enabledExtensionCount,null-terminated">const <type>char</type>* const*      <name>ppEnabledExtensionNames</name></member>
+            <member optional="true">const <type>VkPhysicalDeviceFeatures</type>* <name>pEnabledFeatures</name></member>
+        </type>
+        <type category="struct" name="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member optional="true"><type>VkInstanceCreateFlags</type>  <name>flags</name></member>
+            <member optional="true">const <type>VkApplicationInfo</type>* <name>pApplicationInfo</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>enabledLayerCount</name></member>
+            <member len="enabledLayerCount,null-terminated">const <type>char</type>* const*      <name>ppEnabledLayerNames</name><comment>Ordered list of layer names to be enabled</comment></member>
+            <member optional="true"><type>uint32_t</type>               <name>enabledExtensionCount</name></member>
+            <member len="enabledExtensionCount,null-terminated">const <type>char</type>* const*      <name>ppEnabledExtensionNames</name><comment>Extension names to be enabled</comment></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyProperties" returnedonly="true">
+            <member optional="true" limittype="bitmask"><type>VkQueueFlags</type>           <name>queueFlags</name><comment>Queue flags</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>queueCount</name></member>
+            <member limittype="bits"><type>uint32_t</type>               <name>timestampValidBits</name></member>
+            <member limittype="min,mul"><type>VkExtent3D</type>             <name>minImageTransferGranularity</name><comment>Minimum alignment requirement for image transfers</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryProperties" returnedonly="true">
+            <member><type>uint32_t</type>               <name>memoryTypeCount</name></member>
+            <member><type>VkMemoryType</type>           <name>memoryTypes</name>[<enum>VK_MAX_MEMORY_TYPES</enum>]</member>
+            <member><type>uint32_t</type>               <name>memoryHeapCount</name></member>
+            <member><type>VkMemoryHeap</type>           <name>memoryHeaps</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member>
+        </type>
+        <type category="struct" name="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>           <name>allocationSize</name><comment>Size of memory allocation</comment></member>
+            <member><type>uint32_t</type>               <name>memoryTypeIndex</name><comment>Index of the of the memory type to allocate from</comment></member>
+        </type>
+        <type category="struct" name="VkMemoryRequirements" returnedonly="true">
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>alignment</name><comment>Specified in bytes</comment></member>
+            <member><type>uint32_t</type>               <name>memoryTypeBits</name><comment>Bitmask of the allowed memory type indices into memoryTypes[] for this object</comment></member>
+        </type>
+        <type category="struct" name="VkSparseImageFormatProperties" returnedonly="true">
+            <member limittype="bitmask" optional="true"><type>VkImageAspectFlags</type>       <name>aspectMask</name></member>
+            <member limittype="min,mul"><type>VkExtent3D</type>                                <name>imageGranularity</name></member>
+            <member limittype="bitmask" optional="true"><type>VkSparseImageFormatFlags</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageMemoryRequirements" returnedonly="true">
+            <member><type>VkSparseImageFormatProperties</type> <name>formatProperties</name></member>
+            <member><type>uint32_t</type>               <name>imageMipTailFirstLod</name></member>
+            <member><type>VkDeviceSize</type>           <name>imageMipTailSize</name><comment>Specified in bytes, must be a multiple of sparse block size in bytes / alignment</comment></member>
+            <member><type>VkDeviceSize</type>           <name>imageMipTailOffset</name><comment>Specified in bytes, must be a multiple of sparse block size in bytes / alignment</comment></member>
+            <member><type>VkDeviceSize</type>           <name>imageMipTailStride</name><comment>Specified in bytes, must be a multiple of sparse block size in bytes / alignment</comment></member>
+        </type>
+        <type category="struct" name="VkMemoryType" returnedonly="true">
+            <member optional="true"><type>VkMemoryPropertyFlags</type>  <name>propertyFlags</name><comment>Memory properties of this memory type</comment></member>
+            <member><type>uint32_t</type>               <name>heapIndex</name><comment>Index of the memory heap allocations of this memory type are taken from</comment></member>
+        </type>
+        <type category="struct" name="VkMemoryHeap" returnedonly="true">
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Available memory in the heap</comment></member>
+            <member optional="true"><type>VkMemoryHeapFlags</type>      <name>flags</name><comment>Flags for the heap</comment></member>
+        </type>
+        <type category="struct" name="VkMappedMemoryRange">
+            <member values="VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>         <name>memory</name><comment>Mapped memory object</comment></member>
+            <member><type>VkDeviceSize</type>           <name>offset</name><comment>Offset within the memory object where the range starts</comment></member>
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Size of the range within the memory object</comment></member>
+        </type>
+        <type category="struct" name="VkFormatProperties" returnedonly="true">
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags</type>   <name>linearTilingFeatures</name><comment>Format features in case of linear tiling</comment></member>
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags</type>   <name>optimalTilingFeatures</name><comment>Format features in case of optimal tiling</comment></member>
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags</type>   <name>bufferFeatures</name><comment>Format features supported by buffers</comment></member>
+        </type>
+        <type category="struct" name="VkImageFormatProperties" returnedonly="true">
+            <member><type>VkExtent3D</type>             <name>maxExtent</name><comment>max image dimensions for this resource type</comment></member>
+            <member><type>uint32_t</type>               <name>maxMipLevels</name><comment>max number of mipmap levels for this resource type</comment></member>
+            <member><type>uint32_t</type>               <name>maxArrayLayers</name><comment>max array size for this resource type</comment></member>
+            <member optional="true"><type>VkSampleCountFlags</type>     <name>sampleCounts</name><comment>supported sample counts for this resource type</comment></member>
+            <member><type>VkDeviceSize</type>           <name>maxResourceSize</name><comment>max size (in bytes) of this resource type</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorBufferInfo">
+            <member optional="true"><type>VkBuffer</type>               <name>buffer</name><comment>Buffer used for this descriptor slot.</comment></member>
+            <member><type>VkDeviceSize</type>           <name>offset</name><comment>Base offset from buffer start in bytes to update in the descriptor set.</comment></member>
+            <member><type>VkDeviceSize</type>           <name>range</name><comment>Size in bytes of the buffer resource for this descriptor update.</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorImageInfo">
+            <member noautovalidity="true"><type>VkSampler</type>       <name>sampler</name><comment>Sampler to write to the descriptor in case it is a SAMPLER or COMBINED_IMAGE_SAMPLER descriptor. Ignored otherwise.</comment></member>
+            <member noautovalidity="true"><type>VkImageView</type>     <name>imageView</name><comment>Image view to write to the descriptor in case it is a SAMPLED_IMAGE, STORAGE_IMAGE, COMBINED_IMAGE_SAMPLER, or INPUT_ATTACHMENT descriptor. Ignored otherwise.</comment></member>
+            <member noautovalidity="true"><type>VkImageLayout</type>   <name>imageLayout</name><comment>Layout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE).</comment></member>
+        </type>
+        <type category="struct" name="VkWriteDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkDescriptorSet</type>        <name>dstSet</name><comment>Destination descriptor set</comment></member>
+            <member><type>uint32_t</type>               <name>dstBinding</name><comment>Binding within the destination descriptor set to write</comment></member>
+            <member><type>uint32_t</type>               <name>dstArrayElement</name><comment>Array element within the destination binding to write</comment></member>
+            <member><type>uint32_t</type>               <name>descriptorCount</name><comment>Number of descriptors to write (determines the size of the array pointed by pDescriptors)</comment></member>
+            <member><type>VkDescriptorType</type>       <name>descriptorType</name><comment>Descriptor type to write (determines which members of the array pointed by pDescriptors are going to be used)</comment></member>
+            <member noautovalidity="true" len="descriptorCount">const <type>VkDescriptorImageInfo</type>* <name>pImageInfo</name><comment>Sampler, image view, and layout for SAMPLER, COMBINED_IMAGE_SAMPLER, {SAMPLED,STORAGE}_IMAGE, and INPUT_ATTACHMENT descriptor types.</comment></member>
+            <member noautovalidity="true" len="descriptorCount">const <type>VkDescriptorBufferInfo</type>* <name>pBufferInfo</name><comment>Raw buffer, size, and offset for {UNIFORM,STORAGE}_BUFFER[_DYNAMIC] descriptor types.</comment></member>
+            <member noautovalidity="true" len="descriptorCount">const <type>VkBufferView</type>*    <name>pTexelBufferView</name><comment>Buffer view to write to the descriptor for {UNIFORM,STORAGE}_TEXEL_BUFFER descriptor types.</comment></member>
+        </type>
+        <type category="struct" name="VkCopyDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDescriptorSet</type>        <name>srcSet</name><comment>Source descriptor set</comment></member>
+            <member><type>uint32_t</type>               <name>srcBinding</name><comment>Binding within the source descriptor set to copy from</comment></member>
+            <member><type>uint32_t</type>               <name>srcArrayElement</name><comment>Array element within the source binding to copy from</comment></member>
+            <member><type>VkDescriptorSet</type>        <name>dstSet</name><comment>Destination descriptor set</comment></member>
+            <member><type>uint32_t</type>               <name>dstBinding</name><comment>Binding within the destination descriptor set to copy to</comment></member>
+            <member><type>uint32_t</type>               <name>dstArrayElement</name><comment>Array element within the destination binding to copy to</comment></member>
+            <member><type>uint32_t</type>               <name>descriptorCount</name><comment>Number of descriptors to write (determines the size of the array pointed by pDescriptors)</comment></member>
+        </type>
+        <type category="struct" name="VkBufferUsageFlags2CreateInfoKHR" structextends="VkBufferViewCreateInfo,VkBufferCreateInfo,VkPhysicalDeviceExternalBufferInfo,VkDescriptorBufferBindingInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBufferUsageFlags2KHR</type>         <name>usage</name></member>
+        </type>
+        <type category="struct" name="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkBufferCreateFlags</type>    <name>flags</name><comment>Buffer creation flags</comment></member>
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Specified in bytes</comment></member>
+            <member noautovalidity="true"><type>VkBufferUsageFlags</type>     <name>usage</name><comment>Buffer usage flags</comment></member>
+            <member><type>VkSharingMode</type>          <name>sharingMode</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>queueFamilyIndexCount</name></member>
+            <member noautovalidity="true" len="queueFamilyIndexCount">const <type>uint32_t</type>*        <name>pQueueFamilyIndices</name></member>
+        </type>
+        <type category="struct" name="VkBufferViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkBufferViewCreateFlags</type> <name>flags</name></member>
+            <member><type>VkBuffer</type>               <name>buffer</name></member>
+            <member><type>VkFormat</type>               <name>format</name><comment>Optionally specifies format of elements</comment></member>
+            <member><type>VkDeviceSize</type>           <name>offset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>range</name><comment>View size specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkImageSubresource">
+            <member><type>VkImageAspectFlags</type>     <name>aspectMask</name></member>
+            <member><type>uint32_t</type>               <name>mipLevel</name></member>
+            <member><type>uint32_t</type>               <name>arrayLayer</name></member>
+        </type>
+        <type category="struct" name="VkImageSubresourceLayers">
+            <member><type>VkImageAspectFlags</type>     <name>aspectMask</name></member>
+            <member><type>uint32_t</type>               <name>mipLevel</name></member>
+            <member><type>uint32_t</type>               <name>baseArrayLayer</name></member>
+            <member><type>uint32_t</type>               <name>layerCount</name></member>
+        </type>
+        <type category="struct" name="VkImageSubresourceRange">
+            <member><type>VkImageAspectFlags</type>     <name>aspectMask</name></member>
+            <member><type>uint32_t</type>               <name>baseMipLevel</name></member>
+            <member><type>uint32_t</type>               <name>levelCount</name></member>
+            <member><type>uint32_t</type>               <name>baseArrayLayer</name></member>
+            <member><type>uint32_t</type>               <name>layerCount</name></member>
+        </type>
+        <type category="struct" name="VkMemoryBarrier">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkAccessFlags</type>          <name>srcAccessMask</name><comment>Memory accesses from the source of the dependency to synchronize</comment></member>
+            <member optional="true"><type>VkAccessFlags</type>          <name>dstAccessMask</name><comment>Memory accesses from the destination of the dependency to synchronize</comment></member>
+        </type>
+        <type category="struct" name="VkBufferMemoryBarrier">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkAccessFlags</type>          <name>srcAccessMask</name><comment>Memory accesses from the source of the dependency to synchronize</comment></member>
+            <member noautovalidity="true"><type>VkAccessFlags</type>          <name>dstAccessMask</name><comment>Memory accesses from the destination of the dependency to synchronize</comment></member>
+            <member><type>uint32_t</type>               <name>srcQueueFamilyIndex</name><comment>Queue family to transition ownership from</comment></member>
+            <member><type>uint32_t</type>               <name>dstQueueFamilyIndex</name><comment>Queue family to transition ownership to</comment></member>
+            <member><type>VkBuffer</type>               <name>buffer</name><comment>Buffer to sync</comment></member>
+            <member><type>VkDeviceSize</type>           <name>offset</name><comment>Offset within the buffer to sync</comment></member>
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Amount of bytes to sync</comment></member>
+        </type>
+        <type category="struct" name="VkImageMemoryBarrier">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkAccessFlags</type>          <name>srcAccessMask</name><comment>Memory accesses from the source of the dependency to synchronize</comment></member>
+            <member noautovalidity="true"><type>VkAccessFlags</type>          <name>dstAccessMask</name><comment>Memory accesses from the destination of the dependency to synchronize</comment></member>
+            <member><type>VkImageLayout</type>          <name>oldLayout</name><comment>Current layout of the image</comment></member>
+            <member><type>VkImageLayout</type>          <name>newLayout</name><comment>New layout to transition the image to</comment></member>
+            <member><type>uint32_t</type>               <name>srcQueueFamilyIndex</name><comment>Queue family to transition ownership from</comment></member>
+            <member><type>uint32_t</type>               <name>dstQueueFamilyIndex</name><comment>Queue family to transition ownership to</comment></member>
+            <member><type>VkImage</type>                <name>image</name><comment>Image to sync</comment></member>
+            <member><type>VkImageSubresourceRange</type> <name>subresourceRange</name><comment>Subresource range to sync</comment></member>
+        </type>
+        <type category="struct" name="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkImageCreateFlags</type>     <name>flags</name><comment>Image creation flags</comment></member>
+            <member><type>VkImageType</type>            <name>imageType</name></member>
+            <member><type>VkFormat</type>               <name>format</name></member>
+            <member><type>VkExtent3D</type>             <name>extent</name></member>
+            <member><type>uint32_t</type>               <name>mipLevels</name></member>
+            <member><type>uint32_t</type>               <name>arrayLayers</name></member>
+            <member><type>VkSampleCountFlagBits</type>  <name>samples</name></member>
+            <member><type>VkImageTiling</type>          <name>tiling</name></member>
+            <member><type>VkImageUsageFlags</type>      <name>usage</name><comment>Image usage flags</comment></member>
+            <member><type>VkSharingMode</type>          <name>sharingMode</name><comment>Cross-queue-family sharing mode</comment></member>
+            <member optional="true"><type>uint32_t</type>               <name>queueFamilyIndexCount</name><comment>Number of queue families to share across</comment></member>
+            <member noautovalidity="true" len="queueFamilyIndexCount">const <type>uint32_t</type>*        <name>pQueueFamilyIndices</name><comment>Array of queue family indices to share across</comment></member>
+            <member><type>VkImageLayout</type>          <name>initialLayout</name><comment>Initial image layout for all subresources</comment></member>
+        </type>
+        <type category="struct" name="VkSubresourceLayout">
+            <member><type>VkDeviceSize</type>           <name>offset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>rowPitch</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>arrayPitch</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>depthPitch</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkImageViewCreateFlags</type> <name>flags</name></member>
+            <member><type>VkImage</type>                <name>image</name></member>
+            <member><type>VkImageViewType</type>        <name>viewType</name></member>
+            <member><type>VkFormat</type>               <name>format</name></member>
+            <member><type>VkComponentMapping</type>     <name>components</name></member>
+            <member><type>VkImageSubresourceRange</type> <name>subresourceRange</name></member>
+        </type>
+        <type category="struct" name="VkBufferCopy">
+            <member><type>VkDeviceSize</type>                       <name>srcOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>                       <name>dstOffset</name><comment>Specified in bytes</comment></member>
+            <member noautovalidity="true"><type>VkDeviceSize</type> <name>size</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkSparseMemoryBind">
+            <member><type>VkDeviceSize</type>           <name>resourceOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>           <name>size</name><comment>Specified in bytes</comment></member>
+            <member optional="true"><type>VkDeviceMemory</type>         <name>memory</name></member>
+            <member><type>VkDeviceSize</type>           <name>memoryOffset</name><comment>Specified in bytes</comment></member>
+            <member optional="true"><type>VkSparseMemoryBindFlags</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageMemoryBind">
+            <member><type>VkImageSubresource</type>     <name>subresource</name></member>
+            <member><type>VkOffset3D</type>             <name>offset</name></member>
+            <member><type>VkExtent3D</type>             <name>extent</name></member>
+            <member optional="true"><type>VkDeviceMemory</type>         <name>memory</name></member>
+            <member><type>VkDeviceSize</type>           <name>memoryOffset</name><comment>Specified in bytes</comment></member>
+            <member optional="true"><type>VkSparseMemoryBindFlags</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkSparseBufferMemoryBindInfo">
+            <member><type>VkBuffer</type> <name>buffer</name></member>
+            <member><type>uint32_t</type>               <name>bindCount</name></member>
+            <member len="bindCount">const <type>VkSparseMemoryBind</type>* <name>pBinds</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageOpaqueMemoryBindInfo">
+            <member><type>VkImage</type> <name>image</name></member>
+            <member><type>uint32_t</type>               <name>bindCount</name></member>
+            <member len="bindCount">const <type>VkSparseMemoryBind</type>* <name>pBinds</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageMemoryBindInfo">
+            <member><type>VkImage</type> <name>image</name></member>
+            <member><type>uint32_t</type>               <name>bindCount</name></member>
+            <member len="bindCount">const <type>VkSparseImageMemoryBind</type>* <name>pBinds</name></member>
+        </type>
+        <type category="struct" name="VkBindSparseInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>waitSemaphoreCount</name></member>
+            <member len="waitSemaphoreCount">const <type>VkSemaphore</type>*     <name>pWaitSemaphores</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>bufferBindCount</name></member>
+            <member len="bufferBindCount">const <type>VkSparseBufferMemoryBindInfo</type>* <name>pBufferBinds</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>imageOpaqueBindCount</name></member>
+            <member len="imageOpaqueBindCount">const <type>VkSparseImageOpaqueMemoryBindInfo</type>* <name>pImageOpaqueBinds</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>imageBindCount</name></member>
+            <member len="imageBindCount">const <type>VkSparseImageMemoryBindInfo</type>* <name>pImageBinds</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>signalSemaphoreCount</name></member>
+            <member len="signalSemaphoreCount">const <type>VkSemaphore</type>*     <name>pSignalSemaphores</name></member>
+        </type>
+        <type category="struct" name="VkImageCopy">
+            <member><type>VkImageSubresourceLayers</type> <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>srcOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkImageSubresourceLayers</type> <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>dstOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkExtent3D</type>             <name>extent</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkImageBlit">
+            <member><type>VkImageSubresourceLayers</type> <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>srcOffsets</name>[2]<comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkImageSubresourceLayers</type> <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>dstOffsets</name>[2]<comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkBufferImageCopy">
+            <member><type>VkDeviceSize</type>           <name>bufferOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>uint32_t</type>               <name>bufferRowLength</name><comment>Specified in texels</comment></member>
+            <member><type>uint32_t</type>               <name>bufferImageHeight</name></member>
+            <member><type>VkImageSubresourceLayers</type> <name>imageSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>imageOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkExtent3D</type>             <name>imageExtent</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkCopyMemoryIndirectCommandNV">
+            <member><type>VkDeviceAddress</type>                <name>srcAddress</name></member>
+            <member><type>VkDeviceAddress</type>                <name>dstAddress</name></member>
+            <member><type>VkDeviceSize</type>                   <name>size</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkCopyMemoryToImageIndirectCommandNV">
+            <member><type>VkDeviceAddress</type>                <name>srcAddress</name></member>
+            <member><type>uint32_t</type>                       <name>bufferRowLength</name><comment>Specified in texels</comment></member>
+            <member><type>uint32_t</type>                       <name>bufferImageHeight</name></member>
+            <member><type>VkImageSubresourceLayers</type>       <name>imageSubresource</name></member>
+            <member><type>VkOffset3D</type>                     <name>imageOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkExtent3D</type>                     <name>imageExtent</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkImageResolve">
+            <member><type>VkImageSubresourceLayers</type> <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>srcOffset</name></member>
+            <member><type>VkImageSubresourceLayers</type> <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>             <name>dstOffset</name></member>
+            <member><type>VkExtent3D</type>             <name>extent</name></member>
+        </type>
+        <type category="struct" name="VkShaderModuleCreateInfo" structextends="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true">const <type>void</type>*            <name>pNext</name><comment>noautovalidity because this structure can be either an explicit parameter, or passed in a pNext chain</comment></member>
+            <member optional="true"><type>VkShaderModuleCreateFlags</type> <name>flags</name></member>
+            <member><type>size_t</type>                 <name>codeSize</name><comment>Specified in bytes</comment></member>
+            <member len="latexmath:[\textrm{codeSize} \over 4]" altlen="codeSize / 4">const <type>uint32_t</type>*            <name>pCode</name><comment>Binary code of size codeSize</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutBinding">
+            <member><type>uint32_t</type>               <name>binding</name><comment>Binding number for this entry</comment></member>
+            <member><type>VkDescriptorType</type>       <name>descriptorType</name><comment>Type of the descriptors in this binding</comment></member>
+            <member optional="true"><type>uint32_t</type> <name>descriptorCount</name><comment>Number of descriptors in this binding</comment></member>
+            <member noautovalidity="true"><type>VkShaderStageFlags</type>     <name>stageFlags</name><comment>Shader stages this binding is visible to</comment></member>
+            <member noautovalidity="true" optional="true" len="descriptorCount">const <type>VkSampler</type>*       <name>pImmutableSamplers</name><comment>Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains count number of elements)</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkDescriptorSetLayoutCreateFlags</type>    <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>bindingCount</name><comment>Number of bindings in the descriptor set layout</comment></member>
+            <member len="bindingCount">const <type>VkDescriptorSetLayoutBinding</type>* <name>pBindings</name><comment>Array of descriptor set layout bindings</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorPoolSize">
+            <member><type>VkDescriptorType</type>       <name>type</name></member>
+            <member><type>uint32_t</type>               <name>descriptorCount</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkDescriptorPoolCreateFlags</type>  <name>flags</name></member>
+            <member><type>uint32_t</type>               <name>maxSets</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>poolSizeCount</name></member>
+            <member len="poolSizeCount">const <type>VkDescriptorPoolSize</type>* <name>pPoolSizes</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDescriptorPool</type>       <name>descriptorPool</name></member>
+            <member><type>uint32_t</type>               <name>descriptorSetCount</name></member>
+            <member len="descriptorSetCount">const <type>VkDescriptorSetLayout</type>* <name>pSetLayouts</name></member>
+        </type>
+        <type category="struct" name="VkSpecializationMapEntry">
+            <member><type>uint32_t</type>                     <name>constantID</name><comment>The SpecConstant ID specified in the BIL</comment></member>
+            <member><type>uint32_t</type>                     <name>offset</name><comment>Offset of the value in the data block</comment></member>
+            <member noautovalidity="true"><type>size_t</type> <name>size</name><comment>Size in bytes of the SpecConstant</comment></member>
+        </type>
+        <type category="struct" name="VkSpecializationInfo">
+            <member optional="true"><type>uint32_t</type>               <name>mapEntryCount</name><comment>Number of entries in the map</comment></member>
+            <member len="mapEntryCount">const <type>VkSpecializationMapEntry</type>* <name>pMapEntries</name><comment>Array of map entries</comment></member>
+            <member optional="true"><type>size_t</type>                 <name>dataSize</name><comment>Size in bytes of pData</comment></member>
+            <member len="dataSize">const <type>void</type>*            <name>pData</name><comment>Pointer to SpecConstant data</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineShaderStageCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkShaderStageFlagBits</type>  <name>stage</name><comment>Shader stage</comment></member>
+            <member optional="true"><type>VkShaderModule</type> <name>module</name><comment>Module containing entry point</comment></member>
+            <member api="vulkan" len="null-terminated">const <type>char</type>* <name>pName</name><comment>Null-terminated entry point name</comment></member>
+            <member api="vulkansc" optional="true" len="null-terminated">const <type>char</type>* <name>pName</name><comment>Null-terminated entry point name</comment></member>
+            <member optional="true">const <type>VkSpecializationInfo</type>* <name>pSpecializationInfo</name></member>
+        </type>
+        <type category="struct" name="VkComputePipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCreateFlags</type>  <name>flags</name><comment>Pipeline creation flags</comment></member>
+            <member><type>VkPipelineShaderStageCreateInfo</type> <name>stage</name></member>
+            <member><type>VkPipelineLayout</type>       <name>layout</name><comment>Interface layout of the pipeline</comment></member>
+            <member noautovalidity="true" optional="true"><type>VkPipeline</type>      <name>basePipelineHandle</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of</comment></member>
+            <member><type>int32_t</type>                <name>basePipelineIndex</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of</comment></member>
+        </type>
+        <type category="struct" name="VkComputePipelineIndirectBufferInfoNV">
+            <member values="VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*   <name>pNext</name></member>
+            <member><type>VkDeviceAddress</type>               <name>deviceAddress</name></member>
+            <member><type>VkDeviceSize</type>                  <name>size</name></member>
+            <member><type>VkDeviceAddress</type>               <name>pipelineDeviceAddressCaptureReplay</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCreateFlags2CreateInfoKHR" structextends="VkComputePipelineCreateInfo,VkGraphicsPipelineCreateInfo,VkRayTracingPipelineCreateInfoNV,VkRayTracingPipelineCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkPipelineCreateFlags2KHR</type>      <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkVertexInputBindingDescription">
+            <member><type>uint32_t</type>               <name>binding</name><comment>Vertex buffer binding id</comment></member>
+            <member><type>uint32_t</type>               <name>stride</name><comment>Distance between vertices in bytes (0 = no advancement)</comment></member>
+            <member><type>VkVertexInputRate</type>      <name>inputRate</name><comment>The rate at which the vertex data is consumed</comment></member>
+        </type>
+        <type category="struct" name="VkVertexInputAttributeDescription">
+            <member><type>uint32_t</type>               <name>location</name><comment>location of the shader vertex attrib</comment></member>
+            <member><type>uint32_t</type>               <name>binding</name><comment>Vertex buffer binding id</comment></member>
+            <member><type>VkFormat</type>               <name>format</name><comment>format of source data</comment></member>
+            <member><type>uint32_t</type>               <name>offset</name><comment>Offset of first element in bytes from base of vertex</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineVertexInputStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineVertexInputStateCreateFlags</type>    <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>vertexBindingDescriptionCount</name><comment>number of bindings</comment></member>
+            <member len="vertexBindingDescriptionCount">const <type>VkVertexInputBindingDescription</type>* <name>pVertexBindingDescriptions</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>vertexAttributeDescriptionCount</name><comment>number of attributes</comment></member>
+            <member len="vertexAttributeDescriptionCount">const <type>VkVertexInputAttributeDescription</type>* <name>pVertexAttributeDescriptions</name></member>
+        </type>
+        <type category="struct" name="VkPipelineInputAssemblyStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineInputAssemblyStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkPrimitiveTopology</type>    <name>topology</name></member>
+            <member><type>VkBool32</type>               <name>primitiveRestartEnable</name></member>
+        </type>
+        <type category="struct" name="VkPipelineTessellationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineTessellationStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>               <name>patchControlPoints</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineViewportStateCreateFlags</type>    <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>viewportCount</name></member>
+            <member noautovalidity="true" optional="true" len="viewportCount">const <type>VkViewport</type>*      <name>pViewports</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>scissorCount</name></member>
+            <member noautovalidity="true" optional="true" len="scissorCount">const <type>VkRect2D</type>*        <name>pScissors</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineRasterizationStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkBool32</type>               <name>depthClampEnable</name></member>
+            <member><type>VkBool32</type>               <name>rasterizerDiscardEnable</name></member>
+            <member><type>VkPolygonMode</type>          <name>polygonMode</name><comment>optional (GL45)</comment></member>
+            <member optional="true"><type>VkCullModeFlags</type>        <name>cullMode</name></member>
+            <member><type>VkFrontFace</type>            <name>frontFace</name></member>
+            <member><type>VkBool32</type>               <name>depthBiasEnable</name></member>
+            <member><type>float</type>                  <name>depthBiasConstantFactor</name></member>
+            <member><type>float</type>                  <name>depthBiasClamp</name></member>
+            <member><type>float</type>                  <name>depthBiasSlopeFactor</name></member>
+            <member><type>float</type>                  <name>lineWidth</name></member>
+        </type>
+        <type category="struct" name="VkPipelineMultisampleStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineMultisampleStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkSampleCountFlagBits</type>  <name>rasterizationSamples</name><comment>Number of samples used for rasterization</comment></member>
+            <member><type>VkBool32</type>               <name>sampleShadingEnable</name><comment>optional (GL45)</comment></member>
+            <member><type>float</type>                  <name>minSampleShading</name><comment>optional (GL45)</comment></member>
+            <member optional="true" len="latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]" altlen="(rasterizationSamples + 31) / 32">const <type>VkSampleMask</type>*    <name>pSampleMask</name><comment>Array of sampleMask words</comment></member>
+            <member><type>VkBool32</type>               <name>alphaToCoverageEnable</name></member>
+            <member><type>VkBool32</type>               <name>alphaToOneEnable</name></member>
+        </type>
+        <type category="struct" name="VkPipelineColorBlendAttachmentState">
+            <member><type>VkBool32</type>               <name>blendEnable</name></member>
+            <member><type>VkBlendFactor</type>          <name>srcColorBlendFactor</name></member>
+            <member><type>VkBlendFactor</type>          <name>dstColorBlendFactor</name></member>
+            <member><type>VkBlendOp</type>              <name>colorBlendOp</name></member>
+            <member><type>VkBlendFactor</type>          <name>srcAlphaBlendFactor</name></member>
+            <member><type>VkBlendFactor</type>          <name>dstAlphaBlendFactor</name></member>
+            <member><type>VkBlendOp</type>              <name>alphaBlendOp</name></member>
+            <member optional="true"><type>VkColorComponentFlags</type>  <name>colorWriteMask</name></member>
+        </type>
+        <type category="struct" name="VkPipelineColorBlendStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineColorBlendStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkBool32</type>               <name>logicOpEnable</name></member>
+            <member noautovalidity="true"><type>VkLogicOp</type>              <name>logicOp</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>attachmentCount</name><comment># of pAttachments</comment></member>
+            <member optional="true" len="attachmentCount">const <type>VkPipelineColorBlendAttachmentState</type>* <name>pAttachments</name></member>
+            <member><type>float</type>                  <name>blendConstants</name>[4]</member>
+        </type>
+        <type category="struct" name="VkPipelineDynamicStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineDynamicStateCreateFlags</type>    <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>dynamicStateCount</name></member>
+            <member len="dynamicStateCount">const <type>VkDynamicState</type>*  <name>pDynamicStates</name></member>
+        </type>
+        <type category="struct" name="VkStencilOpState">
+            <member><type>VkStencilOp</type>            <name>failOp</name></member>
+            <member><type>VkStencilOp</type>            <name>passOp</name></member>
+            <member><type>VkStencilOp</type>            <name>depthFailOp</name></member>
+            <member><type>VkCompareOp</type>            <name>compareOp</name></member>
+            <member><type>uint32_t</type>               <name>compareMask</name></member>
+            <member><type>uint32_t</type>               <name>writeMask</name></member>
+            <member><type>uint32_t</type>               <name>reference</name></member>
+        </type>
+        <type category="struct" name="VkPipelineDepthStencilStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineDepthStencilStateCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkBool32</type>               <name>depthTestEnable</name></member>
+            <member><type>VkBool32</type>               <name>depthWriteEnable</name></member>
+            <member><type>VkCompareOp</type>            <name>depthCompareOp</name></member>
+            <member><type>VkBool32</type>               <name>depthBoundsTestEnable</name><comment>optional (depth_bounds_test)</comment></member>
+            <member><type>VkBool32</type>               <name>stencilTestEnable</name></member>
+            <member><type>VkStencilOpState</type>       <name>front</name></member>
+            <member><type>VkStencilOpState</type>       <name>back</name></member>
+            <member><type>float</type>                  <name>minDepthBounds</name></member>
+            <member><type>float</type>                  <name>maxDepthBounds</name></member>
+        </type>
+        <type category="struct" name="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCreateFlags</type>  <name>flags</name><comment>Pipeline creation flags</comment></member>
+            <member noautovalidity="true" optional="true"><type>uint32_t</type> <name>stageCount</name></member>
+            <member api="vulkan" noautovalidity="true" len="stageCount" optional="true">const <type>VkPipelineShaderStageCreateInfo</type>* <name>pStages</name><comment>One entry for each active shader stage</comment></member>
+            <member api="vulkansc" noautovalidity="true" len="stageCount">const <type>VkPipelineShaderStageCreateInfo</type>* <name>pStages</name><comment>One entry for each active shader stage</comment></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineVertexInputStateCreateInfo</type>* <name>pVertexInputState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineInputAssemblyStateCreateInfo</type>* <name>pInputAssemblyState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineTessellationStateCreateInfo</type>* <name>pTessellationState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineViewportStateCreateInfo</type>* <name>pViewportState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineRasterizationStateCreateInfo</type>* <name>pRasterizationState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineMultisampleStateCreateInfo</type>* <name>pMultisampleState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineDepthStencilStateCreateInfo</type>* <name>pDepthStencilState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineColorBlendStateCreateInfo</type>* <name>pColorBlendState</name></member>
+            <member optional="true">const <type>VkPipelineDynamicStateCreateInfo</type>* <name>pDynamicState</name></member>
+            <member noautovalidity="true" optional="true"><type>VkPipelineLayout</type>       <name>layout</name><comment>Interface layout of the pipeline</comment></member>
+            <member noautovalidity="true" optional="true"><type>VkRenderPass</type>           <name>renderPass</name></member>
+            <member noautovalidity="true"><type>uint32_t</type>               <name>subpass</name></member>
+            <member noautovalidity="true" optional="true"><type>VkPipeline</type>      <name>basePipelineHandle</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of</comment></member>
+            <member><type>int32_t</type>                <name>basePipelineIndex</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineCacheCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCacheCreateFlags</type>    <name>flags</name></member>
+            <member api="vulkan" optional="true"><type>size_t</type>           <name>initialDataSize</name><comment>Size of initial data to populate cache, in bytes</comment></member>
+            <member api="vulkansc"><type>size_t</type>                         <name>initialDataSize</name><comment>Size of initial data to populate cache, in bytes</comment></member>
+            <member len="initialDataSize">const <type>void</type>*            <name>pInitialData</name><comment>Initial data to populate cache</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineCacheHeaderVersionOne">
+            <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>uint32_t</type>               <name>headerSize</name></member>
+            <member><type>VkPipelineCacheHeaderVersion</type> <name>headerVersion</name></member>
+            <member><type>uint32_t</type>               <name>vendorID</name></member>
+            <member><type>uint32_t</type>               <name>deviceID</name></member>
+            <member><type>uint8_t</type>                <name>pipelineCacheUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkPipelineCacheStageValidationIndexEntry">
+            <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>uint64_t</type>               <name>codeSize</name></member>
+            <member><type>uint64_t</type>               <name>codeOffset</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCacheSafetyCriticalIndexEntry">
+            <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>uint8_t</type>                <name>pipelineIdentifier</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member><type>uint64_t</type>               <name>pipelineMemorySize</name></member>
+            <member><type>uint64_t</type>               <name>jsonSize</name></member>
+            <member><type>uint64_t</type>               <name>jsonOffset</name></member>
+            <member><type>uint32_t</type>               <name>stageIndexCount</name></member>
+            <member><type>uint32_t</type>               <name>stageIndexStride</name></member>
+            <member><type>uint64_t</type>               <name>stageIndexOffset</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCacheHeaderVersionSafetyCriticalOne">
+            <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>VkPipelineCacheHeaderVersionOne</type>        <name>headerVersionOne</name></member>
+            <member><type>VkPipelineCacheValidationVersion</type>       <name>validationVersion</name></member>
+            <member><type>uint32_t</type>                               <name>implementationData</name></member>
+            <member><type>uint32_t</type>                               <name>pipelineIndexCount</name></member>
+            <member><type>uint32_t</type>                               <name>pipelineIndexStride</name></member>
+            <member><type>uint64_t</type>                               <name>pipelineIndexOffset</name></member>
+        </type>
+        <type category="struct" name="VkPushConstantRange">
+            <member><type>VkShaderStageFlags</type>     <name>stageFlags</name><comment>Which stages use the range</comment></member>
+            <member><type>uint32_t</type>               <name>offset</name><comment>Start of the range, in bytes</comment></member>
+            <member><type>uint32_t</type>               <name>size</name><comment>Size of the range, in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineLayoutCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineLayoutCreateFlags</type>    <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>setLayoutCount</name><comment>Number of descriptor sets interfaced by the pipeline</comment></member>
+            <member optional="false,true" len="setLayoutCount">const <type>VkDescriptorSetLayout</type>* <name>pSetLayouts</name><comment>Array of setCount number of descriptor set layout objects defining the layout of the</comment></member>
+            <member optional="true"><type>uint32_t</type>               <name>pushConstantRangeCount</name><comment>Number of push-constant ranges used by the pipeline</comment></member>
+            <member len="pushConstantRangeCount">const <type>VkPushConstantRange</type>* <name>pPushConstantRanges</name><comment>Array of pushConstantRangeCount number of ranges used by various shader stages</comment></member>
+        </type>
+        <type category="struct" name="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkSamplerCreateFlags</type>   <name>flags</name></member>
+            <member><type>VkFilter</type>               <name>magFilter</name><comment>Filter mode for magnification</comment></member>
+            <member><type>VkFilter</type>               <name>minFilter</name><comment>Filter mode for minifiation</comment></member>
+            <member><type>VkSamplerMipmapMode</type>    <name>mipmapMode</name><comment>Mipmap selection mode</comment></member>
+            <member><type>VkSamplerAddressMode</type>   <name>addressModeU</name></member>
+            <member><type>VkSamplerAddressMode</type>   <name>addressModeV</name></member>
+            <member><type>VkSamplerAddressMode</type>   <name>addressModeW</name></member>
+            <member><type>float</type>                  <name>mipLodBias</name></member>
+            <member><type>VkBool32</type>               <name>anisotropyEnable</name></member>
+            <member><type>float</type>                  <name>maxAnisotropy</name></member>
+            <member><type>VkBool32</type>               <name>compareEnable</name></member>
+            <member noautovalidity="true"><type>VkCompareOp</type>            <name>compareOp</name></member>
+            <member><type>float</type>                  <name>minLod</name></member>
+            <member><type>float</type>                  <name>maxLod</name></member>
+            <member noautovalidity="true"><type>VkBorderColor</type>          <name>borderColor</name></member>
+            <member><type>VkBool32</type>               <name>unnormalizedCoordinates</name></member>
+        </type>
+        <type category="struct" name="VkCommandPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkCommandPoolCreateFlags</type>   <name>flags</name><comment>Command pool creation flags</comment></member>
+            <member><type>uint32_t</type>               <name>queueFamilyIndex</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkCommandPool</type>          <name>commandPool</name></member>
+            <member><type>VkCommandBufferLevel</type>   <name>level</name></member>
+            <member><type>uint32_t</type>               <name>commandBufferCount</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true" noautovalidity="true"><type>VkRenderPass</type>    <name>renderPass</name><comment>Render pass for secondary command buffers</comment></member>
+            <member><type>uint32_t</type>               <name>subpass</name></member>
+            <member optional="true" noautovalidity="true"><type>VkFramebuffer</type>   <name>framebuffer</name><comment>Framebuffer for secondary command buffers</comment></member>
+            <member><type>VkBool32</type>               <name>occlusionQueryEnable</name><comment>Whether this secondary command buffer may be executed during an occlusion query</comment></member>
+            <member optional="true" noautovalidity="true"><type>VkQueryControlFlags</type>    <name>queryFlags</name><comment>Query flags used by this secondary command buffer, if executed during an occlusion query</comment></member>
+            <member optional="true" noautovalidity="true"><type>VkQueryPipelineStatisticFlags</type> <name>pipelineStatistics</name><comment>Pipeline statistics that may be counted for this secondary command buffer</comment></member>
+        </type>
+        <type category="struct" name="VkCommandBufferBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkCommandBufferUsageFlags</type>  <name>flags</name><comment>Command buffer usage flags</comment></member>
+            <member optional="true" noautovalidity="true">const <type>VkCommandBufferInheritanceInfo</type>*       <name>pInheritanceInfo</name><comment>Pointer to inheritance info for secondary command buffers</comment></member>
+        </type>
+        <type category="struct" name="VkRenderPassBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkRenderPass</type>           <name>renderPass</name></member>
+            <member><type>VkFramebuffer</type>          <name>framebuffer</name></member>
+            <member><type>VkRect2D</type>               <name>renderArea</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>clearValueCount</name></member>
+            <member len="clearValueCount" noautovalidity="true">const <type>VkClearValue</type>*    <name>pClearValues</name></member>
+        </type>
+        <type category="union" name="VkClearColorValue" comment="// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.">
+            <member><type>float</type>                  <name>float32</name>[4]</member>
+            <member><type>int32_t</type>                <name>int32</name>[4]</member>
+            <member><type>uint32_t</type>               <name>uint32</name>[4]</member>
+        </type>
+        <type category="struct" name="VkClearDepthStencilValue">
+            <member><type>float</type>                  <name>depth</name></member>
+            <member><type>uint32_t</type>               <name>stencil</name></member>
+        </type>
+        <type category="union" name="VkClearValue" comment="// Union allowing specification of color or depth and stencil values. Actual value selected is based on attachment being cleared.">
+            <member noautovalidity="true"><type>VkClearColorValue</type>      <name>color</name></member>
+            <member><type>VkClearDepthStencilValue</type> <name>depthStencil</name></member>
+        </type>
+        <type category="struct" name="VkClearAttachment">
+            <member><type>VkImageAspectFlags</type>     <name>aspectMask</name></member>
+            <member><type>uint32_t</type>               <name>colorAttachment</name></member>
+            <member noautovalidity="true"><type>VkClearValue</type>           <name>clearValue</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentDescription">
+            <member optional="true"><type>VkAttachmentDescriptionFlags</type> <name>flags</name></member>
+            <member><type>VkFormat</type>               <name>format</name></member>
+            <member><type>VkSampleCountFlagBits</type>  <name>samples</name></member>
+            <member><type>VkAttachmentLoadOp</type>     <name>loadOp</name><comment>Load operation for color or depth data</comment></member>
+            <member><type>VkAttachmentStoreOp</type>    <name>storeOp</name><comment>Store operation for color or depth data</comment></member>
+            <member><type>VkAttachmentLoadOp</type>     <name>stencilLoadOp</name><comment>Load operation for stencil data</comment></member>
+            <member><type>VkAttachmentStoreOp</type>    <name>stencilStoreOp</name><comment>Store operation for stencil data</comment></member>
+            <member><type>VkImageLayout</type>          <name>initialLayout</name></member>
+            <member><type>VkImageLayout</type>          <name>finalLayout</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentReference">
+            <member><type>uint32_t</type>               <name>attachment</name></member>
+            <member><type>VkImageLayout</type>          <name>layout</name></member>
+        </type>
+        <type category="struct" name="VkSubpassDescription">
+            <member optional="true"><type>VkSubpassDescriptionFlags</type> <name>flags</name></member>
+            <member><type>VkPipelineBindPoint</type>    <name>pipelineBindPoint</name><comment>Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now</comment></member>
+            <member optional="true"><type>uint32_t</type>               <name>inputAttachmentCount</name></member>
+            <member len="inputAttachmentCount">const <type>VkAttachmentReference</type>* <name>pInputAttachments</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>colorAttachmentCount</name></member>
+            <member len="colorAttachmentCount">const <type>VkAttachmentReference</type>* <name>pColorAttachments</name></member>
+            <member optional="true" len="colorAttachmentCount">const <type>VkAttachmentReference</type>* <name>pResolveAttachments</name></member>
+            <member optional="true">const <type>VkAttachmentReference</type>* <name>pDepthStencilAttachment</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>preserveAttachmentCount</name></member>
+            <member len="preserveAttachmentCount">const <type>uint32_t</type>* <name>pPreserveAttachments</name></member>
+        </type>
+        <type category="struct" name="VkSubpassDependency">
+            <member><type>uint32_t</type>               <name>srcSubpass</name></member>
+            <member><type>uint32_t</type>               <name>dstSubpass</name></member>
+            <member optional="true"><type>VkPipelineStageFlags</type>   <name>srcStageMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags</type>   <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags</type>          <name>srcAccessMask</name><comment>Memory accesses from the source of the dependency to synchronize</comment></member>
+            <member optional="true"><type>VkAccessFlags</type>          <name>dstAccessMask</name><comment>Memory accesses from the destination of the dependency to synchronize</comment></member>
+            <member optional="true"><type>VkDependencyFlags</type>      <name>dependencyFlags</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkRenderPassCreateFlags</type> <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>   <name>attachmentCount</name></member>
+            <member len="attachmentCount">const <type>VkAttachmentDescription</type>* <name>pAttachments</name></member>
+            <member><type>uint32_t</type>               <name>subpassCount</name></member>
+            <member len="subpassCount">const <type>VkSubpassDescription</type>* <name>pSubpasses</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>dependencyCount</name></member>
+            <member len="dependencyCount">const <type>VkSubpassDependency</type>* <name>pDependencies</name></member>
+        </type>
+        <type category="struct" name="VkEventCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkEventCreateFlags</type>     <name>flags</name><comment>Event creation flags</comment></member>
+        </type>
+        <type category="struct" name="VkFenceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkFenceCreateFlags</type>     <name>flags</name><comment>Fence creation flags</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFeatures">
+            <member><type>VkBool32</type>               <name>robustBufferAccess</name><comment>out of bounds buffer accesses are well defined</comment></member>
+            <member><type>VkBool32</type>               <name>fullDrawIndexUint32</name><comment>full 32-bit range of indices for indexed draw calls</comment></member>
+            <member><type>VkBool32</type>               <name>imageCubeArray</name><comment>image views which are arrays of cube maps</comment></member>
+            <member><type>VkBool32</type>               <name>independentBlend</name><comment>blending operations are controlled per-attachment</comment></member>
+            <member><type>VkBool32</type>               <name>geometryShader</name><comment>geometry stage</comment></member>
+            <member><type>VkBool32</type>               <name>tessellationShader</name><comment>tessellation control and evaluation stage</comment></member>
+            <member><type>VkBool32</type>               <name>sampleRateShading</name><comment>per-sample shading and interpolation</comment></member>
+            <member><type>VkBool32</type>               <name>dualSrcBlend</name><comment>blend operations which take two sources</comment></member>
+            <member><type>VkBool32</type>               <name>logicOp</name><comment>logic operations</comment></member>
+            <member><type>VkBool32</type>               <name>multiDrawIndirect</name><comment>multi draw indirect</comment></member>
+            <member><type>VkBool32</type>               <name>drawIndirectFirstInstance</name><comment>indirect drawing can use non-zero firstInstance</comment></member>
+            <member><type>VkBool32</type>               <name>depthClamp</name><comment>depth clamping</comment></member>
+            <member><type>VkBool32</type>               <name>depthBiasClamp</name><comment>depth bias clamping</comment></member>
+            <member><type>VkBool32</type>               <name>fillModeNonSolid</name><comment>point and wireframe fill modes</comment></member>
+            <member><type>VkBool32</type>               <name>depthBounds</name><comment>depth bounds test</comment></member>
+            <member><type>VkBool32</type>               <name>wideLines</name><comment>lines with width greater than 1</comment></member>
+            <member><type>VkBool32</type>               <name>largePoints</name><comment>points with size greater than 1</comment></member>
+            <member><type>VkBool32</type>               <name>alphaToOne</name><comment>the fragment alpha component can be forced to maximum representable alpha value</comment></member>
+            <member><type>VkBool32</type>               <name>multiViewport</name><comment>viewport arrays</comment></member>
+            <member><type>VkBool32</type>               <name>samplerAnisotropy</name><comment>anisotropic sampler filtering</comment></member>
+            <member><type>VkBool32</type>               <name>textureCompressionETC2</name><comment>ETC texture compression formats</comment></member>
+            <member><type>VkBool32</type>               <name>textureCompressionASTC_LDR</name><comment>ASTC LDR texture compression formats</comment></member>
+            <member><type>VkBool32</type>               <name>textureCompressionBC</name><comment>BC1-7 texture compressed formats</comment></member>
+            <member><type>VkBool32</type>               <name>occlusionQueryPrecise</name><comment>precise occlusion queries returning actual sample counts</comment></member>
+            <member><type>VkBool32</type>               <name>pipelineStatisticsQuery</name><comment>pipeline statistics query</comment></member>
+            <member><type>VkBool32</type>               <name>vertexPipelineStoresAndAtomics</name><comment>stores and atomic ops on storage buffers and images are supported in vertex, tessellation, and geometry stages</comment></member>
+            <member><type>VkBool32</type>               <name>fragmentStoresAndAtomics</name><comment>stores and atomic ops on storage buffers and images are supported in the fragment stage</comment></member>
+            <member><type>VkBool32</type>               <name>shaderTessellationAndGeometryPointSize</name><comment>tessellation and geometry stages can export point size</comment></member>
+            <member><type>VkBool32</type>               <name>shaderImageGatherExtended</name><comment>image gather with run-time values and independent offsets</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageExtendedFormats</name><comment>the extended set of formats can be used for storage images</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageMultisample</name><comment>multisample images can be used for storage images</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageReadWithoutFormat</name><comment>read from storage image does not require format qualifier</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageWriteWithoutFormat</name><comment>write to storage image does not require format qualifier</comment></member>
+            <member><type>VkBool32</type>               <name>shaderUniformBufferArrayDynamicIndexing</name><comment>arrays of uniform buffers can be accessed with dynamically uniform indices</comment></member>
+            <member><type>VkBool32</type>               <name>shaderSampledImageArrayDynamicIndexing</name><comment>arrays of sampled images can be accessed with dynamically uniform indices</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageBufferArrayDynamicIndexing</name><comment>arrays of storage buffers can be accessed with dynamically uniform indices</comment></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageArrayDynamicIndexing</name><comment>arrays of storage images can be accessed with dynamically uniform indices</comment></member>
+            <member><type>VkBool32</type>               <name>shaderClipDistance</name><comment>clip distance in shaders</comment></member>
+            <member><type>VkBool32</type>               <name>shaderCullDistance</name><comment>cull distance in shaders</comment></member>
+            <member><type>VkBool32</type>               <name>shaderFloat64</name><comment>64-bit floats (doubles) in shaders</comment></member>
+            <member><type>VkBool32</type>               <name>shaderInt64</name><comment>64-bit integers in shaders</comment></member>
+            <member><type>VkBool32</type>               <name>shaderInt16</name><comment>16-bit integers in shaders</comment></member>
+            <member><type>VkBool32</type>               <name>shaderResourceResidency</name><comment>shader can use texture operations that return resource residency information (requires sparseNonResident support)</comment></member>
+            <member><type>VkBool32</type>               <name>shaderResourceMinLod</name><comment>shader can use texture operations that specify minimum resource LOD</comment></member>
+            <member><type>VkBool32</type>               <name>sparseBinding</name><comment>Sparse resources support: Resource memory can be managed at opaque page level rather than object level</comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidencyBuffer</name><comment>Sparse resources support: GPU can access partially resident buffers </comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidencyImage2D</name><comment>Sparse resources support: GPU can access partially resident 2D (non-MSAA non-depth/stencil) images </comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidencyImage3D</name><comment>Sparse resources support: GPU can access partially resident 3D images </comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidency2Samples</name><comment>Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples</comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidency4Samples</name><comment>Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples</comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidency8Samples</name><comment>Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples</comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidency16Samples</name><comment>Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples</comment></member>
+            <member><type>VkBool32</type>               <name>sparseResidencyAliased</name><comment>Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)</comment></member>
+            <member><type>VkBool32</type>               <name>variableMultisampleRate</name><comment>multisample rate must be the same for all pipelines in a subpass</comment></member>
+            <member><type>VkBool32</type>               <name>inheritedQueries</name><comment>Queries may be inherited from primary to secondary command buffers</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSparseProperties" returnedonly="true">
+            <member limittype="bitmask"><type>VkBool32</type>           <name>residencyStandard2DBlockShape</name><comment>Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard sparse image block shapes (based on pixel format)</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>residencyStandard2DMultisampleBlockShape</name><comment>Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard sparse image block shapes (based on pixel format)</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>residencyStandard3DBlockShape</name><comment>Sparse resources support: GPU will access all 3D sparse resources using the standard sparse image block shapes (based on pixel format)</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>residencyAlignedMipSize</name><comment>Sparse resources support: Images with mip level dimensions that are NOT a multiple of the sparse image block dimensions will be placed in the mip tail</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>residencyNonResidentStrict</name><comment>Sparse resources support: GPU can consistently access non-resident regions of a resource, all reads return as if data is 0, writes are discarded</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceLimits" returnedonly="true">
+                <comment>resource maximum sizes</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxImageDimension1D</name><comment>max 1D image dimension</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxImageDimension2D</name><comment>max 2D image dimension</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxImageDimension3D</name><comment>max 3D image dimension</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxImageDimensionCube</name><comment>max cubemap image dimension</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxImageArrayLayers</name><comment>max layers for image arrays</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTexelBufferElements</name><comment>max texel buffer size (fstexels)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxUniformBufferRange</name><comment>max uniform buffer range (bytes)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxStorageBufferRange</name><comment>max storage buffer range (bytes)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPushConstantsSize</name><comment>max size of the push constants pool (bytes)</comment></member>
+                <comment>memory limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxMemoryAllocationCount</name><comment>max number of device memory allocations supported</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxSamplerAllocationCount</name><comment>max number of samplers that can be allocated on a device</comment></member>
+            <member limittype="min,mul"><type>VkDeviceSize</type>           <name>bufferImageGranularity</name><comment>Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage</comment></member>
+            <member limittype="max"><type>VkDeviceSize</type>           <name>sparseAddressSpaceSize</name><comment>Total address space available for sparse allocations (bytes)</comment></member>
+                <comment>descriptor set limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxBoundDescriptorSets</name><comment>max number of descriptors sets that can be bound to a pipeline</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorSamplers</name><comment>max number of samplers allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUniformBuffers</name><comment>max number of uniform buffers allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorStorageBuffers</name><comment>max number of storage buffers allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorSampledImages</name><comment>max number of sampled images allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorStorageImages</name><comment>max number of storage images allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorInputAttachments</name><comment>max number of input attachments allowed per-stage in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageResources</name><comment>max number of resources allowed by a single stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetSamplers</name><comment>max number of samplers allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUniformBuffers</name><comment>max number of uniform buffers allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUniformBuffersDynamic</name><comment>max number of dynamic uniform buffers allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetStorageBuffers</name><comment>max number of storage buffers allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetStorageBuffersDynamic</name><comment>max number of dynamic storage buffers allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetSampledImages</name><comment>max number of sampled images allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetStorageImages</name><comment>max number of storage images allowed in all stages in a descriptor set</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetInputAttachments</name><comment>max number of input attachments allowed in all stages in a descriptor set</comment></member>
+                <comment>vertex stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexInputAttributes</name><comment>max number of vertex input attribute slots</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexInputBindings</name><comment>max number of vertex input binding slots</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexInputAttributeOffset</name><comment>max vertex input attribute offset added to vertex buffer offset</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexInputBindingStride</name><comment>max vertex input binding stride</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexOutputComponents</name><comment>max number of output components written by vertex shader</comment></member>
+                <comment>tessellation control stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationGenerationLevel</name><comment>max level supported by tessellation primitive generator</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationPatchSize</name><comment>max patch size (vertices)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationControlPerVertexInputComponents</name><comment>max number of input components per-vertex in TCS</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationControlPerVertexOutputComponents</name><comment>max number of output components per-vertex in TCS</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationControlPerPatchOutputComponents</name><comment>max number of output components per-patch in TCS</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationControlTotalOutputComponents</name><comment>max total number of per-vertex and per-patch output components in TCS</comment></member>
+                <comment>tessellation evaluation stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationEvaluationInputComponents</name><comment>max number of input components per vertex in TES</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTessellationEvaluationOutputComponents</name><comment>max number of output components per vertex in TES</comment></member>
+                <comment>geometry stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxGeometryShaderInvocations</name><comment>max invocation count supported in geometry shader</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxGeometryInputComponents</name><comment>max number of input components read in geometry stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxGeometryOutputComponents</name><comment>max number of output components written in geometry stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxGeometryOutputVertices</name><comment>max number of vertices that can be emitted in geometry stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxGeometryTotalOutputComponents</name><comment>max total number of components (all vertices) written in geometry stage</comment></member>
+                <comment>fragment stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFragmentInputComponents</name><comment>max number of input components read in fragment stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFragmentOutputAttachments</name><comment>max number of output attachments written in fragment stage</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFragmentDualSrcAttachments</name><comment>max number of output attachments written when using dual source blending</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFragmentCombinedOutputResources</name><comment>max total number of storage buffers, storage images and output buffers</comment></member>
+                <comment>compute stage limits</comment>
+            <member limittype="max"><type>uint32_t</type>               <name>maxComputeSharedMemorySize</name><comment>max total storage size of work group local storage (bytes)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxComputeWorkGroupCount</name>[3]<comment>max num of compute work groups that may be dispatched by a single command (x,y,z)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxComputeWorkGroupInvocations</name><comment>max total compute invocations in a single local work group</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxComputeWorkGroupSize</name>[3]<comment>max local size of a compute work group (x,y,z)</comment></member>
+            <member limittype="bits"><type>uint32_t</type>              <name>subPixelPrecisionBits</name><comment>number bits of subpixel precision in screen x and y</comment></member>
+            <member limittype="bits"><type>uint32_t</type>              <name>subTexelPrecisionBits</name><comment>number bits of precision for selecting texel weights</comment></member>
+            <member limittype="bits"><type>uint32_t</type>              <name>mipmapPrecisionBits</name><comment>number bits of precision for selecting mipmap weights</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDrawIndexedIndexValue</name><comment>max index value for indexed draw calls (for 32-bit indices)</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDrawIndirectCount</name><comment>max draw count for indirect drawing calls</comment></member>
+            <member limittype="max"><type>float</type>                  <name>maxSamplerLodBias</name><comment>max absolute sampler LOD bias</comment></member>
+            <member limittype="max"><type>float</type>                  <name>maxSamplerAnisotropy</name><comment>max degree of sampler anisotropy</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxViewports</name><comment>max number of active viewports</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxViewportDimensions</name>[2]<comment>max viewport dimensions (x,y)</comment></member>
+            <member limittype="range"><type>float</type>                <name>viewportBoundsRange</name>[2]<comment>viewport bounds range (min,max)</comment></member>
+            <member limittype="bits"><type>uint32_t</type>              <name>viewportSubPixelBits</name><comment>number bits of subpixel precision for viewport</comment></member>
+            <member limittype="min,pot"><type>size_t</type>             <name>minMemoryMapAlignment</name><comment>min required alignment of pointers returned by MapMemory (bytes)</comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>minTexelBufferOffsetAlignment</name><comment>min required alignment for texel buffer offsets (bytes) </comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>minUniformBufferOffsetAlignment</name><comment>min required alignment for uniform buffer sizes and offsets (bytes)</comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>minStorageBufferOffsetAlignment</name><comment>min required alignment for storage buffer offsets (bytes)</comment></member>
+            <member limittype="min"><type>int32_t</type>                <name>minTexelOffset</name><comment>min texel offset for OpTextureSampleOffset</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTexelOffset</name><comment>max texel offset for OpTextureSampleOffset</comment></member>
+            <member limittype="min"><type>int32_t</type>                <name>minTexelGatherOffset</name><comment>min texel offset for OpTextureGatherOffset</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTexelGatherOffset</name><comment>max texel offset for OpTextureGatherOffset</comment></member>
+            <member limittype="min"><type>float</type>                  <name>minInterpolationOffset</name><comment>furthest negative offset for interpolateAtOffset</comment></member>
+            <member limittype="max"><type>float</type>                  <name>maxInterpolationOffset</name><comment>furthest positive offset for interpolateAtOffset</comment></member>
+            <member limittype="bits"><type>uint32_t</type>              <name>subPixelInterpolationOffsetBits</name><comment>number of subpixel bits for interpolateAtOffset</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFramebufferWidth</name><comment>max width for a framebuffer</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFramebufferHeight</name><comment>max height for a framebuffer</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxFramebufferLayers</name><comment>max layer count for a layered framebuffer</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>framebufferColorSampleCounts</name><comment>supported color sample counts for a framebuffer</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>framebufferDepthSampleCounts</name><comment>supported depth sample counts for a framebuffer</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>framebufferStencilSampleCounts</name><comment>supported stencil sample counts for a framebuffer</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>framebufferNoAttachmentsSampleCounts</name><comment>supported sample counts for a subpass which uses no attachments</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxColorAttachments</name><comment>max number of color attachments per subpass</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>sampledImageColorSampleCounts</name><comment>supported color sample counts for a non-integer sampled image</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>sampledImageIntegerSampleCounts</name><comment>supported sample counts for an integer image</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>sampledImageDepthSampleCounts</name><comment>supported depth sample counts for a sampled image</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>sampledImageStencilSampleCounts</name><comment>supported stencil sample counts for a sampled image</comment></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type>     <name>storageImageSampleCounts</name><comment>supported sample counts for a storage image</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxSampleMaskWords</name><comment>max number of sample mask words</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>timestampComputeAndGraphics</name><comment>timestamps on graphics and compute queues</comment></member>
+            <member limittype="min,mul"><type>float</type>              <name>timestampPeriod</name><comment>number of nanoseconds it takes for timestamp query value to increment by 1</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxClipDistances</name><comment>max number of clip distances</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxCullDistances</name><comment>max number of cull distances</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxCombinedClipAndCullDistances</name><comment>max combined number of user clipping</comment></member>
+            <member limittype="max"><type>uint32_t</type>               <name>discreteQueuePriorities</name><comment>distinct queue priorities available </comment></member>
+            <member limittype="range"><type>float</type>                <name>pointSizeRange</name>[2]<comment>range (min,max) of supported point sizes</comment></member>
+            <member limittype="range"><type>float</type>                <name>lineWidthRange</name>[2]<comment>range (min,max) of supported line widths</comment></member>
+            <member limittype="min,mul"><type>float</type>              <name>pointSizeGranularity</name><comment>granularity of supported point sizes</comment></member>
+            <member limittype="min,mul"><type>float</type>              <name>lineWidthGranularity</name><comment>granularity of supported line widths</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>strictLines</name><comment>line rasterization follows preferred rules</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>           <name>standardSampleLocations</name><comment>supports standard sample locations for all supported sample counts</comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>optimalBufferCopyOffsetAlignment</name><comment>optimal offset of buffer copies</comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>optimalBufferCopyRowPitchAlignment</name><comment>optimal pitch of buffer copies</comment></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>       <name>nonCoherentAtomSize</name><comment>minimum size and alignment for non-coherent host-mapped device memory access</comment></member>
+        </type>
+        <type category="struct" name="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkSemaphoreCreateFlags</type> <name>flags</name><comment>Semaphore creation flags</comment></member>
+        </type>
+        <type category="struct" name="VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkQueryPoolCreateFlags</type> <name>flags</name></member>
+            <member><type>VkQueryType</type>            <name>queryType</name></member>
+            <member><type>uint32_t</type>               <name>queryCount</name></member>
+            <member optional="true" noautovalidity="true"><type>VkQueryPipelineStatisticFlags</type> <name>pipelineStatistics</name><comment>Optional</comment></member>
+        </type>
+        <type category="struct" name="VkFramebufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkFramebufferCreateFlags</type>    <name>flags</name></member>
+            <member><type>VkRenderPass</type>                           <name>renderPass</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>attachmentCount</name></member>
+            <member noautovalidity="true" len="attachmentCount">const <type>VkImageView</type>*     <name>pAttachments</name></member>
+            <member><type>uint32_t</type>               <name>width</name></member>
+            <member><type>uint32_t</type>               <name>height</name></member>
+            <member><type>uint32_t</type>               <name>layers</name></member>
+        </type>
+        <type category="struct" name="VkDrawIndirectCommand">
+            <member><type>uint32_t</type>                       <name>vertexCount</name></member>
+            <member><type>uint32_t</type>                       <name>instanceCount</name></member>
+            <member><type>uint32_t</type>                       <name>firstVertex</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>firstInstance</name></member>
+        </type>
+        <type category="struct" name="VkDrawIndexedIndirectCommand">
+            <member><type>uint32_t</type>                       <name>indexCount</name></member>
+            <member><type>uint32_t</type>                       <name>instanceCount</name></member>
+            <member><type>uint32_t</type>                       <name>firstIndex</name></member>
+            <member><type>int32_t</type>                        <name>vertexOffset</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>firstInstance</name></member>
+        </type>
+        <type category="struct" name="VkDispatchIndirectCommand">
+            <member noautovalidity="true"><type>uint32_t</type> <name>x</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>y</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>z</name></member>
+        </type>
+        <type category="struct" name="VkMultiDrawInfoEXT">
+            <member><type>uint32_t</type> <name>firstVertex</name></member>
+            <member><type>uint32_t</type> <name>vertexCount</name></member>
+        </type>
+        <type category="struct" name="VkMultiDrawIndexedInfoEXT">
+            <member><type>uint32_t</type> <name>firstIndex</name></member>
+            <member><type>uint32_t</type> <name>indexCount</name></member>
+            <member><type>int32_t</type> <name>vertexOffset</name></member>
+        </type>
+        <type category="struct" name="VkSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>waitSemaphoreCount</name></member>
+            <member len="waitSemaphoreCount">const <type>VkSemaphore</type>*     <name>pWaitSemaphores</name></member>
+            <member optional="false,true" len="waitSemaphoreCount">const <type>VkPipelineStageFlags</type>*           <name>pWaitDstStageMask</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>commandBufferCount</name></member>
+            <member len="commandBufferCount">const <type>VkCommandBuffer</type>*     <name>pCommandBuffers</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>signalSemaphoreCount</name></member>
+            <member len="signalSemaphoreCount">const <type>VkSemaphore</type>*     <name>pSignalSemaphores</name></member>
+        </type>
+            <comment>WSI extensions</comment>
+        <type category="struct" name="VkDisplayPropertiesKHR" returnedonly="true">
+            <member><type>VkDisplayKHR</type>                     <name>display</name><comment>Handle of the display object</comment></member>
+            <member len="null-terminated">const <type>char</type>*                      <name>displayName</name><comment>Name of the display</comment></member>
+            <member><type>VkExtent2D</type>                       <name>physicalDimensions</name><comment>In millimeters?</comment></member>
+            <member><type>VkExtent2D</type>                       <name>physicalResolution</name><comment>Max resolution for CRT?</comment></member>
+            <member optional="true"><type>VkSurfaceTransformFlagsKHR</type>       <name>supportedTransforms</name><comment>one or more bits from VkSurfaceTransformFlagsKHR</comment></member>
+            <member><type>VkBool32</type>                         <name>planeReorderPossible</name><comment>VK_TRUE if the overlay plane's z-order can be changed on this display.</comment></member>
+            <member><type>VkBool32</type>                         <name>persistentContent</name><comment>VK_TRUE if this is a "smart" display that supports self-refresh/internal buffering.</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayPlanePropertiesKHR" returnedonly="true">
+            <member><type>VkDisplayKHR</type>                     <name>currentDisplay</name><comment>Display the plane is currently associated with.  Will be VK_NULL_HANDLE if the plane is not in use.</comment></member>
+            <member><type>uint32_t</type>                         <name>currentStackIndex</name><comment>Current z-order of the plane.</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayModeParametersKHR">
+            <member><type>VkExtent2D</type>                       <name>visibleRegion</name><comment>Visible scanout region.</comment></member>
+            <member noautovalidity="true"><type>uint32_t</type>   <name>refreshRate</name><comment>Number of times per second the display is updated.</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayModePropertiesKHR" returnedonly="true">
+            <member><type>VkDisplayModeKHR</type>                 <name>displayMode</name><comment>Handle of this display mode.</comment></member>
+            <member><type>VkDisplayModeParametersKHR</type>       <name>parameters</name><comment>The parameters this mode uses.</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayModeCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkDisplayModeCreateFlagsKHR</type>      <name>flags</name></member>
+            <member><type>VkDisplayModeParametersKHR</type>       <name>parameters</name><comment>The parameters this mode uses.</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayPlaneCapabilitiesKHR" returnedonly="true">
+            <member optional="true"><type>VkDisplayPlaneAlphaFlagsKHR</type>      <name>supportedAlpha</name><comment>Types of alpha blending supported, if any.</comment></member>
+            <member><type>VkOffset2D</type>                       <name>minSrcPosition</name><comment>Does the plane have any position and extent restrictions?</comment></member>
+            <member><type>VkOffset2D</type>                       <name>maxSrcPosition</name></member>
+            <member><type>VkExtent2D</type>                       <name>minSrcExtent</name></member>
+            <member><type>VkExtent2D</type>                       <name>maxSrcExtent</name></member>
+            <member><type>VkOffset2D</type>                       <name>minDstPosition</name></member>
+            <member><type>VkOffset2D</type>                       <name>maxDstPosition</name></member>
+            <member><type>VkExtent2D</type>                       <name>minDstExtent</name></member>
+            <member><type>VkExtent2D</type>                       <name>maxDstExtent</name></member>
+        </type>
+        <type category="struct" name="VkDisplaySurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkDisplaySurfaceCreateFlagsKHR</type>   <name>flags</name></member>
+            <member><type>VkDisplayModeKHR</type>                 <name>displayMode</name><comment>The mode to use when displaying this surface</comment></member>
+            <member><type>uint32_t</type>                         <name>planeIndex</name><comment>The plane on which this surface appears.  Must be between 0 and the value returned by vkGetPhysicalDeviceDisplayPlanePropertiesKHR() in pPropertyCount.</comment></member>
+            <member><type>uint32_t</type>                         <name>planeStackIndex</name><comment>The z-order of the plane.</comment></member>
+            <member><type>VkSurfaceTransformFlagBitsKHR</type>    <name>transform</name><comment>Transform to apply to the images as part of the scanout operation</comment></member>
+            <member><type>float</type>                            <name>globalAlpha</name><comment>Global alpha value.  Must be between 0 and 1, inclusive.  Ignored if alphaMode is not VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR</comment></member>
+            <member><type>VkDisplayPlaneAlphaFlagBitsKHR</type>   <name>alphaMode</name><comment>What type of alpha blending to use.  Must be a bit from vkGetDisplayPlanePropertiesKHR::supportedAlpha.</comment></member>
+            <member><type>VkExtent2D</type>                       <name>imageExtent</name><comment>size of the images to use with this surface</comment></member>
+        </type>
+        <type category="struct" name="VkDisplayPresentInfoKHR" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkRect2D</type>                         <name>srcRect</name><comment>Rectangle within the presentable image to read pixel data from when presenting to the display.</comment></member>
+            <member><type>VkRect2D</type>                         <name>dstRect</name><comment>Rectangle within the current display mode's visible region to display srcRectangle in.</comment></member>
+            <member><type>VkBool32</type>                         <name>persistent</name><comment>For smart displays, use buffered mode.  If the display properties member "persistentMode" is VK_FALSE, this member must always be VK_FALSE.</comment></member>
+        </type>
+        <type category="struct" name="VkSurfaceCapabilitiesKHR" returnedonly="true">
+            <member><type>uint32_t</type>                         <name>minImageCount</name><comment>Supported minimum number of images for the surface</comment></member>
+            <member><type>uint32_t</type>                         <name>maxImageCount</name><comment>Supported maximum number of images for the surface, 0 for unlimited</comment></member>
+            <member><type>VkExtent2D</type>                       <name>currentExtent</name><comment>Current image width and height for the surface, (0, 0) if undefined</comment></member>
+            <member><type>VkExtent2D</type>                       <name>minImageExtent</name><comment>Supported minimum image width and height for the surface</comment></member>
+            <member><type>VkExtent2D</type>                       <name>maxImageExtent</name><comment>Supported maximum image width and height for the surface</comment></member>
+            <member><type>uint32_t</type>                         <name>maxImageArrayLayers</name><comment>Supported maximum number of image layers for the surface</comment></member>
+            <member><type>VkSurfaceTransformFlagsKHR</type>       <name>supportedTransforms</name><comment>1 or more bits representing the transforms supported</comment></member>
+            <member><type>VkSurfaceTransformFlagBitsKHR</type>    <name>currentTransform</name><comment>The surface's current transform relative to the device's natural orientation</comment></member>
+            <member><type>VkCompositeAlphaFlagsKHR</type>         <name>supportedCompositeAlpha</name><comment>1 or more bits representing the alpha compositing modes supported</comment></member>
+            <member><type>VkImageUsageFlags</type>                <name>supportedUsageFlags</name><comment>Supported image usage flags for the surface</comment></member>
+        </type>
+        <type category="struct" name="VkAndroidSurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>VkAndroidSurfaceCreateFlagsKHR</type> <name>flags</name></member>
+            <member noautovalidity="true">struct <type>ANativeWindow</type>*    <name>window</name></member>
+        </type>
+        <type category="struct" name="VkViSurfaceCreateInfoNN">
+            <member values="VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkViSurfaceCreateFlagsNN</type>   <name>flags</name></member>
+            <member noautovalidity="true"><type>void</type>*                            <name>window</name></member>
+        </type>
+        <type category="struct" name="VkWaylandSurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkWaylandSurfaceCreateFlagsKHR</type>   <name>flags</name></member>
+            <member noautovalidity="true">struct <type>wl_display</type>*               <name>display</name></member>
+            <member noautovalidity="true">struct <type>wl_surface</type>*               <name>surface</name></member>
+        </type>
+        <type category="struct" name="VkWin32SurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkWin32SurfaceCreateFlagsKHR</type>   <name>flags</name></member>
+            <member><type>HINSTANCE</type>                        <name>hinstance</name></member>
+            <member><type>HWND</type>                             <name>hwnd</name></member>
+        </type>
+        <type category="struct" name="VkXlibSurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkXlibSurfaceCreateFlagsKHR</type>   <name>flags</name></member>
+            <member noautovalidity="true"><type>Display</type>*                         <name>dpy</name></member>
+            <member><type>Window</type>                           <name>window</name></member>
+        </type>
+        <type category="struct" name="VkXcbSurfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkXcbSurfaceCreateFlagsKHR</type>   <name>flags</name></member>
+            <member noautovalidity="true"><type>xcb_connection_t</type>*                <name>connection</name></member>
+            <member><type>xcb_window_t</type>                     <name>window</name></member>
+        </type>
+        <type category="struct" name="VkDirectFBSurfaceCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkDirectFBSurfaceCreateFlagsEXT</type>   <name>flags</name></member>
+            <member noautovalidity="true"><type>IDirectFB</type>*                       <name>dfb</name></member>
+            <member noautovalidity="true"><type>IDirectFBSurface</type>*                <name>surface</name></member>
+        </type>
+        <type category="struct" name="VkImagePipeSurfaceCreateInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkImagePipeSurfaceCreateFlagsFUCHSIA</type>   <name>flags</name></member>
+            <member><type>zx_handle_t</type>                      <name>imagePipeHandle</name></member>
+        </type>
+        <type category="struct" name="VkStreamDescriptorSurfaceCreateInfoGGP">
+            <member values="VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkStreamDescriptorSurfaceCreateFlagsGGP</type> <name>flags</name></member>
+            <member><type>GgpStreamDescriptor</type>              <name>streamDescriptor</name></member>
+        </type>
+        <type category="struct" name="VkScreenSurfaceCreateInfoQNX">
+            <member values="VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkScreenSurfaceCreateFlagsQNX</type>    <name>flags</name></member>
+            <member noautovalidity="true">struct <type>_screen_context</type>*    <name>context</name></member>
+            <member noautovalidity="true">struct <type>_screen_window</type>*     <name>window</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceFormatKHR" returnedonly="true">
+            <member><type>VkFormat</type>                         <name>format</name><comment>Supported pair of rendering format</comment></member>
+            <member><type>VkColorSpaceKHR</type>                  <name>colorSpace</name><comment>and color space for the surface</comment></member>
+        </type>
+        <type category="struct" name="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkSwapchainCreateFlagsKHR</type>        <name>flags</name></member>
+            <member><type>VkSurfaceKHR</type>                     <name>surface</name><comment>The swapchain's target surface</comment></member>
+            <member><type>uint32_t</type>                         <name>minImageCount</name><comment>Minimum number of presentation images the application needs</comment></member>
+            <member><type>VkFormat</type>                         <name>imageFormat</name><comment>Format of the presentation images</comment></member>
+            <member><type>VkColorSpaceKHR</type>                  <name>imageColorSpace</name><comment>Colorspace of the presentation images</comment></member>
+            <member><type>VkExtent2D</type>                       <name>imageExtent</name><comment>Dimensions of the presentation images</comment></member>
+            <member><type>uint32_t</type>                         <name>imageArrayLayers</name><comment>Determines the number of views for multiview/stereo presentation</comment></member>
+            <member><type>VkImageUsageFlags</type>                <name>imageUsage</name><comment>Bits indicating how the presentation images will be used</comment></member>
+            <member><type>VkSharingMode</type>                    <name>imageSharingMode</name><comment>Sharing mode used for the presentation images</comment></member>
+            <member optional="true"><type>uint32_t</type>         <name>queueFamilyIndexCount</name><comment>Number of queue families having access to the images in case of concurrent sharing mode</comment></member>
+            <member noautovalidity="true" len="queueFamilyIndexCount">const <type>uint32_t</type>*                  <name>pQueueFamilyIndices</name><comment>Array of queue family indices having access to the images in case of concurrent sharing mode</comment></member>
+            <member><type>VkSurfaceTransformFlagBitsKHR</type>    <name>preTransform</name><comment>The transform, relative to the device's natural orientation, applied to the image content prior to presentation</comment></member>
+            <member><type>VkCompositeAlphaFlagBitsKHR</type>      <name>compositeAlpha</name><comment>The alpha blending mode used when compositing this surface with other surfaces in the window system</comment></member>
+            <member><type>VkPresentModeKHR</type>                 <name>presentMode</name><comment>Which presentation mode to use for presents on this swap chain</comment></member>
+            <member><type>VkBool32</type>                         <name>clipped</name><comment>Specifies whether presentable images may be affected by window clip regions</comment></member>
+            <member api="vulkan" optional="true"><type>VkSwapchainKHR</type>                         <name>oldSwapchain</name><comment>Existing swap chain to replace, if any</comment></member>
+            <member api="vulkansc" noautovalidity="true" optional="true"><type>VkSwapchainKHR</type> <name>oldSwapchain</name><comment>Existing swap chain to replace, if any</comment></member>
+        </type>
+        <type category="struct" name="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*  <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>waitSemaphoreCount</name><comment>Number of semaphores to wait for before presenting</comment></member>
+            <member len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name><comment>Semaphores to wait for before presenting</comment></member>
+            <member><type>uint32_t</type>                         <name>swapchainCount</name><comment>Number of swapchains to present in this call</comment></member>
+            <member len="swapchainCount">const <type>VkSwapchainKHR</type>* <name>pSwapchains</name><comment>Swapchains to present an image from</comment></member>
+            <member len="swapchainCount">const <type>uint32_t</type>* <name>pImageIndices</name><comment>Indices of which presentable images to present</comment></member>
+            <member optional="true" len="swapchainCount"><type>VkResult</type>* <name>pResults</name><comment>Optional (i.e. if non-NULL) VkResult for each swapchain</comment></member>
+        </type>
+        <type category="struct" name="VkDebugReportCallbackCreateInfoEXT" structextends="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkDebugReportFlagsEXT</type>            <name>flags</name><comment>Indicates which events call this callback</comment></member>
+            <member><type>PFN_vkDebugReportCallbackEXT</type>     <name>pfnCallback</name><comment>Function pointer of a callback function</comment></member>
+            <member optional="true"><type>void</type>*            <name>pUserData</name><comment>User data provided to callback function</comment></member>
+        </type>
+        <type category="struct" name="VkValidationFlagsEXT" structextends="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"><type>VkStructureType</type>                  <name>sType</name><comment>Must be VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT</comment></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>disabledValidationCheckCount</name><comment>Number of validation checks to disable</comment></member>
+            <member len="disabledValidationCheckCount">const <type>VkValidationCheckEXT</type>* <name>pDisabledValidationChecks</name><comment>Validation checks to disable</comment></member>
+        </type>
+        <type category="struct" name="VkValidationFeaturesEXT" structextends="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"><type>VkStructureType</type>  <name>sType</name><comment>Must be VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT</comment></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                         <name>enabledValidationFeatureCount</name><comment>Number of validation features to enable</comment></member>
+            <member len="enabledValidationFeatureCount">const <type>VkValidationFeatureEnableEXT</type>* <name>pEnabledValidationFeatures</name><comment>Validation features to enable</comment></member>
+            <member optional="true"><type>uint32_t</type>                         <name>disabledValidationFeatureCount</name><comment>Number of validation features to disable</comment></member>
+            <member len="disabledValidationFeatureCount">const <type>VkValidationFeatureDisableEXT</type>* <name>pDisabledValidationFeatures</name><comment>Validation features to disable</comment></member>
+        </type>
+        <type category="struct" name="VkApplicationParametersEXT" allowduplicate="true" structextends="VkApplicationInfo,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_APPLICATION_PARAMETERS_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>uint32_t</type>                           <name>vendorID</name></member>
+            <member optional="true"><type>uint32_t</type>           <name>deviceID</name></member>
+            <member><type>uint32_t</type>                           <name>key</name></member>
+            <member><type>uint64_t</type>                           <name>value</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationStateRasterizationOrderAMD" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkRasterizationOrderAMD</type>          <name>rasterizationOrder</name><comment>Rasterization order to use for the pipeline</comment></member>
+        </type>
+        <type category="struct" name="VkDebugMarkerObjectNameInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDebugReportObjectTypeEXT</type>       <name>objectType</name><comment>The type of the object</comment></member>
+            <member objecttype="objectType"><type>uint64_t</type>                         <name>object</name><comment>The handle of the object, cast to uint64_t</comment></member>
+            <member len="null-terminated">const <type>char</type>* <name>pObjectName</name><comment>Name to apply to the object</comment></member>
+        </type>
+        <type category="struct" name="VkDebugMarkerObjectTagInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDebugReportObjectTypeEXT</type>       <name>objectType</name><comment>The type of the object</comment></member>
+            <member  objecttype="objectType"><type>uint64_t</type>                         <name>object</name><comment>The handle of the object, cast to uint64_t</comment></member>
+            <member><type>uint64_t</type>                         <name>tagName</name><comment>The name of the tag to set on the object</comment></member>
+            <member><type>size_t</type>                           <name>tagSize</name><comment>The length in bytes of the tag data</comment></member>
+            <member len="tagSize">const <type>void</type>*        <name>pTag</name><comment>Tag data to attach to the object</comment></member>
+        </type>
+        <type category="struct" name="VkDebugMarkerMarkerInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member len="null-terminated">const <type>char</type>* <name>pMarkerName</name><comment>Name of the debug marker</comment></member>
+            <member><type>float</type>            <name>color</name>[4]<comment>Optional color for debug marker</comment></member>
+        </type>
+        <type category="struct" name="VkDedicatedAllocationImageCreateInfoNV" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>dedicatedAllocation</name><comment>Whether this image uses a dedicated allocation</comment></member>
+        </type>
+        <type category="struct" name="VkDedicatedAllocationBufferCreateInfoNV" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>dedicatedAllocation</name><comment>Whether this buffer uses a dedicated allocation</comment></member>
+        </type>
+        <type category="struct" name="VkDedicatedAllocationMemoryAllocateInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkImage</type>          <name>image</name><comment>Image that this allocation will be bound to</comment></member>
+            <member optional="true"><type>VkBuffer</type>         <name>buffer</name><comment>Buffer that this allocation will be bound to</comment></member>
+        </type>
+        <type category="struct" name="VkExternalImageFormatPropertiesNV" returnedonly="true">
+            <member><type>VkImageFormatProperties</type>          <name>imageFormatProperties</name></member>
+            <member optional="true"><type>VkExternalMemoryFeatureFlagsNV</type>   <name>externalMemoryFeatures</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>exportFromImportedHandleTypes</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>compatibleHandleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExternalMemoryImageCreateInfoNV" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExportMemoryAllocateInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkImportMemoryWin32HandleInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleType</name></member>
+            <member optional="true"><type>HANDLE</type>                           <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkExportMemoryWin32HandleInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true">const <type>SECURITY_ATTRIBUTES</type>*       <name>pAttributes</name></member>
+            <member optional="true"><type>DWORD</type>                            <name>dwAccess</name></member>
+        </type>
+        <type category="struct" name="VkExportMemorySciBufInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_SCI_BUF_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                 <name>pNext</name></member>
+            <member><type>NvSciBufAttrList</type>                            <name>pAttributes</name></member>
+        </type>
+        <type category="struct" name="VkImportMemorySciBufInfoNV" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_SCI_BUF_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type>     <name>handleType</name></member>
+            <member><type>NvSciBufObj</type>                            <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkMemoryGetSciBufInfoNV">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_SCI_BUF_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                         <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type>     <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkMemorySciBufPropertiesNV">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_SCI_BUF_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                               <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalMemorySciBufFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCI_BUF_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                       <name>pNext</name></member>
+            <member><type>VkBool32</type>                                    <name>sciBufImport</name></member>
+            <member><type>VkBool32</type>                                    <name>sciBufExport</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalSciBufFeaturesNV"  alias="VkPhysicalDeviceExternalMemorySciBufFeaturesNV"/>
+        <type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoNV" structextends="VkSubmitInfo,VkSubmitInfo2">
+            <member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                         <name>acquireCount</name></member>
+            <member len="acquireCount">const <type>VkDeviceMemory</type>*            <name>pAcquireSyncs</name></member>
+            <member len="acquireCount">const <type>uint64_t</type>*                  <name>pAcquireKeys</name></member>
+            <member len="acquireCount">const <type>uint32_t</type>*                  <name>pAcquireTimeoutMilliseconds</name></member>
+            <member optional="true"><type>uint32_t</type>                         <name>releaseCount</name></member>
+            <member len="releaseCount">const <type>VkDeviceMemory</type>*            <name>pReleaseSyncs</name></member>
+            <member len="releaseCount">const <type>uint64_t</type>*                  <name>pReleaseKeys</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>deviceGeneratedCommands</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>deviceGeneratedCompute</name></member>
+            <member><type>VkBool32</type>                       <name>deviceGeneratedComputePipelines</name></member>
+            <member><type>VkBool32</type>                       <name>deviceGeneratedComputeCaptureReplay</name></member>
+        </type>
+        <type category="struct" name="VkDevicePrivateDataCreateInfo" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                               <name>privateDataSlotRequestCount</name></member>
+        </type>
+        <type category="struct" name="VkDevicePrivateDataCreateInfoEXT" alias="VkDevicePrivateDataCreateInfo"/>
+        <type category="struct" name="VkPrivateDataSlotCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkPrivateDataSlotCreateFlags</type>        <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPrivateDataSlotCreateInfoEXT" alias="VkPrivateDataSlotCreateInfo"/>
+        <type category="struct" name="VkPhysicalDevicePrivateDataFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                  <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>privateData</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePrivateDataFeaturesEXT" alias="VkPhysicalDevicePrivateDataFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxGraphicsShaderGroupCount</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxIndirectSequenceCount</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxIndirectCommandsTokenCount</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxIndirectCommandsStreamCount</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxIndirectCommandsTokenOffset</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxIndirectCommandsStreamStride</name></member>
+            <member limittype="min"><type>uint32_t</type>         <name>minSequencesCountBufferOffsetAlignment</name></member>
+            <member limittype="min"><type>uint32_t</type>         <name>minSequencesIndexBufferOffsetAlignment</name></member>
+            <member limittype="min"><type>uint32_t</type>         <name>minIndirectCommandsBufferOffsetAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiDrawPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>maxMultiDrawCount</name></member>
+        </type>
+        <type category="struct" name="VkGraphicsShaderGroupCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                   <name>stageCount</name></member>
+            <member len="stageCount">const <type>VkPipelineShaderStageCreateInfo</type>*    <name>pStages</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineVertexInputStateCreateInfo</type>*                <name>pVertexInputState</name></member>
+            <member noautovalidity="true" optional="true">const <type>VkPipelineTessellationStateCreateInfo</type>*               <name>pTessellationState</name></member>
+        </type>
+        <type category="struct" name="VkGraphicsPipelineShaderGroupsCreateInfoNV" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>groupCount</name></member>
+            <member len="groupCount">const <type>VkGraphicsShaderGroupCreateInfoNV</type>*  <name>pGroups</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>pipelineCount</name></member>
+            <member len="pipelineCount">const <type>VkPipeline</type>*                      <name>pPipelines</name></member>
+        </type>
+        <type category="struct" name="VkBindShaderGroupIndirectCommandNV">
+            <member><type>uint32_t</type>         <name>groupIndex</name></member>
+        </type>
+        <type category="struct" name="VkBindIndexBufferIndirectCommandNV">
+            <member><type>VkDeviceAddress</type>  <name>bufferAddress</name></member>
+            <member><type>uint32_t</type>         <name>size</name></member>
+            <member><type>VkIndexType</type>      <name>indexType</name></member>
+        </type>
+        <type category="struct" name="VkBindVertexBufferIndirectCommandNV">
+            <member><type>VkDeviceAddress</type>  <name>bufferAddress</name></member>
+            <member><type>uint32_t</type>         <name>size</name></member>
+            <member><type>uint32_t</type>         <name>stride</name></member>
+        </type>
+        <type category="struct" name="VkSetStateFlagsIndirectCommandNV">
+            <member><type>uint32_t</type>          <name>data</name></member>
+        </type>
+        <type category="struct" name="VkIndirectCommandsStreamNV">
+            <member><type>VkBuffer</type>      <name>buffer</name></member>
+            <member><type>VkDeviceSize</type>  <name>offset</name></member>
+        </type>
+        <type category="struct" name="VkIndirectCommandsLayoutTokenNV">
+            <member values="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>VkIndirectCommandsTokenTypeNV</type>  <name>tokenType</name></member>
+            <member><type>uint32_t</type>                       <name>stream</name></member>
+            <member><type>uint32_t</type>                       <name>offset</name></member>
+            <member><type>uint32_t</type>                                <name>vertexBindingUnit</name></member>
+            <member><type>VkBool32</type>                                <name>vertexDynamicStride</name></member>
+            <member optional="true"><type>VkPipelineLayout</type>        <name>pushconstantPipelineLayout</name></member>
+            <member optional="true"><type>VkShaderStageFlags</type>      <name>pushconstantShaderStageFlags</name></member>
+            <member><type>uint32_t</type>                                <name>pushconstantOffset</name></member>
+            <member><type>uint32_t</type>                                <name>pushconstantSize</name></member>
+            <member optional="true"><type>VkIndirectStateFlagsNV</type>  <name>indirectStateFlags</name></member>
+            <member optional="true"><type>uint32_t</type>                <name>indexTypeCount</name></member>
+            <member len="indexTypeCount">const <type>VkIndexType</type>* <name>pIndexTypes</name></member>
+            <member len="indexTypeCount">const <type>uint32_t</type>*    <name>pIndexTypeValues</name></member>
+        </type>
+        <type category="struct" name="VkIndirectCommandsLayoutCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                             <name>pNext</name></member>
+            <member optional="true"><type>VkIndirectCommandsLayoutUsageFlagsNV</type>    <name>flags</name></member>
+            <member><type>VkPipelineBindPoint</type>                     <name>pipelineBindPoint</name></member>
+            <member><type>uint32_t</type>                                <name>tokenCount</name></member>
+            <member len="tokenCount">const <type>VkIndirectCommandsLayoutTokenNV</type>*  <name>pTokens</name></member>
+            <member><type>uint32_t</type>                                <name>streamCount</name></member>
+            <member len="streamCount">const <type>uint32_t</type>*       <name>pStreamStrides</name></member>
+        </type>
+        <type category="struct" name="VkGeneratedCommandsInfoNV">
+            <member values="VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>VkPipelineBindPoint</type>                <name>pipelineBindPoint</name></member>
+            <member><type>VkPipeline</type>                         <name>pipeline</name></member>
+            <member><type>VkIndirectCommandsLayoutNV</type>         <name>indirectCommandsLayout</name></member>
+            <member><type>uint32_t</type>                           <name>streamCount</name></member>
+            <member len="streamCount">const <type>VkIndirectCommandsStreamNV</type>*  <name>pStreams</name></member>
+            <member><type>uint32_t</type>                           <name>sequencesCount</name></member>
+            <member><type>VkBuffer</type>                           <name>preprocessBuffer</name></member>
+            <member><type>VkDeviceSize</type>                       <name>preprocessOffset</name></member>
+            <member><type>VkDeviceSize</type>                       <name>preprocessSize</name></member>
+            <member optional="true"><type>VkBuffer</type>           <name>sequencesCountBuffer</name></member>
+            <member><type>VkDeviceSize</type>                       <name>sequencesCountOffset</name></member>
+            <member optional="true"><type>VkBuffer</type>           <name>sequencesIndexBuffer</name></member>
+            <member><type>VkDeviceSize</type>                       <name>sequencesIndexOffset</name></member>
+        </type>
+        <type category="struct" name="VkGeneratedCommandsMemoryRequirementsInfoNV">
+            <member values="VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                 <name>pNext</name></member>
+            <member><type>VkPipelineBindPoint</type>         <name>pipelineBindPoint</name></member>
+            <member optional="true"><type>VkPipeline</type>  <name>pipeline</name></member>
+            <member><type>VkIndirectCommandsLayoutNV</type>  <name>indirectCommandsLayout</name></member>
+            <member><type>uint32_t</type>                    <name>maxSequencesCount</name></member>
+        </type>
+        <type category="struct" name="VkPipelineIndirectDeviceAddressInfoNV">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*   <name>pNext</name></member>
+            <member><type>VkPipelineBindPoint</type>           <name>pipelineBindPoint</name></member>
+            <member><type>VkPipeline</type>                    <name>pipeline</name></member>
+        </type>
+        <type category="struct" name="VkBindPipelineIndirectCommandNV">
+            <member><type>VkDeviceAddress</type>               <name>pipelineAddress</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFeatures2" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkPhysicalDeviceFeatures</type>         <name>features</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFeatures2KHR"                            alias="VkPhysicalDeviceFeatures2"/>
+        <type category="struct" name="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="struct"><type>VkPhysicalDeviceProperties</type>       <name>properties</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProperties2KHR"                          alias="VkPhysicalDeviceProperties2"/>
+        <type category="struct" name="VkFormatProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkFormatProperties</type>               <name>formatProperties</name></member>
+        </type>
+        <type category="struct" name="VkFormatProperties2KHR"                                  alias="VkFormatProperties2"/>
+        <type category="struct" name="VkImageFormatProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkImageFormatProperties</type>          <name>imageFormatProperties</name></member>
+        </type>
+        <type category="struct" name="VkImageFormatProperties2KHR"                             alias="VkImageFormatProperties2"/>
+        <type category="struct" name="VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkFormat</type>                         <name>format</name></member>
+            <member><type>VkImageType</type>                      <name>type</name></member>
+            <member><type>VkImageTiling</type>                    <name>tiling</name></member>
+            <member><type>VkImageUsageFlags</type>                <name>usage</name></member>
+            <member optional="true"><type>VkImageCreateFlags</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageFormatInfo2KHR"                     alias="VkPhysicalDeviceImageFormatInfo2"/>
+        <type category="struct" name="VkQueueFamilyProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="struct"><type>VkQueueFamilyProperties</type>       <name>queueFamilyProperties</name></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyProperties2KHR"                             alias="VkQueueFamilyProperties2"/>
+        <type category="struct" name="VkPhysicalDeviceMemoryProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkPhysicalDeviceMemoryProperties</type> <name>memoryProperties</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryProperties2KHR"                    alias="VkPhysicalDeviceMemoryProperties2"/>
+        <type category="struct" name="VkSparseImageFormatProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="struct"><type>VkSparseImageFormatProperties</type> <name>properties</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageFormatProperties2KHR"                       alias="VkSparseImageFormatProperties2"/>
+        <type category="struct" name="VkPhysicalDeviceSparseImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkFormat</type>                         <name>format</name></member>
+            <member><type>VkImageType</type>                      <name>type</name></member>
+            <member><type>VkSampleCountFlagBits</type>            <name>samples</name></member>
+            <member><type>VkImageUsageFlags</type>                <name>usage</name></member>
+            <member><type>VkImageTiling</type>                    <name>tiling</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSparseImageFormatInfo2KHR"               alias="VkPhysicalDeviceSparseImageFormatInfo2"/>
+        <type category="struct" name="VkPhysicalDevicePushDescriptorPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPushDescriptors</name></member>
+        </type>
+        <type category="struct" name="VkConformanceVersion">
+            <member><type>uint8_t</type>                          <name>major</name></member>
+            <member><type>uint8_t</type>                          <name>minor</name></member>
+            <member><type>uint8_t</type>                          <name>subminor</name></member>
+            <member><type>uint8_t</type>                          <name>patch</name></member>
+        </type>
+        <type category="struct" name="VkConformanceVersionKHR"                                 alias="VkConformanceVersion"/>
+        <type category="struct" name="VkPhysicalDeviceDriverProperties" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="exact"><type>VkDriverId</type>                  <name>driverID</name></member>
+            <member limittype="exact"><type>char</type>                        <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member>
+            <member limittype="exact"><type>char</type>                        <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member>
+            <member limittype="exact"><type>VkConformanceVersion</type>        <name>conformanceVersion</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDriverPropertiesKHR"                     alias="VkPhysicalDeviceDriverProperties"/>
+        <type category="struct" name="VkPresentRegionsKHR" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
+            <member len="swapchainCount" optional="true">const <type>VkPresentRegionKHR</type>*   <name>pRegions</name><comment>The regions that have changed</comment></member>
+        </type>
+        <type category="struct" name="VkPresentRegionKHR">
+            <member optional="true"><type>uint32_t</type>         <name>rectangleCount</name><comment>Number of rectangles in pRectangles</comment></member>
+            <member optional="true" len="rectangleCount">const <type>VkRectLayerKHR</type>*   <name>pRectangles</name><comment>Array of rectangles that have changed in a swapchain's image(s)</comment></member>
+        </type>
+        <type category="struct" name="VkRectLayerKHR">
+            <member><type>VkOffset2D</type>                       <name>offset</name><comment>upper-left corner of a rectangle that has not changed, in pixels of a presentation images</comment></member>
+            <member noautovalidity="true"><type>VkExtent2D</type> <name>extent</name><comment>Dimensions of a rectangle that has not changed, in pixels of a presentation images</comment></member>
+            <member><type>uint32_t</type>                         <name>layer</name><comment>Layer of a swapchain's image(s), for stereoscopic-3D images</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVariablePointersFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>variablePointersStorageBuffer</name></member>
+            <member><type>VkBool32</type>                         <name>variablePointers</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVariablePointersFeaturesKHR"             alias="VkPhysicalDeviceVariablePointersFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceVariablePointerFeaturesKHR"              alias="VkPhysicalDeviceVariablePointersFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceVariablePointerFeatures"                 alias="VkPhysicalDeviceVariablePointersFeatures"/>
+        <type category="struct" name="VkExternalMemoryProperties" returnedonly="true">
+            <member><type>VkExternalMemoryFeatureFlags</type>  <name>externalMemoryFeatures</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlags</type> <name>exportFromImportedHandleTypes</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlags</type> <name>compatibleHandleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExternalMemoryPropertiesKHR"                           alias="VkExternalMemoryProperties"/>
+        <type category="struct" name="VkPhysicalDeviceExternalImageFormatInfo"  structextends="VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalImageFormatInfoKHR"              alias="VkPhysicalDeviceExternalImageFormatInfo"/>
+        <type category="struct" name="VkExternalImageFormatProperties" returnedonly="true" structextends="VkImageFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkExternalMemoryProperties</type> <name>externalMemoryProperties</name></member>
+        </type>
+        <type category="struct" name="VkExternalImageFormatPropertiesKHR"                      alias="VkExternalImageFormatProperties"/>
+        <type category="struct" name="VkPhysicalDeviceExternalBufferInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkBufferCreateFlags</type> <name>flags</name></member>
+            <member><type>VkBufferUsageFlags</type>               <name>usage</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalBufferInfoKHR"                   alias="VkPhysicalDeviceExternalBufferInfo"/>
+        <type category="struct" name="VkExternalBufferProperties" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkExternalMemoryProperties</type>    <name>externalMemoryProperties</name></member>
+        </type>
+        <type category="struct" name="VkExternalBufferPropertiesKHR"                           alias="VkExternalBufferProperties"/>
+        <type category="struct" name="VkPhysicalDeviceIDProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="noauto"><type>uint8_t</type>                     <name>deviceUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="noauto"><type>uint8_t</type>                     <name>driverUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="noauto"><type>uint8_t</type>                     <name>deviceLUID</name>[<enum>VK_LUID_SIZE</enum>]</member>
+            <member limittype="noauto"><type>uint32_t</type>                    <name>deviceNodeMask</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                    <name>deviceLUIDValid</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceIDPropertiesKHR"                         alias="VkPhysicalDeviceIDProperties"/>
+        <type category="struct" name="VkExternalMemoryImageCreateInfo" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlags</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExternalMemoryImageCreateInfoKHR"                      alias="VkExternalMemoryImageCreateInfo"/>
+        <type category="struct" name="VkExternalMemoryBufferCreateInfo" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlags</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExternalMemoryBufferCreateInfoKHR"                     alias="VkExternalMemoryBufferCreateInfo"/>
+        <type category="struct" name="VkExportMemoryAllocateInfo" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlags</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExportMemoryAllocateInfoKHR"                           alias="VkExportMemoryAllocateInfo"/>
+        <type category="struct" name="VkImportMemoryWin32HandleInfoKHR" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member optional="true"><type>HANDLE</type>           <name>handle</name></member>
+            <member optional="true"><type>LPCWSTR</type>          <name>name</name></member>
+        </type>
+        <type category="struct" name="VkExportMemoryWin32HandleInfoKHR" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true">const <type>SECURITY_ATTRIBUTES</type>* <name>pAttributes</name></member>
+            <member><type>DWORD</type>                            <name>dwAccess</name></member>
+            <member><type>LPCWSTR</type>                          <name>name</name></member>
+        </type>
+        <type category="struct" name="VkImportMemoryZirconHandleInfoFUCHSIA" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member optional="true"><type>zx_handle_t</type>           <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkMemoryZirconHandlePropertiesFUCHSIA" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkMemoryGetZirconHandleInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkMemoryWin32HandlePropertiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkMemoryGetWin32HandleInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkImportMemoryFdInfoKHR" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member><type>int</type>                              <name>fd</name></member>
+        </type>
+        <type category="struct" name="VkMemoryFdPropertiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkMemoryGetFdInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoKHR" structextends="VkSubmitInfo,VkSubmitInfo2">
+            <member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>acquireCount</name></member>
+            <member len="acquireCount">const <type>VkDeviceMemory</type>* <name>pAcquireSyncs</name></member>
+            <member len="acquireCount">const <type>uint64_t</type>* <name>pAcquireKeys</name></member>
+            <member len="acquireCount">const <type>uint32_t</type>* <name>pAcquireTimeouts</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>releaseCount</name></member>
+            <member len="releaseCount">const <type>VkDeviceMemory</type>* <name>pReleaseSyncs</name></member>
+            <member len="releaseCount">const <type>uint64_t</type>* <name>pReleaseKeys</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalSemaphoreInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalSemaphoreInfoKHR"                alias="VkPhysicalDeviceExternalSemaphoreInfo"/>
+        <type category="struct" name="VkExternalSemaphoreProperties" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlags</type> <name>exportFromImportedHandleTypes</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlags</type> <name>compatibleHandleTypes</name></member>
+            <member optional="true"><type>VkExternalSemaphoreFeatureFlags</type> <name>externalSemaphoreFeatures</name></member>
+        </type>
+        <type category="struct" name="VkExternalSemaphorePropertiesKHR"                        alias="VkExternalSemaphoreProperties"/>
+        <type category="struct" name="VkExportSemaphoreCreateInfo" structextends="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalSemaphoreHandleTypeFlags</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExportSemaphoreCreateInfoKHR"                          alias="VkExportSemaphoreCreateInfo"/>
+        <type category="struct" name="VkImportSemaphoreWin32HandleInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkSemaphore</type>    <name>semaphore</name></member>
+            <member optional="true"><type>VkSemaphoreImportFlags</type> <name>flags</name></member>
+            <member noautovalidity="true"><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member optional="true"><type>HANDLE</type>           <name>handle</name></member>
+            <member optional="true"><type>LPCWSTR</type>          <name>name</name></member>
+        </type>
+        <type category="struct" name="VkExportSemaphoreWin32HandleInfoKHR" structextends="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true">const <type>SECURITY_ATTRIBUTES</type>*       <name>pAttributes</name></member>
+            <member><type>DWORD</type>                            <name>dwAccess</name></member>
+            <member><type>LPCWSTR</type>                          <name>name</name></member>
+        </type>
+        <type category="struct" name="VkD3D12FenceSubmitInfoKHR" structextends="VkSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>waitSemaphoreValuesCount</name></member>
+            <member optional="true" len="waitSemaphoreValuesCount">const <type>uint64_t</type>* <name>pWaitSemaphoreValues</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>signalSemaphoreValuesCount</name></member>
+            <member optional="true" len="signalSemaphoreValuesCount">const <type>uint64_t</type>* <name>pSignalSemaphoreValues</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreGetWin32HandleInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkSemaphore</type>                      <name>semaphore</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkImportSemaphoreFdInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkSemaphore</type>    <name>semaphore</name></member>
+            <member optional="true"><type>VkSemaphoreImportFlags</type> <name>flags</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member><type>int</type>                              <name>fd</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreGetFdInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkSemaphore</type>                      <name>semaphore</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkImportSemaphoreZirconHandleInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkSemaphore</type>    <name>semaphore</name></member>
+            <member optional="true"><type>VkSemaphoreImportFlags</type> <name>flags</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member><type>zx_handle_t</type>                              <name>zirconHandle</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreGetZirconHandleInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkSemaphore</type>                      <name>semaphore</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalFenceInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalFenceInfoKHR"                    alias="VkPhysicalDeviceExternalFenceInfo"/>
+        <type category="struct" name="VkExternalFenceProperties" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkExternalFenceHandleTypeFlags</type> <name>exportFromImportedHandleTypes</name></member>
+            <member><type>VkExternalFenceHandleTypeFlags</type> <name>compatibleHandleTypes</name></member>
+            <member optional="true"><type>VkExternalFenceFeatureFlags</type> <name>externalFenceFeatures</name></member>
+        </type>
+        <type category="struct" name="VkExternalFencePropertiesKHR"                            alias="VkExternalFenceProperties"/>
+        <type category="struct" name="VkExportFenceCreateInfo" structextends="VkFenceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkExternalFenceHandleTypeFlags</type> <name>handleTypes</name></member>
+        </type>
+        <type category="struct" name="VkExportFenceCreateInfoKHR"                              alias="VkExportFenceCreateInfo"/>
+        <type category="struct" name="VkImportFenceWin32HandleInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                        <name>pNext</name></member>
+            <member externsync="true"><type>VkFence</type>                          <name>fence</name></member>
+            <member optional="true"><type>VkFenceImportFlags</type>              <name>flags</name></member>
+            <member noautovalidity="true"><type>VkExternalFenceHandleTypeFlagBits</type>  <name>handleType</name></member>
+            <member optional="true"><type>HANDLE</type>                             <name>handle</name></member>
+            <member optional="true"><type>LPCWSTR</type>                            <name>name</name></member>
+        </type>
+        <type category="struct" name="VkExportFenceWin32HandleInfoKHR" structextends="VkFenceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member optional="true">const <type>SECURITY_ATTRIBUTES</type>* <name>pAttributes</name></member>
+            <member><type>DWORD</type>                                      <name>dwAccess</name></member>
+            <member><type>LPCWSTR</type>                                    <name>name</name></member>
+        </type>
+        <type category="struct" name="VkFenceGetWin32HandleInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkFence</type>                                <name>fence</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type>   <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkImportFenceFdInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member externsync="true"><type>VkFence</type>              <name>fence</name></member>
+            <member optional="true"><type>VkFenceImportFlags</type>  <name>flags</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type>   <name>handleType</name></member>
+            <member><type>int</type>                                    <name>fd</name></member>
+        </type>
+        <type category="struct" name="VkFenceGetFdInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkFence</type>                                <name>fence</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type>   <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkExportFenceSciSyncInfoNV" structextends="VkFenceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_FENCE_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>NvSciSyncAttrList</type>                      <name>pAttributes</name></member>
+        </type>
+        <type category="struct" name="VkImportFenceSciSyncInfoNV">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_FENCE_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member externsync="true"><type>VkFence</type>              <name>fence</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type>      <name>handleType</name></member>
+            <member><type>void</type>*                                  <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkFenceGetSciSyncInfoNV">
+            <member values="VK_STRUCTURE_TYPE_FENCE_GET_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkFence</type>                                <name>fence</name></member>
+            <member><type>VkExternalFenceHandleTypeFlagBits</type>      <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkExportSemaphoreSciSyncInfoNV" structextends="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>NvSciSyncAttrList</type>                      <name>pAttributes</name></member>
+        </type>
+        <type category="struct" name="VkImportSemaphoreSciSyncInfoNV">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member externsync="true"><type>VkSemaphore</type>          <name>semaphore</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type>  <name>handleType</name></member>
+            <member><type>void</type>*                                  <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreGetSciSyncInfoNV">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_GET_SCI_SYNC_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSemaphore</type>                            <name>semaphore</name></member>
+            <member><type>VkExternalSemaphoreHandleTypeFlagBits</type>  <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkSciSyncAttributesInfoNV">
+            <member values="VK_STRUCTURE_TYPE_SCI_SYNC_ATTRIBUTES_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSciSyncClientTypeNV</type>                  <name>clientType</name></member>
+            <member><type>VkSciSyncPrimitiveTypeNV</type>               <name>primitiveType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalSciSyncFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SCI_SYNC_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncFence</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncSemaphore</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncImport</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncExport</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalSciSync2FeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SCI_SYNC_2_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncFence</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncSemaphore2</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncImport</name></member>
+            <member><type>VkBool32</type>                               <name>sciSyncExport</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreSciSyncPoolCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_SCI_SYNC_POOL_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>NvSciSyncObj</type>                           <name>handle</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreSciSyncCreateInfoNV" structextends="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_SCI_SYNC_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSemaphoreSciSyncPoolNV</type>               <name>semaphorePool</name></member>
+            <member>const <type>NvSciSyncFence</type>*                  <name>pFence</name></member>
+        </type>
+        <type category="struct" name="VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_SEMAPHORE_SCI_SYNC_POOL_RESERVATION_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                               <name>semaphoreSciSyncPoolRequestCount</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>multiview</name><comment>Multiple views in a renderpass</comment></member>
+            <member><type>VkBool32</type>                         <name>multiviewGeometryShader</name><comment>Multiple views in a renderpass w/ geometry shader</comment></member>
+            <member><type>VkBool32</type>                         <name>multiviewTessellationShader</name><comment>Multiple views in a renderpass w/ tessellation shader</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewFeaturesKHR"                    alias="VkPhysicalDeviceMultiviewFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceMultiviewProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxMultiviewViewCount</name><comment>max number of views in a subpass</comment></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxMultiviewInstanceIndex</name><comment>max instance index for a draw in a multiview subpass</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewPropertiesKHR"                  alias="VkPhysicalDeviceMultiviewProperties"/>
+        <type category="struct" name="VkRenderPassMultiviewCreateInfo" structextends="VkRenderPassCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"><type>VkStructureType</type>        <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>subpassCount</name></member>
+            <member len="subpassCount">const <type>uint32_t</type>*     <name>pViewMasks</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>dependencyCount</name></member>
+            <member len="dependencyCount">const <type>int32_t</type>*   <name>pViewOffsets</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>correlationMaskCount</name></member>
+            <member len="correlationMaskCount">const <type>uint32_t</type>* <name>pCorrelationMasks</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassMultiviewCreateInfoKHR"                      alias="VkRenderPassMultiviewCreateInfo"/>
+        <type category="struct" name="VkSurfaceCapabilities2EXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>minImageCount</name><comment>Supported minimum number of images for the surface</comment></member>
+            <member><type>uint32_t</type>                         <name>maxImageCount</name><comment>Supported maximum number of images for the surface, 0 for unlimited</comment></member>
+            <member><type>VkExtent2D</type>                       <name>currentExtent</name><comment>Current image width and height for the surface, (0, 0) if undefined</comment></member>
+            <member><type>VkExtent2D</type>                       <name>minImageExtent</name><comment>Supported minimum image width and height for the surface</comment></member>
+            <member><type>VkExtent2D</type>                       <name>maxImageExtent</name><comment>Supported maximum image width and height for the surface</comment></member>
+            <member><type>uint32_t</type>                         <name>maxImageArrayLayers</name><comment>Supported maximum number of image layers for the surface</comment></member>
+            <member><type>VkSurfaceTransformFlagsKHR</type>       <name>supportedTransforms</name><comment>1 or more bits representing the transforms supported</comment></member>
+            <member><type>VkSurfaceTransformFlagBitsKHR</type>    <name>currentTransform</name><comment>The surface's current transform relative to the device's natural orientation</comment></member>
+            <member><type>VkCompositeAlphaFlagsKHR</type>         <name>supportedCompositeAlpha</name><comment>1 or more bits representing the alpha compositing modes supported</comment></member>
+            <member><type>VkImageUsageFlags</type>                <name>supportedUsageFlags</name><comment>Supported image usage flags for the surface</comment></member>
+            <member optional="true"><type>VkSurfaceCounterFlagsEXT</type> <name>supportedSurfaceCounters</name></member>
+        </type>
+        <type category="struct" name="VkDisplayPowerInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDisplayPowerStateEXT</type>           <name>powerState</name></member>
+        </type>
+        <type category="struct" name="VkDeviceEventInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceEventTypeEXT</type>             <name>deviceEvent</name></member>
+        </type>
+        <type category="struct" name="VkDisplayEventInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDisplayEventTypeEXT</type>            <name>displayEvent</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainCounterCreateInfoEXT" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkSurfaceCounterFlagsEXT</type>         <name>surfaceCounters</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGroupProperties" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>physicalDeviceCount</name></member>
+            <member><type>VkPhysicalDevice</type>                 <name>physicalDevices</name>[<enum>VK_MAX_DEVICE_GROUP_SIZE</enum>]</member>
+            <member><type>VkBool32</type>                         <name>subsetAllocation</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGroupPropertiesKHR"                      alias="VkPhysicalDeviceGroupProperties"/>
+        <type category="struct" name="VkMemoryAllocateFlagsInfo" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkMemoryAllocateFlags</type> <name>flags</name></member>
+            <member><type>uint32_t</type>                         <name>deviceMask</name></member>
+        </type>
+        <type category="struct" name="VkMemoryAllocateFlagsInfoKHR"                            alias="VkMemoryAllocateFlagsInfo"/>
+        <type category="struct" name="VkBindBufferMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBuffer</type>                         <name>buffer</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkDeviceSize</type>                     <name>memoryOffset</name></member>
+        </type>
+        <type category="struct" name="VkBindBufferMemoryInfoKHR"                               alias="VkBindBufferMemoryInfo"/>
+        <type category="struct" name="VkBindBufferMemoryDeviceGroupInfo" structextends="VkBindBufferMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>deviceIndexCount</name></member>
+            <member len="deviceIndexCount">const <type>uint32_t</type>*  <name>pDeviceIndices</name></member>
+        </type>
+        <type category="struct" name="VkBindBufferMemoryDeviceGroupInfoKHR"                    alias="VkBindBufferMemoryDeviceGroupInfo"/>
+        <type category="struct" name="VkBindImageMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkImage</type>                          <name>image</name></member>
+            <member noautovalidity="true"><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkDeviceSize</type>                     <name>memoryOffset</name></member>
+        </type>
+        <type category="struct" name="VkBindImageMemoryInfoKHR"                                alias="VkBindImageMemoryInfo"/>
+        <type category="struct" name="VkBindImageMemoryDeviceGroupInfo" structextends="VkBindImageMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>deviceIndexCount</name></member>
+            <member len="deviceIndexCount">const <type>uint32_t</type>*  <name>pDeviceIndices</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>splitInstanceBindRegionCount</name></member>
+            <member len="splitInstanceBindRegionCount">const <type>VkRect2D</type>*  <name>pSplitInstanceBindRegions</name></member>
+        </type>
+        <type category="struct" name="VkBindImageMemoryDeviceGroupInfoKHR"                     alias="VkBindImageMemoryDeviceGroupInfo"/>
+        <type category="struct" name="VkDeviceGroupRenderPassBeginInfo" structextends="VkRenderPassBeginInfo,VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>deviceMask</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>deviceRenderAreaCount</name></member>
+            <member len="deviceRenderAreaCount">const <type>VkRect2D</type>*  <name>pDeviceRenderAreas</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupRenderPassBeginInfoKHR"                     alias="VkDeviceGroupRenderPassBeginInfo"/>
+        <type category="struct" name="VkDeviceGroupCommandBufferBeginInfo" structextends="VkCommandBufferBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>deviceMask</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupCommandBufferBeginInfoKHR"                  alias="VkDeviceGroupCommandBufferBeginInfo"/>
+        <type category="struct" name="VkDeviceGroupSubmitInfo" structextends="VkSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>waitSemaphoreCount</name></member>
+            <member len="waitSemaphoreCount">const <type>uint32_t</type>*    <name>pWaitSemaphoreDeviceIndices</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>commandBufferCount</name></member>
+            <member len="commandBufferCount">const <type>uint32_t</type>*    <name>pCommandBufferDeviceMasks</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>signalSemaphoreCount</name></member>
+            <member len="signalSemaphoreCount">const <type>uint32_t</type>*  <name>pSignalSemaphoreDeviceIndices</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupSubmitInfoKHR"                              alias="VkDeviceGroupSubmitInfo"/>
+        <type category="struct" name="VkDeviceGroupBindSparseInfo" structextends="VkBindSparseInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>resourceDeviceIndex</name></member>
+            <member><type>uint32_t</type>                         <name>memoryDeviceIndex</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupBindSparseInfoKHR"                          alias="VkDeviceGroupBindSparseInfo"/>
+        <type category="struct" name="VkDeviceGroupPresentCapabilitiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>presentMask</name>[<enum>VK_MAX_DEVICE_GROUP_SIZE</enum>]</member>
+            <member><type>VkDeviceGroupPresentModeFlagsKHR</type> <name>modes</name></member>
+        </type>
+        <type category="struct" name="VkImageSwapchainCreateInfoKHR" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkSwapchainKHR</type>   <name>swapchain</name></member>
+        </type>
+        <type category="struct" name="VkBindImageMemorySwapchainInfoKHR" structextends="VkBindImageMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
+            <member><type>uint32_t</type>                         <name>imageIndex</name></member>
+        </type>
+        <type category="struct" name="VkAcquireNextImageInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
+            <member><type>uint64_t</type>                         <name>timeout</name></member>
+            <member optional="true" externsync="true"><type>VkSemaphore</type> <name>semaphore</name></member>
+            <member optional="true" externsync="true"><type>VkFence</type> <name>fence</name></member>
+            <member><type>uint32_t</type>                         <name>deviceMask</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupPresentInfoKHR" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>swapchainCount</name></member>
+            <member len="swapchainCount">const <type>uint32_t</type>* <name>pDeviceMasks</name></member>
+            <member><type>VkDeviceGroupPresentModeFlagBitsKHR</type> <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupDeviceCreateInfo" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                         <name>physicalDeviceCount</name></member>
+            <member len="physicalDeviceCount">const <type>VkPhysicalDevice</type>*  <name>pPhysicalDevices</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGroupDeviceCreateInfoKHR"                        alias="VkDeviceGroupDeviceCreateInfo"/>
+        <type category="struct" name="VkDeviceGroupSwapchainCreateInfoKHR" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceGroupPresentModeFlagsKHR</type>                         <name>modes</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorUpdateTemplateEntry">
+            <member><type>uint32_t</type>                         <name>dstBinding</name><comment>Binding within the destination descriptor set to write</comment></member>
+            <member><type>uint32_t</type>                         <name>dstArrayElement</name><comment>Array element within the destination binding to write</comment></member>
+            <member><type>uint32_t</type>                         <name>descriptorCount</name><comment>Number of descriptors to write</comment></member>
+            <member><type>VkDescriptorType</type>                 <name>descriptorType</name><comment>Descriptor type to write</comment></member>
+            <member><type>size_t</type>                           <name>offset</name><comment>Offset into pData where the descriptors to update are stored</comment></member>
+            <member><type>size_t</type>                           <name>stride</name><comment>Stride between two descriptors in pData when writing more than one descriptor</comment></member>
+        </type>
+        <type category="struct" name="VkDescriptorUpdateTemplateEntryKHR"                      alias="VkDescriptorUpdateTemplateEntry"/>
+        <type category="struct" name="VkDescriptorUpdateTemplateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                               <name>pNext</name></member>
+            <member optional="true"><type>VkDescriptorUpdateTemplateCreateFlags</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>                 <name>descriptorUpdateEntryCount</name><comment>Number of descriptor update entries to use for the update template</comment></member>
+            <member len="descriptorUpdateEntryCount">const <type>VkDescriptorUpdateTemplateEntry</type>* <name>pDescriptorUpdateEntries</name><comment>Descriptor update entries for the template</comment></member>
+            <member><type>VkDescriptorUpdateTemplateType</type> <name>templateType</name></member>
+            <member noautovalidity="true"><type>VkDescriptorSetLayout</type> <name>descriptorSetLayout</name></member>
+            <member noautovalidity="true"><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></member>
+            <member noautovalidity="true"><type>VkPipelineLayout</type> <name>pipelineLayout</name><comment>If used for push descriptors, this is the only allowed layout</comment></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>set</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorUpdateTemplateCreateInfoKHR"                 alias="VkDescriptorUpdateTemplateCreateInfo"/>
+        <type category="struct" name="VkXYColorEXT" comment="Chromaticity coordinate">
+            <member><type>float</type>   <name>x</name></member>
+            <member><type>float</type>   <name>y</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePresentIdFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>presentId</name><comment>Present ID in VkPresentInfoKHR</comment></member>
+        </type>
+        <type category="struct" name="VkPresentIdKHR" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PRESENT_ID_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
+            <member len="swapchainCount" optional="true">const <type>uint64_t</type>* <name>pPresentIds</name><comment>Present ID values for each swapchain</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePresentWaitFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>presentWait</name><comment>vkWaitForPresentKHR is supported</comment></member>
+        </type>
+        <type category="struct" name="VkHdrMetadataEXT">
+                <comment>Display primary in chromaticity coordinates</comment>
+            <member values="VK_STRUCTURE_TYPE_HDR_METADATA_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+                <comment> From SMPTE 2086</comment>
+            <member noautovalidity="true"><type>VkXYColorEXT</type>   <name>displayPrimaryRed</name><comment>Display primary's Red</comment></member>
+            <member noautovalidity="true"><type>VkXYColorEXT</type>   <name>displayPrimaryGreen</name><comment>Display primary's Green</comment></member>
+            <member noautovalidity="true"><type>VkXYColorEXT</type>   <name>displayPrimaryBlue</name><comment>Display primary's Blue</comment></member>
+            <member noautovalidity="true"><type>VkXYColorEXT</type>   <name>whitePoint</name><comment>Display primary's Blue</comment></member>
+            <member noautovalidity="true"><type>float</type>          <name>maxLuminance</name><comment>Display maximum luminance</comment></member>
+            <member noautovalidity="true"><type>float</type>          <name>minLuminance</name><comment>Display minimum luminance</comment></member>
+                <comment> From CTA 861.3</comment>
+            <member noautovalidity="true"><type>float</type>          <name>maxContentLightLevel</name><comment>Content maximum luminance</comment></member>
+            <member noautovalidity="true"><type>float</type>          <name>maxFrameAverageLightLevel</name></member>
+        </type>
+        <type category="struct" name="VkDisplayNativeHdrSurfaceCapabilitiesAMD" returnedonly="true" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member><type>VkBool32</type>       <name>localDimmingSupport</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainDisplayNativeHdrCreateInfoAMD" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>       <name>localDimmingEnable</name></member>
+        </type>
+        <type category="struct" name="VkRefreshCycleDurationGOOGLE" returnedonly="true">
+            <member><type>uint64_t</type>                         <name>refreshDuration</name><comment>Number of nanoseconds from the start of one refresh cycle to the next</comment></member>
+        </type>
+        <type category="struct" name="VkPastPresentationTimingGOOGLE" returnedonly="true">
+            <member><type>uint32_t</type>                         <name>presentID</name><comment>Application-provided identifier, previously given to vkQueuePresentKHR</comment></member>
+            <member><type>uint64_t</type>                         <name>desiredPresentTime</name><comment>Earliest time an image should have been presented, previously given to vkQueuePresentKHR</comment></member>
+            <member><type>uint64_t</type>                         <name>actualPresentTime</name><comment>Time the image was actually displayed</comment></member>
+            <member><type>uint64_t</type>                         <name>earliestPresentTime</name><comment>Earliest time the image could have been displayed</comment></member>
+            <member><type>uint64_t</type>                         <name>presentMargin</name><comment>How early vkQueuePresentKHR was processed vs. how soon it needed to be and make earliestPresentTime</comment></member>
+        </type>
+        <type category="struct" name="VkPresentTimesInfoGOOGLE" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
+            <member len="swapchainCount" optional="true">const <type>VkPresentTimeGOOGLE</type>*   <name>pTimes</name><comment>The earliest times to present images</comment></member>
+        </type>
+        <type category="struct" name="VkPresentTimeGOOGLE">
+            <member><type>uint32_t</type>                         <name>presentID</name><comment>Application-provided identifier</comment></member>
+            <member><type>uint64_t</type>                         <name>desiredPresentTime</name><comment>Earliest time an image should be presented</comment></member>
+        </type>
+        <type category="struct" name="VkIOSSurfaceCreateInfoMVK">
+            <member values="VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>VkIOSSurfaceCreateFlagsMVK</type>     <name>flags</name></member>
+            <member noautovalidity="true">const <type>void</type>*                                    <name>pView</name></member>
+        </type>
+        <type category="struct" name="VkMacOSSurfaceCreateInfoMVK">
+            <member values="VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>VkMacOSSurfaceCreateFlagsMVK</type>   <name>flags</name></member>
+            <member noautovalidity="true">const <type>void</type>*                                    <name>pView</name></member>
+        </type>
+        <type category="struct" name="VkMetalSurfaceCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>VkMetalSurfaceCreateFlagsEXT</type>   <name>flags</name></member>
+            <member noautovalidity="true">const <type>CAMetalLayer</type>*      <name>pLayer</name></member>
+        </type>
+        <type category="struct" name="VkViewportWScalingNV">
+            <member><type>float</type>          <name>xcoeff</name></member>
+            <member><type>float</type>          <name>ycoeff</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportWScalingStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>viewportWScalingEnable</name></member>
+            <member><type>uint32_t</type>               <name>viewportCount</name></member>
+            <member noautovalidity="true" optional="true" len="viewportCount">const <type>VkViewportWScalingNV</type>*      <name>pViewportWScalings</name></member>
+        </type>
+        <type category="struct" name="VkViewportSwizzleNV">
+            <member><type>VkViewportCoordinateSwizzleNV</type>          <name>x</name></member>
+            <member><type>VkViewportCoordinateSwizzleNV</type>          <name>y</name></member>
+            <member><type>VkViewportCoordinateSwizzleNV</type>          <name>z</name></member>
+            <member><type>VkViewportCoordinateSwizzleNV</type>          <name>w</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportSwizzleStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineViewportSwizzleStateCreateFlagsNV</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>               <name>viewportCount</name></member>
+            <member len="viewportCount">const <type>VkViewportSwizzleNV</type>*      <name>pViewportSwizzles</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDiscardRectanglePropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDiscardRectangles</name><comment>max number of active discard rectangles</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineDiscardRectangleStateCreateInfoEXT" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                       <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineDiscardRectangleStateCreateFlagsEXT</type>     <name>flags</name></member>
+            <member><type>VkDiscardRectangleModeEXT</type>                                         <name>discardRectangleMode</name></member>
+            <member optional="true"><type>uint32_t</type>                                          <name>discardRectangleCount</name></member>
+            <member noautovalidity="true" len="discardRectangleCount">const <type>VkRect2D</type>* <name>pDiscardRectangles</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>perViewPositionAllComponents</name></member>
+        </type>
+        <type category="struct" name="VkInputAttachmentAspectReference">
+            <member><type>uint32_t</type>                        <name>subpass</name></member>
+            <member><type>uint32_t</type>                        <name>inputAttachmentIndex</name></member>
+            <member><type>VkImageAspectFlags</type>              <name>aspectMask</name></member>
+        </type>
+        <type category="struct" name="VkInputAttachmentAspectReferenceKHR"                     alias="VkInputAttachmentAspectReference"/>
+        <type category="struct" name="VkRenderPassInputAttachmentAspectCreateInfo" structextends="VkRenderPassCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member><type>uint32_t</type>                        <name>aspectReferenceCount</name></member>
+            <member len="aspectReferenceCount">const <type>VkInputAttachmentAspectReference</type>* <name>pAspectReferences</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassInputAttachmentAspectCreateInfoKHR"          alias="VkRenderPassInputAttachmentAspectCreateInfo"/>
+        <type category="struct" name="VkPhysicalDeviceSurfaceInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>VkSurfaceKHR</type> <name>surface</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceCapabilities2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*   <name>pNext</name></member>
+            <member><type>VkSurfaceCapabilitiesKHR</type> <name>surfaceCapabilities</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceFormat2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkSurfaceFormatKHR</type> <name>surfaceFormat</name></member>
+        </type>
+        <type category="struct" name="VkDisplayProperties2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkDisplayPropertiesKHR</type> <name>displayProperties</name></member>
+        </type>
+        <type category="struct" name="VkDisplayPlaneProperties2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkDisplayPlanePropertiesKHR</type> <name>displayPlaneProperties</name></member>
+        </type>
+        <type category="struct" name="VkDisplayModeProperties2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkDisplayModePropertiesKHR</type> <name>displayModeProperties</name></member>
+        </type>
+        <type category="struct" name="VkDisplayPlaneInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member externsync="true"><type>VkDisplayModeKHR</type> <name>mode</name></member>
+            <member><type>uint32_t</type> <name>planeIndex</name></member>
+        </type>
+        <type category="struct" name="VkDisplayPlaneCapabilities2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkDisplayPlaneCapabilitiesKHR</type> <name>capabilities</name></member>
+        </type>
+        <type category="struct" name="VkSharedPresentSurfaceCapabilitiesKHR" returnedonly="true" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkImageUsageFlags</type> <name>sharedPresentSupportedUsageFlags</name><comment>Supported image usage flags if swapchain created using a shared present mode</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevice16BitStorageFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>storageBuffer16BitAccess</name><comment>16-bit integer/floating-point variables supported in BufferBlock</comment></member>
+            <member><type>VkBool32</type>                         <name>uniformAndStorageBuffer16BitAccess</name><comment>16-bit integer/floating-point variables supported in BufferBlock and Block</comment></member>
+            <member><type>VkBool32</type>                         <name>storagePushConstant16</name><comment>16-bit integer/floating-point variables supported in PushConstant</comment></member>
+            <member><type>VkBool32</type>                         <name>storageInputOutput16</name><comment>16-bit integer/floating-point variables supported in shader inputs and outputs</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevice16BitStorageFeaturesKHR"                 alias="VkPhysicalDevice16BitStorageFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceSubgroupProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                   <name>pNext</name></member>
+            <member limittype="max,pot" noautovalidity="true"><type>uint32_t</type>                     <name>subgroupSize</name><comment>The size of a subgroup for this queue.</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkShaderStageFlags</type>            <name>supportedStages</name><comment>Bitfield of what shader stages support subgroup operations</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkSubgroupFeatureFlags</type>        <name>supportedOperations</name><comment>Bitfield of what subgroup operations are supported.</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkBool32</type> <name>quadOperationsInAllStages</name><comment>Flag to specify whether quad operations are available in all stages.</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkBool32</type> <name>shaderSubgroupExtendedTypes</name><comment>Flag to specify whether subgroup operations with extended types are supported</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR"  alias="VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures"/>
+        <type category="struct" name="VkBufferMemoryRequirementsInfo2">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member><type>VkBuffer</type>                                                             <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkBufferMemoryRequirementsInfo2KHR"                      alias="VkBufferMemoryRequirementsInfo2"/>
+        <type category="struct" name="VkDeviceBufferMemoryRequirements">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                           <name>pNext</name></member>
+            <member>const <type>VkBufferCreateInfo</type>*                                                             <name>pCreateInfo</name></member>
+        </type>
+        <type category="struct" name="VkDeviceBufferMemoryRequirementsKHR" alias="VkDeviceBufferMemoryRequirements"/>
+        <type category="struct" name="VkImageMemoryRequirementsInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member><type>VkImage</type>                                                              <name>image</name></member>
+        </type>
+        <type category="struct" name="VkImageMemoryRequirementsInfo2KHR"                       alias="VkImageMemoryRequirementsInfo2"/>
+        <type category="struct" name="VkImageSparseMemoryRequirementsInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member><type>VkImage</type>                                                              <name>image</name></member>
+        </type>
+        <type category="struct" name="VkImageSparseMemoryRequirementsInfo2KHR"                 alias="VkImageSparseMemoryRequirementsInfo2"/>
+        <type category="struct" name="VkDeviceImageMemoryRequirements">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member>const <type>VkImageCreateInfo</type>*                                                             <name>pCreateInfo</name></member>
+            <member optional="true"><type>VkImageAspectFlagBits</type>                                                <name>planeAspect</name></member>
+        </type>
+        <type category="struct" name="VkDeviceImageMemoryRequirementsKHR" alias="VkDeviceImageMemoryRequirements"/>
+        <type category="struct" name="VkMemoryRequirements2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkMemoryRequirements</type>                                                 <name>memoryRequirements</name></member>
+        </type>
+        <type category="struct" name="VkMemoryRequirements2KHR"                                alias="VkMemoryRequirements2"/>
+        <type category="struct" name="VkSparseImageMemoryRequirements2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                       <name>pNext</name></member>
+            <member><type>VkSparseImageMemoryRequirements</type>                                      <name>memoryRequirements</name></member>
+        </type>
+        <type category="struct" name="VkSparseImageMemoryRequirements2KHR"                     alias="VkSparseImageMemoryRequirements2"/>
+        <type category="struct" name="VkPhysicalDevicePointClippingProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="exact"><type>VkPointClippingBehavior</type>     <name>pointClippingBehavior</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePointClippingPropertiesKHR"              alias="VkPhysicalDevicePointClippingProperties"/>
+        <type category="struct" name="VkMemoryDedicatedRequirements" returnedonly="true" structextends="VkMemoryRequirements2">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>prefersDedicatedAllocation</name></member>
+            <member><type>VkBool32</type>                         <name>requiresDedicatedAllocation</name></member>
+        </type>
+        <type category="struct" name="VkMemoryDedicatedRequirementsKHR"                        alias="VkMemoryDedicatedRequirements"/>
+        <type category="struct" name="VkMemoryDedicatedAllocateInfo" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>VkImage</type>          <name>image</name><comment>Image that this allocation will be bound to</comment></member>
+            <member optional="true"><type>VkBuffer</type>         <name>buffer</name><comment>Buffer that this allocation will be bound to</comment></member>
+        </type>
+        <type category="struct" name="VkMemoryDedicatedAllocateInfoKHR"                        alias="VkMemoryDedicatedAllocateInfo"/>
+        <type category="struct" name="VkImageViewUsageCreateInfo" structextends="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkImageUsageFlags</type> <name>usage</name></member>
+        </type>
+        <type category="struct" name="VkImageViewSlicedCreateInfoEXT" structextends="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type> <name>sliceOffset</name></member>
+            <member><type>uint32_t</type> <name>sliceCount</name></member>
+        </type>
+        <type category="struct" name="VkImageViewUsageCreateInfoKHR"                           alias="VkImageViewUsageCreateInfo"/>
+        <type category="struct" name="VkPipelineTessellationDomainOriginStateCreateInfo" structextends="VkPipelineTessellationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkTessellationDomainOrigin</type>    <name>domainOrigin</name></member>
+        </type>
+        <type category="struct" name="VkPipelineTessellationDomainOriginStateCreateInfoKHR"    alias="VkPipelineTessellationDomainOriginStateCreateInfo"/>
+        <type category="struct" name="VkSamplerYcbcrConversionInfo" structextends="VkSamplerCreateInfo,VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkSamplerYcbcrConversion</type>      <name>conversion</name></member>
+        </type>
+        <type category="struct" name="VkSamplerYcbcrConversionInfoKHR"                         alias="VkSamplerYcbcrConversionInfo"/>
+        <type category="struct" name="VkSamplerYcbcrConversionCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkFormat</type>                         <name>format</name></member>
+            <member><type>VkSamplerYcbcrModelConversion</type> <name>ycbcrModel</name></member>
+            <member><type>VkSamplerYcbcrRange</type>           <name>ycbcrRange</name></member>
+            <member><type>VkComponentMapping</type>               <name>components</name></member>
+            <member><type>VkChromaLocation</type>              <name>xChromaOffset</name></member>
+            <member><type>VkChromaLocation</type>              <name>yChromaOffset</name></member>
+            <member><type>VkFilter</type>                         <name>chromaFilter</name></member>
+            <member><type>VkBool32</type>                         <name>forceExplicitReconstruction</name></member>
+        </type>
+        <type category="struct" name="VkSamplerYcbcrConversionCreateInfoKHR"                   alias="VkSamplerYcbcrConversionCreateInfo"/>
+        <type category="struct" name="VkBindImagePlaneMemoryInfo" structextends="VkBindImageMemoryInfo">
+            <member values="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkImageAspectFlagBits</type>            <name>planeAspect</name></member>
+        </type>
+        <type category="struct" name="VkBindImagePlaneMemoryInfoKHR"                           alias="VkBindImagePlaneMemoryInfo"/>
+        <type category="struct" name="VkImagePlaneMemoryRequirementsInfo" structextends="VkImageMemoryRequirementsInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkImageAspectFlagBits</type>            <name>planeAspect</name></member>
+        </type>
+        <type category="struct" name="VkImagePlaneMemoryRequirementsInfoKHR"                   alias="VkImagePlaneMemoryRequirementsInfo"/>
+        <type category="struct" name="VkPhysicalDeviceSamplerYcbcrConversionFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>samplerYcbcrConversion</name><comment>Sampler color conversion supported</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"       alias="VkPhysicalDeviceSamplerYcbcrConversionFeatures"/>
+        <type category="struct" name="VkSamplerYcbcrConversionImageFormatProperties" returnedonly="true" structextends="VkImageFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>combinedImageSamplerDescriptorCount</name></member>
+        </type>
+        <type category="struct" name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"        alias="VkSamplerYcbcrConversionImageFormatProperties"/>
+        <type category="struct" name="VkTextureLODGatherFormatPropertiesAMD" returnedonly="true" structextends="VkImageFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>supportsTextureGatherLODBiasAMD</name></member>
+        </type>
+        <type category="struct" name="VkConditionalRenderingBeginInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBuffer</type>                         <name>buffer</name></member>
+            <member><type>VkDeviceSize</type>                     <name>offset</name></member>
+            <member optional="true"><type>VkConditionalRenderingFlagsEXT</type>    <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkProtectedSubmitInfo" structextends="VkSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                        <name>protectedSubmit</name><comment>Submit protected command buffers</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProtectedMemoryFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>protectedMemory</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProtectedMemoryProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="exact"><type>VkBool32</type>                            <name>protectedNoFault</name></member>
+        </type>
+        <type category="struct" name="VkDeviceQueueInfo2">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member optional="true"><type>VkDeviceQueueCreateFlags</type>            <name>flags</name></member>
+            <member><type>uint32_t</type>                            <name>queueFamilyIndex</name></member>
+            <member><type>uint32_t</type>                            <name>queueIndex</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCoverageToColorStateCreateInfoNV" structextends="VkPipelineMultisampleStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                      <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCoverageToColorStateCreateFlagsNV</type>                    <name>flags</name></member>
+            <member><type>VkBool32</type>                         <name>coverageToColorEnable</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>coverageToColorLocation</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSamplerFilterMinmaxProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>filterMinmaxSingleComponentFormats</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>filterMinmaxImageComponentMapping</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" alias="VkPhysicalDeviceSamplerFilterMinmaxProperties"/>
+        <type category="struct" name="VkSampleLocationEXT">
+            <member><type>float</type>                            <name>x</name></member>
+            <member><type>float</type>                            <name>y</name></member>
+        </type>
+        <type category="struct" name="VkSampleLocationsInfoEXT" structextends="VkImageMemoryBarrier,VkImageMemoryBarrier2">
+            <member values="VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkSampleCountFlagBits</type>  <name>sampleLocationsPerPixel</name></member>
+            <member><type>VkExtent2D</type>                             <name>sampleLocationGridSize</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>sampleLocationsCount</name></member>
+            <member len="sampleLocationsCount">const <type>VkSampleLocationEXT</type>* <name>pSampleLocations</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentSampleLocationsEXT">
+            <member><type>uint32_t</type>                         <name>attachmentIndex</name></member>
+            <member><type>VkSampleLocationsInfoEXT</type>         <name>sampleLocationsInfo</name></member>
+        </type>
+        <type category="struct" name="VkSubpassSampleLocationsEXT">
+            <member><type>uint32_t</type>                         <name>subpassIndex</name></member>
+            <member><type>VkSampleLocationsInfoEXT</type>         <name>sampleLocationsInfo</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassSampleLocationsBeginInfoEXT" structextends="VkRenderPassBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>attachmentInitialSampleLocationsCount</name></member>
+            <member len="attachmentInitialSampleLocationsCount">const <type>VkAttachmentSampleLocationsEXT</type>* <name>pAttachmentInitialSampleLocations</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>postSubpassSampleLocationsCount</name></member>
+            <member len="postSubpassSampleLocationsCount">const <type>VkSubpassSampleLocationsEXT</type>* <name>pPostSubpassSampleLocations</name></member>
+        </type>
+        <type category="struct" name="VkPipelineSampleLocationsStateCreateInfoEXT" structextends="VkPipelineMultisampleStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>sampleLocationsEnable</name></member>
+            <member><type>VkSampleLocationsInfoEXT</type>         <name>sampleLocationsInfo</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSampleLocationsPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkSampleCountFlags</type>               <name>sampleLocationSampleCounts</name></member>
+            <member limittype="max"><type>VkExtent2D</type>                       <name>maxSampleLocationGridSize</name></member>
+            <member limittype="range"><type>float</type>                            <name>sampleLocationCoordinateRange</name>[2]</member>
+            <member limittype="bits"><type>uint32_t</type>                         <name>sampleLocationSubPixelBits</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>variableSampleLocations</name></member>
+        </type>
+        <type category="struct" name="VkMultisamplePropertiesEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkExtent2D</type>                       <name>maxSampleLocationGridSize</name></member>
+        </type>
+        <type category="struct" name="VkSamplerReductionModeCreateInfo" structextends="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkSamplerReductionMode</type>           <name>reductionMode</name></member>
+        </type>
+        <type category="struct" name="VkSamplerReductionModeCreateInfoEXT" alias="VkSamplerReductionModeCreateInfo"/>
+        <type category="struct" name="VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>advancedBlendCoherentOperations</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiDrawFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>multiDraw</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>advancedBlendMaxColorAttachments</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>advancedBlendIndependentBlend</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>advancedBlendNonPremultipliedSrcColor</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>advancedBlendNonPremultipliedDstColor</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>advancedBlendCorrelatedOverlap</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>advancedBlendAllOperations</name></member>
+        </type>
+        <type category="struct" name="VkPipelineColorBlendAdvancedStateCreateInfoEXT" structextends="VkPipelineColorBlendStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>srcPremultiplied</name></member>
+            <member><type>VkBool32</type>               <name>dstPremultiplied</name></member>
+            <member><type>VkBlendOverlapEXT</type>      <name>blendOverlap</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceInlineUniformBlockFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>inlineUniformBlock</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingInlineUniformBlockUpdateAfterBind</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceInlineUniformBlockFeaturesEXT" alias="VkPhysicalDeviceInlineUniformBlockFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceInlineUniformBlockProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxInlineUniformBlockSize</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindInlineUniformBlocks</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceInlineUniformBlockPropertiesEXT" alias="VkPhysicalDeviceInlineUniformBlockProperties"/>
+        <type category="struct" name="VkWriteDescriptorSetInlineUniformBlock" structextends="VkWriteDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type>                    <name>dataSize</name></member>
+            <member len="dataSize">const <type>void</type>*  <name>pData</name></member>
+        </type>
+        <type category="struct" name="VkWriteDescriptorSetInlineUniformBlockEXT" alias="VkWriteDescriptorSetInlineUniformBlock"/>
+        <type category="struct" name="VkDescriptorPoolInlineUniformBlockCreateInfo" structextends="VkDescriptorPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type>                    <name>maxInlineUniformBlockBindings</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorPoolInlineUniformBlockCreateInfoEXT" alias="VkDescriptorPoolInlineUniformBlockCreateInfo"/>
+        <type category="struct" name="VkPipelineCoverageModulationStateCreateInfoNV" structextends="VkPipelineMultisampleStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                      <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCoverageModulationStateCreateFlagsNV</type>                   <name>flags</name></member>
+            <member><type>VkCoverageModulationModeNV</type>                                                       <name>coverageModulationMode</name></member>
+            <member><type>VkBool32</type>                                                                         <name>coverageModulationTableEnable</name></member>
+            <member optional="true"><type>uint32_t</type>                                                         <name>coverageModulationTableCount</name></member>
+            <member noautovalidity="true" optional="true" len="coverageModulationTableCount">const <type>float</type>* <name>pCoverageModulationTable</name></member>
+        </type>
+        <type category="struct" name="VkImageFormatListCreateInfo" structextends="VkImageCreateInfo,VkSwapchainCreateInfoKHR,VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>viewFormatCount</name></member>
+            <member len="viewFormatCount">const <type>VkFormat</type>*  <name>pViewFormats</name></member>
+        </type>
+        <type category="struct" name="VkImageFormatListCreateInfoKHR"                          alias="VkImageFormatListCreateInfo"/>
+        <type category="struct" name="VkValidationCacheCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkValidationCacheCreateFlagsEXT</type>    <name>flags</name></member>
+            <member optional="true"><type>size_t</type>                 <name>initialDataSize</name></member>
+            <member len="initialDataSize">const <type>void</type>*            <name>pInitialData</name></member>
+        </type>
+        <type category="struct" name="VkShaderModuleValidationCacheCreateInfoEXT" structextends="VkShaderModuleCreateInfo,VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkValidationCacheEXT</type>    <name>validationCache</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMaintenance3Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerSetDescriptors</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                     <name>maxMemoryAllocationSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMaintenance3PropertiesKHR"               alias="VkPhysicalDeviceMaintenance3Properties"/>
+        <type category="struct" name="VkPhysicalDeviceMaintenance4Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                                         <name>maintenance4</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMaintenance4FeaturesKHR" alias="VkPhysicalDeviceMaintenance4Features"/>
+        <type category="struct" name="VkPhysicalDeviceMaintenance4Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                     <name>maxBufferSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMaintenance4PropertiesKHR" alias="VkPhysicalDeviceMaintenance4Properties"/>
+        <type category="struct" name="VkPhysicalDeviceMaintenance5FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                                         <name>maintenance5</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMaintenance5PropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>earlyFragmentMultisampleCoverageAfterSampleCounting</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>earlyFragmentSampleMaskTestBeforeSampleCounting</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>depthStencilSwizzleOneSupport</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>polygonModePointSize</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>nonStrictSinglePixelWideLinesUseParallelogram</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>nonStrictWideLinesUseParallelogram</name></member>
+        </type>
+        <type category="struct" name="VkRenderingAreaInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                                   <name>viewMask</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>colorAttachmentCount</name></member>
+            <member noautovalidity="true" len="colorAttachmentCount">const <type>VkFormat</type>*           <name>pColorAttachmentFormats</name></member>
+            <member noautovalidity="true"><type>VkFormat</type>                                             <name>depthAttachmentFormat</name></member>
+            <member noautovalidity="true"><type>VkFormat</type>                                             <name>stencilAttachmentFormat</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutSupport" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>         <name>supported</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutSupportKHR"                         alias="VkDescriptorSetLayoutSupport"/>
+        <type category="struct" name="VkPhysicalDeviceShaderDrawParametersFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>shaderDrawParameters</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderDrawParameterFeatures"             alias="VkPhysicalDeviceShaderDrawParametersFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceShaderFloat16Int8Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>shaderFloat16</name><comment>16-bit floats (halfs) in shaders</comment></member>
+            <member><type>VkBool32</type>                         <name>shaderInt8</name><comment>8-bit integers in shaders</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderFloat16Int8FeaturesKHR"            alias="VkPhysicalDeviceShaderFloat16Int8Features"/>
+        <type category="struct" name="VkPhysicalDeviceFloat16Int8FeaturesKHR"                  alias="VkPhysicalDeviceShaderFloat16Int8Features"/>
+        <type category="struct" name="VkPhysicalDeviceFloatControlsProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>denormBehaviorIndependence</name></member>
+            <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>roundingModeIndependence</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat16</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat32</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat64</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat16</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat32</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat64</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat16</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat32</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat64</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat16</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat32</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat64</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat16</name><comment>An implementation can support RTZ</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat32</name><comment>An implementation can support RTZ</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat64</name><comment>An implementation can support RTZ</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFloatControlsPropertiesKHR"              alias="VkPhysicalDeviceFloatControlsProperties"/>
+        <type category="struct" name="VkPhysicalDeviceHostQueryResetFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>hostQueryReset</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceHostQueryResetFeaturesEXT"               alias="VkPhysicalDeviceHostQueryResetFeatures"/>
+        <type category="struct" name="VkNativeBufferUsage2ANDROID">
+            <member><type>uint64_t</type> <name>consumer</name></member>
+            <member><type>uint64_t</type> <name>producer</name></member>
+        </type>
+        <type category="struct" name="VkNativeBufferANDROID">
+            <member values="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member>const <type>void</type>* <name>handle</name></member>
+            <member><type>int</type> <name>stride</name></member>
+            <member><type>int</type> <name>format</name></member>
+            <member><type>int</type> <name>usage</name></member>
+            <member><type>VkNativeBufferUsage2ANDROID</type> <name>usage2</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainImageCreateInfoANDROID">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkSwapchainImageUsageFlagsANDROID</type> <name>usage</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePresentationPropertiesANDROID">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type> <name>sharedImage</name></member>
+        </type>
+        <type category="struct" name="VkShaderResourceUsageAMD" returnedonly="true">
+            <member><type>uint32_t</type> <name>numUsedVgprs</name></member>
+            <member><type>uint32_t</type> <name>numUsedSgprs</name></member>
+            <member><type>uint32_t</type> <name>ldsSizePerLocalWorkGroup</name></member>
+            <member><type>size_t</type> <name>ldsUsageSizeInBytes</name></member>
+            <member><type>size_t</type> <name>scratchMemUsageInBytes</name></member>
+        </type>
+        <type category="struct" name="VkShaderStatisticsInfoAMD" returnedonly="true">
+            <member><type>VkShaderStageFlags</type> <name>shaderStageMask</name></member>
+            <member><type>VkShaderResourceUsageAMD</type> <name>resourceUsage</name></member>
+            <member><type>uint32_t</type> <name>numPhysicalVgprs</name></member>
+            <member><type>uint32_t</type> <name>numPhysicalSgprs</name></member>
+            <member><type>uint32_t</type> <name>numAvailableVgprs</name></member>
+            <member><type>uint32_t</type> <name>numAvailableSgprs</name></member>
+            <member><type>uint32_t</type> <name>computeWorkGroupSize</name>[3]</member>
+        </type>
+        <type category="struct" name="VkDeviceQueueGlobalPriorityCreateInfoKHR" structextends="VkDeviceQueueCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>VkQueueGlobalPriorityKHR</type>       <name>globalPriority</name></member>
+        </type>
+        <type category="struct" name="VkDeviceQueueGlobalPriorityCreateInfoEXT" alias="VkDeviceQueueGlobalPriorityCreateInfoKHR"/>
+        <type category="struct" name="VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                    <name>globalPriorityQuery</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT" alias="VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR"/>
+        <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesKHR" structextends="VkQueueFamilyProperties2">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                     <name>priorityCount</name></member>
+            <member limittype="bitmask"><type>VkQueueGlobalPriorityKHR</type> <name>priorities</name>[<enum>VK_MAX_GLOBAL_PRIORITY_SIZE_KHR</enum>]</member>
+        </type>
+        <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesEXT" alias="VkQueueFamilyGlobalPriorityPropertiesKHR"/>
+        <type category="struct" name="VkDebugUtilsObjectNameInfoEXT" structextends="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkObjectType</type>                                           <name>objectType</name></member>
+            <member objecttype="objectType"><type>uint64_t</type>                                               <name>objectHandle</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*      <name>pObjectName</name></member>
+        </type>
+        <type category="struct" name="VkDebugUtilsObjectTagInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkObjectType</type>                           <name>objectType</name></member>
+            <member objecttype="objectType"><type>uint64_t</type>                               <name>objectHandle</name></member>
+            <member><type>uint64_t</type>                               <name>tagName</name></member>
+            <member><type>size_t</type>                                 <name>tagSize</name></member>
+            <member len="tagSize">const <type>void</type>*              <name>pTag</name></member>
+        </type>
+        <type category="struct" name="VkDebugUtilsLabelEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member len="null-terminated">const <type>char</type>*      <name>pLabelName</name></member>
+            <member><type>float</type>                  <name>color</name>[4]</member>
+        </type>
+        <type category="struct" name="VkDebugUtilsMessengerCreateInfoEXT" allowduplicate="true" structextends="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                          <name>pNext</name></member>
+            <member optional="true"><type>VkDebugUtilsMessengerCreateFlagsEXT</type>  <name>flags</name></member>
+            <member><type>VkDebugUtilsMessageSeverityFlagsEXT</type>                  <name>messageSeverity</name></member>
+            <member><type>VkDebugUtilsMessageTypeFlagsEXT</type>                      <name>messageType</name></member>
+            <member><type>PFN_vkDebugUtilsMessengerCallbackEXT</type>                 <name>pfnUserCallback</name></member>
+            <member optional="true"><type>void</type>*                                <name>pUserData</name></member>
+        </type>
+        <type category="struct" name="VkDebugUtilsMessengerCallbackDataEXT">
+            <member values="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                        <name>pNext</name></member>
+            <member optional="true"><type>VkDebugUtilsMessengerCallbackDataFlagsEXT</type>                          <name>flags</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*                                  <name>pMessageIdName</name></member>
+            <member><type>int32_t</type>                                                            <name>messageIdNumber</name></member>
+            <member len="null-terminated">const <type>char</type>*                                                  <name>pMessage</name></member>
+            <member optional="true"><type>uint32_t</type>                                                           <name>queueLabelCount</name></member>
+            <member len="queueLabelCount">const <type>VkDebugUtilsLabelEXT</type>*                  <name>pQueueLabels</name></member>
+            <member optional="true"><type>uint32_t</type>                                                           <name>cmdBufLabelCount</name></member>
+            <member len="cmdBufLabelCount">const <type>VkDebugUtilsLabelEXT</type>*                 <name>pCmdBufLabels</name></member>
+            <member optional="true"><type>uint32_t</type>                                                           <name>objectCount</name></member>
+            <member len="objectCount">const <type>VkDebugUtilsObjectNameInfoEXT</type>*             <name>pObjects</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDeviceMemoryReportFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                    <name>deviceMemoryReport</name></member>
+        </type>
+        <type category="struct" name="VkDeviceDeviceMemoryReportCreateInfoEXT" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>VkDeviceMemoryReportFlagsEXT</type>        <name>flags</name></member>
+            <member><type>PFN_vkDeviceMemoryReportCallbackEXT</type> <name>pfnUserCallback</name></member>
+            <member><type>void</type>*                               <name>pUserData</name></member>
+        </type>
+        <type category="struct" name="VkDeviceMemoryReportCallbackDataEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDeviceMemoryReportFlagsEXT</type>     <name>flags</name></member>
+            <member><type>VkDeviceMemoryReportEventTypeEXT</type> <name>type</name></member>
+            <member><type>uint64_t</type>                         <name>memoryObjectId</name></member>
+            <member><type>VkDeviceSize</type>                     <name>size</name></member>
+            <member><type>VkObjectType</type>                     <name>objectType</name></member>
+            <member objecttype="objectType"><type>uint64_t</type> <name>objectHandle</name></member>
+            <member><type>uint32_t</type>                         <name>heapIndex</name></member>
+        </type>
+        <type category="struct" name="VkImportMemoryHostPointerInfoEXT" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+            <member><type>void</type>* <name>pHostPointer</name></member>
+        </type>
+        <type category="struct" name="VkMemoryHostPointerPropertiesEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type> <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type> <name>minImportedHostPointerAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceConservativeRasterizationPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="exact"><type>float</type>                 <name>primitiveOverestimationSize</name><comment>The size in pixels the primitive is enlarged at each edge during conservative rasterization</comment></member>
+            <member limittype="max"><type>float</type>                      <name>maxExtraPrimitiveOverestimationSize</name><comment>The maximum additional overestimation the client can specify in the pipeline state</comment></member>
+            <member limittype="min,mul"><type>float</type>                   <name>extraPrimitiveOverestimationSizeGranularity</name><comment>The granularity of extra overestimation sizes the implementations supports between 0 and maxExtraOverestimationSize</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>primitiveUnderestimation</name><comment>true if the implementation supports conservative rasterization underestimation mode</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>conservativePointAndLineRasterization</name><comment>true if conservative rasterization also applies to points and lines</comment></member>
+            <member limittype="exact"><type>VkBool32</type>              <name>degenerateTrianglesRasterized</name><comment>true if degenerate triangles (those with zero area after snap) are rasterized</comment></member>
+            <member limittype="exact"><type>VkBool32</type>              <name>degenerateLinesRasterized</name><comment>true if degenerate lines (those with zero length after snap) are rasterized</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fullyCoveredFragmentShaderInputVariable</name><comment>true if the implementation supports the FullyCoveredEXT SPIR-V builtin fragment shader input variable</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>conservativeRasterizationPostDepthCoverage</name><comment>true if the implementation supports both conservative rasterization and post depth coverage sample coverage mask</comment></member>
+        </type>
+        <type category="struct" name="VkCalibratedTimestampInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkTimeDomainEXT</type>        <name>timeDomain</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderCorePropertiesAMD" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="exact"><type>uint32_t</type> <name>shaderEngineCount</name><comment>number of shader engines</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>shaderArraysPerEngineCount</name><comment>number of shader arrays</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>computeUnitsPerShaderArray</name><comment>number of physical CUs per shader array</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>simdPerComputeUnit</name><comment>number of SIMDs per compute unit</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>wavefrontsPerSimd</name><comment>number of wavefront slots in each SIMD</comment></member>
+            <member limittype="max"><type>uint32_t</type>      <name>wavefrontSize</name><comment>maximum number of threads per wavefront</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>sgprsPerSimd</name><comment>number of physical SGPRs per SIMD</comment></member>
+            <member limittype="min"><type>uint32_t</type>      <name>minSgprAllocation</name><comment>minimum number of SGPRs that can be allocated by a wave</comment></member>
+            <member limittype="max"><type>uint32_t</type>      <name>maxSgprAllocation</name><comment>number of available SGPRs</comment></member>
+            <member limittype="min,mul"><type>uint32_t</type>   <name>sgprAllocationGranularity</name><comment>SGPRs are allocated in groups of this size</comment></member>
+            <member limittype="exact"><type>uint32_t</type> <name>vgprsPerSimd</name><comment>number of physical VGPRs per SIMD</comment></member>
+            <member limittype="min"><type>uint32_t</type>      <name>minVgprAllocation</name><comment>minimum number of VGPRs that can be allocated by a wave</comment></member>
+            <member limittype="max"><type>uint32_t</type>      <name>maxVgprAllocation</name><comment>number of available VGPRs</comment></member>
+            <member limittype="min,mul"><type>uint32_t</type>   <name>vgprAllocationGranularity</name><comment>VGPRs are allocated in groups of this size</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderCoreProperties2AMD" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name><comment>Pointer to next structure</comment></member>
+            <member limittype="bitmask"><type>VkShaderCorePropertiesFlagsAMD</type> <name>shaderCoreFeatures</name><comment>features supported by the shader core</comment></member>
+            <member limittype="max"><type>uint32_t</type> <name>activeComputeUnitCount</name><comment>number of active compute units across all shader engines/arrays</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationConservativeStateCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                      <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineRasterizationConservativeStateCreateFlagsEXT</type>           <name>flags</name><comment>Reserved</comment></member>
+            <member><type>VkConservativeRasterizationModeEXT</type>                                               <name>conservativeRasterizationMode</name><comment>Conservative rasterization mode</comment></member>
+            <member><type>float</type>                                                                            <name>extraPrimitiveOverestimationSize</name><comment>Extra overestimation to add to the primitive</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorIndexingFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>shaderInputAttachmentArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderUniformTexelBufferArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderStorageTexelBufferArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderUniformBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderSampledImageArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderStorageBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderStorageImageArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderInputAttachmentArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderUniformTexelBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>shaderStorageTexelBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingUniformBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingSampledImageUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingStorageImageUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingStorageBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingUniformTexelBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingStorageTexelBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingUpdateUnusedWhilePending</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingPartiallyBound</name></member>
+            <member><type>VkBool32</type>               <name>descriptorBindingVariableDescriptorCount</name></member>
+            <member><type>VkBool32</type>               <name>runtimeDescriptorArray</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorIndexingFeaturesEXT"           alias="VkPhysicalDeviceDescriptorIndexingFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceDescriptorIndexingProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxUpdateAfterBindDescriptorsInAllPools</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>shaderUniformBufferArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>shaderSampledImageArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>shaderStorageBufferArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>shaderStorageImageArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>shaderInputAttachmentArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>robustBufferAccessUpdateAfterBind</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>quadDivergentImplicitLod</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindSamplers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindUniformBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindStorageBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindSampledImages</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindStorageImages</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageDescriptorUpdateAfterBindInputAttachments</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxPerStageUpdateAfterBindResources</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindSamplers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindUniformBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindStorageBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindSampledImages</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindStorageImages</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxDescriptorSetUpdateAfterBindInputAttachments</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorIndexingPropertiesEXT"         alias="VkPhysicalDeviceDescriptorIndexingProperties"/>
+        <type category="struct" name="VkDescriptorSetLayoutBindingFlagsCreateInfo" structextends="VkDescriptorSetLayoutCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                        <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                           <name>bindingCount</name></member>
+            <member len="bindingCount" optional="false,true">const <type>VkDescriptorBindingFlags</type>* <name>pBindingFlags</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutBindingFlagsCreateInfoEXT"          alias="VkDescriptorSetLayoutBindingFlagsCreateInfo"/>
+        <type category="struct" name="VkDescriptorSetVariableDescriptorCountAllocateInfo" structextends="VkDescriptorSetAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>descriptorSetCount</name></member>
+            <member len="descriptorSetCount">const <type>uint32_t</type>* <name>pDescriptorCounts</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetVariableDescriptorCountAllocateInfoEXT"   alias="VkDescriptorSetVariableDescriptorCountAllocateInfo"/>
+        <type category="struct" name="VkDescriptorSetVariableDescriptorCountLayoutSupport" structextends="VkDescriptorSetLayoutSupport" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>         <name>maxVariableDescriptorCount</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetVariableDescriptorCountLayoutSupportEXT"  alias="VkDescriptorSetVariableDescriptorCountLayoutSupport"/>
+        <type category="struct" name="VkAttachmentDescription2">
+            <member values="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkAttachmentDescriptionFlags</type> <name>flags</name></member>
+            <member><type>VkFormat</type>                                     <name>format</name></member>
+            <member><type>VkSampleCountFlagBits</type>                        <name>samples</name></member>
+            <member><type>VkAttachmentLoadOp</type>                           <name>loadOp</name><comment>Load operation for color or depth data</comment></member>
+            <member><type>VkAttachmentStoreOp</type>                          <name>storeOp</name><comment>Store operation for color or depth data</comment></member>
+            <member><type>VkAttachmentLoadOp</type>                           <name>stencilLoadOp</name><comment>Load operation for stencil data</comment></member>
+            <member><type>VkAttachmentStoreOp</type>                          <name>stencilStoreOp</name><comment>Store operation for stencil data</comment></member>
+            <member><type>VkImageLayout</type>                                <name>initialLayout</name></member>
+            <member><type>VkImageLayout</type>                                <name>finalLayout</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentDescription2KHR"                             alias="VkAttachmentDescription2"/>
+        <type category="struct" name="VkAttachmentReference2">
+            <member values="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type>                          <name>attachment</name></member>
+            <member><type>VkImageLayout</type>                     <name>layout</name></member>
+            <member noautovalidity="true"><type>VkImageAspectFlags</type> <name>aspectMask</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentReference2KHR"                               alias="VkAttachmentReference2"/>
+        <type category="struct" name="VkSubpassDescription2">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                           <name>pNext</name></member>
+            <member optional="true"><type>VkSubpassDescriptionFlags</type>                   <name>flags</name></member>
+            <member><type>VkPipelineBindPoint</type>                                         <name>pipelineBindPoint</name></member>
+            <member><type>uint32_t</type>                                                    <name>viewMask</name></member>
+            <member optional="true"><type>uint32_t</type>                                    <name>inputAttachmentCount</name></member>
+            <member len="inputAttachmentCount">const <type>VkAttachmentReference2</type>*    <name>pInputAttachments</name></member>
+            <member optional="true"><type>uint32_t</type>                                    <name>colorAttachmentCount</name></member>
+            <member len="colorAttachmentCount">const <type>VkAttachmentReference2</type>*    <name>pColorAttachments</name></member>
+            <member optional="true" len="colorAttachmentCount">const <type>VkAttachmentReference2</type>* <name>pResolveAttachments</name></member>
+            <member optional="true">const <type>VkAttachmentReference2</type>*               <name>pDepthStencilAttachment</name></member>
+            <member optional="true"><type>uint32_t</type>                                    <name>preserveAttachmentCount</name></member>
+            <member len="preserveAttachmentCount">const <type>uint32_t</type>*               <name>pPreserveAttachments</name></member>
+        </type>
+        <type category="struct" name="VkSubpassDescription2KHR"                                alias="VkSubpassDescription2"/>
+        <type category="struct" name="VkSubpassDependency2">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type>                          <name>srcSubpass</name></member>
+            <member><type>uint32_t</type>                          <name>dstSubpass</name></member>
+            <member optional="true"><type>VkPipelineStageFlags</type> <name>srcStageMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags</type> <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags</type>     <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkAccessFlags</type>     <name>dstAccessMask</name></member>
+            <member optional="true"><type>VkDependencyFlags</type> <name>dependencyFlags</name></member>
+            <member><type>int32_t</type>                           <name>viewOffset</name></member>
+        </type>
+        <type category="struct" name="VkSubpassDependency2KHR"                                 alias="VkSubpassDependency2"/>
+        <type category="struct" name="VkRenderPassCreateInfo2">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                              <name>pNext</name></member>
+            <member optional="true"><type>VkRenderPassCreateFlags</type>                  <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>                                 <name>attachmentCount</name></member>
+            <member len="attachmentCount">const <type>VkAttachmentDescription2</type>*    <name>pAttachments</name></member>
+            <member><type>uint32_t</type>                                                 <name>subpassCount</name></member>
+            <member len="subpassCount">const <type>VkSubpassDescription2</type>*          <name>pSubpasses</name></member>
+            <member optional="true"><type>uint32_t</type>                                 <name>dependencyCount</name></member>
+            <member len="dependencyCount">const <type>VkSubpassDependency2</type>*        <name>pDependencies</name></member>
+            <member optional="true"><type>uint32_t</type>                                 <name>correlatedViewMaskCount</name></member>
+            <member len="correlatedViewMaskCount">const <type>uint32_t</type>*            <name>pCorrelatedViewMasks</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassCreateInfo2KHR"                              alias="VkRenderPassCreateInfo2"/>
+        <type category="struct" name="VkSubpassBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSubpassContents</type>      <name>contents</name></member>
+        </type>
+        <type category="struct" name="VkSubpassBeginInfoKHR"                                   alias="VkSubpassBeginInfo"/>
+        <type category="struct" name="VkSubpassEndInfo">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_END_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+        </type>
+        <type category="struct" name="VkSubpassEndInfoKHR"                                     alias="VkSubpassEndInfo"/>
+        <type category="struct" name="VkPhysicalDeviceTimelineSemaphoreFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>timelineSemaphore</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTimelineSemaphoreFeaturesKHR"            alias="VkPhysicalDeviceTimelineSemaphoreFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceTimelineSemaphoreProperties" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max"><type>uint64_t</type>               <name>maxTimelineSemaphoreValueDifference</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTimelineSemaphorePropertiesKHR"          alias="VkPhysicalDeviceTimelineSemaphoreProperties"/>
+        <type category="struct" name="VkSemaphoreTypeCreateInfo" structextends="VkSemaphoreCreateInfo,VkPhysicalDeviceExternalSemaphoreInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSemaphoreType</type>        <name>semaphoreType</name></member>
+            <member><type>uint64_t</type>               <name>initialValue</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreTypeCreateInfoKHR"                            alias="VkSemaphoreTypeCreateInfo"/>
+        <type category="struct" name="VkTimelineSemaphoreSubmitInfo" structextends="VkSubmitInfo,VkBindSparseInfo">
+            <member values="VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>waitSemaphoreValueCount</name></member>
+            <member optional="true" len="waitSemaphoreValueCount">const <type>uint64_t</type>* <name>pWaitSemaphoreValues</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>signalSemaphoreValueCount</name></member>
+            <member optional="true" len="signalSemaphoreValueCount">const <type>uint64_t</type>* <name>pSignalSemaphoreValues</name></member>
+        </type>
+        <type category="struct" name="VkTimelineSemaphoreSubmitInfoKHR"                        alias="VkTimelineSemaphoreSubmitInfo"/>
+        <type category="struct" name="VkSemaphoreWaitInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkSemaphoreWaitFlags</type> <name>flags</name></member>
+            <member><type>uint32_t</type>               <name>semaphoreCount</name></member>
+            <member len="semaphoreCount">const <type>VkSemaphore</type>* <name>pSemaphores</name></member>
+            <member len="semaphoreCount">const <type>uint64_t</type>*    <name>pValues</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreWaitInfoKHR"                                  alias="VkSemaphoreWaitInfo"/>
+        <type category="struct" name="VkSemaphoreSignalInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSemaphore</type>            <name>semaphore</name></member>
+            <member><type>uint64_t</type>               <name>value</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreSignalInfoKHR"                                alias="VkSemaphoreSignalInfo"/>
+        <type category="struct" name="VkVertexInputBindingDivisorDescriptionEXT">
+            <member><type>uint32_t</type>          <name>binding</name></member>
+            <member><type>uint32_t</type>          <name>divisor</name></member>
+        </type>
+        <type category="struct" name="VkPipelineVertexInputDivisorStateCreateInfoEXT" structextends="VkPipelineVertexInputStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>vertexBindingDivisorCount</name></member>
+            <member len="vertexBindingDivisorCount">const <type>VkVertexInputBindingDivisorDescriptionEXT</type>*      <name>pVertexBindingDivisors</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxVertexAttribDivisor</name><comment>max value of vertex attribute divisor</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePCIBusInfoPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="noauto"><type>uint32_t</type>               <name>pciDomain</name></member>
+            <member limittype="noauto"><type>uint32_t</type>               <name>pciBus</name></member>
+            <member limittype="noauto"><type>uint32_t</type>               <name>pciDevice</name></member>
+            <member limittype="noauto"><type>uint32_t</type>               <name>pciFunction</name></member>
+        </type>
+        <type category="struct" name="VkImportAndroidHardwareBufferInfoANDROID" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member>struct <type>AHardwareBuffer</type>*            <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkAndroidHardwareBufferUsageANDROID" structextends="VkImageFormatProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>uint64_t</type>                           <name>androidHardwareBufferUsage</name></member>
+        </type>
+        <type category="struct" name="VkAndroidHardwareBufferPropertiesANDROID" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>allocationSize</name></member>
+            <member><type>uint32_t</type>                           <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkMemoryGetAndroidHardwareBufferInfoANDROID">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                     <name>memory</name></member>
+        </type>
+        <type category="struct" name="VkAndroidHardwareBufferFormatPropertiesANDROID" structextends="VkAndroidHardwareBufferPropertiesANDROID" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkFormat</type>                           <name>format</name></member>
+            <member><type>uint64_t</type>                           <name>externalFormat</name></member>
+            <member><type>VkFormatFeatureFlags</type>               <name>formatFeatures</name></member>
+            <member><type>VkComponentMapping</type>                 <name>samplerYcbcrConversionComponents</name></member>
+            <member><type>VkSamplerYcbcrModelConversion</type>      <name>suggestedYcbcrModel</name></member>
+            <member><type>VkSamplerYcbcrRange</type>                <name>suggestedYcbcrRange</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedXChromaOffset</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedYChromaOffset</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceConditionalRenderingInfoEXT" structextends="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>conditionalRenderingEnable</name><comment>Whether this secondary command buffer may be executed during an active conditional rendering</comment></member>
+        </type>
+        <type category="struct" name="VkExternalFormatANDROID" structextends="VkImageCreateInfo,VkSamplerYcbcrConversionCreateInfo,VkAttachmentDescription2,VkGraphicsPipelineCreateInfo,VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>uint64_t</type>                           <name>externalFormat</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevice8BitStorageFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>storageBuffer8BitAccess</name><comment>8-bit integer variables supported in StorageBuffer</comment></member>
+            <member><type>VkBool32</type>                         <name>uniformAndStorageBuffer8BitAccess</name><comment>8-bit integer variables supported in StorageBuffer and Uniform</comment></member>
+            <member><type>VkBool32</type>                         <name>storagePushConstant8</name><comment>8-bit integer variables supported in PushConstant</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevice8BitStorageFeaturesKHR"                  alias="VkPhysicalDevice8BitStorageFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceConditionalRenderingFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>conditionalRendering</name></member>
+            <member><type>VkBool32</type>                           <name>inheritedConditionalRendering</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkanMemoryModelFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModel</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModelDeviceScope</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModelAvailabilityVisibilityChains</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkanMemoryModelFeaturesKHR"            alias="VkPhysicalDeviceVulkanMemoryModelFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceShaderAtomicInt64Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferInt64Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedInt64Atomics</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderAtomicInt64FeaturesKHR"            alias="VkPhysicalDeviceShaderAtomicInt64Features"/>
+        <type category="struct" name="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat32Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat32AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat64Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat64AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat32Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat32AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat64Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat64AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderImageFloat32Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderImageFloat32AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>sparseImageFloat32Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>sparseImageFloat32AtomicAdd</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat16Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat16AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat16AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat32AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderBufferFloat64AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat16Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat16AtomicAdd</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat16AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat32AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSharedFloat64AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>shaderImageFloat32AtomicMinMax</name></member>
+            <member><type>VkBool32</type>                            <name>sparseImageFloat32AtomicMinMax</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>vertexAttributeInstanceRateDivisor</name></member>
+            <member><type>VkBool32</type>                           <name>vertexAttributeInstanceRateZeroDivisor</name></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyCheckpointPropertiesNV" structextends="VkQueueFamilyProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*           <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkPipelineStageFlags</type> <name>checkpointExecutionStageMask</name></member>
+        </type>
+        <type category="struct" name="VkCheckpointDataNV" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkPipelineStageFlagBits</type>   <name>stage</name></member>
+            <member noautovalidity="true"><type>void</type>* <name>pCheckpointMarker</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDepthStencilResolveProperties" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkResolveModeFlags</type>                   <name>supportedDepthResolveModes</name><comment>supported depth resolve modes</comment></member>
+            <member limittype="bitmask"><type>VkResolveModeFlags</type>                   <name>supportedStencilResolveModes</name><comment>supported stencil resolve modes</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                             <name>independentResolveNone</name><comment>depth and stencil resolve modes can be set independently if one of them is none</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                             <name>independentResolve</name><comment>depth and stencil resolve modes can be set independently</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDepthStencilResolvePropertiesKHR"        alias="VkPhysicalDeviceDepthStencilResolveProperties"/>
+        <type category="struct" name="VkSubpassDescriptionDepthStencilResolve" structextends="VkSubpassDescription2">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkResolveModeFlagBits</type>              <name>depthResolveMode</name><comment>depth resolve mode</comment></member>
+            <member noautovalidity="true"><type>VkResolveModeFlagBits</type>              <name>stencilResolveMode</name><comment>stencil resolve mode</comment></member>
+            <member optional="true">const <type>VkAttachmentReference2</type>*            <name>pDepthStencilResolveAttachment</name><comment>depth/stencil resolve attachment</comment></member>
+        </type>
+        <type category="struct" name="VkSubpassDescriptionDepthStencilResolveKHR"              alias="VkSubpassDescriptionDepthStencilResolve"/>
+        <type category="struct" name="VkImageViewASTCDecodeModeEXT" structextends="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkFormat</type>                         <name>decodeMode</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceASTCDecodeFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>decodeModeSharedExponent</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTransformFeedbackFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>transformFeedback</name></member>
+            <member><type>VkBool32</type>               <name>geometryStreams</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTransformFeedbackPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTransformFeedbackStreams</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTransformFeedbackBuffers</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>           <name>maxTransformFeedbackBufferSize</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTransformFeedbackStreamDataSize</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTransformFeedbackBufferDataSize</name></member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxTransformFeedbackBufferDataStride</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>transformFeedbackQueries</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>transformFeedbackStreamsLinesTriangles</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>transformFeedbackRasterizationStreamSelect</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>transformFeedbackDraw</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationStateStreamCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                      <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineRasterizationStateStreamCreateFlagsEXT</type>                 <name>flags</name></member>
+            <member><type>uint32_t</type>                                                                         <name>rasterizationStream</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>representativeFragmentTest</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRepresentativeFragmentTestStateCreateInfoNV" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>       <name>representativeFragmentTestEnable</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExclusiveScissorFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>exclusiveScissor</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportExclusiveScissorStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                       <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                          <name>exclusiveScissorCount</name></member>
+            <member noautovalidity="true" len="exclusiveScissorCount">const <type>VkRect2D</type>* <name>pExclusiveScissors</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCornerSampledImageFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>cornerSampledImage</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceComputeShaderDerivativesFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>computeDerivativeGroupQuads</name></member>
+            <member><type>VkBool32</type>                         <name>computeDerivativeGroupLinear</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV"   alias="VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR"/>
+        <type category="struct" name="VkPhysicalDeviceShaderImageFootprintFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>imageFootprint</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>dedicatedAllocationImageAliasing</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCopyMemoryIndirectFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>indirectCopy</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCopyMemoryIndirectPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*     <name>pNext</name></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkQueueFlags</type>        <name>supportedQueues</name><comment>Bitfield of which queues are supported for indirect copy</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryDecompressionFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*       <name>pNext</name></member>
+            <member><type>VkBool32</type>                    <name>memoryDecompression</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryDecompressionPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*     <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkMemoryDecompressionMethodFlagsNV</type>    <name>decompressionMethods</name></member>
+            <member limittype="max"><type>uint64_t</type>             <name>maxDecompressionIndirectCount</name></member>
+        </type>
+        <type category="struct" name="VkShadingRatePaletteNV">
+            <member><type>uint32_t</type>                                                               <name>shadingRatePaletteEntryCount</name></member>
+            <member len="shadingRatePaletteEntryCount">const <type>VkShadingRatePaletteEntryNV</type>*  <name>pShadingRatePaletteEntries</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportShadingRateImageStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                             <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                <name>shadingRateImageEnable</name></member>
+            <member optional="true"><type>uint32_t</type>                                                <name>viewportCount</name></member>
+            <member noautovalidity="true" len="viewportCount">const <type>VkShadingRatePaletteNV</type>* <name>pShadingRatePalettes</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShadingRateImageFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shadingRateImage</name></member>
+            <member><type>VkBool32</type>                            <name>shadingRateCoarseSampleOrder</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShadingRateImagePropertiesNV" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="exact"><type>VkExtent2D</type>                     <name>shadingRateTexelSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>shadingRatePaletteSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>shadingRateMaxCoarseSamples</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceInvocationMaskFeaturesHUAWEI" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>invocationMask</name></member>
+        </type>
+        <type category="struct" name="VkCoarseSampleLocationNV">
+            <member><type>uint32_t</type>                            <name>pixelX</name></member>
+            <member><type>uint32_t</type>                            <name>pixelY</name></member>
+            <member><type>uint32_t</type>                            <name>sample</name></member>
+        </type>
+        <type category="struct" name="VkCoarseSampleOrderCustomNV">
+            <member><type>VkShadingRatePaletteEntryNV</type>         <name>shadingRate</name></member>
+            <member><type>uint32_t</type>                            <name>sampleCount</name></member>
+            <member><type>uint32_t</type>                            <name>sampleLocationCount</name></member>
+            <member len="sampleLocationCount">const <type>VkCoarseSampleLocationNV</type>* <name>pSampleLocations</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportCoarseSampleOrderStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                            <name>pNext</name></member>
+            <member><type>VkCoarseSampleOrderTypeNV</type>                                              <name>sampleOrderType</name></member>
+            <member optional="true"><type>uint32_t</type>                                               <name>customSampleOrderCount</name></member>
+            <member len="customSampleOrderCount">const <type>VkCoarseSampleOrderCustomNV</type>*        <name>pCustomSampleOrders</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMeshShaderFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>taskShader</name></member>
+            <member><type>VkBool32</type>                            <name>meshShader</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMeshShaderPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxDrawMeshTasksCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupInvocations</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupSize</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskTotalMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskOutputCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupInvocations</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupSize</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshTotalMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputVertices</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputPrimitives</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshMultiviewViewCount</name></member>
+            <member limittype="min,mul"><type>uint32_t</type>                         <name>meshOutputPerVertexGranularity</name></member>
+            <member limittype="min,mul"><type>uint32_t</type>                         <name>meshOutputPerPrimitiveGranularity</name></member>
+        </type>
+        <type category="struct" name="VkDrawMeshTasksIndirectCommandNV">
+            <member><type>uint32_t</type>               <name>taskCount</name></member>
+            <member><type>uint32_t</type>               <name>firstTask</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMeshShaderFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>taskShader</name></member>
+            <member><type>VkBool32</type>                            <name>meshShader</name></member>
+            <member><type>VkBool32</type>                            <name>multiviewMeshShader</name></member>
+            <member><type>VkBool32</type>                            <name>primitiveFragmentShadingRateMeshShader</name></member>
+            <member><type>VkBool32</type>                            <name>meshShaderQueries</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMeshShaderPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupTotalCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupCount</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupInvocations</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskWorkGroupSize</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskPayloadSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskSharedMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxTaskPayloadAndSharedMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupTotalCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupCount</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupInvocations</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshWorkGroupSize</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshSharedMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshPayloadAndSharedMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshPayloadAndOutputMemorySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputComponents</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputVertices</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputPrimitives</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshOutputLayers</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxMeshMultiviewViewCount</name></member>
+            <member limittype="noauto"><type>uint32_t</type>                         <name>meshOutputPerVertexGranularity</name></member>
+            <member limittype="noauto"><type>uint32_t</type>                         <name>meshOutputPerPrimitiveGranularity</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxPreferredTaskWorkGroupInvocations</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxPreferredMeshWorkGroupInvocations</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>prefersLocalInvocationVertexOutput</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>prefersLocalInvocationPrimitiveOutput</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>prefersCompactVertexOutput</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>prefersCompactPrimitiveOutput</name></member>
+        </type>
+        <type category="struct" name="VkDrawMeshTasksIndirectCommandEXT">
+            <member noautovalidity="true"><type>uint32_t</type> <name>groupCountX</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>groupCountY</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>groupCountZ</name></member>
+        </type>
+        <type category="struct" name="VkRayTracingShaderGroupCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkRayTracingShaderGroupTypeKHR</type> <name>type</name></member>
+            <member><type>uint32_t</type>               <name>generalShader</name></member>
+            <member><type>uint32_t</type>               <name>closestHitShader</name></member>
+            <member><type>uint32_t</type>               <name>anyHitShader</name></member>
+            <member><type>uint32_t</type>               <name>intersectionShader</name></member>
+        </type>
+        <type category="struct" name="VkRayTracingShaderGroupCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkRayTracingShaderGroupTypeKHR</type> <name>type</name></member>
+            <member><type>uint32_t</type>               <name>generalShader</name></member>
+            <member><type>uint32_t</type>               <name>closestHitShader</name></member>
+            <member><type>uint32_t</type>               <name>anyHitShader</name></member>
+            <member><type>uint32_t</type>               <name>intersectionShader</name></member>
+            <member optional="true">const <type>void</type>* <name>pShaderGroupCaptureReplayHandle</name></member>
+        </type>
+        <type category="struct" name="VkRayTracingPipelineCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCreateFlags</type>  <name>flags</name><comment>Pipeline creation flags</comment></member>
+            <member><type>uint32_t</type>               <name>stageCount</name></member>
+            <member len="stageCount">const <type>VkPipelineShaderStageCreateInfo</type>* <name>pStages</name><comment>One entry for each active shader stage</comment></member>
+            <member><type>uint32_t</type>               <name>groupCount</name></member>
+            <member len="groupCount">const <type>VkRayTracingShaderGroupCreateInfoNV</type>* <name>pGroups</name></member>
+            <member><type>uint32_t</type>               <name>maxRecursionDepth</name></member>
+            <member><type>VkPipelineLayout</type>       <name>layout</name><comment>Interface layout of the pipeline</comment></member>
+            <member noautovalidity="true" optional="true"><type>VkPipeline</type>      <name>basePipelineHandle</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of</comment></member>
+            <member><type>int32_t</type>                <name>basePipelineIndex</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of</comment></member>
+        </type>
+        <type category="struct" name="VkRayTracingPipelineCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCreateFlags</type>  <name>flags</name><comment>Pipeline creation flags</comment></member>
+            <member optional="true"><type>uint32_t</type> <name>stageCount</name></member>
+            <member len="stageCount">const <type>VkPipelineShaderStageCreateInfo</type>* <name>pStages</name><comment>One entry for each active shader stage</comment></member>
+            <member optional="true"><type>uint32_t</type> <name>groupCount</name></member>
+            <member len="groupCount">const <type>VkRayTracingShaderGroupCreateInfoKHR</type>* <name>pGroups</name></member>
+            <member><type>uint32_t</type>               <name>maxPipelineRayRecursionDepth</name></member>
+            <member optional="true">const <type>VkPipelineLibraryCreateInfoKHR</type>* <name>pLibraryInfo</name></member>
+            <member optional="true">const <type>VkRayTracingPipelineInterfaceCreateInfoKHR</type>* <name>pLibraryInterface</name></member>
+            <member optional="true">const <type>VkPipelineDynamicStateCreateInfo</type>* <name>pDynamicState</name></member>
+            <member><type>VkPipelineLayout</type>       <name>layout</name><comment>Interface layout of the pipeline</comment></member>
+            <member noautovalidity="true" optional="true"><type>VkPipeline</type>      <name>basePipelineHandle</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of</comment></member>
+            <member><type>int32_t</type>                <name>basePipelineIndex</name><comment>If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of</comment></member>
+        </type>
+        <type category="struct" name="VkGeometryTrianglesNV">
+            <member values="VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkBuffer</type>   <name>vertexData</name></member>
+            <member><type>VkDeviceSize</type>               <name>vertexOffset</name></member>
+            <member><type>uint32_t</type>                   <name>vertexCount</name></member>
+            <member><type>VkDeviceSize</type>               <name>vertexStride</name></member>
+            <member><type>VkFormat</type>                   <name>vertexFormat</name></member>
+            <member optional="true"><type>VkBuffer</type>   <name>indexData</name></member>
+            <member><type>VkDeviceSize</type>               <name>indexOffset</name></member>
+            <member><type>uint32_t</type>                   <name>indexCount</name></member>
+            <member><type>VkIndexType</type>                <name>indexType</name></member>
+            <member optional="true"><type>VkBuffer</type>   <name>transformData</name><comment>Optional reference to array of floats representing a 3x4 row major affine transformation matrix.</comment></member>
+            <member><type>VkDeviceSize</type>               <name>transformOffset</name></member>
+        </type>
+        <type category="struct" name="VkGeometryAABBNV">
+            <member values="VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkBuffer</type>   <name>aabbData</name></member>
+            <member><type>uint32_t</type>                   <name>numAABBs</name></member>
+            <member><type>uint32_t</type>                   <name>stride</name><comment>Stride in bytes between AABBs</comment></member>
+            <member><type>VkDeviceSize</type>               <name>offset</name><comment>Offset in bytes of the first AABB in aabbData</comment></member>
+        </type>
+        <type category="struct" name="VkGeometryDataNV">
+            <member><type>VkGeometryTrianglesNV</type>                  <name>triangles</name></member>
+            <member><type>VkGeometryAABBNV</type>                       <name>aabbs</name></member>
+        </type>
+        <type category="struct" name="VkGeometryNV">
+            <member values="VK_STRUCTURE_TYPE_GEOMETRY_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                   <name>pNext</name></member>
+            <member><type>VkGeometryTypeKHR</type>                  <name>geometryType</name></member>
+            <member><type>VkGeometryDataNV</type>                              <name>geometry</name></member>
+            <member optional="true"><type>VkGeometryFlagsKHR</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureInfoNV">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkAccelerationStructureTypeNV</type>         <name>type</name></member>
+            <member optional="true"><type>VkBuildAccelerationStructureFlagsNV</type> <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>instanceCount</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>geometryCount</name></member>
+            <member len="geometryCount">const <type>VkGeometryNV</type>* <name>pGeometries</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                           <name>compactedSize</name></member>
+            <member><type>VkAccelerationStructureInfoNV</type>          <name>info</name></member>
+        </type>
+        <type category="struct" name="VkBindAccelerationStructureMemoryInfoNV">
+            <member values="VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member><type>VkAccelerationStructureNV</type>       <name>accelerationStructure</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkDeviceSize</type>                     <name>memoryOffset</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>deviceIndexCount</name></member>
+            <member len="deviceIndexCount">const <type>uint32_t</type>*  <name>pDeviceIndices</name></member>
+        </type>
+        <type category="struct" name="VkWriteDescriptorSetAccelerationStructureKHR" structextends="VkWriteDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>accelerationStructureCount</name></member>
+            <member optional="false,true" len="accelerationStructureCount">const <type>VkAccelerationStructureKHR</type>* <name>pAccelerationStructures</name></member>
+        </type>
+        <type category="struct" name="VkWriteDescriptorSetAccelerationStructureNV" structextends="VkWriteDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>accelerationStructureCount</name></member>
+            <member optional="false,true" len="accelerationStructureCount">const <type>VkAccelerationStructureNV</type>* <name>pAccelerationStructures</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureMemoryRequirementsInfoNV">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member><type>VkAccelerationStructureMemoryRequirementsTypeNV</type>                     <name>type</name></member>
+            <member><type>VkAccelerationStructureNV</type>                                           <name>accelerationStructure</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAccelerationStructureFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>accelerationStructure</name></member>
+            <member><type>VkBool32</type>                         <name>accelerationStructureCaptureReplay</name></member>
+            <member><type>VkBool32</type>                         <name>accelerationStructureIndirectBuild</name></member>
+            <member><type>VkBool32</type>                         <name>accelerationStructureHostCommands</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingAccelerationStructureUpdateAfterBind</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingPipelineFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingPipeline</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingPipelineShaderGroupHandleCaptureReplay</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingPipelineShaderGroupHandleCaptureReplayMixed</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingPipelineTraceRaysIndirect</name></member>
+            <member><type>VkBool32</type>                         <name>rayTraversalPrimitiveCulling</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayQueryFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>rayQuery</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAccelerationStructurePropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxGeometryCount</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxInstanceCount</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxPrimitiveCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorAccelerationStructures</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindAccelerationStructures</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetAccelerationStructures</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindAccelerationStructures</name></member>
+            <member limittype="min"><type>uint32_t</type>                         <name>minAccelerationStructureScratchOffsetAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingPipelinePropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member limittype="exact"><type>uint32_t</type>                    <name>shaderGroupHandleSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxRayRecursionDepth</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxShaderGroupStride</name></member>
+            <member limittype="exact"><type>uint32_t</type>                    <name>shaderGroupBaseAlignment</name></member>
+            <member limittype="exact"><type>uint32_t</type>                    <name>shaderGroupHandleCaptureReplaySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxRayDispatchInvocationCount</name></member>
+            <member limittype="min,pot"><type>uint32_t</type>                      <name>shaderGroupHandleAlignment</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxRayHitAttributeSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="exact"><type>uint32_t</type>                    <name>shaderGroupHandleSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxRecursionDepth</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxShaderGroupStride</name></member>
+            <member limittype="exact"><type>uint32_t</type>                    <name>shaderGroupBaseAlignment</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxGeometryCount</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxInstanceCount</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxTriangleCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetAccelerationStructures</name></member>
+        </type>
+        <type category="struct" name="VkStridedDeviceAddressRegionKHR">
+            <member optional="true"><type>VkDeviceAddress</type>  <name>deviceAddress</name></member>
+            <member><type>VkDeviceSize</type>                     <name>stride</name></member>
+            <member><type>VkDeviceSize</type>                     <name>size</name></member>
+        </type>
+        <type category="struct" name="VkTraceRaysIndirectCommandKHR">
+            <member><type>uint32_t</type>               <name>width</name></member>
+            <member><type>uint32_t</type>               <name>height</name></member>
+            <member><type>uint32_t</type>               <name>depth</name></member>
+        </type>
+        <type category="struct" name="VkTraceRaysIndirectCommand2KHR">
+            <member><type>VkDeviceAddress</type>        <name>raygenShaderRecordAddress</name></member>
+            <member><type>VkDeviceSize</type>           <name>raygenShaderRecordSize</name></member>
+            <member><type>VkDeviceAddress</type>        <name>missShaderBindingTableAddress</name></member>
+            <member><type>VkDeviceSize</type>           <name>missShaderBindingTableSize</name></member>
+            <member><type>VkDeviceSize</type>           <name>missShaderBindingTableStride</name></member>
+            <member><type>VkDeviceAddress</type>        <name>hitShaderBindingTableAddress</name></member>
+            <member><type>VkDeviceSize</type>           <name>hitShaderBindingTableSize</name></member>
+            <member><type>VkDeviceSize</type>           <name>hitShaderBindingTableStride</name></member>
+            <member><type>VkDeviceAddress</type>        <name>callableShaderBindingTableAddress</name></member>
+            <member><type>VkDeviceSize</type>           <name>callableShaderBindingTableSize</name></member>
+            <member><type>VkDeviceSize</type>           <name>callableShaderBindingTableStride</name></member>
+            <member><type>uint32_t</type>               <name>width</name></member>
+            <member><type>uint32_t</type>               <name>height</name></member>
+            <member><type>uint32_t</type>               <name>depth</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingMaintenance1</name></member>
+            <member><type>VkBool32</type>                         <name>rayTracingPipelineTraceRaysIndirect2</name></member>
+        </type>
+        <type category="struct" name="VkDrmFormatModifierPropertiesListEXT" returnedonly="true" structextends="VkFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type> <name>drmFormatModifierCount</name></member>
+            <member optional="true" len="drmFormatModifierCount"><type>VkDrmFormatModifierPropertiesEXT</type>* <name>pDrmFormatModifierProperties</name></member>
+        </type>
+        <type category="struct" name="VkDrmFormatModifierPropertiesEXT" returnedonly="true">
+            <member><type>uint64_t</type> <name>drmFormatModifier</name></member>
+            <member><type>uint32_t</type> <name>drmFormatModifierPlaneCount</name></member>
+            <member><type>VkFormatFeatureFlags</type> <name>drmFormatModifierTilingFeatures</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageDrmFormatModifierInfoEXT" structextends="VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint64_t</type> <name>drmFormatModifier</name></member>
+            <member><type>VkSharingMode</type> <name>sharingMode</name></member>
+            <member optional="true"><type>uint32_t</type> <name>queueFamilyIndexCount</name></member>
+            <member noautovalidity="true" len="queueFamilyIndexCount">const <type>uint32_t</type>* <name>pQueueFamilyIndices</name></member>
+        </type>
+        <type category="struct" name="VkImageDrmFormatModifierListCreateInfoEXT" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint32_t</type> <name>drmFormatModifierCount</name></member>
+            <member len="drmFormatModifierCount">const <type>uint64_t</type>* <name>pDrmFormatModifiers</name></member>
+        </type>
+        <type category="struct" name="VkImageDrmFormatModifierExplicitCreateInfoEXT" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint64_t</type> <name>drmFormatModifier</name></member>
+            <member><type>uint32_t</type> <name>drmFormatModifierPlaneCount</name></member>
+            <member len="drmFormatModifierPlaneCount">const <type>VkSubresourceLayout</type>* <name>pPlaneLayouts</name></member>
+        </type>
+        <type category="struct" name="VkImageDrmFormatModifierPropertiesEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>uint64_t</type> <name>drmFormatModifier</name></member>
+        </type>
+        <type category="struct" name="VkImageStencilUsageCreateInfo" structextends="VkImageCreateInfo,VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkImageUsageFlags</type> <name>stencilUsage</name></member>
+        </type>
+        <type category="struct" name="VkImageStencilUsageCreateInfoEXT"                        alias="VkImageStencilUsageCreateInfo"/>
+        <type category="struct" name="VkDeviceMemoryOverallocationCreateInfoAMD"  structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkMemoryOverallocationBehaviorAMD</type> <name>overallocationBehavior</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMapFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>fragmentDensityMap</name></member>
+            <member><type>VkBool32</type>                         <name>fragmentDensityMapDynamic</name></member>
+            <member><type>VkBool32</type>                         <name>fragmentDensityMapNonSubsampledImages</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMap2FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>fragmentDensityMapDeferred</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>fragmentDensityMapOffset</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMapPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="min"><type>VkExtent2D</type>                       <name>minFragmentDensityTexelSize</name></member>
+            <member limittype="max"><type>VkExtent2D</type>                       <name>maxFragmentDensityTexelSize</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>fragmentDensityInvocations</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMap2PropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="exact"><type>VkBool32</type>                  <name>subsampledLoads</name></member>
+            <member limittype="exact"><type>VkBool32</type>                  <name>subsampledCoarseReconstructionEarlyAccess</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxSubsampledArrayLayers</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxDescriptorSetSubsampledSamplers</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="min,mul"><type>VkExtent2D</type>                       <name>fragmentDensityOffsetGranularity</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassFragmentDensityMapCreateInfoEXT" structextends="VkRenderPassCreateInfo,VkRenderPassCreateInfo2">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkAttachmentReference</type>            <name>fragmentDensityMapAttachment</name></member>
+        </type>
+        <type category="struct" name="VkSubpassFragmentDensityMapOffsetEndInfoQCOM" structextends="VkSubpassEndInfo">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                           <name>fragmentDensityOffsetCount</name></member>
+            <member len="fragmentDensityOffsetCount">const <type>VkOffset2D</type>* <name>pFragmentDensityOffsets</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceScalarBlockLayoutFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>scalarBlockLayout</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceScalarBlockLayoutFeaturesEXT"            alias="VkPhysicalDeviceScalarBlockLayoutFeatures"/>
+        <type category="struct" name="VkSurfaceProtectedCapabilitiesKHR" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type> <name>supportsProtected</name><comment>Represents if surface can be protected</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceUniformBufferStandardLayoutFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>uniformBufferStandardLayout</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR"  alias="VkPhysicalDeviceUniformBufferStandardLayoutFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceDepthClipEnableFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>depthClipEnable</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationDepthClipStateCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                 <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineRasterizationDepthClipStateCreateFlagsEXT</type>         <name>flags</name><comment>Reserved</comment></member>
+            <member><type>VkBool32</type>                                                                    <name>depthClipEnable</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryBudgetPropertiesEXT" structextends="VkPhysicalDeviceMemoryProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>heapBudget</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member>
+            <member><type>VkDeviceSize</type>                       <name>heapUsage</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMemoryPriorityFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>memoryPriority</name></member>
+        </type>
+        <type category="struct" name="VkMemoryPriorityAllocateInfoEXT" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>float</type>                              <name>priority</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>pageableDeviceLocalMemory</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceBufferDeviceAddressFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddress</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddressCaptureReplay</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddressMultiDevice</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceBufferDeviceAddressFeaturesKHR"          alias="VkPhysicalDeviceBufferDeviceAddressFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddress</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddressCaptureReplay</name></member>
+            <member><type>VkBool32</type>                           <name>bufferDeviceAddressMultiDevice</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceBufferAddressFeaturesEXT"                alias="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT"/>
+        <type category="struct" name="VkBufferDeviceAddressInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkBuffer</type>                                               <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkBufferDeviceAddressInfoKHR"                            alias="VkBufferDeviceAddressInfo"/>
+        <type category="struct" name="VkBufferDeviceAddressInfoEXT"                            alias="VkBufferDeviceAddressInfo"/>
+        <type category="struct" name="VkBufferOpaqueCaptureAddressCreateInfo" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint64_t</type>                         <name>opaqueCaptureAddress</name></member>
+        </type>
+        <type category="struct" name="VkBufferOpaqueCaptureAddressCreateInfoKHR"               alias="VkBufferOpaqueCaptureAddressCreateInfo"/>
+        <type category="struct" name="VkBufferDeviceAddressCreateInfoEXT" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceAddress</type>                  <name>deviceAddress</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageViewImageFormatInfoEXT" structextends="VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkImageViewType</type>                  <name>imageViewType</name></member>
+        </type>
+        <type category="struct" name="VkFilterCubicImageViewImageFormatPropertiesEXT" returnedonly="true" structextends="VkImageFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>filterCubic</name><comment>The combinations of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT</comment></member>
+            <member><type>VkBool32</type>                         <name>filterCubicMinmax</name><comment>The combination of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT and ReductionMode of Min or Max</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImagelessFramebufferFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                    <name>pNext</name></member>
+            <member><type>VkBool32</type>                                 <name>imagelessFramebuffer</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImagelessFramebufferFeaturesKHR"         alias="VkPhysicalDeviceImagelessFramebufferFeatures"/>
+        <type category="struct" name="VkFramebufferAttachmentsCreateInfo" structextends="VkFramebufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                 <name>attachmentImageInfoCount</name></member>
+            <member len="attachmentImageInfoCount">const <type>VkFramebufferAttachmentImageInfo</type>* <name>pAttachmentImageInfos</name></member>
+        </type>
+        <type category="struct" name="VkFramebufferAttachmentsCreateInfoKHR"                   alias="VkFramebufferAttachmentsCreateInfo"/>
+        <type category="struct" name="VkFramebufferAttachmentImageInfo">
+            <member values="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member optional="true"><type>VkImageCreateFlags</type>       <name>flags</name><comment>Image creation flags</comment></member>
+            <member><type>VkImageUsageFlags</type>                        <name>usage</name><comment>Image usage flags</comment></member>
+            <member><type>uint32_t</type>                                 <name>width</name></member>
+            <member><type>uint32_t</type>                                 <name>height</name></member>
+            <member><type>uint32_t</type>                                 <name>layerCount</name></member>
+            <member optional="true"><type>uint32_t</type>                 <name>viewFormatCount</name></member>
+            <member len="viewFormatCount">const <type>VkFormat</type>*    <name>pViewFormats</name></member>
+        </type>
+        <type category="struct" name="VkFramebufferAttachmentImageInfoKHR"                     alias="VkFramebufferAttachmentImageInfo"/>
+        <type category="struct" name="VkRenderPassAttachmentBeginInfo" structextends="VkRenderPassBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                 <name>attachmentCount</name></member>
+            <member len="attachmentCount">const <type>VkImageView</type>* <name>pAttachments</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassAttachmentBeginInfoKHR"                      alias="VkRenderPassAttachmentBeginInfo"/>
+        <type category="struct" name="VkPhysicalDeviceTextureCompressionASTCHDRFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>textureCompressionASTC_HDR</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT" alias="VkPhysicalDeviceTextureCompressionASTCHDRFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceCooperativeMatrixFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>cooperativeMatrix</name></member>
+            <member><type>VkBool32</type>                            <name>cooperativeMatrixRobustBufferAccess</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCooperativeMatrixPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkShaderStageFlags</type>                  <name>cooperativeMatrixSupportedStages</name></member>
+        </type>
+        <type category="struct" name="VkCooperativeMatrixPropertiesNV">
+            <member values="VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>MSize</name></member>
+            <member><type>uint32_t</type>                            <name>NSize</name></member>
+            <member><type>uint32_t</type>                            <name>KSize</name></member>
+            <member><type>VkComponentTypeNV</type>                   <name>AType</name></member>
+            <member><type>VkComponentTypeNV</type>                   <name>BType</name></member>
+            <member><type>VkComponentTypeNV</type>                   <name>CType</name></member>
+            <member><type>VkComponentTypeNV</type>                   <name>DType</name></member>
+            <member><type>VkScopeNV</type>                           <name>scope</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceYcbcrImageArraysFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>ycbcrImageArrays</name></member>
+        </type>
+        <type category="struct" name="VkImageViewHandleInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkImageView</type>                         <name>imageView</name></member>
+            <member><type>VkDescriptorType</type>                    <name>descriptorType</name></member>
+            <member optional="true"><type>VkSampler</type>           <name>sampler</name></member>
+        </type>
+        <type category="struct" name="VkImageViewAddressPropertiesNVX" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkDeviceAddress</type>    <name>deviceAddress</name></member>
+            <member><type>VkDeviceSize</type>       <name>size</name></member>
+        </type>
+        <type category="struct" name="VkPresentFrameTokenGGP" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>GgpFrameToken</type>                    <name>frameToken</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCreationFeedback" returnedonly="true">
+            <member><type>VkPipelineCreationFeedbackFlags</type>     <name>flags</name></member>
+            <member><type>uint64_t</type>                            <name>duration</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCreationFeedbackEXT" alias="VkPipelineCreationFeedback"/>
+        <type category="struct" name="VkPipelineCreationFeedbackCreateInfo" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo,VkRayTracingPipelineCreateInfoNV,VkRayTracingPipelineCreateInfoKHR,VkExecutionGraphPipelineCreateInfoAMDX">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>VkPipelineCreationFeedback</type>*         <name>pPipelineCreationFeedback</name><comment>Output pipeline creation feedback.</comment></member>
+            <member optional="true"><type>uint32_t</type>            <name>pipelineStageCreationFeedbackCount</name></member>
+            <member len="pipelineStageCreationFeedbackCount"><type>VkPipelineCreationFeedback</type>* <name>pPipelineStageCreationFeedbacks</name><comment>One entry for each shader stage specified in the parent Vk*PipelineCreateInfo struct</comment></member>
+        </type>
+        <type category="struct" name="VkPipelineCreationFeedbackCreateInfoEXT" alias="VkPipelineCreationFeedbackCreateInfo"/>
+        <type category="struct" name="VkSurfaceFullScreenExclusiveInfoEXT" structextends="VkPhysicalDeviceSurfaceInfo2KHR,VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkFullScreenExclusiveEXT</type>         <name>fullScreenExclusive</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceFullScreenExclusiveWin32InfoEXT" structextends="VkPhysicalDeviceSurfaceInfo2KHR,VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>HMONITOR</type>         <name>hmonitor</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceCapabilitiesFullScreenExclusiveEXT" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>         <name>fullScreenExclusiveSupported</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePresentBarrierFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>presentBarrier</name></member>
+        </type>
+        <type category="struct" name="VkSurfaceCapabilitiesPresentBarrierNV" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>       <name>presentBarrierSupported</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainPresentBarrierCreateInfoNV" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>    <name>presentBarrierEnable</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePerformanceQueryFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>performanceCounterQueryPools</name><comment>performance counters supported in query pools</comment></member>
+            <member><type>VkBool32</type>                         <name>performanceCounterMultipleQueryPools</name><comment>performance counters from multiple query pools can be accessed in the same primary command buffer</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePerformanceQueryPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkBool32</type> <name>allowCommandBufferQueryCopies</name><comment>Flag to specify whether performance queries are allowed to be used in vkCmdCopyQueryPoolResults</comment></member>
+        </type>
+        <type category="struct" name="VkPerformanceCounterKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkPerformanceCounterUnitKHR</type>        <name>unit</name></member>
+            <member><type>VkPerformanceCounterScopeKHR</type>       <name>scope</name></member>
+            <member><type>VkPerformanceCounterStorageKHR</type>     <name>storage</name></member>
+            <member><type>uint8_t</type> <name>uuid</name>[<enum>VK_UUID_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkPerformanceCounterDescriptionKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                   <name>pNext</name></member>
+            <member optional="true"><type>VkPerformanceCounterDescriptionFlagsKHR</type> <name>flags</name></member>
+            <member><type>char</type>                                    <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>                                    <name>category</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>                                    <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkQueryPoolPerformanceCreateInfoKHR" structextends="VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                             <name>pNext</name></member>
+            <member><type>uint32_t</type>                                <name>queueFamilyIndex</name></member>
+            <member><type>uint32_t</type>                                <name>counterIndexCount</name></member>
+            <member len="counterIndexCount">const <type>uint32_t</type>* <name>pCounterIndices</name></member>
+        </type>
+        <type category="union" name="VkPerformanceCounterResultKHR" comment="// Union of all the possible return types a counter result could return">
+            <member><type>int32_t</type>  <name>int32</name></member>
+            <member><type>int64_t</type>  <name>int64</name></member>
+            <member><type>uint32_t</type> <name>uint32</name></member>
+            <member><type>uint64_t</type> <name>uint64</name></member>
+            <member><type>float</type>    <name>float32</name></member>
+            <member><type>double</type>   <name>float64</name></member>
+        </type>
+        <type category="struct" name="VkAcquireProfilingLockInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkAcquireProfilingLockFlagsKHR</type> <name>flags</name><comment>Acquire profiling lock flags</comment></member>
+            <member><type>uint64_t</type> <name>timeout</name></member>
+        </type>
+        <type category="struct" name="VkPerformanceQuerySubmitInfoKHR" structextends="VkSubmitInfo,VkSubmitInfo2">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>uint32_t</type>            <name>counterPassIndex</name><comment>Index for which counter pass to submit</comment></member>
+        </type>
+        <type category="struct" name="VkPerformanceQueryReservationInfoKHR" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_RESERVATION_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>uint32_t</type>            <name>maxPerformanceQueriesPerPool</name><comment>Maximum number of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR queries in a query pool</comment></member>
+        </type>
+        <type category="struct" name="VkHeadlessSurfaceCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkHeadlessSurfaceCreateFlagsEXT</type>   <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCoverageReductionModeFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>coverageReductionMode</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCoverageReductionStateCreateInfoNV" structextends="VkPipelineMultisampleStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                        <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCoverageReductionStateCreateFlagsNV</type>      <name>flags</name></member>
+            <member><type>VkCoverageReductionModeNV</type>                                          <name>coverageReductionMode</name></member>
+        </type>
+        <type category="struct" name="VkFramebufferMixedSamplesCombinationNV" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkCoverageReductionModeNV</type>  <name>coverageReductionMode</name></member>
+            <member><type>VkSampleCountFlagBits</type>      <name>rasterizationSamples</name></member>
+            <member><type>VkSampleCountFlags</type>         <name>depthStencilSamples</name></member>
+            <member><type>VkSampleCountFlags</type>         <name>colorSamples</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>shaderIntegerFunctions2</name></member>
+        </type>
+        <type category="union" name="VkPerformanceValueDataINTEL">
+            <member selection="VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL"><type>uint32_t</type>                           <name>value32</name></member>
+            <member selection="VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL"><type>uint64_t</type>                           <name>value64</name></member>
+            <member selection="VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"><type>float</type>                               <name>valueFloat</name></member>
+            <member selection="VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"><type>VkBool32</type>                             <name>valueBool</name></member>
+            <member selection="VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL" len="null-terminated">const <type>char</type>*  <name>valueString</name></member>
+        </type>
+        <type category="struct" name="VkPerformanceValueINTEL">
+            <member><type>VkPerformanceValueTypeINTEL</type>        <name>type</name></member>
+            <member selector="type" noautovalidity="true"><type>VkPerformanceValueDataINTEL</type>        <name>data</name></member>
+        </type>
+        <type category="struct" name="VkInitializePerformanceApiInfoINTEL" >
+            <member values="VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member optional="true"><type>void</type>*               <name>pUserData</name></member>
+        </type>
+        <type category="struct" name="VkQueryPoolPerformanceQueryCreateInfoINTEL" structextends="VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>VkQueryPoolSamplingModeINTEL</type>        <name>performanceCountersSampling</name></member>
+        </type>
+        <type category="struct" name="VkQueryPoolCreateInfoINTEL"                              alias="VkQueryPoolPerformanceQueryCreateInfoINTEL"/>
+        <type category="struct" name="VkPerformanceMarkerInfoINTEL">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>uint64_t</type>                            <name>marker</name></member>
+        </type>
+        <type category="struct" name="VkPerformanceStreamMarkerInfoINTEL">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>marker</name></member>
+        </type>
+        <type category="struct" name="VkPerformanceOverrideInfoINTEL">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>VkPerformanceOverrideTypeINTEL</type>      <name>type</name></member>
+            <member><type>VkBool32</type>                            <name>enable</name></member>
+            <member><type>uint64_t</type>                            <name>parameter</name></member>
+        </type>
+        <type category="struct" name="VkPerformanceConfigurationAcquireInfoINTEL">
+            <member values="VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                         <name>pNext</name></member>
+            <member><type>VkPerformanceConfigurationTypeINTEL</type> <name>type</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderClockFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderSubgroupClock</name></member>
+            <member><type>VkBool32</type>                            <name>shaderDeviceClock</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceIndexTypeUint8FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>indexTypeUint8</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderSMBuiltinsPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>shaderSMCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>shaderWarpsPerSM</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderSMBuiltinsFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>shaderSMBuiltins</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name><comment>Pointer to next structure</comment></member>
+            <member><type>VkBool32</type>               <name>fragmentShaderSampleInterlock</name></member>
+            <member><type>VkBool32</type>               <name>fragmentShaderPixelInterlock</name></member>
+            <member><type>VkBool32</type>               <name>fragmentShaderShadingRateInterlock</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>separateDepthStencilLayouts</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR"  alias="VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures"/>
+        <type category="struct" name="VkAttachmentReferenceStencilLayout" structextends="VkAttachmentReference2">
+            <member values="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkImageLayout</type>                  <name>stencilLayout</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>primitiveTopologyListRestart</name></member>
+            <member><type>VkBool32</type>                     <name>primitiveTopologyPatchListRestart</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentReferenceStencilLayoutKHR"                   alias="VkAttachmentReferenceStencilLayout"/>
+        <type category="struct" name="VkAttachmentDescriptionStencilLayout" structextends="VkAttachmentDescription2">
+            <member values="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkImageLayout</type>                  <name>stencilInitialLayout</name></member>
+            <member><type>VkImageLayout</type>                  <name>stencilFinalLayout</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentDescriptionStencilLayoutKHR"                 alias="VkAttachmentDescriptionStencilLayout"/>
+        <type category="struct" name="VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>           <name>pipelineExecutableInfo</name></member>
+        </type>
+        <type category="struct" name="VkPipelineInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkPipeline</type>         <name>pipeline</name></member>
+        </type>
+        <type category="struct" name="VkPipelineInfoEXT" alias="VkPipelineInfoKHR"/>
+        <type category="struct" name="VkPipelineExecutablePropertiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkShaderStageFlags</type> <name>stages</name></member>
+            <member><type>char</type>               <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>               <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>uint32_t</type>           <name>subgroupSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelineExecutableInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkPipeline</type>         <name>pipeline</name></member>
+            <member><type>uint32_t</type>           <name>executableIndex</name></member>
+        </type>
+        <type category="union" name="VkPipelineExecutableStatisticValueKHR" returnedonly="true">
+            <member selection="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR"><type>VkBool32</type>           <name>b32</name></member>
+            <member selection="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR"><type>int64_t</type>            <name>i64</name></member>
+            <member selection="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR"><type>uint64_t</type>           <name>u64</name></member>
+            <member selection="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR"><type>double</type>             <name>f64</name></member>
+        </type>
+        <type category="struct" name="VkPipelineExecutableStatisticKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>char</type>               <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>               <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>VkPipelineExecutableStatisticFormatKHR</type> <name>format</name></member>
+            <member selector="format" noautovalidity="true"><type>VkPipelineExecutableStatisticValueKHR</type>  <name>value</name></member>
+        </type>
+        <type category="struct" name="VkPipelineExecutableInternalRepresentationKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>char</type>               <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>               <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>VkBool32</type>           <name>isText</name></member>
+            <member><type>size_t</type>             <name>dataSize</name></member>
+            <member optional="true" len="dataSize"><type>void</type>* <name>pData</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBool32</type>                   <name>shaderDemoteToHelperInvocation</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT" alias="VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>texelBufferAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTexelBufferAlignmentProperties" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>                       <name>storageTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="exact"><type>VkBool32</type>                         <name>storageTexelBufferOffsetSingleTexelAlignment</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>                       <name>uniformTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="exact"><type>VkBool32</type>                         <name>uniformTexelBufferOffsetSingleTexelAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT" alias="VkPhysicalDeviceTexelBufferAlignmentProperties"/>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>subgroupSizeControl</name></member>
+            <member><type>VkBool32</type>               <name>computeFullSubgroups</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlFeaturesEXT" alias="VkPhysicalDeviceSubgroupSizeControlFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="min,pot" noautovalidity="true"><type>uint32_t</type> <name>minSubgroupSize</name><comment>The minimum subgroup size supported by this device</comment></member>
+            <member limittype="max,pot" noautovalidity="true"><type>uint32_t</type> <name>maxSubgroupSize</name><comment>The maximum subgroup size supported by this device</comment></member>
+            <member limittype="max" noautovalidity="true"><type>uint32_t</type> <name>maxComputeWorkgroupSubgroups</name><comment>The maximum number of subgroups supported in a workgroup</comment></member>
+            <member limittype="bitmask"><type>VkShaderStageFlags</type>         <name>requiredSubgroupSizeStages</name><comment>The shader stages that support specifying a subgroup size</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlPropertiesEXT" alias="VkPhysicalDeviceSubgroupSizeControlProperties"/>
+        <type category="struct" name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo" returnedonly="true" structextends="VkPipelineShaderStageCreateInfo,VkShaderCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>uint32_t</type>               <name>requiredSubgroupSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT" alias="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo"/>
+        <type category="struct" name="VkShaderRequiredSubgroupSizeCreateInfoEXT" alias="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo"/>
+        <type category="struct" name="VkSubpassShadingPipelineCreateInfoHUAWEI" returnedonly="true" structextends="VkComputePipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkRenderPass</type>           <name>renderPass</name></member>
+            <member><type>uint32_t</type>               <name>subpass</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubpassShadingPropertiesHUAWEI" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max,pot"><type>uint32_t</type>               <name>maxSubpassShadingWorkgroupSizeAspectRatio</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="max,pot"><type>uint32_t</type>           <name>maxWorkGroupCount</name>[3]</member>
+            <member limittype="max,pot"><type>uint32_t</type>           <name>maxWorkGroupSize</name>[3]</member>
+            <member limittype="max"><type>uint32_t</type>               <name>maxOutputClusterCount</name></member>
+            <member limittype="exact"><type>VkDeviceSize</type>         <name>indirectBufferOffsetAlignment</name></member>
+        </type>
+        <type category="struct" name="VkMemoryOpaqueCaptureAddressAllocateInfo" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                   <name>pNext</name></member>
+            <member><type>uint64_t</type>                      <name>opaqueCaptureAddress</name></member>
+        </type>
+        <type category="struct" name="VkMemoryOpaqueCaptureAddressAllocateInfoKHR"             alias="VkMemoryOpaqueCaptureAddressAllocateInfo"/>
+        <type category="struct" name="VkDeviceMemoryOpaqueCaptureAddressInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                   <name>memory</name></member>
+        </type>
+        <type category="struct" name="VkDeviceMemoryOpaqueCaptureAddressInfoKHR"               alias="VkDeviceMemoryOpaqueCaptureAddressInfo"/>
+        <type category="struct" name="VkPhysicalDeviceLineRasterizationFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>rectangularLines</name></member>
+            <member><type>VkBool32</type>                           <name>bresenhamLines</name></member>
+            <member><type>VkBool32</type>                           <name>smoothLines</name></member>
+            <member><type>VkBool32</type>                           <name>stippledRectangularLines</name></member>
+            <member><type>VkBool32</type>                           <name>stippledBresenhamLines</name></member>
+            <member><type>VkBool32</type>                           <name>stippledSmoothLines</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceLineRasterizationPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="bits"><type>uint32_t</type>                            <name>lineSubPixelPrecisionBits</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationLineStateCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                      <name>pNext</name></member>
+            <member><type>VkLineRasterizationModeEXT</type>                                       <name>lineRasterizationMode</name></member>
+            <member><type>VkBool32</type>                                                         <name>stippledLineEnable</name></member>
+            <member><type>uint32_t</type>                                                         <name>lineStippleFactor</name></member>
+            <member><type>uint16_t</type>                                                         <name>lineStipplePattern</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineCreationCacheControlFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>              <name>pipelineCreationCacheControl</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT" alias="VkPhysicalDevicePipelineCreationCacheControlFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceVulkan11Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>storageBuffer16BitAccess</name><comment>16-bit integer/floating-point variables supported in BufferBlock</comment></member>
+            <member><type>VkBool32</type>                         <name>uniformAndStorageBuffer16BitAccess</name><comment>16-bit integer/floating-point variables supported in BufferBlock and Block</comment></member>
+            <member><type>VkBool32</type>                         <name>storagePushConstant16</name><comment>16-bit integer/floating-point variables supported in PushConstant</comment></member>
+            <member><type>VkBool32</type>                         <name>storageInputOutput16</name><comment>16-bit integer/floating-point variables supported in shader inputs and outputs</comment></member>
+            <member><type>VkBool32</type>                         <name>multiview</name><comment>Multiple views in a renderpass</comment></member>
+            <member><type>VkBool32</type>                         <name>multiviewGeometryShader</name><comment>Multiple views in a renderpass w/ geometry shader</comment></member>
+            <member><type>VkBool32</type>                         <name>multiviewTessellationShader</name><comment>Multiple views in a renderpass w/ tessellation shader</comment></member>
+            <member><type>VkBool32</type>                         <name>variablePointersStorageBuffer</name></member>
+            <member><type>VkBool32</type>                         <name>variablePointers</name></member>
+            <member><type>VkBool32</type>                         <name>protectedMemory</name></member>
+            <member><type>VkBool32</type>                         <name>samplerYcbcrConversion</name><comment>Sampler color conversion supported</comment></member>
+            <member><type>VkBool32</type>                         <name>shaderDrawParameters</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkan11Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*      <name>pNext</name></member>
+            <member limittype="exact"><type>uint8_t</type>                          <name>deviceUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="exact"><type>uint8_t</type>                          <name>driverUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="exact"><type>uint8_t</type>                          <name>deviceLUID</name>[<enum>VK_LUID_SIZE</enum>]</member>
+            <member limittype="exact"><type>uint32_t</type>                         <name>deviceNodeMask</name></member>
+            <member limittype="exact"><type>VkBool32</type>                         <name>deviceLUIDValid</name></member>
+            <member limittype="max,pot" noautovalidity="true"><type>uint32_t</type>                      <name>subgroupSize</name><comment>The size of a subgroup for this queue.</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkShaderStageFlags</type>            <name>subgroupSupportedStages</name><comment>Bitfield of what shader stages support subgroup operations</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkSubgroupFeatureFlags</type>        <name>subgroupSupportedOperations</name><comment>Bitfield of what subgroup operations are supported.</comment></member>
+            <member limittype="bitmask" noautovalidity="true"><type>VkBool32</type>                      <name>subgroupQuadOperationsInAllStages</name><comment>Flag to specify whether quad operations are available in all stages.</comment></member>
+            <member limittype="exact"><type>VkPointClippingBehavior</type>     <name>pointClippingBehavior</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxMultiviewViewCount</name><comment>max number of views in a subpass</comment></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxMultiviewInstanceIndex</name><comment>max instance index for a draw in a multiview subpass</comment></member>
+            <member limittype="exact"><type>VkBool32</type>                    <name>protectedNoFault</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerSetDescriptors</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                     <name>maxMemoryAllocationSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkan12Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>samplerMirrorClampToEdge</name></member>
+            <member><type>VkBool32</type>                         <name>drawIndirectCount</name></member>
+            <member><type>VkBool32</type>                         <name>storageBuffer8BitAccess</name><comment>8-bit integer variables supported in StorageBuffer</comment></member>
+            <member><type>VkBool32</type>                         <name>uniformAndStorageBuffer8BitAccess</name><comment>8-bit integer variables supported in StorageBuffer and Uniform</comment></member>
+            <member><type>VkBool32</type>                         <name>storagePushConstant8</name><comment>8-bit integer variables supported in PushConstant</comment></member>
+            <member><type>VkBool32</type>                         <name>shaderBufferInt64Atomics</name></member>
+            <member><type>VkBool32</type>                         <name>shaderSharedInt64Atomics</name></member>
+            <member><type>VkBool32</type>                         <name>shaderFloat16</name><comment>16-bit floats (halfs) in shaders</comment></member>
+            <member><type>VkBool32</type>                         <name>shaderInt8</name><comment>8-bit integers in shaders</comment></member>
+            <member><type>VkBool32</type>                         <name>descriptorIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderInputAttachmentArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderUniformTexelBufferArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderStorageTexelBufferArrayDynamicIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderUniformBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderSampledImageArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderStorageBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderStorageImageArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderInputAttachmentArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderUniformTexelBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>shaderStorageTexelBufferArrayNonUniformIndexing</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingUniformBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingSampledImageUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingStorageImageUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingStorageBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingUniformTexelBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingStorageTexelBufferUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingUpdateUnusedWhilePending</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingPartiallyBound</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingVariableDescriptorCount</name></member>
+            <member><type>VkBool32</type>                         <name>runtimeDescriptorArray</name></member>
+            <member><type>VkBool32</type>                         <name>samplerFilterMinmax</name></member>
+            <member><type>VkBool32</type>                         <name>scalarBlockLayout</name></member>
+            <member><type>VkBool32</type>                         <name>imagelessFramebuffer</name></member>
+            <member><type>VkBool32</type>                         <name>uniformBufferStandardLayout</name></member>
+            <member><type>VkBool32</type>                         <name>shaderSubgroupExtendedTypes</name></member>
+            <member><type>VkBool32</type>                         <name>separateDepthStencilLayouts</name></member>
+            <member><type>VkBool32</type>                         <name>hostQueryReset</name></member>
+            <member><type>VkBool32</type>                         <name>timelineSemaphore</name></member>
+            <member><type>VkBool32</type>                         <name>bufferDeviceAddress</name></member>
+            <member><type>VkBool32</type>                         <name>bufferDeviceAddressCaptureReplay</name></member>
+            <member><type>VkBool32</type>                         <name>bufferDeviceAddressMultiDevice</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModel</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModelDeviceScope</name></member>
+            <member><type>VkBool32</type>                         <name>vulkanMemoryModelAvailabilityVisibilityChains</name></member>
+            <member><type>VkBool32</type>                         <name>shaderOutputViewportIndex</name></member>
+            <member><type>VkBool32</type>                         <name>shaderOutputLayer</name></member>
+            <member><type>VkBool32</type>                         <name>subgroupBroadcastDynamicId</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkan12Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="noauto"><type>VkDriverId</type>                       <name>driverID</name></member>
+            <member limittype="noauto"><type>char</type>                             <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member>
+            <member limittype="noauto"><type>char</type>                             <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member>
+            <member limittype="noauto"><type>VkConformanceVersion</type>             <name>conformanceVersion</name></member>
+            <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>denormBehaviorIndependence</name></member>
+            <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>roundingModeIndependence</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat16</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat32</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSignedZeroInfNanPreserveFloat64</name><comment>An implementation can preserve signed zero, nan, inf</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat16</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat32</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormPreserveFloat64</name><comment>An implementation can preserve  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat16</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat32</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderDenormFlushToZeroFloat64</name><comment>An implementation can flush to zero  denormals</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat16</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat32</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTEFloat64</name><comment>An implementation can support RTE</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat16</name><comment>An implementation can support RTZ</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat32</name><comment>An implementation can support RTZ</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderRoundingModeRTZFloat64</name><comment>An implementation can support RTZ</comment></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxUpdateAfterBindDescriptorsInAllPools</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderUniformBufferArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderSampledImageArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderStorageBufferArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderStorageImageArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>shaderInputAttachmentArrayNonUniformIndexingNative</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>robustBufferAccessUpdateAfterBind</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>quadDivergentImplicitLod</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindSamplers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindUniformBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindStorageBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindSampledImages</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindStorageImages</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageDescriptorUpdateAfterBindInputAttachments</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxPerStageUpdateAfterBindResources</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindSamplers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindUniformBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindStorageBuffers</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindSampledImages</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindStorageImages</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDescriptorSetUpdateAfterBindInputAttachments</name></member>
+            <member limittype="bitmask"><type>VkResolveModeFlags</type>               <name>supportedDepthResolveModes</name><comment>supported depth resolve modes</comment></member>
+            <member limittype="bitmask"><type>VkResolveModeFlags</type>               <name>supportedStencilResolveModes</name><comment>supported stencil resolve modes</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>independentResolveNone</name><comment>depth and stencil resolve modes can be set independently if one of them is none</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>independentResolve</name><comment>depth and stencil resolve modes can be set independently</comment></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>filterMinmaxSingleComponentFormats</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                         <name>filterMinmaxImageComponentMapping</name></member>
+            <member limittype="max"><type>uint64_t</type>                         <name>maxTimelineSemaphoreValueDifference</name></member>
+            <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type> <name>framebufferIntegerColorSampleCounts</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkan13Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>robustImageAccess</name></member>
+            <member><type>VkBool32</type>                         <name>inlineUniformBlock</name></member>
+            <member><type>VkBool32</type>                         <name>descriptorBindingInlineUniformBlockUpdateAfterBind</name></member>
+            <member><type>VkBool32</type>                         <name>pipelineCreationCacheControl</name></member>
+            <member><type>VkBool32</type>                         <name>privateData</name></member>
+            <member><type>VkBool32</type>                         <name>shaderDemoteToHelperInvocation</name></member>
+            <member><type>VkBool32</type>                         <name>shaderTerminateInvocation</name></member>
+            <member><type>VkBool32</type>                         <name>subgroupSizeControl</name></member>
+            <member><type>VkBool32</type>                         <name>computeFullSubgroups</name></member>
+            <member><type>VkBool32</type>                         <name>synchronization2</name></member>
+            <member><type>VkBool32</type>                         <name>textureCompressionASTC_HDR</name></member>
+            <member><type>VkBool32</type>                         <name>shaderZeroInitializeWorkgroupMemory</name></member>
+            <member><type>VkBool32</type>                         <name>dynamicRendering</name></member>
+            <member><type>VkBool32</type>                         <name>shaderIntegerDotProduct</name></member>
+            <member><type>VkBool32</type>                         <name>maintenance4</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkan13Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="min,pot" noautovalidity="true"><type>uint32_t</type> <name>minSubgroupSize</name><comment>The minimum subgroup size supported by this device</comment></member>
+            <member limittype="max,pot" noautovalidity="true"><type>uint32_t</type> <name>maxSubgroupSize</name><comment>The maximum subgroup size supported by this device</comment></member>
+            <member limittype="max" noautovalidity="true"><type>uint32_t</type> <name>maxComputeWorkgroupSubgroups</name><comment>The maximum number of subgroups supported in a workgroup</comment></member>
+            <member limittype="bitmask"><type>VkShaderStageFlags</type>         <name>requiredSubgroupSizeStages</name><comment>The shader stages that support specifying a subgroup size</comment></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxInlineUniformBlockSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxPerStageDescriptorInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxDescriptorSetInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxDescriptorSetUpdateAfterBindInlineUniformBlocks</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>maxInlineUniformTotalSize</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct8BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct8BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct8BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct4x8BitPackedUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct4x8BitPackedSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct4x8BitPackedMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct16BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct16BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct16BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct32BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct32BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct32BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct64BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct64BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProduct64BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating8BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating8BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating16BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating16BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating32BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating32BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating64BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating64BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                   <name>integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>                <name>storageTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="exact"><type>VkBool32</type>                  <name>storageTexelBufferOffsetSingleTexelAlignment</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>                <name>uniformTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="exact"><type>VkBool32</type>                  <name>uniformTexelBufferOffsetSingleTexelAlignment</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                   <name>maxBufferSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCompilerControlCreateInfoAMD" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo,VkExecutionGraphPipelineCreateInfoAMDX">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"><type>VkStructureType</type>   <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCompilerControlFlagsAMD</type>                                      <name>compilerControlFlags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCoherentMemoryFeaturesAMD" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>deviceCoherentMemory</name></member>
+        </type>
+        <type category="struct" name="VkFaultData" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_FAULT_DATA"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkFaultLevel</type>                    <name>faultLevel</name></member>
+            <member><type>VkFaultType</type>                     <name>faultType</name></member>
+        </type>
+        <type category="struct" name="VkFaultCallbackInfo" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>           <name>faultCount</name></member>
+            <member optional="true" len="faultCount"><type>VkFaultData</type>*<name>pFaults</name></member>
+            <member><type>PFN_vkFaultCallbackFunction</type>        <name>pfnFaultCallback</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceToolProperties" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>char</type>                  <name>name</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member>
+            <member><type>char</type>                  <name>version</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member>
+            <member><type>VkToolPurposeFlags</type>    <name>purposes</name></member>
+            <member><type>char</type>                  <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>char</type>                  <name>layer</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceToolPropertiesEXT" alias="VkPhysicalDeviceToolProperties"/>
+        <type category="struct" name="VkSamplerCustomBorderColorCreateInfoEXT" structextends="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkClearColorValue</type>                                                                      <name>customBorderColor</name></member>
+            <member><type>VkFormat</type>                                                                               <name>format</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCustomBorderColorPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                                                   <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                                                                                      <name>maxCustomBorderColorSamplers</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCustomBorderColorFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>customBorderColors</name></member>
+            <member><type>VkBool32</type>                           <name>customBorderColorWithoutFormat</name></member>
+        </type>
+        <type category="struct" name="VkSamplerBorderColorComponentMappingCreateInfoEXT" structextends="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                       <name>pNext</name></member>
+            <member><type>VkComponentMapping</type>                                                                                <name>components</name></member>
+            <member><type>VkBool32</type>                                                                                          <name>srgb</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceBorderColorSwizzleFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>borderColorSwizzle</name></member>
+            <member><type>VkBool32</type>                     <name>borderColorSwizzleFromImage</name></member>
+        </type>
+        <type category="union" name="VkDeviceOrHostAddressKHR">
+            <member noautovalidity="true"><type>VkDeviceAddress</type>            <name>deviceAddress</name></member>
+            <member noautovalidity="true"><type>void</type>*                      <name>hostAddress</name></member>
+        </type>
+        <type category="union" name="VkDeviceOrHostAddressConstKHR">
+            <member noautovalidity="true"><type>VkDeviceAddress</type>            <name>deviceAddress</name></member>
+            <member noautovalidity="true">const <type>void</type>*                <name>hostAddress</name></member>
+        </type>
+        <type category="union" name="VkDeviceOrHostAddressConstAMDX">
+            <member noautovalidity="true"><type>VkDeviceAddress</type>            <name>deviceAddress</name></member>
+            <member noautovalidity="true">const <type>void</type>*                <name>hostAddress</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureGeometryTrianglesDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                   <name>pNext</name></member>
+            <member><type>VkFormat</type>                                      <name>vertexFormat</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                 <name>vertexData</name></member>
+            <member><type>VkDeviceSize</type>                                  <name>vertexStride</name></member>
+            <member><type>uint32_t</type>                                      <name>maxVertex</name></member>
+            <member><type>VkIndexType</type>                                   <name>indexType</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                 <name>indexData</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                 <name>transformData</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureGeometryAabbsDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                           <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>         <name>data</name></member>
+            <member><type>VkDeviceSize</type>                          <name>stride</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureGeometryInstancesDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                           <name>pNext</name></member>
+            <member><type>VkBool32</type>                              <name>arrayOfPointers</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>         <name>data</name></member>
+        </type>
+        <type category="union" name="VkAccelerationStructureGeometryDataKHR">
+            <member selection="VK_GEOMETRY_TYPE_TRIANGLES_KHR"><type>VkAccelerationStructureGeometryTrianglesDataKHR</type> <name>triangles</name></member>
+            <member selection="VK_GEOMETRY_TYPE_AABBS_KHR"><type>VkAccelerationStructureGeometryAabbsDataKHR</type>         <name>aabbs</name></member>
+            <member selection="VK_GEOMETRY_TYPE_INSTANCES_KHR"><type>VkAccelerationStructureGeometryInstancesDataKHR</type> <name>instances</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureGeometryKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkGeometryTypeKHR</type>                      <name>geometryType</name></member>
+            <member selector="geometryType"><type>VkAccelerationStructureGeometryDataKHR</type> <name>geometry</name></member>
+            <member optional="true"><type>VkGeometryFlagsKHR</type>     <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureBuildGeometryInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                        <name>pNext</name></member>
+            <member><type>VkAccelerationStructureTypeKHR</type>                                     <name>type</name></member>
+            <member optional="true"><type>VkBuildAccelerationStructureFlagsKHR</type>               <name>flags</name></member>
+            <member noautovalidity="true"><type>VkBuildAccelerationStructureModeKHR</type>          <name>mode</name></member>
+            <member optional="true" noautovalidity="true"><type>VkAccelerationStructureKHR</type>                   <name>srcAccelerationStructure</name></member>
+            <member optional="true" noautovalidity="true"><type>VkAccelerationStructureKHR</type>                   <name>dstAccelerationStructure</name></member>
+            <member optional="true"><type>uint32_t</type>                                           <name>geometryCount</name></member>
+            <member len="geometryCount" optional="true">const <type>VkAccelerationStructureGeometryKHR</type>*    <name>pGeometries</name></member>
+            <member len="geometryCount,1" optional="true,false">const <type>VkAccelerationStructureGeometryKHR</type>* const*   <name>ppGeometries</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressKHR</type>                                           <name>scratchData</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureBuildRangeInfoKHR">
+            <member><type>uint32_t</type>                                                <name>primitiveCount</name></member>
+            <member><type>uint32_t</type>                                                <name>primitiveOffset</name></member>
+            <member><type>uint32_t</type>                                                <name>firstVertex</name></member>
+            <member><type>uint32_t</type>                                                <name>transformOffset</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                             <name>pNext</name></member>
+            <member optional="true"><type>VkAccelerationStructureCreateFlagsKHR</type>   <name>createFlags</name></member>
+            <member><type>VkBuffer</type>                                                <name>buffer</name></member>
+            <member><type>VkDeviceSize</type>                                            <name>offset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>                                            <name>size</name></member>
+            <member><type>VkAccelerationStructureTypeKHR</type>                          <name>type</name></member>
+            <member optional="true"><type>VkDeviceAddress</type>                         <name>deviceAddress</name></member>
+        </type>
+        <type category="struct" name="VkAabbPositionsKHR">
+            <member><type>float</type>                                                   <name>minX</name></member>
+            <member><type>float</type>                                                   <name>minY</name></member>
+            <member><type>float</type>                                                   <name>minZ</name></member>
+            <member><type>float</type>                                                   <name>maxX</name></member>
+            <member><type>float</type>                                                   <name>maxY</name></member>
+            <member><type>float</type>                                                   <name>maxZ</name></member>
+        </type>
+        <type category="struct" name="VkAabbPositionsNV"                                       alias="VkAabbPositionsKHR"/>
+        <type category="struct" name="VkTransformMatrixKHR">
+            <member><type>float</type>                                                   <name>matrix</name>[3][4]</member>
+        </type>
+        <type category="struct" name="VkTransformMatrixNV"                                     alias="VkTransformMatrixKHR"/>
+        <type category="struct" name="VkAccelerationStructureInstanceKHR">
+            <comment>The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>VkTransformMatrixKHR</type>                                    <name>transform</name></member>
+            <member><type>uint32_t</type>                                                <name>instanceCustomIndex</name>:24</member>
+            <member><type>uint32_t</type>                                                <name>mask</name>:8</member>
+            <member><type>uint32_t</type>                                                <name>instanceShaderBindingTableRecordOffset</name>:24</member>
+            <member optional="true"><type>VkGeometryInstanceFlagsKHR</type>              <name>flags</name>:8</member>
+            <member><type>uint64_t</type>                                                <name>accelerationStructureReference</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureInstanceNV"                       alias="VkAccelerationStructureInstanceKHR"/>
+        <type category="struct" name="VkAccelerationStructureDeviceAddressInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkAccelerationStructureKHR</type>                             <name>accelerationStructure</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureVersionInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member len="latexmath:[2 \times \mathtt{VK\_UUID\_SIZE}]" altlen="2*VK_UUID_SIZE">const <type>uint8_t</type>*                    <name>pVersionData</name></member>
+        </type>
+        <type category="struct" name="VkCopyAccelerationStructureInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkAccelerationStructureKHR</type>                             <name>src</name></member>
+            <member><type>VkAccelerationStructureKHR</type>                             <name>dst</name></member>
+            <member><type>VkCopyAccelerationStructureModeKHR</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkCopyAccelerationStructureToMemoryInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkAccelerationStructureKHR</type>                             <name>src</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressKHR</type>                               <name>dst</name></member>
+            <member><type>VkCopyAccelerationStructureModeKHR</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkCopyMemoryToAccelerationStructureInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                          <name>src</name></member>
+            <member><type>VkAccelerationStructureKHR</type>                             <name>dst</name></member>
+            <member><type>VkCopyAccelerationStructureModeKHR</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkRayTracingPipelineInterfaceCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                                               <name>maxPipelineRayPayloadSize</name></member>
+            <member><type>uint32_t</type>                                               <name>maxPipelineRayHitAttributeSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelineLibraryCreateInfoKHR" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                               <name>libraryCount</name></member>
+            <member len="libraryCount">const <type>VkPipeline</type>*                   <name>pLibraries</name></member>
+        </type>
+        <type category="struct" name="VkRefreshObjectKHR">
+            <member><type>VkObjectType</type>                                       <name>objectType</name></member>
+            <member objecttype="objectType" externsync="true"><type>uint64_t</type> <name>objectHandle</name></member>
+            <member optional="true"><type>VkRefreshObjectFlagsKHR</type>            <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkRefreshObjectListKHR">
+            <member values="VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>uint32_t</type>                                           <name>objectCount</name></member>
+            <member len="objectCount">const <type>VkRefreshObjectKHR</type>*        <name>pObjects</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedDynamicStateFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>extendedDynamicState</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedDynamicState2FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState2</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState2LogicOp</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState2PatchControlPoints</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedDynamicState3FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3TessellationDomainOrigin</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3DepthClampEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3PolygonMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3RasterizationSamples</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3SampleMask</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3AlphaToCoverageEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3AlphaToOneEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3LogicOpEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ColorBlendEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ColorBlendEquation</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ColorWriteMask</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3RasterizationStream</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ConservativeRasterizationMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ExtraPrimitiveOverestimationSize</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3DepthClipEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3SampleLocationsEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ColorBlendAdvanced</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ProvokingVertexMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3LineRasterizationMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3LineStippleEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3DepthClipNegativeOneToOne</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ViewportWScalingEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ViewportSwizzle</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageToColorEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageToColorLocation</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageModulationMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageModulationTableEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageModulationTable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3CoverageReductionMode</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3RepresentativeFragmentTestEnable</name></member>
+            <member><type>VkBool32</type>                     <name>extendedDynamicState3ShadingRateImageEnable</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedDynamicState3PropertiesEXT" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type> <name>dynamicPrimitiveTopologyUnrestricted</name></member>
+        </type>
+        <type category="struct" name="VkColorBlendEquationEXT">
+            <member><type>VkBlendFactor</type>               <name>srcColorBlendFactor</name></member>
+            <member><type>VkBlendFactor</type>               <name>dstColorBlendFactor</name></member>
+            <member><type>VkBlendOp</type>                   <name>colorBlendOp</name></member>
+            <member><type>VkBlendFactor</type>               <name>srcAlphaBlendFactor</name></member>
+            <member><type>VkBlendFactor</type>               <name>dstAlphaBlendFactor</name></member>
+            <member><type>VkBlendOp</type>                   <name>alphaBlendOp</name></member>
+        </type>
+        <type category="struct" name="VkColorBlendAdvancedEXT">
+            <member><type>VkBlendOp</type>                   <name>advancedBlendOp</name></member>
+            <member><type>VkBool32</type>                    <name>srcPremultiplied</name></member>
+            <member><type>VkBool32</type>                    <name>dstPremultiplied</name></member>
+            <member><type>VkBlendOverlapEXT</type>           <name>blendOverlap</name></member>
+            <member><type>VkBool32</type>                    <name>clampResults</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassTransformBeginInfoQCOM" structextends="VkRenderPassBeginInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                           <name>pNext</name><comment>Pointer to next structure</comment></member>
+            <member noautovalidity="true"><type>VkSurfaceTransformFlagBitsKHR</type>   <name>transform</name></member>
+        </type>
+        <type category="struct" name="VkCopyCommandTransformInfoQCOM" structextends="VkBufferImageCopy2,VkImageBlit2">
+            <member values="VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>*     <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkSurfaceTransformFlagBitsKHR</type>   <name>transform</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceRenderPassTransformInfoQCOM" structextends="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                           <name>pNext</name><comment>Pointer to next structure</comment></member>
+            <member noautovalidity="true"><type>VkSurfaceTransformFlagBitsKHR</type>   <name>transform</name></member>
+            <member><type>VkRect2D</type>                        <name>renderArea</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDiagnosticsConfigFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>diagnosticsConfig</name></member>
+        </type>
+        <type category="struct" name="VkDeviceDiagnosticsConfigCreateInfoNV" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                         <name>pNext</name></member>
+            <member optional="true"><type>VkDeviceDiagnosticsConfigFlagsNV</type>    <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPipelineOfflineCreateInfo" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo,VkRayTracingPipelineCreateInfoKHR,VkRayTracingPipelineCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_OFFLINE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>uint8_t</type>                                       <name>pipelineIdentifier</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member><type>VkPipelineMatchControl</type>                        <name>matchControl</name></member>
+            <member><type>VkDeviceSize</type>                                  <name>poolEntrySize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member><type>VkBool32</type>       <name>shaderZeroInitializeWorkgroupMemory</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR" alias="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type> <name>shaderSubgroupUniformControlFlow</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRobustness2FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>robustBufferAccess2</name></member>
+            <member><type>VkBool32</type>                           <name>robustImageAccess2</name></member>
+            <member><type>VkBool32</type>                           <name>nullDescriptor</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRobustness2PropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>    <name>robustStorageBufferAccessSizeAlignment</name></member>
+            <member limittype="min,pot"><type>VkDeviceSize</type>    <name>robustUniformBufferAccessSizeAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageRobustnessFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>robustImageAccess</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageRobustnessFeaturesEXT" alias="VkPhysicalDeviceImageRobustnessFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>workgroupMemoryExplicitLayout</name></member>
+            <member><type>VkBool32</type>                           <name>workgroupMemoryExplicitLayoutScalarBlockLayout</name></member>
+            <member><type>VkBool32</type>                           <name>workgroupMemoryExplicitLayout8BitAccess</name></member>
+            <member><type>VkBool32</type>                           <name>workgroupMemoryExplicitLayout16BitAccess</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePortabilitySubsetFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>constantAlphaColorBlendFactors</name></member>
+            <member><type>VkBool32</type>                           <name>events</name></member>
+            <member><type>VkBool32</type>                           <name>imageViewFormatReinterpretation</name></member>
+            <member><type>VkBool32</type>                           <name>imageViewFormatSwizzle</name></member>
+            <member><type>VkBool32</type>                           <name>imageView2DOn3DImage</name></member>
+            <member><type>VkBool32</type>                           <name>multisampleArrayImage</name></member>
+            <member><type>VkBool32</type>                           <name>mutableComparisonSamplers</name></member>
+            <member><type>VkBool32</type>                           <name>pointPolygons</name></member>
+            <member><type>VkBool32</type>                           <name>samplerMipLodBias</name></member>
+            <member><type>VkBool32</type>                           <name>separateStencilMaskRef</name></member>
+            <member><type>VkBool32</type>                           <name>shaderSampleRateInterpolationFunctions</name></member>
+            <member><type>VkBool32</type>                           <name>tessellationIsolines</name></member>
+            <member><type>VkBool32</type>                           <name>tessellationPointMode</name></member>
+            <member><type>VkBool32</type>                           <name>triangleFans</name></member>
+            <member><type>VkBool32</type>                           <name>vertexAttributeAccessBeyondStride</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePortabilitySubsetPropertiesKHR" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member limittype="min,pot"><type>uint32_t</type>  <name>minVertexInputBindingStrideAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevice4444FormatsFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>formatA4R4G4B4</name></member>
+            <member><type>VkBool32</type>                           <name>formatA4B4G4R4</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubpassShadingFeaturesHUAWEI" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>subpassShading</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI"><type>VkStructureType</type>  <name>sType</name></member>
+            <member optional="true"><type>void</type>*<name>pNext</name></member>
+            <member><type>VkBool32</type> <name>clustercullingShader</name></member>
+            <member><type>VkBool32</type> <name>multiviewClusterCullingShader</name></member>
+       </type>
+        <type category="struct" name="VkBufferCopy2">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COPY_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>srcOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>                       <name>dstOffset</name><comment>Specified in bytes</comment></member>
+            <member noautovalidity="true"><type>VkDeviceSize</type> <name>size</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkBufferCopy2KHR" alias="VkBufferCopy2"/>
+        <type category="struct" name="VkImageCopy2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_COPY_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>srcOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>dstOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkExtent3D</type>                         <name>extent</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkImageCopy2KHR" alias="VkImageCopy2"/>
+        <type category="struct" name="VkImageBlit2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_BLIT_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>srcOffsets</name>[2]<comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>dstOffsets</name>[2]<comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkImageBlit2KHR" alias="VkImageBlit2"/>
+        <type category="struct" name="VkBufferImageCopy2">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>bufferOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>uint32_t</type>                           <name>bufferRowLength</name><comment>Specified in texels</comment></member>
+            <member><type>uint32_t</type>                           <name>bufferImageHeight</name></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>imageSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>imageOffset</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+            <member><type>VkExtent3D</type>                         <name>imageExtent</name><comment>Specified in pixels for both compressed and uncompressed images</comment></member>
+        </type>
+        <type category="struct" name="VkBufferImageCopy2KHR" alias="VkBufferImageCopy2"/>
+        <type category="struct" name="VkImageResolve2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>srcSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>srcOffset</name></member>
+            <member><type>VkImageSubresourceLayers</type>           <name>dstSubresource</name></member>
+            <member><type>VkOffset3D</type>                         <name>dstOffset</name></member>
+            <member><type>VkExtent3D</type>                         <name>extent</name></member>
+        </type>
+        <type category="struct" name="VkImageResolve2KHR" alias="VkImageResolve2"/>
+        <type category="struct" name="VkCopyBufferInfo2">
+            <member values="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBuffer</type>                           <name>srcBuffer</name></member>
+            <member><type>VkBuffer</type>                           <name>dstBuffer</name></member>
+            <member><type>uint32_t</type>                           <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkBufferCopy2</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyBufferInfo2KHR" alias="VkCopyBufferInfo2"/>
+        <type category="struct" name="VkCopyImageInfo2">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkImage</type>                            <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                      <name>srcImageLayout</name></member>
+            <member><type>VkImage</type>                            <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                      <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                           <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkImageCopy2</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageInfo2KHR" alias="VkCopyImageInfo2"/>
+        <type category="struct" name="VkBlitImageInfo2">
+            <member values="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkImage</type>                                <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                          <name>srcImageLayout</name></member>
+            <member><type>VkImage</type>                                <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                          <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                               <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkImageBlit2</type>*  <name>pRegions</name></member>
+            <member><type>VkFilter</type>                               <name>filter</name></member>
+        </type>
+        <type category="struct" name="VkBlitImageInfo2KHR" alias="VkBlitImageInfo2"/>
+        <type category="struct" name="VkCopyBufferToImageInfo2">
+            <member values="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                 <name>pNext</name></member>
+            <member><type>VkBuffer</type>                                    <name>srcBuffer</name></member>
+            <member><type>VkImage</type>                                     <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                               <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                                    <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkBufferImageCopy2</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyBufferToImageInfo2KHR" alias="VkCopyBufferToImageInfo2"/>
+        <type category="struct" name="VkCopyImageToBufferInfo2">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                   <name>pNext</name></member>
+            <member><type>VkImage</type>                                       <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                                 <name>srcImageLayout</name></member>
+            <member><type>VkBuffer</type>                                      <name>dstBuffer</name></member>
+            <member><type>uint32_t</type>                                      <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkBufferImageCopy2</type>*   <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageToBufferInfo2KHR" alias="VkCopyImageToBufferInfo2"/>
+        <type category="struct" name="VkResolveImageInfo2">
+            <member values="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>VkImage</type>                                    <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>srcImageLayout</name></member>
+            <member><type>VkImage</type>                                    <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                                   <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkImageResolve2</type>*   <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkResolveImageInfo2KHR" alias="VkResolveImageInfo2"/>
+        <type category="struct" name="VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderImageInt64Atomics</name></member>
+            <member><type>VkBool32</type>                            <name>sparseImageInt64Atomics</name></member>
+        </type>
+        <type category="struct" name="VkFragmentShadingRateAttachmentInfoKHR" structextends="VkSubpassDescription2">
+            <member values="VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true">const <type>VkAttachmentReference2</type>* <name>pFragmentShadingRateAttachment</name></member>
+            <member><type>VkExtent2D</type>                 <name>shadingRateAttachmentTexelSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelineFragmentShadingRateStateCreateInfoKHR" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member><type>VkExtent2D</type>                                 <name>fragmentSize</name></member>
+            <member noautovalidity="true"><type>VkFragmentShadingRateCombinerOpKHR</type>         <name>combinerOps</name>[2]</member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShadingRateFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>           <name>pipelineFragmentShadingRate</name></member>
+            <member><type>VkBool32</type>           <name>primitiveFragmentShadingRate</name></member>
+            <member><type>VkBool32</type>           <name>attachmentFragmentShadingRate</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShadingRatePropertiesKHR" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member limittype="min"><type>VkExtent2D</type>             <name>minFragmentShadingRateAttachmentTexelSize</name></member>
+            <member limittype="max"><type>VkExtent2D</type>             <name>maxFragmentShadingRateAttachmentTexelSize</name></member>
+            <member limittype="max,pot"><type>uint32_t</type>                <name>maxFragmentShadingRateAttachmentTexelSizeAspectRatio</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>primitiveFragmentShadingRateWithMultipleViewports</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>layeredShadingRateAttachments</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateNonTrivialCombinerOps</name></member>
+            <member limittype="max"><type>VkExtent2D</type>             <name>maxFragmentSize</name></member>
+            <member limittype="max,pot"><type>uint32_t</type>                <name>maxFragmentSizeAspectRatio</name></member>
+            <member limittype="max"><type>uint32_t</type>                   <name>maxFragmentShadingRateCoverageSamples</name></member>
+            <member limittype="max"><type>VkSampleCountFlagBits</type>  <name>maxFragmentShadingRateRasterizationSamples</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithShaderDepthStencilWrites</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithSampleMask</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithShaderSampleMask</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithConservativeRasterization</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithFragmentShaderInterlock</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateWithCustomSampleLocations</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>               <name>fragmentShadingRateStrictMultiplyCombiner</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShadingRateKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkSampleCountFlags</type> <name>sampleCounts</name></member>
+            <member><type>VkExtent2D</type>         <name>fragmentSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderTerminateInvocationFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                                       <name>shaderTerminateInvocation</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR" alias="VkPhysicalDeviceShaderTerminateInvocationFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>fragmentShadingRateEnums</name></member>
+            <member><type>VkBool32</type>                           <name>supersampleFragmentShadingRates</name></member>
+            <member><type>VkBool32</type>                           <name>noInvocationFragmentShadingRates</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member limittype="max"><type>VkSampleCountFlagBits</type>              <name>maxFragmentShadingRateInvocationCount</name></member>
+        </type>
+        <type category="struct" name="VkPipelineFragmentShadingRateEnumStateCreateInfoNV" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkFragmentShadingRateTypeNV</type>        <name>shadingRateType</name></member>
+            <member noautovalidity="true"><type>VkFragmentShadingRateNV</type>            <name>shadingRate</name></member>
+            <member noautovalidity="true"><type>VkFragmentShadingRateCombinerOpKHR</type> <name>combinerOps</name>[2]</member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureBuildSizesInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>accelerationStructureSize</name></member>
+            <member><type>VkDeviceSize</type>                       <name>updateScratchSize</name></member>
+            <member><type>VkDeviceSize</type>                       <name>buildScratchSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImage2DViewOf3DFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>image2DViewOf3D</name></member>
+            <member><type>VkBool32</type>                                        <name>sampler2DViewOf3D</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>imageSlicedViewOf3D</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>attachmentFeedbackLoopDynamicState</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>mutableDescriptorType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE" alias="VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT"/>
+        <type category="struct" name="VkMutableDescriptorTypeListEXT">
+            <member optional="true"><type>uint32_t</type>                          <name>descriptorTypeCount</name></member>
+            <member len="descriptorTypeCount">const <type>VkDescriptorType</type>* <name>pDescriptorTypes</name></member>
+        </type>
+        <type category="struct" name="VkMutableDescriptorTypeListVALVE" alias="VkMutableDescriptorTypeListEXT"/>
+        <type category="struct" name="VkMutableDescriptorTypeCreateInfoEXT" structextends="VkDescriptorSetLayoutCreateInfo,VkDescriptorPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                       <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                          <name>mutableDescriptorTypeListCount</name></member>
+            <member len="mutableDescriptorTypeListCount">const <type>VkMutableDescriptorTypeListEXT</type>* <name>pMutableDescriptorTypeLists</name></member>
+        </type>
+        <type category="struct" name="VkMutableDescriptorTypeCreateInfoVALVE" alias="VkMutableDescriptorTypeCreateInfoEXT"/>
+        <type category="struct" name="VkPhysicalDeviceDepthClipControlFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                                    <name>depthClipControl</name></member>
+        </type>
+        <type category="struct" name="VkPipelineViewportDepthClipControlCreateInfoEXT" structextends="VkPipelineViewportStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                    <name>negativeOneToOne</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>vertexInputDynamicState</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalMemoryRDMAFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>externalMemoryRDMA</name></member>
+        </type>
+        <type category="struct" name="VkVertexInputBindingDescription2EXT">
+            <member values="VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>uint32_t</type>                       <name>binding</name></member>
+            <member><type>uint32_t</type>                       <name>stride</name></member>
+            <member><type>VkVertexInputRate</type>              <name>inputRate</name></member>
+            <member><type>uint32_t</type>                       <name>divisor</name></member>
+        </type>
+        <type category="struct" name="VkVertexInputAttributeDescription2EXT">
+            <member values="VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>uint32_t</type>                       <name>location</name><comment>location of the shader vertex attrib</comment></member>
+            <member><type>uint32_t</type>                       <name>binding</name><comment>Vertex buffer binding id</comment></member>
+            <member><type>VkFormat</type>                       <name>format</name><comment>format of source data</comment></member>
+            <member><type>uint32_t</type>                       <name>offset</name><comment>Offset of first element in bytes from base of vertex</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceColorWriteEnableFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>colorWriteEnable</name></member>
+        </type>
+        <type category="struct" name="VkPipelineColorWriteCreateInfoEXT" structextends="VkPipelineColorBlendStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>attachmentCount</name><comment># of pAttachments</comment></member>
+            <member len="attachmentCount">const <type>VkBool32</type>*  <name>pColorWriteEnables</name></member>
+        </type>
+        <type category="struct" name="VkMemoryBarrier2" structextends="VkSubpassDependency2">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>dstAccessMask</name></member>
+        </type>
+        <type category="struct" name="VkMemoryBarrier2KHR" alias="VkMemoryBarrier2"/>
+        <type category="struct" name="VkImageMemoryBarrier2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>dstAccessMask</name></member>
+            <member><type>VkImageLayout</type>                          <name>oldLayout</name></member>
+            <member><type>VkImageLayout</type>                          <name>newLayout</name></member>
+            <member><type>uint32_t</type>                               <name>srcQueueFamilyIndex</name></member>
+            <member><type>uint32_t</type>                               <name>dstQueueFamilyIndex</name></member>
+            <member><type>VkImage</type>                                <name>image</name></member>
+            <member><type>VkImageSubresourceRange</type>                <name>subresourceRange</name></member>
+        </type>
+        <type category="struct" name="VkImageMemoryBarrier2KHR" alias="VkImageMemoryBarrier2"/>
+        <type category="struct" name="VkBufferMemoryBarrier2">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2</type>         <name>dstAccessMask</name></member>
+            <member><type>uint32_t</type>                               <name>srcQueueFamilyIndex</name></member>
+            <member><type>uint32_t</type>                               <name>dstQueueFamilyIndex</name></member>
+            <member><type>VkBuffer</type>                               <name>buffer</name></member>
+            <member><type>VkDeviceSize</type>                           <name>offset</name></member>
+            <member><type>VkDeviceSize</type>                           <name>size</name></member>
+        </type>
+        <type category="struct" name="VkBufferMemoryBarrier2KHR" alias="VkBufferMemoryBarrier2"/>
+        <type category="struct" name="VkDependencyInfo">
+            <member values="VK_STRUCTURE_TYPE_DEPENDENCY_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                  <name>pNext</name></member>
+            <member optional="true"><type>VkDependencyFlags</type>                            <name>dependencyFlags</name></member>
+            <member optional="true"><type>uint32_t</type>                                     <name>memoryBarrierCount</name></member>
+            <member len="memoryBarrierCount">const <type>VkMemoryBarrier2</type>*             <name>pMemoryBarriers</name></member>
+            <member optional="true"><type>uint32_t</type>                                     <name>bufferMemoryBarrierCount</name></member>
+            <member len="bufferMemoryBarrierCount">const <type>VkBufferMemoryBarrier2</type>* <name>pBufferMemoryBarriers</name></member>
+            <member optional="true"><type>uint32_t</type>                                     <name>imageMemoryBarrierCount</name></member>
+            <member len="imageMemoryBarrierCount">const <type>VkImageMemoryBarrier2</type>*   <name>pImageMemoryBarriers</name></member>
+        </type>
+        <type category="struct" name="VkDependencyInfoKHR" alias="VkDependencyInfo"/>
+        <type category="struct" name="VkSemaphoreSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO"><type>VkStructureType</type>           <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                <name>pNext</name></member>
+            <member><type>VkSemaphore</type>                                                                <name>semaphore</name></member>
+            <member><type>uint64_t</type>                                                                   <name>value</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2</type>                                      <name>stageMask</name></member>
+            <member><type>uint32_t</type>                                                                   <name>deviceIndex</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreSubmitInfoKHR" alias="VkSemaphoreSubmitInfo"/>
+        <type category="struct" name="VkCommandBufferSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO"><type>VkStructureType</type>      <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                <name>pNext</name></member>
+            <member><type>VkCommandBuffer</type>                                                            <name>commandBuffer</name></member>
+            <member><type>uint32_t</type>                                                                   <name>deviceMask</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferSubmitInfoKHR" alias="VkCommandBufferSubmitInfo"/>
+        <type category="struct" name="VkSubmitInfo2">
+            <member values="VK_STRUCTURE_TYPE_SUBMIT_INFO_2"><type>VkStructureType</type>                   <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                <name>pNext</name></member>
+            <member optional="true"><type>VkSubmitFlags</type>                                              <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>waitSemaphoreInfoCount</name></member>
+            <member len="waitSemaphoreInfoCount">const <type>VkSemaphoreSubmitInfo</type>*                  <name>pWaitSemaphoreInfos</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>commandBufferInfoCount</name></member>
+            <member len="commandBufferInfoCount">const <type>VkCommandBufferSubmitInfo</type>*              <name>pCommandBufferInfos</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>signalSemaphoreInfoCount</name></member>
+            <member len="signalSemaphoreInfoCount">const <type>VkSemaphoreSubmitInfo</type>*                <name>pSignalSemaphoreInfos</name></member>
+        </type>
+        <type category="struct" name="VkSubmitInfo2KHR" alias="VkSubmitInfo2"/>
+        <type category="struct" name="VkQueueFamilyCheckpointProperties2NV" structextends="VkQueueFamilyProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*           <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkPipelineStageFlags2</type> <name>checkpointExecutionStageMask</name></member>
+        </type>
+        <type category="struct" name="VkCheckpointData2NV" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkPipelineStageFlags2</type>   <name>stage</name></member>
+            <member noautovalidity="true"><type>void</type>* <name>pCheckpointMarker</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSynchronization2Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>synchronization2</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSynchronization2FeaturesKHR" alias="VkPhysicalDeviceSynchronization2Features"/>
+        <type category="struct" name="VkPhysicalDeviceHostImageCopyFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>hostImageCopy</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceHostImageCopyPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                                        <name>pNext</name></member>
+            <member optional="true" limittype="noauto"><type>uint32_t</type>                                  <name>copySrcLayoutCount</name></member>
+            <member optional="true" limittype="noauto" len="copySrcLayoutCount"><type>VkImageLayout</type>*   <name>pCopySrcLayouts</name></member>
+            <member optional="true" limittype="noauto"><type>uint32_t</type>                                  <name>copyDstLayoutCount</name></member>
+            <member optional="true" limittype="noauto" len="copyDstLayoutCount"><type>VkImageLayout</type>*   <name>pCopyDstLayouts</name></member>
+            <member optional="true" limittype="noauto"><type>uint8_t</type>                                   <name>optimalTilingLayoutUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="bitmask"><type>VkBool32</type>                                                 <name>identicalMemoryTypeRequirements</name></member>
+        </type>
+        <type category="struct" name="VkMemoryToImageCopyEXT">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member>const <type>void</type>*                                    <name>pHostPointer</name></member>
+            <member><type>uint32_t</type>                                       <name>memoryRowLength</name><comment>Specified in texels</comment></member>
+            <member><type>uint32_t</type>                                       <name>memoryImageHeight</name></member>
+            <member><type>VkImageSubresourceLayers</type>                       <name>imageSubresource</name></member>
+            <member><type>VkOffset3D</type>                                     <name>imageOffset</name></member>
+            <member><type>VkExtent3D</type>                                     <name>imageExtent</name></member>
+        </type>
+        <type category="struct" name="VkImageToMemoryCopyEXT">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>void</type>*                                          <name>pHostPointer</name></member>
+            <member><type>uint32_t</type>                                       <name>memoryRowLength</name><comment>Specified in texels</comment></member>
+            <member><type>uint32_t</type>                                       <name>memoryImageHeight</name></member>
+            <member><type>VkImageSubresourceLayers</type>                       <name>imageSubresource</name></member>
+            <member><type>VkOffset3D</type>                                     <name>imageOffset</name></member>
+            <member><type>VkExtent3D</type>                                     <name>imageExtent</name></member>
+        </type>
+        <type category="struct" name="VkCopyMemoryToImageInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkHostImageCopyFlagsEXT</type>    <name>flags</name></member>
+            <member><type>VkImage</type>                                    <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                                   <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkMemoryToImageCopyEXT</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageToMemoryInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkHostImageCopyFlagsEXT</type>    <name>flags</name></member>
+            <member><type>VkImage</type>                                    <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>srcImageLayout</name></member>
+            <member><type>uint32_t</type>                                   <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkImageToMemoryCopyEXT</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageToImageInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkHostImageCopyFlagsEXT</type>    <name>flags</name></member>
+            <member><type>VkImage</type>                                    <name>srcImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>srcImageLayout</name></member>
+            <member><type>VkImage</type>                                    <name>dstImage</name></member>
+            <member><type>VkImageLayout</type>                              <name>dstImageLayout</name></member>
+            <member><type>uint32_t</type>                                   <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkImageCopy2</type>*      <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkHostImageLayoutTransitionInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*  <name>pNext</name></member>
+            <member><type>VkImage</type>                      <name>image</name></member>
+            <member><type>VkImageLayout</type>                <name>oldLayout</name></member>
+            <member><type>VkImageLayout</type>                <name>newLayout</name></member>
+            <member><type>VkImageSubresourceRange</type>      <name>subresourceRange</name></member>
+        </type>
+        <type category="struct" name="VkSubresourceHostMemcpySizeEXT" returnedonly="true" structextends="VkSubresourceLayout2KHR">
+            <member values="VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                 <name>size</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkHostImageCopyDevicePerformanceQueryEXT" returnedonly="true" structextends="VkImageFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>optimalDeviceAccess</name><comment>Specifies if device access is optimal</comment></member>
+            <member><type>VkBool32</type>                     <name>identicalMemoryLayout</name><comment>Specifies if memory layout is identical</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkanSC10Properties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>deviceNoDynamicHostAllocations</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>deviceDestroyFreesMemory</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>commandPoolMultipleCommandBuffersRecording</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>commandPoolResetCommandBuffer</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>commandBufferSimultaneousUse</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>secondaryCommandBufferNullOrImagelessFramebuffer</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>recycleDescriptorSetMemory</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>   <name>recyclePipelineMemory</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxRenderPassSubpasses</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxRenderPassDependencies</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxSubpassInputAttachments</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxSubpassPreserveAttachments</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxFramebufferAttachments</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxDescriptorSetLayoutBindings</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxQueryFaultCount</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxCallbackFaultCount</name></member>
+            <member limittype="max"><type>uint32_t</type>       <name>maxCommandPoolCommandBuffers</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>   <name>maxCommandBufferSize</name></member>
+        </type>
+        <type category="struct" name="VkPipelinePoolSize">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                   <name>poolEntrySize</name></member>
+            <member><type>uint32_t</type>                       <name>poolEntryCount</name></member>
+        </type>
+        <type category="struct" name="VkDeviceObjectReservationCreateInfo" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_OBJECT_RESERVATION_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>pipelineCacheCreateInfoCount</name></member>
+            <member len="pipelineCacheCreateInfoCount">const <type>VkPipelineCacheCreateInfo</type>* <name>pPipelineCacheCreateInfos</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>pipelinePoolSizeCount</name></member>
+            <member len="pipelinePoolSizeCount">const <type>VkPipelinePoolSize</type>* <name>pPipelinePoolSizes</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>semaphoreRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>commandBufferRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>fenceRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>deviceMemoryRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>bufferRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>imageRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>eventRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>queryPoolRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>bufferViewRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>imageViewRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>layeredImageViewRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>pipelineCacheRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>pipelineLayoutRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>renderPassRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>graphicsPipelineRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>computePipelineRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>descriptorSetLayoutRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>samplerRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>descriptorPoolRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>descriptorSetRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>framebufferRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>commandPoolRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>samplerYcbcrConversionRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>surfaceRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>swapchainRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>displayModeRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>subpassDescriptionRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>attachmentDescriptionRequestCount</name></member>
+            <member optional="true"><type>uint32_t</type>       <name>descriptorSetLayoutBindingRequestCount</name></member>
+            <member><type>uint32_t</type>                       <name>descriptorSetLayoutBindingLimit</name></member>
+            <member><type>uint32_t</type>                       <name>maxImageViewMipLevels</name></member>
+            <member><type>uint32_t</type>                       <name>maxImageViewArrayLayers</name></member>
+            <member><type>uint32_t</type>                       <name>maxLayeredImageViewMipLevels</name></member>
+            <member><type>uint32_t</type>                       <name>maxOcclusionQueriesPerPool</name></member>
+            <member><type>uint32_t</type>                       <name>maxPipelineStatisticsQueriesPerPool</name></member>
+            <member><type>uint32_t</type>                       <name>maxTimestampQueriesPerPool</name></member>
+            <member><type>uint32_t</type>                       <name>maxImmutableSamplersPerDescriptorSetLayout</name></member>
+        </type>
+        <type category="struct" name="VkCommandPoolMemoryReservationCreateInfo" structextends="VkCommandPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>  <name>commandPoolReservedSize</name></member>
+            <member><type>uint32_t</type>      <name>commandPoolMaxCommandBuffers</name></member>
+        </type>
+        <type category="struct" name="VkCommandPoolMemoryConsumption" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                   <name>commandPoolAllocated</name></member>
+            <member><type>VkDeviceSize</type>                   <name>commandPoolReservedSize</name></member>
+            <member><type>VkDeviceSize</type>                   <name>commandBufferAllocated</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVulkanSC10Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>shaderAtomicInstructions</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>primitivesGeneratedQuery</name></member>
+            <member><type>VkBool32</type>               <name>primitivesGeneratedQueryWithRasterizerDiscard</name></member>
+            <member><type>VkBool32</type>               <name>primitivesGeneratedQueryWithNonZeroStreams</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceLegacyDitheringFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>legacyDithering</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*   <name>pNext</name></member>
+            <member><type>VkBool32</type>                <name>multisampledRenderToSingleSampled</name></member>
+        </type>
+        <type category="struct" name="VkSubpassResolvePerformanceQueryEXT" returnedonly="true" structextends="VkFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type> <name>optimal</name></member>
+        </type>
+        <type category="struct" name="VkMultisampledRenderToSingleSampledInfoEXT" structextends="VkSubpassDescription2,VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*   <name>pNext</name></member>
+            <member><type>VkBool32</type>                      <name>multisampledRenderToSingleSampledEnable</name></member>
+            <member><type>VkSampleCountFlagBits</type>         <name>rasterizationSamples</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineProtectedAccessFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>pipelineProtectedAccess</name></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyVideoPropertiesKHR" returnedonly="true" structextends="VkQueueFamilyProperties2">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkVideoCodecOperationFlagsKHR</type>  <name>videoCodecOperations</name></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyQueryResultStatusPropertiesKHR" returnedonly="true" structextends="VkQueueFamilyProperties2">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkBool32</type>                                           <name>queryResultStatusSupport</name></member>
+        </type>
+        <type category="struct" name="VkVideoProfileListInfoKHR" structextends="VkPhysicalDeviceImageFormatInfo2,VkPhysicalDeviceVideoFormatInfoKHR,VkImageCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                   <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                      <name>profileCount</name></member>
+            <member len="profileCount">const <type>VkVideoProfileInfoKHR</type>*               <name>pProfiles</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVideoFormatInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                          <name>pNext</name></member>
+            <member><type>VkImageUsageFlags</type>                                    <name>imageUsage</name></member>
+        </type>
+        <type category="struct" name="VkVideoFormatPropertiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                                  <name>pNext</name></member>
+            <member><type>VkFormat</type>                                                               <name>format</name></member>
+            <member><type>VkComponentMapping</type>                                                     <name>componentMapping</name></member>
+            <member><type>VkImageCreateFlags</type>                                                     <name>imageCreateFlags</name></member>
+            <member><type>VkImageType</type>                                                            <name>imageType</name></member>
+            <member><type>VkImageTiling</type>                                                          <name>imageTiling</name></member>
+            <member><type>VkImageUsageFlags</type>                                                      <name>imageUsageFlags</name></member>
+        </type>
+        <type category="struct" name="VkVideoProfileInfoKHR" structextends="VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkVideoCodecOperationFlagBitsKHR</type>   <name>videoCodecOperation</name></member>
+            <member><type>VkVideoChromaSubsamplingFlagsKHR</type>   <name>chromaSubsampling</name></member>
+            <member><type>VkVideoComponentBitDepthFlagsKHR</type>   <name>lumaBitDepth</name></member>
+            <member optional="true"><type>VkVideoComponentBitDepthFlagsKHR</type> <name>chromaBitDepth</name></member>
+        </type>
+        <type category="struct" name="VkVideoCapabilitiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkVideoCapabilityFlagsKHR</type>        <name>flags</name></member>
+            <member><type>VkDeviceSize</type>                     <name>minBitstreamBufferOffsetAlignment</name></member>
+            <member><type>VkDeviceSize</type>                     <name>minBitstreamBufferSizeAlignment</name></member>
+            <member><type>VkExtent2D</type>                       <name>pictureAccessGranularity</name></member>
+            <member><type>VkExtent2D</type>                       <name>minCodedExtent</name></member>
+            <member><type>VkExtent2D</type>                       <name>maxCodedExtent</name></member>
+            <member><type>uint32_t</type>                         <name>maxDpbSlots</name></member>
+            <member><type>uint32_t</type>                         <name>maxActiveReferencePictures</name></member>
+            <member><type>VkExtensionProperties</type>            <name>stdHeaderVersion</name></member>
+        </type>
+        <type category="struct" name="VkVideoSessionMemoryRequirementsKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*             <name>pNext</name></member>
+            <member><type>uint32_t</type>                          <name>memoryBindIndex</name></member>
+            <member><type>VkMemoryRequirements</type>              <name>memoryRequirements</name></member>
+        </type>
+        <type category="struct" name="VkBindVideoSessionMemoryInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*       <name>pNext</name></member>
+            <member><type>uint32_t</type>                          <name>memoryBindIndex</name></member>
+            <member><type>VkDeviceMemory</type>                    <name>memory</name></member>
+            <member><type>VkDeviceSize</type>                      <name>memoryOffset</name></member>
+            <member><type>VkDeviceSize</type>                      <name>memorySize</name></member>
+        </type>
+        <type category="struct" name="VkVideoPictureResourceInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkOffset2D</type>         <name>codedOffset</name><comment>The offset to be used for the picture resource, currently only used in field mode</comment></member>
+            <member><type>VkExtent2D</type>         <name>codedExtent</name><comment>The extent to be used for the picture resource</comment></member>
+            <member><type>uint32_t</type>           <name>baseArrayLayer</name><comment>The first array layer to be accessed for the Decode or Encode Operations</comment></member>
+            <member><type>VkImageView</type>        <name>imageViewBinding</name><comment>The ImageView binding of the resource</comment></member>
+        </type>
+        <type category="struct" name="VkVideoReferenceSlotInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>int32_t</type>                            <name>slotIndex</name><comment>The reference slot index</comment></member>
+            <member optional="true">const <type>VkVideoPictureResourceInfoKHR</type>* <name>pPictureResource</name><comment>The reference picture resource</comment></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeCapabilitiesKHR" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                 <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkVideoDecodeCapabilityFlagsKHR</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeUsageInfoKHR" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkVideoDecodeUsageFlagsKHR</type> <name>videoUsageHints</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkVideoDecodeFlagsKHR</type>  <name>flags</name></member>
+            <member><type>VkBuffer</type>                               <name>srcBuffer</name></member>
+            <member><type>VkDeviceSize</type>                           <name>srcBufferOffset</name></member>
+            <member><type>VkDeviceSize</type>                           <name>srcBufferRange</name></member>
+            <member><type>VkVideoPictureResourceInfoKHR</type>          <name>dstPictureResource</name></member>
+            <member optional="true">const <type>VkVideoReferenceSlotInfoKHR</type>* <name>pSetupReferenceSlot</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>referenceSlotCount</name></member>
+            <member len="referenceSlotCount">const <type>VkVideoReferenceSlotInfoKHR</type>* <name>pReferenceSlots</name></member>
+        </type>
+            <comment>Video Decode Codec Standard specific structures</comment>
+        <type category="include" name="vk_video/vulkan_video_codec_h264std.h">#include "vk_video/vulkan_video_codec_h264std.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264ProfileIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264LevelIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264ChromaFormatIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264PocType"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264SpsFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264ScalingLists"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264SequenceParameterSetVui"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264AspectRatioIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264HrdParameters"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264SpsVuiFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264WeightedBipredIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264PpsFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264SliceType"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264CabacInitIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264DisableDeblockingFilterIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264PictureType"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264ModificationOfPicNumsIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264MemMgmtControlOp"/>
+        <type category="include" name="vk_video/vulkan_video_codec_h264std_decode.h">#include "vk_video/vulkan_video_codec_h264std_decode.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264PictureInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264ReferenceInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264PictureInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264ReferenceInfoFlags"/>
+        <type category="struct" name="VkVideoDecodeH264ProfileInfoKHR" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                  <name>pNext</name></member>
+            <member><type>StdVideoH264ProfileIdc</type>                                       <name>stdProfileIdc</name></member>
+            <member optional="true"><type>VkVideoDecodeH264PictureLayoutFlagBitsKHR</type>    <name>pictureLayout</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264CapabilitiesKHR" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>StdVideoH264LevelIdc</type>             <name>maxLevelIdc</name></member>
+            <member><type>VkOffset2D</type>                       <name>fieldOffsetGranularity</name></member>
+        </type>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264SequenceParameterSet"/>
+        <type requires="vk_video/vulkan_video_codec_h264std.h" name="StdVideoH264PictureParameterSet"/>
+        <type category="struct" name="VkVideoDecodeH264SessionParametersAddInfoKHR" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                       <name>stdSPSCount</name></member>
+            <member len="stdSPSCount">const <type>StdVideoH264SequenceParameterSet</type>*      <name>pStdSPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                       <name>stdPPSCount</name></member>
+            <member len="stdPPSCount">const <type>StdVideoH264PictureParameterSet</type>*       <name>pStdPPSs</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264SessionParametersCreateInfoKHR" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                               <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                                  <name>maxStdSPSCount</name></member>
+            <member><type>uint32_t</type>                                                                  <name>maxStdPPSCount</name></member>
+            <member optional="true">const <type>VkVideoDecodeH264SessionParametersAddInfoKHR</type>*       <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264PictureInfoKHR" structextends="VkVideoDecodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*           <name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH264PictureInfo</type>*  <name>pStdPictureInfo</name></member>
+            <member><type>uint32_t</type>                              <name>sliceCount</name></member>
+            <member len="sliceCount">const <type>uint32_t</type>*      <name>pSliceOffsets</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264DpbSlotInfoKHR" structextends="VkVideoReferenceSlotInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH264ReferenceInfo</type>* <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="include" name="vk_video/vulkan_video_codec_h265std.h">#include "vk_video/vulkan_video_codec_h265std.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265ProfileIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265VideoParameterSet"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SequenceParameterSet"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265PictureParameterSet"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265DecPicBufMgr"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265HrdParameters"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265VpsFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265LevelIdc"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SpsFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265ScalingLists"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SequenceParameterSetVui"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265PredictorPaletteEntries"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265PpsFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SubLayerHrdParameters"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265HrdFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SpsVuiFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265SliceType"/>
+        <type requires="vk_video/vulkan_video_codec_h265std.h" name="StdVideoH265PictureType"/>
+        <type category="include" name="vk_video/vulkan_video_codec_h265std_decode.h">#include "vk_video/vulkan_video_codec_h265std_decode.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h265std_decode.h" name="StdVideoDecodeH265PictureInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_decode.h" name="StdVideoDecodeH265ReferenceInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_decode.h" name="StdVideoDecodeH265PictureInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_decode.h" name="StdVideoDecodeH265ReferenceInfoFlags"/>
+        <type category="struct" name="VkVideoDecodeH265ProfileInfoKHR" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>StdVideoH265ProfileIdc</type>         <name>stdProfileIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265CapabilitiesKHR" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>StdVideoH265LevelIdc</type>                             <name>maxLevelIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265SessionParametersAddInfoKHR" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>stdVPSCount</name></member>
+            <member len="stdVPSCount">const <type>StdVideoH265VideoParameterSet</type>*     <name>pStdVPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>stdSPSCount</name></member>
+            <member len="stdSPSCount">const <type>StdVideoH265SequenceParameterSet</type>*  <name>pStdSPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>stdPPSCount</name></member>
+            <member len="stdPPSCount">const <type>StdVideoH265PictureParameterSet</type>*   <name>pStdPPSs</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265SessionParametersCreateInfoKHR" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                         <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdVPSCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdSPSCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdPPSCount</name></member>
+            <member optional="true">const <type>VkVideoDecodeH265SessionParametersAddInfoKHR</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265PictureInfoKHR" structextends="VkVideoDecodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH265PictureInfo</type>*       <name>pStdPictureInfo</name></member>
+            <member><type>uint32_t</type>                                   <name>sliceSegmentCount</name></member>
+            <member len="sliceSegmentCount">const <type>uint32_t</type>*    <name>pSliceSegmentOffsets</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265DpbSlotInfoKHR" structextends="VkVideoReferenceSlotInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*             <name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH265ReferenceInfo</type>*  <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoSessionCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                   <name>pNext</name></member>
+            <member><type>uint32_t</type>                                      <name>queueFamilyIndex</name></member>
+            <member optional="true"><type>VkVideoSessionCreateFlagsKHR</type>  <name>flags</name></member>
+            <member>const <type>VkVideoProfileInfoKHR</type>*                  <name>pVideoProfile</name></member>
+            <member><type>VkFormat</type>                                      <name>pictureFormat</name></member>
+            <member><type>VkExtent2D</type>                                    <name>maxCodedExtent</name></member>
+            <member><type>VkFormat</type>                                      <name>referencePictureFormat</name></member>
+            <member><type>uint32_t</type>                                      <name>maxDpbSlots</name></member>
+            <member><type>uint32_t</type>                                      <name>maxActiveReferencePictures</name></member>
+            <member>const <type>VkExtensionProperties</type>*                  <name>pStdHeaderVersion</name></member>
+        </type>
+        <type category="struct" name="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkVideoSessionParametersCreateFlagsKHR</type> <name>flags</name></member>
+            <member optional="true"><type>VkVideoSessionParametersKHR</type>            <name>videoSessionParametersTemplate</name></member>
+            <member><type>VkVideoSessionKHR</type>                                      <name>videoSession</name></member>
+        </type>
+        <type category="struct" name="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                                               <name>updateSequenceCount</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeSessionParametersGetInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>VkVideoSessionParametersKHR</type>                    <name>videoSessionParameters</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeSessionParametersFeedbackInfoKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member><type>VkBool32</type>                                       <name>hasOverrides</name></member>
+        </type>
+        <type category="struct" name="VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                             <name>pNext</name></member>
+            <member optional="true"><type>VkVideoBeginCodingFlagsKHR</type>              <name>flags</name></member>
+            <member><type>VkVideoSessionKHR</type>                                       <name>videoSession</name></member>
+            <member optional="true"><type>VkVideoSessionParametersKHR</type>             <name>videoSessionParameters</name></member>
+            <member optional="true"><type>uint32_t</type>                                <name>referenceSlotCount</name></member>
+            <member len="referenceSlotCount">const <type>VkVideoReferenceSlotInfoKHR</type>* <name>pReferenceSlots</name></member>
+        </type>
+        <type category="struct" name="VkVideoEndCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEndCodingFlagsKHR</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkVideoCodingControlInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>VkVideoCodingControlFlagsKHR</type>  <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeUsageInfoKHR" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEncodeUsageFlagsKHR</type>     <name>videoUsageHints</name></member>
+            <member optional="true"><type>VkVideoEncodeContentFlagsKHR</type>   <name>videoContentHints</name></member>
+            <member optional="true"><type>VkVideoEncodeTuningModeKHR</type>     <name>tuningMode</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEncodeFlagsKHR</type>  <name>flags</name></member>
+            <member><type>VkBuffer</type>                               <name>dstBuffer</name></member>
+            <member><type>VkDeviceSize</type>                           <name>dstBufferOffset</name></member>
+            <member><type>VkDeviceSize</type>                           <name>dstBufferRange</name></member>
+            <member><type>VkVideoPictureResourceInfoKHR</type>          <name>srcPictureResource</name></member>
+            <member optional="true">const <type>VkVideoReferenceSlotInfoKHR</type>* <name>pSetupReferenceSlot</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>referenceSlotCount</name></member>
+            <member len="referenceSlotCount">const <type>VkVideoReferenceSlotInfoKHR</type>* <name>pReferenceSlots</name></member>
+            <member><type>uint32_t</type>                               <name>precedingExternallyEncodedBytes</name></member>
+        </type>
+        <type category="struct" name="VkQueryPoolVideoEncodeFeedbackCreateInfoKHR" structextends="VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkVideoEncodeFeedbackFlagsKHR</type>          <name>encodeFeedbackFlags</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeQualityLevelInfoKHR" structextends="VkVideoCodingControlInfoKHR,VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                               <name>qualityLevel</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member>const <type>VkVideoProfileInfoKHR</type>*           <name>pVideoProfile</name></member>
+            <member><type>uint32_t</type>                               <name>qualityLevel</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeQualityLevelPropertiesKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkVideoEncodeRateControlModeFlagBitsKHR</type> <name>preferredRateControlMode</name></member>
+            <member><type>uint32_t</type>                               <name>preferredRateControlLayerCount</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeRateControlInfoKHR" structextends="VkVideoCodingControlInfoKHR,VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEncodeRateControlFlagsKHR</type> <name>flags</name></member>
+            <member optional="true"><type>VkVideoEncodeRateControlModeFlagBitsKHR</type> <name>rateControlMode</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>layerCount</name></member>
+            <member len="layerCount">const <type>VkVideoEncodeRateControlLayerInfoKHR</type>* <name>pLayers</name></member>
+            <member><type>uint32_t</type>                               <name>virtualBufferSizeInMs</name></member>
+            <member><type>uint32_t</type>                               <name>initialVirtualBufferSizeInMs</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeRateControlLayerInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>uint64_t</type>                               <name>averageBitrate</name></member>
+            <member><type>uint64_t</type>                               <name>maxBitrate</name></member>
+            <member><type>uint32_t</type>                               <name>frameRateNumerator</name></member>
+            <member><type>uint32_t</type>                               <name>frameRateDenominator</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeCapabilitiesKHR" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                 <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkVideoEncodeCapabilityFlagsKHR</type>       <name>flags</name></member>
+            <member><type>VkVideoEncodeRateControlModeFlagsKHR</type>  <name>rateControlModes</name></member>
+            <member><type>uint32_t</type>                              <name>maxRateControlLayers</name></member>
+            <member><type>uint64_t</type>                              <name>maxBitrate</name></member>
+            <member><type>uint32_t</type>                              <name>maxQualityLevels</name></member>
+            <member><type>VkExtent2D</type>                            <name>encodeInputPictureGranularity</name></member>
+            <member><type>VkVideoEncodeFeedbackFlagsKHR</type>         <name>supportedEncodeFeedbackFlags</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264CapabilitiesEXT" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                 <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkVideoEncodeH264CapabilityFlagsEXT</type> <name>flags</name></member>
+            <member><type>StdVideoH264LevelIdc</type>                  <name>maxLevelIdc</name></member>
+            <member><type>uint32_t</type>                              <name>maxSliceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxPPictureL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxBPictureL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxL1ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxTemporalLayerCount</name></member>
+            <member><type>VkBool32</type>                              <name>expectDyadicTemporalLayerPattern</name></member>
+            <member><type>int32_t</type>                               <name>minQp</name></member>
+            <member><type>int32_t</type>                               <name>maxQp</name></member>
+            <member><type>VkBool32</type>                              <name>prefersGopRemainingFrames</name></member>
+            <member><type>VkBool32</type>                              <name>requiresGopRemainingFrames</name></member>
+            <member noautovalidity="true"><type>VkVideoEncodeH264StdFlagsEXT</type> <name>stdSyntaxFlags</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264QualityLevelPropertiesEXT" returnedonly="true" structextends="VkVideoEncodeQualityLevelPropertiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkVideoEncodeH264RateControlFlagsEXT</type>   <name>preferredRateControlFlags</name></member>
+            <member><type>uint32_t</type>                               <name>preferredGopFrameCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredIdrPeriod</name></member>
+            <member><type>uint32_t</type>                               <name>preferredConsecutiveBFrameCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredTemporalLayerCount</name></member>
+            <member><type>VkVideoEncodeH264QpEXT</type>                 <name>preferredConstantQp</name></member>
+            <member><type>uint32_t</type>                               <name>preferredMaxL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredMaxL1ReferenceCount</name></member>
+            <member><type>VkBool32</type>                               <name>preferredStdEntropyCodingModeFlag</name></member>
+        </type>
+        <type category="include" name="vk_video/vulkan_video_codec_h264std_encode.h">#include "vk_video/vulkan_video_codec_h264std_encode.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264SliceHeader"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264PictureInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264ReferenceInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264SliceHeaderFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264ReferenceListsInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264PictureInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264ReferenceInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264RefMgmtFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264RefListModEntry"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264RefPicMarkingEntry"/>
+        <type category="struct" name="VkVideoEncodeH264SessionCreateInfoEXT" structextends="VkVideoSessionCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>useMaxLevelIdc</name></member>
+            <member><type>StdVideoH264LevelIdc</type>                   <name>maxLevelIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264SessionParametersAddInfoEXT" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                               <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                                  <name>stdSPSCount</name></member>
+            <member len="stdSPSCount" optional="true">const <type>StdVideoH264SequenceParameterSet</type>* <name>pStdSPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                                  <name>stdPPSCount</name></member>
+            <member len="stdPPSCount" optional="true">const <type>StdVideoH264PictureParameterSet</type>*  <name>pStdPPSs</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264SessionParametersCreateInfoEXT" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                         <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdSPSCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdPPSCount</name></member>
+            <member optional="true">const <type>VkVideoEncodeH264SessionParametersAddInfoEXT</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264SessionParametersGetInfoEXT" structextends="VkVideoEncodeSessionParametersGetInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>writeStdSPS</name></member>
+            <member><type>VkBool32</type>                               <name>writeStdPPS</name></member>
+            <member><type>uint32_t</type>                               <name>stdSPSId</name></member>
+            <member><type>uint32_t</type>                               <name>stdPPSId</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264SessionParametersFeedbackInfoEXT" structextends="VkVideoEncodeSessionParametersFeedbackInfoKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>hasStdSPSOverrides</name></member>
+            <member><type>VkBool32</type>                               <name>hasStdPPSOverrides</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264DpbSlotInfoEXT" structextends="VkVideoReferenceSlotInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                          <name>pNext</name></member>
+            <member>const <type>StdVideoEncodeH264ReferenceInfo</type>*                               <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264PictureInfoEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                        <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                           <name>naluSliceEntryCount</name></member>
+            <member len="naluSliceEntryCount">const <type>VkVideoEncodeH264NaluSliceInfoEXT</type>* <name>pNaluSliceEntries</name></member>
+            <member>const <type>StdVideoEncodeH264PictureInfo</type>*                               <name>pStdPictureInfo</name></member>
+            <member><type>VkBool32</type>                                                           <name>generatePrefixNalu</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264ProfileInfoEXT" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*             <name>pNext</name></member>
+            <member><type>StdVideoH264ProfileIdc</type>                  <name>stdProfileIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264NaluSliceInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member><type>int32_t</type>                                         <name>constantQp</name></member>
+            <member>const <type>StdVideoEncodeH264SliceHeader</type>*            <name>pStdSliceHeader</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264RateControlInfoEXT" structextends="VkVideoCodingControlInfoKHR,VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEncodeH264RateControlFlagsEXT</type> <name>flags</name></member>
+            <member><type>uint32_t</type>                                        <name>gopFrameCount</name></member>
+            <member><type>uint32_t</type>                                        <name>idrPeriod</name></member>
+            <member><type>uint32_t</type>                                        <name>consecutiveBFrameCount</name></member>
+            <member><type>uint32_t</type>                                        <name>temporalLayerCount</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264QpEXT">
+            <member noautovalidity="true"><type>int32_t</type> <name>qpI</name></member>
+            <member noautovalidity="true"><type>int32_t</type> <name>qpP</name></member>
+            <member noautovalidity="true"><type>int32_t</type> <name>qpB</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264FrameSizeEXT">
+            <member noautovalidity="true"><type>uint32_t</type> <name>frameISize</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>framePSize</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>frameBSize</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264GopRemainingFrameInfoEXT" structextends="VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>useGopRemainingFrames</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingI</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingP</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingB</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264RateControlLayerInfoEXT" structextends="VkVideoEncodeRateControlLayerInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>useMinQp</name></member>
+            <member><type>VkVideoEncodeH264QpEXT</type>                          <name>minQp</name></member>
+            <member><type>VkBool32</type>                                        <name>useMaxQp</name></member>
+            <member><type>VkVideoEncodeH264QpEXT</type>                          <name>maxQp</name></member>
+            <member><type>VkBool32</type>                                        <name>useMaxFrameSize</name></member>
+            <member><type>VkVideoEncodeH264FrameSizeEXT</type>                   <name>maxFrameSize</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265CapabilitiesEXT" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                 <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkVideoEncodeH265CapabilityFlagsEXT</type> <name>flags</name></member>
+            <member><type>StdVideoH265LevelIdc</type>                  <name>maxLevelIdc</name></member>
+            <member><type>uint32_t</type>                              <name>maxSliceSegmentCount</name></member>
+            <member><type>VkExtent2D</type>                            <name>maxTiles</name></member>
+            <member><type>VkVideoEncodeH265CtbSizeFlagsEXT</type>      <name>ctbSizes</name></member>
+            <member><type>VkVideoEncodeH265TransformBlockSizeFlagsEXT</type>      <name>transformBlockSizes</name></member>
+            <member><type>uint32_t</type>                              <name>maxPPictureL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxBPictureL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxL1ReferenceCount</name></member>
+            <member><type>uint32_t</type>                              <name>maxSubLayerCount</name></member>
+            <member><type>VkBool32</type>                              <name>expectDyadicTemporalSubLayerPattern</name></member>
+            <member><type>int32_t</type>                               <name>minQp</name></member>
+            <member><type>int32_t</type>                               <name>maxQp</name></member>
+            <member><type>VkBool32</type>                              <name>prefersGopRemainingFrames</name></member>
+            <member><type>VkBool32</type>                              <name>requiresGopRemainingFrames</name></member>
+            <member noautovalidity="true"><type>VkVideoEncodeH265StdFlagsEXT</type> <name>stdSyntaxFlags</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265QualityLevelPropertiesEXT" returnedonly="true" structextends="VkVideoEncodeQualityLevelPropertiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkVideoEncodeH265RateControlFlagsEXT</type>   <name>preferredRateControlFlags</name></member>
+            <member><type>uint32_t</type>                               <name>preferredGopFrameCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredIdrPeriod</name></member>
+            <member><type>uint32_t</type>                               <name>preferredConsecutiveBFrameCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredSubLayerCount</name></member>
+            <member><type>VkVideoEncodeH265QpEXT</type>                 <name>preferredConstantQp</name></member>
+            <member><type>uint32_t</type>                               <name>preferredMaxL0ReferenceCount</name></member>
+            <member><type>uint32_t</type>                               <name>preferredMaxL1ReferenceCount</name></member>
+        </type>
+        <type category="include" name="vk_video/vulkan_video_codec_h265std_encode.h">#include "vk_video/vulkan_video_codec_h265std_encode.h"</type>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265PictureInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265PictureInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265SliceSegmentHeader"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceListsInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265SliceSegmentHeaderFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceInfoFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceModificationFlags"/>
+        <type category="struct" name="VkVideoEncodeH265SessionCreateInfoEXT" structextends="VkVideoSessionCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>useMaxLevelIdc</name></member>
+            <member><type>StdVideoH265LevelIdc</type>                   <name>maxLevelIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265SessionParametersAddInfoEXT" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                               <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                                  <name>stdVPSCount</name></member>
+            <member len="stdVPSCount" optional="true">const <type>StdVideoH265VideoParameterSet</type>*    <name>pStdVPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                                  <name>stdSPSCount</name></member>
+            <member len="stdSPSCount" optional="true">const <type>StdVideoH265SequenceParameterSet</type>* <name>pStdSPSs</name></member>
+            <member optional="true"><type>uint32_t</type>                                                  <name>stdPPSCount</name></member>
+            <member len="stdPPSCount" optional="true">const <type>StdVideoH265PictureParameterSet</type>*  <name>pStdPPSs</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265SessionParametersCreateInfoEXT" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                         <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdVPSCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdSPSCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxStdPPSCount</name></member>
+            <member optional="true">const <type>VkVideoEncodeH265SessionParametersAddInfoEXT</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265SessionParametersGetInfoEXT" structextends="VkVideoEncodeSessionParametersGetInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>writeStdVPS</name></member>
+            <member><type>VkBool32</type>                               <name>writeStdSPS</name></member>
+            <member><type>VkBool32</type>                               <name>writeStdPPS</name></member>
+            <member><type>uint32_t</type>                               <name>stdVPSId</name></member>
+            <member><type>uint32_t</type>                               <name>stdSPSId</name></member>
+            <member><type>uint32_t</type>                               <name>stdPPSId</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265SessionParametersFeedbackInfoEXT" structextends="VkVideoEncodeSessionParametersFeedbackInfoKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>hasStdVPSOverrides</name></member>
+            <member><type>VkBool32</type>                               <name>hasStdSPSOverrides</name></member>
+            <member><type>VkBool32</type>                               <name>hasStdPPSOverrides</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265PictureInfoEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                       <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                          <name>naluSliceSegmentEntryCount</name></member>
+            <member len="naluSliceSegmentEntryCount">const <type>VkVideoEncodeH265NaluSliceSegmentInfoEXT</type>* <name>pNaluSliceSegmentEntries</name></member>
+            <member>const <type>StdVideoEncodeH265PictureInfo</type>*                              <name>pStdPictureInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265NaluSliceSegmentInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member><type>int32_t</type>                                                    <name>constantQp</name></member>
+            <member>const <type>StdVideoEncodeH265SliceSegmentHeader</type>*                <name>pStdSliceSegmentHeader</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265RateControlInfoEXT" structextends="VkVideoCodingControlInfoKHR,VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member optional="true"><type>VkVideoEncodeH265RateControlFlagsEXT</type> <name>flags</name></member>
+            <member><type>uint32_t</type>                                        <name>gopFrameCount</name></member>
+            <member><type>uint32_t</type>                                        <name>idrPeriod</name></member>
+            <member><type>uint32_t</type>                                        <name>consecutiveBFrameCount</name></member>
+            <member><type>uint32_t</type>                                        <name>subLayerCount</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265QpEXT">
+            <member noautovalidity="true"><type>int32_t</type> <name>qpI</name></member>
+            <member noautovalidity="true"><type>int32_t</type> <name>qpP</name></member>
+            <member noautovalidity="true"><type>int32_t</type> <name>qpB</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265FrameSizeEXT">
+            <member noautovalidity="true"><type>uint32_t</type> <name>frameISize</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>framePSize</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>frameBSize</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265GopRemainingFrameInfoEXT" structextends="VkVideoBeginCodingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>useGopRemainingFrames</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingI</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingP</name></member>
+            <member><type>uint32_t</type>                       <name>gopRemainingB</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265RateControlLayerInfoEXT" structextends="VkVideoEncodeRateControlLayerInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>useMinQp</name></member>
+            <member><type>VkVideoEncodeH265QpEXT</type>                          <name>minQp</name></member>
+            <member><type>VkBool32</type>                                        <name>useMaxQp</name></member>
+            <member><type>VkVideoEncodeH265QpEXT</type>                          <name>maxQp</name></member>
+            <member><type>VkBool32</type>                                        <name>useMaxFrameSize</name></member>
+            <member><type>VkVideoEncodeH265FrameSizeEXT</type>                   <name>maxFrameSize</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265ProfileInfoEXT" structextends="VkVideoProfileInfoKHR,VkQueryPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>StdVideoH265ProfileIdc</type>         <name>stdProfileIdc</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265DpbSlotInfoEXT" structextends="VkVideoReferenceSlotInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*              <name>pNext</name></member>
+            <member>const <type>StdVideoEncodeH265ReferenceInfo</type>*   <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceInheritedViewportScissorFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>inheritedViewportScissor2D</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceViewportScissorInfoNV" structextends="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                    <name>pNext</name></member>
+            <member><type>VkBool32</type>                                       <name>viewportScissor2D</name></member>
+            <member><type>uint32_t</type>                                       <name>viewportDepthCount</name></member>
+            <member noautovalidity="true">const <type>VkViewport</type>*        <name>pViewportDepths</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>ycbcr2plane444Formats</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProvokingVertexFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>provokingVertexLast</name></member>
+            <member><type>VkBool32</type>                           <name>transformFeedbackPreservesProvokingVertex</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceProvokingVertexPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                            <name>provokingVertexModePerPipeline</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                            <name>transformFeedbackPreservesTriangleFanProvokingVertex</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRasterizationProvokingVertexStateCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>VkProvokingVertexModeEXT</type>           <name>provokingVertexMode</name></member>
+        </type>
+        <type category="struct" name="VkCuModuleCreateInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>size_t</type>                 <name>dataSize</name></member>
+            <member len="dataSize">const <type>void</type>*            <name>pData</name></member>
+        </type>
+        <type category="struct" name="VkCuFunctionCreateInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>VkCuModuleNVX</type>                      <name>module</name></member>
+            <member len="null-terminated">const <type>char</type>*  <name>pName</name></member>
+        </type>
+        <type category="struct" name="VkCuLaunchInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkCuFunctionNVX</type>        <name>function</name></member>
+            <member><type>uint32_t</type>               <name>gridDimX</name></member>
+            <member><type>uint32_t</type>               <name>gridDimY</name></member>
+            <member><type>uint32_t</type>               <name>gridDimZ</name></member>
+            <member><type>uint32_t</type>               <name>blockDimX</name></member>
+            <member><type>uint32_t</type>               <name>blockDimY</name></member>
+            <member><type>uint32_t</type>               <name>blockDimZ</name></member>
+            <member><type>uint32_t</type>               <name>sharedMemBytes</name></member>
+            <member optional="true"><type>size_t</type>                 <name>paramCount</name></member>
+            <member len="paramCount">const <type>void</type>* const *    <name>pParams</name></member>
+            <member optional="true"><type>size_t</type>                 <name>extraCount</name></member>
+            <member len="extraCount">const <type>void</type>* const *    <name>pExtras</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorBufferFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>descriptorBuffer</name></member>
+            <member><type>VkBool32</type>                           <name>descriptorBufferCaptureReplay</name></member>
+            <member><type>VkBool32</type>                           <name>descriptorBufferImageLayoutIgnored</name></member>
+            <member><type>VkBool32</type>                           <name>descriptorBufferPushDescriptors</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorBufferPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>combinedImageSamplerDescriptorSingleArray</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>bufferlessPushDescriptors</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                         <name>allowSamplerImageViewPostSubmitCreation</name></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>                     <name>descriptorBufferOffsetAlignment</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxDescriptorBufferBindings</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxResourceDescriptorBufferBindings</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxSamplerDescriptorBufferBindings</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxEmbeddedImmutableSamplerBindings</name></member>
+            <member limittype="max"><type>uint32_t</type>                            <name>maxEmbeddedImmutableSamplers</name></member>
+            <member limittype="noauto"><type>size_t</type>                           <name>bufferCaptureReplayDescriptorDataSize</name></member>
+            <member limittype="noauto"><type>size_t</type>                           <name>imageCaptureReplayDescriptorDataSize</name></member>
+            <member limittype="noauto"><type>size_t</type>                           <name>imageViewCaptureReplayDescriptorDataSize</name></member>
+            <member limittype="noauto"><type>size_t</type>                           <name>samplerCaptureReplayDescriptorDataSize</name></member>
+            <member limittype="noauto"><type>size_t</type>                           <name>accelerationStructureCaptureReplayDescriptorDataSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>samplerDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>combinedImageSamplerDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>sampledImageDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>storageImageDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>uniformTexelBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>robustUniformTexelBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>storageTexelBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>robustStorageTexelBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>uniformBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>robustUniformBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>storageBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>robustStorageBufferDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>inputAttachmentDescriptorSize</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>accelerationStructureDescriptorSize</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                        <name>maxSamplerDescriptorBufferRange</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                        <name>maxResourceDescriptorBufferRange</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                        <name>samplerDescriptorBufferAddressSpaceSize</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                        <name>resourceDescriptorBufferAddressSpaceSize</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                        <name>descriptorBufferAddressSpaceSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="max"><type>size_t</type>                              <name>combinedImageSamplerDensityMapDescriptorSize</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorAddressInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                   <name>pNext</name></member>
+            <member><type>VkDeviceAddress</type>                         <name>address</name></member>
+            <member><type>VkDeviceSize</type>                            <name>range</name></member>
+            <member><type>VkFormat</type>                                <name>format</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorBufferBindingInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                   <name>pNext</name></member>
+            <member><type>VkDeviceAddress</type>                         <name>address</name></member>
+            <member><type>VkBufferUsageFlags</type>                      <name>usage</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorBufferBindingPushDescriptorBufferHandleEXT" structextends="VkDescriptorBufferBindingInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                   <name>pNext</name></member>
+            <member ><type>VkBuffer</type>                               <name>buffer</name></member>
+        </type>
+        <type category="union" name="VkDescriptorDataEXT">
+            <member selection="VK_DESCRIPTOR_TYPE_SAMPLER">const <type>VkSampler</type>*                                                     <name>pSampler</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER">const <type>VkDescriptorImageInfo</type>*                          <name>pCombinedImageSampler</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT">const <type>VkDescriptorImageInfo</type>*                                <name>pInputAttachmentImage</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE" optional="true">const <type>VkDescriptorImageInfo</type>*                   <name>pSampledImage</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_STORAGE_IMAGE" optional="true">const <type>VkDescriptorImageInfo</type>*                   <name>pStorageImage</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER" optional="true">const <type>VkDescriptorAddressInfoEXT</type>*       <name>pUniformTexelBuffer</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER" optional="true">const <type>VkDescriptorAddressInfoEXT</type>*       <name>pStorageTexelBuffer</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER" optional="true">const <type>VkDescriptorAddressInfoEXT</type>*             <name>pUniformBuffer</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_STORAGE_BUFFER" optional="true">const <type>VkDescriptorAddressInfoEXT</type>*             <name>pStorageBuffer</name></member>
+            <member selection="VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR,VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV"><type>VkDeviceAddress</type> <name>accelerationStructure</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorGetInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkDescriptorType</type>       <name>type</name></member>
+            <member selector="type" noautovalidity="true"><type>VkDescriptorDataEXT</type>  <name>data</name></member>
+        </type>
+        <type category="struct" name="VkBufferCaptureDescriptorDataInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBuffer</type>               <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkImageCaptureDescriptorDataInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkImage</type>                <name>image</name></member>
+        </type>
+        <type category="struct" name="VkImageViewCaptureDescriptorDataInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkImageView</type>                <name>imageView</name></member>
+        </type>
+        <type category="struct" name="VkSamplerCaptureDescriptorDataInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkSampler</type>              <name>sampler</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureCaptureDescriptorDataInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkAccelerationStructureKHR</type>             <name>accelerationStructure</name></member>
+            <member optional="true"><type>VkAccelerationStructureNV</type>              <name>accelerationStructureNV</name></member>
+        </type>
+        <type category="struct" name="VkOpaqueCaptureDescriptorDataCreateInfoEXT" structextends="VkBufferCreateInfo,VkImageCreateInfo,VkImageViewCreateInfo,VkSamplerCreateInfo,VkAccelerationStructureCreateInfoKHR,VkAccelerationStructureCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member>const <type>void</type>*            <name>opaqueCaptureDescriptorData</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderIntegerDotProductFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>shaderIntegerDotProduct</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" alias="VkPhysicalDeviceShaderIntegerDotProductFeatures"/>
+        <type category="struct" name="VkPhysicalDeviceShaderIntegerDotProductProperties" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct8BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct8BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct8BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct4x8BitPackedUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct4x8BitPackedSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct4x8BitPackedMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct16BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct16BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct16BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct32BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct32BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct32BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct64BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct64BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProduct64BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating8BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating8BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating16BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating16BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating32BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating32BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating64BitUnsignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating64BitSignedAccelerated</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>        <name>integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR" alias="VkPhysicalDeviceShaderIntegerDotProductProperties"/>
+        <type category="struct" name="VkPhysicalDeviceDrmPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type> <name>hasPrimary</name></member>
+            <member limittype="bitmask"><type>VkBool32</type> <name>hasRender</name></member>
+            <member limittype="noauto"><type>int64_t</type> <name>primaryMajor</name></member>
+            <member limittype="noauto"><type>int64_t</type> <name>primaryMinor</name></member>
+            <member limittype="noauto"><type>int64_t</type> <name>renderMajor</name></member>
+            <member limittype="noauto"><type>int64_t</type> <name>renderMinor</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>               <name>fragmentShaderBarycentric</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>              <name>triStripVertexOrderIndependentOfProvokingVertex</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>rayTracingMotionBlur</name></member>
+            <member><type>VkBool32</type>                           <name>rayTracingMotionBlurPipelineTraceRaysIndirect</name></member>
+        </type>
+        <type name="VkAccelerationStructureMotionInstanceTypeNV" category="enum"/>
+        <type category="struct" name="VkAccelerationStructureGeometryMotionTrianglesDataNV" structextends="VkAccelerationStructureGeometryTrianglesDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                   <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                 <name>vertexData</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureMotionInfoNV" structextends="VkAccelerationStructureCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>uint32_t</type>                                       <name>maxInstances</name></member>
+            <member optional="true"><type>VkAccelerationStructureMotionInfoFlagsNV</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkSRTDataNV">
+            <member><type>float</type> <name>sx</name></member>
+            <member><type>float</type> <name>a</name></member>
+            <member><type>float</type> <name>b</name></member>
+            <member><type>float</type> <name>pvx</name></member>
+            <member><type>float</type> <name>sy</name></member>
+            <member><type>float</type> <name>c</name></member>
+            <member><type>float</type> <name>pvy</name></member>
+            <member><type>float</type> <name>sz</name></member>
+            <member><type>float</type> <name>pvz</name></member>
+            <member><type>float</type> <name>qx</name></member>
+            <member><type>float</type> <name>qy</name></member>
+            <member><type>float</type> <name>qz</name></member>
+            <member><type>float</type> <name>qw</name></member>
+            <member><type>float</type> <name>tx</name></member>
+            <member><type>float</type> <name>ty</name></member>
+            <member><type>float</type> <name>tz</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureSRTMotionInstanceNV">
+            <comment>The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>VkSRTDataNV</type>                                             <name>transformT0</name></member>
+            <member><type>VkSRTDataNV</type>                                             <name>transformT1</name></member>
+            <member><type>uint32_t</type>                                                <name>instanceCustomIndex</name>:24</member>
+            <member><type>uint32_t</type>                                                <name>mask</name>:8</member>
+            <member><type>uint32_t</type>                                                <name>instanceShaderBindingTableRecordOffset</name>:24</member>
+            <member optional="true"><type>VkGeometryInstanceFlagsKHR</type>              <name>flags</name>:8</member>
+            <member><type>uint64_t</type>                                                <name>accelerationStructureReference</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureMatrixMotionInstanceNV">
+            <comment>The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>VkTransformMatrixKHR</type>                                    <name>transformT0</name></member>
+            <member><type>VkTransformMatrixKHR</type>                                    <name>transformT1</name></member>
+            <member><type>uint32_t</type>                                                <name>instanceCustomIndex</name>:24</member>
+            <member><type>uint32_t</type>                                                <name>mask</name>:8</member>
+            <member><type>uint32_t</type>                                                <name>instanceShaderBindingTableRecordOffset</name>:24</member>
+            <member optional="true"><type>VkGeometryInstanceFlagsKHR</type>              <name>flags</name>:8</member>
+            <member><type>uint64_t</type>                                                <name>accelerationStructureReference</name></member>
+        </type>
+        <type category="union" name="VkAccelerationStructureMotionInstanceDataNV">
+            <member selection="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV"><type>VkAccelerationStructureInstanceKHR</type>            <name>staticInstance</name></member>
+            <member selection="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV"><type>VkAccelerationStructureMatrixMotionInstanceNV</type> <name>matrixMotionInstance</name></member>
+            <member selection="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV"><type>VkAccelerationStructureSRTMotionInstanceNV</type>    <name>srtMotionInstance</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureMotionInstanceNV">
+            <member><type>VkAccelerationStructureMotionInstanceTypeNV</type> <name>type</name></member>
+            <member optional="true"><type>VkAccelerationStructureMotionInstanceFlagsNV</type> <name>flags</name></member>
+            <member selector="type"><type>VkAccelerationStructureMotionInstanceDataNV</type> <name>data</name></member>
+        </type>
+        <type category="basetype">typedef <type>void</type>* <name>VkRemoteAddressNV</name>;</type>
+        <type category="struct" name="VkMemoryGetRemoteAddressInfoNV">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                     <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkImportMemoryBufferCollectionFUCHSIA" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBufferCollectionFUCHSIA</type>        <name>collection</name></member>
+            <member><type>uint32_t</type>                         <name>index</name></member>
+        </type>
+        <type category="struct" name="VkBufferCollectionImageCreateInfoFUCHSIA" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBufferCollectionFUCHSIA</type>        <name>collection</name></member>
+            <member><type>uint32_t</type>                         <name>index</name></member>
+        </type>
+        <type category="struct" name="VkBufferCollectionBufferCreateInfoFUCHSIA" structextends="VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkBufferCollectionFUCHSIA</type>        <name>collection</name></member>
+            <member><type>uint32_t</type>                         <name>index</name></member>
+        </type>
+        <type category="struct" name="VkBufferCollectionCreateInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>zx_handle_t</type>                      <name>collectionToken</name></member>
+        </type>
+        <type category="struct" name="VkBufferCollectionPropertiesFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>memoryTypeBits</name></member>
+            <member><type>uint32_t</type>                         <name>bufferCount</name></member>
+            <member><type>uint32_t</type>                         <name>createInfoIndex</name></member>
+            <member><type>uint64_t</type>                         <name>sysmemPixelFormat</name></member>
+            <member><type>VkFormatFeatureFlags</type>             <name>formatFeatures</name></member>
+            <member><type>VkSysmemColorSpaceFUCHSIA</type>        <name>sysmemColorSpaceIndex</name></member>
+            <member><type>VkComponentMapping</type>               <name>samplerYcbcrConversionComponents</name></member>
+            <member><type>VkSamplerYcbcrModelConversion</type>    <name>suggestedYcbcrModel</name></member>
+            <member><type>VkSamplerYcbcrRange</type>              <name>suggestedYcbcrRange</name></member>
+            <member><type>VkChromaLocation</type>                 <name>suggestedXChromaOffset</name></member>
+            <member><type>VkChromaLocation</type>                 <name>suggestedYChromaOffset</name></member>
+        </type>
+        <type category="struct" name="VkBufferConstraintsInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBufferCreateInfo</type>                        <name>createInfo</name></member>
+            <member optional="true"><type>VkFormatFeatureFlags</type>      <name>requiredFormatFeatures</name></member>
+            <member><type>VkBufferCollectionConstraintsInfoFUCHSIA</type>  <name>bufferCollectionConstraints</name></member>
+        </type>
+        <type category="struct" name="VkSysmemColorSpaceFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member><type>uint32_t</type>                        <name>colorSpace</name></member>
+        </type>
+        <type category="struct" name="VkImageFormatConstraintsInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkImageCreateInfo</type>                                      <name>imageCreateInfo</name></member>
+            <member><type>VkFormatFeatureFlags</type>                                   <name>requiredFormatFeatures</name></member>
+            <member optional="true"><type>VkImageFormatConstraintsFlagsFUCHSIA</type>   <name>flags</name></member>
+            <member optional="true"><type>uint64_t</type>                               <name>sysmemPixelFormat</name></member>
+            <member><type>uint32_t</type>                                               <name>colorSpaceCount</name></member>
+            <member len="colorSpaceCount">const <type>VkSysmemColorSpaceFUCHSIA</type>* <name>pColorSpaces</name></member>
+        </type>
+        <type category="struct" name="VkImageConstraintsInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                         <name>formatConstraintsCount</name></member>
+            <member len="formatConstraintsCount">const <type>VkImageFormatConstraintsInfoFUCHSIA</type>* <name>pFormatConstraints</name></member>
+            <member><type>VkBufferCollectionConstraintsInfoFUCHSIA</type>                         <name>bufferCollectionConstraints</name></member>
+            <member optional="true"><type>VkImageConstraintsInfoFlagsFUCHSIA</type>               <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkBufferCollectionConstraintsInfoFUCHSIA">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*     <name>pNext</name></member>
+            <member><type>uint32_t</type>                        <name>minBufferCount</name></member>
+            <member><type>uint32_t</type>                        <name>maxBufferCount</name></member>
+            <member><type>uint32_t</type>                        <name>minBufferCountForCamping</name></member>
+            <member><type>uint32_t</type>                        <name>minBufferCountForDedicatedSlack</name></member>
+            <member><type>uint32_t</type>                        <name>minBufferCountForSharedSlack</name></member>
+        </type>
+        <type category="handle" parent="VkDevice" objtypeenum="VK_OBJECT_TYPE_CUDA_MODULE_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkCudaModuleNV</name>)</type>
+        <type category="handle" parent="VkDevice" objtypeenum="VK_OBJECT_TYPE_CUDA_FUNCTION_NV"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkCudaFunctionNV</name>)</type>
+        <type category="struct" name="VkCudaModuleCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>size_t</type>                 <name>dataSize</name></member>
+            <member len="dataSize">const <type>void</type>*            <name>pData</name></member>
+        </type>
+        <type category="struct" name="VkCudaFunctionCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkCudaModuleNV</type>         <name>module</name></member>
+            <member len="null-terminated">const <type>char</type>*            <name>pName</name></member>
+        </type>
+        <type category="struct" name="VkCudaLaunchInfoNV">
+            <member values="VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkCudaFunctionNV</type>       <name>function</name></member>
+            <member><type>uint32_t</type>               <name>gridDimX</name></member>
+            <member><type>uint32_t</type>               <name>gridDimY</name></member>
+            <member><type>uint32_t</type>               <name>gridDimZ</name></member>
+            <member><type>uint32_t</type>               <name>blockDimX</name></member>
+            <member><type>uint32_t</type>               <name>blockDimY</name></member>
+            <member><type>uint32_t</type>               <name>blockDimZ</name></member>
+            <member><type>uint32_t</type>               <name>sharedMemBytes</name></member>
+            <member optional="true"><type>size_t</type>                 <name>paramCount</name></member>
+            <member optional="true" len="paramCount">const <type>void</type>* const *    <name>pParams</name></member>
+            <member optional="true"><type>size_t</type>                 <name>extraCount</name></member>
+            <member optional="true" len="extraCount">const <type>void</type>* const *    <name>pExtras</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>formatRgba10x6WithoutYCbCrSampler</name></member>
+        </type>
+        <type category="struct" name="VkFormatProperties3" returnedonly="true" structextends="VkFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags2</type>            <name>linearTilingFeatures</name></member>
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags2</type>            <name>optimalTilingFeatures</name></member>
+            <member optional="true" limittype="bitmask"><type>VkFormatFeatureFlags2</type>            <name>bufferFeatures</name></member>
+        </type>
+        <type category="struct" name="VkFormatProperties3KHR" alias="VkFormatProperties3"/>
+        <type category="struct" name="VkDrmFormatModifierPropertiesList2EXT" returnedonly="true" structextends="VkFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type> <name>drmFormatModifierCount</name></member>
+            <member optional="true" len="drmFormatModifierCount"><type>VkDrmFormatModifierProperties2EXT</type>* <name>pDrmFormatModifierProperties</name></member>
+        </type>
+        <type category="struct" name="VkDrmFormatModifierProperties2EXT" returnedonly="true">
+            <member><type>uint64_t</type> <name>drmFormatModifier</name></member>
+            <member><type>uint32_t</type> <name>drmFormatModifierPlaneCount</name></member>
+            <member><type>VkFormatFeatureFlags2</type> <name>drmFormatModifierTilingFeatures</name></member>
+        </type>
+        <type category="struct" name="VkAndroidHardwareBufferFormatProperties2ANDROID" structextends="VkAndroidHardwareBufferPropertiesANDROID" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkFormat</type>                           <name>format</name></member>
+            <member><type>uint64_t</type>                           <name>externalFormat</name></member>
+            <member><type>VkFormatFeatureFlags2</type>              <name>formatFeatures</name></member>
+            <member><type>VkComponentMapping</type>                 <name>samplerYcbcrConversionComponents</name></member>
+            <member><type>VkSamplerYcbcrModelConversion</type>      <name>suggestedYcbcrModel</name></member>
+            <member><type>VkSamplerYcbcrRange</type>                <name>suggestedYcbcrRange</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedXChromaOffset</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedYChromaOffset</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRenderingCreateInfo" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                                   <name>viewMask</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>colorAttachmentCount</name></member>
+            <member noautovalidity="true" len="colorAttachmentCount">const <type>VkFormat</type>*           <name>pColorAttachmentFormats</name></member>
+            <member noautovalidity="true"><type>VkFormat</type>                                             <name>depthAttachmentFormat</name></member>
+            <member noautovalidity="true"><type>VkFormat</type>                                             <name>stencilAttachmentFormat</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRenderingCreateInfoKHR" alias="VkPipelineRenderingCreateInfo"/>
+        <type category="struct" name="VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_INFO"><type>VkStructureType</type>                  <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>VkRenderingFlags</type>                                           <name>flags</name></member>
+            <member><type>VkRect2D</type>                                                                   <name>renderArea</name></member>
+            <member><type>uint32_t</type>                                                                   <name>layerCount</name></member>
+            <member><type>uint32_t</type>                                                                   <name>viewMask</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>colorAttachmentCount</name></member>
+            <member len="colorAttachmentCount">const <type>VkRenderingAttachmentInfo</type>*                <name>pColorAttachments</name></member>
+            <member optional="true">const <type>VkRenderingAttachmentInfo</type>*                           <name>pDepthAttachment</name></member>
+            <member optional="true">const <type>VkRenderingAttachmentInfo</type>*                           <name>pStencilAttachment</name></member>
+        </type>
+        <type category="struct" name="VkRenderingInfoKHR" alias="VkRenderingInfo"/>
+        <type category="struct" name="VkRenderingAttachmentInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO"><type>VkStructureType</type>       <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>VkImageView</type>                                                <name>imageView</name></member>
+            <member><type>VkImageLayout</type>                                                              <name>imageLayout</name></member>
+            <member optional="true"><type>VkResolveModeFlagBits</type>                                      <name>resolveMode</name></member>
+            <member optional="true"><type>VkImageView</type>                                                <name>resolveImageView</name></member>
+            <member><type>VkImageLayout</type>                                                              <name>resolveImageLayout</name></member>
+            <member><type>VkAttachmentLoadOp</type>                                                         <name>loadOp</name></member>
+            <member><type>VkAttachmentStoreOp</type>                                                        <name>storeOp</name></member>
+            <member><type>VkClearValue</type>                                                               <name>clearValue</name></member>
+        </type>
+        <type category="struct" name="VkRenderingAttachmentInfoKHR" alias="VkRenderingAttachmentInfo"/>
+        <type category="struct" name="VkRenderingFragmentShadingRateAttachmentInfoKHR" structextends="VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member  optional="true">const <type>void</type>*                                               <name>pNext</name></member>
+            <member optional="true"><type>VkImageView</type>                                                <name>imageView</name></member>
+            <member><type>VkImageLayout</type>                                                              <name>imageLayout</name></member>
+            <member><type>VkExtent2D</type>                                                                 <name>shadingRateAttachmentTexelSize</name></member>
+        </type>
+        <type category="struct" name="VkRenderingFragmentDensityMapAttachmentInfoEXT" structextends="VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member><type>VkImageView</type>                                                                <name>imageView</name></member>
+            <member><type>VkImageLayout</type>                                                              <name>imageLayout</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDynamicRenderingFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                   <name>dynamicRendering</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDynamicRenderingFeaturesKHR" alias="VkPhysicalDeviceDynamicRenderingFeatures"/>
+        <type category="struct" name="VkCommandBufferInheritanceRenderingInfo" structextends="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>VkRenderingFlags</type>                                           <name>flags</name></member>
+            <member><type>uint32_t</type>                                                                   <name>viewMask</name></member>
+            <member api="vulkan" optional="true"><type>uint32_t</type>                                      <name>colorAttachmentCount</name></member>
+            <member api="vulkansc"><type>uint32_t</type>                                                    <name>colorAttachmentCount</name></member>
+            <member len="colorAttachmentCount">const <type>VkFormat</type>*                                 <name>pColorAttachmentFormats</name></member>
+            <member><type>VkFormat</type>                                                                   <name>depthAttachmentFormat</name></member>
+            <member><type>VkFormat</type>                                                                   <name>stencilAttachmentFormat</name></member>
+            <member optional="true"><type>VkSampleCountFlagBits</type>                                      <name>rasterizationSamples</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceRenderingInfoKHR" alias="VkCommandBufferInheritanceRenderingInfo"/>
+        <type category="struct" name="VkAttachmentSampleCountInfoAMD" structextends="VkCommandBufferInheritanceInfo,VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>colorAttachmentCount</name></member>
+            <member noautovalidity="true" len="colorAttachmentCount">const <type>VkSampleCountFlagBits</type>* <name>pColorAttachmentSamples</name></member>
+            <member noautovalidity="true" optional="true"><type>VkSampleCountFlagBits</type>                <name>depthStencilAttachmentSamples</name></member>
+        </type>
+        <type category="struct" name="VkAttachmentSampleCountInfoNV" alias="VkAttachmentSampleCountInfoAMD"/>
+        <type category="struct" name="VkMultiviewPerViewAttributesInfoNVX" structextends="VkCommandBufferInheritanceInfo,VkGraphicsPipelineCreateInfo,VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                               <name>perViewAttributes</name></member>
+            <member><type>VkBool32</type>                               <name>perViewAttributesPositionXOnly</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageViewMinLodFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>minLod</name></member>
+        </type>
+        <type category="struct" name="VkImageViewMinLodCreateInfoEXT" structextends="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>float</type>                       <name>minLod</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>rasterizationOrderColorAttachmentAccess</name></member>
+            <member><type>VkBool32</type>                         <name>rasterizationOrderDepthAttachmentAccess</name></member>
+            <member><type>VkBool32</type>                         <name>rasterizationOrderStencilAttachmentAccess</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM" alias="VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"/>
+        <type category="struct" name="VkPhysicalDeviceLinearColorAttachmentFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>linearColorAttachment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>graphicsPipelineLibrary</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>graphicsPipelineLibraryFastLinking</name></member>
+            <member limittype="bitmask"><type>VkBool32</type>                     <name>graphicsPipelineLibraryIndependentInterpolationDecoration</name></member>
+        </type>
+        <type category="struct" name="VkGraphicsPipelineLibraryCreateInfoEXT" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*       <name>pNext</name></member>
+            <member><type>VkGraphicsPipelineLibraryFlagsEXT</type> <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                           <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                              <name>descriptorSetHostMapping</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetBindingReferenceVALVE">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                       <name>pNext</name></member>
+            <member><type>VkDescriptorSetLayout</type>                                                             <name>descriptorSetLayout</name></member>
+            <member><type>uint32_t</type>                                                                          <name>binding</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorSetLayoutHostMappingInfoVALVE">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                                                    <name>pNext</name></member>
+            <member><type>size_t</type>                                                                                   <name>descriptorOffset</name></member>
+            <member><type>uint32_t</type>                                                                                 <name>descriptorSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceNestedCommandBufferFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>nestedCommandBuffer</name></member>
+            <member><type>VkBool32</type>                                        <name>nestedCommandBufferRendering</name></member>
+            <member><type>VkBool32</type>                                        <name>nestedCommandBufferSimultaneousUse</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceNestedCommandBufferPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                           <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                        <name>maxCommandBufferNestingLevel</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                         <name>shaderModuleIdentifier</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="noauto"><type>uint8_t</type> <name>shaderModuleIdentifierAlgorithmUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkPipelineShaderStageModuleIdentifierCreateInfoEXT" structextends="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>            <name>identifierSize</name></member>
+            <member len="identifierSize">const <type>uint8_t</type>* <name>pIdentifier</name></member>
+        </type>
+        <type category="struct" name="VkShaderModuleIdentifierEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*          <name>pNext</name></member>
+            <member noautovalidity="true"><type>uint32_t</type> <name>identifierSize</name></member>
+            <member><type>uint8_t</type>                        <name>identifier</name>[<enum>VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT</enum>]</member>
+        </type>
+        <type category="struct" name="VkImageCompressionControlEXT" structextends="VkImageCreateInfo,VkSwapchainCreateInfoKHR,VkPhysicalDeviceImageFormatInfo2">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkImageCompressionFlagsEXT</type>   <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>             <name>compressionControlPlaneCount</name></member>
+            <member noautovalidity="true" len="compressionControlPlaneCount"><type>VkImageCompressionFixedRateFlagsEXT</type>* <name>pFixedRateFlags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageCompressionControlFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                             <name>imageCompressionControl</name></member>
+        </type>
+        <type category="struct" name="VkImageCompressionPropertiesEXT" structextends="VkImageFormatProperties2,VkSurfaceFormat2KHR,VkSubresourceLayout2KHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                <name>pNext</name></member>
+            <member><type>VkImageCompressionFlagsEXT</type>           <name>imageCompressionFlags</name></member>
+            <member><type>VkImageCompressionFixedRateFlagsEXT</type>  <name>imageCompressionFixedRateFlags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                             <name>imageCompressionControlSwapchain</name></member>
+        </type>
+        <type category="struct" name="VkImageSubresource2KHR">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkImageSubresource</type>     <name>imageSubresource</name></member>
+        </type>
+        <type category="struct" name="VkImageSubresource2EXT" alias="VkImageSubresource2KHR"/>
+        <type category="struct" name="VkSubresourceLayout2KHR"  returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkSubresourceLayout</type>    <name>subresourceLayout</name></member>
+        </type>
+        <type category="struct" name="VkSubresourceLayout2EXT" alias="VkSubresourceLayout2KHR"/>
+        <type category="struct" name="VkRenderPassCreationControlEXT" structextends="VkRenderPassCreateInfo2,VkSubpassDescription2">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                 <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                    <name>disallowMerging</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassCreationFeedbackInfoEXT" returnedonly="true">
+            <member><type>uint32_t</type>                                                                          <name>postMergeSubpassCount</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassCreationFeedbackCreateInfoEXT" structextends="VkRenderPassCreateInfo2">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                              <name>pNext</name></member>
+            <member><type>VkRenderPassCreationFeedbackInfoEXT</type>*                                                     <name>pRenderPassFeedback</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassSubpassFeedbackInfoEXT" returnedonly="true">
+            <member><type>VkSubpassMergeStatusEXT</type>                                                          <name>subpassMergeStatus</name></member>
+            <member><type>char</type>                                                                             <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member>
+            <member><type>uint32_t</type>                                                                         <name>postMergeIndex</name></member>
+        </type>
+        <type category="struct" name="VkRenderPassSubpassFeedbackCreateInfoEXT" structextends="VkSubpassDescription2">
+            <member values="VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT"><type>VkStructureType</type>     <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                                 <name>pNext</name></member>
+            <member><type>VkRenderPassSubpassFeedbackInfoEXT</type>*                                                         <name>pSubpassFeedback</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                    <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                       <name>subpassMergeFeedback</name></member>
+        </type>
+        <type category="struct" name="VkMicromapBuildInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                        <name>pNext</name></member>
+            <member><type>VkMicromapTypeEXT</type>                                     <name>type</name></member>
+            <member optional="true"><type>VkBuildMicromapFlagsEXT</type>               <name>flags</name></member>
+            <member noautovalidity="true"><type>VkBuildMicromapModeEXT</type>          <name>mode</name></member>
+            <member optional="true" noautovalidity="true"><type>VkMicromapEXT</type>                   <name>dstMicromap</name></member>
+            <member optional="true"><type>uint32_t</type>                                           <name>usageCountsCount</name></member>
+            <member len="usageCountsCount" optional="true">const <type>VkMicromapUsageEXT</type>*    <name>pUsageCounts</name></member>
+            <member len="usageCountsCount,1" optional="true,false">const <type>VkMicromapUsageEXT</type>* const*   <name>ppUsageCounts</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                               <name>data</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressKHR</type>                                    <name>scratchData</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                               <name>triangleArray</name></member>
+            <member><type>VkDeviceSize</type>                                                                      <name>triangleArrayStride</name></member>
+        </type>
+        <type category="struct" name="VkMicromapCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                             <name>pNext</name></member>
+            <member optional="true"><type>VkMicromapCreateFlagsEXT</type>   <name>createFlags</name></member>
+            <member><type>VkBuffer</type>                                                <name>buffer</name></member>
+            <member><type>VkDeviceSize</type>                                            <name>offset</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>                                            <name>size</name></member>
+            <member><type>VkMicromapTypeEXT</type>                          <name>type</name></member>
+            <member optional="true"><type>VkDeviceAddress</type>                         <name>deviceAddress</name></member>
+        </type>
+        <type category="struct" name="VkMicromapVersionInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member len="latexmath:[2 \times \mathtt{VK\_UUID\_SIZE}]" altlen="2*VK_UUID_SIZE">const <type>uint8_t</type>*                    <name>pVersionData</name></member>
+        </type>
+        <type category="struct" name="VkCopyMicromapInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkMicromapEXT</type>                             <name>src</name></member>
+            <member><type>VkMicromapEXT</type>                             <name>dst</name></member>
+            <member><type>VkCopyMicromapModeEXT</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkCopyMicromapToMemoryInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member><type>VkMicromapEXT</type>                             <name>src</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressKHR</type>                               <name>dst</name></member>
+            <member><type>VkCopyMicromapModeEXT</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkCopyMemoryToMicromapInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>                          <name>src</name></member>
+            <member><type>VkMicromapEXT</type>                             <name>dst</name></member>
+            <member><type>VkCopyMicromapModeEXT</type>                     <name>mode</name></member>
+        </type>
+        <type category="struct" name="VkMicromapBuildSizesInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>micromapSize</name></member>
+            <member><type>VkDeviceSize</type>                       <name>buildScratchSize</name></member>
+            <member><type>VkBool32</type>                           <name>discardable</name></member>
+        </type>
+        <type category="struct" name="VkMicromapUsageEXT">
+            <member><type>uint32_t</type>                                               <name>count</name></member>
+            <member><type>uint32_t</type>                                               <name>subdivisionLevel</name></member>
+            <member><type>uint32_t</type>                                               <name>format</name><comment>Interpretation depends on parent type</comment></member>
+        </type>
+        <type category="struct" name="VkMicromapTriangleEXT">
+            <member><type>uint32_t</type>                                               <name>dataOffset</name><comment>Specified in bytes</comment></member>
+            <member><type>uint16_t</type>                                               <name>subdivisionLevel</name></member>
+            <member><type>uint16_t</type>                                               <name>format</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceOpacityMicromapFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>micromap</name></member>
+            <member><type>VkBool32</type>                         <name>micromapCaptureReplay</name></member>
+            <member><type>VkBool32</type>                         <name>micromapHostCommands</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceOpacityMicromapPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxOpacity2StateSubdivisionLevel</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxOpacity4StateSubdivisionLevel</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureTrianglesOpacityMicromapEXT" structextends="VkAccelerationStructureGeometryTrianglesDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                  <name>pNext</name></member>
+            <member><type>VkIndexType</type>                                            <name>indexType</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>    <name>indexBuffer</name></member>
+            <member><type>VkDeviceSize</type>                                           <name>indexStride</name></member>
+            <member><type>uint32_t</type>                                               <name>baseTriangle</name></member>
+            <member optional="true"><type>uint32_t</type>                               <name>usageCountsCount</name></member>
+            <member len="usageCountsCount" optional="true">const <type>VkMicromapUsageEXT</type>*  <name>pUsageCounts</name></member>
+            <member len="usageCountsCount,1" optional="true,false">const <type>VkMicromapUsageEXT</type>* const* <name>ppUsageCounts</name></member>
+            <member optional="true"><type>VkMicromapEXT</type>                          <name>micromap</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDisplacementMicromapFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>displacementMicromap</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDisplacementMicromapPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxDisplacementMicromapSubdivisionLevel</name></member>
+        </type>
+        <type category="struct" name="VkAccelerationStructureTrianglesDisplacementMicromapNV" structextends="VkAccelerationStructureGeometryTrianglesDataKHR">
+            <member values="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                  <name>pNext</name></member>
+
+            <member><type>VkFormat</type>                                               <name>displacementBiasAndScaleFormat</name></member>
+            <member><type>VkFormat</type>                                               <name>displacementVectorFormat</name></member>
+
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>    <name>displacementBiasAndScaleBuffer</name></member>
+            <member><type>VkDeviceSize</type>                                           <name>displacementBiasAndScaleStride</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>    <name>displacementVectorBuffer</name></member>
+            <member><type>VkDeviceSize</type>                                           <name>displacementVectorStride</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>    <name>displacedMicromapPrimitiveFlags</name></member>
+            <member><type>VkDeviceSize</type>                                           <name>displacedMicromapPrimitiveFlagsStride</name></member>
+            <member><type>VkIndexType</type>                                            <name>indexType</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstKHR</type>    <name>indexBuffer</name></member>
+            <member><type>VkDeviceSize</type>                                           <name>indexStride</name></member>
+
+            <member><type>uint32_t</type>                                               <name>baseTriangle</name></member>
+
+            <member optional="true"><type>uint32_t</type>                                                          <name>usageCountsCount</name></member>
+            <member len="usageCountsCount" optional="true">const <type>VkMicromapUsageEXT</type>*                  <name>pUsageCounts</name></member>
+            <member len="usageCountsCount,1" optional="true,false">const <type>VkMicromapUsageEXT</type>* const*   <name>ppUsageCounts</name></member>
+
+            <member optional="true"><type>VkMicromapEXT</type>                          <name>micromap</name></member>
+        </type>
+        <type category="struct" name="VkPipelinePropertiesIdentifierEXT">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>uint8_t</type>                            <name>pipelineIdentifier</name>[<enum>VK_UUID_SIZE</enum>]</member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelinePropertiesFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>pipelinePropertiesIdentifier</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>shaderEarlyAndLateFragmentTests</name></member>
+        </type>
+        <type category="struct" name="VkExternalMemoryAcquireUnmodifiedEXT" structextends="VkBufferMemoryBarrier,VkBufferMemoryBarrier2,VkImageMemoryBarrier,VkImageMemoryBarrier2">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>acquireUnmodifiedMemory</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalObjectCreateInfoEXT" structextends="VkInstanceCreateInfo,VkMemoryAllocateInfo,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferViewCreateInfo,VkSemaphoreCreateInfo,VkEventCreateInfo" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkExportMetalObjectTypeFlagBitsEXT</type>  <name>exportObjectType</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalObjectsInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalDeviceInfoEXT" structextends="VkExportMetalObjectsInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>MTLDevice_id</type>                               <name>mtlDevice</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalCommandQueueInfoEXT" structextends="VkExportMetalObjectsInfoEXT" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>VkQueue</type>                                    <name>queue</name></member>
+            <member><type>MTLCommandQueue_id</type>                         <name>mtlCommandQueue</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalBufferInfoEXT" structextends="VkExportMetalObjectsInfoEXT" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>VkDeviceMemory</type>                             <name>memory</name></member>
+            <member><type>MTLBuffer_id</type>                               <name>mtlBuffer</name></member>
+        </type>
+        <type category="struct" name="VkImportMetalBufferInfoEXT" structextends="VkMemoryAllocateInfo" allowduplicate="false">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>MTLBuffer_id</type>                               <name>mtlBuffer</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalTextureInfoEXT" structextends="VkExportMetalObjectsInfoEXT" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkImage</type>                    <name>image</name></member>
+            <member optional="true"><type>VkImageView</type>                <name>imageView</name></member>
+            <member optional="true"><type>VkBufferView</type>               <name>bufferView</name></member>
+            <member><type>VkImageAspectFlagBits</type>                      <name>plane</name></member>
+            <member><type>MTLTexture_id</type>                              <name>mtlTexture</name></member>
+        </type>
+        <type category="struct" name="VkImportMetalTextureInfoEXT" structextends="VkImageCreateInfo" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>VkImageAspectFlagBits</type>                      <name>plane</name></member>
+            <member><type>MTLTexture_id</type>                              <name>mtlTexture</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalIOSurfaceInfoEXT" structextends="VkExportMetalObjectsInfoEXT" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>VkImage</type>                                    <name>image</name></member>
+            <member><type>IOSurfaceRef</type>                               <name>ioSurface</name></member>
+        </type>
+        <type category="struct" name="VkImportMetalIOSurfaceInfoEXT" structextends="VkImageCreateInfo" allowduplicate="false">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>IOSurfaceRef</type>               <name>ioSurface</name></member>
+        </type>
+        <type category="struct" name="VkExportMetalSharedEventInfoEXT" structextends="VkExportMetalObjectsInfoEXT" allowduplicate="true">
+            <member values="VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member optional="true"><type>VkSemaphore</type>                <name>semaphore</name></member>
+            <member optional="true"><type>VkEvent</type>                    <name>event</name></member>
+            <member><type>MTLSharedEvent_id</type>                          <name>mtlSharedEvent</name></member>
+        </type>
+        <type category="struct" name="VkImportMetalSharedEventInfoEXT" structextends="VkSemaphoreCreateInfo,VkEventCreateInfo" allowduplicate="false">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                <name>pNext</name></member>
+            <member><type>MTLSharedEvent_id</type>                          <name>mtlSharedEvent</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                   <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                      <name>nonSeamlessCubeMap</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineRobustnessFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                                       <name>pipelineRobustness</name></member>
+        </type>
+        <type category="struct" name="VkPipelineRobustnessCreateInfoEXT" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo,VkPipelineShaderStageCreateInfo,VkRayTracingPipelineCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>storageBuffers</name></member>
+            <member><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>uniformBuffers</name></member>
+            <member><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>vertexInputs</name></member>
+            <member><type>VkPipelineRobustnessImageBehaviorEXT</type>    <name>images</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineRobustnessPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="exact"><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>defaultRobustnessStorageBuffers</name></member>
+            <member limittype="exact"><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>defaultRobustnessUniformBuffers</name></member>
+            <member limittype="exact"><type>VkPipelineRobustnessBufferBehaviorEXT</type>   <name>defaultRobustnessVertexInputs</name></member>
+            <member limittype="exact"><type>VkPipelineRobustnessImageBehaviorEXT</type>    <name>defaultRobustnessImages</name></member>
+        </type>
+        <type category="struct" name="VkImageViewSampleWeightCreateInfoQCOM" structextends="VkImageViewCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*       <name>pNext</name></member>
+            <member><type>VkOffset2D</type>                        <name>filterCenter</name></member>
+            <member><type>VkExtent2D</type>                        <name>filterSize</name></member>
+            <member><type>uint32_t</type>                          <name>numPhases</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageProcessingFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>textureSampleWeighted</name></member>
+            <member><type>VkBool32</type>                           <name>textureBoxFilter</name></member>
+            <member><type>VkBool32</type>                           <name>textureBlockMatch</name></member>
+         </type>
+        <type category="struct" name="VkPhysicalDeviceImageProcessingPropertiesQCOM" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member limittype="max" optional="true"><type>uint32_t</type>         <name>maxWeightFilterPhases</name></member>
+            <member limittype="max" optional="true"><type>VkExtent2D</type>       <name>maxWeightFilterDimension</name></member>
+            <member limittype="max" optional="true"><type>VkExtent2D</type>       <name>maxBlockMatchRegion</name></member>
+            <member limittype="max" optional="true"><type>VkExtent2D</type>       <name>maxBoxFilterBlockSize</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceTilePropertiesFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>tileProperties</name></member>
+        </type>
+        <type category="struct" name="VkTilePropertiesQCOM">
+            <member values="VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkExtent3D</type>                       <name>tileSize</name></member>
+            <member><type>VkExtent2D</type>                       <name>apronSize</name></member>
+            <member><type>VkOffset2D</type>                       <name>origin</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAmigoProfilingFeaturesSEC" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>amigoProfiling</name></member>
+        </type>
+        <type category="struct" name="VkAmigoProfilingSubmitInfoSEC" structextends="VkSubmitInfo">
+            <member values="VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>uint64_t</type>                         <name>firstDrawTimestamp</name></member>
+            <member><type>uint64_t</type>                         <name>swapBufferTimestamp</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>attachmentFeedbackLoopLayout</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDepthClampZeroOneFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>depthClampZeroOne</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceAddressBindingReportFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>reportAddressBinding</name></member>
+        </type>
+        <type category="struct" name="VkDeviceAddressBindingCallbackDataEXT" structextends="VkDebugUtilsMessengerCallbackDataEXT">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member optional="true"><type>VkDeviceAddressBindingFlagsEXT</type>     <name>flags</name></member>
+            <member><type>VkDeviceAddress</type>                    <name>baseAddress</name></member>
+            <member><type>VkDeviceSize</type>                       <name>size</name></member>
+            <member><type>VkDeviceAddressBindingTypeEXT</type>      <name>bindingType</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceOpticalFlowFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>opticalFlow</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceOpticalFlowPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkOpticalFlowGridSizeFlagsNV</type> <name>supportedOutputGridSizes</name></member>
+            <member limittype="bitmask"><type>VkOpticalFlowGridSizeFlagsNV</type> <name>supportedHintGridSizes</name></member>
+            <member limittype="noauto"><type>VkBool32</type> <name>hintSupported</name></member>
+            <member limittype="noauto"><type>VkBool32</type> <name>costSupported</name></member>
+            <member limittype="noauto"><type>VkBool32</type> <name>bidirectionalFlowSupported</name></member>
+            <member limittype="noauto"><type>VkBool32</type> <name>globalFlowSupported</name></member>
+            <member limittype="noauto"><type>uint32_t</type>  <name>minWidth</name></member>
+            <member limittype="noauto"><type>uint32_t</type>  <name>minHeight</name></member>
+            <member limittype="noauto"><type>uint32_t</type>  <name>maxWidth</name></member>
+            <member limittype="noauto"><type>uint32_t</type>  <name>maxHeight</name></member>
+            <member limittype="noauto"><type>uint32_t</type>  <name>maxNumRegionsOfInterest</name></member>
+        </type>
+        <type category="struct" name="VkOpticalFlowImageFormatInfoNV" structextends="VkPhysicalDeviceImageFormatInfo2,VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*  <name>pNext</name></member>
+            <member><type>VkOpticalFlowUsageFlagsNV</type> <name>usage</name></member>
+        </type>
+        <type category="struct" name="VkOpticalFlowImageFormatPropertiesNV" returnedonly="true" >
+            <member values="VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*  <name>pNext</name></member>
+            <member><type>VkFormat</type> <name>format</name></member>
+        </type>
+        <type category="struct" name="VkOpticalFlowSessionCreateInfoNV">
+            <member values="VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                              <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                           <name>width</name></member>
+            <member><type>uint32_t</type>                                                           <name>height</name></member>
+            <member><type>VkFormat</type>                                                           <name>imageFormat</name></member>
+            <member><type>VkFormat</type>                                                           <name>flowVectorFormat</name></member>
+            <member optional="true"><type>VkFormat</type>                                           <name>costFormat</name></member>
+            <member><type>VkOpticalFlowGridSizeFlagsNV</type>                                       <name>outputGridSize</name></member>
+            <member optional="true"><type>VkOpticalFlowGridSizeFlagsNV</type>                       <name>hintGridSize</name></member>
+            <member optional="true"><type>VkOpticalFlowPerformanceLevelNV</type>                    <name>performanceLevel</name></member>
+            <member optional="true"><type>VkOpticalFlowSessionCreateFlagsNV</type>                  <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkOpticalFlowSessionCreatePrivateDataInfoNV" structextends="VkOpticalFlowSessionCreateInfoNV"><comment>NV internal use only</comment>
+            <member values="VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                              <name>pNext</name></member>
+            <member><type>uint32_t</type>                                                           <name>id</name></member>
+            <member><type>uint32_t</type>                                                           <name>size</name></member>
+            <member>const <type>void</type>*                                                        <name>pPrivateData</name></member>
+        </type>
+        <type category="struct" name="VkOpticalFlowExecuteInfoNV">
+            <member values="VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>* <name>pNext</name></member>
+            <member optional="true"><type>VkOpticalFlowExecuteFlagsNV</type>        <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>                           <name>regionCount</name></member>
+            <member len="regionCount">const <type>VkRect2D</type>*                  <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFaultFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>deviceFault</name></member>
+            <member><type>VkBool32</type>                            <name>deviceFaultVendorBinary</name></member>
+        </type>
+        <type category="struct" name="VkDeviceFaultAddressInfoEXT">
+            <member><type>VkDeviceFaultAddressTypeEXT</type>         <name>addressType</name></member>
+            <member><type>VkDeviceAddress</type>                     <name>reportedAddress</name></member>
+            <member><type>VkDeviceSize</type>                        <name>addressPrecision</name></member>
+        </type>
+        <type category="struct" name="VkDeviceFaultVendorInfoEXT">
+            <member noautovalidity="true"><type>char</type>          <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member>
+            <member><type>uint64_t</type>                            <name>vendorFaultCode</name></member>
+            <member><type>uint64_t</type>                            <name>vendorFaultData</name></member>
+        </type>
+        <type category="struct" name="VkDeviceFaultCountsEXT">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                            <name>addressInfoCount</name></member>
+            <member optional="true"><type>uint32_t</type>                            <name>vendorInfoCount</name></member>
+            <member optional="true"><type>VkDeviceSize</type>                        <name>vendorBinarySize</name><comment>Specified in bytes</comment></member>
+        </type>
+        <type category="struct" name="VkDeviceFaultInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member noautovalidity="true"><type>char</type>          <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member>
+            <member optional="true"><type>VkDeviceFaultAddressInfoEXT</type>* <name>pAddressInfos</name></member>
+            <member optional="true"><type>VkDeviceFaultVendorInfoEXT</type>*  <name>pVendorInfos</name></member>
+            <member optional="true"><type>void</type>*                        <name>pVendorBinaryData</name></member>
+        </type>
+        <type category="struct" name="VkDeviceFaultVendorBinaryHeaderVersionOneEXT">
+            <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment>
+            <member><type>uint32_t</type>               <name>headerSize</name></member>
+            <member><type>VkDeviceFaultVendorBinaryHeaderVersionEXT</type> <name>headerVersion</name></member>
+            <member><type>uint32_t</type>               <name>vendorID</name></member>
+            <member><type>uint32_t</type>               <name>deviceID</name></member>
+            <member><type>uint32_t</type>               <name>driverVersion</name></member>
+            <member><type>uint8_t</type>                <name>pipelineCacheUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member><type>uint32_t</type>               <name>applicationNameOffset</name></member>
+            <member><type>uint32_t</type>               <name>applicationVersion</name></member>
+            <member><type>uint32_t</type>               <name>engineNameOffset</name></member>
+            <member><type>uint32_t</type>               <name>engineVersion</name></member>
+            <member><type>uint32_t</type>               <name>apiVersion</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                            <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                               <name>pipelineLibraryGroupHandles</name></member>
+        </type>
+        <type category="struct" name="VkDepthBiasInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>float</type>                              <name>depthBiasConstantFactor</name></member>
+            <member><type>float</type>                              <name>depthBiasClamp</name></member>
+            <member><type>float</type>                              <name>depthBiasSlopeFactor</name></member>
+        </type>
+        <type category="struct" name="VkDepthBiasRepresentationInfoEXT" structextends="VkDepthBiasInfoEXT,VkPipelineRasterizationStateCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>VkDepthBiasRepresentationEXT</type>       <name>depthBiasRepresentation</name></member>
+            <member><type>VkBool32</type>                           <name>depthBiasExact</name></member>
+        </type>
+        <type category="struct" name="VkDecompressMemoryRegionNV">
+            <member><type>VkDeviceAddress</type>   <name>srcAddress</name></member>
+            <member><type>VkDeviceAddress</type>   <name>dstAddress</name></member>
+            <member><type>VkDeviceSize</type>      <name>compressedSize</name><comment>Specified in bytes</comment></member>
+            <member><type>VkDeviceSize</type>      <name>decompressedSize</name><comment>Specified in bytes</comment></member>
+            <member><type>VkMemoryDecompressionMethodFlagsNV</type> <name>decompressionMethod</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="bitmask"><type>uint64_t</type>                   <name>shaderCoreMask</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>shaderCoreCount</name></member>
+            <member limittype="max"><type>uint32_t</type>                       <name>shaderWarpsPerCore</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                 <name>shaderCoreBuiltins</name></member>
+        </type>
+        <type category="struct" name="VkFrameBoundaryEXT" structextends="VkSubmitInfo,VkSubmitInfo2,VkPresentInfoKHR,VkBindSparseInfo">
+            <member values="VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member optional="true"><type>VkFrameBoundaryFlagsEXT</type>            <name>flags</name></member>
+            <member><type>uint64_t</type>                                           <name>frameID</name></member>
+            <member optional="true"><type>uint32_t</type>                           <name>imageCount</name></member>
+            <member optional="true" len="imageCount">const <type>VkImage</type>*    <name>pImages</name></member>
+            <member optional="true"><type>uint32_t</type>                           <name>bufferCount</name></member>
+            <member optional="true" len="bufferCount">const <type>VkBuffer</type>*  <name>pBuffers</name></member>
+            <member optional="true"><type>uint64_t</type>                           <name>tagName</name></member>
+            <member optional="true"><type>size_t</type>                             <name>tagSize</name></member>
+            <member optional="true" len="tagSize">const <type>void</type>*          <name>pTag</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceFrameBoundaryFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                 <name>frameBoundary</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                 <name>dynamicRenderingUnusedAttachments</name></member>
+        </type>
+        <type category="struct" name="VkSurfacePresentModeEXT" structextends="VkPhysicalDeviceSurfaceInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkPresentModeKHR</type>                    <name>presentMode</name></member>
+        </type>
+        <type category="struct" name="VkSurfacePresentScalingCapabilitiesEXT" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                    <name>pNext</name></member>
+            <member optional="true"><type>VkPresentScalingFlagsEXT</type> <name>supportedPresentScaling</name></member>
+            <member optional="true"><type>VkPresentGravityFlagsEXT</type> <name>supportedPresentGravityX</name></member>
+            <member optional="true"><type>VkPresentGravityFlagsEXT</type> <name>supportedPresentGravityY</name></member>
+            <member optional="true"><type>VkExtent2D</type>               <name>minScaledImageExtent</name><comment>Supported minimum image width and height for the surface when scaling is used</comment></member>
+            <member optional="true"><type>VkExtent2D</type>               <name>maxScaledImageExtent</name><comment>Supported maximum image width and height for the surface when scaling is used</comment></member>
+        </type>
+        <type category="struct" name="VkSurfacePresentModeCompatibilityEXT" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                                    <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                 <name>presentModeCount</name></member>
+            <member optional="true" len="presentModeCount"><type>VkPresentModeKHR</type>* <name>pPresentModes</name><comment>Output list of present modes compatible with the one specified in VkSurfacePresentModeEXT</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>swapchainMaintenance1</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainPresentFenceInfoEXT" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
+            <member len="swapchainCount">const <type>VkFence</type>* <name>pFences</name><comment>Fence to signal for each swapchain</comment></member>
+        </type>
+        <type category="struct" name="VkSwapchainPresentModesCreateInfoEXT" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>presentModeCount</name></member><comment>Length of the pPresentModes array</comment>
+            <member len="presentModeCount">const <type>VkPresentModeKHR</type>* <name>pPresentModes</name></member><comment>Presentation modes which will be usable with this swapchain</comment>
+        </type>
+        <type category="struct" name="VkSwapchainPresentModeInfoEXT" structextends="VkPresentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*         <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
+            <member len="swapchainCount">const <type>VkPresentModeKHR</type>* <name>pPresentModes</name><comment>Presentation mode for each swapchain</comment></member>
+        </type>
+        <type category="struct" name="VkSwapchainPresentScalingCreateInfoEXT" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                 <name>pNext</name></member>
+            <member optional="true"><type>VkPresentScalingFlagsEXT</type>    <name>scalingBehavior</name></member>
+            <member optional="true"><type>VkPresentGravityFlagsEXT</type>    <name>presentGravityX</name></member>
+            <member optional="true"><type>VkPresentGravityFlagsEXT</type>    <name>presentGravityY</name></member>
+        </type>
+        <type category="struct" name="VkReleaseSwapchainImagesInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                 <name>pNext</name></member>
+            <member externsync="true"><type>VkSwapchainKHR</type>            <name>swapchain</name><comment>Swapchain for which images are being released</comment></member>
+            <member><type>uint32_t</type>                                    <name>imageIndexCount</name><comment>Number of indices to release</comment></member>
+            <member len="imageIndexCount">const <type>uint32_t</type>*       <name>pImageIndices</name><comment>Indices of which presentable images to release</comment></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDepthBiasControlFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>depthBiasControl</name></member>
+            <member><type>VkBool32</type>                           <name>leastRepresentableValueForceUnormRepresentation</name></member>
+            <member><type>VkBool32</type>                           <name>floatRepresentation</name></member>
+            <member><type>VkBool32</type>                           <name>depthBiasExact</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                                         <name>rayTracingInvocationReorder</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member>
+            <member limittype="noauto"><type>VkRayTracingInvocationReorderModeNV</type>                                    <name>rayTracingInvocationReorderReorderingHint</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*  <name>pNext</name></member>
+            <member><type>VkBool32</type>                                     <name>extendedSparseAddressSpace</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                        <name>pNext</name></member>
+            <member limittype="max"><type>VkDeviceSize</type>                 <name>extendedSparseAddressSpaceSize</name><comment>Total address space available for extended sparse allocations (bytes)</comment></member>
+            <member limittype="bitmask"><type>VkImageUsageFlags</type>        <name>extendedSparseImageUsageFlags</name><comment>Bitfield of which image usages are supported for extended sparse allocations</comment></member>
+            <member limittype="bitmask"><type>VkBufferUsageFlags</type>       <name>extendedSparseBufferUsageFlags</name><comment>Bitfield of which buffer usages are supported for extended sparse allocations</comment></member>
+        </type>
+        <type category="struct" name="VkDirectDriverLoadingInfoLUNARG">
+            <member values="VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                  <name>pNext</name></member>
+            <member><type>VkDirectDriverLoadingFlagsLUNARG</type>                                             <name>flags</name></member>
+            <member noautovalidity="true"><type>PFN_vkGetInstanceProcAddrLUNARG</type>                        <name>pfnGetInstanceProcAddr</name></member>
+        </type>
+        <type category="struct" name="VkDirectDriverLoadingListLUNARG" structextends="VkInstanceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                 <name>pNext</name></member>
+            <member><type>VkDirectDriverLoadingModeLUNARG</type>                             <name>mode</name></member>
+            <member><type>uint32_t</type>                                                    <name>driverCount</name></member>
+            <member len="driverCount">const <type>VkDirectDriverLoadingInfoLUNARG</type>*    <name>pDrivers</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>multiviewPerViewViewports</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>rayTracingPositionFetch</name></member>
+        </type>
+        <type category="struct" name="VkDeviceImageSubresourceInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                              <name>pNext</name></member>
+            <member>const <type>VkImageCreateInfo</type>*                                                 <name>pCreateInfo</name></member>
+            <member>const <type>VkImageSubresource2KHR</type>*                                            <name>pSubresource</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderCorePropertiesARM" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="exact"><type>uint32_t</type>         <name>pixelRate</name></member>
+            <member limittype="exact"><type>uint32_t</type>         <name>texelRate</name></member>
+            <member limittype="exact"><type>uint32_t</type>         <name>fmaRate</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>multiviewPerViewRenderAreas</name></member>
+        </type>
+        <type category="struct" name="VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM" structextends="VkRenderPassBeginInfo,VkRenderingInfo">
+            <member values="VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                      <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>         <name>perViewRenderAreaCount</name></member>
+            <member len="perViewRenderAreaCount">const <type>VkRect2D</type>*  <name>pPerViewRenderAreas</name></member>
+        </type>
+        <type category="struct" name="VkQueryLowLatencySupportNV" structextends="VkSemaphoreCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>void</type>*                                       <name>pQueriedLowLatencyData</name></member>
+        </type>
+        <type category="struct" name="VkMemoryMapInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member optional="true"><type>VkMemoryMapFlags</type> <name>flags</name></member>
+            <member externsync="true"><type>VkDeviceMemory</type> <name>memory</name></member>
+            <member><type>VkDeviceSize</type>                     <name>offset</name></member>
+            <member><type>VkDeviceSize</type>                     <name>size</name></member>
+        </type>
+        <type category="struct" name="VkMemoryUnmapInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></member>
+            <member optional="true"><type>VkMemoryUnmapFlagsKHR</type>  <name>flags</name></member>
+            <member externsync="true"><type>VkDeviceMemory</type>       <name>memory</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderObjectFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                           <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                                              <name>shaderObject</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderObjectPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*                                             <name>pNext</name></member>
+            <member limittype="noauto"><type>uint8_t</type>                                                              <name>shaderBinaryUUID</name>[<enum>VK_UUID_SIZE</enum>]</member>
+            <member limittype="noauto"><type>uint32_t</type>                                                             <name>shaderBinaryVersion</name></member>
+        </type>
+        <type category="struct" name="VkShaderCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT"><type>VkStructureType</type>       <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                             <name>pNext</name></member>
+            <member optional="true"><type>VkShaderCreateFlagsEXT</type>                                  <name>flags</name></member>
+            <member><type>VkShaderStageFlagBits</type>                                                   <name>stage</name></member>
+            <member optional="true"><type>VkShaderStageFlags</type>                                      <name>nextStage</name></member>
+            <member><type>VkShaderCodeTypeEXT</type>                                                     <name>codeType</name></member>
+            <member><type>size_t</type>                                                                  <name>codeSize</name></member>
+            <member len="codeSize">const <type>void</type>*                                              <name>pCode</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*                       <name>pName</name></member>
+            <member optional="true"><type>uint32_t</type>                                                <name>setLayoutCount</name></member>
+            <member optional="true" len="setLayoutCount">const <type>VkDescriptorSetLayout</type>*       <name>pSetLayouts</name></member>
+            <member optional="true"><type>uint32_t</type>                                                <name>pushConstantRangeCount</name></member>
+            <member optional="true" len="pushConstantRangeCount">const <type>VkPushConstantRange</type>* <name>pPushConstantRanges</name></member>
+            <member optional="true">const <type>VkSpecializationInfo</type>*                             <name>pSpecializationInfo</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderTileImageFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>shaderTileImageColorReadAccess</name></member>
+            <member><type>VkBool32</type>                           <name>shaderTileImageDepthReadAccess</name></member>
+            <member><type>VkBool32</type>                           <name>shaderTileImageStencilReadAccess</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderTileImagePropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member limittype="noauto"><type>VkBool32</type>        <name>shaderTileImageCoherentReadAccelerated</name></member>
+            <member limittype="noauto"><type>VkBool32</type>        <name>shaderTileImageReadSampleFromPixelRateInvocation</name></member>
+            <member limittype="noauto"><type>VkBool32</type>        <name>shaderTileImageReadFromHelperInvocation</name></member>
+        </type>
+        <type category="struct" name="VkImportScreenBufferInfoQNX" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member noautovalidity="true">struct <type>_screen_buffer</type>*       <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkScreenBufferPropertiesQNX" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                       <name>allocationSize</name></member>
+            <member><type>uint32_t</type>                           <name>memoryTypeBits</name></member>
+        </type>
+        <type category="struct" name="VkScreenBufferFormatPropertiesQNX" structextends="VkScreenBufferPropertiesQNX" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkFormat</type>                           <name>format</name></member>
+            <member><type>uint64_t</type>                           <name>externalFormat</name></member>
+            <member><type>uint64_t</type>                           <name>screenUsage</name></member>
+            <member><type>VkFormatFeatureFlags</type>               <name>formatFeatures</name></member>
+            <member><type>VkComponentMapping</type>                 <name>samplerYcbcrConversionComponents</name></member>
+            <member><type>VkSamplerYcbcrModelConversion</type>      <name>suggestedYcbcrModel</name></member>
+            <member><type>VkSamplerYcbcrRange</type>                <name>suggestedYcbcrRange</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedXChromaOffset</name></member>
+            <member><type>VkChromaLocation</type>                   <name>suggestedYChromaOffset</name></member>
+        </type>
+        <type category="struct" name="VkExternalFormatQNX" structextends="VkImageCreateInfo,VkSamplerYcbcrConversionCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>uint64_t</type>                           <name>externalFormat</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                       <name>pNext</name></member>
+            <member><type>VkBool32</type>                                    <name>screenBufferImport</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCooperativeMatrixFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member><type>VkBool32</type>                            <name>cooperativeMatrix</name></member>
+            <member><type>VkBool32</type>                            <name>cooperativeMatrixRobustBufferAccess</name></member>
+        </type>
+        <type category="struct" name="VkCooperativeMatrixPropertiesKHR">
+            <member values="VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member><type>uint32_t</type>                            <name>MSize</name></member>
+            <member><type>uint32_t</type>                            <name>NSize</name></member>
+            <member><type>uint32_t</type>                            <name>KSize</name></member>
+            <member><type>VkComponentTypeKHR</type>                  <name>AType</name></member>
+            <member><type>VkComponentTypeKHR</type>                  <name>BType</name></member>
+            <member><type>VkComponentTypeKHR</type>                  <name>CType</name></member>
+            <member><type>VkComponentTypeKHR</type>                  <name>ResultType</name></member>
+            <member><type>VkBool32</type>                            <name>saturatingAccumulation</name></member>
+            <member><type>VkScopeKHR</type>                          <name>scope</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCooperativeMatrixPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                               <name>pNext</name></member>
+            <member limittype="bitmask"><type>VkShaderStageFlags</type>              <name>cooperativeMatrixSupportedStages</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderEnqueuePropertiesAMDX" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true"  optional="true"><type>void</type>*               <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>                                   <name>maxExecutionGraphDepth</name></member>
+            <member limittype="max"><type>uint32_t</type>                                   <name>maxExecutionGraphShaderOutputNodes</name></member>
+            <member limittype="max"><type>uint32_t</type>                                   <name>maxExecutionGraphShaderPayloadSize</name></member>
+            <member limittype="max"><type>uint32_t</type>                                   <name>maxExecutionGraphShaderPayloadCount</name></member>
+            <member limittype="noauto"><type>uint32_t</type>                                <name>executionGraphDispatchAddressAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceShaderEnqueueFeaturesAMDX" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true"><type>void</type>*                <name>pNext</name></member>
+            <member><type>VkBool32</type>                                                   <name>shaderEnqueue</name></member>
+        </type>
+        <type category="struct" name="VkExecutionGraphPipelineCreateInfoAMDX">
+            <member values="VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineCreateFlags</type>                      <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>stageCount</name></member>
+            <member optional="true" len="stageCount">const <type>VkPipelineShaderStageCreateInfo</type>*    <name>pStages</name></member>
+            <member optional="true">const <type>VkPipelineLibraryCreateInfoKHR</type>*      <name>pLibraryInfo</name></member>
+            <member><type>VkPipelineLayout</type>                                           <name>layout</name></member>
+            <member noautovalidity="true" optional="true"><type>VkPipeline</type>           <name>basePipelineHandle</name></member>
+            <member><type>int32_t</type>                                                    <name>basePipelineIndex</name></member>
+        </type>
+        <type category="struct" name="VkPipelineShaderStageNodeCreateInfoAMDX" structextends="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX">  <type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                <name>pNext</name></member>
+            <member optional="true" len="null-terminated">const <type>char</type>*          <name>pName</name></member>
+            <member><type>uint32_t</type>                                                   <name>index</name></member>
+        </type>
+        <type category="struct" name="VkExecutionGraphPipelineScratchSizeAMDX">
+            <member values="VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX"><type>VkStructureType</type> <name>sType</name></member>
+            <member noautovalidity="true" optional="true"><type>void</type>*                <name>pNext</name></member>
+            <member><type>VkDeviceSize</type>                                               <name>size</name></member>
+        </type>
+        <type category="struct" name="VkDispatchGraphInfoAMDX">
+            <member><type>uint32_t</type>                                                   <name>nodeIndex</name></member>
+            <member optional="true"><type>uint32_t</type>                                   <name>payloadCount</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstAMDX</type>           <name>payloads</name></member>
+            <member><type>uint64_t</type>                                                   <name>payloadStride</name></member>
+        </type>
+        <type category="struct" name="VkDispatchGraphCountInfoAMDX">
+            <member optional="true"><type>uint32_t</type>                                   <name>count</name></member>
+            <member noautovalidity="true"><type>VkDeviceOrHostAddressConstAMDX</type>                  <name>infos</name></member>
+            <member><type>uint64_t</type>                                                   <name>stride</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCubicClampFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>cubicRangeClamp</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceYcbcrDegammaFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*        <name>pNext</name></member>
+            <member><type>VkBool32</type>                     <name>ycbcrDegamma</name></member>
+        </type>
+        <type category="struct" name="VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM" structextends="VkSamplerYcbcrConversionCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member><type>VkBool32</type>                           <name>enableYDegamma</name></member>
+            <member><type>VkBool32</type>                           <name>enableCbCrDegamma</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCubicWeightsFeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>selectableCubicWeights</name></member>
+        </type>
+        <type category="struct" name="VkSamplerCubicWeightsCreateInfoQCOM" structextends="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkCubicFilterWeightsQCOM</type>         <name>cubicWeights</name></member>
+        </type>
+        <type category="struct" name="VkBlitImageCubicWeightsInfoQCOM" structextends="VkBlitImageInfo2">
+            <member values="VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>VkCubicFilterWeightsQCOM</type>         <name>cubicWeights</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageProcessing2FeaturesQCOM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*   <name>pNext</name></member>
+            <member><type>VkBool32</type>                                      <name>textureBlockMatch2</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageProcessing2PropertiesQCOM" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                        <name>pNext</name></member>
+            <member limittype="max" optional="true"><type>VkExtent2D</type>  <name>maxBlockMatchWindow</name></member>
+        </type>
+        <type category="struct" name="VkSamplerBlockMatchWindowCreateInfoQCOM" structextends="VkSamplerCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                  <name>pNext</name></member>
+            <member><type>VkExtent2D</type>                                   <name>windowExtent</name></member>
+            <member><type>VkBlockMatchWindowCompareModeQCOM</type>            <name>windowCompareMode</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true"><type>void</type>*     <name>pNext</name></member>
+            <member><type>VkBool32</type>                                        <name>descriptorPoolOverallocation</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceLayeredDriverPropertiesMSFT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                       <name>pNext</name></member>
+            <member><type>VkLayeredDriverUnderlyingApiMSFT</type>            <name>underlyingAPI</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalFormatResolveFeaturesANDROID" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+          <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+          <member optional="true"><type>void</type>*        <name>pNext</name></member>
+          <member><type>VkBool32</type>                     <name>externalFormatResolve</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceExternalFormatResolvePropertiesANDROID" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+          <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+          <member optional="true"><type>void</type>*        <name>pNext</name></member>
+          <member limittype="noauto"><type>VkBool32</type>  <name>nullColorAttachmentWithExternalFormatResolve</name></member>
+          <member limittype="noauto"><type>VkChromaLocation</type>  <name>externalFormatResolveChromaOffsetX</name></member>
+          <member limittype="noauto"><type>VkChromaLocation</type>  <name>externalFormatResolveChromaOffsetY</name></member>
+        </type>
+        <type category="struct" name="VkAndroidHardwareBufferFormatResolvePropertiesANDROID" structextends="VkAndroidHardwareBufferPropertiesANDROID" returnedonly="true">
+          <member values="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+          <member optional="true"><type>void</type>*        <name>pNext</name></member>
+          <member><type>VkFormat</type>                     <name>colorAttachmentFormat</name></member>
+        </type>
+        <type category="struct" name="VkLatencySleepModeInfoNV">
+            <member values="VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkBool32</type> <name>lowLatencyMode</name></member>
+            <member><type>VkBool32</type> <name>lowLatencyBoost</name></member>
+            <member><type>uint32_t</type> <name>minimumIntervalUs</name></member>
+        </type>
+        <type category="struct" name="VkLatencySleepInfoNV">
+            <member values="VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkSemaphore</type> <name>signalSemaphore</name></member>
+            <member><type>uint64_t</type> <name>value</name></member>
+        </type>
+        <type category="struct" name="VkSetLatencyMarkerInfoNV">
+            <member values="VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint64_t</type> <name>presentID</name></member>
+            <member><type>VkLatencyMarkerNV</type> <name>marker</name></member>
+        </type>
+        <type category="struct" name="VkGetLatencyMarkerInfoNV">
+            <member values="VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkLatencyTimingsFrameReportNV</type>* <name>pTimings</name></member>
+        </type>
+        <type category="struct" name="VkLatencyTimingsFrameReportNV">
+            <member values="VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>uint64_t</type>               <name>presentID</name></member>
+            <member><type>uint64_t</type>               <name>inputSampleTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>simStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>simEndTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>renderSubmitStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>renderSubmitEndTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>presentStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>presentEndTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>driverStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>driverEndTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>osRenderQueueStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>osRenderQueueEndTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>gpuRenderStartTimeUs</name></member>
+            <member><type>uint64_t</type>               <name>gpuRenderEndTimeUs</name></member>
+        </type>
+        <type category="struct" name="VkOutOfBandQueueTypeInfoNV">
+            <member values="VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
+            <member><type>VkOutOfBandQueueTypeNV</type> <name>queueType</name></member>
+        </type>
+        <type category="struct" name="VkLatencySubmissionPresentIdNV" structextends="VkSubmitInfo,VkSubmitInfo2">
+            <member values="VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*      <name>pNext</name></member>
+            <member><type>uint64_t</type>                         <name>presentID</name></member>
+        </type>
+        <type category="struct" name="VkSwapchainLatencyCreateInfoNV" structextends="VkSwapchainCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member optional="true"><type>VkBool32</type>                           <name>latencyModeEnable</name></member>
+        </type>
+        <type category="struct" name="VkLatencySurfaceCapabilitiesNV" structextends="VkSurfaceCapabilities2KHR">
+            <member values="VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                              <name>pNext</name></member>
+            <member optional="true"><type>uint32_t</type>                                 <name>presentModeCount</name></member>
+            <member optional="true" len="presentModeCount"><type>VkPresentModeKHR</type>* <name>pPresentModes</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCudaKernelLaunchFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member><type>VkBool32</type>                       <name>cudaKernelLaunchFeatures</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceCudaKernelLaunchPropertiesNV" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*    <name>pNext</name></member>
+            <member limittype="max"><type>uint32_t</type>         <name>computeCapabilityMinor</name></member>
+            <member limittype="min"><type>uint32_t</type>         <name>computeCapabilityMajor</name></member>
+        </type>
+        <type category="struct" name="VkDeviceQueueShaderCoreControlCreateInfoARM" structextends="VkDeviceQueueCreateInfo,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>shaderCoreCount</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSchedulingControlsFeaturesARM" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*            <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>schedulingControls</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSchedulingControlsPropertiesARM" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                       <name>pNext</name></member>
+            <member><type>VkPhysicalDeviceSchedulingControlsFlagsARM</type>  <name>schedulingControlsFlags</name></member>
+        </type>
+    </types>
+
+
+    <comment>Vulkan enumerant (token) definitions</comment>
+
+    <enums name="API Constants" comment="Vulkan hardcoded constants - not an enumerated type, part of the header boilerplate">
+        <enum type="uint32_t" value="256"       name="VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"/>
+        <enum type="uint32_t" value="16"        name="VK_UUID_SIZE"/>
+        <enum type="uint32_t" value="8"         name="VK_LUID_SIZE"/>
+        <enum                                   name="VK_LUID_SIZE_KHR" alias="VK_LUID_SIZE"/>
+        <enum type="uint32_t" value="256"       name="VK_MAX_EXTENSION_NAME_SIZE"/>
+        <enum type="uint32_t" value="256"       name="VK_MAX_DESCRIPTION_SIZE"/>
+        <enum type="uint32_t" value="32"        name="VK_MAX_MEMORY_TYPES"/>
+        <enum type="uint32_t" value="16"        name="VK_MAX_MEMORY_HEAPS" comment="The maximum number of unique memory heaps, each of which supporting 1 or more memory types"/>
+        <enum type="float"    value="1000.0F"   name="VK_LOD_CLAMP_NONE"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_REMAINING_MIP_LEVELS"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_REMAINING_ARRAY_LAYERS"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_REMAINING_3D_SLICES_EXT"/>
+        <enum type="uint64_t" value="(~0ULL)"   name="VK_WHOLE_SIZE"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_ATTACHMENT_UNUSED"/>
+        <enum type="uint32_t" value="1"         name="VK_TRUE"/>
+        <enum type="uint32_t" value="0"         name="VK_FALSE"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_QUEUE_FAMILY_IGNORED"/>
+        <enum type="uint32_t" value="(~1U)"     name="VK_QUEUE_FAMILY_EXTERNAL"/>
+        <enum                                   name="VK_QUEUE_FAMILY_EXTERNAL_KHR" alias="VK_QUEUE_FAMILY_EXTERNAL"/>
+        <enum type="uint32_t" value="(~2U)"     name="VK_QUEUE_FAMILY_FOREIGN_EXT"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_SUBPASS_EXTERNAL"/>
+        <enum type="uint32_t" value="32"        name="VK_MAX_DEVICE_GROUP_SIZE"/>
+        <enum                                   name="VK_MAX_DEVICE_GROUP_SIZE_KHR" alias="VK_MAX_DEVICE_GROUP_SIZE"/>
+        <enum type="uint32_t" value="256"       name="VK_MAX_DRIVER_NAME_SIZE"/>
+        <enum                                   name="VK_MAX_DRIVER_NAME_SIZE_KHR" alias="VK_MAX_DRIVER_NAME_SIZE"/>
+        <enum type="uint32_t" value="256"       name="VK_MAX_DRIVER_INFO_SIZE"/>
+        <enum                                   name="VK_MAX_DRIVER_INFO_SIZE_KHR" alias="VK_MAX_DRIVER_INFO_SIZE"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_SHADER_UNUSED_KHR"/>
+        <enum                                   name="VK_SHADER_UNUSED_NV" alias="VK_SHADER_UNUSED_KHR"/>
+        <enum type="uint32_t" value="16"        name="VK_MAX_GLOBAL_PRIORITY_SIZE_KHR"/>
+        <enum                                   name="VK_MAX_GLOBAL_PRIORITY_SIZE_EXT" alias="VK_MAX_GLOBAL_PRIORITY_SIZE_KHR"/>
+        <enum type="uint32_t" value="32"        name="VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT"/>
+        <enum type="uint32_t" value="(~0U)"     name="VK_SHADER_INDEX_UNUSED_AMDX"/>
+    </enums>
+
+    <comment>
+        Unlike OpenGL, most tokens in Vulkan are actual typed enumerants in
+        their own numeric namespaces. The "name" attribute is the C enum
+        type name, and is pulled in from a type tag definition above
+        (slightly clunky, but retains the type / enum distinction). "type"
+        attributes of "enum" or "bitmask" indicate that these values should
+        be generated inside an appropriate definition.
+    </comment>
+
+    <enums name="VkImageLayout" type="enum">
+        <enum value="0"     name="VK_IMAGE_LAYOUT_UNDEFINED"                         comment="Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)"/>
+        <enum value="1"     name="VK_IMAGE_LAYOUT_GENERAL"                           comment="General layout when image can be used for any kind of access"/>
+        <enum value="2"     name="VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"          comment="Optimal layout when image is only used for color attachment read/write"/>
+        <enum value="3"     name="VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"  comment="Optimal layout when image is only used for depth/stencil attachment read/write"/>
+        <enum value="4"     name="VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"   comment="Optimal layout when image is used for read only depth/stencil attachment and shader access"/>
+        <enum value="5"     name="VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"          comment="Optimal layout when image is used for read only shader access"/>
+        <enum value="6"     name="VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"              comment="Optimal layout when image is used only as source of transfer operations"/>
+        <enum value="7"     name="VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"              comment="Optimal layout when image is used only as destination of transfer operations"/>
+        <enum value="8"     name="VK_IMAGE_LAYOUT_PREINITIALIZED"                    comment="Initial layout used when the data is populated by the CPU"/>
+    </enums>
+    <enums name="VkAttachmentLoadOp" type="enum">
+        <enum value="0"     name="VK_ATTACHMENT_LOAD_OP_LOAD"/>
+        <enum value="1"     name="VK_ATTACHMENT_LOAD_OP_CLEAR"/>
+        <enum value="2"     name="VK_ATTACHMENT_LOAD_OP_DONT_CARE"/>
+    </enums>
+    <enums name="VkAttachmentStoreOp" type="enum">
+        <enum value="0"     name="VK_ATTACHMENT_STORE_OP_STORE"/>
+        <enum value="1"     name="VK_ATTACHMENT_STORE_OP_DONT_CARE"/>
+    </enums>
+    <enums name="VkImageType" type="enum">
+        <enum value="0"     name="VK_IMAGE_TYPE_1D"/>
+        <enum value="1"     name="VK_IMAGE_TYPE_2D"/>
+        <enum value="2"     name="VK_IMAGE_TYPE_3D"/>
+    </enums>
+    <enums name="VkImageTiling" type="enum">
+        <enum value="0"     name="VK_IMAGE_TILING_OPTIMAL"/>
+        <enum value="1"     name="VK_IMAGE_TILING_LINEAR"/>
+    </enums>
+    <enums name="VkImageViewType" type="enum">
+        <enum value="0"     name="VK_IMAGE_VIEW_TYPE_1D"/>
+        <enum value="1"     name="VK_IMAGE_VIEW_TYPE_2D"/>
+        <enum value="2"     name="VK_IMAGE_VIEW_TYPE_3D"/>
+        <enum value="3"     name="VK_IMAGE_VIEW_TYPE_CUBE"/>
+        <enum value="4"     name="VK_IMAGE_VIEW_TYPE_1D_ARRAY"/>
+        <enum value="5"     name="VK_IMAGE_VIEW_TYPE_2D_ARRAY"/>
+        <enum value="6"     name="VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"/>
+    </enums>
+    <enums name="VkCommandBufferLevel" type="enum">
+        <enum value="0"     name="VK_COMMAND_BUFFER_LEVEL_PRIMARY"/>
+        <enum value="1"     name="VK_COMMAND_BUFFER_LEVEL_SECONDARY"/>
+    </enums>
+    <enums name="VkComponentSwizzle" type="enum">
+        <enum value="0"     name="VK_COMPONENT_SWIZZLE_IDENTITY"/>
+        <enum value="1"     name="VK_COMPONENT_SWIZZLE_ZERO"/>
+        <enum value="2"     name="VK_COMPONENT_SWIZZLE_ONE"/>
+        <enum value="3"     name="VK_COMPONENT_SWIZZLE_R"/>
+        <enum value="4"     name="VK_COMPONENT_SWIZZLE_G"/>
+        <enum value="5"     name="VK_COMPONENT_SWIZZLE_B"/>
+        <enum value="6"     name="VK_COMPONENT_SWIZZLE_A"/>
+    </enums>
+    <enums name="VkDescriptorType" type="enum">
+        <enum value="0"     name="VK_DESCRIPTOR_TYPE_SAMPLER"/>
+        <enum value="1"     name="VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"/>
+        <enum value="2"     name="VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"/>
+        <enum value="3"     name="VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"/>
+        <enum value="4"     name="VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"/>
+        <enum value="5"     name="VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"/>
+        <enum value="6"     name="VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"/>
+        <enum value="7"     name="VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"/>
+        <enum value="8"     name="VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"/>
+        <enum value="9"     name="VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"/>
+        <enum value="10"    name="VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"/>
+    </enums>
+    <enums name="VkQueryType" type="enum">
+        <enum value="0"     name="VK_QUERY_TYPE_OCCLUSION"/>
+        <enum value="1"     name="VK_QUERY_TYPE_PIPELINE_STATISTICS"                 comment="Optional"/>
+        <enum value="2"     name="VK_QUERY_TYPE_TIMESTAMP"/>
+    </enums>
+    <enums name="VkBorderColor" type="enum">
+        <enum value="0"     name="VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"/>
+        <enum value="1"     name="VK_BORDER_COLOR_INT_TRANSPARENT_BLACK"/>
+        <enum value="2"     name="VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK"/>
+        <enum value="3"     name="VK_BORDER_COLOR_INT_OPAQUE_BLACK"/>
+        <enum value="4"     name="VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE"/>
+        <enum value="5"     name="VK_BORDER_COLOR_INT_OPAQUE_WHITE"/>
+    </enums>
+    <enums name="VkPipelineBindPoint" type="enum">
+        <enum value="0"     name="VK_PIPELINE_BIND_POINT_GRAPHICS"/>
+        <enum value="1"     name="VK_PIPELINE_BIND_POINT_COMPUTE"/>
+    </enums>
+    <enums name="VkPipelineCacheHeaderVersion" type="enum">
+        <enum value="1"     name="VK_PIPELINE_CACHE_HEADER_VERSION_ONE"/>
+    </enums>
+    <enums name="VkPipelineCacheCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPrimitiveTopology" type="enum">
+        <enum value="0"     name="VK_PRIMITIVE_TOPOLOGY_POINT_LIST"/>
+        <enum value="1"     name="VK_PRIMITIVE_TOPOLOGY_LINE_LIST"/>
+        <enum value="2"     name="VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"/>
+        <enum value="3"     name="VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"/>
+        <enum value="4"     name="VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"/>
+        <enum value="5"     name="VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"/>
+        <enum value="6"     name="VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"/>
+        <enum value="7"     name="VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"/>
+        <enum value="8"     name="VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"/>
+        <enum value="9"     name="VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"/>
+        <enum value="10"    name="VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"/>
+    </enums>
+    <enums name="VkSharingMode" type="enum">
+        <enum value="0"     name="VK_SHARING_MODE_EXCLUSIVE"/>
+        <enum value="1"     name="VK_SHARING_MODE_CONCURRENT"/>
+    </enums>
+    <enums name="VkIndexType" type="enum">
+        <enum value="0"     name="VK_INDEX_TYPE_UINT16"/>
+        <enum value="1"     name="VK_INDEX_TYPE_UINT32"/>
+    </enums>
+    <enums name="VkFilter" type="enum">
+        <enum value="0"     name="VK_FILTER_NEAREST"/>
+        <enum value="1"     name="VK_FILTER_LINEAR"/>
+    </enums>
+    <enums name="VkSamplerMipmapMode" type="enum">
+        <enum value="0"     name="VK_SAMPLER_MIPMAP_MODE_NEAREST"                        comment="Choose nearest mip level"/>
+        <enum value="1"     name="VK_SAMPLER_MIPMAP_MODE_LINEAR"                         comment="Linear filter between mip levels"/>
+    </enums>
+    <enums name="VkSamplerAddressMode" type="enum">
+        <enum value="0"     name="VK_SAMPLER_ADDRESS_MODE_REPEAT"/>
+        <enum value="1"     name="VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"/>
+        <enum value="2"     name="VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"/>
+        <enum value="3"     name="VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"/>
+            <comment>
+                value="4" reserved for VK_KHR_sampler_mirror_clamp_to_edge
+                enum VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; do not
+                alias!
+            </comment>
+    </enums>
+    <enums name="VkCompareOp" type="enum">
+        <enum value="0"     name="VK_COMPARE_OP_NEVER"/>
+        <enum value="1"     name="VK_COMPARE_OP_LESS"/>
+        <enum value="2"     name="VK_COMPARE_OP_EQUAL"/>
+        <enum value="3"     name="VK_COMPARE_OP_LESS_OR_EQUAL"/>
+        <enum value="4"     name="VK_COMPARE_OP_GREATER"/>
+        <enum value="5"     name="VK_COMPARE_OP_NOT_EQUAL"/>
+        <enum value="6"     name="VK_COMPARE_OP_GREATER_OR_EQUAL"/>
+        <enum value="7"     name="VK_COMPARE_OP_ALWAYS"/>
+    </enums>
+    <enums name="VkPolygonMode" type="enum">
+        <enum value="0"     name="VK_POLYGON_MODE_FILL"/>
+        <enum value="1"     name="VK_POLYGON_MODE_LINE"/>
+        <enum value="2"     name="VK_POLYGON_MODE_POINT"/>
+    </enums>
+    <enums name="VkFrontFace" type="enum">
+        <enum value="0"     name="VK_FRONT_FACE_COUNTER_CLOCKWISE"/>
+        <enum value="1"     name="VK_FRONT_FACE_CLOCKWISE"/>
+    </enums>
+    <enums name="VkBlendFactor" type="enum">
+        <enum value="0"     name="VK_BLEND_FACTOR_ZERO"/>
+        <enum value="1"     name="VK_BLEND_FACTOR_ONE"/>
+        <enum value="2"     name="VK_BLEND_FACTOR_SRC_COLOR"/>
+        <enum value="3"     name="VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"/>
+        <enum value="4"     name="VK_BLEND_FACTOR_DST_COLOR"/>
+        <enum value="5"     name="VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"/>
+        <enum value="6"     name="VK_BLEND_FACTOR_SRC_ALPHA"/>
+        <enum value="7"     name="VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"/>
+        <enum value="8"     name="VK_BLEND_FACTOR_DST_ALPHA"/>
+        <enum value="9"     name="VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"/>
+        <enum value="10"    name="VK_BLEND_FACTOR_CONSTANT_COLOR"/>
+        <enum value="11"    name="VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"/>
+        <enum value="12"    name="VK_BLEND_FACTOR_CONSTANT_ALPHA"/>
+        <enum value="13"    name="VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"/>
+        <enum value="14"    name="VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"/>
+        <enum value="15"    name="VK_BLEND_FACTOR_SRC1_COLOR"/>
+        <enum value="16"    name="VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"/>
+        <enum value="17"    name="VK_BLEND_FACTOR_SRC1_ALPHA"/>
+        <enum value="18"    name="VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"/>
+    </enums>
+    <enums name="VkBlendOp" type="enum">
+        <enum value="0"     name="VK_BLEND_OP_ADD"/>
+        <enum value="1"     name="VK_BLEND_OP_SUBTRACT"/>
+        <enum value="2"     name="VK_BLEND_OP_REVERSE_SUBTRACT"/>
+        <enum value="3"     name="VK_BLEND_OP_MIN"/>
+        <enum value="4"     name="VK_BLEND_OP_MAX"/>
+    </enums>
+    <enums name="VkStencilOp" type="enum">
+        <enum value="0"     name="VK_STENCIL_OP_KEEP"/>
+        <enum value="1"     name="VK_STENCIL_OP_ZERO"/>
+        <enum value="2"     name="VK_STENCIL_OP_REPLACE"/>
+        <enum value="3"     name="VK_STENCIL_OP_INCREMENT_AND_CLAMP"/>
+        <enum value="4"     name="VK_STENCIL_OP_DECREMENT_AND_CLAMP"/>
+        <enum value="5"     name="VK_STENCIL_OP_INVERT"/>
+        <enum value="6"     name="VK_STENCIL_OP_INCREMENT_AND_WRAP"/>
+        <enum value="7"     name="VK_STENCIL_OP_DECREMENT_AND_WRAP"/>
+    </enums>
+    <enums name="VkLogicOp" type="enum">
+        <enum value="0"     name="VK_LOGIC_OP_CLEAR"/>
+        <enum value="1"     name="VK_LOGIC_OP_AND"/>
+        <enum value="2"     name="VK_LOGIC_OP_AND_REVERSE"/>
+        <enum value="3"     name="VK_LOGIC_OP_COPY"/>
+        <enum value="4"     name="VK_LOGIC_OP_AND_INVERTED"/>
+        <enum value="5"     name="VK_LOGIC_OP_NO_OP"/>
+        <enum value="6"     name="VK_LOGIC_OP_XOR"/>
+        <enum value="7"     name="VK_LOGIC_OP_OR"/>
+        <enum value="8"     name="VK_LOGIC_OP_NOR"/>
+        <enum value="9"     name="VK_LOGIC_OP_EQUIVALENT"/>
+        <enum value="10"    name="VK_LOGIC_OP_INVERT"/>
+        <enum value="11"    name="VK_LOGIC_OP_OR_REVERSE"/>
+        <enum value="12"    name="VK_LOGIC_OP_COPY_INVERTED"/>
+        <enum value="13"    name="VK_LOGIC_OP_OR_INVERTED"/>
+        <enum value="14"    name="VK_LOGIC_OP_NAND"/>
+        <enum value="15"    name="VK_LOGIC_OP_SET"/>
+    </enums>
+    <enums name="VkInternalAllocationType" type="enum">
+        <enum value="0"     name="VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE"/>
+    </enums>
+    <enums name="VkSystemAllocationScope" type="enum">
+        <enum value="0"     name="VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"/>
+        <enum value="1"     name="VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"/>
+        <enum value="2"     name="VK_SYSTEM_ALLOCATION_SCOPE_CACHE"/>
+        <enum value="3"     name="VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"/>
+        <enum value="4"     name="VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"/>
+    </enums>
+    <enums name="VkPhysicalDeviceType" type="enum">
+        <enum value="0"     name="VK_PHYSICAL_DEVICE_TYPE_OTHER"/>
+        <enum value="1"     name="VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"/>
+        <enum value="2"     name="VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"/>
+        <enum value="3"     name="VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"/>
+        <enum value="4"     name="VK_PHYSICAL_DEVICE_TYPE_CPU"/>
+    </enums>
+    <enums name="VkVertexInputRate" type="enum">
+        <enum value="0"     name="VK_VERTEX_INPUT_RATE_VERTEX"/>
+        <enum value="1"     name="VK_VERTEX_INPUT_RATE_INSTANCE"/>
+    </enums>
+    <enums name="VkFormat" type="enum" comment="Vulkan format definitions">
+        <enum value="0"     name="VK_FORMAT_UNDEFINED"/>
+        <enum value="1"     name="VK_FORMAT_R4G4_UNORM_PACK8"/>
+        <enum value="2"     name="VK_FORMAT_R4G4B4A4_UNORM_PACK16"/>
+        <enum value="3"     name="VK_FORMAT_B4G4R4A4_UNORM_PACK16"/>
+        <enum value="4"     name="VK_FORMAT_R5G6B5_UNORM_PACK16"/>
+        <enum value="5"     name="VK_FORMAT_B5G6R5_UNORM_PACK16"/>
+        <enum value="6"     name="VK_FORMAT_R5G5B5A1_UNORM_PACK16"/>
+        <enum value="7"     name="VK_FORMAT_B5G5R5A1_UNORM_PACK16"/>
+        <enum value="8"     name="VK_FORMAT_A1R5G5B5_UNORM_PACK16"/>
+        <enum value="9"     name="VK_FORMAT_R8_UNORM"/>
+        <enum value="10"    name="VK_FORMAT_R8_SNORM"/>
+        <enum value="11"    name="VK_FORMAT_R8_USCALED"/>
+        <enum value="12"    name="VK_FORMAT_R8_SSCALED"/>
+        <enum value="13"    name="VK_FORMAT_R8_UINT"/>
+        <enum value="14"    name="VK_FORMAT_R8_SINT"/>
+        <enum value="15"    name="VK_FORMAT_R8_SRGB"/>
+        <enum value="16"    name="VK_FORMAT_R8G8_UNORM"/>
+        <enum value="17"    name="VK_FORMAT_R8G8_SNORM"/>
+        <enum value="18"    name="VK_FORMAT_R8G8_USCALED"/>
+        <enum value="19"    name="VK_FORMAT_R8G8_SSCALED"/>
+        <enum value="20"    name="VK_FORMAT_R8G8_UINT"/>
+        <enum value="21"    name="VK_FORMAT_R8G8_SINT"/>
+        <enum value="22"    name="VK_FORMAT_R8G8_SRGB"/>
+        <enum value="23"    name="VK_FORMAT_R8G8B8_UNORM"/>
+        <enum value="24"    name="VK_FORMAT_R8G8B8_SNORM"/>
+        <enum value="25"    name="VK_FORMAT_R8G8B8_USCALED"/>
+        <enum value="26"    name="VK_FORMAT_R8G8B8_SSCALED"/>
+        <enum value="27"    name="VK_FORMAT_R8G8B8_UINT"/>
+        <enum value="28"    name="VK_FORMAT_R8G8B8_SINT"/>
+        <enum value="29"    name="VK_FORMAT_R8G8B8_SRGB"/>
+        <enum value="30"    name="VK_FORMAT_B8G8R8_UNORM"/>
+        <enum value="31"    name="VK_FORMAT_B8G8R8_SNORM"/>
+        <enum value="32"    name="VK_FORMAT_B8G8R8_USCALED"/>
+        <enum value="33"    name="VK_FORMAT_B8G8R8_SSCALED"/>
+        <enum value="34"    name="VK_FORMAT_B8G8R8_UINT"/>
+        <enum value="35"    name="VK_FORMAT_B8G8R8_SINT"/>
+        <enum value="36"    name="VK_FORMAT_B8G8R8_SRGB"/>
+        <enum value="37"    name="VK_FORMAT_R8G8B8A8_UNORM"/>
+        <enum value="38"    name="VK_FORMAT_R8G8B8A8_SNORM"/>
+        <enum value="39"    name="VK_FORMAT_R8G8B8A8_USCALED"/>
+        <enum value="40"    name="VK_FORMAT_R8G8B8A8_SSCALED"/>
+        <enum value="41"    name="VK_FORMAT_R8G8B8A8_UINT"/>
+        <enum value="42"    name="VK_FORMAT_R8G8B8A8_SINT"/>
+        <enum value="43"    name="VK_FORMAT_R8G8B8A8_SRGB"/>
+        <enum value="44"    name="VK_FORMAT_B8G8R8A8_UNORM"/>
+        <enum value="45"    name="VK_FORMAT_B8G8R8A8_SNORM"/>
+        <enum value="46"    name="VK_FORMAT_B8G8R8A8_USCALED"/>
+        <enum value="47"    name="VK_FORMAT_B8G8R8A8_SSCALED"/>
+        <enum value="48"    name="VK_FORMAT_B8G8R8A8_UINT"/>
+        <enum value="49"    name="VK_FORMAT_B8G8R8A8_SINT"/>
+        <enum value="50"    name="VK_FORMAT_B8G8R8A8_SRGB"/>
+        <enum value="51"    name="VK_FORMAT_A8B8G8R8_UNORM_PACK32"/>
+        <enum value="52"    name="VK_FORMAT_A8B8G8R8_SNORM_PACK32"/>
+        <enum value="53"    name="VK_FORMAT_A8B8G8R8_USCALED_PACK32"/>
+        <enum value="54"    name="VK_FORMAT_A8B8G8R8_SSCALED_PACK32"/>
+        <enum value="55"    name="VK_FORMAT_A8B8G8R8_UINT_PACK32"/>
+        <enum value="56"    name="VK_FORMAT_A8B8G8R8_SINT_PACK32"/>
+        <enum value="57"    name="VK_FORMAT_A8B8G8R8_SRGB_PACK32"/>
+        <enum value="58"    name="VK_FORMAT_A2R10G10B10_UNORM_PACK32"/>
+        <enum value="59"    name="VK_FORMAT_A2R10G10B10_SNORM_PACK32"/>
+        <enum value="60"    name="VK_FORMAT_A2R10G10B10_USCALED_PACK32"/>
+        <enum value="61"    name="VK_FORMAT_A2R10G10B10_SSCALED_PACK32"/>
+        <enum value="62"    name="VK_FORMAT_A2R10G10B10_UINT_PACK32"/>
+        <enum value="63"    name="VK_FORMAT_A2R10G10B10_SINT_PACK32"/>
+        <enum value="64"    name="VK_FORMAT_A2B10G10R10_UNORM_PACK32"/>
+        <enum value="65"    name="VK_FORMAT_A2B10G10R10_SNORM_PACK32"/>
+        <enum value="66"    name="VK_FORMAT_A2B10G10R10_USCALED_PACK32"/>
+        <enum value="67"    name="VK_FORMAT_A2B10G10R10_SSCALED_PACK32"/>
+        <enum value="68"    name="VK_FORMAT_A2B10G10R10_UINT_PACK32"/>
+        <enum value="69"    name="VK_FORMAT_A2B10G10R10_SINT_PACK32"/>
+        <enum value="70"    name="VK_FORMAT_R16_UNORM"/>
+        <enum value="71"    name="VK_FORMAT_R16_SNORM"/>
+        <enum value="72"    name="VK_FORMAT_R16_USCALED"/>
+        <enum value="73"    name="VK_FORMAT_R16_SSCALED"/>
+        <enum value="74"    name="VK_FORMAT_R16_UINT"/>
+        <enum value="75"    name="VK_FORMAT_R16_SINT"/>
+        <enum value="76"    name="VK_FORMAT_R16_SFLOAT"/>
+        <enum value="77"    name="VK_FORMAT_R16G16_UNORM"/>
+        <enum value="78"    name="VK_FORMAT_R16G16_SNORM"/>
+        <enum value="79"    name="VK_FORMAT_R16G16_USCALED"/>
+        <enum value="80"    name="VK_FORMAT_R16G16_SSCALED"/>
+        <enum value="81"    name="VK_FORMAT_R16G16_UINT"/>
+        <enum value="82"    name="VK_FORMAT_R16G16_SINT"/>
+        <enum value="83"    name="VK_FORMAT_R16G16_SFLOAT"/>
+        <enum value="84"    name="VK_FORMAT_R16G16B16_UNORM"/>
+        <enum value="85"    name="VK_FORMAT_R16G16B16_SNORM"/>
+        <enum value="86"    name="VK_FORMAT_R16G16B16_USCALED"/>
+        <enum value="87"    name="VK_FORMAT_R16G16B16_SSCALED"/>
+        <enum value="88"    name="VK_FORMAT_R16G16B16_UINT"/>
+        <enum value="89"    name="VK_FORMAT_R16G16B16_SINT"/>
+        <enum value="90"    name="VK_FORMAT_R16G16B16_SFLOAT"/>
+        <enum value="91"    name="VK_FORMAT_R16G16B16A16_UNORM"/>
+        <enum value="92"    name="VK_FORMAT_R16G16B16A16_SNORM"/>
+        <enum value="93"    name="VK_FORMAT_R16G16B16A16_USCALED"/>
+        <enum value="94"    name="VK_FORMAT_R16G16B16A16_SSCALED"/>
+        <enum value="95"    name="VK_FORMAT_R16G16B16A16_UINT"/>
+        <enum value="96"    name="VK_FORMAT_R16G16B16A16_SINT"/>
+        <enum value="97"    name="VK_FORMAT_R16G16B16A16_SFLOAT"/>
+        <enum value="98"    name="VK_FORMAT_R32_UINT"/>
+        <enum value="99"    name="VK_FORMAT_R32_SINT"/>
+        <enum value="100"   name="VK_FORMAT_R32_SFLOAT"/>
+        <enum value="101"   name="VK_FORMAT_R32G32_UINT"/>
+        <enum value="102"   name="VK_FORMAT_R32G32_SINT"/>
+        <enum value="103"   name="VK_FORMAT_R32G32_SFLOAT"/>
+        <enum value="104"   name="VK_FORMAT_R32G32B32_UINT"/>
+        <enum value="105"   name="VK_FORMAT_R32G32B32_SINT"/>
+        <enum value="106"   name="VK_FORMAT_R32G32B32_SFLOAT"/>
+        <enum value="107"   name="VK_FORMAT_R32G32B32A32_UINT"/>
+        <enum value="108"   name="VK_FORMAT_R32G32B32A32_SINT"/>
+        <enum value="109"   name="VK_FORMAT_R32G32B32A32_SFLOAT"/>
+        <enum value="110"   name="VK_FORMAT_R64_UINT"/>
+        <enum value="111"   name="VK_FORMAT_R64_SINT"/>
+        <enum value="112"   name="VK_FORMAT_R64_SFLOAT"/>
+        <enum value="113"   name="VK_FORMAT_R64G64_UINT"/>
+        <enum value="114"   name="VK_FORMAT_R64G64_SINT"/>
+        <enum value="115"   name="VK_FORMAT_R64G64_SFLOAT"/>
+        <enum value="116"   name="VK_FORMAT_R64G64B64_UINT"/>
+        <enum value="117"   name="VK_FORMAT_R64G64B64_SINT"/>
+        <enum value="118"   name="VK_FORMAT_R64G64B64_SFLOAT"/>
+        <enum value="119"   name="VK_FORMAT_R64G64B64A64_UINT"/>
+        <enum value="120"   name="VK_FORMAT_R64G64B64A64_SINT"/>
+        <enum value="121"   name="VK_FORMAT_R64G64B64A64_SFLOAT"/>
+        <enum value="122"   name="VK_FORMAT_B10G11R11_UFLOAT_PACK32"/>
+        <enum value="123"   name="VK_FORMAT_E5B9G9R9_UFLOAT_PACK32"/>
+        <enum value="124"   name="VK_FORMAT_D16_UNORM"/>
+        <enum value="125"   name="VK_FORMAT_X8_D24_UNORM_PACK32"/>
+        <enum value="126"   name="VK_FORMAT_D32_SFLOAT"/>
+        <enum value="127"   name="VK_FORMAT_S8_UINT"/>
+        <enum value="128"   name="VK_FORMAT_D16_UNORM_S8_UINT"/>
+        <enum value="129"   name="VK_FORMAT_D24_UNORM_S8_UINT"/>
+        <enum value="130"   name="VK_FORMAT_D32_SFLOAT_S8_UINT"/>
+        <enum value="131"   name="VK_FORMAT_BC1_RGB_UNORM_BLOCK"/>
+        <enum value="132"   name="VK_FORMAT_BC1_RGB_SRGB_BLOCK"/>
+        <enum value="133"   name="VK_FORMAT_BC1_RGBA_UNORM_BLOCK"/>
+        <enum value="134"   name="VK_FORMAT_BC1_RGBA_SRGB_BLOCK"/>
+        <enum value="135"   name="VK_FORMAT_BC2_UNORM_BLOCK"/>
+        <enum value="136"   name="VK_FORMAT_BC2_SRGB_BLOCK"/>
+        <enum value="137"   name="VK_FORMAT_BC3_UNORM_BLOCK"/>
+        <enum value="138"   name="VK_FORMAT_BC3_SRGB_BLOCK"/>
+        <enum value="139"   name="VK_FORMAT_BC4_UNORM_BLOCK"/>
+        <enum value="140"   name="VK_FORMAT_BC4_SNORM_BLOCK"/>
+        <enum value="141"   name="VK_FORMAT_BC5_UNORM_BLOCK"/>
+        <enum value="142"   name="VK_FORMAT_BC5_SNORM_BLOCK"/>
+        <enum value="143"   name="VK_FORMAT_BC6H_UFLOAT_BLOCK"/>
+        <enum value="144"   name="VK_FORMAT_BC6H_SFLOAT_BLOCK"/>
+        <enum value="145"   name="VK_FORMAT_BC7_UNORM_BLOCK"/>
+        <enum value="146"   name="VK_FORMAT_BC7_SRGB_BLOCK"/>
+        <enum value="147"   name="VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK"/>
+        <enum value="148"   name="VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK"/>
+        <enum value="149"   name="VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"/>
+        <enum value="150"   name="VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"/>
+        <enum value="151"   name="VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"/>
+        <enum value="152"   name="VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"/>
+        <enum value="153"   name="VK_FORMAT_EAC_R11_UNORM_BLOCK"/>
+        <enum value="154"   name="VK_FORMAT_EAC_R11_SNORM_BLOCK"/>
+        <enum value="155"   name="VK_FORMAT_EAC_R11G11_UNORM_BLOCK"/>
+        <enum value="156"   name="VK_FORMAT_EAC_R11G11_SNORM_BLOCK"/>
+        <enum value="157"   name="VK_FORMAT_ASTC_4x4_UNORM_BLOCK"/>
+        <enum value="158"   name="VK_FORMAT_ASTC_4x4_SRGB_BLOCK"/>
+        <enum value="159"   name="VK_FORMAT_ASTC_5x4_UNORM_BLOCK"/>
+        <enum value="160"   name="VK_FORMAT_ASTC_5x4_SRGB_BLOCK"/>
+        <enum value="161"   name="VK_FORMAT_ASTC_5x5_UNORM_BLOCK"/>
+        <enum value="162"   name="VK_FORMAT_ASTC_5x5_SRGB_BLOCK"/>
+        <enum value="163"   name="VK_FORMAT_ASTC_6x5_UNORM_BLOCK"/>
+        <enum value="164"   name="VK_FORMAT_ASTC_6x5_SRGB_BLOCK"/>
+        <enum value="165"   name="VK_FORMAT_ASTC_6x6_UNORM_BLOCK"/>
+        <enum value="166"   name="VK_FORMAT_ASTC_6x6_SRGB_BLOCK"/>
+        <enum value="167"   name="VK_FORMAT_ASTC_8x5_UNORM_BLOCK"/>
+        <enum value="168"   name="VK_FORMAT_ASTC_8x5_SRGB_BLOCK"/>
+        <enum value="169"   name="VK_FORMAT_ASTC_8x6_UNORM_BLOCK"/>
+        <enum value="170"   name="VK_FORMAT_ASTC_8x6_SRGB_BLOCK"/>
+        <enum value="171"   name="VK_FORMAT_ASTC_8x8_UNORM_BLOCK"/>
+        <enum value="172"   name="VK_FORMAT_ASTC_8x8_SRGB_BLOCK"/>
+        <enum value="173"   name="VK_FORMAT_ASTC_10x5_UNORM_BLOCK"/>
+        <enum value="174"   name="VK_FORMAT_ASTC_10x5_SRGB_BLOCK"/>
+        <enum value="175"   name="VK_FORMAT_ASTC_10x6_UNORM_BLOCK"/>
+        <enum value="176"   name="VK_FORMAT_ASTC_10x6_SRGB_BLOCK"/>
+        <enum value="177"   name="VK_FORMAT_ASTC_10x8_UNORM_BLOCK"/>
+        <enum value="178"   name="VK_FORMAT_ASTC_10x8_SRGB_BLOCK"/>
+        <enum value="179"   name="VK_FORMAT_ASTC_10x10_UNORM_BLOCK"/>
+        <enum value="180"   name="VK_FORMAT_ASTC_10x10_SRGB_BLOCK"/>
+        <enum value="181"   name="VK_FORMAT_ASTC_12x10_UNORM_BLOCK"/>
+        <enum value="182"   name="VK_FORMAT_ASTC_12x10_SRGB_BLOCK"/>
+        <enum value="183"   name="VK_FORMAT_ASTC_12x12_UNORM_BLOCK"/>
+        <enum value="184"   name="VK_FORMAT_ASTC_12x12_SRGB_BLOCK"/>
+    </enums>
+    <enums name="VkStructureType" type="enum" comment="Structure type enumerant">
+        <enum value="0"     name="VK_STRUCTURE_TYPE_APPLICATION_INFO"/>
+        <enum value="1"     name="VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"/>
+        <enum value="2"     name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"/>
+        <enum value="3"     name="VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"/>
+        <enum value="4"     name="VK_STRUCTURE_TYPE_SUBMIT_INFO"/>
+        <enum value="5"     name="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"/>
+        <enum value="6"     name="VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"/>
+        <enum value="7"     name="VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"/>
+        <enum value="8"     name="VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"/>
+        <enum value="9"     name="VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"/>
+        <enum value="10"    name="VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"/>
+        <enum value="11"    name="VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"/>
+        <enum value="12"    name="VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"/>
+        <enum value="13"    name="VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"/>
+        <enum value="14"    name="VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"/>
+        <enum value="15"    name="VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"/>
+        <enum value="16"    name="VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"/>
+        <enum value="17"    name="VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"/>
+        <enum value="18"    name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"/>
+        <enum value="19"    name="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"/>
+        <enum value="20"    name="VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"/>
+        <enum value="21"    name="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"/>
+        <enum value="22"    name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"/>
+        <enum value="23"    name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"/>
+        <enum value="24"    name="VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"/>
+        <enum value="25"    name="VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"/>
+        <enum value="26"    name="VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"/>
+        <enum value="27"    name="VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"/>
+        <enum value="28"    name="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"/>
+        <enum value="29"    name="VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"/>
+        <enum value="30"    name="VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"/>
+        <enum value="31"    name="VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"/>
+        <enum value="32"    name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"/>
+        <enum value="33"    name="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"/>
+        <enum value="34"    name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"/>
+        <enum value="35"    name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"/>
+        <enum value="36"    name="VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"/>
+        <enum value="37"    name="VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"/>
+        <enum value="38"    name="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"/>
+        <enum value="39"    name="VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"/>
+        <enum value="40"    name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"/>
+        <enum value="41"    name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"/>
+        <enum value="42"    name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"/>
+        <enum value="43"    name="VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"/>
+        <enum value="44"    name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"/>
+        <enum value="45"    name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"/>
+        <enum value="46"    name="VK_STRUCTURE_TYPE_MEMORY_BARRIER"/>
+        <enum value="47"    name="VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO" comment="Reserved for internal use by the loader, layers, and ICDs"/>
+        <enum value="48"    name="VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO" comment="Reserved for internal use by the loader, layers, and ICDs"/>
+    </enums>
+    <enums name="VkSubpassContents" type="enum">
+        <enum value="0"     name="VK_SUBPASS_CONTENTS_INLINE"/>
+        <enum value="1"     name="VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"/>
+    </enums>
+    <enums name="VkResult" type="enum" comment="API result codes">
+            <comment>Return codes (positive values)</comment>
+        <enum value="0"     name="VK_SUCCESS" comment="Command completed successfully"/>
+        <enum value="1"     name="VK_NOT_READY" comment="A fence or query has not yet completed"/>
+        <enum value="2"     name="VK_TIMEOUT" comment="A wait operation has not completed in the specified time"/>
+        <enum value="3"     name="VK_EVENT_SET" comment="An event is signaled"/>
+        <enum value="4"     name="VK_EVENT_RESET" comment="An event is unsignaled"/>
+        <enum value="5"     name="VK_INCOMPLETE" comment="A return array was too small for the result"/>
+            <comment>Error codes (negative values)</comment>
+        <enum value="-1"    name="VK_ERROR_OUT_OF_HOST_MEMORY" comment="A host memory allocation has failed"/>
+        <enum value="-2"    name="VK_ERROR_OUT_OF_DEVICE_MEMORY" comment="A device memory allocation has failed"/>
+        <enum value="-3"    name="VK_ERROR_INITIALIZATION_FAILED" comment="Initialization of an object has failed"/>
+        <enum value="-4"    name="VK_ERROR_DEVICE_LOST" comment="The logical device has been lost. See &lt;&lt;devsandqueues-lost-device&gt;&gt;"/>
+        <enum value="-5"    name="VK_ERROR_MEMORY_MAP_FAILED" comment="Mapping of a memory object has failed"/>
+        <enum value="-6"    name="VK_ERROR_LAYER_NOT_PRESENT" comment="Layer specified does not exist"/>
+        <enum value="-7"    name="VK_ERROR_EXTENSION_NOT_PRESENT" comment="Extension specified does not exist"/>
+        <enum value="-8"    name="VK_ERROR_FEATURE_NOT_PRESENT" comment="Requested feature is not available on this device"/>
+        <enum value="-9"    name="VK_ERROR_INCOMPATIBLE_DRIVER" comment="Unable to find a Vulkan driver"/>
+        <enum value="-10"   name="VK_ERROR_TOO_MANY_OBJECTS" comment="Too many objects of the type have already been created"/>
+        <enum value="-11"   name="VK_ERROR_FORMAT_NOT_SUPPORTED" comment="Requested format is not supported on this device"/>
+        <enum value="-12"   name="VK_ERROR_FRAGMENTED_POOL" comment="A requested pool allocation has failed due to fragmentation of the pool's memory"/>
+        <enum value="-13"   name="VK_ERROR_UNKNOWN" comment="An unknown error has occurred, due to an implementation or application bug"/>
+            <unused start="-14" comment="This is the next unused available error code (negative value)"/>
+    </enums>
+    <enums name="VkDynamicState" type="enum">
+        <enum value="0"     name="VK_DYNAMIC_STATE_VIEWPORT"/>
+        <enum value="1"     name="VK_DYNAMIC_STATE_SCISSOR"/>
+        <enum value="2"     name="VK_DYNAMIC_STATE_LINE_WIDTH"/>
+        <enum value="3"     name="VK_DYNAMIC_STATE_DEPTH_BIAS"/>
+        <enum value="4"     name="VK_DYNAMIC_STATE_BLEND_CONSTANTS"/>
+        <enum value="5"     name="VK_DYNAMIC_STATE_DEPTH_BOUNDS"/>
+        <enum value="6"     name="VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK"/>
+        <enum value="7"     name="VK_DYNAMIC_STATE_STENCIL_WRITE_MASK"/>
+        <enum value="8"     name="VK_DYNAMIC_STATE_STENCIL_REFERENCE"/>
+    </enums>
+    <enums name="VkDescriptorUpdateTemplateType" type="enum">
+        <enum value="0"     name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"   comment="Create descriptor update template for descriptor set updates"/>
+    </enums>
+    <enums name="VkObjectType" type="enum" comment="Enums to track objects of various types - also see objtypeenum attributes on type tags">
+        <enum value="0"     name="VK_OBJECT_TYPE_UNKNOWN"/>
+        <enum value="1"     name="VK_OBJECT_TYPE_INSTANCE"/>
+        <enum value="2"     name="VK_OBJECT_TYPE_PHYSICAL_DEVICE"/>
+        <enum value="3"     name="VK_OBJECT_TYPE_DEVICE"/>
+        <enum value="4"     name="VK_OBJECT_TYPE_QUEUE"/>
+        <enum value="5"     name="VK_OBJECT_TYPE_SEMAPHORE"/>
+        <enum value="6"     name="VK_OBJECT_TYPE_COMMAND_BUFFER"/>
+        <enum value="7"     name="VK_OBJECT_TYPE_FENCE"/>
+        <enum value="8"     name="VK_OBJECT_TYPE_DEVICE_MEMORY"/>
+        <enum value="9"     name="VK_OBJECT_TYPE_BUFFER"/>
+        <enum value="10"    name="VK_OBJECT_TYPE_IMAGE"/>
+        <enum value="11"    name="VK_OBJECT_TYPE_EVENT"/>
+        <enum value="12"    name="VK_OBJECT_TYPE_QUERY_POOL"/>
+        <enum value="13"    name="VK_OBJECT_TYPE_BUFFER_VIEW"/>
+        <enum value="14"    name="VK_OBJECT_TYPE_IMAGE_VIEW"/>
+        <enum value="15"    name="VK_OBJECT_TYPE_SHADER_MODULE"/>
+        <enum value="16"    name="VK_OBJECT_TYPE_PIPELINE_CACHE"/>
+        <enum value="17"    name="VK_OBJECT_TYPE_PIPELINE_LAYOUT"/>
+        <enum value="18"    name="VK_OBJECT_TYPE_RENDER_PASS"/>
+        <enum value="19"    name="VK_OBJECT_TYPE_PIPELINE"/>
+        <enum value="20"    name="VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"/>
+        <enum value="21"    name="VK_OBJECT_TYPE_SAMPLER"/>
+        <enum value="22"    name="VK_OBJECT_TYPE_DESCRIPTOR_POOL"/>
+        <enum value="23"    name="VK_OBJECT_TYPE_DESCRIPTOR_SET"/>
+        <enum value="24"    name="VK_OBJECT_TYPE_FRAMEBUFFER"/>
+        <enum value="25"    name="VK_OBJECT_TYPE_COMMAND_POOL"/>
+    </enums>
+    <enums name="VkRayTracingInvocationReorderModeNV" type="enum">
+        <enum value="0"     name="VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV"/>
+        <enum value="1"     name="VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV"/>
+    </enums>
+    <enums name="VkDirectDriverLoadingModeLUNARG" type="enum">
+        <enum value="0"     name="VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG"/>
+        <enum value="1"     name="VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG"/>
+    </enums>
+
+        <comment>Flags</comment>
+    <enums name="VkQueueFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_QUEUE_GRAPHICS_BIT"                             comment="Queue supports graphics operations"/>
+        <enum bitpos="1"    name="VK_QUEUE_COMPUTE_BIT"                              comment="Queue supports compute operations"/>
+        <enum bitpos="2"    name="VK_QUEUE_TRANSFER_BIT"                             comment="Queue supports transfer operations"/>
+        <enum bitpos="3"    name="VK_QUEUE_SPARSE_BINDING_BIT"                       comment="Queue supports sparse resource memory management operations"/>
+    </enums>
+    <enums name="VkCullModeFlagBits" type="bitmask">
+        <enum value="0"     name="VK_CULL_MODE_NONE"/>
+        <enum bitpos="0"    name="VK_CULL_MODE_FRONT_BIT"/>
+        <enum bitpos="1"    name="VK_CULL_MODE_BACK_BIT"/>
+        <enum value="0x00000003" name="VK_CULL_MODE_FRONT_AND_BACK"/>
+    </enums>
+    <enums name="VkRenderPassCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkDeviceQueueCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkMemoryPropertyFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"               comment="If otherwise stated, then allocate memory on device"/>
+        <enum bitpos="1"    name="VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"               comment="Memory is mappable by host"/>
+        <enum bitpos="2"    name="VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"              comment="Memory will have i/o coherency. If not set, application may need to use vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges to flush/invalidate host cache"/>
+        <enum bitpos="3"    name="VK_MEMORY_PROPERTY_HOST_CACHED_BIT"                comment="Memory will be cached by the host"/>
+        <enum bitpos="4"    name="VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"           comment="Memory may be allocated by the driver when it is required"/>
+    </enums>
+    <enums name="VkMemoryHeapFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"                   comment="If set, heap represents device memory"/>
+    </enums>
+    <enums name="VkAccessFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_ACCESS_INDIRECT_COMMAND_READ_BIT"               comment="Controls coherency of indirect command reads"/>
+        <enum bitpos="1"    name="VK_ACCESS_INDEX_READ_BIT"                          comment="Controls coherency of index reads"/>
+        <enum bitpos="2"    name="VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"               comment="Controls coherency of vertex attribute reads"/>
+        <enum bitpos="3"    name="VK_ACCESS_UNIFORM_READ_BIT"                        comment="Controls coherency of uniform buffer reads"/>
+        <enum bitpos="4"    name="VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"               comment="Controls coherency of input attachment reads"/>
+        <enum bitpos="5"    name="VK_ACCESS_SHADER_READ_BIT"                         comment="Controls coherency of shader reads"/>
+        <enum bitpos="6"    name="VK_ACCESS_SHADER_WRITE_BIT"                        comment="Controls coherency of shader writes"/>
+        <enum bitpos="7"    name="VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"               comment="Controls coherency of color attachment reads"/>
+        <enum bitpos="8"    name="VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"              comment="Controls coherency of color attachment writes"/>
+        <enum bitpos="9"    name="VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"       comment="Controls coherency of depth/stencil attachment reads"/>
+        <enum bitpos="10"   name="VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"      comment="Controls coherency of depth/stencil attachment writes"/>
+        <enum bitpos="11"   name="VK_ACCESS_TRANSFER_READ_BIT"                       comment="Controls coherency of transfer reads"/>
+        <enum bitpos="12"   name="VK_ACCESS_TRANSFER_WRITE_BIT"                      comment="Controls coherency of transfer writes"/>
+        <enum bitpos="13"   name="VK_ACCESS_HOST_READ_BIT"                           comment="Controls coherency of host reads"/>
+        <enum bitpos="14"   name="VK_ACCESS_HOST_WRITE_BIT"                          comment="Controls coherency of host writes"/>
+        <enum bitpos="15"   name="VK_ACCESS_MEMORY_READ_BIT"                         comment="Controls coherency of memory reads"/>
+        <enum bitpos="16"   name="VK_ACCESS_MEMORY_WRITE_BIT"                        comment="Controls coherency of memory writes"/>
+    </enums>
+    <enums name="VkBufferUsageFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_BUFFER_USAGE_TRANSFER_SRC_BIT"                  comment="Can be used as a source of transfer operations"/>
+        <enum bitpos="1"    name="VK_BUFFER_USAGE_TRANSFER_DST_BIT"                  comment="Can be used as a destination of transfer operations"/>
+        <enum bitpos="2"    name="VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"          comment="Can be used as TBO"/>
+        <enum bitpos="3"    name="VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"          comment="Can be used as IBO"/>
+        <enum bitpos="4"    name="VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"                comment="Can be used as UBO"/>
+        <enum bitpos="5"    name="VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"                comment="Can be used as SSBO"/>
+        <enum bitpos="6"    name="VK_BUFFER_USAGE_INDEX_BUFFER_BIT"                  comment="Can be used as source of fixed-function index fetch (index buffer)"/>
+        <enum bitpos="7"    name="VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"                 comment="Can be used as source of fixed-function vertex fetch (VBO)"/>
+        <enum bitpos="8"    name="VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"               comment="Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)"/>
+    </enums>
+    <enums name="VkBufferUsageFlagBits2KHR" type="bitmask" bitwidth="64">
+        <enum bitpos="0"    name="VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR"/>
+        <enum bitpos="4"    name="VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR"/>
+        <enum bitpos="5"    name="VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR"/>
+        <enum bitpos="6"    name="VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR"/>
+        <enum bitpos="7"    name="VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR"/>
+        <enum bitpos="8"    name="VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR"/>
+    </enums>
+    <enums name="VkBufferCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_BUFFER_CREATE_SPARSE_BINDING_BIT"               comment="Buffer should support sparse backing"/>
+        <enum bitpos="1"    name="VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"             comment="Buffer should support sparse backing with partial residency"/>
+        <enum bitpos="2"    name="VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"               comment="Buffer should support constant data access to physical memory ranges mapped into multiple locations of sparse buffers"/>
+    </enums>
+    <enums name="VkShaderStageFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SHADER_STAGE_VERTEX_BIT"/>
+        <enum bitpos="1"    name="VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"/>
+        <enum bitpos="2"    name="VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"/>
+        <enum bitpos="3"    name="VK_SHADER_STAGE_GEOMETRY_BIT"/>
+        <enum bitpos="4"    name="VK_SHADER_STAGE_FRAGMENT_BIT"/>
+        <enum bitpos="5"    name="VK_SHADER_STAGE_COMPUTE_BIT"/>
+        <enum value="0x0000001F" name="VK_SHADER_STAGE_ALL_GRAPHICS"/>
+        <enum value="0x7FFFFFFF" name="VK_SHADER_STAGE_ALL"/>
+    </enums>
+    <enums name="VkImageUsageFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_IMAGE_USAGE_TRANSFER_SRC_BIT"                   comment="Can be used as a source of transfer operations"/>
+        <enum bitpos="1"    name="VK_IMAGE_USAGE_TRANSFER_DST_BIT"                   comment="Can be used as a destination of transfer operations"/>
+        <enum bitpos="2"    name="VK_IMAGE_USAGE_SAMPLED_BIT"                        comment="Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)"/>
+        <enum bitpos="3"    name="VK_IMAGE_USAGE_STORAGE_BIT"                        comment="Can be used as storage image (STORAGE_IMAGE descriptor type)"/>
+        <enum bitpos="4"    name="VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"               comment="Can be used as framebuffer color attachment"/>
+        <enum bitpos="5"    name="VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"       comment="Can be used as framebuffer depth/stencil attachment"/>
+        <enum bitpos="6"    name="VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"           comment="Image data not needed outside of rendering"/>
+        <enum bitpos="7"    name="VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"               comment="Can be used as framebuffer input attachment"/>
+    </enums>
+    <enums name="VkImageCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_IMAGE_CREATE_SPARSE_BINDING_BIT"                comment="Image should support sparse backing"/>
+        <enum bitpos="1"    name="VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"              comment="Image should support sparse backing with partial residency"/>
+        <enum bitpos="2"    name="VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"                comment="Image should support constant data access to physical memory ranges mapped into multiple locations of sparse images"/>
+        <enum bitpos="3"    name="VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"                comment="Allows image views to have different format than the base image"/>
+        <enum bitpos="4"    name="VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"               comment="Allows creating image views with cube type from the created image"/>
+    </enums>
+    <enums name="VkImageViewCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkSamplerCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPipelineCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"/>
+        <enum bitpos="1"    name="VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"/>
+        <enum bitpos="2"    name="VK_PIPELINE_CREATE_DERIVATIVE_BIT"/>
+    </enums>
+    <enums name="VkPipelineCreateFlagBits2KHR" type="bitmask" bitwidth="64">
+        <enum bitpos="0"    name="VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR"/>
+    </enums>
+    <enums name="VkPipelineShaderStageCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkColorComponentFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_COLOR_COMPONENT_R_BIT"/>
+        <enum bitpos="1"    name="VK_COLOR_COMPONENT_G_BIT"/>
+        <enum bitpos="2"    name="VK_COLOR_COMPONENT_B_BIT"/>
+        <enum bitpos="3"    name="VK_COLOR_COMPONENT_A_BIT"/>
+    </enums>
+    <enums name="VkFenceCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_FENCE_CREATE_SIGNALED_BIT"/>
+    </enums>
+    <enums name="VkSemaphoreCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkFormatFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"               comment="Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)"/>
+        <enum bitpos="1"    name="VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"               comment="Format can be used for storage images (STORAGE_IMAGE descriptor type)"/>
+        <enum bitpos="2"    name="VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"        comment="Format supports atomic operations in case it is used for storage images"/>
+        <enum bitpos="3"    name="VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"        comment="Format can be used for uniform texel buffers (TBOs)"/>
+        <enum bitpos="4"    name="VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"        comment="Format can be used for storage texel buffers (IBOs)"/>
+        <enum bitpos="5"    name="VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT" comment="Format supports atomic operations in case it is used for storage texel buffers"/>
+        <enum bitpos="6"    name="VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"               comment="Format can be used for vertex buffers (VBOs)"/>
+        <enum bitpos="7"    name="VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"            comment="Format can be used for color attachment images"/>
+        <enum bitpos="8"    name="VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"      comment="Format supports blending in case it is used for color attachment images"/>
+        <enum bitpos="9"    name="VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"    comment="Format can be used for depth/stencil attachment images"/>
+        <enum bitpos="10"   name="VK_FORMAT_FEATURE_BLIT_SRC_BIT"                    comment="Format can be used as the source image of blits with vkCmdBlitImage"/>
+        <enum bitpos="11"   name="VK_FORMAT_FEATURE_BLIT_DST_BIT"                    comment="Format can be used as the destination image of blits with vkCmdBlitImage"/>
+        <enum bitpos="12"   name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT" comment="Format can be filtered with VK_FILTER_LINEAR when being sampled"/>
+    </enums>
+    <enums name="VkQueryControlFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_QUERY_CONTROL_PRECISE_BIT"                      comment="Require precise results to be collected by the query"/>
+    </enums>
+    <enums name="VkQueryResultFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_QUERY_RESULT_64_BIT"                            comment="Results of the queries are written to the destination buffer as 64-bit values"/>
+        <enum bitpos="1"    name="VK_QUERY_RESULT_WAIT_BIT"                          comment="Results of the queries are waited on before proceeding with the result copy"/>
+        <enum bitpos="2"    name="VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"             comment="Besides the results of the query, the availability of the results is also written"/>
+        <enum bitpos="3"    name="VK_QUERY_RESULT_PARTIAL_BIT"                       comment="Copy the partial results of the query even if the final results are not available"/>
+    </enums>
+    <enums name="VkCommandBufferUsageFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"/>
+        <enum bitpos="1"    name="VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"/>
+        <enum bitpos="2"    name="VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"      comment="Command buffer may be submitted/executed more than once simultaneously"/>
+    </enums>
+    <enums name="VkQueryPipelineStatisticFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"                    comment="Optional"/>
+        <enum bitpos="1"    name="VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"                  comment="Optional"/>
+        <enum bitpos="2"    name="VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"                  comment="Optional"/>
+        <enum bitpos="3"    name="VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"                comment="Optional"/>
+        <enum bitpos="4"    name="VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"                 comment="Optional"/>
+        <enum bitpos="5"    name="VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"                       comment="Optional"/>
+        <enum bitpos="6"    name="VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"                        comment="Optional"/>
+        <enum bitpos="7"    name="VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"                comment="Optional"/>
+        <enum bitpos="8"    name="VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"        comment="Optional"/>
+        <enum bitpos="9"    name="VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT" comment="Optional"/>
+        <enum bitpos="10"   name="VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"                 comment="Optional"/>
+    </enums>
+    <enums name="VkImageAspectFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_IMAGE_ASPECT_COLOR_BIT"/>
+        <enum bitpos="1"    name="VK_IMAGE_ASPECT_DEPTH_BIT"/>
+        <enum bitpos="2"    name="VK_IMAGE_ASPECT_STENCIL_BIT"/>
+        <enum bitpos="3"    name="VK_IMAGE_ASPECT_METADATA_BIT"/>
+    </enums>
+    <enums name="VkSparseImageFormatFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"         comment="Image uses a single mip tail region for all array layers"/>
+        <enum bitpos="1"    name="VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"       comment="Image requires mip level dimensions to be an integer multiple of the sparse image block dimensions for non-tail mip levels."/>
+        <enum bitpos="2"    name="VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT" comment="Image uses a non-standard sparse image block dimensions"/>
+    </enums>
+    <enums name="VkSparseMemoryBindFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SPARSE_MEMORY_BIND_METADATA_BIT"                comment="Operation binds resource metadata to memory"/>
+    </enums>
+    <enums name="VkPipelineStageFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"                 comment="Before subsequent commands are processed"/>
+        <enum bitpos="1"    name="VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"               comment="Draw/DispatchIndirect command fetch"/>
+        <enum bitpos="2"    name="VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"                comment="Vertex/index fetch"/>
+        <enum bitpos="3"    name="VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"               comment="Vertex shading"/>
+        <enum bitpos="4"    name="VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT" comment="Tessellation control shading"/>
+        <enum bitpos="5"    name="VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT" comment="Tessellation evaluation shading"/>
+        <enum bitpos="6"    name="VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"             comment="Geometry shading"/>
+        <enum bitpos="7"    name="VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"             comment="Fragment shading"/>
+        <enum bitpos="8"    name="VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"        comment="Early fragment (depth and stencil) tests"/>
+        <enum bitpos="9"    name="VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"         comment="Late fragment (depth and stencil) tests"/>
+        <enum bitpos="10"   name="VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"     comment="Color attachment writes"/>
+        <enum bitpos="11"   name="VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"              comment="Compute shading"/>
+        <enum bitpos="12"   name="VK_PIPELINE_STAGE_TRANSFER_BIT"                    comment="Transfer/copy operations"/>
+        <enum bitpos="13"   name="VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"              comment="After previous commands have completed"/>
+        <enum bitpos="14"   name="VK_PIPELINE_STAGE_HOST_BIT"                        comment="Indicates host (CPU) is a source/sink of the dependency"/>
+        <enum bitpos="15"   name="VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"                comment="All stages of the graphics pipeline"/>
+        <enum bitpos="16"   name="VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"                comment="All stages supported on the queue"/>
+    </enums>
+    <enums name="VkCommandPoolCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"              comment="Command buffers have a short lifetime"/>
+        <enum bitpos="1"    name="VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"   comment="Command buffers may release their memory individually"/>
+    </enums>
+    <enums name="VkCommandPoolResetFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"       comment="Release resources owned by the pool"/>
+    </enums>
+    <enums name="VkCommandBufferResetFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"     comment="Release resources owned by the buffer"/>
+    </enums>
+    <enums name="VkSampleCountFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SAMPLE_COUNT_1_BIT"                             comment="Sample count 1 supported"/>
+        <enum bitpos="1"    name="VK_SAMPLE_COUNT_2_BIT"                             comment="Sample count 2 supported"/>
+        <enum bitpos="2"    name="VK_SAMPLE_COUNT_4_BIT"                             comment="Sample count 4 supported"/>
+        <enum bitpos="3"    name="VK_SAMPLE_COUNT_8_BIT"                             comment="Sample count 8 supported"/>
+        <enum bitpos="4"    name="VK_SAMPLE_COUNT_16_BIT"                            comment="Sample count 16 supported"/>
+        <enum bitpos="5"    name="VK_SAMPLE_COUNT_32_BIT"                            comment="Sample count 32 supported"/>
+        <enum bitpos="6"    name="VK_SAMPLE_COUNT_64_BIT"                            comment="Sample count 64 supported"/>
+    </enums>
+    <enums name="VkAttachmentDescriptionFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"           comment="The attachment may alias physical memory of another attachment in the same render pass"/>
+    </enums>
+    <enums name="VkStencilFaceFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_STENCIL_FACE_FRONT_BIT"                         comment="Front face"/>
+        <enum bitpos="1"    name="VK_STENCIL_FACE_BACK_BIT"                          comment="Back face"/>
+        <enum value="0x00000003" name="VK_STENCIL_FACE_FRONT_AND_BACK"               comment="Front and back faces"/>
+        <enum api="vulkan"  name="VK_STENCIL_FRONT_AND_BACK" alias="VK_STENCIL_FACE_FRONT_AND_BACK" deprecated="aliased"/>
+    </enums>
+    <enums name="VkDescriptorPoolCreateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT" comment="Descriptor sets may be freed individually"/>
+    </enums>
+    <enums name="VkDependencyFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_DEPENDENCY_BY_REGION_BIT"                       comment="Dependency is per pixel region "/>
+    </enums>
+    <enums name="VkSemaphoreType" type="enum">
+        <enum value="0"     name="VK_SEMAPHORE_TYPE_BINARY"/>
+        <enum value="1"     name="VK_SEMAPHORE_TYPE_TIMELINE"/>
+    </enums>
+    <enums name="VkSemaphoreWaitFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SEMAPHORE_WAIT_ANY_BIT"/>
+    </enums>
+
+        <comment>WSI Extensions</comment>
+    <enums name="VkPresentModeKHR" type="enum">
+        <enum value="0"     name="VK_PRESENT_MODE_IMMEDIATE_KHR"/>
+        <enum value="1"     name="VK_PRESENT_MODE_MAILBOX_KHR"/>
+        <enum value="2"     name="VK_PRESENT_MODE_FIFO_KHR"/>
+        <enum value="3"     name="VK_PRESENT_MODE_FIFO_RELAXED_KHR"/>
+    </enums>
+    <enums name="VkColorSpaceKHR" type="enum">
+        <enum value="0"     name="VK_COLOR_SPACE_SRGB_NONLINEAR_KHR"/>
+        <enum api="vulkan"  name="VK_COLORSPACE_SRGB_NONLINEAR_KHR" alias="VK_COLOR_SPACE_SRGB_NONLINEAR_KHR" deprecated="aliased"/>
+    </enums>
+    <enums name="VkDisplayPlaneAlphaFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"/>
+    </enums>
+    <enums name="VkCompositeAlphaFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"/>
+    </enums>
+    <enums name="VkSurfaceTransformFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"/>
+        <enum bitpos="4"    name="VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"/>
+        <enum bitpos="5"    name="VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"/>
+        <enum bitpos="6"    name="VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"/>
+        <enum bitpos="7"    name="VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"/>
+        <enum bitpos="8"    name="VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"/>
+    </enums>
+    <enums name="VkSwapchainImageUsageFlagBitsANDROID" type="bitmask">
+      <enum bitpos="0"      name="VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID"/>
+    </enums>
+    <enums name="VkTimeDomainEXT" type="enum">
+        <enum value="0"     name="VK_TIME_DOMAIN_DEVICE_EXT"/>
+        <enum value="1"     name="VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT"/>
+        <enum value="2"     name="VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT"/>
+        <enum value="3"     name="VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT"/>
+    </enums>
+    <enums name="VkDebugReportFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_DEBUG_REPORT_INFORMATION_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_DEBUG_REPORT_WARNING_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_DEBUG_REPORT_ERROR_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_DEBUG_REPORT_DEBUG_BIT_EXT"/>
+    </enums>
+    <enums name="VkDebugReportObjectTypeEXT" type="enum">
+        <enum value="0"     name="VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"/>
+        <enum value="1"     name="VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"/>
+        <enum value="2"     name="VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"/>
+        <enum value="3"     name="VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"/>
+        <enum value="4"     name="VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"/>
+        <enum value="5"     name="VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"/>
+        <enum value="6"     name="VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"/>
+        <enum value="7"     name="VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"/>
+        <enum value="8"     name="VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"/>
+        <enum value="9"     name="VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"/>
+        <enum value="10"    name="VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"/>
+        <enum value="11"    name="VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"/>
+        <enum value="12"    name="VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"/>
+        <enum value="13"    name="VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"/>
+        <enum value="14"    name="VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"/>
+        <enum value="15"    name="VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"/>
+        <enum value="16"    name="VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"/>
+        <enum value="17"    name="VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"/>
+        <enum value="18"    name="VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"/>
+        <enum value="19"    name="VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"/>
+        <enum value="20"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"/>
+        <enum value="21"    name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"/>
+        <enum value="22"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"/>
+        <enum value="23"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"/>
+        <enum value="24"    name="VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"/>
+        <enum value="25"    name="VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"/>
+        <enum value="26"    name="VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"/>
+        <enum value="27"    name="VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"/>
+        <enum value="28"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"/>
+        <enum               name="VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT" alias="VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT" deprecated="aliased"/>
+        <enum value="29"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"/>
+        <enum value="30"    name="VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"/>
+            <comment>NVX_device_generated_commands formerly used these enum values, but that extension has been removed
+                value 31 / name VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT
+                value 32 / name VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT
+            </comment>
+        <enum value="33"    name="VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"/>
+        <enum               name="VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT" alias="VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT" deprecated="aliased"/>
+    </enums>
+    <enums name="VkDeviceMemoryReportEventTypeEXT" type="enum">
+        <enum value="0"     name="VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT"/>
+        <enum value="1"     name="VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT"/>
+        <enum value="2"     name="VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT"/>
+        <enum value="3"     name="VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT"/>
+        <enum value="4"     name="VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT"/>
+    </enums>
+    <enums name="VkRasterizationOrderAMD" type="enum">
+        <enum value="0"     name="VK_RASTERIZATION_ORDER_STRICT_AMD"/>
+        <enum value="1"     name="VK_RASTERIZATION_ORDER_RELAXED_AMD"/>
+    </enums>
+    <enums name="VkExternalMemoryHandleTypeFlagBitsNV" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"/>
+        <enum bitpos="3"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"/>
+    </enums>
+    <enums name="VkExternalMemoryFeatureFlagBitsNV" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"/>
+    </enums>
+    <enums name="VkValidationCheckEXT" type="enum">
+        <enum value="0"     name="VK_VALIDATION_CHECK_ALL_EXT"/>
+        <enum value="1"     name="VK_VALIDATION_CHECK_SHADERS_EXT"/>
+    </enums>
+    <enums name="VkValidationFeatureEnableEXT" type="enum">
+        <enum value="0"     name="VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT"/>
+        <enum value="1"     name="VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT"/>
+        <enum value="2"     name="VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT"/>
+        <enum value="3"     name="VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT"/>
+        <enum value="4"     name="VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT"/>
+    </enums>
+    <enums name="VkValidationFeatureDisableEXT" type="enum">
+        <enum value="0"     name="VK_VALIDATION_FEATURE_DISABLE_ALL_EXT"/>
+        <enum value="1"     name="VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT"/>
+        <enum value="2"     name="VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT"/>
+        <enum value="3"     name="VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT"/>
+        <enum value="4"     name="VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT"/>
+        <enum value="5"     name="VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT"/>
+        <enum value="6"     name="VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT"/>
+        <enum value="7"     name="VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT"/>
+    </enums>
+    <enums name="VkSubgroupFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SUBGROUP_FEATURE_BASIC_BIT"              comment="Basic subgroup operations"/>
+        <enum bitpos="1"    name="VK_SUBGROUP_FEATURE_VOTE_BIT"               comment="Vote subgroup operations"/>
+        <enum bitpos="2"    name="VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"         comment="Arithmetic subgroup operations"/>
+        <enum bitpos="3"    name="VK_SUBGROUP_FEATURE_BALLOT_BIT"             comment="Ballot subgroup operations"/>
+        <enum bitpos="4"    name="VK_SUBGROUP_FEATURE_SHUFFLE_BIT"            comment="Shuffle subgroup operations"/>
+        <enum bitpos="5"    name="VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"   comment="Shuffle relative subgroup operations"/>
+        <enum bitpos="6"    name="VK_SUBGROUP_FEATURE_CLUSTERED_BIT"          comment="Clustered subgroup operations"/>
+        <enum bitpos="7"    name="VK_SUBGROUP_FEATURE_QUAD_BIT"               comment="Quad subgroup operations"/>
+    </enums>
+    <enums name="VkIndirectCommandsLayoutUsageFlagBitsNV" type="bitmask">
+        <enum bitpos="0"    name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV"/>
+        <enum bitpos="1"    name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV"/>
+        <enum bitpos="2"    name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV"/>
+    </enums>
+    <enums name="VkIndirectStateFlagBitsNV" type="bitmask">
+        <enum bitpos="0"    name="VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV"/>
+    </enums>
+    <enums name="VkIndirectCommandsTokenTypeNV" type="enum">
+        <enum value="0"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"/>
+        <enum value="1"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"/>
+        <enum value="2"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"/>
+        <enum value="3"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"/>
+        <enum value="4"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"/>
+        <enum value="5"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"/>
+        <enum value="6"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"/>
+        <enum value="7"     name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"/>
+    </enums>
+    <enums name="VkPrivateDataSlotCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkDescriptorSetLayoutCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkExternalMemoryHandleTypeFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+        <enum bitpos="3"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"/>
+        <enum bitpos="4"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"/>
+        <enum bitpos="5"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"/>
+        <enum bitpos="6"    name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"/>
+    </enums>
+    <enums name="VkExternalMemoryFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"/>
+    </enums>
+    <enums name="VkExternalSemaphoreHandleTypeFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+        <enum bitpos="3"    name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"/>
+        <enum               name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"/>
+        <enum bitpos="4"    name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"/>
+    </enums>
+    <enums name="VkExternalSemaphoreFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"/>
+    </enums>
+    <enums name="VkSemaphoreImportFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"/>
+    </enums>
+    <enums name="VkExternalFenceHandleTypeFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+        <enum bitpos="2"    name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+        <enum bitpos="3"    name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"/>
+    </enums>
+    <enums name="VkExternalFenceFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"/>
+        <enum bitpos="1"    name="VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"/>
+    </enums>
+    <enums name="VkFenceImportFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_FENCE_IMPORT_TEMPORARY_BIT"/>
+    </enums>
+    <enums name="VkSurfaceCounterFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_SURFACE_COUNTER_VBLANK_BIT_EXT"/>
+        <enum               name="VK_SURFACE_COUNTER_VBLANK_EXT" alias="VK_SURFACE_COUNTER_VBLANK_BIT_EXT" deprecated="aliased"/>
+    </enums>
+    <enums name="VkDisplayPowerStateEXT" type="enum">
+        <enum value="0"     name="VK_DISPLAY_POWER_STATE_OFF_EXT"/>
+        <enum value="1"     name="VK_DISPLAY_POWER_STATE_SUSPEND_EXT"/>
+        <enum value="2"     name="VK_DISPLAY_POWER_STATE_ON_EXT"/>
+    </enums>
+    <enums name="VkDeviceEventTypeEXT" type="enum">
+        <enum value="0"     name="VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT"/>
+    </enums>
+    <enums name="VkDisplayEventTypeEXT" type="enum">
+        <enum value="0"     name="VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT"/>
+    </enums>
+    <enums name="VkPeerMemoryFeatureFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"           comment="Can read with vkCmdCopy commands"/>
+        <enum bitpos="1"    name="VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"           comment="Can write with vkCmdCopy commands"/>
+        <enum bitpos="2"    name="VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"        comment="Can read with any access type/command"/>
+        <enum bitpos="3"    name="VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"        comment="Can write with and access type/command"/>
+    </enums>
+    <enums name="VkMemoryAllocateFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"            comment="Force allocation on specific devices"/>
+    </enums>
+    <enums name="VkDeviceGroupPresentModeFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"        comment="Present from local memory"/>
+        <enum bitpos="1"    name="VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"       comment="Present from remote memory"/>
+        <enum bitpos="2"    name="VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"          comment="Present sum of local and/or remote memory"/>
+        <enum bitpos="3"    name="VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR" comment="Each physical device presents from local memory"/>
+    </enums>
+    <enums name="VkSwapchainCreateFlagBitsKHR" type="bitmask">
+    </enums>
+    <enums name="VkViewportCoordinateSwizzleNV" type="enum">
+        <enum value="0"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"/>
+        <enum value="1"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"/>
+        <enum value="2"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"/>
+        <enum value="3"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"/>
+        <enum value="4"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"/>
+        <enum value="5"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"/>
+        <enum value="6"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"/>
+        <enum value="7"     name="VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"/>
+    </enums>
+    <enums name="VkDiscardRectangleModeEXT" type="enum">
+        <enum value="0"     name="VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT"/>
+        <enum value="1"     name="VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT"/>
+    </enums>
+    <enums name="VkSubpassDescriptionFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPointClippingBehavior" type="enum">
+        <enum value="0"     name="VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"/>
+        <enum value="1"     name="VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"/>
+    </enums>
+    <enums name="VkSamplerReductionMode" type="enum">
+        <enum value="0"     name="VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"/>
+        <enum value="1"     name="VK_SAMPLER_REDUCTION_MODE_MIN"/>
+        <enum value="2"     name="VK_SAMPLER_REDUCTION_MODE_MAX"/>
+    </enums>
+    <enums name="VkTessellationDomainOrigin" type="enum">
+        <enum value="0"     name="VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"/>
+        <enum value="1"     name="VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"/>
+    </enums>
+    <enums name="VkSamplerYcbcrModelConversion" type="enum">
+        <enum value="0"     name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"/>
+        <enum value="1"     name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY" comment="just range expansion"/>
+        <enum value="2"     name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"      comment="aka HD YUV"/>
+        <enum value="3"     name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"      comment="aka SD YUV"/>
+        <enum value="4"     name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"     comment="aka UHD YUV"/>
+    </enums>
+    <enums name="VkSamplerYcbcrRange" type="enum">
+        <enum value="0"     name="VK_SAMPLER_YCBCR_RANGE_ITU_FULL"    comment="Luma 0..1 maps to 0..255, chroma -0.5..0.5 to 1..255 (clamped)"/>
+        <enum value="1"     name="VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"  comment="Luma 0..1 maps to 16..235, chroma -0.5..0.5 to 16..240"/>
+    </enums>
+    <enums name="VkChromaLocation" type="enum">
+        <enum value="0"     name="VK_CHROMA_LOCATION_COSITED_EVEN"/>
+        <enum value="1"     name="VK_CHROMA_LOCATION_MIDPOINT"/>
+    </enums>
+    <enums name="VkBlendOverlapEXT" type="enum">
+        <enum value="0"     name="VK_BLEND_OVERLAP_UNCORRELATED_EXT"/>
+        <enum value="1"     name="VK_BLEND_OVERLAP_DISJOINT_EXT"/>
+        <enum value="2"     name="VK_BLEND_OVERLAP_CONJOINT_EXT"/>
+    </enums>
+    <enums name="VkCoverageModulationModeNV" type="enum">
+        <enum value="0"     name="VK_COVERAGE_MODULATION_MODE_NONE_NV"/>
+        <enum value="1"     name="VK_COVERAGE_MODULATION_MODE_RGB_NV"/>
+        <enum value="2"     name="VK_COVERAGE_MODULATION_MODE_ALPHA_NV"/>
+        <enum value="3"     name="VK_COVERAGE_MODULATION_MODE_RGBA_NV"/>
+    </enums>
+    <enums name="VkCoverageReductionModeNV" type="enum">
+        <enum value="0"     name="VK_COVERAGE_REDUCTION_MODE_MERGE_NV"/>
+        <enum value="1"     name="VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV"/>
+    </enums>
+    <enums name="VkValidationCacheHeaderVersionEXT" type="enum">
+        <enum value="1"     name="VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"/>
+    </enums>
+    <enums name="VkShaderInfoTypeAMD" type="enum">
+        <enum value="0"     name="VK_SHADER_INFO_TYPE_STATISTICS_AMD"/>
+        <enum value="1"     name="VK_SHADER_INFO_TYPE_BINARY_AMD"/>
+        <enum value="2"     name="VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD"/>
+    </enums>
+    <enums name="VkQueueGlobalPriorityKHR" type="enum">
+        <enum value="128"   name="VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR"/>
+        <enum value="256"   name="VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR"/>
+        <enum value="512"   name="VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR"/>
+        <enum value="1024"  name="VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR"/>
+        <enum               name="VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT"         alias="VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR"/>
+        <enum               name="VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"      alias="VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR"/>
+        <enum               name="VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT"        alias="VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR"/>
+        <enum               name="VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"    alias="VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR"/>
+    </enums>
+    <enums name="VkDebugUtilsMessageSeverityFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"/>
+        <enum bitpos="8"    name="VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"/>
+        <enum bitpos="12"   name="VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"/>
+    </enums>
+    <enums name="VkDebugUtilsMessageTypeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"/>
+    </enums>
+    <enums name="VkConservativeRasterizationModeEXT" type="enum">
+        <enum value="0"     name="VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"/>
+        <enum value="1"     name="VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"/>
+        <enum value="2"     name="VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"/>
+    </enums>
+    <enums name="VkDescriptorBindingFlagBits" type="bitmask">
+        <enum bitpos="0" name="VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"/>
+        <enum bitpos="1" name="VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"/>
+        <enum bitpos="2" name="VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"/>
+        <enum bitpos="3" name="VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"/>
+    </enums>
+    <enums name="VkVendorId" type="enum">
+        <comment>Vendor IDs are now represented as enums instead of the old
+                 &lt;vendorids&gt; tag, allowing them to be included in the
+                 API headers.</comment>
+        <enum value="0x10001" name="VK_VENDOR_ID_VIV"   comment="Vivante vendor ID"/>
+        <enum value="0x10002" name="VK_VENDOR_ID_VSI"   comment="VeriSilicon vendor ID"/>
+        <enum value="0x10003" name="VK_VENDOR_ID_KAZAN" comment="Kazan Software Renderer"/>
+        <enum value="0x10004" name="VK_VENDOR_ID_CODEPLAY" comment="Codeplay Software Ltd. vendor ID"/>
+        <enum value="0x10005" name="VK_VENDOR_ID_MESA"  comment="Mesa vendor ID"/>
+        <enum value="0x10006" name="VK_VENDOR_ID_POCL"  comment="PoCL vendor ID"/>
+        <enum value="0x10007" name="VK_VENDOR_ID_MOBILEYE"  comment="Mobileye vendor ID"/>
+            <unused start="0x10008" comment="This is the next unused available Khronos vendor ID"/>
+    </enums>
+    <enums name="VkDriverId" type="enum">
+        <comment>Driver IDs are now represented as enums instead of the old
+                 &lt;driverids&gt; tag, allowing them to be included in the
+                 API headers.</comment>
+        <enum value="1"       name="VK_DRIVER_ID_AMD_PROPRIETARY"               comment="Advanced Micro Devices, Inc."/>
+        <enum value="2"       name="VK_DRIVER_ID_AMD_OPEN_SOURCE"               comment="Advanced Micro Devices, Inc."/>
+        <enum value="3"       name="VK_DRIVER_ID_MESA_RADV"                     comment="Mesa open source project"/>
+        <enum value="4"       name="VK_DRIVER_ID_NVIDIA_PROPRIETARY"            comment="NVIDIA Corporation"/>
+        <enum value="5"       name="VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"     comment="Intel Corporation"/>
+        <enum value="6"       name="VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"        comment="Intel Corporation"/>
+        <enum value="7"       name="VK_DRIVER_ID_IMAGINATION_PROPRIETARY"       comment="Imagination Technologies"/>
+        <enum value="8"       name="VK_DRIVER_ID_QUALCOMM_PROPRIETARY"          comment="Qualcomm Technologies, Inc."/>
+        <enum value="9"       name="VK_DRIVER_ID_ARM_PROPRIETARY"               comment="Arm Limited"/>
+        <enum value="10"      name="VK_DRIVER_ID_GOOGLE_SWIFTSHADER"            comment="Google LLC"/>
+        <enum value="11"      name="VK_DRIVER_ID_GGP_PROPRIETARY"               comment="Google LLC"/>
+        <enum value="12"      name="VK_DRIVER_ID_BROADCOM_PROPRIETARY"          comment="Broadcom Inc."/>
+        <enum value="13"      name="VK_DRIVER_ID_MESA_LLVMPIPE"                 comment="Mesa"/>
+        <enum value="14"      name="VK_DRIVER_ID_MOLTENVK"                      comment="MoltenVK"/>
+        <enum value="15"      name="VK_DRIVER_ID_COREAVI_PROPRIETARY"           comment="Core Avionics &amp; Industrial Inc."/>
+        <enum value="16"      name="VK_DRIVER_ID_JUICE_PROPRIETARY"             comment="Juice Technologies, Inc."/>
+        <enum value="17"      name="VK_DRIVER_ID_VERISILICON_PROPRIETARY"       comment="Verisilicon, Inc."/>
+        <enum value="18"      name="VK_DRIVER_ID_MESA_TURNIP"                   comment="Mesa open source project"/>
+        <enum value="19"      name="VK_DRIVER_ID_MESA_V3DV"                     comment="Mesa open source project"/>
+        <enum value="20"      name="VK_DRIVER_ID_MESA_PANVK"                    comment="Mesa open source project"/>
+        <enum value="21"      name="VK_DRIVER_ID_SAMSUNG_PROPRIETARY"           comment="Samsung Electronics Co., Ltd."/>
+        <enum value="22"      name="VK_DRIVER_ID_MESA_VENUS"                    comment="Mesa open source project"/>
+        <enum value="23"      name="VK_DRIVER_ID_MESA_DOZEN"                    comment="Mesa open source project"/>
+        <enum value="24"      name="VK_DRIVER_ID_MESA_NVK"                      comment="Mesa open source project"/>
+        <enum value="25"      name="VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA"  comment="Imagination Technologies"/>
+        <enum value="26"      name="VK_DRIVER_ID_MESA_AGXV"                     comment="Mesa open source project"/>
+    </enums>
+    <enums name="VkConditionalRenderingFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT"/>
+    </enums>
+    <enums name="VkResolveModeFlagBits" type="bitmask">
+        <enum value="0" name="VK_RESOLVE_MODE_NONE"/>
+        <enum bitpos="0" name="VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"/>
+        <enum bitpos="1" name="VK_RESOLVE_MODE_AVERAGE_BIT"/>
+        <enum bitpos="2" name="VK_RESOLVE_MODE_MIN_BIT"/>
+        <enum bitpos="3" name="VK_RESOLVE_MODE_MAX_BIT"/>
+    </enums>
+    <enums name="VkShadingRatePaletteEntryNV" type="enum">
+        <enum value="0" name="VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV"/>
+        <enum value="1" name="VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="2" name="VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="3" name="VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="4" name="VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="5" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV"/>
+        <enum value="6" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV"/>
+        <enum value="7" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV"/>
+        <enum value="8" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV"/>
+        <enum value="9" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV"/>
+        <enum value="10" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV"/>
+        <enum value="11" name="VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV"/>
+    </enums>
+    <enums name="VkCoarseSampleOrderTypeNV" type="enum">
+        <enum value="0" name="VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV"/>
+        <enum value="1" name="VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV"/>
+        <enum value="2" name="VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV"/>
+        <enum value="3" name="VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV"/>
+    </enums>
+    <enums name="VkGeometryInstanceFlagBitsKHR" type="bitmask">
+        <enum bitpos="0" name="VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"/>
+        <enum bitpos="1" name="VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR"/>
+        <enum bitpos="2" name="VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"/>
+        <enum bitpos="3" name="VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"/>
+        <enum            name="VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR" alias="VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR"/>
+    </enums>
+    <enums name="VkGeometryFlagBitsKHR" type="bitmask">
+        <enum bitpos="0" name="VK_GEOMETRY_OPAQUE_BIT_KHR"/>
+        <enum bitpos="1" name="VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"/>
+    </enums>
+    <enums name="VkBuildAccelerationStructureFlagBitsKHR" type="bitmask">
+        <enum bitpos="0" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"/>
+        <enum bitpos="1" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"/>
+        <enum bitpos="2" name="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"/>
+        <enum bitpos="3" name="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"/>
+        <enum bitpos="4" name="VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"/>
+    </enums>
+    <enums name="VkAccelerationStructureCreateFlagBitsKHR" type="bitmask">
+        <enum bitpos="0" name="VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"/>
+    </enums>
+    <enums name="VkCopyAccelerationStructureModeKHR" type="enum">
+        <enum value="0" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"/>
+        <enum value="1" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"/>
+        <enum value="2" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR"/>
+        <enum value="3" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR"/>
+    </enums>
+    <enums name="VkBuildAccelerationStructureModeKHR" type="enum">
+        <enum value="0" name="VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR"/>
+        <enum value="1" name="VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR"/>
+    </enums>
+    <enums name="VkAccelerationStructureTypeKHR" type="enum">
+        <enum value="0" name="VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"/>
+        <enum value="1" name="VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"/>
+        <enum value="2" name="VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR"/>
+    </enums>
+    <enums name="VkGeometryTypeKHR" type="enum">
+        <enum value="0" name="VK_GEOMETRY_TYPE_TRIANGLES_KHR"/>
+        <enum value="1" name="VK_GEOMETRY_TYPE_AABBS_KHR"/>
+        <enum value="2" name="VK_GEOMETRY_TYPE_INSTANCES_KHR"/>
+    </enums>
+    <enums name="VkAccelerationStructureMemoryRequirementsTypeNV" type="enum">
+        <enum value="0" name="VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV"/>
+        <enum value="1" name="VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV"/>
+        <enum value="2" name="VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV"/>
+    </enums>
+    <enums name="VkAccelerationStructureBuildTypeKHR" type="enum">
+        <enum value="0" name="VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR"/>
+        <enum value="1" name="VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR"/>
+        <enum value="2" name="VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR"/>
+    </enums>
+    <enums name="VkRayTracingShaderGroupTypeKHR" type="enum">
+        <enum value="0" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"/>
+        <enum value="1" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"/>
+        <enum value="2" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"/>
+    </enums>
+    <enums name="VkAccelerationStructureCompatibilityKHR" type="enum">
+        <enum value="0" name="VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR"/>
+        <enum value="1" name="VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR"/>
+    </enums>
+    <enums name="VkShaderGroupShaderKHR" type="enum">
+        <enum value="0" name="VK_SHADER_GROUP_SHADER_GENERAL_KHR"/>
+        <enum value="1" name="VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR"/>
+        <enum value="2" name="VK_SHADER_GROUP_SHADER_ANY_HIT_KHR"/>
+        <enum value="3" name="VK_SHADER_GROUP_SHADER_INTERSECTION_KHR"/>
+    </enums>
+    <enums name="VkMemoryOverallocationBehaviorAMD" type="enum">
+        <enum value="0"     name="VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD"/>
+        <enum value="1"     name="VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD"/>
+        <enum value="2"     name="VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD"/>
+    </enums>
+    <enums name="VkFramebufferCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkDeviceDiagnosticsConfigFlagBitsNV" type="bitmask">
+        <enum bitpos="0" name="VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV"/>
+        <enum bitpos="1" name="VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV"/>
+        <enum bitpos="2" name="VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV"/>
+        <enum bitpos="3" name="VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV"/>
+    </enums>
+    <enums name="VkPipelineCreationFeedbackFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT"/>
+        <enum               name="VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT" alias="VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT"/>
+        <enum bitpos="1"    name="VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT"/>
+        <enum               name="VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT" alias="VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT"/>
+        <enum bitpos="2"    name="VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT"/>
+        <enum               name="VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT" alias="VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT"/>
+    </enums>
+    <enums name="VkFullScreenExclusiveEXT" type="enum">
+        <enum value="0"     name="VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT"/>
+        <enum value="1"     name="VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT"/>
+        <enum value="2"     name="VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT"/>
+        <enum value="3"     name="VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT"/>
+    </enums>
+    <enums name="VkPerformanceCounterScopeKHR" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR"/>
+        <enum value="1"     name="VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR"/>
+        <enum value="2"     name="VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR"/>
+        <enum               name="VK_QUERY_SCOPE_COMMAND_BUFFER_KHR" alias="VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR" deprecated="aliased"/>
+        <enum               name="VK_QUERY_SCOPE_RENDER_PASS_KHR" alias="VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR" deprecated="aliased"/>
+        <enum               name="VK_QUERY_SCOPE_COMMAND_KHR" alias="VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR" deprecated="aliased"/>
+    </enums>
+    <enums name="VkMemoryDecompressionMethodFlagBitsNV" type="bitmask" bitwidth="64">
+        <enum bitpos="0" name="VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV"/>
+    </enums>
+    <enums name="VkPerformanceCounterUnitKHR" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR"/>
+        <enum value="1"     name="VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR"/>
+        <enum value="2"     name="VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR"/>
+        <enum value="3"     name="VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR"/>
+        <enum value="4"     name="VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR"/>
+        <enum value="5"     name="VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR"/>
+        <enum value="6"     name="VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR"/>
+        <enum value="7"     name="VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR"/>
+        <enum value="8"     name="VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR"/>
+        <enum value="9"     name="VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR"/>
+        <enum value="10"    name="VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR"/>
+    </enums>
+    <enums name="VkPerformanceCounterStorageKHR" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR"/>
+        <enum value="1"     name="VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR"/>
+        <enum value="2"     name="VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR"/>
+        <enum value="3"     name="VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR"/>
+        <enum value="4"     name="VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR"/>
+        <enum value="5"     name="VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR"/>
+    </enums>
+    <enums name="VkPerformanceCounterDescriptionFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR"/>
+        <enum               name="VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR" alias="VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR" deprecated="aliased"/>
+        <enum bitpos="1"    name="VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR"/>
+        <enum               name="VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR" alias="VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR" deprecated="aliased"/>
+    </enums>
+    <enums name="VkAcquireProfilingLockFlagBitsKHR" type="bitmask">
+    </enums>
+    <enums name="VkShaderCorePropertiesFlagBitsAMD" type="bitmask">
+    </enums>
+    <enums name="VkRefreshObjectFlagBitsKHR" type="bitmask">
+    </enums>
+    <enums name="VkPerformanceConfigurationTypeINTEL" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL"/>
+    </enums>
+    <enums name="VkQueryPoolSamplingModeINTEL" type="enum">
+        <enum value="0"     name="VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL"/>
+    </enums>
+    <enums name="VkPerformanceOverrideTypeINTEL" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL"/>
+        <enum value="1"     name="VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL"/>
+    </enums>
+    <enums name="VkPerformanceParameterTypeINTEL" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL"/>
+        <enum value="1"     name="VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL"/>
+    </enums>
+    <enums name="VkPerformanceValueTypeINTEL" type="enum">
+        <enum value="0"     name="VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL"/>
+        <enum value="1"     name="VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL"/>
+        <enum value="2"     name="VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL"/>
+        <enum value="3"     name="VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"/>
+        <enum value="4"     name="VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL"/>
+    </enums>
+    <enums name="VkShaderFloatControlsIndependence" type="enum">
+        <enum value="0"     name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"/>
+        <enum value="1"     name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"/>
+        <enum value="2"     name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"/>
+    </enums>
+    <enums name="VkPipelineExecutableStatisticFormatKHR" type="enum">
+        <enum value="0" name="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR"/>
+        <enum value="1" name="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR"/>
+        <enum value="2" name="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR"/>
+        <enum value="3" name="VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR"/>
+    </enums>
+    <enums name="VkLineRasterizationModeEXT" type="enum">
+        <enum value="0"     name="VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT"/>
+        <enum value="1"     name="VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT"/>
+        <enum value="2"     name="VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT"/>
+        <enum value="3"     name="VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT"/>
+    </enums>
+    <enums name="VkShaderModuleCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPipelineCompilerControlFlagBitsAMD" type="bitmask">
+    </enums>
+    <enums name="VkFaultLevel" type="enum">
+        <enum value="0"    name="VK_FAULT_LEVEL_UNASSIGNED"/>
+        <enum value="1"    name="VK_FAULT_LEVEL_CRITICAL"/>
+        <enum value="2"    name="VK_FAULT_LEVEL_RECOVERABLE"/>
+        <enum value="3"    name="VK_FAULT_LEVEL_WARNING"/>
+    </enums>
+    <enums name="VkFaultType" type="enum">
+        <enum value="0"    name="VK_FAULT_TYPE_INVALID"/>
+        <enum value="1"    name="VK_FAULT_TYPE_UNASSIGNED"/>
+        <enum value="2"    name="VK_FAULT_TYPE_IMPLEMENTATION"/>
+        <enum value="3"    name="VK_FAULT_TYPE_SYSTEM"/>
+        <enum value="4"    name="VK_FAULT_TYPE_PHYSICAL_DEVICE"/>
+        <enum value="5"    name="VK_FAULT_TYPE_COMMAND_BUFFER_FULL"/>
+        <enum value="6"    name="VK_FAULT_TYPE_INVALID_API_USAGE"/>
+    </enums>
+    <enums name="VkFaultQueryBehavior" type="enum">
+        <enum value="0"    name="VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS"/>
+    </enums>
+    <enums name="VkToolPurposeFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_TOOL_PURPOSE_VALIDATION_BIT"/>
+        <enum               name="VK_TOOL_PURPOSE_VALIDATION_BIT_EXT"          alias="VK_TOOL_PURPOSE_VALIDATION_BIT"/>
+        <enum bitpos="1"    name="VK_TOOL_PURPOSE_PROFILING_BIT"/>
+        <enum               name="VK_TOOL_PURPOSE_PROFILING_BIT_EXT"           alias="VK_TOOL_PURPOSE_PROFILING_BIT"/>
+        <enum bitpos="2"    name="VK_TOOL_PURPOSE_TRACING_BIT"/>
+        <enum               name="VK_TOOL_PURPOSE_TRACING_BIT_EXT"             alias="VK_TOOL_PURPOSE_TRACING_BIT"/>
+        <enum bitpos="3"    name="VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT"/>
+        <enum               name="VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT" alias="VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT"/>
+        <enum bitpos="4"    name="VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT"/>
+        <enum               name="VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"  alias="VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT"/>
+    </enums>
+    <enums name="VkPipelineMatchControl" type="enum">
+        <enum value="0"     name="VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH"/>
+    </enums>
+    <enums name="VkFragmentShadingRateCombinerOpKHR" type="enum">
+        <enum value="0" name="VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR"/>
+        <enum value="1" name="VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR"/>
+        <enum value="2" name="VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR"/>
+        <enum value="3" name="VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR"/>
+        <enum value="4" name="VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR"/>
+    </enums>
+    <enums name="VkFragmentShadingRateNV" type="enum">
+        <enum value="0"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"/>
+        <enum value="1"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"/>
+        <enum value="4"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"/>
+        <enum value="5"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"/>
+        <enum value="6"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"/>
+        <enum value="9"  name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"/>
+        <enum value="10" name="VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"/>
+        <enum value="11" name="VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="12" name="VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="13" name="VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="14" name="VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"/>
+        <enum value="15" name="VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV"/>
+    </enums>
+    <enums name="VkFragmentShadingRateTypeNV" type="enum">
+        <enum value="0"  name="VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV"/>
+        <enum value="1"  name="VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV"/>
+    </enums>
+    <enums name="VkSubpassMergeStatusEXT" type="enum">
+        <enum value="0"  name="VK_SUBPASS_MERGE_STATUS_MERGED_EXT"/>
+        <enum value="1"  name="VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT"/>
+        <enum value="2"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT"/>
+        <enum value="3"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT"/>
+        <enum value="4"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT"/>
+        <enum value="5"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT"/>
+        <enum value="6"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT"/>
+        <enum value="7"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT"/>
+        <enum value="8"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT"/>
+        <enum value="9"  name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT"/>
+        <enum value="10" name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT"/>
+        <enum value="11" name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT"/>
+        <enum value="12" name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT"/>
+        <enum value="13" name="VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT"/>
+    </enums>
+    <enums name="VkAccessFlagBits2" type="bitmask" bitwidth="64">
+        <enum value="0"     name="VK_ACCESS_2_NONE"/>
+        <enum               name="VK_ACCESS_2_NONE_KHR" alias="VK_ACCESS_2_NONE"/>
+        <enum bitpos="0"    name="VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR" alias="VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT"/>
+        <enum bitpos="1"    name="VK_ACCESS_2_INDEX_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_INDEX_READ_BIT_KHR" alias="VK_ACCESS_2_INDEX_READ_BIT"/>
+        <enum bitpos="2"    name="VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR" alias="VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT"/>
+        <enum bitpos="3"    name="VK_ACCESS_2_UNIFORM_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_UNIFORM_READ_BIT_KHR" alias="VK_ACCESS_2_UNIFORM_READ_BIT"/>
+        <enum bitpos="4"    name="VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR" alias="VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT"/>
+        <enum bitpos="5"    name="VK_ACCESS_2_SHADER_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_SHADER_READ_BIT_KHR" alias="VK_ACCESS_2_SHADER_READ_BIT"/>
+        <enum bitpos="6"    name="VK_ACCESS_2_SHADER_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_SHADER_WRITE_BIT_KHR" alias="VK_ACCESS_2_SHADER_WRITE_BIT"/>
+        <enum bitpos="7"    name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR" alias="VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT"/>
+        <enum bitpos="8"    name="VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR" alias="VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT"/>
+        <enum bitpos="9"    name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR" alias="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT"/>
+        <enum bitpos="10"   name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR" alias="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"/>
+        <enum bitpos="11"   name="VK_ACCESS_2_TRANSFER_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_TRANSFER_READ_BIT_KHR" alias="VK_ACCESS_2_TRANSFER_READ_BIT"/>
+        <enum bitpos="12"   name="VK_ACCESS_2_TRANSFER_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR" alias="VK_ACCESS_2_TRANSFER_WRITE_BIT"/>
+        <enum bitpos="13"   name="VK_ACCESS_2_HOST_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_HOST_READ_BIT_KHR" alias="VK_ACCESS_2_HOST_READ_BIT"/>
+        <enum bitpos="14"   name="VK_ACCESS_2_HOST_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_HOST_WRITE_BIT_KHR" alias="VK_ACCESS_2_HOST_WRITE_BIT"/>
+        <enum bitpos="15"   name="VK_ACCESS_2_MEMORY_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_MEMORY_READ_BIT_KHR" alias="VK_ACCESS_2_MEMORY_READ_BIT"/>
+        <enum bitpos="16"   name="VK_ACCESS_2_MEMORY_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_MEMORY_WRITE_BIT_KHR" alias="VK_ACCESS_2_MEMORY_WRITE_BIT"/>
+            <comment>bitpos 17-31 are specified by extensions to the original VkAccessFlagBits enum</comment>
+        <enum bitpos="32"   name="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR" alias="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT"/>
+        <enum bitpos="33"   name="VK_ACCESS_2_SHADER_STORAGE_READ_BIT"/>
+        <enum               name="VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR" alias="VK_ACCESS_2_SHADER_STORAGE_READ_BIT"/>
+        <enum bitpos="34"   name="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT"/>
+        <enum               name="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR" alias="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT"/>
+    </enums>
+    <enums name="VkPipelineStageFlagBits2" type="bitmask" bitwidth="64">
+        <enum value="0"    name="VK_PIPELINE_STAGE_2_NONE"/>
+        <enum               name="VK_PIPELINE_STAGE_2_NONE_KHR" alias="VK_PIPELINE_STAGE_2_NONE"/>
+        <enum bitpos="0"    name="VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR" alias="VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT"/>
+        <enum bitpos="1"    name="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT"/>
+        <enum bitpos="2"    name="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT"/>
+        <enum bitpos="3"    name="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT"/>
+        <enum bitpos="4"    name="VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT"/>
+        <enum bitpos="5"    name="VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT"/>
+        <enum bitpos="6"    name="VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT"/>
+        <enum bitpos="7"    name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT"/>
+        <enum bitpos="8"    name="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR" alias="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT"/>
+        <enum bitpos="9"    name="VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR" alias="VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"/>
+        <enum bitpos="10"   name="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"/>
+        <enum bitpos="11"   name="VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT"/>
+        <enum bitpos="12"   name="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_TRANSFER_BIT" alias="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR"/>
+        <enum               name="VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR" alias="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT"/>
+        <enum bitpos="13"   name="VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR" alias="VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT"/>
+        <enum bitpos="14"   name="VK_PIPELINE_STAGE_2_HOST_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_HOST_BIT_KHR" alias="VK_PIPELINE_STAGE_2_HOST_BIT"/>
+        <enum bitpos="15"   name="VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR" alias="VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT"/>
+        <enum bitpos="16"   name="VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR" alias="VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT"/>
+            <comment>bitpos 17-31 are specified by extensions to the original VkPipelineStageFlagBits enum</comment>
+        <enum bitpos="32"   name="VK_PIPELINE_STAGE_2_COPY_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_COPY_BIT_KHR" alias="VK_PIPELINE_STAGE_2_COPY_BIT"/>
+        <enum bitpos="33"   name="VK_PIPELINE_STAGE_2_RESOLVE_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR" alias="VK_PIPELINE_STAGE_2_RESOLVE_BIT"/>
+        <enum bitpos="34"   name="VK_PIPELINE_STAGE_2_BLIT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_BLIT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_BLIT_BIT"/>
+        <enum bitpos="35"   name="VK_PIPELINE_STAGE_2_CLEAR_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR" alias="VK_PIPELINE_STAGE_2_CLEAR_BIT"/>
+        <enum bitpos="36"   name="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT"/>
+        <enum bitpos="37"   name="VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR" alias="VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"/>
+        <enum bitpos="38"   name="VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT"/>
+        <enum               name="VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR" alias="VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT"/>
+    </enums>
+    <enums name="VkSubmitFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_SUBMIT_PROTECTED_BIT"/>
+        <enum               name="VK_SUBMIT_PROTECTED_BIT_KHR" alias="VK_SUBMIT_PROTECTED_BIT"/>
+    </enums>
+    <enums name="VkEventCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPipelineLayoutCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkSciSyncClientTypeNV" type="enum">
+        <enum value="0"    name="VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_NV"/>
+        <enum value="1"    name="VK_SCI_SYNC_CLIENT_TYPE_WAITER_NV"/>
+        <enum value="2"    name="VK_SCI_SYNC_CLIENT_TYPE_SIGNALER_WAITER_NV"/>
+    </enums>
+    <enums name="VkSciSyncPrimitiveTypeNV" type="enum">
+        <enum value="0"   name="VK_SCI_SYNC_PRIMITIVE_TYPE_FENCE_NV"/>
+        <enum value="1"   name="VK_SCI_SYNC_PRIMITIVE_TYPE_SEMAPHORE_NV"/>
+    </enums>
+    <enums name="VkProvokingVertexModeEXT" type="enum">
+        <enum value="0"     name="VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT"/>
+        <enum value="1"     name="VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT"/>
+    </enums>
+    <enums name="VkPipelineCacheValidationVersion" type="enum">
+        <enum value="1"     name="VK_PIPELINE_CACHE_VALIDATION_VERSION_SAFETY_CRITICAL_ONE"/>
+    </enums>
+    <enums name="VkAccelerationStructureMotionInstanceTypeNV" type="enum">
+        <enum value="0" name="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV"/>
+        <enum value="1" name="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV"/>
+        <enum value="2" name="VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV"/>
+    </enums>
+    <enums name="VkPipelineColorBlendStateCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPipelineDepthStencilStateCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkGraphicsPipelineLibraryFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"   name="VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT"/>
+        <enum bitpos="1"   name="VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT"/>
+        <enum bitpos="2"   name="VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT"/>
+        <enum bitpos="3"   name="VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT"/>
+    </enums>
+    <enums name="VkDeviceAddressBindingFlagBitsEXT" type="bitmask">
+        <enum bitpos="0" name="VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT"/>
+    </enums>
+    <enums name="VkDeviceAddressBindingTypeEXT" type="enum">
+        <enum value="0"     name="VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT"/>
+        <enum value="1"     name="VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT"/>
+    </enums>
+    <enums name="VkFrameBoundaryFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"     name="VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT"/>
+    </enums>
+    <enums name="VkPresentScalingFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_PRESENT_SCALING_STRETCH_BIT_EXT"/>
+    </enums>
+    <enums name="VkPresentGravityFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_PRESENT_GRAVITY_MIN_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_PRESENT_GRAVITY_MAX_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_PRESENT_GRAVITY_CENTERED_BIT_EXT"/>
+    </enums>
+    <enums name="VkPhysicalDeviceSchedulingControlsFlagBitsARM" type="bitmask">
+        <enum bitpos="0"    name="VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM"/>
+    </enums>
+
+    <enums name="VkVideoCodecOperationFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_CODEC_OPERATION_NONE_KHR"/>
+    </enums>
+    <enums name="VkVideoChromaSubsamplingFlagBitsKHR" type="bitmask" comment="Vulkan video chroma subsampling definitions">
+        <enum value="0"     name="VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoComponentBitDepthFlagBitsKHR" type="bitmask" comment="Vulkan video component bit depth definitions">
+        <enum value="0"     name="VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR"/>
+        <enum bitpos="4"    name="VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoCapabilityFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoSessionCreateFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoDecodeH264PictureLayoutFlagBitsKHR" type="bitmask">
+        <enum value="0"       name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR"/>
+        <enum bitpos="0"      name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR"/>
+        <enum bitpos="1"      name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoCodingControlFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR"/>
+    </enums>
+    <enums name="VkQueryResultStatusKHR" type="enum">
+        <enum value="-1"    name="VK_QUERY_RESULT_STATUS_ERROR_KHR"/>
+        <enum value="0"     name="VK_QUERY_RESULT_STATUS_NOT_READY_KHR"/>
+        <enum value="1"     name="VK_QUERY_RESULT_STATUS_COMPLETE_KHR"/>
+    </enums>
+    <enums name="VkVideoDecodeUsageFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_DECODE_USAGE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoDecodeCapabilityFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeUsageFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeContentFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeTuningModeKHR" type="enum">
+        <enum value="0"     name="VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR"/>
+        <enum value="1"     name="VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR"/>
+        <enum value="2"     name="VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR"/>
+        <enum value="3"     name="VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR"/>
+        <enum value="4"     name="VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeCapabilityFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeFeedbackFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeRateControlModeFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeH264CapabilityFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT"/>
+        <enum bitpos="5"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT"/>
+        <enum bitpos="6"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT"/>
+        <enum bitpos="7"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_EXT"/>
+        <enum bitpos="8"    name="VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH264StdFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_EXT"/>
+        <enum bitpos="5"    name="VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_EXT"/>
+        <enum bitpos="6"    name="VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="7"    name="VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_EXT"/>
+        <enum bitpos="8"    name="VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_EXT"/>
+        <enum bitpos="9"    name="VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="10"   name="VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_EXT"/>
+        <enum bitpos="11"   name="VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_EXT"/>
+        <enum bitpos="12"   name="VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="13"   name="VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_EXT"/>
+        <enum bitpos="14"   name="VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="15"   name="VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_EXT"/>
+        <enum bitpos="16"   name="VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_EXT"/>
+        <enum bitpos="17"   name="VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_EXT"/>
+        <enum bitpos="19"   name="VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_EXT"/>
+        <enum bitpos="20"   name="VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH264RateControlFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_EXT"/>
+    </enums>
+    <enums name="VkHostImageCopyFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_HOST_IMAGE_COPY_MEMCPY_EXT"/>
+    </enums>
+    <enums name="VkImageFormatConstraintsFlagBitsFUCHSIA" type="bitmask">
+    </enums>
+    <enums name="VkImageConstraintsInfoFlagBitsFUCHSIA" type="bitmask">
+        <enum bitpos="0"    name="VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA"/>
+        <enum bitpos="1"    name="VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA"/>
+        <enum bitpos="2"    name="VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA"/>
+        <enum bitpos="3"    name="VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA"/>
+        <enum bitpos="4"    name="VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA"/>
+    </enums>
+    <enums name="VkFormatFeatureFlagBits2" type="bitmask" bitwidth="64">
+        <enum bitpos="0"    name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT"/>
+        <enum bitpos="1"    name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT"/>
+        <enum bitpos="2"    name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT"/>
+        <enum bitpos="3"    name="VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR" alias="VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT"/>
+        <enum bitpos="4"    name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT"/>
+        <enum bitpos="5"    name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"/>
+        <enum bitpos="6"    name="VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR" alias="VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT"/>
+        <enum bitpos="7"    name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT"/>
+        <enum bitpos="8"    name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR" alias="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT"/>
+        <enum bitpos="9"    name="VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT"/>
+        <enum bitpos="10"   name="VK_FORMAT_FEATURE_2_BLIT_SRC_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR" alias="VK_FORMAT_FEATURE_2_BLIT_SRC_BIT"/>
+        <enum bitpos="11"   name="VK_FORMAT_FEATURE_2_BLIT_DST_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR" alias="VK_FORMAT_FEATURE_2_BLIT_DST_BIT"/>
+        <enum bitpos="12"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT"/>
+        <enum bitpos="13"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT"/>
+        <enum bitpos="14"   name="VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR" alias="VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT"/>
+        <enum bitpos="15"   name="VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR" alias="VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT"/>
+        <enum bitpos="16"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT"/>
+        <enum bitpos="17"   name="VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR" alias="VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT"/>
+        <enum bitpos="18"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"/>
+        <enum bitpos="19"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"/>
+        <enum bitpos="20"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"/>
+        <enum bitpos="21"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"/>
+        <enum bitpos="22"   name="VK_FORMAT_FEATURE_2_DISJOINT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_DISJOINT_BIT"/>
+        <enum bitpos="23"   name="VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR" alias="VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT"/>
+        <enum bitpos="31"   name="VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT"/>
+        <enum bitpos="32"   name="VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR" alias="VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT"/>
+        <enum bitpos="33"   name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT"/>
+        <enum               name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR" alias="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT"/>
+    </enums>
+    <enums name="VkRenderingFlagBits" type="bitmask">
+        <enum bitpos="0"    name="VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT"/>
+        <enum               name="VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR" alias="VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT"/>
+        <enum bitpos="1"    name="VK_RENDERING_SUSPENDING_BIT"/>
+        <enum               name="VK_RENDERING_SUSPENDING_BIT_KHR" alias="VK_RENDERING_SUSPENDING_BIT"/>
+        <enum bitpos="2"    name="VK_RENDERING_RESUMING_BIT"/>
+        <enum               name="VK_RENDERING_RESUMING_BIT_KHR" alias="VK_RENDERING_RESUMING_BIT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265CapabilityFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT"/>
+        <enum bitpos="5"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT"/>
+        <enum bitpos="6"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT"/>
+        <enum bitpos="7"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_EXT"/>
+        <enum bitpos="8"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_EXT"/>
+        <enum bitpos="9"    name="VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265StdFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="3"    name="VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="4"    name="VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="5"    name="VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_EXT"/>
+        <enum bitpos="6"    name="VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="7"    name="VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="8"    name="VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT"/>
+        <enum bitpos="9"    name="VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="10"   name="VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="11"   name="VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT"/>
+        <enum bitpos="12"   name="VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="13"   name="VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="14"   name="VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="15"   name="VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="16"   name="VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="17"   name="VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="18"   name="VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_EXT"/>
+        <enum bitpos="19"   name="VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_EXT"/>
+        <enum bitpos="20"   name="VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265RateControlFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT"/>
+        <enum bitpos="3"      name="VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT"/>
+        <enum bitpos="4"      name="VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265CtbSizeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265TransformBlockSizeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT"/>
+        <enum bitpos="3"      name="VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT"/>
+    </enums>
+    <enums name="VkExportMetalObjectTypeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT"/>
+        <enum bitpos="3"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT"/>
+        <enum bitpos="4"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT"/>
+        <enum bitpos="5"      name="VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT"/>
+    </enums>
+    <enums name="VkInstanceCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkImageCompressionFlagBitsEXT" type="bitmask">
+        <enum value="0"      name="VK_IMAGE_COMPRESSION_DEFAULT_EXT"/>
+        <enum bitpos="0"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT"/>
+        <enum bitpos="1"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT"/>
+        <enum bitpos="2"     name="VK_IMAGE_COMPRESSION_DISABLED_EXT"/>
+    </enums>
+    <enums name="VkImageCompressionFixedRateFlagBitsEXT" type="bitmask">
+        <enum value="0"      name="VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT"/>
+        <enum bitpos="0"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT"/>
+        <enum bitpos="1"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT"/>
+        <enum bitpos="2"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT"/>
+        <enum bitpos="3"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT"/>
+        <enum bitpos="4"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT"/>
+        <enum bitpos="5"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT"/>
+        <enum bitpos="6"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT"/>
+        <enum bitpos="7"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT"/>
+        <enum bitpos="8"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT"/>
+        <enum bitpos="9"     name="VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT"/>
+        <enum bitpos="10"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT"/>
+        <enum bitpos="11"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT"/>
+        <enum bitpos="12"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT"/>
+        <enum bitpos="13"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT"/>
+        <enum bitpos="14"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT"/>
+        <enum bitpos="15"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT"/>
+        <enum bitpos="16"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT"/>
+        <enum bitpos="17"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT"/>
+        <enum bitpos="18"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT"/>
+        <enum bitpos="19"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT"/>
+        <enum bitpos="20"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT"/>
+        <enum bitpos="21"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT"/>
+        <enum bitpos="22"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT"/>
+        <enum bitpos="23"    name="VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT"/>
+    </enums>
+    <enums name="VkPipelineRobustnessBufferBehaviorEXT" type="enum">
+        <enum value="0"      name="VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT" />
+        <enum value="1"      name="VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT" />
+        <enum value="2"      name="VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT" />
+        <enum value="3"      name="VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT" />
+    </enums>
+    <enums name="VkPipelineRobustnessImageBehaviorEXT" type="enum">
+        <enum value="0"      name="VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT" />
+        <enum value="1"      name="VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT" />
+        <enum value="2"      name="VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT" />
+        <enum value="3"      name="VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT" />
+    </enums>
+    <enums name="VkOpticalFlowGridSizeFlagBitsNV" type="bitmask">
+        <enum value="0"       name="VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV"/>
+        <enum bitpos="0"      name="VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV"/>
+        <enum bitpos="1"      name="VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV"/>
+        <enum bitpos="2"      name="VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV"/>
+        <enum bitpos="3"      name="VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV"/>
+    </enums>
+    <enums name="VkOpticalFlowUsageFlagBitsNV" type="bitmask">
+        <enum value="0"       name="VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV"/>
+        <enum bitpos="0"      name="VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV"/>
+        <enum bitpos="1"      name="VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV"/>
+        <enum bitpos="2"      name="VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV"/>
+        <enum bitpos="3"      name="VK_OPTICAL_FLOW_USAGE_COST_BIT_NV"/>
+        <enum bitpos="4"      name="VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV"/>
+    </enums>
+    <enums name="VkOpticalFlowPerformanceLevelNV" type="enum">
+        <enum value="0"       name="VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV"/>
+        <enum value="1"       name="VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV"/>
+        <enum value="2"       name="VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV"/>
+        <enum value="3"       name="VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV"/>
+    </enums>
+    <enums name="VkOpticalFlowSessionBindingPointNV" type="enum">
+        <enum value="0"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV"/>
+        <enum value="1"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV"/>
+        <enum value="2"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV"/>
+        <enum value="3"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV"/>
+        <enum value="4"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV"/>
+        <enum value="5"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV"/>
+        <enum value="6"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV"/>
+        <enum value="7"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV"/>
+        <enum value="8"       name="VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV"/>
+    </enums>
+    <enums name="VkOpticalFlowSessionCreateFlagBitsNV" type="bitmask">
+        <enum bitpos="0"      name="VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV"/>
+        <enum bitpos="1"      name="VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV"/>
+        <enum bitpos="2"      name="VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV"/>
+        <enum bitpos="3"      name="VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV"/>
+        <enum bitpos="4"      name="VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV"/>
+    </enums>
+    <enums name="VkOpticalFlowExecuteFlagBitsNV" type="bitmask">
+        <enum bitpos="0"      name="VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV"/>
+    </enums>
+    <enums name="VkMicromapTypeEXT" type="enum">
+        <enum value="0" name="VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT"/>
+    </enums>
+    <enums name="VkBuildMicromapFlagBitsEXT" type="bitmask">
+        <enum bitpos="0" name="VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT"/>
+        <enum bitpos="1" name="VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT"/>
+        <enum bitpos="2" name="VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT"/>
+    </enums>
+    <enums name="VkMicromapCreateFlagBitsEXT" type="bitmask">
+        <enum bitpos="0" name="VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"/>
+    </enums>
+    <enums name="VkCopyMicromapModeEXT" type="enum">
+        <enum value="0" name="VK_COPY_MICROMAP_MODE_CLONE_EXT"/>
+        <enum value="1" name="VK_COPY_MICROMAP_MODE_SERIALIZE_EXT"/>
+        <enum value="2" name="VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT"/>
+        <enum value="3" name="VK_COPY_MICROMAP_MODE_COMPACT_EXT"/>
+    </enums>
+    <enums name="VkBuildMicromapModeEXT" type="enum">
+        <enum value="0" name="VK_BUILD_MICROMAP_MODE_BUILD_EXT"/>
+    </enums>
+    <enums name="VkOpacityMicromapFormatEXT" type="enum">
+        <enum value="1" name="VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT"/>
+        <enum value="2" name="VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT"/>
+    </enums>
+    <enums name="VkOpacityMicromapSpecialIndexEXT" type="enum">
+        <enum value="-1" name="VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT"/>
+        <enum value="-2" name="VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT"/>
+        <enum value="-3" name="VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT"/>
+        <enum value="-4" name="VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT"/>
+    </enums>
+    <enums name="VkDepthBiasRepresentationEXT" type="enum">
+        <enum value="0"     name="VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT"/>
+        <enum value="1"     name="VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT"/>
+        <enum value="2"     name="VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT"/>
+    </enums>
+    <enums name="VkDeviceFaultAddressTypeEXT" type="enum">
+        <enum value="0"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT" comment="Currently unused"/>
+        <enum value="1"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT"/>
+        <enum value="2"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT"/>
+        <enum value="3"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT"/>
+        <enum value="4"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT"/>
+        <enum value="5"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT"/>
+        <enum value="6"     name="VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT"/>
+    </enums>
+    <enums name="VkDeviceFaultVendorBinaryHeaderVersionEXT" type="enum">
+        <enum value="1"     name="VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT"/>
+    </enums>
+    <enums name="VkDisplacementMicromapFormatNV" type="enum">
+        <enum value="1" name="VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV"/>
+        <enum value="2" name="VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV"/>
+        <enum value="3" name="VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV"/>
+    </enums>
+    <enums name="VkShaderCreateFlagBitsEXT" type="bitmask">
+        <enum bitpos="0" name="VK_SHADER_CREATE_LINK_STAGE_BIT_EXT"/>
+    </enums>
+    <enums name="VkShaderCodeTypeEXT" type="enum">
+        <enum value="0" name="VK_SHADER_CODE_TYPE_BINARY_EXT"/>
+        <enum value="1" name="VK_SHADER_CODE_TYPE_SPIRV_EXT"/>
+    </enums>
+    <enums name="VkScopeKHR" type="enum">
+        <enum value="1"     name="VK_SCOPE_DEVICE_KHR"/>
+        <enum value="2"     name="VK_SCOPE_WORKGROUP_KHR"/>
+        <enum value="3"     name="VK_SCOPE_SUBGROUP_KHR"/>
+        <enum value="5"     name="VK_SCOPE_QUEUE_FAMILY_KHR"/>
+    </enums>
+    <enums name="VkComponentTypeKHR" type="enum">
+        <enum value="0"     name="VK_COMPONENT_TYPE_FLOAT16_KHR"/>
+        <enum value="1"     name="VK_COMPONENT_TYPE_FLOAT32_KHR"/>
+        <enum value="2"     name="VK_COMPONENT_TYPE_FLOAT64_KHR"/>
+        <enum value="3"     name="VK_COMPONENT_TYPE_SINT8_KHR"/>
+        <enum value="4"     name="VK_COMPONENT_TYPE_SINT16_KHR"/>
+        <enum value="5"     name="VK_COMPONENT_TYPE_SINT32_KHR"/>
+        <enum value="6"     name="VK_COMPONENT_TYPE_SINT64_KHR"/>
+        <enum value="7"     name="VK_COMPONENT_TYPE_UINT8_KHR"/>
+        <enum value="8"     name="VK_COMPONENT_TYPE_UINT16_KHR"/>
+        <enum value="9"     name="VK_COMPONENT_TYPE_UINT32_KHR"/>
+        <enum value="10"    name="VK_COMPONENT_TYPE_UINT64_KHR"/>
+    </enums>
+    <enums name="VkCubicFilterWeightsQCOM" type="enum">
+        <enum value="0"     name="VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM"/>
+        <enum value="1"     name="VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM"/>
+        <enum value="2"     name="VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM"/>
+        <enum value="3"     name="VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM"/>
+    </enums>
+    <enums name="VkBlockMatchWindowCompareModeQCOM" type="enum">
+        <enum value="0" name="VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM"/>
+        <enum value="1" name="VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM"/>
+    </enums>
+    <enums name="VkLayeredDriverUnderlyingApiMSFT" type="enum">
+        <enum value="0" name="VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT"/>
+        <enum value="1" name="VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT"/>
+    </enums>
+    <enums name="VkLatencyMarkerNV" type="enum">
+        <enum value="0"    name="VK_LATENCY_MARKER_SIMULATION_START_NV"/>
+        <enum value="1"    name="VK_LATENCY_MARKER_SIMULATION_END_NV"/>
+        <enum value="2"    name="VK_LATENCY_MARKER_RENDERSUBMIT_START_NV"/>
+        <enum value="3"    name="VK_LATENCY_MARKER_RENDERSUBMIT_END_NV"/>
+        <enum value="4"    name="VK_LATENCY_MARKER_PRESENT_START_NV"/>
+        <enum value="5"    name="VK_LATENCY_MARKER_PRESENT_END_NV"/>
+        <enum value="6"    name="VK_LATENCY_MARKER_INPUT_SAMPLE_NV"/>
+        <enum value="7"    name="VK_LATENCY_MARKER_TRIGGER_FLASH_NV"/>
+        <enum value="8"    name="VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_START_NV"/>
+        <enum value="9"    name="VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_END_NV"/>
+        <enum value="10"   name="VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_START_NV"/>
+        <enum value="11"   name="VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_END_NV"/>
+    </enums>
+    <enums name="VkOutOfBandQueueTypeNV" type="enum">
+        <enum value="0"    name="VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV"/>
+        <enum value="1"    name="VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV"/>
+    </enums>
+
+    <commands comment="Vulkan command definitions">
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
+            <proto><type>VkResult</type> <name>vkCreateInstance</name></proto>
+            <param>const <type>VkInstanceCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkInstance</type>* <name>pInstance</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyInstance</name></proto>
+            <param optional="true" externsync="true"><type>VkInstance</type> <name>instance</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <implicitexternsyncparams>
+                <param>all sname:VkPhysicalDevice objects enumerated from pname:instance</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkEnumeratePhysicalDevices</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPhysicalDeviceCount</name></param>
+            <param optional="true" len="pPhysicalDeviceCount"><type>VkPhysicalDevice</type>* <name>pPhysicalDevices</name></param>
+        </command>
+        <command>
+            <proto><type>PFN_vkVoidFunction</type> <name>vkGetDeviceProcAddr</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pName</name></param>
+        </command>
+        <command>
+            <proto><type>PFN_vkVoidFunction</type> <name>vkGetInstanceProcAddr</name></proto>
+            <param optional="true"><type>VkInstance</type> <name>instance</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pName</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceQueueFamilyProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pQueueFamilyPropertyCount</name></param>
+            <param optional="true" len="pQueueFamilyPropertyCount"><type>VkQueueFamilyProperties</type>* <name>pQueueFamilyProperties</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceMemoryProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceMemoryProperties</type>* <name>pMemoryProperties</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceFeatures</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceFeatures</type>* <name>pFeatures</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceFormatProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkFormatProperties</type>* <name>pFormatProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceImageFormatProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkImageType</type> <name>type</name></param>
+            <param><type>VkImageTiling</type> <name>tiling</name></param>
+            <param><type>VkImageUsageFlags</type> <name>usage</name></param>
+            <param optional="true"><type>VkImageCreateFlags</type> <name>flags</name></param>
+            <param><type>VkImageFormatProperties</type>* <name>pImageFormatProperties</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_FEATURE_NOT_PRESENT,VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkCreateDevice</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkDeviceCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDevice</type>* <name>pDevice</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_FEATURE_NOT_PRESENT,VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_DEVICE_LOST,VK_ERROR_INVALID_PIPELINE_CACHE_DATA">
+            <proto><type>VkResult</type> <name>vkCreateDevice</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkDeviceCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDevice</type>* <name>pDevice</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDevice</name></proto>
+            <param optional="true" externsync="true"><type>VkDevice</type> <name>device</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <implicitexternsyncparams>
+                <param>all sname:VkQueue objects created from pname:device</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkEnumerateInstanceVersion</name></proto>
+            <param><type>uint32_t</type>* <name>pApiVersion</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkEnumerateInstanceLayerProperties</name></proto>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_LAYER_NOT_PRESENT">
+            <proto><type>VkResult</type> <name>vkEnumerateInstanceExtensionProperties</name></proto>
+            <param optional="true" len="null-terminated">const <type>char</type>* <name>pLayerName</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkExtensionProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkEnumerateDeviceLayerProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkEnumerateDeviceLayerProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param>
+        </command>
+
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_LAYER_NOT_PRESENT">
+            <proto><type>VkResult</type> <name>vkEnumerateDeviceExtensionProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="true" len="null-terminated">const <type>char</type>* <name>pLayerName</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkExtensionProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceQueue</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param><type>uint32_t</type> <name>queueIndex</name></param>
+            <param><type>VkQueue</type>* <name>pQueue</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkQueueSubmit</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param optional="true"><type>uint32_t</type> <name>submitCount</name></param>
+            <param len="submitCount">const <type>VkSubmitInfo</type>* <name>pSubmits</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkQueueWaitIdle</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkDeviceWaitIdle</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <implicitexternsyncparams>
+                <param>all sname:VkQueue objects created from pname:device</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkAllocateMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryAllocateInfo</type>* <name>pAllocateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDeviceMemory</type>* <name>pMemory</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkFreeMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkMapMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkDeviceSize</type> <name>size</name></param>
+            <param optional="true"><type>VkMemoryMapFlags</type> <name>flags</name></param>
+            <param optional="false,true"><type>void</type>** <name>ppData</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkUnmapMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDeviceMemory</type> <name>memory</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkFlushMappedMemoryRanges</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>memoryRangeCount</name></param>
+            <param len="memoryRangeCount">const <type>VkMappedMemoryRange</type>* <name>pMemoryRanges</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkInvalidateMappedMemoryRanges</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>memoryRangeCount</name></param>
+            <param len="memoryRangeCount">const <type>VkMappedMemoryRange</type>* <name>pMemoryRanges</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceMemoryCommitment</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>VkDeviceSize</type>* <name>pCommittedMemoryInBytes</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetBufferMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkMemoryRequirements</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkBindBufferMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>VkDeviceSize</type> <name>memoryOffset</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetImageMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>VkMemoryRequirements</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBindImageMemory</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkImage</type> <name>image</name></param>
+            <param><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>VkDeviceSize</type> <name>memoryOffset</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetImageSparseMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSparseMemoryRequirementCount</name></param>
+            <param optional="true" len="pSparseMemoryRequirementCount"><type>VkSparseImageMemoryRequirements</type>* <name>pSparseMemoryRequirements</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceSparseImageFormatProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkImageType</type> <name>type</name></param>
+            <param><type>VkSampleCountFlagBits</type> <name>samples</name></param>
+            <param><type>VkImageUsageFlags</type> <name>usage</name></param>
+            <param><type>VkImageTiling</type> <name>tiling</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkSparseImageFormatProperties</type>* <name>pProperties</name></param>
+        </command>
+        <command queues="sparse_binding" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkQueueBindSparse</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param optional="true"><type>uint32_t</type> <name>bindInfoCount</name></param>
+            <param len="bindInfoCount">const <type>VkBindSparseInfo</type>* <name>pBindInfo</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateFence</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFenceCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkFence</type>* <name>pFence</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyFence</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkResetFences</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>fenceCount</name></param>
+            <param len="fenceCount" externsync="true">const <type>VkFence</type>* <name>pFences</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_NOT_READY" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkGetFenceStatus</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_TIMEOUT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkWaitForFences</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>fenceCount</name></param>
+            <param len="fenceCount">const <type>VkFence</type>* <name>pFences</name></param>
+            <param><type>VkBool32</type> <name>waitAll</name></param>
+            <param><type>uint64_t</type> <name>timeout</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateSemaphore</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSemaphore</type>* <name>pSemaphore</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroySemaphore</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkSemaphore</type> <name>semaphore</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateEvent</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkEventCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkEvent</type>* <name>pEvent</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyEvent</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkEvent</type> <name>event</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_EVENT_SET,VK_EVENT_RESET" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkGetEventStatus</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkEvent</type> <name>event</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkSetEvent</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkEvent</type> <name>event</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkResetEvent</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkEvent</type> <name>event</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateQueryPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkQueryPoolCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkQueryPool</type>* <name>pQueryPool</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyQueryPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_NOT_READY" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkGetQueryPoolResults</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+            <param><type>uint32_t</type> <name>queryCount</name></param>
+            <param><type>size_t</type> <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+            <param><type>VkDeviceSize</type> <name>stride</name></param>
+            <param optional="true"><type>VkQueryResultFlags</type> <name>flags</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkResetQueryPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+            <param><type>uint32_t</type> <name>queryCount</name></param>
+        </command>
+        <command name="vkResetQueryPoolEXT"                        alias="vkResetQueryPool"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateBuffer</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkBuffer</type>* <name>pBuffer</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyBuffer</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkBuffer</type> <name>buffer</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateBufferView</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferViewCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkBufferView</type>* <name>pView</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyBufferView</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkBufferView</type> <name>bufferView</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_COMPRESSION_EXHAUSTED_EXT,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateImage</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkImage</type>* <name>pImage</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyImage</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkImage</type> <name>image</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetImageSubresourceLayout</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param>const <type>VkImageSubresource</type>* <name>pSubresource</name></param>
+            <param><type>VkSubresourceLayout</type>* <name>pLayout</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateImageView</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageViewCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkImageView</type>* <name>pView</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyImageView</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkImageView</type> <name>imageView</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_SHADER_NV">
+            <proto><type>VkResult</type> <name>vkCreateShaderModule</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkShaderModuleCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkShaderModule</type>* <name>pShaderModule</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyShaderModule</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkShaderModule</type> <name>shaderModule</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreatePipelineCache</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPipelineCacheCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkPipelineCache</type>* <name>pPipelineCache</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_PIPELINE_CACHE_DATA">
+            <proto><type>VkResult</type> <name>vkCreatePipelineCache</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPipelineCacheCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkPipelineCache</type>* <name>pPipelineCache</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyPipelineCache</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPipelineCacheData</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pDataSize</name></param>
+            <param optional="true" len="pDataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkMergePipelineCaches</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkPipelineCache</type> <name>dstCache</name></param>
+            <param><type>uint32_t</type> <name>srcCacheCount</name></param>
+            <param len="srcCacheCount">const <type>VkPipelineCache</type>* <name>pSrcCaches</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_SHADER_NV">
+            <proto><type>VkResult</type> <name>vkCreateGraphicsPipelines</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkGraphicsPipelineCreateInfo</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NO_PIPELINE_MATCH,VK_ERROR_OUT_OF_POOL_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateGraphicsPipelines</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkGraphicsPipelineCreateInfo</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_SHADER_NV">
+            <proto><type>VkResult</type> <name>vkCreateComputePipelines</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkComputePipelineCreateInfo</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NO_PIPELINE_MATCH,VK_ERROR_OUT_OF_POOL_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateComputePipelines</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkComputePipelineCreateInfo</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkRenderPass</type> <name>renderpass</name></param>
+            <param><type>VkExtent2D</type>* <name>pMaxWorkgroupSize</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyPipeline</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPipeline</type> <name>pipeline</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreatePipelineLayout</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPipelineLayoutCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkPipelineLayout</type>* <name>pPipelineLayout</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyPipelineLayout</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPipelineLayout</type> <name>pipelineLayout</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateSampler</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSamplerCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSampler</type>* <name>pSampler</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroySampler</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkSampler</type> <name>sampler</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDescriptorSetLayout</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorSetLayoutCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDescriptorSetLayout</type>* <name>pSetLayout</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDescriptorSetLayout</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkDescriptorSetLayout</type> <name>descriptorSetLayout</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FRAGMENTATION_EXT">
+            <proto><type>VkResult</type> <name>vkCreateDescriptorPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorPoolCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDescriptorPool</type>* <name>pDescriptorPool</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDescriptorPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkDescriptorPool</type> <name>descriptorPool</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkResetDescriptorPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDescriptorPool</type> <name>descriptorPool</name></param>
+            <param optional="true"><type>VkDescriptorPoolResetFlags</type> <name>flags</name></param>
+            <implicitexternsyncparams>
+                <param>any sname:VkDescriptorSet objects allocated from pname:descriptorPool</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FRAGMENTED_POOL,VK_ERROR_OUT_OF_POOL_MEMORY">
+            <proto><type>VkResult</type> <name>vkAllocateDescriptorSets</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pAllocateInfo-&gt;descriptorPool">const <type>VkDescriptorSetAllocateInfo</type>* <name>pAllocateInfo</name></param>
+            <param len="pAllocateInfo-&gt;descriptorSetCount"><type>VkDescriptorSet</type>* <name>pDescriptorSets</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkFreeDescriptorSets</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDescriptorPool</type> <name>descriptorPool</name></param>
+            <param><type>uint32_t</type> <name>descriptorSetCount</name></param>
+            <param noautovalidity="true" externsync="true" len="descriptorSetCount">const <type>VkDescriptorSet</type>* <name>pDescriptorSets</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkUpdateDescriptorSets</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>uint32_t</type> <name>descriptorWriteCount</name></param>
+            <param len="descriptorWriteCount">const <type>VkWriteDescriptorSet</type>* <name>pDescriptorWrites</name></param>
+            <param optional="true"><type>uint32_t</type> <name>descriptorCopyCount</name></param>
+            <param len="descriptorCopyCount">const <type>VkCopyDescriptorSet</type>* <name>pDescriptorCopies</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateFramebuffer</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFramebufferCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkFramebuffer</type>* <name>pFramebuffer</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyFramebuffer</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkFramebuffer</type> <name>framebuffer</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateRenderPass</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkRenderPassCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkRenderPass</type>* <name>pRenderPass</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyRenderPass</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkRenderPass</type> <name>renderPass</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetRenderAreaGranularity</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkRenderPass</type> <name>renderPass</name></param>
+            <param><type>VkExtent2D</type>* <name>pGranularity</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetRenderingAreaGranularityKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkRenderingAreaInfoKHR</type>* <name>pRenderingAreaInfo</name></param>
+            <param><type>VkExtent2D</type>* <name>pGranularity</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateCommandPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCommandPoolCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkCommandPool</type>* <name>pCommandPool</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyCommandPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkCommandPool</type> <name>commandPool</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkResetCommandPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkCommandPool</type> <name>commandPool</name></param>
+            <param optional="true"><type>VkCommandPoolResetFlags</type> <name>flags</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkAllocateCommandBuffers</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pAllocateInfo-&gt;commandPool">const <type>VkCommandBufferAllocateInfo</type>* <name>pAllocateInfo</name></param>
+            <param len="pAllocateInfo-&gt;commandBufferCount"><type>VkCommandBuffer</type>* <name>pCommandBuffers</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkFreeCommandBuffers</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkCommandPool</type> <name>commandPool</name></param>
+            <param><type>uint32_t</type> <name>commandBufferCount</name></param>
+            <param noautovalidity="true" externsync="true" len="commandBufferCount">const <type>VkCommandBuffer</type>* <name>pCommandBuffers</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBeginCommandBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCommandBufferBeginInfo</type>* <name>pBeginInfo</name></param>
+            <implicitexternsyncparams>
+                <param>the sname:VkCommandPool that pname:commandBuffer was allocated from</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR">
+            <proto><type>VkResult</type> <name>vkEndCommandBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <implicitexternsyncparams>
+                <param>the sname:VkCommandPool that pname:commandBuffer was allocated from</param>
+            </implicitexternsyncparams>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkResetCommandBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkCommandBufferResetFlags</type> <name>flags</name></param>
+            <implicitexternsyncparams>
+                <param>the sname:VkCommandPool that pname:commandBuffer was allocated from</param>
+            </implicitexternsyncparams>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindPipeline</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetAttachmentFeedbackLoopEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkImageAspectFlags</type> <name>aspectMask</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewport</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstViewport</name></param>
+            <param><type>uint32_t</type> <name>viewportCount</name></param>
+            <param len="viewportCount">const <type>VkViewport</type>* <name>pViewports</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetScissor</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstScissor</name></param>
+            <param><type>uint32_t</type> <name>scissorCount</name></param>
+            <param len="scissorCount">const <type>VkRect2D</type>* <name>pScissors</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLineWidth</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>float</type> <name>lineWidth</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthBias</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>float</type> <name>depthBiasConstantFactor</name></param>
+            <param><type>float</type> <name>depthBiasClamp</name></param>
+            <param><type>float</type> <name>depthBiasSlopeFactor</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetBlendConstants</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>float</type> <name>blendConstants</name>[4]</param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthBounds</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>float</type> <name>minDepthBounds</name></param>
+            <param><type>float</type> <name>maxDepthBounds</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetStencilCompareMask</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkStencilFaceFlags</type> <name>faceMask</name></param>
+            <param><type>uint32_t</type> <name>compareMask</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetStencilWriteMask</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkStencilFaceFlags</type> <name>faceMask</name></param>
+            <param><type>uint32_t</type> <name>writeMask</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetStencilReference</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkStencilFaceFlags</type> <name>faceMask</name></param>
+            <param><type>uint32_t</type> <name>reference</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindDescriptorSets</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>firstSet</name></param>
+            <param><type>uint32_t</type> <name>descriptorSetCount</name></param>
+            <param len="descriptorSetCount" optional="false,true">const <type>VkDescriptorSet</type>* <name>pDescriptorSets</name></param>
+            <param optional="true"><type>uint32_t</type> <name>dynamicOffsetCount</name></param>
+            <param len="dynamicOffsetCount">const <type>uint32_t</type>* <name>pDynamicOffsets</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindIndexBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkIndexType</type> <name>indexType</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindVertexBuffers</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstBinding</name></param>
+            <param><type>uint32_t</type> <name>bindingCount</name></param>
+            <param len="bindingCount" optional="false,true">const <type>VkBuffer</type>* <name>pBuffers</name></param>
+            <param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDraw</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>vertexCount</name></param>
+            <param><type>uint32_t</type> <name>instanceCount</name></param>
+            <param><type>uint32_t</type> <name>firstVertex</name></param>
+            <param><type>uint32_t</type> <name>firstInstance</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndexed</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>indexCount</name></param>
+            <param><type>uint32_t</type> <name>instanceCount</name></param>
+            <param><type>uint32_t</type> <name>firstIndex</name></param>
+            <param><type>int32_t</type> <name>vertexOffset</name></param>
+            <param><type>uint32_t</type> <name>firstInstance</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMultiEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>uint32_t</type> <name>drawCount</name></param>
+            <param noautovalidity="true" len="drawCount" stride="stride">const <type>VkMultiDrawInfoEXT</type>* <name>pVertexInfo</name></param>
+            <param><type>uint32_t</type> <name>instanceCount</name></param>
+            <param><type>uint32_t</type> <name>firstInstance</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMultiIndexedEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>uint32_t</type> <name>drawCount</name></param>
+            <param noautovalidity="true" len="drawCount" stride="stride">const <type>VkMultiDrawIndexedInfoEXT</type>* <name>pIndexInfo</name></param>
+            <param><type>uint32_t</type> <name>instanceCount</name></param>
+            <param><type>uint32_t</type> <name>firstInstance</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+            <param optional="true">const <type>int32_t</type>* <name>pVertexOffset</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndirect</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>uint32_t</type> <name>drawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndexedIndirect</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>uint32_t</type> <name>drawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDispatch</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>groupCountX</name></param>
+            <param><type>uint32_t</type> <name>groupCountY</name></param>
+            <param><type>uint32_t</type> <name>groupCountZ</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDispatchIndirect</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdSubpassShadingHUAWEI</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawClusterHUAWEI</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>groupCountX</name></param>
+            <param><type>uint32_t</type> <name>groupCountY</name></param>
+            <param><type>uint32_t</type> <name>groupCountZ</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawClusterIndirectHUAWEI</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdUpdatePipelineIndirectBufferNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type>           <name>pipelineBindPoint</name></param>
+            <param><type>VkPipeline</type>                    <name>pipeline</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>srcBuffer</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkBufferCopy</type>* <name>pRegions</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>srcImage</name></param>
+            <param><type>VkImageLayout</type> <name>srcImageLayout</name></param>
+            <param><type>VkImage</type> <name>dstImage</name></param>
+            <param><type>VkImageLayout</type> <name>dstImageLayout</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkImageCopy</type>* <name>pRegions</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBlitImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>srcImage</name></param>
+            <param><type>VkImageLayout</type> <name>srcImageLayout</name></param>
+            <param><type>VkImage</type> <name>dstImage</name></param>
+            <param><type>VkImageLayout</type> <name>dstImageLayout</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkImageBlit</type>* <name>pRegions</name></param>
+            <param><type>VkFilter</type> <name>filter</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyBufferToImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>srcBuffer</name></param>
+            <param><type>VkImage</type> <name>dstImage</name></param>
+            <param><type>VkImageLayout</type> <name>dstImageLayout</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkBufferImageCopy</type>* <name>pRegions</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyImageToBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>srcImage</name></param>
+            <param><type>VkImageLayout</type> <name>srcImageLayout</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkBufferImageCopy</type>* <name>pRegions</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMemoryIndirectNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type> <name>copyBufferAddress</name></param>
+            <param><type>uint32_t</type> <name>copyCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMemoryToImageIndirectNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type> <name>copyBufferAddress</name></param>
+            <param><type>uint32_t</type> <name>copyCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+            <param><type>VkImage</type> <name>dstImage</name></param>
+            <param><type>VkImageLayout</type> <name>dstImageLayout</name></param>
+            <param len="copyCount">const <type>VkImageSubresourceLayers</type>* <name>pImageSubresources</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdUpdateBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>dstOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>dataSize</name></param>
+            <param len="dataSize">const <type>void</type>* <name>pData</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action" comment="transfer support is only available when VK_KHR_maintenance1 is enabled, as documented in valid usage language in the specification">
+            <proto><type>void</type> <name>vkCmdFillBuffer</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>dstOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>size</name></param>
+            <param><type>uint32_t</type> <name>data</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdClearColorImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>VkImageLayout</type> <name>imageLayout</name></param>
+            <param noautovalidity="true">const <type>VkClearColorValue</type>* <name>pColor</name></param>
+            <param><type>uint32_t</type> <name>rangeCount</name></param>
+            <param len="rangeCount">const <type>VkImageSubresourceRange</type>* <name>pRanges</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdClearDepthStencilImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>VkImageLayout</type> <name>imageLayout</name></param>
+            <param>const <type>VkClearDepthStencilValue</type>* <name>pDepthStencil</name></param>
+            <param><type>uint32_t</type> <name>rangeCount</name></param>
+            <param len="rangeCount">const <type>VkImageSubresourceRange</type>* <name>pRanges</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdClearAttachments</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>attachmentCount</name></param>
+            <param len="attachmentCount">const <type>VkClearAttachment</type>* <name>pAttachments</name></param>
+            <param><type>uint32_t</type> <name>rectCount</name></param>
+            <param len="rectCount">const <type>VkClearRect</type>* <name>pRects</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdResolveImage</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkImage</type> <name>srcImage</name></param>
+            <param><type>VkImageLayout</type> <name>srcImageLayout</name></param>
+            <param><type>VkImage</type> <name>dstImage</name></param>
+            <param><type>VkImageLayout</type> <name>dstImageLayout</name></param>
+            <param><type>uint32_t</type> <name>regionCount</name></param>
+            <param len="regionCount">const <type>VkImageResolve</type>* <name>pRegions</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="outside" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdSetEvent</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkEvent</type> <name>event</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>stageMask</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="outside" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdResetEvent</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkEvent</type> <name>event</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>stageMask</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdWaitEvents</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>eventCount</name></param>
+            <param len="eventCount">const <type>VkEvent</type>* <name>pEvents</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>srcStageMask</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>dstStageMask</name></param>
+            <param optional="true"><type>uint32_t</type> <name>memoryBarrierCount</name></param>
+            <param len="memoryBarrierCount">const <type>VkMemoryBarrier</type>* <name>pMemoryBarriers</name></param>
+            <param optional="true"><type>uint32_t</type> <name>bufferMemoryBarrierCount</name></param>
+            <param len="bufferMemoryBarrierCount">const <type>VkBufferMemoryBarrier</type>* <name>pBufferMemoryBarriers</name></param>
+            <param optional="true"><type>uint32_t</type> <name>imageMemoryBarrierCount</name></param>
+            <param len="imageMemoryBarrierCount">const <type>VkImageMemoryBarrier</type>* <name>pImageMemoryBarriers</name></param>
+        </command>
+        <command queues="transfer,graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdPipelineBarrier</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>srcStageMask</name></param>
+            <param optional="true"><type>VkPipelineStageFlags</type> <name>dstStageMask</name></param>
+            <param optional="true"><type>VkDependencyFlags</type> <name>dependencyFlags</name></param>
+            <param optional="true"><type>uint32_t</type> <name>memoryBarrierCount</name></param>
+            <param len="memoryBarrierCount">const <type>VkMemoryBarrier</type>* <name>pMemoryBarriers</name></param>
+            <param optional="true"><type>uint32_t</type> <name>bufferMemoryBarrierCount</name></param>
+            <param len="bufferMemoryBarrierCount">const <type>VkBufferMemoryBarrier</type>* <name>pBufferMemoryBarriers</name></param>
+            <param optional="true"><type>uint32_t</type> <name>imageMemoryBarrierCount</name></param>
+            <param len="imageMemoryBarrierCount">const <type>VkImageMemoryBarrier</type>* <name>pImageMemoryBarriers</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginQuery</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>query</name></param>
+            <param optional="true"><type>VkQueryControlFlags</type> <name>flags</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndQuery</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>query</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginConditionalRenderingEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkConditionalRenderingBeginInfoEXT</type>* <name>pConditionalRenderingBegin</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndConditionalRenderingEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode,opticalflow" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdResetQueryPool</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+            <param><type>uint32_t</type> <name>queryCount</name></param>
+        </command>
+        <command queues="transfer,graphics,compute,decode,encode,opticalflow" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteTimestamp</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineStageFlagBits</type> <name>pipelineStage</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>query</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyQueryPoolResults</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+            <param><type>uint32_t</type> <name>queryCount</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>dstOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>stride</name></param>
+            <param optional="true"><type>VkQueryResultFlags</type> <name>flags</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdPushConstants</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>VkShaderStageFlags</type> <name>stageFlags</name></param>
+            <param><type>uint32_t</type> <name>offset</name></param>
+            <param><type>uint32_t</type> <name>size</name></param>
+            <param len="size">const <type>void</type>* <name>pValues</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdBeginRenderPass</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkRenderPassBeginInfo</type>* <name>pRenderPassBegin</name></param>
+            <param><type>VkSubpassContents</type> <name>contents</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdNextSubpass</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkSubpassContents</type> <name>contents</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdEndRenderPass</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="indirection">
+            <proto><type>void</type> <name>vkCmdExecuteCommands</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>commandBufferCount</name></param>
+            <param len="commandBufferCount">const <type>VkCommandBuffer</type>* <name>pCommandBuffers</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateAndroidSurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkAndroidSurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayPropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayPropertiesKHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayPlanePropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayPlanePropertiesKHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDisplayPlaneSupportedDisplaysKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>planeIndex</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pDisplayCount</name></param>
+            <param optional="true" len="pDisplayCount"><type>VkDisplayKHR</type>* <name>pDisplays</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDisplayModePropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayModePropertiesKHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkCreateDisplayModeKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param externsync="true"><type>VkDisplayKHR</type> <name>display</name></param>
+            <param>const <type>VkDisplayModeCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDisplayModeKHR</type>* <name>pMode</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDisplayPlaneCapabilitiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param externsync="true"><type>VkDisplayModeKHR</type> <name>mode</name></param>
+            <param><type>uint32_t</type> <name>planeIndex</name></param>
+            <param><type>VkDisplayPlaneCapabilitiesKHR</type>* <name>pCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDisplayPlaneSurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkDisplaySurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,VK_ERROR_DEVICE_LOST,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkCreateSharedSwapchainsKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>swapchainCount</name></param>
+            <param api="vulkan" len="swapchainCount" externsync="pCreateInfos[].surface,pCreateInfos[].oldSwapchain">const <type>VkSwapchainCreateInfoKHR</type>* <name>pCreateInfos</name></param>
+            <param api="vulkansc" len="swapchainCount" externsync="pCreateInfos[].surface">const <type>VkSwapchainCreateInfoKHR</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="swapchainCount"><type>VkSwapchainKHR</type>* <name>pSwapchains</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroySurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param optional="true" externsync="true"><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceSupportKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param><type>VkBool32</type>* <name>pSupported</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceCapabilitiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param><type>VkSurfaceCapabilitiesKHR</type>* <name>pSurfaceCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceFormatsKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="true"><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSurfaceFormatCount</name></param>
+            <param optional="true" len="pSurfaceFormatCount"><type>VkSurfaceFormatKHR</type>* <name>pSurfaceFormats</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfacePresentModesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="true"><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPresentModeCount</name></param>
+            <param optional="true" len="pPresentModeCount"><type>VkPresentModeKHR</type>* <name>pPresentModes</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_COMPRESSION_EXHAUSTED_EXT">
+            <proto><type>VkResult</type> <name>vkCreateSwapchainKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param api="vulkan" externsync="pCreateInfo-&gt;surface,pCreateInfo-&gt;oldSwapchain">const <type>VkSwapchainCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param api="vulkansc" externsync="pCreateInfo-&gt;surface">const <type>VkSwapchainCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSwapchainKHR</type>* <name>pSwapchain</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroySwapchainKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetSwapchainImagesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSwapchainImageCount</name></param>
+            <param optional="true" len="pSwapchainImageCount"><type>VkImage</type>* <name>pSwapchainImages</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_TIMEOUT,VK_NOT_READY,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT">
+            <proto><type>VkResult</type> <name>vkAcquireNextImageKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param><type>uint64_t</type> <name>timeout</name></param>
+            <param optional="true" externsync="true"><type>VkSemaphore</type> <name>semaphore</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+            <param><type>uint32_t</type>* <name>pImageIndex</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT">
+            <proto><type>VkResult</type> <name>vkQueuePresentKHR</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param externsync="pPresentInfo-&gt;pWaitSemaphores[],pPresentInfo-&gt;pSwapchains[]">const <type>VkPresentInfoKHR</type>* <name>pPresentInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateViSurfaceNN</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkViSurfaceCreateInfoNN</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateWaylandSurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkWaylandSurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceWaylandPresentationSupportKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param>struct <type>wl_display</type>* <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateWin32SurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkWin32SurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceWin32PresentationSupportKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateXlibSurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkXlibSurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceXlibPresentationSupportKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param><type>Display</type>* <name>dpy</name></param>
+            <param><type>VisualID</type> <name>visualID</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateXcbSurfaceKHR</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkXcbSurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceXcbPresentationSupportKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param><type>xcb_connection_t</type>* <name>connection</name></param>
+            <param><type>xcb_visualid_t</type> <name>visual_id</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDirectFBSurfaceEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkDirectFBSurfaceCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceDirectFBPresentationSupportEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param><type>IDirectFB</type>* <name>dfb</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateImagePipeSurfaceFUCHSIA</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkImagePipeSurfaceCreateInfoFUCHSIA</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateStreamDescriptorSurfaceGGP</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkStreamDescriptorSurfaceCreateInfoGGP</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateScreenSurfaceQNX</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkScreenSurfaceCreateInfoQNX</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command>
+            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceScreenPresentationSupportQNX</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param>struct <type>_screen_window</type>* <name>window</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDebugReportCallbackEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkDebugReportCallbackCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDebugReportCallbackEXT</type>* <name>pCallback</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDebugReportCallbackEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param optional="true" externsync="true"><type>VkDebugReportCallbackEXT</type> <name>callback</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDebugReportMessageEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param><type>VkDebugReportFlagsEXT</type> <name>flags</name></param>
+            <param><type>VkDebugReportObjectTypeEXT</type> <name>objectType</name></param>
+            <param objecttype="objectType"><type>uint64_t</type> <name>object</name></param>
+            <param><type>size_t</type> <name>location</name></param>
+            <param><type>int32_t</type> <name>messageCode</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pLayerPrefix</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pMessage</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkDebugMarkerSetObjectNameEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pNameInfo-&gt;object">const <type>VkDebugMarkerObjectNameInfoEXT</type>* <name>pNameInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkDebugMarkerSetObjectTagEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pTagInfo-&gt;object">const <type>VkDebugMarkerObjectTagInfoEXT</type>* <name>pTagInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDebugMarkerBeginEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkDebugMarkerMarkerInfoEXT</type>* <name>pMarkerInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDebugMarkerEndEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDebugMarkerInsertEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkDebugMarkerMarkerInfoEXT</type>* <name>pMarkerInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceExternalImageFormatPropertiesNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkImageType</type> <name>type</name></param>
+            <param><type>VkImageTiling</type> <name>tiling</name></param>
+            <param><type>VkImageUsageFlags</type> <name>usage</name></param>
+            <param optional="true"><type>VkImageCreateFlags</type> <name>flags</name></param>
+            <param optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>externalHandleType</name></param>
+            <param><type>VkExternalImageFormatPropertiesNV</type>* <name>pExternalImageFormatProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryWin32HandleNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleType</name></param>
+            <param><type>HANDLE</type>* <name>pHandle</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action,indirection">
+            <proto><type>void</type> <name>vkCmdExecuteGeneratedCommandsNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>isPreprocessed</name></param>
+            <param>const <type>VkGeneratedCommandsInfoNV</type>* <name>pGeneratedCommandsInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdPreprocessGeneratedCommandsNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkGeneratedCommandsInfoNV</type>* <name>pGeneratedCommandsInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindPipelineShaderGroupNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>uint32_t</type> <name>groupIndex</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetGeneratedCommandsMemoryRequirementsNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkGeneratedCommandsMemoryRequirementsInfoNV</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateIndirectCommandsLayoutNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkIndirectCommandsLayoutCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkIndirectCommandsLayoutNV</type>* <name>pIndirectCommandsLayout</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyIndirectCommandsLayoutNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkIndirectCommandsLayoutNV</type> <name>indirectCommandsLayout</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceFeatures2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceFeatures2</type>* <name>pFeatures</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceFeatures2KHR"                        alias="vkGetPhysicalDeviceFeatures2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceProperties2</type>* <name>pProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceProperties2KHR"                      alias="vkGetPhysicalDeviceProperties2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceFormatProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkFormatProperties2</type>* <name>pFormatProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceFormatProperties2KHR"                alias="vkGetPhysicalDeviceFormatProperties2"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FORMAT_NOT_SUPPORTED,VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceImageFormatProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceImageFormatInfo2</type>* <name>pImageFormatInfo</name></param>
+            <param><type>VkImageFormatProperties2</type>* <name>pImageFormatProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceImageFormatProperties2KHR"           alias="vkGetPhysicalDeviceImageFormatProperties2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceQueueFamilyProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pQueueFamilyPropertyCount</name></param>
+            <param optional="true" len="pQueueFamilyPropertyCount"><type>VkQueueFamilyProperties2</type>* <name>pQueueFamilyProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceQueueFamilyProperties2KHR"           alias="vkGetPhysicalDeviceQueueFamilyProperties2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceMemoryProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkPhysicalDeviceMemoryProperties2</type>* <name>pMemoryProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceMemoryProperties2KHR"                alias="vkGetPhysicalDeviceMemoryProperties2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceSparseImageFormatProperties2</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceSparseImageFormatInfo2</type>* <name>pFormatInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkSparseImageFormatProperties2</type>* <name>pProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceSparseImageFormatProperties2KHR"     alias="vkGetPhysicalDeviceSparseImageFormatProperties2"/>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdPushDescriptorSetKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>set</name></param>
+            <param><type>uint32_t</type> <name>descriptorWriteCount</name></param>
+            <param len="descriptorWriteCount">const <type>VkWriteDescriptorSet</type>* <name>pDescriptorWrites</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkTrimCommandPool</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkCommandPool</type> <name>commandPool</name></param>
+            <param optional="true"><type>VkCommandPoolTrimFlags</type> <name>flags</name></param>
+        </command>
+        <command name="vkTrimCommandPoolKHR"                                   alias="vkTrimCommandPool"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceExternalBufferProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceExternalBufferInfo</type>* <name>pExternalBufferInfo</name></param>
+            <param><type>VkExternalBufferProperties</type>* <name>pExternalBufferProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceExternalBufferPropertiesKHR"         alias="vkGetPhysicalDeviceExternalBufferProperties"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryWin32HandleKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetWin32HandleInfoKHR</type>* <name>pGetWin32HandleInfo</name></param>
+            <param><type>HANDLE</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetMemoryWin32HandlePropertiesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></param>
+            <param><type>HANDLE</type> <name>handle</name></param>
+            <param><type>VkMemoryWin32HandlePropertiesKHR</type>* <name>pMemoryWin32HandleProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryFdKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetFdInfoKHR</type>* <name>pGetFdInfo</name></param>
+            <param><type>int</type>* <name>pFd</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetMemoryFdPropertiesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></param>
+            <param><type>int</type> <name>fd</name></param>
+            <param><type>VkMemoryFdPropertiesKHR</type>* <name>pMemoryFdProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryZirconHandleFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetZirconHandleInfoFUCHSIA</type>* <name>pGetZirconHandleInfo</name></param>
+            <param><type>zx_handle_t</type>* <name>pZirconHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetMemoryZirconHandlePropertiesFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></param>
+            <param><type>zx_handle_t</type> <name>zirconHandle</name></param>
+            <param><type>VkMemoryZirconHandlePropertiesFUCHSIA</type>* <name>pMemoryZirconHandleProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetMemoryRemoteAddressNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetRemoteAddressInfoNV</type>* <name>pMemoryGetRemoteAddressInfo</name></param>
+            <param><type>VkRemoteAddressNV</type>* <name>pAddress</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetMemorySciBufNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetSciBufInfoNV</type>* <name>pGetSciBufInfo</name></param>
+            <param><type>NvSciBufObj</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></param>
+            <param><type>NvSciBufObj</type> <name>handle</name></param>
+            <param><type>VkMemorySciBufPropertiesNV</type>* <name>pMemorySciBufProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSciBufAttributesNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>NvSciBufAttrList</type> <name>pAttributes</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceExternalSemaphoreProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceExternalSemaphoreInfo</type>* <name>pExternalSemaphoreInfo</name></param>
+            <param><type>VkExternalSemaphoreProperties</type>* <name>pExternalSemaphoreProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"      alias="vkGetPhysicalDeviceExternalSemaphoreProperties"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetSemaphoreWin32HandleKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreGetWin32HandleInfoKHR</type>* <name>pGetWin32HandleInfo</name></param>
+            <param><type>HANDLE</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkImportSemaphoreWin32HandleKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportSemaphoreWin32HandleInfoKHR</type>* <name>pImportSemaphoreWin32HandleInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetSemaphoreFdKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreGetFdInfoKHR</type>* <name>pGetFdInfo</name></param>
+            <param><type>int</type>* <name>pFd</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkImportSemaphoreFdKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportSemaphoreFdInfoKHR</type>* <name>pImportSemaphoreFdInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetSemaphoreZirconHandleFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreGetZirconHandleInfoFUCHSIA</type>* <name>pGetZirconHandleInfo</name></param>
+            <param><type>zx_handle_t</type>* <name>pZirconHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkImportSemaphoreZirconHandleFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportSemaphoreZirconHandleInfoFUCHSIA</type>* <name>pImportSemaphoreZirconHandleInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceExternalFenceProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceExternalFenceInfo</type>* <name>pExternalFenceInfo</name></param>
+            <param><type>VkExternalFenceProperties</type>* <name>pExternalFenceProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceExternalFencePropertiesKHR"          alias="vkGetPhysicalDeviceExternalFenceProperties"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetFenceWin32HandleKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFenceGetWin32HandleInfoKHR</type>* <name>pGetWin32HandleInfo</name></param>
+            <param><type>HANDLE</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkImportFenceWin32HandleKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportFenceWin32HandleInfoKHR</type>* <name>pImportFenceWin32HandleInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetFenceFdKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFenceGetFdInfoKHR</type>* <name>pGetFdInfo</name></param>
+            <param><type>int</type>* <name>pFd</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkImportFenceFdKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportFenceFdInfoKHR</type>* <name>pImportFenceFdInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT">
+            <proto><type>VkResult</type> <name>vkGetFenceSciSyncFenceNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFenceGetSciSyncInfoNV</type>* <name>pGetSciSyncHandleInfo</name></param>
+            <param><type>void</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT">
+            <proto><type>VkResult</type> <name>vkGetFenceSciSyncObjNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkFenceGetSciSyncInfoNV</type>* <name>pGetSciSyncHandleInfo</name></param>
+            <param><type>void</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT">
+            <proto><type>VkResult</type> <name>vkImportFenceSciSyncFenceNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportFenceSciSyncInfoNV</type>* <name>pImportFenceSciSyncInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT">
+            <proto><type>VkResult</type> <name>vkImportFenceSciSyncObjNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportFenceSciSyncInfoNV</type>* <name>pImportFenceSciSyncInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT">
+            <proto><type>VkResult</type> <name>vkGetSemaphoreSciSyncObjNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreGetSciSyncInfoNV</type>* <name>pGetSciSyncInfo</name></param>
+            <param><type>void</type>* <name>pHandle</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_NOT_PERMITTED_EXT,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkImportSemaphoreSciSyncObjNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImportSemaphoreSciSyncInfoNV</type>* <name>pImportSemaphoreSciSyncInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSciSyncAttributesNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkSciSyncAttributesInfoNV</type>* <name>pSciSyncAttributesInfo</name></param>
+            <param><type>NvSciSyncAttrList</type> <name>pAttributes</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateSemaphoreSciSyncPoolNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreSciSyncPoolCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSemaphoreSciSyncPoolNV</type>* <name>pSemaphorePool</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroySemaphoreSciSyncPoolNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkSemaphoreSciSyncPoolNV</type> <name>semaphorePool</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkReleaseDisplayEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkAcquireXlibDisplayEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>Display</type>* <name>dpy</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetRandROutputDisplayEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>Display</type>* <name>dpy</name></param>
+            <param><type>RROutput</type> <name>rrOutput</name></param>
+            <param><type>VkDisplayKHR</type>* <name>pDisplay</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkAcquireWinrtDisplayNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetWinrtDisplayNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>deviceRelativeId</name></param>
+            <param><type>VkDisplayKHR</type>* <name>pDisplay</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkDisplayPowerControlEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+            <param>const <type>VkDisplayPowerInfoEXT</type>* <name>pDisplayPowerInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkRegisterDeviceEventEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceEventInfoEXT</type>* <name>pDeviceEventInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkFence</type>* <name>pFence</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkRegisterDisplayEventEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+            <param>const <type>VkDisplayEventInfoEXT</type>* <name>pDisplayEventInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkFence</type>* <name>pFence</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR">
+            <proto><type>VkResult</type> <name>vkGetSwapchainCounterEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param><type>VkSurfaceCounterFlagBitsEXT</type> <name>counter</name></param>
+            <param><type>uint64_t</type>* <name>pCounterValue</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceCapabilities2EXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param><type>VkSurfaceCapabilities2EXT</type>* <name>pSurfaceCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkEnumeratePhysicalDeviceGroups</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPhysicalDeviceGroupCount</name></param>
+            <param optional="true" len="pPhysicalDeviceGroupCount"><type>VkPhysicalDeviceGroupProperties</type>* <name>pPhysicalDeviceGroupProperties</name></param>
+        </command>
+        <command name="vkEnumeratePhysicalDeviceGroupsKHR"                     alias="vkEnumeratePhysicalDeviceGroups"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceGroupPeerMemoryFeatures</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>heapIndex</name></param>
+            <param><type>uint32_t</type> <name>localDeviceIndex</name></param>
+            <param><type>uint32_t</type> <name>remoteDeviceIndex</name></param>
+            <param><type>VkPeerMemoryFeatureFlags</type>* <name>pPeerMemoryFeatures</name></param>
+        </command>
+        <command name="vkGetDeviceGroupPeerMemoryFeaturesKHR"                  alias="vkGetDeviceGroupPeerMemoryFeatures"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkBindBufferMemory2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>bindInfoCount</name></param>
+            <param len="bindInfoCount">const <type>VkBindBufferMemoryInfo</type>* <name>pBindInfos</name></param>
+        </command>
+        <command name="vkBindBufferMemory2KHR"                                 alias="vkBindBufferMemory2"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBindImageMemory2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>bindInfoCount</name></param>
+            <param len="bindInfoCount">const <type>VkBindImageMemoryInfo</type>* <name>pBindInfos</name></param>
+        </command>
+        <command name="vkBindImageMemory2KHR"                                  alias="vkBindImageMemory2"/>
+        <command queues="graphics,compute,transfer" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDeviceMask</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>deviceMask</name></param>
+        </command>
+        <command name="vkCmdSetDeviceMaskKHR"                                  alias="vkCmdSetDeviceMask"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDeviceGroupPresentCapabilitiesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeviceGroupPresentCapabilitiesKHR</type>* <name>pDeviceGroupPresentCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetDeviceGroupSurfacePresentModesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param optional="false,true"><type>VkDeviceGroupPresentModeFlagsKHR</type>* <name>pModes</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_TIMEOUT,VK_NOT_READY,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT">
+            <proto><type>VkResult</type> <name>vkAcquireNextImage2KHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAcquireNextImageInfoKHR</type>* <name>pAcquireInfo</name></param>
+            <param><type>uint32_t</type>* <name>pImageIndex</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDispatchBase</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>baseGroupX</name></param>
+            <param><type>uint32_t</type> <name>baseGroupY</name></param>
+            <param><type>uint32_t</type> <name>baseGroupZ</name></param>
+            <param><type>uint32_t</type> <name>groupCountX</name></param>
+            <param><type>uint32_t</type> <name>groupCountY</name></param>
+            <param><type>uint32_t</type> <name>groupCountZ</name></param>
+        </command>
+        <command name="vkCmdDispatchBaseKHR"                                   alias="vkCmdDispatchBase"/>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDevicePresentRectanglesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param externsync="true"><type>VkSurfaceKHR</type> <name>surface</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pRectCount</name></param>
+            <param optional="true" len="pRectCount"><type>VkRect2D</type>* <name>pRects</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDescriptorUpdateTemplate</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorUpdateTemplateCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDescriptorUpdateTemplate</type>* <name>pDescriptorUpdateTemplate</name></param>
+        </command>
+        <command name="vkCreateDescriptorUpdateTemplateKHR"                    alias="vkCreateDescriptorUpdateTemplate"/>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDescriptorUpdateTemplate</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkDescriptorUpdateTemplate</type> <name>descriptorUpdateTemplate</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command name="vkDestroyDescriptorUpdateTemplateKHR"                   alias="vkDestroyDescriptorUpdateTemplate"/>
+        <command>
+            <proto><type>void</type> <name>vkUpdateDescriptorSetWithTemplate</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDescriptorSet</type> <name>descriptorSet</name></param>
+            <param><type>VkDescriptorUpdateTemplate</type> <name>descriptorUpdateTemplate</name></param>
+            <param noautovalidity="true">const <type>void</type>* <name>pData</name></param>
+        </command>
+        <command name="vkUpdateDescriptorSetWithTemplateKHR"                   alias="vkUpdateDescriptorSetWithTemplate"/>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdPushDescriptorSetWithTemplateKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDescriptorUpdateTemplate</type> <name>descriptorUpdateTemplate</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>set</name></param>
+            <param noautovalidity="true">const <type>void</type>* <name>pData</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkSetHdrMetadataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>swapchainCount</name></param>
+            <param len="swapchainCount">const <type>VkSwapchainKHR</type>* <name>pSwapchains</name></param>
+            <param len="swapchainCount">const <type>VkHdrMetadataEXT</type>* <name>pMetadata</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT">
+            <proto><type>VkResult</type> <name>vkGetSwapchainStatusKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetRefreshCycleDurationGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param><type>VkRefreshCycleDurationGOOGLE</type>* <name>pDisplayTimingProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPastPresentationTimingGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPresentationTimingCount</name></param>
+            <param optional="true" len="pPresentationTimingCount"><type>VkPastPresentationTimingGOOGLE</type>* <name>pPresentationTimings</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateIOSSurfaceMVK</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkIOSSurfaceCreateInfoMVK</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateMacOSSurfaceMVK</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkMacOSSurfaceCreateInfoMVK</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR">
+            <proto><type>VkResult</type> <name>vkCreateMetalSurfaceEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkMetalSurfaceCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewportWScalingNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstViewport</name></param>
+            <param><type>uint32_t</type> <name>viewportCount</name></param>
+            <param len="viewportCount">const <type>VkViewportWScalingNV</type>* <name>pViewportWScalings</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDiscardRectangleEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstDiscardRectangle</name></param>
+            <param><type>uint32_t</type> <name>discardRectangleCount</name></param>
+            <param len="discardRectangleCount">const <type>VkRect2D</type>* <name>pDiscardRectangles</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDiscardRectangleEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>discardRectangleEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDiscardRectangleModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDiscardRectangleModeEXT</type> <name>discardRectangleMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetSampleLocationsEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkSampleLocationsInfoEXT</type>* <name>pSampleLocationsInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceMultisamplePropertiesEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkSampleCountFlagBits</type> <name>samples</name></param>
+            <param><type>VkMultisamplePropertiesEXT</type>* <name>pMultisampleProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceCapabilities2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
+            <param><type>VkSurfaceCapabilities2KHR</type>* <name>pSurfaceCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceFormats2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSurfaceFormatCount</name></param>
+            <param optional="true" len="pSurfaceFormatCount"><type>VkSurfaceFormat2KHR</type>* <name>pSurfaceFormats</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayProperties2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayProperties2KHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayPlaneProperties2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayPlaneProperties2KHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDisplayModeProperties2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkDisplayModeProperties2KHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDisplayPlaneCapabilities2KHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkDisplayPlaneInfo2KHR</type>* <name>pDisplayPlaneInfo</name></param>
+            <param><type>VkDisplayPlaneCapabilities2KHR</type>* <name>pCapabilities</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetBufferMemoryRequirements2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferMemoryRequirementsInfo2</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetBufferMemoryRequirements2KHR"                      alias="vkGetBufferMemoryRequirements2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetImageMemoryRequirements2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageMemoryRequirementsInfo2</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetImageMemoryRequirements2KHR"                       alias="vkGetImageMemoryRequirements2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetImageSparseMemoryRequirements2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageSparseMemoryRequirementsInfo2</type>* <name>pInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSparseMemoryRequirementCount</name></param>
+            <param optional="true" len="pSparseMemoryRequirementCount"><type>VkSparseImageMemoryRequirements2</type>* <name>pSparseMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetImageSparseMemoryRequirements2KHR"                 alias="vkGetImageSparseMemoryRequirements2"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceBufferMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceBufferMemoryRequirements</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetDeviceBufferMemoryRequirementsKHR" alias="vkGetDeviceBufferMemoryRequirements"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceImageMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceImageMemoryRequirements</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetDeviceImageMemoryRequirementsKHR" alias="vkGetDeviceImageMemoryRequirements"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceImageSparseMemoryRequirements</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceImageMemoryRequirements</type>* <name>pInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pSparseMemoryRequirementCount</name></param>
+            <param optional="true" len="pSparseMemoryRequirementCount"><type>VkSparseImageMemoryRequirements2</type>* <name>pSparseMemoryRequirements</name></param>
+        </command>
+        <command name="vkGetDeviceImageSparseMemoryRequirementsKHR" alias="vkGetDeviceImageSparseMemoryRequirements"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateSamplerYcbcrConversion</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSamplerYcbcrConversionCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSamplerYcbcrConversion</type>* <name>pYcbcrConversion</name></param>
+        </command>
+        <command name="vkCreateSamplerYcbcrConversionKHR"                      alias="vkCreateSamplerYcbcrConversion"/>
+        <command>
+            <proto><type>void</type> <name>vkDestroySamplerYcbcrConversion</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkSamplerYcbcrConversion</type> <name>ycbcrConversion</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command name="vkDestroySamplerYcbcrConversionKHR"                     alias="vkDestroySamplerYcbcrConversion"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceQueue2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceQueueInfo2</type>* <name>pQueueInfo</name></param>
+            <param><type>VkQueue</type>* <name>pQueue</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateValidationCacheEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkValidationCacheCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkValidationCacheEXT</type>* <name>pValidationCache</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyValidationCacheEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkValidationCacheEXT</type> <name>validationCache</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetValidationCacheDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkValidationCacheEXT</type> <name>validationCache</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pDataSize</name></param>
+            <param optional="true" len="pDataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkMergeValidationCachesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkValidationCacheEXT</type> <name>dstCache</name></param>
+            <param><type>uint32_t</type> <name>srcCacheCount</name></param>
+            <param len="srcCacheCount">const <type>VkValidationCacheEXT</type>* <name>pSrcCaches</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorSetLayoutSupport</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorSetLayoutCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param><type>VkDescriptorSetLayoutSupport</type>* <name>pSupport</name></param>
+        </command>
+        <command name="vkGetDescriptorSetLayoutSupportKHR"                     alias="vkGetDescriptorSetLayoutSupport"/>
+        <command>
+            <proto><type>VkResult</type> <name>vkGetSwapchainGrallocUsageANDROID</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkImageUsageFlags</type> <name>imageUsage</name></param>
+            <param><type>int</type>* <name>grallocUsage</name></param>
+        </command>
+        <command>
+            <proto><type>VkResult</type> <name>vkGetSwapchainGrallocUsage2ANDROID</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkImageUsageFlags</type> <name>imageUsage</name></param>
+            <param><type>VkSwapchainImageUsageFlagsANDROID</type> <name>swapchainImageUsage</name></param>
+            <param><type>uint64_t</type>* <name>grallocConsumerUsage</name></param>
+            <param><type>uint64_t</type>* <name>grallocProducerUsage</name></param>
+        </command>
+        <command>
+            <proto><type>VkResult</type> <name>vkAcquireImageANDROID</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>int</type> <name>nativeFenceFd</name></param>
+            <param><type>VkSemaphore</type> <name>semaphore</name></param>
+            <param><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command>
+            <proto><type>VkResult</type> <name>vkQueueSignalReleaseImageANDROID</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param><type>uint32_t</type> <name>waitSemaphoreCount</name></param>
+            <param len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>int</type>* <name>pNativeFenceFd</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_FEATURE_NOT_PRESENT,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetShaderInfoAMD</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>VkShaderStageFlagBits</type> <name>shaderStage</name></param>
+            <param><type>VkShaderInfoTypeAMD</type> <name>infoType</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pInfoSize</name></param>
+            <param optional="true" len="pInfoSize"><type>void</type>* <name>pInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkSetLocalDimmingAMD</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapChain</name></param>
+            <param><type>VkBool32</type> <name>localDimmingEnable</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceCalibrateableTimeDomainsEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pTimeDomainCount</name></param>
+            <param optional="true" len="pTimeDomainCount"><type>VkTimeDomainEXT</type>* <name>pTimeDomains</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetCalibratedTimestampsEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>timestampCount</name></param>
+            <param len="timestampCount">const <type>VkCalibratedTimestampInfoEXT</type>* <name>pTimestampInfos</name></param>
+            <param len="timestampCount"><type>uint64_t</type>* <name>pTimestamps</name></param>
+            <param><type>uint64_t</type>* <name>pMaxDeviation</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkSetDebugUtilsObjectNameEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pNameInfo-&gt;objectHandle">const <type>VkDebugUtilsObjectNameInfoEXT</type>* <name>pNameInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkSetDebugUtilsObjectTagEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pTagInfo-&gt;objectHandle">const <type>VkDebugUtilsObjectTagInfoEXT</type>* <name>pTagInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueBeginDebugUtilsLabelEXT</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param>const <type>VkDebugUtilsLabelEXT</type>* <name>pLabelInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueEndDebugUtilsLabelEXT</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueInsertDebugUtilsLabelEXT</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param>const <type>VkDebugUtilsLabelEXT</type>* <name>pLabelInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginDebugUtilsLabelEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkDebugUtilsLabelEXT</type>* <name>pLabelInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndDebugUtilsLabelEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdInsertDebugUtilsLabelEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkDebugUtilsLabelEXT</type>* <name>pLabelInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDebugUtilsMessengerEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkDebugUtilsMessengerCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDebugUtilsMessengerEXT</type>* <name>pMessenger</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDebugUtilsMessengerEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param optional="true" externsync="true"><type>VkDebugUtilsMessengerEXT</type> <name>messenger</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkSubmitDebugUtilsMessageEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param><type>VkDebugUtilsMessageSeverityFlagBitsEXT</type> <name>messageSeverity</name></param>
+            <param><type>VkDebugUtilsMessageTypeFlagsEXT</type> <name>messageTypes</name></param>
+            <param>const <type>VkDebugUtilsMessengerCallbackDataEXT</type>* <name>pCallbackData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE">
+            <proto><type>VkResult</type> <name>vkGetMemoryHostPointerPropertiesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></param>
+            <param>const <type>void</type>* <name>pHostPointer</name></param>
+            <param><type>VkMemoryHostPointerPropertiesEXT</type>* <name>pMemoryHostPointerProperties</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteBufferMarkerAMD</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkPipelineStageFlagBits</type> <name>pipelineStage</name></param>
+            <param><type>VkBuffer</type> <name>dstBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>dstOffset</name></param>
+            <param><type>uint32_t</type> <name>marker</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateRenderPass2</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkRenderPassCreateInfo2</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkRenderPass</type>* <name>pRenderPass</name></param>
+        </command>
+        <command name="vkCreateRenderPass2KHR"                                 alias="vkCreateRenderPass2"/>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdBeginRenderPass2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkRenderPassBeginInfo</type>*      <name>pRenderPassBegin</name></param>
+            <param>const <type>VkSubpassBeginInfo</type>*      <name>pSubpassBeginInfo</name></param>
+        </command>
+        <command name="vkCmdBeginRenderPass2KHR"                               alias="vkCmdBeginRenderPass2"/>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdNextSubpass2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkSubpassBeginInfo</type>*      <name>pSubpassBeginInfo</name></param>
+            <param>const <type>VkSubpassEndInfo</type>*        <name>pSubpassEndInfo</name></param>
+        </command>
+        <command name="vkCmdNextSubpass2KHR"                                   alias="vkCmdNextSubpass2"/>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" tasks="action,state,synchronization">
+            <proto><type>void</type> <name>vkCmdEndRenderPass2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkSubpassEndInfo</type>*        <name>pSubpassEndInfo</name></param>
+        </command>
+        <command name="vkCmdEndRenderPass2KHR"                                 alias="vkCmdEndRenderPass2"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkGetSemaphoreCounterValue</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSemaphore</type> <name>semaphore</name></param>
+            <param><type>uint64_t</type>* <name>pValue</name></param>
+        </command>
+        <command name="vkGetSemaphoreCounterValueKHR"              alias="vkGetSemaphoreCounterValue"/>
+        <command successcodes="VK_SUCCESS,VK_TIMEOUT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkWaitSemaphores</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreWaitInfo</type>* <name>pWaitInfo</name></param>
+            <param><type>uint64_t</type> <name>timeout</name></param>
+        </command>
+        <command name="vkWaitSemaphoresKHR"                        alias="vkWaitSemaphores"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkSignalSemaphore</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSemaphoreSignalInfo</type>* <name>pSignalInfo</name></param>
+        </command>
+        <command name="vkSignalSemaphoreKHR"                       alias="vkSignalSemaphore"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR">
+            <proto><type>VkResult</type> <name>vkGetAndroidHardwareBufferPropertiesANDROID</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const struct <type>AHardwareBuffer</type>* <name>buffer</name></param>
+            <param><type>VkAndroidHardwareBufferPropertiesANDROID</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryAndroidHardwareBufferANDROID</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryGetAndroidHardwareBufferInfoANDROID</type>* <name>pInfo</name></param>
+            <param>struct <type>AHardwareBuffer</type>** <name>pBuffer</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndirectCount</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkBuffer</type> <name>countBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
+            <param><type>uint32_t</type> <name>maxDrawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command name="vkCmdDrawIndirectCountKHR"                              alias="vkCmdDrawIndirectCount"/>
+        <command name="vkCmdDrawIndirectCountAMD"                              alias="vkCmdDrawIndirectCount"/>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndexedIndirectCount</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkBuffer</type> <name>countBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
+            <param><type>uint32_t</type> <name>maxDrawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command name="vkCmdDrawIndexedIndirectCountKHR"                       alias="vkCmdDrawIndexedIndirectCount"/>
+        <command name="vkCmdDrawIndexedIndirectCountAMD"                       alias="vkCmdDrawIndexedIndirectCount"/>
+        <command queues="graphics,compute,transfer" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdSetCheckpointNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param noautovalidity="true">const <type>void</type>* <name>pCheckpointMarker</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetQueueCheckpointDataNV</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pCheckpointDataCount</name></param>
+            <param optional="true" len="pCheckpointDataCount"><type>VkCheckpointDataNV</type>* <name>pCheckpointData</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindTransformFeedbackBuffersEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstBinding</name></param>
+            <param><type>uint32_t</type> <name>bindingCount</name></param>
+            <param len="bindingCount">const <type>VkBuffer</type>* <name>pBuffers</name></param>
+            <param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
+            <param optional="true" len="bindingCount" noautovalidity="true">const <type>VkDeviceSize</type>* <name>pSizes</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBeginTransformFeedbackEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstCounterBuffer</name></param>
+            <param optional="true"><type>uint32_t</type> <name>counterBufferCount</name></param>
+            <param noautovalidity="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
+            <param optional="true" len="counterBufferCount">const <type>VkDeviceSize</type>* <name>pCounterBufferOffsets</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdEndTransformFeedbackEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstCounterBuffer</name></param>
+            <param optional="true"><type>uint32_t</type> <name>counterBufferCount</name></param>
+            <param noautovalidity="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
+            <param optional="true" len="counterBufferCount">const <type>VkDeviceSize</type>* <name>pCounterBufferOffsets</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginQueryIndexedEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>query</name></param>
+            <param optional="true"><type>VkQueryControlFlags</type> <name>flags</name></param>
+            <param><type>uint32_t</type> <name>index</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndQueryIndexedEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>query</name></param>
+            <param><type>uint32_t</type> <name>index</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawIndirectByteCountEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>instanceCount</name></param>
+            <param><type>uint32_t</type> <name>firstInstance</name></param>
+            <param><type>VkBuffer</type> <name>counterBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>counterBufferOffset</name></param>
+            <param><type>uint32_t</type> <name>counterOffset</name></param>
+            <param><type>uint32_t</type> <name>vertexStride</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetExclusiveScissorNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstExclusiveScissor</name></param>
+            <param><type>uint32_t</type> <name>exclusiveScissorCount</name></param>
+            <param len="exclusiveScissorCount">const <type>VkRect2D</type>* <name>pExclusiveScissors</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetExclusiveScissorEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstExclusiveScissor</name></param>
+            <param><type>uint32_t</type> <name>exclusiveScissorCount</name></param>
+            <param len="exclusiveScissorCount">const <type>VkBool32</type>* <name>pExclusiveScissorEnables</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindShadingRateImageNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkImageView</type> <name>imageView</name></param>
+            <param><type>VkImageLayout</type> <name>imageLayout</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewportShadingRatePaletteNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstViewport</name></param>
+            <param><type>uint32_t</type> <name>viewportCount</name></param>
+            <param len="viewportCount">const <type>VkShadingRatePaletteNV</type>* <name>pShadingRatePalettes</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoarseSampleOrderNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCoarseSampleOrderTypeNV</type> <name>sampleOrderType</name></param>
+            <param optional="true"><type>uint32_t</type> <name>customSampleOrderCount</name></param>
+            <param len="customSampleOrderCount">const <type>VkCoarseSampleOrderCustomNV</type>* <name>pCustomSampleOrders</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>taskCount</name></param>
+            <param><type>uint32_t</type> <name>firstTask</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksIndirectNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>uint32_t</type> <name>drawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksIndirectCountNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkBuffer</type> <name>countBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
+            <param><type>uint32_t</type> <name>maxDrawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>groupCountX</name></param>
+            <param><type>uint32_t</type> <name>groupCountY</name></param>
+            <param><type>uint32_t</type> <name>groupCountZ</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksIndirectEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>uint32_t</type> <name>drawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDrawMeshTasksIndirectCountEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkBuffer</type> <name>countBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
+            <param><type>uint32_t</type> <name>maxDrawCount</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCompileDeferredNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>uint32_t</type> <name>shader</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateAccelerationStructureNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAccelerationStructureCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkAccelerationStructureNV</type>* <name>pAccelerationStructure</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindInvocationMaskHUAWEI</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkImageView</type> <name>imageView</name></param>
+            <param><type>VkImageLayout</type> <name>imageLayout</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyAccelerationStructureKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkAccelerationStructureKHR</type> <name>accelerationStructure</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyAccelerationStructureNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkAccelerationStructureNV</type> <name>accelerationStructure</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetAccelerationStructureMemoryRequirementsNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAccelerationStructureMemoryRequirementsInfoNV</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2KHR</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBindAccelerationStructureMemoryNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>bindInfoCount</name></param>
+            <param len="bindInfoCount">const <type>VkBindAccelerationStructureMemoryInfoNV</type>* <name>pBindInfos</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyAccelerationStructureNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkAccelerationStructureNV</type> <name>dst</name></param>
+            <param><type>VkAccelerationStructureNV</type> <name>src</name></param>
+            <param><type>VkCopyAccelerationStructureModeKHR</type> <name>mode</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyAccelerationStructureKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyAccelerationStructureInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyAccelerationStructureKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyAccelerationStructureInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyAccelerationStructureToMemoryKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyAccelerationStructureToMemoryInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyAccelerationStructureToMemoryKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyAccelerationStructureToMemoryInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMemoryToAccelerationStructureKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyMemoryToAccelerationStructureInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyMemoryToAccelerationStructureKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyMemoryToAccelerationStructureInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteAccelerationStructuresPropertiesKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>accelerationStructureCount</name></param>
+            <param len="accelerationStructureCount">const <type>VkAccelerationStructureKHR</type>* <name>pAccelerationStructures</name></param>
+            <param><type>VkQueryType</type> <name>queryType</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteAccelerationStructuresPropertiesNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>accelerationStructureCount</name></param>
+            <param len="accelerationStructureCount">const <type>VkAccelerationStructureNV</type>* <name>pAccelerationStructures</name></param>
+            <param><type>VkQueryType</type> <name>queryType</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBuildAccelerationStructureNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkAccelerationStructureInfoNV</type>* <name>pInfo</name></param>
+            <param optional="true"><type>VkBuffer</type> <name>instanceData</name></param>
+            <param><type>VkDeviceSize</type> <name>instanceOffset</name></param>
+            <param><type>VkBool32</type> <name>update</name></param>
+            <param><type>VkAccelerationStructureNV</type> <name>dst</name></param>
+            <param optional="true"><type>VkAccelerationStructureNV</type> <name>src</name></param>
+            <param><type>VkBuffer</type> <name>scratch</name></param>
+            <param><type>VkDeviceSize</type> <name>scratchOffset</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkWriteAccelerationStructuresPropertiesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>accelerationStructureCount</name></param>
+            <param len="accelerationStructureCount">const <type>VkAccelerationStructureKHR</type>* <name>pAccelerationStructures</name></param>
+            <param><type>VkQueryType</type>  <name>queryType</name></param>
+            <param><type>size_t</type>       <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+            <param><type>size_t</type> <name>stride</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdTraceRaysKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pRaygenShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pMissShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pHitShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pCallableShaderBindingTable</name></param>
+            <param><type>uint32_t</type> <name>width</name></param>
+            <param><type>uint32_t</type> <name>height</name></param>
+            <param><type>uint32_t</type> <name>depth</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdTraceRaysNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>raygenShaderBindingTableBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>raygenShaderBindingOffset</name></param>
+            <param optional="true"><type>VkBuffer</type> <name>missShaderBindingTableBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>missShaderBindingOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>missShaderBindingStride</name></param>
+            <param optional="true"><type>VkBuffer</type> <name>hitShaderBindingTableBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>hitShaderBindingOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>hitShaderBindingStride</name></param>
+            <param optional="true"><type>VkBuffer</type> <name>callableShaderBindingTableBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>callableShaderBindingOffset</name></param>
+            <param><type>VkDeviceSize</type> <name>callableShaderBindingStride</name></param>
+            <param><type>uint32_t</type> <name>width</name></param>
+            <param><type>uint32_t</type> <name>height</name></param>
+            <param><type>uint32_t</type> <name>depth</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetRayTracingShaderGroupHandlesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>uint32_t</type> <name>firstGroup</name></param>
+            <param><type>uint32_t</type> <name>groupCount</name></param>
+            <param><type>size_t</type> <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command name="vkGetRayTracingShaderGroupHandlesNV"                 alias="vkGetRayTracingShaderGroupHandlesKHR"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetRayTracingCaptureReplayShaderGroupHandlesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>uint32_t</type> <name>firstGroup</name></param>
+            <param><type>uint32_t</type> <name>groupCount</name></param>
+            <param><type>size_t</type> <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetAccelerationStructureHandleNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkAccelerationStructureNV</type> <name>accelerationStructure</name></param>
+            <param><type>size_t</type> <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_SHADER_NV">
+            <proto><type>VkResult</type> <name>vkCreateRayTracingPipelinesNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkRayTracingPipelineCreateInfoNV</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_NO_PIPELINE_MATCH,VK_ERROR_OUT_OF_POOL_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateRayTracingPipelinesNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkRayTracingPipelineCreateInfoNV</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkan" successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS">
+            <proto><type>VkResult</type> <name>vkCreateRayTracingPipelinesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param optional="true"><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkRayTracingPipelineCreateInfoKHR</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command api="vulkansc" successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,VK_ERROR_NO_PIPELINE_MATCH,VK_ERROR_OUT_OF_POOL_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateRayTracingPipelinesKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param><type>VkPipelineCache</type> <name>pipelineCache</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkRayTracingPipelineCreateInfoKHR</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceCooperativeMatrixPropertiesNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkCooperativeMatrixPropertiesNV</type>* <name>pProperties</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdTraceRaysIndirectKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pRaygenShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pMissShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pHitShaderBindingTable</name></param>
+            <param>const <type>VkStridedDeviceAddressRegionKHR</type>* <name>pCallableShaderBindingTable</name></param>
+            <param><type>VkDeviceAddress</type> <name>indirectDeviceAddress</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdTraceRaysIndirect2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type> <name>indirectDeviceAddress</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceAccelerationStructureCompatibilityKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAccelerationStructureVersionInfoKHR</type>* <name>pVersionInfo</name></param>
+            <param><type>VkAccelerationStructureCompatibilityKHR</type>* <name>pCompatibility</name></param>
+        </command>
+        <command>
+            <proto><type>VkDeviceSize</type> <name>vkGetRayTracingShaderGroupStackSizeKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPipeline</type> <name>pipeline</name></param>
+            <param><type>uint32_t</type> <name>group</name></param>
+            <param><type>VkShaderGroupShaderKHR</type> <name>groupShader</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetRayTracingPipelineStackSizeKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>pipelineStackSize</name></param>
+        </command>
+        <command>
+            <proto><type>uint32_t</type> <name>vkGetImageViewHandleNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageViewHandleInfoNVX</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_UNKNOWN">
+            <proto><type>VkResult</type> <name>vkGetImageViewAddressNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImageView</type> <name>imageView</name></param>
+            <param><type>VkImageViewAddressPropertiesNVX</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfacePresentModes2EXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPresentModeCount</name></param>
+            <param optional="true" len="pPresentModeCount"><type>VkPresentModeKHR</type>* <name>pPresentModes</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkGetDeviceGroupSurfacePresentModes2EXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
+            <param optional="false,true"><type>VkDeviceGroupPresentModeFlagsKHR</type>* <name>pModes</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkAcquireFullScreenExclusiveModeEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkReleaseFullScreenExclusiveModeEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pCounterCount</name></param>
+            <param optional="true" len="pCounterCount"><type>VkPerformanceCounterKHR</type>* <name>pCounters</name></param>
+            <param optional="true" len="pCounterCount"><type>VkPerformanceCounterDescriptionKHR</type>* <name>pCounterDescriptions</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkQueryPoolPerformanceCreateInfoKHR</type>* <name>pPerformanceQueryCreateInfo</name></param>
+            <param><type>uint32_t</type>* <name>pNumPasses</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_TIMEOUT">
+            <proto><type>VkResult</type> <name>vkAcquireProfilingLockKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAcquireProfilingLockInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkReleaseProfilingLockKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetImageDrmFormatModifierPropertiesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>VkImageDrmFormatModifierPropertiesEXT</type>* <name>pProperties</name></param>
+        </command>
+        <command>
+            <proto><type>uint64_t</type> <name>vkGetBufferOpaqueCaptureAddress</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferDeviceAddressInfo</type>* <name>pInfo</name></param>
+        </command>
+        <command name="vkGetBufferOpaqueCaptureAddressKHR" alias="vkGetBufferOpaqueCaptureAddress"/>
+        <command>
+            <proto><type>VkDeviceAddress</type> <name>vkGetBufferDeviceAddress</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferDeviceAddressInfo</type>* <name>pInfo</name></param>
+        </command>
+        <command name="vkGetBufferDeviceAddressKHR"        alias="vkGetBufferDeviceAddress"/>
+        <command name="vkGetBufferDeviceAddressEXT"        alias="vkGetBufferDeviceAddress"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateHeadlessSurfaceEXT</name></proto>
+            <param><type>VkInstance</type> <name>instance</name></param>
+            <param>const <type>VkHeadlessSurfaceCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pCombinationCount</name></param>
+            <param optional="true" len="pCombinationCount"><type>VkFramebufferMixedSamplesCombinationNV</type>* <name>pCombinations</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkInitializePerformanceApiINTEL</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkInitializePerformanceApiInfoINTEL</type>* <name>pInitializeInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkUninitializePerformanceApiINTEL</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+        </command>
+        <command queues="graphics,compute,transfer" renderpass="both" cmdbufferlevel="primary,secondary" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY" tasks="action,state">
+            <proto><type>VkResult</type> <name>vkCmdSetPerformanceMarkerINTEL</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkPerformanceMarkerInfoINTEL</type>* <name>pMarkerInfo</name></param>
+        </command>
+        <command queues="graphics,compute,transfer" renderpass="both" cmdbufferlevel="primary,secondary" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY" tasks="action,state">
+            <proto><type>VkResult</type> <name>vkCmdSetPerformanceStreamMarkerINTEL</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkPerformanceStreamMarkerInfoINTEL</type>* <name>pMarkerInfo</name></param>
+        </command>
+        <command queues="graphics,compute,transfer" renderpass="both" cmdbufferlevel="primary,secondary" successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY" tasks="state">
+            <proto><type>VkResult</type> <name>vkCmdSetPerformanceOverrideINTEL</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkPerformanceOverrideInfoINTEL</type>* <name>pOverrideInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkAcquirePerformanceConfigurationINTEL</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPerformanceConfigurationAcquireInfoINTEL</type>* <name>pAcquireInfo</name></param>
+            <param><type>VkPerformanceConfigurationINTEL</type>* <name>pConfiguration</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkReleasePerformanceConfigurationINTEL</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPerformanceConfigurationINTEL</type> <name>configuration</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkQueueSetPerformanceConfigurationINTEL</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param><type>VkPerformanceConfigurationINTEL</type> <name>configuration</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPerformanceParameterINTEL</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkPerformanceParameterTypeINTEL</type> <name>parameter</name></param>
+            <param><type>VkPerformanceValueINTEL</type>* <name>pValue</name></param>
+        </command>
+        <command>
+            <proto><type>uint64_t</type> <name>vkGetDeviceMemoryOpaqueCaptureAddress</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceMemoryOpaqueCaptureAddressInfo</type>* <name>pInfo</name></param>
+        </command>
+        <command name="vkGetDeviceMemoryOpaqueCaptureAddressKHR"        alias="vkGetDeviceMemoryOpaqueCaptureAddress"/>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPipelineExecutablePropertiesKHR</name></proto>
+            <param><type>VkDevice</type>                        <name>device</name></param>
+            <param>const <type>VkPipelineInfoKHR</type>*        <name>pPipelineInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pExecutableCount</name></param>
+            <param optional="true" len="pExecutableCount"><type>VkPipelineExecutablePropertiesKHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPipelineExecutableStatisticsKHR</name></proto>
+            <param><type>VkDevice</type>                        <name>device</name></param>
+            <param>const <type>VkPipelineExecutableInfoKHR</type>*  <name>pExecutableInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pStatisticCount</name></param>
+            <param optional="true" len="pStatisticCount"><type>VkPipelineExecutableStatisticKHR</type>* <name>pStatistics</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPipelineExecutableInternalRepresentationsKHR</name></proto>
+            <param><type>VkDevice</type>                        <name>device</name></param>
+            <param>const <type>VkPipelineExecutableInfoKHR</type>*  <name>pExecutableInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pInternalRepresentationCount</name></param>
+            <param optional="true" len="pInternalRepresentationCount"><type>VkPipelineExecutableInternalRepresentationKHR</type>* <name>pInternalRepresentations</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLineStippleEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>lineStippleFactor</name></param>
+            <param><type>uint16_t</type> <name>lineStipplePattern</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetFaultData</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFaultQueryBehavior</type> <name>faultQueryBehavior</name></param>
+            <param><type>VkBool32</type>* <name>pUnrecordedFaults</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pFaultCount</name></param>
+            <param optional="true" len="pFaultCount"><type>VkFaultData</type>* <name>pFaults</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceToolProperties</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pToolCount</name></param>
+            <param optional="true" len="pToolCount"><type>VkPhysicalDeviceToolProperties</type>* <name>pToolProperties</name></param>
+        </command>
+        <command name="vkGetPhysicalDeviceToolPropertiesEXT" alias="vkGetPhysicalDeviceToolProperties"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateAccelerationStructureKHR</name></proto>
+            <param><type>VkDevice</type>                                           <name>device</name></param>
+            <param>const <type>VkAccelerationStructureCreateInfoKHR</type>*        <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>*       <name>pAllocator</name></param>
+            <param><type>VkAccelerationStructureKHR</type>*                        <name>pAccelerationStructure</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBuildAccelerationStructuresKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                                    <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>infoCount</name></param>
+            <param len="infoCount">const <type>VkAccelerationStructureBuildGeometryInfoKHR</type>* <name>pInfos</name></param>
+            <param len="infoCount">const <type>VkAccelerationStructureBuildRangeInfoKHR</type>* const* <name>ppBuildRangeInfos</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBuildAccelerationStructuresIndirectKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                  <name>commandBuffer</name></param>
+            <param><type>uint32_t</type>                                           <name>infoCount</name></param>
+            <param len="infoCount">const <type>VkAccelerationStructureBuildGeometryInfoKHR</type>* <name>pInfos</name></param>
+            <param len="infoCount">const <type>VkDeviceAddress</type>*             <name>pIndirectDeviceAddresses</name></param>
+            <param len="infoCount">const <type>uint32_t</type>*                    <name>pIndirectStrides</name></param>
+            <param len="infoCount">const <type>uint32_t</type>* const*             <name>ppMaxPrimitiveCounts</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBuildAccelerationStructuresKHR</name></proto>
+            <param><type>VkDevice</type>                                           <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param><type>uint32_t</type> <name>infoCount</name></param>
+            <param len="infoCount">const <type>VkAccelerationStructureBuildGeometryInfoKHR</type>* <name>pInfos</name></param>
+            <param len="infoCount">const <type>VkAccelerationStructureBuildRangeInfoKHR</type>* const* <name>ppBuildRangeInfos</name></param>
+        </command>
+        <command>
+            <proto><type>VkDeviceAddress</type> <name>vkGetAccelerationStructureDeviceAddressKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAccelerationStructureDeviceAddressInfoKHR</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateDeferredOperationKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkDeferredOperationKHR</type>* <name>pDeferredOperation</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyDeferredOperationKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkDeferredOperationKHR</type> <name>operation</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>uint32_t</type> <name>vkGetDeferredOperationMaxConcurrencyKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeferredOperationKHR</type> <name>operation</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_NOT_READY">
+            <proto><type>VkResult</type> <name>vkGetDeferredOperationResultKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeferredOperationKHR</type> <name>operation</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_THREAD_DONE_KHR,VK_THREAD_IDLE_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkDeferredOperationJoinKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeferredOperationKHR</type> <name>operation</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPipelineIndirectMemoryRequirementsNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkComputePipelineCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command>
+            <proto><type>VkDeviceAddress</type> <name>vkGetPipelineIndirectDeviceAddressNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPipelineIndirectDeviceAddressInfoNV</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCullMode</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkCullModeFlags</type> <name>cullMode</name></param>
+        </command>
+        <command name="vkCmdSetCullModeEXT" alias="vkCmdSetCullMode"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetFrontFace</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkFrontFace</type> <name>frontFace</name></param>
+        </command>
+        <command name="vkCmdSetFrontFaceEXT" alias="vkCmdSetFrontFace"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetPrimitiveTopology</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPrimitiveTopology</type> <name>primitiveTopology</name></param>
+        </command>
+        <command name="vkCmdSetPrimitiveTopologyEXT" alias="vkCmdSetPrimitiveTopology"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewportWithCount</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>viewportCount</name></param>
+            <param len="viewportCount">const <type>VkViewport</type>* <name>pViewports</name></param>
+        </command>
+        <command name="vkCmdSetViewportWithCountEXT" alias="vkCmdSetViewportWithCount"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetScissorWithCount</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>scissorCount</name></param>
+            <param len="scissorCount">const <type>VkRect2D</type>* <name>pScissors</name></param>
+        </command>
+        <command name="vkCmdSetScissorWithCountEXT" alias="vkCmdSetScissorWithCount"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindIndexBuffer2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>VkDeviceSize</type> <name>offset</name></param>
+            <param><type>VkDeviceSize</type> <name>size</name></param>
+            <param><type>VkIndexType</type> <name>indexType</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindVertexBuffers2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstBinding</name></param>
+            <param><type>uint32_t</type> <name>bindingCount</name></param>
+            <param len="bindingCount" optional="false,true">const <type>VkBuffer</type>* <name>pBuffers</name></param>
+            <param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
+            <param optional="true" len="bindingCount">const <type>VkDeviceSize</type>* <name>pSizes</name></param>
+            <param optional="true" len="bindingCount">const <type>VkDeviceSize</type>* <name>pStrides</name></param>
+        </command>
+        <command name="vkCmdBindVertexBuffers2EXT" alias="vkCmdBindVertexBuffers2"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthTestEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthTestEnable</name></param>
+        </command>
+        <command name="vkCmdSetDepthTestEnableEXT" alias="vkCmdSetDepthTestEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthWriteEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthWriteEnable</name></param>
+        </command>
+        <command name="vkCmdSetDepthWriteEnableEXT" alias="vkCmdSetDepthWriteEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthCompareOp</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCompareOp</type> <name>depthCompareOp</name></param>
+        </command>
+        <command name="vkCmdSetDepthCompareOpEXT" alias="vkCmdSetDepthCompareOp"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthBoundsTestEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthBoundsTestEnable</name></param>
+        </command>
+        <command name="vkCmdSetDepthBoundsTestEnableEXT" alias="vkCmdSetDepthBoundsTestEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetStencilTestEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>stencilTestEnable</name></param>
+        </command>
+        <command name="vkCmdSetStencilTestEnableEXT" alias="vkCmdSetStencilTestEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetStencilOp</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkStencilFaceFlags</type> <name>faceMask</name></param>
+            <param><type>VkStencilOp</type> <name>failOp</name></param>
+            <param><type>VkStencilOp</type> <name>passOp</name></param>
+            <param><type>VkStencilOp</type> <name>depthFailOp</name></param>
+            <param><type>VkCompareOp</type> <name>compareOp</name></param>
+        </command>
+        <command name="vkCmdSetStencilOpEXT" alias="vkCmdSetStencilOp"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetPatchControlPointsEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>patchControlPoints</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetRasterizerDiscardEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>rasterizerDiscardEnable</name></param>
+        </command>
+        <command name="vkCmdSetRasterizerDiscardEnableEXT" alias="vkCmdSetRasterizerDiscardEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthBiasEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthBiasEnable</name></param>
+        </command>
+        <command name="vkCmdSetDepthBiasEnableEXT" alias="vkCmdSetDepthBiasEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLogicOpEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkLogicOp</type> <name>logicOp</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetPrimitiveRestartEnable</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>primitiveRestartEnable</name></param>
+        </command>
+        <command name="vkCmdSetPrimitiveRestartEnableEXT" alias="vkCmdSetPrimitiveRestartEnable"/>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetTessellationDomainOriginEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkTessellationDomainOrigin</type> <name>domainOrigin</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthClampEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthClampEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetPolygonModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPolygonMode</type> <name>polygonMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetRasterizationSamplesEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkSampleCountFlagBits</type>  <name>rasterizationSamples</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetSampleMaskEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkSampleCountFlagBits</type>  <name>samples</name></param>
+            <param len="latexmath:[\lceil{\mathit{samples} \over 32}\rceil]" altlen="(samples + 31) / 32">const <type>VkSampleMask</type>*    <name>pSampleMask</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetAlphaToCoverageEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>alphaToCoverageEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetAlphaToOneEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>alphaToOneEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLogicOpEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>logicOpEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetColorBlendEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstAttachment</name></param>
+            <param><type>uint32_t</type> <name>attachmentCount</name></param>
+            <param len="attachmentCount">const <type>VkBool32</type>* <name>pColorBlendEnables</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetColorBlendEquationEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstAttachment</name></param>
+            <param><type>uint32_t</type> <name>attachmentCount</name></param>
+            <param len="attachmentCount">const <type>VkColorBlendEquationEXT</type>* <name>pColorBlendEquations</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetColorWriteMaskEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstAttachment</name></param>
+            <param><type>uint32_t</type> <name>attachmentCount</name></param>
+            <param len="attachmentCount" optional="false,true">const <type>VkColorComponentFlags</type>* <name>pColorWriteMasks</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetRasterizationStreamEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>rasterizationStream</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetConservativeRasterizationModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkConservativeRasterizationModeEXT</type> <name>conservativeRasterizationMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetExtraPrimitiveOverestimationSizeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>float</type> <name>extraPrimitiveOverestimationSize</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthClipEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthClipEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetSampleLocationsEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>sampleLocationsEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetColorBlendAdvancedEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstAttachment</name></param>
+            <param><type>uint32_t</type> <name>attachmentCount</name></param>
+            <param len="attachmentCount">const <type>VkColorBlendAdvancedEXT</type>* <name>pColorBlendAdvanced</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetProvokingVertexModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkProvokingVertexModeEXT</type> <name>provokingVertexMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLineRasterizationModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkLineRasterizationModeEXT</type> <name>lineRasterizationMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetLineStippleEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>stippledLineEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthClipNegativeOneToOneEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>negativeOneToOne</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewportWScalingEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>viewportWScalingEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetViewportSwizzleNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>firstViewport</name></param>
+            <param><type>uint32_t</type> <name>viewportCount</name></param>
+            <param len="viewportCount">const <type>VkViewportSwizzleNV</type>* <name>pViewportSwizzles</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageToColorEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>coverageToColorEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageToColorLocationNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>coverageToColorLocation</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageModulationModeNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCoverageModulationModeNV</type> <name>coverageModulationMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageModulationTableEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>coverageModulationTableEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageModulationTableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>coverageModulationTableCount</name></param>
+            <param len="coverageModulationTableCount">const <type>float</type>* <name>pCoverageModulationTable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetShadingRateImageEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>shadingRateImageEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetCoverageReductionModeNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCoverageReductionModeNV</type> <name>coverageReductionMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetRepresentativeFragmentTestEnableNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>representativeFragmentTestEnable</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreatePrivateDataSlot</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPrivateDataSlotCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkPrivateDataSlot</type>* <name>pPrivateDataSlot</name></param>
+        </command>
+        <command name="vkCreatePrivateDataSlotEXT" alias="vkCreatePrivateDataSlot"/>
+        <command>
+            <proto><type>void</type> <name>vkDestroyPrivateDataSlot</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPrivateDataSlot</type> <name>privateDataSlot</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command name="vkDestroyPrivateDataSlotEXT" alias="vkDestroyPrivateDataSlot"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkSetPrivateData</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkObjectType</type> <name>objectType</name></param>
+            <param objecttype="objectType"><type>uint64_t</type> <name>objectHandle</name></param>
+            <param><type>VkPrivateDataSlot</type> <name>privateDataSlot</name></param>
+            <param><type>uint64_t</type> <name>data</name></param>
+        </command>
+        <command name="vkSetPrivateDataEXT" alias="vkSetPrivateData"/>
+        <command>
+            <proto><type>void</type> <name>vkGetPrivateData</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkObjectType</type> <name>objectType</name></param>
+            <param objecttype="objectType"><type>uint64_t</type> <name>objectHandle</name></param>
+            <param><type>VkPrivateDataSlot</type> <name>privateDataSlot</name></param>
+            <param><type>uint64_t</type>* <name>pData</name></param>
+        </command>
+        <command name="vkGetPrivateDataEXT" alias="vkGetPrivateData"/>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyBuffer2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyBufferInfo2</type>* <name>pCopyBufferInfo</name></param>
+        </command>
+        <command name="vkCmdCopyBuffer2KHR" alias="vkCmdCopyBuffer2"/>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyImage2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyImageInfo2</type>* <name>pCopyImageInfo</name></param>
+        </command>
+        <command name="vkCmdCopyImage2KHR" alias="vkCmdCopyImage2"/>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBlitImage2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkBlitImageInfo2</type>* <name>pBlitImageInfo</name></param>
+        </command>
+        <command name="vkCmdBlitImage2KHR" alias="vkCmdBlitImage2"/>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyBufferToImage2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyBufferToImageInfo2</type>* <name>pCopyBufferToImageInfo</name></param>
+        </command>
+        <command name="vkCmdCopyBufferToImage2KHR" alias="vkCmdCopyBufferToImage2"/>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyImageToBuffer2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyImageToBufferInfo2</type>* <name>pCopyImageToBufferInfo</name></param>
+        </command>
+        <command name="vkCmdCopyImageToBuffer2KHR" alias="vkCmdCopyImageToBuffer2"/>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdResolveImage2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkResolveImageInfo2</type>* <name>pResolveImageInfo</name></param>
+        </command>
+        <command name="vkCmdResolveImage2KHR" alias="vkCmdResolveImage2"/>
+        <command queues="graphics,compute,transfer" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdRefreshObjectsKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkRefreshObjectListKHR</type>* <name>pRefreshObjects</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceRefreshableObjectTypesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pRefreshableObjectTypeCount</name></param>
+            <param optional="true" len="pRefreshableObjectTypeCount"><type>VkObjectType</type>* <name>pRefreshableObjectTypes</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetFragmentShadingRateKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>           <name>commandBuffer</name></param>
+            <param>const <type>VkExtent2D</type>*                           <name>pFragmentSize</name></param>
+            <param>const <type>VkFragmentShadingRateCombinerOpKHR</type>    <name>combinerOps</name>[2]</param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceFragmentShadingRatesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pFragmentShadingRateCount</name></param>
+            <param optional="true" len="pFragmentShadingRateCount"><type>VkPhysicalDeviceFragmentShadingRateKHR</type>* <name>pFragmentShadingRates</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetFragmentShadingRateEnumNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>           <name>commandBuffer</name></param>
+            <param><type>VkFragmentShadingRateNV</type>                     <name>shadingRate</name></param>
+            <param>const <type>VkFragmentShadingRateCombinerOpKHR</type>    <name>combinerOps</name>[2]</param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetAccelerationStructureBuildSizesKHR</name></proto>
+            <param><type>VkDevice</type>                                            <name>device</name></param>
+            <param><type>VkAccelerationStructureBuildTypeKHR</type>                 <name>buildType</name></param>
+            <param>const <type>VkAccelerationStructureBuildGeometryInfoKHR</type>*  <name>pBuildInfo</name></param>
+            <param optional="true" len="pBuildInfo-&gt;geometryCount">const <type>uint32_t</type>*  <name>pMaxPrimitiveCounts</name></param>
+            <param><type>VkAccelerationStructureBuildSizesInfoKHR</type>*           <name>pSizeInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetVertexInputEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>uint32_t</type> <name>vertexBindingDescriptionCount</name></param>
+            <param len="vertexBindingDescriptionCount">const <type>VkVertexInputBindingDescription2EXT</type>* <name>pVertexBindingDescriptions</name></param>
+            <param optional="true"><type>uint32_t</type> <name>vertexAttributeDescriptionCount</name></param>
+            <param len="vertexAttributeDescriptionCount">const <type>VkVertexInputAttributeDescription2EXT</type>* <name>pVertexAttributeDescriptions</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type>                                    <name>vkCmdSetColorWriteEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>       <name>commandBuffer</name></param>
+            <param><type>uint32_t</type>                                <name>attachmentCount</name></param>
+            <param len="attachmentCount">const <type>VkBool32</type>*   <name>pColorWriteEnables</name></param>
+        </command>
+        <command queues="graphics,compute,decode,encode" renderpass="outside" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdSetEvent2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkEvent</type>                                             <name>event</name></param>
+            <param>const <type>VkDependencyInfo</type>*                             <name>pDependencyInfo</name></param>
+        </command>
+        <command name="vkCmdSetEvent2KHR" alias="vkCmdSetEvent2"/>
+        <command queues="graphics,compute,decode,encode" renderpass="outside" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdResetEvent2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkEvent</type>                                             <name>event</name></param>
+            <param optional="true"><type>VkPipelineStageFlags2</type>               <name>stageMask</name></param>
+        </command>
+        <command name="vkCmdResetEvent2KHR" alias="vkCmdResetEvent2"/>
+        <command queues="graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdWaitEvents2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>uint32_t</type>                                            <name>eventCount</name></param>
+            <param len="eventCount">const <type>VkEvent</type>*                     <name>pEvents</name></param>
+            <param len="eventCount">const <type>VkDependencyInfo</type>*            <name>pDependencyInfos</name></param>
+        </command>
+        <command name="vkCmdWaitEvents2KHR" alias="vkCmdWaitEvents2"/>
+        <command queues="transfer,graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="synchronization">
+            <proto><type>void</type> <name>vkCmdPipelineBarrier2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param>const <type>VkDependencyInfo</type>*                             <name>pDependencyInfo</name></param>
+        </command>
+        <command name="vkCmdPipelineBarrier2KHR" alias="vkCmdPipelineBarrier2"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <proto><type>VkResult</type> <name>vkQueueSubmit2</name></proto>
+            <param externsync="true"><type>VkQueue</type>                           <name>queue</name></param>
+            <param optional="true"><type>uint32_t</type>                            <name>submitCount</name></param>
+            <param len="submitCount">const <type>VkSubmitInfo2</type>*              <name>pSubmits</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type>           <name>fence</name></param>
+        </command>
+        <command name="vkQueueSubmit2KHR" alias="vkQueueSubmit2"/>
+        <command queues="transfer,graphics,compute,decode,encode" renderpass="both" videocoding="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteTimestamp2</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param optional="true"><type>VkPipelineStageFlags2</type>               <name>stage</name></param>
+            <param><type>VkQueryPool</type>                                         <name>queryPool</name></param>
+            <param><type>uint32_t</type>                                            <name>query</name></param>
+        </command>
+        <command name="vkCmdWriteTimestamp2KHR" alias="vkCmdWriteTimestamp2"/>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteBufferMarker2AMD</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param optional="true"><type>VkPipelineStageFlags2</type>               <name>stage</name></param>
+            <param><type>VkBuffer</type>                                            <name>dstBuffer</name></param>
+            <param><type>VkDeviceSize</type>                                        <name>dstOffset</name></param>
+            <param><type>uint32_t</type>                                            <name>marker</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetQueueCheckpointData2NV</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pCheckpointDataCount</name></param>
+            <param optional="true" len="pCheckpointDataCount"><type>VkCheckpointData2NV</type>* <name>pCheckpointData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkCopyMemoryToImageEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCopyMemoryToImageInfoEXT</type>* <name>pCopyMemoryToImageInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkCopyImageToMemoryEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCopyImageToMemoryInfoEXT</type>* <name>pCopyImageToMemoryInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkCopyImageToImageEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCopyImageToImageInfoEXT</type>* <name>pCopyImageToImageInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkTransitionImageLayoutEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>transitionCount</name></param>
+            <param len="transitionCount">const <type>VkHostImageLayoutTransitionInfoEXT</type>* <name>pTransitions</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetCommandPoolMemoryConsumption</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkCommandPool</type> <name>commandPool</name></param>
+            <param optional="true" externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCommandPoolMemoryConsumption</type>* <name>pConsumption</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceVideoCapabilitiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkVideoProfileInfoKHR</type>* <name>pVideoProfile</name></param>
+            <param><type>VkVideoCapabilitiesKHR</type>* <name>pCapabilities</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceVideoFormatPropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceVideoFormatInfoKHR</type>* <name>pVideoFormatInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pVideoFormatPropertyCount</name></param>
+            <param optional="true" len="pVideoFormatPropertyCount"><type>VkVideoFormatPropertiesKHR</type>* <name>pVideoFormatProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR,VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR</type>* <name>pQualityLevelInfo</name></param>
+            <param><type>VkVideoEncodeQualityLevelPropertiesKHR</type>* <name>pQualityLevelProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR,VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateVideoSessionKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkVideoSessionCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkVideoSessionKHR</type>* <name>pVideoSession</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyVideoSessionKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkVideoSessionKHR</type> <name>videoSession</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateVideoSessionParametersKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkVideoSessionParametersCreateInfoKHR</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkVideoSessionParametersKHR</type>* <name>pVideoSessionParameters</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR">
+            <proto><type>VkResult</type> <name>vkUpdateVideoSessionParametersKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkVideoSessionParametersKHR</type> <name>videoSessionParameters</name></param>
+            <param>const <type>VkVideoSessionParametersUpdateInfoKHR</type>* <name>pUpdateInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetEncodedVideoSessionParametersKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkVideoEncodeSessionParametersGetInfoKHR</type>* <name>pVideoSessionParametersInfo</name></param>
+            <param optional="true"><type>VkVideoEncodeSessionParametersFeedbackInfoKHR</type>* <name>pFeedbackInfo</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pDataSize</name></param>
+            <param optional="true" len="pDataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyVideoSessionParametersKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkVideoSessionParametersKHR</type> <name>videoSessionParameters</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE">
+            <proto><type>VkResult</type> <name>vkGetVideoSessionMemoryRequirementsKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkVideoSessionKHR</type> <name>videoSession</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pMemoryRequirementsCount</name></param>
+            <param optional="true" len="pMemoryRequirementsCount"><type>VkVideoSessionMemoryRequirementsKHR</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBindVideoSessionMemoryKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkVideoSessionKHR</type> <name>videoSession</name></param>
+            <param><type>uint32_t</type> <name>bindSessionMemoryInfoCount</name></param>
+            <param len="bindSessionMemoryInfoCount">const <type>VkBindVideoSessionMemoryInfoKHR</type>* <name>pBindSessionMemoryInfos</name></param>
+        </command>
+        <command queues="decode" renderpass="outside" videocoding="inside" cmdbufferlevel="primary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDecodeVideoKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoDecodeInfoKHR</type>* <name>pDecodeInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" videocoding="outside" cmdbufferlevel="primary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginVideoCodingKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoBeginCodingInfoKHR</type>* <name>pBeginInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" videocoding="inside" cmdbufferlevel="primary" tasks="action">
+            <proto><type>void</type> <name>vkCmdControlVideoCodingKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoCodingControlInfoKHR</type>* <name>pCodingControlInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" videocoding="inside" cmdbufferlevel="primary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndVideoCodingKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoEndCodingInfoKHR</type>* <name>pEndCodingInfo</name></param>
+        </command>
+        <command queues="encode" renderpass="outside" videocoding="inside" cmdbufferlevel="primary" tasks="action">
+            <proto><type>void</type> <name>vkCmdEncodeVideoKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoEncodeInfoKHR</type>* <name>pEncodeInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDecompressMemoryNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>decompressRegionCount</name></param>
+            <param len="decompressRegionCount">const <type>VkDecompressMemoryRegionNV</type>* <name>pDecompressMemoryRegions</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdDecompressMemoryIndirectCountNV</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type> <name>indirectCommandsAddress</name></param>
+            <param><type>VkDeviceAddress</type> <name>indirectCommandsCountAddress</name></param>
+            <param><type>uint32_t</type> <name>stride</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkCreateCuModuleNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCuModuleCreateInfoNVX</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkCuModuleNVX</type>* <name>pModule</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkCreateCuFunctionNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCuFunctionCreateInfoNVX</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkCuFunctionNVX</type>* <name>pFunction</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyCuModuleNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkCuModuleNVX</type> <name>module</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyCuFunctionNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkCuFunctionNVX</type> <name>function</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCuLaunchKernelNVX</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCuLaunchInfoNVX</type>* <name>pLaunchInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorSetLayoutSizeEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDescriptorSetLayout</type> <name>layout</name></param>
+            <param><type>VkDeviceSize</type>* <name>pLayoutSizeInBytes</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorSetLayoutBindingOffsetEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDescriptorSetLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>binding</name></param>
+            <param><type>VkDeviceSize</type>* <name>pOffset</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorGetInfoEXT</type>* <name>pDescriptorInfo</name></param>
+            <param><type>size_t</type> <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pDescriptor</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindDescriptorBuffersEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>bufferCount</name></param>
+            <param len="bufferCount">const <type>VkDescriptorBufferBindingInfoEXT</type>* <name>pBindingInfos</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDescriptorBufferOffsetsEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>firstSet</name></param>
+            <param><type>uint32_t</type> <name>setCount</name></param>
+            <param len="setCount">const <type>uint32_t</type>* <name>pBufferIndices</name></param>
+            <param len="setCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindDescriptorBufferEmbeddedSamplersEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPipelineBindPoint</type> <name>pipelineBindPoint</name></param>
+            <param><type>VkPipelineLayout</type> <name>layout</name></param>
+            <param><type>uint32_t</type> <name>set</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetBufferOpaqueCaptureDescriptorDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferCaptureDescriptorDataInfoEXT</type>* <name>pInfo</name></param>
+            <param><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetImageOpaqueCaptureDescriptorDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageCaptureDescriptorDataInfoEXT</type>* <name>pInfo</name></param>
+            <param><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetImageViewOpaqueCaptureDescriptorDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkImageViewCaptureDescriptorDataInfoEXT</type>* <name>pInfo</name></param>
+            <param><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetSamplerOpaqueCaptureDescriptorDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkSamplerCaptureDescriptorDataInfoEXT</type>* <name>pInfo</name></param>
+            <param><type>void</type>* <name>pData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkAccelerationStructureCaptureDescriptorDataInfoEXT</type>* <name>pInfo</name></param>
+            <param><type>void</type>* <name>pData</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkSetDeviceMemoryPriorityEXT</name></proto>
+            <param><type>VkDevice</type>       <name>device</name></param>
+            <param><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param><type>float</type>          <name>priority</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkAcquireDrmDisplayEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>int32_t</type> <name>drmFd</name></param>
+            <param><type>VkDisplayKHR</type> <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDrmDisplayEXT</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>int32_t</type> <name>drmFd</name></param>
+            <param><type>uint32_t</type> <name>connectorId</name></param>
+            <param><type>VkDisplayKHR</type>* <name>display</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_TIMEOUT,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR,VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT">
+            <proto><type>VkResult</type> <name>vkWaitForPresentKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param><type>uint64_t</type> <name>presentId</name></param>
+            <param><type>uint64_t</type> <name>timeout</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkCreateBufferCollectionFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkBufferCollectionCreateInfoFUCHSIA</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type>* <name>pCollection</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkSetBufferCollectionBufferConstraintsFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
+            <param>const <type>VkBufferConstraintsInfoFUCHSIA</type>* <name>pBufferConstraintsInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkSetBufferCollectionImageConstraintsFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
+            <param>const <type>VkImageConstraintsInfoFUCHSIA</type>* <name>pImageConstraintsInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyBufferCollectionFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetBufferCollectionPropertiesFUCHSIA</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
+            <param><type>VkBufferCollectionPropertiesFUCHSIA</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateCudaModuleNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCudaModuleCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkCudaModuleNV</type>* <name>pModule</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkGetCudaModuleCacheNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkCudaModuleNV</type> <name>module</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pCacheSize</name></param>
+            <param optional="true" len="pCacheSize"><type>void</type>* <name>pCacheData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateCudaFunctionNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkCudaFunctionCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkCudaFunctionNV</type>* <name>pFunction</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyCudaModuleNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkCudaModuleNV</type> <name>module</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyCudaFunctionNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkCudaFunctionNV</type> <name>function</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCudaLaunchKernelNV</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCudaLaunchInfoNV</type>* <name>pLaunchInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdBeginRendering</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param>const <type>VkRenderingInfo</type>*                              <name>pRenderingInfo</name></param>
+        </command>
+        <command name="vkCmdBeginRenderingKHR" alias="vkCmdBeginRendering"/>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" tasks="action,state">
+            <proto><type>void</type> <name>vkCmdEndRendering</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+        </command>
+
+        <command name="vkCmdEndRenderingKHR" alias="vkCmdEndRendering"/>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorSetLayoutHostMappingInfoVALVE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDescriptorSetBindingReferenceVALVE</type>* <name>pBindingReference</name></param>
+            <param><type>VkDescriptorSetLayoutHostMappingInfoVALVE</type>* <name>pHostMapping</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDescriptorSetHostMappingVALVE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDescriptorSet</type> <name>descriptorSet</name></param>
+            <param><type>void</type>** <name>ppData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR">
+            <proto><type>VkResult</type> <name>vkCreateMicromapEXT</name></proto>
+            <param><type>VkDevice</type>                                           <name>device</name></param>
+            <param>const <type>VkMicromapCreateInfoEXT</type>*        <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>*       <name>pAllocator</name></param>
+            <param><type>VkMicromapEXT</type>*                        <name>pMicromap</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdBuildMicromapsEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                                    <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>infoCount</name></param>
+            <param len="infoCount">const <type>VkMicromapBuildInfoEXT</type>* <name>pInfos</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkBuildMicromapsEXT</name></proto>
+            <param><type>VkDevice</type>                                           <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param><type>uint32_t</type> <name>infoCount</name></param>
+            <param len="infoCount">const <type>VkMicromapBuildInfoEXT</type>* <name>pInfos</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyMicromapEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkMicromapEXT</type> <name>micromap</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMicromapEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyMicromapInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyMicromapEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyMicromapInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMicromapToMemoryEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyMicromapToMemoryInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyMicromapToMemoryEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyMicromapToMemoryInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdCopyMemoryToMicromapEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyMemoryToMicromapInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_OPERATION_DEFERRED_KHR,VK_OPERATION_NOT_DEFERRED_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCopyMemoryToMicromapEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true"><type>VkDeferredOperationKHR</type> <name>deferredOperation</name></param>
+            <param>const <type>VkCopyMemoryToMicromapInfoEXT</type>* <name>pInfo</name></param>
+        </command>
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdWriteMicromapsPropertiesEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>micromapCount</name></param>
+            <param len="micromapCount">const <type>VkMicromapEXT</type>* <name>pMicromaps</name></param>
+            <param><type>VkQueryType</type> <name>queryType</name></param>
+            <param><type>VkQueryPool</type> <name>queryPool</name></param>
+            <param><type>uint32_t</type> <name>firstQuery</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkWriteMicromapsPropertiesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>micromapCount</name></param>
+            <param len="micromapCount">const <type>VkMicromapEXT</type>* <name>pMicromaps</name></param>
+            <param><type>VkQueryType</type>  <name>queryType</name></param>
+            <param><type>size_t</type>       <name>dataSize</name></param>
+            <param len="dataSize"><type>void</type>* <name>pData</name></param>
+            <param><type>size_t</type> <name>stride</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceMicromapCompatibilityEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMicromapVersionInfoEXT</type>* <name>pVersionInfo</name></param>
+            <param><type>VkAccelerationStructureCompatibilityKHR</type>* <name>pCompatibility</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetMicromapBuildSizesEXT</name></proto>
+            <param><type>VkDevice</type>                                            <name>device</name></param>
+            <param><type>VkAccelerationStructureBuildTypeKHR</type>                 <name>buildType</name></param>
+            <param>const <type>VkMicromapBuildInfoEXT</type>*  <name>pBuildInfo</name></param>
+            <param><type>VkMicromapBuildSizesInfoEXT</type>*           <name>pSizeInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetShaderModuleIdentifierEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkShaderModule</type> <name>shaderModule</name></param>
+            <param><type>VkShaderModuleIdentifierEXT</type>* <name>pIdentifier</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetShaderModuleCreateInfoIdentifierEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkShaderModuleCreateInfo</type>* <name>pCreateInfo</name></param>
+            <param><type>VkShaderModuleIdentifierEXT</type>* <name>pIdentifier</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetImageSubresourceLayout2KHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param>const <type>VkImageSubresource2KHR</type>* <name>pSubresource</name></param>
+            <param><type>VkSubresourceLayout2KHR</type>* <name>pLayout</name></param>
+        </command>
+        <command name="vkGetImageSubresourceLayout2EXT"        alias="vkGetImageSubresourceLayout2KHR"/>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPipelinePropertiesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPipelineInfoEXT</type>* <name>pPipelineInfo</name></param>
+            <param noautovalidity="true" validstructs="VkPipelinePropertiesIdentifierEXT"><type>VkBaseOutStructure</type>* <name>pPipelineProperties</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkExportMetalObjectsEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkExportMetalObjectsInfoEXT</type>* <name>pMetalObjectsInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE">
+            <proto><type>VkResult</type> <name>vkGetFramebufferTilePropertiesQCOM</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFramebuffer</type> <name>framebuffer</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertiesCount</name></param>
+            <param optional="true" len="pPropertiesCount"><type>VkTilePropertiesQCOM</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkGetDynamicRenderingTilePropertiesQCOM</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkRenderingInfo</type>* <name>pRenderingInfo</name></param>
+            <param><type>VkTilePropertiesQCOM</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceOpticalFlowImageFormatsNV</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkOpticalFlowImageFormatInfoNV</type>* <name>pOpticalFlowImageFormatInfo</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pFormatCount</name></param>
+            <param optional="true" len="pFormatCount"><type>VkOpticalFlowImageFormatPropertiesNV</type>* <name>pImageFormatProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkCreateOpticalFlowSessionNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkOpticalFlowSessionCreateInfoNV</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkOpticalFlowSessionNV</type>* <name>pSession</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyOpticalFlowSessionNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkOpticalFlowSessionNV</type> <name>session</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkBindOpticalFlowSessionImageNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkOpticalFlowSessionNV</type> <name>session</name></param>
+            <param><type>VkOpticalFlowSessionBindingPointNV</type> <name>bindingPoint</name></param>
+            <param optional="true"><type>VkImageView</type> <name>view</name></param>
+            <param><type>VkImageLayout</type> <name>layout</name></param>
+        </command>
+        <command queues="opticalflow" renderpass="outside" cmdbufferlevel="primary,secondary" tasks="action">
+            <proto><type>void</type> <name>vkCmdOpticalFlowExecuteNV</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkOpticalFlowSessionNV</type> <name>session</name></param>
+            <param>const <type>VkOpticalFlowExecuteInfoNV</type>* <name>pExecuteInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetDeviceFaultInfoEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkDeviceFaultCountsEXT</type>* <name>pFaultCounts</name></param>
+            <param optional="true"><type>VkDeviceFaultInfoEXT</type>* <name>pFaultInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdSetDepthBias2EXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkDepthBiasInfoEXT</type>*         <name>pDepthBiasInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_SURFACE_LOST_KHR">
+            <proto><type>VkResult</type> <name>vkReleaseSwapchainImagesEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkReleaseSwapchainImagesInfoEXT</type>* <name>pReleaseInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceImageSubresourceLayoutKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceImageSubresourceInfoKHR</type>* <name>pInfo</name></param>
+            <param><type>VkSubresourceLayout2KHR</type>* <name>pLayout</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED">
+            <proto><type>VkResult</type> <name>vkMapMemory2KHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryMapInfoKHR</type>* <name>pMemoryMapInfo</name></param>
+            <param optional="false,true"><type>void</type>** <name>ppData</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkUnmapMemory2KHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkMemoryUnmapInfoKHR</type>* <name>pMemoryUnmapInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT">
+            <proto><type>VkResult</type> <name>vkCreateShadersEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>uint32_t</type> <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkShaderCreateInfoEXT</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkShaderEXT</type>* <name>pShaders</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyShaderEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkShaderEXT</type> <name>shader</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetShaderBinaryDataEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkShaderEXT</type> <name>shader</name></param>
+            <param optional="false,true"><type>size_t</type>* <name>pDataSize</name></param>
+            <param optional="true" len="pDataSize"><type>void</type>* <name>pData</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" tasks="state">
+            <proto><type>void</type> <name>vkCmdBindShadersEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>stageCount</name></param>
+            <param len="stageCount">const <type>VkShaderStageFlagBits</type>* <name>pStages</name></param>
+            <param optional="true,true" len="stageCount">const <type>VkShaderEXT</type>* <name>pShaders</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR">
+            <proto><type>VkResult</type> <name>vkGetScreenBufferPropertiesQNX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const struct <type>_screen_buffer</type>* <name>buffer</name></param>
+            <param><type>VkScreenBufferPropertiesQNX</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
+            <param optional="true" len="pPropertyCount"><type>VkCooperativeMatrixPropertiesKHR</type>* <name>pProperties</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetExecutionGraphPipelineScratchSizeAMDX</name></proto>
+            <param><type>VkDevice</type>                                        <name>device</name></param>
+            <param><type>VkPipeline</type>                                      <name>executionGraph</name></param>
+            <param><type>VkExecutionGraphPipelineScratchSizeAMDX</type>*         <name>pSizeInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetExecutionGraphPipelineNodeIndexAMDX</name></proto>
+            <param><type>VkDevice</type>                                        <name>device</name></param>
+            <param><type>VkPipeline</type>                                      <name>executionGraph</name></param>
+            <param>const <type>VkPipelineShaderStageNodeCreateInfoAMDX</type>*   <name>pNodeInfo</name></param>
+            <param><type>uint32_t</type>*                                       <name>pNodeIndex</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS,VK_PIPELINE_COMPILE_REQUIRED_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateExecutionGraphPipelinesAMDX</name></proto>
+            <param><type>VkDevice</type>                                        <name>device</name></param>
+            <param optional="true"><type>VkPipelineCache</type>                 <name>pipelineCache</name></param>
+            <param><type>uint32_t</type>                                        <name>createInfoCount</name></param>
+            <param len="createInfoCount">const <type>VkExecutionGraphPipelineCreateInfoAMDX</type>* <name>pCreateInfos</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>*    <name>pAllocator</name></param>
+            <param len="createInfoCount"><type>VkPipeline</type>*               <name>pPipelines</name></param>
+        </command>
+        <command queues="graphics,compute" tasks="action" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdInitializeGraphScratchMemoryAMDX</name></proto>
+            <param><type>VkCommandBuffer</type>                                 <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type>                                 <name>scratch</name></param>
+        </command>
+        <command queues="graphics,compute" tasks="action" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdDispatchGraphAMDX</name></proto>
+            <param><type>VkCommandBuffer</type>                                 <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type>                                 <name>scratch</name></param>
+            <param>const <type>VkDispatchGraphCountInfoAMDX</type>*              <name>pCountInfo</name></param>
+        </command>
+        <command queues="graphics,compute" tasks="action" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdDispatchGraphIndirectAMDX</name></proto>
+            <param><type>VkCommandBuffer</type>                                 <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type>                                 <name>scratch</name></param>
+            <param>const <type>VkDispatchGraphCountInfoAMDX</type>*              <name>pCountInfo</name></param>
+        </command>
+        <command queues="graphics,compute" tasks="action" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdDispatchGraphIndirectCountAMDX</name></proto>
+            <param><type>VkCommandBuffer</type>                                 <name>commandBuffer</name></param>
+            <param><type>VkDeviceAddress</type>                                 <name>scratch</name></param>
+            <param><type>VkDeviceAddress</type>                                 <name>countInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <proto><type>VkResult</type> <name>vkSetLatencySleepModeNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param>const <type>VkLatencySleepModeInfoNV</type>* <name>pSleepModeInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_UNKNOWN">
+            <proto><type>VkResult</type> <name>vkLatencySleepNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param>const <type>VkLatencySleepInfoNV</type>* <name>pSleepInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkSetLatencyMarkerNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param>const <type>VkSetLatencyMarkerInfoNV</type>* <name>pLatencyMarkerInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetLatencyTimingsNV</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkSwapchainKHR</type> <name>swapchain</name></param>
+            <param><type>uint32_t</type>* <name>pTimingCount</name></param>
+            <param><type>VkGetLatencyMarkerInfoNV</type>* <name>pLatencyMarkerInfo</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueNotifyOutOfBandNV</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param>const <type>VkOutOfBandQueueTypeInfoNV</type>* <name>pQueueTypeInfo</name></param>
+        </command>
+    </commands>
+
+    <feature api="vulkan,vulkansc" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions">
+        <require comment="Header boilerplate">
+            <type name="vk_platform"/>
+            <type name="VK_DEFINE_HANDLE"/>
+            <type name="VK_USE_64_BIT_PTR_DEFINES"/>
+            <type name="VK_DEFINE_NON_DISPATCHABLE_HANDLE"/>
+            <type name="VK_NULL_HANDLE"/>
+        </require>
+        <require comment="Fundamental types used by many commands and structures">
+            <type name="VkBool32"/>
+            <type name="VkDeviceAddress"/>
+            <type name="VkDeviceSize"/>
+            <type name="VkExtent2D"/>
+            <type name="VkExtent3D"/>
+            <type name="VkFlags"/>
+            <type name="VkOffset2D"/>
+            <type name="VkOffset3D"/>
+            <type name="VkRect2D"/>
+            <type name="VkResult"/>
+            <type name="VkStructureType"/>
+        </require>
+        <require comment="API constants">
+            <enum name="VK_ATTACHMENT_UNUSED"/>
+            <enum name="VK_FALSE"/>
+            <enum name="VK_LOD_CLAMP_NONE"/>
+            <enum name="VK_QUEUE_FAMILY_IGNORED"/>
+            <enum name="VK_REMAINING_ARRAY_LAYERS"/>
+            <enum name="VK_REMAINING_MIP_LEVELS"/>
+            <enum name="VK_SUBPASS_EXTERNAL"/>
+            <enum name="VK_TRUE"/>
+            <enum name="VK_WHOLE_SIZE"/>
+            <enum name="VK_MAX_MEMORY_TYPES"/>
+            <enum name="VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"/>
+            <enum name="VK_UUID_SIZE"/>
+            <enum name="VK_MAX_EXTENSION_NAME_SIZE"/>
+            <enum name="VK_MAX_DESCRIPTION_SIZE"/>
+            <enum name="VK_MAX_MEMORY_HEAPS"/>
+            <type name="VkPipelineCacheHeaderVersion"/>
+        </require>
+        <require comment="These types are part of the API, though not directly used in API commands or data structures">
+            <type name="VkBaseInStructure"/>
+            <type name="VkBaseOutStructure"/>
+            <type name="VkBufferMemoryBarrier"/>
+            <type name="VkDispatchIndirectCommand"/>
+            <type name="VkDrawIndexedIndirectCommand"/>
+            <type name="VkDrawIndirectCommand"/>
+            <type name="VkImageMemoryBarrier"/>
+            <type name="VkMemoryBarrier"/>
+            <type name="VkObjectType"/>
+            <type name="VkPipelineCacheHeaderVersionOne"/>
+            <type name="VkVendorId"/>
+        </require>
+        <require comment="API version macros">
+            <type name="VK_API_VERSION"/>
+            <type name="VK_API_VERSION_1_0"/>
+            <type name="VK_HEADER_VERSION"/>
+            <type name="VK_HEADER_VERSION_COMPLETE"/>
+            <type name="VK_MAKE_VERSION"/>
+            <type name="VK_VERSION_MAJOR"/>
+            <type name="VK_VERSION_MINOR"/>
+            <type name="VK_VERSION_PATCH"/>
+            <type name="VK_MAKE_API_VERSION"/>
+            <type name="VK_API_VERSION_VARIANT"/>
+            <type name="VK_API_VERSION_MAJOR"/>
+            <type name="VK_API_VERSION_MINOR"/>
+            <type name="VK_API_VERSION_PATCH"/>
+        </require>
+        <require comment="Device initialization">
+            <type name="PFN_vkAllocationFunction"/>
+            <type name="PFN_vkFreeFunction"/>
+            <type name="PFN_vkInternalAllocationNotification"/>
+            <type name="PFN_vkInternalFreeNotification"/>
+            <type name="PFN_vkReallocationFunction"/>
+            <type name="PFN_vkVoidFunction"/>
+            <type name="VkAllocationCallbacks"/>
+            <type name="VkApplicationInfo"/>
+            <type name="VkFormat"/>
+            <type name="VkFormatFeatureFlagBits"/>
+            <type name="VkFormatFeatureFlags"/>
+            <type name="VkFormatProperties"/>
+            <type name="VkImageCreateFlagBits"/>
+            <type name="VkImageCreateFlags"/>
+            <type name="VkImageFormatProperties"/>
+            <type name="VkImageTiling"/>
+            <type name="VkImageType"/>
+            <type name="VkImageUsageFlagBits"/>
+            <type name="VkImageUsageFlags"/>
+            <type name="VkInstance"/>
+            <type name="VkInstanceCreateFlags"/>
+            <type name="VkInstanceCreateFlagBits"/>
+            <type name="VkInstanceCreateInfo"/>
+            <type name="VkInternalAllocationType"/>
+            <type name="VkMemoryHeap"/>
+            <type name="VkMemoryHeapFlagBits"/>
+            <type name="VkMemoryHeapFlags"/>
+            <type name="VkMemoryPropertyFlagBits"/>
+            <type name="VkMemoryPropertyFlags"/>
+            <type name="VkMemoryType"/>
+            <type name="VkPhysicalDevice"/>
+            <type name="VkPhysicalDeviceFeatures"/>
+            <type name="VkPhysicalDeviceLimits"/>
+            <type name="VkPhysicalDeviceMemoryProperties"/>
+            <type name="VkPhysicalDeviceProperties"/>
+            <type name="VkPhysicalDeviceSparseProperties"/>
+            <type name="VkPhysicalDeviceType"/>
+            <type name="VkQueueFamilyProperties"/>
+            <type name="VkQueueFlagBits"/>
+            <type name="VkQueueFlags"/>
+            <type name="VkSampleCountFlagBits"/>
+            <type name="VkSampleCountFlags"/>
+            <type name="VkSystemAllocationScope"/>
+            <command name="vkCreateInstance"/>
+            <command name="vkDestroyInstance"/>
+            <command name="vkEnumeratePhysicalDevices"/>
+            <command name="vkGetPhysicalDeviceFeatures"/>
+            <command name="vkGetPhysicalDeviceFormatProperties"/>
+            <command name="vkGetPhysicalDeviceImageFormatProperties"/>
+            <command name="vkGetPhysicalDeviceProperties"/>
+            <command name="vkGetPhysicalDeviceQueueFamilyProperties"/>
+            <command name="vkGetPhysicalDeviceMemoryProperties"/>
+            <command name="vkGetInstanceProcAddr"/>
+            <command name="vkGetDeviceProcAddr"/>
+        </require>
+        <require comment="Device commands">
+            <type name="VkDevice"/>
+            <type name="VkDeviceCreateFlags" comment="Will add VkDeviceCreateFlagBits when bits are defined in the future"/>
+            <type name="VkDeviceCreateInfo"/>
+            <type name="VkDeviceQueueCreateFlags" comment="VkDeviceQueueCreateFlagBits was added later"/>
+            <type name="VkDeviceQueueCreateInfo"/>
+            <command name="vkCreateDevice"/>
+            <command name="vkDestroyDevice"/>
+        </require>
+        <require comment="Extension discovery commands">
+            <type name="VkExtensionProperties"/>
+            <command name="vkEnumerateInstanceExtensionProperties"/>
+            <command name="vkEnumerateDeviceExtensionProperties"/>
+        </require>
+        <require comment="Layer discovery commands">
+            <type name="VkLayerProperties"/>
+            <command name="vkEnumerateInstanceLayerProperties"/>
+            <command name="vkEnumerateDeviceLayerProperties"/>
+        </require>
+        <require comment="Queue commands">
+            <type name="VkPipelineStageFlagBits"/>
+            <type name="VkPipelineStageFlags"/>
+            <type name="VkQueue"/>
+            <type name="VkSubmitInfo"/>
+            <command name="vkGetDeviceQueue"/>
+            <command name="vkQueueSubmit"/>
+            <command name="vkQueueWaitIdle"/>
+            <command name="vkDeviceWaitIdle"/>
+        </require>
+        <require comment="Memory commands">
+            <type name="VkMappedMemoryRange"/>
+            <type name="VkMemoryAllocateInfo"/>
+            <type name="VkMemoryMapFlags"/>
+            <command name="vkAllocateMemory"/>
+            <command name="vkFreeMemory"/>
+            <command name="vkMapMemory"/>
+            <command name="vkUnmapMemory"/>
+            <command name="vkFlushMappedMemoryRanges"/>
+            <command name="vkInvalidateMappedMemoryRanges"/>
+            <command name="vkGetDeviceMemoryCommitment"/>
+        </require>
+        <require comment="Memory management API commands">
+            <type name="VkDeviceMemory"/>
+            <type name="VkMemoryRequirements"/>
+            <command name="vkBindBufferMemory"/>
+            <command name="vkBindImageMemory"/>
+            <command name="vkGetBufferMemoryRequirements"/>
+            <command name="vkGetImageMemoryRequirements"/>
+        </require>
+        <require comment="Sparse resource memory management API commands">
+            <type name="VkBindSparseInfo"/>
+            <type name="VkImageAspectFlagBits"/>
+            <type name="VkImageAspectFlags"/>
+            <type name="VkImageSubresource"/>
+            <type name="VkSparseBufferMemoryBindInfo"/>
+            <type name="VkSparseImageFormatFlagBits"/>
+            <type name="VkSparseImageFormatFlags"/>
+            <type name="VkSparseImageFormatProperties"/>
+            <type name="VkSparseImageMemoryBind"/>
+            <type name="VkSparseImageMemoryBindInfo"/>
+            <type name="VkSparseImageMemoryRequirements"/>
+            <type name="VkSparseImageOpaqueMemoryBindInfo"/>
+            <type name="VkSparseMemoryBind"/>
+            <type name="VkSparseMemoryBindFlagBits"/>
+            <type name="VkSparseMemoryBindFlags"/>
+            <command name="vkGetImageSparseMemoryRequirements"/>
+            <command name="vkGetPhysicalDeviceSparseImageFormatProperties"/>
+            <command name="vkQueueBindSparse"/>
+        </require>
+        <require comment="Fence commands">
+            <type name="VkFence"/>
+            <type name="VkFenceCreateFlagBits"/>
+            <type name="VkFenceCreateFlags"/>
+            <type name="VkFenceCreateInfo"/>
+            <command name="vkCreateFence"/>
+            <command name="vkDestroyFence"/>
+            <command name="vkResetFences"/>
+            <command name="vkGetFenceStatus"/>
+            <command name="vkWaitForFences"/>
+        </require>
+        <require comment="Queue semaphore commands">
+            <type name="VkSemaphore"/>
+            <type name="VkSemaphoreCreateFlags" comment="Will add VkSemaphoreCreateFlagBits when bits are defined in the future"/>
+            <type name="VkSemaphoreCreateInfo"/>
+            <command name="vkCreateSemaphore"/>
+            <command name="vkDestroySemaphore"/>
+        </require>
+        <require comment="Event commands">
+            <type name="VkEvent"/>
+            <type name="VkEventCreateFlags"/>
+            <type name="VkEventCreateFlagBits"/>
+            <type name="VkEventCreateInfo"/>
+            <command name="vkCreateEvent"/>
+            <command name="vkDestroyEvent"/>
+            <command name="vkGetEventStatus"/>
+            <command name="vkSetEvent"/>
+            <command name="vkResetEvent"/>
+        </require>
+        <require comment="Query commands">
+            <type name="VkQueryPipelineStatisticFlagBits"/>
+            <type name="VkQueryPipelineStatisticFlags"/>
+            <type name="VkQueryPool"/>
+            <type name="VkQueryPoolCreateFlags" comment="Will add VkQueryPoolCreateFlagBits when bits are defined in the future"/>
+            <type name="VkQueryPoolCreateInfo"/>
+            <type name="VkQueryResultFlagBits"/>
+            <type name="VkQueryResultFlags"/>
+            <type name="VkQueryType"/>
+            <command name="vkCreateQueryPool"/>
+            <command name="vkDestroyQueryPool"/>
+            <command name="vkGetQueryPoolResults"/>
+        </require>
+        <require comment="Buffer commands">
+            <type name="VkBuffer"/>
+            <type name="VkBufferCreateFlagBits"/>
+            <type name="VkBufferCreateFlags"/>
+            <type name="VkBufferCreateInfo"/>
+            <type name="VkBufferUsageFlagBits"/>
+            <type name="VkBufferUsageFlags"/>
+            <type name="VkSharingMode"/>
+            <command name="vkCreateBuffer"/>
+            <command name="vkDestroyBuffer"/>
+        </require>
+        <require comment="Buffer view commands">
+            <type name="VkBufferView"/>
+            <type name="VkBufferViewCreateFlags" comment="Will add VkBufferViewFlagBits when bits are defined in the future"/>
+            <type name="VkBufferViewCreateInfo"/>
+            <command name="vkCreateBufferView"/>
+            <command name="vkDestroyBufferView"/>
+        </require>
+        <require comment="Image commands">
+            <type name="VkImage"/>
+            <type name="VkImageCreateInfo"/>
+            <type name="VkImageLayout"/>
+            <type name="VkSubresourceLayout"/>
+            <command name="vkCreateImage"/>
+            <command name="vkDestroyImage"/>
+            <command name="vkGetImageSubresourceLayout"/>
+        </require>
+        <require comment="Image view commands">
+            <type name="VkComponentMapping"/>
+            <type name="VkComponentSwizzle"/>
+            <type name="VkImageSubresourceRange"/>
+            <type name="VkImageView"/>
+            <type name="VkImageViewCreateFlagBits"/>
+            <type name="VkImageViewCreateFlags"/>
+            <type name="VkImageViewCreateInfo"/>
+            <type name="VkImageViewType"/>
+            <command name="vkCreateImageView"/>
+            <command name="vkDestroyImageView"/>
+        </require>
+        <require comment="Shader commands">
+            <type name="VkShaderModule"/>
+            <type name="VkShaderModuleCreateFlags"/>
+            <type name="VkShaderModuleCreateInfo"/>
+            <command name="vkCreateShaderModule"/>
+            <command name="vkDestroyShaderModule"/>
+        </require>
+        <require comment="Pipeline Cache commands">
+            <type name="VkPipelineCache"/>
+            <type name="VkPipelineCacheCreateFlags" comment="VkPipelineCacheCreateFlagBits was added later"/>
+            <type name="VkPipelineCacheCreateInfo"/>
+            <command name="vkCreatePipelineCache"/>
+            <command name="vkDestroyPipelineCache"/>
+            <command name="vkGetPipelineCacheData"/>
+            <command name="vkMergePipelineCaches"/>
+        </require>
+        <require comment="Pipeline commands">
+            <type name="VkBlendFactor"/>
+            <type name="VkBlendOp"/>
+            <type name="VkColorComponentFlagBits"/>
+            <type name="VkColorComponentFlags"/>
+            <type name="VkCompareOp"/>
+            <type name="VkComputePipelineCreateInfo"/>
+            <type name="VkCullModeFlagBits"/>
+            <type name="VkCullModeFlags"/>
+            <type name="VkDynamicState"/>
+            <type name="VkFrontFace"/>
+            <type name="VkGraphicsPipelineCreateInfo"/>
+            <type name="VkLogicOp"/>
+            <type name="VkPipeline"/>
+            <type name="VkPipelineColorBlendAttachmentState"/>
+            <type name="VkPipelineColorBlendStateCreateFlags" comment="Will add VkPipeline*StateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineColorBlendStateCreateInfo"/>
+            <type name="VkPipelineCreateFlagBits"/>
+            <type name="VkPipelineCreateFlags"/>
+            <type name="VkPipelineDepthStencilStateCreateFlags" comment="Will add VkPipeline*StateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineDepthStencilStateCreateInfo"/>
+            <type name="VkPipelineDynamicStateCreateFlags" comment="Will add VkPipeline*StateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineDynamicStateCreateInfo"/>
+            <type name="VkPipelineInputAssemblyStateCreateFlags" comment="Will add VkPipeline*StateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineInputAssemblyStateCreateInfo"/>
+            <type name="VkPipelineLayoutCreateFlags" comment="Will add VkPipelineLayoutCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineMultisampleStateCreateFlags" comment="Will add VkPipelineMultisampleStateCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineMultisampleStateCreateInfo"/>
+            <type name="VkPipelineRasterizationStateCreateFlags" comment="Will add VkPipelineRasterizationStateCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineRasterizationStateCreateInfo"/>
+            <type name="VkPipelineShaderStageCreateFlagBits"/>
+            <type name="VkPipelineShaderStageCreateFlags"/>
+            <type name="VkPipelineShaderStageCreateInfo"/>
+            <type name="VkPipelineTessellationStateCreateFlags" comment="Will add VkPipelineTessellationStateCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineTessellationStateCreateInfo"/>
+            <type name="VkPipelineVertexInputStateCreateFlags" comment="Will add VkPipelineVertexInputStateCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineVertexInputStateCreateInfo"/>
+            <type name="VkPipelineViewportStateCreateFlags" comment="Will add VkPipelineViewportStateCreateFlagBits when bits are defined in the future"/>
+            <type name="VkPipelineViewportStateCreateInfo"/>
+            <type name="VkPolygonMode"/>
+            <type name="VkPrimitiveTopology"/>
+            <type name="VkSampleMask"/>
+            <type name="VkShaderStageFlagBits"/>
+            <type name="VkShaderStageFlags"/>
+            <type name="VkSpecializationInfo"/>
+            <type name="VkSpecializationMapEntry"/>
+            <type name="VkStencilOp"/>
+            <type name="VkStencilOpState"/>
+            <type name="VkVertexInputAttributeDescription"/>
+            <type name="VkVertexInputBindingDescription"/>
+            <type name="VkVertexInputRate"/>
+            <type name="VkViewport"/>
+            <command name="vkCreateGraphicsPipelines"/>
+            <command name="vkCreateComputePipelines"/>
+            <command name="vkDestroyPipeline"/>
+        </require>
+        <require comment="Pipeline layout commands">
+            <type name="VkPipelineLayout"/>
+            <type name="VkPipelineLayoutCreateInfo"/>
+            <type name="VkPushConstantRange"/>
+            <command name="vkCreatePipelineLayout"/>
+            <command name="vkDestroyPipelineLayout"/>
+        </require>
+        <require comment="Sampler commands">
+            <type name="VkBorderColor"/>
+            <type name="VkFilter"/>
+            <type name="VkSampler"/>
+            <type name="VkSamplerAddressMode"/>
+            <type name="VkSamplerCreateFlagBits"/>
+            <type name="VkSamplerCreateFlags"/>
+            <type name="VkSamplerCreateInfo"/>
+            <type name="VkSamplerMipmapMode"/>
+            <command name="vkCreateSampler"/>
+            <command name="vkDestroySampler"/>
+        </require>
+        <require comment="Descriptor set commands">
+            <type name="VkCopyDescriptorSet"/>
+            <type name="VkDescriptorBufferInfo"/>
+            <type name="VkDescriptorImageInfo"/>
+            <type name="VkDescriptorPool"/>
+            <type name="VkDescriptorPoolCreateFlagBits"/>
+            <type name="VkDescriptorPoolCreateFlags"/>
+            <type name="VkDescriptorPoolCreateInfo"/>
+            <type name="VkDescriptorPoolResetFlags"/>
+            <type name="VkDescriptorPoolSize"/>
+            <type name="VkDescriptorSet"/>
+            <type name="VkDescriptorSetAllocateInfo"/>
+            <type name="VkDescriptorSetLayout"/>
+            <type name="VkDescriptorSetLayoutBinding"/>
+            <type name="VkDescriptorSetLayoutCreateFlagBits"/>
+            <type name="VkDescriptorSetLayoutCreateFlags"/>
+            <type name="VkDescriptorSetLayoutCreateInfo"/>
+            <type name="VkDescriptorType"/>
+            <type name="VkWriteDescriptorSet"/>
+            <command name="vkCreateDescriptorSetLayout"/>
+            <command name="vkDestroyDescriptorSetLayout"/>
+            <command name="vkCreateDescriptorPool"/>
+            <command name="vkDestroyDescriptorPool"/>
+            <command name="vkResetDescriptorPool"/>
+            <command name="vkAllocateDescriptorSets"/>
+            <command name="vkFreeDescriptorSets"/>
+            <command name="vkUpdateDescriptorSets"/>
+        </require>
+        <require comment="Pass commands">
+            <type name="VkAccessFlagBits"/>
+            <type name="VkAccessFlags"/>
+            <type name="VkAttachmentDescription"/>
+            <type name="VkAttachmentDescriptionFlagBits"/>
+            <type name="VkAttachmentDescriptionFlags"/>
+            <type name="VkAttachmentLoadOp"/>
+            <type name="VkAttachmentReference"/>
+            <type name="VkAttachmentStoreOp"/>
+            <type name="VkDependencyFlagBits"/>
+            <type name="VkDependencyFlags"/>
+            <type name="VkFramebuffer"/>
+            <type name="VkFramebufferCreateFlagBits"/>
+            <type name="VkFramebufferCreateFlags"/>
+            <type name="VkFramebufferCreateInfo"/>
+            <type name="VkPipelineBindPoint"/>
+            <type name="VkRenderPass"/>
+            <type name="VkRenderPassCreateFlagBits"/>
+            <type name="VkRenderPassCreateFlags"/>
+            <type name="VkRenderPassCreateInfo"/>
+            <type name="VkSubpassDependency"/>
+            <type name="VkSubpassDescription"/>
+            <type name="VkSubpassDescriptionFlagBits"/>
+            <type name="VkSubpassDescriptionFlags"/>
+            <command name="vkCreateFramebuffer"/>
+            <command name="vkDestroyFramebuffer"/>
+            <command name="vkCreateRenderPass"/>
+            <command name="vkDestroyRenderPass"/>
+            <command name="vkGetRenderAreaGranularity"/>
+        </require>
+        <require comment="Command pool commands">
+            <type name="VkCommandPool"/>
+            <type name="VkCommandPoolCreateFlagBits"/>
+            <type name="VkCommandPoolCreateFlags"/>
+            <type name="VkCommandPoolCreateInfo"/>
+            <type name="VkCommandPoolResetFlagBits"/>
+            <type name="VkCommandPoolResetFlags"/>
+            <command name="vkCreateCommandPool"/>
+            <command name="vkDestroyCommandPool"/>
+            <command name="vkResetCommandPool"/>
+        </require>
+        <require comment="Command buffer commands">
+            <type name="VkCommandBuffer"/>
+            <type name="VkCommandBufferAllocateInfo"/>
+            <type name="VkCommandBufferBeginInfo"/>
+            <type name="VkCommandBufferInheritanceInfo"/>
+            <type name="VkCommandBufferLevel"/>
+            <type name="VkCommandBufferResetFlagBits"/>
+            <type name="VkCommandBufferResetFlags"/>
+            <type name="VkCommandBufferUsageFlagBits"/>
+            <type name="VkCommandBufferUsageFlags"/>
+            <type name="VkQueryControlFlagBits"/>
+            <type name="VkQueryControlFlags"/>
+            <command name="vkAllocateCommandBuffers"/>
+            <command name="vkFreeCommandBuffers"/>
+            <command name="vkBeginCommandBuffer"/>
+            <command name="vkEndCommandBuffer"/>
+            <command name="vkResetCommandBuffer"/>
+        </require>
+        <require comment="Command buffer building commands">
+            <type name="VkBufferCopy"/>
+            <type name="VkBufferImageCopy"/>
+            <type name="VkClearAttachment"/>
+            <type name="VkClearColorValue"/>
+            <type name="VkClearDepthStencilValue"/>
+            <type name="VkClearRect"/>
+            <type name="VkClearValue"/>
+            <type name="VkImageBlit"/>
+            <type name="VkImageCopy"/>
+            <type name="VkImageResolve"/>
+            <type name="VkImageSubresourceLayers"/>
+            <type name="VkIndexType"/>
+            <type name="VkRenderPassBeginInfo"/>
+            <type name="VkStencilFaceFlagBits"/>
+            <type name="VkStencilFaceFlags"/>
+            <type name="VkSubpassContents"/>
+            <command name="vkCmdBindPipeline"/>
+            <command name="vkCmdSetViewport"/>
+            <command name="vkCmdSetScissor"/>
+            <command name="vkCmdSetLineWidth"/>
+            <command name="vkCmdSetDepthBias"/>
+            <command name="vkCmdSetBlendConstants"/>
+            <command name="vkCmdSetDepthBounds"/>
+            <command name="vkCmdSetStencilCompareMask"/>
+            <command name="vkCmdSetStencilWriteMask"/>
+            <command name="vkCmdSetStencilReference"/>
+            <command name="vkCmdBindDescriptorSets"/>
+            <command name="vkCmdBindIndexBuffer"/>
+            <command name="vkCmdBindVertexBuffers"/>
+            <command name="vkCmdDraw"/>
+            <command name="vkCmdDrawIndexed"/>
+            <command name="vkCmdDrawIndirect"/>
+            <command name="vkCmdDrawIndexedIndirect"/>
+            <command name="vkCmdDispatch"/>
+            <command name="vkCmdDispatchIndirect"/>
+            <command name="vkCmdCopyBuffer"/>
+            <command name="vkCmdCopyImage"/>
+            <command name="vkCmdBlitImage"/>
+            <command name="vkCmdCopyBufferToImage"/>
+            <command name="vkCmdCopyImageToBuffer"/>
+            <command name="vkCmdUpdateBuffer"/>
+            <command name="vkCmdFillBuffer"/>
+            <command name="vkCmdClearColorImage"/>
+            <command name="vkCmdClearDepthStencilImage"/>
+            <command name="vkCmdClearAttachments"/>
+            <command name="vkCmdResolveImage"/>
+            <command name="vkCmdSetEvent"/>
+            <command name="vkCmdResetEvent"/>
+            <command name="vkCmdWaitEvents"/>
+            <command name="vkCmdPipelineBarrier"/>
+            <command name="vkCmdBeginQuery"/>
+            <command name="vkCmdEndQuery"/>
+            <command name="vkCmdResetQueryPool"/>
+            <command name="vkCmdWriteTimestamp"/>
+            <command name="vkCmdCopyQueryPoolResults"/>
+            <command name="vkCmdPushConstants"/>
+            <command name="vkCmdBeginRenderPass"/>
+            <command name="vkCmdNextSubpass"/>
+            <command name="vkCmdEndRenderPass"/>
+            <command name="vkCmdExecuteCommands"/>
+        </require>
+    </feature>
+    <feature api="vulkan,vulkansc" name="VK_VERSION_1_1" number="1.1" comment="Vulkan 1.1 core API interface definitions.">
+        <require>
+            <type name="VK_API_VERSION_1_1"/>
+        </require>
+        <require comment="Device Initialization">
+            <command name="vkEnumerateInstanceVersion"/>
+        </require>
+        <require comment="Promoted from VK_KHR_relaxed_block_layout, which has no API"/>
+        <require comment="Promoted from VK_KHR_storage_buffer_storage_class, which has no API"/>
+        <require comment="Originally based on VK_KHR_subgroup (extension 94), but the actual enum block used was, incorrectly, that of extension 95">
+            <enum extends="VkStructureType" extnumber="95"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"/>
+            <type                                       name="VkPhysicalDeviceSubgroupProperties"/>
+            <type                                       name="VkSubgroupFeatureFlags"/>
+            <type                                       name="VkSubgroupFeatureFlagBits"/>
+        </require>
+        <require comment="Promoted from VK_KHR_bind_memory2">
+            <command name="vkBindBufferMemory2"/>
+            <command name="vkBindImageMemory2"/>
+            <enum extends="VkStructureType" extnumber="158" offset="0"          name="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"/>
+            <enum extends="VkStructureType" extnumber="158" offset="1"          name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"/>
+            <enum bitpos="10" extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_ALIAS_BIT"/>
+            <type name="VkBindBufferMemoryInfo"/>
+            <type name="VkBindImageMemoryInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_16bit_storage">
+            <enum extends="VkStructureType" extnumber="84"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"/>
+            <type name="VkPhysicalDevice16BitStorageFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_dedicated_allocation">
+            <enum extends="VkStructureType" extnumber="128" offset="0"          name="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"/>
+            <enum extends="VkStructureType" extnumber="128" offset="1"          name="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"/>
+            <type name="VkMemoryDedicatedRequirements"/>
+            <type name="VkMemoryDedicatedAllocateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_device_group">
+            <enum extends="VkStructureType" extnumber="61"  offset="0"          name="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"/>
+            <comment>offset 1 reserved for the old VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX enum</comment>
+            <comment>offset 2 reserved for the old VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX enum</comment>
+            <enum extends="VkStructureType" extnumber="61"  offset="3"          name="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"/>
+            <enum extends="VkStructureType" extnumber="61"  offset="4"          name="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"/>
+            <enum extends="VkStructureType" extnumber="61"  offset="5"          name="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"/>
+            <enum extends="VkStructureType" extnumber="61"  offset="6"          name="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"/>
+            <type name="VkPeerMemoryFeatureFlags"/>
+            <type name="VkPeerMemoryFeatureFlagBits"/>
+            <type name="VkMemoryAllocateFlags"/>
+            <type name="VkMemoryAllocateFlagBits"/>
+            <type name="VkMemoryAllocateFlagsInfo"/>
+            <type name="VkDeviceGroupRenderPassBeginInfo"/>
+            <type name="VkDeviceGroupCommandBufferBeginInfo"/>
+            <type name="VkDeviceGroupSubmitInfo"/>
+            <type name="VkDeviceGroupBindSparseInfo"/>
+            <command name="vkGetDeviceGroupPeerMemoryFeatures"/>
+            <command name="vkCmdSetDeviceMask"/>
+            <command name="vkCmdDispatchBase"/>
+            <enum bitpos="3"  extends="VkPipelineCreateFlagBits"                name="VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"/>
+            <enum bitpos="4"  extends="VkPipelineCreateFlagBits"                name="VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"/>
+            <enum extends="VkPipelineCreateFlagBits"                            name="VK_PIPELINE_CREATE_DISPATCH_BASE" alias="VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"/>
+            <enum bitpos="2"  extends="VkDependencyFlagBits"                    name="VK_DEPENDENCY_DEVICE_GROUP_BIT" comment="Dependency is across devices"/>
+        </require>
+        <require comment="Promoted from VK_KHR_device_group + VK_KHR_bind_memory2">
+            <enum extends="VkStructureType" extnumber="61"  offset="13"         name="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"/>
+            <enum extends="VkStructureType" extnumber="61"  offset="14"         name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"/>
+            <type name="VkBindBufferMemoryDeviceGroupInfo"/>
+            <type name="VkBindImageMemoryDeviceGroupInfo"/>
+            <enum bitpos="6"  extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT" comment="Allows using VkBindImageMemoryDeviceGroupInfo::pSplitInstanceBindRegions when binding memory to the image"/>
+        </require>
+        <require comment="Promoted from VK_KHR_device_group_creation">
+            <enum extends="VkStructureType" extnumber="71"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="71"  offset="1"          name="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"/>
+            <enum name="VK_MAX_DEVICE_GROUP_SIZE"/>
+            <type name="VkPhysicalDeviceGroupProperties"/>
+            <type name="VkDeviceGroupDeviceCreateInfo"/>
+            <command name="vkEnumeratePhysicalDeviceGroups"/>
+            <enum bitpos="1"  extends="VkMemoryHeapFlagBits"                    name="VK_MEMORY_HEAP_MULTI_INSTANCE_BIT" comment="If set, heap allocations allocate multiple instances by default"/>
+        </require>
+        <require comment="Promoted from VK_KHR_get_memory_requirements2">
+            <enum extends="VkStructureType" extnumber="147" offset="0"          name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"/>
+            <enum extends="VkStructureType" extnumber="147" offset="1"          name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"/>
+            <enum extends="VkStructureType" extnumber="147" offset="2"          name="VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"/>
+            <enum extends="VkStructureType" extnumber="147" offset="3"          name="VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"/>
+            <enum extends="VkStructureType" extnumber="147" offset="4"          name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"/>
+            <type name="VkBufferMemoryRequirementsInfo2"/>
+            <type name="VkImageMemoryRequirementsInfo2"/>
+            <type name="VkImageSparseMemoryRequirementsInfo2"/>
+            <type name="VkMemoryRequirements2"/>
+            <type name="VkSparseImageMemoryRequirements2"/>
+            <command name="vkGetImageMemoryRequirements2"/>
+            <command name="vkGetBufferMemoryRequirements2"/>
+            <command name="vkGetImageSparseMemoryRequirements2"/>
+        </require>
+        <require comment="Promoted from VK_KHR_get_physical_device_properties2">
+            <enum extends="VkStructureType" extnumber="60"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="1"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="2"          name="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="3"          name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="4"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="5"          name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="6"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="7"          name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"/>
+            <enum extends="VkStructureType" extnumber="60"  offset="8"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"/>
+            <type name="VkPhysicalDeviceFeatures2"/>
+            <type name="VkPhysicalDeviceProperties2"/>
+            <type name="VkFormatProperties2"/>
+            <type name="VkImageFormatProperties2"/>
+            <type name="VkPhysicalDeviceImageFormatInfo2"/>
+            <type name="VkQueueFamilyProperties2"/>
+            <type name="VkPhysicalDeviceMemoryProperties2"/>
+            <type name="VkSparseImageFormatProperties2"/>
+            <type name="VkPhysicalDeviceSparseImageFormatInfo2"/>
+            <command name="vkGetPhysicalDeviceFeatures2"/>
+            <command name="vkGetPhysicalDeviceProperties2"/>
+            <command name="vkGetPhysicalDeviceFormatProperties2"/>
+            <command name="vkGetPhysicalDeviceImageFormatProperties2"/>
+            <command name="vkGetPhysicalDeviceQueueFamilyProperties2"/>
+            <command name="vkGetPhysicalDeviceMemoryProperties2"/>
+            <command name="vkGetPhysicalDeviceSparseImageFormatProperties2"/>
+        </require>
+        <require comment="Promoted from VK_KHR_maintenance1">
+            <enum extends="VkResult"        extnumber="70"  offset="0"  dir="-" name="VK_ERROR_OUT_OF_POOL_MEMORY"/>
+            <enum bitpos="14" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_TRANSFER_SRC_BIT" comment="Format can be used as the source image of image transfer commands"/>
+            <enum bitpos="15" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_TRANSFER_DST_BIT" comment="Format can be used as the destination image of image transfer commands"/>
+            <enum bitpos="5"  extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT" comment="The 3D image can be viewed as a 2D or 2D array image"/>
+            <command name="vkTrimCommandPool"/>
+            <comment>Additional dependent types / tokens extending enumerants, not explicitly mentioned</comment>
+            <type name="VkCommandPoolTrimFlags"/>
+        </require>
+        <require comment="Promoted from VK_KHR_maintenance2">
+            <enum bitpos="7"  extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"/>
+            <enum bitpos="8"  extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"/>
+            <enum extends="VkStructureType" extnumber="118" offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="118" offset="1"          name="VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="118" offset="2"          name="VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="118" offset="3"          name="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"/>
+            <enum extends="VkImageLayout"   extnumber="118" offset="0"          name="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"/>
+            <enum extends="VkImageLayout"   extnumber="118" offset="1"          name="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"/>
+            <type name="VkPhysicalDevicePointClippingProperties"/>
+            <type name="VkPointClippingBehavior"/>
+            <type name="VkRenderPassInputAttachmentAspectCreateInfo"/>
+            <type name="VkInputAttachmentAspectReference"/>
+            <type name="VkImageViewUsageCreateInfo"/>
+            <type name="VkTessellationDomainOrigin"/>
+            <type name="VkPipelineTessellationDomainOriginStateCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_multiview">
+            <enum extends="VkStructureType" extnumber="54"  offset="0"          name="VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="54"  offset="1"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"/>
+            <enum extends="VkStructureType" extnumber="54"  offset="2"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"/>
+            <enum bitpos="1"  extends="VkDependencyFlagBits"                    name="VK_DEPENDENCY_VIEW_LOCAL_BIT"/>
+            <type name="VkRenderPassMultiviewCreateInfo"/>
+            <type name="VkPhysicalDeviceMultiviewFeatures"/>
+            <type name="VkPhysicalDeviceMultiviewProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_variable_pointers">
+            <enum extends="VkStructureType" extnumber="121" offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
+            <enum api="vulkan" extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
+            <type name="VkPhysicalDeviceVariablePointerFeatures"/>
+            <type name="VkPhysicalDeviceVariablePointersFeatures"/>
+        </require>
+        <require comment="Originally based on VK_KHR_protected_memory (extension 146), which was never published; thus the mystifying large value= numbers below. These are not aliased since they were not actually promoted from an extension.">
+            <enum extends="VkStructureType" extnumber="146" offset="0"          name="VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"/>
+            <enum extends="VkStructureType" extnumber="146" offset="1"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"/>
+            <enum extends="VkStructureType" extnumber="146" offset="2"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="146" offset="3"          name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"/>
+            <enum bitpos="4"  extends="VkQueueFlagBits"                         name="VK_QUEUE_PROTECTED_BIT" comment="Queues may support protected operations"/>
+            <enum bitpos="0"  extends="VkDeviceQueueCreateFlagBits"             name="VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT" comment="Queue is a protected-capable device queue"/>
+            <type name="VkDeviceQueueCreateFlagBits" comment="This is a temporary workaround for processors not recognizing that VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT above also requires this type"/>
+            <enum bitpos="5"  extends="VkMemoryPropertyFlagBits"                name="VK_MEMORY_PROPERTY_PROTECTED_BIT" comment="Memory is protected"/>
+            <enum bitpos="3"  extends="VkBufferCreateFlagBits"                  name="VK_BUFFER_CREATE_PROTECTED_BIT" comment="Buffer requires protected memory"/>
+            <enum bitpos="11" extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_PROTECTED_BIT" comment="Image requires protected memory"/>
+            <enum bitpos="2"  extends="VkCommandPoolCreateFlagBits"             name="VK_COMMAND_POOL_CREATE_PROTECTED_BIT" comment="Command buffers allocated from pool are protected command buffers"/>
+            <type name="VkPhysicalDeviceProtectedMemoryFeatures"/>
+            <type name="VkPhysicalDeviceProtectedMemoryProperties"/>
+            <type name="VkDeviceQueueInfo2"/>
+            <type name="VkProtectedSubmitInfo"/>
+            <command name="vkGetDeviceQueue2"/>
+        </require>
+        <require comment="Promoted from VK_KHR_sampler_ycbcr_conversion">
+            <enum extends="VkStructureType" extnumber="157" offset="0"          name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="157" offset="1"          name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"/>
+            <enum extends="VkStructureType" extnumber="157" offset="2"          name="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"/>
+            <enum extends="VkStructureType" extnumber="157" offset="3"          name="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"/>
+            <enum extends="VkStructureType" extnumber="157" offset="4"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"/>
+            <enum extends="VkStructureType" extnumber="157" offset="5"          name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"/>
+            <enum extends="VkObjectType"    extnumber="157" offset="0"          name="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"/>
+            <enum extends="VkFormat"        extnumber="157" offset="0"          name="VK_FORMAT_G8B8G8R8_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="1"          name="VK_FORMAT_B8G8R8G8_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="2"          name="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="3"          name="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="4"          name="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="5"          name="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="6"          name="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="7"          name="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="8"          name="VK_FORMAT_R10X6G10X6_UNORM_2PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="9"          name="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="10"         name="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="11"         name="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="12"         name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="13"         name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="14"         name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="15"         name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="16"         name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="17"         name="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="18"         name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="19"         name="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="20"         name="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="21"         name="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="22"         name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="23"         name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="24"         name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="25"         name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="26"         name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"/>
+            <enum extends="VkFormat"        extnumber="157" offset="27"         name="VK_FORMAT_G16B16G16R16_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="28"         name="VK_FORMAT_B16G16R16G16_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="29"         name="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="30"         name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="31"         name="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="32"         name="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM"/>
+            <enum extends="VkFormat"        extnumber="157" offset="33"         name="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM"/>
+            <enum bitpos="4"  extends="VkImageAspectFlagBits"                   name="VK_IMAGE_ASPECT_PLANE_0_BIT"/>
+            <enum bitpos="5"  extends="VkImageAspectFlagBits"                   name="VK_IMAGE_ASPECT_PLANE_1_BIT"/>
+            <enum bitpos="6"  extends="VkImageAspectFlagBits"                   name="VK_IMAGE_ASPECT_PLANE_2_BIT"/>
+            <enum bitpos="9"  extends="VkImageCreateFlagBits"                   name="VK_IMAGE_CREATE_DISJOINT_BIT"/>
+            <enum bitpos="17" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT" comment="Format can have midpoint rather than cosited chroma samples"/>
+            <enum bitpos="18" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT" comment="Format can be used with linear filtering whilst color conversion is enabled"/>
+            <enum bitpos="19" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT" comment="Format can have different chroma, min and mag filters"/>
+            <enum bitpos="20" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"/>
+            <enum bitpos="21" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"/>
+            <enum bitpos="22" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_DISJOINT_BIT" comment="Format supports disjoint planes"/>
+            <enum bitpos="23" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT" comment="Format can have cosited rather than midpoint chroma samples"/>
+            <type name="VkSamplerYcbcrConversionCreateInfo"/>
+            <type name="VkSamplerYcbcrConversionInfo"/>
+            <type name="VkBindImagePlaneMemoryInfo"/>
+            <type name="VkImagePlaneMemoryRequirementsInfo"/>
+            <type name="VkPhysicalDeviceSamplerYcbcrConversionFeatures"/>
+            <type name="VkSamplerYcbcrConversionImageFormatProperties"/>
+            <command name="vkCreateSamplerYcbcrConversion"/>
+            <command name="vkDestroySamplerYcbcrConversion"/>
+            <comment>Additional dependent types / tokens extending enumerants, not explicitly mentioned</comment>
+            <type name="VkSamplerYcbcrConversion"/>
+            <type name="VkSamplerYcbcrModelConversion"/>
+            <type name="VkSamplerYcbcrRange"/>
+            <type name="VkChromaLocation"/>
+        </require>
+        <require comment="Promoted from VK_KHR_descriptor_update_template">
+            <enum extends="VkStructureType" extnumber="86"  offset="0"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"/>
+            <enum extends="VkObjectType"    extnumber="86"  offset="0"          name="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"/>
+            <command name="vkCreateDescriptorUpdateTemplate"/>
+            <command name="vkDestroyDescriptorUpdateTemplate"/>
+            <command name="vkUpdateDescriptorSetWithTemplate"/>
+            <type name="VkDescriptorUpdateTemplate"/>
+            <type name="VkDescriptorUpdateTemplateCreateFlags"/>
+            <type name="VkDescriptorUpdateTemplateType"/>
+            <type name="VkDescriptorUpdateTemplateEntry"/>
+            <type name="VkDescriptorUpdateTemplateCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_memory_capabilities">
+            <enum extends="VkStructureType" extnumber="72"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"/>
+            <enum extends="VkStructureType" extnumber="72"  offset="1"          name="VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="72"  offset="2"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"/>
+            <enum extends="VkStructureType" extnumber="72"  offset="3"          name="VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="72"  offset="4"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
+            <enum name="VK_LUID_SIZE"/>
+            <type name="VkExternalMemoryHandleTypeFlags"/>
+            <type name="VkExternalMemoryHandleTypeFlagBits"/>
+            <type name="VkExternalMemoryFeatureFlags"/>
+            <type name="VkExternalMemoryFeatureFlagBits"/>
+            <type name="VkExternalMemoryProperties"/>
+            <type name="VkPhysicalDeviceExternalImageFormatInfo"/>
+            <type name="VkExternalImageFormatProperties"/>
+            <type name="VkPhysicalDeviceExternalBufferInfo"/>
+            <type name="VkExternalBufferProperties"/>
+            <type name="VkPhysicalDeviceIDProperties"/>
+            <command name="vkGetPhysicalDeviceExternalBufferProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_memory">
+            <enum extends="VkStructureType" extnumber="73"  offset="0"          name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="73"  offset="1"          name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"/>
+            <enum extends="VkStructureType" extnumber="73"  offset="2"          name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"/>
+            <enum extends="VkResult"        extnumber="73"  offset="3"  dir="-" name="VK_ERROR_INVALID_EXTERNAL_HANDLE"/>
+            <enum name="VK_QUEUE_FAMILY_EXTERNAL"/>
+            <type name="VkExternalMemoryImageCreateInfo"/>
+            <type name="VkExternalMemoryBufferCreateInfo"/>
+            <type name="VkExportMemoryAllocateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_fence_capabilities">
+            <enum extends="VkStructureType" extnumber="113" offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"/>
+            <enum extends="VkStructureType" extnumber="113" offset="1"          name="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"/>
+            <type name="VkExternalFenceHandleTypeFlags"/>
+            <type name="VkExternalFenceHandleTypeFlagBits"/>
+            <type name="VkExternalFenceFeatureFlags"/>
+            <type name="VkExternalFenceFeatureFlagBits"/>
+            <type name="VkPhysicalDeviceExternalFenceInfo"/>
+            <type name="VkExternalFenceProperties"/>
+            <command name="vkGetPhysicalDeviceExternalFenceProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_fence">
+            <enum extends="VkStructureType" extnumber="114" offset="0"          name="VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"/>
+            <type name="VkFenceImportFlags"/>
+            <type name="VkFenceImportFlagBits"/>
+            <type name="VkExportFenceCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_semaphore">
+            <enum extends="VkStructureType" extnumber="78"  offset="0"          name="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"/>
+            <type name="VkSemaphoreImportFlags"/>
+            <type name="VkSemaphoreImportFlagBits"/>
+            <type name="VkExportSemaphoreCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_external_semaphore_capabilities">
+            <enum extends="VkStructureType" extnumber="77"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"/>
+            <enum extends="VkStructureType" extnumber="77"  offset="1"          name="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"/>
+            <type name="VkExternalSemaphoreHandleTypeFlags"/>
+            <type name="VkExternalSemaphoreHandleTypeFlagBits"/>
+            <type name="VkExternalSemaphoreFeatureFlags"/>
+            <type name="VkExternalSemaphoreFeatureFlagBits"/>
+            <type name="VkPhysicalDeviceExternalSemaphoreInfo"/>
+            <type name="VkExternalSemaphoreProperties"/>
+            <command name="vkGetPhysicalDeviceExternalSemaphoreProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_maintenance3">
+            <enum extends="VkStructureType" extnumber="169" offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"/>
+            <enum extends="VkStructureType" extnumber="169" offset="1"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"/>
+            <type name="VkPhysicalDeviceMaintenance3Properties"/>
+            <type name="VkDescriptorSetLayoutSupport"/>
+            <command name="vkGetDescriptorSetLayoutSupport"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_draw_parameters, with a feature support query added">
+            <enum extends="VkStructureType" extnumber="64"  offset="0"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"/>
+            <enum api="vulkan" extends="VkStructureType"                                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderDrawParameterFeatures"/>
+            <type name="VkPhysicalDeviceShaderDrawParametersFeatures"/>
+        </require>
+    </feature>
+    <feature api="vulkan,vulkansc" name="VK_VERSION_1_2" number="1.2" comment="Vulkan 1.2 core API interface definitions.">
+        <require>
+            <type name="VK_API_VERSION_1_2"/>
+        </require>
+        <require>
+            <enum extends="VkStructureType" value="49" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES"/>
+            <enum extends="VkStructureType" value="50" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES"/>
+            <enum extends="VkStructureType" value="51" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES"/>
+            <enum extends="VkStructureType" value="52" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"/>
+            <type name="VkPhysicalDeviceVulkan11Features"/>
+            <type name="VkPhysicalDeviceVulkan11Properties"/>
+            <type name="VkPhysicalDeviceVulkan12Features"/>
+            <type name="VkPhysicalDeviceVulkan12Properties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_image_format_list (extension 148)">
+            <enum offset="0" extends="VkStructureType"  extnumber="148"         name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"/>
+            <type name="VkImageFormatListCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_sampler_mirror_clamp_to_edge (extension 15)">
+            <enum value="4" extends="VkSamplerAddressMode"                      name="VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE" comment="No need to add an extnumber attribute, since this uses a core enum value"/>
+        </require>
+        <require comment="Promoted from VK_KHR_draw_indirect_count (extension 170)">
+            <command name="vkCmdDrawIndirectCount"/>
+            <command name="vkCmdDrawIndexedIndirectCount"/>
+        </require>
+        <require comment="Promoted from VK_KHR_create_renderpass2 (extension 110)">
+            <enum offset="0" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"/>
+            <enum offset="1" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"/>
+            <enum offset="2" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"/>
+            <enum offset="3" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"/>
+            <enum offset="4" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"/>
+            <enum offset="5" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"/>
+            <enum offset="6" extends="VkStructureType" extnumber="110"          name="VK_STRUCTURE_TYPE_SUBPASS_END_INFO"/>
+            <command name="vkCreateRenderPass2"/>
+            <command name="vkCmdBeginRenderPass2"/>
+            <command name="vkCmdNextSubpass2"/>
+            <command name="vkCmdEndRenderPass2"/>
+            <type name="VkRenderPassCreateInfo2"/>
+            <type name="VkAttachmentDescription2"/>
+            <type name="VkAttachmentReference2"/>
+            <type name="VkSubpassDescription2"/>
+            <type name="VkSubpassDependency2"/>
+            <type name="VkSubpassBeginInfo"/>
+            <type name="VkSubpassEndInfo"/>
+        </require>
+        <require comment="Promoted from VK_KHR_8bit_storage (extension 178)">
+            <enum offset="0" extends="VkStructureType" extnumber="178"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"/>
+            <type name="VkPhysicalDevice8BitStorageFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_driver_properties (extension 197)">
+            <enum offset="0" extends="VkStructureType" extnumber="197"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"/>
+            <enum name="VK_MAX_DRIVER_NAME_SIZE"/>
+            <enum name="VK_MAX_DRIVER_INFO_SIZE"/>
+            <type name="VkDriverId"/>
+            <type name="VkConformanceVersion"/>
+            <type name="VkPhysicalDeviceDriverProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_atomic_int64 (extension 181)">
+            <enum offset="0" extends="VkStructureType" extnumber="181"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderAtomicInt64Features"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_float16_int8 (extension 83)">
+            <enum offset="0" extends="VkStructureType" extnumber="83"           name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderFloat16Int8Features"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_float_controls (extension 198)">
+            <enum offset="0" extends="VkStructureType" extnumber="198"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"/>
+            <type name="VkPhysicalDeviceFloatControlsProperties"/>
+            <type name="VkShaderFloatControlsIndependence"/>
+        </require>
+        <require comment="Promoted from VK_EXT_descriptor_indexing (extension 162)">
+            <enum offset="0" extends="VkStructureType" extnumber="162"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"/>
+            <enum offset="1" extends="VkStructureType" extnumber="162"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"/>
+            <enum offset="2" extends="VkStructureType" extnumber="162"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"/>
+            <enum offset="3" extends="VkStructureType" extnumber="162"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"/>
+            <enum offset="4" extends="VkStructureType" extnumber="162"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"/>
+            <enum bitpos="1" extends="VkDescriptorPoolCreateFlagBits"           name="VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"/>
+            <enum bitpos="1" extends="VkDescriptorSetLayoutCreateFlagBits"      name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"/>
+            <enum offset="0" dir="-" extends="VkResult" extnumber="162"         name="VK_ERROR_FRAGMENTATION"/>
+            <type name="VkDescriptorSetLayoutBindingFlagsCreateInfo"/>
+            <type name="VkPhysicalDeviceDescriptorIndexingFeatures"/>
+            <type name="VkPhysicalDeviceDescriptorIndexingProperties"/>
+            <type name="VkDescriptorSetVariableDescriptorCountAllocateInfo"/>
+            <type name="VkDescriptorSetVariableDescriptorCountLayoutSupport"/>
+            <type name="VkDescriptorBindingFlagBits"/>
+            <type name="VkDescriptorBindingFlags"/>
+        </require>
+        <require comment="Promoted from VK_KHR_depth_stencil_resolve (extension 200)">
+            <enum offset="0" extends="VkStructureType" extnumber="200"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="200"          name="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"/>
+            <type name="VkSubpassDescriptionDepthStencilResolve"/>
+            <type name="VkPhysicalDeviceDepthStencilResolveProperties"/>
+            <type name="VkResolveModeFlagBits"/>
+            <type name="VkResolveModeFlags"/>
+        </require>
+        <require comment="Promoted from VK_EXT_scalar_block_layout (extension 222))">
+            <type                                                               name="VkPhysicalDeviceScalarBlockLayoutFeatures"/>
+            <enum offset="0" extends="VkStructureType" extnumber="222"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"/>
+        </require>
+        <require comment="Promoted from VK_EXT_shader_viewport_index_layer, which has no API (extension 163)"/>
+        <require comment="Promoted from VK_EXT_separate_stencil_usage (extension 247)">
+            <enum offset="0" extends="VkStructureType" extnumber="247"          name="VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"/>
+            <type name="VkImageStencilUsageCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_EXT_sampler_filter_minmax (extension 131)">
+            <enum offset="0" extends="VkStructureType" extnumber="131"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="131"          name="VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"/>
+            <enum bitpos="16" extends="VkFormatFeatureFlagBits"                 name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT" comment="Format can be used with min/max reduction filtering"/>
+            <type name="VkSamplerReductionMode"/>
+            <type name="VkSamplerReductionModeCreateInfo"/>
+            <type name="VkPhysicalDeviceSamplerFilterMinmaxProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_vulkan_memory_model (extension 212)">
+            <enum offset="0" extends="VkStructureType" extnumber="212"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"/>
+            <type name="VkPhysicalDeviceVulkanMemoryModelFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_imageless_framebuffer (extension 109)">
+            <type name="VkPhysicalDeviceImagelessFramebufferFeatures"/>
+            <type name="VkFramebufferAttachmentsCreateInfo"/>
+            <type name="VkFramebufferAttachmentImageInfo"/>
+            <type name="VkRenderPassAttachmentBeginInfo"/>
+            <enum offset="0" extends="VkStructureType" extnumber="109"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="109"          name="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"/>
+            <enum offset="2" extends="VkStructureType" extnumber="109"          name="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"/>
+            <enum offset="3" extends="VkStructureType" extnumber="109"          name="VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"/>
+            <enum bitpos="0" extends="VkFramebufferCreateFlagBits"              name="VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT"/>
+        </require>
+        <require comment="Promoted from VK_KHR_uniform_buffer_standard_layout (extension 254)">
+            <type name="VkPhysicalDeviceUniformBufferStandardLayoutFeatures"/>
+            <enum offset="0" extends="VkStructureType" extnumber="254"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_subgroup_extended_types (extension 176)">
+            <enum offset="0" extends="VkStructureType" extnumber="176"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_spirv_1_4 (extension 237)">
+        </require>
+        <require comment="Promoted from VK_KHR_separate_depth_stencil_layouts (extension 242)">
+            <enum offset="0" extends="VkStructureType" extnumber="242"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="242"          name="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"/>
+            <enum offset="2" extends="VkStructureType" extnumber="242"          name="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"/>
+            <enum offset="0" extends="VkImageLayout"   extnumber="242"          name="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL"/>
+            <enum offset="1" extends="VkImageLayout"   extnumber="242"          name="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL"/>
+            <enum offset="2" extends="VkImageLayout"   extnumber="242"          name="VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL"/>
+            <enum offset="3" extends="VkImageLayout"   extnumber="242"          name="VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL"/>
+            <type name="VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures"/>
+            <type name="VkAttachmentReferenceStencilLayout"/>
+            <type name="VkAttachmentDescriptionStencilLayout"/>
+        </require>
+        <require comment="Promoted from VK_EXT_host_query_reset (extension 262)">
+            <enum offset="0" extends="VkStructureType" extnumber="262"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"/>
+            <type name="VkPhysicalDeviceHostQueryResetFeatures"/>
+            <command name="vkResetQueryPool"/>
+        </require>
+        <require comment="Promoted from VK_KHR_timeline_semaphore (extension 208)">
+            <enum offset="0" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"/>
+            <enum offset="2" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"/>
+            <enum offset="3" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"/>
+            <enum offset="4" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"/>
+            <enum offset="5" extends="VkStructureType" extnumber="208"          name="VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"/>
+            <type name="VkSemaphoreType"/>
+            <type name="VkPhysicalDeviceTimelineSemaphoreFeatures"/>
+            <type name="VkPhysicalDeviceTimelineSemaphoreProperties"/>
+            <type name="VkSemaphoreTypeCreateInfo"/>
+            <type name="VkTimelineSemaphoreSubmitInfo"/>
+            <type name="VkSemaphoreWaitFlagBits"/>
+            <type name="VkSemaphoreWaitFlags"/>
+            <type name="VkSemaphoreWaitInfo"/>
+            <type name="VkSemaphoreSignalInfo"/>
+            <command name="vkGetSemaphoreCounterValue"/>
+            <command name="vkWaitSemaphores"/>
+            <command name="vkSignalSemaphore"/>
+        </require>
+        <require comment="Promoted from VK_KHR_buffer_device_address (extension 258)">
+            <enum offset="0" extends="VkStructureType" extnumber="258"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="245"          name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"/>
+            <enum offset="2" extends="VkStructureType" extnumber="258"          name="VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"/>
+            <enum offset="3" extends="VkStructureType" extnumber="258"          name="VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"/>
+            <enum offset="4" extends="VkStructureType" extnumber="258"          name="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"/>
+            <enum bitpos="17" extends="VkBufferUsageFlagBits"                   name="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"/>
+            <enum bitpos="4"  extends="VkBufferCreateFlagBits"                  name="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"/>
+            <enum bitpos="1" extends="VkMemoryAllocateFlagBits"                 name="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"/>
+            <enum bitpos="2" extends="VkMemoryAllocateFlagBits"                 name="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"/>
+            <enum offset="0" dir="-" extends="VkResult" extnumber="258"         name="VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"/>
+            <type name="VkPhysicalDeviceBufferDeviceAddressFeatures"/>
+            <type name="VkBufferDeviceAddressInfo"/>
+            <type name="VkBufferOpaqueCaptureAddressCreateInfo"/>
+            <type name="VkMemoryOpaqueCaptureAddressAllocateInfo"/>
+            <type name="VkDeviceMemoryOpaqueCaptureAddressInfo"/>
+            <command name="vkGetBufferDeviceAddress"/>
+            <command name="vkGetBufferOpaqueCaptureAddress"/>
+            <command name="vkGetDeviceMemoryOpaqueCaptureAddress"/>
+        </require>
+    </feature>
+    <feature api="vulkan,vulkansc" name="VK_VERSION_1_3" number="1.3" comment="Vulkan 1.3 core API interface definitions.">
+        <require>
+            <type name="VK_API_VERSION_1_3"/>
+        </require>
+        <require>
+            <type name="VkFlags64"/>
+        </require>
+        <require>
+            <enum extends="VkStructureType" value="53"                          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES"/>
+            <enum extends="VkStructureType" value="54"                          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES"/>
+            <type name="VkPhysicalDeviceVulkan13Features"/>
+            <type name="VkPhysicalDeviceVulkan13Properties"/>
+        </require>
+        <require comment="Promoted from VK_EXT_pipeline_creation_feedback (extension 193)">
+            <enum offset="0" extends="VkStructureType"  extnumber="193"         name="VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"/>
+            <type name="VkPipelineCreationFeedbackFlagBits"/>
+            <type name="VkPipelineCreationFeedbackFlags"/>
+            <type name="VkPipelineCreationFeedbackCreateInfo"/>
+            <type name="VkPipelineCreationFeedback"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_terminate_invocation (extension 216)">
+            <enum offset="0" extends="VkStructureType"  extnumber="216"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderTerminateInvocationFeatures"/>
+        </require>
+        <require comment="Promoted from VK_EXT_tooling_info (extension 246)">
+            <enum offset="0" extends="VkStructureType"  extnumber="246"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"/>
+            <type name="VkToolPurposeFlagBits"/>
+            <type name="VkToolPurposeFlags"/>
+            <type name="VkPhysicalDeviceToolProperties"/>
+            <command name="vkGetPhysicalDeviceToolProperties"/>
+        </require>
+        <require comment="Promoted from VK_EXT_shader_demote_to_helper_invocation (extension 277)">
+            <enum offset="0" extends="VkStructureType"  extnumber="277"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"/>
+            <type name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_non_semantic_info (extension 294)">
+        </require>
+        <require comment="Promoted from VK_EXT_private_data (extension 296)">
+            <enum offset="0" extends="VkStructureType"  extnumber="296"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"/>
+            <enum offset="1" extends="VkStructureType"  extnumber="296"         name="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO"/>
+            <enum offset="2" extends="VkStructureType"  extnumber="296"         name="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"/>
+            <enum offset="0" extends="VkObjectType"     extnumber="296"         name="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"/>
+            <type name="VkPhysicalDevicePrivateDataFeatures"/>
+            <type name="VkDevicePrivateDataCreateInfo"/>
+            <type name="VkPrivateDataSlotCreateInfo"/>
+            <type name="VkPrivateDataSlot"/>
+            <type name="VkPrivateDataSlotCreateFlags" comment="Will add VkPrivateDataSlotCreateFlagBits when bits are defined in the future"/>
+            <command name="vkCreatePrivateDataSlot"/>
+            <command name="vkDestroyPrivateDataSlot"/>
+            <command name="vkSetPrivateData"/>
+            <command name="vkGetPrivateData"/>
+        </require>
+        <require comment="Promoted from VK_EXT_pipeline_creation_cache_control (extension 298)">
+            <enum offset="0" extends="VkStructureType"  extnumber="298"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"/>
+            <type name="VkPhysicalDevicePipelineCreationCacheControlFeatures"/>
+            <enum bitpos="8" extends="VkPipelineCreateFlagBits"                 name="VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"/>
+            <enum bitpos="9" extends="VkPipelineCreateFlagBits"                 name="VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT"/>
+            <enum offset="0" extends="VkResult"         extnumber="298"         name="VK_PIPELINE_COMPILE_REQUIRED"/>
+            <enum bitpos="0" extends="VkPipelineCacheCreateFlagBits"            name="VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT"/>
+        </require>
+        <require comment="Promoted from VK_KHR_synchronization2 (extension 315)">
+            <enum offset="0" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"/>
+            <enum offset="1" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2"/>
+            <enum offset="2" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2"/>
+            <enum offset="3" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_DEPENDENCY_INFO"/>
+            <enum offset="4" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_SUBMIT_INFO_2"/>
+            <enum offset="5" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO"/>
+            <enum offset="6" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO"/>
+            <enum offset="7" extends="VkStructureType"  extnumber="315"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"/>
+            <enum bitpos="0" extends="VkEventCreateFlagBits"                    name="VK_EVENT_CREATE_DEVICE_ONLY_BIT"/>
+            <enum offset="0" extends="VkImageLayout"    extnumber="315"         name="VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL"/>
+            <enum offset="1" extends="VkImageLayout"    extnumber="315"         name="VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL"/>
+            <enum value="0"  extends="VkPipelineStageFlagBits"                  name="VK_PIPELINE_STAGE_NONE"/>
+            <enum value="0"  extends="VkAccessFlagBits"                         name="VK_ACCESS_NONE"/>
+            <type name="VkPipelineStageFlags2"/>
+            <type name="VkPipelineStageFlagBits2"/>
+            <type name="VkAccessFlags2"/>
+            <type name="VkAccessFlagBits2"/>
+            <type name="VkMemoryBarrier2"/>
+            <type name="VkBufferMemoryBarrier2"/>
+            <type name="VkImageMemoryBarrier2"/>
+            <type name="VkDependencyInfo"/>
+            <type name="VkSubmitInfo2"/>
+            <type name="VkSemaphoreSubmitInfo"/>
+            <type name="VkCommandBufferSubmitInfo"/>
+            <type name="VkSubmitFlagBits"/>
+            <type name="VkSubmitFlags"/>
+            <type name="VkPhysicalDeviceSynchronization2Features"/>
+            <command name="vkCmdSetEvent2"/>
+            <command name="vkCmdResetEvent2"/>
+            <command name="vkCmdWaitEvents2"/>
+            <command name="vkCmdPipelineBarrier2"/>
+            <command name="vkCmdWriteTimestamp2"/>
+            <command name="vkQueueSubmit2"/>
+        </require>
+        <require comment="Promoted from VK_KHR_zero_initialize_workgroup_memory (extension 326)">
+            <enum offset="0" extends="VkStructureType"  extnumber="326"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"/>
+            <type name="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures"/>
+        </require>
+        <require comment="Promoted from VK_EXT_image_robustness (extension 336)">
+            <enum offset="0" extends="VkStructureType"  extnumber="336"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"/>
+            <type name="VkPhysicalDeviceImageRobustnessFeatures"/>
+        </require>
+        <require comment="Promoted from VK_KHR_copy_commands2 (extension 338)">
+            <enum offset="0" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"/>
+            <enum offset="1" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2"/>
+            <enum offset="2" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2"/>
+            <enum offset="3" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"/>
+            <enum offset="4" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"/>
+            <enum offset="5" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"/>
+            <enum offset="6" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_BUFFER_COPY_2"/>
+            <enum offset="7" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_IMAGE_COPY_2"/>
+            <enum offset="8" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_IMAGE_BLIT_2"/>
+            <enum offset="9" extends="VkStructureType"  extnumber="338"         name="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"/>
+            <enum offset="10" extends="VkStructureType" extnumber="338"         name="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"/>
+            <type name="VkCopyBufferInfo2"/>
+            <type name="VkCopyImageInfo2"/>
+            <type name="VkCopyBufferToImageInfo2"/>
+            <type name="VkCopyImageToBufferInfo2"/>
+            <type name="VkBlitImageInfo2"/>
+            <type name="VkResolveImageInfo2"/>
+            <type name="VkBufferCopy2"/>
+            <type name="VkImageCopy2"/>
+            <type name="VkImageBlit2"/>
+            <type name="VkBufferImageCopy2"/>
+            <type name="VkImageResolve2"/>
+            <command name="vkCmdCopyBuffer2"/>
+            <command name="vkCmdCopyImage2"/>
+            <command name="vkCmdCopyBufferToImage2"/>
+            <command name="vkCmdCopyImageToBuffer2"/>
+            <command name="vkCmdBlitImage2"/>
+            <command name="vkCmdResolveImage2"/>
+        </require>
+        <require comment="Promoted from VK_EXT_subgroup_size_control (STDPROMOTE/PROPLIMCHANGE) (extension 226)">
+            <type name="VkPhysicalDeviceSubgroupSizeControlFeatures"/>
+            <type name="VkPhysicalDeviceSubgroupSizeControlProperties"/>
+            <type name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo"/>
+            <enum offset="0" extends="VkStructureType"  extnumber="226"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"/>
+            <enum offset="1" extends="VkStructureType"  extnumber="226"         name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"/>
+            <enum offset="2" extends="VkStructureType"  extnumber="226"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES"/>
+            <enum bitpos="0" extends="VkPipelineShaderStageCreateFlagBits"      name="VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT"/>
+            <enum bitpos="1" extends="VkPipelineShaderStageCreateFlagBits"      name="VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT"/>
+        </require>
+        <require comment="Promoted from VK_EXT_inline_uniform_block (STDPROMOTE/PROPLIMCHANGE) (extension 139)">
+            <enum offset="0" extends="VkDescriptorType" extnumber="139"         name="VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK"/>
+            <enum offset="0" extends="VkStructureType" extnumber="139"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="139"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES"/>
+            <enum offset="2" extends="VkStructureType" extnumber="139"          name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK"/>
+            <enum offset="3" extends="VkStructureType" extnumber="139"          name="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"/>
+            <type name="VkPhysicalDeviceInlineUniformBlockFeatures"/>
+            <type name="VkPhysicalDeviceInlineUniformBlockProperties"/>
+            <type name="VkWriteDescriptorSetInlineUniformBlock"/>
+            <type name="VkDescriptorPoolInlineUniformBlockCreateInfo"/>
+        </require>
+        <require comment="Promoted from VK_EXT_ycbcr_2plane_444_formats (does not promote the Feature struct, just the formats) (extension 331)">
+            <enum offset="0" extends="VkFormat" extnumber="331"                 name="VK_FORMAT_G8_B8R8_2PLANE_444_UNORM"/>
+            <enum offset="1" extends="VkFormat" extnumber="331"                 name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16"/>
+            <enum offset="2" extends="VkFormat" extnumber="331"                 name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16"/>
+            <enum offset="3" extends="VkFormat" extnumber="331"                 name="VK_FORMAT_G16_B16R16_2PLANE_444_UNORM"/>
+        </require>
+        <require comment="Promoted from VK_EXT_4444_formats (does not promote the Feature struct, just the formats) (extension 341)">
+            <enum offset="0" extends="VkFormat" extnumber="341"                 name="VK_FORMAT_A4R4G4B4_UNORM_PACK16"/>
+            <enum offset="1" extends="VkFormat" extnumber="341"                 name="VK_FORMAT_A4B4G4R4_UNORM_PACK16"/>
+        </require>
+        <require comment="Promoted from VK_EXT_texture_compression_astc_hdr (Feature struct is promoted, but becomes optional) (extension 67)">
+            <enum offset="0"  extends="VkStructureType" extnumber="67"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"/>
+            <type name="VkPhysicalDeviceTextureCompressionASTCHDRFeatures"/>
+            <enum offset="0"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK"/>
+            <enum offset="1"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK"/>
+            <enum offset="2"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK"/>
+            <enum offset="3"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK"/>
+            <enum offset="4"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK"/>
+            <enum offset="5"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK"/>
+            <enum offset="6"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK"/>
+            <enum offset="7"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK"/>
+            <enum offset="8"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK"/>
+            <enum offset="9"  extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK"/>
+            <enum offset="10" extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK"/>
+            <enum offset="11" extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK"/>
+            <enum offset="12" extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK"/>
+            <enum offset="13" extends="VkFormat" extnumber="67"                 name="VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK"/>
+        </require>
+        <require comment="Promoted from VK_KHR_dynamic_rendering (extension 45)">
+            <command name="vkCmdBeginRendering"/>
+            <command name="vkCmdEndRendering"/>
+            <enum offset="0" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_RENDERING_INFO"/>
+            <enum offset="1" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO"/>
+            <enum offset="2" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO"/>
+            <enum offset="3" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES"/>
+            <enum offset="4" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"/>
+            <enum offset="0" extends="VkAttachmentStoreOp" extnumber="302"      name="VK_ATTACHMENT_STORE_OP_NONE"/>
+            <type name="VkRenderingInfo"/>
+            <type name="VkRenderingAttachmentInfo"/>
+            <type name="VkPipelineRenderingCreateInfo"/>
+            <type name="VkPhysicalDeviceDynamicRenderingFeatures"/>
+            <type name="VkCommandBufferInheritanceRenderingInfo"/>
+            <type name="VkRenderingFlags"/>
+            <type name="VkRenderingFlagBits"/>
+        </require>
+        <require comment="Promoted from VK_EXT_extended_dynamic_state (Feature struct is not promoted) (extension 268)">
+            <enum offset="0" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_CULL_MODE"/>
+            <enum offset="1" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_FRONT_FACE"/>
+            <enum offset="2" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY"/>
+            <enum offset="3" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT"/>
+            <enum offset="4" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT"/>
+            <enum offset="5" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE"/>
+            <enum offset="6" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE"/>
+            <enum offset="7" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE"/>
+            <enum offset="8" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_DEPTH_COMPARE_OP"/>
+            <enum offset="9" extends="VkDynamicState"  extnumber="268"          name="VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE"/>
+            <enum offset="10" extends="VkDynamicState" extnumber="268"          name="VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE"/>
+            <enum offset="11" extends="VkDynamicState" extnumber="268"          name="VK_DYNAMIC_STATE_STENCIL_OP"/>
+            <command name="vkCmdSetCullMode"/>
+            <command name="vkCmdSetFrontFace"/>
+            <command name="vkCmdSetPrimitiveTopology"/>
+            <command name="vkCmdSetViewportWithCount"/>
+            <command name="vkCmdSetScissorWithCount"/>
+            <command name="vkCmdBindVertexBuffers2"/>
+            <command name="vkCmdSetDepthTestEnable"/>
+            <command name="vkCmdSetDepthWriteEnable"/>
+            <command name="vkCmdSetDepthCompareOp"/>
+            <command name="vkCmdSetDepthBoundsTestEnable"/>
+            <command name="vkCmdSetStencilTestEnable"/>
+            <command name="vkCmdSetStencilOp"/>
+        </require>
+        <require comment="Promoted from VK_KHR_shader_integer_dot_product (extension 281)">
+            <enum offset="0" extends="VkStructureType" extnumber="281"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="281"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"/>
+            <type name="VkPhysicalDeviceShaderIntegerDotProductFeatures"/>
+            <type name="VkPhysicalDeviceShaderIntegerDotProductProperties"/>
+        </require>
+        <require comment="Promoted from VK_EXT_texel_buffer_alignment (extension 282)">
+            <enum offset="1" extends="VkStructureType" extnumber="282"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"/>
+            <type name="VkPhysicalDeviceTexelBufferAlignmentProperties"/>
+        </require>
+        <require comment="Promoted from VK_KHR_format_feature_flags2 (extension 361)">
+            <enum offset="0" extends="VkStructureType" extnumber="361"          name="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"/>
+            <type name="VkFormatFeatureFlags2"/>
+            <type name="VkFormatFeatureFlagBits2"/>
+            <type name="VkFormatProperties3"/>
+        </require>
+        <require comment="Promoted from VK_EXT_extended_dynamic_state2 (Feature struct and optional state are not promoted) (extension 378)">
+            <enum offset="1" extends="VkDynamicState"  extnumber="378"          name="VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE"/>
+            <enum offset="2" extends="VkDynamicState"  extnumber="378"          name="VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE"/>
+            <enum offset="4" extends="VkDynamicState"  extnumber="378"          name="VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE"/>
+            <command name="vkCmdSetRasterizerDiscardEnable"/>
+            <command name="vkCmdSetDepthBiasEnable"/>
+            <command name="vkCmdSetPrimitiveRestartEnable"/>
+        </require>
+        <require comment="Promoted from VK_KHR_maintenance4 (extension 414)">
+            <enum offset="0" extends="VkStructureType" extnumber="414"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"/>
+            <enum offset="1" extends="VkStructureType" extnumber="414"          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"/>
+            <enum offset="2" extends="VkStructureType" extnumber="414"          name="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"/>
+            <enum offset="3" extends="VkStructureType" extnumber="414"          name="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"/>
+            <enum value="0"  extends="VkImageAspectFlagBits"                    name="VK_IMAGE_ASPECT_NONE"/>
+            <type name="VkPhysicalDeviceMaintenance4Features"/>
+            <type name="VkPhysicalDeviceMaintenance4Properties"/>
+            <type name="VkDeviceBufferMemoryRequirements"/>
+            <type name="VkDeviceImageMemoryRequirements"/>
+            <command name="vkGetDeviceBufferMemoryRequirements"/>
+            <command name="vkGetDeviceImageMemoryRequirements"/>
+            <command name="vkGetDeviceImageSparseMemoryRequirements"/>
+        </require>
+    </feature>
+
+    <feature api="vulkansc" name="VKSC_VERSION_1_0" number="1.0" comment="Vulkan SC core API interface definitions">
+        <require>
+            <type name="VKSC_API_VARIANT"/>
+            <type name="VKSC_API_VERSION_1_0"/>
+            <type name="VkPhysicalDeviceVulkanSC10Features"/>
+            <type name="VkPhysicalDeviceVulkanSC10Properties"/>
+            <enum offset="0" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES"/>
+            <enum offset="1" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES"/>
+            <enum offset="1" extnumber="12" extends="VkResult" dir="-"  name="VK_ERROR_VALIDATION_FAILED"/>
+        </require>
+        <require comment="static memory functionality">
+            <type name="VkDeviceObjectReservationCreateInfo"/>
+            <type name="VkCommandPoolMemoryReservationCreateInfo"/>
+            <type name="VkCommandPoolMemoryConsumption"/>
+            <type name="VkPipelinePoolSize"/>
+            <command name="vkGetCommandPoolMemoryConsumption"/>
+            <enum offset="2" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_DEVICE_OBJECT_RESERVATION_CREATE_INFO"/>
+            <enum offset="3" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO"/>
+            <enum offset="4" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION"/>
+            <enum offset="5" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE"/>
+        </require>
+        <require comment="fault handling functionality">
+            <enum offset="7" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_FAULT_DATA"/>
+            <enum offset="8" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO"/>
+            <type name="VkFaultData"/>
+            <type name="VkFaultCallbackInfo"/>
+            <type name="VkFaultLevel"/>
+            <type name="VkFaultType"/>
+            <type name="VkFaultQueryBehavior"/>
+            <type name="PFN_vkFaultCallbackFunction"/>
+            <command name="vkGetFaultData"/>
+        </require>
+        <require comment="pipeline offline create info">
+            <enum offset="10" extnumber="299" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PIPELINE_OFFLINE_CREATE_INFO"/>
+            <type name="VkPipelineOfflineCreateInfo"/>
+            <type name="VkPipelineMatchControl"/>
+        </require>
+        <require comment="pipeline cache functionality">
+            <enum offset="0" extnumber="299" extends="VkResult" dir="-" name="VK_ERROR_INVALID_PIPELINE_CACHE_DATA"/>
+            <enum offset="1" extnumber="299" extends="VkResult" dir="-" name="VK_ERROR_NO_PIPELINE_MATCH"/>
+            <enum bitpos="1" extends="VkPipelineCacheCreateFlagBits"    name="VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT"/>
+            <enum bitpos="2" extends="VkPipelineCacheCreateFlagBits"    name="VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT"/>
+            <type name="VkPipelineCacheCreateFlagBits" comment="This should be picked up from the extends= attributes above"/>
+        </require>
+        <require comment="seu safe memory functionality">
+            <enum bitpos="2" extends="VkMemoryHeapFlagBits"             name="VK_MEMORY_HEAP_SEU_SAFE_BIT"/>
+        </require>
+        <require comment="pipeline cache header - These types are part of the API, though not all directly used in API commands or data structures">
+            <enum offset="1" extnumber="299" extends="VkPipelineCacheHeaderVersion"    name="VK_PIPELINE_CACHE_HEADER_VERSION_SAFETY_CRITICAL_ONE"/>
+            <type name="VkPipelineCacheValidationVersion"/>
+            <type name="VkPipelineCacheStageValidationIndexEntry"/>
+            <type name="VkPipelineCacheSafetyCriticalIndexEntry"/>
+            <type name="VkPipelineCacheHeaderVersionSafetyCriticalOne"/>
+        </require>
+
+        <remove comment="SC 1.0 removes some features from Vulkan 1.0/1.1/1.2">
+            <enum name="VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"/>
+            <!--enum name="VK_OBJECT_TYPE_SHADER_MODULE" comment="leave this present for compatibility"/-->
+            <enum name="VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"/>
+            <enum name="VK_PIPELINE_CREATE_DERIVATIVE_BIT"/>
+            <enum name="VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"/>
+
+            <!-- Remove Vulkan and deprecated macros -->
+            <type name="VK_API_VERSION"/>
+            <type name="VK_MAKE_VERSION"/>
+            <type name="VK_VERSION_MAJOR"/>
+            <type name="VK_VERSION_MINOR"/>
+            <type name="VK_VERSION_PATCH"/>
+
+            <!--type name="VkShaderModule" comment="leave this present for compatibility"/-->
+            <type name="VkShaderModuleCreateFlags"/>
+            <type name="VkShaderModuleCreateFlagBits"/>
+            <type name="VkShaderModuleCreateInfo"/>
+            <type name="VkCommandPoolTrimFlags"/>
+            <command name="vkCreateShaderModule"/>
+            <command name="vkDestroyShaderModule"/>
+            <command name="vkMergePipelineCaches"/>
+            <command name="vkGetPipelineCacheData"/>
+            <command name="vkTrimCommandPool"/>
+            <command name="vkDestroyCommandPool"/>
+            <command name="vkDestroyDescriptorPool"/>
+            <command name="vkDestroyQueryPool"/>
+            <command name="vkDestroySwapchainKHR"/>
+            <command name="vkFreeMemory"/>
+
+            <!-- Descriptor update templates are unsupported -->
+            <enum name="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"/>
+            <enum name="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"/>
+            <command name="vkCreateDescriptorUpdateTemplate"/>
+            <command name="vkDestroyDescriptorUpdateTemplate"/>
+            <command name="vkUpdateDescriptorSetWithTemplate"/>
+            <type name="VkDescriptorUpdateTemplate"/>
+            <type name="VkDescriptorUpdateTemplateCreateFlags"/>
+            <type name="VkDescriptorUpdateTemplateType"/>
+            <type name="VkDescriptorUpdateTemplateEntry"/>
+            <type name="VkDescriptorUpdateTemplateCreateInfo"/>
+            <enum name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"/>
+
+            <!-- Sparse resources are unsupported -->
+            <enum name="VK_QUEUE_SPARSE_BINDING_BIT"/>
+            <!--type name="VkPhysicalDeviceSparseProperties" comment="needed for VkPhysicalDeviceProperties"/-->
+            <type name="VkSparseImageFormatProperties"/>
+            <type name="VkSparseImageFormatFlagBits"/>
+            <type name="VkSparseImageFormatFlags"/>
+            <command name="vkGetPhysicalDeviceSparseImageFormatProperties"/>
+            <command name="vkGetPhysicalDeviceSparseImageFormatProperties2"/>
+            <type name="VkPhysicalDeviceSparseImageFormatInfo2"/>
+            <enum name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"/>
+            <type name="VkSparseImageFormatProperties2"/>
+            <enum name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"/>
+            <type name="VkSparseImageMemoryRequirements"/>
+            <command name="vkGetImageSparseMemoryRequirements"/>
+            <command name="vkGetImageSparseMemoryRequirements2"/>
+            <type name="VkImageSparseMemoryRequirementsInfo2"/>
+            <enum name="VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"/>
+            <type name="VkSparseImageMemoryRequirements2"/>
+            <enum name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"/>
+            <type name="VkSparseMemoryBind"/>
+            <type name="VkSparseMemoryBindFlagBits"/>
+            <type name="VkSparseMemoryBindFlags"/>
+            <type name="VkSparseBufferMemoryBindInfo"/>
+            <type name="VkSparseImageOpaqueMemoryBindInfo"/>
+            <type name="VkSparseImageMemoryBindInfo"/>
+            <type name="VkSparseImageMemoryBind"/>
+            <command name="vkQueueBindSparse"/>
+            <type name="VkBindSparseInfo"/>
+            <enum name="VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"/>
+            <type name="VkDeviceGroupBindSparseInfo"/>
+            <enum name="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"/>
+
+            <command name="vkDestroySemaphoreSciSyncPoolNV"/>
+        </remove>
+    </feature>
+
+    <extensions comment="Vulkan extension interface definitions">
+        <extension name="VK_KHR_surface" number="1" type="instance" author="KHR" contact="James Jones @cubanismo,Ian Elliott @ianelliottus" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="25"                                                name="VK_KHR_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_surface&quot;"                        name="VK_KHR_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkResult" dir="-"                     name="VK_ERROR_SURFACE_LOST_KHR"/>
+                <enum offset="1" extends="VkResult" dir="-"                     name="VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"/>
+                <enum offset="0" extends="VkObjectType"                         name="VK_OBJECT_TYPE_SURFACE_KHR"/>
+                <type name="VkSurfaceKHR"/>
+                <type name="VkSurfaceTransformFlagBitsKHR"/>
+                <type name="VkPresentModeKHR"/>
+                <type name="VkColorSpaceKHR"/>
+                <type name="VkCompositeAlphaFlagBitsKHR"/>
+                <type name="VkCompositeAlphaFlagsKHR"/>
+                <type name="VkSurfaceCapabilitiesKHR"/>
+                <type name="VkSurfaceFormatKHR"/>
+                <command name="vkDestroySurfaceKHR"/>
+                <command name="vkGetPhysicalDeviceSurfaceSupportKHR"/>
+                <command name="vkGetPhysicalDeviceSurfaceCapabilitiesKHR"/>
+                <command name="vkGetPhysicalDeviceSurfaceFormatsKHR"/>
+                <command name="vkGetPhysicalDeviceSurfacePresentModesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_swapchain" number="2" type="device" depends="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo,Ian Elliott @ianelliottus" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="70"                                                name="VK_KHR_SWAPCHAIN_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_swapchain&quot;"                      name="VK_KHR_SWAPCHAIN_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"/>
+                <enum offset="2" extends="VkImageLayout"                        name="VK_IMAGE_LAYOUT_PRESENT_SRC_KHR"/>
+                <enum offset="3" extends="VkResult"                             name="VK_SUBOPTIMAL_KHR"/>
+                <enum offset="4" extends="VkResult" dir="-"                     name="VK_ERROR_OUT_OF_DATE_KHR"/>
+                <enum offset="0" extends="VkObjectType"                         name="VK_OBJECT_TYPE_SWAPCHAIN_KHR"/>
+                <type name="VkSwapchainCreateFlagBitsKHR"/>
+                <type name="VkSwapchainCreateFlagsKHR"/>
+                <type name="VkSwapchainCreateInfoKHR"/>
+                <type name="VkSwapchainKHR"/>
+                <type name="VkPresentInfoKHR"/>
+                <command name="vkCreateSwapchainKHR"/>
+                <command name="vkDestroySwapchainKHR"/>
+                <command name="vkGetSwapchainImagesKHR"/>
+                <command name="vkAcquireNextImageKHR"/>
+                <command name="vkQueuePresentKHR"/>
+            </require>
+            <require depends="VK_VERSION_1_1">
+                <comment>This duplicates definitions in VK_KHR_device_group below</comment>
+                <enum extends="VkStructureType" extnumber="61"  offset="7"      name="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"/>
+                <enum extends="VkStructureType" extnumber="61"  offset="8"      name="VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"/>
+                <enum extends="VkStructureType" extnumber="61"  offset="9"      name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"/>
+                <enum extends="VkStructureType" extnumber="61"  offset="10"     name="VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"/>
+                <enum extends="VkStructureType" extnumber="61"  offset="11"     name="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"/>
+                <enum extends="VkStructureType" extnumber="61"  offset="12"     name="VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"/>
+                <enum bitpos="0" extends="VkSwapchainCreateFlagBitsKHR"         name="VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR" comment="Allow images with VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"/>
+                <type name="VkImageSwapchainCreateInfoKHR"/>
+                <type name="VkBindImageMemorySwapchainInfoKHR"/>
+                <type name="VkAcquireNextImageInfoKHR"/>
+                <type name="VkDeviceGroupPresentModeFlagBitsKHR"/>
+                <type name="VkDeviceGroupPresentModeFlagsKHR"/>
+                <type name="VkDeviceGroupPresentCapabilitiesKHR"/>
+                <type name="VkDeviceGroupPresentInfoKHR"/>
+                <type name="VkDeviceGroupSwapchainCreateInfoKHR"/>
+                <command name="vkGetDeviceGroupPresentCapabilitiesKHR"/>
+                <command name="vkGetDeviceGroupSurfacePresentModesKHR"/>
+                <command name="vkGetPhysicalDevicePresentRectanglesKHR"/>
+                <command name="vkAcquireNextImage2KHR"/>
+                <enum bitpos="1" extends="VkSwapchainCreateFlagBitsKHR"         name="VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"     comment="Swapchain is protected"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_display" number="3" type="instance" depends="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo,Norbert Nopper @FslNopper" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="23"                                                name="VK_KHR_DISPLAY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_display&quot;"                        name="VK_KHR_DISPLAY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"/>
+                <enum offset="0" extends="VkObjectType"                         name="VK_OBJECT_TYPE_DISPLAY_KHR"/>
+                <enum offset="1" extends="VkObjectType"                         name="VK_OBJECT_TYPE_DISPLAY_MODE_KHR"/>
+                <type name="VkDisplayKHR"/>
+                <type name="VkDisplayModeCreateFlagsKHR"/>
+                <type name="VkDisplayModeCreateInfoKHR"/>
+                <type name="VkDisplayModeKHR"/>
+                <type name="VkDisplayModeParametersKHR"/>
+                <type name="VkDisplayModePropertiesKHR"/>
+                <type name="VkDisplayPlaneAlphaFlagBitsKHR"/>
+                <type name="VkDisplayPlaneAlphaFlagsKHR"/>
+                <type name="VkDisplayPlaneCapabilitiesKHR"/>
+                <type name="VkDisplayPlanePropertiesKHR"/>
+                <type name="VkDisplayPropertiesKHR"/>
+                <type name="VkDisplaySurfaceCreateFlagsKHR"/>
+                <type name="VkDisplaySurfaceCreateInfoKHR"/>
+                <type name="VkSurfaceTransformFlagsKHR"/>
+                <command name="vkGetPhysicalDeviceDisplayPropertiesKHR"/>
+                <command name="vkGetPhysicalDeviceDisplayPlanePropertiesKHR"/>
+                <command name="vkGetDisplayPlaneSupportedDisplaysKHR"/>
+                <command name="vkGetDisplayModePropertiesKHR"/>
+                <command name="vkCreateDisplayModeKHR"/>
+                <command name="vkGetDisplayPlaneCapabilitiesKHR"/>
+                <command name="vkCreateDisplayPlaneSurfaceKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_display_swapchain" number="4" type="device" depends="VK_KHR_swapchain+VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="10"                                                name="VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_display_swapchain&quot;"              name="VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"/>
+                <enum offset="1" extends="VkResult" dir="-"                     name="VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"/>
+                <type name="VkDisplayPresentInfoKHR"/>
+                <command name="vkCreateSharedSwapchainsKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_xlib_surface" number="5" type="instance" depends="VK_KHR_surface" platform="xlib" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="6"                                                 name="VK_KHR_XLIB_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_xlib_surface&quot;"                   name="VK_KHR_XLIB_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"/>
+                <type name="VkXlibSurfaceCreateFlagsKHR"/>
+                <type name="VkXlibSurfaceCreateInfoKHR"/>
+                <command name="vkCreateXlibSurfaceKHR"/>
+                <command name="vkGetPhysicalDeviceXlibPresentationSupportKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_xcb_surface" number="6" type="instance" depends="VK_KHR_surface" platform="xcb" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="6"                                                 name="VK_KHR_XCB_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_xcb_surface&quot;"                    name="VK_KHR_XCB_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"/>
+                <type name="VkXcbSurfaceCreateFlagsKHR"/>
+                <type name="VkXcbSurfaceCreateInfoKHR"/>
+                <command name="vkCreateXcbSurfaceKHR"/>
+                <command name="vkGetPhysicalDeviceXcbPresentationSupportKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_wayland_surface" number="7" type="instance" depends="VK_KHR_surface" platform="wayland" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="6"                                                 name="VK_KHR_WAYLAND_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_wayland_surface&quot;"                name="VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"/>
+                <type name="VkWaylandSurfaceCreateFlagsKHR"/>
+                <type name="VkWaylandSurfaceCreateInfoKHR"/>
+                <command name="vkCreateWaylandSurfaceKHR"/>
+                <command name="vkGetPhysicalDeviceWaylandPresentationSupportKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_mir_surface" number="8" type="instance" depends="VK_KHR_surface" author="KHR" supported="disabled" comment="Extension permanently disabled. Extension number should not be reused" ratified="vulkan">
+            <require>
+                <enum value="4"                                                 name="VK_KHR_MIR_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_mir_surface&quot;"                    name="VK_KHR_MIR_SURFACE_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_android_surface" number="9" type="instance" depends="VK_KHR_surface" platform="android" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="6"                                                 name="VK_KHR_ANDROID_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_android_surface&quot;"                name="VK_KHR_ANDROID_SURFACE_EXTENSION_NAME"/>
+                <type name="ANativeWindow"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"/>
+                <type name="VkAndroidSurfaceCreateFlagsKHR"/>
+                <type name="VkAndroidSurfaceCreateInfoKHR"/>
+                <command name="vkCreateAndroidSurfaceKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_win32_surface" number="10" type="instance" depends="VK_KHR_surface" platform="win32" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="6"                                                 name="VK_KHR_WIN32_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_win32_surface&quot;"                  name="VK_KHR_WIN32_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"/>
+                <type name="VkWin32SurfaceCreateFlagsKHR"/>
+                <type name="VkWin32SurfaceCreateInfoKHR"/>
+                <command name="vkCreateWin32SurfaceKHR"/>
+                <command name="vkGetPhysicalDeviceWin32PresentationSupportKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_ANDROID_native_buffer" number="11" type="device" author="ANDROID" platform="android" contact="Jesse Hall @critsec" supported="disabled">
+            <require>
+                <comment>VK_ANDROID_native_buffer is used between the Android Vulkan loader and drivers to implement the WSI extensions. It is not exposed to applications and uses types that are not part of Android's stable public API, so it is left disabled to keep it out of the standard Vulkan headers.</comment>
+                <enum value="8"                                                 name="VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION"/>
+                <enum value="11"                                                name="VK_ANDROID_NATIVE_BUFFER_NUMBER"/>
+                <enum value="&quot;VK_ANDROID_native_buffer&quot;"              name="VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME"/>
+                <enum                                                           name="VK_ANDROID_NATIVE_BUFFER_NAME" alias="VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID"/>
+                <type name="VkNativeBufferANDROID"/>
+                <type name="VkSwapchainImageCreateInfoANDROID"/>
+                <type name="VkPhysicalDevicePresentationPropertiesANDROID"/>
+                <type name="VkNativeBufferUsage2ANDROID"/>
+                <type name="VkSwapchainImageUsageFlagBitsANDROID"/>
+                <type name="VkSwapchainImageUsageFlagsANDROID"/>
+                <command name="vkGetSwapchainGrallocUsageANDROID"/>
+                <command name="vkAcquireImageANDROID"/>
+                <command name="vkQueueSignalReleaseImageANDROID"/>
+                <command name="vkGetSwapchainGrallocUsage2ANDROID"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" specialuse="debugging" supported="vulkan" deprecatedby="VK_EXT_debug_utils">
+            <require>
+                <enum value="10"                                                name="VK_EXT_DEBUG_REPORT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_debug_report&quot;"                   name="VK_EXT_DEBUG_REPORT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"/>
+                <enum alias="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT" deprecated="aliased"/>
+                <enum api="vulkan" offset="1" extends="VkResult" dir="-"        name="VK_ERROR_VALIDATION_FAILED_EXT"/>
+                <enum api="vulkansc" extends="VkResult"                         name="VK_ERROR_VALIDATION_FAILED_EXT" alias="VK_ERROR_VALIDATION_FAILED"/>
+                <enum offset="0" extends="VkObjectType"                         name="VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"/>
+                <type name="VkDebugReportCallbackEXT"/>
+                <type name="PFN_vkDebugReportCallbackEXT"/>
+                <type name="VkDebugReportFlagBitsEXT"/>
+                <type name="VkDebugReportFlagsEXT"/>
+                <type name="VkDebugReportObjectTypeEXT"/>
+                <type name="VkDebugReportCallbackCreateInfoEXT"/>
+                <command name="vkCreateDebugReportCallbackEXT"/>
+                <command name="vkDestroyDebugReportCallbackEXT"/>
+                <command name="vkDebugReportMessageEXT"/>
+            </require>
+            <require depends="VK_VERSION_1_1">
+                <comment>This duplicates definitions in other extensions, below</comment>
+                <enum extends="VkDebugReportObjectTypeEXT" extnumber="157" offset="0"  name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"/>
+                <enum extends="VkDebugReportObjectTypeEXT" extnumber="86"  offset="0"  name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_glsl_shader" number="13" type="device" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan" deprecatedby="">
+            <require>
+                <enum value="1"                                                 name="VK_NV_GLSL_SHADER_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_glsl_shader&quot;"                     name="VK_NV_GLSL_SHADER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkResult" dir="-"                     name="VK_ERROR_INVALID_SHADER_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_depth_range_unrestricted" type="device" number="14" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_depth_range_unrestricted&quot;"       name="VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_sampler_mirror_clamp_to_edge" type="device" number="15" author="KHR" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="3"                                                 name="VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_sampler_mirror_clamp_to_edge&quot;"   name="VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME"/>
+                <enum value="4" extends="VkSamplerAddressMode"                  name="VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE" comment="Note that this defines what was previously a core enum, and so uses the 'value' attribute rather than 'offset', and does not have a suffix. This is a special case, and should not be repeated"/>
+                <enum           extends="VkSamplerAddressMode"                  name="VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR" alias="VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"  deprecated="aliased" comment="Introduced for consistency with extension suffixing rules"/>
+            </require>
+        </extension>
+        <extension name="VK_IMG_filter_cubic" number="16" type="device" author="IMG" contact="Tobias Hector @tobski" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_IMG_FILTER_CUBIC_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_filter_cubic&quot;"                   name="VK_IMG_FILTER_CUBIC_EXTENSION_NAME"/>
+                <enum extends="VkFilter"                                        name="VK_FILTER_CUBIC_IMG" alias="VK_FILTER_CUBIC_EXT"/>
+                <enum extends="VkFormatFeatureFlagBits"                         name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT" comment="Format can be filtered with VK_FILTER_CUBIC_IMG when being sampled"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_17" number="17" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_17_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_17&quot;"                   name="VK_AMD_EXTENSION_17_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_18" number="18" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_18_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_18&quot;"                   name="VK_AMD_EXTENSION_18_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_rasterization_order" number="19" type="device" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_rasterization_order&quot;"            name="VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"/>
+                <type name="VkRasterizationOrderAMD"/>
+                <type name="VkPipelineRasterizationStateRasterizationOrderAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_20" number="20" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_20_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_20&quot;"                   name="VK_AMD_EXTENSION_20_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_trinary_minmax" number="21" type="device" author="AMD" contact="Qun Lin @linqun" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_trinary_minmax&quot;"          name="VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_explicit_vertex_parameter" number="22" type="device" author="AMD" contact="Qun Lin @linqun" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_explicit_vertex_parameter&quot;" name="VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_debug_marker" number="23" type="device" depends="VK_EXT_debug_report" author="Baldur Karlsson" contact="Baldur Karlsson @baldurk" specialuse="debugging" supported="vulkan" promotedto="VK_EXT_debug_utils">
+            <require>
+                <enum value="4"                                                 name="VK_EXT_DEBUG_MARKER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_debug_marker&quot;"                   name="VK_EXT_DEBUG_MARKER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"/>
+                <type name="VkDebugReportObjectTypeEXT"/>
+                <type name="VkDebugMarkerObjectNameInfoEXT"/>
+                <type name="VkDebugMarkerObjectTagInfoEXT"/>
+                <type name="VkDebugMarkerMarkerInfoEXT"/>
+                <command name="vkDebugMarkerSetObjectTagEXT"/>
+                <command name="vkDebugMarkerSetObjectNameEXT"/>
+                <command name="vkCmdDebugMarkerBeginEXT"/>
+                <command name="vkCmdDebugMarkerEndEXT"/>
+                <command name="vkCmdDebugMarkerInsertEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_queue" number="24" type="device" depends="VK_VERSION_1_1+VK_KHR_synchronization2" author="KHR" contact="Tony Zlatinski @tzlatinski" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="8"                                         name="VK_KHR_VIDEO_QUEUE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_video_queue&quot;"            name="VK_KHR_VIDEO_QUEUE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR"/>
+                <enum offset="8" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR"/>
+                <enum offset="9" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR"/>
+                <enum offset="10" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR"/>
+                <enum offset="11" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR"/>
+                <enum offset="12" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR"/>
+                <enum offset="13" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR"/>
+                <enum offset="14" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR"/>
+                <enum offset="15" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR"/>
+                <enum offset="16" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR"/>
+
+                <enum offset="0"  extends="VkObjectType"                name="VK_OBJECT_TYPE_VIDEO_SESSION_KHR"             comment="VkVideoSessionKHR"/>
+                <enum offset="1"  extends="VkObjectType"                name="VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR"  comment="VkVideoSessionParametersKHR"/>
+
+                <enum offset="0" extends="VkQueryType"                  name="VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR"/>
+                <enum bitpos="4" extends="VkQueryResultFlagBits"        name="VK_QUERY_RESULT_WITH_STATUS_BIT_KHR"/>
+
+                <enum offset="0" extends="VkResult" dir="-"             name="VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR"/>
+                <enum offset="1" extends="VkResult" dir="-"             name="VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR"/>
+                <enum offset="2" extends="VkResult" dir="-"             name="VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR"/>
+                <enum offset="3" extends="VkResult" dir="-"             name="VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR"/>
+                <enum offset="4" extends="VkResult" dir="-"             name="VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR"/>
+                <enum offset="5" extends="VkResult" dir="-"             name="VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR"/>
+
+                <type name="VkVideoSessionKHR"/>
+                <type name="VkVideoSessionParametersKHR"/>
+
+                <type name="VkVideoCodecOperationFlagBitsKHR"/>
+                <type name="VkVideoCodecOperationFlagsKHR"/>
+                <type name="VkVideoChromaSubsamplingFlagBitsKHR"/>
+                <type name="VkVideoChromaSubsamplingFlagsKHR"/>
+                <type name="VkVideoComponentBitDepthFlagBitsKHR"/>
+                <type name="VkVideoComponentBitDepthFlagsKHR"/>
+                <type name="VkVideoCapabilityFlagBitsKHR"/>
+                <type name="VkVideoCapabilityFlagsKHR"/>
+                <type name="VkVideoSessionCreateFlagBitsKHR"/>
+                <type name="VkVideoSessionCreateFlagsKHR"/>
+                <type name="VkVideoSessionParametersCreateFlagsKHR"/>
+                <type name="VkVideoBeginCodingFlagsKHR"/>
+                <type name="VkVideoEndCodingFlagsKHR"/>
+                <type name="VkVideoCodingControlFlagBitsKHR"/>
+                <type name="VkVideoCodingControlFlagsKHR"/>
+
+                <type name="VkQueueFamilyQueryResultStatusPropertiesKHR"/>
+                <type name="VkQueryResultStatusKHR"/>
+
+                <type name="VkQueueFamilyVideoPropertiesKHR"/>
+                <type name="VkVideoProfileInfoKHR"/>
+                <type name="VkVideoProfileListInfoKHR"/>
+                <type name="VkVideoCapabilitiesKHR"/>
+                <type name="VkPhysicalDeviceVideoFormatInfoKHR"/>
+                <type name="VkVideoFormatPropertiesKHR"/>
+                <type name="VkVideoPictureResourceInfoKHR"/>
+                <type name="VkVideoReferenceSlotInfoKHR"/>
+                <type name="VkVideoSessionMemoryRequirementsKHR"/>
+                <type name="VkBindVideoSessionMemoryInfoKHR"/>
+                <type name="VkVideoSessionCreateInfoKHR"/>
+                <type name="VkVideoSessionParametersCreateInfoKHR"/>
+                <type name="VkVideoSessionParametersUpdateInfoKHR"/>
+                <type name="VkVideoBeginCodingInfoKHR"/>
+                <type name="VkVideoEndCodingInfoKHR"/>
+                <type name="VkVideoCodingControlInfoKHR"/>
+
+                <command name="vkGetPhysicalDeviceVideoCapabilitiesKHR"/>
+                <command name="vkGetPhysicalDeviceVideoFormatPropertiesKHR"/>
+
+                <command name="vkCreateVideoSessionKHR"/>
+                <command name="vkDestroyVideoSessionKHR"/>
+                <command name="vkGetVideoSessionMemoryRequirementsKHR"/>
+                <command name="vkBindVideoSessionMemoryKHR"/>
+                <command name="vkCreateVideoSessionParametersKHR"/>
+                <command name="vkUpdateVideoSessionParametersKHR"/>
+                <command name="vkDestroyVideoSessionParametersKHR"/>
+                <command name="vkCmdBeginVideoCodingKHR"/>
+                <command name="vkCmdEndVideoCodingKHR"/>
+                <command name="vkCmdControlVideoCodingKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_decode_queue" number="25" type="device" depends="VK_KHR_video_queue+VK_KHR_synchronization2" author="KHR" contact="jake.beju@amd.com" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="7"                                         name="VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_video_decode_queue&quot;"     name="VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR"/>
+                <enum bitpos="5" extends="VkQueueFlagBits"              name="VK_QUEUE_VIDEO_DECODE_BIT_KHR"/>
+                <!-- VkPipelineStageFlagBits bitpos="26" is reserved by this extension, but not used -->
+                <enum bitpos="26" extends="VkPipelineStageFlagBits2"    name="VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR"/>
+                <enum bitpos="35" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR"/>
+                <enum bitpos="36" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR"/>
+                <enum bitpos="13" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR"/>
+                <enum bitpos="14" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR"/>
+                <enum bitpos="10" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR"/>
+                <enum bitpos="11" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR"/>
+                <enum bitpos="12" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR"/>
+                <enum bitpos="25" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR"/>
+                <enum bitpos="26" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR"/>
+                <enum offset="0" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR"/>
+                <enum offset="1" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR"/>
+                <enum offset="2" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR"/>
+
+                <type name="VkVideoDecodeCapabilityFlagBitsKHR"/>
+                <type name="VkVideoDecodeCapabilityFlagsKHR"/>
+                <type name="VkVideoDecodeCapabilitiesKHR"/>
+
+                <type name="VkVideoDecodeUsageFlagBitsKHR"/>
+                <type name="VkVideoDecodeUsageFlagsKHR"/>
+                <type name="VkVideoDecodeUsageInfoKHR"/>
+
+                <type name="VkVideoDecodeFlagsKHR"/>
+
+                <type name="VkVideoDecodeInfoKHR"/>
+                <command name="vkCmdDecodeVideoKHR"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="25" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR"/>
+                <enum bitpos="26" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_gcn_shader" number="26" type="device" author="AMD" contact="Dominik Witczak @dominikwitczakamd" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_GCN_SHADER_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_gcn_shader&quot;"                     name="VK_AMD_GCN_SHADER_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_dedicated_allocation" number="27" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan" deprecatedby="VK_KHR_dedicated_allocation">
+            <require>
+                <enum value="1"                                                 name="VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_dedicated_allocation&quot;"            name="VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"/>
+                <type name="VkDedicatedAllocationImageCreateInfoNV"/>
+                <type name="VkDedicatedAllocationBufferCreateInfoNV"/>
+                <type name="VkDedicatedAllocationMemoryAllocateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_28" number="28" author="NV" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_EXT_EXTENSION_28_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_28&quot;"                   name="VK_EXT_EXTENSION_28_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_transform_feedback" number="29" type="device" author="NV" contact="Piers Daniell @pdaniell-nv" specialuse="glemulation,d3demulation,devtools" supported="vulkan" depends="VK_KHR_get_physical_device_properties2">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_transform_feedback&quot;"             name="VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME"/>
+                <command name="vkCmdBindTransformFeedbackBuffersEXT"/>
+                <command name="vkCmdBeginTransformFeedbackEXT"/>
+                <command name="vkCmdEndTransformFeedbackEXT"/>
+                <command name="vkCmdBeginQueryIndexedEXT"/>
+                <command name="vkCmdEndQueryIndexedEXT"/>
+                <command name="vkCmdDrawIndirectByteCountEXT"/>
+
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"/>
+
+                <enum offset="4" extends="VkQueryType"                          name="VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT"/>
+
+                <enum bitpos="11" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"/>
+                <enum bitpos="12" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"/>
+
+                <enum bitpos="25" extends="VkAccessFlagBits"                    name="VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"/>
+                <enum bitpos="26" extends="VkAccessFlagBits"                    name="VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"/>
+                <enum bitpos="27" extends="VkAccessFlagBits"                    name="VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"/>
+
+                <enum bitpos="24" extends="VkPipelineStageFlagBits"             name="VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT"/>
+
+                <type name="VkPhysicalDeviceTransformFeedbackFeaturesEXT"/>
+                <type name="VkPhysicalDeviceTransformFeedbackPropertiesEXT"/>
+                <type name="VkPipelineRasterizationStateStreamCreateInfoEXT"/>
+
+                <type name="VkPipelineRasterizationStateStreamCreateFlagsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_binary_import" number="30" type="device" author="NVX" contact="Eric Werness @ewerness-nv,Liam Middlebrook @liam-middlebrook" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NVX_BINARY_IMPORT_SPEC_VERSION"/>
+                <enum value="&quot;VK_NVX_binary_import&quot;"                  name="VK_NVX_BINARY_IMPORT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX"/>
+                <enum offset="0" extends="VkObjectType"                         name="VK_OBJECT_TYPE_CU_MODULE_NVX"/>
+                <enum offset="1" extends="VkObjectType"                         name="VK_OBJECT_TYPE_CU_FUNCTION_NVX"/>
+                <type name="VkCuModuleNVX"/>
+                <type name="VkCuFunctionNVX"/>
+                <type name="VkCuModuleCreateInfoNVX"/>
+                <type name="VkCuFunctionCreateInfoNVX"/>
+                <type name="VkCuLaunchInfoNVX"/>
+                <command name="vkCreateCuModuleNVX"/>
+                <command name="vkCreateCuFunctionNVX"/>
+                <command name="vkDestroyCuModuleNVX"/>
+                <command name="vkDestroyCuFunctionNVX"/>
+                <command name="vkCmdCuLaunchKernelNVX"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum offset="0" extends="VkDebugReportObjectTypeEXT"           name="VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT"/>
+                <enum offset="1" extends="VkDebugReportObjectTypeEXT"           name="VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_image_view_handle" number="31" type="device" author="NVX" contact="Eric Werness @ewerness-nv" supported="vulkan">
+            <require>
+                <enum value="2"                                                 name="VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NVX_image_view_handle&quot;"              name="VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX"/>
+                <type name="VkImageViewHandleInfoNVX"/>
+                <type name="VkImageViewAddressPropertiesNVX"/>
+                <command name="vkGetImageViewHandleNVX"/>
+                <command name="vkGetImageViewAddressNVX"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_32" number="32" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_32_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_32&quot;"                   name="VK_AMD_EXTENSION_32_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_33" number="33" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_33_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_33&quot;"                   name="VK_AMD_EXTENSION_33_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_draw_indirect_count" number="34" type="device" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan" promotedto="VK_KHR_draw_indirect_count">
+            <require>
+                <enum value="2"                                                 name="VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_draw_indirect_count&quot;"            name="VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"/>
+                <command name="vkCmdDrawIndirectCountAMD"/>
+                <command name="vkCmdDrawIndexedIndirectCountAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_35" number="35" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_35_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_35&quot;"                   name="VK_AMD_EXTENSION_35_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_negative_viewport_height" number="36" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan" obsoletedby="VK_KHR_maintenance1">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_negative_viewport_height&quot;"       name="VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_gpu_shader_half_float" number="37" type="device" author="AMD" contact="Dominik Witczak @dominikwitczakamd" supported="vulkan" deprecatedby="VK_KHR_shader_float16_int8">
+            <require>
+                <enum value="2"                                                 name="VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_gpu_shader_half_float&quot;"          name="VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_ballot" number="38" type="device" author="AMD" contact="Dominik Witczak @dominikwitczakamd" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_SHADER_BALLOT_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_ballot&quot;"                  name="VK_AMD_SHADER_BALLOT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_video_encode_h264" number="39" type="device" depends="VK_KHR_video_encode_queue" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="12"                                                name="VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_video_encode_h264&quot;"              name="VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="8" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="9" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="10" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="11" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="12" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="13" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="16" extends="VkVideoCodecOperationFlagBitsKHR"    name="VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoEncodeH264CapabilityFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264CapabilityFlagsEXT"/>
+                <type name="VkVideoEncodeH264StdFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264StdFlagsEXT"/>
+                <type name="VkVideoEncodeH264CapabilitiesEXT"/>
+                <type name="VkVideoEncodeH264QualityLevelPropertiesEXT"/>
+                <type name="VkVideoEncodeH264SessionCreateInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersAddInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersGetInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersFeedbackInfoEXT"/>
+                <type name="VkVideoEncodeH264PictureInfoEXT"/>
+                <type name="VkVideoEncodeH264DpbSlotInfoEXT"/>
+                <type name="VkVideoEncodeH264NaluSliceInfoEXT"/>
+                <type name="VkVideoEncodeH264ProfileInfoEXT"/>
+                <type name="VkVideoEncodeH264RateControlInfoEXT"/>
+                <type name="VkVideoEncodeH264RateControlFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264RateControlFlagsEXT"/>
+                <type name="VkVideoEncodeH264RateControlLayerInfoEXT"/>
+                <type name="VkVideoEncodeH264QpEXT"/>
+                <type name="VkVideoEncodeH264FrameSizeEXT"/>
+                <type name="VkVideoEncodeH264GopRemainingFrameInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_video_encode_h265" number="40" type="device" depends="VK_KHR_video_encode_queue" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="12"                                             name="VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_video_encode_h265&quot;"           name="VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="9" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="10" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="11" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="12" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="13" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="14" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="17" extends="VkVideoCodecOperationFlagBitsKHR" name="VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoEncodeH265CapabilityFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265CapabilityFlagsEXT"/>
+                <type name="VkVideoEncodeH265StdFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265StdFlagsEXT"/>
+                <type name="VkVideoEncodeH265CtbSizeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265CtbSizeFlagsEXT"/>
+                <type name="VkVideoEncodeH265TransformBlockSizeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265TransformBlockSizeFlagsEXT"/>
+                <type name="VkVideoEncodeH265CapabilitiesEXT"/>
+                <type name="VkVideoEncodeH265SessionCreateInfoEXT"/>
+                <type name="VkVideoEncodeH265QualityLevelPropertiesEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersAddInfoEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersGetInfoEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersFeedbackInfoEXT"/>
+                <type name="VkVideoEncodeH265PictureInfoEXT"/>
+                <type name="VkVideoEncodeH265DpbSlotInfoEXT"/>
+                <type name="VkVideoEncodeH265NaluSliceSegmentInfoEXT"/>
+                <type name="VkVideoEncodeH265ProfileInfoEXT"/>
+                <type name="VkVideoEncodeH265RateControlInfoEXT"/>
+                <type name="VkVideoEncodeH265RateControlFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265RateControlFlagsEXT"/>
+                <type name="VkVideoEncodeH265RateControlLayerInfoEXT"/>
+                <type name="VkVideoEncodeH265QpEXT"/>
+                <type name="VkVideoEncodeH265FrameSizeEXT"/>
+                <type name="VkVideoEncodeH265GopRemainingFrameInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_decode_h264" number="41" type="device" depends="VK_KHR_video_decode_queue" author="KHR" contact="peter.fang@amd.com" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="8"                                              name="VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_video_decode_h264&quot;"           name="VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR"/>
+                <enum offset="4" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR"/>
+                <enum offset="5" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR"/>
+                <enum offset="6" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR"/>
+                <enum bitpos="0" extends="VkVideoCodecOperationFlagBitsKHR"  name="VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR"/>
+                <type name="VkVideoDecodeH264PictureLayoutFlagBitsKHR"/>
+                <type name="VkVideoDecodeH264PictureLayoutFlagsKHR"/>
+                <type name="VkVideoDecodeH264ProfileInfoKHR"/>
+                <type name="VkVideoDecodeH264CapabilitiesKHR"/>
+                <type name="VkVideoDecodeH264SessionParametersCreateInfoKHR"/>
+                <type name="VkVideoDecodeH264SessionParametersAddInfoKHR"/>
+                <type name="VkVideoDecodeH264PictureInfoKHR"/>
+                <type name="VkVideoDecodeH264DpbSlotInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_texture_gather_bias_lod" number="42" author="AMD" contact="Rex Xu @amdrexu" supported="vulkan" type="device" depends="VK_KHR_get_physical_device_properties2">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_texture_gather_bias_lod&quot;"        name="VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"/>
+                <type name="VkTextureLODGatherFormatPropertiesAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_info" number="43" author="AMD" contact="Jaakko Konttinen @jaakkoamd" supported="vulkan" specialuse="devtools" type="device">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_SHADER_INFO_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_info&quot;"                    name="VK_AMD_SHADER_INFO_EXTENSION_NAME"/>
+                <type name="VkShaderInfoTypeAMD"/>
+                <type name="VkShaderResourceUsageAMD"/>
+                <type name="VkShaderStatisticsInfoAMD"/>
+                <command name="vkGetShaderInfoAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_44" number="44" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_44_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_44&quot;"                   name="VK_AMD_EXTENSION_44_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_dynamic_rendering" number="45" author="KHR" type="device" depends="VK_KHR_depth_stencil_resolve+VK_KHR_get_physical_device_properties2" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_dynamic_rendering&quot;"              name="VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME"/>
+                <command name="vkCmdBeginRenderingKHR"/>
+                <command name="vkCmdEndRenderingKHR"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_RENDERING_INFO_KHR" alias="VK_STRUCTURE_TYPE_RENDERING_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR" alias="VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR" alias="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO"/>
+                <enum extends="VkAttachmentStoreOp"                             name="VK_ATTACHMENT_STORE_OP_NONE_KHR" alias="VK_ATTACHMENT_STORE_OP_NONE"/>
+                <type name="VkRenderingInfoKHR"/>
+                <type name="VkRenderingAttachmentInfoKHR"/>
+                <type name="VkPipelineRenderingCreateInfoKHR"/>
+                <type name="VkPhysicalDeviceDynamicRenderingFeaturesKHR"/>
+                <type name="VkCommandBufferInheritanceRenderingInfoKHR"/>
+                <type name="VkRenderingFlagsKHR"/>
+                <type name="VkRenderingFlagBitsKHR"/>
+            </require>
+            <require depends="VK_KHR_fragment_shading_rate">
+                <enum bitpos="21" extends="VkPipelineCreateFlagBits"                name="VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum alias="VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR" deprecated="aliased"/>
+                <enum offset="6" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"/>
+                <type name="VkRenderingFragmentShadingRateAttachmentInfoKHR"/>
+            </require>
+            <require depends="VK_EXT_fragment_density_map">
+                <enum bitpos="22" extends="VkPipelineCreateFlagBits"                name="VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"/>
+                <enum alias="VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT" deprecated="aliased"/>
+                <enum offset="7" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"/>
+                <type name="VkRenderingFragmentDensityMapAttachmentInfoEXT"/>
+            </require>
+            <require depends="VK_AMD_mixed_attachment_samples">
+                <enum offset="8" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"/>
+                <type name="VkAttachmentSampleCountInfoAMD"/>
+            </require>
+            <require depends="VK_NV_framebuffer_mixed_samples">
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV" alias="VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"/>
+                <type name="VkAttachmentSampleCountInfoNV"/>
+            </require>
+            <require depends="VK_NVX_multiview_per_view_attributes">
+                <enum offset="9" extends="VkStructureType" extnumber="45"           name="VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX"/>
+                <type name="VkMultiviewPerViewAttributesInfoNVX"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_46" number="46" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_AMD_EXTENSION_46_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_46&quot;"                   name="VK_AMD_EXTENSION_46_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_image_load_store_lod" number="47" author="AMD" contact="Dominik Witczak @dominikwitczakamd" supported="vulkan" type="device">
+            <require>
+                <enum value="1"                                                 name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_image_load_store_lod&quot;"    name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_extension_48" number="48" author="NVX" contact="James Jones @cubanismo" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_NVX_EXTENSION_48_SPEC_VERSION"/>
+                <enum value="&quot;VK_NVX_extension_48&quot;"                   name="VK_NVX_EXTENSION_48_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_49" number="49" author="GOOGLE" contact="Jean-Francois Roy @jfroy" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_GOOGLE_EXTENSION_49_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_49&quot;"                name="VK_GOOGLE_EXTENSION_49_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_stream_descriptor_surface" number="50" type="instance" depends="VK_KHR_surface" platform="ggp" author="GGP" contact="Jean-Francois Roy @jfroy" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_stream_descriptor_surface&quot;"      name="VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"/>
+                <type name="VkStreamDescriptorSurfaceCreateFlagsGGP"/>
+                <type name="VkStreamDescriptorSurfaceCreateInfoGGP"/>
+                <command name="vkCreateStreamDescriptorSurfaceGGP"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_corner_sampled_image" number="51" author="NV" type="device" depends="VK_KHR_get_physical_device_properties2" contact="Daniel Koch @dgkoch" supported="vulkan">
+            <require>
+                <enum value="2"                                                 name="VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_corner_sampled_image&quot;"            name="VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME"/>
+                <enum bitpos="13" extends="VkImageCreateFlagBits"               name="VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"/>
+                <type name="VkPhysicalDeviceCornerSampledImageFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_private_vendor_info" number="52" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkansc">
+            <require>
+                <enum value="2"                                                 name="VK_NV_PRIVATE_VENDOR_INFO_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_private_vendor_info&quot;"             name="VK_NV_PRIVATE_VENDOR_INFO_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PRIVATE_VENDOR_INFO_PLACEHOLDER_OFFSET_0_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_53" number="53" author="NV" contact="Jeff Bolz @jeffbolznv" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_NV_EXTENSION_53_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_53&quot;"                    name="VK_NV_EXTENSION_53_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_multiview" number="54" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_MULTIVIEW_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_multiview&quot;"                      name="VK_KHR_MULTIVIEW_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"/>
+                <enum extends="VkDependencyFlagBits"                            name="VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR" alias="VK_DEPENDENCY_VIEW_LOCAL_BIT"/>
+                <type name="VkRenderPassMultiviewCreateInfoKHR"/>
+                <type name="VkPhysicalDeviceMultiviewFeaturesKHR"/>
+                <type name="VkPhysicalDeviceMultiviewPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_IMG_format_pvrtc" number="55" type="device" author="IMG" contact="Stuart Smith" supported="vulkan" deprecatedby="">
+            <require>
+                <enum value="1"                                                 name="VK_IMG_FORMAT_PVRTC_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_format_pvrtc&quot;"                   name="VK_IMG_FORMAT_PVRTC_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkFormat"                             name="VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"/>
+                <enum offset="1" extends="VkFormat"                             name="VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"/>
+                <enum offset="2" extends="VkFormat"                             name="VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"/>
+                <enum offset="3" extends="VkFormat"                             name="VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"/>
+                <enum offset="4" extends="VkFormat"                             name="VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"/>
+                <enum offset="5" extends="VkFormat"                             name="VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"/>
+                <enum offset="6" extends="VkFormat"                             name="VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"/>
+                <enum offset="7" extends="VkFormat"                             name="VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_memory_capabilities" number="56" type="instance" author="NV" contact="James Jones @cubanismo" supported="vulkan" deprecatedby="VK_KHR_external_memory_capabilities">
+            <require>
+                <enum value="1"                                                 name="VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_memory_capabilities&quot;"    name="VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"/>
+                <type name="VkExternalMemoryHandleTypeFlagsNV"/>
+                <type name="VkExternalMemoryHandleTypeFlagBitsNV"/>
+                <type name="VkExternalMemoryFeatureFlagsNV"/>
+                <type name="VkExternalMemoryFeatureFlagBitsNV"/>
+                <type name="VkExternalImageFormatPropertiesNV"/>
+                <command name="vkGetPhysicalDeviceExternalImageFormatPropertiesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_memory" number="57" type="device" depends="VK_NV_external_memory_capabilities" author="NV" contact="James Jones @cubanismo" supported="vulkan" deprecatedby="VK_KHR_external_memory">
+            <require>
+                <enum value="1"                                                 name="VK_NV_EXTERNAL_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_memory&quot;"                 name="VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"/>
+                <type name="VkExternalMemoryImageCreateInfoNV"/>
+                <type name="VkExportMemoryAllocateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_memory_win32" number="58" type="device" depends="VK_NV_external_memory" author="NV" contact="James Jones @cubanismo" platform="win32" supported="vulkan" deprecatedby="VK_KHR_external_memory_win32">
+            <require>
+                <enum value="1"                                                 name="VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_memory_win32&quot;"           name="VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"/>
+                <type name="VkImportMemoryWin32HandleInfoNV"/>
+                <type name="VkExportMemoryWin32HandleInfoNV"/>
+                <command name="vkGetMemoryWin32HandleNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_win32_keyed_mutex" number="59" type="device" depends="VK_NV_external_memory_win32" author="NV" contact="Carsten Rohde @crohde" platform="win32" supported="vulkan" promotedto="VK_KHR_win32_keyed_mutex">
+            <require>
+                <enum value="2"                                                 name="VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_win32_keyed_mutex&quot;"               name="VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"/>
+                <type name="VkWin32KeyedMutexAcquireReleaseInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_get_physical_device_properties2" number="60" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="2"                                                 name="VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_get_physical_device_properties2&quot;" name="VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR" alias="VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"/>
+                <type name="VkPhysicalDeviceFeatures2KHR"/>
+                <type name="VkPhysicalDeviceProperties2KHR"/>
+                <type name="VkFormatProperties2KHR"/>
+                <type name="VkImageFormatProperties2KHR"/>
+                <type name="VkPhysicalDeviceImageFormatInfo2KHR"/>
+                <type name="VkQueueFamilyProperties2KHR"/>
+                <type name="VkPhysicalDeviceMemoryProperties2KHR"/>
+                <type name="VkSparseImageFormatProperties2KHR"/>
+                <type name="VkPhysicalDeviceSparseImageFormatInfo2KHR"/>
+                <command name="vkGetPhysicalDeviceFeatures2KHR"/>
+                <command name="vkGetPhysicalDeviceProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceFormatProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceImageFormatProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceQueueFamilyProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceMemoryProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceSparseImageFormatProperties2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_device_group" number="61" type="device" author="KHR" depends="VK_KHR_device_group_creation" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="4"                                                 name="VK_KHR_DEVICE_GROUP_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_device_group&quot;"                   name="VK_KHR_DEVICE_GROUP_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"/>
+                <type name="VkPeerMemoryFeatureFlagsKHR"/>
+                <type name="VkPeerMemoryFeatureFlagBitsKHR"/>
+                <enum extends="VkPeerMemoryFeatureFlagBits"                     name="VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR" alias="VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"/>
+                <enum extends="VkPeerMemoryFeatureFlagBits"                     name="VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR" alias="VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"/>
+                <enum extends="VkPeerMemoryFeatureFlagBits"                     name="VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR" alias="VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"/>
+                <enum extends="VkPeerMemoryFeatureFlagBits"                     name="VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR" alias="VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"/>
+                <type name="VkMemoryAllocateFlagsKHR"/>
+                <type name="VkMemoryAllocateFlagBitsKHR"/>
+                <enum extends="VkMemoryAllocateFlagBits"                        name="VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR" alias="VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"/>
+                <type name="VkMemoryAllocateFlagsInfoKHR"/>
+                <type name="VkDeviceGroupRenderPassBeginInfoKHR"/>
+                <type name="VkDeviceGroupCommandBufferBeginInfoKHR"/>
+                <type name="VkDeviceGroupSubmitInfoKHR"/>
+                <type name="VkDeviceGroupBindSparseInfoKHR"/>
+                <command name="vkGetDeviceGroupPeerMemoryFeaturesKHR"/>
+                <command name="vkCmdSetDeviceMaskKHR"/>
+                <command name="vkCmdDispatchBaseKHR"/>
+                <enum extends="VkPipelineCreateFlagBits"                        name="VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR" alias="VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"/>
+                <enum extends="VkPipelineCreateFlagBits"                        name="VK_PIPELINE_CREATE_DISPATCH_BASE_KHR" alias="VK_PIPELINE_CREATE_DISPATCH_BASE"/>
+                <enum extends="VkDependencyFlagBits"                            name="VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR" alias="VK_DEPENDENCY_DEVICE_GROUP_BIT"/>
+            </require>
+            <require depends="VK_KHR_bind_memory2">
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR" alias="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR" alias="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"/>
+                <type name="VkBindBufferMemoryDeviceGroupInfoKHR"/>
+                <type name="VkBindImageMemoryDeviceGroupInfoKHR"/>
+                <enum extends="VkImageCreateFlagBits"                           name="VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR" alias="VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"/>
+            </require>
+            <require depends="VK_KHR_surface">
+                <enum offset="7" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"/>
+                <type name="VkDeviceGroupPresentModeFlagBitsKHR"/>
+                <type name="VkDeviceGroupPresentModeFlagsKHR"/>
+                <type name="VkDeviceGroupPresentCapabilitiesKHR"/>
+                <command name="vkGetDeviceGroupPresentCapabilitiesKHR"/>
+                <command name="vkGetDeviceGroupSurfacePresentModesKHR"/>
+                <command name="vkGetPhysicalDevicePresentRectanglesKHR"/>
+            </require>
+            <require depends="VK_KHR_swapchain">
+                <enum offset="8" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"/>
+                <enum offset="9" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"/>
+                <enum offset="10" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"/>
+                <enum offset="11" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"/>
+                <enum offset="12" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"/>
+                <enum bitpos="0" extends="VkSwapchainCreateFlagBitsKHR"         name="VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR" comment="Allow images with VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"/>
+                <type name="VkImageSwapchainCreateInfoKHR"/>
+                <type name="VkBindImageMemorySwapchainInfoKHR"/>
+                <type name="VkAcquireNextImageInfoKHR"/>
+                <type name="VkDeviceGroupPresentInfoKHR"/>
+                <type name="VkDeviceGroupSwapchainCreateInfoKHR"/>
+                <command name="vkAcquireNextImage2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_validation_flags" number="62" type="instance" author="GOOGLE" contact="Tobin Ehlis @tobine" specialuse="debugging" supported="vulkan" deprecatedby="VK_EXT_validation_features">
+            <require>
+                <enum value="2"                                                 name="VK_EXT_VALIDATION_FLAGS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_validation_flags&quot;"               name="VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"/>
+                <type name="VkValidationFlagsEXT"/>
+                <type name="VkValidationCheckEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NN_vi_surface" number="63" type="instance" author="NN" contact="Mathias Heyer gitlab:@mheyer" depends="VK_KHR_surface" platform="vi" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NN_VI_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NN_vi_surface&quot;"                      name="VK_NN_VI_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"/>
+                <type name="VkViSurfaceCreateFlagsNN"/>
+                <type name="VkViSurfaceCreateInfoNN"/>
+                <command name="vkCreateViSurfaceNN"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_draw_parameters" number="64" type="device" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_draw_parameters&quot;"         name="VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_subgroup_ballot" number="65" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan" deprecatedby="VK_VERSION_1_2">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_subgroup_ballot&quot;"         name="VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_subgroup_vote" number="66" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan" deprecatedby="VK_VERSION_1_1">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_subgroup_vote&quot;"           name="VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_texture_compression_astc_hdr" number="67" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_texture_compression_astc_hdr&quot;"   name="VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES"/>
+                <type name="VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK"/>
+                <enum extends="VkFormat"                                        name="VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT" alias="VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_astc_decode_mode" number="68" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_astc_decode_mode&quot;"               name="VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"/>
+                <type name="VkImageViewASTCDecodeModeEXT"/>
+                <type name="VkPhysicalDeviceASTCDecodeFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_robustness" depends="VK_KHR_get_physical_device_properties2" number="69" type="device" author="IMG" contact="Jarred Davies" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_robustness&quot;"            name="VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDevicePipelineRobustnessFeaturesEXT"/>
+                <type name="VkPhysicalDevicePipelineRobustnessPropertiesEXT"/>
+                <type name="VkPipelineRobustnessCreateInfoEXT"/>
+                <type name="VkPipelineRobustnessBufferBehaviorEXT"/>
+                <type name="VkPipelineRobustnessImageBehaviorEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_maintenance1" number="70" type="device" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="2"                                                 name="VK_KHR_MAINTENANCE_1_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance1&quot;"                   name="VK_KHR_MAINTENANCE_1_EXTENSION_NAME"/>
+                <enum alias="VK_KHR_MAINTENANCE_1_SPEC_VERSION"                 name="VK_KHR_MAINTENANCE1_SPEC_VERSION" deprecated="aliased"/>
+                <enum alias="VK_KHR_MAINTENANCE_1_EXTENSION_NAME"               name="VK_KHR_MAINTENANCE1_EXTENSION_NAME" deprecated="aliased"/>
+                <enum extends="VkResult"                                        name="VK_ERROR_OUT_OF_POOL_MEMORY_KHR" alias="VK_ERROR_OUT_OF_POOL_MEMORY"/>
+                <enum extends="VkFormatFeatureFlagBits"                         name="VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR" alias="VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                         name="VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR" alias="VK_FORMAT_FEATURE_TRANSFER_DST_BIT"/>
+                <enum extends="VkImageCreateFlagBits"                           name="VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR" alias="VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"/>
+                <type name="VkCommandPoolTrimFlagsKHR"/>
+                <command name="vkTrimCommandPoolKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_device_group_creation" number="71" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_device_group_creation&quot;"          name="VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"/>
+                <enum name="VK_MAX_DEVICE_GROUP_SIZE_KHR"/>
+                <type name="VkPhysicalDeviceGroupPropertiesKHR"/>
+                <type name="VkDeviceGroupDeviceCreateInfoKHR"/>
+                <command name="vkEnumeratePhysicalDeviceGroupsKHR"/>
+                <enum extends="VkMemoryHeapFlagBits"                            name="VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR" alias="VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_memory_capabilities" number="72" type="instance" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_memory_capabilities&quot;"   name="VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
+                <enum name="VK_LUID_SIZE_KHR"/>
+                <type name="VkExternalMemoryHandleTypeFlagsKHR"/>
+                <type name="VkExternalMemoryHandleTypeFlagBitsKHR"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"/>
+                <enum extends="VkExternalMemoryHandleTypeFlagBits"              name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR" alias="VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"/>
+                <type name="VkExternalMemoryFeatureFlagsKHR"/>
+                <type name="VkExternalMemoryFeatureFlagBitsKHR"/>
+                <enum extends="VkExternalMemoryFeatureFlagBits"                 name="VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR" alias="VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"/>
+                <enum extends="VkExternalMemoryFeatureFlagBits"                 name="VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR" alias="VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"/>
+                <enum extends="VkExternalMemoryFeatureFlagBits"                 name="VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR" alias="VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"/>
+                <type name="VkExternalMemoryPropertiesKHR"/>
+                <type name="VkPhysicalDeviceExternalImageFormatInfoKHR"/>
+                <type name="VkExternalImageFormatPropertiesKHR"/>
+                <type name="VkPhysicalDeviceExternalBufferInfoKHR"/>
+                <type name="VkExternalBufferPropertiesKHR"/>
+                <type name="VkPhysicalDeviceIDPropertiesKHR"/>
+                <command name="vkGetPhysicalDeviceExternalBufferPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_memory" number="73" type="device" depends="VK_KHR_external_memory_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_memory&quot;"                name="VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"/>
+                <enum extends="VkResult"                                        name="VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR" alias="VK_ERROR_INVALID_EXTERNAL_HANDLE"/>
+                <enum name="VK_QUEUE_FAMILY_EXTERNAL_KHR"/>
+                <type name="VkExternalMemoryImageCreateInfoKHR"/>
+                <type name="VkExternalMemoryBufferCreateInfoKHR"/>
+                <type name="VkExportMemoryAllocateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_memory_win32" number="74" type="device" depends="VK_KHR_external_memory" author="KHR" contact="James Jones @cubanismo" platform="win32" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_memory_win32&quot;"          name="VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"/>
+                <enum offset="3" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"/>
+                <type name="VkImportMemoryWin32HandleInfoKHR"/>
+                <type name="VkExportMemoryWin32HandleInfoKHR"/>
+                <type name="VkMemoryWin32HandlePropertiesKHR"/>
+                <type name="VkMemoryGetWin32HandleInfoKHR"/>
+                <command name="vkGetMemoryWin32HandleKHR"/>
+                <command name="vkGetMemoryWin32HandlePropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_memory_fd" number="75" type="device" depends="VK_KHR_external_memory,VK_VERSION_1_1" author="KHR" contact="James Jones @cubanismo" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_memory_fd&quot;"             name="VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"/>
+                <type name="VkImportMemoryFdInfoKHR"/>
+                <type name="VkMemoryFdPropertiesKHR"/>
+                <type name="VkMemoryGetFdInfoKHR"/>
+                <command name="vkGetMemoryFdKHR"/>
+                <command name="vkGetMemoryFdPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_win32_keyed_mutex" number="76" type="device" depends="VK_KHR_external_memory_win32" author="KHR" contact="Carsten Rohde @crohde" platform="win32" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_win32_keyed_mutex&quot;"              name="VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"/>
+                <type name="VkWin32KeyedMutexAcquireReleaseInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_semaphore_capabilities" number="77" type="instance" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_semaphore_capabilities&quot;" name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
+                <enum name="VK_LUID_SIZE_KHR"/>
+                <type name="VkExternalSemaphoreHandleTypeFlagsKHR"/>
+                <type name="VkExternalSemaphoreHandleTypeFlagBitsKHR"/>
+                <enum extends="VkExternalSemaphoreHandleTypeFlagBits"       name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+                <enum extends="VkExternalSemaphoreHandleTypeFlagBits"       name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+                <enum extends="VkExternalSemaphoreHandleTypeFlagBits"       name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+                <enum extends="VkExternalSemaphoreHandleTypeFlagBits"       name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"/>
+                <enum extends="VkExternalSemaphoreHandleTypeFlagBits"       name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"/>
+                <type name="VkExternalSemaphoreFeatureFlagsKHR"/>
+                <type name="VkExternalSemaphoreFeatureFlagBitsKHR"/>
+                <enum extends="VkExternalSemaphoreFeatureFlagBits"          name="VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"/>
+                <enum extends="VkExternalSemaphoreFeatureFlagBits"          name="VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR" alias="VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"/>
+                <type name="VkPhysicalDeviceExternalSemaphoreInfoKHR"/>
+                <type name="VkExternalSemaphorePropertiesKHR"/>
+                <type name="VkPhysicalDeviceIDPropertiesKHR"/>
+                <command name="vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_semaphore" number="78" type="device" depends="VK_KHR_external_semaphore_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_semaphore&quot;"         name="VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"/>
+                <type name="VkSemaphoreImportFlagsKHR"/>
+                <type name="VkSemaphoreImportFlagBitsKHR"/>
+                <enum extends="VkSemaphoreImportFlagBits"                   name="VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR" alias="VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"/>
+                <type name="VkExportSemaphoreCreateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_semaphore_win32" number="79" type="device" depends="VK_KHR_external_semaphore" author="KHR" contact="James Jones @cubanismo" platform="win32" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_semaphore_win32&quot;"   name="VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"/>
+                <type name="VkImportSemaphoreWin32HandleInfoKHR"/>
+                <type name="VkExportSemaphoreWin32HandleInfoKHR"/>
+                <type name="VkD3D12FenceSubmitInfoKHR"/>
+                <type name="VkSemaphoreGetWin32HandleInfoKHR"/>
+                <command name="vkImportSemaphoreWin32HandleKHR"/>
+                <command name="vkGetSemaphoreWin32HandleKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_semaphore_fd" number="80" type="device" depends="VK_KHR_external_semaphore,VK_VERSION_1_1" author="KHR" contact="James Jones @cubanismo" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_semaphore_fd&quot;"      name="VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"/>
+                <type name="VkImportSemaphoreFdInfoKHR"/>
+                <type name="VkSemaphoreGetFdInfoKHR"/>
+                <command name="vkImportSemaphoreFdKHR"/>
+                <command name="vkGetSemaphoreFdKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_push_descriptor" number="81" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_push_descriptor&quot;"            name="VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"/>
+                <enum bitpos="0" extends="VkDescriptorSetLayoutCreateFlagBits"   name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"  comment="Descriptors are pushed via flink:vkCmdPushDescriptorSetKHR"/>
+                <command name="vkCmdPushDescriptorSetKHR"/>
+                <type name="VkPhysicalDevicePushDescriptorPropertiesKHR"/>
+            </require>
+            <require depends="VK_VERSION_1_1">
+                <command name="vkCmdPushDescriptorSetWithTemplateKHR"/>
+                <enum value="1" extends="VkDescriptorUpdateTemplateType"    name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
+            </require>
+            <require depends="VK_KHR_descriptor_update_template">
+                <command name="vkCmdPushDescriptorSetWithTemplateKHR"/>
+                <enum value="1" extends="VkDescriptorUpdateTemplateType"    name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_conditional_rendering" number="82" type="device" author="NV" contact="Vikram Kushwaha @vkushwaha" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_conditional_rendering&quot;"      name="VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT"/>
+                <type name="VkConditionalRenderingFlagsEXT"/>
+                <type name="VkConditionalRenderingFlagBitsEXT"/>
+                <enum bitpos="20" extends="VkAccessFlagBits"                name="VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT"  comment="read access flag for reading conditional rendering predicate"/>
+                <enum bitpos="9"  extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT" comment="Specifies the buffer can be used as predicate in conditional rendering"/>
+                <enum bitpos="18" extends="VkPipelineStageFlagBits"         name="VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT" comment="A pipeline stage for conditional rendering predicate fetch"/>
+                <command name="vkCmdBeginConditionalRenderingEXT"/>
+                <command name="vkCmdEndConditionalRenderingEXT"/>
+                <type name="VkConditionalRenderingBeginInfoEXT"/>
+                <type name="VkPhysicalDeviceConditionalRenderingFeaturesEXT"/>
+                <type name="VkCommandBufferInheritanceConditionalRenderingInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_float16_int8" number="83" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_float16_int8&quot;"        name="VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"/>
+                <type name="VkPhysicalDeviceShaderFloat16Int8FeaturesKHR"/>
+                <type name="VkPhysicalDeviceFloat16Int8FeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_16bit_storage" number="84" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class" author="KHR" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_16BIT_STORAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_16bit_storage&quot;"              name="VK_KHR_16BIT_STORAGE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"/>
+                <type name="VkPhysicalDevice16BitStorageFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_incremental_present" number="85" type="device" author="KHR" depends="VK_KHR_swapchain" contact="Ian Elliott @ianelliottus" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_incremental_present&quot;"        name="VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"/>
+                <type name="VkPresentRegionsKHR"/>
+                <type name="VkPresentRegionKHR"/>
+                <type name="VkRectLayerKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_descriptor_update_template" number="86" type="device" author="KHR" contact="Markus Tavenrath @mtavenrath" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_descriptor_update_template&quot;" name="VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"/>
+                <enum extends="VkObjectType"                                name="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR" alias="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"/>
+                <command name="vkCreateDescriptorUpdateTemplateKHR"/>
+                <command name="vkDestroyDescriptorUpdateTemplateKHR"/>
+                <command name="vkUpdateDescriptorSetWithTemplateKHR"/>
+                <type name="VkDescriptorUpdateTemplateKHR"/>
+                <type name="VkDescriptorUpdateTemplateCreateFlagsKHR"/>
+                <type name="VkDescriptorUpdateTemplateTypeKHR"/>
+                <type name="VkDescriptorUpdateTemplateEntryKHR"/>
+                <type name="VkDescriptorUpdateTemplateCreateInfoKHR"/>
+                <enum extends="VkDescriptorUpdateTemplateType"              name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR" alias="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"/>
+            </require>
+            <require depends="VK_KHR_push_descriptor">
+                <command name="vkCmdPushDescriptorSetWithTemplateKHR"/>
+                <enum value="1" extends="VkDescriptorUpdateTemplateType"    name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum extends="VkDebugReportObjectTypeEXT"                  name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT" alias="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_device_generated_commands" number="87" type="device" author="NVX" contact="Christoph Kubisch @pixeljetstream" supported="disabled">
+            <require>
+                <enum value="3"                                             name="VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"/>
+                <enum value="&quot;VK_NVX_device_generated_commands&quot;"  name="VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_clip_space_w_scaling" number="88" type="device" author="NV" contact="Eric Werness @ewerness-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_clip_space_w_scaling&quot;"        name="VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"/>
+                <type name="VkViewportWScalingNV"/>
+                <type name="VkPipelineViewportWScalingStateCreateInfoNV"/>
+                <command name="vkCmdSetViewportWScalingNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_direct_mode_display" number="89" type="instance" depends="VK_KHR_display" author="NV" contact="James Jones @cubanismo" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_direct_mode_display&quot;"        name="VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME"/>
+                <command name="vkReleaseDisplayEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_acquire_xlib_display" number="90" type="instance" depends="VK_EXT_direct_mode_display" author="NV" contact="James Jones @cubanismo" platform="xlib_xrandr" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_acquire_xlib_display&quot;"       name="VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME"/>
+                <command name="vkAcquireXlibDisplayEXT"/>
+                <command name="vkGetRandROutputDisplayEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_display_surface_counter" number="91" type="instance" depends="VK_KHR_display" author="NV" contact="James Jones @cubanismo" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_display_surface_counter&quot;"    name="VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME"/>
+                <enum offset="0"                                           extends="VkStructureType" name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"/>
+                <enum api="vulkan" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT" alias="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT" deprecated="aliased"/>
+                <type name="VkSurfaceCounterFlagsEXT"/>
+                <type name="VkSurfaceCounterFlagBitsEXT"/>
+                <type name="VkSurfaceCapabilities2EXT"/>
+                <command name="vkGetPhysicalDeviceSurfaceCapabilities2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_display_control" number="92" type="device" depends="VK_EXT_display_surface_counter+VK_KHR_swapchain" author="NV" contact="James Jones @cubanismo" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DISPLAY_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_display_control&quot;"            name="VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"/>
+                <type name="VkDisplayPowerStateEXT"/>
+                <type name="VkDeviceEventTypeEXT"/>
+                <type name="VkDisplayEventTypeEXT"/>
+                <type name="VkDisplayPowerInfoEXT"/>
+                <type name="VkDeviceEventInfoEXT"/>
+                <type name="VkDisplayEventInfoEXT"/>
+                <type name="VkSwapchainCounterCreateInfoEXT"/>
+                <command name="vkDisplayPowerControlEXT"/>
+                <command name="vkRegisterDeviceEventEXT"/>
+                <command name="vkRegisterDisplayEventEXT"/>
+                <command name="vkGetSwapchainCounterEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_display_timing" number="93" type="device" author="GOOGLE" depends="VK_KHR_swapchain" contact="Ian Elliott @ianelliottus" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_display_timing&quot;"          name="VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"/>
+                <type name="VkRefreshCycleDurationGOOGLE"/>
+                <type name="VkPastPresentationTimingGOOGLE"/>
+                <type name="VkPresentTimesInfoGOOGLE"/>
+                <type name="VkPresentTimeGOOGLE"/>
+                <command name="vkGetRefreshCycleDurationGOOGLE"/>
+                <command name="vkGetPastPresentationTimingGOOGLE"/>
+            </require>
+        </extension>
+        <extension name="VK_RESERVED_do_not_use_94" number="94" supported="disabled" comment="Used for functionality subsumed into Vulkan 1.1 and not published as an extension">
+            <require>
+                <enum value="1"                                             name="VK_RESERVED_DO_NOT_USE_94_SPEC_VERSION"/>
+                <enum value="&quot;VK_RESERVED_do_not_use_94&quot;"         name="VK_RESERVED_DO_NOT_USE_94_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_sample_mask_override_coverage" number="95" type="device" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_sample_mask_override_coverage&quot;" name="VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME"/>
+                <comment>
+                    enum offset=0 was mistakenly used for the 1.1 core enum
+                    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES
+                    (value=1000094000). Fortunately, no conflict resulted.
+                </comment>
+            </require>
+        </extension>
+        <extension name="VK_NV_geometry_shader_passthrough" number="96" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_geometry_shader_passthrough&quot;" name="VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_viewport_array2" number="97" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_viewport_array2&quot;"             name="VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME"/>
+                <enum alias="VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION"           name="VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION" deprecated="aliased"/>
+                <enum alias="VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME"         name="VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME" deprecated="aliased"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_multiview_per_view_attributes" number="98" type="device" depends="VK_KHR_multiview" author="NVX" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION"/>
+                <enum value="&quot;VK_NVX_multiview_per_view_attributes&quot;" name="VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"/>
+                <enum bitpos="0" extends="VkSubpassDescriptionFlagBits"     name="VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"/>
+                <enum bitpos="1" extends="VkSubpassDescriptionFlagBits"     name="VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"/>
+                <type name="VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_viewport_swizzle" number="99" type="device" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_viewport_swizzle&quot;"            name="VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"/>
+                <type name="VkViewportSwizzleNV"/>
+                <type name="VkViewportCoordinateSwizzleNV"/>
+                <type name="VkPipelineViewportSwizzleStateCreateInfoNV"/>
+                <type name="VkPipelineViewportSwizzleStateCreateFlagsNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_discard_rectangles" number="100" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_discard_rectangles&quot;"         name="VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"/>
+                <enum offset="1" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT"/>
+                <enum offset="2" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT"/>
+                <type name="VkPhysicalDeviceDiscardRectanglePropertiesEXT"/>
+                <type name="VkPipelineDiscardRectangleStateCreateInfoEXT"/>
+                <type name="VkPipelineDiscardRectangleStateCreateFlagsEXT"/>
+                <type name="VkDiscardRectangleModeEXT"/>
+                <command name="vkCmdSetDiscardRectangleEXT"/>
+                <command name="vkCmdSetDiscardRectangleEnableEXT"/>
+                <command name="vkCmdSetDiscardRectangleModeEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_101" number="101" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_101_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_101&quot;"               name="VK_NV_EXTENSION_101_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_conservative_rasterization" number="102" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_conservative_rasterization&quot;" name="VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceConservativeRasterizationPropertiesEXT"/>
+                <type name="VkPipelineRasterizationConservativeStateCreateInfoEXT"/>
+                <type name="VkPipelineRasterizationConservativeStateCreateFlagsEXT"/>
+                <type name="VkConservativeRasterizationModeEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_depth_clip_enable" number="103" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Piers Daniell @pdaniell-nv" specialuse="d3demulation" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_depth_clip_enable&quot;"          name="VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceDepthClipEnableFeaturesEXT"/>
+                <type name="VkPipelineRasterizationDepthClipStateCreateInfoEXT"/>
+                <type name="VkPipelineRasterizationDepthClipStateCreateFlagsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_104" number="104" author="NV" contact="Mathias Schott gitlab:@mschott" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_104_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_104&quot;"               name="VK_NV_EXTENSION_104_EXTENSION_NAME"/>
+                <enum bitpos="0"  extends="VkPrivateDataSlotCreateFlagBits" name="VK_PRIVATE_DATA_SLOT_CREATE_RESERVED_0_BIT_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_swapchain_colorspace" number="105" type="instance" depends="VK_KHR_surface" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" supported="vulkan,vulkansc">
+            <require>
+                <enum value="4"                                             name="VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_swapchain_colorspace&quot;"       name="VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME"/>
+                <enum offset="1" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"/>
+                <enum offset="2" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"/>
+                <enum offset="3" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT"/>
+                <enum offset="4" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"/>
+                <enum offset="5" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_BT709_LINEAR_EXT"/>
+                <enum offset="6" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_BT709_NONLINEAR_EXT"/>
+                <enum offset="7" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_BT2020_LINEAR_EXT"/>
+                <enum offset="8" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_HDR10_ST2084_EXT"/>
+                <enum offset="9" extends="VkColorSpaceKHR"                  name="VK_COLOR_SPACE_DOLBYVISION_EXT"/>
+                <enum offset="10" extends="VkColorSpaceKHR"                 name="VK_COLOR_SPACE_HDR10_HLG_EXT"/>
+                <enum offset="11" extends="VkColorSpaceKHR"                 name="VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT"/>
+                <enum offset="12" extends="VkColorSpaceKHR"                 name="VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"/>
+                <enum offset="13" extends="VkColorSpaceKHR"                 name="VK_COLOR_SPACE_PASS_THROUGH_EXT"/>
+                <enum offset="14" extends="VkColorSpaceKHR"                 name="VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"/>
+                <enum api="vulkan" extends="VkColorSpaceKHR"                name="VK_COLOR_SPACE_DCI_P3_LINEAR_EXT" alias="VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT" deprecated="aliased"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_hdr_metadata" number="106" type="device" depends="VK_KHR_swapchain" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_HDR_METADATA_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_hdr_metadata&quot;"               name="VK_EXT_HDR_METADATA_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_HDR_METADATA_EXT"/>
+                <type name="VkHdrMetadataEXT"/>
+                <type name="VkXYColorEXT"/>
+                <command name="vkSetHdrMetadataEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_IMG_extension_107" number="107" author="IMG" contact="Michael Worcester @michaelworcester" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_IMG_EXTENSION_107_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_extension_107&quot;"              name="VK_IMG_EXTENSION_107_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_IMG_extension_108" number="108" author="IMG" contact="Michael Worcester @michaelworcester" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_IMG_EXTENSION_108_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_extension_108&quot;"              name="VK_IMG_EXTENSION_108_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_imageless_framebuffer" depends="VK_KHR_maintenance2+VK_KHR_image_format_list+VK_KHR_get_physical_device_properties2" number="109" author="KHR" contact="Tobias Hector @tobias" type="device" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_imageless_framebuffer&quot;"      name="VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME"/>
+                <type name="VkPhysicalDeviceImagelessFramebufferFeaturesKHR"/>
+                <type name="VkFramebufferAttachmentsCreateInfoKHR"/>
+                <type name="VkFramebufferAttachmentImageInfoKHR"/>
+                <type name="VkRenderPassAttachmentBeginInfoKHR"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR" alias="VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR" alias="VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO"/>
+                <enum extends="VkFramebufferCreateFlagBits"                 name="VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR" alias="VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_create_renderpass2" depends="VK_KHR_multiview+VK_KHR_maintenance2" number="110" author="KHR" contact="Tobias Hector @tobias" type="device" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_create_renderpass2&quot;"         name="VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR" alias="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR" alias="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR" alias="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR" alias="VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR" alias="VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR" alias="VK_STRUCTURE_TYPE_SUBPASS_END_INFO"/>
+                <command name="vkCreateRenderPass2KHR"/>
+                <command name="vkCmdBeginRenderPass2KHR"/>
+                <command name="vkCmdNextSubpass2KHR"/>
+                <command name="vkCmdEndRenderPass2KHR"/>
+                <type name="VkRenderPassCreateInfo2KHR"/>
+                <type name="VkAttachmentDescription2KHR"/>
+                <type name="VkAttachmentReference2KHR"/>
+                <type name="VkSubpassDescription2KHR"/>
+                <type name="VkSubpassDependency2KHR"/>
+                <type name="VkSubpassBeginInfoKHR"/>
+                <type name="VkSubpassEndInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_IMG_extension_111" number="111" author="IMG" contact="Michael Worcester @michaelworcester" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_IMG_EXTENSION_111_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_extension_111&quot;"              name="VK_IMG_EXTENSION_111_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shared_presentable_image" number="112" type="device" depends="VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)" author="KHR" contact="Alon Or-bach @alonorbach" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shared_presentable_image&quot;"   name="VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"/>
+                <enum offset="0" extends="VkPresentModeKHR"                 name="VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"/>
+                <enum offset="1" extends="VkPresentModeKHR"                 name="VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"/>
+                <enum offset="0" extends="VkImageLayout"                    name="VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR"/>
+                <type name="VkSharedPresentSurfaceCapabilitiesKHR"/>
+                <command name="vkGetSwapchainStatusKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_fence_capabilities" number="113" type="instance" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_fence_capabilities&quot;" name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"/>
+                <enum name="VK_LUID_SIZE_KHR"/>
+                <type name="VkExternalFenceHandleTypeFlagsKHR"/>
+                <type name="VkExternalFenceHandleTypeFlagBitsKHR"/>
+                <enum extends="VkExternalFenceHandleTypeFlagBits"           name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR" alias="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"/>
+                <enum extends="VkExternalFenceHandleTypeFlagBits"           name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR" alias="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"/>
+                <enum extends="VkExternalFenceHandleTypeFlagBits"           name="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR" alias="VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"/>
+                <enum extends="VkExternalFenceHandleTypeFlagBits"           name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR" alias="VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"/>
+                <type name="VkExternalFenceFeatureFlagsKHR"/>
+                <type name="VkExternalFenceFeatureFlagBitsKHR"/>
+                <enum extends="VkExternalFenceFeatureFlagBits"              name="VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR" alias="VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"/>
+                <enum extends="VkExternalFenceFeatureFlagBits"              name="VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR" alias="VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"/>
+                <type name="VkPhysicalDeviceExternalFenceInfoKHR"/>
+                <type name="VkExternalFencePropertiesKHR"/>
+                <type name="VkPhysicalDeviceIDPropertiesKHR"/>
+                <command name="vkGetPhysicalDeviceExternalFencePropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_fence" number="114" type="device" depends="VK_KHR_external_fence_capabilities" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_FENCE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_fence&quot;"             name="VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"/>
+                <type name="VkFenceImportFlagsKHR"/>
+                <type name="VkFenceImportFlagBitsKHR"/>
+                <enum extends="VkFenceImportFlagBits"                       name="VK_FENCE_IMPORT_TEMPORARY_BIT_KHR" alias="VK_FENCE_IMPORT_TEMPORARY_BIT"/>
+                <type name="VkExportFenceCreateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_fence_win32" number="115" type="device" depends="VK_KHR_external_fence" author="KHR" contact="Jesse Hall @critsec" platform="win32" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_fence_win32&quot;"       name="VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"/>
+                <type name="VkImportFenceWin32HandleInfoKHR"/>
+                <type name="VkExportFenceWin32HandleInfoKHR"/>
+                <type name="VkFenceGetWin32HandleInfoKHR"/>
+                <command name="vkImportFenceWin32HandleKHR"/>
+                <command name="vkGetFenceWin32HandleKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_external_fence_fd" number="116" type="device" depends="VK_KHR_external_fence,VK_VERSION_1_1" author="KHR" contact="Jesse Hall @critsec" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_external_fence_fd&quot;"          name="VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"/>
+                <type name="VkImportFenceFdInfoKHR"/>
+                <type name="VkFenceGetFdInfoKHR"/>
+                <command name="vkImportFenceFdKHR"/>
+                <command name="vkGetFenceFdKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_performance_query" number="117" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="KHR" contact="Alon Or-bach @alonorbach" specialuse="devtools" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                    name="VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_performance_query&quot;" name="VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkQueryType"             name="VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR"/>
+                <enum offset="0" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR"/>
+                <enum offset="4" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR"/>
+                <enum offset="5" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR"/>
+                <enum offset="6" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"/>
+                <type name="VkPhysicalDevicePerformanceQueryFeaturesKHR"/>
+                <type name="VkPhysicalDevicePerformanceQueryPropertiesKHR"/>
+                <type name="VkPerformanceCounterKHR"/>
+                <type name="VkPerformanceCounterDescriptionKHR"/>
+                <type name="VkPerformanceCounterDescriptionFlagsKHR"/>
+                <type name="VkPerformanceCounterDescriptionFlagBitsKHR"/>
+                <type name="VkQueryPoolPerformanceCreateInfoKHR"/>
+                <type name="VkPerformanceCounterScopeKHR"/>
+                <type name="VkPerformanceCounterStorageKHR"/>
+                <type name="VkPerformanceCounterUnitKHR"/>
+                <type name="VkPerformanceCounterResultKHR"/>
+                <type name="VkAcquireProfilingLockInfoKHR"/>
+                <type name="VkAcquireProfilingLockFlagsKHR"/>
+                <type name="VkAcquireProfilingLockFlagBitsKHR"/>
+                <type name="VkPerformanceQuerySubmitInfoKHR"/>
+                <command name="vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"/>
+                <command name="vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"/>
+                <command name="vkAcquireProfilingLockKHR"/>
+                <command name="vkReleaseProfilingLockKHR"/>
+            </require>
+            <require depends="VKSC_VERSION_1_0" api="vulkansc">
+                <enum offset="7" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_RESERVATION_INFO_KHR"/>
+                <type name="VkPerformanceQueryReservationInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_maintenance2" number="118" type="device" author="KHR" contact="Michael Worcester @michaelworcester" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_MAINTENANCE_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance2&quot;"               name="VK_KHR_MAINTENANCE_2_EXTENSION_NAME"/>
+                <enum alias="VK_KHR_MAINTENANCE_2_SPEC_VERSION"             name="VK_KHR_MAINTENANCE2_SPEC_VERSION" deprecated="aliased"/>
+                <enum alias="VK_KHR_MAINTENANCE_2_EXTENSION_NAME"           name="VK_KHR_MAINTENANCE2_EXTENSION_NAME" deprecated="aliased"/>
+                <enum extends="VkImageCreateFlagBits"                       name="VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR" alias="VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"/>
+                <enum extends="VkImageCreateFlagBits"                       name="VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR" alias="VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"/>
+                <type name="VkPhysicalDevicePointClippingPropertiesKHR"/>
+                <type name="VkPointClippingBehaviorKHR"/>
+                <enum extends="VkPointClippingBehavior"                     name="VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR" alias="VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"/>
+                <enum extends="VkPointClippingBehavior"                     name="VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR" alias="VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"/>
+                <type name="VkRenderPassInputAttachmentAspectCreateInfoKHR"/>
+                <type name="VkInputAttachmentAspectReferenceKHR"/>
+                <type name="VkImageViewUsageCreateInfoKHR"/>
+                <type name="VkTessellationDomainOriginKHR"/>
+                <enum extends="VkTessellationDomainOrigin"                  name="VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR" alias="VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"/>
+                <enum extends="VkTessellationDomainOrigin"                  name="VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR" alias="VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"/>
+                <type name="VkPipelineTessellationDomainOriginStateCreateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_119" number="119" author="KHR" contact="Michael Worcester @michaelworcester" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_119_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_119&quot;"              name="VK_KHR_EXTENSION_119_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_get_surface_capabilities2" number="120" type="instance" depends="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_get_surface_capabilities2&quot;"  name="VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"/>
+                <type name="VkPhysicalDeviceSurfaceInfo2KHR"/>
+                <type name="VkSurfaceCapabilities2KHR"/>
+                <type name="VkSurfaceFormat2KHR"/>
+                <command name="vkGetPhysicalDeviceSurfaceCapabilities2KHR"/>
+                <command name="vkGetPhysicalDeviceSurfaceFormats2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_variable_pointers" number="121" type="device" author="KHR" contact="Jesse Hall @critsec" depends="VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_variable_pointers&quot;"          name="VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceVariablePointerFeaturesKHR"/>
+                <type name="VkPhysicalDeviceVariablePointersFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_get_display_properties2" number="122" type="instance" depends="VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_get_display_properties2&quot;"    name="VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"/>
+                <type name="VkDisplayProperties2KHR"/>
+                <type name="VkDisplayPlaneProperties2KHR"/>
+                <type name="VkDisplayModeProperties2KHR"/>
+                <type name="VkDisplayPlaneInfo2KHR"/>
+                <type name="VkDisplayPlaneCapabilities2KHR"/>
+                <command name="vkGetPhysicalDeviceDisplayProperties2KHR"/>
+                <command name="vkGetPhysicalDeviceDisplayPlaneProperties2KHR"/>
+                <command name="vkGetDisplayModeProperties2KHR"/>
+                <command name="vkGetDisplayPlaneCapabilities2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_MVK_ios_surface" number="123" type="instance" depends="VK_KHR_surface" platform="ios" supported="vulkan" author="MVK" contact="Bill Hollings @billhollings" deprecatedby="VK_EXT_metal_surface">
+            <require>
+                <enum value="3"                                             name="VK_MVK_IOS_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_MVK_ios_surface&quot;"                name="VK_MVK_IOS_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"/>
+                <type name="VkIOSSurfaceCreateFlagsMVK"/>
+                <type name="VkIOSSurfaceCreateInfoMVK"/>
+                <command name="vkCreateIOSSurfaceMVK"/>
+            </require>
+        </extension>
+        <extension name="VK_MVK_macos_surface" number="124" type="instance" depends="VK_KHR_surface" platform="macos" supported="vulkan" author="MVK" contact="Bill Hollings @billhollings" deprecatedby="VK_EXT_metal_surface">
+            <require>
+                <enum value="3"                                             name="VK_MVK_MACOS_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_MVK_macos_surface&quot;"              name="VK_MVK_MACOS_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"/>
+                <type name="VkMacOSSurfaceCreateFlagsMVK"/>
+                <type name="VkMacOSSurfaceCreateInfoMVK"/>
+                <command name="vkCreateMacOSSurfaceMVK"/>
+            </require>
+        </extension>
+        <extension name="VK_MVK_moltenvk" number="125" type="instance" author="MVK" contact="Bill Hollings @billhollings" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_MVK_MOLTENVK_SPEC_VERSION"/>
+                <enum value="&quot;VK_MVK_moltenvk&quot;"                   name="VK_MVK_MOLTENVK_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_external_memory_dma_buf" number="126" type="device" depends="VK_KHR_external_memory_fd" author="EXT" contact="Lina Versace @versalinyaa" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_external_memory_dma_buf&quot;"    name="VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME"/>
+                <enum bitpos="9" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_queue_family_foreign" number="127" type="device" author="EXT" depends="VK_KHR_external_memory,VK_VERSION_1_1" contact="Lina Versace @versalinyaa" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_queue_family_foreign&quot;"       name="VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME"/>
+                <enum                                                       name="VK_QUEUE_FAMILY_FOREIGN_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_dedicated_allocation" number="128" type="device" author="KHR" depends="VK_KHR_get_memory_requirements2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="3"                                             name="VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_dedicated_allocation&quot;"       name="VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"/>
+                <type name="VkMemoryDedicatedRequirementsKHR"/>
+                <type name="VkMemoryDedicatedAllocateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_debug_utils" number="129" type="instance" author="EXT" contact="Mark Young @marky-lunarg" specialuse="debugging" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_DEBUG_UTILS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_debug_utils&quot;"                name="VK_EXT_DEBUG_UTILS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"/>
+                <type name="PFN_vkDebugUtilsMessengerCallbackEXT"/>
+                <type name="VkDebugUtilsLabelEXT"/>
+                <type name="VkDebugUtilsMessageSeverityFlagBitsEXT"/>
+                <type name="VkDebugUtilsMessageSeverityFlagsEXT"/>
+                <type name="VkDebugUtilsMessageTypeFlagBitsEXT"/>
+                <type name="VkDebugUtilsMessageTypeFlagsEXT"/>
+                <type name="VkDebugUtilsMessengerCallbackDataEXT"/>
+                <type name="VkDebugUtilsMessengerCallbackDataFlagsEXT"/>
+                <type name="VkDebugUtilsMessengerCreateFlagsEXT"/>
+                <type name="VkDebugUtilsMessengerCreateInfoEXT"/>
+                <type name="VkDebugUtilsMessengerEXT"/>
+                <type name="VkDebugUtilsObjectNameInfoEXT"/>
+                <type name="VkDebugUtilsObjectTagInfoEXT"/>
+                <command name="vkSetDebugUtilsObjectNameEXT"/>
+                <command name="vkSetDebugUtilsObjectTagEXT"/>
+                <command name="vkQueueBeginDebugUtilsLabelEXT"/>
+                <command name="vkQueueEndDebugUtilsLabelEXT"/>
+                <command name="vkQueueInsertDebugUtilsLabelEXT"/>
+                <command name="vkCmdBeginDebugUtilsLabelEXT"/>
+                <command name="vkCmdEndDebugUtilsLabelEXT"/>
+                <command name="vkCmdInsertDebugUtilsLabelEXT"/>
+                <command name="vkCreateDebugUtilsMessengerEXT"/>
+                <command name="vkDestroyDebugUtilsMessengerEXT"/>
+                <command name="vkSubmitDebugUtilsMessageEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_ANDROID_external_memory_android_hardware_buffer" number="130" type="device" author="ANDROID" depends="VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_EXT_queue_family_foreign+VK_KHR_dedicated_allocation" platform="android" contact="Jesse Hall @critsec" supported="vulkan">
+            <require>
+                <enum value="5"                                             name="VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"/>
+                <enum value="&quot;VK_ANDROID_external_memory_android_hardware_buffer&quot;" name="VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME"/>
+                <enum bitpos="10" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"/>
+                <type name="VkAndroidHardwareBufferUsageANDROID"/>
+                <type name="VkAndroidHardwareBufferPropertiesANDROID"/>
+                <type name="VkAndroidHardwareBufferFormatPropertiesANDROID"/>
+                <type name="VkImportAndroidHardwareBufferInfoANDROID"/>
+                <type name="VkMemoryGetAndroidHardwareBufferInfoANDROID"/>
+                <type name="VkExternalFormatANDROID"/>
+                <command name="vkGetAndroidHardwareBufferPropertiesANDROID"/>
+                <command name="vkGetMemoryAndroidHardwareBufferANDROID"/>
+                <type name="AHardwareBuffer"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <type name="VkAndroidHardwareBufferFormatProperties2ANDROID"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_sampler_filter_minmax" number="131" type="device" author="NV" depends="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="2"                                             name="VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_sampler_filter_minmax&quot;"      name="VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"/>
+                <enum extends="VkSamplerReductionMode"                      name="VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT" alias="VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE"/>
+                <enum extends="VkSamplerReductionMode"                      name="VK_SAMPLER_REDUCTION_MODE_MIN_EXT" alias="VK_SAMPLER_REDUCTION_MODE_MIN"/>
+                <enum extends="VkSamplerReductionMode"                      name="VK_SAMPLER_REDUCTION_MODE_MAX_EXT" alias="VK_SAMPLER_REDUCTION_MODE_MAX"/>
+                <type name="VkSamplerReductionModeEXT"/>
+                <type name="VkSamplerReductionModeCreateInfoEXT"/>
+                <type name="VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_storage_buffer_storage_class" number="132" type="device" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_storage_buffer_storage_class&quot;" name="VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_gpu_shader_int16" number="133" type="device" author="AMD" contact="Qun Lin @linqun" supported="vulkan" deprecatedby="VK_KHR_shader_float16_int8">
+            <require>
+                <enum value="2"                                             name="VK_AMD_GPU_SHADER_INT16_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_gpu_shader_int16&quot;"           name="VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_134" number="134" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_134_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_134&quot;"              name="VK_AMD_EXTENSION_134_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMDX_shader_enqueue" number="135" author="AMD" depends="VK_KHR_get_physical_device_properties2+VK_KHR_synchronization2+VK_KHR_pipeline_library+VK_KHR_spirv_1_4" type="device" contact="Tobias Hector @tobski" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMDX_shader_enqueue&quot;"             name="VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME"/>
+                <enum                                                       name="VK_SHADER_INDEX_UNUSED_AMDX"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="25" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkPipelineBindPoint"              name="VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <type name="VkPhysicalDeviceShaderEnqueueFeaturesAMDX"/>
+                <type name="VkPhysicalDeviceShaderEnqueuePropertiesAMDX"/>
+                <type name="VkExecutionGraphPipelineScratchSizeAMDX"/>
+                <type name="VkExecutionGraphPipelineCreateInfoAMDX"/>
+                <type name="VkDispatchGraphInfoAMDX"/>
+                <type name="VkDispatchGraphCountInfoAMDX"/>
+                <type name="VkPipelineShaderStageNodeCreateInfoAMDX"/>
+                <type name="VkDeviceOrHostAddressConstAMDX"/>
+                <command name="vkCreateExecutionGraphPipelinesAMDX"/>
+                <command name="vkGetExecutionGraphPipelineScratchSizeAMDX"/>
+                <command name="vkGetExecutionGraphPipelineNodeIndexAMDX"/>
+                <command name="vkCmdInitializeGraphScratchMemoryAMDX"/>
+                <command name="vkCmdDispatchGraphAMDX"/>
+                <command name="vkCmdDispatchGraphIndirectAMDX"/>
+                <command name="vkCmdDispatchGraphIndirectCountAMDX"/>
+            </require>
+            <require depends="VK_KHR_maintenance5">
+                <enum bitpos="25" extends="VkBufferUsageFlagBits2KHR"       name="VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_136" number="136" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_136_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_136&quot;"              name="VK_AMD_EXTENSION_136_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_mixed_attachment_samples" number="137" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_mixed_attachment_samples&quot;"   name="VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_fragment_mask" number="138" author="AMD" contact="Aaron Hagan @AaronHaganAMD" supported="vulkan" type="device">
+            <require>
+                <enum value="1"                                             name="VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_fragment_mask&quot;"       name="VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_inline_uniform_block" number="139" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2+VK_KHR_maintenance1" contact="Daniel Rakos @aqnuep" supported="vulkan" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_inline_uniform_block&quot;"       name="VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME"/>
+                <enum extends="VkDescriptorType"                            name="VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT" alias="VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT" alias="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO"/>
+                <type name="VkPhysicalDeviceInlineUniformBlockFeaturesEXT"/>
+                <type name="VkPhysicalDeviceInlineUniformBlockPropertiesEXT"/>
+                <type name="VkWriteDescriptorSetInlineUniformBlockEXT"/>
+                <type name="VkDescriptorPoolInlineUniformBlockCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_140" number="140" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_140_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_140&quot;"              name="VK_AMD_EXTENSION_140_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_stencil_export" number="141" type="device" author="EXT" contact="Dominik Witczak @dominikwitczakamd" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_stencil_export&quot;"      name="VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_142" number="142" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_142_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_142&quot;"              name="VK_AMD_EXTENSION_142_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_143" number="143" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_143_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_143&quot;"              name="VK_AMD_EXTENSION_143_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_sample_locations" number="144" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_sample_locations&quot;"           name="VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME"/>
+                <enum bitpos="12" extends="VkImageCreateFlagBits"           name="VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"/>
+                <type name="VkSampleLocationEXT"/>
+                <type name="VkSampleLocationsInfoEXT"/>
+                <type name="VkAttachmentSampleLocationsEXT"/>
+                <type name="VkSubpassSampleLocationsEXT"/>
+                <type name="VkRenderPassSampleLocationsBeginInfoEXT"/>
+                <type name="VkPipelineSampleLocationsStateCreateInfoEXT"/>
+                <type name="VkPhysicalDeviceSampleLocationsPropertiesEXT"/>
+                <type name="VkMultisamplePropertiesEXT"/>
+                <command name="vkCmdSetSampleLocationsEXT"/>
+                <command name="vkGetPhysicalDeviceMultisamplePropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_relaxed_block_layout" number="145" type="device" author="KHR" contact="John Kessenich @johnkslang" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_relaxed_block_layout&quot;"       name="VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_RESERVED_do_not_use_146" number="146" supported="disabled" comment="Used for functionality subsumed into Vulkan 1.1 and not published as an extension">
+            <require>
+                <enum value="1"                                             name="VK_RESERVED_DO_NOT_USE_146_SPEC_VERSION"/>
+                <enum value="&quot;VK_RESERVED_do_not_use_146&quot;"        name="VK_RESERVED_DO_NOT_USE_146_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_get_memory_requirements2" number="147" type="device" author="KHR" contact="Faith Ekstrand @gfxstrand" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1" name="VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_get_memory_requirements2&quot;"   name="VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR" alias="VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"/>
+                <type name="VkBufferMemoryRequirementsInfo2KHR"/>
+                <type name="VkImageMemoryRequirementsInfo2KHR"/>
+                <type name="VkImageSparseMemoryRequirementsInfo2KHR"/>
+                <type name="VkMemoryRequirements2KHR"/>
+                <type name="VkSparseImageMemoryRequirements2KHR"/>
+                <command name="vkGetImageMemoryRequirements2KHR"/>
+                <command name="vkGetBufferMemoryRequirements2KHR"/>
+                <command name="vkGetImageSparseMemoryRequirements2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_image_format_list" number="148" type="device" author="KHR" contact="Faith Ekstrand @gfxstrand" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_image_format_list&quot;"          name="VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO"/>
+                <type name="VkImageFormatListCreateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_blend_operation_advanced" number="149" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_blend_operation_advanced&quot;"   name="VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT"/>
+                <type name="VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT"/>
+                <type name="VkPipelineColorBlendAdvancedStateCreateInfoEXT"/>
+                <type name="VkBlendOverlapEXT"/>
+                <enum offset="0" extends="VkBlendOp"                        name="VK_BLEND_OP_ZERO_EXT"/>
+                <enum offset="1" extends="VkBlendOp"                        name="VK_BLEND_OP_SRC_EXT"/>
+                <enum offset="2" extends="VkBlendOp"                        name="VK_BLEND_OP_DST_EXT"/>
+                <enum offset="3" extends="VkBlendOp"                        name="VK_BLEND_OP_SRC_OVER_EXT"/>
+                <enum offset="4" extends="VkBlendOp"                        name="VK_BLEND_OP_DST_OVER_EXT"/>
+                <enum offset="5" extends="VkBlendOp"                        name="VK_BLEND_OP_SRC_IN_EXT"/>
+                <enum offset="6" extends="VkBlendOp"                        name="VK_BLEND_OP_DST_IN_EXT"/>
+                <enum offset="7" extends="VkBlendOp"                        name="VK_BLEND_OP_SRC_OUT_EXT"/>
+                <enum offset="8" extends="VkBlendOp"                        name="VK_BLEND_OP_DST_OUT_EXT"/>
+                <enum offset="9" extends="VkBlendOp"                        name="VK_BLEND_OP_SRC_ATOP_EXT"/>
+                <enum offset="10" extends="VkBlendOp"                       name="VK_BLEND_OP_DST_ATOP_EXT"/>
+                <enum offset="11" extends="VkBlendOp"                       name="VK_BLEND_OP_XOR_EXT"/>
+                <enum offset="12" extends="VkBlendOp"                       name="VK_BLEND_OP_MULTIPLY_EXT"/>
+                <enum offset="13" extends="VkBlendOp"                       name="VK_BLEND_OP_SCREEN_EXT"/>
+                <enum offset="14" extends="VkBlendOp"                       name="VK_BLEND_OP_OVERLAY_EXT"/>
+                <enum offset="15" extends="VkBlendOp"                       name="VK_BLEND_OP_DARKEN_EXT"/>
+                <enum offset="16" extends="VkBlendOp"                       name="VK_BLEND_OP_LIGHTEN_EXT"/>
+                <enum offset="17" extends="VkBlendOp"                       name="VK_BLEND_OP_COLORDODGE_EXT"/>
+                <enum offset="18" extends="VkBlendOp"                       name="VK_BLEND_OP_COLORBURN_EXT"/>
+                <enum offset="19" extends="VkBlendOp"                       name="VK_BLEND_OP_HARDLIGHT_EXT"/>
+                <enum offset="20" extends="VkBlendOp"                       name="VK_BLEND_OP_SOFTLIGHT_EXT"/>
+                <enum offset="21" extends="VkBlendOp"                       name="VK_BLEND_OP_DIFFERENCE_EXT"/>
+                <enum offset="22" extends="VkBlendOp"                       name="VK_BLEND_OP_EXCLUSION_EXT"/>
+                <enum offset="23" extends="VkBlendOp"                       name="VK_BLEND_OP_INVERT_EXT"/>
+                <enum offset="24" extends="VkBlendOp"                       name="VK_BLEND_OP_INVERT_RGB_EXT"/>
+                <enum offset="25" extends="VkBlendOp"                       name="VK_BLEND_OP_LINEARDODGE_EXT"/>
+                <enum offset="26" extends="VkBlendOp"                       name="VK_BLEND_OP_LINEARBURN_EXT"/>
+                <enum offset="27" extends="VkBlendOp"                       name="VK_BLEND_OP_VIVIDLIGHT_EXT"/>
+                <enum offset="28" extends="VkBlendOp"                       name="VK_BLEND_OP_LINEARLIGHT_EXT"/>
+                <enum offset="29" extends="VkBlendOp"                       name="VK_BLEND_OP_PINLIGHT_EXT"/>
+                <enum offset="30" extends="VkBlendOp"                       name="VK_BLEND_OP_HARDMIX_EXT"/>
+                <enum offset="31" extends="VkBlendOp"                       name="VK_BLEND_OP_HSL_HUE_EXT"/>
+                <enum offset="32" extends="VkBlendOp"                       name="VK_BLEND_OP_HSL_SATURATION_EXT"/>
+                <enum offset="33" extends="VkBlendOp"                       name="VK_BLEND_OP_HSL_COLOR_EXT"/>
+                <enum offset="34" extends="VkBlendOp"                       name="VK_BLEND_OP_HSL_LUMINOSITY_EXT"/>
+                <enum offset="35" extends="VkBlendOp"                       name="VK_BLEND_OP_PLUS_EXT"/>
+                <enum offset="36" extends="VkBlendOp"                       name="VK_BLEND_OP_PLUS_CLAMPED_EXT"/>
+                <enum offset="37" extends="VkBlendOp"                       name="VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"/>
+                <enum offset="38" extends="VkBlendOp"                       name="VK_BLEND_OP_PLUS_DARKER_EXT"/>
+                <enum offset="39" extends="VkBlendOp"                       name="VK_BLEND_OP_MINUS_EXT"/>
+                <enum offset="40" extends="VkBlendOp"                       name="VK_BLEND_OP_MINUS_CLAMPED_EXT"/>
+                <enum offset="41" extends="VkBlendOp"                       name="VK_BLEND_OP_CONTRAST_EXT"/>
+                <enum offset="42" extends="VkBlendOp"                       name="VK_BLEND_OP_INVERT_OVG_EXT"/>
+                <enum offset="43" extends="VkBlendOp"                       name="VK_BLEND_OP_RED_EXT"/>
+                <enum offset="44" extends="VkBlendOp"                       name="VK_BLEND_OP_GREEN_EXT"/>
+                <enum offset="45" extends="VkBlendOp"                       name="VK_BLEND_OP_BLUE_EXT"/>
+                <enum bitpos="19" extends="VkAccessFlagBits"                name="VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_fragment_coverage_to_color" number="150" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_fragment_coverage_to_color&quot;"  name="VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"/>
+                <type name="VkPipelineCoverageToColorStateCreateFlagsNV"/>
+                <type name="VkPipelineCoverageToColorStateCreateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_acceleration_structure" number="151" type="device" depends="VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address+VK_KHR_deferred_host_operations" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1" ratified="vulkan">
+            <require>
+                <enum value="13"                                            name="VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_acceleration_structure&quot;"     name="VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME"/>
+                <enum offset="7"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"/>
+                <enum offset="2"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"/>
+                <enum offset="3"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"/>
+                <enum offset="4"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"/>
+                <enum offset="5"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"/>
+                <enum offset="6"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR"/>
+                <enum offset="9"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR"/>
+                <enum offset="10" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR"/>
+                <enum offset="11" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"/>
+                <enum offset="12" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"/>
+                <enum offset="13" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR"/>
+                <enum offset="14" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR"/>
+                <enum offset="17" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR"/>
+                <enum offset="20" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR"/>
+                <enum bitpos="25" extends="VkPipelineStageFlagBits"         name="VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum offset="0"  extends="VkDescriptorType"                name="VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR"/>
+                <enum bitpos="21" extends="VkAccessFlagBits"                name="VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum bitpos="22" extends="VkAccessFlagBits"                name="VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+                <enum offset="0"  extends="VkQueryType"                     name="VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR"/>
+                <enum offset="1"  extends="VkQueryType"                     name="VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR"/>
+                <enum offset="0"  extends="VkObjectType"                    name="VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR"/>
+                <enum offset="0"  extends="VkIndexType" extnumber="166"     name="VK_INDEX_TYPE_NONE_KHR"/>
+                <enum bitpos="29" extends="VkFormatFeatureFlagBits"         name="VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"/>
+                <enum bitpos="19" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR"/>
+                <enum bitpos="20" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR"/>
+                <type name="VkAccelerationStructureTypeKHR"/>
+                <type name="VkDeviceOrHostAddressKHR"/>
+                <type name="VkDeviceOrHostAddressConstKHR"/>
+                <type name="VkAccelerationStructureBuildRangeInfoKHR"/>
+                <type name="VkAabbPositionsKHR"/>
+                <type name="VkAccelerationStructureGeometryTrianglesDataKHR"/>
+                <type name="VkTransformMatrixKHR"/>
+                <type name="VkAccelerationStructureBuildGeometryInfoKHR"/>
+                <type name="VkAccelerationStructureBuildTypeKHR"/>
+                <type name="VkAccelerationStructureGeometryAabbsDataKHR"/>
+                <type name="VkAccelerationStructureInstanceKHR"/>
+                <type name="VkAccelerationStructureGeometryInstancesDataKHR"/>
+                <type name="VkAccelerationStructureGeometryDataKHR"/>
+                <type name="VkAccelerationStructureGeometryKHR"/>
+                <type name="VkGeometryFlagsKHR"/>
+                <type name="VkGeometryInstanceFlagsKHR"/>
+                <type name="VkGeometryFlagBitsKHR"/>
+                <type name="VkGeometryInstanceFlagBitsKHR"/>
+                <type name="VkAccelerationStructureCreateInfoKHR"/>
+                <type name="VkAccelerationStructureKHR"/>
+                <type name="VkBuildAccelerationStructureFlagBitsKHR"/>
+                <type name="VkBuildAccelerationStructureFlagsKHR"/>
+                <type name="VkCopyAccelerationStructureModeKHR"/>
+                <type name="VkGeometryTypeKHR"/>
+                <type name="VkWriteDescriptorSetAccelerationStructureKHR"/>
+                <type name="VkPhysicalDeviceAccelerationStructureFeaturesKHR"/>
+                <type name="VkPhysicalDeviceAccelerationStructurePropertiesKHR"/>
+                <type name="VkAccelerationStructureDeviceAddressInfoKHR"/>
+                <type name="VkAccelerationStructureVersionInfoKHR"/>
+                <type name="VkCopyAccelerationStructureToMemoryInfoKHR"/>
+                <type name="VkCopyMemoryToAccelerationStructureInfoKHR"/>
+                <type name="VkCopyAccelerationStructureInfoKHR"/>
+                <type name="VkAccelerationStructureCompatibilityKHR"/>
+                <type name="VkAccelerationStructureCreateFlagBitsKHR"/>
+                <type name="VkAccelerationStructureCreateFlagsKHR"/>
+                <type name="VkBuildAccelerationStructureModeKHR"/>
+                <type name="VkAccelerationStructureBuildSizesInfoKHR"/>
+                <command name="vkCreateAccelerationStructureKHR"/>
+                <command name="vkDestroyAccelerationStructureKHR"/>
+                <command name="vkCmdBuildAccelerationStructuresKHR"/>
+                <command name="vkCmdBuildAccelerationStructuresIndirectKHR"/>
+                <command name="vkBuildAccelerationStructuresKHR"/>
+                <command name="vkCopyAccelerationStructureKHR"/>
+                <command name="vkCopyAccelerationStructureToMemoryKHR"/>
+                <command name="vkCopyMemoryToAccelerationStructureKHR"/>
+                <command name="vkWriteAccelerationStructuresPropertiesKHR"/>
+                <command name="vkCmdCopyAccelerationStructureKHR"/>
+                <command name="vkCmdCopyAccelerationStructureToMemoryKHR"/>
+                <command name="vkCmdCopyMemoryToAccelerationStructureKHR"/>
+                <command name="vkGetAccelerationStructureDeviceAddressKHR"/>
+                <command name="vkCmdWriteAccelerationStructuresPropertiesKHR"/>
+                <command name="vkGetDeviceAccelerationStructureCompatibilityKHR"/>
+                <command name="vkGetAccelerationStructureBuildSizesKHR"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="29" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum offset="0"  extends="VkDebugReportObjectTypeEXT"      name="VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_ray_tracing_pipeline" number="348" type="device" depends="VK_KHR_spirv_1_4+VK_KHR_acceleration_structure" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_ray_tracing_pipeline&quot;"       name="VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME"/>
+                <enum                                                       name="VK_SHADER_UNUSED_KHR"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR"/>
+                <enum offset="15" extends="VkStructureType" extnumber="151" name="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR"/>
+                <enum offset="16" extends="VkStructureType" extnumber="151" name="VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"/>
+                <enum offset="18" extends="VkStructureType" extnumber="151" name="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"/>
+                <enum bitpos="8"  extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_RAYGEN_BIT_KHR"/>
+                <enum bitpos="9"  extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_ANY_HIT_BIT_KHR"/>
+                <enum bitpos="10" extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR"/>
+                <enum bitpos="11" extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_MISS_BIT_KHR"/>
+                <enum bitpos="12" extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_INTERSECTION_BIT_KHR"/>
+                <enum bitpos="13" extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_CALLABLE_BIT_KHR"/>
+                <enum bitpos="21" extends="VkPipelineStageFlagBits"         name="VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR"/>
+                <enum bitpos="10" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR"/>
+                <enum offset="0"  extends="VkPipelineBindPoint" extnumber="166" name="VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR"/>
+                <enum bitpos="14" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"/>
+                <enum bitpos="15" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"/>
+                <enum bitpos="16" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"/>
+                <enum bitpos="17" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"/>
+                <enum bitpos="12" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"/>
+                <enum bitpos="13" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR"/>
+                <enum bitpos="19" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR"/>
+                <enum offset="0"  extends="VkDynamicState"                  name="VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR"/>
+                <type name="VkRayTracingShaderGroupCreateInfoKHR"/>
+                <type name="VkRayTracingShaderGroupTypeKHR"/>
+                <type name="VkRayTracingPipelineCreateInfoKHR"/>
+                <type name="VkPhysicalDeviceRayTracingPipelineFeaturesKHR"/>
+                <type name="VkPhysicalDeviceRayTracingPipelinePropertiesKHR"/>
+                <type name="VkStridedDeviceAddressRegionKHR"/>
+                <type name="VkTraceRaysIndirectCommandKHR"/>
+                <type name="VkRayTracingPipelineInterfaceCreateInfoKHR"/>
+                <type name="VkShaderGroupShaderKHR"/>
+                <command name="vkCmdTraceRaysKHR"/>
+                <command name="vkCreateRayTracingPipelinesKHR"/>
+                <command name="vkGetRayTracingShaderGroupHandlesKHR"/>
+                <command name="vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"/>
+                <command name="vkCmdTraceRaysIndirectKHR"/>
+                <command name="vkGetRayTracingShaderGroupStackSizeKHR"/>
+                <command name="vkCmdSetRayTracingPipelineStackSizeKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_ray_query" number="349" type="device" depends="VK_KHR_spirv_1_4+VK_KHR_acceleration_structure" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_RAY_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_ray_query&quot;"                  name="VK_KHR_RAY_QUERY_EXTENSION_NAME"/>
+                <enum offset="13" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceRayQueryFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_152" number="152" author="NV" contact="Jeff Bolz @jeffbolznv" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_152_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_152&quot;"               name="VK_NV_EXTENSION_152_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_framebuffer_mixed_samples" number="153" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_framebuffer_mixed_samples&quot;"   name="VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"/>
+                <type name="VkPipelineCoverageModulationStateCreateInfoNV"/>
+                <type name="VkPipelineCoverageModulationStateCreateFlagsNV"/>
+                <type name="VkCoverageModulationModeNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_fill_rectangle" number="154" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_FILL_RECTANGLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_fill_rectangle&quot;"              name="VK_NV_FILL_RECTANGLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkPolygonMode"                    name="VK_POLYGON_MODE_FILL_RECTANGLE_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_shader_sm_builtins" number="155" type="device" depends="VK_VERSION_1_1" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_shader_sm_builtins&quot;"          name="VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"/>
+                <type name="VkPhysicalDeviceShaderSMBuiltinsPropertiesNV"/>
+                <type name="VkPhysicalDeviceShaderSMBuiltinsFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_post_depth_coverage" number="156" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_post_depth_coverage&quot;"        name="VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_sampler_ycbcr_conversion" number="157" type="device" depends="VK_KHR_maintenance1+VK_KHR_bind_memory2+VK_KHR_get_memory_requirements2+VK_KHR_get_physical_device_properties2" author="KHR" contact="Andrew Garrard @fluppeteer" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="14"                                            name="VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_sampler_ycbcr_conversion&quot;"   name="VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR" alias="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR" alias="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"/>
+                <enum extends="VkObjectType"                                name="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR" alias="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8B8G8R8_422_UNORM_KHR" alias="VK_FORMAT_G8B8G8R8_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_B8G8R8G8_422_UNORM_KHR" alias="VK_FORMAT_B8G8R8G8_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR" alias="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR" alias="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR" alias="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR" alias="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR" alias="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R10X6_UNORM_PACK16_KHR" alias="VK_FORMAT_R10X6_UNORM_PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR" alias="VK_FORMAT_R10X6G10X6_UNORM_2PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR" alias="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR" alias="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR" alias="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR" alias="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR" alias="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR" alias="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR" alias="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR" alias="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R12X4_UNORM_PACK16_KHR" alias="VK_FORMAT_R12X4_UNORM_PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR" alias="VK_FORMAT_R12X4G12X4_UNORM_2PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR" alias="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR" alias="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR" alias="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR" alias="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR" alias="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR" alias="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR" alias="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR" alias="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16B16G16R16_422_UNORM_KHR" alias="VK_FORMAT_G16B16G16R16_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_B16G16R16G16_422_UNORM_KHR" alias="VK_FORMAT_B16G16R16G16_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR" alias="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR" alias="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR" alias="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR" alias="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR" alias="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM"/>
+                <enum extends="VkImageAspectFlagBits"                       name="VK_IMAGE_ASPECT_PLANE_0_BIT_KHR" alias="VK_IMAGE_ASPECT_PLANE_0_BIT"/>
+                <enum extends="VkImageAspectFlagBits"                       name="VK_IMAGE_ASPECT_PLANE_1_BIT_KHR" alias="VK_IMAGE_ASPECT_PLANE_1_BIT"/>
+                <enum extends="VkImageAspectFlagBits"                       name="VK_IMAGE_ASPECT_PLANE_2_BIT_KHR" alias="VK_IMAGE_ASPECT_PLANE_2_BIT"/>
+                <enum extends="VkImageCreateFlagBits"                       name="VK_IMAGE_CREATE_DISJOINT_BIT_KHR" alias="VK_IMAGE_CREATE_DISJOINT_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR" alias="VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_DISJOINT_BIT_KHR" alias="VK_FORMAT_FEATURE_DISJOINT_BIT"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR" alias="VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"/>
+                <type name="VkSamplerYcbcrConversionCreateInfoKHR"/>
+                <type name="VkSamplerYcbcrConversionInfoKHR"/>
+                <type name="VkBindImagePlaneMemoryInfoKHR"/>
+                <type name="VkImagePlaneMemoryRequirementsInfoKHR"/>
+                <type name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"/>
+                <type name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"/>
+                <command name="vkCreateSamplerYcbcrConversionKHR"/>
+                <command name="vkDestroySamplerYcbcrConversionKHR"/>
+                <type name="VkSamplerYcbcrConversionKHR"/>
+                <type name="VkSamplerYcbcrModelConversionKHR"/>
+                <enum extends="VkSamplerYcbcrModelConversion"               name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR" alias="VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"/>
+                <enum extends="VkSamplerYcbcrModelConversion"               name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR" alias="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"/>
+                <enum extends="VkSamplerYcbcrModelConversion"               name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR" alias="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"/>
+                <enum extends="VkSamplerYcbcrModelConversion"               name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR" alias="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"/>
+                <enum extends="VkSamplerYcbcrModelConversion"               name="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR" alias="VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"/>
+                <type name="VkSamplerYcbcrRangeKHR"/>
+                <enum extends="VkSamplerYcbcrRange"                         name="VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR" alias="VK_SAMPLER_YCBCR_RANGE_ITU_FULL"/>
+                <enum extends="VkSamplerYcbcrRange"                         name="VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR" alias="VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"/>
+                <type name="VkChromaLocationKHR"/>
+                <enum extends="VkChromaLocation"                            name="VK_CHROMA_LOCATION_COSITED_EVEN_KHR" alias="VK_CHROMA_LOCATION_COSITED_EVEN"/>
+                <enum extends="VkChromaLocation"                            name="VK_CHROMA_LOCATION_MIDPOINT_KHR" alias="VK_CHROMA_LOCATION_MIDPOINT"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum extends="VkDebugReportObjectTypeEXT" offset="0"       name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"/>
+                <enum extends="VkDebugReportObjectTypeEXT"                  name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT" alias="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_bind_memory2" number="158" type="device" author="KHR" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_BIND_MEMORY_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_bind_memory2&quot;"               name="VK_KHR_BIND_MEMORY_2_EXTENSION_NAME"/>
+                <command name="vkBindBufferMemory2KHR"/>
+                <command name="vkBindImageMemory2KHR"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR" alias="VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR" alias="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"/>
+                <enum extends="VkImageCreateFlagBits"                       name="VK_IMAGE_CREATE_ALIAS_BIT_KHR" alias="VK_IMAGE_CREATE_ALIAS_BIT"/>
+                <type name="VkBindBufferMemoryInfoKHR"/>
+                <type name="VkBindImageMemoryInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_drm_format_modifier" number="159" type="device" depends="((VK_KHR_bind_memory2+VK_KHR_get_physical_device_properties2+VK_KHR_sampler_ycbcr_conversion),VK_VERSION_1_1)+(VK_KHR_image_format_list,VK_VERSION_1_2)" author="EXT" contact="Lina Versace @versalinyaa" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_drm_format_modifier&quot;"  name="VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME"/>
+                <enum offset="0" dir="-" extends="VkResult"                 name="VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"/>
+                <enum offset="0" extends="VkImageTiling"                    name="VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT"/>
+                <enum bitpos="7"  extends="VkImageAspectFlagBits"           name="VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"/>
+                <enum bitpos="8"  extends="VkImageAspectFlagBits"           name="VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"/>
+                <enum bitpos="9"  extends="VkImageAspectFlagBits"           name="VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"/>
+                <enum bitpos="10" extends="VkImageAspectFlagBits"           name="VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"/>
+                <type name="VkDrmFormatModifierPropertiesListEXT"/>
+                <type name="VkDrmFormatModifierPropertiesEXT"/>
+                <type name="VkPhysicalDeviceImageDrmFormatModifierInfoEXT"/>
+                <type name="VkImageDrmFormatModifierListCreateInfoEXT"/>
+                <type name="VkImageDrmFormatModifierExplicitCreateInfoEXT"/>
+                <type name="VkImageDrmFormatModifierPropertiesEXT"/>
+                <command name="vkGetImageDrmFormatModifierPropertiesEXT"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <type name="VkDrmFormatModifierPropertiesList2EXT"/>
+                <type name="VkDrmFormatModifierProperties2EXT"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_160" number="160" author="EXT" contact="Mark Young @marky-lunarg" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_160_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_160&quot;"              name="VK_EXT_EXTENSION_160_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_validation_cache" number="161" type="device" author="GOOGLE" contact="Cort Stratton @cdwfs" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_VALIDATION_CACHE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_validation_cache&quot;"           name="VK_EXT_VALIDATION_CACHE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"/>
+                <type name="VkValidationCacheEXT"/>
+                <type name="VkValidationCacheCreateInfoEXT"/>
+                <type name="VkShaderModuleValidationCacheCreateInfoEXT"/>
+                <type name="VkValidationCacheHeaderVersionEXT"/>
+                <type name="VkValidationCacheCreateFlagsEXT"/>
+                <command name="vkCreateValidationCacheEXT"/>
+                <command name="vkDestroyValidationCacheEXT"/>
+                <command name="vkMergeValidationCachesEXT"/>
+                <command name="vkGetValidationCacheDataEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_descriptor_indexing" number="162" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_maintenance3" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="2"                                             name="VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_descriptor_indexing&quot;"        name="VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"/>
+                <enum extends="VkDescriptorBindingFlagBits"                 name="VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT" alias="VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"/>
+                <enum extends="VkDescriptorBindingFlagBits"                 name="VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT" alias="VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"/>
+                <enum extends="VkDescriptorBindingFlagBits"                 name="VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT" alias="VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"/>
+                <enum extends="VkDescriptorBindingFlagBits"                 name="VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT" alias="VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"/>
+                <enum extends="VkDescriptorPoolCreateFlagBits"              name="VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT" alias="VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"/>
+                <enum extends="VkDescriptorSetLayoutCreateFlagBits"         name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT" alias="VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"/>
+                <enum extends="VkResult"                                    name="VK_ERROR_FRAGMENTATION_EXT" alias="VK_ERROR_FRAGMENTATION"/>
+                <type name="VkDescriptorSetLayoutBindingFlagsCreateInfoEXT"/>
+                <type name="VkPhysicalDeviceDescriptorIndexingFeaturesEXT"/>
+                <type name="VkPhysicalDeviceDescriptorIndexingPropertiesEXT"/>
+                <type name="VkDescriptorSetVariableDescriptorCountAllocateInfoEXT"/>
+                <type name="VkDescriptorSetVariableDescriptorCountLayoutSupportEXT"/>
+                <type name="VkDescriptorBindingFlagBitsEXT"/>
+                <type name="VkDescriptorBindingFlagsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_viewport_index_layer" number="163" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_viewport_index_layer&quot;" name="VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_portability_subset" number="164" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Bill Hollings @billhollings" platform="provisional" supported="vulkan" provisional="true" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_portability_subset&quot;"         name="VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <type name="VkPhysicalDevicePortabilitySubsetFeaturesKHR"/>
+                <type name="VkPhysicalDevicePortabilitySubsetPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_shading_rate_image" number="165" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="3"                                             name="VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_shading_rate_image&quot;"          name="VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"/>
+                <enum            extends="VkImageLayout"                    name="VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV" alias="VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR"/>
+                <enum offset="4" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV"/>
+                <enum            extends="VkAccessFlagBits"                 name="VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV" alias="VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+                <enum            extends="VkImageUsageFlagBits"             name="VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV" alias="VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum            extends="VkPipelineStageFlagBits"          name="VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV" alias="VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"/>
+                <enum offset="6" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV"/>
+                <type name="VkShadingRatePaletteEntryNV"/>
+                <type name="VkShadingRatePaletteNV"/>
+                <type name="VkPipelineViewportShadingRateImageStateCreateInfoNV"/>
+                <type name="VkPhysicalDeviceShadingRateImageFeaturesNV"/>
+                <type name="VkPhysicalDeviceShadingRateImagePropertiesNV"/>
+                <type name="VkCoarseSampleLocationNV"/>
+                <type name="VkCoarseSampleOrderCustomNV"/>
+                <type name="VkPipelineViewportCoarseSampleOrderStateCreateInfoNV"/>
+                <type name="VkCoarseSampleOrderTypeNV"/>
+                <command name="vkCmdBindShadingRateImageNV"/>
+                <command name="vkCmdSetViewportShadingRatePaletteNV"/>
+                <command name="vkCmdSetCoarseSampleOrderNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_ray_tracing" number="166" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_get_memory_requirements2" author="NV" contact="Eric Werness @ewerness-nv" supported="vulkan">
+            <require>
+                <enum value="3"                               name="VK_NV_RAY_TRACING_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_ray_tracing&quot;"   name="VK_NV_RAY_TRACING_EXTENSION_NAME"/>
+                <enum                                         name="VK_SHADER_UNUSED_NV"/>
+                <enum offset="0"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV"/>
+                <enum offset="1"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV"/>
+                <enum offset="3"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_GEOMETRY_NV"/>
+                <enum offset="4"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV"/>
+                <enum offset="5"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV"/>
+                <enum offset="6"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"/>
+                <enum offset="7"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"/>
+                <enum offset="8"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"/>
+                <enum offset="9"  extends="VkStructureType"   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"/>
+                <enum offset="11" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"/>
+                <enum offset="12" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_RAYGEN_BIT_NV" alias="VK_SHADER_STAGE_RAYGEN_BIT_KHR"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_ANY_HIT_BIT_NV" alias="VK_SHADER_STAGE_ANY_HIT_BIT_KHR"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV" alias="VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_MISS_BIT_NV" alias="VK_SHADER_STAGE_MISS_BIT_KHR"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_INTERSECTION_BIT_NV" alias="VK_SHADER_STAGE_INTERSECTION_BIT_KHR"/>
+                <enum extends="VkShaderStageFlagBits"         name="VK_SHADER_STAGE_CALLABLE_BIT_NV" alias="VK_SHADER_STAGE_CALLABLE_BIT_KHR"/>
+                <enum extends="VkPipelineStageFlagBits"       name="VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR"/>
+                <enum extends="VkPipelineStageFlagBits"       name="VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV" alias="VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum extends="VkBufferUsageFlagBits"         name="VK_BUFFER_USAGE_RAY_TRACING_BIT_NV" alias="VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR"/>
+                <enum extends="VkPipelineBindPoint"           name="VK_PIPELINE_BIND_POINT_RAY_TRACING_NV" alias="VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR"/>
+                <enum offset="0" extends="VkDescriptorType"   name="VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV"/>
+                <enum extends="VkAccessFlagBits"              name="VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV" alias="VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits"              name="VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV" alias="VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+                <enum offset="0" extends="VkQueryType"        name="VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"/>
+                <enum bitpos="5" extends="VkPipelineCreateFlagBits"      name="VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"/>
+                <enum offset="0" extends="VkObjectType"       name="VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV"/>
+                <enum extends="VkIndexType"                   name="VK_INDEX_TYPE_NONE_NV" alias="VK_INDEX_TYPE_NONE_KHR"/>
+                <type name="VkRayTracingShaderGroupCreateInfoNV"/>
+                <type name="VkRayTracingShaderGroupTypeNV"/>
+                <enum extends="VkRayTracingShaderGroupTypeKHR" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV" alias="VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR"/>
+                <enum extends="VkRayTracingShaderGroupTypeKHR" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV" alias="VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR"/>
+                <enum extends="VkRayTracingShaderGroupTypeKHR" name="VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV" alias="VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR"/>
+                <type name="VkRayTracingPipelineCreateInfoNV"/>
+                <type name="VkGeometryTypeNV"/>
+                <enum extends="VkGeometryTypeKHR" name="VK_GEOMETRY_TYPE_TRIANGLES_NV" alias="VK_GEOMETRY_TYPE_TRIANGLES_KHR"/>
+                <enum extends="VkGeometryTypeKHR" name="VK_GEOMETRY_TYPE_AABBS_NV" alias="VK_GEOMETRY_TYPE_AABBS_KHR"/>
+                <type name="VkAccelerationStructureTypeNV"/>
+                <enum extends="VkAccelerationStructureTypeKHR" name="VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV" alias="VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR"/>
+                <enum extends="VkAccelerationStructureTypeKHR" name="VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV" alias="VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR"/>
+                <type name="VkGeometryTrianglesNV"/>
+                <type name="VkGeometryAABBNV"/>
+                <type name="VkGeometryDataNV"/>
+                <type name="VkGeometryNV"/>
+                <type name="VkGeometryFlagsNV"/>
+                <type name="VkGeometryFlagBitsNV"/>
+                <enum extends="VkGeometryFlagBitsKHR" name="VK_GEOMETRY_OPAQUE_BIT_NV" alias="VK_GEOMETRY_OPAQUE_BIT_KHR"/>
+                <enum extends="VkGeometryFlagBitsKHR" name="VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV" alias="VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR"/>
+                <type name="VkGeometryInstanceFlagsNV"/>
+                <type name="VkGeometryInstanceFlagBitsNV"/>
+                <enum extends="VkGeometryInstanceFlagBitsKHR" name="VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV" alias="VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR"/>
+                <enum extends="VkGeometryInstanceFlagBitsKHR" name="VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV" alias="VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR"/>
+                <enum extends="VkGeometryInstanceFlagBitsKHR" name="VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV" alias="VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR"/>
+                <enum extends="VkGeometryInstanceFlagBitsKHR" name="VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV" alias="VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR"/>
+                <type name="VkAccelerationStructureInfoNV"/>
+                <type name="VkAccelerationStructureCreateInfoNV"/>
+                <type name="VkAccelerationStructureNV"/>
+                <type name="VkBuildAccelerationStructureFlagBitsNV"/>
+                <enum extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV" alias="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR"/>
+                <enum extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV" alias="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR"/>
+                <enum extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV" alias="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR"/>
+                <enum extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV" alias="VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR"/>
+                <enum extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV" alias="VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR"/>
+                <type name="VkBuildAccelerationStructureFlagsNV"/>
+                <type name="VkCopyAccelerationStructureModeNV"/>
+                <enum extends="VkCopyAccelerationStructureModeKHR" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV" alias="VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR"/>
+                <enum extends="VkCopyAccelerationStructureModeKHR" name="VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV" alias="VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR"/>
+                <type name="VkBindAccelerationStructureMemoryInfoNV"/>
+                <type name="VkWriteDescriptorSetAccelerationStructureNV"/>
+                <type name="VkAccelerationStructureMemoryRequirementsInfoNV"/>
+                <type name="VkPhysicalDeviceRayTracingPropertiesNV"/>
+                <type name="VkAccelerationStructureMemoryRequirementsTypeNV"/>
+                <type name="VkTransformMatrixNV"/>
+                <type name="VkAabbPositionsNV"/>
+                <type name="VkAccelerationStructureInstanceNV"/>
+                <command name="vkCreateAccelerationStructureNV"/>
+                <command name="vkDestroyAccelerationStructureNV"/>
+                <command name="vkGetAccelerationStructureMemoryRequirementsNV"/>
+                <command name="vkBindAccelerationStructureMemoryNV"/>
+                <command name="vkCmdBuildAccelerationStructureNV"/>
+                <command name="vkCmdCopyAccelerationStructureNV"/>
+                <command name="vkCmdTraceRaysNV"/>
+                <command name="vkCreateRayTracingPipelinesNV"/>
+                <command name="vkGetRayTracingShaderGroupHandlesNV"/>
+                <command name="vkGetAccelerationStructureHandleNV"/>
+                <command name="vkCmdWriteAccelerationStructuresPropertiesNV"/>
+                <command name="vkCompileDeferredNV"/>
+            </require>
+            <require depends="VK_KHR_get_memory_requirements2">
+                <type name="VkMemoryRequirements2KHR"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum offset="0" extends="VkDebugReportObjectTypeEXT" name="VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_representative_fragment_test" number="167" type="device" author="NV" contact="Kedarnath Thangudu @kthangudu" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_representative_fragment_test&quot;" name="VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"  name="VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"/>
+                <type name="VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV"/>
+                <type name="VkPipelineRepresentativeFragmentTestStateCreateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_168" number="168" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_168_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_168&quot;"               name="VK_NV_EXTENSION_168_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_maintenance3" number="169" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_MAINTENANCE_3_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance3&quot;"               name="VK_KHR_MAINTENANCE_3_EXTENSION_NAME"/>
+                <enum alias="VK_KHR_MAINTENANCE_3_SPEC_VERSION"             name="VK_KHR_MAINTENANCE3_SPEC_VERSION" deprecated="aliased"/>
+                <enum alias="VK_KHR_MAINTENANCE_3_EXTENSION_NAME"           name="VK_KHR_MAINTENANCE3_EXTENSION_NAME" deprecated="aliased"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR" alias="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"/>
+                <type name="VkPhysicalDeviceMaintenance3PropertiesKHR"/>
+                <type name="VkDescriptorSetLayoutSupportKHR"/>
+                <command name="vkGetDescriptorSetLayoutSupportKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_draw_indirect_count" number="170" type="device" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_draw_indirect_count&quot;"        name="VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME"/>
+                <command name="vkCmdDrawIndirectCountKHR"/>
+                <command name="vkCmdDrawIndexedIndirectCountKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_filter_cubic" number="171" type="device" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="vulkan,vulkansc">
+            <require>
+                <enum value="3"                                             name="VK_EXT_FILTER_CUBIC_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_filter_cubic&quot;"               name="VK_EXT_FILTER_CUBIC_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkFilter" extnumber="16"          name="VK_FILTER_CUBIC_EXT"/>
+                <enum bitpos="13" extends="VkFormatFeatureFlagBits"         name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceImageViewImageFormatInfoEXT"/>
+                <type name="VkFilterCubicImageViewImageFormatPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_render_pass_shader_resolve" number="172" type="device" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="vulkan">
+            <require>
+                <enum value="4"                                                 name="VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_render_pass_shader_resolve&quot;"    name="VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME"/>
+                <enum bitpos="2" extends="VkSubpassDescriptionFlagBits"         name="VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM"/>
+                <enum bitpos="3" extends="VkSubpassDescriptionFlagBits"         name="VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_173" number="173" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_173_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_173&quot;"             name="VK_QCOM_EXTENSION_173_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_174" number="174" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_174_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_174&quot;"             name="VK_QCOM_EXTENSION_174_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_global_priority" number="175" type="device" author="EXT" contact="Andres Rodriguez @lostgoat" supported="vulkan,vulkansc" promotedto="VK_KHR_global_priority">
+            <require>
+                <enum value="2"                                             name="VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_global_priority&quot;"            name="VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR"/>
+                <enum extends="VkResult" name="VK_ERROR_NOT_PERMITTED_EXT" alias="VK_ERROR_NOT_PERMITTED_KHR"/>
+                <type name="VkDeviceQueueGlobalPriorityCreateInfoEXT"/>
+                <type name="VkQueueGlobalPriorityEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_subgroup_extended_types" number="176" type="device" depends="VK_VERSION_1_1" author="KHR" contact="Neil Henning @sheredom" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_subgroup_extended_types&quot;" name="VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"/>
+                <type name="VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_177" number="177" author="EXT" contact="Neil Henning @sheredom" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_177_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_177&quot;"              name="VK_EXT_EXTENSION_177_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_8bit_storage" number="178" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_8BIT_STORAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_8bit_storage&quot;"               name="VK_KHR_8BIT_STORAGE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES"/>
+                <type name="VkPhysicalDevice8BitStorageFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_external_memory_host" number="179" type="device" author="EXT" depends="VK_KHR_external_memory,VK_VERSION_1_1" contact="Daniel Rakos @drakos-amd" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_external_memory_host&quot;"       name="VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"/>
+                <enum bitpos="7" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"/>
+                <enum bitpos="8" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"/>
+                <type name="VkImportMemoryHostPointerInfoEXT"/>
+                <type name="VkMemoryHostPointerPropertiesEXT"/>
+                <type name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT"/>
+                <command name="vkGetMemoryHostPointerPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_buffer_marker" number="180" type="device" author="AMD" contact="Daniel Rakos @drakos-amd" specialuse="devtools" supported="vulkan">
+            <require>
+                <enum value="1"                                          name="VK_AMD_BUFFER_MARKER_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_buffer_marker&quot;"           name="VK_AMD_BUFFER_MARKER_EXTENSION_NAME"/>
+                <command name="vkCmdWriteBufferMarkerAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_atomic_int64" number="181" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Aaron Hagan @ahagan" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_atomic_int64&quot;"        name="VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"/>
+                <type name="VkPhysicalDeviceShaderAtomicInt64FeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_clock" number="182" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Aaron Hagan @ahagan" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                          name="VK_KHR_SHADER_CLOCK_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_clock&quot;"            name="VK_KHR_SHADER_CLOCK_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"               name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceShaderClockFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_183" number="183" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_183_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_183&quot;"              name="VK_AMD_EXTENSION_183_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_pipeline_compiler_control" number="184" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_pipeline_compiler_control&quot;"  name="VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"/>
+                <type name="VkPipelineCompilerControlFlagBitsAMD"/>
+                <type name="VkPipelineCompilerControlFlagsAMD"/>
+                <type name="VkPipelineCompilerControlCreateInfoAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_calibrated_timestamps" number="185" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Daniel Rakos @drakos-amd" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_calibrated_timestamps&quot;"      name="VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT"/>
+                <type name="VkTimeDomainEXT"/>
+                <type name="VkCalibratedTimestampInfoEXT"/>
+                <command name="vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"/>
+                <command name="vkGetCalibratedTimestampsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_core_properties" number="186" type="device" author="AMD" depends="VK_KHR_get_physical_device_properties2" contact="Martin Dinkov @mdinkov" supported="vulkan">
+            <require>
+                <enum value="2"                                          name="VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_core_properties&quot;"  name="VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"               name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"/>
+                <type name="VkPhysicalDeviceShaderCorePropertiesAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_187" number="187" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_187_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_187&quot;"              name="VK_AMD_EXTENSION_187_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_decode_h265" number="188" type="device" depends="VK_KHR_video_decode_queue" author="KHR" contact="peter.fang@amd.com" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="7"                                             name="VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_video_decode_h265&quot;"          name="VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR"/>
+                <enum bitpos="1" extends="VkVideoCodecOperationFlagBitsKHR" name="VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR"/>
+
+                <type name="VkVideoDecodeH265ProfileInfoKHR"/>
+                <type name="VkVideoDecodeH265CapabilitiesKHR"/>
+
+                <type name="VkVideoDecodeH265SessionParametersCreateInfoKHR"/>
+                <type name="VkVideoDecodeH265SessionParametersAddInfoKHR"/>
+                <type name="VkVideoDecodeH265PictureInfoKHR"/>
+                <type name="VkVideoDecodeH265DpbSlotInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_global_priority" number="189" type="device" author="KHR" contact="Tobias Hector @tobski" depends="VK_KHR_get_physical_device_properties2" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_global_priority&quot;"            name="VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" extnumber="175"  name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR"/>
+                <enum offset="0" extends="VkStructureType" extnumber="389"  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType" extnumber="389"  name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR"/>
+                <enum extends="VkResult" extnumber="175" offset="1" dir="-" name="VK_ERROR_NOT_PERMITTED_KHR"/>
+                <enum                                                       name="VK_MAX_GLOBAL_PRIORITY_SIZE_KHR"/>
+                <type                                                       name="VkDeviceQueueGlobalPriorityCreateInfoKHR"/>
+                <type                                                       name="VkQueueGlobalPriorityKHR"/>
+                <type                                                       name="VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR"/>
+                <type                                                       name="VkQueueFamilyGlobalPriorityPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_memory_overallocation_behavior" number="190" type="device" author="AMD" contact="Martin Dinkov @mdinkov" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_memory_overallocation_behavior&quot;"    name="VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"/>
+                <type name="VkMemoryOverallocationBehaviorAMD"/>
+                <type name="VkDeviceMemoryOverallocationCreateInfoAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_vertex_attribute_divisor" number="191" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="NV" contact="Vikram Kushwaha @vkushwaha" supported="vulkan,vulkansc">
+            <require>
+                <enum value="3"                                         name="VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_vertex_attribute_divisor&quot;"   name="VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT"/>
+                <type name="VkVertexInputBindingDivisorDescriptionEXT"/>
+                <type name="VkPipelineVertexInputDivisorStateCreateInfoEXT"/>
+                <type name="VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_frame_token" number="192" type="device" depends="VK_KHR_swapchain+VK_GGP_stream_descriptor_surface" platform="ggp" author="GGP" contact="Jean-Francois Roy @jfroy" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_GGP_FRAME_TOKEN_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_frame_token&quot;"                    name="VK_GGP_FRAME_TOKEN_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP"/>
+                <type name="VkPresentFrameTokenGGP"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_creation_feedback" number="193" type="device" author="GOOGLE" contact="Jean-Francois Roy @jfroy" specialuse="devtools" supported="vulkan" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_creation_feedback&quot;" name="VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO"/>
+                <type name="VkPipelineCreationFeedbackFlagBitsEXT"/>
+                <type name="VkPipelineCreationFeedbackFlagsEXT"/>
+                <type name="VkPipelineCreationFeedbackCreateInfoEXT"/>
+                <type name="VkPipelineCreationFeedbackEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_194" number="194" author="GOOGLE" contact="Jean-Francois Roy @jfroy" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GOOGLE_EXTENSION_194_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_194&quot;"       name="VK_GOOGLE_EXTENSION_194_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_195" number="195" author="GOOGLE" contact="Jean-Francois Roy @jfroy" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GOOGLE_EXTENSION_195_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_195&quot;"       name="VK_GOOGLE_EXTENSION_195_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_196" number="196" author="GOOGLE" contact="Jean-Francois Roy @jfroy" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GOOGLE_EXTENSION_196_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_196&quot;"       name="VK_GOOGLE_EXTENSION_196_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_driver_properties" number="197" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Daniel Rakos @drakos-amd" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_driver_properties&quot;"          name="VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"/>
+                <enum name="VK_MAX_DRIVER_NAME_SIZE_KHR"/>
+                <enum name="VK_MAX_DRIVER_INFO_SIZE_KHR"/>
+                <type name="VkDriverIdKHR"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_AMD_PROPRIETARY_KHR" alias="VK_DRIVER_ID_AMD_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR" alias="VK_DRIVER_ID_AMD_OPEN_SOURCE"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_MESA_RADV_KHR" alias="VK_DRIVER_ID_MESA_RADV"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR" alias="VK_DRIVER_ID_NVIDIA_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR" alias="VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR" alias="VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR" alias="VK_DRIVER_ID_IMAGINATION_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR" alias="VK_DRIVER_ID_QUALCOMM_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_ARM_PROPRIETARY_KHR" alias="VK_DRIVER_ID_ARM_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR" alias="VK_DRIVER_ID_GOOGLE_SWIFTSHADER"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_GGP_PROPRIETARY_KHR" alias="VK_DRIVER_ID_GGP_PROPRIETARY"/>
+                <enum extends="VkDriverId"                                  name="VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR" alias="VK_DRIVER_ID_BROADCOM_PROPRIETARY"/>
+                <type name="VkConformanceVersionKHR"/>
+                <type name="VkPhysicalDeviceDriverPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_float_controls" number="198" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="4"                                             name="VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_float_controls&quot;"      name="VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"/>
+                <type name="VkPhysicalDeviceFloatControlsPropertiesKHR"/>
+                <type name="VkShaderFloatControlsIndependenceKHR"/>
+                <enum extends="VkShaderFloatControlsIndependence"           name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR" alias="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY"/>
+                <enum extends="VkShaderFloatControlsIndependence"           name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR"         alias="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL"/>
+                <enum extends="VkShaderFloatControlsIndependence"           name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR"        alias="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_shader_subgroup_partitioned" number="199" type="device" depends="VK_VERSION_1_1" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_shader_subgroup_partitioned&quot;" name="VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME"/>
+                <enum bitpos="8" extends="VkSubgroupFeatureFlagBits"        name="VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_depth_stencil_resolve" number="200" type="device" depends="VK_KHR_create_renderpass2" author="KHR" contact="Jan-Harald Fredriksen @janharald" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_depth_stencil_resolve&quot;"      name="VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR" alias="VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"/>
+                <type name="VkSubpassDescriptionDepthStencilResolveKHR"/>
+                <type name="VkPhysicalDeviceDepthStencilResolvePropertiesKHR"/>
+                <type name="VkResolveModeFlagBitsKHR"/>
+                <type name="VkResolveModeFlagsKHR"/>
+                <enum extends="VkResolveModeFlagBits"                       name="VK_RESOLVE_MODE_NONE_KHR" alias="VK_RESOLVE_MODE_NONE"/>
+                <enum extends="VkResolveModeFlagBits"                       name="VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR" alias="VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"/>
+                <enum extends="VkResolveModeFlagBits"                       name="VK_RESOLVE_MODE_AVERAGE_BIT_KHR" alias="VK_RESOLVE_MODE_AVERAGE_BIT"/>
+                <enum extends="VkResolveModeFlagBits"                       name="VK_RESOLVE_MODE_MIN_BIT_KHR" alias="VK_RESOLVE_MODE_MIN_BIT"/>
+                <enum extends="VkResolveModeFlagBits"                       name="VK_RESOLVE_MODE_MAX_BIT_KHR" alias="VK_RESOLVE_MODE_MAX_BIT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_swapchain_mutable_format" number="201" type="device" author="KHR" depends="VK_KHR_swapchain+(VK_KHR_maintenance2,VK_VERSION_1_1)+(VK_KHR_image_format_list,VK_VERSION_1_2)" contact="Daniel Rakos @drakos-amd" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                         name="VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_swapchain_mutable_format&quot;" name="VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME"/>
+                <enum bitpos="2" extends="VkSwapchainCreateFlagBitsKHR" name="VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_compute_shader_derivatives" number="202" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_compute_shader_derivatives&quot;" name="VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"/>
+                <type name="VkPhysicalDeviceComputeShaderDerivativesFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_mesh_shader" number="203" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Christoph Kubisch @pixeljetstream" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_NV_MESH_SHADER_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_mesh_shader&quot;"             name="VK_NV_MESH_SHADER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"/>
+                <enum extends="VkShaderStageFlagBits"                   name="VK_SHADER_STAGE_TASK_BIT_NV" alias="VK_SHADER_STAGE_TASK_BIT_EXT"/>
+                <enum extends="VkShaderStageFlagBits"                   name="VK_SHADER_STAGE_MESH_BIT_NV" alias="VK_SHADER_STAGE_MESH_BIT_EXT"/>
+                <enum extends="VkPipelineStageFlagBits"                 name="VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT"/>
+                <enum extends="VkPipelineStageFlagBits"                 name="VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT"/>
+                <command name="vkCmdDrawMeshTasksNV"/>
+                <command name="vkCmdDrawMeshTasksIndirectNV"/>
+                <command name="vkCmdDrawMeshTasksIndirectCountNV"/>
+                <type name="VkPhysicalDeviceMeshShaderFeaturesNV"/>
+                <type name="VkPhysicalDeviceMeshShaderPropertiesNV"/>
+                <type name="VkDrawMeshTasksIndirectCommandNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_fragment_shader_barycentric" number="204" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan" promotedto="VK_KHR_fragment_shader_barycentric">
+            <require>
+                <enum value="1"                                         name="VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_fragment_shader_barycentric&quot;" name="VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_shader_image_footprint" number="205" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_shader_image_footprint&quot;"  name="VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"/>
+                <type name="VkPhysicalDeviceShaderImageFootprintFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_scissor_exclusive" number="206" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_scissor_exclusive&quot;"       name="VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"/>
+                <enum offset="0" extends="VkDynamicState" name="VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV"/>
+                <enum offset="1" extends="VkDynamicState" name="VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV"/>
+                <type name="VkPipelineViewportExclusiveScissorStateCreateInfoNV"/>
+                <type name="VkPhysicalDeviceExclusiveScissorFeaturesNV"/>
+                <command name="vkCmdSetExclusiveScissorEnableNV"/>
+                <command name="vkCmdSetExclusiveScissorNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_diagnostic_checkpoints" type="device" number="207" depends="VK_KHR_get_physical_device_properties2" author="NVIDIA" contact="Nuno Subtil @nsubtil" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_device_diagnostic_checkpoints&quot;" name="VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV"/>
+                <type name="VkQueueFamilyCheckpointPropertiesNV"/>
+                <type name="VkCheckpointDataNV"/>
+                <command name="vkCmdSetCheckpointNV"/>
+                <command name="vkGetQueueCheckpointDataNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_timeline_semaphore" number="208" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Faith Ekstrand @gfxstrand" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_timeline_semaphore&quot;"     name="VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR" alias="VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR" alias="VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR" alias="VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO"/>
+                <enum extends="VkSemaphoreType"                             name="VK_SEMAPHORE_TYPE_BINARY_KHR" alias="VK_SEMAPHORE_TYPE_BINARY"/>
+                <enum extends="VkSemaphoreType"                             name="VK_SEMAPHORE_TYPE_TIMELINE_KHR" alias="VK_SEMAPHORE_TYPE_TIMELINE"/>
+                <enum extends="VkSemaphoreWaitFlagBits"                     name="VK_SEMAPHORE_WAIT_ANY_BIT_KHR" alias="VK_SEMAPHORE_WAIT_ANY_BIT"/>
+                <type name="VkSemaphoreTypeKHR"/>
+                <type name="VkPhysicalDeviceTimelineSemaphoreFeaturesKHR"/>
+                <type name="VkPhysicalDeviceTimelineSemaphorePropertiesKHR"/>
+                <type name="VkSemaphoreTypeCreateInfoKHR"/>
+                <type name="VkTimelineSemaphoreSubmitInfoKHR"/>
+                <type name="VkSemaphoreWaitFlagBitsKHR"/>
+                <type name="VkSemaphoreWaitFlagsKHR"/>
+                <type name="VkSemaphoreWaitInfoKHR"/>
+                <type name="VkSemaphoreSignalInfoKHR"/>
+                <command name="vkGetSemaphoreCounterValueKHR"/>
+                <command name="vkWaitSemaphoresKHR"/>
+                <command name="vkSignalSemaphoreKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_209" number="209" type="device" author="KHR" contact="Ian Elliott @ianelliott" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_209_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_209&quot;"          name="VK_KHR_EXTENSION_209_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_shader_integer_functions2" number="210" type="device" depends="VK_KHR_get_physical_device_properties2" author="INTEL" contact="Ian Romanick @ianromanick" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_shader_integer_functions2&quot;" name="VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"/>
+                <type name="VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_performance_query" number="211" type="device" author="INTEL" contact="Lionel Landwerlin @llandwerlin" specialuse="devtools" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_performance_query&quot;"    name="VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL" alias="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL" deprecated="aliased"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"/>
+                <enum offset="0" extends="VkQueryType"                  name="VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL"/>
+                <enum offset="0" extends="VkObjectType"                 name="VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL"/>
+                <type name="VkPerformanceConfigurationTypeINTEL"/>
+                <type name="VkQueryPoolSamplingModeINTEL"/>
+                <type name="VkPerformanceOverrideTypeINTEL"/>
+                <type name="VkPerformanceParameterTypeINTEL"/>
+                <type name="VkPerformanceValueTypeINTEL"/>
+                <type name="VkPerformanceValueDataINTEL"/>
+                <type name="VkPerformanceValueINTEL"/>
+                <type name="VkInitializePerformanceApiInfoINTEL"/>
+                <type name="VkQueryPoolCreateInfoINTEL"/>
+                <type name="VkQueryPoolPerformanceQueryCreateInfoINTEL"/>
+                <type name="VkPerformanceMarkerInfoINTEL"/>
+                <type name="VkPerformanceStreamMarkerInfoINTEL"/>
+                <type name="VkPerformanceOverrideInfoINTEL"/>
+                <type name="VkPerformanceConfigurationAcquireInfoINTEL"/>
+                <type name="VkPerformanceConfigurationINTEL"/>
+                <command name="vkInitializePerformanceApiINTEL"/>
+                <command name="vkUninitializePerformanceApiINTEL"/>
+                <command name="vkCmdSetPerformanceMarkerINTEL"/>
+                <command name="vkCmdSetPerformanceStreamMarkerINTEL"/>
+                <command name="vkCmdSetPerformanceOverrideINTEL"/>
+                <command name="vkAcquirePerformanceConfigurationINTEL"/>
+                <command name="vkReleasePerformanceConfigurationINTEL"/>
+                <command name="vkQueueSetPerformanceConfigurationINTEL"/>
+                <command name="vkGetPerformanceParameterINTEL"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_vulkan_memory_model" number="212" type="device" author="KHR" contact="Jeff Bolz @jeffbolznv" depends="VK_KHR_get_physical_device_properties2" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="3"                                         name="VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_vulkan_memory_model&quot;"    name="VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"/>
+                <type name="VkPhysicalDeviceVulkanMemoryModelFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pci_bus_info" number="213" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Matthaeus G. Chajdas @anteru" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                         name="VK_EXT_PCI_BUS_INFO_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pci_bus_info&quot;"           name="VK_EXT_PCI_BUS_INFO_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDevicePCIBusInfoPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_display_native_hdr" number="214" type="device" author="AMD" depends="VK_KHR_get_physical_device_properties2+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain" contact="Matthaeus G. Chajdas @anteru" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_display_native_hdr&quot;"     name="VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"/>
+                <enum offset="0" extends="VkColorSpaceKHR"              name="VK_COLOR_SPACE_DISPLAY_NATIVE_AMD"/>
+                <type name="VkDisplayNativeHdrSurfaceCapabilitiesAMD"/>
+                <type name="VkSwapchainDisplayNativeHdrCreateInfoAMD"/>
+                <command name="vkSetLocalDimmingAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_imagepipe_surface" number="215" type="instance" author="FUCHSIA" depends="VK_KHR_surface" platform="fuchsia" contact="Craig Stout @cdotstout" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_imagepipe_surface&quot;"  name="VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"/>
+                <type name="VkImagePipeSurfaceCreateFlagsFUCHSIA"/>
+                <type name="VkImagePipeSurfaceCreateInfoFUCHSIA"/>
+                <command name="vkCreateImagePipeSurfaceFUCHSIA"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_terminate_invocation" number="216" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Jesse Hall @critsec" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_terminate_invocation&quot;"    name="VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES"/>
+                <type name="VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_217" number="217" author="GOOGLE" contact="Jesse Hall @critsec" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_GOOGLE_EXTENSION_217_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_217&quot;"           name="VK_GOOGLE_EXTENSION_217_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_metal_surface" number="218" type="instance" depends="VK_KHR_surface" platform="metal" supported="vulkan" author="EXT" contact="Dzmitry Malyshau @kvark">
+            <require>
+                <enum value="1"                                             name="VK_EXT_METAL_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_metal_surface&quot;"              name="VK_EXT_METAL_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT"/>
+                <type name="VkMetalSurfaceCreateFlagsEXT"/>
+                <type name="VkMetalSurfaceCreateInfoEXT"/>
+                <command name="vkCreateMetalSurfaceEXT"/>
+                <type name="CAMetalLayer"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_fragment_density_map" number="219" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Matthew Netsch @mnetsch" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_fragment_density_map&quot;"       name="VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"/>
+                <enum offset="1"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"/>
+                <enum offset="2"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"/>
+                <enum bitpos="14" extends="VkImageCreateFlagBits"           name="VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT"/>
+                <enum offset="0"  extends="VkImageLayout"                   name="VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT"/>
+                <enum bitpos="24" extends="VkAccessFlagBits"                name="VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"/>
+                <enum bitpos="24" extends="VkFormatFeatureFlagBits"         name="VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"/>
+                <enum bitpos="9"  extends="VkImageUsageFlagBits"            name="VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"/>
+                <enum bitpos="0"  extends="VkImageViewCreateFlagBits"       name="VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT"/>
+                <enum bitpos="23" extends="VkPipelineStageFlagBits"         name="VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT"/>
+                <enum bitpos="0"  extends="VkSamplerCreateFlagBits"         name="VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT"/>
+                <enum bitpos="1"  extends="VkSamplerCreateFlagBits"         name="VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT"/>
+                <type name="VkPhysicalDeviceFragmentDensityMapFeaturesEXT"/>
+                <type name="VkPhysicalDeviceFragmentDensityMapPropertiesEXT"/>
+                <type name="VkRenderPassFragmentDensityMapCreateInfoEXT"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="24" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_220" number="220" author="EXT" contact="Dzmitry Malyshau @kvark" supported="disabled">
+            <require>
+                <enum value="0"                                              name="VK_EXT_EXTENSION_220_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_220&quot;"               name="VK_EXT_EXTENSION_220_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_221" number="221" author="KHR" contact="Tobias Hector @tobski" supported="disabled">
+            <require>
+                <enum value="0"                                              name="VK_KHR_EXTENSION_221_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_221&quot;"               name="VK_KHR_EXTENSION_221_EXTENSION_NAME"/>
+                <enum bitpos="0" extends="VkRenderPassCreateFlagBits"        name="VK_RENDER_PASS_CREATE_RESERVED_0_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_scalar_block_layout" number="222" depends="VK_KHR_get_physical_device_properties2" type="device" author="EXT" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_scalar_block_layout&quot;"        name="VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME"/>
+                <type name="VkPhysicalDeviceScalarBlockLayoutFeaturesEXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_223" number="223" author="EXT" contact="Tobias Hector @tobski" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_223_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_223&quot;"              name="VK_EXT_EXTENSION_223_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_hlsl_functionality1" number="224" type="device" author="GOOGLE" contact="Hai Nguyen @chaoticbob" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_hlsl_functionality1&quot;"     name="VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME"/>
+                <enum alias="VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION"   name="VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION" deprecated="aliased"/>
+                <enum alias="VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME" name="VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME" deprecated="aliased"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_decorate_string" number="225" type="device" author="GOOGLE" contact="Hai Nguyen @chaoticbob" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_GOOGLE_DECORATE_STRING_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_decorate_string&quot;"         name="VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_subgroup_size_control" number="226" type="device" depends="VK_VERSION_1_1" author="EXT" contact="Neil Henning @sheredom" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="2"                                             name="VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_subgroup_size_control&quot;"      name="VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME"/>
+                <type                                                       name="VkPhysicalDeviceSubgroupSizeControlFeaturesEXT"/>
+                <type                                                       name="VkPhysicalDeviceSubgroupSizeControlPropertiesEXT"/>
+                <type                                                       name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES"/>
+                <enum extends="VkPipelineShaderStageCreateFlagBits"         name="VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT" alias="VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT"/>
+                <enum extends="VkPipelineShaderStageCreateFlagBits"         name="VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT" alias="VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_fragment_shading_rate" number="227" type="device" depends="(VK_KHR_create_renderpass2,VK_VERSION_1_2)+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)" author="KHR" contact="Tobias Hector @tobski" supported="vulkan,vulkansc" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                                 name="VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_fragment_shading_rate&quot;" name="VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME"/>
+                <type name="VkFragmentShadingRateCombinerOpKHR"/>
+                <type name="VkFragmentShadingRateAttachmentInfoKHR"/>
+                <type name="VkPipelineFragmentShadingRateStateCreateInfoKHR"/>
+                <type name="VkPhysicalDeviceFragmentShadingRateFeaturesKHR"/>
+                <type name="VkPhysicalDeviceFragmentShadingRatePropertiesKHR"/>
+                <type name="VkPhysicalDeviceFragmentShadingRateKHR"/>
+                <command name="vkGetPhysicalDeviceFragmentShadingRatesKHR"/>
+                <command name="vkCmdSetFragmentShadingRateKHR"/>
+                <enum offset="3" extends="VkImageLayout" extnumber="165"        name="VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR"/>
+                <enum offset="0" extends="VkDynamicState"                       name="VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR"/>
+                <enum offset="3" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR"/>
+                <enum offset="4" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR"/>
+                <enum bitpos="23" extends="VkAccessFlagBits"                    name="VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+                <enum bitpos="8" extends="VkImageUsageFlagBits"                 name="VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum bitpos="22" extends="VkPipelineStageFlagBits"             name="VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum bitpos="30" extends="VkFormatFeatureFlagBits"             name="VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="30" extends="VkFormatFeatureFlagBits2"            name="VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_core_properties2" number="228" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan" depends="VK_AMD_shader_core_properties">
+            <require>
+                <enum value="1"                                             name="VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_core_properties2&quot;"    name="VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"/>
+                <type                                                       name="VkPhysicalDeviceShaderCoreProperties2AMD"/>
+                <type                                                       name="VkShaderCorePropertiesFlagBitsAMD"/>
+                <type                                                       name="VkShaderCorePropertiesFlagsAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_229" number="229" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_229_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_229&quot;"              name="VK_AMD_EXTENSION_229_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_device_coherent_memory" number="230" type="device" author="AMD" contact="Tobias Hector @tobski" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_device_coherent_memory&quot;"     name="VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME"/>
+                <enum bitpos="6" extends="VkMemoryPropertyFlagBits"         name="VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD"/>
+                <enum bitpos="7" extends="VkMemoryPropertyFlagBits"         name="VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"/>
+                <type                                                       name="VkPhysicalDeviceCoherentMemoryFeaturesAMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_231" number="231" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_231_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_231&quot;"              name="VK_AMD_EXTENSION_231_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_232" number="232" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_232_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_232&quot;"              name="VK_AMD_EXTENSION_232_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_233" number="233" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_233_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_233&quot;"              name="VK_AMD_EXTENSION_233_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_234" number="234" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_234_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_234&quot;"              name="VK_AMD_EXTENSION_234_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_image_atomic_int64" number="235" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Tobias Hector @tobski" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_image_atomic_int64&quot;"  name="VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_236" number="236" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_236_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_236&quot;"              name="VK_AMD_EXTENSION_236_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_spirv_1_4" number="237" type="device" depends="VK_VERSION_1_1+VK_KHR_shader_float_controls" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SPIRV_1_4_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_spirv_1_4&quot;"                  name="VK_KHR_SPIRV_1_4_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_memory_budget" number="238" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_MEMORY_BUDGET_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_memory_budget&quot;"              name="VK_EXT_MEMORY_BUDGET_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceMemoryBudgetPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_memory_priority" number="239" type="device" depends="VK_KHR_get_physical_device_properties2"  author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_MEMORY_PRIORITY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_memory_priority&quot;"            name="VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceMemoryPriorityFeaturesEXT"/>
+                <type name="VkMemoryPriorityAllocateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_surface_protected_capabilities" number="240" type="instance" depends="VK_VERSION_1_1+VK_KHR_get_surface_capabilities2" author="KHR" contact="Sandeep Shinde @sashinde" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_surface_protected_capabilities&quot;"   name="VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR"/>
+                <type name="VkSurfaceProtectedCapabilitiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_dedicated_allocation_image_aliasing" number="241" type="device" depends="VK_KHR_dedicated_allocation+VK_KHR_get_physical_device_properties2" author="NVIDIA" contact="Nuno Subtil @nsubtil" supported="vulkan">
+            <require>
+                <enum value="1"                                                         name="VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_dedicated_allocation_image_aliasing&quot;"     name="VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"/>
+                <type name="VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_separate_depth_stencil_layouts" number="242" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_create_renderpass2" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                                   name="VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_separate_depth_stencil_layouts&quot;"   name="VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR" alias="VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR" alias="VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL"/>
+                <type name="VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR"/>
+                <type name="VkAttachmentReferenceStencilLayoutKHR"/>
+                <type name="VkAttachmentDescriptionStencilLayoutKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_extension_243" number="243" author="INTEL" contact="Slawek Grajewski @sgrajewski" supported="disabled">
+            <require>
+                <enum value="0"                                              name="VK_INTEL_EXTENSION_243_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_extension_243&quot;"             name="VK_INTEL_EXTENSION_243_EXTENSION_NAME"/>
+                <enum bitpos="46" extends="VkAccessFlagBits2"                name="VK_ACCESS_2_RESERVED_46_BIT_INTEL"/>
+            </require>
+        </extension>
+        <extension name="VK_MESA_extension_244" number="244" author="MESA" contact="Andres Rodriguez @lostgoat" supported="disabled">
+            <require>
+                <enum value="0"                                              name="VK_MESA_EXTENSION_244_SPEC_VERSION"/>
+                <enum value="&quot;VK_MESA_extension_244&quot;"              name="VK_MESA_EXTENSION_244_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_buffer_device_address" number="245" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Jeff Bolz @jeffbolznv"  deprecatedby="VK_KHR_buffer_device_address" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_buffer_device_address&quot;"      name="VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT" alias="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT"/>
+                <enum extends="VkBufferUsageFlagBits"                       name="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT" alias="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"/>
+                <enum extends="VkBufferCreateFlagBits"                      name="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT" alias="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"/>
+                <enum extends="VkResult"                                    name="VK_ERROR_INVALID_DEVICE_ADDRESS_EXT" alias="VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"/>
+                <type name="VkPhysicalDeviceBufferAddressFeaturesEXT"/>
+                <type name="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT"/>
+                <type name="VkBufferDeviceAddressInfoEXT"/>
+                <type name="VkBufferDeviceAddressCreateInfoEXT"/>
+                <command name="vkGetBufferDeviceAddressEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_tooling_info" number="246" type="device" author="EXT" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_TOOLING_INFO_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_tooling_info&quot;"               name="VK_EXT_TOOLING_INFO_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"/>
+                <type                                                       name="VkToolPurposeFlagBitsEXT"/>
+                <type                                                       name="VkToolPurposeFlagsEXT"/>
+                <type                                                       name="VkPhysicalDeviceToolPropertiesEXT"/>
+                <command                                                    name="vkGetPhysicalDeviceToolPropertiesEXT"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum bitpos="5" extends="VkToolPurposeFlagBits"            name="VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_debug_marker">
+                <enum bitpos="6" extends="VkToolPurposeFlagBits"            name="VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_debug_utils">
+                <enum bitpos="5" extends="VkToolPurposeFlagBits"            name="VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"/>
+                <enum bitpos="6" extends="VkToolPurposeFlagBits"            name="VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_separate_stencil_usage" number="247" type="device" author="EXT" contact="Daniel Rakos @drakos-amd" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_separate_stencil_usage&quot;"     name="VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO"/>
+                <type name="VkImageStencilUsageCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_validation_features" number="248" type="instance" author="LUNARG" contact="Karl Schultz @karl-lunarg" specialuse="debugging" supported="vulkan,vulkansc">
+            <require>
+                <enum value="5"                                             name="VK_EXT_VALIDATION_FEATURES_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_validation_features&quot;"        name="VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT"/>
+                <type name="VkValidationFeaturesEXT"/>
+                <type name="VkValidationFeatureEnableEXT"/>
+                <type name="VkValidationFeatureDisableEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_present_wait" number="249" type="device" depends="VK_KHR_swapchain+VK_KHR_present_id" author="KHR" contact="Keith Packard @keithp" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_KHR_PRESENT_WAIT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_present_wait&quot;"           name="VK_KHR_PRESENT_WAIT_EXTENSION_NAME"/>
+                <command name="vkWaitForPresentKHR"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR"/>
+                <type name="VkPhysicalDevicePresentWaitFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_cooperative_matrix" number="250" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <require>
+                <enum value="1"                                              name="VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_cooperative_matrix&quot;"           name="VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"/>
+                <type name="VkCooperativeMatrixPropertiesNV"/>
+                <type name="VkScopeNV"/>
+                <enum extends="VkScopeKHR" name="VK_SCOPE_DEVICE_NV"         alias="VK_SCOPE_DEVICE_KHR"/>
+                <enum extends="VkScopeKHR" name="VK_SCOPE_WORKGROUP_NV"      alias="VK_SCOPE_WORKGROUP_KHR"/>
+                <enum extends="VkScopeKHR" name="VK_SCOPE_SUBGROUP_NV"       alias="VK_SCOPE_SUBGROUP_KHR"/>
+                <enum extends="VkScopeKHR" name="VK_SCOPE_QUEUE_FAMILY_NV"   alias="VK_SCOPE_QUEUE_FAMILY_KHR"/>
+                <type name="VkComponentTypeNV"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_FLOAT16_NV"  alias="VK_COMPONENT_TYPE_FLOAT16_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_FLOAT32_NV"  alias="VK_COMPONENT_TYPE_FLOAT32_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_FLOAT64_NV"  alias="VK_COMPONENT_TYPE_FLOAT64_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_SINT8_NV"    alias="VK_COMPONENT_TYPE_SINT8_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_SINT16_NV"   alias="VK_COMPONENT_TYPE_SINT16_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_SINT32_NV"   alias="VK_COMPONENT_TYPE_SINT32_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_SINT64_NV"   alias="VK_COMPONENT_TYPE_SINT64_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_UINT8_NV"    alias="VK_COMPONENT_TYPE_UINT8_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_UINT16_NV"   alias="VK_COMPONENT_TYPE_UINT16_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_UINT32_NV"   alias="VK_COMPONENT_TYPE_UINT32_KHR"/>
+                <enum extends="VkComponentTypeKHR" name="VK_COMPONENT_TYPE_UINT64_NV"   alias="VK_COMPONENT_TYPE_UINT64_KHR"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixFeaturesNV"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixPropertiesNV"/>
+                <command name="vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_coverage_reduction_mode" number="251" depends="VK_NV_framebuffer_mixed_samples+VK_KHR_get_physical_device_properties2" type="device" author="NV" contact="Kedarnath Thangudu @kthangudu" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_coverage_reduction_mode&quot;"     name="VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"/>
+                <type name="VkPhysicalDeviceCoverageReductionModeFeaturesNV"/>
+                <type name="VkPipelineCoverageReductionStateCreateInfoNV"/>
+                <type name="VkPipelineCoverageReductionStateCreateFlagsNV"/>
+                <type name="VkCoverageReductionModeNV"/>
+                <type name="VkFramebufferMixedSamplesCombinationNV"/>
+                <command name="vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_fragment_shader_interlock" number="252" author="EXT" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_fragment_shader_interlock&quot;"      name="VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_ycbcr_image_arrays" number="253" type="device" depends="VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_ycbcr_image_arrays&quot;"         name="VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceYcbcrImageArraysFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_uniform_buffer_standard_layout" number="254" depends="VK_KHR_get_physical_device_properties2" type="device" author="KHR" contact="Graeme Leese @gnl21" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_uniform_buffer_standard_layout&quot;" name="VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME"/>
+                <type                                                           name="VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_provoking_vertex" number="255" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @jessehall" specialuse="glemulation" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PROVOKING_VERTEX_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_provoking_vertex&quot;"           name="VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceProvokingVertexFeaturesEXT"/>
+                <type name="VkPhysicalDeviceProvokingVertexPropertiesEXT"/>
+                <type name="VkPipelineRasterizationProvokingVertexStateCreateInfoEXT"/>
+                <type name="VkProvokingVertexModeEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_full_screen_exclusive" number="256" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2+VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain" platform="win32" contact="James Jones @cubanismo" supported="vulkan">
+            <require>
+                <enum value="4"                                             name="VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_full_screen_exclusive&quot;"      name="VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"/>
+                <enum offset="0" extends="VkResult" dir="-"                 name="VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"/>
+                <type name="VkFullScreenExclusiveEXT"/>
+                <type name="VkSurfaceFullScreenExclusiveInfoEXT"/>
+                <type name="VkSurfaceCapabilitiesFullScreenExclusiveEXT"/>
+                <command name="vkGetPhysicalDeviceSurfacePresentModes2EXT"/>
+                <command name="vkAcquireFullScreenExclusiveModeEXT"/>
+                <command name="vkReleaseFullScreenExclusiveModeEXT"/>
+            </require>
+            <require depends="VK_KHR_win32_surface">
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"/>
+                <type name="VkSurfaceFullScreenExclusiveWin32InfoEXT"/>
+            </require>
+            <require depends="VK_KHR_device_group">
+                <command name="vkGetDeviceGroupSurfacePresentModes2EXT"/>
+            </require>
+            <require depends="VK_VERSION_1_1">
+                <command name="vkGetDeviceGroupSurfacePresentModes2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_headless_surface" number="257" type="instance" depends="VK_KHR_surface" author="EXT" contact="Lisa Wu @chengtianww" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_HEADLESS_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_headless_surface&quot;"               name="VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"/>
+                <type name="VkHeadlessSurfaceCreateFlagsEXT"/>
+                <type name="VkHeadlessSurfaceCreateInfoEXT"/>
+                <command name="vkCreateHeadlessSurfaceEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_buffer_device_address" number="258" type="device" depends="(VK_KHR_get_physical_device_properties2+VK_KHR_device_group),VK_VERSION_1_1" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_2" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_buffer_device_address&quot;"      name="VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"/>
+                <enum extends="VkBufferUsageFlagBits"                       name="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR" alias="VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"/>
+                <enum extends="VkBufferCreateFlagBits"                      name="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR" alias="VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"/>
+                <enum extends="VkMemoryAllocateFlagBits"                    name="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR" alias="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"/>
+                <enum extends="VkMemoryAllocateFlagBits"                    name="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR" alias="VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"/>
+                <enum extends="VkResult"                                    name="VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR" alias="VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"/>
+                <type name="VkPhysicalDeviceBufferDeviceAddressFeaturesKHR"/>
+                <type name="VkBufferDeviceAddressInfoKHR"/>
+                <type name="VkBufferOpaqueCaptureAddressCreateInfoKHR"/>
+                <type name="VkMemoryOpaqueCaptureAddressAllocateInfoKHR"/>
+                <type name="VkDeviceMemoryOpaqueCaptureAddressInfoKHR"/>
+                <command name="vkGetBufferDeviceAddressKHR"/>
+                <command name="vkGetBufferOpaqueCaptureAddressKHR"/>
+                <command name="vkGetDeviceMemoryOpaqueCaptureAddressKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_259" number="259" author="EXT" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_259_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_259&quot;"              name="VK_EXT_EXTENSION_259_EXTENSION_NAME"/>
+                <enum bitpos="9"  extends="VkQueueFlagBits"                 name="VK_QUEUE_RESERVED_9_BIT_EXT"/>
+                <enum bitpos="44" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_RESERVED_44_BIT_EXT"/>
+                <enum bitpos="45" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_RESERVED_45_BIT_EXT"/>
+                <enum bitpos="19" extends="VkImageCreateFlagBits"           name="VK_IMAGE_CREATE_RESERVED_19_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_line_rasterization" number="260" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" specialuse="cadsupport" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_LINE_RASTERIZATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_line_rasterization&quot;"         name="VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_LINE_STIPPLE_EXT"/>
+                <type name="VkPhysicalDeviceLineRasterizationFeaturesEXT"/>
+                <type name="VkPhysicalDeviceLineRasterizationPropertiesEXT"/>
+                <type name="VkPipelineRasterizationLineStateCreateInfoEXT"/>
+                <type name="VkLineRasterizationModeEXT"/>
+                <command name="vkCmdSetLineStippleEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_atomic_float" number="261" type="device" author="NV" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_atomic_float&quot;"        name="VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_host_query_reset" number="262" author="EXT" contact="Bas Nieuwenhuizen @BNieuwenhuizen" supported="vulkan" type="device" depends="VK_KHR_get_physical_device_properties2" promotedto="VK_VERSION_1_2">
+            <require>
+                <enum value="1"                                             name="VK_EXT_HOST_QUERY_RESET_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_host_query_reset&quot;"           name="VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"/>
+                <type name="VkPhysicalDeviceHostQueryResetFeaturesEXT"/>
+                <command name="vkResetQueryPoolEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_263" number="263" author="GGP" contact="Jean-Francois Roy @jfroy" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_GGP_EXTENSION_263_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_263&quot;"              name="VK_GGP_EXTENSION_263_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_BRCM_extension_264" number="264" author="BRCM" contact="Graeme Leese @gnl21" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_BRCM_EXTENSION_264_SPEC_VERSION"/>
+                <enum value="&quot;VK_BRCM_extension_264&quot;"             name="VK_BRCM_EXTENSION_264_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_BRCM_extension_265" number="265" author="BRCM" contact="Graeme Leese @gnl21" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_BRCM_EXTENSION_265_SPEC_VERSION"/>
+                <enum value="&quot;VK_BRCM_extension_265&quot;"             name="VK_BRCM_EXTENSION_265_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_index_type_uint8" number="266" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_index_type_uint8&quot;"           name="VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"/>
+                <enum offset="0" extends="VkIndexType"                      name="VK_INDEX_TYPE_UINT8_EXT"/>
+                <type name="VkPhysicalDeviceIndexTypeUint8FeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_267" number="267" type="device" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_267_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_267&quot;"              name="VK_EXT_EXTENSION_267_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extended_dynamic_state" number="268" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extended_dynamic_state&quot;"     name="VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT" comment="Not promoted to 1.3"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_CULL_MODE_EXT" alias="VK_DYNAMIC_STATE_CULL_MODE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_FRONT_FACE_EXT" alias="VK_DYNAMIC_STATE_FRONT_FACE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT" alias="VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT" alias="VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT" alias="VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT" alias="VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT" alias="VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT" alias="VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT" alias="VK_DYNAMIC_STATE_DEPTH_COMPARE_OP"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT" alias="VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT" alias="VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_STENCIL_OP_EXT" alias="VK_DYNAMIC_STATE_STENCIL_OP"/>
+                <type name="VkPhysicalDeviceExtendedDynamicStateFeaturesEXT" comment="Not promoted to 1.3"/>
+                <command name="vkCmdSetCullModeEXT"/>
+                <command name="vkCmdSetFrontFaceEXT"/>
+                <command name="vkCmdSetPrimitiveTopologyEXT"/>
+                <command name="vkCmdSetViewportWithCountEXT"/>
+                <command name="vkCmdSetScissorWithCountEXT"/>
+                <command name="vkCmdBindVertexBuffers2EXT"/>
+                <command name="vkCmdSetDepthTestEnableEXT"/>
+                <command name="vkCmdSetDepthWriteEnableEXT"/>
+                <command name="vkCmdSetDepthCompareOpEXT"/>
+                <command name="vkCmdSetDepthBoundsTestEnableEXT"/>
+                <command name="vkCmdSetStencilTestEnableEXT"/>
+                <command name="vkCmdSetStencilOpEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_deferred_host_operations" number="269" type="device" author="KHR" contact="Josh Barczak @jbarczak" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="4"                                             name="VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_deferred_host_operations&quot;"   name="VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR"/>
+                <type name="VkDeferredOperationKHR"/>
+                <command name="vkCreateDeferredOperationKHR"/>
+                <command name="vkDestroyDeferredOperationKHR"/>
+                <command name="vkGetDeferredOperationMaxConcurrencyKHR"/>
+                <command name="vkGetDeferredOperationResultKHR"/>
+                <command name="vkDeferredOperationJoinKHR" />
+                <enum extends="VkResult"       offset="0"       name="VK_THREAD_IDLE_KHR" />
+                <enum extends="VkResult"       offset="1"       name="VK_THREAD_DONE_KHR" />
+                <enum extends="VkResult"       offset="2"       name="VK_OPERATION_DEFERRED_KHR" />
+                <enum extends="VkResult"       offset="3"       name="VK_OPERATION_NOT_DEFERRED_KHR" />
+            </require>
+        </extension>
+        <extension name="VK_KHR_pipeline_executable_properties" number="270" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Faith Ekstrand @gfxstrand" specialuse="devtools" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_pipeline_executable_properties&quot;"   name="VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"/>
+                <enum bitpos="6" extends="VkPipelineCreateFlagBits"     name="VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"/>
+                <enum bitpos="7" extends="VkPipelineCreateFlagBits"     name="VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"/>
+                <type name="VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR"/>
+                <type name="VkPipelineInfoKHR"/>
+                <type name="VkPipelineExecutablePropertiesKHR"/>
+                <type name="VkPipelineExecutableInfoKHR"/>
+                <type name="VkPipelineExecutableStatisticFormatKHR"/>
+                <type name="VkPipelineExecutableStatisticValueKHR"/>
+                <type name="VkPipelineExecutableStatisticKHR"/>
+                <type name="VkPipelineExecutableInternalRepresentationKHR"/>
+                <command name="vkGetPipelineExecutablePropertiesKHR"/>
+                <command name="vkGetPipelineExecutableStatisticsKHR"/>
+                <command name="vkGetPipelineExecutableInternalRepresentationsKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_host_image_copy" number="271" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_copy_commands2+VK_KHR_format_feature_flags2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_host_image_copy&quot;"        name="VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT"/>
+                <enum offset="1"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT"/>
+                <enum offset="2"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT"/>
+                <enum offset="3"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT"/>
+                <enum offset="4"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT"/>
+                <enum offset="5"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT"/>
+                <enum offset="6"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT"/>
+                <enum offset="7"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT"/>
+                <enum offset="8"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT"/>
+                <enum offset="9"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT"/>
+                <enum bitpos="22" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT"               comment="Can be used with host image copies"/>
+                <enum bitpos="46" extends="VkFormatFeatureFlagBits2"    name="VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT"    comment="Host image copies are supported"/>
+                <type name="VkPhysicalDeviceHostImageCopyFeaturesEXT"/>
+                <type name="VkPhysicalDeviceHostImageCopyPropertiesEXT"/>
+                <type name="VkHostImageCopyFlagBitsEXT"/>
+                <type name="VkHostImageCopyFlagsEXT"/>
+                <type name="VkMemoryToImageCopyEXT"/>
+                <type name="VkImageToMemoryCopyEXT"/>
+                <type name="VkCopyMemoryToImageInfoEXT"/>
+                <type name="VkCopyImageToMemoryInfoEXT"/>
+                <type name="VkCopyImageToImageInfoEXT"/>
+                <type name="VkHostImageLayoutTransitionInfoEXT"/>
+                <type name="VkSubresourceHostMemcpySizeEXT"/>
+                <type name="VkHostImageCopyDevicePerformanceQueryEXT"/>
+                <command name="vkCopyMemoryToImageEXT"/>
+                <command name="vkCopyImageToMemoryEXT"/>
+                <command name="vkCopyImageToImageEXT"/>
+                <command name="vkTransitionImageLayoutEXT"/>
+
+                <type name="VkSubresourceLayout2EXT"/>
+                <type name="VkImageSubresource2EXT"/>
+                <command name="vkGetImageSubresourceLayout2EXT" comment="Taken from VK_EXT_image_compression_control. VkStructureType enums defined in that extension"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_map_memory2" number="272" type="device" author="KHR" contact="Faith Ekstrand @gfxstrand" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                               name="VK_KHR_MAP_MEMORY_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_map_memory2&quot;"  name="VK_KHR_MAP_MEMORY_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"    name="VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType"    name="VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR"/>
+                <type name="VkMemoryMapInfoKHR"/>
+                <type name="VkMemoryUnmapInfoKHR"/>
+                <type name="VkMemoryUnmapFlagsKHR"/>
+                <command name="vkMapMemory2KHR"/>
+                <command name="vkUnmapMemory2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_extension_273" number="273" type="device" author="INTEL" contact="Faith Ekstrand @gfxstrand" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_INTEL_EXTENSION_273_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_extension_273&quot;"            name="VK_INTEL_EXTENSION_273_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_atomic_float2" number="274" type="device" depends="VK_EXT_shader_atomic_float" author="EXT" contact="Faith Ekstrand @gfxstrand" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_atomic_float2&quot;"       name="VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_surface_maintenance1" number="275" type="instance" depends="VK_KHR_surface+VK_KHR_get_surface_capabilities2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_surface_maintenance1&quot;"       name="VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT"/>
+                <type name="VkSurfacePresentModeEXT"/>
+                <type name="VkPresentScalingFlagBitsEXT"/>
+                <type name="VkPresentScalingFlagsEXT"/>
+                <type name="VkPresentGravityFlagBitsEXT"/>
+                <type name="VkPresentGravityFlagsEXT"/>
+                <type name="VkSurfacePresentScalingCapabilitiesEXT"/>
+                <type name="VkSurfacePresentModeCompatibilityEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_swapchain_maintenance1" number="276" type="device" depends="VK_KHR_swapchain+VK_EXT_surface_maintenance1+VK_KHR_get_physical_device_properties2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_swapchain_maintenance1&quot;"     name="VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT"/>
+                <enum bitpos="3" extends="VkSwapchainCreateFlagBitsKHR"     name="VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT"/>
+                <type name="VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT"/>
+                <type name="VkSwapchainPresentFenceInfoEXT"/>
+                <type name="VkSwapchainPresentModesCreateInfoEXT"/>
+                <type name="VkSwapchainPresentModeInfoEXT"/>
+                <type name="VkSwapchainPresentScalingCreateInfoEXT"/>
+                <type name="VkReleaseSwapchainImagesInfoEXT"/>
+                <command name="vkReleaseSwapchainImagesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_demote_to_helper_invocation" number="277" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_demote_to_helper_invocation&quot;" name="VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES"/>
+                <type name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_generated_commands" number="278" type="device" depends="VK_VERSION_1_1+VK_KHR_buffer_device_address" author="NV" contact="Christoph Kubisch @pixeljetstream" supported="vulkan">
+            <require>
+                <comment>
+                    This extension requires buffer_device_address functionality.
+                    VK_EXT_buffer_device_address is also acceptable, but since it is deprecated the KHR version is preferred.
+                </comment>
+                <enum value="3"                                             name="VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_device_generated_commands&quot;"   name="VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"/>
+                <enum offset="7" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"/>
+                <enum bitpos="18" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV"/>
+                <enum bitpos="17" extends="VkPipelineStageFlagBits"         name="VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV"/>
+                <enum bitpos="17" extends="VkAccessFlagBits"                name="VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV"/>
+                <enum bitpos="18" extends="VkAccessFlagBits"                name="VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV"/>
+                <type name="VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV"/>
+                <type name="VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV"/>
+                <type name="VkGraphicsShaderGroupCreateInfoNV"/>
+                <type name="VkGraphicsPipelineShaderGroupsCreateInfoNV"/>
+                <type name="VkBindShaderGroupIndirectCommandNV"/>
+                <type name="VkBindIndexBufferIndirectCommandNV"/>
+                <type name="VkBindVertexBufferIndirectCommandNV"/>
+                <type name="VkSetStateFlagsIndirectCommandNV"/>
+                <type name="VkIndirectStateFlagBitsNV"/>
+                <type name="VkIndirectStateFlagsNV"/>
+                <type name="VkIndirectCommandsLayoutNV"/>
+                <type name="VkIndirectCommandsTokenTypeNV"/>
+                <type name="VkIndirectCommandsLayoutUsageFlagBitsNV"/>
+                <type name="VkIndirectCommandsLayoutUsageFlagsNV"/>
+                <type name="VkIndirectCommandsStreamNV"/>
+                <type name="VkIndirectCommandsLayoutTokenNV"/>
+                <type name="VkIndirectCommandsLayoutCreateInfoNV"/>
+                <type name="VkGeneratedCommandsInfoNV"/>
+                <type name="VkGeneratedCommandsMemoryRequirementsInfoNV"/>
+                <command name="vkGetGeneratedCommandsMemoryRequirementsNV"/>
+                <command name="vkCmdPreprocessGeneratedCommandsNV"/>
+                <command name="vkCmdExecuteGeneratedCommandsNV"/>
+                <command name="vkCmdBindPipelineShaderGroupNV"/>
+                <command name="vkCreateIndirectCommandsLayoutNV"/>
+                <command name="vkDestroyIndirectCommandsLayoutNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_inherited_viewport_scissor" number="279" type="device" author="NV" contact="David Zhao Akeley @akeley98" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_inherited_viewport_scissor&quot;"  name="VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV"/>
+                <type name="VkPhysicalDeviceInheritedViewportScissorFeaturesNV"/>
+                <type name="VkCommandBufferInheritanceViewportScissorInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_280" number="280" type="device" author="KHR" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_280_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_280&quot;"              name="VK_KHR_EXTENSION_280_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_integer_dot_product" number="281" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2" contact="Kevin Petit @kpet" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_integer_dot_product&quot;" name="VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES"/>
+                <type name="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR"/>
+                <type name="VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_texel_buffer_alignment" number="282" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_texel_buffer_alignment&quot;"     name="VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT" comment="Not promoted to 1.3"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES"/>
+                <type name="VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT" comment="Not promoted to 1.3"/>
+                <type name="VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_render_pass_transform" number="283" type="device" depends="VK_KHR_swapchain+VK_KHR_surface" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="3"                                             name="VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_render_pass_transform&quot;"     name="VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM"/>
+                <enum bitpos="1" extends="VkRenderPassCreateFlagBits"       name="VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM"/>
+                <type name="VkRenderPassTransformBeginInfoQCOM"/>
+                <type name="VkCommandBufferInheritanceRenderPassTransformInfoQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_depth_bias_control" number="284" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Joshua Ashton @Joshua-Ashton" specialuse="d3demulation" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_depth_bias_control&quot;"         name="VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT"/>
+                <type name="VkPhysicalDeviceDepthBiasControlFeaturesEXT"/>
+                <type name="VkDepthBiasInfoEXT"/>
+                <type name="VkDepthBiasRepresentationEXT"/>
+                <type name="VkDepthBiasRepresentationInfoEXT"/>
+                <command name="vkCmdSetDepthBias2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_device_memory_report" number="285" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Yiwei Zhang @zhangyiwei" specialuse="devtools" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_device_memory_report&quot;"       name="VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"/>
+                <type name="VkPhysicalDeviceDeviceMemoryReportFeaturesEXT"/>
+                <type name="VkDeviceDeviceMemoryReportCreateInfoEXT"/>
+                <type name="VkDeviceMemoryReportCallbackDataEXT"/>
+                <type name="VkDeviceMemoryReportFlagsEXT"/>
+                <type name="VkDeviceMemoryReportEventTypeEXT"/>
+                <type name="PFN_vkDeviceMemoryReportCallbackEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_acquire_drm_display" number="286" type="instance" depends="VK_EXT_direct_mode_display" author="EXT" contact="Drew DeVault sir@cmpwn.com" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_acquire_drm_display&quot;"        name="VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME"/>
+                <command name="vkAcquireDrmDisplayEXT"/>
+                <command name="vkGetDrmDisplayEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_robustness2" number="287"  type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Liam Middlebrook @liam-middlebrook" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_ROBUSTNESS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_robustness2&quot;"                    name="VK_EXT_ROBUSTNESS_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceRobustness2FeaturesEXT"/>
+                <type name="VkPhysicalDeviceRobustness2PropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_custom_border_color" number="288" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Liam Middlebrook @liam-middlebrook" specialuse="glemulation,d3demulation" supported="vulkan,vulkansc">
+            <require>
+                <enum value="12"                                            name="VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_custom_border_color&quot;"        name="VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"/>
+                <enum offset="3" extends="VkBorderColor"                    name="VK_BORDER_COLOR_FLOAT_CUSTOM_EXT"/>
+                <enum offset="4" extends="VkBorderColor"                    name="VK_BORDER_COLOR_INT_CUSTOM_EXT"/>
+                <type name="VkSamplerCustomBorderColorCreateInfoEXT"/>
+                <type name="VkPhysicalDeviceCustomBorderColorPropertiesEXT"/>
+                <type name="VkPhysicalDeviceCustomBorderColorFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_289" number="289" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <comment>
+                    These enums are present only to inform downstream
+                    consumers like KTX2. There is no actual Vulkan extension
+                    corresponding to the enums.
+                </comment>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_289_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_289&quot;"              name="VK_EXT_EXTENSION_289_EXTENSION_NAME"/>
+                <enum extends="VkFormat" extnumber="289" offset="0" name="VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="1" name="VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="2" name="VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="3" name="VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="4" name="VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="5" name="VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="6" name="VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="7" name="VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="8" name="VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="9" name="VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="10" name="VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="11" name="VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="12" name="VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="13" name="VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="14" name="VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="15" name="VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="16" name="VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="17" name="VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="18" name="VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="19" name="VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="20" name="VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="21" name="VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="22" name="VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="23" name="VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="24" name="VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="25" name="VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="26" name="VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="27" name="VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="28" name="VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="289" offset="29" name="VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_user_type" number="290" type="device" author="GOOGLE" contact="Kaye Mason @chaleur" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_GOOGLE_USER_TYPE_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_user_type&quot;"               name="VK_GOOGLE_USER_TYPE_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_pipeline_library" number="291" type="device" author="KHR" contact="Christoph Kubisch @pixeljetstream" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_pipeline_library&quot;"           name="VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME"/>
+                <enum bitpos="11" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_LIBRARY_BIT_KHR"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR"/>
+                <type name="VkPipelineLibraryCreateInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_292" number="292" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_292_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_292&quot;"               name="VK_NV_EXTENSION_292_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_present_barrier" number="293" type="device" author="NV" depends="VK_KHR_get_physical_device_properties2+VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain" contact="Liya Li @liyli" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_PRESENT_BARRIER_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_present_barrier&quot;"             name="VK_NV_PRESENT_BARRIER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV"/>
+                <type name="VkPhysicalDevicePresentBarrierFeaturesNV"/>
+                <type name="VkSurfaceCapabilitiesPresentBarrierNV"/>
+                <type name="VkSwapchainPresentBarrierCreateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_non_semantic_info" number="294" type="device" author="KHR" contact="Baldur Karlsson @baldurk" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_non_semantic_info&quot;"   name="VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_present_id" number="295" type="device" depends="VK_KHR_swapchain+VK_KHR_get_physical_device_properties2" author="KHR" contact="Keith Packard @keithp" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_KHR_PRESENT_ID_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_present_id&quot;"             name="VK_KHR_PRESENT_ID_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PRESENT_ID_KHR"/>
+                <type name="VkPresentIdKHR"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR"/>
+                <type name="VkPhysicalDevicePresentIdFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_private_data" number="296" type="device" author="NV" contact="Matthew Rusch @mattruschnv" supported="vulkan" depends="VK_KHR_get_physical_device_properties2" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PRIVATE_DATA_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_private_data&quot;"               name="VK_EXT_PRIVATE_DATA_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO"/>
+                <enum extends="VkObjectType"                                name="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT" alias="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT"/>
+                <type name="VkPhysicalDevicePrivateDataFeaturesEXT"/>
+                <type name="VkDevicePrivateDataCreateInfoEXT"/>
+                <type name="VkPrivateDataSlotCreateInfoEXT"/>
+                <type name="VkPrivateDataSlotEXT"/>
+                <type name="VkPrivateDataSlotCreateFlagsEXT" comment="Will add VkPrivateDataSlotCreateFlagBits when bits are defined in the future"/>
+                <command name="vkCreatePrivateDataSlotEXT"/>
+                <command name="vkDestroyPrivateDataSlotEXT"/>
+                <command name="vkSetPrivateDataEXT"/>
+                <command name="vkGetPrivateDataEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_297" number="297" author="KHR" contact="Corentin Wallez @Kangz" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_297_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_297&quot;"              name="VK_KHR_EXTENSION_297_EXTENSION_NAME"/>
+                <enum bitpos="3" extends="VkPipelineShaderStageCreateFlagBits"  name="VK_PIPELINE_SHADER_STAGE_CREATE_RESERVED_3_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_creation_cache_control" number="298" type="device" author="AMD" contact="Gregory Grebe @grgrebe_amd" depends="VK_KHR_get_physical_device_properties2" supported="vulkan" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="3"                                             name="VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_creation_cache_control&quot;"    name="VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES"/>
+                <type name="VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT"/>
+                <enum extends="VkPipelineCreateFlagBits"                    name="VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT" alias="VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT"/>
+                <enum extends="VkPipelineCreateFlagBits"                    name="VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT" alias="VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT"/>
+                <enum extends="VkResult"                                    name="VK_PIPELINE_COMPILE_REQUIRED_EXT" alias="VK_PIPELINE_COMPILE_REQUIRED"/>
+                <enum extends="VkResult"                                    name="VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT" alias="VK_PIPELINE_COMPILE_REQUIRED"/>
+                <enum extends="VkPipelineCacheCreateFlagBits"               name="VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT" alias="VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT"/>
+                <type name="VkPipelineCacheCreateFlagBits" comment="This is a temporary workaround for processors not recognizing that VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT above also requires this type"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_299" number="299" type="device" author="KHR" contact="Mark Bellamy @mark.bellamy_arm" supported="disabled">
+            <require comment="used for Vulkan SC 1.0 namespace">
+                <enum value="0"                                         name="VK_KHR_EXTENSION_299_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_299&quot;"          name="VK_KHR_EXTENSION_299_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_encode_queue" number="300"  type="device" depends="VK_KHR_video_queue+VK_KHR_synchronization2" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" provisional="true" platform="provisional" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="10"                                        name="VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_video_encode_queue&quot;"     name="VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME"/>
+                <!-- VkPipelineStageFlagBits bitpos="27" is reserved by this extension, but not used -->
+                <enum bitpos="27" extends="VkPipelineStageFlagBits2"    name="VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS" />
+                <enum bitpos="37" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS" />
+                <enum bitpos="38" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="8" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="9" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="10" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="6" extends="VkQueueFlagBits"              name="VK_QUEUE_VIDEO_ENCODE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="1" extends="VkVideoCodingControlFlagBitsKHR" name="VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="2" extends="VkVideoCodingControlFlagBitsKHR" name="VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="15" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="16" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="13" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="14" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="15" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="27" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="28" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="1" extends="VkVideoSessionCreateFlagBitsKHR" name="VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkQueryType"                  name="VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkQueryResultStatusKHR" dir="-" name="VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR"/>
+
+                <enum offset="0" extends="VkResult" dir="-"             name="VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoEncodeFlagsKHR"/>
+                <type name="VkVideoEncodeInfoKHR"/>
+
+                <type name="VkVideoEncodeCapabilityFlagBitsKHR"/>
+                <type name="VkVideoEncodeCapabilityFlagsKHR"/>
+                <type name="VkVideoEncodeCapabilitiesKHR"/>
+
+                <type name="VkQueryPoolVideoEncodeFeedbackCreateInfoKHR"/>
+                <type name="VkVideoEncodeFeedbackFlagBitsKHR"/>
+                <type name="VkVideoEncodeFeedbackFlagsKHR"/>
+
+                <type name="VkVideoEncodeUsageFlagBitsKHR"/>
+                <type name="VkVideoEncodeUsageFlagsKHR"/>
+                <type name="VkVideoEncodeContentFlagBitsKHR"/>
+                <type name="VkVideoEncodeContentFlagsKHR"/>
+                <type name="VkVideoEncodeTuningModeKHR"/>
+                <type name="VkVideoEncodeUsageInfoKHR"/>
+
+                <type name="VkVideoEncodeRateControlFlagsKHR"/>
+                <type name="VkVideoEncodeRateControlModeFlagBitsKHR"/>
+                <type name="VkVideoEncodeRateControlModeFlagsKHR"/>
+                <type name="VkVideoEncodeRateControlInfoKHR"/>
+                <type name="VkVideoEncodeRateControlLayerInfoKHR"/>
+
+                <type name="VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR"/>
+                <type name="VkVideoEncodeQualityLevelPropertiesKHR"/>
+                <type name="VkVideoEncodeQualityLevelInfoKHR"/>
+
+                <type name="VkVideoEncodeSessionParametersGetInfoKHR"/>
+                <type name="VkVideoEncodeSessionParametersFeedbackInfoKHR"/>
+
+                <command name="vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR"/>
+                <command name="vkGetEncodedVideoSessionParametersKHR"/>
+                <command name="vkCmdEncodeVideoKHR"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="27" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="28" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_diagnostics_config" number="301" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Kedarnath Thangudu @kthangudu" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_device_diagnostics_config&quot;"   name="VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"/>
+                <type name="VkPhysicalDeviceDiagnosticsConfigFeaturesNV"/>
+                <type name="VkDeviceDiagnosticsConfigCreateInfoNV"/>
+                <type name="VkDeviceDiagnosticsConfigFlagsNV"/>
+                <type name="VkDeviceDiagnosticsConfigFlagBitsNV"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_render_pass_store_ops" number="302" type="device" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_render_pass_store_ops&quot;"     name="VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME"/>
+                <enum extends="VkAttachmentStoreOp"                         name="VK_ATTACHMENT_STORE_OP_NONE_QCOM" alias="VK_ATTACHMENT_STORE_OP_NONE"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_303" number="303" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_303_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_303&quot;"             name="VK_QCOM_EXTENSION_303_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_304" number="304" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_304_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_304&quot;"             name="VK_QCOM_EXTENSION_304_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_305" number="305" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_305_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_305&quot;"             name="VK_QCOM_EXTENSION_305_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_306" number="306" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_306_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_306&quot;"             name="VK_QCOM_EXTENSION_306_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_307" number="307" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_307_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_307&quot;"             name="VK_QCOM_EXTENSION_307_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_cuda_kernel_launch" number="308" type="device" author="NV" contact="Tristan Lorach @tlorach" supported="vulkan" provisional="true">
+            <require>
+                <enum value="2"                                             name="VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_cuda_kernel_launch&quot;"          name="VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_CUDA_MODULE_NV"/>
+                <enum offset="1" extends="VkObjectType"                     name="VK_OBJECT_TYPE_CUDA_FUNCTION_NV"/>
+                <enum offset="0" extends="VkDebugReportObjectTypeEXT"       name="VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV"/>
+                <enum offset="1" extends="VkDebugReportObjectTypeEXT"       name="VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV"/>
+                <type name="VkCudaModuleNV"/>
+                <type name="VkCudaFunctionNV"/>
+                <type name="VkCudaModuleCreateInfoNV"/>
+                <type name="VkCudaFunctionCreateInfoNV"/>
+                <type name="VkCudaLaunchInfoNV"/>
+                <type name="VkPhysicalDeviceCudaKernelLaunchFeaturesNV"/>
+                <type name="VkPhysicalDeviceCudaKernelLaunchPropertiesNV"/>
+                <command name="vkCreateCudaModuleNV"/>
+                <command name="vkGetCudaModuleCacheNV"/>
+                <command name="vkCreateCudaFunctionNV"/>
+                <command name="vkDestroyCudaModuleNV"/>
+                <command name="vkDestroyCudaFunctionNV"/>
+                <command name="vkCmdCudaLaunchKernelNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_object_refresh" number="309" type="device" author="KHR" contact="Aidan Fabius @afabius" supported="vulkansc" ratified="vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_OBJECT_REFRESH_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_object_refresh&quot;"             name="VK_KHR_OBJECT_REFRESH_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR"/>
+                <type name="VkRefreshObjectListKHR"/>
+                <type name="VkRefreshObjectKHR"/>
+                <type name="VkRefreshObjectFlagBitsKHR"/>
+                <type name="VkRefreshObjectFlagsKHR"/>
+                <command name="vkCmdRefreshObjectsKHR"/>
+                <command name="vkGetPhysicalDeviceRefreshableObjectTypesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_310" number="310" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_QCOM_EXTENSION_310_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_310&quot;"             name="VK_QCOM_EXTENSION_310_EXTENSION_NAME"/>
+                <enum bitpos="27" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_RESERVED_27_BIT_QCOM"/>
+                <enum bitpos="27" extends="VkBufferUsageFlagBits2KHR"       name="VK_BUFFER_USAGE_2_RESERVED_27_BIT_QCOM"/>
+                <enum bitpos="51" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_51_BIT_QCOM"/>
+                <enum bitpos="52" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_52_BIT_QCOM"/>
+                <enum bitpos="53" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_53_BIT_QCOM"/>
+                <enum bitpos="54" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_54_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_low_latency" number="311" author="NV" type="device" supported="vulkan" contact="Charles Hansen @cshansen" >
+            <require>
+                <enum value="1"                                             name="VK_NV_LOW_LATENCY_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_low_latency&quot;"                 name="VK_NV_LOW_LATENCY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV"/>
+                <type name="VkQueryLowLatencySupportNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_metal_objects" number="312" type="device" platform="metal" supported="vulkan" author="EXT" contact="Bill Hollings @billhollings">
+            <require>
+                <enum value="1"                                             name="VK_EXT_METAL_OBJECTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_metal_objects&quot;"              name="VK_EXT_METAL_OBJECTS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT"/>
+                <enum offset="7" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT"/>
+                <enum offset="8" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT"/>
+                <enum offset="9" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT"/>
+                <enum offset="10" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT"/>
+                <enum offset="11" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT"/>
+                <type name="VkExportMetalObjectTypeFlagBitsEXT"/>
+                <type name="VkExportMetalObjectTypeFlagsEXT"/>
+                <type name="VkExportMetalObjectCreateInfoEXT"/>
+                <type name="VkExportMetalObjectsInfoEXT"/>
+                <type name="VkExportMetalDeviceInfoEXT"/>
+                <type name="VkExportMetalCommandQueueInfoEXT"/>
+                <type name="VkExportMetalBufferInfoEXT"/>
+                <type name="VkImportMetalBufferInfoEXT"/>
+                <type name="VkExportMetalTextureInfoEXT"/>
+                <type name="VkImportMetalTextureInfoEXT"/>
+                <type name="VkExportMetalIOSurfaceInfoEXT"/>
+                <type name="VkImportMetalIOSurfaceInfoEXT"/>
+                <type name="VkExportMetalSharedEventInfoEXT"/>
+                <type name="VkImportMetalSharedEventInfoEXT"/>
+                <type name="MTLDevice_id"/>
+                <type name="MTLCommandQueue_id"/>
+                <type name="MTLBuffer_id"/>
+                <type name="MTLTexture_id"/>
+                <type name="MTLSharedEvent_id"/>
+                <type name="IOSurfaceRef"/>
+                <command name="vkExportMetalObjectsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_313" number="313" author="MVK" contact="Bill Hollings @billhollings" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_313_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_313&quot;"              name="VK_EXT_EXTENSION_313_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_314" number="314" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_314_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_314&quot;"              name="VK_AMD_EXTENSION_314_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_synchronization2" number="315" type="device" author="KHR" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Tobias Hector @tobski" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_synchronization2&quot;"           name="VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR" alias="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR" alias="VK_STRUCTURE_TYPE_DEPENDENCY_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_SUBMIT_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR" alias="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR" alias="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES"/>
+                <enum extends="VkEventCreateFlagBits"                       name="VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR" alias="VK_EVENT_CREATE_DEVICE_ONLY_BIT"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL"/>
+                <enum extends="VkImageLayout"                               name="VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR" alias="VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL"/>
+                <enum extends="VkPipelineStageFlagBits"                     name="VK_PIPELINE_STAGE_NONE_KHR" alias="VK_PIPELINE_STAGE_NONE"/>
+                <enum extends="VkAccessFlagBits"                            name="VK_ACCESS_NONE_KHR" alias="VK_ACCESS_NONE"/>
+                <type name="VkFlags64"/>
+                <type name="VkPipelineStageFlags2KHR"/>
+                <type name="VkPipelineStageFlagBits2KHR"/>
+                <type name="VkAccessFlags2KHR"/>
+                <type name="VkAccessFlagBits2KHR"/>
+                <type name="VkMemoryBarrier2KHR"/>
+                <type name="VkBufferMemoryBarrier2KHR"/>
+                <type name="VkImageMemoryBarrier2KHR"/>
+                <type name="VkDependencyInfoKHR"/>
+                <type name="VkSubmitInfo2KHR"/>
+                <type name="VkSemaphoreSubmitInfoKHR"/>
+                <type name="VkCommandBufferSubmitInfoKHR"/>
+                <type name="VkSubmitFlagBitsKHR"/>
+                <type name="VkSubmitFlagsKHR"/>
+                <type name="VkPhysicalDeviceSynchronization2FeaturesKHR"/>
+                <command name="vkCmdSetEvent2KHR"/>
+                <command name="vkCmdResetEvent2KHR"/>
+                <command name="vkCmdWaitEvents2KHR"/>
+                <command name="vkCmdPipelineBarrier2KHR"/>
+                <command name="vkCmdWriteTimestamp2KHR"/>
+                <command name="vkQueueSubmit2KHR"/>
+            </require>
+            <require depends="VK_EXT_transform_feedback">
+                <enum bitpos="24" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"/>
+                <enum bitpos="25" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"/>
+                <enum bitpos="26" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"/>
+                <enum bitpos="27" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_conditional_rendering">
+                <enum bitpos="18" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT" comment="A pipeline stage for conditional rendering predicate fetch"/>
+                <enum bitpos="20" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT"  comment="read access flag for reading conditional rendering predicate"/>
+            </require>
+            <require depends="VK_NV_device_generated_commands">
+                <enum bitpos="17" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"/>
+                <enum bitpos="17" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV"/>
+                <enum bitpos="18" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV"/>
+            </require>
+            <require depends="VK_KHR_fragment_shading_rate">
+                <enum bitpos="22" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum bitpos="23" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+            </require>
+            <require depends="VK_NV_shading_rate_image">
+                <enum extends="VkPipelineStageFlagBits2"                    name="VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV" alias="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2"                           name="VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV"    alias="VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_acceleration_structure">
+                <enum bitpos="25" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum bitpos="21" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum bitpos="22" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_ray_tracing_pipeline">
+                <enum bitpos="21" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"/>
+            </require>
+            <require depends="VK_NV_ray_tracing">
+                <enum extends="VkPipelineStageFlagBits2"                    name="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"/>
+                <enum extends="VkPipelineStageFlagBits2"                    name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV" alias="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2"                           name="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV" alias="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2"                           name="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV" alias="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+            </require>
+            <require depends="VK_EXT_fragment_density_map">
+                <enum bitpos="23" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT"/>
+                <enum bitpos="24" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_blend_operation_advanced">
+                <enum bitpos="19" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"/>
+            </require>
+            <require depends="VK_NV_mesh_shader">
+                <enum extends="VkPipelineStageFlagBits2"                    name="VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT"/>
+                <enum extends="VkPipelineStageFlagBits2"                    name="VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT"/>
+            </require>
+            <require depends="VK_AMD_buffer_marker">
+                <command name="vkCmdWriteBufferMarker2AMD"/>
+            </require>
+            <require depends="VK_NV_device_diagnostic_checkpoints">
+                <type name="VkQueueFamilyCheckpointProperties2NV"/>
+                <type name="VkCheckpointData2NV"/>
+                <command name="vkGetQueueCheckpointData2NV"/>
+                <enum offset="8" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV"/>
+                <enum offset="9" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV"/>
+            </require>
+            <require depends="VK_EXT_mesh_shader">
+                <enum bitpos="19" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT"/>
+                <enum bitpos="20" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_316" number="316" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_316_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_316&quot;"              name="VK_AMD_EXTENSION_316_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_descriptor_buffer" number="317" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2+VK_KHR_buffer_device_address+VK_KHR_synchronization2+VK_EXT_descriptor_indexing" contact="Tobias Hector @tobski" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_descriptor_buffer&quot;"              name="VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT"/>
+                <enum offset="3" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT"/>
+                <enum offset="4" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT"/>
+                <enum offset="5" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"/>
+                <enum offset="6" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"/>
+                <enum offset="7" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"/>
+                <enum offset="8" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"/>
+                <enum offset="10" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT"/>
+                <enum offset="11" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT"/>
+                <enum offset="12" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT"/>
+                <enum bitpos="4" extends="VkDescriptorSetLayoutCreateFlagBits"  name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="5" extends="VkDescriptorSetLayoutCreateFlagBits"  name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT"/>
+                <enum bitpos="21" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="22" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="26" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="5" extends="VkBufferCreateFlagBits"               name="VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT"/>
+                <enum bitpos="16" extends="VkImageCreateFlagBits"               name="VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT"/>
+                <enum bitpos="2" extends="VkImageViewCreateFlagBits"            name="VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT"/>
+                <enum bitpos="3" extends="VkSamplerCreateFlagBits"              name="VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT"/>
+                <enum bitpos="3" extends="VkAccelerationStructureCreateFlagBitsKHR" name="VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT"/>
+                <enum bitpos="41" extends="VkAccessFlagBits2"                   name="VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT"/>
+                <enum bitpos="29"  extends="VkPipelineCreateFlagBits"           name="VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <type name="VkPhysicalDeviceDescriptorBufferPropertiesEXT"/>
+                <type name="VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT"/>
+                <type name="VkPhysicalDeviceDescriptorBufferFeaturesEXT"/>
+                <type name="VkDescriptorAddressInfoEXT"/>
+                <type name="VkDescriptorBufferBindingInfoEXT"/>
+                <type name="VkDescriptorBufferBindingPushDescriptorBufferHandleEXT"/>
+                <type name="VkDescriptorDataEXT"/>
+                <type name="VkDescriptorGetInfoEXT"/>
+                <type name="VkBufferCaptureDescriptorDataInfoEXT"/>
+                <type name="VkImageCaptureDescriptorDataInfoEXT"/>
+                <type name="VkImageViewCaptureDescriptorDataInfoEXT"/>
+                <type name="VkSamplerCaptureDescriptorDataInfoEXT"/>
+                <type name="VkOpaqueCaptureDescriptorDataCreateInfoEXT"/>
+                <command name="vkGetDescriptorSetLayoutSizeEXT"/>
+                <command name="vkGetDescriptorSetLayoutBindingOffsetEXT"/>
+                <command name="vkGetDescriptorEXT"/>
+                <command name="vkCmdBindDescriptorBuffersEXT"/>
+                <command name="vkCmdSetDescriptorBufferOffsetsEXT"/>
+                <command name="vkCmdBindDescriptorBufferEmbeddedSamplersEXT"/>
+                <command name="vkGetBufferOpaqueCaptureDescriptorDataEXT"/>
+                <command name="vkGetImageOpaqueCaptureDescriptorDataEXT"/>
+                <command name="vkGetImageViewOpaqueCaptureDescriptorDataEXT"/>
+                <command name="vkGetSamplerOpaqueCaptureDescriptorDataEXT"/>
+            </require>
+            <require depends="VK_KHR_acceleration_structure,VK_NV_ray_tracing">
+                <enum offset="9" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT"/>
+                <type name="VkAccelerationStructureCaptureDescriptorDataInfoEXT"/>
+                <command name="vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_318" number="318" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_318_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_318&quot;"              name="VK_AMD_EXTENSION_318_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_319" number="319" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_319_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_319&quot;"              name="VK_AMD_EXTENSION_319_EXTENSION_NAME"/>
+                <enum bitpos="3" extends="VkDescriptorSetLayoutCreateFlagBits" name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_RESERVED_3_BIT_AMD"/>
+                <enum bitpos="0" extends="VkPipelineLayoutCreateFlagBits" name="VK_PIPELINE_LAYOUT_CREATE_RESERVED_0_BIT_AMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_320" number="320" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_320_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_320&quot;"              name="VK_AMD_EXTENSION_320_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_graphics_pipeline_library" number="321" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_pipeline_library" author="AMD" contact="Tobias Hector @tobski" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_graphics_pipeline_library&quot;"  name="VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME"/>
+                <type name="VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT"/>
+                <type name="VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT"/>
+                <type name="VkGraphicsPipelineLibraryCreateInfoEXT"/>
+                <type name="VkGraphicsPipelineLibraryFlagBitsEXT"/>
+                <type name="VkGraphicsPipelineLibraryFlagsEXT"/>
+                <type name="VkPipelineLayoutCreateFlagBits"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT"/>
+                <enum bitpos="23" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT"/>
+                <enum bitpos="10" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT"/>
+                <enum bitpos="1" extends="VkPipelineLayoutCreateFlagBits" name="VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_shader_early_and_late_fragment_tests" number="322" author="EXT" contact="Tobias Hector @tobski" type="device" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_shader_early_and_late_fragment_tests&quot;" name="VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME"/>
+                <type name="VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_fragment_shader_barycentric" number="323" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Stu Smith" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                              name="VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_fragment_shader_barycentric&quot;" name="VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" extnumber="204"   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR"/>
+                <type name="VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR"/>
+                <type name="VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_subgroup_uniform_control_flow" number="324" type="device" depends="VK_VERSION_1_1" author="KHR" contact="Alan Baker @alan-baker" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1" name="VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_shader_subgroup_uniform_control_flow&quot;" name="VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_325" number="325" author="KHR" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_325_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_325&quot;"              name="VK_KHR_EXTENSION_325_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_zero_initialize_workgroup_memory" number="326" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alan Baker @alan-baker" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="1"                                                   name="VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_zero_initialize_workgroup_memory&quot;" name="VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES"/>
+                <type name="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_fragment_shading_rate_enums" number="327" type="device" depends="VK_KHR_fragment_shading_rate" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_fragment_shading_rate_enums&quot;" name="VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"/>
+                <enum offset="1" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"/>
+                <enum offset="2" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"/>
+                <type name="VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV"/>
+                <type name="VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV"/>
+                <type name="VkPipelineFragmentShadingRateEnumStateCreateInfoNV"/>
+                <type name="VkFragmentShadingRateNV"/>
+                <type name="VkFragmentShadingRateTypeNV"/>
+                <command name="vkCmdSetFragmentShadingRateEnumNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_ray_tracing_motion_blur" number="328" type="device" depends="VK_KHR_ray_tracing_pipeline" author="NV" contact="Eric Werness" supported="vulkan">
+            <require>
+                <enum value="1"                                                    name="VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_ray_tracing_motion_blur&quot;"            name="VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV"/>
+                <enum offset="1" extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV"/>
+                <enum offset="2" extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV"/>
+                <enum bitpos="5" extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV"/>
+                <enum bitpos="2" extends="VkAccelerationStructureCreateFlagBitsKHR" name="VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV"/>
+                <enum bitpos="20" extends="VkPipelineCreateFlagBits"               name="VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV"/>
+                <type name="VkAccelerationStructureGeometryMotionTrianglesDataNV"/>
+                <type name="VkAccelerationStructureMotionInfoNV"/>
+                <type name="VkAccelerationStructureMotionInstanceNV"/>
+                <type name="VkAccelerationStructureMotionInstanceDataNV"/>
+                <type name="VkAccelerationStructureMatrixMotionInstanceNV"/>
+                <type name="VkAccelerationStructureSRTMotionInstanceNV"/>
+                <type name="VkSRTDataNV"/>
+                <type name="VkAccelerationStructureMotionInstanceTypeNV"/>
+                <type name="VkPhysicalDeviceRayTracingMotionBlurFeaturesNV"/>
+                <type name="VkAccelerationStructureMotionInfoFlagsNV"/>
+                <type name="VkAccelerationStructureMotionInstanceFlagsNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_mesh_shader" number="329" type="device" depends="VK_KHR_spirv_1_4" author="EXT" sortorder="1" contact="Christoph Kubisch @pixeljetstream" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_MESH_SHADER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_mesh_shader&quot;"            name="VK_EXT_MESH_SHADER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT"/>
+                <enum bitpos="6" extends="VkShaderStageFlagBits"        name="VK_SHADER_STAGE_TASK_BIT_EXT"/>
+                <enum bitpos="7" extends="VkShaderStageFlagBits"        name="VK_SHADER_STAGE_MESH_BIT_EXT"/>
+                <enum bitpos="19" extends="VkPipelineStageFlagBits"     name="VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT"/>
+                <enum bitpos="20" extends="VkPipelineStageFlagBits"     name="VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT"/>
+                <enum offset="0" extends="VkQueryType"                  name="VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT"/>
+                <enum bitpos="11" extends="VkQueryPipelineStatisticFlagBits" name="VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT"/>
+                <enum bitpos="12" extends="VkQueryPipelineStatisticFlagBits" name="VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT"/>
+                <command name="vkCmdDrawMeshTasksEXT"/>
+                <command name="vkCmdDrawMeshTasksIndirectEXT"/>
+                <command name="vkCmdDrawMeshTasksIndirectCountEXT"/>
+                <type name="VkPhysicalDeviceMeshShaderFeaturesEXT"/>
+                <type name="VkPhysicalDeviceMeshShaderPropertiesEXT"/>
+                <type name="VkDrawMeshTasksIndirectCommandEXT"/>
+            </require>
+            <require depends="VK_NV_device_generated_commands">
+                <enum offset="0" extends="VkIndirectCommandsTokenTypeNV" name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_330" number="330" author="NV" contact="Liam Middlebrook @liam-middlebrook" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_330_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_330&quot;"               name="VK_NV_EXTENSION_330_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_ycbcr_2plane_444_formats" number="331" type="device" depends="VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1" author="EXT" contact="Tony Zlatinski @tzlatinski" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <comment>
+                    VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT and
+                    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT
+                    were not promoted to Vulkan 1.3.
+                </comment>
+                <enum value="1"                                           name="VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_ycbcr_2plane_444_formats&quot;" name="VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT"/>
+                <enum extends="VkFormat"                                  name="VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT" alias="VK_FORMAT_G8_B8R8_2PLANE_444_UNORM"/>
+                <enum extends="VkFormat"                                  name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT" alias="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                  name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT" alias="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16"/>
+                <enum extends="VkFormat"                                  name="VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT" alias="VK_FORMAT_G16_B16R16_2PLANE_444_UNORM"/>
+                <type name="VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_332" number="332" author="NV" contact="Tony Zlatinski @tzlatinski" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_332_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_332&quot;"               name="VK_NV_EXTENSION_332_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_fragment_density_map2" number="333" type="device" depends="VK_EXT_fragment_density_map" author="EXT" contact="Matthew Netsch @mnetsch" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_fragment_density_map2&quot;"      name="VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"/>
+                <enum offset="1"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"/>
+                <enum bitpos="1"  extends="VkImageViewCreateFlagBits"       name="VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT"/>
+                <type name="VkPhysicalDeviceFragmentDensityMap2FeaturesEXT"/>
+                <type name="VkPhysicalDeviceFragmentDensityMap2PropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_rotated_copy_commands" number="334" type="device" depends="VK_KHR_swapchain+VK_KHR_copy_commands2" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_rotated_copy_commands&quot;"     name="VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM"/>
+                <type name="VkCopyCommandTransformInfoQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_335" number="335" type="device" author="KHR" contact="Mark Bellamy @mark.bellamy_arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_335_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_335&quot;"              name="VK_KHR_EXTENSION_335_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_robustness" number="336" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Graeme Leese @gnl21" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_robustness&quot;"           name="VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES"/>
+                <type name="VkPhysicalDeviceImageRobustnessFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_workgroup_memory_explicit_layout" number="337" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Caio Marcelo de Oliveira Filho @cmarcelo" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                      name="VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_workgroup_memory_explicit_layout&quot;"    name="VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                           name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_copy_commands2" number="338" author="KHR" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" contact="Jeff Leger @jackohound" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3" ratified="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_KHR_COPY_COMMANDS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_copy_commands2&quot;"             name="VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR" alias="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_COPY_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_COPY_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_BLIT_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR" alias="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR" alias="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2"/>
+                <type name="VkCopyBufferInfo2KHR"/>
+                <type name="VkCopyImageInfo2KHR"/>
+                <type name="VkCopyBufferToImageInfo2KHR"/>
+                <type name="VkCopyImageToBufferInfo2KHR"/>
+                <type name="VkBlitImageInfo2KHR"/>
+                <type name="VkResolveImageInfo2KHR"/>
+                <type name="VkBufferCopy2KHR"/>
+                <type name="VkImageCopy2KHR"/>
+                <type name="VkImageBlit2KHR"/>
+                <type name="VkBufferImageCopy2KHR"/>
+                <type name="VkImageResolve2KHR"/>
+                <command name="vkCmdCopyBuffer2KHR"/>
+                <command name="vkCmdCopyImage2KHR"/>
+                <command name="vkCmdCopyBufferToImage2KHR"/>
+                <command name="vkCmdCopyImageToBuffer2KHR"/>
+                <command name="vkCmdBlitImage2KHR"/>
+                <command name="vkCmdResolveImage2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_compression_control" number="339" type="device" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_compression_control&quot;"  name="VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceImageCompressionControlFeaturesEXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT"/>
+                <type name="VkImageCompressionControlEXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT" alias="VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR"/>
+                <type name="VkSubresourceLayout2EXT"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT" alias="VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR"/>
+                <type name="VkImageSubresource2EXT"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT"/>
+                <type name="VkImageCompressionPropertiesEXT"/>
+                <type                                                       name="VkImageCompressionFlagBitsEXT"/>
+                <type                                                       name="VkImageCompressionFlagsEXT"/>
+                <type                                                       name="VkImageCompressionFixedRateFlagBitsEXT"/>
+                <type                                                       name="VkImageCompressionFixedRateFlagsEXT"/>
+                <enum offset="0" dir="-" extends="VkResult" name="VK_ERROR_COMPRESSION_EXHAUSTED_EXT"/>
+                <command name="vkGetImageSubresourceLayout2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_attachment_feedback_loop_layout" number="340" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="vulkan">
+            <require>
+                <enum value="2"                                                    name="VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_attachment_feedback_loop_layout&quot;"   name="VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT"/>
+                <enum offset="0" extends="VkImageLayout"                           name="VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT"/>
+                <enum bitpos="19" extends="VkImageUsageFlagBits"                   name="VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"/>
+                <enum bitpos="25" extends="VkPipelineCreateFlagBits"               name="VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"/>
+                <enum bitpos="26" extends="VkPipelineCreateFlagBits"               name="VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"/>
+                <enum bitpos="3"  extends="VkDependencyFlagBits"                   name="VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT" comment="Dependency may be a feedback loop"/>
+                <type name="VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_4444_formats" number="341" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <comment>
+                    VkPhysicalDevice4444FormatsFeaturesEXT and
+                    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT
+                    were not promoted to Vulkan 1.3.
+                </comment>
+                <enum value="1"                                             name="VK_EXT_4444_FORMATS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_4444_formats&quot;"               name="VK_EXT_4444_FORMATS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT" alias="VK_FORMAT_A4R4G4B4_UNORM_PACK16"/>
+                <enum extends="VkFormat"                                    name="VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT" alias="VK_FORMAT_A4B4G4R4_UNORM_PACK16"/>
+                <type name="VkPhysicalDevice4444FormatsFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_device_fault" number="342" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Ralph Potter gitlab:@r_potter" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_DEVICE_FAULT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_device_fault&quot;"               name="VK_EXT_DEVICE_FAULT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT"/>
+                <type name="VkPhysicalDeviceFaultFeaturesEXT"/>
+                <type name="VkDeviceFaultCountsEXT"/>
+                <type name="VkDeviceFaultInfoEXT"/>
+                <type name="VkDeviceFaultAddressInfoEXT"/>
+                <type name="VkDeviceFaultAddressTypeEXT"/>
+                <type name="VkDeviceFaultVendorInfoEXT"/>
+                <type name="VkDeviceFaultVendorBinaryHeaderVersionEXT"/>
+                <type name="VkDeviceFaultVendorBinaryHeaderVersionOneEXT"/>
+                <command name="vkGetDeviceFaultInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_rasterization_order_attachment_access" number="343" type="device" depends="VK_KHR_get_physical_device_properties2" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan" promotedto="VK_EXT_rasterization_order_attachment_access">
+            <require>
+                <enum value="1"                                                        name="VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_rasterization_order_attachment_access&quot;" name="VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM"/>
+                <enum extends="VkPipelineColorBlendStateCreateFlagBits"     name="VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM" alias="VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT"/>
+                <enum extends="VkPipelineDepthStencilStateCreateFlagBits"   name="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM" alias="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT"/>
+                <enum extends="VkPipelineDepthStencilStateCreateFlagBits"   name="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM" alias="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"/>
+                <enum extends="VkSubpassDescriptionFlagBits"                name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM" alias="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT"/>
+                <enum extends="VkSubpassDescriptionFlagBits"                name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM" alias="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT"/>
+                <enum extends="VkSubpassDescriptionFlagBits"                name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM" alias="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_344" number="344" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_344_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_344&quot;"              name="VK_ARM_EXTENSION_344_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_rgba10x6_formats" number="345" type="device" depends="VK_KHR_sampler_ycbcr_conversion" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan">
+             <require>
+                    <enum value="1"                                                name="VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION"/>
+                    <enum value="&quot;VK_EXT_rgba10x6_formats&quot;"              name="VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME"/>
+                    <enum offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT"/>
+                    <type name="VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_acquire_winrt_display" number="346" type="device" depends="VK_EXT_direct_mode_display" author="NV" contact="Jeff Juliano @jjuliano" platform="win32" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_acquire_winrt_display&quot;"       name="VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME"/>
+                <command name="vkAcquireWinrtDisplayNV"/>
+                <command name="vkGetWinrtDisplayNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_directfb_surface" number="347" type="instance" depends="VK_KHR_surface" platform="directfb" supported="vulkan" author="EXT" contact="Nicolas Caramelli @caramelli">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_directfb_surface&quot;"           name="VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT"/>
+                <type name="VkDirectFBSurfaceCreateFlagsEXT"/>
+                <type name="VkDirectFBSurfaceCreateInfoEXT"/>
+                <command name="vkCreateDirectFBSurfaceEXT"/>
+                <command name="vkGetPhysicalDeviceDirectFBPresentationSupportEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_350" number="350" type="device" author="KHR" contact="Mark Bellamy @mark.bellamy_arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_350_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_350&quot;"              name="VK_KHR_EXTENSION_350_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_351" number="351" author="NV" contact="Liam Middlebrook @liam-middlebrook" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_351_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_351&quot;"               name="VK_NV_EXTENSION_351_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_VALVE_mutable_descriptor_type" number="352" type="device" supported="vulkan" author="VALVE" contact="Joshua Ashton @Joshua-Ashton,Hans-Kristian Arntzen @HansKristian-Work" specialuse="d3demulation" depends="VK_KHR_maintenance3" promotedto="VK_EXT_mutable_descriptor_type">
+            <require>
+                <enum value="1"                                                name="VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION"/>
+                <enum value="&quot;VK_VALVE_mutable_descriptor_type&quot;"     name="VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                                name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT"/>
+                <enum extends="VkStructureType"                                name="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE" alias="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT"/>
+                <enum extends="VkDescriptorType"                               name="VK_DESCRIPTOR_TYPE_MUTABLE_VALVE" alias="VK_DESCRIPTOR_TYPE_MUTABLE_EXT"/>
+                <enum extends="VkDescriptorPoolCreateFlagBits"                 name="VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE" alias="VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT"/>
+                <enum extends="VkDescriptorSetLayoutCreateFlagBits"            name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE" alias="VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT"/>
+                <type name="VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE"/>
+                <type name="VkMutableDescriptorTypeListVALVE"/>
+                <type name="VkMutableDescriptorTypeCreateInfoVALVE"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_vertex_input_dynamic_state" number="353" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan,vulkansc">
+            <require>
+                <enum value="2"                                             name="VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_vertex_input_dynamic_state&quot;" name="VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VERTEX_INPUT_EXT"/>
+                <type name="VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT"/>
+                <type name="VkVertexInputBindingDescription2EXT"/>
+                <type name="VkVertexInputAttributeDescription2EXT"/>
+                <command name="vkCmdSetVertexInputEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_physical_device_drm" number="354" author="EXT" type="device" contact="Simon Ser @emersion" supported="vulkan" depends="VK_KHR_get_physical_device_properties2">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_physical_device_drm&quot;"        name="VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME"/>
+
+                <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT"/>
+
+                <type name="VkPhysicalDeviceDrmPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_device_address_binding_report" number="355" type="device" depends="VK_KHR_get_physical_device_properties2+VK_EXT_debug_utils" author="EXT" contact="Ralph Potter gitlab:@r_potter" specialuse="debugging,devtools" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_device_address_binding_report&quot;"  name="VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT"/>
+                <enum bitpos="3" extends="VkDebugUtilsMessageTypeFlagBitsEXT"   name="VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT"/>
+                <type name="VkPhysicalDeviceAddressBindingReportFeaturesEXT" />
+                <type name="VkDeviceAddressBindingCallbackDataEXT" />
+                <type name="VkDeviceAddressBindingFlagsEXT" />
+                <type name="VkDeviceAddressBindingFlagBitsEXT" />
+                <type name="VkDeviceAddressBindingTypeEXT" />
+            </require>
+        </extension>
+        <extension name="VK_EXT_depth_clip_control" number="356" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan" specialuse="glemulation">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_depth_clip_control&quot;"         name="VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceDepthClipControlFeaturesEXT"/>
+                <type name="VkPipelineViewportDepthClipControlCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_primitive_topology_list_restart" number="357" type="device" author="EXT" contact="Shahbaz Youssefi @syoussefi" depends="VK_KHR_get_physical_device_properties2" supported="vulkan" specialuse="glemulation">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_primitive_topology_list_restart&quot;"           name="VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT"/>
+                <type name="VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_358" number="358" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_358_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_358&quot;"              name="VK_KHR_EXTENSION_358_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_359" number="359" author="EXT" contact="Bill Hollings @billhollings" supported="disabled" specialuse="glemulation">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_359_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_359&quot;"              name="VK_EXT_EXTENSION_359_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_360" number="360" author="EXT" contact="Bill Hollings @billhollings" supported="disabled" specialuse="glemulation">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_360_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_360&quot;"              name="VK_EXT_EXTENSION_360_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_format_feature_flags2" number="361" author="KHR" type="device" depends="VK_KHR_get_physical_device_properties2" contact="Lionel Landwerlin @llandwerlin" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_format_feature_flags2&quot;"      name="VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR" alias="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3"/>
+                <type                                                       name="VkFormatFeatureFlags2KHR"/>
+                <type                                                       name="VkFormatFeatureFlagBits2KHR"/>
+                <type                                                       name="VkFormatProperties3KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_362" number="362" author="EXT" contact="Lionel Duc @nvlduc" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_362_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_362&quot;"              name="VK_EXT_EXTENSION_362_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_363" number="363" author="EXT" contact="Kaye Mason @chaleur" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_363_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_363&quot;"              name="VK_EXT_EXTENSION_363_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_extension_364" number="364" author="FUCHSIA" contact="Craig Stout @cdotstout" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_FUCHSIA_EXTENSION_364_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_extension_364&quot;"          name="VK_FUCHSIA_EXTENSION_364_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_external_memory" number="365" type="device" depends="VK_KHR_external_memory_capabilities+VK_KHR_external_memory" author="FUCHSIA" contact="John Rosasco @rosasco" platform="fuchsia" supported="vulkan">
+            <require>
+                <enum value="1"                                                name="VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_external_memory&quot;"           name="VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA"/>
+                <enum offset="1" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA"/>
+                <enum offset="2" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA"/>
+                <enum bitpos="11" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"/>
+                <type name="VkImportMemoryZirconHandleInfoFUCHSIA"/>
+                <type name="VkMemoryZirconHandlePropertiesFUCHSIA"/>
+                <type name="VkMemoryGetZirconHandleInfoFUCHSIA"/>
+                <command name="vkGetMemoryZirconHandleFUCHSIA"/>
+                <command name="vkGetMemoryZirconHandlePropertiesFUCHSIA"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_external_semaphore" number="366" type="device" depends="VK_KHR_external_semaphore_capabilities+VK_KHR_external_semaphore" author="FUCHSIA" contact="John Rosasco @rosasco" platform="fuchsia" supported="vulkan">
+            <require>
+                <enum value="1"                                                name="VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_external_semaphore&quot;"        name="VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA"/>
+                <enum offset="1" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA"/>
+                <enum bitpos="7" extends="VkExternalSemaphoreHandleTypeFlagBits" name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA"/>
+                <type name="VkImportSemaphoreZirconHandleInfoFUCHSIA"/>
+                <type name="VkSemaphoreGetZirconHandleInfoFUCHSIA"/>
+                <command name="vkImportSemaphoreZirconHandleFUCHSIA"/>
+                <command name="vkGetSemaphoreZirconHandleFUCHSIA"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_buffer_collection" number="367" type="device" depends="VK_FUCHSIA_external_memory+VK_KHR_sampler_ycbcr_conversion" author="FUCHSIA" contact="John Rosasco @rosasco" supported="vulkan" platform="fuchsia">
+            <require>
+                <enum value="2"                                         name="VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_buffer_collection&quot;"  name="VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA"/>
+                <enum offset="0" extends="VkObjectType"                 name="VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA" comment="VkBufferCollectionFUCHSIA"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA"/>
+                <enum offset="8" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA"/>
+                <enum offset="9" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA"/>
+                <type name="VkBufferCollectionFUCHSIA"/>
+                <type name="VkBufferCollectionCreateInfoFUCHSIA"/>
+                <type name="VkImportMemoryBufferCollectionFUCHSIA"/>
+                <type name="VkBufferCollectionImageCreateInfoFUCHSIA"/>
+                <type name="VkBufferConstraintsInfoFUCHSIA"/>
+                <type name="VkBufferCollectionBufferCreateInfoFUCHSIA"/>
+                <type name="VkBufferCollectionPropertiesFUCHSIA"/>
+                <type name="VkImageFormatConstraintsFlagsFUCHSIA" comment="Will add VkImageFormatConstraintsFlagBitsFUCHSIA when bits are defined in the future"/>
+                <type name="VkSysmemColorSpaceFUCHSIA"/>
+                <type name="VkImageConstraintsInfoFlagBitsFUCHSIA"/>
+                <type name="VkImageConstraintsInfoFlagsFUCHSIA"/>
+                <type name="VkImageConstraintsInfoFUCHSIA"/>
+                <type name="VkImageFormatConstraintsInfoFUCHSIA"/>
+                <type name="VkBufferCollectionConstraintsInfoFUCHSIA"/>
+                <command name="vkCreateBufferCollectionFUCHSIA"/>
+                <command name="vkSetBufferCollectionImageConstraintsFUCHSIA"/>
+                <command name="vkSetBufferCollectionBufferConstraintsFUCHSIA"/>
+                <command name="vkDestroyBufferCollectionFUCHSIA"/>
+                <command name="vkGetBufferCollectionPropertiesFUCHSIA"/>
+            </require>
+            <require depends="VK_EXT_debug_report">
+                <enum offset="0" extends="VkDebugReportObjectTypeEXT"   name="VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_FUCHSIA_extension_368" number="368" author="FUCHSIA" contact="Craig Stout @cdotstout" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_FUCHSIA_EXTENSION_368_SPEC_VERSION"/>
+                <enum value="&quot;VK_FUCHSIA_extension_368&quot;"          name="VK_FUCHSIA_EXTENSION_368_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_369" number="369" author="QCOM" contact="Matthew Netsch @mnetsch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_QCOM_EXTENSION_369_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_369&quot;"         name="VK_QCOM_EXTENSION_369_EXTENSION_NAME"/>
+                <enum bitpos="4" extends="VkDescriptorBindingFlagBits"  name="VK_DESCRIPTOR_BINDING_RESERVED_4_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_HUAWEI_subpass_shading" number="370" type="device" author="HUAWEI" contact="Pan Gao @PanGao-h" depends="VK_KHR_create_renderpass2+VK_KHR_synchronization2" supported="vulkan">
+            <require>
+                <enum value="3"                                         name="VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_subpass_shading&quot;"         name="VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI"/>
+                <enum offset="3" extends="VkPipelineBindPoint" extnumber="370" name="VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI"/>
+                <enum bitpos="39" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI"/>
+                <enum             extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI" alias="VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI" deprecated="aliased"/>
+                <enum bitpos="14" extends="VkShaderStageFlagBits"           name="VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI"/>
+                <type name="VkSubpassShadingPipelineCreateInfoHUAWEI"/>
+                <type name="VkPhysicalDeviceSubpassShadingFeaturesHUAWEI"/>
+                <type name="VkPhysicalDeviceSubpassShadingPropertiesHUAWEI"/>
+                <command name="vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"/>
+                <command name="vkCmdSubpassShadingHUAWEI"/>
+            </require>
+        </extension>
+        <extension name="VK_HUAWEI_invocation_mask" number="371" type="device" depends="VK_KHR_ray_tracing_pipeline+VK_KHR_synchronization2" author="Huawei" contact="Pan Gao @PanGao-h" supported="vulkan">
+            <require>
+                <enum value="1"                                              name="VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_invocation_mask&quot;"        name="VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI"/>
+                <enum bitpos="39" extends="VkAccessFlagBits2"                name="VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI"/>
+                <enum bitpos="18" extends="VkImageUsageFlagBits"             name="VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI"/>
+                <enum bitpos="40" extends="VkPipelineStageFlagBits2"         name="VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI"/>
+                <type name="VkPhysicalDeviceInvocationMaskFeaturesHUAWEI"/>
+                <command name="vkCmdBindInvocationMaskHUAWEI"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_memory_rdma" number="372" type="device" depends="VK_KHR_external_memory" author="NV" contact="Carsten Rohde @crohde" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_memory_rdma&quot;"            name="VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV"/>
+                <enum bitpos="8" extends="VkMemoryPropertyFlagBits"             name="VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV"/>
+                <enum bitpos="12" extends="VkExternalMemoryHandleTypeFlagBits"  name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV"/>
+                <type name="VkRemoteAddressNV"/>
+                <type name="VkMemoryGetRemoteAddressInfoNV"/>
+                <type name="VkPhysicalDeviceExternalMemoryRDMAFeaturesNV"/>
+                <command name="vkGetMemoryRemoteAddressNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_properties" number="373" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Mukund Keshava @mkeshavanv" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_properties&quot;"        name="VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"/>
+                <type name="VkPipelineInfoEXT"/>
+                <type name="VkPipelinePropertiesIdentifierEXT"/>
+                <type name="VkPhysicalDevicePipelinePropertiesFeaturesEXT"/>
+                <command name="vkGetPipelinePropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_sci_sync" number="374" depends="VK_VERSION_1_1" platform="sci" type="device" author="NV" contact="Kai Zhang @kazhang" supported="vulkansc" deprecatedby="VK_NV_external_sci_sync2">
+            <require>
+                <enum value="2"                                         name="VK_NV_EXTERNAL_SCI_SYNC_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_sci_sync&quot;"       name="VK_NV_EXTERNAL_SCI_SYNC_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMPORT_FENCE_SCI_SYNC_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_EXPORT_FENCE_SCI_SYNC_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_FENCE_GET_SCI_SYNC_INFO_NV"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SCI_SYNC_ATTRIBUTES_INFO_NV"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_SCI_SYNC_INFO_NV"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_SCI_SYNC_INFO_NV"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SEMAPHORE_GET_SCI_SYNC_INFO_NV"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SCI_SYNC_FEATURES_NV"/>
+                <enum bitpos="4" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV"/>
+                <enum bitpos="5" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV"/>
+                <enum bitpos="5" extends="VkExternalSemaphoreHandleTypeFlagBits" name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV"/>
+                <type name="VkSciSyncClientTypeNV"/>
+                <type name="VkSciSyncPrimitiveTypeNV"/>
+                <type name="VkExportFenceSciSyncInfoNV"/>
+                <type name="VkImportFenceSciSyncInfoNV"/>
+                <type name="VkFenceGetSciSyncInfoNV"/>
+                <type name="VkSciSyncAttributesInfoNV"/>
+                <type name="VkExportSemaphoreSciSyncInfoNV"/>
+                <type name="VkImportSemaphoreSciSyncInfoNV"/>
+                <type name="VkSemaphoreGetSciSyncInfoNV"/>
+                <type name="VkPhysicalDeviceExternalSciSyncFeaturesNV"/>
+                <command name="vkGetFenceSciSyncFenceNV"/>
+                <command name="vkGetFenceSciSyncObjNV"/>
+                <command name="vkImportFenceSciSyncFenceNV"/>
+                <command name="vkImportFenceSciSyncObjNV"/>
+                <command name="vkGetPhysicalDeviceSciSyncAttributesNV"/>
+                <command name="vkGetSemaphoreSciSyncObjNV"/>
+                <command name="vkImportSemaphoreSciSyncObjNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_memory_sci_buf" number="375" depends="VK_VERSION_1_1" platform="sci" type="device" author="NV" contact="Kai Zhang @kazhang" supported="vulkansc">
+            <require>
+                <enum value="2"                                         name="VK_NV_EXTERNAL_MEMORY_SCI_BUF_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_memory_sci_buf&quot;" name="VK_NV_EXTERNAL_MEMORY_SCI_BUF_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMPORT_MEMORY_SCI_BUF_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_EXPORT_MEMORY_SCI_BUF_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_MEMORY_GET_SCI_BUF_INFO_NV"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_MEMORY_SCI_BUF_PROPERTIES_NV"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCI_BUF_FEATURES_NV"/>
+                <enum extends="VkStructureType"                         name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SCI_BUF_FEATURES_NV" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCI_BUF_FEATURES_NV"/>
+                <enum bitpos="13" extends="VkExternalMemoryHandleTypeFlagBits"  name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV"/>
+                <type name="VkExportMemorySciBufInfoNV"/>
+                <type name="VkImportMemorySciBufInfoNV"/>
+                <type name="VkMemoryGetSciBufInfoNV"/>
+                <type name="VkMemorySciBufPropertiesNV"/>
+                <type name="VkPhysicalDeviceExternalMemorySciBufFeaturesNV"/>
+                <type name="VkPhysicalDeviceExternalSciBufFeaturesNV"/>
+                <command name="vkGetMemorySciBufNV"/>
+                <command name="vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV"/>
+                <command name="vkGetPhysicalDeviceSciBufAttributesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_frame_boundary" number="376" type="device" author="EXT" contact="James Fitzpatrick @jamesfitzpatrick" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_FRAME_BOUNDARY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_frame_boundary&quot;"         name="VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT"/>
+                <type name="VkPhysicalDeviceFrameBoundaryFeaturesEXT"/>
+                <type name="VkFrameBoundaryEXT"/>
+                <type name="VkFrameBoundaryFlagBitsEXT"/>
+                <type name="VkFrameBoundaryFlagsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_multisampled_render_to_single_sampled" number="377" type="device" depends="VK_KHR_create_renderpass2+VK_KHR_depth_stencil_resolve" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_multisampled_render_to_single_sampled&quot;"   name="VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT"/>
+                <enum bitpos="18" extends="VkImageCreateFlagBits"               name="VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT"/>
+                <type name="VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"/>
+                <type name="VkSubpassResolvePerformanceQueryEXT"/>
+                <type name="VkMultisampledRenderToSingleSampledInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extended_dynamic_state2" number="378" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan,vulkansc" promotedto="VK_VERSION_1_3">
+            <require>
+                <enum value="1"                                             name="VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extended_dynamic_state2&quot;"    name="VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT" comment="Not promoted to 1.3"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT" comment="Not promoted to 1.3"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT" alias="VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT" alias="VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE"/>
+                <enum offset="3" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_LOGIC_OP_EXT" comment="Not promoted to 1.3"/>
+                <enum extends="VkDynamicState"                              name="VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT" alias="VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE"/>
+                <type name="VkPhysicalDeviceExtendedDynamicState2FeaturesEXT" comment="Not promoted to 1.3"/>
+                <command name="vkCmdSetPatchControlPointsEXT" comment="Not promoted to 1.3"/>
+                <command name="vkCmdSetRasterizerDiscardEnableEXT"/>
+                <command name="vkCmdSetDepthBiasEnableEXT"/>
+                <command name="vkCmdSetLogicOpEXT" comment="Not promoted to 1.3"/>
+                <command name="vkCmdSetPrimitiveRestartEnableEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QNX_screen_surface" number="379" type="instance" depends="VK_KHR_surface" platform="screen" author="QNX" contact="Mike Gorchak @mgorchak-blackberry" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_QNX_SCREEN_SURFACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_QNX_screen_surface&quot;"         name="VK_QNX_SCREEN_SURFACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX"/>
+                <type name="VkScreenSurfaceCreateFlagsQNX"/>
+                <type name="VkScreenSurfaceCreateInfoQNX"/>
+                <command name="vkCreateScreenSurfaceQNX"/>
+                <command name="vkGetPhysicalDeviceScreenPresentationSupportQNX"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_380" number="380" author="KHR" contact="James Jones @cubanismo" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_380_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_380&quot;"          name="VK_KHR_EXTENSION_380_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_381" number="381" author="KHR" contact="James Jones @cubanismo" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_381_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_381&quot;"          name="VK_KHR_EXTENSION_381_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_color_write_enable" number="382" type="device" depends="VK_KHR_get_physical_device_properties2,VK_VERSION_1_1" author="EXT" contact="Sharif Elcott @selcott" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                         name="VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_color_write_enable&quot;"     name="VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkDynamicState"               name="VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT"/>
+                <type name="VkPhysicalDeviceColorWriteEnableFeaturesEXT"/>
+                <type name="VkPipelineColorWriteCreateInfoEXT"/>
+                <command name="vkCmdSetColorWriteEnableEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_primitives_generated_query" number="383" type="device" depends="VK_EXT_transform_feedback" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan" specialuse="glemulation">
+            <require>
+                <enum value="1"                                                 name="VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_primitives_generated_query&quot;"     name="VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT"/>
+                <enum offset="0" extends="VkQueryType"                          name="VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT"/>
+                <type name="VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_384" number="384" type="instance" author="EXT" contact="Chia-I Wu @olvaffe1" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_384_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_384&quot;"          name="VK_EXT_EXTENSION_384_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_MESA_extension_385" number="385" type="instance" author="MESA" contact="Chia-I Wu @olvaffe1" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_MESA_EXTENSION_385_SPEC_VERSION"/>
+                <enum value="&quot;VK_MESA_extension_385&quot;"         name="VK_MESA_EXTENSION_385_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_386" number="386" author="GOOGLE" contact="Chia-I Wu @olvaffe1" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GOOGLE_EXTENSION_386_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_386&quot;"       name="VK_GOOGLE_EXTENSION_386_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_ray_tracing_maintenance1" number="387" type="device" depends="VK_KHR_acceleration_structure" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_ray_tracing_maintenance1&quot;"   name="VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR"/>
+                <enum offset="0" extends="VkQueryType"                      name="VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR"/>
+                <enum offset="1" extends="VkQueryType"                      name="VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR"/>
+                <type name="VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR"/>
+            </require>
+            <require depends="VK_KHR_synchronization2">
+                <!-- VkPipelineStageFlagBits bitpos="28" is reserved by this extension, but not used -->
+                <enum bitpos="28" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_synchronization2+VK_KHR_ray_tracing_pipeline">
+                <enum bitpos="40" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_ray_tracing_pipeline">
+                <type name="VkTraceRaysIndirectCommand2KHR"/>
+                <command name="vkCmdTraceRaysIndirect2KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_388" number="388" author="EXT" contact="Alan Baker @alan-baker" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_388_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_388&quot;"              name="VK_EXT_EXTENSION_388_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_global_priority_query" number="389" type="device" depends="VK_EXT_global_priority+VK_KHR_get_physical_device_properties2" author="EXT" contact="Yiwei Zhang @zhangyiwei" supported="vulkan" promotedto="VK_KHR_global_priority">
+            <require>
+                <enum value="1"                                         name="VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_global_priority_query&quot;"  name="VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR"/>
+                <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT" alias="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR"/>
+                <enum                                                   name="VK_MAX_GLOBAL_PRIORITY_SIZE_EXT"/>
+                <type                                                   name="VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT"/>
+                <type                                                   name="VkQueueFamilyGlobalPriorityPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_390" number="390" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_390_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_390&quot;"              name="VK_EXT_EXTENSION_390_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_391" number="391" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_391_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_391&quot;"              name="VK_EXT_EXTENSION_391_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_view_min_lod" number="392" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_view_min_lod&quot;"         name="VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT"/>
+                <type                                                       name="VkPhysicalDeviceImageViewMinLodFeaturesEXT"/>
+                <type                                                       name="VkImageViewMinLodCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_multi_draw" number="393" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_MULTI_DRAW_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_multi_draw&quot;"             name="VK_EXT_MULTI_DRAW_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceMultiDrawFeaturesEXT"/>
+                <type name="VkPhysicalDeviceMultiDrawPropertiesEXT"/>
+                <command name="vkCmdDrawMultiEXT"/>
+                <command name="vkCmdDrawMultiIndexedEXT"/>
+                <type name="VkMultiDrawInfoEXT"/>
+                <type name="VkMultiDrawIndexedInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_2d_view_of_3d" number="394" depends="VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2" author="EXT" contact="Mike Blumenkrantz @zmike" specialuse="glemulation" type="device" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_2d_view_of_3d&quot;"              name="VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceImage2DViewOf3DFeaturesEXT"/>
+                <enum extends="VkImageCreateFlagBits" bitpos="17"  name="VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT" comment="Image is created with a layout where individual slices are capable of being used as 2D images"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_portability_enumeration" number="395" author="KHR" contact="Charles Giessen @charles-lunarg" type="instance" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_portability_enumeration&quot;"    name="VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME"/>
+                <enum bitpos="0" extends="VkInstanceCreateFlagBits"         name="VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_tile_image" number="396" type="device" author="EXT" depends="VK_VERSION_1_3" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_tile_image&quot;"          name="VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceShaderTileImageFeaturesEXT"/>
+                <type name="VkPhysicalDeviceShaderTileImagePropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_opacity_micromap" number="397" type="device"  depends="VK_KHR_acceleration_structure+VK_KHR_synchronization2" author="EXT" contact="Christoph Kubisch @pixeljetstream, Eric Werness" supported="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_EXT_OPACITY_MICROMAP_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_opacity_micromap&quot;"           name="VK_EXT_OPACITY_MICROMAP_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT"/>
+                <enum offset="1"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT"/>
+                <enum offset="2"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT"/>
+                <enum offset="3"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT"/>
+                <enum offset="4"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT"/>
+                <enum offset="5"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT"/>
+                <enum offset="6"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT"/>
+                <enum offset="7"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT"/>
+                <enum offset="8"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT"/>
+                <enum offset="9"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT"/>
+                <enum bitpos="30" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT"/>
+                <enum bitpos="44" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_MICROMAP_READ_BIT_EXT"/>
+                <enum bitpos="45" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT"/>
+                <enum offset="0"  extends="VkQueryType"                     name="VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT"/>
+                <enum offset="1"  extends="VkQueryType"                     name="VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT"/>
+                <enum offset="0"  extends="VkObjectType"                    name="VK_OBJECT_TYPE_MICROMAP_EXT"/>
+                <enum bitpos="23" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"/>
+                <enum bitpos="24" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT"/>
+                <enum bitpos="24" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT"/>
+                <enum bitpos="4"  extends="VkGeometryInstanceFlagBitsKHR"   name="VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT"/>
+                <enum bitpos="5"  extends="VkGeometryInstanceFlagBitsKHR"   name="VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT"/>
+                <enum bitpos="6"  extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT"/>
+                <enum bitpos="7"  extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT"/>
+                <enum bitpos="8"  extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT"/>
+                <type name="VkMicromapTypeEXT"/>
+                <type name="VkMicromapBuildInfoEXT"/>
+                <type name="VkMicromapUsageEXT"/>
+                <type name="VkMicromapCreateInfoEXT"/>
+                <type name="VkMicromapEXT"/>
+                <type name="VkBuildMicromapFlagBitsEXT"/>
+                <type name="VkBuildMicromapFlagsEXT"/>
+                <type name="VkCopyMicromapModeEXT"/>
+                <type name="VkPhysicalDeviceOpacityMicromapFeaturesEXT"/>
+                <type name="VkPhysicalDeviceOpacityMicromapPropertiesEXT"/>
+                <type name="VkMicromapVersionInfoEXT"/>
+                <type name="VkCopyMicromapToMemoryInfoEXT"/>
+                <type name="VkCopyMemoryToMicromapInfoEXT"/>
+                <type name="VkCopyMicromapInfoEXT"/>
+                <type name="VkMicromapCreateFlagBitsEXT"/>
+                <type name="VkMicromapCreateFlagsEXT"/>
+                <type name="VkBuildMicromapModeEXT"/>
+                <type name="VkMicromapBuildSizesInfoEXT"/>
+                <type name="VkOpacityMicromapFormatEXT"/>
+                <type name="VkAccelerationStructureTrianglesOpacityMicromapEXT"/>
+                <type name="VkMicromapTriangleEXT"/>
+                <type name="VkOpacityMicromapSpecialIndexEXT"/>
+                <command name="vkCreateMicromapEXT"/>
+                <command name="vkDestroyMicromapEXT"/>
+                <command name="vkCmdBuildMicromapsEXT"/>
+                <command name="vkBuildMicromapsEXT"/>
+                <command name="vkCopyMicromapEXT"/>
+                <command name="vkCopyMicromapToMemoryEXT"/>
+                <command name="vkCopyMemoryToMicromapEXT"/>
+                <command name="vkWriteMicromapsPropertiesEXT"/>
+                <command name="vkCmdCopyMicromapEXT"/>
+                <command name="vkCmdCopyMicromapToMemoryEXT"/>
+                <command name="vkCmdCopyMemoryToMicromapEXT"/>
+                <command name="vkCmdWriteMicromapsPropertiesEXT"/>
+                <command name="vkGetDeviceMicromapCompatibilityEXT"/>
+                <command name="vkGetMicromapBuildSizesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_displacement_micromap" number="398" type="device" depends="VK_EXT_opacity_micromap" author="NV" contact="Christoph Kubisch @pixeljetstream, Eric Werness @ewerness-nv" supported="vulkan" provisional="true" platform="provisional">
+            <require>
+                <enum value="2"                                        name="VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_displacement_micromap&quot;"  name="VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"            name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1"  extends="VkStructureType"            name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2"  extends="VkStructureType"            name="VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="28" extends="VkPipelineCreateFlagBits"   name="VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="9"  extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0"  extends="VkMicromapTypeEXT"          name="VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <type name="VkPhysicalDeviceDisplacementMicromapFeaturesNV"/>
+                <type name="VkPhysicalDeviceDisplacementMicromapPropertiesNV"/>
+                <type name="VkAccelerationStructureTrianglesDisplacementMicromapNV"/>
+                <type name="VkDisplacementMicromapFormatNV"/>
+            </require>
+        </extension>
+        <extension name="VK_JUICE_extension_399" number="399" author="JUICE" contact="Dean Beeler @canadacow" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_JUICE_EXTENSION_399_SPEC_VERSION"/>
+                <enum value="&quot;VK_JUICE_extension_399&quot;"        name="VK_JUICE_EXTENSION_399_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_JUICE_extension_400" number="400" author="JUICE" contact="David McCloskey @damcclos" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_JUICE_EXTENSION_400_SPEC_VERSION"/>
+                <enum value="&quot;VK_JUICE_extension_400&quot;"        name="VK_JUICE_EXTENSION_400_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_load_store_op_none" number="401" author="EXT" type="device" contact="Shahbaz Youssefi @syoussefi" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_load_store_op_none&quot;"          name="VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkAttachmentLoadOp" name="VK_ATTACHMENT_LOAD_OP_NONE_EXT"/>
+                <enum extends="VkAttachmentStoreOp" name="VK_ATTACHMENT_STORE_OP_NONE_EXT" alias="VK_ATTACHMENT_STORE_OP_NONE"/>
+            </require>
+        </extension>
+        <extension name="VK_FB_extension_402" number="402" author="FB" contact="Artem Bolgar @artyom17" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_FB_EXTENSION_402_SPEC_VERSION"/>
+                <enum value="&quot;VK_FB_extension_402&quot;"           name="VK_FB_EXTENSION_402_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_FB_extension_403" number="403" author="FB" contact="Artem Bolgar @artyom17" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_FB_EXTENSION_403_SPEC_VERSION"/>
+                <enum value="&quot;VK_FB_extension_403&quot;"           name="VK_FB_EXTENSION_403_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_FB_extension_404" number="404" author="FB" contact="Artem Bolgar @artyom17" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_FB_EXTENSION_404_SPEC_VERSION"/>
+                <enum value="&quot;VK_FB_extension_404&quot;"           name="VK_FB_EXTENSION_404_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_HUAWEI_cluster_culling_shader" number="405" type="device" depends="VK_KHR_get_physical_device_properties2" author="HUAWEI" contact="Yuchang Wang @richard_Wang2" supported="vulkan">
+            <require>
+                <enum value="2"                                              name="VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_cluster_culling_shader&quot;"   name="VK_HUAWEI_CLUSTER_CULLING_SHADER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI"/>
+                <enum bitpos="41" extends="VkPipelineStageFlagBits2"         name="VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+                <enum bitpos="19" extends="VkShaderStageFlagBits"            name="VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI"/>
+                <enum bitpos="13" extends="VkQueryPipelineStatisticFlagBits" name="VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI"/>
+                <command name="vkCmdDrawClusterHUAWEI"/>
+                <command name="vkCmdDrawClusterIndirectHUAWEI"/>
+                <type name="VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI"/>
+                <type name="VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI"/>
+            </require>
+        </extension>
+        <extension name="VK_HUAWEI_extension_406" number="406" author="HUAWEI" contact="Hueilong Wang @wyvernathuawei" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_HUAWEI_EXTENSION_406_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_extension_406&quot;"           name="VK_HUAWEI_EXTENSION_406_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_407" number="407" author="GGP" contact="J.D. Rouan @jdrouan" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GGP_EXTENSION_407_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_407&quot;"          name="VK_GGP_EXTENSION_407_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_408" number="408" author="GGP" contact="J.D. Rouan @jdrouan" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GGP_EXTENSION_408_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_408&quot;"          name="VK_GGP_EXTENSION_408_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_409" number="409" author="GGP" contact="J.D. Rouan @jdrouan" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GGP_EXTENSION_409_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_409&quot;"          name="VK_GGP_EXTENSION_409_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_410" number="410" author="GGP" contact="J.D. Rouan @jdrouan" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GGP_EXTENSION_410_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_410&quot;"          name="VK_GGP_EXTENSION_410_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GGP_extension_411" number="411" author="GGP" contact="J.D. Rouan @jdrouan" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GGP_EXTENSION_411_SPEC_VERSION"/>
+                <enum value="&quot;VK_GGP_extension_411&quot;"          name="VK_GGP_EXTENSION_411_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_border_color_swizzle" number="412" type="device" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan" depends="VK_EXT_custom_border_color" specialuse="glemulation,d3demulation">
+            <require>
+                <enum value="1"                                         name="VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_border_color_swizzle&quot;"   name="VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceBorderColorSwizzleFeaturesEXT"/>
+                <type name="VkSamplerBorderColorComponentMappingCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pageable_device_local_memory" number="413" author="EXT" contact="Piers Daniell @pdaniell-nv" type="device" depends="VK_EXT_memory_priority" supported="vulkan">
+            <require>
+                <enum value="1"                                                  name="VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pageable_device_local_memory&quot;"    name="VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                       name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT"/>
+                <type                                                            name="VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT"/>
+                <command                                                         name="vkSetDeviceMemoryPriorityEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_maintenance4" number="414" type="device" depends="VK_VERSION_1_1" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_3" ratified="vulkan">
+            <require>
+                <enum value="2"                                             name="VK_KHR_MAINTENANCE_4_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance4&quot;"               name="VK_KHR_MAINTENANCE_4_EXTENSION_NAME"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR" alias="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS"/>
+                <enum extends="VkStructureType"                             name="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR" alias="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS"/>
+                <enum extends="VkImageAspectFlagBits"                       name="VK_IMAGE_ASPECT_NONE_KHR" alias="VK_IMAGE_ASPECT_NONE"/>
+                <type name="VkPhysicalDeviceMaintenance4FeaturesKHR"/>
+                <type name="VkPhysicalDeviceMaintenance4PropertiesKHR"/>
+                <type name="VkDeviceBufferMemoryRequirementsKHR"/>
+                <type name="VkDeviceImageMemoryRequirementsKHR"/>
+                <command name="vkGetDeviceBufferMemoryRequirementsKHR"/>
+                <command name="vkGetDeviceImageMemoryRequirementsKHR"/>
+                <command name="vkGetDeviceImageSparseMemoryRequirementsKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_HUAWEI_extension_415" number="415" author="HUAWEI" contact="Hueilong Wang @wyvernathuawei" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_HUAWEI_EXTENSION_415_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_extension_415&quot;"         name="VK_HUAWEI_EXTENSION_415_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_shader_core_properties" number="416" type="device" depends="VK_VERSION_1_1" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_shader_core_properties&quot;" name="VK_ARM_SHADER_CORE_PROPERTIES_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM"/>
+                <type name="VkPhysicalDeviceShaderCorePropertiesARM"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_417" number="417" author="KHR" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_417_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_417&quot;"          name="VK_KHR_EXTENSION_417_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_scheduling_controls" number="418" author="ARM" contact="Kevin Petit @kpet" type="device" depends="VK_ARM_shader_core_builtins" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_scheduling_controls&quot;"    name="VK_ARM_SCHEDULING_CONTROLS_EXTENSION_NAME"/>
+                <enum extends="VkStructureType" offset="0"              name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM"/>
+                <enum extends="VkStructureType" offset="1"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM"/>
+                <enum extends="VkStructureType" offset="2"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM"/>
+                <type name="VkDeviceQueueShaderCoreControlCreateInfoARM"/>
+                <type name="VkPhysicalDeviceSchedulingControlsFeaturesARM"/>
+                <type name="VkPhysicalDeviceSchedulingControlsPropertiesARM"/>
+                <type name="VkPhysicalDeviceSchedulingControlsFlagsARM"/>
+                <type name="VkPhysicalDeviceSchedulingControlsFlagBitsARM"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_sliced_view_of_3d" number="419" depends="VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2" author="EXT" contact="Mike Blumenkrantz @zmike" specialuse="d3demulation" type="device" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_sliced_view_of_3d&quot;"    name="VK_EXT_IMAGE_SLICED_VIEW_OF_3D_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT"/>
+                <enum name="VK_REMAINING_3D_SLICES_EXT"/>
+                <type name="VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT"/>
+                <type name="VkImageViewSlicedCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_420" number="420" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_420_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_420&quot;"              name="VK_EXT_EXTENSION_420_EXTENSION_NAME"/>
+                <enum bitpos="4" extends="VkSwapchainCreateFlagBitsKHR" name="VK_SWAPCHAIN_CREATE_RESERVED_4_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_VALVE_descriptor_set_host_mapping" number="421" type="device" author="VALVE" contact="Hans-Kristian Arntzen @HansKristian-Work" specialuse="d3demulation" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION"/>
+                <enum value="&quot;VK_VALVE_descriptor_set_host_mapping&quot;"  name="VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE"/>
+                <enum offset="1"  extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE"/>
+                <enum offset="2"  extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE"/>
+                <type name="VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE"/>
+                <type name="VkDescriptorSetBindingReferenceVALVE"/>
+                <type name="VkDescriptorSetLayoutHostMappingInfoVALVE"/>
+                <command name="vkGetDescriptorSetLayoutHostMappingInfoVALVE"/>
+                <command name="vkGetDescriptorSetHostMappingVALVE"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_depth_clamp_zero_one" number="422" author="EXT" type="device" contact="Graeme Leese @gnl21" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_depth_clamp_zero_one&quot;"       name="VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceDepthClampZeroOneFeaturesEXT" />
+            </require>
+        </extension>
+        <extension name="VK_EXT_non_seamless_cube_map" number="423" author="EXT" type="device" contact="Georg Lehmann @DadSchoorse" specialuse="d3demulation,glemulation" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_non_seamless_cube_map&quot;"      name="VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME"/>
+                <enum bitpos="2" extends="VkSamplerCreateFlagBits"          name="VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_424" number="424" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_ARM_EXTENSION_424_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_424&quot;"          name="VK_ARM_EXTENSION_424_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_425" number="425" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_ARM_EXTENSION_425_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_425&quot;"          name="VK_ARM_EXTENSION_425_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_fragment_density_map_offset" number="426" type="device" depends="VK_KHR_get_physical_device_properties2+VK_EXT_fragment_density_map" author="QCOM" contact="Matthew Netsch @mnetsch" supported="vulkan">
+            <require>
+                <enum value="1"                                               name="VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_fragment_density_map_offset&quot;" name="VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM"/>
+                <enum offset="1"  extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM"/>
+                <enum offset="2"  extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM"/>
+                <enum bitpos="15" extends="VkImageCreateFlagBits"             name="VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM"/>
+                <type name="VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM"/>
+                <type name="VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM"/>
+                <type name="VkSubpassFragmentDensityMapOffsetEndInfoQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_copy_memory_indirect" number="427" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_buffer_device_address" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_copy_memory_indirect&quot;"    name="VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV"/>
+                <type name="VkCopyMemoryIndirectCommandNV"/>
+                <type name="VkCopyMemoryToImageIndirectCommandNV"/>
+                <type name="VkPhysicalDeviceCopyMemoryIndirectFeaturesNV"/>
+                <type name="VkPhysicalDeviceCopyMemoryIndirectPropertiesNV"/>
+                <command name="vkCmdCopyMemoryIndirectNV"/>
+                <command name="vkCmdCopyMemoryToImageIndirectNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_memory_decompression" number="428" type="device" depends="VK_KHR_get_physical_device_properties2+VK_KHR_buffer_device_address" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_memory_decompression&quot;"       name="VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV"/>
+                <type name="VkMemoryDecompressionMethodFlagBitsNV"/>
+                <type name="VkMemoryDecompressionMethodFlagsNV"/>
+                <type name="VkDecompressMemoryRegionNV"/>
+                <type name="VkPhysicalDeviceMemoryDecompressionFeaturesNV"/>
+                <type name="VkPhysicalDeviceMemoryDecompressionPropertiesNV"/>
+                <command name="vkCmdDecompressMemoryNV"/>
+                <command name="vkCmdDecompressMemoryIndirectCountNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_generated_commands_compute" number="429" type="device" depends="VK_NV_device_generated_commands" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan">
+            <require>
+                <enum value="2"                                           name="VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_device_generated_commands_compute&quot;"  name="VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV"/>
+                <enum offset="3" extends="VkIndirectCommandsTokenTypeNV"  name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV"/>
+                <enum offset="4" extends="VkIndirectCommandsTokenTypeNV"  name="VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV"/>
+                <enum bitpos="7" extends="VkDescriptorSetLayoutCreateFlagBits"  name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV"/>
+                <type name="VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV"/>
+                <type name="VkComputePipelineIndirectBufferInfoNV"/>
+                <type name="VkPipelineIndirectDeviceAddressInfoNV"/>
+                <type name="VkBindPipelineIndirectCommandNV"/>
+                <command name="vkGetPipelineIndirectMemoryRequirementsNV"/>
+                <command name="vkCmdUpdatePipelineIndirectBufferNV"/>
+                <command name="vkGetPipelineIndirectDeviceAddressNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_430" number="430" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_430_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_430&quot;"           name="VK_NV_EXTENSION_430_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_linear_color_attachment" number="431" type="device" author="NVIDIA" contact="sourav parmar @souravpNV" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_linear_color_attachment&quot;" name="VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV"/>
+                <type                                                   name="VkPhysicalDeviceLinearColorAttachmentFeaturesNV"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="38" extends="VkFormatFeatureFlagBits2"    name="VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV" comment="Format support linear image as render target, it cannot be mixed with non linear attachment"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_432" number="432" author="NV" contact="Sourav Parmar @souravpNV" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_432_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_432&quot;"           name="VK_NV_EXTENSION_432_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_433" number="433" author="NV" contact="Sourav Parmar @souravpNV" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_433_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_433&quot;"           name="VK_NV_EXTENSION_433_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_surfaceless_query" number="434" type="instance" depends="VK_KHR_surface" author="GOOGLE" contact="Shahbaz Youssefi @syoussefi" specialuse="glemulation" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_surfaceless_query&quot;"   name="VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_435" number="435" author="KHR" contact="Alan Baker @alan-baker" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_435_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_435&quot;"          name="VK_KHR_EXTENSION_435_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_application_parameters" number="436" type="instance" author="EXT" contact="Daniel Koch @dgkoch" supported="vulkansc">
+            <require>
+                <enum value="1"                                         name="VK_EXT_APPLICATION_PARAMETERS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_application_parameters&quot;" name="VK_EXT_APPLICATION_PARAMETERS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_APPLICATION_PARAMETERS_EXT"/>
+                <type name="VkApplicationParametersEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_437" number="437" author="EXT" contact="Jonathan Weinstein @Jonathan-Weinstein" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_437_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_437&quot;"          name="VK_EXT_EXTENSION_437_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_image_compression_control_swapchain" number="438" type="device" depends="VK_EXT_image_compression_control" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_image_compression_control_swapchain&quot;"  name="VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_extension_439" number="439" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_SEC_EXTENSION_439_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_extension_439&quot;"          name="VK_SEC_EXTENSION_439_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_440" number="440" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_QCOM_EXTENSION_440_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_440&quot;"         name="VK_QCOM_EXTENSION_440_EXTENSION_NAME"/>
+                <enum bitpos="7" extends="VkQueueFlagBits"              name="VK_QUEUE_RESERVED_7_BIT_QCOM"/>
+                <enum bitpos="1" extends="VkDeviceQueueCreateFlagBits"  name="VK_DEVICE_QUEUE_CREATE_RESERVED_1_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_image_processing" number="441" type="device" depends="VK_KHR_format_feature_flags2" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_image_processing&quot;"      name="VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM"/>
+                <enum bitpos="4" extends="VkSamplerCreateFlagBits"      name="VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM"/>
+                <enum bitpos="20" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM"/>
+                <enum bitpos="21" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM"/>
+                <enum offset="0" extends="VkDescriptorType"             name="VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM"/>
+                <enum offset="1" extends="VkDescriptorType"             name="VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM"/>
+                <type name="VkImageViewSampleWeightCreateInfoQCOM"/>
+                <type name="VkPhysicalDeviceImageProcessingFeaturesQCOM"/>
+                <type name="VkPhysicalDeviceImageProcessingPropertiesQCOM"/>
+            </require>
+            <require depends="VK_KHR_format_feature_flags2">
+                <enum bitpos="34" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM"/>
+                <enum bitpos="35" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM"/>
+                <enum bitpos="36" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM"/>
+                <enum bitpos="37" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_442" number="442" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_442_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_442&quot;"          name="VK_COREAVI_EXTENSION_442_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_443" number="443" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_443_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_443&quot;"          name="VK_COREAVI_EXTENSION_443_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_444" number="444" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_444_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_444&quot;"          name="VK_COREAVI_EXTENSION_444_EXTENSION_NAME"/>
+                <enum extends="VkCommandPoolResetFlagBits" bitpos="1"       name="VK_COMMAND_POOL_RESET_RESERVED_1_BIT_COREAVI"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_445" number="445" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_445_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_445&quot;"          name="VK_COREAVI_EXTENSION_445_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_446" number="446" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_446_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_446&quot;"          name="VK_COREAVI_EXTENSION_446_EXTENSION_NAME"/>
+                <enum bitpos="24" extends="VkImageUsageFlagBits"            name="VK_IMAGE_USAGE_RESERVED_24_BIT_COREAVI"/>
+            </require>
+        </extension>
+        <extension name="VK_COREAVI_extension_447" number="447" author="COREAVI" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_COREAVI_EXTENSION_447_SPEC_VERSION"/>
+                <enum value="&quot;VK_COREAVI_extension_447&quot;"          name="VK_COREAVI_EXTENSION_447_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_extension_448" number="448" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_SEC_EXTENSION_448_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_extension_448&quot;"          name="VK_SEC_EXTENSION_448_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_extension_449" number="449" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_SEC_EXTENSION_449_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_extension_449&quot;"          name="VK_SEC_EXTENSION_449_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_extension_450" number="450" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_SEC_EXTENSION_450_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_extension_450&quot;"          name="VK_SEC_EXTENSION_450_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_extension_451" number="451" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_SEC_EXTENSION_451_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_extension_451&quot;"          name="VK_SEC_EXTENSION_451_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_nested_command_buffer" number="452" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_nested_command_buffer&quot;"  name="VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT"/>
+                <enum offset="0" extends="VkSubpassContents"            name="VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT"/>
+                <enum bitpos="4" extends="VkRenderingFlagBits"          name="VK_RENDERING_CONTENTS_INLINE_BIT_EXT"/>
+                <type                                                   name="VkPhysicalDeviceNestedCommandBufferFeaturesEXT"/>
+                <type                                                   name="VkPhysicalDeviceNestedCommandBufferPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_453" number="453" author="Arm" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_ARM_EXTENSION_453_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_453&quot;"          name="VK_ARM_EXTENSION_453_EXTENSION_NAME"/>
+                <enum bitpos="11" extends="VkQueueFlagBits"             name="VK_QUEUE_RESERVED_11_BIT_ARM"/>
+                <enum bitpos="43" extends="VkPipelineStageFlagBits2"    name="VK_PIPELINE_STAGE_2_RESERVED_43_BIT_ARM"/>
+                <enum bitpos="49" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_RESERVED_49_BIT_ARM"/>
+                <enum bitpos="50" extends="VkAccessFlagBits2"           name="VK_ACCESS_2_RESERVED_50_BIT_ARM"/>
+                <enum bitpos="47" extends="VkFormatFeatureFlagBits2"    name="VK_FORMAT_FEATURE_2_RESERVED_47_BIT_ARM" />
+            </require>
+        </extension>
+        <extension name="VK_EXT_external_memory_acquire_unmodified" number="454" type="device" depends="VK_KHR_external_memory" author="EXT" contact="Lina Versace @versalinyaa" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                         name="VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_external_memory_acquire_unmodified&quot;"     name="VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                              name="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT"/>
+                <type name="VkExternalMemoryAcquireUnmodifiedEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_GOOGLE_extension_455" number="455" author="GOOGLE" contact="Lina Versace @versalinyaa" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_GOOGLE_EXTENSION_455_SPEC_VERSION"/>
+                <enum value="&quot;VK_GOOGLE_extension_455&quot;"       name="VK_GOOGLE_EXTENSION_455_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extended_dynamic_state3" number="456" type="device" depends="VK_KHR_get_physical_device_properties2" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="2"                                              name="VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extended_dynamic_state3&quot;"     name="VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT"/>
+                <enum offset="3" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT"/>
+                <enum offset="4" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_POLYGON_MODE_EXT"/>
+                <enum offset="5" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT"/>
+                <enum offset="6" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_SAMPLE_MASK_EXT"/>
+                <enum offset="7" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT"/>
+                <enum offset="8" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT"/>
+                <enum offset="9" extends="VkDynamicState"                    name="VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT"/>
+                <enum offset="10" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT"/>
+                <enum offset="11" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT"/>
+                <enum offset="12" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT"/>
+                <enum offset="13" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT"/>
+                <enum offset="14" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT"/>
+                <enum offset="15" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT"/>
+                <enum offset="16" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT"/>
+                <enum offset="17" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT"/>
+                <enum offset="18" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT"/>
+                <enum offset="19" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT"/>
+                <enum offset="20" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT"/>
+                <enum offset="21" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT"/>
+                <enum offset="22" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT"/>
+                <type name="VkPhysicalDeviceExtendedDynamicState3FeaturesEXT"/>
+                <type name="VkPhysicalDeviceExtendedDynamicState3PropertiesEXT"/>
+                <type name="VkColorBlendEquationEXT"/>
+                <type name="VkColorBlendAdvancedEXT"/>
+                <command name="vkCmdSetTessellationDomainOriginEXT"/>
+                <command name="vkCmdSetDepthClampEnableEXT"/>
+                <command name="vkCmdSetPolygonModeEXT"/>
+                <command name="vkCmdSetRasterizationSamplesEXT"/>
+                <command name="vkCmdSetSampleMaskEXT"/>
+                <command name="vkCmdSetAlphaToCoverageEnableEXT"/>
+                <command name="vkCmdSetAlphaToOneEnableEXT"/>
+                <command name="vkCmdSetLogicOpEnableEXT"/>
+                <command name="vkCmdSetColorBlendEnableEXT"/>
+                <command name="vkCmdSetColorBlendEquationEXT"/>
+                <command name="vkCmdSetColorWriteMaskEXT"/>
+                <command name="vkCmdSetRasterizationStreamEXT"/>
+                <command name="vkCmdSetConservativeRasterizationModeEXT"/>
+                <command name="vkCmdSetExtraPrimitiveOverestimationSizeEXT"/>
+                <command name="vkCmdSetDepthClipEnableEXT"/>
+                <command name="vkCmdSetSampleLocationsEnableEXT"/>
+                <command name="vkCmdSetColorBlendAdvancedEXT"/>
+                <command name="vkCmdSetProvokingVertexModeEXT"/>
+                <command name="vkCmdSetLineRasterizationModeEXT"/>
+                <command name="vkCmdSetLineStippleEnableEXT"/>
+                <command name="vkCmdSetDepthClipNegativeOneToOneEXT"/>
+            </require>
+            <require depends="VK_NV_clip_space_w_scaling">
+                <enum offset="23" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV"/>
+                <command name="vkCmdSetViewportWScalingEnableNV"/>
+            </require>
+            <require depends="VK_NV_viewport_swizzle">
+                <enum offset="24" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV"/>
+                <command name="vkCmdSetViewportSwizzleNV"/>
+            </require>
+            <require depends="VK_NV_fragment_coverage_to_color">
+                <enum offset="25" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV"/>
+                <enum offset="26" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV"/>
+                <command name="vkCmdSetCoverageToColorEnableNV"/>
+                <command name="vkCmdSetCoverageToColorLocationNV"/>
+            </require>
+            <require depends="VK_NV_framebuffer_mixed_samples">
+                <enum offset="27" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV"/>
+                <enum offset="28" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV"/>
+                <enum offset="29" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV"/>
+                <command name="vkCmdSetCoverageModulationModeNV"/>
+                <command name="vkCmdSetCoverageModulationTableEnableNV"/>
+                <command name="vkCmdSetCoverageModulationTableNV"/>
+            </require>
+            <require depends="VK_NV_shading_rate_image">
+                <enum offset="30" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV"/>
+                <command name="vkCmdSetShadingRateImageEnableNV"/>
+            </require>
+            <require depends="VK_NV_representative_fragment_test">
+                <enum offset="31" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV"/>
+                <command name="vkCmdSetRepresentativeFragmentTestEnableNV"/>
+            </require>
+            <require depends="VK_NV_coverage_reduction_mode">
+                <enum offset="32" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV"/>
+                <command name="vkCmdSetCoverageReductionModeNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_457" number="457" author="RASTERGRID" contact="Daniel Rakos @aqnuep" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_457_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_457&quot;"          name="VK_EXT_EXTENSION_457_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_458" number="458" author="RASTERGRID" contact="Daniel Rakos @aqnuep" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_458_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_458&quot;"          name="VK_EXT_EXTENSION_458_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_subpass_merge_feedback" number="459" type="device" author="EXT" contact="Ting Wei @catweiting" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="2"                                              name="VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_subpass_merge_feedback&quot;"      name="VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT"/>
+                <type name="VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT"/>
+                <type name="VkRenderPassCreationControlEXT"/>
+                <type name="VkRenderPassCreationFeedbackInfoEXT"/>
+                <type name="VkRenderPassCreationFeedbackCreateInfoEXT"/>
+                <type name="VkRenderPassSubpassFeedbackInfoEXT"/>
+                <type name="VkRenderPassSubpassFeedbackCreateInfoEXT"/>
+                <type name="VkSubpassMergeStatusEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_LUNARG_direct_driver_loading" number="460" type="instance" author="LUNARG" contact="Charles Giessen @charles-lunarg" supported="vulkan">
+            <require>
+                <enum value="1"                                           name="VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION"/>
+                <enum value="&quot;VK_LUNARG_direct_driver_loading&quot;" name="VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG"/>
+                <enum offset="1" extends="VkStructureType"                name="VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG"/>
+                <type name="VkDirectDriverLoadingFlagsLUNARG" comment="Will add VkDirectDriverLoadingFlagBitsLUNARG when bits are defined in the future"/>
+                <type name="VkDirectDriverLoadingModeLUNARG"/>
+                <type name="VkDirectDriverLoadingInfoLUNARG"/>
+                <type name="VkDirectDriverLoadingListLUNARG"/>
+                <type name="PFN_vkGetInstanceProcAddrLUNARG"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_461" number="461" author="EXT" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_461_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_461&quot;"          name="VK_EXT_EXTENSION_461_EXTENSION_NAME"/>
+                <enum bitpos="39" extends="VkFormatFeatureFlagBits2"    name="VK_FORMAT_FEATURE_2_RESERVED_39_BIT_EXT"/>
+                <enum bitpos="23" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_RESERVED_23_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_462" number="462" author="EXT" contact="Joshua Ashton @Joshua-Ashton,Liam Middlebrook @liam-middlebrook" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_462_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_462&quot;"          name="VK_EXT_EXTENSION_462_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_module_identifier" number="463" type="device" depends="VK_KHR_get_physical_device_properties2+VK_EXT_pipeline_creation_cache_control" author="EXT" contact="Hans-Kristian Arntzen @HansKristian-Work" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_module_identifier&quot;"   name="VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT"/>
+                <enum name="VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT"/>
+                <type name="VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT"/>
+                <type name="VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT"/>
+                <type name="VkPipelineShaderStageModuleIdentifierCreateInfoEXT"/>
+                <type name="VkShaderModuleIdentifierEXT"/>
+                <command name="vkGetShaderModuleIdentifierEXT"/>
+                <command name="vkGetShaderModuleCreateInfoIdentifierEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_rasterization_order_attachment_access" number="464" type="device" depends="VK_KHR_get_physical_device_properties2" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan">
+            <require>
+                <enum value="1"                                                        name="VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_rasterization_order_attachment_access&quot;" name="VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" extnumber="343" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"/>
+                <type name="VkPipelineColorBlendStateCreateFlagBits"/>
+                <type name="VkPipelineDepthStencilStateCreateFlagBits"/>
+                <enum bitpos="0" extends="VkPipelineColorBlendStateCreateFlagBits"   name="VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT"/>
+                <enum bitpos="0" extends="VkPipelineDepthStencilStateCreateFlagBits" name="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT"/>
+                <enum bitpos="1" extends="VkPipelineDepthStencilStateCreateFlagBits" name="VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"/>
+                <enum bitpos="4" extends="VkSubpassDescriptionFlagBits"              name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT"/>
+                <enum bitpos="5" extends="VkSubpassDescriptionFlagBits"              name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT"/>
+                <enum bitpos="6" extends="VkSubpassDescriptionFlagBits"              name="VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_optical_flow" number="465" depends="VK_KHR_get_physical_device_properties2+VK_KHR_format_feature_flags2+VK_KHR_synchronization2" type="device" author="NV" contact="Carsten Rohde @crohde" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_OPTICAL_FLOW_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_optical_flow&quot;"                name="VK_NV_OPTICAL_FLOW_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV"/>
+                <enum offset="1"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV"/>
+                <enum offset="2"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV"/>
+                <enum offset="3"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV"/>
+                <enum offset="4"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV"/>
+                <enum offset="5"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV"/>
+                <enum offset="10"  extends="VkStructureType"                name="VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV"/><comment>NV internal use only</comment>
+                <enum offset="0"  extends="VkFormat"                        name="VK_FORMAT_R16G16_S10_5_NV"/>
+                <enum offset="0"  extends="VkObjectType"                    name="VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV"/>
+                <enum bitpos="8"  extends="VkQueueFlagBits"                 name="VK_QUEUE_OPTICAL_FLOW_BIT_NV"/>
+                <enum bitpos="29" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"/>
+                <enum bitpos="42" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV"/>
+                <enum bitpos="43" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV"/>
+                <enum bitpos="40" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV"/>
+                <enum bitpos="41" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV"/>
+                <enum bitpos="42" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV"/>
+                <type name="VkPhysicalDeviceOpticalFlowFeaturesNV"/>
+                <type name="VkPhysicalDeviceOpticalFlowPropertiesNV"/>
+                <type name="VkOpticalFlowUsageFlagBitsNV"/>
+                <type name="VkOpticalFlowUsageFlagsNV"/>
+                <type name="VkOpticalFlowImageFormatInfoNV"/>
+                <type name="VkOpticalFlowImageFormatPropertiesNV"/>
+                <type name="VkOpticalFlowGridSizeFlagBitsNV"/>
+                <type name="VkOpticalFlowGridSizeFlagsNV"/>
+                <type name="VkOpticalFlowPerformanceLevelNV"/>
+                <type name="VkOpticalFlowSessionBindingPointNV"/>
+                <type name="VkOpticalFlowSessionCreateFlagBitsNV"/>
+                <type name="VkOpticalFlowSessionCreateFlagsNV"/>
+                <type name="VkOpticalFlowExecuteFlagBitsNV"/>
+                <type name="VkOpticalFlowExecuteFlagsNV"/>
+                <type name="VkOpticalFlowSessionNV"/>
+                <type name="VkOpticalFlowSessionCreateInfoNV"/>
+                <type name="VkOpticalFlowSessionCreatePrivateDataInfoNV"/><comment>NV internal use only</comment>
+                <type name="VkOpticalFlowExecuteInfoNV"/>
+                <command name="vkGetPhysicalDeviceOpticalFlowImageFormatsNV"/>
+                <command name="vkCreateOpticalFlowSessionNV"/>
+                <command name="vkDestroyOpticalFlowSessionNV"/>
+                <command name="vkBindOpticalFlowSessionImageNV"/>
+                <command name="vkCmdOpticalFlowExecuteNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_legacy_dithering" number="466" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan" specialuse="glemulation">
+            <require>
+                <enum value="1"                                         name="VK_EXT_LEGACY_DITHERING_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_legacy_dithering&quot;"       name="VK_EXT_LEGACY_DITHERING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT"/>
+                <enum bitpos="7" extends="VkSubpassDescriptionFlagBits" name="VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT"/>
+                <type name="VkPhysicalDeviceLegacyDitheringFeaturesEXT"/>
+            </require>
+            <require depends="VK_VERSION_1_3">
+                <enum bitpos="3" extends="VkRenderingFlagBits"          name="VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_dynamic_rendering">
+                <enum bitpos="3" extends="VkRenderingFlagBits"          name="VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_protected_access" number="467" type="device" depends="VK_KHR_get_physical_device_properties2" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_protected_access&quot;"  name="VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT"/>
+                <enum bitpos="27" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT"/>
+                <enum bitpos="30" extends="VkPipelineCreateFlagBits"        name="VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT"/>
+                <type name="VkPhysicalDevicePipelineProtectedAccessFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_468" number="468" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_468_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_468&quot;"          name="VK_EXT_EXTENSION_468_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ANDROID_external_format_resolve" number="469" type="device" depends="VK_ANDROID_external_memory_android_hardware_buffer" platform="android" author="ANDROID" contact="Chris Forbes @chrisforbes" specialuse="glemulation" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION"/>
+                <enum value="&quot;VK_ANDROID_external_format_resolve&quot;"  name="VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID"/>
+                <type name="VkPhysicalDeviceExternalFormatResolveFeaturesANDROID"/>
+                <type name="VkPhysicalDeviceExternalFormatResolvePropertiesANDROID"/>
+                <type name="VkAndroidHardwareBufferFormatResolvePropertiesANDROID"/>
+            </require>
+            <require depends="VK_KHR_dynamic_rendering">
+                <enum bitpos="4" extends="VkResolveModeFlagBits"            name="VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_470" number="470" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_470_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_470&quot;"          name="VK_AMD_EXTENSION_470_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_maintenance5" number="471" type="device" depends="VK_VERSION_1_1+VK_KHR_dynamic_rendering" author="KHR" contact="Stu Smith @stu-s" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_KHR_MAINTENANCE_5_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance5&quot;"           name="VK_KHR_MAINTENANCE_5_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR"/>
+                <type name="VkPhysicalDeviceMaintenance5FeaturesKHR"/>
+                <type name="VkPhysicalDeviceMaintenance5PropertiesKHR"/>
+                <enum offset="0" extends="VkFormat"                     name="VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR"/>
+                <enum offset="1" extends="VkFormat"                     name="VK_FORMAT_A8_UNORM_KHR"/>
+                <command name="vkCmdBindIndexBuffer2KHR"/>
+                <command name="vkGetRenderingAreaGranularityKHR"/>
+                <type name="VkRenderingAreaInfoKHR"/>
+                <command name="vkGetDeviceImageSubresourceLayoutKHR"/>
+                <command name="vkGetImageSubresourceLayout2KHR"/>
+                <type name="VkDeviceImageSubresourceInfoKHR"/>
+                <type name="VkImageSubresource2KHR"/>
+                <type name="VkSubresourceLayout2KHR"/>
+                <enum offset="2" extends="VkStructureType" extnumber="339" name="VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR"/>
+                <enum offset="3" extends="VkStructureType" extnumber="339" name="VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR"/>
+            </require>
+            <require comment="Split off new 64-bit flags separately, for the moment">
+                <type name="VkPipelineCreateFlags2KHR"/>
+                <type name="VkPipelineCreateFlagBits2KHR"/>
+                <type name="VkPipelineCreateFlags2CreateInfoKHR"/>
+                <type name="VkBufferUsageFlags2KHR"/>
+                <type name="VkBufferUsageFlagBits2KHR"/>
+                <type name="VkBufferUsageFlags2CreateInfoKHR"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR"/>
+            </require>
+            <require depends="VK_VERSION_1_1,VK_KHR_device_group">
+                <enum bitpos="3"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"/>
+                <enum bitpos="4"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR"/>
+            </require>
+            <require depends="VK_NV_ray_tracing">
+                <enum bitpos="5"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV"/>
+            </require>
+            <require depends="VK_KHR_pipeline_executable_properties">
+                <enum bitpos="6"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR"/>
+                <enum bitpos="7"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"/>
+            </require>
+            <require depends="VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control">
+                <enum bitpos="8"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR"/>
+                <enum bitpos="9"  extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR"/>
+            </require>
+            <require depends="VK_EXT_graphics_pipeline_library">
+                <enum bitpos="10" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT"/>
+                <enum bitpos="23" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_pipeline_library">
+                <enum bitpos="11" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_ray_tracing_pipeline">
+                <enum bitpos="12" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR"/>
+                <enum bitpos="13" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR"/>
+                <enum bitpos="14" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR"/>
+                <enum bitpos="15" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR"/>
+                <enum bitpos="16" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR"/>
+                <enum bitpos="17" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR"/>
+                <enum bitpos="19" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR"/>
+            </require>
+            <require depends="VK_NV_device_generated_commands">
+                <enum bitpos="18" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV"/>
+            </require>
+            <require depends="VK_NV_ray_tracing_motion_blur">
+                <enum bitpos="20" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV"/>
+            </require>
+            <require depends="VK_KHR_dynamic_rendering+VK_KHR_fragment_shading_rate">
+                <enum bitpos="21" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_dynamic_rendering+VK_EXT_fragment_density_map">
+                <enum bitpos="22" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_opacity_micromap">
+                <enum bitpos="24" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_attachment_feedback_loop_layout">
+                <enum bitpos="25" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"/>
+                <enum bitpos="26" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_pipeline_protected_access">
+                <enum bitpos="27" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT"/>
+                <enum bitpos="30" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT"/>
+            </require>
+            <require depends="VK_NV_displacement_micromap">
+                <enum bitpos="28" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV"/>
+            </require>
+            <require depends="VK_EXT_descriptor_buffer">
+                <enum bitpos="29" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_conditional_rendering">
+                <enum bitpos="9"  extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_ray_tracing_pipeline">
+                <enum bitpos="10" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR"/>
+            </require>
+            <require depends="VK_NV_ray_tracing">
+                <enum extends="VkBufferUsageFlagBits2KHR"                name="VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV" alias="VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR"/>
+            </require>
+            <require depends="VK_EXT_transform_feedback">
+                <enum bitpos="11" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"/>
+                <enum bitpos="12" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_video_decode_queue">
+                <enum bitpos="13" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR"/>
+                <enum bitpos="14" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_video_encode_queue">
+                <enum bitpos="15" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="16" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+            </require>
+            <require depends="VK_VERSION_1_2,VK_KHR_buffer_device_address,VK_EXT_buffer_device_address">
+                <enum bitpos="17" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR"/>
+            </require>
+            <require depends="VK_KHR_acceleration_structure">
+                <enum bitpos="19" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR"/>
+                <enum bitpos="20" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR"/>
+            </require>
+            <require depends="VK_EXT_descriptor_buffer">
+                <enum bitpos="21" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="22" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT"/>
+                <enum bitpos="26" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_opacity_micromap">
+                <enum bitpos="23" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"/>
+                <enum bitpos="24" extends="VkBufferUsageFlagBits2KHR"    name="VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_472" number="472" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_472_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_472&quot;"          name="VK_AMD_EXTENSION_472_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_473" number="473" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_473_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_473&quot;"          name="VK_AMD_EXTENSION_473_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_474" number="474" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_474_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_474&quot;"          name="VK_AMD_EXTENSION_474_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_475" number="475" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_475_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_475&quot;"          name="VK_AMD_EXTENSION_475_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_476" number="476" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_476_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_476&quot;"          name="VK_AMD_EXTENSION_476_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_477" number="477" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_477_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_477&quot;"          name="VK_AMD_EXTENSION_477_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_478" number="478" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_478_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_478&quot;"          name="VK_AMD_EXTENSION_478_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_479" number="479" author="AMD" contact="Stu Smith" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_AMD_EXTENSION_479_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_479&quot;"          name="VK_AMD_EXTENSION_479_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_480" number="480" author="EXT" contact="Daniel Stone" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_480_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_480&quot;"          name="VK_EXT_EXTENSION_480_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_481" number="481" author="EXT" contact="Daniel Stone" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_481_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_481&quot;"          name="VK_EXT_EXTENSION_481_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_ray_tracing_position_fetch" number="482" type="device" depends="VK_KHR_acceleration_structure" author="KHR" contact="Eric Werness" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                     name="VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_ray_tracing_position_fetch&quot;"         name="VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR"/>
+                <enum bitpos="11" extends="VkBuildAccelerationStructureFlagBitsKHR" name="VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR"/>
+                <type name="VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_object" number="483" depends="(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+(VK_KHR_dynamic_rendering,VK_VERSION_1_3)" type="device" author="EXT" contact="Daniel Story @daniel-story" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                            name="VK_EXT_SHADER_OBJECT_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_shader_object&quot;"             name="VK_EXT_SHADER_OBJECT_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT"/>
+                <enum extnumber="353" offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"/>
+                <enum extnumber="353" offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"/>
+                <enum extends="VkStructureType"                            name="VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"/>
+                <enum offset="0" extends="VkObjectType"                    name="VK_OBJECT_TYPE_SHADER_EXT"/>
+                <enum offset="0" extends="VkResult"                        name="VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT"/>
+                <type name="VkShaderEXT"/>
+                <type name="VkShaderCreateFlagBitsEXT"/>
+                <type name="VkShaderCreateFlagsEXT"/>
+                <type name="VkShaderCodeTypeEXT"/>
+                <type name="VkPhysicalDeviceShaderObjectFeaturesEXT"/>
+                <type name="VkPhysicalDeviceShaderObjectPropertiesEXT"/>
+                <type name="VkShaderCreateInfoEXT"/>
+                <type name="VkShaderRequiredSubgroupSizeCreateInfoEXT"/>
+                <type name="VkVertexInputBindingDescription2EXT"/>
+                <type name="VkVertexInputAttributeDescription2EXT"/>
+                <type name="VkColorBlendEquationEXT"/>
+                <type name="VkColorBlendAdvancedEXT"/>
+                <command name="vkCreateShadersEXT"/>
+                <command name="vkDestroyShaderEXT"/>
+                <command name="vkGetShaderBinaryDataEXT"/>
+                <command name="vkCmdBindShadersEXT"/>
+                <command name="vkCmdSetCullModeEXT"/>
+                <command name="vkCmdSetFrontFaceEXT"/>
+                <command name="vkCmdSetPrimitiveTopologyEXT"/>
+                <command name="vkCmdSetViewportWithCountEXT"/>
+                <command name="vkCmdSetScissorWithCountEXT"/>
+                <command name="vkCmdBindVertexBuffers2EXT"/>
+                <command name="vkCmdSetDepthTestEnableEXT"/>
+                <command name="vkCmdSetDepthWriteEnableEXT"/>
+                <command name="vkCmdSetDepthCompareOpEXT"/>
+                <command name="vkCmdSetDepthBoundsTestEnableEXT"/>
+                <command name="vkCmdSetStencilTestEnableEXT"/>
+                <command name="vkCmdSetStencilOpEXT"/>
+                <command name="vkCmdSetVertexInputEXT"/>
+                <command name="vkCmdSetPatchControlPointsEXT"/>
+                <command name="vkCmdSetRasterizerDiscardEnableEXT"/>
+                <command name="vkCmdSetDepthBiasEnableEXT"/>
+                <command name="vkCmdSetLogicOpEXT"/>
+                <command name="vkCmdSetPrimitiveRestartEnableEXT"/>
+                <command name="vkCmdSetTessellationDomainOriginEXT"/>
+                <command name="vkCmdSetDepthClampEnableEXT"/>
+                <command name="vkCmdSetPolygonModeEXT"/>
+                <command name="vkCmdSetRasterizationSamplesEXT"/>
+                <command name="vkCmdSetSampleMaskEXT"/>
+                <command name="vkCmdSetAlphaToCoverageEnableEXT"/>
+                <command name="vkCmdSetAlphaToOneEnableEXT"/>
+                <command name="vkCmdSetLogicOpEnableEXT"/>
+                <command name="vkCmdSetColorBlendEnableEXT"/>
+                <command name="vkCmdSetColorBlendEquationEXT"/>
+                <command name="vkCmdSetColorWriteMaskEXT"/>
+                <command name="vkCmdSetRasterizationStreamEXT"/>
+                <command name="vkCmdSetConservativeRasterizationModeEXT"/>
+                <command name="vkCmdSetExtraPrimitiveOverestimationSizeEXT"/>
+                <command name="vkCmdSetDepthClipEnableEXT"/>
+                <command name="vkCmdSetSampleLocationsEnableEXT"/>
+                <command name="vkCmdSetColorBlendAdvancedEXT"/>
+                <command name="vkCmdSetProvokingVertexModeEXT"/>
+                <command name="vkCmdSetLineRasterizationModeEXT"/>
+                <command name="vkCmdSetLineStippleEnableEXT"/>
+                <command name="vkCmdSetDepthClipNegativeOneToOneEXT"/>
+            </require>
+            <require depends="VK_EXT_subgroup_size_control,VK_VERSION_1_3">
+                <enum bitpos="1" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"/>
+                <enum bitpos="2" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_mesh_shader,VK_NV_mesh_shader">
+                <enum bitpos="3" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_device_group,VK_VERSION_1_1">
+                <enum bitpos="4" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT"/>
+            </require>
+            <require depends="VK_KHR_fragment_shading_rate">
+                <enum bitpos="5" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT"/>
+            </require>
+            <require depends="VK_EXT_fragment_density_map">
+                <enum bitpos="6" extends="VkShaderCreateFlagBitsEXT" name="VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"/>
+            </require>
+            <require depends="VK_NV_clip_space_w_scaling">
+                <command name="vkCmdSetViewportWScalingEnableNV"/>
+            </require>
+            <require depends="VK_NV_viewport_swizzle">
+                <command name="vkCmdSetViewportSwizzleNV"/>
+            </require>
+            <require depends="VK_NV_fragment_coverage_to_color">
+                <command name="vkCmdSetCoverageToColorEnableNV"/>
+                <command name="vkCmdSetCoverageToColorLocationNV"/>
+            </require>
+            <require depends="VK_NV_framebuffer_mixed_samples">
+                <command name="vkCmdSetCoverageModulationModeNV"/>
+                <command name="vkCmdSetCoverageModulationTableEnableNV"/>
+                <command name="vkCmdSetCoverageModulationTableNV"/>
+            </require>
+            <require depends="VK_NV_shading_rate_image">
+                <command name="vkCmdSetShadingRateImageEnableNV"/>
+            </require>
+            <require depends="VK_NV_representative_fragment_test">
+                <command name="vkCmdSetRepresentativeFragmentTestEnableNV"/>
+            </require>
+            <require depends="VK_NV_coverage_reduction_mode">
+                <command name="vkCmdSetCoverageReductionModeNV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_484" number="484" author="KHR" contact="Chris Glover @cdglove" supported="disabled">
+            <require>
+                <enum value="0"                                          name="VK_EXT_EXTENSION_484_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_484&quot;"           name="VK_EXT_EXTENSION_484_EXTENSION_NAME"/>
+                <enum bitpos="31" extends="VkPipelineCreateFlagBits2KHR" name="VK_PIPELINE_CREATE_2_RESERVED_31_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_tile_properties" number="485" type="device" depends="VK_KHR_get_physical_device_properties2" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                               name="VK_QCOM_TILE_PROPERTIES_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_tile_properties&quot;"             name="VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME"/>
+                <command name="vkGetFramebufferTilePropertiesQCOM"/>
+                <command name="vkGetDynamicRenderingTilePropertiesQCOM"/>
+                <enum offset="0" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM"/>
+                <type name="VkPhysicalDeviceTilePropertiesFeaturesQCOM"/>
+                <type name="VkTilePropertiesQCOM"/>
+            </require>
+            <require depends="VK_KHR_dynamic_rendering">
+                <type name="VkRenderingInfoKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_SEC_amigo_profiling" number="486" type="device" depends="VK_KHR_get_physical_device_properties2" author="SEC" contact="Ralph Potter gitlab:@r_potter" supported="vulkan">
+            <require>
+                <enum value="1"                                               name="VK_SEC_AMIGO_PROFILING_SPEC_VERSION"/>
+                <enum value="&quot;VK_SEC_amigo_profiling&quot;"              name="VK_SEC_AMIGO_PROFILING_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC"/>
+                <enum offset="1" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC"/>
+                <type name="VkPhysicalDeviceAmigoProfilingFeaturesSEC"/>
+                <type name="VkAmigoProfilingSubmitInfoSEC"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_487" number="487" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_487_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_487&quot;"          name="VK_EXT_EXTENSION_487_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_488" number="488" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_488_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_488&quot;"          name="VK_EXT_EXTENSION_488_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_multiview_per_view_viewports" number="489" type="device" author="QCOM" contact="Jeff Leger @jackohound" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="1"                                                name="VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_multiview_per_view_viewports&quot;" name="VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM"/>
+                <type name="VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_external_sci_sync2" number="490" author="NV" depends="VK_VERSION_1_1" platform="sci" type="device" contact="Kai Zhang @kazhang" supported="vulkansc">
+            <require>
+                <enum value="1"                                         name="VK_NV_EXTERNAL_SCI_SYNC_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_external_sci_sync2&quot;"      name="VK_NV_EXTERNAL_SCI_SYNC_2_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkObjectType"                name="VK_OBJECT_TYPE_SEMAPHORE_SCI_SYNC_POOL_NV"   comment="VkSemaphoreSciSyncPoolNV"/>
+                <enum offset="0"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_SEMAPHORE_SCI_SYNC_POOL_CREATE_INFO_NV"/>
+                <enum offset="1"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_SEMAPHORE_SCI_SYNC_CREATE_INFO_NV"/>
+                <enum offset="2"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SCI_SYNC_2_FEATURES_NV"/>
+                <type name="VkSemaphoreSciSyncPoolNV"/>
+                <type name="VkPhysicalDeviceExternalSciSync2FeaturesNV"/>
+                <type name="VkSemaphoreSciSyncPoolCreateInfoNV"/>
+                <type name="VkSemaphoreSciSyncCreateInfoNV"/>
+                <command name="vkCreateSemaphoreSciSyncPoolNV"/>
+                <command name="vkDestroySemaphoreSciSyncPoolNV"/>
+            </require>
+            <require comment="functionality re-used unmodified from VK_NV_external_sci_sync">
+                <enum extnumber="374" offset="0" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_IMPORT_FENCE_SCI_SYNC_INFO_NV"/>
+                <enum extnumber="374" offset="1" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_EXPORT_FENCE_SCI_SYNC_INFO_NV"/>
+                <enum extnumber="374" offset="2" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_FENCE_GET_SCI_SYNC_INFO_NV"/>
+                <enum extnumber="374" offset="3" extends="VkStructureType"   name="VK_STRUCTURE_TYPE_SCI_SYNC_ATTRIBUTES_INFO_NV"/>
+                <enum bitpos="4" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV"/>
+                <enum bitpos="5" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV"/>
+                <type name="VkSciSyncClientTypeNV"/>
+                <type name="VkSciSyncPrimitiveTypeNV"/>
+                <type name="VkExportFenceSciSyncInfoNV"/>
+                <type name="VkImportFenceSciSyncInfoNV"/>
+                <type name="VkFenceGetSciSyncInfoNV"/>
+                <type name="VkSciSyncAttributesInfoNV"/>
+                <command name="vkGetFenceSciSyncFenceNV"/>
+                <command name="vkGetFenceSciSyncObjNV"/>
+                <command name="vkImportFenceSciSyncFenceNV"/>
+                <command name="vkImportFenceSciSyncObjNV"/>
+                <command name="vkGetPhysicalDeviceSciSyncAttributesNV"/>
+            </require>
+            <require depends="VKSC_VERSION_1_0" api="vulkansc">
+                <enum offset="3" extends="VkStructureType"         name="VK_STRUCTURE_TYPE_DEVICE_SEMAPHORE_SCI_SYNC_POOL_RESERVATION_CREATE_INFO_NV"/>
+                <type name="VkDeviceSemaphoreSciSyncPoolReservationCreateInfoNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_ray_tracing_invocation_reorder" number="491" type="device" depends="VK_KHR_ray_tracing_pipeline" author="NV" contact="Eric Werness @ewerness-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_ray_tracing_invocation_reorder&quot;"  name="VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV"/>
+                <type name="VkRayTracingInvocationReorderModeNV"/>
+                <type name="VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV"/>
+                <type name="VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_492" number="492" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_492_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_492&quot;"           name="VK_NV_EXTENSION_492_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extended_sparse_address_space" number="493" type="device" author="NV" contact="Russell Chou @russellcnv" supported="vulkan">
+            <require>
+                <enum value="1"                                               name="VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extended_sparse_address_space&quot;" name="VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV"/>
+                <enum offset="1" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV"/>
+                <type name="VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV"/>
+                <type name="VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_494" number="494" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_494_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_494&quot;"           name="VK_NV_EXTENSION_494_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_mutable_descriptor_type" number="495" type="device" supported="vulkan" author="EXT" contact="Joshua Ashton @Joshua-Ashton,Hans-Kristian Arntzen @HansKristian-Work" specialuse="d3demulation" depends="VK_KHR_maintenance3">
+            <require>
+                <enum value="1"                                                name="VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_mutable_descriptor_type&quot;"       name="VK_EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType" extnumber="352"     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT"/>
+                <enum offset="2" extends="VkStructureType" extnumber="352"     name="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkDescriptorType" extnumber="352"    name="VK_DESCRIPTOR_TYPE_MUTABLE_EXT"/>
+                <enum bitpos="2" extends="VkDescriptorPoolCreateFlagBits"      name="VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT"/>
+                <enum bitpos="2" extends="VkDescriptorSetLayoutCreateFlagBits" name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT"/>
+                <type name="VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT"/>
+                <type name="VkMutableDescriptorTypeListEXT"/>
+                <type name="VkMutableDescriptorTypeCreateInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_496" number="496" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_496_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_496&quot;"              name="VK_EXT_EXTENSION_496_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_497" number="497" author="EXT" contact="Christophe Riccio @christophe" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_497_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_497&quot;"              name="VK_EXT_EXTENSION_497_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_shader_core_builtins" number="498" author="ARM" contact="Kevin Petit @kpet" type="device" depends="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <require>
+                <enum value="2"                                         name="VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_shader_core_builtins&quot;"   name="VK_ARM_SHADER_CORE_BUILTINS_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM"/>
+                <enum offset="1"  extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM"/>
+                <type name="VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM"/>
+                <type name="VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_pipeline_library_group_handles" number="499" type="device" depends="VK_KHR_ray_tracing_pipeline+VK_KHR_pipeline_library" author="EXT" contact="Hans-Kristian Arntzen @HansKristian-Work" supported="vulkan">
+            <require>
+                <enum value="1"                                                  name="VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_pipeline_library_group_handles&quot;"  name="VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                       name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT"/>
+                <type name="VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_dynamic_rendering_unused_attachments" number="500" author="EXT" contact="Piers Daniell @pdaniell-nv" type="device" depends="(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+(VK_KHR_dynamic_rendering,VK_VERSION_1_3)" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                        name="VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_dynamic_rendering_unused_attachments&quot;"  name="VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME"/>
+                <enum offset="0"  extends="VkStructureType"                            name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_501" number="501" author="SEC" contact="Chris Hambacher @chambacher" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_501_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_501&quot;"              name="VK_EXT_EXTENSION_501_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_502" number="502" author="HUAWEI" contact="Pan Gao @PanGao-h" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_502_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_502&quot;"              name="VK_EXT_EXTENSION_502_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_503" number="503" author="HUAWEI" contact="Pan Gao @PanGao-h" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_503_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_503&quot;"              name="VK_EXT_EXTENSION_503_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_504" number="504" author="NV" contact="Piers Daniell @pdaniell-nv" type="instance" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_504_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_504&quot;"               name="VK_NV_EXTENSION_504_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_505" number="505" author="EXT" contact="Jamie Madill @jmadill" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_505_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_505&quot;"              name="VK_EXT_EXTENSION_505_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_low_latency2" number="506" author="NV" contact="Charles Hansen @cshansen" type="device" supported="vulkan">
+            <require>
+                <enum value="1"                                             name="VK_NV_LOW_LATENCY_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_low_latency2&quot;"                name="VK_NV_LOW_LATENCY_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV"/>
+                <enum offset="7" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV"/>
+                <enum offset="8" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV"/>
+                <type name="VkLatencySleepModeInfoNV"/>
+                <type name="VkLatencySleepInfoNV"/>
+                <type name="VkSetLatencyMarkerInfoNV"/>
+                <type name="VkGetLatencyMarkerInfoNV"/>
+                <type name="VkLatencyTimingsFrameReportNV"/>
+                <type name="VkLatencyMarkerNV"/>
+                <type name="VkLatencySubmissionPresentIdNV"/>
+                <type name="VkSwapchainLatencyCreateInfoNV"/>
+                <type name="VkOutOfBandQueueTypeInfoNV"/>
+                <type name="VkOutOfBandQueueTypeNV"/>
+                <type name="VkLatencySurfaceCapabilitiesNV"/>
+                <command name="vkSetLatencySleepModeNV"/>
+                <command name="vkLatencySleepNV"/>
+                <command name="vkSetLatencyMarkerNV"/>
+                <command name="vkGetLatencyTimingsNV"/>
+                <command name="vkQueueNotifyOutOfBandNV"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_cooperative_matrix" number="507" type="device" depends="VK_KHR_get_physical_device_properties2" author="KHR" contact="Kevin Petit @kpet" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="2"                                              name="VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_cooperative_matrix&quot;"          name="VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR"/>
+                <type name="VkCooperativeMatrixPropertiesKHR"/>
+                <type name="VkScopeKHR"/>
+                <type name="VkComponentTypeKHR"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixFeaturesKHR"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixPropertiesKHR"/>
+                <command name="vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_508" number="508" author="EXT" contact="Kevin Petit @kpet" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_508_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_508&quot;"              name="VK_EXT_EXTENSION_508_EXTENSION_NAME"/>
+                <enum bitpos="10" extends="VkQueueFlagBits"                 name="VK_QUEUE_RESERVED_10_BIT_EXT" />
+                <enum bitpos="42" extends="VkPipelineStageFlagBits2"        name="VK_PIPELINE_STAGE_2_RESERVED_42_BIT_EXT" />
+                <enum bitpos="47" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_47_BIT_EXT" />
+                <enum bitpos="48" extends="VkAccessFlagBits2"               name="VK_ACCESS_2_RESERVED_48_BIT_EXT" />
+                <enum bitpos="48" extends="VkFormatFeatureFlagBits2"        name="VK_FORMAT_FEATURE_2_RESERVED_48_BIT_EXT" />
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_509" number="509" author="EXT" contact="Kevin Petit @kpet" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_509_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_509&quot;"              name="VK_EXT_EXTENSION_509_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_MESA_extension_510" number="510" author="MESA" contact="Dave Airlie @airlied" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_MESA_EXTENSION_510_SPEC_VERSION"/>
+                <enum value="&quot;VK_MESA_extension_510&quot;"             name="VK_MESA_EXTENSION_510_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_multiview_per_view_render_areas" number="511" type="device" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                                   name="VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_multiview_per_view_render_areas&quot;" name="VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM"/>
+                <type name="VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM"/>
+               <type name="VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_512" number="512" author="EXT" contact="Jean-Noe Morissette @MagicPoncho" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_512_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_512&quot;"              name="VK_EXT_EXTENSION_512_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_513" number="513" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_513_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_513&quot;"              name="VK_KHR_EXTENSION_513_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_514" number="514" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_514_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_514&quot;"              name="VK_KHR_EXTENSION_514_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_515" number="515" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_515_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_515&quot;"              name="VK_KHR_EXTENSION_515_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_516" number="516" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_516_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_516&quot;"              name="VK_KHR_EXTENSION_516_EXTENSION_NAME"/>
+                <enum bitpos="20" extends="VkImageCreateFlagBits"           name="VK_IMAGE_CREATE_RESERVED_20_BIT_KHR"/>
+                <enum bitpos="6" extends="VkBufferCreateFlagBits"           name="VK_BUFFER_CREATE_RESERVED_6_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_517" number="517" author="EXT" contact="Daniel Story" supported="disabled">
+            <require>
+                <enum value="0"                                                name="VK_EXT_EXTENSION_517_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_517&quot;"                 name="VK_EXT_EXTENSION_517_EXTENSION_NAME"/>
+                <enum bitpos="6" extends="VkDescriptorSetLayoutCreateFlagBits" name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_RESERVED_6_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_MESA_extension_518" number="518" author="MESA" contact="Dave Airlie @airlied" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_MESA_EXTENSION_518_SPEC_VERSION"/>
+                <enum value="&quot;VK_MESA_extension_518&quot;"             name="VK_MESA_EXTENSION_518_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_image_processing2" number="519" type="device" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan" depends="VK_QCOM_image_processing">
+            <require>
+                <enum value="1"                                                   name="VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_image_processing2&quot;"               name="VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM"/>
+                <enum offset="2" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM"/>
+                <type name="VkPhysicalDeviceImageProcessing2FeaturesQCOM"/>
+                <type name="VkPhysicalDeviceImageProcessing2PropertiesQCOM"/>
+                <type name="VkSamplerBlockMatchWindowCreateInfoQCOM"/>
+                <type name="VkBlockMatchWindowCompareModeQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_filter_cubic_weights" number="520" type="device" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan" depends="VK_EXT_filter_cubic">
+            <require>
+                <enum value="1"                                             name="VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_filter_cubic_weights&quot;"      name="VK_QCOM_FILTER_CUBIC_WEIGHTS_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM"/>
+                <type name="VkPhysicalDeviceCubicWeightsFeaturesQCOM"/>
+                <type name="VkSamplerCubicWeightsCreateInfoQCOM"/>
+                <type name="VkBlitImageCubicWeightsInfoQCOM"/>
+                <type name="VkCubicFilterWeightsQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_ycbcr_degamma" number="521" type="device" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                                   name="VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_ycbcr_degamma&quot;"                   name="VK_QCOM_YCBCR_DEGAMMA_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM"/>
+                <enum offset="1" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM"/>
+                <type name="VkPhysicalDeviceYcbcrDegammaFeaturesQCOM"/>
+                <type name="VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_filter_cubic_clamp" number="522" type="device" author="QCOM" depends="(VK_EXT_filter_cubic)+(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="1"                                                   name="VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_filter_cubic_clamp&quot;"              name="VK_QCOM_FILTER_CUBIC_CLAMP_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                        name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM"/>
+                <enum offset="0" extends="VkSamplerReductionMode"                 name="VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM"/>
+                <type name="VkPhysicalDeviceCubicClampFeaturesQCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_523" number="523" author="EXT" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                                name="VK_EXT_EXTENSION_523_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_523&quot;"                 name="VK_EXT_EXTENSION_523_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_524" number="524" author="EXT" contact="Tony Zlatinski @tzlatinski" supported="disabled">
+            <require>
+                <enum value="0"                                                name="VK_EXT_EXTENSION_524_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_524&quot;"                 name="VK_EXT_EXTENSION_524_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_attachment_feedback_loop_dynamic_state" number="525" type="device" author="EXT" depends="VK_KHR_get_physical_device_properties2+VK_EXT_attachment_feedback_loop_layout" contact="Mike Blumenkrantz @zmike" supported="vulkan" ratified="vulkan">
+            <require>
+                <enum value="1"                                                                name="VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_attachment_feedback_loop_dynamic_state&quot;" name="VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT"/>
+                <enum offset="0" extends="VkDynamicState"                                      name="VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT"/>
+                <type name="VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT"/>
+                <command name="vkCmdSetAttachmentFeedbackLoopEnableEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_526" number="526" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_526_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_526&quot;"          name="VK_EXT_EXTENSION_526_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_527" number="527" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_527_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_527&quot;"          name="VK_EXT_EXTENSION_527_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_528" number="528" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_528_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_528&quot;"          name="VK_EXT_EXTENSION_528_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_529" number="529" author="KHR" contact="Graeme Leese @gnl21" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_529_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_529&quot;"          name="VK_KHR_EXTENSION_529_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QNX_external_memory_screen_buffer" number="530" type="device" author="QNX" depends="((VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation),VK_VERSION_1_1)+VK_EXT_queue_family_foreign" platform="screen" contact="Mike Gorchak @mgorchak-blackberry, Aaron Ruby @aruby-blackberry" supported="vulkan,vulkansc">
+            <require>
+                <enum value="1"                                             name="VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION"/>
+                <enum value="&quot;VK_QNX_external_memory_screen_buffer&quot;" name="VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_EXTENSION_NAME"/>
+                <enum bitpos="14" extends="VkExternalMemoryHandleTypeFlagBits" name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX"/>
+                <type name="VkScreenBufferPropertiesQNX"/>
+                <type name="VkScreenBufferFormatPropertiesQNX"/>
+                <type name="VkImportScreenBufferInfoQNX"/>
+                <type name="VkExternalFormatQNX"/>
+                <type name="VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX"/>
+                <command name="vkGetScreenBufferPropertiesQNX"/>
+            </require>
+        </extension>
+        <extension name="VK_MSFT_layered_driver" number="531" type="device" depends="VK_KHR_get_physical_device_properties2" author="MSFT" contact="Jesse Natalie @jenatali" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_MSFT_LAYERED_DRIVER_SPEC_VERSION"/>
+                <enum value="&quot;VK_MSFT_layered_driver&quot;"        name="VK_MSFT_LAYERED_DRIVER_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT"/>
+                <type name="VkLayeredDriverUnderlyingApiMSFT"/>
+                <type name="VkPhysicalDeviceLayeredDriverPropertiesMSFT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_532" number="532" author="KHR" contact="Tobias Hector @tobias" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_532_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_532&quot;"         name="VK_KHR_EXTENSION_532_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_533" number="533" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_533_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_533&quot;"          name="VK_EXT_EXTENSION_533_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_534" number="534" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_534_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_534&quot;"          name="VK_KHR_EXTENSION_534_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_535" number="535" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_535_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_535&quot;"          name="VK_KHR_EXTENSION_535_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_536" number="536" type="device" author="QCOM" contact="Jeff Leger @jackohound" supported="disabled">
+            <require>
+                <enum value="0"                                                   name="VK_QCOM_EXTENSION_536_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_536&quot;"                   name="VK_QCOM_EXTENSION_536_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_537" number="537" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_537_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_537&quot;"          name="VK_EXT_EXTENSION_537_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_538" number="538" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_538_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_538&quot;"          name="VK_EXT_EXTENSION_538_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_539" number="539" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_539_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_539&quot;"          name="VK_EXT_EXTENSION_539_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_540" number="540" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_540_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_540&quot;"          name="VK_EXT_EXTENSION_540_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_541" number="541" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_541_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_541&quot;"          name="VK_EXT_EXTENSION_541_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_542" number="542" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_542_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_542&quot;"          name="VK_EXT_EXTENSION_542_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_543" number="543" author="EXT" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_543_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_543&quot;"          name="VK_EXT_EXTENSION_543_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_544" number="544" author="KHR" contact="Daniel Rakos @aqnuep" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_544_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_544&quot;"          name="VK_KHR_EXTENSION_544_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_545" number="545" author="KHR" contact="Kevin Petit @kpet" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_545_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_545&quot;"          name="VK_KHR_EXTENSION_545_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_546" number="546" author="KHR" contact="Jon Leech @oddhack" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_KHR_EXTENSION_546_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_546&quot;"          name="VK_KHR_EXTENSION_546_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_descriptor_pool_overallocation" number="547" type="device" author="NV" depends="VK_VERSION_1_1" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                                 name="VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_descriptor_pool_overallocation&quot;"  name="VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV"/>
+                <enum bitpos="3" extends="VkDescriptorPoolCreateFlagBits"       name="VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV"/>
+                <enum bitpos="4" extends="VkDescriptorPoolCreateFlagBits"       name="VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV"/>
+                <type name="VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_548" number="548" type="device" author="QCOM" contact="Patrick Boyle @pboyleQCOM" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_QCOM_EXTENSION_548_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_548&quot;"         name="VK_QCOM_EXTENSION_548_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_549" number="549" author="NV" contact="Piers Daniell @pdaniell-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_549_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_549&quot;"           name="VK_NV_EXTENSION_549_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_550" number="550" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_550_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_550&quot;"           name="VK_NV_EXTENSION_550_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_551" number="551" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_551_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_551&quot;"           name="VK_NV_EXTENSION_551_EXTENSION_NAME"/>
+            </require>
+        </extension>
+    </extensions>
+    <formats>
+        <format name="VK_FORMAT_R4G4_UNORM_PACK8" class="8-bit" blockSize="1" texelsPerBlock="1" packed="8">
+            <component name="R" bits="4" numericFormat="UNORM"/>
+            <component name="G" bits="4" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R4G4B4A4_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="R" bits="4" numericFormat="UNORM"/>
+            <component name="G" bits="4" numericFormat="UNORM"/>
+            <component name="B" bits="4" numericFormat="UNORM"/>
+            <component name="A" bits="4" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B4G4R4A4_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="B" bits="4" numericFormat="UNORM"/>
+            <component name="G" bits="4" numericFormat="UNORM"/>
+            <component name="R" bits="4" numericFormat="UNORM"/>
+            <component name="A" bits="4" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R5G6B5_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="R" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="6" numericFormat="UNORM"/>
+            <component name="B" bits="5" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B5G6R5_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="B" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="6" numericFormat="UNORM"/>
+            <component name="R" bits="5" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R5G5B5A1_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="R" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="5" numericFormat="UNORM"/>
+            <component name="B" bits="5" numericFormat="UNORM"/>
+            <component name="A" bits="1" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B5G5R5A1_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="B" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="5" numericFormat="UNORM"/>
+            <component name="R" bits="5" numericFormat="UNORM"/>
+            <component name="A" bits="1" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A1R5G5B5_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="A" bits="1" numericFormat="UNORM"/>
+            <component name="R" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="5" numericFormat="UNORM"/>
+            <component name="B" bits="5" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="A" bits="1" numericFormat="UNORM"/>
+            <component name="B" bits="5" numericFormat="UNORM"/>
+            <component name="G" bits="5" numericFormat="UNORM"/>
+            <component name="R" bits="5" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A8_UNORM_KHR" class="8-bit alpha" blockSize="1" texelsPerBlock="1">
+            <component name="A" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R8_UNORM" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <spirvimageformat name="R8"/>
+        </format>
+        <format name="VK_FORMAT_R8_SNORM" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SNORM"/>
+            <spirvimageformat name="R8Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R8_USCALED" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8_SSCALED" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8_UINT" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UINT"/>
+            <spirvimageformat name="R8ui"/>
+        </format>
+        <format name="VK_FORMAT_R8_SINT" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SINT"/>
+            <spirvimageformat name="R8i"/>
+        </format>
+        <format name="VK_FORMAT_R8_SRGB" class="8-bit" blockSize="1" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_UNORM" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <spirvimageformat name="Rg8"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_SNORM" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <spirvimageformat name="Rg8Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_USCALED" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_SSCALED" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_UINT" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <spirvimageformat name="Rg8ui"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_SINT" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <spirvimageformat name="Rg8i"/>
+        </format>
+        <format name="VK_FORMAT_R8G8_SRGB" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_UNORM" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="B" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_SNORM" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <component name="B" bits="8" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_USCALED" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+            <component name="B" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_SSCALED" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+            <component name="B" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_UINT" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <component name="B" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_SINT" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <component name="B" bits="8" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8_SRGB" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+            <component name="B" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_UNORM" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="R" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_SNORM" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <component name="R" bits="8" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_USCALED" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+            <component name="R" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_SSCALED" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_UINT" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <component name="R" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_SINT" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <component name="R" bits="8" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8_SRGB" class="24-bit" blockSize="3" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+            <component name="R" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_UNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="A" bits="8" numericFormat="UNORM"/>
+            <spirvimageformat name="Rgba8"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_SNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <component name="B" bits="8" numericFormat="SNORM"/>
+            <component name="A" bits="8" numericFormat="SNORM"/>
+            <spirvimageformat name="Rgba8Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_USCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+            <component name="B" bits="8" numericFormat="USCALED"/>
+            <component name="A" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_SSCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+            <component name="B" bits="8" numericFormat="SSCALED"/>
+            <component name="A" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_UINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <component name="B" bits="8" numericFormat="UINT"/>
+            <component name="A" bits="8" numericFormat="UINT"/>
+            <spirvimageformat name="Rgba8ui"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_SINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <component name="B" bits="8" numericFormat="SINT"/>
+            <component name="A" bits="8" numericFormat="SINT"/>
+            <spirvimageformat name="Rgba8i"/>
+        </format>
+        <format name="VK_FORMAT_R8G8B8A8_SRGB" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+            <component name="B" bits="8" numericFormat="SRGB"/>
+            <component name="A" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_UNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <component name="A" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_SNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <component name="R" bits="8" numericFormat="SNORM"/>
+            <component name="A" bits="8" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_USCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+            <component name="R" bits="8" numericFormat="USCALED"/>
+            <component name="A" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_SSCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+            <component name="A" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_UINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <component name="R" bits="8" numericFormat="UINT"/>
+            <component name="A" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_SINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <component name="R" bits="8" numericFormat="SINT"/>
+            <component name="A" bits="8" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8A8_SRGB" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="B" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+            <component name="R" bits="8" numericFormat="SRGB"/>
+            <component name="A" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_UNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="UNORM"/>
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="R" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_SNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="SNORM"/>
+            <component name="B" bits="8" numericFormat="SNORM"/>
+            <component name="G" bits="8" numericFormat="SNORM"/>
+            <component name="R" bits="8" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_USCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="USCALED"/>
+            <component name="B" bits="8" numericFormat="USCALED"/>
+            <component name="G" bits="8" numericFormat="USCALED"/>
+            <component name="R" bits="8" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_SSCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="SSCALED"/>
+            <component name="B" bits="8" numericFormat="SSCALED"/>
+            <component name="G" bits="8" numericFormat="SSCALED"/>
+            <component name="R" bits="8" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_UINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="UINT"/>
+            <component name="B" bits="8" numericFormat="UINT"/>
+            <component name="G" bits="8" numericFormat="UINT"/>
+            <component name="R" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_SINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="SINT"/>
+            <component name="B" bits="8" numericFormat="SINT"/>
+            <component name="G" bits="8" numericFormat="SINT"/>
+            <component name="R" bits="8" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_A8B8G8R8_SRGB_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="8" numericFormat="SRGB"/>
+            <component name="B" bits="8" numericFormat="SRGB"/>
+            <component name="G" bits="8" numericFormat="SRGB"/>
+            <component name="R" bits="8" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_UNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="UNORM"/>
+            <component name="R" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="B" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_SNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SNORM"/>
+            <component name="R" bits="10" numericFormat="SNORM"/>
+            <component name="G" bits="10" numericFormat="SNORM"/>
+            <component name="B" bits="10" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_USCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="USCALED"/>
+            <component name="R" bits="10" numericFormat="USCALED"/>
+            <component name="G" bits="10" numericFormat="USCALED"/>
+            <component name="B" bits="10" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_SSCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SSCALED"/>
+            <component name="R" bits="10" numericFormat="SSCALED"/>
+            <component name="G" bits="10" numericFormat="SSCALED"/>
+            <component name="B" bits="10" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_UINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="UINT"/>
+            <component name="R" bits="10" numericFormat="UINT"/>
+            <component name="G" bits="10" numericFormat="UINT"/>
+            <component name="B" bits="10" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_A2R10G10B10_SINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SINT"/>
+            <component name="R" bits="10" numericFormat="SINT"/>
+            <component name="G" bits="10" numericFormat="SINT"/>
+            <component name="B" bits="10" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_UNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="UNORM"/>
+            <component name="B" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="R" bits="10" numericFormat="UNORM"/>
+            <spirvimageformat name="Rgb10A2"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_SNORM_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SNORM"/>
+            <component name="B" bits="10" numericFormat="SNORM"/>
+            <component name="G" bits="10" numericFormat="SNORM"/>
+            <component name="R" bits="10" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_USCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="USCALED"/>
+            <component name="B" bits="10" numericFormat="USCALED"/>
+            <component name="G" bits="10" numericFormat="USCALED"/>
+            <component name="R" bits="10" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_SSCALED_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SSCALED"/>
+            <component name="B" bits="10" numericFormat="SSCALED"/>
+            <component name="G" bits="10" numericFormat="SSCALED"/>
+            <component name="R" bits="10" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_UINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="UINT"/>
+            <component name="B" bits="10" numericFormat="UINT"/>
+            <component name="G" bits="10" numericFormat="UINT"/>
+            <component name="R" bits="10" numericFormat="UINT"/>
+            <spirvimageformat name="Rgb10a2ui"/>
+        </format>
+        <format name="VK_FORMAT_A2B10G10R10_SINT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="A" bits="2" numericFormat="SINT"/>
+            <component name="B" bits="10" numericFormat="SINT"/>
+            <component name="G" bits="10" numericFormat="SINT"/>
+            <component name="R" bits="10" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R16_UNORM" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UNORM"/>
+            <spirvimageformat name="R16"/>
+        </format>
+        <format name="VK_FORMAT_R16_SNORM" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SNORM"/>
+            <spirvimageformat name="R16Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R16_USCALED" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16_SSCALED" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16_UINT" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UINT"/>
+            <spirvimageformat name="R16ui"/>
+        </format>
+        <format name="VK_FORMAT_R16_SINT" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SINT"/>
+            <spirvimageformat name="R16i"/>
+        </format>
+        <format name="VK_FORMAT_R16_SFLOAT" class="16-bit" blockSize="2" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SFLOAT"/>
+            <spirvimageformat name="R16f"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_UNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <spirvimageformat name="Rg16"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_SNORM" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SNORM"/>
+            <component name="G" bits="16" numericFormat="SNORM"/>
+            <spirvimageformat name="Rg16Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_USCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="USCALED"/>
+            <component name="G" bits="16" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_SSCALED" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SSCALED"/>
+            <component name="G" bits="16" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_UINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UINT"/>
+            <component name="G" bits="16" numericFormat="UINT"/>
+            <spirvimageformat name="Rg16ui"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_SINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SINT"/>
+            <component name="G" bits="16" numericFormat="SINT"/>
+            <spirvimageformat name="Rg16i"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_SFLOAT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SFLOAT"/>
+            <component name="G" bits="16" numericFormat="SFLOAT"/>
+            <spirvimageformat name="Rg16f"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_UNORM" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <component name="B" bits="16" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_SNORM" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SNORM"/>
+            <component name="G" bits="16" numericFormat="SNORM"/>
+            <component name="B" bits="16" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_USCALED" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="USCALED"/>
+            <component name="G" bits="16" numericFormat="USCALED"/>
+            <component name="B" bits="16" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_SSCALED" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SSCALED"/>
+            <component name="G" bits="16" numericFormat="SSCALED"/>
+            <component name="B" bits="16" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_UINT" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UINT"/>
+            <component name="G" bits="16" numericFormat="UINT"/>
+            <component name="B" bits="16" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_SINT" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SINT"/>
+            <component name="G" bits="16" numericFormat="SINT"/>
+            <component name="B" bits="16" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16_SFLOAT" class="48-bit" blockSize="6" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SFLOAT"/>
+            <component name="G" bits="16" numericFormat="SFLOAT"/>
+            <component name="B" bits="16" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_UNORM" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <component name="B" bits="16" numericFormat="UNORM"/>
+            <component name="A" bits="16" numericFormat="UNORM"/>
+            <spirvimageformat name="Rgba16"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_SNORM" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SNORM"/>
+            <component name="G" bits="16" numericFormat="SNORM"/>
+            <component name="B" bits="16" numericFormat="SNORM"/>
+            <component name="A" bits="16" numericFormat="SNORM"/>
+            <spirvimageformat name="Rgba16Snorm"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_USCALED" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="USCALED"/>
+            <component name="G" bits="16" numericFormat="USCALED"/>
+            <component name="B" bits="16" numericFormat="USCALED"/>
+            <component name="A" bits="16" numericFormat="USCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_SSCALED" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SSCALED"/>
+            <component name="G" bits="16" numericFormat="SSCALED"/>
+            <component name="B" bits="16" numericFormat="SSCALED"/>
+            <component name="A" bits="16" numericFormat="SSCALED"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_UINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="UINT"/>
+            <component name="G" bits="16" numericFormat="UINT"/>
+            <component name="B" bits="16" numericFormat="UINT"/>
+            <component name="A" bits="16" numericFormat="UINT"/>
+            <spirvimageformat name="Rgba16ui"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_SINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SINT"/>
+            <component name="G" bits="16" numericFormat="SINT"/>
+            <component name="B" bits="16" numericFormat="SINT"/>
+            <component name="A" bits="16" numericFormat="SINT"/>
+            <spirvimageformat name="Rgba16i"/>
+        </format>
+        <format name="VK_FORMAT_R16G16B16A16_SFLOAT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SFLOAT"/>
+            <component name="G" bits="16" numericFormat="SFLOAT"/>
+            <component name="B" bits="16" numericFormat="SFLOAT"/>
+            <component name="A" bits="16" numericFormat="SFLOAT"/>
+            <spirvimageformat name="Rgba16f"/>
+        </format>
+        <format name="VK_FORMAT_R32_UINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="UINT"/>
+            <spirvimageformat name="R32ui"/>
+        </format>
+        <format name="VK_FORMAT_R32_SINT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SINT"/>
+            <spirvimageformat name="R32i"/>
+        </format>
+        <format name="VK_FORMAT_R32_SFLOAT" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SFLOAT"/>
+            <spirvimageformat name="R32f"/>
+        </format>
+        <format name="VK_FORMAT_R32G32_UINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="UINT"/>
+            <component name="G" bits="32" numericFormat="UINT"/>
+            <spirvimageformat name="Rg32ui"/>
+        </format>
+        <format name="VK_FORMAT_R32G32_SINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SINT"/>
+            <component name="G" bits="32" numericFormat="SINT"/>
+            <spirvimageformat name="Rg32i"/>
+        </format>
+        <format name="VK_FORMAT_R32G32_SFLOAT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SFLOAT"/>
+            <component name="G" bits="32" numericFormat="SFLOAT"/>
+            <spirvimageformat name="Rg32f"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32_UINT" class="96-bit" blockSize="12" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="UINT"/>
+            <component name="G" bits="32" numericFormat="UINT"/>
+            <component name="B" bits="32" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32_SINT" class="96-bit" blockSize="12" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SINT"/>
+            <component name="G" bits="32" numericFormat="SINT"/>
+            <component name="B" bits="32" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32_SFLOAT" class="96-bit" blockSize="12" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SFLOAT"/>
+            <component name="G" bits="32" numericFormat="SFLOAT"/>
+            <component name="B" bits="32" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32A32_UINT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="UINT"/>
+            <component name="G" bits="32" numericFormat="UINT"/>
+            <component name="B" bits="32" numericFormat="UINT"/>
+            <component name="A" bits="32" numericFormat="UINT"/>
+            <spirvimageformat name="Rgba32ui"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32A32_SINT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SINT"/>
+            <component name="G" bits="32" numericFormat="SINT"/>
+            <component name="B" bits="32" numericFormat="SINT"/>
+            <component name="A" bits="32" numericFormat="SINT"/>
+            <spirvimageformat name="Rgba32i"/>
+        </format>
+        <format name="VK_FORMAT_R32G32B32A32_SFLOAT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="32" numericFormat="SFLOAT"/>
+            <component name="G" bits="32" numericFormat="SFLOAT"/>
+            <component name="B" bits="32" numericFormat="SFLOAT"/>
+            <component name="A" bits="32" numericFormat="SFLOAT"/>
+            <spirvimageformat name="Rgba32f"/>
+        </format>
+        <format name="VK_FORMAT_R64_UINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="UINT"/>
+            <spirvimageformat name="R64ui"/>
+        </format>
+        <format name="VK_FORMAT_R64_SINT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SINT"/>
+            <spirvimageformat name="R64i"/>
+        </format>
+        <format name="VK_FORMAT_R64_SFLOAT" class="64-bit" blockSize="8" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64_UINT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="UINT"/>
+            <component name="G" bits="64" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64_SINT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SINT"/>
+            <component name="G" bits="64" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64_SFLOAT" class="128-bit" blockSize="16" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SFLOAT"/>
+            <component name="G" bits="64" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64_UINT" class="192-bit" blockSize="24" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="UINT"/>
+            <component name="G" bits="64" numericFormat="UINT"/>
+            <component name="B" bits="64" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64_SINT" class="192-bit" blockSize="24" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SINT"/>
+            <component name="G" bits="64" numericFormat="SINT"/>
+            <component name="B" bits="64" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64_SFLOAT" class="192-bit" blockSize="24" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SFLOAT"/>
+            <component name="G" bits="64" numericFormat="SFLOAT"/>
+            <component name="B" bits="64" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64A64_UINT" class="256-bit" blockSize="32" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="UINT"/>
+            <component name="G" bits="64" numericFormat="UINT"/>
+            <component name="B" bits="64" numericFormat="UINT"/>
+            <component name="A" bits="64" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64A64_SINT" class="256-bit" blockSize="32" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SINT"/>
+            <component name="G" bits="64" numericFormat="SINT"/>
+            <component name="B" bits="64" numericFormat="SINT"/>
+            <component name="A" bits="64" numericFormat="SINT"/>
+        </format>
+        <format name="VK_FORMAT_R64G64B64A64_SFLOAT" class="256-bit" blockSize="32" texelsPerBlock="1">
+            <component name="R" bits="64" numericFormat="SFLOAT"/>
+            <component name="G" bits="64" numericFormat="SFLOAT"/>
+            <component name="B" bits="64" numericFormat="SFLOAT"/>
+            <component name="A" bits="64" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_B10G11R11_UFLOAT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="B" bits="10" numericFormat="UFLOAT"/>
+            <component name="G" bits="11" numericFormat="UFLOAT"/>
+            <component name="R" bits="11" numericFormat="UFLOAT"/>
+            <spirvimageformat name="R11fG11fB10f"/>
+        </format>
+        <format name="VK_FORMAT_E5B9G9R9_UFLOAT_PACK32" class="32-bit" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="B" bits="9" numericFormat="UFLOAT"/>
+            <component name="G" bits="9" numericFormat="UFLOAT"/>
+            <component name="R" bits="9" numericFormat="UFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_D16_UNORM" class="D16" blockSize="2" texelsPerBlock="1">
+            <component name="D" bits="16" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_X8_D24_UNORM_PACK32" class="D24" blockSize="4" texelsPerBlock="1" packed="32">
+            <component name="D" bits="24" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_D32_SFLOAT" class="D32" blockSize="4" texelsPerBlock="1">
+            <component name="D" bits="32" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_S8_UINT" class="S8" blockSize="1" texelsPerBlock="1">
+            <component name="S" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_D16_UNORM_S8_UINT" class="D16S8" blockSize="3" texelsPerBlock="1">
+            <component name="D" bits="16" numericFormat="UNORM"/>
+            <component name="S" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_D24_UNORM_S8_UINT" class="D24S8" blockSize="4" texelsPerBlock="1">
+            <component name="D" bits="24" numericFormat="UNORM"/>
+            <component name="S" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_D32_SFLOAT_S8_UINT" class="D32S8" blockSize="5" texelsPerBlock="1">
+            <component name="D" bits="32" numericFormat="SFLOAT"/>
+            <component name="S" bits="8" numericFormat="UINT"/>
+        </format>
+        <format name="VK_FORMAT_BC1_RGB_UNORM_BLOCK" class="BC1_RGB" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC1_RGB_SRGB_BLOCK" class="BC1_RGB" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_BC1_RGBA_UNORM_BLOCK" class="BC1_RGBA" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC1_RGBA_SRGB_BLOCK" class="BC1_RGBA" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_BC2_UNORM_BLOCK" class="BC2" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC2_SRGB_BLOCK" class="BC2" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_BC3_UNORM_BLOCK" class="BC3" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC3_SRGB_BLOCK" class="BC3" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_BC4_UNORM_BLOCK" class="BC4" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC4_SNORM_BLOCK" class="BC4" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC5_UNORM_BLOCK" class="BC5" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC5_SNORM_BLOCK" class="BC5" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SNORM"/>
+            <component name="G" bits="compressed" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC6H_UFLOAT_BLOCK" class="BC6H" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="UFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="UFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_BC6H_SFLOAT_BLOCK" class="BC6H" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_BC7_UNORM_BLOCK" class="BC7" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_BC7_SRGB_BLOCK" class="BC7" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="BC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK" class="ETC2_RGB" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK" class="ETC2_RGB" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK" class="ETC2_RGBA" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK" class="ETC2_RGBA" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK" class="ETC2_EAC_RGBA" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK" class="ETC2_EAC_RGBA" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="ETC2">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_EAC_R11_UNORM_BLOCK" class="EAC_R" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="EAC">
+            <component name="R" bits="11" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_EAC_R11_SNORM_BLOCK" class="EAC_R" blockSize="8" texelsPerBlock="16" blockExtent="4,4,1" compressed="EAC">
+            <component name="R" bits="11" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_EAC_R11G11_UNORM_BLOCK" class="EAC_RG" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="EAC">
+            <component name="R" bits="11" numericFormat="UNORM"/>
+            <component name="G" bits="11" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_EAC_R11G11_SNORM_BLOCK" class="EAC_RG" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="EAC">
+            <component name="R" bits="11" numericFormat="SNORM"/>
+            <component name="G" bits="11" numericFormat="SNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_4x4_UNORM_BLOCK" class="ASTC_4x4" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_4x4_SRGB_BLOCK" class="ASTC_4x4" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x4_UNORM_BLOCK" class="ASTC_5x4" blockSize="16" texelsPerBlock="20" blockExtent="5,4,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x4_SRGB_BLOCK" class="ASTC_5x4" blockSize="16" texelsPerBlock="20" blockExtent="5,4,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x5_UNORM_BLOCK" class="ASTC_5x5" blockSize="16" texelsPerBlock="25" blockExtent="5,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x5_SRGB_BLOCK" class="ASTC_5x5" blockSize="16" texelsPerBlock="25" blockExtent="5,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x5_UNORM_BLOCK" class="ASTC_6x5" blockSize="16" texelsPerBlock="30" blockExtent="6,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x5_SRGB_BLOCK" class="ASTC_6x5" blockSize="16" texelsPerBlock="30" blockExtent="6,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x6_UNORM_BLOCK" class="ASTC_6x6" blockSize="16" texelsPerBlock="36" blockExtent="6,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x6_SRGB_BLOCK" class="ASTC_6x6" blockSize="16" texelsPerBlock="36" blockExtent="6,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x5_UNORM_BLOCK" class="ASTC_8x5" blockSize="16" texelsPerBlock="40" blockExtent="8,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x5_SRGB_BLOCK" class="ASTC_8x5" blockSize="16" texelsPerBlock="40" blockExtent="8,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x6_UNORM_BLOCK" class="ASTC_8x6" blockSize="16" texelsPerBlock="48" blockExtent="8,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x6_SRGB_BLOCK" class="ASTC_8x6" blockSize="16" texelsPerBlock="48" blockExtent="8,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x8_UNORM_BLOCK" class="ASTC_8x8" blockSize="16" texelsPerBlock="64" blockExtent="8,8,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x8_SRGB_BLOCK" class="ASTC_8x8" blockSize="16" texelsPerBlock="64" blockExtent="8,8,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x5_UNORM_BLOCK" class="ASTC_10x5" blockSize="16" texelsPerBlock="50" blockExtent="10,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x5_SRGB_BLOCK" class="ASTC_10x5" blockSize="16" texelsPerBlock="50" blockExtent="10,5,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x6_UNORM_BLOCK" class="ASTC_10x6" blockSize="16" texelsPerBlock="60" blockExtent="10,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x6_SRGB_BLOCK" class="ASTC_10x6" blockSize="16" texelsPerBlock="60" blockExtent="10,6,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x8_UNORM_BLOCK" class="ASTC_10x8" blockSize="16" texelsPerBlock="80" blockExtent="10,8,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x8_SRGB_BLOCK" class="ASTC_10x8" blockSize="16" texelsPerBlock="80" blockExtent="10,8,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x10_UNORM_BLOCK" class="ASTC_10x10" blockSize="16" texelsPerBlock="100" blockExtent="10,10,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x10_SRGB_BLOCK" class="ASTC_10x10" blockSize="16" texelsPerBlock="100" blockExtent="10,10,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x10_UNORM_BLOCK" class="ASTC_12x10" blockSize="16" texelsPerBlock="120" blockExtent="12,10,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x10_SRGB_BLOCK" class="ASTC_12x10" blockSize="16" texelsPerBlock="120" blockExtent="12,10,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x12_UNORM_BLOCK" class="ASTC_12x12" blockSize="16" texelsPerBlock="144" blockExtent="12,12,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x12_SRGB_BLOCK" class="ASTC_12x12" blockSize="16" texelsPerBlock="144" blockExtent="12,12,1" compressed="ASTC LDR">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_G8B8G8R8_422_UNORM" class="32-bit G8B8G8R8" blockSize="4" texelsPerBlock="1" blockExtent="2,1,1" chroma="422">
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="R" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B8G8R8G8_422_UNORM" class="32-bit B8G8R8G8" blockSize="4" texelsPerBlock="1" blockExtent="2,1,1" chroma="422">
+            <component name="B" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+            <component name="R" bits="8" numericFormat="UNORM"/>
+            <component name="G" bits="8" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM" class="8-bit 3-plane 420" blockSize="3" texelsPerBlock="1" chroma="420">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="2" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM" class="8-bit 2-plane 420" blockSize="3" texelsPerBlock="1" chroma="420">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R8G8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM" class="8-bit 3-plane 422" blockSize="3" texelsPerBlock="1" chroma="422">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="2" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM" class="8-bit 2-plane 422" blockSize="3" texelsPerBlock="1" chroma="422">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R8G8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM" class="8-bit 3-plane 444" blockSize="3" texelsPerBlock="1" chroma="444">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="2" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R10X6_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="R" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R10X6G10X6_UNORM_2PACK16" class="32-bit" blockSize="4" texelsPerBlock="1" packed="16">
+            <component name="R" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16" class="64-bit R10G10B10A10" blockSize="8" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="R" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="B" bits="10" numericFormat="UNORM"/>
+            <component name="A" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16" class="64-bit G10B10G10R10" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" packed="16" chroma="422">
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="B" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="R" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16" class="64-bit B10G10R10G10" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" packed="16" chroma="422">
+            <component name="B" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+            <component name="R" bits="10" numericFormat="UNORM"/>
+            <component name="G" bits="10" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16" class="10-bit 3-plane 420" blockSize="6" texelsPerBlock="1" packed="16" chroma="420">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16" class="10-bit 2-plane 420" blockSize="6" texelsPerBlock="1" packed="16" chroma="420">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R10X6G10X6_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16" class="10-bit 3-plane 422" blockSize="6" texelsPerBlock="1" packed="16" chroma="422">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16" class="10-bit 2-plane 422" blockSize="6" texelsPerBlock="1" packed="16" chroma="422">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R10X6G10X6_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16" class="10-bit 3-plane 444" blockSize="6" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_R12X4_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="R" bits="12" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16" class="32-bit" blockSize="4" texelsPerBlock="1" packed="16">
+            <component name="R" bits="12" numericFormat="UNORM"/>
+            <component name="G" bits="12" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16" class="64-bit R12G12B12A12" blockSize="8" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="R" bits="12" numericFormat="UNORM"/>
+            <component name="G" bits="12" numericFormat="UNORM"/>
+            <component name="B" bits="12" numericFormat="UNORM"/>
+            <component name="A" bits="12" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16" class="64-bit G12B12G12R12" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" packed="16" chroma="422">
+            <component name="G" bits="12" numericFormat="UNORM"/>
+            <component name="B" bits="12" numericFormat="UNORM"/>
+            <component name="G" bits="12" numericFormat="UNORM"/>
+            <component name="R" bits="12" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16" class="64-bit B12G12R12G12" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" packed="16" chroma="422">
+            <component name="B" bits="12" numericFormat="UNORM"/>
+            <component name="G" bits="12" numericFormat="UNORM"/>
+            <component name="R" bits="12" numericFormat="UNORM"/>
+            <component name="G" bits="12" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16" class="12-bit 3-plane 420" blockSize="6" texelsPerBlock="1" packed="16" chroma="420">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16" class="12-bit 2-plane 420" blockSize="6" texelsPerBlock="1" packed="16" chroma="420">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R12X4G12X4_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16" class="12-bit 3-plane 422" blockSize="6" texelsPerBlock="1" packed="16" chroma="422">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16" class="12-bit 2-plane 422" blockSize="6" texelsPerBlock="1" packed="16" chroma="422">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R12X4G12X4_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16" class="12-bit 3-plane 444" blockSize="6" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="2" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G16B16G16R16_422_UNORM" class="64-bit G16B16G16R16" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" chroma="422">
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <component name="B" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <component name="R" bits="16" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_B16G16R16G16_422_UNORM" class="64-bit B16G16R16G16" blockSize="8" texelsPerBlock="1" blockExtent="2,1,1" chroma="422">
+            <component name="B" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+            <component name="R" bits="16" numericFormat="UNORM"/>
+            <component name="G" bits="16" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM" class="16-bit 3-plane 420" blockSize="6" texelsPerBlock="1" chroma="420">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="2" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM" class="16-bit 2-plane 420" blockSize="6" texelsPerBlock="1" chroma="420">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="2" compatible="VK_FORMAT_R16G16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM" class="16-bit 3-plane 422" blockSize="6" texelsPerBlock="1" chroma="422">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="2" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM" class="16-bit 2-plane 422" blockSize="6" texelsPerBlock="1" chroma="422">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="2" heightDivisor="1" compatible="VK_FORMAT_R16G16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM" class="16-bit 3-plane 444" blockSize="6" texelsPerBlock="1" chroma="444">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="2"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="2" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG" class="PVRTC1_2BPP" blockSize="8" texelsPerBlock="1" blockExtent="8,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG" class="PVRTC1_4BPP" blockSize="8" texelsPerBlock="1" blockExtent="4,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG" class="PVRTC2_2BPP" blockSize="8" texelsPerBlock="1" blockExtent="8,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG" class="PVRTC2_4BPP" blockSize="8" texelsPerBlock="1" blockExtent="4,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="UNORM"/>
+            <component name="G" bits="compressed" numericFormat="UNORM"/>
+            <component name="B" bits="compressed" numericFormat="UNORM"/>
+            <component name="A" bits="compressed" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG" class="PVRTC1_2BPP" blockSize="8" texelsPerBlock="1" blockExtent="8,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG" class="PVRTC1_4BPP" blockSize="8" texelsPerBlock="1" blockExtent="4,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG" class="PVRTC2_2BPP" blockSize="8" texelsPerBlock="1" blockExtent="8,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG" class="PVRTC2_4BPP" blockSize="8" texelsPerBlock="1" blockExtent="4,4,1" compressed="PVRTC">
+            <component name="R" bits="compressed" numericFormat="SRGB"/>
+            <component name="G" bits="compressed" numericFormat="SRGB"/>
+            <component name="B" bits="compressed" numericFormat="SRGB"/>
+            <component name="A" bits="compressed" numericFormat="SRGB"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK" class="ASTC_4x4" blockSize="16" texelsPerBlock="16" blockExtent="4,4,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK" class="ASTC_5x4" blockSize="16" texelsPerBlock="20" blockExtent="5,4,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK" class="ASTC_5x5" blockSize="16" texelsPerBlock="25" blockExtent="5,5,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK" class="ASTC_6x5" blockSize="16" texelsPerBlock="30" blockExtent="6,5,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK" class="ASTC_6x6" blockSize="16" texelsPerBlock="36" blockExtent="6,6,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK" class="ASTC_8x5" blockSize="16" texelsPerBlock="40" blockExtent="8,5,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK" class="ASTC_8x6" blockSize="16" texelsPerBlock="48" blockExtent="8,6,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK" class="ASTC_8x8" blockSize="16" texelsPerBlock="64" blockExtent="8,8,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK" class="ASTC_10x5" blockSize="16" texelsPerBlock="50" blockExtent="10,5,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK" class="ASTC_10x6" blockSize="16" texelsPerBlock="60" blockExtent="10,6,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK" class="ASTC_10x8" blockSize="16" texelsPerBlock="80" blockExtent="10,8,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK" class="ASTC_10x10" blockSize="16" texelsPerBlock="100" blockExtent="10,10,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK" class="ASTC_12x10" blockSize="16" texelsPerBlock="120" blockExtent="12,10,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK" class="ASTC_12x12" blockSize="16" texelsPerBlock="144" blockExtent="12,12,1" compressed="ASTC HDR">
+            <component name="R" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="G" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="B" bits="compressed" numericFormat="SFLOAT"/>
+            <component name="A" bits="compressed" numericFormat="SFLOAT"/>
+        </format>
+        <format name="VK_FORMAT_G8_B8R8_2PLANE_444_UNORM" class="8-bit 2-plane 444" blockSize="3" texelsPerBlock="1" chroma="444">
+            <component name="G" bits="8" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="8" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8_UNORM"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R8G8_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16" class="10-bit 2-plane 444" blockSize="6" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="G" bits="10" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="10" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R10X6G10X6_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16" class="12-bit 2-plane 444" blockSize="6" texelsPerBlock="1" packed="16" chroma="444">
+            <component name="G" bits="12" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="12" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4_UNORM_PACK16"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R12X4G12X4_UNORM_2PACK16"/>
+        </format>
+        <format name="VK_FORMAT_G16_B16R16_2PLANE_444_UNORM" class="16-bit 2-plane 444" blockSize="6" texelsPerBlock="1" chroma="444">
+            <component name="G" bits="16" numericFormat="UNORM" planeIndex="0"/>
+            <component name="B" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <component name="R" bits="16" numericFormat="UNORM" planeIndex="1"/>
+            <plane index="0" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16_UNORM"/>
+            <plane index="1" widthDivisor="1" heightDivisor="1" compatible="VK_FORMAT_R16G16_UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A4R4G4B4_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="A" bits="4" numericFormat="UNORM"/>
+            <component name="R" bits="4" numericFormat="UNORM"/>
+            <component name="G" bits="4" numericFormat="UNORM"/>
+            <component name="B" bits="4" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_A4B4G4R4_UNORM_PACK16" class="16-bit" blockSize="2" texelsPerBlock="1" packed="16">
+            <component name="A" bits="4" numericFormat="UNORM"/>
+            <component name="B" bits="4" numericFormat="UNORM"/>
+            <component name="G" bits="4" numericFormat="UNORM"/>
+            <component name="R" bits="4" numericFormat="UNORM"/>
+        </format>
+        <format name="VK_FORMAT_R16G16_S10_5_NV" class="32-bit" blockSize="4" texelsPerBlock="1">
+            <component name="R" bits="16" numericFormat="SINT"/>
+            <component name="G" bits="16" numericFormat="SINT"/>
+        </format>
+    </formats>
+    <spirvextensions comment="SPIR-V Extensions allowed in Vulkan and what is required to use it">
+        <spirvextension name="SPV_KHR_variable_pointers">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_variable_pointers"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_explicit_vertex_parameter">
+            <enable extension="VK_AMD_shader_explicit_vertex_parameter"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_gcn_shader">
+            <enable extension="VK_AMD_gcn_shader"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_gpu_shader_half_float">
+            <enable extension="VK_AMD_gpu_shader_half_float"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_gpu_shader_int16">
+            <enable extension="VK_AMD_gpu_shader_int16"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_ballot">
+            <enable extension="VK_AMD_shader_ballot"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_fragment_mask">
+            <enable extension="VK_AMD_shader_fragment_mask"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_image_load_store_lod">
+            <enable extension="VK_AMD_shader_image_load_store_lod"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_trinary_minmax">
+            <enable extension="VK_AMD_shader_trinary_minmax"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_texture_gather_bias_lod">
+            <enable extension="VK_AMD_texture_gather_bias_lod"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMD_shader_early_and_late_fragment_tests">
+            <enable extension="VK_AMD_shader_early_and_late_fragment_tests"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_shader_draw_parameters">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_shader_draw_parameters"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_8bit_storage">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_KHR_8bit_storage"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_16bit_storage">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_16bit_storage"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_shader_clock">
+            <enable extension="VK_KHR_shader_clock"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_float_controls">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_KHR_shader_float_controls"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_storage_buffer_storage_class">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_storage_buffer_storage_class"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_post_depth_coverage">
+            <enable extension="VK_EXT_post_depth_coverage"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_stencil_export">
+            <enable extension="VK_EXT_shader_stencil_export"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_shader_ballot">
+            <enable extension="VK_EXT_shader_subgroup_ballot"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_subgroup_vote">
+            <enable extension="VK_EXT_shader_subgroup_vote"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_sample_mask_override_coverage">
+            <enable extension="VK_NV_sample_mask_override_coverage"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_geometry_shader_passthrough">
+            <enable extension="VK_NV_geometry_shader_passthrough"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_mesh_shader">
+            <enable extension="VK_NV_mesh_shader"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_viewport_array2">
+            <enable extension="VK_NV_viewport_array2"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_shader_subgroup_partitioned">
+            <enable extension="VK_NV_shader_subgroup_partitioned"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_shader_invocation_reorder">
+            <enable extension="VK_NV_ray_tracing_invocation_reorder"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_viewport_index_layer">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_EXT_shader_viewport_index_layer"/>
+        </spirvextension>
+        <spirvextension name="SPV_NVX_multiview_per_view_attributes">
+            <enable extension="VK_NVX_multiview_per_view_attributes"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_descriptor_indexing">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_EXT_descriptor_indexing"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_vulkan_memory_model">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_KHR_vulkan_memory_model"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_compute_shader_derivatives">
+            <enable extension="VK_NV_compute_shader_derivatives"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_fragment_shader_barycentric">
+            <enable extension="VK_NV_fragment_shader_barycentric"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_shader_image_footprint">
+            <enable extension="VK_NV_shader_image_footprint"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_shading_rate">
+            <enable extension="VK_NV_shading_rate_image"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_ray_tracing">
+            <enable extension="VK_NV_ray_tracing"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_ray_tracing">
+            <enable extension="VK_KHR_ray_tracing_pipeline"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_ray_query">
+            <enable extension="VK_KHR_ray_query"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_ray_cull_mask">
+            <enable extension="VK_KHR_ray_tracing_maintenance1"/>
+        </spirvextension>
+        <spirvextension name="SPV_GOOGLE_hlsl_functionality1">
+            <enable extension="VK_GOOGLE_hlsl_functionality1"/>
+        </spirvextension>
+        <spirvextension name="SPV_GOOGLE_user_type">
+            <enable extension="VK_GOOGLE_user_type"/>
+        </spirvextension>
+        <spirvextension name="SPV_GOOGLE_decorate_string">
+            <enable extension="VK_GOOGLE_decorate_string"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_fragment_invocation_density">
+            <enable extension="VK_EXT_fragment_density_map"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_physical_storage_buffer">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_KHR_buffer_device_address"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_physical_storage_buffer">
+            <enable extension="VK_EXT_buffer_device_address"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_cooperative_matrix">
+            <enable extension="VK_NV_cooperative_matrix"/>
+        </spirvextension>
+        <spirvextension name="SPV_NV_shader_sm_builtins">
+            <enable extension="VK_NV_shader_sm_builtins"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_fragment_shader_interlock">
+            <enable extension="VK_EXT_fragment_shader_interlock"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_demote_to_helper_invocation">
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_EXT_shader_demote_to_helper_invocation"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_fragment_shading_rate">
+            <enable extension="VK_KHR_fragment_shading_rate"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_non_semantic_info">
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_shader_non_semantic_info"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_image_int64">
+            <enable extension="VK_EXT_shader_image_atomic_int64"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_terminate_invocation">
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_shader_terminate_invocation"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_multiview">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_multiview"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_workgroup_memory_explicit_layout">
+            <enable extension="VK_KHR_workgroup_memory_explicit_layout"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_atomic_float_add">
+            <enable extension="VK_EXT_shader_atomic_float"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_fragment_shader_barycentric">
+            <enable extension="VK_KHR_fragment_shader_barycentric"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_subgroup_uniform_control_flow">
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_shader_subgroup_uniform_control_flow"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_atomic_float_min_max">
+            <enable extension="VK_EXT_shader_atomic_float2"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_atomic_float16_add">
+            <enable extension="VK_EXT_shader_atomic_float2"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_fragment_fully_covered">
+            <enable extension="VK_EXT_conservative_rasterization"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_integer_dot_product">
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_shader_integer_dot_product"/>
+        </spirvextension>
+        <spirvextension name="SPV_INTEL_shader_integer_functions2">
+            <enable extension="VK_INTEL_shader_integer_functions2"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_device_group">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_device_group"/>
+        </spirvextension>
+        <spirvextension name="SPV_QCOM_image_processing">
+            <enable extension="VK_QCOM_image_processing"/>
+        </spirvextension>
+        <spirvextension name="SPV_QCOM_image_processing2">
+            <enable extension="VK_QCOM_image_processing2"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_mesh_shader">
+            <enable extension="VK_EXT_mesh_shader"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_ray_tracing_position_fetch">
+            <enable extension="VK_KHR_ray_tracing_position_fetch"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_shader_tile_image">
+            <enable extension="VK_EXT_shader_tile_image"/>
+        </spirvextension>
+        <spirvextension name="SPV_EXT_opacity_micromap">
+            <enable extension="VK_EXT_opacity_micromap"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_cooperative_matrix">
+            <enable extension="VK_KHR_cooperative_matrix"/>
+        </spirvextension>
+        <spirvextension name="SPV_ARM_core_builtins">
+            <enable extension="VK_ARM_shader_core_builtins"/>
+        </spirvextension>
+        <spirvextension name="SPV_AMDX_shader_enqueue">
+            <enable extension="VK_AMDX_shader_enqueue"/>
+        </spirvextension>
+    </spirvextensions>
+    <spirvcapabilities comment="SPIR-V Capabilities allowed in Vulkan and what is required to use it">
+        <spirvcapability name="Matrix">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Shader">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="InputAttachment">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Sampled1D">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Image1D">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SampledBuffer">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageBuffer">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageQuery">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="DerivativeControl">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Geometry">
+            <enable struct="VkPhysicalDeviceFeatures" feature="geometryShader" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Tessellation">
+            <enable struct="VkPhysicalDeviceFeatures" feature="tessellationShader" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Float64">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderFloat64" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Int64">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderInt64" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Int64Atomics">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderBufferInt64Atomics" requires="VK_VERSION_1_2,VK_KHR_shader_atomic_int64"/>
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderSharedInt64Atomics" requires="VK_VERSION_1_2,VK_KHR_shader_atomic_int64"/>
+            <enable struct="VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT" feature="shaderImageInt64Atomics" requires="VK_EXT_shader_image_atomic_int64"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat16AddEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderBufferFloat16AtomicAdd" requires="VK_EXT_shader_atomic_float2"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderSharedFloat16AtomicAdd" requires="VK_EXT_shader_atomic_float2"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat32AddEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" feature="shaderBufferFloat32AtomicAdd" requires="VK_EXT_shader_atomic_float"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" feature="shaderSharedFloat32AtomicAdd" requires="VK_EXT_shader_atomic_float"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" feature="shaderImageFloat32AtomicAdd" requires="VK_EXT_shader_atomic_float"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat64AddEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" feature="shaderBufferFloat64AtomicAdd" requires="VK_EXT_shader_atomic_float"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloatFeaturesEXT" feature="shaderSharedFloat64AtomicAdd" requires="VK_EXT_shader_atomic_float"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat16MinMaxEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderBufferFloat16AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderSharedFloat16AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat32MinMaxEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderBufferFloat32AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderSharedFloat32AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderImageFloat32AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+        </spirvcapability>
+        <spirvcapability name="AtomicFloat64MinMaxEXT">
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderBufferFloat64AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+            <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderSharedFloat64AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/>
+        </spirvcapability>
+        <spirvcapability name="Int64ImageEXT">
+            <enable struct="VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT" feature="shaderImageInt64Atomics" requires="VK_EXT_shader_image_atomic_int64"/>
+        </spirvcapability>
+        <spirvcapability name="Int16">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderInt16" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="TessellationPointSize">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderTessellationAndGeometryPointSize" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="GeometryPointSize">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderTessellationAndGeometryPointSize" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageGatherExtended">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderImageGatherExtended" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageMultisample">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageMultisample" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="UniformBufferArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderUniformBufferArrayDynamicIndexing" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SampledImageArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderSampledImageArrayDynamicIndexing" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="StorageBufferArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageBufferArrayDynamicIndexing" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageArrayDynamicIndexing" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ClipDistance">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderClipDistance" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="CullDistance">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderCullDistance" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageCubeArray">
+            <enable struct="VkPhysicalDeviceFeatures" feature="imageCubeArray" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SampleRateShading">
+            <enable struct="VkPhysicalDeviceFeatures" feature="sampleRateShading" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SparseResidency">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderResourceResidency" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="MinLod">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderResourceMinLod" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SampledCubeArray">
+            <enable struct="VkPhysicalDeviceFeatures" feature="imageCubeArray" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageMSArray">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageMultisample" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageExtendedFormats">
+            <enable version="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="InterpolationFunction">
+            <enable struct="VkPhysicalDeviceFeatures" feature="sampleRateShading" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageReadWithoutFormat">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageReadWithoutFormat" requires="VK_VERSION_1_0"/>
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_format_feature_flags2"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageWriteWithoutFormat">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageWriteWithoutFormat" requires="VK_VERSION_1_0"/>
+            <enable version="VK_VERSION_1_3"/>
+            <enable extension="VK_KHR_format_feature_flags2"/>
+        </spirvcapability>
+        <spirvcapability name="MultiViewport">
+            <enable struct="VkPhysicalDeviceFeatures" feature="multiViewport" requires="VK_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="DrawParameters">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="shaderDrawParameters" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDeviceShaderDrawParametersFeatures" feature="shaderDrawParameters" requires="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_shader_draw_parameters"/>
+        </spirvcapability>
+        <spirvcapability name="MultiView">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="multiview" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDeviceMultiviewFeatures" feature="multiview" requires="VK_KHR_multiview"/>
+        </spirvcapability>
+        <spirvcapability name="DeviceGroup">
+            <enable version="VK_VERSION_1_1"/>
+            <enable extension="VK_KHR_device_group"/>
+        </spirvcapability>
+        <spirvcapability name="VariablePointersStorageBuffer">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="variablePointersStorageBuffer" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDeviceVariablePointersFeatures" feature="variablePointersStorageBuffer" requires="VK_KHR_variable_pointers"/>
+        </spirvcapability>
+        <spirvcapability name="VariablePointers">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="variablePointers" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDeviceVariablePointersFeatures" feature="variablePointers" requires="VK_KHR_variable_pointers"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderClockKHR">
+            <enable extension="VK_KHR_shader_clock"/>
+        </spirvcapability>
+        <spirvcapability name="StencilExportEXT">
+            <enable extension="VK_EXT_shader_stencil_export"/>
+        </spirvcapability>
+        <spirvcapability name="SubgroupBallotKHR">
+            <enable extension="VK_EXT_shader_subgroup_ballot"/>
+        </spirvcapability>
+        <spirvcapability name="SubgroupVoteKHR">
+            <enable extension="VK_EXT_shader_subgroup_vote"/>
+        </spirvcapability>
+        <spirvcapability name="ImageReadWriteLodAMD">
+            <enable extension="VK_AMD_shader_image_load_store_lod"/>
+        </spirvcapability>
+        <spirvcapability name="ImageGatherBiasLodAMD">
+            <enable extension="VK_AMD_texture_gather_bias_lod"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentMaskAMD">
+            <enable extension="VK_AMD_shader_fragment_mask"/>
+        </spirvcapability>
+        <spirvcapability name="SampleMaskOverrideCoverageNV">
+            <enable extension="VK_NV_sample_mask_override_coverage"/>
+        </spirvcapability>
+        <spirvcapability name="GeometryShaderPassthroughNV">
+            <enable extension="VK_NV_geometry_shader_passthrough"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderViewportIndex">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderOutputViewportIndex" requires="VK_VERSION_1_2"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderLayer">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderOutputLayer" requires="VK_VERSION_1_2"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderViewportIndexLayerEXT">
+            <enable extension="VK_EXT_shader_viewport_index_layer"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderViewportIndexLayerNV">
+            <enable extension="VK_NV_viewport_array2"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderViewportMaskNV">
+            <enable extension="VK_NV_viewport_array2"/>
+        </spirvcapability>
+        <spirvcapability name="PerViewAttributesNV">
+            <enable extension="VK_NVX_multiview_per_view_attributes"/>
+        </spirvcapability>
+        <spirvcapability name="StorageBuffer16BitAccess">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="storageBuffer16BitAccess" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDevice16BitStorageFeatures" feature="storageBuffer16BitAccess" requires="VK_KHR_16bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="UniformAndStorageBuffer16BitAccess">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="uniformAndStorageBuffer16BitAccess" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDevice16BitStorageFeatures" feature="uniformAndStorageBuffer16BitAccess" requires="VK_KHR_16bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="StoragePushConstant16">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="storagePushConstant16" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDevice16BitStorageFeatures" feature="storagePushConstant16" requires="VK_KHR_16bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="StorageInputOutput16">
+            <enable struct="VkPhysicalDeviceVulkan11Features" feature="storageInputOutput16" requires="VK_VERSION_1_2"/>
+            <enable struct="VkPhysicalDevice16BitStorageFeatures" feature="storageInputOutput16" requires="VK_KHR_16bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniform">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_BASIC_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformVote">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_VOTE_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformArithmetic">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_ARITHMETIC_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformBallot">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_BALLOT_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformShuffle">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_SHUFFLE_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformShuffleRelative">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformClustered">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_CLUSTERED_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformQuad">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_QUAD_BIT" requires="VK_VERSION_1_1"/>
+        </spirvcapability>
+        <spirvcapability name="GroupNonUniformPartitionedNV">
+            <enable property="VkPhysicalDeviceVulkan11Properties" member="subgroupSupportedOperations" value="VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV" requires="VK_NV_shader_subgroup_partitioned"/>
+        </spirvcapability>
+        <spirvcapability name="SampleMaskPostDepthCoverage">
+            <enable extension="VK_EXT_post_depth_coverage"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderNonUniform">
+            <enable version="VK_VERSION_1_2"/>
+            <enable extension="VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="RuntimeDescriptorArray">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="runtimeDescriptorArray" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="InputAttachmentArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderInputAttachmentArrayDynamicIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="UniformTexelBufferArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderUniformTexelBufferArrayDynamicIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="StorageTexelBufferArrayDynamicIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderStorageTexelBufferArrayDynamicIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="UniformBufferArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderUniformBufferArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="SampledImageArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderSampledImageArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="StorageBufferArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderStorageBufferArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderStorageImageArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="InputAttachmentArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderInputAttachmentArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="UniformTexelBufferArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderUniformTexelBufferArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="StorageTexelBufferArrayNonUniformIndexing">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderStorageTexelBufferArrayNonUniformIndexing" requires="VK_VERSION_1_2,VK_EXT_descriptor_indexing"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentFullyCoveredEXT">
+            <enable extension="VK_EXT_conservative_rasterization"/>
+        </spirvcapability>
+        <spirvcapability name="Float16">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderFloat16" requires="VK_VERSION_1_2,VK_KHR_shader_float16_int8"/>
+            <enable extension="VK_AMD_gpu_shader_half_float"/>
+        </spirvcapability>
+        <spirvcapability name="Int8">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="shaderInt8" requires="VK_VERSION_1_2,VK_KHR_shader_float16_int8"/>
+        </spirvcapability>
+        <spirvcapability name="StorageBuffer8BitAccess">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="storageBuffer8BitAccess" requires="VK_VERSION_1_2,VK_KHR_8bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="UniformAndStorageBuffer8BitAccess">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="uniformAndStorageBuffer8BitAccess" requires="VK_VERSION_1_2,VK_KHR_8bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="StoragePushConstant8">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="storagePushConstant8" requires="VK_VERSION_1_2,VK_KHR_8bit_storage"/>
+        </spirvcapability>
+        <spirvcapability name="VulkanMemoryModel">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="vulkanMemoryModel" requires="VK_VERSION_1_2,VK_KHR_vulkan_memory_model"/>
+        </spirvcapability>
+        <spirvcapability name="VulkanMemoryModelDeviceScope">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="vulkanMemoryModelDeviceScope" requires="VK_VERSION_1_2,VK_KHR_vulkan_memory_model"/>
+        </spirvcapability>
+        <spirvcapability name="DenormPreserve">
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormPreserveFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormPreserveFloat32" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormPreserveFloat64" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+        </spirvcapability>
+        <spirvcapability name="DenormFlushToZero">
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormFlushToZeroFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormFlushToZeroFloat32" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderDenormFlushToZeroFloat64" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+        </spirvcapability>
+        <spirvcapability name="SignedZeroInfNanPreserve">
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderSignedZeroInfNanPreserveFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderSignedZeroInfNanPreserveFloat32" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderSignedZeroInfNanPreserveFloat64" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+        </spirvcapability>
+        <spirvcapability name="RoundingModeRTE">
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTEFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTEFloat32" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTEFloat64" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+        </spirvcapability>
+        <spirvcapability name="RoundingModeRTZ">
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTZFloat16" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTZFloat32" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+            <enable property="VkPhysicalDeviceVulkan12Properties" member="shaderRoundingModeRTZFloat64" value="VK_TRUE" requires="VK_VERSION_1_2,VK_KHR_shader_float_controls"/>
+        </spirvcapability>
+        <spirvcapability name="ComputeDerivativeGroupQuadsNV">
+            <enable struct="VkPhysicalDeviceComputeShaderDerivativesFeaturesNV" feature="computeDerivativeGroupQuads" requires="VK_NV_compute_shader_derivatives"/>
+        </spirvcapability>
+        <spirvcapability name="ComputeDerivativeGroupLinearNV">
+            <enable struct="VkPhysicalDeviceComputeShaderDerivativesFeaturesNV" feature="computeDerivativeGroupLinear" requires="VK_NV_compute_shader_derivatives"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentBarycentricNV">
+            <enable struct="VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV" feature="fragmentShaderBarycentric" requires="VK_NV_fragment_shader_barycentric"/>
+        </spirvcapability>
+        <spirvcapability name="ImageFootprintNV">
+            <enable struct="VkPhysicalDeviceShaderImageFootprintFeaturesNV" feature="imageFootprint" requires="VK_NV_shader_image_footprint"/>
+        </spirvcapability>
+        <spirvcapability name="ShadingRateNV">
+            <enable struct="VkPhysicalDeviceShadingRateImageFeaturesNV" feature="shadingRateImage" requires="VK_NV_shading_rate_image"/>
+        </spirvcapability>
+        <spirvcapability name="MeshShadingNV">
+            <enable extension="VK_NV_mesh_shader"/>
+        </spirvcapability>
+        <spirvcapability name="RayTracingKHR">
+            <enable struct="VkPhysicalDeviceRayTracingPipelineFeaturesKHR" feature="rayTracingPipeline" requires="VK_KHR_ray_tracing_pipeline"/>
+        </spirvcapability>
+        <spirvcapability name="RayQueryKHR">
+            <enable struct="VkPhysicalDeviceRayQueryFeaturesKHR" feature="rayQuery" requires="VK_KHR_ray_query"/>
+        </spirvcapability>
+        <spirvcapability name="RayTraversalPrimitiveCullingKHR">
+            <enable struct="VkPhysicalDeviceRayTracingPipelineFeaturesKHR" feature="rayTraversalPrimitiveCulling" requires="VK_KHR_ray_tracing_pipeline"/>
+            <enable struct="VkPhysicalDeviceRayQueryFeaturesKHR" feature="rayQuery" requires="VK_KHR_ray_query"/>
+        </spirvcapability>
+        <spirvcapability name="RayCullMaskKHR">
+            <enable struct="VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR" feature="rayTracingMaintenance1" requires="VK_KHR_ray_tracing_maintenance1"/>
+        </spirvcapability>
+        <spirvcapability name="RayTracingNV">
+            <enable extension="VK_NV_ray_tracing"/>
+        </spirvcapability>
+        <spirvcapability name="RayTracingMotionBlurNV">
+            <enable struct="VkPhysicalDeviceRayTracingMotionBlurFeaturesNV" feature="rayTracingMotionBlur" requires="VK_NV_ray_tracing_motion_blur"/>
+        </spirvcapability>
+        <spirvcapability name="TransformFeedback">
+            <enable struct="VkPhysicalDeviceTransformFeedbackFeaturesEXT" feature="transformFeedback" requires="VK_EXT_transform_feedback"/>
+        </spirvcapability>
+        <spirvcapability name="GeometryStreams">
+            <enable struct="VkPhysicalDeviceTransformFeedbackFeaturesEXT" feature="geometryStreams" requires="VK_EXT_transform_feedback"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentDensityEXT">
+            <enable struct="VkPhysicalDeviceFragmentDensityMapFeaturesEXT" feature="fragmentDensityMap" requires="VK_EXT_fragment_density_map"/>
+        </spirvcapability>
+        <spirvcapability name="PhysicalStorageBufferAddresses">
+            <enable struct="VkPhysicalDeviceVulkan12Features" feature="bufferDeviceAddress" requires="VK_VERSION_1_2,VK_KHR_buffer_device_address"/>
+            <enable struct="VkPhysicalDeviceBufferDeviceAddressFeaturesEXT" feature="bufferDeviceAddress" requires="VK_EXT_buffer_device_address" alias="bufferDeviceAddressEXT"/>
+        </spirvcapability>
+        <spirvcapability name="CooperativeMatrixNV">
+            <enable struct="VkPhysicalDeviceCooperativeMatrixFeaturesNV" feature="cooperativeMatrix" requires="VK_NV_cooperative_matrix"/>
+        </spirvcapability>
+        <spirvcapability name="IntegerFunctions2INTEL">
+            <enable struct="VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL" feature="shaderIntegerFunctions2" requires="VK_INTEL_shader_integer_functions2"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderSMBuiltinsNV">
+            <enable struct="VkPhysicalDeviceShaderSMBuiltinsFeaturesNV" feature="shaderSMBuiltins" requires="VK_NV_shader_sm_builtins"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentShaderSampleInterlockEXT">
+            <enable struct="VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT" feature="fragmentShaderSampleInterlock" requires="VK_EXT_fragment_shader_interlock"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentShaderPixelInterlockEXT">
+            <enable struct="VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT" feature="fragmentShaderPixelInterlock" requires="VK_EXT_fragment_shader_interlock"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentShaderShadingRateInterlockEXT">
+            <enable struct="VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT" feature="fragmentShaderShadingRateInterlock" requires="VK_EXT_fragment_shader_interlock"/>
+            <enable struct="VkPhysicalDeviceShadingRateImageFeaturesNV" feature="shadingRateImage" requires="VK_NV_shading_rate_image"/>
+        </spirvcapability>
+        <spirvcapability name="DemoteToHelperInvocationEXT">
+            <enable struct="VkPhysicalDeviceVulkan13Features" feature="shaderDemoteToHelperInvocation" requires="VK_VERSION_1_3,VK_EXT_shader_demote_to_helper_invocation"/>
+            <enable struct="VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT" feature="shaderDemoteToHelperInvocation" requires="VK_EXT_shader_demote_to_helper_invocation"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentShadingRateKHR">
+            <enable struct="VkPhysicalDeviceFragmentShadingRateFeaturesKHR" feature="pipelineFragmentShadingRate" requires="VK_KHR_fragment_shading_rate"/>
+            <enable struct="VkPhysicalDeviceFragmentShadingRateFeaturesKHR" feature="primitiveFragmentShadingRate" requires="VK_KHR_fragment_shading_rate"/>
+            <enable struct="VkPhysicalDeviceFragmentShadingRateFeaturesKHR" feature="attachmentFragmentShadingRate" requires="VK_KHR_fragment_shading_rate"/>
+        </spirvcapability>
+        <spirvcapability name="WorkgroupMemoryExplicitLayoutKHR">
+            <enable struct="VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR" feature="workgroupMemoryExplicitLayout" requires="VK_KHR_workgroup_memory_explicit_layout"/>
+        </spirvcapability>
+        <spirvcapability name="WorkgroupMemoryExplicitLayout8BitAccessKHR">
+            <enable struct="VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR" feature="workgroupMemoryExplicitLayout8BitAccess" requires="VK_KHR_workgroup_memory_explicit_layout"/>
+        </spirvcapability>
+        <spirvcapability name="WorkgroupMemoryExplicitLayout16BitAccessKHR">
+            <enable struct="VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR" feature="workgroupMemoryExplicitLayout16BitAccess" requires="VK_KHR_workgroup_memory_explicit_layout"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductInputAllKHR">
+            <enable struct="VkPhysicalDeviceVulkan13Features" feature="shaderIntegerDotProduct" requires="VK_VERSION_1_3,VK_KHR_shader_integer_dot_product"/>
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductInput4x8BitKHR">
+            <enable struct="VkPhysicalDeviceVulkan13Features" feature="shaderIntegerDotProduct" requires="VK_VERSION_1_3,VK_KHR_shader_integer_dot_product"/>
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductInput4x8BitPackedKHR">
+            <enable struct="VkPhysicalDeviceVulkan13Features" feature="shaderIntegerDotProduct" requires="VK_VERSION_1_3,VK_KHR_shader_integer_dot_product"/>
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductKHR">
+            <enable struct="VkPhysicalDeviceVulkan13Features" feature="shaderIntegerDotProduct" requires="VK_VERSION_1_3,VK_KHR_shader_integer_dot_product"/>
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="FragmentBarycentricKHR">
+            <enable struct="VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR" feature="fragmentShaderBarycentric" requires="VK_KHR_fragment_shader_barycentric"/>
+        </spirvcapability>
+        <spirvcapability name="TextureSampleWeightedQCOM">
+            <enable struct="VkPhysicalDeviceImageProcessingFeaturesQCOM" feature="textureSampleWeighted" requires="VK_QCOM_image_processing"/>
+        </spirvcapability>
+        <spirvcapability name="TextureBoxFilterQCOM">
+            <enable struct="VkPhysicalDeviceImageProcessingFeaturesQCOM" feature="textureBoxFilter" requires="VK_QCOM_image_processing"/>
+        </spirvcapability>
+        <spirvcapability name="TextureBlockMatchQCOM">
+            <enable struct="VkPhysicalDeviceImageProcessingFeaturesQCOM" feature="textureBlockMatch" requires="VK_QCOM_image_processing"/>
+        </spirvcapability>
+        <spirvcapability name="TextureBlockMatch2QCOM">
+            <enable struct="VkPhysicalDeviceImageProcessing2FeaturesQCOM" feature="textureBlockMatch2" requires="VK_QCOM_image_processing2"/>
+        </spirvcapability>
+        <spirvcapability name="MeshShadingEXT">
+            <enable extension="VK_EXT_mesh_shader"/>
+        </spirvcapability>
+        <spirvcapability name="RayTracingOpacityMicromapEXT">
+            <enable extension="VK_EXT_opacity_micromap"/>
+        </spirvcapability>
+        <spirvcapability name="CoreBuiltinsARM">
+            <enable struct="VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM" feature="shaderCoreBuiltins" requires="VK_ARM_shader_core_builtins"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderInvocationReorderNV">
+            <enable extension="VK_NV_ray_tracing_invocation_reorder"/>
+        </spirvcapability>
+        <spirvcapability name="ClusterCullingShadingHUAWEI">
+            <enable struct="VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI" feature="clustercullingShader" requires="VK_HUAWEI_cluster_culling_shader"/>
+        </spirvcapability>
+        <spirvcapability name="RayTracingPositionFetchKHR">
+            <enable struct="VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR" feature="rayTracingPositionFetch" requires="VK_KHR_ray_tracing_position_fetch"/>
+        </spirvcapability>
+        <spirvcapability name="TileImageColorReadAccessEXT">
+            <enable struct="VkPhysicalDeviceShaderTileImageFeaturesEXT" feature="shaderTileImageColorReadAccess" requires="VK_EXT_shader_tile_image"/>
+        </spirvcapability>
+        <spirvcapability name="TileImageDepthReadAccessEXT">
+            <enable struct="VkPhysicalDeviceShaderTileImageFeaturesEXT" feature="shaderTileImageDepthReadAccess" requires="VK_EXT_shader_tile_image"/>
+        </spirvcapability>
+        <spirvcapability name="TileImageStencilReadAccessEXT">
+            <enable struct="VkPhysicalDeviceShaderTileImageFeaturesEXT" feature="shaderTileImageStencilReadAccess" requires="VK_EXT_shader_tile_image"/>
+        </spirvcapability>
+        <spirvcapability name="CooperativeMatrixKHR">
+            <enable struct="VkPhysicalDeviceCooperativeMatrixFeaturesKHR" feature="cooperativeMatrix" requires="VK_KHR_cooperative_matrix"/>
+        </spirvcapability>
+        <spirvcapability name="ShaderEnqueueAMDX">
+            <enable struct="VkPhysicalDeviceShaderEnqueueFeaturesAMDX" feature="shaderEnqueue" requires="VK_AMDX_shader_enqueue"/>
+        </spirvcapability>
+    </spirvcapabilities>
+    <sync comment="Machine readable representation of the synchronization objects and their mappings">
+        <syncstage name="VK_PIPELINE_STAGE_2_NONE" alias="VK_PIPELINE_STAGE_NONE">
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT" alias="VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT">
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT" alias="VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT">
+            <syncsupport queues="graphics,compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT" alias="VK_PIPELINE_STAGE_VERTEX_INPUT_BIT">
+            <syncsupport queues="graphics"/>
+            <syncequivalent stage="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT,VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT" alias="VK_PIPELINE_STAGE_VERTEX_SHADER_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT" alias="VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT" alias="VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT" alias="VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT" alias="VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT" alias="VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT" alias="VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT" alias="VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT" alias="VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT">
+            <syncsupport queues="compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT" alias="VK_PIPELINE_STAGE_TRANSFER_BIT">
+            <syncsupport queues="graphics,compute,transfer"/>
+            <syncequivalent stage="VK_PIPELINE_STAGE_2_COPY_BIT,VK_PIPELINE_STAGE_2_BLIT_BIT,VK_PIPELINE_STAGE_2_RESOLVE_BIT,VK_PIPELINE_STAGE_2_CLEAR_BIT,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT" alias="VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT">
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_HOST_BIT" alias="VK_PIPELINE_STAGE_HOST_BIT">
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT" alias="VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT">
+            <syncsupport queues="graphics"/>
+            <syncequivalent stage="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT,VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT" alias="VK_PIPELINE_STAGE_ALL_COMMANDS_BIT">
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_COPY_BIT">
+            <syncsupport queues="graphics,compute,transfer"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_RESOLVE_BIT">
+            <syncsupport queues="graphics,compute,transfer"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_BLIT_BIT">
+            <syncsupport queues="graphics,compute,transfer"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_CLEAR_BIT">
+            <syncsupport queues="graphics,compute,transfer"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT">
+            <syncsupport queues="graphics"/>
+            <syncequivalent stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR">
+            <syncsupport queues="decode"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR">
+            <syncsupport queues="encode"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT" alias="VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT" alias="VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT">
+            <syncsupport queues="graphics,compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV" alias="VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV">
+            <syncsupport queues="graphics,compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR" alias="VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR" alias="VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR">
+            <syncsupport queues="compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR" alias="VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR">
+            <syncsupport queues="compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT" alias="VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT" alias="VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT" alias="VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR">
+            <syncsupport queues="graphics,compute,transfer"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT">
+            <syncsupport queues="compute"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI">
+            <syncsupport queues="graphics"/>
+        </syncstage>
+        <syncstage name="VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV">
+            <syncsupport queues="opticalflow"/>
+        </syncstage>
+        <syncaccess name="VK_ACCESS_2_NONE" alias="VK_ACCESS_NONE">
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT" alias="VK_ACCESS_INDIRECT_COMMAND_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_INDEX_READ_BIT" alias="VK_ACCESS_INDEX_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT" alias="VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_UNIFORM_READ_BIT" alias="VK_ACCESS_UNIFORM_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT" alias="VK_ACCESS_INPUT_ATTACHMENT_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_READ_BIT" alias="VK_ACCESS_SHADER_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT,VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+            <syncequivalent access="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT,VK_ACCESS_2_SHADER_STORAGE_READ_BIT,VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_WRITE_BIT" alias="VK_ACCESS_SHADER_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+            <syncequivalent access="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT" alias="VK_ACCESS_COLOR_ATTACHMENT_READ_BIT">
+            <comment>Fragment shader stage is added by the VK_EXT_shader_tile_image extension</comment>
+            <syncsupport stage="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT" alias="VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT" alias="VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT">
+            <comment>Fragment shader stage is added by the VK_EXT_shader_tile_image extension</comment>
+            <syncsupport stage="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT" alias="VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_TRANSFER_READ_BIT" alias="VK_ACCESS_TRANSFER_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,VK_PIPELINE_STAGE_2_COPY_BIT,VK_PIPELINE_STAGE_2_RESOLVE_BIT,VK_PIPELINE_STAGE_2_BLIT_BIT,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_TRANSFER_WRITE_BIT" alias="VK_ACCESS_TRANSFER_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,VK_PIPELINE_STAGE_2_COPY_BIT,VK_PIPELINE_STAGE_2_RESOLVE_BIT,VK_PIPELINE_STAGE_2_BLIT_BIT,VK_PIPELINE_STAGE_2_CLEAR_BIT,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_HOST_READ_BIT" alias="VK_ACCESS_HOST_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_HOST_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_HOST_WRITE_BIT" alias="VK_ACCESS_HOST_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_HOST_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_MEMORY_READ_BIT" alias="VK_ACCESS_MEMORY_READ_BIT">
+            <comment>TODO/Suggestion. Introduce 'synclist' (could be a different name) element
+            that specifies the list of stages, accesses, etc. This list can be used by
+            'syncaccess' or 'syncstage' elements. For example, 'syncsupport' in addition to the
+            'stage' attribute can support 'list' attribute to reference 'synclist'.
+            We can have the lists defined for ALL stages and it can be shared between MEMORY_READ
+            and MEMORY_WRITE accesses. Similarly, ALL shader stages list is often used. This proposal
+            is a way to fix duplication problem. When new stage is added multiple places needs to be
+            updated. It is potential source of bugs. The expectation such setup will produce more
+            robust system and also more simple structure to review and validate.
+            </comment>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_MEMORY_WRITE_BIT" alias="VK_ACCESS_MEMORY_WRITE_BIT">
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_STORAGE_READ_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT" alias="VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT" alias="VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT" alias="VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT" alias="VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV" alias="VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV" alias="VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR" alias="VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR" alias="VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR" alias="VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT" alias="VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT" alias="VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT,VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI,VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_MICROMAP_READ_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT,VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"/>
+        </syncaccess>
+        <syncaccess name="VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV">
+            <syncsupport stage="VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"/>
+        </syncaccess>
+        <syncpipeline name="graphics primitive">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR</syncpipelinestage>
+            <syncpipelinestage order="None" before="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT">VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT</syncpipelinestage>
+            <syncpipelinestage order="None">VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="graphics mesh" depends="VK_NV_mesh_shader,VK_EXT_mesh_shader">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR</syncpipelinestage>
+            <syncpipelinestage order="None" before="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT">VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT</syncpipelinestage>
+            <syncpipelinestage order="None">VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="compute">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT</syncpipelinestage>
+            <syncpipelinestage order="None">VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="transfer">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_TRANSFER_BIT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="host">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_HOST_BIT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="subpass shading" depends="VK_HUAWEI_subpass_shading">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="command preprocessing" depends="VK_NV_device_generated_commands">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="acceleration structure build" depends="VK_KHR_acceleration_structure,VK_NV_ray_tracing">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="acceleration structure copy" depends="VK_KHR_acceleration_structure,VK_NV_ray_tracing">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="opacity micromap" depends="VK_EXT_opacity_micromap">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="ray tracing" depends="VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT</syncpipelinestage>
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="video decode" depends="VK_KHR_video_decode_queue">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="video encode" depends="VK_KHR_video_encode_queue">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR</syncpipelinestage>
+        </syncpipeline>
+        <syncpipeline name="optical flow" depends="VK_NV_optical_flow">
+            <syncpipelinestage>VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV</syncpipelinestage>
+        </syncpipeline>
+    </sync>
+</registry>
